summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-25 08:15:24 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-05-25 08:15:24 -0700
commitfa91a01aee5d4a80ca6c80f722116b850f09996c (patch)
treef72740e60d3c3d4f0ab144e88c03d1f134944ce3
parent96f37d6d1b390f6690858789706ee6ec25bc1677 (diff)
parentfeebf8e7a79ad68b04a1a948e2b8078d6e5f0048 (diff)
downloadexternal_webkit-fa91a01aee5d4a80ca6c80f722116b850f09996c.zip
external_webkit-fa91a01aee5d4a80ca6c80f722116b850f09996c.tar.gz
external_webkit-fa91a01aee5d4a80ca6c80f722116b850f09996c.tar.bz2
Merge changes I78ff6a85,Ic85c6405,Ibf903baa,I3a0459db,I35140385,I54790419,I6bfe5d24,Ia9f39b83,I5bcecd5a,I1de96683,I543c6810,I8a5b0878,I0ae670bf,Ide4d58dc,I28ebaf3d,I499d6631,Ie5090e0d,I6d3e5f1f
* changes: Merge WebKit at r78450: Update ThirdPartyProject.prop Merge WebKit at r78450: Add new Font::canExpandAroundIdeographsInComplexText() Merge WebKit at r78450: Add new ChromeClient::selectItemAlignmentFollowsMenuWritingDirection() Merge WebKit at r78450: FrameLoaderClient::didRunInsecureContent() signature changed Merge WebKit at r78450: HTMLAreaElement::getRect() renamed Merge WebKit at r78450: FrameLoader::url() removed Merge WebKit at r78450: HTMLParserQuirks removed Merge WebKit at r78450: TextRun::padding() renamed Merge WebKit at r78450: Use new FontMetrics Merge WebKit at r78450: GraphicsContext current path removed Merge WebKit at r78450: TransformationMatrix multiply methods renamed and meaning changed Merge WebKit at r78450: FontCustomPlatformData::fontPlatformData() signature changed Merge WebKit at r78450: IntRect::bottom()/right() renamed Merge WebKit at r78450: Fix remaining conflicts Merge WebKit at r78450: Fix conflicts due to new ENABLE_WEB_ARCHIVE guard Merge WebKit at r78450: Fix conflicts in media controls Merge WebKit at r78450: Fix Makefiles Merge WebKit at r78450: Initial merge by git.
-rw-r--r--LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-hash.js2
-rw-r--r--LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash-expected.txt2
-rw-r--r--LayoutTests/fast/encoding/css-charset-default-expected.txt2
-rw-r--r--LayoutTests/fast/encoding/css-charset-default.xhtml5
-rw-r--r--LayoutTests/fast/encoding/external-script-charset-expected.txt4
-rw-r--r--LayoutTests/fast/encoding/external-script-charset-koi-8.js1
-rw-r--r--LayoutTests/fast/encoding/external-script-charset.js2
-rw-r--r--LayoutTests/fast/encoding/external-script-charset.xhtml5
-rw-r--r--LayoutTests/fast/url/anchor-expected.txt7
-rw-r--r--LayoutTests/fast/url/file-expected.txt2
-rw-r--r--LayoutTests/fast/url/file-http-base-expected.txt4
-rw-r--r--LayoutTests/fast/url/path-expected.txt5
-rw-r--r--LayoutTests/fast/url/path-url-expected.txt2
-rw-r--r--LayoutTests/fast/url/port-expected.txt3
-rw-r--r--LayoutTests/fast/url/relative-expected.txt2
-rw-r--r--LayoutTests/fast/url/relative-unix-expected.txt2
-rw-r--r--LayoutTests/fast/url/relative-win-expected.txt2
-rw-r--r--LayoutTests/fast/url/scheme-expected.txt2
-rw-r--r--LayoutTests/fast/url/script-tests/anchor.js1
-rw-r--r--LayoutTests/fast/url/script-tests/path.js3
-rw-r--r--LayoutTests/fast/url/script-tests/port.js2
-rw-r--r--LayoutTests/fast/url/segments-expected.txt6
-rw-r--r--LayoutTests/fast/url/segments-from-data-url-expected.txt6
-rw-r--r--LayoutTests/fast/url/standard-url-expected.txt12
-rw-r--r--LayoutTests/http/conf/apache2-msys-httpd.conf709
-rw-r--r--LayoutTests/storage/indexeddb/create-object-store-options-expected.txt2
-rw-r--r--LayoutTests/storage/indexeddb/create-object-store-options.html2
-rw-r--r--LayoutTests/storage/indexeddb/cursor-delete-expected.txt8
-rw-r--r--LayoutTests/storage/indexeddb/cursor-delete.html8
-rw-r--r--LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt11
-rw-r--r--LayoutTests/storage/indexeddb/cursor-index-delete.html11
-rw-r--r--LayoutTests/storage/indexeddb/cursor-skip-deleted-expected.txt185
-rw-r--r--LayoutTests/storage/indexeddb/cursor-skip-deleted.html218
-rw-r--r--LayoutTests/storage/indexeddb/cursor-update-expected.txt283
-rw-r--r--LayoutTests/storage/indexeddb/cursor-update.html249
-rw-r--r--LayoutTests/storage/indexeddb/data-corruption-expected.txt69
-rw-r--r--LayoutTests/storage/indexeddb/data-corruption.html88
-rw-r--r--LayoutTests/storage/indexeddb/database-quota-expected.txt3
-rw-r--r--LayoutTests/storage/indexeddb/database-quota.html3
-rw-r--r--LayoutTests/storage/indexeddb/duplicates-expected.txt4
-rw-r--r--LayoutTests/storage/indexeddb/duplicates.html4
-rw-r--r--LayoutTests/storage/indexeddb/error-causes-abort-by-default-expected.txt107
-rw-r--r--LayoutTests/storage/indexeddb/error-causes-abort-by-default.html127
-rw-r--r--LayoutTests/storage/indexeddb/index-basics-expected.txt2
-rw-r--r--LayoutTests/storage/indexeddb/index-basics.html4
-rw-r--r--LayoutTests/storage/indexeddb/index-cursor.html4
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt42
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-autoincrement.html43
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics-expected.txt11
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics.html22
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-clear-expected.txt151
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-clear.html130
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-cursor.html4
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor-expected.txt4
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor.html4
-rw-r--r--LayoutTests/storage/indexeddb/request-event-propagation-expected.txt166
-rw-r--r--LayoutTests/storage/indexeddb/request-event-propagation.html272
-rw-r--r--LayoutTests/storage/indexeddb/transaction-after-close-expected.txt95
-rw-r--r--LayoutTests/storage/indexeddb/transaction-after-close.html105
-rw-r--r--LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt24
-rw-r--r--LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html24
-rw-r--r--LayoutTests/storage/indexeddb/transaction-basics.html6
-rw-r--r--LayoutTests/storage/indexeddb/transaction-event-propagation-expected.txt79
-rw-r--r--LayoutTests/storage/indexeddb/transaction-event-propagation.html153
-rw-r--r--LayoutTests/storage/indexeddb/tutorial.html24
-rw-r--r--PerformanceTests/ChangeLog187
-rw-r--r--PerformanceTests/PageLoad/ChangeLog46
-rw-r--r--PerformanceTests/Parser/ChangeLog11
-rw-r--r--PerformanceTests/Parser/resources/final-url-en82257
-rw-r--r--PerformanceTests/Parser/resources/runner.js4
-rw-r--r--PerformanceTests/Parser/simple-url.html13
-rw-r--r--PerformanceTests/Parser/tiny-innerHTML.html16
-rw-r--r--PerformanceTests/Parser/url-parser.html15
-rw-r--r--PerformanceTests/XSSFilter/large-post-many-events.html51
-rw-r--r--PerformanceTests/XSSFilter/large-post-many-inline-scripts-and-events.html10
-rw-r--r--PerformanceTests/XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html1287
-rw-r--r--Source/CMakeLists.txt132
-rw-r--r--Source/DerivedSources.pro20
-rw-r--r--Source/JavaScriptCore/API/JSCallbackObject.h20
-rw-r--r--Source/JavaScriptCore/API/JSCallbackObjectFunctions.h10
-rw-r--r--Source/JavaScriptCore/API/JSObjectRef.cpp6
-rw-r--r--Source/JavaScriptCore/API/JSStringRefCF.cpp2
-rw-r--r--Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h2
-rw-r--r--Source/JavaScriptCore/Android.mk20
-rw-r--r--Source/JavaScriptCore/Android.v8.wtf.mk27
-rw-r--r--Source/JavaScriptCore/CMakeLists.txt19
-rw-r--r--Source/JavaScriptCore/CMakeListsWinCE.txt17
-rw-r--r--Source/JavaScriptCore/ChangeLog4127
-rw-r--r--Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig14
-rw-r--r--Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig4
-rw-r--r--Source/JavaScriptCore/Configurations/Version.xcconfig2
-rw-r--r--Source/JavaScriptCore/DerivedSources.make28
-rw-r--r--Source/JavaScriptCore/DerivedSources.pro9
-rw-r--r--Source/JavaScriptCore/GNUmakefile.am37
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.JSVALUE32only.exp2
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.exp24
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp18
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.gypi26
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.order5
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.pri8
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.pro12
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make41
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def23
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj66
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops2
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make102
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj4
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py19
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj24
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops2
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops2
-rw-r--r--Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj128
-rw-r--r--Source/JavaScriptCore/assembler/MacroAssemblerARM.h17
-rw-r--r--Source/JavaScriptCore/bytecode/CodeBlock.cpp4
-rw-r--r--Source/JavaScriptCore/bytecode/CodeBlock.h12
-rw-r--r--Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp12
-rw-r--r--Source/JavaScriptCore/config.h4
-rw-r--r--Source/JavaScriptCore/create_regex_tables12
-rw-r--r--Source/JavaScriptCore/debugger/Debugger.cpp90
-rw-r--r--Source/JavaScriptCore/debugger/DebuggerActivation.cpp6
-rw-r--r--Source/JavaScriptCore/debugger/DebuggerActivation.h4
-rw-r--r--Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp2
-rw-r--r--Source/JavaScriptCore/interpreter/CallFrame.h2
-rw-r--r--Source/JavaScriptCore/interpreter/Interpreter.cpp54
-rw-r--r--Source/JavaScriptCore/interpreter/RegisterFile.h2
-rw-r--r--Source/JavaScriptCore/jit/ExecutableAllocator.cpp2
-rw-r--r--Source/JavaScriptCore/jit/ExecutableAllocator.h4
-rw-r--r--Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp766
-rw-r--r--Source/JavaScriptCore/jit/JIT.cpp16
-rw-r--r--Source/JavaScriptCore/jit/JIT.h3
-rw-r--r--Source/JavaScriptCore/jit/JITOpcodes.cpp16
-rw-r--r--Source/JavaScriptCore/jit/JITStubs.cpp170
-rw-r--r--Source/JavaScriptCore/jsc.cpp2
-rw-r--r--Source/JavaScriptCore/jsc.pro2
-rw-r--r--Source/JavaScriptCore/parser/JSParser.cpp48
-rw-r--r--Source/JavaScriptCore/parser/SourceProvider.h19
-rw-r--r--Source/JavaScriptCore/parser/SourceProviderCache.cpp56
-rw-r--r--Source/JavaScriptCore/parser/SourceProviderCache.h48
-rw-r--r--Source/JavaScriptCore/parser/SourceProviderCacheItem.h66
-rw-r--r--Source/JavaScriptCore/pcre/AUTHORS12
-rw-r--r--Source/JavaScriptCore/pcre/COPYING35
-rwxr-xr-xSource/JavaScriptCore/pcre/dftables273
-rw-r--r--Source/JavaScriptCore/pcre/pcre.h68
-rw-r--r--Source/JavaScriptCore/pcre/pcre.pri12
-rw-r--r--Source/JavaScriptCore/pcre/pcre_compile.cpp2708
-rw-r--r--Source/JavaScriptCore/pcre/pcre_exec.cpp2179
-rw-r--r--Source/JavaScriptCore/pcre/pcre_internal.h455
-rw-r--r--Source/JavaScriptCore/pcre/pcre_tables.cpp72
-rw-r--r--Source/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp99
-rw-r--r--Source/JavaScriptCore/pcre/pcre_xclass.cpp115
-rw-r--r--Source/JavaScriptCore/pcre/ucpinternal.h126
-rw-r--r--Source/JavaScriptCore/pcre/ucptable.cpp2968
-rw-r--r--Source/JavaScriptCore/runtime/ArgList.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/Arguments.cpp23
-rw-r--r--Source/JavaScriptCore/runtime/Arguments.h29
-rw-r--r--Source/JavaScriptCore/runtime/ArrayConstructor.cpp6
-rw-r--r--Source/JavaScriptCore/runtime/ArrayPrototype.cpp6
-rw-r--r--Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h8
-rw-r--r--Source/JavaScriptCore/runtime/BooleanConstructor.cpp12
-rw-r--r--Source/JavaScriptCore/runtime/BooleanObject.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/BooleanObject.h2
-rw-r--r--Source/JavaScriptCore/runtime/BooleanPrototype.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/CollectorHeapIterator.h140
-rw-r--r--Source/JavaScriptCore/runtime/ConservativeSet.cpp65
-rw-r--r--Source/JavaScriptCore/runtime/ConservativeSet.h80
-rw-r--r--Source/JavaScriptCore/runtime/DateConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/DateInstance.cpp16
-rw-r--r--Source/JavaScriptCore/runtime/DatePrototype.cpp22
-rw-r--r--Source/JavaScriptCore/runtime/Error.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/ErrorConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/ErrorInstance.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/ErrorPrototype.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/FunctionConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/FunctionPrototype.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/GCActivityCallback.h10
-rw-r--r--Source/JavaScriptCore/runtime/GCActivityCallbackCF.cpp26
-rw-r--r--Source/JavaScriptCore/runtime/GetterSetter.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/GetterSetter.h14
-rw-r--r--Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/GlobalEvalFunction.h4
-rw-r--r--Source/JavaScriptCore/runtime/Heap.cpp187
-rw-r--r--Source/JavaScriptCore/runtime/Heap.h115
-rw-r--r--Source/JavaScriptCore/runtime/InternalFunction.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/JSAPIValueWrapper.h6
-rw-r--r--Source/JavaScriptCore/runtime/JSActivation.cpp12
-rw-r--r--Source/JavaScriptCore/runtime/JSArray.cpp126
-rw-r--r--Source/JavaScriptCore/runtime/JSArray.h24
-rw-r--r--Source/JavaScriptCore/runtime/JSByteArray.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/JSCell.h56
-rw-r--r--Source/JavaScriptCore/runtime/JSFunction.cpp18
-rw-r--r--Source/JavaScriptCore/runtime/JSGlobalData.cpp53
-rw-r--r--Source/JavaScriptCore/runtime/JSGlobalData.h9
-rw-r--r--Source/JavaScriptCore/runtime/JSGlobalObject.cpp240
-rw-r--r--Source/JavaScriptCore/runtime/JSGlobalObject.h125
-rw-r--r--Source/JavaScriptCore/runtime/JSONObject.cpp32
-rw-r--r--Source/JavaScriptCore/runtime/JSObject.cpp34
-rw-r--r--Source/JavaScriptCore/runtime/JSObject.h130
-rw-r--r--Source/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp5
-rw-r--r--Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp6
-rw-r--r--Source/JavaScriptCore/runtime/JSPropertyNameIterator.h2
-rw-r--r--Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/JSString.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/JSValue.h6
-rw-r--r--Source/JavaScriptCore/runtime/JSVariableObject.h18
-rw-r--r--Source/JavaScriptCore/runtime/JSWrapperObject.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/JSWrapperObject.h18
-rw-r--r--Source/JavaScriptCore/runtime/LiteralParser.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/Lookup.cpp6
-rw-r--r--Source/JavaScriptCore/runtime/Lookup.h4
-rw-r--r--Source/JavaScriptCore/runtime/MachineStackMarker.cpp24
-rw-r--r--Source/JavaScriptCore/runtime/MarkStack.h36
-rw-r--r--Source/JavaScriptCore/runtime/MarkedBlock.cpp84
-rw-r--r--Source/JavaScriptCore/runtime/MarkedBlock.h177
-rw-r--r--Source/JavaScriptCore/runtime/MarkedSpace.cpp337
-rw-r--r--Source/JavaScriptCore/runtime/MarkedSpace.h206
-rw-r--r--Source/JavaScriptCore/runtime/MathObject.cpp16
-rw-r--r--Source/JavaScriptCore/runtime/MemoryStatistics.cpp5
-rw-r--r--Source/JavaScriptCore/runtime/MemoryStatistics.h1
-rw-r--r--Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp6
-rw-r--r--Source/JavaScriptCore/runtime/NumberConstructor.cpp8
-rw-r--r--Source/JavaScriptCore/runtime/NumberObject.cpp8
-rw-r--r--Source/JavaScriptCore/runtime/NumberObject.h2
-rw-r--r--Source/JavaScriptCore/runtime/NumberPrototype.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/ObjectConstructor.cpp16
-rw-r--r--Source/JavaScriptCore/runtime/Operations.h6
-rw-r--r--Source/JavaScriptCore/runtime/PropertySlot.h50
-rw-r--r--Source/JavaScriptCore/runtime/PrototypeFunction.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/PutPropertySlot.h8
-rw-r--r--Source/JavaScriptCore/runtime/RegExp.cpp8
-rw-r--r--Source/JavaScriptCore/runtime/RegExpConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/ScopeChain.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/ScopeChain.h10
-rw-r--r--Source/JavaScriptCore/runtime/ScopeChainMark.h2
-rw-r--r--Source/JavaScriptCore/runtime/SmallStrings.cpp12
-rw-r--r--Source/JavaScriptCore/runtime/SmallStrings.h11
-rw-r--r--Source/JavaScriptCore/runtime/StringConstructor.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/StringObject.cpp14
-rw-r--r--Source/JavaScriptCore/runtime/StringObject.h2
-rw-r--r--Source/JavaScriptCore/runtime/StringPrototype.cpp4
-rw-r--r--Source/JavaScriptCore/runtime/Structure.cpp10
-rw-r--r--Source/JavaScriptCore/runtime/Structure.h7
-rw-r--r--Source/JavaScriptCore/runtime/StructureChain.cpp2
-rw-r--r--Source/JavaScriptCore/runtime/WeakGCMap.h60
-rw-r--r--Source/JavaScriptCore/runtime/WriteBarrier.h165
-rw-r--r--Source/JavaScriptCore/wscript2
-rw-r--r--Source/JavaScriptCore/wtf/Assertions.cpp44
-rw-r--r--Source/JavaScriptCore/wtf/Assertions.h12
-rw-r--r--Source/JavaScriptCore/wtf/Bitmap.h22
-rw-r--r--Source/JavaScriptCore/wtf/BloomFilter.h139
-rw-r--r--Source/JavaScriptCore/wtf/CMakeLists.txt7
-rw-r--r--Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp191
-rw-r--r--Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h45
-rw-r--r--Source/JavaScriptCore/wtf/CurrentTime.h38
-rw-r--r--Source/JavaScriptCore/wtf/DateMath.h1
-rw-r--r--Source/JavaScriptCore/wtf/FastMalloc.cpp18
-rw-r--r--Source/JavaScriptCore/wtf/HashSet.h4
-rw-r--r--Source/JavaScriptCore/wtf/MallocZoneSupport.h10
-rw-r--r--Source/JavaScriptCore/wtf/MathExtras.h28
-rw-r--r--Source/JavaScriptCore/wtf/OSRandomSource.cpp71
-rw-r--r--Source/JavaScriptCore/wtf/OSRandomSource.h41
-rw-r--r--Source/JavaScriptCore/wtf/OwnArrayPtr.h16
-rw-r--r--Source/JavaScriptCore/wtf/PageAllocation.h9
-rw-r--r--Source/JavaScriptCore/wtf/PageReservation.h34
-rw-r--r--Source/JavaScriptCore/wtf/PassOwnArrayPtr.h9
-rw-r--r--Source/JavaScriptCore/wtf/Platform.h47
-rw-r--r--Source/JavaScriptCore/wtf/RandomNumber.cpp6
-rw-r--r--Source/JavaScriptCore/wtf/RandomNumberSeed.h20
-rw-r--r--Source/JavaScriptCore/wtf/StringExtras.h3
-rw-r--r--Source/JavaScriptCore/wtf/StringHasher.h6
-rw-r--r--Source/JavaScriptCore/wtf/TCSystemAlloc.cpp4
-rw-r--r--Source/JavaScriptCore/wtf/ThreadingPrimitives.h10
-rw-r--r--Source/JavaScriptCore/wtf/ThreadingWin.cpp30
-rw-r--r--Source/JavaScriptCore/wtf/gobject/GTypedefs.h2
-rw-r--r--Source/JavaScriptCore/wtf/text/AtomicString.cpp15
-rw-r--r--Source/JavaScriptCore/wtf/text/StringImpl.h10
-rw-r--r--Source/JavaScriptCore/wtf/text/WTFString.cpp2
-rw-r--r--Source/JavaScriptCore/wtf/text/WTFString.h14
-rw-r--r--Source/JavaScriptCore/wtf/unicode/CharacterNames.h (renamed from Source/WebCore/platform/text/CharacterNames.h)58
-rw-r--r--Source/JavaScriptCore/wtf/unicode/UTF8.cpp33
-rw-r--r--Source/JavaScriptCore/wtf/unicode/UTF8.h1
-rw-r--r--Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h40
-rw-r--r--Source/JavaScriptCore/wtf/wtf.pri7
-rw-r--r--Source/JavaScriptCore/wtf/wx/StringWx.cpp10
-rw-r--r--Source/JavaScriptCore/yarr/Yarr.h6
-rw-r--r--Source/JavaScriptCore/yarr/YarrInterpreter.cpp18
-rw-r--r--Source/JavaScriptCore/yarr/YarrJIT.cpp60
-rw-r--r--Source/JavaScriptCore/yarr/YarrJIT.h5
-rw-r--r--Source/JavaScriptCore/yarr/YarrParser.h2
-rw-r--r--Source/JavaScriptCore/yarr/YarrPattern.cpp40
-rw-r--r--Source/JavaScriptCore/yarr/YarrPattern.h3
-rw-r--r--Source/JavaScriptCore/yarr/YarrSyntaxChecker.h2
-rw-r--r--Source/JavaScriptCore/yarr/yarr.pri7
-rw-r--r--Source/JavaScriptGlue/ChangeLog97
-rw-r--r--Source/JavaScriptGlue/Configurations/Version.xcconfig2
-rw-r--r--Source/JavaScriptGlue/ForwardingHeaders/wtf/OwnArrayPtrCommon.h1
-rw-r--r--Source/JavaScriptGlue/JSValueWrapper.cpp11
-rw-r--r--Source/JavaScriptGlue/JavaScriptGlue.xcodeproj/project.pbxproj4
-rw-r--r--Source/JavaScriptGlue/UserObjectImp.cpp2
-rw-r--r--Source/JavaScriptGlue/UserObjectImp.h2
-rw-r--r--Source/ThirdParty/mt19937ar.c (renamed from Source/JavaScriptCore/wtf/wince/mt19937ar.c)0
-rw-r--r--Source/WebCore/Android.derived.jscbindings.mk1
-rw-r--r--Source/WebCore/Android.derived.v8bindings.mk1
-rw-r--r--Source/WebCore/Android.jscbindings.mk4
-rw-r--r--Source/WebCore/Android.mk17
-rw-r--r--Source/WebCore/CMakeLists.txt324
-rw-r--r--Source/WebCore/CMakeListsEfl.txt10
-rw-r--r--Source/WebCore/ChangeLog17177
-rw-r--r--Source/WebCore/Configurations/FeatureDefines.xcconfig14
-rw-r--r--Source/WebCore/Configurations/Version.xcconfig2
-rw-r--r--Source/WebCore/Configurations/WebCore.xcconfig2
-rw-r--r--Source/WebCore/DerivedSources.cpp13
-rw-r--r--Source/WebCore/DerivedSources.make18
-rw-r--r--Source/WebCore/English.lproj/localizedStrings.jsbin51268 -> 52092 bytes
-rw-r--r--Source/WebCore/ForwardingHeaders/pcre/pcre.h5
-rw-r--r--Source/WebCore/ForwardingHeaders/runtime/WriteBarrier.h4
-rw-r--r--Source/WebCore/ForwardingHeaders/wrec/WREC.h4
-rw-r--r--Source/WebCore/ForwardingHeaders/wtf/BloomFilter.h4
-rw-r--r--Source/WebCore/ForwardingHeaders/wtf/CryptographicallyRandomNumber.h5
-rw-r--r--Source/WebCore/ForwardingHeaders/wtf/OwnArrayPtrCommon.h4
-rw-r--r--Source/WebCore/ForwardingHeaders/wtf/unicode/CharacterNames.h4
-rw-r--r--Source/WebCore/ForwardingHeaders/yarr/Yarr.h5
-rw-r--r--Source/WebCore/ForwardingHeaders/yarr/YarrInterpreter.h5
-rw-r--r--Source/WebCore/ForwardingHeaders/yarr/YarrPattern.h5
-rw-r--r--Source/WebCore/GNUmakefile.am193
-rw-r--r--Source/WebCore/WebCore.exp.in105
-rw-r--r--Source/WebCore/WebCore.gyp/WebCore.gyp207
-rwxr-xr-xSource/WebCore/WebCore.gyp/mac/check_objc_rename.sh79
-rw-r--r--Source/WebCore/WebCore.gypi59
-rw-r--r--Source/WebCore/WebCore.pri3
-rw-r--r--Source/WebCore/WebCore.pro151
-rw-r--r--Source/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops2
-rw-r--r--Source/WebCore/WebCore.vcproj/WebCore.make20
-rwxr-xr-xSource/WebCore/WebCore.vcproj/WebCore.vcproj596
-rw-r--r--Source/WebCore/WebCore.vcproj/WebCoreGenerated.vcproj4
-rwxr-xr-xSource/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd6
-rw-r--r--Source/WebCore/WebCore.xcodeproj/project.pbxproj278
-rw-r--r--Source/WebCore/accessibility/AXObjectCache.h6
-rw-r--r--Source/WebCore/accessibility/AccessibilityAllInOne.cpp38
-rw-r--r--Source/WebCore/accessibility/AccessibilityImageMapLink.cpp2
-rw-r--r--Source/WebCore/accessibility/AccessibilityListBox.cpp2
-rw-r--r--Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp2
-rw-r--r--Source/WebCore/accessibility/AccessibilityObject.cpp24
-rw-r--r--Source/WebCore/accessibility/AccessibilityObject.h12
-rw-r--r--Source/WebCore/accessibility/AccessibilityRenderObject.cpp12
-rw-r--r--Source/WebCore/accessibility/AccessibilityScrollView.cpp16
-rw-r--r--Source/WebCore/accessibility/AccessibilityScrollView.h2
-rw-r--r--Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp2
-rw-r--r--Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp66
-rw-r--r--Source/WebCore/accessibility/mac/AXObjectCacheMac.mm4
-rw-r--r--Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.h8
-rw-r--r--Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm140
-rw-r--r--Source/WebCore/bindings/ScriptControllerBase.cpp15
-rw-r--r--Source/WebCore/bindings/ScriptControllerBase.h10
-rw-r--r--Source/WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp5
-rw-r--r--Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp9
-rw-r--r--Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h20
-rw-r--r--Source/WebCore/bindings/gobject/GNUmakefile.am12
-rw-r--r--Source/WebCore/bindings/gobject/WebKitDOMBinding.cpp4
-rw-r--r--Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp8
-rw-r--r--Source/WebCore/bindings/js/CachedScriptSourceProvider.h2
-rw-r--r--Source/WebCore/bindings/js/DOMWrapperWorld.h6
-rw-r--r--Source/WebCore/bindings/js/JSArrayBufferCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSArrayBufferViewHelper.h2
-rw-r--r--Source/WebCore/bindings/js/JSAudioConstructor.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSAudioContextCustom.cpp51
-rw-r--r--Source/WebCore/bindings/js/JSBindingsAllInOne.cpp10
-rw-r--r--Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSDOMBinding.cpp18
-rw-r--r--Source/WebCore/bindings/js/JSDOMGlobalObject.cpp10
-rw-r--r--Source/WebCore/bindings/js/JSDOMGlobalObject.h10
-rw-r--r--Source/WebCore/bindings/js/JSDOMWindowCustom.cpp34
-rw-r--r--Source/WebCore/bindings/js/JSDOMWindowShell.cpp9
-rw-r--r--Source/WebCore/bindings/js/JSDOMWindowShell.h8
-rw-r--r--Source/WebCore/bindings/js/JSDataViewCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSDesktopNotificationsCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp12
-rw-r--r--Source/WebCore/bindings/js/JSDocumentCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSElementCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSEventListener.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSEventListener.h8
-rw-r--r--Source/WebCore/bindings/js/JSFloat32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSImageConstructor.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSImageDataCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp8
-rw-r--r--Source/WebCore/bindings/js/JSInt16ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSInt32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSInt8ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSMemoryInfoCustom.cpp (renamed from Source/WebCore/platform/graphics/chromium/IconChromiumLinux.cpp)28
-rw-r--r--Source/WebCore/bindings/js/JSNodeCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSNodeFilterCondition.cpp10
-rw-r--r--Source/WebCore/bindings/js/JSNodeFilterCondition.h2
-rw-r--r--Source/WebCore/bindings/js/JSNodeFilterCustom.cpp1
-rw-r--r--Source/WebCore/bindings/js/JSOptionConstructor.cpp4
-rw-r--r--Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp2
-rw-r--r--Source/WebCore/bindings/js/JSUint16ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSUint32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSUint8ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp12
-rw-r--r--Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp6
-rw-r--r--Source/WebCore/bindings/js/ScriptCachedFrameData.cpp2
-rw-r--r--Source/WebCore/bindings/js/ScriptController.cpp17
-rw-r--r--Source/WebCore/bindings/js/ScriptController.h16
-rw-r--r--Source/WebCore/bindings/js/ScriptDebugServer.cpp46
-rw-r--r--Source/WebCore/bindings/js/ScriptDebugServer.h11
-rw-r--r--Source/WebCore/bindings/js/ScriptEventListener.cpp11
-rw-r--r--Source/WebCore/bindings/js/ScriptGCEvent.cpp8
-rw-r--r--Source/WebCore/bindings/js/ScriptGCEvent.h2
-rw-r--r--Source/WebCore/bindings/js/ScriptObject.cpp6
-rw-r--r--Source/WebCore/bindings/js/ScriptProfiler.cpp5
-rw-r--r--Source/WebCore/bindings/js/ScriptProfiler.h12
-rw-r--r--Source/WebCore/bindings/js/SerializedScriptValue.cpp4
-rw-r--r--Source/WebCore/bindings/js/WorkerScriptController.cpp20
-rw-r--r--Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm1
-rw-r--r--Source/WebCore/bindings/scripts/CodeGeneratorJS.pm20
-rw-r--r--Source/WebCore/bindings/scripts/CodeGeneratorV8.pm51
-rw-r--r--Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp5
-rw-r--r--Source/WebCore/bindings/v8/DOMDataStore.cpp14
-rw-r--r--Source/WebCore/bindings/v8/DOMDataStore.h162
-rw-r--r--Source/WebCore/bindings/v8/DebuggerScript.js11
-rw-r--r--Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h217
-rw-r--r--Source/WebCore/bindings/v8/NPV8Object.cpp12
-rw-r--r--Source/WebCore/bindings/v8/ScriptController.cpp9
-rw-r--r--Source/WebCore/bindings/v8/ScriptController.h11
-rw-r--r--Source/WebCore/bindings/v8/ScriptDebugServer.cpp15
-rw-r--r--Source/WebCore/bindings/v8/ScriptDebugServer.h3
-rw-r--r--Source/WebCore/bindings/v8/ScriptEventListener.cpp11
-rw-r--r--Source/WebCore/bindings/v8/ScriptFunctionCall.cpp6
-rw-r--r--Source/WebCore/bindings/v8/ScriptGCEvent.cpp3
-rw-r--r--Source/WebCore/bindings/v8/ScriptGCEvent.h2
-rw-r--r--Source/WebCore/bindings/v8/ScriptProfiler.cpp39
-rw-r--r--Source/WebCore/bindings/v8/ScriptProfiler.h12
-rw-r--r--Source/WebCore/bindings/v8/ScriptSourceCode.h7
-rw-r--r--Source/WebCore/bindings/v8/SerializedScriptValue.cpp36
-rw-r--r--Source/WebCore/bindings/v8/SerializedScriptValue.h2
-rw-r--r--Source/WebCore/bindings/v8/StaticDOMDataStore.h1
-rw-r--r--Source/WebCore/bindings/v8/V8Binding.cpp23
-rw-r--r--Source/WebCore/bindings/v8/V8Binding.h11
-rw-r--r--Source/WebCore/bindings/v8/V8DOMWindowShell.cpp14
-rw-r--r--Source/WebCore/bindings/v8/V8DOMWrapper.cpp3
-rw-r--r--Source/WebCore/bindings/v8/V8EventListener.cpp4
-rw-r--r--Source/WebCore/bindings/v8/V8NPObject.cpp2
-rw-r--r--Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp2
-rw-r--r--Source/WebCore/bindings/v8/V8Proxy.cpp18
-rw-r--r--Source/WebCore/bindings/v8/V8Proxy.h2
-rw-r--r--Source/WebCore/bindings/v8/V8WindowErrorHandler.cpp4
-rw-r--r--Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp9
-rw-r--r--Source/WebCore/bindings/v8/custom/V8ArrayBufferCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h8
-rw-r--r--Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp57
-rw-r--r--Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp6
-rwxr-xr-xSource/WebCore/bindings/v8/custom/V8DataViewCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp6
-rw-r--r--Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp2
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Float32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp6
-rw-r--r--Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp4
-rw-r--r--Source/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp1
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Int16ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Int32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Int8ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp2
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Uint16ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Uint32ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8Uint8ArrayCustom.cpp5
-rw-r--r--Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp12
-rw-r--r--Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp4
-rw-r--r--Source/WebCore/bridge/jsc/BridgeJSC.cpp1
-rw-r--r--Source/WebCore/bridge/qt/qt_class.cpp2
-rw-r--r--Source/WebCore/bridge/qt/qt_instance.cpp18
-rw-r--r--Source/WebCore/bridge/qt/qt_instance.h4
-rw-r--r--Source/WebCore/bridge/qt/qt_runtime.cpp26
-rw-r--r--Source/WebCore/bridge/qt/qt_runtime.h4
-rw-r--r--Source/WebCore/bridge/runtime_root.cpp32
-rw-r--r--Source/WebCore/bridge/runtime_root.h4
-rw-r--r--Source/WebCore/config.h4
-rw-r--r--Source/WebCore/css/CSSCanvasValue.cpp2
-rw-r--r--Source/WebCore/css/CSSCanvasValue.h2
-rw-r--r--Source/WebCore/css/CSSComputedStyleDeclaration.cpp45
-rw-r--r--Source/WebCore/css/CSSFontFaceSource.cpp16
-rw-r--r--Source/WebCore/css/CSSFontFaceSource.h6
-rw-r--r--Source/WebCore/css/CSSFunctionValue.cpp15
-rw-r--r--Source/WebCore/css/CSSFunctionValue.h2
-rw-r--r--Source/WebCore/css/CSSGradientValue.cpp48
-rw-r--r--Source/WebCore/css/CSSGradientValue.h4
-rw-r--r--Source/WebCore/css/CSSGrammar.y85
-rw-r--r--Source/WebCore/css/CSSImageGeneratorValue.h2
-rw-r--r--Source/WebCore/css/CSSImageValue.cpp4
-rw-r--r--Source/WebCore/css/CSSMediaRule.cpp8
-rw-r--r--Source/WebCore/css/CSSPageRule.cpp5
-rw-r--r--Source/WebCore/css/CSSPageRule.h6
-rw-r--r--Source/WebCore/css/CSSParser.cpp99
-rw-r--r--Source/WebCore/css/CSSParser.h17
-rw-r--r--Source/WebCore/css/CSSParserValues.cpp25
-rw-r--r--Source/WebCore/css/CSSParserValues.h31
-rw-r--r--Source/WebCore/css/CSSPrimitiveValue.cpp87
-rw-r--r--Source/WebCore/css/CSSPrimitiveValue.h2
-rw-r--r--Source/WebCore/css/CSSRuleList.cpp7
-rw-r--r--Source/WebCore/css/CSSSelector.cpp197
-rw-r--r--Source/WebCore/css/CSSSelector.h124
-rw-r--r--Source/WebCore/css/CSSSelectorList.cpp44
-rw-r--r--Source/WebCore/css/CSSSelectorList.h17
-rw-r--r--Source/WebCore/css/CSSStyleRule.h2
-rw-r--r--Source/WebCore/css/CSSStyleSelector.cpp620
-rw-r--r--Source/WebCore/css/CSSStyleSelector.h52
-rw-r--r--Source/WebCore/css/CSSStyleSheet.cpp21
-rw-r--r--Source/WebCore/css/CSSStyleSheet.h3
-rw-r--r--Source/WebCore/css/CSSValue.h3
-rw-r--r--Source/WebCore/css/CSSValueList.cpp11
-rw-r--r--Source/WebCore/css/CSSValueList.h2
-rw-r--r--Source/WebCore/css/WebKitCSSKeyframesRule.cpp12
-rw-r--r--Source/WebCore/css/WebKitCSSMatrix.cpp4
-rw-r--r--Source/WebCore/css/html.css66
-rw-r--r--Source/WebCore/css/mediaControls.css35
-rw-r--r--Source/WebCore/css/mediaControlsChromium.css3
-rw-r--r--Source/WebCore/css/mediaControlsQt.css15
-rw-r--r--Source/WebCore/css/themeChromiumLinux.css5
-rw-r--r--Source/WebCore/css/themeWin.css34
-rw-r--r--Source/WebCore/dom/ClientRect.h4
-rw-r--r--Source/WebCore/dom/DOMAllInOne.cpp1
-rw-r--r--Source/WebCore/dom/DeviceMotionController.cpp4
-rw-r--r--Source/WebCore/dom/DeviceMotionController.h4
-rw-r--r--Source/WebCore/dom/DeviceOrientationController.cpp4
-rw-r--r--Source/WebCore/dom/DeviceOrientationController.h4
-rw-r--r--Source/WebCore/dom/Document.cpp223
-rw-r--r--Source/WebCore/dom/Document.h64
-rw-r--r--Source/WebCore/dom/DocumentMarker.h12
-rw-r--r--Source/WebCore/dom/DocumentMarkerController.cpp40
-rw-r--r--Source/WebCore/dom/DocumentMarkerController.h16
-rw-r--r--Source/WebCore/dom/DocumentOrderedMap.cpp151
-rw-r--r--Source/WebCore/dom/DocumentOrderedMap.h83
-rw-r--r--Source/WebCore/dom/Element.cpp63
-rw-r--r--Source/WebCore/dom/Element.h17
-rw-r--r--Source/WebCore/dom/Event.cpp10
-rw-r--r--Source/WebCore/dom/Event.h2
-rw-r--r--Source/WebCore/dom/EventQueue.cpp35
-rw-r--r--Source/WebCore/dom/EventQueue.h21
-rw-r--r--Source/WebCore/dom/EventTarget.cpp4
-rw-r--r--Source/WebCore/dom/EventTarget.h2
-rw-r--r--Source/WebCore/dom/InputElement.h2
-rw-r--r--Source/WebCore/dom/NamedNodeMap.cpp2
-rw-r--r--Source/WebCore/dom/Node.cpp16
-rw-r--r--Source/WebCore/dom/Position.cpp2
-rw-r--r--Source/WebCore/dom/ProcessingInstruction.cpp2
-rw-r--r--Source/WebCore/dom/Range.cpp262
-rw-r--r--Source/WebCore/dom/Range.h1
-rw-r--r--Source/WebCore/dom/RequestAnimationFrameCallback.h2
-rw-r--r--Source/WebCore/dom/RequestAnimationFrameCallback.idl2
-rw-r--r--Source/WebCore/dom/ScriptElement.cpp6
-rw-r--r--Source/WebCore/dom/ScriptExecutionContext.cpp72
-rw-r--r--Source/WebCore/dom/ScriptExecutionContext.h10
-rw-r--r--Source/WebCore/dom/ScriptableDocumentParser.cpp2
-rw-r--r--Source/WebCore/dom/ScriptableDocumentParser.h10
-rw-r--r--Source/WebCore/dom/SelectElement.cpp18
-rw-r--r--Source/WebCore/dom/SelectorNodeList.cpp4
-rw-r--r--Source/WebCore/dom/Text.cpp8
-rw-r--r--Source/WebCore/dom/TextEvent.h1
-rw-r--r--Source/WebCore/dom/TextEventInputType.h1
-rw-r--r--Source/WebCore/dom/ViewportArguments.cpp51
-rw-r--r--Source/WebCore/editing/ApplyStyleCommand.cpp164
-rw-r--r--Source/WebCore/editing/ApplyStyleCommand.h9
-rw-r--r--Source/WebCore/editing/CompositeEditCommand.cpp71
-rw-r--r--Source/WebCore/editing/CompositeEditCommand.h3
-rw-r--r--Source/WebCore/editing/DeleteButtonController.cpp4
-rw-r--r--Source/WebCore/editing/EditingStyle.cpp24
-rw-r--r--Source/WebCore/editing/EditingStyle.h10
-rw-r--r--Source/WebCore/editing/Editor.cpp166
-rw-r--r--Source/WebCore/editing/Editor.h4
-rw-r--r--Source/WebCore/editing/EditorCommand.cpp24
-rw-r--r--Source/WebCore/editing/FormatBlockCommand.cpp3
-rw-r--r--Source/WebCore/editing/HTMLInterchange.cpp2
-rw-r--r--Source/WebCore/editing/InsertListCommand.cpp2
-rw-r--r--Source/WebCore/editing/InsertTextCommand.cpp56
-rw-r--r--Source/WebCore/editing/InsertTextCommand.h8
-rw-r--r--Source/WebCore/editing/MarkupAccumulator.cpp2
-rw-r--r--Source/WebCore/editing/MarkupAccumulator.h2
-rw-r--r--Source/WebCore/editing/MoveSelectionCommand.cpp28
-rw-r--r--Source/WebCore/editing/ReplaceSelectionCommand.cpp50
-rw-r--r--Source/WebCore/editing/SelectionController.cpp6
-rw-r--r--Source/WebCore/editing/SpellChecker.cpp2
-rw-r--r--Source/WebCore/editing/TextIterator.cpp11
-rw-r--r--Source/WebCore/editing/TypingCommand.cpp25
-rw-r--r--Source/WebCore/editing/TypingCommand.h21
-rw-r--r--Source/WebCore/editing/VisibleSelection.cpp15
-rw-r--r--Source/WebCore/editing/htmlediting.cpp46
-rw-r--r--Source/WebCore/editing/htmlediting.h14
-rw-r--r--Source/WebCore/editing/mac/SelectionControllerMac.mm17
-rw-r--r--Source/WebCore/editing/markup.cpp19
-rw-r--r--Source/WebCore/editing/visible_units.cpp28
-rw-r--r--Source/WebCore/features.pri4
-rw-r--r--Source/WebCore/fileapi/Entry.cpp16
-rw-r--r--Source/WebCore/fileapi/Entry.h2
-rw-r--r--Source/WebCore/fileapi/Entry.idl1
-rw-r--r--Source/WebCore/fileapi/FileStreamProxy.cpp2
-rw-r--r--Source/WebCore/history/CachedFrame.cpp18
-rw-r--r--Source/WebCore/history/HistoryItem.cpp7
-rw-r--r--Source/WebCore/history/HistoryItem.h1
-rw-r--r--Source/WebCore/history/PageCache.cpp4
-rw-r--r--Source/WebCore/html/DOMURL.cpp14
-rw-r--r--Source/WebCore/html/DOMURL.h6
-rw-r--r--Source/WebCore/html/FTPDirectoryDocument.cpp3
-rw-r--r--Source/WebCore/html/FormAssociatedElement.cpp17
-rw-r--r--Source/WebCore/html/FormAssociatedElement.h3
-rw-r--r--Source/WebCore/html/HTMLAnchorElement.cpp4
-rw-r--r--Source/WebCore/html/HTMLAreaElement.cpp47
-rw-r--r--Source/WebCore/html/HTMLAreaElement.h8
-rw-r--r--Source/WebCore/html/HTMLAttributeNames.in1
-rw-r--r--Source/WebCore/html/HTMLCanvasElement.cpp24
-rw-r--r--Source/WebCore/html/HTMLCanvasElement.h2
-rw-r--r--Source/WebCore/html/HTMLCollection.cpp4
-rw-r--r--Source/WebCore/html/HTMLDocument.cpp12
-rw-r--r--Source/WebCore/html/HTMLDocument.h6
-rw-r--r--Source/WebCore/html/HTMLElement.cpp6
-rw-r--r--Source/WebCore/html/HTMLElement.h12
-rw-r--r--Source/WebCore/html/HTMLEmbedElement.cpp7
-rw-r--r--Source/WebCore/html/HTMLEmbedElement.h2
-rw-r--r--Source/WebCore/html/HTMLFormControlElement.cpp18
-rw-r--r--Source/WebCore/html/HTMLFormControlElement.h5
-rw-r--r--Source/WebCore/html/HTMLFormElement.cpp19
-rw-r--r--Source/WebCore/html/HTMLFormElement.h5
-rw-r--r--Source/WebCore/html/HTMLFrameElementBase.cpp2
-rw-r--r--Source/WebCore/html/HTMLFrameSetElement.cpp4
-rw-r--r--Source/WebCore/html/HTMLImageLoader.cpp2
-rw-r--r--Source/WebCore/html/HTMLInputElement.cpp60
-rw-r--r--Source/WebCore/html/HTMLInputElement.h8
-rw-r--r--Source/WebCore/html/HTMLIsIndexElement.cpp2
-rw-r--r--Source/WebCore/html/HTMLKeygenElement.cpp62
-rw-r--r--Source/WebCore/html/HTMLKeygenElement.h18
-rw-r--r--Source/WebCore/html/HTMLLinkElement.cpp14
-rw-r--r--Source/WebCore/html/HTMLLinkElement.h1
-rw-r--r--Source/WebCore/html/HTMLMediaElement.cpp22
-rw-r--r--Source/WebCore/html/HTMLMediaElement.h8
-rw-r--r--Source/WebCore/html/HTMLMediaElement.idl6
-rw-r--r--Source/WebCore/html/HTMLObjectElement.cpp15
-rw-r--r--Source/WebCore/html/HTMLObjectElement.h3
-rw-r--r--Source/WebCore/html/HTMLOptionElement.cpp5
-rw-r--r--Source/WebCore/html/HTMLOutputElement.cpp3
-rw-r--r--Source/WebCore/html/HTMLParamElement.cpp13
-rw-r--r--Source/WebCore/html/HTMLParamElement.h2
-rw-r--r--Source/WebCore/html/HTMLParserErrorCodes.cpp44
-rw-r--r--Source/WebCore/html/HTMLParserErrorCodes.h36
-rw-r--r--Source/WebCore/html/HTMLParserQuirks.h25
-rw-r--r--Source/WebCore/html/HTMLPlugInImageElement.cpp5
-rw-r--r--Source/WebCore/html/HTMLPlugInImageElement.h7
-rw-r--r--Source/WebCore/html/HTMLProgressElement.cpp31
-rw-r--r--Source/WebCore/html/HTMLProgressElement.h3
-rw-r--r--Source/WebCore/html/HTMLSelectElement.cpp8
-rw-r--r--Source/WebCore/html/HTMLSelectElement.h2
-rw-r--r--Source/WebCore/html/HTMLTagNames.in2
-rw-r--r--Source/WebCore/html/HTMLTextAreaElement.cpp1
-rw-r--r--Source/WebCore/html/HTMLVideoElement.cpp18
-rw-r--r--Source/WebCore/html/HTMLVideoElement.h6
-rw-r--r--Source/WebCore/html/HTMLVideoElement.idl10
-rw-r--r--Source/WebCore/html/InputType.cpp9
-rw-r--r--Source/WebCore/html/InputType.h3
-rw-r--r--Source/WebCore/html/MediaDocument.cpp2
-rw-r--r--Source/WebCore/html/NumberInputType.cpp39
-rw-r--r--Source/WebCore/html/NumberInputType.h1
-rw-r--r--Source/WebCore/html/PluginDocument.cpp10
-rw-r--r--Source/WebCore/html/RangeInputType.cpp7
-rw-r--r--Source/WebCore/html/RangeInputType.h1
-rw-r--r--Source/WebCore/html/TextFieldInputType.cpp9
-rw-r--r--Source/WebCore/html/TextFieldInputType.h1
-rw-r--r--Source/WebCore/html/TextInputType.cpp6
-rw-r--r--Source/WebCore/html/TextInputType.h1
-rw-r--r--Source/WebCore/html/ValidationMessage.cpp2
-rw-r--r--Source/WebCore/html/canvas/ArrayBuffer.cpp5
-rw-r--r--Source/WebCore/html/canvas/ArrayBuffer.idl1
-rw-r--r--Source/WebCore/html/canvas/ArrayBufferView.cpp5
-rw-r--r--Source/WebCore/html/canvas/ArrayBufferView.idl2
-rw-r--r--Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp39
-rw-r--r--Source/WebCore/html/canvas/CanvasStyle.cpp14
-rw-r--r--Source/WebCore/html/canvas/CanvasStyle.h3
-rwxr-xr-xSource/WebCore/html/canvas/DataView.cpp5
-rwxr-xr-xSource/WebCore/html/canvas/DataView.h2
-rwxr-xr-xSource/WebCore/html/canvas/DataView.idl1
-rw-r--r--Source/WebCore/html/canvas/Float32Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Float32Array.h4
-rw-r--r--Source/WebCore/html/canvas/Float32Array.idl3
-rw-r--r--Source/WebCore/html/canvas/Int16Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Int16Array.h4
-rw-r--r--Source/WebCore/html/canvas/Int16Array.idl3
-rw-r--r--Source/WebCore/html/canvas/Int32Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Int32Array.h11
-rw-r--r--Source/WebCore/html/canvas/Int32Array.idl3
-rw-r--r--Source/WebCore/html/canvas/Int8Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Int8Array.h9
-rw-r--r--Source/WebCore/html/canvas/Int8Array.idl3
-rw-r--r--Source/WebCore/html/canvas/OESStandardDerivatives.cpp4
-rw-r--r--Source/WebCore/html/canvas/OESStandardDerivatives.idl2
-rw-r--r--Source/WebCore/html/canvas/OESTextureFloat.cpp4
-rw-r--r--Source/WebCore/html/canvas/OESTextureFloat.idl2
-rw-r--r--Source/WebCore/html/canvas/TypedArrayBase.h2
-rw-r--r--Source/WebCore/html/canvas/Uint16Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Uint16Array.h9
-rw-r--r--Source/WebCore/html/canvas/Uint16Array.idl3
-rw-r--r--Source/WebCore/html/canvas/Uint32Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Uint32Array.h9
-rw-r--r--Source/WebCore/html/canvas/Uint32Array.idl3
-rw-r--r--Source/WebCore/html/canvas/Uint8Array.cpp13
-rw-r--r--Source/WebCore/html/canvas/Uint8Array.h11
-rw-r--r--Source/WebCore/html/canvas/Uint8Array.idl3
-rw-r--r--Source/WebCore/html/canvas/WebGLActiveInfo.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLBuffer.cpp6
-rw-r--r--Source/WebCore/html/canvas/WebGLBuffer.h8
-rw-r--r--Source/WebCore/html/canvas/WebGLBuffer.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLContextAttributes.cpp4
-rw-r--r--Source/WebCore/html/canvas/WebGLContextAttributes.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLContextEvent.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLExtension.cpp4
-rw-r--r--Source/WebCore/html/canvas/WebGLFramebuffer.cpp4
-rw-r--r--Source/WebCore/html/canvas/WebGLFramebuffer.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLGetInfo.cpp28
-rw-r--r--Source/WebCore/html/canvas/WebGLGetInfo.h16
-rw-r--r--Source/WebCore/html/canvas/WebGLObject.cpp6
-rw-r--r--Source/WebCore/html/canvas/WebGLProgram.cpp8
-rw-r--r--Source/WebCore/html/canvas/WebGLProgram.h2
-rw-r--r--Source/WebCore/html/canvas/WebGLProgram.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLRenderbuffer.cpp6
-rw-r--r--Source/WebCore/html/canvas/WebGLRenderbuffer.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLRenderingContext.cpp440
-rw-r--r--Source/WebCore/html/canvas/WebGLRenderingContext.h102
-rw-r--r--Source/WebCore/html/canvas/WebGLRenderingContext.idl10
-rw-r--r--Source/WebCore/html/canvas/WebGLShader.cpp7
-rw-r--r--Source/WebCore/html/canvas/WebGLShader.h4
-rw-r--r--Source/WebCore/html/canvas/WebGLShader.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLTexture.cpp6
-rw-r--r--Source/WebCore/html/canvas/WebGLTexture.h2
-rw-r--r--Source/WebCore/html/canvas/WebGLTexture.idl2
-rw-r--r--Source/WebCore/html/canvas/WebGLUniformLocation.cpp6
-rw-r--r--Source/WebCore/html/canvas/WebGLUniformLocation.h4
-rw-r--r--Source/WebCore/html/canvas/WebGLUniformLocation.idl2
-rw-r--r--Source/WebCore/html/canvas/WebKitLoseContext.cpp4
-rw-r--r--Source/WebCore/html/canvas/WebKitLoseContext.idl2
-rw-r--r--Source/WebCore/html/parser/HTMLConstructionSite.cpp30
-rw-r--r--Source/WebCore/html/parser/HTMLConstructionSite.h9
-rw-r--r--Source/WebCore/html/parser/HTMLDocumentParser.cpp24
-rw-r--r--Source/WebCore/html/parser/HTMLDocumentParser.h8
-rw-r--r--Source/WebCore/html/parser/HTMLInputStream.h12
-rw-r--r--Source/WebCore/html/parser/HTMLParserIdioms.cpp3
-rw-r--r--Source/WebCore/html/parser/HTMLScriptRunner.cpp1
-rw-r--r--Source/WebCore/html/parser/HTMLSourceTracker.cpp69
-rw-r--r--Source/WebCore/html/parser/HTMLSourceTracker.h55
-rw-r--r--Source/WebCore/html/parser/HTMLToken.h55
-rw-r--r--Source/WebCore/html/parser/HTMLTreeBuilder.cpp49
-rw-r--r--Source/WebCore/html/parser/HTMLTreeBuilder.h5
-rw-r--r--Source/WebCore/html/parser/HTMLViewSourceParser.cpp24
-rw-r--r--Source/WebCore/html/parser/HTMLViewSourceParser.h3
-rw-r--r--Source/WebCore/html/parser/XSSFilter.cpp450
-rw-r--r--Source/WebCore/html/parser/XSSFilter.h87
-rw-r--r--Source/WebCore/html/shadow/MediaControls.cpp617
-rw-r--r--Source/WebCore/html/shadow/MediaControls.h149
-rw-r--r--Source/WebCore/html/shadow/ProgressBarValueElement.h73
-rw-r--r--Source/WebCore/html/shadow/SliderThumbElement.cpp8
-rw-r--r--Source/WebCore/html/shadow/SliderThumbElement.h8
-rw-r--r--Source/WebCore/inspector/CodeGeneratorInspector.pm149
-rw-r--r--Source/WebCore/inspector/InjectedScript.cpp14
-rw-r--r--Source/WebCore/inspector/InjectedScript.h8
-rw-r--r--Source/WebCore/inspector/InjectedScriptHost.cpp40
-rw-r--r--Source/WebCore/inspector/InjectedScriptHost.h14
-rw-r--r--Source/WebCore/inspector/InjectedScriptSource.js218
-rw-r--r--Source/WebCore/inspector/Inspector.idl459
-rw-r--r--Source/WebCore/inspector/InspectorAgent.cpp1269
-rw-r--r--Source/WebCore/inspector/InspectorAgent.h327
-rw-r--r--Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp16
-rw-r--r--Source/WebCore/inspector/InspectorApplicationCacheAgent.h9
-rw-r--r--Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp68
-rw-r--r--Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h15
-rw-r--r--Source/WebCore/inspector/InspectorCSSAgent.cpp28
-rw-r--r--Source/WebCore/inspector/InspectorCSSAgent.h22
-rw-r--r--Source/WebCore/inspector/InspectorClient.h3
-rw-r--r--Source/WebCore/inspector/InspectorConsoleAgent.cpp48
-rw-r--r--Source/WebCore/inspector/InspectorConsoleAgent.h6
-rw-r--r--Source/WebCore/inspector/InspectorConsoleInstrumentation.h127
-rw-r--r--Source/WebCore/inspector/InspectorController.cpp1346
-rw-r--r--Source/WebCore/inspector/InspectorController.h368
-rw-r--r--Source/WebCore/inspector/InspectorDOMAgent.cpp154
-rw-r--r--Source/WebCore/inspector/InspectorDOMAgent.h41
-rw-r--r--Source/WebCore/inspector/InspectorDOMStorageAgent.cpp3
-rw-r--r--Source/WebCore/inspector/InspectorDOMStorageAgent.h12
-rw-r--r--Source/WebCore/inspector/InspectorDOMStorageResource.h1
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseAgent.cpp94
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseAgent.h17
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseInstrumentation.h52
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseResource.cpp11
-rw-r--r--Source/WebCore/inspector/InspectorDatabaseResource.h2
-rw-r--r--Source/WebCore/inspector/InspectorDebuggerAgent.cpp191
-rw-r--r--Source/WebCore/inspector/InspectorDebuggerAgent.h67
-rw-r--r--Source/WebCore/inspector/InspectorFileSystemAgent.cpp171
-rw-r--r--Source/WebCore/inspector/InspectorFileSystemAgent.h77
-rw-r--r--Source/WebCore/inspector/InspectorFrontendClientLocal.cpp24
-rw-r--r--Source/WebCore/inspector/InspectorFrontendClientLocal.h12
-rw-r--r--Source/WebCore/inspector/InspectorFrontendHost.cpp5
-rw-r--r--Source/WebCore/inspector/InspectorInstrumentation.cpp353
-rw-r--r--Source/WebCore/inspector/InspectorInstrumentation.h511
-rw-r--r--Source/WebCore/inspector/InspectorProfilerAgent.cpp55
-rw-r--r--Source/WebCore/inspector/InspectorProfilerAgent.h10
-rw-r--r--Source/WebCore/inspector/InspectorResourceAgent.cpp87
-rw-r--r--Source/WebCore/inspector/InspectorResourceAgent.h3
-rw-r--r--Source/WebCore/inspector/InspectorRuntimeAgent.cpp8
-rw-r--r--Source/WebCore/inspector/InspectorRuntimeAgent.h4
-rw-r--r--Source/WebCore/inspector/InspectorSettings.cpp95
-rw-r--r--Source/WebCore/inspector/InspectorState.cpp122
-rw-r--r--Source/WebCore/inspector/InspectorState.h93
-rw-r--r--Source/WebCore/inspector/InspectorTimelineAgent.cpp35
-rw-r--r--Source/WebCore/inspector/InspectorTimelineAgent.h19
-rw-r--r--Source/WebCore/inspector/InspectorValues.cpp40
-rw-r--r--Source/WebCore/inspector/InspectorValues.h19
-rw-r--r--Source/WebCore/inspector/ScriptBreakpoint.cpp74
-rw-r--r--Source/WebCore/inspector/ScriptBreakpoint.h25
-rw-r--r--Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js2
-rw-r--r--Source/WebCore/inspector/front-end/AuditRules.js4
-rw-r--r--Source/WebCore/inspector/front-end/AuditsPanel.js2
-rw-r--r--Source/WebCore/inspector/front-end/Breakpoint.js44
-rw-r--r--Source/WebCore/inspector/front-end/BreakpointManager.js80
-rw-r--r--Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js61
-rw-r--r--Source/WebCore/inspector/front-end/CSSCompletions.js7
-rwxr-xr-xSource/WebCore/inspector/front-end/CSSKeywordCompletions.js2
-rw-r--r--Source/WebCore/inspector/front-end/CSSStyleModel.js26
-rw-r--r--Source/WebCore/inspector/front-end/ChangesView.js80
-rw-r--r--Source/WebCore/inspector/front-end/ConsoleView.js34
-rw-r--r--Source/WebCore/inspector/front-end/ContextMenu.js1
-rw-r--r--Source/WebCore/inspector/front-end/DOMAgent.js24
-rw-r--r--Source/WebCore/inspector/front-end/DataGrid.js5
-rw-r--r--Source/WebCore/inspector/front-end/DebuggerModel.js171
-rw-r--r--Source/WebCore/inspector/front-end/DetailedHeapshotView.js92
-rw-r--r--Source/WebCore/inspector/front-end/Drawer.js89
-rw-r--r--Source/WebCore/inspector/front-end/ElementsPanel.js11
-rw-r--r--Source/WebCore/inspector/front-end/ElementsTreeOutline.js3
-rw-r--r--Source/WebCore/inspector/front-end/ExtensionAPI.js4
-rwxr-xr-xSource/WebCore/inspector/front-end/ExtensionAPISchema.json513
-rw-r--r--Source/WebCore/inspector/front-end/ExtensionPanel.js2
-rw-r--r--Source/WebCore/inspector/front-end/ExtensionServer.js13
-rw-r--r--Source/WebCore/inspector/front-end/FileSystemView.js211
-rw-r--r--Source/WebCore/inspector/front-end/GoToLineDialog.js4
-rw-r--r--Source/WebCore/inspector/front-end/HeapSnapshot.js909
-rw-r--r--Source/WebCore/inspector/front-end/HeapSnapshotView.js196
-rw-r--r--Source/WebCore/inspector/front-end/NetworkManager.js234
-rw-r--r--Source/WebCore/inspector/front-end/NetworkPanel.js87
-rw-r--r--Source/WebCore/inspector/front-end/ObjectPropertiesSection.js13
-rw-r--r--Source/WebCore/inspector/front-end/PleaseWaitMessage.js107
-rw-r--r--Source/WebCore/inspector/front-end/ProfilesPanel.js110
-rw-r--r--Source/WebCore/inspector/front-end/Resource.js44
-rw-r--r--Source/WebCore/inspector/front-end/ResourceTreeModel.js61
-rw-r--r--Source/WebCore/inspector/front-end/ResourceView.js43
-rw-r--r--Source/WebCore/inspector/front-end/ResourcesPanel.js96
-rw-r--r--Source/WebCore/inspector/front-end/ScopeChainSidebarPane.js21
-rw-r--r--Source/WebCore/inspector/front-end/Script.js2
-rw-r--r--Source/WebCore/inspector/front-end/ScriptFormatter.js162
-rw-r--r--Source/WebCore/inspector/front-end/ScriptFormatterWorker.js24
-rw-r--r--Source/WebCore/inspector/front-end/ScriptView.js96
-rw-r--r--Source/WebCore/inspector/front-end/ScriptsPanel.js188
-rw-r--r--Source/WebCore/inspector/front-end/Settings.js14
-rw-r--r--Source/WebCore/inspector/front-end/ShowMoreDataGridNode.js78
-rw-r--r--Source/WebCore/inspector/front-end/SidebarTreeElement.js4
-rw-r--r--Source/WebCore/inspector/front-end/SourceFrame.js371
-rw-r--r--Source/WebCore/inspector/front-end/SourceFrameContent.js153
-rw-r--r--Source/WebCore/inspector/front-end/SourceHTMLTokenizer.js291
-rw-r--r--Source/WebCore/inspector/front-end/SourceHTMLTokenizer.re2js62
-rw-r--r--Source/WebCore/inspector/front-end/SourceView.js208
-rw-r--r--Source/WebCore/inspector/front-end/StylesSidebarPane.js39
-rw-r--r--Source/WebCore/inspector/front-end/TextPrompt.js7
-rw-r--r--Source/WebCore/inspector/front-end/TextViewer.js964
-rw-r--r--Source/WebCore/inspector/front-end/UglifyJS/parse-js.js92
-rwxr-xr-xSource/WebCore/inspector/front-end/UglifyJS/process.js476
-rw-r--r--Source/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js2
-rw-r--r--Source/WebCore/inspector/front-end/WebKit.qrc9
-rw-r--r--Source/WebCore/inspector/front-end/inspector.css37
-rw-r--r--Source/WebCore/inspector/front-end/inspector.html15
-rw-r--r--Source/WebCore/inspector/front-end/inspector.js137
-rw-r--r--Source/WebCore/inspector/front-end/networkPanel.css12
-rw-r--r--Source/WebCore/inspector/front-end/textViewer.css41
-rw-r--r--Source/WebCore/loader/DocumentLoader.cpp55
-rw-r--r--Source/WebCore/loader/DocumentLoader.h36
-rw-r--r--Source/WebCore/loader/DocumentThreadableLoader.cpp4
-rw-r--r--Source/WebCore/loader/DocumentWriter.cpp7
-rw-r--r--Source/WebCore/loader/DocumentWriter.h4
-rw-r--r--Source/WebCore/loader/EmptyClients.h12
-rw-r--r--Source/WebCore/loader/FrameLoader.cpp140
-rw-r--r--Source/WebCore/loader/FrameLoader.h13
-rw-r--r--Source/WebCore/loader/FrameLoaderClient.h2
-rw-r--r--Source/WebCore/loader/HistoryController.cpp54
-rw-r--r--Source/WebCore/loader/HistoryController.h2
-rw-r--r--Source/WebCore/loader/MainResourceLoader.cpp1
-rw-r--r--Source/WebCore/loader/NavigationScheduler.cpp7
-rw-r--r--Source/WebCore/loader/PingLoader.h2
-rw-r--r--Source/WebCore/loader/ResourceLoadScheduler.cpp11
-rw-r--r--Source/WebCore/loader/ResourceLoader.cpp2
-rw-r--r--Source/WebCore/loader/SubframeLoader.cpp9
-rw-r--r--Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp2
-rw-r--r--Source/WebCore/loader/appcache/ManifestParser.cpp2
-rw-r--r--Source/WebCore/loader/archive/ArchiveFactory.cpp2
-rw-r--r--Source/WebCore/loader/archive/android/WebArchiveAndroid.cpp4
-rw-r--r--Source/WebCore/loader/cache/CachedFont.cpp4
-rw-r--r--Source/WebCore/loader/cache/CachedFont.h3
-rw-r--r--Source/WebCore/loader/cache/CachedImage.cpp3
-rw-r--r--Source/WebCore/loader/cache/CachedResource.cpp10
-rw-r--r--Source/WebCore/loader/cache/CachedResource.h3
-rw-r--r--Source/WebCore/loader/cache/CachedResourceLoader.cpp35
-rw-r--r--Source/WebCore/loader/cache/CachedResourceLoader.h16
-rw-r--r--Source/WebCore/loader/cache/CachedResourceRequest.cpp1
-rw-r--r--Source/WebCore/loader/cache/CachedScript.cpp16
-rw-r--r--Source/WebCore/loader/cache/CachedScript.h3
-rw-r--r--Source/WebCore/loader/icon/IconDatabase.cpp24
-rw-r--r--Source/WebCore/loader/icon/IconDatabase.h3
-rw-r--r--Source/WebCore/loader/icon/IconLoader.cpp5
-rw-r--r--Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html2
-rw-r--r--Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html18
-rw-r--r--Source/WebCore/manual-tests/autocorrection/autocorrection-contraction.html9
-rw-r--r--Source/WebCore/manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html2
-rw-r--r--Source/WebCore/manual-tests/autocorrection/delete-to-dismiss-reversion.html2
-rw-r--r--Source/WebCore/manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html8
-rw-r--r--Source/WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html2
-rw-r--r--Source/WebCore/manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html8
-rw-r--r--Source/WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html2
-rw-r--r--Source/WebCore/manual-tests/autocorrection/spell-checking-after-reversion.html53
-rw-r--r--Source/WebCore/manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html2
-rw-r--r--Source/WebCore/manual-tests/pop-up-alignment-and-direction.htmlbin0 -> 4730 bytes
-rw-r--r--Source/WebCore/manual-tests/select_webkit_appearance_off_popup_alignment.html78
-rw-r--r--Source/WebCore/manual-tests/svg-filter-animation.svg12
-rw-r--r--Source/WebCore/notifications/NotificationCenter.cpp12
-rw-r--r--Source/WebCore/notifications/NotificationCenter.h8
-rw-r--r--Source/WebCore/page/Chrome.cpp17
-rw-r--r--Source/WebCore/page/Chrome.h5
-rw-r--r--Source/WebCore/page/ChromeClient.h13
-rw-r--r--Source/WebCore/page/Console.cpp26
-rw-r--r--Source/WebCore/page/ContentSecurityPolicy.cpp48
-rw-r--r--Source/WebCore/page/ContentSecurityPolicy.h48
-rw-r--r--Source/WebCore/page/ContextMenuController.cpp19
-rw-r--r--Source/WebCore/page/Crypto.cpp71
-rw-r--r--Source/WebCore/page/Crypto.h54
-rw-r--r--Source/WebCore/page/Crypto.idl37
-rw-r--r--Source/WebCore/page/DOMWindow.cpp39
-rw-r--r--Source/WebCore/page/DOMWindow.h4
-rw-r--r--Source/WebCore/page/DOMWindow.idl38
-rw-r--r--Source/WebCore/page/DragClient.h1
-rw-r--r--Source/WebCore/page/DragController.cpp6
-rw-r--r--Source/WebCore/page/EditorClient.h5
-rw-r--r--Source/WebCore/page/EventHandler.cpp65
-rw-r--r--Source/WebCore/page/EventHandler.h17
-rw-r--r--Source/WebCore/page/FocusController.cpp6
-rw-r--r--Source/WebCore/page/Frame.cpp2
-rw-r--r--Source/WebCore/page/FrameView.cpp135
-rw-r--r--Source/WebCore/page/FrameView.h15
-rw-r--r--Source/WebCore/page/Location.cpp18
-rw-r--r--Source/WebCore/page/MemoryInfo.cpp5
-rw-r--r--Source/WebCore/page/MemoryInfo.h2
-rw-r--r--Source/WebCore/page/MemoryInfo.idl1
-rw-r--r--Source/WebCore/page/Navigator.cpp66
-rw-r--r--Source/WebCore/page/Navigator.h6
-rw-r--r--Source/WebCore/page/Navigator.idl5
-rw-r--r--Source/WebCore/page/Page.cpp10
-rw-r--r--Source/WebCore/page/PrintContext.cpp106
-rw-r--r--Source/WebCore/page/PrintContext.h6
-rw-r--r--Source/WebCore/page/SecurityOrigin.cpp20
-rw-r--r--Source/WebCore/page/Settings.cpp8
-rw-r--r--Source/WebCore/page/Settings.h8
-rw-r--r--Source/WebCore/page/SpatialNavigation.cpp48
-rw-r--r--Source/WebCore/page/SuspendableTimer.cpp13
-rw-r--r--Source/WebCore/page/SuspendableTimer.h3
-rw-r--r--Source/WebCore/page/WindowFeatures.cpp4
-rw-r--r--Source/WebCore/page/XSSAuditor.cpp432
-rw-r--r--Source/WebCore/page/XSSAuditor.h181
-rw-r--r--Source/WebCore/page/animation/AnimationController.cpp8
-rw-r--r--Source/WebCore/page/chromium/FrameChromium.cpp4
-rw-r--r--Source/WebCore/page/mac/WebCoreFrameView.h2
-rw-r--r--Source/WebCore/page/qt/FrameQt.cpp2
-rw-r--r--Source/WebCore/page/wince/FrameWinCE.cpp2
-rw-r--r--Source/WebCore/page/wx/DragControllerWx.cpp2
-rw-r--r--Source/WebCore/platform/AsyncFileSystem.cpp4
-rw-r--r--Source/WebCore/platform/AsyncFileSystem.h10
-rw-r--r--Source/WebCore/platform/ContextMenuItem.h3
-rw-r--r--Source/WebCore/platform/DragData.h16
-rw-r--r--Source/WebCore/platform/DragImage.cpp7
-rw-r--r--Source/WebCore/platform/DragImage.h1
-rw-r--r--Source/WebCore/platform/FileChooser.cpp8
-rw-r--r--Source/WebCore/platform/FileChooser.h1
-rw-r--r--Source/WebCore/platform/FileSystem.cpp16
-rw-r--r--Source/WebCore/platform/FileSystem.h43
-rw-r--r--Source/WebCore/platform/KURL.cpp115
-rw-r--r--Source/WebCore/platform/KURL.h6
-rw-r--r--Source/WebCore/platform/KURLGoogle.cpp87
-rw-r--r--Source/WebCore/platform/KURLGooglePrivate.h20
-rw-r--r--Source/WebCore/platform/Length.cpp13
-rw-r--r--Source/WebCore/platform/Length.h5
-rw-r--r--Source/WebCore/platform/LinkHash.cpp2
-rw-r--r--Source/WebCore/platform/LocalizationStrategy.h3
-rw-r--r--Source/WebCore/platform/LocalizedStrings.cpp7
-rw-r--r--Source/WebCore/platform/LocalizedStrings.h3
-rw-r--r--Source/WebCore/platform/MIMETypeRegistry.cpp16
-rw-r--r--Source/WebCore/platform/MIMETypeRegistry.h3
-rw-r--r--Source/WebCore/platform/PlatformGestureEvent.h66
-rw-r--r--Source/WebCore/platform/PlatformWheelEvent.h6
-rw-r--r--Source/WebCore/platform/PopupMenuStyle.h7
-rw-r--r--Source/WebCore/platform/SchemeRegistry.cpp38
-rw-r--r--Source/WebCore/platform/SchemeRegistry.h5
-rw-r--r--Source/WebCore/platform/ScrollAnimator.cpp41
-rw-r--r--Source/WebCore/platform/ScrollAnimator.h30
-rw-r--r--Source/WebCore/platform/ScrollView.cpp177
-rw-r--r--Source/WebCore/platform/ScrollView.h27
-rw-r--r--Source/WebCore/platform/ScrollableArea.cpp63
-rw-r--r--Source/WebCore/platform/ScrollableArea.h38
-rw-r--r--Source/WebCore/platform/Scrollbar.cpp20
-rw-r--r--Source/WebCore/platform/ScrollbarThemeComposite.cpp20
-rw-r--r--Source/WebCore/platform/URLString.h52
-rw-r--r--Source/WebCore/platform/android/TemporaryLinkStubs.cpp2
-rw-r--r--Source/WebCore/platform/audio/FFTFrame.h39
-rw-r--r--Source/WebCore/platform/audio/FFTFrameStub.cpp6
-rw-r--r--Source/WebCore/platform/audio/chromium/AudioBusChromium.cpp2
-rw-r--r--Source/WebCore/platform/audio/fftw/FFTFrameFFTW.cpp301
-rw-r--r--Source/WebCore/platform/audio/mac/FFTFrameMac.cpp4
-rw-r--r--Source/WebCore/platform/audio/mkl/FFTFrameMKL.cpp4
-rw-r--r--Source/WebCore/platform/brew/MIMETypeRegistryBrew.cpp4
-rw-r--r--Source/WebCore/platform/brew/SystemTimeBrew.cpp11
-rw-r--r--Source/WebCore/platform/cf/BinaryPropertyList.cpp2
-rw-r--r--Source/WebCore/platform/cf/FileSystemCF.cpp17
-rw-r--r--Source/WebCore/platform/chromium/ChromiumDataObject.cpp4
-rw-r--r--Source/WebCore/platform/chromium/ChromiumDataObject.h2
-rw-r--r--Source/WebCore/platform/chromium/ClipboardChromium.cpp2
-rw-r--r--Source/WebCore/platform/chromium/MIMETypeRegistryChromium.cpp11
-rw-r--r--Source/WebCore/platform/chromium/PlatformBridge.h7
-rw-r--r--Source/WebCore/platform/chromium/PopupMenuChromium.cpp119
-rw-r--r--Source/WebCore/platform/chromium/PopupMenuChromium.h23
-rw-r--r--Source/WebCore/platform/chromium/ReadableDataObject.cpp19
-rw-r--r--Source/WebCore/platform/chromium/ReadableDataObject.h7
-rw-r--r--Source/WebCore/platform/chromium/ScrollbarThemeChromium.cpp2
-rw-r--r--Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm4
-rw-r--r--Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp5
-rw-r--r--Source/WebCore/platform/efl/RenderThemeEfl.cpp79
-rw-r--r--Source/WebCore/platform/efl/RenderThemeEfl.h17
-rw-r--r--Source/WebCore/platform/efl/SystemTimeEfl.cpp9
-rw-r--r--Source/WebCore/platform/efl/TemporaryLinkStubs.cpp6
-rw-r--r--Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp8
-rw-r--r--Source/WebCore/platform/graphics/ContextShadow.h2
-rw-r--r--Source/WebCore/platform/graphics/Extensions3D.h5
-rw-r--r--Source/WebCore/platform/graphics/FloatQuad.h6
-rw-r--r--Source/WebCore/platform/graphics/FloatRect.cpp20
-rw-r--r--Source/WebCore/platform/graphics/FloatRect.h10
-rw-r--r--Source/WebCore/platform/graphics/Font.cpp74
-rw-r--r--Source/WebCore/platform/graphics/Font.h25
-rw-r--r--Source/WebCore/platform/graphics/FontCache.cpp11
-rw-r--r--Source/WebCore/platform/graphics/FontDescription.h9
-rw-r--r--Source/WebCore/platform/graphics/FontFastPath.cpp13
-rw-r--r--Source/WebCore/platform/graphics/FontMetrics.h122
-rw-r--r--Source/WebCore/platform/graphics/FontWidthVariant.h35
-rw-r--r--Source/WebCore/platform/graphics/GlyphBuffer.h17
-rw-r--r--Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp2
-rw-r--r--Source/WebCore/platform/graphics/GraphicsContext.cpp52
-rw-r--r--Source/WebCore/platform/graphics/GraphicsContext.h23
-rw-r--r--Source/WebCore/platform/graphics/GraphicsContext3D.cpp4
-rw-r--r--Source/WebCore/platform/graphics/GraphicsContext3D.h16
-rw-r--r--Source/WebCore/platform/graphics/Icon.h7
-rw-r--r--Source/WebCore/platform/graphics/IntRect.cpp16
-rw-r--r--Source/WebCore/platform/graphics/IntRect.h26
-rw-r--r--Source/WebCore/platform/graphics/IntRectHash.h59
-rw-r--r--Source/WebCore/platform/graphics/IntSizeHash.h16
-rw-r--r--Source/WebCore/platform/graphics/MediaPlayer.cpp20
-rw-r--r--Source/WebCore/platform/graphics/MediaPlayer.h5
-rw-r--r--Source/WebCore/platform/graphics/MediaPlayerPrivate.h4
-rw-r--r--Source/WebCore/platform/graphics/ShadowBlur.cpp733
-rw-r--r--Source/WebCore/platform/graphics/ShadowBlur.h105
-rw-r--r--Source/WebCore/platform/graphics/SimpleFontData.cpp38
-rw-r--r--Source/WebCore/platform/graphics/SimpleFontData.h16
-rw-r--r--Source/WebCore/platform/graphics/StringTruncator.cpp2
-rw-r--r--Source/WebCore/platform/graphics/TextRun.h23
-rw-r--r--Source/WebCore/platform/graphics/TiledBackingStore.cpp20
-rw-r--r--Source/WebCore/platform/graphics/WidthIterator.cpp74
-rw-r--r--Source/WebCore/platform/graphics/WidthIterator.h7
-rw-r--r--Source/WebCore/platform/graphics/android/FontAndroid.cpp7
-rw-r--r--Source/WebCore/platform/graphics/android/FontCustomPlatformData.cpp2
-rw-r--r--Source/WebCore/platform/graphics/android/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/android/FontDataAndroid.cpp26
-rw-r--r--Source/WebCore/platform/graphics/android/GLWebViewState.cpp2
-rw-r--r--Source/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp60
-rw-r--r--Source/WebCore/platform/graphics/android/ImageBufferAndroid.cpp6
-rw-r--r--Source/WebCore/platform/graphics/android/LayerAndroid.cpp4
-rw-r--r--Source/WebCore/platform/graphics/android/PathAndroid.cpp31
-rw-r--r--Source/WebCore/platform/graphics/android/PlatformGraphicsContext.h2
-rw-r--r--Source/WebCore/platform/graphics/android/ShaderProgram.cpp40
-rw-r--r--Source/WebCore/platform/graphics/android/TiledPage.cpp6
-rw-r--r--Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp4
-rw-r--r--Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h8
-rw-r--r--Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm55
-rw-r--r--Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp401
-rw-r--r--Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h58
-rw-r--r--Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHostClient.h43
-rw-r--r--Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp401
-rw-r--r--Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h82
-rw-r--r--Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp51
-rw-r--r--Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp160
-rw-r--r--Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.h65
-rw-r--r--Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp4
-rw-r--r--Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp12
-rw-r--r--Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp41
-rw-r--r--Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp123
-rw-r--r--Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp14
-rw-r--r--Source/WebCore/platform/graphics/cg/ImageCG.cpp4
-rw-r--r--Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp38
-rw-r--r--Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h4
-rw-r--r--Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp17
-rw-r--r--Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h3
-rw-r--r--Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp15
-rw-r--r--Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h4
-rw-r--r--Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp37
-rw-r--r--Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp29
-rw-r--r--Source/WebCore/platform/graphics/chromium/FontLinux.cpp19
-rw-r--r--Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp16
-rw-r--r--Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h5
-rw-r--r--Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp24
-rw-r--r--Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp21
-rw-r--r--Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h3
-rw-r--r--Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp4
-rw-r--r--Source/WebCore/platform/graphics/chromium/IconChromium.cpp (renamed from Source/WebCore/platform/graphics/chromium/IconChromiumWin.cpp)23
-rw-r--r--Source/WebCore/platform/graphics/chromium/LayerChromium.cpp9
-rw-r--r--Source/WebCore/platform/graphics/chromium/LayerChromium.h13
-rw-r--r--Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp83
-rw-r--r--Source/WebCore/platform/graphics/chromium/LayerTexture.cpp1
-rw-r--r--Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp37
-rw-r--r--Source/WebCore/platform/graphics/chromium/PlatformIcon.h6
-rw-r--r--Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp126
-rw-r--r--Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h19
-rw-r--r--Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp24
-rw-r--r--Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp34
-rw-r--r--Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp6
-rw-r--r--Source/WebCore/platform/graphics/chromium/UniscribeHelperTextRun.cpp10
-rw-r--r--Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp18
-rw-r--r--Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h2
-rw-r--r--Source/WebCore/platform/graphics/cocoa/FontPlatformData.h16
-rw-r--r--Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm52
-rw-r--r--Source/WebCore/platform/graphics/efl/FontEfl.cpp5
-rw-r--r--Source/WebCore/platform/graphics/filters/DistantLightSource.cpp80
-rw-r--r--Source/WebCore/platform/graphics/filters/DistantLightSource.h2
-rw-r--r--Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp25
-rw-r--r--Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h10
-rw-r--r--Source/WebCore/platform/graphics/filters/FilterEffect.cpp16
-rw-r--r--Source/WebCore/platform/graphics/filters/FilterEffect.h1
-rw-r--r--Source/WebCore/platform/graphics/filters/LightSource.cpp149
-rw-r--r--Source/WebCore/platform/graphics/filters/LightSource.h11
-rw-r--r--Source/WebCore/platform/graphics/filters/PointLightSource.cpp91
-rw-r--r--Source/WebCore/platform/graphics/filters/PointLightSource.h3
-rw-r--r--Source/WebCore/platform/graphics/filters/SpotLightSource.cpp198
-rw-r--r--Source/WebCore/platform/graphics/filters/SpotLightSource.h8
-rw-r--r--Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp2
-rw-r--r--Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp21
-rw-r--r--Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp16
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.cpp86
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.h123
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.cpp1228
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.h126
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnShader.cpp59
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnShader.h58
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.cpp62
-rw-r--r--Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.h52
-rw-r--r--Source/WebCore/platform/graphics/gpu/Shader.cpp169
-rw-r--r--Source/WebCore/platform/graphics/gpu/Shader.h27
-rw-r--r--Source/WebCore/platform/graphics/gpu/SolidFillShader.cpp20
-rw-r--r--Source/WebCore/platform/graphics/gpu/TexShader.cpp25
-rw-r--r--Source/WebCore/platform/graphics/gpu/Texture.cpp2
-rw-r--r--Source/WebCore/platform/graphics/gpu/TilingData.cpp8
-rw-r--r--Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm2
-rw-r--r--Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp17
-rw-r--r--Source/WebCore/platform/graphics/gtk/FontGtk.cpp5
-rw-r--r--Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp2
-rw-r--r--Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/haiku/FontHaiku.cpp5
-rw-r--r--Source/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp10
-rw-r--r--Source/WebCore/platform/graphics/mac/ComplexTextController.cpp82
-rw-r--r--Source/WebCore/platform/graphics/mac/ComplexTextController.h15
-rw-r--r--Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp3
-rw-r--r--Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp6
-rw-r--r--Source/WebCore/platform/graphics/mac/FontCacheMac.mm2
-rw-r--r--Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp4
-rw-r--r--Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp4
-rw-r--r--Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/mac/FontMac.mm9
-rw-r--r--Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp4
-rw-r--r--Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm8
-rw-r--r--Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm2
-rw-r--r--Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm63
-rw-r--r--Source/WebCore/platform/graphics/mac/WebGLLayer.mm4
-rw-r--r--Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp8
-rw-r--r--Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp28
-rw-r--r--Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp4
-rw-r--r--Source/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp2
-rw-r--r--Source/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp22
-rw-r--r--Source/WebCore/platform/graphics/qt/ContextShadowQt.cpp5
-rw-r--r--Source/WebCore/platform/graphics/qt/Extensions3DQt.cpp4
-rw-r--r--Source/WebCore/platform/graphics/qt/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/qt/FontCustomPlatformDataQt.cpp2
-rw-r--r--Source/WebCore/platform/graphics/qt/FontQt.cpp37
-rw-r--r--Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp30
-rw-r--r--Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp30
-rw-r--r--Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp16
-rw-r--r--Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h4
-rw-r--r--Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp14
-rw-r--r--Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp2
-rw-r--r--Source/WebCore/platform/graphics/qt/ImageQt.cpp23
-rw-r--r--Source/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp2
-rw-r--r--Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp19
-rw-r--r--Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h2
-rw-r--r--Source/WebCore/platform/graphics/qt/PathQt.cpp21
-rw-r--r--Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp22
-rw-r--r--Source/WebCore/platform/graphics/qt/TransparencyLayer.h3
-rw-r--r--Source/WebCore/platform/graphics/skia/FloatRectSkia.cpp2
-rw-r--r--Source/WebCore/platform/graphics/skia/FontCustomPlatformData.cpp13
-rw-r--r--Source/WebCore/platform/graphics/skia/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp4
-rw-r--r--Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp32
-rw-r--r--Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp121
-rw-r--r--Source/WebCore/platform/graphics/skia/IntRectSkia.cpp4
-rw-r--r--Source/WebCore/platform/graphics/skia/PathSkia.cpp20
-rw-r--r--Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp79
-rw-r--r--Source/WebCore/platform/graphics/skia/PlatformContextSkia.h8
-rw-r--r--Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h4
-rw-r--r--Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp12
-rw-r--r--Source/WebCore/platform/graphics/transforms/AffineTransform.cpp14
-rw-r--r--Source/WebCore/platform/graphics/transforms/AffineTransform.h6
-rw-r--r--Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h2
-rw-r--r--Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h2
-rw-r--r--Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp25
-rw-r--r--Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h14
-rw-r--r--Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp48
-rw-r--r--Source/WebCore/platform/graphics/transforms/TransformationMatrix.h18
-rw-r--r--Source/WebCore/platform/graphics/win/FontCGWin.cpp10
-rw-r--r--Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp13
-rw-r--r--Source/WebCore/platform/graphics/win/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp2
-rw-r--r--Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.h2
-rw-r--r--Source/WebCore/platform/graphics/win/FontWin.cpp9
-rw-r--r--Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp2
-rw-r--r--Source/WebCore/platform/graphics/win/IconWin.cpp11
-rw-r--r--Source/WebCore/platform/graphics/win/IntRectWin.cpp2
-rw-r--r--Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp21
-rw-r--r--Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h13
-rw-r--r--Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp2
-rw-r--r--Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp2
-rw-r--r--Source/WebCore/platform/graphics/win/QTMovie.cpp108
-rw-r--r--Source/WebCore/platform/graphics/win/QTMovieGWorld.cpp8
-rw-r--r--Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp41
-rw-r--r--Source/WebCore/platform/graphics/win/SimpleFontDataCairoWin.cpp21
-rw-r--r--Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp32
-rw-r--r--Source/WebCore/platform/graphics/win/UniscribeController.cpp6
-rw-r--r--Source/WebCore/platform/graphics/win/WKCAImageQueue.cpp4
-rw-r--r--Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp12
-rw-r--r--Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h3
-rw-r--r--Source/WebCore/platform/graphics/wince/FontWinCE.cpp8
-rw-r--r--Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp41
-rw-r--r--Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp10
-rw-r--r--Source/WebCore/platform/graphics/wince/SharedBitmap.cpp10
-rw-r--r--Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp17
-rw-r--r--Source/WebCore/platform/graphics/wx/FontCustomPlatformData.cpp2
-rw-r--r--Source/WebCore/platform/graphics/wx/FontCustomPlatformData.h4
-rw-r--r--Source/WebCore/platform/graphics/wx/FontPlatformData.h4
-rw-r--r--Source/WebCore/platform/graphics/wx/FontPlatformDataWx.cpp2
-rw-r--r--Source/WebCore/platform/graphics/wx/FontWx.cpp10
-rw-r--r--Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp4
-rw-r--r--Source/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp12
-rw-r--r--Source/WebCore/platform/gtk/GtkVersioning.h5
-rw-r--r--Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp5
-rw-r--r--Source/WebCore/platform/gtk/RenderThemeGtk.cpp112
-rw-r--r--Source/WebCore/platform/gtk/RenderThemeGtk.h16
-rw-r--r--Source/WebCore/platform/gtk/RenderThemeGtk2.cpp80
-rw-r--r--Source/WebCore/platform/gtk/RenderThemeGtk3.cpp115
-rw-r--r--Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp7
-rw-r--r--Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp184
-rw-r--r--Source/WebCore/platform/gtk/WidgetRenderingContext.cpp24
-rw-r--r--Source/WebCore/platform/gtk/WidgetRenderingContext.h7
-rw-r--r--Source/WebCore/platform/gtk/gtk2drawing.c552
-rw-r--r--Source/WebCore/platform/gtk/gtkdrawing.h217
-rw-r--r--Source/WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp4
-rw-r--r--Source/WebCore/platform/image-decoders/ImageDecoder.cpp91
-rw-r--r--Source/WebCore/platform/image-decoders/ImageDecoder.h157
-rw-r--r--Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp4
-rw-r--r--Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp2
-rw-r--r--Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp24
-rw-r--r--Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp8
-rw-r--r--Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h1
-rw-r--r--Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp2
-rw-r--r--Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp9
-rw-r--r--Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp9
-rw-r--r--Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp2
-rw-r--r--Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h1
-rw-r--r--Source/WebCore/platform/mac/DragImageMac.mm210
-rw-r--r--Source/WebCore/platform/mac/EmptyProtocolDefinitions.h5
-rw-r--r--Source/WebCore/platform/mac/FileSystemMac.mm25
-rw-r--r--Source/WebCore/platform/mac/MIMETypeRegistryMac.mm3
-rw-r--r--Source/WebCore/platform/mac/PasteboardMac.mm3
-rw-r--r--Source/WebCore/platform/mac/PopupMenuMac.mm25
-rw-r--r--Source/WebCore/platform/mac/ScrollAnimatorMac.h79
-rw-r--r--Source/WebCore/platform/mac/ScrollAnimatorMac.mm923
-rw-r--r--Source/WebCore/platform/mac/ScrollViewMac.mm4
-rw-r--r--Source/WebCore/platform/mac/ScrollbarThemeMac.h7
-rw-r--r--Source/WebCore/platform/mac/ScrollbarThemeMac.mm126
-rw-r--r--Source/WebCore/platform/mac/WebCoreSystemInterface.h43
-rw-r--r--Source/WebCore/platform/mac/WebCoreSystemInterface.mm43
-rw-r--r--Source/WebCore/platform/mac/WheelEventMac.mm3
-rw-r--r--Source/WebCore/platform/mac/WidgetMac.mm4
-rw-r--r--Source/WebCore/platform/network/BlobRegistryImpl.cpp4
-rw-r--r--Source/WebCore/platform/network/BlobResourceHandle.cpp50
-rw-r--r--Source/WebCore/platform/network/BlobResourceHandle.h3
-rw-r--r--Source/WebCore/platform/network/FormData.cpp22
-rw-r--r--Source/WebCore/platform/network/FormDataBuilder.cpp5
-rw-r--r--Source/WebCore/platform/network/ProtectionSpaceHash.h6
-rw-r--r--Source/WebCore/platform/network/ResourceHandle.h4
-rw-r--r--Source/WebCore/platform/network/ResourceHandleInternal.h13
-rw-r--r--Source/WebCore/platform/network/ResourceRequestBase.cpp22
-rw-r--r--Source/WebCore/platform/network/ResourceRequestBase.h18
-rw-r--r--Source/WebCore/platform/network/cf/DNSCFNet.cpp1
-rw-r--r--Source/WebCore/platform/network/cf/DownloadBundle.h43
-rw-r--r--Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp13
-rw-r--r--Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp1
-rw-r--r--Source/WebCore/platform/network/cf/LoaderRunLoopCF.h2
-rw-r--r--Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp4
-rw-r--r--Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp7
-rw-r--r--Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp49
-rw-r--r--Source/WebCore/platform/network/cf/ResourceRequestCFNet.h47
-rw-r--r--Source/WebCore/platform/network/cf/SocketStreamHandle.h1
-rw-r--r--Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp1
-rw-r--r--Source/WebCore/platform/network/chromium/ResourceRequest.cpp2
-rw-r--r--Source/WebCore/platform/network/chromium/ResourceRequest.h10
-rw-r--r--Source/WebCore/platform/network/chromium/ResourceResponse.cpp4
-rw-r--r--Source/WebCore/platform/network/chromium/ResourceResponse.h15
-rw-r--r--Source/WebCore/platform/network/mac/AuthenticationMac.mm15
-rw-r--r--Source/WebCore/platform/network/mac/FormDataStreamMac.mm4
-rw-r--r--Source/WebCore/platform/network/mac/ResourceHandleMac.mm7
-rw-r--r--Source/WebCore/platform/network/mac/ResourceRequestMac.mm22
-rw-r--r--Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp20
-rw-r--r--Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h4
-rw-r--r--Source/WebCore/platform/network/soup/CookieJarSoup.cpp8
-rw-r--r--Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp375
-rw-r--r--Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp6
-rw-r--r--Source/WebCore/platform/network/soup/SocketStreamHandle.h2
-rw-r--r--Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp35
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.c200
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.h62
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c922
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-http-input-stream.h77
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-data.c170
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-data.h52
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-file.c331
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-file.h54
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-http.c356
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request-http.h54
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request.c312
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-request.h100
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-requester.c188
-rw-r--r--Source/WebCore/platform/network/soup/cache/soup-requester.h81
-rw-r--r--Source/WebCore/platform/network/soup/cache/webkit/soup-cache-private.h42
-rw-r--r--Source/WebCore/platform/network/soup/cache/webkit/soup-cache.c1677
-rw-r--r--Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h106
-rw-r--r--Source/WebCore/platform/network/win/DownloadBundleWin.cpp196
-rw-r--r--Source/WebCore/platform/qt/ClipboardQt.h80
-rw-r--r--Source/WebCore/platform/qt/CookieJarQt.cpp8
-rw-r--r--Source/WebCore/platform/qt/DragDataQt.cpp3
-rw-r--r--Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp5
-rw-r--r--Source/WebCore/platform/qt/RenderThemeQt.cpp27
-rw-r--r--Source/WebCore/platform/qt/ScrollbarQt.cpp5
-rw-r--r--Source/WebCore/platform/sql/SQLiteStatement.cpp40
-rw-r--r--Source/WebCore/platform/sql/SQLiteStatement.h2
-rw-r--r--Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp1081
-rw-r--r--Source/WebCore/platform/text/Base64.cpp6
-rw-r--r--Source/WebCore/platform/text/Base64.h29
-rw-r--r--Source/WebCore/platform/text/BidiResolver.h10
-rw-r--r--Source/WebCore/platform/text/LocalizedNumber.h59
-rw-r--r--Source/WebCore/platform/text/LocalizedNumberNone.cpp (renamed from Source/WebCore/platform/graphics/chromium/IconChromiumMac.cpp)29
-rw-r--r--Source/WebCore/platform/text/RegularExpression.cpp91
-rw-r--r--Source/WebCore/platform/text/SegmentedString.cpp15
-rw-r--r--Source/WebCore/platform/text/SegmentedString.h12
-rw-r--r--Source/WebCore/platform/text/TextCodecICU.cpp2
-rw-r--r--Source/WebCore/platform/text/TextCodecUTF16.cpp2
-rw-r--r--Source/WebCore/platform/text/TextCodecUTF8.cpp276
-rw-r--r--Source/WebCore/platform/text/TextCodecUTF8.h52
-rw-r--r--Source/WebCore/platform/text/TextEncodingRegistry.cpp15
-rw-r--r--Source/WebCore/platform/text/mac/TextCodecMac.cpp4
-rw-r--r--Source/WebCore/platform/text/transcoder/FontTranscoder.cpp2
-rw-r--r--Source/WebCore/platform/win/BString.cpp11
-rw-r--r--Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp277
-rw-r--r--Source/WebCore/platform/win/ClipboardUtilitiesWin.h11
-rw-r--r--Source/WebCore/platform/win/ClipboardWin.cpp128
-rw-r--r--Source/WebCore/platform/win/ClipboardWin.h7
-rw-r--r--Source/WebCore/platform/win/ContextMenuWin.cpp3
-rw-r--r--Source/WebCore/platform/win/CursorWin.cpp4
-rw-r--r--Source/WebCore/platform/win/DragDataWin.cpp145
-rw-r--r--Source/WebCore/platform/win/DragImageWin.cpp147
-rw-r--r--Source/WebCore/platform/win/FileChooserWin.cpp3
-rw-r--r--Source/WebCore/platform/win/LoggingWin.cpp2
-rw-r--r--Source/WebCore/platform/win/MIMETypeRegistryWin.cpp4
-rw-r--r--Source/WebCore/platform/win/PopupMenuWin.cpp19
-rw-r--r--Source/WebCore/platform/win/PopupMenuWin.h2
-rw-r--r--Source/WebCore/platform/win/SystemTimeWin.cpp11
-rw-r--r--Source/WebCore/platform/win/WCDataObject.cpp14
-rw-r--r--Source/WebCore/platform/win/WCDataObject.h6
-rw-r--r--Source/WebCore/platform/wince/DragDataWinCE.cpp5
-rw-r--r--Source/WebCore/platform/wince/KeygenWinCE.cpp5
-rw-r--r--Source/WebCore/platform/wince/MIMETypeRegistryWinCE.cpp4
-rw-r--r--Source/WebCore/platform/wx/MimeTypeRegistryWx.cpp5
-rw-r--r--Source/WebCore/platform/wx/RenderThemeWx.cpp1
-rw-r--r--Source/WebCore/platform/wx/SystemTimeWx.cpp10
-rw-r--r--Source/WebCore/plugins/IFrameShimSupport.cpp167
-rw-r--r--Source/WebCore/plugins/IFrameShimSupport.h34
-rw-r--r--Source/WebCore/plugins/gtk/PluginPackageGtk.cpp25
-rw-r--r--Source/WebCore/plugins/gtk/gtk2xtbin.c2
-rw-r--r--Source/WebCore/plugins/gtk/gtk2xtbin.h3
-rw-r--r--Source/WebCore/plugins/qt/PluginViewQt.cpp14
-rw-r--r--Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp4
-rw-r--r--Source/WebCore/plugins/win/PluginPackageWin.cpp2
-rw-r--r--Source/WebCore/plugins/win/PluginViewWin.cpp8
-rw-r--r--Source/WebCore/rendering/CounterNode.cpp2
-rw-r--r--Source/WebCore/rendering/CounterNode.h2
-rw-r--r--Source/WebCore/rendering/EllipsisBox.cpp10
-rw-r--r--Source/WebCore/rendering/InlineBox.cpp6
-rw-r--r--Source/WebCore/rendering/InlineBox.h10
-rw-r--r--Source/WebCore/rendering/InlineFlowBox.cpp62
-rw-r--r--Source/WebCore/rendering/InlineFlowBox.h39
-rw-r--r--Source/WebCore/rendering/InlineTextBox.cpp78
-rw-r--r--Source/WebCore/rendering/InlineTextBox.h9
-rw-r--r--Source/WebCore/rendering/LayoutState.cpp4
-rw-r--r--Source/WebCore/rendering/LayoutState.h2
-rw-r--r--Source/WebCore/rendering/MediaControlElements.cpp366
-rw-r--r--Source/WebCore/rendering/MediaControlElements.h139
-rw-r--r--Source/WebCore/rendering/RenderBR.h4
-rw-r--r--Source/WebCore/rendering/RenderBlock.cpp530
-rw-r--r--Source/WebCore/rendering/RenderBlock.h71
-rw-r--r--Source/WebCore/rendering/RenderBlockLineLayout.cpp133
-rw-r--r--Source/WebCore/rendering/RenderBox.cpp59
-rw-r--r--Source/WebCore/rendering/RenderBox.h31
-rw-r--r--Source/WebCore/rendering/RenderBoxModelObject.cpp182
-rw-r--r--Source/WebCore/rendering/RenderCombineText.cpp135
-rw-r--r--Source/WebCore/rendering/RenderCombineText.h66
-rw-r--r--Source/WebCore/rendering/RenderCounter.cpp243
-rw-r--r--Source/WebCore/rendering/RenderCounter.h5
-rw-r--r--Source/WebCore/rendering/RenderEmbeddedObject.cpp3
-rw-r--r--Source/WebCore/rendering/RenderFileUploadControl.cpp9
-rw-r--r--Source/WebCore/rendering/RenderFileUploadControl.h4
-rw-r--r--Source/WebCore/rendering/RenderFlexibleBox.cpp4
-rw-r--r--Source/WebCore/rendering/RenderFrameSet.cpp8
-rw-r--r--Source/WebCore/rendering/RenderImage.cpp93
-rw-r--r--Source/WebCore/rendering/RenderImage.h7
-rw-r--r--Source/WebCore/rendering/RenderImageResource.h3
-rw-r--r--Source/WebCore/rendering/RenderImageResourceStyleImage.h2
-rw-r--r--Source/WebCore/rendering/RenderIndicator.cpp41
-rw-r--r--Source/WebCore/rendering/RenderIndicator.h18
-rw-r--r--Source/WebCore/rendering/RenderInline.cpp50
-rw-r--r--Source/WebCore/rendering/RenderLayer.cpp154
-rw-r--r--Source/WebCore/rendering/RenderLayer.h6
-rw-r--r--Source/WebCore/rendering/RenderLayerBacking.cpp8
-rw-r--r--Source/WebCore/rendering/RenderLayerCompositor.cpp2
-rw-r--r--Source/WebCore/rendering/RenderLineBoxList.cpp14
-rw-r--r--Source/WebCore/rendering/RenderListBox.cpp56
-rw-r--r--Source/WebCore/rendering/RenderListBox.h5
-rw-r--r--Source/WebCore/rendering/RenderListItem.cpp4
-rw-r--r--Source/WebCore/rendering/RenderListMarker.cpp33
-rw-r--r--Source/WebCore/rendering/RenderMarquee.cpp4
-rw-r--r--Source/WebCore/rendering/RenderMedia.cpp580
-rw-r--r--Source/WebCore/rendering/RenderMedia.h98
-rw-r--r--Source/WebCore/rendering/RenderMenuList.cpp37
-rw-r--r--Source/WebCore/rendering/RenderMenuList.h4
-rw-r--r--Source/WebCore/rendering/RenderMeter.cpp2
-rw-r--r--Source/WebCore/rendering/RenderObject.cpp57
-rw-r--r--Source/WebCore/rendering/RenderObject.h18
-rw-r--r--Source/WebCore/rendering/RenderObjectChildList.cpp130
-rw-r--r--Source/WebCore/rendering/RenderObjectChildList.h6
-rw-r--r--Source/WebCore/rendering/RenderOverflow.h126
-rw-r--r--Source/WebCore/rendering/RenderProgress.cpp28
-rw-r--r--Source/WebCore/rendering/RenderProgress.h16
-rw-r--r--Source/WebCore/rendering/RenderReplaced.cpp8
-rw-r--r--Source/WebCore/rendering/RenderRubyRun.cpp12
-rw-r--r--Source/WebCore/rendering/RenderRubyRun.h4
-rw-r--r--Source/WebCore/rendering/RenderScrollbarTheme.cpp4
-rw-r--r--Source/WebCore/rendering/RenderTable.cpp16
-rw-r--r--Source/WebCore/rendering/RenderTableCell.cpp10
-rw-r--r--Source/WebCore/rendering/RenderTableRow.cpp2
-rw-r--r--Source/WebCore/rendering/RenderTableSection.cpp10
-rw-r--r--Source/WebCore/rendering/RenderText.cpp35
-rw-r--r--Source/WebCore/rendering/RenderTextControl.cpp10
-rw-r--r--Source/WebCore/rendering/RenderTextControlMultiLine.cpp2
-rw-r--r--Source/WebCore/rendering/RenderTextControlSingleLine.cpp23
-rw-r--r--Source/WebCore/rendering/RenderTheme.h3
-rw-r--r--Source/WebCore/rendering/RenderThemeChromiumMac.h1
-rw-r--r--Source/WebCore/rendering/RenderThemeChromiumWin.cpp6
-rw-r--r--Source/WebCore/rendering/RenderThemeMac.h3
-rw-r--r--Source/WebCore/rendering/RenderThemeMac.mm32
-rw-r--r--Source/WebCore/rendering/RenderThemeSafari.cpp18
-rw-r--r--Source/WebCore/rendering/RenderThemeWin.cpp7
-rw-r--r--Source/WebCore/rendering/RenderThemeWinCE.cpp28
-rw-r--r--Source/WebCore/rendering/RenderTreeAsText.cpp21
-rw-r--r--Source/WebCore/rendering/RenderVideo.cpp16
-rw-r--r--Source/WebCore/rendering/RenderView.cpp18
-rw-r--r--Source/WebCore/rendering/RenderWidget.cpp5
-rw-r--r--Source/WebCore/rendering/RenderingAllInOne.cpp1
-rw-r--r--Source/WebCore/rendering/RootInlineBox.cpp8
-rw-r--r--Source/WebCore/rendering/ShadowElement.cpp2
-rw-r--r--Source/WebCore/rendering/ShadowElement.h6
-rw-r--r--Source/WebCore/rendering/TextControlInnerElements.cpp45
-rw-r--r--Source/WebCore/rendering/TextControlInnerElements.h3
-rw-r--r--Source/WebCore/rendering/TransformState.cpp6
-rw-r--r--Source/WebCore/rendering/break_lines.cpp2
-rw-r--r--Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp2
-rw-r--r--Source/WebCore/rendering/mathml/RenderMathMLOperator.h2
-rw-r--r--Source/WebCore/rendering/style/RenderStyle.cpp3
-rw-r--r--Source/WebCore/rendering/style/RenderStyle.h5
-rw-r--r--Source/WebCore/rendering/style/RenderStyleConstants.h11
-rw-r--r--Source/WebCore/rendering/style/StyleCachedImage.cpp2
-rw-r--r--Source/WebCore/rendering/style/StyleCachedImage.h2
-rw-r--r--Source/WebCore/rendering/style/StyleGeneratedImage.cpp2
-rw-r--r--Source/WebCore/rendering/style/StyleGeneratedImage.h2
-rw-r--r--Source/WebCore/rendering/style/StyleImage.h4
-rw-r--r--Source/WebCore/rendering/style/StylePendingImage.h3
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGImage.cpp4
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGInlineText.cpp47
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGInlineText.h7
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp39
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceFilter.h3
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp12
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h23
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp5
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGRoot.cpp7
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGText.cpp21
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp5
-rw-r--r--Source/WebCore/rendering/svg/SVGInlineTextBox.cpp136
-rw-r--r--Source/WebCore/rendering/svg/SVGInlineTextBox.h4
-rw-r--r--Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp2
-rw-r--r--Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp26
-rw-r--r--Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp2
-rw-r--r--Source/WebCore/rendering/svg/SVGTextMetrics.cpp29
-rw-r--r--Source/WebCore/rendering/svg/SVGTextMetrics.h3
-rw-r--r--Source/WebCore/rendering/svg/SVGTextQuery.cpp5
-rw-r--r--Source/WebCore/storage/Database.cpp4
-rw-r--r--Source/WebCore/storage/IDBAbortEvent.cpp8
-rw-r--r--Source/WebCore/storage/IDBAbortEvent.h4
-rw-r--r--Source/WebCore/storage/IDBCallbacks.h1
-rw-r--r--Source/WebCore/storage/IDBCompleteEvent.cpp8
-rw-r--r--Source/WebCore/storage/IDBCompleteEvent.h4
-rw-r--r--Source/WebCore/storage/IDBCursor.cpp6
-rw-r--r--Source/WebCore/storage/IDBCursor.h8
-rw-r--r--Source/WebCore/storage/IDBCursor.idl5
-rw-r--r--Source/WebCore/storage/IDBCursorBackendImpl.cpp59
-rw-r--r--Source/WebCore/storage/IDBCursorBackendImpl.h6
-rw-r--r--Source/WebCore/storage/IDBDatabase.cpp82
-rw-r--r--Source/WebCore/storage/IDBDatabase.h47
-rw-r--r--Source/WebCore/storage/IDBDatabase.idl21
-rw-r--r--Source/WebCore/storage/IDBDatabaseBackendImpl.cpp6
-rw-r--r--Source/WebCore/storage/IDBDatabaseBackendImpl.h2
-rw-r--r--Source/WebCore/storage/IDBDatabaseBackendInterface.h2
-rw-r--r--Source/WebCore/storage/IDBErrorEvent.cpp2
-rw-r--r--Source/WebCore/storage/IDBEvent.cpp55
-rw-r--r--Source/WebCore/storage/IDBEvent.h5
-rw-r--r--Source/WebCore/storage/IDBFactoryBackendImpl.cpp64
-rw-r--r--Source/WebCore/storage/IDBFactoryBackendInterface.cpp4
-rw-r--r--Source/WebCore/storage/IDBFactoryBackendInterface.h2
-rw-r--r--Source/WebCore/storage/IDBIndex.cpp26
-rw-r--r--Source/WebCore/storage/IDBIndex.h18
-rw-r--r--Source/WebCore/storage/IDBIndex.idl4
-rw-r--r--Source/WebCore/storage/IDBIndexBackendImpl.cpp2
-rw-r--r--Source/WebCore/storage/IDBObjectStore.cpp34
-rw-r--r--Source/WebCore/storage/IDBObjectStore.h13
-rw-r--r--Source/WebCore/storage/IDBObjectStore.idl4
-rw-r--r--Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp128
-rw-r--r--Source/WebCore/storage/IDBObjectStoreBackendImpl.h8
-rw-r--r--Source/WebCore/storage/IDBObjectStoreBackendInterface.h11
-rw-r--r--Source/WebCore/storage/IDBRequest.cpp179
-rw-r--r--Source/WebCore/storage/IDBRequest.h38
-rw-r--r--Source/WebCore/storage/IDBSuccessEvent.cpp2
-rw-r--r--Source/WebCore/storage/IDBTransaction.cpp129
-rw-r--r--Source/WebCore/storage/IDBTransaction.h35
-rw-r--r--Source/WebCore/storage/IDBTransaction.idl2
-rw-r--r--Source/WebCore/storage/IDBTransactionBackendImpl.cpp11
-rw-r--r--Source/WebCore/storage/IDBTransactionBackendImpl.h5
-rw-r--r--Source/WebCore/storage/IDBTransactionCallbacks.h1
-rw-r--r--Source/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp5
-rw-r--r--Source/WebCore/svg/SVGAElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGAElement.h3
-rw-r--r--Source/WebCore/svg/SVGAltGlyphElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGAltGlyphElement.h3
-rw-r--r--Source/WebCore/svg/SVGAnimateElement.cpp82
-rw-r--r--Source/WebCore/svg/SVGAnimationElement.cpp28
-rw-r--r--Source/WebCore/svg/SVGCircleElement.cpp16
-rw-r--r--Source/WebCore/svg/SVGCircleElement.h3
-rw-r--r--Source/WebCore/svg/SVGClipPathElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGClipPathElement.h2
-rw-r--r--Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp18
-rw-r--r--Source/WebCore/svg/SVGComponentTransferFunctionElement.h2
-rw-r--r--Source/WebCore/svg/SVGCursorElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGCursorElement.h2
-rw-r--r--Source/WebCore/svg/SVGDocumentExtensions.cpp8
-rw-r--r--Source/WebCore/svg/SVGElement.cpp19
-rw-r--r--Source/WebCore/svg/SVGElement.h28
-rw-r--r--Source/WebCore/svg/SVGEllipseElement.cpp17
-rw-r--r--Source/WebCore/svg/SVGEllipseElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEBlendElement.cpp16
-rw-r--r--Source/WebCore/svg/SVGFEBlendElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEColorMatrixElement.cpp16
-rw-r--r--Source/WebCore/svg/SVGFEColorMatrixElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEComponentTransferElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGFEComponentTransferElement.h2
-rw-r--r--Source/WebCore/svg/SVGFECompositeElement.cpp20
-rw-r--r--Source/WebCore/svg/SVGFECompositeElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp23
-rw-r--r--Source/WebCore/svg/SVGFEConvolveMatrixElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp88
-rw-r--r--Source/WebCore/svg/SVGFEDiffuseLightingElement.h7
-rw-r--r--Source/WebCore/svg/SVGFEDisplacementMapElement.cpp18
-rw-r--r--Source/WebCore/svg/SVGFEDisplacementMapElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEFloodElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGFEFloodElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEGaussianBlurElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGFEGaussianBlurElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEImageElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGFEImageElement.h2
-rw-r--r--Source/WebCore/svg/SVGFELightElement.cpp41
-rw-r--r--Source/WebCore/svg/SVGFELightElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEMergeElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGFEMergeElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEMergeNodeElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGFEMergeNodeElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEMorphologyElement.cpp16
-rw-r--r--Source/WebCore/svg/SVGFEMorphologyElement.h2
-rw-r--r--Source/WebCore/svg/SVGFEOffsetElement.cpp16
-rw-r--r--Source/WebCore/svg/SVGFEOffsetElement.h2
-rw-r--r--Source/WebCore/svg/SVGFESpecularLightingElement.cpp30
-rw-r--r--Source/WebCore/svg/SVGFESpecularLightingElement.h3
-rw-r--r--Source/WebCore/svg/SVGFETileElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGFETileElement.h2
-rw-r--r--Source/WebCore/svg/SVGFETurbulenceElement.cpp18
-rw-r--r--Source/WebCore/svg/SVGFETurbulenceElement.h2
-rw-r--r--Source/WebCore/svg/SVGFilterElement.cpp21
-rw-r--r--Source/WebCore/svg/SVGFilterElement.h2
-rw-r--r--Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp18
-rw-r--r--Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h13
-rw-r--r--Source/WebCore/svg/SVGFont.cpp40
-rw-r--r--Source/WebCore/svg/SVGFontElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGFontElement.h4
-rw-r--r--Source/WebCore/svg/SVGFontFaceElement.cpp7
-rw-r--r--Source/WebCore/svg/SVGFontFaceElement.h4
-rw-r--r--Source/WebCore/svg/SVGForeignObjectElement.cpp18
-rw-r--r--Source/WebCore/svg/SVGForeignObjectElement.h2
-rw-r--r--Source/WebCore/svg/SVGGlyphElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGGlyphElement.h2
-rw-r--r--Source/WebCore/svg/SVGGradientElement.cpp10
-rw-r--r--Source/WebCore/svg/SVGGradientElement.h1
-rw-r--r--Source/WebCore/svg/SVGImageElement.cpp19
-rw-r--r--Source/WebCore/svg/SVGImageElement.h2
-rw-r--r--Source/WebCore/svg/SVGLength.cpp4
-rw-r--r--Source/WebCore/svg/SVGLineElement.cpp17
-rw-r--r--Source/WebCore/svg/SVGLineElement.h2
-rw-r--r--Source/WebCore/svg/SVGLinearGradientElement.cpp17
-rw-r--r--Source/WebCore/svg/SVGLinearGradientElement.h2
-rw-r--r--Source/WebCore/svg/SVGMPathElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGMPathElement.h2
-rw-r--r--Source/WebCore/svg/SVGMarkerElement.cpp20
-rw-r--r--Source/WebCore/svg/SVGMarkerElement.h2
-rw-r--r--Source/WebCore/svg/SVGMaskElement.cpp19
-rw-r--r--Source/WebCore/svg/SVGMaskElement.h2
-rw-r--r--Source/WebCore/svg/SVGMissingGlyphElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGMissingGlyphElement.h3
-rw-r--r--Source/WebCore/svg/SVGPathBlender.cpp146
-rw-r--r--Source/WebCore/svg/SVGPathBlender.h17
-rw-r--r--Source/WebCore/svg/SVGPathByteStream.h10
-rw-r--r--Source/WebCore/svg/SVGPathElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGPathElement.h2
-rw-r--r--Source/WebCore/svg/SVGPatternElement.cpp23
-rw-r--r--Source/WebCore/svg/SVGPatternElement.h2
-rw-r--r--Source/WebCore/svg/SVGPolyElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGPolyElement.h2
-rw-r--r--Source/WebCore/svg/SVGRadialGradientElement.cpp18
-rw-r--r--Source/WebCore/svg/SVGRadialGradientElement.h2
-rw-r--r--Source/WebCore/svg/SVGRectElement.cpp19
-rw-r--r--Source/WebCore/svg/SVGRectElement.h2
-rw-r--r--Source/WebCore/svg/SVGSVGElement.cpp17
-rw-r--r--Source/WebCore/svg/SVGSVGElement.h2
-rw-r--r--Source/WebCore/svg/SVGScriptElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGScriptElement.h2
-rw-r--r--Source/WebCore/svg/SVGStopElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGStopElement.h2
-rw-r--r--Source/WebCore/svg/SVGStyledElement.cpp78
-rw-r--r--Source/WebCore/svg/SVGStyledElement.h4
-rw-r--r--Source/WebCore/svg/SVGStyledTransformableElement.cpp7
-rw-r--r--Source/WebCore/svg/SVGStyledTransformableElement.h1
-rw-r--r--Source/WebCore/svg/SVGSwitchElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGSwitchElement.h3
-rw-r--r--Source/WebCore/svg/SVGSymbolElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGSymbolElement.h2
-rw-r--r--Source/WebCore/svg/SVGTRefElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGTRefElement.h2
-rw-r--r--Source/WebCore/svg/SVGTSpanElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGTSpanElement.h3
-rw-r--r--Source/WebCore/svg/SVGTextContentElement.cpp13
-rw-r--r--Source/WebCore/svg/SVGTextContentElement.h1
-rw-r--r--Source/WebCore/svg/SVGTextElement.cpp14
-rw-r--r--Source/WebCore/svg/SVGTextElement.h2
-rw-r--r--Source/WebCore/svg/SVGTextPathElement.cpp17
-rw-r--r--Source/WebCore/svg/SVGTextPathElement.h2
-rw-r--r--Source/WebCore/svg/SVGTextPositioningElement.cpp30
-rw-r--r--Source/WebCore/svg/SVGTextPositioningElement.h3
-rw-r--r--Source/WebCore/svg/SVGTitleElement.cpp11
-rw-r--r--Source/WebCore/svg/SVGTitleElement.h3
-rw-r--r--Source/WebCore/svg/SVGUseElement.cpp20
-rw-r--r--Source/WebCore/svg/SVGUseElement.h2
-rw-r--r--Source/WebCore/svg/SVGViewElement.cpp15
-rw-r--r--Source/WebCore/svg/SVGViewElement.h2
-rw-r--r--Source/WebCore/svg/graphics/SVGImage.cpp8
-rw-r--r--Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp20
-rw-r--r--Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h10
-rw-r--r--Source/WebCore/webaudio/AudioBuffer.cpp4
-rw-r--r--Source/WebCore/webaudio/AudioBuffer.idl2
-rw-r--r--Source/WebCore/webaudio/AudioContext.cpp3
-rw-r--r--Source/WebCore/webaudio/AudioContext.idl6
-rw-r--r--Source/WebCore/webaudio/RealtimeAnalyser.cpp6
-rw-r--r--Source/WebCore/webaudio/RealtimeAnalyser.h4
-rw-r--r--Source/WebCore/webaudio/RealtimeAnalyserNode.h2
-rw-r--r--Source/WebCore/webaudio/RealtimeAnalyserNode.idl6
-rw-r--r--Source/WebCore/websockets/WebSocketHandshake.cpp3
-rw-r--r--Source/WebCore/wml/WMLInputElement.h1
-rw-r--r--Source/WebCore/wml/WMLTableElement.cpp2
-rw-r--r--Source/WebCore/workers/WorkerContext.cpp4
-rw-r--r--Source/WebCore/workers/WorkerContext.idl16
-rw-r--r--Source/WebCore/workers/WorkerScriptLoader.cpp9
-rw-r--r--Source/WebCore/workers/WorkerScriptLoader.h4
-rw-r--r--Source/WebCore/xml/XMLHttpRequest.cpp16
-rw-r--r--Source/WebCore/xml/XMLHttpRequest.h6
-rw-r--r--Source/WebCore/xml/XSLStyleSheet.h3
-rw-r--r--Source/WebCore/xml/XSLStyleSheetLibxslt.cpp19
-rw-r--r--Source/WebCore/xml/XSLStyleSheetQt.cpp12
-rw-r--r--Source/WebKit.pri138
-rw-r--r--Source/WebKit.pro36
-rw-r--r--Source/WebKit/CMakeLists.txt2
-rw-r--r--Source/WebKit/ChangeLog26
-rw-r--r--Source/WebKit/WebKit.xcodeproj/project.pbxproj8
-rw-r--r--Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp5
-rw-r--r--Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h3
-rw-r--r--Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp8
-rw-r--r--Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h2
-rw-r--r--Source/WebKit/android/jni/MIMETypeRegistry.cpp1
-rw-r--r--Source/WebKit/android/jni/WebCoreFrameBridge.cpp13
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp29
-rw-r--r--Source/WebKit/android/nav/CacheBuilder.cpp17
-rw-r--r--Source/WebKit/android/nav/CachedFrame.cpp89
-rw-r--r--Source/WebKit/android/nav/CachedFrame.h4
-rw-r--r--Source/WebKit/android/nav/CachedHistory.cpp20
-rw-r--r--Source/WebKit/android/nav/CachedNode.cpp20
-rw-r--r--Source/WebKit/android/nav/CachedRoot.cpp38
-rw-r--r--Source/WebKit/android/nav/WebView.cpp34
-rw-r--r--Source/WebKit/cf/ChangeLog35
-rw-r--r--Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp46
-rw-r--r--Source/WebKit/chromium/ChangeLog1092
-rw-r--r--Source/WebKit/chromium/DEPS6
-rw-r--r--Source/WebKit/chromium/WebKit.gyp12
-rw-r--r--Source/WebKit/chromium/features.gypi4
-rwxr-xr-xSource/WebKit/chromium/gyp_webkit9
-rw-r--r--Source/WebKit/chromium/public/WebAutoFillClient.h5
-rw-r--r--Source/WebKit/chromium/public/WebFormControlElement.h2
-rw-r--r--Source/WebKit/chromium/public/WebFrameClient.h10
-rw-r--r--Source/WebKit/chromium/public/WebGraphicsContext3D.h344
-rw-r--r--Source/WebKit/chromium/public/WebIDBCallbacks.h2
-rw-r--r--Source/WebKit/chromium/public/WebIDBDatabase.h10
-rwxr-xr-xSource/WebKit/chromium/public/WebIDBObjectStore.h12
-rw-r--r--Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h2
-rw-r--r--Source/WebKit/chromium/public/WebIconLoadingCompletion.h53
-rw-r--r--Source/WebKit/chromium/public/WebInputElement.h10
-rw-r--r--Source/WebKit/chromium/public/WebKitClient.h1
-rw-r--r--Source/WebKit/chromium/public/WebMenuItemInfo.h3
-rw-r--r--Source/WebKit/chromium/public/WebNotification.h4
-rw-r--r--Source/WebKit/chromium/public/WebPoint.h2
-rw-r--r--Source/WebKit/chromium/public/WebPopupMenuInfo.h2
-rw-r--r--Source/WebKit/chromium/public/WebRect.h2
-rw-r--r--Source/WebKit/chromium/public/WebRuntimeFeatures.h5
-rw-r--r--Source/WebKit/chromium/public/WebSelectElement.h4
-rw-r--r--Source/WebKit/chromium/public/WebSettings.h4
-rw-r--r--Source/WebKit/chromium/public/WebSize.h2
-rw-r--r--Source/WebKit/chromium/public/WebSpeechInputController.h5
-rw-r--r--Source/WebKit/chromium/public/WebTextCheckingCompletion.h51
-rw-r--r--Source/WebKit/chromium/public/WebTextCheckingResult.h65
-rw-r--r--Source/WebKit/chromium/public/WebURLResponse.h5
-rw-r--r--Source/WebKit/chromium/public/WebViewClient.h16
-rw-r--r--Source/WebKit/chromium/src/AssertMatchingEnums.cpp5
-rw-r--r--Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp4
-rw-r--r--Source/WebKit/chromium/src/AsyncFileSystemChromium.h6
-rw-r--r--Source/WebKit/chromium/src/AudioDestinationChromium.cpp5
-rw-r--r--Source/WebKit/chromium/src/AutoFillPopupMenuClient.cpp5
-rw-r--r--Source/WebKit/chromium/src/ChromeClientImpl.cpp38
-rw-r--r--Source/WebKit/chromium/src/ChromeClientImpl.h6
-rw-r--r--Source/WebKit/chromium/src/ContextMenuClientImpl.cpp2
-rw-r--r--Source/WebKit/chromium/src/DragClientImpl.cpp6
-rw-r--r--Source/WebKit/chromium/src/DragClientImpl.h2
-rw-r--r--Source/WebKit/chromium/src/DragScrollTimer.cpp8
-rw-r--r--Source/WebKit/chromium/src/EditorClientImpl.cpp19
-rw-r--r--Source/WebKit/chromium/src/EditorClientImpl.h9
-rw-r--r--Source/WebKit/chromium/src/Extensions3DChromium.cpp14
-rw-r--r--Source/WebKit/chromium/src/ExternalPopupMenu.cpp12
-rw-r--r--Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp6
-rw-r--r--Source/WebKit/chromium/src/FrameLoaderClientImpl.h2
-rw-r--r--Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp65
-rw-r--r--Source/WebKit/chromium/src/GraphicsContext3DInternal.h10
-rw-r--r--Source/WebKit/chromium/src/IDBCallbacksProxy.cpp14
-rw-r--r--Source/WebKit/chromium/src/IDBCallbacksProxy.h1
-rw-r--r--Source/WebKit/chromium/src/IDBDatabaseProxy.cpp4
-rw-r--r--Source/WebKit/chromium/src/IDBDatabaseProxy.h2
-rwxr-xr-xSource/WebKit/chromium/src/IDBObjectStoreProxy.cpp12
-rwxr-xr-xSource/WebKit/chromium/src/IDBObjectStoreProxy.h4
-rw-r--r--Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.cpp8
-rw-r--r--Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.h1
-rw-r--r--Source/WebKit/chromium/src/InspectorClientImpl.cpp12
-rw-r--r--Source/WebKit/chromium/src/InspectorClientImpl.h3
-rw-r--r--Source/WebKit/chromium/src/LocalFileSystemChromium.cpp6
-rw-r--r--Source/WebKit/chromium/src/PlatformBridge.cpp46
-rw-r--r--Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp76
-rw-r--r--Source/WebKit/chromium/src/WebDevToolsAgentImpl.h2
-rw-r--r--Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp10
-rw-r--r--Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h7
-rw-r--r--Source/WebKit/chromium/src/WebFontImpl.cpp24
-rw-r--r--Source/WebKit/chromium/src/WebFormControlElement.cpp5
-rw-r--r--Source/WebKit/chromium/src/WebFrameImpl.cpp65
-rw-r--r--Source/WebKit/chromium/src/WebFrameImpl.h2
-rw-r--r--Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp5
-rw-r--r--Source/WebKit/chromium/src/WebIDBCallbacksImpl.h1
-rw-r--r--Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp4
-rw-r--r--Source/WebKit/chromium/src/WebIDBDatabaseImpl.h2
-rwxr-xr-xSource/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp9
-rwxr-xr-xSource/WebKit/chromium/src/WebIDBObjectStoreImpl.h3
-rw-r--r--Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.cpp5
-rw-r--r--Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.h1
-rw-r--r--Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.cpp62
-rw-r--r--Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.h (renamed from Source/WebCore/inspector/InspectorSettings.h)48
-rw-r--r--Source/WebKit/chromium/src/WebImageCG.cpp32
-rw-r--r--Source/WebKit/chromium/src/WebInputElement.cpp21
-rw-r--r--Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp18
-rw-r--r--Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h4
-rw-r--r--Source/WebKit/chromium/src/WebNotification.cpp6
-rw-r--r--Source/WebKit/chromium/src/WebPageSerializerImpl.cpp4
-rw-r--r--Source/WebKit/chromium/src/WebPluginContainerImpl.cpp147
-rw-r--r--Source/WebKit/chromium/src/WebPopupMenuImpl.cpp24
-rw-r--r--Source/WebKit/chromium/src/WebRuntimeFeatures.cpp20
-rw-r--r--Source/WebKit/chromium/src/WebScrollbarImpl.cpp41
-rw-r--r--Source/WebKit/chromium/src/WebScrollbarImpl.h2
-rw-r--r--Source/WebKit/chromium/src/WebSearchableFormData.cpp3
-rw-r--r--Source/WebKit/chromium/src/WebSelectElement.cpp8
-rw-r--r--Source/WebKit/chromium/src/WebSettingsImpl.cpp10
-rw-r--r--Source/WebKit/chromium/src/WebSettingsImpl.h2
-rw-r--r--Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.cpp56
-rw-r--r--Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.h58
-rw-r--r--Source/WebKit/chromium/src/WebTextRun.cpp2
-rw-r--r--Source/WebKit/chromium/src/WebURLResponse.cpp10
-rw-r--r--Source/WebKit/chromium/src/WebViewImpl.cpp29
-rw-r--r--Source/WebKit/chromium/src/WebViewImpl.h1
-rw-r--r--Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp4
-rw-r--r--Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.h6
-rw-r--r--Source/WebKit/chromium/src/js/DevTools.js13
-rw-r--r--Source/WebKit/chromium/src/js/Tests.js2
-rw-r--r--Source/WebKit/chromium/src/painting/GraphicsContextBuilder.h84
-rw-r--r--Source/WebKit/chromium/tests/PopupMenuTest.cpp2
-rw-r--r--Source/WebKit/chromium/tests/TransparencyWinTest.cpp4
-rw-r--r--Source/WebKit/efl/ChangeLog102
-rw-r--r--Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp5
-rw-r--r--Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h3
-rw-r--r--Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp5
-rw-r--r--Source/WebKit/efl/WebCoreSupport/DragClientEfl.h1
-rw-r--r--Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp2
-rw-r--r--Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h2
-rw-r--r--Source/WebKit/efl/ewk/ewk_cookies.cpp6
-rw-r--r--Source/WebKit/efl/ewk/ewk_frame.cpp4
-rw-r--r--Source/WebKit/efl/ewk/ewk_settings.cpp24
-rw-r--r--Source/WebKit/efl/ewk/ewk_settings.h1
-rw-r--r--Source/WebKit/gtk/ChangeLog395
-rw-r--r--Source/WebKit/gtk/GNUmakefile.am6
-rw-r--r--Source/WebKit/gtk/NEWS13
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/AssertMatchingEnums.cpp36
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp5
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h3
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp6
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h1
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp110
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h21
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp17
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h4
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp172
-rw-r--r--Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.h3
-rw-r--r--Source/WebKit/gtk/po/ChangeLog79
-rw-r--r--Source/WebKit/gtk/po/POTFILES24
-rw-r--r--Source/WebKit/gtk/po/ar.po1080
-rw-r--r--Source/WebKit/gtk/po/bg.po1162
-rw-r--r--Source/WebKit/gtk/po/fr.po1229
-rw-r--r--Source/WebKit/gtk/po/gr.po695
-rw-r--r--Source/WebKit/gtk/po/hu.po1073
-rw-r--r--Source/WebKit/gtk/po/id.po1385
-rw-r--r--Source/WebKit/gtk/po/pl.po1433
-rw-r--r--Source/WebKit/gtk/po/zh_CN.po237
-rw-r--r--Source/WebKit/gtk/tests/testatk.c208
-rw-r--r--Source/WebKit/gtk/webkit/webkitglobals.cpp40
-rw-r--r--Source/WebKit/gtk/webkit/webkitglobals.h11
-rw-r--r--Source/WebKit/gtk/webkit/webkitglobalsprivate.h1
-rw-r--r--Source/WebKit/gtk/webkit/webkitwebframe.cpp21
-rw-r--r--Source/WebKit/gtk/webkit/webkitwebinspector.cpp3
-rw-r--r--Source/WebKit/gtk/webkit/webkitwebview.cpp8
-rw-r--r--Source/WebKit/haiku/ChangeLog53
-rw-r--r--Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp7
-rw-r--r--Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h3
-rw-r--r--Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.cpp6
-rw-r--r--Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.h1
-rw-r--r--Source/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp6
-rw-r--r--Source/WebKit/mac/ChangeLog464
-rw-r--r--Source/WebKit/mac/Configurations/FeatureDefines.xcconfig14
-rw-r--r--Source/WebKit/mac/Configurations/Version.xcconfig2
-rw-r--r--Source/WebKit/mac/ForwardingHeaders/pcre/pcre.h1
-rw-r--r--Source/WebKit/mac/Misc/WebCoreStatistics.mm11
-rw-r--r--Source/WebKit/mac/Misc/WebIconDatabase.mm18
-rw-r--r--Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm1
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebChromeClient.h3
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm20
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebDragClient.h1
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebDragClient.mm93
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h2
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm2
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h11
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm16
-rw-r--r--Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm42
-rw-r--r--Source/WebKit/mac/WebInspector/WebInspector.mm5
-rw-r--r--Source/WebKit/mac/WebView/WebDynamicScrollBarsView.mm7
-rw-r--r--Source/WebKit/mac/WebView/WebFrame.mm20
-rw-r--r--Source/WebKit/mac/WebView/WebFrameInternal.h2
-rw-r--r--Source/WebKit/mac/WebView/WebFullScreenController.mm9
-rw-r--r--Source/WebKit/mac/WebView/WebHTMLView.mm138
-rw-r--r--Source/WebKit/mac/WebView/WebScriptDebugDelegate.mm4
-rw-r--r--Source/WebKit/mac/WebView/WebView.mm2
-rw-r--r--Source/WebKit/qt/Api/qwebframe.cpp19
-rw-r--r--Source/WebKit/qt/Api/qwebpage.cpp23
-rw-r--r--Source/WebKit/qt/Api/qwebpage.h1
-rw-r--r--Source/WebKit/qt/Api/qwebsettings.cpp2
-rw-r--r--Source/WebKit/qt/ChangeLog474
-rw-r--r--Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp6
-rw-r--r--Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h3
-rw-r--r--Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp2
-rw-r--r--Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp5
-rw-r--r--Source/WebKit/qt/WebCoreSupport/DragClientQt.h1
-rw-r--r--Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp57
-rw-r--r--Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h4
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp82
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h3
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp46
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h23
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp122
-rw-r--r--Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h66
-rw-r--r--Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp152
-rw-r--r--Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h3
-rw-r--r--Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp4
-rw-r--r--Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp2
-rw-r--r--Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp5
-rw-r--r--Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h1
-rw-r--r--Source/WebKit/qt/declarative/declarative.pro2
-rw-r--r--Source/WebKit/qt/declarative/qdeclarativewebview.cpp26
-rw-r--r--Source/WebKit/qt/declarative/qdeclarativewebview_p.h2
-rw-r--r--Source/WebKit/qt/docs/docs.pri2
-rw-r--r--Source/WebKit/qt/docs/qtwebkit.qdoc19
-rw-r--r--Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp58
-rw-r--r--Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp62
-rw-r--r--Source/WebKit/qt/tests/tests.pri2
-rw-r--r--Source/WebKit/win/ChangeLog265
-rw-r--r--Source/WebKit/win/DOMHTMLClasses.cpp4
-rw-r--r--Source/WebKit/win/FullscreenVideoController.cpp5
-rw-r--r--Source/WebKit/win/WebCoreStatistics.cpp4
-rw-r--r--Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp4
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp5
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebChromeClient.h3
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebDragClient.cpp151
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebDragClient.h1
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp2
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h2
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebInspectorClient.cpp14
-rw-r--r--Source/WebKit/win/WebCoreSupport/WebInspectorClient.h13
-rw-r--r--Source/WebKit/win/WebDownload.cpp164
-rw-r--r--Source/WebKit/win/WebDownload.h5
-rw-r--r--Source/WebKit/win/WebDownloadCFNet.cpp17
-rw-r--r--Source/WebKit/win/WebFrame.cpp21
-rw-r--r--Source/WebKit/win/WebFrame.h2
-rw-r--r--Source/WebKit/win/WebHistory.cpp2
-rw-r--r--Source/WebKit/win/WebInspector.cpp9
-rwxr-xr-xSource/WebKit/win/WebKit.vcproj/WebKit.make14
-rw-r--r--Source/WebKit/win/WebKit.vcproj/WebKit.submit.sln4
-rw-r--r--Source/WebKit/win/WebKitGraphics.cpp11
-rw-r--r--Source/WebKit/win/WebPreferences.cpp4
-rw-r--r--Source/WebKit/win/WebScrollBar.cpp14
-rw-r--r--Source/WebKit/win/WebScrollBar.h3
-rw-r--r--Source/WebKit/win/WebView.cpp19
-rw-r--r--Source/WebKit/win/WebView.h8
-rw-r--r--Source/WebKit/wince/ChangeLog83
-rw-r--r--Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp10
-rw-r--r--Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h3
-rw-r--r--Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp6
-rw-r--r--Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h1
-rw-r--r--Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp5
-rw-r--r--Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h2
-rw-r--r--Source/WebKit/wince/WebView.cpp12
-rw-r--r--Source/WebKit/wx/ChangeLog81
-rw-r--r--Source/WebKit/wx/WebKitSupport/ChromeClientWx.cpp5
-rw-r--r--Source/WebKit/wx/WebKitSupport/ChromeClientWx.h3
-rw-r--r--Source/WebKit/wx/WebKitSupport/DragClientWx.cpp6
-rw-r--r--Source/WebKit/wx/WebKitSupport/DragClientWx.h1
-rw-r--r--Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp11
-rw-r--r--Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h2
-rw-r--r--Source/WebKit/wx/bindings/python/wscript2
-rw-r--r--Source/WebKit2/ChangeLog5472
-rw-r--r--Source/WebKit2/Configurations/FeatureDefines.xcconfig14
-rw-r--r--Source/WebKit2/Configurations/Version.xcconfig2
-rw-r--r--Source/WebKit2/DerivedSources.pro8
-rw-r--r--Source/WebKit2/GNUmakefile.am61
-rw-r--r--Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp17
-rw-r--r--Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp6
-rw-r--r--Source/WebKit2/Platform/CoreIPC/Attachment.cpp1
-rw-r--r--Source/WebKit2/Platform/CoreIPC/Attachment.h14
-rw-r--r--Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp4
-rw-r--r--Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h4
-rw-r--r--Source/WebKit2/Platform/CoreIPC/Connection.cpp325
-rw-r--r--Source/WebKit2/Platform/CoreIPC/Connection.h74
-rw-r--r--Source/WebKit2/Platform/CoreIPC/DataReference.cpp1
-rw-r--r--Source/WebKit2/Platform/CoreIPC/HandleMessage.h37
-rw-r--r--Source/WebKit2/Platform/CoreIPC/MessageID.h10
-rw-r--r--Source/WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp4
-rw-r--r--Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp5
-rw-r--r--Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp53
-rw-r--r--Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp341
-rw-r--r--Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp74
-rw-r--r--Source/WebKit2/Platform/CoreIPC/win/ConnectionWin.cpp13
-rw-r--r--Source/WebKit2/Platform/Logging.cpp1
-rw-r--r--Source/WebKit2/Platform/Module.cpp1
-rw-r--r--Source/WebKit2/Platform/Module.h6
-rw-r--r--Source/WebKit2/Platform/Region.cpp7
-rw-r--r--Source/WebKit2/Platform/RunLoop.cpp1
-rw-r--r--Source/WebKit2/Platform/SharedMemory.h13
-rw-r--r--Source/WebKit2/Platform/WorkQueue.cpp1
-rw-r--r--Source/WebKit2/Platform/WorkQueue.h14
-rw-r--r--Source/WebKit2/Platform/cg/CGUtilities.cpp1
-rw-r--r--Source/WebKit2/Platform/gtk/ModuleGtk.cpp (renamed from Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm)30
-rw-r--r--Source/WebKit2/Platform/gtk/RunLoopGtk.cpp1
-rw-r--r--Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp1
-rw-r--r--Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp2
-rw-r--r--Source/WebKit2/Platform/mac/MachUtilities.cpp1
-rw-r--r--Source/WebKit2/Platform/mac/ModuleMac.mm3
-rw-r--r--Source/WebKit2/Platform/mac/RunLoopMac.mm5
-rw-r--r--Source/WebKit2/Platform/mac/SharedMemoryMac.cpp5
-rw-r--r--Source/WebKit2/Platform/mac/WorkQueueMac.cpp1
-rw-r--r--Source/WebKit2/Platform/qt/MappedMemoryPool.cpp114
-rw-r--r--Source/WebKit2/Platform/qt/MappedMemoryPool.h109
-rw-r--r--Source/WebKit2/Platform/qt/ModuleQt.cpp1
-rw-r--r--Source/WebKit2/Platform/qt/RunLoopQt.cpp1
-rw-r--r--Source/WebKit2/Platform/qt/SharedMemoryQt.cpp176
-rw-r--r--Source/WebKit2/Platform/qt/WorkQueueQt.cpp39
-rw-r--r--Source/WebKit2/Platform/win/ModuleWin.cpp1
-rw-r--r--Source/WebKit2/Platform/win/RunLoopWin.cpp7
-rw-r--r--Source/WebKit2/Platform/win/SharedMemoryWin.cpp40
-rw-r--r--Source/WebKit2/Platform/win/WorkQueueWin.cpp61
-rw-r--r--Source/WebKit2/PluginProcess/PluginControllerProxy.cpp10
-rw-r--r--Source/WebKit2/PluginProcess/PluginControllerProxy.h1
-rw-r--r--Source/WebKit2/PluginProcess/PluginProcess.cpp19
-rw-r--r--Source/WebKit2/PluginProcess/PluginProcess.h5
-rw-r--r--Source/WebKit2/PluginProcess/PluginProcess.messages.in4
-rw-r--r--Source/WebKit2/PluginProcess/WebProcessConnection.cpp5
-rw-r--r--Source/WebKit2/PluginProcess/mac/PluginControllerProxyMac.mm11
-rw-r--r--Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm15
-rw-r--r--Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm23
-rwxr-xr-xSource/WebKit2/Scripts/generate-forwarding-headers.pl2
-rw-r--r--Source/WebKit2/Scripts/webkit2/messages.py14
-rw-r--r--Source/WebKit2/Scripts/webkit2/messages_unittest.py4
-rw-r--r--Source/WebKit2/Shared/API/c/WKArray.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKBase.h12
-rw-r--r--Source/WebKit2/Shared/API/c/WKCertificateInfo.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKContextMenuItem.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKData.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKDictionary.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKError.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKGraphicsContext.cpp (renamed from Source/WebKit2/WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp)17
-rw-r--r--Source/WebKit2/Shared/API/c/WKGraphicsContext.h41
-rw-r--r--Source/WebKit2/Shared/API/c/WKImage.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKMutableArray.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKMutableDictionary.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKNumber.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKSerializedScriptValue.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKSharedAPICast.h14
-rw-r--r--Source/WebKit2/Shared/API/c/WKString.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKType.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKURL.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKURLRequest.cpp6
-rw-r--r--Source/WebKit2/Shared/API/c/WKURLRequest.h2
-rw-r--r--Source/WebKit2/Shared/API/c/WKURLResponse.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/WKUserContentURLPattern.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/cf/WKStringCF.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/cf/WKURLCF.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/cf/WKURLRequestCF.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/cf/WKURLResponseCF.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.cpp38
-rw-r--r--Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.h42
-rw-r--r--Source/WebKit2/Shared/API/c/cg/WKImageCG.cpp1
-rw-r--r--Source/WebKit2/Shared/API/c/gtk/WKBaseGtk.h (renamed from Source/JavaScriptCore/wtf/OwnArrayPtrCommon.h)21
-rw-r--r--Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.cpp38
-rw-r--r--Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.h43
-rw-r--r--Source/WebKit2/Shared/API/c/mac/WKCertificateInfoMac.mm7
-rw-r--r--Source/WebKit2/Shared/API/c/mac/WKURLRequestNS.mm7
-rw-r--r--Source/WebKit2/Shared/API/c/mac/WKURLResponseNS.mm7
-rw-r--r--Source/WebKit2/Shared/API/c/win/WKCertificateInfoWin.cpp1
-rw-r--r--Source/WebKit2/Shared/APIObject.h3
-rw-r--r--Source/WebKit2/Shared/ChildProcess.cpp5
-rw-r--r--Source/WebKit2/Shared/ChildProcess.h3
-rw-r--r--Source/WebKit2/Shared/ImmutableArray.cpp1
-rw-r--r--Source/WebKit2/Shared/ImmutableDictionary.cpp1
-rw-r--r--Source/WebKit2/Shared/LayerTreeContext.h64
-rw-r--r--Source/WebKit2/Shared/MutableArray.cpp1
-rw-r--r--Source/WebKit2/Shared/MutableDictionary.cpp1
-rw-r--r--Source/WebKit2/Shared/NativeWebKeyboardEvent.h6
-rw-r--r--Source/WebKit2/Shared/OriginAndDatabases.cpp1
-rw-r--r--Source/WebKit2/Shared/PlatformPopupMenuData.cpp1
-rw-r--r--Source/WebKit2/Shared/Plugins/NPIdentifierData.cpp5
-rw-r--r--Source/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp5
-rw-r--r--Source/WebKit2/Shared/Plugins/NPObjectProxy.cpp5
-rw-r--r--Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp5
-rw-r--r--Source/WebKit2/Shared/Plugins/NPVariantData.cpp5
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp1
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm7
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp3
-rw-r--r--Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp1
-rw-r--r--Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp5
-rw-r--r--Source/WebKit2/Shared/PrintInfo.cpp1
-rw-r--r--Source/WebKit2/Shared/PrintInfo.h5
-rw-r--r--Source/WebKit2/Shared/SessionState.cpp1
-rw-r--r--Source/WebKit2/Shared/ShareableBitmap.cpp1
-rw-r--r--Source/WebKit2/Shared/UpdateInfo.cpp4
-rw-r--r--Source/WebKit2/Shared/UpdateInfo.h5
-rw-r--r--Source/WebKit2/Shared/VisitedLinkTable.cpp1
-rw-r--r--Source/WebKit2/Shared/WebBackForwardListItem.cpp1
-rw-r--r--Source/WebKit2/Shared/WebContextMenuItem.cpp1
-rw-r--r--Source/WebKit2/Shared/WebContextMenuItemData.cpp1
-rw-r--r--Source/WebKit2/Shared/WebError.cpp2
-rw-r--r--Source/WebKit2/Shared/WebEvent.cpp1
-rw-r--r--Source/WebKit2/Shared/WebEvent.h43
-rw-r--r--Source/WebKit2/Shared/WebEventConversion.cpp32
-rw-r--r--Source/WebKit2/Shared/WebEventConversion.h17
-rw-r--r--Source/WebKit2/Shared/WebGeolocationPosition.cpp1
-rw-r--r--Source/WebKit2/Shared/WebGestureEvent.cpp72
-rw-r--r--Source/WebKit2/Shared/WebGraphicsContext.cpp (renamed from Source/WebKit2/WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp)15
-rw-r--r--Source/WebKit2/Shared/WebGraphicsContext.h71
-rw-r--r--Source/WebKit2/Shared/WebImage.cpp1
-rw-r--r--Source/WebKit2/Shared/WebKeyboardEvent.cpp1
-rw-r--r--Source/WebKit2/Shared/WebMemorySampler.cpp5
-rw-r--r--Source/WebKit2/Shared/WebMouseEvent.cpp1
-rw-r--r--Source/WebKit2/Shared/WebOpenPanelParameters.cpp1
-rw-r--r--Source/WebKit2/Shared/WebPageCreationParameters.cpp1
-rw-r--r--Source/WebKit2/Shared/WebPageGroupData.cpp1
-rw-r--r--Source/WebKit2/Shared/WebPlatformTouchPoint.cpp5
-rw-r--r--Source/WebKit2/Shared/WebPopupItem.cpp22
-rw-r--r--Source/WebKit2/Shared/WebPopupItem.h5
-rw-r--r--Source/WebKit2/Shared/WebPreferencesStore.cpp1
-rw-r--r--Source/WebKit2/Shared/WebPreferencesStore.h15
-rw-r--r--Source/WebKit2/Shared/WebProcessCreationParameters.cpp4
-rw-r--r--Source/WebKit2/Shared/WebProcessCreationParameters.h1
-rw-r--r--Source/WebKit2/Shared/WebSecurityOrigin.h2
-rw-r--r--Source/WebKit2/Shared/WebTouchEvent.cpp5
-rw-r--r--Source/WebKit2/Shared/WebURLRequest.cpp1
-rw-r--r--Source/WebKit2/Shared/WebURLRequest.h2
-rw-r--r--Source/WebKit2/Shared/WebURLResponse.cpp1
-rw-r--r--Source/WebKit2/Shared/WebWheelEvent.cpp11
-rw-r--r--Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp1
-rw-r--r--Source/WebKit2/Shared/cf/ArgumentCodersCF.cpp1
-rw-r--r--Source/WebKit2/Shared/cg/ShareableBitmapCG.cpp1
-rw-r--r--Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp1
-rw-r--r--Source/WebKit2/Shared/gtk/UpdateChunk.cpp116
-rw-r--r--Source/WebKit2/Shared/gtk/UpdateChunk.h67
-rw-r--r--Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp1
-rw-r--r--Source/WebKit2/Shared/mac/CommandLineMac.cpp1
-rw-r--r--Source/WebKit2/Shared/mac/CoreAnimationRenderer.h69
-rw-r--r--Source/WebKit2/Shared/mac/CoreAnimationRenderer.mm100
-rw-r--r--Source/WebKit2/Shared/mac/LayerTreeContextMac.mm66
-rw-r--r--Source/WebKit2/Shared/mac/NativeWebKeyboardEventMac.mm1
-rw-r--r--Source/WebKit2/Shared/mac/PasteboardTypes.mm2
-rw-r--r--Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm11
-rw-r--r--Source/WebKit2/Shared/mac/PrintInfoMac.mm1
-rw-r--r--Source/WebKit2/Shared/mac/SandboxExtensionMac.mm17
-rw-r--r--Source/WebKit2/Shared/mac/ShareableSurface.cpp215
-rw-r--r--Source/WebKit2/Shared/mac/ShareableSurface.h98
-rw-r--r--Source/WebKit2/Shared/mac/UpdateChunk.cpp1
-rw-r--r--Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm7
-rw-r--r--Source/WebKit2/Shared/mac/WebEventFactory.h4
-rw-r--r--Source/WebKit2/Shared/mac/WebEventFactory.mm34
-rw-r--r--Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm26
-rw-r--r--Source/WebKit2/Shared/mac/WebURLRequestMac.mm3
-rw-r--r--Source/WebKit2/Shared/mac/WebURLResponseMac.mm3
-rw-r--r--Source/WebKit2/Shared/qt/CleanupHandler.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/NativeWebKeyboardEventQt.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/ShareableBitmapQt.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/UpdateChunk.cpp45
-rw-r--r--Source/WebKit2/Shared/qt/UpdateChunk.h5
-rw-r--r--Source/WebKit2/Shared/qt/WebCoreArgumentCodersQt.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/WebURLRequestQt.cpp1
-rw-r--r--Source/WebKit2/Shared/qt/WebURLResponseQt.cpp1
-rw-r--r--Source/WebKit2/Shared/win/CommandLineWin.cpp1
-rw-r--r--Source/WebKit2/Shared/win/LayerTreeContextWin.cpp66
-rw-r--r--Source/WebKit2/Shared/win/NativeWebKeyboardEventWin.cpp1
-rw-r--r--Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp1
-rw-r--r--Source/WebKit2/Shared/win/UpdateChunk.cpp1
-rw-r--r--Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp1
-rw-r--r--Source/WebKit2/Shared/win/WebEventFactory.cpp1
-rw-r--r--Source/WebKit2/Shared/win/WebURLRequestWin.cpp1
-rw-r--r--Source/WebKit2/Shared/win/WebURLResponseWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKAPICast.h4
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKAuthenticationDecisionListener.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKBackForwardList.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKContext.cpp6
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKContextPrivate.h4
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKCredential.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKDownload.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKFormSubmissionListener.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKFrame.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKGeolocationManager.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKInspector.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKNavigationData.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKOpenPanelResultListener.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPage.cpp23
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPage.h25
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPageGroup.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPreferences.cpp21
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPreferences.h4
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h4
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WebKit2.h5
-rw-r--r--Source/WebKit2/UIProcess/API/C/gtk/WKAPICastGtk.h (renamed from Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp)17
-rw-r--r--Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp59
-rw-r--r--Source/WebKit2/UIProcess/API/C/gtk/WKView.h49
-rw-r--r--Source/WebKit2/UIProcess/API/C/win/WKContextWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/C/win/WKView.cpp11
-rw-r--r--Source/WebKit2/UIProcess/API/C/win/WKView.h4
-rw-r--r--Source/WebKit2/UIProcess/API/C/win/WKViewPrivate.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/cpp/qt/WKStringQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/cpp/qt/WKURLQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm7
-rw-r--r--Source/WebKit2/UIProcess/API/mac/PDFViewController.mm1
-rw-r--r--Source/WebKit2/UIProcess/API/mac/PageClientImpl.h11
-rw-r--r--Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm50
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKPrintingView.h61
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm585
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm5
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKView.h3
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKView.mm693
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKViewInternal.h9
-rw-r--r--Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h36
-rw-r--r--Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp1
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwkpage.cpp33
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwkpage.h3
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwkpage_p.h13
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Authentication/WebCredential.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Authentication/WebProtectionSpace.cpp1
-rw-r--r--Source/WebKit2/UIProcess/BackingStore.cpp13
-rw-r--r--Source/WebKit2/UIProcess/BackingStore.h7
-rw-r--r--Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp19
-rw-r--r--Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h21
-rw-r--r--Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/DrawingAreaProxy.cpp7
-rw-r--r--Source/WebKit2/UIProcess/DrawingAreaProxy.h23
-rw-r--r--Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in9
-rw-r--r--Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp107
-rw-r--r--Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h21
-rw-r--r--Source/WebKit2/UIProcess/FindIndicator.cpp25
-rw-r--r--Source/WebKit2/UIProcess/FindIndicator.h9
-rw-r--r--Source/WebKit2/UIProcess/GenericCallback.h109
-rw-r--r--Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/ProcessLauncher.h6
-rw-r--r--Source/WebKit2/UIProcess/Launcher/ThreadLauncher.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm43
-rw-r--r--Source/WebKit2/UIProcess/Launcher/mac/ThreadLauncherMac.mm13
-rw-r--r--Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp171
-rw-r--r--Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp6
-rw-r--r--Source/WebKit2/UIProcess/Launcher/win/ProcessLauncherWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.cpp21
-rw-r--r--Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.h10
-rw-r--r--Source/WebKit2/UIProcess/PageClient.h11
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp5
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp15
-rw-r--r--Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp2
-rw-r--r--Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm15
-rw-r--r--Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm9
-rw-r--r--Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/ResponsivenessTimer.cpp1
-rw-r--r--Source/WebKit2/UIProcess/TextChecker.h2
-rw-r--r--Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp41
-rw-r--r--Source/WebKit2/UIProcess/VisitedLinkProvider.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebBackForwardList.cpp45
-rw-r--r--Source/WebKit2/UIProcess/WebBackForwardList.h2
-rw-r--r--Source/WebKit2/UIProcess/WebContext.cpp20
-rw-r--r--Source/WebKit2/UIProcess/WebContext.h7
-rw-r--r--Source/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebContextMenuProxy.cpp2
-rw-r--r--Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebDatabaseManagerProxyClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebDownloadClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebEditCommandProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFindClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFormClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebFrameProxy.cpp5
-rw-r--r--Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebGeolocationProvider.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebHistoryClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebInspectorProxy.cpp7
-rw-r--r--Source/WebKit2/UIProcess/WebInspectorProxy.h15
-rw-r--r--Source/WebKit2/UIProcess/WebLoaderClient.cpp11
-rw-r--r--Source/WebKit2/UIProcess/WebLoaderClient.h5
-rw-r--r--Source/WebKit2/UIProcess/WebNavigationData.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebPageContextMenuClient.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebPageGroup.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.cpp421
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.h87
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.messages.in25
-rw-r--r--Source/WebKit2/UIProcess/WebPolicyClient.cpp21
-rw-r--r--Source/WebKit2/UIProcess/WebPolicyClient.h11
-rw-r--r--Source/WebKit2/UIProcess/WebPopupMenuProxy.h7
-rw-r--r--Source/WebKit2/UIProcess/WebPreferences.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebProcessManager.cpp1
-rw-r--r--Source/WebKit2/UIProcess/WebProcessProxy.cpp21
-rw-r--r--Source/WebKit2/UIProcess/WebProcessProxy.h20
-rw-r--r--Source/WebKit2/UIProcess/WebResourceLoadClient.cpp5
-rw-r--r--Source/WebKit2/UIProcess/WebResourceLoadClient.h2
-rw-r--r--Source/WebKit2/UIProcess/WebUIClient.cpp9
-rw-r--r--Source/WebKit2/UIProcess/WebUIClient.h2
-rw-r--r--Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp16
-rw-r--r--Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp7
-rw-r--r--Source/WebKit2/UIProcess/cf/WebPreferencesCF.cpp1
-rw-r--r--Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp94
-rw-r--r--Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp1
-rw-r--r--Source/WebKit2/UIProcess/mac/BackingStoreMac.mm15
-rw-r--r--Source/WebKit2/UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm17
-rw-r--r--Source/WebKit2/UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm34
-rw-r--r--Source/WebKit2/UIProcess/mac/TextCheckerMac.mm23
-rw-r--r--Source/WebKit2/UIProcess/mac/WebContextMac.mm16
-rw-r--r--Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h9
-rw-r--r--Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm13
-rw-r--r--Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm1
-rw-r--r--Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm9
-rw-r--r--Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.h13
-rw-r--r--Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm47
-rw-r--r--Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm7
-rw-r--r--Source/WebKit2/UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp3
-rw-r--r--Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp13
-rw-r--r--Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/qt/WebContextQt.cpp9
-rw-r--r--Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp3
-rw-r--r--Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.h2
-rw-r--r--Source/WebKit2/UIProcess/qt/WebPreferencesQt.cpp1
-rw-r--r--Source/WebKit2/UIProcess/win/BackingStoreWin.cpp109
-rw-r--r--Source/WebKit2/UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp5
-rw-r--r--Source/WebKit2/UIProcess/win/TextCheckerWin.cpp2
-rw-r--r--Source/WebKit2/UIProcess/win/WebContextMenuProxyWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/win/WebContextWin.cpp6
-rw-r--r--Source/WebKit2/UIProcess/win/WebInspectorProxyWin.cpp10
-rw-r--r--Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp1
-rw-r--r--Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp16
-rw-r--r--Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h2
-rw-r--r--Source/WebKit2/UIProcess/win/WebView.cpp597
-rw-r--r--Source/WebKit2/UIProcess/win/WebView.h52
-rw-r--r--Source/WebKit2/WebKit2.pro29
-rw-r--r--Source/WebKit2/WebKit2.xcodeproj/project.pbxproj148
-rw-r--r--Source/WebKit2/WebKit2Prefix.h97
-rw-r--r--Source/WebKit2/WebProcess.pro2
-rw-r--r--Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Downloads/Download.cpp19
-rw-r--r--Source/WebKit2/WebProcess/Downloads/Download.h23
-rw-r--r--Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp60
-rw-r--r--Source/WebKit2/WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp56
-rw-r--r--Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp13
-rw-r--r--Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm29
-rw-r--r--Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp13
-rw-r--r--Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Info.plist2
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h4
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp83
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h7
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp66
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.h56
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp67
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h49
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp30
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h48
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp6
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp5
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp105
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h75
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp9
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h4
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp72
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h53
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp88
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h59
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp21
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h5
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp6
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h2
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/win/InjectedBundleWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp14
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp5
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h2
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm22
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm7
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp3
-rw-r--r--Source/WebKit2/WebProcess/Plugins/Plugin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginController.h3
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp5
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp7
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp5
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginProxy.h6
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginView.cpp17
-rw-r--r--Source/WebKit2/WebProcess/Plugins/PluginView.h1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp54
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h23
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp7
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h3
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp9
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp157
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h5
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp3
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp8
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h3
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp6
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm13
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm115
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm35
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm15
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm5
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm43
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragClientWin.cpp89
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.cpp87
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.h46
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebErrorsWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp7
-rw-r--r--Source/WebKit2/WebProcess/WebKitMain.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp15
-rw-r--r--Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp5
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DrawingArea.h15
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in2
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp192
-rw-r--r--Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h24
-rw-r--r--Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/FindController.cpp20
-rw-r--r--Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp7
-rw-r--r--Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h7
-rw-r--r--Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp59
-rw-r--r--Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h69
-rw-r--r--Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp18
-rw-r--r--Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp17
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebEditCommand.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebFrame.cpp94
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebFrame.h6
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebInspector.cpp14
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebInspector.h29
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.cpp321
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.h68
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.messages.in36
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp56
-rw-r--r--Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm3
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm23
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h96
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm279
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm75
-rw-r--r--Source/WebKit2/WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp5
-rw-r--r--Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp7
-rw-r--r--Source/WebKit2/WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp5
-rw-r--r--Source/WebKit2/WebProcess/WebPage/win/WebInspectorWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp22
-rw-r--r--Source/WebKit2/WebProcess/WebProcess.cpp20
-rw-r--r--Source/WebKit2/WebProcess/WebProcess.h3
-rw-r--r--Source/WebKit2/WebProcess/com.apple.WebProcess.sb92
-rw-r--r--Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp1
-rw-r--r--Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp13
-rw-r--r--Source/WebKit2/WebProcess/mac/WebProcessMac.mm98
-rw-r--r--Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm9
-rw-r--r--Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp14
-rw-r--r--Source/WebKit2/WebProcess/qt/WebProcessQt.cpp1
-rw-r--r--Source/WebKit2/WebProcess/win/WebProcessMainWin.cpp1
-rw-r--r--Source/WebKit2/WebProcess/win/WebProcessWin.cpp1
-rw-r--r--Source/WebKit2/config.h142
-rw-r--r--Source/WebKit2/mac/MainMac.cpp3
-rw-r--r--Source/WebKit2/win/MainWin.cpp28
-rw-r--r--Source/WebKit2/win/WebKit2.def8
-rwxr-xr-xSource/WebKit2/win/WebKit2.make17
-rwxr-xr-xSource/WebKit2/win/WebKit2.vcproj212
-rwxr-xr-xSource/WebKit2/win/WebKit2Common.vsprops4
-rw-r--r--Source/WebKit2/win/WebKit2Generated.make178
-rw-r--r--Source/WebKit2/win/WebKit2WebProcess.resources/Info.plist20
-rw-r--r--Source/WebKit2/win/WebKit2WebProcessCommon.vsprops2
-rw-r--r--Source/WebKit2/win/WebKit2WebProcessPostBuild.cmd3
-rw-r--r--Source/WebKit2/win/WebKit2WebProcessPreBuild.cmd2
-rw-r--r--Source/autotools/webkit.m418
-rw-r--r--Source/cmake/OptionsCommon.cmake1
-rw-r--r--Source/cmake/OptionsEfl.cmake8
-rw-r--r--Source/cmake/WebKitFS.cmake1
-rw-r--r--Source/cmakeconfig.h.cmake45
-rw-r--r--Source/common.pri12
-rw-r--r--ThirdPartyProject.prop4
-rw-r--r--Tools/BuildSlaveSupport/build.webkit.org-config/config.json16
-rw-r--r--Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg9
-rw-r--r--Tools/BuildSlaveSupport/built-product-archive2
-rw-r--r--Tools/BuildSlaveSupport/test-result-archive2
-rw-r--r--Tools/CMakeListsWinCE.txt1
-rw-r--r--Tools/ChangeLog2689
-rw-r--r--Tools/DerivedSources.pro16
-rw-r--r--Tools/DumpRenderTree/AccessibilityController.cpp9
-rw-r--r--Tools/DumpRenderTree/AccessibilityController.h1
-rw-r--r--Tools/DumpRenderTree/DumpRenderTree.gypi4
-rw-r--r--Tools/DumpRenderTree/LayoutTestController.cpp12
-rw-r--r--Tools/DumpRenderTree/LayoutTestController.h1
-rw-r--r--Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp20
-rw-r--r--Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp5
-rw-r--r--Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp32
-rw-r--r--Tools/DumpRenderTree/chromium/DumpRenderTree.cpp8
-rw-r--r--Tools/DumpRenderTree/chromium/ImageDiff.cpp2
-rw-r--r--Tools/DumpRenderTree/chromium/LayoutTestController.cpp26
-rw-r--r--Tools/DumpRenderTree/chromium/LayoutTestController.h4
-rw-r--r--Tools/DumpRenderTree/chromium/NotificationPresenter.cpp2
-rw-r--r--Tools/DumpRenderTree/chromium/TestShell.cpp1
-rw-r--r--Tools/DumpRenderTree/chromium/WebViewHost.cpp41
-rw-r--r--Tools/DumpRenderTree/chromium/WebViewHost.h9
-rw-r--r--Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp196
-rw-r--r--Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h (renamed from Source/WebCore/storage/IDBTimeoutEvent.h)34
-rw-r--r--Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp18
-rw-r--r--Tools/DumpRenderTree/gtk/DumpRenderTree.cpp19
-rw-r--r--Tools/DumpRenderTree/gtk/EventSender.cpp47
-rw-r--r--Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp64
-rw-r--r--Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp9
-rw-r--r--Tools/DumpRenderTree/gtk/TextInputController.cpp177
-rw-r--r--Tools/DumpRenderTree/gtk/TextInputController.h (renamed from Source/WebCore/storage/IDBTimeoutEvent.cpp)30
-rw-r--r--Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm4
-rw-r--r--Tools/DumpRenderTree/mac/DumpRenderTree.mm6
-rw-r--r--Tools/DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp62
-rw-r--r--Tools/DumpRenderTree/qt/DumpRenderTree.pro4
-rw-r--r--Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp40
-rw-r--r--Tools/DumpRenderTree/qt/DumpRenderTreeQt.h2
-rw-r--r--Tools/DumpRenderTree/qt/EventSenderQt.cpp3
-rw-r--r--Tools/DumpRenderTree/qt/EventSenderQt.h2
-rw-r--r--Tools/DumpRenderTree/qt/ImageDiff.pro2
-rw-r--r--Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp6
-rw-r--r--Tools/DumpRenderTree/qt/LayoutTestControllerQt.h2
-rw-r--r--Tools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro2
-rw-r--r--Tools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp3
-rw-r--r--Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp4
-rw-r--r--Tools/DumpRenderTree/win/ImageDiffCommon.vsprops1
-rw-r--r--Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp5
-rw-r--r--Tools/GNUmakefile.am4
-rw-r--r--Tools/MiniBrowser/DerivedSources.pro7
-rw-r--r--Tools/MiniBrowser/mac/BrowserWindowController.m9
-rw-r--r--Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m2
-rw-r--r--Tools/MiniBrowser/qt/BrowserView.cpp5
-rw-r--r--Tools/MiniBrowser/qt/BrowserView.h1
-rw-r--r--Tools/MiniBrowser/qt/BrowserWindow.cpp259
-rw-r--r--Tools/MiniBrowser/qt/BrowserWindow.h34
-rw-r--r--Tools/MiniBrowser/qt/MiniBrowser.pro14
-rw-r--r--Tools/MiniBrowser/qt/MiniBrowserApplication.cpp95
-rw-r--r--Tools/MiniBrowser/qt/MiniBrowserApplication.h68
-rw-r--r--Tools/MiniBrowser/qt/UrlLoader.cpp129
-rw-r--r--Tools/MiniBrowser/qt/UrlLoader.h71
-rw-r--r--Tools/MiniBrowser/qt/main.cpp44
-rw-r--r--Tools/MiniBrowser/qt/utils.cpp86
-rw-r--r--Tools/MiniBrowser/qt/utils.h53
-rw-r--r--Tools/QtTestBrowser/QtTestBrowser.pro2
-rw-r--r--Tools/QtTestBrowser/launcherwindow.cpp82
-rw-r--r--Tools/QtTestBrowser/launcherwindow.h16
-rw-r--r--Tools/QtTestBrowser/locationedit.h2
-rw-r--r--Tools/QtTestBrowser/main.cpp10
-rw-r--r--Tools/QtTestBrowser/mainwindow.cpp8
-rw-r--r--Tools/QtTestBrowser/mainwindow.h3
-rw-r--r--Tools/QueueStatusServer/templates/submittoews.html2
-rwxr-xr-xTools/Scripts/build-webkit14
-rwxr-xr-xTools/Scripts/check-inspector-strings12
-rwxr-xr-xTools/Scripts/do-webcore-rename2
-rwxr-xr-xTools/Scripts/old-run-webkit-tests170
-rwxr-xr-xTools/Scripts/rebaseline-chromium-webkit-tests2
-rwxr-xr-xTools/Scripts/run-chromium-webkit-unit-tests4
-rwxr-xr-xTools/Scripts/run-webkit-httpd12
-rwxr-xr-xTools/Scripts/update-webkit11
-rwxr-xr-xTools/Scripts/webkit-patch7
-rw-r--r--Tools/Scripts/webkitdirs.pm79
-rw-r--r--Tools/Scripts/webkitperl/httpd.pm25
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/api.py4
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/changelog.py21
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py86
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/deps.py61
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/scm.py24
-rw-r--r--Tools/Scripts/webkitpy/common/checkout/scm_unittest.py11
-rw-r--r--Tools/Scripts/webkitpy/common/config/committers.py8
-rw-r--r--Tools/Scripts/webkitpy/common/config/urls.py1
-rw-r--r--Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py5
-rw-r--r--Tools/Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py6
-rw-r--r--Tools/Scripts/webkitpy/common/net/irc/ircbot.py2
-rw-r--r--Tools/Scripts/webkitpy/common/net/layouttestresults.py4
-rw-r--r--Tools/Scripts/webkitpy/common/net/testoutput.py179
-rw-r--r--Tools/Scripts/webkitpy/common/net/testoutput_unittest.py133
-rw-r--r--Tools/Scripts/webkitpy/common/net/testoutputset.py130
-rw-r--r--Tools/Scripts/webkitpy/common/net/testoutputset_unittest.py125
-rw-r--r--Tools/Scripts/webkitpy/common/system/directoryfileset.py14
-rw-r--r--Tools/Scripts/webkitpy/common/system/fileset.py6
-rw-r--r--Tools/Scripts/webkitpy/common/system/filesystem.py16
-rw-r--r--Tools/Scripts/webkitpy/common/system/filesystem_mock.py71
-rw-r--r--Tools/Scripts/webkitpy/common/system/filesystem_unittest.py13
-rw-r--r--Tools/Scripts/webkitpy/common/system/logutils.py2
-rw-r--r--Tools/Scripts/webkitpy/common/system/logutils_unittest.py2
-rw-r--r--Tools/Scripts/webkitpy/common/system/ospath.py8
-rw-r--r--Tools/Scripts/webkitpy/common/system/stack_utils.py67
-rw-r--r--Tools/Scripts/webkitpy/common/system/stack_utils_unittest.py76
-rw-r--r--Tools/Scripts/webkitpy/common/system/urlfetcher.py (renamed from Tools/Scripts/webkitpy/layout_tests/layout_package/test_output.py)47
-rw-r--r--Tools/Scripts/webkitpy/common/system/urlfetcher_mock.py46
-rw-r--r--Tools/Scripts/webkitpy/common/system/zip_mock.py55
-rw-r--r--Tools/Scripts/webkitpy/common/system/zipfileset.py10
-rw-r--r--Tools/Scripts/webkitpy/common/system/zipfileset_mock.py51
-rw-r--r--Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py6
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py11
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py422
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py6
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py113
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py29
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py282
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py227
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py41
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2.py196
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py83
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py54
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py8
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py322
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py554
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py293
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py4
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py107
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py129
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py104
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/base.py175
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/base_unittest.py14
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium.py74
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py119
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py43
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_linux.py4
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_mac.py24
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py7
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py10
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/dryrun.py22
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/factory.py5
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py2
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/mac.py6
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/mac_unittest.py23
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py280
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py261
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py12
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/server_process.py6
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/server_process_unittest.py77
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/test.py221
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/test_files.py58
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/test_files_unittest.py57
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/webkit.py53
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py36
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py2
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py125
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py184
-rwxr-xr-xTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py33
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py57
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py60
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py63
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py2
-rw-r--r--Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py18
-rwxr-xr-xTools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py2
-rw-r--r--Tools/Scripts/webkitpy/style/checker.py27
-rwxr-xr-xTools/Scripts/webkitpy/style/checker_unittest.py25
-rw-r--r--Tools/Scripts/webkitpy/style/checkers/cpp.py36
-rw-r--r--Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py55
-rw-r--r--Tools/Scripts/webkitpy/style/checkers/test_expectations.py3
-rw-r--r--Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py35
-rw-r--r--Tools/Scripts/webkitpy/tool/bot/irc_command.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/__init__.py1
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/commandtest.py4
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/download.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/download_unittest.py12
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/prettydiff.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/queries.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/roll.py48
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/roll_unittest.py50
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/stepsequence.py6
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/upload.py6
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/upload_unittest.py12
-rwxr-xr-xTools/Scripts/webkitpy/tool/main.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/mocktool.py31
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/__init__.py2
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py40
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py18
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py130
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py5
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/updatechromiumdeps.py64
-rw-r--r--Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py5
-rw-r--r--Tools/TestWebKitAPI/JavaScriptTest.cpp65
-rw-r--r--Tools/TestWebKitAPI/JavaScriptTest.h32
-rw-r--r--Tools/TestWebKitAPI/PlatformWebView.h2
-rw-r--r--Tools/TestWebKitAPI/Test.h4
-rw-r--r--Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj14
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp6
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp86
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp32
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/simple-form.html11
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp85
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp125
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp46
-rw-r--r--Tools/TestWebKitAPI/mac/PlatformWebViewMac.mm2
-rw-r--r--Tools/TestWebKitAPI/win/PlatformWebViewWin.cpp7
-rw-r--r--Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj24
-rwxr-xr-xTools/TestWebKitAPI/win/copy-resources.cmd1
-rw-r--r--Tools/Tools.pro15
-rw-r--r--Tools/WebKitTestRunner/Configurations/Base.xcconfig2
-rw-r--r--Tools/WebKitTestRunner/DerivedSources.pro2
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl14
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp8
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h2
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp87
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h17
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp30
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h12
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp17
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro8
-rw-r--r--Tools/WebKitTestRunner/TestController.cpp39
-rw-r--r--Tools/WebKitTestRunner/TestController.h3
-rw-r--r--Tools/WebKitTestRunner/TestInvocation.cpp19
-rw-r--r--Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj6
-rw-r--r--Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h1
-rw-r--r--Tools/WebKitTestRunner/mac/TestControllerMac.mm5
-rw-r--r--Tools/WebKitTestRunner/qt/TestControllerQt.cpp5
-rw-r--r--Tools/WebKitTestRunner/qt/WebKitTestRunner.pro4
-rw-r--r--Tools/WebKitTestRunner/win/TestControllerWin.cpp5
-rw-r--r--Tools/wx/browser/wscript2
-rw-r--r--Tools/wx/build/build_utils.py2
-rw-r--r--Tools/wx/build/settings.py3
-rw-r--r--WebKitLibraries/ChangeLog77
-rw-r--r--WebKitLibraries/WebKitSystemInterface.h14
-rw-r--r--WebKitLibraries/libWebKitSystemInterfaceLeopard.abin1662544 -> 1715520 bytes
-rw-r--r--WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.abin1405092 -> 1409060 bytes
-rw-r--r--WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h5
-rw-r--r--WebKitLibraries/win/lib/WebKitSystemInterface.libbin556678 -> 624642 bytes
-rw-r--r--WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops12
-rw-r--r--WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops12
-rw-r--r--WebKitLibraries/win/tools/vsprops/common.vsprops2
2830 files changed, 187086 insertions, 42327 deletions
diff --git a/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-hash.js b/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-hash.js
index 5cce834..c28dceb 100644
--- a/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-hash.js
+++ b/LayoutTests/fast/dom/HTMLAnchorElement/script-tests/set-href-attribute-hash.js
@@ -50,7 +50,7 @@ shouldBe("a.href", "'mailto:e-mail_address@goes_here#hash-value'");
debug("Add hash to file: protocol");
a.href = "file:///some path";
a.hash = "hash value";
-shouldBe("a.href", "'file:///some%20path#hash%20value'");
+shouldBe("a.href", "'file:///some%20path#hash value'");
debug("Set hash to '#'");
a.href = "http://mydomain.com#middle";
diff --git a/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash-expected.txt b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash-expected.txt
index 6515820..a757f84 100644
--- a/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash-expected.txt
+++ b/LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash-expected.txt
@@ -18,7 +18,7 @@ PASS a.href is 'https://www.mydomain.com/path/testurl.html#'
Add hash to mailto: protocol
PASS a.href is 'mailto:e-mail_address@goes_here#hash-value'
Add hash to file: protocol
-PASS a.href is 'file:///some%20path#hash%20value'
+PASS a.href is 'file:///some%20path#hash value'
Set hash to '#'
PASS a.href is 'http://mydomain.com/#'
Add hash to non-standard protocol
diff --git a/LayoutTests/fast/encoding/css-charset-default-expected.txt b/LayoutTests/fast/encoding/css-charset-default-expected.txt
index 954790e..69ddbb1 100644
--- a/LayoutTests/fast/encoding/css-charset-default-expected.txt
+++ b/LayoutTests/fast/encoding/css-charset-default-expected.txt
@@ -7,3 +7,5 @@ Stylesheet 2 (inherit document charset using link): SUССЕSS
Stylesheet 3 (inherit referring stylesheet charset): SUССЕSS
Stylesheet 4 (inherit referring inline stylesheet charset): SUССЕSS
+
+Stylesheet 5 (inherit document charset using link after document.charset was set): SUССЕSS
diff --git a/LayoutTests/fast/encoding/css-charset-default.xhtml b/LayoutTests/fast/encoding/css-charset-default.xhtml
index 24432f2..87a6d68 100644
--- a/LayoutTests/fast/encoding/css-charset-default.xhtml
+++ b/LayoutTests/fast/encoding/css-charset-default.xhtml
@@ -10,6 +10,8 @@
<style type="text/css">
@import "css-charset-inherit-iso-8859-5.css?4";
</style>
+ <script>document.charset = "koi8-r";</script>
+ <link rel="stylesheet" type="text/css" href="css-charset-inherit-koi-8.css?2"/>
</head>
<body onload="test()">
<p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=11011">bug 11011</a>:
@@ -19,6 +21,7 @@ External CSS is parsed as iso-8859-1 even though the main document is utf-8.</p>
<p id="res2">Stylesheet 2 (inherit document charset using link): </p>
<p id="res3">Stylesheet 3 (inherit referring stylesheet charset): </p>
<p id="res4">Stylesheet 4 (inherit referring inline stylesheet charset): </p>
+<p id="res5">Stylesheet 5 (inherit document charset using link after document.charset was set): </p>
<script type="text/javascript">
if (window.layoutTestController)
@@ -33,6 +36,8 @@ function test() {
document.getElementById("res3").innerHTML += document.styleSheets[2].cssRules[1].styleSheet.cssRules[0].style.content;
document.getElementById("res4").innerHTML += document.styleSheets[3].cssRules[0].styleSheet.cssRules[0].style.content;
+
+ document.getElementById("res5").innerHTML += document.styleSheets[4].cssRules[0].style.content;
} catch (ex) {
alert(ex.toString());
}
diff --git a/LayoutTests/fast/encoding/external-script-charset-expected.txt b/LayoutTests/fast/encoding/external-script-charset-expected.txt
index 6575759..0b4c6df 100644
--- a/LayoutTests/fast/encoding/external-script-charset-expected.txt
+++ b/LayoutTests/fast/encoding/external-script-charset-expected.txt
@@ -1,3 +1,5 @@
Test that external scripts in XHTML documents inherit document charset.
-PASS
+Javascript 1 (original document charset): PASS
+
+Javascript 2 (after document.charset was set): PASS
diff --git a/LayoutTests/fast/encoding/external-script-charset-koi-8.js b/LayoutTests/fast/encoding/external-script-charset-koi-8.js
new file mode 100644
index 0000000..141c931
--- /dev/null
+++ b/LayoutTests/fast/encoding/external-script-charset-koi-8.js
@@ -0,0 +1 @@
+document.getElementById("result2").innerHTML += ("ó" == "\u0421") ? "PASS" : "FAIL";
diff --git a/LayoutTests/fast/encoding/external-script-charset.js b/LayoutTests/fast/encoding/external-script-charset.js
index 841824d..a8306cb 100644
--- a/LayoutTests/fast/encoding/external-script-charset.js
+++ b/LayoutTests/fast/encoding/external-script-charset.js
@@ -1,4 +1,4 @@
if (window.layoutTestController)
layoutTestController.dumpAsText();
-document.getElementById("result").innerHTML = ("Я" == "\u042F") ? "PASS" : "FAIL"; \ No newline at end of file
+document.getElementById("result1").innerHTML += ("Я" == "\u042F") ? "PASS" : "FAIL";
diff --git a/LayoutTests/fast/encoding/external-script-charset.xhtml b/LayoutTests/fast/encoding/external-script-charset.xhtml
index d89b9d6..f6e8bf3 100644
--- a/LayoutTests/fast/encoding/external-script-charset.xhtml
+++ b/LayoutTests/fast/encoding/external-script-charset.xhtml
@@ -1,7 +1,10 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" dir="ltr">
<body>
<p>Test that external scripts in XHTML documents inherit document charset.</p>
- <div id="result"></div>
+ <p id="result1">Javascript 1 (original document charset): </p>
+ <p id="result2">Javascript 2 (after document.charset was set): </p>
<script type="text/javascript" src="external-script-charset.js"></script>
+ <script>document.charset = "koi8-r";</script>
+ <script type="text/javascript" src="external-script-charset-koi-8.js"></script>
</body>
</html>
diff --git a/LayoutTests/fast/url/anchor-expected.txt b/LayoutTests/fast/url/anchor-expected.txt
index 15dc84f..c7c8b1d 100644
--- a/LayoutTests/fast/url/anchor-expected.txt
+++ b/LayoutTests/fast/url/anchor-expected.txt
@@ -3,14 +3,15 @@ Test URLs that have an anchor.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-FAIL canonicalize('http://www.example.com/#hello, world') should be http://www.example.com/#hello, world. Was http://www.example.com/#hello,%20world.
+PASS canonicalize('http://www.example.com/#hello, world') is 'http://www.example.com/#hello, world'
FAIL canonicalize('http://www.example.com/#©') should be http://www.example.com/#©. Was http://www.example.com/#%C2%A9.
FAIL canonicalize('http://www.example.com/#ðŒ€ss') should be http://www.example.com/#ðŒ€ss. Was http://www.example.com/#%26%2366304%3Bss.
PASS canonicalize('http://www.example.com/#%41%a') is 'http://www.example.com/#%41%a'
FAIL canonicalize('http://www.example.com/#\ud800\u597d') should be http://www.example.com/#�好. Was http://www.example.com/#%26%2355296%3B%26%2322909%3B.
FAIL canonicalize('http://www.example.com/#a\uFDD0') should be http://www.example.com/#aï·. Was http://www.example.com/#a%26%2364976%3B.
-FAIL canonicalize('http://www.example.com/#asdf#qwer') should be http://www.example.com/#asdf#qwer. Was http://www.example.com/#asdf%23qwer.
-FAIL canonicalize('http://www.example.com/##asdf') should be http://www.example.com/##asdf. Was http://www.example.com/#%23asdf.
+PASS canonicalize('http://www.example.com/#asdf#qwer') is 'http://www.example.com/#asdf#qwer'
+PASS canonicalize('http://www.example.com/##asdf') is 'http://www.example.com/##asdf'
+PASS canonicalize('http://www.example.com/#a\nb\rc\td') is 'http://www.example.com/#abcd'
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/url/file-expected.txt b/LayoutTests/fast/url/file-expected.txt
index e85ff52..d274673 100644
--- a/LayoutTests/fast/url/file-expected.txt
+++ b/LayoutTests/fast/url/file-expected.txt
@@ -17,7 +17,7 @@ PASS canonicalize('/\\server/file') is 'file://server/file'
FAIL canonicalize('file:c:foo/bar.html') should be file:///C:/foo/bar.html. Was file:///tmp/mock/c:foo/bar.html.
FAIL canonicalize('file:/\\/\\C:\\\\//foo\\bar.html') should be file:///C:////foo/bar.html. Was file:////C:////foo/bar.html.
PASS canonicalize('file:///foo/bar.txt') is 'file:///foo/bar.txt'
-FAIL canonicalize('FILE:/\\/\\7:\\\\//foo\\bar.html') should be file://7:////foo/bar.html. Was FILE:////7:////foo/bar.html.
+FAIL canonicalize('FILE:/\\/\\7:\\\\//foo\\bar.html') should be file://7:////foo/bar.html. Was file:////7:////foo/bar.html.
FAIL canonicalize('file:filer/home\\me') should be file://filer/home/me. Was file:///tmp/mock/filer/home/me.
FAIL canonicalize('file:///C:/foo/../../../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
FAIL canonicalize('file:///C:/asdf#\xc2') should be file:///C:/asdf#�. Was file:///C:/asdf#%C2.
diff --git a/LayoutTests/fast/url/file-http-base-expected.txt b/LayoutTests/fast/url/file-http-base-expected.txt
index aa860a1..afd3131 100644
--- a/LayoutTests/fast/url/file-http-base-expected.txt
+++ b/LayoutTests/fast/url/file-http-base-expected.txt
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
FAIL canonicalize('file:c:\\foo\\bar.html') should be file:///C:/foo/bar.html. Was file://c:/foo/bar.html.
-FAIL canonicalize(' File:c|////foo\\bar.html') should be file:///C:////foo/bar.html. Was File://c|////foo/bar.html.
+FAIL canonicalize(' File:c|////foo\\bar.html') should be file:///C:////foo/bar.html. Was file://c|////foo/bar.html.
FAIL canonicalize('file:') should be file:///. Was file:.
FAIL canonicalize('file:UNChost/path') should be file://unchost/path. Was file://UNChost/path.
FAIL canonicalize('c:\\foo\\bar') should be file:///C:/foo/bar. Was c:/foo/bar.
@@ -17,7 +17,7 @@ FAIL canonicalize('/\\server/file') should be file://server/file. Was http://ser
FAIL canonicalize('file:c:foo/bar.html') should be file:///C:/foo/bar.html. Was file://c:foo/bar.html.
FAIL canonicalize('file:/\\/\\C:\\\\//foo\\bar.html') should be file:///C:////foo/bar.html. Was file:////C:////foo/bar.html.
PASS canonicalize('file:///foo/bar.txt') is 'file:///foo/bar.txt'
-FAIL canonicalize('FILE:/\\/\\7:\\\\//foo\\bar.html') should be file://7:////foo/bar.html. Was FILE:////7:////foo/bar.html.
+FAIL canonicalize('FILE:/\\/\\7:\\\\//foo\\bar.html') should be file://7:////foo/bar.html. Was file:////7:////foo/bar.html.
PASS canonicalize('file:filer/home\\me') is 'file://filer/home/me'
FAIL canonicalize('file:///C:/foo/../../../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
FAIL canonicalize('file:///C:/asdf#\xc2') should be file:///C:/asdf#�. Was file:///C:/asdf#%C2.
diff --git a/LayoutTests/fast/url/path-expected.txt b/LayoutTests/fast/url/path-expected.txt
index 629806b..93bfb03 100644
--- a/LayoutTests/fast/url/path-expected.txt
+++ b/LayoutTests/fast/url/path-expected.txt
@@ -17,7 +17,10 @@ PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/
FAIL canonicalize('http://example.com/foo/%2e') should be http://example.com/foo/. Was http://example.com/foo/%2e.
FAIL canonicalize('http://example.com/foo/%2e%2') should be http://example.com/foo/.%2. Was http://example.com/foo/%2e%2.
FAIL canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') should be http://example.com/..bar. Was http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar.
-FAIL canonicalize('http://example.com////../..') should be http://example.com//. Was http://example.com/.
+PASS canonicalize('http://example.com////../..') is 'http://example.com//'
+PASS canonicalize('http://example.com/foo/bar//../..') is 'http://example.com/foo/'
+PASS canonicalize('http://example.com/foo/bar//..') is 'http://example.com/foo/bar/'
+PASS canonicalize('http://example.com/foo/bar/..') is 'http://example.com/foo/'
PASS canonicalize('http://example.com/foo') is 'http://example.com/foo'
PASS canonicalize('http://example.com/%20foo') is 'http://example.com/%20foo'
PASS canonicalize('http://example.com/foo%') is 'http://example.com/foo%'
diff --git a/LayoutTests/fast/url/path-url-expected.txt b/LayoutTests/fast/url/path-url-expected.txt
index 73eaf54..278b623 100644
--- a/LayoutTests/fast/url/path-url-expected.txt
+++ b/LayoutTests/fast/url/path-url-expected.txt
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
PASS canonicalize('javascript:') is 'javascript:'
-FAIL canonicalize('JavaScript:Foo') should be javascript:Foo. Was JavaScript:Foo.
+PASS canonicalize('JavaScript:Foo') is 'javascript:Foo'
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/url/port-expected.txt b/LayoutTests/fast/url/port-expected.txt
index d64dd3a..11ab371 100644
--- a/LayoutTests/fast/url/port-expected.txt
+++ b/LayoutTests/fast/url/port-expected.txt
@@ -5,8 +5,9 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
FAIL canonicalize('http://www.example.com:as df/') should be http://www.example.com:as%20df/. Was http://www.example.com:as df/.
PASS canonicalize('http://www.example.com:-2/') is 'http://www.example.com:-2/'
-FAIL canonicalize('http://www.example.com:80/') should be http://www.example.com/. Was http://www.example.com:80/.
+PASS canonicalize('http://www.example.com:80/') is 'http://www.example.com/'
PASS canonicalize('http://www.example.com:8080/') is 'http://www.example.com:8080/'
+PASS canonicalize('http://www.example.com:/') is 'http://www.example.com/'
PASS canonicalize('foobar://www.example.com:80/') is 'foobar://www.example.com:80/'
PASS successfullyParsed is true
diff --git a/LayoutTests/fast/url/relative-expected.txt b/LayoutTests/fast/url/relative-expected.txt
index 684253f..8ee781c 100644
--- a/LayoutTests/fast/url/relative-expected.txt
+++ b/LayoutTests/fast/url/relative-expected.txt
@@ -14,7 +14,7 @@ PASS canonicalize(' ') is 'http://foo/bar'
PASS canonicalize('http:path') is 'http://host/path'
PASS canonicalize('http:path') is 'http://host/a/path'
FAIL canonicalize('http:/path') should be http://host/path. Was http:/path.
-FAIL canonicalize('HTTP:/path') should be http://host/path. Was HTTP:/path.
+FAIL canonicalize('HTTP:/path') should be http://host/path. Was http:/path.
FAIL canonicalize('https:host2') should be https://host2/. Was https:host2.
PASS canonicalize('htto:/host2') is 'htto:/host2'
PASS canonicalize('/b/c/d') is 'http://host/b/c/d'
diff --git a/LayoutTests/fast/url/relative-unix-expected.txt b/LayoutTests/fast/url/relative-unix-expected.txt
index acd59ab..32c1a75 100644
--- a/LayoutTests/fast/url/relative-unix-expected.txt
+++ b/LayoutTests/fast/url/relative-unix-expected.txt
@@ -5,7 +5,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
FAIL canonicalize('\\\\Another\\path') should be http://another/path. Was http://Another/path.
PASS canonicalize('/c:\\foo') is 'http://host/c:/foo'
-FAIL canonicalize('//c:\\foo') should be http://c/foo. Was http://c:/foo.
+PASS canonicalize('//c:\\foo') is 'http://c/foo'
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/url/relative-win-expected.txt b/LayoutTests/fast/url/relative-win-expected.txt
index 733f815..1cb8d67 100644
--- a/LayoutTests/fast/url/relative-win-expected.txt
+++ b/LayoutTests/fast/url/relative-win-expected.txt
@@ -8,7 +8,7 @@ PASS canonicalize('bar') is 'file:///C:/bar'
FAIL canonicalize('../../../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
FAIL canonicalize('/../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
FAIL canonicalize('\\\\another\\path') should be . Was http://another/path.
-FAIL canonicalize('//c:/foo') should be file:///C:/foo. Was file://c:/foo.
+FAIL canonicalize('//c:/foo') should be file:///C:/foo. Was file://c/foo.
FAIL canonicalize('//localhost/c:/foo') should be file:///C:/foo. Was file:///c:/foo.
FAIL canonicalize('c:') should be . Was c:.
FAIL canonicalize('c:/foo') should be . Was c:/foo.
diff --git a/LayoutTests/fast/url/scheme-expected.txt b/LayoutTests/fast/url/scheme-expected.txt
index 8709b81..fbc130d 100644
--- a/LayoutTests/fast/url/scheme-expected.txt
+++ b/LayoutTests/fast/url/scheme-expected.txt
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
PASS canonicalize('http://example.com/') is 'http://example.com/'
-FAIL canonicalize('HTTP://example.com/') should be http://example.com/. Was HTTP://example.com/.
+PASS canonicalize('HTTP://example.com/') is 'http://example.com/'
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/url/script-tests/anchor.js b/LayoutTests/fast/url/script-tests/anchor.js
index 0387a86..8791b74 100644
--- a/LayoutTests/fast/url/script-tests/anchor.js
+++ b/LayoutTests/fast/url/script-tests/anchor.js
@@ -9,6 +9,7 @@ cases = [
["a\\uFDD0", "a\\uFDD0"],
["asdf#qwer", "asdf#qwer"],
["#asdf", "#asdf"],
+ ["a\\nb\\rc\\td", "abcd"],
];
for (var i = 0; i < cases.length; ++i) {
diff --git a/LayoutTests/fast/url/script-tests/path.js b/LayoutTests/fast/url/script-tests/path.js
index 10aaf4d..fb082ad 100644
--- a/LayoutTests/fast/url/script-tests/path.js
+++ b/LayoutTests/fast/url/script-tests/path.js
@@ -23,6 +23,9 @@ cases = [
// Multiple slashes in a row should be preserved and treated like empty
// directory names.
["////../..", "//"],
+ ["/foo/bar//../..", "/foo/"],
+ ["/foo/bar//..", "/foo/bar/"],
+ ["/foo/bar/..", "/foo/"],
// ----- escaping tests -----
["/foo", "/foo"],
diff --git a/LayoutTests/fast/url/script-tests/port.js b/LayoutTests/fast/url/script-tests/port.js
index b3228b1..e9e6057 100644
--- a/LayoutTests/fast/url/script-tests/port.js
+++ b/LayoutTests/fast/url/script-tests/port.js
@@ -7,6 +7,8 @@ cases = [
// Default port should be omitted.
["80", ""],
["8080", ":8080"],
+ // Empty ports (just a colon) should also be removed
+ ["", ""],
];
for (var i = 0; i < cases.length; ++i) {
diff --git a/LayoutTests/fast/url/segments-expected.txt b/LayoutTests/fast/url/segments-expected.txt
index 2da6912..659be5f 100644
--- a/LayoutTests/fast/url/segments-expected.txt
+++ b/LayoutTests/fast/url/segments-expected.txt
@@ -8,7 +8,7 @@ PASS segments('http:foo.com') is '["http:","example.org","0","/foo/foo.com","","
PASS segments('\t :foo.com \n') is '["http:","example.org","0","/foo/:foo.com","",""]'
PASS segments(' foo.com ') is '["http:","example.org","0","/foo/foo.com","",""]'
PASS segments('a:\t foo.com') is '["a:","","0"," foo.com","",""]'
-FAIL segments('http://f:21/ b ? d # e ') should be ["http:","f","21","/%20b%20","?%20d%20","# e"]. Was ["http:","f","21","/ b ","?%20d%20","#%20e"].
+FAIL segments('http://f:21/ b ? d # e ') should be ["http:","f","21","/%20b%20","?%20d%20","# e"]. Was ["http:","f","21","/ b ","?%20d%20","# e"].
PASS segments('http://f:/c') is '["http:","f","0","/c","",""]'
PASS segments('http://f:0/c') is '["http:","f","0","/c","",""]'
PASS segments('http://f:00000000000000/c') is '["http:","f","0","/c","",""]'
@@ -55,7 +55,7 @@ PASS segments('foo://///////bar.com/') is '["foo:","","0","/////////bar.com/",""
PASS segments('foo:////://///') is '["foo:","","0","////://///","",""]'
PASS segments('c:/foo') is '["c:","","0","/foo","",""]'
PASS segments('//foo/bar') is '["http:","foo","0","/bar","",""]'
-FAIL segments('http://foo/path;a??e#f#g') should be ["http:","foo","0","/path;a","??e","#f#g"]. Was ["http:","foo","0","/path;a","??e","#f%23g"].
+PASS segments('http://foo/path;a??e#f#g') is '["http:","foo","0","/path;a","??e","#f#g"]'
PASS segments('http://foo/abcd?efgh?ijkl') is '["http:","foo","0","/abcd","?efgh?ijkl",""]'
PASS segments('http://foo/abcd#foo?bar') is '["http:","foo","0","/abcd","","#foo?bar"]'
PASS segments('[61:24:74]:98') is '["http:","example.org","0","/foo/[61:24:74]:98","",""]'
@@ -67,7 +67,7 @@ PASS segments('http://[2001::1') is '[":","","0","","",""]'
PASS segments('http://2001::1]') is '[":","","0","","",""]'
PASS segments('http://2001::1]:80') is '[":","","0","","",""]'
PASS segments('http://[2001::1]') is '["http:","[2001::1]","0","/","",""]'
-FAIL segments('http://[2001::1]:80') should be ["http:","[2001::1]","0","/","",""]. Was ["http:","[2001::1]","80","/","",""].
+PASS segments('http://[2001::1]:80') is '["http:","[2001::1]","0","/","",""]'
PASS segments('http://[[::]]') is '[":","","0","","",""]'
PASS successfullyParsed is true
diff --git a/LayoutTests/fast/url/segments-from-data-url-expected.txt b/LayoutTests/fast/url/segments-from-data-url-expected.txt
index 6e1853e..b97e489 100644
--- a/LayoutTests/fast/url/segments-from-data-url-expected.txt
+++ b/LayoutTests/fast/url/segments-from-data-url-expected.txt
@@ -8,7 +8,7 @@ FAIL segments('http:foo.com') should be ["http:","foo.com","0","/","",""]. Was [
PASS segments('\t :foo.com \n') is '[":","","0","","",""]'
PASS segments(' foo.com ') is '[":","","0","","",""]'
PASS segments('a:\t foo.com') is '["a:","","0"," foo.com","",""]'
-FAIL segments('http://f:21/ b ? d # e ') should be ["http:","f","21","/%20b%20","?%20d%20","# e"]. Was ["http:","f","21","/ b ","?%20d%20","#%20e"].
+FAIL segments('http://f:21/ b ? d # e ') should be ["http:","f","21","/%20b%20","?%20d%20","# e"]. Was ["http:","f","21","/ b ","?%20d%20","# e"].
PASS segments('http://f:/c') is '["http:","f","0","/c","",""]'
PASS segments('http://f:0/c') is '["http:","f","0","/c","",""]'
PASS segments('http://f:00000000000000/c') is '["http:","f","0","/c","",""]'
@@ -55,7 +55,7 @@ PASS segments('foo://///////bar.com/') is '["foo:","","0","/////////bar.com/",""
PASS segments('foo:////://///') is '["foo:","","0","////://///","",""]'
PASS segments('c:/foo') is '["c:","","0","/foo","",""]'
PASS segments('//foo/bar') is '[":","","0","","",""]'
-FAIL segments('http://foo/path;a??e#f#g') should be ["http:","foo","0","/path;a","??e","#f#g"]. Was ["http:","foo","0","/path;a","??e","#f%23g"].
+PASS segments('http://foo/path;a??e#f#g') is '["http:","foo","0","/path;a","??e","#f#g"]'
PASS segments('http://foo/abcd?efgh?ijkl') is '["http:","foo","0","/abcd","?efgh?ijkl",""]'
PASS segments('http://foo/abcd#foo?bar') is '["http:","foo","0","/abcd","","#foo?bar"]'
FAIL segments('[61:24:74]:98') should be ["data:","","0","text/[61:24:74]:98","",""]. Was [":","","0","","",""].
@@ -67,7 +67,7 @@ PASS segments('http://[2001::1') is '[":","","0","","",""]'
PASS segments('http://2001::1]') is '[":","","0","","",""]'
PASS segments('http://2001::1]:80') is '[":","","0","","",""]'
PASS segments('http://[2001::1]') is '["http:","[2001::1]","0","/","",""]'
-FAIL segments('http://[2001::1]:80') should be ["http:","[2001::1]","0","/","",""]. Was ["http:","[2001::1]","80","/","",""].
+PASS segments('http://[2001::1]:80') is '["http:","[2001::1]","0","/","",""]'
PASS segments('http://[[::]]') is '[":","","0","","",""]'
PASS successfullyParsed is true
diff --git a/LayoutTests/fast/url/standard-url-expected.txt b/LayoutTests/fast/url/standard-url-expected.txt
index 18a5117..5312e07 100644
--- a/LayoutTests/fast/url/standard-url-expected.txt
+++ b/LayoutTests/fast/url/standard-url-expected.txt
@@ -12,23 +12,23 @@ PASS canonicalize('http://user:pass@/') is 'http://user:pass@/'
PASS canonicalize('http://%25DOMAIN:foobar@foodomain.com/') is 'http://%25DOMAIN:foobar@foodomain.com/'
PASS canonicalize('http:\\\\www.google.com\\foo') is 'http://www.google.com/foo'
FAIL canonicalize('http://www.google.com/asdf#\ud800') should be http://www.google.com/asdf#�. Was http://www.google.com/asdf#%26%2355296%3B.
-FAIL canonicalize('http://foo:80/') should be http://foo/. Was http://foo:80/.
+PASS canonicalize('http://foo:80/') is 'http://foo/'
PASS canonicalize('http://foo:81/') is 'http://foo:81/'
PASS canonicalize('httpa://foo:80/') is 'httpa://foo:80/'
PASS canonicalize('http://foo:-80/') is 'http://foo:-80/'
-FAIL canonicalize('https://foo:443/') should be https://foo/. Was https://foo:443/.
+PASS canonicalize('https://foo:443/') is 'https://foo/'
PASS canonicalize('https://foo:80/') is 'https://foo:80/'
-FAIL canonicalize('ftp://foo:21/') should be ftp://foo/. Was ftp://foo:21/.
+PASS canonicalize('ftp://foo:21/') is 'ftp://foo/'
PASS canonicalize('ftp://foo:80/') is 'ftp://foo:80/'
-FAIL canonicalize('gopher://foo:70/') should be gopher://foo/. Was gopher://foo:70/.
+PASS canonicalize('gopher://foo:70/') is 'gopher://foo/'
PASS canonicalize('gopher://foo:443/') is 'gopher://foo:443/'
-FAIL canonicalize('ws://foo:80/') should be ws://foo/. Was ws://foo:80/.
+PASS canonicalize('ws://foo:80/') is 'ws://foo/'
PASS canonicalize('ws://foo:81/') is 'ws://foo:81/'
PASS canonicalize('ws://foo:443/') is 'ws://foo:443/'
PASS canonicalize('ws://foo:815/') is 'ws://foo:815/'
PASS canonicalize('wss://foo:80/') is 'wss://foo:80/'
PASS canonicalize('wss://foo:81/') is 'wss://foo:81/'
-FAIL canonicalize('wss://foo:443/') should be wss://foo/. Was wss://foo:443/.
+PASS canonicalize('wss://foo:443/') is 'wss://foo/'
PASS canonicalize('wss://foo:815/') is 'wss://foo:815/'
PASS successfullyParsed is true
diff --git a/LayoutTests/http/conf/apache2-msys-httpd.conf b/LayoutTests/http/conf/apache2-msys-httpd.conf
new file mode 100644
index 0000000..9b14992
--- /dev/null
+++ b/LayoutTests/http/conf/apache2-msys-httpd.conf
@@ -0,0 +1,709 @@
+##
+## httpd.conf -- Apache HTTP server configuration file
+##
+
+#
+# Based upon the NCSA server configuration files originally by Rob McCool.
+#
+# This is the main Apache server configuration file. It contains the
+# configuration directives that give the server its instructions.
+# See <URL:http://httpd.apache.org/docs/> for detailed information about
+# the directives.
+#
+# Do NOT simply read the instructions in here without understanding
+# what they do. They're here only as hints or reminders. If you are unsure
+# consult the online docs. You have been warned.
+#
+# After this file is processed, the server will look for and process
+# /private/etc/apache2/srm.conf and then /private/etc/apache2/access.conf
+# unless you have overridden these with ResourceConfig and/or
+# AccessConfig directives here.
+#
+# The configuration directives are grouped into three basic sections:
+# 1. Directives that control the operation of the Apache server process as a
+# whole (the 'global environment').
+# 2. Directives that define the parameters of the 'main' or 'default' server,
+# which responds to requests that aren't handled by a virtual host.
+# These directives also provide default values for the settings
+# of all virtual hosts.
+# 3. Settings for virtual hosts, which allow Web requests to be sent to
+# different IP addresses or hostnames and have them handled by the
+# same Apache server process.
+#
+# Configuration and logfile names: If the filenames you specify for many
+# of the server's control files begin with "/" (or "drive:/" for Win32), the
+# server will use that explicit path. If the filenames do *not* begin
+# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
+# with ServerRoot set to "/usr/local/apache" will be interpreted by the
+# server as "/usr/local/apache/logs/foo.log".
+#
+
+### Section 1: Global Environment
+#
+# The directives in this section affect the overall operation of Apache,
+# such as the number of concurrent requests it can handle or where it
+# can find its configuration files.
+#
+
+#
+# ServerRoot: The top of the directory tree under which the server's
+# configuration, error, and log files are kept.
+#
+# NOTE! If you intend to place this on an NFS (or otherwise network)
+# mounted filesystem then please read the LockFile documentation
+# (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>);
+# you will save yourself a lot of trouble.
+#
+ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"
+
+#
+# The LockFile directive sets the path to the lockfile used when Apache
+# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or
+# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at
+# its default value. The main reason for changing it is if the logs
+# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL
+# DISK. The PID of the main server process is automatically appended to
+# the filename.
+#
+#LockFile "/tmp/WebKit/httpd.lock"
+
+#
+# PidFile: The file in which the server should record its process
+# identification number when it starts.
+#
+PidFile "/tmp/WebKit/httpd.pid"
+
+#
+# ScoreBoardFile: File used to store internal server process information.
+# Not all architectures require this. But if yours does (you'll know because
+# this file will be created when you run Apache) then you *must* ensure that
+# no two invocations of Apache share the same scoreboard file.
+#
+ScoreBoardFile "/tmp/WebKit/httpd.scoreboard"
+
+#
+# Timeout: The number of seconds before receives and sends time out.
+#
+Timeout 300
+
+#
+# KeepAlive: Whether or not to allow persistent connections (more than
+# one request per connection). Set to "Off" to deactivate.
+#
+KeepAlive On
+
+#
+# MaxKeepAliveRequests: The maximum number of requests to allow
+# during a persistent connection. Set to 0 to allow an unlimited amount.
+# We recommend you leave this number high, for maximum performance.
+#
+MaxKeepAliveRequests 100
+
+#
+# KeepAliveTimeout: Number of seconds to wait for the next request from the
+# same client on the same connection.
+#
+KeepAliveTimeout 15
+
+#
+# Server-pool size regulation. Rather than making you guess how many
+# server processes you need, Apache dynamically adapts to the load it
+# sees --- that is, it tries to maintain enough server processes to
+# handle the current load, plus a few spare servers to handle transient
+# load spikes (e.g., multiple simultaneous requests from a single
+# Netscape browser).
+#
+# It does this by periodically checking how many servers are waiting
+# for a request. If there are fewer than MinSpareServers, it creates
+# a new spare. If there are more than MaxSpareServers, some of the
+# spares die off. The default values are probably OK for most sites.
+#
+#MinSpareServers 1
+#MaxSpareServers 5
+
+#
+# Number of servers to start initially --- should be a reasonable ballpark
+# figure.
+#
+#StartServers 1
+
+#
+# Limit on total number of servers running, i.e., limit on the number
+# of clients who can simultaneously connect --- if this limit is ever
+# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
+# It is intended mainly as a brake to keep a runaway server from taking
+# the system with it as it spirals down...
+#
+#MaxClients 150
+
+#
+# MaxRequestsPerChild: the number of requests each child process is
+# allowed to process before the child dies. The child will exit so
+# as to avoid problems after prolonged use when Apache (and maybe the
+# libraries it uses) leak memory or other resources. On most systems, this
+# isn't really needed, but a few (such as Solaris) do have notable leaks
+# in the libraries. For these platforms, set to something like 10000
+# or so; a setting of 0 means unlimited.
+#
+# NOTE: This value does not include keepalive requests after the initial
+# request per connection. For example, if a child process handles
+# an initial request and 10 subsequent "keptalive" requests, it
+# would only count as 1 request towards this limit.
+#
+#MaxRequestsPerChild 100000
+
+#
+# Listen: Allows you to bind Apache to specific IP addresses and/or
+# ports, instead of the default. See also the <VirtualHost>
+# directive.
+#
+# Configured from the httpd command line for WebKit layout tests.
+# Port 8443 is hard-coded as it is needed for the HTTPS configuration later on.
+#
+#Listen 3000
+Listen 127.0.0.1:8080
+Listen 127.0.0.1:8443
+# We listen to both IPv4 and IPv6 loop-back addresses, but ignore
+# requests to 8000 from random users on network.
+# See https://bugs.webkit.org/show_bug.cgi?id=37104
+#Listen [::1]:8000
+#Listen [::1]:8080
+#Listen [::1]:8443
+
+#
+# Dynamic Shared Object (DSO) Support
+#
+# To be able to use the functionality of a module which was built as a DSO you
+# have to place corresponding `LoadModule' lines at this location so the
+# directives contained in it are actually available _before_ they are used.
+# Please read the file http://httpd.apache.org/docs/dso.html for more
+# details about the DSO mechanism and run `httpd -l' for the list of already
+# built-in (statically linked and thus always available) modules in your httpd
+# binary.
+#
+# Note: The order in which modules are loaded is important. Don't change
+# the order below without expert advice.
+#
+# Example:
+# LoadModule foo_module libexec/mod_foo.so
+#LoadModule authn_file_module modules/mod_authn_file.so
+#LoadModule authn_dbm_module modules/mod_authn_dbm.so
+#LoadModule authn_anon_module modules/mod_authn_anon.so
+#LoadModule authn_dbd_module modules/mod_authn_dbd.so
+#LoadModule authn_default_module modules/mod_authn_default.so
+LoadModule authz_host_module modules/mod_authz_host.so
+#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
+#LoadModule authz_user_module modules/mod_authz_user.so
+#LoadModule authz_dbm_module modules/mod_authz_dbm.so
+#LoadModule authz_owner_module modules/mod_authz_owner.so
+#LoadModule authz_default_module modules/mod_authz_default.so
+#LoadModule auth_basic_module modules/mod_auth_basic.so
+#LoadModule auth_digest_module modules/mod_auth_digest.so
+#LoadModule cache_module modules/mod_cache.so
+#LoadModule disk_cache_module modules/mod_disk_cache.so
+#LoadModule mem_cache_module modules/mod_mem_cache.so
+#LoadModule dbd_module modules/mod_dbd.so
+#LoadModule dumpio_module modules/mod_dumpio.so
+#LoadModule ext_filter_module modules/mod_ext_filter.so
+LoadModule include_module modules/mod_include.so
+#LoadModule filter_module modules/mod_filter.so
+#LoadModule substitute_module modules/mod_substitute.so
+#LoadModule deflate_module modules/mod_deflate.so
+LoadModule log_config_module modules/mod_log_config.so
+#LoadModule log_forensic_module modules/mod_log_forensic.so
+#LoadModule logio_module modules/mod_logio.so
+#LoadModule env_module modules/mod_env.so
+#LoadModule mime_magic_module modules/mod_mime_magic.so
+#LoadModule cern_meta_module modules/mod_cern_meta.so
+#LoadModule expires_module modules/mod_expires.so
+LoadModule headers_module modules/mod_headers.so
+#LoadModule ident_module modules/mod_ident.so
+#LoadModule usertrack_module modules/mod_usertrack.so
+#LoadModule unique_id_module modules/mod_unique_id.so
+#LoadModule setenvif_module modules/mod_setenvif.so
+#LoadModule version_module modules/mod_version.so
+#LoadModule proxy_module modules/mod_proxy.so
+#LoadModule proxy_connect_module modules/mod_proxy_connect.so
+#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
+#LoadModule proxy_http_module modules/mod_proxy_http.so
+#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
+#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
+LoadModule ssl_module modules/mod_ssl.so
+LoadModule mime_module modules/mod_mime.so
+#LoadModule dav_module modules/mod_dav.so
+#LoadModule status_module modules/mod_status.so
+LoadModule autoindex_module modules/mod_autoindex.so
+LoadModule asis_module modules/mod_asis.so
+#LoadModule info_module modules/mod_info.so
+LoadModule cgi_module modules/mod_cgi.so
+#LoadModule dav_fs_module modules/mod_dav_fs.so
+#LoadModule vhost_alias_module modules/mod_vhost_alias.so
+LoadModule negotiation_module modules/mod_negotiation.so
+#LoadModule dir_module modules/mod_dir.so
+LoadModule imagemap_module modules/mod_imagemap.so
+LoadModule actions_module modules/mod_actions.so
+#LoadModule speling_module modules/mod_speling.so
+#LoadModule userdir_module modules/mod_userdir.so
+LoadModule alias_module modules/mod_alias.so
+LoadModule rewrite_module modules/mod_rewrite.so
+#LoadModule bonjour_module modules/mod_bonjour.so
+#LoadModule php5_module modules/php5apache2_2.dll
+#LoadModule fastcgi_module modules/mod_fastcgi.so
+#LoadModule isapi_module modules/mod_isapi.so
+
+### Section 2: 'Main' server configuration
+#
+# The directives in this section set up the values used by the 'main'
+# server, which responds to any requests that aren't handled by a
+# <VirtualHost> definition. These values also provide defaults for
+# any <VirtualHost> containers you may define later in the file.
+#
+# All of these directives may appear inside <VirtualHost> containers,
+# in which case these default settings will be overridden for the
+# virtual host being defined.
+#
+
+#
+# ServerName allows you to set a host name which is sent back to clients for
+# your server if it's different than the one the program would get (i.e., use
+# "www" instead of the host's real name).
+#
+# Note: You cannot just invent host names and hope they work. The name you
+# define here must be a valid DNS name for your host. If you don't understand
+# this, ask your network administrator.
+# If your host doesn't have a registered DNS name, enter its IP address here.
+# You will have to access it by its address (e.g., http://123.45.67.89/)
+# anyway, and this will make redirections work in a sensible way.
+#
+# 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your
+# machine always knows itself by this address. If you use Apache strictly for
+# local testing and development, you may use 127.0.0.1 as the server name.
+#
+ServerName 127.0.0.1
+
+#
+# DocumentRoot: The directory out of which you will serve your
+# documents. By default, all requests are taken from this directory, but
+# symbolic links and aliases may be used to point to other locations.
+#
+# Configured from the httpd command line for WebKit layout tests.
+#DocumentRoot "/Library/WebServer/Documents"
+
+#
+# Each directory to which Apache has access, can be configured with respect
+# to which services and features are allowed and/or disabled in that
+# directory (and its subdirectories).
+#
+<Directory />
+#
+# This may also be "None", "All", or any combination of "Indexes",
+# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
+#
+# Note that "MultiViews" must be named *explicitly* --- "Options All"
+# doesn't give it to you.
+#
+ Options Indexes FollowSymLinks MultiViews ExecCGI Includes
+
+#
+# This controls which options the .htaccess files in directories can
+# override. Can also be "All", or any combination of "Options", "FileInfo",
+# "AuthConfig", and "Limit"
+#
+ AllowOverride All
+
+#
+# Controls who can get stuff from this server.
+#
+ Order allow,deny
+ Allow from all
+</Directory>
+
+#
+# AccessFileName: The name of the file to look for in each directory
+# for access control information.
+#
+AccessFileName .htaccess
+
+#
+# The following lines prevent .htaccess files from being viewed by
+# Web clients. Since .htaccess files often contain authorization
+# information, access is disallowed for security reasons. Comment
+# these lines out if you want Web visitors to see the contents of
+# .htaccess files. If you change the AccessFileName directive above,
+# be sure to make the corresponding changes here.
+#
+# Also, folks tend to use names such as .htpasswd for password
+# files, so this will protect those as well.
+#
+<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</Files>
+
+#
+# Apple specific filesystem protection.
+#
+
+<Files "rsrc">
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</Files>
+
+<Directory ~ ".*\.\.namedfork">
+ Order allow,deny
+ Deny from all
+ Satisfy All
+</Directory>
+
+#
+# CacheNegotiatedDocs: By default, Apache sends "Pragma: no-cache" with each
+# document that was negotiated on the basis of content. This asks proxy
+# servers not to cache the document. Uncommenting the following line disables
+# this behavior, and proxies will be allowed to cache the documents.
+#
+#CacheNegotiatedDocs
+
+#
+# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
+# Apache needs to construct a self-referencing URL (a URL that refers back
+# to the server the response is coming from) it will use ServerName and
+# Port to form a "canonical" name. With this setting off, Apache will
+# use the hostname:port that the client supplied, when possible. This
+# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
+#
+UseCanonicalName On
+
+#
+# TypesConfig describes where the mime.types file (or equivalent) is
+# to be found.
+#
+# Configured from the httpd command line for WebKit layout tests.
+#
+#<IfModule mod_mime.c>
+# TypesConfig /private/etc/apache2/mime.types
+#</IfModule>
+
+#
+# DefaultType is the default MIME type the server will use for a document
+# if it cannot otherwise determine one, such as from filename extensions.
+# If your server contains mostly text or HTML documents, "text/plain" is
+# a good value. If most of your content is binary, such as applications
+# or images, you may want to use "application/octet-stream" instead to
+# keep browsers from trying to display binary files as though they are
+# text.
+#
+DefaultType text/plain
+
+#
+# HostnameLookups: Log the names of clients or just their IP addresses
+# e.g., www.apache.org (on) or 204.62.129.132 (off).
+# The default is off because it'd be overall better for the net if people
+# had to knowingly turn this feature on, since enabling it means that
+# each client request will result in AT LEAST one lookup request to the
+# nameserver.
+#
+HostnameLookups Off
+
+#
+# ErrorLog: The location of the error log file.
+# If you do not specify an ErrorLog directive within a <VirtualHost>
+# container, error messages relating to that virtual host will be
+# logged here. If you *do* define an error logfile for a <VirtualHost>
+# container, that host's errors will be logged there and not here.
+#
+# Configured from the httpd command line for WebKit layout tests.
+#ErrorLog "/tmp/layout-test-results/error_log"
+
+#
+# LogLevel: Control the number of messages logged to the error_log.
+# Possible values include: debug, info, notice, warn, error, crit,
+# alert, emerg.
+#
+LogLevel warn
+
+#
+# The following directives define some format nicknames for use with
+# a CustomLog directive (see below).
+#
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+LogFormat "%{Referer}i -> %U" referer
+LogFormat "%{User-agent}i" agent
+
+#
+# The location and format of the access logfile (Common Logfile Format).
+# If you do not define any access logfiles within a <VirtualHost>
+# container, they will be logged here. Contrariwise, if you *do*
+# define per-<VirtualHost> access logfiles, transactions will be
+# logged therein and *not* in this file.
+#
+# Configured from the httpd command line for WebKit layout tests.
+#CustomLog "/tmp/layout-test-results/access_log" common
+
+#
+# If you prefer a single logfile with access, agent, and referer information
+# (Combined Logfile Format) you can use the following directive.
+#
+#CustomLog "/tmp/layout-test-results/access_log" combined
+
+#
+# Optionally add a line containing the server version and virtual host
+# name to server-generated pages (error documents, FTP directory listings,
+# mod_status and mod_info output etc., but not CGI generated documents).
+# Set to "EMail" to also include a mailto: link to the ServerAdmin.
+# Set to one of: On | Off | EMail
+#
+ServerSignature On
+
+#
+# Aliases: Add here as many aliases as you need (with no limit). The format is
+# Alias fakename realname
+#
+<IfModule mod_alias.c>
+</IfModule>
+# End of aliases.
+
+#
+# Redirect allows you to tell clients about documents which used to exist in
+# your server's namespace, but do not anymore. This allows you to tell the
+# clients where to look for the relocated document.
+# Format: Redirect old-URI new-URL
+#
+
+#
+# Document types.
+#
+<IfModule mod_mime.c>
+
+ #
+ # AddLanguage allows you to specify the language of a document. You can
+ # then use content negotiation to give a browser a file in a language
+ # it can understand.
+ #
+ # Note 1: The suffix does not have to be the same as the language
+ # keyword --- those with documents in Polish (whose net-standard
+ # language code is pl) may wish to use "AddLanguage pl .po" to
+ # avoid the ambiguity with the common suffix for perl scripts.
+ #
+ # Note 2: The example entries below illustrate that in quite
+ # some cases the two character 'Language' abbreviation is not
+ # identical to the two character 'Country' code for its country,
+ # E.g. 'Danmark/dk' versus 'Danish/da'.
+ #
+ # Note 3: In the case of 'ltz' we violate the RFC by using a three char
+ # specifier. But there is 'work in progress' to fix this and get
+ # the reference data for rfc1766 cleaned up.
+ #
+ # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
+ # French (fr) - German (de) - Greek-Modern (el)
+ # Italian (it) - Korean (kr) - Norwegian (no) - Norwegian Nynorsk (nn)
+ # Portugese (pt) - Luxembourgeois* (ltz)
+ # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cs)
+ # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
+ # Russian (ru)
+ #
+ AddLanguage da .dk
+ AddLanguage nl .nl
+ AddLanguage en .en
+ AddLanguage et .ee
+ AddLanguage fr .fr
+ AddLanguage de .de
+ AddLanguage el .el
+ AddLanguage he .he
+ AddCharset ISO-8859-8 .iso8859-8
+ AddLanguage it .it
+ AddLanguage ja .ja
+ AddCharset ISO-2022-JP .jis
+ AddLanguage kr .kr
+ AddCharset ISO-2022-KR .iso-kr
+ AddLanguage nn .nn
+ AddLanguage no .no
+ AddLanguage pl .po
+ AddCharset ISO-8859-2 .iso-pl
+ AddLanguage pt .pt
+ AddLanguage pt-br .pt-br
+ AddLanguage ltz .lu
+ AddLanguage ca .ca
+ AddLanguage es .es
+ AddLanguage sv .sv
+ AddLanguage cs .cz .cs
+ AddLanguage ru .ru
+ AddLanguage zh-TW .zh-tw
+ AddCharset Big5 .Big5 .big5
+ AddCharset WINDOWS-1251 .cp-1251
+ AddCharset CP866 .cp866
+ AddCharset ISO-8859-5 .iso-ru
+ AddCharset KOI8-R .koi8-r
+ AddCharset UCS-2 .ucs2
+ AddCharset UCS-4 .ucs4
+ AddCharset UTF-8 .utf8
+
+ # LanguagePriority allows you to give precedence to some languages
+ # in case of a tie during content negotiation.
+ #
+ # Just list the languages in decreasing order of preference. We have
+ # more or less alphabetized them here. You probably want to change this.
+ #
+ <IfModule mod_negotiation.c>
+ LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
+ </IfModule>
+
+ #
+ # AddType allows you to tweak mime.types without actually editing it, or to
+ # make certain files to be certain types.
+ #
+ AddType application/x-tar .tgz
+
+ #
+ # AddEncoding allows you to have certain browsers uncompress
+ # information on the fly. Note: Not all browsers support this.
+ # Despite the name similarity, the following Add* directives have nothing
+ # to do with the FancyIndexing customization directives above.
+ #
+ AddEncoding x-compress .Z
+ AddEncoding x-gzip .gz .tgz
+ #
+ # If the AddEncoding directives above are commented-out, then you
+ # probably should define those extensions to indicate media types:
+ #
+ #AddType application/x-compress .Z
+ #AddType application/x-gzip .gz .tgz
+
+ #
+ # AddHandler allows you to map certain file extensions to "handlers",
+ # actions unrelated to filetype. These can be either built into the server
+ # or added with the Action command (see below)
+ #
+ # If you want to use server side includes, or CGI outside
+ # ScriptAliased directories, uncomment the following lines.
+ #
+ # To use CGI scripts:
+ #
+ AddHandler cgi-script .cgi .pl
+
+ #
+ # To use server-parsed HTML files
+ #
+ AddType text/html .shtml
+ AddHandler server-parsed .shtml
+
+ #
+ # Uncomment the following line to enable Apache's send-asis HTTP file
+ # feature
+ #
+ AddHandler send-as-is asis
+
+ #
+ # If you wish to use server-parsed imagemap files, use
+ #
+ #AddHandler imap-file map
+
+ #
+ # To enable type maps, you might want to use
+ #
+ #AddHandler type-map var
+
+</IfModule>
+# End of document types.
+
+#
+# Action lets you define media types that will execute a script whenever
+# a matching file is called. This eliminates the need for repeated URL
+# pathnames for oft-used CGI file processors.
+# Format: Action media/type /cgi-script/location
+# Format: Action handler-name /cgi-script/location
+#
+
+#
+# MetaDir: specifies the name of the directory in which Apache can find
+# meta information files. These files contain additional HTTP headers
+# to include when sending the document
+#
+#MetaDir .web
+
+#
+# MetaSuffix: specifies the file name suffix for the file containing the
+# meta information.
+#
+#MetaSuffix .meta
+
+#
+# Customizable error response (Apache style)
+# these come in three flavors
+#
+# 1) plain text
+#ErrorDocument 500 "The server made a boo boo.
+# n.b. the single leading (") marks it as text, it does not get output
+#
+# 2) local redirects
+#ErrorDocument 404 /missing.html
+# to redirect to local URL /missing.html
+#ErrorDocument 404 /cgi-bin/missing_handler.pl
+# N.B.: You can redirect to a script or a document using server-side-includes.
+#
+# 3) external redirects
+#ErrorDocument 402 http://some.other-server.com/subscription_info.html
+# N.B.: Many of the environment variables associated with the original
+# request will *not* be available to such a script.
+
+#
+# Proxy Server directives. Uncomment the following lines to
+# enable the proxy server:
+#
+#<IfModule mod_proxy.c>
+# ProxyRequests On
+
+# <Directory proxy:*>
+# Order deny,allow
+# Deny from all
+# Allow from .your-domain.com
+# </Directory>
+
+ #
+ # Enable/disable the handling of HTTP/1.1 "Via:" headers.
+ # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
+ # Set to one of: Off | On | Full | Block
+ #
+# ProxyVia On
+
+ #
+ # To enable the cache as well, edit and uncomment the following lines:
+ # (no cacheing without CacheRoot)
+ #
+# CacheRoot "/private/var/run/proxy"
+# CacheSize 5
+# CacheGcInterval 4
+# CacheMaxExpire 24
+# CacheLastModifiedFactor 0.1
+# CacheDefaultExpire 1
+# NoCache a-domain.com another-domain.edu joes.garage-sale.com
+
+#</IfModule>
+# End of proxy directives.
+
+
+<IfModule mod_php5.c>
+ # If php is turned on, we repsect .php and .phps files.
+ AddType application/x-httpd-php .php
+ AddType application/x-httpd-php .bat
+ AddType application/x-httpd-php-source .phps
+
+ # Since most users will want index.php to work we
+ # also automatically enable index.php
+ <IfModule mod_dir.c>
+ DirectoryIndex index.html index.php
+ </IfModule>
+</IfModule>
+
+<IfModule mod_rewrite.c>
+ RewriteEngine On
+ RewriteCond %{REQUEST_METHOD} ^TRACE
+ RewriteRule .* - [F]
+</IfModule>
+
+<VirtualHost *:8443>
+ ServerName 127.0.0.1
+ SSLEngine On
+</VirtualHost>
diff --git a/LayoutTests/storage/indexeddb/create-object-store-options-expected.txt b/LayoutTests/storage/indexeddb/create-object-store-options-expected.txt
index 9e727a5..5519508 100644
--- a/LayoutTests/storage/indexeddb/create-object-store-options-expected.txt
+++ b/LayoutTests/storage/indexeddb/create-object-store-options-expected.txt
@@ -17,7 +17,7 @@ Deleted all object stores.
db.createObjectStore('a', {keyPath: 'a'})
db.createObjectStore('b')
db.createObjectStore('c', {autoIncrement: true});
-trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
PASS trans.mode is webkitIDBTransaction.READ_WRITE
trans.objectStore('a').put({'a': 0})
trans.objectStore('b').put({'a': 0}, 0)
diff --git a/LayoutTests/storage/indexeddb/create-object-store-options.html b/LayoutTests/storage/indexeddb/create-object-store-options.html
index eacb09d..6709e58 100644
--- a/LayoutTests/storage/indexeddb/create-object-store-options.html
+++ b/LayoutTests/storage/indexeddb/create-object-store-options.html
@@ -47,7 +47,7 @@ function cleaned()
debug("db.createObjectStore('c', {autoIncrement: true});");
db.createObjectStore('c', {autoIncrement: true});
- trans = evalAndLog("trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
shouldBe("trans.mode", "webkitIDBTransaction.READ_WRITE");
req = evalAndLog("trans.objectStore('a').put({'a': 0})");
diff --git a/LayoutTests/storage/indexeddb/cursor-delete-expected.txt b/LayoutTests/storage/indexeddb/cursor-delete-expected.txt
index bed1d0d..525ced7 100644
--- a/LayoutTests/storage/indexeddb/cursor-delete-expected.txt
+++ b/LayoutTests/storage/indexeddb/cursor-delete-expected.txt
@@ -48,7 +48,7 @@ objectStore.add('myValue2', 'myKey2')
objectStore.add('myValue3', 'myKey3')
objectStore.add('myValue4', 'myKey4')
openCursor1
-trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)
trans.objectStore('test').openCursor({range: keyRange})
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -68,7 +68,7 @@ event.result.delete()
PASS event.result.value is "myValue4"
event.result.continue()
PASS counter is 5
-trans.objectStore('test').openCursor({range: keyRange})
+trans.objectStore('test').openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -86,7 +86,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is null
-trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)
objectStore = trans.objectStore('test')
objectStore.add('myValue1', 'myKey1')
PASS 'onsuccess' in result is true
@@ -95,7 +95,7 @@ PASS 'readyState' in result is true
An event should fire shortly...
openCursor2
-objectStore.openCursor({range: keyRange})
+objectStore.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/cursor-delete.html b/LayoutTests/storage/indexeddb/cursor-delete.html
index a3290b9..bb0102f 100644
--- a/LayoutTests/storage/indexeddb/cursor-delete.html
+++ b/LayoutTests/storage/indexeddb/cursor-delete.html
@@ -59,7 +59,7 @@ function createAndPopulateObjectStore()
function openCursor()
{
debug("openCursor1");
- evalAndLog("trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
keyRange = webkitIDBKeyRange.lowerBound("myKey1");
result = evalAndLog("trans.objectStore('test').openCursor({range: keyRange})");
verifyResult(result);
@@ -72,7 +72,7 @@ function cursorSuccess()
{
if (event.result == null) {
shouldBe("counter", "5");
- result = evalAndLog("trans.objectStore('test').openCursor({range: keyRange})");
+ result = evalAndLog("trans.objectStore('test').openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorEmpty;
result.onerror = unexpectedErrorCallback;
@@ -92,7 +92,7 @@ function cursorEmpty()
function addObject()
{
- evalAndLog("trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
objectStore = evalAndLog("objectStore = trans.objectStore('test')");
result = evalAndLog("objectStore.add('myValue1', 'myKey1')");
verifyResult(result);
@@ -103,7 +103,7 @@ function addObject()
function openCursor2()
{
debug("openCursor2");
- result = evalAndLog("objectStore.openCursor({range: keyRange})");
+ result = evalAndLog("objectStore.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = deleteObject;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt b/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt
index 27f3117..a477a25 100644
--- a/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt
+++ b/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt
@@ -49,8 +49,8 @@ objectStore.add({x: 2}, 'myKey2')
objectStore.add({x: 3}, 'myKey3')
objectStore.add({x: 4}, 'myKey4')
openCursor1
-trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})
-trans.objectStore('test').index('testIndex').openCursor({range: keyRange})
+trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)
+trans.objectStore('test').index('testIndex').openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -69,7 +69,7 @@ event.result.delete()
PASS event.result.key is counter++
event.result.continue()
PASS counter is 5
-trans.objectStore('test').index('testIndex').openCursor({range: keyRange})
+trans.objectStore('test').index('testIndex').openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -87,7 +87,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is null
-trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)
objectStore = trans.objectStore('test')
objectStore.add({x: 1}, 'myKey1')
PASS 'onsuccess' in result is true
@@ -97,7 +97,7 @@ An event should fire shortly...
openCursor2
index = event.source.index('testIndex')
-index.openCursor({range: keyRange})
+index.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -128,6 +128,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+event.preventDefault()
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/cursor-index-delete.html b/LayoutTests/storage/indexeddb/cursor-index-delete.html
index 1bddf63..852a7eb 100644
--- a/LayoutTests/storage/indexeddb/cursor-index-delete.html
+++ b/LayoutTests/storage/indexeddb/cursor-index-delete.html
@@ -61,9 +61,9 @@ function createAndPopulateObjectStoreAndIndex()
function openCursor()
{
debug("openCursor1");
- evalAndLog("trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
keyRange = webkitIDBKeyRange.lowerBound(1);
- result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor({range: keyRange})");
+ result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorSuccess;
result.onerror = unexpectedErrorCallback;
@@ -74,7 +74,7 @@ function cursorSuccess()
{
if (event.result == null) {
shouldBe("counter", "5");
- result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor({range: keyRange})");
+ result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorEmpty;
result.onerror = unexpectedErrorCallback;
@@ -95,7 +95,7 @@ function cursorEmpty()
function addObject()
{
- evalAndLog("trans = db.transaction({objectStoreNames: 'test', mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
objectStore = evalAndLog("objectStore = trans.objectStore('test')");
result = evalAndLog("objectStore.add({x: 1}, 'myKey1')");
verifyResult(result);
@@ -107,7 +107,7 @@ function openCursor2()
{
debug("openCursor2");
evalAndLog("index = event.source.index('testIndex')");
- result = evalAndLog("index.openCursor({range: keyRange})");
+ result = evalAndLog("index.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = deleteObject;
result.onerror = unexpectedErrorCallback;
@@ -126,6 +126,7 @@ function deleteObject()
function verifyObjectDeleted()
{
verifyErrorEvent(event);
+ evalAndLog("event.preventDefault()");
done();
}
diff --git a/LayoutTests/storage/indexeddb/cursor-skip-deleted-expected.txt b/LayoutTests/storage/indexeddb/cursor-skip-deleted-expected.txt
new file mode 100644
index 0000000..f1bb3f7
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-skip-deleted-expected.txt
@@ -0,0 +1,185 @@
+Test IndexedDB's cursor skips deleted entries.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+createAndPopulateObjectStore():
+objectStore = db.createObjectStore('store', {keyPath: 'id'})
+objectStore.createIndex('nameIndex', 'name')
+
+resetObjectStore():
+
+basicCursorTest()
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+
+testCursor():
+trans.objectStore('store').openCursor(webkitIDBKeyRange.lowerBound(0))
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+0: Alpha
+1: Bravo
+request = trans.objectStore('store').delete(0)
+2: Charlie
+request = trans.objectStore('store').delete(25)
+3: Delta
+request = trans.objectStore('store').delete(5)
+request = trans.objectStore('store').delete(6)
+request = trans.objectStore('store').delete(7)
+4: Echo
+8: India
+9: Juliet
+10: Kilo
+request = trans.objectStore('store').delete(10)
+11: Lima
+12: Mike
+request = trans.objectStore('store').delete(13)
+14: Oscar
+15: Papa
+request = trans.objectStore('store').delete(14)
+16: Quebec
+17: Romeo
+18: Sierra
+19: Tango
+20: Uniform
+request = trans.objectStore('store').delete(17)
+request = trans.objectStore('store').delete(18)
+21: Victor
+22: Whiskey
+23: X-ray
+24: Yankee
+
+
+resetObjectStore():
+
+reverseCursorTest():
+
+testCursor():
+trans.objectStore('store').openCursor(webkitIDBKeyRange.lowerBound(0), webkitIDBCursor.PREV)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+25: Zulu
+24: Yankee
+request = trans.objectStore('store').delete(25)
+23: X-ray
+request = trans.objectStore('store').delete(0)
+22: Whiskey
+request = trans.objectStore('store').delete(20)
+request = trans.objectStore('store').delete(19)
+request = trans.objectStore('store').delete(18)
+21: Victor
+17: Romeo
+16: Quebec
+15: Papa
+request = trans.objectStore('store').delete(15)
+14: Oscar
+13: November
+request = trans.objectStore('store').delete(12)
+11: Lima
+10: Kilo
+request = trans.objectStore('store').delete(11)
+9: Juliet
+8: India
+7: Hotel
+6: Golf
+5: Foxtrot
+request = trans.objectStore('store').delete(7)
+request = trans.objectStore('store').delete(8)
+4: Echo
+3: Delta
+2: Charlie
+1: Bravo
+
+
+resetObjectStore():
+
+indexCursorTest():
+
+testCursor():
+trans.objectStore('store').index('nameIndex').openCursor(webkitIDBKeyRange.lowerBound('Alpha'))
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+0: Alpha
+1: Bravo
+request = trans.objectStore('store').delete(0)
+2: Charlie
+request = trans.objectStore('store').delete(25)
+3: Delta
+request = trans.objectStore('store').delete(5)
+request = trans.objectStore('store').delete(6)
+request = trans.objectStore('store').delete(7)
+4: Echo
+8: India
+9: Juliet
+10: Kilo
+request = trans.objectStore('store').delete(10)
+11: Lima
+12: Mike
+request = trans.objectStore('store').delete(13)
+14: Oscar
+15: Papa
+request = trans.objectStore('store').delete(14)
+16: Quebec
+17: Romeo
+18: Sierra
+19: Tango
+20: Uniform
+request = trans.objectStore('store').delete(17)
+request = trans.objectStore('store').delete(18)
+21: Victor
+22: Whiskey
+23: X-ray
+24: Yankee
+
+transactionComplete():
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-skip-deleted.html b/LayoutTests/storage/indexeddb/cursor-skip-deleted.html
new file mode 100644
index 0000000..a97c4af
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-skip-deleted.html
@@ -0,0 +1,218 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's cursor skips deleted entries.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+var names = ['Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf',
+ 'Hotel', 'India', 'Juliet', 'Kilo', 'Lima', 'Mike', 'November',
+ 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango', 'Uniform',
+ 'Victor', 'Whiskey', 'X-ray', 'Yankee', 'Zulu'];
+
+test();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ var db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = basicCursorTest;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
+}
+
+function createAndPopulateObjectStore()
+{
+ debug("createAndPopulateObjectStore():");
+
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('store', {keyPath: 'id'})");
+ evalAndLog("objectStore.createIndex('nameIndex', 'name')");
+ resetObjectStore(function() {});
+}
+
+var silentErrorHandler = function() { event.preventDefault(); }
+
+function resetObjectStore(callback)
+{
+ debug("\nresetObjectStore():");
+ if (callback === undefined)
+ callback = function () {};
+
+ var objectStore = trans.objectStore('store');
+ for (var i = 0; i < names.length; i++)
+ objectStore.delete(i).onerror = silentErrorHandler;
+ for (var i = 0; i < names.length; i++)
+ objectStore.add({id: i, name: names[i]}).onerror = unexpectedErrorCallback;
+
+ debug("");
+ callback();
+}
+
+function contains(arr, obj)
+{
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] == obj)
+ return true;
+ }
+ return false;
+}
+
+var cursor;
+var deleted;
+var seen;
+
+function testCursor(deleteList, createCursorCommand, callback)
+{
+ debug("\ntestCursor():");
+ deleted = [];
+ seen = [];
+
+ // Create the cursor.
+ request = evalAndLog(createCursorCommand);
+ verifyResult(request);
+
+ request.onerror = unexpectedErrorCallback;
+ request.onsuccess = function () {
+ if (event.result == null) {
+ // Make sure we have seen every non-deleted item.
+ for (var i = 0; i < names.length; i++) {
+ if (contains(deleted, i))
+ continue;
+
+ if (!contains(seen, i))
+ testFailed("Cursor did not see item with id: " + i);
+ }
+
+ // Make sure we used every rule in |deleteList|.
+ for (var i = 0; i < deleteList.length; i++) {
+ if (!contains(seen, deleteList[i].id))
+ testFailed("deleteList rule with id: " + deleteList[i].id + " was never used.");
+ }
+
+ debug("");
+ callback();
+ return;
+ }
+
+ cursor = event.result;
+ debug(event.result.value.id + ": " + event.result.value.name);
+ seen.push(event.result.value.id);
+
+ // Make sure we don't see any deleted items.
+ if (contains(deleted, event.result.value.id))
+ testFailed("Cursor hit previously deleted element.");
+
+ for (var i = 0; i < deleteList.length; i++) {
+ if (event.result.value.id == deleteList[i].id) {
+ // Delete objects targeted by this id.
+ var targets = deleteList[i].targets;
+ for (var j = 0; j < targets.length; j++) {
+ deleted.push(targets[j]);
+ request = evalAndLog("request = trans.objectStore('store').delete(" + targets[j] + ")");
+ request.onerror = unexpectedErrorCallback;
+ if (j == targets.length - 1)
+ request.onsuccess = function() { cursor.continue(); }
+ }
+ return;
+ }
+ }
+
+ cursor.continue();
+ }
+}
+
+function basicCursorTest()
+{
+ debug("basicCursorTest()");
+
+ evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = transactionComplete;
+
+ var deletes = [{id: 1, targets: [0]},
+ {id: 2, targets: [names.length - 1]},
+ {id: 3, targets: [5,6,7]},
+ {id: 10, targets: [10]},
+ {id: 12, targets: [13]},
+ {id: 15, targets: [14]},
+ {id: 20, targets: [17,18]}
+ ];
+
+ testCursor(deletes, "trans.objectStore('store').openCursor(webkitIDBKeyRange.lowerBound(0))", function() { resetObjectStore(reverseCursorTest); });
+}
+
+function reverseCursorTest()
+{
+ debug("reverseCursorTest():");
+
+ var deletes = [{id: 24, targets: [names.length - 1]},
+ {id: 23, targets: [0]},
+ {id: 22, targets: [20, 19, 18]},
+ {id: 15, targets: [15]},
+ {id: 13, targets: [12]},
+ {id: 10, targets: [11]},
+ {id: 5, targets: [7,8]}
+ ];
+
+
+ testCursor(deletes, "trans.objectStore('store').openCursor(webkitIDBKeyRange.lowerBound(0), webkitIDBCursor.PREV)", function() { resetObjectStore(indexCursorTest); });
+}
+
+function indexCursorTest()
+{
+ debug("indexCursorTest():");
+
+ var deletes = [{id: 1, targets: [0]},
+ {id: 2, targets: [names.length - 1]},
+ {id: 3, targets: [5,6,7]},
+ {id: 10, targets: [10]},
+ {id: 12, targets: [13]},
+ {id: 15, targets: [14]},
+ {id: 20, targets: [17,18]}
+ ];
+
+ testCursor(deletes, "trans.objectStore('store').index('nameIndex').openCursor(webkitIDBKeyRange.lowerBound('Alpha'))", function() { });
+}
+
+function transactionComplete()
+{
+ debug("transactionComplete():");
+ done();
+}
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/cursor-update-expected.txt b/LayoutTests/storage/indexeddb/cursor-update-expected.txt
new file mode 100644
index 0000000..4f2e659
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-update-expected.txt
@@ -0,0 +1,283 @@
+Test IndexedDB's cursor update.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+createAndPopulateObjectStore():
+objectStore = db.createObjectStore('basicStore')
+objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback
+objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback
+objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback
+objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback
+objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})
+objectStore.add('foo1').onerror = unexpectedErrorCallback
+objectStore.add('foo2').onerror = unexpectedErrorCallback
+objectStore.add('foo3').onerror = unexpectedErrorCallback
+objectStore.add('foo4').onerror = unexpectedErrorCallback
+objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})
+objectStore.createIndex('numberIndex', 'number')
+objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback
+objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback
+objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback
+objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback
+openBasicCursor()
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.objectStore('basicStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+basicUpdateCursor()
+event.result.update('myUpdatedValue' + counter++)
+event.source.continue()
+basicUpdateCursor()
+event.result.update('myUpdatedValue' + counter++)
+event.source.continue()
+basicUpdateCursor()
+event.result.update('myUpdatedValue' + counter++)
+event.source.continue()
+basicUpdateCursor()
+event.result.update('myUpdatedValue' + counter++)
+event.source.continue()
+basicUpdateCursor()
+PASS counter is 5
+trans.objectStore('basicStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+basicCheckCursor()
+PASS event.result.key is "myKey1"
+PASS event.result.value is "myUpdatedValue1"
+event.result.continue()
+basicCheckCursor()
+PASS event.result.key is "myKey2"
+PASS event.result.value is "myUpdatedValue2"
+event.result.continue()
+basicCheckCursor()
+PASS event.result.key is "myKey3"
+PASS event.result.value is "myUpdatedValue3"
+event.result.continue()
+basicCheckCursor()
+PASS event.result.key is "myKey4"
+PASS event.result.value is "myUpdatedValue4"
+event.result.continue()
+basicCheckCursor()
+PASS counter is 5
+trans.objectStore('autoIncrementStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+autoIncrementUpdateCursor()
+event.result.update('myUpdatedFoo' + counter++)
+event.source.continue()
+autoIncrementUpdateCursor()
+event.result.update('myUpdatedFoo' + counter++)
+event.source.continue()
+autoIncrementUpdateCursor()
+event.result.update('myUpdatedFoo' + counter++)
+event.source.continue()
+autoIncrementUpdateCursor()
+event.result.update('myUpdatedFoo' + counter++)
+event.source.continue()
+autoIncrementUpdateCursor()
+PASS counter is 5
+trans.objectStore('autoIncrementStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+autoIncrementCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value is "myUpdatedFoo1"
+event.result.continue()
+autoIncrementCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value is "myUpdatedFoo2"
+event.result.continue()
+autoIncrementCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value is "myUpdatedFoo3"
+event.result.continue()
+autoIncrementCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value is "myUpdatedFoo4"
+event.result.continue()
+autoIncrementCheckCursor()
+PASS counter is 5
+trans.objectStore('keyPathStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+keyPathUpdateCursor()
+event.result.update({id: 100 + counter, number: 100 + counter})
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.code is webkitIDBDatabaseException.DATA_ERR
+event.preventDefault()
+event.source.update({id: counter, number: 100 + counter++})
+event.source.continue()
+keyPathUpdateCursor()
+event.result.update({id: 100 + counter, number: 100 + counter})
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.code is webkitIDBDatabaseException.DATA_ERR
+event.preventDefault()
+event.source.update({id: counter, number: 100 + counter++})
+event.source.continue()
+keyPathUpdateCursor()
+event.result.update({id: 100 + counter, number: 100 + counter})
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.code is webkitIDBDatabaseException.DATA_ERR
+event.preventDefault()
+event.source.update({id: counter, number: 100 + counter++})
+event.source.continue()
+keyPathUpdateCursor()
+event.result.update({id: 100 + counter, number: 100 + counter})
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.code is webkitIDBDatabaseException.DATA_ERR
+event.preventDefault()
+event.source.update({id: counter, number: 100 + counter++})
+event.source.continue()
+keyPathUpdateCursor()
+PASS counter is 5
+trans.objectStore('keyPathStore').openCursor(keyRange)
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+keyPathCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value.id is counter
+PASS event.result.value.number is 101
+event.result.continue()
+keyPathCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value.id is counter
+PASS event.result.value.number is 102
+event.result.continue()
+keyPathCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value.id is counter
+PASS event.result.value.number is 103
+event.result.continue()
+keyPathCheckCursor()
+PASS event.result.key is counter
+PASS event.result.value.id is counter
+PASS event.result.value.number is 104
+event.result.continue()
+keyPathCheckCursor()
+PASS counter is 5
+trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)
+keyCursor()
+PASS event.result.key is counter + 100
+PASS event.result.value is counter
+event.result.update({id: counter, number: counter + 200})
+PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
+keyCursor()
+PASS event.result.key is counter + 100
+PASS event.result.value is counter
+event.result.update({id: counter, number: counter + 200})
+PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
+keyCursor()
+PASS event.result.key is counter + 100
+PASS event.result.value is counter
+event.result.update({id: counter, number: counter + 200})
+PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
+keyCursor()
+PASS event.result.key is counter + 100
+PASS event.result.value is counter
+event.result.update({id: counter, number: counter + 200})
+PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
+keyCursor()
+PASS counter is 5
+transactionComplete()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-update.html b/LayoutTests/storage/indexeddb/cursor-update.html
new file mode 100644
index 0000000..0a80b84
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-update.html
@@ -0,0 +1,249 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's cursor update.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+test();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ var db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = openBasicCursor;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
+}
+
+function createAndPopulateObjectStore()
+{
+ debug("createAndPopulateObjectStore():");
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('basicStore')");
+ evalAndLog("objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback");
+
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})");
+ evalAndLog("objectStore.add('foo1').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo2').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo3').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo4').onerror = unexpectedErrorCallback");
+
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})");
+ evalAndLog("objectStore.createIndex('numberIndex', 'number')");
+ evalAndLog("objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback");
+}
+
+function openBasicCursor()
+{
+ debug("openBasicCursor()");
+ evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = transactionComplete;
+
+ keyRange = webkitIDBKeyRange.lowerBound("myKey1");
+ result = evalAndLog("trans.objectStore('basicStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = basicUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ counter = 1;
+}
+
+function basicUpdateCursor()
+{
+ debug("basicUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('basicStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = basicCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update('myUpdatedValue' + counter++)");
+ result.onsuccess = function() { evalAndLog("event.source.continue()"); }
+ result.onerror = unexpectedErrorCallback;
+}
+
+function basicCheckCursor()
+{
+ debug("basicCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(1);
+ result = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = autoIncrementUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBeEqualToString("event.result.key", "myKey" + counter);
+ shouldBeEqualToString("event.result.value", "myUpdatedValue" + counter++);
+ evalAndLog("event.result.continue()");
+}
+
+function autoIncrementUpdateCursor()
+{
+ debug("autoIncrementUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = autoIncrementCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update('myUpdatedFoo' + counter++)");
+ result.onsuccess = function() { evalAndLog("event.source.continue()"); }
+ result.onerror = unexpectedErrorCallback;
+}
+
+function autoIncrementCheckCursor()
+{
+ debug("autoIncrementCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(1);
+ result = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = keyPathUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBe("event.result.key", "counter");
+ shouldBeEqualToString("event.result.value", "myUpdatedFoo" + counter++);
+ evalAndLog("event.result.continue()");
+}
+
+function keyPathUpdateCursor()
+{
+ debug("keyPathUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = keyPathCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update({id: 100 + counter, number: 100 + counter})");
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = function() {
+ verifyErrorEvent(event);
+ shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
+
+ evalAndLog("event.preventDefault()");
+
+ result = evalAndLog("event.source.update({id: counter, number: 100 + counter++})");
+ result.onsuccess = function() { evalAndLog("event.source.continue()") };
+ result.onerror = unexpectedErrorCallback;
+ }
+}
+
+function keyPathCheckCursor()
+{
+ debug("keyPathCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(101);
+ result = evalAndLog("trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)");
+ result.onsuccess = keyCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBe("event.result.key", "counter");
+ shouldBe("event.result.value.id", "counter");
+ shouldBe("event.result.value.number", (counter + 100).toString());
+ counter++;
+ evalAndLog("event.result.continue()");
+}
+
+function keyCursor()
+{
+ debug("keyCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ return;
+ }
+
+ shouldBe("event.result.key", "counter + 100");
+ shouldBe("event.result.value", "counter");
+
+ try {
+ debug("event.result.update({id: counter, number: counter + 200})");
+ event.result.update({id: counter, number: counter + 200});
+ testFailed("Expected exception.");
+ } catch (e) {
+ code = e.code;
+ shouldBe("code", "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
+ }
+
+ counter++;
+ event.result.continue();
+}
+
+function transactionComplete()
+{
+ debug("transactionComplete()");
+ done();
+}
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/data-corruption-expected.txt b/LayoutTests/storage/indexeddb/data-corruption-expected.txt
new file mode 100644
index 0000000..ac7116a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/data-corruption-expected.txt
@@ -0,0 +1,69 @@
+Test that data inserted into IndexedDB does not get corrupted on disk.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+openSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+createObjectStore():
+db.createObjectStore('storeName')
+addData():
+transaction = db.transaction([], webkitIDBTransaction.READ_WRITE)
+result = transaction.objectStore('storeName').add({x: testDate}, 'key')
+addData():
+transaction = db.transaction([], webkitIDBTransaction.READ_ONLY)
+result = transaction.objectStore('storeName').get('key')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result.x.toString() == testDate.toString() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/data-corruption.html b/LayoutTests/storage/indexeddb/data-corruption.html
new file mode 100644
index 0000000..664ff6d
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/data-corruption.html
@@ -0,0 +1,88 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test that data inserted into IndexedDB does not get corrupted on disk.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ debug("openSuccess():");
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = addData;
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ debug("createObjectStore():");
+ evalAndLog("db.createObjectStore('storeName')");
+}
+
+var testDate = new Date('February 24, 1955 12:00:08');
+
+function addData()
+{
+ debug("addData():");
+ var transaction = evalAndLog("transaction = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ var result = evalAndLog("result = transaction.objectStore('storeName').add({x: testDate}, 'key')");
+ result.onerror = unexpectedErrorCallback;
+ transaction.oncomplete = getData;
+}
+
+function getData()
+{
+ debug("addData():");
+ var transaction = evalAndLog("transaction = db.transaction([], webkitIDBTransaction.READ_ONLY)");
+ var result = evalAndLog("result = transaction.objectStore('storeName').get('key')");
+ result.onerror = unexpectedErrorCallback;
+ result.onsuccess = doCheck;
+}
+
+function doCheck()
+{
+ verifySuccessEvent(event);
+ shouldBeTrue("event.result.x.toString() == testDate.toString()");
+ done();
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/database-quota-expected.txt b/LayoutTests/storage/indexeddb/database-quota-expected.txt
index 0f06145..876d412 100644
--- a/LayoutTests/storage/indexeddb/database-quota-expected.txt
+++ b/LayoutTests/storage/indexeddb/database-quota-expected.txt
@@ -64,7 +64,7 @@ PASS db.objectStoreNames.length is 1
PASS db.objectStoreNames.contains('') is false
PASS db.objectStoreNames.contains('test456') is false
PASS db.objectStoreNames.contains('test123') is true
-trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
Creating 'data' which contains 64K of data
PASS data.length is 65536
store = trans.objectStore('test123')
@@ -80,6 +80,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+event.preventDefault()
PASS Adding data failed due to quota error. Data added was about 5 MB
PASS successfullyParsed is true
diff --git a/LayoutTests/storage/indexeddb/database-quota.html b/LayoutTests/storage/indexeddb/database-quota.html
index d21b051..b447505 100644
--- a/LayoutTests/storage/indexeddb/database-quota.html
+++ b/LayoutTests/storage/indexeddb/database-quota.html
@@ -74,7 +74,7 @@ function commitAndContinue()
function checkQuotaEnforcing()
{
- var trans = evalAndLog("trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ var trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
trans.onabort = testComplete;
trans.oncomplete = unexpectedCompleteCallback;
debug("Creating 'data' which contains 64K of data");
@@ -107,6 +107,7 @@ function logError()
{
debug("Error function called: (" + event.code + ") " + event.message);
verifyErrorEvent(event);
+ evalAndLog("event.preventDefault()");
}
function testComplete()
diff --git a/LayoutTests/storage/indexeddb/duplicates-expected.txt b/LayoutTests/storage/indexeddb/duplicates-expected.txt
index 8de488c..551b0bb 100644
--- a/LayoutTests/storage/indexeddb/duplicates-expected.txt
+++ b/LayoutTests/storage/indexeddb/duplicates-expected.txt
@@ -133,6 +133,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.get('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -151,6 +152,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.openKeyCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -399,6 +401,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.get('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -417,6 +420,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.openKeyCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/duplicates.html b/LayoutTests/storage/indexeddb/duplicates.html
index 352367f..cdfdcaa 100644
--- a/LayoutTests/storage/indexeddb/duplicates.html
+++ b/LayoutTests/storage/indexeddb/duplicates.html
@@ -111,6 +111,8 @@ function getObjectDataFail()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndLog("event.preventDefault()");
+
result = evalAndLog("indexObject.get('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
@@ -122,6 +124,8 @@ function openKeyCursor()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndLog("event.preventDefault()");
+
window.result = evalAndLog("indexObject.openKeyCursor()");
verifyResult(result);
result.onsuccess = cursor1Continue;
diff --git a/LayoutTests/storage/indexeddb/error-causes-abort-by-default-expected.txt b/LayoutTests/storage/indexeddb/error-causes-abort-by-default-expected.txt
new file mode 100644
index 0000000..dd8fd61
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/error-causes-abort-by-default-expected.txt
@@ -0,0 +1,107 @@
+Verify that a transaction with an error aborts unless preventDefault() is called.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+trans.oncomplete = addData
+Deleted all object stores.
+db.createObjectStore('storeName', null)
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = unexpectedAbortCallback
+trans.oncomplete = transactionCompleted
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+event.source.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+event.preventDefault()
+PASS Transaction completed
+
+
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = transactionAborted1
+trans.oncomplete = unexpectedCompleteCallback
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Doing nothing to prevent the default action...
+PASS Transaction aborted
+
+
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = transactionAborted2
+trans.oncomplete = unexpectedCompleteCallback
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Omitting an onerror handler
+PASS Transaction aborted
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/error-causes-abort-by-default.html b/LayoutTests/storage/indexeddb/error-causes-abort-by-default.html
new file mode 100644
index 0000000..ab4c58a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/error-causes-abort-by-default.html
@@ -0,0 +1,127 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Verify that a transaction with an error aborts unless preventDefault() is called.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ evalAndLog("trans.oncomplete = addData");
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ evalAndLog("db.createObjectStore('storeName', null)");
+}
+
+function addData()
+{
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = unexpectedAbortCallback");
+ evalAndLog("trans.oncomplete = transactionCompleted");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = addMore;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function addMore()
+{
+ verifySuccessEvent(event);
+
+ result = evalAndLog("event.source.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = unexpectedSuccessCallback;
+ result.addEventListener("error", preventTheDefault);
+}
+
+function preventTheDefault()
+{
+ evalAndLog("event.preventDefault()");
+}
+
+function transactionCompleted()
+{
+ testPassed("Transaction completed");
+ debug("");
+ debug("");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = transactionAborted1");
+ evalAndLog("trans.oncomplete = unexpectedCompleteCallback");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = allowDefault;
+}
+
+function allowDefault()
+{
+ debug("Doing nothing to prevent the default action...");
+}
+
+function transactionAborted1()
+{
+ testPassed("Transaction aborted");
+ debug("");
+ debug("");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = transactionAborted2");
+ evalAndLog("trans.oncomplete = unexpectedCompleteCallback");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = unexpectedSuccessCallback;
+ debug("Omitting an onerror handler");
+}
+
+function transactionAborted2()
+{
+ testPassed("Transaction aborted");
+ done();
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/index-basics-expected.txt b/LayoutTests/storage/indexeddb/index-basics-expected.txt
index 099dde3..d18a09a 100644
--- a/LayoutTests/storage/indexeddb/index-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/index-basics-expected.txt
@@ -183,6 +183,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.get('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -201,6 +202,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+event.preventDefault()
indexObject.openKeyCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/index-basics.html b/LayoutTests/storage/indexeddb/index-basics.html
index d5eec0a..863566a 100644
--- a/LayoutTests/storage/indexeddb/index-basics.html
+++ b/LayoutTests/storage/indexeddb/index-basics.html
@@ -144,6 +144,8 @@ function getObjectDataFail()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndLog("event.preventDefault()");
+
result = evalAndLog("indexObject.get('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
@@ -155,6 +157,8 @@ function openKeyCursor()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndLog("event.preventDefault()");
+
window.result = evalAndLog("indexObject.openKeyCursor()");
verifyResult(result);
result.onsuccess = cursor1Continue;
diff --git a/LayoutTests/storage/indexeddb/index-cursor.html b/LayoutTests/storage/indexeddb/index-cursor.html
index 1a04d57..97985a4 100644
--- a/LayoutTests/storage/indexeddb/index-cursor.html
+++ b/LayoutTests/storage/indexeddb/index-cursor.html
@@ -187,7 +187,7 @@ function runNextTest()
else
keyRange = webkitIDBKeyRange.upperBound(testData[upper], upperIsOpen);
- var request = indexObject.openKeyCursor({range: keyRange, direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
+ var request = indexObject.openKeyCursor(keyRange, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
@@ -254,7 +254,7 @@ function testNullKeyRange()
debug("");
debug(str);
- var request = indexObject.openKeyCursor({direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
+ var request = indexObject.openKeyCursor(null, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
diff --git a/LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt b/LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
index 8e36c96..5ba278b 100644
--- a/LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
@@ -55,15 +55,15 @@ PASS storeNames.contains('StoreWithAutoIncrement') is true
PASS storeNames.contains('PlainOldStore') is true
PASS storeNames.length is 3
setVersionCompleted():
-trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
store = trans.objectStore('StoreWithKeyPath')
-Insert in object store with key gen and key path
-store.add({name: 'Lincoln', number: '7012'})
-addLincolnError():
-Error event fired:
-PASS 'result' in event is false
-PASS 'code' in event is true
-PASS 'message' in event is true
+Insert into object store with auto increment and key path, with key in the object.
+store.add({name: 'Jeffersson', number: '7010', id: 3})
+addJefferssonSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
PASS 'source' in event is true
PASS event.source != null is true
PASS 'onsuccess' in event.target is true
@@ -71,11 +71,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is webkitIDBDatabaseException.UNKNOWN_ERR
-store = trans.objectStore('StoreWithAutoIncrement')
-Insert into object store with key gen using explicit key
-store.add({name: 'Lincoln'}, 1)
-addWithExplicitKeyError():
+PASS event.result is 3
+Insert into object store with auto increment and key path, without key in the object.
+store.add({name: 'Lincoln', number: '7012'})
+addLincolnError():
Error event fired:
PASS 'result' in event is false
PASS 'code' in event is true
@@ -87,9 +86,11 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is webkitIDBDatabaseException.DATA_ERR
-Insert into object store with key gen and no key path
-store.add({name: 'Lincoln', number: '7012'})
+PASS event.code is webkitIDBDatabaseException.UNKNOWN_ERR
+event.preventDefault()
+store = trans.objectStore('StoreWithAutoIncrement')
+Insert into object store with key gen using explicit key
+store.add({name: 'Lincoln', number: '7012'}, 5)
addLincolnSuccess():
Success event fired:
PASS 'result' in event is true
@@ -102,8 +103,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result is 1
-store.get(1)
+PASS event.result is 5
+store.get(5)
getLincolnSuccess():
Success event fired:
PASS 'result' in event is true
@@ -131,8 +132,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result is 2
-store.get(2)
+PASS event.result is 6
+store.get(6)
getAbrahamSuccess():
Success event fired:
PASS 'result' in event is true
@@ -163,6 +164,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.DATA_ERR
+event.preventDefault()
store.add({name: 'Adam'}, 1)
addAdamSuccess():
Success event fired:
diff --git a/LayoutTests/storage/indexeddb/objectstore-autoincrement.html b/LayoutTests/storage/indexeddb/objectstore-autoincrement.html
index 2b44a7a..0c0e9f5 100644
--- a/LayoutTests/storage/indexeddb/objectstore-autoincrement.html
+++ b/LayoutTests/storage/indexeddb/objectstore-autoincrement.html
@@ -68,13 +68,25 @@ function setVersionCompleted()
{
debug("setVersionCompleted():");
- window.trans = evalAndLog("trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ window.trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
trans.onabort = unexpectedAbortCallback;
trans.oncomplete = done;
window.store = evalAndLog("store = trans.objectStore('StoreWithKeyPath')");
- debug("Insert in object store with key gen and key path");
+ debug("Insert into object store with auto increment and key path, with key in the object.");
+ result = evalAndLog("store.add({name: 'Jeffersson', number: '7010', id: 3})");
+ result.onsuccess = addJefferssonSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function addJefferssonSuccess()
+{
+ debug("addJefferssonSuccess():");
+ verifySuccessEvent(event);
+ shouldBe("event.result", "3");
+
+ debug("Insert into object store with auto increment and key path, without key in the object.");
result = evalAndLog("store.add({name: 'Lincoln', number: '7012'})");
result.onsuccess = unexpectedSuccessCallback;
result.onerror = addLincolnError;
@@ -87,32 +99,21 @@ function addLincolnError()
// FIXME: This should be implemented, but we make it an error for now.
shouldBe("event.code", "webkitIDBDatabaseException.UNKNOWN_ERR");
+ evalAndLog("event.preventDefault()");
+
window.store = evalAndLog("store = trans.objectStore('StoreWithAutoIncrement')");
debug("Insert into object store with key gen using explicit key");
- result = evalAndLog("store.add({name: 'Lincoln'}, 1)");
- result.onsuccess = unexpectedSuccessCallback;
- result.onerror = addWithExplicitKeyError;
-}
-
-function addWithExplicitKeyError()
-{
- debug("addWithExplicitKeyError():");
- verifyErrorEvent(event);
- shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
-
- debug("Insert into object store with key gen and no key path");
- result = evalAndLog("store.add({name: 'Lincoln', number: '7012'})");
+ result = evalAndLog("store.add({name: 'Lincoln', number: '7012'}, 5)");
result.onsuccess = addLincolnSuccess;
- result.onerror = unexpectedErrorCallback;
}
function addLincolnSuccess()
{
debug("addLincolnSuccess():");
verifySuccessEvent(event);
- shouldBe("event.result", "1");
+ shouldBe("event.result", "5");
- result = evalAndLog("store.get(1)");
+ result = evalAndLog("store.get(5)");
result.onsuccess = getLincolnSuccess;
result.onerror = unexpectedErrorCallback;
}
@@ -133,9 +134,9 @@ function putAbrahamSuccess()
{
debug("putAbrahamSuccess():");
verifySuccessEvent(event);
- shouldBe("event.result", "2");
+ shouldBe("event.result", "6");
- result = evalAndLog("store.get(2)");
+ result = evalAndLog("store.get(6)");
result.onsuccess = getAbrahamSuccess;
result.onerror = unexpectedErrorCallback;
}
@@ -160,6 +161,8 @@ function addAdamError()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
+ evalAndLog("event.preventDefault()");
+
result = evalAndLog("store.add({name: 'Adam'}, 1)");
result.onsuccess = addAdamSuccess;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
index b842dcc..cfbdbbf 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
@@ -95,7 +95,7 @@ PASS store.indexNames[1] is null
PASS store.indexNames[100] is null
PASS store.indexNames.item(1) is null
PASS store.indexNames.item(100) is null
-transaction = db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+transaction = db.transaction([], webkitIDBTransaction.READ_WRITE)
store = transaction.objectStore('storeName')
Try to insert data with a Date key:
store.add({x: 'foo'}, testDate)
@@ -137,7 +137,8 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.UNKNOWN_ERR
-db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+event.preventDefault()
+db.transaction([], webkitIDBTransaction.READ_WRITE)
store = transaction.objectStore('storeName')
store.add({x: 'othervalue'}, null)
PASS 'onsuccess' in result is true
@@ -158,7 +159,8 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.DATA_ERR
-db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+event.preventDefault()
+db.transaction([], webkitIDBTransaction.READ_WRITE)
store = transaction.objectStore('storeName')
store.add({x: null}, 'validkey')
PASS 'onsuccess' in result is true
@@ -179,7 +181,8 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.code is webkitIDBDatabaseException.DATA_ERR
-db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+event.preventDefault()
+db.transaction([], webkitIDBTransaction.READ_WRITE)
store = transaction.objectStore('storeName')
store.get('key')
PASS 'onsuccess' in result is true
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html
index d388aa0..46b771e 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics.html
+++ b/LayoutTests/storage/indexeddb/objectstore-basics.html
@@ -141,7 +141,7 @@ var testDateB = new Date("Wed Jan 05 2011 15:54:49");
function addData()
{
- var transaction = evalAndLog("transaction = db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ var transaction = evalAndLog("transaction = db.transaction([], webkitIDBTransaction.READ_WRITE)");
transaction.onabort = unexpectedAbortCallback;
window.store = evalAndLog("store = transaction.objectStore('storeName')");
@@ -179,7 +179,7 @@ function addSuccess()
result = evalAndLog("event.source.add({x: 'foo'}, 'zzz')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
- result.onerror = addAgainFailure;
+ result.addEventListener('error', addAgainFailure, false);
}
function addAgainFailure()
@@ -189,14 +189,16 @@ function addAgainFailure()
// FIXME: This error code needs to be specced.
shouldBe("event.code", "webkitIDBDatabaseException.UNKNOWN_ERR");
- transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("event.preventDefault()");
+
+ transaction = evalAndLog("db.transaction([], webkitIDBTransaction.READ_WRITE)");
transaction.onabort = unexpectedErrorCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
result = evalAndLog("store.add({x: 'othervalue'}, null)");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
- result.onerror = addWithNullKeyFailure;
+ result.addEventListener('error', addWithNullKeyFailure, true);
}
function addWithNullKeyFailure()
@@ -205,7 +207,9 @@ function addWithNullKeyFailure()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
- transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("event.preventDefault()");
+
+ transaction = evalAndLog("db.transaction([], webkitIDBTransaction.READ_WRITE)");
transaction.onabort = unexpectedErrorCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
@@ -221,13 +225,15 @@ function addWithNullIndexFailure()
verifyErrorEvent(event);
shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
- transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ evalAndLog("event.preventDefault()");
+
+ transaction = evalAndLog("db.transaction([], webkitIDBTransaction.READ_WRITE)");
transaction.onabort = unexpectedErrorCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
result = evalAndLog("store.get('key')");
verifyResult(result);
- result.onsuccess = getSuccess;
+ result.addEventListener('success', getSuccess, true);
result.onerror = unexpectedErrorCallback;
}
@@ -239,7 +245,7 @@ function getSuccess()
var store = evalAndLog("store = event.source");
result = evalAndLog("store.get(testDate)");
- result.onsuccess = getSuccessDateKey;
+ result.addEventListener('success', getSuccessDateKey, false);
result.onerror = unexpectedErrorCallback;
}
diff --git a/LayoutTests/storage/indexeddb/objectstore-clear-expected.txt b/LayoutTests/storage/indexeddb/objectstore-clear-expected.txt
new file mode 100644
index 0000000..5d99fcb
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/objectstore-clear-expected.txt
@@ -0,0 +1,151 @@
+Test IndexedDB's webkitIDBObjectStore.clear().
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+store = db.createObjectStore('storeName', null)
+store.createIndex('indexName', '')
+PASS store.indexNames.contains('indexName') is true
+store.add('value', 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+otherStore = db.createObjectStore('otherStoreName', null)
+otherStore.add('value', 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store.clear()
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is undefined.
+store.openCursor()
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is null
+index = store.index('indexName')
+index.openKeyCursor()
+openKeyCursorSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is null
+db.transaction({mode: webkitIDBTransaction.READ_WRITE})
+otherStore = transaction.objectStore('otherStoreName')
+otherStore.get('key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is "value"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/objectstore-clear.html b/LayoutTests/storage/indexeddb/objectstore-clear.html
new file mode 100644
index 0000000..7f4034f
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/objectstore-clear.html
@@ -0,0 +1,130 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's webkitIDBObjectStore.clear().");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = startSetVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function startSetVersion()
+{
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+
+ deleteAllObjectStores(db, createObjectStoreAndAddValue);
+}
+
+function createObjectStoreAndAddValue()
+{
+ store = evalAndLog("store = db.createObjectStore('storeName', null)");
+
+ window.index = evalAndLog("store.createIndex('indexName', '')");
+ shouldBeTrue("store.indexNames.contains('indexName')");
+
+ result = evalAndLog("store.add('value', 'key')");
+ verifyResult(result);
+ result.onsuccess = createSecondObjectStoreAndAddValue;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function createSecondObjectStoreAndAddValue()
+{
+ verifySuccessEvent(event);
+
+ otherStore = evalAndLog("otherStore = db.createObjectStore('otherStoreName', null)");
+
+ result = evalAndLog("otherStore.add('value', 'key')");
+ verifyResult(result);
+ result.onsuccess = clearObjectStore;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function clearObjectStore()
+{
+ verifySuccessEvent(event);
+
+ result = evalAndLog("store.clear()");
+ verifyResult(result);
+ result.onsuccess = clearSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function clearSuccess()
+{
+ verifySuccessEvent(event);
+ shouldBeUndefined("event.result");
+
+ result = evalAndLog("store.openCursor()");
+ result.onsuccess = openCursorSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openCursorSuccess()
+{
+ verifySuccessEvent(event);
+ shouldBeNull("event.result");
+
+ index = evalAndLog("index = store.index('indexName')");
+ result = evalAndLog("index.openKeyCursor()");
+ result.onsuccess = openKeyCursorSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openKeyCursorSuccess()
+{
+ debug("openKeyCursorSuccess():");
+ verifySuccessEvent(event);
+ shouldBeNull("event.result");
+
+ transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
+ transaction.onabort = unexpectedErrorCallback;
+ var otherStore = evalAndLog("otherStore = transaction.objectStore('otherStoreName')");
+
+ result = evalAndLog("otherStore.get('key')");
+ verifyResult(result);
+ result.onsuccess = getSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function getSuccess()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result", "value");
+
+ done();
+}
+
+test();
+
+var successfullyParsed = true;
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor.html b/LayoutTests/storage/indexeddb/objectstore-cursor.html
index e0db08f..bb7b65b 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor.html
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor.html
@@ -165,7 +165,7 @@ function runNextTest()
else
keyRange = webkitIDBKeyRange.upperBound(testData[upper], upperIsOpen);
- var request = objectStore.openCursor({range: keyRange, direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
+ var request = objectStore.openCursor(keyRange, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
@@ -231,7 +231,7 @@ function testNullKeyRange()
debug("");
debug(str);
- var request = objectStore.openCursor({direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
+ var request = objectStore.openCursor(null, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
diff --git a/LayoutTests/storage/indexeddb/open-cursor-expected.txt b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
index d40436c..ddaa51a 100644
--- a/LayoutTests/storage/indexeddb/open-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
@@ -50,7 +50,7 @@ PASS 'readyState' in result is true
An event should fire shortly...
Opening cursor
-event.source.openCursor({range: keyRange})
+event.source.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -76,7 +76,7 @@ Passing an invalid key into .continue().
PASS Caught exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
Opening an empty cursor.
-objectStore.openCursor({range: keyRange})
+objectStore.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/open-cursor.html b/LayoutTests/storage/indexeddb/open-cursor.html
index e4dc8f0..17ed9ab 100644
--- a/LayoutTests/storage/indexeddb/open-cursor.html
+++ b/LayoutTests/storage/indexeddb/open-cursor.html
@@ -26,7 +26,7 @@ function openEmptyCursor()
{
debug("Opening an empty cursor.");
keyRange = webkitIDBKeyRange.lowerBound("InexistentKey");
- result = evalAndLog("objectStore.openCursor({range: keyRange})");
+ result = evalAndLog("objectStore.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = emptyCursorSuccess;
result.onerror = unexpectedErrorCallback;
@@ -56,7 +56,7 @@ function openCursor()
{
debug("Opening cursor");
keyRange = webkitIDBKeyRange.lowerBound("myKey");
- result = evalAndLog("event.source.openCursor({range: keyRange})");
+ result = evalAndLog("event.source.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorSuccess;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/request-event-propagation-expected.txt b/LayoutTests/storage/indexeddb/request-event-propagation-expected.txt
new file mode 100644
index 0000000..deda6a7
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/request-event-propagation-expected.txt
@@ -0,0 +1,166 @@
+Test event propogation on IDBRequest.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+trans.oncomplete = startTest
+Deleted all object stores.
+store = db.createObjectStore('storeName', null)
+store.add({x: 'value', y: 'zzz'}, 'key')
+Verify that handler fires and that not preventing default will result in an abort
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = transactionAborted
+trans.oncomplete = unexpectedCompleteCallback
+trans.onerror = allowDefault
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS Event handler fired
+Doing nothing to prevent the default action...
+PASS handlerFired is true
+
+Verifing error
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = transactionAborted2
+trans.oncomplete = unexpectedAbortCallback
+trans.addEventListener('error', errorCaptureCallback, true)
+trans.addEventListener('error', errorBubbleCallback, false)
+trans.addEventListener('success', unexpectedSuccessCallback, true)
+trans.addEventListener('success', unexpectedSuccessCallback, false)
+db.addEventListener('error', dbErrorCaptureCallback, true)
+db.addEventListener('error', dbErrorBubbleCallback, false)
+db.addEventListener('success', unexpectedSuccessCallback, true)
+db.addEventListener('success', unexpectedSuccessCallback, false)
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+
+In IDBDatabase error capture
+PASS dbCaptureFired is false
+PASS captureFired is false
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBTransaction error capture
+PASS dbCaptureFired is true
+PASS captureFired is false
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBRequest handler
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBTransaction error bubble
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is true
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBDatabase error bubble
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is true
+PASS bubbleFired is true
+PASS dbBubbleFired is false
+
+Transaction aborted
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is true
+PASS bubbleFired is true
+PASS dbBubbleFired is true
+
+Verifing success.
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.oncomplete = transactionComplete
+trans.onabort = unexpectedAbortCallback
+trans.addEventListener('success', successCaptureCallback, true)
+trans.addEventListener('success', successBubbleCallback, false)
+trans.addEventListener('error', unexpectedErrorCallback, true)
+trans.addEventListener('error', unexpectedErrorCallback, false)
+db.removeEventListener('error', dbErrorCaptureCallback, true)
+db.removeEventListener('error', dbErrorBubbleCallback, false)
+db.removeEventListener('success', unexpectedSuccessCallback, true)
+db.removeEventListener('success', unexpectedSuccessCallback, false)
+db.addEventListener('success', dbSuccessCaptureCallback, true)
+db.addEventListener('success', dbSuccessBubbleCallback, false)
+db.addEventListener('error', unexpectedErrorCallback, true)
+db.addEventListener('error', unexpectedErrorCallback, false)
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key2')
+
+In IDBDatabase success capture
+PASS dbCaptureFired is false
+PASS captureFired is false
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBTransaction success capture
+PASS dbCaptureFired is true
+PASS captureFired is false
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+In IDBRequest handler
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is false
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+Transaction completed
+PASS dbCaptureFired is true
+PASS captureFired is true
+PASS requestFired is true
+PASS bubbleFired is false
+PASS dbBubbleFired is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/request-event-propagation.html b/LayoutTests/storage/indexeddb/request-event-propagation.html
new file mode 100644
index 0000000..87f6a2d
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/request-event-propagation.html
@@ -0,0 +1,272 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test event propogation on IDBRequest.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ evalAndLog("trans.oncomplete = startTest");
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ store = evalAndLog("store = db.createObjectStore('storeName', null)");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ result.onerror = unexpectedErrorCallback;
+}
+
+function startTest()
+{
+ debug("Verify that handler fires and that not preventing default will result in an abort");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = transactionAborted");
+ evalAndLog("trans.oncomplete = unexpectedCompleteCallback");
+ evalAndLog("trans.onerror = allowDefault");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ result.onsuccess = unexpectedSuccessCallback;
+ handlerFired = false;
+}
+
+function allowDefault()
+{
+ testPassed("Event handler fired");
+ debug("Doing nothing to prevent the default action...");
+ handlerFired = true;
+}
+
+function transactionAborted()
+{
+ shouldBeTrue("handlerFired");
+ debug("");
+ debug("Verifing error");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = transactionAborted2");
+ evalAndLog("trans.oncomplete = unexpectedAbortCallback");
+ evalAndLog("trans.addEventListener('error', errorCaptureCallback, true)");
+ evalAndLog("trans.addEventListener('error', errorBubbleCallback, false)");
+ evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, true)");
+ evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, false)");
+ evalAndLog("db.addEventListener('error', dbErrorCaptureCallback, true)");
+ evalAndLog("db.addEventListener('error', dbErrorBubbleCallback, false)");
+ evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, true)");
+ evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, false)");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = errorFiredCallback;
+ dbCaptureFired = false;
+ captureFired = false;
+ requestFired = false;
+ bubbleFired = false;
+ dbBubbleFired = false;
+}
+
+function dbErrorCaptureCallback()
+{
+ debug("");
+ debug("In IDBDatabase error capture");
+ shouldBeFalse("dbCaptureFired");
+ shouldBeFalse("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ dbCaptureFired = true;
+}
+
+function errorCaptureCallback()
+{
+ debug("");
+ debug("In IDBTransaction error capture");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeFalse("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ captureFired = true;
+}
+
+function errorFiredCallback()
+{
+ debug("");
+ debug("In IDBRequest handler");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ requestFired = true;
+}
+
+function errorBubbleCallback()
+{
+ debug("");
+ debug("In IDBTransaction error bubble");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeTrue("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ bubbleFired = true;
+}
+
+function dbErrorBubbleCallback()
+{
+ debug("");
+ debug("In IDBDatabase error bubble");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeTrue("requestFired");
+ shouldBeTrue("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ dbBubbleFired = true;
+}
+
+function transactionAborted2()
+{
+ debug("");
+ debug("Transaction aborted");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeTrue("requestFired");
+ shouldBeTrue("bubbleFired");
+ shouldBeTrue("dbBubbleFired");
+ debug("");
+ debug("Verifing success.");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.oncomplete = transactionComplete");
+ evalAndLog("trans.onabort = unexpectedAbortCallback");
+ evalAndLog("trans.addEventListener('success', successCaptureCallback, true)");
+ evalAndLog("trans.addEventListener('success', successBubbleCallback, false)");
+ evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, true)");
+ evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, false)");
+ evalAndLog("db.removeEventListener('error', dbErrorCaptureCallback, true)");
+ evalAndLog("db.removeEventListener('error', dbErrorBubbleCallback, false)");
+ evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, true)");
+ evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, false)");
+ evalAndLog("db.addEventListener('success', dbSuccessCaptureCallback, true)");
+ evalAndLog("db.addEventListener('success', dbSuccessBubbleCallback, false)");
+ evalAndLog("db.addEventListener('error', unexpectedErrorCallback, true)");
+ evalAndLog("db.addEventListener('error', unexpectedErrorCallback, false)");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')");
+ result.onerror = unexpectedErrorCallback;
+ result.onsuccess = successFiredCallback;
+ dbCaptureFired = false;
+ captureFired = false;
+ requestFired = false;
+ bubbleFired = false;
+ dbBubbleFired = false;
+}
+
+function dbSuccessCaptureCallback()
+{
+ debug("");
+ debug("In IDBDatabase success capture");
+ shouldBeFalse("dbCaptureFired");
+ shouldBeFalse("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ dbCaptureFired = true;
+}
+
+function successCaptureCallback()
+{
+ debug("");
+ debug("In IDBTransaction success capture");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeFalse("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ captureFired = true;
+}
+
+function successFiredCallback()
+{
+ debug("");
+ debug("In IDBRequest handler");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeFalse("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ requestFired = true;
+}
+
+function successBubbleCallback()
+{
+ debug("");
+ debug("In IDBTransaction success bubble");
+ testFailed("Success bubble callback should NOT fire");
+ bubbleFired = true;
+}
+
+function dbSuccessBubbleCallback()
+{
+ debug("");
+ debug("In IDBDatabase success bubble");
+ testFailed("Success bubble callback should NOT fire");
+ dbBubbleFired = true;
+}
+
+function transactionComplete()
+{
+ debug("");
+ debug("Transaction completed");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("captureFired");
+ shouldBeTrue("requestFired");
+ shouldBeFalse("bubbleFired");
+ shouldBeFalse("dbBubbleFired");
+ debug("");
+
+ done();
+ return;
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/transaction-after-close-expected.txt b/LayoutTests/storage/indexeddb/transaction-after-close-expected.txt
new file mode 100644
index 0000000..653bd87
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-after-close-expected.txt
@@ -0,0 +1,95 @@
+Test closing a database connection in IndexedDB.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('some db name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+openSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+result = db.setVersion('version 1')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+Deleted all object stores.
+store = db.createObjectStore('store')
+request = store.put('x', 'y')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+running first transaction
+currentTransaction = db.transaction([], webkitIDBTransaction.READ_WRITE)
+objectStore.put('a', 'b')
+db.close()
+Expecting exception from db.transaction([], webkitIDBTransaction.READ_WRITE)
+PASS code is webkitIDBDatabaseException.NOT_ALLOWED_ERR
+
+verify that we can reopen the db after calling close
+webkitIndexedDB.open('some db name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+second_db = event.result
+currentTransaction = second_db.transaction([], webkitIDBTransaction.READ_WRITE)
+request = store.put('1', '2')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/transaction-after-close.html b/LayoutTests/storage/indexeddb/transaction-after-close.html
new file mode 100644
index 0000000..718c05a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-after-close.html
@@ -0,0 +1,105 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test closing a database connection in IndexedDB.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
+
+ result = evalAndLog("webkitIndexedDB.open('some db name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ debug("openSuccess():");
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+ result = evalAndLog("result = db.setVersion('version 1')");
+ result.onsuccess = inSetVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function inSetVersion()
+{
+ verifySuccessEvent(event);
+ deleteAllObjectStores(db, doSetVersionStuff);
+}
+
+function doSetVersionStuff()
+{
+ event.result.oncomplete = runFirstRegularTransaction;
+ event.result.onabort = unexpectedAbortCallback;
+ store = evalAndLog("store = db.createObjectStore('store')");
+ request = evalAndLog("request = store.put('x', 'y')");
+ request.onsuccess = onPutSuccess;
+ request.onerror = unexpectedErrorCallback;
+}
+
+function onPutSuccess()
+{
+ verifySuccessEvent(event);
+}
+
+function runFirstRegularTransaction()
+{
+ debug("running first transaction")
+ currentTransaction = evalAndLog("currentTransaction = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ currentTransaction.onabort = unexpectedAbortCallback;
+ currentTransaction.oncomplete = firstTransactionComplete;
+ objectStore = currentTransaction.objectStore('store');
+ result = evalAndLog("objectStore.put('a', 'b')");
+ result.onerror = unexpectedErrorCallback;
+}
+
+function firstTransactionComplete()
+{
+ evalAndLog("db.close()");
+ evalAndExpectException("db.transaction([], webkitIDBTransaction.READ_WRITE)", "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
+
+ debug("")
+ debug("verify that we can reopen the db after calling close")
+ result = evalAndLog("webkitIndexedDB.open('some db name')");
+ verifyResult(result);
+ result.onsuccess = onSecondOpen
+ result.onerror = unexpectedErrorCallback;
+}
+
+function onSecondOpen() {
+ verifySuccessEvent(event);
+ second_db = evalAndLog("second_db = event.result");
+ currentTransaction = evalAndLog("currentTransaction = second_db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ store = currentTransaction.objectStore('store');
+ request = evalAndLog("request = store.put('1', '2')");
+ request.onsuccess = onFinalPutSuccess;
+ request.onerror = unexpectedErrorCallback;
+ currentTransaction.oncomplete = done;
+ currentTransaction.onabort = unexpectedAbortCallback;
+}
+
+function onFinalPutSuccess() {
+ verifySuccessEvent(event);
+}
+
+var successfullyParsed = true;
+
+test();
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt b/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt
index df373d6..36ca01e 100644
--- a/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt
+++ b/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt
@@ -17,42 +17,42 @@ trans = event.result
Deleted all object stores.
db.createObjectStore('a')
db.createObjectStore('b')
-trans.oncomplete = created
+trans.addEventListener('complete', created, true)
-trans = db.transaction({objectStoreNames: 'a'})
+trans = db.transaction(['a'])
trans.objectStore('a')
Expecting exception from trans.objectStore('b')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-trans = db.transaction({objectStoreNames: ['a']})
+trans = db.transaction(['a'])
trans.objectStore('a')
Expecting exception from trans.objectStore('b')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-trans = db.transaction({objectStoreNames: ['b']})
+trans = db.transaction(['b'])
trans.objectStore('b')
Expecting exception from trans.objectStore('a')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-trans = db.transaction({objectStoreNames: ['a', 'b']})
+trans = db.transaction(['a', 'b'])
trans.objectStore('a')
trans.objectStore('b')
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-trans = db.transaction({objectStoreNames: ['b', 'a']})
+trans = db.transaction(['b', 'a'])
trans.objectStore('a')
trans.objectStore('b')
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-trans = db.transaction({objectStoreNames: []})
+trans = db.transaction([])
trans.objectStore('a')
trans.objectStore('b')
Expecting exception from trans.objectStore('x')
@@ -64,15 +64,15 @@ trans.objectStore('b')
Expecting exception from trans.objectStore('x')
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-Expecting exception from db.transaction({objectStoreNames: 'x'})
+Expecting exception from db.transaction(['x'])
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-Expecting exception from db.transaction({objectStoreNames: ['x']})
+Expecting exception from db.transaction(['x'])
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-Expecting exception from db.transaction({objectStoreNames: ['a', 'x']})
+Expecting exception from db.transaction(['a', 'x'])
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-Expecting exception from db.transaction({objectStoreNames: ['x', 'x']})
+Expecting exception from db.transaction(['x', 'x'])
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
-Expecting exception from db.transaction({objectStoreNames: ['a', 'x', 'b']})
+Expecting exception from db.transaction(['a', 'x', 'b'])
PASS code is webkitIDBDatabaseException.NOT_FOUND_ERR
PASS successfullyParsed is true
diff --git a/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html b/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html
index 580ca5d..144df4f 100644
--- a/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html
+++ b/LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html
@@ -43,43 +43,43 @@ function cleaned()
{
evalAndLog("db.createObjectStore('a')");
evalAndLog("db.createObjectStore('b')");
- evalAndLog("trans.oncomplete = created");
+ evalAndLog("trans.addEventListener('complete', created, true)");
debug("");
}
function created()
{
- trans = evalAndLog("trans = db.transaction({objectStoreNames: 'a'})");
+ trans = evalAndLog("trans = db.transaction(['a'])");
evalAndLog("trans.objectStore('a')");
evalAndExpectException("trans.objectStore('b')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- trans = evalAndLog("trans = db.transaction({objectStoreNames: ['a']})");
+ trans = evalAndLog("trans = db.transaction(['a'])");
evalAndLog("trans.objectStore('a')");
evalAndExpectException("trans.objectStore('b')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- trans = evalAndLog("trans = db.transaction({objectStoreNames: ['b']})");
+ trans = evalAndLog("trans = db.transaction(['b'])");
evalAndLog("trans.objectStore('b')");
evalAndExpectException("trans.objectStore('a')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- trans = evalAndLog("trans = db.transaction({objectStoreNames: ['a', 'b']})");
+ trans = evalAndLog("trans = db.transaction(['a', 'b'])");
evalAndLog("trans.objectStore('a')");
evalAndLog("trans.objectStore('b')");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- trans = evalAndLog("trans = db.transaction({objectStoreNames: ['b', 'a']})");
+ trans = evalAndLog("trans = db.transaction(['b', 'a'])");
evalAndLog("trans.objectStore('a')");
evalAndLog("trans.objectStore('b')");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- trans = evalAndLog("trans = db.transaction({objectStoreNames: []})");
+ trans = evalAndLog("trans = db.transaction([])");
evalAndLog("trans.objectStore('a')");
evalAndLog("trans.objectStore('b')");
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
@@ -91,11 +91,11 @@ function created()
evalAndExpectException("trans.objectStore('x')", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
- evalAndExpectException("db.transaction({objectStoreNames: 'x'})", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- evalAndExpectException("db.transaction({objectStoreNames: ['x']})", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- evalAndExpectException("db.transaction({objectStoreNames: ['a', 'x']})", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- evalAndExpectException("db.transaction({objectStoreNames: ['x', 'x']})", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- evalAndExpectException("db.transaction({objectStoreNames: ['a', 'x', 'b']})", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndExpectException("db.transaction(['x'])", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndExpectException("db.transaction(['x'])", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndExpectException("db.transaction(['a', 'x'])", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndExpectException("db.transaction(['x', 'x'])", "webkitIDBDatabaseException.NOT_FOUND_ERR");
+ evalAndExpectException("db.transaction(['a', 'x', 'b'])", "webkitIDBDatabaseException.NOT_FOUND_ERR");
debug("");
done();
diff --git a/LayoutTests/storage/indexeddb/transaction-basics.html b/LayoutTests/storage/indexeddb/transaction-basics.html
index 8995e6d..9626129 100644
--- a/LayoutTests/storage/indexeddb/transaction-basics.html
+++ b/LayoutTests/storage/indexeddb/transaction-basics.html
@@ -55,7 +55,7 @@ function addRemoveIDBObjects()
verifySuccessEvent(event);
var trans = evalAndLog("trans = event.result");
shouldBeTrue("trans !== null");
- trans.onabort = testSetVersionAbort2;
+ trans.addEventListener('abort', testSetVersionAbort2, true);
trans.oncomplete = unexpectedCompleteCallback;
var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
@@ -80,7 +80,7 @@ function addRemoveAddIDBObjects()
verifySuccessEvent(event);
var trans = evalAndLog("trans = event.result");
shouldBeTrue("trans !== null");
- trans.onabort = testSetVersionAbort3;
+ trans.addEventListener('abort', testSetVersionAbort3, false);
trans.oncomplete = unexpectedCompleteCallback;
var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
@@ -209,7 +209,7 @@ function setVersionSuccess()
window.trans = evalAndLog("trans = event.result");
shouldBeTrue("trans !== null");
trans.onabort = unexpectedAbortCallback;
- trans.oncomplete = completeCallback;
+ trans.addEventListener('complete', completeCallback, false);
window.completeEventFired = false;
deleteAllObjectStores(db, createObjectStoreAndStartTransaction);
diff --git a/LayoutTests/storage/indexeddb/transaction-event-propagation-expected.txt b/LayoutTests/storage/indexeddb/transaction-event-propagation-expected.txt
new file mode 100644
index 0000000..9d04b0a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-event-propagation-expected.txt
@@ -0,0 +1,79 @@
+Test event propogation on IDBTransaction.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+trans = event.result
+PASS trans !== null is true
+trans.oncomplete = startTest
+Deleted all object stores.
+store = db.createObjectStore('storeName', null)
+store.add({x: 'value', y: 'zzz'}, 'key')
+Verifing abort
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.onabort = abortFiredCallback
+trans.oncomplete = unexpectedAbortCallback
+db.addEventListener('abort', dbAbortCaptureCallback, true)
+db.addEventListener('abort', dbAbortBubbleCallback, false)
+db.addEventListener('complete', unexpectedCompleteCallback, true)
+db.addEventListener('complete', unexpectedCompleteCallback, false)
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key')
+
+In IDBDatabase abort capture
+PASS dbCaptureFired is false
+PASS abortFired is false
+PASS dbBubbleFired1 is false
+
+In abort handler
+PASS dbCaptureFired is true
+PASS abortFired is false
+PASS dbBubbleFired1 is false
+
+In IDBDatabase error bubble
+PASS dbCaptureFired is true
+PASS abortFired is true
+PASS dbBubbleFired1 is false
+
+Verifing success.
+trans = db.transaction([], webkitIDBTransaction.READ_WRITE)
+trans.oncomplete = completeFiredCallback
+trans.onabort = unexpectedAbortCallback
+db.removeEventListener('abort', dbAbortCaptureCallback, true)
+db.removeEventListener('abort', dbAbortBubbleCallback, false)
+db.removeEventListener('complete', unexpectedCompleteCallback, true)
+db.removeEventListener('complete', unexpectedCompleteCallback, false)
+db.addEventListener('complete', dbCompleteCaptureCallback, true)
+db.addEventListener('complete', dbCompleteBubbleCallback, false)
+db.addEventListener('abort', unexpectedAbortCallback, true)
+db.addEventListener('abort', unexpectedAbortCallback, false)
+store = trans.objectStore('storeName')
+store.add({x: 'value', y: 'zzz'}, 'key2')
+
+In IDBDatabase complete capture
+PASS dbCaptureFired is false
+PASS completeFired is false
+PASS dbBubbleFired2 is false
+
+In IDBRequest handler
+PASS dbCaptureFired is true
+PASS completeFired is false
+PASS dbBubbleFired2 is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/transaction-event-propagation.html b/LayoutTests/storage/indexeddb/transaction-event-propagation.html
new file mode 100644
index 0000000..c31646a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-event-propagation.html
@@ -0,0 +1,153 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test event propogation on IDBTransaction.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ evalAndLog("trans.oncomplete = startTest");
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ store = evalAndLog("store = db.createObjectStore('storeName', null)");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ result.onerror = unexpectedErrorCallback;
+}
+
+function startTest()
+{
+ debug("Verifing abort");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.onabort = abortFiredCallback");
+ evalAndLog("trans.oncomplete = unexpectedAbortCallback");
+ evalAndLog("db.addEventListener('abort', dbAbortCaptureCallback, true)");
+ evalAndLog("db.addEventListener('abort', dbAbortBubbleCallback, false)");
+ evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, true)");
+ evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, false)");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ dbCaptureFired = false;
+ abortFired = false;
+ dbBubbleFired1 = false;
+}
+
+function dbAbortCaptureCallback()
+{
+ debug("");
+ debug("In IDBDatabase abort capture");
+ shouldBeFalse("dbCaptureFired");
+ shouldBeFalse("abortFired");
+ shouldBeFalse("dbBubbleFired1");
+ dbCaptureFired = true;
+}
+
+function abortFiredCallback()
+{
+ debug("");
+ debug("In abort handler");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeFalse("abortFired");
+ shouldBeFalse("dbBubbleFired1");
+ abortFired = true;
+}
+
+function dbAbortBubbleCallback()
+{
+ debug("");
+ debug("In IDBDatabase error bubble");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeTrue("abortFired");
+ shouldBeFalse("dbBubbleFired1");
+ dbBubbleFired1 = true;
+ debug("");
+ debug("Verifing success.");
+ trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ evalAndLog("trans.oncomplete = completeFiredCallback");
+ evalAndLog("trans.onabort = unexpectedAbortCallback");
+ evalAndLog("db.removeEventListener('abort', dbAbortCaptureCallback, true)");
+ evalAndLog("db.removeEventListener('abort', dbAbortBubbleCallback, false)");
+ evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, true)");
+ evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, false)");
+ evalAndLog("db.addEventListener('complete', dbCompleteCaptureCallback, true)");
+ evalAndLog("db.addEventListener('complete', dbCompleteBubbleCallback, false)");
+ evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, true)");
+ evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, false)");
+ store = evalAndLog("store = trans.objectStore('storeName')");
+ evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')");
+ dbCaptureFired = false;
+ completeFired = false;
+ dbBubbleFired2 = false;
+}
+
+function dbCompleteCaptureCallback()
+{
+ debug("");
+ debug("In IDBDatabase complete capture");
+ shouldBeFalse("dbCaptureFired");
+ shouldBeFalse("completeFired");
+ shouldBeFalse("dbBubbleFired2");
+ dbCaptureFired = true;
+}
+
+function completeFiredCallback()
+{
+ debug("");
+ debug("In IDBRequest handler");
+ shouldBeTrue("dbCaptureFired");
+ shouldBeFalse("completeFired");
+ shouldBeFalse("dbBubbleFired2");
+ completeFired = true;
+ debug("");
+ done();
+}
+
+function dbCompleteBubbleCallback()
+{
+ debug("");
+ debug("In IDBDatabase complete bubble");
+ testFailed("Complete bubble callback should NOT fire");
+ dbBubbleFired2 = true;
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/tutorial.html b/LayoutTests/storage/indexeddb/tutorial.html
index 445213c..0490df8 100644
--- a/LayoutTests/storage/indexeddb/tutorial.html
+++ b/LayoutTests/storage/indexeddb/tutorial.html
@@ -114,7 +114,7 @@ function onSetVersion()
{
// We are now in a setVersion transaction. Such a transaction is the only place where one
// can add or delete indexes and objectStores. The result (property of event) is an
- // IDBTransaction object that has "complete", "abort", and "timeout" event handlers which tell
+ // IDBTransaction object that has "complete" and "abort" event handlers which tell
// us when the transaction has committed, aborted, or timed out.
window.currentTransaction = event.result;
currentTransaction.oncomplete = onSetVersionComplete;
@@ -207,7 +207,7 @@ function onSetVersionComplete()
{
// Lets create a new transaction and then not schedule any work on it to watch it abort itself.
// Transactions (besides those created with setVersion) are created synchronously. Like
- // createObjectStore, transaction optionally takes in an object with various optional parameters.
+ // createObjectStore, transaction optionally takes in various optional parameters.
//
// First of all is the parameter "objectStoreNames". If you pass in a string, we lock just that
// objectStore. If you pass in an array, we lock those. Otherwise (for example, if you omit it
@@ -218,11 +218,7 @@ function onSetVersionComplete()
// Next is "mode" which specifies the locking mode. The default is READ_ONLY (i.e. a shared lock).
// That's fine for this case, but later we'll ask for IDBTransaction.READ_WRITE. At the moment,
// Chromium/WebKit pretends every transaction is READ_WRITE, which is kind of bad.
- //
- // Last is "timeout" which is measured in seconds. At the moment, Chromium/WebKit defaults to 0 which
- // means never, but it's possible we'll change this in the future and other implementations may
- // use something different, so set it if you really care.
- window.currentTransaction = db.transaction({mode: IDBTransaction.READ_WRITE, timeout: 0});
+ window.currentTransaction = db.transaction([], IDBTransaction.READ_WRITE);
currentTransaction.oncomplete = unexpectedComplete;
currentTransaction.onabort = onTransactionAborted;
@@ -272,7 +268,7 @@ function onTransactionAborted()
// Now let's make a real transaction and a person to our objectStore. Just to show it's possible,
// we'll omit the objectStoreNames parameter which means we'll lock everything even though we only
// ever access "people".
- window.currentTransaction = db.transaction({mode: IDBTransaction.READ_WRITE});
+ window.currentTransaction = db.transaction([], IDBTransaction.READ_WRITE);
currentTransaction.onabort = unexpectedAbort;
var people = currentTransaction.objectStore("people");
@@ -310,7 +306,7 @@ function onPutTransactionComplete()
// OK, now let's query the people objectStore in a couple different ways. First up, let's try get.
// It simply takes in a key and returns a request whose result will be the value. Note that here
// we're passing in an array for objectStoreNames rather than a simple string.
- window.currentTransaction = db.transaction({objectStoreNames: ["people"], mode: IDBTransaction.READ_WRITE, timeout: 0});
+ window.currentTransaction = db.transaction(["people"], IDBTransaction.READ_WRITE, 0);
currentTransaction.onabort = unexpectedAbort;
var people = currentTransaction.objectStore("people");
@@ -341,7 +337,7 @@ function onGetSuccess()
// return unique entires (only applies to indexes with unique set to false), PREV to move backwards,
// and PREV_NO_DUPLICATE.
var keyRange = IDBKeyRange.bound(1, 3, true, false);
- var request = people.openCursor({range: keyRange, direction: IDBCursor.NEXT});
+ var request = people.openCursor(keyRange, IDBCursor.NEXT);
request.onsuccess = onObjectStoreCursor;
request.onerror = unexpectedError;
}
@@ -394,10 +390,10 @@ function onIndexGetSuccess()
// different IDBKeyRanges just to demonstrate how to use them, but we won't bother to handle
// the onsuccess conditions.
var lname = event.source;
- lname.openCursor({range: IDBKeyRange.lowerBound("Doe", false), direction: IDBCursor.NEXT_NO_DUPLICATE});
- lname.openCursor({direction: IDBCursor.PREV_NO_DUPLICATE});
- lname.openCursor({range: IDBKeyRange.upperBound("ZZZZ")});
- lname.openCursor({range: IDBKeyRange.only("Doe"), direction: IDBCursor.PREV});
+ lname.openCursor(IDBKeyRange.lowerBound("Doe", false), IDBCursor.NEXT_NO_DUPLICATE);
+ lname.openCursor(null, IDBCursor.PREV_NO_DUPLICATE);
+ lname.openCursor(IDBKeyRange.upperBound("ZZZZ"));
+ lname.openCursor(IDBKeyRange.only("Doe"), IDBCursor.PREV);
lname.openCursor();
lname.openKeyCursor();
diff --git a/PerformanceTests/ChangeLog b/PerformanceTests/ChangeLog
new file mode 100644
index 0000000..02bcc1d
--- /dev/null
+++ b/PerformanceTests/ChangeLog
@@ -0,0 +1,187 @@
+2011-02-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add performance tests for URL parsing
+ https://bugs.webkit.org/show_bug.cgi?id=53845
+
+ The final-url-en URL corpus is from:
+ http://corpus.leeds.ac.uk/internet.html
+
+ There are also other language corpuses which we may want to use in the future.
+
+ The usage instructions were as follows:
+ "URL lists and other resources: you can freely use them in your research
+ provided that you supply a link to this website: http://corpus.leeds.ac.uk/."
+ Done.
+
+ * Parser/simple-url.html: Added.
+ On my machine:
+ Firefox: 255ms
+ TOT WebKit: 378ms
+ Chrome: 286ms
+ Opera: 2830ms (no, that is not a typo)
+ * Parser/url-parser.html: Added.
+ Firefox: 381ms
+ TOT WebKit: 216ms
+ Chrome: 131ms
+ Opera: 1383ms (again, not a typo)
+ * Parser/resources/final-url-en: Added.
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Add another XSSFilter PerformanceTest
+ https://bugs.webkit.org/show_bug.cgi?id=53750
+
+ This PerformanceTest tests the case that was slow in
+ https://bugs.webkit.org/show_bug.cgi?id=49845
+
+ * XSSFilter/large-post-many-inline-scripts-and-events.html: Added.
+ * XSSFilter/resources: Added.
+ * XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html: Added.
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add PerformanceTest for XSSFilter
+ https://bugs.webkit.org/show_bug.cgi?id=53741
+
+ This performance tests covers the case of a large POST data and many
+ small event handlers.
+
+ * XSSFilter: Added.
+ * XSSFilter/large-post-many-events.html: Added.
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Rubber-stamped by Eric Seidel.
+
+ Merge PerformanceTests/Parser/ChangeLog and
+ PerformanceTests/PageLoad/ChangeLog into PerformanceTests/ChangeLog.
+
+ It's silly to have ChangeLogs for each of these directories separately.
+ I've left SunSpider with its own ChangeLog because it's more of an
+ independent entity.
+
+ * ChangeLog: Added.
+
+2011-02-02 Eric Seidel <eric@webkit.org>
+
+ Unreviewed. Just fixing an exception seen in Firefox.
+
+ HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
+ https://bugs.webkit.org/show_bug.cgi?id=48719
+
+ Make the benchmarks work in Firefox/Opera.
+
+ * resources/runner.js:
+ (log):
+
+2011-01-27 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
+ https://bugs.webkit.org/show_bug.cgi?id=48719
+
+ It's unclear exactly what the Peacekeeper benchmark is testing,
+ because I haven't found a way to run it myself.
+
+ However, I constructed a benchmark which shows at least one possible slow point.
+ The HTML5 spec talks about creating a new document for every time we use
+ the fragment parsing algorithm. Document() it turns out, it a huge bloated
+ mess, and the constructor and destructor do a huge amount of work.
+
+ * benchmarks/parser/tiny-innerHTML.html: Added.
+
+2011-01-29 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77050.
+ http://trac.webkit.org/changeset/77050
+ https://bugs.webkit.org/show_bug.cgi?id=53371
+
+ Caused a crash in Chromium's test_shell_tests (Requested by
+ rniwa on #webkit).
+
+ * resources/performance-test.js: Removed.
+ * tiny-innerHTML.html: Removed.
+
+2011-01-28 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
+ https://bugs.webkit.org/show_bug.cgi?id=48719
+
+ It's unclear exactly what the Peacekeeper benchmark is testing,
+ because I haven't found a way to run it myself.
+
+ However, I constructed a benchmark which shows at least one possible slow point.
+ The HTML5 spec talks about creating a new document for every time we use
+ the fragment parsing algorithm. Document() it turns out, it a huge bloated
+ mess, and the constructor and destructor do a huge amount of work.
+ To avoid constructing (or destructing) documents for each innerHTML call,
+ this patch adds a shared dummy document used by all innerHTML calls.
+
+ * benchmarks/parser/tiny-innerHTML.html: Added.
+
+2010-12-31 Adam Barth <abarth@webkit.org>
+
+ Rubber-stamped by Eric Seidel.
+
+ Move HTML and XML parser benchmarks into PerformanceTests/Parser
+ https://bugs.webkit.org/show_bug.cgi?id=51772
+
+ Add a ChangeLog for tracking changes to the Parser PerformanceTest.
+
+ * ChangeLog: Added.
+
+2010-12-31 Adam Barth <abarth@webkit.org>
+
+ Rubber-stamped by Eric Seidel.
+
+ Move PageLoadTests to PerformanceTests/PageLoad
+ https://bugs.webkit.org/show_bug.cgi?id=51771
+
+ Update URLs to point to the new directory name.
+
+ * svg/svg.pltsuite:
+
+2006-12-26 Eric Seidel <eric@webkit.org>
+
+ Reviewed by olliej.
+
+ * svg/svg.pltsuite: re-enable word-iso.svg after fixing http://bugs.webkit.org/show_bug.cgi?id=11987
+
+2006-12-26 Eric Seidel <eric@webkit.org>
+
+ Reviewed by bradee-oh.
+
+ Add new PageLoadTests directory (this one)
+ Add LICENSES file to explain where each SVG came from.
+
+ * ChangeLog: Added.
+ * svg/LICENSES: Added.
+ * svg/files/33041-Samurai.svg: Added.
+ * svg/files/42470-flower_from_my_garden_v2.svg: Added.
+ * svg/files/Harvey_Rayner.svg: Added.
+ * svg/files/az-lizard_benji_park_01.svg: Added.
+ * svg/files/bamboo_01.svg: Added.
+ * svg/files/cacuts_01.svg: Added.
+ * svg/files/cowboy.svg: Added.
+ * svg/files/crawfish2_ganson.svg: Added.
+ * svg/files/deb9frac1.svg: Added.
+ * svg/files/food_leif_lodahl_01.svg: Added.
+ * svg/files/france.svg: Added.
+ * svg/files/francobollo_gnome_ezechi_02.svg: Added.
+ * svg/files/gearflowers.svg: Added.
+ * svg/files/hereGear4.svg: Added.
+ * svg/files/mtsthelens.svg: Added.
+ * svg/files/mtsthelens0.jpg: Added.
+ * svg/files/world-iso.svg: Added.
+ * svg/files/worldcup.svg: Added.
+ * svg/svg.pltsuite: Added.
+
diff --git a/PerformanceTests/PageLoad/ChangeLog b/PerformanceTests/PageLoad/ChangeLog
deleted file mode 100644
index 64ba517..0000000
--- a/PerformanceTests/PageLoad/ChangeLog
+++ /dev/null
@@ -1,46 +0,0 @@
-2010-12-31 Adam Barth <abarth@webkit.org>
-
- Rubber-stamped by Eric Seidel.
-
- Move PageLoadTests to PerformanceTests/PageLoad
- https://bugs.webkit.org/show_bug.cgi?id=51771
-
- Update URLs to point to the new directory name.
-
- * svg/svg.pltsuite:
-
-2006-12-26 Eric Seidel <eric@webkit.org>
-
- Reviewed by olliej.
-
- * svg/svg.pltsuite: re-enable word-iso.svg after fixing http://bugs.webkit.org/show_bug.cgi?id=11987
-
-2006-12-26 Eric Seidel <eric@webkit.org>
-
- Reviewed by bradee-oh.
-
- Add new PageLoadTests directory (this one)
- Add LICENSES file to explain where each SVG came from.
-
- * ChangeLog: Added.
- * svg/LICENSES: Added.
- * svg/files/33041-Samurai.svg: Added.
- * svg/files/42470-flower_from_my_garden_v2.svg: Added.
- * svg/files/Harvey_Rayner.svg: Added.
- * svg/files/az-lizard_benji_park_01.svg: Added.
- * svg/files/bamboo_01.svg: Added.
- * svg/files/cacuts_01.svg: Added.
- * svg/files/cowboy.svg: Added.
- * svg/files/crawfish2_ganson.svg: Added.
- * svg/files/deb9frac1.svg: Added.
- * svg/files/food_leif_lodahl_01.svg: Added.
- * svg/files/france.svg: Added.
- * svg/files/francobollo_gnome_ezechi_02.svg: Added.
- * svg/files/gearflowers.svg: Added.
- * svg/files/hereGear4.svg: Added.
- * svg/files/mtsthelens.svg: Added.
- * svg/files/mtsthelens0.jpg: Added.
- * svg/files/world-iso.svg: Added.
- * svg/files/worldcup.svg: Added.
- * svg/svg.pltsuite: Added.
-
diff --git a/PerformanceTests/Parser/ChangeLog b/PerformanceTests/Parser/ChangeLog
deleted file mode 100644
index 37a9f2e..0000000
--- a/PerformanceTests/Parser/ChangeLog
+++ /dev/null
@@ -1,11 +0,0 @@
-2010-12-31 Adam Barth <abarth@webkit.org>
-
- Rubber-stamped by Eric Seidel.
-
- Move HTML and XML parser benchmarks into PerformanceTests/Parser
- https://bugs.webkit.org/show_bug.cgi?id=51772
-
- Add a ChangeLog for tracking changes to the Parser PerformanceTest.
-
- * ChangeLog: Added.
-
diff --git a/PerformanceTests/Parser/resources/final-url-en b/PerformanceTests/Parser/resources/final-url-en
new file mode 100644
index 0000000..045d906
--- /dev/null
+++ b/PerformanceTests/Parser/resources/final-url-en
@@ -0,0 +1,82257 @@
+http://1-14th.com/timeline-4-66T.htm
+http://1-las-vegas-real-estate.com/homes/sellers/list_today/
+http://100megsfree4.com/stimso/scottish-rite.htm
+http://1010phonerates.com/Sprint_rate_increase.html
+http://10174521412004-u9f1gir56b.powerlinks.com/shared/links.asp?c=3
+http://101games.computergaming.com/do/previewPage?cId=3138507&did=1
+http://101publicrelations.com/blog/2004_04.html
+http://101publicrelations.com/blog/archives/000122.html
+http://106miles.blogspot.com/
+http://10quicksteps.com/all
+http://11d.typepad.com/blog/2005/05/whats_in_a_name.html
+http://12.100.23.254:8080/bj/projects/color/hous4.html
+http://128.121.126.56/human_resources/jobdescriptions/administration/personnel_tech_JD.htm
+http://128.174.128.220/cgi-bin/clasSearch/viewitem.cgi?id=2116
+http://128.175.24.251/invtips.htm
+http://128.248.232.90/archives/mchb/amchp2004/b2/transcripts/session03e.htm
+http://129.93.84.115/Chemistry/LABS/LABS07.html
+http://130.15.161.74/techserv/auth/05Conference/05corporate.html
+http://130.15.161.74/techserv/auth/05Conference/05ongoing.html
+http://130.18.140.19/mmsoc/chapter3.html
+http://130.226.203.239/pub/mapp/gen/pages/description.html
+http://132.170.111.38/CAPA/sample7t.htm
+http://132.170.111.38/CAPA/sample9t.htm
+http://132.170.111.38/CAPA/sample9tp.htm
+http://132.236.67.165/HOME/docs/IJ080903.htm
+http://132.236.67.165/HOME/docs/IJ20010222.htm
+http://132.236.67.165/cure/cust.htm
+http://137.120.22.236/www-edocs/loader/file.asp?id=581
+http://14.1911encyclopedia.org/S/SU/SUPPLY_AND_TRANSPORT_MILITARY.htm
+http://1425.rfc.ok.cl/
+http://147.237.72.16/eng/sub-BRA-system.asp
+http://149.168.35.203/calendar/job_fairs2.html
+http://150.theage.com.au/view_bestofarticle.asp?intid=1707
+http://151.121.3.117/programsfgis/inspwgh/other/qualityassessments.htm
+http://151.204.172.139/programs_community.asp
+http://152.1.96.5/jouvert/v1i1/shohat.htm
+http://164.100.24.208/ls/condeb/vol7p1b.htm
+http://166.20.120.3/IIF/jobs/jobDetail870.html
+http://166321.166.links4trade.com/links.html
+http://167.7.184.33/sewing.htm
+http://1914-1918.org/forum/index.php?showtopic=24640
+http://196.36.153.56/doh/docs/sp/2005/sp0618.html
+http://198.202.202.66/GamePlan/template21667.asp
+http://198.202.202.66/Police/template310226.asp
+http://199.120.116.1/~cjbunz/park/n-register2.htm
+http://1stholistic.com/Prayer/hol_prayer_god-is-talking-4.htm
+http://1stholistic.com/Reading/prose/A2004/liv_is-mothering-wearing-you-out.htm
+http://2-minute-website.com/legal/affiliate_agreement.html
+http://2-minute-website.com/legal/service_agreement.html
+http://2004clcc.blogspot.com/2004/07/bring-your-wi-fi-cards.html
+http://202.121.129.66/transcend/www.aei.org/ra/rahazlett40.htm
+http://202.186.86.35/audio/story.asp?file=/2004/8/19/audiofile/19dyna
+http://202.186.86.35/special/online/bilpaul/hamops.html
+http://202.186.86.35/special/online/momsnet/default.htm
+http://202.221.217.59/print/features/film2004/ff20040818a1.htm
+http://202.221.217.59/print/features/life2004/fl20040620x2.htm
+http://202.221.217.59/print/features/life2004/fl20040829x3.htm
+http://202.221.217.59/print/news/nn11-2004/nn20041115a1.htm
+http://202.41.106.222/vista/htmls/Team%20Vista.htm
+http://203.115.194.76/purplesofa/tbadvice.asp?Catid=9&sid=107&page=4
+http://203.167.234.188/usa/airfarespecial/1948.htm
+http://203.199.69.66/columns/shanta_gokhle/2004/october/95585.htm
+http://205.174.118.254/nspt/magi/magi10.htm
+http://205.174.118.254/nspt/magi/magi11.htm
+http://205.243.100.155/frames/lichtenbergs.html
+http://207.107.10.214/wShop.asp?C=STM
+http://209.11.49.220/eandp/departments/business/article_display.jsp?vnu_content_id=1000962194
+http://209.15.29.56/myersbriggs/experiencer.htm
+http://209.15.36.61/scootworks/html_inst/klr_lower/klr_lower.htm
+http://209.157.64.200/focus/f-news/1143594/posts
+http://209.157.64.200/focus/f-news/1144851/posts
+http://209.157.64.200/focus/f-news/1329509/posts
+http://209.157.64.200/focus/f-news/1336122/posts
+http://209.157.64.200/focus/f-news/1346517/posts
+http://209.157.64.200/focus/f-news/1430112/posts
+http://209.157.64.200/focus/f-news/923505/posts
+http://209.165.152.119/misc.html
+http://209.197.233.93/content/view/40/
+http://209.87.142.42/y/book2/Book_107.htm
+http://209.87.142.42/y/book2/Book_112.htm
+http://209.87.231.94/HomelandSecurity/
+http://20below.mainetoday.com/help/ask/
+http://210.145.168.243/pk/045th_issue/report/report05.htm
+http://212.187.155.84/pass_06june/List_WPMod_Cont/FMD/FMDTechniques/overviews/FMDCulling.htm
+http://213.132.57.100/gulfair/form/
+http://216.147.85.36/index.php?PID=17&cid=2
+http://216.185.112.5/presenter.jhtml?identifier=4565
+http://216.197.101.64/sgnnews18/page36.cfm
+http://216.26.160.137/Forums/AspNetForums20/ShowPost.aspx?PostID=15705
+http://216.26.160.137/Forums/AspNetForums20/ShowPost.aspx?PostID=15712
+http://216.26.163.62/2004/ss_iraq_02_16.html
+http://216.31.193.173/ewsoe/english/4_4.htm
+http://216.36.178.46/inthecity/oct03/greenthumb.html
+http://217.169.99.140/inglese/105/en_prayer_board.html
+http://22.1911encyclopedia.org/B/BA/BALL.htm
+http://24.73.239.154:8081/moonshot/motives.htm
+http://27.1911encyclopedia.org/T/TE/TEA.htm
+http://2bb.uts.edu.au/buying.htm
+http://2createawebsite.com/enhance/
+http://2hands.blogspot.com/
+http://2old2care.blogspot.com/
+http://2pac-lyrics.wonderlyrics.com/Heavy-In-The-Game.html
+http://2slick.blogspot.com/2004/11/letter-from-fallujah.html
+http://2thinkforums.org/anyboard/archive/3144.html
+http://37179.jobs.com/
+http://37days.typepad.com/37days/2005/06/redefine_normal.html
+http://38.1911encyclopedia.org/C/CA/CATHERINE_OF_ARAGON.htm
+http://3circles.clearwithin.com/prax10.htm
+http://3d2f.com/catalog/home-hobby/mac/
+http://3dff.com/IN%20HIS%20STEPS/Chapter%205%20In%20His%20Steps,%20by%20Charles%20M_%20Sheldon.htm
+http://3dgpu.com/forums/lofiversion/index.php/t1847.html
+http://3quarksdaily.blogs.com/3quarksdaily/2005/06/monday_musing_s.html
+http://44.1911encyclopedia.org/P/PE/PEACE_CONFERENCES.htm
+http://4cajobs.com/commission/
+http://4h.missouri.edu/4h-volunteers/secure/Lesson4/aggression.htm
+http://4homeless.hypermart.net/soup.html
+http://4inc.com/incfaq.htm
+http://4kevin.com/weblog/blog-strange.html
+http://4ranters.com/index.php?mod=articles&view=7
+http://4renovators.com/blogs/pigeonpointproject/
+http://4wheeldrive.about.com/cs/ecolandmatters/a/protectrails4x4_2.htm
+http://4wheeloffroad.com/techarticles/drivetrain/131_0506_low/
+http://50-cent-lyrics.wonderlyrics.com/Thicker-Than-Water.html
+http://50.lycos.com/2003review.asp
+http://504-boyz-lyrics.wonderlyrics.com/Haters-Gon-Hate.html
+http://53.1911encyclopedia.org/G/GL/GLASS.htm
+http://53788.jobs.com/
+http://5aday.gov/tools/school/4_middle.html
+http://5loaves2fishes.org.nz/Significance.htm
+http://5thnovember.blogspot.com/2005/05/labour-broke-e-laws-during-election.html
+http://60spunk.m78.com/q65eg.htm
+http://625.uk.com/RtoR/dogs.htm
+http://625.uk.com/RtoR/future_tv.htm
+http://625.uk.com/RtoR/pdc.htm
+http://625.uk.com/pdc/
+http://63.192.157.117/specials/voices/pages/education13.html
+http://63.224.190.121/cgi-bin/public.cgi?path=ica.html
+http://63.88.172.222/
+http://64.118.66.16/jackstreet/Journal.cfm?ArticleID=28
+http://64.177.207.201/pages/8_165.html
+http://64.33.116.68/ivanpah-amcup04.html
+http://64.53.95.207/sp2/pitfall2.html
+http://64.78.10.206/challenger/about/teacher_in_space.cfm
+http://64.78.10.206/challenger/students/history/index.cfm
+http://64.78.10.206/challenger/teachers/history/index.cfm
+http://64.78.50.25/learnmore/resources/feldbaumc_200201.cfm
+http://64.90.169.191/applications/electrical/pq/casestudy/high_rise_office_A6095.html
+http://64.90.169.191/applications/electrical/pq/casestudy/kgbi_station_A6082.html
+http://65.108.243.14/atheists/p2.html
+http://65.40.245.240/gallery/
+http://66.147.176.110/oldsite/AWARE-RH/ambassador1.htm
+http://66.1911encyclopedia.org/N/NI/NICOLSON_WILLIAM.htm
+http://66.34.102.61/list.asp
+http://66.34.102.61/list.asp?cat=TV
+http://67.19.19.69/
+http://67.1911encyclopedia.org/L/LI/LIVERY_COMPANIES.htm
+http://69.56.255.194/?article=20782
+http://69.93.52.74/~scottw/barnet/index.php
+http://6news.ljworld.com/section/sundayliquorsales
+http://712educators.about.com/cs/discipline/a/environment.htm
+http://712educators.about.com/od/jobopenings/tp/teacherpay.htm
+http://7one.blogdrive.com/
+http://84.1911encyclopedia.org/S/SP/SPENCER.htm
+http://911citizenswatch.org/
+http://911digitalarchive.org/cuentos/details/1430
+http://911research.wtc7.net/disinfo/experts/articles/bazant_jem/bazant_zhou.html
+http://911research.wtc7.net/pentagon/analysis/theories/eastman.html
+http://911research.wtc7.net/planes/defense/
+http://92.1911encyclopedia.org/H/HA/HAIR.htm
+http://95.1911encyclopedia.org/L/LI/LINCOLN_ENGLAND_.htm
+http://99zeros.blogspot.com/2005/02/official-story-straight-from-source.html
+http://9mmdesigns.blogspot.com/
+http://9rules.com/whitespace/design_critiques/mt_vs_wp_vs_txp_entry_page_design.php
+http://9rules.com/whitespace/our_thoughts/web_design_resources.php
+http://9rules.com/whitespace/successful_design.php
+http://a-1minigolf.com/a1competition_page.htm
+http://a.mongers.org/clueful/1999-phk-bikeshed
+http://a.parsons.edu/~juliaset/
+http://a.wholelottanothing.org/features/2003/07/beyond_the_blog
+http://a.wholelottanothing.org/features/2003/07/beyond_the_blog.html
+http://a.wholelottanothing.org/features/2003/10/blogging_for_do
+http://a.wholelottanothing.org/features/2003/12/social_software.html
+http://a1-cheap-laptops.com/warranty.html
+http://aa.usno.navy.mil/data/docs/RS_OneDay.html
+http://aa.usno.navy.mil/data/docs/RS_OneYear.html
+http://aa.usno.navy.mil/faq/docs/calendars.html
+http://aa.usno.navy.mil/faq/docs/islamic.html
+http://aaal.lang.uiuc.edu/letter/
+http://aaal.lang.uiuc.edu/letter/23.2/exec.htm
+http://aabb.jobcontrolcenter.com/companies/
+http://aac.asm.org/cgi/content/full/48/2/453
+http://aad.english.ucsb.edu/docs/expectsplit5.html
+http://aad.english.ucsb.edu/docs/jangop.html
+http://aad.english.ucsb.edu/docs/notaa11.html
+http://aahebulletin.com/public/archive/sevenprinciples1987.asp
+http://aaliyahdiscography.musicfantalk.com/aaliyah2001tribute.html
+http://aaotracker.4players.de/thread.php?threadid=92828
+http://aappo.org/government/medicaremodels.htm
+http://aappolicy.aappublications.org/cgi/content/full/pediatrics;105/6/1349
+http://aapredbook.aappublications.org/cgi/content/full/2003/1/3.142
+http://aaugh.com/guide/texture.htm
+http://aaw.com/library/eight.html
+http://aaweb.csus.edu/catalog/current/First%20100%20Pages/FINANCI.asp
+http://aaweb.lsu.edu/catalogs/2000/ug_requirements.htm
+http://abbeyrd.best.vwh.net/story.htm
+http://abbookman.com/ABBookman_F051404b.html
+http://abbot.aaps.k12.mi.us/ptominutes1004.html
+http://abc.go.com/primetime/xtremehome/casting.html
+http://abc.net.au/worldcup2002/items/s576966.htm
+http://abcasiapacific.com/guide/10d_to.htm
+http://abcasiapacific.com/guide/11d.htm
+http://abcasiapacific.com/guide/13d_to.htm
+http://abcasiapacific.com/guide/16d.htm
+http://abcasiapacific.com/guide/3d.htm
+http://abcasiapacific.com/guide/4d.htm
+http://abcasiapacific.com/guide/6d.htm
+http://abcasiapacific.com/guide/6d_to.htm
+http://abcasiapacific.com/guide/9d.htm
+http://abcasiapacific.com/news/profiles/KOREADEMOCRATICPEOPLESREPUBLICOF_to.htm
+http://abclocal.go.com/kabc/news/012605_nwAP_train.html
+http://abclocal.go.com/kgo/features/good_gardening/033003_gg_killer_roses_recipe.html
+http://abclocal.go.com/kgo/news/012705_nw_teacher_sex.html
+http://abclocal.go.com/kgo/news/7oys/030805_7oys_office_etiquette.html
+http://abclocal.go.com/kgo/news/iteam/052604_iteam_deaf_scam_two.html
+http://abclocal.go.com/kgo/news/recall_roundup/
+http://abclocal.go.com/wabc/automotive/10steps6.html
+http://abclocal.go.com/wabc/news/WABC_060502_keyfoods.html
+http://abclocal.go.com/wabc/news/health/
+http://abclocal.go.com/wabc/weather/WABC_2004_desktopinstall.html
+http://abclocal.go.com/wjrt/news/011305_NW_da_seniors.html
+http://abclocal.go.com/wls/automotive/10steps6.html
+http://abclocal.go.com/wls/news/052002_hs_healthbeat.html
+http://abclocal.go.com/wls/news/060705_ap_ns_pension.html
+http://abclocal.go.com/wls/news/connectwithkids/052705_cwk_day_care.html
+http://abclocal.go.com/wls/news/extrainfo/111004_ex_bestshopping.html
+http://abclocal.go.com/wpvi/news/012705_nw_pitmanmarine.html
+http://abclocal.go.com/wtvd/
+http://abcnews.go.com/Business/Careers/story?id=733659
+http://abcnews.go.com/Business/SmallBiz/wireStory?id=281816
+http://abcnews.go.com/Business/wireStory?id=464762
+http://abcnews.go.com/Entertainment/WolfFiles/story?id=785691&page=1
+http://abcnews.go.com/GMA/Books/story?id=125042&page=1
+http://abcnews.go.com/International/wireStory?id=418785
+http://abcnews.go.com/International/wireStory?id=444639
+http://abcnews.go.com/International/wireStory?id=881953
+http://abcnews.go.com/Politics/PollVault/story?id=144003&page=1
+http://abcnews.go.com/Politics/PollVault/story?id=178949
+http://abcnews.go.com/Politics/TheNote/story?id=156238
+http://abcnews.go.com/Politics/TheNote/story?id=213118
+http://abcnews.go.com/Politics/TheNote/story?id=579462
+http://abcnews.go.com/Politics/TheNote/story?id=741502
+http://abcnews.go.com/Politics/Vote2004/story?id=144003&page=1
+http://abcnews.go.com/Politics/story?id=178949
+http://abcnews.go.com/Politics/wireStory?id=872507
+http://abcnews.go.com/Technology/PollVault/story?id=850438
+http://abcnews.go.com/US/story?id=260587
+http://abcnews.go.com/US/wireStory?id=449137
+http://abcnews.go.com/US/wireStory?id=858311
+http://abcnews.go.com/sections/politics/Vote2004/kerry_gaining_poll_041004.html
+http://abcnews.go.com/sections/us/DailyNews/assistedsuicide_poll020319.html
+http://abcrc.stargate.ca/cfm/index.cfm?It=908&Id=3
+http://abeautifulrevolution.typepad.com/
+http://abilitymagazine.com/glover_interview.html
+http://abilitymagazine.com/paul_golf.html
+http://abob.libs.uga.edu/bobk/whiteo01.html
+http://about-france.com/
+http://about.commbank.com.au/group_display/0,1696,TS10682,00.html
+http://about.officemax.com/terms/index.shtml
+http://about.reuters.com/investors/events/pressreleases/index.asp?pressid=2366
+http://about.susu.org/article.php?title=Freshers'+Week+Committee+Minutes+for+22+October+2004
+http://about.susu.org/article.php?title=Union+Management+Board+Comittee+Minutes+for+19+May+2004
+http://aboutown.blogspot.com/
+http://aboutpublicrelations.net/basics.htm
+http://aboutsavingheat.com/diy.html
+http://aboutww2militaria.com/miltary_tours.htm
+http://abroere.xs4all.nl/pnp/C_MajorWounds.htm
+http://abroere.xs4all.nl/pnp/major_wounds.htm
+http://absoluteone.ljudmila.org/5.php
+http://absoluteone.ljudmila.org/galimberti_en.php
+http://absoluteshakespeare.com/guides/romeo_and_juliet/characters/romeo_and_juliet_characters_essay.htm
+http://abstractappeal.com/schiavo/infopage.html
+http://abyayala.nativeweb.org/suriname/suriname4.html
+http://aca.gr/paper32.htm
+http://academic.bellevue.edu/~career/covrlet3.htm
+http://academic.bellevue.edu/~career/intervue.htm
+http://academic.reed.edu/formosa/texts/Guillemard1886.html
+http://academic.scranton.edu/department/mhi/self_assessment.html
+http://academic.scranton.edu/department/wml/mediarequest.html
+http://academic.scranton.edu/faculty/CANNM1/intro.html
+http://academic.sun.ac.za/forlang/bergman/real/mission/h_rcc.htm
+http://academic.udayton.edu/race/06hrights/GeoRegions/Africa/Nambia01.htm
+http://academic.udayton.edu/race/LReviews/200501.htm
+http://academic.uofs.edu/department/psych/handbook/xiii.html
+http://academic.uofs.edu/faculty/vinson/take_two_cups_of_cofeee_and_call.htm
+http://academicaffairs.ucsd.edu/offices/planning/reports/PRTF/Report.htm
+http://academy.cos.edu/Info.htm
+http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/artofwar.html
+http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/com-lin.html
+http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/suntzu.html
+http://access.globalknowledge.com/tutorials.asp
+http://access.ncsa.uiuc.edu/Releases/03Releases/10.21.03_NCSA's_Don.html
+http://access.wa.gov/leg/2005/Feb/n200517_3250.aspx
+http://access1.sun.com/codesamples/JMS/JMS.html
+http://accnewsmedia.com/site/page.asp?TRACKID=&VID=1&CID=253&DID=974
+http://accnewsmedia.com/site/view.asp?TrackID=&VID=1&CID=8&DID=8&PSID=
+http://accnewsmedia.com/site/view.asp?TrackID=&VID=1&CID=8&DID=8&PSID=ACC
+http://accordionguy.blogware.com/blog/_archives/2004/5/26/76351.html
+http://accountant.intuit.com/products_services/prof_tax_products/index.aspx
+http://accounting.aol.careerbuilder.com/ag.ic/DC_Washington_Management.htm?radius=50
+http://accounting.aol.careerbuilder.com/ag.ic/Virginia_Alexandria_AccountsPayable.htm?radius=20
+http://accounting.aol.careerbuilder.com/ag.ic/Virginia_Fairfax?radius=10
+http://accounting.aol.careerbuilder.com/ag.ic/Virginia_Fairfax?radius=5
+http://accounting.aol.careerbuilder.com/ag.ic/Virginia_Reston?radius=5
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J3F51365MJ2HWGG03TQ
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J3G05F62Y74P9NTD39N
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8A4VK6SYSTY040QT28
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8D66375JR9L6H83NV5
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8H1K6676DHBXTHW5CV
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=JY0W876FR3343JVPVL
+http://accounting.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?Job_DID=J3W6VT636VGM7YYL5CB
+http://accounting.careerbuilder.com/ag.ic/Delaware_Wilmington_Accounting.htm?radius=10
+http://accounting.careerbuilder.com/ag.ic/Delaware_Wilmington_Accounting.htm?radius=5
+http://ace-o-spades.blogspot.com/2004_01_04_ace-o-spades_archive.html
+http://ace.acadiau.ca/~dreid/publications/proving/proving_to_explain.htm
+http://ace.acadiau.ca/~dshutler/BPCourse.html
+http://ace.mu.nu/archives/066152.php
+http://acharya.iitm.ac.in/mirrors/vv/werlings.html
+http://ackbarr.xoops.org/
+http://aclunc.org/voting/041019-factsheet.html
+http://acmehardware.com/HomeTips/Moving/index.aspx
+http://acrnet.org/acrlibrary/more.php?id=19_0_1_0_M
+http://acsa.net/onkerry.htm
+http://acsdevl.kennesaw.edu/access/printversion.asp?sto=170
+http://acsdevl.kennesaw.edu/access/printversion.asp?sto=172
+http://acsdevl.kennesaw.edu/access/story.asp?sto=170
+http://acsdevl.kennesaw.edu/access/story.asp?sto=172
+http://acsweb2.ucis.dal.ca/slis/links.htm
+http://act-sf.org/index.cfm?s_id=&pid=nev_pre_dea&pr=132
+http://actforvictory.org/ohiofraud.php
+http://action-figures.zensearch.com/
+http://action.aclu.org/AS_what_actions_accomplish
+http://actionadventure.about.com/od/celebrityinterviews/p/aasilverHOW.htm
+http://actionaidpakistan.org/Karachi%20Office/films.htm
+http://actionfigures.about.com/library/weekly/aa060397.htm
+http://actionnetwork.org/campaign/classrings
+http://actionnetwork.org/campaign/classrings_ewa
+http://actionscript-toolbox.com/svgnotes.php
+http://actiontales.com/mcelwain_b/shot.html
+http://actiontrip.com/index.phtml
+http://active-hardware.com/english/reviews/cdrom/CD932E.htm
+http://activistchat.com/phpBB2/viewtopic.php?t=4985&view=next
+http://activities.almawakeb.sch.ae/n4b/html/s_handbook.htm
+http://acts.cdac.in/actsonline/Website/Html_asp/Homepg/vlbro.htm
+http://acts2.oireachtas.ie/zza18y1993.1.html
+http://acts2.oireachtas.ie/zza7y1995.1.html
+http://acura-tl--accessories.ffind.servebeer.com/
+http://ad-clix.com/Headlines2Go/index.asp
+http://ad-rag.com/105692.php
+http://ad-rag.com/121192.php
+http://adam.about.com/reports/000029_1.htm
+http://adam.about.com/reports/000053_3.htm
+http://adamcadre.ac/calendar/11346.html
+http://adamcadre.ac/gull/gull-2f.html
+http://adamcadre.ac/if.html
+http://adastra.fotopages.com/
+http://adbusters.org/metas/eco/truecosteconomics/post-autistic.html
+http://adbusters.org/metas/psycho/prozacspotlight/debate/comments.html?page=11
+http://adcomblog.wharton.upenn.edu/admissions/application_strategy/
+http://add.about.com/b/a/177707.htm
+http://add.about.com/cs/adultrelationship/a/relationships.htm
+http://add.about.com/cs/foradults/a/selfestteemadul.htm
+http://adelaideexchange.com.au/comp3.html
+http://adhdmom.net/
+http://admin-clerical.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8G4Z1670D8BJR9LG1Y
+http://admin-clerical.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8H61Q62LYDSDTYQC1Z
+http://admin-clerical.careerbuilder.com/ac.ic/NewJersey_EastBrunswick_ExecutiveAssistant.htm
+http://admin-clerical.careerbuilder.com/ac.ic/NorthCarolina_Concord/
+http://admin-clerical.careerbuilder.com/ac.ic/NorthCarolina_Mooresville/
+http://admin-clerical.careerbuilder.com/ac.ic/Pennsylvania_Lancaster_DataEntry.htm
+http://admin-clerical.careerbuilder.com/ac.ic/Pennsylvania_Lebanon_DataEntry.htm
+http://admin-clerical.careerbuilder.com/ac.ic/Pennsylvania_York_Clerk.htm
+http://admin-clerical.careerbuilder.com/ac.ic/SouthCarolina_RockHill/
+http://admin.denvergov.org/jump_searchables.asp
+http://admin.foresight.gov.uk/servlet/Controller/ver=634/userid=2/chap4.html
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_printfriendly.asp?id=2174
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?Search=220&Submit=GO&id=719
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=1363
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=2174
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=2174&paget=section
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=2848
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=719
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=719&paget=section
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=816
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=974
+http://admin.urel.washington.edu/uweek/archives/issue/uweek_story_small.asp?id=974&paget=section
+http://administrators.net/chatboard/topic6099/6.13.05.07.24.53.html
+http://admissions.creighton.edu/undergraduate/about/history_memoirsCH4.asp
+http://admissions.uoregon.edu/returning.html
+http://adomonde.zzn.com/email/french/noframes/help/compose.html
+http://adoption.about.com/
+http://adoption.about.com/od/birthfirstmothers/a/diarybirthmom_3.htm
+http://adoptionshop.com/
+http://adr.navy.mil/adr/presmemo.asp
+http://adrianwalsh.com.au/newslet802.htm
+http://adrr.com/living/ss_8.htm
+http://aduffdelnooga.chattablogs.com/archives/2004_08.html
+http://adulted.about.com/cs/selfstudy/a/self_study_plan.htm
+http://adultfan.nexcess.net/aff/story.php?no=21793
+http://adultfan.nexcess.net/aff/story.php?no=544176446
+http://adultfriendfinder.com/intgroups/gi1093/acshow_group.html
+http://adultfriendfinder.com/intgroups/gi4/acshow_group.html
+http://advance.spu.edu/Ways/TrustAnnuities.asp
+http://advance.uri.edu/quadangles/sum2003/story2.htm
+http://adventist.org.au/services/health/living_healthy/at-risk_behaviours
+http://adventure.visitscotland.com/activities/earth/mountainbiking/
+http://advertising.ducttapemarketing.com/
+http://advice.cuna.org/research_review/research_review_27.html
+http://advice7.com/health_fitness/diets.html
+http://advisers.macquarie.com.au/advisers/spec_products/alternative/mgift2_detail.htm
+http://advisers.macquarie.com.au/advisers/spec_products/instalments/regular/regular_detail.htm
+http://advisers.macquarie.com.au/advisers/spec_products/professional_series/morgan_stanley_global_franchise_fund_msgff.htm
+http://advising.wichita.edu/lasac/pubs/aah/ecomp.htm
+http://advising.wichita.edu/lasac/pubs/gep/whatis.htm
+http://advisor.com/sp/15062
+http://advisor.com/whome.nsf/w/MMBsubinfo
+http://ae.trendmicro-europe.com/enterprise/security_info/overview.php
+http://aec.cadalyst.com/aec/article/articleList.jsp?categoryId=6705
+http://aem.asm.org/cgi/content/full/64/7/2760
+http://aem.asm.org/cgi/content/full/69/10/6073
+http://aem.asm.org/cgi/content/full/71/2/679
+http://aeonserv.com/forum/viewtopic.php?forum=2&showtopic=592
+http://aeonserv.com/forum/viewtopic.php?forum=2&showtopic=592&fromblock=yes
+http://aep.latech.edu/curriculum/CR15531.HTM
+http://aerade.cranfield.ac.uk/subject-listing/esdu/ES198.html
+http://aerade.cranfield.ac.uk/subject-listing/ssstgen.html
+http://aerg.canberra.edu.au/pub/aerg/herps/fnfraser.htm
+http://aes.missouri.edu/fsrc/research/alfalfa.stm
+http://afe.easia.columbia.edu/chinawh/web/s5/s5_5.html
+http://afe.easia.columbia.edu/chinawh/web/s8/
+http://affections.blogspot.com/
+http://afgen.com/mugabe_interview.html
+http://afl.com.au/default.asp?pg=coachesbox&spg=display&articleid=133123
+http://afl.com.au/default.asp?pg=pastallaustralian&spg=display&articleid=126515
+http://afognak.org/education/dw_lesson5.php
+http://africaguide.com/travel/package/1056.htm
+http://africantears.netfirms.com/roybennet.htm
+http://afrindiemum.typepad.com/afrindiemum/2004/10/
+http://afroamhistory.about.com/library/prm/blsoldiersinblue1.htm
+http://afronord.tripod.com/thr/dict.html
+http://afscme512.org/Minutes%2012_09_2002.htm
+http://afterburn.burningman.com/03/bizserv/arctica_ice.html
+http://aftergrogblog.blogs.com/agb/
+http://afterhoursconsulting.org/solutions.mgi
+http://ag.arizona.edu/pubs/garden/az1255/
+http://ag.ca.gov/ethics/accessible/honor.htm
+http://ag.udel.edu/frec/grad/ORgradAlumni.htm
+http://againstred.blogspot.com/
+http://againstthegrain.blogs.com/atg/2005/04/be_bold_and_pow.html
+http://agblog.com/category/currently/
+http://agelesslearner.com/intros/informal.html
+http://agelessmarketing.typepad.com/ageless_marketing/2005/04/why_every_marke.html
+http://agelessmarketing.typepad.com/ageless_marketing/2005/05/belief_follows_.html
+http://agency.osha.eu.int/focal_points/index_da.htm
+http://agency.osha.eu.int/focal_points/index_en.htm
+http://agency.osha.eu.int/focal_points/index_fr.htm
+http://agency.osha.eu.int/focal_points/index_nl.htm
+http://agency.osha.eu.int/news/press_releases/en/20_04_2005/
+http://agency.travelwisconsin.com/PR/Industry_News/NowYouKnow/nowyouknow3.shtm
+http://agency.travelwisconsin.com/Research/MarketResearch_Active/fallinmarket02.shtm
+http://agents.umbc.edu/agentslist/archive/1994/0002.html
+http://aggie-horticulture.tamu.edu/extension/ornamentals/protect/protect.html
+http://aggie-horticulture.tamu.edu/plantanswers/misc/saying.html
+http://aggie-horticulture.tamu.edu/plantanswers/publications/houseplant/houseplant.html
+http://aggie-horticulture.tamu.edu/tisscult/microprop/facilities/microlab.html
+http://aggieengineer.tamu.edu/development/methodsofgiving.html
+http://aggv.bc.ca/info-terms-and-conditions.htm
+http://aginfo.psu.edu/News/february03/tree.html
+http://aginfo.psu.edu/PSP/01psp/pr/01132_pr.html
+http://agirlandagun.typepad.com/
+http://agirlandagun.typepad.com/a_girl_and_a_gun/
+http://agnews.tamu.edu/dailynews/stories/CROP/Apr1800a.htm
+http://agnews.tamu.edu/dailynews/stories/CROP/May1402a.htm
+http://agog.net/batgirl/stories/RD1.html
+http://agonis.myrrh.net/
+http://agonist.org/section/US_Misc_IR
+http://agpa.uakron.edu/k12/best_practices/using_writing.html
+http://agr.wa.gov/FoodAnimal/CustomMeats/Questions.htm
+http://agricoop.nic.in/dacdivision/tmop/Tmop_isopom.htm
+http://agriculture.dictonarypage.co.uk/
+http://agriculture.house.gov/info/glossary/m.htm
+http://agriculture.senate.gov/Hearings/Hearings_1997/cutter.htm
+http://agriculture.tradeworlds.com/web_category_1035.html
+http://agrifor.ac.uk/browse/cabi/1193ae5649d3e3cb10282fcf55623ac5.html
+http://agrifor.ac.uk/browse/cabi/5229e9d3e6c3fdf5520e279fe317bc20.html
+http://agrifor.ac.uk/hb/5e2df4b157650aa635b78f211a197cdf.html
+http://agrifor.ac.uk/hb/5eb198078332fca7cdcc1e2d867fef94.html
+http://agrifor.ac.uk/hb/9cdfecdeb928393a24d4d2c358fb54f9.html
+http://agrifor.ac.uk/hb/e387a4f1cae79e2ce96ad28656666109.html
+http://agrifor.ac.uk/text/hb/6ef0ea6f02197328f842f5c54c6ec9b6.html
+http://agritrade.cta.int/rice/executive_brief.htm
+http://agronomy.ucdavis.edu/uccerice/WATER/risftm02.htm
+http://ah.bfn.org/a/AMH/main/4196/
+http://ah.bfn.org/h/erieC/percy/percy.html
+http://ah.brookes.ac.uk/news/index.php?id=10
+http://ah.brookes.ac.uk/publishing/staff/smith.html
+http://ah.phpwebhosting.com/h/humboldt.html
+http://ahc.uwyo.edu/eduoutreach/citizen/penney.htm
+http://ahds.ac.uk/creating/case-studies/newham/
+http://ahds.ac.uk/creating/information-papers/writing-appendix/
+http://ahds.ac.uk/history/creating/information-papers/writing-appendix/
+http://ahds.ac.uk/performingarts/creating/information-papers/writing-appendix/
+http://ahweb.nsd.org/information/supplies
+http://ai-depot.com/Biology/397.html
+http://ai-depot.com/Book/Frankenstein.html
+http://ai-depot.com/Games/403.html
+http://ai.eecs.umich.edu/people/conway/BioSketch.html
+http://ai.eecs.umich.edu/people/conway/Retrospective4.html
+http://ai.eecs.umich.edu/people/conway/TSsuccesses/TSsuccesses.html
+http://aia.lackland.af.mil/homepages/pa/spokesman/Oct02/heritage.cfm
+http://aibd.org/desline/legislative.htm
+http://aibi.gospelcom.net/aibi/saygrace.htm
+http://aibi.gospelcom.net/tmk/tmk17_christian_peacemaking.htm
+http://aic.stanford.edu/library/online/brochures/paper.html
+http://aic.stanford.edu/sg/bpg/annual/v01/bp01-05.html
+http://aic.stanford.edu/sg/bpg/annual/v06/bp06-13.html
+http://aic.stanford.edu/sg/bpg/annual/v07/bp07-02.html
+http://aids.about.com/cs/prevention/a/myths.htm
+http://ainiunai.blogdrive.com/
+http://ainsley.blog-city.com/
+http://aipm.wellnesscheckpoint.com/library/banner_main.asp?P=108832AHH29&SAImode=D&SAI=525
+http://air.transportation.jobs.jobsearchsite.com/
+http://airconsumer.ost.dot.gov/publications/flyrights.htm
+http://airhook.org/protocol.html
+http://airweb.org/page.asp?page=140
+http://airy.phy.ulaval.ca/~pystl/Subhumans/Cradle.htm
+http://airy.phy.ulaval.ca/~pystl/The_Hives/Veni.htm
+http://ais.web.cern.ch/ais/apps/ppt/apt/examples/apt_online_examples.html
+http://ais.web.cern.ch/ais/projs/docleg/welcome.html
+http://aisb.aber.ac.uk/ImitationSchedule.html
+http://aitecafrica.com/act2003/opening-speech.html
+http://ajgp.psychiatryonline.org/cgi/content/full/10/3/311
+http://ajheatwole.com/guide/log2/log23.htm
+http://ajp.psychiatryonline.org/cgi/content/abstract/157/9/1445
+http://ajp.psychiatryonline.org/cgi/content/full/156/4/610
+http://ajp.psychiatryonline.org/cgi/content/full/157/7/1184
+http://ajp.psychiatryonline.org/cgi/content/full/157/9/1445
+http://ajp.psychiatryonline.org/cgi/content/full/159/10/1752
+http://ajp.psychiatryonline.org/cgi/content/full/161/9/1703
+http://ajrp.awm.gov.au/ajrp/ajrp2.nsf/WebI/Chapters/$file/Chapter4.pdf?OpenElement
+http://ajvasaris.com/blog/
+http://akak.essortment.com/historyamerica_rdtf.htm
+http://akma.disseminary.org/
+http://akma.disseminary.org/archives/001157.html
+http://akma.disseminary.org/archives/001518.html
+http://akma.disseminary.org/archives/2002_06_02_blogarch.html
+http://akmhcweb.org/Articles/TriptychConventionNo10.htm
+http://akosut.com/log/2003/11/
+http://akuma.dynamiqvision.com/
+http://al-islam.org/alpha.php?sid=600681910&cat=213&alpha_id=153
+http://al-islam.org/alpha.php?sid=600681910&cat=213&alpha_id=154
+http://al-islam.org/alpha.php?sid=909777665&cat=213&alpha_id=153
+http://al-islam.org/alpha.php?sid=909777665&cat=213&alpha_id=154
+http://alabut.com/nonsense/2005/03/learn-ruby-in-3-weeks.html
+http://alac.icann.org/correspondence/structures-app.htm
+http://alameda.abracat.com/c2/lgcity/results/index.xml
+http://alamos.math.arizona.edu/ODEApplet/manual.html
+http://alan.blog-city.com/read/1003011.htm
+http://albalagh.net/qa/moon_qa.shtml
+http://albertapropagandists.blogspot.com/
+http://albumen.stanford.edu/library/monographs/monckh/chap06.html
+http://albumen.stanford.edu/library/monographs/monckh/chap08.html
+http://albumen.stanford.edu/library/monographs/monckh/chap13.html
+http://albumen.stanford.edu/library/monographs/monckh/chap15.html
+http://albumen.stanford.edu/library/monographs/sunbeam/chap24.html
+http://albuquerque.bizjournals.com/albuquerque/stories/2004/11/22/daily13.html?jst=b_ln_hl
+http://alcalc.oupjournals.org/cgi/content/full/34/4/511
+http://alcalc.oupjournals.org/cgi/content/full/38/5/415
+http://alcalc.oupjournals.org/cgi/content/full/39/6/509
+http://alcoholism.about.com/cs/basics/l/blnaa16.htm
+http://alcoholism.about.com/cs/info2/a/blebook.htm
+http://alcyone.cc.uch.gr/~kosmas/Helen/helen_schemes.html
+http://aleph0.clarku.edu/huxley/CE8/ExChal.html
+http://aleph0.clarku.edu/huxley/SM2/Scorp.html
+http://aleph0.clarku.edu/huxley/UnColl/Nature/Forefa.html
+http://aleph0.clarku.edu/huxley/UnColl/PMG/PMGetal/THH-RB.html
+http://alex.halavais.net/news/index.php?p=794
+http://alfrankenweb.com/readerreviews.html
+http://algernon-j.sourceforge.net/tutorial/3b.html
+http://ali.apple.com/ali_sites/deli/exhibits/1000066/The_Lesson.html
+http://ali.apple.com/ali_sites/deli/exhibits/1000166/Reflections.html
+http://ali.apple.com/ali_sites/deli/exhibits/1000315/Professional_Standards.html
+http://ali.apple.com/ali_sites/deli/exhibits/1000740/Professional_Standards.html
+http://ali.apple.com/ali_sites/glefli/exhibits/1000738/A_Barrel_of_..._Worms!.html
+http://alison.knitsmiths.us/blog_fantastic_fiber_voyage.html
+http://alison.knitsmiths.us/cat_fantastic_fiber_voyage.html
+http://alistair.cockburn.us/crystal/articles/cmdp1/coffeemachineproblem1.htm
+http://allaboutfrogs.org/info/doctor/common.html
+http://allaboutsikhs.com/way/marriage.htm
+http://allabouttrey.blogspot.com/2005/05/happy-anniversary.html
+http://allanthinks.typepad.com/allanthinks/
+http://allanturner.com/grace.html
+http://allard.senate.gov/issues/item.cfm?id=568&rands_type=3
+http://allearsnet.com/acc/faq_bc1.htm
+http://allearsnet.com/ae/issue006.htm
+http://allearsnet.com/pl/apass.htm
+http://allearsnet.com/tp/mk/mk_char.htm
+http://allearsnet.com/tp/mk/tea.htm
+http://allegrophoto.com/humansac.htm
+http://allensblog.typepad.com/allens_blog/2005/01/commandment_5_c.html
+http://allensblog.typepad.com/allens_blog/2005/03/commandment_7_l.html
+http://allfreeessays.com/student/Northern_Ireland_Conflict-Religion_vs_Politics.html
+http://alliancefoundation.roswellpark.org/Document.asp?lid=2667
+http://alliancefoundation.roswellpark.org/document_2667_248.html
+http://allied.blogspot.com/archives/2003_10_12_allied_archive.html
+http://allmuskie.com/awards/award4a.html
+http://allnurses.com/forums/showthread.php?t=108251&goto=nextnewest
+http://allnurses.com/forums/showthread.php?threadid=107387
+http://allpsych.com/drugs.html
+http://allrecipes.com/advice/coll/thanks/articles/651P1.asp
+http://allzone4dvd.net/review_details.htm?id=1253
+http://almashriq.hiof.no/lebanon/600/610/617/lebanese_nose.html
+http://alnyethelawyerguy.typepad.com/al_nye_the_lawyer_guy/2004/10/pretty_dead.html
+http://alomax.free.fr/posters/vintimiglia/
+http://alop.atspace.com/tui/mundell-press.html
+http://alpha.furman.edu/~benson/docs/clay.htm
+http://alpha2.bmc.uu.se/new/local_html/bobscript/bob/bobscript.doc.ch5.html
+http://alpie.net/blog/html/category/Social+Capital.html
+http://als.weblab.org/cgi-bin/weblab/lovestories/salon3.0/public.cgi?mode=Thread_First&thread=7&salon=Relationship+Group+1
+http://alsonetworks.com/tos.shtml
+http://alt.com/blog/clynn911/?trlid=%2Fsite%2Ffiles%2Fbdsm%2Fcron%2Fenglish%2Fblog_most_recent_blogs.txt-72
+http://alt.samhsa.gov/samhsa_news/VolumeXII_5/article7.htm
+http://alt.samhsa.gov/samhsa_news/VolumeXII_5/text_only/article7txt.htm
+http://alt.venus.co.uk/weed/writings/squatjs.html
+http://alte-stadtmauer.com/english/imprint.html
+http://altercom.com/faq.htm
+http://alternativetentacles.com/news.php?page=2&news_section=JELLO&window_size=15&sd=egdKOXe7OS80ahmSMn0
+http://alternet.org/election04/19366/
+http://alterslash.org/
+http://althouse.blogspot.com/
+http://althouse.blogspot.com/2004/04/understanding-politics-with-brain.html
+http://althouse.blogspot.com/2004_01_01_althouse_archive.html
+http://althouse.blogspot.com/2004_11_01_althouse_archive.html
+http://althouse.blogspot.com/2005/01/its-so-unusual-to-be-standing-when.html
+http://althouse.blogspot.com/2005/02/simulblogging-american-idol_09.html
+http://althouse.blogspot.com/2005/04/judicial-nominees-and-playing-religion.html
+http://althouse.blogspot.com/2005/06/are-you-math-teachers-sure-youre.html
+http://altmedangel.com/melaton.htm
+http://altmedicine.about.com/cs/conditionsatod/a/Diabetes.htm
+http://altmedicine.about.com/cs/conditionsitoq/a/Insomnia.htm
+http://altoona.jobs.topusajobs.com/
+http://altreligion.about.com/library/glossary/symbols/bldefsrosecross.htm
+http://altspace.aresinstitute.org/archives/000010.html
+http://altweb.jhsph.edu/meetings/pain/morton.htm
+http://altweb.jhsph.edu/publications/humane_exp/chap6d.htm
+http://alum.mit.edu/ne/whatmatters/200107/
+http://alum.mit.edu/ne/whatmatters/200202/
+http://alum.mit.edu/ne/whatmatters/200407/
+http://alum.mit.edu/ne/whatmatters/200408/
+http://alumnae.smith.edu/mission/about_us.htm
+http://alumni.nd.edu/clubs/notes_i.html
+http://alumni.nd.edu/~ndc_scp/other_help.htm
+http://alumni.oregonstate.edu/eclips/history/osuhistory04.html
+http://alumni.umich.edu/events/QA05.php
+http://alumni.umich.edu/home/forwarding.php
+http://alumnus.caltech.edu/~seppley/
+http://alumweb.mit.edu/classes/1953/50th_Questionnaire.html
+http://alumweb.mit.edu/classes/1966/necrology.html
+http://alwayswow.blogspot.com/2004/12/some-thoughts-about-online-banking-and.html
+http://alzheimers.about.com/od/frustration/
+http://alzheimers.about.com/od/frustration/index_a.htm
+http://alzheimers.about.com/od/givingsupport/a/med_reseach.htm
+http://alzheimers.infopop.cc/eve/ubb.x/a/tpc/f/443100732/m/272108133/r/647105574
+http://alzonline.net/en/reading/memory/guide_ch6.php
+http://amadeus.bvdep.com/amadeus/top20/report_16.htm
+http://amarok.kde.org/blog/
+http://amazing-space.stsci.edu/resources/explorations/blackholes/teacher/overview.shtml
+http://amazing-space.stsci.edu/resources/explorations/galaxies-galore/teacher/grabbag.html
+http://amazing-space.stsci.edu/resources/qa/statistics_p2.php.p=Astronomy+basics@,eds,astronomy-basics.php%3EQ*amp*A:+Statistics@,resources,qa,statistics.php&a=,eds
+http://ambernews.bigthicketdirectory.net/main.html
+http://amberskyline.com/treasuremaps/pajama-genealogy-course_4.html
+http://ambientirony.mu.nu/
+http://ambivablog.typepad.com/
+http://ambivablog.typepad.com/ambivablog/2005/01/intelligent_des.html
+http://amblesideonline.homestead.com/PRMemoryForgetfulness.html
+http://amcofa.org/reviews/indextitles.html
+http://amcop.blogspot.com/2005/01/choice-words.html
+http://americablog.blogspot.com/
+http://americablog.blogspot.com/2005/02/full-text-of-bushs-sotu.html
+http://americablog.blogspot.com/2005/02/man-called-jeff.html
+http://americablog.blogspot.com/2005/04/take-action-microsoft-abandons-gays.html
+http://americablog.blogspot.com/archives/2004_07_01_americablog_archive.html
+http://americablog.blogspot.com/archives/2004_07_25_americablog_archive.html
+http://americablog.blogspot.com/archives/2004_10_31_americablog_archive.html
+http://americablog.blogspot.com/archives/2004_11_01_americablog_archive.html
+http://americanart.si.edu/collections/exhibitions.cfml
+http://americancivilwar.com/colored/histofcoloredtroops.html
+http://americancivilwar.com/documents/williamson_address.html
+http://americancivilwar.com/women/rg.html
+http://americandigest.org/mt-archives/005057.php
+http://americaneconomicalert.org/view_art.asp?Prod_ID=1902
+http://americanfuture.typepad.com/american_future/2005/01/who_provides_fi.html
+http://americanhibiscus.org/ahsmins.htm
+http://americanhistory.si.edu/archives/d5300mh5.htm
+http://americanidolauditiontraining.blogs.com/marisa/2004/07/song_ideas_anyo.html
+http://americanidolauditiontraining.blogs.com/marisa/2005/02/no_more_america.html
+http://americanindian.net/newsletter0404.html
+http://americanprinter.com/consumables/paper/printing_nine_ideas_saving/
+http://americanradioworks.publicradio.org/features/congtravel/a1.html
+http://americanradioworks.publicradio.org/features/congtravel/d1.html
+http://americanradioworks.publicradio.org/features/marshall/martin.html
+http://americanradioworks.publicradio.org/features/noplacetohide/dinh.html
+http://americanradioworks.publicradio.org/features/noplacetohide/thomas.html
+http://americanradioworks.publicradio.org/features/oh_freedom/interview_robinson.html
+http://americanradioworks.publicradio.org/features/prestapes/mlk_speech.html
+http://americanradioworks.publicradio.org/features/remembering/north.html
+http://americanradioworks.publicradio.org/features/remembering/whitesremember.html
+http://americanradioworks.publicradio.org/features/y2k/notebook.html
+http://americanthinker.com/articles.php?article_id=3789
+http://americanthinker.com/articles_print.php?article_id=3789
+http://ameriyank.com/cafe/cafepresslist.html
+http://amleft.blogspot.com/archives/2004_04_01_amleft_archive.html
+http://ams.allenpress.com/amsonline/?request=get-document&doi=10.1175%2F1520-0434(1997)012%3C0005:SSFCTH%3E2.0.CO%3B2
+http://ams.confex.com/ams/AFAPURBBIO/techprogram/paper_80442.htm
+http://amyesq.blogspot.com/
+http://amyesq.blogspot.com/2005_06_01_amyesq_archive.html
+http://amylovesbooks.blogspot.com/
+http://amywelborn.typepad.com/openbook/
+http://amywelborn.typepad.com/openbook/2004/08/embryonic_polic.html
+http://amywelborn.typepad.com/openbook/2005/01/the_totalitaria.html
+http://amywelborn.typepad.com/openbook/2005/01/umokay.html
+http://amywilson.blogspot.com/2003_08_10_amywilson_archive.html
+http://ana.ong.ro/romana/centrulana/editura/rev700/dpascaleng700.html
+http://anabaptist.lifewithchrist.org/
+http://analogik.com/article_stencil.asp
+http://analysis.itmanagersjournal.com/analysis/05/02/03/1918223.shtml?tid=107&tid=112
+http://analysis.itmanagersjournal.com/article.pl?sid=05/02/03/1918223&tid=107
+http://analyzer.depaul.edu/paperplate/activities.htm
+http://anbat.toonzone.net/bb/sotlc.html
+http://ancientegypt.hypermart.net/celestialfish/
+http://ancienthistory.about.com/library/prm/blbelisariusd.htm
+http://andolan.net/member-stories.htm
+http://andrewcoyne.com/archives/003839.php
+http://andrewcoyne.com/columns/FinancialPost/1985-87/19860215.html
+http://andrewcoyne.com/columns/NationalPost/2002/20020816.html
+http://andrewolmsted.com/archives/000650.html
+http://andrewolmsted.com/archives/2005_01.html
+http://andrewsullivan.com/
+http://andrewvis.blogspot.com/
+http://andrewvis.blogspot.com/2004_05_01_andrewvis_archive.html
+http://andromeda.rutgers.edu/~jlynch/18th/history.html
+http://andromeda.rutgers.edu/~jlynch/Papers/dict.html
+http://andromeda.rutgers.edu/~jlynch/Papers/psalm.html
+http://andromeda.rutgers.edu/~jlynch/Texts/BLJ/b379.html
+http://andromeda.rutgers.edu/~jlynch/Texts/BLJ/b538.html
+http://andromeda.rutgers.edu/~jlynch/Texts/sprat.html
+http://andromeda.rutgers.edu/~jlynch/Writing/c.html
+http://andromeda.rutgers.edu/~jlynch/Writing/n.html
+http://andtheylivedhappilyeverafter.com/29.htm
+http://andukar.org/
+http://andykaufmanreturns.blogspot.com/
+http://andyshowto.com/
+http://angel.1jh.com/library/shatter-05.shtml
+http://angeles.sierraclub.org/news/cougars.asp
+http://angelingo.usc.edu/issue03/politics/a_chasing.php
+http://angelsandfrogs.blog-city.com/
+http://angermanagement.mu.nu/archives/029786.html
+http://anglicansonline.org/
+http://anglicansonline.org/news/archives/2004d.html
+http://animal-collectibles-cat.ioffer.com/c/DE/Animals-151500
+http://animal-rights.net/ar-views/crucial-points.php
+http://animal-world.com/encyclo/reptiles/information/SelectingYourLizard.htm
+http://animal.discovery.com/guides/reptiles/turtles/slider.html
+http://animalbehaviour.net/JudithKBlackshaw/Chapter3c.htm
+http://animaldiversity.ummz.umich.edu/site/animal_names/more_about_names.html
+http://animalpetdoctor.homestead.com/Heart.html
+http://animatedtv.about.com/cs/merchandis1/gr/spdvd2.htm
+http://animation.about.com/od/recommendedreading/a/keepingup.htm
+http://animenewsnetwork.com/
+http://annamarketing.com/25.html
+http://anndaniels.editme.com/days16-20
+http://anneslimo.com/Limo%20FAQ.htm
+http://annevankesteren.nl/2004/07/bandwidth
+http://annevankesteren.nl/2005/04/quotes-in-php
+http://annewhitney.typepad.com/beach_house_rules/2004/07/
+http://annezook.com/archives/001264.php
+http://annezook.com/archives/001353.php
+http://annualreport.bhpbilliton.com/2004/ltd/repository/overview/chiefExecutiveOfficersReport.asp
+http://annualreport.bhpbilliton.com/2004/plc/repository/overview/chiefExecutiveOfficersReport.asp
+http://anomalies-unlimited.com/Jackson.html
+http://anomalyinfo.com/articles/sa00043.shtml
+http://anonymouslawyer.blogspot.com/2005_05_01_anonymouslawyer_archive.html
+http://answerbook.somix.com/webnm/manual_ch20.html
+http://answercenter.ebay.com.sg/forum.jsp?forum=1&start=15&thRange=15
+http://answering-islam.org.uk/Books/Subhan/Bio/part14.htm
+http://answering-islam.org.uk/Quran/Science/embryo.html
+http://answers.google.com/answers/threadview?id=156842
+http://answers.google.com/answers/threadview?id=194231
+http://answers.google.com/answers/threadview?id=2112
+http://answers.google.com/answers/threadview?id=295993
+http://answers.google.com/answers/threadview?id=344090
+http://answers.google.com/answers/threadview?id=350861
+http://answers.google.com/answers/threadview?id=35289
+http://answers.google.com/answers/threadview?id=36724
+http://answers.google.com/answers/threadview?id=369714
+http://answers.google.com/answers/threadview?id=410556
+http://answers.google.com/answers/threadview?id=419211
+http://answers.google.com/answers/threadview?id=441951
+http://answers.google.com/answers/threadview?id=450902
+http://answers.google.com/answers/threadview?id=453634
+http://answers.google.com/answers/threadview?id=459133
+http://answers.google.com/answers/threadview?id=459805
+http://answers.google.com/answers/threadview?id=502406
+http://answers.google.com/answers/threadview?id=5128
+http://answers.google.com/answers/threadview?id=517192
+http://answers.google.com/answers/threadview?id=517422
+http://answers.google.com/answers/threadview?id=519996
+http://answers.google.com/answers/threadview?id=522571
+http://answers.google.com/answers/threadview?id=522962
+http://answers.google.com/answers/threadview?id=523914
+http://answers.google.com/answers/threadview?id=526404
+http://answers.google.com/answers/threadview?id=530481
+http://answers.google.com/answers/threadview?id=532016
+http://answers.google.com/answers/threadview?id=532376
+http://answers.google.com/answers/threadview?id=533908
+http://answers.google.com/answers/threadview?id=536728
+http://answers.google.com/answers/threadview?id=6100
+http://answers.org/cgibin/wwwboard.pl?noframes;read=381
+http://answers.org/news/index.php?topic=science
+http://anthonyisright.blogspot.com/
+http://anthro.palomar.edu/homo/homo_2%20.htm
+http://anthro.palomar.edu/marriage/marriage_4.htm
+http://antipolygraph.org/hearings/senate-judiciary-1997/richardson-statement.shtml
+http://antipolygraph.org/statements/statement-025.shtml
+http://antiqueradios.com/forums/Forum5/HTML/002655.html
+http://antiquerestorers.com/SALE.htm
+http://antisubjugator.blogspot.com/2005/06/thanks-america.html
+http://antiwar.com/lind/?articleid=3120
+http://antiwar.com/malic/
+http://antoine.frostburg.edu/chem/senese/101/measurement/index.shtml
+http://antwrp.gsfc.nasa.gov/htmltest/jbonnell/www/grbhist.html
+http://anubis4_2000.tripod.com/3rdFloorStranger.htm
+http://anulib.anu.edu.au/clusters/ssh/lac/ecglac/ecg990414.html
+http://anywhere.tennessee.edu/online/generalinfo.htm
+http://ao.nictusa.com/ao/no/770015.html
+http://ao.nictusa.com/ao/no/780039.html
+http://ao.osa.org/ViewMedia.cfm?id=31130&seq=0
+http://aol.businessweek.com/bwdaily/dnflash/dec2003/nf20031215_2564_db014.htm
+http://aol.princetonreview.com/college/finance/articles/smart/impcredit.asp
+http://aolp.tamu.edu/apps.htm
+http://aolsvc.bookreporter.aol.com/wom/wom-010525.asp
+http://aolsvc.bookreporter.aol.com/wom/wom-010810.asp
+http://aolsvc.bookreporter.aol.com/wom/wom-020201.asp
+http://aolsvc.bookreporter.aol.com/wom/wom-030822.asp
+http://aolsvc.bookreporter.aol.com/wom/wom-040109.asp
+http://aolsvc.bookreporter.aol.com/wom/wom-040227.asp
+http://aolsvc.health.webmd.aol.com/content/article/99/105124.htm
+http://aolsvc.health.webmd.aol.com/content/pages/16/98759
+http://aolsvc.health.webmd.aol.com/hw/diet_and_nutrition/aa158966.asp?printing=true
+http://aolsvc.health.webmd.aol.com/hw/raising_a_family/nord976.asp
+http://aolsvc.news.aol.com/entertainment/article.adp?id=20050615071709990006&_ccc=4&cid=918
+http://aolsvc.news.aol.com/entertainment/article.adp?id=20050615071709990006&_ccc=5&cid=459
+http://aolsvc.news.aol.com/sports/article.adp?id=20041123145809990012&cid=1079
+http://aolsvc.salary.aol.com/careersandwork/salary/articles/atcl_careeradvice.asp?atc=246
+http://aomw.org/
+http://aotearoa.wellington.net.nz/back/tumoana/tumoana2.html
+http://ap.washingtontimes.com/dynamic/stories/I/IRAQ?SITE=DCTMS&SECTION=HOME
+http://ap.washingtontimes.com/dynamic/stories/I/ISRAEL_PALESTINIANS?SITE=DCTMS&SECTION=HOME
+http://ap.wwltv.com/dynamic/fronts/TOPSTORIES?SITE=WWL&TEMPLATE=USHEADS.html
+http://ap_history_online.tripod.com/apush2.htm
+http://apartments.uchicago.edu/troubleshooting/utilities.html
+http://apcd.anu.edu.au/faq/
+http://ape10.blogspot.com/
+http://apg.cfw2.com/article.asp?content_id=6778
+http://apha.confex.com/apha/132am/techprogram/paper_92296.htm
+http://api-ec.api.org/about/index.cfm?bitmask=001002000000000000
+http://api-ec.api.org/about/index.cfm?bitmask=001002001000000000
+http://apls.tripod.com/
+http://apnews.myway.com/article/20050416/D89G83882.html
+http://apnews.myway.com/article/20050429/D89OVOUO0.html
+http://apnews.myway.com/article/20050509/D89VKE6G0.html
+http://apnews.myway.com/article/20050521/D8A7MPFG0.html
+http://apnews.myway.com/article/20050601/D8AF1OO80.html
+http://apnews.myway.com/article/20050608/D8AJ5UB80.html
+http://apodion.com/vad/article.php?id=27&aid=126
+http://apollo.ogis.state.me.us/faq/faq.asp?fn=16
+http://apologia.gospelcom.net/html/reader_res.html
+http://app.feedback.gov.sg/asp/new/new0001.asp?id=481
+http://app.ica.gov.sg/serv_visitor/student_pass/student_pass_app.asp
+http://app.mfa.gov.sg/internet/press/view_press.asp?post_id=1045
+http://app.mfa.gov.sg/internet/press/view_press_print.asp?post_id=1045
+http://app.mof.gov.sg/news_speeches/speechdetails.asp?speechid=94
+http://app.nea.gov.sg/cms/htdocs/category_sub.asp?cid=204
+http://app.nea.gov.sg/cms/htdocs/category_sub.asp?cid=67
+http://app.sprinter.gov.sg/data/pr/2004091801.htm
+http://app.sprinter.gov.sg/data/pr/2005011399.htm
+http://app01.ica.com.au/privacy.jsp
+http://app1.chinadaily.com.cn/star/2004/0401/bz11-nat.html
+http://app2.learning.sohu.com/education/papers/71/514/view.php
+http://appl.nasa.gov/ask/issues/17/stories/17_fineline_bothwell.html
+http://appl.nasa.gov/ask/issues/20/features/20_morning_tibbetts.html
+http://appl003.lsu.edu/design/artdesign.nsf/$Content/Resources?OpenDocument
+http://apple.csie.ncku.edu.tw/gas/public_html/meke/patternInstances.jsp?name=In%20addition%20to&id=140160&category=0
+http://apple2history.org/parodies/a2pie.html
+http://applejournal.com/var005.htm
+http://applematters.com/index.php/section/comments/apple_computer_is_piracy_the_pathway_to_profits/
+http://applications.edmunds.com/advice/buying/articles/46531/article.html
+http://appliedergonetwork.iienet.org/pages/index.cfm?pageid=192
+http://apply-mag.com/mag/farming_upgrading_information_systems/
+http://appropriations.house.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=199&Month=7&Year=2003
+http://appropriations.house.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=291&Month=7&Year=2003
+http://appropriations.house.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=385&Month=6&Year=2004
+http://appropriations.house.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=414&Month=7&Year=2004
+http://appropriations.house.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=416&Month=7&Year=2004
+http://appropriations.senate.gov/hearmarkups/record.cfm?id=203848
+http://appropriations.senate.gov/hearmarkups/record.cfm?id=221099
+http://appropriations.senate.gov/hearmarkups/record.cfm?id=224899
+http://appropriations.senate.gov/hearmarkups/record.cfm?id=226662
+http://appropriations.senate.gov/releases/record.cfm?id=180447
+http://appropriations.senate.gov/releases/record.cfm?id=181508
+http://appropriations.senate.gov/text/hearmarkups/record.cfm?id=221099
+http://appropriations.senate.gov/text/hearmarkups/record.cfm?id=224899
+http://appropriations.senate.gov/text/subcommittees/record.cfm?id=226662
+http://apps.caes.uga.edu/impact/viewbrief.cfm?bid=2250
+http://apps.cybersource.com/library/documentation/dev_guides/Web_Services_Clients_PHP/html/app_key_generation.htm
+http://appserv.gcn.com/24_14/executive-technology/36036-1.html
+http://appserv.gcn.com/forum/qna_forum/147-2.html
+http://apronyms.com/category.php?ID=1984269
+http://aptenobytes.typepad.com/aptenobytes/2005/05/carnival_of_the.html
+http://aqualinkwebforum.com/eve/ubb.x/a/tpc/f/9536055422/m/8176029855/r/8766091065
+http://aquanic.org/publicat/usda_rac/tr/ctsa/2busopty.htm
+http://aquariusrecords.org/cat/rockpop31.html
+http://aquat1.ifas.ufl.edu/guide/whymanag.html
+http://arabiangym.com/coaches.htm
+http://arago.cprost.sfu.ca:8587/muse/inventory/BlueSkyFrog/view
+http://arar.essortment.com/kidsummercamp_rcxj.htm
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-0167.html
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-0584.html
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-0585.html
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-0636.html
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-0637.html
+http://arbiter.wipo.int/domains/decisions/html/2000/d2000-1470.html
+http://arbiter.wipo.int/domains/decisions/html/2003/d2003-0002.html
+http://arbl.cvmbs.colostate.edu/hbooks/genetics/biotech/enzymes/cuteffects.html
+http://arbl.cvmbs.colostate.edu/hbooks/pathphys/digestion/stomach/rennin.html
+http://arcadecontrols.com/wwwboard/messages/41876.html
+http://arcc-catholic-rights.org/constitution.htm
+http://archaeology.wlu.edu/longdale.html
+http://archer2000.tripod.com/lawdisorder/lawback20.html
+http://archfami.ama-assn.org/cgi/content/full/7/2/134
+http://archidose.blogspot.com/2005/01/cta-news.html
+http://architecture.about.com/b/a/2003_11_17.htm
+http://architecture.about.com/library/bl-neoeclectic.htm
+http://architecture.about.com/library/bl-raisedranch.htm
+http://architecture.about.com/library/bl-ranch.htm
+http://architecture.about.com/library/bl-styles_index.htm
+http://architecture.about.com/library/bl-styles_index.htm?terms=houses+styles
+http://archive.1september.ru/eng/1998/eng47.htm
+http://archive.avsforum.com/avs-vb/history/topic/332134-1.html
+http://archive.ci.champaign.il.us/compplan/2/2_1.htm
+http://archive.cpsr.net/cpsr/GroupGuide.html
+http://archive.eiffel.com/doc/manuals/technology/contract/
+http://archive.ericsson.net/service/internet/picov/get?DocNo=3/21331-FAP130407/1
+http://archive.eso.org/
+http://archive.food.gov.uk/maff/archive/food/novel/stevreb.htm
+http://archive.greenpeace.org/pressreleases/toxics/1998dec1.html
+http://archive.idrc.ca/library/document/091017/
+http://archive.ilwu.org/solidarityday/20020829WeeklyUpdate.htm
+http://archive.ncsa.uiuc.edu/Cyberia/NumRel/glossary.html
+http://archive.salon.com/21st/feature/1998/12/16feature.html
+http://archive.salon.com/30dec1995/departments/hotb.html
+http://archive.salon.com/books/review/1999/09/24/lheureux/
+http://archive.salon.com/health/addiction/drugs/2000/09/27/alkaloids/
+http://archive.salon.com/mwt/feature/1998/05/27feature.html
+http://archive.salon.com/mwt/feature/2000/02/01/girlfriend/
+http://archive.salon.com/news/feature/2000/03/24/elian/index1.html
+http://archive.salon.com/news/feature/2000/03/24/elian/print.html
+http://archive.salon.com/politics/feature/2001/08/02/ganske/print.html
+http://archive.salon.com/sex/feature/2002/02/13/garden/print.html
+http://archive.salon.com/tech/feature/1999/04/16/aol_community/
+http://archive.salon.com/tech/feature/2005/01/14/death_of_environmentalism/
+http://archive.salon.com/wlust/pass/1998/10/08pass.html
+http://archive.scripting.com/2002/04/16
+http://archive.scripting.com/2004/06/18
+http://archive.scripting.com/2004/06/25
+http://archive.scripting.com/2005/06/15
+http://archive.tivocommunity.com/tivo-vb/history/forum/4-61.html
+http://archive.videogamereview.com/01.01/0EF39A54.php
+http://archive.webstandards.org/opinion.html
+http://archive.wn.com/2005/01/15/1400/kuwaitglobe/
+http://archive.wn.com/2005/01/16/1400/chennaiglobe/
+http://archive.wn.com/2005/01/29/1400/nuclearreview/
+http://archive.wn.com/2005/06/10/1400/culturereview/
+http://archive.wn.com/2005/06/12/1400/financialtokyo/
+http://archive.wn.com/2005/06/23/1400/p/d0/0126047eb897e6.html
+http://archive.wn.com/defencejobs/
+http://archived.ccc.govt.nz/HeritageWeek/2000/OtherEvents.asp
+http://archived.ccc.govt.nz/council/agendas/1998/February/CityServicesAnnualPlanMtg.asp
+http://archivelinks.wn.com/?aid=iraqoffshore/index.txt&day=sunday
+http://archivelinks.wn.com/?aid=worldecologist/index.txt&day=sunday
+http://archives.cbc.ca/IDC-1-41-1363-8443/sports/paralympics/clip12
+http://archives.cbc.ca/IDC-1-71-274-1460/conflict_war/cold_war/clip1
+http://archives.cbc.ca/IDC-1-71-274-1461/conflict_war/cold_war/clip2
+http://archives.cjr.org/year/92/2/economy.asp
+http://archives.cjr.org/year/98/4/kolata.asp
+http://archives.cnn.com/2000/HEALTH/10/03/testube.brother/
+http://archives.cnn.com/2000/US/11/10/vets.day/
+http://archives.cnn.com/2001/ALLPOLITICS/07/16/house.patients.bigp/
+http://archives.cnn.com/2001/ALLPOLITICS/07/31/patients.bill.facts/
+http://archives.cnn.com/2001/ALLPOLITICS/08/03/patients.rights/
+http://archives.cnn.com/2001/CAREER/jobenvy/06/04/glass/
+http://archives.cnn.com/2001/US/03/05/school.shooting.reax/
+http://archives.cnn.com/2001/US/11/06/gen.attack.on.terror/
+http://archives.cnn.com/2001/WORLD/asiapcf/east/04/30/china.willycolumn/
+http://archives.cnn.com/2001/WORLD/meast/12/08/mideast.violence/
+http://archives.cnn.com/2002/ALLPOLITICS/01/29/bush.speech.txt/
+http://archives.cnn.com/2003/EDUCATION/02/26/title.ix.report.ap/
+http://archives.cnn.com/2003/US/Northeast/01/12/wtc.skyscrapers/
+http://archives.cnn.com/HEALTH/diet.fitness/9911/09/inactive.exertion.journ.wmd/
+http://archives.cnn.com/money/2003/01/13/news/companies/aol/
+http://archives.econ.utah.edu/archives/a-list/2000/msg01098.htm
+http://archives.econ.utah.edu/archives/a-list/2002w47/msg00013.htm
+http://archives.econ.utah.edu/archives/a-list/2002w49/msg00006.htm
+http://archives.econ.utah.edu/archives/a-list/2003w22/msg00114.htm
+http://archives.econ.utah.edu/archives/a-list/2003w44/msg00014.htm
+http://archives.econ.utah.edu/archives/a-list/2004w37/msg00007.htm
+http://archives.econ.utah.edu/archives/marxism/2004w00/msg00105.htm
+http://archives.econ.utah.edu/archives/ope-l/2002m12/msg00079.htm
+http://archives.econ.utah.edu/archives/ope-l/2002m12/msg00085.htm
+http://archives.econ.utah.edu/archives/pen-l/2001m03.2/msg00030.htm
+http://archives.foodsafetynetwork.ca/ffnet/2002/12-2002/functional_foodnet_december_5.htm
+http://archives.gophercentral.com/index.php?op=news&id=3867
+http://archives.healthdev.net/sea-aids/msg01311.html
+http://archives.healthdev.net/sea-aids/msg01321.html
+http://archives.his.com/smartmarriages/2000-November/msg00021.html
+http://archives.his.com/smartmarriages/2003-March/msg00020.html
+http://archives.his.com/smartmarriages/2003-September/msg00008.html
+http://archives.his.com/smartmarriages/2005-January/msg00001.html
+http://archives.library.wisc.edu/oral/guide/set54.htm
+http://archives.nashvillescene.com/cgi-bin/article.cgi?story=Back_Issues:2001:October_11-17_2001:Arts:Cover_Story:Second_Place_Short_Fiction
+http://archives.nd.edu/findaids/ead/default.htm
+http://archives.neohapsis.com/archives/crypto/2001-q3/0112.html
+http://archives.neohapsis.com/archives/fulldisclosure/2005-03/0871.html
+http://archives.neohapsis.com/archives/fulldisclosure/2005-03/0872.html
+http://archives.neohapsis.com/archives/vuln-dev/2000-q3/0946.html
+http://archives.obs-us.com/obs/english/books/editinc/teleoly.htm
+http://archives.superiorinvestor.net/article-topic-5.html
+http://archives.tcm.ie/breakingnews/2002/01/07/story35665.asp
+http://archives.tcm.ie/businesspost/2005/06/12/story5523.asp
+http://archives.tcm.ie/irishexaminer/1998/07/18/ihead.htm
+http://archives.tcm.ie/westernpeople/2005/01/26/story23333.asp
+http://archives.thedaily.washington.edu/1997/030497/stocks.030497.html
+http://archives.thedaily.washington.edu/1999/062399/NNN3.Impression.html
+http://archives.thedaily.washington.edu/2000/112000/N2.HOCKEY.html
+http://archlab.gmu.edu/~dbdavis/
+http://archpsyc.ama-assn.org/cgi/content/abstract/53/3/225
+http://archrecord.construction.com/archrecord2/work/dec02/faith.asp
+http://archrecord.construction.com/news/wtc/
+http://ard.unl.edu/rn/0901/weed.html
+http://ardour.org/news.html
+http://are.berkeley.edu/APMP/pubs/agbusnet/agbusnet.11.00.html
+http://are.berkeley.edu/~atanu/blog/archives/000296.html
+http://ares.jsc.nasa.gov/HumanExplore/Exploration/EXLibrary/docs/ApolloCat/Part1/ALSEP.htm
+http://argentina.indymedia.org/news/2005/06/301897_comment.php
+http://argo.hiof.no/index2.php?option=com_content&do_pdf=1&id=60
+http://arieldx.tripod.com/english/manualdx/informes/informes.htm
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.anthro.32.061002.093244
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.matsci.31.1.47
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.me.30.020179.002421
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.pa.01.040161.002145
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.ps.05.020154.002041
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.publhealth.18.1.379
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.py.23.090185.000305
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.py.25.090187.000411
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.soc.29.010202.100030
+http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.soc.29.010202.100213
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.anthro.32.061002.093426
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.fluid.33.1.491
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.med.55.091902.103831
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.med.55.091902.104417
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.nucl.53.041002.110406
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.nutr.24.012003.132434
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.physiol.63.1.235
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.publhealth.25.101802.123042
+http://arjournals.annualreviews.org/doi/full/10.1146/annurev.soc.29.010202.100213
+http://arkansas.indymedia.org/newswire/display/17453/index.php
+http://arkansas.indymedia.org/newswire/display/18872/index.php
+http://arl.cni.org/aau/Frontmatter.html
+http://arl.cni.org/info/frn/copy/timeline.html
+http://arl.cni.org/scomm/copyright/uses.html
+http://arl.cni.org/scomm/scat/hockey.html
+http://arl.cni.org/scomm/scat/lesk.html
+http://arlhs.com/
+http://armani-perfume.ffind.servebeer.com/
+http://armedforces.nic.in/interservice/cdm.htm
+http://armedforces.nic.in/interservice/isincc1.htm
+http://armedservices.house.gov/openingstatementsandpressreleases/108thcongress/04-03-24hill.html
+http://armenianhouse.org/bliss/turkey/28-partition-turkey.html
+http://armscollectors.com/books.htm
+http://aroussi.com/archive/11/firefox-osx-safari-look
+http://aroussi.com/print/11/
+http://arrowheadcu.mortgagewebcenter.com/ResourceCenter/ResCtrInfo.asp?PID=119
+http://arseweb.com/rupe/pool/uk_rules.html
+http://arstechnica.com/columns/mac/mac-08062003.ars
+http://art-bin.com/art/gapa_en.html
+http://art-bin.com/art/omodest.html
+http://art-bin.com/art/oplecheng.html
+http://art-for-a-change.com/blog/
+http://art.blogging.la/archives/2004/03/gimme_back_my_funds.phtml
+http://art.blogging.la/archives/2005/01/the_rules_of_ar.phtml
+http://art.ou.edu/russellcenter/symposia/03detail.html
+http://art.stores.ebay.com/Mixed-Media_Antique-Pre-1900_W0QQcatZ20123QQtZlw
+http://art.sumix.com/articles/article_13.html
+http://art.uga.edu/html/abroa.php?getLinks=getTopPrograms&getContent=getPrograms&contentValue=14
+http://art.uga.edu/html/sculp.php?getLinks=getTopPrograms&getContent=getPrograms&contentValue=14
+http://artbymarkleavitt.com/purchase3.htm
+http://artenligne.com/@/JohnnyJWMorlan
+http://artenligne.com/A55A04/ael.nsf/Opra/DOMT-5WFS57
+http://artenligne.com/A55A04/ael.nsf/Opra/SRVV-66B22H
+http://artfulwriter.com/archives/2005/03/lets_be_the_str.html
+http://arthistory.about.com/od/davincicode/f/dvc_papers.htm
+http://arthritis.about.com/od/insuranceandmoneymatters/
+http://arthritis.about.com/od/weight/a/weightlossmyths_2.htm
+http://articles.corporate.findlaw.com/articles/file/01024/009782
+http://articles.poetryx.com/58/
+http://artisanitorium.thehydden.com/nonfiction/litcrit/godot.htm
+http://artlab.org.uk/videocritical/analysis3.htm
+http://artrocker.com/articles/newacts/trouble.shtml
+http://artroots.com/ra/bio/korovin/konstantinkorovinbio.htm
+http://arts.anu.edu.au/arcworld/resources/cult/aocult.htm
+http://arts.anu.edu.au/programs/ug/honours/working_rules.asp
+http://arts.columbia.edu/index.cfm?fuseaction=FILM_DIV.viewCourseOfStudy
+http://arts.envirolink.org/literary_arts/TTWilliams_listening.html
+http://arts.qmuc.ac.uk/ijost/Volume3_no1/editorial.htm
+http://arts.qmuc.ac.uk/ijost/Volume3_no2/3_lacey_s.htm
+http://arts.searchbeat.com/fine.htm
+http://arts.ucsc.edu/Gdead/AGDL/chase.htm
+http://artsandcrafts.about.com/od/forumthre3/
+http://artsandscience.concordia.ca/philosophy/newsevents.htm
+http://artsedge.kennedy-center.org/content/2012/
+http://artsedge.kennedy-center.org/content/2127/
+http://artsedge.kennedy-center.org/content/2131/
+http://artsedge.kennedy-center.org/content/2202/
+http://artsedge.kennedy-center.org/content/2257/
+http://artsedge.kennedy-center.org/content/2278/
+http://artsedge.kennedy-center.org/content/2325/
+http://artsedge.kennedy-center.org/content/2333/
+http://artsedge.kennedy-center.org/irish/learn/lsnplans/yeats/lesson3.html
+http://artsedge.kennedy-center.org/irish/share/storytelling/workshop/reading/artsedge.html
+http://arttribal.com/misc/faq.htm
+http://arxiv.org/abs/cond-mat/9708085
+http://arxiv.org/pdf/hep-th/0310028
+http://asaanz.rsnz.org/codeofethics.html
+http://ascc.healingwell.com/humor/office.html
+http://ascelibrary.aip.org/journals/doc/ASCERL-home/rlcFaq.jsp
+http://ascension2000.com/DivineCosmos/06.htm
+http://ascii.textfiles.com/archives/000122.html
+http://ascweb.usc.edu/news.php?storyID=25
+http://ase.tufts.edu/cogstud/papers/rolelang.htm
+http://ase.tufts.edu/gradstudy/programCertEpidemiology.htm
+http://ase.tufts.edu/msat/Muslim_Unit/MU-app2.htm
+http://aseigo.blogspot.com/2004/11/ah-but-start-up-times.html
+http://asem.inter.net.th/chairman/
+http://asg.web.cmu.edu/andrew2/rfc/rfc2402.html
+http://asg.web.cmu.edu/rfc/rfc932.html
+http://ash.spaink.net/methods.html
+http://ashleemcclelland.pingwellesley.com/blog/Girlabouttown
+http://asia.cnet.com/newstech/industry/0,39001142,39189253,00.htm
+http://asia.cnet.com/reviews/digitalliving/customize/guide.htm
+http://asia.dir.yahoo.com/Arts/By_Region/Countries/Thailand/Complete_List/
+http://asia.dir.yahoo.com/Regional/Countries/Thailand/Government/Government_Officials/Office_of_the_Prime_Minister/
+http://asiatranspacific.com/about/office.aspx?pageID=15
+http://asisaid.com/journal/
+http://ask.metafilter.com/mefi/19387
+http://ask.metafilter.com/mefi/19456
+http://ask.metafilter.com/mefi/19779
+http://ask.metafilter.com/mefi/20209
+http://ask.pvrblog.com/2004/11/dish_network_dv.html
+http://ask.slashdot.org/askslashdot/04/12/28/2144249.shtml
+http://ask.yahoo.com/ask/20010717.html
+http://ask.yahoo.com/ask/20010925.html
+http://ask.yahoo.com/ask/20011019.html
+http://askmen.com/dating/dating_advice_100/112_dating_tips.html
+http://askmen.com/women/models_250/265b_victoria_zdrok.html
+http://askmen.com/women/models_250/265c_victoria_zdrok.html
+http://askmerrill.ml.com/publish/marketing_centers/articles/bfs_article_BFS009/
+http://askmerrill.ml.com/publish/marketing_centers/bfs_subcenter_3/
+http://asknettieday.blogspot.com/2004_08_01_asknettieday_archive.html
+http://askpang.typepad.com/
+http://askpang.typepad.com/relevant_history/2005/03/ah_services.html
+http://askthebookie.com/newsFeedContent.php?ID=7903&TIT=Speculation+about+Cubs%C2%B4
+http://asktom.oracle.com/pls/ask/f?p=4950:8:13973604824201098516::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:1155066278457
+http://aslo.org/
+http://aslowerpace.com/serendipity/
+http://aslpah.com/main/archives/aslpah6.htm
+http://asmallvictory.net/
+http://asmallvictory.net/archives/002825.html
+http://asmallvictory.net/archives/004975.html
+http://asmallvictory.net/archives/006086.html
+http://asmallvictory.net/archives/007495.html
+http://asmallvictory.net/archives/007795.html
+http://asmallvictory.net/archives/007968.html
+http://asnic.utexas.edu/asnic/countries/india/InPoliticalstru.html
+http://asp.cumc.columbia.edu/facdb/profile_list.asp?uni=dd227&DepAffil=Surgery
+http://asp.unl.edu/
+http://aspe.hhs.gov/daltcp/reports/chap14.htm
+http://aspn.activestate.com/ASPN/Mail/Message/do-sig/577247
+http://aspn.activestate.com/ASPN/docs/ActivePerl-5.6/CHANGES.html
+http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/Pod/activeperl-changes-56.html
+http://aspnet.4guysfromrolla.com/articles/061505-1.aspx
+http://assembly.coe.int/Communication/SessionSpeeches/June2002/DiscoursPolfer_e.htm
+http://assembly.coe.int/Documents/AdoptedText/TA05/ERES1436.htm
+http://assembly.coe.int/Documents/AdoptedText/ta05/ERES1428.htm
+http://assembly.coe.int/Documents/WorkingDocs/DOC04/EDOC10218.htm
+http://assembly.coe.int/Documents/WorkingDocs/Doc05/EDOC10453.htm
+http://assembly.coe.int/Documents/WorkingDocs/Doc05/EDOC10496.htm
+http://assembly.coe.int/Documents/WorkingDocs/doc02/EDOC9544.htm
+http://assembly.coe.int/Documents/WorkingDocs/doc03/EDOC9980.htm
+http://assessment.tamu.edu/progtowardsdeg.html
+http://assm.asstr.org/~eli/erotica/roomview.1.html
+http://assm.asstr.org/~eli/erotica/various/Zero.Gravity.html
+http://assoc.wanadoo.fr/une.education.pour.demain/theory/awary.htm
+http://associates.ucr.edu/letters700.html
+http://associations.smsu.edu/mags/1999Mags/Brenner.htm
+http://astro.isi.edu/games/moon.html
+http://astro.nmsu.edu/~lhuber/leaphist.html
+http://astro.uchicago.edu/cara/southpole.edu/boil.html
+http://astrobiology.arc.nasa.gov/feature/editorial0601.html
+http://astrobiology.arc.nasa.gov/roadmap/g6.html
+http://astronomy.swin.edu.au/~pbourke/colour/edgeblend/
+http://astronomy.swin.edu.au/~pbourke/fractals/fracintro/
+http://astronomy.swin.edu.au/~pbourke/fractals/sketch/
+http://astronomy.swin.edu.au/~pbourke/papers/helnet/
+http://astros.mostvaluablenetwork.com/index.php?m=200503
+http://astroventure.arc.nasa.gov/aa/train/AVStraining.html
+http://asumag.com/mag/university_building_better_schools/
+http://asumag.com/mag/university_raising_money_winning/
+http://asumag.com/mag/university_schools_tomorrow/
+http://asumag.com/mag/university_universal_design/
+http://asymptomatic.net/wp/2004/05/28/568/blogware-choice/
+http://atheism.about.com/b/a/119949.htm
+http://atheism.about.com/library/FAQs/skepticism/blfaq_fall_complex.htm
+http://atheism.about.com/library/books/full/aafprTroubleXmas.htm
+http://athena.uwindsor.ca/units/biosci/BiologyFaculty.nsf/0/1831486a66481fb60525686b00558b9b?OpenDocument
+http://athletic.virginia.edu/mccuesportsmed/ATR.emergencyprocedures.html
+http://athletics.adams.edu/wrestling/outlook.html
+http://athletics.binghamton.edu/sports/mbask/aemediaday-05.html
+http://athletics.sunymaritime.edu/page.asp?Section=AthPages&PageID=Mission
+http://athletics.uchicago.edu/campus/dodgeballtourney/rules.htm
+http://athletics.ucsd.edu/news/index.php?id=1383
+http://atiam.train.army.mil/portal/atia/adlsc/view/public/296756-1/fm/22-100/ch2.htm
+http://atiam.train.army.mil/portal/atia/adlsc/view/public/296785-1/fm/27-100/chap7.htm
+http://atimes.com/atimes/Front_Page/FH20Aa01.html
+http://atimes.com/atimes/Global_Economy/GF16Dj01.html
+http://atimes.com/atimes/South_Asia/FL23Df01.html
+http://atimes01.atimes.com/atimes/Middle_East/FJ02Ak04.html
+http://atkins.com/
+http://atkins.com/Archive/2004/12/30-931042.html
+http://atlanta.creativeloafing.com/2004-10-21/grazing.html
+http://atlanta.creativeloafing.com/cover.html
+http://atlantic-web1.ns.ec.gc.ca/airquality/static/default.asp?lang=En&n=60B704C3-1
+http://atlas.freegk.com/world/asia/taiwan/taiwan.php
+http://atlas.gc.ca/site/english/learningresources/lesson_plans/middle_school/sk_ms_student_worksheet.html
+http://atlas.geo.cornell.edu/education/instructor/getting_started.html
+http://atlas.geo.cornell.edu/education/student/getting_started.html
+http://atlas.mapzones.com/taiwan/taiwan.php
+http://atlas.usafa.af.mil/jscope/JSCOPE00/Mattox00.html
+http://atlas.usafa.af.mil/pa/factsheets/airmansh.htm
+http://atom.uni-mb.si/labs/labprst/Gorsek1.htm
+http://atomfilms.shockwave.com/af/spotlight/collections/starwars/
+http://atomicbride.com/surfparties.html
+http://atowncrier.blogspot.com/2004_12_26_atowncrier_archive.html
+http://atoz.iqhealth.com/Atoz/fitness/RecSports/tennis.html
+http://atoz.iqhealth.com/Atoz/fitness/cardiocraze/speedwalking.html
+http://atozteacherstuff.com/Themes/Christmas/
+http://atozteacherstuff.com/Themes/Thanksgiving/
+http://atpanda.blog.com/Fire+Fighting/
+http://atschool.eduweb.co.uk/ctrh/cks39.htm
+http://atschool.eduweb.co.uk/fraserburgh.ac/academy/homeecon/homeec5.htm
+http://atschool.eduweb.co.uk/shawhse/consult.htm
+http://att-conference-call.com/conferencecallfromhome.htm
+http://att.tarot.com/about-tarot/library/essays/cups
+http://attentionspanzero.typepad.com/attention_span_zero/2004/10/
+http://atterer.net/jigdo/
+http://attitude.themercury.news.com.au/inconcert.htm
+http://attitude.themercury.news.com.au/sites.htm
+http://attra.ncat.org/attra-pub/altsoilamend.html
+http://attra.ncat.org/attra-pub/directmkt.html
+http://attra.ncat.org/calendar/index.php/
+http://attra.ncat.org/calendar/index.php/2005/07/
+http://atulchitnis.net/writings/rockwithyourpc.php
+http://atvscene.com/evaluations/project-ltz-03.htm
+http://atwork.harvard.edu/benefits/retirement/taxdeferred.shtml
+http://atyourservice.ucop.edu/employees/policies/labor_relations/news_events/agency_fee/fschart.html
+http://atyourservice.ucop.edu/employees/policies/staff_policies/spp43.html
+http://au.encarta.msn.com/encyclopedia_761558653_3/Wales.html
+http://au.encarta.msn.com/encyclopedia_761574581/Surgery.html
+http://au.encarta.msn.com/text_761558653__1/Wales.html
+http://au.encarta.msn.com/text_761558653___0/Wales.html
+http://au.franceguide.com/infospratiques/rubrique.asp?z1=wALqiaq2&idinf=19352
+http://au.health.yahoo.com/050508/24/4ggh.html?r=967556092
+http://au.health.yahoo.com/050508/24/4ggh.html?r=967556093
+http://au.itpapers.zdnet.com/DATA+MANAGEMENT/Data+Tools/
+http://au.messages.yahoo.com/health/womens_health/281/
+http://au.messages.yahoo.com/sports/soccer_discussion/666/
+http://au.news.yahoo.com/050615/19/uq82.html
+http://au.smallbusiness.yahoo.com/040818/7/13wz.html
+http://audiology.advanceweb.com/common/Editorial/Editorial.aspx?CC=28340
+http://audiology.advanceweb.com/common/Editorial/PrintFriendly.aspx?CC=28340
+http://augusta.com/cgi-bin/masters_review/masters_review.cgi?currentfunction=viewfeedback&playerid=149
+http://aul.org.uk/bristol
+http://aumha.org/a/parasite.php
+http://auriton.org/feeling_spent.htm
+http://auspsa.anu.edu.au/proceedings/2001/International_Relations_and_Political_Economy_Papers_A.htm
+http://austin.citysearch.com/profile/10238871/austin_tx/adam_s_personal_training.html
+http://austincraftmafia.com/sitdownJenPerk.html
+http://australia.accom.com.au/wa/southwest/
+http://australianit.news.com.au/articles/0,7204,15529440%5E15415%5E%5Enbv%5E15309,00.html
+http://australiasevereweather.com/techniques/moreadv/cloudchg.htm
+http://ausweb.scu.edu.au/aw96/workshps/hypertds.htm
+http://authors.aalbc.com/guyjohnson.htm
+http://autism.about.com/cs/parentstrategies/a/firesafety.htm
+http://auto_sol.tao.ca/node/view/1098
+http://auto_sol.tao.ca/node/view/1105
+http://auto_sol.tao.ca/node/view/1122
+http://auto_sol.tao.ca/node/view/1126
+http://auto_sol.tao.ca/node/view/1131
+http://auto_sol.tao.ca/node/view/1132
+http://auto_sol.tao.ca/node/view/1136
+http://auto_sol.tao.ca/node/view/1182
+http://auto_sol.tao.ca/node/view/209
+http://auto_sol.tao.ca/node/view/523
+http://auto_sol.tao.ca/node/view/804
+http://auto_sol.tao.ca/node/view/806
+http://auto_sol.tao.ca/user/login
+http://auto_sol.tao.ca/user/view/1026
+http://auto_sol.tao.ca/user/view/964
+http://automatedbuildings.com/news/nov03/articles/sines/sines.htm
+http://autonet.ca/DriverSource/stories.cfm?storyID=13753
+http://autonomoussource.com/
+http://autonomoussource.com/archive/000412.html
+http://autopackage.org/ui-vision.html
+http://autorepair.about.com/b/a/145369.htm
+http://autorepair.about.com/cs/troubleshooting/a/bl300.htm
+http://autos.msn.com/Advice/Article.aspx?contentid=9274&src=Luxury%20CarsCategory&pos=Edit4
+http://autos.msn.com/advice/article.aspx?contentid=9274&src=NRES
+http://autos.msn.com/advice/article.aspx?contentid=9274&src=News
+http://autos.msn.com/advice/article.aspx?contentid=9274&src=URES
+http://autos.msn.com/advice/article.aspx?contentid=9274&src=finance
+http://autos.msn.com/help/AutosHelp.aspx?xml=kbbfaq
+http://autos.msn.com/kbb/faq.aspx
+http://autos.yahoo.com/consumerreports/article/holding_up.html
+http://autospies.com/article/index.asp?articleId=3943
+http://aux.gaston.cc.nc.us/ASP_Scripts/personnel_Public/viewclass.asp
+http://avalon.crystal-flame.net/
+http://avalon.unomaha.edu/jrf/Vol7No2/robotHeaven.htm
+http://avandia.diabeteslife.com/avandia/avandia_side_effects.html
+http://avantgaming.com/archives/2004_11.html
+http://avari.blogs.com/weblog/the_militaryinferiority_complex/
+http://avari.blogs.com/weblog/what_can_blue_do_for_you_nothing_apparently/
+http://avc-bas.vcbf.berkeley.edu/balancedscorecard/staff_survey.htm
+http://avc.blogs.com/a_vc/2004/09/advice_please.html
+http://avc.blogs.com/a_vc/2005/03/500_per_year.html
+http://avc.blogs.com/a_vc/2005/03/apple_becomes_a.html
+http://avc.blogs.com/a_vc/2005/04/delicious.html
+http://avengerredsix.blogspot.com/2004/12/8-novemberd-day-first-in.html
+http://averagejane.blogs.com/
+http://averytooley.blogspot.com/2004/07/whachu-gon-do-now.html
+http://averytooley.com/stereo/?blogid=1&archive=2005-03&catid=4
+http://awaionline.com/thegoldenthread/2004/tgt_107.php
+http://away.com/about_us/privacy.html
+http://away.com/ideas/central_america/belize_sea_kayak.html
+http://away.com/places/europe/france/
+http://away.com/primedia/arts_arch/nunnery.html
+http://aweb.sunsite.dk/
+http://awfsite.brickriver.com/news_detail.asp?TableName=oNews_PJAYMY&PrimaryKey=oNews_PJAYMY_ID&PKValue=170
+http://awhonnlifelines.awhonn.org/cgi/content/full/8/5/422
+http://aww.ninemsn.com.au/aww/Health/articles/QA/article662.asp
+http://axcrypt.sourceforge.net/faq.htm
+http://axelboldt.proboards27.com/index.cgi?board=comparison&action=post&num=1090441640&quote=1090441640&start=0
+http://axion.physics.ubc.ca/crypt.html
+http://ayk.textamerica.com/?r=2483560
+http://ayla.am/jessup/eng/rules/rulesarm.htm
+http://az.pinkinki.net/
+http://azbb.cyaccess.com/
+http://azlyrics.free.fr/usher/usher_myway.htm
+http://azothgallery.com/yorksquare/YorkSQ_distributor_suit.html
+http://aztecpress.pima.edu/fall2004/090204/ae.html
+http://b-reactor.org/moderator/mod1999-03.htm
+http://b44.ezboard.com/balatariel
+http://babelogue.citypages.com:8080/bsmith/
+http://babelogue.citypages.com:8080/sperry/stories/storyReader$346
+http://babs.com.au/faq/
+http://baby-shower-games-etc.com/baby_shower_ideas.htm
+http://baby.goldencircle.com.au/content/?id=27
+http://babynames.kabalarians.com/
+http://babyproducts.about.com/
+http://babywait.blogspot.com/
+http://bacchronicle.homestead.com/GFinch.html
+http://backpain.articleinsider.com/191635_gravity_inversion_tables.html
+http://backword.me.uk/rubbish/00000345.html
+http://baconsrebellion.blogspot.com/2005/05/feds-give-feds-take-away.html
+http://bad-mother.blogspot.com/
+http://bad-mother.blogspot.com/2005/01/fat-is-feminist-issue-sort-of.html
+http://bad.eserver.org/issues/1994/17/intro.html
+http://bad.eserver.org/issues/2000/49/rshaw.html
+http://bad.eserver.org/issues/2000/51/editors.html
+http://bad.eserver.org/issues/2005/73/kitlinski.html
+http://bad.eserver.org/reviews/2005/goggin.html
+http://badbadart.blogspot.com/
+http://badbloodonpoker.blogspot.com/
+http://badgas.co.uk/lynndie/
+http://badgeraap.org/adminrec/adminrec.htm
+http://badgerherald.com/artsetc/2005/04/29/semester_of_games_yi.php
+http://badgerherald.com/news/2005/02/24/students_ask_for_wil.php
+http://badgerherald.com/news/2005/03/10/taa_faces_hurdle_aft.php
+http://badgerherald.com/sports/2003/04/15/a_history_of_experie.php
+http://badgerherald.com/sports/2005/02/09/uws_brueckler_hoping.php
+http://badgerherald.com/sports/2005/05/04/triple_crown_in_reac.php
+http://badhairblog.blogspot.com/
+http://badmanstropicalfish.com/dont_release.html
+http://badnewshughes.blogspot.com/2003_10_01_badnewshughes_archive.html
+http://baghdadgirl.blogspot.com/2005/01/life-in-baghdad-these-days_22.html
+http://bahai-library.com/?file=oliphant_haifa_modern_palestine.html
+http://bahai-library.com/bsr/bsr04/44_momen_women.htm
+http://bahay.ph/
+http://bahrs.com/jaycos2/julyaugust2000.html
+http://bairopiteclinic.tripod.com/sunrise_4.htm
+http://bakedchunk.blogdrive.com/
+http://baker.mit.edu/hazing.html
+http://balagan.blogspot.com/
+http://balanced.blogdrive.com/
+http://baldilocks.typepad.com/baldilocks/2004/06/open_letter_to_.html
+http://baldilocks.typepad.com/baldilocks/2005/01/go_to_hell_with.html
+http://balkin.blogspot.com/
+http://balkin.blogspot.com/2003_02_09_balkin_archive.html
+http://balrog.de/security/archives/2005/03/03/86_to-id-card-or-not-to-id-card
+http://baltimore.indymedia.org/newswire/display/10288/index.php
+http://baltimorechronicle.com/050704SibelEdmonds.shtml
+http://balzak.users.blogmatrix.com/podcasts/
+http://bam.zanan.co.ir/
+http://bama.sum.nl/opleiding/opleiding.asp?nOpleidingTaalID=15229
+http://bananaboo.com/stories/terrorc2.htm
+http://banapana.troped.com/archives/banapana/
+http://bandb.about.com/cs/aspiring/a/advice.htm
+http://bangernomics.tripod.com/readers.htm
+http://bangkok.metblogs.com/archives/2005/01/phuket_disaster.phtml
+http://banglacricket.com/html/article.php?year=2005&item=322
+http://banglacricket.com/html/printarticle.php?year=2005&vm=322
+http://banglapedia.search.com.bd/HT/H_0128.htm
+http://bank.rug.ac.be/da/da.htm
+http://banking-finance.careerbuilder.com/bf.ic/Illinois_Joliet/
+http://banking-finance.careerbuilder.com/bf.ic/Indiana_Gary/
+http://banking-finance.careerbuilder.com/bf.ic/SouthCarolina_Columbia/
+http://banking-finance.careerbuilder.com/bf.ic/SouthDakota/
+http://banking-finance.careerbuilder.com/bf.ic/SouthDakota_SiouxFalls/
+http://banking.about.com/od/cds/a/bankcdrates.htm
+http://banking.jobsearch.com/Pennsylvania-York.htm
+http://banking.senate.gov/index.cfm?FuseAction=Articles.Detail&Article_id=63&Month=7&Year=2004&IsTextOnly=1
+http://banking.senate.gov/index.cfm?Fuseaction=Hearings.Testimony&HearingID=42&WitnessID=162
+http://banking.yahoo.com/20020422a.html
+http://banknorth.com/
+http://bankrupt.com/TCRAP_Public/020226.mbx
+http://baplaboratory.maroc.to/maghreb.html
+http://barbelith.com/topic/16538
+http://barbelith.com/topic/18429
+http://barbelith.com/topic/19050
+http://barbelith.com/topic/1946
+http://barbelith.com/topic/19770
+http://barbelith.com/topic/19916
+http://barbelith.com/topic/19997
+http://barbelith.com/topic/20113
+http://barbelith.com/topic/5497
+http://barbelith.com/topic/8686
+http://barelybad.com/cl_margostaples.htm
+http://barkingowl.com/middle~path/archives/category/politics/election-2004/
+http://barlow.typepad.com/barlowfriendz/2004/07/
+http://barlow.typepad.com/barlowfriendz/2004/08/touring_manhatt.html
+http://barlow.typepad.com/barlowfriendz/2004/12/a_taste_of_the_.html
+http://barney.gonzaga.edu/~eschonbr/poorjoannanotes.htm
+http://barracudamvc.org/Barracuda/docs/events/high_level_overview.html
+http://barrysbakery.com/testimonials.htm
+http://bartleby.school.aol.com/124/pres59.html
+http://bartleby.school.aol.com/18/2/32.html
+http://bartleby.school.aol.com/197/33.html
+http://bartleby.school.aol.com/320/2/1000.html
+http://baseball-fever.com/archive/index.php/t-14969.html
+http://baseballblog.blogspot.com/2003_02_02_baseballblog_archive.html
+http://baseballcrank.com/archives2/2002/08/index.php
+http://baseballcrank.com/archives2/2003/08/baseball_the_wi.php
+http://baseballcrank.com/archives2/2003/08/blog_status.php
+http://baseballcrank.com/archives2/2003/12/baseball_low_st.php
+http://baseballnews.blogspot.com/
+http://bastitch.blogspot.com/2003_10_01_bastitch_archive.html
+http://batr.org/gulag/022204.html
+http://batr.org/markets/
+http://battellemedia.com/archives/000269.php
+http://battellemedia.com/archives/000420.php
+http://battellemedia.com/archives/000515.php
+http://battellemedia.com/archives/000787.php
+http://battellemedia.com/archives/001149.php
+http://battellemedia.com/archives/001560.php
+http://baylorbears.collegesports.com/genrel/010605aaa.html
+http://baylorbears.collegesports.com/genrel/033105aaa.html
+http://baylorbears.collegesports.com/genrel/042005aaa.html
+http://baylorbears.collegesports.com/genrel/050205aaa.html
+http://baylorbears.collegesports.com/genrel/061005aac.html
+http://baylorbears.collegesports.com/sports/c-track/spec-rel/061405aab.html
+http://bbs.applescript.net/viewtopic.php?pid=40165
+http://bbs.applescript.net/viewtopic.php?pid=40252
+http://bbs.babycenter.com/board/1379773/thread/1793983
+http://bbs.babycenter.com/board/baby/babydevelopment/10526/thread/1620911
+http://bbs.babycenter.com/board/baby/babydevelopment/1849/thread/1759190
+http://bbs.babycenter.com/board/baby/babyfeeding/5751?ccRelLink=&url=%2Frefcap%2Fbaby%2Fbabyfeeding%2F752.html&xTopic=bottle&bus=content
+http://bbs.babycenter.com/board/baby/babygrief/1202061/thread/1802497
+http://bbs.babycenter.com/board/baby/babysleep/7887/thread/1778443
+http://bbs.babycenter.com/board/baby/postpartumfitness/1395898
+http://bbs.babycenter.com/board/preconception/fertilityproblems/6069/thread/1706279?i=0&message=19641121
+http://bbs.babycenter.com/board/pregnancy/childbirth/10516/thread/1761945
+http://bbs.babycenter.com/board/pregnancy/pregcomplications/1202049/thread/1832656
+http://bbs.babycenter.com/board/toddler/toddlerbehavior/12402/thread/1743736
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=151792
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=181883
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=283547
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=291014
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=30059
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=303511
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=303759
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=311937
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=323974
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=345791
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=352370
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=357519
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=381265
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=406606
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=51748
+http://bbs.chinadaily.com.cn/forumpost.shtml?toppid=97993
+http://bbs.chinadaily.com.cn/styleswitch.shtml?toppid=226025&s=2
+http://bbs.chinadaily.com.cn/styleswitch.shtml?toppid=406606&s=2
+http://bbs.keyhole.com/boards/showflat/Board-globalvillage-Number-3545-page-0-view-collapsed-sb-5-o-.html
+http://bbs.keyhole.com/boards/showflat/Board-globalvillage-Number-3545-page-2-view-expanded-sb-5-o--vc-1.html
+http://bchs.kearney.net/BTales_198711.htm
+http://bcn.boulder.co.us/business/BCBR/1995/oct/bank2.html
+http://bcn.boulder.co.us/community/scouts/troop70/troop70smfoils.htm
+http://bcrescue.dogsaver.org/fosterandvolunteerapplication.htm
+http://bcresourcedirectory.org/posttreat.htm
+http://bcsia.ksg.harvard.edu/events.cfm?program=CORE&ln=archives&month=200504
+http://bcsia.ksg.harvard.edu/publication.cfm?ctype=media_feature&gma=49&item_id=402&ln=releases
+http://bdhp.moravian.edu/personal_papers/journals/unger/mariarosina.html
+http://beaguide.about.com/applynow.htm
+http://beatl.barnard.columbia.edu/kingsv1/documents/caseXIX.htm
+http://beautifulatrocities.com/archives/2004/08/communists_for_1.html
+http://beautifulatrocities.com/archives/2005/06/in_the_future_e.html
+http://beauty.about.com/
+http://beauty.about.com/b/archives.htm
+http://beauty.about.com/od/june/
+http://beavervision.blogspot.com/
+http://becker.wustl.edu/ARB/Exhibits/mowihsp/articles/practitioner.htm
+http://becker.wustl.edu/ARB/find/gh21/sg1/
+http://beckwith-wiedemann.org/_wsn/page6.html
+http://bedfordstmartins.com/technotes/techtiparchive/ttip102401.htm
+http://beef-mag.com/hughes/beef_worst_best_herds/
+http://beef-mag.com/mag/beef_bovine_enemy/
+http://beelzaboo.deviantart.com/
+http://beeradvocate.com/beer/rate_results/10099/9086/topr/20
+http://beewebhead.blogspot.com/
+http://befreetech.com/free_energy_coverup.htm
+http://befreetech.com/historypoliticstech.htm
+http://beginnersinvest.about.com/cs/investinglessons/l/blles2d.htm
+http://beginnersinvest.about.com/cs/iras/a/aairafees.htm
+http://beginnersinvest.about.com/cs/warrenbuffett/a/aawarrenbio_2.htm
+http://beginnersinvest.about.com/od/dividendsdrips1/a/aa040904_5.htm
+http://behindmyself.blogspot.com/
+http://beijing.lehmanlaw.com/lehman/joinlehman/faqs.htm
+http://beinecke.library.yale.edu/rbms2004/prog_tours.html
+http://beinecke.library.yale.edu/rbms2004/tours.html
+http://beingornothingness.blogs.com/living/2005/03/
+http://beirut.indymedia.org/ar/2004/09/1673.shtml
+http://beirut.indymedia.org/ar/2005/03/2392.shtml
+http://beldar.blogs.com/beldarblog/2004/09/consulting_expe.html
+http://belgrade.usembassy.gov/current/031126.html
+http://belgrade.usembassy.gov/current/040420.html
+http://belgrade.usembassy.gov/press/2004/040716.html
+http://beliefnet.com/story/154/story_15432_1.html
+http://beliefseekingunderstanding.patriotforum.org/archives/000257.html
+http://beliefseekingunderstanding.patriotforum.org/archives/000281.html
+http://beliefseekingunderstanding.patriotforum.org/archives/000480.html
+http://beliefseekingunderstanding.patriotforum.org/archives/000481.html
+http://beliefseekingunderstanding.patriotforum.org/archives/000590.html
+http://beliefseekingunderstanding.patriotforum.org/cgi-bin/mt-comments.cgi?entry_id=409
+http://believermag.com/issues/march_2003/julavits.php
+http://belledejour-uk.blogspot.com/
+http://bellives.typepad.com/
+http://belmontclub.blogspot.com/
+http://belmontclub.blogspot.com/2004/08/last-taboo-news-that-iraqi-police-have.html
+http://belmontclub.blogspot.com/2004/12/haifa-street-execution-of-iraqi.html
+http://belmontclub.blogspot.com/2004/12/shame-and-disgrace-andrew-sullivan-has.html
+http://belmontclub.blogspot.com/2004/12/sunshine-week-your-right-to-know.html
+http://belmontclub.blogspot.com/2004_03_01_belmontclub_archive.html
+http://belmontclub.blogspot.com/2004_05_01_belmontclub_archive.html
+http://belmontclub.blogspot.com/2004_06_01_belmontclub_archive.html
+http://belmontclub.blogspot.com/2004_07_01_belmontclub_archive.html
+http://belmontclub.blogspot.com/2005/01/backward-please-stratfor-reacts-to.html
+http://benfolds.bluni.com/display.php?songid=6
+http://bengal-ng.missouri.edu/~kvanvigj/certain_doubts/index.php?cat=13
+http://bengal-ng.missouri.edu/~kvanvigj/certain_doubts/index.php?cat=14
+http://bengal-ng.missouri.edu/~kvanvigj/certain_doubts/index.php?m=200408
+http://bengal-ng.missouri.edu/~kvanvigj/certain_doubts/index.php?p=344
+http://bensguide.gpo.gov/6-8/government/national/cabinet.html
+http://benson.byu.edu/Publication/BI/Lessons/volume21/Diagnostic.htm
+http://beqiraj.com/kosova/de/allied_force/after_action/index.asp
+http://beradio.com/departments/radio_standing_waves_antennas/
+http://beradio.com/features/radio_streaming_media_west/
+http://berclo.net/page97/97en-china-10.html
+http://berclo.net/page97/97en-impressions.html
+http://berclo.net/pages-div/statement-en.html
+http://berdina.tripod.com/ahtrini.htm
+http://bereavementselfhelp.victoria.bc.ca/index8.html
+http://bereavementselfhelp.victoria.bc.ca/walking2.html
+http://berkshires.citysearch.com/find/directory/berkshires/120/277/page1.html?init_search=1
+http://berlin.typepad.com/Lucas_and_Racism_New.htm
+http://bernie.cncfamily.com/sc/kymus.htm
+http://bernie.cncfamily.com/sc/rpf_kymus.htm
+http://bessie.englab.slcc.edu/pc/2003/10/weve-reached-slow-spot-in-term.html
+http://best.umd.edu/publications/
+http://beta.music.msn.com/album/?app=2&album=10015636
+http://beta.music.msn.com/album/?app=2&album=10546856
+http://beta.music.msn.com/artist/?artist=16079354&partist=16106116
+http://beta.technorati.com/tag/For+the+home
+http://beta2.eurekalert.org/pubnews.php
+http://beth-h.mrks.org/HP_Fiction/ManWhoLived.html
+http://betonmarkets.info/bets/intraday_double/down
+http://betterdigitalphotography.blogspot.com/
+http://betterme.org/cleansweep.html
+http://betweenarock.blogspot.com/
+http://bexar-tx.tamu.edu/HomeHort/F1Column/2003Articles/NOV30.htm
+http://beyond-the-veil.blogdrive.com/
+http://beyondacademe.com/
+http://beyondcorporate.com/mt/archives/2002_11.html
+http://beyondcorporate.com/mt/archives/2004_01.html
+http://beyondmainstream.com/special/relationships_1.php
+http://beyondradio.com/genre/rock.htm
+http://beyondthecommons.blogspot.com/
+http://beyondtherim.meisheid.com/
+http://beyondtherim.meisheid.com/index.php?p=303
+http://bfa.sdsu.edu/emergencyplan/campuslocalstate.htm
+http://bfasweb.syr.edu/comptrol/checklst.htm
+http://bfasweb.syr.edu/env_hlth/wm/usedoil.htm
+http://bg.catalogagemag.com/ar/marketing_renaissance_list_firm/
+http://bgh.kaleidahealth.org/news/news_display.asp?artID=210
+http://bhas.beverlyhills.k12.ca.us/health.html
+http://bias.blogfodder.net/archives/2003_01.html
+http://bias.blogfodder.net/archives/2005_06.html
+http://bible.gospelcom.net/passage/?book_id=34&chapter=8&version=46
+http://bible.gospelcom.net/passage/?book_id=47&chapter=27&version=31
+http://bible.gospelcom.net/passage/?book_id=48&chapter=9&version=31
+http://bible.gospelcom.net/passage/?book_id=66&version=31
+http://bible.gospelcom.net/passage/?book_id=73&chapter=18&version=31
+http://bibleone.net/print_tbs80.html
+http://bibletools.org/index.cfm/fuseaction/Topical.show/RTD/CGG/ID/1260
+http://bibletools.org/index.cfm/fuseaction/Topical.show/RTD/cgg/ID/577
+http://biblia.com/sex/cloning.htm
+http://biblicalholidays.com/
+http://bicycleaustin.info/justice/whynojustice.html
+http://bicycling.about.com/library/weekly/aa030999.htm
+http://biden.senate.gov/newsroom/details.cfm?id=188500&&
+http://biden.senate.gov/newsroom/details.cfm?id=214798
+http://bierce.thefreelibrary.com/A-Horseman-in-the-Sky
+http://big5.china.com.cn/english/2005/Jan/119037.htm
+http://bigblue.safeshopper.com/about.htm?719
+http://bigboardblog.blogspot.com/
+http://bigdarby.org/mCemeteries.htm
+http://bigorbitgallery.org/soundlab/TEXTARCHIVES/thereforeinterview.html
+http://bigpicture.typepad.com/
+http://bigpicture.typepad.com/comments/2004/04/album_sales_sho.html
+http://bigpicture.typepad.com/comments/2004/08/read_it_here_fi_2.html
+http://bigpicture.typepad.com/comments/2004/10/weak_jobs_numbe.html
+http://bigpicture.typepad.com/comments/2004/10/what_is_the_emp.html
+http://bigpicture.typepad.com/comments/2004/12/music_industry_.html
+http://bigpicture.typepad.com/comments/2005/02/the_false_mathe.html
+http://bigpicture.typepad.com/comments/2005/04/new_arguments_a.html
+http://bigpicture.typepad.com/comments/2005/06/uk_slowing.html
+http://bigrace.attheraces.co.uk/card.asp?raceid=75963&res=yes
+http://bigshark.com/site/page.cfm?PageID=68
+http://bigwhiteguy.com/
+http://bike-exchange.com/Antrim.htm
+http://bikebiz.co.uk/infozone/ad_show.php?id=68
+http://biketothebeach.ms150.org/btb/fund_raising/fund-raising_tips.asp
+http://billburnham.blogs.com/burnhamsbeat/2005/03/top_2005_softwa.html
+http://billburnham.blogs.com/burnhamsbeat/2005/05/deal_flow_is_de.html
+http://billburnham.blogs.com/burnhamsbeat/2005/06/for_the_love_of.html
+http://billburnham.blogs.com/burnhamsbeat/open_source/
+http://billfisher.blogspot.com/2005/05/hope-for-improving-relations-with.html
+http://billgatliff.com/~bgat/twiki/bin/view/Main/BillGatliffResume
+http://billiardsetc.com/games.htm
+http://billmon.org/
+http://billstatus.ls.state.ms.us/documents/2005/html/HB/0900-0999/HB0989IN.htm
+http://billtrue.typepad.com/true_life/
+http://billyworld.typepad.com/i_could_have_been_a_conte/2005/01/daddy_whats_sex.html
+http://binarybonsai.com/
+http://binarybonsai.com/archives/2005/01/31/mtv-and-vh1/
+http://bingo.virgingames.com/virgingames/help/Index.do
+http://bio.fsu.edu/~dhoule/AEBsyl.htm
+http://bioagnews.byu.edu/NewsRelease.asp?id=108
+http://bioc.rice.edu/~lpsmith/IF/bookclub/grip/msg00061.html
+http://biodiversityeconomics.org/valuation/topics-600-00.htm
+http://bioinf.nuigalway.ie/RescueNet/manual5.html
+http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0030207
+http://biology.uky.edu/520/Lab/lab9/Default.htm
+http://biology.usgs.gov/farp/detailed.htm
+http://biology.usgs.gov/luhna/chap2.html
+http://biology.usgs.gov/pierc/PLLindseyPredator1.htm
+http://biome.utoronto.ca/flc/peer-mentors.htm
+http://biomed.brown.edu/Medicine_Programs/ClinicalElectives/radiation626.html
+http://biomedsci.ucsd.edu/ctfa.asp
+http://biomedx.com/microscopes/rrintro/rr3.html
+http://bioplanassociates.com/asm/Abst19.html
+http://bioresearch.ac.uk/browse/mesh/D020496.html
+http://bioteach.ubc.ca/Biodiversity/plantculture/
+http://biotech.indymedia.org/or/2005/06/4334.shtml
+http://biotech.indymedia.org/or/2005/06/4335.shtml
+http://biotech.law.lsu.edu/blaw/bt/smallpox/whfaq.htm
+http://bip.cnrs-mrs.fr/bip10/icpref1.htm
+http://biphome.spray.se/laszlob/phonebug/isdn.htm
+http://bipolar.about.com/library/blmisc/bl-nimhnewcells.htm
+http://bipolar.about.com/od/hospitalization/a/1_weekendinside.htm
+http://birdhouse.org/blog/archives/2004/07/clinton_on_bush.php
+http://birdingonthe.net/mailinglists/TWET.html
+http://birds.cornell.edu/publications/birdscope/Summer1999/thrushes99133.html
+http://birenheide.com/sra/2004AM/program/singlesession.php3?sessid=W9
+http://birmingham.bizjournals.com/birmingham/stories/2005/06/20/smallb2.html
+http://birthfamily.adoption.com/birth-parents/relating-to-others.html
+http://birthstories.com/stories/5453.htm
+http://bishopw.loni.ucla.edu/AIR5/config.html
+http://bismikaallahuma.org/History/jihad-legislate.htm
+http://bit-of-ivory.com/archives/000124.html
+http://bitchphd.blogspot.com/
+http://bitsko.slc.ut.us/
+http://bitworking.org/news/I_m_sorry__I_can_t_kiss_it_and_make_it_better_
+http://biz-whiz.com/article107.html
+http://biz.gamedaily.com/features.asp?article_id=9798&filter=hollywood&email=
+http://biz.thestar.com.my/news/story.asp?file=/2005/1/23/business/9975892&sec=business
+http://biz.yahoo.com/ap/050419/earns_gm.html?.v=14
+http://biz.yahoo.com/ap/050620/rowing_against_offshore.html?.v=2
+http://biz.yahoo.com/ap/050620/rowing_against_offshore.html?.v=2&printer=1
+http://biz.yahoo.com/brn/041217/14546_1.html
+http://biz.yahoo.com/brn/050608/16036.html?.v=1
+http://biz.yahoo.com/brn/050620/16406.html?.v=1
+http://biz.yahoo.com/bw/041129/295496_1.html
+http://biz.yahoo.com/bw/050124/245293_1.html
+http://biz.yahoo.com/bw/050124/245293_1.html?printer=1
+http://biz.yahoo.com/bw/050511/115147.html?.v=1
+http://biz.yahoo.com/bw/050607/75788.html?.v=1
+http://biz.yahoo.com/bw/050620/205750.html?.v=1
+http://biz.yahoo.com/e/040504/bmhc10-q.html
+http://biz.yahoo.com/e/040514/hort10-q.html
+http://biz.yahoo.com/e/040517/robe.ob10-q.html
+http://biz.yahoo.com/e/040524/saup.ob8-k.html
+http://biz.yahoo.com/e/040527/mss10-k.html
+http://biz.yahoo.com/e/040722/aici.pk10-k.html
+http://biz.yahoo.com/e/040803/gt10-q_a.html
+http://biz.yahoo.com/e/041209/dltr10-q.html
+http://biz.yahoo.com/e/050112/nrt10-k.html
+http://biz.yahoo.com/e/050113/rad8-k.html
+http://biz.yahoo.com/iw/050214/080907.html
+http://biz.yahoo.com/ms/050601/135587.html?.v=1
+http://biz.yahoo.com/mu/story.html
+http://biz.yahoo.com/prnews/050106/cgth029_1.html
+http://biz.yahoo.com/prnews/050119/dew035_1.html
+http://biz.yahoo.com/prnews/050124/ukf014_1.html
+http://biz.yahoo.com/prnews/050404/lam070.html?.v=5
+http://biz.yahoo.com/prnews/050502/nem055.html?.v=3
+http://biz.yahoo.com/prnews/050505/nyth166.html?.v=6
+http://biz.yahoo.com/prnews/050517/cltu009.html?.v=7
+http://biz.yahoo.com/prnews/050607/detu014.html?.v=12
+http://biz.yahoo.com/prnews/050615/sfw016.html?.v=12
+http://biz.yahoo.com/ts/041019/10188612_2.html
+http://biz.yahoo.com/usat/050608/12926193.html?.v=6+
+http://biz.yahoo.com/usat/050619/12942544.html?.v=4
+http://bizchina.chinadaily.com.cn/shp_report_info.shtml?id=22
+http://bizgirl.blogspot.com/
+http://bizrate.lycos.com/buy/products__cid--13070300,mer_id--80796.html
+http://bizrate.lycos.com/marketplace/product_info/details__cid--5103,pid--11493008.html
+http://bja.oupjournals.org/cgi/content/full/86/5/678
+http://bjrm2000.com/
+http://bjsm.bmjjournals.com/cgi/content/full/37/6/498
+http://bjulrich.blogspot.com/
+http://bknebel.blogspot.com/2004/07/god-is-calling-are-you-listening.html
+http://blackcincinnati.blogspot.com/
+http://blackdog.threadbearfiberarts.com/
+http://blackfeminism.org/index.php/2005/05/16/an-interesting-look-at-class-in-america/
+http://blackhistorypages.com/Lynching/
+http://blakeross.com/index.php?p=110
+http://blakeross.com/index.php?p=9
+http://blamebush.typepad.com/blamebush/2004/09/boomstick.html
+http://blather.newdream.net/d/dark.html
+http://blather.newdream.net/f/feel.html
+http://blawgcoop.com/badglacier/
+http://blcwebcafe.org/eolissues.asp
+http://blcwebcafe.org/memorials/duke.asp
+http://blindreaders.info/eyeprobs.html
+http://blink.ucsd.edu/Blink/External/Topics/How_To/0,1260,2842,00.html
+http://blink.ucsd.edu/Blink/External/Topics/Sponsor/0,1362,17135,00.html
+http://blissfulknowledge.com/
+http://blissout.blogspot.com/
+http://blisspix.net/index.php?cat=3
+http://blog.622design.com/archives/2005_01.html
+http://blog.absolutearts.com/
+http://blog.absolutearts.com/blogs/archives/00000113.html
+http://blog.absolutearts.com/blogs/archives/archive-022005.html
+http://blog.ask.com/
+http://blog.au.org/
+http://blog.au.org/2004/09/
+http://blog.barlowfriendz.net/
+http://blog.bearstrong.net/000009.html
+http://blog.bluedistortion.com/
+http://blog.brandexperiencelab.org/
+http://blog.browndemocrats.org/archives/week_2005_04_10.php
+http://blog.bzzagent.com/article.php?story=20040606081353310
+http://blog.bzzagent.com/search.php?mode=search&type=stories&author=4
+http://blog.ccsindia.org/mt/archives/health/
+http://blog.cesa12.k12.wi.us/writing/archives/000013.html
+http://blog.chesshouse.com/
+http://blog.chris.de/
+http://blog.contentious.com/archives/2004/07/16/arranging-ideas-knowledge-management-in-human-terms
+http://blog.contentious.com/archives/2005/06/13/more-on-why-daily-blogging-really-is-usually-a-bad-idea
+http://blog.craiglinton.com/index.php/archives/2003/10/
+http://blog.craiglinton.com/index.php/archives/2004/03/
+http://blog.craiglinton.com/index.php/archives/category/baltic-foreign-study/
+http://blog.cryos.net/
+http://blog.ctcevents.com/comments.php?id=9_0_1_0_C
+http://blog.dachte.org/live/entries/entry1074633118.html
+http://blog.davidjanes.com/
+http://blog.dccc.org/mt/archives/002873.html
+http://blog.druidic.net/
+http://blog.druidic.net/archives/cat_media_matters.php?2
+http://blog.educationforadults.com/?postid=7
+http://blog.extremeplanner.com/
+http://blog.fastcompany.com/archives/2004/09/17/corporate_shrink_question_of_the_week.html
+http://blog.fastcompany.com/archives/2004/12/20/question_of_the_week.html
+http://blog.fastcompany.com/archives/2005/01/10/payday_or_holiday.html
+http://blog.fastcompany.com/archives/2005/06/10/vacation_situation.html
+http://blog.fieldmethods.net/index.php?archive=2002-08&blogid=1
+http://blog.flickr.com/flickrblog/2005/03/yahoo_actually_.html
+http://blog.fropper.com/times/relationship_issues/
+http://blog.generationjava.com/roller/page/bayard/Weblog?catname=%2FOpinion
+http://blog.holtz.com/index.php/roadweary
+http://blog.hywell.org/
+http://blog.ianbicking.org/what-really-makes-rails-work.html
+http://blog.ianhamet.com/index.php/archive/date/2005/04/
+http://blog.insideoutmag.com/outabout/2004/11/
+http://blog.ipipi.com/
+http://blog.ipipi.com/blog/InternationalSMS/_archives/2005/1/27/286803.html
+http://blog.ipipi.com/blog/_archives/2005/1/27/286803.html
+http://blog.ipipi.com/blog/smsphones/_archives/2005/1/27/286803.html
+http://blog.jackvinson.com/
+http://blog.jagaimo.com/archive/2004/07/11.aspx
+http://blog.johnkerry.com/blog/archives/002105.html
+http://blog.johnkerry.com/blog/archives/003478.html
+http://blog.joshuaeichorn.com/archives/2004/01/
+http://blog.kir.com/archives/2004_06.asp
+http://blog.kir.com/archives/2004_07.asp
+http://blog.kir.com/archives/2004_08.asp
+http://blog.kir.com/archives/2005_01.asp
+http://blog.kir.com/archives/cat_legal_martha_stewart.asp
+http://blog.larixconsulting.com/blog/Podcasts
+http://blog.larixconsulting.com/blog/Podcasts/_archives/2005/4
+http://blog.leetsoft.com/articles/2005/04/23/typo-2-0-arrives
+http://blog.lextext.com/blog/_archives/2005/5/9/665209.html
+http://blog.lib.umn.edu/
+http://blog.lib.umn.edu/archives/thil0020/carfreelife/2005_04.html
+http://blog.lib.umn.edu/thil0020/carfreelife/
+http://blog.marmot.cc/
+http://blog.marmot.cc/archives/2005/06/11/the-quirks-of-korean-culture/
+http://blog.mathemagenic.com/2002/10/25.html
+http://blog.mathemagenic.com/2004/06/14.html
+http://blog.megacity.org/archives/001840.php
+http://blog.mises.org/blog/
+http://blog.mises.org/blog/archives/003354.asp
+http://blog.monkeymask.net/
+http://blog.monkeymethods.org/2005/01/bill-gates-strikes-pose-for-teen-beat.html
+http://blog.moxiecinema.com/view.php?id=36
+http://blog.musselmanforamerica.com/archives/cat_day2day.html
+http://blog.myspace.com/index.cfm?fuseaction=blog.ListAll&friendID=7428306&Mytoken=20050604221047
+http://blog.myspace.com/index.cfm?fuseaction=blog.view&friendID=7428306&blogID=28538026&Mytoken=20050613112016
+http://blog.news-record.com/lexblog/archives/2004/12/if_all_of_us_bu_1.html
+http://blog.news-record.com/staff/jrblog/archives/2005/01/my_newspaper_co_2.html
+http://blog.news-record.com/staff/letters/archives/2005/04/patriot_act_int.html
+http://blog.news-record.com/staff/letters/archives/2005/06/drunk_drivers_m.html
+http://blog.news-record.com/staff/letters/archives/2005/06/give_the_gift_o.html
+http://blog.news-record.com/staff/lexblog/archives/2005/01/newsrecordcom_a_1.html
+http://blog.news-record.com/staff/sportsextra/archives/2004/10/
+http://blog.newstandardnews.net/iraqdispatches/archives/000698.html
+http://blog.nuclearmoose.com/archives/2004/03/24/scared-sacred/
+http://blog.nuclearmoose.com/narchives.php
+http://blog.ordinarylife.co.nz/index.php?p=19
+http://blog.outer-court.com/archive/2005-06-21.html
+http://blog.paullyon.net/
+http://blog.pegasusnews.com/2005/06/2020_v_spca_of__1.html
+http://blog.pff.org/archives/communications/
+http://blog.plazes.de/index.php?itemid=38&catid=1
+http://blog.postapocalypse.com/dave/200305archive002.asp
+http://blog.pricescan.com/archives/2005/02/laptops_of_ever.html
+http://blog.pygmygoat.net/index.php?m=200410
+http://blog.qiken.org/archives/2004/03/the_giving_of_n.html
+http://blog.qiken.org/archives/2004/04/26_pounds_and_w.html
+http://blog.radioleft.com/blog/_archives/2005/6/8/919398.html
+http://blog.rajanr.com/?item=will-disaster-stir-sri-lanka-peace
+http://blog.redherring.com/MT/archives/main/000234.html
+http://blog.redherring.com/MT/archives/main/000316.html
+http://blog.redherring.com/MT/archives/main/2004_07.html
+http://blog.revmike.us/
+http://blog.rockthevote.com/
+http://blog.rockthevote.com/2005/06/health-care-crisis-for-young-people.html
+http://blog.seattlepi.nwsource.com/comment/mt-comments.cgi?entry_id=2955
+http://blog.seattletimes.nwsource.com/betweenthelines/
+http://blog.stayfreemagazine.org/2005/05/radio_free_clea.html
+http://blog.stayfreemagazine.org/2005/06/mcdonalds_exper.html
+http://blog.thismagazine.ca/archives/2005/06/france_europe_a.html
+http://blog.tmcnet.com/blog/tom-keating/voip/cablevision-price-drop-analysis.asp
+http://blog.tmcnet.com/welcome-to-america-now-put-your-hands-up-and-face-the-wall.asp
+http://blog.topix.net/archives/000016.html
+http://blog.unquiet.net/index.php?s=stage&submit=ww
+http://blog.wfmu.org/freeform/2005/02/i_know_what_boy.html
+http://blog.wfmu.org/freeform/radio/
+http://blog.windwalking.com/2004/08/parable-of-glass-and-old-w_109341111338206275.asp
+http://blog.wired.com/sterling/
+http://blog.wishingline.com/archives/2004_08.php
+http://blog.x180.net/2005/06/the_future_of_u.html
+http://blog.xrefer.com/
+http://blog.ziffdavis.com/coursey
+http://blog.ziffdavis.com/coursey/
+http://blog.zmag.org/bloggers/?blogger=chomsky
+http://blog.zmag.org/index.php/weblog/entry/a_little_respect_please/
+http://blog.zmag.org/index.php/weblog/entry/on_the_costs_of_being_left/
+http://blog.zmag.org/rocinante/archives/000124.html
+http://blog.zmag.org/rocinante/archives/000851.html
+http://blog.zmag.org/thoughtdreams/archives/2004_07.html
+http://blogborygmi.blogspot.com/2005/05/diversion.html
+http://blogcritics.org/archives/2004/06/20/045219.php
+http://blogcritics.org/archives/2004/08/18/235020.php
+http://blogcritics.org/archives/2004/10/17/140142.php
+http://blogcritics.org/archives/2004/11/24/115137.php
+http://blogcritics.org/archives/2005/01/19/191919.php
+http://blogcritics.org/archives/2005/01/26/105113.php
+http://blogcritics.org/archives/2005/02/01/111722.php
+http://blogcritics.org/archives/2005/02/04/120529.php
+http://blogdayafternoon.com/articles/04/10/19/7557791/
+http://blogger.xs4all.nl/steeph/archive/2005/03/25/32417.aspx
+http://blognomic.blogspot.com/2004_01_18_blognomic_archive.html
+http://blogofpandora.blogspot.com/2004_01_01_blogofpandora_archive.html
+http://blogquebecois.com/
+http://blogranger.typepad.com/blogclub/2004/08/ncaa05it_is_fin.html
+http://blogs.aidsmeds.com/joe/archives/2005/02/when_coming_out.html
+http://blogs.aidsmeds.com/jonathan/archives/2005/06/ch_ch_ch_change.html
+http://blogs.apress.com/archives/000440.html
+http://blogs.apress.com/archives/000519.php?author=gary_cornell
+http://blogs.ascential.com/jonathan/archives/2004/09/
+http://blogs.bootsnall.com/michelle/
+http://blogs.cocoondev.org/stevenn/archives/2003_11.html
+http://blogs.codehaus.org/people/tirsen/archives/001041_ruby_on_rails_and_fastcgi_scaling_using_processes_instead_of_threads.html
+http://blogs.duncanmackenzie.net/duncanma/archive/2004/04/20.aspx
+http://blogs.guardian.co.uk/election2005/
+http://blogs.guardian.co.uk/election2005/archives/2005/04/25/liberal_democrat_press_conference.html
+http://blogs.guardian.co.uk/games/archives/2004/09/20/world_blown_away_by_us_storms.html
+http://blogs.guardian.co.uk/games/archives/2005/02/14/its_a_crime.html
+http://blogs.guardian.co.uk/games/archives/2005/06/15/mobile_gaming_more_popular_with_women_than_men.html
+http://blogs.guardian.co.uk/global/kamal_ahmed.html
+http://blogs.indiewire.com/gregpak/archives/2004_05.html
+http://blogs.indiewire.com/gregpak/archives/cat_robot_stories.html
+http://blogs.indiewire.com/morganspurlock/
+http://blogs.indiewire.com/morganspurlock/archives/000917.html
+http://blogs.ittoolbox.com/supplychain/engineer/archives/000627.asp
+http://blogs.law.harvard.edu/Germany2/
+http://blogs.law.harvard.edu/lydon/2003/11/04
+http://blogs.law.harvard.edu/three/2003/07/21
+http://blogs.linux.ie/yarr/2004/04/
+http://blogs.linux.ie/yarr/category/Banal/
+http://blogs.mit.edu/madmatt/posts/4102.aspx
+http://blogs.msdn.com/372794.aspx
+http://blogs.msdn.com/394834.aspx
+http://blogs.msdn.com/David_Gristwood/archive/2004/06/24/164849.aspx
+http://blogs.msdn.com/LifeOnTitan
+http://blogs.msdn.com/a_pasha/archive/2005/01.aspx
+http://blogs.msdn.com/alanpa/archive/2004/07.aspx
+http://blogs.msdn.com/alexbarn/archive/2005/01.aspx
+http://blogs.msdn.com/andypennell/archive/2004/06/28/168074.aspx
+http://blogs.msdn.com/ashgupta/archive/2004/05/15/132452.aspx
+http://blogs.msdn.com/carmencr/default.aspx
+http://blogs.msdn.com/chris_pratley/archive/2004/02/24/79690.aspx
+http://blogs.msdn.com/chris_pratley/archive/2004/04/29/123619.aspx
+http://blogs.msdn.com/classdesigner/archive/2005/02/25/380023.aspx
+http://blogs.msdn.com/danielfe/archive/2004/07/30/201459.aspx
+http://blogs.msdn.com/ericgu/archive/2005/06/19/430640.aspx
+http://blogs.msdn.com/exchange/
+http://blogs.msdn.com/ie/archive/2004/12/03/274330.aspx
+http://blogs.msdn.com/ie/archive/2005/01/24/359887.aspx
+http://blogs.msdn.com/ie/archive/2005/02/15/373104.aspx
+http://blogs.msdn.com/ie/archive/2005/04/22/410963.aspx
+http://blogs.msdn.com/ie/archive/2005/05/16/417732.aspx
+http://blogs.msdn.com/ie/archive/2005/06/09/427410.aspx
+http://blogs.msdn.com/ie/default.aspx
+http://blogs.msdn.com/jamesnewkirk/archive/2005/01/01.aspx
+http://blogs.msdn.com/jason_anderson/archive/2004/06/04/148252.aspx
+http://blogs.msdn.com/jasonmatusow/archive/2005/03/14/395510.aspx
+http://blogs.msdn.com/jim_glass/
+http://blogs.msdn.com/jim_glass/archive/2005/04/04/405220.aspx
+http://blogs.msdn.com/jim_glass/archive/2005/06/16/429807.aspx
+http://blogs.msdn.com/jim_glass/archive/2005/4/4.aspx
+http://blogs.msdn.com/jim_glass/default.aspx
+http://blogs.msdn.com/jledgard/archive/0001/01/01/73091.aspx
+http://blogs.msdn.com/jledgard/archive/2004/02/14/73091.aspx
+http://blogs.msdn.com/jobsblog/
+http://blogs.msdn.com/jobsblog/archive/2004/08/24/219711.aspx
+http://blogs.msdn.com/jobsblog/archive/2005/06/01/423909.aspx
+http://blogs.msdn.com/jobsblog/default.aspx
+http://blogs.msdn.com/kcwalina/archive/2004/11/03/251722.aspx
+http://blogs.msdn.com/kcwalina/archive/2004/11/18/266099.aspx
+http://blogs.msdn.com/keith_short/
+http://blogs.msdn.com/korbyp/archive/category/2366.aspx
+http://blogs.msdn.com/larryosterman/archive/2005/01/03/345889.aspx
+http://blogs.msdn.com/mfussell/archive/2004/05/13/130969.aspx
+http://blogs.msdn.com/mgrier/archive/2004/07.aspx
+http://blogs.msdn.com/mgrier/archive/2004/7/14.aspx
+http://blogs.msdn.com/michkap/archive/2004/12/27/332618.aspx
+http://blogs.msdn.com/michkap/archive/2005/04/26/412398.aspx
+http://blogs.msdn.com/michkap/archive/2005/05.aspx
+http://blogs.msdn.com/mikehall/archive/2005/01/18/355739.aspx
+http://blogs.msdn.com/mikehall/archive/2005/04/15/408595.aspx
+http://blogs.msdn.com/msdnstudentflash/archive/category/7021.aspx
+http://blogs.msdn.com/msnsearch/
+http://blogs.msdn.com/msnsearch/archive/2005/05/15/417691.aspx
+http://blogs.msdn.com/mssmallbiz/archive/2005/06/06/425681.aspx
+http://blogs.msdn.com/nrjs/atom.aspx
+http://blogs.msdn.com/nrjs/rss.aspx
+http://blogs.msdn.com/oldnewthing/archive/2004/01/26/62992.aspx
+http://blogs.msdn.com/rdonovan/archive/2004/12/19.aspx
+http://blogs.msdn.com/rick_schaut/
+http://blogs.msdn.com/rick_schaut/archive/2004/02/08/69714.aspx
+http://blogs.msdn.com/rickla/archive/2005/03/22/400684.aspx
+http://blogs.msdn.com/ricom/archive/2004/01/08/48796.aspx
+http://blogs.msdn.com/ricom/archive/category/2139.aspx
+http://blogs.msdn.com/robburke/archive/2005/03.aspx
+http://blogs.msdn.com/shaykatc/archive/2005/01/20/357823.aspx
+http://blogs.msdn.com/smguest/archive/2004/05.aspx
+http://blogs.msdn.com/stuart_kent/articles/142330.aspx
+http://blogs.msdn.com/suzcook/archive/2003/07/08/57211.aspx
+http://blogs.msdn.com/theshow/archive/2005/05/03/414356.aspx
+http://blogs.msdn.com/vsdata/archive/2005/05.aspx
+http://blogs.msdn.com/vside/archive/2004/06/22/162567.aspx
+http://blogs.msdn.com/wojtek/archive/2005/05/02/414129.aspx
+http://blogs.officezealot.com/spiller/archive/2004/06/11/476.aspx
+http://blogs.osafoundation.org/mitch/000097.html
+http://blogs.osafoundation.org/mitch/000196.html
+http://blogs.pcworld.com/techlog/archives/000722.html
+http://blogs.pcworld.com/techlog/archives/000740.html
+http://blogs.pumpernickle.net/billy/life_of_billy/
+http://blogs.quantumdiaries.org/33/
+http://blogs.redhat.com/executive/archives/000122.html
+http://blogs.salon.com/0001399/
+http://blogs.salon.com/0001429/
+http://blogs.salon.com/0001444/
+http://blogs.salon.com/0001573/
+http://blogs.salon.com/0001739/2004/02/11.html
+http://blogs.salon.com/0001772/
+http://blogs.salon.com/0001772/stories/2003/09/26/voyageToTheBottomOfTheSea.html
+http://blogs.salon.com/0001883/
+http://blogs.salon.com/0002007/
+http://blogs.salon.com/0002007/2005/01/10.html
+http://blogs.salon.com/0002007/2005/03/30.html
+http://blogs.salon.com/0002007/2005/06/02.html
+http://blogs.salon.com/0002007/categories/businessInnovation/
+http://blogs.salon.com/0002007/categories/politicsEconomics/
+http://blogs.salon.com/0002007/stories/2003/05/02/businessPapersTableOfContents.html
+http://blogs.salon.com/0002296/categories/laLanterneMakeweightOfTheLeft/
+http://blogs.salon.com/0002855/
+http://blogs.salon.com/0002874/
+http://blogs.salon.com/0002874/2005/01/03.html
+http://blogs.salon.com/0002874/2005/06/18.html
+http://blogs.salon.com/0003052/stories/2003/10/18/911AndALackOfPresidentialLeadership.html
+http://blogs.salon.com/0003174/categories/novelBeginnings/
+http://blogs.salon.com/0003364/
+http://blogs.setonhill.edu/KellynMiller/
+http://blogs.setonhill.edu/nmj/cat_literature.html
+http://blogs.sohh.com/media_check/
+http://blogs.starwars.com/darthyoda/12
+http://blogs.sun.com/gregp
+http://blogs.sun.com/hangal
+http://blogs.sun.com/marla/20041217
+http://blogs.sun.com/norbert/20050227
+http://blogs.sun.com/roller/comments/korn/LargePrintWeblog/the_csun_conference_on_technology
+http://blogs.sun.com/roller/comments/korn/Weblog/the_csun_conference_on_technology
+http://blogs.sun.com/roller/page/DaneseCooper/20050321
+http://blogs.sun.com/roller/page/MartinHardee/20041101
+http://blogs.sun.com/roller/page/MortazaviBlog/?anchor=mencius_on_the_common_nature
+http://blogs.sun.com/roller/page/alur/Weblog?catname=%2FDen
+http://blogs.sun.com/roller/page/bmc/20040706
+http://blogs.sun.com/roller/page/dancer/Weblog?catname=%2FGeneral
+http://blogs.sun.com/roller/page/dang
+http://blogs.sun.com/roller/page/danmcd/20050614
+http://blogs.sun.com/roller/page/danmcd/Weblog
+http://blogs.sun.com/roller/page/danmcd/Weblog?catname=%2FIPsec
+http://blogs.sun.com/roller/page/eric_boutilier/20050406
+http://blogs.sun.com/roller/page/hangal/20041227
+http://blogs.sun.com/roller/page/jonathan/20040818
+http://blogs.sun.com/roller/page/jonathan/20040930
+http://blogs.sun.com/roller/page/korn/20041019
+http://blogs.sun.com/roller/page/korn?entry=the_csun_conference_on_technology
+http://blogs.sun.com/roller/page/mph/Weblog?catname=%2FPoker
+http://blogs.sun.com/roller/page/pat/20041013
+http://blogs.sun.com/roller/page/pat/20050210
+http://blogs.sun.com/roller/page/paulhu/20050414
+http://blogs.sun.com/rtenhove/20041029
+http://blogs.thebhg.org/waxingphilosphical/
+http://blogs.vbcity.com/wonkotsane/archive/2005/06/09/2222.aspx
+http://blogs.venturacountystar.com/vcs/realestate/archives/2005/04/condo_market_on.html
+http://blogs.warwick.ac.uk/amcfarland/
+http://blogs.warwick.ac.uk/mmannion/
+http://blogs.writingproject.org/eastside2007/2004/09/23
+http://blogs.zdnet.com/
+http://blogs.zdnet.com/BTL/?m=20050304
+http://blogs.zdnet.com/BTL/?m=20050503
+http://blogs.zdnet.com/BTL/?p=1339
+http://blogs.zdnet.com/BTL/?p=1511
+http://blogs.zdnet.com/BTL/?p=1553
+http://blogs.zdnet.com/BTL/index.php?cat=13
+http://blogs.zdnet.com/BTL/index.php?p=1511
+http://blogs.zdnet.com/BTL/index.php?p=914
+http://blogs.zdnet.com/Berlind/
+http://blogs.zdnet.com/Berlind/?p=30
+http://blogs.zdnet.com/Berlind/?p=46
+http://blogs.zdnet.com/Berlind/index.php?cat=6
+http://blogs.zdnet.com/Gillmor/?m=20050113
+http://blogs.zdnet.com/Gillmor/?p=34
+http://blogs.zdnet.com/Gillmor/index.php?p=34
+http://blogs.zdnet.com/Gillmor/index.php?p=74
+http://blogs.zdnet.com/Ou/?p=46
+http://blogs.zdnet.com/Ou/?p=49
+http://blogs.zdnet.com/Ou/index.php?p=25
+http://blogs.zdnet.com/Ou/index.php?p=43
+http://blogs.zdnet.com/Ou/index.php?p=9
+http://blogs.zdnet.com/open-source/
+http://blogs.zdnet.com/open-source/?m=200506
+http://blogs.zdnet.com/service-oriented/?m=200506
+http://blogshares.com/yabbse/index.php?topic=3903.msg29312
+http://blogsmarketing4me.blogharbor.com/blog/ForAHealthyBody/_archives/2005/4/24/616692.html
+http://blogsmarketing4me.blogharbor.com/blog/_archives/2005/4/24/616692.html
+http://blogspot.mg.co.za/?q=blog&from=105
+http://blogspot.mg.co.za/?q=blog&from=60
+http://blogspot.mg.co.za/?q=node/1002
+http://blogspot.mg.co.za/?q=node/1041
+http://blogspot.mg.co.za/?q=node/1071
+http://blogspot.mg.co.za/?q=node/339
+http://blogspot.mg.co.za/?q=node/76
+http://blondejustice.blogspot.com/2005/05/praise-lord.html
+http://blonz.com/olestra.html
+http://bloodandtreasure.typepad.com/blood_treasure/
+http://bloodbankers.typepad.com/submerging_markets/2003/11/first_world_cri.html
+http://bloodbanksdelhi.com/content/NationalBloodPolicy2002.htm
+http://bloodbath.biz/
+http://bloombergmarketing.blogs.com/
+http://bloxword.ca/dtoh.htm
+http://bls.gov/oco/ocos016.htm
+http://bluebirdescape.com/archives/2003/02/index.php
+http://bluebook.state.or.us/state/constitution/constitution11-4.htm
+http://bluebuddies.com/help/smurf_names_and_list_of_the_smurfs.htm
+http://blueskyfilters.com/year-end-sale.html
+http://bmj.bmjjournals.com/archive/7070nd6.htm
+http://bmj.bmjjournals.com/archive/7122/7122ed2.htm
+http://bmj.bmjjournals.com/cgi/content/abridged/319/7220/1289
+http://bmj.bmjjournals.com/cgi/content/full/309/6964/1259
+http://bmj.bmjjournals.com/cgi/content/full/316/7141/1337
+http://bmj.bmjjournals.com/cgi/content/full/317/7171/1496
+http://bmj.bmjjournals.com/cgi/content/full/318/7175/4
+http://bmj.bmjjournals.com/cgi/content/full/320/7244/1269?view=full&pmid=10797045
+http://bmj.bmjjournals.com/cgi/content/full/322/7294/1086/a
+http://bmj.bmjjournals.com/cgi/content/full/323/7307/263
+http://bmj.bmjjournals.com/cgi/content/full/328/7455/1533
+http://bmj.bmjjournals.com/cgi/content/full/329/7462/394
+http://bmj.bmjjournals.com/content/vol320/issue7234/
+http://bmj.bmjjournals.com/content/vol324/issue7331/
+http://bmj.bmjjournals.com/hitparade/20040807.shtml
+http://bmrc.berkeley.edu/people/chaffee/fips/fips.html
+http://bms.brown.edu/admissions/routes.html
+http://bn.tafe.qld.gov.au/courses_and_careers/student_projects/crestpoint/
+http://bnoopy.typepad.com/bnoopy/
+http://bnoopy.typepad.com/bnoopy/2004/09/persistence_pay_1.html
+http://board.iexbeta.com/lofiversion/index.php/t48400.html
+http://board.rpgamer.com/cgi-bin/ikonboard.cgi?act=ST;f=4;t=9984
+http://board.uscho.com/archive/index.php/t-40275.html
+http://boardgames.about.com/cs/poker/a/texas_rules.htm
+http://boardingschools.hobsons.com/pupilzone.jsp?id=pupilzone_getting_ready
+http://boards.avalonhill.com/archive/index.php/t-4966.html
+http://boards.avalonhill.com/showthread.php?mode=hybrid&t=4966
+http://boards.avalonhill.com/showthread.php?t=4966&page=2&pp=10
+http://boards.charlierose.com/board/pst.asp?m=r&ti=11018&fi=34
+http://boards.charlierose.com/board/pst.asp?m=tq&ti=11018&fi=34
+http://boards.diynetwork.com/eve/ubb.x/a/tpc/f/7141077022/m/9871087022/r/4611028022
+http://boards.harrypotter.warnerbros.com/web/thread.jspa?threadID=2000014555&tstart=0
+http://boards.harrypotter.warnerbros.com/web/thread.jspa?threadID=2000304971&start=90&tstart=0
+http://boards.hbo.com/thread.jspa?threadID=600001207&messageID=600243073
+http://boards.hgtv.com/eve/ubb.x/a/tpc/f/4714002552/m/5291071202
+http://boards.hgtv.com/eve/ubb.x/a/tpc/f/4714002552/m/6341005402/inc/1
+http://boards.hgtv.com/eve/ubb.x/a/tpc/f/8504070782/m/6561030491
+http://boards.historychannel.com/thread.jspa?threadID=100033295&messageID=300411425&start=45
+http://boards.historychannel.com/thread.jspa?threadID=100033295&start=45&tstart=0
+http://boards.historychannel.com/thread.jspa?threadID=300024993&tstart=0&start=-1
+http://boards.immigrationportal.com/showthread.php?t=149573&goto=nextnewest
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@1.HGhsb9P0JIG%5E0@.ef199a3/216
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@107.fctdcBJJbji%5E0@.ef060d2/2744
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@107.fctdcBJJbji%5E0@.ef060d2/2746
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@141.bpHAbHVhHa4%5E0@.ef06889/165
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@141.bpHAbHVhHa4%5E0@.ef06889/170
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@17.bp7UbKbrHcB%5E0@.ef06883/686
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@170.sia4cICpeM3%5E0@.ef068bd/85
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@177.w3p2c18VdmF%5E0@.ef06115/218
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@196.pGeFcEyqdYE%5E0@.ef06115/218
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@197.ZxVxcqIEeUW%5E0@.ef06877/32
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@208.tqUMbVxcHBp%5E0@.ef06889/167
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@208.tqUMbVxcHBp%5E0@.ef06889/170
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@216.G9icbzSVIgf%5E0@.ef06881/256
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@229.59vlbPDfIxC%5E0@.ef13f13/119
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@229.59vlbPDfIxC%5E0@.ef13f13/70
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@229.59vlbPDfIxC%5E0@.ef13f13/73
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@229.59vlbPDfIxC%5E0@.ef13f13/82
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@244.tHS2bbt7JxT%5E0@.ef26f6a/102
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@244.tHS2bbt7JxT%5E0@.ef26f6a/104
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@86.Ac0ncUvVb7H%5E0@.ef068ab/955
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@89.XHWnbx26Jh3%5E0@.ef06889/167
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@89.XHWnbx26Jh3%5E0@.ef06889/172
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@96.CFWscy9Ld8I%5E0@.ef1180c/294
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?14@99.Ri8scHHgeFg%5E0@.ef199a3/943
+http://boards.lp.findlaw.com/cgi-bin/WebX.fcgi?7@213.g7b4br4EK3y%5E0@.ef150d8/4524
+http://boards.nbc.com/bb/showflat.php?Cat=&Number=118755&page=&view=&sb=5&o=&fpart=6&vc=1
+http://boards.slackercentral.com/archive/index.php/f-1-p-18.html
+http://boards.youthnoise.com/eve/ubb.x/a/tpc/f/21510584663/m/88510014763/p/3
+http://boards.youthnoise.com/eve/ubb.x/a/tpc/f/773295355/m/85810215763/inc/-1
+http://boards1.wizards.com/archive/index.php/t-124017.html
+http://boards1.wizards.com/archive/index.php/t-214010.html
+http://bobdylanbiography.8k.com/bob_dylan_albums/time_out_of_mind.htm
+http://bobhopeinsurance.com/pages/b&bapplication.html
+http://bobwhitson.typepad.com/howlings/2004/10/doors_opened_fo.html
+http://bobwyman.pubsub.com/main/2004/10/
+http://bodhisattva.no-ip.org/?m=200505
+http://bodyandsoul.typepad.com/
+http://bodyelectric.blogspot.com/
+http://boe.mars.k12.wv.us/parkview/speechsound.htm
+http://boe.putn.k12.wv.us/boe/dailym/dm90423.html
+http://boffers.brunst.dk/aromatherapy-product.html
+http://boffers.brunst.dk/bank-account.html
+http://boffers.brunst.dk/computer-technology-school.html
+http://boffers.brunst.dk/discount-camera-store.html
+http://boffers.brunst.dk/earn-college-degree-online.html
+http://boffers.brunst.dk/georgia-workers-comp.html
+http://boffers.brunst.dk/guaranteed-personal-loan-bad-credit.html
+http://boffers.brunst.dk/healthy-weight-loss.html
+http://boffers.brunst.dk/maine-mortgage-rate.html
+http://boffers.brunst.dk/mortage-refinance.html
+http://boffers.brunst.dk/mortgage-companies.html
+http://boffers.brunst.dk/novotel-north-york.html
+http://boffers.brunst.dk/office-space-rental.html
+http://boffers.brunst.dk/the-gaming-club.html
+http://boffers.brunst.dk/used-chevy-van.html
+http://bogglesworld.com/
+http://boika.lockergnome.net/blog/_archives/2004/10
+http://boingboing.net/
+http://boingboing.net/2004_02_01_archive.html
+http://boingboing.net/suggest.html
+http://bojack.org/
+http://bojack.org/cgi-bin/mt-comments.cgi?entry_id=266
+http://bojack.org/mt-arc/002061.html
+http://bojack.org/mt-arc/cat_science.html
+http://bokardo.com/archives/the-difficulty-with-articulating-design/
+http://bokcenter.fas.harvard.edu/docs/TFTrace.html
+http://bolsinger.blogs.com/weblog/
+http://bolsinger.blogs.com/weblog/2005/06/worship_waves_a.html
+http://bolsinger.blogs.com/weblog/bloggers_and_books/
+http://bolsinger.blogs.com/weblog/holy_week/
+http://bonine.blogs.com/roger/
+http://bonoboathome.blogspot.com/
+http://bookangst.blogspot.com/2005/01/majority-list-agents-join-midlist-fray.html
+http://bookblog.net/bbarchives/2002_07.html
+http://bookblog.net/bbarchives/2003_04.html
+http://bookcrossing.com/journal/1112088
+http://books.bankhacker.com/Michael+Silverstein/
+http://books.confucius007.com/
+http://books.dreambook.com/jittichai/main.html
+http://books.global-investor.com/books/14797.htm?ginPtrCode=00000&identifier=
+http://books.global-investor.com/books/16945.htm?ginPtrCode=00000&identifier=
+http://books.global-investor.com/books/5427.htm?ginPtrCode=00000&identifier=
+http://books.global-investor.com/pages/gurus.htm?Mode=Rules&PerIndex=2891&ginPtrCode=00000&identifier=
+http://books.guardian.co.uk/bookerprize2004/story/0,14182,1322895,00.html
+http://books.guardian.co.uk/departments/artsandentertainment/story/0,6000,1267907,00.html
+http://books.guardian.co.uk/departments/biography/story/0,6000,718044,00.html
+http://books.guardian.co.uk/departments/classics/story/0,6000,1445404,00.html
+http://books.guardian.co.uk/departments/generalfiction/story/0,6000,1509033,00.html
+http://books.guardian.co.uk/departments/generalfiction/story/0,6000,563868,00.html
+http://books.guardian.co.uk/departments/history/story/0,6000,1177061,00.html
+http://books.guardian.co.uk/departments/politicsphilosophyandsociety/story/0,6000,1333956,00.html
+http://books.guardian.co.uk/departments/politicsphilosophyandsociety/story/0,6000,463961,00.html
+http://books.guardian.co.uk/departments/scienceandnature/story/0,6000,1498612,00.html
+http://books.guardian.co.uk/digestedread/story/0,6550,1377227,00.html
+http://books.guardian.co.uk/extracts/story/0,6761,1483626,00.html
+http://books.guardian.co.uk/extracts/story/0,6761,507694,00.html
+http://books.guardian.co.uk/extracts/story/0,6761,783558,00.html
+http://books.guardian.co.uk/firstchapters/story/0,6761,689991,00.html
+http://books.guardian.co.uk/harrypotter/story/0,10761,1012394,00.html
+http://books.guardian.co.uk/originalfiction/0,13773,1007506,00.html
+http://books.guardian.co.uk/originalfiction/story/0,13773,1513985,00.html
+http://books.guardian.co.uk/poetryworkshop/story/0,15167,1441019,00.html
+http://books.guardian.co.uk/review/story/0,12084,1134516,00.html
+http://books.guardian.co.uk/review/story/0,12084,1141955,00.html
+http://books.guardian.co.uk/review/story/0,12084,1300982,00.html
+http://books.guardian.co.uk/review/story/0,12084,1384787,00.html
+http://books.guardian.co.uk/review/story/0,12084,1410210,00.html
+http://books.guardian.co.uk/review/story/0,12084,1449533,00.html
+http://books.guardian.co.uk/review/story/0,12084,947453,00.html
+http://books.guardian.co.uk/reviews/biography/0,6121,1248087,00.html
+http://books.guardian.co.uk/reviews/biography/0,6121,1489451,00.html
+http://books.guardian.co.uk/reviews/generalfiction/0,6121,713289,00.html
+http://books.guardian.co.uk/reviews/history/0,6121,1301719,00.html
+http://books.guardian.co.uk/reviews/poetry/0,6121,1385515,00.html
+http://books.guardian.co.uk/shoptalk/page/0,15697,1417776,00.html
+http://books.guardian.co.uk/top10s/top10/0,6109,99685,00.html
+http://books.kelkoo.co.uk/b/a/cpc_5101_ps_3289741_gs_16273358.html
+http://books.kelkoo.co.uk/b/a/cpc_5101_ps_5342519_gs_16271796.html
+http://books.kelkoo.co.uk/b/a/cpc_5101_ps_5473266_gs_16271817.html
+http://books.monstersandcritics.com/features/article_254.php/War,_Politics_and_Oil...or_Lack_of_It!
+http://books.nap.edu/books/0309048877/html/757.html
+http://books.nap.edu/books/0309052270/html/139.html
+http://books.nap.edu/books/0309070953/html/111.html
+http://books.nap.edu/books/0309070953/html/86.html
+http://books.nap.edu/books/0309075742/html/9.html
+http://books.nap.edu/books/0309087244/html/64.html
+http://books.nap.edu/books/NI000154/html/17.html
+http://books.nap.edu/catalog/5774.html
+http://books.nap.edu/catalog/6407.html
+http://books.nap.edu/html/IT_counterterror/ch2.html
+http://books.nap.edu/html/broadband/ch1.html
+http://books.nap.edu/openbook/0309044286/html/54.html
+http://books.nap.edu/openbook/0309075742/html/9.html
+http://booksmith.blogspot.com/2005/02/march-events-at-booksmith-author.html
+http://bookstore.gpo.gov/eresponse.html
+http://bookstore.gpo.gov/newpubs/042805.html
+http://bookstore.yorku.ca/index.cfm?index=tfstextbooksearch&cfid=592453&cftoken=39191114
+http://bookswelike.net/isbn/0807047260
+http://boortz.com/nuze/200411/11102004.html
+http://bopl.samharris.us/
+http://bopuc.levendis.com/weblog/
+http://bor.musselmanforamerica.com/mt/archives/004005.html
+http://boredumb.com/wordpress/index.php?cat=1
+http://boredumb.com/wordpress/index.php?cat=6
+http://boredumb.com/wordpress/index.php?m=200412
+http://borgenproject.org/
+http://borntoexplore.org/addbooks.htm
+http://borzoiblog.com/
+http://boston.bizjournals.com/boston/stories/2004/04/05/newscolumn1.html
+http://boston.bizjournals.com/boston/stories/2005/01/24/newscolumn4.html
+http://boston.bizjournals.com/boston/stories/2005/06/27/daily46.html
+http://boston.bizjournals.com/boston/stories/2005/06/27/daily46.html?jst=t3_ln_hl
+http://boston.blacksoftware.com/
+http://boston.k12.ma.us/bps/budget04/physical.asp
+http://bostonbrat.net/brady/arcsept04.html
+http://bostonclub.mit.edu/home/news/president/200105.html
+http://bostonian71.blogspot.com/
+http://bostonian71.blogspot.com/2004_06_01_bostonian71_archive.html
+http://bostonreview.mit.edu/BR20.2/Roemer.html
+http://bostonreview.mit.edu/BR27.1/stone.html
+http://bostonteachnet.org/chaffee/chaffee.htm
+http://bostonworks.boston.com/globe/articles/032303_overti.html
+http://bostonworks.boston.com/globe/articles/041804_work.html
+http://bostonworks.boston.com/globe/articles/072003_perks.html
+http://bostonworks.boston.com/globe/articles/100304_stress.html
+http://bostonworks.boston.com/globe/articles/102603_coach.html
+http://bostonworks.boston.com/globe/balance/archives/052205.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/031603.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/041705.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/062004.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/091204.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/091502.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/102702.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/111702.shtml
+http://bostonworks.boston.com/globe/job_doc/archives/112402.shtml
+http://bostonworks.boston.com/globe/out_field/archive/011605.shtml
+http://bostonworks.boston.com/globe/out_field/archive/011804.shtml
+http://bostonworks.boston.com/globe/out_field/archive/013005.shtml
+http://bostonworks.boston.com/globe/out_field/archive/030203.shtml
+http://bostonworks.boston.com/globe/out_field/archive/051505.shtml
+http://bostonworks.boston.com/globe/out_field/archive/083103.shtml
+http://bostonworks.boston.com/globe/out_field/archive/103104.shtml
+http://bostonworks.boston.com/globe/out_field/archive/120703.shtml
+http://bostonworks.boston.com/globe/out_field/archive/122604.shtml
+http://bostonworks.boston.com/globe/view_cube/archive/011903.shtml
+http://bostonworks.boston.com/globe/view_cube/archive/092103.shtml
+http://bostonworks.boston.com/hr/hrexpert/articles/052505.shtml
+http://botanicalgarden.berkeley.edu/program/4prog_apr.shtml
+http://boundarylines.typepad.com/
+http://boykiller.pitas.com/
+http://boysbriefs.blogspot.com/
+http://boysbriefs.blogspot.com/2003_10_01_boysbriefs_archive.html
+http://boysbriefs.blogspot.com/2004_07_01_boysbriefs_archive.html
+http://bphc.hrsa.gov/quality/Cultural.htm
+http://br.tradeholding.com/default.cgi/action/viewproducts/productid/5908/
+http://bradbury.sewanee.edu/wordpress/index.php/2005/05/the-most-influential-managers/
+http://bradyates.com/mt/archives/2003/08/attached_and_se.html
+http://brain.hastypastry.net/forums/archive/index.php/t-11660.html
+http://brain.hastypastry.net/forums/archive/index.php/t-27861.html
+http://brain.hastypastry.net/forums/archive/index.php/t-744.html
+http://brain.hastypastry.net/forums/showthread.php?goto=newpost&t=25253
+http://brain.oupjournals.org/cgi/content/full/123/9/1926
+http://brain.oupjournals.org/cgi/content/full/124/2/389
+http://brain.oupjournals.org/cgi/content/full/126/6/1319
+http://brain.oupjournals.org/cgi/content/full/127/2/321
+http://brainmind.com/Case6.html
+http://brainoff.com/statement.html
+http://brainstorm-services.com/wcu/introductions.html
+http://branches.embroiderersguild.com/regions/region_display.php3?r_id=SCOTTI
+http://brand.blogs.com/mantra/
+http://brandautopsy.typepad.com/brandautopsy/2005/01/more_bad_bzz_fo.html
+http://bratislava.usembassy.gov/cis/cis103en.html
+http://breaking.tcm.ie/2005/01/12/story184423.html
+http://breaking.tcm.ie/2005/01/27/story186593.html
+http://breaking.tcm.ie/story.asp?j=13856944&p=y3857xy8&n=13857029&x=
+http://breakingin.net/script_market_news3.htm
+http://breakingnews.nypost.com/dynamic/fronts/BUSINESS?SITE=NYNYP&SECTION=BUSINESS
+http://breakingnewsblog.com/americascup/archives/category/emirates_team_new_zealand/
+http://breakingnewsblog.com/americascup/index.php?paged=2
+http://breakingnewsblog.com/michaeljackson/archives/michael_jackson_painted_as_a_sexual_predator/
+http://breastcancer.about.com/od/armslegs/a/rehab01_2.htm
+http://breastcancer.about.com/od/prevention/a/prev01.htm
+http://breastfeed.com/resources/articles/bedtime.htm
+http://brechner.org/news_editorial_attack.asp
+http://breedart.org/breedmusic/
+http://brettboard.dk/games/rules/anno4.htm
+http://briancotts.tripod.com/cottsweb/thirty/1999/thirty08.html
+http://briandeer.com/glasgow-labour-2.htm
+http://brickfields.org.uk/index.php/victorian/transport
+http://bricksonthebrain.blogspot.com/
+http://bricksonthebrain.blogspot.com/2005_05_01_bricksonthebrain_archive.html
+http://bridegroompress.com/catalog/product_info.php?cPath=24&products_id=55
+http://bridgeheadconsulting.com/arts.php?html_pricing
+http://brightmindsnet.com/etypes/personal_essay.php
+http://brillbuilding.blogspot.com/
+http://brindedcow.umd.edu/236/anselm.html
+http://brindedcow.umd.edu/236/cliffordandjames.html
+http://bristol.indymedia.org/
+http://britishspin.blogspot.com/2005_03_27_britishspin_archive.html
+http://broadwayworld.com/viewcolumn.cfm?colid=2037
+http://broken.typepad.com/b/2004/09/soda_machine_de.html
+http://brokenclay.org/journal/wp_archives/2003/08/
+http://brookings.nap.edu/books/0815752679/html/R1.html
+http://brookings.nap.edu/books/0815764359/html/12.html
+http://brookings.nap.edu/books/0815783434/html/152.html
+http://brookings.nap.edu/books/0815783434/html/153.html
+http://brookings.nap.edu/books/0815790465/html/80.html
+http://brookmans.com/news/december03/newsreview2003.shtml
+http://brotherhood-of-catfishermen.com/catfish/messages/66/849832.html?1104394888
+http://browncoats.serenitymovie.com/serenity/?fuseaction=home.privacy
+http://browncoats.serenitymovie.com/serenity/?fuseaction=main.privacy
+http://browndailysqueal.com/
+http://brownharrisstevens.com/guide7e.aspx
+http://brownieblade.blogspot.com/
+http://brownstoner.com/brownstoner/archives/2005/06/30year_mortgage.html
+http://brownvboard.org/brwnqurt/05-1/05-1c.htm
+http://brownvboard.org/research/handbook/prelude/prelude.htm
+http://browse.barnesandnoble.com/browse/nav.asp?visgrp=fiction&N=217361+2050+2147478750&Ne=217361
+http://browse.barnesandnoble.com/browse/nav.asp?visgrp=nonfiction&N=217361+2050+2147478750&Ne=217361
+http://bruceamiller.us/intromix.html
+http://brunei.usembassy.gov/wwwhconsular.html
+http://brussels.metropole-hotel-brussels.tobook.com/Belgium/Hotels/Metropole-Hotel-Brussels?citypname=Brussels
+http://brusselsblog.blogspot.com/2004_02_01_brusselsblog_archive.html
+http://bsolympicgym.com/
+http://btl.blogspot.com/
+http://btobsearch.barnesandnoble.com/booksearch/isbnInquiry.asp?btob=Y&endeca=1&isbn=0195146018&itm=4
+http://btobsearch.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0375409637&sourceid=00395996645644787198&btob=Y
+http://btobsearch.barnesandnoble.com/booksearch/isbnInquiry.asp?sourceid=00395996645644787198&btob=Y&endeca=1&isbn=0060099062&itm=1
+http://btobsearch.barnesandnoble.com/booksearch/isbnInquiry.asp?sourceid=00395996645644787198&btob=Y&endeca=1&isbn=0786262060&itm=1
+http://btobsearch.barnesandnoble.com/booksearch/isbninquiry.asp?btob=Y&pwb=1&ean=9780683301342
+http://btobsearch.barnesandnoble.com/booksearch/isbninquiry.asp?sourceid=00395996645644787198&btob=Y&isbn=0060959584
+http://btsuck.org/?article=218
+http://bubl.ac.uk/link/e/economicdevelopment.htm
+http://bubl.ac.uk/link/h/heart.htm
+http://bubl.ac.uk/link/s/scottisharchaeology.htm
+http://bubl.ac.uk/link/types/images.htm
+http://bubl.ac.uk/link/types/movingimages.htm
+http://bubl.ac.uk/org/tacit/tac/tac46/sadbuttr.htm
+http://bucarotechelp.com/articles/97082930.asp
+http://buckeyeinstitute.org/Articles/2000_11_21%20Owsiany.htm
+http://bucknellbison.collegesports.com/genrel/101001aaa.html
+http://bucknellbison.collegesports.com/sports/w-baskbl/spec-rel/030205aaa.html
+http://buddhism.religion.designerz.com/buddhism-centers-and-groups-by-region-australia.php
+http://budgetperformance.com/articles/caprice_cai/
+http://buffaloreport.com/020930rose.html
+http://buglet.rcbowen.com/dickens/text/TaleOfAPatent.txt
+http://bugs.php.net/bug.php?id=3763
+http://bugs.sun.com/bugdatabase/view_bug.do;:YfiG?bug_id=4533820
+http://bugsys.blogspot.com/
+http://builder.com.com/5100-6371-1058859.html
+http://builder.com.com/5100-6371_14-5194724-1-1.html
+http://buildernewsmag.com/viewnews.pl?id=185
+http://building-sa.com/
+http://bukkystars.20fr.com/custom.html
+http://bulktransporter.com/mag/transportation_na_customs_challenges/
+http://bulletin.cern.ch/eng/articles.php?bullno=16/2005&base=art&artno=BUL-NA-2005-050
+http://bulletin.cern.ch/eng/articles.php?bullno=16/2005&base=art&artno=BUL-NA-2005-051
+http://bulletin.cern.ch/eng/articles.php?bullno=17/2005&base=art&artno=BUL-NA-2005-047
+http://bulletin.cern.ch/eng/articles.php?bullno=17/2005&base=art&artno=BUL-NA-2005-051
+http://bulletin.cern.ch/eng/articles.php?bullno=28/2001&base=art&artno=BUL-NA-2001-033
+http://bulletin.cern.ch/eng/articles.php?bullno=34/2003&base=art&artno=BUL-NA-2003-099
+http://bunsen.tv/2003_11_01_bunsen_archive.html
+http://burknet.com/robsfantasy/section16.html
+http://bursar.colorado.edu/faq/3rdpartyfaqstd.html
+http://bushlies.com/
+http://bushvchoice.blogs.com/
+http://bushvchoice.blogs.com/bvc/2004/11/
+http://bushvchoice.blogs.com/bvc/2005/06/no_more_emergen.html
+http://business-times.asia1.com.sg/sub/supplement/story/0,4574,152393,00.html
+http://business.baylor.edu/Tom_Kelly/2307ch11.htm
+http://business.cbr.nl/index.asp?pageid=17
+http://business.cisco.com/prod/tree.taf%3Fasset_id=89988&ID=44744&ListID=44694&public_view=true&kbns=1.html
+http://business.cisco.com/prod/tree.taf%3Fasset_id=89988&ID=44745&ListID=44694&public_view=true&kbns=1.html
+http://business.cisco.com/prod/tree.taf%3Fasset_id=89988&ID=44749&ListID=44694&public_view=true&kbns=1.html
+http://business.listings.ebay.co.uk/Power-Tools_W0QQfclZ1QQloglZ0QQlotrZ4QQsacatZ3247QQsargnZsalicQQsocmdZListingItemList
+http://business.listings.ebay.co.uk/Power-Tools_W0QQfclZ3QQfcoZ1QQloglZ0QQlotrZ4QQsacatZ3247QQsargnZsalicQQsocmdZListingItemList
+http://business.listings.ebay.co.uk/Power-Tools_W0QQfsooZ1QQfsopZ1QQlopgZ8QQsacatZ3247QQsocmdZListingItemList
+http://business.mainetoday.com/doghousekitchen/000703.shtml
+http://business.mainetoday.com/doghousekitchen/2005_01.shtml
+http://business.mainetoday.com/financialsense/001783.shtml
+http://business.mainetoday.com/virtuallyorganized/2005_01.shtml
+http://business.ntl.com/static/terms_of_use.php
+http://business.queensu.ca/execdev/strategy.php
+http://business.scotsman.com/finance.cfm?id=669012005
+http://business.scotsman.com/index.cfm?id=669012005
+http://business.scotsman.com/topics.cfm?tid=369&id=669012005
+http://business.scotsman.com/topics.cfm?tid=483&id=651802005
+http://business.telegraph.co.uk/money/main.jhtml?xml=/money/2005/06/09/cneuro09.xml&menuId=242&sSheet=/money/2005/06/09/ixcity.html
+http://business.thewest.com.au/classifieds/classifieds-browse.jsp?category=retirement-housing
+http://business.timesofmalta.com/article.php?id=3098
+http://business.timesonline.co.uk/article/0,,13869-1612192,00.html
+http://business.timesonline.co.uk/article/0,,17709-1340879,00.html
+http://business.timesonline.co.uk/article/0,,8210-1673145,00.html
+http://business.timesonline.co.uk/article/0,,8213-890003,00.html
+http://business.timesonline.co.uk/article/0,,9063-1673145,00.html
+http://business.uk.freeads.net/Beech_effect_computer_station,_good-62340.htm
+http://business.vsnl.com/relations/programs.htm
+http://businessknowledgesource.com/
+http://businessknowledgesource.com/blog/creating_customer_awareness_by_asking_the_right_questions_000790.html
+http://businessknowledgesource.com/marketing/marketing_yourself_for_success_proven_personal_branding_strategies_012997.html
+http://businessnetwork.smh.com.au/articles/2005/02/24/1746.html
+http://businessnetwork.smh.com.au/articles/2005/02/24/1756.html
+http://businessweek.com/magazine/content/03_34/b3846039.htm
+http://businessweek.com/magazine/content/04_07/b3870050.htm
+http://businessweek.com/magazine/content/05_07/b3920001_mz001.htm
+http://busycooks.about.com/library/lessons/blcookfor2b.htm
+http://buyit.mercurynews.com/findit/search/browse.jsp?catId=krd_mercurynews62c39&sort=modifieddate&sortType=asc&howMany=10&start=21
+http://buyit.myrtlebeachonline.com/findit/search/browse.jsp?catId=krd_myrtlebeachsunnews3280e
+http://buyit.myrtlebeachonline.com/findit/search/browse.jsp?catId=krd_myrtlebeachsunnews3c962
+http://buysellradio.com/about.html
+http://buzz.ifas.ufl.edu/
+http://buzzmagazine.collegepublisher.com/news/2005/02/03/SilverScreen/Review.Alone.In.The.Dark-851766.shtml
+http://buzzmodo.typepad.com/buzzmodo/2005/01/thinking_about_.html
+http://bwt.jeffotto.com/alternative.htm
+http://byo.com/feature/460.html
+http://byrd.senate.gov/byrd_speeches/byrd_speeches_2003may/byrd_speeches_2003may_list/byrd_speeches_2003may_list_2.html
+http://byu.ksl.com/index.php?sid=128109&nid=17
+http://byunews.byu.edu/
+http://byunews.byu.edu/archive04-Jul-barebranches.aspx
+http://bzp.blogspot.com/
+http://c-command.com/dropdmg/manual
+http://c.ittoolbox.com/nav/t.asp?t=422&p=424&h1=422&h2=424
+http://c.ittoolbox.com/nav/t.asp?t=424&p=424&h1=424
+http://c.webring.com/hub?ring=churchofscotland
+http://c1blog.blogspot.com/2005_02_01_c1blog_archive.html
+http://c2.com/cgi/wiki?ArtificialIntelligenceAndLinguistics
+http://c2.com/cgi/wiki?BigDesignUpFront
+http://c2.com/cgi/wiki?DeepClassHierarchies
+http://c2.com/cgi/wiki?DotNetAsDistributedObjectSystem
+http://c2.com/cgi/wiki?ExtremeHour
+http://c2.com/cgi/wiki?ExtremeProgrammingMayScaleUp
+http://c2.com/cgi/wiki?FourLevelsOfCompetence
+http://c2.com/cgi/wiki?InteractiveFictionMudDiscussion
+http://c2.com/cgi/wiki?JavaIoClassesAreImpossibleToUnderstand
+http://c2.com/cgi/wiki?RationalRose
+http://c2.com/cgi/wiki?RealStoryAboutDeveloperTurnedManager
+http://c2.com/cgi/wiki?ReturnNewObjectsFromAccessorMethods
+http://c2.com/cgi/wiki?SixThinkingHats
+http://c2.com/cgi/wiki?ToAyoungExtremist
+http://c250.columbia.edu/c250_events/look_back/burns_thoughts.html
+http://c2d.unige.ch/news/rel.php?rel=1316&lang=
+http://c3po.cochise.cc.az.us/astro/constitution.htm
+http://ca.dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Travel_and_Transportation/Accommodation/Bed_and_Breakfasts/wp_n.dat
+http://ca.dir.yahoo.com/Government/U_S__Government/Military/Navy/
+http://ca.dir.yahoo.com/Health/Diseases_and_Conditions/Prostate_Cancer/Organizations/
+http://ca.dir.yahoo.com/Recreation/Travel/By_Region/Countries/Jamaica/Complete_List/
+http://ca.dir.yahoo.com/Society_and_Culture/Environment_and_Nature/
+http://ca.dir.yahoo.com/Society_and_Culture/Environment_and_Nature/Waste_Management/Recycling/
+http://ca.dir.yahoo.com/society_and_culture/environment_and_nature/?sort=lf
+http://ca.dir.yahoo.com/society_and_culture/environment_and_nature/waste_management/recycling/?sort=lf
+http://ca.gentekinc.com/english/products.asp?z=1&m=2&d=59
+http://ca.lwv.org/lwvc/edfund/elections/2004nov/id/prop1A.html
+http://caag.state.ca.us/charities/publications/1998thriftreport.htm
+http://cab.berkeley.edu/help/macissues.html
+http://caballoblanco.com/resultsupdate04.html
+http://cableorganizer.com/how-to-organize/
+http://cacciaguida.blogspot.com/2002_09_01_cacciaguida_archive.html
+http://cade.athabascau.ca/vol12.1/editorial-english.html
+http://cadence.advanstar.com/2002/1202/pr1202_solibri.html
+http://cadyvd.blogsome.com/
+http://caferati.blogspot.com/2005/02/advice-walking-tips-for-ne_110852450699925549.html
+http://cafeshops.com/irregulargoods.6933624
+http://caffe.home.mindspring.com/
+http://cafnr.missouri.edu/source/nitrogen.asp
+http://caheinfo.wsu.edu/focus/two/project.html
+http://cain.ulst.ac.uk/dd/papers/flags.htm
+http://cain.ulst.ac.uk/dd/report12/report12f.htm
+http://cain.ulst.ac.uk/events/convention/nicc75app1.htm
+http://cain.ulst.ac.uk/hmso/cmd5259.htm
+http://cain.ulst.ac.uk/images/photos/murphy/murphy03.htm
+http://cain.ulst.ac.uk/issues/education/docs/smith99.htm
+http://cain.ulst.ac.uk/issues/politics/docs/odoherty.htm
+http://cain.ulst.ac.uk/sutton/alpha/E.html
+http://cain.ulst.ac.uk/sutton/alpha/N.html
+http://cain.ulst.ac.uk/sutton/chron/1970.html
+http://cain.ulst.ac.uk/sutton/chron/1978.html
+http://cakeeaterchronicles.mu.nu/
+http://cal.bemidji.msus.edu/english/morgan/courses/en1001f00/pAssignments/final.html
+http://cal.bemidji.msus.edu/english/morgan/courses/en1001f00/pAssignments/understandingShaler.html
+http://cal.blog-city.com/
+http://calacanis.weblogsinc.com/entry/1234000177042181/
+http://calacanis.weblogsinc.com/entry/1234000407026641/
+http://calacanis.weblogsinc.com/entry/8165152283983695/
+http://calbar.ca.gov/state/calbar/calbar_generic_pr.jsp?cid=11468&id=7969&com.broadvision.session.new=Yes
+http://calbears.collegesports.com/sports/c-otrack/recaps/022705aaa.html
+http://calendars.registrar.yorku.ca/lectureschedules/fw05/enrolment/problems.htm
+http://calgal.motime.com/
+http://calhotels.us/hotel.php/138332-near-six-flags-magic-mountain-castaic-california/
+http://calhotels.us/hotel.php/164848-studio-6-salt-lake-city-fort-union-salt-lake-city-utah/
+http://caliber.ucpress.net/doi/abs/10.1525/hlq.2004.67.3.347
+http://calico.org/CALICO_Review/review/interlex.htm
+http://calico.org/CALICO_Review/review/interlex00.htm
+http://california.uscity.net/Home/
+http://calivalleygirl.blogspot.com/2005/06/me-my-boyfriend-and-army.html
+http://callcentrediary.blogspot.com/
+http://calvin.st-andrews.ac.uk/external_relations/news_article.cfm?reference=627
+http://camelotvault.ign.com/?start_from=15
+http://caml.inria.fr/FAQ/general-eng.html
+http://campaign.democrats.com/preview.cfm?term=Campaign%202004%20Polls
+http://campaigndesk.org/
+http://campeaulaw.wld.com/practice.htm
+http://campus.houghton.edu/webs/employees/mhijleh/co96.html
+http://campus.hws.edu/his/blackwell/articles/residence.html
+http://campus.murraystate.edu/academic/faculty/bill.foreman/eng101.htm
+http://campus.northpark.edu/math/PreCalculus/Transcendental/Trigonometric/Geometry/
+http://campusplanning.ucsf.edu/faq/
+http://camsanantonio.org/2005/events.htm
+http://canada.justice.gc.ca/chra/en/lort1.html
+http://canada.justice.gc.ca/en/cons/la_al/summary/5.html
+http://canadaeast.com/apps/pbcs.dll/article?AID=/20050129/WEEKEND01/201290304/-1/LIFE
+http://canadafreepress.com/2005/cover050705.htm
+http://canadagazette.gc.ca/partI/2003/20030315/html/notice-e.html
+http://canadagazette.gc.ca/partI/2004/20040814/html/notice-e.html
+http://canadianeconomy.gc.ca/english/economy/about.html
+http://canberra.yourguide.com.au/detail.asp?class=sport&subclass=local&category=general%20sport&story_id=398640&y=2005&m=6
+http://canberra.yourguide.com.au/detail.asp?class=your%20say&subclass=general&category=editorial%20opinion&story_id=401256&y=2005&m=6
+http://canberrabirds.org.au/trips.htm
+http://cancer.gov/clinicaltrials/resources/taking-part-treatment-trials
+http://cancerblog.blogspot.com/
+http://cancerresources.mednet.ucla.edu/5_info/5c_archive_lec/1998/search.htm
+http://cancun-hotels.tripadvisor.com/Hotel_Review-g150807-d154430-Reviews-Cancun_Marina_Club_Hotel-Cancun_Yucatan_Peninsula.html
+http://cancun-hotels.tripadvisor.com/Hotel_Review-g150807-d154440-Reviews-Ambiance_Villas_and_Club-Cancun_Yucatan_Peninsula.html
+http://cancun-hotels.tripadvisor.com/Hotel_Review-g150807-d249916-Reviews-Akumal_Beach_Resort-Cancun_Yucatan_Peninsula.html
+http://cancun-hotels.tripadvisor.com/ShowUserReviews-g150807-d154404-r3019691-Avalon_Baccara_Cancun-Cancun_Yucatan_Peninsula.html
+http://cancun-hotels.tripadvisor.com/ShowUserReviews-g150807-d154412-r2494897-Radisson_Hotel_Hacienda_Cancun-Cancun_Yucatan_Peninsula.html
+http://cancun-hotels.tripadvisor.com/ShowUserReviews-g150807-d249916-r3025944-Akumal_Beach_Resort-Cancun_Yucatan_Peninsula.html
+http://candler.emory.edu/ACADEMIC/OCME/COS/CATALOG/academicpolicies.html
+http://canis.tamu.edu/wfscCourses/Concepts/Task1TS.html
+http://canis.tamu.edu/wfscCourses/WFSC622/NOTES/Unit%2001/CH01.htm
+http://cannonfire.blogspot.com/2004_05_30_cannonfire_archive.html
+http://canoeman.com/ancestors/docs/ancestors2.html
+http://caoine.org/
+http://caosblog.com/archives/date/2005/06/03/
+http://capd.ksu.edu/classroom_studio_use.asp
+http://cape.uwaterloo.ca/dept/personnel/macdonal.htm
+http://capella.bridgestar.org/newsletters/february2004/
+http://capella.bridgestar.org/newsletters/february2004/printer-friendly.htm
+http://capemaybythesea.com/bts2.asp
+http://capeorchids.itgo.com/Newsletter/COS.htm
+http://capeorchids.itgo.com/newsarchive/02july.htm
+http://capetownfm.com/
+http://capitalistchicks.com/html/news-viewarticle-16.html
+http://capitals.mostvaluablenetwork.com/
+http://capitolfax.blogspot.com/2005/06/closer-we-look.html
+http://capmag.com/article.asp?ID=2997
+http://capmag.com/article.asp?ID=3807
+http://capmag.com/article.asp?ID=4084
+http://capmag.com/author.asp?name=2
+http://caps.bethel.edu/seminars/details.html
+http://caps.blogspot.com/
+http://caps.ucdavis.edu/resources/SouthAsia/stress.html
+http://captainyips.typepad.com/journal/wildcat_woes/
+http://captology.stanford.edu/2003/
+http://cara.gsu.edu/where_to.html
+http://caracaschronicles.blogspot.com/archives/2002_10_27_caracaschronicles_archive.html
+http://carbon-unit.blogspot.com/
+http://carbon.cudenver.edu/~mryder/dlc.html
+http://cardiorepair.uni-marburg.de/etopat1.htm
+http://cards.crossdaily.com/index.php3?SID=32951
+http://cardsspeak.servebeer.com/
+http://career.berkeley.edu/Article/030404a.stm
+http://career.berkeley.edu/Article/040430a-hh.stm
+http://career.berkeley.edu/Arts/ArtsFaq.stm
+http://career.berkeley.edu/Health/PTPrep.stm
+http://career.berkeley.edu/PhDs/PhDletters.stm
+http://career.utk.edu/calendar/feb05.asp
+http://careerbuilder.franchisesolutions.com/index.cfm/fa/adpage/job_id/15487/lsource/4_business-services-franchise-opportunities/
+http://careercenter.tamu.edu/Students/S11/S11D.shtml
+http://careerfocus.bmjjournals.com/cgi/content/full/330/7485/48
+http://careermentorservices.com/terms.htm
+http://careerplanning.about.com/cs/jobloss/a/chin_up.htm
+http://careerplanning.about.com/od/resumewriting/a/resume_writing.htm
+http://careerplanning.about.com/od/workplacesurvival/a/unexpected.htm
+http://careers.asia1.com.sg/st_recruit/r20050623.html
+http://careers.findlaw.com/cgi-bin/view_job.pl?job_id=530666
+http://careers.raycommedia.com/default.asp?searching=True&station=WSTM
+http://careers.signonsandiego.com/displayads/utjobs/
+http://careers.state.gov/officer/join/
+http://careers.state.gov/print/officer/join/
+http://careers.state.gov/print/specialist/opportunities/healthprac.html
+http://careers.state.gov/print/specialist/opportunities/medoff.html
+http://careers.state.gov/print/specialist/opportunities/medpsych.html
+http://careers.state.gov/print/specialist/opportunities/medtech.html
+http://careers.state.gov/specialist/opportunities/healthprac.html
+http://careers.state.gov/specialist/opportunities/medoff.html
+http://careers.state.gov/specialist/opportunities/medpsych.html
+http://careers.state.gov/specialist/opportunities/medtech.html
+http://careers.unc.edu/employers/rpolicies.html
+http://careers.usc.edu/employers/recruiting.html
+http://careerservices.rutgers.edu/guide/2ndinterview.html
+http://careersurf.com/links.htm
+http://careo.elearning.ubc.ca/weblogs/thieme/archives/2004_06.html
+http://careo.elearning.ubc.ca/weblogs/vschools/archives/2005_05.html
+http://caribtravelnews.com/c0401_01.htm
+http://carl-bell-2.baylor.edu/~bellc/JL/APieceOfSteak.html
+http://carlisle-www.army.mil/usawc/Parameters/00autumn/johnston.htm
+http://carlisle-www.army.mil/usawc/Parameters/00autumn/tucker.htm
+http://carlisle-www.army.mil/usawc/Parameters/01spring/jalali.htm
+http://carlisle-www.army.mil/usawc/Parameters/01winter/jones.htm
+http://carlisle-www.army.mil/usawc/Parameters/01winter/peters.htm
+http://carlisle-www.army.mil/usawc/Parameters/02autumn/jalali.htm
+http://carlisle-www.army.mil/usawc/Parameters/03winter/toomey.htm
+http://carnage.bungie.org/haloforum/halo.forum.pl?read=481525
+http://carolinafirst.unc.edu/giftplanning/examples.htm
+http://carolinanavy.com/fleet2/f2/zcreative/PoetryWantedhall/shakespeare1.html
+http://carpe.umd.edu/congo_basin_news/news_article.asp?article=2
+http://carpetone.com/madd/default.cfm
+http://carroll.thefreelibrary.com/Through-the-Looking-Glass/1-6
+http://carroll.thefreelibrary.com/Through-the-Looking-Glass/1-7
+http://carroll.thefreelibrary.com/Through-the-Looking-Glass/1-9
+http://cars.msn.co.uk/buyersguide/pxvsprivateselling/
+http://cas.bellarmine.edu/tietjen/CreationScience/sorry.htm
+http://cas.bellarmine.edu/tietjen/Research/wooly_monkey_behavior_and_vocali.htm
+http://cas.ssc.uwo.ca/about.html
+http://cas.umkc.edu/ce/S05aag.htm
+http://cascadiascorecard.typepad.com/blog/2005/06/talking_the_tal.html
+http://caselaw.duicenter.com/muniz01.html
+http://caselaw.findlaw.com/cacodes/fin/5620-5624.html
+http://caselaw.findlaw.com/casecode/uscodes/15/chapters/66/subchapters/i/sections/section_4001.html
+http://caselaw.findlaw.com/nycodes/c72/a18.html
+http://caselaw.findlaw.com/scripts/getcase.pl?court=ks&vol=supct/2003/20030307/&invol=87455
+http://caselaw.findlaw.com/scripts/getcase.pl?court=mo&vol=/appeals/012003/&invol=2012803_2003
+http://caselaw.findlaw.com/scripts/getcase.pl?court=mo&vol=/appeals/052001/&invol=3050101_2001
+http://caselaw.findlaw.com/scripts/getcase.pl?court=nm&vol=00ca-023&invol=2
+http://caselaw.findlaw.com/scripts/getcase.pl?court=oh&vol=980772&invol=1
+http://caselaw.findlaw.com/scripts/getcase.pl?court=sd&vol=2002_53&invol=1
+http://caselaw.findlaw.com/scripts/getcase.pl?court=va&vol=1990175&invol=1
+http://caselaw.findlaw.com/scripts/getcase.pl?court=wa&vol=180069maj&searchval&invol=1
+http://caselaw.lp.findlaw.com/casecode/uscodes/16/chapters/1/subchapters/xlvi/sections/section_403_notes.html
+http://caselaw.lp.findlaw.com/casecode/uscodes/18/parts/i/chapters/47/sections/section_1030.html
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=11th&navby=case&no=959377man
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=11th&navby=case&no=988358man
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=2nd&navby=case&no=932303
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=3rd&navby=case&no=971516p
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=4th&navby=case&no=951961p
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=7th&navby=case&no=942229
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=7th&navby=case&no=942561
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=9th&navby=case&no=9716743
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=9th&navby=case&no=9935237
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=9th&navby=case&no=9935303
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=Fed&navby=case&no=011074
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=US&vol=343&invol=390
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=US&vol=415&invol=995
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=US&vol=432&invol=312
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=118&invol=356
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=221&invol=1
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=247&invol=321
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=257&invol=184
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=261&invol=525
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=273&invol=593
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=274&invol=200
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=275&invol=257
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=320&invol=81
+http://caselaw.lp.findlaw.com/cgi-bin/getcase.pl?court=us&vol=321&invol=332
+http://caselaw.lp.findlaw.com/data/constitution/amendment01/
+http://caselaw.lp.findlaw.com/data/constitution/amendment01/06.html
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=9th&navby=case&no=9835147&exact=1
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=US&vol=000&invol=04-108
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=US&vol=167&invol=48
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=US&vol=285&invol=393
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=US&vol=508&invol=520
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=me&vol=99me3aea&invol=1
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=mt&vol=97&invol=040
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=nc&vol=1999/supreme0409/&invol=parish
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=or&vol=a99660&invol=1
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=000&invol=U10275
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=161&invol=359
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=167&invol=48
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=220&invol=413
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=241&invol=149
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=242&invol=238
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=268&invol=146
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=271&invol=414
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=273&invol=593
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=320&invol=462
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=330&invol=724
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=360&invol=672
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=415&invol=995
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=432&invol=312
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=439&invol=1034
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=451&invol=355
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=459&invol=400
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=493&invol=307
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=us&vol=494&invol=259
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?court=wa&vol=2002_app/49824-0&invol=3
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?navby=case&court=us&vol=349&page=294
+http://caselaw.lp.findlaw.com/scripts/getcase.pl?navby=search&court=US&case=/us/429/252.html
+http://caselaw.lp.findlaw.com/scripts/printer_friendly.pl?page=us/349/294.html
+http://caselaw.lp.findlaw.com/scripts/printer_friendly.pl?page=us/415/995.html
+http://caseysoftware.com/?q=node/76
+http://cashiering.unomaha.edu/return.html
+http://casinogambling.about.com/cs/poker/
+http://casinogambling.about.com/cs/poker/a/Calling.htm
+http://casinogambling.about.com/cs/poker/a/evalulate.htm
+http://casinogambling.about.com/od/texasholdemaz/
+http://casinogambling.about.com/od/texasholdemaz/index_a.htm
+http://casinogambling.about.com/od/texasholdemaz/index_r.htm
+http://casparcommons.org/
+http://caspian.switchinc.org/~distlearn/manual/chklstcm.html
+http://castlecops.com/article-5702-nested-0-0.html
+http://castlecops.com/p569050-Bayesian_Filtering.html
+http://castlecops.com/postp570875.html
+http://castlecops.com/posts81583-0.html
+http://castlecops.com/postt81583.html
+http://catal.arch.cam.ac.uk/catal/Archive_rep00/atalay00.html
+http://catal.arch.cam.ac.uk/catal/Archive_rep04/ar04_40.html
+http://catal.arch.cam.ac.uk/catal/Archive_rep98/molleson98.html
+http://catal.arch.cam.ac.uk/catal/Archive_rep99/mitrovic99.html
+http://catal.arch.cam.ac.uk/catal/TAG_papers/jon.htm
+http://catallarchy.net/blog/archives/2004/11/19/going-to-space-the-right-way/
+http://catallarchy.net/blog/archives/2005/02/13/libertarian-girl-mystery/
+http://catallarchy.net/blog/archives/2005/04/19/does-god-change-his-mind/
+http://catallarchy.net/blog/archives/2005/06/07/stein-v-krugman-celebrity-mismatch/
+http://catallarchy.net/blog/archives/2005/06/14/catos-fall-guys/
+http://catallarchy.net/blog/archives/2005/06/14/live-ignorance-8thousand/
+http://catallarchy.net/blog/archives/2005/06/19/the-culling-of-altruism/
+http://catallarchy.net/blog/archives/2005/06/21/do-we-really-have-less-socialist-health-care/
+http://catalog.heifer.org/chicks.cfm
+http://catalog.lacitycollege.edu/pages/physical%20ed.htm
+http://catalog.learningzonecatalog.com/product_info.php?products_id=14021
+http://catalog.psschool.com/product_info.php?products_id=48537
+http://catalog.socialstudies.com/c/@fm.hXlPjSOGQ2/Pages/search.html?Record_Type=Products&Media=eBook&Description=National%20Center%20for%20History
+http://catalogablog.blogspot.com/
+http://catalogue.learndirect.co.uk/browse/busman/category5/category15/?view=Ecommerce
+http://catalogue.learndirect.co.uk/courses/100401SM001/
+http://catarina.usc.edu/yaxu/FAQ558/cs558-online/lab24.html
+http://catawampus.typepad.com/catawampus/
+http://catawampus.typepad.com/catawampus/2004/09/
+http://catcradle.typepad.com/the_cats_cradle/2004/10/
+http://categories.paperstore.net/onlineessays/015-004.html
+http://catholicity.elcore.net/FromNewman'sEssayOnDevelopment.html
+http://cativa.blogspot.com/
+http://catless.ncl.ac.uk/Risks/11.29.html
+http://catless.ncl.ac.uk/Risks/11.30.html
+http://catless.ncl.ac.uk/Risks/12.49.html
+http://catless.ncl.ac.uk/Risks/14.13.html
+http://catless.ncl.ac.uk/Risks/14.65.html
+http://catless.ncl.ac.uk/Risks/18.59.html
+http://catless.ncl.ac.uk/Risks/18.78.html
+http://catless.ncl.ac.uk/Risks/2.10.html
+http://catless.ncl.ac.uk/Risks/21.35.html
+http://catless.ncl.ac.uk/Risks/22.69.html
+http://catless.ncl.ac.uk/Risks/23.21.html
+http://catless.ncl.ac.uk/Risks/23.25.html
+http://catless.ncl.ac.uk/Risks/23.37.html
+http://catless.ncl.ac.uk/Risks/4.42.html
+http://catless.ncl.ac.uk/Risks/4.48.html
+http://catlinclassroom.si.edu/catlin_browsec.cfm?ID=38
+http://catoinstitute.com/briefingpapers/
+http://catoinstitute.com/dailys/01-23-05.html
+http://cats.about.com/cs/healthissues/a/fatty_liver.htm
+http://cats.about.com/od/advocacy/a/clonedcat.htm
+http://cats.about.com/od/funwithcats/a/cat_house.htm
+http://caucuscare.com/TLIB/orghowto.html
+http://caudlewl.home.att.net/DedHist.htm
+http://cavittsocceracademy.com/index.php?topic=playerscup
+http://caxton.stockton.edu/JenasPage/stories/storyReader$18
+http://cayankee.blogs.com/cayankee/2005/01/new_bill_target.html
+http://cba.bio.utk.edu/activities95.html
+http://cba.phys.columbia.edu/communications/news/2002/september8.html
+http://cba.unomaha.edu/faculty/mohara/web/CBPP-INET.html
+http://cbae.nmsu.edu/~dboje/papers/CleggFollett4_7.html
+http://cbc.ca/consumers/market/files/home/csa/
+http://cbc.radio-canada.ca/annualreports/1996-1997/6_1_2_7.shtml
+http://cbc.radio-canada.ca/newsreleases/19990531.shtml
+http://cbc.radio-canada.ca/speeches/19990705.shtml
+http://cbc.radio-canada.ca/speeches/20041025.shtml
+http://cbdd.typepad.com/colleen/case_studies/
+http://cbdd.wsu.edu/kewlcontent/cdoutput/TR503/page68.htm
+http://cboard.cprogramming.com/archive/index.php/t-231.html
+http://cbs.marketwatch.com/news/story.asp?guid=%7B47F01AC3-EE66-4639-9B71-D51D42E6E50C%7D&siteid=mktw
+http://cbs.marketwatch.com/news/story.asp?guid=%7BFBB6DA3D-7F06-4883-BCE4-D5962D376FA3%7D&siteid=mktw
+http://cbs.sportsline.com/autoracing/story/8138446
+http://cbs.sportsline.com/b/page/pressbox/0,1328,5645013,00.html
+http://cbs.sportsline.com/collegebasketball/story/7653797
+http://cbs.sportsline.com/collegebasketball/story/8176412
+http://cbs.sportsline.com/mlb/story/8590494
+http://cbs.sportsline.com/nfl/fantasy/story/8583532/rss
+http://cbs.sportsline.com/nfl/players/draft/413640
+http://cbs.sportsline.com/nfl/story/8128868
+http://cbs.sportsline.com/nfl/teams/page/SD
+http://cbs11tv.com/investigations/local_story_061103132.html
+http://cbs11tv.com/investigations/local_story_159091753.html
+http://cbs11tv.com/investigations/local_story_325161114.html
+http://cbs4boston.com/news/topstories_story_030140005.html
+http://cbsnews.cbs.com/stories/2003/06/19/world/main559346.shtml
+http://cbsnewyork.com/healthwatch/health_story_156202510.html
+http://cbsnewyork.com/jeffberardelli/
+http://cbsnewyork.com/privacy/local_story_0432338405_html/resources_storyPrintableView
+http://cc.jlab.org/announce/newsletter/CCNLMar01.html
+http://cc.oulu.fi/~kempmp/colours.html
+http://cc.ucsf.edu/crc/hm_fatigue_and_you.html
+http://cca.qc.ca/pages/Niveau3.asp?page=hejduk&lang=eng
+http://ccasls.concordia.ca/contents/pap8.htm
+http://ccat.sas.upenn.edu/bmcr/1995/95.06.09.html
+http://ccat.sas.upenn.edu/bmcr/1996/96.10.05.html
+http://ccat.sas.upenn.edu/bmcr/1999/1999-02-11.html
+http://ccat.sas.upenn.edu/bmcr/1999/1999-04-14.html
+http://ccat.sas.upenn.edu/bmcr/2003/2003-04-19.html
+http://ccat.sas.upenn.edu/bmcr/2004/2004-08-08.html
+http://ccat.sas.upenn.edu/bmcr/2005/2005-04-23.html
+http://ccat.sas.upenn.edu/jod/texts/lastmoralia.english.html
+http://ccat.sas.upenn.edu/~humm/Topics/Contracts/treat01.html
+http://ccat.sas.upenn.edu/~joef/hooley.sec3.hooley.html
+http://ccbs.ntu.edu.tw/FULLTEXT/JR-ADM/jack.htm
+http://ccc.teasdream.com/terms.html
+http://ccequincy.home.comcast.net/SGWindows.htm
+http://ccl.cmpdi.co.in/vsccl/tend_June'05/june'05-RAJRAPPA.htm
+http://ccl.northwestern.edu/netlogo/models/CalcHubNetElevators
+http://ccl.northwestern.edu/netlogo/models/GeometronTop-Down
+http://ccl.northwestern.edu/netlogo/models/community/drawing-tool
+http://ccl.northwestern.edu/netlogo/models/community/sheep-populationA
+http://ccnet.utoronto.ca/cgi-bin/announcements.cgi?cc=admin&template=main
+http://ccs.mit.edu/lh/21CWP002.html
+http://ccstrikers.com/teams_of_the_cc_strikers.htm
+http://cctc2.commnet.edu/grammar/commas.htm
+http://cctc2.commnet.edu/grammar/notorious.htm
+http://cctr.umkc.edu/userx/bhugh/musicold.html
+http://ccwf.cc.utexas.edu/~murphyg/movies/1999/may99.html
+http://cd.ciao.co.uk/Wrong_Anyone_s_Daughter__6040458
+http://cdli.asm.org/cgi/content/full/9/2/320
+http://cds.aas.duke.edu/exhibits/past/raisedvoices/rvindex.html
+http://cdserver2.ru.ac.za/cd/011120_1/Aqua/Ichthyology/Ichthyology/reproductive%20behaviour.htm
+http://cdstatus.sourceforge.net/
+http://cec-india.org/leftlinks/03/folder.2004-12-17.3882499103/index_html%20
+http://cee.che.ufl.edu/Journals/Fall2003/Blau.html
+http://ceee.gwu.edu/standards_assessments/isitreal.htm
+http://ceee.gwu.edu/teaching_learning/key_grouping_1.htm
+http://ceep.crc.uiuc.edu/poptopics/gradeconfig.html
+http://ceicher.homeunix.com/
+http://ceicher.homeunix.com/archives/2002/12/
+http://celebration-bar-exam-review.com/california/California-Bar-Review.htm
+http://celestialblue.blogspot.com/2005_05_29_celestialblue_archive.html
+http://celestialdelights.info/opinion.html
+http://celine-dion.lyrics-songs.com/lyrics/111727/
+http://cellphones.about.com/
+http://cellularconcepts-tn.com/cellularfaq.htm
+http://celt.net/Celtic/Artisans/oisinplay.html
+http://celticme.blogspot.com/
+http://cem.colorado.edu/archives/fl1997/deanna.html
+http://cema.chathamcounty.org/business.htm
+http://cemmap.ifs.org.uk/people.php?person_id=19
+http://cendi.dtic.mil/
+http://cendi.dtic.mil/publications/01-2ev_web_pres.html
+http://cendi.dtic.mil/sti_mgr/subject2topic7.html
+http://cendi.dtic.mil/sti_mgr/subject5topic8.html
+http://cenhum.artsci.wustl.edu/janfeb02.html
+http://cenmi.org/LeadingChange/S05/article10.asp
+http://censorware.net/legal/loudoun/980918_sumjudgeopp_v.html
+http://center.e-enterprise.purdue.edu/wps/portal/_s.155/3106
+http://center.info.pl/diet_pills/bad_diet_pills.html
+http://center.ncia.net/privacy.php
+http://center.uvt.nl/staff/meijdam/meijint.html
+http://centerforsocialconcerns.nd.edu/academic/fall/fall.shtml
+http://centerstage.net/art/articles/canofculture_20041014.html
+http://centerstage.net/art/articles/canofculture_20041021.html
+http://centerstagechicago.com/lifestyle/articles/dating-game.html
+http://centerstagechicago.com/lifestyle/articles/el_divisionblue.html
+http://centerstagechicago.com/theatre/articles/addingmachhys.html
+http://centomag.org/essays/boyle
+http://central.hcrhs.k12.nj.us/imc/
+http://centralia.missouri.org/history.html
+http://century.guardian.co.uk/1899-1909/Story/0,6051,126357,00.html
+http://ceonp.lism.catholic.edu.au/CEOLISMORE/CELD/me.get?SITE.sitelayouts.body&S501
+http://cepa.newschool.edu/het/essays/growth/keynesgrowth.htm
+http://cepa.newschool.edu/het/essays/growth/optimal/rawlsian.htm
+http://cepa.newschool.edu/het/essays/macro/other.htm
+http://cepa.newschool.edu/het/essays/sequence/sequence.htm
+http://cepa.newschool.edu/het/essays/youth/cantsys.htm
+http://cepa.newschool.edu/het/schools/finance.htm
+http://cepa.newschool.edu/het/texts/carlyle/latter2.htm
+http://cepu.nics.gov.uk/guidetoevacuation/warning.htm
+http://cercor.oupjournals.org/cgi/content/full/11/5/384
+http://ceres.ca.gov/ceqa/cases/1974/nooil_121074.html
+http://cert.uni-stuttgart.de/archive/bugtraq/2000/04/msg00212.html
+http://certcities.com/editorial/columns/story.asp?EditorialsID=86
+http://certcities.com/editorial/popquiz/story.asp?EditorialsID=36
+http://certs.ipsca.com/Products/g_prod_plugins.asp
+http://ces.edgateway.net/cs/resources/view/ces_res/74
+http://cesp.stanford.edu/news/438/
+http://cesr.org/filestore2/download/469
+http://cesr.org/work/instruments
+http://cessna.com/news/article.chtml?ID=BtDHDCkexaJOlCWA7If8vfqnC18Vv1VpPXLObPKpB7Lv28PHLZ
+http://cetuolumne.ucdavis.edu/newsletterfiles/newsletter572.htm
+http://cf.rrstar.com/forums/messageview.cfm?catid=6&threadid=3664
+http://cf.synergylearning.org/DisplayArticle.cfm?selectedarticle=111
+http://cfa-www.harvard.edu/iau/MPCStatus.html
+http://cfa-www.harvard.edu/press/pr0408.html
+http://cfa-www.harvard.edu/space_geodesy/SEALEVEL/
+http://cfa.ucdavis.edu/education/artsMail_view.php?articleid=26
+http://cfc.luton.ac.uk/articles/newways
+http://cfcenter.stanford.edu/Children'sArtStudy.html
+http://cfdev.georgetown.edu/cndls/asw/aswlinks.cfm?head1=Education&head2=New%20Media%20Cultures
+http://cgbeeo.cumulus.com/
+http://cgi.canoe.ca/cgi-bin/SummerActive/register.pl?Mode=INDIVIDUAL
+http://cgi.cse.unsw.edu.au/~cs3231/doc/style.php
+http://cgi.cse.unsw.edu.au/~lambert/cgi-bin/blog/2003/10/
+http://cgi.cse.unsw.edu.au/~wic/events/
+http://cgi.shutterbug.com/cgi-bin/displayvote.cgi
+http://cgi.www.limmud.org/cgi-bin/2004/guide.py/105
+http://cgi.www.limmud.org/cgi-bin/2004/guide.py/pr.html
+http://cgi1.usatoday.com/mchat/20050404001/tscript.htm
+http://cgi1.usatoday.com/mchat/20050429003/tscript.htm
+http://cgood.org/healthcare-newscommentary-inthenews-46.html
+http://cgood.org/society-newscommentary-watch.html
+http://cgr.alfred.edu/gr.html
+http://cgs.org.ohio-state.edu/gov/min-01au3.shtml
+http://cgw.pennnet.com/Articles/Article_Display.cfm?Section=Archives&Subsection=Display&ARTICLE_ID=99503&KEYWORD=warp%20speed
+http://chadfox.blogspot.com/
+http://chairetmetal.com/cm07/dean-complet.htm
+http://chandra.harvard.edu/chronicle/0105/director/
+http://chandra.harvard.edu/press/01_releases/press_050701.html
+http://chandrakantha.com/articles/indian_music/
+http://changingminds.org/disciplines/change_management/accepting_brief/first_meeting.htm
+http://changingminds.org/principles/contrast.htm
+http://changingminds.org/techniques/body/closed_body.htm
+http://changingminds.org/techniques/listening/why_not_listening.htm
+http://changingplaces.urbed.com/cgi-bin/main.cgi?org_code=87uytrsqp0gtgtgtgy&option=article&doc_id=29
+http://channel9.msdn.com/India/ShowPost.aspx?PostID=38427
+http://channel9.msdn.com/ShowPost.aspx?PostID=112
+http://channel9.msdn.com/ShowPost.aspx?PostID=76600
+http://channels.lockergnome.com/game/archives/20050330_konami_guns_for_psp_with_coded_arms.phtml
+http://channels.lockergnome.com/rss/resources/articles/quickstart.phtml
+http://channels.netscape.ca/finance/article.adp?id=20050610220209990003
+http://channels.netscape.com/ns/atplay/story.jsp?floc=FF-PLS-PLS&id=2005020412092522276781&dt=20050204120900&w=PR&coview=
+http://channels.netscape.com/ns/love/disasters.jsp?disaster=273
+http://chantaclair.com/Poetry.htm
+http://chaplain.blogspot.com/
+http://chaplain.blogspot.com/2005_04_01_chaplain_archive.html
+http://chapters.redcross.org/nh/gwmc/red_cross_history.htm
+http://char.txa.cornell.edu/language/introlan.htm
+http://chareidi.shemayisrael.com/BHR64features.htm
+http://chareidi.shemayisrael.com/NVadraft.htm
+http://chareidi.shemayisrael.com/SHM63agiyur.htm
+http://chareidi.shemayisrael.com/YSR65features2.htm
+http://chareidi.shemayisrael.com/archives5759/beshalach/boycott.htm
+http://chareidi.shemayisrael.com/archives5759/beshalach/features.htm
+http://chareidi.shemayisrael.com/archives5759/beshalach/kibbutz1.htm
+http://chareidi.shemayisrael.com/archives5759/ki_sisa/features.htm
+http://chareidi.shemayisrael.com/archives5759/tetzaveh/features.htm
+http://chareidi.shemayisrael.com/archives5762/tetzave/TZV62features.htm
+http://chareidi.shemayisrael.com/archives5763/shoftim/SHF63features.htm
+http://chareidi.shemayisrael.com/archives5764/kisavo/htune.htm
+http://chareidi.shemayisrael.com/orambam2.htm
+http://charityfocus.org/insp/people/hs/index.php?pg=essay
+http://charityguide.org/charity/focus_refugees.htm
+http://charlesmurtaugh.blogspot.com/
+http://charleyswar.tripod.com/id4.html
+http://charlotte-street.blogspot.com/2004_09_01_charlotte-street_archive.html
+http://charlottechurch.net/news/arch30.html
+http://charmingcountryinns.com/inns/usa/mo/kansascity/sucasabedandbreakfast/sucasabedandbreakfast.php3
+http://chasclifton.com/blogger.html
+http://chasemortgage.dorado.com/html/TermsAndConditions.htm
+http://chat.carleton.ca/~jnoakes/grad.html
+http://chatboards.ebay.com/chat.jsp?forum=1&thread=34
+http://chaucer.blogdrive.com/
+http://cheapcaribbean.com/faq.jsp
+http://cheats.gamespot.com/cheats.html?pid=468480
+http://cheats.gamespy.com/playstation-2-cheats/the-suffering/
+http://cheats.gamespy.com/xbox-cheats/the-suffering/
+http://cheats.ign.com/ob2/068/545/545746.html
+http://cheats.ign.com/ob2/068/545/545748.html
+http://cheats.teamxbox.com/xbox/619/The-Suffering/
+http://cheerleader.yoz.com/archives/000041.html
+http://cheerleader.yoz.com/archives/001928.html
+http://cheev.theuseless.com/index.php?cat=5
+http://chefjeff4.tripod.com/dbzfusion/id6.html
+http://chefmoz.org/United_Kingdom/England/Bath/
+http://chem.ch.huji.ac.il/~eugeniik/biofuel/biofuel_cells2_3.html
+http://chem.ch.huji.ac.il/~eugeniik/history/davy.htm
+http://chem.ch.huji.ac.il/~eugeniik/history/faraday.htm
+http://chem.ch.huji.ac.il/~eugeniik/history/grove.htm
+http://chem.ch.huji.ac.il/~eugeniik/history/page.html
+http://chem.ch.huji.ac.il/~eugeniik/history/wheatstone.html
+http://chennai.usconsulate.gov/wwwhpr040910a.html
+http://chennai.usconsulate.gov/wwwhpr050103.html
+http://chennai.usconsulate.gov/wwwhpr050318.html
+http://cherryangelfairy.tripod.com/id12.html
+http://cherwell.ospl.org/?id=2145
+http://cherwell.ospl.org/?s=sports&date=2004-11-12
+http://cherwell.ospl.org/?s=sports&page=sportsreports&date=2004-11-12
+http://ches.okstate.edu/programs_events/wip/news/00/march.html
+http://chessmind.powerblogs.com/
+http://chesterfield.jobs.topusajobs.com/
+http://chetday.com/howmuchexercise.htm
+http://chetday.com/survivalthin.htm
+http://chetly.home.comcast.net/thesis.html
+http://cheyneboy.blogspot.com/
+http://chezpim.typepad.com/blogs/2004/10/food_and_friend.html
+http://chicago-hotels.tripadvisor.com/ShowUserReviews-g35805-d87603-r2871340-Hotel_71-Chicago_Illinois.html
+http://chicago-hotels.tripadvisor.com/ShowUserReviews-g35805-d87637-r3459523-Renaissance_Chicago_Hotel-Chicago_Illinois.html
+http://chicago-hotels.tripadvisor.com/ShowUserReviews-g35805-d87659-r3289213-The_Westin_Chicago_River_North-Chicago_Illinois.html
+http://chicago.about.com/cs/events1/a/021704_dark.htm
+http://chicagopoetry.com/
+http://chicagosports.chicagotribune.com/sports/baseball/whitesox/cs-050613soxgamer,1,1445555.story?coll=cs-whitesox-headlines
+http://chicagotribune.interest.com/terms.asp
+http://chicagouncommon.com/photography/gallery/139/
+http://chicagouncommon.com/photography/gallery/200/
+http://chicagowildernessmag.org/issues/spring1998/IWhoosier.html
+http://chidman.dmusic.net/journal
+http://chiefwiggles.blog-city.com/
+http://childcare.about.com/od/behaviors/qt/stayinbed.htm
+http://childcare.about.com/od/childsafet1/tp/firesafactivity.htm
+http://childcare.about.com/od/enrichment/a/sportsafety.htm
+http://childcare.net/catalog/catalog/product_info.php?products_id=106
+http://childcare.net/catalog/catalog/product_info.php?products_id=305
+http://childcare.net/ebooks/Home_Family_NewProducts.html
+http://childparenting.about.com/b/archives.htm
+http://childparenting.about.com/library/prm/aa051701a.htm
+http://childparenting.about.com/od/summer/a/summerschedule.htm
+http://children.ofthenight.org/cloudbusting/music/this_woman_s_work.html
+http://childrenanddivorce.bizland.com/cs/id25.html
+http://childrenshosp-richmond.org/aboutus/stories/carmen.htm
+http://childrenshosp-richmond.org/families/your_visit/plan_stay.htm
+http://childrentoday.com/resources/articles/eat.htm
+http://childrentoday.com/resources/articles/peepers.htm
+http://childrentoday.com/resources/articles/spirit.htm
+http://chinahousing.mit.edu/english/china/specific/energy_beijing+shanghai/
+http://chinasuppliers.alibaba.com/products/china/1507/Dry_Batteries__Disposable_Batteries__Primary_Batteries.html
+http://chinasuppliers.alibaba.com/search/china_products/E_Bike.html
+http://chinese-school.netfirms.com/Sir-John-Templeton-interview.html
+http://chinese-school.netfirms.com/heart-disease-congestive.html
+http://chinesefood.about.com/library/weekly/aa021103a.htm
+http://chiron.valdosta.edu/whuitt/col/context/infoage.html
+http://chiron.valdosta.edu/whuitt/col/regsys/conation.html
+http://chl.wes.army.mil/software/gms/4.0/stratigraphy.htm
+http://chla.library.cornell.edu/cgi/t/text/text-idx?c=chla;idno=5032826_51_005
+http://chla.library.cornell.edu/cgi/t/text/text-idx?c=chla;idno=5032826_70_003
+http://chla.library.cornell.edu/cgi/t/text/text-idx?c=chla;idno=5032826_74_002;node=5032826_74_002%3A5
+http://chla.library.cornell.edu/cgi/t/text/text-idx?c=chla;idno=5032826_75_003
+http://chla.library.cornell.edu/cgi/t/text/text-idx?c=chla;idno=5033566_40_005
+http://chocnvodka.blogware.com/
+http://chocnvodka.blogware.com/blog/_archives/2004/10/28
+http://chocnvodka.blogware.com/blog/_archives/2004/4/26
+http://chocnvodka.blogware.com/blog/cmd=post_comment/article_id=54483/parent_id=151193
+http://chocnvodka.blogware.com/blog/science
+http://chocnvodka.blogware.com/blog?cmd=search&keywords=duran
+http://cholla.wustl.edu/baker/genealogy/individual.php?pid=I235&ged=data.ged
+http://chompster.blogspot.com/
+http://chrenkoff.blogspot.com/2004/10/good-news-from-iraq-part-12.html
+http://chrenkoff.blogspot.com/2004/12/good-news-from-iraq-part-17.html
+http://chris.pirillo.com/
+http://chris.pirillo.com/blog/_archives/2005/5/26/886557.html
+http://chris.whong.org/mdbounds/penn2.html
+http://chrisevans3d.com/
+http://christian-oneness.org/chapter4.htm
+http://christian.sunrisecounselling.com/Isonlinetherapyforyou.html
+http://christianity.about.com/cs/warandpeace/a/chaplains.htm
+http://christianity.about.com/library/weekly/aa030503.htm
+http://christianity.about.com/library/weekly/blsermonschurchyear.htm
+http://christianretail.blogspot.com/
+http://christianunplugged.com/proctor_essay.htm
+http://christianwritings.net/chapt-32.htm
+http://christinculture.gospelcom.net/eclectic_collection.htm
+http://christmas.allrecipes.com/directory/1434.asp
+http://chronicfatigue.about.com/od/articles/a/attnspan.htm
+http://chronicfatigue.about.com/od/articles/a/goals.htm
+http://chronicle.com/forums/colloquy/read.php?f=1&i=4880&t=4871
+http://chronicle.com/forums/colloquy/read.php?f=1&i=4911&t=4871
+http://chronicle.com/jobs/id.php?id=317588
+http://chronicle.uchicago.edu/000608/facultyawardsa.shtml
+http://chronicle.uchicago.edu/940929/summer.shtml
+http://chuckcurrie.blogs.com/chuck_currie/2004/07/us_pastors_brin.html
+http://chuckcurrie.blogs.com/chuck_currie/2004/08/a_couple_new_li.html
+http://chuckcurrie.blogs.com/chuck_currie/2005/02/the_state_of_th.html
+http://chud.com/forums/archive/index.php/t-80554-p-2.html
+http://chud.com/forums/showpost.php?p=1379843&postcount=1
+http://chud.com/forums/showthread.php?goto=lastpost&t=82042
+http://chud.com/forums/showthread.php?goto=newpost&t=82042
+http://chud.com/forums/showthread.php?mode=hybrid&t=76775
+http://chud.com/forums/showthread.php?t=81954&goto=nextoldest
+http://chud.com/forums/showthread.php?t=82042
+http://chud.com/forums/showthread.php?t=82287
+http://chud.com/forums/showthread.php?t=82332
+http://chujoe.net/index.php?id=385
+http://churchhost.com/michelle/
+http://ci.akron.oh.us/ASP/Index_Resp.asp?link=keep+akron+beautiful
+http://ci.columbia.edu/ci/eseminars/0812_detail.html
+http://ci.ftlaud.fl.us/police/chiefsreply0401.html
+http://ci.golden.co.us/Employment.asp?SectionID=61
+http://ci.kingman.az.us/depts/fire/after_the_fire.htm
+http://ci.montgomery.il.us/Moody.htm
+http://ci.quincy.ma.us/tcpl/htm/legacy/chap3.htm
+http://ciajfk.com/barrymore/john.html
+http://ciei.colorado.edu/heatherwood_mathletes/curriculum.html
+http://cigars.about.com/
+http://ciki2day.blogdrive.com/
+http://cilas.ucsd.edu/programs/CILASfilmCatalog.htm
+http://cimms.ou.edu/~doswell/tstm_camping_safety.html
+http://cimss.ssec.wisc.edu/goes/misc/000407.html
+http://cincinnati.com/race/
+http://cio.co.nz/cio.nsf/0/219000B7A0C43EE7CC256F3300728991?OpenDocument
+http://cio.co.nz/cio.nsf/0/219000b7a0c43ee7cc256f3300728991?OpenDocument&Click=
+http://cio.doe.gov/Documents/CFA.HTM
+http://cio.osu.edu/policies/CUFAQ.html
+http://cira.med.yale.edu/law_policy_ethics/workpapervol1iss1.html
+http://circ.ahajournals.org/cgi/content/full/104/14/1639
+http://circ.ahajournals.org/cgi/content/full/104/24/e145
+http://circ.ahajournals.org/cgi/content/full/109/21/2605
+http://circ.ahajournals.org/cgi/content/full/109/21/2613
+http://circ.ahajournals.org/cgi/content/full/109/21/e302
+http://circ.ahajournals.org/cgi/content/full/94/11/3023
+http://circ.ahajournals.org/cgi/content/full/96/6/2102
+http://circ.ahajournals.org/cgi/content/full/97/1/16
+http://circ.ahajournals.org/cgi/content/full/circulationaha;103/18/2272
+http://circadiana.blogspot.com/2005/01/clocknews-17-melanopsin.html
+http://cis.nci.nih.gov/fact/3_21.htm
+http://cis.nci.nih.gov/fact/3_58.htm
+http://cis.nci.nih.gov/fact/5_16.htm
+http://cis.nci.nih.gov/fact/5_23.htm
+http://cis.nci.nih.gov/fact/8_9.htm
+http://cisgw3.law.pace.edu/cisg/biblio/schlechtriem6.html
+http://cit.hr.caltech.edu/ISS/travel.htm
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:cond-mat/9901186
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:gr-qc/9712083
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-lat/0011067
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-ph/0010164
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-ph/0303052
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-ph/9407249
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-ph/9510343
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-ph/9906222
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-th/0010197
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-th/0503047
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-th/0503152
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:hep-th/9609139
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:math-ph/0307017
+http://citebase.eprints.org/cgi-bin/citations?id=oai:arXiv.org:quant-ph/9904064
+http://citeseer.ist.psu.edu/619580.html
+http://citeseer.ist.psu.edu/707758.html
+http://citeseer.ist.psu.edu/context/114089/0
+http://citeseer.ist.psu.edu/context/124682/136007
+http://citeseer.ist.psu.edu/context/72958/0
+http://citeseer.ist.psu.edu/ferman01fuzzy.html
+http://citeseer.ist.psu.edu/kleinberg99authoritative.html
+http://citeseer.ist.psu.edu/romer98using.html
+http://city.csail.mit.edu/bmg/bmgnotes.html
+http://citybikes.com/site/intro.cfm
+http://cityguide.pojonews.com/fe/DayTrips/stories/dt_constitution_marsh.asp
+http://cityofchesapeake.net/calfe/iac/thisweek/chesapeakethisweek.jsp
+http://citypaper.com/news/story.asp?id=10093
+http://citypaper.net/articles/2003-04-17/browse.shtml
+http://citypaper.net/articles/2004-12-09/music.shtml
+http://citypaper.net/articles/2005-02-10/cover.shtml
+http://citypaper.net/articles/current/cb.shtml
+http://citypaper.net/articles/current/cover2.shtml
+http://citypaper.net/articles/current/eats.shtml
+http://citypop.blogspot.com/archives/2003_10_12_citypop_archive.html
+http://citypop.blogspot.com/archives/2003_11_30_citypop_archive.html
+http://citythateats.typepad.com/
+http://citywide.blogspot.com/2005_04_01_citywide_archive.html
+http://civicspacelabs.org/aggregator/sources/91
+http://civilaviation.nic.in/igrua/ind_text.htm
+http://civilliberty.about.com/b/a/077185.htm
+http://civilliberty.about.com/cs/humaneuthinasia/a/bgTerry.htm
+http://civilwartalk.com/cwt_alt/resources/medicine/generals.htm
+http://civpro.blogs.com/civil_procedure/
+http://civpro.blogs.com/civil_procedure/2004/11/no_habla_espano.html
+http://civpro.blogs.com/civil_procedure/material_things_gadgets_and_gizmos/
+http://cjb.sagepub.com/cgi/content/refs/30/1/62
+http://cjonline.com/special/famfreedom03/
+http://cjonline.com/stories/060305/loc_kdotworkers.shtml
+http://cla.calpoly.edu/cla/advising/adv_ftf.html
+http://cla.calpoly.edu/~dschwart/engl203/lais.html
+http://cla.calpoly.edu/~jlynch/Steeves.html
+http://cla.calpoly.edu/~smarx/Shakespeare/Shak_inLove/Frey.html
+http://clagnut.com/
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Adjuster/gij_job_detail.asp?job_ID=39926
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Examiner/gij_job_detail.asp?job_ID=40124
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Manager/gij_job_detail.asp?job_ID=39568
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Manager/gij_job_detail.asp?job_ID=39783
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Manager/gij_job_detail.asp?job_ID=39926
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Manager/gij_job_detail.asp?job_ID=40671
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Specialist/gij_job_detail.asp?job_ID=40743
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Claims-Specialist/gij_job_detail.asp?job_ID=40999
+http://claims.jobs.greatinsurancejobs.com/jobs/claims/Field-Adjuster/gij_job_detail.asp?job_ID=39062
+http://clappstar.com/mt/past/2002/06/index.php
+http://clarityandresolve.com/archives/2004/10/i_thank_god_im.php
+http://clarksonathletics.com/News/mhock/2005/2/1/mhocvsYALEPRI.asp?path=mhock
+http://clarkware.com/speaking.html
+http://class.lancasteronline.com/display.php?category=6&class=165
+http://classes.berklee.edu/llanday/fall01/ways/assign.htm
+http://classes.design.ucla.edu/Winter05/28/cursos/28/index_ejercicios.php?id=4
+http://classes.yale.edu/02-03/anth500a/reading_notes/RN_field_letters.htm
+http://classic.1up.com/do/blogEntry?bId=3569793&publicUserId=5486944
+http://classicfilm.about.com/od/classicmovieconnections/a/joegrant051205.htm
+http://classictamiyarc.com/tamintro01.html
+http://classictv.about.com/od/thisdayintvhistory/a/2004obituary.htm
+http://classictv.about.com/od/thisdayintvhistory/a/celebdeath05.htm
+http://classified.tribune.com/ctadvertiserwebsite/2sunday.htm
+http://classifieds.japantoday.com/biz.asp?action=home&pid=61
+http://classifieds.nnsw.com.au/class014.html
+http://classof49-53.rmcclub.ca/3021-3032.htm
+http://cleardarksky.com/c/DCTOb1AZkey.html
+http://cleardarksky.com/c/DCTOb1AZkey.html?1
+http://cleardarksky.com/c/HppyRyMnMOkey.html?1
+http://clearinghouse.mwsc.edu/manuscripts/209.asp
+http://clearwater.travel.bc.ca/camping/campgrounds/
+http://clearwisdom.net/emh/articles/2004/1/1/43712.html
+http://clearwisdom.net/eng/info_pak/book2e/eb204-32.html
+http://clem.mscd.edu/~talmanl/journals.html
+http://clickertraining.com/training/shelters/?loaditem=discussion_one
+http://clickmomukhamo.com/bangus/
+http://clinical-leadership.mc.duke.edu/Overview_Detail.asp
+http://clinical.assistant.jobs.topusajobs.com/
+http://clinton.senate.gov/issues_education.html
+http://clinton2.nara.gov/WH/EOP/OP/html/aa/aa07.html
+http://clinton2.nara.gov/WH/New/html/19990803.html
+http://clinton3.nara.gov/Initiatives/OneAmerica/Practices/midwest.html
+http://clinton3.nara.gov/Initiatives/OneAmerica/ab.html
+http://clinton3.nara.gov/WH/New/html/19980810-23271.html
+http://clinton4.nara.gov/WH/Accomplishments/housing_accomps.html
+http://clinton4.nara.gov/WH/Accomplishments/states/North_Carolina.html
+http://clinton4.nara.gov/WH/Accomplishments/technology.html
+http://clinton4.nara.gov/WH/New/html/19980810-23271.html
+http://clinton4.nara.gov/WH/New/html/19990407-4101.html
+http://clinton4.nara.gov/internship/dept.html
+http://clinton4.nara.gov/textonly/Initiatives/OneAmerica/19970927-13823.html
+http://clinton4.nara.gov/textonly/Initiatives/OneAmerica/19971204-2875.html
+http://clinton4.nara.gov/textonly/WH/Accomplishments/housing_accomps.html
+http://clinton4.nara.gov/textonly/WH/Accomplishments/technology.html
+http://clintonnews.net/story02.shtml
+http://clioseye.sfasu.edu/thewest.htm
+http://clivesoleymp.typepad.com/clive_soley_mp/2004/08/sudan_and_faili.html
+http://clm.ucdavis.edu/rooms/printing/printingpoliciesfaq.html
+http://cloanto.com/users/mcb/19950127giflzw.html
+http://cls.coe.utk.edu/efftlc/example_esl.htm
+http://cltg.org/cltg/clt2003/03-01-31.htm
+http://cltg.org/cltg/cltg99-1/99-02-26.htm
+http://club.cdfreaks.com/lite/t-38263.html
+http://club.cdfreaks.com/showthread.php?goto=lastpost&t=123353
+http://clubindustry.com/mag/fitness_bank_2/
+http://clubindustry.com/mag/fitness_focus_technologyequipment/
+http://clublet.com/c/c/why?BigOmega
+http://clubs.akc.org/NBC/1884_1900_standard_comparison.htm
+http://clutch.open.ac.uk/schools/emerson00/pwe_1.html
+http://cm.bell-labs.com/cm/cs/who/dmr/medal.html
+http://cmaid.org/aidrelief.htm
+http://cmhanl.ca/mhm/2004-01/printer-friendly.html
+http://cmp.cps.k12.il.us/mayors_letter.asp
+http://cms.firehouse.com/content/article/article.jsp?sectionId=45&id=35481
+http://cms.hhs.gov/media/press/testimony.asp?Counter=502
+http://cms.lufthansa.com/mam/de/en/gnf/0,3678,0-0-1112459,00.html
+http://cms.psychologytoday.com/articles/pto-1496.html
+http://cms.psychologytoday.com/articles/pto-19920101-000039.html
+http://cms.psychologytoday.com/articles/pto-19920301-000029.html
+http://cms.psychologytoday.com/articles/pto-19920501-000017.html
+http://cms.psychologytoday.com/articles/pto-19940701-000028.html
+http://cms.psychologytoday.com/articles/pto-19940901-000013.html
+http://cms.psychologytoday.com/articles/pto-19940901-000027.html
+http://cms.psychologytoday.com/articles/pto-19941101-000028.html
+http://cms.psychologytoday.com/articles/pto-19950301-000029.html
+http://cms.psychologytoday.com/articles/pto-19950501-000033.html
+http://cms.psychologytoday.com/articles/pto-19971101-000024.html
+http://cms.psychologytoday.com/articles/pto-19980201-000034.html
+http://cms.psychologytoday.com/articles/pto-20021211-000001.html
+http://cms.psychologytoday.com/articles/pto-20030624-000003.html
+http://cms.psychologytoday.com/articles/pto-20050119-000002.html
+http://cms.psychologytoday.com/articles/pto-20050504-000001.html
+http://cms.psychologytoday.com/articles/pto-20050614-000001.xml
+http://cms.psychologytoday.com/conditions/ptsd.html
+http://cms.washingtonea.org/static_content/we/04-05/may/feature12.htm
+http://cmtshop.cmt.com/product.aspx?sku=63977854&loc=37083
+http://cmusicweb.com/features/bluelikejazz/index.shtml
+http://cndyorks.gn.apc.org/yspace/articles/starget.htm
+http://cnets.iste.org/intro2.html
+http://cnets.iste.org/students/s_esscond.html
+http://cnets.iste.org/teachers/pf/pf_cloze-choral-read.html
+http://cnews.canoe.ca/CNEWS/Canada/2005/06/23/1101671-cp.html
+http://cnews.canoe.ca/CNEWS/Law/2005/06/12/1083762-cp.html
+http://cnews.canoe.ca/CNEWS/MediaNews/2005/06/10/1081519-cp.html
+http://cnews.canoe.ca/CNEWS/TechNews/Michetti/2004/12/20/791302.html
+http://cnews.canoe.ca/CNEWS/TechNews/Michetti/2005/06/06/1073825.html
+http://cnews.canoe.ca/CNEWS/World/2005/06/20/1096849-cp.html
+http://cnnstudentnews.cnn.com/2004/WORLD/americas/10/21/castro.fall/
+http://cnnstudentnews.cnn.com/2005/EDUCATION/06/06/college.promise.ap/
+http://cnparm.home.texas.net/Nat/China/ChinaBios.htm
+http://cns.miis.edu/pubs/week/050615.htm
+http://cnserver0.nkf.med.ualberta.ca/cybernephrols/isn/GN_CP_Correlations/CASES_21-30.htm
+http://cnx.rice.edu/content/m11640/latest/
+http://cnx.rice.edu/content/m11873/latest/
+http://cnx.rice.edu/content/m12154/latest/
+http://cnx.rice.edu/content/m12393/latest/
+http://cnx.rice.edu/content/m12746/latest/
+http://co.howard.in.us/ordinances/chapter91.html
+http://co.stanford.edu/resources/glcodes/gldesc.html
+http://co.stanford.edu/resources/gldesc.html
+http://coaching.gc.ca/documents/coaching_in_the_tbs_e.asp
+http://coaching.gc.ca/learning/c3_e.asp
+http://coachmaria.com/success/karenk.html
+http://coastbotanicalgarden.org/
+http://cob.bloomu.edu/grandzol/courses.htm
+http://cobrands.business.findlaw.com/bankruptcy/nolo/faq/1FF752C2-0C80-4539-8B159557A55CC17D.html
+http://cobrands.contracts.findlaw.com/agreements/bam/gameboy.license.1999.02.10.html
+http://cobrands.contracts.findlaw.com/agreements/bam/gbadv.license.2001.05.21.html
+http://cobrands.contracts.findlaw.com/agreements/liberate/peterson.emp.1999.04.06.html
+http://cocaw.org/main.htm
+http://coco.essortment.com/cancerpancreas_mao.htm
+http://cocoadevcentral.com/articles/000056.php
+http://cocoadevcentral.com/articles/000057.php
+http://cocoadevcentral.com/articles/000077.php
+http://code.google.com/summfaq.html
+http://codeblueblog.blogs.com/codeblueblog/2005/03/csi_medblogs_fu.html
+http://codecity.net/awards.htm
+http://codepoet.org/~markw/risus/fantasy.html
+http://codesorcery.net/docs/spamtricks.html
+http://codex.wordpress.org/Codex:Contributing
+http://codex.wordpress.org/I_Make_Changes_and_Nothing_Happens
+http://codex.wordpress.org/Managing_Plugins
+http://codi.buffalo.edu/archives/colleges/.cul/disablaw.html
+http://codinginparadise.org/weblog/2001_11_19_archive.html
+http://codshit.blogspot.com/archives/2004_12_19_codshit_archive.html
+http://coe-dmha.org/Liaison/Vol_3No_1/Feat06.htm
+http://coe-dmha.org/Unicef/HPT_IntroOpeningSession.htm
+http://coe.sdsu.edu/people/jmora/Pages/4X4Guidelines.htm
+http://coe.sdsu.edu/people/jmora/SAT9analysis.htm
+http://coe.west.asu.edu/students/bdowning/wquest/Travel.htm
+http://coffeefaq.com/coffaq2.htm
+http://coffeegeek.com/forums/worldregional/useast/106301
+http://coffeehour.philocrites.com/
+http://cognet.mit.edu/library/conferences/paper?paper_id=55043
+http://cogsci.soton.ac.uk/~harnad/Papers/Py104/pinker.langacq.html
+http://cogsci.soton.ac.uk/~harnad/Papers/Py104/searle.comp.html
+http://cogsci.soton.ac.uk/~harnad/Tp/resolution.htm
+http://cogsci.uwaterloo.ca/Articles/Pages/how-to-decide.html
+http://cogweb.ucla.edu/Abstracts/Cain_on_Henig_00.html
+http://cogweb.ucla.edu/Abstracts/Gardner_on_Mithen.html
+http://cogweb.ucla.edu/Abstracts/Smith_84.html
+http://coh.stratics.com/content/lore/thecoldwar.php
+http://colab.rsnz.org/france/
+http://coldfury.com/reason/?p=183
+http://coldfury.com/reason/?p=290
+http://coldfury.com/reason/?p=31
+http://coldfury.com/reason/?p=445
+http://coldfury.com/reason/?p=467
+http://coldfury.com/reason/?p=549
+http://coldfury.com/reason/?p=556
+http://coles.kennesaw.edu/sbdc/programs.htm
+http://colfa.utsa.edu/colfa/Psychology_Faculty_Research.htm
+http://collaborate.blogdrive.com/
+http://collectdolls.about.com/cs/auctions/a/ebayhusbands.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cjrm/vol-3/issue-3/0139.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-152/0169.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-152/0712e.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-155/issue-4/0442.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-156/issue-8/1159.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-158/issue-8/1033.htm
+http://collection.nlc-bnc.ca/100/201/300/cdn_medical_association/cmaj/vol-164/issue-7/0985.asp
+http://collection.nlc-bnc.ca/100/201/301/daily/daily-a/1999/99-03/990305.txt
+http://collection.nlc-bnc.ca/100/201/301/daily/daily-a/1999/99-08/990805.txt
+http://collection.nlc-bnc.ca/100/201/301/daily/daily-h/1997/97-05/97-05-20/d970520.htm
+http://collections.ic.gc.ca/discourspm/anglais/lbp/1510964e.html
+http://collections.ic.gc.ca/polyphony/labour_art1.html
+http://collections.mnhs.org/duluthlynchings/html/purpose.htm
+http://colleen.typepad.com/
+http://college.hmco.com/history/readerscomp/naind/html/na_017000_iwrel1776.htm
+http://college.hmco.com/history/readerscomp/rcah/html/ah_005400_articlesofco.htm
+http://college.hmco.com/history/readerscomp/rcah/html/ah_010900_blainejamesg.htm
+http://college.hmco.com/history/readerscomp/rcah/html/ah_016700_churchandsta.htm
+http://college.hmco.com/history/readerscomp/rcah/html/ah_059200_mexicousrela.htm
+http://college.hmco.com/history/west/mosaic/chapter13/source492.html
+http://college.hmco.com/history/west/mosaic/chapter15/module49.html
+http://college.hmco.com/history/west/mosaic/chapter2/source87.html
+http://college.hmco.com/history/west/mosaic/chapter8/source71.html
+http://collegeapps.about.com/
+http://collegecatalog.uchicago.edu/programs/sosc.shtml
+http://collegiateway.org/news/2002-04-19.html
+http://collins.thefreelibrary.com/Man-And-Wife/20-1
+http://collins.thefreelibrary.com/No-Name/10-2
+http://collins.thefreelibrary.com/The-Haunted-Hotel/6-1
+http://colorado.rockies.mlb.com/NASApp/mlb/col/ballpark/col_ballpark_directions.jsp
+http://colorado.rockies.mlb.com/NASApp/mlb/col/ballpark/directions.jsp
+http://coloradopoliticalnews.blogs.com/colorado_political_news/2005/01/rutt_and_webb_s.html
+http://coloradopoliticalnews.blogs.com/colorado_political_news/2005/02/mike_coffman_qa_1.html
+http://columbia-physics.net/research/theoretical_research.htm
+http://columbia.campusnetwork.com/~Scoobygurl/activity
+http://columbia.thefreedictionary.com/glass
+http://columbus.bizjournals.com/columbus/stories/2003/09/22/story2.html
+http://columbus.bizjournals.com/columbus/stories/2005/01/17/focus1.html
+http://columns.ink19.com/milesofaisles/
+http://com.miami.edu/StudentServices/HowApplyGraduate.htm
+http://com.pp.asu.edu/com/mcphee/structuration_seminar03.htm
+http://com1.runboard.com/bthescribesmessageboard.fwritingfantasyscifi.t108
+http://com4.runboard.com/bfarfrontiers.forum09.t10
+http://combatarms.mu.nu/
+http://comedian.blogspot.com/
+http://comet.ctr.columbia.edu/~nick/bio.extended.html
+http://comets.rleague.com/03review.php
+http://comicbookresources.com/columns/?column=13
+http://commdocs.house.gov/committees/intlrel/hfa45502.000/hfa45502_0.HTM
+http://commencement.psu.edu/undergrad.html
+http://comment.independent.co.uk/commentators/story.jsp?story=633038
+http://comment.independent.co.uk/leading_articles/
+http://comment.independent.co.uk/letters/story.jsp?story=604274
+http://comment.independent.co.uk/letters/story.jsp?story=609183
+http://comment.independent.co.uk/letters/story.jsp?story=628280
+http://comment.independent.co.uk/low_res/story.jsp?story=609183&host=6&dir=950
+http://commentariat.redrag.net/
+http://commerce.nic.in/exp_horti_ner.htm
+http://commerce.senate.gov/hearings/testimony.cfm?id=1497&wit_id=4263
+http://commerce.senate.gov/hearings/testimony.cfm?id=1529&wit_id=3971
+http://commerce.senate.gov/hearings/testimony.cfm?id=907&wit_id=1730
+http://commerce.senate.gov/nominations/testimony.cfm?id=986&wit_id=2816
+http://commongroundgroup.com/people.html
+http://commongroundgroup.com/publishing.html
+http://commonknowledge.blogs.com/common_knowledge/2004/09/
+http://commonsblog.org/archives/cat_recycling.php
+http://commonscold.typepad.com/
+http://commonscold.typepad.com/commonscold/2005/01/one_click_legal.html
+http://commonsensewonder.com/mtarchives/004370.shtml
+http://commpres.env.state.ma.us/content/buildout.asp
+http://commsdesign.com/design_corner/showArticle.jhtml?articleID=59300982
+http://commtechlab.msu.edu/projects/wonderwall.html
+http://communication.ucsd.edu/goldfarb/comt100/
+http://communication.ucsd.edu/people/f_cole.html
+http://communications.siemens.com/cds/frontdoor/0,2241,hq_en_0_15543_rArNrNrNrN_variation%253A-5_pageType%253AAccessories_imagePos%253A0,00.html
+http://communistsforkerry.com/Revolution_08.14.04.php
+http://community.allhiphop.com/showthread.php?t=121655&page=1
+http://community.andale.com/eve/ubb.x/a/tpc/f/130107/m/6331021/r/3371012
+http://community.christianitytoday.com/cgi/webx?225@5.PAdGaIqi4Pl.0@.ee6b33b
+http://community.darkconspiracy.com/viewtopic.php?p=6156
+http://community.gospelcom.net/Brix?pageID=12693
+http://community.gospelcom.net/Brix?pageID=7068
+http://community.healthgate.com/GetContent.asp?siteid=mclean&docid=/dci/alcoholism
+http://community.healthgate.com/GetContent.asp?siteid=mclean&docid=/dci/depression
+http://community.lawyers.com/chat/chat.asp?chatId=482
+http://community.lawyers.com/messageboards/message.asp?channelId=21&subId=&mId=567883&mbId=136
+http://community.lschs.org/picture_archive/index.asp
+http://community.middlebury.edu/~cneutral/intro.htm
+http://community.middlebury.edu/~harris/Humanities/FormandMeaning.html
+http://community.middlebury.edu/~harris/gallery1.html
+http://community.nursingspectrum.com/MagazineArticles/article.cfm?AID=10549
+http://community.nursingspectrum.com/MagazineArticles/article.cfm?AID=11764
+http://community.nursingspectrum.com/MagazineArticles/article.cfm?AID=14313
+http://community.nursingspectrum.com/MagazineArticles/article.cfm?AID=8192
+http://community.realitytvworld.com/boards/DCForumID17/1015.shtml
+http://community.sonikmatter.com/forums/lofiversion/index.php/t21310.html
+http://community.teentalkcentral.co.uk/index.php?showforum=3
+http://community.webtv.net/Hahn-50thAP-K9/K9History18
+http://community.webtv.net/blacklava/uaw/
+http://communityartsadvocates.org/saafinearts.html
+http://communityrelations.berkeley.edu/CalNeighbors/fall2004/speakfreely.htm
+http://communitysites.impulse.net.au/openstage/osr/ide.asp
+http://communityworksnyc.org/our_programs/theater_to_go/available_programs
+http://comnet.org/local/orgs/projectgrow/guidelines.html
+http://company.monsterwales.com/quanuk/
+http://company.tv-asahi.co.jp/e/announcement/2002/112203.html
+http://completerunning.com/walk-louisiana/index.php?m=20050203
+http://completerunning.com/walk-louisiana/index.php?p=91
+http://compsimgames.about.com/cs/gamereviews/gr/antwar.htm
+http://compsimgames.about.com/cs/gamereviews/gr/civ3_ptwep.htm
+http://comptutor.meetup.com/create/
+http://computer-geekette.com/
+http://computer.howstuffworks.com/y2k.htm
+http://computerarts.co.uk/tutorials/default.asp?siteid=27&sectiontypeid=7&subsectionid=845&pagetypeid=1&page=4
+http://computerarts.co.uk/tutorials/default.asp?siteid=27&sectiontypeid=7&subsectionid=845&pagetypeid=8&page=1&letter=c
+http://computercops.biz/article-5702-nested-0-0.html
+http://computercops.biz/postitle81583-0-0-.html
+http://computercops.biz/postp340144.html
+http://computercops.biz/postp349444.html
+http://computercops.biz/postp376530.html
+http://computercops.biz/postp432596.html
+http://computercops.biz/posts93476-15.html
+http://computercops.biz/postt81583.html
+http://computers.icq.com/boards/view_messages.php?tid=7693&topic_id=525891&page=2&view=date_view
+http://computers.icq.com/boards/view_messages.php?tid=7693&topic_id=525891&page=2&view=date_view&col=1&sort=1
+http://computers.icq.com/boards/view_replies.php?topic_id=525891&tid=7693&msg_id=2329978&parent_id=2329978
+http://computerworld.com/governmenttopics/government/policy/story/0,10801,45933,00.html
+http://computing.breinestorm.net/cincinnati+mechanical+department+industrial+nuclear/
+http://computing.breinestorm.net/phone+conditions+matching+speaker+approach/
+http://computing.breinestorm.net/wind+estimation+structures+tunnel+networks/
+http://conahec.org/conahec/Conferences/SanJuan2005/english/en_Awards.html
+http://concreteproducts.com/mag/concrete_osha_extends_safetyawareness/
+http://condor.depaul.edu/~elliott/stories/b17.html
+http://condor.depaul.edu/~rrotenbe/aeer/aeer11_1/hammel.html
+http://condor.depaul.edu/~stafcnsl/voice_of_staff/voice_of_staff_archive.htm
+http://conference.plasticdebris.org/overview.html
+http://conferenceservices.villanova.edu/mtgplanguide.htm
+http://congress.unc.edu/87_rep_farley.htm
+http://conjelco.com/bj.html
+http://conlaw.usatoday.findlaw.com/supreme_court/briefs/99-1257/99-1257fo12/text.html
+http://conlaw.usatoday.findlaw.com/supreme_court/briefs/99-1571/99-1571mo2/text.html
+http://connect.familyeducation.com/webx/webx.dll?14@8.i4nubqpsC0m%5E0@.ee74877/66
+http://connectors.globalspec.com/LearnMore/Electrical_Electronic_Components/Connectors/AC_Power_Connectors
+http://conrad.senate.gov/~conrad/press/speeches/2003B25533.html
+http://conrad.senate.gov/~conrad/press/speeches/2004422D21.html
+http://conservativegradstudent.blogspot.com/
+http://consilience.typepad.com/
+http://constantpated.blogspot.com/2005/06/us-losing-friends-and-assistance.html
+http://construction.ecnext.com/coms2/summary_0249-571_ITM
+http://construction.firmafrance.com/article/cursorDaoArticle.cfm?nrub=435&idoc=41403&navartrech=1
+http://consultingtimes.com/osgov.html
+http://consumeraffairs.com/recalls/mower_safety.html
+http://consumerlawpage.com/article/birth-defects.shtml
+http://consumerlawpage.com/article/construction-toxics.shtml
+http://consumerlawpage.com/article/elder_abuse.shtml
+http://consumerlawpage.com/article/insure.shtml
+http://consumerlawpage.com/brochure/medleave.shtml
+http://consumptive.org/
+http://content.calgary.ca/CCA/City+Living/Recreation+and+Leisure/Facilities+and+Leisure+Centres/Pools+and+Fitness/Drop-in+Class+Descriptions.htm
+http://content.icicidirect.com/ULFiles/UploadFile_2002826121914.asp
+http://content.karger.com/ProdukteDB/produkte.asp?Aktion=ShowFulltext&ProduktNr=224034&Ausgabe=227358&ArtikelNr=57291
+http://content.karger.com/ProdukteDB/produkte.asp?Aktion=showproducts&ProduktNr=0&searchWhat=authorsproducts&searchParm=oh
+http://content.miw.com.sg/Mindef/Static/Ippt1/KeyActivities/centres.asp
+http://content.monster.com/resume/samples/thankyou/
+http://content.salary.monster.com/articles/poker/
+http://content.teamcanada.monster.ca/onthejob/stress/
+http://contento.best.vwh.net/s238.html
+http://context.themoscowtimes.com/stories/2005/04/08/106.html
+http://context.themoscowtimes.com/stories/2005/06/03/106.html
+http://context.themoscowtimes.com/story/142902/
+http://contracts.corporate.findlaw.com/agreements/3dfx/security.1997.11.21.html
+http://contracts.corporate.findlaw.com/agreements/amazon/bezos.repurch.1996.06.21.html
+http://contracts.corporate.findlaw.com/agreements/ariba/tradex.mer.2000.01.24.html
+http://contracts.corporate.findlaw.com/agreements/athome/security.2001.06.08.html
+http://contracts.corporate.findlaw.com/agreements/chinabb/comp.alt.2002.03.22.html
+http://contracts.corporate.findlaw.com/agreements/concentric/concentric.mer.1997.07.html
+http://contracts.corporate.findlaw.com/agreements/ebay/ebayebaymerge.html
+http://contracts.corporate.findlaw.com/agreements/goldman/goldmancorp.mer.1999.04.20.html
+http://contracts.corporate.findlaw.com/agreements/goto/elkus.spa.1999.12.23.html
+http://contracts.corporate.findlaw.com/agreements/invision/quantum.mer.1997.09.html
+http://contracts.corporate.findlaw.com/agreements/loislaw/loislaw.mer.1999.06.16.html
+http://contracts.corporate.findlaw.com/agreements/martha/kmart.lic.2001.06.21.html
+http://contracts.corporate.findlaw.com/agreements/paypal/musk.emp.2001.05.04.html
+http://contracts.corporate.findlaw.com/agreements/tombrown/unocal.reg.1999.06.29.html
+http://contracts.onecle.com/3do/nintendo.lic.1999.10.01.shtml
+http://contracts.onecle.com/3do/nintendo.lic.2001.05.30.shtml
+http://contracts.onecle.com/acclaim/nintendo.lic.2001.07.19.shtml
+http://contracts.onecle.com/albertsons/defcomp2000.2000.01.01.shtml
+http://contracts.onecle.com/apple/indemn.1997.shtml
+http://contracts.onecle.com/asia-broadband/boehringer.svc.2004.06.30.shtml
+http://contracts.onecle.com/asia-broadband/gea.svc.2004.08.02.shtml
+http://contracts.onecle.com/asia-broadband/molex.svc.2004.08.02.shtml
+http://contracts.onecle.com/asia-broadband/open-learning.svc.2002.08.08.shtml
+http://contracts.onecle.com/asia-broadband/rexam.svc.2004.11.09.shtml
+http://contracts.onecle.com/bam/nintendo.lic-gb.1999.02.10.shtml
+http://contracts.onecle.com/bam/nintendo.lic.2001.05.29.shtml
+http://contracts.onecle.com/bam/ubi.distrib1.2001.04.23.shtml
+http://contracts.onecle.com/bluecoat/network.settle.2003.10.29.shtml
+http://contracts.onecle.com/china-finance/fuhua.lease.2004.05.27.shtml
+http://contracts.onecle.com/china-finance/fuhua.svc-tsa.2004.05.27.shtml
+http://contracts.onecle.com/china-finance/ning.spa.2004.05.27.shtml
+http://contracts.onecle.com/ciphergen/series-e.spa.2000.03.03.shtml
+http://contracts.onecle.com/critical/mcglashan.opt.2002.05.08.shtml
+http://contracts.onecle.com/ctrip/affil.consult.2003.09.10.shtml
+http://contracts.onecle.com/ctrip/affil.lic.2003.09.10.shtml
+http://contracts.onecle.com/ctrip/affil.pledge.2003.09.10.shtml
+http://contracts.onecle.com/ctrip/affil.tm.2003.09.10.shtml
+http://contracts.onecle.com/digital-angel/pickett.emp.1998.11.01.shtml
+http://contracts.onecle.com/earthshell/york.lease.2000.08.23.shtml
+http://contracts.onecle.com/exult/jones.emp.2000.07.28.shtml
+http://contracts.onecle.com/global-entertainment/cia.lic.2003.09.shtml
+http://contracts.onecle.com/hca/steen.emp.1993.11.05.shtml
+http://contracts.onecle.com/quality-dining/nbo.stock.2001.02.28.shtml
+http://contracts.onecle.com/riggs/kennedy.svc.2002.05.24.shtml
+http://contracts.onecle.com/select-comfort/fnbo.svc.1997.12.19.shtml
+http://contracts.onecle.com/talk/walsh.nso.2000.08.07.shtml
+http://contracts.onecle.com/tempur-pedic/friedman.shareholder.2002.11.01.shtml
+http://contracts.onecle.com/think-new-ideas/ketchum.apa.1997.05.31.shtml
+http://contracts.onecle.com/thq/nintendo.lic.1999.03.09.shtml
+http://contracts.onecle.com/thq/nintendo.lic.2001.07.18.shtml
+http://contracts.onecle.com/thq/sony-europe.lic.1998.06.25.shtml
+http://contracts.onecle.com/tivo/aol.invest1.2000.09.11.shtml
+http://contracts.onecle.com/united-defense/bae.mer.2005.03.06.shtml
+http://contracts.onecle.com/webmd/eastrise.svc-media.2000.01.26.shtml
+http://contracts.onecle.com/webzen/the9.svc.2003.02.15.shtml
+http://controlled-trials.com/mrct/mrct_memorandum.asp
+http://conversant.macrobyte.net/427
+http://conversant.macrobyte.net/whatisconversant_long.html
+http://conversations.acc.org/modules/conv/acc/0604a/transcript.asp
+http://conversations.acc.org/modules/conv/acc/0604a/transcript_print.asp
+http://conversations.acc.org/modules/conv/acc/1004b/transcript_print.asp
+http://conversations.acc.org/modules/conv/acc/1204b/transcript_print.asp
+http://conwebwatch.tripod.com/letters/letterirvine.html
+http://coolcosmos.ipac.caltech.edu/cosmic_kids/learn_ir/
+http://cooltech.iafrica.com/science/343468.htm
+http://coop.deadsquid.com/2004/05/
+http://coop.deadsquid.com/index.php?cat=1
+http://cooped-up.blogspot.com/
+http://cooper.thefreelibrary.com/Pioneers/1-16
+http://cooperativegrocer.coop/articles/index.php?id=253
+http://cop3.org/
+http://copernicus.subdomain.de/
+http://copr.nih.gov/minutes/fall2001_report_meeting.asp
+http://copr.nih.gov/minutes/fall2002.asp
+http://copsrus.us/Fallen.html
+http://copywriter.typepad.com/copywriter/2004/12/search_alternat.html
+http://coral.aoml.noaa.gov/pipermail/coral-list/2003-November/000436.html
+http://coral.aoml.noaa.gov/pipermail/coral-list/2003-November/000440.html
+http://core.ecu.edu/psyc/wuenschk/ABS99-ppr.htm
+http://corea2k.com/blog/index.php?p=194
+http://corealisation.inf.ed.ac.uk/group_news.html
+http://corefonts.sourceforge.net/
+http://cornett.blogspot.com/2002_03_03_cornett_archive.html
+http://corp.bayarea.net/bayarea/offerings/managed/managedhostingtrans.shtml
+http://corp.webxites.com/resources/index.aspx
+http://corporate.disney.go.com/outreach/espn_play_your_way.html
+http://corporate.pixar.com/news/19990726-71134.cfm
+http://corpses.comedynetuk.com/archive/absolutely.html
+http://corts.blogspot.com/2003_09_01_corts_archive.html
+http://corzine.senate.gov/press_office/record.cfm?id=225855
+http://corzine.senate.gov/press_office/record.cfm?id=234452
+http://cos.edu/view_page.asp?nodeid=2964&parentid=1192&moduleid=1
+http://cos.gnn.tv/
+http://cosmos.colorado.edu/~urquhart/play/pendulumt.html
+http://cosmos.oninetspeed.pt/dak/dak/warinafrica.htm
+http://counsellingresource.com/types/effectiveness.html
+http://countercog.excult.org/judgment/judgment-33.htm
+http://counterpunch.org/ballinger08122004.html
+http://counterpunch.org/jacobs08092004.html
+http://country-art.com/ca/charles_wysocki_ladies_in_waiting_prints.htm
+http://country-liberal-party.com/pages/Pan-Americanism.b.htm
+http://countryjoe.bizland.com/animals-1.html
+http://countrystudies.us/china/34.htm
+http://countrystudies.us/china/45.htm
+http://countrystudies.us/honduras/16.htm
+http://countrystudies.us/iraq/22.htm
+http://countrystudies.us/japan/132.htm
+http://countrystudies.us/turkey/44.htm
+http://countrystudies.us/united-states/geography-7.htm
+http://course1.winona.edu/tschwarze/favorite.htm
+http://courses.cs.vt.edu/~cs3604/support/Debates/Scenarios.html
+http://courses.lib.odu.edu/engl/jbing/~$escriptivePaper.htm
+http://courses.uiuc.edu/cis/programs/urbana/2005/fall/graduate/russ_east_euro_studies.html
+http://courses.unt.edu/csimpson/cright/ppr.htm
+http://courses.washington.edu/me354a/hw4.html
+http://courseweb.stthomas.edu/paschons/language_http/essays/salten.html
+http://court.nol.org/publications/glossary.htm
+http://courtneycs.blogspot.com/2004/06/are-you-politically-aware.html
+http://courts.countyofventura.org/children.htm
+http://courttv.com/trials/pring-wilson/092304_ctv.html
+http://covered-wagon-train.com/about.htm
+http://cowles.econ.yale.edu/P/cm/m09.htm
+http://coy.state.va.us/Modalities/anxiety.htm
+http://cp-software.co.uk/
+http://cpab.dl.gov.cn/en/IndustrialEconomy.htm
+http://cpe-sf.com/ruthgroup/downloads/ZimmermanTalkingPoints.htm
+http://cpmcnet.columbia.edu/dept/nephrology/
+http://cpmcnet.columbia.edu/texts/gcps/gcps0054.html
+http://cpolrhp.army.mil/ner/trnghandbook/newpage1.htm
+http://cpolrhp.belvoir.army.mil/west/WestCPOCBulletin/March99/CreatingaWinningTeam/CreatingaWinningTeam.htm
+http://cppf.ssrc.org/Activities/
+http://cpti.ws/wtr_ptc_docs/bills/dut_89.html
+http://cpti.ws/wtr_ptc_docs/bills/dut_92.html
+http://cqmextra.cqm.org/cqmjournal.nsf/reprints/rp13150
+http://cqod.gospelcom.net/cqodndtq.htm
+http://cracker.com.au/Viewthread.aspx?threadid=28894&categoryid=11300
+http://cracker.com.au/brisbane/real-estate/share-accommodation/search.aspx
+http://cracker.com.au/browse/realestateregion.aspx?q=Western+Suburbs&regionid=3001&categoryid=2000
+http://cracker.com.au/canberra/jobs/customer-service-contact-centre/search.aspx?pg=6
+http://cracker.com.au/viewthread.aspx?threadid=29949&categoryid=11111
+http://crankcrunk.blogspot.com/
+http://crashnet.cars.msn.co.uk/feature_view.asp?cid=18&fid=5901
+http://craveonline.com/games/stories.php?sid=1480
+http://crazyjaneski.typepad.com/le_tour_delicieux/2004/07/ltd_2004_stage__7.html
+http://creationsafaris.com/epoi_c07.htm
+http://creativecommons.org/technology/challenges
+http://creativecommons.org/weblog/archive/2004/05
+http://creativex.creative.com/legal/tou.asp
+http://credit-cards.interest.com/content/trends/credit_cards_bank.asp
+http://credit.about.com/
+http://credit.about.com/cs/consumerwisdom/a/071199.htm
+http://credit.about.com/cs/frugality/a/042104.htm
+http://credit.about.com/library/weekly/aa112998.htm
+http://credit.about.com/od/selfhelpcounseling/a/071404.htm
+http://crime.about.com/b/a/144209.htm
+http://crime.about.com/od/current/p/brian_mitchell.htm
+http://crimemagazine.com/03/richardspeck,0820.htm
+http://crimsonland.reflexive.com/crimsonland/
+http://critcrim.org/redfeather/learningcircus/001gfclc.html
+http://criterion.uchicago.edu/issues/iii6/naud.html
+http://criticalmethods.org/p125.mv
+http://criticsandbuilders.typepad.com/collegeenglish10/2005/01/we_have_the_fin.html
+http://critter.homestead.com/dogs1.html
+http://crm.ittoolbox.com/nav/t.asp?t=468&p=468&h1=468
+http://crm.knowledgestorm.com/search/keyword/kscrm/Issues%20Facing%20Information%20Systems%20Customer%20Relationship%20Management/Issues%20Facing%20Information%20Systems%20Customer%20Relationship%20Management
+http://crnano.typepad.com/crnblog/2004/06/can_an_mm_arms_.html
+http://crnano.typepad.com/crnblog/2004/06/nanotech_arms_r.html
+http://crnano.typepad.com/crnblog/2004/07/nice_benefit_pa.html
+http://crnano.typepad.com/crnblog/2004/08/playing_with_mo.html
+http://crnano.typepad.com/crnblog/2004/12/wisdom_isnt_eas.html
+http://crnano.typepad.com/crnblog/2004/week51/
+http://crofsblogs.typepad.com/joutou/
+http://crookedtimber.org/2005/03/30/are-children-public-goods/
+http://crookedtimber.org/2005/05/03/leveling-the-playing-field/
+http://crookedtimber.org/2005/05/25/academic-bestsellers/
+http://cross-x.com/vb/showthread.php?goto=lastpost&t=952372
+http://cross.fortt.com/archive/2004_10_01_index.html
+http://crossinglatitudes.com/pages/faq.htm
+http://crosspointe.spreadtheword.com/
+http://crossroads.net/jnazak/blog/
+http://crossword.telegraph.co.uk/money/main.jhtml?xml=/money/2005/01/05/cnhouse05.xml
+http://croucher.blogspot.com/2004_05_01_croucher_archive.html
+http://cruisemates.com/articles/consumer/sickatsea.cfm
+http://crumpled.com/cp/personal/000512.html
+http://cryocord.com.my/news10.asp
+http://cryptome.org/echelon-ep.htm
+http://crystal.palace.net/~llama/angst/johnny.html
+http://cs-ieee.manuscriptcentral.com/inc/terms.html
+http://cs.calvin.edu/christian/ai/index.php
+http://cs.wellesley.edu/~cs/Resources/internships.html
+http://csc.otinia.com/index.php/weblog/C4/
+http://cscs.umich.edu/~crshalizi/White/insanity/lunacy.html
+http://cscs.umich.edu/~crshalizi/notebooks/learning-inference-induction.html
+http://csd.powys.gov.uk/housing/h2.php
+http://csd.unl.edu/fossils/nebraska-invert-fossils/fossils.htm
+http://cse.edc.org/products/teacherleadership/reachingout.asp
+http://cse.seas.wustl.edu/area-ss.asp
+http://cse.ssl.berkeley.edu/lessons/indiv/beth/beth_intro.html
+http://csec-ccst.gc.ca/hist/speeches/20011022_e.php
+http://csestore.cse.org.in/store1.asp?currentpage=1&sec_id=4&subsec_id=14
+http://csf.concord.org/esf/modules.php?op=modload&name=Web_Links&file=index&req=MostPopular
+http://csf.vcaa.vic.edu.au/hp/cfhpip02.htm
+http://csf.vcaa.vic.edu.au/lg/cflgwr4a.htm
+http://cshe.berkeley.edu/projects/university/chem1a/summary.html
+http://csis.pace.edu/~bergin/KarelJava2ed/Karel++JavaEdition.html
+http://csiwhalesalive.org/csigallery32.html
+http://cslewis.drzeus.net/papers/originsofnarnia.html
+http://cslewis.drzeus.net/papers/weightofglory.html
+http://csmonitor.com/2005/0209/p08s03-comv.html
+http://csp.polisci.wisc.edu/BYU_UW/press.asp
+http://css-discuss.incutio.com/?page=ScreenreaderVisibility
+http://csssrvr.entnem.ufl.edu/~walker/epub/ESAFAQ.htm
+http://csstc.inel.gov/index.cfm?fuseaction=home.security_issues
+http://cssvault.com/gallery/kayem_design.php
+http://cstools.asme.org/charters.cfm
+http://cswww.essex.ac.uk/prospectivestudents/pg/faq/
+http://cswww.essex.ac.uk/prospectivestudents/research/faq/
+http://ct.com.com/click?q=ee-ZbvWQwDgH4VYjR3W8g3Uum2IS9A~
+http://ct.dscp.dla.mil/ctinfo/basecamp/oldgp/generalpurposetents.htm
+http://cte.jhu.edu/techacademy/fellows/Mass/webquest/notes.htm
+http://cti.itc.virginia.edu/~meg3c/classes/tcc313/sustain.html
+http://ctl.unc.edu/hpl5.html
+http://cuban-exile.com/doc_351-375/doc0354.html
+http://cube.ign.com/articles/558/558412p1.html
+http://cube.ign.com/objects/639/639492.html
+http://cucc.survex.com/jnl/1974/bit.htm
+http://cudental.creighton.edu/htm/history.htm
+http://cuhsr.bradley.edu/
+http://cuinfo.cornell.edu/Student/GRFN/GRFN.php?mode=record&code=A0005
+http://culturalstudies.gmu.edu/cultural_matters/issue1/laqueur.html
+http://culture.gov.mu/nheritage/maison.htm
+http://culturecat.net/node/846
+http://culturemachine.tees.ac.uk/Cmach/Backissues/j005/Articles/AMunster.htm
+http://cumc.columbia.edu/news/journal/journal-o/archives/jour_v19no1/learningnow.html
+http://cupe.ca/www/Equality/4146
+http://cupe.ca/www/media/10552
+http://cupojoe.blogspot.com/
+http://cura.free.fr/docum/02fagan.html
+http://curezone.com/cleanse/liver/oliveoil.asp
+http://curezone.com/diseases/parasites/
+http://curezone.com/diseases/parasites/default.asp
+http://curezone.com/forums/m.asp?f=83&i=446
+http://curious.astro.cornell.edu/question.php?number=210
+http://curious.astro.cornell.edu/relativity.php
+http://curious.astro.cornell.edu/space.php
+http://curl.haxx.se/mail/lib-2005-06/0031.html
+http://curmudgeongamer.com/article.php?story=2005040523434216
+http://curriculum.calstatela.edu/courses/builders/ev/liz/VExMC.html
+http://curry.edschool.virginia.edu/it/projects/Museums/Teacher_Guide/Social_Studies/English.Influence.html
+http://curtdanhauser.com/St43.html
+http://curtdanhauser.com/St43_x.html
+http://curtis.med.yale.edu/dchud/writings/sa4rim-orig.html
+http://cust.idl.com.au/fold/Left_Behind_series/Torture%20and%20the%20Virgin%20Army.html
+http://custance.org/Library/2MEN/Part_I/chapter6.html
+http://customer-service.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8A7WH6P9N96Q8D3D58
+http://customer-service.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8B46Q5Y58CNJTXZ31R
+http://customer-service.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8H5KK703GBVDN05K44
+http://customer-service.careerbuilder.com/cs.ic/Ohio_Newark?radius=50
+http://customerevangelists.typepad.com/blog/2004/10/
+http://customwire.ap.org/dynamic/fronts/HOME?SITE=CTNHR&SECTION=HOME
+http://cuts-international.org/event-26april-csd.htm
+http://cvt.com.sapo.pt/cvpt_test/test_cvpt.htm
+http://cvtg.org/history/2001_02_pump.html
+http://cwp.library.ucla.edu/articles/ayrton/ayrtonrem2.html
+http://cybaea.com/reviews/GB_York_Posthouse.html
+http://cyber.law.harvard.edu/events/netmusic_brbook.html
+http://cyber.law.harvard.edu/filtering/saudiarabia/
+http://cyber.law.harvard.edu/home/
+http://cyber.law.harvard.edu/home/digital_media_project
+http://cyber.law.harvard.edu/home/home?func=view&wid=10&pn=3
+http://cyber.law.harvard.edu/home/ilc2004
+http://cyber.law.harvard.edu/media/home
+http://cyber.law.harvard.edu/nesson/blog/index.php?m=200504
+http://cyber.law.harvard.edu/people/jmoore/secondsuperpower.html
+http://cyber.law.harvard.edu/population/text93/ETHIOPIA.LAB.htm
+http://cyber.law.harvard.edu/webcred/
+http://cybercut.berkeley.edu/mas2/html/processes/milling/more.html
+http://cyberdash.com/node/view/337
+http://cyberg.wits.ac.za/cyberg/sessiondocs/organisational/organ/organ3/organ3.htm
+http://cyberknights.com.au/articles/areas-for-concern.phtml
+http://cyberlaw.stanford.edu/about/cases/kahle_v_ashcroft.shtml
+http://cyberlibris.typepad.com/blog/2005/04/moores_law_on_i.html
+http://cybermissions.org/articles/localchurch.htm
+http://cybersatan.typepad.com/cybersatancom/
+http://cybersittersunited.com/c4/SA.html
+http://cyberspacei.com/jesusi/inlight/philosophy/western/Sophists.htm
+http://cycletrades.com/motorcycle_parts_accessories/category.php?cat=street-bikes
+http://cyclo.mit.edu/ams/analysis.html
+http://cynthialeitichsmith.blogspot.com/2005/03/author-interview-elisa-carbone-on-last.html
+http://d-n-i.net/lind/lind_7_21_04.htm
+http://d.webring.com/hub?ring=tgchristians
+http://d.whyville.net/smmk/whytimes/article?id=5254
+http://d89156.i50.quadrahosting.com.au/index.php?main_page=index&cPath=74
+http://da.state.ks.us/fm/dfm/information/handbook.htm
+http://da.state.ks.us/itec/Documents/ITECITPolicy2400.htm
+http://da.state.ks.us/ps/draft/orientation/text/diversity.htm
+http://da.state.ks.us/ps/specs/specs/maint.htm
+http://dactyl.som.ohio-state.edu/Music839C/Notes/Nisbett.html
+http://daddytypes.com/
+http://daddytypes.com/archive/2004/09/28/regression_analysis.html
+http://dads.stblogs.org/archives/014738.html
+http://dadtalk.typepad.com/dadtalk/2005/02/fewer_kids_bein.html
+http://dagzine.blogspot.com/2004_04_01_dagzine_archive.html
+http://dahd.nic.in/guidenpcbb.htm
+http://daily.commonworship.com/daily.cgi?today_ep=1
+http://daily.greencine.com/archives/2004_01.html
+http://daily.stanford.edu/daily/servlet/tempo?page=content&id=1886&repository=0001_article
+http://daily.webshots.com/content/ap/current/h74239699.html
+http://dailyablution.blogs.com/the_daily_ablution/2004/11/pelling_pounds_.html
+http://dailyblitz.motime.com/
+http://dailyfunnies.org/page/194
+http://dailyinfo.afa.co.uk/unified_adboard.php?col=os
+http://dailyinfo.afa.co.uk/unified_adboard.php?col=t
+http://dailykos.com/
+http://dailykos.com/main/2
+http://dailykos.com/story/2005/1/21/155021/121
+http://dailylancer.blogspot.com/
+http://dailynews.muzi.com/ll/english/1357696.shtml
+http://dailystar.com.lb/article.asp?edition_id=10&categ_id=21&article_id=7564
+http://dailystar.com.lb/mereview.asp?edition_id=10&article_id=8575
+http://dailytelegraph.news.com.au/story.jsp?sectionid=1258&storyid=3281105
+http://dailytimes.com/print.lasso?wcd=13963
+http://dailywireless.org/modules.php?name=News&file=article&sid=2750&src=rss09
+http://dalythoughts.com/
+http://dalythoughts.com/index.php?p=1154
+http://damagevaluation.com/v-web/b2evo/blogs/index.php/2004/12/23/u_s_environmental_protection_agency_www__1
+http://damned-warrior.deviantart.com/journal/5618429/
+http://damocles.irpi.cnr.it/deliverables/stone/stone.htm
+http://dan.complex.ucl.ac.uk/Report/node29.html
+http://danaadobe.org/danaguide.htm
+http://dancemusic.about.com/cs/interviews/a/FeelgoodInt_2.htm
+http://dancemusic.about.com/od/conference/a/BBDMS2k4Parties.htm
+http://dancemusic.about.com/od/remixersproducers/a/RobClivillesInt_3.htm
+http://dancingbadger.com/princess.html
+http://danenet.wicip.org/bcp/spike_one.html
+http://dangerouschunky.com/notebook/index.php?cat=5
+http://dangillmor.typepad.com/dan_gillmor_on_grassroots/2005/01/truth_and_bill_.html
+http://dangillmor.typepad.com/dan_gillmor_on_grassroots/2005/02/google_emulates.html
+http://dangillmor.typepad.com/dan_gillmor_on_grassroots/2005/04/my_other_new_co.html
+http://danielltedesco.com/areas-of-practice/medical-malpractice.htm
+http://danrenzi.typepad.com/stuff/2004/12/number_killed_b.html
+http://dansoccerzone.com/SoccerGuide/guide.php?id=10
+http://danversoracle.media.mit.edu:4000/servlet/pluto?state=3030347061676530303757656250616765303032696430303431303530
+http://daringfireball.net/2003/09/select_word_script_for_bbedit
+http://daringfireball.net/2004/06/broken_windows
+http://daringfireball.net/2004/06/dashboard_vs_konfabulator
+http://daringfireball.net/2004/06/location_field
+http://daringfireball.net/2005/01/the_rumor_game
+http://daringfireball.net/2005/06/bombs_away
+http://daringfireball.net/linked/2005/january
+http://daringfireball.net/misc/2005/04/tiger_details
+http://dark_mark.tripod.com/flash.htm
+http://darkwing.uoregon.edu/~adiep/grp.htm
+http://darkwing.uoregon.edu/~adoption/archive/NabswTRA.htm
+http://darkwing.uoregon.edu/~counsel/away.htm
+http://darkwing.uoregon.edu/~rbear/may/550.html
+http://darkwing.uoregon.edu/~rbear/wheatley.html
+http://darkwing.uoregon.edu/~sergiok/brasil/rio.html
+http://darkworlds.com/ls/art_14917.html
+http://dartmonkey.ook-ook.net/archives/2005/04/
+http://darwilliams.net/SET/SET.html
+http://darwin.baruch.cuny.edu/bio1003/pstructure.html
+http://darwin.bio.uci.edu/~sustain/bio65/lec16/b65lec16.htm
+http://darwin.thefreelibrary.com/The-Origin-of-Species/11-1
+http://data1.recycle-more.co.uk/recycle3/nav/buildpage.asp?SectionID=621&color=orange&TopSectionID=510
+http://data2.itc.nps.gov/morningreport/morningreportold.cfm?date=09%2F02%2F2003
+http://data2.itc.nps.gov/morningreport/morningreportold.cfm?date=10%2F07%2F2002
+http://database-careers.com/showjob.cfm/201245
+http://dataferrett.census.gov/TheDataWeb/release/Version_1_1_6.html
+http://datavision.sourceforge.net/
+http://datawebcontrols.com/faqs/ProgrammaticAccess/SettingSelectedIndexProgrammatically.shtml
+http://dating.about.com/
+http://davenet.scripting.com/1994/11/14/replyfromnagel
+http://davenet.scripting.com/1998/02/09/askTheQuestions
+http://daveshearon.typepad.com/daveshearon/2005/02/experts_on_meri.html
+http://davesipaq.com/news/004473/iPAQ_Sony_PSP_Plat%20Station%20Portable
+http://davextreme.com/2003/08/templating_mfop2
+http://david.snu.edu/~dwilliam.fs/geog1113/okcboxes.htm
+http://david.weekly.org/writings/ftaa.php3
+http://davidappell.com/archives/00000543.htm
+http://davidappell.com/archives/00000701.htm
+http://davidbrin.blogspot.com/2005/06/sen-frist-many-antimodernists-are.html
+http://davidhayden.com/blog/dave/
+http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx
+http://davidszondy.com/ephemeral/archive10-04.htm
+http://davidwarlick.com/podcasts/
+http://dawn.thot.net/autism-ruling3.html
+http://dawn.thot.net/fofg/feature6.html
+http://dawnfrench.tripod.com/big.html
+http://daymilitary.com/team_about.html
+http://daysfanfiction.com/falling/b5/ch34.html
+http://daysofourlives.about.com/od/june2004/a/ep9833.htm
+http://dayton.bizjournals.com/dayton/stories/2005/02/21/story3.html
+http://dayton.senate.gov/issues/details.cfm?id=231054&&
+http://daytonflyers.collegesports.com/sports/m-baskbl/spec-rel/030805aaa.html
+http://db.energia.ru/energia/convert/prosthetic/catalog/index.php?mode=3&id=1&lg=2&t=23
+http://db.inman.com/inman/content/subscribers/inman/column.cfm?StoryId=020903RG&columnistid=griswold
+http://db.riskwaters.com/public/showPage.html?page=129235
+http://db.riskwaters.com/public/showPage.html?page=129671
+http://db.riskwaters.com/public/showPage.html?page=168761
+http://db.riskwaters.com/public/showPage.html?page=2270
+http://db.uwaterloo.ca/~alopez-o/politics/thoughtsdebts.html
+http://dbacon.igc.org/TWC/mm05_Officer.htm
+http://dbgw.finlit.fi/fili/bff/401/antas.htm
+http://dboilingpoint.blogspot.com/
+http://dc-mrg.english.ucsb.edu/WarnerTeach/E147/Critique.student.pages.htm
+http://dcarts.dc.gov/dcarts/cwp/view,A,3,Q,582599.asp
+http://dce.oca.org/Sections/MiniUnits/MiniUnits.asp?referenceID=ocayMini1
+http://dclagniappe.blogspot.com/2005/06/whatever-you-do-dont-lock-up-your-bike.html
+http://dcsr.org/affil.htm
+http://dcsr.org/educ.htm
+http://de.click2music.co.uk/3rd/Prezence/faithless/noroots/remixcomp/terms.html
+http://de.pennnet.com/articles/print_toc.cfm?p=55
+http://deadsea.netguide.co.il/
+http://dealnews.com/
+http://dean.edwards.name/IE7/
+http://deathbycommittee.blogspot.com/
+http://debate.domini.org/newton/sauda.html
+http://debbyestratigacos.mu.nu/
+http://debrahmorris.com/Tips2.htm
+http://debreu.colorado.edu/markusen/m1.htm
+http://decisionaid.ohri.ca/cochsystem.html
+http://deckernet.com/shed/xmas.htm
+http://declarationsandexclusions.typepad.com/foolblog/
+http://decoymusic.com/featurecontent.php?type=1&id=50
+http://deep_blade.tripod.com/news/FAIR_01.htm
+http://deepimpact.umd.edu/stsp/procedures/index05.shtml
+http://deepthroatuncovered.com/
+http://deepvision.com.ua/en/04.01.php
+http://defazio.house.gov/052405GPStatement.shtml
+http://defectiveyeti.com/
+http://defendmedicare.info/news/2004/02/19feb.htm
+http://degrassirealm.tripod.com/degrassi/id69.html
+http://dein.ucs.br/PosGraduacao/EspNovasTecnologias/Disciplinas/ProgramacaoOO/recursos/livros/aaa-tij3-distribution/TIJ319.htm
+http://dela.state.va.us/dela/MeetTheStaff.nsf/0/db5af67b877fda4185256aed0058a752?OpenDocument
+http://delete.me.uk/2005/03/iso8601.html
+http://delete.me.uk/blog
+http://delivery.acm.org/10.1145/1000000/996372/p78-chu.pdf?key1=996372&key2=5132878801&coll=portal&dl=ACM&CFID=11111111&CFTOKEN=2222222
+http://dels.nas.edu/ilar/jour_online/41_2/Systematic.asp
+http://delta.affinix.com/docs/sadstate.html
+http://deltafarmpress.com/mag/farming_supply_minerals_costeffective/
+http://demandmedia.net/
+http://demesnes.net/terms.html
+http://democracy.ru/english/quotes.php
+http://democracyiniraq.blogspot.com/
+http://democraticrenewal.us/blog/index.php?cat=2
+http://democrats.assembly.ca.gov/members/a46/press/a462004037.htm
+http://democrats.senate.gov/~dpc/releases/2004330506.html
+http://demokrasia-kenya.blogspot.com/2005/04/general-giap-reflects-on-vietnams.html
+http://demwatch.blogspot.com/
+http://denali.gsfc.nasa.gov/research/laser/sla02/results.html
+http://denisdutton.com/cold_reading.htm
+http://denoting.mcmaster.ca/invitedspeakers.html
+http://denver.bizjournals.com/denver/stories/2003/09/01/smallb2.html
+http://denvergov.org/OEM/template22232.asp
+http://dep.state.ct.us/burnatr/wildlife/factshts/bats.htm
+http://dep.state.ct.us/burnatr/wildlife/fguide/fg05/deer.htm
+http://department.monm.edu/classics/Speel_Festschrift/mcclanahan.htm
+http://departments.bloomu.edu/english/CauthenDocuments/cauthen-nowhere.htm
+http://dept.ju.edu/geography/geography_at_ju.htm
+http://dept.physics.upenn.edu/courses/gladney/mathphys/java/sect1/subsubsection1_1_1_3.html
+http://dept.physics.upenn.edu/courses/gladney/mathphys/subsubsection1_1_1_3.html
+http://dept.physics.upenn.edu/home/research/condmat/cm.html
+http://depts.inverhills.edu/LSPS/essential_skills.htm
+http://depts.washington.edu/archdept/programs_courses/masters_prog/master_prof.html
+http://depts.washington.edu/baltic/2002oct6speeches.htm
+http://depts.washington.edu/ceeh/publication/Newsletter/Newsletter9/director.htm
+http://depts.washington.edu/geront/patient/inpatient.htm
+http://depts.washington.edu/hsedp/admitstu/process/thchair.html
+http://depts.washington.edu/mnw/pastarticles/backpain.html
+http://depts.washington.edu/rehab/po/apply.html
+http://depts.washington.edu/uwch/silkroad/cities/uz/samarkand/samarkand.html
+http://depts.washington.edu/uwelp/groups/listprog.shtml
+http://depts.washington.edu/waschool/Tools_TeachersAdmin.html
+http://depts.washington.edu/womenctr/classes/current/academic.html
+http://depts.washington.edu/~bschool/career/cpt_steps.shtml
+http://dermatology.cdlib.org/DOJvol1num2/oleary.html
+http://dermatology.cdlib.org/DOJvol2num1/lorenzo/lorenzo.html
+http://dermatology.cdlib.org/rxderm-archives/cicatricial-pemphigoid
+http://deseretnews.com/dn/view/0,1249,450016772,00.html
+http://deseretnews.com/dn/view/0,1249,595097287,00.html
+http://deseretnews.com/dn/view/0,1249,595111804,00.html
+http://design.isye.gatech.edu/blog/?m=200408
+http://designermagazine.tripod.com/TheFutureheadsINT1.html
+http://desktoplinux.com/articles/AT2106819968.html
+http://desktoppub.about.com/cs/printing/qt/print_terms.htm
+http://desktoppub.about.com/cs/typespacing/a/leading.htm
+http://desktopvideo.about.com/
+http://desktopvideo.miningco.com/
+http://desmoinesregister.com/news/stories/c4788993/23274424.html
+http://dest.travelocity.com/DestGuides/0,1840,TCYCA%7C1944%7C%7C%7C0062021098%7CF%7CN,00.html
+http://destination-nb.com/common/directory/dbreturn.asp?AreaID=2_&CategoryID=G__
+http://detritus.net/steev/mt/
+http://detserv1.dl.ac.uk/Herald/detectors_high_pressure.htm
+http://dev-admin.mobhaile.ie/blog/nolonger/archive/2004/11/29/216.aspx
+http://dev-forums.ebay.com/thread.jspa?messageID=100009304
+http://dev-forums.ebay.com/thread.jspa?messageID=100009304&print=true
+http://dev-forums.ebay.com/thread.jspa?threadID=100002003
+http://dev-forums.ebay.com/thread.jspa?threadID=100002003&tstart=-1
+http://dev-forums.ebay.com/thread.jspa?threadID=100002003&tstart=0&mod=1117056575094
+http://dev.gentoo.org/~suka/blog/archives/2005/06/
+http://dev.mysql.com/doc/mysql/en/gone-away.html
+http://dev.mysql.com/doc/mysql/en/set-option.html
+http://developer.apple.com/business/macmarket/bbedit.html
+http://developer.apple.com/documentation/Carbon/Reference/Appearance_Manager/appearance_manager/function_group_3.html
+http://developer.apple.com/documentation/Carbon/Reference/Appearance_Manager/appearance_manager/function_group_4.html
+http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/perlfork.1.html
+http://developer.apple.com/internet/webcontent/hideshow_layer.html
+http://developer.apple.com/technotes/qd/qd_530.html
+http://developer.apple.com/technotes/tb/tb_530.html
+http://developer.apple.com/technotes/tn/tn1033.html
+http://developer.apple.com/technotes/tn2002/tn2095.html
+http://developer.apple.com/tools/installerpolicy.html
+http://developer.apple.com/webobjects/internet/wowebservices.html
+http://developer.gimp.org/api/2.0/gdk-pixbuf/gdk-pixbuf-gdk-pixbuf.html
+http://developer.gnome.org/doc/API/2.0/gdk-pixbuf/gdk-pixbuf-gdk-pixbuf.html
+http://developer.gnome.org/doc/API/2.0/glib/glib-File-Utilities.html
+http://developer.gnome.org/news/summary/2004_January18_January24.html
+http://developer.gnome.org/projects/gap/laws.html
+http://developer.gnome.org/projects/gup/hig/1.0/layout.html
+http://developer.gnome.org/projects/gup/proposals/sawfish.html
+http://developer.intel.com/technology/itj/2004/volume08issue04/art05_security/p03_security.htm
+http://developer.intel.com/technology/itj/q41998/articles/art_2c.htm
+http://developer.java.sun.com/developer/technicalArticles/Programming/linux/
+http://developer.kde.org/development-versions/kde-3.4-release-plan.html
+http://developer.kde.org/~kmail/kmailreview/
+http://developers.evrsoft.com/article/business/business-management/creating-customer-awareness-by-asking-the-right-questions.shtml
+http://developers.evrsoft.com/article/moxiebin/bm_tools.cgi?print=9224;s=8_6;site=1
+http://developers.evrsoft.com/article/web-design/content-writing-copyright/an-seo-copywriting-makeover-turning-not-into-hot-part-2-of-3.shtml
+http://developers.evrsoft.com/article/web-design/graphics-multimedia-design/importance-of-color-in-web-design.shtml
+http://developers.evrsoft.com/article/web-design/web-design-tutorials/the-amazing-website-makeover-for-dramatically-increasing-sales.shtml
+http://developers.evrsoft.com/article/web-development/computers-internet/caught-in-the-cross-fire-of-the-spam-war.shtml
+http://developers.evrsoft.com/article/web-development/domain-names/5-super-easy-secrets-to-a-winning-domain-name.shtml
+http://developers.evrsoft.com/article/web-development/webmaster-general/the-hits-that-matter-most.shtml
+http://developers.sun.com/solaris/articles/fileio.html
+http://developers.sun.com/techtopics/mobility/midp/articles/uidesign/
+http://development.duke.edu/finalreport/three.html
+http://devhawk.net/CategoryView.aspx?category=Community
+http://devicelink.com/mx/archive/04/11/kerr.html
+http://devon.intranet.org/icon/raferob2.htm
+http://devresource.hp.com/drc/columns/col0405.jsp
+http://devresource.hp.com/drc/resources/d2dappmgmt/index.jsp
+http://devrock.5u.com/custom2.html
+http://dewey.chs.chico.k12.ca.us/flan.html
+http://deyalexander.com/resources/user-centred.html
+http://dfes.gov.uk/pns/DisplayPN.cgi?pn_id=2005_0044
+http://dfw.eventguide.com/annual_events_overview.html
+http://diabetes.about.com/od/copingwithdiabetes/a/stress_2.htm
+http://diabetes.about.com/od/eyedisease/a/JORDY.htm
+http://diabetes.about.com/od/riskfactorsfordiabetes/a/tightcontrol.htm
+http://diabetes.about.com/od/sweeteners/a/pavlovsweetener.htm
+http://diabetes.niddk.nih.gov/dm/pubs/riskfortype2/
+http://diabetes.upmc.com/StayHealthy.htm
+http://diablo.kitcarmagazine.com/ProjectForSale.htm
+http://diamondsea.com/forums/index.php
+http://diaspora.northwestern.edu/cgi-bin/WebObjects/DiasporaX.woa/wa/displayArticle?atomid=901
+http://diatom.acnatsci.org/dpdc/information.asp
+http://dickens.thefreelibrary.com/The-Posthumous-Papers-Of-The-Pickwick-Club/1-2
+http://dict.die.net/blood%20blister/
+http://dict.die.net/blood%20heat/
+http://dict.die.net/blood%20horse/
+http://dict.die.net/blood/
+http://dict.die.net/whole%20blood/
+http://dictionary.reference.com/help/faq/language/p/punctuationmarks.html
+http://dictionary.reference.com/wordoftheday/archive/2000/12/27.html
+http://dictionary.reference.com/wordoftheday/archive/2003/10/26.html
+http://didaskalia.open.ac.uk/issues/vol3no3/foley.html
+http://diegedankan.blogspot.com/
+http://dieoff.com/synopsis.htm
+http://dieoff.org/
+http://dieoff.org/page11.htm
+http://dieoff.org/page115.htm
+http://dieoff.org/page116.htm
+http://dieoff.org/page12.htm
+http://dieoff.org/page122.htm
+http://dieoff.org/page125.htm
+http://dieoff.org/page140.htm
+http://dieoff.org/page163.htm
+http://dieoff.org/page18.htm
+http://dieoff.org/page224.htm
+http://dieoff.org/page27.htm
+http://dieoff.org/page58.htm
+http://dieoff.org/page75.htm
+http://dieoff.org/page90.htm
+http://dieoff.org/page99.htm
+http://differnet.com/experience/sec7.htm
+http://dig.lib.niu.edu/civilwar/race.html
+http://dig.lib.niu.edu/teachers/lesson3.html
+http://digbysblog.blogspot.com/2005_03_20_digbysblog_archive.html
+http://digbysblog.blogspot.com/2005_05_08_digbysblog_archive.html
+http://digbysblog.blogspot.com/2005_05_15_digbysblog_archive.html
+http://digbysblog.blogspot.com/2005_05_29_digbysblog_archive.html
+http://digbysblog.blogspot.com/2005_06_05_digbysblog_archive.html
+http://digigraphica.com/pick/dpick.html
+http://digilander.libero.it/p_truth/
+http://digital-web.com/articles/a_matter_of_styles/
+http://digital-web.com/articles/creating_a_web_page_with_html/
+http://digital-web.com/articles/dave_shea/
+http://digital-web.com/articles/industry_transformation/
+http://digital-web.com/articles/jeffrey_veen_and_jesse_james_garrett/
+http://digital-web.com/articles/the_business_of_blue/
+http://digital-web.com/articles/the_red_queen_color_theory/
+http://digital-web.com/articles/the_roi_of_roi/
+http://digital-web.com/articles/web_design_critique/
+http://digital-web.com/articles/whats_happening/
+http://digital-web.com/news/2005/01/top_10_web_companies_to_work_for/
+http://digital.library.upenn.edu/women/bruce/mates/mates-VIII.html
+http://digital.library.upenn.edu/women/montgomery/story/story-XXV.html
+http://digitalarchive.oclc.org/da/ViewObject.jsp?objid=0000003409
+http://digitalcooperative.oclc.org/dispatch/20feb2004.html
+http://digitalmedia.oreilly.com/pub/a/oreilly/digitalmedia/2005/05/04/reasonbeat.html
+http://digitalmedia.risd.edu/billseaman/poeticTextsTimebook.php
+http://dignitycanada.org/halloweenletter.html
+http://dioforamerica.com/
+http://dir.adbrite.com/index.cgi?a=1.176;search=
+http://dir.atp.ca/resources/modules.php?name=News&file=article&sid=400
+http://dir.webring.com/rw?d=Business___Finance/Home_Business;t=s
+http://dir.webring.com/rw?d=Health___Wellness/Support/Mourning_and_Loss/Loss_of_Pet
+http://dir.webring.com/rw?d=Health___Wellness/Support/Mourning_and_Loss/Loss_of_Pet/
+http://dir.yahoo.com/
+http://dir.yahoo.com/Arts/Performing_Arts/Acting/
+http://dir.yahoo.com/Business_and_Economy/Business_to_Business/Food_and_Beverage/Restaurant_and_Food_Service_Management/Supplies_and_Equipment/
+http://dir.yahoo.com/Business_and_Economy/Business_to_Business/Health_Care/Software/Medical/
+http://dir.yahoo.com/Business_and_Economy/Business_to_Business/Retail_Management/
+http://dir.yahoo.com/Business_and_Economy/Directories/Companies/
+http://dir.yahoo.com/Business_and_Economy/Organizations/Professional/
+http://dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Health/Cosmetic_and_Plastic_Surgery/
+http://dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Health/Cosmetic_and_Plastic_Surgery/Care_Provider_Directories/
+http://dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Personal_Care/Skin_Care/
+http://dir.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/Weblogs/Sex/
+http://dir.yahoo.com/Entertainment/Television_Shows/WhitePages/wp_11.html
+http://dir.yahoo.com/Regional/Countries/South_Africa/Business_and_Economy/Shopping_and_Services/Health/Mental_Health/
+http://dir.yahoo.com/Regional/Countries/United_Kingdom/News_and_Media/Newspapers/
+http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Community/Disabilities/Organizations/
+http://dir.yahoo.com/Society_and_Culture/Holidays_and_Observances/Halloween/
+http://dir.yahoo.com/Society_and_Culture/Religion_and_Spirituality/Faiths_and_Practices/Christianity/Education/Seminaries/
+http://dir.yahoo.com/arts/performing_arts/acting/
+http://dir.yahoo.com/business_and_economy/business_to_business/aerospace_and_defense/
+http://dir.yahoo.com/business_and_economy/business_to_business/retail_management/
+http://dir.yahoo.com/business_and_economy/shopping_and_services/health/cosmetic_and_plastic_surgery/by_region/countries/australia/complete_list/
+http://dir.yahoo.com/education/instructional_technology/online_teaching_and_learning/teacher_resources/
+http://dirckhalstead.org/issue0005/burnett.htm
+http://dirckhalstead.org/issue0110/seeing_intro.htm
+http://dirckhalstead.org/issue0403/haley.html
+http://direct-cnet.com.com/Dell_DJ-20/4505-6490_7-31149174.html
+http://direct.crossrhythms.co.uk/cd.php?cd=7920
+http://directory.google.com/Top/Health/Conditions_and_Diseases/Immune_Disorders/Immune_Deficiency/AIDS/Regional/Africa/
+http://directory.google.com/Top/Regional/Asia/India/Business_and_Economy/Computers_and_Internet/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/Business_and_Economy/Event_Planning/Weddings/Venues/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/Business_and_Economy/Legal_Services/Lawyers_and_Law_Firms/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/Business_and_Economy/Legal_Services/Lawyers_and_Law_Firms/Criminal_Defence/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/England/Business_and_Economy/Legal_Services/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/Government/Defence/Ministry_of_Defence/
+http://directory.google.com/Top/Regional/Europe/United_Kingdom/Scotland/Business_and_Economy/Legal_Services/Solicitors/
+http://directory.google.com/Top/Regional/North_America/United_States/Business_and_Economy/Employment/
+http://directory.google.com/Top/Science/Environment/Water_Resources/Products_and_Services/
+http://directory.google.com/Top/Shopping/Recreation/Genealogy/Heraldry/
+http://directory.searchwarp.com/S182P1-Oxfordshire.htm
+http://disability.ucdavis.edu/
+http://disabilityworld.com/links/links2.php?CATEGORY=Charities&CATEGORY2=Charities+UK
+http://discardedlies.com/entries/2005/05/jewish_heroism_in_the_red_army.php
+http://disch.zophar.net/
+http://discorder.citr.ca/reallive/04julylive.html
+http://discoverysedge.mayo.edu/yeast/
+http://discsunlimited.net/disc_golf_bags.html
+http://discuss.agonist.org/yabbse/index.php?action=recent
+http://discuss.andredurand.com/
+http://discuss.andredurand.com/?print-friendly=true
+http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=121211
+http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=133368
+http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=41267
+http://discuss.glasgowguide.co.uk/index.php?showtopic=81&st=30
+http://discuss.jarretthousenorth.com/newsItems/departments/Houseblog
+http://discuss.jarretthousenorth.com/newsItems/departments/WebDesign
+http://discuss.joelonsoftware.com/default.asp?biz.5.144298.17
+http://discuss.joelonsoftware.com/default.asp?jobs.10.138117.26
+http://discuss.joelonsoftware.com/default.asp?joel.3.141827.24
+http://discuss.worldbank.org/chat/view/8139
+http://discuss.worldbank.org/chat/view/8139&print=1
+http://discuss.worldbank.org/chat/view/8618
+http://discussion.autodesk.com/thread.jspa?threadID=372046
+http://discussion.brighthand.com/printthread.php?threadid=65430
+http://disini.i.ph/blogs/disini/index.php?item=what-can-70-law-students-do-for-free-speech-and-at-what-cost
+http://disneymeetings.disney.go.com/dwm/meetingtypes/overview?name=MeetingTypeOverviewPage
+http://disneyworld.disney.go.com/wdw/resorts/resortRecListing?id=AnimalKingdomLodgeResortRecreationListingPage
+http://disneyworld.disney.go.com/wdw/resorts/resortRecListing?id=AnimalKingdomLodgeResortRecreationListingPage&print=true
+http://display.lyrics.astraweb.com:2000/display.cgi?504_boyz..ballers..haters_gon_hate
+http://disquiet.com/
+http://disquiet.com/photek.html
+http://dissectleft.blogspot.com/
+http://distance_ed.unlv.edu/if/official_policies.html
+http://distrocenter.linux.com/article.pl?sid=04/10/27/146253&tid=127&tid=23&tid=128
+http://diveintoaccessibility.org/day_9_providing_additional_navigation_aids.html
+http://diveintomark.org/archives/2001/10/02/generation_xl
+http://diveintomark.org/archives/2002/12/18/the_right_ones_in_the_right_order
+http://diveintomark.org/archives/2003/05/05/why_we_wont_help_you
+http://diveintomark.org/archives/2003/07/18/dive_into_accountability
+http://diveintomark.org/archives/2003/12/03/cantor-sets
+http://diveintopython.org/dynamic_functions/stage6.html
+http://diversdiscount.com/shop/shopon.asp?category=Regulators
+http://diversityworking.com/career/Purchasing/Purchasing_Managers,_Buyers,_and_Purchasing_Agents/Purchasing_Manager.html
+http://diversityworking.com/career/Purchasing/Purchasing_Managers,_Buyers,_and_Purchasing_Agents/Purchasing_Specialist.html
+http://dividedwefall.blog-city.com/index.cfm
+http://divorcesupport.about.com/bl031898.htm
+http://divorcesupport.about.com/cs/adultery/a/aa092700.htm
+http://diyaudiocorner.tripod.com/imaging.htm
+http://dizzy.library.arizona.edu/ej/jpe/anthenv/internet.html
+http://dizzy.library.arizona.edu/ej/jpe/anthenv/newsletters.html
+http://djardine.blogspot.com/2004/11/nice-people-at-kino-recently-released.html
+http://djuna.nkino.com/kst/23.html
+http://djurdjevic.com/Bulletins/ibm-corporate/FB95-01.htm
+http://dkd.net/davekidd/politics/indpol.html
+http://dl.lib.brown.edu/temperance/rhetoric.html
+http://dli.mt.gov/phoenix/phoenixcontacts.asp
+http://dlis.gseis.ucla.edu/people/pagre/grad-school.html
+http://dll.umaine.edu/historytrail/site24.html
+http://dls.state.md.us/top_pgs/org_str/org_opa_fiscal_policy_anal.html
+http://dmany.convio.net/site/PageServer?pagename=2005nysessions
+http://dmc.engr.wisc.edu/courses/assessment/BB06-intro.html
+http://dmc.engr.wisc.edu/courses/hazards/BB02-09.html
+http://dmc.engr.wisc.edu/courses/response/BB08-07.html
+http://dmcar.com/
+http://dmoz.org/Arts/Crafts/Events/
+http://dmoz.org/Arts/Movies/Education/Film_Schools/
+http://dmoz.org/Arts/Movies/Organizations/Film_Societies/United_Kingdom/
+http://dmoz.org/Arts/Movies/Personal_Pages/
+http://dmoz.org/Arts/Performing_Arts/Acting/
+http://dmoz.org/Arts/Performing_Arts/Acting/Education/desc.html
+http://dmoz.org/Arts/Visual_Arts/Resources/Art_Consultants/
+http://dmoz.org/Arts/Visual_Arts/Resources/Private_Dealers/
+http://dmoz.org/Arts/Writers_Resources/Workshops_and_Courses/
+http://dmoz.org/Business/Financial_Services/Venture_Capital/
+http://dmoz.org/Business/Investing/Games/
+http://dmoz.org/Computers/Artificial_Intelligence/Natural_Language/
+http://dmoz.org/Games/Video_Games/Fighting/Ultimate_Fighting_Championship_Series/desc.html
+http://dmoz.org/Games/Video_Games/Word_Games/Browser_Based/
+http://dmoz.org/Games/desc.html
+http://dmoz.org/Health/Weight_Loss/
+http://dmoz.org/Home/Consumer_Information/Automobiles/Purchasing/
+http://dmoz.org/Kids_and_Teens/School_Time/Science/
+http://dmoz.org/Reference/Encyclopedias/Subject_Encyclopedias/Spartacus_Educational/The_Emancipation_of_Women/
+http://dmoz.org/Regional/North_America/United_States/Nebraska/desc.html
+http://dmoz.org/Science/Environment/Air_Quality/Indoor_Air_Quality/
+http://dmoz.org/Science/Environment/Education/Outdoor_Programs/
+http://dmoz.org/Science/Social_Sciences/Urban_and_Regional_Planning/People/
+http://dmoz.org/Shopping/Auctions/desc.html
+http://dmoz.org/Shopping/Home_and_Garden/Garden_Accessories/
+http://dmoz.org/Shopping/Sports/Motorsports/Auto_Racing/Parts_and_Accessories/
+http://dmoz.org/Society/Religion_and_Spirituality/Christianity/Denominations/Pentecostalism/desc.html
+http://dmoz.org/help/become.html
+http://dmoz.org/termsofuse.html
+http://dneiwert.blogspot.com/
+http://dneiwert.blogspot.com/2004_02_01_dneiwert_archive.html
+http://dneiwert.blogspot.com/2004_02_22_dneiwert_archive.html
+http://dneiwert.blogspot.com/2004_04_25_dneiwert_archive.html
+http://dneiwert.blogspot.com/2004_08_08_dneiwert_archive.html
+http://dnr.metrokc.gov/topics/map/MAPtopic.htm
+http://dobmeyer.com/lastditch.htm
+http://doc.advisor.com/doc/13221
+http://doc.bioperl.org/releases/bioperl-1.4/Bio/SeqIO/game/seqHandler.html
+http://doc.trolltech.com/3.0/tutorial1-13.html
+http://doc.trolltech.com/3.1/tutorial1-13.html
+http://doc.trolltech.com/3.2/qwidget.html
+http://doc.trolltech.com/3.2/tutorial1-13.html
+http://doc.trolltech.com/3.3/qwidget.html
+http://doc.trolltech.com/3.3/tutorial1-13.html
+http://doc.weblogs.com/
+http://doc.weblogs.com/2004/02/05
+http://docbug.com/blog/archives/000377.html
+http://docorder.ahsl.arizona.edu/illiad/faq.html
+http://docs.bluetitan.com/managersGuide/managerChapter4.html
+http://docs.bluetitan.com/managersGuide/managerChapter8.html
+http://docs.freebsd.org/44doc/usd/04.csh/paper-2.html
+http://docs.freebsd.org/44doc/usd/12.vi/paper-3.html
+http://docs.hp.com/en/B8844-90006/ch07s04.html
+http://docs.hp.com/en/J2744-90017/ch01s04.html
+http://docs.hp.com/en/T1227-90004/ch01s05.html
+http://docs.lib.duke.edu/maps/guides/trade_overview.html
+http://docs.markwest.me.uk/phpxref/pn80/_variables/
+http://docs.openlinksw.com/virtuoso/SELECTSTMT.html
+http://docs.python.org/tut/node6.html
+http://docs.sun.com/source/816-6884-10/chapter3.html
+http://docs.yahoo.com/docs/pr/release1045.html
+http://docs.yahoo.com/docs/pr/release1145.html
+http://docs.yahoo.com/docs/pr/release1160.html
+http://docs.yahoo.com/docs/pr/release1230.html
+http://docs.yahoo.com/docs/pr/release176.html
+http://docsouth.unc.edu/gilmerlet/gilmer.html
+http://docsouth.unc.edu/jacobs/support4.html
+http://docsouth.unc.edu/nc/fairresults/fairresults.html
+http://doctor.cardiovalens.com/pickofthemonth/pm-cardiovascular/pmnewsindex.asp?NAV=12
+http://doctor.cardiovalens.com/pickofthemonth/pm-cardiovascular/pmnewsindex.asp?NAV=17
+http://doctor.cardiovalens.com/pickofthemonth/pm-cardiovascular/pmnewsindex.asp?NAV=39
+http://doctorc.blogspot.com/
+http://doctorjob.com/essential_advice/index.asp?Page=3&hid=11&fid=76&action=view
+http://doctorjob.com/workexperience/profile_template.asp?ID=586&Pub=
+http://documents.cancer.org/232.00/
+http://documents.wolfram.com/mathematica/Add-onsLinks/StandardPackages/Statistics/DescriptiveStatistics.html
+http://dodmwd.lackland.af.mil/needs.htm
+http://doe.state.wy.us/lmi/0201/a1.htm
+http://doe.state.wy.us/lmi/0796/0796a1.htm
+http://doesitreallymatter.typepad.com/
+http://dogsnot.net/mt/archives/000924.html
+http://doi.ieeecomputersociety.org/10.1109/2945.489381
+http://doi.ieeecomputersociety.org/10.1109/40.946681
+http://doi.ieeecomputersociety.org/10.1109/52.23131
+http://doi.ieeecomputersociety.org/10.1109/52.589247
+http://doi.ieeecomputersociety.org/10.1109/52.636674
+http://doi.ieeecomputersociety.org/10.1109/52.922721
+http://doi.ieeecomputersociety.org/10.1109/6294.793668
+http://doi.ieeecomputersociety.org/10.1109/6294.988699
+http://doi.ieeecomputersociety.org/10.1109/93.848430
+http://doi.ieeecomputersociety.org/10.1109/AFGR.1996.557289
+http://doi.ieeecomputersociety.org/10.1109/CAHPC.2003.1250342
+http://doi.ieeecomputersociety.org/10.1109/CBMS.1997.596433
+http://doi.ieeecomputersociety.org/10.1109/HICSS.1996.495306
+http://doi.ieeecomputersociety.org/10.1109/HUMO.2000.897373
+http://doi.ieeecomputersociety.org/10.1109/ICCD.2004.1347913
+http://doi.ieeecomputersociety.org/10.1109/ICCIMA.2001.970469
+http://doi.ieeecomputersociety.org/10.1109/IWRSP.2003.1207038
+http://doi.ieeecomputersociety.org/10.1109/MCG.2005.55
+http://doi.ieeecomputersociety.org/10.1109/MCG.2005.69
+http://doi.ieeecomputersociety.org/10.1109/MIC.1997.10046
+http://doi.ieeecomputersociety.org/10.1109/MIS.2003.10005
+http://doi.ieeecomputersociety.org/10.1109/MIS.2005.34
+http://doi.ieeecomputersociety.org/10.1109/MIS.2005.9
+http://doi.ieeecomputersociety.org/10.1109/MITP.2003.1235610
+http://doi.ieeecomputersociety.org/10.1109/MITP.2004.82
+http://doi.ieeecomputersociety.org/10.1109/MM.2003.1261387
+http://doi.ieeecomputersociety.org/10.1109/NRC.1997.10014
+http://doi.ieeecomputersociety.org/10.1109/PCCGA.2001.962891
+http://doi.ieeecomputersociety.org/10.1109/PERCOM.2004.1276867
+http://doit.circles.com/corp/ne_article_page.asp?article=Destination
+http://doityourself.com/
+http://doityourself.com/appliance/kitchenappliancestotest.htm
+http://doityourself.com/auto/tiretrouble.htm
+http://doityourself.com/brick/brickeffects.htm
+http://doityourself.com/carpet/carpettexture.htm
+http://doityourself.com/deck/5deckledgerwall.htm
+http://doityourself.com/electric/tvanten.htm
+http://doityourself.com/faux/shabbypainttechniques.htm
+http://doityourself.com/flowers/containergardening101.htm
+http://doityourself.com/frugal/bedlabelingrules.htm
+http://doityourself.com/frugal/index.shtml
+http://doityourself.com/furniture/bigchair4.htm
+http://doityourself.com/furniture/oldstuff.htm
+http://doityourself.com/gardentools/rainmaking.htm
+http://doityourself.com/lumber/restoringcabinsiding.htm
+http://doityourself.com/outdoors/howtobuyandplanttrees.htm
+http://doityourself.com/paintprep/sandblasting.htm
+http://doityourself.com/plans/critiquingfloorplan.htm
+http://doityourself.com/plumbing/waitingforplumber.htm
+http://doityourself.com/resale/lastminutejitters.htm
+http://doityourself.com/vegetables/awintervegetablegarden.htm
+http://doityourself.com/woodfinish/finish.htm
+http://doityourself.com/woodfinish/repairfurnituresurfaces.htm
+http://doityourself.com/woodfinish/strip.htm
+http://dokuja.com/crazyangels/faq.html
+http://dol.state.vt.us/gopher_root1/000000/supct/164/op.93-395
+http://dolcn.com/data/eng_2/icn_2003/2005-06/1118230301.html
+http://dolcn.com/data/eng_2/news_2001/2005-01/1106661324.html
+http://dollar.ecom.cmu.edu/p3pcritique/
+http://dolls-cat.ioffer.com/c/Phoenix-85021/Dolls-225000
+http://dolphin.upenn.edu/~upennca/revelations/rev_forgiveness.html
+http://dolphin.upenn.edu/~wpswing/pastshows/spring2005.html
+http://dolphincoast.kzn.org.za/dolphin/about/43.xml
+http://domains.euroforum.com/sipo/eng/review/programm.asp
+http://dominionpaper.ca/features/2004/09/30/arrested_d.html
+http://domino.lancs.ac.uk/EdRes/Paulsblog.nsf/articles/DOMK-65CLFS
+http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/solutions/December2000.html
+http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/solutions/May2004.html
+http://domino.swin.edu.au/cd31.nsf/Open/MF99
+http://domino.un.org/UNISPAL.NSF/0/c51a9b87b82981d705256613006d7f44?OpenDocument&Click=
+http://don.yacktman.org/blog/archives/2005/06/07/free-web-objects
+http://donatacom.com/papers/pomo21.htm
+http://donatacom.com/papers/pomo34.htm
+http://donkey2004.blogspot.com/
+http://donmottin.com/trainingaids.html
+http://donor.ucsd.edu:7873/teleinstrument/tutorial/tutorial.html
+http://dontsweat.com/ask/
+http://dontsweat.com/ask/archive.html
+http://doodle.geckotribe.com/interview.php3?topic=et
+http://dorothaharried.blogspot.com/2004_11_01_dorothaharried_archive.html
+http://dosfan.lib.uic.edu/ERC/briefing/daily_briefings/1991/9104/069.html
+http://dosfan.lib.uic.edu/ERC/briefing/daily_briefings/1991/9112/188.html
+http://dosfan.lib.uic.edu/ERC/briefing/press_statements/9611/961118ps2.html
+http://dosfan.lib.uic.edu/ERC/economics/commercial_guides/Nepal.html
+http://dosfan.lib.uic.edu/ERC/economics/statements/940907.html
+http://dosfan.lib.uic.edu/ERC/economics/trade_reports/1994/Tajikistan.html
+http://dosfan.lib.uic.edu/ERC/law/Covenant94/Specific_Articles/08.html
+http://dosfan.lib.uic.edu/ERC/law/INC/1994/08.html
+http://dosfan.lib.uic.edu/ERC/law/INC/1995/08.html
+http://dosfan.lib.uic.edu/ERC/law/INC/1995/09.html
+http://dosfan.lib.uic.edu/ERC/visa_bulletin/9503bulletin.html
+http://dosfan.lib.uic.edu/ERC/visa_bulletin/9506bulletin.html
+http://dosfan.lib.uic.edu/ERC/visa_bulletin/9508bulletin.html
+http://dosfan.lib.uic.edu/ERC/visa_bulletin/9909bulletin.html
+http://dot.kde.org/1077542418/
+http://dot.tucsonaz.gov/construction/
+http://dotavery.com/blog/
+http://dotfaf.com/archives/2003_03.php
+http://dotnet.org.za/kevint/archive/2004/02/23/475.aspx
+http://dotnet.sys-con.com/read/39039.htm
+http://dotnetjunkies.com/WebLog/anoras/archive/2004/09/18/26046.aspx
+http://dotnetjunkies.com/WebLog/deepspin/archive/2004/12/17/37445.aspx
+http://dotnetjunkies.com/WebLog/jkimble/archive/2005/01/17/45072.aspx
+http://dotnetjunkies.com/WebLog/mjordan/
+http://dotnetjunkies.com/WebLog/sriram/archive/2005/01/03/41183.aspx
+http://doubledeckerstroller.com/order1.html
+http://dougiamas.com/writing/education-reform/
+http://dougsmith.ancients.info/scan.html
+http://dougwimbish.com/news.html
+http://downhillbattle.org/
+http://downhillbattle.org/node/view/247
+http://download.cnet.com/downloads/0-10106-108-63806.html
+http://downloads-zdnet.com.com/sort/3150-2194-0-1-1.html
+http://downloads-zdnet.com.com/sort/3150-6677-0-1-2.html
+http://downloads.vnunet.com/download/6088-8-hitsd.html
+http://downtownme.com/event/event.asp?strFunction=BuildEventFromCategory&intCategoryId=9&intFrom=1
+http://dpfwiw.com/c-2000z/lens_cap/
+http://dpp.org.uk/health.asp?subsection=memall&cmp=cmp00047
+http://dpsinfo.com/dps/new.html
+http://dqd.com/~mayoff/other-authors/coming-crisis.html
+http://dr-amy.com/rich/STS-107/
+http://dragons.scout.com/2/115809.html
+http://drclas.fas.harvard.edu/index.pl/about/directions/driving
+http://drclas.fas.harvard.edu/index.pl/santiago/events/students/0304
+http://drclas.fas.harvard.edu/revista/?issue_id=2&article_id=495
+http://drcwww.uvt.nl/dbi/instructie/eu/en/T6.htm
+http://dreamcast.ign.com/objects/013/013552.html
+http://dreamcast.ign.com/objects/013/013552.html?ui=cb_like_04
+http://dreamcast.stationplay.com/games2/Alone_in_the_Dark:_The_New_Nightmare.html
+http://dreamsongs.com/OOPSLA2005/GtSS.html
+http://dreamweaverfever.com/soap/turningthetables/
+http://drezner.blogspot.com/
+http://drhardten.eyemdlink.com/NewsArticle.asp?NewsID=37
+http://drinkboy.editthispage.com/
+http://drinkthis.typepad.com/
+http://drinkthis.typepad.com/main/2004/02/not_following_t.html
+http://drinkthis.typepad.com/main/2004/05/outrage_over_th.html
+http://drinkthis.typepad.com/main/2004/06/too_much_naivet.html
+http://drinkthis.typepad.com/main/2004/07/
+http://drinkthis.typepad.com/main/2004/08/the_sword_of_th.html
+http://drinkthis.typepad.com/main/2004/10/an_attempt_at_d.html
+http://drjohng.com/exercise.htm
+http://drkevinclerico.weblogger.com/stories/storyReader$92
+http://drkoop.com/ency/article/003853.htm
+http://drn.digitalriver.com/category.php%5Baction%5Dbrowse&i=350&id=237&f=%7C%7C%7C%7C&s=product.date_released%7CDESC%5BSiteID%5Ddriverguide
+http://drsordid.blogspot.com/
+http://drugcaucus.senate.gov/colombia03santos.html
+http://druidry.org/obod/camps/whats_it_like.html
+http://drupal.org/node/16207
+http://drupal.org/node/23799
+http://drydredgers.org/jack9610.htm
+http://drzeus.best.vwh.net/Writing/Dreams/Dreams6.html
+http://ds.datastarweb.com/ds/products/datastar/sheets/dbzz.htm
+http://ds.datastarweb.com/ds/products/datastar/sheets/jord.htm
+http://dsal.uchicago.edu/techinfo.html
+http://dsbs.sba.gov/pro-net/dsp_profile.cfm?User_Id=P0222791
+http://dsc.discovery.com/news/briefs/20040920/mummydrink.html
+http://dsei.janes.com/public/login/dseiRegister.html
+http://dsl.broadbandnational.com/arkansas.php?city=Cherokee%20Village
+http://dsl.broadbandnational.com/arkansas.php?city=Lake%20Village
+http://dsmc.info/sale.shtml
+http://dsonline.computer.org/0201/ic/wp102wire.htm
+http://dsonline.computer.org/0412/d/w6towp.htm
+http://dspace.dial.pipex.com/bob.dunning/caught6.htm
+http://dspace.dial.pipex.com/juliet.e.mckenna/articlecharacterbuilding.html
+http://dspace.dial.pipex.com/town/road/xoq83/covletsi770.htm
+http://dspace.dial.pipex.com/town/square/de95/motor/07000006.htm
+http://dspace.dial.pipex.com/town/terrace/adw03/peel/people/owen.htm
+http://dubai.civicconcepts.org/application.html
+http://dublin.goireland.com/Scripts/low/xq/asp/cat.0/areatype.T/areaid.3151/SubjectID.65/qx/listing.htm
+http://dublin.usembassy.gov/ireland/amb_dcuapril15.html
+http://dublin.usembassy.gov/ireland/amb_rtenov7.html
+http://dublin.usembassy.gov/ireland/ambspeech_iccusa.html
+http://dublincore.org/groups/corporate/Seattle/
+http://dublincore.org/resources/faq/
+http://dublintourist.com/Info.cgi/banko003.shtml
+http://dueprocess.org/get-results.php
+http://duffill.blogs.com/beyond_crayons/
+http://duke.usask.ca/~semenoff/myprints.html
+http://dukemednews.duke.edu/global/download.pdf?ids=184
+http://dukemednews.duke.edu/news/article.php?id=184
+http://dukemednews.duke.edu/news/article.php?id=8476
+http://dukemednews.duke.edu/news/article.php?id=9029
+http://dukemednews.duke.edu/news/article.php?id=9029&index=2
+http://dunamai.com/Feedback/fddy_questionnaire.htm
+http://duncanlong.com/science-fiction-fantasy-short-stories/gog.html
+http://dungeonmaker.sourceforge.net/manual/manual3.html
+http://dunndailyrecord.com/main.asp?SectionID=2&SubSectionID=10&ArticleID=63458
+http://duns.thatbitch.com/crypt/archive-092003.shtml
+http://durbin.senate.gov/gitmo.cfm
+http://dustinthelight.timshelarts.com/lint/001994.html
+http://dvd.aldokkan.com/2IQJ8W.html
+http://dvd.box.sk/
+http://dvd.ign.com/articles/491/491629p1.html
+http://dvd.monstersandcritics.com/news/article_6732.php/Team_America_comes_to_DVD_and_we_are_giving_them_away_!
+http://dvdtimes.co.uk/content.php?contentid=55518
+http://dvdxcopy.afterdawn.com/thread_view.cfm/83138
+http://dwcc.dataworld.com.hk/techsmith.asp
+http://dwergs.com/
+http://dwlt.net/archives/cat_scotland.html
+http://dx.doi.org/10.1002/scj.1053
+http://dx.doi.org/10.1002/scj.1166
+http://dx.doi.org/10.1038/nn1078
+http://dx.doi.org/10.1046/j.1463-1318.2001.00287.x
+http://dx.doi.org/10.1103%2FPhysRevE.56.4467
+http://dx.doi.org/10.1103/PhysRevB.69.220403
+http://dx.doi.org/10.1145/320881.320884
+http://dx.doi.org/10.1145/330560.330669
+http://dx.doi.org/10.1163/156855301742012
+http://dyknow.com/teacherstipsfull.htm
+http://dynamic.gamespy.com/~starmada/stgu/index.php?p=/features/invasion
+http://dynamic.gamespy.com/~ww2ec/content.php?content.2
+http://dynamic.ropine.com/yo/tech/security/metaphor.html
+http://dynamic2.gamespy.com/~reactor4/phpBB2/viewtopic.php?t=211
+http://e-bility.com/articles/mar00.shtml
+http://e-collection.ethbib.ethz.ch/show?type=incoll&nr=971&part=text
+http://e-docs.bea.com/wlintegration/v2_1/aiuser/3usruse.htm
+http://e-government.cabinetoffice.gov.uk/Resources/WebGuidelines/WebGuidelinesArticle/fs/en?CONTENT_ID=4003964&chk=z5zGXP
+http://e-magazine.adoption.com/articles/181/i-am-so-glad-you-are-my-son.php
+http://e-reading.gtslearning.com/employer.html
+http://e-thepeople.org/article/29554/
+http://e.webring.com/hub?ring=intelbrief
+http://e3.playstation.com/news/releases/nws_003.aspx
+http://eagle.cdu.edu.au/ntu/apps/ntuinfo.nsf/WWWView/Policy_191
+http://eagles.mostvaluablenetwork.com/index.php?p=7
+http://earlyamerica.com/review/2002_summer_fall/spain_english.htm
+http://earlyamerica.com/review/2002_winter_spring/ghent_treaty.htm
+http://earlyamerica.com/review/fall98/original.html
+http://earlyradiohistory.us/1912dub.htm
+http://earlyradiohistory.us/1917serv.htm
+http://earlyradiohistory.us/1963hw25.htm
+http://ears.ashyre.com/ears-16.html
+http://earth.jsc.nasa.gov/sseop/DbFields.htm
+http://earthcalls.com/cgi-bin/kombuchapages/mainpage.pl/culture-Kambucha.html
+http://earthcalls.com/cgi-bin/kombuchapages/mainpage.pl?kombucha=green&shane=culture&manchurian=kombucha
+http://earthcalls.com/cgi-bin/kombuchapages/mainpage.pl?kombucha=organic&who=green
+http://earthcalls.com/cgi-bin/kombuchapages/mainpage.pl?kombucha=where&kombucha=kombucha&brewing=kombucha
+http://earthday.wilderness.org/teachers/postings.htm
+http://eartheasy.com/article_green_consumers.htm
+http://earthhopenetwork.net/association_of_state_green_parties.htm
+http://earthlingsoft.net/ssp/blog/2003/05/no_spin
+http://earthlink.com.com/HammerHead-Rhythm-Station/3000-2170-10027874.html
+http://earthlink.com.com/Symantec,+Veritas+reach+out+to+investors/2100-7355_3-5513770.html
+http://earthmama.bigguymedia.com/200312-index.php
+http://earthmeanders.blogspot.com/2004_05_01_earthmeanders_archive.html
+http://earthobservatory.nasa.gov/Study/Hanta/
+http://earthobservatory.nasa.gov/Study/footprint/
+http://earthobservatory.nasa.gov/Study/scatter/
+http://earthquake.usgs.gov/4kids/sciencefair.html
+http://earthquake.usgs.gov/eqinthenews/2004/usslav/
+http://earthquake.usgs.gov/faq/plates.html
+http://earthquake.usgs.gov/recenteqsww/Quakes/usslav.htm
+http://earthtones.com/data/138/pages/residential.asp
+http://east_west_dialogue.tripod.com/vattel/id5.html
+http://eastbay.bizjournals.com/eastbay/stories/2004/08/09/story2.html
+http://eastbay.bizjournals.com/eastbay/stories/2005/06/06/story3.html
+http://eastbay.bizjournals.com/site_map/eastbay_sitemap_2.html
+http://eastbay.bizjournals.com/site_map/eastbay_sitemap_53.html
+http://eastbay.bizjournals.com/site_map/eastbay_sitemap_85.html
+http://eastbay.bizjournals.com/site_map/eastbay_sitemap_93.html
+http://eastbay.bizjournals.com/site_map/eastbay_sitemap_94.html
+http://eastbayexpress.com/issues/2004-10-06/news/feature_print.html
+http://eastbethel.govoffice.com/
+http://eastcoastagony.weblogs.us/archives/2004_09.html
+http://easyweb.easynet.co.uk/~aburnham/eng/seahenge.htm
+http://easyweb.easynet.co.uk/~have.feet/boxing/boxing.html
+http://easyweb.easynet.co.uk/~iany/consultancy/usecase_tree/usecase.htm
+http://easyweb.easynet.co.uk/~jbeggsoc/jbshome.html
+http://easyweb.easynet.co.uk/~lightsabre/spiderandfly.htm
+http://easyweb.easynet.co.uk/~ursa/philos/cert06.htm
+http://eba-stats.com/coachcorner.htm
+http://ebarrelracing.com/articles/index.php/2005/01/19/p1433
+http://ebaystrategies.blogs.com/ebay_strategies/2004/11/germany_says_eb.html
+http://ebcd.cuyahogalibrary.org/00000028-0000-0000-0000-000000000001/10/94/en/Help-FAQ-Format25.htm
+http://ebeltz.net/classes/unit-3.html
+http://ebem.org/definitions.html
+http://eber.ed.ornl.gov/look2green_staff.html
+http://ebizwhiz-publishing.com/articles/seo25.htm
+http://ebizwhiz-publishing.com/ebooks3.htm
+http://eblackstudies.org/intro/chapter6.htm
+http://eblackstudies.org/intro/chapter8.htm
+http://eblog.bluelemur.com/index.php?p=89
+http://ebn.bmjjournals.com/cgi/content/extract/5/4/119
+http://ebn.bmjjournals.com/cgi/content/full/3/4/127
+http://ebonyoa.home.att.net/guidebook.htm
+http://ebooks.kcls.org/00000012-0000-0000-0000-000000000001/10/56/en/Help-FAQ-Format25.htm
+http://ebooks.sjlibrary.org/00000022-0000-0000-0000-000000000001/10/88/en/Help-FAQ-Format25.htm
+http://ecaroh.com/calypso/ahwannafall_lyrics.htm
+http://eccc.uni-trier.de/eccc/info/Conferences/FSTTCS96.FP.html
+http://ecen.com/eee13/crisisom.htm
+http://ecen.com/eee9/ecoterme.htm
+http://eces.org/articles/000295.php
+http://echeng.com/journal/index.php?p=618
+http://echidneofthesnakes.blogspot.com/2004_02_01_echidneofthesnakes_archive.html
+http://echievements.com/articles/2893
+http://eclub.uky.edu/readings.php
+http://eco.gn.apc.org/pubs/TomWorld.html
+http://ecoaccess.org/info/defs/
+http://ecoaccess.org/info/wildlife/pubs/esa.html
+http://ecolodgical.yourhomeplanet.com/create_html/issue/operation.htm
+http://ecolu-info.unige.ch/archives/envcee96/0234.html
+http://ecommerce.insightin.com/web_design/page_design.html
+http://ecommerce.taipeitimes.com/ecom/industry/Exhibition/Suplement/giftware/1
+http://econ-www.mit.edu/faculty/download_book.php?id=42
+http://econ-www.mit.edu/faculty/download_pdf.php?id=780
+http://econ.lse.ac.uk/staff/amanning/work/unemploy.html
+http://econ.ucalgary.ca/courses/outlines/300/03/32501F03.htm
+http://econ.worldbank.org/view.php?id=67&topic=21
+http://econjustice.net/wbbb/links/videoresources.htm
+http://econjustice.net/wbbb/whojoined/marianistcouncil_res.htm
+http://econjustice.net/wbbb/whojoined/takomapark.htm
+http://econlog.econlib.org/archives/2004/10/prescott_on_tax.html
+http://econlog.econlib.org/archives/2005/03/how_everyone_ca.html
+http://econlog.econlib.org/archives/2005/05/i_know_its_utte.html
+http://econlog.econlib.org/archives/2005/06/france_and_germ.html
+http://econlog.econlib.org/archives/2005/06/krugmans_got_a.html
+http://econometricexercises.econ.yale.edu/preface.htm
+http://economicallysound.com/case_studies/
+http://economics.about.com/od/taxesandeconomicgrowth/a/mile_tax.htm
+http://economictimes.indiatimes.com/articleshow/43871545.cms
+http://economictimes.indiatimes.com/articleshow/996116.cms
+http://economist.com/World/na/displayStory.cfm?story_id=3970753
+http://economy.gov.az/HTML/Investments/
+http://econpapers.repec.org/paper/cprceprdp/2910.htm
+http://econpapers.repec.org/paper/fthstanho/e-92-22.htm
+http://econpapers.repec.org/paper/woppennin/96-03.htm
+http://econwpa.wustl.edu/eprints/mic/papers/9612/9612001.abs
+http://ecoustics-cnet.com.com/IBMs+Blue+GeneL+goes+on+sale/2100-7337_3-5442285.html
+http://ecoustics-cnet.com.com/Nintendo+reacts+to+DS+demand+as+orders+rise/2100-1043_3-5453109.html
+http://ecpc.ucsd.edu/projects/pdc/pdc_user_manual/A3.burganUserManual.htm
+http://ecrp.uiuc.edu/v2n2/saluja.html
+http://ecrp.uiuc.edu/v3n2/dockett.html
+http://ecrp.uiuc.edu/v5n1/sandberg.html
+http://ecs.bathspa.ac.uk/services/students_union.htm?pagevalue=eight
+http://ecsong.ca/cookbook.html
+http://ecugreatcareers.com/postgrads/newcourses05.htm
+http://ecumene.org/IIS/csss36.htm
+http://ecumene.org/IIS/csss50.htm
+http://ed-02.ams.eng.osaka-u.ac.jp/lab/introduction/admissions_eng.htm
+http://ed-thelen.org/comp-hist/Reckoners.html
+http://ed-web3.educ.msu.edu/newed/newed/fall97/new.htm
+http://ed-web3.educ.msu.edu/reports/ed-researchrep/02/april-report3.htm
+http://ed-web3.educ.msu.edu/ysi/Spotlight2002/how_to_minimize_risks_for_athlet.htm
+http://edbrenegar.typepad.com/universityofwom/
+http://edc.usgs.gov/products/satellite.html
+http://edc.usgs.gov/products/satellite/declass1.html
+http://edf-project.sourceforge.net/news.html
+http://edgc.odsa.com/dexholedescp.htm
+http://edge.edge.net/~dphillip/SanFran.html
+http://edinbane-self-catering.co.uk/tigh_dubh.htm
+http://edinburghnews.scotsman.com/business.cfm?id=687692005
+http://edinburghnews.scotsman.com/edinburgh.cfm?id=363502005
+http://edinburghnews.scotsman.com/index.cfm?id=470792005
+http://edinburghnews.scotsman.com/index.cfm?id=666792005
+http://edinburghnews.scotsman.com/index.cfm?id=686812005
+http://edinburghnews.scotsman.com/index.cfm?id=686862005
+http://edinburghnews.scotsman.com/opinion.cfm?id=962492004&20040819133709
+http://edinburghnews.scotsman.com/sport.cfm?id=686572005
+http://edis.ifas.ufl.edu/FS075
+http://edis.ifas.ufl.edu/IN004
+http://edition.cnn.com/2001/WORLD/europe/07/22/genoa.oakley/
+http://edition.cnn.com/2003/US/West/10/26/california.wildfire/
+http://edition.cnn.com/2003/WORLD/asiapcf/east/03/31/willy.column/
+http://edition.cnn.com/2004/ALLPOLITICS/10/29/kerry.friday/
+http://edition.cnn.com/2004/TECH/space/10/21/astronauts.crew.change/
+http://edition.cnn.com/2004/WORLD/asiapcf/12/29/asia.quake/
+http://edition.cnn.com/2005/LAW/01/10/blake.trial.ap/
+http://edition.cnn.com/2005/SHOWBIZ/Movies/01/14/globes.advancer/
+http://edition.cnn.com/2005/SPORT/05/18/tennis.mailbag.11/
+http://edition.cnn.com/2005/WORLD/asiapcf/06/20/koreas.meeting/
+http://edition.cnn.com/2005/WORLD/meast/05/25/cnna.abbas/
+http://edition.cnn.com/ALLPOLITICS/stories/1999/08/02/tax.cuts/
+http://edition.cnn.com/ALLPOLITICS/stories/1999/10/13/test.ban.02/
+http://edition.cnn.com/HEALTH/library/DS/00285.html
+http://edition.cnn.com/SPECIALS/2000/democracy/bigger.picture/stories/solvable/
+http://edition.cnn.com/SPECIALS/2002/terror.victims/page8.html
+http://edition.cnn.com/money/2005/06/21/news/newsmakers/prisons_state/
+http://editorialmatters.lee.net/articles/2005/01/14/stories/columns/9zcol139.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/columns/9zcol139.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/columns/9zcol165.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/top_stories/9ynews129.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/top_stories/9ynews157.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/top_stories/9znews017.txt
+http://editorialmatters.lee.net/articles/2005/01/21/stories/top_stories/9znews024.txt
+http://editorials.arrivenet.com/pro/article.php/3449.html
+http://editorials.arrivenet.com/tec/article.php/3462.html
+http://edmonton.ymca.ca/donations/8.0_donation_info.htm
+http://edreform.com/press/990903bts.htm
+http://edrev.asu.edu/reviews/rev191.htm
+http://edrev.asu.edu/reviews/rev358.htm
+http://edschool.csuhayward.edu/departments/ted/ted/courses-single.html
+http://edsearch.pbs.org/Eas/2003/res_det.htm?rk=1305&rc=230
+http://edsearch.pbs.org/Eas/2003/res_det.htm?rk=4064&rc=1
+http://edtech.texterity.com/article/200505/63/
+http://edu.sina.com.cn/en/2004-09-03/25620.html
+http://educate-yourself.org/
+http://educate-yourself.org/nwo/
+http://educate-yourself.org/nwo/illuminatiagendabestoverviewyet8jun02.shtml
+http://educate-yourself.org/zsl/atmosphereisexpanding05jul04.shtml
+http://educate-yourself.org/zsl/veday08may05.shtml
+http://education.arm.gov/teacherslounge/background/impacts.stm
+http://education.calumet.purdue.edu/Vockell/CAI/Cai2/cai2style.htm
+http://education.curtin.edu.au/iier/iier8/palmer.html
+http://education.deakin.edu.au/music_ed/history/default.htm
+http://education.gsfc.nasa.gov/eclipse/pages/faq.html
+http://education.guardian.co.uk/Education/higher
+http://education.guardian.co.uk/Observer/education/story/0,12554,820319,00.html
+http://education.guardian.co.uk/academicexperts/story/0,1392,590174,00.html
+http://education.guardian.co.uk/alevels2002/story/0,12321,795777,00.html
+http://education.guardian.co.uk/alevels2002/story/0,12321,806415,00.html
+http://education.guardian.co.uk/bullying/story/0,15408,1359674,00.html
+http://education.guardian.co.uk/chooseadegree/story/0,11601,763227,00.html
+http://education.guardian.co.uk/classroomviolence/story/0,12388,1447424,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1076708,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1126296,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1186053,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1208580,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1233158,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1254316,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1397261,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,1474862,00.html
+http://education.guardian.co.uk/egweekly/story/0,5500,973730,00.html
+http://education.guardian.co.uk/elearning/story/0,10577,1089683,00.html
+http://education.guardian.co.uk/elearning/story/0,10577,1387225,00.html
+http://education.guardian.co.uk/further/opinion/story/0,14037,1479969,00.html
+http://education.guardian.co.uk/higher/
+http://education.guardian.co.uk/higher/careers/story/0,9856,480836,00.html
+http://education.guardian.co.uk/higher/careers/story/0,9856,912847,00.html
+http://education.guardian.co.uk/higher/languages/story/0,9852,711393,00.html
+http://education.guardian.co.uk/higher/news/story/0,9830,1264662,00.html
+http://education.guardian.co.uk/higher/news/story/0,9830,1505602,00.html
+http://education.guardian.co.uk/higher/postgraduate/story/0,12848,1505603,00.html
+http://education.guardian.co.uk/higher/profile/story/0,11109,1490429,00.html
+http://education.guardian.co.uk/higher/research/story/0,9865,1019867,00.html
+http://education.guardian.co.uk/higher/sciences/story/0,12243,1434930,00.html
+http://education.guardian.co.uk/higher/socialsciences/story/0,9846,757441,00.html
+http://education.guardian.co.uk/newschools/story/0,14729,1495943,00.html
+http://education.guardian.co.uk/ofsted/story/0,7348,847467,00.html
+http://education.guardian.co.uk/policy/story/0,15572,1357861,00.html
+http://education.guardian.co.uk/primaryeducation/story/0,11146,1076896,00.html
+http://education.guardian.co.uk/primaryresources/0,12430,791096,00.html
+http://education.guardian.co.uk/sats/story/0,13294,1108651,00.html
+http://education.guardian.co.uk/sats/story/0,13294,1129957,00.html
+http://education.guardian.co.uk/schoolappeals/story/0,7348,539835,00.html
+http://education.guardian.co.uk/schoolfunding/story/0,13292,1270090,00.html
+http://education.guardian.co.uk/schoolmeals/story/0,15643,1469550,00.html
+http://education.guardian.co.uk/schools/learn/story/0,14122,1397497,00.html
+http://education.guardian.co.uk/schools/story/0,5500,1254491,00.html
+http://education.guardian.co.uk/schools/story/0,5500,707040,00.html
+http://education.guardian.co.uk/secondaries/story/0,12389,916063,00.html
+http://education.guardian.co.uk/specialreports/grammarschools/story/0,5500,1474985,00.html
+http://education.guardian.co.uk/specialreports/lecturerspay/story/0,5500,1393821,00.html
+http://education.guardian.co.uk/specialreports/postgrad/0,5477,330227,00.html
+http://education.guardian.co.uk/students/finance/story/0,12728,1392219,00.html
+http://education.guardian.co.uk/students/graduation/story/0,12760,1376294,00.html
+http://education.guardian.co.uk/tefl/story/0,5500,1170569,00.html
+http://education.guardian.co.uk/thebaccalaureate/story/0,13399,1150621,00.html
+http://education.guardian.co.uk/universitiesincrisis/story/0,12028,718839,00.html
+http://education.guardian.co.uk/universityaccess/story/0,10670,888192,00.html
+http://education.hp.com/msbl.htm
+http://education.independent.co.uk/further/story.jsp?story=579037
+http://education.independent.co.uk/gap_year/story.jsp?story=552120
+http://education.independent.co.uk/low_res/story.jsp?story=647236&host=16&dir=946
+http://education.staffordshire.gov.uk/ProceduresAndGuidance/Procedures/HealthAndSafety/FirstAidRegulations.htm
+http://education.state.nj.us/rc/rc04/definitions.htm
+http://education.umn.edu/Kin/faculty/mwade.htm
+http://education.umn.edu/news/Points/2004-12/features.html
+http://education.yahoo.com/college/essentials/articles/college/campus_visit.html
+http://education.yahoo.com/college/essentials/articles/grad/gradessaysecrets.html
+http://education.yahoo.com/college/essentials/articles/grad/graduate-financialaid.html
+http://education.yahoo.com/college/student_life/cliffsnotes/commentary/dorian_gray.html
+http://education.yahoo.com/reference/shakespeare/plays/4142.html
+http://educationforum.ipbhost.com/lofiversion/index.php/t848.html
+http://educationnews.proboards33.com/index.cgi?board=general&action=post&num=1094324838&quote=1094568451&start=0
+http://educationseek.com/privateschools.html
+http://educationseek.com/schools/Private_Schools/
+http://educationusa.state.gov/life/housing/off_campus.htm
+http://educationusa.state.gov/predeparture/travel/pack.htm
+http://edugreen.teri.res.in/misc/poem/poemview.htm
+http://edumacation.com/MaryKayOpinion202
+http://edumart.com/bookmark/
+http://eduscapes.com/42explore/horse.htm
+http://eduscapes.com/42explore/invasive.htm
+http://eduscapes.com/sessions/liferafts/liferafts.html
+http://edushop.edu4kids.com/catalog/product_info.php?products_id=274
+http://eduwight.iow.gov.uk/curriculum/core/science/Keystage3/24SUBJECT.asp
+http://eduwight.iow.gov.uk/curriculum/core/science/keystage3/24subject.asp
+http://edweb.sdsu.edu/people/cguanipa/amigos/answer.html
+http://edwinwhitedesigns.com/botgardenarticle.htm
+http://edworkforce.house.gov/hearings/106th/ecyf/21century21000/gunderson.htm
+http://edworkforce.house.gov/hearings/108th/sed/misexpl42903/allen.htm
+http://edworkforce.house.gov/hearings/109th/fc/60minutes030105/carter.htm
+http://edworkforce.house.gov/issues/108th/education/funding/budgetfactsheet020403.htm
+http://edworkforce.house.gov/press/press108/01jan/capta10703.htm
+http://ee.hearne.com.au/
+http://eee.uci.edu/programs/comp/computers/email.html
+http://eelink.net/~asilwildlife/barcelona.html
+http://eesc.columbia.edu/courses/ees/climate/labs/radiation1/intro_lab.html
+http://eesc.orst.edu/agcomwebfile/EdMat/html/EC/EC1288/EC1288.html
+http://eesc.orst.edu/agcomwebfile/garden/cal/gc.html
+http://eeshop.unl.edu/rsi.html
+http://eff.cls.utk.edu/toolkit/support_metacognitive_awareness.htm
+http://effectmeasure.blogspot.com/2005/04/h7-in-north-korea.html
+http://efl.htmlplanet.com/abc.htm
+http://egj.lib.uidaho.edu/egj02/groat01.html
+http://egj.lib.uidaho.edu/egj10/miller1.html
+http://egj.lib.uidaho.edu/egj13/wulfinghoff1.html
+http://egofood.blogspot.com/2004/12/does-anyone-still-need-gmail-invites.html
+http://egofood.blogspot.com/2004_10_01_egofood_archive.html
+http://egov.oregon.gov/ENERGY/RENEW/glossary.shtml
+http://ehac.chestpain.org/st-agnes/ehaclearn/delivering613.html
+http://ehealthforum.com/health/topic30199.html
+http://ehp.niehs.nih.gov/docs/2004/6849/abstract.html
+http://ehp.niehs.nih.gov/members/2002/110p307-317vankempen/vankempen-full.html
+http://ehp.niehs.nih.gov/members/2004/112-3/focus.html
+http://ehrweb.aaas.org/entrypoint/rr/app-notes.html
+http://ehs.ucdavis.edu/animal/vet_care/training/cattle.cfm
+http://ehs.uky.edu/radiation/KYReg/appg.html
+http://eichlerlab.gs.washington.edu/data/
+http://eies.njit.edu/~hiltz/collaborative_learning_in_asynch.htm
+http://eightiesclub.tripod.com/id307.htm
+http://eil.com/shop/artistlist.asp?artistname=billy-idol
+http://eir.library.utoronto.ca/rpo/display/displaypoem.cfm?poemnum=350
+http://eis.net.au/~paulh/ei4hp.htm
+http://eisenhowerfellowships.org/programs/incoming.html
+http://eitherstorm.deviantart.com/
+http://eiu.enumerate.com/asp/wcol_HelpIndexCalc.asp
+http://ejbo.jyu.fi/index.cgi?page=articles/0401_2
+http://ejmas.com/jcs/jcsart_svinth_0102.htm
+http://ejmas.com/jnc/jncart_barton-wright_0200.htm
+http://ejmas.com/pt/ptart_dick_0101.htm
+http://ejohnlove.blogspot.com/
+http://ejswanso.blogspot.com/2004/08/saturday-news_28.html
+http://ejt.sagepub.com/cgi/content/refs/9/2/277
+http://el-oso.net/blog/wp-stats.php?author=HispanicPundit
+http://elab.vanderbilt.edu/research/papers/html/student_projects/filling.gaps.online.retailing/buyingprocess.htm
+http://elc.polyu.edu.hk/EAP/Resources/R3L.htm
+http://elc.polyu.edu.hk/elsc/contact_point/enquiry/FAQ/faqmain.htm
+http://elc.polyu.edu.hk/elsc/material/Speaking/asking.htm
+http://elcaminopediatrics.com/healthinfo_teachinginfanttosleep_0304.htm
+http://eld.lib.ucdavis.edu/bylaws.php
+http://eldred.cc/
+http://elearningcentre.typepad.com/whatsnew/2005/01/
+http://election.polarbears.com/art0016.htm
+http://election.scotsman.com/index.cfm?id=488822005
+http://election.scotsman.com/index.cfm?id=495472005
+http://election.scotsman.com/topics.cfm?tid=324&id=446602003
+http://election.scotsman.com/topics.cfm?tid=324&id=601382005
+http://election.scotsman.com/topics.cfm?tid=478&id=488822005
+http://electronicintifada.net/bytopic/historicaldocuments/51.shtml
+http://electronicintifada.net/bytopic/historicalspeeches/267.shtml
+http://electronicintifada.net/v2/article2338.shtml
+http://electronicintifada.net/v2/article2466.shtml
+http://electronicintifada.net/v2/article2524.shtml
+http://electronicintifada.net/v2/article3242.shtml
+http://electronicintifada.net/v2/article3552.shtml
+http://electronicintifada.net/v2/article3872.shtml
+http://elfwood.lysator.liu.se/art/c/l/clnadeau/cuddlingclr.jpg.html
+http://elfwood.lysator.liu.se/art/k/n/knauf/couple.jpg.html
+http://elfwood.lysator.liu.se/art/s/i/simon/sdr_human.jpg.html
+http://elfwood.lysator.liu.se/art/v/e/ventovir/plop.jpg.html
+http://elfwood.lysator.liu.se/fanq/j/h/jhalley2/mypercy.jpg.html
+http://elfwood.lysator.liu.se/fanq/l/e/lene2/destroying_the_happy_couple.jpg.html
+http://elfwood.lysator.liu.se/loth/c/a/catalina/mer_person.jpg.html
+http://elfwood.lysator.liu.se/loth/s/i/simon/sdr_human.jpg.html
+http://elginwatches.org/help/serial_number_info.html
+http://elimina.com/insights/shared-hat.htm
+http://eliot.landrum.cx/
+http://eliot.thefreelibrary.com/Lifted-Veil/1-2
+http://eliot.thefreelibrary.com/Middlemarch/16-1
+http://eliotchapel.org/sermonDocs/progressOrMorality.htm
+http://eliotinstitute.org/pages/2application.htm
+http://elj.warwick.ac.uk/jilt/02-3/guadamuz.html
+http://elliott.org/vault/pt/2003/food.htm
+http://elonka.com/kryptos/KryptosAerial.html
+http://elvis.rowan.edu/~kilroy/JEK/11/03.html
+http://elvispelvis.com/airplanecrash.htm
+http://elythia.tangognat.com/index.php?m=200409
+http://emacspeak.sourceforge.net/raman/hubbell-labrador/usage-faq.html
+http://emagazine.greenhome.com/products/bath/personal_care/107458/
+http://emailuniverse.com/
+http://emailuniverse.com/ezine-tips/?REVIEW:-101-Simple,-FREE-and-Low-Cost-Ways-to-Quickly-Build-a-MASSIVE-Email-List&id=1260
+http://emboss.sourceforge.net/embassy/phylip/consense.html
+http://emd.aapg.org/technical_areas/uranium.cfm
+http://emeagwali.com/interviews/job-postings/first-break-all-the-rules.html
+http://emjae.blogspot.com/
+http://emm.jrc.org/NewsBrief/alertedition/en/Transport.html
+http://emmc.org/EMMC+Mission/
+http://emmc.org/emmc+mission
+http://emoglen.law.columbia.edu/LIS/discuss/166.html
+http://emory.hr.emory.edu/benefits.nsf/0/eec9b2c3cb62ee4385256bca0058549d?OpenDocument
+http://emotionalliteracyeducation.com/abraham-maslow-emotional-literacy-ortho-education.shtml
+http://emperors-clothes.com/articles/Johnstone/crime.htm
+http://emperors-clothes.com/images/north-int.htm
+http://emperors-clothes.com/indict/calif1.htm
+http://emperors-clothes.com/interviews/redcross.htm
+http://empirezine.com/screenplays/american-beauty.htm
+http://employees.csbsju.edu/hjakubowski/classes/ch331/signaltrans/aplysia.htm
+http://employment.indlaw.com/guest/subscription/default.asp
+http://employmentblawg.blogspot.com/2005/06/update-testing-1-2-3ada-and.html
+http://emporium.turnpike.net/C/cs/quest.htm
+http://emporium.turnpike.net/P/ProRev/freedc.htm
+http://emptybottle.org/glass/2002/07/the_hundred_thousand_years_war_qa.php
+http://emptybottle.org/glass/2003/01/cloudy_strong_chance_of_rain.php
+http://emusician.com/mag/emusic_monitoring_perfection/
+http://emusician.com/write_for_em/
+http://en.ce.cn/Life/sports/200501/31/t20050131_2993006.shtml
+http://en.ce.cn/subject/US-election/News/200411/03/t20041103_2177416.shtml
+http://en.chinacache.com/services/white_pagers.htm
+http://en.cnltr.com/FileDb/News/200411/41129479872.shtml
+http://en.fitness.com/health_weight_loss/v967521552.php
+http://en.mimi.hu/astrology/solid.html
+http://en.mobtime.com/en/cpmHelp/English/licence.php
+http://en.olympic.cn/china/sponsorship.html
+http://en.wikibooks.org/wiki/Movie_Making_Manual-The_Basic_Basics
+http://en.wikinews.org/wiki/Mothers,_teachers_concerned_about_leukemia_deaths_at_California_elementary_school
+http://en.wikinews.org/wiki/Wikinews:Submit_a_story
+http://en.wikiquote.org/wiki/Harry_Potter_(series)
+http://en.wikiquote.org/wiki/Wikiquote_talk:Manual_of_style
+http://en.yellowpages.pl/
+http://encarta.msn.com/college_article_partyheartyschools/that_party_the_heartiest.html
+http://encarta.msn.com/encyclopedia_1741500823_10/United_States_(History).html
+http://encarta.msn.com/encyclopedia_1741500823_18/United_States_(History).html
+http://encarta.msn.com/encyclopedia_761555778/German_Literature.html
+http://encarta.msn.com/encyclopedia_761561210/Crusades.html
+http://encarta.msn.com/encyclopedia_761561691_6/Greek_Art_and_Architecture.html
+http://encarta.msn.com/encyclopedia_761567780/Serfdom.html
+http://encarta.msn.com/encyclopedia_761573055_12/China.html
+http://encarta.msn.com/encyclopedia_761576315_3/Christianity.html
+http://encarta.msn.com/encyclopedia_761576768/Electoral_College.html
+http://encarta.msn.com/encyclopedia_761577591/Alzheimer%E2%80%99s_Disease.html
+http://encarta.msn.com/encyclopedia_761584403/Great_Depression_in_the_United_States.html
+http://encarta.msn.com/related_1741500821_3/Labor_Department_responsible_for_improving_working_conditions.html
+http://encarta.msn.com/related_761576731_16.15/Ireland_If_this_nation_had_achieved_its_present_political.html
+http://encarta.msn.com/text_461575434__1/Canadian_Architecture.html
+http://encarta.msn.com/text_761567780__1/Serfdom.html
+http://encarta.msn.com/text_761567780___0/Serfdom.html
+http://encke.jpl.nasa.gov/define.html
+http://encyclopedia.laborlawtalk.com/Capital_(economics)
+http://encyclopedia.laborlawtalk.com/Factors_of_production
+http://encyclopedia.laborlawtalk.com/Oxford_English_Dictionary
+http://encyclopedia.laborlawtalk.com/Triad
+http://encyclopedia.thefreedictionary.com/Cimarron,%20New%20Mexico
+http://endeavor.med.nyu.edu/lit-med/lit-med-db/webdocs/webdescrips/dickens1341-des-.html
+http://endeavor.med.nyu.edu/lit-med/lit-med-db/webdocs/webdescrips/fiser12241-des-.html
+http://endorph.sevcom.com/telescopes.html
+http://enemyoftheearth.org/
+http://ener-chi.com/peace.htm
+http://energy.cr.usgs.gov/radon/georadon/4.html
+http://energy.er.usgs.gov/products/databases/CoalQual/
+http://energy.gov/engine/content.do?PUBLIC_ID=14441&BT_CODE=PR_SPEECHES&TT_CODE=PRESSRELEASE
+http://energy.senate.gov/news/dem_release.cfm?id=203615
+http://energy.senate.gov/news/dem_release.cfm?id=215272
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=212281&Month=9&Year=2003&Party=1
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=221137&Month=5&Year=2004&Party=1
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=221207&Month=5&Year=2004&Party=1
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=232980&Month=3&Year=2005&Party=1
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=234505&Month=3&Year=2005&Party=1
+http://energy.senate.gov/public/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=720&Month=5&Year=2003&Party=0
+http://energy.senate.gov/public/index.cfm?FuseAction=Speeches.Detail&Speech_id=3&Month=5&Year=2003&IsChairman=1
+http://energybulletin.net/5972.html
+http://energycommerce.house.gov/108/Hearings/04212004hearing1252/Becker1942.htm
+http://energycommerce.house.gov/108/Hearings/04212004hearing1252/DuBois1935.htm
+http://energycommerce.house.gov/108/Hearings/04212004hearing1252/W.Weber1936.htm
+http://energycommerce.house.gov/108/Hearings/05122004hearing1265/Jaszi1992.htm
+http://energycommerce.house.gov/108/Hearings/05182004hearing1275/hearing.htm
+http://energycommerce.house.gov/108/Hearings/06112003hearing966/Muris1538.htm
+http://energycommerce.house.gov/108/Letters/01292004_1197.htm
+http://energyoutlet.com/res/appliances/washers/
+http://energyscience.org/education/homeenergy/preparing.htm
+http://energytrends.pnl.gov/germany/ge005.htm
+http://enews.tufts.edu/stories/091603OilCurse.htm
+http://enewsletter.cygnuspub.com/Mass%20Transit/dec04aoi.htm
+http://enfantsduningxia.uk.over-blog.com/article-414422.html
+http://eng.maidanua.org/static/emai/1105109549.html
+http://eng.pristontale.com/UserMadang/BoardView.aspx?index=11&page=1&server=0&num=98902
+http://engadget.com/entry/1234000473026293/
+http://engadget.com/entry/6686926481524560/
+http://engforum.pravda.ru/printthread.php3?threadid=133501
+http://engineering.careerbuilder.com/en.ic/Nevada_LasVegas?radius=10
+http://engineering.careerbuilder.com/en.ic/NewYork_Albany_MechanicalEngineering.htm
+http://england.shelter.org.uk/advice/advice-281.cfm
+http://england.shelter.org.uk/advice/advice-3077.cfm
+http://england.shelter.org.uk/policy/policy-965.cfm
+http://english.aljazeera.net/NR/exeres/8AEF2417-CBDF-4E99-A8D2-CAA5409C147E.htm
+http://english.epochtimes.com/news/4-3-31/20605.html
+http://english.epochtimes.com/news/5-1-20/25881.html
+http://english.epochtimes.com/news/5-2-2/26201.html
+http://english.epochtimes.com/news/5-6-18/29645.html
+http://english.forestindustries.fi/glossary/S.html
+http://english.kbs.co.kr/life/travel/spots/1341763_11625.html
+http://english.massey.ac.nz/programmes/esp.htm
+http://english.mn.ru/english/issue.php?2003-44-7
+http://english.people.com.cn/200112/24/eng20011224_87357.shtml
+http://english.people.com.cn/200203/28/eng20020328_93035.shtml
+http://english.people.com.cn/200308/26/eng20030826_123100.shtml
+http://english.people.com.cn/200309/25/eng20030925_124911.shtml
+http://english.people.com.cn/200310/22/eng20031022_126627.shtml
+http://english.people.com.cn/200408/10/eng20040810_152405.html
+http://english.people.com.cn/200412/06/eng20041206_166187.html
+http://english.people.com.cn/200412/09/eng20041209_166660.html
+http://english.people.com.cn/200503/21/eng20050321_177656.html
+http://english.people.com.cn/200505/02/eng20050502_183545.html
+http://english.people.com.cn/200505/19/eng20050519_185821.html
+http://english.people.com.cn/200506/29/eng20050629_193110.html
+http://english.people.com.cn/data/minorities/Lisu.html
+http://english.people.com.cn/english/199904/29/enc_990429001008_TopNews.html
+http://english.people.com.cn/whitepaper/13appendix.html
+http://english.pravda.ru/
+http://english.pravda.ru/accidents/2001/05/21/
+http://english.pravda.ru/comp/2002/08/16/34687.html
+http://english.pravda.ru/comp/2003/02/20/43543.html
+http://english.pravda.ru/economics/2001/08/23/13154.html
+http://english.pravda.ru/economics/2003/02/12/43322.html
+http://english.pravda.ru/mailbox/22/101/399/14868_Guantanamo.html
+http://english.pravda.ru/main/18/90/361/14802_sex.html
+http://english.pravda.ru/main/2002/06/19/30734.html
+http://english.pravda.ru/politics/2003/02/21/43565.html
+http://english.pravda.ru/region/2002/08/09/34144.html
+http://english.pravda.ru/science/
+http://english.pravda.ru/society/2001/10/11/17841.html
+http://english.pravda.ru/world/2001/09/12/14992.html
+http://english.safe-democracy.org/keynotes/religion-and-religious-extremism.html
+http://english.unitecnology.ac.nz/resources/units/anzacs/world_war1.html
+http://english.unitecnology.ac.nz/resources/units/camp_thrills/home.html
+http://english.unitecnology.ac.nz/resources/units/civil_defence/home.html
+http://english.unitecnology.ac.nz/writers/display_story.html?name=ADayintheLifeofaRoma
+http://english.unitecnology.ac.nz/writers/display_story.html?type=plays&age=13-15&name=Theplantopilferthepe
+http://english.upmc.fr/
+http://english.vietnamnet.vn/politics/2004/05/140238/
+http://english.wafa.ps/reportnews1.asp?field=reportnews&id=35
+http://english.wafa.ps/reportnews1.asp?field=reportnews&id=36
+http://english.yingkou.net.cn/mothers%20day.htm
+http://english2american.com/dictionary/d.html
+http://english2american.com/dictionary/k.html
+http://english2american.com/dictionary/l.html
+http://english470d.tripod.com/20020912.html
+http://englishhistory.net/tudor/citizens/boleyn.html
+http://englishhistory.net/tudor/monarchs/aragon.html
+http://englishhistory.net/tudor/monarchs/howard.html
+http://englishhistory.net/tudor/relative/brandon.html
+http://englishrussiantranslations.com/resources/WorkingWithInterpreters.html
+http://enhs.umn.edu/files/financial.html
+http://enjoyment.independent.co.uk/books/features/story.jsp?story=595793
+http://enjoyment.independent.co.uk/books/features/story.jsp?story=595793&host=3&dir=70
+http://enjoyment.independent.co.uk/books/features/story.jsp?story=613513
+http://enjoyment.independent.co.uk/books/interviews/story.jsp?story=637903
+http://enjoyment.independent.co.uk/books/interviews/story.jsp?story=649097
+http://enjoyment.independent.co.uk/books/news/story.jsp?story=561446
+http://enjoyment.independent.co.uk/film/interviews/story.jsp?story=627292
+http://enjoyment.independent.co.uk/food_and_drink/features/story.jsp?story=416443
+http://enjoyment.independent.co.uk/food_and_drink/features/story.jsp?story=586381
+http://enjoyment.independent.co.uk/low_res/story.jsp?story=595793&host=5&dir=497
+http://enjoyment.independent.co.uk/low_res/story.jsp?story=605149&host=5&dir=213
+http://enjoyment.independent.co.uk/music/news/story.jsp?story=564004
+http://ennaani.proboards3.com/
+http://enpferney.org/Secondary/NewPupilsHandbook.htm
+http://enpferney.org/Secondary/SecondaryWork_Autobiography.htm
+http://enquire.hertscc.gov.uk/cmswhatson/Cwhatson.cfm
+http://enquirer.com/columns/mcgurk/112296d_mm.html
+http://enquirer.com/editions/2001/11/04/loc_3editorial_why_this.html
+http://enrevanche.blogspot.com/
+http://enrichmentjournal.ag.org/200101/0101_044_reaching_students.cfm
+http://enrichmentjournal.ag.org/200304/016_Management.cfm
+http://ensign.senate.gov/issleg/issues/record.cfm?id=225561&
+http://enterprise.aacc.cc.md.us/~rhs/
+http://enterprisesecurity.symantec.com/content.cfm?articleid=726&PID=6526177
+http://entertaining.about.com/cs/invitations/a/drivedirections.htm
+http://entertainment.ie/horoscopes/default.asp
+http://entertainment.mainetoday.com/dining/diningdiary/2005_03.html
+http://entertainment.mainetoday.com/dining/diningdiary/2005_04.html
+http://entertainment.msn.com/movies/movie.aspx?m=99843
+http://entertainment.msn.com/music/hotgossip4
+http://entertainment.msn.com/tv/article.aspx?news=192883
+http://entertainment.scotsman.com/books/headlines_specific.cfm?id=10080
+http://entertainment.scotsman.com/visual/headlines_specific.cfm?id=10202
+http://entertainment.signonsandiego.com/profile/180876
+http://entertainment.signonsandiego.com/profile/180876/
+http://entertainmenttech.info/sun_oct24/
+http://enterthetrap.com/lyrics.htm
+http://enviro.blr.com/display.cfm/id/25654
+http://environment.about.com/od/greenliving/
+http://environment.dictonarypage.co.uk/
+http://environment.harvard.edu/religion/publications/statements/oneearth.html
+http://environment.unlv.edu/neill.html
+http://environmentallegal.blogs.com/sholzer/2005/05/
+http://envisat.esa.int/
+http://ep.pennnet.com/Articles/Article_Display.cfm?Section=ARTCL&ARTICLE_ID=230996&VERSION_NUM=2&p=29
+http://ep.pennnet.com/Articles/Article_Display.cfm?Section=Articles&Subsection=Display&ARTICLE_ID=125929
+http://ep.pennnet.com/Articles/Article_Display.cfm?Section=Articles&Subsection=Display&ARTICLE_ID=166994&KEYWORD=DRM
+http://epa.atalink.co.uk/articles/career/15
+http://epage.pvusd.k12.az.us/nchsweb/Files/clubsnsports.html
+http://epdweb.engr.wisc.edu/webG037
+http://epetitions.kingston.gov.uk/view_petition.asp?PetitionID=40
+http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/122097561/m/103003273731
+http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/28609695/m/3780996404
+http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/28609695/m/3780996404/p/1
+http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/599009962631/m/972000193731
+http://epp.eurostat.cec.eu.int/pls/portal/url/page/SHARED/PER_GENSTA
+http://eprentice.sdsu.edu/J03OW/ishizaka/WebQuest/webquestcompilationstudent.htm
+http://eprints.rclis.org/archive/00002085/
+http://eprints.rclis.org/archive/00003582/
+http://eprofitnews.com/ebook-topics-2004.html
+http://epswww.unm.edu/help/win_dialup.htm
+http://epw.senate.gov/107th/Ricker_082002.htm
+http://epw.senate.gov/107th/has_0615.htm
+http://epw.senate.gov/hearing_statements.cfm?id=213409
+http://epw.senate.gov/hearing_statements.cfm?id=219986
+http://epw.senate.gov/pressitem.cfm?id=238760&party=rep
+http://eq2.adeptshaven.com/ftopict-215.html
+http://eq2.stratics.com/content/community/shortstory/shortstory010.php
+http://eqi.org/emotions.htm
+http://eqi.org/listen.htm
+http://eqint.cr.usgs.gov/eq/html/Earthquake_Rates_and_Probability.html
+http://eqlive.station.sony.com/
+http://eqmac.station.sony.com/manual_detail.jsp?chapter=4
+http://eqmac.station.sony.com/manual_printview.jsp?chapter=4
+http://equineprotectionnetwork.com/press/il.htm
+http://equisearch.com/lifestyle/thelife/eqbike706/
+http://equisearch.com/sports/endurance/ride090103/
+http://equisearch.com/train/myth/tmarticle15/
+http://er.sheezyart.com/
+http://erc.endocrinology-journals.org/cgi/content/full/11/3/423
+http://erc.uchicago.edu/highlights.htm
+http://erg.environics.net/rich/
+http://erg.usgs.gov/isb/pubs/factsheets/fs08601.html
+http://ergo.human.cornell.edu/DEA325notes/sitting.html
+http://ergo.human.cornell.edu/MBergo/schoolguide.html
+http://ericec.org/digests/e541.html
+http://ericgorr.com/
+http://ericrichardson.com/verbal/standing_itwo_ceremony/
+http://erictheunred.blogspot.com/2005/04/democratic-fraudsters.html
+http://erie.extension.psu.edu/4-h/codeofconduct.htm
+http://erj.ersjournals.com/cgi/content/abstract/22/4/668
+http://erj.ersjournals.com/cgi/content/full/17/5/887
+http://erj.ersjournals.com/cgi/content/full/22/4/668
+http://erj.ersjournals.com/cgi/content/full/23/3/446
+http://es.epa.gov/techinfo/specific/proj-sum.html
+http://esb.ie/main/news_events/press_releases.jsp
+http://escape.news.com.au/story/0,9142,12431842-28017,00.html
+http://esdcd-news.gsfc.nasa.gov/2004.Summer/03_data_drives.html
+http://eserver.org/bs/17/Johnson.html
+http://eserver.org/bs/19/Alcalay.html
+http://eserver.org/bs/19/Diamond.html
+http://eserver.org/bs/19/Salzmann.html
+http://eserver.org/bs/24/lockard.html
+http://eserver.org/bs/39/mosher.html
+http://eserver.org/history/flint-sit-down.txt
+http://eserver.org/philosophy/aesthetic-excellence.txt
+http://eserver.org/race/toward-a-theory-of-racism.html
+http://eserver.org/thoreau/walden08.html
+http://eserver.org/thoreau/walden1c.html
+http://eshop.msn.com/fts/ftsresults.aspx?searchText=&fcId=4&pcId=15515&rmerchId=3068
+http://eshop.msn.com/marketplace.aspx?mpId=15395&catId=230&pmpType=0
+http://esl.about.com/library/speaking/bltelephone_role.htm
+http://esl.about.com/library/weekly/aa031802c.htm
+http://esl.fis.edu/students/teanotes/read.htm
+http://espace.lis.curtin.edu.au/view/subjects/320000.html
+http://espn.go.com/
+http://espn.go.com/TrainingRoom/tylenol/1575839.html
+http://espn.go.com/classic/biography/s/Affirmed_Alydar.html
+http://espn.go.com/classic/biography/s/Ashe_Arthur.html
+http://espn.go.com/classic/biography/s/Bednarik_Chuck.html
+http://espn.go.com/classic/obit/s/2005/0602/2074322.html
+http://espn.go.com/gen/womenandsports/020620faces.html
+http://espn.go.com/gog04/target/s/04_target_archery_final.html
+http://espn.go.com/mlb/columns/stark_jayson/1434058.html
+http://espn.go.com/ncb/ncaatourney01/teams/278.html
+http://espn.go.com/ncf/columns/forde_pat/1271962.html
+http://espn.go.com/outdoors/conservation/s/c_fea_QDMA_spikes_management_Thomas.html
+http://espn.go.com/outdoors/fishing/s/f_map_05_PA_East_Licking_Creek.html
+http://espn.go.com/outdoors/sportingdogs/s/sd_fea_VP_travel_options_PDJ.html
+http://espn.go.com/outdoors/tips/s/h_fea_04_elk_calling_FHN.html
+http://espn.go.com/page2/s/list/2001/moments.html
+http://espn.go.com/page2/s/list/readers/dirtiest/players.html
+http://espn.go.com/page2/tvlistings/show126transcript.html
+http://espn.go.com/rpm/wc/2001/1012/1263034.html
+http://espn.go.com/sportscentury/features/00014063.html
+http://esr.ibiblio.org/index.php?cat=6
+http://esr.ibiblio.org/index.php?m=200409
+http://esr.ibiblio.org/index.php?p=184
+http://esr.ibiblio.org/index.php?p=47
+http://ess.nrcan.gc.ca/esic/encounters/index_e.php
+http://ess.nrcan.gc.ca/intl/industry_e.php
+http://essayedge.com/college/admissions/speakout/oxford.shtml
+http://essaypage.com/categories/139-010.html
+http://essenes.net/king.html
+http://essexma.lionwap.org/
+http://essiac-info.org/Pets/pets2.html
+http://estonia.usembassy.gov/rice.php
+http://esty.ancients.info/imit/imitSS.html
+http://esvc001460.wic011u.server-web.com/Abstracts/Agllj/Vol10.html
+http://etacar.umn.edu/etainfo/cycle/
+http://etd.caltech.edu/etd/available/etd-04172002-150548/
+http://etd.circa.ufl.edu/present/template-intromac-wordx.html
+http://eteamz.active.com/MTVIEW/news/index.cfm?cat=226036
+http://eteamz.active.com/MaryknollSpartansVBall/
+http://eteamz.active.com/basketball/instruction/tips/coach.cfm/Coach%20Vic's%20Instruction%20and%20Advice/
+http://eteamz.active.com/basketball/instruction/tips/tip.cfm/1658/
+http://eteamz.active.com/gcvbc/
+http://eteamz.active.com/maltbyponybaseball/
+http://eteamz.active.com/northnaples/
+http://eteamz.active.com/northnaples/index.cfm?showreg=1
+http://eteamz.active.com/tcyba/
+http://etext.lib.virginia.edu/cgi-local/DHI/dhi.cgi?id=dv1-66
+http://etext.lib.virginia.edu/cgi-local/DHI/dhi.cgi?id=dv2-34
+http://etext.lib.virginia.edu/cgi-local/DHI/dhiana.cgi?id=dv2-34
+http://etext.lib.virginia.edu/etcbin/toccer-reldem?id=WasReli.sgm&images=images/modeng&data=/texts/english/modeng/parsed&tag=public&part=all
+http://etext.lib.virginia.edu/railton/enlt214m/ltpaper3.html
+http://etext.library.adelaide.edu.au/b/borrow/george/lavengro/chapter67.html
+http://etext.library.adelaide.edu.au/d/dickens/charles/d54ou/mf20.html
+http://etext.library.adelaide.edu.au/f/frazer/james/golden/chapter4.html
+http://etext.library.adelaide.edu.au/g/galsworthy/john/white/chapter26.html
+http://etext.library.adelaide.edu.au/g/gorky/maksim/g66m/chapter19.html
+http://etext.library.adelaide.edu.au/g/gorky/maksim/g66tr/chapter1.html
+http://etext.library.adelaide.edu.au/m/malthus/thomas/m26p/part16.html
+http://etext.library.adelaide.edu.au/m/maupassant/guy/m45s/part8.html
+http://etext.library.adelaide.edu.au/o/orwell/george/o79e/part31.html
+http://etext.library.adelaide.edu.au/o/orwell/george/o79r/chapter4.html
+http://etext.library.adelaide.edu.au/o/orwell/george/o79r/chapter5.html
+http://etext.library.adelaide.edu.au/s/s52s/part20.html
+http://etext.library.adelaide.edu.au/s/s87l/chapter3.html
+http://etext.library.adelaide.edu.au/t/tench_watkin/settlement/chapter9.html
+http://etext.library.adelaide.edu.au/t/trollope/anthony/barchester/chapter17.html
+http://etext.library.adelaide.edu.au/t/trollope/anthony/belton/chapter27.html
+http://etext.library.adelaide.edu.au/t/trollope/anthony/prime/chapter50.html
+http://etext.library.adelaide.edu.au/t/trollope/anthony/prime/chapter58.html
+http://etext.library.adelaide.edu.au/t/trollope/anthony/rachel/chapter9.html
+http://etext.library.adelaide.edu.au/w/wells/hg/love/chapter15.html
+http://etext.virginia.edu/latin/ovid/trans/Metamorph11.htm
+http://etherbods.com/health/health16.shtml
+http://ethernet.industrial-networking.com/origarticles/i01_ieee1451rvness.asp
+http://etherzone.com/2001/proc121101.shtml
+http://etherzone.com/2005/scall012405.shtml
+http://ethics.csc.ncsu.edu/risks/security/network/study.html
+http://ethics.od.nih.gov/meetings/03-01-07m.htm
+http://ethics.sandiego.edu/Applied/Euthanasia/
+http://ethics.sandiego.edu/LMH/Papers/Introduction%20to%20Reproductive%20Technologies.html
+http://ethics.wa.gov/newsletters/Summer2004.htm
+http://ethiopundit.blogspot.com/2005/01/malthus-hobbes-and-red-queen.html
+http://ethnonet.gold.ac.uk/chapter.html
+http://etma-milwaukee.org/content/view/11/25/
+http://etvcookbook.org/tv_dinners/earthur.html
+http://etymonline.com/columns/rape.htm
+http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0787949329.html
+http://eug.gigex.com/mmoguide/article.asp?aID=356
+http://euler.slu.edu/Dept/SuccessinMath.html
+http://euroblogreview.blogspot.com/
+http://europa-eu-un.org/articles/it/article_4186_it.htm
+http://europa.eu.int/abc/12lessons/index13_en.htm
+http://europa.eu.int/abc/12lessons/index1_en.htm
+http://europa.eu.int/abc/12lessons/index5_en.htm
+http://europa.eu.int/abc/doc/off/rg/en/2004/rg32.htm
+http://europa.eu.int/abc/history/index_en.htm
+http://europa.eu.int/comm/commission_barroso/mandelson/speeches_articles/temp_icentre.cfm?temp=artpm012_en
+http://europa.eu.int/comm/commission_barroso/mandelson/speeches_articles/temp_icentre.cfm?temp=sppm038_en
+http://europa.eu.int/comm/competition/international/3a04aen.html
+http://europa.eu.int/comm/competition/state_aid/scoreboard/indicators/k14.html
+http://europa.eu.int/comm/development/body/country/country_home_en.cfm?cid=bi&lng=en&status=new
+http://europa.eu.int/comm/development/body/country/country_home_en.cfm?cid=ug&lng=en&status=new
+http://europa.eu.int/comm/dgs/education_culture/index_en.htm
+http://europa.eu.int/comm/dgs/education_culture/publ/educ-form-eurydice_en.html
+http://europa.eu.int/comm/dgs/education_culture/publ/educ-form_en.html
+http://europa.eu.int/comm/dgs/health_consumer/library/pub/cv/cv003/cv003-02_en.html
+http://europa.eu.int/comm/employment_social/equal/practical-examples/entrep-exzept_en.cfm
+http://europa.eu.int/comm/employment_social/local_employment/lessons_en.htm
+http://europa.eu.int/comm/employment_social/news/2005/jan/industrial_relations_2004_report_en.html
+http://europa.eu.int/comm/employment_social/soc-dial/csr/pdf2/082-SPTUNAT_TUC_UK_011217_en.htm
+http://europa.eu.int/comm/employment_social/soc-dial/csr/pdf2/092-NGOEU_Solidar_EU_011213_en.htm
+http://europa.eu.int/comm/energy/en/achieved.htm
+http://europa.eu.int/comm/energy/en/pfs_sure_en.html
+http://europa.eu.int/comm/enlargement/docs/newsletter/latest_weekly.htm
+http://europa.eu.int/comm/enlargement/docs/research/sept2003.htm
+http://europa.eu.int/comm/enlargement/hungary/
+http://europa.eu.int/comm/enlargement/report_11_00/
+http://europa.eu.int/comm/enterprise/enterprise_policy/gov_relations/canada_regul_coop_dialogue/eu_can_reg_dialogue.htm
+http://europa.eu.int/comm/enterprise/funding/grants/themes_2005/calls_prop_2005.htm
+http://europa.eu.int/comm/enterprise/newapproach/standardization/harmstds/reflist.html
+http://europa.eu.int/comm/environment/aarhus/
+http://europa.eu.int/comm/environment/air/nebei_workshop/bio.htm
+http://europa.eu.int/comm/environment/climat/glossary.htm
+http://europa.eu.int/comm/environment/crime/
+http://europa.eu.int/comm/environment/ippc/
+http://europa.eu.int/comm/environment/news/enlarg/news7.htm
+http://europa.eu.int/comm/environment/pubs/studies.htm
+http://europa.eu.int/comm/europeaid/projects/eidhr/elections_en.htm
+http://europa.eu.int/comm/external_relations/armenia/intro/
+http://europa.eu.int/comm/external_relations/asem/asem_summits/asem2_fin.htm
+http://europa.eu.int/comm/external_relations/asem_ipap_vie/texts/ieg_3.htm
+http://europa.eu.int/comm/external_relations/ca/
+http://europa.eu.int/comm/external_relations/cfsp/news/memo03_192.htm
+http://europa.eu.int/comm/external_relations/cfsp/news/sp02_643.htm
+http://europa.eu.int/comm/external_relations/cfsp/sanctions/
+http://europa.eu.int/comm/external_relations/euromed/news/memo04_275.htm
+http://europa.eu.int/comm/external_relations/la/
+http://europa.eu.int/comm/external_relations/maldives/intro/
+http://europa.eu.int/comm/external_relations/moldova/intro/
+http://europa.eu.int/comm/external_relations/news/patten/sp01_331.htm
+http://europa.eu.int/comm/external_relations/news/patten/sp01_488.htm
+http://europa.eu.int/comm/external_relations/news/patten/speech_00_360.htm
+http://europa.eu.int/comm/external_relations/news/prodi/sp04_276.htm
+http://europa.eu.int/comm/external_relations/paraguay/intro/
+http://europa.eu.int/comm/external_relations/russia/intro/
+http://europa.eu.int/comm/external_relations/sri_lanka/intro/
+http://europa.eu.int/comm/external_relations/ukraine/intro/
+http://europa.eu.int/comm/fisheries/news_corner/discours/speech27_en.htm
+http://europa.eu.int/comm/fisheries/news_corner/discours/speech58_en.htm
+http://europa.eu.int/comm/fisheries/news_corner/discours/speech68_en.htm
+http://europa.eu.int/comm/fisheries/news_corner/doss_inf/ifop4_en.htm
+http://europa.eu.int/comm/fisheries/reform/index_en.htm
+http://europa.eu.int/comm/food/fs/sc/scf/out18_en.html
+http://europa.eu.int/comm/food/fs/sc/ssc/out10_en.html
+http://europa.eu.int/comm/health/ph_risk/committees/sct/docshtml/sct_out87_en.htm
+http://europa.eu.int/comm/ipg/rule7/rule7_en.htm
+http://europa.eu.int/comm/public_opinion/archives/europinion_cts/eo5/eo5_en.htm
+http://europa.eu.int/comm/publications/booklets/move/19/txt_en.htm
+http://europa.eu.int/comm/reform/2002/summary_chapter6_en.html
+http://europa.eu.int/comm/research/environment/themes/article_1357_en.htm
+http://europa.eu.int/comm/research/growth/gcc/projects/in-action-maritime.html
+http://europa.eu.int/comm/research/industrial_technologies/articles/article_2289_en.html
+http://europa.eu.int/comm/research/industrial_technologies/articles/article_355_en.html
+http://europa.eu.int/comm/research/industrial_technologies/lists/list_114_en.html
+http://europa.eu.int/comm/research/industrial_technologies/print.cfm?file=/comm/research/industrial_technologies/articles/article_355_en.html
+http://europa.eu.int/comm/research/infocentre/article_en.cfm?id=/comm/space/news/article_1583_en.html&item=Information%20society
+http://europa.eu.int/comm/research/news-centre/en/agr/01-03-agr04.html
+http://europa.eu.int/comm/research/press/2003/pr0710en.html
+http://europa.eu.int/comm/research/quality-of-life/gmo/04-food/04-01-project.html
+http://europa.eu.int/comm/research/science-society/science-communication/mediarelations1_en.htm
+http://europa.eu.int/comm/space/news/article_1583_en.html
+http://europa.eu.int/comm/space/off_docs_en.html
+http://europa.eu.int/comm/taxation_customs/customs/procedural_aspects/export/procedure/index_en.htm
+http://europa.eu.int/comm/trade/csc/med08_en.htm
+http://europa.eu.int/comm/trade/issues/bilateral/countries/korea/index_en.htm
+http://europa.eu.int/comm/trade/issues/bilateral/regions/mercosur/index_en.htm
+http://europa.eu.int/comm/trade/issues/newround/eu_wto/legis/ifwtos.htm
+http://europa.eu.int/comm/trade/issues/newround/pr100504_en.htm
+http://europa.eu.int/comm/trade/miti/gov_proc/transpa2.htm
+http://europa.eu.int/comm/youth/program/guide/action5_en.html
+http://europa.eu.int/constitution/en/fptoc4_en.htm
+http://europa.eu.int/constitution/en/ptoc4_en.htm
+http://europa.eu.int/constitution/en/ptoc67_en.htm
+http://europa.eu.int/en/record/mt/final.html
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=CELEX:32005Q0520(01):EN:HTML
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=CELEX:51998AP0490:EN:NOT
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=CONSLEG:1992L0109:20010301:EN:PDF
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=CONSLEG:1999R1621:20010927:EN:PDF
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=OJ:C:2000:330E:0168:0168:EN:PDF
+http://europa.eu.int/eur-lex/lex/LexUriServ/LexUriServ.do?uri=OJ:C:2003:092E:0050:0052:EN:PDF
+http://europa.eu.int/growthandjobs/areas/fiche01_en.htm
+http://europa.eu.int/information_society/activities/sip/index_en.htm
+http://europa.eu.int/information_society/edutra/index_en.htm
+http://europa.eu.int/information_society/eeurope/2005/all_about/broadband/bb_content/text_en.htm
+http://europa.eu.int/information_society/industry/index_en.htm
+http://europa.eu.int/information_society/policy/nextweb/grid/index_en.htm
+http://europa.eu.int/information_society/qualif/health/index_en.htm
+http://europa.eu.int/information_society/topics/ecomm/highlights/current_spotlights/art_7_task_force/page1/index_en.htm
+http://europa.eu.int/information_society/topics/international/regulatory/eeuropeplus/cc_links/index_en.htm
+http://europa.eu.int/institutions/decision-making/index_en.htm
+http://europa.eu.int/newsletter/index_en.htm
+http://europa.eu.int/newsletter/print_index_en.htm
+http://europa.eu.int/pol/rights/overview_en.htm
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=IP/03/1024&format=HTML&aged=1&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=IP/03/1702&format=HTML&aged=1&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=IP/05/482&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=IP/98/1124&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=MEMO/03/149&format=HTML&aged=1&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=MEMO/05/216&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/02/376&format=HTML&aged=0&language=en&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/03/601&format=HTML&aged=0&language=en&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/178&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/232&format=HTML&aged=0&language=en&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/308&type=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/311&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/333&format=HTML&aged=0&language=en&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/345&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/347&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/347&format=HTML&aged=0&language=EN&guiLanguage=fr
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/361&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/365&format=HTML&aged=0&language=EN&guiLanguage=en
+http://europa.eu.int/rapid/pressReleasesAction.do?reference=SPEECH/05/365&format=HTML&aged=0&language=en&guiLanguage=en
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/01/1617%7C0%7CRAPID&lg=EN
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/03/1005%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/03/1752%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/03/1762%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/03/411%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/04/508%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=IP/04/625%7C0%7CRAPID&lg=EN&display=
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=SPEECH/00/158%7C0%7CAGED&lg=FR
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=SPEECH/00/295%7C0%7CRAPID&lg=EN
+http://europa.eu.int/rapid/start/cgi/guesten.ksh?p_action.gettxt=gt&doc=SPEECH/98/211%7C0%7CRAPID&lg=EN
+http://europa.eu.int/scadplus/leg/en/lvb/l21168.htm
+http://europa.eu.int/tsunami/article01_en.htm
+http://europa.eu.int/yourvoice/results/remedies_org/index_en.htm
+http://europe.businessweek.com/magazine/content/05_07/b3920081_mz054.htm
+http://europe.osha.eu.int/topics/
+http://europeanworldgallery.com/matisse.html
+http://eurosport.com/uefacup/
+http://evatt.labor.net.au/letters/
+http://evatt.labor.net.au/news/159.html
+http://evatt.labor.net.au/news/32.html
+http://evatt.labor.net.au/publications/papers/14.html
+http://evatt.labor.net.au/publications/papers/97.html
+http://eve-tushnet.blogspot.com/
+http://evelynrodriguez.typepad.com/crossroads_dispatches/2004/09/east_meets_west_2.html
+http://events.purina.com/cal/index.aspx
+http://events.purina.com/dogs/events/team.aspx
+http://everquest.allakhazam.com/db/quest.html?quest=1732
+http://everquest.allakhazam.com/db/zones.html?zstrat=64
+http://everquestonlineadventures.com/
+http://everquestonlineadventures.station.sony.com/
+http://everyhit.com/record4.html
+http://everyone.is.not.theuseless.com/archives/2003_04.html
+http://everything.basecamphq.com/
+http://everything.basecamphq.com/archives/000152.php
+http://everything.basecamphq.com/archives/000300.php
+http://everything.basecamphq.com/archives/cat_membershipbilling.php
+http://everything.basecamphq.com/archives/cat_new_features_updates_fixes.php
+http://everything.blockstackers.com/index.pl?node_id=104744&lastnode_id=11081
+http://everything.blockstackers.com/index.pl?node_id=1697134
+http://everything2.com/index.pl?node=A%20Rationalist%20Defence%20of%20Faith
+http://everything2.com/index.pl?node=The%20majority%20of%20X%20support%20Y
+http://everything2.com/index.pl?node_id=1363586
+http://everything2.com/index.pl?node_id=1438908&lastnode_id=1694226
+http://everything2.com/index.pl?node_id=528540
+http://everythingelse.listings.ebay.ca/_W0QQfnuZ1QQfsooZ1QQfsopZ17QQloglZ1QQsacatZ99QQsocmdZListingItemList
+http://everythingsruined.typepad.com/
+http://everytomorrow.org/archives/2001/11/
+http://everytomorrow.org/archives/2004/10/07/group-prayer-other-spiritual-frustrations/
+http://evolt.org/article/Inside_the_Looking_Glass_evolt_org_turns_1/25/626/
+http://evolution.anat.ucl.ac.uk/history/LeGrosClark.htm
+http://evolution.genetics.washington.edu/phylip/doc/consense.html
+http://evonet.lri.fr/evoweb/membership/node_record.php?id=1176
+http://evonet.lri.fr/evoweb/news_events/news_features/article.php?id=125
+http://ewateronline.net/softner.htm
+http://ewhs.wcpss.net/hotnews.php
+http://ex-parrot.com/~chris/random/time-lapse/
+http://exact-me.org/EU/
+http://exactlyxlikexyou.blogdrive.com/
+http://excalibur.apache.org/framework/guide-cop-in-avalon.html
+http://exchange.co-nect.net/Teleprojects/project/?pid=5&session=bj902cfjdWF&cid=2
+http://exchanges.state.gov/education/engteaching/ifettips.htm
+http://exchanges.state.gov/forum/journal/civ3activities.htm
+http://exchanges.state.gov/forum/journal/civ8activities.htm
+http://exchanges.state.gov/forum/journal/env3appendix.htm
+http://exchanges.state.gov/forum/vols/vol31/no1/p42.htm
+http://exchanges.state.gov/forum/vols/vol31/no3/p14.htm
+http://exchanges.state.gov/forum/vols/vol31/no3/p22.htm
+http://exchanges.state.gov/forum/vols/vol31/no4/p12.htm
+http://exchanges.state.gov/forum/vols/vol32/no1/p8.htm
+http://exchanges.state.gov/forum/vols/vol32/no2/p38.htm
+http://exchanges.state.gov/forum/vols/vol34/no1/p37.htm
+http://exchanges.state.gov/forum/vols/vol34/no1/p42.htm
+http://exchanges.state.gov/forum/vols/vol34/no1/p43.htm
+http://exchanges.state.gov/forum/vols/vol34/no3/p55.htm
+http://exchanges.state.gov/forum/vols/vol34/no3/p94.htm
+http://exchanges.state.gov/forum/vols/vol35/no1/p2.htm
+http://exchanges.state.gov/forum/vols/vol35/no2/p44.htm
+http://exchanges.state.gov/forum/vols/vol35/no3/p50.htm
+http://exchanges.state.gov/forum/vols/vol35/no4/p42.htm
+http://exchanges.state.gov/forum/vols/vol36/no1/p14.htm
+http://exchanges.state.gov/forum/vols/vol36/no3/p27.htm
+http://exchanges.state.gov/forum/vols/vol36/no3/p30.htm
+http://exchanges.state.gov/forum/vols/vol36/no4/p18.htm
+http://exchanges.state.gov/forum/vols/vol37/no1/p22.htm
+http://exchanges.state.gov/forum/vols/vol37/no4/p12.htm
+http://exchanges.state.gov/forum/vols/vol37/no4/p16.htm
+http://exchanges.state.gov/forum/vols/vol38/no1/p34.htm
+http://exchanges.state.gov/forum/vols/vol38/no2/p28.htm
+http://exchanges.state.gov/forum/vols/vol38/no2/p40.htm
+http://exchanges.state.gov/forum/vols/vol39/no1/p46.htm
+http://exchanges.state.gov/forum/vols/vol39/no4/p10.htm
+http://exchanges.state.gov/iep/lieberman0531.htm
+http://excite.nonstopsports.com/getReport_NSS.php?size=595&sport=pftball&type=news&name=T0116195552
+http://exclusiivlee.bravejournal.com/entry/7918
+http://execed.wharton.upenn.edu/appform.cfm?program=EM1
+http://execed.wharton.upenn.edu/appform.cfm?program=ENW
+http://execed.wharton.upenn.edu/appform.cfm?program=FEB
+http://execed.wharton.upenn.edu/appform.cfm?program=GAP
+http://exercise.about.com/cs/exbeginners/a/commit.htm
+http://exercise.lifetips.com/
+http://exercise.lifetips.com/RscNLV.asp__Q__year__E__2000__A__month__E__11__A__day__E__3
+http://exercise.lifetips.com/cat/6003/planning-your-exercise/
+http://exilefrombabyville.typepad.com/exile_from_babyville/
+http://exim.indiamart.com/act-regulations/fema-2000-v.html
+http://exim.indiamart.com/sic-codes/d23-finished-products.html
+http://exim.indiamart.com/sisi-network/sisi-allahabad.html
+http://exim.indiamart.com/sisi-network/sisi-hubli.html
+http://exim.indiamart.com/ssi-policies/enterpreneur-development.html
+http://exoticmyanmar.com/handicraft-travel-agency-myanmar.htm
+http://exoticpets.about.com/cs/ferrets/a/ferretpettopten.htm
+http://experience.gwsae.org/programcalendar/index.cfm?mo=3&yr=2005
+http://experimentalphilosophy.typepad.com/experimental_philosophy/free_will/
+http://expertanswercenter.techtarget.com/eac/knowledgebaseCategory/0,295197,sid63_tax296923_idx0_off25,00.html
+http://expertanswercenter.techtarget.com/eac/knowledgebaseCategory/0,295197,sid63_tax296923_idx0_off50,00.html
+http://expertpages.com/news/cause_contributing_factors_traffic_accidents.htm
+http://experts.about.com/q/1479/3841284.htm
+http://experts.about.com/q/2056/3635180.htm
+http://experts.about.com/q/2056/555819.htm
+http://experts.about.com/q/677/3869606.htm
+http://experts.about.com/q/82/3689876.htm
+http://experts.about.com/q/857/3212710.htm
+http://experts.about.com/q/958/3484278.htm
+http://experts.universalclass.com/whitepinek
+http://exploration.nasa.gov/centennialchallenge/cc_index.html
+http://exploration.vanderbilt.edu/news/news_mole.htm
+http://explorers.whyte.com/ball.htm
+http://explorers.whyte.com/row.htm
+http://explorers.whyte.com/sf/sfsourcebk.htm
+http://expn.go.com/expn/story?pageName=evntschedule2
+http://expoweb2.pubdyn.com/Attendance/feature145.htm
+http://expoweb2.pubdyn.com/Best_Practices/feature145.htm
+http://expoweb2.pubdyn.com/Marketing_Promotions/feature145.htm
+http://expoweb2.pubdyn.com/Planning_and_Budgeting/feature145.htm
+http://extempore.livejournal.com/69263.html
+http://extension.agron.iastate.edu/immag/info/talkingpts.html
+http://extension.ucdavis.edu/aboutus.html
+http://extensionroom.mozdev.org/more-info/clearhttpauth
+http://extfile.bah.com/livelink/livelink/126123/?func=doc.Fetch&nodeid=126123
+http://extlab1.entnem.ufl.edu/olustee/new.html
+http://extoxnet.orst.edu/newsletters/n111_91.htm
+http://extoxnet.orst.edu/tibs/partperm.htm
+http://extra.upmc.com/Events.htm
+http://extranet.gurustudio.com/news.php
+http://extranet6.kent.gov.uk/kcc/ss/better_homes/project_scope.aspx
+http://extras.denverpost.com/books/chcracker0123.htm
+http://extras.denverpost.com/books/chtip0311.htm
+http://extras.denverpost.com/books/chwalk1107.htm
+http://eycb.coe.int/compass/en/chapter_1/1_4.html
+http://eycb.coe.int/compass/en/chapter_2/2_44.html
+http://eycb.coe.int/compass/en/chapter_2/2_47.html
+http://eyp.ph/complete.jsp?page=54&c=Aquaculture+equipment+and+supplies&p=r
+http://eyp.ph/complete.jsp?page=54&c=Basketball+equipment&p=r
+http://eyp.ph/complete.jsp?page=54&c=Food+delivery&p=r
+http://eyp.ph/complete.jsp?page=54&c=Material+handling+equipment-repairing&p=r
+http://eyp.ph/complete.jsp?page=54&c=Pizza&p=r
+http://eyp.ph/complete.jsp?page=54&c=Powder+coating-contractors&p=r
+http://ezinearticles.com/
+http://ezinearticles.com/?15-Care-Hair-Myths---The-Truth-and-The-Lies&id=13092
+http://ezinearticles.com/?1st-Textbook-on-Sleep-Psychiatry&id=9761
+http://ezinearticles.com/?3-Steps-To-Immediately-Increase-Sales&id=12384
+http://ezinearticles.com/?7-Questions-To-Ask-Yourself-BEFORE-Staring-A-Business-Blog&id=10852
+http://ezinearticles.com/?911-Conspiracy-Theory-Revealed-During-Coffee-Shop-Conversation&id=39951
+http://ezinearticles.com/?A-Winner-Never-Uses-Chance-or-Luck-to-Win&id=44506
+http://ezinearticles.com/?Bikini-Waxing:-Making-the-Move-From-Hair-to-Brazilian-Bikini-Bare&id=39535
+http://ezinearticles.com/?Book-Summary:--What-Is-The-Emperor-Wearing?&id=13146
+http://ezinearticles.com/?Commercial-Income-Property-Financing:-Part-1-of-3&id=42944
+http://ezinearticles.com/?Consider-the-Alternative&id=647
+http://ezinearticles.com/?Creating-Customer-Awareness-By-Asking-The-Right-Questions&id=6670
+http://ezinearticles.com/?Dealing-With-How-Would-You...?-Questions&id=10843
+http://ezinearticles.com/?Did-You-Let-Your-Piggy-Bank-Get-Away?&id=10239
+http://ezinearticles.com/?Dog-Clothes&id=9922
+http://ezinearticles.com/?GOD-1.0:-The-Universal-OS&id=3454
+http://ezinearticles.com/?How-I-Spent-my-Summer-Vacation&id=10568
+http://ezinearticles.com/?Human-Hair-Extensions-Create-Beautiful-Long-Hair-Styles-Instantly&id=5847
+http://ezinearticles.com/?Reaching-For-Star-Performer-Status:--How-Do-You-Rate?&id=11713
+http://ezinearticles.com/?Sussex-County-Delaware-Beach-Area-Towns-and-Villages-Are-Unique-and-Historic&id=3746
+http://ezinearticles.com/?Sussex-County-Delaware-Beach-Area-Towns-and-Villages-are-Unique-and-Historic!&id=3134
+http://ezinearticles.com/?cat=Health-and-Fitness:Fitness-Equipment
+http://ezinearticles.com/?cat=Women's-Interests
+http://ezinearticles.com/?cat=Women's-Interests:
+http://ezinearticles.com/?id=3746
+http://ezra.cornell.edu/posting.php?timestamp=974782800
+http://ezraklein.typepad.com/
+http://ezraklein.typepad.com/blog/2005/04/the_health_of_n_1.html
+http://ezraklein.typepad.com/blog/2005/06/gulag_gulag_gul.html
+http://ezraklein.typepad.com/blog/health_of_nations/
+http://ezraklein.typepad.com/blog/politics_of_choice/
+http://fablog.ehrensteinland.com/archives/000123.shtml
+http://faces.sgguide.hop.clickbank.net/
+http://faces.stanford.edu/programs/conference2005/itinerary.html
+http://facpub.stjohns.edu/~ganterg/sjureview/vol1-2/wittman.html
+http://facstaff.uww.edu/cottlec/QArchive/Primer1.html
+http://factfinder.census.gov/home/en/epss/glossary_s.html
+http://factoid.lavoice.org/heavy/index.php?m=200410
+http://faculty-staff.ou.edu/L/Joshua.M.Landis-1/syriablog/
+http://faculty-staff.ou.edu/L/Joshua.M.Landis-1/syriablog/2005/04/news-round-up.htm
+http://faculty.bbc.edu/rdecker/unicode.htm
+http://faculty.clintoncc.suny.edu/faculty/Michael.Gregory/files/Bio%20101/Bio%20101%20Lectures/Meiosis/meiosis.htm
+http://faculty.ed.uiuc.edu/g-cziko/wm/02.html
+http://faculty.ed.umuc.edu/~swalsh/Math%20Articles/CosineDiff.html
+http://faculty.fortlewis.edu/LANCASTER_K/kurt/films.htm
+http://faculty.fullerton.edu/rlippa/eyestudy/eyes_total5.htm
+http://faculty.fuqua.duke.edu/daweb/lexicon.htm
+http://faculty.fuqua.duke.edu/daweb/news9603.htm
+http://faculty.fuqua.duke.edu/decision_sciences/dsphd/programs.htm
+http://faculty.goucher.edu/eng211/Chaucer--CT,%20WoB.htm
+http://faculty.haas.berkeley.edu/levine/cheap_advice.html
+http://faculty.haas.berkeley.edu/levine/workplace_editorial.html
+http://faculty.insead.edu/weeks/
+http://faculty.msmary.edu/envirothon/pressroom.htm
+http://faculty.ncwc.edu/toconnor/jusgrad.htm
+http://faculty.pittstate.edu/~knichols/realist2.html
+http://faculty.plattsburgh.edu/richard.robbins/legacy/hunger_readings.htm
+http://faculty.southwest.tn.edu/mbeasley/SYLLABUSExcepChild.htm
+http://faculty.southwest.tn.edu/mbeasley/SYLLABUSchildPsyc.htm
+http://faculty.stritch.edu/breynolds/mt120_03/syllabus_120.html
+http://faculty.uca.edu/~march/bio1/scimethod/lab2_intro_f02.htm
+http://faculty.uccb.ns.ca/philosophy/kbryson/rulesfor.htm
+http://faculty.umf.maine.edu/~sharkey/telling.black.htm
+http://faculty.uwb.edu/danby/kalecki/Kaleckian.htm
+http://faculty.vassar.edu/juweisen/160/addams.html
+http://faculty.virginia.edu/surfacescience/educationlinks.html
+http://faculty.washington.edu/bonjour/463/VII-CONSCIOUSNESS-outline.htm
+http://faculty.washington.edu/chudler/fair.html
+http://faculty.washington.edu/chudler/rightl.html
+http://faculty.washington.edu/chudler/statistics.html
+http://faculty.washington.edu/dchinn/writing.htm
+http://faculty.washington.edu/gregoryj/strike/wright.htm
+http://faculty.washington.edu/gregoryj/uwunions/colasurdo-1199.htm
+http://faculty.washington.edu/jbs/itrans/kinstlinger.htm
+http://faculty.washington.edu/jjc/Info/portfolio.html
+http://faculty.washington.edu/jwh/samantsum.htm
+http://faculty1.coloradocollege.edu/~jbendikkeymer/Jeremy's%20webfiles/Social%20Critique.html
+http://facultysenate.binghamton.edu/2005-2006/05032005Minutes.htm
+http://facweb.furman.edu/dept/psychology/brewerbiography.htm
+http://faerie.monstrous.com/faerie_f-m.htm
+http://faeryface.diaryland.com/040401_91.html
+http://fafblog.blogspot.com/2004_07_04_fafblog_archive.html
+http://fafblog.blogspot.com/2004_09_19_fafblog_archive.html
+http://fafblog.blogspot.com/2005_01_09_fafblog_archive.html
+http://fairchance.civilrights.org/real_people/psa_txt.html
+http://fairchance.civilrights.org/research_center/details.cfm?id=18075
+http://fairchance.civilrights.org/research_center/details.cfm?id=18076
+http://fairchance.civilrights.org/research_center/details.cfm?id=18105
+http://fairchance.civilrights.org/research_center/details.cfm?id=26248
+http://fairchance.civilrights.org/research_center/details.cfm?id=26289
+http://fairchance.civilrights.org/tools/printer_friendly.cfm?id=18073&print=true
+http://faireconomy.org/dividend/comments.html
+http://fairs.need.bg/en/
+http://fairshot.typepad.com/fairshot/2004/11/tax_as_a_weapon.html
+http://fairuse.stanford.edu/commentary_and_analysis/2003_07_minow.html
+http://fairuse.stanford.edu/commentary_and_analysis/2004_03_kasunic.html
+http://fairuse.stanford.edu/primary_materials/cases/michigan_document_services/051796music.html
+http://faizateachesyouarabic.blogspot.com/
+http://falcon.arts.cornell.edu/dg78/100.3/documents/ira2.htm
+http://falcon.jmu.edu/~ramseyil/disciplinebib.htm
+http://falconred.llarian.net/archives/2005_04.html
+http://fallenangelreviews.com/Author/JessMichaels.htm
+http://fallinggrace.com/index.php?page=11
+http://fallingsky.blogs.com/falling_sky/2004/08/walking_in_the_.html
+http://family-reunion.com/activity.htm
+http://family.org/cforum/fosi/marriage/FAQs/a0026916.cfm
+http://family.samhsa.gov/set/illegal_drugs/drugs.aspx
+http://familyclassroom.net/hsboys/articles/25.html
+http://familydoctor.org/037.xml
+http://familydoctor.org/100.xml
+http://familydoctor.org/115.xml
+http://familydoctor.org/197.xml
+http://familydoctor.org/781.xml
+http://familydoctor.org/781.xml?printxml
+http://familyfun.go.com/arts-and-crafts/season/feature/doca0403_teachergifts/doca0403_teachergifts8.html
+http://familyhistoryfun.com/sandoz1/
+http://familymagazines.media24.co.za/drum_value.htm
+http://familymagazines.media24.co.za/huisgenoot_value.htm
+http://familymagazines.media24.co.za/tv_value.htm
+http://familyministries.gc.adventist.org/Resources/sermon_collection/family-god_of_second_time.htm
+http://familyscreenscene.allinfoabout.com/trivia/cbstart.html
+http://famous.adoption.com/famous/church-of-jesus-christ-of-latter-day-saints.html
+http://fampra.oupjournals.org/cgi/content/full/22/1/132
+http://famulus.msnbc.com/famulusspt/ap06-23-181734.asp?id=&spt=nba
+http://famulus.msnbc.com/famulusspt/apmegasports06-28-133236.asp?spt=SPGA
+http://famweb.nwcg.gov/pocketcards/instructions.htm
+http://fanaticcook.blogspot.com/2005/03/equal-time-in-salmon-aisle.html
+http://fanboyrampage.blogspot.com/
+http://fanfiction.mugglenet.com/terms.html
+http://fantasyfilmleague.com/page.php?page_id=261
+http://fantasygames.sportingnews.com/mls/fantasy/about/game_rules.html
+http://fantasysports.aol.com/fb/article.cfm/ID.3494
+http://fantasysports.yahoo.com/analysis/news?slug=bf-bigboard-basketball&prov=yhoo&type=lgns&league=fantasy/nba
+http://fantasysports.yahoo.com/analysis/news?slug=mh-nfcwest_05previews&prov=yhoo&type=lgns&league=fantasy/nfl
+http://fantes.com/marcato.htm
+http://fao.ucsd.edu/Employment_01.htm
+http://faq.f650.com/FAQs/Oil_Change_FAQ.htm
+http://faq.gardenweb.com/faq/lists/pepper/2002075348029538.html
+http://faq.support.overstock.com/faq.asp?docid=49
+http://faqs.ign.com/articles/393/393333p1.html
+http://faqs.ign.com/articles/431/431627p1.html
+http://faqs.ign.com/articles/438/438258p1.html
+http://faqs.ign.com/articles/569/569776p1.html
+http://farah-sf.blogspot.com/2005/01/unreasonable-expectations.html
+http://fare.tunes.org/liberty/sofia2005.html
+http://farms.byu.edu/display.php?table=review&id=511
+http://farrer.riv.csu.edu.au/ASGAP/APOL14/jun99-11.html
+http://farrer.riv.csu.edu.au/ASGAP/APOL28/dec02-10.html
+http://farrer.riv.csu.edu.au/ASGAP/eucalypt.html
+http://farsak.blogspot.com/
+http://farsite.hill.af.mil/help/Front_Page.htm
+http://farsite.hill.af.mil/reghtml/regs/other/dlad/PART37.htm
+http://farsite.hill.af.mil/reghtml/regs/other/doe/931.htm
+http://farsite.hill.af.mil/reghtml/regs/other/nasa/1830.htm
+http://fashion-era.com/Christmas/christmas_food_gingerbread_house_recipe.htm
+http://fashion-jeunesse.neko-shop.com/
+http://fashion.about.com/uctips.htm
+http://fashionfile.com/displayMoments.html
+http://fastlane.gmblogs.com/archives/2005/04/the_sun_keeps_c_1.html
+http://fastweb.monster.com/fastweb/resources/articles/index/102022?id=
+http://favorabledicta.blogspot.com/
+http://fawn.ifas.ufl.edu/tools/irrigation/citrus_microsprinkler_scheduler/MicroPaper.html
+http://fawny.org/blog/2003/09/
+http://fayrouz.blogspot.com/
+http://fbf.cba.ua.edu/Past%20Events.htm
+http://fbweb.cityu.edu.hk/ms/cci/detail.htm
+http://fc.egcc.co.uk/index.php?cat=1
+http://fc2.org/grossman/lazarus/excerpt.htm
+http://fcamin.nic.in/wm_1976.htm
+http://fccl.ksu.ru/winter.97/pominov1.htm
+http://fcgov.com/utilities/powertosave/airconditioning.php
+http://fcpp.org/main/project_jump.php?ProjectTypeID=6&GraphicID=48
+http://fcs.sagepub.com/cgi/content/refs/33/2/121
+http://fcs.sdstate.edu/AH/ahsa.htm
+http://fcsports.collegesports.com/sports/s-ouc/content/101504aaf.html
+http://fdncenter.org/atlanta/gtmd/at_gtmd_050105.html
+http://fdncenter.org/cleveland/gtmd/cl_gtmd_030102.html
+http://fdncenter.org/learn/faqs/html/proposal_writing.html
+http://fdncenter.org/learn/faqs/html/start_foundation.html
+http://fdncenter.org/pnd/newsmakers/nwsmkr.jhtml?id=102900013
+http://fdncenter.org/pnd/newsmakers/nwsmkr.jhtml?id=17800111
+http://fdncenter.org/pnd/newsmakers/nwsmkr.jhtml?id=3300054
+http://fdncenter.org/pnd/tsn/index.jhtml
+http://fdncenter.org/sanfrancisco/gtmd/sf_gtmd_040103.html
+http://fe.pennnet.com/
+http://fearofclowns.com/2004/08/what-you-must-believe-to-be-right_30.html
+http://feastofsaints.com/
+http://feature.geography.wisc.edu/histcart/
+http://features.engadget.com/entry/1234000770038266/
+http://features.icomix.com/letter/archives/2002/08/index.php
+http://fecolumnists.expressindia.com/print.php?content_id=90514
+http://federaljobs.net/TCFC.htm
+http://federaltimes.com/index2.php?S=759061
+http://feed.proteinos.com/item/2538
+http://feedingtheaddiction.blogspot.com/
+http://feedster.com/search.php?q=german+soccer&offset=75&limit=15&hl=&ie=&id=161134143
+http://feetfirst.blogspot.com/
+http://fehps.une.edu.au/PDaL/Courses/ProfessionalStudies/Peace/distance.htm
+http://fehps.une.edu.au/PDaL/Courses/ProfessionalStudies/peace/distance.htm
+http://fehps.une.edu.au/PDaL/courses/ProfessionalStudies/peace/distance.htm
+http://fehps.une.edu.au/PDal/Courses/ProfessionalStudies/Peace/distance.htm
+http://fehps.une.edu.au/PdaL/Courses/ProfessionalStudies/peace/distance.htm
+http://fehps.une.edu.au/PdaL/courses/ProfessionalStudies/peace/distance.htm
+http://feingold.senate.gov/~feingold/releases/03/01/2003116745.html
+http://feinstein.senate.gov/03_speeches.html
+http://feinstein.senate.gov/04_speeches.html
+http://feinstein.senate.gov/05_speeches.html
+http://feinstein.senate.gov/05speeches/cr-condirice.htm
+http://feinstein.senate.gov/assault-weapons-ban-support.html
+http://felicialee.blogspot.com/2004_05_09_felicialee_archive.html
+http://feministing.com/mt-comments.cgi?entry_id=1225
+http://fenwayparkeffects.blogspot.com/
+http://feralboy.com/log/
+http://fergusmurray.members.beeb.net/resonata.htm
+http://ferl.becta.org.uk/display.cfm?page=628&catID=626
+http://ferl.becta.org.uk/display.cfm?page=632
+http://ferl.becta.org.uk/display.cfm?page=632&printable=1
+http://ferl.becta.org.uk/display.cfm?resID=11550
+http://ferl.becta.org.uk/display.cfm?resID=8299
+http://ferl.becta.org.uk/display.cfm?resID=8455
+http://ferl.becta.org.uk/display.cfm?resID=8455&variation=101
+http://ferl.becta.org.uk/display.cfm?variation=101&resID=1720
+http://fernshomestead.com/suffering.html
+http://fesportal.fes.de/pls/portal30/docs/FOLDER/POLITIKANALYSE/DAUDERessay.htm
+http://ffc.berthall.com/2005/02/12/music-law-conference-2005/
+http://ffcrystals.limited-chaos.com/ffviii/ffviii_characters_irvine.php
+http://ffind.ab.ca/college-degree-program/
+http://ffni.home.comcast.net/AusExch.htm
+http://fg50.newi.ac.uk/?page=66
+http://fg50.newi.ac.uk/?page=69
+http://fia.dept.uncg.edu/handbook/getting-started.htm
+http://fibers.org/articles/news/7/5/5/1
+http://fibromyalgia.meetup.com/117/
+http://fiction-palter.mentat.com:1000/misc/ouija.html
+http://fieldworking.com/drygoods/bread.html
+http://fifaworldcup.yahoo.com/03/en/031008/1/cs9.html
+http://fifaworldcup.yahoo.com/06/en/040130/1/n4o.html
+http://fifaworldcup.yahoo.com/06/en/040130/1/n4p.html
+http://fifaworldcup.yahoo.com/06/en/040130/1/n4p_pf.html
+http://fifaworldcup.yahoo.com/06/en/040420/1/10ol.html
+http://fifaworldcup.yahoo.com/06/en/040420/1/10ol_pf.html
+http://fifaworldcup.yahoo.com/06/en/040607/1/1h4i.html
+http://fifaworldcup.yahoo.com/06/en/040609/1/1hty.html
+http://fifaworldcup.yahoo.com/06/en/040908/6/25qh.html
+http://fifaworldcup.yahoo.com/06/en/041011/1/2dsy.html
+http://fifaworldcup.yahoo.com/06/en/050128/1/3103.html
+http://fifaworldcup.yahoo.com/06/en/050128/1/3153.html
+http://fifaworldcup.yahoo.com/06/en/050326/6/3ctj.html
+http://fifaworldcup.yahoo.com/06/en/050506/1/3lfq.html
+http://fifaworldcup.yahoo.com/06/en/050506/1/3lfs.html
+http://fifaworldcup.yahoo.com/06/en/c/ticket/tac.html
+http://fifaworldcup.yahoo.com/06/en/tickets/tac.html
+http://fifaworldcup.yahoo.com/06/fr/c/ticket/tac.html
+http://fightingillini.collegesports.com/genrel/ill-genrel-fisf-club-levels.html
+http://fightingillini.collegesports.com/genrel/ill-genrel-fisf-endowment.html
+http://fightingillini.ocsn.com/genrel/Armory.html
+http://fightinginertia.blogspot.com/
+http://file40.net/ff_press/web_ad_d2.html
+http://files.filefront.com/War_Times_Demo/;2420328;;/fileinfo.html
+http://files.seriouszone.com/catdisplay.php?catid=39
+http://film.guardian.co.uk/Feature_Story/feature_story/0,4120,152536,00.html
+http://film.guardian.co.uk/Guardian/g2/story/0,3604,1261494,00.html
+http://film.guardian.co.uk/Guardian_NFT/interview/0,4479,122217,00.html
+http://film.guardian.co.uk/Guardian_NFT/interview/0,4479,78453,00.html
+http://film.guardian.co.uk/cybercinema/storynonav/0,7645,429131,00.html
+http://film.guardian.co.uk/features/featurepages/0,4120,1016137,00.html
+http://film.guardian.co.uk/features/featurepages/0,4120,1271967,00.html
+http://film.guardian.co.uk/features/featurepages/0,4120,1449360,00.html
+http://film.guardian.co.uk/features/featurepages/0,4120,863596,00.html
+http://film.guardian.co.uk/interview/interviewpages/0,6737,842836,00.html
+http://film.guardian.co.uk/interview/interviewpages/0,6737,922395,00.html
+http://film.guardian.co.uk/lordoftherings/news/0,11016,858480,00.html
+http://filmbrain.typepad.com/theconversation/2005/01/i_like_to_watch.html
+http://filmforce.ign.com/articles/306045p1.html
+http://filmplus.org/tech/title.html
+http://filmschool.fsu.edu/warrenreport/2001/10-12-01.html
+http://filmthreat.com/forums/archive/index.php/t-1614.html
+http://filmthreat.com/forums/archive/index.php/t-2201.html
+http://finaid.georgetown.edu/questpro.htm
+http://finaid.utexas.edu/welcome/fat/volume4_issue1.html
+http://finaid.utexas.edu/welcome/fat/volume4_issue2.html
+http://finance.gov.ie/viewdoc.asp?DocID=-1&CatID=1&StartDate=01+January+2001&m=&mypage=3
+http://finance.gov.ie/viewdoc.asp?fn=/documents/equality/circ2801.htm
+http://finance.lycos.com/qc/news/story.aspx?symbols=NYSE:AA&story=200506241331_APO_V3219
+http://finance.news.com.au/story/0,10166,11970001-462,00.html
+http://finance.news.com.au/story/0,10166,12194009-521,00.html
+http://finance.sympatico.msn.ca/content/gordonpape/P34825.asp
+http://finance.sympatico.msn.ca/content/gordonpape/P34825.asp?Printer
+http://finance.sympatico.msn.ca/content/savingsdebt/savingsdebthome/P29599.asp
+http://finance.yahoo.com/etf/education/08
+http://finance.yahoo.com/mp
+http://finance.yahoo.com/q/pr?s=LSBC
+http://financial.washingtonpost.com/wpost/quote.asp?mode=QUOTE&symbol=AAPL&dispnav=washtech
+http://financialplan.about.com/b/archives.htm
+http://financialplan.about.com/od/personalfinancebasics/a/ShopSafely.htm
+http://financialservices.house.gov/banking/10300icb.htm
+http://financialservices.house.gov/news.asp?FormMode=release&id=576&NewsType=1
+http://findajob.aol.com/findajob/articles/article.adp?id=563
+http://findalesson.com/tips/Walkertip2.htm
+http://findarticles.com/p/articles/mi_m1111/is_1837_306/ai_103124267
+http://findateacher.net/cgi-bin/priceteached.cgi
+http://findory.com/source?source=Belief%20Seeking%20Understanding&ib=1
+http://findory.com/source?source=Editor%3A%20Myself&ib=1
+http://finebushpeople.co.za/farmstore/catalog/windchimes1.htm
+http://finebushpeople.net/index.php?option=content&task=blogcategory&id=21&Itemid=119
+http://fink.sourceforge.net/doc/x11/trouble.php
+http://fink.sourceforge.net/index.php
+http://finnern.com/2003/09/
+http://fire.fws.gov/ifcc/monitor/EFGuide/data_management.htm
+http://fire.fws.gov/ifcc/monitor/RefGuide/reporting_results.htm
+http://fire.r9.fws.gov/fm/policy/HANDBOOK/1-1.HTM
+http://firedoglake.blogspot.com/
+http://firma.cfpm.org/Documents/ConsumerBehavior.htm
+http://firn.edu/doe/sas/fcat.htm
+http://firstfoot.com/php/b2evolution/blogs/
+http://firstmn.phpwebhosting.com/SearchResults.php3?ID=0428
+http://firstperson.typepad.com/first_person_limited/2004/03/mom_dad_courtes.html
+http://firstpressarizona.com/2004/event/sponsors
+http://firstuustlouis.org/committees.html
+http://fish4.co.uk/jobs/careercentre/careerdoc/q_a_regain_self.jsp
+http://fishbowl.pastiche.org/2004/03/02/defending_yagni
+http://fishbowl.pastiche.org/2004/03/21/charles_rules_of_argument
+http://fishorman.blogspot.com/2004/06/details-20.html
+http://fishyvb.something-fishy.org/archive/index.php/t-107631.html
+http://fishyvb.something-fishy.org/showthread.php?mode=hybrid&t=68
+http://fishyvb.something-fishy.org/showthread.php?p=232&mode=linear
+http://fishyvb.something-fishy.org/showthread.php?p=232&mode=threaded
+http://fishyvb.something-fishy.org/showthread.php?s=&threadid=68
+http://fishyvb.something-fishy.org/showthread.php?t=118658
+http://fishyvb.something-fishy.org/showthread.php?t=68
+http://fishyvb.something-fishy.org/showthread.php?t=75&goto=nextoldest
+http://fishyvb.something-fishy.org/showthread.php?threadid=68
+http://fistfulofeuros.net/archives/001004.php
+http://fistfulofeuros.net/archives/001283.php
+http://fistfulofeuros.net/archives/001377.php
+http://fistfulofeuros.net/scgi-bin/fist.cgi?entry_id=1004
+http://fistfuloffortnights.mu.nu/
+http://flac.sourceforge.net/
+http://flag.blackened.net/revolt/anarchism/writers/anarcho/war/iraq/fallujah/attack.html
+http://flag.blackened.net/revolt/anarchism/writers/anarcho/war/spin.html
+http://flag.blackened.net/revolt/rbr/rbr3_organise.html
+http://flag.blackened.net/revolt/talks.html
+http://flagrantdisregard.com/?p=402
+http://flakmag.com/books/fvf3.html
+http://flakmag.com/features/birming1.html
+http://flakmag.com/features/splog/
+http://flakmag.com/film/sunshine.html
+http://flakmag.com/music/mj/1984.html
+http://flakmag.com/sports/bowl37/14.html
+http://flakmag.com/tv/southpark.html
+http://flapsblog.blogspot.com/2005_04_17_flapsblog_archive.html
+http://flare.solareclipse.net/ultimatebb.php/topic/8/56.html
+http://flashmove.com/forum/archive/index.php/t-17055
+http://flathat.wm.edu/2003-11-21/story.php?type=3&aid=8
+http://flathat.wm.edu/September152000/
+http://flatrock.org.nz/topics/animals/mans_best_friend.htm
+http://flatrock.org.nz/topics/animation/eye_popping.htm
+http://flatrock.org.nz/topics/drugs/money_grows_on.htm
+http://flatrock.org.nz/topics/education/research_on_obscure_topics.htm
+http://flatrock.org.nz/topics/info_and_tech/save_weekend.htm
+http://flatrock.org.nz/topics/info_and_tech/year_1939_saw_birth_of_copier.htm
+http://flatrock.org.nz/topics/lifestyles/eat_right_and_exercise.htm
+http://flatrock.org.nz/topics/men/how_to_be_a_good_wife.htm
+http://flatrock.org.nz/topics/men/men_don.htm
+http://flatrock.org.nz/topics/money_politics_law/why_living_in_a_rich_society_mak.htm
+http://flatrock.org.nz/topics/odds_and_oddities/dead_wives.htm
+http://flatrock.org.nz/topics/science/is_the_brain_really_necessary.htm
+http://flatrock.org.nz/topics/science/science_of_the_senses.htm
+http://flatrock.org.nz/topics/science/spare_parts_department.htm
+http://flatrock.org.nz/topics/wellington/before_her_prime.htm
+http://flatrock.org.nz/topics/working/knowing_and_unknowing.htm
+http://fletcher.tufts.edu/news/2004/10/reissspeech.shtml
+http://fling93.com/blog/archives/2004_06.html
+http://fling93.com/blog/archives/politics/2004/this_land_was_made_for_you_to_.html
+http://flipside.nzoom.com/message_board/message_board_detail/0,2369,294048-1,00.html
+http://floridadisaster.org/bpr/Response/Plans/Nathaz/IRT/info.htm
+http://floridasings.com/mary_walkley_answers_your_questions_on_pro_voice_m.htm
+http://floridasmallbusiness.com/startup/05.asp
+http://floti.bell.ac.uk/MathsPhysics/introduction.htm
+http://fluid-power.globalspec.com/ProductFinder/Fluid_Power_Components/Pneumatic_Equipment_Components
+http://fly.hiwaay.net/~pspoole/Beza1.htm
+http://flyawaysimulation.com/posts4492-0.html
+http://flyfisherman.com/ftb/hwhackle/
+http://fmaware.org/fmOnlineNewsletter/vol3_no20/indexNav.htm
+http://fmaware.org/fmOnlineNewsletter/vol3_no20/lgTxt_indexNav.htm
+http://fmsbaroda.tripod.com/mbacourse.htm
+http://fmu.edu/financialaid.asp?schoolLocation=North%20Orlando
+http://fnopress.com/powerlearning/smm7.html
+http://fnopress.com/sbm/appendC.html
+http://fobiopatel.com/news/?a=40
+http://focus.hms.harvard.edu/2004/April16_2004/neurology.html
+http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sbou012&fileType=pdf
+http://fofr.trivialbeing.net/
+http://fogcity.blogs.com/jen/2004/07/
+http://fogcity.blogs.com/jen/2004/07/desiree_cafe_sa.html
+http://fogcity.blogs.com/jen/on_dining_out/
+http://foi.missouri.edu/whistleblowing/lackofsafety.html
+http://food-science.technology.designerz.com/food-science.php
+http://food.oregonstate.edu/ref/water/water_ref.html
+http://foodhaccp.com/msgboard.mv?parm_func=showmsg+parm_msgnum=1000879
+http://foodsci.rutgers.edu/about_us/faculty_honors.htm
+http://foolspress.com/csfd/skulfarm.html
+http://foot.ie/forums/printthread.php?t=22591
+http://football.guardian.co.uk/Match_Report/0,1527,-49501,00.html
+http://football.guardian.co.uk/news/theknowledge/0,9204,966358,00.html
+http://football.guardian.co.uk/womensfootball/story/0,12783,1502875,00.html
+http://footballpoets.org/poem.asp?Id=2815
+http://footballpoets.org/poem.asp?Id=2819
+http://footballpoets.org/poem.asp?Id=2939
+http://footballpoets.org/poem.asp?Id=2978
+http://footballpoets.org/poem.asp?Id=7038
+http://footballpoets.org/poem.asp?Id=7997
+http://footiethreads.com/forum/showthread.php?goto=lastpost&t=22255
+http://footiethreads.com/forum/showthread.php?t=22255
+http://fop.extensiblejava.com/Introduction.html
+http://forbes.com/smallbusiness/2004/09/09/cx_gk_0909artofthestart.html
+http://forbes.marketedge.com/SecopRep.asp?sym=AIG&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=BAC&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=C&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=EBAY&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=ET&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=INTC&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=MSFT&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=SBC&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=TWX&refer=forbes
+http://forbes.marketedge.com/SecopRep.asp?sym=YHOO&refer=forbes
+http://force12inc.com/F12-NEWS-120103.htm
+http://foreignaffairs.gov.ie/Press_Releases/19970430/310.htm
+http://foreignaffairs.gov.ie/Press_Releases/20020904/1022.htm
+http://foreignaffairs.gov.ie/Press_Releases/20031001/1289.htm
+http://foreignaffairs.gov.ie/aboutus/strategy/part4.asp
+http://foreigndispatches.typepad.com/
+http://foreigndispatches.typepad.com/dispatches/
+http://foreigndispatches.typepad.com/dispatches/music/
+http://forests.org/archive/africa/ovelezim.htm
+http://forests.org/articles/reader.asp?linkid=26817
+http://forests.org/articles/reader.asp?linkid=32243
+http://forests.org/articles/reader.asp?linkid=33142
+http://forests.org/articles/reader.asp?linkid=36887
+http://forevergeek.com/entertainment/the_simpsons_movie_finally_moving_forward.php
+http://forevergeek.com/news/harvard_offers_free_tuition_for_low_income_families.php
+http://forexanalytics.com/termsag.html
+http://forexanalytics.com/termsoz.html
+http://forkidssakecc.com/older%20toddler.htm
+http://forms.apa.org/governance/candstatement/index.cfm?action=viewstatements&id=18
+http://forms.apa.org/governance/candstatement/index.cfm?action=viewstatements&id=49
+http://forms.ceakumal.org/declaration.html
+http://forms.wto.org/eradbibliographie/bibliography_displayall_e.asp?order=author&page=19
+http://formula1.autoracingsport.com/2004_news/mar/07b_sunday_aus_quotes.html
+http://forsys.cfr.washington.edu/~vp/Papers/Ulbrichtchap4.html
+http://fortress.wa.gov/esd/portal/resources/cd/cd289.htm
+http://fortress.wa.gov/esd/portal/resources/cd/cd473.htm
+http://fortress.wa.gov/esd/portal/unemployment/benefits/webpbr.htm
+http://fortwilliam.ukontheweb.net/
+http://forum.abestweb.com/archive/index.php/t-3.html
+http://forum.aidworkers.net/messages/258/13377.html
+http://forum.apan-info.net/fall99web/4-SBJ43.html
+http://forum.atimes.com/topic.asp?TOPIC_ID=1724
+http://forum.atimes.com/topic.asp?whichpage=-1&TOPIC_ID=1724&REPLY_ID=27166
+http://forum.atimes.com/topic.asp?whichpage=-1&TOPIC_ID=262&REPLY_ID=1621
+http://forum.audiogon.com/cgi-bin/fr.pl?zdisp&1038849735&read&3&4&
+http://forum.avast.com/index.php?topic=10862.0;prev_next=prev
+http://forum.bcdb.com/forum/_C10/_F18/Theme_parks,_cable_TV_boost_Disney_earnings_P39025/
+http://forum.bcdb.com/forum/gforum.cgi?post=39025
+http://forum.bcdb.com/forum/gforum.cgi?post=39025;sb=post_latest_reply;so=ASC;forum_view=forum_view_collapsed;page=last;guest=4075529
+http://forum.bcdb.com/gforum.cgi?post=39025
+http://forum.belmont.edu/umac/archives/2004/04/belmont_univers_1.html
+http://forum.bodybuilding.com/showthread.php?t=245561&page=3
+http://forum.bodyconcept.com/Trouble_Gaining_Weight/m_33/tm.htm
+http://forum.canadianparents.ca/ubbthreads/showflat.php?Cat=&Number=190566&page=0&view=collapsed&sb=5&o=&fpart=1
+http://forum.digitalspy.co.uk/board/showthread.php?mode=hybrid&t=188054
+http://forum.digitalspy.co.uk/board/showthread.php?mode=hybrid&t=232753
+http://forum.digitalspy.co.uk/board/showthread.php?p=3333811&mode=threaded
+http://forum.digitalspy.co.uk/board/showthread.php?t=161638
+http://forum.digitalspy.co.uk/board/showthread.php?t=183428&goto=nextnewest
+http://forum.digitalspy.co.uk/board/showthread.php?t=184594
+http://forum.digitalspy.co.uk/board/showthread.php?t=188054
+http://forum.digitalspy.co.uk/board/showthread.php?t=232753
+http://forum.digitalspy.co.uk/board/showthread.php?threadid=237550
+http://forum.doityourself.com/showthread.php?t=181244
+http://forum.doom9.org/showthread.php?s=&threadid=44223
+http://forum.doom9.org/showthread.php?s=&threadid=79898
+http://forum.e46fanatics.com/forumdisplay.php?forumid=11
+http://forum.e46fanatics.com/showthread.php?goto=newpost&t=269226
+http://forum.ecoustics.com/bbs/messages/34579/109459.html
+http://forum.elvenjess.com/read.php?TID=4157
+http://forum.eminem.net/archive/index.php/t-9182.html
+http://forum.frankblack.net/topic.asp?TOPIC_ID=3015&whichpage=6
+http://forum.freeadvice.com/archive/index.php/t-181544.html
+http://forum.freeadvice.com/archive/index.php/t-203746.html
+http://forum.freeadvice.com/archive/index.php/t-219708.html
+http://forum.freeadvice.com/archive/index.php/t-220020.html
+http://forum.freeadvice.com/printthread.php?t=207649
+http://forum.freeadvice.com/printthread.php?t=210665
+http://forum.freeadvice.com/showthread.php?goto=lastpost&t=199494
+http://forum.freeadvice.com/showthread.php?mode=hybrid&t=199494
+http://forum.freeadvice.com/showthread.php?p=747234&mode=threaded
+http://forum.freeadvice.com/showthread.php?p=831002
+http://forum.freeadvice.com/showthread.php?t=147840&page=2
+http://forum.freeadvice.com/showthread.php?t=199067&goto=nextnewest
+http://forum.freeadvice.com/showthread.php?t=199494
+http://forum.freeadvice.com/showthread.php?t=203971&goto=nextoldest
+http://forum.freeadvice.com/showthread.php?t=207372
+http://forum.freeadvice.com/showthread.php?t=217465&page=1
+http://forum.goteamspeak.com/archive/index.php/t-1466.html
+http://forum.homesecuritystore.com/
+http://forum.hotplugins.com/cgi-bin/showreply.cgi?tpid=50755
+http://forum.hypnosis.com/archive/index.php/t-724.html
+http://forum.hypnosis.com/newreply.php?do=newreply&noquote=1&p=9715
+http://forum.hypnosis.com/printthread.php?t=724
+http://forum.icann.org/nsi2001/3AA50E3F000001C8.html
+http://forum.icann.org/org/3D5B45DE000001F1.html
+http://forum.icann.org/tldapps/3A05F59C000011EF.html
+http://forum.japantoday.com/fb.asp?m=104532&key=
+http://forum.japantoday.com/m_23676/mpage_3/key_/tm.htm
+http://forum.japantoday.com/m_23676/mpage_3/printable.htm
+http://forum.japantoday.com/m_313972/printable.htm
+http://forum.java.sun.com/thread.jspa?threadID=176779&messageID=1630635
+http://forum.java.sun.com/thread.jspa?threadID=176779&messageID=1632620
+http://forum.java.sun.com/thread.jspa?threadID=544112&tstart=60
+http://forum.java.sun.com/thread.jspa?threadID=575095&start=2100&tstart=0
+http://forum.java.sun.com/thread.jspa?threadID=575095&start=960&tstart=0
+http://forum.java.sun.com/thread.jspa?threadID=639196&tstart=0
+http://forum.lef.org/default.aspx?f=41&m=17717&g=22408
+http://forum.logofreetv.org/topic.asp?TOPIC_ID=469
+http://forum.lowcarber.org/archive/index.php/t-188255.html
+http://forum.lowcarber.org/archive/index.php/t-224041.html
+http://forum.lowcarber.org/archive/index.php/t-228099.html
+http://forum.lowcarber.org/archive/index.php/t-58029.html
+http://forum.lowcarber.org/showthread.php?t=204548&page=2
+http://forum.mamboserver.com/archive/index.php/t-46535.html
+http://forum.mamboserver.com/showthread.php?goto=lastpost&t=25500
+http://forum.mamboserver.com/showthread.php?t=25500
+http://forum.mamboserver.com/showthread.php?t=44484&goto=lastpost
+http://forum.mamboserver.com/showthread.php?t=946&goto=lastpost
+http://forum.netball.org.sg/post.asp?REPLY_ID=1856&TOPIC_ID=384&method=ReplyQuote
+http://forum.netball.org.sg/post.asp?REPLY_ID=1861&TOPIC_ID=384&method=ReplyQuote
+http://forum.ogrish.com/forum/archive/index.php/t-5685.html
+http://forum.pbase.com/viewtopic.php?p=49712
+http://forum.pbase.com/viewtopic.php?p=49971
+http://forum.pbase.com/viewtopic.php?t=8714
+http://forum.physorg.com/index.php?showtopic=1572
+http://forum.physorg.com/index.php?showtopic=1572&view=getnewpost
+http://forum.physorg.com/index.php?showtopic=1828&view=getnewpost
+http://forum.physorg.com/index.php?showtopic=2059&view=new
+http://forum.physorg.com/index.php?showtopic=2150&view=getlastpost
+http://forum.planeta.com/viewtopic.php?p=336
+http://forum.planeta.com/viewtopic.php?t=129
+http://forum.plebius.org/forum.php?t=182
+http://forum.rivercottage.net/viewtopic.php?t=4623&highlight=crayfish
+http://forum.rockridgeinstitute.org/?q=dialogue05/day10/movement
+http://forum.rpg.net/archive/index.php/t-69623.html
+http://forum.spamcop.net/forums/index.php?showtopic=2472&view=findpost&p=15986
+http://forum.spamcop.net/forums/lofiversion/index.php/t3972.html
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=24370&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=27485&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=27517&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=27558&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=27753&highlight=&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=27757&
+http://forum.statcounter.com/phpBB2/viewtopic.php?p=28452&
+http://forum.statcounter.com/phpBB2/viewtopic.php?t=2122&view=next&
+http://forum.statcounter.com/phpBB2/viewtopic.php?t=4127&view=next&
+http://forum.statcounter.com/phpBB2/viewtopic.php?t=4341&highlight=&
+http://forum.statcounter.com/phpBB2/viewtopic.php?t=4858&
+http://forum.tabletpcreviewspot.com/showthread.php?t=501
+http://forum.teamxbox.com/archive/index.php/t-321605.html
+http://forum.textpattern.com/viewtopic.php?id=6810&p=8
+http://forum.textpattern.com/viewtopic.php?pid=60928
+http://forum.uniforminsignia.net/viewtopic.php?p=9601
+http://forum.vgcats.com/archive/index.php/t-1048.html
+http://forum.vgcats.com/archive/index.php/t-1793.html
+http://forum.virtualtourist.com/forum-11-1-Travel-Germany-1-forum.html
+http://forum.visitsierraleone.org/forum_posts.asp?TID=55&PN=1
+http://forum.visitsierraleone.org/forum_posts.asp?TID=55&PN=1&TPN=1
+http://forum.wolframscience.com/archive/topic/222-1.html
+http://forum.wolframscience.com/archive/topic/788-1.html
+http://forum.wordreference.com/archive/index.php?t-2374.html
+http://forums.3drealms.com/ubbthreads/showflat.php?Cat=0&Board=popularmedia&Number=707291&page=0&fpart=2
+http://forums.abrsm.org/index.php?act=ST&f=2&t=7766&hl=&
+http://forums.abrsm.org/index.php?act=boardrules
+http://forums.abrsm.org/lofiversion/index.php/t4704.html
+http://forums.abum.com/lofiversion/index.php/t333.html
+http://forums.ac2.turbinegames.com/archive/index.php/t-3892.html
+http://forums.afterdawn.com/thread_view.cfm/146432
+http://forums.afterdawn.com/thread_view.cfm/155139
+http://forums.aliensoup.com/printthread.php?t=529
+http://forums.aliensoup.com/showthread.php?mode=hybrid&t=529
+http://forums.aliensoup.com/showthread.php?t=529
+http://forums.aliensoup.com/showthread.php?t=529&page=2&pp=15
+http://forums.alternet.org/guest/motet?show+-ujI1PA+-ilad+Issues+14
+http://forums.anandtech.com/messageview.aspx?catid=28&threadid=1488376&STARTPAGE=1&enterthread=y
+http://forums.anandtech.com/messageview.aspx?catid=31&threadid=1500969&enterthread=y
+http://forums.anandtech.com/messageview.aspx?catid=50&threadid=1481055&enterthread=y
+http://forums.anandtech.com/messageview.cfm?catid=28&threadid=1488376
+http://forums.anandtech.com/messageview.cfm?catid=31&threadid=1500969
+http://forums.anarchy-online.com/showthread.php?goto=lastpost&t=368882
+http://forums.anarchy-online.com/showthread.php?t=366749&goto=nextnewest
+http://forums.anarchy-online.com/showthread.php?t=368882
+http://forums.armageddononline.org/archive/index.php/t-252.html
+http://forums.army.ca/forums/index.php?topic=16908.75
+http://forums.army.ca/forums/index.php?topic=23745;prev_next=next
+http://forums.audioholics.com/forums/archive/index.php/t-1322.html
+http://forums.audioholics.com/forums/showthread.php?p=75163
+http://forums.beyond.ca/showthread/t-74828.html
+http://forums.booktrade.info/booktrade.php?&do=news&bit=CompanyNews&find=20
+http://forums.bridgetalk.com/index.php?showtopic=922
+http://forums.cafepress.com/eve/ubb.x/a/tpc/f/863104/m/7511095
+http://forums.cjb.net/helloweenid-about86.html
+http://forums.clan-mac.com/ubb/ultimatebb.php?/ubb/get_topic/f/9/t/000115/p/1.html
+http://forums.comicbookresources.com/archive/index.php/t-350.html
+http://forums.comicbookresources.com/archive/index.php/t-4568.html
+http://forums.deeperblue.net/showthread.php?goto=lastpost&t=53152
+http://forums.deeperblue.net/showthread.php?t=53152
+http://forums.designtechnica.com/showthread.php?t=7155
+http://forums.designtechnica.com/showthread.php?threadid=7155
+http://forums.dvdoctor.net/archive/index.php/t-27250.html
+http://forums.ebay.com.sg/thread.jsp?forum=1&thread=300000525&modified=1107055935512
+http://forums.ebay.com/db1/thread.jspa?threadID=200086015&tstart=0&mod=1116356225983
+http://forums.ebay.com/db1/thread.jspa?threadID=200091811&tstart=0&mod=1118082445635
+http://forums.ebay.com/db1/thread.jspa?threadID=200091811&tstart=0&mod=1118082445635&ssPageName=CMDV:AB
+http://forums.ebay.com/db1/thread.jspa?threadID=410550532&tstart=0&mod=1118164587362
+http://forums.ebay.com/db2/thread.jsp?forum=13&thread=8105&start=120&msRange=40
+http://forums.ebay.com/db2/thread.jsp?forum=145&thread=410098169&modified=1084718537697
+http://forums.ebay.com/db2/thread.jsp?forum=95&thread=410098072&modified=1081925408322
+http://forums.ebay.com/db2/thread.jspa?threadID=200106097&tstart=0&mod=1118162762559
+http://forums.ebay.com/db2/thread.jspa?threadID=200114068&tstart=0&mod=1119152348862
+http://forums.ebay.ph/thread.jspa?threadID=300000251&tstart=120&mod=1113247696858
+http://forums.egullet.com/index.php?act=SF&f=38&%22
+http://forums.egullet.com/index.php?showforum=38
+http://forums.fark.com/cgi/fark/comments.pl?IDLink=1528971
+http://forums.flightinfo.com/showthread.php?t=56173&page=1&pp=15
+http://forums.french-property.com/showthread.php?threadid=716
+http://forums.g4techtv.com/messageview.cfm?catid=24&threadid=322603
+http://forums.gamedaily.com/index.php?showtopic=81001
+http://forums.gamedaily.com/index.php?showtopic=84786
+http://forums.gamespot.com/gamespot/show_messages.php?board=534914&topic=21639792&page=2
+http://forums.gamespot.com/gamespot/show_messages.php?board=920419&topic=21519848&page=9
+http://forums.gamespot.com/gamespot/show_messages.php?board=928377&topic=21242688&page=0
+http://forums.gardenweb.com/forums/load/allium/msg0809080722757.html
+http://forums.gardenweb.com/forums/load/alpines/msg0720595620668.html
+http://forums.gardenweb.com/forums/load/bamboo/msg121147379122.html
+http://forums.gardenweb.com/forums/load/botany/msg11071612722.html
+http://forums.gardenweb.com/forums/load/butterfly/gal0909511424268.html
+http://forums.gardenweb.com/forums/load/citrus/msg0117504627765.html
+http://forums.gardenweb.com/forums/load/citrus/msg1211295110432.html
+http://forums.gardenweb.com/forums/load/commgard/msg011218346271.html
+http://forums.gardenweb.com/forums/load/cutting/msg0206220819864.html
+http://forums.gardenweb.com/forums/load/daylily/msg011033265968.html
+http://forums.gardenweb.com/forums/load/difficult/msg0507112015564.html
+http://forums.gardenweb.com/forums/load/farnorth/msg121458463803.html
+http://forums.gardenweb.com/forums/load/favorite/msg110805274013.html
+http://forums.gardenweb.com/forums/load/gesneriad/msg1223403713680.html
+http://forums.gardenweb.com/forums/load/herbs/msg1114124911258.html
+http://forums.gardenweb.com/forums/load/hibisc/msg111502571864.html
+http://forums.gardenweb.com/forums/load/mastgard/msg0120013512019.html
+http://forums.gardenweb.com/forums/load/okgard/msg1109425013231.html
+http://forums.gardenweb.com/forums/load/rosesgal/msg0116470216249.html
+http://forums.gardenweb.com/forums/load/rosesname/msg110313144582.html
+http://forums.gardenweb.com/forums/load/upstateny/msg1011344912880.html
+http://forums.gardenweb.com/forums/load/writers/msg011315521582.html
+http://forums.gminsidenews.com/showthread.php?goto=lastpost&t=11039
+http://forums.gminsidenews.com/showthread.php?goto=newpost&t=11039
+http://forums.gminsidenews.com/showthread.php?t=10669
+http://forums.gminsidenews.com/showthread.php?t=10669&page=1
+http://forums.gminsidenews.com/showthread.php?t=11039
+http://forums.gminsidenews.com/showthread.php?t=7948&goto=nextnewest
+http://forums.go.com/abc/thread?threadID=209857
+http://forums.go.com/abc/thread?threadID=216839
+http://forums.go.com/abclocal/WPVI/thread?threadID=58868
+http://forums.go.com/abcnews/GMA/thread?threadID=164722
+http://forums.go.com/abcnews/thread?threadID=169994
+http://forums.go.com/soccernet/thread?threadID=2664
+http://forums.go.com/soccernet/thread?threadID=34519
+http://forums.govteen.com/archive/index.php/t-51367.html
+http://forums.gucomics.com/viewtopic.php?t=5927
+http://forums.happy-messaging.com/discus/messages/35/47.html
+http://forums.hardwarezone.com/showthread.php?t=864285&page=4
+http://forums.hardwarezone.com/showthread.php?t=867205&goto=nextoldest
+http://forums.healthyplace.com/ubbthreads/showflat.php?Cat=&Number=11667&page=0&view=collapsed&sb=5&o=&fpart=1
+http://forums.ibsys.com/viewmessages.cfm?sitekey=bos&Forum=6&Topic=11263
+http://forums.idlethumbs.net/printthread.php?t=1717
+http://forums.idlethumbs.net/showthread.php?p=24375
+http://forums.invisionpower.com/index.php?showtopic=173718&mode=threaded&pid=1204307
+http://forums.invisionpower.com/lofiversion/index.php/t173718.html
+http://forums.invisionpower.com/lofiversion/index.php/t40799-2250.html
+http://forums.java.net/jive/thread.jspa?threadID=686&tstart=0
+http://forums.johnstonefitness.com/showthread.php?p=92949
+http://forums.johnstonefitness.com/showthread.php?p=92963
+http://forums.johnstonefitness.com/showthread.php?t=3982
+http://forums.jolt.co.uk/showthread.php?t=355475
+http://forums.jolt.co.uk/showthread.php?t=362800
+http://forums.kayako.com/showthread.php?goto=lastpost&t=3560
+http://forums.lclmag.com/forums/index.php?showtopic=277&view=getnewpost
+http://forums.linkinpark.com/archive/index.php/t-305571.html
+http://forums.lycaeum.org/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=8&t=001067
+http://forums.macnn.com/showthread.php?t=258681
+http://forums.macosxhints.com/showthread.php?s=&threadid=40932
+http://forums.macrumors.com/showthread.php?mode=hybrid&t=79073
+http://forums.macrumors.com/showthread.php?s=&threadid=107670
+http://forums.macrumors.com/showthread.php?t=107670
+http://forums.men.style.com/thread.jspa?messageID=71223
+http://forums.mg-rover.org/showthread.php?goto=newpost&t=80146
+http://forums.microsoft.com/MSDN/default.aspx
+http://forums.military.com/eve/ubb.x/a/tpc/f/3241924461/m/666102875
+http://forums.military.com/eve/ubb.x/a/tpc/f/3701925702/m/521108883/r/last_reply
+http://forums.military.com/eve/ubb.x/a/tpc/f/553107331/m/678100113/r/9930051200001
+http://forums.military.com/eve/ubb.x/a/tpc/f/553107331/m/72600580813/inc/1
+http://forums.military.com/eve/ubb.x/a/tpc/f/672198221/m/1050054200001/p/2
+http://forums.military.com/eve/ubb.x/a/tpc/f/78192862/m/8950042100001
+http://forums.military.com/eve/ubb.x/a/tpc/f/78192862/m/8950042100001/r/2330033100001
+http://forums.military.com/eve/ubb.x/a/tpc/f/78192862/m/8950042100001/r/3730044100001
+http://forums.military.com/eve/ubb.x/a/tpc/f/78192862/m/8950042100001/r/8740033100001
+http://forums.military.com/eve/ubb.x/a/tpc/f/78192862/m/8950042100001/r/9570032100001
+http://forums.mobileburn.com/archive/index.php/t-430.html
+http://forums.mobileburn.com/archive/index.php/t-7284.html
+http://forums.mobileburn.com/showthread.php?t=7284
+http://forums.mogusland.com/archive/index.php/t-18166.html
+http://forums.mtbr.com/showthread.php?t=34015
+http://forums.nyyfans.com/archive/index.php/t-12852.html
+http://forums.nyyfans.com/showthread.php?t=78613
+http://forums.organicgardening.com/thread.jspa?messageID=106349
+http://forums.organicgardening.com/thread.jspa?threadID=19224&messageID=106349
+http://forums.organicgardening.com/thread.jspa?threadID=19224&tstart=30
+http://forums.oscommerce.com/lofiversion/index.php/t156585.html
+http://forums.pcworld.co.nz/archive/index.php/t-43684.html
+http://forums.pcworld.co.nz/archive/index.php/t-47564.html
+http://forums.phantomgourmet.com/forums/shwmessage.aspx?ForumID=9&MessageID=3422
+http://forums.photobucket.com/archive/index.php/t-4213.html
+http://forums.procooling.com/vbb/showthread.php?t=9828
+http://forums.relicnews.com/archive/index.php/t-2124.html
+http://forums.relicnews.com/showthread.php?goto=lastpost&t=33619
+http://forums.relicnews.com/showthread.php?t=34406&page=2
+http://forums.relicnews.com/showthread.php?t=53858&page=2
+http://forums.relicnews.com/showthread.php?t=53858&page=4
+http://forums.rpghost.com/archive/index.php/t-17045.html
+http://forums.runnersworld.com/thread.jspa?threadID=244899&tstart=0
+http://forums.sjgames.com/showthread.php?t=3496&page=5
+http://forums.snapstream.com/vb/showthread.php?t=22115&goto=nextnewest
+http://forums.starwars.com/thread.jspa?threadID=112668&start=90
+http://forums.starwars.com/thread.jspa?threadID=213527&tstart=225
+http://forums.starwars.com/thread.jspa?threadID=213527&tstart=250
+http://forums.starwars.com/thread.jspa?threadID=222689&start=104
+http://forums.starwars.com/thread.jspa?threadID=222689&start=105
+http://forums.starwars.com/thread.jspa?threadID=73789&start=135
+http://forums.station.sony.com/swg/board/message?board.id=general_star_wars&message.id=35106
+http://forums.station.sony.com/swg/board/message?board.id=in_live&message.id=43271
+http://forums.tantra.ph/index.php?showtopic=19417&view=getnewpost
+http://forums.tantra.ph/lofiversion/index.php/t19417.html
+http://forums.techguy.org/archive/index.php/t-198534.html
+http://forums.techguy.org/forumdisplay.php?do=markread
+http://forums.techguy.org/showthread.php?goto=lastpost&t=318702
+http://forums.techguy.org/showthread.php?p=2295245
+http://forums.techguy.org/showthread.php?t=318702&page=2
+http://forums.techguy.org/showthread.php?t=319985
+http://forums.televisionwithoutpity.com/index.php?showtopic=3118386&st=0
+http://forums.televisionwithoutpity.com/index.php?showtopic=3118386&st=15
+http://forums.thecpl.com/ubb/ultimatebb.php?ubb=get_topic;f=30;t=000095
+http://forums.thesimsresource.com/showthread.php?t=204785
+http://forums.thesimsresource.com/showthread.php?t=204785&page=1
+http://forums.ubi.com/eve/ubb.x/a/frm/f/9371032962
+http://forums.ubi.com/eve/ubb.x/a/tpc/f/26310365/m/9691056133/inc/-1
+http://forums.ubi.com/eve/ubb.x/a/tpc/f/857101043/m/2161022923/r/2711091133
+http://forums.vogue.com.au/archive/index.php/t-179.html
+http://forums.warwick.ac.uk/wf/browse/thread.jsp?fid=1&tid=14383
+http://forums.webhostdir.com/showthread.php?p=28010&mode=threaded
+http://forums.webhostdir.com/showthread.php?t=10206
+http://forums.whirlpool.net.au/forum-replies.cfm?t=131657&p=14
+http://forums.whirlpool.net.au/forum-replies.cfm?t=283519
+http://forums.whirlpool.net.au/forum-replies.cfm?t=290397
+http://forums.winamp.com/showthread.php?s=&threadid=171754
+http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=140319
+http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=781943
+http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=788265
+http://forums2.battleon.com/f/fb.asp?m=301477
+http://forums2.gardenweb.com/forums/load/accout/msg081910434466.html
+http://forums2.gardenweb.com/forums/load/design/msg092248278303.html
+http://forums2.gardenweb.com/forums/load/ponds/msg0622391520038.html
+http://forums2.gardenweb.com/forums/load/seed/msg012108104920.html
+http://forums2.gardenweb.com/forums/load/strucs/msg0114565431072.html
+http://forums3.aclu.org/messageview.cfm?catid=107&threadid=7155
+http://forward.com/articles/2729
+http://foucault.info/Foucault-L/archive/msg05919.shtml
+http://found-art.com/index.php
+http://foundation.intouch.org/foundation/legacy/household.html
+http://foundation1.org/papers-policy/intl-jewish-parliament.htm
+http://fox40.trb.com/ktxl-petzold_article.htmlstory
+http://foxborough.k12.ma.us/fpsweb/TAY/Taylorspeech/TAYWhat%20do%20we%20do%20in%20speech.html
+http://foxsoccershop.com/testimonials.html
+http://foxsports.news.com.au/story/0,8659,15620239-23210,00.html
+http://fp.arizona.edu/mesassoc/Bulletin/Pres%20Addresses/khalidi.htm
+http://fp.arizona.edu/senate/minutefs/1997-98/mn03-98.htm
+http://fp.bio.utk.edu/mycology/papers.htm
+http://fp.ignatz.plus.com/roadtonowhere.htm
+http://fp.miranda.f9.co.uk/trenches/chapter2a.html
+http://fparchive.ceip.org/aboutfp/press/news.php
+http://fpc.state.gov/fpc/45701.htm
+http://fpc.state.gov/fpc/48259.htm
+http://fpc.state.gov/fpc/6176.htm
+http://fragments.consc.net/djc/2005/03/major_figures_i.html
+http://fraser.cc/Talks/Chronicle.html
+http://fray.com/events/fray_day_8_new_haven/
+http://fray.slate.msn.com/id/2120853/
+http://frazer.rice.edu/~mgpowell/mt/archives/000074.html
+http://free-dating.net.ru/love/coupons/
+http://free-fire.blogspot.com/2004/10/wishing-and-hoping.html
+http://free.freespeech.org/americanstateterrorism/vietnamgenocide/Mylai.html
+http://free.freespeech.org/manushi/136/homeless.html
+http://free.freespeech.org/unlimitedfreedom/seattle.html
+http://free.hostultra.com/~jarvis/vile.html
+http://free.ngo.pl/lastrada/page2.html
+http://free.oth.net/td/free.html
+http://freeahmed.blogspot.com/
+http://freebies.about.com/library/weekly/aa100100a.htm
+http://freecycle.org/archives/000264.php
+http://freedaemonconsulting.com/rates.php.en
+http://freedom.orlingrabbe.com/lfetimes/balance_sheet.htm
+http://freedomhouse.org/religion/sudan/publications/Reeves_UN_Sudan_vote.htm
+http://freedomkeys.com/machancollection.htm
+http://freedomlaw.com/nlp.htm
+http://freedomministries.com/alabama.html
+http://freedomministries.com/northtenn.html
+http://freedomofflight.tv/public/index.php?which=canopy
+http://freedomofmind.com/resourcecenter/contact/
+http://freedomofmind.com/resourcecenter/groups/s/soka/raped.htm
+http://freeinternetpress.com/modules.php?name=News&file=article&sid=3828
+http://freelancewrite.about.com/od/weeklyqa/a/qa020105.htm
+http://freemasonry.bcy.ca/anti-masonry/anti-masonry01.html
+http://freemasonry.bcy.ca/grandlodge/addresses/walls_annual.html
+http://freemind.sourceforge.net/
+http://freepages.genealogy.rootsweb.com/~allpoms/genetics3.html
+http://freepages.genealogy.rootsweb.com/~gentutor/churches.html
+http://freepages.genealogy.rootsweb.com/~jdevlin/town_hist/durham_ct_hist.htm
+http://freepages.genealogy.rootsweb.com/~nzbound/nelson.htm
+http://freepages.history.rootsweb.com/~dav4is/people/X-C.htm
+http://freerangelibrarian.com/
+http://freerangelibrarian.com/archives/013105/the_last_mile_a_cha.php
+http://freerangelibrarian.com/archives/2004_10.php
+http://freerangelibrarian.com/archives/blogging_and_journalism_and_usn/index.php
+http://freerangelibrarian.com/archives/five_minute_reviews/index.php
+http://freerangelibrarian.com/archives/movable_type/index.php
+http://freerangelibrarian.com/archives/regular_issues/index.php
+http://freerepublic.com/focus/f-news/1319856/posts
+http://freespace.virgin.net/clare.h/hdg3Court.htm
+http://freespace.virgin.net/d.gardiner/GrandOD.html
+http://freespace.virgin.net/gerald.hughes/history/valmag.htm
+http://freespace.virgin.net/john.cletheroe/usa_can/driving/right.htm
+http://freespace.virgin.net/john.cletheroe/usa_can/money/usa_cur.htm
+http://freespace.virgin.net/karl_and.gnome/origins.htm
+http://freespace.virgin.net/peter_d.brown/rail.htm
+http://freethoughts.org/archives/000258.php
+http://freethoughts.org/archives/000688.php
+http://freethoughts.org/archives/000698.php
+http://freethoughts.org/archives/000749.php
+http://freethoughts.splinder.com/
+http://freetrial.sitesell.com/
+http://freeware.sgi.com/Installable/plan-1.8.5.html
+http://french.about.com/library/bl-frenchinenglish-list.htm
+http://french.about.com/library/weekly/aa111000.htm
+http://freshmeat.net/articles/view/100/
+http://freshmeat.net/articles/view/1026/
+http://freshmeat.net/articles/view/1049/
+http://freshmeat.net/articles/view/1267/
+http://freshmeat.net/articles/view/141/
+http://freshmeat.net/articles/view/145/
+http://freshmeat.net/articles/view/147/
+http://freshmeat.net/articles/view/216/
+http://freshmeat.net/articles/view/494/
+http://freshmeat.net/articles/view/495/
+http://freshmeat.net/articles/view/557/
+http://freshmeat.net/articles/view/639/
+http://freshmeat.net/articles/view/774/
+http://freshmeat.net/projects/acctmgr/
+http://freshmeat.net/projects/gentoo/
+http://freshmeat.net/projects/openwebmail/
+http://freshtakes.typepad.com/znetlady/2005/06/modern_tools_fo.html
+http://fresno.networkofcare.org/family/library/detail.cfm?id=567&cat=77
+http://frictionmagazine.com/politik/columns/february.asp
+http://friends.macjournals.com/mattd/losingABS
+http://friends.pcukraine.org/
+http://friendsinbusiness.com/board1/index.cgi?read=90329
+http://frist.senate.gov/index.cfm?FuseAction=Speeches.Detail&Speech_id=113&Month=9&Year=2004
+http://frist.senate.gov/index.cfm?FuseAction=Speeches.Detail&Speech_id=202&Month=5&Year=2005
+http://frist.senate.gov/index.cfm?FuseAction=Speeches.Detail&Speech_id=226&Month=6&Year=2005
+http://frl.bluehighways.com/frlarchives/regular_issues/index.php
+http://frli.law.gov.au/s97.vts?VdkVgwKey=1997B02749&ViewTemplate=frliview.hts&action=View
+http://frontier.userland.com/stories/storyReader$3041
+http://frontpagemag.com/Articles/Printable.asp?ID=16625
+http://frontwheeldrive.com/erik_davis.html
+http://frontwheeldrive.com/manuel_de_landa.html
+http://frost.freehosting.net/coll1.htm
+http://frozentexan.typepad.com/frozentexan/2005/03/
+http://frp.aysps.gsu.edu/frp/frpreports/Rpt68/
+http://frugalliving.about.com/
+http://frugalliving.about.com/cs/consumeraddiction/a/043002.htm
+http://frugalliving.about.com/cs/tips/a/blvinpets.htm
+http://fruhead.com/aspects/plot/
+http://fseg.gre.ac.uk/fire/PED03_proceedings_preface_toc.html
+http://fseg.gre.ac.uk/mscfire/
+http://fsfeurope.org/documents/whyfs.en.html
+http://fsfeurope.org/documents/whyfs.html
+http://fsfeurope.org/projects/swpat/letter-20041206.en.html
+http://fsnews.findlaw.com/cases/1st/042234.html
+http://fsos2.che.umn.edu/mtarp/Icarpapers/macdonal.htm
+http://fsu.campusrec.com/im/faq/howto.html
+http://ftad.osu.edu/dosomethinggreat/miranda.html
+http://fte.org/teachers/lessons/edsu/edsuless1.htm
+http://fte.org/teachers/lessons/edsu/edsuless3.htm
+http://fte.org/teachers/lessons/edsu/edsuless5.htm
+http://fte.org/teachers/lessons/prize/where_2many$.htm
+http://ftp.arl.mil/~mike/ping.html
+http://fuckcorporategroceries.net/
+http://fuggingitup.blogspot.com/
+http://fulcruminquiry.com/article28.htm
+http://fullcourt.scout.com/2/374331.html
+http://fullcoverage.yahoo.com/i/732
+http://fullduplex.org/tardblog/sa/1-16.htm
+http://fullmoon.typepad.com/chaos/2005/01/as_previously_a.html
+http://fullmoon.typepad.com/chaos/2005/06/oh_lord_theres_.html
+http://fumbling.com/blog/
+http://funagain.com/control/product/~product_id=013745
+http://fundraising-directory.fundraiserhelp.com/fundraiser-ideas/directory/ideas-booster-club-fundraising.html
+http://fundraising-directory.fundraiserhelp.com/fundraising-ideas/directory/high-school-booster-club-fundraising-ideas.html
+http://funds.reuters.com/lipper/retail/reuters/researchstudies.asp?type=all
+http://funds.reuters.com/lipper/retail/reuters/researchstudies.asp?type=etf
+http://fungus.org.uk/nwfg.htm
+http://funk.co.uk/2005/02/streatham-common.html
+http://funky16corners.blogspot.com/2004/12/sir-douglas-quintet-car-crash-recovery.html
+http://funnybusiness.typepad.com/funnybusiness/2005/05/
+http://fusionanomaly.net/go.html
+http://fusionanomaly.net/hairstyles.html
+http://fusionanomaly.net/mysteryofchance.html
+http://future.iftf.org/2005/01/the_value_of_ge.html
+http://future.state.gov/where/exchange/44906.htm
+http://future.state.gov/where/exchange/44928.htm
+http://future.state.gov/where/exchange/44929.htm
+http://futurecam.com/dustDevils.html
+http://futurepositive.synearth.net/2002/10/27
+http://futurepositive.synearth.net/2004/03/24
+http://futures.fxstreet.com/Futures/content/100120/content.asp?data=12/17/2004
+http://futures.fxstreet.com/Futures/content/100400/content.asp?data=1/17/2005
+http://futures.fxstreet.com/Futures/content/100400/content.asp?data=1/18/2005
+http://futures.fxstreet.com/Futures/content/100530/content.asp?data=5/31/2005
+http://futurshox.net/aero.php3
+http://fuzzysoftware.com/default.asp?id=8&parentID=233
+http://fwp.state.mt.us/mtoutdoors/HTML/Articles/2004/wardens.htm
+http://fxr.watson.org/fxr/source/mm/readahead.c?v=linux-2.6.9
+http://fyi.cnn.com/2001/fyi/teachers.ednews/08/30/girls.schools/
+http://fyi.cnn.com/2002/fyi/teachers.ednews/08/27/sat.scores/
+http://ga.redblackandgreen.net/justiceForRusty.htm
+http://ga.water.usgs.gov/edu/dictionary.html
+http://ga1.org/nmac/notice-description.tcl?newsletter_id=1199188
+http://gacc.nifc.gov/swcc/
+http://gachristiancoalition.org/chairman2.html
+http://gaclark.com/articles/debate_over_direct_marketing_vs.htm
+http://gadflyer.com/articles/?ArticleID=198
+http://gadflyer.com/articles/?ArticleID=216
+http://gadflyer.com/warandpiece/
+http://gadflyer.com/warandpiece/index.php?Week=200435
+http://gadflyonline.com/05-06-02/ftr-smile.html
+http://gag.org/newyork/pictureshow/faq.php
+http://galileo.rice.edu/lib/student_work/astronomy95/telescope_design.html
+http://galileo.rice.edu/sci/observations/saturn.html
+http://galileoandeinstein.physics.virginia.edu/lectures/sreltwins.html
+http://gallery.carnegiefoundation.org/mpincus/circle_narrative.htm
+http://gallery.poetshaven.com/bookcontents.php?action=&section=2&page=21&viewis=&id=
+http://galliform.bhs.mq.edu.au/
+http://gameboy.ign.com/articles/454/454349p1.html
+http://gameboy.ign.com/articles/507/507432p1.html
+http://gameboy.ign.com/articles/537/537972p1.html
+http://gameboy.ign.com/articles/562/562958p1.html
+http://gamefest.com/product_info.php/products_id/1222
+http://gamefest.com/product_info.php/products_id/1223
+http://gamefest.com/product_info.php/products_id/1302
+http://gamefest.com/product_info.php/products_id/985
+http://gamegroup.ziffdavis.com/rates/specs.html
+http://gamerhelp.com/gameboy_advance/PokemonFireRed/101246.shtml
+http://games.channel.aol.com/article.adp?articleID=301095
+http://games.channel.aol.com/previews.adp?gameID=26748&articleID=304864
+http://games.channel.aol.com/review.adp?gameID=8650
+http://games.espn.go.com/content/uber/2004/story?page=overallchamp
+http://games.slashdot.org/
+http://games.slashdot.org/article.pl?sid=05/02/21/1023219&tid=187&tid=97&tid=10
+http://games.softpedia.com/get/Patch/Chaos-League-Patch.shtml
+http://gamesandbeyond.com/ca/caction.html
+http://gamesandbeyond.com/review/batmobile/batmobilereview1.html
+http://gamingfloor.biz/forum/showthread.php?goto=lastpost&t=1465
+http://garden.lifetips.com/
+http://garden.lifetips.com/TipSC.asp__Q__id__E__57769
+http://garden.lifetips.com/TipSC.asp__Q__id__E__57797
+http://gardenline.usask.ca/pests/kitchen.html
+http://gardens.bobvila.com/Article/778.html
+http://gardenstate.typepad.com/zach_braffs_garden_state_/2004/09/
+http://garnet.acns.fsu.edu/~jroche/road_rod.html
+http://garnet.acns.fsu.edu/~phensel/data.html
+http://garnet.acns.fsu.edu/~whmoore/ipi/ipiscale.html
+http://garyrosenzweig.com/books/book3.html
+http://garyrosenzweig.com/books/book7.html
+http://gas.sagepub.com/cgi/content/refs/18/1/82
+http://gaslight.mtroyal.ca/gaultX04.htm
+http://gaucher.mgh.harvard.edu/living.html
+http://gauss.ffii.org/PatentView/EP760564
+http://gawdessness.blogspot.com/
+http://gay_blog.blogspot.com/2004/07/church-and-civil-rights-groups-try-to.html
+http://gaycitynews.com/gcn_358/newsbriefs.html
+http://gaycitynews.com/gcn_358/thetroublewithshirley.html
+http://gayguy.blogs.com/
+http://gazette.ireland.anglican.org/160404/letters160404.htm
+http://gazette.ireland.anglican.org/201202/index201202.htm
+http://gazette.unc.edu/archives/04jul14/file.2.html
+http://gbgm-umc.org/global_news/full_article.cfm?articleid=2709
+http://gbgm-umc.org/global_news/full_article.cfm?articleid=3260
+http://gbgm-umc.org/navitext.html
+http://gbgm-umc.org/umcor/hunger/coffee.cfm
+http://gbgm-umc.org/umhistory/wesley/advice.html
+http://gbgm-umc.org/umhistory/wesley/sermons/serm-139.stm
+http://gbgm-umc.org/umw/bible/mawomen.stm
+http://gbmna.org/a.php?id=89
+http://gbr.pepperdine.edu/014/teams.html
+http://gbxforums.gearboxsoftware.com/showthread.php?goto=lastpost&t=38358
+http://gbxforums.gearboxsoftware.com/showthread.php?t=38358
+http://gcc.gnu.org/onlinedocs/gcc-3.2.3/cpp/Traditional-Mode.html
+http://gcmd.nasa.gov/records/GCMD_TWPC2surface_meteorology.html
+http://gcrc.meds.cwru.edu/stachy/default.htm
+http://gd.cnread.net/cnread1/ewjd/g/gibbon/hor/239.htm
+http://gdl.cdlr.strath.ac.uk/100men/gm82.htm
+http://gdl.cdlr.strath.ac.uk/aspect/aspect2003/lab/a03labdfw.htm
+http://gdl.cdlr.strath.ac.uk/aspect/aspect2003/lab/a03labfaw.htm
+http://gear.ign.com/articles/307/307123p1.html
+http://gearup.k12.wv.us/?acs=sap
+http://gee.cs.oswego.edu/dl/coord/
+http://geekbird.blogspot.com/2005/05/exclusive-combat-jack-interview.html
+http://geekswithblogs.net/SabotsShell/
+http://geekswithblogs.net/ksellenrode/archive/2004/05/13/4845.aspx
+http://geekswithblogs.net/rumair/archive/2004/03/28/3460.aspx
+http://gefen.blogspot.com/2003_11_01_gefen_archive.html
+http://gefilte.blogspot.com/
+http://gemini.tntech.edu/~mwmcrae/esre95.html
+http://genealogy.about.com/library/blquery121600.htm
+http://genealogy.drefs.net/Introduction.htm
+http://genehack.net/diary/2003/03/20030324.html
+http://generous.net/nav/col.shtml
+http://geneva.rutgers.edu/src/christianity/church.html
+http://genome-www.stanford.edu/yeast-worm/worm_methods.html
+http://genome.pfizer.com/hsl3.cfm
+http://genomebiology.com/2002/3/8/interactions/1004
+http://genomebiology.com/2005/6/2/R21
+http://genomebiology.com/researchnews/default.asp?arx_id=gb-spotlight-20030814-01
+http://genomebiology.com/researchnews/default.asp?arx_id=gb-spotlight-20050324-01
+http://gentshair.com/feedback.htm
+http://genuki.cs.ncl.ac.uk/DEV/OPCproject.html
+http://genxmisanthrope.blogspot.com/2004/07/reader-emails-finally.html
+http://geo.arc.nasa.gov/sge/landsat/lcarwg3.html
+http://geochange.er.usgs.gov/sw/impacts/biology/crypto/
+http://geodsoft.com/about/making/stupid.htm
+http://geodsoft.com/book/softsys/
+http://geography.about.com/library/cia/blc3bahraine.htm
+http://geography.about.com/library/cia/blc3canadae.htm
+http://geography.about.com/library/cia/blc3usgue.htm
+http://geography.about.com/library/faq/blqzsafcapitals.htm
+http://geography.bu.edu/Faculty/Phillips/michael.htm
+http://geology.about.com/
+http://geology.about.com/library/weekly/aa080998.htm
+http://geology.dictonarypage.co.uk/
+http://geopubs.wr.usgs.gov/docs/wrgis/oct_04.html
+http://geopubs.wr.usgs.gov/i-map/i2431/
+http://georgeboone.blogspot.com/2005/02/r-kelly-has-set-new-low.html
+http://georgegraham.com/producer.html
+http://georgegraham.com/solas3.html
+http://georgemustgo.blogspot.com/
+http://geraschenko.blogspot.com/2004_06_01_geraschenko_archive.html
+http://gerd.msn.com/article.aspx?aid=27
+http://german.about.com/od/teaching/a/realia.htm
+http://germanvillage.com/
+http://gerontologist.gerontologyjournals.org/cgi/content/full/44/6/818
+http://gershkuntzman.homestead.com/files/New_Trash_City.htm
+http://gesswhoto.com/paradise-chapter6.html
+http://gestalttheory.net/archive/henle.html
+http://get.info.bg/properties/Dir.asp?r=MEZDRA
+http://getbuf.com/articles/geneticfactors.shtml
+http://getgrants.ca.gov/Topic12.html
+http://getsmaart.com/student-guides/index.php/career-news/applied-science-at-wolverhampton
+http://getthenews.net/Sam/ransom.htm
+http://gfp.typepad.com/the_garden_of_forking_pat/2004/09/free_will_and_g.html
+http://gfp.typepad.com/the_garden_of_forking_pat/2004/12/determinism_and.html
+http://ghanareview.com/review/index.php?class=Int&date=2004-11-05&id=8341
+http://ghc.ctc.edu/
+http://ghw.wordherders.net/archives/001684.html
+http://gia.azn-bish.com/
+http://giagia.blogspot.com/2004/11/this-is-where-we-begin-over-past.html
+http://gifford-observatory.wellington.net.nz/Progress.html
+http://giftshop.scottishtartans.org/
+http://gigadial.net/public/station/4605
+http://gigibeads.net/prayerbeads/saints/clareassisi.html
+http://gilletts.com.au/information.php?info_id=32
+http://gimbo.org.uk/archives/2001/07/
+http://ginnybonk.blogspot.com/
+http://ginnybonk.blogspot.com/2005/05/ah-procrastination.html
+http://ginnybonk.blogspot.com/2005_06_01_ginnybonk_archive.html
+http://giove.cnuce.cnr.it/interact2005/submit.html
+http://gippsland.seafm.com.au/conditions.asp
+http://girardianlectionary.net/res/jbw_ch4c_paul.htm
+http://girlcomeundone.com/
+http://gis.esri.com/library/userconf/proc96/camber_bosnia.htm
+http://gislounge.com/ucon/ucgml3.shtml
+http://gkokot.free.fr/ipaqp02a.htm
+http://glazkov.com/blog/archive/2005/04/18.aspx
+http://glef.org/modules/LASS/index.php
+http://glenfuller.blogspot.com/2005/05/on-shared-event-of-kiss.html
+http://glenngouldstudio.cbc.ca/box_office.html
+http://glesgapals.proboards19.com/index.cgi?action=display&board=contact&num=1071519477&start=30
+http://glimpsesofgrace.org/html/Nov98.html
+http://glish.com/css/hacks.asp
+http://global.mci.com/uk/news/newsletters/mcinews/enl.xml?snlid=61&scountry=gb&slang=en
+http://global.mci.com/us/enterprise/insight/cerfs_up/
+http://global.mci.com/us/enterprise/insight/cerfs_up/fun/
+http://global.med.cornell.edu/news/wcmc/wcmc_2005/05_16_05.shtml
+http://global.solutions.brother.com/Library/en_us/faq/faq000447_000/
+http://global.tommy.com/opencms/opencms/tommy-europe/company-info/global-labor-practices/mae-sot-norwegian-church.html
+http://global.yesasia.com/en/PrdDept.aspx/pid-1003991337/section-videos/code-k/version-all/
+http://globaledge.msu.edu/KnowledgeRoom/FeaturedInsights/0002.asp
+http://globaledge.msu.edu/ibrd/busresmain.asp?ResourceCategoryID=7
+http://globalguerrillas.typepad.com/johnrobb/
+http://globalia.net/donlope/fz/lyrics/Fillmore_East_June_1971.html
+http://globalization.about.com/
+http://globalresearch.ca.myforums.net/viewtopic.php?t=651
+http://globalrph.healthology.com/globalrph/14887.htm
+http://globblog.blogspot.com/
+http://globblog.blogspot.com/2003_06_01_globblog_archive.html
+http://globeandmail.workopolis.com/content/resource/testimonials.html
+http://globetrotter.berkeley.edu/911/courses/study_guideS05.html
+http://globetrotter.berkeley.edu/Elberg/GartonAsh/gartonash6.html
+http://globetrotter.berkeley.edu/Elberg/Hitchens/hitchens-con3.html
+http://globetrotter.berkeley.edu/conversations/Ball/ball-con4.html
+http://globetrotter.berkeley.edu/conversations/Weisskopf/weisskopf2.html
+http://globetrotter.berkeley.edu/people/York/york82-con3.html
+http://globetrotter.berkeley.edu/people2/Burghardt/burghardt-con3.html
+http://globetrotter.berkeley.edu/people2/Lyman/lyman-con2.html
+http://globetrotter.berkeley.edu/people2/Marmot/marmot-con3.html
+http://globetrotter.berkeley.edu/people2/Nagler/nagler-con3.html
+http://globetrotter.berkeley.edu/people3/Arquilla/arquilla-con2.html
+http://globetrotter.berkeley.edu/people3/Beilin/beilin-con2.html
+http://globetrotter.berkeley.edu/people3/Hass/hass-con3.html
+http://globetrotter.berkeley.edu/people3/Krasner/krasner-con4.html
+http://globetrotter.berkeley.edu/people3/MSmith/msmith-con3.html
+http://globetrotter.berkeley.edu/people4/Chu/chu-con3.html
+http://globetrotter.berkeley.edu/people4/Chu/chu-con5.html
+http://globetrotter.berkeley.edu/people4/Urquhart/urquhart04-con5.html
+http://globetrotter.berkeley.edu/people5/Dobbins/dobbins-con5.html
+http://globin.cse.psu.edu/html/pip/examples.html
+http://glocktalk.com/sitemap/topic/317628-1.html
+http://gloria-brame.com/therapy/
+http://gloryroad.blog-city.com/
+http://glowlab.com/lab/goods.php
+http://glucat.sourceforge.net/
+http://glycob.oupjournals.org/cgi/content/full/9/3/293
+http://gmj.gallup.com/content/default.asp?ci=9841
+http://gmpg.org/xfn/background
+http://gnomedesktop.org/node/2227
+http://gnomedesktop.org/taxonomy/term/32?from=75
+http://gnosis.cx/publish/mertz/eowilson.html
+http://gnrt.terena.nl/content.php?section_id=187
+http://gnso.icann.org/meetings/minutes-dow12tf-22feb05.shtml
+http://gnso.icann.org/meetings/minutes-gnso-25sep03.shtml
+http://gnu.digitaltrust.it/gnu/linux-and-gnu.html
+http://gnu.freehistory.org/gnu/linux-and-gnu.html
+http://gnu.fyxm.net/gnu/linux-and-gnu.html
+http://gnu.ghks.de/philosophy/motivation.html
+http://gnu.intissite.com/philosophy/motivation.html
+http://gnu.mirror.fr/gnu/linux-and-gnu.html
+http://go.microsoft.com/fwlink/?linkid=3052&kbid=284204
+http://go.theregister.com/pearson/100000000030876
+http://goanna.cs.rmit.edu.au/~jah/
+http://goarmysports.collegesports.com/sports/m-footbl/spec-rel/120704aac.html
+http://gobulldogs.collegesports.com/genrel/060805aaa.html
+http://gobulls.usf.edu/tickets/tickets.htm
+http://gocrimson.collegesports.com/sports/m-hockey/archive/081204aal.html
+http://god-of-small-things.blogspot.com/2004_03_03_god-of-small-things_archive.html
+http://goddamliberal.port5.com/
+http://goddem.blogspot.com/
+http://godkind.org/kind.html
+http://godonline.co.za/Article94-mode=thread-order0-threshold0.html
+http://godscopybook.blogs.com/
+http://godsdirectcontact.us/com/walkthewayofLove/spiritualleaders.html
+http://godshot.blogspot.com/2005_02_20_godshot_archive.html
+http://goes.gsfc.nasa.gov/text/goes12results.html
+http://goeurope.about.com/
+http://goeurope.about.com/cs/languages/a/language_trav.htm
+http://gofrance.about.com/b/a/168945.htm
+http://gofrance.about.com/b/a/169931.htm
+http://gofrance.about.com/b/a/2004_05_19.htm
+http://gofrance.about.com/b/archives.htm
+http://gofugyourself.typepad.com/go_fug_yourself/2005/04/a_royal_fugging_3.html
+http://gofugyourself.typepad.com/go_fug_yourself/bai_ling/
+http://gohuskies.collegesports.com/sports/m-footbl/spec-rel/101899aab.html
+http://goinside.com/01/6/ashtanga.html
+http://goinside.com/02/10/square1.html
+http://goinside.com/02/2/bank.html
+http://goinside.com/03/12/pcs.html
+http://goinside.com/97/11/qv700.html
+http://goinside.com/98/1/kirk-1.html
+http://goinside.com/98/10/llbean.html
+http://goinside.com/98/3/elite.html
+http://goinside.com/98/5/aoe.html
+http://goinside.com/99/2/concepts.html
+http://goinside.com/99/4/cfs.html
+http://goinside.com/99/9/reunion.html
+http://goland.org/financial/buyingautoinsurance.htm
+http://goldismoney.info/forums/archive/index.php/f-5.html
+http://goldsea.com/Air/Issues/Spending/spending.html
+http://goldsea.com/Parenting/Crises/crises2.html
+http://goldsea.com/Personalities/Wenmingna/wenmingna.html
+http://goldsea.com/Poll/Date/date.html
+http://golf.about.com/cs/annikasorenstam/a/annikaupdate.htm
+http://golfinvestors.com/about/get_started_investor.php
+http://golfspast.com/page/E/CTGY/HMM
+http://goliath.ecnext.com/coms2/summary_0199-273053_ITM&referid=2090
+http://goliath.inrs-ener.uquebec.ca/surfsci/sc2k2p/
+http://gonyc.about.com/od/planyourtriptonyc/a/December.htm
+http://gonzoengaged.blogspot.com/2001_10_21_gonzoengaged_archive.html
+http://goodandhappy.typepad.com/g_as_in_good_h_as_in_happ/
+http://goodfelloweb.com/werbe/rikkie.htm
+http://goodlooguide.freeservers.com/UK/
+http://goodoman.blogspot.com/2003_06_29_goodoman_archive.html
+http://googolplex.cuna.org/12433/cnote/story.html?doc_id=838
+http://googolplex.cuna.org/15378/ajsmall/story.html?doc_id=768
+http://googolplex.cuna.org/23683/ajsmall/story.html?doc_id=877
+http://gopack.collegesports.com/sports/m-footbl/spec-rel/112704aaa.html
+http://goprincetontigers.collegesports.com/sponsorship/cp-promos-entitlement.html
+http://gorp.away.com/gorp/activity/hiking/skills/found.htm
+http://gort.ucsd.edu/mtdocs/archives/ssh/cat_from_the_suggestion_box.html
+http://gos.sbc.edu/c/ct3.html
+http://gos.sbc.edu/f/ferraro.html
+http://gos.sbc.edu/k/khouri.html
+http://gos.sbc.edu/r/eleanor1.html
+http://gos.sbc.edu/s/shipley.html
+http://gotchange.blogspot.com/
+http://gouk.about.com/od/whattoseedo/
+http://gourmetsleuth.com/recipe_dogbiscuit.htm
+http://governance.wri.org/pubs_content_text.cfm?ContentID=1750
+http://governing.com/articles/10elect.htm
+http://governing.com/class.htm
+http://governing.com/gpp/2003/gp3intro.htm
+http://governing.com/notebook/prev.htm
+http://governor.mt.gov/speeches/gov/inaugural.asp
+http://govinfo.library.unt.edu/accessamerica/text/milgoods.html
+http://govinfo.library.unt.edu/npr/library/direct/memos/disputre.html
+http://govinfo.library.unt.edu/seniorscommission/pages/final_report/minorityReport.html
+http://govnet.co.uk/heading.php?magazine=1&ID=602
+http://govtsecurity.com/news/tom-ridge-difference/
+http://gr.bolt.com/games/codes/sony/bloodwalk.htm
+http://gr.bolt.com/games/dreamcast/rpg/phantasy_star_online_v2.htm
+http://gr.bolt.com/games/pc/action/half-life_2.htm
+http://gr.bolt.com/games/pc/action/half-life_counterstrike.htm
+http://gr.bolt.com/games/pc/action/unreal_return_na_pali.htm
+http://gr.bolt.com/games/pc/rpg/world_of_warcraft.htm
+http://gr.bolt.com/games/ps2/sim/dance_dance_revolution_max.htm
+http://gr.bolt.com/games/sony/action/gex_gecko.htm
+http://gr.bolt.com/games/xbox/action/simpsons_hit_and_run.htm
+http://gradpsych.apags.org/sep04/match.cfm
+http://grads.iges.org/grads/gadoc/bufrformat.html
+http://grads.iges.org/grads/gds/doc/user.html
+http://graduate.louisville.edu/prog_pubs/mentorhandbook.htm
+http://graduates.lovells.com/nextstep/calendar.shtml
+http://graham.main.nc.us/~bhammel/INS/abcnews.html
+http://grahamglass.blogs.com/main/
+http://grahamglass.blogs.com/main/2005/01/
+http://grande-bretagne.net/presshistory.htm
+http://grandrapidssafekids.org/carseatcheck.php?sec=4
+http://grannygear.com/AMTRI/rules.shtml
+http://grannyinsanity.blogspot.com/2005_02_20_grannyinsanity_archive.html
+http://grants.library.wisc.edu/individuals/internationalstudentsbooks.html
+http://grants.nih.gov/grants/glossary.htm
+http://grants.nih.gov/grants/guide/pa-files/PA-99-014.html
+http://grants.nih.gov/grants/guide/rfa-files/RFA-HL-98-010.html
+http://grants.nih.gov/grants/policy/nihgps_2001/part_iia_5.htm
+http://grants.nih.gov/grants/policy/nihgps_2001/part_iib_6.htm
+http://grants.nih.gov/training/faq_fellowships.htm
+http://graphicdesign.about.com/
+http://graphicdesign.meetup.com/boards/view/viewthread?thread=1230756
+http://graphics.csail.mit.edu/~hbriceno/climb/stroke2000/
+http://graphics.ethz.ch/~rkeiser/publications.html
+http://graphics.stanford.edu/software/scanview/instructions.html
+http://graphics.stanford.edu/~billyc/class/vis_win0304/as2/
+http://graphics.tomshardware.com/display/20021211/lcd-01.html
+http://graphics.tomshardware.com/graphic/19980202/
+http://graphics.tomshardware.com/graphic/20030930/radeon_9800-01.html
+http://graphicssoft.about.com/library/uc/g/ucg024cornelian.htm
+http://grassley.senate.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=15&Month=7&Year=2004
+http://grassley.senate.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=3554&Month=1&Year=2003
+http://grassley.senate.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=4924&Month=3&Year=2005
+http://grassley.senate.gov/index.cfm?FuseAction=PressReleases.View&PressRelease_id=4924
+http://gray-robinson.com/practice%20areas/Admiralty.html
+http://gray-seddon-tea.com/fujian.shtml
+http://graytonbeach.com/
+http://grc.com/cttech.htm
+http://grc.com/default.htm
+http://grc.com/discussions.htm
+http://greatcommandment.net/content.php?id=36
+http://greaterboston.tv/features/cj_20040722.html
+http://greatsfandf.com/AUTHORS/BranchCabell.shtml
+http://grebel.uwaterloo.ca/aboutgrebel/releases/2004_7_lenenns.shtml
+http://greeneyedpagan.blogspot.com/
+http://greenhorizon.rec.org/insight-clean.html
+http://greenleaf.uncg.edu/community_supported_agriculture.html
+http://greenpeaceweb.org/shipbreak/
+http://greenplans.rri.org/resources/greenplanningarchives/germany/archives_germany.html
+http://greenroom.nochex.com/showthread.php?t=3593
+http://greenspin.blogspot.com/2003_11_02_greenspin_archive.html
+http://greenvilleonline.com/citypeople/news/2005/01/18/2005011856976.htm
+http://greenvilleonline.com/news/specialreport/2003/01/27/20030127371.htm
+http://greg.org/archive/2003/07/
+http://gregg.senate.gov/statements/0205BudgetStatement.htm
+http://gregg.senate.gov/statements/0205Genetic_Information.htm
+http://grimreaper.org/
+http://grnydgrl.typepad.com/
+http://grognard.com/pbem.html
+http://groovy.codehaus.org/
+http://grouchygolf.blogspot.com/
+http://grouchygolf.blogspot.com/2005/05/ohair-real-iron-asshole-bastard.html
+http://ground-transport.tradeworlds.com/web_category_14508.html
+http://grouper.ieee.org/groups/754/meeting-minutes/01-10-18.html
+http://grouper.ieee.org/groups/754/meeting-minutes/02-09-19.html
+http://grouphug.us/random
+http://grouphug.us/random/friends
+http://grouphug.us/random/girls
+http://grouphug.us/random/love
+http://groups.colgate.edu/aarislam/response.htm
+http://groups.google.com/googlegroups/archive_announce_20.html
+http://groups.google.com/googlegroups/help.html
+http://groups.inf.ed.ac.uk/enhance/
+http://groups.msn.com/-Middle-Earth-/elvesbios.msnw?action=view_list&viewtype=0&row=15&sortstring=
+http://groups.msn.com/ActingFamily/general.msnw?action=get_message&mview=1&ID_Message=596
+http://groups.msn.com/AmericanFreeSpeech/thedungeon.msnw?action=get_message&mview=0&ID_Message=5980&LastModified=4675493360642300129
+http://groups.msn.com/BarrheadHighSchoolExPupils/wanttocontact.msnw?action=get_message&mview=0&ID_Message=837&LastModified=4675465468896187645
+http://groups.msn.com/BestFootForward/factsaboutmma1.msnw
+http://groups.msn.com/DealingwithChronicPain/helpfulhints.msnw
+http://groups.msn.com/DisabledWritersGroup/books.msnw
+http://groups.msn.com/DominicRoccosWeather/yourwebpage3.msnw
+http://groups.msn.com/EternalStardust/jamesleestanley71803parttwo.msnw
+http://groups.msn.com/FamiliesDealingWIthDownSyndrome/membersfamilyinfo.msnw
+http://groups.msn.com/GHCharacterBiosatGHFF/tracyquartermaine.msnw
+http://groups.msn.com/GlobalAffairs/europe.msnw?action=get_message&mview=0&ID_Message=23518&LastModified=4675469802011001393
+http://groups.msn.com/GossamerWingsGraphics/art101.msnw
+http://groups.msn.com/GrandLodgeofOntarioKofP/briefhistory.msnw
+http://groups.msn.com/GrundyNation/gcwboard.msnw?action=get_message&mview=0&ID_Message=5858&LastModified=4675493956292941496
+http://groups.msn.com/HolguinClub/aboutrelationships.msnw
+http://groups.msn.com/LosingwithGod/hintsandtips.msnw
+http://groups.msn.com/MORMONWhatDoLatterDaySaintsBelieve/readitagain1.msnw?action=get_message&mview=0&ID_Message=19025&LastModified=4675425874716413111
+http://groups.msn.com/MrBasilAmmori/laparoscopisherniarepair.msnw
+http://groups.msn.com/MyChristianDebate/discussdebate.msnw?action=get_message&mview=0&ID_Message=6785&LastModified=4675492698679070564
+http://groups.msn.com/NARCISSISTICPERSONALITYDISORDER/criticalerrors.msnw
+http://groups.msn.com/NewYorkActingStudio/general.msnw?action=get_message&mview=1&ID_Message=238
+http://groups.msn.com/NoFearCoalition/press1.msnw
+http://groups.msn.com/PRISONLONGHOUSE/tattoowithlove.msnw
+http://groups.msn.com/PaulMichaelGlaserandDavidSoulAppreciationSite/antoniofargasunofficialbiography.msnw
+http://groups.msn.com/Rumaenien2007Romania/romanianlanguage.msnw
+http://groups.msn.com/SpaceCowboySaloon/challengersts51l.msnw
+http://groups.msn.com/TeacupAndToyPetscom/waitinglistrulespart2.msnw
+http://groups.msn.com/TheVioletVoice/nancysjournal1.msnw
+http://groups.msn.com/asinglestandingteepee/alternativeenergy.msnw
+http://groups.msn.com/asinglestandingteepee/waterhowpurify.msnw
+http://groups.msn.com/asinglestandingteepee/yourwebpage10.msnw
+http://groups.msn.com/browse.msnw?catid=61&sortby=2&alphastart=Q
+http://groups.msn.com/itsaROTTnPITy/application.msnw
+http://groups.msn.com/nofearcoalition/press1.msnw
+http://groups.msn.com/spacecowboysaloon/challengersts51l.msnw
+http://groups.msn.com/whispas/morepoems.msnw
+http://groups.sims.berkeley.edu/msmdx/wiki/
+http://groups.ucanr.org/cvr/links.htm
+http://grouptravelleader.com/destination/7-99/orlando.htm
+http://grove.ufl.edu/~facss/club.htm
+http://growingsolutions.com/home/gs1/page/1/13
+http://growingsolutions.com/home/gs1/page/121/13
+http://growingsolutions.com/home/gs1/page/123/13
+http://growth-strategies.com/subpages/articles/092.html
+http://grunge.freeshell.org/sos/
+http://grunt.space.swri.edu/a-h.htm
+http://grunt.space.swri.edu/visit/px/a-h.htm
+http://gsb.uchicago.edu/news/2005-06-10h_lublin.aspx
+http://gse.ed.uiuc.edu/links.html
+http://gseweb.harvard.edu/news/features/johnson09012002.html
+http://gseweb.harvard.edu/~cso/int.html
+http://gseweb.harvard.edu/~hepg/marshall.html
+http://gslc.genetics.utah.edu/features/biowarfare/
+http://gsnv.org/
+http://gsusking.blogspot.com/
+http://gtk-wimp.sourceforge.net/news/rss.xml
+http://gtresearchnews.gatech.edu/newsrelease/advance.htm
+http://gtresearchnews.gatech.edu/newsrelease/movies.htm
+http://gtresearchnews.gatech.edu/newsrelease/reasoning.htm
+http://gtresearchnews.gatech.edu/reshor/rh-f00/math.html
+http://gtresearchnews.gatech.edu/reshor/rh-f02/fac-news.html
+http://gttr.sourceforge.net/
+http://guamcustoms.org/oco2005.htm
+http://guardian.150m.com/pentagon/what-hit-it.htm
+http://guide.darwinmag.com/technology/communications/voip/
+http://guide.darwinmag.com/technology/communications/voip/?action=print
+http://guide.gospelcom.net/resources/church-pages.php
+http://guide.gospelcom.net/resources/free-papers.php
+http://guide.gospelcom.net/resources/writing.php
+http://guide.symplicity.com/resources/industry_article.php?id=21
+http://guidelines.gov/summary/summary.aspx?ss=15&doc_id=5430&nbr=3724
+http://guides.ign.com/guides/497900/page_10.html
+http://guides.yourct.com/magazine/8/993/
+http://guitar-masters.com/Subst/Jazz2.html
+http://gundoghousedoor.com/articles/orphan_puppies.htm
+http://gunston.doit.gmu.edu/healthscience/722/frsession1.asp
+http://gunstonhall.org/georgemason/quotes.html
+http://gurno.com/adam/bleat/poker.shtml
+http://guru.krishna.org/Articles/2002/02/014.html
+http://gurukul.american.edu/heintze/stories.htm
+http://gurukul.american.edu/heintze/wilson.htm
+http://gurukul.ucc.american.edu/ted/deadsea.htm
+http://gutenberg.net.au/ausdisc/ausdisc2-04.html
+http://gutenberg.net.au/ebooks04/0400031h.html
+http://gutenberg.net.au/pgaus.html
+http://guthvenus.tripod.com/
+http://gwally.com/directions/000013.php
+http://gwally.com/directions/leaving.php
+http://gwnorth.blogspot.com/
+http://gwpapers.virginia.edu/articles/allison.html
+http://gwpapers.virginia.edu/project/stylemanual/copyediting.html
+http://gwtf.clu-in.org/resources/
+http://gyral.blackshell.com/hegel/hegedu.html
+http://h.webring.com/hub?ring=promoteyourself
+http://h.webring.com/hub?ring=royalnavyinteres
+http://h18000.www1.hp.com/products/quickspecs/11935_na/11935_na.html
+http://h18002.www1.hp.com/products/quickspecs/11411_div/11411_div_Changes.HTML
+http://h18004.www1.hp.com/products/servers/benchmarks/
+http://h20219.www2.hp.com/services/cache/106489-0-0-225-121.html
+http://h20219.www2.hp.com/services/cache/126445-0-0-225-121.html
+http://h20247.www2.hp.com/PublicSector/cache/96688-0-0-0-121.html
+http://h20247.www2.hp.com/PublicSector/cache/96688-0-0-82-150.html
+http://h30046.www3.hp.com/casestudy.php?topiccode=20040229_45509_0_121_0_0&pagesite=SUCCESS
+http://h40084.www4.hp.com/events/universe/2004/a-z.php
+http://h50025.www5.hp.com/hpcom/my_en/10_25_102_2685sna.html
+http://h50025.www5.hp.com/hpcom/my_en/10_25_59_861sna.html
+http://h50025.www5.hp.com/hpcom/my_en/10_25_86_2531sna.html
+http://h71000.www7.hp.com/wizard/wiz_9475.html
+http://h71036.www7.hp.com/hho/cache/275-0-0-225-121.aspx
+http://h71036.www7.hp.com/hho/cache/275-0-0-39-121.aspx
+http://h71036.www7.hp.com/hho/cache/342-0-0-225-121.aspx
+http://haasadventures.blogspot.com/
+http://habitaten.artgroup.com/mall/infopageviewer.cfm?store=HabitatEN&pagename=help
+http://hackvan.com/etext/studies-find-rewards-often-no-motivator.html
+http://hadm.sph.sc.edu/
+http://hagar.up.ac.za/catts/abc/rbo96.html
+http://hagsociety.tripod.com/
+http://hah.ask.co.uk/docs/about/affiliates_agreement.asp
+http://haitipolicy.org/content/2430.htm
+http://haitisupport.gn.apc.org/urgent.htm
+http://haldjas.folklore.ee/~aado/infl.htm
+http://hamsterrepublic.com/james/writing/stories/it-closed-with-a-click.html
+http://handbooks.btcv.org.uk/handbooks/content/section/1584
+http://hannah.smith-family.com/archive/000740.html
+http://happy.net.ut.ee/42/archives/000478.html
+http://happyandblue2.blogspot.com/
+http://happyhomeschooler.blog-city.com/
+http://happyhooking.blogspot.com/
+http://hardlyart.blogspot.com/2004_09_01_hardlyart_archive.html
+http://hardlyart.blogspot.com/2005_04_01_hardlyart_archive.html
+http://hardware.gamespot.com/AOpen-QF-50A-F-16-22-x-x
+http://hardware.gamespot.com/Apex-ATX-2900MA-F-16-22-x-x
+http://hardware.gamespot.com/Cases-F-16-22-x-x
+http://hardware.gamespot.com/Cooler-Master-Praetorian-PAC-T01-E1-F-16-22-x-x
+http://harpur.binghamton.edu/campus/policy.htm
+http://harrylimetheme.blogspot.com/2004_09_01_harrylimetheme_archive.html
+http://hartford.about.com/c/ht/00/07/How_Obtain_Connecticut_Marriage0962933321.htm
+http://hartford.about.com/od/gardencenters/l/aadzentreefarm.htm
+http://harvester.embl.de/harvester/Q9BX/Q9BXQ7.htm
+http://hasbrouck.org/blog/archives/000192.html
+http://hasbrouck.org/blog/archives/000203.html
+http://hasbrouck.org/blog/archives/000258.html
+http://hassid.blogspot.com/2005/04/royal-couple.html
+http://havanajournal.com/business/C0_56_4/
+http://havanajournal.com/culture_archives/A2004073/
+http://havanajournal.com/culture_comments/A1320_0_3_0_M/
+http://havanajournal.com/culture_comments/A1932_0_3_0_M/
+http://hawaii.indymedia.org/news/2003/07/3037_comment.php
+http://hawaiianlanguage.com/o-localhawaiian-k.html
+http://hawaiiweathertoday.com/content.php?pid=19
+http://hawkeyeview.blogspot.com/2004/12/p-o-r-n-o-g-r-p-h-y.html
+http://hazard.com/msds/man/man.html
+http://hazing.cornell.edu/pages/research.shtml
+http://hbswk.hbs.edu/item.jhtml?id=1165&t=finance
+http://hbswk.hbs.edu/item.jhtml?id=1609&t=finance
+http://hbswk.hbs.edu/item.jhtml?id=1949&t=heskett&oid=1949&rid=-1&hid=1952&aid=1951
+http://hbswk.hbs.edu/item.jhtml?id=2121&t=nonprofit
+http://hbswk.hbs.edu/item.jhtml?id=2538&t=organizations.
+http://hbswk.hbs.edu/item.jhtml?id=2722&t=nonprofit
+http://hbswk.hbs.edu/item.jhtml?id=2732&t=globalization
+http://hbswk.hbs.edu/item.jhtml?id=2732&t=marketing&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=2732&t=strategy&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=2839&t=outsourcing
+http://hbswk.hbs.edu/item.jhtml?id=2970&t=globalization
+http://hbswk.hbs.edu/item.jhtml?id=2970&t=globalization&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3029&t=globalization
+http://hbswk.hbs.edu/item.jhtml?id=3029&t=globalization&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3075&t=globalization
+http://hbswk.hbs.edu/item.jhtml?id=3075&t=globalization&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3075&t=leadership
+http://hbswk.hbs.edu/item.jhtml?id=3087&t=nonprofit
+http://hbswk.hbs.edu/item.jhtml?id=3409&t=leadership
+http://hbswk.hbs.edu/item.jhtml?id=3418&t=heskett&oid=3417&rid=3418&hid=3448&aid=-1
+http://hbswk.hbs.edu/item.jhtml?id=3420&t=finance
+http://hbswk.hbs.edu/item.jhtml?id=3420&t=operations&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3459&t=innovation&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3459&t=marketing&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3459&t=technology&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3483&t=career_effectiveness&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3483&t=organizations
+http://hbswk.hbs.edu/item.jhtml?id=3483&t=organizations&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3483&t=srobbins
+http://hbswk.hbs.edu/item.jhtml?id=3483&t=strategy&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3493&t=bizhistory&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3500&t=leadership&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3500&t=moral_leadership&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3738&t=bizhistory
+http://hbswk.hbs.edu/item.jhtml?id=3780&t=bizhistory
+http://hbswk.hbs.edu/item.jhtml?id=3780&t=bizhistory&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3780&t=innovation&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3780&t=marketing
+http://hbswk.hbs.edu/item.jhtml?id=3780&t=strategy&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3844&t=strategy&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3917&t=finance
+http://hbswk.hbs.edu/item.jhtml?id=3966&t=moral_leadership
+http://hbswk.hbs.edu/item.jhtml?id=3990&t=bizhistory&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=3990&t=entrepreneurship
+http://hbswk.hbs.edu/item.jhtml?id=3990&t=nonprofit&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=4115&t=operations
+http://hbswk.hbs.edu/item.jhtml?id=4134&t=srobbins
+http://hbswk.hbs.edu/item.jhtml?id=4137&t=technology
+http://hbswk.hbs.edu/item.jhtml?id=4238&t=entrepreneurship
+http://hbswk.hbs.edu/item.jhtml?id=4240&t=career_effectiveness
+http://hbswk.hbs.edu/item.jhtml?id=4240&t=organizations&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=4268&t=innovation
+http://hbswk.hbs.edu/item.jhtml?id=4269&t=operations&noseek=one
+http://hbswk.hbs.edu/item.jhtml?id=4277&t=organizations
+http://hbswk.hbs.edu/item.jhtml?id=4359&t=heskett&oid=4359&rid=4368&hid=4398&aid=-1
+http://hbswk.hbs.edu/item.jhtml?id=4368&t=heskett&oid=4359&rid=4368&hid=4398&aid=-1
+http://hbswk.hbs.edu/item.jhtml?id=4429&t=innovation
+http://hbswk.hbs.edu/item.jhtml?id=4438&t=srobbins
+http://hbswk.hbs.edu/item.jhtml?id=4538&t=career_effectiveness
+http://hbswk.hbs.edu/item.jhtml?id=4563&t=leadership
+http://hbswk.hbs.edu/item.jhtml?id=4573&t=leadership
+http://hbswk.hbs.edu/item.jhtml?id=4587&t=finance
+http://hbswk.hbs.edu/item.jhtml?id=4599&t=globalization
+http://hbswk.hbs.edu/item.jhtml?id=4599&t=strategy
+http://hbswk.hbs.edu/item.jhtml?id=4782&t=dispatch
+http://hbswk.hbs.edu/item.jhtml?id=4824&t=career_effectiveness
+http://hbswk.hbs.edu/item.jhtml?id=4824&t=organizations
+http://hbswk.hbs.edu/item.jhtml?id=4828&t=srobbins
+http://hbswk.hbs.edu/item.jhtml?id=4834&t=technology
+http://hbswk.hbs.edu/item.jhtml?id=4835&t=entrepreneurship
+http://hbswk.hbs.edu/item.jhtml?id=4854&t=dispatch
+http://hbswk.hbs.edu/item.jhtml?id=841&t=finance
+http://hbswk.hbs.edu/item_sidebar.jhtml?id=4778
+http://hbswk.hbs.edu/pubitem.jhtml?id=1382&t=special_reports
+http://hbswk.hbs.edu/pubitem.jhtml?id=1793&t=special_reports
+http://hbswk.hbs.edu/pubitem.jhtml?id=2188&t=special_reports
+http://hbswk.hbs.edu/pubitem.jhtml?id=2732&t=globalization
+http://hbswk.hbs.edu/pubitem.jhtml?id=2855&t=knowledge
+http://hbswk.hbs.edu/pubitem.jhtml?id=3087&t=nonprofit
+http://hbswk.hbs.edu/pubitem.jhtml?id=3170&t=dispatch
+http://hbswk.hbs.edu/pubitem.jhtml?id=3188&t=marketing
+http://hbswk.hbs.edu/pubitem.jhtml?id=3420&t=finance
+http://hbswk.hbs.edu/pubitem.jhtml?id=3459&t=innovation
+http://hbswk.hbs.edu/pubitem.jhtml?id=3483&t=srobbins
+http://hbswk.hbs.edu/pubitem.jhtml?id=3500&t=organizations
+http://hbswk.hbs.edu/pubitem.jhtml?id=3583&t=organizations
+http://hbswk.hbs.edu/pubitem.jhtml?id=3780&t=bizhistory
+http://hbswk.hbs.edu/pubitem.jhtml?id=3917&t=special_reports
+http://hbswk.hbs.edu/pubitem.jhtml?id=3990&t=special_reports
+http://hbswk.hbs.edu/pubitem.jhtml?id=4587&t=finance
+http://hbswk.hbs.edu/specialReport.jhtml?id=2268&t=special_reports
+http://hca.gilead.org.il/danish.html
+http://hcch.e-vision.nl/index_en.php?act=conventions.text&cid=71
+http://hcd2.bupa.co.uk/fact_sheets/html/conjunctivitis.html
+http://hcd2.bupa.co.uk/fact_sheets/html/hospital_treatments_heart.html
+http://hcd2.bupa.co.uk/fact_sheets/html/leaving_children.html
+http://hclabs.ncsu.edu/responsibilities.html
+http://hcr3.isiknowledge.com/formViewCharacteristic.cgi?table=Publication&link1=Browse&link2=Results&link3=Biography&id=1780
+http://hcrenewal.blogspot.com/2005/05/troubling-study-of-contracts-between.html
+http://hcs.harvard.edu/manager/policy.shtml
+http://hcs.harvard.edu/~pslm/livingwage/dissent.html
+http://hdf.ncsa.uiuc.edu/HDF5/doc/Groups.html
+http://hdfeos.gsfc.nasa.gov/hdfeos/HDFEOS_status/HDFEOSStatus.htm
+http://hdr.undp.org/hd/glossary.cfm
+http://hea-www.harvard.edu/~fine/opinions/childcarriers.html
+http://headaches.about.com/cs/druginfo/a/fiorinal_care.htm
+http://headaches.about.com/library/weekly/aa-dell.htm
+http://headaches.about.com/od/asktheclinicia1/f/110204_5f.htm
+http://headheeb.blogmosis.com/archives/027565.html
+http://headlines.agapepress.org/archive/10/afa/252004a.asp
+http://headrush.typepad.com/creating_passionate_users/2004/12/learning_isnt_a.html
+http://headrush.typepad.com/creating_passionate_users/2005/01/learning_doesnt.html
+http://headrush.typepad.com/creating_passionate_users/2005/05/context_matters.html
+http://headrush.typepad.com/creating_passionate_users/2005/05/managements_rol.html
+http://headrush.typepad.com/creating_passionate_users/2005/06/your_turn_freer.html
+http://healersoftheworld.com/services/astrosun.html
+http://healing.about.com/cs/selfactualization/a/gutinstincts.htm
+http://healing.about.com/library/bl_book_painbuster.htm
+http://healing.about.com/library/bl_essence_rescue.htm
+http://healing.about.com/library/weekly/aa010899.htm
+http://healing.about.com/od/breathwork/
+http://healingiraq.blogspot.com/
+http://healingiraq.blogspot.com/archives/2003_12_01_healingiraq_archive.html
+http://healingiraq.blogspot.com/archives/2004_04_01_healingiraq_archive.html
+http://health-information.advanceweb.com/common/editorial/editorial.aspx?CC=25174
+http://health.allrefer.com/alternative-medicine/dietary-supp-ex.html
+http://health.allrefer.com/health/celiac-disease-sprue-pictures-images.html
+http://health.allrefer.com/health/fat-burning-and-exercise-info.html
+http://health.asiangate.com/English/Immunization_WhatWouldHappen.html
+http://health.byu.edu/HPfaq.asp
+http://health.csusb.edu/CourseDescripHealth.htm
+http://health.discovery.com/centers/articles/articles.html?chrome=c14&article=LC_121&center=p10
+http://health.discovery.com/centers/loverelationships/articles/dating_rules.html
+http://health.discovery.com/centers/loverelationships/articles/divorce.html
+http://health.discovery.com/encyclopedias/2349.html
+http://health.discovery.com/encyclopedias/3166.html
+http://health.discovery.com/minisites/dna/zs_forensics.html
+http://health.indiatimes.com/articleshow/910413.cms
+http://health.ivillage.com/active/astrength/0,,6ffp-3,00.html
+http://health.ivillage.com/active/astrength/0,,6ffp-p,00.html
+http://health.ivillage.com/diabetesthy/di/0,,pzkf-p,00.html
+http://health.mattersonline.net/ClinicalEffectiveness/default.htm
+http://health.msn.com/dailytips/964598.armx
+http://health.state.ga.us/programs/emerprep/links.asp
+http://health.telegraph.co.uk/health/main.jhtml?xml=/health/2001/08/31/htime31.xml
+http://health.yahoo.com/centers/women/19985.html
+http://health.yahoo.com/clinical_trials/onc_s0127_IA.html
+http://health.yahoo.com/drug/202216/
+http://health.yahoo.com/drug/202216/_overview
+http://health.yahoo.com/drug/202216/precaution
+http://health.yahoo.com/drug/d00380a1
+http://health.yahoo.com/ency/adam/000967/overview
+http://health.yahoo.com/ency/adam/002391/overview
+http://health.yahoo.com/ency/adam/003054
+http://health.yahoo.com/ency/healthwise/_ps1324
+http://health.yahoo.com/ency/healthwise/ps1324
+http://health.yahoo.com/ency/healthwise/ps1349
+http://health.yahoo.com/ency/healthwise/ps1458
+http://health.yahoo.com/ency/healthwise/ps1582
+http://health.yahoo.com/ency/healthwise/ta7012
+http://health.yahoo.com/ency/healthwise/tx4097abc
+http://health.yahoo.com/ency/healthwise/tx4185
+http://health.yahoo.com/health/centers/diabetes/22
+http://health.yahoo.com/health/centers/pregnancy/438
+http://health.yahoo.com/health/centers/pregnancy/438.html
+http://health.yahoo.com/health/centers/relationships/1652.html
+http://health.yahoo.com/health/centers/sleep_disorders/103
+http://health.yahoo.com/health/centers/women/19985.html
+http://health.yahoo.com/health/centers/work_life/1921
+http://health.yahoo.com/health/encyclopedia/000739/0.html
+http://health.yahoo.com/news/34890
+http://health.yahoo.com/news/53786
+http://health.yahoo.com/news/54238
+http://health.yahoo.com/news/77456
+http://health.yahoo.com/news/_77446
+http://healthandenergy.com/gasoline_prices.htm
+http://healthandenergy.com/the_oil_we_eat.htm
+http://healthandenergy.com/where_are_we_headed.htm
+http://healthcare.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=JY43C6KQW6VBRKJS06
+http://healthcenter.ucdavis.edu/selfcare/sprains.htm
+http://healthfullife.umdnj.edu/archives/lung_cancer_archive.htm
+http://healthfullife.umdnj.edu/story/
+http://healthgate.partners.org/browsing/browseContent.asp?fileName=%09%09%09%0914847.xml&title=Myringotomy
+http://healthjournal.upmc.com/0605/AEmigraines.htm
+http://healthlink.mcw.edu/article/1031002366.html
+http://healthlink.mcw.edu/article/1031002459.html
+http://healthlink.mcw.edu/article/907444461.html
+http://healthnet.umassmed.edu/chinfhealth/foryou.html
+http://healthquarterly.com/spring_2003/default.asp?filename=HQspringDepressionLBDS&adfile=ads11
+http://healthsignals.typepad.com/newyork/2004/10/whos_got_the_da.html
+http://healthweb.nashville.org/env/food/food_scores/env_1099fscr.html
+http://healthydrinkingscience.com/howfegoandme.html
+http://healthyskinshop.com/
+http://heartburn.about.com/
+http://heartcorps.com/melanie/diary/diary013.htm
+http://heartdisease.about.com/cs/riskfactors/a/highrisk.htm
+http://heartjnl.highwire.org/cgi/content/abstract/79/4/345
+http://heartsoulandhumor.blogspot.com/
+http://heartspring.net/infections.html
+http://heasarc.gsfc.nasa.gov/docs/heasarc/mou.html
+http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/general/ogip_93_001/ogip_93_001.html
+http://heather.cs.ucdavis.edu/~matloff/Elvis/Doc/elvisexp.html
+http://heatherw.com/mk/seen.htm
+http://heavensangel.net/rudolph2.htm
+http://heavy-metals.gpa.unep.org/
+http://hebert.kitp.ucsb.edu/studio/a-m/mb-v.html
+http://hec.osu.edu/news/memoriam/
+http://hectorshardware.com/hectors876/plumdep.html
+http://hectorshardware.com/hotshothotbe.html
+http://heg.tonbridge-school.co.uk/resources.usml
+http://heismanpundit.com/?postid=331
+http://helendowland.terminus.net.au/If%20my%20child%20seems%20happy%20at%20school%20is%20all%20ok.htm
+http://helios.bto.ed.ac.uk/bto/microbes/control.htm
+http://hellskitchen.net/
+http://helmethair.gluestain.com/
+http://help-csli.stanford.edu/tex/suthesis/
+http://help.deviantart.com/23/
+http://help.discogs.com/wiki/SubmissionGuidelinesUpdatingArtist
+http://help.eclipse.org/help30/topic/org.eclipse.jdt.doc.user/tasks/tasks-9.htm
+http://help.enterthegame.com/etg-rules.htm
+http://help.internet-trading1.com/notices/FastMarkets.html
+http://help.twcable.com/html/twc_sub_agreement.html
+http://help.yahoo.com/help/au/auct/agen/agen-09.html
+http://help.yahoo.com/help/sg/auct/agen/agen-09.html
+http://help.yahoo.com/help/uk/paydirect/faq/faq-17.html
+http://help.yahoo.com/help/us/fin/port/port-18.html
+http://help.yahoo.com/help/us/paydirect/faq/faq-17.html
+http://helpdesk.ebid.tv/
+http://hem.dis.anl.gov/eehem/01/010316.html
+http://hem.dis.anl.gov/eehem/96/960709.html
+http://hem.dis.anl.gov/eehem/98/980915.html
+http://hem.dis.anl.gov/eehem/99/990112.html
+http://hem.dis.anl.gov/eehem/99/990912.html
+http://hem.dis.anl.gov/eehem/99/991102.html
+http://hendrix.imm.dtu.dk/services/jerne/brede/WOEXP_109.html
+http://hendrix.imm.dtu.dk/services/jerne/brede/WOEXP_245.html
+http://henning.makholm.net/
+http://henryblog.blogspirit.com/archive/2005/01/23/boring_sat.html
+http://henrysturman.com/english/articles/passivesmoking.html
+http://henton.com/tele/0cents.html
+http://henton.com/tele/purpose.html
+http://hepatitis-central.com/hcv/whatis/vl.html
+http://hepatitis.va.gov/vahep?page=nw-00-00
+http://hepatitis.va.gov/vahep?page=tp03-01-05-93
+http://hepunx.rl.ac.uk/uknf/sg/2003-09-09-Seed/response-2003-09-09.txt
+http://herald-review.com/askourexpert/cardwell.php
+http://herbalifedistributor.herbalcoach.com/
+http://herbaria.plants.ox.ac.uk/dlf/collaboration.htm
+http://here-and-now.org/judith/purpose.html
+http://herecomeseverybody.blogspot.com/2004/11/marcella-durand-is-author-of-western.html
+http://hereticalideas.com/index.php?cat=35
+http://heretogoal.blogspot.com/
+http://heritage.scotsman.com/news.cfm?id=599502005
+http://heritage.scotsman.com/people.cfm?id=41822005
+http://heritage.scotsman.com/topics.cfm?tid=1272&id=1338482003
+http://hes.lbl.gov/hes/geninfo.html
+http://hgi.columbus-dublin-ohio.ezhotelsite.com/
+http://hgic.clemson.edu/factsheets/HGIC2505.htm
+http://hgtv.ca/tv/schedule/default.asp?scheduleTime=afternoon&dateDelta=6
+http://hhi.corecom.com/spyware.htm
+http://hibernian.netsource.ie/insurance/motor.asp
+http://hiddenway.tripod.com/hero/rules.html
+http://highdesertfarmersmarket.com/hdfmvrpage.html
+http://highered.mcgraw-hill.com/sites/0070889740/student_view0/chapter5/cyberlecture.html
+http://highered.mcgraw-hill.com/sites/0072396814/information_center_view0/a_text_feature_summary.html
+http://highergroundmusic.com/calendar/?show=48
+http://highlands.gospelcom.net/journals/hsc/
+http://highschooljournalism.org/teachers/LessonPlan_Display.cfm?Type=L&LessonplanId=285&AuthorId=159
+http://hightower.fmp.com/weblog.php
+http://hike.mountainzone.com/blogs/
+http://hikingincolorado.org/morm.html
+http://hillcrestbb.com/bedandbreakfast.htm
+http://hilt.cdlr.strath.ac.uk/Reports/museumsreport.html
+http://hilt.cdlr.strath.ac.uk/bib/BrowseHilt.cfm?Query=Technological%20Solutions
+http://hilton.org.uk/budapest.phtml
+http://hilton.org.uk/international_assignment.phtml
+http://hinduwebsite.com/selfdevt/career.htm
+http://hinduwebsite.com/selfdevt/onlosingjob.htm
+http://hinessight.blogs.com/church_of_the_churchless/science/
+http://hinojosa.house.gov/
+http://hipforums.com/forums/archive/index.php/t-21364.html
+http://hiqnews.megafoundation.org/GoF157.htm
+http://hir.harvard.edu/articles/1253/
+http://hire.unlv.edu/parents/parents.htm
+http://hirr.hartsem.edu/bookshelf/clergywomen_summary.html
+http://hirr.hartsem.edu/cong/cong_website_review_index.html
+http://hiru.mcmaster.ca/acpjc/Pplong.htm
+http://his.osu.edu/webdev/webtools/definitions.cfm
+http://hiskidsradio.gospelcom.net/quicklinks/?category=Seasonal%20Stuff
+http://histalk.blog-city.com/
+http://histalk.blog-city.com/an_exclusive_interview_with_erik_johnson_managing_director_of_the_advisory_board_company.htm
+http://historicaltextarchive.com/sections.php?op=viewarticle&artid=721
+http://historiccamdencounty.com/ccnews04.shtml
+http://historiccamdencounty.com/ccnews81.shtml
+http://history-nz.org/discovery1.html
+http://history-sites.com/mb/cw/vacwmb/index.cgi?noframes;read=1050
+http://history.amedd.army.mil/booksdocs/korea/recad1/ch10-2.htm
+http://history.berkeley.edu/faculty/Carson/carson_heis.html
+http://history.berkeley.edu/faculty/Carson/fall02/138/class25.html
+http://history.evansville.net/industry.html
+http://history.hanover.edu/hhr/98/hhr98_1.html
+http://history.hanover.edu/hhr/hhr4-1.html
+http://history.hyperjeff.net/hypercomplex.html
+http://history.osu.edu/projects/coal/1902AnthraciteStrike/MitchellLaborLeader/MitchellLaborLeader.htm
+http://history.sandiego.edu/gen/20th/coldwarspies.html
+http://history1900s.about.com/library/misc/blnobelchem.htm
+http://history1900s.about.com/od/holocaust/a/gerstein.htm
+http://historymatters.gmu.edu/browse/manypasts/
+http://historymatters.gmu.edu/d/5563/
+http://historymatters.gmu.edu/d/5712
+http://historymatters.gmu.edu/d/6448/
+http://historymatters.gmu.edu/mse/letters/model2.html
+http://historymatters.gmu.edu/search.php?function=print&id=5563
+http://historynet.com/acw/blvicksburg/
+http://historynet.com/wwii/bleaglesnest/
+http://hisxpress.com/studio-2000-dvds.html
+http://hisxpress.com/vhs-gay-video.html
+http://hisxpress.com/vhs-tapes-by-studio.html
+http://hit.demonhosting.co.uk/cgi-bin/yabb/YaBB.cgi/YaBB.cgi?board=trib;action=display;num=1101763224
+http://hit.demonhosting.co.uk/cgi-bin/yabb/YaBB.cgi/YaBB.cgi?board=trib;action=display;num=1104199987
+http://hit.demonhosting.co.uk/cgi-bin/yabb/YaBB.cgi/YaBB.cgi?board=trib;action=display;num=1107211593
+http://hitspot.state.tn.us/hitspot/stdtnpop.htm
+http://hivaidsclearinghouse.unesco.org/ev_en.php?ID=1663_201&ID2=DO_TOPIC
+http://hivinsite.ucsf.edu/InSite.jsp?doc=2098.3df4&page=pr-04-02
+http://hjem.get2net.dk/gronlund/Aarhus_void94.html
+http://hm.indymedia.org/newswire/index.php?section=&category=&limit_start=6600
+http://hmg.oupjournals.org/cgi/content/full/6/3/357
+http://hmiworld.org/hmi/past_issues/May_June_2002/feature_dresden.html
+http://hmiworld.org/hmi/past_issues/Sept_Oct_2002/features_health_systems.html
+http://hms.harvard.edu/admissions/default.asp?page=admissions
+http://hn01.dhs.vic.gov.au/bodw/Home.asp
+http://hnn.us/articles/10904.html
+http://hnn.us/articles/1207.html
+http://hnn.us/articles/1491.html
+http://hnn.us/articles/1518.html
+http://hnn.us/articles/1671.html
+http://hnn.us/articles/1711.html
+http://hnn.us/articles/5650.html
+http://hnn.us/articles/691.html
+http://hnn.us/articles/7288.html
+http://hnn.us/articles/895.html
+http://hnn.us/articles/900.html
+http://hnn.us/articles/920.html
+http://hnn.us/articles/9949.html
+http://hnn.us/blogs/25.html
+http://hnn.us/blogs/4.html
+http://hnn.us/blogs/archives/25/2004/07/
+http://hnn.us/blogs/archives/3/2004/01/
+http://hnn.us/roundup/11.html
+http://hnn.us/roundup/comments/9446.html
+http://hobbit.griffler.co.nz/CXANZ.html
+http://hockeyjournal.com/women/200501/harvard12.htm
+http://hoder.com/cgi-bin/mt-comments.cgi?entry_id=9382
+http://hoder.com/weblog/
+http://hoder.com/weblog/archives/014173.shtml
+http://hoder.com/weblog/archives/2004_09_01_index.html
+http://hoder.com/weblog/archives/2005_01_01_index.html
+http://hogandata.com/act/
+http://holisticonline.com/Remedies/weight/weight_risk-factors-and-causes-of-obesity.htm
+http://hollylisle.com/greylog/archives/00000048.html
+http://holonet.swrpgnetwork.com/showthread.php?s=&threadid=16988
+http://holovaty.com/blog/archive/2004/07/19/2210
+http://holywhapping.blogspot.com/
+http://holzkontor.us/rainbow.php
+http://home-school.com/
+http://home-security.youdoitsecurity.com/security-contact.htm
+http://home.aanet.com.au/robertw/FAQ.html
+http://home.absurgery.org/default.jsp?policyappeals
+http://home.alltel.net/johnshan/contest_ss_tips.html
+http://home.att.ne.jp/red/gaijin/tribal-hardware/211_fiend.html
+http://home.att.net/~Berliner-Ultrasonics/lirrhs.html
+http://home.att.net/~DLeddy/signs.html
+http://home.att.net/~Resurgence/L-taxestheft.htm
+http://home.att.net/~Tom.Horsley/phonetale/markII.html
+http://home.att.net/~a.junkins/scots.html
+http://home.att.net/~allaboutromance/uktripday4.html
+http://home.att.net/~allaboutromance/uktripday8.html
+http://home.att.net/~artarchives/strangelyfamiliar.html
+http://home.att.net/~berliner-ultrasonics/limpsuff.html
+http://home.att.net/~coriolan/places/hbp.htm
+http://home.att.net/~cwletters/Letters_Chronology.htm
+http://home.att.net/~doctordialtone/aletha.htm
+http://home.att.net/~edboots/edwardnboots.htm
+http://home.att.net/~francis-noel/jgexile.html
+http://home.att.net/~jackthompson/page62.htm
+http://home.att.net/~jak.stargate/wsb/html/view.cgi-html2.html--SiteID-458427.html
+http://home.att.net/~jbcole/humor/Microsoft_patents.htm
+http://home.att.net/~larvaluebug/archlarry2-01.html
+http://home.att.net/~mwhodges/debt.htm
+http://home.att.net/~nickols/KM_and_Processes.htm
+http://home.att.net/~nickols/review_behavior.htm
+http://home.att.net/~rayfontaine/
+http://home.att.net/~rayfontaine/home.htm
+http://home.att.net/~rjnorton/Lincoln49.html
+http://home.att.net/~texhwyman/autobahn.htm
+http://home.att.net/~topconcollection/Main-Page/page28.html
+http://home.avianto.com/archives/2004/03/
+http://home.bluepin.net.au/sdn/ian_mason/vision/aware_society_14.htm
+http://home.bresnan.net/~bpratt15/existing_rolling_stock.htm
+http://home.c2i.net/monsalvat/progress.htm
+http://home.christianity.com/topics/bible_study/generalletters/103653.html
+http://home.clara.net/chriswinter/1970.htm
+http://home.clara.net/chriswinter/1977.htm
+http://home.clara.net/wfha/wales/feedback.htm
+http://home.clara.net/xenotoca/variety.htm
+http://home.clear.net.nz/pages/cpa/news/MajorityRule.htm
+http://home.clear.net.nz/pages/cpa/news/news.html
+http://home.cogeco.ca/~camstuff/dnd_realworld.txt
+http://home.cogeco.ca/~mansion/stevens1.html
+http://home.cogeco.net/~vsi/other%20programs.htm
+http://home.columbus.rr.com/ancienttextiles/Social%20Responsibility%20Textile%20Fiber%20Industry.htm
+http://home.columbus.rr.com/murrell/Final.htm
+http://home.comcast.net/~MEWF_Short_Stories/DeaconThomasWalesWill.htm
+http://home.comcast.net/~arrefmak/zsar.htm
+http://home.comcast.net/~buck0/app.htm
+http://home.comcast.net/~dblaine/gimdoc/gimdoc6.html
+http://home.comcast.net/~fosteronfilm/shortmod.htm
+http://home.comcast.net/~garbl/stylemanual/a.htm
+http://home.comcast.net/~garbl/stylemanual/m.htm
+http://home.comcast.net/~garbl/stylemanual/p.htm
+http://home.comcast.net/~garbl/stylemanual/s.htm
+http://home.comcast.net/~garbl/stylemanual/tthruu.htm
+http://home.comcast.net/~mabhat/pages/roots.htm
+http://home.comcast.net/~neoeugenics/miele.htm
+http://home.comcast.net/~peterbarnes/PBPersna2.htm
+http://home.comcast.net/~robertandmichael/garden_2004.htm
+http://home.cshore.com/himes/dennis/sa.htm
+http://home.cwru.edu/cwru_gss/reorg/ftdinfo.html
+http://home.cwru.edu/~ijd3/authorship/
+http://home.cwru.edu/~sjr16/advanced/comets.html
+http://home.debitel.net/user/RMittelstaedt/Money/Exchange.htm
+http://home.earthlink.net/~alanyu76/part2a19.htm
+http://home.earthlink.net/~astrology/confessi.html
+http://home.earthlink.net/~beverlyandjim/id6.html
+http://home.earthlink.net/~bmattlin/id17.html
+http://home.earthlink.net/~busenitz/bs.html
+http://home.earthlink.net/~cevent/11-4-04_king_coal.html
+http://home.earthlink.net/~cnew/research.htm
+http://home.earthlink.net/~count_belisarius/camejo3.htm
+http://home.earthlink.net/~ddstuhlman/defin1.htm
+http://home.earthlink.net/~dianegreco/
+http://home.earthlink.net/~djmp/Mathematica.html
+http://home.earthlink.net/~durable/
+http://home.earthlink.net/~ellozy/4000-footer-club.html
+http://home.earthlink.net/~firstunivsalem/html/sermon100503.htm
+http://home.earthlink.net/~fomalhaut/fcfaq.html
+http://home.earthlink.net/~germania46/scott.htm
+http://home.earthlink.net/~glhr/aboutglh.htm
+http://home.earthlink.net/~haskman/loophole.htm
+http://home.earthlink.net/~hsbecker/mills.html
+http://home.earthlink.net/~hsbecker/theory.html
+http://home.earthlink.net/~jarmstrongatech/JustStanding.html
+http://home.earthlink.net/~jesmith/Char99.html
+http://home.earthlink.net/~jimlux/
+http://home.earthlink.net/~johnrpenner/Articles/EmbryonicCosmo.html
+http://home.earthlink.net/~kdthrge/
+http://home.earthlink.net/~mrob/pub/math/largenum.html
+http://home.earthlink.net/~mrob/pub/math/numbers-10.html
+http://home.earthlink.net/~mrob/pub/math/numbers-6.html
+http://home.earthlink.net/~neoludd/crunch.htm
+http://home.earthlink.net/~patriciahendricksen/_wsn/page3.html
+http://home.earthlink.net/~phlow/music_f.htm
+http://home.earthlink.net/~smithmoran/stfnewsletter2-3.html
+http://home.earthlink.net/~solidarity/leadership.html
+http://home.earthlink.net/~steve_waldee/faq.htm
+http://home.earthlink.net/~tedthebear/chapter%20four.html
+http://home.earthlink.net/~truth444/BRG5-1-2WrkrMarried.html
+http://home.eg-gym.dk/fagene/religion/Ortodokse%20kirke/dox.html
+http://home.entouch.net/dmd/oandgart.htm
+http://home.epix.net/~hawkmtn/rowe.html
+http://home.epix.net/~landis/antelope.html
+http://home.epix.net/~landis/histry.html
+http://home.flash.net/~nymaz/religion/modpagan.html
+http://home.flash.net/~rhmjr/c0819.html
+http://home.freeuk.net/intermedieval/rules.htm
+http://home.freeuk.net/ray.wilson/gsia/gevent.htm
+http://home.freeuk.net/webbuk2/tolkien-biography.htm
+http://home.golden.net/~csp/cd/reviews/brotherfromanother.htm
+http://home.golden.net/~ptpi/goodies.html
+http://home.hamptonroads.com/stories/print.cfm?story=76975&ran=144478
+http://home.hamptonroads.com/stories/print.cfm?story=81069&ran=197650
+http://home.hamptonroads.com/stories/print.cfm?story=81744&ran=58697
+http://home.hamptonroads.com/stories/story.cfm?story=79578&ran=43481
+http://home.hamptonroads.com/stories/story.cfm?story=81076&ran=45232
+http://home.hamptonroads.com/stories/story.cfm?story=85972&ran=211067
+http://home.hamptonroads.com/stories/story.cfm?story=88328&ran=202163
+http://home.hawaii.rr.com/dochazenfield/new_patients.htm
+http://home.hetnet.nl/~ex-baba/engels/articles/secretive.html
+http://home.hetnet.nl/~wegweeda/DretskeEng.htm
+http://home.hiwaay.net/~jalison/Art4.html
+http://home.hockaday.org/HockadayNet/academic/physics/Poetry/sum05.html
+http://home.iae.nl/users/astrid/rainy.htm
+http://home.ingdirect.com/about/aboutus_board.html
+http://home.ingdirect.com/pop_up/e1st_contest_popup.html
+http://home.ingdirect.com/privacy/security_content.html
+http://home.inreach.com/burghart/asia.html
+http://home.inreach.com/rtowle/Chronicles/Chronicles.html
+http://home.iprimus.com.au/li1st/Ark/Combat_Attacks.htm
+http://home.iprimus.com.au/ltuffin/akermanlink.html
+http://home.iprimus.com.au/morningstar/stm/reflect.htm
+http://home.iprimus.com.au/rboon/EarlyInterventionInquiry.htm
+http://home.iprimus.com.au/rboon/EssentialOils.htm
+http://home.it.net.au/~opalowl/2001A.html
+http://home.judson.edu/academic/spinner/donut.html
+http://home.listings.ebay.com/Pet-Supplies_Dogs_W0QQfclZ3QQfcmdZListingItemListQQfsooZ2QQfsopZ2QQsacatZ20742QQsocmdZListingItemList
+http://home.mchsi.com/~jnwatkins/campaign2004.htm
+http://home.merlin.mb.ca/~stuparyk/
+http://home.mindspring.com/~mcmoss/cedargrove/id20.html
+http://home.mindspring.com/~paulsc/phatt.html
+http://home.mira.net/~andy/bs/bs2-2.htm
+http://home.mira.net/~wreid/bali_p4u.html
+http://home.mweb.co.za/re/redcap/rmp.htm
+http://home.mynewroads.com/~domo/NewArk.htm
+http://home.nas.net/~dbc/cic_hamilton/crys.html
+http://home.nas.net/~jgeorge/Samsara/Clickable/Compare.html
+http://home.nc.rr.com/shadynook/SpottedLair/DarkOnes.html
+http://home.net.my/
+http://home.netcom.com/~royalef/gctmap.htm
+http://home.netcom.com/~symbios/thepath.html
+http://home.netvigator.com/~wbutcher/articles/24m.htm
+http://home.no.net/asiandub/news.html
+http://home.nycap.rr.com/klarsen/learnorg/
+http://home.nycap.rr.com/tricitycricketcl/matches2004/MCH82304.htm
+http://home.nycap.rr.com/useless/garfield/
+http://home.olemiss.edu/~djr/pages/teacher/perfprag/chap1.html
+http://home.pacbell.net/ray2288/technicb.html
+http://home.pacifier.com/~dkossy/fratus.html
+http://home.pes.com/iwowss.html
+http://home.pipeline.com/~hbaker1/Iterator.html
+http://home.planet.nl/~faase009/D0112.html
+http://home.planet.nl/~faase009/D0205.html
+http://home.planet.nl/~faase009/D0305.html
+http://home.planet.nl/~faase009/D0307.html
+http://home.planet.nl/~faase009/D0410.html
+http://home.planet.nl/~privacy1/wbp_en_rev.htm
+http://home.planet.nl/~schri474/duk3.htm
+http://home.san.rr.com/schroederfamily/JonStewartJimWallisInterview.html
+http://home.sprynet.com/~frfrog/glossary.htm
+http://home.sprynet.com/~holtrun/10k1of20.htm
+http://home.sprynet.com/~owl1/memory.htm
+http://home.stores.ebay.com/Air-Conditioners_Window-AC-Units_W0QQcatZ79625QQtZlw
+http://home.swbell.net/mpion/TIPcritique/tip.html
+http://home.swipnet.se/~w-61325/ConsciousnessTheDetectorApproach/
+http://home.tiac.net/~cri/1999/coldeq.html
+http://home.trtc.com.tw/EINTRO/eintroduction_6.asp
+http://home.ubalt.edu/bbrownstein/presentations/jondapra.htm
+http://home.ubalt.edu/ntsbarsh/opre640/partXIII.htm
+http://home.universalclass.com/engineering/telecommunications/
+http://home.universalclass.com/i/courses/14.htm
+http://home.vicnet.net.au/~adhs/142Oct96.html
+http://home.vicnet.net.au/~badger04/parks_nt.htm
+http://home.vicnet.net.au/~dealcc/Regosrc.htm
+http://home.vicnet.net.au/~gnaust/life/truthfl-20.html
+http://home.vicnet.net.au/~ozlit/edit9807.html
+http://home.vicnet.net.au/~stpaulch/History.htm
+http://home.wanadoo.nl/rhodesia/firefor1.htm
+http://home.wanadoo.nl/rhodesia/lanc1.html
+http://home.wangjianshuo.com/archives/20031220_friend_is_sick_please_show_your_support.htm
+http://home.wish.net/~rawkite/kite_surfing.htm
+http://home.worldoptions.com.au/nadsett/ads6.htm
+http://home.xtra.co.nz/hosts/Wingmakers/Invisibility.html
+http://home.xtra.co.nz/hosts/Wingmakers/The%20planet%20Neptune.html
+http://home.xtra.co.nz/hosts/xtr209663/articles/ETJun02.htm
+http://home.xtra.co.nz/hosts/xtr209663/articles/proskip_Apr01.htm
+http://home01.wxs.nl/~amorc.nl/envragen.html
+http://home1.gte.net/dschrode/newtransplant-tales.htm
+http://home1.inet.tele.dk/torlars/searchhelp.htm
+http://home3.americanexpress.com/corp/corpinfo/scb03/default.asp
+http://home3.inet.tele.dk/mcamara/cu.html
+http://home4.inet.tele.dk/lepan/lene/indiana/jul99.htm
+http://home4.inet.tele.dk/lepan/lene/indiana/nov98.htm
+http://home8.inet.tele.dk/aaaa/Schindler2.htm
+http://homebuying.about.com/cs/beforeyouclose/a/home_buying.htm
+http://homebuying.about.com/cs/mortgagearticles/a/biweekly_plan.htm
+http://homebuying.about.com/cs/realestatepros/a/square_footage.htm
+http://homeenergy.org/archive/hem.dis.anl.gov/eehem/95/951109.html
+http://homeenergy.org/archive/hem.dis.anl.gov/eehem/95/951112.html
+http://homeenergy.org/archive/hem.dis.anl.gov/eehem/98/980915.html
+http://homeenergy.org/archive/hem.dis.anl.gov/eehem/98/981103.html
+http://homeenergy.org/archive/hem.dis.anl.gov/eehem/99/991102.html
+http://homelands.org/worlds/quotes.html
+http://homelandsecurity.osu.edu/focusareas/transportation.html
+http://homelandsecurity.osu.edu/focusareas/university.html
+http://homemovies.toonzone.net/PizzaClub.html
+http://homenet.hcii.cs.cmu.edu/progress/research.html
+http://homeopathyworld.com/woods_for_the_trees.htm
+http://homepage.eircom.net/~maryhenry/articles/25jun01.htm
+http://homepage.eircom.net/~maryhenry/debates/12june01b.htm
+http://homepage.eircom.net/~maryhenry/debates/21feb02.htm
+http://homepage.eircom.net/~maryhenry/debates/24may01b.htm
+http://homepage.eircom.net/~maryhenry/debates/26mar02b.htm
+http://homepage.eircom.net/~maryhenry/debates/adjourn/13dec01.htm
+http://homepage.eircom.net/~seanjmurphy/chiefs/armscrisis.htm
+http://homepage.mac.com/applegrrl/iblog/B848060887/C996095058/E574610545/
+http://homepage.mac.com/cparada/GML/004Postscripts/TimeBeginning.html
+http://homepage.mac.com/cparada/GML/Sisyphus.html
+http://homepage.mac.com/donfrancisco864/iblog/
+http://homepage.mac.com/elliottday/theoffice/handbags_gladrags.html
+http://homepage.mac.com/j.monro/LordKelvinLetter/lordkelvinletter.html
+http://homepage.mac.com/jhjenkins/Asimov/Books/Book051.html
+http://homepage.mac.com/kdavies/B1837585481/C1817147064/
+http://homepage.mac.com/leperous/PhotoAlbum1.html
+http://homepage.mac.com/lisareinke/B928712598/C2144533559/E1581228078/
+http://homepage.mac.com/nikondriver/voodoolily/seabasics.htm
+http://homepage.mac.com/nirmalabains/blogwavestudio/LH20050115193228/LHA20050118215429/
+http://homepage.mac.com/rpar01/iblog/
+http://homepage.mac.com/rpar01/iblog/C578811192/
+http://homepage.mac.com/svc/prevalence/readme.html
+http://homepage.mac.com/wbaltyn/ektheatre/
+http://homepage.ntlworld.com/alan.stuart/music/lyrics/caramel.html
+http://homepage.ntlworld.com/alan.stuart/music/sin2000d.html
+http://homepage.ntlworld.com/carousel/nottsbox90s.html
+http://homepage.ntlworld.com/dave.whitney/NZroute3.htm
+http://homepage.ntlworld.com/david.habberfield/cup.htm
+http://homepage.ntlworld.com/derek.critoph/used.htm
+http://homepage.ntlworld.com/forgottenfutures/krom/kromskop.htm
+http://homepage.ntlworld.com/ian.lloyd23/holiday/crete/day_10_rethymno_chania.htm
+http://homepage.ntlworld.com/jksonc/docs/vietnam-hadhoc-19710423.html
+http://homepage.ntlworld.com/kennethdrury/buy.htm
+http://homepage.ntlworld.com/marek.kohn/slate.html
+http://homepage.ntlworld.com/parallel/thesis/sample/fourcir.htm
+http://homepage.ntlworld.com/pat.richmonds/vidaud.htm
+http://homepage.ntlworld.com/peter.fairweather/docs/belton.htm
+http://homepage.ntlworld.com/peter.fairweather/docs/stained_glass.htm
+http://homepage.tinet.ie/~ahlulbyteassociation/
+http://homepage.virgin.net/david.torkington/1.%20General%20Turning%20towards%20God.htm
+http://homepages.donobi.net/timer/walkaroundgarden.html
+http://homepages.gold.ac.uk/mark/icsm99/
+http://homepages.ihug.co.nz/~awoodley/regency/marry.html
+http://homepages.ihug.co.nz/~greg.c/practice.html
+http://homepages.ihug.co.nz/~mpeyroux/marinoto.htm
+http://homepages.ihug.com.au/~squires/vt/
+http://homepages.paradise.net.nz/jetaa_south_island/jetache/jul2002/interviews.htm
+http://homepages.paradise.net.nz/pdg/CenEurope.htm
+http://homepages.paradise.net.nz/~pip/will.html
+http://homepages.picknowl.com.au/Syntax/azrael/whyilike.html
+http://homepages.primex.co.uk/~sproston/sstar3.htm
+http://homepages.rootsweb.com/~ncuv/collins1.htm
+http://homepages.shu.ac.uk/~conseal/history.htm
+http://homepages.tcp.co.uk/~maya/thug/thug7.html
+http://homepages.tcp.co.uk/~miracal/The%20duty%20officer%20of%20Executions.htm
+http://homepages.uc.edu/thro/Kosovo/ClintonMrch24.html
+http://homepages.uhwo.hawaii.edu/~senate/WASC2004.html
+http://homepages.unl.ac.uk/~rogersi/gdsnet/profiles/profiles.html
+http://homepages.which.net/~john.king/ecs/notice.htm
+http://homepages.wmich.edu/~dilworth/Index.html
+http://homepages.wwc.edu/staff/wiggjo/summer1998.html
+http://homeparents.about.com/cs/personalhomepages/a/homepages.htm?terms=homepages
+http://homer.cheme.cmu.edu/hypotheses_2.htm
+http://homer.ornl.gov/oepa/guidance/cercla/siteclosure/remedialCompletion.cfm
+http://homes.longandfoster.com/Sell_Home/Sellers_Guide/Sellers_Guide_For_Sale.aspx
+http://homes.mainetoday.com/gardening/040711landsculptin.shtml
+http://homes.mainetoday.com/homecare/050605pools.shtml
+http://homes.mainetoday.com/news/050605pools.shtml
+http://homes.phillyburbs.com/articles/resistfees.shtml
+http://homeschooling.about.com/library/weekly/aa030801m.htm
+http://homeschoolunitstudies.com/TG/Approaches/Writing%20to%20learn.htm
+http://homeschoolunitstudies.com/tg.htm
+http://homesite.com.au/renovate/flooring/ideas_and_designs/energy_efficient_floor_structures/
+http://homesite.com.au/renovate/flooring/ideas_and_designs/energy_efficient_floor_structures/3/
+http://homesteaderlife.blogspot.com/
+http://hometheater.about.com/cs/television/a/16x9tvfactor.htm
+http://hometheaterinfo.com/i_married_a_monster_from_outer_space.htm
+http://hometown.aol.co.uk/--121b-SprHaEqKr1LPiKz21/mbvFbXh3F4E8hvZagIpUywoBc=
+http://hometown.aol.co.uk/__121b_sgxQAOul47hNI4wl76eChschCvrdo/skz9n5KBneWdSivYa/w6wiZw==
+http://hometown.aol.co.uk/monopolycheat/strat/house.html
+http://hometown.aol.co.uk/riscakarate/myhomepage/martialarts.html
+http://hometown.aol.co.uk/suttonunited/links.html
+http://hometown.aol.com/Bbqprod/dino.html
+http://hometown.aol.com/_ht_a/atobrukh/archaeology/matara/MatHistory.html
+http://hometown.aol.com/_ht_a/west24th/main.htm
+http://hometown.aol.com/cajunflok/maggiespage.htm
+http://hometown.aol.com/chicfair/Japan.html
+http://hometown.aol.com/erikschiff/municip.htm
+http://hometown.aol.com/gootchcutters/myhomepage/startrek.html
+http://hometown.aol.com/panda34911/KidsParties/HolidayFunPg11DFallA.html
+http://hometown.aol.com/seivadj18/5000fingers.html
+http://hometown.aol.com/thkalinke/homepage/19CSPP.html
+http://hometown.aol.com/toglobalvillage/myhomepage/
+http://hometown.aol.com/vwdude1957/
+http://homevideo.about.com/cs/newreleases/p/TheFightingTemp.htm
+http://homewithgod.com/Cool/
+http://homeworktips.about.com/
+http://homeworktips.about.com/b/a/057286.htm
+http://homeworktips.about.com/cs/productreviews/gr/oxforddict.htm
+http://homeworktips.about.com/library/shop/aaproxforddict.htm
+http://honesttea.com/news/nytimes0800.html
+http://hongkong.usconsulate.gov/uscn/state/2004/021601.htm
+http://honolulu.hawaii.edu/intranet/committees/FacDevCom/guidebk/faqs/question.htm
+http://honolulu.hawaii.edu/intranet/committees/FacDevCom/guidebk/teachtip/m-files/m-adult3.htm
+http://hoopmountaincentral.com/testimonials.php
+http://hopeathome.crosswinds.net/sronin/foas04/tour2004.htm
+http://hopkinssports.collegesports.com/sports/m-lacros/spec-rel/011205aab.html
+http://hoppermountain.fws.gov/Guadalupe/history.html
+http://horizon.unc.edu/conferences/scot.asp
+http://horizon.unc.edu/projects/CSM/default.asp?chap=8
+http://horizon.unc.edu/projects/HSJ/Morrison.asp
+http://horizon.unc.edu/projects/issues/papers/Veitch2.asp
+http://horizon.upmc.com/News2004/PainSuffering.htm
+http://horizons-2000.org/7.%20Archive/EDA/Personal%20Design%20and%20Action/life%20unity%20meaning.html
+http://hornygoat.org/2000_12_01_archive.php
+http://hornygoat.org/2001_02_01_archive.php
+http://hornygoat.org/2001_03_01_archive.php
+http://horse-canada.com/html/IDupdates.html
+http://horsegazette.com/dear-rufus.html
+http://horseracing.about.com/cs/productreviews/fr/aafr042604a.htm
+http://horses.about.com/care/nutrition/
+http://hortparadise.unl.edu/Newsrelease/News/WinterCareIndoorPlants.htm
+http://host.uniroma3.it/progetti/kant/field/hurleysymp_replytonoe.htm
+http://hosted.ap.org/dynamic/stories/A/AFGHAN_MISSING_PLANE?SITE=NYELM&SECTION=HOME
+http://hosted.ap.org/dynamic/stories/B/BOLTON_UN_FIRING?SITE=APWEB&SECTION=HOME&TEMPLATE=DEFAULT
+http://hosted.ap.org/dynamic/stories/U/US_HELICOPTER_CRASH?SITE=VAROA&SECTION=HOME&TEMPLATE=DEFAULT
+http://hostings.diplomacy.edu/baldi/articles/protest1.htm
+http://hotel-in-montreal.ffind.servebeer.com/
+http://hotels.sandiego.org/493/-/city/viewer/i14/pageNum=2/sortBy=hotelName
+http://hotelschool.scu.edu.au/index.php?page_id=6&menu=6_13
+http://hotjobs.yahoo.com/jobs/FL/Lake-Mary/Accounting-Finance/J7PNNB7RL
+http://hotjobs.yahoo.com/jobs/IL/Argo/Manufacturing-Operations-jobs
+http://hotjobs.yahoo.com/jobs/NY/New-York/Sales/J568423DL
+http://houseandhome.msn.com/Food/Experts/ChristmasFun0.aspx
+http://houseandhome.msn.com/Garden/Flower-GroomingBasics0.aspx
+http://houseandhome.msn.com/Garden/ThreeScenicTreescapes0.aspx
+http://houseandhome.msn.com/Homes/5ToughQuestionstoAskaSeller0.aspx
+http://houseandhome.msn.com/Move/BestPlacestoLive2003.aspx
+http://houseandhome.msn.com/decorate/guidetokitchencosts0.aspx
+http://houseandhome.msn.com/food/elegant.aspx
+http://houseandhome.msn.com/food/traditional.aspx
+http://householdproducts.nlm.nih.gov/cgi-bin/household/brands?tbl=brands&id=19022022
+http://housekeeping.about.com/cs/organizing101/a/orgnzngrgsale.htm
+http://houseofhock.blogspot.com/
+http://houseofstrauss.co.uk/modules/wfsection/article.php?articleid=240
+http://houseoftartan.co.uk/viewinf.htm
+http://houseonahill.net/index.php/blog/permalink/corruption-it-takes-two-to-tango/
+http://housing.uiowa.edu/housing/reshallappinfo.htm
+http://houston.astros.mlb.com/NASApp/mlb/hou/ballpark/directions.jsp
+http://houston.bizjournals.com/bizspace/houston/news_of_note/?story_id=1113374
+http://houston.bizjournals.com/houston/stories/2005/06/06/focus3.html
+http://houston.indymedia.org/news/2005/01/36276_comment.php
+http://houstonindependentfilmmakers.blogspot.com/2005/01/philip-johnson-is-dead-at-98.html
+http://howard.weaver.org/ussr/ussr89.html
+http://howardlewisship.com/blog/2003_09_01_archive.html
+http://howlingpoint.net/life/index.php?m=20030109
+http://howtolive.blogspot.com/
+http://hprcc.unl.edu/impacts/july_2004_impact.html
+http://hprcc.unl.edu/impacts/march_2004_impact.html
+http://hprcc.unl.edu/impacts/october_1999_impact.htm
+http://hprcc.unl.edu/impacts/october_2002_impact.html
+http://hprcc.unl.edu/impacts/september_2004_impact.html
+http://hps.org/publicinformation/ate/q971.html
+http://hq.protestwarrior.com/?page=/featured/PHS/PHS.php
+http://hq.ssrn.com/Participant.cfm?rectype=add&funct=new
+http://hr-internet.ccra-adrc.gc.ca/CcraExternal/1999-CCRA-NOR-1210-0003-Poster-e.html
+http://hr-internet.ccra-adrc.gc.ca/CcraExternal/1999-CCRA-NOR-1220-0037-Poster-e.html
+http://hr-internet.ccra-adrc.gc.ca/CcraExternal/2000-CCRA-NOR-1236-0003-Poster-e.html
+http://hr-internet.ccra-adrc.gc.ca/CcraExternal/2000-CCRA-NOR-1295-0034-Poster-e.html
+http://hr.blr.com/
+http://hr.concordia.ca/benefits/quickclicks/glossary.shtml
+http://hr.concordia.ca/collectiveagreements/tuition_waiver/acumae/
+http://hr.dop.wa.gov/lib/hrdr/asmtpay.htm
+http://hr.fsu.edu/hrms/9900/wnewp00.html
+http://hr.od.nih.gov/ER/ERCases/default.htm
+http://hr.od.nih.gov/ER/Empl-Disc/IntramuralERProc.htm
+http://hr.od.nih.gov/benefits/OpenSeason/FEHB_open2004.htm
+http://hr.unc.edu/Data/SPA/leave/bonusleave
+http://hrw.org/audio/2002/peter/
+http://hrw.org/doc/?t=hivaids&document_limit=0,2
+http://hrw.org/doc/?t=news&cd1=1/1/2001&cd2=1/31/2001
+http://hrw.org/english/docs/2004/10/22/india9556.htm
+http://hrw.org/english/docs/2004/10/22/india9556_txt.htm
+http://hrw.org/wr2k4/5.htm
+http://hrweb.berkeley.edu/hrms/transreclass.htm
+http://hsc.csu.edu.au/ipt/info_systems/2-4/database_modelling.htm
+http://hsgac.senate.gov/022200_press_lieberman.htm
+http://hsgac.senate.gov/index.cfm?FuseAction=PressReleases.Detail&Affiliation=C&PressRelease_id=726&Month=5&Year=2004
+http://hsgac.senate.gov/index.cfm?Fuseaction=PressReleases.View&PressRelease_id=726&Affiliation=C
+http://hsgac.senate.gov/index.cfm?Fuseaction=PressReleases.View&PressRelease_id=726&Affiliation=C&IsTextOnly=1
+http://hspm.sph.sc.edu/Courses/Econ/Classes/Cost/intro/cost.html
+http://hsus.ga4.org/campaign/AZ_2005_animal_fighting
+http://hsv.com/weather/unusual/
+http://hsvmovies.com/static_subpages/personal/education/classes.html
+http://htexplained.com/watches/SS-vs-Gold.htm
+http://htssasol.vaal.co.za/ConductCode.htm
+http://http.persfin.co.za/index.php?fSectionId=708&fArticleId=280023
+http://httpd.apache.org/docs-2.0/env.html
+http://httpd.apache.org/docs-2.0/misc/perf-tuning.html
+http://httpd.apache.org/docs-2.0/ssl/ssl_intro.html
+http://httpd.apache.org/docs-2.1/env.html
+http://httpd.apache.org/docs-2.1/ssl/ssl_intro.html
+http://httpd.apache.org/docs/env.html
+http://httpunit.sourceforge.net/doc/servletunit-intro.html
+http://hua.umf.maine.edu/China/nneigh.html
+http://hua.umf.maine.edu/China/xian.html
+http://hub.interaction-ivrea.it/resources/000201
+http://hubblesite.org/newscenter/newsdesk/archive/releases/1996/01/text/
+http://hubblesite.org/newscenter/newsdesk/archive/releases/2002/20/text/
+http://hubblesite.org/newscenter/newsdesk/archive/releases/2003/22/astrofile/
+http://hubblesite.org/newscenter/newsdesk/archive/releases/2004/07/text/
+http://hughhewitt.com/
+http://hugoboy.typepad.com/hugo_schwyzer/2004/03/obesity_poverty.html
+http://hul.harvard.edu/publications/library_notes/1301/ackerman.html
+http://human-nature.com/ep/
+http://human-nature.com/free-associations/engel1.html
+http://human-nature.com/hraj/events.html
+http://human-resources.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J3X7BJ6RZNZGJX4KJ58
+http://humancapital.doe.gov/elr/CBA_Training.htm
+http://humancapital.doe.gov/pers/JobsONLINEFAQs.htm
+http://humanchess.typepad.com/lowereastside/
+http://humanfactory.caret.cam.ac.uk/careers/gp.html
+http://humanhead.blogspot.com/
+http://humanics-es.com/armrestabstracts.htm
+http://humanics-es.com/present.htm
+http://humaniststudies.org/humphil.html
+http://humanities.byu.edu/home/infopages/construct.html
+http://humanities.lehman.cuny.edu/blackstudies/blscourses.htm
+http://humanities.uchicago.edu/about/
+http://humanities.uchicago.edu/classes/zbikowski/15100.html
+http://humanresources.about.com/
+http://humanresources.about.com/cs/meetingmanagement/ht/meetings.htm
+http://humanresources.about.com/od/leadership/a/leader_inspire.htm
+http://humanresources.about.com/od/motivationrewardretention/a/holidays_work.htm
+http://humanresources.about.com/od/selectemployees/p/apprevu_advice.htm
+http://humansubjects.stanford.edu/education/subject.html
+http://huminf.uib.no/~jill/archives/blog_theorising/final_version_of_weblog_definition.html
+http://huminf.uib.no/~jill/archives/phd/the_story.html
+http://humor.about.com/library/ds/blds120700.htm
+http://humor.catweasel.org/Site1/Digests/H0102170.php
+http://humorix.org/
+http://humphrys.humanists.net/atheism.html
+http://humrep.oupjournals.org/cgi/content/full/19/4/911
+http://hungryjo.journalspace.com/?m=1&y=2004
+http://hunkabutta.com/
+http://huronbox.com/~james/jdlog/
+http://hurricane.atmos.colostate.edu/forecasts/2005/june2005/
+http://hurricanetrack.com/archive.html
+http://hurryupharry.bloghouse.net/
+http://hurryupharry.bloghouse.net/archives/2004/01/21/the_english_question.php
+http://hurryupharry.bloghouse.net/archives/2004/10/15/labour_friends_of_iraq.php
+http://hurryupharry.bloghouse.net/archives/2004/11/26/peace_and_progress.php
+http://hurryupharry.bloghouse.net/archives/2005/01/12/in_defence_of_reaction.php
+http://hurryupharry.bloghouse.net/archives/2005/01/13/wrong_bloke.php
+http://hurryupharry.bloghouse.net/archives/2005/02/02/george_knows_best.php
+http://hutchison.senate.gov/speec165.htm
+http://hven.swarthmore.edu/~cohen/pix/pix.html
+http://hvfd.com/
+http://hvo.wr.usgs.gov/kilauea/history/1960Jan13/
+http://hvo.wr.usgs.gov/volcanowatch/1999/99_09_16.html
+http://hvousa.org/trpop.cfm?TrPDID=13
+http://hybrid2.honda-perf.org/tech/z10.html
+http://hycolake.com/facts.htm
+http://hydrogen.pallasweb.com/cgi-bin/yabb/YaBB.cgi?board=history;action=display;num=1103409844
+http://hypatia.math.uri.edu/~kulenm/diffeqaturi/m381f00fp/andrea/andreamp.html
+http://hyperex.co.uk/reviewpayments.php
+http://hypertext.rmit.edu.au/subjects/hypertext_production/
+http://hypertext.rmit.edu.au/vlog/
+http://hypertext.rmit.edu.au/~gregg/archives/2005/04/13/book-project-clarification-attempt-1/
+http://hypertext.rmit.edu.au/~gregg/archives/2005/04/22/public-holiday-blues/
+http://hypertext.rmit.edu.au/~profash/
+http://hypertextbook.com/chaos/92a.shtml
+http://hypertextbook.com/physics/foundations/system-international/
+http://hyscience.typepad.com/hyscience/2005/03/making_food_and.html
+http://hyscience.typepad.com/hyscience/2005/06/when_a_pictures.html
+http://i-girl.diaryland.com/040602_76.html
+http://i18n.kde.org/doc/doc-primer/getting-started.html
+http://i2i.org/SuptDocs/Enviro/HousingAffordability.htm
+http://i2i.org/article.aspx?ID=1039
+http://i2i.org/article.aspx?ID=297
+http://i4u.com/article2426.html
+http://i4u.com/article2711.html
+http://ia.ita.doc.gov/esel/brazil/98-713.htm
+http://ia.ita.doc.gov/frn/frnmay96/c421601a.html
+http://iac.dtic.mil/
+http://iaeste.free.fr/UK/Uk_index.htm
+http://iafrica.com/highlife/dining_in/di_henrieshotchpotch/starters/
+http://iafrica.com/highlife/herlife/spoil_yourself/229411.htm
+http://iafrica.com/highlife/longlife/features/386392.htm
+http://iafrica.com/news/sa/44109.htm
+http://iafrica.com/news/worldnews/156823.htm
+http://ialbcble.tripod.com/minutes1998.htm
+http://iamfashion.blogspot.com/2004_12_26_iamfashion_archive.html
+http://iammadonna.oracleswar.com/
+http://ianandmanda.typepad.com/blog/2004/09/lets_get_cookin.html
+http://ianrpubs.unl.edu/consumered/g960.htm
+http://ianrpubs.unl.edu/family/nf101.htm
+http://ianrpubs.unl.edu/family/nf494.htm
+http://iaodb.ish-lyon.cnrs.fr/Shanghai/Album_result.php?Album_Select=2&Nb=0
+http://iasym.org/conf2005london/
+http://iblsjournal.typepad.com/illinois_business_law_soc/2005/01/the_name_game_t.html
+http://ibronew.alp.mcgill.ca/Pub_Events_Display.asp?Events_Id=388
+http://ibs.derby.ac.uk/gallery/types.shtml
+http://ic.arc.nasa.gov/story.php?id=219&sec=
+http://ic.daad.de/sydney/living.htm
+http://ic.net/~erasmus/RAZ103.HTM
+http://icantbelieveitsnotademocracy.blogs.com/
+http://icare4u.com/mancare.htm
+http://icasualties.org/oif/
+http://icbirmingham.icnetwork.co.uk/0150business/0200news/tm_objectid=15213398&method=full&siteid=50002&headline=home-asking-prices-rise-in-region-name_page.html
+http://iccheshireonline.icnetwork.co.uk/0100news/chronicleletters/page.cfm?objectid=12066133&method=full&siteid=50020
+http://iccoventry.icnetwork.co.uk/1300ichomes/prestigeproperty/tm_objectid=15513915&method=full&siteid=50002&headline=rare-chance-for-a-foot-on-the-ladder-name_page.html
+http://iccstudy.org/StudiesUnderway.php?pageId=5
+http://ice.he.net/~freepnet/kerry/index.php?topic=Quotes
+http://iceteam.com/resourcecenter/searching.htm
+http://ichuddersfield.icnetwork.co.uk/community/town/tm_objectid=15403474&method=full&siteid=50060&headline=town-and-district--april-14--name_page.html
+http://ichuddersfield.icnetwork.co.uk/community/town/tm_objectid=15612399&method=full&siteid=50060&headline=town-and-district--june-8--name_page.html
+http://icl-server.ucsd.edu/~kirsh/Articles/Earwig/earwig-cleaned.html
+http://icliverpool.icnetwork.co.uk/0100news/0100regionalnews/tm_objectid=14039608&method=full&siteid=50061&page=2&headline=euro-cash-has-given-us-happier-tomorrows-name_page.html
+http://icm.landcareresearch.co.nz/science_themes/human-dimensions/arts_and_science_collaboration.htm
+http://icnewcastle.icnetwork.co.uk/0100news/thejournal/page.cfm?objectid=13491635&method=full&siteid=50081
+http://icnewcastle.icnetwork.co.uk/0700learning/0200pupils/tm_objectid=15126098&method=full&siteid=50081&headline=lessons-in-how-to-cut-stress-name_page.html
+http://icnewcastle.icnetwork.co.uk/eveningchronicle/features/tm_objectid=15035382&method=full&siteid=50081&headline=we-re-hoping-for-a-fantastic-2005-name_page.html
+http://icperthshire.icnetwork.co.uk/news/localnews/strathearnnews/strathnews/tm_objectid=15126550&method=full&siteid=88886&headline=bad-press-distorts-g8-pass-picture-name_page.html%C2%A3
+http://icpvegetation.ceh.ac.uk/intro.htm
+http://icr.byu.edu/bylaws.htm
+http://icrenfrewshire.icnetwork.co.uk/guestbook/
+http://icssa.org/MushKhilafah.htm
+http://icteesside.icnetwork.co.uk/sundaysun/news/tm_objectid=15136344&method=full&siteid=50081&headline=beatrix-sell-off-outrage-name_page.html
+http://icwales.icnetwork.co.uk/0100news/columnists/tm_objectid=15615278&method=full&siteid=50082&headline=ah--mrs-robinson-----nailing-a-few-myths-name_page.html
+http://icwales.icnetwork.co.uk/0100news/columnists/tm_objectid=15624454&method=full&siteid=50082&headline=summer-flocks-of-cash-hungry-students-learn-to-show-and-sell-name_page.html
+http://icwales.icnetwork.co.uk/0100news/letters/tm_objectid=15083068&method=full&siteid=50082&headline=sunday--16-january-2005-name_page.html
+http://icwales.icnetwork.co.uk/0100news/letters/walesonsunday/tm_objectid=15083068&method=full&siteid=50082&headline=sunday--16-january-2005-name_page.html
+http://icwales.icnetwork.co.uk/0300business/0100news/tm_objectid=15099504&method=full&siteid=50082&headline=question-mark-over-future-of-sony-jobs-in-wales-name_page.html
+http://icwales.icnetwork.co.uk/0600soccer/0200news/tm_objectid=15088395&method=full&siteid=50082&headline=heroic-swans-in-extra-time-exit-name_page.html
+http://icwales.icnetwork.co.uk/0600soccer/columnists/tm_objectid=15559425&method=full&siteid=50082&headline=sam-s-the-man-for-the-upbeat-bluebirds-name_page.html
+http://id-archserve.ucsb.edu/Anth3/Courseware/Chronology/10_Obsidian_Hydration.html
+http://id-www.ucsb.edu/fscf/library/plantinga/dennett.html
+http://idalert.berkeley.edu/faq.html
+http://idalert.okstate.edu/faq.htm
+http://ideant.typepad.com/ideant/2004/01/technology_and_.html
+http://ideaplace.blogspot.com/
+http://ideas.repec.org/a/aea/aecrev/v94y2004i3p730-740.html
+http://ideas.repec.org/a/bla/scotjp/v49y2002i2p150-61.html
+http://ideas.repec.org/a/ecj/econjl/v112y2002i481p625-648.html
+http://ideas.repec.org/p/dgr/eureri/30001046.html
+http://ideas.repec.org/p/dgr/uvatin/20000073.html
+http://ideas.repec.org/p/fth/sydnec/2001-2.html
+http://ideas.repec.org/p/iza/izadps/dp318.html
+http://ideas.repec.org/p/iza/izadps/dp48.html
+http://ideas.repec.org/p/lec/leecon/02-2.html
+http://ideas.repec.org/p/nbr/nberwo/4910.html
+http://ideas.repec.org/p/nbr/nberwo/8610.html
+http://ideas.repec.org/p/nbr/nberwo/9004.html
+http://ideas.repec.org/p/nbr/nberwo/9155.html
+http://ideas.repec.org/p/upj/weupjo/04-106.html
+http://ideas.repec.org/p/wpa/wuwpgt/0309002.html
+http://ideasandsociety.ucr.edu/redrhythms/schedule.htm
+http://identityweb.umich.edu/students.html
+http://ideonomy.mit.edu/whatcan/things071-080.html
+http://idiosyncrasy.rediffblogs.com/
+http://idoc.davisvision.com/davis/public/VisionCareResources/vision_07.htm
+http://idp.bl.uk/chapters/links/links.html
+http://ie.oregonstate.edu/news/story/1310
+http://ie3global.oregonstate.edu/Robinson,%20c%20AmCham%20Win04.html
+http://ie3global.oregonstate.edu/sing1a.html
+http://ieas.berkeley.edu/shorenstein/1999.12.html
+http://ies.berkeley.edu/calendar/archive/shansa/
+http://ietfreport.isoc.org/cgi-bin/htmlwdiff?f1=..%2Frfc%2Frfc2425.txt&f2=..%2Fall-ids%2Fdraft-ietf-asid-mime-direct-07.txt
+http://ietfreport.isoc.org/cgi-bin/id2pdf?f1=draft-ietf-asid-mime-direct-06.txt
+http://ietfreport.isoc.org/cgi-bin/id2pdf?f1=draft-ietf-asid-mime-direct-07.txt
+http://ietfreport.isoc.org/idref/draft-ietf-asid-mime-direct/
+http://if.psfk.com/if/2005/05/thought_blurrin.html
+http://ific.org/publications/reviews/scientificir.cfm
+http://ifrl.org/IFRLDailyNews/050128/2/
+http://ifyoumust.blogspot.com/
+http://ihaveacrazywife.com/
+http://iic.edu/Main/MastersProg/CourseCatalog.htm
+http://iiit.net/academics/admissions/pgadmissions/faq.html
+http://ijc.iatp.md/buletin_agrar/bul_agrar_eng_2003_9.html
+http://ije.oupjournals.org/cgi/content/full/33/2/382
+http://ilia.ws/
+http://ilia.ws/archives/5_Top_10_ways_to_crash_PHP.html
+http://ilikeithere.blogspot.com/
+http://ilil.essortment.com/glaucomaeyener_ruij.htm
+http://illuminations.nctm.org/index_o.aspx?id=69
+http://illusivemind.blogspot.com/2005/05/evolution-altruism-and-ethics.html
+http://ilpundit.blogspot.com/2005/02/staring-into-abyss.html
+http://ils.pennnet.com/Articles/Article_Display.cfm?Section=Articles&Subsection=Display&ARTICLE_ID=229568
+http://ils.unc.edu/~fents/310/
+http://im3.imagemaker360.com/AudioFeatureOverview.asp
+http://imacs.org/IMACSWeb/default.aspx?page=About
+http://image.gsfc.nasa.gov/poetry/weekly/weekly.html
+http://imagebase.lib.vt.edu/browse.php?folio_ID=/uni/class&num_rows=284&start_row=31
+http://images.maariv.co.il/images/isuzu_challenge/e/expedition_route_e2003.html
+http://images.military.com/NewContent/0,13190,Weisman_043003,00.html
+http://images.spinics.net/am/1576105202
+http://imagine.gsfc.nasa.gov/docs/teachers/lessons/supernova/supernova_student.html
+http://imaginis.com/breasthealth/pregnancy.asp
+http://imaginis.com/heart-disease/cad_screen.asp
+http://imaginis.com/t-scan/faq.asp
+http://imao.us/
+http://ime.imb.org/offering/quotablesgive.asp
+http://imej.wfu.edu/articles/2003/1/02/index.asp
+http://immigration.about.com/library/blboards.htm
+http://immigration.about.com/library/blvisafaq.htm
+http://immigration.about.com/library/blwhocanchange.htm
+http://impossiblist.blogspot.com/2004_09_01_impossiblist_archive.html
+http://improving-ser.sti.jrc.it/default/show.gx?Object.object_id=TSER----0000000000000232&_app.page=show-TSR.html
+http://improving-ser.sti.jrc.it/default/show.gx?Object.object_id=TSER----000000000000034E&_app.page=show-TSR.html
+http://imra.org.il/story.php3?id=25488
+http://imshin.blogspot.com/2004_04_25_imshin_archive.html
+http://imv.au.dk/publikationer/pov/Issue_01/Avndldg/Avndldg7.html
+http://in.dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Travel_and_Transportation/Frequent_Travel_Programmes/
+http://in.news.yahoo.com/050103/137/2it80.html
+http://in.rediff.com/cricket/2004/feb/19inter.htm
+http://in.rediff.com/money/2004/jun/24rash.htm
+http://in.rediff.com/movies/2004/jan/29pooja.htm
+http://in.us.biz.yahoo.com/bw/050207/65020_1.html
+http://inanna.virtualave.net/hekate.html
+http://incestabuse.about.com/cs/legalsystem/a/stognervsCA.htm
+http://inch-aweigh.com/dietstats.htm
+http://incometaxdelhi.nic.in/payers/house.htm
+http://incometaxindia.gov.in/Pamphlets_Split/ONEBYSIXSCHEME.asp
+http://incommunicado.info/aggregator/sources/7
+http://incontinence.depend.com/articles/talk/
+http://incsub.org/blog/
+http://incubator.apache.org/derby/papers/optimizer.html
+http://indcoup.blogspot.com/
+http://indecentblogging.com/blog.php?user=easily_aroused
+http://independencejournal.com/buyfarm.htm
+http://india.indymedia.org/en/2005/06/210681.shtml
+http://indiabudget.nic.in/ub2000-01/bs/bsb1.htm
+http://indiaimage.nic.in/pmcouncils/reports/admin/chap1.htm
+http://indiaimage.nic.in/pmcouncils/reports/infra/ichap3.htm
+http://indiamonitor.com/news/readCatFullNews.jsp?ni=4078&ct=Outsourcing
+http://indianafind.com/Localities/H/Hammond/Business_and_Economy/Industrial_Supplies/
+http://indianaobserver.com/index.php/archives/category/scitec/
+http://indianapolismusic.net/events_day.php
+http://indianarmy.nic.in/ararty1.htm
+http://indianarmy.nic.in/arta1.htm
+http://indianbloggers.blogspot.com/
+http://indiauncut.blogspot.com/2004/12/picture-of-hell-and-no-kerosene.html
+http://indiboi.com/history/2003/09/
+http://indiboi.com/history/2004/10/24/2887408
+http://indieslate.com/Iss_40_StarScript.html
+http://individual.utoronto.ca/johnbowen/dare/lotr.html
+http://industrial-robotics.globalspec.com/Industrial-Directory/robot_arm
+http://industrial-robotics.globalspec.com/Industrial-Directory/robotic_arm
+http://industries.bnet.com/GOVERNMENT/Homeland+Security/Decision+Support+Systems/?scname=Decision+Support+Systems&sortby=comp
+http://industries.bnet.com/whitepaper.aspx?cid=268&docid=118558
+http://industries.bnet.com/whitepaper.aspx?scname=Film+Production&docid=112840
+http://industries.bnet.com/whitepaper.aspx?scname=Medical+Equipment+and+Supplies&docid=126841
+http://industries.bnet.com/whitepaper.aspx?scname=Supermarkets&docid=101977
+http://industrycentral.net/director_interviews/MIAP01.HTM
+http://industrycentral.net/director_interviews/MIFO01.HTM
+http://industrycentral.net/director_interviews/PW01.HTM
+http://indyweek.com/durham/2001-10-31/backtalk.html
+http://indyweek.com/durham/2002-03-06/cover.html
+http://indyweek.com/durham/2003-10-22/casa2.html
+http://indyweek.com/durham/2003-11-05/triangles.html
+http://indyweek.com/durham/2004-04-21/cover4.html
+http://indyweek.com/durham/2004-12-15/ae.html
+http://indyweek.com/durham/current/movie.html
+http://infavorofthinking.blogspot.com/
+http://infertility.adoption.com/fertility/39-rights-of-the-infertile-couple.html
+http://infinityprosports.com/portfolio/case/
+http://info-pollution.com/huber.htm
+http://info-theory.blogspot.com/
+http://info.ag.uidaho.edu/homewise/homewise_111900.htm
+http://info.ag.uidaho.edu/magazine/summer2002/living.html
+http://info.anu.edu.au/hr/Recruitment/New_Staff_Information/You_and_Your_Role.asp
+http://info.anu.edu.au/policies/Policies/Human_Resources/Leave_and_Absences/Study_Leave.asp
+http://info.caldwell.edu/IOE/
+http://info.cancerresearchuk.org/cancerandresearch/ourcurrentresearch/researchinyourregion/southern/oxford/
+http://info.cancerresearchuk.org/healthyliving/reducetherisk/aboutthecampaign/?a=5441
+http://info.cancerresearchuk.org/publicpolicy/scotland/?a=5441
+http://info.ccone.at/INFO/Samba/ServerType.html
+http://info.channelnewsasia.com/bb/viewtopic.php?p=120139&
+http://info.channelnewsasia.com/bb/viewtopic.php?p=127366&
+http://info.channelnewsasia.com/bb/viewtopic.php?t=419&start=20&
+http://info.channelnewsasia.com/bb/viewtopic.php?t=419&start=20&postdays=0&postorder=asc&highlight=&
+http://info.detnews.com/history/story/index.cfm?id=100&category=business
+http://info.detnews.com/history/story/index.cfm?id=189&category=business
+http://info.detnews.com/joyrides/index.cfm?action=calendar
+http://info.detnews.com/joyrides/story/index.cfm?id=133
+http://info.detnews.com/weightloss/lettersindex.cfm
+http://info.detnews.com/wine/columns/silfven/details.cfm?id=195
+http://info.gradsch.wisc.edu/admin/academicservices/pguide.html
+http://info.gradsch.wisc.edu/admin/fellowships/fellowfacts04.html
+http://info.gradsch.wisc.edu/admin/fellowships/fellowfacts05.html
+http://info.gradsch.wisc.edu/admin/fellowships/fellowfacts06.html
+http://info.gradsch.wisc.edu/admin/gsc/gradguide/ch5.html
+http://info.laworks.com/plrecognition.html
+http://info.lboro.ac.uk/departments/cv/wedc/papers/jain.html
+http://info.lboro.ac.uk/orgs/opp2000/chap3.htm
+http://info.lib.uh.edu/sca/collections/faids/html/hawc.html
+http://info.library.unsw.edu.au/osd/using/mycoursefaq.html
+http://info.linspire.com/10Reasons/
+http://info.med.yale.edu/chldstdy/plomdevelop/genetics/03aprgen.htm
+http://info.med.yale.edu/comer/about/newsletter/Fall00B.html
+http://info.med.yale.edu/yarc/vcs/preventi.htm
+http://info.royaloperahouse.org/Synopses/index.cfm?ccs=467&cs=1012
+http://info.susu.org/article.php?sid=50
+http://info.tc.msu.edu/faculty/larose/html/fonbehav.html
+http://info.web.cern.ch/Press/PressReleases/Releases1993/PR12.93Ecouncil.html
+http://info.winnefox.org/blogs/ask/archives/2004_12.html
+http://info.wlu.ca/~wwwpress/jrls/cjc/BackIssues/16.3/surlin.html
+http://info.wlu.ca/~wwwpress/jrls/cjc/BackIssues/22.2/gosselin.html
+http://info.wlu.ca/~wwwregi/examtest/classroominfo.shtml
+http://info.wlu.ca/~wwwregi/examtest/classroominfo2.shtml
+http://information-technology.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPATH=JR&Job_DID=J3X7LF5XMG61QHMPZTN
+http://information-technology.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?Job_DID=JY24R6424BFG9PVQRN
+http://information-technology.careerbuilder.com/it.ic/Florida_Miami?radius=5
+http://information-technology.careerbuilder.com/it.ic/Florida_Miami_ProjectManagement.htm?radius=5
+http://information-technology.careerbuilder.com/it.ic/Michigan_Lansing_WindowsDevelopment.htm?radius=10
+http://information-technology.careerbuilder.com/it.ic/Missouri_KansasCity_WindowsDevelopment.htm?radius=5
+http://information-technology.careerbuilder.com/it.ic/Missouri_Liberty_WindowsDevelopment.htm?radius=20
+http://information-technology.careerbuilder.com/it.ic/NewYork_LongIsland_WindowsDevelopment.htm?radius=50
+http://information-technology.msn.careerbuilder.com/it.ic/Illinois_Gurnee_AS400.htm
+http://informationr.net/ir/4-2/paper53.html
+http://informationr.net/ir/6-2/ws7.html
+http://informationr.net/ir/8-1/paper142.html
+http://informationr.net/ir/8-1/paper144.html
+http://informationr.net/ir/8-2/paper150.html
+http://informationr.net/ir/9-2/paper170.html
+http://informationr.net/ir/reviews/revs050.html
+http://informationr.net/ir/reviews/revs138.html
+http://informationr.net/ir/reviews/revs156.html
+http://informationr.net/ir/reviews/revs164.html
+http://informationr.net/tdw/publ/papers/1984emim.html
+http://informationr.net/tdw/publ/papers/acuril.html
+http://informationr.net/tdw/publ/papers/klpaper.html
+http://informationservices.swets.com/web/show/id=40149
+http://informationweek.com/story/showArticle.jhtml?articleID=159908281
+http://informationweek.com/story/showArticle.jhtml?articleID=18900187
+http://informationweek.com/story/showArticle.jhtml?articleID=29100189
+http://informationweek.com/story/showArticle.jhtml?articleID=49901543
+http://informationweek.com/story/showArticle.jhtml?articleID=53200338
+http://informedesign.umn.edu/Rs_detail.aspx?rsId=1609
+http://infosecuritymag.techtarget.com/2002/jan/columns_note.shtml
+http://infosecuritymag.techtarget.com/articles/1999/toolsofthetrade.shtml
+http://infosecuritymag.techtarget.com/articles/april00/columns_cryptorhythms.shtml
+http://infosecuritymag.techtarget.com/articles/august01/securitymarket.shtml
+http://infosecuritymag.techtarget.com/ss/0,295796,sid6_iss205_art465,00.html
+http://infosecuritymag.techtarget.com/ss/0,295796,sid6_iss506_art1038,00.html
+http://infoserver.ciesin.org/datasets/nesedb/nesedb-home.html
+http://infoshare1.princeton.edu/libraries/firestone/rbsc/finding_aids/ball/boxes158-222.html
+http://infotoday.com/searcher/sep02/Block.htm
+http://infotrac.thomsonlearning.com/infowrite/ex_argu.htm
+http://infoworld.com/article/04/03/10/HNsqldelay_1.html
+http://infoworld.com/article/04/10/20/HNconsistency_1.html?APPLICATION%20SECURITY
+http://infozone.imcpl.org/kids_path_gardening.htm
+http://inhofe.senate.gov/pressreleases/climateupdate.htm
+http://inhome.rediff.com/news/2004/dec/26tn.htm?zcc=ar
+http://injil.org/TWOR/96.html
+http://injury-attorneys.com/cell_phone_car_accidents.html
+http://injury.freeadvice.com/injury_help.php/115_136_631.htm
+http://inner-smile.com/dl_inf.htm
+http://innerself.com/Relationships/farmer_steven_01254.htm
+http://innocent.org.uk/cases/barrygeorge/
+http://innovation.ic.gc.ca/gol/innovation/site.nsf/en/in04877.html
+http://inouye.senate.gov/~inouye/05pr/20050318pr01.html
+http://inpress.lib.uiowa.edu/poroi/papers/throgmorton050301.html
+http://insidebayarea.com/timesstar/prepsports/ci_2537452
+http://insidehighered.com/careers/2005/05/31/hyun
+http://insidehighered.com/news/2005/05/20/roundtable
+http://insidehighered.com/news/2005/06/17/hea
+http://insidehighered.com/views/2005/05/23/johnson
+http://insidehighered.com/views/2005/05/24/mclemee
+http://insider.tv.yahoo.com/celeb/insdr20050624t120300002568/
+http://insight.chicagoconsultingactuaries.com/Insight/Documents/cashballit.aspx
+http://insight.zdnet.co.uk/0,39020415,39115499,00.htm
+http://insight.zdnet.co.uk/archive.htm?CALENDAR=2005%7C02%7C06
+http://insignificantthoughts.com/index.php?p=190
+http://insomniac.blogeasy.com/article.view.run?articleID=16406
+http://insp.pnl.gov/?info/brochure/progbroch98e
+http://instapundit.com/
+http://insti.physics.sunysb.edu/~allen/
+http://insti.physics.sunysb.edu/~allen/LJ/
+http://insti.physics.sunysb.edu/~siegel/parodies/sgsft.html
+http://institution.gallup.com/documents/questionnaire.aspx?STUDY=P0411042
+http://institution.gallup.com/documents/questionnaire.aspx?STUDY=P0411044_2
+http://instruct1.cit.cornell.edu/courses/aem425/Luby.htm
+http://instructionaltechnology.editthispage.com/
+http://instructivist.blogspot.com/2005/05/trivial-hands-on-activities.html
+http://instructordiploma.com/core/303/Giselle.htm
+http://instrumentation.co.za/News.ASP?pklNewsID=16381&pklIssueID=451
+http://insurance.essentialtravel.co.uk/skiguide/switzerland/champery.htm
+http://intarch.ac.uk/journal/issue12/editorial.html
+http://intarch.ac.uk/journal/issue9/reviews/beowulf.html
+http://integration-net.cic.gc.ca/inet/english/elt-clna/elt-clna-Q&A.htm
+http://integritycasinoguide.com/
+http://inteldump.powerblogs.com/archives/archive_2004_12_12-2004_12_18.shtml
+http://inteldump.powerblogs.com/archives/archive_2005_01_02-2005_01_08.shtml
+http://intelligentassistance.com/blog/?p=21
+http://intelligentassistance.com/blog/?p=26
+http://intellit.muskingum.edu/russia_folder/pcw_era/sect_05.htm
+http://inter-mex.net/
+http://interaccess.org/arg/arg-list/msg01001.html
+http://interact.iparenting.com/showthreaded.php?Cat=&Board=preteen&Number=1394148&page=0&view=expanded&sb=5&o=&fpart=
+http://interact.uoregon.edu/MediaLit/WFAE/readings/copeland/sounds.html
+http://interact.uoregon.edu/MediaLit/mlr/readings/articles/emperor.html
+http://interactive.linuxjournal.com/article/7488
+http://interactive.usc.edu/members/msteffen/archives/001486.html
+http://interactive.usc.edu/members/tripp/
+http://interactive.usc.edu/members/tripp/archives/004371.html
+http://interactive.usc.edu/members/tripp/archives/2005_05.html
+http://interactive.zogby.com/fuse/messageview.cfm?catid=8&threadid=2142
+http://interactiveinvestor.money.msn.co.uk/sharedealing/terms.epl
+http://interactives.alxnet.com/cgi-bin/slither/Driver.py/WebTools/Guestbook/Guestbook.render?guestbook_id=47170&page=5&logged_in=0
+http://intercom.virginia.edu/SurveySuite/Surveys/BMDCA2005HealthSurvey/index2.html
+http://interconnected.org/home/2002/11/week/10/
+http://interconnected.org/matt/archive/james/Base-Superstructure.html
+http://interestingtimes.blogspot.com/archives/2003_07_13_interestingtimes_archive.html
+http://interguild.com/
+http://interiordec.about.com/od/designershowhouse/a/a_2004orangecty.htm
+http://internalcleansing.com/testimonials/
+http://international.adoption.com/
+http://international.fhwa.dot.gov/eurorightofway/02.htm
+http://international.fws.gov/cites/update86.html
+http://international.helplinelaw.com/lawyers/pakistan/attock
+http://international.helplinelaw.com/lawyers/pakistan/daska
+http://international.helplinelaw.com/lawyers/pakistan/faisalabad
+http://international.helplinelaw.com/lawyers/pakistan/hyderabad
+http://international.helplinelaw.com/lawyers/pakistan/islamabad
+http://international.helplinelaw.com/lawyers/pakistan/lahore
+http://international.helplinelaw.com/lawyers/pakistan/multan
+http://international.helplinelaw.com/lawyers/pakistan/rawalpindi
+http://international.helplinelaw.com/lawyers/pakistan/sargodha
+http://international.missouri.edu/studyabroad/predepart/culture.shtml
+http://internationalecon.com/fairtrade/feature1.html
+http://internationalezaken.szw.nl/index.cfm?fuseaction=dsp_rubriek&rubriek_id=13059&lijstm=0,322_6610
+http://internet-work-at-home-opportunity.com/
+http://internetretailer.com/article.asp?id=14851
+http://internetworldstats.com/products/17EasyWays/
+http://interplace-agency.com/SouthBay.html
+http://interview.monster.com/articles/thankyou/
+http://interviews.teamxbox.com/xbox/681/The-Suffering-Richard-Rouse-III-Interview/p1
+http://intheaquarium.blogspot.com/archives/2003_10_01_intheaquarium_archive.html
+http://inthebarrenseason.blogspot.com/2004_09_01_inthebarrenseason_archive.html
+http://inthefray.com/html/article.php?sid=616
+http://inthefray.com/html/article.php?sid=616&mode=thread&order=0
+http://inthefray.com/html/article.php?sid=629&mode=thread&order=0
+http://into-stone.co.uk/classifieds.php3
+http://intra.unops.org/va/VacancyControls/File.aspx/2005-GLO-DSS-L3-DFSO.pdf?no=188
+http://intra.unops.org/va/VacancyControls/File.aspx/2005-GLOS-DSS-L4-FSC.pdf?no=189
+http://intranet.arts.ac.uk/online/stu_faq.php
+http://intranet.bedfordschool.org.uk/system/registration/agreement.htm
+http://intranet.lternet.edu/archives/documents/Newsletters/NetworkNews/fall01/fall01_pg12.html
+http://intro.phm.auckland.ac.nz/i-course.html
+http://intron.kz.tsukuba.ac.jp/vrlab_web/CirculaFloor/CirculaFloor_e.htm
+http://invent.ucsd.edu/faculty/policies/UC_copyright.htm
+http://inventors.about.com/library/inventors/bledisonbiographyPart%202.htm
+http://inventors.about.com/library/inventors/blholly.htm
+http://inventors.about.com/library/inventors/blrailroad7.htm
+http://inventors.about.com/library/weekly/aa062398.htm
+http://inventors.about.com/library/weekly/aa072897.htm
+http://inversionmagazine.com/features/whale012704.htm
+http://investigations.terc.edu/relevant/EffectiveUse.html
+http://investing.reuters.co.uk/Stocks/QuoteCompanyNewsArticle.aspx?view=PR&symbol=ADL.L&storyID=76573+30-Nov-2004+RNS
+http://investing.reuters.co.uk/stocks/QuoteCompanyNewsArticle.aspx?type=pressReleases&symbol=ADL.L&storyID=76573+30-Nov-2004+RNS
+http://investment.azur-online.com/content/view/14/2/
+http://investor.ag-industries.com/Annual_reports/2001/afglass_ar01/corp_gov/corp_main.htm
+http://investor.anntaylor.com/news/20011114-64752.cfm?t=n
+http://investor.anntaylor.com/news/20021205-96504.cfm?t=n
+http://investor.kelloggs.com/ReleaseDetail.cfm?ReleaseID=155654
+http://investor.news.com/Engine?Account=cnet&PageName=NEWSREAD&ID=1325653&Ticker=ICGE&SOURCE=072579.nitf
+http://investor.ninemsn.com.au/investor/osshares/ukreview/story_detail.asp
+http://investor.nuance.com/ireye/ir_site.zhtml?ticker=nuan&script=460&layout=6&item_id=282840
+http://investor.officemax.com/releaseDetail.cfm?ReleaseID=156997
+http://investor.stpaultravelers.com/phoenix.zhtml?c=177842&p=irol-govmanage
+http://invisiblegovernment.net/
+http://ioe.engin.umich.edu/home/overview.html
+http://iol.co.za/index.php?set_id=1&click_id=13&art_id=qw1119283560505B255
+http://iowahawk.typepad.com/iowahawk/2005/06/from_the_desk_o.html
+http://ipcm.wisc.edu/uw_weeds/extension/
+http://ipf-orc.sourceforge.net/readme-release-1.1.0.htm
+http://ipodstudio.com/forums/archive/index.php/t-476.html
+http://ipodstudio.com/forums/showthread.php?t=483&goto=nextoldest
+http://ipp.nasa.gov/innovation/innovation103/7-techop.html
+http://ipsnews.net/news.asp?idnews=29176
+http://iquebec.ifrance.com/inuit/pages/2b.htm
+http://iquote.com/LifeInsurance/default.htm
+http://ir.bpb.com/bpb/financialnews/currentnews/2002-11-27
+http://ir.mc.com/phoenix.zhtml?c=118140&p=irol-newsArticle_Print&ID=344872&highlight=
+http://ir.mc.com/phoenix.zhtml?c=118140&p=irol-newsArticle_Print&ID=459237&highlight=
+http://ir.mc.com/phoenix.zhtml?c=118140&p=irol-newsArticle_Print&ID=630629&highlight=
+http://ir.unlv.edu/who_we_are/meet_the_staff.htm
+http://ir.wallstraits.net/segi/page.asp?id=klse_040218c
+http://iraq.news.designerz.com/british-born-top-aid-official-kidnapped-in-iraq.html
+http://iraq.usembassy.gov/iraq/irs.html
+http://iraqblogcount.blogspot.com/
+http://iraqelect.com/index.php/archives/2005/01/03/iraqi-defence-minister-floats-election-delay/
+http://iraqthemodel.blogspot.com/
+http://iraqthemodel.blogspot.com/2003_12_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2004_01_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2004_05_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2004_06_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2004_07_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2004_11_01_iraqthemodel_archive.html
+http://iraqthemodel.blogspot.com/2005/04/eid-of-liberty.html
+http://iraqthemodel.blogspot.com/2005/06/egypt-and-fear-from-hasty-change.html
+http://iraqthemodel.blogspot.com/2005_01_01_iraqthemodel_archive.html
+http://irascibleprofessor.com/comments-07-08-02.htm
+http://iraszl.brinkster.net/creativebits/2005/01/pixelfonts-for-better-legibility.html
+http://irb.ua.edu/reviewinfo.html
+http://irc.nrc-cnrc.gc.ca/cbd/cbd192e.html
+http://irc.nrc-cnrc.gc.ca/pubs/ctus/53_e.html
+http://irfca.org/faq/faq-travel.html
+http://iri.columbia.edu/climate/ENSO/background/basics.html
+http://iri.columbia.edu/climate/ENSO/currentinfo/archive/200411/technical.html
+http://iri.columbia.edu/climate/forecast/net_asmt/2002/jul2002/text/MEast.html
+http://iri.columbia.edu/climate/forecast/net_asmt/2002/may2002/text/Asia.html
+http://iris.ingentaselect.com/vl=1394146/cl=36/nw=1/fm=docpdf/rpsv/cw/igsoc/02603055/v37n1/s41/p263
+http://iris.peabody.vanderbilt.edu/howtoCSfaculty.html
+http://irm.cit.nih.gov/att6sewp.html
+http://irm.cit.nih.gov/policy/DHHS_SecLev.html
+http://irm.wharton.upenn.edu/MBA.html
+http://irregulartimes.com/index.php
+http://irregulartimes.com/index.php/archives/2005/02/18/united-states-of-cheap/
+http://irregulartimes.com/religionscienceschools.html
+http://isaac.idkcomp.com/EDTORIAL/PASSIVE.HTM
+http://isakson.senate.gov/floor/030305drugsafety.htm
+http://ishindler.com/articles/TSPKeepingupwithChangingTechnology.htm
+http://isis.csuhayward.edu/dbsw/anthropology/claus/a1006/lec3-f98.htm
+http://islam.about.com/cs/divisions/f/shia_sunni.htm
+http://islam.itl.org.uk/why_jesus/wfj_16.html
+http://islamic-world.net/economics/consumer_theory.htm
+http://islamlib.com/en/page.php?page=article&id=519
+http://islands.unep.ch/isldir.htm
+http://isloveoutthere.blog-city.com/
+http://islscp2.sesda.com/ISLSCP2_1/html_pages/whats_new.html
+http://isna.org/
+http://iso.china-labour.org.hk/iso/article.adp?article_id=2059
+http://israelvisit.co.il/BehindTheNews/
+http://ist-socrates.berkeley.edu/~bsp/extremism.html
+http://ist-socrates.berkeley.edu/~hanj/
+http://ist-socrates.berkeley.edu:7502/GSS/HTMLBOOK/gssx06.html
+http://istanbul.european-patent-office.org/programme/index.en.php
+http://istf.ucf.edu/What_We_Learned/Teachers/2002_2003/
+http://istpub.berkeley.edu:4201/style/
+http://istresults.cordis.lu/index.cfm/section/news/BrowsingType/Long%20Feature/Tpl/article/ID/76556
+http://istresults.cordis.lu/index.cfm/section/news/Tpl/article/BrowsingType/Long%20Feature/ID/59305
+http://istresults.cordis.lu/index.cfm/section/news/tpl/article/BrowsingType/Features/ID/59305
+http://istresults.cordis.lu/index.cfm/section/news/tpl/article/BrowsingType/Features/ID/76556
+http://istresults.cordis.lu/index.cfm/section/news/tpl/article/ID/76556/BrowsingType/Features
+http://ists.pls.uni.edu/minutes/minutes02.html
+http://istu2.apl.washington.edu/abstracts_ah.html
+http://it-director.com/article.php?articleid=2263
+http://it.coe.uga.edu/~lrieber/seriousdesign/
+http://it.jhu.edu/applications/clinical/
+http://it.pcconnection.com/Webcontent/SiteHelp/Reports.htm
+http://it.slashdot.org/index.pl?issue=20050108
+http://it.uts.edu.au/course/shortcourse/itmanage/itcontracts.html
+http://italian.about.com/
+http://italic.org/initiat5.htm
+http://itc.napier.ac.uk/ITC_Home/ITC/Projects.asp
+http://itd.idaho.gov/row/new/workfiles/Help.html
+http://ite.sfcc.edu/~sat/courslnk.htm
+http://iteslj.org/Articles/Offner-HowToLearn.html
+http://iteslj.org/Articles/Stibbard-Intonation/
+http://iteslj.org/Articles/Talebinezhad-EIL.html
+http://iteslj.org/Techniques/Hussain-Questions.html
+http://iteslj.org/Techniques/Lee-Writing/
+http://iteslj.org/Techniques/Lingzhu-Listening.html
+http://itfnz.org.nz/ref/essays/demosmq.htm
+http://itinfo.mit.edu/article?id=5833
+http://itinfo.mit.edu/article?id=7039
+http://itlookslikethis.blogeasy.com/main.page.run?startIndex=6
+http://itmanagement.earthweb.com/cio/article.php/1563701
+http://itmanagement.earthweb.com/netsys/article.php/3369841
+http://itmatters.com.ph/news/news_06012004a.html
+http://itmatters.com.ph/news/news_07262004h.html
+http://ito.gn.apc.org/WC14_YUG.HTM
+http://itotd.com/blog.alt?WTheme=9
+http://itpapers.techrepublic.com/abstract.aspx?docid=45114&promo=300111&tag=wpr.6274
+http://itpapers.techrepublic.com/casestudy.aspx?ucname=PROFESSIONS+and+INDUSTRIES&docid=45114
+http://itpapers.techrepublic.com/search.aspx?compid=lo623779012
+http://itpapers.techrepublic.com/webcast.aspx?dtid=2&promo=1500&scid=262&docid=39189
+http://itpapers.techrepublic.com/webcast.aspx?dtid=2&promo=1500&scid=85&docid=38702
+http://itpapers.zdnet.com/casestudy.aspx?dtid=3&scid=267&docid=92465
+http://itpapers.zdnet.com/search.aspx?dtid=2&scid=87
+http://itpolicy.berkeley.edu/cpc502.html
+http://itre.cis.upenn.edu/~myl/languagelog/archives/000292.html
+http://itre.cis.upenn.edu/~myl/languagelog/archives/000844.html
+http://itre.cis.upenn.edu/~myl/languagelog/archives/000918.html
+http://itre.cis.upenn.edu/~myl/languagelog/archives/001303.html
+http://itre.cis.upenn.edu/~myl/languagelog/archives/002006.html
+http://itresearch.forbes.com/rlist/term/Computer-Aided-Design-Software.html
+http://its.psu.edu/wireless/wirelessSecureNet.html
+http://itsaboutimewriters.homestead.com/LenS.html
+http://itso.iu.edu/
+http://itsolutions.forbes.com/forbes/search/viewabstract/60217/index.jsp
+http://itsolutions.forbes.com/search/keyword/forbes/Desktop%20Video%20Conference/Desktop%20Video%20Conference
+http://itsolutions.forbes.com/search/keyword/forbes/Health%20Care%20Case%20Management%20Software/Health%20Care%20Case%20Management%20Software
+http://itstheeconomy.blogspot.com/
+http://itusupport.gmu.edu/stu_purch.asp
+http://iunctura.com/members/2004/51/newsletter.shtml
+http://iupress.indiana.edu/faq.html
+http://iupress.indiana.edu/textnet/0-253-33848-4/0253108438.htm
+http://iusedtobelieve.com/the_past/colour/colour_d8.php
+http://iwc04.events.pennnet.com/content.cfm?Navid=2231&Language=
+http://iwsun4.infoworld.com/articles/hn/xml/01/06/25/010625hnflaw.html
+http://j.webring.com/hub?ring=anabridgementofs
+http://jabbs.blogspot.com/
+http://jabbs.blogspot.com/2005/06/cheney-clarifies-comment-about-last.html
+http://jac.gsu.edu/jac/10/Reviews/12.htm
+http://jac.gsu.edu/jac/12.2/reviews/6.htm
+http://jack-johnson.lyrics-songs.com/lyrics/76324/
+http://jackandbooperschateau.ibforums.com/index.php?showtopic=8330&view=getnewpost
+http://jackmyers.com/jmr/2004/12/21/jmr-12-21-04/
+http://jacksonfreepress.com/
+http://jacpoc.oandp.com/library/1986_03_046.asp
+http://jade.bioware.com/forums/viewtopic.html?topic=271260&forum=79
+http://jade.bioware.com/forums/viewtopic.html?topic=271260&forum=79&sp=0
+http://jade.bioware.com/game_info/labour_of_love_p3.html
+http://jaggi.caltech.edu/misc/travel/index6.html
+http://jaguar.mobygames.com/info/MobyScale
+http://jakarta.apache.org/commons/httpclient/tutorial.html
+http://jakarta.apache.org/jcs/UsingJCSBasicWeb.html
+http://jakarta.apache.org/poi/hpsf/internals.html
+http://jakarta.apache.org/site/idedevelopers.html
+http://jakarta.apache.org/site/mail.html
+http://jam.canoe.ca/Television/TV_Shows/A/Amazing_Race/2005/02/09/925261.html
+http://jama.ama-assn.org/cgi/content/full/282/21/2068
+http://jama.ama-assn.org/cgi/content/full/284/6/681
+http://jama.ama-assn.org/cgi/content/full/286/22/2849
+http://jamaicaobserver.com/sports/
+http://james.anthropiccollective.org/
+http://james.infernal.net.nz/
+http://james.seng.cc/
+http://james.seng.cc/archives/000325.html
+http://jamesbredin.tripod.com/numberfour/id10.html
+http://jameshammerton.blogspot.com/
+http://jameshowardkunstler.typepad.com/clusterfuck_nation/
+http://jameshudnall.com/blog.php?/weblog/C28/
+http://jamesrskemp.net/
+http://jamesrskemp.net/html/jms2/wakinglife/jms2wakinglifetheimportanceofknowingthatyouarealive.htm
+http://jamesthornton.com/eckel/TIJ-1st-edition/Chapter12.html
+http://jamesthornton.com/eckel/TIJ-2nd-edition/AppendA.htm
+http://jamesthornton.com/postgres/7.3/postgres/ddl-alter.html
+http://jamesvdelong.com/articles/ip/jail-break.html
+http://jameswolcott.com/archives/2005/06/the_early_bird.php
+http://jameswolcott.com/archives/2005/06/the_price_of_be.php
+http://jan.netcomp.monash.edu.au/java/jnlp/paper.html
+http://jan.ucc.nau.edu/~doetqp-p/courses/env320/lec5/Lec5.html
+http://jan.ucc.nau.edu/~jar/Factors.html
+http://jan.ucc.nau.edu/~jar/TIL_25.html
+http://janesassaman.com/store-pages/booksvids/booksvids.html
+http://janmariedore.com/html/BS0704.html
+http://janus.lib.cam.ac.uk/db/node.xsp?id=EAD%2FGBR%2F0272%2FREF%2F13
+http://janus.state.me.us/legis/statutes/8/title8sec271.html
+http://japan.fjordaan.net/02_meiji_harajuku.html
+http://japantoday.com/e/?content=news&cat=6&id=326486
+http://japantoday.com/e/?content=news&cat=8&id=326934
+http://japanupdate.com/en/?id=3360
+http://japanupdate.com/en/?id=5628
+http://jaq.chaosmagic.com/SStones.htm
+http://jas.fass.org/cgi/content/full/80/7/1771
+http://jasewells.com/gayicons/
+http://jasewells.com/meetmichael.html
+http://jason.similarselection.org/2002_03_01_jasonsutter_archive.php
+http://jasonnolan.net/papers/comp1.html
+http://jasons.wumple.com/Interests/Nature/WeedLaws/Welcome.html
+http://jasss.soc.surrey.ac.uk/4/2/5.html
+http://jasss.soc.surrey.ac.uk/4/3/0.html
+http://jasss.soc.surrey.ac.uk/5/3/reviews/jaramillo.html
+http://java.sun.com/developer/JDCTechTips/2003/tt0204.html
+http://java.sun.com/developer/JDCTechTips/2005/tt0118.html
+http://java.sun.com/developer/technicalArticles/Interviews/Chaffee/
+http://java.sun.com/developer/technicalArticles/J2SE/Desktop/Mustang_build39.html
+http://java.sun.com/developer/technicalArticles/Media/timing/
+http://java.sun.com/developer/technicalArticles/javaopensource/plg.html
+http://java.sun.com/developer/technicalArticles/releases/j2se15langfeat/
+http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html
+http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
+http://java.sun.com/docs/books/tutorial/collections/interfaces/set.html
+http://java.sun.com/docs/books/tutorial/essential/exceptions/definition.html
+http://java.sun.com/docs/books/tutorial/essential/system/properties.html
+http://java.sun.com/docs/books/tutorial/security1.2/tour1/step3.html
+http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
+http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
+http://java.sun.com/docs/books/tutorial/uiswing/misc/access.html
+http://java.sun.com/features/1998/01/security.html
+http://java.sun.com/features/1998/03/inetbiz.html
+http://java.sun.com/features/1998/05/birthday.html
+http://java.sun.com/features/2000/06/billday.html
+http://java.sun.com/features/2000/08/instinet.html
+http://java.sun.com/features/2003/05/bloch_qa.html
+http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS4.html
+http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSFConfigure10.html
+http://java.sun.com/j2ee/index.jsp
+http://java.sun.com/j2se/
+http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html
+http://java.sun.com/j2se/1.5.0/docs/guide/xml/jaxp/JAXP-Compatibility_150.html
+http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html
+http://java.sun.com/j2se/index.jsp
+http://java.sun.com/javaone/general_sessions5.html
+http://java.sun.com/jdc/onlineTraining/new2java/supplements/2003/Aug03.html
+http://java.sun.com/people/jag/Ariane5.html
+http://java.sun.com/products/jfc/tsc/
+http://java.sun.com/products/jfc/tsc/articles/performance/
+http://java.sun.com/products/jini/2.0/doc/specs/html/entry-spec.html
+http://javaboutique.internet.com/jini/
+http://javalobby.com/forums/thread.jspa?threadID=16730&messageID=91823950
+http://javalobby.com/forums/thread.jspa?threadID=16730&messageID=91823950&tstart=0
+http://javascript.weblogsinc.com/entry/1234000473042295/
+http://javatapestry.blogspot.com/archives/2004_01_01_javatapestry_archive.html
+http://jaycost.blogspot.com/2004/10/theorizing-about-oh-ground-game.html
+http://jbpm.org/article.html
+http://jbtank.com/indians/sittingbull.html
+http://jchemed.chem.wisc.edu/Journal/Issues/1999/Apr/abs578.html
+http://jcpenney.imdb.com/title/tt0099785/news
+http://jcwalsh.bravejournal.com/
+http://jdawg4949.tripod.com/id10.html
+http://jdj.sys-con.com/read/103740.htm
+http://jdmx.blogspot.com/2002_05_05_jdmx_archive.html
+http://jducoeur.org/game-hist/game-rules.html
+http://jducoeur.org/game-hist/seaan-cardhist.html
+http://jeaninenoyes.com/performances.php
+http://jeff-lab.queensu.ca/stat/sas/sasman/sashtml/proc/zdarex02.htm
+http://jeffcovey.net/personal/weight/?comments
+http://jefferson.blogdrive.com/archive/cm-01_cy-2005_m-01_d-02_y-2005_o-0.html
+http://jeffrey.yasskin.info/blog/archives/2005/05/21/graduation-speech/
+http://jehovah.to/glos/=B.html
+http://jellieszone.com/camerasystems.htm
+http://jena.typepad.com/
+http://jenett.org/asap/divertie/
+http://jenniferweiner.blogspot.com/
+http://jennytc.blogspot.com/
+http://jennytc.blogspot.com/2004_10_10_jennytc_archive.html
+http://jeremy.hopkins-family.org/journal/2004/05/index.php
+http://jeremy.zawodny.com/blog/
+http://jeremy.zawodny.com/blog/archives/000305.html
+http://jeremy.zawodny.com/blog/archives/001056.html
+http://jeremy.zawodny.com/blog/archives/001067.html
+http://jeremy.zawodny.com/blog/archives/002498.html
+http://jeremy.zawodny.com/blog/archives/002568.html
+http://jeremy.zawodny.com/blog/archives/002931.html
+http://jeremy.zawodny.com/blog/archives/003071.html
+http://jeremy.zawodny.com/blog/archives/003079.html
+http://jeremy.zawodny.com/blog/archives/003252.html
+http://jeremy.zawodny.com/blog/archives/003868.html
+http://jeremy.zawodny.com/blog/archives/004362.html
+http://jeremy.zawodny.com/blog/archives/004792.html
+http://jeremy.zawodny.com/blog/archives/004802.html
+http://jeremy.zawodny.com/blog/archives/004853.html
+http://jeremy.zawodny.com/linkblog/archives/2004_09.html
+http://jerryandmartha.com/red/
+http://jerryandmartha.com/red/2004_12_01_archive.html
+http://jerseygirlz.blog-city.com/
+http://jerz.setonhill.edu/weblog/categories/Science.html?category=Science&pageNumber=7
+http://jerz.setonhill.edu/writing/creative/shortstory/
+http://jerz.setonhill.edu/writing/creative/showing.htm
+http://jerz.setonhill.edu/writing/technical/mechanism.htm
+http://jessemccartney.tblog.com/
+http://jetex.org/archive/article-smith-ama-51.html
+http://jetiranger.tripod.com/BLOG/index.blog?topic_id=1018836
+http://jewel.morgan.edu/~cglobal/info.htm
+http://jewelry.about.com/od/shopforjewelry/tp/diamond_stud.htm
+http://jewelrymaking.about.com/cs/glassjewelrybead/index_2.htm
+http://jewishwhistleblower.blogspot.com/2005/05/rabbi-david-lapin-brother-of-daniel.html
+http://jfamilyenterprises.com/bush/page2.html
+http://jfi.uchicago.edu/~tten/Chile/ChileGrad.html
+http://jfly.iam.u-tokyo.ac.jp/html/color_blind/
+http://jfsp.nifc.gov/documents/1999-1%20RFP.html
+http://jgwebber.blogspot.com/2005/02/mapping-google.html
+http://jibbering.com/blog/index.php?m=200401
+http://jibbering.com/blog/index.php?p=122
+http://jihadwatch.org/
+http://jim.roepcke.com/webobjects/articles/wowackreview
+http://jimbosbalto.blogspot.com/
+http://jimbosbalto.blogspot.com/2005_03_01_jimbosbalto_archive.html
+http://jimfl.tensegrity.net/eb/archives/2002_09.shtml
+http://jimfl.tensegrity.net/eb/archives/2003_06.shtml
+http://jimtreacher.com/
+http://jimworld.com/apps/gethigh.forums/action::thread/thread::1057179165/forum::direct-mail/
+http://jip.kentlaw.edu/art/volume1/1-1-2.htm
+http://jiv.sagepub.com/cgi/content/refs/19/5/503
+http://jkalb.org/node/2
+http://jkalb.org/node/47
+http://jkontherun.blogs.com/jkontherun/2004/11/problems_in_oqo.html
+http://jkweb.berkeley.edu/external/research-in-progress/5-3/processive.html
+http://jl.toonzone.net/003/003.htm
+http://jme.bmjjournals.com/cgi/content/full/30/5/487
+http://jmenad.typepad.com/lapdwife/
+http://jmichaelrussell.org/philosop.htm
+http://jmm.aaa.net.au/articles/5584.htm
+http://jmm.aaa.net.au/articles/5586.htm
+http://jmm.aaa.net.au/articles/9442.htm
+http://jmm.aaa.net.au/articles/9833.htm
+http://jmsenglish.com/docpages/christmascarol/stave1p4.html
+http://jn.physiology.org/cgi/content/full/78/5/2336
+http://jn.physiology.org/cgi/content/full/84/1/401
+http://jn.physiology.org/cgi/content/full/87/3/1376
+http://jn.physiology.org/cgi/content/full/91/1/239
+http://jn.physiology.org/cgi/content/full/92/2/1105
+http://jncicancerspectrum.oupjournals.org/cgi/pdq/jncipdq;CDR0000270487?version=professional
+http://jnnp.bmjjournals.com/cgi/content/full/67/4/556a
+http://jnnp.bmjjournals.com/cgi/content/full/68/4/458
+http://jobfunctions.bnet.com/LEADERSHIP/Growth+Strategies+and+Tools/?cname=Growth+Strategies+and+Tools&sortby=default
+http://jobfunctions.bnet.com/whitepaper.aspx?scname=Culture&docid=61916
+http://jobfunctions.bnet.com/whitepaper.aspx?scname=Culture&docid=90223
+http://jobguide.symplicity.com/resources/profession_article.php?id=20
+http://jobguide.thegoodguides.com.au/book.cfm?contentfile=3-9-workterms.htm
+http://jobguide.thegoodguides.com.au/book.cfm?contentfile=3-9-workterms.htm&printonly=true
+http://jobinthesun.com/forum/topic.asp?TOPIC_ID=2441
+http://joblynx.com/
+http://jobprofiles.monster.com/Content/job_content/JC_Science/JSC_ScienceGeneral/copy_of_JOB_MarineBiologist/jobzilla_html?jobprofiles=1
+http://jobs.about.com/
+http://jobs.aol.careerbuilder.com/al.ic/Alabama_Montgomery_Distribution-Shipping.htm
+http://jobs.aol.careerbuilder.com/al.ic/Alaska_Anchorage/
+http://jobs.aol.careerbuilder.com/al.ic/Connecticut_Hartford?radius=10
+http://jobs.aol.careerbuilder.com/al.ic/Hawaii_Honolulu/
+http://jobs.aol.careerbuilder.com/al.ic/Hawaii_Honolulu_CustomerService.htm
+http://jobs.aol.careerbuilder.com/al.ic/Nevada_LasVegas_Accounting.htm
+http://jobs.aol.careerbuilder.com/al.ic/Nevada_LasVegas_Finance.htm
+http://jobs.aol.careerbuilder.com/al.ic/NorthDakota_GrandForks/
+http://jobs.careerbuilder.com/JobSeeker/Companies/CompanyJobResults.aspx?Comp_DID=C231Z6JQ766SBZPQJQ
+http://jobs.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J37X065J6L83K652HW
+http://jobs.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8E6ZV6TQ8D94KGKB3K
+http://jobs.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=JQ5HK6G4TQFDBH8RB9
+http://jobs.careerbuilder.com/al.ic/Georgia_Conyers_Insurance.htm?radius=20
+http://jobs.careerbuilder.com/al.ic/Minnesota_Bloomington_Banking.htm?radius=10
+http://jobs.careerbuilder.com/al.ic/NorthCarolina_ProfessionalServices.htm
+http://jobs.careerbuilder.com/al.ic/Ohio_Cincinnati_Banking.htm?radius=20
+http://jobs.careerbuilder.com/al.ic/Texas_Denton_Banking.htm?radius=50
+http://jobs.careerbuilder.com/al.ic/Utah_StGeorge/
+http://jobs.collegerecruiter.com/JS/General/Job.asp?id=3434741
+http://jobs.collegerecruiter.com/JS/General/Job.asp?id=3456043
+http://jobs.collegerecruiter.com/JS/General/Job.asp?id=3460142
+http://jobs.collegerecruiter.com/JS/General/Job.asp?id=3489352
+http://jobs.esc.state.nc.us/soicc/info/briefs.htm
+http://jobs.fidelity.com/business/career_rms.shtml
+http://jobs.hospitalityonline.com/69079/
+http://jobs.mammothmountain.com/career/index.cfm
+http://jobs.mammothmountain.com/season/
+http://jobs.red-sea.com/terms.php
+http://jobs.state.va.us/careerguides/EEOMgr.htm
+http://jobs.state.va.us/careerguides/EmplRelMgr.htm
+http://jobs.state.va.us/careerguides/EmployeeRelationsSpec.htm
+http://jobs.uiowa.edu/employee_spotlights/details.php?ID=0
+http://jobsadvice.guardian.co.uk/secretarial/story/0,14448,1182934,00.html
+http://jobsearch.about.com/cs/jobsearchhelp/a/10tips.htm
+http://jobsearch.about.com/cs/networking/a/networking.htm
+http://jobsearch.about.com/cs/summercampjobs/a/summercamp.htm
+http://jobsearch.about.com/od/careeradvice/a/careerchange2.htm
+http://jobsearch.about.com/od/employmentlaw/a/childlaborlaw.htm
+http://jobsearch.about.com/od/employmentlaw/index_a.htm
+http://jobsearch.about.com/od/jobsearchtips/a/jobsearchtool.htm
+http://jobsearch.about.com/od/networking/a/networkingtips.htm
+http://jobsearch.about.com/od/sampleresumes/l/blsampcoverlett.htm
+http://jobsearch.about.com/od/summercampjobs/a/summercamptip.htm
+http://jobsearch.about.com/od/teenstudentgrad/
+http://jobsearch.about.com/od/unemployment/
+http://jobsearch.gov.au/harvesttrail/info.aspx
+http://jobsearchtech.about.com/od/laborlaws/l/blt_legal.htm
+http://jobseeker.unicru.com/asp/home/terms.asp
+http://jobsinpsychology.com/featured_article.asp
+http://jodi.ecs.soton.ac.uk/Articles/v01/i08/Hunter/
+http://jodi.tamu.edu/Articles/v03/i02/Mohr/
+http://jodi.tamu.edu/Articles/v03/i02/Mohr/?printable=1
+http://jodi.tamu.edu/Articles/v04/i03/Deniman/
+http://joelando.tv/mag/fu/fu.html
+http://joemygod.blogspot.com/2004/05/deal-breaker.html
+http://joemygod.blogspot.com/2005/04/deal-breaker.html
+http://joesacher.com/documents/commandline.php?Page=All
+http://joesacher.com/documents/commandline.php?Page=ETRE
+http://joesdiecastshack.com/mytakeon3.htm
+http://john.curtin.edu.au/events/speeches/grattanlecture.html
+http://john.hoke.org/
+http://johnarthur.tripod.com/leithhistory/siege.htm
+http://johnaugust.com/
+http://johnaugust.com/archives/category/qanda/television/
+http://johnaugust.com/index.php
+http://johnbrashear.tripod.com/bio/KeelerJ.htm
+http://johnharkeygibbs.typepad.com/jhg/
+http://johnharkeygibbs.typepad.com/jhg/2005/01/best_of_with_li.html
+http://johnkerrythenewsoldier.blogspot.com/
+http://johnmartintaylor.com/newsletter_20011209_tallinn.html
+http://johnporcaro.typepad.com/blog/2005/03/work_relationsh.html
+http://johnquiggin.com/index.php/archives/2005/04/18/duffy-and-carter-on-counterpoint/
+http://johnquiggin.com/index.php/archives/2005/06/02/industrial-relations-reforms-part-2/
+http://johnrlott.tripod.com/op-eds/IBDGunConFailure.html
+http://johnrlott.tripod.com/postsbyday/7-4-03.html
+http://johnsons-rambler.blogspot.com/2005_03_01_johnsons-rambler_archive.html
+http://johnvcooper.home.mindspring.com/ralcomma.htm
+http://joi.ito.com/archives/2002/04/09/trilateral_commission_speech.html
+http://joi.ito.com/archives/2003/02/05/keiji_shima.html
+http://joi.ito.com/archives/2003/08/06/going_ptime.html
+http://joi.ito.com/archives/2003/08/15/article_in_the_economist_about_commercialization_of_weblogs.html
+http://joi.ito.com/archives/2004/05/30/garbage_day_in_the_village.html
+http://joi.ito.com/archives/2004/08/29/wikipedia_attacked_by_ignorant_reporter.html
+http://jollyroger.com/rogerlodge.html
+http://jonathan.mueller.faculty.noctrl.edu/toolbox/howstep1.htm
+http://jonathanscorner.com/tms/complex/complex8.html
+http://jonathanscorner.com/writings/awakening/printer.html
+http://jonathanscorner.com/writings/peace/peace2.html
+http://jonathanscorner.com/writings/watch/watch.html
+http://jonjayray.netfirms.com/psychlef.html
+http://jonjayray.tripod.com/ethatt.html
+http://jonnybillericay.blogspot.com/
+http://jonnybillericay.blogspot.com/2005_03_01_jonnybillericay_archive.html
+http://jonnybillericay.blogspot.com/2005_04_01_jonnybillericay_archive.html
+http://jonsullivan.com/
+http://jophan.org/mimosa/m13/13_p31.html
+http://jorite.blogspot.com/
+http://joshuaink.com/blog/196/a-simple-guide-to-3-column-layouts
+http://joslin.org/news/prevent_type2.shtml
+http://journal.aiga.org/content.cfm?ContentAlias=_getfullarticle&aid=926343
+http://journal.einsure.com/archive/2004/11/29/194.aspx
+http://journal.media-culture.org.au/0501/05-parikka.php
+http://journal.media-culture.org.au/0502/08-hood.php
+http://journal.smsmasters.co.uk/
+http://journal.sumdog.com/index.php?page=89
+http://journalclub.org/
+http://journalism.berkeley.edu/ngno/stories/001401.html
+http://journalism.berkeley.edu/ngno/stories/003863.html
+http://journalism.berkeley.edu/ngno/stories/003863_print.html
+http://journalism.berkeley.edu/projects/biplog/
+http://journalism.berkeley.edu/projects/biplog/archive/000382.html
+http://journalism.berkeley.edu/projects/southafrica/news/traumaprinterfriendly.html
+http://journalism.nyu.edu/mt/mt-comments.cgi?entry_id=577
+http://journalism.nyu.edu/pubzone/streetlevel/union/000530.html
+http://journalism.nyu.edu/pubzone/streetlevel/union/000534.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/01/14/watch_sites.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/03/31/ryan_video.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/04/07/atrios_kos.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/04/16/con_prelude.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/04/25/bush_muscle.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/06/28/gates_blog.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/07/29/edsall_blogs.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/08/11/heaton_unity.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/09/15/get_win.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/09/28/four_years.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/10/29/mcgill_essay.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2004/12/26/tptn04_intro.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2005/01/04/lex_report.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2005/03/14/kmng_pwr.html
+http://journalism.nyu.edu/pubzone/weblogs/pressthink/2005/05/08/rutt_evo.html
+http://journals.aol.ca/plittle/AuroraWalkingVacation/
+http://journals.aol.com/boiseladie/MyWorld/
+http://journals.aol.com/jeffrowan111/PoliticalWaves/entries/368
+http://journals.aol.com/jgalarza879/SmallTownLife/
+http://journals.aol.com/jjsilcocks/TheLast50Pounds/
+http://journals.aol.com/johnmscalzi/bytheway/entries/197
+http://journals.aol.com/robinngabster/Thesearethedaysofourlives/entries/770
+http://journals.aol.com/schnozbeary/FreshCupMoveDown
+http://journals.aol.com/schnozbeary/FreshCupMoveDown/
+http://journals.aol.com/scottishracer9/TheunofficialEverybodyNEXTELCham/
+http://journals.aol.com/shallwetalkabout/Letstalkaboutwhatever/entries/730
+http://journals.aol.com/sounbelievableme/PassingTime/
+http://journals.aol.com/thcaraja/AJournal/entries/839
+http://journals.iucr.org/b/issues/1997/05/00/isscontsbdy.html
+http://journals.iucr.org/iucr-top/cong/18/poster/P8.html
+http://journalstar.com/articles/2005/06/23/local/doc42b9f456d06c3543896642.txt
+http://journaltimes.abracat.com/c2/legal/results/index.xml
+http://journey.20fr.com/custom3.html
+http://journeytoforever.org/biodiesel_make.html
+http://journeytoforever.org/biofuel_food.html
+http://journeytoforever.org/farm_library/medtest/medtest_refs.html
+http://journeytoforever.org/farm_library/medtest/medtest_sykes.html
+http://journeytoforever.org/keith/MMT/keith_harrods.html
+http://joy2meu.com/World_Trade_Center.html
+http://joy2meu.com/jump_start_recovery.htm
+http://jp.physoc.org/cgi/content/abstract/419/1/405
+http://jpn.cec.eu.int/CGI/topiclink.php?page=/home/news_newsobj766.php&language=en
+http://jpn.cec.eu.int/CGI/topiclink.php?page=/home/news_newsobj8.php&language=en
+http://jpn.cec.eu.int/CGI/topiclink.php?page=/home/speech_Speech201203.php&language=en
+http://jpn.cec.eu.int/CGI/topiclink.php?page=/home/speech_Speech202801.php&language=en
+http://jppr.psychiatryonline.org/cgi/content/full/10/4/262
+http://jquarter.members.beeb.net/moreattwood.htm
+http://jquarter.members.beeb.net/walk5.htm
+http://jquarter.members.beeb.net/walk8.htm
+http://jrhull.typepad.com/seward_street/2005/04/an_incredible_m.html
+http://jri.org.uk/news/letter/summer2002.htm
+http://jrobb.mindplex.org/2004/10/13.html
+http://jroller.com/page/Noniko/20050402
+http://jroller.com/page/Noniko/20050608
+http://jrscience.wcp.muohio.edu/Research/HNatureProposalsArticles/FinalPaper.Cananindividua.html
+http://jrscience.wcp.muohio.edu/html/Astronomy.html
+http://jrscience.wcp.muohio.edu/html/astronomy.html
+http://jschoolyear.blogspot.com/
+http://jsis.artsci.washington.edu/programs/cwesuw/mancini.htm
+http://jsr.fsu.edu/2003/Cutrer.htm
+http://jtc.blogs.com/just_left/2004/10/in_defence_of_p.html
+http://jubileesouth.org/news/EpZlEkkEkEzoYeOfYF.shtml
+http://judaism.about.com/od/jewishgenealogy/a/jewpas_kerry.htm
+http://judiciary.house.gov/OversightTestimony.aspx?ID=176
+http://judiciary.house.gov/OversightTestimony.aspx?ID=55
+http://judiciary.house.gov/legacy/5102.htm
+http://judiciary.house.gov/legacy/546.htm
+http://judiciary.senate.gov/faq.htm
+http://judiciary.senate.gov/oldsite/32320pl2.htm
+http://judiciary.senate.gov/oldsite/7272000_pjl1.htm
+http://judo1.net/ju01010.htm
+http://judoinfo.com/weers93.htm
+http://jukebox.thing.net/projet/textealeng.htm
+http://juliamae.com/
+http://juniortennis.com/Science/AdamNaylor/GrowingOlder.htm
+http://junit.sourceforge.net/doc/testinfected/testing.htm
+http://junk.haughey.com/doctorow-drm-ms.html
+http://junkyardblog.net/archives/week_2002_11_24.html
+http://junkyardblog.net/archives/week_2003_08_24.html
+http://junkyardblog.net/archives/week_2004_01_18.html
+http://junkyardblog.net/archives/week_2004_02_01.html
+http://junkyardblog.net/archives/week_2005_06_12.html
+http://jurist.law.pitt.edu/paperchase/
+http://jurist.law.pitt.edu/paperchase/2004/10/developing-story-afghan-election-in.php
+http://jurist.law.pitt.edu/paperchase/2004/10/german-court-orders-release-of.php
+http://jurist.law.pitt.edu/paperchase/2005/01/german-high-court-judge-revives.php
+http://jurist.law.utoronto.ca/dictionary.htm
+http://justacup.blogs.com/
+http://justgoodcompany.org/2.1/dellacava-engel.htm
+http://justlightning.net/html/policies/spam.html
+http://justoneminute.typepad.com/main/2004/07/what_i_didnt_fi.html
+http://justoneminute.typepad.com/main/2004/09/who_is_robert_m.html
+http://justoneminute.typepad.com/main/2005/01/hanoi_john_we_h.html
+http://justoneminute.typepad.com/main/2005/02/ny_times_plame_.html
+http://justsue.ca/?p=803
+http://justus.anglican.org/resources/pc/dekoven/letter1875.html
+http://justus.anglican.org/resources/pc/england/church/om/9.html
+http://justworldnews.org/MT/mt-comments.cgi?entry_id=1019
+http://justworldnews.org/archives/000895.html
+http://jvandorp.blogspot.com/2004_07_01_jvandorp_archive.html
+http://jvi.asm.org/cgi/content/full/76/10/5094
+http://jvis.com/articles/default.htm
+http://jwz.livejournal.com/494040.html
+http://jxquick.sourceforge.net/quick3/
+http://k12linux.mesd.k12.or.us/using_samba/ch05_04.html
+http://k2.kirtland.cc.mi.us/~balbachl/step.htm
+http://kabuki.eecs.berkeley.edu/~luns/papers/241rep.html
+http://kabuki.eecs.berkeley.edu/~rsn/papers/EE241/final.html
+http://kairosnews.org/
+http://kaixun.en.alibaba.com/group/0.html
+http://kaixun.en.alibaba.com/group/0f2f21.html
+http://kalsey.com/2003/05/newly_digital/
+http://kansas.uscity.net/Animal/
+http://kaprekar.sourceforge.net/
+http://karaart.com/contests/contests.06.html
+http://kari.hiitola.net/audrey/blog.html
+http://karws.gso.uri.edu/JFK/conspiracy_theory/the_paranoid_mentality/The_paranoid_style.html
+http://kate.nerdsluts.com/
+http://katespot.com/archives/2004/10/
+http://katiej.typepad.com/mzsmlph/2005/02/dealing.html
+http://kauaiworld.com/articles/2005/01/21/news/news01.txt
+http://kazmer.uml.edu/Research/robust_design.htm
+http://kbs.cs.tu-berlin.de/~jutta/ht/writing/text.html
+http://kcal9.com/topstories/topstories_story_030140005.html
+http://kccesl.tripod.com/spring2001/studentprojects/sociology.html
+http://kclibrary.nhmccd.edu/music-2.html
+http://kcs-csi.blogspot.com/
+http://kdiff3.sourceforge.net/doc/options.html
+http://kdoch.state.ks.us/public/resources/businesses/list.jsp
+http://kdoch.state.ks.us/public/resources/individuals/list.jsp
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=1159
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=3100
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=3210
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=511
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=588
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=630
+http://keepandbeararms.com/information/XcIBViewItem.asp?ID=832
+http://keepoutoftrouble.blogspot.com/
+http://keeptrying.blogspot.com/
+http://kehillatisrael.net/docs/atp.htm
+http://keirsey.com/pumII/tf.html
+http://keithdevens.com/wiki/Why+I'm+not+a+Roman+Catholic
+http://keithp.com/~keithp/talks/xarch_ols2004/xarch-ols2004-html/
+http://kelly.usd259.org/PTA%20Newsletter.htm
+http://kellyanncollins.com/2005/01/lets-wait.html
+http://kenmacleod.blogspot.com/2005_05_01_kenmacleod_archive.html
+http://kenneth.moyle.com/cp/
+http://kennethandersonlawofwar.blogspot.com/
+http://kenpom.typepad.com/ha/2005/01/
+http://kentucky.gov/Portal/FollowLink/kyethics_leaving-gov
+http://kenyada.com/onporch.htm
+http://kerlins.net/bobbi/Eriador/links/health.html
+http://kerneltrap.org/
+http://kerneltrap.org/mailarchive/1/message/69843/thread
+http://kerneltrap.org/node/3522
+http://kerneltrap.org/node/3522/10513
+http://kerneltrap.org/node/3522/print
+http://kerneltrap.org/node/4622
+http://kerneltrap.org/node/4818
+http://kerneltrap.org/node/4966
+http://kerneltrap.org/node/5073
+http://kerneltrap.org/node/view/3240
+http://kerrymccall.com/tips.html
+http://kervinphotos.blogspot.com/
+http://kevinholtsberry.com/blog/archives/003150.html
+http://kevinholtsberry.com/ellahope/archives/2005_02.html
+http://kevinpierpont.com/library/archives/2005/05/15/living-above-circumstances-phil-4-12/
+http://keyetv.com/topstories/topstories_story_030140005.html
+http://keyissues.mu.nu/
+http://keystosaferschools.com/LOVECampaignTrademark.htm
+http://kfmonkey.blogspot.com/2005/06/its-global-frequency-now.html
+http://kfreshn.tripod.com/
+http://khason.biz/blog/2004/12/why-microsoft-can-blow-off-with-c.html
+http://kids.discovery.com/fansites/saddleclub/quiz/quiz.html
+http://kidshealth.org/PageManager.jsp?dn=familydoctor&article_set=22955&lic=44&cat_id=190
+http://kidshealth.org/breaking_news/terrorist_attacks.html
+http://kidshealth.org/kid/body/heart_noSW.html
+http://kidshealth.org/kid/feeling/emotion/anger.html
+http://kidshealth.org/kid/feeling/emotion/stress.html
+http://kidshealth.org/kid/grow/tough_topics/running_away.html
+http://kidshealth.org/kid/health_problems/allergiesimmune/food_allergies.html
+http://kidshealth.org/kid/health_problems/allergy/asthma_triggers.html
+http://kidshealth.org/kid/health_problems/learning_problem/adhdkid.html
+http://kidshealth.org/kid/misc/terrorist_attacks.html
+http://kidshealth.org/kid/stay_healthy/fit/no_sports.html
+http://kidshealth.org/kid/stay_healthy/food/comments_new_pyramid.html
+http://kidshealth.org/kid/watch/out/water.html
+http://kidshealth.org/parent/emotions/behavior/suicide.html
+http://kidshealth.org/parent/firstaid_safe/home/products.html
+http://kidshealth.org/parent/firstaid_safe/travel/job.html
+http://kidshealth.org/parent/general/sick/labtest6_p2.html
+http://kidshealth.org/parent/general/sleep/cosleeping.html
+http://kidshealth.org/parent/general/teeth/healthy.html
+http://kidshealth.org/parent/growth/movement/move12yr.html
+http://kidshealth.org/parent/medical/heart/murmurs.html
+http://kidshealth.org/parent/medical/kidney/chronic_kidney_disease.html
+http://kidshealth.org/parent/misc/teachers_tragedies.html
+http://kidshealth.org/parent/nutrition_fit/nutrition/childs_weight_prt.htm
+http://kidshealth.org/parent/positive/talk/news.html
+http://kidshealth.org/parent/pregnancy_newborn/pregnancy/medical_care_pregnancy.html
+http://kidshealth.org/parent/pregnancy_newborn/pregnancy/pregnancy.html
+http://kidshealth.org/parent/system/doctor/birth_centers_hospitals.html
+http://kidshealth.org/teen/diseases_conditions/personal_stories/kristin.html
+http://kidshealth.org/teen/diseases_conditions/sight/kristin.html
+http://kidshealth.org/teen/food_fitness/exercise/compulsive_exercise.html
+http://kidshealth.org/teen/safety/first_aid/nosebleeds.html
+http://kidshealth.org/teen/your_body/skin_stuff/skin_tips.html
+http://kidshealth.org/teen/your_body/take_care/teeth.html
+http://kidshealth.org/teen/your_mind/families/divorce.html
+http://kidshealth.org/teen/your_mind/problems/pet_death.html
+http://kijabe.org/kenya2001/6.html
+http://kildare.ie/countycouncil/corporateaffairs/motortaxation/MotorTaxationGuide/
+http://kimberleyclub.co.za/history.htm
+http://kimwells.blogspot.com/2003/12/temporarily-single-girls-guide-to.html
+http://kinja.com/user/emas
+http://kinja.com/user/mrbarger
+http://kinja.com/user/nhelpern
+http://kinks.it.rit.edu/charts.html
+http://kiosan.blogharbor.com/
+http://kirchelconsulting.com/guest1/index.php
+http://kirkland.date.com/black-dating/washington.htm
+http://kirsi.zerodistance.org/blog/archives/2004_02.php
+http://kiteonline.net/gvep/gvepactivities.htm
+http://kiwiwebhost.co.nz/clientfeedback.htm
+http://kjcb.jacksoncountygov.com/aboutus.asp
+http://kjo84.typepad.com/cta_tattler/2005/02/eyewitness_acco.html
+http://kjzz.org/
+http://klabs.org/DEI/References/design_guidelines/design_analysis_test_guides.htm
+http://klingon.dw-world.de/english/history.php
+http://klobouk.fsv.cvut.cz/~ondra/sade/sade.html
+http://klomdark.servebeer.com:8081/messagebase/ReadMessage.asp?MsgNum=669
+http://knitnthink.blogspot.com/
+http://knitting.about.com/library/weekly/aa060197.htm
+http://knitting.xaviermusketeer.com/
+http://knitty.com/ISSUEsummer03/FEATtheresa.html
+http://knottyboy.blogspot.com/
+http://knowgramming.com/introduction/rules2.htm
+http://knowledge.nzoom.com/knowledge_detail/0,2210,106102-181-183,00.html
+http://knowledge.wharton.upenn.edu/article/1219.cfm
+http://knowledge.wharton.upenn.edu/article/1227.cfm
+http://knowledge.wharton.upenn.edu/articles.cfm?catid=7&articleid=863&homepage=yes
+http://knowledge.wharton.upenn.edu/index.cfm?fa=specialsection&specialid=29
+http://knowledge.wharton.upenn.edu/index.cfm?fa=viewArticle&id=1154&specialId
+http://knowledge.wharton.upenn.edu/index.cfm?fa=viewArticle&id=1227
+http://knowledge.wharton.upenn.edu/index.cfm?fa=viewfeature&id=1172
+http://knowledge.wharton.upenn.edu/index.cfm?fa=viewfeature&id=1219
+http://knowledge.wharton.upenn.edu/index.cfm?fa=whatshot
+http://knowledgeloom.org/elemlit/ells_meetnds.jsp
+http://knowledgestorm.co.uk/search/keyword/ksuk/UK%20Private%20Club%20Managing%20Software/UK%20Private%20Club%20Managing%20Software
+http://knowledgestorm.inc.com/search/keyword/inc/Telephone%20Record%20Software/Telephone%20Record%20Software
+http://knowledgestorm.techtarget.com/searchcio/search/tabkeyword/software/data+life+cycle+management/1/index.jsp
+http://knowledgestorm.techtarget.com/searchenterprisevoice/search/keyword/Managed%20Service%20Provider%20Webcast/Managed%20Service%20Provider%20Webcast
+http://knowledgestorm.techtarget.com/searchwin2000/search/keyword/Department%20Of%20Labor%20Jobs%20Dallas%20Texas%20Software/Department%20Of%20Labor%20Jobs%20Dallas%20Texas%20Software
+http://knowtruth.tripod.com/ess_doct.htm
+http://knus99.virtbiz.com/kdnt.html
+http://ko.cwru.edu/services/musfrming.html
+http://koala.ilog.fr/twikiirc/bin/irclogger_log/twiki?date=2003-10-19,Sun&twiki=on
+http://koala.ilog.fr/twikiirc/bin/irclogger_log/twiki?date=2004-11-22,Mon&twiki=on
+http://kobek.com/detnews91835.html
+http://kohbunny.com/holes.html
+http://koiness.emopsychostar.com/
+http://kol.coldfront.net/index.php/content/view/161/73/
+http://kol.coldfront.net/index.php/content/view/254/67/
+http://kollman-saucier.com/quick/quickseptember2004.shtml
+http://kondor.etf.bg.ac.yu/~lutovac/confer.htm
+http://kongehuset.dk/artikel.php?dogtag=k_en_org_hou
+http://kongehuset.dk/artikel.php?dogtag=k_en_org_hou_mem
+http://konrad.lawson.net/interests.html
+http://korea.co.kr/korealink/kn.html
+http://korealife.blogspot.com/archives/2004_08_15_korealifeblog_archives.html
+http://koti.mbnet.fi/~kakoskin/penpal/1830/octo04.html
+http://kotn.ntu.ac.uk/create/archive/nickijan.htm
+http://kottke.org/
+http://kr.cs.ait.ac.th/~radok/physics/b5.htm
+http://kr.cs.ait.ac.th/~radok/physics/k10.htm
+http://kristala.diaryland.com/
+http://kristopherjohnson.blogspot.com/2005/04/holy-wars-in-aviation.html
+http://kristynleighrobinson.4t.com/custom4.html
+http://kron4.com/Global/story.asp?S=2854226
+http://ks.water.usgs.gov/Kansas/pubs/reports/wrir.01-4205.html
+http://ksghome.harvard.edu/~.JNewhouse.Wiener.Ksg/fullbio.html
+http://ksghome.harvard.edu/~SDynarski/publications.htm
+http://ksghome.harvard.edu/~pnorris/Books/On%20Message.htm
+http://ksgnotes1.harvard.edu/degreeprog/courses.nsf/0/274e306d1252424f85256ef2005b8f39?OpenDocument&ExpandSection=2
+http://ksgnotes1.harvard.edu/degreeprog/courses.nsf/0/462ecaab1cba1e3c85256edd00175169?OpenDocument&ExpandSection=2
+http://ksgnotes1.harvard.edu/degreeprog/courses.nsf/0/7124cda47190585585256ef2005b8f6b?OpenDocument&ExpandSection=2
+http://ksgnotes1.harvard.edu/degreeprog/courses.nsf/0/bf1141d68db2c5ae85256ef2005b8f3b?OpenDocument&ExpandSection=2
+http://ksi.cpsc.ucalgary.ca/IMS/GNOSIS/TC7F5.html
+http://ksi.cpsc.ucalgary.ca/KAW/KAW96/fensel/ambd.html
+http://kstavino.home.texas.net/Tower17%20Webpage%2005.htm
+http://kuathletics.collegesports.com/chat/092404aaa.html
+http://kudzu.ipr.sc.edu/effectiveness/assessment/IEReports/unin1997.htm
+http://kulichki.com/moshkow/SONGS/plant.txt
+http://kutv.com/business/finance_story_174103051.html
+http://kva.tkk.fi/en/Studies/enrolment.html
+http://kwelos.tripod.com/memes.htm
+http://kyem.dma.state.ky.us/training/exercise.htm
+http://kypros.org/Loizidou/tstatemnt.html
+http://kypros.org/halfmarathon/
+http://kyw.com/finance/finance_story_174103049.html
+http://kzsu.stanford.edu/~cathya/Playlists/jul97.html
+http://la.cancer.gov/evaluate.html
+http://la.com.toursandshows.com/Body.asp?tour=SFO-B0015&page=TourDetails
+http://la.com.toursandshows.com/body.asp?tour=LAS-WED15&page=TourDetails
+http://la.com.toursandshows.com/body.asp?tour=LON-T0009&page=TourDetails
+http://la.com.toursandshows.com/body.asp?tour=SFO-B0015&page=TourDetails&headerson=off
+http://la.oodle.com/sale/tickets/
+http://lab.msdn.microsoft.com/vs2005/get/currentreadme/
+http://labanimalwelfare.org/animals_in_education.html
+http://laboratory-supply.globalspec.com/Specifications/Labware_Scientific_Instruments/Labware_Consumables/Glass_Plastic_Labware
+http://labour-watch.blogspot.com/2004_09_26_labour-watch_archive.html
+http://labour.gov.mu/empment/wpermit.htm
+http://labour.org.uk/privacy
+http://labourlawblog.typepad.com/managementupdates/2005/02/when_should_you.html
+http://labrocca.com/marybrunton/d/disciplinech018.html
+http://labs.pcw.co.uk/
+http://labs.pcw.co.uk/2005/02/
+http://labs.pcw.co.uk/2005/05/
+http://labs.pcw.co.uk/storage/
+http://labs.silverorange.com/local/solabs/include/styleguide/
+http://lachlan.bluehaze.com.au/pubs_etc/
+http://lachlan.gemmell.com/2004/11/adjusting-expectations-and-strategies.html
+http://lacoquette.blogs.com/la_coquette/2004/10/13_reasons_to_f.html
+http://ladida.blog-city.com/
+http://laii.unm.edu/conference/rojas.php
+http://laivakoira.typepad.com/blog/2005/05/morse_texter.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1007.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1008.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1037.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1040.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1042.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1045.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1053.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1054.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1080.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1087.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1090.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1097.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1103.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1105.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1106.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1146.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1158.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1160.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1170.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1177.html
+http://laluni.helloyou.ws/netnews/bk/astrology/astr1191.html
+http://laluni.helloyou.ws/netnews/bk/atom/atom1007.html
+http://laluni.helloyou.ws/netnews/bk/atom/atom1016.html
+http://laluni.helloyou.ws/netnews/bk/atom/atom1025.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1005.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1008.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1010.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1011.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1014.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1017.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1018.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1021.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1022.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1026.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1029.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1031.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1032.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1034.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1036.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1039.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1040.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1043.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1047.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1048.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1049.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1056.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1061.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1063.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1065.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1066.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1068.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1069.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1073.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1074.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1075.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1078.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1080.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1087.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1088.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1091.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1092.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1093.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1094.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1096.html
+http://laluni.helloyou.ws/netnews/bk/autobiography/auto1103.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1005.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1008.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1010.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1021.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1024.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1026.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1033.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1047.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1054.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1058.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1059.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1071.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1074.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1078.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1083.html
+http://laluni.helloyou.ws/netnews/bk/bethlehem/beth1084.html
+http://laluni.helloyou.ws/netnews/bk/destiny/dest1008.html
+http://laluni.helloyou.ws/netnews/bk/destiny/dest1063.html
+http://laluni.helloyou.ws/netnews/bk/destiny/dest1065.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1002.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1006.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1025.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1042.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1047.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1055.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1067.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1071.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1096.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1098.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1214.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1256.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1302.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1316.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1327.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1330.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1340.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1362.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1367.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1382.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1395.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1401.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1403.html
+http://laluni.helloyou.ws/netnews/bk/discipleship1/disc1417.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2002.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2004.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2008.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2012.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2027.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2040.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2063.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2066.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2109.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2147.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2150.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2159.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2164.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2172.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2204.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2205.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2244.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2248.html
+http://laluni.helloyou.ws/netnews/bk/discipleship2/disc2255.html
+http://laluni.helloyou.ws/netnews/bk/education/edu1003.html
+http://laluni.helloyou.ws/netnews/bk/education/edu1008.html
+http://laluni.helloyou.ws/netnews/bk/education/edu1014.html
+http://laluni.helloyou.ws/netnews/bk/education/edu1018.html
+http://laluni.helloyou.ws/netnews/bk/education/edu1034.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1012.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1040.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1102.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1133.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1134.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1157.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1161.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1180.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1236.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1254.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1269.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1272.html
+http://laluni.helloyou.ws/netnews/bk/externalisation/exte1288.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1003.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1052.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1283.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1288.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1321.html
+http://laluni.helloyou.ws/netnews/bk/fire/fire1469.html
+http://laluni.helloyou.ws/netnews/bk/glamour/glam1067.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1025.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1046.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1084.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1086.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1130.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1174.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1181.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1203.html
+http://laluni.helloyou.ws/netnews/bk/healing/heal1238.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1003.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1014.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1016.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1028.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1030.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1032.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1034.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1037.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1043.html
+http://laluni.helloyou.ws/netnews/bk/hercules/herc1062.html
+http://laluni.helloyou.ws/netnews/bk/initiation/init1023.html
+http://laluni.helloyou.ws/netnews/bk/meditation/medi1132.html
+http://laluni.helloyou.ws/netnews/bk/problems/prob1027.html
+http://laluni.helloyou.ws/netnews/bk/problems/prob1041.html
+http://laluni.helloyou.ws/netnews/bk/problems/prob1048.html
+http://laluni.helloyou.ws/netnews/bk/problems/prob1068.html
+http://laluni.helloyou.ws/netnews/bk/psychology1/psyc1093.html
+http://laluni.helloyou.ws/netnews/bk/psychology2/psyc2089.html
+http://laluni.helloyou.ws/netnews/bk/psychology2/psyc2235.html
+http://laluni.helloyou.ws/netnews/bk/psychology2/psyc2245.html
+http://laluni.helloyou.ws/netnews/bk/psychology2/psyc2251.html
+http://laluni.helloyou.ws/netnews/bk/psychology2/psyc2264.html
+http://laluni.helloyou.ws/netnews/bk/rays/rays1047.html
+http://laluni.helloyou.ws/netnews/bk/rays/rays1085.html
+http://laluni.helloyou.ws/netnews/bk/rays/rays1140.html
+http://laluni.helloyou.ws/netnews/bk/rays/rays1157.html
+http://laluni.helloyou.ws/netnews/bk/rays/rays1279.html
+http://laluni.helloyou.ws/netnews/bk/reappearance/reap1011.html
+http://laluni.helloyou.ws/netnews/bk/reappearance/reap1044.html
+http://laluni.helloyou.ws/netnews/bk/reappearance/reap1049.html
+http://laluni.helloyou.ws/netnews/bk/soul/soul1008.html
+http://laluni.helloyou.ws/netnews/bk/telepathy/tele1036.html
+http://laluni.helloyou.ws/netnews/bkindex/c1000/f1254.html
+http://laluni.helloyou.ws/netnews/bkindex/c1031/f1393.html
+http://laluni.helloyou.ws/netnews/bkindex/c1033/f1081.html
+http://laluni.helloyou.ws/netnews/bkindex/c1038/f1348.html
+http://laluni.helloyou.ws/netnews/bkindex/c1045/f1400.html
+http://laluni.helloyou.ws/netnews/bkindex/c1065/f1294.html
+http://lamar.colostate.edu/~barberhd/agingquotes.htm
+http://lamar.colostate.edu/~clifton/agingquotes.htm
+http://lamar.colostate.edu/~montrose/fire.htm
+http://lamar.colostate.edu/~montrose/fire.html
+http://lamar.colostate.edu/~rolston/weir.htm
+http://lambda-the-ultimate.org/classic/message11326.html
+http://lambda-the-ultimate.org/node/view/257
+http://lambda-the-ultimate.org/node/view/489
+http://lambda-the-ultimate.org/node/view/673
+http://lambda-the-ultimate.org/node/view/758
+http://lambda-the-ultimate.org/node/view/769
+http://lancaster.unl.edu/enviro/pest/factsheets/007-98.htm
+http://lancaster.unl.edu/enviro/pest/factsheets/018-99.htm
+http://lancaster.unl.edu/enviro/pest/wildlife.htm
+http://lancaster.unl.edu/food/ftmar03.htm
+http://landofpuregold.com/frisbee.htm
+http://landru.i-link-2.net/shnyves/church_bells.htm
+http://landscapeimage.com/phorum/read.php?1,1018,1018,quote=1
+http://landscaping.about.com/cs/groundcovervines1/p/moss.htm
+http://langcent.man.ac.uk/olf/library.htm
+http://languagelegend.blogspot.com/
+http://lanl-the-real-story.blogspot.com/2005/06/community-meeting-and-survey_19.html
+http://lanther.co.uk/
+http://laotze.blogspot.com/2005/04/cheese-tycoons-meet-chinese.html
+http://lapband.angelcities.com/obesity_help-01-01.html
+http://lark.phoblacht.net/imcmartin.html
+http://lark.phoblacht.net/quartercentam.html
+http://larvatusprodeo.redrag.net/2005/06/22/stjames-square/
+http://las-vegas-hotels.tripadvisor.com/ShowUserReviews-g45963-d91673-r2965437-Rio_Suite_Hotel_and_Casino-Las_Vegas_Nevada.html
+http://las-vegas-hotels.tripadvisor.com/ShowUserReviews-g45963-d91844-r3547901-Flamingo_Las_Vegas-Las_Vegas_Nevada.html
+http://lashawnbarber.com/archives/2004/10/05/yay/
+http://lashawnbarber.com/archives/2005/06/07/brown-2/
+http://lashawnbarber.com/archives/2005/06/13/miltary/
+http://lashawnbarber.com/archives/2005/06/14/lynching/
+http://lashawnbarber.com/index.php
+http://lasp.colorado.edu/sorce/July02ScienceMeeting.html
+http://lasthome.blogspot.com/
+http://latexmindresearch.tripod.com/stories/TheGlassShrine.htm
+http://latterday.newstrove.com/
+http://latticeqcd.blogspot.com/2005/03/strong-coupling-constant.html
+http://laughingmeme.org/archives/001055.html
+http://launch.yahoo.com/ar-251929-bio--Husker-Du
+http://launch.yahoo.com/ar-252360-bio--Michael-Jackson
+http://launch.yahoo.com/ar-254247-bio--Gene-Autry
+http://launch.yahoo.com/ar-259246-reviews--No-Doubt
+http://launch.yahoo.com/ar-260983-bio--Pet-Shop-Boys
+http://launch.yahoo.com/ar-268634-bio--Jackie-Wilson
+http://launch.yahoo.com/ar-269576-news--Mary-J-Blige
+http://launch.yahoo.com/ar-271195-bio--Blur
+http://launch.yahoo.com/ar-271319-news--Smash-Mouth
+http://launch.yahoo.com/ar-291021-news--Ja-Rule
+http://laurieannweis.com/0share_your_stories.html
+http://laurierking.blogspot.com/2005/03/old-folks.html
+http://lautenberg.senate.gov/~lautenberg/press/2003/01/2005629543.html
+http://lav.scripps.edu/jjgroup_archive/
+http://law.baylor.edu/CareerSvcs/Handouts/interviewingguidelines.htm
+http://law.bepress.com/cgi/viewcontent.cgi?article=1008&context=uiuclwps
+http://law.bepress.com/cgi/viewcontent.cgi?article=1079&context=alea
+http://law.richmond.edu/jolt/v2i1/stinger.html
+http://law.vanderbilt.edu/admiss/llm.html
+http://law.wustl.edu/Registrar/Registration/summer2002/index2.html
+http://law.wustl.edu/WULQ/76-1/761-08.html
+http://law2.house.gov/uscode-cgi/fastweb.exe?getdoc+uscview+t05t08+175+1++'5%20USC%20Sec
+http://lawisfun.crimeny.net/
+http://lawrenceofcyberia.blogs.com/news/2005/03/blood.html
+http://laws.findlaw.com/4th/971523P.html
+http://laws.findlaw.com/5th/9910331cr0.html
+http://laws.findlaw.com/9th/9935209.html
+http://laws.findlaw.com/US/407/1.html
+http://laws.findlaw.com/dc/001141a.html
+http://laws.findlaw.com/us/000/u10414.html
+http://laws.justice.gc.ca/en/C-10.4/C.R.C.-c.1222/60473.html
+http://laws.justice.gc.ca/en/N-5/text.html
+http://laws.lawsociety.com.au/resources/library/cat/p-index.html
+http://laws.lp.findlaw.com/1st/01-1405.html
+http://laws.lp.findlaw.com/us/000/001937.html
+http://lawssb.com/currentcases.html
+http://lawtec.net/Members/antonh/articles/Aug2003/010502/view
+http://lawweb.usc.edu/admissions/nextsteps/pages/fellowship.html
+http://lawyers.findlaw.com/lawyer/practicestate/Medical%20Malpractice/Arkansas
+http://lawyers.findlaw.com/lawyer/practicestate/Medical%20Malpractice/South%20Carolina
+http://lawyers.martindale.com/marhub/firm/945988404
+http://lawyers.martindale.com/marhub/firm/953339921
+http://lazarus.elte.hu/hun/tantort/1999/mmm/sch1.htm
+http://lazarus.elte.hu/hun/tantort/1999/mmm/sch2.htm
+http://lazarus.elte.hu/tajfutas/isom/web/o44.htm
+http://lazygeek.net/
+http://lbis.kenyon.edu/colldev/guidelines/
+http://lblog.jalcorn.net/
+http://lc.byuh.edu/CNN-N/w00/vocab27Jan.html
+http://lcamtuf.coredump.cx/strikeout/
+http://lcb.me.uk/
+http://lcdev.kek.jp/ML/BDS/msg00031.html
+http://lcif-openingeyes.org/lionarticle.html
+http://lcweb2.loc.gov/frd/cs/kptoc.html
+http://lcweb2.loc.gov/frd/cs/soviet_union/su_glos.html
+http://lcweb2.loc.gov/hlas/help.html
+http://ldbelveal.net/
+http://lds.about.com/od/generalstores/
+http://ldt.stanford.edu/~ndaniels/design_process.html
+http://le.atk.com/
+http://leadership.au.af.mil/sls-skil.htm
+http://league.xgamingservers.com/
+http://leahwithanh.blogspot.com/
+http://leahy.senate.gov/press/200404/040104b.html
+http://leahy.senate.gov/press/200505/051205.html
+http://leahy.senate.gov/vermont/chats/chat010213b.html
+http://learn.amnh.org/institutions/institutions.php
+http://learn.arc.nasa.gov/svs/forums/index.php?showtopic=11&view=old
+http://learn.arc.nasa.gov/svs/forums/index.php?showtopic=3&mode=linearplus
+http://learn.arc.nasa.gov/svs/forums/index.php?showtopic=3&view=getlastpost
+http://learn.jtsa.edu/topics/luminaries/monograph/masoret_holding.shtml
+http://learn.nsdl.org/feature_3.htm
+http://learninfreedom.org/readseri.html
+http://learning.ericsson.net/mlearning2/project_one/thebook/chapter3.html
+http://learning.indiatimes.com/bm/features/trends/dodos_dinosaurs.htm
+http://learning.indiatimes.com/test_papers/model/biology/bio_mod2_ans.htm
+http://learning.snowboarding2.com/
+http://learningphysics.iop.org/beyond_school/university/ubs.html
+http://learnv.ycdsb.edu.on.ca/lt/FMMC/hpteacher.nsf/Files/mcmanad/$FILE/unisx.html
+http://learnware.uwaterloo.ca/projects/GeorgeGadanidis/re-use.htm
+http://learnweb.harvard.edu/ent/gallery/pop1/pop1_1.cfm
+http://leavelife.com/LLQ%20Full%20Version/VII%20Other%20factors%20affecting%20the%20decision%20to%20leave%20life.htm
+http://leda.lycaeum.org/?ID=5041
+http://leegoldberg.typepad.com/
+http://leegoldberg.typepad.com/a_writers_life/2005/05/when_the_selfpu.html
+http://leelydon.tripod.com/ragesexdev.html
+http://left2right.typepad.com/main/2004/12/faithbased_prog.html
+http://left2right.typepad.com/main/2005/01/equality_of_opp.html
+http://left2right.typepad.com/main/2005/01/why_i_reject_na.html
+http://left2right.typepad.com/main/2005/03/social_security.html
+http://left2right.typepad.com/main/2005/05/history_lessons.html
+http://left2right.typepad.com/main/2005/06/deep_throat_and.html
+http://leftcenterleft.typepad.com/blog/
+http://leftcenterleft.typepad.com/blog/2004/11/tax_brackets.html
+http://lefti.blogspot.com/2004_05_01_lefti_archive.html
+http://lefti.blogspot.com/2005_06_01_lefti_archive.html
+http://leftjustified.net/site-in-an-hour/
+http://leg1.state.va.us/cgi-bin/legp504.exe?051+ful+HB1942
+http://leg2.state.va.us/dls/h&sdocs.nsf/0/e17460a631fc550f85256f6a0067135e?OpenDocument
+http://legacyweb.com/fanfic_library/ff64_Karen.htm
+http://legal.20m.com/health.htm
+http://legal.web.aol.com/policy/aolpol/privpol.html
+http://legalliaisons.com/parajobs.htm
+http://legallienne.thefreelibrary.com/Quest-of-the-Golden-Girl/1-14
+http://legalmarketing.typepad.com/blog/
+http://legatcorbishley.co.uk/docs/sales.htm
+http://legislative.nasa.gov/hearings/4-20-05%20Readdy.htm
+http://legisweb.state.wy.us/2005/amends/HAMD0208.htm
+http://legisweb.state.wy.us/statutes/titles/Title20.htm
+http://leiterreports.typepad.com/blog/2005/06/can_bush_be_con_1.html
+http://leninology.blogspot.com/2005_03_01_leninology_archive.html
+http://leo.stcloudstate.edu/
+http://leopold.wilderness.net/confwork/wscpordr.htm
+http://les.man.ac.uk/government/about/staff_profiles/simon_bulmer.htm
+http://les1.man.ac.uk/chnn/CHNN02CPI.html
+http://lesbian-fucking.videoera.com/
+http://leshumas.insa-lyon.fr/crl/anglais/anglais_eng/Internet%20listening.htm
+http://leslie.harpold.com/presents/000081the_thread_that_runs_so_true.html
+http://lessig.org/blog/archives/002826.shtml
+http://lestblood.imagodirt.net/
+http://letsroll911.org/ipw-web/bulletin/bb/viewtopic.php?p=50109
+http://letterfromgotham.blogspot.com/
+http://lettermanslair.blogspot.com/2005/06/npr-icon-comes-to-fairbanks-evening.html
+http://letters.johnkusch.com/1582.php
+http://lexsc.com/Economic%20Development.htm
+http://leyton.org/techiemusings/2005/06/10/a-fuzzy-screen-thing-imac-g5-problems/
+http://lg.loversguide.com/content/article.2.49.433.phpx
+http://lgbt.studentaffairs.duke.edu/info/comingout.html
+http://lgxserver.uniba.it/lei/rassegna/001230d.htm
+http://lheawww.gsfc.nasa.gov/~richard/Wurzburg.html
+http://lib.law.washington.edu/ref/nonlegal.htm
+http://lib.law.washington.edu/ref/writing.htm
+http://lib.ru/INOFANT/DOGERTI_R/zona51_engl.txt
+http://lib.ru/PERL/perltut.txt
+http://lib.ru/SONGS/moodyblu/long.txt
+http://lib.ru/SONGS/plant.txt
+http://libarts.wsu.edu/philo/faculty-staff/holbrook%20new/Traditional%20Sexual%20Ethics.htm
+http://libcat.maricopa.gov/mysteryclub/teachers/chapter_guides.cfm
+http://liberalstreetfighter.com/
+http://liberalstudies.georgetown.edu/DLS/dlsgeneral.htm
+http://libertariangirl.typepad.com/my_weblog/2005/01/
+http://libertariannation.org/a/f31l1.html
+http://libertus.net/censor/senatecomm.html
+http://libertyunbound.com/archive/2005_03/sandefur-land.html
+http://libr.unl.edu:2000/LPP/Paulmetz.htm
+http://libr.unl.edu:2000/LPP/jestin2.html
+http://libraries.universityofcalifornia.edu/hots/hotsmin11102.html
+http://library.adoption.com/Holiday-ideas/A-Birthday-Party-with-Meaning/article/2367/1.html
+http://library.adoption.com/Hoping-to-Adopt/The-Final-Step/article/135/1.html
+http://library.adoption.com/Infertility/Beyond-the-Semen-Analysis/article/1039/1.html
+http://library.adoption.com/Multi-generational-Interaction/Enhancing-the-Communication-Skills-of-Newly-Arrived-Asian-American-Students/article/4077/1.html
+http://library.ahima.org/xpedio/groups/public/documents/ahima/pub_bok1_026428.html
+http://library.albany.edu/internet/www.html
+http://library.berkeley.edu/~skoskine/spaceplanners.html
+http://library.caltech.edu/openurl/Record_Documents/Minutes%20Dec.%206-8.htm
+http://library.canterbury.ac.nz/services/disabled.shtml
+http://library.chisholm.vic.edu.au/researchHelp.htm
+http://library.christchurch.org.nz/Heritage/BallantynesFire/StarSun191147.asp
+http://library.ci.homer.ak.us/srch-bm.htm
+http://library.csu.edu/guides/hospitality.htm
+http://library.csu.edu/news/kiosk/TheGrowthOfCredibility.html
+http://library.dialog.com/bluesheets/html/bl0011.html
+http://library.dialog.com/bluesheets/html/bl0050.html
+http://library.dialog.com/bluesheets/html/bl0185.html
+http://library.findlaw.com/2005/Jan/6/133679.html
+http://library.georgetowncollege.edu/Staff/Dealing.htm
+http://library.georgiasouthern.edu/specialcollections/manu/inv/geer/geer21.html
+http://library.gsfc.nasa.gov/mrg/htm/qualifiedDC-GC-5-28-03.htm
+http://library.humboldt.edu/~ccm/fingertips/kuhlthau.html
+http://library.kent.ac.uk/library/special/html/specoll/melbio.htm
+http://library.loganutah.org/directory/links/gardening.html
+http://library.louisville.edu/loex2005/program.htm
+http://library.lp.findlaw.com/articles/file/00016/006714/title/Subject/topic/Health_Managed%20Care/filename/health_1_625
+http://library.lp.findlaw.com/articles/file/00026/005908/title/Subject/topic/Communications_Telephones/filename/communications_2_1758
+http://library.lp.findlaw.com/articles/file/00073/005626/title/Subject/topic/Employment%20Law_Hours/filename/employmentlaw_1_470
+http://library.lp.findlaw.com/articles/file/00322/003926/title/Subject/topic/Intellectual%20Property_Infringement/filename/intellectualproperty_2_4564
+http://library.lp.findlaw.com/articles/file/00340/001466/title/Subject/topic/Health_Refusal%20of%20Care/filename/health_1_635
+http://library.lp.findlaw.com/articles/file/00343/004774/title/Subject/topic/Securities%20Law_Registration%20and%20Distribution/filename/securitieslaw_2_5643
+http://library.lp.findlaw.com/articles/file/00546/001866/title/Subject/topic/Family%20Law_Adoption%20of%20Persons/filename/familylaw_2_3181
+http://library.lp.findlaw.com/articles/file/00687/003823/title/Subject/topic/Administrative%20Law_Particular%20Administrative%20Agencies/filename/administrativelaw_2_36
+http://library.lp.findlaw.com/articles/file/00687/003823/title/Subject/topic/Civil%20Procedure_Privileges/filename/civilprocedure_2_924
+http://library.lp.findlaw.com/articles/file/00749/001799/title/Subject/topic/Torts/%20Personal%20Injury_Invasion%20of%20Privacy/filename/tortspersonalinjury_2_6203
+http://library.lp.findlaw.com/articles/file/00964/006122/title/Subject/topic/Intellectual%20Property_Internet/filename/intellectualproperty_1_750
+http://library.lp.findlaw.com/articles/file/00980/008920/title/Subject/topic/Bankruptcy_Professionals/filename/bankruptcy_2_569
+http://library.lp.findlaw.com/articles/file/01009/009696/title/Subject/topic/Antitrust%20and%20Trade%20Regulation_Unfair%20Trade%20Practices/filename/antitrustandtraderegulation_2_237
+http://library.lp.findlaw.com/insurance_2_4117_1.html
+http://library.marketingsherpa.com/search.cfm?contentCode=ib
+http://library.mcmaster.ca/archives/findaids/findaids/g/greenwoo.htm
+http://library.northampton.ac.uk/subjects/subject.php?sid=12&pid=4
+http://library.nybg.org/finding_guide/hollick1.php
+http://library.nybg.org/finding_guide/pironwb4.php
+http://library.osu.edu/sites/archives/glenn/collection/senate/politicalcareer.htm
+http://library.paisley.ac.uk/services/schoolscomp/year11.htm
+http://library.primate.wisc.edu/collections/books/ecosoc.html
+http://library.puc.edu/pitcairn/bounty/crew2.shtml
+http://library.sanger.ac.uk/uhtbin/cgisirsi/0/0/520/a12334b?user_id=HYP-REST
+http://library.stmarytx.edu/acadlib/doc/guides/pathleg.htm
+http://library.stmarytx.edu/acadlib/subject/misc/eldoapsa.htm
+http://library.thinkquest.org/12153/hr&bf.html
+http://library.thinkquest.org/17131/scripting/vbscript/tut_ch4.html
+http://library.thinkquest.org/20619/Present.html
+http://library.thinkquest.org/23846/library/terms/
+http://library.thinkquest.org/26026/Classroom_Connection/elementary_school_lesson_plans.html
+http://library.thinkquest.org/27034/chem.html
+http://library.thinkquest.org/29285/filmmaking/ffe.html
+http://library.thinkquest.org/3120/text/c-his1.htm
+http://library.thinkquest.org/C003603/english/tornadoes/casestudies.shtml
+http://library.thinkquest.org/C005704/content_hwl_glc.php3
+http://library.thinkquest.org/C007555/play.html
+http://library.thinkquest.org/C0116628/Russia.htm
+http://library.thinkquest.org/C0130844/THE%20PSYCHOLOGY%20OF%20COLOUR.htm
+http://library.thinkquest.org/J0112391/myth_8.htm
+http://library.timelesstruths.org/texts/Just_Mary/A_Baby_Girl/
+http://library.trinity.wa.edu.au/subjects/re/action/rights.htm
+http://library.uce.ac.uk/inform15.htm
+http://library.uchc.edu/departm/hnet/advocacy.html
+http://library.uchc.edu/departm/hnet/agingresource.html
+http://library.uncg.edu/depts/speccoll/lenski/lenskip.html
+http://library.ust.hk/res/beyond/Humanities_and_Social_Sciences/Environmental_Studies/
+http://library.uwsp.edu/depts/archives/preservationtips.htm
+http://libro.uca.edu/dillard/drintro.htm
+http://libro.uca.edu/lewis/preface.htm
+http://libro.uca.edu/perry/csms5.htm
+http://libtext.library.wisc.edu/cgi-bin/History/History-idx?type=HTML&rgn=DIV1&byte=10253511
+http://libweb.sfasu.edu/real/vol28-1/menintrees.htm
+http://libweb.sfasu.edu/real/vol28-2/notmerelyacad.htm
+http://libweb.uoregon.edu/it/prereqs.html
+http://libwww.cabrillo.edu/about/technologyplan.html
+http://life.firelace.com/archives/personal/index.php
+http://life.firelace.com/archives/tips_and_tricks/index.php
+http://lifecenter.ric.org/content/384/?topic=4&subtopic=176
+http://lifeiscold.blogspot.com/
+http://liferants.rantworks.com/2003/12/turning-twenty-one-and-writing-for.php
+http://lifestyle.scotsman.com/foodanddrink/bws_headlines_specific.cfm?articleid=8888
+http://lifestyle.timesofmalta.com/article.php?id=496
+http://lifetech.blogs.com/bionanoblawg/2004/10/
+http://liftoff.msfc.nasa.gov/News/2001/News-MoonLanding.asp
+http://light-of-reason.blogspot.com/
+http://lightning.prohosting.com/~tbates/gravity/secrets.html
+http://lilinote.k12.hi.us/STATE/BOE/Minutes.nsf/0/175ec31963ed74820a2566d1000c0616?OpenDocument
+http://lilinote.k12.hi.us/STATE/BOE/Minutes.nsf/0/6a33b5b43e6e33190a25659b00621578?OpenDocument
+http://lilt.ilstu.edu/gmklass/pos334/Default.htm
+http://lima.usembassy.gov/wwwspase.shtml
+http://limany.org/culture.html
+http://limpets.noaa.gov/monitoring/developProgram/welcome.html
+http://linas.org/linux/graphics.html
+http://linas.org/linux/load.html
+http://ling.ucsd.edu/Language/faq/faq.html
+http://link.aps.org/doi/10.1103/PhysRev.70.978
+http://link.aps.org/doi/10.1103/PhysRevB.50.5429
+http://link.aps.org/doi/10.1103/PhysRevLett.54.2521
+http://link.aps.org/doi/10.1103/PhysRevLett.58.1861
+http://linkrank.cs.ucla.edu/userguide/
+http://linux.sys-con.com/read/44882.htm
+http://linux.sys-con.com/read/45528.htm
+http://linux.sys-con.com/read/97521.htm
+http://linuxdevices.com/articles/AT2631955248.html
+http://linuxdevices.com/articles/AT4520490885.html
+http://linuxdevices.com/articles/AT7441855870.html
+http://linuxdevices.com/articles/AT7751365763.html
+http://linuxdevices.com/news/NS4964141825.html
+http://linuxgazette.net/115/andreasen.html
+http://linuxgazette.net/issue30/ayers1.html
+http://linuxgazette.net/issue36/lg_backpage36.html
+http://linuxgazette.net/issue46/lg_bytes46.html
+http://linuxinsider.com/story/37806.html
+http://linuxjournal.com/article.php?sid=5976
+http://linuxmafia.com/refund/
+http://linuxtoday.com/news_story.php3?ltsn=2002-05-02-015-26-NW-BZ-SV-0012
+http://linuxtoday.com/storage/
+http://lions.com.au/default.asp?pg=players&spg=playerprofile&personid=13129
+http://lions2e1.org/cab2e1.html
+http://lionvs40midgets.uk-directory.com/
+http://liquidtheater.com/
+http://lissack.com/greatideas/giws/Wcb2718aa45fa3.htm
+http://lissack.com/greatideas/giws/Wcb7fe30cef62.htm
+http://lissack.com/greatideas/giws/Wcc9145b1d7948.htm
+http://lissack.com/greatideas/giws/Wcd4675098c2a1.htm
+http://list.massbike.org/archive/199407/0019.html
+http://list.massbike.org/archive/199608/0111.html
+http://list.terc.edu/pipermail/maine_science/2004-June/004595.html
+http://listenmissy.com/blog/archives/2004_12.php
+http://listingsca.com/Resource_Industries/Oil_and_Gas/index2.asp
+http://lists.adeptscience.co.uk/mathcad/mathcad_Jul_2003/thid_b139ee8fe0adea34b1fbeb3c85b67b49.html
+http://lists.arts.usyd.edu.au/phorum/read.php?f=23&i=9&t=5
+http://lists.debian.org/debian-consultants/2001/12/msg00000.html
+http://lists.debian.org/debian-devel-announce/2003/08/msg00008.html
+http://lists.debian.org/debian-devel/1995/12/msg00068.html
+http://lists.debian.org/debian-legal/2005/05/msg00342.html
+http://lists.errc.org/rr_nr4_2000/legal_defence.shtml
+http://lists.essential.org/pipermail/ok-sustainability/2003-March/000999.html
+http://lists.evolt.org/archive/Week-of-Mon-20010813/055009.html
+http://lists.gnu.org/archive/html/bug-cvs/2003-10/msg00377.html
+http://lists.gnu.org/archive/html/emacs-bidi/2003-03/msg00001.html
+http://lists.gnu.org/archive/html/guile-devel/2002-08/msg00046.html
+http://lists.gnu.org/archive/html/lynx-dev/1999-10/msg00343.html
+http://lists.ibiblio.org/pipermail/permaculture/1999-July/009977.html
+http://lists.indymedia.org/pipermail/imc-oxford/2005-January/0124-6f.html
+http://lists.isb.sdnpk.org/pipermail/gsd-list/2003-April/001062.html
+http://lists.iww.org/pipermail/iww-news/2004-February/004480.html
+http://lists.netlojix.com/pipermail/noahs-window/2003-February/000150.html
+http://lists.oasis-open.org/archives/security-services/200411/msg00102.html
+http://lists.repec.org/pipermail/nep-ind/2000-October/000094.html
+http://lists.runrev.com/pipermail/use-revolution/2004-November/046581.html
+http://lists.samba.org/archive/samba/2005-January/098591.html
+http://lists.sans.org/pipermail/list/2002-May/052957.html
+http://lists.ssc.com/pipermail/suitwatch/2004-April/000065.html
+http://lists.trolltech.com/qt-embedded-interest/2001-03/msg00011.html
+http://lists.trolltech.com/qt-embedded-interest/2001-03/msg00015.html
+http://lists.trolltech.com/qt-interest/1998-06/msg00179.html
+http://lists.trolltech.com/qt-interest/2003-01/thread00145-0.html
+http://lists.uakron.edu/cgi-bin/wa.exe?A1=ind0302d&L=h-france
+http://lists.uakron.edu/cgi-bin/wa.exe?A2=ind0405d&L=h-france&F=&S=&P=469
+http://lists.village.virginia.edu/lists_archive/Humanist/v16/0307.html
+http://lists.village.virginia.edu/lists_archive/Humanist/v17/0329.html
+http://lists.village.virginia.edu/sixties/HTML_docs/Resources/Primary/Manifestos/SDS_Port_Huron.html
+http://lists.village.virginia.edu/sixties/HTML_docs/Resources/Primary/Manifestos/VVAW_Kerry_Senate.html
+http://lists.virus.org/isn-0205/msg00167.html
+http://lists.w3.org/Archives/Public/ietf-dav-versioning/2001JulSep/0200.html
+http://lists.w3.org/Archives/Public/ietf-discuss/2000Sep/0002.html
+http://lists.w3.org/Archives/Public/ietf-http-wg-old/1995MayAug/0113.html
+http://lists.w3.org/Archives/Public/ietf-http-wg-old/1995SepDec/0457.html
+http://lists.w3.org/Archives/Public/ietf-http-wg-old/1995SepDec/0535.html
+http://lists.w3.org/Archives/Public/ietf-http-wg-old/1997JanApr/0286.html
+http://lists.w3.org/Archives/Public/ietf-http-wg-old/1997JanApr/0290.html
+http://lists.w3.org/Archives/Public/ietf-tls/1997JanMar/0089.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2003Dec/0005.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2003Nov/0043.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004Jul/0015.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004Mar/0000.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004May/0018.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004Oct/0024.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004Oct/0124.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2004Oct/0157.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005Feb/0009.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005Jan/0070.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005Jun/0002.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005Mar/0024.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005May/0004.html
+http://lists.w3.org/Archives/Public/public-esw-thes/2005May/0007.html
+http://lists.w3.org/Archives/Public/public-glossary/2003Sep/0003.html
+http://lists.w3.org/Archives/Public/public-i18n-geo/2002Dec/0034.html
+http://lists.w3.org/Archives/Public/public-i18n-geo/2005Feb/0009.html
+http://lists.w3.org/Archives/Public/public-i18n-its/2005JanMar/0018.html
+http://lists.w3.org/Archives/Public/public-qa-dev/2004Oct/0030.html
+http://lists.w3.org/Archives/Public/public-qt-comments/2002May/0079.html
+http://lists.w3.org/Archives/Public/public-qt-comments/2004Jun/0127.html
+http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2005Jun/0021.html
+http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2005May/0029.html
+http://lists.w3.org/Archives/Public/public-rdf-dawg/2004AprJun/0468.html
+http://lists.w3.org/Archives/Public/public-rdf-dawg/2005AprJun/0326.html
+http://lists.w3.org/Archives/Public/public-sw-meaning/2003Oct/0010.html
+http://lists.w3.org/Archives/Public/public-swbp-wg/2004Jun/0071.html
+http://lists.w3.org/Archives/Public/public-swbp-wg/2004May/0109.html
+http://lists.w3.org/Archives/Public/public-swbp-wg/2004Oct/0115.html
+http://lists.w3.org/Archives/Public/public-swbp-wg/2005May/0042.html
+http://lists.w3.org/Archives/Public/public-ws-addressing/2005Apr/0003.html
+http://lists.w3.org/Archives/Public/public-ws-addressing/2005Mar/0240.html
+http://lists.w3.org/Archives/Public/public-ws-chor/2003Jun/0015.html
+http://lists.w3.org/Archives/Public/public-ws-chor/2003Jun/0113.html
+http://lists.w3.org/Archives/Public/public-ws-chor/2003Mar/0182.html
+http://lists.w3.org/Archives/Public/public-ws-desc-state/2003Jun/0061.html
+http://lists.w3.org/Archives/Public/public-xml-binary/2004Nov/0019.html
+http://lists.w3.org/Archives/Public/semantic-web/2005Mar/0241.html
+http://lists.w3.org/Archives/Public/semantic-web/2005Mar/0243.html
+http://lists.w3.org/Archives/Public/semantic-web/2005Mar/0244.html
+http://lists.w3.org/Archives/Public/semantic-web/2005Mar/0249.html
+http://lists.w3.org/Archives/Public/semantic-web/2005Mar/0262.html
+http://lists.w3.org/Archives/Public/uri/2003May/0040.html
+http://lists.w3.org/Archives/Public/uri/2004Mar/0039.html
+http://lists.w3.org/Archives/Public/uri/2004Mar/0040.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/1997JulSep/0065.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/1997OctDec/0205.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/1998OctDec/0107.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/1998OctDec/0118.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/1999JulSep/0358.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/2000JanMar/0247.html
+http://lists.w3.org/Archives/Public/w3c-dist-auth/2002JulSep/0063.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/1999JulSep/0095.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2000JanMar/0031.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2000JanMar/0180.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2000JanMar/0184.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2002AprJun/0064.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2002AprJun/0065.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2002AprJun/0066.html
+http://lists.w3.org/Archives/Public/w3c-ietf-xmldsig/2002JulSep/0176.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2001Nov/0072.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2001Oct/0213.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Feb/0497.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Nov/0006.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2003Feb/0152.html
+http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2003Feb/0201.html
+http://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Apr/0193.html
+http://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jan/0087.html
+http://lists.w3.org/Archives/Public/w3c-sgml-wg/1997May/0272.html
+http://lists.w3.org/Archives/Public/w3c-wai-au/2004JanMar/0103.html
+http://lists.w3.org/Archives/Public/w3c-wai-eo/1998OctDec/0086.html
+http://lists.w3.org/Archives/Public/w3c-wai-eo/2001AprJun/0041.html
+http://lists.w3.org/Archives/Public/w3c-wai-er-ig/1999Aug/0002.html
+http://lists.w3.org/Archives/Public/w3c-wai-er-ig/1999May/0049.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/1998OctDec/0270.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/1998OctDec/0335.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/1999AprJun/0006.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/1999JanMar/0169.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2000JulSep/0043.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2001JanMar/0142.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2001JanMar/0151.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2001JanMar/0510.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2001JanMar/0518.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2002JanMar/0326.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2004JulSep/0558.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2004JulSep/0564.html
+http://lists.w3.org/Archives/Public/w3c-wai-gl/2004OctDec/0212.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/1997JulSep/0024.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/1999JulSep/0441.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/1999OctDec/0045.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/1999OctDec/0621.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2001JanMar/0613.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2002JanMar/0214.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2002OctDec/0285.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2002OctDec/0510.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004AprJun/0236.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0069.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0070.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0072.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0073.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0374.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0375.html
+http://lists.w3.org/Archives/Public/w3c-wai-ig/2004OctDec/0376.html
+http://lists.w3.org/Archives/Public/w3c-wai-ua/1998OctDec/0190.html
+http://lists.w3.org/Archives/Public/w3c-wai-ua/2000JulSep/0225.html
+http://lists.w3.org/Archives/Public/wai-site-comments/2002Sep/0006.html
+http://lists.w3.org/Archives/Public/wai-xtech/2004Jul/0001.html
+http://lists.w3.org/Archives/Public/www-archive/2001Mar/0000.html
+http://lists.w3.org/Archives/Public/www-archive/2002Oct/0030.html
+http://lists.w3.org/Archives/Public/www-archive/2004Apr/0070.html
+http://lists.w3.org/Archives/Public/www-archive/2004Apr/0073.html
+http://lists.w3.org/Archives/Public/www-archive/2004Apr/0079.html
+http://lists.w3.org/Archives/Public/www-dom/1999OctDec/0005.html
+http://lists.w3.org/Archives/Public/www-dom/2001AprJun/0033.html
+http://lists.w3.org/Archives/Public/www-dom/2001JulSep/0056.html
+http://lists.w3.org/Archives/Public/www-dom/2001JulSep/0078.html
+http://lists.w3.org/Archives/Public/www-dom/2005JanMar/0011.html
+http://lists.w3.org/Archives/Public/www-html/2001Apr/0029.html
+http://lists.w3.org/Archives/Public/www-html/2001Apr/0031.html
+http://lists.w3.org/Archives/Public/www-html/2001Apr/0040.html
+http://lists.w3.org/Archives/Public/www-html/2004Jan/0088.html
+http://lists.w3.org/Archives/Public/www-international/1997JulSep/0009.html
+http://lists.w3.org/Archives/Public/www-patentpolicy-comment/2001Oct/0009.html
+http://lists.w3.org/Archives/Public/www-qa-wg/2002Dec/0110.html
+http://lists.w3.org/Archives/Public/www-qa-wg/2002Dec/0117
+http://lists.w3.org/Archives/Public/www-qa-wg/2002Oct/0140.html
+http://lists.w3.org/Archives/Public/www-qa-wg/2003Apr/0190.html
+http://lists.w3.org/Archives/Public/www-qa-wg/2004Jun/0051.html
+http://lists.w3.org/Archives/Public/www-qa/2002Jan/0064.html
+http://lists.w3.org/Archives/Public/www-qa/2003Jan/0007.html
+http://lists.w3.org/Archives/Public/www-qa/2004Jun/0007.html
+http://lists.w3.org/Archives/Public/www-qa/2004Jun/0008.html
+http://lists.w3.org/Archives/Public/www-rdf-comments/2002OctDec/0299.html
+http://lists.w3.org/Archives/Public/www-rdf-comments/2003JanMar/0002.html
+http://lists.w3.org/Archives/Public/www-rdf-dspace/2003May/0088.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2000Sep/0158.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2001Mar/0061.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2001Mar/0064.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2001Mar/0066.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2001Mar/0163.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2003May/0018.html
+http://lists.w3.org/Archives/Public/www-rdf-interest/2004Apr/0124.html
+http://lists.w3.org/Archives/Public/www-rdf-logic/2001Apr/0016.html
+http://lists.w3.org/Archives/Public/www-rdf-rules/2003Dec/0043.html
+http://lists.w3.org/Archives/Public/www-style/1996Aug/0191.html
+http://lists.w3.org/Archives/Public/www-style/1996Nov/0025.html
+http://lists.w3.org/Archives/Public/www-style/1998Feb/0037.html
+http://lists.w3.org/Archives/Public/www-style/2003Oct/0307.html
+http://lists.w3.org/Archives/Public/www-style/2004Jan/0193.html
+http://lists.w3.org/Archives/Public/www-style/2004Jun/0071.html
+http://lists.w3.org/Archives/Public/www-style/2004Oct/0067.html
+http://lists.w3.org/Archives/Public/www-svg/2002Sep/0002.html
+http://lists.w3.org/Archives/Public/www-tag/2003Jan/0351.html
+http://lists.w3.org/Archives/Public/www-talk/2002JanFeb/0018.html
+http://lists.w3.org/Archives/Public/www-talk/2002JanFeb/0019.html
+http://lists.w3.org/Archives/Public/www-validator-css/2004Mar/0020.html
+http://lists.w3.org/Archives/Public/www-validator-css/2004Mar/0023.html
+http://lists.w3.org/Archives/Public/www-validator/2000Oct/0124.html
+http://lists.w3.org/Archives/Public/www-validator/2004Apr/0186.html
+http://lists.w3.org/Archives/Public/www-validator/2004Apr/subject.html
+http://lists.w3.org/Archives/Public/www-voice/2003JulSep/0029.html
+http://lists.w3.org/Archives/Public/www-voice/2003OctDec/0038.html
+http://lists.w3.org/Archives/Public/www-voice/2005JanMar/0020.html
+http://lists.w3.org/Archives/Public/www-webdav-dasl/2000AprJun/0050.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2002Nov/0119.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2002Nov/0157.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2002Oct/0314.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2002Sep/0146.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2003May/0083.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2003May/0271.html
+http://lists.w3.org/Archives/Public/www-webont-wg/2003Sep/0163.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2002Dec/0179.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2002Sep/0258.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2002Sep/0266.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2002Sep/0271.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2002Sep/0282.html
+http://lists.w3.org/Archives/Public/www-ws-arch/2003Jan/0005.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2002May/0137.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2002May/0151.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2003Apr/0030.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2003May/0017.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2003Sep/0207.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2004Feb/0194.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2004Jul/0398.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2004Jun/0112.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2004May/0040.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0019.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0054.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0065.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0067.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0083.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0093.html
+http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/0094.html
+http://lists.w3.org/Archives/Public/www-xkms/2004Jul/0013.html
+http://lists.w3.org/Archives/Public/www-xml-schema-comments/2000JanMar/0043.html
+http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002AprJun/0070.html
+http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002AprJun/0073.html
+http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002JanMar/1091.html
+http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002JanMar/1092.html
+http://lists.w3.org/Archives/Public/www-xsl-fo/2003Jan/0002.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2000Oct/0093.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Oct/0040.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Oct/0041.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Oct/0072.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Sep/0079.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Sep/0081.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Sep/0085.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2002Sep/0140.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2003Oct/0022.html
+http://lists.w3.org/Archives/Public/xml-dist-app/2003Sep/0032.html
+http://lists.w3.org/Archives/Public/xml-encryption/2004May/0005.html
+http://lists.w3.org/Archives/Public/xml-uri/2000Jun/0054.html
+http://lists.w3.org/Archives/Public/xsl-editors/1999AprJun/0002.html
+http://lists.w3.org/Archives/Public/xsl-editors/2003JanMar/0004.html
+http://lists.xml.org/archives/xml-dev/199705/msg00037.html
+http://lists.xml.org/archives/xml-dev/199712/msg00383.html
+http://listserv.brown.edu/archives/cgi-bin/wa?A2=ind0007&L=tei-l&F=&S=&P=769
+http://listserv.cnr.it/cgi-bin/wa?SHOWTPL=LISTSERV-HOME-HELP&L=W3C-IT
+http://listserv.repp.org/pipermail/bioenergy/2000-August/008557.html
+http://listserv.repp.org/pipermail/pvusers/1999-October/000933.html
+http://listserv.spc.edu/cgi-bin/wa?A2=ind9506&L=eyemov-l&F=&S=&P=831
+http://listserv.uark.edu/scripts/wa.exe?A1=ind0404&L=vmesa-l
+http://listserv.uel.ac.uk/pipermail/centrefornarrativeresearch/Week-of-Mon-20040823/000189.html
+http://lit.ubalt.edu/db/
+http://litsite.alaska.edu/uaa/familygatherings/hospitalgame.html
+http://litsite.alaska.edu/uaa/workbooks/midnewswrite.html
+http://litsite.alaska.edu/uaa/workbooks/textinterpret.html
+http://litten.de/fulltext/fujian1f.htm
+http://little-girl-lost.org/
+http://littleenglishgirl.com/
+http://littleindia.com/june2002/An%20Indian%20in%20Paris.htm
+http://live.oregoncc.org/ex_services_orders/c&r.htm
+http://livedocs.macromedia.com/coldfusion/6.1/htmldocs/main_ap3.htm
+http://livedocs.macromedia.com/wtg/public/machiidevguide/structure.html
+http://livehope.org/
+http://livingheritage.org/pole-spirits.htm
+http://livingindryden.org/
+http://livingindryden.org/archives/001557.html
+http://livingtreasures.kxx.com/hndbk.html
+http://liw.iki.fi/liw/log/2005-02.html
+http://lizditz.typepad.com/i_speak_of_dreams/2004/09/disaster_hero_w.html
+http://lizditz.typepad.com/i_speak_of_dreams/education_independent_and_private_schools/
+http://ljworld.com/section/schoolfinance/story/169548
+http://lkmp.blogspot.com/2005/06/rich-people-are-governments-best.html
+http://llamabutchers.mu.nu/archives/2005_01.php
+http://llt.msu.edu/vol4num1/review2/default.html
+http://llt.msu.edu/vol9num1/review2/default.html
+http://lmno4p.org/fa/
+http://lmri.ucsb.edu/resdiss/2/lmri_newsletters/volume4/news44/v4n4.htm
+http://ln.hixie.ch/
+http://lnweb03.co.wake.nc.us/EmploymentApplication/code/postings_Healthcare.html
+http://loadedmouth.com/
+http://loadedmouth.com/2004/05/sunday-sunday-fun-day-sunday-sunday.html
+http://loadedmouth.com/node/1367
+http://loadingdockantiques.com/fullsizeironbeds.htm
+http://loadingdockantiques.com/fullsizeironbedspage2.htm
+http://loan.yahoo.com/m/cq_amort.html
+http://loan.yahoo.com/m/cq_homequestions.html
+http://loan.yahoo.com/m/q_amort.html
+http://loan.yahoo.com/m/q_refidec.html
+http://local.parade.com/
+http://local.sacramento.com/palo-alto/Mirrors---Sales.zp.html
+http://local.yahoo.com/IL/Allerton/7737215/Education+and+Instruction/8236475/Community+Colleges/
+http://lockss.stanford.edu/lockssresearchfaq.html
+http://lodelink.com/titanic/
+http://log.ninthworld.net/
+http://log.ometer.com/2004-11.html
+http://log.ometer.com/2005-05.html
+http://loggingmallets.railfan.net/sub/malletinfo.htm
+http://logic.csci.unt.edu/tarau/research/99/lm.html
+http://logic.philosophy.ox.ac.uk/tutorial1/tut1-01.htm
+http://logica.rug.ac.be/centrum/events/WCP97/hotels.html
+http://logicerror.com/w3c-meeting-2001-2-26
+http://logofreetv.org/
+http://lois.co.uk/web/articles/colour-access.shtml
+http://london.freeexchange.co.uk/pages/5004.html
+http://london.greenparty.org.uk/
+http://london.openguides.org/index.cgi?Bus_Route_74
+http://london.openguides.org/index.cgi?Calthorpe_Arms,_WC1X_8JR
+http://londonlostandfound.com/response/interview8.htm
+http://londonmark.blogspot.com/
+http://lone-eagles.com/aussielinks.htm
+http://lone-eagles.com/chap2.htm
+http://lonestar.texas.net/~colby/quakersa.htm
+http://long-range-sportfishing-landings.allcoastsportfishing.com/sportfishinglandings.pl?ciscos=baja&newport=boat&cabo=maui
+http://long-range-sportfishing-landings.allcoastsportfishing.com/sportfishinglandings.pl?ciscos=morro&ensenada=american
+http://long-range-sportfishing-landings.allcoastsportfishing.com/sportfishinglandings.pl?harbor=long&cabo=newport
+http://longislandpress.com/v02/i17040429/news_01.asp
+http://longtail.typepad.com/the_long_tail/
+http://longtail.typepad.com/the_long_tail/2005/01/variety_is_not_.html
+http://longtail.typepad.com/the_long_tail/2005/04/media_meltdown.html
+http://longtail.typepad.com/the_long_tail/2005/05/natural_portion.html
+http://longtail.typepad.com/the_long_tail/2005/06/more_on_signals.html
+http://lookingglass.blogsome.com/2004/09/
+http://lookingglass.org/about/faqdetails.php
+http://lookingglass.org/publications/pubdetails.php
+http://loop.interop.com/
+http://lordofthelinks.blogspot.com/
+http://lordrich.com/
+http://lorelightarts.ladymoonkennels.com/LoreLight_Ecards6.htm
+http://lorenwebster.net/In_a_Dark_Time/archives/000279.html
+http://lorenwebster.net/In_a_Dark_Time/archives/000390.html
+http://lorenwebster.net/In_a_Dark_Time/archives/cat_hemingways_old_man_and_the_sea.html
+http://lorenwebster.net/In_a_Dark_Time/archives/cat_wallace_stevens.html
+http://lorenzen.blogspot.com/2004_04_04_lorenzen_archive.html
+http://losangeles.china-consulate.org/eng/Topics/sinousrelations/t56337.htm
+http://losing-weight.ffind.servebeer.com/
+http://losingmyedge.com/2003_09_01_imlosingmyedge_archive.html
+http://lostgarden.com/2005/06/nintendogs-case-of-non-game-that.html
+http://lostintransit.org/archives/000802.html
+http://lostworld.pair.com/blog/archives/000415.html
+http://louisdorfman.com/articles.php
+http://loveandcooking.blogspot.com/2004_10_01_loveandcooking_archive.html
+http://lovelikepop.blogspot.com/
+http://lovemore.com/articles/heartofjealousy
+http://lovemore.com/faq
+http://lovemyspca.com/Lost%20Dogs.html
+http://loveyoujy.tblog.com/
+http://lowcarb.blogs.com/blog/2004/01/coming_soon_low.html
+http://lowcarbdiets.about.com/cs/a.htm
+http://lowcarbdiets.about.com/od/lowcarbbasic1/a/carbdietfailure.htm
+http://lowcountry.humanists.net/SEPS/sep-2003-01.html
+http://lowendmac.com/botmw/011126.html
+http://lowendmac.com/orchard/05/0613.html
+http://lowercaser.blogspot.com/
+http://lozwordz.blogdrive.com/
+http://lpa.igc.org/lpv43/lpp43_steward.html
+http://lphrc.org/rmk/London/week2b.html
+http://lpi.oregonstate.edu/f-w97/reactive.html
+http://lrb.veriovps.co.uk/v21/n07/nage01_.html
+http://lrb.veriovps.co.uk/v23/n13/mcki01_.html
+http://lrc.cornell.edu/asian/graduate/EAL/faculty
+http://lrc.cornell.edu/asian/undergrad/faqs
+http://lrionline.com/unionsitesample/theUnion.htm
+http://lrs.ed.uiuc.edu/Guidelines/Levin-AERA-18Ap95.html
+http://lsa.colorado.edu/essence/texts/wind.htm
+http://lsd-pl.net/argus.html
+http://lsda.jsc.nasa.gov/books/mercury/ch09.htm
+http://lsda.jsc.nasa.gov/books/mercury/ch10.htm
+http://lsn.curtin.edu.au/dist-ed/useful_terms.html
+http://lsn.curtin.edu.au/tlf/tlf1997/bencini.html
+http://lsn.curtin.edu.au/tlf/tlf1998/sly.html
+http://lsr.nellco.org/cgi/viewcontent.cgi?article=1005&context=uconn/ucwps
+http://lsss.homestead.com/YouCanFlyRC.html
+http://ltn-archive.hotresponse.com/october00/mis_p12.html
+http://lttf.ieee.org/learn_tech/issues/october2002/
+http://ltts.indiana.edu/faq.html
+http://lu.com/odlis/
+http://luciensteil.tripod.com/katarxis02-1/id8.html
+http://lucifer.intercosmos.net/index.php?view=phpalphawall
+http://lucy.ukc.ac.uk/EthnoAtlas/Hmar/Cult_dir/Culture.7859
+http://lucy.ukc.ac.uk/csacpub/Mono19/Html/wrapped_gifts-2_-9.html
+http://lucy.ukc.ac.uk/stirling.html
+http://lugar.senate.gov/newsletter/2004/october.html
+http://lugar.senate.gov/vhp/2003/01.html
+http://lugar.senate.gov/vhp/2004/01.html
+http://lugar.senate.gov/vhp/2005/01.html
+http://lugar.senate.gov/vhp/2005/03.html
+http://luke.enlow.net/music.html
+http://lullianarts.net/infusa/rhet.html
+http://lumen.georgetown.edu/projects/posterTool/index.cfm?fuseaction=poster.display&posterid=251
+http://lumen.georgetown.edu/projects/postertool/index.cfm?fuseaction=poster.display&posterID=638
+http://luna.moonstar.com/~dyoung/
+http://lundbooks.co.uk/books/V30.html
+http://lusan.id.au/~nikolai/blog/
+http://lustylady.blogspot.com/2005/01/pit-blood-drive-fyi.html
+http://lustymusketeer.blog-city.com/read/126282.htm
+http://lux.cummonday.net/
+http://lwf.ncdc.noaa.gov/oa/climate/extremes/1999/april/rapidres0499.html
+http://lwn.net/2001/features/LarryWall/
+http://lwn.net/Articles/133146/
+http://lwn.net/Articles/139354/
+http://lwn.net/Reviews/Firewalls.php3
+http://lxer.com/
+http://lxer.com/module/newswire/view/10507/
+http://lxer.com/module/newswire/view/37022/
+http://lxer.com/module/newswire/view/37130/
+http://lxr.linux.no/
+http://lymeacademy.edu/new-england-art-college-news-events.htm
+http://lynnpalm.com/horses/myroyallark-passing.php
+http://lyptonvillage.org/blog/?m=200307
+http://lyrics.donyell.net/index.php/lyrics/category/w/
+http://lyrics.donyell.net/index.php/lyrics/to-the-floor-tonight-lyrics-mariah-carey/
+http://lyrics.duble.com/lyrics/0/504-boyz-lyrics/504-boyz-haters-gon-hate-lyrics.htm
+http://lyrics.duble.com/lyrics/A/avant-lyrics/avant-serious-lyrics.htm
+http://lyrics.duble.com/lyrics/I/imx-lyrics/imx-hate-the-playa-lyrics.htm
+http://lyrics.duble.com/lyrics/M/memphis-bleek-lyrics/memphis-bleek-change-up-lyrics.htm
+http://lyrics.net.ua/song/123298
+http://lyrics.net.ua/song/123347
+http://lyrics.net.ua/song/48701
+http://lyrics.net.ua/song/64288
+http://lyrics.rare-lyrics.com/I/IMX/Hate-The-Playa.html
+http://lyrics.rare-lyrics.com/R/Resurrection/War-Machine.html
+http://lyrics.rare-lyrics.com/T/Tupac-Shakur/A-Crooked-Nigga-Too-(Raphael-Saadiq-Remix).html
+http://lyrics.rockmagic.net/lyrics/queen/sheer_heart_attack_1974.html
+http://lyrics.rockmagic.net/lyrics/zappa_frank/absolutely_free_1967.html
+http://lyrics.songtext.name/50%20Cent/Banks-Victory-Feat.-Lloyd-Banks-4799.html
+http://lyrics.songtext.name/50%20Cent/Banks-Victory-feat.-Lloyd-Banks-8330.html
+http://lyrics.songtext.name/Eminem/Still-Don-t-Give-A-Fuck-495.html
+http://lyrics.songtext.name/Rozalla/Everybody-s-Free-28649.html
+http://m1.mny.co.za/MNBTalk.nsf/0/C2256907002CDE514225692A0036C796?OpenDocument
+http://m1.mny.co.za/WGETrnd.nsf/0/C2256A2A0056310742256E7000504087?OpenDocument
+http://m1.mny.co.za/mncg.nsf/0/C2256A8C00448C6BC2256E31004D4A71?OpenDocument
+http://m1.mny.co.za/mnyfast.nsf/0/C2256907002CE1D442256A5700254BCD?OpenDocument
+http://m37.crwdesigns.com/usaaf.htm
+http://ma.carp.nl/opleiding/opleiding.asp?nOpleidingTaalID=15229
+http://maaber.50megs.com/nineth_issue/nonviolence_4e.htm
+http://macarthur.virginia.edu/treatment.html
+http://macdailynews.com/index.php/weblog/comments/5933/
+http://macintouch.com/
+http://macintouch.com/newsrecent.shtml
+http://macnstuff.com/
+http://macobserver.com/article/2001/05/08.3.shtml
+http://macys-registry.weddingchannel.com/catalog/fds/gra/guestviewcatalog_new.asp?upc=000000800298358742&retailer_registry_uid=302355703
+http://madasafish.com/news/news.asp?cat=sport&aid=7724700
+http://madchat.org/vxdevl/papers/avers/codered.html
+http://maddingue.free.fr/carmina-burana/cb-by-Orff.en.html
+http://madison.indymedia.org/info/display/whole_foods/index.php
+http://madminerva.blog-city.com/
+http://madpenguin.org/cms/?m=show&id=1131&page=1
+http://maevekerry.blog-city.com/
+http://magazine.audubon.org/backyard/backyard9909.html
+http://magazine.audubon.org/population.html
+http://magazine.audubon.org/truenature/truenature0005.html
+http://magazine.fandm.edu/spring02/sp02_story1.html
+http://magazine.globeinvestor.com/servlet/ArticleNews/commentarystory/GIGOLD/20050603/magkoza0603/GIGOLDMAG/home
+http://magazine.uchicago.edu/0108/features/
+http://magazine.wustl.edu/Spring05/StevenTeitelbaum.htm
+http://magazine.wustl.edu/Winter02/alumniactivities.html
+http://magazines.ivillage.com/cosmopolitan/sex/no/articles/0,,544153_285746-2,00.html
+http://magazines.ivillage.com/goodhousekeeping/ghtv/articles/0,,284608_607667-2,00.html
+http://magazines.ivillage.com/goodhousekeeping/print/0,,558251,00.html
+http://magazines.ivillage.com/housebeautiful/recipefinder/recipe/0,,590091,00.html
+http://magazines.ivillage.com/marieclaire/beauty/expert/qas/0,,434729_437561,00.html
+http://magazines.ivillage.com/redbook/dh/diet/articles/0,,284479_664618,00.html
+http://magazines.ivillage.com/redbook/sex/great/articles/0,,284442_289181-8,00.html
+http://magazines.ivillage.com/redbook/sex/happy/articles/0,,284445_599323-3,00.html
+http://magazines.ivillage.com/redbook/you/beauty/articles/0,,284484_289454-7,00.html
+http://magazines.proboards9.com/index.cgi?board=MensMisc&action=post&num=1057667166
+http://magazines.proboards9.com/index.cgi?board=MensMisc&action=post&num=1057667166&quote=1086538757&start=0
+http://magazines.proboards9.com/index.cgi?board=MensMisc&action=post&num=1057667166&start=0
+http://magellans.co.uk/store/article/23?Args=
+http://magentathelion.deviantart.com/journal/
+http://maggidawn.typepad.com/maggidawn/2005/01/why_i_want_to_b.html
+http://maggidawn.typepad.com/maggidawn/lifestyle/
+http://magic-city-news.com/article_1063.shtml
+http://magic-city-news.com/article_3333.shtml
+http://magic-city-news.com/article_3363.shtml
+http://magick-whispers.com/handfasting.htm
+http://magickalrealm.com/spellcasting.html
+http://magma.nationalgeographic.com/ngm/data/2001/09/01/html/ft_20010901.1.html
+http://magnapak-magnetic-mattress-health-therapy.com/xcart/catalog/product_66_Blood_Pressure_Monitor__OBP2.html
+http://magnificat.ca/cal/engl/06-03.htm
+http://mahjoob.com/en/forums/showthread.php?t=124404
+http://mahjoob.com/en/forums/showthread.php?t=124404&page=1
+http://mahjoob.com/en/forums/showthread.php?t=124404&page=2
+http://mail.ctcnet.org/americaconnects/panel14/0015.htm
+http://mail.rcds.rye.ny.us/~anne_sampson/Civil%20War%20DOcuments/Nevins_Where_Difference.htm
+http://mail.sarai.net/pipermail/reader-list/2004-March/003531.html
+http://mail.zope.org/pipermail/zope/2003-January/129951.html
+http://mailformat.dan.info/body/charsets.html
+http://mailman.greennet.org.uk/public/plenary/2003-September/000545.html
+http://mailman.webdav.org/pipermail/acl/2002-March/001096.html
+http://main.edc.org/mosaic/Mosaic9/beneath.asp
+http://main.edc.org/mosaic/Mosaic9/immokalee.asp
+http://main.uab.edu/show.asp?durki=31538
+http://main.uab.edu/show.asp?durki=57652
+http://main.uab.edu/show.asp?durki=64117
+http://main.wgbh.org/wgbh/producingfortv/shorts.html
+http://mainlymartian.blogs.com/semijournal/2005/01/alas.html
+http://maintenanceforums.com/eve/ubb.x/a/tpc/f/615103861/m/755103812/r/2371052241
+http://majikthise.typepad.com/majikthise_/2005/02/ah_the_liberal_.html
+http://majikthise.typepad.com/majikthise_/2005/02/women_bloggers_.html
+http://majikthise.typepad.com/majikthise_/2005/03/dr_william_ches.html
+http://mamacat.typepad.com/main/2004/10/making_room_for.html
+http://mamaroobabysling.com/WearingDirections.htm
+http://mamboforge.net/tracker/index.php?func=detail&aid=1109&group_id=89&atid=416
+http://mampam.50megs.com/bv2001report.htm
+http://man.netbsd.se/?find=groff_out+5+161
+http://man.netbsd.se/?find=groff_out+5+162
+http://management.monster.com/articles/workstyle/
+http://managingwholes.com/bobleo.htm
+http://managua.usembassy.gov/wwwhe34.html
+http://managua.usembassy.gov/wwwhe70.html
+http://manana.typepad.com/manana/2004/12/
+http://manda1poo.blogspot.com/2004/11/in-news-gayness-and-sex-discrimination.html
+http://mandajuice.typepad.com/
+http://mandajuice.typepad.com/mandajuice/
+http://manhattan.about.com/
+http://manhattantransfer.blogspot.com/
+http://maniacalrage.net/archives/2003/02/tabular/
+http://maniebuhr.journalspace.com/
+http://manila.usembassy.gov/wwwhr401.html
+http://manila_wetland.tripod.com/manila_amd_wetland.htm
+http://manipurassembly.nic.in/Ses6Asm8/Bul29Jul.htm
+http://manipurassembly.nic.in/Ses6Asm8/Bul30Jul.htm
+http://manipurassembly.nic.in/govadd98.htm
+http://manstouch.com/maleart.html
+http://manstouch.com/nudephotography.html
+http://manufacturing-fabrication.globalspec.com/ProductFinder/Part_Fabrication_Production/Machine_Shop_Services
+http://mapatentlawyers.leadcounsel.com/questions.html
+http://mapj.org/modules.php?name=News&new_topic=2
+http://mapleleafrabbitry.tripod.com/id12.html
+http://marathon.uwc.edu/student_services/res_hall/Web%20Page/Contract.htm
+http://marathon68.homestead.com/Page22.html
+http://marc.blogs.it/archives/2005/06/response_to_mik.html
+http://marc.theaimsgroup.com/?l=bugtraq&m=95671578912963&w=2
+http://marcopolo.mci.com/marcograms/Feb2005.html
+http://mardiweb.com/web/psp6/stainglass/stainglass.html
+http://marelias.ca/news.htm
+http://mariadaines.dmusic.com/trackinfo/221976
+http://marine.rutgers.edu/cool/coolresults/papers/orion_rpt_5%2027%2004a
+http://marinecareers.net/outlook.htm
+http://marinermusings.blogspot.com/
+http://maritimes.indymedia.org/news/2005/06/10348.php
+http://marjoriebrody.com/directions.asp
+http://marjoriebrody.com/directionsp.asp
+http://mark-reviews-movies.tripod.com/reviews/L/lostintranslation.htm
+http://mark-twain.classic-literature.co.uk/mark-twains-speeches/ebook-page-39.asp
+http://mark.stubbornlights.org/phils/archives/2004_04.html
+http://markarkleiman.blogspot.com/2003_08_01_markarkleiman_archive.html
+http://markbahner.typepad.com/random_thoughts/2004/01/why_social_secu.html
+http://markcrispinmiller.blogspot.com/2005/05/disabled-youth-kidnapped-by-us-army.html
+http://marketing-bulletin.massey.ac.nz/article2/article5b.asp
+http://marketing-bulletin.massey.ac.nz/article3/article5b.asp
+http://marketing.about.com/
+http://marketing.about.com/cs/a.htm
+http://marketing.injersey.com/dr.html
+http://marketplace.publicradio.org/shows/1997/12/18_mpp.html
+http://markhancock.blogspot.com/2004/09/how-pjs-deal-with-rain.html
+http://markkennedy.house.gov/cgi-data/column/files/38.shtml
+http://marksarvas.blogs.com/elegvar/2005/03/i_step_briefly_.html
+http://marksarvas.blogs.com/elegvar/2005/06/bea_post_4_fina.html
+http://markschmitt.typepad.com/decembrist/2003/12/deans_pengun_or.html
+http://markschmitt.typepad.com/decembrist/2004/05/a_theory_about_.html
+http://markschmitt.typepad.com/decembrist/2004/11/pottery_barn_ru.html
+http://markschmitt.typepad.com/decembrist/2004/11/the_right_quest.html
+http://markschmitt.typepad.com/decembrist/2005/01/bill_thomas_giv.html
+http://markschmitt.typepad.com/decembrist/2005/04/that_which_cann.html
+http://markshea.blogspot.com/
+http://marlongofast.tripod.com/events/5kevent2.htm
+http://maroney.blogs.com/sounds_like_new/2004/11/composers_voice_1.html
+http://maroon.uchicago.edu/news/articles/2004/03/09/comedians_take_on_pe.php
+http://maroon.uchicago.edu/viewpoints/articles/2005/04/29/chicagos_your_final_.php
+http://marriage.about.com/od/entertainmen1/p/johnnycarson.htm
+http://marriagemoments.byu.edu/
+http://mars.acnet.wnec.edu/~grempel/courses/wc2/lectures/industrialrev.html
+http://mars.acnet.wnec.edu/~grempel/courses/ww2/lectures/nazidiplomacy.html
+http://marshallbrain.blogspot.com/2005/06/peak-oil-will-be-non-event.html
+http://marshallbrain.com/manna1.htm
+http://marshallbrain.com/robotic-nation.htm
+http://marsrovers.jpl.nasa.gov/mission/status.html
+http://marsrovers.jpl.nasa.gov/spotlight/opportunity/b19_20040304.html
+http://martinez.senate.gov/index.cfm?FuseAction=PressReleases.Detail&PressRelease_id=259&Month=6&Year=2005
+http://martinirepublic.com/
+http://martinirepublic.com/item/when-not-too-bright-wingnuts-attack-a-tribute-to-cathy-seipp
+http://marybakereddy.rolf-witzsche.com/mary_baker_eddy_life.html
+http://marykay.typepad.com/gallimaufry/2004/11/
+http://marylaine.com/bookbyte/getbooks.html
+http://marylaine.com/exlibris/xlib212.html
+http://marylaine.com/myword/converse.html
+http://marylaine.com/myword/govinfo.html
+http://marylaine.com/myword/stuff.html
+http://masada2000.org/al-dura.html
+http://masamania.com/archives/2004/09/japanese_busine.html
+http://masamania.com/archives/2005/06/funny_man_never.html
+http://mason.gmu.edu/~emoody/emion2-3.htm
+http://mason.gmu.edu/~emoody/rfranklin.html
+http://mass.gov/samh/coping/kids_teens.html
+http://massmurder.zyns.com/murder.php?sortfield=date
+http://massmurder.zyns.com/patrick_sherrill_04.html
+http://mast.unco.edu/cas/etconference/index.php
+http://mastergardener2005.usask.ca/program-details24.html
+http://matchingtracksuits.com/
+http://matchopolis.com/
+http://matcmadison.edu/is/as/math/mathclub/MathEvents/WWTBAM05/default.htm
+http://materials.netskills.ac.uk/offer.html
+http://matewan.squarespace.com/journal/2005/5/14/wal-mart-closes-union-store-shuts-down-satirical-student-site-and-otherwise-covers-itself-in-glory-as-stock-price-plummets.html
+http://math-www.uni-paderborn.de/~axel/huetchen.html
+http://math.cofc.edu/faculty/kasman/MATHFICT/mfview.php?callnumber=mf181
+http://math.hws.edu/eck/cs120/f02/lab12/
+http://math.hws.edu/javamath/config_applets/Generic-params.html
+http://math.hws.edu/javamath/config_applets/ScatterPlotApplet.html
+http://math.ucr.edu/home/baez/physics/General/open_questions.html
+http://math.ucr.edu/home/baez/physics/Relativity/GR/energy_gr.html
+http://math.usask.ca/document/netinfo/careers.html
+http://mathbykoehler.com/gmp4-parents.htm
+http://mathcentral.uregina.ca/RR/database/RR.09.97/seaman4.html
+http://mathforum.org/dr.math/faq/faq.bases.html
+http://mathforum.org/dr.math/faq/faq.integers.html
+http://mathforum.org/dr.math/faq/faq.pascal.triangle.html
+http://mathforum.org/dr.math/faq/faq.prob.world.html
+http://mathforum.org/library/drmath/view/52143.html
+http://mathforum.org/library/drmath/view/56461.html
+http://mathforum.org/library/drmath/view/59027.html
+http://mathforum.org/library/drmath/view/63516.html
+http://mathforum.org/pow/solutio53.html
+http://mathforum.org/trails/feedback.results.html
+http://mathforum.org/~sarah/Discussion.Sessions/Collins.html
+http://mathforum.org/~sarah/Discussion.Sessions/biblio.attitudes.html
+http://mathworks.txstate.edu/Website/news/2003/nytimes.htm
+http://matrix.bangkokpost.co.th/forums/thread.php?Thread_ID=845
+http://matrix.scranton.edu/uram/papers_2002.html
+http://matrixcognition.com/PARALLEL.HTM
+http://mats.imk.fraunhofer.de/pipermail/pykde/2001-October/001657.html
+http://mats.imk.fraunhofer.de/pipermail/pykde/2001-October/001658.html
+http://matse1.mse.uiuc.edu/~tw/energy/prin.html
+http://matt.blogeasy.com/main.terms.run
+http://matt.blogs.it/2003/06/19.html
+http://maudnewton.com/blog/
+http://maudnewton.com/blog/index.php?p=4168
+http://maui-kamaole.ffind.servebeer.com/
+http://maxpages.com/raindrops/Stimulation
+http://maxpages.com/swaauganda/KEY_PRESENTATIONS
+http://maxpower.blogspot.com/
+http://maxspeak.org/mt/archives/000988.html
+http://maxweber.hunter.cuny.edu/pub/eres/EDSPC715_MCINTYRE/Inspriration.html
+http://mayoresearch.mayo.edu/mayo/research/staff/mcgregor_cg.cfm
+http://mayoresearch.mayo.edu/mayo/research/staff/publications-listed.cfm?personid=10251715
+http://mb-soft.com/believe/
+http://mb-soft.com/believe/indexa.html
+http://mb-soft.com/believe/txw/hailmary.htm
+http://mb.winneronline.com/showthread.html?t=18302
+http://mba.eiu.com/index.asp?layout=view_article&eiu_article_id=1377249537
+http://mba.eiu.com/index.asp?layout=view_article&eiu_article_id=627249462
+http://mba.studylink.com/display/provider/provider-info.html?pid=pid-si-20-wala
+http://mba.wharton.upenn.edu/mba/academics/curriculum/core.php
+http://mbdefault.org/18_benefits/default.asp
+http://mbhs.bergtraum.k12.ny.us/cybereng/shorts/botd.html
+http://mbhs.bergtraum.k12.ny.us/cybereng/shorts/phctf.html
+http://mbsunderlandmusic.co.uk/terms.html
+http://mcadams.posc.mu.edu/ruby4.htm
+http://mcanerin.blogspot.com/2005_01_01_mcanerin_archive.html
+http://mccabe.blogdrive.com/
+http://mccain.senate.gov/index.cfm?fuseaction=Newscenter.ViewPork&Content_id=1320
+http://mccain.senate.gov/index.cfm?fuseaction=Newscenter.ViewPressRelease&Content_id=1007
+http://mccain.senate.gov/index.cfm?fuseaction=Newscenter.ViewPressRelease&Content_id=1127
+http://mcconnell.senate.gov/whip_facts.cfm
+http://mccrossan.org/news/index.php?newsid=35
+http://mceer.buffalo.edu/meetings/2004AnnualMeeting/review.asp
+http://mcel.pacificu.edu/as/students/stanley/sumner.html
+http://mcgirl.blogspot.com/
+http://mciu.org/~spjvweb/fiftyways.html
+http://mckeesport.dementia.org/blog/000061.html
+http://mclc.osu.edu/jou/abstracts/foster2.htm
+http://mclc.osu.edu/rc/pubs/sekine.htm
+http://mcmcweb.er.usgs.gov/platte/cottonwood_ranch/cotton_protocol.html
+http://mdbenoit.com/trouble.htm
+http://mdn.mainichi.co.jp/news/archive/200506/17/20050617p2a00m0dm014000c.html
+http://mdtp.ucsd.edu/Apr02Nwsltr.shtml
+http://me.stanford.edu/faculty/facultydir/mitchell.html
+http://me.warcry.com/
+http://me.warcry.com/index.php/content/quests/quests.html
+http://me.warcry.com/scripts/faq/faq.phtml?id=11&site=25
+http://me.warcry.com/scripts/links/archive.phtml?id=13&site=25
+http://meaindia.nic.in/indiapublication/The%20Indian%20economy.htm
+http://mearu.deviantart.com/
+http://measureb.clpccd.cc.ca.us/district/bond/BondHistory.php
+http://meath.gaa.ie/minorresults.htm
+http://med.stanford.edu/anesthesia/newsletter/new.html
+http://med.stanford.edu/personal/boydhouse/frank_tales/first_fish.html
+http://medact.org/article_wmd.php?articleID=324
+http://medeamelana.deviantart.com/
+http://meded.im.wustl.edu/resources/forresidents/Rotations/Curricula/MICU-south.htm
+http://meded.ucsd.edu/osa/resources/srvlguide/bars.html
+http://medfacilities.stanford.edu/facilities/preventive.html
+http://media-server.amazon.com/jobs/jobs.html
+http://media.aoltimewarner.com/media/newmedia/cb_press_view.cfm?release_num=55254368
+http://media.digitalglobe.com/index.php?s=customer_testimonials&ITEM=1
+http://media.eriposte.com/4-5.htm
+http://media.ford.com/article_display.cfm?article_id=16911&make_id=96
+http://media.graytvinc.com/documents/Lightening+info.htm
+http://media.guardian.co.uk/site/story/0,14173,1498148,00.html
+http://media.mitsubishi-motors.com/pressrelease/e/motorsports/detail897.html
+http://media.nationalreview.com/066026.asp
+http://media.orkut.com/articles/0209.html
+http://media.timewarner.com/media/newmedia/cb_press_view.cfm?release_num=55254355
+http://mediabistro.com/articles/cache/a3599.asp
+http://mediabistro.com/articles/cache/a3599.asp?pntvs=1&
+http://mediabistro.com/articles/cache/a3600.asp
+http://mediabistro.com/bbs/cache%5Ct18563_1.asp
+http://mediacenter.blogs.com/morph/2005/04/it_can_be_tough.html
+http://medialit.med.sc.edu/mcreltv.htm
+http://medialit.med.sc.edu/mediapolitics.htm
+http://medialit.med.sc.edu/multimediaendorsement.htm
+http://mediamatters.org/
+http://mediamatters.org/items/200410150004
+http://mediamatters.org/items/200410220008
+http://mediamatters.org/items/200410250001
+http://mediamatters.org/items/200411050005/
+http://mediamatters.org/items/200501150001
+http://mediamatters.org/items/itembody/200411050005
+http://mediamatters.org/items/leftsideitem/200407020007
+http://mediamatters.org/items/leftsideitem/200410220009
+http://medicalmadhouse.blogspot.com/2005_01_01_medicalmadhouse_archive.html
+http://medicalreporter.health.org/tmr0695/eye0695.html
+http://medicalreporter.health.org/tmr1296/carstensen1296.html
+http://medicare.commission.gov/medicare/coughlantest.html
+http://medicare.regence.com/beneficiary/claimBilling/
+http://medicine.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pmed.0020041
+http://medicine.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pmed.0020098
+http://medicine.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pmed.0020131
+http://medicine.plosjournals.org/perlserv/?request=read-response&doi=10.1371/journal.pmed.0020041
+http://medicine.ucsd.edu/clinicalmed/eyes.htm
+http://medicine.ucsd.edu/clinicalmed/genital.htm
+http://medicine.ucsd.edu/clinicalmed/heart.htm
+http://medicine.ucsf.edu/housestaff/handbook/HospH2002_C7.htm
+http://medicines.mhra.gov.uk/ourwork/licensingmeds/types/thmpd/qa/traduse.htm
+http://medienkritik.typepad.com/
+http://medienkritik.typepad.com/blog/2004/08/but_what_about_.html
+http://medienkritik.typepad.com/blog/2005/05/germanys_larges.html
+http://medienkritik.typepad.com/blog/2005/05/goebbels_would_.html
+http://medienkritik.typepad.com/blog/2005/06/otto_schily.html
+http://medinfo.ufl.edu/cme/hmoa2/
+http://mediocrefred.mu.nu/archives/046568.php
+http://mediresource.sympatico.ca/channel_health_news_detail.asp?channel_id=131&menu_item_id=4&news_id=5552
+http://mediresource.sympatico.ca/channel_health_news_detail.asp?channel_id=133&menu_item_id=4&news_id=5552
+http://mediresource.sympatico.ca/channel_health_news_detail.asp?channel_id=60&menu_item_id=4&news_id=5552
+http://mediresource.sympatico.ca/channel_health_news_detail_pf.asp?channel_id=133&menu_item_id=4&news_id=5552
+http://mediresource.sympatico.ca/channel_health_news_detail_pf.asp?channel_id=60&menu_item_id=4&news_id=5552
+http://mediresource.sympatico.ca/health_news_detail.asp?channel_id=131&menu_item_id=&news_id=5552
+http://mediresource.sympatico.ca/health_news_detail.asp?channel_id=133&menu_item_id=&news_id=5552
+http://mediresource.sympatico.ca/health_news_detail.asp?channel_id=60&menu_item_id=&news_id=5552
+http://medlem.spray.se/gamow/georgegamow.html
+http://medlib.bu.edu/generic/ip.cfm
+http://medlib.bu.edu/generic/ip.cfm?format=text
+http://mednews.stanford.edu/releases/2002/may/home_exercise.html
+http://mednews.stanford.edu/releases/2003/june/diabetes_drug.html
+http://mednews.wustl.edu/group/page/normal/82.html
+http://mednews.wustl.edu/news/page/normal/4247.html
+http://mednews.wustl.edu/news/page/print/5325.html
+http://mednews.wustl.edu/tips/page/normal/4222.html
+http://mednews.wustl.edu/tips/page/normal/975.html
+http://mednews.wustl.edu/tips/page/print/975.html
+http://mednewsarchive.wustl.edu/medadmin/PAnews.nsf/0/5D8309886214267886256B1E0078F3DC
+http://mednewsarchive.wustl.edu/medadmin/PAnews.nsf/0/9F7DD26F198DDA6186256B1E00792D2C
+http://mednewsarchive.wustl.edu/medadmin/PAnews.nsf/0/B6ADE8FC84A7CAF086256B1E00792CDE
+http://medrants.com/archives/2003/05/13/
+http://medrants.com/archives/2003/10/27/
+http://medrants.com/archives/2003/10/27/the-debate-over-retainer-medicine/
+http://medrants.com/archives/2004/04/01/maybe-my-last-post-on-paternalism-and-prescription-drugs/
+http://medrants.com/archives/2005/04/20/maybe-we-should-have-a-small-spare-tire/
+http://medrants.com/archives/2005/04/26/ask-your-doctor/
+http://medrants.com/archives/2005/06/13/db-gets-published/
+http://medvedfans.blog-city.com/read/977539.htm
+http://medweb.bham.ac.uk/easdec/laserdiabetic_retinopathy.html
+http://medworld.stanford.edu/features/cases/lanctot.html
+http://medworld.stanford.edu/research_journals.html
+http://meeting-place.net/matchmaking.shtml
+http://meetme.hotornot.com/keyword/evanescence
+http://meetme.hotornot.com/r/?emid=GMOYH8E
+http://meetme.hotornot.com/r/?emid=NZKQSZN
+http://megafitness.com/weighted-fitness-shoes.html
+http://megan.navstaff.com/
+http://melizzard.typepad.com/
+http://melladrama.com/
+http://member.expertpages.com/jpina/Jon.html
+http://members.accessus.net/~tmcdonld/lighthse/Texas.htm
+http://members.aol.com/AngriesOut/fairfigh.htm
+http://members.aol.com/BruceG6069/RoboTech_faq/Robotech_S5.html
+http://members.aol.com/DATSCOPE/30inchTROKmachine.html
+http://members.aol.com/DanMRosen/donner/feb47.htm
+http://members.aol.com/DrMWEcker/Mersenne.htm
+http://members.aol.com/ERACampaignWeb/newsletter13.html
+http://members.aol.com/JehanaS/c_basics/behave.html
+http://members.aol.com/KMarkus/ed.html
+http://members.aol.com/LPMICKEY/Actingresource.index.html
+http://members.aol.com/Loig7/filmincoherence8.htm
+http://members.aol.com/MrDonnUnits/ColonialMexico.html
+http://members.aol.com/OCESS/
+http://members.aol.com/Patriarchy/definitions/nature.htm
+http://members.aol.com/RulesPA/73.Cp.25.html
+http://members.aol.com/Wmkoenig/uncle4.htm
+http://members.aol.com/_ht_a/skyelander/sbattles.html
+http://members.aol.com/_ht_a/sobertransitions/step8.html
+http://members.aol.com/acockburn/riskcata/risktoc.htm
+http://members.aol.com/althist1/Apr01/rocketrace.htm
+http://members.aol.com/autoharps/producing.html
+http://members.aol.com/bblum6/booming.htm
+http://members.aol.com/bear317/scjones.htm
+http://members.aol.com/bluekate/june_aug_01.htm
+http://members.aol.com/bookhaven/
+http://members.aol.com/chalew/turtle.htm
+http://members.aol.com/davidpb4/legal.html
+http://members.aol.com/depress/ccarol1b.htm
+http://members.aol.com/discanner/hgfull.html
+http://members.aol.com/ejcrighten/
+http://members.aol.com/eugeneb/richard.htm
+http://members.aol.com/genfir1/srcheng.htm
+http://members.aol.com/gordonkwok/occwrt.html
+http://members.aol.com/hannuschka/lyrics/vagab_ly.htm
+http://members.aol.com/jeff570/o.html
+http://members.aol.com/jfepperson/gwill.html
+http://members.aol.com/kjblaw/jun98.html
+http://members.aol.com/kptacek/faq1.html
+http://members.aol.com/kthynoll/schools.htm
+http://members.aol.com/ldbarns/selfhelp.htm
+http://members.aol.com/lochlan2/fordun.htm
+http://members.aol.com/lshauser/tweng.html
+http://members.aol.com/macmurdie/editorial/4002_ed.html
+http://members.aol.com/matherbw/SRAWeb/IssuesPhoenix/Phoenix98Summer.html
+http://members.aol.com/nataw/puppymillstory.html
+http://members.aol.com/nostrumrus/nos56.html
+http://members.aol.com/nostrumrus/nos78.html
+http://members.aol.com/oldbicycle/index2.html
+http://members.aol.com/petemellen/smplana2.htm
+http://members.aol.com/projectk9/
+http://members.aol.com/rdkfive/MaternalHallenbecks.html
+http://members.aol.com/rechtman/faq-army.html
+http://members.aol.com/reinbeaux/pass/pass.htm
+http://members.aol.com/rslts/prins.html
+http://members.aol.com/sherbornma/GBL.html
+http://members.aol.com/shobansen3/
+http://members.aol.com/spoons1000/break/
+http://members.aol.com/steamdoc/writings/thermo.html
+http://members.aol.com/stocksystm/view_holdings.html
+http://members.aol.com/timprinty/myhomepage/Rosmyths.html
+http://members.chello.at/herbert.paulis/CoS-FAQ.html
+http://members.chello.nl/cvanderlely/bfrond/articles/interview.htm
+http://members.chello.nl/mgormez/books/chr/chr01.htm
+http://members.cox.net/batchild1/transcript/spamplan.htm
+http://members.cox.net/caidmp/speceyeref.html
+http://members.cox.net/kevinsblogs/Liberal%20Media%20Bias%20and%20the%202000%20election.htm
+http://members.cox.net/kipw/kipspix.html
+http://members.cox.net/mpetracca/plover.html
+http://members.cox.net/prayersandposters/page5.html
+http://members.cox.net/wtws/memlinks.htm
+http://members.dallypost.com/pcpress/page4320.php
+http://members.dodo.net.au/~scribbledot/nutsep11pd.html
+http://members.ebay.com/aboutme/cathgram
+http://members.ebay.com/aboutme/cmsquareb
+http://members.ebay.com/aboutme/fqgipsy/
+http://members.ebay.com/aboutme/jamma456
+http://members.ebay.com/aboutme/kittenkat1958
+http://members.ebay.com/aboutme/quickdeal4u/
+http://members.ebay.com/aboutme/tonyrobertsglass
+http://members.fortunecity.com/belindavault/album6.htm
+http://members.fortunecity.com/chezmoi/bloodsport.html
+http://members.fortunecity.es/sololetras/canciones/letra_can/canc_1787.htm
+http://members.fortunecity.es/sololetras/canciones/letra_can/canc_2084.htm
+http://members.freespeech.org/ehj/news/n_economy_laccidents.html
+http://members.freespeech.org/humanityinaction/2000/8.htm
+http://members.gamedev.net/D1/journal/
+http://members.iinet.net.au/~bill/bylaws.html
+http://members.iinet.net.au/~bnc/al.htm
+http://members.iinet.net.au/~jgowland/plp/The%20Republic.htm
+http://members.iinet.net.au/~marshal/Clubpics.html
+http://members.iinet.net.au/~mewilson/menindeehistory.htm
+http://members.iinet.net.au/~sejones/cmnctsry.html
+http://members.iinet.net.au/~westps/authorshowcase/authorshowcase.html
+http://members.internet2.edu/memberupdates/MemUpdate-July03.html
+http://members.lycos.co.uk/Chaundy/ox_cen_John_Ric.html
+http://members.lycos.co.uk/bradgate/twoqueens.htm
+http://members.lycos.co.uk/bwitched/lyrics.html
+http://members.lycos.co.uk/gary_hart/lyricsd/destinys.html
+http://members.lycos.co.uk/hospital/chester-royal-infirmary.html
+http://members.lycos.co.uk/peterbeardsley/phpBB2/viewtopic.php?p=1400&
+http://members.lycos.co.uk/peterbeardsley/phpBB2/viewtopic.php?p=453&
+http://members.lycos.co.uk/peterbeardsley/phpBB2/viewtopic.php?t=59&start=0&postdays=0&postorder=asc&highlight=&
+http://members.lycos.nl/Deerhound/true-2.htm
+http://members.lycos.nl/Kritisch/Dualismlives.htm
+http://members.networx.net.au/~dennisg/poetry.htm
+http://members.optushome.com.au/aussff/Rosedoc.html
+http://members.optusnet.com.au/exponentialist/Dawkins.htm
+http://members.optusnet.com.au/~austbua/masturbation.htm
+http://members.optusnet.com.au/~cohousing/merri/site/indicativearea.htm
+http://members.optusnet.com.au/~gtosiris/page1.html
+http://members.ozemail.com.au/~annandbilld/vomitorium/
+http://members.ozemail.com.au/~born1820/mlmethod.htm
+http://members.ozemail.com.au/~ddasp/newsdec1997.htm
+http://members.ozemail.com.au/~donaldh/hr/art34-45.htm
+http://members.ozemail.com.au/~mhempel/publications/mponic1.htm
+http://members.ozemail.com.au/~mickay/enemy.htm
+http://members.ozemail.com.au/~netsafe/trojan_index.html
+http://members.rediff.com/NCCTCE/
+http://members.rediff.com/kunjethy/vatican.htm
+http://members.rediff.com/ruskinbond/openinglines.htm
+http://members.rogers.com/hypnotize/
+http://members.shaw.ca/ancienteyes/Zo's%20palindromes11.htm
+http://members.shaw.ca/bethcandlish/daws1.htm
+http://members.shaw.ca/cartermyths/cartersep.htm
+http://members.shaw.ca/crystaljems/standard.htm
+http://members.shaw.ca/h-chartrand/6.1.htm
+http://members.shaw.ca/mefreeman/sports/cycling/kv-day2.htm
+http://members.shaw.ca/nelsonbc/west_kootenaysold.html
+http://members.shaw.ca/remember-laurie/feel.htm
+http://members.shaw.ca/save-wild-horses/index1.htm
+http://members.shaw.ca/winonakent/cillaroseaffair/cr-chaptertwelve.html
+http://members.surfeu.fi/wpk/articles/relationships.htm
+http://members.thegeekgroup.org/~pawinemaker/numbers.html
+http://members.tripod.com/Caroline_Bowen/BrownsStages.htm
+http://members.tripod.com/OldRedHills/sfanw-yorkureview.html
+http://members.tripod.com/RSaffran/aba.html
+http://members.tripod.com/ResurrectionWillows/propagation.html
+http://members.tripod.com/Thryomanes/AnimalSounds.html
+http://members.tripod.com/capitan/George.html
+http://members.tripod.com/mahalia_fan/mahaliajacksonlyricspage/
+http://members.tripod.com/mwolff/see.html
+http://members.tripod.com/realaliyah/banking.htm
+http://members.tripod.com/rem_ind/audio/esalacks.htm
+http://members.tripod.com/saif_w/curious/philosophy/maftab/teleological_arguments.htm
+http://members.tripod.com/sharing_science/ktkstudentoutline.html
+http://members.tripod.com/wordjumble/Tearsvideo.html
+http://members.tripod.com/~DanCassian/RobertDaviFanClub.html
+http://members.tripod.com/~GOPcapitalist/clintonpage.html
+http://members.tripod.com/~GSOLTESZ/ian.htm
+http://members.tripod.com/~Patyrsun/GURPS-5-0001.html
+http://members.tripod.com/~ScienceWars/ullica1.html
+http://members.tripod.com/~Startag/USApg1.html
+http://members.tripod.com/~SuzVoy/jcfics/almost.html
+http://members.tripod.com/~TVHistory/paper.html
+http://members.tripod.com/~WOLFIELUC/xmascarol01.html
+http://members.tripod.com/~Write4801/docs/moboats-2.html
+http://members.tripod.com/~a_spring/fem-celeb.html
+http://members.tripod.com/~afronord/direct.html
+http://members.tripod.com/~batesca/epilogue.htm
+http://members.tripod.com/~batesca/mybook.htm
+http://members.tripod.com/~beulahland/
+http://members.tripod.com/~bloodhound/longwalk.htm
+http://members.tripod.com/~candst/studygd1.htm
+http://members.tripod.com/~candst/toc.htm
+http://members.tripod.com/~charles_W/arthritis10b.html
+http://members.tripod.com/~donalo/yang.htm
+http://members.tripod.com/~ehlavaty/scires1.htm
+http://members.tripod.com/~greatamericanhistory/gr02011.htm
+http://members.tripod.com/~greatamericanhistory/gr02014.htm
+http://members.tripod.com/~histclo/
+http://members.tripod.com/~klok/WRINKLY_.HTM
+http://members.tripod.com/~leavis/aussie.htm
+http://members.tripod.com/~manchurianhitchcock/keebee.html
+http://members.tripod.com/~midgley/chapel.html
+http://members.tripod.com/~nigelef/higherorg.htm
+http://members.tripod.com/~night_wanderer/bloodrose/archives/mar2000/downtothewoods.html
+http://members.tripod.com/~repowers/manic/s-seasn3.html
+http://members.tripod.com/~sarant_2/ks3gervasi.html
+http://members.tripod.com/~tsc/advice.htm
+http://members.tripod.com/~wackyanne/library/xlcarol1.htm
+http://members.tripod.com/~wackyanne/library/xlsignal.htm
+http://members.tripod.com/~warlight/UZUNDEMIR.html
+http://members.virtualtourist.com/m/8b6c8/fac/
+http://members.westnet.com.au/web/talltrees/clunes/Clunes%20Primary.htm
+http://members.whattheythink.com/home/041202mailnow.cfm
+http://members4.boardhost.com/liveworkplay/msg/1142.html
+http://memberscu.cusiteonline.com/129.php
+http://membrane.com/security/secure/yahoo_attack.html
+http://membres.lycos.fr/anarchives/site/rocker/prol.htm
+http://membres.lycos.fr/ufocenter/Musiques/Saison1/1ADA10.html
+http://memory.loc.gov/ammem/aaohtml/exhibit/aopart9.html
+http://memory.loc.gov/ammem/arendthtml/mharendtFolder07.html
+http://memory.loc.gov/ammem/ccmphtml/colahist.html
+http://memory.loc.gov/ammem/fsahtml/fachap03.html
+http://memory.loc.gov/ammem/naw/nawstime.html
+http://memory.loc.gov/ammem/ndlpedu/collections/amwest/history6.html
+http://memory.loc.gov/ammem/ndlpedu/collections/coolidge/history.html
+http://memory.loc.gov/ammem/ndlpedu/collections/ed/thinking.html
+http://memory.loc.gov/ammem/ndlpedu/collections/gw/history.html
+http://memory.loc.gov/ammem/ndlpedu/collections/map/thinking.html
+http://memory.loc.gov/ammem/ndlpedu/features/doc_analysis/movie/index_winter.html
+http://memory.loc.gov/ammem/smhtml/audiodir.html
+http://memory.loc.gov/ammem/today/dec07.html
+http://memory.loc.gov/ammem/today/jan15.html
+http://memory.loc.gov/ammem/today/jan19.html
+http://memory.loc.gov/ammem/today/nov27.html
+http://memory.loc.gov/ammem/today/oct21.html
+http://memory.loc.gov/ammem/today/sep11.html
+http://memory.loc.gov/ammem/today/sep12.html
+http://memory.loc.gov/ammem/vshtml/vsflme.html
+http://memory.loc.gov/learn/community/chat/oct16_03.html
+http://memory.loc.gov/learn/community/chat/oct17_02.html
+http://memory.loc.gov/learn/lessons/99/edison/teach.html
+http://memory.loc.gov/learn/lessons/99/fun/townschool.html
+http://memory.loc.gov/learn/lessons/primary.html
+http://memphis.bizjournals.com/memphis/stories/2005/01/03/daily39.html?jst=cn_cn_lk
+http://memphis.bizjournals.com/memphis/stories/2005/01/03/daily39.html?jst=m_ln_hl
+http://memphis.bizjournals.com/memphis/stories/2005/01/03/daily39.html?jst=pn_pn_lk
+http://men.typepad.com/mens_hour/2005/03/
+http://men.typepad.com/mens_hour/2005/03/sexist_oxfam_se.html
+http://menagerie.mactyre.net/article.php?story=20040110123331608
+http://mensnewsdaily.com/blog/2005/06/its-not-your-mothers-fathers-movement.htm
+http://mentalhealth.about.com/
+http://mentalhealth.about.com/cs/mindandbody/a/immunelaughter.htm
+http://mentalhealth.about.com/cs/mindandbody/a/immunelaughter_2.htm
+http://mentalhealth.about.com/cs/suicideresources/a/killself.htm
+http://mentalhelp.net/books/books.php?type=de&id=2101
+http://mentalhelp.net/poc/view_doc.php?type=doc&id=629&cn=8
+http://mentalhelp.net/psyhelp/chap1/chap1d.htm
+http://mentalhelp.net/psyhelp/chap11/chap11f.htm
+http://mentalhelp.net/psyhelp/chap13/chap13b.htm
+http://mentalhelp.net/psyhelp/chap13/chap13h.htm
+http://mentalhelp.net/psyhelp/chap4/chap4d.htm
+http://mentalhelp.net/psyhelp/chap4/chap4m.htm
+http://mentalhelp.net/psyhelp/chap8/chap8f.htm
+http://mentalhygiene.com/index.php/2005/06/04/post-it-mosaic-howto/
+http://mentor.lscf.ucsb.edu/course/summer/eemb127/syllabus.html
+http://mentura.com/Content/Library.aspx?Mode=Subject&ID=238
+http://mentura.com/Content/Library.aspx?Mode=Subject&ID=240
+http://merc.mcmaster.ca/symposium/SCMSymposium2003.html
+http://mercurior.blogspot.com/
+http://mercury.soas.ac.uk/staffdevelopment/news.html
+http://mergercentral.com/default.cfm?division=20
+http://meria.idc.ac.il/journal/1997/issue1/jv1n1a4.html
+http://meria.idc.ac.il/journal/2004/issue2/jv8n2a2.html
+http://meria.idc.ac.il/research-g/maps.html
+http://merlin.blogs.com/43folders/2004/09/quicksilver_mov.html
+http://merodeando.com/en/
+http://merseybasin.itcuk.net/page.asp?id=2963&docid=19
+http://mesh.medill.northwestern.edu/mnschicago/archives/2005/06/ethnceat_chicag.html
+http://messageboard.tuckermax.com/showthread.php?t=1551&page=2
+http://messageboards.active.com/jive/thread.jspa?threadID=1209&messageID=10641
+http://messageboards.active.com/jive/thread.jspa?threadID=1209&tstart=0
+http://messenger-inquirer.com/index/kentucky.htm
+http://messenger-inquirer.com/sports/professional/8038657.htm
+http://messybeast.com/catarchive.htm
+http://messybeast.com/faddycats.htm
+http://met-www.cit.cornell.edu/glossary.html
+http://metamorphosism.com/fiction/archives/000419.html
+http://metaphilm.com/philm.php?id=391_0_2_0_M
+http://meted.ucar.edu/dlac/lesson3c/print.htm
+http://meted.ucar.edu/mesoprim/seabreez/print.htm
+http://meted.ucar.edu/norlat/snow/lake_effect/print_whole.htm
+http://meteoritics.org/Abst_39-2.htm
+http://metro.sandiegometro.com/dbr/index.php?dbrID=784
+http://metromix.chicagotribune.com/movies/mmx-041207-movies-review-rke-blade.story
+http://metromix.chicagotribune.com/movies/mmx-050224-movies-review-mw-diary.story
+http://metropolis.japantoday.com/moneytalks/287/moneytalksinc.htm
+http://metropolis.japantoday.com/tokyotravel/tokyoworldtravel/391/tokyoworldtravelinc.htm
+http://metroyouthsymphony.org/announce.shtml
+http://mevault.ign.com/
+http://meyerweb.com/eric/thoughts/2004/10/18/ssup5sup-10/
+http://meyerweb.com/eric/thoughts/200401.html
+http://mfa.gov.il/mfa/go.asp?MFAH0i1x0
+http://mfa.gov.il/mfa/go.asp?MFAH0iiz0
+http://mfweb.com.au/wc.dll?event~events_MIAA_anon~&criteria=%7C%7CNSW%7C%7C%7C
+http://mgilleland.com/dec2003.htm
+http://mgoblue.com/document_display.cfm?document_id=11420
+http://mgonline.com/architect.html
+http://mgv.mim.edu.my/Articles/00574/9602473.Htm
+http://mh.bmjjournals.com/cgi/content/full/30/1/27
+http://mha-net.org/msb/html/papers-n/palo01/wastewa.htm
+http://mhking.mu.nu/archives/034157.php
+http://mhmonline.com/defaultdirectory.asp
+http://miagoddess.blogspot.com/2005/05/tuesday-activity-1.html
+http://miami.about.com/
+http://miami.indymedia.org/news/2005/05/1396.php
+http://miaw.nami.org/mediatip.html
+http://micahchallenge.org/Christians_Poverty_and_Justice/98.asp
+http://michael-friedman.com/archives/000312.html
+http://michael-friedman.com/archives/2004_03.html
+http://michael.casavant.us/SRIII/reality.htm
+http://michael.casavant.us/SRIII/srterms.htm
+http://michael.ellerman.id.au/index.cgi/2004/07/
+http://michaelbluejay.com/sri/
+http://michaelgersh.blogspot.com/2003_09_28_michaelgersh_archive.html
+http://michaelhyatt.blogs.com/workingsmart/2004/11/the_concept_7_s.html
+http://michaelhyatt.blogs.com/workingsmart/2005/03/corporate_blogg.html
+http://michaelmoore.com/words/index.php?messageDate=2004-04-14
+http://michaelyon.blogspot.com/2005/05/little-girl.html
+http://micheleagnew.com/
+http://michelleandchristy.typepad.com/work_in_progress/2004/10/
+http://michellemalkin.com/archives/000246.htm
+http://michellemalkin.com/archives/000292.htm
+http://michellemalkin.com/archives/001220.htm
+http://michellemalkin.com/archives/002712.htm
+http://michigan.gov/scope/0,1607,7-155-10710_10733_10735-40269--,00.html
+http://michigan.sierraclub.org/about/retreat.html
+http://michigan.sierraclub.org/action/Watchdog.html
+http://micro.balances.com/
+http://micro5.mscc.huji.ac.il/~msjan/neutron.html
+http://microcosmpublishing.com/
+http://microhealthsolutions.com/index.php?cPath=4
+http://microsoft.toddverbeek.com/wp.html
+http://microvet.arizona.edu/Courses/MIC438/VirusQuestions.htm
+http://microwave.nsstc.nasa.gov:5721/dataset_documents/lolracts_dataset.html
+http://mid.wesmo.com/machine/?changelog=1
+http://middle.river.jobs.topusajobs.com/
+http://middlebury.net/acsa/
+http://middleeast.sun.com/service/support/warranty/
+http://middleware.internet2.edu/dir/groups/internet2-mace-dir-groups-best-practices-200210.htm
+http://middleware.internet2.edu/dir/groups/rpr-nmi-edit-mace_dir-groups_best_practices-1.0.html
+http://midwest.construction.com/features/archive/0305_Weekend.asp
+http://midwest.fws.gov/endangered/birds/hens_dec.html
+http://midwifeinfo.com/FAQs.php
+http://mightypets.com/links/Veterinary.asp
+http://migration.ucdavis.edu/mn/comments.php?id=3016_0_9_0_C
+http://mikesejournal.com/archives/2003_01.php
+http://mikewest.org/
+http://mikezellers.com/blog2/2005/02/what-ive-been-reading-listening-to.html
+http://mikonos.globat.com/~joeworld-online.com/news/publish/article_187.shtml
+http://mileageplusvisa.ualmiles.com/TermsAndConditions.jsp
+http://miles-davis.com/GilEvans/MilesAhead/linernotes.html
+http://milgram.tripod.com/works/gefilm1.html
+http://militaryhistory.about.com/b/a/053482.htm
+http://militaryweek.com/archived-africa.shtml
+http://militaryweek.com/casualties.shtml
+http://millennium-debate.org/abridged.htm
+http://millhill.co.nz/wairaka.htm
+http://millimeter.com/mag/video_creative_stock_innovative/
+http://millimeter.com/mag/video_di_innovations/
+http://millimeter.com/mag/video_future_stock_boutique/
+http://millimeter.com/mag/video_la_confidential_los/
+http://millimeter.com/news/video_guide_understanding_networkattached/
+http://millionsmaker.armchairmillionaire.com/
+http://millionsmaker.armchairmillionaire.com/faqs/
+http://miltsfile.blogspot.com/2005_01_16_miltsfile_archive.html
+http://milwaukee.bizjournals.com/milwaukee/stories/2005/01/24/story3.html
+http://mimeograph.org/Old/places/03/05/40000_feet_below_binions_lowrolling_near_the_world_series_of_poker_121.php
+http://mindfreedom.org/mindfreedom/news/010308.shtml
+http://mindismoving.org/blog/
+http://mindpower.smartads.info/visioneering/meditation-why-just-sitting-there-just-isnt-enough.html
+http://mindprod.com/iraq.html
+http://miniatures.de/html/int/hasegawa-MT05-grant.html
+http://minimsft.blogspot.com/
+http://minister.dva.gov.au/speeches/2002/03_mar/kokoda.htm
+http://ministryemployment.com/jobs/2177
+http://ministryemployment.com/services/ministersearch.asp
+http://minneapolis.metblogs.com/archives/2005/04/index.phtml
+http://minneapolisfed.org/info/mpls/history/deming.cfm
+http://minneapolisfed.org/pubs/region/04-05/essay.cfm
+http://minneapolisfed.org/pubs/region/04-09/wirtz.cfm
+http://minneapolisfed.org/pubs/region/89-05/reg895d.cfm
+http://minneapolisfed.org/pubs/region/95-09/int959.cfm
+http://minnesota.publicradio.org/radio/programs/open_air/
+http://minnow.cc.gatech.edu/squeak/158
+http://minnow.cc.gatech.edu/squeak/1928
+http://minorjive.typepad.com/hungryblues/2004/10/some_notes_on_t.html
+http://minusspace.com/kraus/kraus.html
+http://mirror.perupetro.com.pe/negociaciones01-e.asp
+http://misapplied.blogdrive.com/
+http://mishalov.net/joongang23oct03.html
+http://mission.itu.ch/MISSIONS/Myanmar/00nlm/n001223.htm
+http://mission.itu.ch/MISSIONS/Myanmar/01nlm/n010110.htm
+http://mission.itu.ch/MISSIONS/Myanmar/05nlm/n050331.htm
+http://mission.itu.ch/MISSIONS/Myanmar/05nlm/n050603.htm
+http://missmellie.blogspot.com/2004_10_01_missmellie_archive.html
+http://mit.edu/biology/www/facultyareas/facresearch/sauer.shtml
+http://mit.edu/cre/careers/careerservices.html
+http://mit.edu/its/courseevent.html
+http://mitglied.lycos.de/DreamsNeverEnd/osrev006.htm
+http://mitpress.mit.edu/catalog/item/default.asp?tid=15&ttype=4&xcid=0&xid=6
+http://mitpress.mit.edu/catalog/item/default.asp?ttype=5&tid=1401&xid=6&xcid=0
+http://miva.sctimes.com/miva/cgi-bin/miva?Web/page.mv+1+local+20050115055140
+http://mixingmemory.blogspot.com/2004/10/once-more-into-breach.html
+http://mixonline.com/mag/audio_malcolm_burn/
+http://mjr.towers.org.uk/swn/
+http://mjroseblog.typepad.com/buzz_balls_hype/
+http://mkurniawan.textamerica.com/
+http://mlb.mlb.com/NASApp/mlb/mil/news/mil_news.jsp?ymd=20021204&content_id=181276&vkey=news_mil&fext=.jsp
+http://mlb.mlb.com/NASApp/mlb/mlb/official_info/community/btf.jsp?content=turf_designs
+http://mlb.mlb.com/NASApp/mlb/mlb/official_info/official_rules/game_preliminaries_3.jsp
+http://mlb.mlb.com/NASApp/mlb/mlb/schedule/important_dates_05.jsp
+http://mlb.mlb.com/NASApp/mlb/news/article_leftfield.jsp?ymd=20050221&content_id=947223&vkey=leftfield&fext=.jsp
+http://mlbplayers.mlb.com/NASApp/mlb/pa/releases/releases.jsp?content=0317
+http://mlmlaw.blogspot.com/2004/08/scamology-101-introduction-to-pyramid.html
+http://mmlpool.org/shared/public/right_side_navigation/risk_management_tips/educational_opportunity.php
+http://mo.water.usgs.gov/
+http://moab.eecs.wsu.edu/~kfitz/FitzResearch.html
+http://moat.nlanr.net/NAI/
+http://mobile.banananetwork.com/ringtonelist.asp?lt=5&CategoryID=1&page=3
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/heinz_306898_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/heinz_306944_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/hot_coffee_305799_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/pepsi_306468_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/pizza_hut_307435_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/pringles_302521_logo.asp
+http://mobile.ntlworld.com/logos/Food_And_Drink_logos/Fast_Food_logos/robinson-s_307712_logo.asp
+http://mobile.ntlworld.com/logos/Nature_logos/Fish_logos/drink_like_a_fish_300669_logo.asp
+http://mobile.ntlworld.com/mms_pictures/Other_mms_pictures/Pictures_mms_pictures/fancy_a_drink-_400102_mms_picture.asp
+http://mobilemomentum.msn.com/article.aspx?aid=12
+http://mobyrebuttal.blogspot.com/
+http://mochi.blogs.com/happylife/2004/06/
+http://mockingbird.creighton.edu/english/micsun/IrishResources/archaeol.htm
+http://mod.nic.in/aforces/body.htm
+http://modeemi.cs.tut.fi/~tuomov/ion/
+http://modelminority.com/printout260.html
+http://moderick.typepad.com/life/2005/04/
+http://moderncrusader.blogspot.com/
+http://modernfabulousity.blogspot.com/
+http://modernkicks.typepad.com/modern_kicks/
+http://modies.blogspot.com/2005/06/adoption-changes-some-questions-for.html
+http://modifiedliving.com/archive1.htm
+http://modperlbook.org/html/ch21_01.html
+http://moglen.law.columbia.edu/publications/maine-speech.html
+http://mojo.calyx.net/~olsen/HEMP/IHA/iha02109.html
+http://mojo.calyx.net/~olsen/HEMP/IHA/iha03211.html
+http://mojo.skazat.com/
+http://mold-help.org/content/view/155/
+http://mold-help.org/content/view/18/
+http://mold-help.org/content/view/341/
+http://mold-help.org/content/view/50/
+http://mold-help.org/content/view/509/
+http://mold-help.org/content/view/82/
+http://molehr.oupjournals.org/cgi/content/full/10/10/729
+http://moliere.byu.edu/digital/heroesa5.html
+http://molly.open.ac.uk/Personal-pages/Pubs/Profiles/tbl.htm
+http://moltag.blogspot.com/
+http://molvis.sdsc.edu/vmi_docs/newsite.htm
+http://mom.lifetips.com/
+http://momentarymadness.typepad.com/nipponnotesandqueries/2004/08/
+http://moncon.greenmuseum.org/papers/harrison1.html
+http://monde-diplo-friends.org.uk/LMDarticles/sept01art1.html
+http://mondediplo.com/1997/02/05korea2
+http://mondediplo.com/1997/09/magnitka
+http://mondediplo.com/1998/03/16zonesla
+http://mondediplo.com/1998/07/02kosov
+http://mondediplo.com/1998/07/18israel
+http://mondediplo.com/1999/05/14tele
+http://mondediplo.com/1999/09/06poverty
+http://mondediplo.com/1999/10/03timor
+http://mondediplo.com/1999/11/10skorea
+http://mondediplo.com/1999/12/12comb
+http://mondediplo.com/2000/09/03russia
+http://mondediplo.com/2001/01/05israelleft
+http://mondediplo.com/2001/07/07aids
+http://mondediplo.com/2001/10/06wagner
+http://mondediplo.com/2001/12/08euro
+http://mondediplo.com/2002/06/08france
+http://mondediplo.com/2002/06/09couscous
+http://mondediplo.com/2002/09/08sabra
+http://mondediplo.com/2003/09/07jourde
+http://mondediplo.com/2004/02/05europefailure
+http://mondediplo.com/2004/02/12economy
+http://mondediplo.com/2004/04/08francegermany
+http://mondediplo.com/2004/06/05thewall
+http://mondediplo.com/2004/09/19walking
+http://mondediplo.com/2004/11/07usivyleague
+http://mondediplo.com/2005/06/07uspensions
+http://money.cnn.com/
+http://money.cnn.com/1999/03/01/life/q_trusts/
+http://money.cnn.com/2000/10/27/soho/q_janeidea64/
+http://money.cnn.com/2001/11/09/companies/aftershock_banks/
+http://money.cnn.com/2002/04/03/pf/college/q_hotdiploma/
+http://money.cnn.com/2002/08/26/news/9-11retail/
+http://money.cnn.com/2003/09/25/markets/beforebell/
+http://money.cnn.com/2003/12/22/pf/expert/ask_expert/
+http://money.cnn.com/2004/02/09/news/economy/jobs_model/
+http://money.cnn.com/2004/02/11/news/economy/greenspan/
+http://money.cnn.com/2004/03/05/pf/saving/willis_tips/
+http://money.cnn.com/2004/03/18/technology/techinvestor/hellweg/
+http://money.cnn.com/2004/03/19/pf/prenups/
+http://money.cnn.com/2004/07/28/pf/saving/willis_tips/
+http://money.cnn.com/2004/08/20/funds/funds_muni_0409/
+http://money.cnn.com/2004/08/24/pf/expert/ask_expert/
+http://money.cnn.com/2004/09/28/news/economy/icr_feb/
+http://money.cnn.com/2004/09/28/pf/debt/chatzky_program_0406/
+http://money.cnn.com/2004/10/11/pf/expert/ask_expert/
+http://money.cnn.com/2004/10/15/pf/saving/willis_tips/
+http://money.cnn.com/2004/10/22/pf/insurance/healthcare_cdhc_0411/
+http://money.cnn.com/2005/02/11/pf/magpl_suddenly_0503/
+http://money.cnn.com/2005/02/17/news/midcaps/mso_walkup/
+http://money.cnn.com/2005/03/22/news/economy/taxreform_vat/
+http://money.cnn.com/2005/04/08/pf/taxes/tax_freedom/
+http://money.cnn.com/2005/04/28/pf/college/cost/
+http://money.cnn.com/2005/05/03/technology/techinvestor/lamonica/
+http://money.cnn.com/2005/05/10/news/fortune500/summer_movies/
+http://money.cnn.com/2005/05/24/news/economy/amt_reform/
+http://money.cnn.com/2005/05/25/news/economy/newhomes/
+http://money.cnn.com/2005/05/27/markets/markets_rangebound/
+http://money.cnn.com/2005/06/10/markets/sun_lookahead/
+http://money.cnn.com/2005/06/21/markets/markets_newyork/
+http://money.cnn.com/cnnsi/2005/basketball/nba/specials/playoffs/2005/06/23/larry.brown.ap/
+http://money.cnn.com/markets/news/
+http://money.excite.com/jsp/nw/nwdt_rt.jsp?section=news&news_id=dji-00101020050615&feed=dji&date=20050615&cat=RET
+http://money.guardian.co.uk/cashclinic/
+http://money.guardian.co.uk/endowments/story/0,6453,1304089,00.html
+http://money.guardian.co.uk/ethicalmoney/story/0,1356,1227100,00.html
+http://money.guardian.co.uk/howtocomplain/story/0,11609,758323,00.html
+http://money.guardian.co.uk/howtocomplain/story/0,11609,957631,00.html
+http://money.guardian.co.uk/interestrates/0,6453,594819,00.html
+http://money.guardian.co.uk/news_/
+http://money.guardian.co.uk/news_/0,1456,,00.html
+http://money.guardian.co.uk/news_/0,1456,567791,00.html
+http://money.guardian.co.uk/news_/0,1456,567791,00.html?76%3A+Money+news
+http://money.guardian.co.uk/news_/story/0,1456,1405304,00.html
+http://money.guardian.co.uk/news_/story/0,1456,1493700,00.html
+http://money.guardian.co.uk/property/buyingtolet/0,14431,1181036,00.html
+http://money.guardian.co.uk/property/buyingtolet/story/0,14434,1427201,00.html
+http://money.guardian.co.uk/retirementhousing/story/0,11720,672402,00.html
+http://money.guardian.co.uk/saving/banks/story/0,12410,1493701,00.html
+http://money.guardian.co.uk/saving/story/0,1456,1171154,00.html
+http://money.guardian.co.uk/scamsandfraud/story/0,13802,1252835,00.html
+http://money.guardian.co.uk/splitcapitalinvestmenttrusts/story/0,12051,819447,00.html
+http://money.guardian.co.uk/tax/
+http://money.guardian.co.uk/travel/story/0,1456,1328447,00.html
+http://money.guardian.co.uk/work/
+http://money.guardian.co.uk/work/howto/story/0,1456,1135552,00.html
+http://money.independent.co.uk/property/homes/story.jsp?story=604493
+http://money.independent.co.uk/property/homes/story.jsp?story=644976
+http://money.inq7.net/features/view_features.php?yyyy=2005&mon=06&dd=13&file=1
+http://money.msn.co.uk/Bank_Plan/insurance/Guides/Basics/005004/default.asp
+http://money.msn.co.uk/Bank_Plan/savings/Journals/StashThatCash/FinancialPhobia/default.asp
+http://money.msn.co.uk/MyMoney/Insight/MyBusiness/StartingOut/Workingfromhome/default.asp
+http://money.msn.co.uk/MyMoney/Insight/SpecialFeatures/PAFeatures/articlethree/default.asp
+http://money.msn.co.uk/Planning/life_events/myhome/insight/propertymatters/HousePriceLeague/default.asp
+http://money.msn.co.uk/Student/SFUKDiaries/Home/gapyearstudents/helenrowles/4joytemping/
+http://money.msn.co.uk/Student/SFUKDiaries/Home/secondyearstudents/safinaahmad/2Timetopriority/
+http://money.msn.co.uk/insurance/Insight/Guides/Basics/005004/default.asp
+http://money.msn.co.uk/investing/Insight/SpecialFeatures/ActiveInvestor/EthicalInvesting/default.asp
+http://money.msn.co.uk/investing/Insight/SpecialFeatures/ActiveInvestor/Ethicalinvesting/default.asp
+http://money.msn.co.uk/investing/Insight/SpecialFeatures/ActiveInvestor/sexindustry/default.asp
+http://money.msn.co.uk/investing/Insight/SpecialFeatures/shareacademy/intermediate/EFlotationsIPOs/9Startofdealing/default.asp
+http://money.msn.co.uk/life_events/myhome/insight/propertymatters/averagehouseprice/default.asp
+http://money.msn.co.uk/mortgages/Insight/Buytolet/buytoletinsurance/default.asp
+http://money.msn.co.uk/mortgages/Insight/buytolet/buytoletinsurance/
+http://money.msn.co.uk/specials/ChristmasMoney/Christmasmoneyhangover/
+http://money.msn.co.uk/specials/newyearnewmoney/Christmasmoneyhangover/default.asp
+http://money.msn.co.uk/yourhome/averagehouseprice/
+http://money.telegraph.co.uk/money/main.jhtml?xml=/money/2005/02/02/cmatm02.xml
+http://moneycentral.groups.msn.com/ADSXMoneyCentral/general.msnw?action=get_message&mview=0&ID_Message=112964&LastModified=4675507508398851329
+http://moneycentral.groups.msn.com/MSFTMoneyCentral/general.msnw?action=get_message&mview=0&ID_Message=10706&LastModified=4675494748395779891
+http://moneycentral.msn.com/Content/CNBCTV/Articles/TVReports/Index.asp
+http://moneycentral.msn.com/articles/invest/careful/5934.asp
+http://moneycentral.msn.com/articles/invest/company/6086.asp
+http://moneycentral.msn.com/content/Banking/Betterbanking/P38218.asp
+http://moneycentral.msn.com/content/Banking/Betterbanking/P77160.asp
+http://moneycentral.msn.com/content/Banking/Homebuyingguide/P84657.asp
+http://moneycentral.msn.com/content/Banking/P57803.asp
+http://moneycentral.msn.com/content/Banking/P59113.asp
+http://moneycentral.msn.com/content/Banking/P71745.asp
+http://moneycentral.msn.com/content/Banking/bankruptcyguide/P108797.asp
+http://moneycentral.msn.com/content/Banking/creditcardsmarts/P55860.asp
+http://moneycentral.msn.com/content/CNBCTV/Articles/Dispatches/P108986.asp
+http://moneycentral.msn.com/content/CNBCTV/Articles/Dispatches/P121394.asp
+http://moneycentral.msn.com/content/CollegeandFamily/Cutcollegecosts/P57116.asp
+http://moneycentral.msn.com/content/CollegeandFamily/Loveandmoney/P43152.asp
+http://moneycentral.msn.com/content/CollegeandFamily/Moneyinyour20s/P37554.asp
+http://moneycentral.msn.com/content/CollegeandFamily/P94152.asp
+http://moneycentral.msn.com/content/Insurance/Insureyourlife/P77616.asp
+http://moneycentral.msn.com/content/Insurance/Insureyourlife/P77616.asp?Printer
+http://moneycentral.msn.com/content/Insurance/P46242.asp
+http://moneycentral.msn.com/content/Investing/Findhotstocks/P101782.asp
+http://moneycentral.msn.com/content/Investing/Findhotstocks/P90038.asp
+http://moneycentral.msn.com/content/Investing/Realestate/P63968.asp
+http://moneycentral.msn.com/content/Investing/Startinvesting/P38386.asp
+http://moneycentral.msn.com/content/P103394.asp
+http://moneycentral.msn.com/content/P105037.asp
+http://moneycentral.msn.com/content/P107527.asp
+http://moneycentral.msn.com/content/P109887.asp
+http://moneycentral.msn.com/content/P119388.asp
+http://moneycentral.msn.com/content/P120882.asp
+http://moneycentral.msn.com/content/P50152.asp
+http://moneycentral.msn.com/content/P65606.asp
+http://moneycentral.msn.com/content/P87339.asp?GT1=4244
+http://moneycentral.msn.com/content/P99095.asp
+http://moneycentral.msn.com/content/RetirementandWills/P52389.asp
+http://moneycentral.msn.com/content/RetirementandWills/P52389.asp?Printer
+http://moneycentral.msn.com/content/Retirementandwills/Createaplan/P87296.asp
+http://moneycentral.msn.com/content/SavingandDebt/P101679.asp
+http://moneycentral.msn.com/content/SavingandDebt/P111061.asp
+http://moneycentral.msn.com/content/SavingandDebt/P43217.asp
+http://moneycentral.msn.com/content/SavingandDebt/P59862.asp
+http://moneycentral.msn.com/content/SavingandDebt/P59862.asp?Printer
+http://moneycentral.msn.com/content/Savinganddebt/Finddealsonline/P36487.asp
+http://moneycentral.msn.com/content/Savinganddebt/Managedebt/P107758.asp
+http://moneycentral.msn.com/content/Savinganddebt/Savemoney/P36016.asp
+http://moneycentral.msn.com/content/Savinganddebt/Savemoney/P36016.asp?special=0501freedom
+http://moneycentral.msn.com/content/Savinganddebt/Savemoney/P90000.asp
+http://moneycentral.msn.com/content/Savinganddebt/Travelforless/P105676.asp
+http://moneycentral.msn.com/content/Savinganddebt/Travelforless/P105676.asp?Printer
+http://moneycentral.msn.com/content/Savinganddebt/Travelforless/P36628.asp
+http://moneycentral.msn.com/content/Taxes/Cutyourtaxes/P100609.asp
+http://moneycentral.msn.com/content/Taxes/P80242.asp
+http://moneycentral.msn.com/content/invest/extra/P100059.asp
+http://moneycentral.msn.com/content/invest/extra/P100059.asp?Printer
+http://moneycentral.msn.com/content/invest/extra/P101099.asp?Printer
+http://moneymanager.smh.com.au/articles/2005/06/14/1118645801530.html
+http://moneymanager.smh.com.au/banking/guides/accounts_guide.html
+http://monkeybargym.com/jon.asp
+http://monkeymagic.net/blog/archives/2004/01/14/the_making_of_memory_chapter_4_notes_pt_ii.html
+http://monmouthcounty911memorial.com/index.asp?action=5
+http://monoborg.law.indiana.edu/LawRank/methods.shtml
+http://monographs.iarc.fr/htdocs/monographs/vol57/03-hcbl1.htm
+http://monrovia.usembassy.gov/liberia/July92002.html
+http://monster-island.org/tinashumor/humor/deadmail.html
+http://monstro.com/2005/04/i-hear-what-youre-saying-but-youre.php
+http://monstro.com/2005/04/we-are-what-we-are-willing-to-put-up.php
+http://montevideo.usembassy.gov/usaweb/paginas/424d-00EN.shtml
+http://montevideo.usembassy.gov/usaweb/paginas/435-00EN.shtml
+http://montevideo.usembassy.gov/usaweb/paginas/STATE007869EN.shtml
+http://montgomery.thefreelibrary.com/Anne-Of-Green-Gables/5-1
+http://montrose.date.com/singles/colorado6.htm
+http://moonfishgroup.com/GBP2Commerce/product_reviews_info.php?products_id=57&reviews_id=25
+http://moonic.tblog.com/
+http://moorewatch.com/index.php/C11/
+http://moorewatch.com/index.php/buying_opinions/
+http://moorewatch.com/index.php/stickers_on_tapes/
+http://moorewatch.com/index.php/warning_to_all/
+http://moorewatch.com/index.php/weblog/C11/
+http://moorewatch.com/index.php/weblog/C11/P0/
+http://moorewatch.com/index.php/weblog/C11/index.php/weblog/privacy/
+http://moorewatch.com/index.php/weblog/buying_opinions/
+http://moorewatch.com/index.php/weblog/comments/1024/
+http://moorewatch.com/index.php/weblog/comments/1158/
+http://moorewatch.com/index.php/weblog/comments/1169/
+http://moorewatch.com/index.php/weblog/comments/1196/
+http://moorewatch.com/index.php/weblog/comments/1377/
+http://moorewatch.com/index.php/weblog/comments/347/
+http://moorewatch.com/index.php/weblog/comments/537/
+http://moorewatch.com/index.php/weblog/comments/796/
+http://moorewatch.com/index.php/weblog/comments/796/P50/
+http://moorewatch.com/index.php/weblog/comments/blegging_time/
+http://moorewatch.com/index.php/weblog/comments/keep_on_lying_in_the_free_world/
+http://moorewatch.com/index.php/weblog/comments/the_lying_liar1/
+http://moorewatch.com/index.php/weblog/does_michael_moore_ineed_i/
+http://moorewatch.com/index.php/weblog/warning_to_all/
+http://moorewatch.com/index.php/why_people_fear_guns/
+http://mootpoint.blogdrive.com/
+http://moreena.blogspot.com/2003_08_01_moreena_archive.html
+http://morethandonuts.blogspot.com/archives/2005_01_01_morethandonuts_archive.html
+http://morganwebb.textamerica.com/?r=2603944
+http://morganwebb.textamerica.com/?r=2603944&_go=act.lc.head
+http://morganwebb.textamerica.com/details/?r=2603944
+http://moritzlaw.osu.edu/admissions/academics/requirements.html
+http://moritzlaw.osu.edu/lawjournal/rose.htm
+http://morningsentinel.mainetoday.com/news/local/1362398.shtml
+http://mortgage-x.com/general/indexes/libor.asp
+http://mortgage-x.com/library/loans.htm
+http://mortgage.mentor4inc.com/Recruiting-Staffing/Default.aspx
+http://mortgages.interest.com/content/refinance/refinance_qanda.asp
+http://moses.creighton.edu/JRS/2002/2002-r4.html
+http://mossback.org/
+http://mostlyglass.com/new_at_mostly_glass.htm
+http://motherdaughterrelations.com/soupstory.html
+http://motor.insurancenow.com/
+http://motorcycleaupairboy.com/interviews/1990/mozzer.htm
+http://motorcycleinfo.calsci.com/Tickets.html
+http://motoring.asia1.com.sg/cgi-bin/motorbb/ultimatebb.cgi?ubb=reply;f=7;t=001962
+http://motoring.asia1.com.sg/cgi-bin/motorbb/ultimatebb.cgi?ubb=reply;f=7;t=001998
+http://motoring.asiaone.com.sg/articles/O_20050524_002.html
+http://motoring.timesofmalta.com/article.php?id=655
+http://motorpsycho.fix.no/thisis/media/pulsinter5_01_eng.htm
+http://motortrend.com/future/concepts/112_0109futcruis/
+http://motortrend.com/roadtests/sedan/112_0407_first_kia/
+http://mountain-realty-guide.com/listings/GA/BlueRidge/102809-ga-blairsville-union-county-houses-homes-for-sale.htm
+http://mountain-realty-guide.com/listings/GA/BlueRidge/97978-ga-blairsville-private-new-mountain-view-cabin-for-sale.htm
+http://mousetrap-cars.com/distance_pics.htm
+http://movetocanada.blogware.com/blog/_archives/2004/11/23/189614.html
+http://movie-reviews.colossus.net/movies/b/beautiful_mind.html
+http://movie-reviews.colossus.net/movies/b/black_hawk.html
+http://movie-reviews.colossus.net/movies/b/bowling_columbine.html
+http://movie-reviews.colossus.net/movies/c/chocolat.html
+http://movie-reviews.colossus.net/movies/g/garden_state.html
+http://movie-reviews.colossus.net/movies/h/heavy.html
+http://movie-reviews.colossus.net/movies/p/psycho98.html
+http://movie-reviews.colossus.net/movies/s/shaft.html
+http://movie-reviews.colossus.net/movies/s/snow_falling.html
+http://movie-reviews.colossus.net/movies/t/total_recall.html
+http://movie-reviews.colossus.net/movies/w/whats_eating.html
+http://movieextras.ie/MovieExtras/ME/info/SiteFAQ.html
+http://moviepoopshoot.com/comics101/11.html
+http://movies.about.com/od/beyondthesea/a/beyondks121004_4.htm
+http://movies.about.com/od/sideways/a/sideth101204.htm
+http://movies.bizhat.com/review_god_only_knows.php
+http://movies.dcealumni.com/archives/2301-yash-raj-to-distribute-my-brother-nikhil/
+http://movies.go.com/marketplace/details?asin=B0007TKNIS&allreviews=true
+http://movies.go.com/moviesdynamic/intheaters
+http://movies.yahoo.com/mvc/drv?mid=1808436764
+http://movies.yahoo.com/shop?d=hc&id=1800020155&cf=biog&intl=us
+http://movies.yahoo.com/shop?d=hc&id=1800022021&cf=biog&intl=us
+http://movies.yahoo.com/shop?d=hv&cf=info&id=1808529211
+http://movies.yahoo.com/shop?d=hv&id=1808529211&cf=info&intl=us
+http://movies.yahoo.com/shop?id=1800025331&d=hv&cf=info
+http://movies2.nytimes.com/gst/movies/movie.html?v_id=129691
+http://movies2.nytimes.com/gst/movies/movie.html?v_id=283264
+http://moviesonline.ca/
+http://movietrak.dvds365.com/action/films~search/filter_star/Luther%20Adler/
+http://movietrak.dvds365.com/action/films~search/filter_star/Mary%20Kay%20Place/
+http://movietrak.dvds365.com/action/films~search/filter_star/Mary%20Steenburgen/
+http://movieweb.com/forums/viewtopic.php?t=1715&postdays=0&postorder=asc&start=15
+http://movieweb.com/forums/viewtopic.php?t=1715&start=15
+http://movieweb.com/movies/film.php?1346
+http://movieweb.com/movies/film.php?1812
+http://movieweb.com/movies/film.php?344
+http://movieweb.com/movies/film.php?588
+http://moving-car.ffind.servebeer.com/
+http://movingparts.net/index.php?cat=10
+http://mowabb.com/ai/archives/week_2004_04_18.html
+http://mp3.about.com/
+http://mp_pollett.tripod.com/rione01.htm
+http://mprofaca.cro.net/al_zarqawi.html
+http://mpt.net.nz/archive/2004/02/16/os-x
+http://mpt.net.nz/archive/2005/04/11/ubuntu
+http://mpws01.rsmi.com/Network/rsmmnet_pub.nsf/pages/strategicalliances?OpenDocument
+http://mrbeaks.typepad.com/for_no_good_reason/
+http://mrbeaks.typepad.com/for_no_good_reason/2005/01/
+http://mrbehi.blogs.com/i/2005/06/you_snooze_or_n.html
+http://mrblunt.com/forums/archive/index.php/t-68149.html
+http://mrbobhatesyou.blogspot.com/2005_03_01_mrbobhatesyou_archive.html
+http://mrdebt.phpnuke.org/article3.html
+http://mrgadget.com/flash/%22action.lasso?-database=mrgadget.fp5&-layout=data%20entry&-Search&-response=detail.lasso&ID=2003065
+http://mrlt.allrecipes.com/mr/17046.asp?lnkid=631
+http://mrmom.amaonline.com/information.htm
+http://mrsun.us/
+http://mrsun.us/2005/01/ascd.html
+http://mrsun.us/2005/03/mr-sun-citizen-journalist-starter-pack.html
+http://mrtg.planetmirror.com/pub/descrack/
+http://mrtmag.com/pubsafety/dispatch/radio_iafc_conference_hardly_2/
+http://msa.press.jhu.edu/faq.html
+http://msdn.microsoft.com/SQL/sqlmultidata/default.aspx?pull=/library/en-us/dnvbpj00/html/complex.asp
+http://msdn.microsoft.com/archive/en-us/dnarntpro00/html/wnp0095.asp
+http://msdn.microsoft.com/archive/en-us/dnarstone/html/stone04162001.asp
+http://msdn.microsoft.com/chats/transcripts/enterprise/comm_011905.aspx
+http://msdn.microsoft.com/chats/transcripts/mobileembedded/embedded_080703.aspx
+http://msdn.microsoft.com/coding4fun/gamedevelopment/beginning2/default.aspx
+http://msdn.microsoft.com/coding4fun/webcoder/musiclib/default.aspx
+http://msdn.microsoft.com/library/en-us/cpgenref/html/cpconAsynchronousProgrammingDesignPattern.asp
+http://msdn.microsoft.com/library/en-us/cpguide/html/cpconcreatingkeypairforuseincreatingstrongly-namedassembly.asp
+http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdrawing.asp
+http://msdn.microsoft.com/library/en-us/dnacc/html/atg_driverchain.asp
+http://msdn.microsoft.com/library/en-us/dnapg/html/apgapx01.asp
+http://msdn.microsoft.com/library/en-us/dndeepc/html/deep051099.asp
+http://msdn.microsoft.com/library/en-us/dndevio/html/msdn_pnpapp.asp
+http://msdn.microsoft.com/library/en-us/dndotnet/html/callcomcomp.asp
+http://msdn.microsoft.com/library/en-us/dngenlib/html/msdn_manamemo.asp
+http://msdn.microsoft.com/library/en-us/dnhess/html/hess071299.asp
+http://msdn.microsoft.com/library/en-us/dnmes2k/html/NewDevFeaturesE2K.asp
+http://msdn.microsoft.com/library/en-us/dnnetsec/html/THCMCh08.asp
+http://msdn.microsoft.com/library/en-us/dnpag/html/despublishsubscribe.asp
+http://msdn.microsoft.com/library/en-us/dnsmart01/html/sa01j1.asp
+http://msdn.microsoft.com/library/en-us/dnvbadev/html/implementingbinarytree.asp
+http://msdn.microsoft.com/library/en-us/dnvs600/html/HungaNotat.asp
+http://msdn.microsoft.com/library/en-us/dnvsent/html/vsent_soadover.asp
+http://msdn.microsoft.com/library/en-us/dnvsent/html/vsts-dev.asp
+http://msdn.microsoft.com/library/en-us/dnwebteam/html/webteam03052001.asp
+http://msdn.microsoft.com/library/en-us/dnwebteam/html/webteam10012002.asp
+http://msdn.microsoft.com/library/en-us/dnwui/html/msdn_subclas3.asp
+http://msdn.microsoft.com/library/en-us/odc_pb2003_ta/html/ODC_PB_MergeSortFilter.asp
+http://msdn.microsoft.com/library/en-us/odc_vsto2003_ta/html/odc_VSTExlWeb.asp
+http://msdn.microsoft.com/library/en-us/stg/stg/ilockbytes_stat.asp
+http://msdn.microsoft.com/library/en-us/vdbref/html/dvovrvisualdatabasetoolsglossary.asp
+http://msdn.microsoft.com/library/en-us/vsintro7/html/vxurffindreplacedialogboxess.asp
+http://msdn.microsoft.com/library/en-us/winsock/winsock/wsaasyncgetprotobynumber_2.asp
+http://msdn.microsoft.com/library/en-us/winsock/winsock/wsaasyncgetservbyname_2.asp
+http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardaccelerators/usingkeyboardaccelerators.asp
+http://msdn.microsoft.com/library/en-us/wmform95/htm/gettingthebestvideoseekingperformance.asp
+http://msdn.microsoft.com/library/en-us/wmisdk/wmi/iwbemservices_getobjectasync.asp
+http://msdn.microsoft.com/library/en-us/xmlsdk/html/xmconincreasingperformancebyusingthexsltemplateobject.asp
+http://msdn.microsoft.com/mobility/understanding/books/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/01/10/BizTalk/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/02/12/XMLSchemaImporting/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/03/09/MicrosoftOffice2003/
+http://msdn.microsoft.com/msdnmag/issues/04/05/visualc2005/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/04/06/NET/
+http://msdn.microsoft.com/msdnmag/issues/04/08/NETMatters/
+http://msdn.microsoft.com/msdnmag/issues/04/11/AttackSurface/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/04/12/ServiceStation/default.aspx
+http://msdn.microsoft.com/msdnmag/issues/05/02/CuttingEdge/default.aspx
+http://msdn.microsoft.com/msdntv/transcripts/20050414IndigoRTTranscript.aspx
+http://msdn.microsoft.com/msdntv/transcripts/20050531SQLServerCCTranscript.aspx
+http://msdn.microsoft.com/vbasic/support/vb6.aspx
+http://msdn.microsoft.com/vstudio/
+http://msdn.microsoft.com/vstudio/java/compare/webserviceperf/default.aspx
+http://msfrizzle.blogspot.com/
+http://msg.calsnet.arizona.edu/fcs/content.cfm?content=facing_challenges
+http://msl1.mit.edu/ESD10/old_block2_index.shtml
+http://msl1.mit.edu/furdlog/index.php?m=20050606
+http://msmvps.com/threlkeld/archive/2004/06/30/9333.aspx
+http://msn-cnet.com.com/4520-10165_7-5699466-1.html
+http://msn-cnet.com.com/4520-10165_7-5699466-1.html?part=msn-cnet&subj=re_5699466-1
+http://msn-cnet.com.com/4520-10602_1-5619858-1.html
+http://msn-cnet.com.com/Microsoft,+Feds+reach+a+deal/2100-1001_3-275317.html
+http://msn.match.com/msn/article.aspx?articleid=3990&articleSrc=5&lid=92
+http://msn.pcworld.com/news/article/0,aid,119357,00.asp
+http://msnbc.msn.com/Default.aspx?id=3449870&p1=0
+http://msnbc.msn.com/Default.aspx?id=3449870&p1=01%7C%7C%7C%7C001/
+http://msnbc.msn.com/ID/6869973/
+http://msnbc.msn.com/id/3080244/default.htm
+http://msnbc.msn.com/id/3225752/
+http://msnbc.msn.com/id/3449870/
+http://msnbc.msn.com/id/4917480/
+http://msnbc.msn.com/id/4999734/site/newsweek/
+http://msnbc.msn.com/id/5445086/
+http://msnbc.msn.com/id/5807600
+http://msnbc.msn.com/id/5900933/
+http://msnbc.msn.com/id/5946244/
+http://msnbc.msn.com/id/6088976/
+http://msnbc.msn.com/id/6346939/
+http://msnbc.msn.com/id/6382571/
+http://msnbc.msn.com/id/6667405/
+http://msnbc.msn.com/id/6676765/
+http://msnbc.msn.com/id/6707542/
+http://msnbc.msn.com/id/6803645/site/newsweek/
+http://msnbc.msn.com/id/6828810/
+http://msnbc.msn.com/id/6886612/
+http://msnbc.msn.com/id/6894643/
+http://msnbc.msn.com/id/6969478/
+http://msnbc.msn.com/id/7160264/site/newsweek/
+http://msnbc.msn.com/id/7276286/
+http://msnbc.msn.com/id/7306433/site/newsweek/
+http://msnbc.msn.com/id/7487935/
+http://msnbc.msn.com/id/7873141/
+http://msnbc.msn.com/id/7992747/
+http://msnbc.msn.com/id/8014670/
+http://msnbc.msn.com/id/8130648/
+http://msnbc.msn.com/id/8130676/
+http://msnbc.msn.com/id/8203257/
+http://msnbc.msn.com/id/8291478/
+http://msnbc.msn.com/id/8331750/
+http://msprozac.zoovy.com/category/collectibles/
+http://mstp.stanford.edu/structure.html
+http://msucares.com/poultry/management/poultry_care.html
+http://msucares.com/pubs/publications/p1557.htm
+http://msvnyc.blogspot.com/2004_05_01_msvnyc_archive.html
+http://msworld.riddlesoft.com/EES.php?s=951
+http://mt.hockeybird.com/archives/002233.html
+http://mt.middlebury.edu/middblogs/ganley/bgblogging/006557.html
+http://mtp.jpl.nasa.gov/notes/sat/sat.html
+http://mtp.jpl.nasa.gov/notes/software/Nomenclature%20and%20Abbreviations.html
+http://mtprof.msun.edu/Spr1997/TROUT-ST.html
+http://mts-ejhg.nature.com/cgi-bin/main.plex?form_type=display_auth_instructions
+http://mtsai.blogspot.com/2005/04/look-at-me.html
+http://mtsu32.mtsu.edu:11091/provision_iii-c.htm
+http://mtsu32.mtsu.edu:11416/information.htm
+http://mtvshop.mtv.com/product.aspx?loc=101&sku=40223627
+http://mtvshop.mtv.com/product.aspx?sku=63909280&loc=33656
+http://mu.ranter.net/theory/economy.html
+http://mua.org.au/war/
+http://muarchives.missouri.edu/c-rg22-s27.html
+http://muextension.missouri.edu/explore/miscpubs/mp0657.htm
+http://muextension.missouri.edu/explore/miscpubs/mp0659.htm
+http://muextension.missouri.edu/explore/regpubs/ncr475.htm
+http://muextension.missouri.edu/xplor/envqual/wq0303.htm
+http://muextension.missouri.edu/xplor/miscpubs/mp0657.htm
+http://multinationalmonitor.org/hyper/mm1094.html
+http://multinationalmonitor.org/hyper/mm1293.html
+http://multinationalmonitor.org/mm2000/00june/bank.html
+http://multinationalmonitor.org/mm2004/09012004/september04corp2.html
+http://mumbai.usconsulate.gov/wwwhwashnews2714.html
+http://muninn.net/blog/2005/06/a-little-history-outside-the-library.html
+http://muninn.net/blog/index.php
+http://muse.jhu.edu/journals/africa_today/v047/47.1brockman.html
+http://muse.jhu.edu/journals/american_indian_quarterly/v028/28.3johansen.html
+http://muse.jhu.edu/journals/american_journal_of_bioethics/v002/2.3whitehouse.html
+http://muse.jhu.edu/journals/american_quarterly/v049/49.3irr.html
+http://muse.jhu.edu/journals/american_quarterly/v052/52.2mechling.html
+http://muse.jhu.edu/journals/american_quarterly/v052/52.3linkon.html
+http://muse.jhu.edu/journals/american_speech/v075/75.4linn.html
+http://muse.jhu.edu/journals/american_speech/v076/76.2canada.html
+http://muse.jhu.edu/journals/asian_theatre_journal/v020/20.1su.html
+http://muse.jhu.edu/journals/biography/v025/25.1reed-danahay.html
+http://muse.jhu.edu/journals/brookings_trade_forum/v2002/2002.1park.html
+http://muse.jhu.edu/journals/buddhist-christian_studies/v023/23.1kaza.html
+http://muse.jhu.edu/journals/callaloo/v018/18.4de_almeida_pereira9.html
+http://muse.jhu.edu/journals/callaloo/v020/20.3gonzalez.html
+http://muse.jhu.edu/journals/callaloo/v025/25.1allen.html
+http://muse.jhu.edu/journals/chaucer_review/v034/34.4longsworth.html
+http://muse.jhu.edu/journals/civil_war_history/v047/47.1egnal.html
+http://muse.jhu.edu/journals/comparative_technology_transfer_and_society/v002/2.2lockemann.html
+http://muse.jhu.edu/journals/cultural_critique/v049/49.1favero.html
+http://muse.jhu.edu/journals/demography/v040/40.2mensch.html
+http://muse.jhu.edu/journals/eighteenth-century_studies/v032/32.1schechter.html
+http://muse.jhu.edu/journals/eighteenth-century_studies/v035/35.1kates.html
+http://muse.jhu.edu/journals/essays_in_medieval_studies/v021/21.1lower.html
+http://muse.jhu.edu/journals/henry_james_review/v017/17.2armstrong.html
+http://muse.jhu.edu/journals/human_biology/v075/75.2manfredini.html
+http://muse.jhu.edu/journals/international_security/v026/26.2rosecrance.html
+http://muse.jhu.edu/journals/israel_studies/v001/1.2levi_faur.html
+http://muse.jhu.edu/journals/israel_studies/v009/9.3karlinsky.html
+http://muse.jhu.edu/journals/journal_of_cold_war_studies/v006/6.2bernhard.html
+http://muse.jhu.edu/journals/journal_of_democracy/v008/8.1murshed.html
+http://muse.jhu.edu/journals/journal_of_general_education/v050/50.1lattuca.html
+http://muse.jhu.edu/journals/journal_of_lesbian_and_gay_studies/v009/9.1clare.html
+http://muse.jhu.edu/journals/journal_of_the_early_republic/v025/25.1roth.html
+http://muse.jhu.edu/journals/journal_of_the_history_of_ideas/v057/57.4fieser.html
+http://muse.jhu.edu/journals/journal_of_the_history_of_ideas/v063/63.3guyer.html
+http://muse.jhu.edu/journals/journal_of_world_history/v008/8.1karras.html
+http://muse.jhu.edu/journals/kritika/v004/4.1baron.html
+http://muse.jhu.edu/journals/lion_and_the_unicorn/v025/25.3logan.html
+http://muse.jhu.edu/journals/literature_and_medicine/v014/14.2caron.html
+http://muse.jhu.edu/journals/literature_and_medicine/v023/23.2rudnytsky.html
+http://muse.jhu.edu/journals/marvels_and_tales/v017/17.1mcgillis.html
+http://muse.jhu.edu/journals/missouri_review/v027/27.1babic.html
+http://muse.jhu.edu/journals/missouri_review/v027/27.3selgin.html
+http://muse.jhu.edu/journals/modernism-modernity/v011/11.2rainey.html
+http://muse.jhu.edu/journals/new_centennial_review/v003/3.3swami.html
+http://muse.jhu.edu/journals/new_literary_history/v035/35.2allen.html
+http://muse.jhu.edu/journals/nwsa_journal/v011/11.2stanovsky.html
+http://muse.jhu.edu/journals/nwsa_journal/v016/16.3specht.html
+http://muse.jhu.edu/journals/performing_arts_journal/v025/25.1attisani.html
+http://muse.jhu.edu/journals/performing_arts_journal/v025/25.2ebrahimian.html
+http://muse.jhu.edu/journals/performing_arts_journal/v027/27.2malina.html
+http://muse.jhu.edu/journals/perspectives_in_biology_and_medicine/v045/45.2montello.html
+http://muse.jhu.edu/journals/perspectives_in_biology_and_medicine/v048/48.1connelly.html
+http://muse.jhu.edu/journals/perspectives_on_science/v010/10.4steinle02.html
+http://muse.jhu.edu/journals/philosophy_and_literature/v029/29.1boyd.html
+http://muse.jhu.edu/journals/philosophy_of_music_education_review/v012/12.2ogawa.html
+http://muse.jhu.edu/journals/portal_libraries_and_the_academy/v001/1.2bazillion.html
+http://muse.jhu.edu/journals/public_culture/v014/14.3bach.html
+http://muse.jhu.edu/journals/radical_history_review/v082/82.1legassick.html
+http://muse.jhu.edu/journals/reviews_in_american_history/v023/23.4schatz.html
+http://muse.jhu.edu/journals/reviews_in_american_history/v024/24.2wrobel.html
+http://muse.jhu.edu/journals/reviews_in_american_history/v028/28.2oshinsky.html
+http://muse.jhu.edu/journals/sais_review/v021/21.1thomas.html
+http://muse.jhu.edu/journals/shofar/v021/21.2miles.html
+http://muse.jhu.edu/journals/sign_language_studies/v002/2.3morgan.html
+http://muse.jhu.edu/journals/social_forces/v080/80.2cotter.html
+http://muse.jhu.edu/journals/social_science_history/v026/26.1rossel.html
+http://muse.jhu.edu/journals/social_text/v018/18.4martin.html
+http://muse.jhu.edu/journals/social_text/v020/20.3butler.html
+http://muse.jhu.edu/journals/south_central_review/v021/21.2lehnhof.html
+http://muse.jhu.edu/journals/southern_literary_journal/v035/35.1mckee.html
+http://muse.jhu.edu/journals/technology_and_culture/v040/40.4bix.html
+http://muse.jhu.edu/journals/technology_and_culture/v041/41.2farnie.html
+http://muse.jhu.edu/journals/the_drama_review/v044/44.1senda.html
+http://muse.jhu.edu/journals/theatre_journal/v049/49.4pr_wasserstein.html
+http://muse.jhu.edu/journals/theatre_journal/v050/50.2pr_wallace.html
+http://muse.jhu.edu/journals/theatre_journal/v053/53.1erdman.html
+http://muse.jhu.edu/journals/theatre_journal/v055/55.3jacobs-huey.html
+http://muse.jhu.edu/journals/theatre_journal/v057/57.1graham-jones.html
+http://muse.jhu.edu/journals/washington_quarterly/v023/23.3gregg.html
+http://muse.jhu.edu/journals/world_politics/v050/50.1bienen.html
+http://muse.jhu.edu/journals/world_politics/v056/56.2anderson.html
+http://muse.jhu.edu/journals/world_politics/v056/56.3brooks.html
+http://museum.gov.ns.ca/museumweekend.htm
+http://museum.msu.edu/museum/msgc/jan04.html
+http://museum.nhm.uga.edu/gawildlife/gawwclassification.html
+http://museum.nhm.uga.edu/gawildlife/glossary/gawwglossary.html
+http://museum.nist.gov/exhibits/timeline/item.cfm?itemId=38
+http://museum.posco.co.kr/museum/docs/eng/newsReview/s91b5060010v.jsp?fd_idx=670&menuNum=4
+http://museumeclipse.org/about/faqs.html
+http://music.channel.aol.com/artist/artistbio.adp?_pgtyp=pdct&artistid=4576
+http://music.com/
+http://music.download.com/tranceauthority/3600-8263_32-100667994.html
+http://music.for-robots.com/
+http://music.ign.com/articles/087/087582p1.html
+http://music.iupui.edu/newsarchive.htm
+http://music.luther.edu/curriculum/courses/
+http://music.luther.edu/curriculum/major/
+http://music.msn.com/album/default.aspx?album=10197846&palbum=41657705&stab=3
+http://music.msn.com/album/default.aspx?album=10197846&palbum=41681413&stab=3
+http://music.msn.com/artist/?artist=16071414&partist=16071665
+http://music.msn.com/artist/?artist=16071414&partist=16072731
+http://music.msn.com/artist/?artist=16071414&partist=16090270
+http://music.msn.com/artist/?artist=16071575&partist=16071402
+http://music.msn.com/artist/?artist=16074062&palbum=10007579
+http://music.msn.com/artist/default.aspx?artist=16360935&stab=4
+http://music.msn.com/list/default.aspx?list=00000000-0201-0001-0000-000000000000&mpc=1&sbc=4&sdr=0
+http://music.yahoo.com/ar-258218-reviews--Nas
+http://music.yahoo.com/ar-289282-bio--Britney-Spears
+http://music.yahoo.com/read/interview/12043624
+http://music.yahoo.com/read/interview/18129661
+http://musicandcats.blogspot.com/2005_01_01_musicandcats_archive.html
+http://musicbeat.searchbeat.com/classical/philip-glass.htm
+http://musicbulletinboards.net/rhythm.htm
+http://musicformaniacs.blogspot.com/
+http://musicians.about.com/library/experts/bass_plus/bl_092402_walkinglines.htm
+http://musicians.about.com/library/lyrics/bllyrics3.htm
+http://musick.blogspot.com/
+http://musicmavericks.publicradio.org/features/essay_gann06.html
+http://musicthing.blogspot.com/2005/06/learn-to-play-guitar-like-superdork.html
+http://musicviews.blogspot.com/2004_01_01_musicviews_archive.html
+http://musil.blogspot.com/2005_05_29_musil_archive.html
+http://muskie.outdoorsfirst.com/articles/02.01.2005/714/Landmeier.and.Rusteberg.Rule.Shelbyville;.Win.2nd.PMTT/index.htm
+http://muslim-canada.org/brochure.htm
+http://muslim-canada.org/sex.htm
+http://mutualfunds.about.com/cs/retirement/a/millionaire.htm
+http://mutualfunds.about.com/od/educateyourself/a/fundmanager.htm
+http://muyil.smv.org/methodology.htm
+http://mva.state.md.us/OnlineServices/Docs/default.htm
+http://mvp.support.microsoft.com/default.aspx?scid=fh;EN-US;mvpins200412&style=flat
+http://mwhodges.home.att.net/education-c.htm
+http://mwhodges.home.att.net/education.htm
+http://mwhodges.home.att.net/new_96_report.htm
+http://mwhodges.home.att.net/reserves.htm
+http://mwhodges.home.att.net/summary-b.htm
+http://mwhodges.home.att.net/summary.htm
+http://mwp01.mwp.hawaii.edu/resources/wm6.htm
+http://mwp01.mwp.hawaii.edu/wm10.htm
+http://mxdj.sys-con.com/read/45623.htm
+http://mxdj.sys-con.com/read/45623_f.htm
+http://mxdj.sys-con.com/read/47583.htm
+http://my.athenet.net/~franklin/
+http://my.brandeis.edu/news/item?news_item_id=103466&show_release_date=1
+http://my.brandeis.edu/news/item?news_item_id=103690&show_release_date=1
+http://my.brandeis.edu/news/item?news_item_id=103855
+http://my.brandeis.edu/profiles/one-profile?profile_id=173
+http://my.core.com/~oldgrendel/spyware.htm
+http://my.dreamwiz.com/muguet51/What's_2_In%20defense_3%20The%20Holy%20Sprit.bak
+http://my.execpc.com/~regent/mfso.htm
+http://my.opera.com/angel292005/journal
+http://my.opera.com/community/dev/operashow/documentation/doc_stylesheets.html
+http://my.sunderland.ac.uk/web/services/hse/she_contents/f_5
+http://my.sunderland.ac.uk/web/services/hse/she_contents/f_5/
+http://my.sunderland.ac.uk/web/services/hse/she_contents/f_5/PageText
+http://my.voyager.net/~stargazer/starmap.html
+http://my.webmd.com/content/Article/72/81519.htm?printing=true
+http://my.webmd.com/content/Article/99/105124.htm?printing=true
+http://my.webmd.com/content/article/11/1671_50455
+http://my.webmd.com/content/article/18/1678_50885
+http://my.webmd.com/content/article/34/1728_90047.htm
+http://my.webmd.com/content/article/65/72756.htm?z=1668_00000_0000_f1_04
+http://my.webmd.com/content/article/72/81519.htm
+http://my.webmd.com/content/pages/16/98759
+http://my.webmd.com/content/pages/16/98759?printing=true
+http://my.webmd.com/hw/diet_and_nutrition/aa158966.asp?printing=true
+http://my.webmd.com/hw/health_guide_atoz/hw3681.asp
+http://my.webmd.com/hw/heart_disease/ue4688.asp
+http://my.webmd.com/hw/raising_a_family/nord976.asp
+http://myblog.de/showpage.php?blog=sadako&id=189956
+http://mycareer.com.au/jobs-for/customer-service-contact-centre.aspx
+http://mycareer.com.au/jobseeker/search/results.aspx?s=107&ag=2036726&pg=3
+http://mycareer.com.au/jobseeker/search/results.aspx?s=107&ag=2036726&pg=5
+http://mycareer.com.au/jobseeker/search/results.aspx?s=113&d=30&pub=7&pg=7
+http://myeurope.eun.org/eun.org2/eun/en/myEurope_News/sub_area.cfm?sa=2332
+http://myeurope.eun.org/ww/en/pub/myeurope/home/archives/practices_archive.htm
+http://myfloridalegal.com/newsrel.nsf/newsreleases/003110DCD3BA5C8E85256F4E0056B86C
+http://myhealth.chh.org/HealthyLiving/mindbody/sept04mindbodyfacingfear.htm
+http://myhero.com/myhero/hero.asp?hero=a_fleming
+http://myhome.elim.net/taekwondo/games/competition.html
+http://myillusion.net/itsumo/index.php?cat=32
+http://myitforum.techtarget.com/blog/rthrelkeld/
+http://mylittlekingdom.blogspot.com/2004/09/cub-soccer.html
+http://mylittlekingdom.blogspot.com/2004_09_01_mylittlekingdom_archive.html
+http://mylittlelifebythesea.blogspot.com/
+http://myliverpoolfc.org/rumours.htm
+http://myliverpoolfc.org/rumours0404.htm
+http://mymwly.blogspot.com/2005/05/mymwly-gets-some-swedish-press.html
+http://mynas.sitesell.com/
+http://myoss.bytebot.net/
+http://mypetjawa.mu.nu/
+http://mypetjawa.mu.nu/archives/047937.php
+http://mypetjawa.mu.nu/archives/063627.php
+http://mypetjawa.mu.nu/archives/064907.php
+http://myprofile.cos.com/banksd1
+http://myprofile.cos.com/botton
+http://myprofile.cos.com/kitchenk88
+http://mypropaganda.co.uk/article
+http://myschoolonline.com/site/0,1876,48624-196200-51-96003,00.html
+http://mysite.verizon.net/dlmadnes/sitebuildercontent/sitebuilderfiles/mabcmembershipappleal.htm
+http://mysite.verizon.net/justreed/irewatchnews.htm
+http://mysite.verizon.net/niteflytes/writings/xmasvillage.htm
+http://mysite.verizon.net/vze85s68/unionsq.htm
+http://mysociety.blogs.com/mysociety/2003/10/database_of_pri.html
+http://myss.sitesell.com/
+http://mystery-school.com/ANFTP-code.htm
+http://mystic.nazirene.org/reincarnation.htm
+http://myvoice.typepad.com/finelines/
+http://myweb.facstaff.wwu.edu/~riedesg/sysadmin1138/archive/2004_05_01_sysadmin.html
+http://myweb.lmu.edu/fjust/Docs/PBC_Interp1.htm
+http://myweb.lsbu.ac.uk/~teamcxx/esdt/esdtCswkReviewTask4.html
+http://myweb.tiscali.co.uk/erthworks/reichian2.htm
+http://myweb.tiscali.co.uk/market/history.htm
+http://myweb.unomaha.edu/~jreameszimmerman/Hephaistion/students.html
+http://mywebpage.netscape.com/GSMYCO/2003-Forays.HTM
+http://mywebpages.comcast.net/Deneb/Steps.htm
+http://mywebpages.comcast.net/bondono2/WebJokes/Joke0002.html
+http://mywebpages.comcast.net/dchappell/weather/wx.htm
+http://mywordsonly.blogspot.com/2005_04_03_mywordsonly_archive.html
+http://nabataea.net/who1.html
+http://nadabs.tripod.com/writing/
+http://nadc.nol.org/conflict_of_interest_laws_.htm
+http://naeblis.cx/rtomayko/
+http://nafe.com/calofeventsSept.php
+http://nafe.com/ef_fall.shtml
+http://naggum.no/lugm-time.html
+http://naggum.no/motivation.html
+http://naic.acf.hhs.gov/pubs/f_issues.cfm
+http://nala.blog-city.com/
+http://namibia.movers.com/international-movers/countryCity-moving.htm
+http://namta.com.tripod.com/namtacouk/id15.html
+http://nancysnatural.expage.com/id25.html
+http://nanebs.nan.usace.army.mil/ViewSolicitation.asp?SolicitationNumber=W912DS-05-B-0007&RegisterOption=True&ID=
+http://nanosft.com/walden/essays/wal8village.html
+http://napps.nwfusion.com/alliance/gaskin.html
+http://nar.oupjournals.org/cgi/content/full/32/suppl_2/W213
+http://narcosphere.narconews.com/story/2004/12/17/124459/55
+http://narmada.org/
+http://narpa.org/integrity.htm
+http://nasadaacs.eos.nasa.gov/articles/2005_malaria.html
+http://nasaexplores.com/show2_5_8a.php?id=03-053&gl=58
+http://nascar.about.com/cs/nascar101/a/getstarted.htm
+http://nascar.about.com/od/buschtracks/
+http://nascar.about.com/od/nextelcuptracks/
+http://nasw.org/const.htm
+http://nasw.org/users/Katwong/mocoherald/tea.html
+http://nasw.org/users/llamberg/larkowl.htm
+http://nat.uca.org.au/assembly2000/reports/c28-TGTMMC.html
+http://natewentbaka.ukepile.com/lyrics/letitout.htm
+http://nation.com.pk/daily/oct-2004/22/index6.php
+http://nation.ittefaq.com/artman/publish/article_15812.shtml
+http://national.clubindustryshow.com/
+http://national.unitedway.org/eway/OnlineAuctions/index.cfm
+http://national.unitedway.org/tsunamiresponse/
+http://nationalatlas.gov/wallmaps.html
+http://nationaldefense.ndia.org/issues/2001/Feb/Psyops_Units.htm
+http://nationaldefense.ndia.org/issues/2002/Jan/French_Firm.htm
+http://nationaldefense.ndia.org/issues/2002/Sep/Transportation_Policy.htm
+http://nationaldefense.ndia.org/issues/2003/Jan/UK_Defense.htm
+http://nationaldefense.ndia.org/issues/2003/Mar/Joint_Bases.htm
+http://nationalforum.com.au/the_domain/archives/currumbin2cook/000164.html
+http://nationalgeographic.com/ngm/0308/resources_cre.html
+http://nationalhogfarmer.com/mag/farming_producer_groups_ask/
+http://nationalhogfarmer.com/mag/farming_reproductive_biology/
+http://nationalreview.com/comment/comment-donnelly032703.asp
+http://nationalreview.com/comment/oppenheimer200501260747.asp
+http://nationalzoo.si.edu/Animals/AfricanSavanna/
+http://nationalzoo.si.edu/Animals/NorthAmerica/BaldEagleRefuge/LucyOnEagles.cfm
+http://nationalzoo.si.edu/Animals/OceanLiving/whataname.cfm
+http://nationalzoo.si.edu/ConservationAndScience/SpotlightOnVetMedicine/
+http://nationalzoo.si.edu/Publications/PressMaterials/Archive04.cfm
+http://nativetimes.com/index.asp?action=frontpage&txt_Section=NEWS&frontpagecategory=17&categoryname=Crime
+http://natsumemaya.terminus.net.au/shopping_mc.htm
+http://naturalhealthline.com/newsletter/1feb01/mccarron.htm
+http://naturalphysiques.blogspot.com/2005/05/new-style-of-writing-and-lot-of.html
+http://nature.ac.uk/browse/333.95099.html
+http://nature.ac.uk/browse/577.69.html
+http://nature.ac.uk/text/browse/333.95099.html
+http://nature.ac.uk/text/browse/577.69.html
+http://nature.berkeley.edu/csrd/technology/cvhtag/minutes32096berkeley.htm
+http://nature.org/wherewework/fieldguide/projectprofiles/ksi.html
+http://nature.org/wherewework/northamerica/states/arkansas/press/press1761.html
+http://natureinstitute.org/pub/ic/ic2/goldstein.htm
+http://natureklog.blogspot.com/
+http://naturenoted.blogspot.com/
+http://nautarch.tamu.edu/anth/sea/volumes.htm
+http://nauticalcharts.noaa.gov/csdl/ctp/metadata_vs.htm
+http://nauticalcharts.noaa.gov/nsd/cphistory.htm
+http://naval.tradeworlds.com/web_category_14644.html
+http://navdweb.spawar.navy.mil/holidays/04PrevAlc/document.asp
+http://nb.wsd.wednet.edu/big6/big6_resources.htm
+http://nbr.infometrics.co.nz/teachers-pay--flick-a-coin_105.html
+http://nc.easterseals.com/site/PageServer?pagename=NCDR_homepage
+http://ncam.wgbh.org/resources/talkingmenus/practices.html
+http://ncas.sawco.com/condon/text/case17.htm
+http://ncb.intnet.mu/audit/rep00/pmo.htm
+http://ncb.intnet.mu/ivtb/ft_hotel2.htm
+http://nccam.nih.gov/about/advisory/capcam/minutes/1999july.html
+http://nccam.nih.gov/about/advisory/capcam/minutes/2000sept.htm
+http://nccam.nih.gov/health/acupuncture/
+http://nccam.nih.gov/health/backgrounds/mindbody.htm
+http://nccam.nih.gov/health/stjohnswort/
+http://nccanch.acf.hhs.gov/pubs/otherpubs/il/execsum.cfm
+http://nccic.org/ccpartnerships/facts/fs4.htm
+http://ncehr.medical.org/english/communique/calndr_e.html
+http://nces.ed.gov/naal/resources/execsumm.asp
+http://nces.ed.gov/programs/digest/d95/lta.asp
+http://nces.ed.gov/programs/projections/ch_7.asp
+http://nces.ed.gov/pubs2005/tech_suite/part_2c.asp
+http://nces.ed.gov/pubs98/teaching9394/chapter2.asp
+http://nces.ed.gov/pubs98/tech/7.asp
+http://nces.ed.gov/pubs98/twelfth/chap4.asp
+http://nces.ed.gov/pubsearch/search.asp?searchcat=subjectindex&L1=42&L2=0
+http://nces.ed.gov/surveys/frss/publications/1999080/6.asp
+http://ncis.gov.uk/ukta/2003/threat05.asp
+http://ncqlp.org/certification/intern.html
+http://ncronline.org/NCR_Online/archives2/2005a/031105/031105s.htm
+http://ncronline.org/NCR_Online/archives2/2005b/042905/042905i.php
+http://ncronline.org/NCR_Online/archives2/2005b/061705/061705z.htm
+http://ncrve.berkeley.edu/AllInOne/MDS-1047.html
+http://ncrve.berkeley.edu/ST1.1/NCPQVEStandards.html
+http://ncrve.berkeley.edu/ST2.1/NCPQStandards.html
+http://nctimes.com/
+http://ne.essortment.com/birdsshelter_rjmr.htm
+http://neaap.ncat.org/national/sept03-nn.htm
+http://nealpollack.com/archives/2005/05/
+http://nearsf.astate.edu/Junior%20Academy.htm
+http://neasimone.com/bkexcerpt.html
+http://nebraska.uscity.net/Tools/Power/
+http://ned.ucam.org/~sdh31/misc/destroy.html
+http://nedv.net/kids/museums.html
+http://neebelung.blogspot.com/
+http://nefac.net/node/1416
+http://nefertiti.iwebland.com/funerary_practices/judgment.htm
+http://nefertiti.iwebland.com/people/citizens.htm
+http://nefertiti.iwebland.com/timelines/topics/workrelations.htm
+http://negroplease.typepad.com/my_weblog/
+http://negroplease.typepad.com/my_weblog/2003/07/where_is_the_lo_1.html
+http://negroplease.typepad.com/my_weblog/2003/09/
+http://negroplease.typepad.com/my_weblog/2005/01/52_books_in_52_.html
+http://nehemiah.gospelcom.net/badday.htm
+http://nehemiah.gospelcom.net/kgwxchap.htm
+http://nehemiah.gospelcom.net/playing.htm
+http://nehemiah.gospelcom.net/suggest3.htm
+http://neic.usgs.gov/neis/eq_depot/usa/1886_09_01.html
+http://neighbors.columbia.edu/aboutus/aboutUsSearchResults.php?projectID=1000032&sectionName=campusplanning
+http://neighbors.columbia.edu/general/faq.php?rNavID=5.0&faqID=1000013&sectionName=campusplanning
+http://neighbourhood.statistics.gov.uk/ShowMetaData.asp?tn=Product&id=9502
+http://nelc.osu.edu/courses/Persian.htm
+http://neo.jpl.nasa.gov/risk/doc/sentry_faq.html
+http://neon.polkaroo.net/~mhoye/blarg/archives/2005_05.php
+http://neowin.net/
+http://neowin.net/comments.php?id=23683&category=main
+http://neptune.spacebears.com/cars/stories/oil-life.html
+http://net-burst.net/book/c13.htm
+http://netaloid.com/index.php/archives/category/science/
+http://netlist.co.nz/gardens/RoseGarden/WinterCare.htm
+http://netmedia.co.uk/pages/halls-booking-system.htm
+http://netrn.net/spywareblog/archives/2004/08/27/user-reports-damage-done-by-adwarespy-false-positives/
+http://netscape.bhg.com/bhg/story.jhtml?storyid=/templatedata/bhg/story/data/treesshrubsqa_02242004.xml&catref=bcat12&page=2
+http://netscape.lhj.com/bhg/story.jhtml?storyid=/templatedata/bhg/story/data/treesshrubsqa_02242004.xml&catref=bcat12&page=2
+http://netsquirrel.com/roadmap96/map20.html
+http://netti.nic.fi/~bcassidy/moosehunting.html
+http://netwinsite.com/dmailweb/cwm_user.htm
+http://networkingpipeline.com/57701421
+http://neuag.gn.apc.org/archive/RestLink.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum108/HTML/006388.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum129/HTML/000129.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum152/HTML/000142.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum51/HTML/001510.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum82/HTML/000103.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum82/HTML/000520.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum97/HTML/000014.html
+http://neuro-mancer.mgh.harvard.edu/ubb/Forum99/HTML/005902.html
+http://neuro-www.mgh.harvard.edu/forum/SpeechDisordersF/8.24.982.19PMHelpConfused.2yro
+http://neuro-www.mgh.harvard.edu/forum_2/OCDF/7.16.995.07PMSkin-Picking.html
+http://neuro.med.harvard.edu/site/dh/b40.htm
+http://neverdream.com/ArchiveList/092603.html
+http://new-parents.adoption.com/
+http://new.albanywifi.com/
+http://new.channel5belize.com/index.php
+http://new.theleopard.org/html/rules.php
+http://newark.rutgers.edu/~hbf/menhaden.htm
+http://newbieclub.com/efncopy/
+http://newdeal.feri.org/power/pwr1-07.htm
+http://newdeal.feri.org/wallace/haw13.htm
+http://newflux.blogspot.com/
+http://newmedia.umaine.edu/stillwater/
+http://newmexiken.com/archives/issues_of_the_day/index.php
+http://newmusicbox.org/article.nmbx?id=4261
+http://newpaper.asia1.com.sg/learning/story/0,4136,89905,00.html
+http://newpaper.asia1.com.sg/news/story/0,4136,89283,00.html
+http://newpaper.asia1.com.sg/news/story/0,4136,90538,00.html
+http://news-info.wustl.edu/cat/page/normal/135.html
+http://news-info.wustl.edu/feature/1999/JuneJuly99-drivers.html
+http://news-info.wustl.edu/group/page/normal/100.html
+http://news-info.wustl.edu/group/page/normal/7.html?s=pages&n=51
+http://news-info.wustl.edu/news/page/normal/575.html
+http://news-service.stanford.edu/news/1997/november12/teenmusic.html
+http://news-service.stanford.edu/news/1997/november5/gradcrunch.html
+http://news-service.stanford.edu/news/2001/november14/ammerman.html
+http://news-service.stanford.edu/news/2001/november28/shenoy-1128.html
+http://news-service.stanford.edu/news/february14/minutes-214.html
+http://news-service.stanford.edu/news/january31/minutes-131.html
+http://news-service.stanford.edu/news/october4/minutes-104.html
+http://news.adventist.org/data/2001/03/0988232042/index.html.en
+http://news.adventist.org/data/2005/01/1108493577/index.html.en
+http://news.amnesty.org/index/ENGMDE14310320042004
+http://news.amnesty.org/mav/index/ENGACT770342004
+http://news.bbc.co.uk/1/hi/business/1640869.stm
+http://news.bbc.co.uk/1/hi/business/1935546.stm
+http://news.bbc.co.uk/1/hi/business/2088090.stm
+http://news.bbc.co.uk/1/hi/business/3169611.stm
+http://news.bbc.co.uk/1/hi/business/3516041.stm
+http://news.bbc.co.uk/1/hi/business/3701070.stm
+http://news.bbc.co.uk/1/hi/business/3703496.stm
+http://news.bbc.co.uk/1/hi/business/3721644.stm
+http://news.bbc.co.uk/1/hi/business/3724357.stm
+http://news.bbc.co.uk/1/hi/business/3736964.stm
+http://news.bbc.co.uk/1/hi/business/3750745.stm
+http://news.bbc.co.uk/1/hi/business/3953907.stm
+http://news.bbc.co.uk/1/hi/business/4076106.stm
+http://news.bbc.co.uk/1/hi/business/4195241.stm
+http://news.bbc.co.uk/1/hi/business/4223181.stm
+http://news.bbc.co.uk/1/hi/business/4353503.stm
+http://news.bbc.co.uk/1/hi/business/4367197.stm
+http://news.bbc.co.uk/1/hi/business/4480897.stm
+http://news.bbc.co.uk/1/hi/business/4485361.stm
+http://news.bbc.co.uk/1/hi/business/4542913.stm
+http://news.bbc.co.uk/1/hi/business/4545123.stm
+http://news.bbc.co.uk/1/hi/business/4553933.stm
+http://news.bbc.co.uk/1/hi/business/4598789.stm
+http://news.bbc.co.uk/1/hi/business/4602815.stm
+http://news.bbc.co.uk/1/hi/education/1689966.stm
+http://news.bbc.co.uk/1/hi/education/1960469.stm
+http://news.bbc.co.uk/1/hi/education/1960475.stm
+http://news.bbc.co.uk/1/hi/education/2479189.stm
+http://news.bbc.co.uk/1/hi/education/2601831.stm
+http://news.bbc.co.uk/1/hi/education/2794289.stm
+http://news.bbc.co.uk/1/hi/education/3645278.stm
+http://news.bbc.co.uk/1/hi/education/4100936.stm
+http://news.bbc.co.uk/1/hi/education/4117997.stm
+http://news.bbc.co.uk/1/hi/education/4258011.stm
+http://news.bbc.co.uk/1/hi/education/4291459.stm
+http://news.bbc.co.uk/1/hi/education/655551.stm
+http://news.bbc.co.uk/1/hi/england/4104096.stm
+http://news.bbc.co.uk/1/hi/england/gloucestershire/4334365.stm
+http://news.bbc.co.uk/1/hi/england/london/3199594.stm
+http://news.bbc.co.uk/1/hi/england/nottinghamshire/4091178.stm
+http://news.bbc.co.uk/1/hi/england/oxfordshire/3435713.stm
+http://news.bbc.co.uk/1/hi/entertainment/arts/3550924.stm
+http://news.bbc.co.uk/1/hi/entertainment/film/4510703.stm
+http://news.bbc.co.uk/1/hi/entertainment/film/4529451.stm
+http://news.bbc.co.uk/1/hi/entertainment/film/4547707.stm
+http://news.bbc.co.uk/1/hi/entertainment/music/2220117.stm
+http://news.bbc.co.uk/1/hi/entertainment/music/3917949.stm
+http://news.bbc.co.uk/1/hi/entertainment/reviews/1866279.stm
+http://news.bbc.co.uk/1/hi/entertainment/tv_and_radio/2157275.stm
+http://news.bbc.co.uk/1/hi/entertainment/tv_and_radio/4102712.stm
+http://news.bbc.co.uk/1/hi/health/2703529.stm
+http://news.bbc.co.uk/1/hi/health/2972471.stm
+http://news.bbc.co.uk/1/hi/health/3608931.stm
+http://news.bbc.co.uk/1/hi/health/4115506.stm
+http://news.bbc.co.uk/1/hi/health/4203625.stm
+http://news.bbc.co.uk/1/hi/health/4232009.stm
+http://news.bbc.co.uk/1/hi/help/rss/default.stm
+http://news.bbc.co.uk/1/hi/in_depth/education/2003/he_overview/2685753.stm
+http://news.bbc.co.uk/1/hi/magazine/4138095.stm
+http://news.bbc.co.uk/1/hi/magazine/4149835.stm
+http://news.bbc.co.uk/1/hi/magazine/4617315.stm
+http://news.bbc.co.uk/1/hi/northern_ireland/2888463.stm
+http://news.bbc.co.uk/1/hi/northern_ireland/4122703.stm
+http://news.bbc.co.uk/1/hi/northern_ireland/4191453.stm
+http://news.bbc.co.uk/1/hi/northern_ireland/4282073.stm
+http://news.bbc.co.uk/1/hi/northern_ireland/4577529.stm
+http://news.bbc.co.uk/1/hi/programmes/breakfast_with_frost/2695903.stm
+http://news.bbc.co.uk/1/hi/programmes/breakfast_with_frost/3990069.stm
+http://news.bbc.co.uk/1/hi/programmes/correspondent/2372457.stm
+http://news.bbc.co.uk/1/hi/programmes/crossing_continents/europe/392324.stm
+http://news.bbc.co.uk/1/hi/programmes/crossing_continents/europe/556927.stm
+http://news.bbc.co.uk/1/hi/programmes/inside_money/3151685.stm
+http://news.bbc.co.uk/1/hi/programmes/the_westminster_hour/3018343.stm
+http://news.bbc.co.uk/1/hi/sci/tech/1740879.stm
+http://news.bbc.co.uk/1/hi/sci/tech/2251386.stm
+http://news.bbc.co.uk/1/hi/sci/tech/2373303.stm
+http://news.bbc.co.uk/1/hi/sci/tech/2764039.stm
+http://news.bbc.co.uk/1/hi/sci/tech/2784227.stm
+http://news.bbc.co.uk/1/hi/sci/tech/3535272.stm
+http://news.bbc.co.uk/1/hi/sci/tech/3997249.stm
+http://news.bbc.co.uk/1/hi/sci/tech/4123826.stm
+http://news.bbc.co.uk/1/hi/sci/tech/4362505.stm
+http://news.bbc.co.uk/1/hi/sci/tech/4563499.stm
+http://news.bbc.co.uk/1/hi/sci/tech/4564477.stm
+http://news.bbc.co.uk/1/hi/sci/tech/864777.stm
+http://news.bbc.co.uk/1/hi/scotland/2555753.stm
+http://news.bbc.co.uk/1/hi/scotland/3685470.stm
+http://news.bbc.co.uk/1/hi/scotland/4111718.stm
+http://news.bbc.co.uk/1/hi/scotland/4287039.stm
+http://news.bbc.co.uk/1/hi/scotland/4361079.stm
+http://news.bbc.co.uk/1/hi/scotland/4483663.stm
+http://news.bbc.co.uk/1/hi/scotland/4541793.stm
+http://news.bbc.co.uk/1/hi/talking_point/2290990.stm
+http://news.bbc.co.uk/1/hi/talking_point/2520961.stm
+http://news.bbc.co.uk/1/hi/talking_point/2729161.stm
+http://news.bbc.co.uk/1/hi/talking_point/2771713.stm
+http://news.bbc.co.uk/1/hi/talking_point/3248715.stm
+http://news.bbc.co.uk/1/hi/talking_point/3583864.stm
+http://news.bbc.co.uk/1/hi/talking_point/3681710.stm
+http://news.bbc.co.uk/1/hi/talking_point/3971429.stm
+http://news.bbc.co.uk/1/hi/talking_point/4041629.stm
+http://news.bbc.co.uk/1/hi/talking_point/4080120.stm
+http://news.bbc.co.uk/1/hi/talking_point/4088590.stm
+http://news.bbc.co.uk/1/hi/talking_point/4095252.stm
+http://news.bbc.co.uk/1/hi/talking_point/4118222.stm
+http://news.bbc.co.uk/1/hi/talking_point/4154385.stm
+http://news.bbc.co.uk/1/hi/talking_point/4235767.stm
+http://news.bbc.co.uk/1/hi/talking_point/4239401.stm
+http://news.bbc.co.uk/1/hi/talking_point/4308369.stm
+http://news.bbc.co.uk/1/hi/talking_point/4436425.stm
+http://news.bbc.co.uk/1/hi/talking_point/4487373.stm
+http://news.bbc.co.uk/1/hi/talking_point/4493769.stm
+http://news.bbc.co.uk/1/hi/talking_point/4602371.stm
+http://news.bbc.co.uk/1/hi/talking_point/4606267.stm
+http://news.bbc.co.uk/1/hi/talking_point/4632159.stm
+http://news.bbc.co.uk/1/hi/talking_point/forum/1960582.stm
+http://news.bbc.co.uk/1/hi/talking_point/forum/2754183.stm
+http://news.bbc.co.uk/1/hi/technology/2621745.stm
+http://news.bbc.co.uk/1/hi/technology/3392733.stm
+http://news.bbc.co.uk/1/hi/technology/3727692.stm
+http://news.bbc.co.uk/1/hi/technology/4101325.stm
+http://news.bbc.co.uk/1/hi/technology/4148473.stm
+http://news.bbc.co.uk/1/hi/technology/4265407.stm
+http://news.bbc.co.uk/1/hi/technology/4431893.stm
+http://news.bbc.co.uk/1/hi/technology/4474143.stm
+http://news.bbc.co.uk/1/hi/technology/4586525.stm
+http://news.bbc.co.uk/1/hi/technology/4607449.stm
+http://news.bbc.co.uk/1/hi/uk/1193810.stm
+http://news.bbc.co.uk/1/hi/uk/1443324.stm
+http://news.bbc.co.uk/1/hi/uk/1873419.stm
+http://news.bbc.co.uk/1/hi/uk/2019180.stm
+http://news.bbc.co.uk/1/hi/uk/2538613.stm
+http://news.bbc.co.uk/1/hi/uk/2710257.stm
+http://news.bbc.co.uk/1/hi/uk/2828945.stm
+http://news.bbc.co.uk/1/hi/uk/3646890.stm
+http://news.bbc.co.uk/1/hi/uk/3915639.stm
+http://news.bbc.co.uk/1/hi/uk/4037873.stm
+http://news.bbc.co.uk/1/hi/uk/4054421.stm
+http://news.bbc.co.uk/1/hi/uk/4083260.stm
+http://news.bbc.co.uk/1/hi/uk/4133987.stm
+http://news.bbc.co.uk/1/hi/uk/4327225.stm
+http://news.bbc.co.uk/1/hi/uk/4412347.stm
+http://news.bbc.co.uk/1/hi/uk_politics/2518877.stm
+http://news.bbc.co.uk/1/hi/uk_politics/3749548.stm
+http://news.bbc.co.uk/1/hi/uk_politics/4026019.stm
+http://news.bbc.co.uk/1/hi/uk_politics/4578889.stm
+http://news.bbc.co.uk/1/hi/uk_politics/4602515.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/frontpage/4409935.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/frontpage/4449829.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/frontpage/4476847.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/frontpage/4523415.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/frontpage/4523689.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/have_your_say/4519517.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/issues/4372135.stm
+http://news.bbc.co.uk/1/hi/uk_politics/vote_2005/wales/4523247.stm
+http://news.bbc.co.uk/1/hi/wales/1985931.stm
+http://news.bbc.co.uk/1/hi/wales/2290189.stm
+http://news.bbc.co.uk/1/hi/wales/2987177.stm
+http://news.bbc.co.uk/1/hi/wales/3488440.stm
+http://news.bbc.co.uk/1/hi/wales/3853127.stm
+http://news.bbc.co.uk/1/hi/wales/north_west/4071414.stm
+http://news.bbc.co.uk/1/hi/wales/north_west/4072820.stm
+http://news.bbc.co.uk/1/hi/wales/north_west/4117942.stm
+http://news.bbc.co.uk/1/hi/world/africa/2896793.stm
+http://news.bbc.co.uk/1/hi/world/africa/3679706.stm
+http://news.bbc.co.uk/1/hi/world/africa/4020259.stm
+http://news.bbc.co.uk/1/hi/world/africa/4035701.stm
+http://news.bbc.co.uk/1/hi/world/africa/4073465.stm
+http://news.bbc.co.uk/1/hi/world/africa/4604215.stm
+http://news.bbc.co.uk/1/hi/world/africa/4637069.stm
+http://news.bbc.co.uk/1/hi/world/americas/3523283.stm
+http://news.bbc.co.uk/1/hi/world/americas/3720724.stm
+http://news.bbc.co.uk/1/hi/world/americas/4084996.stm
+http://news.bbc.co.uk/1/hi/world/americas/4392253.stm
+http://news.bbc.co.uk/1/hi/world/americas/4450941.stm
+http://news.bbc.co.uk/1/hi/world/asia-pacific/2989479.stm
+http://news.bbc.co.uk/1/hi/world/europe/2289714.stm
+http://news.bbc.co.uk/1/hi/world/europe/3954327.stm
+http://news.bbc.co.uk/1/hi/world/europe/4092854.stm
+http://news.bbc.co.uk/1/hi/world/europe/4093966.stm
+http://news.bbc.co.uk/1/hi/world/europe/4428149.stm
+http://news.bbc.co.uk/1/hi/world/europe/4552937.stm
+http://news.bbc.co.uk/1/hi/world/europe/4592243.stm
+http://news.bbc.co.uk/1/hi/world/middle_east/3628069.stm
+http://news.bbc.co.uk/1/hi/world/middle_east/4082540.stm
+http://news.bbc.co.uk/1/hi/world/middle_east/4367897.stm
+http://news.bbc.co.uk/1/hi/world/middle_east/4547195.stm
+http://news.bbc.co.uk/1/hi/world/middle_east/737483.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/1735912.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/3014674.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/3995007.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/4087470.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/4182151.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/4192569.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/4566091.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/4572657.stm
+http://news.bbc.co.uk/1/hi/world/south_asia/964914.stm
+http://news.bbc.co.uk/1/low/business/3701070.stm
+http://news.bbc.co.uk/1/low/talking_point/2771713.stm
+http://news.bbc.co.uk/1/low/talking_point/forum/2750107.stm
+http://news.bbc.co.uk/1/low/uk_politics/vote_2005/issues/4372135.stm
+http://news.bbc.co.uk/1/low/uk_politics/vote_2005/wales/4523247.stm
+http://news.bbc.co.uk/1/low/world/south_asia/4470367.stm
+http://news.bbc.co.uk/1/northern_ireland/3604338.stm
+http://news.bbc.co.uk/1/shared/spl/hi/newswatch/online_stats/html/latest.stm
+http://news.bbc.co.uk/2/hi/africa/2756961.stm
+http://news.bbc.co.uk/2/hi/africa/2896793.stm
+http://news.bbc.co.uk/2/hi/africa/4087158.stm
+http://news.bbc.co.uk/2/hi/africa/4096706.stm
+http://news.bbc.co.uk/2/hi/africa/4191885.stm
+http://news.bbc.co.uk/2/hi/africa/4604215.stm
+http://news.bbc.co.uk/2/hi/africa/4637069.stm
+http://news.bbc.co.uk/2/hi/americas/2638437.stm
+http://news.bbc.co.uk/2/hi/americas/3775329.stm
+http://news.bbc.co.uk/2/hi/americas/4075252.stm
+http://news.bbc.co.uk/2/hi/americas/4339511.stm
+http://news.bbc.co.uk/2/hi/americas/4439053.stm
+http://news.bbc.co.uk/2/hi/asia-pacific/4157121.stm
+http://news.bbc.co.uk/2/hi/business/1526604.stm
+http://news.bbc.co.uk/2/hi/business/3440487.stm
+http://news.bbc.co.uk/2/hi/business/3630986.stm
+http://news.bbc.co.uk/2/hi/business/4167633.stm
+http://news.bbc.co.uk/2/hi/business/4367197.stm
+http://news.bbc.co.uk/2/hi/business/4388349.stm
+http://news.bbc.co.uk/2/hi/business/4532617.stm
+http://news.bbc.co.uk/2/hi/business/4602325.stm
+http://news.bbc.co.uk/2/hi/business/4602815.stm
+http://news.bbc.co.uk/2/hi/entertainment/4095074.stm
+http://news.bbc.co.uk/2/hi/entertainment/4489271.stm
+http://news.bbc.co.uk/2/hi/europe/2006507.stm
+http://news.bbc.co.uk/2/hi/europe/3367495.stm
+http://news.bbc.co.uk/2/hi/europe/4592243.stm
+http://news.bbc.co.uk/2/hi/health/2905665.stm
+http://news.bbc.co.uk/2/hi/health/3735897.stm
+http://news.bbc.co.uk/2/hi/health/4088824.stm
+http://news.bbc.co.uk/2/hi/health/4203625.stm
+http://news.bbc.co.uk/2/hi/health/4396387.stm
+http://news.bbc.co.uk/2/hi/middle_east/2871775.stm
+http://news.bbc.co.uk/2/hi/middle_east/4395525.stm
+http://news.bbc.co.uk/2/hi/middle_east/4400801.stm
+http://news.bbc.co.uk/2/hi/programmes/newsnight/3052726.stm
+http://news.bbc.co.uk/2/hi/science/nature/2784227.stm
+http://news.bbc.co.uk/2/hi/science/nature/3662928.stm
+http://news.bbc.co.uk/2/hi/science/nature/4084058.stm
+http://news.bbc.co.uk/2/hi/science/nature/4095360.stm
+http://news.bbc.co.uk/2/hi/science/nature/4097258.stm
+http://news.bbc.co.uk/2/hi/science/nature/4258417.stm
+http://news.bbc.co.uk/2/hi/science/nature/4362505.stm
+http://news.bbc.co.uk/2/hi/science/nature/4384813.stm
+http://news.bbc.co.uk/2/hi/south_asia/1735912.stm
+http://news.bbc.co.uk/2/hi/south_asia/3014674.stm
+http://news.bbc.co.uk/2/hi/south_asia/3995007.stm
+http://news.bbc.co.uk/2/hi/south_asia/4103554.stm
+http://news.bbc.co.uk/2/hi/south_asia/4192569.stm
+http://news.bbc.co.uk/2/hi/south_asia/4470367.stm
+http://news.bbc.co.uk/2/hi/south_asia/4572657.stm
+http://news.bbc.co.uk/2/hi/talking_point/2570613.stm
+http://news.bbc.co.uk/2/hi/talking_point/3248715.stm
+http://news.bbc.co.uk/2/hi/talking_point/4080120.stm
+http://news.bbc.co.uk/2/hi/talking_point/4269753.stm
+http://news.bbc.co.uk/2/hi/talking_point/4632159.stm
+http://news.bbc.co.uk/2/hi/technology/2702889.stm
+http://news.bbc.co.uk/2/hi/technology/4079818.stm
+http://news.bbc.co.uk/2/hi/technology/4088702.stm
+http://news.bbc.co.uk/2/hi/technology/4099802.stm
+http://news.bbc.co.uk/2/hi/technology/4327067.stm
+http://news.bbc.co.uk/2/hi/technology/4472219.stm
+http://news.bbc.co.uk/2/hi/technology/4474143.stm
+http://news.bbc.co.uk/2/hi/technology/4514489.stm
+http://news.bbc.co.uk/2/hi/technology/4540595.stm
+http://news.bbc.co.uk/2/hi/uk_news/2538613.stm
+http://news.bbc.co.uk/2/hi/uk_news/2621581.stm
+http://news.bbc.co.uk/2/hi/uk_news/3383589.stm
+http://news.bbc.co.uk/2/hi/uk_news/3448713.stm
+http://news.bbc.co.uk/2/hi/uk_news/3651482.stm
+http://news.bbc.co.uk/2/hi/uk_news/4412347.stm
+http://news.bbc.co.uk/2/hi/uk_news/education/2053475.stm
+http://news.bbc.co.uk/2/hi/uk_news/england/4104096.stm
+http://news.bbc.co.uk/2/hi/uk_news/england/kent/3619250.stm
+http://news.bbc.co.uk/2/hi/uk_news/england/oxfordshire/3435713.stm
+http://news.bbc.co.uk/2/hi/uk_news/magazine/4149835.stm
+http://news.bbc.co.uk/2/hi/uk_news/magazine/4587629.stm
+http://news.bbc.co.uk/2/hi/uk_news/northern_ireland/3886411.stm
+http://news.bbc.co.uk/2/hi/uk_news/northern_ireland/4217545.stm
+http://news.bbc.co.uk/2/hi/uk_news/politics/vote_2005/frontpage/4449829.stm
+http://news.bbc.co.uk/2/hi/uk_news/politics/vote_2005/frontpage/4476847.stm
+http://news.bbc.co.uk/2/hi/uk_news/politics/vote_2005/have_your_say/4519517.stm
+http://news.bbc.co.uk/2/hi/uk_news/scotland/2226085.stm
+http://news.bbc.co.uk/2/hi/uk_news/scotland/4317469.stm
+http://news.bbc.co.uk/2/hi/uk_news/scotland/4341913.stm
+http://news.bbc.co.uk/2/hi/uk_news/scotland/4635771.stm
+http://news.bbc.co.uk/2/hi/uk_news/wales/2290189.stm
+http://news.bbc.co.uk/2/hi/uk_news/wales/4107949.stm
+http://news.bbc.co.uk/2/hi/uk_news/wales/north_west/4117942.stm
+http://news.bbc.co.uk/2/low/south_asia/4470367.stm
+http://news.bbc.co.uk/2/low/talking_point/2570613.stm
+http://news.bbc.co.uk/2/low/uk_news/politics/1136223.stm
+http://news.bbc.co.uk/cbbcnews/hi/newsid_4080000/newsid_4081100/4081170.stm
+http://news.bbc.co.uk/cbbcnews/hi/newsid_4580000/newsid_4583400/4583407.stm
+http://news.bbc.co.uk/cbbcnews/hi/newsid_4600000/newsid_4605800/4605873.stm
+http://news.bbc.co.uk/go/click/rss/0.91/public/-/1/hi/wales/4107949.stm
+http://news.bbc.co.uk/go/click/rss/0.91/public/-/sport2/hi/other_sports/horse_racing/4197427.stm
+http://news.bbc.co.uk/go/click/rss/1.0/-/1/hi/northern_ireland/4217545.stm
+http://news.bbc.co.uk/go/click/rss/1.0/-/1/hi/uk/4106230.stm
+http://news.bbc.co.uk/go/click/rss/1.0/-/2/hi/africa/4087158.stm
+http://news.bbc.co.uk/go/click/rss/1.0/-/2/hi/talking_point/4602371.stm
+http://news.bbc.co.uk/go/em/-/1/hi/uk_politics/3725380.stm
+http://news.bbc.co.uk/go/rss/-/1/hi/scotland/4545299.stm
+http://news.bbc.co.uk/hi/english/business/newsid_653000/653813.stm
+http://news.bbc.co.uk/hi/english/education/specials/unions99/newsid_315000/315200.stm
+http://news.bbc.co.uk/hi/english/entertainment/new_media/newsid_1866000/1866552.stm
+http://news.bbc.co.uk/hi/english/entertainment/newsid_651000/651057.stm
+http://news.bbc.co.uk/hi/english/health/newsid_1023000/1023366.stm
+http://news.bbc.co.uk/hi/english/health/newsid_1144000/1144872.stm
+http://news.bbc.co.uk/hi/english/health/newsid_1441000/1441898.stm
+http://news.bbc.co.uk/hi/english/health/newsid_1738000/1738487.stm
+http://news.bbc.co.uk/hi/english/health/newsid_771000/771324.stm
+http://news.bbc.co.uk/hi/english/in_depth/northern_ireland/2000/bloody_sunday_inquiry/default.stm
+http://news.bbc.co.uk/hi/english/static/in_depth/uk/2002/budget_2002/be_chancellor/help/1.stm
+http://news.bbc.co.uk/hi/english/uk/newsid_384000/384596.stm
+http://news.bbc.co.uk/hi/english/uk/newsid_89000/89864.stm
+http://news.bbc.co.uk/hi/english/uk/newsid_992000/992144.stm
+http://news.bbc.co.uk/hi/english/uk/northern_ireland/newsid_1886000/1886481.stm
+http://news.bbc.co.uk/hi/english/uk/northern_ireland/newsid_2132000/2132102.stm
+http://news.bbc.co.uk/hi/english/uk/wales/newsid_1872000/1872863.stm
+http://news.bbc.co.uk/hi/english/uk_politics/newsid_1458000/1458049.stm
+http://news.bbc.co.uk/hi/english/uk_politics/talking_politics/newsid_1136000/1136223.stm
+http://news.bbc.co.uk/hi/english/world/americas/newsid_1113000/1113811.stm
+http://news.bbc.co.uk/hi/english/world/europe/newsid_360000/360507.stm
+http://news.bbc.co.uk/hi/english/world/europe/newsid_557000/557332.stm
+http://news.bbc.co.uk/newswatch/ifs/hi/newsid_4070000/newsid_4079100/4079171.stm
+http://news.bbc.co.uk/newswatch/ukfs/hi/newsid_4070000/newsid_4079100/4079171.stm
+http://news.bbc.co.uk/newswatch/ukfs/low/newsid_4070000/newsid_4079100/4079171.stm
+http://news.bbc.co.uk/nolpda/ukfs_news/hi/newsid_4149000/4149835.stm
+http://news.bbc.co.uk/nolpda/ukfs_news/hi/newsid_4393000/4393853.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/april/13/newsid_2524000/2524159.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/april/26/newsid_2503000/2503271.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/august/6/newsid_2527000/2527863.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/december/11/newsid_2546000/2546167.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/december/18/newsid_2538000/2538439.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/february/15/newsid_3529000/3529447.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/july/24/newsid_2515000/2515041.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/november/6/newsid_2538000/2538505.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/october/11/newsid_3714000/3714612.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/october/19/newsid_3112000/3112466.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/october/21/newsid_2489000/2489325.stm
+http://news.bbc.co.uk/onthisday/hi/dates/stories/september/18/newsid_3790000/3790079.stm
+http://news.bbc.co.uk/onthisday/low/dates/stories/november/6/newsid_2538000/2538505.stm
+http://news.bbc.co.uk/onthisday/low/dates/stories/october/11/newsid_3714000/3714612.stm
+http://news.bbc.co.uk/sport1/hi/cricket/3508959.stm
+http://news.bbc.co.uk/sport1/hi/cricket/counties/scotland/4439895.stm
+http://news.bbc.co.uk/sport1/hi/cricket/england/4188581.stm
+http://news.bbc.co.uk/sport1/hi/football/4542681.stm
+http://news.bbc.co.uk/sport1/hi/football/europe/4400139.stm
+http://news.bbc.co.uk/sport1/hi/football/fa_cup/2749401.stm
+http://news.bbc.co.uk/sport1/hi/football/teams/c/clyde/4493441.stm
+http://news.bbc.co.uk/sport1/hi/football/teams/d/dundee_utd/4233093.stm
+http://news.bbc.co.uk/sport1/hi/football/teams/h/heart_of_midlothian/4414691.stm
+http://news.bbc.co.uk/sport1/hi/motorsport/formula_one/3563322.stm
+http://news.bbc.co.uk/sport1/hi/olympics_2004/canoeing/3573578.stm
+http://news.bbc.co.uk/sport1/hi/other_sports/horse_racing/2964323.stm
+http://news.bbc.co.uk/sport1/hi/other_sports/horse_racing/2998381.stm
+http://news.bbc.co.uk/sport1/hi/other_sports/horse_racing/4086904.stm
+http://news.bbc.co.uk/sport1/hi/rugby_union/international/4003989.stm
+http://news.bbc.co.uk/sport1/low/football/europe/4400139.stm
+http://news.bbc.co.uk/sport1/low/football/europe/4579949.stm
+http://news.bbc.co.uk/sport1/low/football/teams/p/portsmouth/4037591.stm
+http://news.bbc.co.uk/sport1/low/motorsport/formula_one/4103892.stm
+http://news.bbc.co.uk/sport1/low/rugby_union/international/4003989.stm
+http://news.bbc.co.uk/sport2/hi/rugby_league/super_league/st_helens/4071038.stm
+http://news.bbc.co.uk/sport2/hi/rugby_union/international/4243757.stm
+http://news.bbc.co.uk/sport2/low/football/teams/m/motherwell/4247255.stm
+http://news.bbc.co.uk/sport2/low/rugby_union/international/weblog/4617911.stm
+http://news.bbc.co.uk/sport3/worldcup2002/hi/matches_wallchart/germany_v_brazil/newsid_2072000/2072282.stm
+http://news.bbc.co.uk/sport3/worldcup2002/hi/sports_talk/newsid_1921000/1921873.stm
+http://news.bbc.co.uk/sport3/worldcup2002/hi/sports_talk/newsid_1921000/1921893.stm
+http://news.bbc.co.uk/sportacademy/hi/sa/athletics/give_it_a_go/newsid_3412000/3412989.stm
+http://news.bbc.co.uk/sportacademy/hi/sa/basketball/give_it_a_go/newsid_3403000/3403953.stm
+http://news.bbc.co.uk/sportacademy/hi/sa/netball/give_it_a_go/newsid_3416000/3416325.stm
+http://news.bbc.co.uk/sportacademy/hi/sa/rugby_union/give_it_a_go/newsid_3363000/3363097.stm
+http://news.bookweb.org/features/1517.html
+http://news.bookweb.org/news/3421.html
+http://news.bostonherald.com/localRegional/view.bg?articleid=57683&format=
+http://news.bostonherald.com/localRegional/view.bg?articleid=57683&format=text
+http://news.bostonherald.com/opinion/view.bg?articleid=69454&format=
+http://news.bostonherald.com/opinion/view.bg?articleid=69454&format=text
+http://news.bostonherald.com/talkBack/index.php?topic=9738.165
+http://news.bostonherald.com/talkBack/index.php?topic=9738.msg255328
+http://news.channels.aol.ca/news/article.adp?id=20050210000009990002
+http://news.cnet.com/news/0-1003-200-5655247.html
+http://news.cnet.com/news/0-1005-200-1551165.html
+http://news.cnet.com/news/0-1005-200-1596934.html
+http://news.cnet.com/news/0-1005-200-2767582.html
+http://news.cnet.com/news/0-1005-200-3665605.html
+http://news.cnet.com/news/0-1005-200-7389552.html
+http://news.com.com/2008-1082-277050.html?legacy=cnet&tag=rc_news
+http://news.com.com/2009-1001-961354.html
+http://news.com.com/2009-1023-5103882.html
+http://news.com.com/2038-12_3-0-topic.html?id=6272&name=Storage+software&tag=st.topic
+http://news.com.com/2060-10787_3-0.html
+http://news.com.com/2060-12_3-7253.html
+http://news.com.com/2100-1001-912128.html
+http://news.com.com/2100-1001-947164.html
+http://news.com.com/2100-1001-955842.html
+http://news.com.com/2100-1006_3-5207837.html?tag=nefd.top
+http://news.com.com/2100-1008_3-5110910.html
+http://news.com.com/2100-1011_3-5075629.html
+http://news.com.com/2100-1016-5060965.html
+http://news.com.com/2100-1016_3-1010981.html
+http://news.com.com/2100-1016_3-5060965.html
+http://news.com.com/2100-1016_3-5060965.html?tag=fd_top
+http://news.com.com/2100-1016_3-5746046.html
+http://news.com.com/2100-1023-872765.html
+http://news.com.com/2100-1025_3-5071108.html
+http://news.com.com/2100-1027_3-5074227.html
+http://news.com.com/2100-7344-5190975.html
+http://news.com.com/2104-1001_3-275677.html
+http://news.com.com/2104-1012_3-5076778.html
+http://news.com.com/5208-1028-0.html?forumID=1&threadID=4783&messageID=28351&start=-150
+http://news.com.com/5208-7351-0.html?forumID=1&threadID=3558&messageID=23705&start=-1
+http://news.com.com/5208-7354-0.html?forumID=1&threadID=4137&messageID=23526&start=-1
+http://news.com.com/ARM+to+put+a+lock+on+mobile+chips/2100-1006_3-1010157.html
+http://news.com.com/Adobe+touts+OS+X+advantage+over+Quark/2100-1040_3-957737.html
+http://news.com.com/Adware+anxiety+gives+Claria+cold+feet/2100-1024_3-5307545.html
+http://news.com.com/After+delays,+Windows+security+update+ready+to+go/2100-1016_3-5300317.html
+http://news.com.com/Analyst+Outsourcing+to+grow+in+fresh+field/2100-7341_3-5719106.html
+http://news.com.com/Antipiracy+bill+targets+technology/2100-1028_3-5238140.html
+http://news.com.com/Apple+unveils+smaller+iPod,+new+software/2100-1045_3-5135865.html
+http://news.com.com/At+tech+firms,+time+again+for+flextime/2100-1022_3-5448994.html
+http://news.com.com/Ballmer+Microsoft+needs+better+sales+pitch/2100-7343_3-5259001.html
+http://news.com.com/Big+Blue+earnings+meet+expectations/2100-1001_3-5192396.html
+http://news.com.com/Big+Blue+files+counterclaims+against+SCO/2100-1016_3-5060965.html
+http://news.com.com/Blogs+and+social+networks+and+wikis,+oh+my/2100-1030_3-5705376.html
+http://news.com.com/CMGI+moves+slightly+despite+downgrades/2100-1023_3-248526.html
+http://news.com.com/Cable+firms+bet+on+broadband+speed,+not+price/2100-1034_3-5089322.html
+http://news.com.com/Cable+joins+broadband+price+war/2100-1034_3-5106326.html
+http://news.com.com/Can+Firefox+outfox+IE+in+browser+wars/2030-1069_3-5616002.html
+http://news.com.com/ChoicePoint+data+theft+widens+to+145,000+people/2100-1029_3-5582144.html
+http://news.com.com/Cisco+investigates+source+code+leak/2100-7349_3-5213724.html
+http://news.com.com/Commentary:+Apple's+missed+opportunity/2030-1042_3-5331861.html?tag=nl
+http://news.com.com/DSL+wars+come+down+to+a+battle+of+the+bundles/2100-1034_3-5445712.html
+http://news.com.com/DVD+price+wars+How+low+can+they+go/2100-1026_3-5439388.html
+http://news.com.com/Damage+control/2009-1001_3-983540.html
+http://news.com.com/Dell+closing+in+on+plans+for+new+U.S.+plant/2100-1003_3-5437137.html
+http://news.com.com/Dell+to+open+new+PC+plant+in+United+States/2100-1003_3-5418321.html
+http://news.com.com/Dell+to+spend+115+million+on+new+plant/2100-1003_3-5445055.html
+http://news.com.com/Developers+get+taste+of+Intel-based+Macs/2100-1016_3-5739589.html
+http://news.com.com/EU+slaps+record+fine+on+Microsoft/2100-7343_3-5178281.html
+http://news.com.com/EUs+statement+on+end+of+Microsoft+investigation/2100-1014_3-5178465.html
+http://news.com.com/Energy+heats+up+high+tech/2009-7337_3-5263772.html
+http://news.com.com/Experts+Next+tsunami+a+matter+of+time/2100-1008_3-5751404.html
+http://news.com.com/France's+Alcatel+eyes+North+American+networking+market/2100-1033_3-243675.html
+http://news.com.com/Friendster+A+little+cash+goes+a+long+way/2100-1026_3-5071021.html
+http://news.com.com/Gates+trots+out+Longhorn/2100-7345_3-5097537.html
+http://news.com.com/Gores+TV+network+set+to+launch+with+Google+tie-in/2100-1047_3-5653913.html
+http://news.com.com/HP+mulls+$18+billion+bid+for+PricewaterhouseCoopers+arm/2100-1017_3-245530.html
+http://news.com.com/Have+e-books+turned+a+page/2100-1025_3-5326015.html
+http://news.com.com/How+much+is+digital+music+worth/2100-1027_3-5117275.html
+http://news.com.com/IBM+pushes+Linux+on+Power+processors/2100-7344_3-5144897.html
+http://news.com.com/IRS+notice+sparks+VoIP+taxation+fears/2100-1036_3-5261200.html
+http://news.com.com/Intel+chips+to+do+double+duty/2100-1006_3-5077336.html
+http://news.com.com/Intel+hastily+redraws+road+maps/2100-1006_3-5207837.html
+http://news.com.com/Is+the+white+box+the+right+box+for+Dell/2100-1042_3-995046.html
+http://news.com.com/Jobs+defends+Apples+record+on+environment/2100-1041_3-5680152.html
+http://news.com.com/Libraries+get+a+break+on+Net+filters/2100-1016_3-5053614.html
+http://news.com.com/Loss+of+contract+may+hit+EDS+earnings/2100-1011_3-5121786.html
+http://news.com.com/Lycos+Europe+denies+attack+on+zombie+army/2100-7349_3-5473005.html
+http://news.com.com/Lycos+Europes+antispam+tool+no+longer+available/2100-7349_3-5476451.html
+http://news.com.com/McAfee+selling+research+arm+to+Sparta/2100-7350_3-5533582.html
+http://news.com.com/Micron+Electronics+makes+final+PC+sale/2100-1001_3-256770.html
+http://news.com.com/Microsoft+meets+the+hackers/2009-1002_3-5747813.html
+http://news.com.com/Microsoft,+Google+may+go+head-to-head/2009-1032_3-1020641.html
+http://news.com.com/Most+dot-coms+sitting+out+the+big+game/2100-1017_3-249920.html
+http://news.com.com/Motorola's+Dragonball+pumps+up+on+ARM/2009-1040_3-249739.html
+http://news.com.com/Music+services+jump+on+iTunes+bandwagon/2100-1027_3-5056162.html
+http://news.com.com/New+Microsoft+Office+faces+dual+obstacles/2100-1001_3-253796.html
+http://news.com.com/New+file+system+has+long+road+to+Windows/2100-1016_3-5487641.html
+http://news.com.com/New+swap+shop+for+Napster+founder/2008-1082_3-5475465.html
+http://news.com.com/News.com+Extra/2001-9373_3-0.html
+http://news.com.com/Nokia+to+open+factory+in+India/2100-1041_3-5473120.html
+http://news.com.com/Offshoring+U.S.+needs+reforms,+not+rhetoric/2009-1070_3-5198156.html
+http://news.com.com/Old-school+theory+is+a+new+force/2009-1001_3-984695.html
+http://news.com.com/Open+Source+Solaris+to+debut+this+year/2100-7344_3-5364052.html
+http://news.com.com/Phone+firms+can't+spare+a+dime/2100-1033_3-241057.html
+http://news.com.com/Push+into+living+room+is+a+gamble/2100-1003_3-5137997.html
+http://news.com.com/Red+Hat+to+serve+Java/2100-7344_3-5288902.html
+http://news.com.com/Red+Hat+tries+again+with+Linux+enthusiasts/2100-7344_3-5534343.html
+http://news.com.com/Shorter+hours+in+software/2100-1022_3-5582885.html
+http://news.com.com/Skype+ready+for+both+telephone+worlds/2100-7352_3-5445922.html
+http://news.com.com/Sprucing+up+open+sources+GPL+foundation/2100-7344_3-5501561.html
+http://news.com.com/States+missed+a+break+in+Microsoft+trial/2100-1001_3-912128.html
+http://news.com.com/Strategies+for+small+fish+in+a+big+pond/2030-1069_3-5326004.html
+http://news.com.com/Students+uncover+dozens+of+Unix+software+flaws/2100-1002_3-5492969.html
+http://news.com.com/Study:+Net+users+spend+less+time+in+%22real%22+world/2100-1023_3-236990.html
+http://news.com.com/Sun+open-source+license+could+mean+Solaris-Linux+barrier/2100-7344_3-5475182.html
+http://news.com.com/Supreme+Court+rules+against+file+swapping/2100-1030_3-5764135.html
+http://news.com.com/The+Google+gods/2009-1023_3-963618.html
+http://news.com.com/The+slow+road+to+Windows+XP/2100-1016_3-5746046.html
+http://news.com.com/The+slow+road+to+Windows+XP/2100-1016_3-5746046.html?part=rss&tag=5746046&subj=news
+http://news.com.com/Understanding+tech+and+terror/2008-1082_3-274708.html
+http://news.com.com/Vonage+to+Uncle+Sam+Hands+off+VoIP/2008-7352_3-5158133.html
+http://news.com.com/Web+on+watch+for+common+enemies/2100-7349_3-5466524.html?tag=nefd.lede
+http://news.com.com/Why+Net+marketers+love+mom/2100-1017_3-900615.html
+http://news.com.com/Wireless+tech+may+hinder+workers+breaks/2100-1022_3-5748579.html
+http://news.com.com/Wireless+tech+may+hinder+workers+breaks/2100-1022_3-5748579.html?part=rss&tag=5748579&subj=news
+http://news.com.com/Year+of+the+Worm/2009-1001_3-254061.html
+http://news.com.com/news/0-1003-200-5067906.html
+http://news.com.com/news/0-1003-201-4591473-0.html
+http://news.com.com/news/0-1004-200-3338556.html
+http://news.com.com/news/0-1005-200-1596934.html
+http://news.com.com/news/0-1005-200-3665605.html
+http://news.com.com/news/0-1005-200-7389552.html
+http://news.com.com/news/0-1006-201-4104737-0.html
+http://news.corporate.findlaw.com/ap_stories/s/2020/2-9-2005/20050209171501_02.html
+http://news.deviantart.com/article/18004/
+http://news.efinancialcareers.com/EMPLOYER_PROFILE_ITEM/newsItemId-18500000000020598
+http://news.efinancialcareers.com/SECTOR_PROFILE_ITEM/newsItemId-16500000000016366
+http://news.enquirer.com/apps/pbcs.dll/article?AID=/20050209/BIZ01/502090342
+http://news.findlaw.com/ap_stories/high_tech/1700/2-2-2005/20050202221502_12.html
+http://news.forum.publicradio.org/article.pl?sid=05/05/02/1837224
+http://news.ft.com/cms/s/05773bca-df1d-11d9-84f8-00000e2511c8.html
+http://news.ft.com/cms/s/0862366a-8445-11d9-ad81-00000e2511c8.html
+http://news.ft.com/cms/s/107f015e-d065-11d9-abb8-00000e2511c8,dwp_uuid=b29636b0-20ee-11d8-81c6-0820abe49a01.html
+http://news.ft.com/cms/s/107f015e-d065-11d9-abb8-00000e2511c8.html
+http://news.ft.com/cms/s/1ea23b3e-3f15-11d9-8e70-00000e2511c8.html
+http://news.ft.com/cms/s/21dded80-d6b3-11d9-b0a4-00000e2511c8.html
+http://news.ft.com/cms/s/24fecf42-e44c-11d9-a754-00000e2511c8.html
+http://news.ft.com/cms/s/2c04d39e-ec5a-11d8-b35c-00000e2511c8.html
+http://news.ft.com/cms/s/329cb864-e1bb-11d9-9460-00000e2511c8.html
+http://news.ft.com/cms/s/3f92052a-6b86-11d9-94dc-00000e2511c8,dwp_uuid=faea3cb6-6893-11d9-9183-00000e2511c8.html
+http://news.ft.com/cms/s/4cd4941e-3cab-11d9-bb7b-00000e2511c8.html
+http://news.ft.com/cms/s/6f92283c-2373-11d9-aee5-00000e2511c8.html
+http://news.ft.com/cms/s/85e93934-d171-11d9-9c1d-00000e2511c8,ft_acl=.html
+http://news.ft.com/cms/s/85e93934-d171-11d9-9c1d-00000e2511c8.html
+http://news.ft.com/cms/s/8ae03004-c943-11d9-b9f4-00000e2511c8.html
+http://news.ft.com/cms/s/99105b1a-d35f-11d9-ad4b-00000e2511c8.html
+http://news.ft.com/cms/s/b4d443ce-e7f6-11d9-9786-00000e2511c8.html
+http://news.ft.com/companies/aerospace
+http://news.ft.com/companies/europe
+http://news.fws.gov/speeches/director2003jan1103.htm
+http://news.fws.gov/speeches/director2004oct22.htm
+http://news.gilbert.org/features/featureReader$4677
+http://news.goldseek.com/DailyReckoning/1079981073.php
+http://news.goldseek.com/DailyReckoning/1106346825.php
+http://news.goldseek.com/DailyReckoning/1117742387.php
+http://news.goldseek.com/RichardDaughty/1079538009.php
+http://news.hst.org.za/view.php3?id=20030826
+http://news.independent.co.uk/low_res/story.jsp?story=647432&host=3&dir=94
+http://news.independent.co.uk/uk/
+http://news.independent.co.uk/uk/crime/index.jsp?page=2
+http://news.independent.co.uk/uk/environment/story.jsp?story=649018
+http://news.independent.co.uk/uk/politics/story.jsp?story=637454
+http://news.independent.co.uk/uk/politics/story.jsp?story=649003
+http://news.independent.co.uk/world/americas/story.jsp?story=649440
+http://news.independent.co.uk/world/middle_east/story.jsp?story=499955
+http://news.independent.co.uk/world/middle_east/story.jsp?story=648976
+http://news.indiainfo.com/2004/11/22/2211bandh.html
+http://news.indiainfo.com/2004/11/22/2211gujbandh.html
+http://news.indiainfo.com/2005/01/03/0301industry.html
+http://news.indiainfo.com/2005/02/01/0102goa.html
+http://news.ists.dartmouth.edu/
+http://news.lp.findlaw.com/ap_stories/a/w/1151/2-8-2005/20050208093030_26.html
+http://news.mamboserver.com/index.php?option=com_content&task=view&id=813&Itemid=46
+http://news.minnesota.publicradio.org/features/2004/09/20_pugmiret_gapdaytonsbluff/
+http://news.minnesota.publicradio.org/features/2005/01/31_pugmiret_wasecapay/
+http://news.minnesota.publicradio.org/features/2005/04/12_robertsont_redlakereopens/
+http://news.minnesota.publicradio.org/features/2005/05/16_zdechlikm_localbiz/
+http://news.mod.uk/news/press/news_press_notice.asp?newsItem_id=1936
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=473
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=478
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=489
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=493
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=557
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=559
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=659
+http://news.mod.uk/news/press/news_speech.asp?newsItem_id=754
+http://news.mod.uk/news_press_notice.asp?newsItem_id=2070
+http://news.mod.uk/news_press_notice.asp?newsItem_id=498
+http://news.moneycentral.msn.com/briefing/StoryStocks.asp
+http://news.morningstar.com/classroom/article/1,3163,4443-3,00.html
+http://news.morningstar.com/classroom/print_quiz/0,3270,4443,00.html
+http://news.nanoapex.com/modules.php?name=News&file=article&sid=2640
+http://news.nationalgeographic.com/news/2002/10/1022_021022_seatroutfish.html
+http://news.nationalgeographic.com/news/2002/12/1206_021206_IraqArnett.html
+http://news.nationalgeographic.com/news/2002/12/1212_021213_journeyofman_2.html
+http://news.nationalgeographic.com/news/2002/12/1220_021224_reindeerban.html
+http://news.nationalgeographic.com/news/2003/06/0619_030619_killerasteroids.html
+http://news.nationalgeographic.com/news/2003/09/0916_030916_primatepets.html
+http://news.nationalgeographic.com/news/2003/10/1009_031009_moonpower.html
+http://news.nationalgeographic.com/news/2003/12/1203_031203_aidworkers.html
+http://news.nationalgeographic.com/news/2004/02/0219_040219_seacorals.html
+http://news.nationalgeographic.com/news/2004/05/0512_animaloverpasses.html
+http://news.nationalgeographic.com/news/2004/08/0819_040819_nanointernet.html
+http://news.nationalgeographic.com/news/2004/11/1108_041108_north_pole.html
+http://news.nationalgeographic.com/news/2004/11/1124_041124_neanderthals_language.html
+http://news.nationalgeographic.com/news/2004/12/1206_041206_global_warming.html
+http://news.nationalgeographic.com/news/2005/02/0209_050209_octopus.html
+http://news.nationalgeographic.com/news/2005/04/0428_050428_tsunamibuildings.html
+http://news.neilrogers.com/news/articles/2005020502.html
+http://news.netcraft.com/archives/2003/01/
+http://news.netcraft.com/archives/2004/03/25/interview_peter_pathos_president_the_planet.html
+http://news.ninemsn.com.au/article.aspx?id=21321
+http://news.ninemsn.com.au/article.aspx?id=22226
+http://news.ninemsn.com.au/article.aspx?id=46332
+http://news.ninemsn.com.au/article.aspx?id=52424
+http://news.ninemsn.com.au/article.aspx?sectionid=388&subsectionid=645&id=21321
+http://news.ninemsn.com.au/article.aspx?sectionid=391&subsectionid=0&id=22226
+http://news.postnuke.com/PrintArticle2548.html
+http://news.scotsman.com/arts.cfm?id=637342005
+http://news.scotsman.com/celebrities.cfm?id=73672005
+http://news.scotsman.com/columnists.cfm?id=669762005
+http://news.scotsman.com/edinburgh.cfm?id=637342005
+http://news.scotsman.com/edinburgh.cfm?id=667262005
+http://news.scotsman.com/edinburgh.cfm?id=667932005
+http://news.scotsman.com/edinburgh.cfm?id=668072005
+http://news.scotsman.com/education.cfm?id=49242005
+http://news.scotsman.com/education.cfm?id=661192005
+http://news.scotsman.com/features.cfm?id=121552005
+http://news.scotsman.com/features.cfm?id=232472004
+http://news.scotsman.com/features.cfm?id=617802005
+http://news.scotsman.com/features.cfm?id=644042005
+http://news.scotsman.com/features.cfm?id=659422005
+http://news.scotsman.com/features.cfm?id=814602004
+http://news.scotsman.com/health.cfm?id=568892005
+http://news.scotsman.com/health.cfm?id=658042005
+http://news.scotsman.com/index.cfm?id=693952005
+http://news.scotsman.com/inverness.cfm?id=476202005
+http://news.scotsman.com/inverness.cfm?id=481512005
+http://news.scotsman.com/latest.cfm?id=4704587
+http://news.scotsman.com/opinion.cfm?id=669762005
+http://news.scotsman.com/scitech.cfm?id=587132005
+http://news.scotsman.com/scotland.cfm?id=561312005
+http://news.scotsman.com/scotland.cfm?id=637462005
+http://news.scotsman.com/scotland.cfm?id=656452005
+http://news.scotsman.com/scotland.cfm?id=658042005
+http://news.scotsman.com/scotland.cfm?id=658832005
+http://news.scotsman.com/scotland.cfm?id=668102004
+http://news.scotsman.com/topics.cfm?tid=10&id=158012005
+http://news.scotsman.com/topics.cfm?tid=1089&id=1229362004
+http://news.scotsman.com/topics.cfm?tid=1126&id=314602005
+http://news.scotsman.com/topics.cfm?tid=1219&id=85912005
+http://news.scotsman.com/topics.cfm?tid=1234&id=48122005
+http://news.scotsman.com/topics.cfm?tid=1251&id=318262005
+http://news.scotsman.com/topics.cfm?tid=1256&id=282762005
+http://news.scotsman.com/topics.cfm?tid=1271&id=158012005
+http://news.scotsman.com/topics.cfm?tid=1277&id=321202005
+http://news.scotsman.com/topics.cfm?tid=132&id=1213002004
+http://news.scotsman.com/topics.cfm?tid=152&id=265762005
+http://news.scotsman.com/topics.cfm?tid=181&id=609432005
+http://news.scotsman.com/topics.cfm?tid=181&id=663492005
+http://news.scotsman.com/topics.cfm?tid=225&id=592912005
+http://news.scotsman.com/topics.cfm?tid=264&id=211572005
+http://news.scotsman.com/topics.cfm?tid=337&id=549572005
+http://news.scotsman.com/topics.cfm?tid=337&id=567702005
+http://news.scotsman.com/topics.cfm?tid=369&id=640772005
+http://news.scotsman.com/topics.cfm?tid=373&id=1327562004
+http://news.scotsman.com/topics.cfm?tid=374&id=586602002
+http://news.scotsman.com/topics.cfm?tid=374&id=586612002
+http://news.scotsman.com/topics.cfm?tid=44&id=1373742004
+http://news.scotsman.com/topics.cfm?tid=445&id=516752005
+http://news.scotsman.com/topics.cfm?tid=5&id=658442005
+http://news.scotsman.com/topics.cfm?tid=591&id=660672005
+http://news.scotsman.com/topics.cfm?tid=591&id=674372004
+http://news.scotsman.com/topics.cfm?tid=591&id=685522004
+http://news.scotsman.com/topics.cfm?tid=609&id=366302005
+http://news.scotsman.com/topics.cfm?tid=629&id=1226622002
+http://news.scotsman.com/topics.cfm?tid=635&id=606682002
+http://news.scotsman.com/topics.cfm?tid=642&id=587132005
+http://news.scotsman.com/topics.cfm?tid=690&id=651032003
+http://news.scotsman.com/topics.cfm?tid=784&id=265662003
+http://news.scotsman.com/topics.cfm?tid=873&id=280532004
+http://news.scotsman.com/topics.cfm?tid=896&id=986072004
+http://news.scotsman.com/topics.cfm?tid=909&id=239712005
+http://news.scotsman.com/topics.cfm?tid=91&id=1063572004
+http://news.scotsman.com/topics.cfm?tid=922&id=149712004
+http://news.scotsman.com/topics.cfm?tid=926&id=495802005
+http://news.scotsman.com/topics.cfm?tid=950&id=827522003
+http://news.scotsman.com/topics.cfm?tid=978&id=963412003
+http://news.scotsman.com/uk.cfm?id=48122005
+http://news.serbianunity.net/bydate/2005/May_19/29.html
+http://news.siu.edu/focalpoint/oct2002/
+http://news.softpedia.com/newsLatestComments/en
+http://news.spirithit.com/index/north_america/more/canadian_hospital_bans_bedside_bibles/
+http://news.spirithit.com/index/north_america/more/house_resolution_urges_respect_for_koran/
+http://news.surfwax.com/art/files/Pattern_Art.html
+http://news.surfwax.com/authors/files/James_Burke_Book.html
+http://news.surfwax.com/biology/files/Human_Subjects.html
+http://news.surfwax.com/clothing/files/Sleeveless_Clothing.html
+http://news.surfwax.com/collectibles/files/Scottish_Collectibles.html
+http://news.surfwax.com/economics/files/Bilateralism.html
+http://news.surfwax.com/fitness/files/Exercise_Machine.html
+http://news.surfwax.com/gardening/files/Garden_Design.html
+http://news.surfwax.com/gardening/files/Rose_Flowers.html
+http://news.surfwax.com/health/files/Memory_Health.html
+http://news.surfwax.com/history/files/Henry_VII.html
+http://news.surfwax.com/history/files/James_Buchanan_America.html
+http://news.surfwax.com/history/files/William_Tecumseh_Sherman_America.html
+http://news.surfwax.com/law/pubs/Federal_Tort_Claims_Act.html
+http://news.surfwax.com/law/pubs/Forced_Sale.html
+http://news.surfwax.com/movies/files/Ran_Movie.html
+http://news.surfwax.com/sports/files/Rice_Football.html
+http://news.surfwax.com/tech/files/Cassette_Players.html
+http://news.surfwax.com/ushotels/files/Roger_Smith_New_York.html
+http://news.tbo.com/news/MGBKW7VUN8E.html
+http://news.teamxbox.com/comments/8055/Halo-2-Containment-3D-Screenshot/
+http://news.telegraph.co.uk/gardening/main.jhtml?xml=/gardening/2005/02/03/gdown05.xml&sSheet=/gardening/2005/02/04/ixgmain.html
+http://news.telegraph.co.uk/news/main.jhtml?xml=/news/2005/01/13/nharry13.xml
+http://news.thomasnet.com/IMT/archives/2001/07/the_evershrinki.html
+http://news.thomasnet.com/IMT/archives/2005/02/top_ten_predict.html
+http://news.thomasnet.com/IMT/archives/2005/05/the_living_comp.html?WT.mc_t=imt&WT.mc_n=site_entry
+http://news.thomasnet.com/fullstory/14703
+http://news.thomasnet.com/fullstory/18508
+http://news.thomasnet.com/fullstory/29458/2585
+http://news.thomasnet.com/fullstory/450858/1424
+http://news.thomasnet.com/fullstory/450963
+http://news.thomasnet.com/fullstory/451867/1324
+http://news.thomasnet.com/fullstory/457649/writerelease.html
+http://news.thomasnet.com/fullstory/461097
+http://news.thomasnet.com/fullstory/461097/1303
+http://news.thomasnet.com/news/1450/880
+http://news.thomasnet.com/news/1525/100
+http://news.thomasnet.com/news/plant_furnishings_accessories/40
+http://news.ucc.org/index.php?option=com_content&task=view&id=105&Itemid=0
+http://news.ucc.org/index.php?option=com_content&task=view&id=105&Itemid=1
+http://news.uns.purdue.edu/UNS/html4ever/2004/040608.DeBranges.Riemann.html
+http://news.uns.purdue.edu/UNS/html4ever/2005/050112.Richert.odor.html
+http://news.xinhuanet.com/english/20010428/402949.htm
+http://news.xinhuanet.com/english/2005-05/02/content_2908774.htm
+http://news.xinhuanet.com/english/2005-05/23/content_2990285.htm
+http://news.xinhuanet.com/english/2005-06/12/content_3073161.htm
+http://news.xinhuanet.com/english/2005-06/20/content_3112816.htm
+http://news.yahoo.com/
+http://news.yahoo.com/i/1440%3B_ylt=A9FJqaneyndCqKUAexOmOrgF%3B_ylu=X3oDMTA2MnU4czRtBHNlYwNzbg--
+http://news.yahoo.com/news?tmpl=index2&cid=964
+http://news.yahoo.com/news?tmpl=story&cid=578&u=/nm/20050619/ts_nm/iraq_dc_37
+http://news.yahoo.com/news?tmpl=story&u=/afp/20050210/ts_alt_afp/afplifestyleusfashion_050210190701
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050614/ap_on_hi_te/china_microsoft
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050615/ap_on_bi_ge/opec_meeting_67
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050619/ap_on_re_as/japan_nagasaki_a_bomb_4
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050620/ap_on_re_mi_ea/syria_iraq_border
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050620/ap_on_re_mi_ea/syria_iraq_border_1
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050623/ap_on_re_mi_ea/iraq
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050625/ap_on_re_us/half_ton_man
+http://news.yahoo.com/news?tmpl=story&u=/ap/20050625/ap_on_re_us/half_ton_man_1
+http://news.yahoo.com/news?tmpl=story&u=/nm/20050619/ts_nm/iraq_dc
+http://news.yahoo.com/news?tmpl=story&u=/nm/20050621/bs_nm/markets_oil_dc
+http://news.yahoo.com/news?tmpl=story&u=/nm/weather_arlene_dc
+http://news.yahoo.com/s/afp/20050613/tc_afp/chinainternetcompanymicrosoft;_ylt=AsL7orP4gnws5tkilESYvF0jtBAF;_ylu=X3oDMTBiMW04NW9mBHNlYwMlJVRPUCUl
+http://news.yahoo.com/s/afp/20050615/bs_afp/commoditiesenergyoil_050615173323
+http://news.yahoo.com/s/afp/20050617/bs_afp/commoditiesenergyoil_050617212646%3B_ylt=A9FJqZFei7NC6BwA7gumOrgF%3B_ylu=X3oDMTBiMW04NW9mBHNlYwMlJVRPUCUl
+http://news.yahoo.com/s/afp/20050620/sc_afp/environmentwhalingiwc_050620143135
+http://news.yahoo.com/s/afp/20050623/sp_wl_afp/cricketengaus_050623215433
+http://news.yahoo.com/s/afp/20050623/wl_uk_afp/cricketengaus
+http://news.yahoo.com/s/afp/20050623/wl_uk_afp/cricketengaus/nc:732
+http://news.yahoo.com/s/ap/20050614/ap_on_hi_te/aol_s_crumbling_walls
+http://news.yahoo.com/s/ap/20050619/ap_on_bi_ge/oil_prices
+http://news.yahoo.com/s/ap/20050619/ap_on_re_as/japan_nagasaki_a_bomb
+http://news.yahoo.com/s/ap/20050623/ap_on_re_us/missing_scout
+http://news.yahoo.com/s/ap/20050624/ap_on_sp_ho_ne/hkn_lemieux_labor
+http://news.yahoo.com/s/ap/20050625/ap_on_re_us/half_ton_man
+http://news.yahoo.com/s/ap/20050627/ap_on_sp_bo_ne/box_koreas_boxing_diplomacy
+http://news.yahoo.com/s/ap/adelphia_fraud
+http://news.yahoo.com/s/ap/economy
+http://news.yahoo.com/s/ap/hkn_lemieux_labor
+http://news.yahoo.com/s/ap/iraq
+http://news.yahoo.com/s/chitribts/20050623/ts_chicagotrib/airforcesaysnowidespreadreligiousbiasatacademy
+http://news.yahoo.com/s/cpress/20050620/ca_pr_on_na/air_india_cda
+http://news.yahoo.com/s/cpress/20050620/ca_pr_on_wo/air_india_cda
+http://news.yahoo.com/s/cpress/20050623/ca_pr_on_ho/nhl_lockout_buffalo
+http://news.yahoo.com/s/cpress/20050623/ca_pr_on_wo/israel_palestinians
+http://news.yahoo.com/s/cpress/20050623/ca_pr_on_wo/israel_palestinians&printer=1
+http://news.yahoo.com/s/csm/20050609/cm_csm/ycobban09x
+http://news.yahoo.com/s/latimests/losttotheonlylifetheyknew
+http://news.yahoo.com/s/nm/20050601/hl_nm/health_obesity_dc
+http://news.yahoo.com/s/nm/20050612/sc_nm/weather_arlene_dc/nc:1112
+http://news.yahoo.com/s/nm/20050612/ts_nm/weather_arlene_dc_29
+http://news.yahoo.com/s/nm/20050620/ts_nm/security_bush_dc
+http://news.yahoo.com/s/nm/iraq_dc
+http://news.yahoo.com/s/nm/iraq_usa_dc
+http://news.yahoo.com/s/nm/mlb_clemens_dc
+http://news.yahoo.com/s/nm/security_bush_dc
+http://news.yahoo.com/s/nm/weather_arlene_dc
+http://news.yahoo.com/s/sn/20050617/sp_sn/rockiesplanintothinairagain
+http://news.yahoo.com/s/thenation/133360
+http://news.yahoo.com/s/thenation/20050613/cm_thenation/133360
+http://news.yahoo.com/s/ucgg/20050604/cm_ucgg/foreigndonorspressureugandatobemorelikethem
+http://news.yahoo.com/s/ucgg/20050604/cm_ucgg/foreigndonorspressureugandatobemorelikethem/nc:2215
+http://news.yahoo.com/s/usatoday/20050617/tc_usatoday/hydrogenprototypeaclassisatotalgas
+http://news.yahoo.com/s/usatoday/20050617/tc_usatoday/hydrogenprototypeaclassisatotalgas&printer=1
+http://news.yahoo.com/s/usatoday/20050629/bs_usatoday/whitecollarcrimecasesprovedifficulttoprosecute
+http://news.yahoo.com/s/usatoday/20050629/bs_usatoday/whitecollarcrimecasesprovedifficulttoprosecute%3B_ylt=A9FJqabCzcJCiK4AMgqs0NUE%3B_ylu=X3oDMTA3bGI2aDNqBHNlYwM3NDk-
+http://news.yahoo.com/s/usatoday/hydrogenprototypeaclassisatotalgas
+http://news.yahoo.com/s/usnw/20050624/pl_usnw/senate_may_reconsider_voting_on_fuel_economy_standards315_xml
+http://news.yahoo.com/s/zd/20050602/tc_zd/153327
+http://news.zdnet.co.uk/software/0,39020381,2125222,00.htm
+http://news.zdnet.com/2100-1009_22-5458505.html
+http://news.zdnet.com/2100-3513_22-5074227.html?tag=zdfd.newsfeed
+http://news.zdnet.com/2100-3513_22-5375070.html
+http://news.zdnet.com/2100-3513_22-5378366.html
+http://news.zdnet.com/2100-3513_22-5726714.html
+http://news.zdnet.com/2100-3513_22-5746046.html
+http://news.zdnet.com/2100-9584_22-5187609.html
+http://news.zdnet.com/2100-9588_22-5630529.html
+http://news.zdnet.com/2100-9589_22-5658944.html
+http://news.zdnet.com/2100-9589_22-5662226.html
+http://news.zdnet.com/5208-9595-0.html?forumID=1&threadID=8765&messageID=176304&start=-1
+http://news2.news.wisc.edu/whyfiles/212elect_ID/4.html
+http://news24.wordtravels.com/Travelguide/Countries/South+Africa/Regions/Johannesburg
+http://news4colorado.com/campaign2004/local_story_231123027.html
+http://news8austin.com/content/contact_us/news_8_events/
+http://newsarama.com/forums/showthread.php?s=&threadid=23601
+http://newsarama.com/forums/showthread.php?s=&threadid=8533
+http://newsblaster.cs.columbia.edu/dev/archives/2003-07-25-00-15-36/web/summaries/2003-07-25-00-16-37-us.html
+http://newsbureau.upmc.com/MediaKits/Concussion/CJSMConcussionAmnesiaStudy.htm
+http://newsfromrussia.com/science/2004/04/26/53643.html
+http://newsfromrussia.com/science/2004/11/17/57153.html
+http://newsfromrussia.com/science/2004/12/28/57614.html
+http://newsfromrussia.com/world/2004/05/18/53987.html
+http://newsfromrussia.com/world/2005/01/04/57700.html
+http://newsfromrussia.com/world/2005/02/06/58122.html
+http://newsgd.com/specials/deng100thbirthanniversary/biography/200407290012.htm
+http://newsgd.com/travel/toursites/200305120359.htm
+http://newsgrist.typepad.com/underbelly/current_affairs/
+http://newshound.de.siu.edu/online/stories/storyReader$4272
+http://newsinfo.colostate.edu/index.asp?page=news_item_display&news_item_id=1066408489
+http://newsinfo.iu.edu/cat/page/normal/121.html
+http://newsinfo.iu.edu/news/page/normal/1097.html
+http://newsinfo.iu.edu/news/page/normal/1355.html
+http://newsinfo.iu.edu/news/page/normal/531.html
+http://newsinfo.iu.edu/news/page/normal/559.html
+http://newsmax.com/archives/articles/2005/1/27/93054.shtml
+http://newsmax.com/archives/ic/2004/10/24/30416.shtml
+http://newsmax.com/commentmax/get.pl?a=2001/10/5/010750
+http://newsonjapan.com/html/linkbase/Lifestyle/Music/
+http://newspaper.catgames.com/slh_story_2.html
+http://newsroom.wri.org/mediakits_text.cfm?ContentID=704
+http://newsroom.wri.org/newsrelease_text.cfm?NewsReleaseID=24
+http://newstandardnews.net/?refid=u-00000242
+http://newstandardnews.net/alivewires/staff/content/?show_item=1281
+http://newstandardnews.net/content/?action=show_item&itemid=1402
+http://newstandardnews.net/content/?action=show_item&itemid=1860
+http://newstandardnews.net/content/?action=show_item&itemid=918
+http://newstandardnews.net/content/index.cfm/items/1311
+http://newstandardnews.net/content/index.cfm/items/1965
+http://newsthoughts.net/index.php?p=500
+http://newstodaynet.com/190605.htm
+http://newsweaver.ie/bizofemail/e_article000136927.cfm
+http://newsweaver.ie/ralphaverbuch/index000039908.cfm
+http://newswww.bbc.net.uk/1/hi/programmes/3732544.stm
+http://newswww.bbc.net.uk/1/hi/uk/3675961.stm
+http://newswww.bbc.net.uk/1/hi/uk/4412347.stm
+http://newtimes.rway.com/2005/brides05/gown.shtml
+http://newtimes.rway.com/2005/summer05/1000.shtml
+http://newwinnipeg.com/news/info/new-democratic-party-mb.htm
+http://newyork.citysearch.com/profile/7160382
+http://newyork.citysearch.com/profile/7160382/
+http://newyork.citysearch.com/profile/7160382/new_york_ny/stephen_knoll_salon.html
+http://newyork.citysearch.com/review/7160382
+http://newyork.craigslist.org/lgs/
+http://newyorker.com/fact/content/?030901fa_fact1
+http://newyorker.com/online/content/?040913on_onlineonly01
+http://newyorkguide.blogs.com/uknyc/
+http://newyorkmetro.com/nymetro/arts/music/jazz/reviews/4973/
+http://newyorkmetro.com/nymetro/arts/music/pop/reviews/414/
+http://newyorkmetro.com/nymetro/arts/tv/reviews/2782/
+http://newyorkmetro.com/nymetro/arts/tv/reviews/4367/
+http://newyorkmetro.com/nymetro/movies/columns/hollywood/n_9585/
+http://newyorkmetro.com/nymetro/news/media/features/9226/
+http://newyorkmetro.com/nymetro/news/people/columns/intelligencer/n_9160/
+http://newyorkmetro.com/nymetro/news/politics/columns/citypolitic/4559/
+http://newyorkmetro.com/nymetro/news/politics/national/features/10194/index2.html
+http://newyorkmetro.com/nymetro/news/sept11/features/5196/
+http://newyorkmetro.com/nymetro/nightlife/sex/columns/mating/11515/
+http://newyorkmetro.com/nymetro/nightlife/sex/columns/nakedcity/5663/
+http://newyorkmetro.com/nymetro/realestate/columns/realestate/11820/
+http://newyorkmetro.com/nymetro/shopping/fashion/spring05/11014/
+http://nextwave.sciencemag.org/cgi/content/full/2003/12/03/3?ck=nck
+http://nextwave.sciencemag.org/cgi/content/full/2004/10/20/3
+http://nexus.nasa.gov/ESP/SchedulingEngine.aspx
+http://nfapp.east.asu.edu/Newsletters/1997/nov97.htm
+http://nfapp.east.asu.edu/Newsletters/1997/oct97.htm
+http://nfbcal.org/nfbc/journal/fw2004/presmessage.html
+http://nflrc.hawaii.edu/rfl/April2005/chujo/chujo.html
+http://nflrc.hawaii.edu/rfl/April2005/reviews/harvey.html
+http://ngccoin.com/legal.asp
+http://ngeorgia.com/history/recon.html
+http://ngeorgia.com/people/bartram.html
+http://ngeorgia.com/people/gordon.html
+http://ngeorgia.com/people/mcpherson.html
+http://ngin.tripod.com/271002a.htm
+http://ngin.tripod.com/haskins.htm
+http://nh.essortment.com/newbornpuppies_rdsj.htm
+http://nhsc.bhpr.hrsa.gov/applications/lrp_05/h.asp
+http://nhsc.bhpr.hrsa.gov/news/nhscurrent_may_2004.asp
+http://nhse.cs.rice.edu/NHSEreview/CMS/
+http://nhtsa.gov/people/injury/NewmediaForumWeb/MediaForumPlanner/pages/ResearchPlanning.htm
+http://nicedoggie.net/
+http://nicklewis.smartcampaigns.com/node/416
+http://nickm.com/2002/spring/computers/
+http://nickscape.net/recoveryzone/recovery1.htm
+http://nid-34.newsdetail.bc.ndp.ca/
+http://nielsenhayden.com/electrolite/
+http://nielsenhayden.com/electrolite/archives/001487.html
+http://nielsenhayden.com/electrolite/archives/006163.html
+http://nielsenhayden.com/makinglight/archives/002708.html
+http://nielsenhayden.com/makinglight/archives/004641.html
+http://nielsenhayden.com/makinglight/archives/005569.html
+http://nielsenhayden.com/makinglight/archives/006339.html
+http://nielsenhayden.com/makinglight/archives/006346.html
+http://nielsenhayden.com/makinglight/archives/006389.html
+http://nielsenhayden.com/makinglight/archives/006460.html
+http://nifty.nisusnet.com/nifty/Vince_Water/Pottery-Shards/Pottery-Shards-1
+http://nifty.nisusnet.com/nifty/bestiality/dog-tales
+http://nifty.nisusnet.com/nifty/lesbian/young-friends/marie-and-dawn
+http://nigeriasports.com/2276
+http://nigeriavillagesquare1.com/Articles/Abati/2004/08/in-search-of-character.html
+http://niherlas.com/stella/archives/000366.php
+http://nihoshi.com/miblog/
+http://niklovr.tvheaven.com/Jessy/returning.htm
+http://nikondigital.org/articles/digital_lenses.htm
+http://ninr.nih.gov/ninr/about/legislation/transplants.htm
+http://nique.net/issues/1999-08-27/sports/4
+http://nireland.humanists.net/handbk/ulsterskillingfaiths.html
+http://njpo.org/Highstate2635.htm
+http://nkzone.typepad.com/nkzone/
+http://nkzone.typepad.com/nkzone/2004/05/kim_jongil_vs_h.html
+http://nkzone.typepad.com/nkzone/2004/06/pravda_mobile_p.html
+http://nlp.snowseed.com/
+http://nm.water.usgs.gov/nawqa/abstract.moss.html
+http://nma1.us/manage/1997-02/
+http://nmml.afsc.noaa.gov/CetaceanAssessment/bluewhale/bluhabitat.htm
+http://nmp.jpl.nasa.gov/ds1/mrlog.html
+http://nmsantos.com/cgi-local/shop.pl/page%3DRioPuerco11.htm
+http://nmsrfr.com/adv_corner/05%20THE%20MEANING%20OF%20IMMEDIATE%20-%20FEBRUARY%202003.htm
+http://nn.cs.utexas.edu/web-pubs/lissom/CODEDOC/html/inputs_8c-source.html
+http://no-pasaran.blogspot.com/
+http://no-url-left.blogspot.com/
+http://no.speling.org/
+http://nobelprize.org/chemistry/laureates/1904/ramsay-lecture.html
+http://nobelprize.org/chemistry/laureates/1986/lee-bio.html
+http://nobelprize.org/chemistry/laureates/1996/kroto-autobio.html
+http://nobelprize.org/chemistry/laureates/1996/smalley-autobio.html
+http://nobelprize.org/economics/laureates/1970/press.html
+http://nobelprize.org/economics/laureates/1974/hayek-lecture.html
+http://nobelprize.org/economics/laureates/1977/meade-autobio.html
+http://nobelprize.org/economics/laureates/1978/simon-autobio.html
+http://nobelprize.org/economics/laureates/1979/lewis-autobio.html
+http://nobelprize.org/economics/laureates/1979/presentation-speech.html
+http://nobelprize.org/economics/laureates/1987/press.html
+http://nobelprize.org/economics/laureates/1991/press.html
+http://nobelprize.org/economics/laureates/1993/north-autobio.html
+http://nobelprize.org/economics/laureates/1993/press.html
+http://nobelprize.org/economics/laureates/1997/scholes-autobio.html
+http://nobelprize.org/economics/laureates/1999/press.html
+http://nobelprize.org/economics/laureates/2002/public.html
+http://nobelprize.org/economics/laureates/2003/engle-autobio.html
+http://nobelprize.org/medicine/articles/lewis/
+http://nobelprize.org/medicine/laureates/1912/carrel-lecture.html
+http://nobelprize.org/medicine/laureates/1932/press.html
+http://nobelprize.org/medicine/laureates/1932/sherrington-bio.html
+http://nobelprize.org/medicine/laureates/1934/minot-lecture.html
+http://nobelprize.org/medicine/laureates/1936/loewi-lecture.html
+http://nobelprize.org/medicine/laureates/1937/szent-gyorgyi-speech.html
+http://nobelprize.org/medicine/laureates/1951/theiler-lecture.html
+http://nobelprize.org/medicine/laureates/1976/gajdusek-speech.html
+http://nobelprize.org/medicine/laureates/1980/presentation-speech.html
+http://nobelprize.org/medicine/laureates/1989/bishop-autobio.html
+http://nobelprize.org/peace/laureates/1909/press.html
+http://nobelprize.org/peace/laureates/1946/balch-lecture.html
+http://nobelprize.org/peace/laureates/1950/press.html
+http://nobelprize.org/peace/laureates/1963/red-cross-lecture.html
+http://nobelprize.org/peace/laureates/1964/press.html
+http://nobelprize.org/peace/laureates/1970/press.html
+http://nobelprize.org/peace/laureates/1975/press.html
+http://nobelprize.org/peace/laureates/1985/physicians-acceptance.html
+http://nobelprize.org/peace/laureates/1989/presentation-speech.html
+http://nobelprize.org/peace/laureates/1991/presentation-speech.html
+http://nobelprize.org/peace/laureates/1994/arafat-bio.html
+http://nobelprize.org/peace/laureates/1994/presentation-speech.html
+http://nobelprize.org/peace/laureates/1995/pugwash-history.html
+http://nobelprize.org/peace/laureates/1999/msf-lecture.html
+http://nobelprize.org/peace/laureates/2003/presentation-speech.html
+http://nobelprize.org/physics/articles/brink/
+http://nobelprize.org/physics/laureates/1957/lee-speech.html
+http://nobelprize.org/physics/laureates/1980/cronin-autobio.html
+http://nocapital.blogspot.com/
+http://nocapital.blogspot.com/2004_09_19_nocapital_archive.html
+http://nocasinoerie.org/hoytlet1.htm
+http://nochildleft.com/2005/may05foolish.html
+http://noflyingnotights.com/bebold2.html
+http://nofreelist.com/review/?movieid=569
+http://noggs.typepad.com/outsidetext/
+http://noggs.typepad.com/outsidetext/2005/02/
+http://noggs.typepad.com/the_reading_experience/
+http://noggs.typepad.com/the_reading_experience/2004/07/in_one_of_the_m.html
+http://noggs.typepad.com/the_reading_experience/filmfilm_and_literature/
+http://nolomar.nineshadoweyes.com/015.shtml
+http://nolomar.nineshadoweyes.com/046.shtml
+http://nolotech.com/CA/DYOD/
+http://nolotech.com/Yes-Better.html
+http://nomoremister.blogspot.com/
+http://nonaknits.typepad.com/nonaknits/project_this_and_that/
+http://noncorporeal.com/people/pathfinder/shoot_yourself_in_the_foot.html
+http://nonprofit.about.com/od/managinganonprofitorg/a/board_basics.htm
+http://nonprofit.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPATH=JR&Job_DID=J8B5ZD72QKB5Y58GN7Y
+http://nonprofit.careerbuilder.com/np.ic/GeneralLabor.htm
+http://nonprofits.accesscomm.ca/reginaperformingartscentre/Rental_Rates.htm
+http://nontradmedjournals.blog-city.com/read/749986.htm
+http://nontroppo.org/test/
+http://noordinarylove.blogdrive.com/archive/97.html
+http://noosphere.princeton.edu/terror.html
+http://nootropics.com/smartdrugs/brainviagra.html
+http://nopunditintended.com/
+http://norbizness.com/
+http://norbizness.com/archives/001118.html
+http://norbizness.com/archives/001127.html
+http://norbizness.com/archives/cat_operation_shifting_rationale.html
+http://nordic.humanrights.dk/bogbutik/challenges/
+http://normblog.typepad.com/normblog/
+http://normblog.typepad.com/normblog/2005/06/writers_choice_.html
+http://north.cbc.ca/regional/servlet/View?filename=tupic-correnctions-23062005
+http://north.ecc.edu/gis/gis_projects.htm
+http://northcentralkansas.redcross.org/
+http://northeast.nic.in/tea.htm
+http://northernireland.ideasfactory.com/funding_awards/features/ni_feature02.htm
+http://northgateexploration.ca/press_release_files/pr_aug7_2002.html?OpenDocument
+http://northgateexploration.ca/press_release_files/pr_july31.html?OpenDocument
+http://northgateexploration.ca/press_release_files/pr_may7b_2004.htm
+http://northofwrigleyfield.blogspot.com/
+http://northumbria.ac.uk/brochure/visit/el/info_day/openday_individual
+http://northumbria.ac.uk/browse/naa/famous/?view=Standard
+http://northwestvoice.com/page.asp?item=63146
+http://norwesty.blogspot.com/
+http://nosferatu.cas.usf.edu/lis/lis6585/class/tradlit.html
+http://notanotherhollywoodfilm.com/jackie/short_films.html
+http://noted.blogs.com/westcoastmusic/2004/12/dick_heckstalls.html
+http://noteitposts.com/index.php?m=20040613
+http://noteitposts.com/index.php?m=200408
+http://noteitposts.com/index.php?m=20040829
+http://noteitposts.com/index.php?p=612
+http://notesontheatrocities.blogspot.com/
+http://nothing-less.net/!/archives/000803.php
+http://nothingfancy.blogspot.com/
+http://notindifferentnotsceptical.blogspot.com/
+http://nottingham.lta.org.uk/News/050618FinalsDay.htm
+http://novametrix.respironics.com/nova/pr/pr010725.htm
+http://novanewsnet.ukings.ns.ca/nova_news_3588_3865.html
+http://novaspivack.typepad.com/
+http://novaspivack.typepad.com/nova_spivacks_weblog/2004/01/social_networks.html
+http://novaspivack.typepad.com/nova_spivacks_weblog/2004/10/common_antibiot.html
+http://novaspivack.typepad.com/nova_spivacks_weblog/2005/01/whats_after_fol.html
+http://novaspivack.typepad.com/nova_spivacks_weblog/global_brain_and_global_mind/
+http://nowherethoughts.net/sarpysam/
+http://npj.goinfo.com/NPJMain.nsf/0/7198af905bccec3286256af50079046f?OpenDocument
+http://nrc.uchsc.edu/CFOC/HTMLVersion/Chapter_9.html
+http://nri.ucsb.edu/AR/01_director_statement/01_DirState_02_03.htm
+http://nrich.maths.org/public/viewer.php?obj_id=1321&part=index&refpage=monthindex.php
+http://nrims.nsw.gov.au/policies/metadata_policy.html
+http://nrm.massey.ac.nz/changelinks/webware.html
+http://nsarchive.chadwyck.com/icintro.htm
+http://nsarchive.chadwyck.com/nh_intr.htm
+http://nsarchive.chadwyck.com/pdintro.htm
+http://nsit.uchicago.edu/pubs/telebits/index_new.html
+http://nsr.mij.mrs.org/1/20/complete.sym.html
+http://nsr.mij.mrs.org/1/27/complete.mac.html
+http://nsr.mij.mrs.org/1/27/text.html
+http://nssdc.gsfc.nasa.gov/nssdc/data_retention.html
+http://nssdc.gsfc.nasa.gov/planetary/chiron.html
+http://nssdc.gsfc.nasa.gov/planetary/planetaryfaq.html
+http://nsw.uca.org.au/whatis.htm
+http://nswas.org/article154.html
+http://nsweb.itinfo.dk/uk/news684.asp
+http://nsweb.nursingspectrum.com/ce/ce251.htm
+http://nsweb.nursingspectrum.com/cfforms/GuestLecture/Eyes.cfm
+http://nsweb.nursingspectrum.com/cfforms/GuestLecture/missionstatement.cfm
+http://nt.watauga.k12.nc.us/br/sound.htm
+http://ntama.uni-mainz.de/content/view/10/29/1/4/
+http://nte-socio.univ-lyon2.fr/Marc_Grange/Geo_en.htm
+http://ntl.bts.gov/DOCS/bob.html
+http://nuclearfree.lynx.co.nz/tour05.htm
+http://nuclearhistory.tripod.com/glossary/s.html
+http://nuclearweaponarchive.org/Usa/Weapons/B41.html
+http://nuke.goblins.net/modules.php?name=Reviews&rop=showcontent&id=135&newlang=english
+http://numeralist.blogspot.com/
+http://nursing.dal.ca/nursing_440.html
+http://nursing.umaryland.edu/longworkhours/pres_summ.htm
+http://nursingassistants.net/index.php?p=56
+http://nursingoutreach.missouri.edu/behind05.htm
+http://nurture.nature.com/rss/modules/mod_prism.html
+http://nutrition.about.com/od/healthyshopping/qt/healthyshopping.htm
+http://nutrition.tufts.edu/news/notes/
+http://nutrition.tufts.edu/news/notes/2003-03.html
+http://nutrition.ucdavis.edu/briefs/Issues/JulAug04.htm
+http://nutrition.ucdavis.edu/perspectives/NovDec01.htm
+http://nutsandbolts.washcoll.edu/
+http://nuwen.net/culture.html
+http://nvcc.edu/home/etrumbull/classes/thclass2.htm
+http://nvizx.typepad.com/nvizx_weblog/2005/04/full_motion_cam.html
+http://nwanews.com/story.php?paper=adg&section=Outdoors&storyid=106198
+http://nwc.networkingpipeline.com/159908328
+http://nwc.networkingpipeline.com/news/159908328
+http://nwc.securitypipeline.com/160911511
+http://nwc.systemsmanagementpipeline.com/GLOBAL/btg/pipeline/shared/article/showArticle.jhtml?articleId=57701013&pgno=2
+http://nwc.systemsmanagementpipeline.com/showArticle.jhtml?articleID=164303342
+http://nwn.bioware.com/forums/viewtopic.html?topic=234960&forum=47&sp=15
+http://nwn.bioware.com/underdark/character_dragonkin.html
+http://nwtxsite.brickriver.com/page.asp?TableName=oPages_6KF3UU&PrimaryKey=oPages_6KF3UU_ID&PKValue=774
+http://nwtxsite.brickriver.com/page_print.asp?PKValue=774
+http://ny.fabricshow.com/fabricshowny/v42/index.cvn?id=10007
+http://nyc.indymedia.org/newswire/display/95440/index.php
+http://nydailynews.healthology.com/nydailynews/15341.htm
+http://nydailynews.healthology.com/nydailynews/17377.htm
+http://nyjm.albany.edu:8000/nyjstyle.html
+http://nyjobsource.com/stern.html
+http://nytimes.com/2005/06/24/books/24grim.html?pagewanted=print
+http://o-n-a.blogspot.com/2004_05_01_o-n-a_archive.html
+http://o2collective.org/archives/000022.html
+http://o3.indiatimes.com/lawsofattraction/
+http://o3.indiatimes.com/talktome/archive/2005/06/07.aspx
+http://oa.waveflex.com/profiles/prof_disp.asp?id=1016
+http://oa.waveflex.com/profiles/prof_disp.asp?id=1056
+http://oa.waveflex.com/profiles/prof_disp.asp?id=317
+http://oa.waveflex.com/profiles/prof_disp.asp?id=480
+http://oa.waveflex.com/profiles/prof_disp.asp?id=532
+http://oaa.osu.edu/handbook/i_prototypepoa.html
+http://oaa.osu.edu/handbook/iii_facextracomp.html
+http://oak.cats.ohiou.edu/~bg362397/unc.htm
+http://oakroadsystems.com/genl/relation.htm
+http://oaks.nvg.org/defence-mechanisms.html
+http://oasis.gov.ie/birth/after_your_baby_is_born/breastfeeding.html
+http://oasis.gov.ie/consumer_affairs/consumers_and_the_law_in_ireland.html
+http://oasis.gov.ie/consumer_affairs/pricing_of_goods_and_services.html
+http://oasis.gov.ie/culture_and_recreation/arts_and_culture/arts_council.html
+http://oasis.gov.ie/education/primary_education/ownership_of_schools.html
+http://oasis.gov.ie/environment/litter_law.html
+http://oasis.gov.ie/health/blood_donation.html
+http://oasis.gov.ie/health/health_services_in_ireland/health_services_and_visitors_to_ireland.html
+http://oasis.gov.ie/housing/local_authority_housing/applying_for_local_authority_housing.html
+http://oasis.gov.ie/housing/local_authority_housing/housing_associations.html
+http://oasis.gov.ie/public_utilities/telecommunications/tv_licences.html
+http://oasis.gov.ie/relationships/marriage/taxation_of_married_people_in_ireland.html
+http://oasis.gov.ie/retirement/pensions/oap_contributory.html
+http://oasis.gov.ie/transport/motoring/driving_offences.html
+http://oasis.gov.ie/transport/motoring/parking_fines_and_vehicle_clamping.html
+http://oasis.gov.ie/transport/public_transport/public_transport_commuter_tickets_and_tax.html
+http://obama.senate.gov/blog/
+http://obama.senate.gov/speech/050426-_a_hope_to_fulfill/
+http://obelia.jde.aca.mmu.ac.uk/giscons/unitintr.htm
+http://obesity.lap-band-surgery.org/LAP-BAND-01-01.html
+http://obnoxio.us/
+http://observantlittle.blogspot.com/2005/06/dr-death-enquiry.html
+http://observer.com/pages/offtherec.asp
+http://observer.guardian.co.uk/Politics/columnist/story/0,9321,962410,00.html
+http://observer.guardian.co.uk/cash/story/0,6903,1499249,00.html
+http://observer.guardian.co.uk/children/story/0,12816,1086452,00.html
+http://observer.guardian.co.uk/focus/story/0,6903,1396563,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,1342296,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,1481443,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,519590,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,547768,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,711834,00.html
+http://observer.guardian.co.uk/foodmonthly/story/0,9950,951715,00.html
+http://observer.guardian.co.uk/international/story/0,6903,1148577,00.html
+http://observer.guardian.co.uk/international/story/0,6903,1153513,00.html
+http://observer.guardian.co.uk/international/story/0,6903,1510003,00.html
+http://observer.guardian.co.uk/iraq/story/0,12239,905990,00.html
+http://observer.guardian.co.uk/leaders/story/0,6903,1066158,00.html
+http://observer.guardian.co.uk/magazine/story/0,11913,962948,00.html
+http://observer.guardian.co.uk/osm/story/0,6903,708240,00.html
+http://observer.guardian.co.uk/osm/story/0,6903,803092,00.html
+http://observer.guardian.co.uk/osm/story/0,6903,884570,00.html
+http://observer.guardian.co.uk/politics/story/0,6903,1484334,00.html
+http://observer.guardian.co.uk/review/story/0,6903,1396275,00.html
+http://observer.guardian.co.uk/sport/story/0,6903,1514939,00.html
+http://observer.guardian.co.uk/styleguide/page/0,14495,1196865,00.html
+http://observer.guardian.co.uk/uk_news/story/0,,1366843,00.html
+http://observer.guardian.co.uk/uk_news/story/0,6903,1406987,00.html
+http://observer.guardian.co.uk/waronterrorism/story/0,1373,556626,00.html
+http://observer.guardian.co.uk/waronterrorism/story/0,1373,573728,00.html
+http://observer.guardian.co.uk/waronterrorism/story/0,1373,624183,00.html
+http://observer.guardian.co.uk/worldview/story/0,11581,643391,00.html
+http://observer.guardian.co.uk/worldview/story/0,11581,643484,00.html
+http://observer.guardian.co.uk/worldview/story/0,11581,651674,00.html
+http://observer.guardian.co.uk/worldview/story/0,11581,680095,00.html
+http://observer.guardian.co.uk/worldview/story/0,11581,776680,00.html
+http://observers.org/tac.mailing.list/2000/October/
+http://obsessed.modblog.com/
+http://obsidianwings.blogs.com/obsidian_wings/2004/09/for_the_record.html
+http://obsidianwings.blogs.com/obsidian_wings/2005/01/lucky_trade_def.html
+http://obsidianwings.blogs.com/obsidian_wings/2005/05/to_my_governmen.html
+http://obsidianwings.blogs.com/obsidian_wings/2005/06/john_bolton_neg.html
+http://obsidianwings.blogs.com/obsidian_wings/2005/06/more_things_we_.html
+http://oca.slu.edu/year42004/index.phtml?page=sur408&cat=requiredtoc
+http://oca.slu.edu/year42004/index.phtml?page=sur409&cat=requiredtoc
+http://occupational-therapy.advanceweb.com/common/editorial/editorial.aspx?CC=43837
+http://oceancurrents.rsmas.miami.edu/atlantic/north-atlantic.html
+http://oceanexplorer.noaa.gov/explorations/deepeast01/background/plan/plan.html
+http://oceanexplorer.noaa.gov/library/readings/vicissitudes/vicissitudes.html
+http://oceanworld.tamu.edu/students/coral/coral_web.htm
+http://ocl.od.nih.gov/updates/OCLUpdateJulyAug_02.htm
+http://ocpe.gmu.edu/certificate_programs/proj_man.html
+http://oddnews.orb6.com/stories/nm/20050111/oukoe_usa_court_spies.php
+http://odfi.org/archives/000018.html
+http://odin.dep.no/asd/norsk/aktuelt/taler/044051-090110/dok-bn.html
+http://odin.dep.no/bfd/engelsk/publ/handbooks/004021-120005/dok-bn.html
+http://odin.dep.no/fd/engelsk/publ/periodika/010011-280020/dok-bn.html
+http://odin.dep.no/fd/english/doc/fiscal_budget/006005-990224/dok-bn.html
+http://odin.dep.no/fd/english/news/speeches/010011-090063/dok-bn.html
+http://odin.dep.no/hod/engelsk/news/new_publ/030071-200002/index-dok000-b-n-a.html
+http://odin.dep.no/krd/english/news/speeches/taler_politisk_ledelse/016081-090157/dok-bn.html
+http://odin.dep.no/lmd/mf/Conferences/020031-990195/dok-bn.html
+http://odin.dep.no/nhd/norsk/aktuelt/taler/politisk_ledelse/024111-090015/dok-bn.html
+http://odin.dep.no/odinarkiv/norsk/dep/ud/2000/eng/032091-990292/dok-bn.html
+http://odin.dep.no/oed/english/news/speeches/minister/026031-090140/dok-bn.html
+http://odin.dep.no/ud/english/doc/plans/032181-220005/dok-bn.html
+http://odin.dep.no/ud/english/news/speeches/minister_a/032021-090004/dok-bn.html
+http://odin.dep.no/ud/norsk/aktuelt/taler/minister_b/032171-090231/dok-bn.html
+http://odin.dep.no/ud/norsk/aktuelt/taler/minister_b/032171-090368/dok-bn.html
+http://odin.prohosting.com/highsoc/langscont.htm
+http://ods.od.nih.gov/factsheets/vitaminb6.asp
+http://odur.let.rug.nl/~robbert/sources/jc_src.pas
+http://odur.let.rug.nl/~usa/B/north/north.htm
+http://odur.let.rug.nl/~usa/P/rr40/speeches/su88rwr.htm
+http://odwin.ucsd.edu/glossary/glossary.html
+http://oe.quickbooks.com/about_us.shtml
+http://oee.nrcan.gc.ca/energystar/english/consumers/index.cfm
+http://oeh.cals.cornell.edu/heatstress.html
+http://oemagazine.com/fromTheMagazine/jan04/tutorial.html
+http://oemagazine.com/fromTheMagazine/mar03/busspot.html
+http://oeop.larc.nasa.gov/hep/hep-events.html
+http://ofeuillerat.free.fr/htm/itw_gh_0105.htm
+http://offcampus.union.rpi.edu/legal/fheo.asp
+http://offcampushousing.ucsd.edu/faq.html
+http://offcentre.net/sage/gp3.html
+http://office.microsoft.com/en-us/assistance/CH062556181033.aspx
+http://office.microsoft.com/en-us/assistance/HA010429371033.aspx
+http://office.microsoft.com/en-us/assistance/HA010917601033.aspx
+http://office.microsoft.com/en-us/assistance/HA011032471033.aspx
+http://office.microsoft.com/en-us/assistance/HA011193841033.aspx
+http://office.microsoft.com/en-us/assistance/HA011196551033.aspx
+http://office.microsoft.com/en-us/assistance/HA011513301033.aspx
+http://officediversions.com/discover/modules/wfsection/article.php?articleid=41
+http://officediversions.com/discover/modules/wfsection/article.php?articleid=90
+http://officediversions.com/discover/modules/xoopsheadline/index.php?id=2
+http://ogb.wfu.edu/?id=1575_0_6_0_M
+http://ogj.pennnet.com/Articles/Article_Display.cfm?Section=HOME&ARTICLE_ID=227269&VERSION_NUM=2&p=82
+http://ogj.pennnet.com/news/wire_story_display.cfm?C=GenIn&NewsId=119332
+http://ogov.newswire.ca/ontario/GONE/2005/05/17/c0303.html?lmatch=&lang=_e.html
+http://oha.ci.alexandria.va.us/fortward/special-sections/baseball/
+http://ohioline.osu.edu/ae-fact/0005.html
+http://ohioline.osu.edu/als-fact/1005.html
+http://ohioline.osu.edu/b472/grain.html
+http://ohioline.osu.edu/b504/b504_18.html
+http://ohioline.osu.edu/b604/b604_15.html
+http://ohioline.osu.edu/b782/b782_9.html
+http://ohioline.osu.edu/b853/b853_6.html
+http://ohioline.osu.edu/b867/b867_3.html
+http://ohioline.osu.edu/b875/b875_4.html
+http://ohioline.osu.edu/b882/b882_10.html
+http://ohioline.osu.edu/b908/b908_80.html
+http://ohioline.osu.edu/b915/part_four.html
+http://ohioline.osu.edu/cd-fact/0108.html
+http://ohioline.osu.edu/cd-fact/1153.html
+http://ohioline.osu.edu/ga-fact/0004.html
+http://ohioline.osu.edu/hyg-fact/1000/1236.html
+http://ohioline.osu.edu/hyg-fact/1000/1239.html
+http://ohioline.osu.edu/hyg-fact/1000/1247.html
+http://ohioline.osu.edu/hyg-fact/2000/2105.html
+http://ohioline.osu.edu/hyg-fact/2000/2130.html
+http://ohioline.osu.edu/hyg-fact/3000/3304.html
+http://ohioline.osu.edu/hyg-fact/5000/5150.html
+http://ohioline.osu.edu/hyg-fact/5000/5211.html
+http://ohioline.osu.edu/hyg-fact/5000/5227.html
+http://ohioline.osu.edu/hyg-fact/5000/5231.html
+http://ohioline.osu.edu/hyg-fact/5000/5268.html
+http://ohioline.osu.edu/hyg-fact/5000/5317.html
+http://ohioline.osu.edu/hyg-fact/5000/5706.html
+http://ohioline.osu.edu/mm-fact/0002.html
+http://ohioline.osu.edu/sc156/sc156_55.html
+http://ohioline.osu.edu/sc157/sc157_5.html
+http://ohioline.osu.edu/ss-fact/0170.html
+http://ohiovoter.blogspot.com/
+http://ohq.tpl.toronto.on.ca/gr10-tp-2b.jsp
+http://ohrm.doc.gov/employees/telework/fam_fr_workplace/fam_fr_wrkpl_info.htm
+http://ohsr.od.nih.gov/guidelines/belmont.html
+http://oi.uchicago.edu/OI/AR/92-93/92-93_Scrolls.html
+http://oikos.com/esb/
+http://oikos.com/library/naturalbuilding/design_principles.html
+http://oikos.com/news/2005/01.html
+http://oil-gas.state.co.us/Hearings/Notices/Dec_03/0312AW13.htm
+http://oil-gas.state.co.us/Hearings/Notices/Dec_03/0312GA06.htm
+http://oil-gas.state.co.us/Hearings/Notices/Dec_03/0312UP05.htm
+http://oil-gas.state.co.us/RR_Asps/700-ser.htm
+http://oil-spill-pollution-control-degreasing-bioremediation.co.uk/pressrel/prdec97.asp
+http://oisa.mcmaster.ca/handbook/entry.htm
+http://oisss.unc.edu/forms/1938app.html
+http://ojr.org/ojr/glaser/1098225187.php
+http://ojr.org/ojr/technology/1095977436.php
+http://ojr.org/ojr/workplace/1090395903.php
+http://ok-lah.blogspot.com/
+http://ok.essortment.com/christmastree_rezn.htm
+http://ok.essortment.com/disneyworldon_rjbb.htm
+http://okcitykid.bravejournal.com/
+http://okebffa.tripod.com/katrinka/matter1.html
+http://okebffa.tripod.com/katrinka/matter3.html
+http://okebffa.tripod.com/katrinka/nigai1.html
+http://okebffa.tripod.com/krychick/heartbond.html
+http://oklahoman.diaryland.com/041220_67.html
+http://okrasoup.typepad.com/black_looks/
+http://ol.scc.spokane.edu/jstrever/models/essays/c&c/c&c&&002.htm
+http://old.ccer.edu.cn/en/ceq/ceq.html
+http://old.cruisingworld.com/gps/1997/gps1897.htm
+http://old.cruisingworld.com/gps/1997/gps1997.htm
+http://old.fairfieldweekly.com/anman00/lifun.html
+http://old.mbconf.ca/mb/mbh3610/people.htm
+http://old.merlion.ru/eng/business/events/acorp10year/
+http://old.techdis.ac.uk/seven/papers/colour-contrast5.html
+http://oldfraser.lexi.net/publications/critical_issues/2001/flat_tax/section_09.html
+http://oldfraser.lexi.net/publications/onbalance/1993/6-1/
+http://oldhag.blogspot.com/2003_10_27_oldhag_archive.html
+http://oldkunnel.net/poodle.html
+http://oldpoetry.com/
+http://oldpoetry.com/oprintall/Cicely%20Fox%20Smith
+http://oldsaybrook.findlinks.com/
+http://olimu.com/Journalism/Texts/Commentary/FilialReflections.htm
+http://olimu.com/WebJournalism/Texts/Commentary/JROTC.htm
+http://olivercowdery.com/hurlbut/HChron3.htm
+http://oliverkamm.typepad.com/blog/2004/02/lib_dems_and_lo.html
+http://oll.libertyfund.org/Texts/Acton0003/LecturesOnModernHistory/HTMLs/0028_Pt17_Lecture15.html
+http://oll.libertyfund.org/Texts/Erasmus0096/ComplaintOfPeace/0047_Bk.html
+http://oll.libertyfund.org/Texts/LFBooks/Smith0232/GlasgowEdition/MoralSentiments/HTMLs/0141-01_Pt03_Part2.html
+http://oll.libertyfund.org/Texts/LFBooks/Smith0232/GlasgowEdition/MoralSentiments/HTMLs/0141-01_Pt07_Part7.html
+http://ollie.dcccd.edu/mgmt1374/book_contents/4directing/leading/lead.htm
+http://olo.wooster.edu/news.php
+http://olpa.od.nih.gov/hearings/107/session1/reports/bioterror.asp
+http://olympia.anglican.org/churches/B/stdunstan/events.htm
+http://omega13a.ultimate-results.net/modules.php?name=Palindromes
+http://omni.ac.uk/browse/mesh/D000428.html
+http://omni.ac.uk/browse/mesh/D003195.html
+http://omni.ac.uk/browse/mesh/D005123.html
+http://omniverse.blogspot.com/2004_11_21_omniverse_archive.html
+http://on.starblvd.net/meet/betty
+http://onafrica.net/jill/2001/20011130_crayfish1.html
+http://oncampus.richmond.edu/academics/quest/2002/question.html
+http://onebag.oratory.com/home.html
+http://onedonkeyarmy.blogspot.com/
+http://oneflynangel.com/timelinemed.html
+http://onegoodmove.org/1gm/
+http://onegoodmove.org/1gm/1gmarchive/000913.html
+http://onegoodmove.org/1gm/1gmarchive/002155.html
+http://onemorefortheroad.blogspot.com/2005_03_01_onemorefortheroad_archive.html
+http://onet.rti.org/pdf/dsp_ShowSOC_Limited.cfm?SOC=39-3011.00
+http://online.northumbria.ac.uk/faculties/art/humanities/cns/m-intro.html
+http://online.onetcenter.org/link/summary/13-1041.03
+http://online.onetcenter.org/link/summary/19-4051.01
+http://online.onetcenter.org/link/summary/19-4091.00
+http://online.onetcenter.org/link/summary/25-1123.00
+http://online.onetcenter.org/link/summary/27-1026.00
+http://online.onetcenter.org/link/summary/31-2021.00
+http://online.onetcenter.org/link/summary/33-1021.01
+http://online.onetcenter.org/link/summary/33-1021.02
+http://online.onetcenter.org/link/summary/33-9032.00
+http://online.onetcenter.org/link/summary/35-3021.00
+http://online.onetcenter.org/link/summary/37-1012.02
+http://online.onetcenter.org/link/summary/45-1011.01
+http://online.onetcenter.org/link/summary/45-1011.02
+http://online.onetcenter.org/link/summary/45-1011.03
+http://online.onetcenter.org/link/summary/45-1011.04
+http://online.onetcenter.org/link/summary/45-1011.06
+http://online.onetcenter.org/link/summary/47-1011.01
+http://online.onetcenter.org/link/summary/47-1011.02
+http://online.onetcenter.org/link/summary/47-2042.00
+http://online.onetcenter.org/link/summary/47-2051.00
+http://online.onetcenter.org/link/summary/47-2071.00
+http://online.onetcenter.org/link/summary/47-2073.01
+http://online.onetcenter.org/link/summary/49-2011.02
+http://online.onetcenter.org/link/summary/49-9095.00
+http://online.onetcenter.org/link/summary/51-4033.01
+http://online.onetcenter.org/link/summary/51-4033.02
+http://online.onetcenter.org/link/summary/51-6042.00
+http://online.onetcenter.org/link/summary/51-7032.00
+http://online.onetcenter.org/link/summary/51-8021.02
+http://online.onetcenter.org/link/summary/51-9023.00
+http://online.onetcenter.org/link/summary/51-9061.03
+http://online.onetcenter.org/link/summary/51-9121.02
+http://online.onetcenter.org/link/summary/51-9132.00
+http://online.onetcenter.org/link/summary/51-9198.01
+http://online.onetcenter.org/link/summary/51-9198.02
+http://online.sfsu.edu/~psych200/unit4/47.htm
+http://online.sfsu.edu/~rone/GEessays/SterileHarvest.html
+http://onlineathens.com/stories/011505/dog_20050115056.shtml
+http://onlineathens.com/stories/013005/dog_20050130100.shtml
+http://onlineathens.com/stories/050105/mov_20050501009.shtml
+http://onlinedictionary.datasegment.com/word/Canonical+books
+http://onlinedictionary.datasegment.com/word/Near
+http://onlinedictionary.datasegment.com/word/Reduce
+http://onlinedictionary.datasegment.com/word/board
+http://onlinedictionary.datasegment.com/word/fine
+http://onlinedictionary.datasegment.com/word/free
+http://onlineecom01.thomson.com.au/thomson/Catalog.asp?EES_CMD=SC&EES_ID=100700
+http://onlineethics.org/cases/nspe/nspe90-7.html
+http://onlineethics.org/cases/pritchard/inside-luebke.html
+http://onlineethics.org/codes/ACS-Employmt-Guide.html
+http://onlineethics.org/codes/guidelines.html
+http://onlineethics.org/div/abstracts/sci-eng-prog-1.html
+http://onlineethics.org/edu/cwethed.html
+http://onlineethics.org/essays/shuttle/post-dis.html
+http://onlineethics.org/essays/shuttle/pre-dis.html
+http://onlineethics.org/glossary.html
+http://onlineethics.org/moral/carson/cafaro.html
+http://onlyonanisland.blogspot.com/2004_12_01_onlyonanisland_archive.html
+http://onlyonanisland.blogspot.com/2005_01_01_onlyonanisland_archive.html
+http://onoffonoff.org/imma/trow/floor.html
+http://ontario.sierraclub.ca/peel/listserve.php
+http://ontonet.com/blog/index.php?m=200309
+http://ontrack.ncsu.edu/Documents/
+http://opcug.ca/public/Reviews/SpamKiller.htm
+http://open-site.org/Kids/People_and_Society/Psychology/
+http://openacs.org/forums/message-view?message_id=149982
+http://openarmsadoption.org/adoption_process.htp
+http://opendemocracy.typepad.com/wsf/
+http://opendoors.iienetwork.org/?p=29413
+http://opendoors.iienetwork.org/?p=29454
+http://opendoors.iienetwork.org/?p=50137
+http://openemotion.typepad.com/
+http://openp2p.com/pub/a/p2p/2003/04/25/swarms_mobs.html
+http://opensource.weblogsinc.com/entry/1234000070046214/
+http://opera.inrialpes.fr/people/Tayeb.Lemlouma/doc1.html
+http://operationhope.org/AboutOHI/speeches/EMPOWERING%20JAPAN.htm
+http://operationhope.org/AboutOHI/speeches/empoweringjapan.htm
+http://operationhope.org/epublications/September2004/default.htm
+http://operationmilitarypride.org/oyr.html
+http://opgratitude.com/website/html/modules/news/
+http://opgratitude.com/website/html/modules/news/index.php?storytopic=4
+http://opinion.paifamily.com/?p=1470
+http://opinion.paifamily.com/wp-trackback.php?p=1248
+http://oppenheim.thefreelibrary.com/A-Millionaire-of-Yesterday/7-1
+http://oppenheim.thefreelibrary.com/The-Kingdom-of-the-Blind/32-1
+http://ops.dot.gov/whatsnew/2004/Ext-Notice-4-012704.htm
+http://ops.fhwa.dot.gov/freight/publications/secur_exec_summ.htm
+http://ops.fhwa.dot.gov/program_areas/sp-events-mgmt/handbook/chapter7_01.htm
+http://optics.org/articles/ole/10/6/1/1
+http://optics.org/articles/ole/10/6/4/1
+http://optometry.berkeley.edu/~library/stats.htm
+http://or.essortment.com/lawnbowlinghis_rbpl.htm
+http://oracknows.blogspot.com/2005/04/field-guide-to-biomedical-meeting.html
+http://orangeclerk.onetgov.net/faq/faq-marriagelicense.htm
+http://orangeclerk.onetgov.net/service/marriage.shtml
+http://orangepolitics.org/2005/05/say-goodbye-to-airport-road/
+http://oregonpacific.redcross.org/?zone=&id=28&sid=
+http://oregonpeaceworks.org/main/pwkr/0303/happening.html
+http://oregonstate.edu/dept/affact/
+http://oregonstate.edu/dept/counsel/brochures.php
+http://oregonstate.edu/instruct/phl302/distance/locke2/back2.html
+http://oregonstate.edu/instruct/phl302/philosophers/descartes-god.html
+http://oregonstate.edu/instruct/phl302/texts/bacon/bacon_essays.html
+http://oreillynet.com/pub/wlg/6429
+http://org.eea.eu.int/documents/newsreleases/ghg_report2005-en
+http://org.eea.eu.int/documents/speeches/1-12-2004
+http://org.eea.eu.int/documents/speeches/10-11-2004
+http://organizations.uncfsu.edu/acctsoc/research_information.htm
+http://organizedchristmas.com/ftopic-5136-30.html
+http://organizedchristmas.com/ftopict-5034.html
+http://organizedchristmas.com/ftopict-5160.html
+http://organizedchristmas.com/ftopict-5523.html
+http://organizedscrapbooks.com/article9.html
+http://orgs.carleton.edu/saga/04_fall_Minutes.html
+http://oriel.ysgolccc.org.uk/boathouse/speakingdog1.html
+http://orient.bowdoin.edu/orient/article.php?date=2004-10-15&section=3&id=1
+http://orient.bowdoin.edu/orient/article.php?date=2004-11-12&section=2&id=7
+http://orienteering.ie/builder.php3?Events
+http://orienteering.ie/builder.php3?events.html
+http://orig.app.com/njpowerbrokers/
+http://orig.citizen-times.com/cgi-bin/article/38478
+http://orig.citizen-times.com/cgi-bin/article/71560
+http://origin.bankrate.com/brm/news/DrDon/20031111a1.asp
+http://orlink.oldrepnatl.com/Bulletins/201/201-96-0127%20Impact%20of%20plan%20confirmation%20upon%20pre-petition%20liens.htm
+http://ors.uchc.edu/ehs/ppeplcy.html
+http://orsa.blogspot.com/
+http://ortho.smith-nephew.com/ca_en/Standard.asp?NodeId=3417
+http://orthodoxeurope.org/page/14/23.aspx
+http://orwell.ru/library/articles/As_I_Please/english/eaip_03.html
+http://oryza.com/global/marketreview/index.shtml
+http://oryza.com/glossary/grainsmarkets.shtml
+http://osa.leg.wa.gov/Fiscal_Notes.htm
+http://oscars.about.com/od/thenominees/a/etsmkw030904_2.htm
+http://oscars.about.com/od/thenominees/a/million123104.htm
+http://osconf.kmdi.utoronto.ca/panel_social.html
+http://osdir.com/Article1687.phtml
+http://oser.state.wi.us/docview.asp?docid=1111
+http://osp.stanford.edu/apply/contract.html
+http://osp.stanford.edu/welcome/overview.html
+http://ospa.utdallas.edu/UTDPerspectives/Fall2003/Page3.htm
+http://osrl.uoregon.edu/projects/mwmc/mwmc.html
+http://ostinato.stanford.edu/acronyms/alpha.asp?P
+http://osulibrary.oregonstate.edu/research/srg/peace.htm
+http://oswegocountybusiness.com/issue55/55EconomicTrends.html
+http://ot.f00f.com/
+http://otakuworld.com/games/psx/monranch.htm
+http://otec.uoregon.edu/tspc.htm
+http://otherisrael.home.igc.org/ed.html
+http://othernessblue.blogspot.com/
+http://otl.berkeley.edu/inventor/uccopyright.php
+http://otsp.missouri.edu/business/Guidelines.asp
+http://ottawa.ca/city_services/permits/15_13_1_en.shtml
+http://ottawa.rasc.ca/astronomy/amat_prof_partnerships/amproposter.html
+http://ottawa.rasc.ca/astronomy/amat_prof_partnerships/amprotalk.html
+http://ottoandsons-nursery.com/otto-press.htm
+http://ourco.buxtontech.com/crew/index.php?d=3&category_id=111
+http://ourco.buxtontech.com/crew/index.php?d=3&category_id=131
+http://oursenioryears.com/medrecords.html
+http://ourworld.compuserve.com/homepages/CarolASThompson/Baker.htm
+http://ourworld.compuserve.com/homepages/Carpathia/page5.htm
+http://ourworld.compuserve.com/homepages/JWCRAWFORD/combs.htm
+http://ourworld.compuserve.com/homepages/PZarembka/uup.htm
+http://ourworld.compuserve.com/homepages/billramey/kalam.htm
+http://ourworld.compuserve.com/homepages/dp5/relativ.htm
+http://ourworld.compuserve.com/homepages/dp5/sex1.htm
+http://ourworld.compuserve.com/homepages/joelg/plum.htm
+http://ourworld.compuserve.com/homepages/jsuebersax/agree.htm
+http://ourworld.compuserve.com/homepages/jsuebersax/ltrait.htm
+http://ourworld.compuserve.com/homepages/lennich/histfig.htm
+http://ourworld.compuserve.com/homepages/profirst/h.htm
+http://ourworld.compuserve.com/homepages/profirst/k.htm
+http://ourworld.compuserve.com/homepages/profirst/t.htm
+http://ourworld.worldlearning.org/site/PageServer?pagename=40Conference
+http://ous.curtin.edu.au/risk_compliance/insurance/personal_accident.html
+http://outdoors.mainetoday.com/trailhead/2004_09.shtml
+http://outdoorsbest.zeroforum.com/zerothread?id=276802
+http://outletshirts.com/product_info.php?products_id=256
+http://outlook.wustl.edu/fall2004/cilia.html
+http://outofambit.blogspot.com/2005_06_01_outofambit_archive.html
+http://outside.away.com/
+http://outside.away.com/magazine/0496/9604fmon.html
+http://outside.away.com/outside/bodywork/200505/fitness-guide-2.html
+http://outside.away.com/outside/destinations/199609/199609_into_thin_air_1.html
+http://outside.away.com/outside/features/200302/200302_anwr_1.html
+http://outside.away.com/outside/magazine/0496/9604fmon.html
+http://outside.away.com/outside/magazine/200001/200001body3.html
+http://outside.away.com/outside/magazine/travelguide2001/base.html
+http://outsourcing.weblogsinc.com/
+http://outsourcing.weblogsinc.com/entry/2509517851773617/
+http://oval.mitre.org/community/board/minutes/2004-09-21.html
+http://overcaffeinated.net/archives/2004_08.html
+http://overcaffeinated.net/archives/2005_05.html
+http://overcaffeinated.net/comments/2172
+http://overlawyered.com/pages/webada.html
+http://overlawyered.com/topics/harass.html
+http://overtaken.blogmosis.com/
+http://owasbhat.com/_blog/
+http://owl.english.purdue.edu/handouts/esl/eslprep.html
+http://owl.english.purdue.edu/handouts/general/gl_block.html
+http://owl.english.purdue.edu/handouts/general/gl_patvar.html
+http://owl.english.purdue.edu/handouts/general/gl_sentvar.html
+http://owl.english.purdue.edu/handouts/grammar/g_parallel.html
+http://owl.english.purdue.edu/handouts/grammar/g_tensec.html
+http://owl.english.purdue.edu/handouts/index2.html
+http://owl.english.purdue.edu/handouts/print/general/gl_patvar.html
+http://owl.english.purdue.edu/handouts/print/research/r_plagiar.html
+http://owl.english.purdue.edu/handouts/pw/p_applettr.html
+http://owl.english.purdue.edu/handouts/pw/p_experienceEX.html
+http://owl.english.purdue.edu/handouts/pw/p_perstate.html
+http://owl.english.purdue.edu/handouts/pw/p_yresum.html
+http://owl.english.purdue.edu/handouts/research/r_apa.html
+http://owl.english.purdue.edu/handouts/research/r_mla.html
+http://owl.english.purdue.edu/handouts/research/r_paraphr.html
+http://owl.english.purdue.edu/handouts/research/r_plagiar.html
+http://owl.english.purdue.edu/handouts/research/r_quotprsum.html
+http://owl.english.purdue.edu/lab/faq.html
+http://owl.english.purdue.edu/workshops/hypertext/ResearchW/notes.html
+http://oxblog.blogspot.com/
+http://oxblog.blogspot.com/2004_03_28_oxblog_archive.html
+http://oxblog.blogspot.com/2004_04_11_oxblog_archive.html
+http://oxblog.blogspot.com/2004_08_15_oxblog_archive.html
+http://oxblog.blogspot.com/2005_06_12_oxblog_archive.html
+http://oxford.berkeleypta.org/handbook.htm
+http://oxford.date.com/singles/mississippi10.htm
+http://oxomoxo.blogspot.com/
+http://oxomoxo.blogspot.com/2005_01_30_oxomoxo_archive.html
+http://p066.ezboard.com/ftryingtoconceive74330frm63.showMessage?topicID=970.topic
+http://p076.ezboard.com/fpoliticalpalacefrm56.showMessage?topicID=4.topic
+http://p076.ezboard.com/fpoliticalpalacefrm57.showMessage?topicID=46.topic
+http://p077.ezboard.com/famericanviewfrm2.showMessage?topicID=6240.topic
+http://p077.ezboard.com/fextracrispyfrm17.showMessage?topicID=134.topic
+http://p077.ezboard.com/fntrmindiscussionboardfrm9.showMessage?topicID=773.topic&index=21
+http://p079.ezboard.com/folderchildadoptionfrm5.showMessage?topicID=56.topic
+http://p084.ezboard.com/fbluemoon22203frm11.showMessage?topicID=93.topic
+http://p086.ezboard.com/fsonsofsamhornbostonredsox.showMessageRange?topicID=15497.topic&start=1&stop=20
+http://p086.ezboard.com/fsonsofsamhornbostonredsox.showMessageRange?topicID=15497.topic&start=21&stop=40
+http://p088.ezboard.com/ftheworldoftaelaenfrm12.showMessage?topicID=58.topic
+http://p098.ezboard.com/fwordoriginsorgfrm1.showMessage?topicID=12244.topic
+http://p197.ezboard.com/fengrishmessageboardsfrm2.showMessage?topicID=1213.topic
+http://p197.ezboard.com/fthesonnetboardfrm7.showMessage?topicID=383.topic
+http://p199.ezboard.com/fdragontailsfrm7.showMessageRange?topicID=928.topic&start=41&stop=60
+http://p199.ezboard.com/fmiddleearth99434frm4
+http://p2.hostingprod.com/@phocuswright.com/events/travdex-04-program.php
+http://p200.ezboard.com/faseasononthebrinkfrm2.showMessageRange?topicID=5.topic&start=21&stop=37
+http://p200.ezboard.com/fecodefense12287frm2.showMessageRange?topicID=130.topic&start=41&stop=56
+http://p200.ezboard.com/fthecivilwarhomepagediscussion2824frm11.showMessageRange?topicID=119.topic&start=81&stop=90
+http://p201.ezboard.com/fthelegendofzeldarpg7366frm20.showMessage?topicID=8.topic
+http://p206.ezboard.com/fthewalkingsitefrm19.showMessage?topicID=9.topic
+http://p209.ezboard.com/faffinityrpgdiscussionfrm9.showMessage?topicID=26.topic
+http://p216.ezboard.com/fhogwartsforeverfrm95
+http://p221.ezboard.com/fsplitscreensadnessfrm7.showMessageRange?topicID=13.topic&start=1&stop=20
+http://p221.ezboard.com/fthehighmiddleagesfrm32.showMessage?topicID=40.topic
+http://p2p.wrox.com/TopicIndex/246.htm
+http://pablo.pernot.free.fr/trucs/Clarksdalelyrics.htm
+http://pacificviews.org/
+http://pacs.petfinder.org/
+http://page.sourceforge.net/vrex.html
+http://pages.abcantique.com/9459/InventoryPage/1614733/1.html
+http://pages.abcantique.com/9459/InventoryPage/1758660/1.html
+http://pages.britishlibrary.net/ahs/castellacontroversy.htm
+http://pages.britishlibrary.net/blwww3/3way/blairitemisogyny.htm
+http://pages.britishlibrary.net/charles.darwin/texts/variation/variation07.html
+http://pages.britishlibrary.net/charles.darwin4/liv_balanidae/balanidae07.html
+http://pages.britishlibrary.net/liam.connell/bais.html
+http://pages.ca.inter.net/~ttoyooka/takashi/trudeau.html
+http://pages.cpsc.ucalgary.ca/~saul/vb_examples/tutorial8/xparant.html
+http://pages.ebay.co.uk/safetycentre/safety_tips.html
+http://pages.ebay.com.au/help/sell/creating-products-templates.html
+http://pages.ebay.com/help/sell/leave-feedback-for-buyer.html
+http://pages.ebay.com/help/sell/second_chance_offer.html
+http://pages.eidosnet.co.uk/~no2labour/
+http://pages.ivillage.com/emptynester12/id13.html
+http://pages.ivillage.com/fredies/id18.html
+http://pages.ivillage.com/healingjourney/
+http://pages.ivillage.com/rootarchive/Epescapefromgarden.html
+http://pages.ivillage.com/winmotion/June2001.html
+http://pages.liveauctions.ebay.com/catalogs/catalog16904.html
+http://pages.liveauctions.ebay.com/catalogs/catalog17401.html
+http://pages.liveauctions.ebay.com/catalogs/catalog17496.html
+http://pages.liveauctions.ebay.com/catalogs/catalog17607.html
+http://pages.prodigy.net/aesir/ww3.htm
+http://pages.prodigy.net/krtq73aa/arms.htm
+http://pages.prodigy.net/krtq73aa/family.htm
+http://pages.prodigy.net/l.hodges/joanne2.htm
+http://pages.prodigy.net/l.hodges/ukraine.htm
+http://pages.prodigy.net/mattgreen/sibling.htm
+http://pages.prodigy.net/mjjsan/FestMisty.html
+http://pages.prodigy.net/mr_art/educators.html
+http://pages.prodigy.net/thomasn528/blog/2005_04_03_newsarcv.html
+http://pages.prodigy.net/thomasn528/blog/newsrackblog.html
+http://pages.slc.edu/~eraymond/ccorner/exchange/clements2.html
+http://pages.slc.edu/~eraymond/ccorner/exchange/hill2.html
+http://pages.sssnet.com/go2erie/calhome.htm
+http://pages.sssnet.com/ohiobar/moment3.htm
+http://pages.stern.nyu.edu/~nroubini/Emu/EMU-NYT997.html
+http://pages.tias.com/6859/PictPage/1921422440.html
+http://pages.tias.com/9034/InventoryPage/1583723/1.html
+http://pages.zdnet.com/rchbrecht/id29.html
+http://pages.zdnet.com/sartre65/gulag/id26.html
+http://pages.zoom.co.uk/netdesign/notesonstc.htm
+http://paincontrolproducts.com/free_cart_ii.htm
+http://paintball.com/pb/forums/index.cfm?fuseaction=read&forum=41&id=92714
+http://paipm.cas.psu.edu/schools/schoolMangm.html
+http://pajk.arh.noaa.gov/lightning.php
+http://pakistanidefenceforum.com/lofiversion/index.php/t46379.html
+http://paktribune.com/news/index.php?id=102433
+http://paleo.anglo-norman.org/law2.html
+http://paler.com/price_comparison.html
+http://palimpsest.lss.wisc.edu/~danaher/metaphor/survey.html
+http://palimpsest.stanford.edu/byauth/trinkley/wildfire.html
+http://palimpsest.stanford.edu/byorg/abbey/an/an10/an10-5/an10-515.html
+http://palimpsest.stanford.edu/byorg/abbey/an/an14/an14-6/an14-615.html
+http://palimpsest.stanford.edu/byorg/abbey/an/an23/an23-5/an23-502.html
+http://palimpsest.stanford.edu/byorg/abbey/ap/ap05/ap05-6/ap05-603.html
+http://palimpsest.stanford.edu/byorg/abbey/napp/facts.html
+http://palimpsest.stanford.edu/byorg/georgia/basics.html
+http://palimpsest.stanford.edu/byorg/lc/massdeac/domach.html
+http://palimpsest.stanford.edu/misc/commercial.html
+http://palimpsest.stanford.edu/waac/wn/wn13/wn13-3/wn13-306.html
+http://palimpsest.stanford.edu/waac/wn/wn19/wn19-2/wn19-208.html
+http://palimpsest.stanford.edu/waac/wn/wn21/wn21-1/wn21-108.html
+http://palipaths.tripod.com/sermon.htm
+http://palmoilis.mpob.gov.my/webpubs/2004-pest.html
+http://pami.uwaterloo.ca/nav.php?site=groups&action=view&gid=asrtdd
+http://pami.uwaterloo.ca/nav.php?site=pub&action=list&researcher=xhyuan
+http://panavox.panaserve.net/index.php?q=module:article,action:view,id:336
+http://pancero.com/Sample_Agenda/Video_Training_Programs/Speaking_Vs_In-Depth_Training/speaking_vs_in-depth_training.html
+http://panchayat.nic.in/kerala.htm
+http://pangaea.org/street_children/latin/mnmmr.htm
+http://pangloss.ucsfmedicalcenter.org/bloodcenters/bcdonationpage.htm
+http://panopticon.csustan.edu/filling/dissertation.ch5.htm
+http://pantransit.reptiles.org/zzz/1998-05-18.html
+http://pao.cnmoc.navy.mil/Educate/zeus/teacher/lesson/social/newspapr.htm
+http://pao.navair.navy.mil/press_releases/index.cfm?fuseaction=press_release_view&Press_release_id=3239&site_id=6
+http://papernapkin.typepad.com/papernapkin/
+http://paperpenalia.com/handwriting.html
+http://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalbrowse&journal_id=306191
+http://parablemania.ektopos.com/archives/2005/05/the_feminist_mi.html
+http://paradigmassociates.org/ParadigmParentsArchives.html
+http://paramita.typepad.com/dharma_forest/2005/04/pope_benedict_x.html
+http://paranormal.about.com/library/blstory_october04_16.htm
+http://parentcenter.babycenter.com/general/preschooler/1390667.html
+http://parentcenter.babycenter.com/general/preschooler/1399336.html
+http://parentcenter.babycenter.com/general/preschooler/1403154.html
+http://parentcenter.babycenter.com/general/preschooler/1406742.html
+http://parentcenter.babycenter.com/general/preschooler/72439.html
+http://parentcenter.babycenter.com/general/preschooler/72465.html
+http://parentcenter.babycenter.com/general/preschooler/72481.html
+http://parentcenter.babycenter.com/general/preschooler/72543.html
+http://parentcenter.babycenter.com/general/preschooler/72607.html
+http://parentcenter.babycenter.com/newpoll/bigkid/gsafety/77238.html
+http://parentcenter.babycenter.com/refcap/bigkid/gpreschool/1382308.html
+http://parentcenter.babycenter.com/refcap/bigkid/gspecialneeds/67393.html
+http://parentcenter.babycenter.com/refcap/preschooler/praising/64583.html
+http://parentcenter.babycenter.com/refcap/preschooler/praising/67698.html
+http://parenting.ivillage.com/
+http://parenting.ivillage.com/author/bio/0,,4rrv_70x1,00.html
+http://parenting.ivillage.com/baby/bhealth/0,,46wf,00.html
+http://parenting.ivillage.com/baby/bsafety/0,,3q6v,00.html
+http://parenting.ivillage.com/baby/bsafety/0,,3q6v-p,00.html
+http://parenting.ivillage.com/gs/gsbehavior/0,,qmlx,00.html
+http://parenting.ivillage.com/mom/structure/0,,3wh3,00.html
+http://parenting.ivillage.com/mom/structure/0,,427j,00.html
+http://parenting.ivillage.com/mom/structure/0,,42q3,00.html
+http://parenting.ivillage.com/newborn/nbreastfeed/0,,3wsl,00.html
+http://parenting.ivillage.com/newborn/topics/0,,4rn6-p4,00.html
+http://parenting.ivillage.com/pregnancy/plabor/0,,midwife_3pfm,00.html
+http://parenting.ivillage.com/pregnancy/plabor/0,,midwife_44gx,00.html
+http://parenting.ivillage.com/pregnancy/plabor/topics/0,,4rrv,00.html
+http://parenting.ivillage.com/teen/teducation/0,,s1lt,00.html
+http://parenting.ivillage.com/tp/tpdevelopment/0,,46tg,00.html
+http://parentingteens.about.com/library/weekly/aa092397.htm
+http://parents.berkeley.edu/FAQ/commercial.html
+http://parents.berkeley.edu/advice/babies/laundry.html
+http://parents.berkeley.edu/advice/family/husbandhelp.html
+http://parents.berkeley.edu/advice/family/teenbrother.html
+http://parents.berkeley.edu/advice/going/leavingkids.html
+http://parents.berkeley.edu/advice/parents/stepgrand.html
+http://parents.berkeley.edu/advice/playing/invitation.html
+http://parents.berkeley.edu/advice/pregnancy/checklist.html
+http://parents.berkeley.edu/advice/school/meetingteachers.html
+http://parents.berkeley.edu/advice/school/preschool_when.html
+http://parents.berkeley.edu/advice/school/starting_early.html
+http://parents.berkeley.edu/advice/sleep/babytroublefalling.html
+http://parents.berkeley.edu/advice/sleep/crib.html
+http://parents.berkeley.edu/advice/sleep/crib2bed.html
+http://parents.berkeley.edu/advice/sleep/extendnap.html
+http://parents.berkeley.edu/advice/teens/boysparents.html
+http://parents.berkeley.edu/advice/teens/teensathome.html
+http://parents.berkeley.edu/recommend/schools/waldorf.html
+http://pareonline.net/getvn.asp?v=4&n=11
+http://pareonline.net/getvn.asp?v=7&n=17
+http://pareonline.net/getvn.asp?v=8&n=22
+http://park.robcol.k12.tr/mun/constitution.html
+http://parkwayreststop.com/
+http://parli.com/main.htm
+http://parliamentofindia.nic.in/ls/debates/vol7p1b.htm
+http://parlinfoweb.aph.gov.au/piweb/view_document.aspx?ID=201805&TABLE=HANSARDS
+http://partners-service.cordis.lu/index.cfm?pgname=Success+Stories
+http://partners.inq7.net/newsbreak/istories/index.php?story_id=21716
+http://partners.inq7.net/newsbreak/istories/index.php?story_id=40755
+http://partners.nytimes.com/books/first/l/lebrecht-music.html
+http://partners.nytimes.com/library/financial/personal/050700personal-privacy.html
+http://partners.nytimes.com/library/tech/99/08/circuits/articles/12keys.html
+http://parts.jpl.nasa.gov/asic/Sect.2.5.html
+http://pasadena.wr.usgs.gov/office/ganderson/es10/lectures/lecture06/lecture06.html
+http://pasquino.blogspot.com/2005/04/from-archives-homage-to-press.html
+http://passmoore.com/titles.php
+http://pat.nol.org/info/PRIVATECARLINESANDAIRCARRIERS.htm
+http://patents.gusmanolaw.com/
+http://patesslinger.com/wakeup/tribart.html
+http://patheticearthlings.com/archives/2003_01.html
+http://pathsoflight.us/musing/index.php
+http://pathstat1.ucop.edu/ag/course_submissions/design_specific.html
+http://pathwaysoflight.org/lessons/51.html
+http://patient.cancerconsultants.com/hodgkins_cancer_news.aspx?id=17757
+http://patient.cancerconsultants.com/stemcell_treatment.aspx?id=942
+http://patients.uptodate.com/abstract.asp?TR=genr_med/31356&viewAbs=5~7~8~9~10&title=5,7-10
+http://patients.uptodate.com/frames.asp?page=topic.asp&file=endo_hor/6525
+http://patients.uptodate.com/frames.asp?page=topic.asp&file=wom_issu/2527
+http://patients.uptodate.com/print.asp?print=true&file=gi_dis/30709
+http://patients.uptodate.com/print.asp?print=true&file=hrt_fail/13549
+http://patients.uptodate.com/topic.asp?file=chd/45506
+http://patients.uptodate.com/topic.asp?file=pulm_inf/8745
+http://patrick.net/housing/crash.html
+http://patriotboy.blogspot.com/
+http://patriotboy.blogspot.com/2005_02_20_patriotboy_archive.html
+http://patriotleague.collegesports.com/sports/m-lacros/spec-rel/061505aaa.html
+http://paul-lehrman.com/insider/2003/08insider.html
+http://paulapeterson.com/Dr_Joe_Champion.html
+http://paulconley.blogspot.com/
+http://paulding.osu.edu/4h/fair/Handbook/handbook.htm
+http://paulorwin.blogspot.com/
+http://paulstudier.com/incometax/taxgo2.htm
+http://paultan.org/
+http://pavlov.net/blog/archives/2002/04/
+http://pawss.hampshire.edu/students/grad/
+http://payquickly.com/chargebacks_and_retrievals.htm
+http://pbackwriter.blogspot.com/
+http://pbahq.smartcampaigns.com/?q=
+http://pbahq.smartcampaigns.com/aggregator?from=35340
+http://pbahq.smartcampaigns.com/index.php?q=node/294
+http://pbahq.smartcampaigns.com/taxonomy/term/93
+http://pbisotopes.ess.sunysb.edu/esp/589_98/leibowitz/Index.htm
+http://pbokelly.blogspot.com/2005/04/seattle-times-business-technology_27.html
+http://pbskids.org/arthur/parentsteachers/schedule/ep_desc1_3.html
+http://pbskids.org/clifford/caregivers/activities/act_106b.html
+http://pbskids.org/clifford/parentsteachers/activities/be_a_good_friend/04_be_a_good_friend.html
+http://pbskids.org/clifford/parentsteachers/activities/play_fair/06_play_fair.html
+http://pbskids.org/dragontales/parentsteachers/episode_descriptions.html
+http://pbskids.org/itsmylife/emotions/death/print_article7.html
+http://pbskids.org/itsmylife/emotions/depression/article6.html
+http://pbskids.org/itsmylife/emotions/depression/print_article6.html
+http://pbskids.org/itsmylife/parents/lesson_plans/dangers_of_drug_abuse.html
+http://pbskids.org/itsmylife/school/teacher/article3.html
+http://pbskids.org/lions/newsletter/dad.html
+http://pbskids.org/lions/words/glass.html
+http://pbskids.org/rogers/parentsteachers/theme/1481_t_act.html
+http://pbskids.org/rogers/parentsteachers/theme/1576_p_act.html
+http://pbskids.org/sesame/caregivers/watch.html
+http://pbskids.org/zoom/activities/sci/coinsorter.html
+http://pbskids.org/zoom/activities/sci/coloringflowers.html
+http://pbskids.org/zoom/activities/sci/papercupwalk.html
+http://pbskids.org/zoom/activities/sci/recyclingpaper.html
+http://pc.gamespy.com/articles/549/549038p1.html
+http://pc.gamespy.com/pc/doom-3-resurrection-of-evil/601519p1.html
+http://pc.gamezone.com/gzreviews/r22041.htm
+http://pc.gamezone.com/gzreviews/r23276.htm
+http://pc.gamezone.com/news/10_13_04_09_39AM.htm
+http://pc.ign.com/
+http://pc.ign.com/articles/160/160584p1.html
+http://pc.ign.com/articles/162/162061p1.html
+http://pc.ign.com/articles/164/164170p1.html
+http://pc.ign.com/articles/164/164270p1.html
+http://pc.ign.com/articles/324/324034p2.html
+http://pc.ign.com/articles/431/431143p1.html
+http://pc.ign.com/articles/523/523604p1.html
+http://pc.ign.com/articles/584/584909p1.html
+http://pc.pickeringcollege.on.ca/faculty/shammell/website/Unit%20Website/03%20Field%20Mapping%20and%20Field%20Strength.htm
+http://pcasacas.org/SPC/spcissues/20.3/wedwick.htm
+http://pcasacas.org/SPC/spcissues/21.1/sauls.htm
+http://pcasacas.org/SPC/spcissues/21.3/hdavis.htm
+http://pclt.cis.yale.edu/pclt/COMM/ETHER.HTM
+http://pcp.lanl.gov/HAPPINES.html
+http://pcpfc.com/common_legal_terms.htm
+http://pcpitstop.ibforums.com/index.php?showtopic=79914
+http://pcpitstop.ibforums.com/index.php?showtopic=79914&view=getlastpost
+http://pcs.mgh.harvard.edu/Caring_Headlines/Archive/HTML/January%203,%202002%20Caring%20Headlines.htm
+http://pcs.mgh.harvard.edu/Caring_Headlines/Archive/HTML/July%2019,%202001%20Caring%20Headlines.htm
+http://pcworld.about.com/
+http://pcworld.about.com/news/Apr182001id47666.htm
+http://pcworld.about.com/news/Feb272002id86243.htm
+http://pcworld.about.com/news/May122004id116106.htm
+http://pcworld.about.com/news/Nov132001id70826.htm
+http://pcworld.com/resource/browse/0,cat,1272,pg,1,00.asp
+http://pd.cpim.org/2004/0118/01182004_h%20s%20surjeet.htm
+http://pd.cpim.org/2004/0411/04112004_Vajpayee-2.htm
+http://pd.cpim.org/2004/0725/07252004_parliament.htm
+http://pd.cpim.org/2004/0815/08152004_sitaram.htm
+http://pd.sparknotes.com/lit/casterbridge/section24.html
+http://pd.sparknotes.com/lit/dracula/section23.html
+http://pd.sparknotes.com/lit/opioneers/section16.html
+http://pd.sparknotes.com/shakespeare/romeojuliet/section9.html
+http://pdamerica.org/articles/events/play_LA-2004-10-18.php
+http://pdg.cecm.sfu.ca/hpcnet/hpn2000/final/
+http://pdixon.blogspot.com/2004_02_06_pdixon_archive.html
+http://pdonline.ascd.org/pd_demo/lesson.cfm?SID=48
+http://pe.usps.gov/text/Pub25/Pub25ch2.htm
+http://pe.usps.gov/text/standardeligibility/
+http://peace.mennolink.org/articles/weldonvictims.html
+http://peaceandjustice.org/article.php?story=20041227083808673
+http://peaceandjustice.org/index.php?topic=otherIssues
+http://peacecorpsonline.org/messages/messages/467/2021974.html
+http://peacefuljustice.caltech.edu/0418/1.shtml
+http://peacehq.tripod.com/peaceporridge2/PP-14.html
+http://peacemaker.zuiken.net/
+http://peaceworks.missouri.org/monitor/2005/spring-summer/5.html
+http://peakoil.blogspot.com/
+http://peakxml.com/archive/2003/11/03/150.aspx
+http://peanutmahoney.blogspot.com/
+http://peasoup.typepad.com/peasoup/2005/01/
+http://pebb.das.state.or.us/DAS/PEBB/eligrulehandbook.shtml
+http://pebbles.yewenyi.net/
+http://peculiar.wcw.net/
+http://ped.eurodyn.com/research/finished/rd_projects_materials-ps-fin.html
+http://pedagogism.blogspot.com/
+http://pediatrics.aappublications.org/cgi/content/full/111/6/1433
+http://pediatrics.about.com/library/blgiving_medicine_children.htm
+http://pedsccm.wustl.edu/EBJ/PROGNOSIS/Bandla-postop_CHD.html
+http://pedsccm.wustl.edu/EBJ/THERAPY/Busund-plasmaphersis.html
+http://peedee.redcross.org/chapter%207.htm
+http://peerspectives.org/ft/index.peer?page=fulltext&storyid=0177
+http://peerspectives.org/index.peer?page=main&storyid=0177
+http://peerspectives.org/index.peer?page=main&storyid=2158
+http://peerspectives.org/pages/printview.peer?type=main&storyid=0177
+http://peerspectives.org/pages/printview.peer?type=main&storyid=2158
+http://pegasus.cc.ucf.edu/~surette/lawenf.html
+http://pegasus.cityofveils.com/sffknow.phtml
+http://pegasus.rutgers.edu/~elflord/unix/bash-tute.html
+http://peggiesplace.gospelcom.net/words188.htm
+http://peixin.blogdrive.com/
+http://pej.org/html/modules.php?op=modload&name=News&file=article&sid=2720
+http://pej.org/html/print.php?sid=2720
+http://pekingduck.org/archives/001102.php
+http://pekingduck.org/archives/002171.php
+http://penelope.uchicago.edu/Thayer/E/Biographical/Diary/edited/1296/28.html
+http://penelope.uchicago.edu/Thayer/E/Gazetteer/Places/Europe/Italy/Lazio/Roma/Rome/Trajans_Column/John_Pollen/Arms_and_Equipment*.html
+http://penguincentral.com/journal-Jul04.html
+http://penguinscience.com/globec.htm
+http://penonfire.blogspot.com/2005/01/does-blogging-make-for-less-real.html
+http://pensieve.thinkingms.com/CommentView,guid,81e20e21-6ec6-4fed-9c89-a5b77d21aec6.aspx
+http://people-press.org/reports/display.php3?PageID=317
+http://people-press.org/reports/display.php3?PageID=879
+http://people.bu.edu/gorelik/Strasbourg_99.htm
+http://people.clarkson.edu/~shrm/membership.htm
+http://people.cs.uchicago.edu/~levow/research.htm
+http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03171.html
+http://people.debian.org/~enrico/survey/survey.php?field=IDF
+http://people.debian.org/~jblache/events/sl2004/
+http://people.freenet.de/patentgeschichte/dickens.htm
+http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/Summary5.html
+http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/finitetopic1/sampldistr.html
+http://people.howstuffworks.com/art.htm
+http://people.ucsc.edu/~boobles/album.php
+http://people.ucsc.edu/~mloik/
+http://people.ucsc.edu/~pasotti/140a/syllabus.htm
+http://people.ucsc.edu/~rosewood/writing/fiction/percytheghost.htm
+http://people.uis.edu/rschr1/onlinelearning/archive/2005_06_12_archive.html
+http://people.w3.org/rishida/scripts/bidi/
+http://pepperspray.lifetips.com/Cat.asp__Q__id__E__59741
+http://pepperspray.lifetips.com/cs/PepperSpray/Carrying-Pepper-Spray-When-and-Where/Tips.htm
+http://percy.leonardslosers.com/LLForm.nsf/0/1058f94dd7c178b485256db2004716a3?OpenDocument
+http://peripherals.about.com/od/cddvdburners/ss/NeroBackup_4.htm
+http://perl.apache.org/docs/1.0/guide/performance.html
+http://perl.plover.com/Questions.html
+http://perldoc.perl.org/perlbug.html
+http://perlmonks.thepen.com/415895.html
+http://perltidy.sourceforge.net/Tidy.html
+http://perlworks.com/papers/overture-click-protection-12_10_03.html
+http://pers-www.wlv.ac.uk/~in2021/friary.htm
+http://perseus.herts.ac.uk/prospectus/faculty_he/dep_hum/mg_humanities_modular/c_eng_lang_communication.cfm
+http://perseus.herts.ac.uk/uhinfo/prospectus/faculty_he/dep_hum/mg_humanities_modular/c_eng_lang_communication.cfm
+http://perso.fraise.net/
+http://personal.ecu.edu/mccartyr/poor-richards.html
+http://personal.fidelity.com/myfidelity/atn/archives/july2004.shtml
+http://personal.fidelity.com/myfidelity/atn/cover.shtml
+http://personal.fidelity.com/webxpress/help/topics/help_definition_m.shtml
+http://personal.law.miami.edu/~froomkin/articles/oceanno.htm
+http://personal.linkline.com/xymox/surnfor/surnam01.htm
+http://personal.macquarie.com.au/personal/access/online_access.htm
+http://personal.nbnet.nb.ca/rmcusack/Story-05.html
+http://personalinsure.about.com/
+http://personalinsure.about.com/od/health/a/aa102604a.htm
+http://personals-elite.com/search-pages/adult-personals.html
+http://personals.yahoo.com/static/success-story_23
+http://personalweb.miningco.com/b/a/142278.htm
+http://personalweb.smcvt.edu/thefort/History/ELMenOnDuty.htm
+http://personnel.ky.gov/info/emphb/leave.htm
+http://perspectives.com/forums/forum5/25716-6.html
+http://pespmc1.vub.ac.be/CLEA/Groups/Progress.html
+http://pespmc1.vub.ac.be/HAPPINES.html
+http://peswiki.com/index.php/Directory:Bedini_SG
+http://peswiki.com/index.php/Main_Page
+http://peteashton.com/01/05/chron.html
+http://peteashton.com/01/07/
+http://peteashton.com/01/07/chron.html
+http://peteashton.com/02/06/chron.html
+http://peteashton.com/02/07/chron.html
+http://peteashton.com/03/06/08/bringing_in_the_shee.html
+http://peteashton.com/04/04/
+http://peteashton.com/04/04/chron.html
+http://peteashton.com/04/05/
+http://peteashton.com/04/05/chron.html
+http://peteashton.com/cat/politics.html
+http://peterdavid.malibulist.com/
+http://peterdavid.malibulist.com/archives/000778.html
+http://peterdavid.malibulist.com/archives/001891.html
+http://petergreenaway.co.uk/dearphone.htm
+http://petermulhern.typepad.com/
+http://peterthink.blogs.com/
+http://peterthink.blogs.com/thinking/
+http://peterthink.blogs.com/thinking/2004/09/tips_for_pitchi.html
+http://peterthink.blogs.com/thinking/design/
+http://peterwestpublicrelations.blogspot.com/
+http://petesbloggerama.blogspot.com/2005/04/aspnet-20-speed-tests-wheres-fire.html
+http://petit.sebastien.free.fr/cutler.html
+http://petit.sebastien.free.fr/denio.html
+http://petplace.netscape.com/Articles/artShow.asp?artID=2583
+http://petplace.netscape.com/IntLearning/IntLearningResults.asp?cboAnimalType=4&optTopic=487&parentTopic=374
+http://petplace.netscape.com/articles/artPrinterFriendly.asp?conID=19752
+http://petplace.netscape.com/articles/artPrinterFriendly.asp?conID=22388
+http://petplace.netscape.com/articles/artShow.asp?artID=1218
+http://petplace.netscape.com/articles/artShow.asp?artID=2415
+http://petrarch.petersadlon.com/submissions/Alfrey.html
+http://pets.yahoo.com/pets/dogs/hn/caring_for_your_older_dog
+http://petsafe-warehouse.com/
+http://petshopgirl.blogsome.com/
+http://pewforum.org/docs/index.php?DocID=26
+http://pewforum.org/events/index.php?EventID=28
+http://pewforum.org/events/index.php?EventID=37
+http://pewforum.org/events/index.php?EventID=68
+http://pewforum.org/press/index.php?ReleaseID=13
+http://pfranc.com/projects/g45contr/status/v960219.htm
+http://pg.sitebase.net/global/aai/pages/content/faq.html
+http://pghbridges.com/articles/
+http://pghbridges.com/articles/pressroto_nevilleisland_i79/
+http://pghbridges.com/pittsburghW/0584-4480/eaststreetbr.htm
+http://pgmeter.sourceforge.net/pgmeter.htm
+http://phark.typepad.com/phark/2004/01/the_mysterious_.html
+http://pharmacy.dal.ca/pharmacy_1822.html
+http://pharmainfo.net/index.php?module=subjects&func=viewpage&pageid=89
+http://pharmainfo.net/subjects-viewpage-pageid-89.html
+http://pharmalicensing.com/features/disp/1117721311_429f12df5c8ee
+http://pharyngula.org/comments/426_0_1_0_C/
+http://pharyngula.org/index/pirate/comments/be_one_with_your_buddha_nature_my_son/
+http://pharyngula.org/index/weblog/comments/creationism_in_york_pennsylvania/
+http://pharyngula.org/index/weblog/comments/more_details_of_cephalopod_dinner_etiquette/
+http://pharyngula.org/index/weblog/comments/the_proper_reverence_due_those_who_have_gone_before/
+http://pharyngula.org/index/weblog/comments/torture_powerline_style/
+http://phaseit.net/claird/comp.lang.tcl/tk_option.tutorial
+http://pheedo.com/pollingstation/archives/2005/01/were_the_black.php
+http://phil.web.arizona.edu/faculty/extra/rhealey_realtime.htm
+http://philadelphia.about.com/cs/sports/a/smarty_jones_a.htm
+http://philadelphia.extension.psu.edu/Horticulture/UrbanGardenNewsletter_fall_01.html
+http://philgaming.com/boards/show.php/act/ST/f/5/t/78
+http://philip.greenspun.com/bboard/q-and-a-fetch-msg?msg_id=0004qU
+http://philip.greenspun.com/bg/
+http://philip.greenspun.com/materialism/kitchen
+http://philip.greenspun.com/photography/building-a-digital-slr-system
+http://philip.greenspun.com/research/year-2000
+http://philip.greenspun.com/tcl/introduction.adp
+http://philippinejobs.ph/companies/2004_05_12_jobs
+http://phillip.l.sublett.com/family/RedSublett.htm
+http://phillips.blogs.com/goc/2005/03/product_endorse.html
+http://philobiblion.blogspot.com/2005/03/carnivalesque-no-4.html
+http://philosophy.hku.hk/think/logic/basic.php
+http://philosophy.hku.hk/think/meaning/nsc.php
+http://philosophy.osu.edu/prospect.html
+http://philringnalda.com/blog/2005/04/got_bandwidth.php
+http://phoenicia.org/wreck.html
+http://phoenix.about.com/cs/events/a/festivals03.htm
+http://phoenix.bizjournals.com/phoenix/stories/2003/12/29/editorial3.html
+http://phoenix.gov/BUDGET/budmsg00.html
+http://phoenix.gov/DEVELOP/dabdec99.html
+http://phoenix.gov/NEWSREL/hlthfair.html
+http://phoenix.swarthmore.edu/2004-04-08/living/13930
+http://phoenix.swarthmore.edu/2005-02-17/news/14681
+http://phonebook.superpages.com/yellowpages/C-Heavy+Duty+Trucking/S-PA/T-Philadelphia/
+http://phonebook.superpages.com/yellowpages/C-Organ+Donation+&+Tissue+Banks/S-OH/T-Cincinnati/
+http://phonebook.superpages.com/yellowpages/C-Radio+Stations/S-MN/T-Marshall/
+http://phong.com/chunks/mysticism.php
+http://photography.about.com/
+http://photography.about.com/cs/digital/a/040703_3.htm
+http://photojpn.org/istore/shipping.php
+http://photomatt.net/2003/01/24/the-blogging-software-dilemma/
+http://photomatt.net/2005/04/01/a-response/
+http://php.dsnsports.com/lifesaving/content.php?name=medical&file=medical_policy_07
+http://phx.corporate-ir.net/phoenix.zhtml?c=132215&p=irol-newsArticle&ID=645478&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=147716&p=irol-newsArticle&ID=523070&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=147716&p=irol-newsArticle_Print&ID=523070&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=64256&p=irol-newsArticle&ID=705178&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=64256&p=irol-newsArticle_Print&ID=705178&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=71352&p=irol-newsArticle&ID=705740&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=79757&p=irol-IRHome
+http://phx.corporate-ir.net/phoenix.zhtml?c=80927&p=irol-newsArticle&t=Regular&id=637714&
+http://phx.corporate-ir.net/phoenix.zhtml?c=93082&p=irol-newsArticle&t=Regular&id=470501&
+http://phx.corporate-ir.net/phoenix.zhtml?c=93290&p=irol-newsArticle&ID=138710&highlight=
+http://phx.corporate-ir.net/phoenix.zhtml?c=93290&p=irol-newsArticle_Print&ID=138710&highlight=
+http://phys4.harvard.edu/~wilson/resource_letter.html
+http://physicaltherapy.org/packer/backpain/
+http://physics.bu.edu/gradreq.html
+http://physics.iop.org/IOP/Press/PR7603.html
+http://physics.nist.gov/GenInt/Time/early.html
+http://physics.nist.gov/TechAct/Div840/director.html
+http://physics.uchicago.edu/instruction/general.html
+http://physics.ucsd.edu/~iksgrp/HighTemp.html
+http://physics.usask.ca/~angie/ep414/labmanual/GNUdoc/make/make_17.html
+http://physics.webplasma.com/physics01.html
+http://physics.webplasma.com/physics09.html
+http://physicsweb.org/article/news/6/4/12
+http://physicsweb.org/article/world/11/11/10
+http://physicsweb.org/article/world/12/2/8
+http://physicsweb.org/article/world/13/11/8
+http://physicsweb.org/article/world/13/11/9
+http://physicsweb.org/articles/world/12/2/8/1
+http://physicsweb.org/articles/world/13/11/9/1
+http://physicsweb.org/articles/world/17/10/2
+http://physicsweb.org/resources/
+http://physnet2.pa.msu.edu/workbook/m401.html
+http://physorg.com/news2703.html
+http://physorg.com/news2845.html
+http://physorg.com/news2861.html
+http://physuna.phs.uc.edu/suranyi/IntroQM/Conceptual/session-s3a.html
+http://pi0657.kub.nl/~signll/cfp.html
+http://pianoeducation.org/pnojudge.html
+http://pianoeducation.org/pnolearn.html
+http://pianoeducation.org/pnosoftr.html
+http://pianoeducation.org/pnousoft.html
+http://pib.nic.in/archive/bud9899/98budget994.html
+http://pidp.eastwestcenter.org/pireport/2005/February/02-02-06.htm
+http://pidp.eastwestcenter.org/pireport/2005/February/tcp-cnmi.htm
+http://pierre.typepad.com/pierre/2004/01/dont_cut_my_tax.html
+http://pigpog.com/sam/blog/
+http://pilger.carlton.com/forums?mid=20163
+http://pilger.carlton.com/globalisation/economy
+http://pilgrimproduction.net/sacredharp/union/whenwordsfail.html
+http://pinayexpat.net/
+http://pinayexpat.net/?p=165
+http://pinkadelic.typepad.com/body/
+http://pinker.wjh.harvard.edu/articles/media/2005_02_14_newrepublic.html
+http://pinkmonkey.com/booknotes/monkeynotes/pmBeanTrees21.asp
+http://pinr.com/report.php?ac=view_printable&report_id=249&language_id=1
+http://pinr.com/report.php?ac=view_report&report_id=249&language_id=1
+http://pipe.laying.fitter.jobs.jobsearchsite.com/
+http://pipka.org/blog/
+http://pirate.planetarion.com/showthread.php?goto=lastpost&t=182109
+http://pirate.planetarion.com/showthread.php?t=182109&page=4
+http://pirt.asu.edu/detail_10.asp?ID=1929
+http://pirt.asu.edu/detail_10.asp?ID=1929&offset=-1
+http://pisa.ucsd.edu/cse125/2004/cse125g5/final.html
+http://pith.org/pith/?20000512
+http://pith.org/pith/?20000810
+http://pith.org/pith/?20000825
+http://pith.org/pith/?20001019
+http://pittsburgh.about.com/cs/pennsylvania/a/amish_2.htm
+http://pittsburgh.bizjournals.com/pittsburgh/stories/2004/05/17/daily29.html
+http://pittsburgh.indymedia.org/news/2005/06/18874.php
+http://pittsburghendthewar.org/mamb/index.php?option=com_content&task=view&id=52&Itemid=2
+http://pittsburghlive.com/x/dailycourier/progress2004/s_184775.html
+http://pittsburghlive.com/x/tribune-review/trib/regional/s_339167.html
+http://pittsburghskiclub.org/racing.htm
+http://piug.derwent.co.uk/archive/piug/0218.html
+http://pizzatoday.com/frontofthehouse_articles.shtml?article=MjIxOXN1cGVyMjIxNnNlY3JldDIyMjM=
+http://pla.blogspot.com/2003_07_20_pla_archive.html
+http://planet.tvi.edu/perkins/infotech/Infotech%20Advisiory%20Committee%20-%20Gallery%20Walk%20summary.htm
+http://planetmagrathea.com/longreview1.html
+http://planetsean.blogspot.com/archives/2004_05_23_planetsean_archive.html
+http://planetside.stratics.com/content/gameplay/outfits/index.php
+http://planning.city.cleveland.oh.us/cwp/landuse.htm
+http://planning.co.cuyahoga.oh.us/blog/2005_04_01_archive.html
+http://planningcommission.nic.in/reports/genrep/arep9099/ar98-99.htm
+http://plantpath.osu.edu/faculty/ellis.php
+http://plasticbugs.com/
+http://plastics.2456.com/eng/epub/details.asp?epubiid=3&id=9751
+http://platform.blogs.com/passionofthepresent/2004/07/update_talks_ha.html
+http://platinum.freetranslation.com/help_and_faq.asp
+http://plato-dialogues.org/works.htm
+http://plato.acadiau.ca/courses/biol/Microbiology/transfer.htm
+http://plato.stanford.edu/entries/beauvoir/
+http://plato.stanford.edu/entries/brentano-judgement/
+http://plato.stanford.edu/entries/contractarianism-contemporary/
+http://plato.stanford.edu/entries/darwinism/
+http://plato.stanford.edu/entries/doing-allowing/
+http://plato.stanford.edu/entries/events/
+http://plato.stanford.edu/entries/evolutionary-genetics/
+http://plato.stanford.edu/entries/federalism/
+http://plato.stanford.edu/entries/film/
+http://plato.stanford.edu/entries/freedom-speech/
+http://plato.stanford.edu/entries/freewill/
+http://plato.stanford.edu/entries/game-theory/
+http://plato.stanford.edu/entries/godwin/
+http://plato.stanford.edu/entries/heaven-hell/
+http://plato.stanford.edu/entries/hobbes-moral/
+http://plato.stanford.edu/entries/legal-econanalysis/
+http://plato.stanford.edu/entries/legal-econanalysis/notes.html
+http://plato.stanford.edu/entries/legal-rights/
+http://plato.stanford.edu/entries/montesquieu/
+http://plato.stanford.edu/entries/moral-responsibility/
+http://plato.stanford.edu/entries/necessary-sufficient/
+http://plato.stanford.edu/entries/patrizi/
+http://plato.stanford.edu/entries/peter-spain/
+http://plato.stanford.edu/entries/principia-mathematica/
+http://plato.stanford.edu/entries/private-language/
+http://plato.stanford.edu/entries/reference/
+http://plato.stanford.edu/entries/rights-human/
+http://plato.stanford.edu/entries/scottish-19th/
+http://plato.stanford.edu/entries/set-theory/
+http://plato.stanford.edu/entries/whewell/
+http://plato.thefreelibrary.com/Republic/2-23
+http://plausible.custompublish.com/cparticle203175-5911.html
+http://plaza.ufl.edu/brusky/finalresearchpaper.html
+http://plaza.ufl.edu/chanji/MUS1500.htm
+http://pleasantonrage.org/
+http://pless.princeton.edu/faq.html
+http://plig.org/things/beatles.html
+http://plone.urbanforestrysouth.org/Resources/Library/Citation.2004-05-24.5019
+http://pluckypunk.blogspot.com/2005_03_01_pluckypunk_archive.html
+http://plumer.blogspot.com/
+http://pluralsight.com/blogs/craig/archive/2004/09/15/2274.aspx
+http://plus.maths.org/issue14/features/smith/
+http://plus.maths.org/issue27/interview/
+http://plus.maths.org/issue30/features/wilson/
+http://plus.maths.org/issue32/interview/
+http://plus.maths.org/people/
+http://pm.gc.ca/eng/news.asp?id=177
+http://pm.gc.ca/eng/news.asp?id=266
+http://pm.gc.ca/eng/news.asp?id=379
+http://pm.gc.ca/eng/news.asp?id=476
+http://pm.gc.ca/eng/news.asp?id=501
+http://pm.gc.ca/eng/sft-ddt.asp
+http://pm.gc.ca/eng/sft-ddt.asp?id=2
+http://pm.typepad.com/professional_marketing_bl/
+http://pmb.co.za/business/classifieds.asp?classType=classifieds
+http://pmbryant.typepad.com/b_and_b/2005/02/cloudy_skies.html
+http://pmd.sourceforge.net/rules/design.html
+http://pmep.cce.cornell.edu/profiles/miscpesticides/methylchloride-xanthangum/pigments/pigment-prop-tol.html
+http://pmj.bmjjournals.com/cgi/content/full/76/897/426
+http://pmj.bmjjournals.com/cgi/content/full/78/924/573
+http://pmo-sun.uoregon.edu/~pmo/class_outreach_gen_overview_nov03.html
+http://podaac.jpl.nasa.gov/sst/
+http://podiumgames.net/eternaldaughter/enemies.htm
+http://poetryclub.blogdrive.com/
+http://point.blogs.com/
+http://poisonivy.aesir.com/view/control.html
+http://pokedream.com/games/fireleaf/linking/
+http://pokerintheweeds.blogspot.com/2004_07_01_pokerintheweeds_archive.html
+http://poland.indymedia.org/pl/2005/06/14496.shtml
+http://polaris.gseis.ucla.edu/pagre/
+http://polaris.gseis.ucla.edu/pagre/conservatism.html
+http://polaris.gseis.ucla.edu/pagre/notes/98-8-12.html
+http://polaris.gseis.ucla.edu/pagre/organizing.html
+http://policechiefmagazine.org/magazine/index.cfm?fuseaction=display_arch&article_id=336&issue_id=72004
+http://policies.memphis.edu/UM1598.htm
+http://policy.fws.gov/621fw3.html
+http://policy.greenparty.org.uk/mfss/agric.html
+http://policy.greenparty.org.uk/mfss/industry.html
+http://policy.ssa.gov/poms.NSF/LNX/0424515055
+http://polihale.com/display/60186
+http://politedissent.com/archives/223
+http://politicalbetting.com/index.php/archives/2004/09/02/can-blair-do-it-without-the-chattering-classes/
+http://politicalbetting.com/index.php/archives/2004/09/email_form.php?p=324
+http://politicalbetting.com/index.php/archives/2005/01/07/general-election-competition-two-days-to-go/
+http://politicalbetting.com/index.php/archives/2005/01/21/index.php?p=621
+http://politicalbetting.com/index.php/archives/2005/02/02/index.php?p=621
+http://politicalbetting.com/index.php/archives/2005/02/02/scottish-boundary-changes-finalised/
+http://politicalbetting.com/index.php/archives/2005/02/04/could-the-scottish-regiment-issue-cost-labour-seats/
+http://politicalbetting.com/index.php/archives/2005/06/08/populus-boost-for-clarke/index.php?p=974
+http://politicalbetting.com/index.php/archives/2005/06/17/index.php?p=974
+http://politicalbetting.com/index.php/archives/2005/06/email_form.php?p=974
+http://politicalgraveyard.com/special/attempts.html
+http://politicalhumor.about.com/library/bldailyfeed3.htm
+http://politicalhumor.about.com/library/blschwarzeneggerjokes.htm
+http://politicalhumor.about.com/od/multimedia/v/colinpowellymca_p.htm
+http://politicalusa.com/columnists/andersen/andersen_042.htm
+http://politicalwire.com/
+http://politics.guardian.co.uk/apathy/comment/0,12822,1205037,00.html
+http://politics.guardian.co.uk/cherie/story/0,12713,857761,00.html
+http://politics.guardian.co.uk/columnist/story/0,9321,1129889,00.html
+http://politics.guardian.co.uk/columnist/story/0,9321,1231268,00.html
+http://politics.guardian.co.uk/columnist/story/0,9321,1496386,00.html
+http://politics.guardian.co.uk/conservatives/story/0,9061,1479572,00.html
+http://politics.guardian.co.uk/constitution/story/0,9061,1424086,00.html
+http://politics.guardian.co.uk/economics/comment/0,11268,1288180,00.html
+http://politics.guardian.co.uk/economics/story/0,11268,1515042,00.html
+http://politics.guardian.co.uk/egovernment/story/0,12767,1272498,00.html
+http://politics.guardian.co.uk/election/comment/0,15803,1475139,00.html
+http://politics.guardian.co.uk/election/story/0,15803,1457721,00.html
+http://politics.guardian.co.uk/election/story/0,15803,1473993,00.html
+http://politics.guardian.co.uk/election/story/0,15803,1477676,00.html
+http://politics.guardian.co.uk/election/story/0,15803,1477853,00.html
+http://politics.guardian.co.uk/election/story/0,15803,1478484,00.html
+http://politics.guardian.co.uk/election2005/policyguide/environment.html
+http://politics.guardian.co.uk/elections2004/story/0,14549,1238319,00.html
+http://politics.guardian.co.uk/esf/0,15212,1326215,00.html
+http://politics.guardian.co.uk/eu/comment/0,9236,1496387,00.html
+http://politics.guardian.co.uk/eu/story/0,9061,1494445,00.html
+http://politics.guardian.co.uk/euro/story/0,9061,972414,00.html
+http://politics.guardian.co.uk/foreignaffairs/story/0,11538,1322563,00.html
+http://politics.guardian.co.uk/gall/0,9352,802530,00.html
+http://politics.guardian.co.uk/green/story/0,9061,1500648,00.html
+http://politics.guardian.co.uk/interviews/story/0,11660,1473994,00.html
+http://politics.guardian.co.uk/iraq/story/0,12956,1170635,00.html
+http://politics.guardian.co.uk/kelly/0,13747,1002607,00.html
+http://politics.guardian.co.uk/labour/story/0,9061,1484106,00.html
+http://politics.guardian.co.uk/labour2001/story/0,1414,562006,00.html
+http://politics.guardian.co.uk/labour2002/0,12294,765672,00.html
+http://politics.guardian.co.uk/labour2004/story/0,14991,1313138,00.html
+http://politics.guardian.co.uk/labour2004/story/0,14991,1313223,00.html
+http://politics.guardian.co.uk/libdems/story/0,9061,1457722,00.html
+http://politics.guardian.co.uk/lords/story/0,9061,858034,00.html
+http://politics.guardian.co.uk/media/story/0,12123,1500222,00.html
+http://politics.guardian.co.uk/politicspast/story/0,9061,1410907,00.html
+http://politics.guardian.co.uk/polls/story/0,11030,1313082,00.html
+http://politics.guardian.co.uk/tories2003/0,13807,1017052,00.html
+http://politics.guardian.co.uk/tories2003/story/0,13807,1057994,00.html
+http://politics.guardian.co.uk/tories2003/story/0,13807,1058763,00.html
+http://politics.onlinebizplanner.com/flying-debris.htm
+http://politicspa.com/features/mostpoliticallypowerfulwomen.htm
+http://polyticks.com/home/Talora/Dragon/Mad.htm
+http://pondside.uchicago.edu/ecol-evol/faculty/bergelson_j.html
+http://poneill.ucd.ie/imc/Playbank.htm
+http://poolmgr.informatik.uni-freiburg.de/extern/doc/make/make_17.html
+http://poorman.blogspot.com/
+http://popconnect.org/Action_Alerts/alert458.html
+http://popeyeafrica.blogspot.com/2004_12_05_popeyeafrica_archive.html
+http://popshot.net/features/000063.html
+http://popularandcompetent.blognz.com/
+http://popularandcompetent.blognz.com/archives/2005_02.html
+http://porktornado.diaryland.com/albumcover.html
+http://porktornado.diaryland.com/neighbor.html
+http://porsche.tobe.com/
+http://port80.blogsome.com/2004/06/
+http://portal.acm.org/citation.cfm?doid=501978.501979
+http://portal.acm.org/citation.cfm?id=1052829.1052843
+http://portal.acm.org/citation.cfm?id=1063979.1063983
+http://portal.acm.org/citation.cfm?id=1065895.1065906
+http://portal.acm.org/citation.cfm?id=120319.120323
+http://portal.acm.org/citation.cfm?id=168430
+http://portal.acm.org/citation.cfm?id=203330.203347
+http://portal.acm.org/citation.cfm?id=203345
+http://portal.acm.org/citation.cfm?id=203347
+http://portal.acm.org/citation.cfm?id=223268
+http://portal.acm.org/citation.cfm?id=272329
+http://portal.acm.org/citation.cfm?id=29023
+http://portal.acm.org/citation.cfm?id=305786.305842
+http://portal.acm.org/citation.cfm?id=356612.356615
+http://portal.acm.org/citation.cfm?id=356615
+http://portal.acm.org/citation.cfm?id=359842.359848
+http://portal.acm.org/citation.cfm?id=582152
+http://portal.acm.org/citation.cfm?id=628306.628532
+http://portal.acm.org/citation.cfm?id=634067.634146
+http://portal.acm.org/citation.cfm?id=634146
+http://portal.acm.org/citation.cfm?id=67449.67516
+http://portal.acm.org/citation.cfm?id=67450.67516
+http://portal.acm.org/citation.cfm?id=774159
+http://portal.acm.org/citation.cfm?id=83644
+http://portal.acm.org/ft_gateway.cfm?id=1037316&type=pdf
+http://portal.acm.org/ft_gateway.cfm?id=218347&type=pdf
+http://portal.acm.org/ft_gateway.cfm?id=230513&type=pdf
+http://portal.acm.org/ft_gateway.cfm?id=354682&type=pdf
+http://portal.acm.org/ft_gateway.cfm?id=602883&type=pdf
+http://portal.acm.org/ft_gateway.cfm?id=985718&type=pdf
+http://portal.opera.com/search/dir.dml?cat=140566
+http://portal.sfusd.edu/template/default.cfm?page=board_policies
+http://portal.telegraph.co.uk/news/main.jhtml?xml=/news/2005/02/04/nrack104.xml&sSheet=/news/2005/02/04/ixhome.html
+http://portal.unesco.org/ci/en/ev.php-URL_ID=17482&URL_DO=DO_TOPIC&URL_SECTION=201.html
+http://portal.unesco.org/education/en/ev.php-URL_ID=10318&URL_DO=DO_PRINTPAGE&URL_SECTION=201.html
+http://portal.unesco.org/education/en/ev.php-URL_ID=10318&URL_DO=DO_TOPIC&URL_SECTION=201.html
+http://portal.wikinerds.org/styleguide
+http://portalsanmiguel.com/lifestyle/residents-speak.html
+http://portland.indymedia.org/en/2004/10/300649.shtml
+http://portland.indymedia.org/en/2005/04/315763.shtml
+http://portland.indymedia.org/en/feature/archive30.shtml
+http://portlandor.about.com/od/tvcelebs/a/amrace5epi1.htm
+http://portugal-info.net/costaprata/coimbra.htm
+http://post-dogmatist-arts.net/museum/lingo/document17.htm
+http://post.queensu.ca/~jameswc/Design/backgroundinterests.htm
+http://postcard-direct.com/
+http://postharvest.tfrec.wsu.edu/pgDisplay.php?article=N4I1A
+http://postsecret.blogspot.com/
+http://potrace.sourceforge.net/potrace.html
+http://povonline.com/cols/COL018.htm
+http://povonline.com/cols/COL157.htm
+http://powayusd.sdcoe.k12.ca.us/projects/ms/scifair.htm
+http://powellassoc.com/contact.html
+http://powereality.tripod.com/capitalpunishment/
+http://powerlineblog.com/archives/001884.php
+http://powerlineblog.com/archives/009062.php
+http://powerlineblog.com/archives/009397.php
+http://powerlineblog.com/archives/010601.php
+http://powerlineblog.com/archives/2005_02.php
+http://powerlineblog.com/archives/2005_03.php
+http://powerlineblog.com/archives/2005_04.php
+http://powermarketers.netcontentinc.net/newsreader.asp?ppa=8kowu%5DZkoieiqqTUjf%7D38%7Dbfek%5C!
+http://powermin.nic.in/acts_notification/electricity_act2003/appellate_tribunal_%20electricity.htm
+http://powermin.nic.in/acts_notification/electricity_act2003/offences_%20penalties.htm
+http://powermin.nic.in/acts_notification/energy_conservation_act/chapter9.htm
+http://powersitesystem.com/
+http://powwow-online.tripod.com/urbanlegends.htm
+http://poynter.indiana.edu/tre/kdp-writing.html
+http://poynter.org/column.asp?id=32&aid=48098
+http://poynter.org/content/content_view.asp?id=5882
+http://ppbsa.org/cam/sabattis/Trek.htm
+http://ppc.thomson.com/ppcNet/index.cfm?txtFuse=dspShellContent&fuseAction=DISPLAY&numContentID=87443&numTaxonomyID=220
+http://ppc.uiowa.edu/driving-assessment/2001/Summaries/Driving%20Assessment%20Papers/53_Staplin_Loren.htm
+http://ppewww.ph.gla.ac.uk/~flavell/marmalade.html
+http://ppewww.ph.gla.ac.uk/~flavell/www/
+http://ppm.intergraph.com/insight/5-2/4-taw.asp
+http://pptkids.org/
+http://pr.caltech.edu/events/caltech_nobel/
+http://pr.caltech.edu/periodicals/336/articles/Volume%202/02-21-02/davidson.html
+http://pr.caltech.edu/periodicals/CaltechNews/articles/v37/caltech911.html
+http://pr.gallaudet.edu/dpn/issues/THEWEEK/whysuccess.html
+http://practice.findlaw.com/20questions-1003.html
+http://practice.findlaw.com/archives/20questions_1202.html
+http://practice.findlaw.com/archives/editorscorner_0403.html
+http://practice.findlaw.com/archives/litcost_1102.html
+http://practice.findlaw.com/archives/tooltalk_1002.html
+http://practice.findlaw.com/archives/tooltalk_1202.html
+http://practice.findlaw.com/feature-0505.html
+http://prairiehome.publicradio.org/
+http://prairiehome.publicradio.org/features/deskofgk/990906_time.shtml
+http://prairiehome.publicradio.org/features/hodgepodge/19951028_writers/
+http://prants.paulnyujeo.com/
+http://pratie.blogspot.com/2005/03/where-did-this-come-from-part-two.html
+http://praxeology.net/GM-PS.htm
+http://praxeology.net/unblog05-04.htm
+http://prayerfoundation.org/lay_monastic_community_portland.htm
+http://pregnancy.about.com/
+http://pregnancy.about.com/b/archives.htm
+http://pregnancy.parenthood.com/visitor.html
+http://pregnancytoday.com/reference/articles/waitingtoeat.htm
+http://preposterousuniverse.blogspot.com/2004/10/tangled-bank-13.html
+http://preposterousuniverse.blogspot.com/2004_04_01_preposterousuniverse_archive.html
+http://prepsports.stltoday.com/ssi/prep/stories2005.nsf/football/story/5E8D1E05FA34DA1286256F750014D480?OpenDocument&Headline=%3Cfont+size%3D0%3EFootball%3C%2Ffont+size%3E%3Cbr%3EParkway+Central's+Scott
+http://presenter.openworld.com/
+http://presentsimple.blogspot.com/
+http://president.arizona.edu/initiatives/focused-excellence/changing-directions/historic-opportunity/
+http://president.osu.edu/speeches/trustees_02-04-05.php
+http://president.osu.edu/speeches/trustees_09-22-04.php
+http://presidioworldcollege.org/mba_curriculum.php
+http://press-pubs.uchicago.edu/founders/documents/a1_8_12s19.html
+http://press-pubs.uchicago.edu/founders/documents/a1_8_12s23.html
+http://press-pubs.uchicago.edu/founders/documents/a1_8_18s11.html
+http://press-pubs.uchicago.edu/founders/documents/bill_of_rightss7.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch15s34.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch17s22.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch18s5.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2I.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2s12.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2s24.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2s25.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2s5.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch2s6.html
+http://press-pubs.uchicago.edu/founders/documents/v1ch7s1.html
+http://press-pubs.uchicago.edu/founders/print_documents/v1ch18s5.html
+http://press-pubs.uchicago.edu/founders/print_documents/v1ch2I.html
+http://press-pubs.uchicago.edu/founders/print_documents/v1ch2s12.html
+http://press.arrivenet.com/bus/article.php/549825.html
+http://press.arrivenet.com/nfp/article.php/649715.html
+http://press.georgetown.edu/checklist.html
+http://press.hotwire.com/index.php/press_releases/pr2001/4.html
+http://press.jrc.it/NewsBrief/alertedition/en/Transport.html
+http://press.nokia.com/PR/200109/834494_5.html
+http://press.oreilly.com/pub/pr/1066
+http://press.oreilly.com/pub/pr/1343
+http://pressherald.mainetoday.com/news/state/050609redtide.shtml
+http://pressherald.mainetoday.com/specialrpts/sanford/san43.htm
+http://pressroom.hallmark.com/val_day_universal-symbol.html
+http://preteenagerstoday.com/resources/articles/mamasboy.htm
+http://prezkennedy.org/
+http://primal-page.com/gerald.htm
+http://primary2000.ss.ca.gov/VoterGuide/Propositions/18text.htm
+http://primates.ximian.com/~federico/news-2001-05.html
+http://primates.ximian.com/~federico/news-2002-05.html
+http://primeministers.naa.gov.au/meetpm.asp?pmId=23&pageName=inoffice
+http://primermovie.com/phpBB2/viewtopic.php?t=628
+http://primes.utm.edu/largest.html
+http://primetimetv.about.com/library/bler9episode17.htm
+http://primetimetv.about.com/library/bler9episode19.htm
+http://print.bankruptcy.findlaw.com/bankruptcy/debt_options/bankruptcy_overview_overview.html
+http://print.bankruptcy.findlaw.com/bankruptcy/debt_options/debt_options_bankruptcy.html
+http://print.jobfind.com/news/career_connection/cannon10162001.htm
+http://prior-learning.athabascau.ca/cgi-bin/PLA/fullcritview.cgi?CriteriaTableID=v1&ProgName=UC%20Counselling%20Women&ProgID=14
+http://prisonerjw7874.blogspot.com/
+http://prisonministry.net/brcbc
+http://prisonplanet.com/Pre_Attack_Memo_Cited_Bin_Laden.htm
+http://prisonplanet.com/president_holds_town_hall_forum.html
+http://privacy.yahoo.com/privacy/ca/
+http://privacypolicy.umusic.com/
+http://privatecitizen.com/tcpa.htm
+http://privateschool.about.com/
+http://privateschool.about.com/cs/choosingaschool/a/rightchoice_2.htm
+http://privateschool.about.com/cs/forteachers/a/beating_2.htm
+http://privateschool.about.com/od/identifyingschools/qt/criteria.htm
+http://prl.jpl.nasa.gov/projects/lemur1/technology/lemur_vision.html
+http://prochoiceaction.org/can/notice-description.tcl?newsletter_id=3677045
+http://productfinder.gcn.com/search/keyword/gcn/Biometrics%20Conference/Biometrics%20Conference
+http://productfinder.gcn.com/search/keyword/gcn/Congressional%20Conference/Congressional%20Conference
+http://productfinder.gcn.com/search/keyword/gcn/Government%20Technology%20Conference/Government%20Technology%20Conference
+http://productfinder.gcn.com/search/keyword/gcn/How%20Government%20Has%20Helped%20With%20Public%20Safety/How%20Government%20Has%20Helped%20With%20Public%20Safety
+http://productfinder.gcn.com/search/keyword/gcn/Medication%20Compliance%20Expert%20Conference%20Software/Medication%20Compliance%20Expert%20Conference%20Software
+http://productfinder.gcn.com/search/keyword/gcn/Medication%20Compliance%20Expert%20Conference/Medication%20Compliance%20Expert%20Conference
+http://productfinder.infoworld.com/infoworld/search/viewabstract/60217/index.jsp
+http://productfinder.infoworld.com/search/keyword/infoworld/Web%20Builder%20Conference/Web%20Builder%20Conference
+http://productfinder.washingtontechnology.com/search/keyword/washingtontechnology/Congressional%20Conference%20Software/Congressional%20Conference%20Software
+http://productfinder.washingtontechnology.com/search/keyword/washingtontechnology/Defense%20Supply%20Service-%20Washington%20Statement%20Of%20Work%20Software/Defense%20Supply%20Service-%20Washington%20Statement%20Of%20Work%20Software
+http://productfinder.washingtontechnology.com/search/keyword/washingtontechnology/Government%20Business%20Process%20Management/Government%20Business%20Process%20Management
+http://productivity-software.com/aetracker/
+http://productivity-software.com/sbtracker/
+http://products.consumerguide.com/articles/view.epub?articleId=100016
+http://products.consumerguide.com/reviews/product.epub?productId=23675
+http://products.consumerguide.com/reviews/product.epub?productId=25954
+http://products.ecommerce-guide.com/networking/tools/1105379646.html
+http://products.thalesnavigation.com/en/products/aboutgps/rtk.asp
+http://products.thalesnavigation.com/en/solutions/marine/hydrography.asp
+http://profblogger.blogspot.com/
+http://profdev.lp.findlaw.com/column/article1.html
+http://profdev.lp.findlaw.com/column/column18.html
+http://professionalslacker.blogspot.com/2004_07_01_professionalslacker_archive.html
+http://profs.lp.findlaw.com/bankruptcy/bankruptcy_7.html
+http://profs.lp.findlaw.com/c_enforce/c_enforce_1.html
+http://profs.lp.findlaw.com/privacy/1b.html
+http://programs.gradschools.com/east/health_services_research.html
+http://programs.gradschools.com/west/applied_psychology.html
+http://progressivegoldbeta.blogspot.com/
+http://proicehockey.about.com/
+http://proicehockey.about.com/cs/2003stanleycup/a/Devils_win.htm
+http://proicehockey.about.com/cs/2004stanleycup/a/round_two_prevu_2.htm
+http://proicehockey.about.com/cs/stanleycupbunker/a/2004_contenders.htm
+http://project-care.org/stress.htm
+http://project-pat.letras.terra.com.br/letras/183399/
+http://projectaon.proboards30.com/index.cgi?action=gotopost&board=open&thread=1091331521&post=1118652807
+http://projectparadox.f2o.org/thoughts/sayings.php
+http://projects-2005.jrc.cec.eu.int/show.gx?Object.object_id=PROJECTS000000000001A2ED
+http://projects.is.asu.edu/pipermail/hpn/2001-March/003164.html
+http://projects.jrc.cec.eu.int/show.gx?Object.object_id=PROJECTS000000000001AB36
+http://projects.o-hand.com/matchbox/
+http://projects.puremagic.com/greylisting/whitepaper.html
+http://projects.vassar.edu/1896/whatsthematter.html
+http://proliberty.com/observer/19990305.htm
+http://proliberty.com/observer/20030104.htm
+http://prome.snu.ac.kr/~igucom/activities.html
+http://promontoryartists.org/lookingcloser/movie%20reviews%5CA-G%5Cenglishpatient.htm
+http://promontoryartists.org/lookingcloser/movie%20reviews%5CH-P%5Clittlesecrets.htm
+http://promote-opensource.org/
+http://proofingsolutions.efi.com/index.php?sv=127
+http://property.timesonline.co.uk/article/0,,14029-1469514,00.html
+http://property.timesonline.co.uk/article/0,,14049-1665898,00.html
+http://property.uk.freeads.net/floor.htm
+http://prorev.com/2005/06/glass-wall-of-media-coverage.htm
+http://prorev.com/freedc.htm
+http://prorev.com/thingstodo.htm
+http://prototypo.blogspot.com/
+http://provost.ucsd.edu/muir/commencement/faq.htm
+http://proxy.espn.go.com/chat/chatESPN?event_id=6615
+http://proxy.espn.go.com/et/corr/corrview?id=367&leagueCup=ENG.1&cc=5901
+http://prstudies.typepad.com/weblog/books/
+http://prtl.uhcl.edu/pls/portal/url/ITEM/80B7C2937E3846539941B871066DC402
+http://pruffle.mit.edu/~ccarter/tms_evolver_paper/tms_paper/node4.html
+http://prwdot.org/?p=archives/cat_married_life
+http://prwdot.org/archives/cat_married_life.html
+http://ps.psychiatryonline.org/cgi/content/full/49/9/1187
+http://ps.psychiatryonline.org/cgi/content/full/55/1/19
+http://ps.psychiatryonline.org/cgi/content/full/55/4/445
+http://ps2.gamespy.com/
+http://ps2.gamespy.com/playstation-2/the-suffering-ties-that-bind/588689p1.html
+http://ps2.gamezone.com/gzreviews/r23068.htm
+http://ps2.ign.com/articles/084/084291p1.html
+http://ps2.ign.com/articles/164/164008p1.html
+http://ps2.ign.com/articles/165/165003p1.html
+http://ps2.ign.com/articles/166/166438p1.html
+http://psa-rising.com/caplinks/livingwell.htm
+http://psa-rising.com/med/painmanage/radiotherapy_for_pain.html
+http://psac.uchicago.edu/blogs/libby.html
+http://psalm121.ca/BlessingsOfChristmas/troubleinn.html
+http://psalm121.ca/april2004.html
+http://psalm121.ca/prayer.html
+http://psbg.emusician.com/ar/emusic_good_references/
+http://psc.cyoconnor.tafe.wa.edu.au/student/search/ModuleDetail.asp?ID=17537
+http://psci-com.ac.uk/browse/detail/e9c744bcaa70221c7bc1aad781b42252.html
+http://psci-com.ac.uk/browse/detail/ec9e7bc17af3a1122f25f9ed35a3d7d3.html
+http://psidonline.isr.umich.edu/Guide/Quality/q_inc_data.html
+http://psnet.ahrq.gov/glossary.aspx
+http://psp.gamezone.com/gamesell/p25466.htm
+http://psy.otago.ac.nz/epc/abstracts/abstractsB.htm
+http://psy1.clarion.edu/mm/General/Methods/Methods.html
+http://psych.athabascau.ca/html/Cade205/Manual/method.shtml
+http://psych.fullerton.edu/rlippa/gender/study.htm
+http://psych0sis.pansitan.net/2005/05/i-heard-one-of-most-touching-lines.html
+http://psycharts.com/products.htm
+http://psychclassics.yorku.ca/Buchner/quarter.htm
+http://psychclassics.yorku.ca/James/Principles/wozniak.htm
+http://psychclassics.yorku.ca/Maslow/motivation.htm
+http://psychematters.com/papers/hopper3.htm
+http://psychology.ucdavis.edu/rainbow/html/comeout1.html
+http://psychology.unn.ac.uk/nick/EPgloss.htm
+http://psychology.wichita.edu/surl/usabilitynews/3S/websurvey.htm
+http://psychology.wichita.edu/surl/usabilitynews/62/whitespace.htm
+http://psychsoc.gerontologyjournals.org/cgi/content/full/60/1/P34
+http://pt.radicaldesigns.org/article.php?id=541
+http://pt.unlv.edu/admission.html
+http://ptgptb.org/0025/retro.html
+http://ptgptb.org/0026/genetics.html
+http://ptgptb.org/0026/theory101-01.html
+http://ptolemy.tlg.uci.edu/~opoudjis/unicode/unicode_adscript.html
+http://ptrc.oldscollege.ab.ca/1997_ar/9614.html
+http://pub.ucsf.edu/magazine/200412/genetic.html
+http://pub188.ezboard.com/bhogwartsschoolofwitchcraftandwizardry11065
+http://pub19.bravenet.com/guestbook/show.php?usernum=1556501612&vid=
+http://pub51.ezboard.com/fgreensborohockeyfrm7.showMessage?topicID=148.topic
+http://pub60.ezboard.com/fourchildrenleftbehindfrm17.showMessage?topicID=147.topic
+http://pub60.ezboard.com/fourchildrenleftbehindfrm22.showMessage?topicID=37.topic
+http://pubadvocate.nyc.gov/policy/prescription_drugs.html
+http://pubcrawler.org/2005/05/17/life-is-the-bed-in-which-we-all-lie/
+http://pubcrawler.org/archives/2002_06.html
+http://pubcrawler.org/archives/cat_features.html
+http://pubdb3.census.gov/macro/032004/pov/toc.htm
+http://publib.boulder.ibm.com/html/as400/v4r5/ic2924/info/db2/rbafymst02.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.pgmgd.doc/cpprog02.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.tutorials.rse.doc/turserpg02.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.tutorials.webtoolsrpg.doc/webtoolsrpg02.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.varpg.doc/fvdeguib02.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.varpg.doc/sc09244902.htm
+http://publib.boulder.ibm.com/infocenter/iadthelp/topic/com.ibm.etools.iseries.varpg.doc/sc09245102.htm
+http://publib.boulder.ibm.com/infocenter/ids9help/topic/com.ibm.sqls.doc/sqls02.htm
+http://publib.boulder.ibm.com/infocenter/pdthelp/topic/com.ibm.debugtool5.doc/eqa5ug0202.htm
+http://publib.boulder.ibm.com/infocenter/pdthelp/topic/com.ibm.entcobol3.doc/rlpsacce.htm
+http://publib.boulder.ibm.com/infocenter/pdthelp/topic/com.ibm.filemanager4.doc/db2/fmnu2d0302.htm
+http://publib.boulder.ibm.com/infocenter/pdthelp/topic/com.ibm.filemanager5.doc/db2/fmnu2e0102.htm
+http://publib.boulder.ibm.com/infocenter/tiv3help/topic/com.ibm.tivoli.tdwi.doc/insmst02.htm
+http://publib.boulder.ibm.com/infocenter/tivihelp/topic/com.ibm.itsm390n.doc/anrmgd5302.htm
+http://publib.boulder.ibm.com/infocenter/tivihelp/topic/com.ibm.itsm400.doc/anrpgd52202.htm
+http://publib.boulder.ibm.com/infocenter/tpfhelp/v1r3m0/topic/com.ibm.tpf.doc_put.19/gtpg2/gtpg2m3x.htm
+http://publib.boulder.ibm.com/infocenter/tpfhelp/v1r3m0/topic/com.ibm.tpf.doc_put.19/gtps2/gtps2m3i.htm
+http://publib.boulder.ibm.com/infocenter/txen/topic/com.ibm.txseries510.doc/erzhae0002.htm
+http://publib.boulder.ibm.com/infocenter/wc56help/topic/com.ibm.commerce.business_process.doc/concepts/phitype.htm
+http://publib.boulder.ibm.com/iseries/v5r1/ic2924/info/sqlp/rbafymst02.htm
+http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/sqlp/rbafymst02.htm
+http://publib16.boulder.ibm.com/pseries/en_US/libs/commtrf2/ioctl.htm
+http://public.afosi.amc.af.mil/global/may_jun_03/junior_agents.asp
+http://public.fecava.org/pub/index.php?session=&main=6&sub=4
+http://public.scott.amc.af.mil/Review/Private%20FA/
+http://public.travis.amc.af.mil/dgmc/mission.htm
+http://publicaddress.net/default,hardnews.sm
+http://publication-store.gamestalks.com/bollywood_girl_indian.html
+http://publication-store.gamestalks.com/delhi_escorts.html
+http://publicdomainprogress.info/
+http://publicinterest.blogspot.com/
+http://publicpolicy.pepperdine.edu/davenportinstitute/reports/center/center1.html
+http://publicrelations.meetup.com/25/
+http://pubpages.unh.edu/~wad/HTMA/HTMA10
+http://pubs.acs.org/cen/coverstory/8029/8029finechemicals.html
+http://pubs.acs.org/cen/coverstory/8049/8049homeland.html
+http://pubs.acs.org/cen/coverstory/8108/8108energy.html
+http://pubs.acs.org/cen/coverstory/8130/8130drugdiscovery1.html
+http://pubs.acs.org/cen/coverstory/8141/8141pharmaceuticals.html
+http://pubs.acs.org/cen/coverstory/8141/8141pharmaceuticals4.html
+http://pubs.acs.org/cen/coverstory/83/8307biology.html
+http://pubs.acs.org/cen/employment/8215/8215employment.html
+http://pubs.acs.org/cen/employment/8249/8249employment.html
+http://pubs.acs.org/cen/employment/8249/print/8249employment.html
+http://pubs.acs.org/cgi-bin/jtextd?esthag/asap/html/es9902726.html
+http://pubs.acs.org/hotartcl/chemtech/97/jan/bad.html
+http://pubs.caes.uga.edu/caespubs/pubcd/b1096-w.html
+http://pubs.logicalexpressions.com/Pub0009/LPMArticle.asp?ID=493
+http://pubs.socialistreviewindex.org.uk/isj69/trudell.htm
+http://pubs.socialistreviewindex.org.uk/sr197/notes.htm
+http://pubs.socialistreviewindex.org.uk/sr261/notes.htm
+http://pubs.socialistreviewindex.org.uk/sr267/letters.htm
+http://pubs.socialistreviewindex.org.uk/sr279/rose.htm
+http://pubs.usgs.gov/fs/2002/fs034-02/
+http://pubs.usgs.gov/fs/2003/fs014-03/
+http://pubs.usgs.gov/gip/continents/
+http://pubs.usgs.gov/of/2005/1165/508OF05-1165.html
+http://pubsociology.typepad.com/
+http://pubweb.northwestern.edu/~srmina/palindrome.html
+http://puffin.creighton.edu/jesuit/relations/relations_35.html
+http://puffin.creighton.edu/lakota/teaching.html
+http://puffin.ptialaska.net/~pharmacy/looking.htm
+http://pulse.tiaonline.org/article.cfm?id=269
+http://pulse.tiaonline.org/article.cfm?id=458
+http://pulse.tiaonline.org/pda.cfm?ID=458
+http://pulserecording.com/college/home.asp
+http://pulverblog.pulver.com/archives/002189.html
+http://puma.kvcc.edu/midwest/modules/economics/ECO201TS.htm
+http://punditwatch.blogspot.com/
+http://punjabgovt.nic.in/Industry/ind553.htm
+http://pupils.newstrove.com/
+http://puravida.typepad.com/only_connect/2004/10/talking_points_.html
+http://purchase.cmsmerchant.com/modules.php?op=modload&name=FAQ&file=index&myfaq=yes&id_cat=1
+http://puregold.cooltrap.com/rm031103.html
+http://purl.oclc.org/norc/dlib/m-89.htm
+http://pygmalionproject.tripod.com/true.html
+http://pyobjc.sourceforge.net/doc/tutorial.php
+http://python.binarycompass.org/peps/pep-0310.html
+http://q.queso.com/archives/000948
+http://q.queso.com/archives/001299
+http://q.queso.com/archives/2002_04
+http://qcpages.qc.cuny.edu/newlaborforum/html/9_article79.html
+http://qcpages.qc.cuny.edu/~efernand/CUNY2002/program/absts/109.htm
+http://qd.typepad.com/10/2005/01/
+http://qd.typepad.com/33/2005/06/
+http://qd.typepad.com/34/2005/04/
+http://qd.typepad.com/5/2005/02/particle_produc.html
+http://qhr.sagepub.com/cgi/content/abstract/14/2/204
+http://qmulweb.my-ehost.com/qmul/courses/study_degree_london_uk.php?dept_id=4
+http://qmulweb.my-ehost.com/qmul/courses/study_degree_london_uk.php?dept_id=4&email=1
+http://qnc.queensu.ca/queenscentre/Oct_04/history.html
+http://quadrant4.org/docs/consent.html
+http://quaker.org.nz/faq.htm
+http://queenofsky.journalspace.com/
+http://quentintait.myknet.org/
+http://queribus.free.fr/Astronomie/edebutants.html
+http://queserasera.org/archives/2003_10.html
+http://quest.arc.nasa.gov/events/connect/2001/
+http://quest.arc.nasa.gov/mars/teachers/tg/program5/5.2.html
+http://quest.nasa.gov/projects/space/iss2001/transcripts/april/virtual_tour_4-4-02.html
+http://question-everything.mahost.org/Philosophy/eden.html
+http://questioning.org/grazing.html
+http://questmodels.com/
+http://quicksitebuilder.cnet.com/fleisherfamily/booksbycraigsfleisher/id2.html
+http://quickstart.clari.net/qs_se/webnews/wed/ai/Spga-lgns-rydercuprentals.RnFR_DO8.html
+http://quietearth.freeyellow.com/
+http://quietfm.com/jcblog/?cat=3
+http://quietmountain.org/dharmacenters/buddhadendo/wheel_of_life.htm
+http://quietwaterweb.com/archives/000986.html
+http://quilting.about.com/library/reviews/bl_qltshop_la.htm
+http://quilting.about.com/library/reviews/bl_qltshop_pa.htm
+http://quinnell.us/methods/misperception.html
+http://quirkyalone.net/qa/
+http://quitsmoking.about.com/cs/ourstories/a/karenquit.htm
+http://quitsmoking.about.com/cs/preparation/a/resolve.htm
+http://quixote.rincondelvago.com/1_37/
+http://quizilla.com/users/17catherines/quizzes/What%20Christmas%20Carol%20are%20you%3F/
+http://quizilla.com/users/Hinote/quizzes/Staring%20Across%20the%20Commonroom%20((Sirius%20Black))/
+http://quizilla.com/users/Hinote/quizzes/Staring%20Across%20the%20Commonroom:%20Knives%20and%20Hiding%20Spots/
+http://quizilla.com/users/Hinote/quizzes/Staring%20Across%20the%20Commonroom:%20Lost%20and%20Found:%20Moony%20((Sirius%20Black))/
+http://quizilla.com/users/Hinote/quizzes/Staring%20Across%20the%20Commonroom:%20Snap%20Back%20to%20Reality%20((Sirius%20Black))/
+http://quizilla.com/users/Jackob/quizzes/Which%20Firefly%20character%20are%20you%3F/
+http://quizilla.com/users/Love-The-Dark/quizzes/%7C%7CForced%20To%20Be%20Mrs.Malfoy...%7C%7CLife%20Isn't%20A%20Game%20Katherin!!%7C%7CPart5%7C%7C/
+http://quizilla.com/users/griffin-tamer/quizzes/Teen%20Titans:%207th%20Titan%20Rising-%20Part%205-%20Seeing%20is%20Believing/
+http://quizilla.com/users/justsugar/quizzes/The%20Benefits%20Of%20Falling%20For%20Your%20Friend%2025(The%20Countdown)/
+http://quizilla.com/users/mishcka/quizzes/What%20are%20you%20wearing%3F/
+http://quizilla.com/users/torinaura/quizzes/would%20a%20nice%20guy,%20%20badass,%20punk,%20or%20a%20goth%20boy%20go%20for%20you%208/
+http://quotations.about.com/cs/inspirationquotes/a/Birthday1.htm
+http://quote.the-insuranceshop.co.uk/
+http://quotes.prolix.nu/Drugs/Alchohol/
+http://qyrang.org/battle.htm
+http://r.webring.com/hub?ring=allansgreatestbe
+http://r0.unctad.org/conference/address/malaysia17_e.htm
+http://r0.unctad.org/ecommerce/ecommerce_en/freeopen_en.htm
+http://r0.unctad.org/infocomm/anglais/platinum/uses.htm
+http://ra.microslu.washington.edu/aboutus/location.html
+http://ra.nilenet.com/~wlg/Rocky/news.htm
+http://rab.spriproducts.com/warranty.cfm
+http://rabbitblog.com/
+http://rabi.phys.virginia.edu/105/1999/PS5a.html
+http://rac.alionscience.com/DATA/JOURNAL/2ND_Q1994/reliability_tech.html
+http://rac.org/Articles/index.cfm?id=1075&pge_prg_id=5594&pge_id=1001
+http://rac.org/Articles/index.cfm?id=973&pge_prg_id=5217
+http://rac.org/_kd/go.cfm?destination=ShowItem&Item_ID=959
+http://raceagainstwaste.ie/take_action/at_home/recycle/
+http://racerelations.about.com/cs/affirmativeaction/a/aareview.htm
+http://racerelations.about.com/library/weekly/aa041400a.htm
+http://racingarticles.com/article_racing-74.html
+http://racingsecrets.com/drag_race_finish_line.shtml
+http://rad.usuhs.mil/medpix/medpix.html?mode=single&comebackto=mode%3Dgeo_browse&recnum=2759
+http://rad.usuhs.mil/medpix/medpix.html?mode=single&recnum=2759
+http://radar.oreilly.com/archives/2005/06/supernova_2005.html
+http://radar.smh.com.au/archives/2004/11/the_final_chapt.html
+http://radar.smh.com.au/archives/2004/12/keeping_up_with.html
+http://radar.smh.com.au/archives/2005/05/the_story_shot.html
+http://radaronline.com/fresh-intelligence/index.php
+http://radfilms.com/huac_study_guide.htm
+http://radhome.gsfc.nasa.gov/radhome/papers/seeca4.htm
+http://radiantlife.org/articles/ec_lesson_plan_intrst_cntr.cfm
+http://radicalacademy.com/adiphilcritextrareality.htm
+http://radicalacademy.com/adiphilislamessay3.htm
+http://radicalacademy.com/adlerideatruth1.htm
+http://radicalacademy.com/philjames.htm
+http://radicalpedagogy.icaap.org/content/issue4_2/03_hampsten.html
+http://radio.about.com/b/a/015459.htm
+http://radio.about.com/b/a/2003_08_05.htm
+http://radio.about.com/library/showprepsecrets/blshowprepsecrets6a.htm
+http://radio.blogware.com/blog/DigitalRadio
+http://radio.blogware.com/blog/_archives/2004/10/17/161695.html
+http://radio.weblogs.com/0001011/
+http://radio.weblogs.com/0001011/2003/02/23.html
+http://radio.weblogs.com/0001011/2004/03/13.html
+http://radio.weblogs.com/0001011/2004/03/20.html
+http://radio.weblogs.com/0001011/2004/04/25.html
+http://radio.weblogs.com/0001011/2004/05/12.html
+http://radio.weblogs.com/0001011/2004/10/07.html
+http://radio.weblogs.com/0001011/2004/11/28.html
+http://radio.weblogs.com/0001011/2005/04/23.html
+http://radio.weblogs.com/0001011/2005/06/03.html
+http://radio.weblogs.com/0100148/
+http://radio.weblogs.com/0100191/
+http://radio.weblogs.com/0101747/
+http://radio.weblogs.com/0103213/
+http://radio.weblogs.com/0105455/2002/04/15.html
+http://radio.weblogs.com/0105910/categories/sidebars/
+http://radio.weblogs.com/0106327/2005/01/20.html
+http://radio.weblogs.com/0106698/2003/09/17.html
+http://radio.weblogs.com/0107127/stories/2002/07/17/collaborationOnlyAWordUntilYouHaveExperiencedIt.html
+http://radio.weblogs.com/0107127/stories/2003/01/26/marmotOnHierarchywhitehall.html
+http://radio.weblogs.com/0107233/2004/12/02.html
+http://radio.weblogs.com/0107233/2004/12/03.html
+http://radio.weblogs.com/0107233/2004/12/09.html
+http://radio.weblogs.com/0107233/2004/12/13.html
+http://radio.weblogs.com/0107233/categories/thanks/2005/01/03.html
+http://radio.weblogs.com/0107946/
+http://radio.weblogs.com/0109150/2002/11/24.html
+http://radio.weblogs.com/0110187/
+http://radio.weblogs.com/0110772/stories/2002/10/03/personalKnowledgePublishingAndItsUsesInResearch.html
+http://radio.weblogs.com/0110793/
+http://radio.weblogs.com/0111165/
+http://radio.weblogs.com/0119080/2004/04/29.html
+http://radio.weblogs.com/0119318/stories/2003/03/08/myAccutaneExperience.html
+http://radio.weblogs.com/0128341/stories/2004/12/21/jinnisJournal122004.html
+http://radio.weblogs.com/0129278/2004/03/
+http://radiodx.com/spdxr/bill_marsh.htm
+http://radiographics.rsnajnls.org/cgi/content/full/21/2/463
+http://radiographics.rsnajnls.org/cgi/content/full/24/4/1185
+http://radioinsidescoop.com/mt-posts-archive/000175.html
+http://radiology.unm.edu/Residency/TeachingBlocks/
+http://raibledesigns.com/page/rd/20040403
+http://raisingcanes.net/RC3.html
+http://rajkblogs.blogspot.com/
+http://rajkblogs.blogspot.com/2004_07_01_rajkblogs_archive.html
+http://rajyasabha.nic.in/rsdebate/deb_ndx/204/17032005/6to7.htm
+http://ramchandraj.tripod.com/london.htm
+http://rams.atmos.colostate.edu/cotton/archives/travels/kenyasoaring.html
+http://random.average-bear.com/archive/2004_01.html
+http://randomwalks.com/drublood/
+http://randomwalks.com/drublood/archives/016496.html
+http://randomwalks.com/drublood/archives/021387.html
+http://randomwalks.com/drublood/archives/2003_04.html
+http://randomwalks.com/drublood/archives/2003_07.html
+http://randomwalks.com/drublood/archives/2005_06.html
+http://ranprieur.com/essays/dropout.html
+http://ranprieur.com/essays/habit.html
+http://rantastic.spacemonkeys.ca/
+http://rapidnet.com/~jbeard/bdm/Letter/v9n3.htm
+http://rapidttp.com/milhist/vol102rt.html
+http://rateyourmusic.com/lists/list_view/list_id_is_13993
+http://rateyourmusic.com/view_album_details/album_id_is_25613
+http://rateyourmusic.com/view_album_details/album_id_is_4653
+http://ratings.designerz.com/?ratingfor_item=
+http://ratings2004.healthcarecommission.org.uk/help.asp
+http://rationalreasons.blogspot.com/2005/06/in-defence-of-public-universal-single.html
+http://raven.theraider.net/archive/index.php/t-6952.html
+http://ravenstonepress.com/katietch.html
+http://ravingatheist.com/archives/2003/06/mother_of_god_graces_hospital_window_as_caucasian_chemical_stain.php
+http://rawstory.com/exclusives/byrne/secret_service_gannon_424.htm
+http://rawstory.com/news/2005/Congressman_Conyers_hammers_the_Washington_Posts_D_0617.html
+http://rawstory.com/news/2005/Nonpartisan_government_watchdog_to_investigate_White_House_contracts_0621.html
+http://rawstory.com/news/2005/index.php?p=72
+http://raysweb.net/banff/pages/page.html
+http://raysweb.net/specialplaces/pages-species-ej/dwindlinglegacy-ej.html
+http://raywelch.com/
+http://rbg-web2.rbge.org.uk/bbs/Bryodiversity/recorders.htm
+http://rcgroups.com/links/index.php?t=article&cat=237&id=4152
+http://rconversation.blogs.com/rconversation/2005/06/confirmed_all_t.html
+http://rcpoet.com/issue14.html
+http://rcpoet.com/issue15.html
+http://rcpoet.com/issue16.html
+http://rcrec.org/r/index.php?module=ContentExpress&func=display&meid=78&ceid=44
+http://rcs.law.emory.edu/rcs/titles/i/i_.htm
+http://rcs.law.emory.edu/rcs/titles/i/im.htm
+http://rcs.law.emory.edu/rcs/titles/s/si.htm
+http://rd1.surfernetwork.com/snfaq.htm
+http://reachingforljc.proboards19.com/index.cgi?action=display&board=gendisarea&num=1057896066&start=60
+http://reachingforljc.proboards19.com/index.cgi?board=gendisarea&num=1057896066&action=display&start=60
+http://reactor-core.org/ogg-tagging.html
+http://readingpost.com/bush_kerry_one.html
+http://reagle.org/joseph/1996/poetry/poems-s1998.html
+http://real-estate-agents.com/tips/interior/floor-plan.shtml
+http://realbig.com/miata/miata/1998-09/
+http://realestate.escapeartist.com/P-25849
+http://realestate.escapeartist.com/P-27397
+http://realestate.yahoo.com/realestate/story.html?s=n/inman/realestate/20050620/20050620301
+http://reality-check.org/salon-bin/salon_bios.cgi?salon=Dialogue+Group+10
+http://reality-check.org/salon-bin/salon_bios.cgi?salon=Dialogue+Group+7
+http://reality-check.org/salon-bin/salon_bios.cgi?salon=Dialogue+Group+8
+http://reality-hammer.livejournal.com/
+http://realitydeviant.chimerical.org/
+http://realityj2ee.iterationtwo.com/downloads.jsp
+http://realmagick.com/articles/58/2058.html
+http://realtegan.blogspot.com/
+http://realtytimes.com/printrtpages/20021029_sellerlies.htm
+http://realtytimes.com/printrtpages/20041231_askquestions.htm
+http://realtytimes.com/rtapages/20020604_salesmeeting.htm
+http://realtytimes.com/rtapages/20050505_fdicfocusesonissues.htm
+http://realtytimes.com/rtcpages/19991224_arms.htm
+http://realtytimes.com/rtcpages/20011025_calmart.htm
+http://realtytimes.com/rtcpages/20011218_wrapup.htm
+http://realtytimes.com/rtcpages/20020924_septrup.htm
+http://realtytimes.com/rtcpages/20030630_losing.htm
+http://realtytimes.com/rtcpages/20030930_septrup.htm
+http://realtytimes.com/rtcpages/20040209_divorce.htm
+http://realtytimes.com/rtcpages/20040315_greenspan.htm
+http://reason.com/0001/fe.ml.rampaging.html
+http://reason.com/0010/fe.fg.science.shtml
+http://reason.com/0104/int.sk.sex.shtml
+http://reason.com/0106/fe.bs.city.shtml
+http://reason.com/0108/cr.jw.film.shtml
+http://reason.com/0110/fe.dp.schools.shtml
+http://reason.com/0204/fe.cs.asthma.shtml
+http://reason.com/0207/fe.jj.stand.shtml
+http://reason.com/0311/fe.jb.kroger.shtml
+http://reason.com/7507/int_reagan.shtml
+http://reason.com/9510/GARVINfeat.html
+http://reason.com/9911/fe.ap.falling.html
+http://reason.com/previousissues.shtml
+http://reasonsyouwillhateme.blogspot.com/
+http://rebecca.hitherby.com/archives/000606.php
+http://rebeccablood.net/
+http://rebelpixel.com/archives/2004/10/13/the-saddest-lines/
+http://recenter.tamu.edu/mreports02/fortworth16.asp
+http://recenter.tamu.edu/news/recon012105.html
+http://recenter.tamu.edu/news/recon031105.html
+http://recenter.tamu.edu/news/recon070604.html
+http://recenter.tamu.edu/news/recon102204.html
+http://recenter.tamu.edu/tgrande/vol10-1/1600.html
+http://recently.rainweb.net/hive/_Politics_/
+http://recipestoday.com/resources/articles/cholesterol.htm
+http://recklessme.blogspot.com/
+http://reclaimdemocracy.org/weekly_2003/computers_dumbingdown_kids.html
+http://reclaimdemocracy.org/weekly_article/a_senate_majority_perishes.html
+http://recognizethesigns.tripod.com/
+http://record.wustl.edu/2002/04-12-02/endowedprofessors.html
+http://record.wustl.edu/2003/2-14-03/washington_people.html
+http://record.wustl.edu/archive/1999/03-25-99/people.html
+http://recording.org/ftopict-24892.html
+http://records.fai.org/general_aviation/
+http://recruit.sciencemag.org/feature/advice/nw-2000jan.shl
+http://recruit.sciencemag.org/feature/advice/writing_postings.shl
+http://recruit.sciencemag.org/feature/cperspec/biosci.shl
+http://recycling.stanford.edu/5r/government.html
+http://redbetweenthelines.modblog.com/
+http://redbetweenthelines.modblog.com/core.mod?show=main
+http://redbirdblogs.typepad.com/red_bird_rising/2004/11/on_why_the_elec.html
+http://redbook.cs.berkeley.edu/redbook3/lec28.html
+http://redclay.chattablogs.com/
+http://redclay.chattablogs.com/archives/020769.html
+http://redclayramblers.tripod.com/stories.htm
+http://redcouch.typepad.com/weblog/
+http://redcouch.typepad.com/weblog/2005/02/chapter_1.html
+http://redcross.org/article/0,1072,0_312_4050,00.html
+http://redcross.org/article/printer/0,1075,0_312_4050,00.html
+http://redesenaccion.org/Disparities/
+http://redhat.meetup.com/create/
+http://redmindbluestate.blogspot.com/
+http://redmondmag.com/columns/article.asp?EditorialsID=282
+http://redmondmag.com/columns/article.asp?EditorialsID=590
+http://redmondmag.com/features/article.asp?EditorialsID=2
+http://redmondmag.com/features/article.asp?EditorialsID=439
+http://redmondmag.com/features/article.asp?editorialsid=485
+http://redmondmag.com/forums/forum_posts.asp?tid=1433&pn=1&get=last
+http://redonion.blogspot.com/2005_03_27_redonion_archive.html
+http://reds.enquirer.com/2001/01/21/red_reds_have_to_draw.html
+http://redsox.bostonherald.com/redSox/view.bg?articleid=91323&format=text
+http://redsox.mostvaluablenetwork.com/index.php?p=399
+http://redstatediaries.blogspot.com/
+http://redstatelaw.blogspot.com/
+http://redstatemoron.typepad.com/
+http://redstatemoron.typepad.com/red_state_moron/
+http://redstatemoron.typepad.com/red_state_moron/2005/06/cord_blood_bank.html
+http://redstaterant.com/
+http://redstaterebels.typepad.com/
+http://redstateson.blogspot.com/
+http://redtag.onthetop.com/
+http://reedfloren.com/stocks/view.php?kwd=content/August%201st.htm
+http://ref.web.cern.ch/ref/CERN/CNL/2001/001/tcpip/
+http://ref.web.cern.ch/ref/CERN/CNL/2001/001/tcpip/Pr/
+http://ref.web.cern.ch/ref/CERN/CNL/2001/002/cern-computing/
+http://reformclub.blogspot.com/2005/06/forgotten-mcqueen-film.html
+http://reformed-theology.org/html/books/wall_street/chapter_05.htm
+http://regionalhelpwanted.com/BrowseAds/index.cfm?SN=170
+http://regionalhelpwanted.com/BrowseAds/index.cfm?SN=177
+http://regionals.burningman.com/network_letter.html
+http://regions.ivcf.org/prayer/3713
+http://regionsofmind.blog-city.com/index.cfm?m=10&y=2003
+http://regionsofmind.blogspot.com/2002_09_15_regionsofmind_archive.html
+http://register.mnaidsproject.org/site/PageServer?pagename=PI_04_Spring
+http://registeredrep.com/mag/finance_psychology_money/
+http://regnumcrucis.blogspot.com/2004_03_14_regnumcrucis_archive.html
+http://reincarnation2002.com/chapter_33.htm
+http://reinhold.typepad.com/
+http://rel.intersil.com/docs/lexicon/S.html
+http://relativelyabsolute.com/archives/2004/07/
+http://relativelyabsolute.com/index.php
+http://relativity.livingreviews.org/Articles/lrr-2004-1/articlesu3.html
+http://relativity.livingreviews.org/Articles/lrr-2004-4/articlesu24.html
+http://releases.usnewswire.com/GetRelease.asp?id=42372
+http://religion-of-one.org/defeated-by-terror.htm
+http://religiousmovements.lib.virginia.edu/lectures/influenc.html
+http://religioustolerance.org/hom_umc7.htm
+http://reluctant-messenger.com/9kalams.htm
+http://reluctant-messenger.com/HWA/Mystery/
+http://reluctant-messenger.com/essene/gospel_10.htm
+http://reluctant-messenger.com/history08.htm
+http://remedyfind.com/rm-3295-Bextra.asp
+http://remorselessapology.blogspot.com/2004_05_09_remorselessapology_archive.html
+http://remtek.com/arms/hk/mil/mp5/choice/coang.htm
+http://renaissancegurl.blogspot.com/
+http://renegaderebbetzin.blogspot.com/2004/09/sitting-standing-front-back-talking-in.html
+http://rengelink.textdriven.com/blog/index.php?id=2
+http://repairfaq.ece.drexel.edu/REPAIR/F_DC_tape.html
+http://repetae.net/john/computer/tao.html
+http://reporter.leeds.ac.uk/press_releases/current/bretton_dec04.htm
+http://reports.eea.eu.int/92-826-5409-5/en/page009new.html
+http://repositories.cdlib.org/cgi/viewcontent.cgi?article=1002&context=ies
+http://repositories.cdlib.org/cgi/viewcontent.cgi?article=1002&context=igcc
+http://repositories.cdlib.org/cgi/viewcontent.cgi?article=1091&context=boaltwp
+http://repositories.cdlib.org/cgi/viewcontent.cgi?article=1235&context=lbnl
+http://repro-med.net/guides/experience.php
+http://republican.sen.ca.gov/web/mcclintock/article_detail.asp?PID=15
+http://republican.sen.ca.gov/web/mcclintock/article_detail.asp?PID=275
+http://rermag.com/issue_20020201/
+http://rermag.com/rentalnews/index1.html
+http://res.betterworldclub.com/hotel/10010428-10231652O.html?hr=9005
+http://res.weathercentral.com/hotel/10010162-10231652O.html?hr=9005
+http://res2.agr.gc.ca/brandon/nn/nn218_e.htm
+http://res2.agr.gc.ca/publications/marquis/page03_e.htm
+http://resale.headgap.com/
+http://rescueattempt.tripod.com/id3.html
+http://rescuemike.blogspot.com/2004_10_24_rescuemike_archive.html
+http://research.aarp.org/econ/boomer_seg_2.html
+http://research.amnh.org/herpetology/amphibia/references.php?id=6073
+http://research.amnh.org/herpetology/amphibia/references.php?id=6545
+http://research.berkeley.edu/urap/appapp/faq.html
+http://research.microsoft.com/adapt/TaskGallery/pages/user_studies.htm
+http://research.microsoft.com/displayArticle.aspx?id=260
+http://research.microsoft.com/features/StudioMIT.asp
+http://research.opt.indiana.edu/Library/FourierBook/ch01.html
+http://research.sun.com/features/tenyears/
+http://research.ucdavis.edu/home.cfm?id=OVC,2,1024,1178
+http://research.unc.edu/endeavors/win2005/hadler.php
+http://research.unc.edu/oct/faq.html
+http://research.universalclass.com/i/research/12740.htm
+http://research.utk.edu/ora/sections/compliances/humsub/system.html
+http://research.yale.edu/lawmeme/modules.php?name=News&file=article&sid=1706
+http://research.yale.edu/lawmeme/modules.php?name=News&new_topic=54
+http://reservations.quebec-city-hotels.com/hotel/10007777-11250741O.html
+http://reservations.victoria-hotel-lites.com/hotel/10004826-10215657O.html
+http://reserve.airport-carrentals.com/hotels/hotels.mv?action=hotel_information&agent_id=9217&tn_hotel_id=207256
+http://residentwife.typepad.com/resident_wife/modest_proposals/
+http://resistance.chiffonrouge.org/article.php3?id_article=90
+http://resmagonline.com/articles/publish/article_283.shtml
+http://resource.berkeley.edu/r_html/r10_04hi.html
+http://resource.intel.com/telecom/support/appnotes/PCI.htm
+http://resource.library.tmc.edu/newsArch.php
+http://resources.christianity.com/ministries/lwftv/service/help.jhtml
+http://resourcescommittee.house.gov/108cong/fish/2003apr29/baughman.htm
+http://resourcescommittee.house.gov/issues/nprpl/cadesert_access101.htm
+http://resourcescommittee.house.gov/issues/nprpl/cadesert_access101pf.htm
+http://respectfulofotters.blogspot.com/2004_07_01_respectfulofotters_archive.html
+http://response.restoration.noaa.gov/cameo/cameo.html
+http://response.restoration.noaa.gov/cameo/dr_aloha/grnbook/grnbook.html
+http://response.restoration.noaa.gov/cameo/dr_aloha/inputs/inputs.html
+http://response.restoration.noaa.gov/cameo/dr_aloha/limits/limits.html
+http://response.restoration.noaa.gov/kids/spills.html
+http://restorationbookstore.org/articles/testimonies/peaceinwar.htm
+http://resume.monster.com/articles/education/
+http://resume.monster.com/articles/recommendation/
+http://reswriter.com/career_links.html
+http://retail.careerbuilder.com/rt.ic/Georgia_Columbus?radius=5
+http://retail.careerbuilder.com/rt.ic/Illinois_Chicago_SalesManager.htm?radius=50
+http://retail.careerbuilder.com/rt.ic/Texas_Galveston?sc=3&sd=0
+http://retail.careerbuilder.com/rt.ic/Washington_Seattle?radius=20
+http://retail.careerbuilder.com/rt.ic/Wisconsin_GreenBay?radius=5
+http://retail.careerbuilder.com/rt.ic/Wisconsin_Oshkosh?radius=50
+http://retailers.roman.com/pls/htmldb/f?p=141:6:6940029621611423437
+http://retailindustry.about.com/cs/sup_management/a/uc_allen1.htm
+http://retailindustry.about.com/od/sales_retailers/a/bl_top100pcg.htm
+http://retailtrafficmag.com/mag/retail_living_serious_architecture/
+http://reti.blogspot.com/
+http://retrobits.net/sam.html
+http://returnhappy.blogspot.com/2005/05/rug-underneath-me.html
+http://returning.to-change.chandler-hill-employers-partners.com/
+http://returning.to-change.chandlerhill.com/
+http://returning.to-change.chandlerhillcareers.com/
+http://returning.to-change.chandlerhillresults.com/
+http://rev-ed.blogspot.com/2005/06/spoiled.html
+http://revels.bizland.com/store/page1.html
+http://reverse-mortgage.ffind.servebeer.com/
+http://review.ucsc.edu/summer-02/alumni_news.html
+http://review.ucsc.edu/summer-02/techtutors.html
+http://reviewing.co.uk/actrev.htm
+http://reviewing.co.uk/articles/visible-reflection.htm
+http://reviewing.co.uk/stories.htm
+http://reviews-zdnet.com.com/
+http://reviews-zdnet.com.com/4520-7297_16-4207842.html
+http://reviews-zdnet.com.com/4540-6490_16-30978812-4.html
+http://reviews-zdnet.com.com/4540-6490_16-31296983-4.html
+http://reviews-zdnet.com.com/AnchorDesk/4520-7297_16-5142452.html
+http://reviews-zdnet.com.com/Ask_Jeeves_Toolbar/4505-3514_16-31213311.html
+http://reviews-zdnet.com.com/Labs/4520-6603_16-5020816-1.html
+http://reviews-zdnet.com.com/MP3_players/4540-6490_16-30978812-4.html
+http://reviews-zdnet.com.com/McAfee_Internet_Security_6_0/4505-3513_16-30521087.html
+http://reviews-zdnet.com.com/Norton_Internet_Security_2005/4505-3667_16-30998884.html
+http://reviews-zdnet.com.com/Sony_Cyber_Shot_DSC_V1/4852-6501_16-20851377.html
+http://reviews.cnet.com/4520-10165_7-5699466-1.html
+http://reviews.cnet.com/4520-10168_7-5834832-1.html
+http://reviews.cnet.com/4520-3513_7-5023853-1.html
+http://reviews.cnet.com/4520-3513_7-5073597.html
+http://reviews.cnet.com/4520-3513_7-5142439-1.html
+http://reviews.cnet.com/4520-3513_7-5142439.html
+http://reviews.cnet.com/4520-6449_7-6233821-1.html
+http://reviews.cnet.com/4520-6450_7-5020764-1.html
+http://reviews.cnet.com/4520-6450_7-5107938-1.html
+http://reviews.cnet.com/4520-6450_7-5553141-1.html
+http://reviews.cnet.com/4520-7899_7-5513972-1.html
+http://reviews.cnet.com/4540-6490_7-30906242-4.html
+http://reviews.cnet.com/4540-6490_7-30907933-4.html
+http://reviews.cnet.com/4540-6490_7-31256885-4.html
+http://reviews.cnet.com/4540-6490_7-31278883-4.html
+http://reviews.cnet.com/4540-6490_7-31296983-4.html
+http://reviews.cnet.com/4540-6490_7-31319524-4.html
+http://reviews.cnet.com/5208-3513-0-10.html?forumID=104&threadID=38140&messageID=453216&start=-96
+http://reviews.cnet.com/5208-6142-0.html?forumID=5&threadID=57767&messageID=691421
+http://reviews.cnet.com/5208-6618-0.html?forumID=6&threadID=50947&messageID=607672
+http://reviews.cnet.com/Abbyy_FineReader_7_0_Professional/4505-3523_7-30571456-7.html
+http://reviews.cnet.com/Adobe_Acrobat_Professional_____v__7_0_____product_upgrade_package/4505-3628_7-31246526-7.html
+http://reviews.cnet.com/Anarchy_Online_PC/4512-9696_7-30977189.html
+http://reviews.cnet.com/Apple_Mac_OS_10_4_Tiger/4505-3673_7-31256837-2.html
+http://reviews.cnet.com/Apple_iPod_Mini__4GB__Green_/4505-6490_7-30657036-2.html
+http://reviews.cnet.com/Buffalo_AirStation_Extended_Range_Antenna/4505-6461_7-21204239.html
+http://reviews.cnet.com/Canon_EOS_1Ds_Digital_SLR/4510-6501_7-20610303.html
+http://reviews.cnet.com/Colin_McRae_Rally_2005_Xbox/4505-9789_7-30960347-4.html
+http://reviews.cnet.com/Creative_Zen_Touch__20GB_/4852-6490_7-30907933.html?pn=1&fb=1&ob=0
+http://reviews.cnet.com/Dell_DJ-20/4505-6490_7-31149174.html
+http://reviews.cnet.com/Dell_DJ_20/4505-6490-31149174.html?reviewId=5538471
+http://reviews.cnet.com/Dell_DJ_20/4505-6490_7-31149174.html
+http://reviews.cnet.com/Dell_DJ_20/4535-6490_7-31149174.html
+http://reviews.cnet.com/Dell_Digital_Jukebox_DJ_15GB/4505-6490_7-30582921.html
+http://reviews.cnet.com/Dell_W2600/4852-6482_7-31006682.html?pn=1&fb=1&ob=0
+http://reviews.cnet.com/Denon_DVD_2900/4514-6473_7-20847768.html
+http://reviews.cnet.com/Home_audio/4502-6467_7-0.html
+http://reviews.cnet.com/Labs/4520-6603_7-5020816-1.html
+http://reviews.cnet.com/MP3_players/4540-6490_7-30984154-4.html
+http://reviews.cnet.com/Memorex_16X_double_layer_drive/4505-3212_7-31109465-2.html
+http://reviews.cnet.com/Panasonic_ToughBook_Y2/4505-3121_7-30882164.html
+http://reviews.cnet.com/RCA_Lyra_RD1080/4514-6490_7-20569073.html
+http://reviews.cnet.com/Red_Hat_Linux_9_0_Professional/4505-3678_7-21136281-7.html
+http://reviews.cnet.com/Rio_Carbon__5GB_/4514-6490_7-30984154.html
+http://reviews.cnet.com/Rio_Nitrus__1_5GB_/4505-6490_7-30474132.html
+http://reviews.cnet.com/Rio_S35S/4514-6490_7-20573566.html
+http://reviews.cnet.com/Serious_Sam_Next_Encounter_GameCube/4512-9583_7-30976229.html
+http://reviews.cnet.com/Serious_Sam__Next_Encounter__GameCube_/4505-9583_7-30976229.html
+http://reviews.cnet.com/Sony_Cyber_Shot_DSC_M1/4510-6501_7-31117284.html
+http://reviews.cnet.com/Sony_HDR_FX1/4852-6500_7-31085889.html?pn=1&fb=1&ob=0
+http://reviews.cnet.com/Sony_Handycam_DCR_PC109/4514-6500_7-30671374.html
+http://reviews.cnet.com/Toshiba_SD5700/4514-6473_7-6150337.html
+http://reviews.cnet.com/Unreal_Mission_Pack_Return_to_Na_Pali_PC/4512-9696_7-30986586.html
+http://reviews.cnet.com/ZoneAlarm_Internet_Security_5_5/4505-3667_7-31109473.html
+http://reviews.cnet.com/ZoneAlarm_Security_Suite/4505-3667_7-30898745.html
+http://reviews.cnet.com/iRiver_H320_20GB/4535-6490_7-31120667.html
+http://reviews.cnet.com/iRiver_H320__20GB_/4514-6490_7-31120667.html
+http://reviews.cnet.com/iRiver_iMP_350_SlimX/4514-6490_7-8591280.html
+http://reviews.iwon.com/pscVideoGameReview/Action/King,of,Fighters,Dream,Match,99/PRD_86588_3730crx.aspx
+http://reviews.iwon.com/pscVideoGameReview/Dreamcast/Action/King,of,Fighters,Dream,Match,99/PRD_86588_3730crx.aspx
+http://revistas.bancomext.gob.mx/rce/en/articleReader.jsp?id=8&idRevista=29
+http://rf-web.tamu.edu/security/secguide/Eap/Depress.htm
+http://rf-web.tamu.edu/security/secguide/V1comput/Case1.htm
+http://rfc.net/rfc1918.html
+http://rfc.sunsite.dk/rfc/rfc3245.html
+http://rfc.sunsite.dk/rfc/rfc932.html
+http://rfc1651.x42.com/
+http://rfc2778.x42.com/
+http://rfc3234.x42.com/
+http://rfc3710.x42.com/
+http://rfidanalysis.org/
+http://rfidinsights.blogspot.com/2004_10_01_rfidinsights_archive.html
+http://rhea.redhat.com/bboard-archive/acs_applications/000at6.html
+http://rhetorica.net/archives/004071.html
+http://rhetorica.net/bias.htm
+http://rhetorica.net/me/
+http://rhizome.org/object.rhiz?32053
+http://rhodesminnis.org.uk/Councilminutes/CouncilminutesNovember04.htm
+http://rhymeswithright.mu.nu/archives/086019.php
+http://ricanconservative.blogspot.com/
+http://riccistreet.net/port80/shoreline/economics.htm
+http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html
+http://richardwhitehead.com/
+http://richeyxx.blogspot.com/2005/06/few-thoughts-at-this-particular-moment.html
+http://richmarkpi.com/04-electronicdebugging.html
+http://richmond.indymedia.org/newswire/display/10633/index.php
+http://ricksegal.typepad.com/pmv/2005/week18/
+http://ricksegal.typepad.com/pmv/2005/week22/
+http://ridgefieldct.virtualtownhall.net/Public_Documents/RidgefieldCT_SelectMin/S00071C19-00071C1A
+http://ridingsun.blogspot.com/2005/05/newsweek-america-is-dead.html
+http://right-mind.us/
+http://right-thinking.blogspot.com/
+http://right-thinking.com/index.php
+http://right-thinking.com/index.php/C1/
+http://right-thinking.com/index.php/C20/
+http://right-thinking.com/index.php/weblog/C1/
+http://right-thinking.com/index.php/weblog/C20/
+http://rightreason.ektopos.com/
+http://rightreason.ektopos.com/archives/2005/04/bad_choice.html
+http://rightreason.ektopos.com/archives/2005/05/conservatives_i.html
+http://rights.journalspace.com/
+http://rights.journalspace.com/?b=1104566400&e=1105171200
+http://rightthinkinggirl.typepad.com/
+http://rightthinkinggirl.typepad.com/right_thinking_girl/
+http://rightthinkinggirl.typepad.com/right_thinking_girl/2004/12/former_radical_.html
+http://rigorousintuition.blogspot.com/2005/03/conspiracy-theory-made-easy.html
+http://rii.ricoh.com/~stork/DHS.html
+http://rileymccarthy.blogspot.com/2003_07_27_rileymccarthy_archive.html
+http://rimone.org/archives/2004/10/11/reading-matters-scottish-style-by-nomad/
+http://rinkworks.com/stupid/cs_os.shtml
+http://rino.rummage.net.au/rino/articles/iraq_angle.html
+http://rion.nu/
+http://riot-proof.diaryland.com/january03.html
+http://ripoffreport.com/reports/ripoff128459.htm
+http://rippedtoshreds.blogspot.com/
+http://riscakarate.tripod.com/id5.html
+http://rising-hegemon.blogspot.com/2005/06/history-doesnt-really-change.html
+http://riverbendblog.blogspot.com/
+http://riverbendblog.blogspot.com/2004_04_01_riverbendblog_archive.html
+http://riverbendblog.blogspot.com/2004_05_01_riverbendblog_archive.html
+http://riverbendblog.blogspot.com/2005_01_01_riverbendblog_archive.html
+http://riverbendblog.blogspot.com/2005_02_01_riverbendblog_archive.html
+http://riverbendblog.blogspot.com/2005_04_01_riverbendblog_archive.html
+http://rivers.affordabletours.com/Value_World/
+http://rivers.affordabletours.com/search/it/?id=365
+http://rixstep.com/2/20050321,00.html
+http://rjanderson.blogspot.com/2005/05/why-i-am-soooooo-glad-i-have-midwife.html
+http://rjohara.net/darwin/logs/1994/9405-08.html
+http://rlai.cs.ualberta.ca/rlbenchmarks.html
+http://rleweb.mit.edu/rlestaff/p-wiesj-dp.HTM
+http://rmfo-blogs.com/karibeth/
+http://rmfo-blogs.com/rageforjesus/
+http://rmhh.co.uk/tree2/individual.php?pid=ID.288
+http://rmisweb.com/rmisartc/103000.htm
+http://rmmla.wsu.edu/ereview/53.2/articles/nolan.asp
+http://rmp.nlm.nih.gov/RM/G/G/A/L/_/rmggal.html
+http://rnbob.tripod.com/abbreviationsandrespiratoryterms.htm
+http://rncwatch.typepad.com/counterrecruiter/2005/week22/
+http://rndr4food.blogspot.com/
+http://roadtosurfdom.com/
+http://robk.proboards13.com/index.cgi?board=book&action=display&num=1106725456
+http://roblimo.com/node/view/44
+http://robnyc.blogspot.com/
+http://robolympics.net/rules/magellan.shtml
+http://robotics.megagiant.com/history.html
+http://robyn.thinkpub.com/
+http://rochellejustrochelle.typepad.com/copilot/apropos_of_nothing/
+http://rochesterwi.us/may_20051.htm
+http://rockbpubl.com/bks_RPC/mutinyat.htm
+http://rockefeller.uchicago.edu/Sermons/guests/021702sermon.htm
+http://rockhay.tripod.com/worship/prayers-etc/offering.htm
+http://rockthrower.blogs.com/rockthrower/2005/01/bundt_pans.html
+http://rockyweb.cr.usgs.gov/outreach/globalgis/europe/population_europe.html
+http://rockyweb.cr.usgs.gov/outreach/sgu/firetowerlesson.html
+http://rockyweb.cr.usgs.gov/public/outreach/sgu/firetowerlesson.html
+http://rodcorp.typepad.com/rodcorp/2005/03/
+http://rodeorob.blogspot.com/
+http://roderickmann.org/embedded/ichibot/status.jsp
+http://rodneyhide.com/Diary/index.php?p=1399
+http://rogerebert.suntimes.com/apps/pbcs.dll/article?AID=/19851225/REVIEWS/512250301
+http://rogerebert.suntimes.com/apps/pbcs.dll/article?AID=/20030124/REVIEWS/301240301/1023
+http://rogerebert.suntimes.com/apps/pbcs.dll/article?AID=/20041109/REVIEWS/41006005/1001
+http://rogerebert.suntimes.com/apps/pbcs.dll/article?AID=/20050123/PEOPLE/401230304
+http://rogersmantalk.com/employment.html
+http://rollerweblogger.org/comments/roller/blog/jsp_control_flow_engine
+http://romancelibrary.com/travel/hotels0016.html
+http://romancestuck.com/holidays/sweetestday-quotes.htm
+http://romanticmovies.about.com/library/weekly/aaamericanweddingreview.htm
+http://romanticmovies.about.com/od/moviesinproduction/
+http://romanticmovies.about.com/od/moviesinproduction/index_a.htm
+http://romanticmovies.about.com/od/moviesinproduction/index_r.htm
+http://rome-hotels.tripadvisor.com/ShowUserReviews-g187791-d203211-r2715377-Hotel_Genova-Rome_Lazio.html
+http://rome-hotels.tripadvisor.com/ShowUserReviews-g187791-d259310-r2149170-Montecarlo_Hotel-Rome_Lazio.html
+http://rome-hotels.tripadvisor.com/ShowUserReviews-g187791-d275766-r2855361-Hotel_Ottocento-Rome_Lazio.html
+http://rome.gema.state.ga.us/WebGema/prepare.nsf/0/e60ca2f6c08e11f085256cbc0079d438?OpenDocument
+http://rooba.net/will/archives/2004_01.php
+http://rootprompt.org/article.php3?article=903
+http://rop5.blogspot.com/2005/06/shooting-private-stacey.html
+http://rory.sharp.fm/rites/archive/000393.html
+http://rosacea.ii.net/
+http://rosasay.typepad.com/talkingstory/2004/10/human_beings_de.html
+http://rosemaryamey.ca/opinion/essays/fishie.html
+http://rosenylundfan001.tripod.com/id41.html
+http://ross.typepad.com/blog/2005/05/finding_a_home.html
+http://ross.typepad.com/blog/2005/06/email_privacy_h.html
+http://ross.typepad.com/blog/media/
+http://rossputin.com/blog/index.php/a/2005/06/02/
+http://rossputin.com/blog/index.php/a?cat=18
+http://rossputin.com/blog/index.php/a?cat=30
+http://rotarnet.com.au/users/9/96905/annual_reports/international.htm
+http://rotaryhistoryfellowship.org/leaders/morrow/
+http://rotation.infopop.cc/eve/ubb.x/a/tpc/f/982604404/m/728604404
+http://roundandwhite.blogspot.com/
+http://routt.net/bill/madness/
+http://rover.cs.northwestern.edu/~surana/blog/past/2003_07.html
+http://royalmusic.blogspot.com/
+http://royaltoybox.blogspot.com/
+http://roydevile.blogspot.com/2004/10/oh-boy.html
+http://roydevile.blogspot.com/2004_10_01_roydevile_archive.html
+http://rp.rac.co.uk/routeplanner
+http://rps.gn.apc.org/cat10.htm
+http://rr.latenightpc.com/wp/archives/2005/03/02/cell-phones-and-games-please/
+http://rrd.premiers.nsw.gov.au/rrd/public/2000/planning.html
+http://rredc.nrel.gov/solar/pubs/shining/chap5.html
+http://rru.worldbank.org/PapersLinks/Open.aspx?id=3761
+http://rsaffran.tripod.com/aba.html
+http://rsd.gsfc.nasa.gov/rsd/RemoteSensing.html
+http://rsh.dabu4u.com/forums/index.php?showtopic=8662&view=getnewpost
+http://rsjames.com/
+http://rspa-atty.dot.gov/appeals/dussia.html
+http://rspas.anu.edu.au/qb/articleFile.php?searchterm=2-1-4
+http://rtc.umn.edu/pub/
+http://rts.gn.apc.org/9805lanc.htm
+http://rtw.heavengames.com/rtw/info/units/rome/
+http://rubyglen.com/articles/senior.htm
+http://rugby.itv.com/Latest_News/story_36168.shtml
+http://ruk.ca/discuss/2290
+http://rules.senate.gov/history.html
+http://rules.senate.gov/senaterules/rule25.htm
+http://rules.tamu.edu/urules/100/170202M1.htm
+http://rullsenbergrules.blogspot.com/
+http://runehq.com/cache/itemsdbc.htm
+http://runehq.com/cache/viewitems0065.htm
+http://runehq.com/cacheguides/viewskillguide00422.htm
+http://runevillage.com/city2Lumby.php
+http://runevillage.com/specialHerblaw.php
+http://runevillage.com/whatis2.php
+http://ruoffcampus.rutgers.edu/apt/birchwood/pricelist.asp
+http://ruoffcampus.rutgers.edu/guide/landlord.asp
+http://ruoffcampus.rutgers.edu/ochs/help.asp
+http://ruralhealth.hrsa.gov/pub/Goldsmith.htm
+http://russell.blogs.com/mysore_musings/2004/11/leaving_bushcou.html
+http://russelldavies.typepad.com/ateaandathink/
+http://rutgers.placementmanual.com/interviewing/interviewing-04.html
+http://ruthlessreviews.com/interviews/mikeh/finntroll.html
+http://ruthlessreviews.com/movies/m/modigliani.html
+http://rvb.roosterteeth.com/home.php?page=2
+http://rwc.hunter.cuny.edu/writing/on-line/act-guidelines.html
+http://rwdmag.com/music_articles/features/89654378/roll_deep/roll_deep_crew/
+http://rwor.org/a/004/filibuster-wars.htm
+http://rwor.org/a/1203/bareach8.htm
+http://rwor.org/a/v20/980-89/986/yuri.htm
+http://rwor.org/a/v24/1181-1190/1188/carlinterview.htm
+http://rwor.org/chair_e.htm
+http://rylibweb.man.ac.uk/geography/geogclas.html
+http://rylibweb.man.ac.uk/guides/dsu.html
+http://ryzom.com/forum/showthread.php?t=15329&page=5
+http://s-train.kaphmedia.net/archives/000159.php
+http://s13a.math.aca.mmu.ac.uk/Student_Writings/DMELE/Marion_Ghey.html
+http://s4.invisionfree.com/Popular_Technology/index.php?showtopic=497
+http://s4.invisionfree.com/Popular_Technology/index.php?showtopic=497&view=getlastpost
+http://s4.invisionfree.com/Popular_Technology/index.php?showtopic=497&view=getnewpost
+http://s90209925.onlinehome.us/trfogey/archives/2004/09/
+http://s90209925.onlinehome.us/trfogey/archives/2004/09/11/
+http://s90209925.onlinehome.us/trfogey/archives/2004/09/11/74
+http://s93504554.onlinehome.us/sa/weblog.php?id=C0_3_1
+http://sa.indymedia.org/news/2003/02/3038.php
+http://saa.dva.state.wi.us/SAA_Wisconsin.asp
+http://saas.byu.edu/tuition/
+http://saas.byu.edu/tuition/index.aspx?lms=4
+http://sabbah.biz/mt/archives/2005/04/18/wafa-bin-ladens-niece-a-material-girl-not-madonna/
+http://sabbaticalhomes.com/result_query_details.asp?MessageID=15588
+http://sabong.net.ph/news/
+http://sadlyno.com/archives/001377.html
+http://sadlyno.com/archives/001421.html
+http://safariexamples.informit.com/0321154991/bookse15.html
+http://safety.ngfl.gov.uk/schools/document.php3?D=d55
+http://safrica.lionsands.com/index_800.asp
+http://sagp.kelley.indiana.edu/index.cfm?pageid=72
+http://sahs.utmb.edu/calendar/default.asp
+http://saint-johns-brunswick.pvt.k12.me.us/school/sjshist.htm
+http://saintfaron.blogspot.com/2004_03_01_saintfaron_archive.html
+http://saints.com.au/default.asp?pg=news&spg=noticeboard
+http://saints.merseyworld.com/html/news/news.shtml
+http://saintswithouthalos.com/
+http://saitekhelp.simhq.com/trouble_shooting.htm
+http://saladin.blogdrive.com/
+http://salazar.senate.gov/news/releases/050620hscresults.htm
+http://sales-marketing.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=JR&job_did=J8F0DN6YFV1R7SCYLZG
+http://sales-marketing.msn.careerbuilder.com/sm.ic/Louisiana_NewOrleans?radius=5
+http://sales-marketing.msn.careerbuilder.com/sm.ic/Missouri_Independence?radius=10
+http://sales-marketing.msn.careerbuilder.com/sm.ic/Missouri_Independence?radius=50
+http://sales-marketing.msn.careerbuilder.com/sm.ic/Missouri_Liberty?radius=50
+http://salina.areaconnect.com/
+http://salisburypages.blogspot.com/
+http://salmon.psy.plym.ac.uk/YEAR1/inttopic/gender.html
+http://salmon.psy.plym.ac.uk/year1/inttopic/gender.html
+http://salmon.psy.plym.ac.uk/year1/psy128animal_behaviour/animbeha.htm
+http://salmon.psy.plym.ac.uk/year3/maternal.htm
+http://salon.com/ent/feature/2002/12/17/tolkien_brin/
+http://salon.com/news/feature/2005/05/12/nuclear_option_primer/index2.html
+http://salt.claretianpubs.org/issues/prmin/madigan.html
+http://saltonseamovie.warnerbros.com/cmp/filmmakers.html
+http://saltyt.antville.org/20021114/
+http://samba.oss.eznetsols.org/samba/docs/man/Samba-HOWTO-Collection/printing.html
+http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
+http://sammarshall.blogspot.com/2003_11_01_sammarshall_archive.html
+http://samples.gotdotnet.com/quickstart/howto/doc/useresources.aspx
+http://samsdotpublishing.com/aoife/AndersonCalling.htm
+http://samvak.tripod.com/nm031.html
+http://samvak.tripod.com/nm076.html
+http://sanantonio.bizjournals.com/sanantonio/stories/2005/01/31/daily10.html?jst=m_ln_hl
+http://sanantonio.ccimnet.com/jsp/resources/resources_event.jsp
+http://sanantonio.ccimnet.com/jsp/resources/resources_event_details.jsp?event_id=2971
+http://sanctityofmarriage.ca/speaking-out/Howard.htm
+http://sanctityofmarriage.ca/statements/OCC.htm
+http://sandhill.typepad.com/sandhill_trek/2004/05/royal_processio.html
+http://sandiegoblog.com/archives/category/sports/
+http://sandorian.us/newslog2.php/__show_article/_a000245-000090.htm
+http://sandwichshop.blogspot.com/
+http://sandyhershelman.com/RotarySeptember2002.htm
+http://sanjose.bizjournals.com/sanjose/stories/2004/07/05/daily2.html
+http://sanjose.bizjournals.com/sanjose/stories/2005/01/24/daily6.html
+http://sanskrit.forums.bhaarat.com/showthread.php?threadid=142
+http://santa-monica.org/epwm/utilities/text.html
+http://santabarbara.networkofcare.org/aging/news/detail.cfm?articleID=6883
+http://santificarnos.com/santiblog/index.php/english/2005/01/19/spanish_church_in_favor_of_condoms_to_st
+http://sapiens.ya.com/medik7/American-Board-Sleep-Medicine.htm
+http://sapir.ukc.ac.uk/Guests/g-mw/nyole4problems.html
+http://sara2000.unl.edu/cfp.php3
+http://sarahlane.typepad.com/sarahword/2004/10/photo_phun.html
+http://sarmerchandise.safeshopper.com/about.htm?335
+http://sarongpartygirl.blogspot.com/2004_04_11_sarongpartygirl_archive.html
+http://sartorius.centralcarolinascale.com/
+http://sartre.inrets.fr/english/sartre1E/text-en.htm
+http://sat-receiver-world.com/discl.htm
+http://sat-receiver-world.com/pd-1194756255.htm
+http://satucket.com/lectionary/Michael.htm
+http://saturdaynight.typepad.com/home/
+http://saturdaynight.typepad.com/home/2005/02/beads_for_socks.html
+http://savagepencil.typepad.com/confessions/
+http://savannahnow.com/diversions/stories/060205/STGdollhouse.shtml
+http://savannahnow.com/stories/081204/2366859.shtml
+http://savepublicaccess.org/forum/viewtopic.php?p=1612
+http://savepublicaccess.org/forum/viewtopic.php?p=1704
+http://savvytraveler.publicradio.org/show/features/1999/19990109/literary-heaven.shtml
+http://saw.themurdaughs.com/
+http://sbarrera.home.mindspring.com/game/civ/SMCivilized.html
+http://sbc.edu/president/perspective_summer04.html?newsletter
+http://sbc.senate.gov/democrat/record.cfm?id=215990
+http://sbcf.iu.edu/about/abstracts/round1.php
+http://sbcf.iu.edu/about/finrpts/rosenbaum.html
+http://sbinfocanada.about.com/
+http://sbinfocanada.about.com/cs/management/qt/powerptpres.htm
+http://sbinfocanada.about.com/cs/marketing/a/targetmarket.htm
+http://sbinfocanada.about.com/od/salesselling/
+http://sbinfocanada.about.com/od/salesselling/index_a.htm
+http://sbinfocanada.about.com/od/speakforsuccesscourse/a/buzzwords.htm
+http://sbm.sbmin.com/asp/DisplayArticles.asp?ArticleId=2305&CatId=74
+http://sbrady2.blogspot.com/
+http://sbrady2.blogspot.com/2005_06_01_sbrady2_archive.html
+http://sbschool.net/price2.html
+http://scalingup.smartlibrary.info/NewInterface/segment.cfm?segment=2074
+http://scatoday.net/node/view/3657
+http://scatoday.net/node/view/4295
+http://scbe.stanford.edu/research/programs/film/film_library.html
+http://sccbank.sc.gov/
+http://sccdcc.mn.sabren.com/mt-static/archives/issues/cat_ahnold.html
+http://scentral.iop.org/portsmouth-old.html
+http://sceschools.com/schools/CYPRUS/KINGR.HTM
+http://scheherazadetales.com/faq.html
+http://schematics.sourceforge.net/
+http://schlepper.hanse.de/redwolf/tacops-for-cmplayers-amp.html
+http://schmucknews.blogspot.com/2002_07_01_schmucknews_archive.html
+http://scholar.google.com/scholar/libraries.html
+http://scholar.lib.vt.edu/VA-news/VA-Pilot/issues/1994/vp941015/10150367.htm
+http://scholar.lib.vt.edu/VA-news/VA-Pilot/issues/1995/vp951029/10290142.htm
+http://scholar.lib.vt.edu/VA-news/VA-Pilot/issues/1997/vp970109/01090327.htm
+http://scholar.lib.vt.edu/ejournals/ALAN/spring96/pubconnection.html
+http://scholar.lib.vt.edu/ejournals/ElAnt/V1N7/kelly.html
+http://scholar.lib.vt.edu/ejournals/JITE/v34n1/jite-v34n1.book_review.html
+http://scholar.lib.vt.edu/ejournals/JITE/v36n1/boutin.html
+http://scholar.lib.vt.edu/ejournals/JITE/v37n3/hill.html
+http://scholar.lib.vt.edu/ejournals/JITE/v40n3/editor.html
+http://scholar.lib.vt.edu/ejournals/JTE/jte-v7n1/gokhale.jte-v7n1.html
+http://scholar.lib.vt.edu/ejournals/JTE/v13n2/becker.html
+http://scholar.lib.vt.edu/ejournals/JTE/v1n1/falco.jte-v1n1.html
+http://scholar.lib.vt.edu/ejournals/JTE/v7n1/herschbach.jte-v7n1.html
+http://scholar.lib.vt.edu/ejournals/JVME/V21-1/Seeler1.html
+http://scholar.lib.vt.edu/faculty_archives/mountain_slavery/race.htm
+http://schoogle.blogspot.com/2005/04/some-thoughts-on-acrl-long.html
+http://school.discovery.com/lessonplans/programs/biomes_inuit/
+http://school.discovery.com/lessonplans/programs/bodysystems/
+http://school.discovery.com/lessonplans/programs/creaturesofskies/
+http://school.discovery.com/lessonplans/programs/cubanmissile/
+http://school.discovery.com/lessonplans/programs/energyefficiency/
+http://school.discovery.com/lessonplans/programs/expansion/
+http://school.discovery.com/lessonplans/programs/forcesandmotion/
+http://school.discovery.com/lessonplans/programs/geo_northeast/
+http://school.discovery.com/lessonplans/programs/iceman/
+http://school.discovery.com/lessonplans/programs/measure_lengths/
+http://school.discovery.com/lessonplans/programs/octopus/
+http://school.discovery.com/lessonplans/programs/operationantibody/
+http://school.discovery.com/lessonplans/programs/time/
+http://school.discovery.com/lessonplans/programs/understanding-bacteria/
+http://school.discovery.com/schooladventures/spacestation/teachertips.html
+http://school.discovery.com/schrockguide/assess.html
+http://school.discovery.com/sciencefaircentral/dysc/tips/tips.html
+http://schoolgrades.fldoe.org/
+http://schoolnet.gov.mt/thinkingskills/thinkingtools.htm
+http://schoolnotes.com/06001/aperrault.html
+http://schoolreferenda.blogspot.com/
+http://schools.dor.org/board_members.cfm?master=5&subpage=55
+http://schools.gradschools.com/graduate-schools/North-Dakota.html
+http://schools.harrisoncsd.org/lmk/student.htm
+http://schools.moe.edu.sg/blgps/dept/noncore/cip/Activities.htm
+http://schoolstudio.engr.wisc.edu/futureclassrooms.html
+http://schoolweb.psdschools.org/she/SIT/SITMinutes19990218.html
+http://sci.esa.int/science-e/www/object/index.cfm?fobjectid=34840
+http://scidiv.bcc.ctc.edu/LS/MountSi/
+http://scidiv.bcc.ctc.edu/LS/MountSi/Race2002/
+http://science-biotech.careerbuilder.com/sb.ic/Tennessee_Memphis?sc=3&sd=0
+http://science-environment.nzpages.co.nz/Government/Agencies_and_Departments/
+http://science-environment.nzpages.co.nz/Home_and_Garden/Services/Electrical/
+http://science-project.org/inspire/in_bday_pt.htm
+http://science.education.nih.gov/supplements/nih3/alcohol/guide/lesson2.htm
+http://science.education.nih.gov/women/careers/Rodriguez/rodriguez.html
+http://science.howstuffworks.com/oil-drilling2.htm
+http://science.howstuffworks.com/oil-refining2.htm
+http://science.howstuffworks.com/question57.htm
+http://science.howstuffworks.com/question633.htm
+http://science.hq.nasa.gov/earth-sun/applications/
+http://science.krishna.org/Articles/2002/12/014.html
+http://science.nasa.gov/headlines/y2001/ast19sep_1.htm
+http://science.nasa.gov/headlines/y2002/06dec_dunes.htm
+http://science.nasa.gov/headlines/y2004/04jul_titanrevealed.htm
+http://science.nasa.gov/headlines/y2004/05mar_arctic.htm
+http://science.nasa.gov/headlines/y2004/23apr_biocorr2.htm
+http://science.nasa.gov/headlines/y2004/28may_cook.htm
+http://science.nasa.gov/headlines/y2005/24jun_electrostatics.htm
+http://science.nasa.gov/headlines/y2005/27may_approachingmars.htm
+http://science.nasa.gov/newhome/headlines/features/ast21sep98_1.htm
+http://science.nsta.org/nstaexpress/nstaexpress_2004_03_08_padilla.htm
+http://science.palomar.edu/physics/Physics230/Tutor/Tutor14.html
+http://science.uniserve.edu.au/newsletter/vol10/zadnik.html
+http://science_boy.blogspot.com/
+http://scienceclub.org/scifair.html
+http://scienceforpeace.sa.utoronto.ca/Video_Blurbs2.html
+http://sciencemag.blogs.com/sfgblog/2004/week36/
+http://sciencepolicy.colorado.edu/scienceadvisors/gibbons_transcript.html
+http://sciencespot.net/Pages/adtinspg.html
+http://scienceweek.com/2005/sc050204-6.htm
+http://scienceworld.wolfram.com/biography/Kelvin.html
+http://scienceworld.wolfram.com/biography/Shannon.html
+http://scientium.com/
+http://scifac.arcticscience.org/index3.php?thread=56
+http://scifair.ednet.ns.ca/AVRSF/Attitudes.html
+http://scifantastic.tripod.com/stories/change.html
+http://scifipulse.net/
+http://scilib.ucsd.edu/sio/nsf/fguide/thankyou.html
+http://scme-uchicago.blogspot.com/2004_09_01_scme-uchicago_archive.html
+http://scn.infopop.cc/eve/ubb.x/a/tpc/f/22310331/m/71710940563
+http://scn.infopop.cc/eve/ubb.x/a/tpc/f/84310492/m/72710227563
+http://scn.infopop.cc/eve/ubb.x/a/tpc/f/91310331/m/13110741
+http://scn.infopop.cc/eve/ubb.x/a/tpc/f/91310331/m/13110741/xsl/print_topic
+http://scncatalog.scientology.net/OA_HTML/Help.htm
+http://scoobiedavis.blogspot.com/
+http://scoop.agonist.org/story/2005/1/27/193027/242
+http://score.rims.k12.ca.us/activity/castle_builder/
+http://score.rims.k12.ca.us/activity/islam/
+http://score.rims.k12.ca.us/activity/project_helping_hand/
+http://scotland.ideasfactory.com/film_tv/features/feature53.htm
+http://scotland.ideasfactory.com/glasgow/features/feature17.htm
+http://scotland.indymedia.org/newswire/display/1669/index.php
+http://scotland.indymedia.org/newswire/display/1719/index.php
+http://scotlandgolftouring.com/Links---Outside-St.-Andrews/index.php
+http://scotlandonsunday.scotsman.com/business.cfm?id=561922003
+http://scotlandonsunday.scotsman.com/business.cfm?id=644112005
+http://scotlandonsunday.scotsman.com/entertainment.cfm?id=141502005
+http://scotlandonsunday.scotsman.com/index.cfm?id=141502005
+http://scotlandonsunday.scotsman.com/index.cfm?id=274332005
+http://scotlandonsunday.scotsman.com/index.cfm?id=4012005
+http://scotlandonsunday.scotsman.com/index.cfm?id=635312003
+http://scotlandonsunday.scotsman.com/thereview.cfm?id=849142004&20040728132020
+http://scotlandonsunday.scotsman.com/thereview.cfm?id=940712004
+http://scotlandonsunday.scotsman.com/uk.cfm?id=463782004
+http://scotlandvacations.com/joseph_lister.htm
+http://scott.sauyet.com/thoughts/archives/2004/11/
+http://scottishchristian.com/news/index.shtml
+http://scottishlamb.typepad.com/the_scottish_lamb/2005/01/i_dont_mean_to_.html
+http://scottishnous.typepad.com/
+http://scottishritemasons-can.org/hamibody.htm
+http://scottishritemasons-can.org/srcanada.htm
+http://scottneigh.blogspot.com/
+http://scottstuff.net/scott/archives/000320.html
+http://scoutdocs.ca/Scouts_Canada_Act/Statutes.php
+http://scoutingweb.com/scoutingweb/Training/LdrTrain.htm
+http://scpp.ubalt.edu/services.cgi?id=4
+http://screenandsound.llgc.org.uk/cronfa/main.htm
+http://scribbling.net/help_the_googlebot_understand_your_web_site
+http://scribbling.net/how-to-fix-moms-computer
+http://scriptingnews.userland.com/backIssues/2001/09/11
+http://scriptorium.lib.duke.edu/broadside/number7.html
+http://scripts.ireland.com/ancestor/magazine/heraldry/
+http://scripts.iucr.org/cgi-bin/paper?a02224
+http://scripts.iucr.org/cgi-bin/paper?a25401
+http://scripts.lovingyou.com/mdb/search.cgi?mdb=gifts&cat=recp05
+http://scrivenerspen.org/Volume5Issue1/creek.asp
+http://scs.une.edu.au/Bushrangers/songs.htm
+http://scsc.essortment.com/lavendarherbpl_rkgg.htm
+http://sctvguide.ca/episodes/sctv_s43.htm
+http://sd-1.net/lofiversion/index.php/t13397.html
+http://sd-1.net/lofiversion/index.php/t14021.html
+http://sd-1.net/lofiversion/index.php/t19549.html
+http://sd-1.net/lofiversion/index.php/t21942.html
+http://sd-1.net/lofiversion/index.php/t22680.html
+http://sd-1.net/lofiversion/index.php/t23980.html
+http://sd-1.net/lofiversion/index.php/t30095.html
+http://sd-1.net/lofiversion/index.php/t34225.html
+http://sd-1.net/lofiversion/index.php/t37893.html
+http://sd-www.jhuapl.edu/IMAGE/serv_data2/products/manuals/euv_imtool_manual/euv_imtool.html
+http://sd.yeahbabyexpo.com/
+http://sd.yeahbabyexpo.com/main.html
+http://sd.znet.com/~schester/fallbrook/maps/
+http://sd.znet.com/~schester/financial_advice/before_investing.html
+http://sd71.bc.ca/sd71/school/cumberland-jr/school/hw/default.asp?catid=995&cattitle=What+Students+Like+About+Cumberland+Jr.+Secondary
+http://sdguard.ngb.army.mil/careers/careers.asp
+http://sdrc.lib.uiowa.edu/iwa/findingaids/html/LewisThelma.htm
+http://sdsd.essortment.com/richardallenme_rnys.htm
+http://sdwhiteshell.mb.ca/earlychildhood/ecdinterest.htm
+http://seacoastnh.com/arts/please052299.html
+http://seagrant.gso.uri.edu/41N/Vol2No2/fish_feature.html
+http://seagrant.oregonstate.edu/sgpubs/onlinepubs/s02001.html
+http://seagrant.oregonstate.edu/sgpubs/onlinepubs/w99001.html
+http://sealevelsky.blogspot.com/
+http://seamonkey.ed.asu.edu/~alex/teaching/sunday_school/free_will.html
+http://search-engines.allinfoabout.com/Search-Engine-Optimization/Karon-SEO-2.html
+http://search.atomz.com/search/?sp-a=00082ce6-sp00000001&sp-q=='SURF+MOTEL+-+CARLSBAD'
+http://search.atomz.com/search/?sp-q=Balance+of+Payments+and+Components&sp-a=00070447-sp00000000
+http://search.atomz.com/search/?sp-q=Bank+of+Canada+Review&sp-a=00070447-sp00000000
+http://search.atomz.com/search/?sp-q=House+of+Commons&sp-a=00070447-sp00000000
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?cds2Pid=1527&displayonly=EXC&ean=9780743246347&linkid=422977
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?cds2Pid=3057&kids=y&isbn=0618428585&linkid=413123
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?cds2Pid=4359&isbn=0316346624&linkid=410282
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?cds2Pid=6831&PWB=1&ean=9780316346627&linkid=413029
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0195282779
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=074324690X&itm=2
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0761115706
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0783891377&itm=3
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0786101970&itm=4
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0786262060&itm=4
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0805047905&itm=8
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0830832149&itm=9
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=0836822765&itm=3
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=1402897685&itm=5
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=1402897685&itm=77
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=1402897685&itm=9
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=1585422029&itm=9
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?endeca=1&isbn=1885167601&itm=2
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0060530472&itm=19
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0316316962&itm=3
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0316316962&itm=4
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0316346624&itm=2
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0465051359&itm=12
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0679728759&itm=3
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=0743256166&endeca=1&cds2Pid=163&linkid=485816
+http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=1570427933&itm=5
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=4217&brg=y&isbn=0641626754
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=5515&isbn=1885167601
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=5555&brg=y&isbn=1402897685
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=5575&isbn=0316346624
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=5884&brg=y&isbn=0641626754
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?cds2Pid=8735&isbn=0399152849
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ean=9780440236177&displayonly=EXC
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ean=9780440241416&pwb=1&displayonly=CHP
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ean=9780689874741&displayonly=CRV&idx=25
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ean=9781400077823&displayonly=EXC
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?endeca=1&cds2Pid=155&isbn=0743256166
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?endeca=1&cds2Pid=5515&isbn=1885167601
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?isbn=0679728759
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780060530471
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780316346627
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780375422881
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780380713806
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780425179871
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780465051359
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780505525833
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780553274875
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780670033270
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780671671563
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780671797256
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780679772897
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780743246903
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780743256162
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780787979102
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780830832149
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9780895260895
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9781402897689
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9781558216846
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&ean=9781885167606
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&isbn=0316316962
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?pwb=1&isbn=1570427933
+http://search.barnesandnoble.com/booksearch/isbninquiry.asp?sourceid=M000000269&ean=9780767912914&displayonly=EXC
+http://search.cpan.org/src/JMASON/HTML-WebMake-2.2/doc/making.html
+http://search.cpan.org/~jhi/perl-5.8.0/pod/perlfaq4.pod
+http://search.cxo.com/darwin/query.html?ql=&qt=CRM&charset=iso-8859-1&col=darwin
+http://search.cxo.com/darwin/query.html?ql=a&qt=CRM&charset=iso-8859-1&col=darwin
+http://search.cxo.com/darwin/query.html?qm=1&charset=iso-8859-1&col=darwin&qt=CRM
+http://search.cxo.com/darwin/query.html?qt=CRM&col=darwin
+http://search.eb.com/Blackhistory/activity4.jsp
+http://search.eb.com/blackhistory/micro/329/99.html
+http://search.ebay.co.uk/monitor_Cardiovascular-Equipment_W0QQsacategoryZ28059QQsosortpropertyZ1
+http://search.ebay.com/american-telephone
+http://search.ebay.com/custom-classic
+http://search.hotbot.co.uk/results/blinds-buy-window/
+http://search.montanaweb.com/browse.cfm/333,2,14
+http://search.news.yahoo.com/search/news/?p=Federal+Open+Market+Committee
+http://search.news.yahoo.com/search/news/?p=Toni+Collette
+http://search.news.yahoo.com/search/news?p=oil+gas+petroleum&n=10&c=news
+http://search.rubylane.com/search/,id=87,page=2.html
+http://search.universalclass.com/i/search/5345.htm
+http://search.universalclass.com/i/search/Creating-information.htm
+http://search.universalclass.com/i/search/petsit-information.htm
+http://search2.ananzi.co.za/catalog/HealthandBeauty/Beauty/CosmeticsandSkinCare/
+http://search2.downtownmusicgallery.com/Searching/WWW_DMG_Search.cgi?label.orange%5C%5C%20Mountain
+http://searchbox.hyperdictionary.com/dictionary/free
+http://searchdomino.techtarget.com/originalContent/0,289142,sid4_gci1033493,00.html
+http://searchdomino.techtarget.com/tip/1,289483,sid4_gci771657,00.html
+http://searchforlove.blogspot.com/2004_09_01_searchforlove_archive.html
+http://searchkey.com/books/doyle/big_city11.html
+http://searchnetworking.techtarget.com/originalContent/0,289142,sid7_gci962259,00.html
+http://searchnetworking.techtarget.com/tip/1,289483,sid7_gci918038,00.html
+http://searchnetworking.techtarget.com/whitepaperPage/0,293857,sid7_gci1009049,00.html
+http://searchsap.techtarget.com/originalContent/0,289142,sid21_gci966403,00.html
+http://searchstorage.techtarget.com/ateQuestionNResponse/0,289625,sid5_cid562402_tax295552,00.html
+http://searchstorage.techtarget.com/originalContent/0,289142,sid5_gci966137,00.html
+http://searchstorage.techtarget.com/tip/1,289483,sid5_gci1034300,00.html
+http://searchstorage.techtarget.com/tip/1,289483,sid5_gci1034733,00.html
+http://searchstorage.techtarget.com/tip/1,289483,sid5_gci808783,00.html
+http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci842794,00.html
+http://searsmedia.com/mediatools/press.jsp
+http://seasonsseminars.com/goodpeople.html
+http://seattle.bizjournals.com/seattle/stories/2002/04/08/daily8.html
+http://seattle.indymedia.org/en/2005/01/244360.shtml
+http://seattlemariners.blogspot.com/2004_06_01_seattlemariners_archive.html
+http://seattlep-i.nwsource.com/football/48557_hawk29.shtml
+http://seattlep-i.nwsource.com/local/24202_uwbiz23.shtml
+http://seattlep-i.nwsource.com/local/30466_frontier07.shtml
+http://seattleperforms.com/index.php?option=com_nathevents&action=view_day&year=2005&month=5&day=29
+http://seattleperforms.com/index.php?option=com_nathevents&action=view_month&year=2005&month=5
+http://seattlepi.nwsource.com/
+http://seattlepi.nwsource.com/athome/229714_homecal25.html
+http://seattlepi.nwsource.com/attack/43546_chaplains20.shtml
+http://seattlepi.nwsource.com/baseball/227445_maridraft07.html
+http://seattlepi.nwsource.com/baseball/31009_ellis12.shtml
+http://seattlepi.nwsource.com/business/126622_vulcan14.html
+http://seattlepi.nwsource.com/business/210947_listening07.html
+http://seattlepi.nwsource.com/business/223367_homecall09.html
+http://seattlepi.nwsource.com/business/apbiz_story.asp?category=1310&slug=Rowing%20Against%20Offshore
+http://seattlepi.nwsource.com/football/222895_hawk05.html
+http://seattlepi.nwsource.com/getaways/040298/dest02.html
+http://seattlepi.nwsource.com/getaways/090398/braz03.html
+http://seattlepi.nwsource.com/getaways/145991_shorttrips30.html
+http://seattlepi.nwsource.com/getaways/226827_out02.html
+http://seattlepi.nwsource.com/getaways/81705_hike08.shtml
+http://seattlepi.nwsource.com/graham/208220_billy01.html
+http://seattlepi.nwsource.com/hax/210223_hax02.html
+http://seattlepi.nwsource.com/health/226147_condor30.html
+http://seattlepi.nwsource.com/health/227764_mold09.html
+http://seattlepi.nwsource.com/jamieson/226988_robert03.html
+http://seattlepi.nwsource.com/legislature/conflicts_house.asp
+http://seattlepi.nwsource.com/lifestyle/218453_punkymoms04.html
+http://seattlepi.nwsource.com/local/108579_missingday17.shtml
+http://seattlepi.nwsource.com/local/149699_coma25.html
+http://seattlepi.nwsource.com/local/158099_nodoctorhere26.html
+http://seattlepi.nwsource.com/local/179766_navywife28.html
+http://seattlepi.nwsource.com/local/194977_animals13.html
+http://seattlepi.nwsource.com/local/204624_politics21.html
+http://seattlepi.nwsource.com/local/205131_dalcospill24.html
+http://seattlepi.nwsource.com/local/205486_freighter28.html
+http://seattlepi.nwsource.com/local/206939_greene07.html
+http://seattlepi.nwsource.com/local/211012_tsunamiscience07.html
+http://seattlepi.nwsource.com/local/211615_vcenter11.html
+http://seattlepi.nwsource.com/local/216047_bankruptcy15.html
+http://seattlepi.nwsource.com/local/219000_teachers06.html?searchpagefrom=1&searchdiff=0
+http://seattlepi.nwsource.com/local/222943_safety05.html
+http://seattlepi.nwsource.com/local/223950_dumpster12.html
+http://seattlepi.nwsource.com/local/224153_anorexia13.html?searchpagefrom=1&searchdiff=0
+http://seattlepi.nwsource.com/local/225559_payday24.html?searchpagefrom=1&searchdiff=0
+http://seattlepi.nwsource.com/local/227638_brownfield08.html
+http://seattlepi.nwsource.com/local/227638_brownfield08.html?searchpagefrom=1&searchdiff=0
+http://seattlepi.nwsource.com/local/227965_salmon10.html
+http://seattlepi.nwsource.com/local/229506_manleycustody22.html
+http://seattlepi.nwsource.com/local/229689_cashingfood23.html
+http://seattlepi.nwsource.com/local/wtoo25.shtml
+http://seattlepi.nwsource.com/movies/115713_tango04q.shtml
+http://seattlepi.nwsource.com/movies/apmovies_story.asp?category=1402&slug=Movies%20AP%20AOL%20Poll
+http://seattlepi.nwsource.com/national/145267_arctic24.html
+http://seattlepi.nwsource.com/national/228556_blairmemo15.html
+http://seattlepi.nwsource.com/nwgardens/217240_wingate24.html
+http://seattlepi.nwsource.com/nwgardens/225912_lovejoy28.html
+http://seattlepi.nwsource.com/opinion/227891_tony10.html
+http://seattlepi.nwsource.com/opinion/228981_schiavo19.html
+http://seattlepi.nwsource.com/transportation/119423_design26.html
+http://seattlepi.nwsource.com/transportation/227159_monorail04.html
+http://seattlepi.nwsource.com/transportation/228903_trolley17.html
+http://seattlepi.nwsource.com/transportation/96121_get18.shtml
+http://seattlepi.nwsource.com/venture/121167_vc09.html
+http://seattlepi.nwsource.com/venture/191189_vc17.html?searchpagefrom=1&searchdiff=4
+http://seattlepi.nwsource.com/venture/225088_vc20.html
+http://seattlepi.nwsource.com/venture/227904_vc10.html
+http://seattletimes.nwsource.com/homes/html/2001/homeshock20.html
+http://seattletimes.nwsource.com/html/businesstechnology/2002179287_paul14.html
+http://seattletimes.nwsource.com/html/businesstechnology/2002196324_jaech04.html
+http://seattletimes.nwsource.com/html/businesstechnology/2002223020_gatesthink29.html
+http://seattletimes.nwsource.com/html/businesstechnology/2002225729_graying31.html
+http://seattletimes.nwsource.com/html/education/2002340942_sos19e.html?syndication=rss
+http://seattletimes.nwsource.com/html/health/2002258621_liztaylor02.html
+http://seattletimes.nwsource.com/html/health/2002324856_healthetiquette12.html
+http://seattletimes.nwsource.com/html/iraq/2002172341_iraqchatter06.html
+http://seattletimes.nwsource.com/html/living/2002347389_jdl26.html
+http://seattletimes.nwsource.com/html/localnews/2002141045_doctor05m.html
+http://seattletimes.nwsource.com/html/localnews/2002160868_dige26m.html
+http://seattletimes.nwsource.com/html/localnews/2002167537_webwolves01.html
+http://seattletimes.nwsource.com/html/localnews/2002321032_healthincentives08m.html
+http://seattletimes.nwsource.com/html/localnews/2002340883_gayscience19m.html
+http://seattletimes.nwsource.com/html/nationworld/2001909526_coffinside22m.html
+http://seattletimes.nwsource.com/html/nationworld/2002150449_yeechapter8.html
+http://seattletimes.nwsource.com/html/nationworld/2002150604_yeeepilogue.html
+http://seattletimes.nwsource.com/html/nationworld/2002172341_iraqchatter06.html
+http://seattletimes.nwsource.com/html/nationworld/2002345123_flag23.html
+http://seattletimes.nwsource.com/html/opinion/2002167361_larson02.html
+http://seattletimes.nwsource.com/html/travel/2002168239_nwwcomics03.html
+http://seattletimes.nwsource.com/news/local/737/part01/
+http://seattletimes.nwsource.com/pacificnw/2003/0727/cover.html
+http://seattletimes.nwsource.com/text/2002347555_longtermloans26.html
+http://seattletimes.nwsource.com/uninformed_consent/bloodcancer/story1_p3.html
+http://seattlewebcrafters.com/nsecc/?q=node/view/10
+http://seattlewebcrafters.com/nsecc/?q=node/view/8
+http://seattlewebcrafters.com/nsecc/?q=node/view/9
+http://seawifs.gsfc.nasa.gov/OCEAN_PLANET/HTML/ps_power.html
+http://seazoo.com/about.htm
+http://secc.rti.org/display.cfm?t=m&i=Chapter_50
+http://secc.rti.org/display.cfm?t=m&i=Chapter_53_3
+http://secret.oucs.ox.ac.uk/dv/files/dv-9.html
+http://secretariat.concordia.ca/policies/vrs/en/VRS-49.shtml
+http://secrets.scripting.com/
+http://sections.asme.org/SyracuseNY/notice.htm
+http://secure.ultracart.com/catalog/bbco/women/
+http://security.linux.com/article.pl?sid=03/08/22/0443248&tid=90&tid=35
+http://security.royans.net/info/papers/statistical_attack.shtml
+http://security.uchicago.edu/docs/userpassword.shtml
+http://security.vt.edu/gotoclass/
+http://securityresponse.symantec.com/avcenter/venc/data/backdoor.trojan.html
+http://securityresponse.symantec.com/avcenter/venc/data/codered.ii.html
+http://securityresponse.symantec.com/avcenter/venc/data/w32.dumaru.ah@mm.html
+http://securityresponse.symantec.com/avcenter/venc/data/w32.korgo.removal.tool.html
+http://securityresponse.symantec.com/avcenter/venc/data/w32.netsky@mm.removal.tool.html
+http://securityresponse.symantec.com/avcenter/venc/data/w32.randex.e.html
+http://securityresponse.symantec.com/avcenter/venc/data/w32.sasser.removal.tool.html
+http://securityresponse.symantec.com/avcenter/venc/data/win.script.hosting.html
+http://sedis.blogspot.com/2005/06/anthropological-film-in-finland-from.html
+http://seed.scit.wlv.ac.uk/papers/position.html
+http://seedsforchange.org.uk/free/diary
+http://seegreenink.typepad.com/seegreenink/2005/01/_i_was_at_the.html
+http://seeingthedifference.berkeley.edu/micco
+http://seekers.100megs6.com/gran-cayenne.htm
+http://seetheforest.blogspot.com/2004_04_01_seetheforest_archive.html
+http://seetheforest.blogspot.com/2004_11_01_seetheforest_archive.html
+http://segwaychat.com/forum/topic.asp?whichpage=-1&TOPIC_ID=10048&REPLY_ID=86038
+http://seis.bris.ac.uk/~glcjh/ivhhn/news/news.html
+http://seisatsu.net/
+http://sekaiseifuku.net/floating1.html
+http://selborne.parish.hants.gov.uk/village.html
+http://selfpublishing.lifetips.com/
+http://sell-your-home-fsbo.com/
+http://selland.boisestate.edu/academic_programs/BASD.htm
+http://sellingtobigcompanies.blogs.com/selling/2004/08/
+http://sellingtobigcompanies.blogs.com/selling/sales_training_tips/
+http://sellingtobigcompanies.blogs.com/selling/tough_questions_ask_the_expert/
+http://semale.atspace.com/free/shemale-toons-free.html
+http://semanticcompositions.typepad.com/index/2004/05/happy_mothers_d.html
+http://semanticcompositions.typepad.com/index/2004/week44/
+http://semcosh.org/cold%20stress.htm
+http://semenlostatsea.blogspot.com/
+http://semiconweb.com/microscope.html
+http://seminardirect.com/?trackcode=bizcom
+http://sen.parl.gc.ca/dhays/information-en.htm
+http://sen.parl.gc.ca/ymorin/en/speeches_template.asp?speechID=17
+http://seniorhealth.about.com/library/weekly/aa062401a.htm
+http://seniorhealth.about.com/od/prevention/a/doc_fitness.htm
+http://seniorliving.about.com/od/healthnutrition/a/7agingskincause.htm
+http://seniorliving.about.com/od/visionproblems/a/macularstudyfru.htm
+http://seniorliving.miningco.com/od/healthnutrition/a/7agingskincause.htm
+http://seniors.hothost.tv/free_foot_fetish_thumbnails.html
+http://seniorshop.gamestalks.com/cocegas.html
+http://seniorshop.gamestalks.com/foot_fetish_and_model_content.html
+http://seniorshop.gamestalks.com/footsie.html
+http://seniorshop.gamestalks.com/free_foot_fetish_site.html
+http://seniorshop.gamestalks.com/gay_male_foot_fetish.html
+http://senseis.xmp.net/?SomeBasicTipsForFuseki
+http://sensors.lbl.gov/sf_particle.html
+http://sentencing.typepad.com/sentencing_law_and_policy/2005/01/scotus_speaks_e.html
+http://sentencing.typepad.com/sentencing_law_and_policy/2005/01/take_a_deep_bre.html
+http://sentencing.typepad.com/sentencing_law_and_policy/race_class_and_gender/
+http://seosamh.blogspot.com/
+http://septterror.tripod.com/memory4.html
+http://sepwww.stanford.edu/~morgan/snwburd/trip_reports/round_top_2.html
+http://serc.carleton.edu/NAGTWorkshops/teacherprep03/low.html
+http://serendip.brynmawr.edu/Mind/James.html
+http://serendip.brynmawr.edu/bb/EncyHumBehav.html
+http://serendip.brynmawr.edu/bb/neuro/neuro01/web3/Webb.html
+http://serendip.brynmawr.edu/biology/b103/f01/web2/dada.html
+http://serendip.brynmawr.edu/biology/b103/f01/web3/ginanni.html
+http://serendip.brynmawr.edu/biology/b103/f01/web3/rosas.html
+http://serendip.brynmawr.edu/biology/b103/f02/web1/mrhyu.html
+http://serendip.brynmawr.edu/complexity/complexity.html
+http://serendip.brynmawr.edu/local/scisoc/sports02/forumarchive2-3.html
+http://serendip.brynmawr.edu/sci_cult/courses/beauty/syllabus.html
+http://serendip.brynmawr.edu/sci_cult/courses/knowbody/f04/web3/nevans.html
+http://serendip.brynmawr.edu/sci_cult/culturedisability.html
+http://serendip.brynmawr.edu/serendipia/Serendipia-Shen.html
+http://serg.uvweb.org/ar_2003_2004
+http://serg.uvweb.org/stories/storyReader$38
+http://server.alabamacu.com/Alabama%20CU%20pages/MoreSvcs.html
+http://server.bmod.athabascau.ca/html/prtut/reinpair.htm
+http://server.boardgamestuff.com:8000/pair-of-dice-games-reviews.html
+http://server1.fandm.edu/levittown/three/kitchen.html
+http://server1.msn.co.in/boxoffice/articles/output.asp?urlid=4
+http://server2.dyned.com/voande4.htm
+http://service.real.com/realplayer/streamhelp/
+http://service.spiegel.de/cache/international/0,1518,343281,00.html
+http://service.spiegel.de/cache/international/0,1518,346951,00.html
+http://service.spiegel.de/cache/international/0,1518,357342,00.html
+http://service.spiegel.de/cache/international/0,1518,360285,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,357366,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,357628,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,359690,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,361236,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,362110,00.html
+http://service.spiegel.de/cache/international/spiegel/0,1518,362574,00.html
+http://servicelearningcommission.org/slcommission/profiles.html
+http://services.vsac.org/ilwwcm/connect/VSAC/Library/Pathfinders/VSAC%20-%20LIBRARY%20-%20Pathfinders%20-%20Self-Employment
+http://servlets.com/tools/
+http://seshperankh.blogspot.com/2005_04_01_seshperankh_archive.html
+http://sessioneast1.tripod.com/id2.html
+http://sessions.senate.gov/pressapp/record.cfm?id=178453
+http://sessions.senate.gov/pressapp/record.cfm?id=231087
+http://sessions.senate.gov/pressapp/record.cfm?id=236199
+http://set-upinc.com/rp5/nctshome.shtml
+http://sethgodin.typepad.com/seths_blog/2004/09/
+http://sethgodin.typepad.com/seths_blog/2005/05/a_letter_from_k.html
+http://sethgodin.typepad.com/seths_blog/2005/05/seths_new_ebook.html
+http://sethgodin.typepad.com/seths_blog/2005/06/small_is_the_ne.html
+http://setiathome.berkeley.edu/forum_thread.php?id=16267
+http://setiweb.ssl.berkeley.edu/forum_thread.php?id=15278
+http://seven.com.au/seven/as_howard
+http://sevenoaksmag.com/features/49_feat1.html
+http://sewell.thefreelibrary.com/Black-Beauty/1-13
+http://sexfitness.lifevistas.com/
+http://sexstory.blogsome.com/2005/06/20/
+http://sexstory.blogsome.com/2005/06/20/sex-story-caught-in-the-act/
+http://sexton.library.dal.ca/newbooks/nb010504.html
+http://sexton.library.dal.ca/newbooks/nb101204.html
+http://seychellesoffshore.com/index.php?lang=en&page=1_4_3
+http://sf.indymedia.org/news/2005/06/1716277.php
+http://sfa.knowledgestorm.com/kssfa/search/browse/1390/1390.jsp
+http://sfa.knowledgestorm.com/search/keyword/kssfa/Sales%20Representatives%20White%20Paper/Sales%20Representatives%20White%20Paper
+http://sfattorney.typepad.com/law/
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/01/14/DDGG048F0G1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/07/27/DEMOS.TMP
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/10/15/BUG7T8E81H63.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/01/23/LVGT7ASCMR1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/01/24/MNGJKAVAAL1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/02/02/HOGSI717TT30.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/02/05/MNG0TB6KQ91.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/02/17/BUG5QBCI5B1.DTL&type=business
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/03/03/BUGQVBJDI01.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/03/17/BUGN2BQE9T1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/04/11/MNGKIC697J1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/04/18/MNGMFCAH6A1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/05/09/MNG5LCLEU41.DTL&type=science
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/05/22/INGUNCQHKJ1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/05/TRGOOD1RFN1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/12/MNGJND7G5T1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2005/01/22/MNGN2AUP8O1.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2005/06/12/SPG5PD7F531.DTL&type=golf
+http://sfgate.com/cgi-bin/article.cgi?f=/g/a/2005/06/22/gree.DTL
+http://sfgate.com/cgi-bin/article.cgi?f=/news/archive/2005/01/06/sports1407EST0350.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2003/09/10/MN266317.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/10/25/MNGED9FNH01.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/01/28/BUG46B1PJU1.DTL&type=printable
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/02/03/WIG5IB45A71.DTL&type=printable
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/02/05/MNG0TB6KPV1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/02/13/MNGSGBAGRH1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/03/03/BUGQVBJDI01.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/04/11/MNGKIC697J1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/04/15/MNG29C9D8D1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/04/24/PKGCACAHS91.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/04/29/MNGT1CHIU11.DTL&type=science
+http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/06/28/BUSH.TMP
+http://sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/07/28/DDG287THBA1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/10/30/BAG4S9IHPG27.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/12/21/MNGN8AEV0J1.DTL
+http://sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2004/06/18/notes061804.DTL
+http://sfhelp.org/04/myths.htm
+http://sfhs.eget.net/P_articles/Pelo88.html
+http://sfmicroangels.org/CustomPage5.html
+http://sfy.iv.ru/sfy.html?script=o_brother
+http://sg.ksdb.com/
+http://sga.utdallas.edu/web1/sga_standing_rules.html
+http://sgce.cbse.uab.edu/carson/papers/wavelets/wave_dis.html
+http://sgs.cnr.colostate.edu/EdWeb/EdResourceCenter/carbon.htm
+http://sgtlizzie.blogspot.com/2004/12/in-hosptital.html
+http://sgtlizzie.blogspot.com/2005_01_01_sgtlizzie_archive.html
+http://shakespeareauthorship.com/
+http://shakespeareauthorship.com/bacpenl.html
+http://shakespeareauthorship.com/bacpl2.html
+http://shamankinghq.net/fanchar1.html
+http://shamusissues.blogspot.com/
+http://shanghaiexpat.com/admin.php?module=Web_Links&op=main
+http://share.studio.adobe.com/axBrowseProductType.asp?t=45
+http://share.studio.adobe.com/axBrowseSubmit.asp?c=161
+http://share.studio.adobe.com/axBrowseSubmit.asp?r=0&t=45&pgsel1=1
+http://sharedjourney.com/articles/3vs5.html
+http://shareholders.commbank.com.au/group_display/0,1922,NI2181%255FCH2181,00.html
+http://sharingpensions.co.uk/legislation2.htm
+http://sharingsteve.blogspot.com/2004/03/exerpt-from-book-about-dating-steve.html
+http://shatnerian.blogspot.com/2003_07_01_shatnerian_archive.html
+http://shauny.org/pussycat/
+http://sheepandgoat.com/articles/WMD.html
+http://sheesh.pitas.com/
+http://sheetmusic.music123.com/search_query.asp?all=%22Plant%2C+Robert%22&who=Artist&cookie=yes
+http://shekel.jct.ac.il/cc-res/online-doc/libgPP/iostream_toc.html
+http://sheknows.com/about/look/2948.htm
+http://sheknows.com/about/look/4298.htm
+http://shelby.senate.gov/news/record.cfm?id=182340
+http://shelby.senate.gov/news/record.cfm?id=237005
+http://shelby.senate.gov/newsletter/050408.html
+http://shellcity.net/content8.htm
+http://shenuts.com/index.php?p=815
+http://shewhoeats.blogspot.com/2005/02/tea-break-with-costs-and-efforts.html
+http://shika.aist-nara.ac.jp/products/wcol/tech/p_concept.html
+http://shittyblogsclub.blogcafe.com/
+http://shop.3rdedition.org/product_info.php?products_id=32401&
+http://shop.abc.net.au/help/faq.shtm
+http://shop.canada.nhl.com/helpdesk/index.jsp?display=safety&subdisplay=terms&clickid=botnav_terms_txt
+http://shop.comedycentral.com/sm-dane-cook-lewis-black-and-jim-breuer-on-dvd--pi-1422847.html
+http://shop.comedycentral.com/sm-lewis-black-books--fi-1989151_cp-1080338.html
+http://shop.comedycentral.com/sm-lewis-black-books--fi-1989151_cp-1334645.html
+http://shop.comedycentral.com/sm-lewis-black-cd-and-dvd-pack--pi-2014889.html
+http://shop.comedycentral.com/sm-lewis-black-luther-burbank-performing-arts-center-blues-cd--pi-1923497.html
+http://shop.comedycentral.com/sm-lewis-black-unleashed-and-black-on-broadway-dvd-set--pi-2011509.html
+http://shop.deviantart.com/featuredartist/?id=3
+http://shop.divebooty.com/products/ms_miscellaneous-drysuits.html
+http://shop.homeenergy.org/chapt1.html
+http://shop.mlb.com/helpdesk/index.jsp?display=ordering&subdisplay=checkout
+http://shop.nhl.com/sm-hockey-protective-equipment--bg-222795.html
+http://shop.orange.co.uk/shop/reasons_html
+http://shop.scottish.parliament.uk/item.jsp?ID=1888
+http://shop.scottish.parliament.uk/item.jsp?ID=2279
+http://shop.scran.ac.uk/prod.php?prod_id=SC006
+http://shop.store.yahoo.com/4crests/shcoofarfacr.html
+http://shop.store.yahoo.com/a-s-publishing/coverletters.html
+http://shop.store.yahoo.com/a-s-publishing/covletstratt.html
+http://shop.store.yahoo.com/a-s-publishing/provresstrat1.html
+http://shop.store.yahoo.com/allergybuyersclub/bedfur.html
+http://shop.store.yahoo.com/brandsplace/0097-42092.html
+http://shop.store.yahoo.com/brandsplace/0097-42093.html
+http://shop.store.yahoo.com/esistore-store/artoffocgrou1.html
+http://shop.store.yahoo.com/foosdirect-store/neon-signs.html
+http://shop.store.yahoo.com/hopup1/info.html
+http://shop.store.yahoo.com/longskate/info.html
+http://shop.store.yahoo.com/museumjt/
+http://shop.store.yahoo.com/sharperimage-best/si448.html
+http://shopfort1.com/wi/land-o'lakes.cfm
+http://shopper.cnet.com/WizCom_Quicktionary_II_Chinese_Traditional/4014-3141_9-5609401.html?noid=4014-3141_9-5609401&orderby=90&sort=
+http://shopper.cnet.com/WizCom_Quicktionary_II_Chinese_Traditional/4014-3141_9-5609401.html?q=
+http://shopper.howstuffworks.com/products/Craft+Supplies/SF-3/BEFID-96464/NM-20/ND-20/PGNUM-7
+http://shopper.howstuffworks.com/products/KEYWORD-Aircraft+Carriers
+http://shopper.howstuffworks.com/products/KEYWORD-Aircraft+Carriers/shopping.howstuffworks.com/
+http://shopper.howstuffworks.com/products/SF-3/BEFID-31515/DNATRS-price_range_price_range_15_30/NM-20/ND-20/SB-2
+http://shopper.howstuffworks.com/products/SF-3/BEFID-31515/KEYWORD-body+armor
+http://shopper.howstuffworks.com/products/SF-3/BEFID-96392/LINKIN_ID-3070556/DNATRS-ibm
+http://shopping.hostrave.com/B0002XVQSU/24___Season_Three.html
+http://shopping.lycos.co.uk/c8196p1m0b0/sony_ericsson.html
+http://shopping.lycos.co.uk/c8204p1m0b0/samsung.html
+http://shopping.msn.com/fts/ftsresults.aspx?searchText=&fcId=5&pcId=13812&order=2
+http://shopping.msn.com/marketplace.aspx?catId=0&pmpType=1&pcId=1059&merchId=2646&invMerchModel=23687
+http://shopping.msn.com/marketplace.aspx?mpId=13635&catId=267&pmpType=0
+http://shopping.msn.com/marketplace.aspx?mpId=16769&catId=183&pmpType=0
+http://shopping.msn.com/marketplace.aspx?pmpType=1&mpId=0&pcId=1062&catId=381&page=1
+http://shopping.msn.com/marketplace.aspx?pmpType=1&pcId=1059&catId=380
+http://shopping.msn.com/marketplace.aspx?pmpType=1&pcId=15474&catId=391
+http://shopping.msn.com/marketplace.aspx?pmpType=1&pcId=2383&catId=391
+http://shopping.msn.com/softcontent/softcontent.aspx?scpId=2186&scmId=1029
+http://shopping.msn.com/softcontent/softcontent.aspx?scpId=4509&scmId=1498
+http://shopping.yahoo.com/merchrating/user_rv.html?merchant_id=1011251
+http://shopping.yahoo.com/p:Buffalo%20Bill%20and%20the%20Indians%20or%20Sitting%20Bull's%20History%20Lesson:1802838411
+http://shopping.yahoo.com/p:Coming%20to%20America:1800049701
+http://shopping.yahoo.com/p:Creepin%20on%20ah%20Come%20Up:1921155450:page=user-reviews
+http://shopping.yahoo.com/p:Dave%20Barry%20Is%20Not%20Taking%20This%20Sitting%20Down:3001603543
+http://shopping.yahoo.com/p:Giovanni%20Marradi:1927287679
+http://shopping.yahoo.com/p:Microsoft%20Project%20Standard%202002%20Software:1990860428
+http://shopping.yahoo.com/p:Miles%20Davis%2FCharlie%20Parker:1927753909:page=discography:subpage=boxsets
+http://shopping.yahoo.com/p:Sitting%20Ducks%20Game%20Boy%20Advance:1951016541
+http://shopping.yahoo.com/p:Sitting%20Ducks%20PlayStation%202:1951016570
+http://shopping.yahoo.com/p:The%20Wonder%20Stuff:1927011287
+http://shopping.yahoo.com/premium/consumerreports/silver.html?id=41233409
+http://shopping.yahoo.com/s:Pants:4157-Gender=Female,Unisex:4204-Age=Adult:browsename=Women's%20Pants:4348-Pant%20Fit=Loose%20Fit:4349-Pant%20Leg=Tapered:refspaceid=20151776
+http://shore.com/commentary/newsanal/items/2005/20050207siia.html
+http://shot.holycross.edu/manifesto/
+http://shotinthedark.info/
+http://shotsacrossthebow.com/archives/2004_12.html
+http://showboard.com/index.php?option=content&task=view&id=78
+http://showboard.com/index2.php?option=content&task=view&id=56&pop=1&page=0
+http://showcase.netins.net/web/creative/lincoln/speeches/fair.htm
+http://showdogs-l.com/Westminster2005.html
+http://shows.airamericaradio.com/alfrankenshow/
+http://shows.airamericaradio.com/direct/node/14
+http://shows.airamericaradio.com/ms/node?from=200
+http://shows.airamericaradio.com/ms/node?from=240
+http://shr.aaas.org/report/xxiii/chixoy_dam.htm
+http://shrillblog.blogspot.com/
+http://shrinkinggurl.blogspot.com/
+http://shroudedindoubt.typepad.com/bodyparts/
+http://shs.iienet.org/
+http://shubhayan.com/gandhi/chap114.html
+http://siarchives.si.edu/history/exhibits/thisday/january.htm
+http://sibbyonline.blogs.com/sibbyonline/argus_leader_bias/
+http://sickle.bwh.harvard.edu/comp_care.html
+http://sicsa.huji.ac.il/WUPJ-Wistrich-2004-items%206-9-17.htm
+http://sids-network.org/experts/bedshare.htm
+http://sids-network.org/fp/prescott.htm
+http://sify.com/education/fullstory.php?id=13643893
+http://sify.com/itihaas/fullstory.php?id=13375072
+http://sify.com/motoring/fullstory.php?id=13599458
+http://sify.com/news/fullstory.php?id=13655264
+http://sify.com/news/international/
+http://sify.com/news/politics/fullstory.php?id=13465216
+http://sify.com/peopleandplaces/fullstory.php?id=13611036
+http://sig.nfc.usda.gov/capps/cappsnotes/2003/mar/mar19.html
+http://siiap.sagyp.mecon.ar/http-hsi/english/bse/August23.htm
+http://silencefalls.blogspot.com/2005/04/bikini-girls-with-machine-guns.html
+http://silenteloquence.suryaonline.org/2005/05/12/the-handshake-and-such/
+http://silentio.blogspot.com/
+http://silflayhraka.com/archives/001283.html
+http://siliconvalley.internet.com/news/article.php/362561
+http://sillydog.org/forum/viewtopic.php?p=50085
+http://sillydog.org/forum/viewtopic.php?p=50270
+http://sillydog.org/forum/viewtopic.php?p=50286
+http://sillydog.org/forum/viewtopic.php?p=50296
+http://sillydog.org/forum/viewtopic.php?p=50321
+http://sillydog.org/forum/viewtopic.php?p=50395
+http://sillydog.org/forum/viewtopic.php?p=50490
+http://sillydog.org/forum/viewtopic.php?p=50495
+http://sillydog.org/forum/viewtopic.php?t=7562&postdays=0&postorder=asc&start=210
+http://sillydog.org/forum/viewtopic.php?t=8911
+http://sillyklutz.tblog.com/
+http://silverchips.mbhs.edu/inside.php?sid=2955
+http://silverrights.blogspot.com/
+http://silverstr.ufies.org/blog/archives/000635.html
+http://sim.law.uu.nl/SIM/CaseLaw/tribunals.nsf/0/23e97b8cba84f9bfc1256aa700474761?OpenDocument
+http://simonc.f2o.org/south/
+http://simonworld.mu.nu/archives/037779.php
+http://simple.wikipedia.org/wiki/2001
+http://simple.wikipedia.org/wiki/Communism
+http://simple.wikipedia.org/wiki/Communists
+http://simple.wikipedia.org/wiki/Talk:E_Prime
+http://simplesubjects.blogspot.com/
+http://simplyrestless.netfirms.com/
+http://simplyscripts.com/scripts/fightingmarvin.html
+http://simulistics.com/tour/elements.htm
+http://sin.uwaterloo.ca/examInformation.php
+http://sine.ni.com/csol/cds/item/vw/p/id/249/nid/124100
+http://sine.ni.com/csol/cds/item/vw/p/id/249/nid/124200
+http://sine.ni.com/csol/cds/item/vw/p/id/249/nid/124300
+http://singleparents.about.com/cs/getorganized/a/personalrecords.htm
+http://singleparents.about.com/cs/stressmanagement/a/5stagesofgrief.htm
+http://singpraises.blogspot.com/
+http://singyee-muistory.blogdrive.com/archive/cm-06_cy-2005_m-06_d-01_y-2005_o-0.html
+http://singyee-muistory.blogdrive.com/archive/cm-06_cy-2005_m-06_d-04_y-2005_o-0.html
+http://singyee-muistory.blogdrive.com/archive/cm-06_cy-2005_m-06_d-08_y-2005_o-0.html
+http://sinnfein.ie/peace/document/116
+http://siop.org/Conferences/99Con/99ConProg/FridayAM.htm
+http://siop.org/Conferences/99Con/99ConProg/SaturdayAM.htm
+http://siostudents.ucsd.edu/2003_Teaching_Award.html
+http://sipreal.com/sipreal/index-4.html
+http://siss.ucdavis.edu/student_financial_info.htm
+http://sisters.islamway.com/modules.php?name=News&file=article&sid=298
+http://sites.scran.ac.uk/films_of_scotland/Citizenship/chapter02.htm
+http://sites.state.pa.us/PA_Exec/Fish_Boat/promo/initiatives/leg/hr222_response.htm
+http://sites.stocksphere.com/cds/articles.asp?articleid=26
+http://sitesm2.org/sitesm2_search/adv_orand.html
+http://sittingduckradio.com/nuke/index.php
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=cnewsday
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=ithaca
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=mcall
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=national
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=newsjour
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=olympian
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=pe
+http://siy.cars.com/siy/qsg/qsg.jsp?aff=usatoday
+http://sja.ucdavis.edu/avoid.htm
+http://skazat.com/justin/currents.cgi/1999/7
+http://skepdic.com/althelth.html
+http://skepdic.com/coldread.html
+http://skepdic.com/emdr.html
+http://skepdic.com/enneagolf.html
+http://skepdic.com/intelligentdesign.html
+http://skepdic.com/mindcont.html
+http://skepdic.com/myersb.html
+http://skepdic.com/news/newsletter41.html
+http://skepdic.com/sat.html
+http://skepdic.com/tt.html
+http://ski.mtbuller.com.au/lessons/instructor.html
+http://skincarerx.com/acne.html
+http://skiteam.union.rpi.edu/aboutus.html
+http://skyedreams.blogspot.com/archives/2003_02_23_skyedreams_archive.html
+http://skywatch.brainiac.com/Palmastro/project1.htm
+http://skyways.lib.ks.us/history/hands.html
+http://slacktivist.typepad.com/slacktivist/2005/05/pastor_billy_bo.html
+http://slacktivist.typepad.com/slacktivist/2005/05/private_propert.html
+http://slacktivist.typepad.com/slacktivist/2005/06/private_propert.html
+http://slacktivist.typepad.com/slacktivist/2005/06/threshholds.html
+http://slacktivist.typepad.com/slacktivist/left_behind/
+http://slam.canoe.ca/Slam040608/nhl_caltb4-sun.html
+http://slam.canoe.ca/SlamChats/gd_010130.html
+http://slashdot.org/
+http://slashdot.org/faq/metamod.shtml
+http://slashgoth.org/stories.php?story=02/07/30/3722029
+http://slate.msn.com/?id=2065551
+http://slate.msn.com/?id=2065586
+http://slate.msn.com/?id=2067592&
+http://slate.msn.com/?id=2070499
+http://slate.msn.com/?id=91839
+http://slate.msn.com/default.aspx?id=2067592
+http://slate.msn.com/default.aspx?id=27730
+http://slate.msn.com/id/1001921/
+http://slate.msn.com/id/1004707/
+http://slate.msn.com/id/1005136/
+http://slate.msn.com/id/1007292/
+http://slate.msn.com/id/101318/
+http://slate.msn.com/id/101726/
+http://slate.msn.com/id/102689/
+http://slate.msn.com/id/109707
+http://slate.msn.com/id/111905/
+http://slate.msn.com/id/2000102/entry/1003372/
+http://slate.msn.com/id/2000102/entry/1003377/
+http://slate.msn.com/id/2060840/
+http://slate.msn.com/id/2061465/
+http://slate.msn.com/id/2065586/
+http://slate.msn.com/id/2065895/
+http://slate.msn.com/id/2073997/
+http://slate.msn.com/id/2076621/
+http://slate.msn.com/id/2076621/entry/2077012/
+http://slate.msn.com/id/2076621/entry/2077036/
+http://slate.msn.com/id/2077294/
+http://slate.msn.com/id/2078584/
+http://slate.msn.com/id/2081085/
+http://slate.msn.com/id/2082829/
+http://slate.msn.com/id/2082846/
+http://slate.msn.com/id/2083704/
+http://slate.msn.com/id/2083847
+http://slate.msn.com/id/2083847/
+http://slate.msn.com/id/2083857/entry/2083881/
+http://slate.msn.com/id/2086427/
+http://slate.msn.com/id/2087654/
+http://slate.msn.com/id/2087984/
+http://slate.msn.com/id/2088948/
+http://slate.msn.com/id/2089298/
+http://slate.msn.com/id/2091218/
+http://slate.msn.com/id/2091774/
+http://slate.msn.com/id/2091949/
+http://slate.msn.com/id/2092442/
+http://slate.msn.com/id/2093620/entry/2093641/
+http://slate.msn.com/id/2093620/entry/2094001/
+http://slate.msn.com/id/2094145/
+http://slate.msn.com/id/2095158/
+http://slate.msn.com/id/2095876/entry/2096214/
+http://slate.msn.com/id/2096973
+http://slate.msn.com/id/2096973/
+http://slate.msn.com/id/2097473/
+http://slate.msn.com/id/2100900/
+http://slate.msn.com/id/2101011/
+http://slate.msn.com/id/2101678
+http://slate.msn.com/id/2101698/
+http://slate.msn.com/id/2102006/
+http://slate.msn.com/id/2102203/
+http://slate.msn.com/id/2102723/
+http://slate.msn.com/id/2103239/
+http://slate.msn.com/id/2104755/
+http://slate.msn.com/id/2105096/
+http://slate.msn.com/id/2107063/entry/2107071/
+http://slate.msn.com/id/2107890/
+http://slate.msn.com/id/2108171/
+http://slate.msn.com/id/2108509/
+http://slate.msn.com/id/2108887/
+http://slate.msn.com/id/2109167/
+http://slate.msn.com/id/2109558/
+http://slate.msn.com/id/2109908/
+http://slate.msn.com/id/2110504/
+http://slate.msn.com/id/2110601/
+http://slate.msn.com/id/2110977
+http://slate.msn.com/id/2110987/
+http://slate.msn.com/id/2111135/
+http://slate.msn.com/id/2111172/
+http://slate.msn.com/id/2111499/
+http://slate.msn.com/id/2112608/
+http://slate.msn.com/id/2112621/
+http://slate.msn.com/id/2112653/
+http://slate.msn.com/id/2112695/
+http://slate.msn.com/id/2113964/
+http://slate.msn.com/id/2114154
+http://slate.msn.com/id/2118109/
+http://slate.msn.com/id/2118394/
+http://slate.msn.com/id/2119536/
+http://slate.msn.com/id/2119998/
+http://slate.msn.com/id/2120222/
+http://slate.msn.com/id/2120229/
+http://slate.msn.com/id/2120487/
+http://slate.msn.com/id/2120553/
+http://slate.msn.com/id/2120554/
+http://slate.msn.com/id/2120574/
+http://slate.msn.com/id/2120785/
+http://slate.msn.com/id/2120855/
+http://slate.msn.com/id/2121177/
+http://slate.msn.com/id/2121367/
+http://slate.msn.com/id/2354/entry/2110427/
+http://slate.msn.com/id/27730/
+http://slate.msn.com/id/30161/
+http://slate.msn.com/id/3097/
+http://slate.msn.com/id/3330/
+http://slate.msn.com/id/76624/
+http://slate.msn.com/id/76886/
+http://slate.msn.com/id/89524/entry/89599/
+http://slate.msn.com/id/89524/entry/89639/
+http://slerp.rutgers.edu/retrieve.php?id=148-3
+http://slhs.org.uk/
+http://slic.info/archives/2005/05/03/information-for-slic-and-ifla-events-june-2005/
+http://slidingconstant.net/entry/category/deep-thoughts/
+http://sligoir.ags.myareaguide.com/detail.html?cityguide=history
+http://slisweb.lis.wisc.edu/~SLA/tour5.html
+http://sln.suny.edu/sln/public/cshome.nsf/docs/55
+http://sloanreview.mit.edu/smr/issue/1993/fall/4/
+http://slovensko.com/forum/read.php?11,16178,page=3
+http://slovensko.com/forum/read.php?2,7411,page=2
+http://slsp.arts.unsw.edu.au/home/graduates.html
+http://slumbering.lungfish.com/
+http://slumberingpierrot.blogspot.com/2003_07_01_slumberingpierrot_archive.html
+http://smallbusiness.findlaw.com/business-forms-contracts/contracts/alpha/p/1034.html
+http://smallbusiness.findlaw.com/business-forms-contracts/contracts/type/compensation/benefits.html
+http://smallbusiness.findlaw.com/business-forms-contracts/contracts/type/compensation/retirement.html
+http://smallbusiness.yahoo.com/resources/article.php?mcid=1&scid=13&aid=2311
+http://smallbusiness.yahoo.com/resources/article.php?mcid=1&scid=9&aid=2316
+http://smallbusiness.yahoo.com/resources/article.php?mcid=6&scid=35&aid=2714
+http://smallbusiness.yahoo.com/resources/article.php?mcid=7&scid=29&aid=2163
+http://smallcomets.physics.uiowa.edu/blackspot.html
+http://smalldogrescue.com/available.html
+http://smallfarms.wsu.edu/crops/christTreeAnnosusRootRot.html
+http://smartmoney.com/consumer/index.cfm?story=working-june02
+http://smartmoney.com/theproshop/?nav=dropTab
+http://smartpei.typepad.com/robert_patersons_weblog/2004/03/sex_education_a.html
+http://smartpei.typepad.com/robert_patersons_weblog/bloggers_parliament_energy/
+http://smartpei.typepad.com/robs_thoughts/culture_family/
+http://smatters.com/
+http://smh.com.au/handheld/articles/2005/06/03/1117568376791.html
+http://smh.com.au/letters/
+http://smh.com.au/news/Breaking-News/Pigs-looking-to-stay-in-NBL-finals-hunt/2005/02/10/1107890342889.html
+http://smh.com.au/news/Breaking-News/Prostate-cancer-hits-rural-men-harder/2005/02/07/1107625086985.html
+http://smh.com.au/news/Ross-Gittins/Trade-deficit-the-key-to-avoiding-debt-trap/2005/06/03/1117568376791.html
+http://smh.com.au/news/Sport/Pigs-looking-to-stay-in-NBL-finals-hunts/2005/02/10/1107890342889.html
+http://smh.com.au/news/Sport/Tszyu-stays-true/2005/06/03/1117568382292.html
+http://smh.com.au/news/Stephen-Bartholomeusz/Hedge-funds-in-trouble-as-more-sharks-join-the-pool/2005/01/28/1106850109161.html
+http://smh.com.au/news/World/Judge-rejects-parents-appeal-for-critically-ill-baby/2005/01/29/1106850159985.html
+http://smh.com.au/news/World/New-Palestinian-cabinet-approveds/2005/02/21/1108834712380.html
+http://smh.com.au/news/World/Rugby-fan-cuts-off-testicles-to-celebrate-win/2005/02/08/1107625187885.html
+http://smh.com.au/news/national/man-abducted-wife-tied-up-during-robbery/2005/06/27/1119724549363.html
+http://smh.com.au/text/articles/2005/06/03/1117568376791.html
+http://smis.iki.rssi.ru/public/eng/spisok.htm
+http://smokeyspice.blogspot.com/
+http://smokingsides.com/asfs/C/Church.html
+http://smt.blogs.com/trends_style_culture/trends_style_and_culture_in_tokyo/
+http://snaffer.typepad.com/viewpoints/2004/10/whats_tough_abo.html
+http://snap.lbl.gov/news/brn_09_26_04.htm
+http://snap.lbl.gov/news/nyt_02_21_04.htm
+http://snard.com/sg/guide/?ep=41&fmt=0
+http://snltranscripts.jt.org/03/03qgoodtimes.phtml
+http://snltranscripts.jt.org/04/04fbush.phtml
+http://snltranscripts.jt.org/04/04sgrind.phtml
+http://snltranscripts.jt.org/78/78tolympia.phtml
+http://snltranscripts.jt.org/80/80lcat.phtml
+http://snltranscripts.jt.org/86/86fupdate.phtml
+http://snltranscripts.jt.org/90/90hgame.phtml
+http://snow.grounds-mag.com/ar/grounds_maintenance_january_2/
+http://snow.utoronto.ca/access/higher/
+http://socap.blogspot.com/
+http://soccernet.espn.go.com/feature?id=269745&cc=5739
+http://soccernet.espn.go.com/feature?id=270193&cc=%25
+http://soccernet.espn.go.com/feature?id=270193&cc=5739
+http://soccernet.espn.go.com/feature?id=287331&cc=5901
+http://soccernet.espn.go.com/feature?id=293034&cc=5901
+http://soccernet.espn.go.com/feature?id=293214&cc=5739
+http://soccernet.espn.go.com/feature?id=305593&cc=%25
+http://soccernet.espn.go.com/feature?id=305593&cc=5739
+http://soccernet.espn.go.com/feature?id=305593&cc=5901
+http://soccernet.espn.go.com/feature?id=324398&cc=5901
+http://soccernet.espn.go.com/feature?id=324688&cc=5901
+http://soccernet.espn.go.com/feature?id=332535&
+http://soccernet.espn.go.com/feature?id=332535&cc=%25
+http://soccernet.espn.go.com/feature?id=332535&cc=5901
+http://soccernet.espn.go.com/feature?id=332610&cc=5739
+http://soccernet.espn.go.com/feature?id=334696&cc=5901
+http://soccernet.espn.go.com/headlinenews?id=313658&cc=5901
+http://soccernet.espn.go.com/headlinenews?id=314526&cc=5901
+http://social.chass.ncsu.edu/jouvert/v7i2/hicrev.htm
+http://socialalert.org/doc/denonciation_urgente_phil_en.htm
+http://socialjustice.nic.in/social/sdcop/benefits.htm
+http://socialunion.gc.ca/ecd/2004/english/page09.html
+http://society.guardian.co.uk/2001budget/comment/0,8146,449113,00.html
+http://society.guardian.co.uk/2001election/story/0,8150,495254,00.html
+http://society.guardian.co.uk/NHSstaff/story/0,7991,1479951,00.html
+http://society.guardian.co.uk/adoption/story/0,8150,1356153,00.html
+http://society.guardian.co.uk/alderhey/story/0,7999,431014,00.html
+http://society.guardian.co.uk/alderhey/story/0,7999,431313,00.html
+http://society.guardian.co.uk/children/story/0,1074,557455,00.html
+http://society.guardian.co.uk/childreninpoverty/comment/0,8146,522500,00.html
+http://society.guardian.co.uk/christmasappeal/story/0,11321,858267,00.html
+http://society.guardian.co.uk/climbie/story/0,10939,616539,00.html
+http://society.guardian.co.uk/climbie/story/0,10939,884088,00.html
+http://society.guardian.co.uk/commongood/story/0,8150,461446,00.html
+http://society.guardian.co.uk/conferences/story/0,9744,1428676,00.html
+http://society.guardian.co.uk/e-public/story/0,13927,1362746,00.html
+http://society.guardian.co.uk/glossary/story/0,11811,673793,00.html
+http://society.guardian.co.uk/healthandsocialcarebill/story/0,7991,443818,00.html
+http://society.guardian.co.uk/homelessness/story/0,8150,1475533,00.html
+http://society.guardian.co.uk/housing/
+http://society.guardian.co.uk/housing/0,7886,374539,00.html
+http://society.guardian.co.uk/housingdemand/comment/0,14488,1397203,00.html
+http://society.guardian.co.uk/housingdemand/story/0,14488,1502615,00.html
+http://society.guardian.co.uk/labourspublicservices/story/0,11943,1361752,00.html
+http://society.guardian.co.uk/localgovelections/story/0,8150,948040,00.html
+http://society.guardian.co.uk/longtermcare/story/0,8150,1488739,00.html
+http://society.guardian.co.uk/longtermcare/story/0,8150,1509088,00.html
+http://society.guardian.co.uk/managingnewrealities/story/0,14030,1165545,00.html
+http://society.guardian.co.uk/nhsperformance/story/0,8150,1439529,00.html
+http://society.guardian.co.uk/nhsplan/story/0,7991,1127241,00.html
+http://society.guardian.co.uk/privatefinance/story/0,8150,1502362,00.html
+http://society.guardian.co.uk/privatehealthcare/story/0,8150,825567,00.html
+http://society.guardian.co.uk/publichealth/comment/0,11098,1501707,00.html
+http://society.guardian.co.uk/publicvoices/education/story/0,11989,716086,00.html
+http://society.guardian.co.uk/publicvoices/emergencyplanning/story/0,12873,900074,00.html
+http://society.guardian.co.uk/publicvoices/nhs/story/0,11809,671713,00.html
+http://society.guardian.co.uk/publicvoices/nhs/story/0,11809,677645,00.html
+http://society.guardian.co.uk/publicvoices/story/0,11803,670357,00.html
+http://society.guardian.co.uk/publicvoices/story/0,11803,917623,00.html
+http://society.guardian.co.uk/socialexclusion/story/0,11499,1439797,00.html
+http://socs.berkeley.edu/~olney/spring05/econ1/oldfinal.html
+http://socserv2.mcmaster.ca/soc/courses/soc4s3/house/domindex.htm
+http://socserv2.mcmaster.ca/~econ/ugcm/3ll3/clarkjb/clarkjb001.html
+http://socserv2.socsci.mcmaster.ca/~econ/ugcm/3ll3/maitland/domesday
+http://soeweb.syr.edu/thefci/6-2mey.htm
+http://sofia.usgs.gov/metadata/
+http://softcom.biz/Newsletter/Summer2004/
+http://software.ericsink.com/Act_Your_Age.html
+http://software.ericsink.com/scm/scm_basics.html
+http://softwarehero.com/main_new/products.htm
+http://sohodojo.com/newsletters/rnr_newsletter_07.html
+http://soidisantra.typepad.com/soi_disantra/2005/06/voice_of_author.html
+http://sol.lp.findlaw.com/
+http://solarcooking.org/Solar-Ovens-for-Developing-Countries.htm
+http://solarcooking.org/sbcdes2.htm
+http://solfertje.student.utwente.nl/~dalroi/bedtime.php
+http://soli.inav.net/~catalyst/Humor/ahcomp.htm
+http://soli.inav.net/~circle/spdir.html
+http://solidarity.igc.org/atc/martin72.html
+http://solitaryphoenix.com/WitchbladeEpisodeGuideS2P6.html
+http://solomonspalding.com/Lib/Fulr1994.htm
+http://solomonspalding.com/SRP/SRPpap04.htm
+http://solomonsrefuge.com/it/roma1.htm
+http://solomonsrefuge.com/wp/
+http://solophile.com/Mar30_Apr05.html
+http://solstice.crest.org/repp_pubs/articles/issuebr5/issuebr5b.html
+http://solstice.crest.org/repp_pubs/articles/issuebr5/issuebr5i.html
+http://solstice.crest.org/repp_pubs/articles/issuebr9/summary.html
+http://solutions.synearth.net/2001/10/04
+http://som.binghamton.edu/programs/phd/marketing.htm
+http://somervillenews.typepad.com/the_somerville_news/kate_a_hecht/
+http://somesongs.com/song_info.php?select=3238
+http://son.nasa.gov/tass/magnetosphere/ob_tromso_e.htm
+http://songfight.net/forums/viewtopic.php?t=1158
+http://songstress7.typepad.com/beyond/
+http://songstress7.typepad.com/beyond/2005/06/everything_that.html
+http://sonk.deviantart.com/
+http://sonnets.onlinebizplanner.com/ah-speak-to-me-of-age-and-i-reply.htm
+http://soo.studentorg.wisc.edu/0405_pages/reserving_space.htm
+http://sor.cua.edu/ChMon/USASyr/BurbankSEphraim.html
+http://sos.state.mt.us/css/BSB/RA9.asp
+http://soscanada2000.com/higherstudies/gradstud.html
+http://soul.scan.swin.edu.au/~hinnesbrown/diary.php
+http://soulitude.net/fgconsume.htm
+http://soundmoney.publicradio.org/programs/2003/shows03_03.htm
+http://soundproofing.org/ChurchBook/church_sound_book.htm
+http://soundthinking.typepad.com/some_sound_thinking/wallet_pictures/
+http://soundwaves.usgs.gov/2003/07/fieldwork2.html
+http://sourcebooks.com/content/catalog/catalog.asp?isbn=157248330x
+http://sources.redhat.com/ml/binutils/2003-12/msg00260.html
+http://south-carolina-plantations.com/beaufort/village-farm.html
+http://south-carolina-plantations.com/colleton/village.html
+http://south-korea.designerz.com/south-korea-maps-and-views.php
+http://southafrica.indymedia.org/
+http://southafricanews.net/
+http://southasia.net/article159.html
+http://southasia.net/article162.html
+http://southasia.oneworld.net/article/country/360/160
+http://southburnett.com.au/cgi-bin/calendar/calendar.cgi
+http://southburnett.com.au/cgi-bin/calendar/calendart.cgi
+http://southdakotapolitics.blogs.com/
+http://southdakotapolitics.blogs.com/south_dakota_politics/
+http://southeastfarmpress.com/news/farming_grazing_study_looks/
+http://southernappeal.blogspot.com/2004_08_29_southernappeal_archive.html
+http://southernlibrarianship.icaap.org/content/v03n03/Jurkowski_o01.htm
+http://southernlibrarianship.icaap.org/content/v04n01/Mckay_s01.htm
+http://southflorida.bizjournals.com/southflorida/stories/2005/01/17/daily4.html
+http://southmed.usouthal.edu/library/auth-ins.htm
+http://southpaw.goodshow.net/
+http://southport.jpl.nasa.gov/cdrom/sirced03/cdrom/ROADMAP/EDUOVIEW/OVERVUWD.HTM
+http://southport.jpl.nasa.gov/cdrom/sirced03/cdrom/ROADMAP/REFERMAP/FAQ.HTM
+http://southsudanfriends.org/wunlit/day2.html
+http://southwest.library.arizona.edu/azsk/body.1_div.8.html
+http://southwestfarmpress.com/mag/farming_oh_baby_finally/
+http://southwestfarmpress.com/news/farming_farming_numbers/
+http://southwestfarmpress.com/news/farming_rangeland_weed_control/
+http://soybeandigest.com/news/soybean_new_root_rotresistant/
+http://space.about.com/cs/marsrovers/a/opp020104a.htm
+http://space.about.com/od/livinginspace/
+http://space.about.com/od/livinginspace/index_a.htm
+http://space.about.com/od/livinginspace/index_r.htm
+http://space.mit.edu/CSR/outreach/PressXray.html
+http://spaceandculture.org/2005_01_01_archive.php
+http://spaceflightnow.com/cassini/050115science.html
+http://spaceflightnow.com/delta/d304/status.html
+http://spaceflightnow.com/delta/d311/050106preview.html
+http://spaceflightnow.com/news/n0503/23blackhole/
+http://spaceformusic.com/theporch.html
+http://spaces.msn.com/members/ManchesterBuccaneers/
+http://spaces.msn.com/members/aboudavid/Blog/cns!1p9Ev48i1mLI3u52I0M6FTKA!388.entry
+http://spaces.msn.com/members/cyndysplace/
+http://spaces.msn.com/members/discoverabeautifulheart/
+http://spaces.msn.com/members/dullneon/
+http://spaces.msn.com/members/mike/
+http://spaces.msn.com/members/oogabooga/
+http://spaces.msn.com/members/squawkblog/
+http://spaces.msn.com/members/theredcouch/Blog/cns!1pu14osYRd1qo-cP37HiEsow!105.entry
+http://spaces.msn.com/members/tt-siesta/Blog/cns!1pA04VuxycjSc-Izqxn_onGg!178.entry
+http://spaceweather.com/
+http://spaceyideas.com/publicity/ozcomputer.html
+http://spainforvisitors.com/sections/eatinganddrinking.htm
+http://spam.gunters.org/archive/2004/12/09/spam-poetry-is-beautiful-stuff
+http://spamwars.com/archives/2005/03/
+http://spanish.about.com/
+http://spanish.about.com/od/tipsforlearningspanish/f/two_languages.htm
+http://spankyjewels.blogspot.com/
+http://spareroom.org/mailart/mis_4.html
+http://spartan.ac.brocku.ca/~lward/Mead/pubs/Mead_1907a.html
+http://spartan.ac.brocku.ca/~lward/Mead/pubs/Mead_1915a.html
+http://sparvus-krebbs.journalspace.com/
+http://spas.about.com/library/weekly/aa070702g.htm
+http://spd.aas.org/minutes/20030617_Laurel.html
+http://speakingoffaith.publicradio.org/programs/2004/10/07_faith/index.shtml
+http://speakingoffaith.publicradio.org/programs/2005/01/06_spiritofislam/ramadan.shtml
+http://speakout.com/forum_view.asp?Forum=Homeland_Security&MID=1153&mMID=1153
+http://specialchildren.about.com/od/therapies/a/specialist.htm
+http://specialevents.com/operations/events_secrets_staying_power_20050116/
+http://specials.ft.com/euro/FT30PW7IXQC.html
+http://specials.ft.com/lifeonthenet/FT3VFL9OOCC.html
+http://specials.ft.com/nicocolchester/FT30GEQCKIC.html
+http://specials.ft.com/timeoff/film/FT3YVT6KOZC.html
+http://specialtychemicalsales.com/
+http://speech-language-pathologist.ffind.servebeer.com/
+http://speedclimb.com/14ers/
+http://speeddemosarchive.com/MetroidPrime.html
+http://speeddemosarchive.com/news.html
+http://spell-bound.net/Archives/2004/12/new_years_the_a.html
+http://spellingrules.com/succeed/
+http://spiceplay.com/spices/Ravoness/
+http://spicerweb.org/pages/strike/Oshkosh_wwstrike.html
+http://spider.georgetowncollege.edu/htallant/border/bs10/grubbs.htm
+http://spider.ipac.caltech.edu/staff/roc/2mass/catalogs/final/singleband/single_band.html
+http://spinegrinder.deviantart.com/journal/
+http://spinwatch.server101.com/modules.php?name=News&file=article&sid=53
+http://spirituality.rolf-witzsche.com/sex.html
+http://spiritvillage.blogspot.com/
+http://spleenville.com/journal/archives/005486.php
+http://spleenville.com/journal/archives/cat_arcadia.php
+http://splmtoday.com/modules.php?name=News&file=article&sid=1565
+http://splmtoday.com/modules.php?name=News&file=article&sid=2269
+http://splmtoday.com/modules.php?name=News&file=print&sid=1565
+http://splmtoday.com/modules.php?name=News&file=print&sid=2736
+http://spltrak.com/pages/support_home.html
+http://spokanevalleycommunitycenter.org/letter_from_director.htm
+http://spoonertrainride.com/church_groups.htm
+http://sport.guardian.co.uk/columnists/theobserver/story/0,10541,1514937,00.html
+http://sport.guardian.co.uk/lions2005/story/0,15994,1498887,00.html
+http://sport.guardian.co.uk/lions2005/story/0,15994,1514938,00.html
+http://sport.guardian.co.uk/lions2005/story/0,15994,1514938,00.html?gusrc=rss
+http://sport.guardian.co.uk/news/story/0,10488,1112584,00.html
+http://sport.guardian.co.uk/rugbyunion/comment/0,10070,1391379,00.html
+http://sport.guardian.co.uk/rugbyunion/comment/0,10070,1514936,00.html
+http://sport.guardian.co.uk/rugbyworldcup2003/story/0,13904,1081266,00.html
+http://sport.guardian.co.uk/rugbyworldcup2003/story/0,13904,1091626,00.html
+http://sport.independent.co.uk/football/comment/
+http://sport.independent.co.uk/football/european/
+http://sport.independent.co.uk/football/liverpool/
+http://sport.independent.co.uk/football/liverpool/story.jsp?story=646730
+http://sport.independent.co.uk/general/
+http://sport.independent.co.uk/low_res/story.jsp?story=646730&host=18&dir=124
+http://sport.independent.co.uk/rugby_union/
+http://sport.scotsman.com/football_stmirren.cfm?display=season&id=1
+http://sport.scotsman.com/topics.cfm?tid=1060&id=443382005
+http://sport.scotsman.com/topics.cfm?tid=1274&id=300032005
+http://sport.scotsman.com/topics.cfm?tid=668&id=1367012004
+http://sport.telegraph.co.uk/sport/main.jhtml?view=DETAILS&grid=&xml=/sport/2004/09/15/socoe15.xml
+http://sports-cards.listings.ebay.ca/Autographs-Original_Olympics_W0QQsacatZ23798QQsocmdZListingItemList
+http://sports-law.blogspot.com/2003_12_01_sports-law_archive.html
+http://sports.espn.go.com/chat/sportsnation/story?page=FranchiseKeating2005
+http://sports.espn.go.com/espn/page2/story?page=lovinger/050111
+http://sports.espn.go.com/espn/page2/story?page=lovinger/050208
+http://sports.espn.go.com/espn/print?id=742912&type=story
+http://sports.espn.go.com/espn/sportsbusiness/news/story?id=1968869
+http://sports.espn.go.com/mlb/columns/story?columnist=neyer_rob&id=1506813
+http://sports.espn.go.com/nba/playoffs2003/story?id=1551303
+http://sports.espn.go.com/ncf/statistics
+http://sports.espn.go.com/nfl/columns/story?columnist=paolantonio_sal&id=1791416
+http://sports.espn.go.com/nfl/statistics
+http://sports.espn.go.com/nfl/statistics?stat=team&league=afc&season=2&year=2004
+http://sports.espn.go.com/nfl/statistics?stat=team&league=nfc&season=2&year=2004
+http://sports.espn.go.com/nfl/statistics?stat=team&sort=ypg&pos=def&league=nfc&year=2004&season=2
+http://sports.espn.go.com/nfl/statistics?stat=team&sort=ypg&pos=off&league=nfc&year=2004&season=2
+http://sports.espn.go.com/nhl/columns/story?id=1841487
+http://sports.espn.go.com/nhl/playoffs2004/columns/story?columnist=buccigross_john&id=1799817
+http://sports.espn.go.com/rpm/news/story?series=wc&id=2041844
+http://sports.intertext.com/
+http://sports.mainetoday.com/seadogs/stories/030209springbb.shtml
+http://sports.mainetoday.com/seadogs/stories/050324snowdogs.shtml
+http://sports.smumn.edu/baseball/2005/newsletter/bbrueda.html
+http://sports.yahoo.com/golf/pga/news?slug=ap-timdahlberg&prov=ap&type=lgns
+http://sports.yahoo.com/irl/news?slug=bm-newmanhaas051405&prov=yhoo&type=lgns
+http://sports.yahoo.com/irl/news?slug=indy500curry&prov=st&type=lgns
+http://sports.yahoo.com/mlb/news?slug=rs-spring05nlwest&prov=yhoo&type=lgns
+http://sports.yahoo.com/nascar/news?slug=bm-nascarissues021105&prov=yhoo&type=lgns
+http://sports.yahoo.com/nascar/news?slug=jb-juniorglasses060305&prov=yhoo&type=lgns
+http://sports.yahoo.com/nascar/news?slug=jb-martinretires1014&prov=yhoo&type=lgns
+http://sports.yahoo.com/nascar/news?slug=jt-robbygordon062505&prov=yhoo&type=lgns
+http://sports.yahoo.com/nba/news?slug=sk-surething&prov=yhoo&type=lgns
+http://sports.yahoo.com/nba/recap?gid=2005030104
+http://sports.yahoo.com/nba/recap?gid=2005052314
+http://sports.yahoo.com/ncaaf/news?slug=uwire-newathleticdirectorsaysbuf&prov=uwire&type=lgns
+http://sports.yahoo.com/ncaaf/news?slug=uwire-neweastcarolinastrengthcoa&prov=uwire&type=lgns
+http://sports.yahoo.com/nfl/boxscore?gid=20041206026
+http://sports.yahoo.com/nfl/news?slug=ap-patriotsdynasty&prov=ap&type=lgns
+http://sports.yahoo.com/nfl/news?slug=cnnsi-whileiwasaway&prov=cnnsi&type=lgns
+http://sports.yahoo.com/nfl/news?slug=cr-bucs042905&prov=yhoo&type=lgns
+http://sports.yahoo.com/nfl/news?slug=cr-combinenotes022705&prov=yhoo&type=lgns
+http://sports.yahoo.com/sow/news?slug=reu-confedaustralia_sports_featu&prov=reuters&type=lgns
+http://sports.yahoo.com/sow/news?slug=reu-uefa&prov=reuters&type=lgns
+http://sports.yahoo.com/ten/news?slug=ap-frenchopen-women&prov=ap&type=lgns
+http://sports.yahoo.com/top/news?slug=dw-mailbag011805&prov=yhoo&type=lgns
+http://sports.yahoo.com/top/news?slug=dw-mailbag121404&prov=yhoo&type=lgns
+http://sportsgoods.listings.ebay.com.au/Exercise-Fitness_Step-Machines_W0QQfsooZ1QQfsopZ12QQsacatZ28062QQsocmdZListingItemList
+http://sportsmedicine.about.com/cs/sport_psych/a/aa010603a.htm
+http://sportsmedicine.about.com/od/sportsnutrition/a/wtlosestrategy.htm
+http://sportsvl.com/ball/handball.htm
+http://spot.colorado.edu/~ashtonm/owpp/marriage.html
+http://spot.colorado.edu/~kaplan/econ2010/section7/section7-main.html
+http://spotlighton.tripod.com/Column_11-30-2003.htm
+http://sprg.ssl.berkeley.edu/~cyclopi/lesson1.html
+http://springfield.news-leader.com/opinions/ozarksvoices/0628-Trainswhis-121558.html
+http://springfield.news-leader.com/opinions/today/20050203-Senateopensseas.html
+http://sprott.physics.wisc.edu/pickover/noodlead.html
+http://sps.k12.mo.us/khs/german/germany/teacher/dttakeover.htm
+http://sptimes.com/2005/06/15/Hernando/County_stealthily_aba.shtml
+http://sptimes.com/2005/06/23/Opinion/The_plight_of_migrant.shtml
+http://spub.ksu.edu/article.php?a=2240
+http://spyed.deviantart.com/journal/?jid=609173
+http://spyshop2000.com/dvr_recorders.htm
+http://squat.net/archiv/cracking/text7.html
+http://squat.net/archiv/squatbook1/
+http://squelchie325.blogspot.com/
+http://src-h.slav.hokudai.ac.jp/publictn/45/matsuzato/matsuzato-e.html
+http://srfi.schemers.org/srfi-28/mail-archive/msg00018.html
+http://srforums.prosoundweb.com/index.php/m/29724/0
+http://srforums.prosoundweb.com/index.php/m/35892/0
+http://srforums.prosoundweb.com/index.php/t/3999/0
+http://srg.digitalbrain.com/srg/web/frontpage/documents/Gwyn%20News%2003-04/issue%2020.htm
+http://srirangan.net/india-defence/node/254
+http://srmwww.gov.bc.ca/risc/pubs/tebiodiv/marshbirds/biraml20-01.htm
+http://sro.theory.org/library/For_the_Love_of_Hacking/lovehack.html
+http://sromagazine.biz/mag/show_show_control/
+http://ssax.sourceforge.net/
+http://ssd.oregonstate.edu/facultyProceduresDE.aspx
+http://ssfin.missouri.edu/report.htm
+http://ssr1.uchicago.edu/PRELIMS/Strat/stmisc2.html
+http://ssrn.com/abstract=225320
+http://ssrn.com/abstract=236671
+http://ssrn.com/abstract=483483
+http://ssrn.com/abstract=511362
+http://ssrn.com/abstract=636166
+http://st.matthews.jobs.topusajobs.com/
+http://staff.ccis.edu/yliow/Courses/CISS245/
+http://staff.psy.gla.ac.uk/~steve/interactivity.html
+http://staff.science.uva.nl/~andrew/NewWiki/InterestsPage
+http://stagedoor.totallyhip.com/helpdesk/support_terms.html
+http://staging.unit1.com/
+http://stalkergame.studentcenter.org/about.php
+http://stampauctionnetwork.com/f/f4677.cfm
+http://standards.ieee.org/corpforum/cag/wgproc.html
+http://standdown.net/
+http://standingonthebox.blogspot.com/
+http://staplhorse.tripod.com/feeding.html
+http://star-techcentral.com/tech/story.asp?file=/2005/6/21/corpit/11237448&sec=corpit
+http://star.cde.ca.gov/star2004/help_comparescores.asp
+http://starbucksgossip.typepad.com/_/2004/11/starbucks_to_do.html
+http://starbulletin.com/1999/09/27/news/story1.html
+http://starbulletin.com/2003/01/20/features/story3.html
+http://starbulletin.com/2003/10/30/sports/story2.html
+http://starbulletin.com/2004/10/04/features/story1.html
+http://starbulletin.com/2005/01/23/sports/story5.html
+http://starbulletin.com/2005/03/15/news/story3.html
+http://starbulletin.com/97/04/28/sports/story2.html
+http://starchefs.com/ask_the_expert/trendspotters/html/issue_04.shtml
+http://starchefs.com/business_tools/learning_materials/html/financial_reports.shtml
+http://starchefs.com/wine/starspirits/html/del_maguey/del_maguey.shtml
+http://starfire.ne.uiuc.edu/~ne201/1995/jennings/hydro.html
+http://starform.infj.ulst.ac.uk/Billsweb/PGCert/intranets/Graham/Assignment/History5.htm
+http://starryskies.com/
+http://starryskies.com/articles/spec/hooks.html
+http://start-successful-business-online-in-48-hours.com/blog/2004/09/whats-happening-to-pagerank.html
+http://start.earthlink.net/article/bus?guid=20050623/42ba33c0_3421_1334520050623-1155592830
+http://starthealthylife.com/page266.htm
+http://startup.curtin.edu.au/study/literature.html
+http://starwars.atomfilms.com/
+http://starwarsgalaxies.station.sony.com/content.jsp?page=Accounts%20Billing%20Creating%20Account
+http://starwarsgalaxies.station.sony.com/manual_detail.jsp?chapter=7
+http://starwarsgalaxies.station.sony.com/manual_printview.jsp?chapter=7
+http://stat-www.berkeley.edu/Gmatters/gradcourses.html
+http://stat.genopole.cnrs.fr/periods/help.jsp
+http://statecore.its.txstate.edu/
+http://static.userland.com/gems/joel/uibookcomplete.htm
+http://station05.qc.ca/css/cybersite/reach-out/strategies/TEACHING.htm
+http://stations.cpb.org/radio/mip/implications.html
+http://stations.cpb.org/tv/highlights/99paper.html
+http://stats.bls.gov/oco/ocos058.htm
+http://stats.bls.gov/oco/ocos083.htm
+http://stats.bls.gov/oco/ocos175.htm
+http://status-women.utoronto.ca/Oct21_2004_event.htm
+http://status-women.utoronto.ca/Oct22event.htm
+http://status.motime.com/
+http://status.srcf.ucam.org/
+http://stc.utk.edu/htm/pdf%20files/hver/khattak.htm
+http://steelgryphon.com/blog/
+http://steelgryphon.com/blog/?p=34
+http://steelgryphon.com/blog/index.php?p=34
+http://stefanostadal.homedns.org/hillwalking.htm
+http://stemcells.nih.gov/policy/statements/120298.asp
+http://stephanieklein.blogs.com/
+http://stephenlewisfoundation.org/docs/20020721-G6B-Opening.html
+http://stephenschneider.stanford.edu/Climate/Climate_Policy/Policy.html
+http://stereophile.com/analogsourcereviews/796/
+http://stereophile.com/news/10246/
+http://stereophile.com/news/11315/
+http://steve-and-pattie.com/esperantujo/vocab.html
+http://steve-parker.org/random/2004/nov/
+http://steveb290671.blogspot.com/
+http://stevesmind.blogspot.com/
+http://stgc.myjamaica.com/can-29.htm
+http://stillhq.com/planet-aus-dotnet/
+http://stillswebsite.tripod.com/british_medical_journal.htm
+http://stingersbaseball.com/stadium/
+http://stitches.com/mag/apparel_embroidery_front_lines/
+http://stjohns.cbc.ca/morningshow/features.html
+http://stlconline.org/sermons/20050123.html
+http://stlouis.bizjournals.com/site_map/stlouis_sitemap_102.html
+http://stlouis.bizjournals.com/site_map/stlouis_sitemap_151.html
+http://stlouis.indymedia.org/
+http://stlouis.missouri.org/5yearstrategy/app_d.html
+http://stlouis.missouri.org/cin/privacy.html
+http://stlouis.missouri.org/gatewaygreening/GrowLab.htm
+http://stlouisfed.org/news/speeches/2002/04_04_02.html
+http://stlouisfed.org/publications/re/2003/c/pages/central_bank.html
+http://stockgarden.com/garden-pass.htm
+http://stocks.about.com/od/advancedtrading/
+http://stocks.about.com/od/advancedtrading/a/Stoksel060905.htm
+http://stocks.about.com/od/understandingstocks/a/stocksectors.htm
+http://stolenthunder.blogspot.com/
+http://stommel.tamu.edu/~baum/paleo/paleogloss/node5.html
+http://stone.undp.org/undpweb/ohr/ohrjbview.cfm?jaf_uid_c=1656
+http://stone.undp.org/undpweb/ohr/ohrjbview.cfm?jaf_uid_c=1745
+http://stonecamel.com/wp/archives/2005/06/09/156/sonya-the-black-widow-thomas
+http://stopdesign.com/log/2004/08/10/present-wish-list.html
+http://stopshopping.journurl.com/
+http://stopshoppingmonitor.journurl.com/
+http://stopshoppingmonitor.journurl.com/index.cfm?mode=page&month=6-14-2005
+http://stoptheaca.net/about/indy/def-complex-coming-en.html
+http://storage.itworld.com/4653/050607hddvd/
+http://storage.itworld.com/4653/050607hddvd/page_1.html
+http://storagemagazine.techtarget.com/magItem/1,291266,sid35_gci828799,00.html
+http://storagetek.shareholder.com/ReleaseDetail.cfm?ReleaseID=149512
+http://store.adobe.com/activation/main.html
+http://store.aetv.com/html/dvdlibrary.jhtml
+http://store.annabellina.com/prac1oz.html
+http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore?productLearnMore=M9893Z/A
+http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore?productLearnMore=TC292LL/A
+http://store.apple.com/Catalog/US/Images/salespolicies.html
+http://store.atozteacherstuff.com/merchant.mvc?Screen=PROD&Product_Code=TD_Glue-A-Word
+http://store.babycenter.com/parentpicks/clothing_maternity/boy_0_12_months
+http://store.babycenter.com/product/clothing/sleepwear/baby_sleepwear/5472
+http://store.babycenter.com/product/clothing/sleepwear/baby_sleepwear/5473
+http://store.babycenter.com/product/toys/by_type/arches_and_gyms/4544
+http://store.cmpu.com/itemview.cfm?itemno=RMSDX2UI
+http://store.eharlequin.com/t3_excerpt.jhtml?PRODID=10003
+http://store.goldfeverprospecting.com/gobug2byfi.html
+http://store.ic.org/products/turning-to-one-another.html
+http://store.klearscreen.com/conditions.php
+http://store.newadventures.com/newadv/wslactecweat.html
+http://store.newadventures.com/ws2310wirwea.html
+http://store.newadventures.com/wslactecweat.html
+http://store.patiohearth.com/
+http://store.payloadz.com/detail.asp?i=5898&c=13&s=28
+http://store.shopenglandonline.com/info.html
+http://store.stormsong.org/cart/product.php/4314/0/
+http://store.weather.com/policies_main?cat_id=320&link=SPD-Googlebot
+http://store.web-helper.net/r-/m-Music/b-301668/a-B0000634HG/Default.aspx
+http://stories.adoption.com/story/choices-times-three.html
+http://stories.adoption.com/story/meeting-my-family.html
+http://storiesonline.net/library/st_get.php?id=44437
+http://stormchasing.ca/_wsn/page4.html
+http://stormfront.typepad.com/journal/2004/04/night_driving.html
+http://story.news.yahoo.com/news?tmpl=index&cid=737
+http://story.news.yahoo.com/news?tmpl=story2&u=/nm/20050204/sc_nm/environment_mexico_spills_dc
+http://straightblack.com/stripfighter/Diary/Fights/Fucking_Fighting_Sexfight.html
+http://straightwords.typepad.com/straightwords_ezine/2004/12/medical_aparthe.html
+http://strategis.ic.gc.ca/epic/internet/incb-bc.nsf/en/ct01507e.html
+http://strategis.ic.gc.ca/epic/internet/inctp-ptc.nsf/en/h_mn00003e.html
+http://strategis.ic.gc.ca/epic/internet/inhfc-hpc.nsf/en/mc00010e.html
+http://strategis.ic.gc.ca/epic/internet/inimr-ri.nsf/en/gr-72993e.html
+http://strategis.ic.gc.ca/epic/internet/inimr-ri.nsf/fr/gr109272f.html
+http://strategis.ic.gc.ca/epic/internet/inippd-dppi.nsf/en/ip01137e.html
+http://strategis.ic.gc.ca/epic/internet/inmfbs-gprea.nsf/en/lu00023e.html
+http://strategis.ic.gc.ca/sc_mangb/stepstogrowth/engdoc/step8/ssg-8-1.php
+http://strategypage.com/onpoint/articles/20010516.asp
+http://streaming.polito.it/aggregator/categories/1?from=20
+http://street.safeshopper.com/faq.htm?618
+http://streetcat.bankstreet.edu/essays/howdoweknow.html
+http://streetcat.bankstreet.edu/essays/main.html
+http://streetcat.bankstreet.edu/essays/supervising.html
+http://streetcat.bnkst.edu/html/resources.html
+http://strivinglife.net/jamesrskemp/html/jms2/jms2onthesayingidlehandsarethedevilstools.htm
+http://stroke.ahajournals.org/cgi/content/full/29/8/1595
+http://stroke.ahajournals.org/cgi/content/full/29/8/1740
+http://stroke.ahajournals.org/cgi/content/full/31/12/2901
+http://strongandfree.blogspot.com/
+http://strongandright.blogspot.com/
+http://struts.apache.org/api/org/apache/struts/config/ActionConfig.html
+http://struts.apache.org/userGuide/struts-bean.html
+http://sttf.org/wires/index.php?m=199902
+http://stuaff.clemson.edu/campusrec/stepsfitfacts3.html
+http://stuartbuck.blogspot.com/2004_03_01_stuartbuck_archive.html
+http://stuarthughes.blogspot.com/
+http://student-support.cant.ac.uk/childcare/
+http://student-support.cant.ac.uk/handbook/page004.htm
+http://student.hull.ac.uk/support/hull/dropping.html
+http://student.hull.ac.uk/support/scboro/dropping.html
+http://student.some.ox.ac.uk/jcr/altprospectus.html
+http://student.valpo.edu/sbruno/psychlawstudy.html
+http://student.vwc.edu/~chronicle/10_27_00/feature2.htm
+http://studentaccounts.vassar.edu/faq.html
+http://studentactivities.nd.edu/studentleadership/advisorresources/advisorrole.shtml
+http://studentaffairs.stonybrook.edu/ucc/refer
+http://studentaid.ed.gov/PORTALSWebApp/students/english/closedschool.jsp?tab=attending
+http://studentaid.ed.gov/students/publications/completing_fafsa/2004_2005/faq.html
+http://studentaid.ed.gov/students/publications/completing_fafsa/2005_2006/faq.html
+http://studentdev.unr.edu/asc/connection/quotes.cfm
+http://studenthealth.oregonstate.edu/answerspot/message.php?message=692
+http://studenthealth.oregonstate.edu/topics/grief-loss.php
+http://studentloan.citibank.com/slcsite/citiassist/claw.asp
+http://studentloans.ednet.ns.ca/info2001/howloanaredetermined01.shtml
+http://studentloans.ednet.ns.ca/info2002/howloanaredetermined01.shtml
+http://studentloans.ednet.ns.ca/info2003/howloanaredetermined01.shtml
+http://studentpolicies.dsa.umich.edu/statementstudentrights.htm
+http://students.bath.ac.uk/su5bang/pastevents/retreat2004.shtml
+http://students.georgiasouthern.edu/counseling/services/group.htm
+http://students.law.wisc.edu/rules/appendia.htm
+http://students.ou.edu/W/Heather.E.Worley-2/0308.html
+http://students.shu.ac.uk/lc/psalter/plcoll1.html
+http://students.shu.ac.uk/lc/ssb/euinternet.html
+http://students.uis.edu/jkenn03s/blog/archive/2005_05_01_archive.html
+http://students.washington.edu/loverro/projects/AUP-NECC.htm
+http://students.washington.edu/psa/psa_constitution.htm
+http://students.washington.edu/~ukc/sea/2001SKschedule.htm
+http://students.washington.edu/~ukc/sea/UKCSea.html
+http://studentservices.humberc.on.ca/stress/response.htm
+http://studentsfororwell.org/
+http://studentweb.ncf.edu/ncsa/student%20code.htm
+http://studiegids.uva.nl/web/sgs/en/p/10_63002.html
+http://studyabroad.msu.edu/programs/senegalfranco.html
+http://studyat.nmit.ac.nz/portal/OfferID__3349316/TemplateID__1863673/TabID__3526/DesktopDefault.aspx
+http://studyat.nmit.ac.nz/portal/TabID__3526/OfferID__3349316/TemplateID__1863673/DesktopDefault.aspx
+http://stuff4bub.com/
+http://stuffeddog.com/
+http://stupidevilbastard.com/
+http://stupidevilbastard.com/index/seb/2003/12/
+http://stupidevilbastard.com/index/weblog/C34/
+http://style.cleverchimp.com/font_size/livetext.html
+http://su.netsoc.tcd.ie/modules.php?op=modload&name=XForum&file=viewthread&fid=6&tid=1043
+http://su.netsoc.tcd.ie/modules.php?op=modload&name=XForum&file=viewthread&fid=6&tid=1043&orderdate=
+http://su.netsoc.tcd.ie/modules.php?op=modload&name=XForum&file=viewthread&tid=1043
+http://su.netsoc.tcd.ie/modules.php?op=modload&name=XForum&file=viewthread&tid=571
+http://su.netsoc.tcd.ie/modules.php?op=modload&name=XForum&file=viewthread&tid=981
+http://su.netsoc.tcd.ie/print.php?sid=247
+http://su.wadham.ox.ac.uk/freshers/president.shtml
+http://su.wadham.ox.ac.uk/su/officers/index.shtml
+http://subliminalrecorder.com/
+http://submityourarticle.com/articles/easypublish.php?art_id=752
+http://subscript.bna.com/SAMPLES/ohd.nsf/0/caf893856e1b2a8a85256e6800084c3a?OpenDocument
+http://subsite.icu.ac.jp/elp/ELP_Sample_Reading.html
+http://successdoctor.com/articles/the_number_one_reason_for_a_web_presence.htm
+http://successdoctor.com/articles/written_words_help_walk_your_talk.htm
+http://successdoctor.com/legal/
+http://successfulaging.ca/tips.php
+http://successmanifesto.com/blogs/young-entrepreneur/
+http://suddenlyroutine.blogspot.com/
+http://suepelletier.typepad.com/meetingsblog/destinations/
+http://suicideandmentalhealthassociationinternational.org/femsui.html
+http://suicidegirls.com/members/Jeeper/
+http://suicidegirls.com/members/mrzarquon/
+http://suicidegirls.com/news/advice/7152/
+http://sultrix.com.au/our_policies.html
+http://sumarah.tripod.com/sh1.htm
+http://summersession.rutgers.edu/fees.jsp
+http://sun-angel.com/articles/pw/thework/chapt6.html
+http://sun.yumasun.com/artman/publish/articles/story_14734.php
+http://sunandfun.blogspot.com/2004_09_01_sunandfun_archive.html
+http://sunbridgesofia.blogspot.com/2005/03/played.html
+http://sunbridgesofia.blogspot.com/2005_01_01_sunbridgesofia_archive.html
+http://sunbridgesofia.blogspot.com/2005_02_01_sunbridgesofia_archive.html
+http://sundance.weblogsinc.com/entry/1234000410028547/
+http://sundappledwood.blogspot.com/
+http://sundappledwood.blogspot.com/2005/05/in-memory-of-abigail.html
+http://sundappledwood.blogspot.com/2005/06/well-did-you-evah.html
+http://sunday.ninemsn.com.au/sunday/
+http://sunday.ninemsn.com.au/sunday/investigative/case1.asp
+http://sunday.ninemsn.com.au/sunday/political_transcripts/article_1442.asp
+http://sunday.ninemsn.com.au/sunday/political_transcripts/article_1582.asp
+http://sunday.ninemsn.com.au/sunday/political_transcripts/article_1689.asp
+http://sundayschool.ag.org/00Top/faq.cfm
+http://sundayschool.ag.org/02Administration/a_tconf_0401_disabilities.cfm
+http://sundialservices.com/products/chimneysweep/traditional.htm
+http://sundriesshack.com/index.php?p=885
+http://sunews.syr.edu/Comm03/comm14.htm
+http://sunlitecorp.com/definitions.html
+http://sunnyvale.ca.gov/City+Council/Boards+and+Commissions/Planning/Minutes/2003-0537+SCC+Church.htm
+http://sunnyvale.ca.gov/pc2001/reports/01-0277.htm
+http://sunnyvale.ca.gov/reports/1997-07/97-335.html
+http://sunnyvale.ca.gov/voices/Alexander/denise3.html
+http://sunportal.sunmanagers.org/pipermail/summaries/2002-September/002453.html
+http://sunsite.berkeley.edu/GODORT/whiteiv.html
+http://sunsite.berkeley.edu/Goldman/Writings/Drama/doll.html
+http://suntimes.com/index/business1.html
+http://suntimes.com/output/books/sho-sunday-patchett09.html
+http://suntimes.healthology.com/skinhealth
+http://sunysb.hosts.atlas-sys.com/illiad/FAQ.html
+http://supak.squarespace.com/catskills/
+http://supct.law.cornell.edu/supct/html/03-6696.ZX.html
+http://supct.law.cornell.edu/supct/html/03-674.ZO.html
+http://supct.law.cornell.edu/supct/html/91-1721.ZD.html
+http://supct.law.cornell.edu/supct/html/92-1639.ZO.html
+http://supct.law.cornell.edu/supct/html/93-1677.ZS.html
+http://supct.law.cornell.edu/supct/html/94-23.ZO.html
+http://supct.law.cornell.edu/supct/html/historics/USSC_CR_0455_0104_ZO.html
+http://supct.law.cornell.edu/supct/pdf/03-674P.ZO
+http://superdrive.cynikal.net/
+http://superiorwatch.com/Pages/facts.html
+http://superman.ws/archive/History/SandSaga.html
+http://superstringtheory.com/cosmo/cosmo41.html
+http://superwisdom.typepad.com/superwisdom_weblog/2005/06/immanuel_kant_a.html
+http://supplychain.ittoolbox.com/nav/t.asp?t=373&p=373&h1=373
+http://support.atmail.com/upgrade.html
+http://support.indigorose.com/?_a=knowledgebase&_j=questiondetails&_i=182
+http://support.indigorose.com/?_a=knowledgebase&_j=questiondetails&_i=191
+http://support.indigorose.com/index.php?_a=knowledgebase&_j=questiondetails&_i=182
+http://support.indigorose.com/index.php?_a=knowledgebase&_j=questiondetails&_i=182&nav=
+http://support.indigorose.com/index.php?_a=knowledgebase&_j=questiondetails&_i=191
+http://support.indigorose.com/index.php?_a=knowledgebase&_j=questiondetails&_i=191&nav=
+http://support.microsoft.com%2Fservicedesks%2Fwebcasts%2Fen%2Fwc051100%2Fwct051100.asp
+http://support.microsoft.com%2Fservicedesks%2Fwebcasts%2Fen%2Fwc113000%2Fwct113000.asp
+http://support.microsoft.com/?id=327334
+http://support.microsoft.com/?kbid=162214
+http://support.microsoft.com/?kbid=810646
+http://support.microsoft.com/?scid=
+http://support.microsoft.com/default.aspx?scid=kb;EN-US;177561
+http://support.microsoft.com/default.aspx?scid=kb;en-us;161609
+http://support.microsoft.com/default.aspx?scid=kb;en-us;177321
+http://support.microsoft.com/default.aspx?scid=kb;en-us;269802
+http://support.microsoft.com/default.aspx?scid=kb;en-us;306554&sd=tech
+http://support.microsoft.com/default.aspx?scid=kb;en-us;308978&sd=tech
+http://support.microsoft.com/default.aspx?scid=kb;en-us;322692
+http://support.microsoft.com/kb/237960
+http://support.microsoft.com/kb/306902
+http://support.microsoft.com/kb/831715
+http://support.microsoft.com/kb/887797
+http://support.microsoft.com/kb/888162
+http://support.microsoft.com/kb/889654
+http://support.microsoft.com/lifecycle/
+http://support.microsoft.com/support/kb/articles/Q186/8/97.ASP
+http://support.newsstand.com/cgi-bin/rnwenduser.cfg/php/enduser/std_adp.php?p_faqid=211
+http://support.novell.com/subscriptions/subscriber_resources/highlights/2005/nprs_highlights_mar05.html
+http://support.sas.com/events/sasforuminternational/agenda.html
+http://support.sas.com/rnd/scalability/tools/arm/v9sasdoc.html
+http://support.westciv.com/article.php?story=20050615181011170
+http://supportconnectw.ca.com/public/modelmart/infodocs/afmodelmgr_faq.asp
+http://supporteconomy.meetup.com/groups/
+http://supporteconomy.meetup.com/groups/?sort=ctime&desc=1&all=1
+http://supportuw.washington.edu/
+http://supreme.lp.findlaw.com/constitution/amendment01/18.html
+http://supreme.lp.findlaw.com/supreme_court/guides/guideforcounsel/
+http://surbrook.devermore.net/smz/char/smzshiko.html
+http://surfskatesnow.blogharbor.com/
+http://surveycentral.org/survey/19617.html
+http://survivalring.org/nwss/s60p780.htm
+http://survivalskills.blogs.com/outdoor_survival_skills/meteorology/
+http://susanireland.com/interviewwork.html
+http://susanjacobson.livejournal.com/
+http://susanohanian.org/show_special_commentaries.html?id=11
+http://svnbook.red-bean.com/en/1.0/ch03s05.html
+http://svnbook.red-bean.com/en/1.0/ch04s04.html
+http://svnbook.red-bean.com/en/1.1/ch03s05.html
+http://svs.gsfc.nasa.gov/stories/aura_prelaunch_20040517/page2.html
+http://svs.vascularweb.org/_CONTRIBUTION_PAGES/Practice_Issues/Practice_Issues/Relations_with_Industry.html
+http://svs.vascularweb.org/_CONTRIBUTION_PAGES/SVS_About_Us/Policies/Professional_Conduct_CT.html
+http://swanjackarmy.2itb.com/snowdonia/ukrec.htm
+http://swapatorium.blogspot.com/2005_03_01_swapatorium_archive.html
+http://swc2.hccs.edu/gis/exercise/Ex40.htm
+http://swdesertrat.blogspot.com/2005/06/talk-about-uneven-playing-field.html
+http://sweb.uky.edu/~elclin0/bw_open.htm
+http://swedenborgchapel.org/read_sa_bt050403.html
+http://swedenborgchapel.org/read_sa_sb030309.html
+http://sweetisu.blogspot.com/
+http://swetietoc.pc.cc.cmu.edu/swe/volunteer.php
+http://swg.allakhazam.com/db/guides.html?guide=179
+http://swg.allakhazam.com/db/guides.html?guide=88
+http://swiftreport.blogs.com/news/2005/06/ethics_troubles.html
+http://swiftreport.blogs.com/news/2005/06/gay_coloring_as.html
+http://swiftvets.eriposte.com/appendixb.htm
+http://swiftvets.eriposte.com/archive_2004_0824.htm
+http://switzerland.isyours.com/e/guide/basics/carrying.html
+http://swordandspirit.com/LIBRARY/FAQS/Q46_50.php
+http://swordforum.com/swords/nihonto/shintokatana.html
+http://swos.hajas.org/sounds.htm
+http://swpat.ffii.org/analysis/epc52/index.en.html
+http://swpat.ffii.org/log/intro/index.en.html
+http://swpat.ffii.org/news/03/plen0626/index.en.html
+http://swpat.ffii.org/papers/eubsa-swpat0202/index.en.html
+http://swpat.ffii.org/papers/eubsa-swpat0202/plen0309/resu/index.en.html
+http://swpat.ffii.org/papers/eubsa-swpat0202/plen0309/resu/index.es.html
+http://swpat.ffii.org/papers/europarl0309/amends05/juri0504/trips.en.html
+http://swpat.ffii.org/papers/europarl0309/cons0401/index.en.html
+http://swpat.ffii.org/papers/europarl0309/index.en.html
+http://swpat.ffii.org/patents/effects/index.en.html
+http://swpat.ffii.org/pikta/txt/ep/1240/797/
+http://swpat.ffii.org/players/index.en.html
+http://swpat.ffii.org/stidi/epc52/index.en.html
+http://swpat.ffii.org/vreji/quotes/index.en.html
+http://swpat.ffii.org/xatra/parl034/index.en.html
+http://swvault.ign.com/?start_from=1
+http://swvault.ign.com/View.php?view=Fanfic.Detail&id=83
+http://sybilsden.com/gc/gc1.html
+http://synapses.mcg.edu/lab/smith/smith.htm
+http://synthesispartnership.com/case_04.html
+http://syracuse.date.com/dating/utah.htm
+http://syracuse.date.com/girls-single/utah.htm
+http://syroid_insights.orbdesigns.com/1999/19990906.htm
+http://sysbio.med.harvard.edu/phd/
+http://sysrick.com/
+http://taarafu.islamonline.net/English/Taarafo_Conference/2003/article19.shtml
+http://tablegamer.com/starmada/camp2pt0.htm
+http://tabletalk.typepad.com/tabletalk/2005/06/being_myself_in.html
+http://tabletennis.miningco.com/od/tournamentplayers/
+http://tabula.rutgers.edu/spectator/text/may1711/no78.html
+http://tabulas.com/community/creative_writing/
+http://tabulas.com/~_neko
+http://tabulas.com/~budzter/
+http://tabulas.com/~sorrow16/friendof.html
+http://tactile3d.com/
+http://tadl.tcnet.org/mtgroom.htm
+http://taintedglass.blogspot.com/2004_05_01_taintedglass_archive.html
+http://taipei.tzuchi.org.tw/tzquart/2002wi/qw8.htm
+http://taipei.tzuchi.org.tw/tzquart/2003sp/qp13.htm
+http://taipei.tzuchi.org.tw/tzquart/98summer/qs98-11.htm
+http://taiwansecurity.org/News/2001/IHT-121801.htm
+http://taiwansecurity.org/Reu/2004/Reuters-230204.htm
+http://taiwansecurity.org/TSR-CNL.htm
+http://takesat.com/display.php?testid=C004
+http://talentdevelop.com/acting-ya4.html
+http://talentdevelop.com/failure.html
+http://talentdevelop.com/learndisord.html
+http://talesetc.com/jfaba133xcake.htm
+http://talesmag.com/tales/road/jamaica_no_problem.shtml
+http://talk.collegeconfidential.com/showthread.php?goto=lastpost&t=74353
+http://talk.myoc.com/archive/index.php/t-7043.html
+http://talk.thewb.com/viewtopic.php?topic=424780&forum=8&24
+http://talking-caller-id.ffind.servebeer.com/
+http://talkingpointsmemo.com/
+http://talkleft.com/new_archives/001848.html
+http://talkleft.com/new_archives/003141.html
+http://talkleft.com/new_archives/003734.html
+http://talkleft.com/new_archives/004245.html
+http://talkleft.com/new_archives/004326.html
+http://talkleft.com/new_archives/004451.html
+http://talkleft.com/new_archives/004810.html
+http://talkleft.com/new_archives/004833.html
+http://talkleft.com/new_archives/006380.html
+http://talkleft.com/new_archives/006744.html
+http://talkleft.com/new_archives/007205.html
+http://talkleft.com/new_archives/007566.html
+http://talkleft.com/new_archives/007663.html
+http://talkleft.com/new_archives/007687.html
+http://talkleft.com/new_archives/008286.html
+http://talkleft.com/new_archives/008723.html
+http://talkleft.com/new_archives/008832.html
+http://talkleft.com/new_archives/008924.html
+http://talkleft.com/new_archives/009111.html
+http://talkleft.com/new_archives/009318.html
+http://talkleft.com/new_archives/009579.html
+http://talkleft.com/new_archives/009711.html
+http://talkleft.com/new_archives/009781.html
+http://talkleft.com/new_archives/009925.html
+http://talkleft.com/new_archives/010114.html
+http://talkleft.com/new_archives/010115.html
+http://talkleft.com/new_archives/010122.html
+http://talkleft.com/new_archives/010158.html
+http://talkleft.com/new_archives/010369.html
+http://talkleft.com/new_archives/010650.html
+http://talkleft.com/new_archives/010715.html
+http://talkleft.com/new_archives/011016.html
+http://talkleft.com/new_archives/011081.html
+http://talkleft.com/new_archives/011091.html
+http://talkleft.com/new_archives/011106.html
+http://talkshows.about.com/od/ratingspolls/a/daytimemmy2004.htm
+http://talldarkandmysterious.ca/category/i-read-the-news-today-oh-boy/
+http://tallskinnykiwi.typepad.com/tallskinnykiwi/2004/09/carson_and_my_s.html
+http://talon.stockton.edu/polandtour/
+http://tam.cornell.edu/~ruina/hplab/Practical_Writing_advice.html
+http://tamizhan.com/tags/life
+http://tampabay.bizjournals.com/tampabay/stories/2003/11/03/story6.html
+http://tampabay.bizjournals.com/tampabay/stories/2005/06/06/daily29.html
+http://tampatrib.com/FloridaMetro/columns/MGBFN9AXT2E.html
+http://tampatrib.com/FloridaMetro/columns/MGBNX61VT2E.html
+http://tamusystem.tamu.edu/chancellor/mcteer/speeches/2001/ms010511.html
+http://tanagrampartners.com/site/products/ssm.php
+http://tanaquil.paradygma.com/
+http://tancredo.house.gov/abouttom.asp?about=1
+http://tangentsoft.net/audio/opamp-wv.html
+http://tanzania.northjersey.com/promo/flashfinal/intro.html
+http://tanzania.usembassy.gov/wwwhpr51.html
+http://tapestry-os.org/systems/kernel/discussion/overview/kernel-primitives.lp
+http://tapol.gn.apc.org/press/files/pr050412.htm
+http://tapol.gn.apc.org/reports/r050430.htm
+http://tar.weatherson.net/archives/000979.html
+http://tar.weatherson.net/archives/002857.html
+http://tar.weatherson.net/archives/004282.html
+http://tar.weatherson.net/archives/004353.html
+http://target.com/target_group/pharmacy/healthinfo/health_news/health_news_article.jhtml?urn=urn:content:healthscout:htm:2612005:2612005_5
+http://tarheelblue.collegesports.com/
+http://tarheelblue.collegesports.com/sports/extrapoints/spec-rel/112403aab.html
+http://tarlton.law.utexas.edu/dawson/amea/aug94nws.htm
+http://tarlton.law.utexas.edu/dawson/cases/racing/bluegrass.htm
+http://tarlton.law.utexas.edu/lpop/etext/newgate5/greenacre.htm
+http://tarunsblog.blogspot.com/2004/11/ah-technology.html
+http://tash.gn.apc.org/allsystm.htm
+http://tax.co.monmouth.nj.us/index.asp?action=12
+http://tax.co.monmouth.nj.us/index.asp?action=13
+http://taxes.yahoo.com/guide/amt/amt101.html
+http://taxes.yahoo.com/tips/deduct/
+http://taxprof.typepad.com/taxprof_blog/2004/09/red_states_feed.html
+http://taxprofessor.blogspot.com/
+http://taxtime.about.com/b/a/160397.htm
+http://tblogs.bootsnall.com/billy/
+http://tblogs.bootsnall.com/boo/
+http://tblogs.bootsnall.com/egypt/archives/003265.shtml
+http://tblogs.bootsnall.com/sonshade/
+http://tbrnews.nminews.com/articles/2005/01/06/crime_log/crime.prt
+http://tc.nic.in/ar02-03/maj.htm
+http://tcds.edb.utexas.edu/
+http://tchin.org/resource_room/c_art_16.htm
+http://tcla.gseis.ucla.edu/reportcard/college/1/oakes.html
+http://tcla.gseis.ucla.edu/rights/background/salina.html
+http://tcla.gseis.ucla.edu/rights/features/3/perspectives/krug_seiden.html
+http://tcla.gseis.ucla.edu/rights/features/5/doubletree/community.html
+http://tcllib.sourceforge.net/doc/pool.html
+http://tcp.dramatools.net/archives/000056.html
+http://tcpmag.com/features/article.asp?EditorialsID=50
+http://tcpmag.com/salarysurveys/article.asp?EditorialsID=97
+http://tdworld.com/mag/power_exploring_transmission_relay/
+http://teacher.nsrl.rochester.edu/phy_labs/AppendixB/AppendixB.html
+http://teacher.scholastic.com/activities/government/tguide.htm
+http://teacher.scholastic.com/activities/wwatch/hurricanes/witnesses.htm
+http://teacher.scholastic.com/activities/wwatch/winter_storms/witnesses.htm
+http://teacher.scholastic.com/authorsandbooks/teachingplans/lucky_mar03.htm
+http://teacher.scholastic.com/lessonrepro/lessonplans/womwalker.htm
+http://teacher.scholastic.com/pearl/transcript.htm
+http://teacher.scholastic.com/products/instructor/medieval_times.htm
+http://teacher.scholastic.com/professional/bruceperry/using_technology.htm
+http://teacher.scholastic.com/professional/futureteachers/otherways.htm
+http://teacher.scholastic.com/scholasticnews/indepth/war-iraq/path/index.asp?article=european_union
+http://teacher.scholastic.com/technology/tutor/movie/production.htm
+http://teacher.scholastic.com/writewit/biograph/biography_sketch.htm
+http://teacherlink.ed.usu.edu/tlresources/units/Byrnes-celebrations/christmas.html
+http://teachers.net/archive/national_boards042002.html
+http://teachers.net/archive/national_boards042101.html
+http://teachers.net/gazette/APR01/sigmon.html
+http://teachers.net/gazette/AUG00/humor.html
+http://teachers.net/gazette/DEC00/wong.html
+http://teachers.net/gazette/FEB01/marshall.html
+http://teachers.net/gazette/JUL02/fyi2.html
+http://teachers.net/gazette/JUL02/gruber.html
+http://teachers.net/gazette/JUL02/page.html
+http://teachers.net/gazette/JUL03/editor.html
+http://teachers.net/gazette/MAR01/biase.html
+http://teachers.net/gazette/MAR02/covera.html
+http://teachers.net/gazette/MAR02/wong.html
+http://teachers.net/gazette/MAY02/gruber.html
+http://teachers.net/gazette/NOV00/wong.html
+http://teachers.net/gazette/OCT00/wong.html
+http://teachers.net/gazette/SEP00/sigmon.html
+http://teachers.net/mentors/high_school/topic5747/2.12.05.04.21.10.html
+http://teachertech.rice.edu/Participants/mborrow/Lessons/nuclear_.html
+http://teacherweb.com/KY/HartCountyHighSchool/HartCountyCheerleading/h1.stm
+http://teaching.arts.usyd.edu.au/history/hsty3080/StudentWebSites/Nixon%20Obits/source9
+http://teaching.path.cam.ac.uk/partIB_pract/NHP1/
+http://teachpol.tcnj.edu/book_reviews/1998/Lentner_H._H._3_98.htm
+http://team-math.net/faq.htm
+http://teamespn.com/TeamESPN/winning_lifestyles.html
+http://teamfu.freeshell.org/
+http://teamfu.freeshell.org/partypoker_faq.html
+http://teamfu.freeshell.org/poker_hands.html
+http://teamfu.freeshell.org/poker_terms.html
+http://teamhouse.tni.net/militaryretiree-031202.htm
+http://teamrock.blogspot.com/
+http://teapot.usask.ca/cdn-firearms/Snyder/right2carry.html
+http://tech.irt.org/articles/js124/
+http://tech.irt.org/articles/opera.htm
+http://tech.msn.com/guides/853666.armx
+http://techcenter.gmu.edu/programs/summit/cohen's_2001_remarks.html
+http://techcentralstation.com/061803A.html
+http://techdocs.postgresql.org/techdocs/portingdbiv.php
+http://techfee.washington.edu/proposals/2005-059
+http://techguide.merit.edu/furtherstudy.htm
+http://techlawadvisor.com/ip/shrinkwrap.html
+http://techmall.dis.wa.gov/services/ask_george.asp
+http://technology.monster.com/articles/cioitsal/
+http://technorati.com/tag/Environment
+http://techrepublic.com.com/
+http://techrepublic.com.com/5100-22_11-5329791.html
+http://techrepublic.com.com/5100-22_11-5544944-1-1.html
+http://techrepublic.com.com/5100-6228-5212239.html
+http://techrepublic.com.com/5100-6262-1054628-2.html
+http://techrepublic.com.com/5100-6262-5054561.html
+http://techrepublic.com.com/5100-6262_11-1054628-2.html
+http://techrepublic.com.com/5100-6270-1054430.html
+http://techrepublic.com.com/5100-6331_11-5059931-2.html
+http://techrepublic.com.com/5102-6270-1033367.html
+http://techrepublic.com.com/5208-6230-0.html?forumID=6&threadID=166642&messageID=1703719
+http://techrepublic.com.com/5208-6230-0.html?forumID=7&threadID=157302&messageID=1671405
+http://techrepublic.com.com/5208-6230-0.html?forumID=7&threadID=157302&messageID=1671442
+http://techrepublic.com.com/5208-6230-0.html?forumID=89&threadID=173443&messageID=1770652
+http://techrepublic.com.com/5208-6247-0.html?forumID=12&threadID=40065&messageID=243003
+http://techrepublic.com.com/5208-6319-0.html?forumID=14&threadID=121849&messageID=737343
+http://techstrategy.typepad.com/emerging/2005/01/great_good_spac.html
+http://techupdate.zdnet.com/
+http://ted.coe.wayne.edu/sse/units/newyr.htm
+http://teenadvice.about.com/library/weekly/aa022201a.htm
+http://teenagerstoday.com/resources/articles/turningpoints2.htm
+http://teenwriting.about.com/cs/writingpoetry/a/HeartOfPoetry.htm
+http://teenwriting.about.com/library/weekly/aa041403a.htm
+http://teenwriting.about.com/library/weekly/aa111102f.htm
+http://tefvater.org/board/%20my%20baby%20was%20born%20without%20kidneys%20and%20esophagus.html
+http://telebody.com/nk/appeal.html
+http://telebody.com/nk/disobedience.html
+http://telecom.esa.int/telecom/www/object/index.cfm?fobjectid=904
+http://telegraph.proshareclubs.co.uk/cgi-bin/proshareclubs/pagewiz.cgi?pg=/investing_tips.htm
+http://telelearning.dcccd.edu/prodsvcs/previews.htm
+http://telephonyonline.com/ar/telecom_telecom_ready_emergencies/
+http://telephonyonline.com/mag/telecom_concert_disharmony/
+http://telephonyonline.com/mag/telecom_fast_forward_5/
+http://telephonyonline.com/mag/telecom_network_seismic_proportions/
+http://telephonyonline.com/mag/telecom_putting_bull_cable/
+http://telephonyonline.com/mag/telecom_smaller_customers_maintain/
+http://telephonyonline.com/mag/telecom_valley_days/
+http://televisionwithoutpity.com/show.cgi?show=70
+http://temagami.carleton.ca/jmc/cnews/04022000/c3.htm
+http://temagami.keewaydin.org/article/view/2579/1/298/
+http://templer.modblog.com/
+http://tenant.net/pipermail/hkonline/1999-July/000169.html
+http://tendence-lifestyle.messefrankfurt.com/global/en/presse-center_news.html?guid=mf_ddsp1432_6459&language=en&show_date_detail=yes
+http://tennessean.com/features/health/archives/05/01/64373939.shtml?Element_ID=64373939
+http://tennessean.com/features/home/archives/05/01/64715364.shtml?Element_ID=64715364
+http://tennessean.com/government/archives/05/01/64903642.shtml?Element_ID=64903642
+http://tennessean.com/sports/titans/archives/04/12/63706824.shtml?Element_ID=63706824
+http://tennessean.com/sports/titans/archives/05/01/63706824.shtml?Element_ID=63706824
+http://tennessean.com/sports/ut/archives/05/01/63706923.shtml?Element_ID=63706923
+http://tenonline.org/art/8905.html
+http://tenonline.org/art/9006.html
+http://tenonline.org/art/9010.html
+http://tenonline.org/art/9603.html
+http://tenonline.org/art/9812.html
+http://tenonline.org/art/brv/9801.html
+http://tenonline.org/art/imi/0003.html
+http://tenonline.org/art/imi/9912.html
+http://tenrec.xardas.lima-city.de/gerritse.htm
+http://teo.elte.hu/fs/geogteach.html
+http://tequilamockingbird.blogspot.com/2004_07_01_tequilamockingbird_archive.html
+http://terayah.journalspace.com/
+http://teresi.us/html/writing/handwriting.html
+http://terranova.blogs.com/terra_nova/2003/10/growth_rates_of.html
+http://terranova.blogs.com/terra_nova/2004/04/journalist_earn.html
+http://terranova.blogs.com/terra_nova/2005/01/the_theory_of_f.html
+http://terranova.blogs.com/terra_nova/2005/06/contradictions_.html
+http://terranova.blogs.com/terra_nova/2005/06/i_want_to_hear_.html
+http://terranova.blogs.com/terra_nova/2005/06/playing_alone.html
+http://terrenceberres.com/2003-08.html
+http://terrenceberres.com/2003-12.html
+http://terrenceberres.com/gar-how.html
+http://terrestrialball.blogspot.com/2004_12_01_terrestrialball_archive.html
+http://tesibria.typepad.com/thistletea/theres_something_happenin_here/
+http://teslamania.delete.org/frames/lichtenbergs.html
+http://test2.cyberdash.net/?q=node/4
+http://testced.cahners1.com/ced/2003/0303/id2.htm
+http://testmy.net/topic-1305
+http://texannusa36.tripod.com/thehouseofcrocker1ch2.html
+http://texas-sea-grant.tamu.edu/pubs/Ports/Washington/PortCapitalInvestment.php
+http://texas-sea-grant.tamu.edu/pubs/Ports/Washington/TheProcessofCapitalInvestmentatUSPublicPorts.php
+http://texasgrassfedbeef.com/id80.htm
+http://texaspolitics.laits.utexas.edu/html/vce/0502.html
+http://text.broadbandreports.com/comment/555/31718
+http://text.kids.nsw.gov.au/publications/feedback2002.html
+http://textileinfo.com/en/manage/ronten/inkjet/page03.html
+http://textonly.thomasdanby.ac.uk/about/leeds.cfm
+http://textpattern.org/tips/328/style-switcher-non-plugin
+http://tftb.com/deify/
+http://thailandbirding.com/favourites.htm
+http://thailandbirding.com/glossary.htm
+http://thalamus.wustl.edu/course/eyeret.html
+http://tharpa.co.uk/background/about-buddhism.htm
+http://tharpa.co.uk/background/dealing-with-fear.htm
+http://thatsjustnotright.com/board/lofiversion/index.php/t4947.html
+http://the-contact-network.com/otheregg/rocketblog/
+http://the-goddess.org/blog/
+http://the-idea-shop.com/
+http://the-mid-west-web.com/
+http://the-op.com/view/article.php?sect=2100&a=115
+http://the-riotact.com/
+http://the-science-of-choice.blogspot.com/
+http://the-sea.com/storystore/html/html.php?id=605-88464494-17
+http://the-spark.net/cs/18002.html
+http://the.honoluluadvertiser.com/article/2005/Feb/11/sp/sp30p.html
+http://the.honoluluadvertiser.com/article/2005/Jan/24/ln/ln01p.html
+http://the.honoluluadvertiser.com/commemorative/history
+http://theacc.collegesports.com/sports/m-wrestl/spec-rel/120504aac.html
+http://theage.com.au/letters/
+http://theage.com.au/news/National/Douglas-Wood-freed-in-military-operation/2005/06/15/1118645861915.html
+http://theages.superman.ws/History/whatever.php
+http://theamericanbook.blogspot.com/
+http://theamericanmuslim.org/2005apr_comments.php?id=179_0_38_0_C
+http://theamericanrevolution.org/ipeople/gwash.asp
+http://theater2.nytimes.com/2005/06/17/theater/reviews/17wife.html
+http://theater2.nytimes.com/2005/07/01/theater/reviews/01driv.html
+http://theatomicmoose.ca/g4u/
+http://theatre.fsu.edu/academic/about/careers.htm
+http://theatreleague.net/members_bylaws.cfm
+http://theatreorgans.com/clevelan.arm/
+http://theaustralian.news.com.au/common/story_page/0,5744,12149774%255E401,00.html
+http://theband.hiof.no/articles/genetically_speaking.html
+http://thebayonet.com/stories/061804/04.htm
+http://thebedandbreakfastman.blogs.com/the_bed_and_breakfast_man/
+http://theblackkeys.com/news.php
+http://thebooksellers.blogspot.com/2003_09_01_thebooksellers_archive.html
+http://theboost.net/unlisted_phone_number/
+http://thebrycegroup.com/american_cocker_spaniel/
+http://thecheerfuloncologist.blogsome.com/
+http://thecommunityengine.com/home/archives/2005/03/ibms_intranet_a.html
+http://theconcordcoach.tripod.com/abbotdowning/id16.html
+http://theconnexion.net/wp/
+http://theconnexion.net/wp/index.php
+http://thecoracle.tripod.com/vol01/01/v101_pre.html
+http://thecouriermail.com.au/extras/federation/CMFedDDlead.htm
+http://thedailypolemic.blogs.com/rand/2005/02/postiraqi_elect.html
+http://thedailywtf.com/forums/AddPost.aspx?PostID=35947&Quote=True
+http://thedecadentwest.blogspot.com/
+http://thederanged.blogdrive.com/
+http://thediamondangle.com/blogger/general.html
+http://thedirectorintheclassroom.com/dcnewsletter.php
+http://theepicenter.com/military_surplus.html
+http://theepicenter.com/tow02077.html
+http://theepicenter.com/tow02136.html
+http://theguinnessdiet.blogspot.com/2005/06/final-day.html
+http://thehealthline.ca/details.asp?id=564
+http://theinq.com/?article=20782
+http://theintermountain.com/letter.htm
+http://thejoint.atlblogs.com/archives/003263.html
+http://thelances.org/hr3/badair.html
+http://thelawwestofealingbroadway.blogspot.com/
+http://theliteraryreview.org/u2004/chung.html
+http://theliteraryreview.org/wi97-sd.htm
+http://thelookingglass.blogspot.com/2004_05_16_thelookingglass_archive.html
+http://thelowroad.blogspot.com/2004_09_01_thelowroad_archive.html
+http://themis.la.asu.edu/zoom-20020628a.html
+http://thenonbillablehour.typepad.com/nonbillable_hour/
+http://thenonbillablehour.typepad.com/nonbillable_hour/2005/01/
+http://thenonbillablehour.typepad.com/nonbillable_hour/practice_of_law/
+http://thenorwichgroup.blogs.com/
+http://theologica.blogspot.com/2005/06/modesty-hooters-girls-and-church.html
+http://theologytoday.ptsem.edu/oct1978/v35-3-criticscorner2.htm
+http://theorem.ca/~mvcorks/salvador.html
+http://theorem.ca/~yaacov/lyrics.php?key=song_title&ID=16
+http://theorem.ca/~yaacov/lyrics.php?key=song_title&ID=30
+http://theory.cs.uvic.ca/~cos/amof/e_combI.htm
+http://theory.isthereason.com/
+http://theory.lcs.mit.edu/~iandc/ic68.html
+http://theory.lcs.mit.edu/~iandc/ic87.html
+http://theory.lcs.mit.edu/~iandc/ic89.html
+http://theory.lcs.mit.edu/~iandc/ic94.html
+http://theory.lcs.mit.edu/~iandc/ic95.html
+http://theory.lcs.mit.edu/~iandc/ic96.html
+http://theory.lcs.mit.edu/~jacm/jacm65.html
+http://theory.lcs.mit.edu/~jacm/jacm80.html
+http://theory.stanford.edu/~mihaela/theorylunch/index_2005_winter.html
+http://theory.whirlycott.com/~phil/antispam/rbl-bad/rbl-bad.html
+http://theosophy.org/tlodocs/hpb/IsDenunciationADuty.htm
+http://theosophy.org/tlodocs/teachers/FranzAntonMesmer.htm
+http://theothermother.typepad.com/bigwindow/2005/01/
+http://theover.tripod.com/Nano/brain1.html
+http://thepalinode.blogspot.com/
+http://thepcyoubuy.com/03252001.htm
+http://thepcyoubuy.com/4292001.htm
+http://thepeerreview.ca/view.php?aid=90
+http://thephantomwriters.com/free_content/d/b/eliminate-your-competition.shtml
+http://thepill.blogs.com/
+http://thepoint.invisibleinstitute.com/082503.html
+http://thepoliticalteen.net/2005/06/05/two-charged-in-natalee-holloway-case/
+http://thepoliticalteen.net/2005/06/11/natalee-holloway-is-dead/
+http://thepoliticalteen.net/2005/06/15/police-search-joran-van-der-sloot/
+http://thepoliticalteen.net/2005/06/17/1724/
+http://theprimeone.com/
+http://theproles.blogspot.com/2004_09_01_theproles_archive.html
+http://therabbitlived.typepad.com/the_rabbit_lived/2004/08/for_now.html
+http://therac.com/services_kid_central.htm
+http://therapists.psychologytoday.com/medicinenet/34698.html
+http://therapists.psychologytoday.com/medicinenet/6692.html
+http://therapists.psychologytoday.com/rms/33576.html
+http://thereandbackagain.blogs.com/ttcmilitary/2004/08/
+http://theremnant.com/m'chayne.html
+http://therevealer.org/
+http://therightcoast.blogspot.com/2005_06_01_therightcoast_archive.html
+http://theriverkelvin.co.uk/blog/index.php?p=316
+http://thesafehouse.org/faq.php
+http://thesaurus.reference.com/search?q=giving
+http://thesaurus.reference.com/search?q=leaving
+http://thescotsman.scotsman.com/business.cfm?id=1802004
+http://thescotsman.scotsman.com/business.cfm?id=269052005
+http://thescotsman.scotsman.com/business.cfm?id=269122005
+http://thescotsman.scotsman.com/business.cfm?id=457162005
+http://thescotsman.scotsman.com/business.cfm?id=500552004
+http://thescotsman.scotsman.com/business.cfm?id=500722004
+http://thescotsman.scotsman.com/business.cfm?id=688652005
+http://thescotsman.scotsman.com/edinburgh.cfm?id=727462005
+http://thescotsman.scotsman.com/index.cfm?id=1416592004
+http://thescotsman.scotsman.com/index.cfm?id=228672005
+http://thescotsman.scotsman.com/index.cfm?id=344162005
+http://thescotsman.scotsman.com/index.cfm?id=475582005
+http://thescotsman.scotsman.com/index.cfm?id=540962005
+http://thescotsman.scotsman.com/index.cfm?id=627502005
+http://thescotsman.scotsman.com/index.cfm?id=680402005
+http://thescotsman.scotsman.com/index.cfm?id=727462005
+http://thescotsman.scotsman.com/opinion.cfm?id=555262005
+http://thescotsman.scotsman.com/politics.cfm?id=727462005
+http://thescotsman.scotsman.com/scitech.cfm?id=680402005
+http://thescotsman.scotsman.com/scotland.cfm?id=640792005
+http://thescotsman.scotsman.com/scotland.cfm?id=727462005
+http://thescotsman.scotsman.com/sport.cfm?id=772572004
+http://thescotsman.scotsman.com/sport.cfm?id=772672004
+http://theshredder.com/russtuff/vodka51.htm
+http://thespoonsexperience.com/
+http://thesportseconomist.com/archive/2005_06_01__arch_file.htm
+http://thestar.com.my/news/list.asp?file=/2005/1/20/focus/9935097&sec=focus
+http://thestar.com.my/services/printerfriendly.asp?file=/2005/1/20/focus/9935097.asp&sec=focus
+http://thestar.com.my/services/printerfriendly.asp?file=/2005/1/27/nation/10001574.asp&sec=nation
+http://thestar.com.my/services/printerfriendly.asp?file=/2005/2/4/sports/10082484.asp&sec=sports
+http://thestarport.org/suites/Starport/Family/Amethyst/amy.html
+http://thestoppedclock.blogspot.com/2004_01_04_thestoppedclock_archive.html
+http://thestoppedclock.blogspot.com/2004_09_26_thestoppedclock_archive.html
+http://thestraights.com/aarc.html
+http://thestranger.com/1999-04-29/art.html
+http://thestranger.com/1999-07-08/cd_revue.html
+http://thestranger.com/2000-10-05/chow.html
+http://thesundevils.collegesports.com/sports/m-footbl/stats/042304aaa.html
+http://thesundevils.collegesports.com/sports/w-gym/spec-rel/122304aab.html
+http://thetalkingdrum.com/freedomfighters.html
+http://thetask.org/Frontline/Excuse.asp
+http://thetruthaboutyork.blogspot.com/
+http://thetyee.ca/Mediacheck/2005/06/13/LeftWingCNN/
+http://thetyee.ca/Views/2005/06/20/ExpelExam2/
+http://thetyee.ca/pundit/?p=250
+http://theuncommontater.blogspot.com/
+http://theunion.com/article/20050111/OPINION/101110078
+http://theunionleader.com/articles_showa.html?article=37341
+http://theunionleader.com/articles_showa.html?article=44235
+http://theunionleader.com/articles_showa.html?article=50082
+http://theunionleader.com/columns.html?body=By%20Charles%20Krauthammer
+http://theunionleader.com/yesterday.html?date=4-04-2004
+http://theunionleader.com/yesterday.html?date=5-08-2004
+http://theunionleader.com/yesterday.html?date=6-30-2004
+http://theweekly.co.uk/4801/your_name_here/index.cgi
+http://thewhir.com/features/king-switchanddata.cfm
+http://thewillamettestore.com/cgi-bin/store/service.html
+http://thingamy.typepad.com/sigs_blog/2005/06/
+http://thinkblade.typepad.com/upgradeyourmind/2004/11/the_power_of_fo_3.html
+http://thinkblade.typepad.com/upgradeyourmind/2005/03/
+http://thinkblade.typepad.com/upgradeyourmind/2005/04/
+http://thinkdrastic.net/journal/subjects/friends/
+http://thinkingaboutart.blogs.com/art/
+http://thinkingaboutart.blogs.com/art/2005/06/
+http://thinkingmeat.blogspot.com/2003_08_01_thinkingmeat_archive.html
+http://thinkingright.net/
+http://thinkingright.net/archives/2005/05/08/jims-illness/
+http://thinkprogress.org/index.php?p=1004
+http://thinkprogress.org/index.php?p=545
+http://thinkprogress.org/index.php?p=904
+http://this-space.blogspot.com/2005_06_01_this-space_archive.html
+http://thisfish.com/Archives/2003_04.html
+http://thismilkishot.blogspot.com/2002_11_10_thismilkishot_archive.html
+http://thismustbetheplace.net/talking-heads-rock-and-roll-hall-of-fame.asp
+http://thistuesday.org/node/31
+http://thomas.loc.gov/cgi-bin/bdquery/?&Db=d101&querybd=@FIELD(FLD004+@4((@1(Rep+Gray++William+H.++III))+00460))
+http://thomas.loc.gov/cgi-bin/bdquery/?&Db=d107&querybd=@FIELD(FLD003+@4((@1(Rep+Gillmor++Paul+E.))+00439))
+http://thomas.loc.gov/cgi-bin/bdquery/?&Db=d108&querybd=@FIELD(FLD004+@4((@1(Rep+Delahunt++William+D.))+01480))
+http://thomas.loc.gov/cgi-bin/bdquery/d?d096:0:./list/bss/d096SP.lst:%7CTOM:/bss/d096query.html%7C
+http://thomas.loc.gov/cgi-bin/bdquery/z?d101:SN00580:@@@D&summ2=m&
+http://thomas.loc.gov/cgi-bin/bdquery/z?d101:SN00580:@@@L&summ2=m&
+http://thomas.loc.gov/cgi-bin/bdquery/z?d102:HE00396:@@@L&summ2=m&
+http://thomas.loc.gov/cgi-bin/bdquery/z?d102:SN01722:@@@D&summ2=m&
+http://thomas.loc.gov/cgi-bin/bdquery/z?d108:HR02119:@@@L&summ2=m&
+http://thomas.loc.gov/cgi-bin/bdquery/z?d109:HC00095:@@@S
+http://thomas.loc.gov/cgi-bin/cpquery/?&&dbname=cp108&&&r_n=sr344.108&&sel=TOC_771306&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=hr076.104&sel=TOC_52091&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=hr076.104&sel=TOC_53251&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=hr099.104&sel=TOC_63820&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=sr069.104&sel=TOC_68956&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=sr069.104&sel=TOC_69653&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp104&r_n=sr069.104&sel=TOC_70174&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr078p1.105&sel=TOC_24189&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr083.105&sel=TOC_127289&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr558.105&sel=TOC_37466&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr558.105&sel=TOC_37943&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr588.105&sel=TOC_218100&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=hr588.105&sel=TOC_219519&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp105&r_n=sr298.105&sel=TOC_26454&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp106&r_n=hr099p1.106&sel=TOC_72618&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp106&r_n=hr479.106&sel=TOC_2982344&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp106&r_n=sr362.106&sel=TOC_195022&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp107&r_n=hr667.107&sel=TOC_17411&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp107&r_n=hr667.107&sel=TOC_18621&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp107&r_n=hr746.107&sel=TOC_139913&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp108&r_n=hr391.108&sel=TOC_2120728&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp108&r_n=hr662p1.108&sel=TOC_238466&
+http://thomas.loc.gov/cgi-bin/cpquery/?&db_id=cp108&r_n=sr344.108&sel=TOC_771506&
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp105:FLD010:@1(hr193)
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp105:FLD010:@1(hr506)
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp106:FLD010:@1(hr157):
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp107:FLD010:@1(hr116)
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp107:FLD010:@1(hr623):
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp108:FLD010:@1(hr584)
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp108:FLD010:@1(hr653)
+http://thomas.loc.gov/cgi-bin/cpquery/R?cp109:FLD010:@1(hr102)
+http://thomas.loc.gov/cgi-bin/cpquery/T?&report=hr771&dbname=cp107&
+http://thomas.loc.gov/cgi-bin/cpquery/T?&report=sr079&dbname=cp108&
+http://thomas.loc.gov/cgi-bin/cpquery/z?cp104:hr613:
+http://thomas.loc.gov/cgi-bin/cpquery/z?cp104:sr317:
+http://thomas.loc.gov/cgi-bin/query/z?c103:S.1592.IS:
+http://thomas.loc.gov/cgi-bin/query/z?r102:E23JA1-599:
+http://thomas.loc.gov/home/histdox/fed_43.html
+http://thomas.loc.gov/home/histdox/fed_66.html
+http://thomer.com/mit/9.html
+http://thompsonclan6.typepad.com/thompsonclan6/
+http://thorax.bmjjournals.com/cgi/content/full/55/10/826
+http://thorax.bmjjournals.com/cgi/content/full/57/6/513
+http://thorntree.lonelyplanet.com/categories.cfm?catid=30
+http://thornybush.krugerpark.co.za/Safari_Essentials-travel/kruger-park-private-lodges-on-safari-in-africa_6.html
+http://thorpe.ou.edu/IRA/craigchrtr.html
+http://thoughts04.blogspot.com/2004/02/keeping-you-updated-26-jan04-dear.html
+http://thoughts04.blogspot.com/2004/10/different-approach-dear-friends-where.html
+http://thoughts04.blogspot.com/2004_10_01_thoughts04_archive.html
+http://thoughtsfromgod.blogdrive.com/
+http://threerivershms.com/hvvanews1-7.htm
+http://threesixty.yarinareth.net/
+http://threesixty.yarinareth.net/archives/category/general/
+http://threeyearsofhell.com/
+http://throwingthings.blogspot.com/2005_06_12_throwingthings_archive.html
+http://ths.gardenweb.com/forums/load/build/msg020055351340.html
+http://ths.gardenweb.com/forums/load/care/msg1223482723814.html
+http://ths.gardenweb.com/forums/load/hvac/msg011627059117.html
+http://ths.gardenweb.com/forums/load/kitchbath/msg02184137756.html
+http://ths.gardenweb.com/forums/load/saving/msg010241439302.html
+http://ths.gardenweb.com/forums/load/saving/msg041149016973.html
+http://ths.gardenweb.com/forums/load/step/msg041814184606.html
+http://thyroid.about.com/b/a/037299.htm
+http://thyroid.about.com/cs/hypothyroidism/a/undertreated.htm
+http://thyroid.about.com/od/drsrichkarileeshames/a/fatfuzzyfrazz.htm
+http://tibetan.review.to/art.html
+http://tidygarage.com/tek9.asp?pg=products&grp=30
+http://tie.telemed.org/articles/article.asp?path=articles&article=chfPilotStudy_cljmg_hhct04.xml
+http://tieguy.org/blog/index.cgi/2004/Mar
+http://tim.griffins.ca/writings/w_body.html
+http://tim.oreilly.com/
+http://timblair.net/weblog.php?id=P95
+http://timblair.spleenville.com/
+http://timblair.spleenville.com/archives/007027.php
+http://timblair.spleenville.com/archives/007242.php
+http://timblair.spleenville.com/archives/007656.php
+http://time.blogs.com/daily_rx/
+http://times.cybercatholics.com/
+http://timesofindia.indiatimes.com/articlelist/30359486.cms
+http://timesofindia.indiatimes.com/articleshow/1146878.cms
+http://timesofindia.indiatimes.com/articleshow/711180.cms
+http://timesofindia.indiatimes.com/articleshow/822916.cms
+http://timewitnesses.org/english/~alsmith.html
+http://timon.sir.arizona.edu/sm02/560/
+http://timss.bc.edu/timss1995i/HiLightC.html
+http://timss.bc.edu/timss1999b/mathbench_report/t99bmath_chap_6_5.html
+http://tinctoris.com/archives/2004/septembe.html
+http://tinpan.fortunecity.com/ebony/546/bumbershoot.html
+http://tipperography.typepad.com/tipperography/
+http://tisc.planet-f1.com/news/story_19860.shtml
+http://tiscali.football365.com/opinion/john_nicholson/story_138506.shtml
+http://titan.iwu.edu/~wchapman/britpoet/1126vicrelig.html
+http://titan.iwu.edu/~wchapman/sophist.html
+http://titusonenine.classicalanglican.net/
+http://titusonenine.classicalanglican.net/index.php?p=1740
+http://tjshome.com/jokepage.php
+http://tkri.tu.ac.th/archive/publication12.html
+http://tlc.epsb.ca/aauthor/teachers.htm
+http://tln.lib.mi.us/~amutch/jen/boys.htm
+http://tln.typepad.com/tln_voices/2005/04/inserting_teach.html
+http://tls.macrobyte.net/discussionThread$msgNum=53
+http://tls.utsc.utoronto.ca/TWC/writeguides/webwriting.htm
+http://tlt.its.psu.edu/dmd/teachact/teachactFAQ.html
+http://tlt.its.psu.edu/suggestions/techagogy/SelfExpress.shtml
+http://tmda.net/config-pre.html
+http://tn.essortment.com/learnplay_rbii.htm
+http://tntluoma.com/beyond30/2005/01/act_and_mac
+http://tntn.essortment.com/whoissojourn_rkss.htm
+http://tobacco.rti.org/data/New/catsearch.cfm?CategoryID=28&Category=Demographics&SubCategory=
+http://today.java.net/jag/
+http://today.java.net/jag/page5.html
+http://today.java.net/jag/page7.html
+http://today.java.net/pub/a/today/2004/07/06/3ddesktop.html
+http://today.java.net/pub/a/today/2004/07/06/3ddesktop.html?page=last&x-order=date
+http://today.java.net/pub/a/today/2005/02/15/timing.html
+http://today.java.net/pub/a/today/2005/03/01/InstallingJBoss.html
+http://today.uci.edu/news/intersection.asp?title=Vitamin+E+reduces+high+blood+pressure+in+cases+of+kidney+failure%2C+UCI+study+finds
+http://todaysseniorsnetwork.com/pharma_suits.htm
+http://tokyo.usembassy.gov/e/p/tp-20040517-17.html
+http://tokyotidbits.com/archives/000269.html
+http://tolweb.org/tree?group=Chiroteuthidae
+http://tomama.blogs.com/mubar/our_baby_girl/
+http://tomburka.com/
+http://tomburka.com/archives2/2005_01.php
+http://tomlevymd.com/archiveissue8.htm
+http://tommangan.net/
+http://tomyee3.home.comcast.net/WriteKanji.htm
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/020313/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/021002/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/021211/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/030423/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/030507/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/031105/twipprint.html
+http://tonto.eia.doe.gov/oog/info/twip/twiparch/040512/twipprint.html
+http://tonytalkstech.com/2004/09/22/taking-oral-drugs-orally/
+http://toolittletime.com/free/f01.html
+http://tools.devshed.com/c/a/Online%20Business%20Help/Differentiate-and-Grow-Rich-The-Critical-Importance-of-a-Strong-USP-Unique-Selling-Proposition
+http://top-lyrics.elizov.com/?lyrics=Usher
+http://topchefs.chef2chef.net/recipes-2/carter/
+http://topekahomefinder.com/
+http://topicmaps.it.bond.edu.au/docs/27/3
+http://torillsin.blogspot.com/
+http://torillsin.blogspot.com/2005/05/under-pressure.html
+http://torrez.org/archives/000168.php
+http://torvald.aksis.uib.no/corpora/2003-1/0438.html
+http://toshare.servepics.com/w/en/10.htm
+http://touch-the-sky.mylog.pl/omnie.php
+http://touchngo.com/lglcntr/akstats/Statutes/Title45/Chapter04/Section214.htm
+http://touchngo.com/lglcntr/akstats/Statutes/Title45/Chapter04/Section401.htm
+http://touchngo.com/lglcntr/ctrules/judcon/CJC-07.htm
+http://touchngo.com/sp/html/sp-5293.htm
+http://touchsamadhi.com/ts/index.php/samadhi/bsm/215
+http://tougherthanblog.blogspot.com/
+http://touregypt.net/historicalessays/hatshepsut.htm
+http://tourismgrading.co.za/tourism/news/messages/41.html
+http://towergames.com/help.jsp
+http://towleroad.typepad.com/towleroad/
+http://townandcountryrcd.org/sustainable_agriculture_issue_team.asp
+http://townsendcenter.berkeley.edu/working_groups_more.shtml
+http://townsquarehawaii.blogspot.com/
+http://toxsci.oupjournals.org/cgi/content/full/59/2/193
+http://tph.statikmajik.com/band/
+http://tqe.quaker.org/2001/TQE012-EN-Trade.html
+http://tqe.quaker.org/2003/TQE086-EN-MarshallPlan.html
+http://tqe.quaker.org/old/quakerhillsept2002.htm
+http://trace.wisc.edu/bugzilla_wcag/show_bug.cgi?id=221
+http://trace.wisc.edu/bugzilla_wcag/show_bug.cgi?id=509
+http://trace.wisc.edu/docs/2003-12-1-FCC-VoIP-Forum/transcript.htm
+http://tradermike.net/2004/11/william_oneils_how_to_make_money_selling_stocks_short.html
+http://traditionalmidwife.com/teenpregnancy.html
+http://traditionalvalues.org/
+http://traditionalvalues.org/index.php
+http://trailer-bodybuilders.com/mag/trucks_trailer_outlookslight_slowdown/
+http://training.dialog.com/onlinecourses/patents/lesson4/e_full_rec.html
+http://training.engineworks.co.uk/employer.html
+http://training.freeskills.com/employer.html
+http://training.gbdirect.co.uk/courses/oracle_training/oracle_9i_dba_part_1.html
+http://training.gbdirect.co.uk/courses/php/introduction_to.html
+http://training.gbdirect.co.uk/courses/web/
+http://training.gbdirect.co.uk/courses/web/css_training_courses_uk.html
+http://training.gbdirect.co.uk/leeds_training_centre.html
+http://training.gbdirect.co.uk/terms/in-house.html
+http://training.itcilo.it/decentwork/staffconf2003-sep/introduction.htm
+http://training.itcilo.it/ils/foa/library/digestdecisions_en/indexdiges_en.html
+http://training.theinquirer.net/employer.html
+http://training.theregister.co.uk/employer.html
+http://training.worldwidelearn.com/employer.html
+http://trainingmanchester.co.uk/resource/inf_VA.htm
+http://trans.nih.gov/cehp/HBPdemo-socioecon.htm
+http://transatlanticassembly.blogspot.com/2005/01/private-and-public-morals-in-eu-third.html
+http://transient.moltenglobule.org/past/2004/02/Inclusion/
+http://transit.511.org/tripplanner/help.asp
+http://transobj.workopolis.com/servlet/Content/fasttrack/20050615/BURKE15?section=Executive
+http://transobj.workopolis.com/servlet/Content/qprinter/20050615/BURKE15
+http://transportation.engadget.com/entry/1234000810042014/
+http://transportation.northwestern.edu/programs/patterson/lecturers/02Mineta/minetaSpeech.html
+http://transporttechjournal.com/200504_newslog.html
+http://trashotron.com/agony/reviews/2004/george-faces_mist_flame.htm
+http://traumwerk.stanford.edu/~mshanks/weblog/index.php?m=200308
+http://travel.canoe.ca/SkiCanadaPrevious/november98.html
+http://travel.guardian.co.uk/activities/culture/story/0,7447,413039,00.html
+http://travel.guardian.co.uk/activities/culture/story/0,7447,423673,00.html
+http://travel.guardian.co.uk/activities/food/story/0,7447,1365899,00.html
+http://travel.guardian.co.uk/activities/wintersports/story/0,7447,1401569,00.html
+http://travel.guardian.co.uk/askatraveller/story/0,8915,685473,00.html
+http://travel.guardian.co.uk/cheapflights/story/0,8945,665627,00.html
+http://travel.guardian.co.uk/cities/story/0,7450,397410,00.html
+http://travel.guardian.co.uk/cities/story/0,7450,919715,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1025914,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1060486,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1252794,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1323104,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1406799,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1488590,00.html
+http://travel.guardian.co.uk/countries/story/0,7451,1498911,00.html
+http://travel.guardian.co.uk/ecotourism/story/0,8945,664242,00.html
+http://travel.guardian.co.uk/hotels/story/0,11327,1050369,00.html
+http://travel.guardian.co.uk/readeroffers/cities/page/0,12300,1171359,00.html
+http://travel.guardian.co.uk/restaurants/story/0,13739,1079067,00.html
+http://travel.guardian.co.uk/saturdaysection/story/0,8922,1385589,00.html
+http://travel.guardian.co.uk/shortbreaks/story/0,11335,630644,00.html
+http://travel.guardian.co.uk/solo/story/0,12391,781368,00.html
+http://travel.holylandtrust.org/modules.php?name=Content&pa=showpage&pid=8
+http://travel.independent.co.uk/americas/south/story.jsp?story=643849
+http://travel.state.gov/family/abduction/country/country_507.html
+http://travel.state.gov/family/abduction/resources/resources_544.html
+http://travel.state.gov/family/adoption/country/country_331.html
+http://travel.state.gov/law/legal/testimony/testimony_797.html
+http://travel.state.gov/law/legal/testimony/testimony_799.html
+http://travel.state.gov/passport/about/agencies/agencies_913.html
+http://travel.state.gov/passport/pptphotos/glossary.html
+http://travel.state.gov/travel/cis_pa_tw/cis/cis_1014.html
+http://travel.state.gov/travel/cis_pa_tw/tsunami/tsunami_2049.html
+http://travel.state.gov/travel/tips/brochures/brochures_1230.html
+http://travel.state.gov/travel/tips/health/health_1185.html
+http://travel.state.gov/travel/tips/safety/safety_1179.html
+http://travel.state.gov/visa/frvi/bulletin/bulletin_2007.html
+http://travel.state.gov/visa/frvi/bulletin/bulletin_2111.html
+http://travel.state.gov/visa/laws/telegrams/telegrams_1401.html
+http://travel.state.gov/visa/laws/telegrams/telegrams_1438.html
+http://travel.state.gov/visa/temp/info/info_1298.html
+http://travel.state.gov/visa/temp/types/types_1262.html
+http://travel.state.gov/visa/tempvisitors_types_students2.html
+http://travel.state.gov/visa/tempvisitors_types_students3.html
+http://travel.telegraph.co.uk/travel/main.jhtml?xml=/travel/2005/01/31/etwalk.xml
+http://travel.timesonline.co.uk/article/0,,10293-1265817,00.html
+http://travel.yahoo.com/p-hotel-191501889-b-41-nearoid-2909271-radius-35-san_francisco_hotels-i-sort-distance
+http://travel.yahoo.com/p-hotel-191501889-nearoid-2909271-radius-35-san_francisco_hotels-i-sort-distance
+http://travel.yahoo.com/p-reviews-329344-prod-hotel-action-read-ratings_and_reviews-i
+http://travel.yahoo.com/p-reviews-329344-prod-hotel-action-read-ratings_and_reviews-i?from=1
+http://travel.yahoo.com/p-reviews-332021-prod-hotel-action-read-ratings_and_reviews-i?from=-49
+http://travel.yahoo.com/p-reviews-339487-prod-hotel-action-read-ratings_and_reviews-i
+http://travel.yahoo.com/p-reviews-339487-prod-hotel-action-read-ratings_and_reviews-i-sortorder-5
+http://travel.yahoo.com/p-reviews-350964-action-read-from-11-prod-hotel-ratings_and_reviews-i
+http://travel.yahoo.com/p-reviews-375658-prod-hotel-action-read-ratings_and_reviews-i
+http://travel.yahoo.com/p-reviews-375658-prod-hotel-action-read-ratings_and_reviews-i-sortorder-1
+http://travel.yahoo.com/p-reviews-375658-prod-hotel-action-read-ratings_and_reviews-i?from=-29
+http://travel.yahoo.com/p-reviews-375658-prod-hotel-action-read-ratings_and_reviews-i?from=1
+http://travel.yahoo.com/p-reviews-472467-prod-hotel-action-read-ratings_and_reviews-i
+http://travel.yahoo.com/p-reviews-472467-prod-hotel-action-read-ratings_and_reviews-i?from=-29
+http://travel.yahoo.com/p-reviews-472467-prod-hotel-action-read-ratings_and_reviews-i?from=1
+http://travel.yahoo.com/p-travelguide-2733520-nhood-Union+Square-san_francisco_things_to_do-i
+http://travel.yahoo.com/p-travelguide-2801686-vancouver_things_to_do-i
+http://travel2.nytimes.com/fodors/top/features/travel/destinations/unitedstates/newyork/newyorkcity/fdrs_feat_111_4.html?n=Top%2FFeatures%2FTravel%2FDestinations%2FUnited+States%2FNew+York%2FNew+York+City
+http://travelevents.discovery.com/sisp/?fx=event&event_id=109792
+http://travelevents.discovery.com/sisp/?fx=event.detail&event_id=109792
+http://travelevents.discovery.com/sisp/?fx=event.office&event_id=109792
+http://travelindependent.info/
+http://travelmax.statravel.co.uk/sisp/?fx=theme&loc_id=132789&cat_id=2233
+http://travelswithlizbeth.typepad.com/travels_with_lizbeth/
+http://travelvideo.tv/news/index.php?id=C0_37_1
+http://travelwithkids.about.com/b/a/023575.htm
+http://trc.ucdavis.edu/trc/teachguide/before.html
+http://trc.virginia.edu/Publications/OP_Cook/Cook_Nobelists.htm
+http://trc.virginia.edu/Publications/Teaching_Concerns/Fall_1997/TC_Fall_1997_Change-Up.htm
+http://tremont-tearoom.com/welcome.html
+http://trevorcook.typepad.com/weblog/2005/01/here_comes_ever.html
+http://treyjackson.typepad.com/junction/2005/06/video_connelly_.html
+http://triangle.bizjournals.com/triangle/stories/2003/08/18/story3.html?page=2
+http://triangle.bizjournals.com/triangle/stories/2005/01/17/editorial2.html
+http://trinity.neooffice.org/modules.php?name=Forums&file=viewtopic&t=1346&start=15
+http://triptronix.net/ishbadiddle/archives/2005/06/07/12.50.28/
+http://trishul.sci.gu.edu.au/courses/ss12bmi/gene_transfer.html
+http://trishwilson.typepad.com/blog/2005/02/term_wife_beate.html
+http://trojanhorseshoes.blogfodder.net/archives/2004_04.html
+http://trojanhorseshoes.blogfodder.net/archives/cat_north_carolina.html
+http://tronche.com/gui/x/xlib/event-handling/protocol-errors/default-handlers.html
+http://troppoarmadillo.ubersportingpundit.com/archives/004662.html
+http://trueboy.blogspot.com/
+http://trumpeter.athabascau.ca/content/v10.3/Hawley.html
+http://trushare.com/07DEC95/DE95LEGA.htm
+http://trustees.msu.edu/dec/may03/budget.html
+http://truthlaidbear.com/
+http://truthminers.com/hoaxarticles/carjack.htm
+http://tsa.transform.to/furry/downtherabbithole.html
+http://tsa.transform.to/worlds/woc/4daytheuniversechanged.html
+http://tsmi.blogs.com/tsmiblog/2005/02/staying_current.html
+http://tsn.dk/about.php
+http://tspweb02.tsp.utexas.edu/webarchive/02-05-01/2001020501_s05_See.html
+http://tsunamihelp.blogspot.com/
+http://tsunamihelp.blogspot.com/2005/01/first-person-account-from-northeast.html
+http://ttb.eng.wayne.edu/~grimm/BME5210/005210Exam1.html
+http://ttc-2.coe.uga.edu/training_evaluation/index.php
+http://tti.tamu.edu/researcher/newsletter.asp?vol=39&issue=4&article=3
+http://tttrustee.whitleynet.org/
+http://tube.tfl.gov.uk/content/pressreleases/0109/27.asp
+http://tube.tfl.gov.uk/content/pressreleases/0210/02.asp
+http://tuck06.blogspot.com/
+http://tulanegreenwave.collegesports.com/sports/m-basebl/recaps/032005aaa.html
+http://tulanegreenwave.collegesports.com/sports/m-basebl/spec-rel/05-cws-question.html
+http://tulsahurricane.collegesports.com/multimedia/real-info.html
+http://tunagirl.blogspot.com/2004_03_01_tunagirl_archive.html
+http://tunt.blogspot.com/2004_10_01_tunt_archive.html
+http://turf.ufl.edu/residential/paspalum_management.html
+http://turing.une.edu.au/~comp131/ResSchoolTutorials/Lab1/exercise/
+http://turnbull.mcs.st-and.ac.uk/circa/gapstuff/gapfiles/Ex.20.html
+http://tursiops.org/modules.php?name=News&file=article&sid=1193
+http://tutakai.typepad.com/tutakai/2004/09/does_kerry_have.html
+http://tutorials.alsacreations.com/tutocss/
+http://tutorials.beginners.co.uk/read/id/132
+http://tutorials.findtutorials.com/read/id/135/headline/Professional+XML+Part+5+-+The+Rule-Based+Design+Pattern
+http://tv.cream.org/specialassignments/films/christmas/
+http://tvbb.zap2it.com/showflat.php?Cat=&Board=UBB13&Number=14070&page=0&view=collapsed&sb=7&o=&fpart=3
+http://tvbb.zap2it.com/showflat.php?Cat=&Board=UBB13&Number=14070&page=0&view=collapsed&sb=9&o=&fpart=3
+http://tvbb.zap2it.com/showflat.php?Cat=&Number=84934&page=0&view=collapsed&sb=5&o=
+http://tveasy.co.uk/
+http://tvgameshows.net/
+http://tvnz.co.nz/view/tv2_minisite_story_skin/465176?format=html
+http://twaintimes.net/boat/sbpage4a.htm
+http://tweetie.comstar.net/
+http://twg.sbs.com.au/home/index.php3?id=58760
+http://twhs.district205.net/html/parents___family.html
+http://twiceisnice.hispeed.com/0-6%20month%20boys%20clothes.html
+http://twiki.org/cgi-bin/view/Codev/RemoveNewTopicLinkStyleFromRenderDotPm
+http://twiki.org/cgi-bin/view/Codev/UseCasesInDocumentation
+http://twiki.org/cgi-bin/view/Plugins/CalendarPluginDev
+http://twincities.bizjournals.com/site_map/twincities_sitemap_46.html
+http://twinrose.net/dataproducts9.php
+http://twinschatter.blogspot.com/
+http://twm.co.nz/Saht_indig_way.html
+http://twm.co.nz/consciousness.html
+http://twm.co.nz/harm_consc1.htm
+http://twnafrica.org/news_detail.asp?twnID=787
+http://two-wrong.blogdrive.com/
+http://twoandtwomakesfive.blogs.com/two_and_two_makes_five/2005/06/church_and_mone.html
+http://twofeetin.typepad.com/elisa/2004/10/
+http://twopiers.co-op.org/guide/vacency.htm
+http://twovoyagers.com/metamorphosis/faq/faqi.html
+http://twtd.bluemountains.net.au/Rick/votd.htm
+http://txstatebobcats.collegesports.com/bobcat-ath-foundation/endzone-complex.html
+http://type1info.com/Your%20Stories.htm
+http://typewriter.rydia.net/trouble.htm
+http://typo3.jweiland.net/typo3_languages+M57a0db1111c.98.html
+http://u.dailybulletin.com/Stories/0,1413,212~23497~2907020,00.html
+http://u.dailynews.com/Stories/0,1413,211~30797~2887405,00.html
+http://u2log.com/archive/2005/02/u2s_larry_mullen_writes_open_letter_to_u2com_members.php
+http://uanews.opi.arizona.edu/cgi-bin/WebObjects/UANews.woa/wa/MainStoryDetails?ArticleID=3817
+http://uanews.ua.edu/anews2004/guess05/
+http://ubb.empireonline.co.uk/showflat.php?Cat=&Board=bookworms&Number=725552&page=5&view=collapsed&sb=5&o=&fpart=2
+http://ubb.empireonline.co.uk/showflat.php?Cat=&Board=bookworms&Number=725552&page=5&view=collapsed&sb=5&o=&fpart=all
+http://ubelhor.home.mindspring.com/pulsar/issue18/panicked.html
+http://ubersoft.net/features/uletters/chapter00.html
+http://ublib.buffalo.edu/libraries/projects/cases/curriculum.html
+http://ublib.buffalo.edu/libraries/projects/cases/salton.html
+http://uboat.net/ops/scapa_flow.htm
+http://ubuntu.upc.es/comuni.php?id=pax&lg=eng
+http://ubuntuforums.org/archive/index.php/t-8035.html
+http://ucdavis.placementmanual.com/resume/resume-26.html
+http://uchs.net/Rosenthal/powvil.html
+http://ucollege.wustl.edu/summer
+http://ucrturf.ucr.edu/UCRTRAC/BTTA/cumindex.htm
+http://ucsbgauchos.collegesports.com/sports/m-track/recaps/052905aaa.html
+http://ucsfhr.ucsf.edu/jobs/tep/faqs.html
+http://ucsu.colorado.edu/~obrian/01rev2.html
+http://ucsu.colorado.edu/~obrian/01rev3.html
+http://ucsu.colorado.edu/~obrian/02rev4.html
+http://ufies.org/archives/000187.html
+http://ufocasebook.com/CashLandrum2.html
+http://ug-finaid.northwestern.edu/incomingFAQ.html
+http://ug.studylink.co.uk/featured/pid-si-40-a40/
+http://uh88.ifa.hawaii.edu/LinuxTCS/UH88display.html
+http://uhathletics.hawaii.edu/pr.html?prid=13570&p=18
+http://uhavax.hartford.edu/bugl/legal.htm
+http://uhaweb.hartford.edu/highberg/blog/
+http://uhcougars.collegesports.com/tickets/hou-tickets-m-footbl.html
+http://uicflames.collegesports.com/facilities/les.html
+http://uigarden.net/english/methods.php/2005/06/05/ten_ways_to_kill_design
+http://ujs.ucsd.edu/
+http://uk.alphacourse.org/runningacourse/news/2002/03/successfulbusinessman.htm
+http://uk.alphacourse.org/runningacourse/tours/world/default.htm
+http://uk.biz.yahoo.com/050121/290/farxd.html
+http://uk.biz.yahoo.com/050209/35/fc3pk.html
+http://uk.biz.yahoo.com/050602/66/fk97h.html
+http://uk.biz.yahoo.com/050603/214/fkdqs.html
+http://uk.biz.yahoo.com/050613/323/fl14g.html
+http://uk.biz.yahoo.com/050613/323/fl1mm.html
+http://uk.biz.yahoo.com/050613/323/fl1yk.html
+http://uk.biz.yahoo.com/050617/66/flexs.html
+http://uk.biz.yahoo.com/050622/323/fls3c.html
+http://uk.biz.yahoo.com/050623/17/flt6b.html
+http://uk.biz.yahoo.com/050624/323/flyk9.html
+http://uk.biz.yahoo.com/glossary_mort4.html
+http://uk.biz.yahoo.com/moneyweekly/expertopinion.html
+http://uk.bizrate.com/buy/products__att1162--2438-,cat_id--95.html
+http://uk.bizrate.com/features/merchant_reviews/write_review__mid--82750.html
+http://uk.dir.yahoo.com/Business_and_Economy/Business_to_Business/Education/By_Subject/Science/Teaching_and_Learning_Aids/Lab_Equipment_and_Supplies/
+http://uk.dir.yahoo.com/Business_and_Economy/Business_to_Business/Education/Employment/
+http://uk.dir.yahoo.com/Business_and_Economy/Business_to_Business/Office_Supplies_and_Equipment/
+http://uk.dir.yahoo.com/Business_and_Economy/Shopping_and_Services/Gifts_and_Occasions/
+http://uk.dir.yahoo.com/Education/Early_Childhood_Education/
+http://uk.dir.yahoo.com/Education/Higher_Education/College_and_University_Planning/
+http://uk.dir.yahoo.com/Regional/Countries/United_Kingdom/Business_and_Economy/Business_to_Business/Education/Employment/
+http://uk.dir.yahoo.com/Science/Energy/Conservation_and_Efficiency/
+http://uk.dir.yahoo.com/Society_and_Culture/Environment_and_Nature/Environmental_History/
+http://uk.dir.yahoo.com/regional/countries/united_kingdom/business_and_economy/employment_and_work/careers_and_jobs/jobs/
+http://uk.dk.com/
+http://uk.encarta.msn.com/encyclopedia_761573010/United_States_of_America.html
+http://uk.gay.com/boards/read.php?f=7&i=2115&t=2115
+http://uk.geocities.com/banshee1970/interests.html
+http://uk.geocities.com/gking.stpauls_egham_hythe@btinternet.com/inside.html
+http://uk.geocities.com/johnandrewscott@btopenworld.com/
+http://uk.geocities.com/jonpartin/2corinthians8-13.html
+http://uk.geocities.com/stephenbirkett/04.html
+http://uk.geocities.com/stmarys_moseley@btopenworld.com/dimurag.htm
+http://uk.holidaysguide.yahoo.com/g-europe-czech_republic-sport_activity.html
+http://uk.hotels.com/hotel/hotels-in-spain/tenerife-hotels/europe-villa-cortes.htm
+http://uk.insight.com/apps/productpresentation/index.php?product_id=TOAA0287K
+http://uk.insight.com/apps/productpresentation/index.php?product_id=TOAA0287M
+http://uk.news.yahoo.com/050608/17/fkn3x.html
+http://uk.news.yahoo.com/050611/344/fkwfg.html
+http://uk.news.yahoo.com/050615/325/fl74q.html
+http://uk.news.yahoo.com/050615/325/fl7fa.html
+http://uk.news.yahoo.com/050620/325/fljyf.html
+http://uk.newsbot.msn.com/s/default.aspx?id=10
+http://uk.oneworld.net/guides/childlabour?PrintableVersion=enabled
+http://uk.rleague.com/cc/news/
+http://uk.sports.yahoo.com/050110/3/8ezb.html
+http://uk.sports.yahoo.com/050501/4/ani3.html
+http://uk.sports.yahoo.com/050616/3/bl9h.html
+http://uk.sports.yahoo.com/050620/40/boao.html
+http://uk.towerrecords.com/product.aspx?pfid=1015489&dm=t&recfrom=BBC+Sessions+1964-1977-2319158
+http://uk.tv.yahoo.com/050526/344/fjtg9.html
+http://uk.videogames.games.yahoo.com/ds/reviews/mr--driller--drill-spirits-b9778d.html
+http://uk.videogames.games.yahoo.com/pc/reviews/ground-control-2--operation-exodus-6e7f53.html
+http://uk.virginmoney.com/travel-insurance/pages/faqs.html
+http://ukcdr.org/issues/cd/bad/
+http://ukweatherworld.co.uk/forum/forums/thread-view.asp?tid=21652&posts=356
+http://ultibase.rmit.edu.au/Articles/dec98/gajad1.htm
+http://ultibase.rmit.edu.au/Articles/nov03/creese2.htm
+http://ultibase.rmit.edu.au/Articles/oct98/ulvund1.htm
+http://ultimateavmag.com/features/1004way/index4.html
+http://ultimateavmag.com/news/11337/
+http://um-jmh.org/body.cfm?id=8371
+http://umami.typepad.com/umami_2/2004/10/
+http://umanitoba.ca/admin/governance/policies/section_1400/1405.shtml
+http://umanitoba.fitdv.com/new/articles/article.html?artid=361
+http://umanitoba.fitdv.com/new/articles/article.html?artid=47
+http://umanitoba.fitdv.com/new/articles/article.html?artid=47&print_art=1
+http://umassathletics.collegesports.com/sports/m-footbl/spec-rel/050405aad.html
+http://unadorned.org/dandruff/
+http://unadorned.org/dandruff/archives/2002/01/
+http://unadorned.org/dandruff/archives/2002/07/
+http://unadorned.org/dandruff/archives/2003/04/
+http://uncpress.unc.edu/chapters/burk_never.html
+http://uncpress.unc.edu/chapters/cox_proper.html
+http://uncpress.unc.edu/chapters/dougherty_more.html
+http://uncpress.unc.edu/chapters/fussell_blue.html
+http://uncpress.unc.edu/chapters/mobley_way.html
+http://uncpress.unc.edu/stet/
+http://und.collegesports.com/sports/w-golf/spec-rel/050305aaa.html
+http://undeadart.org/
+http://underneaththeirrobes.blogs.com/main/questions_presented_a3g_interviews_federal_judicial_celebrities/
+http://undying.ea.com/official/lordoftherings/thebattleformiddleearth/us/battleground.jsp?src=060305
+http://unescodelhi.nic.in/natural/basic-engineering.htm
+http://unfutz.blogspot.com/2004_03_07_unfutz_archive.html
+http://unfutz.blogspot.com/2004_03_28_unfutz_archive.html
+http://union-bulletin.com/main.asp?SectionID=17&SubSectionID=30&ArticleID=24952
+http://union-bulletin.com/main.asp?SectionID=17&SubSectionID=30&ArticleID=25103
+http://unionplus.educationplanner.com/education_planner/c_and_p_article.asp?articleName=Pressure_Points&sponsor=2866&PageType=Selecting-Counselors
+http://unit.aist.go.jp/crm/basic/e_3.html
+http://united-nations-building.visit-new-york-city.com/
+http://unitedworkers.org/
+http://unitymarketing.ecnext.com/coms2/gi_0270-221/Gifting-Report-The-Who-What.html
+http://universe.nasa.gov/technology/probes.html
+http://university.smartmoney.com/glossary/index.cfm?letter=D
+http://universitycenter.cua.edu/students/neworg.cfm
+http://unix.cms.gre.ac.uk/web/php.html
+http://unixdocs.stanford.edu/usingX.html
+http://unmp.forumone.com/eng_html_11.html
+http://unpac.ca/economy/globglossary.html
+http://unpac.ca/economy/historyecon.html
+http://unr.edu/homepage/crowther/ejse/crowther999.html
+http://uofitelecom.cso.uiuc.edu/illicall/guidevoi.htm
+http://uoflsports.collegesports.com/sports/m-xc/spec-rel/111104aab.html
+http://update.unu.edu/archive/issue31_3.htm
+http://update.unu.edu/issue35_7.htm
+http://uplink.space.com/printthread.php?Cat=&Board=freespace&main=141973&type=thread
+http://uplink.space.com/printthread.php?Cat=&Board=sciastro&main=68839&type=thread
+http://uplink.space.com/showflat.php?Board=businesstech&Number=132694
+http://uplink.space.com/showflat.php?Cat=&Board=freespace&Number=141973&page=1&view=collapsed&sb=5&o=0&fpart=
+http://upn54.com/shows/
+http://upsaid.com/sarsparilla/
+http://urbanarmy.blogspot.com/
+http://urbanideas.com/columns/penney.htm
+http://urbanlegends.about.com/
+http://urbanlegends.about.com/library/weekly/aa081199.htm
+http://urbanlegends.about.com/library/weekly/aa082497.htm
+http://urbanmainframe.com/teleport
+http://uregina.ca/~starkc/pubs.html
+http://urj.org/Articles/index.cfm?id=6665&pge_prg_id=25165&pge_id=4314
+http://urj.org/_kd/go.cfm?destination=ViewItem&Item_ID=3291
+http://url.co.nz/african_trip/stories.php?story_id=9
+http://urlgreyhot.com/personal/taxonomy/term/143
+http://urlgreyhot.com/personal/taxonomy/term/289
+http://urn1350.net/article/440
+http://ursu.uregina.ca/news/display.php?id=247
+http://us-africa.tripod.com/zambia.html
+http://us.altnews.com.au/drop/node/view/929
+http://us.altnews.com.au/drop/taxonomy/page/or/153?from=60
+http://us.deskdemon.com/pages/uk/events/formsofaddress
+http://us.history.wisc.edu/hist102/lectures/lecture08.html
+http://us.pampers.com/en_US/content/type/101/contentId/12078.do
+http://us.pampers.com/en_US/content/type/118/contentId/13738.do
+http://us.penguingroup.com/nf/Book/BookDisplay/0,,0_0451207351,00.html
+http://us.rediff.com/movies/2004/oct/15selv.htm
+http://us.tom.com/english/4438.htm
+http://us.yesasia.com/
+http://usa.manuginobili.com/Noticias/Noticias____ByManu/byManu____03_04/by_Manu____50_questions_-_Part/by_Manu____50_questions_-_Part/by_manu____50_questions_-_part.html
+http://usa.scratchrecords.com/
+http://usa.visa.com/visaextras/program_details.html
+http://usa1.ebooks.com/ebooks/book_display.asp?IID=193374
+http://usa1.ebooks.com/ebooks/book_display.asp?IID=221290
+http://usa2.ebooks.com/ebooks/book_display.asp?IID=222497
+http://usa2.ebooks.com/news/article.asp?AID=60
+http://usa2.ebooks.com/subjects/browse.asp?SID=17
+http://usability.gov/guidelines/designprocess.html
+http://usaip.info/faq.htm
+http://usaip.info/faqprint.htm
+http://usatownmeeting.com/
+http://uscis.gov/graphics/
+http://uscis.gov/graphics/aboutus/repsstudies/parolrpt97.htm
+http://uscis.gov/graphics/fieldoffices/losangeles/GCrenewalLOA.htm
+http://uscis.gov/graphics/howdoi/Health_Cert.htm
+http://uscis.gov/graphics/howdoi/fororphan.htm
+http://usclancaster.sc.edu/faculty/scarlett/acrnsmry.htm
+http://usctrojans.collegesports.com/genrel/usc-recruiting-definitions-common-questions.html
+http://use.perl.org/~jouke/journal/7414
+http://usefulinc.com/edd/blog/2003/7/8
+http://uselectionatlas.org/INFORMATION/INFORMATION/electcollege_curiosities.php
+http://uselessjunk.com/modules.php?name=News&file=article&sid=954
+http://usembassy.egnet.net/ambassador/iv101903.htm
+http://usembassy.state.gov/cambodia/wwwh0111.html
+http://usembassy.state.gov/guatemala/wwwhfte21.html
+http://usembassy.state.gov/posts/sf1/wwwhic00.html
+http://usembassy.state.gov/posts/sf1/wwwhic26.html
+http://usenetsports.com/archive/index.php/t-135675.html
+http://user.aol.com/bassinreid/products.html
+http://user.aol.com/deanpaint/create/tech2.htm
+http://user.fundy.net/fpweb/index-3.htm
+http://user.tninet.se/~ecf599g/aardasnails/java/Monkey/webpages/
+http://user.tninet.se/~jyg699a/fallout2.html
+http://user688038.wx13.registeredsite.com/speech/welteke%202002.htm
+http://userpages.aug.com/captbarb/
+http://userpages.umbc.edu/~dni1/humor/lists/obgyn.shtml
+http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html
+http://users.adelphia.net/~lilavois/Seven/pergamum.html
+http://users.andara.com/~grose/marr1870.html
+http://users.andara.com/~grose/marr1900.html
+http://users.aol.com/eegspectrm/tova/tova.htm
+http://users.aol.com/s6sj7gt/primeval.htm
+http://users.argonet.co.uk/users/johnward/ade/flyer1.html
+http://users.auracom.com/wordsmith/spam.html
+http://users.belgacom.net/gc674645/heaven/sexinhev.htm
+http://users.belgacom.net/wagnerlibrary/prose/wagartfut.htm
+http://users.belgacom.net/wagnerlibrary/prose/wlpr0181.htm
+http://users.bigpond.net.au/convicts/page126.html
+http://users.bigpond.net.au/pknife/aboutme.htm
+http://users.ca.astound.net/gaughan/
+http://users.commspeed.net/k6xf/clock.htm
+http://users.compaqnet.be/cn127848/obev/obev069.html
+http://users.compaqnet.be/cn127848/obev/obev111.html
+http://users.compaqnet.be/cn127848/obev/obev158.html
+http://users.compaqnet.be/cn127848/obev/obev205.html
+http://users.compaqnet.be/cn127848/obev/obev229.html
+http://users.compaqnet.be/cn127848/obev/obev272.html
+http://users.compaqnet.be/cn127848/obev/obev328.html
+http://users.drew.edu/dwilkins/Poetry.htm
+http://users.erols.com/k3mt/hints/hints.htm
+http://users.erols.com/mdinolfo/bc348ps.htm
+http://users.erols.com/spba/
+http://users.ev1.net/~homeville/fictionmag/s1161.htm
+http://users.ev1.net/~homeville/fictionmag/s369.htm
+http://users.ev1.net/~homeville/isfac/s21.htm
+http://users.frii.com/mytymyk/lions/attacks3.htm
+http://users.ipa.net/~dwighth/squeak/oopsla_squeak.html
+http://users.marktwain.net/jready/joann.html
+http://users.metro2000.net/~stabbott/genx.htm
+http://users.michiana.org/greens/cong_97.htm
+http://users.netonecom.net/~manleyk/509outline.htm
+http://users.ox.ac.uk/~anthsoc/contents/newsletter_M02_W2.html
+http://users.ox.ac.uk/~climbing/articles/daurada.html
+http://users.ox.ac.uk/~croquet/oucc/documents/hs.htm
+http://users.ox.ac.uk/~dplb0070/cv.html
+http://users.ox.ac.uk/~invar/lions.html
+http://users.ox.ac.uk/~magd1368/weblog/2005_05_01_archive.html
+http://users.ox.ac.uk/~mansassc/other.html
+http://users.ox.ac.uk/~ojs/events.htm
+http://users.ox.ac.uk/~ouccc/beginners/atoz/
+http://users.ox.ac.uk/~ouengsoc/societyconstitution.html
+http://users.ox.ac.uk/~ougym/constitution.htm
+http://users.ox.ac.uk/~oumpa/constitution.htm
+http://users.ox.ac.uk/~ouoc/about/constitution.shtml
+http://users.ox.ac.uk/~oupc/0203/varsitymatch_05.htm
+http://users.ox.ac.uk/~quarrell/hrr1.html
+http://users.ox.ac.uk/~quarrell/hrr99sat.html
+http://users.ox.ac.uk/~scat0385/19wu.html
+http://users.ox.ac.uk/~scat1663/Index%20Main%20Items/Presentations.htm
+http://users.ox.ac.uk/~shil0124/mystuff/for-intolerance.html
+http://users.ox.ac.uk/~ssfc0041/sortedpubs.html
+http://users.rcn.com/crfriend/museum/narrative.html
+http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/G/GasExchange.html
+http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/N/Nutrition.html
+http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/T/Transposons.html
+http://users.rcn.com/jtitus/Holding/NRJ.html
+http://users.rcn.com/tdiann/d_kitch.htm
+http://users.sgi.net/~elcore/truth.htm
+http://users.skynet.be/avalon/avalonuk/activities/activ2001.htm
+http://users.skynet.be/spinnen/bioeng.htm
+http://users.telenet.be/ananda/bc.htm
+http://users.ticnet.com/mikefirth/glos-obj.htm
+http://users.ticnet.com/mikefirth/hotbit11.htm
+http://users.ticnet.com/mikefirth/hotbit26.htm
+http://users.ticnet.com/mikefirth/hotbit27.htm
+http://users.ticnet.com/mikefirth/hotbit35.htm
+http://users.tpg.com.au/pharma_/43.htm
+http://users.tyenet.com/kozlich/bogomil2.htm
+http://users.uniserve.com/~synergy/pg1-37.htm
+http://users4.cgiforme.com/dragonball/messages/7561.html
+http://users4.cgiforme.com/dragonball/messages/7562.html
+http://users4.cgiforme.com/dragonball/messages/7913.html
+http://users4.cgiforme.com/dragonball/messages/7938.html
+http://userwww.service.emory.edu/~cmadd01/chpaul04.html
+http://userwww.sfsu.edu/~infoarts/links/wilson.artlinks2.html
+http://usgovinfo.about.com/library/weekly/aa031200a.htm
+http://usgovinfo.about.com/library/weekly/aa062702a.htm
+http://usgovinfo.about.com/library/weekly/aa092501a.htm
+http://usgovinfo.about.com/library/weekly/bliraqreshouse.htm
+http://usgovinfo.about.com/od/technologyandresearch/a/forests6months.htm
+http://usgovinfo.about.com/od/technologyandresearch/a/hazebegone.htm
+http://usinfo.org/facts/holiday/hd2.htm
+http://usinfo.state.gov/af/Archive/2004/Oct/28-382811.html
+http://usinfo.state.gov/dhr/Archive/2005/Feb/02-37221.html
+http://usinfo.state.gov/eap/
+http://usinfo.state.gov/eap/Archive/2005/Feb/23-749179.html
+http://usinfo.state.gov/eap/Archive/2005/Mar/21-227840.html
+http://usinfo.state.gov/ei/Archive/2005/Jun/07-850754.html
+http://usinfo.state.gov/gi/Archive/2004/Dec/03-378340.html
+http://usinfo.state.gov/gi/Archive/2004/Dec/08-935820.html
+http://usinfo.state.gov/gi/Archive/2004/Jul/15-123355.html
+http://usinfo.state.gov/gi/Archive/2004/Nov/03-339852.html
+http://usinfo.state.gov/is/Archive/2004/Dec/08-366411.html
+http://usinfo.state.gov/is/Archive_Index/Compliance_Diplomacy_Takes_on_Greater_Emphasis.html
+http://usinfo.state.gov/journals/itgic/1103/ijge/gj08.htm
+http://usinfo.state.gov/journals/itps/0305/ijpe/kongdan.htm
+http://usinfo.state.gov/journals/itsv/0403/ijse/jones.htm
+http://usinfo.state.gov/journals/itsv/0403/ijse/smith.htm
+http://usinfo.state.gov/journals/itsv/0600/ijse/standards.htm
+http://usinfo.state.gov/journals/itsv/0704/ijse/friedman.htm
+http://usinfo.state.gov/journals/itsv/1204/ijse/west.htm
+http://usinfo.state.gov/journals/itsv/1204/ijse/wolfe.htm
+http://usinfo.state.gov/mena/Archive/2004/Dec/12-982394.html
+http://usinfo.state.gov/mena/Archive/2004/Feb/05-47804.html
+http://usinfo.state.gov/mena/Archive/2004/Nov/05-904208.html
+http://usinfo.state.gov/mena/Archive/2005/Jun/19-282442.html
+http://usinfo.state.gov/mena/Archive/2005/Jun/21-632540.html
+http://usinfo.state.gov/products/pubs/democracy/dmpaper9.htm
+http://usinfo.state.gov/products/pubs/election04/campaign$.htm
+http://usinfo.state.gov/products/pubs/election04/congress.htm
+http://usinfo.state.gov/products/pubs/election04/procedure.htm
+http://usinfo.state.gov/products/pubs/geography/geog10.htm
+http://usinfo.state.gov/products/pubs/geography/geog16.htm
+http://usinfo.state.gov/products/pubs/history/ch13.htm
+http://usinfo.state.gov/products/pubs/intelprp/
+http://usinfo.state.gov/products/pubs/intelprp/homepage.htm
+http://usinfo.state.gov/products/pubs/legalotln/criminal.htm
+http://usinfo.state.gov/products/pubs/market/mktsb5.htm
+http://usinfo.state.gov/products/pubs/muslimlife/immigrat.htm
+http://usinfo.state.gov/products/pubs/oecon/chap2.htm
+http://usinfo.state.gov/products/pubs/oecon/chap4.htm
+http://usinfo.state.gov/products/pubs/oecon/chap5.htm
+http://usinfo.state.gov/products/pubs/oecon/chap6.htm
+http://usinfo.state.gov/products/pubs/press/press05.htm
+http://usinfo.state.gov/products/pubs/rightsof/press.htm
+http://usinfo.state.gov/products/pubs/writers/butler.htm
+http://usinfo.state.gov/sa/Archive/2004/Oct/07-669633.html
+http://usinfo.state.gov/special/Archive/2005/Jan/20-603979.html
+http://usinfo.state.gov/special/Archive/2005/May/05-299294.html
+http://usinfo.state.gov/special/Archive_Index/Copy_of_Compilation_of_VE_Day_Memories_Part_1.html
+http://usinfo.state.gov/usa/infousa/facts/democrac/22.htm
+http://usinfo.state.gov/usa/infousa/facts/democrac/4.htm
+http://usinfo.state.gov/usa/infousa/facts/symbols/songs.htm
+http://usinfo.state.gov/usa/infousa/society/socwelf/ss2000.htm
+http://usinfo.state.gov/usinfo/Archive/2005/Jun/15-742705.html
+http://usinfo.state.gov/usinfo/Archive/2005/Jun/20-442305.html
+http://usinfo.state.gov/wh/Archive/2005/May/03-250853.html
+http://usinfo.state.gov/wh/Archive/2005/May/16-117827.html
+http://usite.army.mod.uk/aru/features/7drills.html
+http://uslaboragainstwar.org/article.php?id=7596
+http://usmarriagelaws.com/search/weddings/wedding_vows/wedding_books/index.shtml
+http://usmilitary.about.com/cs/army/a/armygrooming_3.htm
+http://usmilitary.about.com/cs/joiningup/a/recruitgoals.htm
+http://usmilitary.about.com/cs/moneymatters/a/foodstamps.htm
+http://usmilitary.about.com/cs/wars/a/wartrophies.htm
+http://usmilitary.about.com/cs/weapons/a/newassaultgun.htm
+http://usmilitary.about.com/library/milinfo/arjobs/bl15b.htm
+http://usmilitary.about.com/library/milinfo/arjobs/bl15g.htm
+http://usmilitary.about.com/library/milinfo/arjobs/bl15v.htm
+http://usmilitary.about.com/library/milinfo/arjobs/bl67y.htm
+http://usmilitary.about.com/library/milinfo/blnavytrad-8.htm
+http://usmilitary.about.com/od/armypromotions/a/armywarrant.htm
+http://usmilitary.about.com/od/familydomestic/a/serviceflags.htm
+http://usnholpm.unh.edu/USY/V.Pers/F.9.htm
+http://uspirg.org/uspirg.asp?id2=13649&id3=USPIRG&
+http://uspresident.blogspot.com/
+http://utahutes.collegesports.com/ot/strength-conditioning.html
+http://utamagazine.uta.edu/fall_2001/sports/gould.html
+http://utangente.free.fr/anewpages/govinfo.html
+http://utility.plant.jobs.jobsearchsite.com/
+http://utopia.knoware.nl/users/modijk/huygvort.htm
+http://utopia.utexas.edu/articles/alcalde/bevo.html?sec=health&sub=sports
+http://utopia.utexas.edu/articles/alcalde/bevo.html?sec=texas&sub=university
+http://utopia.utexas.edu/articles/alcalde/gray_matters.html?sec=science&sub=biology
+http://utopia.utexas.edu/articles/alcalde/prensa_libre.html?sec=arts&sub=journalism
+http://utrockets.collegesports.com/sports/m-footbl/spec-rel/020205aab.html
+http://uts.cc.utexas.edu/~pmullins/chapter12.htm
+http://uuhome.de/global/english/vision001.html
+http://uuhsc.utah.edu/healthinfo/pediatric/growth/encopres.htm
+http://uuhsc.utah.edu/prevcard/cardioTests/
+http://uw.physics.wisc.edu/~himpsel/wires.html
+http://uwacadweb.uwyo.edu/RSO/ProfessionalAndDepartmental.asp
+http://uwadmnweb.uwyo.edu/InfoTech/Support/phone/vminstruc.htm
+http://uwadmnweb.uwyo.edu/RanchRecr/handbook/business_plan.htm
+http://uwadmnweb.uwyo.edu/RanchRecr/handbook/whoa.htm
+http://uwadmnweb.uwyo.edu/hrclasscomp2/jobdescrip/AssociateDirectorPhysicalPlant.htm
+http://va-interactive.com/inbusiness/editorial/bizdev/ibt/business_plan.html
+http://vaandel.co.za/our%20english%20page.htm
+http://vabenefits.vba.va.gov/vonapp/instructions.asp
+http://vads.ahds.ac.uk/guides/creating_guide/sect23.html
+http://vads.ahds.ac.uk/guides/creating_guide/sect28.html
+http://vads.ahds.ac.uk/guides/creating_guide/sect51.html
+http://vads.ahds.ac.uk/guides/creating_guide/sect65.html
+http://vain-glorious.net/
+http://valinor.ca/el3.htm
+http://valkenaar.net/davidlisa2000/journal/I-wales.html
+http://valley.vcdh.virginia.edu/Browser1/aubrowser/ssoct60.html
+http://valueoverreplacement.blogspot.com/
+http://vanessa.thebestporn.com/review/nightclubgirls
+http://vark.blogspot.com/
+http://vasab.leontief.net/countries/denmark1.htm
+http://vastudies.pwnet.org/vs2/vs2_d.htm
+http://vathena.arc.nasa.gov/curric/land/global/greenhou.html
+http://vatican.usembassy.it/embassy/statement.asp
+http://vb.mvps.org/news.asp
+http://vb.oreilly.com/news/vb_tips_1098.html
+http://vbba.org/rules/1884.html
+http://vbc.cityrepair.org/vbc5/blog.php?category=4
+http://vbc.cityrepair.org/vbc5/blog.php?d=10&m=05&y=05&category=4
+http://vbnet.mvps.org/code/browse/shdocvwfavadv.htm
+http://vbulletin.thesite.org/archive/index.php/t-17311.html
+http://vbulletin.thesite.org/archive/index.php/t-17453.html
+http://vbulletin.thesite.org/archive/index.php/t-55644.html
+http://vccslitonline.cc.va.us/ReadingPoetry/collab.htm
+http://vcexperts.com/vce/library/encyclopedia/documents_view.asp?document_id=100
+http://vch.ru/cgi-bin/guide.cgi?table_code=27&action=show_section&id=5
+http://vegasnews.squarespace.com/las-vegas-convention-news/2005/1/7/remarks-by-bill-gates-chairman-and-chief-software-architect-microsoft-corporation.html
+http://vendors.dsm.org/
+http://vered.rose.utoronto.ca/people/anu_dir/thesis/fchp2.fm.html
+http://verificationguild.com/modules.php?name=Forums&file=viewtopic&p=1376
+http://veryveryhappy.blogspot.com/2003_03_09_veryveryhappy_archive.html
+http://veterans.house.gov/hearings/schedule107/nov01/11-14-01/sbersoff.htm
+http://veterans.house.gov/news/108/6-16-03.html
+http://veterans.house.gov/news/108/9-3-03.html
+http://veterans.uconn.edu/aboutme.htm
+http://vetgate.ac.uk/browse/cabi/8208ec2b40c7243e82dacca11d952925.html
+http://vetgate.ac.uk/browse/cabi/8deed6277234dd267fda4956e6ef0a63.html
+http://vetgate.ac.uk/browse/cabi/d28d2d3560fa76f0dbb1a452f8c38169.html
+http://vetmedicine.about.com/cs/diseasesall/a/petdentalcare_2.htm
+http://vetmedicine.about.com/od/pethealthinsurance/a/061604a.htm
+http://vettesndreamcars.com/coupes_1.html
+http://vgn.dm.gov.ae/DMEGOV/OSI/dm-osi-definitions-e
+http://vhidiet.ediets.ie/news/article.cfm/article_id,2056
+http://vic.org/archives/2004_06.html
+http://vichaar.org/article77.html
+http://vickers.homedns.org/PV2mods.htm
+http://victorhanson.com/
+http://victorian.fortunecity.com/carmelita/435/New_Chaos.html
+http://video.barnesandnoble.com/search/glossary.asp?cat=1005874&TRM=1006855
+http://video.barnesandnoble.com/search/product.asp?ean=43396062528&frm=0&itm=2
+http://video.barnesandnoble.com/search/product.asp?ean=43396096783&frm=0
+http://video.barnesandnoble.com/search/product.asp?ean=43396222199&frm=0
+http://videosystems.com/mag/video_cedia_expo/
+http://vietnamnews.vnagency.com.vn/2004-03/20/Stories/28.htm
+http://vietnamnews.vnagency.com.vn/2004-04/24/Columns/Short%20Story.htm
+http://vietnamnews.vnagency.com.vn/showarticle.php?num=01INN010505
+http://vietnamnews.vnagency.com.vn/showarticle.php?num=03WAR170405
+http://vietnamnews.vnanet.vn/showarticle.php?num=03WAR170405
+http://viewfromiran.blogspot.com/2003/06/june-20-2003-arak-i-have-seen-more.html
+http://viewpointjournal.com/archives/2003/12/28/democrats-play-game-of-follow-the-loser/
+http://vijaykumar.com/questionandanswer/pain-and-suffering.html
+http://vikingphoenix.com/public/rongstad/home.html
+http://vikk.typepad.com/down_the_writers_path/2005/04/caution_is_book.html
+http://village.homewood.il.us/zoning/sections/sectionframes/section8pt1fr.htm
+http://village.massena.ny.us/treasurer.html
+http://villagebooks.booksense.com/NASApp/store/IndexJsp?s=storepicks&page=2667
+http://villagenews.weblogger.com/
+http://villamartelli.com/
+http://vimdoc.sourceforge.net/htmldoc/usr_02.html
+http://vincentdunn.com/wtc.html
+http://vinland.org/heathen/pagancee/lithrel.html
+http://virginiasports.collegesports.com/sports/m-baskbl/spec-rel/020805aaa.html
+http://virtual.park.uga.edu/cdesmet/wordcrun/wordcrun.htm
+http://virtualtrials.com/news3.cfm?item=2941
+http://virtuelvis.com/archives/2004/01/orkut-terms-of-service
+http://vision-nary.com/content/rook.html
+http://vision.arc.nasa.gov/personnel/jbm/home/vislab/exps/java/safe_txt.html
+http://vision.york.ac.uk/articles/141/books/42937.shtml
+http://visit.ipswitch.com/aprcase
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1118460189&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1118616441&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1118685100&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1118691112&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1118766352&page=1
+http://visitcroatia.proboards21.com/index.cgi?board=anything&action=post&thread=1118460189&quote=1119098479&page=1
+http://visitors.bestofhealth.com/get_fit/strength_LL.html
+http://vismod.media.mit.edu/courses/cgw96/1-12/
+http://vismod.media.mit.edu/courses/cgw97/1-10/
+http://viterbi.usc.edu/news/news/2005/2005_06_06_rome.htm
+http://vivabit.co.uk/articles/wsbp/
+http://vizier.u-strasbg.fr/~heck/waworal.html
+http://vjarmy.com/archives/2004/03/quicksilver_a_b.php
+http://vlacc.org/~morgan/assignments/assgt10.htm
+http://vlhc.org/pipetron_meetings/past97.html
+http://vlsi.colorado.edu/~mooni/N_ABLE/N_ABLE.html
+http://vm.cfsan.fda.gov/~lrd/tpsylliu.html
+http://vme.net/bluesky/year-end-sale.html
+http://vmyths.com/rant.cfm?id=274&page=4
+http://vmyths.com/rant.cfm?id=420&page=4
+http://vmyths.com/rant.cfm?id=562&page=4
+http://vnboards.ign.com/MMORPG_Player_Reviews/b22600/59743524/p1/
+http://vnd.theterrene.net/?m=Jul04
+http://vnuuk.typepad.com/pcwlabs/
+http://vocserve.berkeley.edu/Summaries/949sum.html
+http://voi.org/books/ayodhya/ch2.htm
+http://voice.paly.net/view_story.php?id=231
+http://voice.paly.net/view_story.php?id=2599
+http://voice123.com/l/voice_over_jobs.html
+http://voiceinthedesert.netfirms.com/keith/archives/2005/05/the_temperature.html
+http://voiceoftheturtle.org/raj/blog/archive/2004_09_01_archive.html
+http://voinovich.senate.gov/biography/
+http://voip-blog.tmcnet.com/blog/rich-tehrani/voip/just-in-time-communications.html
+http://voip-forum.tmcnet.com/voip-forum/forum/forum_posts.asp?TID=2228&PN=1&get=last
+http://voip-forum.tmcnet.com/voip-forum/forum/get_topic.asp?FID=17&TID=2201&DIR=N
+http://voip.weblogsinc.com/entry/1234000583039423
+http://volfangary.tripod.com/Difficult.html
+http://volokh.com/
+http://volokh.com/2002_09_08_volokh_archive.html
+http://volokh.com/2003_05_25_volokh_archive.html
+http://volokh.com/2003_06_29_volokh_archive.html
+http://volokh.com/2003_10_19_volokh_archive.html
+http://volokh.com/2003_11_02_volokh_archive.html
+http://volokh.com/2003_11_30_volokh_archive.html
+http://volokh.com/2004_01_18_volokh_archive.html
+http://volokh.com/2004_05_02_volokh_archive.html
+http://volokh.com/archives/archive_2004_05_14.shtml
+http://volokh.com/archives/archive_2004_05_21.shtml
+http://volokh.com/archives/archive_2004_06_00.shtml
+http://volokh.com/archives/archive_2004_06_14.shtml
+http://volokh.com/archives/archive_2004_06_28.shtml
+http://volokh.com/archives/archive_2004_07_00.shtml
+http://volokh.com/archives/archive_2004_07_14.shtml
+http://volokh.com/archives/archive_2004_09_14.shtml
+http://volokh.com/archives/archive_2004_10_14.shtml
+http://volokh.com/archives/archive_2004_12_00.shtml
+http://volokh.com/archives/archive_2004_12_07.shtml
+http://volokh.com/archives/archive_2004_12_14.shtml
+http://volokh.com/archives/archive_2004_12_28.shtml
+http://volokh.com/archives/archive_2005_01_00.shtml
+http://volokh.com/archives/archive_2005_01_07.shtml
+http://volokh.com/archives/archive_2005_01_28.shtml
+http://volokh.com/archives/archive_2005_02_20-2005_02_26.shtml
+http://volokh.com/archives/archive_2005_03_13-2005_03_19.shtml
+http://volokh.com/archives/archive_2005_03_20-2005_03_26.shtml
+http://volokh.com/archives/archive_2005_03_27-2005_04_02.shtml
+http://volokh.com/archives/archive_2005_04_17-2005_04_23.shtml
+http://volokh.com/archives/archive_2005_04_24-2005_04_30.shtml
+http://volokh.com/archives/archive_2005_05_15-2005_05_21.shtml
+http://volokh.com/archives/archive_2005_05_29-2005_06_04.shtml
+http://volokh.com/archives/archive_2005_06_05-2005_06_11.shtml
+http://volokh.com/archives/archive_2005_06_19-2005_06_25.shtml
+http://volokh.com/posts/1116453076.shtml
+http://volokh.com/posts/1119035247.shtml
+http://volvo-cars-na.usa18.info/
+http://vortex.plymouth.edu/precip/precip2aaa.html
+http://vos.noaa.gov/MWL/spring_03/circulation.shtml
+http://vos.ucsb.edu/browse.asp?id=2720
+http://vote.sparklit.com/comments.spark?contentID=843803&page=2&action=viewTopic&commentID=&pollID=797692
+http://vote.sparklit.com/comments.spark?contentID=843803&page=2&action=viewTopic&commentID=all&pollID=797692
+http://vote2004.eriposte.com/
+http://voyageur.idic.ca/deJagerJulyAug03.htm
+http://vr.dv8.net/tfs_lyrics4.html
+http://vranet.com/IDEA/IDEARelationship.asp?for=mid2idea
+http://vranet.com/IDEA/coderhelp/sourceexamples.htm
+http://vt.placementmanual.com/jobsearch/jobsearch-19.html
+http://vtc.ngfl.gov.uk/docserver.php?docid=10970
+http://vxl.sourceforge.net/
+http://w3.agsfoundation.com/press_011102.htm
+http://w3.arizona.edu/~records/retention.html
+http://w3.byuh.edu/devotionals/media/2005/0203hatch.htm
+http://w3.byuh.edu/devotionals/media/2005/0526rogers.htm
+http://w3.hwdsb.on.ca/tailslap/other/rvrnews/rn-mar00.htm
+http://w3.mesd.k12.or.us/admin/Suptreport.htm
+http://w3.ouhsc.edu/sfs/faq.asp
+http://w3.rz-berlin.mpg.de/cmp/ives_fathers_influence.html
+http://w3.rz-berlin.mpg.de/cmp/wagner.html
+http://w3.uokhsc.edu/pathology/deptlabs/Alzheimer/mech-dementia.htm
+http://w3.whosea.org/en/Section1243/Section1374/Section1426_5834.htm
+http://w4.ed.uiuc.edu/faculty/westbury/Paradigm/mcgeorge.html
+http://w4.evectors.it/itEntDirectory/topic?topic=peter_drucker&chunck=1
+http://w4.evectors.it/itEntDirectory/topic?topic=siebel&chunck=1
+http://w4.publicappeal.org/book/view/121
+http://w4.publicappeal.org/node/view/121
+http://w4.publicappeal.org/node/view/50
+http://wa.audubon.org/wetnet/chap1.htm
+http://wac.colostate.edu/aw/reviews/mla_2000.htm
+http://wah1ne.blogspot.com/
+http://wahshashe.org/nihkagahah/
+http://waiterrant.blogspot.com/
+http://wake-village.texas.com/hotels.html
+http://wakeforestsports.collegesports.com/trads/wake-strength.html
+http://wakeforestsports.collegesports.com/trads/wake-strength.html?page=1
+http://wakeforestsports.collegesports.com/trads/wake-strength.html?pic=0
+http://wakeforestsports.collegesports.com/trads/wake-strength.html?pic=2
+http://wakeforestsports.collegesports.com/trads/wake-strength.html?pic=3
+http://wales.rleague.com/index2.shtml
+http://walk-away.info/
+http://walk.free.bm/
+http://walkah.net/
+http://walking.about.com/cs/measure/a/aaidol.htm
+http://walking.about.com/cs/shoecare/a/keepthemtied.htm
+http://walking.about.com/library/weekly/aa120797.htm
+http://walking.about.com/od/medhot/
+http://walking.about.com/od/polereviews/gr/dvdnordicwalk.htm
+http://walking.miningco.com/od/publications/
+http://walking.timeoutdoors.com/kit/3WLKDUD02010201E.htm
+http://wall.oise.utoronto.ca/events/speakers_series.htm
+http://walleyeguys.com/web1297.html
+http://wallkill.k12.nj.us/finearts/artcurriculum.html
+http://wallstreet-updown.com/NewPage3-FAQ-21sec-6.htm
+http://wally.rit.edu/cary/CP_pages/caryorder.html
+http://walrus.wr.usgs.gov/tsunami/itst.html
+http://waltonfeed.com/old/soap/soap.html
+http://wardsauto.com/ar/auto_visteon_settles_new/
+http://warincontext.org/
+http://warincontext.org/2004_11_14_archive.html
+http://warincontext.org/2005_01_02_archive.html
+http://warner.senate.gov/pressoffice/statements/20050525.htm
+http://warrior.xenu.ca/1997-0814b.html
+http://was4.hewitt.com/hewitt/ap/resource/rptspubs/hewittquart/HQ_11/articles/putting_front.html
+http://was4.hewitt.com/hewitt/resource/rptspubs/hewitt_magazine/vol8_iss1/features-hewitt-01.html
+http://washingtonhistory.com/OHJ/OHJ_0802_Shutters.htm
+http://washingtonhistory.org/wshs/columbia/articles/0200-a2.htm
+http://washingtonpost.com/
+http://washingtonpost.com/ac3/ContentServer?pagename=article&articleid=A99067-1998Aug9&node=travel/archive/subject/family
+http://washingtontimes.com/metro/20050628-115938-3363r.htm
+http://washingtontimes.com/national/20050126-114921-7399r.htm
+http://washingtontimes.com/national/20050127-122517-1306r.htm
+http://washingtontimes.com/national/20050324-114419-7900r.htm
+http://washingtontimes.com/national/20050610-123152-3823r.htm
+http://washingtontimes.com/national/20050613-120230-6283r.htm
+http://washingtontimes.com/national/20050624-105738-9688r.htm
+http://washingtontimes.com/upi-breaking/20041013-115710-9162r.htm
+http://washingtontimes.com/upi-breaking/20041028-120146-8244r.htm
+http://washingtontimes.com/upi-breaking/20041213-121621-7693r.htm
+http://washingtontimes.com/upi-breaking/20050119-042204-4915r.htm
+http://washingtontimes.com/upi-breaking/20050317-063734-5283r.htm
+http://washingtontimes.com/upi-breaking/20050406-010101-1385r.htm
+http://washingtontimes.com/upi-breaking/20050412-064305-5519r.htm
+http://washingtontimes.com/upi/20050616-053346-8976r.htm
+http://washingtontimes.com/world/20040110-115103-7051r.htm
+http://wastedday.diaryland.com/
+http://watarts.uwaterloo.ca/~acheyne/Misc/SeriousPlay.html
+http://watch.pair.com/occult.html
+http://watch.pair.com/reich.html
+http://watch.pair.com/roundtable.html
+http://watch.windsofchange.net/0729_0804.htm
+http://watchingthewatchers.org/
+http://water.library.arizona.edu/body.1_div.34.html
+http://watercenter.colostate.edu/overview.html
+http://watercolourboy.blogspot.com/2003_07_01_watercolourboy_archive.html
+http://watermattersaustralia.org/lent/000007.htm
+http://watford.rivals.net/default.asp?sid=898&p=2&stid=8245653
+http://watski.blogspot.com/2004_10_01_watski_archive.html
+http://watthai.net/talon/jataka/jataka81.htm
+http://watty.diaryland.com/
+http://wave.prohosting.com/helppat/
+http://waynesword.palomar.edu/lmexe10b.htm
+http://waynesword.palomar.edu/mucuna.htm
+http://waynesword.palomar.edu/plmay97.htm
+http://waysandmeans.house.gov/About.asp?section=23
+http://waysandmeans.house.gov/about.asp?section=23&comm=0
+http://waysandmeans.house.gov/hearings.asp?formmode=printfriendly&id=2803
+http://waysandmeans.house.gov/hearings.asp?formmode=printfriendly&id=900
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=1440
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=147
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2492
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2519
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2668
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2783
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2798
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2815
+http://waysandmeans.house.gov/hearings.asp?formmode=view&id=2859
+http://waysandmeans.house.gov/legacy/fullcomm/107cong/2-13-01/2-13onie.htm
+http://waywildpets.com/Animal-Rescue_CPR-Cats-Dogs_Emergency-First-Aid.html
+http://wbai.org/index.php?option=content&task=view&id=4013&Itemid=2
+http://wbaifree.org/sloan/road/elizabeth.html
+http://wbgosampad.nic.in/about.htm
+http://wbln0018.worldbank.org/eurvp/web.nsf/Pages/United+Kingdom-Activities
+http://wbz1030.com/topstories/local_story_038122850.html
+http://wcc.dli.state.mt.us/S/Smith_KeithWarren_Finding.htm
+http://wcco.com/
+http://wcco.com/health/health_story_030090208.html
+http://wcs-old.atlasworks.com/67090/201142
+http://wdcrobcolp01.ed.gov/cfapps/free/displaysubject.cfm?sid=4&subid=38
+http://wdcrobcolp01.ed.gov/cfapps/free/displaysubject.cfm?sid=9
+http://wdfw.wa.gov/fish/regs/commregs/2003framework.htm
+http://wdfw.wa.gov/wlm/game/hunter/scoping.htm
+http://we04.com/privacy.cfm
+http://wearables.engadget.com/entry/1234000257023494/
+http://wearablesbusiness.com/mag/apparel_self_promotion_wearing/
+http://wearablesbusiness.com/mag/apparel_womens_sales_increase/
+http://weather.unisys.com/model/details.html
+http://weathereye.kgan.com/expert/blizzard/WinterSafe.html
+http://weathereye.kgan.com/expert/blizzard/bliz_glossary.html
+http://weatherization.ornl.gov/sep_evaluation-2004.htm
+http://weatheroffice.ec.gc.ca/mainmenu/faq_e.html
+http://weatheroffice.ec.gc.ca/saisons/info_prev_proba_e.html
+http://weatheroffice.ec.gc.ca/saisons/info_prev_proba_e.html?b_templatePrint=true
+http://web-1.bidz.com/productDisplay.php?lotid=8642631
+http://web-1.bidz.com/productDisplay.php?lotid=8706488&live=Y
+http://web-1.bidz.com/productDisplay.php?lotid=8706579&live=Y
+http://web-guides.com/successletter/archives/2005/03/
+http://web-japan.org/trends/sports/spo040204.html
+http://web-japan.org/trends98/honbun/ntj971121.html
+http://web.1earth.net/~fullpwr/martialarts.html
+http://web.africa.ufl.edu/asq/v1/3/2.htm
+http://web.amnesty.org/ai.nsf/Recent/MDE140082001?Open
+http://web.amnesty.org/library/Index/ENGACT300012004
+http://web.amnesty.org/library/Index/ENGACT300012004?open&of=ENG-315
+http://web.amnesty.org/library/Index/ENGACT300012004?open&of=ENG-352
+http://web.amnesty.org/library/Index/ENGACT300012004?open&of=ENG-366
+http://web.amnesty.org/library/Index/ENGACT300012004?open&of=ENG-390
+http://web.amnesty.org/library/Index/ENGAFR170021999?open&of=ENG-CMR
+http://web.amnesty.org/library/Index/ENGAFR300041998?open&of=ENG-SEN
+http://web.amnesty.org/library/Index/ENGAFR430012000?open&of=ENG-NER
+http://web.amnesty.org/library/Index/ENGAMR140032004?open&of=ENG-2M5
+http://web.amnesty.org/library/Index/ENGAMR140032004?open&of=ENG-BHS
+http://web.amnesty.org/library/Index/ENGAMR150052002?open&of=ENG-BRB
+http://web.amnesty.org/library/Index/ENGAMR450042001?open&of=ENG-PRY
+http://web.amnesty.org/library/Index/ENGASA130062000?open&of=ENG-BGD
+http://web.amnesty.org/library/Index/ENGASA170182004?open&of=ENG-2S2
+http://web.amnesty.org/library/Index/ENGASA310222005?open&of=ENG-366
+http://web.amnesty.org/library/Index/ENGASA310222005?open&of=ENG-394
+http://web.amnesty.org/library/Index/ENGEUR290012004?open&of=ENG-2U3
+http://web.amnesty.org/library/Index/ENGEUR290012004?open&of=ENG-364
+http://web.amnesty.org/library/Index/ENGEUR290012004?open&of=ENG-385
+http://web.amnesty.org/library/Index/ENGEUR380012004?open&of=ENG-2U3
+http://web.amnesty.org/library/Index/ENGEUR380012004?open&of=ENG-PRT
+http://web.amnesty.org/library/Index/ENGEUR460291996?open&of=ENG-381
+http://web.amnesty.org/library/Index/ENGEUR720012000?open&of=ENG-SVK
+http://web.amnesty.org/library/Index/ENGIOR610122005
+http://web.amnesty.org/library/Index/ENGIOR610122005?open&of=ENG-369
+http://web.amnesty.org/library/Index/ENGIOR800112003?open&of=ENG-398
+http://web.amnesty.org/library/Index/ENGMDE180142001?open&of=ENG-2MD
+http://web.amnesty.org/library/Index/ENGMDE180142001?open&of=ENG-360
+http://web.amnesty.org/library/Index/ENGMDE180142001?open&of=ENG-LBN
+http://web.amnesty.org/library/Index/ENGMDE300022003?open&of=ENG-TUN
+http://web.amnesty.org/library/Index/ENGMDE300042003?open&of=ENG-TUN
+http://web.amnesty.org/library/index/engasa410182003
+http://web.amnesty.org/library/index/engeur450142003
+http://web.amnesty.org/report2003/message-eng
+http://web.amnesty.org/report2005/message-eng
+http://web.amnesty.org/web/ar2001.nsf/webeurcountries/UZBEKISTAN?OpenDocument
+http://web.amnesty.org/web/ar2002.nsf/asa/myanmar?Open
+http://web.apu.ac.uk/webteam/webtemplates/points.phtml
+http://web.balliol.ox.ac.uk/library/jowett/jwt-2h.asp
+http://web.clas.ufl.edu/users/rhatch/pages/01-Courses/current-courses/SCI-SEX-RACE-SP-2002-now.htm
+http://web.clas.ufl.edu/users/rhatch/pages/03-Sci-Rev/SCI-REV-Home/resource-ref-read/chief-systems/boulliau-prob/06rp-b-planet4.htm
+http://web.clas.ufl.edu/users/rhatch/pages/05-SecondaryTeaching/NSF-PLANS/2-3_SCIENCE.htm
+http://web.csp.edu/cspupdate/june2003/060603.html
+http://web.esf.edu/calendar.asp
+http://web.gc.cuny.edu/Computerscience/about_program/matricul_students.html
+http://web.gc.cuny.edu/Eusc/activities/paper/davidson.htm
+http://web.gc.cuny.edu/Eusc/activities/paper/godal.htm
+http://web.gc.cuny.edu/dept/class/rhetfig.htm
+http://web.haystack.mit.edu/mark5/newsletter1.htm
+http://web.idrc.ca/en/ev-27446-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-27498-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-28818-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-28829-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-29525-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-30200-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-31158-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-43013-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-43147-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-67615-201-1-DO_TOPIC.html
+http://web.idrc.ca/en/ev-68397-201-1-DO_TOPIC.html
+http://web.idrc.ca/es/ev-27498-201-1-DO_TOPIC.html
+http://web.idrc.ca/es/ev-28818-201-1-DO_TOPIC.html
+http://web.idrc.ca/es/ev-29525-201-1-DO_TOPIC.html
+http://web.idrc.ca/es/ev-43013-201-1-DO_TOPIC.html
+http://web.indstate.edu/ctl/tips/tip1_16.html
+http://web.israelinsider.com/Articles/AntiSemi/4854.htm
+http://web.israelinsider.com/Articles/Politics/3412.htm
+http://web.israelinsider.com/views/4938.htm
+http://web.lemoyne.edu/~giunta/lavoisier.html
+http://web.lemoyne.edu/~hevern/nr-theorists-mno.html
+http://web.library.uiuc.edu/ahx/uaccard/UAControlCard.asp?RG=15&SG=35&RS=54
+http://web.mala.bc.ca/black/amrc/Research/Papers/GASCOIGN.HTM
+http://web.media.mit.edu/~nitin/NomadicRadio/SpatialAudio.htm
+http://web.mid-day.com/columns/shanta_gokhle/2004/october/95585.htm
+http://web.mid-day.com/news/world/2005/february/102711.htm
+http://web.missouri.edu/~servlrn/article_reaching_out.htm
+http://web.mit.edu/21fms/www/faculty/henry3/Intro-Katz.html
+http://web.mit.edu/21fms/www/faculty/henry3/dennis.html
+http://web.mit.edu/21fms/www/faculty/henry3/profjenkins.html
+http://web.mit.edu/adorai/timetraveler/
+http://web.mit.edu/annualreports/pres01/03.00.html
+http://web.mit.edu/annualreports/pres01/13.20.html
+http://web.mit.edu/answers/xess/xess_functions.html
+http://web.mit.edu/arts/announcements/prs/2002/0206_ams.html
+http://web.mit.edu/bcs/newsevents/bcsnews.shtml
+http://web.mit.edu/biology/www/facultyareas/facresearch/tonegawa.shtml
+http://web.mit.edu/biology/www/undergrad/instauth.html
+http://web.mit.edu/canes/symposia/ngnp/home.html
+http://web.mit.edu/career/www/guide/interviews.html
+http://web.mit.edu/cms/betweenthelines/summaries.html
+http://web.mit.edu/comm-forum/forums/art_of_prime_time.html
+http://web.mit.edu/comm-forum/papers/alfrey.html
+http://web.mit.edu/comm-forum/papers/butler.html
+http://web.mit.edu/committees/rotc/rotchist.html
+http://web.mit.edu/committees/sll/f6.html
+http://web.mit.edu/cultureshock/fa2004/cutting.htm
+http://web.mit.edu/e-club/hadzima/do-you-still-have-the-right-people.html
+http://web.mit.edu/e-club/hadzima/outside-directors.html
+http://web.mit.edu/finances/services-available.html
+http://web.mit.edu/first-east/www/useful.1e.info.html
+http://web.mit.edu/gtmarx/www/whenworks.html
+http://web.mit.edu/hr/benefits/health.html
+http://web.mit.edu/hr/policy/4-5.html
+http://web.mit.edu/icl/icl/ultra_rep_i_1_1.html
+http://web.mit.edu/ist/topics/athena/differences.html
+http://web.mit.edu/ist/topics/training/registration.html
+http://web.mit.edu/ist/topics/windows/server/essential_tasks.html
+http://web.mit.edu/kirason/www/archives/20040628.html
+http://web.mit.edu/krugman/www/
+http://web.mit.edu/krugman/www/euronote.html
+http://web.mit.edu/lking/www/writing/design.html
+http://web.mit.edu/m-i-t/articles/alfrey.html
+http://web.mit.edu/mitccc/WhatsYourStory/testrush.htm
+http://web.mit.edu/mitmsa/www/NewSite/libstuff/nasr/nasrspeech1.html
+http://web.mit.edu/newsoffice/1999/artery-0421.html
+http://web.mit.edu/newsoffice/1999/hood-0609.html
+http://web.mit.edu/newsoffice/2000/cmvemail-0920.html
+http://web.mit.edu/newsoffice/2001/sebbar-1205.html
+http://web.mit.edu/newsoffice/2002/horvitz-1023.html
+http://web.mit.edu/newsoffice/2002/horvitz-speech.html
+http://web.mit.edu/newsoffice/2005/matter.html
+http://web.mit.edu/newsoffice/2005/melatonin.html
+http://web.mit.edu/newsoffice/nr/2003/mindell/
+http://web.mit.edu/newsoffice/tt/1999/dec15/pay.html
+http://web.mit.edu/nh4/www/housing_rules.html
+http://web.mit.edu/om_p/www/hiking.html
+http://web.mit.edu/ombud/documents/drafting_a_letter.html
+http://web.mit.edu/orientation/fpop/dme.html
+http://web.mit.edu/pgbovine/www/quicktips.htm
+http://web.mit.edu/president/communications/com04.html
+http://web.mit.edu/rocsa/www/dontyouhear/
+http://web.mit.edu/scholars/healthinsopts.html
+http://web.mit.edu/scholarships/details/beinecke.htm
+http://web.mit.edu/security/www/mit-mostly/bcmt/drduty.html
+http://web.mit.edu/slp/finances/outside-accounts.html
+http://web.mit.edu/sma/students/faq.htm
+http://web.mit.edu/sma/students/programmes/ce.htm
+http://web.mit.edu/ssp/fall02/michel.htm
+http://web.mit.edu/storborg/ddf/design.html
+http://web.mit.edu/thistle/www/v9/9.05/7backyard.html
+http://web.mit.edu/tll/published/efforts.html
+http://web.mit.edu/urbanupgrading/urbanenvironment/issues/how-much-poverty.html
+http://web.mit.edu/urop/preuropapp.html
+http://web.mit.edu/urop/speaking.html
+http://web.mit.edu/womens-studies/www/new/writingPrize/lk97.html
+http://web.mit.edu/womens-studies/www/writingPrize/lk97.html
+http://web.mit.edu/zoz/www/academics/
+http://web.nmsu.edu/~dboje/TDgreenlinks.html
+http://web.onetel.net.uk/~gnudawn/johnny/leaving.html
+http://web.onetel.net.uk/~gnudawn/johnny/visitors.html
+http://web.onetel.net.uk/~zakalwe/imb/notes.htm
+http://web.pitas.com/kudaranai/kenzhu.html
+http://web.pref.hyogo.jp/syoubou/english/dmh1.html
+http://web.presby.edu/~jtbell/usenet/newgroup/how-submit.faq
+http://web.princeton.edu/sites/career/Alumni/job_search.html
+http://web.princeton.edu/sites/chapel/Sermon%20Files/2004_sermons/091204.htm
+http://web.princeton.edu/sites/ehs/heatstress/heatstress.htm
+http://web.princeton.edu/sites/ehs/pmguide/
+http://web.princeton.edu/sites/politics/grad/gradcurric.shtm
+http://web.psych.ualberta.ca/~iwinship/vision/mst_path.html
+http://web.realitytvworld.com/theamazingracesucks.com/tar4ep6.shtml
+http://web.singnet.com.sg/~chlim/indies.html
+http://web.singnet.com.sg/~tay06/
+http://web.singnet.com.sg/~tt71163/
+http://web.stclair.k12.il.us/splashd/flowrexp.htm
+http://web.stlawu.edu/career/vivien.htm
+http://web.stlawu.edu/gallery/exhibit-f03.htm
+http://web.stlawu.edu/resources/positions/administrative/fy%202003-2004/hshldmgr0605.htm
+http://web.stlawu.edu/scarlet/1-21-02.htm
+http://web.stlawu.edu/scarlet/10-18-04.htm
+http://web.syr.edu/~jryan/infopro/statpub.html
+http://web.syr.edu/~sndrake/hentoff.htm
+http://web.takebackthemedia.com/geeklog/public_html/article.php?story=20040731134333869
+http://web.tampabay.rr.com/mspusf/PearlHarbor
+http://web.tampabay.rr.com/mspusf/pearlharbor.html
+http://web.tiscali.it/sv2001/cormo_abstract/bull4_docs/Bregnballe%20&%20Asferg.htm
+http://web.twinisles.com/golive.html
+http://web.ubc.ca/okanagan/education/degreeplanning.html
+http://web.uccs.edu/history/student%20presentations/alivia/
+http://web.uct.ac.za/depts/maths/ibc98/tours.htm
+http://web.uflib.ufl.edu/cm/business/cases/commercial.htm
+http://web.uflib.ufl.edu/pers/training/office_ergonomics.htm
+http://web.ukonline.co.uk/bsac/
+http://web.ukonline.co.uk/chapmani/cretes.htm
+http://web.ukonline.co.uk/cj.tolley/nch-william-ockham.htm
+http://web.ukonline.co.uk/heroese/mypage3zz.htm
+http://web.ukonline.co.uk/webwise/spinneret/circuln/blood.htm
+http://web.utk.edu/~hwallac2/weblog/
+http://web.utk.edu/~impact/languagearts.html
+http://web.uvic.ca/ablo/awdbusbgrnd.html
+http://web.uvic.ca/strategicplan/context.html
+http://web.worldbank.org/WBSITE/EXTERNAL/COUNTRIES/LACEXT/COSTARICAEXTN/0,,contentMDK:20252791~pagePK:141137~piPK:141127~theSitePK:295413,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/COUNTRIES/WBEUROPEEXTN/BELGIUMEXTN/0,,contentMDK:20234975~hlPK:468472~menuPK:486918~pagePK:141137~piPK:217854~theSitePK:387730,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20025027~menuPK:34472~pagePK:34370~piPK:34424~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20046707~menuPK:34457~pagePK:34370~piPK:34424~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20114354~menuPK:34463~pagePK:34370~piPK:34424~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20276925~menuPK:34475~pagePK:34370~piPK:34424~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20282823~menuPK:34457~pagePK:34370~piPK:34424~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20390880~menuPK:34473~pagePK:34370~piPK:42770~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20477490~pagePK:64257043~piPK:437376~theSitePK:4607,00.html
+http://web.worldbank.org/WBSITE/EXTERNAL/NEWS/0,,contentMDK:20511866~pagePK:64257043~piPK:437376~theSitePK:4607,00.html
+http://web1.msue.msu.edu/msue/imp/modtd/33420042.html
+http://web1.tch.harvard.edu/cfapps/CHdeptPagePressDisplay.cfm?Dept=Press%20Room&PageNbr=49&ParentPage=1
+http://web2.airmail.net/ktrig246/out_of_cave/mf.html
+http://web2.concordia.ca/financialaid/planning/
+http://web2.gov.mb.ca/bills/sess/b017e.php
+http://web2.gov.mb.ca/laws/statutes/2003/c00703e.php
+http://web2.gov.mb.ca/laws/statutes/ccsm/c240e.php
+http://web2.gov.mb.ca/laws/statutes/ccsm/l010e.php
+http://web2.gov.mb.ca/laws/statutes/private/c14190e.php
+http://web2.unt.edu/news/print.cfm?story=9228
+http://web2.unt.edu/news/story.cfm?story=9228
+http://web2.westsiderentals.com/nwsrc/tl-signup.shtml
+http://web5.uottawa.ca/admingov/met-e.php?id=12-2
+http://web73.enux.dk/index.php?id=37
+http://webapp.icpsr.umich.edu/cocoon/DDI/SAMPLES/07728.xml?part=2
+http://webapps.acs.carleton.edu/events/commencement/05speeches/stigler/
+http://webapps.acs.carleton.edu/voice/PDFStory.php?id=67&type=features
+http://webapps.acs.carleton.edu/voice/features.php3?id=67
+http://webapps.cc.umanitoba.ca/calendar04/faculties/arts/labour/
+http://webapps.cc.umanitoba.ca/calendar05/faculties/arts/labour/
+http://webapps.cc.umanitoba.ca/calendar06/faculties/arts/labour/
+http://webapps.cc.umanitoba.ca/regguide04/faculties/phys_ed/section2.asp
+http://webapps.yorku.ca/nonacademicpostings/complete.jsp?postingnumber=4270
+http://webcenter.health.webmd.netscape.com/hw/hypertension/hw227495.asp
+http://webcenter.health.webmd.netscape.com/hw/raising_a_family/nord976.asp
+http://webcenters.compuserve.com/compuserve/love/advice.jsp
+http://webcenters.compuserve.com/compuserve/love/confession.jsp?confession=625
+http://webcentral.uc.edu/IPO/index.cfm?fuseaction=home.conflict
+http://webclipart.about.com/
+http://webclipart.about.com/library/hvarious/blcinco12.htm
+http://webclipart.miningco.com/library/Stpats/blstbar1.htm
+http://webclipart.miningco.com/library/Stpats/blstbar2.htm
+http://webdesign.about.com/od/charactersets/a/aa081000a.htm
+http://webdesign.informit.com/title/013146745X
+http://webdiary.smh.com.au/archives/margo_kingston/000663.html
+http://webdiary.smh.com.au/archives/margo_kingston/001204.html
+http://webdiary.smh.com.au/archives/margo_kingston/001210.html
+http://webdirectory.natlib.govt.nz/dir/en/nz/business-and-economy/transport/
+http://webdocs.caspur.it/ibm/pssp-3.5/html/diag/am0dgmst02.html
+http://weber.ucsd.edu/~dkjordan/chin/hbnames-u.html
+http://webexhibits.org/butter/history-creamery.html
+http://webexhibits.org/calendars/calendar-roman.html
+http://webexhibits.org/daylightsaving/c.html
+http://webexhibits.org/daylightsaving/franklin3.html
+http://webexhibits.org/daylightsaving/g.html
+http://webexhibits.org/hockneyoptics/post/falcograves4.html
+http://webeye.ophth.uiowa.edu/dept/Websites/eyeres.htm
+http://webeye.ophth.uiowa.edu/dept/websites/eyeres.htm
+http://webguide.webmagic.com/Hair.com/Hair_Care/Styles_and_Salons/
+http://webhome.idirect.com/~born2luv/FRUGAL.HTML
+http://webhome.idirect.com/~born2luv/expert.html
+http://webhome.idirect.com/~readon/lies.html
+http://webjay.org/about
+http://webjcli.ncl.ac.uk/2003/issue5/bulvinaite5.html
+http://webjcli.ncl.ac.uk/articles3/clements3.html
+http://weblog.blogads.com/comments/929_0_1_0_C/
+http://weblog.burningbird.net/archives/2004/12/03/kitchen-was-hacked/
+http://weblog.burningbird.net/archives/2005/06/09/what-we-hear/
+http://weblog.burningbird.net/archives/2005/06/13/the-playing-field/
+http://weblog.burningbird.net/fires/000880.htm
+http://weblog.burningbird.net/fires/001373.htm
+http://weblog.cemper.com/
+http://weblog.delacour.net/
+http://weblog.delacour.net/archives/2003/03/telepathy.php
+http://weblog.delacour.net/archives/2003/07/japanese_text.php
+http://weblog.delacour.net/archives/2003/08/you_can_put_your_god_over_there.php
+http://weblog.delacour.net/archives/2003/12/beauty_sadness_and_existential_choice.php
+http://weblog.delacour.net/archives/2005/01/something_i_also_believe.php
+http://weblog.flora.ca/article.php3?story_id=112
+http://weblog.flora.ca/article.php3?story_id=112&submit=print
+http://weblog.fortnow.com/2005/06/growth-causes-shrinking.html
+http://weblog.greenpeace.org/wto/archives/2003_08.html
+http://weblog.halmacomber.com/2003_09_21_archive.html
+http://weblog.halmacomber.com/2004_08_08_archive.html
+http://weblog.herald.com/column/davebarry/archives/015899.html
+http://weblog.infoworld.com/thestoragenetwork/archives/2005_06.html
+http://weblog.infoworld.com/udell/stories/2002/12/11/librarylookup.html
+http://weblog.juima.org/
+http://weblog.physorg.com/news2187.html
+http://weblog.siliconvalley.com/column/dangillmor/archives/2003_01.shtml
+http://weblog.sinteur.com/index.php?p=8595
+http://weblog.soulhuntre.com/
+http://weblogs.asp.net/cazzu/archive/2004/02/13/XseIntro.aspx
+http://weblogs.asp.net/datagridgirl/
+http://weblogs.asp.net/jamauss/archive/2004/04/22/118718.aspx
+http://weblogs.asp.net/jgalloway/archive/2004/06/23/163393.aspx
+http://weblogs.asp.net/justin_rogers/archive/2004/04/12/111892.aspx
+http://weblogs.asp.net/larryosterman/archive/2004/10/20/245221.aspx
+http://weblogs.asp.net/mikechampion/archive/2005/01/28/362395.aspx
+http://weblogs.asp.net/mikhailarkhipov/archive/2004/05/21/136532.aspx
+http://weblogs.asp.net/oldnewthing/archive/2004/07/06/173935.aspx
+http://weblogs.asp.net/oldnewthing/archive/2004/07/28/199589.aspx
+http://weblogs.asp.net/scottgu/
+http://weblogs.asp.net/stevencohn/articles/62551.aspx
+http://weblogs.asp.net/vga/archive/2004/11/08/CppAndResponseWrite.aspx
+http://weblogs.asp.net/wallym/
+http://weblogs.cs.cornell.edu/AllThingsDistributed/archives/000107.html
+http://weblogs.csmonitor.com/my_american_experience/
+http://weblogs.design.fh-aachen.de/owrede/publikationen/weblogs_and_discourse
+http://weblogs.java.net/blog/chet/archive/2005/06/
+http://weblogs.java.net/blog/editors/archives/2005/03/keeping_custome.html
+http://weblogs.java.net/blog/hansmuller/archive/2005/06/if_youve_got_a.html
+http://weblogs.java.net/blog/invalidname/archive/2004/10/why_mac_develop.html
+http://weblogs.java.net/blog/invalidname/archive/2004/10/why_mac_develop_1.html
+http://weblogs.java.net/blog/kirillcool/archive/2005/01/
+http://weblogs.java.net/blog/tball/archive/2004/10/the_problem_wit_1.html
+http://weblogs.java.net/jag/
+http://weblogs.java.net/pub/wlg/223
+http://weblogs.jupitermedia.com/meckler/
+http://weblogs.mozillazine.org/asa/archives/004796.html
+http://weblogs.mozillazine.org/asa/archives/007532.html
+http://weblogs.mozillazine.org/asa/archives/008092.html
+http://weblogs.mozillazine.org/asa/archives/008121.html
+http://weblogs.mozillazine.org/asa/archives/008389.html
+http://weblogs.mozillazine.org/ben/archives/2004_04.html
+http://weblogs.mozillazine.org/djst/archives/003892.html
+http://weblogs.mozillazine.org/gerv/archives/007562.html
+http://weblogs.mozillazine.org/hyatt/
+http://weblogs.mozillazine.org/josh/archives/2005/04/
+http://weblogs.mozillazine.org/mt/comment.cgi?entry_id=8121
+http://weblogs.mozillazine.org/pinkerton/archives/2004_07.html
+http://weblogs.mozillazine.org/roadmap/archives/005632.html
+http://weblogs.mozillazine.org/zach/archives/008088.html
+http://weblogs.oxegen.us/oxegen/archive/2004/07/28/3613.aspx
+http://weblogs.swarthmore.edu/burke/
+http://weblogs.swarthmore.edu/burke/?p=27
+http://weblogs.uncc.edu/blog/jwedgeco/2004/06
+http://weblogs.us/
+http://weblogs.variety.com/eeg_news/2004/09/mobile_game_bat.html
+http://weblogs.variety.com/outside_the_box/
+http://webmake.taint.org/doc/making.html
+http://webmaster.iu.edu/account_info/iubacinfo.shtml
+http://webmasteredge.smesource.com/webmasters/resources/S1.cfm/MainCatID/3/S1ID/13
+http://webmedbooks.com/default.aspx
+http://weboflife.nasa.gov/faq.htm
+http://webpages.charter.net/bowlfit/ask/
+http://webpages.charter.net/chalosi/pastorandmary.html
+http://webpages.charter.net/dnance/concpark/concpark-abt.htm
+http://webpages.charter.net/greatwesterndragon/
+http://webpages.charter.net/mad_prophet/articles/poli/majrule.html
+http://webpages.charter.net/mamamojo/pregna~1.html
+http://webpages.charter.net/maxflack/CHRISTMAS%20CAROL.htm
+http://webpages.csus.edu/~sac23835/Imax%20page.htm
+http://webquest.org/bdodge/2002_09_01_archive.htm
+http://webreference.com/dlab/
+http://webreview.com/topics/cpp/compilers/
+http://webs.wichita.edu/dt/beta.asp?u=humanr&p=/employment/recruitment/temp_instructions/
+http://webserv.chatsystems.com/~doswell/guns.html
+http://webservices.sys-con.com/read/100687.htm
+http://webservices.sys-con.com/read/104611.htm
+http://webservices.sys-con.com/read/39342.htm
+http://webservices.sys-con.com/read/49164.htm
+http://webservices.sys-con.com/read/96599.htm
+http://webservices.xml.com/pub/a/ws/2001/10/17/slippery-soap.html
+http://webservices.xml.com/pub/a/ws/2002/10/23/taglines.html
+http://webservices.xml.com/pub/a/ws/2004/04/21/protocols.html
+http://webshots.com.com/Canon_EOS_1Ds_Digital_SLR/4510-6501_7-20610303.html
+http://website.education.wisc.edu/rla/ADSITE/linkpgs/task3.htm
+http://website.lineone.net/~eshp/grammar.htm
+http://website.lineone.net/~florenceshinn/game.htm
+http://website.lineone.net/~galaxypix/
+http://website.lineone.net/~gambiagts/News18.htm
+http://websphere.sys-con.com/read/47217.htm
+http://webstandardsgroup.org/features/
+http://webstandardsgroup.org/features/andy-budd.cfm
+http://webstandardsgroup.org/features/nick-finck.cfm
+http://webstandardsgroup.org/features/russ-weakley.cfm
+http://webster.commnet.edu/grammar/concise.htm
+http://webster.commnet.edu/grammar/numbers.htm
+http://webster.commnet.edu/mla/notes.shtml
+http://webster.commnet.edu/slat/workshop_2004.htm
+http://webster.commnet.edu/writing/symbols.htm
+http://webster.cs.ucr.edu/AsmTools/HLA/HLADoc/HTMLDoc/WhatIsHLA.html
+http://webster.cs.ucr.edu/Page_win32/IczelionTuts/tut3.html
+http://webstore.longwood.com/winxp/LwSe/LwSeEULA.html
+http://websvcs.itcs.umich.edu/jobnet/job_posting.php?postingnumber=030859
+http://websvcs.itcs.umich.edu/jobnet/job_posting_printable.php?postingnumber=030859
+http://webtips.dan.info/new-window.html
+http://webvision.med.utah.edu/space_perception.html
+http://webword.com/moving/death.html
+http://webwynk.net/jrb/
+http://wedding.jamesoff.net/blog/
+http://weekendamerica.publicradio.org/programs/index_20040814.html
+http://weekly.ahram.org.eg/1999/441/re3.htm
+http://weekly.ahram.org.eg/2000/468/bk4_468.htm
+http://weekly.ahram.org.eg/2001/565/fe1.htm
+http://weekly.ahram.org.eg/2003/642/feature.htm
+http://weekly.ahram.org.eg/2003/646/eg1.htm
+http://weekly.ahram.org.eg/2003/665/pe2.htm
+http://weekly.ahram.org.eg/2004/700/cu1.htm
+http://weekly.ahram.org.eg/2004/707/letters.htm
+http://weekly.ahram.org.eg/2005/724/profile.htm
+http://weekly.ahram.org.eg/2005/742/re1.htm
+http://weekly.ahram.org.eg/2005/743/op11.htm
+http://weekly.ahram.org.eg/2005/747/cu1.htm
+http://weekly.ahram.org.eg/2005/747/eg4.htm
+http://weeklywire.com/ww/04-10-00/austin_xtra_feature.html
+http://weeklywire.com/ww/06-01-99/boston_movies_1.html
+http://weeklywire.com/ww/10-26-98/austin_music_feature3.html
+http://weeklywire.com/ww/11-22-99/nash_ol-online.html
+http://weewave.mer.utexas.edu/DPN_files/courses/FabLab/Fab_Lab_Manual/TROUBLE.html
+http://weez.oyzon.com/index.php?/weezblogtemplates/2003/12/
+http://wegoweb.net/schools/edfund.html
+http://weightloss.about.com/cs/moretips/a/aa021301a.htm
+http://welcome.topuertorico.org/economy.shtml
+http://welfarewarriors.org/W03--youth.dis.gay.htm
+http://wells.thefreelibrary.com/Time-Machine/1-7
+http://welshhumanshields.co.uk/blog/?postid=26
+http://wendy.seltzer.org/blog/archives/2004/11/21/perfect_10_takes_aim_at_google.html
+http://wesnerm.blogs.com/net_undocumented/2004/09/net_vs_native_p.html
+http://wesnerm.blogs.com/net_undocumented/2005/01/
+http://west-yorkshire.england.designerz.com/west-yorkshire-keighley.php
+http://westbynorthwest.org/fall01/farmwork.shtml
+http://westciv.typepad.com/dog_or_higher/2004/10/free_trade_agre_1.html
+http://westernchanfellowship.org/dharmatalks/ncf22_InTheSpiritOfChan.html
+http://westernjew.blogspot.com/
+http://westernstandard.blogs.com/shotgun/
+http://westernstandard.blogs.com/shotgun/2004/11/how_the_left_se.html
+http://wfhummel.cnchost.com/governmentspending.html
+http://wfrv.com/topstories/local_story_053193655.html
+http://wfrv.com/trouble/recalls_story_027171635.html
+http://wgfl.westminster.gov.uk/showcase/
+http://wgntv.trb.com/business/yourmoney/sns-yourmoney-0102complain,0,6739139.story?coll=wgntv-default-nav
+http://wgntv.trb.com/business/yourmoney/sns-yourmoney-0822value,0,237302.story
+http://wgntv.trb.com/entertainment/wbnetwork/stv-charmed-pkgepisodes1.special
+http://wgntv.trb.com/entertainment/wbnetwork/stv-smallville-pkgcast.special
+http://wgordon.web.wesleyan.edu/dolls/american/individual/fuzoku/
+http://wham.canoe.ca/gcn/features/2005/03/22/969110.html
+http://whatcomshellfish.wsu.edu/classification.htm
+http://whatdoiknow.org/
+http://whatdoiknow.org/archives/000273.shtml
+http://whateveritisimagainstit.blogspot.com/2005_01_01_whateveritisimagainstit_archive.html
+http://whatinvestment.money.msn.co.uk/msnwi153.htm
+http://whatis.techtarget.com/definition/0,,sid9_gci1002556,00.html
+http://whatscookingamerica.net/OliveOil.htm
+http://whc.unesco.org/archive/repcom78.htm
+http://whc.unesco.org/archive/repcom84.htm
+http://whc.unesco.org/en/list/611
+http://whc.unesco.org/en/list/623
+http://whc.unesco.org/en/list/781
+http://whedonesque.com/?comments=5877
+http://wheels.hothost.tv/bare_foot_teen_girl.html
+http://wheresmyplan.blog-city.com/
+http://whinecoloredsea.blogspot.com/
+http://whispy.com/positive_energy.htm
+http://whitefairblessed.blogspot.com/2005_02_13_whitefairblessed_archive.html
+http://whitemountainart.com/bibliography.htm
+http://whitepaper.governmententerprise.com/cmpgovernmententerprise/search/browse/1474/1474.jsp
+http://whitepaper.informationweek.com/cmpinformationweek/search/keyword/Security%20Research/CMPINFORMATIONWEEK/Security%20Research
+http://whitepaper.informationweek.com/cmpinformationweek/search/keyword/security%20research/CMPINFORMATIONWEEK/security%20research
+http://whitepaper.informationweek.com/cmpinformationweek/search/tabsortkeyword/research/Security+Research/1/2/index.jsp
+http://whitepaper.networkcomputing.com/cmpnetworkcomputing/search/keyword/security%20researchCMPNETWORKCOMPUTING/security%20research
+http://whitepaper.networkcomputing.com/cmpnetworkcomputing/search/keyword/security+research/CMPNETWORKCOMPUTING/security+research
+http://whitepaper.optimizemag.com/cmpoptimizemag/search/browse/1390/1390.jsp
+http://whitepaper.optimizemag.com/cmpoptimizemag/search/browse/1474/1474.jsp
+http://whitepaper.sdmagazine.com/cmpsdmagazine/search/browse/1474/1474.jsp
+http://whitepaper.securitypipeline.com/cmpsecuritypline/search/browse/1620/1620.jsp
+http://whitepaper.techweb.com/cmptechweb/MainServlet?ksAction=privacy
+http://whitepaper.techweb.com/cmptechweb/search/tabsortkeyword/research/mobile+wireless/1/6/index.jsp
+http://whitepapers.frontlinetoday.com/olist/Networking-Hardware.html
+http://whitepapers.frontlinetoday.com/olist/Wireless-LAN.html
+http://whiterose.saddleworth.net/news05.htm
+http://whiterose.saddleworth.net/news22.htm
+http://whitewolf.newcastle.edu.au/words/authors/H/HarteBret/prose/roaringcamp/nightwingdam.html
+http://whitewolf.newcastle.edu.au/words/authors/L/LawsonHenry/prose/sendroundthehat/shearerdream.html
+http://whitman.syr.edu/prospective/army/comptroller_course.asp
+http://whitman.syr.edu/prospective/army/resource.asp
+http://wholesomebalance.com/General_Balance.html
+http://whoswho-teachers.com/3attitudeANDsopinions/performance.aspx
+http://whoviating.blogspot.com/2005/05/exception-to-rule.html
+http://whtq.com/common/inside/visitor_agreement.html
+http://whyaretheydead.net/childabuse/
+http://whyfiles.org/021climate/ringers.html
+http://whyfiles.org/102spareparts/4.html
+http://whyfiles.org/114music/4.html
+http://whyquit.com/whyquit/A_NRT_JAMA.html
+http://whyslopes.com/complex.html
+http://whyslopes.com/etc/CalculusAndBeyond/ch22.html
+http://whyslopes.com/etc/ComplexNumbers/complex.html
+http://whyslopes.com/etc/MathCurriculumNotes/ch11L.html
+http://whyslopes.com/etc/ThreeSkillsForAlgebra/ch26.html
+http://whyslopes.com/volume1a/ch19.html
+http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
+http://wiccanet.net/wicca/1734/index2.shtml
+http://wicip.uwplatt.edu/green/ci/monroe/balloon/about.htm
+http://wickedwife.diaryland.com/convent.html
+http://wid.ndia.org/archive/2003november.cfm
+http://widemouthmason.com/dotnet/?page=getinterview&interviewid=3
+http://wifinetnews.com/
+http://wiki.asiasource.tacticaltech.org/cgi-bin/wiki.pl?FLOSSforEducationandSchools
+http://wiki.atitd.net/tale1/Summary_Of_New_Tests_Ideas
+http://wiki.blender.org/bin/view.pl/Blenderdev/CCGSubSurf
+http://wiki.gb.nrao.edu/bin/view/Data/FitsQueryLanguage
+http://wiki.gb.nrao.edu/bin/view/Mechanical/WebHome
+http://wiki.gb.nrao.edu/bin/view/Projects/ChangeControlCommittee
+http://wiki.gb.nrao.edu/bin/view/Software/ModificationRequest11C304
+http://wiki.gb.nrao.edu/bin/view/Software/WebHome?skin=print&sortcol=0&table=2&up=0
+http://wiki.gb.nrao.edu/bin/view/Software/WebHome?sortcol=0&table=2&up=0
+http://wiki.gb.nrao.edu/bin/view/Software/WebHome?sortcol=0&table=2&up=1
+http://wiki.java.net/bin/view/Javadesktop/SummerOfCode2005
+http://wiki.mozilla.org/wiki/Help:Renaming_(moving)_a_page
+http://wiki.tcl.tk/3731
+http://wikitravel.org/en/Cape_Town
+http://wikitravel.org/en/article/Minot
+http://wilber.shambhala.com/html/books/kosmos/excerptB/intro.cfm
+http://wildcat.arizona.edu/papers/90/147/13_2_m.html
+http://wildcat.arizona.edu/papers/95/61/03_3.html
+http://wildevogel.blogspot.com/
+http://wildlife.state.co.us/fishing/fishcond.asp
+http://wildlifeonlesvos.org/newsletters/October2004.html
+http://wildmonk.net/
+http://williambragg.com/wordpress/index.php?p=74
+http://williamcalvin.com/1990s/1997DeaconBkRevNYT.htm
+http://williamcalvin.com/1990s/1998EvolConscNoSlides.htm
+http://williamcalvin.com/BrainForAllSeasons/Nairobi.htm
+http://williamgibsonboard.com/eve/ubb.x/a/tpc/f/8606097971/m/475105953/p/6
+http://williamsullivanadvertising.com/radioreality.html
+http://williamwatkin.blogspot.com/
+http://willwilkinson.net/flybottle/
+http://willwilkinson.net/flybottle/archives/2005/06/bentham_on_the.html
+http://wilsonhellie.typepad.com/
+http://wilsonhellie.typepad.com/for_the_record/racism_and_other_isms/
+http://wilsonhellie.typepad.com/for_the_record/the_environment/
+http://win-edge.com/
+http://win.niddk.nih.gov/notes/fal_wi96/Pharmoco.htm
+http://win.niddk.nih.gov/notes/spring00/toppage2.htm
+http://win.niddk.nih.gov/publications/for_life.htm
+http://win.niddk.nih.gov/publications/myths.htm
+http://win.niddk.nih.gov/publications/physical.htm
+http://win2000mag.com/Articles/Index.cfm?ArticleID=8288
+http://wincent.com/a/knowledge-base/archives/2004/11/costs_of_runnin.php
+http://windeis.anl.gov/faq/index.cfm
+http://windeis.anl.gov/faq/index.cfm?printversion=true
+http://windingroad.typepad.com/
+http://windingroad.typepad.com/columns/
+http://windowglass.blogspot.com/
+http://windowmanager.blogspot.com/archives/2004_04_11_windowmanager_archive.html
+http://windowsmarketplace.com/
+http://windowsmarketplace.com/default.aspx
+http://windowsmarketplace.com/results.aspx?bCatID=442&av=14-697
+http://windsofchange.net/archives/005499.php
+http://windsormedia.blogs.com/lipsticking/2004/10/smart_man_onlin.html
+http://windturbine-analysis.com/index-build.htm
+http://wings.avkids.com/Careers/golf.html
+http://wings.avkids.com/Curriculums/Nature/nature_links.html
+http://winosandfoodies.typepad.com/my_weblog/2005/02/imbb12_taboo_or.html
+http://wintellect.com/WEBLOGS/wintellect/archive/2004/12/23.aspx
+http://wired-vig.wired.com/news/business/0,1367,39526,00.html?tw=wn_story_related
+http://wired.com/wired/archive/2.12/linklater.html
+http://wirednews.com/wired/archive/5.01/ffsupertoys_pr.html
+http://wireless.fcc.gov/services/amateur/callsigns/vanity/faq.html
+http://wireless.ittoolbox.com/nav/t.asp?t=399&p=399&h1=399
+http://wireless.sys-con.com/read/49013.htm
+http://wirelessreview.com/ar/wireless_nice_quiet_young/
+http://wirelessreview.com/mag/wireless_music_games_text/
+http://wireservice.wired.com/wired/story.asp?section=Sports&storyId=1053050
+http://wiscinfo.doit.wisc.edu/arboretum/arbnews/natnotes2004/Winter%20Water%20Walk,%20January%2011,%202004.htm
+http://wise-obs.tau.ac.il/judaism/jewish_astro.html
+http://wisechoiceeducationalservices.com/article2.htm
+http://wiseli.engr.wisc.edu/office_library/WISE.htm
+http://wisplants.uwsp.edu/BotanyNews.html
+http://wistechnology.com/article.php?id=1111
+http://wistechnology.com/article.php?id=1538
+http://witchesblood.blogspot.com/2005_04_01_witchesblood_archive.html
+http://witchinhour.blogspot.com/2004_04_01_witchinhour_archive.html
+http://wizbangblog.com/archives/006156.php
+http://wizmo.blogspot.com/2005/03/ah-quiet-times.html
+http://wlapwww.gov.bc.ca/wat/gws/gwbc/C1011_Thompson_Plateau.html
+http://wma.pvt.k12.ma.us/pages/news.cfm
+http://wmarr9.home.comcast.net/wap.htm
+http://wneurope.com/
+http://womanlabor.blogspot.com/
+http://womansworld.atalink.co.uk/articles/finances/316.html
+http://women.cs.uiuc.edu/
+http://women.indiatimes.com/articleshow/992396.cms
+http://women.msn.com/1176464.armx
+http://womencentral.net/darwin2.html
+http://womeninministry.ag.org/history/index.cfm
+http://womeninministry.ag.org/resources/articles/ministry/min0309_grant2001wim.cfm
+http://womenshealth.about.com/cs/hysterectomy/a/hysterectomy.htm
+http://womenshealth.about.com/cs/menopaus1/a/menopause6.htm
+http://womenshealth.about.com/od/menstruation/
+http://womenshealth.aetna.com/WH/ihtWH/r.WSIHW000/st.36121/t.36149.html
+http://womenshistory.about.com/library/bio/bltruth.htm
+http://womenshistory.about.com/library/ency/blwh_add_entry3.htm
+http://womensissues.about.com/cs/cedaw/
+http://womensissues.about.com/cs/reproductive/a/blmorningafter.htm
+http://womensissues.about.com/od/eatingdisorders/a/bledbshare7.htm
+http://wonder.cdc.gov/wonder/sci_data/mort/english/type_txt/englmort.asp
+http://wonderwinds.com/Great_Adventure/
+http://wongkk.com/general/respect.html
+http://woodrow.mpls.frb.fed.us/pubs/region/95-09/int959.cfm
+http://woodshole.er.usgs.gov/operations/obs/acrup94.html
+http://woorisol.kyungpook.ac.kr/lab/prof/SoftEng/ch9.htm
+http://worcester.indymedia.org/news/2004/09/289.php
+http://wordbytes.org/healing/waiting.htm
+http://wordpress.org/support/topic/33453/rss/
+http://wordprocessing.about.com/od/wordquicktips/qt/autolink.htm
+http://words.grubbykid.com/2005/04/18/union_square_clock.html
+http://wordunheard.com/archives/2005/05/linda_foley_mee.php
+http://work-at-home.momsbreak.com/
+http://work-offshore.com/resume2.htm
+http://workabroad.monster.com/articles/cost/
+http://workabroad.monster.com/articles/esltraining/
+http://workathome.biz-whiz.com/
+http://workers.labor.net.au/59/news82_tafe.html
+http://workhelp.org/index.php?option=content&task=view&id=66
+http://workingknowledge.hbs.edu/item.jhtml?id=3533&t=innovation&noseek=one
+http://workingknowledge.hbs.edu/item.jhtml?id=4855&t=heskett&oid=4836&rid=4855&hid=-1&aid=-1
+http://workinglife.typepad.com/daily_blog/2005/06/further_reflect.html
+http://workingsmarter.typepad.com/
+http://workingsmarter.typepad.com/my_weblog/
+http://workingsmarter.typepad.com/my_weblog/in_the_news/
+http://workplace.samhsa.gov/fedprograms/MandatoryGuidelines/MG04132004.htm
+http://worksite.actu.asn.au/showall.php3?secid=12
+http://world-affairs.com/34merger.htm
+http://world-evangelism.com/evcost.htm
+http://world-information.org/wio/readme/992006691/1078488055
+http://world.std.com/~ahern/CIGOrept.htm
+http://world.std.com/~eshu/osc/bylawsdf.htm
+http://world.std.com/~eshu/osc/oscfaq.htm
+http://world.std.com/~griesngr/SUSSEX.html
+http://world.std.com/~rkarash/GW-OL/
+http://world.std.com/~wij/hiv-neg/Appendix-B.html
+http://world.std.com/~wij/hiv-neg/Chapter13.html
+http://worldcommunity.com/htj/htj_0203.htm
+http://worldculinaryinstitute.com/hospitality/hospitality1.html
+http://worldfilm.about.com/cs/festival1/a/phillyflmfest03.htm
+http://worldfilm.about.com/od/newdvds/
+http://worldfootbag.com/catalog2/showgroup/clothing
+http://worldforge.org/worlds/dural/gazetteer/ardmor/mostice/
+http://worldhistoryconnected.press.uiuc.edu/2.2/stearns.html
+http://worldnetdaily.com/news/article.asp?ARTICLE_ID=39418
+http://worldnow.healthology.com/focus_article.asp?f=elderly&c=elderly_homeimprovement&b=worldnow
+http://worldofends.com/
+http://worldofwonder.net/archives/2005/Jun/08/exclusive_on_the_brown_low.wow
+http://worldpages-ads.com/bookindex/HUMB/k.html
+http://worldsofpossibility.blogspot.com/
+http://worldtradeaftermath.com/wta/older_updates.asp
+http://worldwatchdaily.org/
+http://worldwide.typepad.com/schoolhouse/2003/09/landmark_breakt.html
+http://worldwideaddiction.com/articles/diseaseconcept.htm
+http://worldwideaddiction.com/articles/rebuild.htm
+http://wouldashoulda.com/
+http://wowirondragons.org/powmia.html
+http://wp.rutgers.edu/teachers/101/sample_assignments/sa_nussbaum.html
+http://wpblog.ohpinion.com/
+http://wpblog.ohpinion.com/index.php?cat=8
+http://wpmc1.wpafb.af.mil/pages/hbo/pthndbk.htm
+http://wps.prenhall.com/bp_atkinson_mgmtacct_4/0,,973943-,00.utf8.html
+http://wrc.iewatershed.com/education-coast-05-b.php
+http://wrestlegirl.com/gnews1291.htm
+http://writ.news.findlaw.com/dorf/20041124.html
+http://writ.news.findlaw.com/grossman/20020611.html
+http://writ.news.findlaw.com/grossman/20040927.html
+http://writ.news.findlaw.com/hamilton/20010802.html
+http://writ.news.findlaw.com/leavitt/20040922.html
+http://writersalmanac.publicradio.org/docs/00_09_25.htm
+http://writersalmanac.publicradio.org/docs/98_03_23.htm
+http://writersrealm0.tripod.com/stories/02-2.htm
+http://writing-program.uchicago.edu/resources/grammar.htm
+http://writing.colostate.edu/references/teaching/esl/listening.cfm
+http://writing.fsu.edu/cwc/sp02/cel41452/Death.html
+http://writing.upenn.edu/cw/courses04c.html
+http://writing4success.com/copywriting_features_into_benefits_td.htm
+http://writingcenters.org/
+http://writingcraft.deep-magic.net/
+http://wronginjapan.blogspot.com/
+http://wrrc.ucdavis.edu/baby_book/clock.html
+http://wrt-brooke.syr.edu/cgbvb/about.html
+http://wrt-intertext.syr.edu/ii1/curtis.html
+http://wrt-intertext.syr.edu/ii1/yu.html
+http://wrt.syr.edu/uc/archivedsyllabi/thorley205.html
+http://ws.web.arizona.edu/ws200/fall97/grp16/part5.htm
+http://wsdtx.org/bulletin/graduation.php
+http://wso.williams.edu/blog/main?wso=dkane
+http://wso.williams.edu/blog/main?wso=rgarcia
+http://wso.williams.edu/blog/view?id=1883
+http://wso.williams.edu/orgs/cc/minutes/11-20-02.htm
+http://wsq.nichebox.com/
+http://wsucougars.collegesports.com/sports/w-crew/spec-rel/012505aae.html
+http://wths.tn.org/wths.papers.html
+http://wtoctv.com/Global/story.asp?S=2979716&nav=0qq5BnCg
+http://wuphysicians.wustl.edu/dept.asp?pageID=18&ID=8
+http://wuphysicians.wustl.edu/dept_print.asp?ID=8&pageID=18
+http://wuphysicians.wustl.edu/page.asp?pageID=145&NavID=4
+http://wuphysicians.wustl.edu/physician2.asp?PhysNum=3013&deptID=5&divisionID=7
+http://wusatv9.com/news/news_article.aspx?storyid=40026
+http://wusb.fm/archive/articles/Hitchcock.html
+http://wvuminute.wvu.edu/Archive/?type=date
+http://ww1.mid-day.com/columns/farahbaria/parentthesis/2004/october/93768.htm
+http://ww1.mid-day.com/columns/vir_sanghvi/2005/april/108053.htm
+http://ww1.oppd.com/edu/environment/index.cfm
+http://ww1.sundayherald.com/38340
+http://ww1.sundayherald.com/47481
+http://ww2.asme.org/cfforum2000/viewmessages.cfm?forum=32&topic=328
+http://ww2.asme.org/pd/courseDetail.cfm?CO_ID=1010
+http://ww2.asme.org/pd/courseDetail.cfm?CO_ID=5
+http://ww2.asme.org/pd/courseDetail.cfm?CO_ID=662
+http://ww2.asme.org/pd/courseDetail.cfm?CO_ID=809
+http://ww2.heartandstroke.ca/Page.asp?PageID=548&CategoryID=23&Src=about
+http://ww2.lafayette.edu/~hollidac/pastresstuds.html
+http://ww3.weatherbug.com/spbg/default.asp?cid=21
+http://ww4.americanbaby.com/ab/story.jhtml?storyid=/templatedata/ab/story/data/AB0704FirstAid.xml
+http://wwcoco.com/cfids/jackiisolation.html
+http://wwics.si.edu/index.cfm?fuseaction=topics.home&topic_id=1413
+http://wwics.si.edu/index.cfm?fuseaction=wq.essay&essay_id=115960
+http://wwics.si.edu/index.cfm?topic_id=1408&fuseaction=topics.event&event_id=128775
+http://wwics.si.edu/index.cfm?topic_id=1411&fuseaction=topics.event_summary&event_id=101918
+http://wwics.si.edu/index.cfm?topic_id=1411&fuseaction=topics.event_summary&event_id=116883
+http://wwics.si.edu/index.cfm?topic_id=1417&fuseaction=topics.text_1417&topicid=1417
+http://wwics.si.edu/index.cfm?topic_id=1422&fuseaction=topics.publications&doc_id=18755&group_id=7427
+http://wwics.si.edu/index.cfm?topic_id=1422&fuseaction=topics.publications&doc_id=8580&group_id=7427
+http://wwics.si.edu/index.cfm?topic_id=6105&fuseaction=topics.event_summary&event_id=113952&doc_id=121568
+http://www-1.ibm.com/industries/financialservices/doc/content/news/newsletter/999394103.html
+http://www-1.ibm.com/industries/media/doc/content/casestudy/357105111.html?g_type=rhc
+http://www-106.ibm.com/developerworks/blogs/dw_blog_comments.jspa?blog=351&entry=81108&ca=drs-bl
+http://www-106.ibm.com/developerworks/grid/library/dw-proto2/
+http://www-106.ibm.com/developerworks/library/gr-watch2.html
+http://www-106.ibm.com/developerworks/library/j-test.html
+http://www-106.ibm.com/developerworks/library/os-ecnbeans/?ca=dgr-lnxw41NetBeans
+http://www-106.ibm.com/developerworks/library/wa-probab/?ca=dgr-lnxw03PDL
+http://www-106.ibm.com/developerworks/library/ws-basicprofile11.html
+http://www-106.ibm.com/developerworks/linux/library/l-ipaq.html
+http://www-106.ibm.com/developerworks/webservices/library/ws-peer1.html?dwzone=ws
+http://www-106.ibm.com/developerworks/webservices/library/ws-soapenc/
+http://www-106.ibm.com/developerworks/xml/library/x-dita3/
+http://www-106.ibm.com/developerworks/xml/library/x-soapcl/
+http://www-106.ibm.com/developerworks/xml/library/x-xdxqry.html
+http://www-128.ibm.com/developerworks/blogs/dw_blog_comments.jspa?blog=399&entry=83227
+http://www-128.ibm.com/developerworks/java/library/j-statcvs/
+http://www-128.ibm.com/developerworks/linux/library/l-pow-devoverview/?ca=drs-1505
+http://www-128.ibm.com/developerworks/power/library/pa-unrollav1/
+http://www-128.ibm.com/developerworks/websphere/techjournal/0410_col_willenborg/0410_col_willenborg.html
+http://www-132.ibm.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=-840&langId=-1&storeId=1&partNumber=92P3429
+http://www-132.ibm.com/webapp/wcs/stores/servlet/ProductDisplay?productId=8667810&storeId=1&langId=-1&catalogId=-840
+http://www-132.ibm.com/webapp/wcs/stores/servlet/ProductDisplay?productId=8667812&storeId=1&langId=-1&catalogId=-840
+http://www-136.ibm.com/developerworks/rational/library/4127.html
+http://www-2.cs.cmu.edu/People/rgs/avon-XXVII.html
+http://www-2.cs.cmu.edu/People/rgs/scarp-XV.html
+http://www-2.cs.cmu.edu/afs/cs/Web/People/dst/Library/Shelf/wakefield/testimony-10.html
+http://www-2.cs.cmu.edu/afs/cs/project/jair/pub/volume21/stanley04a-html/node7.html
+http://www-2.cs.cmu.edu/~NatProg/marmalade.html
+http://www-2.cs.cmu.edu/~awm/tutorials/
+http://www-2.cs.cmu.edu/~dst/Library/Shelf/atack/bs7-3.htm
+http://www-2.cs.cmu.edu/~dst/Library/Shelf/xenu/xenu-03.html
+http://www-2.cs.cmu.edu/~dst/Library/Shelf/xenu/xenu-10.html
+http://www-2.cs.cmu.edu/~dst/Secrets/E-Meter/courtfile-7-71-mn.html
+http://www-2.cs.cmu.edu/~dst/Secrets/E-Meter/fuller.html
+http://www-2.cs.cmu.edu/~ggordon/
+http://www-3.627cars.com/
+http://www-306.ibm.com/software/info/middleware/workplace/index.jsp
+http://www-306.ibm.com/software/info/workplace/live/
+http://www-306.ibm.com/software/pervasive/news/press_releases/anchors_0501.shtml
+http://www-306.ibm.com/software/success/cssdb.nsf/CS/DNSD-63HJKZ?OpenDocument&Site=default
+http://www-306.ibm.com/software/swnews/swnews.nsf/n/jmae5rfja2?OpenDocument&Site=default
+http://www-306.ibm.com/software/swnews/swnews.nsf/n/lsan69e5rl?OpenDocument&Site=default
+http://www-afa.adm.ohio-state.edu/u-majors/FLUIDPOW.HTML
+http://www-ang.kfunigraz.ac.at/~katzer/engl/Rosa_dam.html
+http://www-anw.cs.umass.edu/~rich/book/1/node7.html
+http://www-atdp.berkeley.edu/sec.faq.html
+http://www-biology.ucsd.edu/faculty/holway.html
+http://www-cad.eecs.berkeley.edu/~vinayak/TIJ/AppendixA.html
+http://www-cdf.fnal.gov/upgrades/daq_trig/trigger/svt/Beam/Docs/BeamAlignment_LR.html
+http://www-cgi.cnn.com/US/9510/megamarch/10-16/clinton/update/
+http://www-chancellor.ucsd.edu/letters08_16.html
+http://www-chaos.umd.edu/research.html
+http://www-classes.usc.edu/engr/ise/582/2002/old.html
+http://www-cmod.psfc.mit.edu/cmod/shot_display.php?shot=1010719014
+http://www-cs-faculty.stanford.edu/~knuth/mmix.html
+http://www-cs-students.stanford.edu/~amitp/Articles/AStar3.html
+http://www-cs-students.stanford.edu/~amitp/gameprog.html
+http://www-cs.stanford.edu/News/
+http://www-cs.stanford.edu/News/index.php?printer_friendly=true
+http://www-cse.ucsd.edu/users/goguen/misc/ab2.html
+http://www-cvrl.ucsd.edu/osa/
+http://www-dateline.ucdavis.edu/012100/DL_growth.html
+http://www-db.stanford.edu/pub/voy/museum/pictures/IBM.html
+http://www-db.stanford.edu/~sergey/dic.html
+http://www-distance.syr.edu/ndacelech1.html
+http://www-dse.doc.ic.ac.uk/events/policy-2001/home.html
+http://www-dse.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/sab/report.html
+http://www-ee.eng.hawaii.edu/Courses/EE150/Book/chap15/section2.1.2.html
+http://www-eng.expocentr.ru/site/559/
+http://www-envirinfo.llnl.gov/
+http://www-formal.stanford.edu/jmc/nature/node17.html
+http://www-formal.stanford.edu/jmc/progress/marxism.html
+http://www-formal.stanford.edu/jmc/robotandbaby/robotandbaby.html
+http://www-fp.mcs.anl.gov/otc/Guide/OptWeb/continuous/constrained/stochastic/
+http://www-fp.mcs.anl.gov/~lusk/aurora/aurora.app/subsection3.5.2.html
+http://www-glast.slac.stanford.edu/Elec_DAQ/ELX_test/content/meetings/etg_060704.htm
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Beginnings_of_set_theory.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Brachistochrone.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Golden_ratio.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Greek_astronomy.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Light_2.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Maxwell_House.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Nine_chapters.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Perfect_numbers.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Quadratic_etc_equations.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Special_relativity.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/The_four_colour_theorem.html
+http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Voting.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Abel.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Archimedes.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Artin.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Auslander.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Bacon.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Batchelor.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Berkeley.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Bohr_Niels.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Born.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Brahe.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Brauer.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Cardan.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Chebyshev.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Chrystal.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Courant.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Cusa.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Dedekind.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Einstein.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Euclid.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Eudoxus.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Faraday.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/FitzGerald.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Fourier.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Fresnel.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Friedmann.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Gregory.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hall.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hemchandra.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hipparchus.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hooke.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Hutton_James.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Jeans.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Khayyam.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Lagrange.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Littlewood.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Lobachevsky.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Lovelace.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/MacCullagh.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Madhava.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Maxwell.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Newton.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Nightingale.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Pascal.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Poisson.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Richmond.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Salmon.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Simson.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Stokes.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Tait.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Taylor.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Thomson.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Tukey.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Turing.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Watson.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Wedderburn.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Whitehead.html
+http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Wiener_Norbert.html
+http://www-groups.dcs.st-and.ac.uk/~history/PrintHT/Beginnings_of_set_theory.html
+http://www-groups.dcs.st-and.ac.uk/~history/PrintHT/Brachistochrone.html
+http://www-histecon.kings.cam.ac.uk/eventsrecent.htm
+http://www-hl.syr.edu/depts/MES/PastEvents.htm
+http://www-hoover.stanford.edu/presswebsite/dstudies.html
+http://www-hoover.stanford.edu/pubaffairs/newsletter/01winter/epp.html
+http://www-hoover.stanford.edu/publications/books/electricity.html
+http://www-hoover.stanford.edu/publications/he/22/22g.html
+http://www-ieem.ust.hk/dfaculty/liming/silk/
+http://www-ilo-mirror.cornell.edu/public/english/bureau/inf/features/05/flexicurity.htm
+http://www-ilo-mirror.cornell.edu/public/english/bureau/inf/pkits/wer5.htm
+http://www-ilo-mirror.cornell.edu/public/english/bureau/leg/agreements/switz.htm
+http://www-inst.eecs.berkeley.edu/~cs162/Nachos/chess.shtml
+http://www-irps.ucsd.edu/about/innews2002/ajc042102.php
+http://www-irps.ucsd.edu/about/tr061505.php
+http://www-istp.gsfc.nasa.gov/Education/FAQs4.html
+http://www-istp.gsfc.nasa.gov/stargaze/Svenus1.htm
+http://www-leibniz.imag.fr/perso/r7/prost/public_html/Bibliographie_personnelle.html
+http://www-leland.stanford.edu/~rmahony/Breastfeeding.html
+http://www-med.stanford.edu/shs/update/archives/DEC2003/sorensen.html
+http://www-med.stanford.edu/shs/update/archives/aug2000/welch.html
+http://www-med.stanford.edu/shs/update/archives/mar2000/pres.html
+http://www-micro.msb.le.ac.uk/MBChB/6a.html
+http://www-mpl.ucsd.edu/cg/people/rparker.html
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-05-19
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-06-02
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-06-09
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-06-16
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-06-23
+http://www-msu.mcmaster.ca/events/events.php?cmd=view&date=2005-06-30
+http://www-nrd.nhtsa.dot.gov/departments/nrd-01/presentations/SAE.html
+http://www-nrd.nhtsa.dot.gov/departments/nrd-11/childsafety/chap_1.htm
+http://www-p24.lanl.gov/OMEGA/mainpage.html
+http://www-pao.ksc.nasa.gov/kscpao/briefing/sts110/mission.htm
+http://www-pao.ksc.nasa.gov/kscpao/history/apollo/apollo-13/apollo-13.htm
+http://www-personal.ksu.edu/~kbmill/
+http://www-personal.umd.umich.edu/~jonsmith/disease.html
+http://www-personal.umich.edu/~acm/WIG/WIG13.html
+http://www-personal.umich.edu/~airyn/spirit.html
+http://www-personal.umich.edu/~alandear/glossary/d.html
+http://www-personal.umich.edu/~alandear/glossary/m.html
+http://www-personal.umich.edu/~alandear/glossary/o.html
+http://www-personal.umich.edu/~alandear/glossary/t.html
+http://www-personal.umich.edu/~alicyn/HFWEA.html
+http://www-personal.umich.edu/~bcash/critiicalanalysis.html
+http://www-personal.umich.edu/~bgoodsel/venezuelatalk.htm
+http://www-personal.umich.edu/~dallan/nre220/outline23.htm
+http://www-personal.umich.edu/~jaylemke/papers/Identity/IDENTITY3.htm
+http://www-personal.umich.edu/~lormand/agenda/0109/datinggame.htm
+http://www-personal.umich.edu/~lormand/phil/epist/how2search4truth.htm
+http://www-personal.umich.edu/~mfcraig/simons_place/news.html
+http://www-personal.umich.edu/~rtanter/W96PS353S1/Peres.Shimon
+http://www-personal.umich.edu/~velleman/Practical_Reflection/chapter2.html
+http://www-phil.tamu.edu/~gary/intro/paper.paley.html
+http://www-pors.hit.no/tf/icee01/iceesc.htm
+http://www-psych.stanford.edu/~hmarkus/articles/place_matters.htm
+http://www-relg-studies.scu.edu/facstaff/spohn/
+http://www-rohan.sdsu.edu/dept/sdsutrio/PCI-CP.html
+http://www-rohan.sdsu.edu/doc/oracle/server803/A54653_01/hs_ch8.htm
+http://www-rohan.sdsu.edu/faculty/feenberg/kawabata.html
+http://www-rohan.sdsu.edu/~3gleep6/rrsd/runsp.html
+http://www-safety.deas.harvard.edu/textonly/min02-01.html
+http://www-saps.plantsci.cam.ac.uk/worksheets/ssheets/ssheet11.htm
+http://www-scf.usc.edu/~vsa/opportunities.htm
+http://www-sci.pac.dfo-mpo.gc.ca/mehsd/sea_lice/2004/2004_intro_e.htm
+http://www-spof.gsfc.nasa.gov/Education/FAQs3.html
+http://www-spof.gsfc.nasa.gov/Education/whmfield.html
+http://www-sul.stanford.edu/catdb/alldata.html
+http://www-sul.stanford.edu/depts/physics/collections/newbooksapril05.html
+http://www-sul.stanford.edu/depts/ssrg/africa/boers.html
+http://www-sul.stanford.edu/depts/ssrg/africa/labor.html
+http://www-tec.open.ac.uk/eeru/natta/
+http://www-tech.mit.edu/Shakespeare/1henryvi/full.html
+http://www-tech.mit.edu/Shakespeare/lear/lear.5.3.html
+http://www-tech.mit.edu/Shakespeare/lll/lll.4.3.html
+http://www-tech.mit.edu/V112/N12/mhockey.12s.html
+http://www-tech.mit.edu/V121/N11/11RCupdate.11n.html
+http://www-ucdmag.ucdavis.edu/fall02/feature_1.html
+http://www-ucsu.colorado.edu/GovDocs/UCSU%20bylaws.htm
+http://www-unix.gridforum.org/mail_archive/dais-wg/2005/01/msg00003.html
+http://www-unix.gridforum.org/mail_archive/dais-wg/2005/01/msg00004.html
+http://www-unix.gridforum.org/mail_archive/dais-wg/2005/01/msg00005.html
+http://www-unix.mcs.anl.gov/~bacon/guide-verify.html
+http://www-users.cs.umn.edu/~baoquan/pubs.html
+http://www-users.cs.york.ac.uk/~kimble/teaching/Sogn_og_Fjordane/KM_and_CoPs.html
+http://www-users.cs.york.ac.uk/~kimble/teaching/hi-2/CoPs.html
+http://www-users.med.cornell.edu/~jdvicto/nips2000old.html
+http://www-users.york.ac.uk/~socs203/luddites.htm
+http://www-wfau.roe.ac.uk/sss/halpha/haspurious_images.html
+http://www-writing.berkeley.edu/TESL-EJ/ej17/r15.html
+http://www-writing.berkeley.edu/TESL-EJ/ej21/f1.html
+http://www-wsl.state.wy.us/sis/wyfdlc/oct95mtg.html
+http://www-zeus.desy.de/physics/sfew/PUBLIC/sfew_results/preliminary/british_royal00/
+http://www.007b.com/breast_gallery.php
+http://www.00de.de/archive/topic/19502-1-Ketamine-Leecher-Mod-v9-Final.html
+http://www.0xdeadbeef.com/html/2002/07/
+http://www.0xdeadbeef.com/html/2003/01/
+http://www.0xdeadbeef.com/html/2005/01/
+http://www.1-language.com/library/sherlockholmes/mantwistedlip3.htm
+http://www.100.nist.gov/growth.htm
+http://www.10000birds.com/may2004.htm
+http://www.1000files.com/Business_and_Finance/Docflow/Procedure_Charter_Standard_3866_Review.html
+http://www.1000ventures.com/business_guide/crosscuttings/cross-functional_expertise.html
+http://www.1000ventures.com/ten3_operations/ten3_products.html
+http://www.1001-hairstyles.com/links/health.htm
+http://www.100best-affiliate-programs.com/tutorials9.html
+http://www.100megsfree4.com/farshores/ufojd.htm
+http://www.100webads.com/
+http://www.101hollywood.com/3suicide/chapk.htm
+http://www.101hollywood.com/3suicide/chapzb.htm
+http://www.101offshoreoiljobs.com/
+http://www.101offshoreoiljobs.com/offshore2.htm
+http://www.101writinganswers.com/links/helpandassistance.html
+http://www.1031commercialproperties.com/singletenantpropertyportfolios.htm
+http://www.1060research.com/license/faq.html
+http://www.1077theend.com/
+http://www.1077theend.com/community/communitycalendar.asp?MONTHADD=0
+http://www.1099.com/c/ar/ta/speechify_t028.html
+http://www.1099.com/c/co/gw/na/naustin002.html
+http://www.1099.com/c/co/in/insanity012.html
+http://www.1099.com/c/co/in/insanity021.html
+http://www.10best.com/Bloomington;Normal/Leisure_Activities/index.html
+http://www.10best.com/Chicago/Personal_Services/Personal_Services/
+http://www.10ktruth.com/the_races/marathonrelay.htm
+http://www.10ktruth.com/track/preclassic.htm
+http://www.10xmarketing.com/About-Us/Executive-Team/Executive-Team-3.html
+http://www.1115.org/
+http://www.1115.org/index.php?cat=28
+http://www.111minnagallery.com/archives/2005_01.html
+http://www.11211magazine.com/hiphit4.html
+http://www.11alive.com/
+http://www.1206am.com.au/news.asp
+http://www.123child.com/fall/hall.html
+http://www.123helpme.com/assets/3803.html
+http://www.123infinity.com/ethical_dilemmas.html
+http://www.123movers.com/company.asp?c=eastwest_moving&s=residential&z=92101
+http://www.123youth.com/article43266.html
+http://www.12gracestreet.com/
+http://www.12travel.com/aboutus/faq.html
+http://www.1311events.net/emblem.html
+http://www.1311events.net/melodyfakers.html
+http://www.1311events.net/rockandpop.html
+http://www.1311events.net/sttsource.html
+http://www.1335.com/unionjack.html
+http://www.135steward.org/rights.htm
+http://www.15seconds.com/
+http://www.15seconds.com/faq/Security/653.htm
+http://www.15thwisconsin.net/15brfhis.htm
+http://www.16horsepower.com/lyricsother.html
+http://www.1704.deerfield.history.museum/popups/scenes.do?shortName=Parting
+http://www.1729.com/consciousness/feelings.html
+http://www.1729.com/music/whatismusic.html
+http://www.1800clean54.com/knowledge/response/default.asp
+http://www.1800mobiles.com/f8e471-dl.html
+http://www.1800probate.com/probate-lawyer/south-dakota.html
+http://www.1800skyride.com/BalloonRides/Testimonials/
+http://www.1811house.com/accommodations.html
+http://www.187ridefind.com/taxbreaks.html
+http://www.1888pets911.org/forthedogs/7habits.php
+http://www.18software.com/hawk.htm
+http://www.1914-1918.net/BATTLES/bat13_loos/bat13_actual2.htm
+http://www.1914-1918.net/sacredground/cambrai/flesquieres.htm
+http://www.1914-1918.net/women_orgs.htm
+http://www.19thc-artworldwide.org/autumn_04/reviews/sik.html
+http://www.1aiel.com/risky.htm
+http://www.1automationwiz.com/
+http://www.1chapter.com/step2.cfm?Cat=Counseling&Sub=Addictions
+http://www.1fish.co.uk/fun/competitions.htm
+http://www.1id.army.mil/1ID/safety/Cold_weather_Injury_prevention/hypothermia.htm
+http://www.1site.info/
+http://www.1src.com/forums/archive/index.php/t-4647.html
+http://www.1srg.org/Contributed-Materials/HowToAvoidGettingLost.htm
+http://www.1st-in-synthetics.com/
+http://www.1st-in-synthetics.com/amsoil_opportunity.htm
+http://www.1st-self-sunless-fake-indoor-discount-tanning-lotion-products.com/
+http://www.1st-writer.com/CareerResources.htm
+http://www.1st4ukdirectorjobs.co.uk/Pages/career_tips_cv_tips.asp
+http://www.1stchoicecorporategifts.com/b/index.php?m=200411
+http://www.1sthowtoworkathome.com/advertising-lead-generation-02.html
+http://www.1sthowtoworkathome.com/layoff-news-April-2004.html
+http://www.1stindustrialdirectory.com/Air_Conditioning_Supplies_and_Parts/Air_Conditioning_Supplies_and_Parts.html
+http://www.1stindustrialdirectory.com/HVAC_Equipment_and_Supplies/HVAC_Equipment_and_Supplies.html
+http://www.1stvoice.com/quartet.html
+http://www.1to1.com/Glossary.aspx
+http://www.1to1.com/view.aspx?DocID=28670
+http://www.1up.com/do/previewPage?cId=3138507
+http://www.1way2god.net/2peter.html
+http://www.1worldglobes.com/globereferencetool.htm
+http://www.2-tiersoftware.com/index.2ts?page=affsignup&sub=commission
+http://www.2000greetings.com/inspire30.htm
+http://www.201mass.com/modules.php?name=Forums&file=viewtopic&p=10654
+http://www.2020site.org/trees/cypress.html
+http://www.20by20room.com/2005/01/how_rpg_rules_w.html
+http://www.20six.co.uk/Cllr_Andrew_Brown
+http://www.20six.co.uk/Marshall/archive/2003/07/
+http://www.20six.co.uk/Sammyface/archive/2004/09/
+http://www.20six.co.uk/black_box
+http://www.20six.co.uk/black_box/archive/2003/10/13/zz4al5xy4ye.htm
+http://www.20six.co.uk/gargi
+http://www.20six.co.uk/lonewalker/archive/2005/02/
+http://www.20six.co.uk/thinkingtony
+http://www.20six.co.uk/vodka_dothiepin
+http://www.21stcenturysciencetech.com/articles/chernobyl.html
+http://www.21stcenturysciencetech.com/articles/summ01/cold_fusion/cold_fusion.html
+http://www.23-skidoo.com/list/spaceflight.html
+http://www.2357.a-tu.net/index.php?link=Links
+http://www.24-7pressrelease.com/view_press_release.php?rID=6469
+http://www.24-7valencia.com/
+http://www.246.dk/teachamney.html
+http://www.246.dk/teachronology.html
+http://www.246.dk/teatbot.html
+http://www.24carat.co.uk/humourandjokes.html
+http://www.24drtravel.com/reference/library/blood_care/transfusions_general.asp
+http://www.24fpsmagazine.com/Archive/Matinee.html
+http://www.24hdc.com/
+http://www.24hourmuseum.org.uk/museum_gfx_en/AM10448.html
+http://www.24hourmuseum.org.uk/museum_gfx_en/AM12247.html
+http://www.24hourmuseum.org.uk/museum_gfx_en/AM71.html
+http://www.24hourmuseum.org.uk/museum_gfx_en/MW899.html
+http://www.24hourmuseum.org.uk/nwh_gfx_en/ART17649.html
+http://www.24hourmuseum.org.uk/nwh_gfx_en/ART24974.html
+http://www.24hourmuseum.org.uk/trlmi_txo_en/TRA4.html
+http://www.24hourmuseum.org.uk/trlout_gfx_en/EMMS.html
+http://www.24hourmuseum.org.uk/trlout_gfx_en/WALES3.html
+http://www.24hourscholar.com/p/articles/mi_m2005/is_n4_v31/ai_20870395
+http://www.2bangkok.com/news04n.shtml
+http://www.2become1weddings.com/Articles/detail~iData~14~iCat~2224~iChannel~2~nChannel~Articles.asp
+http://www.2blowhards.com/archives/002049.html
+http://www.2camels.com/worlds-biggest-parties/
+http://www.2dobeforeidie.com/mrrogers.htm
+http://www.2f3.com/bulletin0211.asp
+http://www.2haveand2hold.com/
+http://www.2nd-tier.com/articles/showfax/
+http://www.2ndlaw.com/obstructions.html
+http://www.2ontario.com/welcome/codb_301.asp
+http://www.305hiphop.com/modules.php?name=News&file=article&sid=798
+http://www.30goodminutes.org/csec/sermon/coffin_3519.htm
+http://www.30music.com/rev.php?rev=1023
+http://www.321free.com/listings.php?catid=8&subcat=48
+http://www.365englandfans.com/your_stories/shizuoka.htm
+http://www.37signals.com/
+http://www.37signals.com/svn/archives/001060.php
+http://www.37signals.com/svn/archives/001084.php?35
+http://www.37signals.com/svn/archives2/google_web_accelerator_hey_not_so_fast_an_alert_for_web_app_designers.php
+http://www.37signals.com/svn/archives2/some_notes_on_the_building_of_codezoo.php
+http://www.39reasons.com/
+http://www.3ammagazine.com/fiction/2003/jun/stages.html
+http://www.3ammagazine.com/nonfiction/2005/feb/secularism.html
+http://www.3d.sk/
+http://www.3dactionplanet.com/bridgecommander/faq/general.shtml
+http://www.3dactionplanet.com/undying/help/walkthrough/aaron.shtml
+http://www.3dgamers.com/articles/more/35/
+http://www.3dmonth.org/nyrc_ideas.cfm
+http://www.3drealms.com/index.shtml
+http://www.3dshoots.com/archery_reviews.html
+http://www.3dsystems.com/products/solidimaging/accura/index.asp
+http://www.3dv.com/dvsoftware/pyro/pyro.html
+http://www.3dviewmax.com/page71.htm
+http://www.3g.co.uk/PR/Feb2005/9048.htm
+http://www.3g.co.uk/PR/March2003/5022.htm
+http://www.3gnewsroom.com/phorum-3.4.8a/read.php?f=34&i=9442&t=9442
+http://www.3i.com/media/fj.html
+http://www.3m.com/meetingnetwork/articles_advice/marjorie/03-spring.html
+http://www.3m.com/us/mfg_industrial/indtape/
+http://www.3oddballz.com/hoaxes/
+http://www.3r.ie/
+http://www.3rdearmusic.com/forum/forumfeb03/cricket.html
+http://www.3rdedition.org/agimimnon/viewer.asp?ID=87
+http://www.3rdedition.org/merricb/musings/2004_04_01_musings_archive.htm
+http://www.3rdparty.org/forum/Forum17/HTML/000015.html
+http://www.3vb.com/pgs-members/m_gmitchell.shtml
+http://www.4-11.org/books/1thes/1th12.html
+http://www.4-11.org/books/2thes/2th06.html
+http://www.4-safety.com/Lifts.htm
+http://www.40k.org.uk/blog/2004_06_01_old
+http://www.40konline.com/community/index.php/topic,57063.0.html
+http://www.411kids.org/inspiration.htm
+http://www.419eater.com/html/samuel_eze.htm
+http://www.43folders.com/2004/09/quicksilver_mov.html
+http://www.43folders.com/2004/11/hack_your_way_o_1.html
+http://www.43folders.com/2004/12/devonthink_inte.html
+http://www.43folders.com/2005/05/cringebusting_y.html
+http://www.43folders.com/2005/05/impressive_pape.html
+http://www.43folders.com/2005/05/review_scott_be.html
+http://www.43things.com/entries/view/26754
+http://www.456bereastreet.com/archive/200410/office_work_environment/
+http://www.456bereastreet.com/archive/200411/quotations_and_citations_quoting_text/
+http://www.456bereastreet.com/archive/200411/quotations_and_citations_quoting_text/?q=p
+http://www.456bereastreet.com/archive/200501/the_writing_process/
+http://www.456bereastreet.com/archive/200502/basics_of_search_engine_optimisation.html
+http://www.456bereastreet.com/archive/200502/basics_of_search_engine_optimisation/
+http://www.456bereastreet.com/archive/200504/definitive_solution_to_image_replacement/
+http://www.456bereastreet.com/archive/200506/customising_custom_corners_and_borders/
+http://www.456bereastreet.com/archive/200506/the_bullhorns_and_shortterm_thinking/
+http://www.456bereastreet.com/lab/developing_with_web_standards/css/
+http://www.456bereastreet.com/lab/developing_with_web_standards/full/
+http://www.461st.org/Missions/August1944.htm
+http://www.48north.com/mar2000/acinsights.htm
+http://www.4barsrest.com/articles/2005/art431.asp
+http://www.4children.org/parents.htm
+http://www.4degreez.com/quotes/mquotes_education_d.html
+http://www.4developers.com/news/
+http://www.4developers.com/ts/
+http://www.4girls.gov/SpeakUp/AllComments.cfm?TopicID=57
+http://www.4girls.gov/body/period.htm
+http://www.4girls.gov/nutrition/bonehealth.htm
+http://www.4hearingloss.com/archives/2005/06/gift_of_hearing.html
+http://www.4hoteliers.com/4hots_fshw.php?mwi=532
+http://www.4hotels.co.uk/uk/hotels/theoldbridge.html
+http://www.4hurtingchristians.com/i_need_a_cure_because_i_am_suffering_from_epilepsy.html
+http://www.4husablogs.org/CCN/
+http://www.4jobs.com/JS/General/Job.asp?id=3460141
+http://www.4jobs.com/JS/General/Job.asp?id=3460142
+http://www.4law.co.il/sar1.htm
+http://www.4literature.net/Washington_Irving/Widow_and_Her_Son/
+http://www.4ni.co.uk/listing.asp?cat=848&style=0&company=89217&mb=391057&level1=9
+http://www.4p8.com/eric.brasseur/solid_rocket_motor.html
+http://www.4peaks.com/fotrails.htm
+http://www.4qd.co.uk/faq/bmnc3.html
+http://www.4rfv.co.uk/brieflisting.asp?scategory=216&company=10587&start=0
+http://www.4rfv.co.uk/default.asp
+http://www.4rfv.co.uk/fulllisting.asp?scategory=150
+http://www.4seasonsford.biz/service.htm
+http://www.4thfest.org/attend_faq.asp
+http://www.4thfest.org/donate_volunteer.asp
+http://www.4thmichigan.com/journal_of_james_houghton.htm
+http://www.4to40.com/folktales/index.asp?article=folktales_roshnisfeast
+http://www.4ukshopping.co.uk/
+http://www.4um.com/ireland/
+http://www.4woman.gov/faq/bloodpress.htm
+http://www.4woman.gov/faq/coronary.htm
+http://www.4woman.gov/faq/perimenopause.htm
+http://www.4woman.gov/newsletter/2004.01.htm
+http://www.4woman.gov/owh/international.htm
+http://www.4woman.gov/pypth/articles/aa_check_it_out.html
+http://www.4zzzfm.org.au/services/index.cfm
+http://www.50birds.com/dfeedingbirds.htm
+http://www.50cups.com/strange/brew/0009.asp
+http://www.50minutehour.net/
+http://www.50minutehour.net/archive/2005_01_01_index.htm
+http://www.50plus.org/survey%20results.htm
+http://www.50plushealth.co.uk/index.cfm?articleid=507
+http://www.50states.com/bird/goldfinc.htm
+http://www.50states.com/facts/ndakota.htm
+http://www.50years.org/cms/ejn/story/114
+http://www.50years.org/cms/ejn/story/250
+http://www.50years.org/cms/updates/story/11
+http://www.51capitalmarch.com/51CapitalMarchProtestLogistics.shtml
+http://www.525reasons.com/
+http://www.57aromas.com/57aroma/store/index.php?techcode=&category=kitsretail
+http://www.57aromas.com/about_us.html
+http://www.5bbc.org/
+http://www.5dt.com/virtualinfo.html
+http://www.5tigers.org/news/CatNews/cn13.htm
+http://www.646industries.com/beyond_s/archives/2003/12/ryan_air_destin.html
+http://www.646industries.com/beyond_s/archives/environment/
+http://www.6moons.com/audioreviews/meadowlark3/kestrel2.html
+http://www.6thinternational.org/
+http://www.6thinternational.org/2004/09/on_letting_the_.html
+http://www.70south.com/resources/environment/ice
+http://www.70wildmiles.org/links.htm
+http://www.7415comics.com/?month=20050601
+http://www.755club.com/guidelines.html
+http://www.7days.ae/content/view/2887/16/
+http://www.7dayshop.com/catalog/product_info.php?products_id=7925
+http://www.7habits4teens.com/teen_northamerica.html
+http://www.7most.com/
+http://www.7nights.com/asterisk/archive/2004/07/the-big-web-design-details-list
+http://www.7nights.com/asterisk/archives/xfn_friendly_link_list_with_movable_type.php
+http://www.7nights.com/asterisk/archives05/2005/04/the-difficulty-with-originality
+http://www.7nights.com/asterisk/archives05/2005/05/technological-excuses-a-rant
+http://www.7nights.com/asterisk/archives05/2005/06/a-few-tips-on-estimating-web-projects
+http://www.7nights.com/asterisk/archives05/2005/06/do-all-web-sites-need-usability-testing
+http://www.7nights.com/asterisk/store-books/product/0679805273/Oh-the-Places-Youll-Go-Classic-Seuss.html
+http://www.7nights.com/dkrprod/gwt_seven.php
+http://www.7nights.com/dkrprod/gwt_ten.php
+http://www.7thstep.ca/membership.html
+http://www.800ceoread.com/reader/readmore.asp?isbn=0131409956
+http://www.800ceoread.com/reader/readmore.asp?isbn=0471491918
+http://www.800ceoread.com/reader/readmore.asp?isbn=0743251415
+http://www.800helpfla.com/nosales.html
+http://www.800saving.com/
+http://www.80smusiclyrics.com/artists/gloriaestefan.htm
+http://www.826nyc.org/writingGallery/stories/interview_ahamdan.php
+http://www.848.com/calendar.html
+http://www.8ball.org/blackjack_10_good_habits.htm
+http://www.9-1-1magazine.com/FeatureDetail.asp?ArticleID=240
+http://www.9-11heroes.us/news-children-violence.php
+http://www.9-11usg.org/index3.asp?page=REPSTUDIDX
+http://www.911dossier.co.uk/gen10.html
+http://www.911hotjobs.com/eastern/chicago.htm
+http://www.911hotjobs.com/pacific/battleground.htm
+http://www.911hotjobs.com/pacific/riverside2.htm
+http://www.911independentcommission.org/questions.html
+http://www.911jobforums.com/vB/showthread.php3?goto=lastpost&t=38943
+http://www.911truth.org/
+http://www.911truth.org/index.php
+http://www.91expresslanes.com/generalinfo/tollpolicy.asp?p=m6&s=n1toll
+http://www.93feeteast.co.uk/diary/
+http://www.955klos.com/listingsEntry.asp?ID=230439&PT=onaircrew
+http://www.9622.net/archives/000750.html
+http://www.965krock.com/djs/billreid.php
+http://www.96x.fm/info/musicnews.shtml
+http://www.99shadesofgrey.com/fitness/me_sqdl/
+http://www.99w.com/rules.htm
+http://www.9mmfilm.com/accessibility.htm
+http://www.9nerds.com/isabelle/AFK/
+http://www.a-car.com/new/liu.html
+http://www.a-digital-eye.net/forums/viewtopic.php?t=57
+http://www.a-human-right.com/RKBA/government.html
+http://www.a-human-right.com/RKBA/jewsfight.html
+http://www.a-i.com/show_tree.asp?id=96&level=4&root=115&item_num=341&item_name=Session+56699+Apr.+04%2C++...
+http://www.a-love-supreme.com/archive/archive071.htm
+http://www.a-love-supreme.com/archive/archive112.htm
+http://www.a-love-supreme.com/archive/archive113.htm
+http://www.a-love-supreme.com/archive/archive124.htm
+http://www.a-love-supreme.com/random/sobs%20crimbo.htm
+http://www.a-nutritional-supplements.com/food-nutrition.htm
+http://www.a-p-e-x.org/ecolecon/ee_centralconcepts.html
+http://www.a-star.edu.sg/astar/about/action/pressrelease_details.do?id=2925937cfeg2
+http://www.a-t.co.uk/
+http://www.a180.net/whore_of_babylon.html
+http://www.a1b2c3.com/drugs/gen006a.htm
+http://www.a1b2c3.com/drugs/mj014.htm
+http://www.a1nutritionproducts.com/instone-stallone
+http://www.a2z.org/acts/cathapol/jw_debate1_response.htm
+http://www.a2zrewards.com/free.html
+http://www.a4uforum.co.uk/archive/topic/21369-1.html
+http://www.aa.tufs.ac.jp/~tagengo/E-wales.html
+http://www.aaa-calif.com/westways/0505/features/deadlygame.asp
+http://www.aaa.asn.au/issinfo/vision-zero2.htm
+http://www.aaaai.org/aadmc/ate/allergic_bronchopulmonary.html
+http://www.aaacu.com/mortgage.htm
+http://www.aaai.com.au/coaching/coaches.html
+http://www.aaai.org/AITopics/assets/AIalerts/alert.9.30.03.html
+http://www.aaai.org/AITopics/html/archvE8.html
+http://www.aaai.org/AITopics/html/common.html
+http://www.aaai.org/Magazine/Editorial/Author/magazine-guidelines.html
+http://www.aaainc.org/press/release.php?pressID=558
+http://www.aaal.org/aaal2003/sunpapers.html
+http://www.aaanativearts.com/article888.html
+http://www.aaanet.org/press/an/0505/Kaufman.htm
+http://www.aaas.org/international/africa/coralreefs/ch4.shtml
+http://www.aaas.org/news/releases/2005/0114nanotech.shtml
+http://www.aaas.org/news/releases/2005/0624itw.shtml
+http://www.aaas.org/spp/cstc/pne/pubs/fundscience/papers/koizumi.htm
+http://www.aaas.org/spp/dser/evolution/issues/pennsylvania/9.5.04article.shtml
+http://www.aaas.org/spp/dser/evolution/perspectives/durant.shtml
+http://www.aaas.org/spp/rd/agri05s.htm
+http://www.aaas.org/spp/yearbook/chap13.htm
+http://www.aaasc.org/features/monitor2003/six_steps_create_positive.html
+http://www.aaaworld.com/pages/articles.asp?id=94
+http://www.aabalonered.com/200.html
+http://www.aabb.org/About_the_AABB/Nbf/nbf2.htm
+http://www.aabb.org/All_About_Blood/FAQs/aabb_faqs.htm
+http://www.aabb.org/All_About_Blood/Receiving_Blood/receive.htm
+http://www.aabc.us/ksm_xml_art23.asp
+http://www.aabchq.com/resources/tabjournals/previousissues.aspx
+http://www.aacap.org/legislation/107/107-8.htm
+http://www.aacap.org/popCulture/articles/un-tv.htm
+http://www.aacc.org/divisions/divawards.stm
+http://www.aace.org/pubs/etr/issue2/burgstahler.cfm
+http://www.aaceinc.org/breeds/ben.htm
+http://www.aacn.org/AACN/jrnlajcc.nsf/0/4e4026632d649cf0882568d6006d9299?OpenDocument
+http://www.aact.org/aacttip.html
+http://www.aact.org/cgi-bin/webdata_links.pl?Technical-General=y&cgifunction=Search
+http://www.aacu-edu.org/CALL/CALLrelease.cfm
+http://www.aacu-edu.org/liberaleducation/le-sp01/le-sp01bennett2.cfm
+http://www.aacu-edu.org/liberaleducation/le-su03/le-su3fperspective.cfm
+http://www.aacu-edu.org/liberaleducation/le-su04/le-su04feature3.cfm
+http://www.aacu-edu.org/peerreview/pr-fa02/pr-fa02reality.cfm
+http://www.aacu-edu.org/peerreview/pr-su00/pr-su00feature1.cfm
+http://www.aacu-edu.org/peerreview/pr-wi05/pr-wi05feature1.cfm
+http://www.aacu-edu.org/pff/PFFpublications/what_difference/research_campus_diff.cfm
+http://www.aacu-edu.org/phhe/past_projects/principle_findings.cfm
+http://www.aad.gov.au/default.asp?casid=4366
+http://www.aadexpo.co.za/speech%20mosioual.htm
+http://www.aaea.org/fund/docs/aaea-mins99-08.cfm
+http://www.aaenvironment.com/GlobalWarming1.htm
+http://www.aaets.org/article27.htm
+http://www.aafa.com/perspect3.html
+http://www.aafp.org/afp/20001101/practice.html
+http://www.aafp.org/afp/20010215/679.html
+http://www.aafp.org/afp/20020115/229.html
+http://www.aafp.org/afp/20030801/483.html
+http://www.aafp.org/afp/20040215/853.html
+http://www.aafp.org/afp/980315ap/hueston.html
+http://www.aafp.org/afp/980415ap/wang.html
+http://www.aafp.org/afp/991015ap/1743.html
+http://www.aafp.org/afp/991101ap/2043.html
+http://www.aafp.org/fpm/20011100/ask.html
+http://www.aafp.org/fpm/20040100/39crea.html
+http://www.aafp.org/fpm/990500fm/29.html
+http://www.aafp.org/fpm/990600fm/salaried.html
+http://www.aafp.org/x3873.xml
+http://www.aafsw.org/articles/linderman/movingstress.htm
+http://www.aagpbl.org/articles/biographies.cfm?ID=3
+http://www.aagpbl.org/articles/general.cfm?ID=4
+http://www.aagpbl.org/articles/general.cfm?ID=5
+http://www.aagpbl.org/articles/general.cfm?ID=8
+http://www.aagunsales.com/News/Fall%20Pheasant%20Stocking%20Plans%20Announced
+http://www.aahc.com.au/palc/news/mr/2004/aug/aug03.htm
+http://www.aahn.org/feature1.html
+http://www.aahom.org/classes/ft_pw_electricity.htm
+http://www.aahom.org/classes/ft_pw_light.htm
+http://www.aahom.org/jobs/employment.htm
+http://www.aahperd.org/naspe/grantconference/template.cfm?template=call.html
+http://www.aai.com/News/inthenews/abcprimetime.html
+http://www.aaiep.org/general/bvisas_policy.htm
+http://www.aaiep.org/memdetail.cfm?memid=165
+http://www.aaiep.org/memdetail.cfm?memid=324
+http://www.aais.org.uk/html/careersai.html
+http://www.aaiusa.org/famous_arab_americans.htm
+http://www.aaiusa.org/wwatch/052101.htm
+http://www.aakp.org/AAKP/RenalifeArt/2002/uniquecamp.htm
+http://www.aakp.org/AAKP/RenalifeArt/2003/keepingfit.htm
+http://www.aallnet.org/about/financial_plan_07_pricing.asp
+http://www.aallnet.org/chapter/basic_info.asp
+http://www.aallnet.org/chapter/sandall/rept_bdminutes2002-02.htm
+http://www.aals.org/2000international/english/australia.htm
+http://www.aals.org/2000international/english/china.htm
+http://www.aals.org/2000international/english/futureeropean.htm
+http://www.aals.org/FRS/FAR/faq.html
+http://www.aals.org/am2002/angresano.html
+http://www.aals.org/mlt2.html
+http://www.aamc.org/data/facultyroster/reports.htm
+http://www.aamc.org/members/facultydev/facultyvitae/jan05/lessons.htm
+http://www.aamc.org/newsroom/pressrel/2003/031109.htm
+http://www.aamc.org/newsroom/reporter/feb03/extramile.htm
+http://www.aameda.org/Specialtygroups/ActionAlerts/cardio90501.html
+http://www.aamft.org/families/Consumer_Updates/After_An_Affair.asp
+http://www.aami.org/CommitteeCentral/Committee/ShowMembershipForm.cfm
+http://www.aaminahdance.com/MEDiM7jan.2005.htm
+http://www.aamindell.net/specials_conflict.htm
+http://www.aaml.org/Articles/2002-2/Tips-McCullough.htm
+http://www.aaml.org/hiddenassets.htm
+http://www.aandaresume.com/
+http://www.aaos.org/wordhtml/bulletin/jan96/rays.htm
+http://www.aap.org/advocacy/washing/rick_09_24_2002_testimony.htm
+http://www.aap.org/advocacy/washing/test8039.htm
+http://www.aap.org/family/steroids.htm
+http://www.aapa.org/annual-conf/neworleans03/traveltips.html
+http://www.aapd-dc.org/News/medicaid/longtermcare.html
+http://www.aapd-dc.org/policies/HIVdrug.html
+http://www.aapg.org/business/hod/pre2000/9802.cfm
+http://www.aapn.org/kunming.html
+http://www.aapny.com/slinky.html
+http://www.aappb.net/ma_the_defendant.html
+http://www.aaps.ed.ac.uk/Committees/Senate/ugsc/RecentGuide/SpecialCircumstances.htm
+http://www.aaps.ed.ac.uk/committees/Senate/ugsc/RecentGuide/guidanceonSpecialCircumstancesCommittee.htm
+http://www.aapsj.org/view.asp?art=aapsj060319
+http://www.aapsj.org/view.asp?art=ps040427
+http://www.aapspharmscitech.org/view.asp?art=pt020421&pdf=yes
+http://www.aarc.org/education/meetings/congress_04/program/saturday.asp
+http://www.aardvark.co.nz/daily/2002/0508.shtml
+http://www.aare.edu.au/00pap/ems00149.htm
+http://www.aare.edu.au/00pap/mcd00101.htm
+http://www.aare.edu.au/02pap/and02399.htm
+http://www.aare.edu.au/02pap/kle02231.htm
+http://www.aare.edu.au/99pap/edm99535.htm
+http://www.aare.edu.au/99pap/leo99542.htm
+http://www.aare.edu.au/99pap/smi99558.htm
+http://www.aareit.com/article1.html
+http://www.aarf.org/scrapbook.htm
+http://www.aaronshep.com/rt/RTE13_Team.html
+http://www.aaronshep.com/stories/021.html
+http://www.aaronspersonaltraining.com/archive_110303.html
+http://www.aaronsw.com/weblog/000650
+http://www.aarp.org/Articles/a2003-06-04-nr041301b.html
+http://www.aarp.org/bulletin/prescription/Articles/a2003-11-26-oppurtunity.html
+http://www.aarp.org/bulletin/socialsec/Articles/a2004-12-28-success.html
+http://www.aarp.org/bulletin/yourlife/breakthrough.html
+http://www.aarp.org/families/caregiving/
+http://www.aarp.org/health-active/Articles/a2004-06-04-walking-fun.html
+http://www.aarp.org/health-active/Articles/a2004-06-17-walking-numerousbenefits.html
+http://www.aarp.org/health-active/walking/Articles/a2004-06-04-walking-fun.html
+http://www.aarp.org/health-active/walking/Articles/a2004-06-17-walking-numerousbenefits.html
+http://www.aarp.org/learntech/computers/books_sites/
+http://www.aarp.org/leisure/radio/pt/
+http://www.aarp.org/life/caregiving/Articles/a2003-10-27-caregiving-wholefamily.html
+http://www.aarp.org/money/careers/findingajob/interviews/Articles/a2004-06-24-first90days.html
+http://www.aarp.org/money/taxaide/taxcounseling/custom/taxaide_scripts/taxcounseling/get_faqs_py?faq=10
+http://www.aarp.org/olderwiserwired/oww-features/Articles/a2004-03-03-usability-studies.html
+http://www.aarp.org/research/assistance/medicaid/aresearch-import-45-INB79
+http://www.aarp.org/worldwide/Articles/a2004-09-29-faq-livingabroad.html
+http://www.aarpmagazine.org/health/Articles/a2003-08-20-going_steady
+http://www.aarpmagazine.org/lifestyle/Articles/a2003-09-23-seekinglove.html
+http://www.aarpmagazine.org/lifestyle/Articles/a2004-07-20-mag-oldlove.html
+http://www.aarpmagazine.org/money/whose_house_is_it_anyway
+http://www.aarpmagazine.org/money/whose_house_is_it_anyway.html
+http://www.aarrgghh.com/no_way/japRock.htm
+http://www.aarweb.org/faq/annualmeet.asp
+http://www.aas.duke.edu/comp/lrp/appendixH.html
+http://www.aas.duke.edu/faculty/dusbook/role.html
+http://www.aas.duke.edu/news/topstories/preprofessional_advising.php
+http://www.aas.duke.edu/trinity/prehealth/faq/
+http://www.aas.org/career/Summer.html
+http://www.aasa.dshs.wa.gov/Library/publications/htmlversions/Alzheimer.htm
+http://www.aasa.org/issues_and_insights/district_organization/Reform/Approach/highscp.htm
+http://www.aasa.org/publications/sa/1997_10/weast_sidebar_merger.htm
+http://www.aasa.org/publications/sa/1999_03/lawton.htm
+http://www.aasa.org/publications/sa/2001_05/2001_mcbeath.htm
+http://www.aasa.org/publications/sa/2002_02/Farson.htm
+http://www.aasa.org/publications/sa/2003_01/SmolkinIAQ.htm
+http://www.aasa.org/publications/sa/2004_11/focus_young.htm
+http://www.aascu.org/policy/alerts_05/011105.htm
+http://www.aascu.org/policy/sid_04/leg.htm
+http://www.aasianst.org/EAA/drake.htm
+http://www.aasianst.org/absts/1997abst/japan/j118.htm
+http://www.aasted.org/GC/c-tut.php
+http://www.aatraffic.com/downloads.htm
+http://www.aauj.edu/faculties/art/biologycourses.htm
+http://www.aaup.org/Com-a/Com-a%20Archives/2001/a01dub1.htm
+http://www.aaup.org/publications/Academe/2000/00nd/ND00MORT.HTM
+http://www.aaup.org/publications/Academe/2002/02so/02somey.htm
+http://www.aaup.org/publications/Academe/2003/03ja/03jacrai.htm
+http://www.aaup.org/publications/Academe/2003/03nd/03ndaw.htm
+http://www.aaup.org/publications/Academe/2004/04ja/04jareed.htm
+http://www.aaup.org/statements/Redbook/StDistEd.HTM
+http://www.aauw.org/about/jobmarket.cfm
+http://www.aauw.org/community_programs/leadership_opportunities/leadership_dev.cfm
+http://www.aave.com/questions.php
+http://www.ab-workout.com/Newsletters/6-newsletter-ab-workout.htm
+http://www.ab.com/safety/safety_now/february04/bright_future/
+http://www.aba.com/Industry+Issues/BankEconomistOutlook.htm
+http://www.ababj.com/Feature10.html
+http://www.ababj.com/community_1297.html
+http://www.abacc.com/07Employment/PostingEmp.html
+http://www.abacci.com/atlas/economy.asp?countryID=234
+http://www.abacci.com/atlas/economy3.asp?countryID=234
+http://www.abacom.com/~jkrause/barebone.html
+http://www.abag.ca.gov/planning/smartgrowth/2ndRndworkshop.html
+http://www.abag.ca.gov/planning/smartgrowth/FAQ1.html
+http://www.abanet.org/buslaw/blt/bltjan01greenberger.html
+http://www.abanet.org/cpr/2005topics.html
+http://www.abanet.org/genpractice/newlawyer/april03/dearmike.html
+http://www.abanet.org/irr/hr/spring02/benner.html
+http://www.abanet.org/irr/hr/spring02/vitiello.html
+http://www.abanet.org/irr/hr/summer00humanrights/grossman.html
+http://www.abanet.org/legaled/prelaw/prep.html
+http://www.abanet.org/legaled/publications/occasionalonline/occasional9.html
+http://www.abanet.org/legalservices/probono/soc/domesticviolence.html
+http://www.abanet.org/legalservices/specialization/your.html
+http://www.abanet.org/lpm/lpt/articles/fin0214031.html
+http://www.abanet.org/lpm/lpt/articles/nosearch/fin0214031_print.html
+http://www.abanet.org/poladv/priorities/tax.html
+http://www.abanico-es.com/
+http://www.abanico-es.com/spanish/courses/08-spanish-medical-course.html
+http://www.abarnett.demon.co.uk/atheism/eden.html
+http://www.abb.com/global/abbzh/abbzh250.nsf/0/8503aa82ad77d85fc1256ce10051e8d3?OpenDocument
+http://www.abb.com/global/seitp/seitp202.nsf/0/c1256c290031524bc12567310024e1f8?OpenDocument
+http://www.abb.com/global/seitp/seitp255.nsf/0/d5210c4e1f10e6c1c1256c6a004870fc?OpenDocument
+http://www.abbasite.com/music/
+http://www.abbasite.com/music/album.php?id=192
+http://www.abbey.com/future/taxeff/savings_isas/savings_isas_easy_isa.html
+http://www.abbey.com/guides_tools/guides_tools_home_guide.html
+http://www.abbeycarpet.com/guides_preparing.asp
+http://www.abbeyclock.com/cecil/
+http://www.abbeyskaffeehaus.com/beautiful_muslim_women.htm
+http://www.abbeyskaffeehaus.com/dating_bangalore_india.htm
+http://www.abbeyskaffeehaus.com/georgia_black_single.htm
+http://www.abbeyskaffeehaus.com/indian_girls_for_dating.htm
+http://www.abbeyskaffeehaus.com/muslim_marriage.htm
+http://www.abbeyskaffeehaus.com/muslim_matrimony.htm
+http://www.abbeyskaffeehaus.com/online_date.htm
+http://www.abbeyskaffeehaus.com/seeking_romance.htm
+http://www.abbeyskaffeehaus.com/single_christian_network.htm
+http://www.abbeyskaffeehaus.com/single_teens.htm
+http://www.abbott-langer.com/alafun.html
+http://www.abbott-langer.com/lawsumm.html
+http://www.abbottcom.com/new_page_5.htm
+http://www.abbottcom.com/teaching_in_africa.htm
+http://www.abbytravis.com/dearest.html
+http://www.abc-of-yoga.com/beginnersguide/yogasystem.asp
+http://www.abc-usa.org/gensec/200411armgbreport.html
+http://www.abc-usa.org/news/2002/20021116.html
+http://www.abc.net.au/7.30/content/2004/s1126651.htm
+http://www.abc.net.au/7.30/content/2005/s1323223.htm
+http://www.abc.net.au/7.30/content/2005/s1376202.htm
+http://www.abc.net.au/7.30/content/2005/s1382443.htm
+http://www.abc.net.au/7.30/stories/s61189.htm
+http://www.abc.net.au/arts/artok/bodyart/s197594.htm
+http://www.abc.net.au/arts/books/stories/s424272.htm
+http://www.abc.net.au/arts/strange/workshop/symbols.htm
+http://www.abc.net.au/atthemovies/txt/s1171834.htm
+http://www.abc.net.au/austory/content/2005/s1385834.htm
+http://www.abc.net.au/austory/transcripts/s479623.htm
+http://www.abc.net.au/blackfriday/misc/about.htm
+http://www.abc.net.au/cgi-bin/common/printfriendly.pl?/science/features/skippysizeme/default.htm
+http://www.abc.net.au/classic/daily/stories/s1151251.htm
+http://www.abc.net.au/corp/pubs/legal/court/chap9.html
+http://www.abc.net.au/dynasties/txt/s1254636.htm
+http://www.abc.net.au/elections/wa/2005/guide/darl.htm
+http://www.abc.net.au/elections/wa/2005/guide/electoralsystem.htm
+http://www.abc.net.au/elections/wa/2005/guide/keysbyparty.htm
+http://www.abc.net.au/federation/fedstory/ep4/ep4_places.htm
+http://www.abc.net.au/health/regions/features/countrylife/default.htm
+http://www.abc.net.au/hobart/stories/s937312.htm
+http://www.abc.net.au/lateline/content/2001/s393842.htm
+http://www.abc.net.au/lateline/content/2003/s1003782.htm
+http://www.abc.net.au/lateline/content/2004/s1257787.htm
+http://www.abc.net.au/lateline/stories/s148830.htm
+http://www.abc.net.au/lateline/stories/s551417.htm
+http://www.abc.net.au/lawmatters/s322818.htm
+http://www.abc.net.au/mediawatch/transcripts/s175489.htm
+http://www.abc.net.au/message/blackarts/film/s977838.htm
+http://www.abc.net.au/message/tv/ms/s1040944.htm
+http://www.abc.net.au/pm/content/2005/s1381412.htm
+http://www.abc.net.au/pm/content/2005/s1396353.htm
+http://www.abc.net.au/quantum/stories/s112352.htm
+http://www.abc.net.au/rn/arts/deepend/features/slam/slam2004/slammers.htm
+http://www.abc.net.au/rn/bigidea/stories/s1077245.htm
+http://www.abc.net.au/rn/music/mshow/s697057.htm
+http://www.abc.net.au/rn/science/incon/stories/s1370806.htm
+http://www.abc.net.au/rn/science/mind/s850880.htm
+http://www.abc.net.au/rn/science/mind/s919229.htm
+http://www.abc.net.au/rn/science/mind/stories/s1343419.htm
+http://www.abc.net.au/rn/science/ockham/stories/s1074413.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s1059052.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s1329165.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s1356468.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s1372036.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s1396044.htm
+http://www.abc.net.au/rn/talks/8.30/helthrpt/stories/s19957.htm
+http://www.abc.net.au/rn/talks/8.30/lawrpt/stories/s1374457.htm
+http://www.abc.net.au/rn/talks/8.30/relrpt/stories/s1267862.htm
+http://www.abc.net.au/rn/talks/bbing/stories/s1265568.htm
+http://www.abc.net.au/rn/talks/bbing/stories/s607577.htm
+http://www.abc.net.au/rn/talks/natint/stories/s1379462.htm
+http://www.abc.net.au/rural/content/2005/s1384063.htm
+http://www.abc.net.au/science/bigquestions/s460740.htm
+http://www.abc.net.au/science/descent/trans4a.htm
+http://www.abc.net.au/science/features/liars/default.htm
+http://www.abc.net.au/science/features/skippysizeme/
+http://www.abc.net.au/science/forensic/the_suspects.htm
+http://www.abc.net.au/science/k2/stn/
+http://www.abc.net.au/science/k2/stn/default.htm
+http://www.abc.net.au/science/news/stories/s1364351.htm
+http://www.abc.net.au/shortstories/stories/s1390769.htm
+http://www.abc.net.au/shortstories/stories/s1390942.htm
+http://www.abc.net.au/sport/content/200506/s1394995.htm
+http://www.abc.net.au/sundaynights/stories/s1238296.htm
+http://www.abc.net.au/triplej/review/album/s784867.htm
+http://www.abc.net.au/triplej/review/film/s1054241.htm
+http://www.abc.net.au/tropic/
+http://www.abc.net.au/worldcup2002/croatia/croatia.htm
+http://www.abc.net.au/worldtoday/content/2005/s1354465.htm
+http://www.abc.net.au/worldtoday/content/2005/s1393886.htm
+http://www.abcadvisors.com/resources.asp?ARTICLEID=wag0006.htm
+http://www.abcawards.co.uk/counselling.html
+http://www.abcbodybuilding.com/anatomy/zfactor2.htm
+http://www.abcbodybuilding.com/magazine/windowofopportunity.htm
+http://www.abcbookworld.com/?state=view_author&author_id=7197
+http://www.abchance.com/about/about.html
+http://www.abchomepreschool.com/
+http://www.abcnews.go.com/sections/politics/DailyNews/TheNote_Dec6.html
+http://www.abcnews.go.com/sections/politics/TheNote/TheNote_Aug2004.html
+http://www.abcny.org/taskforce.html
+http://www.abcofcricket.com/Article_Library/news120203/news120203a/news120203a.htm
+http://www.abcog.org/bsunday.htm
+http://www.abcog.org/plant.htm
+http://www.abcog.org/xmas.htm
+http://www.abcounties.co.uk/bpa/bpasection2.htm
+http://www.abcte.org/about.html
+http://www.abcteach.com/StudentTeachers/StudentTeacher.htm
+http://www.abcteach.com/directory/basics/reading/
+http://www.abcteach.com/directory/theme_units/month_to_month/i_september/apples/
+http://www.abcteachingjobs.com/terms.html
+http://www.abctranslations.com/education-translation.aspx
+http://www.abcusamissions.org/missiongiving/treasurer.cfm
+http://www.abdn.ac.uk/bestiary/codicology.hti
+http://www.abdn.ac.uk/heru/bpocpublications.hti
+http://www.abdn.ac.uk/mammal/recording.shtml
+http://www.abdn.ac.uk/mediareleases/archive/2000/pr765.hti
+http://www.abdn.ac.uk/prospectus/ugrad/law/law_info.php?code=law
+http://www.abdn.ac.uk/registry/graduation/info.shtml
+http://www.abdn.ac.uk/registry/tuitionfees/support.shtml
+http://www.abdn.ac.uk/sras/international/shorttime2.shtml
+http://www.abdn.ac.uk/~nhi600/zoo/manuals/level3/page%2016.html
+http://www.abe.com/
+http://www.abeautifulrevolution.com/andre/
+http://www.abebooks.com/
+http://www.abebooks.com/docs/BooksellerCentral/Tips/Account/
+http://www.abel.net.uk/~sayer/looking.htm
+http://www.abelard.org/hear/hear.htm
+http://www.abelard.org/news/behaviour0501.php
+http://www.abelard.org/news/behaviour5.htm
+http://www.abelard.org/turpap/turpap.htm
+http://www.abelladental.com/office/financial.html
+http://www.abelplacement.com/jobs.html
+http://www.aber.ac.uk/history/bigbib.html
+http://www.aber.ac.uk/infopolicies/pub-scheme-intro.shtml
+http://www.aber.ac.uk/media/Modules/MC30820/last_stick.html
+http://www.aber.ac.uk/media/Modules/TF33120/tv-violence_and_kids.html
+http://www.aber.ac.uk/media/Students/crl9501.html
+http://www.aber.ac.uk/media/Students/cvp0001.html
+http://www.aber.ac.uk/media/Students/lzh9402.html
+http://www.aber.ac.uk/plantpathol/celldeath.htm
+http://www.aberdeencity.gov.uk/acc/yourcouncil/bonaccord/13%20january%202003/frontpage.asp
+http://www.aberdeencity.gov.uk/acc/yourcouncil/departments/citydev/default.asp
+http://www.aberdeencvb.com/grouptours.html
+http://www.aberdeennews.com/mld/aberdeennews/news/breaking_news/10827692.htm
+http://www.abess.com/glossary.html
+http://www.abffe.com/myth1.htm
+http://www.abhijeetsingh.com/arms/india/laws/rules/rule_37_40.html
+http://www.abika.com/Reports/Samples/Verifycollegedegree.htm
+http://www.ability.com/sales/products/abvsms.php?ln=us
+http://www.abilitycenter.org/newsletters/defiance/summer2004.html
+http://www.abilitymaine.org/guides/medical.html
+http://www.abim.org/cert/comccm.shtm
+http://www.abim.org/faq/faqresults.shtm
+http://www.abiresearch.com/products/market_research/Worldwide_CATV_Infrastructure_Market
+http://www.abisource.com/information/news/2004/awn180.phtml
+http://www.abisource.com/information/news/2004/awn180.phtml?printable=1
+http://www.abisource.com/information/news/2004/awn184.phtml
+http://www.abisource.com/information/news/2004/awn184.phtml?printable=1
+http://www.abiword.org/information/news/2004/awn184.phtml
+http://www.abiword.org/information/news/2004/awn184.phtml?printable=1
+http://www.abiz.com.au/Black_Friday_online_sales_hit_new_high_but_survey_suggests_caution.htm
+http://www.abkhazia-georgia.parliament.ge/Publications/Foreign/maarten.htm
+http://www.able.state.pa.us/able/cwp/view.asp?a=15&Q=81273
+http://www.able2know.com/forums/about16547.html&highlight=
+http://www.able2know.com/forums/about39599-300.html
+http://www.able2know.com/forums/about43121-0.html
+http://www.able2know.com/forums/about43121.html
+http://www.able2know.com/forums/about52693.html
+http://www.able2know.com/forums/about8728.html
+http://www.abledata.com/abledata_docs/One_Eye.htm
+http://www.ablestable.com/resources/library/glossary/p.htm
+http://www.ablongman.com/mikelonis/introStudyGuideGSEA.html
+http://www.abnamroprivatebanking.com/lc-glos-f6.htm
+http://www.aboriginalgenocide.com.au/current/00071.html
+http://www.aboriginalradio.com/main.shtml
+http://www.abortionconcern.org/stories/story036.php
+http://www.abortionconcern.org/stories/story048.php
+http://www.abortionfacts.com/online_books/giving_God_your_worst/chapter_10.asp
+http://www.abortionfacts.com/online_books/giving_God_your_worst/chapter_2.asp
+http://www.aboundinglove.org/sensational/sen-006c.php
+http://www.about-antiques.com/Cut-Glass.htm
+http://www.about-top-culinary-schools.com/
+http://www.aboutairships.com/
+http://www.aboutbritain.com/Articles/dales-way.asp
+http://www.aboutbritain.com/BradfordIndustrialMuseum.htm
+http://www.aboutbritain.com/IndustrialAllRegions.htm
+http://www.aboutcoffee.net/2003_01_26_bcearc.html
+http://www.aboutcoffee.net/2003_06_08_bcearc.html
+http://www.aboutcosmeticdentistry.com/faqs/
+http://www.aboutfilm.com/movies/m/matrix-anlys.htm
+http://www.aboutibs.org/Publications/currentParticipate.html
+http://www.aboutincontinence.org/Gas.html
+http://www.aboutmyjob.com/main.php3?action=displayarticle&artid=1539
+http://www.aboutourkids.org/aboutour/articles/friends.html
+http://www.aboutourkids.org/aboutour/articles/grief.html
+http://www.aboutourkids.org/aboutour/articles/life_after_hs.html
+http://www.aboutourkids.org/aboutour/articles/mirror.html
+http://www.aboutscotland.com/bbsw.html
+http://www.aboutscotland.com/theroyalscots/histmcbane.html
+http://www.aboutseniors.com.au/Aged-Care-Housing-RVM.html
+http://www.aboutseniors.com.au/Aged-Care-Housing13.html
+http://www.aboutseniors.com.au/Computers-Seniors-Opinion-QA.html
+http://www.above-all.org/templates/cla15bl/Details.asp?id=24498&PID=125440
+http://www.abovetheorangetrees.com/journal/
+http://www.abovetopsecret.com/forum/thread103089/pg1
+http://www.abovetopsecret.com/forum/thread108492/pglastpost
+http://www.abovetopsecret.com/forum/thread113/pg1
+http://www.abovetopsecret.com/forum/thread84/pg5
+http://www.abovetopsecret.com/forum/thread95729/pg1
+http://www.aboyandhiscomputer.com/show.php?ItemID=2149
+http://www.abp.org/resident/profvign.htm
+http://www.abqjournal.com/north/157812north_news03-14-04.htm
+http://www.abqjournal.com/north/venuenorth/266431venuenorth12-03-04.htm
+http://www.abqjournal.com/santafe/277952north_news12-23-04.htm
+http://www.abqtrib.com/albq/bu_local/article/0,2565,ALBQ_19838_3459266,00.html
+http://www.abraauto.com/customer_education_description.cfm
+http://www.abrite.com/frelectrocleaners.htm
+http://www.abrn.com/abrn/article/articleDetail.jsp?id=49778
+http://www.abroadchina.net/past_experience/successful_stories.asp
+http://www.abroadviewmagazine.com/spring_04/cultivation.html
+http://www.abs-cbnnews.com/storypage.aspx?StoryId=9078
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/0b82c2f2654c3694ca2569de002139d9?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/0f071953d72f0323ca2569ad000402c9?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/135cb3f6cdc8210aca2569de002a302e?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/2d82eba2166e40b8ca256bd0002842b6?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/3be24b1cb70dcae1ca2568a90013941e?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/3f14d8d52dbf8c89ca256ef9000c2074?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/525e198ee27f1682ca2569de00267e45?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/56ddaf03cbb43963ca256a6200037785?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/8f91371434a8b77fca2569ad000402b8?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/989527f462991f5eca2568a90013933e?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/bcab87af85aec554ca256bd00026dcfb?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/0/fd628ff0e3f011d2ca256d32001cd4fd?OpenDocument
+http://www.abs.gov.au/Ausstats/abs@.nsf/Lookup/342ADDD50B93893BCA2569AD000402B1
+http://www.abs.gov.au/Ausstats/abs@.nsf/Lookup/B44BBD3B15E508F5CA256D32001DA2C8
+http://www.abs.gov.au/Ausstats/abs@.nsf/lookupMF/51C21550F77FDEA8CA2568A9001393E9
+http://www.abs.gov.au/ausstats/abs@.nsf/0/3ea34838c27eb18dca257030007c68a0?OpenDocument
+http://www.abs.gov.au/websitedbs/D3310114.nsf/home/What's%20New
+http://www.abs.gov.au/websitedbs/D3310116.NSF/0/2908d1611ede63dbca2566150081b263?OpenDocument
+http://www.absa.co.za/Individual/0,2999,21,00.html
+http://www.absc.usgs.gov/research/walrus/bering/bathy/
+http://www.absinthe-literary-review.com/stories/dekrey.htm
+http://www.absoft.com/Support/FAQ/win62tfaq.html
+http://www.absolutearts.com/artsnews/1999/07/21/25651.html
+http://www.absolutearts.com/artsnews/2001/02/19/28115.html
+http://www.absolutearts.com/artsnews/2004/01/12/31708.html
+http://www.absolutearts.com/artsnews/2005/01/03/32646.html
+http://www.absolutelypr.com/_wsn/page18.html
+http://www.absolutelyrics.com/lyrics/view/2pac/crooked_nigga_too_(produced_by_raphael_saadiq)/
+http://www.absolutelyrics.com/lyrics/view/memphis_bleek/change_up/
+http://www.absolutewrite.com/classes/Rosien/soulstories.htm
+http://www.absolutewrite.com/freelance_writing/falling_back_in_love.htm
+http://www.absolutewrite.com/freelance_writing/waiting_for_dollars.htm
+http://www.absolutewrite.com/novels/critique.htm
+http://www.absolutewrite.com/screenwriting/Cleaver/hollyweird_education_4.htm
+http://www.abstractconcreteworks.com/essays/teaching/beingateacher.html
+http://www.abstracts.net/nick-carter/
+http://www.absurdity.org/rmr/
+http://www.absurdity.org/rmr/lofi/
+http://www.abtdvd.com/archives/2003_12.html
+http://www.abundanthealth.com/video.html
+http://www.abuse-recovery-and-marriage-counseling.com/articles/addictions/step5.html
+http://www.abwag.com/
+http://www.abwag.com/act.htm
+http://www.abwag.com/how_to_get_started.htm
+http://www.ac.wwu.edu/~stephan/malthus/malthus.16.html
+http://www.ac.wwu.edu/~zaferan/index%20-%20sustainable%20design%20minor.htm
+http://www.aca.ch/acane55.htm
+http://www.acacamps.org/campmag/rm023risk.htm
+http://www.acacamps.org/media_center/view.php?file=camp_trends_article11.html
+http://www.acacamps.org/media_center/view.php?file=how_to_choose_article_aarp.html
+http://www.acacanines.com/liftleg.htm
+http://www.acad.sunytccc.edu/instruct/sbrown/math/study.htm
+http://www.acadat.com/HLC/Preseli/area/area272.htm
+http://www.academic.salford.ac.uk/sao/finance/access_learning_fund.php
+http://www.academicdb.com/seeing_world_around_usand_making_sense_it_seems_ve_3620/
+http://www.academicdress.com.au/Hoodcolours.html
+http://www.academicfoundation.com/n_detail/lawliber.asp
+http://www.academicinfo.net/usmod.html
+http://www.academicintl.com/spain/seville/summer_hispstu.html
+http://www.academicsenate.cc.ca.us/icas/Agendas/Downloads/EnclosuresJan05/ENCL%207A_AB%2023%20Assembly%20Bill.htm
+http://www.academon.com/lib/essay/church-of-england.html
+http://www.academon.com/lib/essay/jamaican-history-and-culture.html
+http://www.academy.umd.edu/AboutUs/news/articles/01-01-02.htm
+http://www.academyofbards.org/fanfic/p/psidraconis_adeptus7.html
+http://www.academyprosthodontics.org/outreach1.htm
+http://www.acadian-cajun.com/money.htm
+http://www.acadiawindows.com/aama.htm
+http://www.acadiawindows.com/guarante.htm
+http://www.acadweb.wwu.edu/hr/disability/FMLA.shtml
+http://www.acaeum.com/phpBB2/about1521.html
+http://www.acainternational.org/intcontent.aspx?via=search&cid=3205
+http://www.acas.org.uk/publications/AL05.html
+http://www.acas.org.uk/publications/B17.html
+http://www.acas.org.uk/services/dispute_mediation.html
+http://www.acb.org/resources/sports.html
+http://www.acbl.org/play/explanationEvents.html
+http://www.acbl.org/play/pairGamesExplained.html
+http://www.acbohio.org/newsletter.php?news=10
+http://www.acbs-adc.org/fwatch.html
+http://www.acbspn.com/lectures/Animal_expertise.htm
+http://www.acc-society.bc.ca/files_new/support.html
+http://www.acc.org/advocacy/weekly/archives/oct_01/102201.htm
+http://www.acc.org/clinical/bethesda/beth33/task_3.htm
+http://www.acc.org/clinical/consensus/ethics/taskforce3.htm
+http://www.acca.co.uk/publications/hsr/49/618275
+http://www.accaglobal.com/publications/corpsecrev/38/155743
+http://www.accaglobal.com/publications/public_eye/31/22765
+http://www.accaglobal.com/publications/studentaccountant/180984
+http://www.accampbell.uklinux.net/assassins/assassins-html/prologue.html
+http://www.accautomation.com/art4.htm
+http://www.accc.gov.au/content/index.phtml/itemId/606668/fromItemId/2332
+http://www.accc.gov.au/content/index.phtml/itemId/606668/fromItemId/2332?pageDefinitionItemId=16940
+http://www.accc.gov.au/content/index.phtml/itemId/88229
+http://www.accci.com.au/hill.htm
+http://www.accd.edu/sac/gov/alfaro/2301inetsyl.htm
+http://www.accd.edu/sac/lrc/susan/fitness.htm
+http://www.accelerando.org/
+http://www.accelerated-dog-training-health-grooming.com/
+http://www.acceleratingfuture.com/michael/
+http://www.accent-resume-writing.com/tips/
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C1.2002%5Csiam.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C1_2004%5Cmanage.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C1_2005%5Cit_gov.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C2.2003%5Cinfo_tech.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C3_2004%5Cinterview_szygenda.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5C6.99%5Cover_reform.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Coutlook%5Cpov%5Cpov_convert.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=ideas%5Crole%5Ccio.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=industries%5Cresources%5Cenergy%5Courideas%5Cener_poveandp.xml
+http://www.accenture.com/xd/xd.asp?it=enweb&xd=locations%5Cmalaysia%5Cideas%5Crevenue.xml
+http://www.accepted.com/aboutus/presentations.aspx
+http://www.access-africa.com/Sudan%20Map%20and%20%20Sudan%20information-africa.htm
+http://www.access-board.gov/links/disability.htm
+http://www.access-board.gov/prowac/comments/comments-10-28/saltlake.htm
+http://www.access-board.gov/research&training/Toilet-Bath/report.htm
+http://www.access-board.gov/sec508/guide/1194.22.htm
+http://www.access-travel.co.uk/bookcond.html
+http://www.access.gpo.gov/bis/fedreg/ear_fedreg97.html
+http://www.access.gpo.gov/congress/senate/srules04.htm
+http://www.access.gpo.gov/congress/senate/srules17.html
+http://www.access.gpo.gov/nara/cfr/waisidx_01/26cfr1v7_01.html
+http://www.access.gpo.gov/nara/cfr/waisidx_03/26cfr1v7_03.html
+http://www.access.gpo.gov/nara/cfr/waisidx_03/29cfr778_03.html
+http://www.access.gpo.gov/nara/cfr/waisidx_04/26cfrv7_04.html
+http://www.access.gpo.gov/nara/cfr/waisidx_98/29cfr778_98.html
+http://www.access.gpo.gov/nara/cfr/waisidx_99/5cfr532_99.html
+http://www.access.gpo.gov/uscode/title28a/28a_5_9_.html
+http://www.access.uconn.edu/foic.html
+http://www.accessabc.com/press1/ma0704.htm
+http://www.accessarkansas.org/dhs/webpolicy/TEA%20Policy/TEA2000.htm
+http://www.accessatlanta.com/arts/content/arts/0605/17spoletolessons.html
+http://www.accesscom.com/~darius/writings/scheme-for-lispers.html
+http://www.accessdata.fda.gov/scripts/cdrh/cfdocs/psn/transcript.cfm?show=22
+http://www.accessdata.fda.gov/scripts/cdrh/cfdocs/psn/transcript.cfm?show=31
+http://www.accessexcellence.org/HHQ/qow/qow03/qow040510.html
+http://www.accessexcellence.org/RC/AB/BA/European_Attitudes.html
+http://www.accessexcellence.org/RC/AB/IE/Future_Of_Genetic_Research.html
+http://www.accessexcellence.org/RC/AB/IE/Genetic_Testing.html
+http://www.accessexcellence.org/RC/AB/IWT/Why_it_Matters.html
+http://www.accessgenealogy.com/native/tribes/abenaki/abenakichiefs.htm
+http://www.accessibilityforum.org/docs/webcast_10-30/ecast_part2.html
+http://www.accessify.com/blog/archive/2005_03_01_default.asp
+http://www.accessifyforum.com/viewtopic.php?t=2905&start=15
+http://www.accessnorthga.com/news/hall/newfullstory.asp?ID=85507
+http://www.accessnorthga.com/news/hall/newfullstory.asp?ID=88609
+http://www.accesspr.com/mediarelations.html
+http://www.accesstoinsight.org/bfaq.html
+http://www.accesstoinsight.org/canon/sutta/majjhima/mn054.html
+http://www.accesstoinsight.org/glossary.html
+http://www.accesstoinsight.org/lib/authors/thanissaro/likefire/
+http://www.accesstoinsight.org/lib/bps/leaves/bl137.html
+http://www.accesstoinsight.org/lib/bps/news/essay09.html
+http://www.accesstoinsight.org/lib/bps/news/essay14.html
+http://www.accesstoinsight.org/lib/bps/wheels/wheel367.html
+http://www.accesstoinsight.org/lib/modern/thanissaro/economy.html
+http://www.accesstoinsight.org/lib/thai/
+http://www.accessup.org/anime/comment.asp?file=Final%20Fantasy7%60game&wanted=ze&lang=e
+http://www.accessup.org/anime/comment.asp?file=Final%20Fantasy8%60game&wanted=pe&lang=e
+http://www.accessup.org/anime/comment.asp?file=Final%20Fantasy9%60game&wanted=p&lang=e
+http://www.accf.org/publications/newsletter/
+http://www.accf.org/publications/testimonies/test-maine-climate.html
+http://www.accidentaljulie.com/index2.php?p=2002_07_01_archive.html
+http://www.accidentdynamics.com/Manual.htm
+http://www.acclaimimages.com/search_terms/stock_markets.html
+http://www.acclaimimages.com/search_terms/stockmarket.html
+http://www.acclaimimages.com/search_terms/stockmarkets.html
+http://www.accom.com/support/tech-support/faqs/wsd-faqs/faq_xtreme_hardware.html
+http://www.accordions.com/index/gen/lea/gen_lea.shtml
+http://www.accordionusa.com/ar_07_01.htm
+http://www.accorhotels-asia.com/hotel/nov/sport.asp
+http://www.accorhotels-asia.com/hotel/sof/sport.asp
+http://www.accorthalassa.com/hotel_accor_thalassa_england/hotel_thalasso.html
+http://www.accorthalassa.com/hotel_accor_thalassa_england/serenity_spa.html
+http://www.accountancy.com.pk/newsgen.asp?newsid=1556
+http://www.accountancy.com.pk/newsgen.asp?newsid=912
+http://www.accountancyage.com/analysis/1131559
+http://www.accountancyage.com/comment/1134305
+http://www.accountancyage.com/news/1139344
+http://www.accountancyagejobs.com/features/1154883
+http://www.accountancyireland.ie/dsp_articles.cfm/goto/1009/page/Corporate_Social_Responsibility.htm
+http://www.accountantsworld.com/DesktopDefault.aspx?Page=practicedev&Category=Resources&Links=New+Service-+Fin.+Planning
+http://www.accountingsoftwarenews.com/accpacadvan/index.shtml
+http://www.accountixstaffing.com/readarticle.asp?file=brokenjobmarket.htm
+http://www.accpa.com.au/page.php?d=88
+http://www.acct.ipfw.edu/ap/pers_scv/itinssn.htm
+http://www.accta.net/2004_Conference/Conference%20Minutes/Awards%20Dinner%20w-revisions.htm
+http://www.accts.org/ethics/norway/garrettt.htm
+http://www.accu-usa.org/2000-08.html
+http://www.accu.org/bookreviews/public/reviews/0cv/10-4.htm
+http://www.accu.org/resources/public/terse/cpp.htm
+http://www.accugenix.com/reflib-gloss.htm
+http://www.accunet.org/
+http://www.acde.org/common/alerts/ecstasystory.htm
+http://www.acdlabs.com/publish/chemsketch_reviews.html
+http://www.acdoctor.com/air_quality/indoor_air_quality.htm
+http://www.ace-centre.org.uk/html/cap/capdescription.html
+http://www.ace-scla.com/04/agenda/sl1.html
+http://www.ace.co.nz/tools/courses/course_app.asp?ccode=WES
+http://www.acecameras.co.uk/asp/web/content/termsandconditions/content.asp
+http://www.acefitness.org/fitfacts/fitfacts_display.cfm?itemid=37
+http://www.acegraphics.com.au/articles/wagner03.html
+http://www.acehkita.com/en/content.php?op=modload&name=berita&file=print&coid=530&lang=2
+http://www.acehkita.com/en/content.php?op=modload&name=reportase&file=view&coid=530&lang=2
+http://www.acei.neu.edu/CONSTIT.htm
+http://www.aceinfo.net.au/Services/DRA/Products/children.html
+http://www.acenet.edu/hena/readArticle.cfm?articleID=16
+http://www.acenetworks.org/frames/fvorientation_guide.htm
+http://www.acenursing.com/
+http://www.acep.org/1,33259,0.html
+http://www.acepilots.com/unscam/
+http://www.acepilots.com/usaaf_eto_aces.html
+http://www.acepilots.com/wwi/pio_ksmith.html
+http://www.aceproject.org/main/english/es/esy_ie.htm
+http://www.aceproject.org/main/english/lf/lfb.htm
+http://www.acerentalcars.co.nz/new-zealand/clothing.html
+http://www.aces.edu/department/crd/publications/CRD-22.html
+http://www.aces.edu/urban/metronews/vol2no1/ecosystem.html
+http://www.acet-international.org/
+http://www.acf.asn.au/Standards/Bengal.htm
+http://www.acf.dhhs.gov/programs/cse/pol/DCL/dcl-02-35.htm
+http://www.acf.dhhs.gov/programs/ofa/pi2002-3.htm
+http://www.acf.dhhs.gov/programs/pcpid/pcpid_12703meetingminutes.html
+http://www.acf.hhs.gov/programs/cse/pol/PIQ/2004/piq-04-01.htm
+http://www.acf.hhs.gov/programs/cse/rpt/chap4.htm
+http://www.acf.hhs.gov/programs/hsb/publications/communiqueApr03.htm
+http://www.acf.hhs.gov/programs/hsb/research/21_century/expanding.htm
+http://www.acf.hhs.gov/programs/ofa/annualreport6/chapter01/chap01.htm
+http://www.acf.hhs.gov/programs/opre/ehs/ehs_resrch/instruments/instructors_manual/instructors_manual01.html
+http://www.acf.hhs.gov/programs/opre/ehs/ehs_resrch/reports/how_tosave_ppt.html
+http://www.acf.hhs.gov/trafficking/campaign_kits/tool_kit_health/identify_victims.html
+http://www.acfb.org/help/give_food/
+http://www.acfcheckers.com/scans1.html
+http://www.acfid.asn.au/code/Code_complaint.htm
+http://www.acfn.org/news/100704-3/
+http://www.acftu.org.cn/unionlaw.htm
+http://www.acg.gi.org/patients/gibleeding/index.asp
+http://www.acg.jhsph.edu/library/conference_2003/
+http://www.acghs.org/
+http://www.acgs.qld.edu.au/content/?id=34
+http://www.acheronengineering.com/Proffesional%20Staff.htm
+http://www.achewood.com/raysplace.php?date=05172005&allnav=
+http://www.achewood.com/raysplace.php?date=07092003&allnav=1
+http://www.achievebc.ca/cpt/jobprofiles/513.aspx?n=1
+http://www.achievement.org/autodoc/page/alb0int-1
+http://www.achievement.org/autodoc/page/ban0int-3
+http://www.achievement.org/autodoc/page/cam0int-4
+http://www.achievement.org/autodoc/page/hil0int-1
+http://www.achievement.org/autodoc/page/sch3int-2
+http://www.achievement.org/autodoc/page/tut0pro-1
+http://www.achievenetprofits.com/
+http://www.achievenetprofits.com/affiliate/scripts/t.php?a_aid=11&a_bid=3
+http://www.achievesuccess.uk.com/research.html
+http://www.achilltourism.com/festivals.html
+http://www.acholipeace.org/justice_news.html
+http://www.achp.gov/news-2-05achpbizmtg.html
+http://www.achr.net/000ACHRTsunami/Sri%20Lank%20TS/Tsunami%20Sri%20Lanka.htm
+http://www.achrnews.com/CDA/ArticleInformation/features/BNP__Features__Item/0,1338,92252,00.html
+http://www.aci.on.ca/catv/analog/troubleshooting.htm
+http://www.acia.sun.ac.za/projects/research/researcht.htm
+http://www.acid.uk.com/asp/display.asp?cat=membership+benefits
+http://www.acidmothers.com/Cgi-bin/crew/B_fathermoo/index_main.html
+http://www.aciworldwide.com/casestudies/
+http://www.acjournal.org/holdings/vol2/Iss1/essays/foster.htm
+http://www.aclaro.com/Site/Client_Center/WhitePapers.html
+http://www.aclosereyeview.com/Guest_Articles/Getting_Close/get_close.htm
+http://www.acls.org/op5brom.htm
+http://www.aclu-ky.org/
+http://www.aclu-sc.org/
+http://www.aclu-wa.org/Issues/students/Emmett-Kentlake.Student.Release3.30.00.html
+http://www.aclu-wa.org/Publications/Streetspeechpamphlet.html
+http://www.aclu-wi.org/youth/issues/issues.html
+http://www.aclu.org/Privacy/Privacy.cfm?ID=15952&c=39
+http://www.aclu.org/ReproductiveRights/ReproductiveRights.cfm?ID=10155&c=147
+http://www.aclu.org/ReproductiveRights/ReproductiveRights.cfm?ID=12944&c=147
+http://www.aclu.org/getequal/orga/launching2.html
+http://www.aclu.org/getequal/orga/launching5.html
+http://www.aclu.org/getequal/orga/making.html
+http://www.aclunc.org/students/demonstrate.html
+http://www.aclunc.org/students/guide/searches.html
+http://www.acluofnorthcarolina.org/studentrights2.html
+http://www.aclusandiego.org/protester_rights2003.html
+http://www.acluutah.org/prismorder.htm
+http://www.acluva.org/pages/requesthelp.html
+http://www.acm.ac.uk/disciplines/guitar.asp
+http://www.acm.ac.uk/learn-to-play-guitar.htm
+http://www.acm.ac.uk/music-business.htm
+http://www.acm.ac.uk/music-schools-in-the-uk.htm
+http://www.acm.ac.uk/part-time-music-courses.htm
+http://www.acm.ac.uk/rock-and-pop-musicians.htm
+http://www.acm.ac.uk/school-for-music.htm
+http://www.acm.edu/nickadams/01story2.htm
+http://www.acmandal.com/
+http://www.acmanet.org/about/committees.cfm
+http://www.acmegamer.com/
+http://www.acmela.com/shop.htm
+http://www.acmevermont.org/curriculum/curriculum_middle_electionLesson.asp
+http://www.acmi.net.au/AIC/DIORAMA_WOOD_1_4.html
+http://www.acmi.net.au/AIC/RADIO_HIST_AUS.html
+http://www.acmi.net.au/AIC/TELSTRA_CONNECT.html
+http://www.acmi.net.au/AIC/TV_HIST_CLIFFORD.html
+http://www.acmi.net.au/FAA4B196847E476EB67B398CD319FAB3.htm
+http://www.acminet.org/youth_art_month.htm
+http://www.acmuller.net/xml-tei-tut/ogahae-tgu2003.html
+http://www.acnatsci.org/museum/jefferson/otherPages/epochs.html
+http://www.acne-ltd.com/
+http://www.acne-tab.com/site/acupuncture-and-chinese-medicine-schools.html
+http://www.acnielsen.ca/Insights/Global%20Studies/ReachingtheBillionDollarMark.htm
+http://www.acnp.org/g4/GN401000184/CH180.html
+http://www.aco.org/ethics_technology/johannesburg_2002.htm
+http://www.aco.org/ethics_technology/lambeth_1998.htm
+http://www.acofp.org/member_publications/ca_0303.html
+http://www.acor.org/cnet/62944.html
+http://www.acord.org.uk/e-news/No4/Art6.htm
+http://www.acorntheater.com/expectations.htm
+http://www.acoustics.org/press/140th/lehrman.htm
+http://www.acoustics.org/press/145th/Newman.htm
+http://www.acoustics.org/press/147th/pedersen.htm
+http://www.acoustics.org/press/swa9601.html
+http://www.acousticshock.org/?id=press
+http://www.acoustiproducts.com/en/acoustifan.asp
+http://www.acp-cpa.ca/lettertoeditortips.htm
+http://www.acparis.org/sermons/2003_09_28_Blair.htm
+http://www.acpd.co.uk/48.html
+http://www.acponline.org/ethics/map_bibliography.htm
+http://www.acponline.org/journals/ecp/julaug01/shojania.htm
+http://www.acponline.org/journals/ecp/novdec00/hofer.htm
+http://www.acponline.org/journals/news/apr02/research.htm
+http://www.acponline.org/journals/news/may05/pm.htm
+http://www.acponline.org/public/h_care/10-griev.htm
+http://www.acq.osd.mil/dpap/contractpricing/vol2chap2.htm
+http://www.acq.osd.mil/dpap/contractpricing/vol2chap3.htm
+http://www.acq.osd.mil/dpap/contractpricing/vol2chap5.htm
+http://www.acq.osd.mil/dpap/contractpricing/vol4chap8.htm
+http://www.acq.osd.mil/dpap/contractpricing/vol5chap5.htm
+http://www.acq.osd.mil/dpap/dfars/html/current/252217.htm
+http://www.acq.osd.mil/sadbu/mentor_protege/participate/
+http://www.acqnet.gov/GSAM/current/html/Part502.html
+http://www.acqnet.gov/Library/OFPP/BestPractices/pastpeformguide.htm
+http://www.acre.org.uk/villagehalls.htm
+http://www.acs-aec.org/intss_eng.htm
+http://www.acs.edu.au/hort/roses/
+http://www.acs.ohio-state.edu/org/osuaaup/whitacre.html
+http://www.acs.org.au/national/pospaper/acs131.htm
+http://www.acs.org.au/president/1998/past/newlt.htm
+http://www.acscan.org/northcarolina
+http://www.acscd.ca/acscd/public/dhwn.nsf/0/69f5c5f3296f562288256b970082d1fd?OpenDocument
+http://www.acscsn.org/Talk_Shows_and_Stories/Featured_Talk_Shows/show74.html
+http://www.acsm-healthfitness.org/pt/re/acsm/fulltext.00135124-200505000-00008.htm
+http://www.acsnet.com/~cnoble/Tasks.html
+http://www.acsonline.org/factpack/bluewhl.htm
+http://www.acss.org/
+http://www.act-sat-prep.com/act2x.html
+http://www.act.org.nz/action/campaigns/manifesto2002/taxation.html
+http://www.act.org/actcenters/faq/
+http://www.actec.org/pubInfoArk/comm/engltrch1.htm
+http://www.acteonline.org/members/techniques/nov_dec02-story4.cfm
+http://www.acteonline.org/members/techniques/novdec03_story2.cfm
+http://www.acterna.com/united_states/workflow_solutions/
+http://www.actingconnection.com/coachingquotes.html
+http://www.actingconnection.com/sample.html
+http://www.action-figure.com/Article13266.html
+http://www.action-for-un-renewal.org.uk/pages/proposal_canadian_teacher.htm
+http://www.actionaid.org.uk/1092/press_release.html
+http://www.actionaid.org/pakistan/672.html
+http://www.actionaid.org/stratshope/oslaunch.html
+http://www.actionaids.org/
+http://www.actionbioscience.org/biotech/borlaug.html
+http://www.actionbioscience.org/evolution/benton.html
+http://www.actionbioscience.org/evolution/lenski.html
+http://www.actioncutprint.com/ezine-31.html
+http://www.actionsworld.com/termsandconditio.php
+http://www.actiontab.com/reading.html
+http://www.activator.com/classified.asp
+http://www.active-learning-site.com/sum1.htm
+http://www.active-marketer.com/2002/june/24.html
+http://www.active.com/healthclub/
+http://www.active.com/myevent/onestopshop/whateventdirectorssay.cfm
+http://www.active.com/story.cfm?story_id=6717&sidebar=569&category=century_challenge
+http://www.active.com/story.cfm?story_id=7874&sidebar=571&category=give_tri
+http://www.active.com/story.cfm?story_id=9363
+http://www.active.com/story.cfm?story_id=9703&page=2
+http://www.active.com/story.cfm?story_id=9769&category=healthclub&page=print
+http://www.active.com/story.cfm?story_id=9769&sidebar=576&category=healthclub
+http://www.active.com/walking/
+http://www.activebirthcentre.com/pb/cat_calendarofevents.shtml
+http://www.activeforlife.info/about_the_program/program_information.html
+http://www.activehotels.com/marketing_partners/item3.html
+http://www.activeliferx.com/
+http://www.activesurrey.com/content-1554
+http://www.activewin.com/reviews/xbox/software/2004/red/
+http://www.activia.co.uk/termsandconditions.asp
+http://www.activistnetwork.org.uk/modules.php?op=modload&name=News&file=article&sid=183
+http://www.activistnetwork.org.uk/modules.php?op=modload&name=News&file=article&sid=219
+http://www.activitiesforkids.com/holiday/holiday_hints.htm
+http://www.activitiesforkids.com/teacher.htm
+http://www.activitiesforkids.com/travel/travel_hints.htm
+http://www.activitywales.com/zap_cats.html
+http://www.activshopping.co.uk/
+http://www.actmagazine.com/appliedclinicaltrials/article/articleDetail.jsp?id=127796
+http://www.acton.org/blog/?/archives/224-The-New-Space-Capitalists.html
+http://www.acton.org/publicat/randl/article.php?id=344
+http://www.actorpoint.com/forums/archive/index.php/t-454.html
+http://www.actorsart.com/qualifiedcoaches.html
+http://www.actorschecklist.com/resources/commercial.html
+http://www.actorschecklist.com/resources/fitness.html
+http://www.actortips.com/products/clickbank_bsa_desc.htm
+http://www.acts.twu.ca/lbr/research_essays2.htm
+http://www.actsa.org/Angola/apm/apm0609.html
+http://www.actsofvolition.com/archives/2002/september/humanoidrobot
+http://www.actu.asn.au/public/international/apheda/1105576936_19292.html
+http://www.actu.asn.au/public/papers/2001july/
+http://www.actuaries.ie/About_the_Society/Constitution/Disciplinary_Scheme_Rules/Disciplinary_Scheme_Rules.htm
+http://www.actuary.ca/actuarial_discussion_forum/showthread.php?t=44714
+http://www.actuaryonline.com/announce.htm
+http://www.acu.edu/academics/adamscenter/resources/coursedev/syllabus/model/policies/content.html
+http://www.acu.org.uk/Home.asp
+http://www.acufinder.com/Learning_Center/Herbal_Medicine/Way_of_Tea.htm
+http://www.acufinder.com/learningcenter_article.asp?DID=43
+http://www.acuho.ohio-state.edu/2005conf/Staff%20Supervision%20and%20Developement.htm
+http://www.acumedic.com/mediapu/cnj200602.htm
+http://www.acupuncture.com/qigong_tuina/24rules.htm
+http://www.acupuncturetoday.com/archives2000/aug/08ginkgo.html
+http://www.acupuncturetoday.com/archives2000/may/05sheng.html
+http://www.acupuncturetoday.com/archives2004/jan/01tea.html
+http://www.acus.org/publications/bulletins/Other%20Bulletins/ForRelPriorities.html
+http://www.acutcmdetox.com/hiv.htm
+http://www.acypher.com/BookNotes/Gilligan.html
+http://www.ad-tech.com/sessions_byDay.asp?reqEvent=7
+http://www.ad.uiuc.edu/implement_sla.htm
+http://www.ad2000.com.au/articles/1996/oct1996p10_879.html
+http://www.ada.asn.au/policy3.htm
+http://www.ada.asn.au/policy6.htm
+http://www.adaction.org/Campaign2004/BushRecord/bushrecord.html
+http://www.adaeveningnews.com/Adanewswebpages/lettertoeditor.htm
+http://www.adage.com/news.cms?newsId=35639
+http://www.adahome.com/FAQ/team-ada.html
+http://www.adam2.org/dir/Society/Religion_and_Spirituality/Opposing_Views/Christianity/Latter_Day_Saints/index.cgi
+http://www.adambosworth.net/archives/000016.html
+http://www.adambosworth.net/archives/000017.html
+http://www.adambosworth.net/archives/000031.html
+http://www.adammathes.com/academic/computer-mediated-communication/folksonomies.html
+http://www.adammessinger.com/
+http://www.adammessinger.com/2004/05/18/michael-moore-lights-a-fire-under-cannes-with-fahrenheit-911
+http://www.adammessinger.com/2005/01/
+http://www.adammessinger.com/category/arty-stuff/web-design/
+http://www.adamsgs.org.uk/parents/Independent%20Learning%20Project%20report%20with%20Y7%202003-4.htm
+http://www.adamsmith.org/cissues/education/education-dept.htm
+http://www.adamsmith.org/cissues/pharmacy-distribution.htm
+http://www.adamsmith.org/home.htm
+http://www.adamsmith.org/policy/publications/tax-and-economy-pub.htm
+http://www.adamsmith.org/smith/quotes.htm
+http://www.adamsmith.org/smith/tms/tms-p1-s3-c3.htm
+http://www.adamsmith.org/smith/won-b2-c5.htm
+http://www.adamsmith.org/smith/won-b3-c1.htm
+http://www.adamsmith.org/thinkpiece/001337.php
+http://www.adaptivepath.com/publications/essays/archives/000032.php
+http://www.adaptivepath.com/publications/essays/archives/000365.php
+http://www.adaptivepath.com/publications/essays/archives/000385.php
+http://www.adaptivepath.com/publications/newsletter/archives/032105/index.php
+http://www.adawatch.org/
+http://www.adb.org/Documents/Speeches/2001/ms2001012.asp
+http://www.adb.org/Publications/default.asp
+http://www.adc.org/action/2001/14september2001.htm
+http://www.adc.org/index.php?id=275
+http://www.addaong.org/abc.html
+http://www.addconsults.com/
+http://www.addenbrookes.org.uk/shac/contracept.html
+http://www.addenbrookes.org.uk/working/work_life.html
+http://www.addictioncareoptions.com/club-drugs.htm
+http://www.addictmud.org/files/impale.html
+http://www.addistribune.com/Archives/2003/11/07-11-03/Agony.htm
+http://www.additudemag.com/experts.asp?DEPT_NO=302&SUB_NO=6
+http://www.additudemag.com/selfhelp.asp?DEPT_NO=408&SUB_NO=26
+http://www.addresources.org/article_home_school_report_rabiner.php
+http://www.addresources.org/article_social_skills_brown.php
+http://www.addresources.org/conference_2003_presenters.php
+http://www.addvance.com/help/adults/challenges.html
+http://www.ade.state.az.us/standards/aims/PerformanceStandards/hsreadingdescrip.asp
+http://www.adeanet.org/wgnfe/publications/abel/abel1.html
+http://www.adec.edu/clemson/papers/stukel.html
+http://www.adecco.co.uk/pr
+http://www.adecco.co.uk/pr?year=0
+http://www.adelaide.edu.au/ANZCCART/text/ethics.html
+http://www.adelaide.edu.au/campuses/northtce/
+http://www.adelaide.edu.au/news/news281.html
+http://www.adelaidejmuseum.org/history/peopleinthearts.htm
+http://www.adelphia.net/news/read.php?id=11693004&ps=1018&cat=&cps=0
+http://www.adelphia.net/news/read.php?id=11992325&ps=1014&cat=&cps=0
+http://www.adem.state.ar.us/documents/SERC/SERC%20minutes.htm
+http://www.adeptscience.dk/produkter/chemoffice/akcros.html
+http://www.adequacy.org/public/stories/2001.10.17.7917.2028.html
+http://www.adest.com.au/joe-dinapoli-trades.htm
+http://www.adf.gov/enews0504war.htm
+http://www.adhdnews.com/testforum/test1024.htm
+http://www.adhdstormwatch.com/newsletters/2003March.html
+http://www.adherents.com/largecom/fam_lds_inv.html
+http://www.adherents.com/largecom/lds_aog.html
+http://www.adhesions.org/forums/ADHESIONS.0204/0610.html
+http://www.adidas-salomon.com/en/investor/strategy/Outlook/default.asp
+http://www.adionline.org/model.html
+http://www.adis.washington.edu/policies/Glossary/Pglossary.htm
+http://www.adiscountbeauty.com/page167.html
+http://www.adit.co.uk/html/a_question_of_sorts.html
+http://www.adiversity.com/magazine/article_detail.htm?AID=95286646&rd=pf
+http://www.adjunction.com/
+http://www.adl.org/NR/exeres/B667904B-D8FF-484D-A993-96E26C714048,3EE9C1C0-EA4B-47AF-832A-92A26F3DE2FB,frameless.htm
+http://www.adl.org/hate-patrol/hate_patrol_print.asp
+http://www.adl.org/learn/adl_law_enforcement/training_israel_shai.htm?LEARN_Cat=Training&LEARN_SubCat=Training_News
+http://www.adl.org/learn/ext_us/Militia_M.asp?LEARN_Cat=Extremism&LEARN_SubCat=Extremism_in_America&xpicked=4&item=mm
+http://www.adl.org/learn/news/Amichai_Shai.asp
+http://www.adl.org/learn/news/Amichai_Shai.asp?print=true
+http://www.adl.org/religion_ps_2004/expression.asp
+http://www.adm.monash.edu.au/unisec/com/ab/aba/abahtm/04-04aba.html
+http://www.adm.uwaterloo.ca/infofsp/Fin/AFF/org_unit.html
+http://www.adm.uwaterloo.ca/interdis/international/about.htm
+http://www.admani.com/AllianceEquine/FAQs.htm
+http://www.admfincs.forces.gc.ca/admfincs/subjects/cfao/020-05_e.asp
+http://www.admfincs.forces.gc.ca/admfincs/subjects/cfao/024-01_e.asp
+http://www.admfincs.forces.gc.ca/admfincs/subjects/cfao/209-14_e.asp
+http://www.admfincs.forces.gc.ca/admfincs/subjects/daod/2008/0_e.asp
+http://www.admfincs.forces.gc.ca/admfincs/subjects/daod/6001/1_e.asp
+http://www.admh.org/data/fifa.htm
+http://www.admin.cam.ac.uk/news/press/factsheets/admissions.html
+http://www.admin.cam.ac.uk/offices/gradstud/current/thesis/format.html
+http://www.admin.cam.ac.uk/offices/pensions/cuacps/reports/cps2002/investment.html
+http://www.admin.cam.ac.uk/offices/personnel/benefits/travel.html
+http://www.admin.cam.ac.uk/offices/personnel/handbook/7.html
+http://www.admin.cam.ac.uk/reporter/1997-8/special/07/43.html
+http://www.admin.cam.ac.uk/reporter/1997-8/weekly/5746/24.html
+http://www.admin.cam.ac.uk/reporter/1998-9/weekly/5775/23.html
+http://www.admin.cam.ac.uk/reporter/1999-2000/weekly/5795/4.html
+http://www.admin.cam.ac.uk/reporter/2000-01/weekly/5851/5.html
+http://www.admin.cam.ac.uk/reporter/2002-03/special/05/45.html
+http://www.admin.cam.ac.uk/reporter/2002-03/weekly/5915/18.html
+http://www.admin.cam.ac.uk/reporter/2003-04/weekly/5965/22.html
+http://www.admin.cam.ac.uk/reporter/2004-05/weekly/5973/33.html
+http://www.admin.cam.ac.uk/reporter/2004-05/weekly/5982/21.html
+http://www.admin.cam.ac.uk/reporter/2004-05/weekly/5996/17.html
+http://www.admin.cam.ac.uk/reporter/2004-05/weekly/6001/16.html
+http://www.admin.cam.ac.uk/univ/gsprospectus/applying/entry.html
+http://www.admin.cam.ac.uk/univ/gsprospectus/subjects/landeconomy/landeconomy2b.html
+http://www.admin.cam.ac.uk/univ/newsletter/2003/aug-sep/2.html
+http://www.admin.ias.edu/air/words/Glass7.html
+http://www.admin.ias.edu/eas/
+http://www.admin.mtu.edu/admin/boc/riskindex.htm
+http://www.admin.ox.ac.uk/eop/disab/dis.shtml
+http://www.admin.ox.ac.uk/eop/har/contact.shtml
+http://www.admin.ox.ac.uk/gsp/courses/conted/arch.shtml
+http://www.admin.ox.ac.uk/ps/staff/handbooks/3/3.shtml
+http://www.admin.ox.ac.uk/safety/s600.shtml
+http://www.admin.ox.ac.uk/shw/food.shtml
+http://www.admin.ox.ac.uk/statutes/regulations/248-062.shtml
+http://www.admin.qmul.ac.uk/welfare/concerns/course/leaving/
+http://www.admin.qmul.ac.uk/welfare/money/ug/part.html
+http://www.admin.state.mn.us/assistivetechnology/transcripts/BAT.htm
+http://www.admin.state.mn.us/assistivetechnology/transcripts/freedom.htm
+http://www.admin.utah.edu/ppmanual/2/2-9-1.html
+http://www.adminassist.ca/Nina%20Spencer/listening_to_others_with_heart.htm
+http://www.adminprof.com/administrative-assistant-iscpgs/organizekids.htm
+http://www.adminschoice.com/docs/exam_stratgy.htm
+http://www.admiraltylawguide.com/conven/containers1972.html
+http://www.admiringkate.com/LettermanFeb1403.htm
+http://www.admissions.appstate.edu/residency/manual/2.htm
+http://www.admissions.ox.ac.uk/courses/mema.shtml
+http://www.admissionsconsultants.com/college/sat.asp
+http://www.admissionsforum.co.uk/archive/index.php?t-7444.html
+http://www.admissionsforum.co.uk/intl/fresher.html
+http://www.admissionsforum.co.uk/showthread.php?p=106066
+http://www.admissionsforum.co.uk/showthread.php?p=5309
+http://www.adn.com/evos/stories/EV72.html
+http://www.adn.com/life/story/6629542p-6515444c.html
+http://www.adn.com/sports/story/5972985p-5874226c.html
+http://www.adobe.co.uk/education/digkids/news/articles/3D.html
+http://www.adobe.co.uk/print/spotlights/bradshaw/main.html
+http://www.adobe.com/
+http://www.adobe.com/education/adaa/faq.html
+http://www.adobe.com/education/digkids/lessons/activities/haunted_house.html
+http://www.adobe.com/education/digkids/lessons/dali.html
+http://www.adobe.com/education/digkids/lessons/light_makes_right.html
+http://www.adobe.com/education/digkids/news/articles/space.html
+http://www.adobe.com/products/main.html
+http://www.adobe.com/support/main.html
+http://www.adobeww.org/
+http://www.adopt2000houston.org/faqs.html
+http://www.adoptachild.us/Guatemala.htm
+http://www.adopting.org/adltcope.html
+http://www.adoption.org/adopt/waiting-kids-for-adoption.php
+http://www.adoptionblog.com/MT/archives/2003_12.html
+http://www.adoptionhelp.org/adoptive_parent/what_to_expect/two_parents.html
+http://www.adoptioninformation.com/resources/article/051401a.htm
+http://www.adoptioninstitute.org/proed/forum99.html
+http://www.adoptionnetwork.com/waitingfamilies/success-stories.html?type=success&start=1
+http://www.adoptiononline.com/findafamily.html
+http://www.adoptionopen.com/waitingfamilies/
+http://www.adoptions.com/aecdevelopmental.cfm
+http://www.adoptions.com/bparpage.cfm
+http://www.adoptions.com/findafamily.html
+http://www.adoremus.org/0302wreckingball.html
+http://www.adpost.com/ca/software/Multimedia/
+http://www.adprima.com/mistakes.htm
+http://www.adprima.com/teacherwit.htm
+http://www.adr.af.mil/general/EO13203.htm
+http://www.adr.org/sp.asp?id=22014
+http://www.adr.org/sp.asp?id=22024
+http://www.adr.org/sp.asp?id=22099
+http://www.adr.org/sp.asp?id=22112
+http://www.adrants.com/2005/01/matchcom-launches-national-print.php?show_id=110718173829094499
+http://www.adrants.com/2005/01/sony-endorses-weblogs-with-site.php
+http://www.adrants.com/2005/02/body-billboardz-launches-exchange-for.php?show_id=110926093982139951
+http://www.adrants.com/headlines/2005/02/dealing-with-radios-perception-problem.php
+http://www.adrc.or.jp/view_disaster_en.php?Lang=en&Key=37&Frame=yes
+http://www.adrelevance.com/about/release6oct99.jsp
+http://www.adriangilbert.co.uk/docus/letters/letter3.html
+http://www.adrift.com/famtrpinfo02.htm
+http://www.adrift.com/rockartinfo.htm
+http://www.adslbookmarks.com/
+http://www.adslguide.org.uk/hardware/reviews/2005/q1/billion-5100s.asp
+http://www.adss.org.uk/
+http://www.adta.org/resources/students.cfm
+http://www.adtechblog.com/archives/20031103/advertainment_reaching_the_unreachable/
+http://www.adtmag.com/article.asp?id=11210
+http://www.adtmag.com/article.asp?id=9781
+http://www.adtmag.com/java/articleold.asp?id=223
+http://www.adtrader.co.uk/classhome.php?trader_id=6681&class_id=127&prevpage=1&page_id=2&search_words=
+http://www.adultwork.co.uk/SearchEnginesProfile.asp?UserID=17502
+http://www.adultwork.co.uk/SearchEnginesProfile.asp?UserID=17660
+http://www.adultwork.co.uk/SearchEnginesProfile.asp?UserID=22756
+http://www.adultwork.co.uk/SearchEnginesProfile.asp?UserID=23369
+http://www.advaita.org.uk/discourses/atmananda/atmananda5.htm
+http://www.advaita.org.uk/discourses/teachers/essence_wheeler.htm
+http://www.advamed.org/business-solutions/riskmanagement.html
+http://www.advamed.org/publicdocs/cataracts-case-study.html
+http://www.advance.uconn.edu/2000/000313/000313hs.htm
+http://www.advance.uconn.edu/2005/050124/05012410.htm
+http://www.advance.uconn.edu/2005/050131/05013101.htm
+http://www.advanced-television.com/pages/pagesb/newsdaily.html
+http://www.advanced.org/IPPM/archive.2/0867.html
+http://www.advancededucation.gov.ab.ca/other/prognewcomer/immigrantagency.asp
+http://www.advancedenergycommerce.com/fixed%20price%20program.htm
+http://www.advancedfertility.com/earlypre.htm
+http://www.advancedfightingfantasy.com/
+http://www.advancedfightingfantasy.com/amateur1.htm
+http://www.advancedsalesinstitute.com/total_selling_system.htm
+http://www.advancedscientifichealth.com/youropportunity.asp
+http://www.advancingwomen.com/career/takecharge.html
+http://www.advantageathletics.com/polevault/powervaulting.html
+http://www.advantageconsumer.com/supreme5.html
+http://www.advantagewm.co.uk/site-map.html
+http://www.advbiostructuralcorr.com/articles/professional%20references.htm
+http://www.advent-truth.co.uk/aboutus.htm
+http://www.advent-truth.co.uk/health.htm
+http://www.advent3b2.com/index.php?section=custmark&sub=casestudy_stm_triltsch
+http://www.adventist.org/beliefs/statements/main_stat29.html
+http://www.adventurasia.com/editorials/taiwan/jh_rulesroad.php
+http://www.adventure-life.com/costa/almondscoralsactivities.php
+http://www.adventurecentre.co.za/contents/training/articles/articles.asp?MID=59&Section=Articles
+http://www.adventuregamers.com/article/id,527
+http://www.adventuregamers.com/article/id,527/
+http://www.adventuregamers.com/print.php?id=373
+http://www.adventures-abroad.com/tours/html/IN4.htm
+http://www.adventuresabroad.com/index/before_you_go/money.html
+http://www.adventuresports.ie/approval-scheme/sui.html
+http://www.adverblog.com/archives/000161.htm
+http://www.adverblog.com/archives/2003_07.htm
+http://www.advicebox.com/faq.htm
+http://www.advicegoddess.com/archives/2003/08/shocked_simply.html
+http://www.adviceguide.org.uk/nm/index/family_parent/education/adult_education_organisations_which_give_information_and_advice.htm
+http://www.adviceguide.org.uk/nm/index/family_parent/family/cohabitation_and_marriage_legal_differences.htm
+http://www.adviceguide.org.uk/nm/index/family_parent/family/wills.htm
+http://www.adviceguide.org.uk/nm/index/life/employment/basic_rights_at_work.htm
+http://www.adviceguide.org.uk/nm/index/life/employment/redundancy.htm
+http://www.adviceguide.org.uk/nm/index/life/tax/income_tax_allowances.htm
+http://www.adviceguide.org.uk/nm/index/life/tax/pay_as_you_earn_common_problems.htm
+http://www.adviceguide.org.uk/nm/index/your_world/consumer_affairs/dealing_with_water.htm
+http://www.adviceguide.org.uk/nm/index/your_world/consumer_affairs/gas_supply.htm
+http://www.adviceguide.org.uk/nm/index/your_world/consumer_affairs/keeping_lost_found_and_uncollected_goods.htm
+http://www.adviceguide.org.uk/nm/nireland/family_parent/family_family_northern_ireland/cohabitation_and_marriage_legal_differences.htm
+http://www.adviceguide.org.uk/nm/scotland/family_parent/education_scotland/help_with_the_costs_of_education_scotland.htm
+http://www.adviceguide.org.uk/nm/scotland/life/employment_scotland/basic_rights_at_work.htm
+http://www.adviceguide.org.uk/nm/scotland/life/tax_scotland/income_tax_allowances.htm
+http://www.advicehq.co.uk/Divorce.htm
+http://www.advicejoe.com/
+http://www.advicenow.org.uk/go/feature/feature_142.html
+http://www.advicenow.org.uk/go/feature/feature_199.html
+http://www.adviceonline.co.uk/topicalcontent/are_you/
+http://www.advising.ltsc.ucsb.edu/transfer/newtr.php
+http://www.advising.ufl.edu/faq/probfaq.html
+http://www.advising.ufl.edu/prehealth/appservices.html
+http://www.advising.wayne.edu/curr/precls.html
+http://www.advisorybodies.doh.gov.uk/comeap/minsagenda/nt18jun99.htm
+http://www.advocacyguru.com/tipsheet.htm
+http://www.advocacyonline.net/nspcc/Nov04/past_camp_pp_young.htm
+http://www.advocatehealth.com/luth/about/patient.html
+http://www.advocatehealth.com/ssub/about/patient.html
+http://www.advocatesforchildren.org/pubs/ELLteachRepFINAL.htm
+http://www.advogato.org/article/844.html
+http://www.advogato.org/person/Artimage/
+http://www.advogato.org/person/Bram/
+http://www.advogato.org/person/guerby/
+http://www.advogato.org/person/rbultje/
+http://www.advogato.org/person/twcook/
+http://www.advogato.org/person/uweo/
+http://www.advogato.org/person/uzi/
+http://www.advogato.org/person/wiggly/
+http://www.advogato.org/person/zed/
+http://www.adwarereport.com/
+http://www.ae.ca/foodwater.html
+http://www.aea10.k12.ia.us/purpose/fund.html
+http://www.aeaweb.org/aer/styleguide.html
+http://www.aebc.gov.uk/aebc/meetings/meetings_091204_minutes.shtml
+http://www.aebc.gov.uk/aebc/subgroups/consumer_choice_meetings_280103_minutes.shtml
+http://www.aec.gov.au/_content/what/faqs/elections.htm
+http://www.aecbytes.com/review/DataCAD11.htm
+http://www.aecbytes.com/viewpoint/issue_12.htm
+http://www.aecf.org/initiatives/jobsinitiative/milwaukee.htm
+http://www.aecf.org/initiatives/jobsinitiative/seatle_sea.htm
+http://www.aecf.org/initiatives/jobsinitiative/sept_02_news.htm
+http://www.aecf.org/initiatives/success/smschool.htm
+http://www.aecnewswire.com/industrynews/Detailed/331.shtml
+http://www.aecyr-grene.org/session4.shtml
+http://www.aednet.org/ced/nov95/minds.htm
+http://www.aeecenter.org/certification/CEMpage.htm
+http://www.aegis.com/news/ap/1989/AP890402.html
+http://www.aegis.com/news/lt/2001/LT011206.html
+http://www.aegis.com/news/mh/1985/MH851104.html
+http://www.aegis.com/news/sfe/1999/SE990302.html
+http://www.aegis.com/news/suntimes/2004/ST040901.html
+http://www.aegis.com/pubs/atn/1992/ATN15609.html
+http://www.aegis.com/pubs/atn/1992/ATN15702.html
+http://www.aegis.com/pubs/iapac/2003/IA030204.html
+http://www.aei.org/events/filter.all,eventID.1064/transcript.asp
+http://www.aei.org/news/newsID.16443/news_detail.asp
+http://www.aei.org/publications/filter.all,pubID.22324/pub_detail.asp
+http://www.aei.org/publications/pubID.11424/pub_detail.asp
+http://www.aei.org/publications/pubID.14909/pub_detail.asp
+http://www.aei.org/publications/pubID.14917/pub_detail.asp
+http://www.aei.org/publications/pubID.16564/pub_detail.asp
+http://www.aei.org/publications/pubID.17760/pub_detail.asp
+http://www.aei.org/publications/pubID.20491/pub_detail.asp
+http://www.aei.org/publications/pubID.20588/pub_detail.asp
+http://www.aei.org/publications/pubID.21445/pub_detail.asp
+http://www.aei.org/publications/pubID.22275,filter.all/pub_detail.asp
+http://www.aeispeakers.com/5ktim.htm
+http://www.aeispeakers.com/lifebalance.htm
+http://www.aemj.org/cgi/content/full/9/12/1423
+http://www.aenet.org/manila-expo/page25.htm
+http://www.aeoe.org/conference/conferencearchives/spr00/knapp.html
+http://www.aerieinn.com/hospitality-agreement.htm
+http://www.aero.org/news/newsitems/awards-092401.html
+http://www.aero.und.edu/safecon2003/information.html
+http://www.aeroaccessories.com/faqs.html
+http://www.aeroflight.co.uk/waf/lith/lithaf1.htm
+http://www.aeroinfo.co.uk/
+http://www.aeronautics.ru/news/news001/news040.htm
+http://www.aeroschoolkemble.co.uk/minimise_training_time.asp
+http://www.aerosonic.com/lib2004-08-2.htm
+http://www.aerotraderonline.com/about.html?view=visitor
+http://www.aes.org/events/109/events.cfm
+http://www.aes.org/sections/chicago/
+http://www.aes.org/sections/chicago/dec97review.html
+http://www.aesessex.co.uk/Bus%20Service.htm
+http://www.aestheticrealism.org/Elijah_Cummings_Congressional_Record.html
+http://www.aetna.com/about/disclmr.html
+http://www.aetna.com/about/disclmr_docfindcustom.html
+http://www.aetna.com/cpb/data/CPBA0452.html
+http://www.aetna.com/employer/natural_alt_99.html
+http://www.aetna.com/legal_issues/saying/aei.htm
+http://www.aetna.com/producer/natural_alt_99.html
+http://www.aetnaushc.com/products/natural_alt_99.html
+http://www.aetv.com/tv/shows/city/cityconfidential2.html
+http://www.aeufederal.org.au/About/index2.html
+http://www.aeufederal.org.au/Campaigns/nowar.html
+http://www.aeufederal.org.au/Debates/index2.html
+http://www.aexusa.com/ah.htm
+http://www.af.mil/news/airman/0402/consumer.html
+http://www.af.mil/news/story.asp?storyID=123008032
+http://www.af.mil/news/story.asp?storyID=123010693
+http://www.af.mil/news/story.asp?storyID=123010778
+http://www.af.mil/news/story.asp?storyID=123010844
+http://www.af.mil/news/story.asp?storyID=91902372
+http://www.af.mil/policy/letters/pl2004_10.html
+http://www.afa.net/
+http://www.afa.org/Media/scripts/Cartwright_AWS05.asp
+http://www.afa.org/Media/scripts/Cartwright_AWS05.html
+http://www.afa.org/magazine/april2002/0402airwar.asp
+http://www.afa.org/magazine/jan1999/0199desertone.asp
+http://www.afa.org/magazine/oct2002/1002reach.asp
+http://www.afa.org/magazine/valor/1191valor.asp
+http://www.afa.org/media/scripts/Cook_Conf.asp
+http://www.afac.ab.ca/lawsregs/crueltyanimals.htm
+http://www.afausairways.org/PHL/newsline1_13_05.htm
+http://www.afb.org/CareerConnect/users/audiologist.asp
+http://www.afb.org/JVIB/JVIB950904.asp
+http://www.afb.org/Section.asp?SectionID=1&TopicID=193&SubTopicID=11&DocumentID=972
+http://www.afb.org/Section.asp?SectionID=3&TopicID=237&DocumentID=2364
+http://www.afb.org/Section.asp?SectionID=8&TopicID=197&DocumentID=2149
+http://www.afb.org/afbpress/pub.asp?DocID=aw040406
+http://www.afb.org/message_board_replies.asp?TopicID=124&FolderID=1
+http://www.afc.gov.au/filminginaustralia/unionsassoc/fiapage_27.aspx
+http://www.afc.gov.au/industrylinks/unions.aspx
+http://www.afcan.org/dossiers_mars/mars66.html
+http://www.afdb.org/opsd/what_we_do/non_lending_activities/franchising_to_support_smes_development_in_africa
+http://www.afdb.org/opsdfr/what_we_do/non_lending_activities/franchising_to_support_smes_development_in_africa
+http://www.afe.org/membership.html
+http://www.affa.gov.au/content/mediareleases.cfm?ObjectID=8FDBA198-D263-450B-88ED7E1D96ABB201
+http://www.affa.gov.au/content/output.cfm?ObjectID=C23B881C-86CD-40C3-804AAF41F7378283
+http://www.affbrainwash.com/archives/013088.php
+http://www.affbrainwash.com/archives/015080.php
+http://www.affbrainwash.com/chrisroach/archives/016089.php
+http://www.affbrainwash.com/genehealy/
+http://www.affdoublethink.com/archives/018881.php
+http://www.affiliatemarketing.co.uk/affiliatenetworks.htm
+http://www.affiliateprimer.com/starting-an-affiliate-program.html
+http://www.affinitygroup.com/gscCleanUp.htm
+http://www.affinitymc.com/Lead_People_Manage_Things.html
+http://www.affirmware.com.au/
+http://www.affitech.com/news_press.shtml
+http://www.affordablesound.com/faqs.html
+http://www.affymetrix.com/community/wayahead/coping_with_heart_failure.affx
+http://www.afge.org/splash/splash.htm
+http://www.afghanembassy.net/n_me_events.html
+http://www.afghanembassy.net/nov_diary.html
+http://www.afhu.org/site/planned_giving.htm
+http://www.afi.com/tvevents/laa/laa05.aspx
+http://www.afia.com/
+http://www.afip.org/cgi-bin/whatsnew.cgi/current.html?article=184
+http://www.afirstlook.com/applogs.cfm?expand=4
+http://www.aflcio.org/aboutaflcio/magazine/0903_amjobs.cfm
+http://www.aflcio.org/aboutaflcio/wip/wip04042005.cfm
+http://www.aflcio.org/aboutunions/joinunions/whyjoin/professionals.cfm
+http://www.aflcio.org/mediacenter/prsptm/pr01272005a.cfm
+http://www.aflcio.org/mediacenter/prsptm/tm11192002.cfm
+http://www.aflcio.org/yourjobeconomy/help/creditors.cfm
+http://www.aflcio.org/yourjobeconomy/jobs/ns05172005.cfm
+http://www.aflcio.org/yourjobeconomy/overtimepay/ns07132004.cfm
+http://www.aflcio.org/yourjobeconomy/rights/rightsatwork/reservists.cfm
+http://www.aflcio.org/yourjobeconomy/rights/workersrights/profiles.cfm
+http://www.aflcio.org/yourjobeconomy/safety/wc/wc_notes.cfm
+http://www.aflyer.com/RIGGERS.html
+http://www.afma.co.za/AFMA_Template/code_of_salmonella.htm
+http://www.afma.co.za/AFMA_Template/feedpaper7.html
+http://www.afmc-pub.wpafb.af.mil/HQ-AFMC/PA/news/archive/2003/June/0633-03.htm
+http://www.afnews.af.mil/iraq/tallil/042205-family-tallil.htm
+http://www.afognak.org/education/dw_lesson6.php
+http://www.afognak.org/education/history_chapter3.php
+http://www.afp.gov.au/afp/page/Employment/AFPRecruitment/General/PoliceMoreInfoForApplicants.htm
+http://www.afpafitness.com/articles/AStretchingFlexibility.htm
+http://www.afpc.randolph.af.mil/pahistory/Comm/comm2004/05/May6/Sports.htm
+http://www.afrepren.org/Pubs/Occasional_Papers/summ/oc9_sum.htm
+http://www.africa-confidential.com/index.aspx?pageid=22&countryid=55
+http://www.africa-first.com/Special%20ReportLeahRPatterson.htm
+http://www.africa-focus.co.za/ageo/a100705/a100705.htm
+http://www.africaaction.org/bp/ethall.htm
+http://www.africaaction.org/docs00/ang0006.htm
+http://www.africaaction.org/docs03/acc0304b.htm
+http://www.africaaction.org/docs03/hdr0307.htm
+http://www.africaaction.org/docs03/tac0303.htm
+http://www.africaaction.org/docs97/sud9702.nav.htm
+http://www.africabookcentre.com/acatalog/Non_Fiction_Picture_Books.html
+http://www.africacentre.org.uk/habari4.htm
+http://www.africadaily.com/
+http://www.africaeconomicanalysis.org/articles/gen/venturehtm.html
+http://www.africaeconomicanalysis.org/articles/gen/wtohtm.html
+http://www.africafiles.org/article.asp?ID=3832
+http://www.africafocus.org/docs04/hiv0412a.php
+http://www.africafocus.org/docs04/mal0405.php
+http://www.africaguide.com/culture/events.htm
+http://www.africamigration.com/submissions.html
+http://www.africanbirdclub.org/feature/vanga.html
+http://www.africanet.com/countries/tanzania.htm
+http://www.africanews.com/article431.html
+http://www.africanfilmny.org/network/news/Fmeyer.html
+http://www.africanfriendsearch.com/
+http://www.africanfront.com/Omarkabajj.php?printable=1
+http://www.africanfront.com/industry/industry6.php
+http://www.africanfront.com/sovereign.php
+http://www.africanhaircare.com/dreadz.htm
+http://www.africanreviewofbooks.com/100best/100bestsamples/amadiume.html
+http://www.africanreviewofbooks.com/100best/100bestsamples/magona.html
+http://www.africanreviewofbooks.com/Reviews/collen0408.html
+http://www.africanreviewofbooks.com/Reviews/fowler.html
+http://www.africare.org/at_work/sierra_leone/
+http://www.africatvl.com/safaris/zambia19day.html
+http://www.africawithin.com/bios/walker_appeal.htm
+http://www.africawoman.net/newsdetails.php?NewsID=258&AuthorID=65&CountryID=13&NewsTypeID=11&IssueID=31
+http://www.afriendlyletter.com/afl145.html
+http://www.afrika.no/Detailed/9998.html
+http://www.afrikaworld.net/afrel/atr-women.htm
+http://www.afrikaworld.net/afrel/atrxadocs.htm
+http://www.afrikaworld.net/afrel/igbo-marriage.htm
+http://www.afrikaworld.net/afrel/zinzindohoue.htm
+http://www.afrlhorizons.com/Briefs/Feb04/SN0310.html
+http://www.afrlhorizons.com/Briefs/Mar02/OSR0108.html
+http://www.afrlhorizons.com/Briefs/Sept01/ML0004.html
+http://www.afrlhorizons.com/Briefs/Sept01/SN0006.html
+http://www.afrol.com/News/sil003_ruf_abducts.htm
+http://www.afrol.com/articles/14900
+http://www.afrol.com/html/News/sil003_ruf_abducts.htm
+http://www.afrolumens.org/rising_free/waskie2.html
+http://www.afropunk.com/community/viewtopic.php?t=3430
+http://www.afsa.org/fsj/may01/dormanmay01.cfm
+http://www.afsc.org/events/baltimore.htm
+http://www.afsc.org/events/default.php
+http://www.afsc.org/iraq/news/2004/09/car-bombs-kill-42-in-baghdad-hostages.htm
+http://www.afsc.org/midatlantic/charleston.htm
+http://www.afsc.org/pwork/0112/peacewrk.htm
+http://www.afsc.org/pwork/0202/020219.htm
+http://www.afsc.org/pwork/0600/062k10.htm
+http://www.afsc.org/youthmil/conscientious-objection/counseling-during-war-time.htm
+http://www.afscme.org/wrkplace/gr05.htm
+http://www.afsi.org/OUTPOST/2001NOV/nov3.htm
+http://www.afsi.org/pblog/index.php?entry=entry050224-115049
+http://www.aft.org/pubs-reports/american_educator/issues/spring05/aypquotes.htm
+http://www.aft.org/pubs-reports/american_educator/issues/summer04/legislatecrow.htm
+http://www.aft.org/pubs-reports/american_educator/spring2003/catastrophe.html
+http://www.aft.org/pubs-reports/american_educator/winter2002/DefendWorkers.html
+http://www.aft2121.com/union_action.html
+http://www.afterabortion.info/twodead.html
+http://www.afterdawn.com/guides/archive/nero6_review_d1.cfm
+http://www.afterellen.com/TV/SFsetting.html
+http://www.afterellen.com/TV/er-season10.html
+http://www.aftermarketbusiness.com/aftermarketbusiness/article/articleDetail.jsp?id=130672
+http://www.aftimes.com/aprequel/prequel.shtml
+http://www.aftimes.com/rumors/arumor.shtml
+http://www.aftresearch.org/researchresource/wp/wp97-9.html
+http://www.ag.auburn.edu/aaes/communications/highlights/spring99/cooperative.html
+http://www.ag.auburn.edu/srs/
+http://www.ag.gov.au/agd/WWW/protectivesecurityHome.nsf/Page/Security_In_Government_Transcripts_11_May_2005_-_Speech_by_Leonie_Horrocks
+http://www.ag.iastate.edu/aginfo/speech.html
+http://www.ag.iastate.edu/agonline/ag-online.11.html
+http://www.ag.iastate.edu/centers/ccur/cropprodpilotplant.html
+http://www.ag.iastate.edu/global/newsletter/newssept_oct04.html
+http://www.ag.ndsu.nodak.edu/aginfo/entomology/entupdates/Indoor_pest/bed_bug.htm
+http://www.ag.ndsu.nodak.edu/bqa/manual/overview.htm
+http://www.ag.ohio-state.edu/~news/story.php?id=3088
+http://www.ag.org/top/beliefs/christian_character/charctr_08_drugs.cfm
+http://www.ag.org/top/beliefs/christian_character/charctr_13_social_dancing.cfm
+http://www.ag.org/top/beliefs/christian_character/charctr_15_ch_attendance.cfm
+http://www.ag.org/top/beliefs/position_papers/4171_deacons.cfm
+http://www.ag.org/top/beliefs/relationships/relations_07_ldrshphome.cfm
+http://www.ag.org/top/section_ministries.cfm
+http://www.ag.state.nd.us/
+http://www.aga.org/Content/NavigationMenu/Membership_Services/Become_a_Member/Apply_for_AGA_Limited_Membership/Apply_for_AGA_Limited_Membership.htm
+http://www.aga.org/PrinterTemplate.cfm?Section=Overview_and_FAQs&template=/ContentManagement/ContentDisplay.cfm&ContentID=14578
+http://www.aga.org/Template.cfm?Section=Overview_and_FAQs&template=/ContentManagement/ContentDisplay.cfm&ContentID=14578
+http://www.aga.org/Template.cfm?Section=Public_Relations1&template=/ContentManagement/ContentDisplay.cfm&ContentID=12641
+http://www.aga.org/Template.cfm?Section=Public_Relations1&template=/ContentManagement/ContentDisplay.cfm&ContentID=14578
+http://www.againstbombing.org/chinahands.htm
+http://www.agassifoundation.org/programs_projects.html
+http://www.agbioforum.missouri.edu/v7n3/v7n3a05-stewart.htm
+http://www.agbiotechnet.com/proceedings/May%202000/11_mcintyre.htm
+http://www.agbioworld.org/biotech_info/articles/interviews/biospectrum.html
+http://www.agbioworld.org/newsletter_wm/index.php?caseid=archive&newsid=1119
+http://www.agbu.org/agbunews/display.asp?A_ID=115
+http://www.agc.co.jp/english/rd/library/03/03.html
+http://www.agc.co.jp/english/rd/library_2001/01/01.html
+http://www.agc.co.jp/rd/library/03/03.html
+http://www.agcom.it/eng/rel_99/rel_99_44.htm
+http://www.agd.org/library/2003/april/200304_diogo.asp
+http://www.agda.asn.au/education/scholarships/ISS/TaleofTwoStudios.html
+http://www.age.uiuc.edu/bee/Research/multi-sampler/multi3.htm
+http://www.age.uiuc.edu/faculty/jkm/
+http://www.agecon.uga.edu/~wacra/presents.htm
+http://www.ageconcern.co.uk/
+http://www.ageconcern.org.uk/AgeConcern/News_775.htm
+http://www.ageconcern.org.uk/AgeConcern/News_865.htm
+http://www.ageconcern.org.uk/AgeConcern/News_871.htm
+http://www.ageconcern.org.uk/AgeConcern/News_910.htm
+http://www.ageconcern.org.uk/AgeConcern/information_768.htm
+http://www.ageconcern.org.uk/donate/
+http://www.ageconcernhillingdon.org.uk/
+http://www.ageconcernlancs.org.uk/index.cfm?id=211
+http://www.ageefilms.org/tgTATS.html
+http://www.agehr.org/publishing/catalog3oct.asp
+http://www.agelessdesign.com/nl0101-Falls1.htm
+http://www.agencypreview.com/info/about/privacy_policy.asp
+http://www.agenda2005.com/52fotos.htm
+http://www.agentsearch.com/real_estate/indiana.htm
+http://www.agentsmith.com/introguide.php?page=3
+http://www.ageworks.com/course_demo/200/module2/module2b.htm
+http://www.agfc.com/critters/endangered_species_p5.html
+http://www.aggielandcu.org/about/faq.asp
+http://www.agh-attorneys.com/3_camo_appendix_c0_.htm
+http://www.aghall.co.za/Company%20History.html
+http://www.agi-usa.org/pubs/journals/3309401.html
+http://www.agilebrain.com/jakob.html
+http://www.agiledata.org/essays/enterpriseArchitecture.html
+http://www.agilemodeling.com/essays/agileModelingXPLifecycle.htm
+http://www.agimo.gov.au/infrastructure/oss/what
+http://www.aging.pitt.edu/seniors/ethical-issues.asp
+http://www.agingkansas.org/kdoa/publications/alzheimers/chapt8.htm
+http://www.agingstats.gov/chartbook2000/economics.html
+http://www.agingstats.gov/chartbook2000/healthcare.html
+http://www.agingstats.gov/chartbook2004/healthcare.html
+http://www.agingstats.gov/chartbook2004/healthrisks.html
+http://www.agingwithdignity.org/answers.html
+http://www.agitprop.org.au/nowar/20030210_fair_failure_of_skepticism.php
+http://www.agiweb.org/gap/legis107/energy.html
+http://www.agnld.uni-potsdam.de/~marwan/rp/crps.php
+http://www.agnostic.org/BIBLEE-03.htm
+http://www.ago.state.ma.us/sp.cfm?pageid=1443
+http://www.ago.state.ma.us/sp.cfm?pageid=1444
+http://www.ago.state.ma.us/sp.cfm?pageid=1459
+http://www.ago.state.nm.us/divs/civil/opinions/a2003/DefinitionOfWildHorses.htm
+http://www.agocg.ac.uk/reports/graphics/31/chapter4.htm
+http://www.agocg.ac.uk/reports/mmedia/network/sect2.htm
+http://www.agonybooth.com/lepus/default.asp?Page=5
+http://www.agora-gallery.com/artInvestFAQ.asp
+http://www.agoramed.gr/agoramed_04/PAST_agoras/agora98/sun16_20.htm
+http://www.agorics.com/Library/agoricpapers/ce/ce5.html
+http://www.agorics.com/Library/dsr.html
+http://www.agr.gc.ca/itpd-dpci/english/consultations/infodocIII.htm
+http://www.agr.gc.ca/pfra/drought/info/dugout_e.htm
+http://www.agr.gc.ca/pfra/water/wqcattle_e.htm
+http://www.agr.gov.sk.ca/DOCS/econ_farm_man/risk/grainmrkt.asp
+http://www.agr.state.tx.us/producer_info/livestock/mkt_export.htm
+http://www.agrabilityproject.org/2001workshop.cfm
+http://www.agrabilityproject.org/events/workshop2002.cfm
+http://www.agrabilityproject.org/events/workshop2004/
+http://www.agreaterdate.com/Categories/Regional-minnesota.htm
+http://www.agreaterdate.com/Categories/Webcam-Dating.htm
+http://www.agri-labourpool.com/jobseekers/postings/electricalindustrialcontrolposition/8387.html
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=15&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=25&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=26&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=28&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=34&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=45&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=5&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=8&id=22&mnu=22
+http://www.agriaware.ie/default.asp?com=&org=&ACT=5&content=9&id=22&mnu=22
+http://www.agricareersinc.com/cand_bank.htm
+http://www.agricoreunited.com/cgi-bin/bvsm/AU/Invest/QuarterlyReports/index.jsp?auReport=1999_q1_report_u
+http://www.agriculturaleducation.org/workroom/Vacancies/vacancylist.asp
+http://www.agridata.co.uk/agridata_support_faq.htm
+http://www.agrihelp.com/pdlfsheep.htm
+http://www.agrnews.org/issues/66/
+http://www.ags.gov.ab.ca/publications/ATLAS_WWW/A_CH33/CH_33.shtml
+http://www.ags.uci.edu/~dehill/witchhunt/ccla/pages/swan.htm
+http://www.agu.org/history/SV.shtml
+http://www.agu.org/inside/awards/langmuir.html
+http://www.agu.org/meetings/cc03acall.html
+http://www.agu.org/meetings/sm05/sm05-sessions/sm05_A14A.html
+http://www.agu.org/meetings/sm05/sm05-sessions/sm05_SA12A.html
+http://www.agu.org/meetings/sm05/sm05-sessions/sm05_SH43B.html
+http://www.agu.org/sci_soc/cowley.html
+http://www.agu.org/sci_soc/prrl/jh012003.html
+http://www.agu.org/sci_soc/prrl/prrl0335.html
+http://www.agway.com/pet_owners/
+http://www.agyris.net/v3/articles/article.asp?id=50
+http://www.agyris.net/v3/encyclopedia/gods/god.asp?id=970843675
+http://www.ahapoetry.com/PP1000..htm
+http://www.ahawkins.org/
+http://www.ahc.gov.au/publications/generalpubs/annual-report2002/chapter13.html
+http://www.ahc.gov.au/publications/generalpubs/nourishing/chapter1.html
+http://www.ahcj.umn.edu/qualityguide/chapter2.html
+http://www.ahcpr.gov/clinic/alzcons.htm
+http://www.ahcpub.com/ahc_root_html/hot/archive/2004/hiv062004.html
+http://www.ahcpub.com/ahc_root_html/hot/archive/ama0100.html
+http://www.aheadinc.org/activities/tanzania/phc.htm
+http://www.ahf.org.uk/Sainsburysfeb2001.asp
+http://www.ahherald.com/herald_1101.htm
+http://www.ahimsadogtraining.com/handouts/leash.html
+http://www.ahma.org/library/public/2003%20Annual%20Report/page13.html
+http://www.ahold.com/
+http://www.ahpp.org/about/core.htm
+http://www.ahpweb.org/cbi/icr.html
+http://www.ahpweb.org/pub/perspective/heart.html
+http://www.ahrma.org/whatsnew.htm
+http://www.ahrmio.org/board.php
+http://www.ahrq.gov/browse/hospital.htm
+http://www.ahrq.gov/clinic/epcsums/prolongsum.htm
+http://www.ahrq.gov/clinic/prev/lipidwh.htm
+http://www.ahrq.gov/clinic/ptsafety/chap16a.htm
+http://www.ahrq.gov/clinic/vision/
+http://www.ahrq.gov/consumer/20tipkid.htm
+http://www.ahrq.gov/consumer/20tips.htm
+http://www.ahrq.gov/consumer/hlthpln1.htm
+http://www.ahrq.gov/consumer/quicktips/doctalk.htm
+http://www.ahrq.gov/consumer/uterine1.htm
+http://www.ahrq.gov/data/hcup/factbk4/factbk4.htm
+http://www.ahrq.gov/news/press/pr2002/ostscrpr.htm
+http://www.ahrq.gov/news/ulp/indinsurancetele/indinsurtran1.htm
+http://www.ahrq.gov/news/ulp/safety/ulpsfty4.htm
+http://www.ahrq.gov/news/workfact.htm
+http://www.ahrq.gov/ppip/activity.htm
+http://www.ahrq.gov/ppip/manual/
+http://www.ahrq.gov/ppip/pptools.htm
+http://www.ahrq.gov/qual/cahps/hcahpmtg03.htm
+http://www.ahrq.gov/qual/nhqr04/premeasures.htm
+http://www.ahrq.gov/qual/ptsfconf2.htm
+http://www.ahrq.gov/research/altsites/altsite7.htm
+http://www.ahrq.gov/research/cbmprophyl/cbmpgde2.htm
+http://www.ahrq.gov/research/hospdrills/hospdrill.htm
+http://www.ahrq.gov/research/jul96/dept1.htm
+http://www.ahs.uwaterloo.ca/~wells/workplace_studies.htm
+http://www.ahsd25.k12.il.us/LearningStandards/six.html
+http://www.ahuri.edu.au/global/global/modules/getDocument.cfm?documentId=728
+http://www.ahya.org/amm/modules.php?name=Sections&op=viewarticle&artid=158
+http://www.ai.org.za/electronic_monograph.asp?ID=2
+http://www.aia-aerospace.org/aianews/features/team_america/faq.cfm
+http://www.aia.com.sg/Content.asp?ca_typeid=1&ca_categoryid=7&ca_articleid=2
+http://www.aia.org/aiarchitect/thisweek05/tw0527/0527pw_greenstreetarts.htm
+http://www.aia.org/aiarchitect/thisweek05/tw0603/0603bp_riskman.htm
+http://www.aia.org/aiarchitect/thisweek05/tw0603/0603restore.htm
+http://www.aia.org/cae_a_education
+http://www.aia.org/nwsltr_cae.cfm?pagename=cae_a_education
+http://www.aia.org/nwsltr_pm.cfm?pagename=pm_a_balance
+http://www.aia.org/nwsltr_pm.cfm?pagename=pm_a_planning
+http://www.aia.org/nwsltr_print.cfm?pagename=cae_a_education
+http://www.aia.org/pa_strategicplan
+http://www.aia.org/pm_a_20030801_managing_design
+http://www.aia.org/pm_a_planning
+http://www.aia.org/print_template.cfm?pagename=cae_a_education
+http://www.aia.org/print_template.cfm?pagename=pm_a_planning
+http://www.aia.org/release_042605_sdat
+http://www.aiaa.org/content.cfm?pageid=300
+http://www.aiada.org/article.asp?id=23797
+http://www.aiada.org/article.asp?id=31092
+http://www.aiada.org/article.asp?id=36854
+http://www.aiada.org/article.asp?id=37725&cat=Death+Tax
+http://www.aiaff.org/pages/593657/
+http://www.aiafla.org/
+http://www.aiai.ed.ac.uk/~bat/sea-city.html
+http://www.aiasnatl.org/info/0409/forum.htm
+http://www.aiatsis.gov.au/lbry/dig_prgm/sorrybooks/sorrybooks_intro.htm
+http://www.aibs.org/careers/
+http://www.aibs.org/public-policy-reports/public-policy-reports-2005_01_18.html
+http://www.aicae.org/
+http://www.aiccumentor.org/FinAid/step1.asp
+http://www.aicgs.org/c/brimmer.shtml
+http://www.aicgs.org/c/nesshoever.shtml
+http://www.aicgs.org/c/transatlantic.shtml
+http://www.aicgs.org/events/2001/balkans_conf_summary.shtml
+http://www.aiche.org/careerservices/manage/cheprofiles/jonho.htm
+http://www.aicpa.org/info/birdseye02.htm
+http://www.aicpa.org/members/glossary/a.htm
+http://www.aicpa.org/pubs/cpaltr/Oct2002/add.htm
+http://www.aicpa.org/pubs/jofa/dec2003/beaton.htm
+http://www.aicpa.org/pubs/jofa/jul2002/lindow.htm
+http://www.aicpa.org/pubs/jofa/nov2004/newman.htm
+http://www.aicpa.org/pubs/jofa/oct2000/opinion.htm
+http://www.aicpa.org/pubs/jofa/oct2004/burrage.htm
+http://www.aicr.org.uk/news.stm
+http://www.aicr.org/press/pubsearchdetail.lasso?index=1318
+http://www.aidanbell.com/html/hkbell/AhFactor.htm
+http://www.aidc.org.za/?q=book/view/128
+http://www.aidc.org.za/?q=book/view/94
+http://www.aides.org/europe/exec/chngexec/expmeet1.htm
+http://www.aidindia.org/publications/proceedings/india_1999/volun2.htm
+http://www.aids.org/factSheets/202-Choosing-an-HIV-Care-Provider.html
+http://www.aidsalliance.org/sw5207.asp?page=1
+http://www.aidscience.org/Articles/AIDScience037.asp
+http://www.aidscience.org/Science/Cohen289(5478)368.html
+http://www.aidshealth.org/askthedoc/
+http://www.aidsinfonyc.org/pwahg/notes/pwg1.html
+http://www.aidsinfonyc.org/pwahg/notes/wtp1.html
+http://www.aidslaw.ca/Maincontent/issues/Immigration/immigrationFAQ2003_part1.htm
+http://www.aidslaw.ca/Maincontent/issues/care-treatment.htm
+http://www.aidslaw.ca/Maincontent/otherdocs/Newsletter/October1996/23HOMEE.html
+http://www.aidsmap.com/en/docs/41A3E89E-BD53-4D01-8D58-3C16F6676DE1.asp
+http://www.aidsmap.com/en/docs/969A6B2B-595F-4F05-BD07-534F8FAF9CFE.asp
+http://www.aidsmap.com/en/docs/A7FEA71A-7129-4CA7-B086-E593A75085F2.asp
+http://www.aidsmap.com/en/docs/C7462826-8708-4C21-90EB-7AE354CBE24D.asp
+http://www.aidsmap.com/en/news/871A9B2F-7349-4405-974C-5ADF02D1844F.asp
+http://www.aidsmap.com/en/news/94698640-181B-4D28-931E-0844006CCA15.asp
+http://www.aidsmeds.com/Fusetalk/messageview.cfm?catid=10&threadid=16298
+http://www.aidsmeds.com/Fusetalk/messageview.cfm?catid=8&threadid=17590
+http://www.aidsonline.com/pt/re/aids/fulltext.00002030-199811000-00007.htm
+http://www.aidsonline.com/pt/re/aids/fulltext.00002030-199818000-00006.htm
+http://www.aidworkers.net/admin/records3.html
+http://www.aidworkers.net/personal/health.html
+http://www.aif.com/2003articles/Medmaljoint.htm
+http://www.aifs.gov.au/institute/afrc7/warner-smith.html
+http://www.aifs.gov.au/institute/afrcpapers/devaus.html
+http://www.aifs.gov.au/institute/afrcpapers/skoien.html
+http://www.aiga.org/content.cfm?contentalias=cg_popupbriefinbriefpromo
+http://www.aigany.org/tools/taxes.html
+http://www.aiic.net/ViewPage.cfm/article21.htm
+http://www.aiic.net/en/prof/how/paradigms_gained.htm
+http://www.aikido-world.com/articles/Peter_Bussell/Peter%20Bussell-interview1a.htm
+http://www.aikidoonline.com/Discussions/discuss_anecdote.html
+http://www.aikidoonline.com/Features/Kurita.htm
+http://www.aikiweb.com/about/seminars/saito0999.html
+http://www.aila.org.au/information/landscape-architecture/historyhendry/history-hendry.htm
+http://www.aila.org/
+http://www.aila.org/fileViewer.aspx?docID=12760
+http://www.ails.com.au/enquiries.php3
+http://www.ails.com.au/register.html
+http://www.aim-digest.com/gateway/pages/heart/articles/gene1.htm
+http://www.aim.org/briefing/A2209_0_5_0_C/
+http://www.aim.org/don_blog
+http://www.aim25.ac.uk/cgi-bin/search2?coll_id=2333&inst_id=5
+http://www.aim25.ac.uk/cgi-bin/search2?coll_id=7104&inst_id=8
+http://www.aima.com.au/customs.html
+http://www.aimawaymessages.com/awaymessages.php?category=Food
+http://www.aims.gov.au/pages/about/communications/expert-listing.html
+http://www.aims.gov.au/pages/research/coral-bleaching/scr2000/scr-00gcrmn-report.html
+http://www.aims.gov.au/pages/research/marlin/black/pages/bm-01.html
+http://www.aimsa.com.au/ir.cfm
+http://www.aimshomeloans.com.au/aboutaims/aboutus.htm
+http://www.aimwell.org/Books/Library/Mahasi/Hemavata/Lying/lying.html
+http://www.ain.cu/2004/noviembre/nov05iggenglish04.htm
+http://www.ainc-inac.gc.ca/ch/wmn/index_e.html
+http://www.ainc-inac.gc.ca/nr/tran/fpt_e.html
+http://www.ainc-inac.gc.ca/pr/info/info104_e.html
+http://www.ainc-inac.gc.ca/ps/ecd/env/rsp_e.html
+http://www.aintitcool.com/display.cgi?id=15853
+http://www.aip.org/148th/schroeter.html
+http://www.aip.org/history/climate/sloan/icedrill/euro-amer.htm
+http://www.aip.org/tip/INPHFA/vol-10/iss-5/p26.html
+http://www.aip.org/tip/INPHFA/vol-10/iss-6/p15.html
+http://www.aiph.artinstitutes.edu/programs_detail.asp?ProgramID=6&locid=9&degtype=3
+http://www.aips-media.com/cgi-aips/news.cgi?iss=2004/1&chap=5
+http://www.aipsnews.com/pr08.htm
+http://www.air-land-sea-products.com/
+http://www.air-separation-plants.com/oxygen-plants-expansion-engine.html
+http://www.air-zone.com/truth.html
+http://www.air.org/cecp/resources/safe&drug_free/appendixD.htm
+http://www.air.org/usability/
+http://www.airamericaplace.com/index.php
+http://www.airamericaradio.com/
+http://www.airamericaradio.com/shows/morningsedition/comedy.asp
+http://www.airbagindustries.com/archives/006719.php
+http://www.airbagindustries.com/archives/007058.php
+http://www.airbornemuseum.org/nieuws/news_uk.htm
+http://www.airc.org/bio_sittingbull.cfm?ep=10&ec=16
+http://www.airchek-windowdepot.com/products.html
+http://www.aircourier.co.uk/faq3.htm
+http://www.airdocs.com/why_business.aspx
+http://www.airenet.co.uk/alife/
+http://www.airenet.co.uk/alife/2003_07.html
+http://www.airflow.com/techtop/techf002.htm
+http://www.airforce.forces.gc.ca/central_band/directors_detail_e.asp
+http://www.airguns.net/aafta/faq.html
+http://www.airguns.net/faq.html
+http://www.airheads.org/old/index.php?Events
+http://www.airlinequality.com/Forum/air_can_2.htm
+http://www.airlinequality.com/Forum/biman-2.htm
+http://www.airlinequality.com/Forum/eva.htm
+http://www.airlines.org/ga/d.aspx?nid=9014
+http://www.airmailpioneers.org/Pilots/AartSmith.htm
+http://www.airmalta.com/page.jsp?id=4048&siteid=1
+http://www.airmech.co.uk/ubb/ultimatebb.php?/topic/80/233.html
+http://www.airnav.com/airport/12J
+http://www.airporticearena.com/
+http://www.airports.co.za/home.asp?pid=394
+http://www.airports.co.za/tools/Printbody.asp?pid=394
+http://www.airpower.maxwell.af.mil/airchronicles/apj/apj04/fal04/vorfal04.html
+http://www.airpower.maxwell.af.mil/airchronicles/apj/apj04/win04/cox.html
+http://www.airpower.maxwell.af.mil/airchronicles/apj/apj94/lewis.html
+http://www.airpower.maxwell.af.mil/airchronicles/apj/mann.html
+http://www.airpower.maxwell.af.mil/airchronicles/aureview/1984/may-jun/jensen.html
+http://www.airpower.maxwell.af.mil/airchronicles/cc/baker.html
+http://www.airpower.maxwell.af.mil/airchronicles/cc/shaw.html
+http://www.airpower.maxwell.af.mil/airchronicles/cc/sofpaper.html
+http://www.airpower.maxwell.af.mil/airchronicles/cc/strong.html
+http://www.airquality.co.uk/archive/what_are_we_doing.php
+http://www.airraro.com/general_conditions.html
+http://www.airsafe.com/kidsafe/kidsolo.htm
+http://www.airtransat.com/en/4_6_1.asp
+http://www.airwolf-shake.com/
+http://www.ais-sim.com/news_press_releases_082603.htm
+http://www.aisavannah.com/
+http://www.aisg.on.ca/stained_glass_publications/leadline/1994/portfolio.htm
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/family/rebbitzen/Struggling_With_Overeating.xml&torahportion=
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/literacy/mitzvahs/Lively_Introduction_to_Blessings.xml&torahportion=
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/torahportion/shalomweekly/Beshalach_5764.xml&torahportion=
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/torahportion/shalomweekly/Beshalach_5764.xml&torahportion=Beshalach
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/tubshvat/tubshvatcustoms/Kabbalistic_Tu_Bshvat_Seder.xml&torahportion=
+http://www.aish.com/SSI/articleToPrint.asp?PageURL=/tubshvat/tubshvatdefault/Kabbalistic_Tu_Bshvat_Seder.xml&torahportion=
+http://www.aish.com/dating/advice/Dating_Advice_108_-_Leaving_the_Nest.asp
+http://www.aish.com/dating/advice/Dating_Advice_12_-_Financial_Decisions.asp
+http://www.aish.com/dating/advice/Dating_Advice_158_-_The_Negative_Role_Models.asp
+http://www.aish.com/dating/advice/Dating_Advice_34_-_Physical_Barrier.asp
+http://www.aish.com/dating/advice/Dating_Advice_72_-_Breaking_the_Barrier.asp
+http://www.aish.com/family/mensch/Life_is_for_Love.asp
+http://www.aish.com/literacy/jewishhistory/The_Impact_of_the_Bible_4_-__-Proclaim_Liberty_throughout_the_Land...-.asp
+http://www.aish.com/societyWork/society/Standing_Strong_against_Terrorism.asp
+http://www.aish.com/spirituality/growth/Growth_or_Death_Ethics_of_the_Fathers_113.asp
+http://www.aish.com/spirituality/growth/I_Cant_Wait_for_the_Day_When....asp
+http://www.aish.com/spirituality/odysseys/The_Yo-Yo_In_the_Window.asp
+http://www.aishe.org/iutn-cutl-1998/
+http://www.aishe.org/resources/oecd-review-2004/oecd-review-2004.html
+http://www.aisn.net/facility.asp
+http://www.aisq.qld.edu.au/
+http://www.ait.org.tw/en/about_ait/tra/
+http://www.aitc.co.uk/press_centre/default.asp?id=3568
+http://www.aitc.co.uk/press_centre/default.asp?id=4225
+http://www.aitchisons.co.uk/about.htm
+http://www.aitech.ac.jp/~ckelly/SMF.html
+http://www.aitechnology.com/avantetech/hipa-trakker/errors.html
+http://www.aiv.aii.edu/aboutus_jobs.asp
+http://www.aivosto.com/project/project.html
+http://www.ajarn.com/
+http://www.ajarn.com/Banter/whereare%20the%20teachers.htm
+http://www.ajarn.com/Contris/schertzerfebruary2005.htm
+http://www.ajc.com/fitandtrim
+http://www.ajc.com/health/content/custom/blogs/weightloss/
+http://www.ajc.com/metro/content/metro/atlanta/0605/20southfulton.html
+http://www.ajc.com/news/content/custom/blogs/guard/
+http://www.ajc.com/news/content/custom/blogs/guard/entries/2005/05/
+http://www.ajc.com/news/content/living/homeandgarden/0305/25lighting.html
+http://www.ajc.com/news/content/metro/atlanta/0605/20southfulton.html
+http://www.ajc.com/opinion/content/opinion/bookman/
+http://www.ajc.com/travel/content/travel/cruises/stories/cruiseguide/13trcruisesailing.html
+http://www.ajc.com/travel/content/travel/resources/stories/goguide2005/13trgoeuro.html
+http://www.ajc.com/travel/content/travel/southeast/fl_stories/0105/09trflaseminolex.html
+http://www.ajc.org/InTheMedia/PubAntisemitism.asp?did=619
+http://www.ajc.org/InTheMedia/PubAntisemitism.asp?did=619&pid=1418
+http://www.ajc.org/InTheMedia/PublicationsPrint.asp?did=619
+http://www.ajc.org/InTheMedia/RelatedArticles.asp?did=1066
+http://www.ajccars.com/content/2004carguide/brand_ford.html
+http://www.ajchomefinder.com/content/news.html
+http://www.ajchomefinder.com/newsinclude/content/0104/21small.html
+http://www.ajchomefinder.com/newsinclude/content/0504/30inside.html
+http://www.ajcn.org/cgi/content/full/73/5/914
+http://www.ajcn.org/cgi/content/full/79/3/487
+http://www.ajcn.org/cgi/content/full/80/2/526
+http://www.ajcn.org/cgi/content/full/80/3/633
+http://www.ajdrake.com/e456_spr_03/materials/guides/syl_advice.htm
+http://www.ajdrake.com/teachers/teaching/questions/johnson_rasselas_drake.htm
+http://www.ajkids.com/hr_site/AboutUs.asp
+http://www.ajnascarracing.com/050904.htm
+http://www.ajph.org/cgi/content/full/93/8/1342
+http://www.ajplus.co.uk/b_bank/search_results_details/?report_ID=6518&report_num=0&channelid=6
+http://www.ajr.org.uk/pastjournal36.htm
+http://www.ajr.org/Article.asp?id=3613
+http://www.ajr.org/Article.asp?id=3736
+http://www.ajr.org/Article.asp?id=3807
+http://www.ajr.org/Article.asp?id=3812
+http://www.ajr.org/article_printable.asp?id=3172
+http://www.ajtmh.org/cgi/content/full/68/4_suppl/128
+http://www.ajwrb.org/jme/jme.html
+http://www.ajwrb.org/science/meal.shtml
+http://www.ajwrb.org/wjm/wjm.htm
+http://www.ak-sar-ben.com/years.html
+http://www.akc.org/breeds/boxer/index.cfm
+http://www.akc.org/breeds/rottweiler/index.cfm
+http://www.akenglish.com/Windows/AKEnglish/AKEnglish_Two/akenglish_two.html
+http://www.akerbeltz.org/rannsachadh/gaeliclearners.htm
+http://www.akerbeltz.org/rannsachadh/officialstatus.htm
+http://www.akf.dk/dk2005/summary/pisa_kbh.htm
+http://www.akirarabelais.com/i/i.html
+http://www.akme.btinternet.co.uk/mhblack.html
+http://www.aknerr.com/newsletter1/essentials.html
+http://www.aksharamala.com/forums/showthread.php?threadid=13994
+http://www.akshin.net/introduction/intro-suffering.htm
+http://www.akzonobel.com/misc/downloadabledoc.asp?tp=1&id=ZlMmpXf5UzQ%3D&number=4&l=English
+http://www.al-amana.org/index.php
+http://www.al-bab.com/arab/countries/iraq/who.htm
+http://www.al-bab.com/arab/docs/pal/mitchell3.htm
+http://www.al-bab.com/bys/articles/matthews96.htm
+http://www.al-bab.com/yemen/gov/amend00.htm
+http://www.al-bab.com/yet/places.htm
+http://www.al-islam.com/articles/articles-e.asp?fname=tui%20ch6
+http://www.al-islam.org/laws/marriage1.html
+http://www.al-jarida.net/Magazine/Hamza1.html
+http://www.ala.org/Template.cfm?Section=coppa&Template=/ContentManagement/ContentDisplay.cfm&ContentID=11061
+http://www.ala.org/Template.cfm?Section=mediarelations&Template=/ContentManagement/ContentDisplay.cfm&ContentID=16663
+http://www.ala.org/ala/accreditation/lisdirb/lisdirectory.htm
+http://www.ala.org/ala/acrl/acrlissues/effectiveprac/contributeeffective.htm
+http://www.ala.org/ala/acrl/acrlpubs/crlnews/backissues1999/julyaugust4/grantresources.htm
+http://www.ala.org/ala/acrl/acrlstandards/infolitscitech.htm
+http://www.ala.org/ala/oif/bannedbooksweek/challengedbanned/challengedbanned.htm
+http://www.ala.org/ala/washoff/WOissues/civilliberties/coppa/coppaexamples.htm
+http://www.ala.org/ala/yalsa/booklistsawards/selecteddvds/selecteddvdsvideospolicies.htm
+http://www.ala.org/template.cfm?Section=pio&Template=/cfapps/pio/statesort2.cfm&state=IN
+http://www.alabamaforestowners.com/CILive/CI041117.htm
+http://www.alabamagameandfish.com/fishing/stripers-hybrids-fishing/AL_0505_01/
+http://www.aladdin.com/HASPSL/Reduce_Costs.asp
+http://www.alakhawayn.ma/CampusLife/6-4-2asofJuly092004.htm
+http://www.alamod.net/alamod/index_en.php3?page=agenda
+http://www.alamut.com/cv/interviews/0103_INS.html
+http://www.alamut.com/past/0002.html
+http://www.alan-mason.co.uk/wedding_page_12.htm
+http://www.alan-partridge.co.uk/scripts/thedaytoday/daytod2.htm
+http://www.alanemrich.com/CSR_pages/CSRspeaks.htm
+http://www.alanluber.com/pcfearfactor/Commentary/pcmigrationtools.htm
+http://www.alanluber.com/pcfearfactor/readerscomments.htm
+http://www.alaska.edu/opa/eInfo/index.xml?StoryID=114
+http://www.alaskastatefair.org/2005/aboutus/directions.html
+http://www.alaskawebs.com/adsa/akdsacharters.htm
+http://www.alastairmcintosh.com/articles/2005-ern.htm
+http://www.alaw.org/air_quality/breathe_easy_network/
+http://www.alaw.org/support_alaw/climb_for_clean_air/registered_climbers/training_schedule.html
+http://www.alba.org.uk/links/org.html
+http://www.alba.org.uk/localby/localbyreview.html
+http://www.alba.org.uk/nescotland/nescotresult9.html
+http://www.alba.org.uk/polls/030804.html
+http://www.alba.org.uk/scot99constit/w02.html
+http://www.albahouse.org/Dealing.htm
+http://www.albany.edu/grad/expenses.html
+http://www.albany.edu/veterans/archives/individuals/jonesletter.htm
+http://www.albanyinstitute.org/HTML/history.htm
+http://www.albasrah.net/maqalat/english/0105/GI-Special-3A17-I%20Didnt-Go-Into-The-Army-To-Kill.htm
+http://www.albasrah.net/maqalat/english/1204/GI-Specia-l2C65-Military-Resistance-To-War-Growing.htm
+http://www.albasrah.net/moqawama/english/0504/iraqiresistancereport_8-90504.htm
+http://www.albasrah.net/moqawama/english/0804/iraqiresistancereport_010804.htm
+http://www.albasrah.net/moqawama/english/1104/iraqiresistancereport_271104.htm
+http://www.albasrah.net/moqawama/english/1204/iraqiresistancereport_231204.htm
+http://www.albawest.com/scots.html
+http://www.albedo.co.uk/goodies/logsite/lsdsdoc.cfm
+http://www.albemarle-london.com/rnt-talkingcure.html
+http://www.albemarle-london.com/taboo.html
+http://www.albertapalliative.net/APN/PCHB/15_SupportiveCarePatientsFamily.html
+http://www.albertarose.org/
+http://www.albertson.edu/aboutaci/liberal_arts/la_lecture.asp
+http://www.albinism.org/conference.html
+http://www.albionmich.com/history/histor_notebook/R980413.shtml
+http://www.albmolecular.com/features/tekreps/vol07/no11/
+http://www.albright.edu/reporter/wint02/edge1.html
+http://www.albumvote.co.uk/u/u2/achtung_baby.htm
+http://www.albuquerquejournal.com/santafe/venuenorth/266431venuenorth12-03-04.htm
+http://www.alchemyinstitute.com/course.htm
+http://www.alchemyinstitute.com/ptrans.htm
+http://www.alchemysite.com/blog/more_human.html
+http://www.alchemywebsite.com/p-fermen.html
+http://www.alcoa.com/australia/en/news/speeches/ageing_population.asp
+http://www.alcoa.com/global/en/environment/climate_change/saying.asp
+http://www.alcoholconcern.org.uk/servlets/doc/465
+http://www.alcoholconcern.org.uk/servlets/wrapper/knowledgebase.jsp?topic_id=5
+http://www.alcoholfreechildren.org/en/research/index.cfm
+http://www.alcoholinformation.isdscotland.org/alcohol_misuse/servlet/controller?p_service=Content.show&p_applic=CCC&pContentID=1599
+http://www.alcoholinformation.isdscotland.org/alcohol_misuse/servlet/controller?p_service=Content.show&p_applic=CCC&pContentID=2013
+http://www.alcoholismtreatment.org/step_one.htm
+http://www.alcoholreviews.com/ALCOHOLTOOLS/index.shtml
+http://www.alcor.org/Library/html/CostOfCryonics.html
+http://www.alcor.org/Library/html/bringingdixieback.html
+http://www.alcor.org/Library/html/standby3.html
+http://www.alcor.org/conferences/2002/
+http://www.alcor.org/printable.cgi?fname=Library%2Fhtml%2Fbringingdixieback.html
+http://www.alcrevival.com/statement_of_faith.htm
+http://www.alcyone.com/max/lit/war/xii.html
+http://www.aldea.com/cenic/phase2/amb.html
+http://www.alderhey.com/RLCH/cardiac_statistics_data.asp
+http://www.aldine.k12.tx.us/
+http://www.aldine.k12.tx.us/news/index.cfm
+http://www.aldine.k12.tx.us/news/specific_article.cfm?ID=609
+http://www.aldridge.com/t86_fea.html
+http://www.alertnet.org/thefacts/reliefresources/106802851261.htm
+http://www.alertnet.org/thenews/fromthefield/claerpath/110749490851.htm
+http://www.alessandra.com/meettony/rave_reviews.asp
+http://www.aletheia.fsnet.co.uk/cache/ulloa.html
+http://www.alexa.com/browse/general?catid=278417&mode=general
+http://www.alexa.com/browse/general?catid=5742&mode=general
+http://www.alexa.com/browse/general?catid=5744&mode=general
+http://www.alexandbetsy.com/idx/elistingManager/?stapass=%7C'act'%7C'pend'
+http://www.alexanderlaw.com/
+http://www.alexanderlaw.com/bextra/side-effects.html
+http://www.alexanderlaw.com/cases.html
+http://www.alexanderlaw.com/class-action-cases.html
+http://www.alexanderlaw.com/our-law-firm.html
+http://www.alexanderlaw.com/vioxx/
+http://www.alexanderlaw.com/vioxx/side-effects.html
+http://www.alexanderpalace.org/palace/boydream.html
+http://www.alexanderpalace.org/palace/travelinfo.html
+http://www.alexanderstreetpress.com/products/nadr.htm
+http://www.alexandertechworks.com/Literature/alexander_ucla.html
+http://www.alexandrasamuel.com/netpolitics/studentsites/publicsites/Susan_Avar%20Folder/page4.html
+http://www.alexandria-press.com/online/online20_dusan_velickovic_my_europe.htm
+http://www.alexcia.com/sounds/soundmain.shtml
+http://www.alexflood.org.nz/Articles/Trouble%20with%20Dams.htm
+http://www.alexist.com/
+http://www.alexking.org/fantasy_sports/baseball/baseball_2002/midseason_review.html
+http://www.alexking.org/sports/golf/
+http://www.alexrivera.com/PAGES/PRESS/DSCOOP.html
+http://www.alexyellowlees.com/reviews.htm
+http://www.alfafarmers.org/issues/farmbill.phtml
+http://www.alfiekohn.org/teaching/ftt.htm
+http://www.alfiekohn.org/teaching/hnttv.htm
+http://www.alfred.edu/students/student_services/csdc_guide_suicide.html
+http://www.alga.asn.au/policy/regional/2002sor.php
+http://www.algathafi.org/kuria/kuria-en.htm
+http://www.algebra.com/algebra/about/history/Oxford-English-Dictionary.wikipedia
+http://www.alhaq.org/cp-campaign/news/replacing_politics_with_law.htm
+http://www.alhewar.com/percy.html
+http://www.alhfam.org/alhfam.jobs.html
+http://www.ali.gov.uk/htm/inspection_provision_Jobcentre.htm
+http://www.alia.ie/tirnanog/cafe.html
+http://www.alia.ie/tirnanog/sochis/xviiic.html
+http://www.alibaba.com/catalogs/1217/Second_Hand.html
+http://www.alibaba.com/catalogue/100102c5p0h/Lubricant.html
+http://www.alibaba.com/catalogue/136c1p0h/asi/Plant_Animal_Oil.html
+http://www.alibaba.com/catalogue/136c1p0h/mea/Plant_Animal_Oil.html
+http://www.alibaba.com/catalogue/136c1p0h/weu_eec/Plant_Animal_Oil.html
+http://www.alibaba.com/catalogue/311c1p0h/nam/Children_Garment.html
+http://www.alibris.com/search/books/author/Citrin,%20James%20M
+http://www.alibris.com/search/books/author/Patterson,%20James
+http://www.alibris.com/search/books/subject/Christmas
+http://www.alice-in-wonderland.net/explain/alice863.html
+http://www.alice-smith.edu.my/secondary-school/academic-leadership/ict.htm
+http://www.alice-smith.edu.my/secondary-school/academic-leadership/science.htm
+http://www.alice.org/Randy/raibert.htm
+http://www.aliceandbill.com/2004/11/computers-make-school-kids-dumber.html
+http://www.aliceandbill.com/2005/01/one-word-is-worth-thousand-confusing.html
+http://www.alicebtoklas.org/abt/newsletter0502.htm
+http://www.alicepauldirect.com/directmail.htm
+http://www.alicespringsnews.com.au/0434.html
+http://www.alicespringsnews.com.au/0508.html
+http://www.alicespringsnews.com.au/0626.html
+http://www.alicespringsnews.com.au/0719.html
+http://www.aliciapatterson.org/APF0206/Viorst/Viorst.html
+http://www.aliciapatterson.org/APF0401/Denenberg/Denenberg.html
+http://www.aliciapatterson.org/APF1804/Schulte/Schulte.html
+http://www.aliconferences.com/conferences/homeland_security/main.html
+http://www.alieniloquent.com/
+http://www.alienresistance.org/roswell1947ufocrash.htm
+http://www.alienware.com/Profile_Pages/Customer_Terms.aspx
+http://www.alienware.com/main_creative_pro.aspx
+http://www.alienware.com/workstations_dcc.aspx?from=CGFocus:workstation_pc_banner_160x600_dcc&cs=0
+http://www.alienware.com/workstations_dcc.aspx?from=info2x:workstation_pc_banner_120x60_dcc
+http://www.alienware.com/workstations_dcc.aspx?from=tikistudios:workstation_pc_banner_468x60_dcc
+http://www.alif-india.com/legend.html
+http://www.alif-india.com/love.html
+http://www.alif.com/afc/profile-ammar.htm
+http://www.alifelessnormal.com/
+http://www.alinaadams.com/counterpoint/backissues/counter32.html
+http://www.alinaam.org.za/library/business/bscompliant2.htm
+http://www.alinghi.com/en/32ndac/rules/
+http://www.alionka.com/
+http://www.alioth.net/Fiction/heaven.html
+http://www.aliran.com/ms/2003/0228.html
+http://www.alislam.org/library/links/73-01.html
+http://www.alistapart.com/articles/alternate/
+http://www.alistapart.com/articles/artdirweb/
+http://www.alistapart.com/articles/bodyswitchers/
+http://www.alistapart.com/articles/cms1/
+http://www.alistapart.com/articles/cssdrop2/
+http://www.alistapart.com/articles/csstalking/
+http://www.alistapart.com/articles/customcorners/
+http://www.alistapart.com/articles/elastic/
+http://www.alistapart.com/articles/flashsatay/
+http://www.alistapart.com/articles/fragments/
+http://www.alistapart.com/articles/helpingvisitors/
+http://www.alistapart.com/articles/pngopacity/
+http://www.alistapart.com/articles/searchhighlight/
+http://www.alistapart.com/articles/tohell/
+http://www.alistapart.com/stories/fear/
+http://www.alistapart.com/stories/ie5mac/
+http://www.alistapart.com/stories/journey/
+http://www.alistapart.com/stories/sizematters/
+http://www.alistapart.com/stories/writebetter/
+http://www.alite.co.uk/cuttings/fidgetingsuntelegraph.htm
+http://www.alittlepregnant.com/alittlepregnant/2004/10/they_were_no_do.html
+http://www.alittlepregnant.com/alittlepregnant/2005/05/keep_your_powde.html
+http://www.aliveandpicking.com/3rd01.html
+http://www.alivewithlove.com/alluring/flaxseedoil.html
+http://www.aljazeera.com/cgi-bin/news_service/article_full_story.asp?service_id=8602
+http://www.aljazeera.com/cgi-bin/news_service/article_full_story.asp?service_id=8687
+http://www.aljazeera.com/cgi-bin/news_service/middle_east_full_story.asp?service_id=6977
+http://www.aljazeera.com/cgi-bin/news_service/middle_east_full_story.asp?service_id=8328
+http://www.aljazeera.com/cgi-bin/news_service/middle_east_full_story.asp?service_id=8929
+http://www.aljazeera.com/me.asp?service_ID=6900
+http://www.aljazeerah.info/News%20archives/2003%20News%20archives/March%202003%20News/14%20New/6%20Palestinians%20killed%20in%20Israeli%20occupation%20raid%20on%20Jenin%20%20aljazeerah.info.htm
+http://www.alkermes.com/news/index.asp?id=35
+http://www.alkhortoastmasters.com/grammarians/grammarian.htm
+http://www.all-baseball.com/cubreporter/archives/019180.html
+http://www.all-baseball.com/cubreporter/archives/019263.html
+http://www.all-chinese-tea.com/
+http://www.all-creatures.org/mfz/health-highprotein2.html
+http://www.all-energy.co.uk/speech.php
+http://www.all-hands.net/pn/modules.php?op=modload&name=News&file=article&sid=375
+http://www.all-homedecor.com/
+http://www.all-internet-security.com/web_site_hacked.html
+http://www.all-internet.com/articles/home-decorating-tips.html
+http://www.all-internet.com/lawn-garden-articles.html
+http://www.all-natural.com/expose.html
+http://www.all-natural.com/gersten.html
+http://www.all-rooms.com/dyfed/hotels/Boars_Head_Hotel.htm
+http://www.all-science-fair-projects.com/science_fair_projects/28/455/f96f8be10bdc9413c758911d2e385ed3.html
+http://www.all-science-fair-projects.com/science_fair_projects/92/49/f0ef8e5b2514803f45d91ea5e208786a.html
+http://www.all-story.com/extra/issue32/running.html
+http://www.all-story.com/issues.cgi?action=show_story&story_id=239
+http://www.all.org/activism/970910.htm
+http://www.all4ed.org/publications/MeasuringGraduationToMeasureSuccess/bios.html
+http://www.all4ed.org/teacher_principal/research_reports.html
+http://www.allaboutbeer.com/features/206.gas4.html
+http://www.allaboutcountry.com/cfm/Articles.cfm?articleID=577
+http://www.allaboutgames.co.uk/gamereviews.php?185
+http://www.allabouthome.com/tips/moving_tips.html
+http://www.allaboutjazz.com/php/article_print.php?id=15310
+http://www.allaboutlawns.com/lawn-maintenance-care/getting-to-know-your-lawn.php
+http://www.allaboutmassagers.com/app/content/biomagnetic
+http://www.allaboutmassagers.com/app/content/biomagnetic/print_page
+http://www.allaboutmedicalsales.com/msr/230204.html
+http://www.allaboutmoms.com/powerstruggles.htm
+http://www.allaboutngage.com/mobile/reviews/review2.php?id=116
+http://www.allaboutsymbian.com/reviews/review2.php?id=116
+http://www.allaboutsymbian.com/reviews/review2.php?id=122
+http://www.allaboutturkey.com/info.htm
+http://www.allaboutvision.com/eyeglasses/eyeglasses_shape_color_analysis.htm
+http://www.allaboutvision.com/resources/glossary.htm
+http://www.allaboutvision.com/sports/protection.htm
+http://www.allaboutvision.com/visionsurgery/asksurgeon.htm
+http://www.allaboutvision.com/visionsurgery/custom_lasik.htm
+http://www.allavida.org/alliance/axmar05c.html
+http://www.allbooks4less.com/b4less/show_books_pub.asp?publisher=William+Morrow+%26+Company&search_type=P
+http://www.allbusiness.com/articles/CareerAdvice/1594-27-1807.html
+http://www.allbusiness.com/articles/EmploymentHR/1471-33-1829.html
+http://www.allbusiness.com/articles/EmploymentHR/725-33-1829.html
+http://www.allbusiness.com/articles/SalesMarketing/762-26-1782.html
+http://www.allbusiness.com/articles/content/1471-33-1829.html
+http://www.allbusiness.com/articles/content/322.asp
+http://www.allbusiness.com/blog/ManagementCraft/3356/001773.html
+http://www.allbusiness.com/blog/ManagementCraft/3356/001784.html
+http://www.allcoastsportfishing.com/fishing-report-information/fishingreports.pl/fishing-saltwater-fish.html
+http://www.allcrafts.net/Links/quilting.htm
+http://www.allcrafts.net/gardening.htm
+http://www.allculinaryschools.com/schools/ID147/
+http://www.alldayentertainment.com/online-store/scstore/allday/monsters/reviews.html
+http://www.alleged.com/radio/Beverage2/
+http://www.allenandunwin.com/estudy/takingnotes.asp
+http://www.allenandunwin.com/estudy/timemanagement.asp
+http://www.allenaustin.net/oab.htm
+http://www.allencowling.com/outstate.htm
+http://www.allenlane.org.uk/grants1.htm
+http://www.allenwsmith.com/id5.html
+http://www.alleycatscratch.com/lotr/Elf/Legolas/Jerkin.htm
+http://www.alleycatscratch.com/lotr/makingem/Patterns.htm
+http://www.allfreecrafts.com/craftlinks.htm
+http://www.allfreelancework.com/articleho6prof.php
+http://www.allgohere.com/adverti2.htm
+http://www.allhallows.ie/index.php?option=content&task=view&id=188&Itemid=149
+http://www.allhatnocattle.net/6-10-04_walking_the_walk.htm
+http://www.allhiphop.com/hiphopnews/?ID=3364
+http://www.alliance-natural-health.org/index.cfm?action=events&ID=all
+http://www.alliance.brown.edu/programs/eac/lncblt_v2-8.shtml
+http://www.alliancebschool.org/htmls/Programs/abaumf.htm
+http://www.alliancecapital.com/DomesticPortal/MutualFundDetail.aspx?cid=18670&ft=f
+http://www.alliancecm.org/index.php?page_id=31
+http://www.allianceenterprises.com/alliance/Products/Features.htm
+http://www.allianceforsecurity.org/basictraining
+http://www.allianceparty.org/showconsultation.asp?id=18
+http://www.allianceparty.org/showspeech.asp?id=38
+http://www.alliancesouthasia.org/index.cfm?sectionID=27&objectID=203
+http://www.alliantenergy.com/stellent/groups/public/documents/pub/bus_ps_012348.hcsp
+http://www.allinlondon.co.uk/jobs/job.php?jid=232
+http://www.allinlondon.co.uk/jobs/job.php?jid=449
+http://www.allmaninternet.com/safrica/home.html
+http://www.allmontaukflyfishing.com/fishing_report.htm
+http://www.allmusic.com/cg/amg.dll?p=amg&sql=11:5q4tk6hx9krg~T1
+http://www.allnetwebdesign.com/development.htm
+http://www.allowe.com/Humor/video.htm
+http://www.allpapers.com/sample2.htm
+http://www.allpar.com/amc/gremlin.html
+http://www.allpar.com/history/inside/commentary.shtml
+http://www.allpar.com/model/upcoming.html
+http://www.allpm.com/modules.php?op=modload&name=PNphpBB2&file=viewtopic&p=601
+http://www.allpm.com/modules.php?op=modload&name=PNphpBB2&file=viewtopic&t=278
+http://www.allreaders.com/Topics/info_11653.asp
+http://www.allreaders.com/Topics/info_13449.asp
+http://www.allreaders.com/Topics/info_7466.asp?BSID=20567816
+http://www.allreaders.com/board.asp?BoardID=10479
+http://www.allsaintsonline.org.uk/features/stewardship.htm
+http://www.allsanfranciscotours.com/Body.asp?Page=TourDetails&tour=SFO-B0015
+http://www.allschools.com/stratford-cooking/career-services/
+http://www.allshakespeare.com/loves-labors/37907
+http://www.allsoulskc.org/sermons/021020.html
+http://www.allstaragency.com/cgi-bin/speaker2001.asp?ID=57
+http://www.allthatmatters.com/healing.php
+http://www.allthelyrics.com/lyrics/a_walk_to_remember_soundtrack/a_walk_to_remember/mandy_moorecry-74303-lyric/
+http://www.allthelyrics.com/lyrics/cant_hardly_wait_soundtrack/cant_hardly_wait/blink_182dammit-75471-lyric/
+http://www.allthelyrics.com/lyrics/cant_hardly_wait_soundtrack/cant_hardly_wait/matthew_sweetfarther_down-66854-lyric/
+http://www.allthelyrics.com/lyrics/peter_gabriel/
+http://www.allthelyrics.com/lyrics/suzi_quatro/main_attraction/oh_baby-69942-lyric/
+http://www.allthingschristie.com/archives/002538.html
+http://www.allthingsfrugal.com/p_wearout.htm
+http://www.allthingswilliam.com/beauty.html
+http://www.allthingswilliam.com/business.html
+http://www.allthingswilliam.com/duty.html
+http://www.allthingswilliam.com/sex.html
+http://www.allthingswilliam.com/truth.html
+http://www.allthingszombie.com/news.php
+http://www.alltooflat.com/about/personal/sean/index.php?BeginDate=20031124&EndDate=20031130
+http://www.alltooflat.com/serious/adventures/birthday/
+http://www.allwatchers.com/topics/info_28952.asp
+http://www.allweathersports.com/winter/winter.html
+http://www.allwinecountrytours.com/company/affiliate_business.html
+http://www.allwinecountrytours.com/tours/wine_country_tours_info.html
+http://www.allworth.com/Articles/article14.htm
+http://www.alma.nrao.edu/memos/html-memos/alma216/memo216.html
+http://www.almac.co.uk/proven/Funding1.htm
+http://www.almaden.ibm.com/cs/wbi/doc/examples/history/
+http://www.almaguinnews.com/Letters/14_LET_11_12_03.htm
+http://www.almanacnews.com/morgue/1998/1998_11_11.votewrap.html
+http://www.almanacnews.com/morgue/2004/2004_08_11.annex.shtml
+http://www.almenconi.com/topics/chr_music/music_reviews/pivitplex.html
+http://www.alminbar.com/khutbaheng/9012.htm
+http://www.almishkat.org/engdoc99/rn13/rn13_02.htm
+http://www.almosthomerescue.org/
+http://www.aln.org/publications/magazine/v2n2/mason.asp
+http://www.aloha.com/~craven/chcmedia/jrdpaper.html
+http://www.alor.org/Canada/Royal%20Bank%20Discriminates%20Against%20Pro-Life%20Family%20Organisations%20Nov%202001.htm
+http://www.alor.org/Volume23/Vol23No14.htm
+http://www.alor.org/Volume36/Vol36No50.htm
+http://www.alovelinksplus.com/advice/ask_april/finding-your-perfect-partner.htm
+http://www.alovelinksplus.com/advice/nice_guy_test.htm
+http://www.alovelinksplus.com/advice/rinatta_paries/how_we_affect_other_lives.htm
+http://www.alovelinksplus.com/area/international10a.htm
+http://www.alp.org.au/action/electionresult.php
+http://www.alp.org.au/action/electionresult.php?print=on
+http://www.alp.org.au/action/electionresult.php?tv=on
+http://www.alp.org.au/media/0605/dsiloo080.php
+http://www.alpacanaca.com/
+http://www.alpacas.com/Resources/TaxPlanner.aspx
+http://www.alpca.org/faq.beginners.html
+http://www.alperlaw.com/asset_planning_newsletter.html
+http://www.alpha-thrall-web-art.com/museumindex/museumindex.htm
+http://www.alphachimp.com/clients/blog.html
+http://www.alphadeltaplus.20m.com/contact.html
+http://www.alphalink.com.au/~drednort/lablocus.html
+http://www.alphalink.com.au/~rez/Journey/fraserspeech.htm
+http://www.alphane.com/moon/PalmTree/tomorrow.htm
+http://www.alphapk.com/alphapk/section.cfm?wSectionID=227
+http://www.alphasearch.ca/events/index.php
+http://www.alpine-usa.com/products/leading_technology/leading_tech_SAT_Radio.htm
+http://www.alpineclubofcanada.ca/whoweare/faq.html
+http://www.alpinefund.org/garth/tea-delivery.htm
+http://www.alpinehikers.com/contact.html
+http://www.alpinehomeair.com/walloffame.cfm
+http://www.alpinesurvival.com/immigration.html
+http://www.alrdesign.com/pages/philo.html
+http://www.alsabaah.com/20040905/english.htm
+http://www.alsabaah.com/English.html
+http://www.alsagerschool.co.uk/subjects/sub_content/geography/Gpop/HTMLENH/pproblem/xt6.htm
+http://www.alsont.ca/about_us.aspx
+http://www.alsont.ca/services.aspx
+http://www.alsopreview.com/thewriters/slyman/esorphan.html
+http://www.alta.org/
+http://www.altassets.com/knowledgebank/leadingedge/2002/nz3089.php
+http://www.altavista.com/about/privacy
+http://www.altavista.com/news/results?q=domain%3Auk+alan+greenspan&sort=date&stq=60
+http://www.altcorp.com/DentalInformation/2ndvacconf.htm
+http://www.alte.org/quality_assurance/quality.cfm
+http://www.alternatiff.com/scripting/
+http://www.alternative-windows.com/sitemap.htm
+http://www.alternativementalhealth.com/articles/estogen.htm
+http://www.alternativementalhealth.com/ezine/Ezine29.htm
+http://www.alternativemusic.com/deana.html
+http://www.alternativepethealth.com/canine-diet.html
+http://www.alternativetentacles.com/
+http://www.alternet.org/columnists/story/13307/
+http://www.alternet.org/columnists/story/18291/
+http://www.alternet.org/election04/19047/
+http://www.alternet.org/envirohealth/19104/
+http://www.alternet.org/envirohealth/19719/
+http://www.alternet.org/envirohealth/21852/
+http://www.alternet.org/mediaculture/19811/
+http://www.alternet.org/mediaculture/20309/
+http://www.alternet.org/mediaculture/21034/
+http://www.alternet.org/mediaculture/22072/
+http://www.alternet.org/mediaculture/22213/
+http://www.alternet.org/rights/21957/
+http://www.alternet.org/rights/22179/
+http://www.alternet.org/rights/22199/
+http://www.alternet.org/sms/22162/
+http://www.alternet.org/story.html?StoryID=13160
+http://www.alternet.org/story.html?StoryID=15027
+http://www.alternet.org/story.html?StoryID=17466
+http://www.alternet.org/story.html?StoryID=178
+http://www.alternet.org/story/12956
+http://www.alternet.org/story/15414
+http://www.alternet.org/story/16325/
+http://www.alternet.org/story/16474
+http://www.alternet.org/story/178/
+http://www.alternet.org/story/20991/
+http://www.alternet.org/story/21641/
+http://www.alternet.org/story/22039/
+http://www.alternet.org/story/22125/?comments=view&cID=8292&pID=8153
+http://www.alternet.org/story/22135/
+http://www.alternet.org/story/22233/
+http://www.alternet.org/story/22235/
+http://www.alternet.org/story/22298/
+http://www.alternet.org/story/22304/?comments=view&cID=13131&pID=13114
+http://www.alternet.org/story/23195/
+http://www.alternet.org/waroniraq/18634/
+http://www.alternet.org/waroniraq/19258/
+http://www.alternet.org/waroniraq/19620/
+http://www.alternet.org/waroniraq/20739/
+http://www.alternet.org/waroniraq/21780/?comments=view&cID=2652&pID=2621
+http://www.altiris.com/company/pressreleases/view.asp?pr=341
+http://www.altisinc.com/Links/100_Rules.html
+http://www.altonweb.com/cs/downsyndrome/duffen1975.html
+http://www.altpenis.com/penis_news/women_penis_size.shtml
+http://www.altpr.org/
+http://www.altpr.org/apr14/luddite_films.html
+http://www.altpr.org/index.php
+http://www.altsex.org/altsex-home.html
+http://www.altsex.org/contquest.html
+http://www.alttext.com/archives/02/05/020513did_you_know_tha.html
+http://www.altvetmed.com/face/8723-aquatic-exercise.html
+http://www.alumaxbath.com/tech/tgp.htm
+http://www.alumbo.com/article/11589-Fighting-Obesity-an-ayurvedic-way.html
+http://www.alumbo.com/discussion39.html
+http://www.alumbo.com/magazine39.html
+http://www.alumbo.com/resources39.html
+http://www.alumbo.com/shopping39.html
+http://www.alumni.ca/~frick3a/
+http://www.alumni.cornell.edu/orgs/clubs/germany/news.html
+http://www.alumni.net/press/press_01012000.asp
+http://www.alumni.umich.edu/travel/2005itin.php?trip=16
+http://www.alumni.umn.edu/Campus_Digest6.html
+http://www.alumni.utah.edu/continuum/fall01/legal.htm
+http://www.alvincyork.org/Biography.htm
+http://www.always-health.com/Whattheneed_healthinsurance.html
+http://www.alwaysimproving.com/church/aboutus.htm
+http://www.alwayson-network.com/comments.php?id=4133_0_6_0_C
+http://www.alwayson-network.com/comments.php?id=4735_0_6_0_C
+http://www.alwayson-network.com/comments.php?id=P1859_0_6_0_C
+http://www.alwayson-network.com/comments.php?id=P4133_0_6_0_C
+http://www.alwayson-network.com/comments.php?id=P4735_0_6_0_C
+http://www.alwaysontherun.net/martina.htm
+http://www.alwaysontherun.net/neneh.htm
+http://www.alwaysontherun.net/portis.htm
+http://www.alwaysontherun.net/ruby.htm
+http://www.alwaysontherun.net/walk.htm
+http://www.alwaysthinking.com/support/
+http://www.alwl.org/
+http://www.alz.org/preventionconference/pc2005/062005innovativetherapies.asp
+http://www.alzheimer.ca/english/creativespace/artgallery-renee-twopaintings.htm
+http://www.alzheimers.org.uk/
+http://www.alzheimers.org.uk/After_diagnosis/Sorting_out_your_money/info_financiallegal.htm
+http://www.alzheimers.org.uk/BranchWebsites/WestKent/branchservices.htm
+http://www.alzheimers.org.uk/Caring_for_someone_with_dementia/Coping_with_caring/info_shorttermcare.htm
+http://www.alzheimers.org.uk/Caring_for_someone_with_dementia/Residential_and_nursing_care/info_choicesincare.htm
+http://www.alzheimers.org.uk/Caring_for_someone_with_dementia/Residential_and_nursing_care/info_localauthority.htm
+http://www.alzheimers.org.uk/Caring_for_someone_with_dementia/Residential_and_nursing_care/info_payingfees.htm
+http://www.alzheimers.org.uk/Working_with_people_with_dementia/Publications/buyonline.htm
+http://www.alzheimersupport.com/library/showarticle.cfm?id=1393
+http://www.am-i-fat.com/setting_goals.html
+http://www.ama-assn.org/ama/pub/category/12331.html
+http://www.ama-assn.org/ama/pub/category/168.html
+http://www.ama-assn.org/ama/pub/category/2714.html
+http://www.ama-assn.org/amednews/2000/12/04/hlsc1204.htm
+http://www.ama-assn.org/public/peer/7_15_98/jpv71015.htm
+http://www.amacad.org/news/induct2002release.aspx
+http://www.amacad.org/news/new2002.aspx
+http://www.amacad.org/publications/china2.aspx
+http://www.amacad.org/publications/lethal.aspx
+http://www.amadorbooks.com/nocardsh.htm
+http://www.amadrama.co.uk/setdesign.shtml
+http://www.amanet.org/books/catalog/0814408370_ch.htm
+http://www.amanet.org/movingahead/editorial2004/blame_game.htm
+http://www.amanet.org/press/archives/yk2_holi.htm
+http://www.amanresorts.com/offers/ganisummer.htm
+http://www.amaranthwomyn.com/hbpage-2.html
+http://www.amaravati.org/abm/english/documents/the_way_it_is/15tte.html
+http://www.amarilloart.org/hs_cult_creatingplace.html
+http://www.amartusa.com/mall/theloadingdockbeds.htm
+http://www.amasci.com/amateur/elecdir.html
+http://www.amasci.com/emotor/chargdet.html
+http://www.amasci.com/freenrg/audwall.html
+http://www.amasci.com/freenrg/ideas.html
+http://www.amasci.com/tesla/tmistk.html
+http://www.amasci.com/weird/unusual/blold.html
+http://www.amatecon.com/etext/cftoi/cftoi-ch20.html
+http://www.amateurgourmet.com/the_amateur_gourmet/2004/08/the_woman_outsi.html
+http://www.amaxa.com/publicrelations.html
+http://www.amazing-cover-letters.com/
+http://www.amazing.com/isp/hardware.html
+http://www.amazing.com/politics/malibu/
+http://www.amazingdreamspublishing.com/above.html
+http://www.amazingpregnancy.com/articles/finding-out-sex-of-baby.html
+http://www.amazon.co.uk/exec/obidos/ASIN/0199111693
+http://www.amazon.co.uk/exec/obidos/ASIN/0261102389
+http://www.amazon.co.uk/exec/obidos/ASIN/0471986232
+http://www.amazon.co.uk/exec/obidos/ASIN/0750658584
+http://www.amazon.co.uk/exec/obidos/ASIN/1405206128
+http://www.amazon.co.uk/exec/obidos/ASIN/B000024DOR
+http://www.amazon.co.uk/exec/obidos/ASIN/B00005A0Z7
+http://www.amazon.co.uk/exec/obidos/ASIN/B00005AFQZ
+http://www.amazon.co.uk/exec/obidos/ASIN/B00008YNGV
+http://www.amazon.co.uk/exec/obidos/ASIN/B0002UUO9K
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/274661
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/275044
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/276817
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/278148
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/284657
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/291864
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/468294
+http://www.amazon.co.uk/exec/obidos/tg/browse/-/713100
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/books/0099281821/customer-reviews
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/books/0349116032/customer-reviews
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/books/0752837990/customer-reviews
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/electronics/B00016ZOSQ/customer-reviews
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/health-and-beauty/B00027LHGM/customer-reviews
+http://www.amazon.co.uk/exec/obidos/tg/stores/detail/-/videogames/B0001ZX9XO/customer-reviews
+http://www.amazon.com/exec/obidos/ASIN/0060728256/
+http://www.amazon.com/exec/obidos/ASIN/0060925175/
+http://www.amazon.com/exec/obidos/ASIN/006093817X/
+http://www.amazon.com/exec/obidos/ASIN/0070480176/
+http://www.amazon.com/exec/obidos/ASIN/0070522359/
+http://www.amazon.com/exec/obidos/ASIN/0071383832/
+http://www.amazon.com/exec/obidos/ASIN/0078824451/
+http://www.amazon.com/exec/obidos/ASIN/0131014056/
+http://www.amazon.com/exec/obidos/ASIN/0140144560/
+http://www.amazon.com/exec/obidos/ASIN/0140259775/
+http://www.amazon.com/exec/obidos/ASIN/0140266321/qid%3D996359179/sr%3D1-1/ref%3Dsc_b_1
+http://www.amazon.com/exec/obidos/ASIN/0151039682/
+http://www.amazon.com/exec/obidos/ASIN/0151039682/qid=994519188/sr=1-3/ref=sc_b_3/arabworldbooksA/
+http://www.amazon.com/exec/obidos/ASIN/015602876X/
+http://www.amazon.com/exec/obidos/ASIN/0192833731/ref=nosim/mantexinformat0b
+http://www.amazon.com/exec/obidos/ASIN/0195029100/
+http://www.amazon.com/exec/obidos/ASIN/0195215737/
+http://www.amazon.com/exec/obidos/ASIN/0195218884/
+http://www.amazon.com/exec/obidos/ASIN/0195218884/ref=nosim/briandanaakers
+http://www.amazon.com/exec/obidos/ASIN/0198505051/
+http://www.amazon.com/exec/obidos/ASIN/0198611862/
+http://www.amazon.com/exec/obidos/ASIN/0201633612
+http://www.amazon.com/exec/obidos/ASIN/0201633612/
+http://www.amazon.com/exec/obidos/ASIN/0201775948/
+http://www.amazon.com/exec/obidos/ASIN/020530902X/
+http://www.amazon.com/exec/obidos/ASIN/0253211190/
+http://www.amazon.com/exec/obidos/ASIN/0262731401/
+http://www.amazon.com/exec/obidos/ASIN/0300067453/
+http://www.amazon.com/exec/obidos/ASIN/0312135211/ref=nosim/speculativefic051-20
+http://www.amazon.com/exec/obidos/ASIN/0312174918/
+http://www.amazon.com/exec/obidos/ASIN/0312282567/
+http://www.amazon.com/exec/obidos/ASIN/0316001015/
+http://www.amazon.com/exec/obidos/ASIN/0324016271/
+http://www.amazon.com/exec/obidos/ASIN/034539769X/
+http://www.amazon.com/exec/obidos/ASIN/0385337116/
+http://www.amazon.com/exec/obidos/ASIN/0394746163/
+http://www.amazon.com/exec/obidos/ASIN/0394800133/
+http://www.amazon.com/exec/obidos/ASIN/0395845203/
+http://www.amazon.com/exec/obidos/ASIN/0395910900/
+http://www.amazon.com/exec/obidos/ASIN/0399145796/
+http://www.amazon.com/exec/obidos/ASIN/0399234039/
+http://www.amazon.com/exec/obidos/ASIN/0399523839/
+http://www.amazon.com/exec/obidos/ASIN/0415941644/
+http://www.amazon.com/exec/obidos/ASIN/0425157725/
+http://www.amazon.com/exec/obidos/ASIN/042518739X/ref=nosim/refundingmakesce
+http://www.amazon.com/exec/obidos/ASIN/0441007554/
+http://www.amazon.com/exec/obidos/ASIN/0446300152/
+http://www.amazon.com/exec/obidos/ASIN/0446677477/
+http://www.amazon.com/exec/obidos/ASIN/0451529294/
+http://www.amazon.com/exec/obidos/ASIN/0452281326/
+http://www.amazon.com/exec/obidos/ASIN/047112351X/
+http://www.amazon.com/exec/obidos/ASIN/0471239941/
+http://www.amazon.com/exec/obidos/ASIN/0471443069/
+http://www.amazon.com/exec/obidos/ASIN/0500280959/
+http://www.amazon.com/exec/obidos/ASIN/0521777682/
+http://www.amazon.com/exec/obidos/ASIN/0521777682/ref=nosim/searchbyisbn/
+http://www.amazon.com/exec/obidos/ASIN/0553371657/
+http://www.amazon.com/exec/obidos/ASIN/059035342X/
+http://www.amazon.com/exec/obidos/ASIN/0595008038/
+http://www.amazon.com/exec/obidos/ASIN/0609808699/
+http://www.amazon.com/exec/obidos/ASIN/0670850543/
+http://www.amazon.com/exec/obidos/ASIN/0671521543/
+http://www.amazon.com/exec/obidos/ASIN/0671663984/
+http://www.amazon.com/exec/obidos/ASIN/0671708635/
+http://www.amazon.com/exec/obidos/ASIN/067232587X/
+http://www.amazon.com/exec/obidos/ASIN/067232587X/ref=nosim/forlagetadland00
+http://www.amazon.com/exec/obidos/ASIN/0672326302/
+http://www.amazon.com/exec/obidos/ASIN/0674411528/
+http://www.amazon.com/exec/obidos/ASIN/067973421X/
+http://www.amazon.com/exec/obidos/ASIN/0679751114/
+http://www.amazon.com/exec/obidos/ASIN/068486410X/
+http://www.amazon.com/exec/obidos/ASIN/0688132286/
+http://www.amazon.com/exec/obidos/ASIN/0688162746/
+http://www.amazon.com/exec/obidos/ASIN/068987474X/
+http://www.amazon.com/exec/obidos/ASIN/0691044228/ref=nosim/artimagecollecti
+http://www.amazon.com/exec/obidos/ASIN/0691065012/
+http://www.amazon.com/exec/obidos/ASIN/0691065012/ref=nosim/artimagecollecti
+http://www.amazon.com/exec/obidos/ASIN/0691066019/
+http://www.amazon.com/exec/obidos/ASIN/0691067236/
+http://www.amazon.com/exec/obidos/ASIN/0698117913/
+http://www.amazon.com/exec/obidos/ASIN/0701162538/ref=nosim/speculativefic05
+http://www.amazon.com/exec/obidos/ASIN/0735606382/
+http://www.amazon.com/exec/obidos/ASIN/0735709017/
+http://www.amazon.com/exec/obidos/ASIN/0738205699/
+http://www.amazon.com/exec/obidos/ASIN/0738206075/
+http://www.amazon.com/exec/obidos/ASIN/0738207403/
+http://www.amazon.com/exec/obidos/ASIN/0740721976/
+http://www.amazon.com/exec/obidos/ASIN/0743224876/
+http://www.amazon.com/exec/obidos/ASIN/0743226232/
+http://www.amazon.com/exec/obidos/ASIN/0743419340/
+http://www.amazon.com/exec/obidos/ASIN/0761504109/
+http://www.amazon.com/exec/obidos/ASIN/0761510168/
+http://www.amazon.com/exec/obidos/ASIN/0761524266/
+http://www.amazon.com/exec/obidos/ASIN/0764534300/
+http://www.amazon.com/exec/obidos/ASIN/0764550365/
+http://www.amazon.com/exec/obidos/ASIN/076455168X/
+http://www.amazon.com/exec/obidos/ASIN/0786883189/ref=nosim/thebookhavenn-20
+http://www.amazon.com/exec/obidos/ASIN/0786883189/ref=nosim/thenewhomemake
+http://www.amazon.com/exec/obidos/ASIN/0787949329/
+http://www.amazon.com/exec/obidos/ASIN/078795649X/
+http://www.amazon.com/exec/obidos/ASIN/0789450739/
+http://www.amazon.com/exec/obidos/ASIN/0789718103/
+http://www.amazon.com/exec/obidos/ASIN/0802851207/
+http://www.amazon.com/exec/obidos/ASIN/0811826856/
+http://www.amazon.com/exec/obidos/ASIN/0812215613/
+http://www.amazon.com/exec/obidos/ASIN/0812233239/
+http://www.amazon.com/exec/obidos/ASIN/0814328490/
+http://www.amazon.com/exec/obidos/ASIN/0814477186/
+http://www.amazon.com/exec/obidos/ASIN/0814797636/
+http://www.amazon.com/exec/obidos/ASIN/0815603886/
+http://www.amazon.com/exec/obidos/ASIN/0849935830/
+http://www.amazon.com/exec/obidos/ASIN/0873645863/
+http://www.amazon.com/exec/obidos/ASIN/087486903X/
+http://www.amazon.com/exec/obidos/ASIN/0877456690/
+http://www.amazon.com/exec/obidos/ASIN/0879758481/
+http://www.amazon.com/exec/obidos/ASIN/088385158X/
+http://www.amazon.com/exec/obidos/ASIN/0891417125/
+http://www.amazon.com/exec/obidos/ASIN/0898798108/
+http://www.amazon.com/exec/obidos/ASIN/0911226338/
+http://www.amazon.com/exec/obidos/ASIN/0911647309/
+http://www.amazon.com/exec/obidos/ASIN/0911647589/
+http://www.amazon.com/exec/obidos/ASIN/0962770124/
+http://www.amazon.com/exec/obidos/ASIN/0965987302/
+http://www.amazon.com/exec/obidos/ASIN/0966377400/
+http://www.amazon.com/exec/obidos/ASIN/0966963520/
+http://www.amazon.com/exec/obidos/ASIN/0967251435/
+http://www.amazon.com/exec/obidos/ASIN/0970251823/
+http://www.amazon.com/exec/obidos/ASIN/1400052904/
+http://www.amazon.com/exec/obidos/ASIN/1560254890/
+http://www.amazon.com/exec/obidos/ASIN/1561840033/
+http://www.amazon.com/exec/obidos/ASIN/1562790218/
+http://www.amazon.com/exec/obidos/ASIN/1564143236/
+http://www.amazon.com/exec/obidos/ASIN/1572160268/
+http://www.amazon.com/exec/obidos/ASIN/1572160268/ref=nosim/heartofscotla-20
+http://www.amazon.com/exec/obidos/ASIN/1578516803/
+http://www.amazon.com/exec/obidos/ASIN/1579546986
+http://www.amazon.com/exec/obidos/ASIN/1579546986/
+http://www.amazon.com/exec/obidos/ASIN/1581800460/
+http://www.amazon.com/exec/obidos/ASIN/1585423017/
+http://www.amazon.com/exec/obidos/ASIN/1590170245
+http://www.amazon.com/exec/obidos/ASIN/1590593685/
+http://www.amazon.com/exec/obidos/ASIN/1590594304/
+http://www.amazon.com/exec/obidos/ASIN/1591840147/
+http://www.amazon.com/exec/obidos/ASIN/1592400175/
+http://www.amazon.com/exec/obidos/ASIN/1593600232/
+http://www.amazon.com/exec/obidos/ASIN/1840460105/ref=nosim/rebeccaspocke-20
+http://www.amazon.com/exec/obidos/ASIN/1842152432/
+http://www.amazon.com/exec/obidos/ASIN/1842152432/qid=992896446/sr=1-36/howtoknowtheeart
+http://www.amazon.com/exec/obidos/ASIN/1842152432/ref=nosim/shroomery-20/
+http://www.amazon.com/exec/obidos/ASIN/1878424114/
+http://www.amazon.com/exec/obidos/ASIN/1879678101/
+http://www.amazon.com/exec/obidos/ASIN/1883219027/
+http://www.amazon.com/exec/obidos/ASIN/188321937X/
+http://www.amazon.com/exec/obidos/ASIN/1889772038/
+http://www.amazon.com/exec/obidos/ASIN/1890310034/
+http://www.amazon.com/exec/obidos/ASIN/B00005ME4O/ref=nosim/monstermadness.com-20
+http://www.amazon.com/exec/obidos/ASIN/B000096RCB/
+http://www.amazon.com/exec/obidos/ISBN%3D0201633612/
+http://www.amazon.com/exec/obidos/ISBN%3D047115279X/
+http://www.amazon.com/exec/obidos/ISBN%3D0520087127/
+http://www.amazon.com/exec/obidos/ISBN%3D0671708635/
+http://www.amazon.com/exec/obidos/ISBN%3D0679772677/
+http://www.amazon.com/exec/obidos/ISBN%3D0789714140/
+http://www.amazon.com/exec/obidos/ISBN%3D0810961733/
+http://www.amazon.com/exec/obidos/ISBN%3D0916078329/
+http://www.amazon.com/exec/obidos/ISBN%3D0965987302/
+http://www.amazon.com/exec/obidos/ISBN=0028610415/
+http://www.amazon.com/exec/obidos/ISBN=002861397X/
+http://www.amazon.com/exec/obidos/ISBN=0072257946/
+http://www.amazon.com/exec/obidos/ISBN=0136298419/
+http://www.amazon.com/exec/obidos/ISBN=0140144560/
+http://www.amazon.com/exec/obidos/ISBN=0140153519/
+http://www.amazon.com/exec/obidos/ISBN=0152005420/
+http://www.amazon.com/exec/obidos/ISBN=0195119010/
+http://www.amazon.com/exec/obidos/ISBN=0195215737/
+http://www.amazon.com/exec/obidos/ISBN=0201633612
+http://www.amazon.com/exec/obidos/ISBN=0201633612/
+http://www.amazon.com/exec/obidos/ISBN=0201924781
+http://www.amazon.com/exec/obidos/ISBN=0201924781/
+http://www.amazon.com/exec/obidos/ISBN=0253210283/
+http://www.amazon.com/exec/obidos/ISBN=0253211190/
+http://www.amazon.com/exec/obidos/ISBN=0300078269/
+http://www.amazon.com/exec/obidos/ISBN=0304343374/
+http://www.amazon.com/exec/obidos/ISBN=0310417414/
+http://www.amazon.com/exec/obidos/ISBN=0312069146/
+http://www.amazon.com/exec/obidos/ISBN=0312135211/
+http://www.amazon.com/exec/obidos/ISBN=0312167857/
+http://www.amazon.com/exec/obidos/ISBN=0312283970/
+http://www.amazon.com/exec/obidos/ISBN=0345400917/
+http://www.amazon.com/exec/obidos/ISBN=0393045374/
+http://www.amazon.com/exec/obidos/ISBN=0394469674/
+http://www.amazon.com/exec/obidos/ISBN=0395410568/
+http://www.amazon.com/exec/obidos/ISBN=0395710901/
+http://www.amazon.com/exec/obidos/ISBN=0399142045/
+http://www.amazon.com/exec/obidos/ISBN=0399223363/
+http://www.amazon.com/exec/obidos/ISBN=0452263948/
+http://www.amazon.com/exec/obidos/ISBN=0471113565/
+http://www.amazon.com/exec/obidos/ISBN=047112351X/
+http://www.amazon.com/exec/obidos/ISBN=0471155063/
+http://www.amazon.com/exec/obidos/ISBN=0471165530/
+http://www.amazon.com/exec/obidos/ISBN=0471239941/
+http://www.amazon.com/exec/obidos/ISBN=0521777682/
+http://www.amazon.com/exec/obidos/ISBN=052594527X/
+http://www.amazon.com/exec/obidos/ISBN=0553107046/
+http://www.amazon.com/exec/obidos/ISBN=0553455710/
+http://www.amazon.com/exec/obidos/ISBN=0671663984/
+http://www.amazon.com/exec/obidos/ISBN=0671708635/
+http://www.amazon.com/exec/obidos/ISBN=0671742515/
+http://www.amazon.com/exec/obidos/ISBN=0671870831/
+http://www.amazon.com/exec/obidos/ISBN=0674893069/
+http://www.amazon.com/exec/obidos/ISBN=0674893077/
+http://www.amazon.com/exec/obidos/ISBN=0679730540/
+http://www.amazon.com/exec/obidos/ISBN=0679772677/
+http://www.amazon.com/exec/obidos/ISBN=0684807726/
+http://www.amazon.com/exec/obidos/ISBN=0684829924/
+http://www.amazon.com/exec/obidos/ISBN=0684852861/
+http://www.amazon.com/exec/obidos/ISBN=0684863375/
+http://www.amazon.com/exec/obidos/ISBN=0738203084/
+http://www.amazon.com/exec/obidos/ISBN=0767900111/
+http://www.amazon.com/exec/obidos/ISBN=0786862173/
+http://www.amazon.com/exec/obidos/ISBN=0789714140/
+http://www.amazon.com/exec/obidos/ISBN=0789718103/
+http://www.amazon.com/exec/obidos/ISBN=0803709692/
+http://www.amazon.com/exec/obidos/ISBN=0805210288/
+http://www.amazon.com/exec/obidos/ISBN=0806127716/
+http://www.amazon.com/exec/obidos/ISBN=0806129476/
+http://www.amazon.com/exec/obidos/ISBN=0806316292/
+http://www.amazon.com/exec/obidos/ISBN=0809133148/
+http://www.amazon.com/exec/obidos/ISBN=0812927907/
+http://www.amazon.com/exec/obidos/ISBN=0813120284/
+http://www.amazon.com/exec/obidos/ISBN=0813330858/
+http://www.amazon.com/exec/obidos/ISBN=0814477186/
+http://www.amazon.com/exec/obidos/ISBN=0815627351/
+http://www.amazon.com/exec/obidos/ISBN=0815724691/
+http://www.amazon.com/exec/obidos/ISBN=0844231118/
+http://www.amazon.com/exec/obidos/ISBN=0844238155/
+http://www.amazon.com/exec/obidos/ISBN=0876054084/
+http://www.amazon.com/exec/obidos/ISBN=0879101113/
+http://www.amazon.com/exec/obidos/ISBN=0879515007/
+http://www.amazon.com/exec/obidos/ISBN=0879758481/
+http://www.amazon.com/exec/obidos/ISBN=0887404898/
+http://www.amazon.com/exec/obidos/ISBN=0911647406/
+http://www.amazon.com/exec/obidos/ISBN=0930031571/
+http://www.amazon.com/exec/obidos/ISBN=0940450429/
+http://www.amazon.com/exec/obidos/ISBN=094045064X/
+http://www.amazon.com/exec/obidos/ISBN=0960695400/
+http://www.amazon.com/exec/obidos/ISBN=0969527217/
+http://www.amazon.com/exec/obidos/ISBN=1556156502/
+http://www.amazon.com/exec/obidos/ISBN=1561003840/
+http://www.amazon.com/exec/obidos/ISBN=1564143236/
+http://www.amazon.com/exec/obidos/ISBN=1573560693/
+http://www.amazon.com/exec/obidos/ISBN=1578515130/
+http://www.amazon.com/exec/obidos/ISBN=158488388X/
+http://www.amazon.com/exec/obidos/ISBN=1586480499/
+http://www.amazon.com/exec/obidos/ISBN=1586481207/
+http://www.amazon.com/exec/obidos/ISBN=1587151758/
+http://www.amazon.com/exec/obidos/ISBN=1884777597/
+http://www.amazon.com/exec/obidos/ISBN=1887078002/
+http://www.amazon.com/exec/obidos/ISBN=1891620177/
+http://www.amazon.com/exec/obidos/ISBN=1891661302/
+http://www.amazon.com/exec/obidos/ISBN=283151794X/
+http://www.amazon.com/exec/obidos/asin/0201924781/philosophe-20
+http://www.amazon.com/exec/obidos/asin/0201924781/therobertsgroup
+http://www.amazon.com/exec/obidos/asin/0961863617/casel
+http://www.amazon.com/exec/obidos/tg/browse/-/14831
+http://www.amazon.com/exec/obidos/tg/browse/-/301857
+http://www.amazon.com/exec/obidos/tg/browse/-/4538
+http://www.amazon.com/exec/obidos/tg/browse/-/5868
+http://www.amazon.com/exec/obidos/tg/detail/-/0007141076?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0007154607?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0007154615?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0020100604?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0028610105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0029227917?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0029257506?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060005726?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006001279X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006008197X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060086270?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060088303?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060170131?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060187239?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006019247X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060192992?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060193050?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060196793?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060198400?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060270209?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060271396?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006029325X?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0060392452?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060392959?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060514558?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060516267?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060517123?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060520612?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060524367?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060525894?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060539259?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006054175X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060563079?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060563893?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060565349?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060570938?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060610638?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060723475?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006072398X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060728264?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060730242?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060746874?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060776579?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060776579?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0060792299?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060910666?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060924349?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060924810?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006092621X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006092621X?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0060930888?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060931671?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060931841?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060933798?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060935332?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060936959?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060952733?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060956348?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060958286?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060964049?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006097396X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060975776?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060984287?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0060988894?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0061010251?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0061044431?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0061093467?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006109773X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0061813109?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0062500872?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0062502182?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0062503227?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0062515861?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0062732366?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/006440739X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0064409651?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0064442055?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0064473368?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0064603067?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0066211727?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0066620023?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070006571?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070066477?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070224439?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070479046?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070647623?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070653380?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0070680345?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071353178?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071354697?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071358366?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071360654?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071370161?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071382313?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071387730?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071395555?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/007141231X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071413863?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0071417842?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/007142220X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0072131454?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0072131829?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0072193042?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/007222696X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0072863641?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0072873078?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0091886171/?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0123903602?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/012426297X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130313580?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130461067?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130489751?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130819336?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130869724?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130891347?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0130894656?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0130952842?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0131038052?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0131401629?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0131829939?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0134546466?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0136059406?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0136360025?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0137261675?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0137581866?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0137903952?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/013791864X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0139696946?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140042431?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140077022?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140131558?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140133968?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140135154?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140157352?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140187952?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140194703?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140249192?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140249389?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140255346?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140264450?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140266909?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140272798?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140280243?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/014034893X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140371508?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140384510?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140442014?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0140501789?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0141001844?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/014130636X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142002518?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142002607?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142002798?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142003816?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142004235?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142004235?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0142196177?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0142437255?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0143034979?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0151007349?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0151011060?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0151011354?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0151699410?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0152008659?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/015205118X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0152163875?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/015505113X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156005603?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156007754?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156011077?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/015602943X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156029634?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156030241?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0156468999?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0192801724?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0192813897?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0192836323?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0192838768?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195000528?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0195030958?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195091140?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195092694?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195093852?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195108094?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195110536?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195133420?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195144201?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195157990?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195168402?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0195218884/?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0195218884?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0198503709?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0198519737?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0198606648?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0198691564?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/020111982X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201310058?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/020132797X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/020132802X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201360799?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201485435?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201571692?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201633612
+http://www.amazon.com/exec/obidos/tg/detail/-/0201633612/qid%3D1070341486/sr%3D8-1/ref%3Dsr_8_1
+http://www.amazon.com/exec/obidos/tg/detail/-/0201633612?_encoding=UTF8&no=283155&me=ATVPDKIKX0DER&st=books
+http://www.amazon.com/exec/obidos/tg/detail/-/0201633612?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201702797?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201709201?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201709694?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201749629?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201750430?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201835959?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201896850?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0201924889?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0205266541?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0205329551?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226066819?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226092011?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226104036?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226143295?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226278794?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226458083?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226468011?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226468046?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226532003?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0226904350?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0231131860?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0253340543?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262024829?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262133601?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262162024?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262240459?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262541483?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262560992?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/026256100X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262581205?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262661810?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0262661853?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0273645919?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0292752466?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0292752474?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300070136?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300076754?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300088981?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300092245?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300093454?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0300102321?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0304333948?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0306810719?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0306813548?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0310205719?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0310239648?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0310245648?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0310925886?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312069146?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312083165?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312152329?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312171218?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312176392?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312181175?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312194552?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312225784?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312252501?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312265999?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/031227260X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312275013?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312289723?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312312601?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312313810?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312313829?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312341156?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312342985?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312421435?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312423608?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312423764?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312858515?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312869657?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0312872593?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312875290?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312890265?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312931158?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0312966482?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0314241302?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0314241302?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0316000647?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316039306?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316089761?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316277126?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316346624?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316363502?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316735124?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316777498?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316779148?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316880655?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316890790?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316899984?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316908452?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0316912123?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0321112717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0321202988?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0324171730?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345315227?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345339711?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345339738?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345340426?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345388666?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345389964?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345396456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/034541005X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345416422?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345417607?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345417941?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345427181?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345428684?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345435168?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/034543871X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345441036?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345446089?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345448375?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345457129?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345461924?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/034546625X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0345478061?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0373250134?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0373250290?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374138583?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374172811?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374186871?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374236488?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374256284?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0374299897?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374311013?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0374361738?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375400362?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375404481?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375408908?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375411453?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375412085?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375412425?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375421726?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375422889?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375422986?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375423125?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375432108?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/037550351X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375504397?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/037550477X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375506039?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375506160?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375509038?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375703012?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375703063?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375703799?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375705112?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375708219?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375726403?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375752285?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/037575492X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375758291?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375760474?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375813616?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0375822984?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380004232?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380006766?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380506092?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380713802?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380717492?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380717832?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380723239?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/038077108X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380783568?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380785080?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380793253?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380805413?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380806312?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380806436?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380810549?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380812053?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380979004?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0380979004?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0385199732?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385313543?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385319940?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385335121?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385335881?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385336535?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385419945?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385468059?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385473079?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385475292?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385479689?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385483295?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385484186?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385494149?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385497296?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/038549730X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385497989?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385498802?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385504357?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385509278?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385512457?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0385720041?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0385720610?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/038572179X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0387026207?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0387949569?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0387988998?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393001423?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393010465?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393020371?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393038912?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393051358?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393058697?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393059162?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393303756?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393309649?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393315290?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393317552?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393320405?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393323528?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393325350?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0393950751?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394508246?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394519922?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394747003?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394752848?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394758269?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0394823370?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395070627?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395181585?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395193958?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/039541685X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/039548930X?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0395592208?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395599253?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395720265?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395720265?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0395770173?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0395950112?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399144390?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399147403?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399147810?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399147853?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399149457?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399149457?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0399149554?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399151613?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399151729?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399151753?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399152423?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399524118?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0399525386?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0415261279?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0415929423?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0415939518?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0415949475?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0415951283?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0425099660?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0425141551?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/042518238X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0425195430?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0425195430?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0439050227?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0439131952?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0439139317?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/043932162X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440145368?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440206154?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440208939?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440235596?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440236738?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440241367?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440385814?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440500893?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0440507855?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0441788386?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0441790348?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0443062617?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446353256?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446364800?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446519006?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446519138?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446523089?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446527556?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446528315?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446531081?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446531324?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446577812?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446602868?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446607584?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446671444?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446672238?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446674362?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446675385?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446676969?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446677469?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446678643?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446678791?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446679496?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446690953?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446691356?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0446695114?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0448416735?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449003612?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449005747?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449211479?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449218597?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449219143?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/044991058X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0449983676?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451164695?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451184734?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451185110?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451191757?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451197461?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451209672?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451211766?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451212762?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451213939?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451456718?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451523377?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451529294?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0451627210?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0451628357?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452260094?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452267560?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452272424?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452278155?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452278236?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452279062?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452281806?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452282950?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452284058?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0452284503?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0460870270?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/046500637X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465016146?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465016154?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465017193?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465022812?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465023622?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465025102?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465027458?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465038352?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/046505434X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465088961?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465090826?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465090974?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0465092667?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0470833556?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471042064?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471111864?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471113565?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471137731?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471137847?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471154040?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471159794?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/047118117X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471189626?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471225568?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471247618?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471267368?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471304654?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471319201?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471322865?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471384011?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471402737?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/047141980X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471432210?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471453978?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471460613?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471469645?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471470643?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471478644?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471529125?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471569348?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471584282?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471593613?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471617156?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/047164515X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471645486?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471667307?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471705284?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0471706043?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/047173876X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0472066048?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/047208478X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0472088378?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486202917?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486227987?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486273679?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486295966?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486408434?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486605868?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0486677486?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0505522675?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0505525526?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0515103012?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0515122858?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0515132284?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0515135739?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0515138150?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0517122839?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0517220652?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0517412659?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0517880342?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520018710?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520052560?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520217853?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520221532?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520225341?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0520235509?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521164389?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521278716?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521370957?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521425379?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521456908?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521563305?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0521577799?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521645832?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521646529?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521647010?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521653835?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521777682?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521780195?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521782325?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521785723?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521808324?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521819164?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521828384?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0521831431?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/052594673X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553210092?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553273825?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553283960?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553284363?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/055329461X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553345842?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553375067?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553380397?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553381903?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553456539?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553472283?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/055356076X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553573403?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553573411?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553581929?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553582658?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553584510?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0553801414?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0590519220?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0590519700?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0595290590?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0595325270?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0595773842?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0596003471?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/059600527X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609603523?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609606441?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609607278?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609607820?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609610848?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609801090?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609805851?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609805932?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609805940?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0609807838?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0613215389?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0613452860?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0613867165?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0618002235?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618002243?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618055444?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618056777?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618083456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618164723?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/061819729X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618219277?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618260277?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0618352104?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0658006436?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670031771?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067003178X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067003231X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670033049?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670033049?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0670033162?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670059242?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670841803?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0670885460?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671010069?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671019015?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671023934?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0671026534?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671039741?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671454927?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0671493256?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0671582488?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671582488?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0671659898?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671693808?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671708635/
+http://www.amazon.com/exec/obidos/tg/detail/-/0671720147?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671723650?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671724002?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671726099?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671736450?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671746499?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067176358X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671769723?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067179437X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671795538?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671872664?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671878654?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671878859?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671884271?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0671885286?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0672314096?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0672317249?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067232587X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674002717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674002784?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0674006135?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674011120?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674055454?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674411528?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067463442X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0674637526?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679442545?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679445218?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679445358?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679454438?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679456570?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679459618?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679600507?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679600760?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679720340?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679721037?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679728899?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067973404X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067973421X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679735690?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067973807X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679738959?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679738975?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067974021X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679745092?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067974567X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679746048?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679747044?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679759069?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679770992?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679772898?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/067978330X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679805273?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679847367?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0679882804?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684801221?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684801523?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684807319?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684813637?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684818868?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684824299?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684826305?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684827050?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684828006?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684828189?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684830493?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684831260?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684831309?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684833026?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684834952?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684836688?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684837188?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684838451?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684841363?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684843242?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684843927?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684846225?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684847337?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684848597?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684849623?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684850141?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684852667?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684853116?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684853949?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684856360?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684857952?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684863162?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/068486410X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684867443?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684867486?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684868792?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684869020?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684869195?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0684870592?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0687012384?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688128408?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688133541?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688141994?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688144772?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688149251?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688166288?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688174418?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0688175716?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/068817986X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0689807570?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0689835493?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0689856849?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0689877323?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0691006202?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0691009031?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0691026483?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0691037388?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0691043019?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0694514772?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0698118022?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0700608796?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/070061088X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0713992816?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0716730901?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0716733870?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0723244049?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735201463?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735201978?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735609047?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735609381?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/073561184X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735611882?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735618038?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735618518?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735620520?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735709211?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735710783?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735712085?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/073571228X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0735713634?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0736649999?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0736908242?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738200913?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738202096?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738205435?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738205699?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738207411?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/073820756X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738208442?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0738857645?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0739309536?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0739441183?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0740718584?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0740721135?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0740721976?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0740726145?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0742526992?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743200438?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743203259?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743203585?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743204441?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743211456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743213874?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743223136?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743225708?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743226712?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743227328?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743227441?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743227581?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743227867?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743234480?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743235460?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743236203?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743241908?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743245938?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743245962?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743249410?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743250117?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743251008?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/074325192X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743251989?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743254945?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743256166?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743257529?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743260716?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743264436?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0743265025?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743266196?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743267133?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743410149?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743410386?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743412435?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743419340?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743460529?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743480651?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743482549?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743484738?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743499336?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743504143?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0743520815?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743542002?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0743542010?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0744000653?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0745616704?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0745616712/?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0750671858?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0750675993?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0750677783?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0754095762?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0757000371?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761506691?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761513167?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761515631?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761522786?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761531157?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/076153394X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0761977848?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0762724803?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0763616052?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0763619612?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0763623334?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764100610?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764102990?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764107909?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764112007?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764122096?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764300725?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764507206?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764547542?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764548573?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764549642/
+http://www.amazon.com/exec/obidos/tg/detail/-/0764549642?_encoding=UTF8&no=283155&me=ATVPDKIKX0DER&st=books
+http://www.amazon.com/exec/obidos/tg/detail/-/0764549642?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764552775?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764554255?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764554638?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0764576429?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0765307901?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0765311852?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0765760630?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0765804875?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767420489?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767902602?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767903447?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767903692?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767908171?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767908864?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767911733?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0767914104?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0768919754?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0773527958?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0782141064?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0782143237?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0782143245?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0783547501?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0783891024?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0783893965?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0783896190?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0783896190?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0785108068?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0785263705?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0785265392?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0785266046?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0785271368?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/078612301X?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0786223413?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0786245999?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0786267135?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786269405?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786278455?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0786708468?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786712813?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786854456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786864540?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786865954?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786866314?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786866314?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0786881852?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/078688598X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786886757?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786914297?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0786934107?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787263168?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787908088?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787910155?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787947652?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787948039?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787953431?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/078795652X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787962910?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787963879?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787964239?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0787971375?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0788789848?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789300249?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789447355?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789484250?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789489597?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/078949647X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789714140?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789718103?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789719576?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789723344?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789728249?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0789729717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0790731037?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0791046346?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0791448940?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0792274717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0792838068?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0793154707?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0793187990?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0800626818?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0800717880?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0800793110?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/080105723X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0801058066?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/080106211X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0801869188?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802115888?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802117112?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802131565?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802150845?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802713548?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802801587?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802840353?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0802851207?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0804831882?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805062386?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805062394?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805063315?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805066977?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805067809?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805070893?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805073132?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805073396?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805075372?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0805075593?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0806512717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0806516054?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0807027197?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0807128031?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0807501964?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0807589551?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0807822736?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809001586?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809029561?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809088541?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809224887?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809228572?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809234300?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809235005?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0809297825?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0810928558?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0810931060?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0810935805?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0811700844?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0811726371?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0811837858?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/081184109X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812074807?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812079191?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812215613?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812218876?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812233239?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0812511069?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812519590?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812534972?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812558251?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812579259?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812584341?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812928350?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812930428?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812932188?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/081296392X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812968255?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/081296845X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0812969650?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814328490/
+http://www.amazon.com/exec/obidos/tg/detail/-/0814407617?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814408680?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814470637?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814477186?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814478808?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0814751717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0815340222?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0815764367?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0816144575?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0819215635?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0821217992?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0821227556?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0821758551?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0823083462?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0823083691?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0827607598?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0830813578?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0830815155?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0830815813?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/083081597X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/083081891X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/083082314X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0830827420?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0833032909?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0833502115?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0833551299?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0836252829?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0840389086?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0842329218?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0842329293?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0842355588?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0842384065?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0844225533?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0844238619?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0844242691?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0847693325?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0847827615?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0849381266?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0849912229?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0849916399?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0849918200?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0849938619?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0853459401?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0854402217?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0859916197?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/0861710649?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0865475105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0865475814?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0867130504?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0870114247?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0870700510?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871137380?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871137690?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871137895?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871205696?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/087154234X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871563312?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0871563851?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0873226445?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0873378547?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0873648994?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0874776945?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/087477893X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875423248?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875846556?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875848141?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875848575?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875848818?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875849040?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0875849113?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/087584913X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/087605596X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/087612144X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0876146272?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0876281447?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0877193673?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0877939586?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0878083510?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0878770771?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0879758481?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0880117702?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0880119136?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0880889187?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0881504211?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0881923125?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0882847953?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/088385158X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0884153967?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0884158217?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0886779065?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887306136?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887306292?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887307396?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887308805?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887308872?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887308880?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0887309577?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0890242372?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0890511128?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0890818347?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0890878153?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0891078932?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0891417125?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892552360?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892810882?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892812885?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892813113?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892815256?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892815310?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892817356?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892818662?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892818883?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0892819758?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/089296801X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0893817325?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/089480619X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0894807536?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0895261219?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0895261405?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0895871106?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0896218600?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/089733535X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0898598591?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0898702976?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0898797063?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0898799449?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0899193498?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0899576656?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0911647716?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0913589969?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0915299143?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0915811731?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0918477794?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0922915636?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0923550127?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0924486031?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0925480533?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0926412132?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/093058838X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0932633390?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0934211345?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0935012184?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0935926216?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0937765023?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/093852903X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/093852920X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0939040158?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0939165317?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0940160781?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0941532437?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0944502105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0960695400?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0962770124?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0962867802?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0963617885?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0963753053?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0963815210?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0964782405?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0965748367?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0966103297?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0966275217?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0966612779?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0966722167?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0966972309?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0967035902?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0967251435?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0967605075?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0967759412?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0968676022?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0970222807?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0970827601?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0971330808?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0971799008?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0971887004?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0972507809?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0972577017?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0974297615?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0974998605?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/0975320513?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/140003065X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400041619?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400046459?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400046610?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400050081?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400050669?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400051576?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400061199?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1400063531?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1401301568?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1401903193?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1413300839?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/141330088X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1550225308?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1550225626?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1550226002?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/155166674X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1555422659?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1555580416?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1555611176?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1556431694?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1556433778?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1556434197?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1556522118?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1557283885?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558320385?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558492348?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558504443?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558504974?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558508473?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558602461?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558611584?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1558682511?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1559272392?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1559276657?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1559635894?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1559705477?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1559706848?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1560003197?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/156054788X?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1560850272?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1560988924?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561580724?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561581305?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561583766?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561586196?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561631574?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561707406?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561708755?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1561709336?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1562056484?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1562474820?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1562613413?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1563523302?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1563524694?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1563894696?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1563896699?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1563897563?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1564145190?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1564145883?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1564146146?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565116976?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1565116984?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1565122046?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565302079?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/156584100X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565844025?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565844394?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/156584565X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565847334?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565922824?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565925157?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565925823?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1565928415?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1566391636?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1566565529?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1566890942?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1566913969?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1567512585?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1568361637?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1568362927?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1568381387?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1568386206?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1568811306?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1569245037?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1569552924?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1569717923?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1569902380?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1570429596?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1570613087?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1570641161?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1570713375?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1570750408?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/157174083X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1571781803?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1572242558?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1572481684?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1572703016?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573221813?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573223077?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573225789?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573240206?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573241547?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573921238?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1573927554?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1574323539?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1575420007?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1575450593?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1575663724?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1575668955?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576104109?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576104656?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576750140?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576751074?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576751457?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576752755?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576752828?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1576833887?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1577240456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1577310411?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1577311523?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1577311566?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578050839?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578063418?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578260949?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578511240?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578513014?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/157851441X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578568420?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1578630010?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579107877?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579540570?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579546463?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579546986?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579547141?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579547346?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579549543?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1579652204?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580086152?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580110010?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580421431?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580533329?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580625371?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580626823?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580627560?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1580910637?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1581311796?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1582342806?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1582344876?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1582369518?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1582404135?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1582430349?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1583762051?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1583940677?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1584503440?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1584650389?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1584792108?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/158479349X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1585420042?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1585421456?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1585421464?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1585423092?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1585670693?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1586390007?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1586481037?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1586481878?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1586482084?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1586482106?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1587241730?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1587741202?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1587990717?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/158799190X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1588341526?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1590075528?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1590170245?_encoding=UTF8&no=283155&me=ATVPDKIKX0DER&st=books
+http://www.amazon.com/exec/obidos/tg/detail/-/1590170245?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1590591577?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1590702808?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1590861507?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1591391105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1591392888?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1591840139?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1591840597?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1591840600?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1592001416?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1592330401?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1592400876?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1593090080?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1593356560?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/159355561X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1593558058?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1593558074?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1593558074?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1594200041?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1594200084?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1594200335?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1594830339?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1594860866?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1840460105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1842152432?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1844670023?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1852426047?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1855858843?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/185649831X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/185973958X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/185984054X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1861001061?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1861005512?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1861007213?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1878424114?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1878424165?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1878424750?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1878585215?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1879181487?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1879425920?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1879440067?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1880418622?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1880582244?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1880685094?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1881052990?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1881374904?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1882109384?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1882423070?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1882423100?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1882580109?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1883010918/
+http://www.amazon.com/exec/obidos/tg/detail/-/1883011035?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1883629004?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1883672511?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/188382348X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1885003757?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1885211279?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1885358962?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1885904088?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1885904142?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1886230188?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1886346518?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/188641128X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1886939535?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1887178503?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/1887571051?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1888043040?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1888645377?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/188913175X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1889762105?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1890310034?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/189076504X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1891105167?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1891400274?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1891984322?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1893005054?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1893302563?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1903450381?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1904344003?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1928806082?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1929998813?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1930575165?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1931584036?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1931834067?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932111921?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932111972?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932156798?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932273190?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932273271?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/1932420053?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/2880466563?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/3540203656?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/4770015836?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/4770020988?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/4770027567?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/6301777387?v=glance&vi=quotes-trivia
+http://www.amazon.com/exec/obidos/tg/detail/-/6301978188?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/6302794331?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/6303306497?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/6304234635?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/630438551X?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/6305972079?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/8120310462?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/B000000SNL?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000014RC?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000024R5?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000272Q?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000002JJS?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000002KN8?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000002UAI?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000002VPH?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000003CWC?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000003RGH?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000005H44?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000IBDY?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000IBMB?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000IQCA?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000JHBU?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00000JYFO?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00001IVFH?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000222XM?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00003001Z?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000031VR1?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004SCH8?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004SGDI?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004T9AS?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004TTGW?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004TX1R?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004WG2D?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004WGD2?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004Y7SL?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00004YXVG?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000051XPZ?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000059XOD?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005B1Y1?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005B2VI?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005B6YY?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005JLFT?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005JNSE?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005K9OF?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005KB9W?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005N6OK?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005NR03?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005OQMG?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005R5CC?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005R8PV?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005S85L?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005UM4D?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00005UM4G?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000060OFT?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000634HG?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000638SO?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000063CBR?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000063URD?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000640NN?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000065DWB?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000065T26?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000065V41?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000067J1H?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00006CY3Z?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00006IUID?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00006RGI2?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/B000070IXU?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000077KJL?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000084313?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000844JR?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00008UA61?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00008UA61?v=glance&me=ATVPDKIKX0DER
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000996IX?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00009AKLJ?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000AOV39?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000B29N7?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000C3I4A?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000CD5GV?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000DC12T?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000DK5BB?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/B0000Y3G0C?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001ADAME?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001ADAMO?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001ATELK?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001BMMHW?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001I2CFM?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0001ZMX7C?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00020P7TM?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000225ZRE?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B000235UBE?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00023EPEW?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00023EPFQ?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00025L42Q?v=glance&vi=reviews
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002717ZI?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002ABURA?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002BKSUE?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002CTL2O?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002E3754?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002E377M?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002F5BPW?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002F6M00?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002F6MQO?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002F6Y3U?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002I82Z0?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002NUTS8?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002TX4J8?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002X1JPU?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002XDN3G?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002XVKMC?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002Y0SHY?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0002YCV10?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00030EFO4?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00030M9OW?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00049QKZG?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00061XQUY?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00065GX64?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0006GQMCS?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0006HBLEG?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0006I0I76?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0006Q9AOU?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B00076F0GQ?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0007D9VNC?v=glance
+http://www.amazon.com/exec/obidos/tg/detail/-/B0007D9VNC?v=glance&st=*
+http://www.amazon.com/exec/obidos/tg/guides/guide-display/-/1587HVGDLDQCI
+http://www.amazon.com/exec/obidos/tg/guides/guide-display/-/19UP7VG1O606L
+http://www.amazon.com/exec/obidos/tg/guides/guide-display/-/1NY6THS2TTT1W
+http://www.amazon.com/exec/obidos/tg/listmania/list-browse/-/1FPPM0MRRJ45P
+http://www.amazon.com/exec/obidos/tg/listmania/list-browse/-/2G8IRW2E09ZFV
+http://www.amazon.com/exec/obidos/tg/listmania/list-browse/-/3J2CBBPBPR67J
+http://www.amazon.com/exec/obidos/tg/listmania/list-browse/-/EFI6XHUKAC6A
+http://www.amazon.com/exec/obidos/tg/stores/detail/-/borders/0060728256
+http://www.amazon.com/exec/obidos/tg/stores/offering/list/-/0192800930/all
+http://www.amazon.com/exec/obidos/tg/stores/offering/list/-/0192824252/all
+http://www.amazon.com/exec/obidos/tg/stores/offering/list/-/0192839314/all
+http://www.amazon.com/exec/obidos/tg/stores/offering/list/-/0879758481/all
+http://www.amazon.com/exec/obidos/tg/stores/static/-/jobs/department/Kansas/014/
+http://www.amazon.com/gp/browse.html?_encoding=UTF8&node=10304651&no=10169511&me=A3ITI9OL2RKBEO
+http://www.amazon.com/gp/browse.html?_encoding=UTF8&node=13584171&no=13584001&me=A36L942TSJ2AJA
+http://www.amazon.com/gp/cdp/member-reviews/A116ZSMZRT9RUN
+http://www.amazon.com/gp/cdp/member-reviews/A12PAMLZ1QJ1UA?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A16JUK0J07A6MC?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A17FLA8HQOFVIG?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A17M20ISV4BP07?_encoding=UTF8&display=public&page=3
+http://www.amazon.com/gp/cdp/member-reviews/A185N9XQW1P5D6?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A189GX08UTEAXT?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1B6SNJSCSP45B
+http://www.amazon.com/gp/cdp/member-reviews/A1B6SNJSCSP45B?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1B6SNJSCSP45B?_encoding=UTF8&display=public&page=1
+http://www.amazon.com/gp/cdp/member-reviews/A1BXLY77IJIR4I?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1J1X0T9KP5YP3?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1KGNXKJ9BWK9
+http://www.amazon.com/gp/cdp/member-reviews/A1KY2SE12T3UXH?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1LVZOK9F7K4CN?_encoding=UTF8&display=public&page=5
+http://www.amazon.com/gp/cdp/member-reviews/A1P45ZB60ZQDSY?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1PFRFGX0SXSKZ?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1RAUVCWYHTQI4?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1RDKBX3WAL5I8
+http://www.amazon.com/gp/cdp/member-reviews/A1T13S3JPJQ99M
+http://www.amazon.com/gp/cdp/member-reviews/A1T13S3JPJQ99M?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1TPW86OHXTXFC?_encoding=UTF8&display=public&page=7
+http://www.amazon.com/gp/cdp/member-reviews/A1TXD4O7Z15FY4?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1V11YFWQX2VS1?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1XJOSJN6FHFO0?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1ZOYQ41EGZJ7D?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A1ZOYQ41EGZJ7D?_encoding=UTF8&display=public&page=2
+http://www.amazon.com/gp/cdp/member-reviews/A21279TEPJ8YJ9?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A23DFB8IUTIZM0?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A25ESHN4WITIW2
+http://www.amazon.com/gp/cdp/member-reviews/A26JGAM6GZMM4V?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A27ACVYFK9GXGS
+http://www.amazon.com/gp/cdp/member-reviews/A27WFT91VBM8YO
+http://www.amazon.com/gp/cdp/member-reviews/A29CK3R8EIDEJG?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2B9Y0WXNSN17U?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2BEU7GPGNIG44
+http://www.amazon.com/gp/cdp/member-reviews/A2BODHJNOO5M9X
+http://www.amazon.com/gp/cdp/member-reviews/A2C3E35FDWR8WV?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2DYLP69KB1GZ6
+http://www.amazon.com/gp/cdp/member-reviews/A2ET21TYVYJZVW
+http://www.amazon.com/gp/cdp/member-reviews/A2EYYAKH4VF70T
+http://www.amazon.com/gp/cdp/member-reviews/A2EYYAKH4VF70T?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2FXSRQCPOP3G5?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2I18AO597DSDI?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2LLH74Y2M0VHH
+http://www.amazon.com/gp/cdp/member-reviews/A2M4KVJ9E2AM7C?_encoding=UTF8&display=public&page=2
+http://www.amazon.com/gp/cdp/member-reviews/A2MFUK442KQAPQ?_encoding=UTF8&display=public&page=7
+http://www.amazon.com/gp/cdp/member-reviews/A2MG8DHACXH5MS?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2NS1S1GIPGDAY
+http://www.amazon.com/gp/cdp/member-reviews/A2O5TLE802NTA8?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2QQ2HQ4WQM1EP
+http://www.amazon.com/gp/cdp/member-reviews/A2ULPJ9UDZCGQ2
+http://www.amazon.com/gp/cdp/member-reviews/A2X6GEC6LCDN4S?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A2YNIRQA2JJTKQ?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A30AO422P01XK0?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3119V9POC03YM?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A31C6V1CIM04SV?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A32Q0R5AVPCNWO?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A337VQW00OJ5I5?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A34EQA9J9EDWNC?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A34KZYE51A0A19?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A34OZMGD9QBLTW?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A356TJCTCLDN89?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A372VRLDV38BRY
+http://www.amazon.com/gp/cdp/member-reviews/A372VRLDV38BRY?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A37BLSYZNNJA7O?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A39FAFC1YQNCE4?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3A48XEYWLWH7T?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3BJZ6UN3CFO1W
+http://www.amazon.com/gp/cdp/member-reviews/A3CZHZAH62GY22
+http://www.amazon.com/gp/cdp/member-reviews/A3CZHZAH62GY22?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3EUTO1D02130H?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3FF71OAL9FKW2?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3FGFF44RCOZXG?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3G545YMVB6CUZ?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3GFLNQE45KUMN?_encoding=UTF8&display=public&page=3
+http://www.amazon.com/gp/cdp/member-reviews/A3GPFHWJ1SSIHE?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3HXT0WRHKT2AW?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3KV6TFH8F9FD7?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3KVT8TRSI44NU
+http://www.amazon.com/gp/cdp/member-reviews/A3KVT8TRSI44NU?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3LZ9KEOZBNZPE
+http://www.amazon.com/gp/cdp/member-reviews/A3N10W4T5GBPR2
+http://www.amazon.com/gp/cdp/member-reviews/A3N10W4T5GBPR2?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3N424DMIJVYAK
+http://www.amazon.com/gp/cdp/member-reviews/A3OG3HV48J3VQM
+http://www.amazon.com/gp/cdp/member-reviews/A3P738KVXL2YYM?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3PR0KNBP01UR9?_encoding=UTF8&display=public&page=2
+http://www.amazon.com/gp/cdp/member-reviews/A3Q77CS1DEQLMG?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3SJR9A7T8W40W?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3T8AC805UZWZR?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A3UZ0I4XXYDQ4P?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A57VAB1GKMBUA?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A67NO0TFRCNK1?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A6YK7TEYVSSA3?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A7UGEZ6KTJLIT?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A82L6C4237BWV?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/A9AZJGWMDJ7SR
+http://www.amazon.com/gp/cdp/member-reviews/AC8E3L5ZM01P
+http://www.amazon.com/gp/cdp/member-reviews/AD4XSEKD62S2H?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/ADYED6Z2R1R0Z?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AE31M52VLKOG6
+http://www.amazon.com/gp/cdp/member-reviews/AE31M52VLKOG6?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AFITDZEWKJKAM?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AGFW667QNHDOY?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AHDKBOV5IT7RV?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AK7CAW3N1XZV6?_encoding=UTF8&display=public&page=7
+http://www.amazon.com/gp/cdp/member-reviews/AKXSTJQH1YUL7?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AL204P2GKCB1S?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AL339TZFO5CNL?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/ALDA72MNSJVOK?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AMTV3L9A3WPSG
+http://www.amazon.com/gp/cdp/member-reviews/AP18VHMTAG8J2?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AP839YM0XJ664?_encoding=UTF8&display=public&page=2
+http://www.amazon.com/gp/cdp/member-reviews/AQ81HZS5XRNPL
+http://www.amazon.com/gp/cdp/member-reviews/ARJIAB8SLWAOU
+http://www.amazon.com/gp/cdp/member-reviews/AT0QG1CGLM0ST
+http://www.amazon.com/gp/cdp/member-reviews/ATN1SSKTJD8Z8?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AUAQ5JH3CNAXJ?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AV0I0ZZOBMBBF?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AVMNVT2KRXELO?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AW2T0G57RPUH5
+http://www.amazon.com/gp/cdp/member-reviews/AXFI7TAWD6H6X?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AXW444VIV75UF?_encoding=UTF8
+http://www.amazon.com/gp/cdp/member-reviews/AXZILZSO1ETBM
+http://www.amazon.com/gp/cdp/member-reviews/AYPCUQS6ARWFH
+http://www.amazon.com/gp/help/seller/feedback.html?_encoding=UTF8&asin=&marketplaceSeller=&seller=A3QSK5W9R94SE1
+http://www.amazon.com/gp/product/0827386222?_encoding=UTF8
+http://www.amazon.com/gp/product/customer-reviews/0452285356?_encoding=UTF8
+http://www.amazon.com/gp/product/customer-reviews/0679863729?_encoding=UTF8
+http://www.amazon.com/gp/product/customer-reviews/0743222970?_encoding=UTF8&customer-reviews.sort_by=-SubmissionDate&n=283155
+http://www.amazon.com/gp/product/customer-reviews/074352490X?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/0743524918?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/0761130632?_encoding=UTF8&customer-reviews.sort_by=-SubmissionDate&n=283155
+http://www.amazon.com/gp/product/customer-reviews/0761130632?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/087605596X?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/0911226338?_encoding=UTF8&customer-reviews.sort_by=-SubmissionDate&n=283155
+http://www.amazon.com/gp/product/customer-reviews/0911226338?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/1592400175?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/gp/product/customer-reviews/B000000SNL/?_encoding=UTF8&me=ATVPDKIKX0DER&s=music
+http://www.amazon.com/gp/product/product-description/0312993560?_encoding=UTF8&n=283155
+http://www.amazon.com/gp/product/product-description/0345444094?_encoding=UTF8&n=283155&s=books
+http://www.amazon.com/o/ASIN/0151007349?_encoding=UTF8&coliid=&colid=
+http://www.amazon.com/o/ASIN/042518739X?_encoding=UTF8&coliid=&colid=
+http://www.amazon.com/o/ASIN/0595325270?_encoding=UTF8&coliid=&colid=
+http://www.amazon.com/o/ASIN/067232587X?_encoding=UTF8&coliid=&colid=
+http://www.amazon.com/o/ASIN/0911226338?_encoding=UTF8&coliid=&colid=
+http://www.amazon.com/o/ASIN/1890310034?_encoding=UTF8&coliid=&colid=
+http://www.amb-usa.fr/consul/oas_birth.htm
+http://www.ambafrance-ca.org/ambafrance-ca.org_non_ssl/gallery/genese/pages/vimy.htm
+http://www.ambafrance-uk.org/asp/service.asp?SERVID=100&LNG=en&PAGID=102
+http://www.ambafrance-us.org/news/standpoint/stand123.asp
+http://www.ambafrance-us.org/news/statmnts/2004/levitte_bar111104.asp
+http://www.ambafrance-us.org/news/statmnts/2005/barnier_gymnich041505.asp
+http://www.ambafrance-us.org/news/statmnts/2005/villepin_secularism022405.asp
+http://www.ambassadorgroup.org/html/order_form_music.html
+http://www.ambientvisions.com/1212001.htm
+http://www.ambientvisions.com/defresnes.htm
+http://www.ambiguous.org/robin/word/argue.html
+http://www.ambion.com/catalog/CatNum.php?1564
+http://www.ambion.com/catalog/ProdGrp.html?fkApp=29&fkSubApp=176&fkProdGrp=348
+http://www.ambisonic.net/mlp.html
+http://www.amblesideonline.org/PR/PR11p149Memoryand%20Forgetfulness.shtml
+http://www.ambrosiasw.com/forums/lofiversion/index.php/t15313.html
+http://www.ambrosiasw.com/forums/lofiversion/index.php/t33578.html
+http://www.ambrosine.com/resource.html
+http://www.ambulancetrader.com/cgi/classifieds/classifieds.cgi?db=mediumduty&website=&language=&session_key=&print_tips_page_button=on
+http://www.amc-ny.org/
+http://www.amc-ny.org/rec_actv/canoe/
+http://www.amc.army.mil/amc/pa/aprilissue.html
+http://www.amc.edu/unionupdate/SEIU/seiulabor.cfm?action=fp
+http://www.amcad.com/projects.html
+http://www.amcgltd.com/archives/002057.html
+http://www.amcham.co.nz/
+http://www.amcham.co.nz/Events.htm
+http://www.amcham.co.nz/INDEX.HTM
+http://www.amci.com/stepper-motor-control/integrated-stepper-motor-drive-23-FAQs.asp
+http://www.amconmag.com/02_10_03/feature.html
+http://www.amconmag.com/2004_04_12/article1.html
+http://www.amconmag.com/2005_02_28/article.html
+http://www.amconmag.com/2005_06_20/article1.html
+http://www.amcpages.com/atwt/whoswho/william.php
+http://www.amda.com/
+http://www.amda.com/caring/july2003/medical_direction.htm
+http://www.amda.com/industry/
+http://www.amdacmedirect.com/
+http://www.amdocs.com/hotnews.asp?news_id=479
+http://www.ame-church.org/amehist.htm
+http://www.ame-church.org/amehist.html
+http://www.ameinfo.com/
+http://www.ameinfo.com/38236.html
+http://www.ameinfo.com/58120.html
+http://www.ameinfo.com/60824.html
+http://www.ameinfo.com/62759.html
+http://www.ameinfo.com/db-823424.html
+http://www.ameinfo.com/news/Detailed/25449.html
+http://www.ameinfo.com/news/Detailed/46645.html
+http://www.ameinfo.com/news/Detailed/50401.html
+http://www.america.cry.org/project_details.asp?project_id=1
+http://www.americaconnects.net/learn/involvement.asp
+http://www.americaheldhostile.com/ed040804-1.shtml
+http://www.americamagazine.org/BookReview.cfm?articleTypeID=31&textID=1200&issueID=350
+http://www.americamagazine.org/articles/martin-opusdei.cfm
+http://www.americamagazine.org/gettext.cfm?articleTypeID=1&textID=1539&issueID=330
+http://www.american-buddha.com/profit.disease.htm
+http://www.american-buddha.com/trouble.shangri.htm
+http://www.american-buddha.com/unauthor.bio.bush.24.2.htm
+http://www.american-health-insurance.com/privacy.htm
+http://www.american-music-club.com/
+http://www.american-partisan.com/cols/2003/hall/qtr4/1204.htm
+http://www.american-philosophy.org/archives/2003_Institute/readings/dombrowski1.htm
+http://www.american.edu/projects/mandala/TED/ice/IRANIRAQ.HTM
+http://www.american.edu/projects/mandala/TED/rose.htm
+http://www.american.edu/projects/mandala/TED/smith/Nassopoulos.htm
+http://www.american.edu/psm/FAQs.htm
+http://www.americanairsoft.com/faqs.htm
+http://www.americanantigravity.com/podkletnov.html
+http://www.americanapparel.net/presscenter/articles/20031101swaspirit.html
+http://www.americanartists.org/art/article_a_crack_in_the_bubble.htm
+http://www.americanassembly.org/programs.dir/prog_display_ind_pg.php?this_filename_prefix=accounting&this_ind_prog_pg_filename=outcom
+http://www.americanatheist.org/supplement/conspiracy.html
+http://www.americanatheist.org/win99-00/T2/remnants.html
+http://www.americanbamboo.org/ChapterPages/NoCalChapterInfo.html
+http://www.americanbrittanyrescue.org/success/success.html
+http://www.americancatholic.org/Messenger/Jan2001/Feature3.asp
+http://www.americancatholic.org/Messenger/Jan2005/Eye_On_Entertainment.asp
+http://www.americancatholic.org/Messenger/Oct2000/feature2.asp
+http://www.americancatholic.org/Messenger/Oct2004/Eye_On_Entertainment.asp
+http://www.americancatholic.org/Newsletters/CU/ac0799.asp
+http://www.americancatholic.org/Newsletters/EDC/ag1202.asp
+http://www.americancatholic.org/Newsletters/YU/ay0797.asp
+http://www.americancatholic.org/Newsletters/YU/ay1195.asp
+http://www.americanchristianhistory.com/grammar.html
+http://www.americanchristianhistory.com/principleapproach02.html
+http://www.americancity.org/article.php?id_article=103
+http://www.americancity.org/article.php?id_article=86
+http://www.americanconference.com/program_conference/print_conf.cfm?ID=2549
+http://www.americandaily.com/article/6423
+http://www.americandaily.com/article/8015
+http://www.americandebtresources.com/creditreports.html
+http://www.americanembassy.org.cy/USpolicy/sp-train_trainersSept04.htm
+http://www.americanet.com/Classified/
+http://www.americanexpress.com.bh/mena/personal/cards/benefits/blue/uae_deals_retail.jsp
+http://www.americanexpress.com/uk/customerservice/contactamex_phone.shtml?uk_nav=cscontactmain
+http://www.americanfenceassociation.com/page.cfm?pageid=1666
+http://www.americanfootballmonthly.com/Subaccess/Magazine/03mar/spotlight.html
+http://www.americanforests.org/productsandpubs/magazine/archives/2005winter/feature1_1.php
+http://www.americanfundamentalists.com/cast.html
+http://www.americanfunding.com/mortgage.htm
+http://www.americanfunds.com/funds/details.htm?fundGroupNumber=10&fundClassNumber=0
+http://www.americanfunds.com/funds/details.htm?fundGroupNumber=10&fundClassNumber=0&layout=print
+http://www.americanfunds.com/funds/details.htm?fundGroupNumber=5&fundClassNumber=0
+http://www.americangaming.org/rgq/rgq_detail.cfv?id=291
+http://www.americangeriatrics.org/policy/med_expands.shtml
+http://www.americangeriatrics.org/products/positionpapers/treatdec.shtml
+http://www.americanheart.org/presenter.jhtml?identifier=11064
+http://www.americanheart.org/presenter.jhtml?identifier=2873
+http://www.americanheart.org/presenter.jhtml?identifier=3003156
+http://www.americanheart.org/presenter.jhtml?identifier=3008517
+http://www.americanheart.org/presenter.jhtml?identifier=3017030
+http://www.americanheart.org/presenter.jhtml?identifier=3029029
+http://www.americanheart.org/presenter.jhtml?identifier=4554
+http://www.americanheart.org/presenter.jhtml?identifier=4565
+http://www.americanheart.org/presenter.jhtml?identifier=467
+http://www.americanheart.org/presenter.jhtml?identifier=562
+http://www.americanhistory.com/history/RedBadge/rboc1.mgi
+http://www.americanhonor.net/
+http://www.americanhorsepubs.org/communication/newsletter_archive/
+http://www.americanhumane.org/site/DocServer/ProtectingAnimals_20.4B.pdf?docID=1242
+http://www.americanhumanist.org/humanism/thebible.html
+http://www.americanidle.org/MT/archives/american_idle/index.php
+http://www.americanliterature.com/LM/LM28.HTML
+http://www.americanliterature.com/WP/WP08.HTML
+http://www.americanmissionary.org/
+http://www.americanmusical.com/item--i-FOC-MH447--brand-97.html
+http://www.americanmusicscene.com/site/11607-orchid-arrangements.html
+http://www.americanmusicscene.com/site/24319-dusk-to-dawn-lights.html
+http://www.americanmusicscene.com/site/29154-kenwood-wine.html
+http://www.americanmusicscene.com/site/32240-shepherd-dog.html
+http://www.americanmusicscene.com/site/36067-silk-floral-arrangement.html
+http://www.americanmusicscene.com/site/37326-century-village-pembroke-pines.html
+http://www.americanmusicscene.com/site/38023-seoul-airport-hotel.html
+http://www.americanmusicscene.com/site/46844-lighted-makeup-mirrors.html
+http://www.americanmusicscene.com/site/669-standing-frames.html
+http://www.americanmusicscene.com/site/8145-trampoline-equipment.html
+http://www.americanparknetwork.com/parkinfo/sl/history/liberty.html
+http://www.americanpoems.com/search/dare_further_stare_with_me
+http://www.americanpopularculture.com/archive/sports/american_soccer_popularity.htm
+http://www.americanpopularculture.com/journal/articles/fall_2002/silbergleid.htm
+http://www.americanpopularculture.com/journal/articles/spring_2002/pratt.htm
+http://www.americanpopularculture.com/journal/articles/spring_2003/rothenberg.htm
+http://www.americanpopularculture.com/journal/articles/spring_2004/king.htm
+http://www.americanpresbyterianchurch.org/church_union.htm
+http://www.americanpresident.org/history/harrytruman/biography/domesticpolicy.common.shtml
+http://www.americanpresident.org/history/johnadams/firstlady/
+http://www.americanpresident.org/history/johnadams/firstlady/printable.html
+http://www.americanpresident.org/history/zacharytaylor/firstlady/
+http://www.americanpresident.org/history/zacharytaylor/firstlady/printable.html
+http://www.americanpressinstitute.org/content/p1446_c1382.cfm
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=13717
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=253512
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=65916
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=68488
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=9205
+http://www.americanprogress.org/site/pp.asp?c=biJRJ8OVF&b=9205&printmode=1
+http://www.americanprogressaction.org/site/pp.asp?c=klLWJcP7H&b=100480
+http://www.americanprogressaction.org/site/pp.asp?c=klLWJcP7H&b=118263&rghtnav=readmore2
+http://www.americanprogressaction.org/site/pp.asp?c=klLWJcP7H&b=187035
+http://www.americanprogressaction.org/site/pp.asp?c=klLWJcP7H&b=237258
+http://www.americanredcrossblood.org/all_about_us_in_the_news.asp
+http://www.americanreligion.org/cultwtch/mormon.html
+http://www.americanresearchco.com/
+http://www.americanreview.us/back70.htm
+http://www.americanreview.us/jane75.htm
+http://www.americanrhetoric.com/speeches/annashawrepublic.htm
+http://www.americanrhetoric.com/speeches/barbarajordanjudiciarystatement.htm
+http://www.americanrhetoric.com/speeches/charltonhestonculturalwar.htm
+http://www.americanrhetoric.com/speeches/gferraroacceptanceaddress.html
+http://www.americanrhetoric.com/speeches/jfkamericanuniversityaddress.html
+http://www.americanrhetoric.com/speeches/richardnixongreatsilentmajority.html
+http://www.americanrhetoric.com/speeches/tedkennedychappaquiddick.htm
+http://www.americans-world.org/digest/global_issues/intertrade/helpingworkers.cfm
+http://www.americans-world.org/digest/global_issues/intertrade/laborstandards.cfm
+http://www.americans-world.org/digest/global_issues/intertrade/onbalance.cfm
+http://www.americans-world.org/digest/regional_issues/IsraelPalestinians/summary_ME.cfm
+http://www.americans-world.org/digest/regional_issues/china/china7.cfm
+http://www.americansc.org.uk/Online/
+http://www.americansc.org.uk/Online/cooper.htm
+http://www.americanschoolofaviation.com/Testimonials.htm
+http://www.americanscientist.org/template/AssetDetail/assetid/17663
+http://www.americanscientist.org/template/AssetDetail/assetid/28365
+http://www.americanscientist.org/template/AssetDetail/assetid/33954
+http://www.americansforgunsafety.com/ags_in_the_news_article.asp?id=304&page=2
+http://www.americansingles.com/default.asp?p=13000&CategoryID=4
+http://www.americanthinker.com/articles.php?article_id=3514
+http://www.americantrakehner.com/
+http://www.americanturf.com/scripts/item.cfm?cat=&itemid=592&itmcnt=10&secid=6&eflag=0&catalogname=wincommerce
+http://www.americanturf.com/scripts/item.cfm?cat=&itemid=592&itmcnt=47&secid=6&eflag=0&catalogname=wincommerce
+http://www.americanunsecured.com/direct-finance-n.html
+http://www.americanvillage.org/boardmembers.shtml
+http://www.americanvillage.org/history.shtml
+http://www.americanvoice2004.org/
+http://www.americanwhitewater.org/rivers/id/2123/
+http://www.americanwhitewater.org/rivers/id/3645/
+http://www.americanwhitewater.org/rivers/id/3949/
+http://www.americanwhitewater.org/rivers/id/868/
+http://www.americanwriters.org/writers/truth.asp
+http://www.americaputmeoutofbusiness.com/news-june-22-05-002.php
+http://www.americas.org/item_15886
+http://www.americasblood.org/index.cfm?fuseaction=display.showPage&pageID=151
+http://www.americasblood.org/index.cfm?fuseaction=display.showPage&pageID=247
+http://www.americasdebate.com/forums/index.php?showtopic=2446&st=40
+http://www.americasdebate.com/forums/index.php?showtopic=8710
+http://www.americasdebate.com/forums/simple/index.php/t8117.html
+http://www.americasdemocrats.org/st122303.cfm
+http://www.americastestkitchen.com/Episode/330.htm
+http://www.americasvalueinvestor.com/receiver/schedules11-5-02.html
+http://www.americasvalueinvestor.com/receiver/status_rept_11-8-02.html
+http://www.americasvoices.org/archives2004/PattonD/PattonD_110204.htm
+http://www.americawest.com/
+http://www.americorps.org/rulemaking/rulemaking_background.htm
+http://www.ameripros.org/faq.html
+http://www.ameritech.net/users/rrpromo/show-list.html
+http://www.ametsoc.org/POLICY/stoistmntjan01.html
+http://www.ametsoc.org/amscouncilminutes/council_minutes/CMIN10_2004.html
+http://www.ametsoc.org/pubs/crpolicy.html
+http://www.amfdn.org/ubb/Forum32/HTML/000989.html
+http://www.amfdn.org/ubb/Forum37/HTML/000906.html
+http://www.amfed.org/news/n2000_09.htm
+http://www.amfed.org/news/n2003_09.htm
+http://www.amfsoftware.com/ezine/issue85.html
+http://www.amgen.com/tularik/press/
+http://www.amgot.org/hist/
+http://www.amherst.edu/~careers/gradstudy/gradschool.html
+http://www.amherst.edu/~phyplant/standards.html
+http://www.amherst.edu/~rjyanco/genealogy/acbiorecord/1865.html
+http://www.amherstsecurities.com/fin_notes.asp
+http://www.ami.ac.uk/courses/ami4982_lfi/u01/index.asp
+http://www.amianet.org/publication/resources/cataloging/compendium/introduction.html
+http://www.amichai.com/kodesh/brother/
+http://www.amicus-group.co.uk/index.cfm?articleid=23
+http://www.amiga.org/modules/newbb/viewtopic.php?topic_id=24885&forum=22
+http://www.amigospais-guaracabuya.org/oagim009.php
+http://www.amigospais-guaracabuya.org/oagim012.php
+http://www.amigospais-guaracabuya.org/oagrc015.php
+http://www.amigospais-guaracabuya.org/oagrr024.php
+http://www.amigospais-guaracabuya.org/oagsg002.php
+http://www.amipp.org.uk/shareholders/usanews1.html
+http://www.amiright.com/parody/misc/traditional514.shtml
+http://www.amitai-notes.com/blog/archives/000483.html
+http://www.amityfoundation.org/Amity/teacher/resources/sep/septoolkit/supmat/grabbag.htm
+http://www.amjbot.org/cgi/content/full/86/2/198
+http://www.amk.ca/quotations/neil-gaiman/page-2
+http://www.amm.com/recman/
+http://www.ammocity.com/forum/viewtopic.php?t=2
+http://www.amnation.com/vfr/archives/001777.html
+http://www.amnesty.ca/
+http://www.amnesty.ca/about/history/history_of_amnesty_international/september_11_2001_&_after.php
+http://www.amnesty.ca/take_action/actControlArms_230605.php
+http://www.amnesty.ie/user/content/view/full/2480
+http://www.amnesty.org.il/israel/press2.html
+http://www.amnesty.org.uk/deliver/keyword/10.html
+http://www.amnesty.org/ailib/intcam/east-timor/
+http://www.amnestyusa.org/activist_toolkit/runyourgroup/recruit.html
+http://www.amnestyusa.org/annualreport/statement.html
+http://www.amnestyusa.org/arms_trade/ustraining/military_101.html
+http://www.amnh.org/education/child_youth_fam/hsresearch.html
+http://www.amomslove.com/moms-business-overlookobvious.html
+http://www.amonline.com/article/archive_article.jsp?siteSection=1&displayMonth=March&displayYear=2003
+http://www.amonline.net.au/fishes/about/research/leis5.htm
+http://www.amonline.net.au/geoscience/collections/types.htm
+http://www.amonline.net.au/terrestrial_ecology/research/bioindicators_frogs.htm
+http://www.amorelicious.com/
+http://www.amorhq.net/blogs/index.php/rts
+http://www.ampcomusical.com/roadready-list.php
+http://www.ampersandcom.com/ampersandcommunications/mariorodriguez.htm
+http://www.amprogress.org/
+http://www.amptoons.com/blog/archives/2003/04/
+http://www.amptoons.com/blog/archives/2003/06/13/israeli-palestinian-relations-redux/
+http://www.amptoons.com/blog/archives/category/21/the-wage-gap-series/
+http://www.amputee-coalition.org/inmotion/feb_mar_97/garden.html
+http://www.amquix.info/amway.html
+http://www.amquix.info/aus/directly.htm
+http://www.amrc.org.hk/
+http://www.amrc.org.hk/4903.htm
+http://www.amrc.org.hk/5302.htm
+http://www.amren.com/mtnews/archives/2004/10/adoptive_parent.php
+http://www.amren.com/mtnews/archives/2004/10/endangered_spec.php
+http://www.amren.com/mtnews/archives/2005/06/li_home_held_up.php
+http://www.amrep.org/marat/weiss.html
+http://www.amritapuri.org/amma/2005/501prayersfor.php
+http://www.amritapuri.org/teachings/katha/talking.htm
+http://www.amrresearch.com/AboutUs/Analysts.asp?EmpId=261
+http://www.amrresearch.com/Events/Conference.asp?id=167
+http://www.amrresearch.com/content/resourcecenter.asp?id=436
+http://www.ams.mod.uk/ams/content/docs/sse/strategy/l_vision.htm
+http://www.ams.mod.uk/ams/content/docs/toolkit/gateway/guidance/peopiss/apprcc.htm
+http://www.ams.org/featurecolumn/archive/marriage.html
+http://www.ams.usda.gov/contracting/contracting.htm
+http://www.ams.usda.gov/science/PVPO/Forms/GuidelinesB.htm
+http://www.amsa.org/div/divres.cfm
+http://www.amsa.org/humed/hv/0204writing6.cfm
+http://www.amsa.org/humed/hv/1104writing5.cfm
+http://www.amsa.org/programs/hdencounters.cfm
+http://www.amsac.org/news.html
+http://www.amsat.org/amsat/news/ans2001/ans01063.html
+http://www.amsmeteors.org/mcleod/mcleod4.html
+http://www.amss.net/Abstract_32ndConference/WendyOsheaMeddour32.htm
+http://www.amstadt.com/tblarchive/VOL1997/400-499/bl406.html
+http://www.amstat.org/publications/jse/v10n3/chance.html
+http://www.amsterdam.info/job/
+http://www.amsterdam.nl/asp/get.asp?ItmIdt=00001251&SitIdt=00000005&VarIdt=00000002
+http://www.amt-sybex.com/index.asp?id=74
+http://www.amtech2010.com/
+http://www.amtech2010.com/free_insurance_leads_report.html
+http://www.amtsoft.com/deepfreeze/
+http://www.amun.org/differences.php
+http://www.amundsen.com/
+http://www.amvets.org/HTML/for_our_members/pr_manual.html
+http://www.amwa-dvc.org/toolkit/index.shtml
+http://www.amytart.com/archived/2003_07.php
+http://www.ana.net/com/pm/pmpast.cfm
+http://www.anabaptistnetwork.com/book/view/26
+http://www.anabaptistnetwork.com/donatists
+http://www.anabaptists.org/clp/cfl/cfl-5.html
+http://www.analitica.com/va/ttim/international/4969131.asp
+http://www.analog.com/library/analogDialogue/archives/37-01/compact_flash.html
+http://www.analog.cx/docs/othreps.html
+http://www.analogzone.com/aved0901.htm
+http://www.analyticalcontrols.com/factlmwh.htm
+http://www.analyticalsci.com/Astronomy/Telescopes/imagestv/cleaning_eyepiece_and_telescope_.htm
+http://www.analytiqa.com/ProductsandServices.asp
+http://www.analytiqa.com/productsandservices.asp
+http://www.anandtech.com/memory/showdoc.aspx?i=2130
+http://www.anandtech.com/news/shownews.aspx?i=23303
+http://www.anandtech.com/news/shownews.aspx?i=24477
+http://www.ananews.com/ANANEWS/myarticles.asp?S=251&PubID=2616&P=635782
+http://www.ananzi.co.za/catalog/BuildingandDecor/Architecture/
+http://www.ananzi.co.za/catalog/FunctionsandExhibitions/FunctionServices/
+http://www.anao.gov.au/WebSite.nsf/Publications/044C8F83E2A56B60CA256D4F002232EB
+http://www.anao.gov.au/WebSite.nsf/Publications/3435B5DAA450C6704A256D7500209598
+http://www.anao.gov.au/WebSite.nsf/Publications/4A256AE90015F69BCA256A6C0007392A
+http://www.anapsid.org/frogdecline2.html
+http://www.anapsid.org/handling.html
+http://www.anapsid.org/uvtable.html
+http://www.anarchogeek.com/archives/000257.html
+http://www.anasazi.org/index.php?programs_5
+http://www.anastasiaweb.com/
+http://www.anastasiaweb.com/russian-women-from-Sevastopol-Veronika-name-68474.htm
+http://www.anastasiaweb.com/success_stories/
+http://www.anatomicpathology.com/pt/re/aapath/fulltext.00125480-200109000-00015.htm
+http://www.anats.org.au/
+http://www.anaurora.co.uk/Win2004/Winter2004Text.htm
+http://www.anb.com.au/news.cfm
+http://www.anbg.gov.au/birds/birds.html
+http://www.anbg.gov.au/fungi/dispersal.html
+http://www.anc.org.za/ancdocs/discussion/leadership.html
+http://www.anc.org.za/ancdocs/history/ancylpol.html
+http://www.anc.org.za/ancdocs/history/lutuli/prime.html
+http://www.anc.org.za/ancdocs/history/wcharter.html
+http://www.anc.org.za/ancdocs/history/zuma/2000/jz0113.htm
+http://www.anc.org.za/ancdocs/pubs/umrabulo/umrabulo19/quarantine.html
+http://www.anc.org.za/ancdocs/pubs/umrabulo/umrabulo22/empower.html
+http://www.anc.org.za/ancdocs/speeches/2003/sp0217b.html
+http://www.anc.org.za/ancdocs/speeches/2004/sp0621.html
+http://www.anc.org.za/books/ccsa.html
+http://www.anc.org.za/books/ccsa22.html
+http://www.anc.org.za/books/ccsa26.html
+http://www.anc.org.za/books/escape14.html
+http://www.anc.org.za/people/mandela.html
+http://www.anc.org.za/un/gm-93-3a.html
+http://www.anc.org.za/wl/docs/conf97/wlprsdntreport.html
+http://www.anc.org.za/youth/docs/submissions/fet%20bill.html
+http://www.ancestralbranches.com/
+http://www.ancestralscotland.com/america_t_c
+http://www.ancestry.com/learn/library/article.aspx?article=8419
+http://www.ancestry.com/learn/library/article.aspx?article=9149
+http://www.ancestry.com/learn/library/article.aspx?article=9702
+http://www.ancestry.com/learn/library/article.aspx?article=extra
+http://www.ancestry.com/library/view/ancmag/2526.asp
+http://www.ancient-egypt.org/language/titulary/
+http://www.ancient-scotland.co.uk/changes.php
+http://www.ancientcoinmarket.com/ds/fakes/fakes.html
+http://www.ancientegyptmagazine.com/writing11.htm
+http://www.ancientforest.org/flb5.html
+http://www.andalucia.com/news/cdsn/home.htm
+http://www.andante.com/article/article.cfm?id=25408
+http://www.andda.org/breed_standards.htm
+http://www.andersen.sdu.dk/forskning/konference/tekst_e.html?id=10933
+http://www.anderson.ucla.edu/faculty/dick.rumelt/rumelt_teaching.htm
+http://www.anderson.ucla.edu/faculty/shlomo.benartzi/savemore.htm
+http://www.anderson.ucla.edu/x7544.xml
+http://www.anderson.ucla.edu/x8603.xml
+http://www.andicap.com/acatalog/
+http://www.andinia.com/articulos_expediciones_exploracion_exploration_expeditionsen.shtml
+http://www.andinia.com/articulos_senderismo_acampada_trekking_campingen.shtml
+http://www.andnet.org/goodneighbors/studies/costs.html
+http://www.andover.edu/cs/projects.htm
+http://www.andover.edu/iap/professional_development.htm
+http://www.andra.fr/radioactive_waste/nuclear_waste.htm
+http://www.andra.fr/radioactive_waste/radioactives_wastes_management.htm
+http://www.andra.fr/radioactive_waste/radioactivity_useful.htm
+http://www.andra.fr/radioactive_waste/waste_industry.htm
+http://www.andra.fr/radioactive_waste/wastes_receptacles.htm
+http://www.andreadoria.org/Recollections/Rea/Default.htm
+http://www.andreaubhi.com/laser_teeth_whitening.php
+http://www.andrew-clayton.co.uk/
+http://www.andrew-hall-artist.com/journal/index.php?p=89
+http://www.andrew.cmu.edu/org/circlek/bylaws.htm
+http://www.andrew.cmu.edu/org/fac-senate/Mtg8April03.htm
+http://www.andrew.cmu.edu/org/fac-senate/Mtg8March02.html
+http://www.andrew.cmu.edu/user/ecoffey/fall2004.html
+http://www.andrewclem.com/Baseball/RogersCentre.html
+http://www.andrewgraves.biz/Shakespeare/Shakespeare%20Comedy/loveslabourslost.4.3.html
+http://www.andrewnewberg.com/qna.asp
+http://www.andrewnorsworthy.com/index.cfm/lev1/145/divid/0
+http://www.andrews.edu/HR/ben_leave.html
+http://www.andrewsstarspage.com/CBA/12-28cba.htm
+http://www.andrewsullivan.com/
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2003_02_23_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2003_04_06_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2003_10_26_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2003_11_02_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_02_08_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_02_22_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_08_29_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_10_03_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_10_10_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_10_31_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2004_12_05_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2005_01_23_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2005_01_30_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2005_04_17_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2005_05_22_dish_archive.html
+http://www.andrewsullivan.com/index.php?dish_inc=archives/2005_06_19_dish_archive.html
+http://www.andrewsullivan.com/thewar.php
+http://www.andrewsw.com/news/index.php?p=407
+http://www.andrewtobias.com/newcolumns/050621.html
+http://www.andromeda.com/people/ddyer/topten.html
+http://www.andromedia.com/cfusion/showcase/index.cfm?event=finder&productID=1525&loc=en_us
+http://www.andybudd.com/archives/2004/01/a_couple_of_questions_about_web_standards_advocacy_and_w3c_validation_buttons/
+http://www.andyburkina.com/index.php?bid=58
+http://www.andycarvin.com/archives/2005/06/
+http://www.andyschest.com/WTC_Diary.html
+http://www.andyspenpals.com/comm/archive/index.php/t-17.html
+http://www.andyweiser.com/listings/
+http://www.andywoolley.zen.co.uk/Matches.htm
+http://www.anecdotage.com/index.php?aid=15907
+http://www.anesthesia.cc/new/tipsarc.html
+http://www.anesthesiology.org/pt/re/anes/fulltext.00000542-199808000-00020.htm
+http://www.anesthesiology.org/pt/re/anes/fulltext.00000542-200210000-00035.htm
+http://www.anesthesiology.org/pt/re/anes/fulltext.00000542-200501000-00027.htm
+http://www.anfearrua.com/ViewSectionDetail.asp?docid=1521
+http://www.ang.af.mil/history/Forging.asp
+http://www.ang6666.blogspot.com/
+http://www.angelcare.org/madd/diff.html
+http://www.angelfire.com/ak/sellassie/page4.html
+http://www.angelfire.com/alt2/unionlost/ul_4.htm
+http://www.angelfire.com/az/phatsuperman/joeyrumors.html
+http://www.angelfire.com/az2/arizonadry/truth/kingfollett.html
+http://www.angelfire.com/bc/peacelovehope/asking.html
+http://www.angelfire.com/blues/buffalohunter/Selkirk.htm
+http://www.angelfire.com/ca/beekeeper/foot.html
+http://www.angelfire.com/ca/curlycr/social.html
+http://www.angelfire.com/co/powerpraise/APhysicianLooksAtJesus.html
+http://www.angelfire.com/electronic/awakening101/road_trip.html
+http://www.angelfire.com/electronic/bodhidharma/modern-era.html
+http://www.angelfire.com/empire/qbrute/puzzles.htm
+http://www.angelfire.com/film/chrisrankin/
+http://www.angelfire.com/fl/EeirensFaerieTales/SevenDeadly/Lust.html
+http://www.angelfire.com/fl5/iww/
+http://www.angelfire.com/ga/page451/articles.html
+http://www.angelfire.com/games/zombiereviews/reviews/roborallyrvw.html
+http://www.angelfire.com/games4/doctorwhoeyespy/universal.html
+http://www.angelfire.com/geek/tetrisnomiko/gto/10summary.html
+http://www.angelfire.com/hi/kulasoft/apbooks.html
+http://www.angelfire.com/ia/jdmorrison/ends/ia131.html
+http://www.angelfire.com/il2/figskating/issues/anorexia.html
+http://www.angelfire.com/in3/theodore/opinion/articles/goudman2.html
+http://www.angelfire.com/indie/anna_jones1/daily_record02.html
+http://www.angelfire.com/journal/executivetime/pressing.htm
+http://www.angelfire.com/journal/ggbtps/ST031004.htm
+http://www.angelfire.com/journal/ggbtps/centprog.htm
+http://www.angelfire.com/journal/timbuktu/text/submissions_info.html
+http://www.angelfire.com/mac/egmatthews/worldinfo/asia/indonesia.html
+http://www.angelfire.com/md2/BrokenArrow/
+http://www.angelfire.com/md2/simianline/QuotesWar1.htm
+http://www.angelfire.com/mi/dinosaurs/carbondating.html
+http://www.angelfire.com/mi/enheduanna/Enhedbibliography.html
+http://www.angelfire.com/mi/libertyinstitute/es1of99.html
+http://www.angelfire.com/mi3/cookarama/vanfairoct01_2.html
+http://www.angelfire.com/mi3/eric260b/howto.html
+http://www.angelfire.com/mo/sassafrassgrove/homeschool/unit_studies.html
+http://www.angelfire.com/ms/seanie/history/oxford1.html
+http://www.angelfire.com/nc/vgfics/maa.html
+http://www.angelfire.com/nd/danscorpio/
+http://www.angelfire.com/nd/danscorpio/union.html
+http://www.angelfire.com/nf/chess/Frenchbooks.html
+http://www.angelfire.com/nv/billsthunder/
+http://www.angelfire.com/nv/sacred/eumi1.html
+http://www.angelfire.com/ny/davidbelasco/
+http://www.angelfire.com/oh2/fountainofyouth/skin.html
+http://www.angelfire.com/ok/worldofradio/grafgaff.html
+http://www.angelfire.com/pa/aohdivision1berks/
+http://www.angelfire.com/pa/sergeman/issues/education/homeschooling.html
+http://www.angelfire.com/poetry/talina/journalbeth.html
+http://www.angelfire.com/poetry/yourpage/2burns.html
+http://www.angelfire.com/pop2/deborahgibson/lyrics/live.html
+http://www.angelfire.com/pop2/deborahgibson/lyrics/otherlyr.html
+http://www.angelfire.com/pro/gyorgyigabor/Szloven_turaajanlo_eng.html
+http://www.angelfire.com/realm/bodhisattva/meeting.html
+http://www.angelfire.com/realm/obsidianquills/fannishindex.html
+http://www.angelfire.com/tn/MythsDreamsSymbols/shadow.html
+http://www.angelfire.com/tx/reachme/NAMBLA.html
+http://www.angelfire.com/tx3/circleofangels/PoemsStoriesLittleQuotesLifeLessons.html
+http://www.angelfire.com/ultra/miahops/drugrecall.html
+http://www.angelfire.com/wi/rsdhopeteens/Unite.html
+http://www.angelfire.com/wv/mikerayer/
+http://www.angelfire.com/wv2/bulliten/Ronniemem.html
+http://www.angelfire.com/yt/rockyroad/PRIME_DIRECTIVE.html
+http://www.angelfire.com/zine2/Number666/war.html
+http://www.angelflightamerica.org/
+http://www.angelicslayer.com/tbcs/anya.html
+http://www.angkor.com/2bangkok/2bangkok/forum/showthread.php?goto=lastpost&t=514
+http://www.angkor.com/2bangkok/2bangkok/forum/showthread.php?t=514
+http://www.angkor.com/2bangkok/2bangkok/forum/showthread.php?t=557&goto=nextoldest
+http://www.anglersnet.co.uk/authors/barbel09.htm
+http://www.anglesey.gov.uk/english/council/constitution/part2/part2_7.htm
+http://www.anglesey.gov.uk/english/phoenix/home.htm
+http://www.anglican.ca/faith/ministry/euc-practice-infection.htm
+http://www.anglican.ca/partnerships/PIM/TSIP/letter-2003-09-03.htm
+http://www.anglicanlibrary.org/images/blogstuff/ivleague.htm
+http://www.angloirishbank.co.uk/investor/chairman.asp
+http://www.angmail.fsnet.co.uk/rulespam.htm
+http://www.angola.org.uk/press_release_aid.htm
+http://www.angriesout.com/grown14.htm
+http://www.angriesout.com/madattack.htm
+http://www.angry.net/people/h/husbands.htm
+http://www.angryharry.com/esMenearnquarterofamillionpoundsmore.htm
+http://www.angstlust.com/write/archive/archive/indiscretion.html
+http://www.anheuser-busch.com/news/BudCup.htm
+http://www.animal-law.org/commentaries/fe15.htm
+http://www.animal-rights-library.com/texts-m/singer04.htm
+http://www.animalaid.org.uk/shop/toiletries.htm
+http://www.animalaidsw.org/adopt8.html
+http://www.animalatlas.com/encyclo/reptiles/information/lizardclassfamilies.htm
+http://www.animalbehaviorassociates.com/rmn_articles.htm
+http://www.animalconnectiontx.org/issues/KC.htm
+http://www.animalearn.org/docs/mh/mht2tjt.php
+http://www.animalguardians.com/
+http://www.animalhealthchannel.com/newpet/index.shtml
+http://www.animalinfo.org/species/artiperi/oryxleuc.htm
+http://www.animalinfo.org/species/artiperi/tragbuxt.htm
+http://www.animalinstincts.com/finani000327.html
+http://www.animallaw.info/statutes/stusscst50_11_780.htm
+http://www.animalliberation.org.au/pigsuffer.html
+http://www.animalnetwork.com/critters/library/older/age_ferr_2.asp
+http://www.animalrescuecoalitions.com/
+http://www.animalrights.net/archives/related_topics/animals/chickens.html
+http://www.animalrights.net/discussion/fullthread$msgNum=75485
+http://www.animalrights.net/discussion/fullthread$msgnum=38149
+http://www.animalshelter.com/newsletter_07_01.html
+http://www.animated-teeth.com/cosmetic_dentistry/t30_cosmetic_dentistry.htm
+http://www.animatedsoftware.com/cassini/
+http://www.animatedsoftware.com/environm/onofre/ca2001ar.htm
+http://www.animationnation.com/ubb/ultimatebb.php?ubb=faq
+http://www.animationschoolreview.com/sketches/2004/09/king-camera-used-toon-boom-animation-software-for-ad-spot.html
+http://www.animationschoolreview.com/sketches/2004/09/king-camera-uses-toon-boom-animation-software-for-ad-spot.html
+http://www.animationtrip.com/submissions/animators.php
+http://www.animeboredom.co.uk/games-reviews/ps2-nhl-hitz-2003/118/
+http://www.animefringe.com/magazine/2004/10/feature/03.php
+http://www.animelyrics.com/forum/topic_show.pl?tid=12541
+http://www.animeondvd.com/reviews2/disc_reviews/3854.php
+http://www.anitabell.com/ccoffinnotes.htm
+http://www.anitavacation.com/articles/cruise/cruisespending.shtml
+http://www.anklebiter.net/log/archives/2003_05.html
+http://www.anklebiter.net/log/archives/2003_06.html
+http://www.anl.gov/Media_Center/Argonne_News/
+http://www.anl.gov/Media_Center/News/2004/ES041015.html
+http://www.annalog.co.za/
+http://www.annals.org/cgi/content/full/127/5/403
+http://www.annalsofsurgery.com/pt/re/annos/fulltext.00000658-199905000-00001.htm
+http://www.annalsofsurgery.com/pt/re/annos/fulltext.00000658-200507000-00001.htm
+http://www.annalssurgicaloncology.org/cgi/content/full/11/9/875
+http://www.annalyn.net/2005_04_01_scorpioneyes_archive.html
+http://www.annaswebart.com/culture/dancehistory/charact/
+http://www.annblack.com/nec_oct2002.htm
+http://www.anneapplebaum.com/communism/1999/11_07_wpost_berlin.html
+http://www.anneapplebaum.com/politics/1998/10_11_wpost_russians.html
+http://www.annecollins.com/
+http://www.annelisabeth.com/blog/archives/2005_05.html
+http://www.annenberginstitute.org/mediacenter/race_bios.html
+http://www.anneschuster.co.za/flash/0407/adonis.htm
+http://www.annexed.net/box/augustheat/
+http://www.annickpress.com/forteachers/weighingtheelephant.html
+http://www.anniearmstrong.com/missionaries_05/missionaries_smith.asp
+http://www.annieshomepage.com/christmaskids.html
+http://www.annieshomepage.com/homedecorations.html
+http://www.annieshomepage.com/june.html
+http://www.annieshomepage.com/presidents.html
+http://www.anniesprinkle.org/html/writings/ftmts.html
+http://www.annlawrence.com/DYBexcerpt.html
+http://www.annoyances.org/exec/forum/winxp/1099932171
+http://www.annoyatorium.com/fb.aspx?m=114215&go=last
+http://www.annoyatorium.com/fb.aspx?m=123418
+http://www.annoyatorium.com/tm.aspx?m=114215&mpage=2
+http://www.annualreviews.org/index.asp
+http://www.annuiweb.com/news/article.asp?artID=30
+http://www.annurev.org/
+http://www.anointedlinks.com/cgi-bin/clickit/tk.cgi?freewill
+http://www.anomalies-unlimited.com/Britney.html
+http://www.anomalynews.com/phorum/read.php?f=4&i=88&t=87
+http://www.anonymousjuice.com/review/hp01.html
+http://www.anormed.com/investors/q105.cfm
+http://www.anotherperspective.org/advoc286.html
+http://www.anotherurl.com/photos/family/old_hubbard/intro.htm
+http://www.anrcoins.com/auctionlots.aspx?lsid=AN00000533
+http://www.ans.org.uk/archive/issue_083.html.en
+http://www.ans.org/pi/news/d-1022187916
+http://www.anschechesed.org/education/dvar/divrei/curzon%2040503.html
+http://www.anselm.edu/homepage/dbanach/infin.htm
+http://www.ansi.org/news_publications/media_tips/playing.aspx?menuid=7
+http://www.ansi.org/news_publications/media_tips/standards_overview_cont.aspx?menuid=7
+http://www.anstaskforce.gov/sec1202.htm
+http://www.ansteorra.org/regnum/hospitaler/GuidingHand/personna.htm
+http://www.answerbag.com/c_view.php/1603
+http://www.answerbag.com/q_view.php/14264
+http://www.answerbag.com/q_view.php/24290
+http://www.answerpoint.org/reading_room/book_list.asp?sort=101&list=1341
+http://www.answers.com/the+muppets
+http://www.answers.com/topic/10-downing-street
+http://www.answers.com/topic/2004
+http://www.answers.com/topic/africa
+http://www.answers.com/topic/bank-of-scotland
+http://www.answers.com/topic/beard
+http://www.answers.com/topic/bed-furniture
+http://www.answers.com/topic/black
+http://www.answers.com/topic/bowing-social
+http://www.answers.com/topic/boy-scouts-of-america
+http://www.answers.com/topic/brigadier-lethbridge-stewart
+http://www.answers.com/topic/capital-economics
+http://www.answers.com/topic/central-bank-and-financial-services-authority-of-ireland
+http://www.answers.com/topic/commune-in-france
+http://www.answers.com/topic/deep-throat
+http://www.answers.com/topic/developing-nation
+http://www.answers.com/topic/factors-of-production
+http://www.answers.com/topic/factory
+http://www.answers.com/topic/first-class-cricket
+http://www.answers.com/topic/george-gilbert-scott
+http://www.answers.com/topic/german-empire
+http://www.answers.com/topic/german-language
+http://www.answers.com/topic/get
+http://www.answers.com/topic/gungan-grand-army
+http://www.answers.com/topic/human-sexual-behavior
+http://www.answers.com/topic/interest
+http://www.answers.com/topic/j-m-barrie
+http://www.answers.com/topic/jessica-lynch
+http://www.answers.com/topic/largest-cities-of-the-european-union-by-population
+http://www.answers.com/topic/let-it-be
+http://www.answers.com/topic/magnetic-core-memory
+http://www.answers.com/topic/mathematical-model
+http://www.answers.com/topic/military-history-of-the-roman-empire
+http://www.answers.com/topic/minnesota-vikings
+http://www.answers.com/topic/oldboy
+http://www.answers.com/topic/oxford-english-dictionary-1
+http://www.answers.com/topic/paul-of-tarsus
+http://www.answers.com/topic/privatization
+http://www.answers.com/topic/sitting-ducks
+http://www.answers.com/topic/south-vietnam
+http://www.answers.com/topic/st-john-s-college-cambridge
+http://www.answers.com/topic/subject-philosophy
+http://www.answers.com/topic/tax-evasion
+http://www.answers.com/topic/television
+http://www.answers.com/topic/triad
+http://www.answers.com/topic/venture-capital
+http://www.answers.com/topic/watt
+http://www.answers.com/topic/weapon
+http://www.answers.com/topic/western-africa
+http://www.answers.uk.com/office/gasurv.htm
+http://www.answersingenesis.org/cec/docs/one_blood_sg.asp
+http://www.answersingenesis.org/creation/v18/i4/naming.asp
+http://www.answersingenesis.org/docs/1254.asp
+http://www.answersingenesis.org/docs/2.asp
+http://www.answersingenesis.org/docs/3784.asp
+http://www.answersingenesis.org/docs2002/0308ohio.asp
+http://www.answersingenesis.org/docs2003/0617cavemen.asp
+http://www.answersingenesis.org/docs2005/0205telegraph.asp
+http://www.answersingenesis.org/home/area/faq/dont_use.asp
+http://www.answersingenesis.org/home/area/tools/cains_wife.asp
+http://www.answersingenesis.org/news/lerner_resp.asp
+http://www.answersingenesis.org/news/scientific_american.asp
+http://www.answersingenesis.org/tj/v15/i2/behemoth.asp
+http://www.anta.gov.au/vetWinners.asp
+http://www.antarctic-circle.org/advert.htm
+http://www.antarctica.ac.uk/Key_Topics/Climate_Change/Climate_Change_Position.html
+http://www.antarctica.ac.uk/News_and_Information/Press_Releases/1998/19980619.html
+http://www.antarcticacup.com/x_qanda.cfm
+http://www.antarestech.com/products/kantos.html
+http://www.antarestech.com/products/quotations.html
+http://www.antcrc.utas.edu.au/scar/antime/report.html
+http://www.antecint.co.uk/main/infectbr.htm
+http://www.antenna.nl/wise/340/3399.html
+http://www.antenna.nl/wise/433-4/4283.html
+http://www.antenna.nl/wise/435/4299.html
+http://www.anteques.com/srv/antaday/15390.htm
+http://www.anth.ucsb.edu/forms/Faculty.Research.Trip.Req.html
+http://www.anthraxadeadlyshotinthedark.com/
+http://www.anthro.ku.dk/Studier/Hvad_er_antropologi/Pjece-om-faget-E.htm
+http://www.anthrobase.com/Txt/P/Pedersen_A-S_01/01_Bilag_01.htm
+http://www.anthrofiction.com/Stories/S/Spoor/Chapter_02.shtml
+http://www.anthropic-principle.com/primer1.html
+http://www.anthrosource.net/doi/abs/10.1525/tea.1998.5.2.18
+http://www.anthrosource.net/doi/abs/10.1525/var.1975.2.1.25
+http://www.anthrosource.net/doi/pdf/10.1525/awr.2001.22.3.7
+http://www.anthrosource.net/doi/pdf/10.1525/mua.1988.12.1.3
+http://www.anthrosource.net/doi/pdfplus/10.1525/jlat.1976.1.1.7
+http://www.anthrosource.net/doi/pdfplus/10.1525/napa.1995.15.1.33
+http://www.anti-bases.org/blue_paper/defrev_proposed_res.htm
+http://www.anti-dmca.org/
+http://www.anti-rev.org/textes/VidalNaquet92b/notes.html
+http://www.anti-war.jp/english/index_e.htm
+http://www.antibullying.net/praisesystem.htm
+http://www.anticoagulation.org.uk/FAQs.htm
+http://www.anticruelty.ca/p17b.htm
+http://www.anticz.com/heads.htm
+http://www.antigua-barbuda.com/news_information/index.asp
+http://www.antiguanice.com/
+http://www.antiguanice.com/babyanya/update.htm
+http://www.antioch-college.edu/AEA/faq.htm
+http://www.antioch.com.sg/~vcfnus/doubts/problem.htm
+http://www.antiochian-orthodox.co.uk/george_hackney.htm
+http://www.antiochian.org/dynamis/1095998400.html
+http://www.antiochsea.edu/about/stories/stories04.html
+http://www.antioffline.com/framingryan.html
+http://www.antion.com/public-speaking.htm
+http://www.antipas.org/books/be_ye_transformed/ready_to_be_offered.html
+http://www.antipas.org/magazine/tv/4_arguments_book/argument3.html
+http://www.antipope.org/charlie/blog-archive/September_2002.html
+http://www.antipope.org/charlie/blosxom.cgi
+http://www.antipope.org/charlie/journo/linux-in-94.html
+http://www.antique-artfairs.com.au/Top.htm
+http://www.antiquelures.com/Identify.htm
+http://www.antiquemapsandprints.com/lancashire-illustrated.htm
+http://www.antiquetelephones.net/
+http://www.antiquewireless.org/otb/tvcolumn0803.htm
+http://www.antiquing.com/shops/specjoy/
+http://www.antiscam.net/
+http://www.antislavery.org/archive/submission/submission2005-sudan.htm
+http://www.antislavery.org/homepage/antislavery/award/award2001speeches.htm
+http://www.antislavery.org/homepage/antislavery/childlabour.htm
+http://www.antiwar.com/bock/
+http://www.antiwar.com/hacohen/?articleid=793
+http://www.antiwar.com/ips/parry.php?articleid=3581
+http://www.antiwar.com/justin/j012901.html
+http://www.antiwar.com/justin/j070903.html
+http://www.antiwar.com/justin/j082703.html
+http://www.antiwar.com/lobe/?articleid=4419
+http://www.antiwar.com/orig/brown2.html
+http://www.antiwar.com/orig/jatras10.html
+http://www.antiwar.com/orig/stone3.html
+http://www.antiwar.com/spectator/spec345.html
+http://www.antiwar.com/stromberg/?articleid=655
+http://www.antiwar.com/stromberg/index.php?articleid=655
+http://www.antiwar.com/stromberg/s090799.html
+http://www.antonellagambotto.com/NonfictionInstinctExtract.htm
+http://www.antonine-education.co.uk/Physics_AS/Module_2/Topic_3/topic_3.htm
+http://www.anu.edu.au/asianstudies/textnotes/buddhism.html
+http://www.anu.edu.au/music/finishing_touch/index.php
+http://www.anu.edu.au/people/Roger.Clarke/DV/ContactPITs.html
+http://www.anu.edu.au/people/Roger.Clarke/DV/IDCards97.html
+http://www.anu.edu.au/people/Roger.Clarke/DV/NotesCFP02.html
+http://www.anu.edu.au/people/Roger.Clarke/SOS/ResPubEth.html
+http://www.anu.edu.au/polsci/marx/contemp/pamsetc/perm/perm.htm
+http://www.anu.edu.au/records/EI.php
+http://www.anu.org/
+http://www.anus.com/zine/articles/kitchen/
+http://www.anvari.org/fun/Marriage/Mean_Punishment.html
+http://www.anvari.org/fun/Truth/What_a_Difference_a_Century_Makes.html
+http://www.anvari.org/shortjoke/Shaggy_Dog_Humor/2896.html
+http://www.anver.com/document/vacuum%20components/vacuum%20cups/cup-material.htm
+http://www.anvilfire.com/FAQs/archives/v052003.htm
+http://www.anvilpub.com/part_2.htm
+http://www.anxietyaustralia.com.au/
+http://www.any-book-in-print.com/_grades_k5/group_act_k5.htm
+http://www.any-photo-album-software.com/
+http://www.anybrowser.org/campaign/
+http://www.anybrowser.org/shadowbane/faq/
+http://www.anyonefortee.com/HP/PS1.html
+http://www.anzapt.org/mambo/index.php?option=content&task=blogsection&id=12&Itemid=57
+http://www.anzsrs.org.au/trainofthoughtdec2004.html
+http://www.ao.net/~jmo/john/music/fairuses.html
+http://www.ao.uiuc.edu/ijet/v1n1/author-bios.html
+http://www.aoa.dhhs.gov/
+http://www.aoa.gov/
+http://www.aoa.gov/eldfam/Money_Matters/Money_Matters.asp
+http://www.aoa.gov/eldfam/Money_Matters/Money_Matters_pf.asp
+http://www.aoa.gov/index.asp
+http://www.aoa.gov/youcan/about/faqs.asp
+http://www.aoa.gov/youcan/about/faqs_pf.asp
+http://www.aoa.gov/youcan/org/overview/faqs.asp
+http://www.aoc.gov/cc/capitol/capitol_construction.cfm
+http://www.aoc.state.nc.us/www/copyright/aoc/speeches/greene.html
+http://www.aoc.state.nc.us/www/public/aoc/barrules.html
+http://www.aoc.state.nc.us/www/public/coa/opinions/2004/030674-1.htm
+http://www.aofoundation.org/portal/wps/portal/!ut/p/.cmd/cs/.ce/7_0_A/.s/7_0_7UF/_s.7_0_A/7_0_7UF
+http://www.aoghs.org/
+http://www.aol.ca/webcentres/entertainment/
+http://www.aomin.org/bjmthug.html
+http://www.aoml.noaa.gov/hrd/hurdat/august01/Powell_summary.html
+http://www.aomonline.org/Publications/Articles/BSchools.asp
+http://www.aomw.org/sarah/poetry.html
+http://www.aopa.org/
+http://www.aopa.org/learntofly/startfly/getstart.html
+http://www.aopa.org/pilot/never_again/2004/na0410.html
+http://www.aopa.org/whatsnew/newsitems/2002/020621_homeland_security.html
+http://www.aota.net/forums/showthread.php?t=18579&page=2
+http://www.aota.net/forums/showthread.php?t=19687
+http://www.ap-foodtechnology.com/nl/allNLs.asp
+http://www.ap.columbia.edu/apam/ChuSymposium.html
+http://www.apa.edu.au/
+http://www.apa.org/books/teengirls/teen-samp3.html
+http://www.apa.org/ce/conventionsun.html
+http://www.apa.org/journals/faq.html
+http://www.apa.org/monitor/jul98/joy.html
+http://www.apa.org/monitor/mar99/humor.html
+http://www.apa.org/monitor/sep98/isolat.html
+http://www.apa.org/pi/pii/care.html
+http://www.apa.org/pi/urbaned/scaling.html
+http://www.apa.org/ppo/issues/pdzdltr.html
+http://www.apa.org/practice/practitionerhelp.html
+http://www.apa.org/practice/ptguidelines.html
+http://www.apa.org/psycinfo/training/thesintro.html
+http://www.apa.org/pubinfo/altruism.html
+http://www.apa.org/pubinfo/answers.html
+http://www.apa.org/releases/adhdteens.html
+http://www.apa.org/releases/success.html
+http://www.apa.org/science/faq-findtests.html
+http://www.apa.org/science/ic-ramsberger.html
+http://www.apa.org/science/psa/ic-callan.html
+http://www.apa.org/science/ttrr.html
+http://www.apa.org/videos/4310330.html
+http://www.apa.org/work-family/schools.html
+http://www.apacheria.com/toysmisc.htm
+http://www.apacheweek.com/issues/01-09-28
+http://www.apahelpcenter.org/articles/article.php?id=22
+http://www.apahelpcenter.org/articles/article.php?id=35
+http://www.apahelpcenter.org/articles/article.php?id=69
+http://www.apartmentcities.com/Washington-DC-Apartments/Falls_Church_Apartments.asp
+http://www.apartments.ie/
+http://www.apartments2book.com/terms.htm
+http://www.apartmenttherapy.com/main/archives/002753.html
+http://www.apas.org.uk/new_page_43.htm
+http://www.apastyle.org/aboutstyle.html
+http://www.apastyle.org/elecref.html
+http://www.apcc.org/index.php?src=gendocs&link=GrowthBylaws2002&category=Business%20Roundtable
+http://www.apcca.org/Pubs/21st/agenda2.htm
+http://www.apci.asso.fr/design_uk/design_faq.php
+http://www.apcims.co.uk/public/news/releases/2002/Conference%202002/angelak.asp
+http://www.apcss.org/Publications/Report_International_Game_98.html
+http://www.apcug.net/Reports/July04/more_miles_for_the_buck.htm
+http://www.apec.org/apec/ministerial_statements/sectoral_ministerial/environment/1994_environment.html
+http://www.apechild.com/archives/feb2003.php
+http://www.aperfectcause.org/artman/publish/article_769.asp
+http://www.aperfectcause.org/artman/publish/article_941.asp
+http://www.aperfectcause.org/artman/publish/printer_769.asp
+http://www.apersonalsite.com/pixnbook/journal/jul03/jul3103.html
+http://www.apfn.net/messageboard/8-12-03/discussion.cgi.58.html
+http://www.apfn.org/enron/fortunes.htm
+http://www.apfs-tv.com/apfs_presents/nstapley_televisionwales.htm
+http://www.apfw.org/indexenglish.asp?fname=report%5Cenglish%5Cspe1001.htm
+http://www.aph.gov.au/Senate/pubs/proc_bul/bull_184.htm
+http://www.aph.gov.au/house/committee/efpa/rbs/15jul98.htm
+http://www.aph.gov.au/house/committee/em/1993fed.htm
+http://www.aph.gov.au/house/house_news/magazine/ATH_may_june_03.htm
+http://www.aph.gov.au/library/intguide/sp/digdata.htm
+http://www.aph.gov.au/library/parl/hist/primmins.htm
+http://www.aph.gov.au/library/pubs/bd/1996-97/97bd149.htm
+http://www.aph.gov.au/library/pubs/bd/2002-03/03bd062.htm
+http://www.aph.gov.au/library/pubs/bd/2002-03/03bd162.htm
+http://www.aph.gov.au/library/pubs/bd/2003-04/04bd036.htm
+http://www.aph.gov.au/library/pubs/rn/1995-96/96rn48.htm
+http://www.aph.gov.au/library/pubs/rn/1999-2000/2000rn26.htm
+http://www.aph.gov.au/library/pubs/rn/2004-05/05rnAbstracts.htm
+http://www.apha.org.uk/arfmicorif.htm
+http://www.apha.org/codeofethics/ethics.htm
+http://www.apha.org/media/science.htm
+http://www.apha.org/news/press/2003_journal/jun03.htm
+http://www.apha.org/ppp/science/10ES.htm
+http://www.aphafoundation.org/API/APIDiabetes.htm
+http://www.aphanet.org/AM/TemplateRedirect.cfm?Template=/CM/HTMLDisplay.cfm&ContentID=2337
+http://www.aphasia.ca/training/index.shtml
+http://www.aphasia.org/NAAfactsheet.html
+http://www.aphex.com/320A.htm
+http://www.aphis.usda.gov/lpa/issues/bse/bse-overview.html
+http://www.aphroditewomenshealth.com/ubb/ultimatebb.php?/topic/7/75/4.html
+http://www.apic.jiii.or.jp/n_c/wsquare/2002032501.htm
+http://www.apl.com/press_releases/html/press_release_NOLLOSSES02_032702.html
+http://www.aplaceofhope.com/Merchant2/merchant.mv
+http://www.aplawrence.com/Blog/B1229.html
+http://www.aplawrence.com/Unixart/bbolderhardware.html
+http://www.apme-credibility.org/BrickmanExecSummary.html
+http://www.apme.com/soundingboard/33.shtml
+http://www.apo.ucla.edu/call/regular.htm
+http://www.apolloalliance.org/about_the_alliance/aboutapollo.cfm
+http://www.apolloalliance.org/strategy_center/gerardtakebackameric.cfm
+http://www.apolloalliance.org/strategy_center/iucresolution.cfm
+http://www.apollowebworks.com/russell/mindcrime.html
+http://www.apologetics.org/articles/wager1.html
+http://www.apologeticsindex.org/an990514.html
+http://www.apologeticsindex.org/b10.html
+http://www.apologeticsindex.org/f00.html
+http://www.apologeticsindex.org/p00.html
+http://www.apologeticsindex.org/s00.html
+http://www.apologeticspress.org/defdocs/rr1990/r&r9012a.htm
+http://www.apologeticspress.org/modules.php?name=Read&itemid=2022&cat=11
+http://www.appa.org/FacilitiesManager/articleDetail.cfm?ItemNumber=475
+http://www.appa.org/FacilitiesManager/articleDetail.cfm?ItemNumber=581
+http://www.appa.org/FacilitiesManager/articleDetail.cfm?ItemNumber=622
+http://www.appaloosa.org.uk/about.htm
+http://www.appanet.org/legislative/index.cfm?itemnumber=12648
+http://www.apparelsearch.com/calendar.htm
+http://www.apparenting.com/our_longterm_birth_control_option_of_choice_a_vasectomy.html
+http://www.appartparis.com/uk/paris_rentals/15_apartment_paris_rental/57_apartments_in_paris.html
+http://www.appdevadvisor.co.uk/
+http://www.appdrugs.com/090803PR.htm
+http://www.appea.com.au/Conference/Exhibition.htm
+http://www.appellate-brief.com/Forms-DivNWS.htm
+http://www.appellate.net/articles/wilpin799.asp
+http://www.apphotomanagers.org/Ten-things.html
+http://www.applausesw.org.uk/pages/pages/h9prodd/rehears.html
+http://www.applays.com/plays/description/title_description_A.html
+http://www.applays.com/plays/description/title_description_B.html
+http://www.apple-history.com/frames/body.php?page=mirror
+http://www.apple-history.com/frames/body.php?page=recent_changes
+http://www.apple-history.com/noframes/
+http://www.apple-history.com/noframes/body.php?page=recent_changes
+http://www.apple.com.au/iwork/pages/word.html
+http://www.apple.com/airportexpress/
+http://www.apple.com/de/finalcutstudio/finalcutpro/worktogether.html
+http://www.apple.com/games/articles/2003/12/toysight/
+http://www.apple.com/hotnews/articles/2002/08/cheeseman/
+http://www.apple.com/ipod/
+http://www.apple.com/ipodshuffle/
+http://www.apple.com/iwork/pages/word.html
+http://www.apple.com/macosx/
+http://www.apple.com/powerbook/
+http://www.apple.com/pro/music/rothschild/index2.html
+http://www.apple.com/pro/video/pearljam/
+http://www.apple.com/science/profiles/black/index2.html
+http://www.apple.com/switch/whyswitch/
+http://www.apple.com/za/education/ilife/creativity/
+http://www.apple.com/za/xserve/management.html
+http://www.applefritter.com/node/5185
+http://www.applefritter.com/node/6146
+http://www.applefritter.com/node/728
+http://www.applematters.com/comments.php?id=179_0_1_0_C
+http://www.applematters.com/comments.php?id=20_0_1_0_C
+http://www.apples4theteacher.com/holidays/christmas/stories/the-cratchits-christmas-dinner.html
+http://www.applevinegar.com/horses.html
+http://www.appliedartsmag.com/careers/ontario_area.html
+http://www.appliedergo.org/conference/travel.htm
+http://www.appliedimprov.net/articles/parachute.htm
+http://www.appliedlanguage.com/country_guides/italy_country_economy.shtml
+http://www.appliedozone.com/books.html
+http://www.appliedozone.com/parasites.html
+http://www.appraisalfoundation.org/html/USPAP2004/ao23.htm
+http://www.appraisalfoundation.org/html/USPAP2005/ao23.htm
+http://www.appraiservalues.com/
+http://www.appropriate-economics.org/ebooks/exchange/Exchange.htm
+http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/+Life/RantonGmail.rdoc
+http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/+Linux/ValidatorFirefox.rdoc
+http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/+Ruby/eclipse09.rdoc
+http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/+SmallWorld/kiwi.rdoc
+http://www.apria.com/channels/0,2748,100-218,00.html
+http://www.apria.com/channels/0,2748,101-186,00.html
+http://www.apria.com/channels/0,2748,96-218,00.html
+http://www.apriaseoul.org/overview_main.htm
+http://www.apricot.net/apricot2000/keynote_1.htm
+http://www.apricotpie.com/about.html
+http://www.aps.anl.gov/News/Meetings/CAT_Chat/1997/19970307.htm
+http://www.aps.anl.gov/epics/
+http://www.aps.edu/aps/Eisenhower/Brugge/XerxesToTheRescue.html
+http://www.apsc.gov.au/mab/person.htm
+http://www.apsc2orbit.com/faqs/faqs.html
+http://www.apscentral.org/inc/terms.html
+http://www.apsf.org/resource_center/clinical_safety/adverse_event.mspx
+http://www.apsnet.org/online/feature/cacao/
+http://www.apsoc.ox.ac.uk/Oxpop/
+http://www.apstherapy.co.nz/hpa.html
+http://www.apsu.edu/letsgopeay/updates/mbasketball/mbkb.htm
+http://www.apsu.edu/~lesterj/CYBER3.HTM
+http://www.apsu.edu/~lesterj/CYBER4.HTM
+http://www.apt-finder.com/tupeloguide.html
+http://www.apta.com/about/committees/UTFS/task_force_meeting_minutes_040422.cfm
+http://www.apta.com/about/committees/utfs/task_force_meeting_minutes_040422.cfm
+http://www.apta.com/passenger_transport/helpwanted/index.cfm
+http://www.aptea.com/history_timeline.asp
+http://www.aptribes.com/GOs/GOMs106_2004_HMFW.htm
+http://www.apwa.net/Publications/Reporter/ReporterOnline/index.asp?DISPLAY=ISSUE&ISSUE_DATE=092004&ARTICLE_NUMBER=873
+http://www.aqa.org.uk/news/
+http://www.aqeta.qc.ca/english/general/language.htm
+http://www.aqha.com/magazines/aqhj/classifieds.cfm
+http://www.aquaaerobics.com/art_part2.htm
+http://www.aqualandpetsplus.com/Amphibian,%20Terrarium%20II.htm
+http://www.aqualink.com/columns/k-cory7.html
+http://www.aquariumfish.net/_newsletter/newsletters/newsletter_current.htm
+http://www.aquariumfish.net/information/water_conditioner_p2.htm
+http://www.aquasanaofcentralflorida.com/
+http://www.aquaticape.org/summary.html
+http://www.aquila.com/corpgov/principles.shtml
+http://www.aquinas.edu/athletics/mens_cross.html
+http://www.arabeyes.org/
+http://www.arabmediawatch.com/modules.php?name=News&file=article&sid=1344
+http://www.arabmediawatch.com/modules.php?name=News&file=article&sid=1366
+http://www.arabmediawatch.com/modules.php?name=News&file=article&sid=1407
+http://www.arabmediawatch.com/modules.php?name=News&file=article&sid=1437
+http://www.arabmediawatch.com/modules.php?name=News&file=article&sid=910
+http://www.arabmediawatch.com/modules.php?name=News&file=print&sid=1437
+http://www.arabmediawatch.com/modules.php?name=News&file=print&sid=1442
+http://www.arabmediawatch.com/modules.php?name=News&file=print&sid=1861
+http://www.arabmedicare.com/SingaporeMedicine_News.htm
+http://www.arabnews.com/?page=9&section=0&article=53315&d=23&m=10&y=2004
+http://www.arabwideweb.com/english/Information_Technology_News.asp?id=221
+http://www.arabworldanalysis.com/blog/
+http://www.arachnoid.com/lutusp/consumerangst.html
+http://www.aracnet.com/~dcf/irnew/
+http://www.aracnet.com/~dcf/irnew/archives/2002_06.html
+http://www.aracnet.com/~pdxavets/broudy17.htm
+http://www.arap.org/docs/produce.html
+http://www.arapahoe.edu/aboutacc/diversity/studentdiversity.html
+http://www.arasite.org/nshertge.htm
+http://www.arasite.org/wldoubt.html
+http://www.arav.com.au/portal/page.pl?id=172
+http://www.arb.org.uk/education/validation-procedures/visiting-board-schedule.shtml
+http://www.arb.org.uk/regulation/pcc-decisions/schneider.shtml
+http://www.arbforum.com/domains/decisions/101518.htm
+http://www.arbforum.com/domains/decisions/104997.htm
+http://www.arbforum.com/domains/decisions/105890.htm
+http://www.arbforum.com/domains/decisions/95158.htm
+http://www.arbitrators.org/abta/Rules.htm
+http://www.arbo.org/greensheets/gsdec2000.htm
+http://www.arboretum.harvard.edu/aboutus/tf_minutes_march7_05.html
+http://www.arboristsite.com/archive/index.php/t-9501.html
+http://www.arboristsite.com/showthread.php?goto=lastpost&t=19725
+http://www.arbortext.com/html/heavy_equip.html
+http://www.arborwood.com/awforums/show-topic-1.php?start=1&fid=8072&taid=1&topid=252&ut=1108999751
+http://www.arc.gov/index.do?nodeId=1333
+http://www.arc.gov/index.do?nodeId=878
+http://www.arc.org.uk/about_arth/booklets/6001/6001.htm
+http://www.arc.org.uk/about_arth/booklets/6055/6055.htm
+http://www.arc.org/C_Lines/CLArchive/story1_2_01.html
+http://www.arcadiaproducts.com/definitions.htm
+http://www.arch.columbia.edu/gsap/47/
+http://www.arch.hku.hk/~marcaurel/phd/1stveds.html
+http://www.arch.hku.hk/~marcaurel/phd/implementingveds.html
+http://www.arch.usyd.edu.au/~adong/courses/deco3002/july03/
+http://www.arch.utah.edu/people/faculty/julio/studio96.htm
+http://www.archaemedia.net/st1.asp
+http://www.archaeological-services.co.uk/recenttexthtml.html
+http://www.archaeology.co.uk/others/thinktank/who/ch2.htm
+http://www.archaeology.org/interactive/sagalassos/field04/romanbaths5.html
+http://www.archaeology.org/online/features/crimea/dispatch2.html
+http://www.archaeologychannel.org/member.html
+http://www.archaeospain.com/faq.htm
+http://www.archbishopofcanterbury.org/sermons_speeches/050615.htm
+http://www.archbishopofcanterbury.org/sermons_speeches/2003/030227.html
+http://www.archbold-station.org/abs/Biennial99/R9Research/R9VertebrateRes.htm
+http://www.arches.uga.edu/~dfreems/dfreems2.htm
+http://www.archfoundation.org/education/1.htm
+http://www.archiebray.org/gallery.html
+http://www.archimac.org/Profession/Lists/index.spml
+http://www.archimuse.com/mw2001/papers/bennett/bennett.html
+http://www.archimuse.com/mw2004/papers/johnson/johnson.html
+http://www.archinect.com/forum/threads.php?id=20697_0_42_0_C
+http://www.archipelago.org/vol7-1/endnotes.htm
+http://www.archipelago.org/vol8-4/bell.htm
+http://www.architecture.yale.edu/admissions/intl_students.htm
+http://www.architecture.yale.edu/tropical_house/credits.htm
+http://www.architectureforhumanity.org/
+http://www.architexturez.net/+/
+http://www.archivaria.com/BusDbios/BusDbios14.html
+http://www.archive-india.org/arce_profile.html
+http://www.archive.official-documents.co.uk/document/caboff/foi/chap2.htm
+http://www.archive.official-documents.co.uk/document/cm38/3889/sct280.htm
+http://www.archive.official-documents.co.uk/document/cm39/3901/appndx-a.htm
+http://www.archive.official-documents.co.uk/document/cm39/3922/e-chap-3.htm
+http://www.archive.official-documents.co.uk/document/cm40/4010/tc-02.htm
+http://www.archive.official-documents.co.uk/document/cm40/4011/401113.htm
+http://www.archive.official-documents.co.uk/document/cm41/4177/chap-03.htm
+http://www.archive.official-documents.co.uk/document/cm42/4273/mod34.htm
+http://www.archive.official-documents.co.uk/document/doh/ih/part2g.htm
+http://www.archive.official-documents.co.uk/document/doh/sddyp/sddyp09.htm
+http://www.archive.official-documents.co.uk/document/doh/sddyp/sddyp14.htm
+http://www.archive.official-documents.co.uk/document/doh/tobacco/part-2.htm
+http://www.archive.official-documents.co.uk/document/hmt/budget98/annexc.htm
+http://www.archive.official-documents.co.uk/document/hmt/budget98/chap5.htm
+http://www.archive.official-documents.co.uk/document/ofsted/ciar/primary3.htm
+http://www.archive.org/audio/audiolisting-browse.php?cat=1345
+http://www.archive.org/audio/etree-band-showall.php
+http://www.archive.org/details-db.php?mediatype=movies&identifier=StoryofS1930&from=mainReviews
+http://www.archive2.official-documents.co.uk/document/cm56/5661/chap06.htm
+http://www.archives.gov/about_us/regulations/part_1258.html
+http://www.archives.gov/digital_classroom/lessons/federal_indian_policy/teaching_activities.html
+http://www.archives.gov/digital_classroom/lessons/volstead_act/teaching_activities.html
+http://www.archives.gov/exhibit_hall/charters_of_freedom/constitution/connecticut.html
+http://www.archives.gov/exhibit_hall/charters_of_freedom/constitution/virginia.html
+http://www.archives.gov/facilities/md/researcher_information.html
+http://www.archives.gov/federal_register/electoral_college/faq.html
+http://www.archives.gov/publications/prologue/fall_2003_building_renovation.html
+http://www.archives.gov/publications/prologue/winter_1986_civil_war_tax_records.html
+http://www.archives.gov/records_of_congress/house_guide/chapter_23_joint_atomic_energy.html
+http://www.archives.gov/research_room/alic/government_publications/about_frus_serial_set.html
+http://www.archives.gov/research_room/alic/staff_resources/organizational_change_bibliography/organizational_change.html
+http://www.archives.gov/research_room/federal_records_guide/na_collection_of_seized_foreign_rg242.html
+http://www.archives.gov/research_room/genealogy/census/census_clues_1850_to_1930.html
+http://www.archives.gov/research_room/research_topics/native_americans/select_list_026.html
+http://www.archives.mcgill.ca/resources/guide/vol1/rg44.htm
+http://www.archives.nd.edu/aidan/aidan537.htm
+http://www.archives.premier-ministre.gouv.fr/jospin_version3/en/ie4/contenu/32696.htm
+http://www.archiveshub.ac.uk/news/0407cf.html
+http://www.archivists.org/governance/handbook/nominating_com.asp
+http://www.archivists.org/saagroups/sthc/aelements2004.html
+http://www.archleague.org/nyc/newnewsummary.html
+http://www.archpundit.com/archives/010019.html
+http://www.archsfa.com/blog
+http://www.archsfa.com/store
+http://www.archsoc.com/kcas/Doctors.html
+http://www.archvoices.org/pg.cfm?nid=home&IssueID=272
+http://www.arcmv.org/?zone=&id=9&sid=
+http://www.arcouncil.org/Talking.html
+http://www.arcsandsparks.com/usedbookpage.html
+http://www.arctic-council.org/en/main/infopage/224/
+http://www.arctic-experience.co.uk/DTW/responsible.htm
+http://www.arctic-experience.co.uk/tour10w/
+http://www.arctic-experience.co.uk/tour17/
+http://www.arcticwildlife.org/alaskawild198.htm
+http://www.arcuk.org/pages/quotes.htm
+http://www.arcula.demon.co.uk/bhist1.htm
+http://www.arcw.org/hippa.htm
+http://www.arcytech.org/java/population/facts_foodchain.html
+http://www.ardisbooks.com/pub_details.asp?ISBN=0-87501-108-X
+http://www.ardnamurchan.com/association/news.html
+http://www.ardue.org.uk/university/degs/deg06.html
+http://www.areastudies.org/documents/dprk003.html
+http://www.arenaleisureplc.com/components/78.cres
+http://www.arescuemom.org/MONTANALIFE2-99.htm
+http://www.aresearchguide.com/800literature.html
+http://www.aresearchguide.com/lord.html
+http://www.aresearchguide.com/time.html
+http://www.aresti-realestate.com/default.aspx?articleID=7613&heading=Customer%20Services
+http://www.areyouprepared.com/nuclear-survival/s20.htm
+http://www.arfli.com/modules.php?name=Sections&op=printpage&artid=2
+http://www.arfli.com/modules.php?name=Sections&op=viewarticle&artid=2
+http://www.arfunk.com/rw-article.html
+http://www.argentinethoroughbreds.com/links.htm
+http://www.argo-navis.com/
+http://www.argos-sports.co.uk/
+http://www.arguscourier.com/news/news/marinegrad050601.html
+http://www.arguscourier.com/school/news/edissuesricher050223.html
+http://www.argusdesigns.com/lib/libhs.php4
+http://www.argusleaderonline.com/forum/showthread.php?t=1061&goto=lastpost
+http://www.argyll-bute.gov.uk/content/news/general/rothesay?s=135&a=0
+http://www.ariadne.ac.uk/issue15/main/
+http://www.ariadne.ac.uk/issue24/oed-tech/
+http://www.ariadne.ac.uk/issue36/maccoll-rpt/
+http://www.ariadne.ac.uk/issue39/web-focus/
+http://www.ariadne.ac.uk/issue42/ananiadou/
+http://www.ariadne.ac.uk/issue43/search-engines/
+http://www.ariadne.org/studio/michelli/12601intro.html
+http://www.ariadne.org/studio/michelli/sgnewdir.html
+http://www.ariagoesdown.blogspot.com/
+http://www.ariannaonline.com/columns/column.php?id=120
+http://www.ariannaonline.com/columns/column.php?id=659
+http://www.ariannaonline.com/columns/column.php?id=93
+http://www.ariannaonline.com/columns/printer_friendly.php?id=120
+http://www.ariannaonline.com/columns/printer_friendly.php?id=659
+http://www.arie.org/japan/
+http://www.arielpartners.com/arielpartners/content/public/topics/technology/technologyReviews/zopeVsCocoon
+http://www.ariga.com/2004-03-01.shtml
+http://www.arij.org/paleye/
+http://www.arin.net/meetings/minutes/ARIN_III/
+http://www.arin.net/policy/2004_4.html
+http://www.arishost.com/newsletter/archive/v3/v39_i1.shtml
+http://www.arishost.com/newsletter/archive/v4/v43_i3.shtml
+http://www.aristeia.com/authorAdvice.html
+http://www.aristotle.net/~bhuie/satan.htm
+http://www.arizona-bed-breakfast.com/print.html?id=about-standards&ttl=AABBI%20Standards%20and%20By%20Laws
+http://www.arizona-bed-breakfast.com/standards-and-bylaws.html
+http://www.arizona-dui-defense.com/Arizona-DUI-Winning.htm
+http://www.arizonaroadracers.com/acrosstheyearsinside.htm
+http://www.ark-nursing-students.com/campaign_regulations.htm
+http://www.arkansas-ican.org/Used_Equip.htm
+http://www.arkansas.com/interactive-fun/wallpaper/default.asp
+http://www.arkansasleader.com/frontstories/st_09_22_04/methhouse.html
+http://www.arkansasleader.com/frontstories/st_12_29_04/change.html
+http://www.arkansasnursing.com/lpn_links.htm
+http://www.arkansaspreservation.org/history/civilwar.asp
+http://www.arkansasties.com/Special/BoydDiary/1913.htm
+http://www.arks.co.uk/
+http://www.arl.army.mil/ARL-Directorates/HRED/imb/imprint/Imprint7.htm
+http://www.arl.noaa.gov/faq/
+http://www.arl.noaa.gov/ss/group3.html
+http://www.arl.org/arl/proceedings/129/earlybird.html
+http://www.arl.org/arl/proceedings/130/garcia.html
+http://www.arl.org/arl/proceedings/132/programIII/fuller.html
+http://www.arl.org/info/frn/copy/intl/wipoprinciples.html
+http://www.arl.org/info/frn/copy/primer.html
+http://www.arl.org/newsltr/187/peace.html
+http://www.arl.org/newsltr/222/collabwash.html
+http://www.arl.org/newsltr/234/investing.html
+http://www.arl.org/scomm/subversive/sub04.html
+http://www.arl.org/spec/211fly.html
+http://www.arlesforum.com/index.php?showtopic=1289
+http://www.arlgp.org/Education/CAT%20TO%20PEOPLE.htm
+http://www.arlington.co.uk/default.asp?page=532&id=G130105
+http://www.arlingtoncemetery.com/womens.htm
+http://www.arlingtoncemetery.net/clbolte.htm
+http://www.arlingtoncemetery.net/jfadamouski.htm
+http://www.arlingtoncemetery.net/malane.htm
+http://www.arlingtoncemetery.net/michaels.htm
+http://www.arlingtoninn.com/civilunionguidelines.html
+http://www.arlis-txmx.org/medium/issues/2003_v29_no1/2003_v29_no1.shtml
+http://www.arlisna.org/news/conferences/1999/proceedings/irc.htm
+http://www.arlisna.org/news/conferences/2000/proceedings/irc.html
+http://www.arm.com/employment/
+http://www.arm.com/ir/financialnews/3863.html
+http://www.arm.com/ir/financialnews/477.html
+http://www.arm.com/ir/financialnews/480.html
+http://www.arm.com/ir/financialnews/525.html
+http://www.arm.com/ir/financialnews/531.html
+http://www.arm.com/ir/financialnews/564.html
+http://www.arm.com/ir/financialnews/573.html
+http://www.arm.com/ir/financialnews/578.html
+http://www.arm.com/news/2212.html
+http://www.armadillosoft.com/booksetc/gifted.php
+http://www.armca.net/Decemberr2002.htm
+http://www.armedforces.co.uk/army/listings/l0069.html
+http://www.armedforces.co.uk/projects/raq3f3a4e479735d
+http://www.armedforcesnews.com/backissues/index2002.htm
+http://www.armedia.net.au/archive/1997b/rev02.html
+http://www.armenian-genocide.org/br-11-27-16-text.html
+http://www.armfor.uscourts.gov/opinions/1999Term/98-0775.htm
+http://www.armfor.uscourts.gov/opinions/2005Term/04-0208.htm
+http://www.arminfo.am/news-issue431.htm
+http://www.armishaws.com/theform.html
+http://www.armory.com/~spcecdt/text/supercool.html
+http://www.armscontrol.org/act/1997_03/summit.asp
+http://www.armscontrol.org/act/1997_10/chinaoct.asp
+http://www.armscontrol.org/act/1999_06/scijun99.asp
+http://www.armscontrol.org/act/1999_07-08/taija99.asp
+http://www.armscontrol.org/act/1999_09-10/ctbso99.asp
+http://www.armscontrol.org/act/2000_03/remr00.asp
+http://www.armscontrol.org/act/2000_11/pressconnk.asp
+http://www.armscontrol.org/act/2000_12/briefsdec00.asp
+http://www.armscontrol.org/act/2001_04/press.asp
+http://www.armscontrol.org/act/2001_05/steinbrunner.asp
+http://www.armscontrol.org/act/2001_06/nefjun01.asp
+http://www.armscontrol.org/act/2001_07-08/rosenbergjul_aug01.asp
+http://www.armscontrol.org/act/2001_07-08/rosenbergjul_aug01.asp?print
+http://www.armscontrol.org/act/2002_04/colwolfapril02.asp
+http://www.armscontrol.org/act/2002_05/briefsmay02.asp
+http://www.armscontrol.org/act/2002_10/secstrategyoct02.asp
+http://www.armscontrol.org/act/2003_05/gillthompson_may03.asp
+http://www.armscontrol.org/act/2003_12/Bunn.asp
+http://www.armscontrol.org/act/2004_06/NewsAnalysis.asp?print
+http://www.armscontrol.org/act/2004_07-08/acprint.asp
+http://www.armscontrol.org/act/2004_07-08/acprint.asp?print
+http://www.armscontrol.org/act/2005_03/ElBaradei.asp
+http://www.armscontrol.org/act/2005_05/NK_Talks.asp
+http://www.armscontrol.org/act/2005_05/NK_Talks.asp?print
+http://www.armscontrol.org/act/2005_06/LB_Holum.asp
+http://www.armscontrol.org/act/2005_06/LB_Holum.asp?print
+http://www.armscontrol.org/country/northkorea/North%20Korea%20Nuclear%20Nonproliferation%20Treaty%20Status.asp
+http://www.armscontrol.org/documents/salt2.asp
+http://www.armscontrol.org/events/May_2004PressConference.asp
+http://www.armscontrol.org/events/May_2004PressConference.asp?print
+http://www.armscontrol.org/events/blixinterview_june03.asp
+http://www.armscontrol.org/events/iraq_july03.asp
+http://www.armscontrol.org/factsheets/agreedframework.asp
+http://www.armscontrol.org/factsheets/ctbtissue.asp
+http://www.armscontrol.org/factsheets/newnuclearweaponsissuebrief.asp
+http://www.armscontrol.org/pressroom/2003/Pritchardinterview.asp
+http://www.armscontrol.org/pressroom/2003/Pritchardinterview.asp?print
+http://www.armscontrol.org/subject/ctbt/Daryl'sRemarks_Bunn_04.asp
+http://www.armscontrolcenter.org/about/employment.html
+http://www.armscontrolcenter.org/archives/000402.php
+http://www.armscontrolwonk.com/
+http://www.armstrong.com/resbrucewoodna/article7829.asp
+http://www.army-of-brides.com/
+http://www.army-technology.com/projects/arrow2/
+http://www.army.dnd.ca/Land_Force_Central_Area/32_Canadian_Brigade_Group/Queens_Own_Rifles_of_Canada/bosnia98_e.html
+http://www.army.forces.gc.ca/lf/English/5_5.asp
+http://www.army.forces.gc.ca/lf/English/6_1_1.asp?id=556
+http://www.army.mil/
+http://www.army.mil/CMH-PG/BOOKS/70-7_05.htm
+http://www.army.mil/aps/00/aps00.htm
+http://www.army.mil/aps/04/core.html
+http://www.army.mil/cmh-pg/books/DAHSUM/1988/ch03.htm
+http://www.army.mil/cmh-pg/books/Vietnam/northern/nprovinces-ch2.htm
+http://www.army.mil/cmh-pg/books/pd-c-01.htm
+http://www.army.mil/cmh-pg/books/wwii/Wac/ch09.htm
+http://www.army.mil/cmh-pg/brochures/ike/ike.htm
+http://www.army.mil/cmh-pg/mohiia1.htm
+http://www.army.mil/cmh-pg/mohkor1.htm
+http://www.army.mil/features/beret/beret.htm
+http://www.army.mil/prof_writing/volumes/volume1/august_2003/8_03_5.html
+http://www.army.mil/prof_writing/volumes/volume1/august_2003/8_03_6.html
+http://www.army.mil/prof_writing/volumes/volume1/august_2003/8_03_8.html
+http://www.army.mil/prof_writing/volumes/volume1/august_2003/8_03_8_pf.html
+http://www.army.mil/professionalwriting/volumes/volume1/august_2003/8_03_1.html
+http://www.army.mil/professionalwriting/volumes/volume1/august_2003/8_03_3.html
+http://www.army.mil/professionalwriting/volumes/volume1/june_2003/6_03_1.html
+http://www.army.mil/professionalwriting/volumes/volume1/june_2003/6_03_1_pf.html
+http://www.army.mil/professionalwriting/volumes/volume1/september_2003/9_03_2.html
+http://www.army.mil/professionalwriting/volumes/volume1/september_2003/9_03_2_pf.html
+http://www.army.mil/professionalwriting/volumes/volume2/december_2004/12_04_4.html
+http://www.army.mil/professionalwriting/volumes/volume2/december_2004/12_04_4_pf.html
+http://www.army.mil/professionalwriting/volumes/volume2/february_2004/2_04_2.html
+http://www.army.mil/professionalwriting/volumes/volume2/february_2004/2_04_2_pf.html
+http://www.army.mil/professionalwriting/volumes/volume2/february_2004/2_04_4.html
+http://www.army.mil/professionalwriting/volumes/volume2/february_2004/2_04_4_pf.html
+http://www.army.mil/professionalwriting/volumes/volume2/june_2004/6_04_1.html
+http://www.army.mil/professionalwriting/volumes/volume2/june_2004/6_04_1_pf.html
+http://www.army.mil/professionalwriting/volumes/volume2/march_2004/3_04_4.html
+http://www.army.mil/professionalwriting/volumes/volume3/april_2005/4_05_3.html
+http://www.army.mil/professionalwriting/volumes/volume3/january_2005/1_05_1.html
+http://www.army.mod.uk/blackwatch/joining.htm
+http://www.army.mod.uk/brunei/shop.htm
+http://www.army.mod.uk/greenhowards/archive_news/news_quarter_1_2004.htm
+http://www.army.mod.uk/medical/royal_army_veterinary_corps/ravc_history/
+http://www.army.mod.uk/para/3bn.htm
+http://www.army.mod.uk/royalengineers/org/mwfv/
+http://www.army.mod.uk/tigers/current.htm
+http://www.armyg1.army.mil/RSO/CurrentNews.asp
+http://www.armyg1.army.mil/WellBeing/RRLeave/index.HTM
+http://www.armyofgod.com/AOGsel3.html
+http://www.armyofgod.com/PHillMessageBoard.html
+http://www.armyradio.co.uk/publish/Articles/William_Howard/Introduction.htm
+http://www.armytimes.com/static.php?f=view.php
+http://www.arobooks.org/WTBOVchapter.html
+http://www.aromadictionary.com/articles/winetasting_article.html
+http://www.aromanotes.com/biz.html
+http://www.aromanotes.com/thewholeyoustore/biz.html
+http://www.aroundphilly.com/article.php?a_id=508
+http://www.arpegemusic.com/manual/EN580.htm
+http://www.arrivealive.co.za/pages.asp?mc=history&nc=confiscation
+http://www.arrivebylimo.com/ratesand.htm
+http://www.arrl.org/FandES/field/pscm/sec1-ch4.html
+http://www.arrod.co.uk/essays/matrix.php
+http://www.arrowgear.com/stockgears/stockgears_designcon4.htm
+http://www.arrt.org/web/egcontent.jsp?include=/eduguide/military.htm
+http://www.ars-logo-design.com/ar_semiotics_corporate_logo_design.htm
+http://www.ars.usda.gov/Research/Research.htm?docid=3337&modecode=36-11-30-00&page=3
+http://www.arseastus.com/Programs/ARSProgramsBottom.htm
+http://www.arsenicfilters.com/glass.htm
+http://www.arseweb.com/ufn/
+http://www.art-care.com/
+http://www.art-in-miniature.org/lecture.htm
+http://www.art-is-life.com/experimental.htm
+http://www.art-teez.org/mac_inq.htm
+http://www.art.co.za/willemboshoff/sand/sand01.htm
+http://www.art.com/asp/display-asp/_/id--10571/Firm.htm
+http://www.art.man.ac.uk/Lacs/news/index.shtml
+http://www.art.man.ac.uk/english/prereg/descriptions/am1031.htm
+http://www.art.net/studios/visual/lile/house/
+http://www.art2admire.com/
+http://www.artandantiques.net/Links.htm
+http://www.artandvision.com/webpages/fiction/puttingapriceonthepriceles.html
+http://www.artba.org/about_artba/history/overview.htm
+http://www.artbusiness.com/arttarget.html
+http://www.artbusiness.com/sellmyart.html
+http://www.artbusinessnews.com/aabn/june05/dept_profile.cfm
+http://www.artbusinessnews.com/aabn/june05/features1.cfm
+http://www.artcataloging.net/ala/mw04/summary.html
+http://www.artchive.com/artchive/R/rivera.html
+http://www.artcyclopedia.com/feature-2001-11.html
+http://www.artdaily.com/section/lastweek/index.asp?int_sec=2&int_new=13914&int_modo=2
+http://www.artemis.bm/html/glossary/
+http://www.artemismanagement.com/Pages/WorkLifeSub/WorkbookEnglish.html
+http://www.artes.uu.se/mobility/reports/euromicro9906_ebbe.shtml
+http://www.artfact.com/features/artistLot.cfm?iid=O27CV6J7
+http://www.artforum.com/diary/
+http://www.artfullodger.co.uk/content.php?categoryId=867
+http://www.artgallery.com.ua/search.php?p=night_landscape&lng=eng
+http://www.artgallery.com.ua/still_life_paintings_for_sale.php
+http://www.arthritis-cats-dogs.com/resources.php
+http://www.arthritis.ca/types%20of%20arthritis/pagets/default.asp?s=1
+http://www.arthritis.ca/types%20of%20arthritis/pagets/printer%20friendly/default.asp?s=1
+http://www.arthritis.ca/types%20of%20arthritis/pagets/quick%20facts/default.asp?s=1
+http://www.arthritis.ca/types%20of%20arthritis/raynauds%20phenomenon/default.asp?s=1
+http://www.arthritis.org/Communities/Chapters/Chapter.asp?chapid=61
+http://www.arthritis.org/resources/arthritistoday/1999_archives/1999_01_02exercise.asp
+http://www.arthritis.org/resources/arthritistoday/2004_archives/2004_07_08/2004_07_08_Focus_3.asp
+http://www.arthur-ransome.org/ar/literary/pyrates.htm
+http://www.arthurmag.com/magpie/?p=490
+http://www.artic.edu/webspaces/siskelfilmcenter/2004/feb/lin.htm
+http://www.article19.org/ViewArticle.asp?AreaID=42&SubAreaID=137&PageID=302&ElementID=299&ArticleID=1129&Comment=
+http://www.article19.org/ViewArticle.asp?AreaID=42&SubAreaID=137&PageID=302&ElementID=299&ArticleID=1159&Comment=
+http://www.article19.org/ViewArticle.asp?AreaID=42&SubAreaID=137&PageID=302&ElementID=299&ArticleID=1427&Comment=
+http://www.article19.org/ViewArticle.asp?AreaID=42&SubAreaID=137&PageID=302&ElementID=299&ArticleID=971&Comment=
+http://www.article19.org/docimages/307.htm
+http://www.article19.org/docimages/714.htm
+http://www.articlecity.com/articles/computers_and_internet/article_909.shtml
+http://www.articlecity.com/articles/family/article_690.shtml
+http://www.articlecity.com/articles/women/article_395.shtml
+http://www.articlesforeducators.com/math/000008.asp
+http://www.artificiallove.com/blog/
+http://www.artificialreefs.org/Articles/Discovery%20Magazine.htm
+http://www.artima.com/intv/dry.html
+http://www.artima.com/weblogs/viewpost.jsp?thread=86641
+http://www.artimis.org/stadium.php
+http://www.artinternationalwholesale.com/artresources/artinternationalwholesale_resources14.html
+http://www.artinthemountains.com/richardmckinley.htm
+http://www.artistcareertraining.com/aapacks.asp
+http://www.artistdirect.com/nad/music/artist/bio/0,,688808,00.html
+http://www.artistdirect.com/nad/store/artist/album/0,,2934006,00.html
+http://www.artistinresidence.org/
+http://www.artists-press.net/kim-berman/kim-berman.htm
+http://www.artists.ca/resources/rgenn-0410.html
+http://www.artistscornerstainedglass.com/classes.php
+http://www.artistsmagazine.com/tam_clinic.asp
+http://www.artistsnetwork.org/news5/news213.html
+http://www.artjewelrymag.com/art/community/forum/topic.asp?TOPIC_ID=6748
+http://www.artjewelrymag.com/art/community/forum/topic.asp?page=-1&TOPIC_ID=6748&REPLY_ID=71037
+http://www.artjewelrymag.com/art/community/forum/topic.asp?page=7&TOPIC_ID=1224
+http://www.artknowledgenews.com/
+http://www.artknowledgenews.com/?q=node&from=36
+http://www.artlex.com/ArtLex/Ch.html
+http://www.artlex.com/ArtLex/FAQ/MRD&history.html
+http://www.artlex.com/ArtLex/d/drawing.html
+http://www.artmargins.com/content/feature/efimova1.html
+http://www.artmargins.com/content/feature/sokolina3.html
+http://www.artmarshall.org/news/news24.htm
+http://www.artmissoula.org/Collection/2004%20Acq.htm
+http://www.artnet.com/Magazine/features/jsaltz/saltz9-28-04.asp
+http://www.artnet.com/Magazine/index/polsky/polsky5-23-03.asp
+http://www.artnet.com/Magazine/news/artnetnews2/artnetnews1-18-05.asp
+http://www.artnet.com/Magazine/news/artnetnews2/artnetnews5-19-05.asp
+http://www.artnet.com/Magazine/news/waltzer/waltzer5-6-04.asp
+http://www.artnet.com/Magazine/reviews/henry/henry2-28-01.asp
+http://www.artnewsonline.com/pastarticle.cfm?art_id=842
+http://www.artofabundance.com/freetithingbook.htm
+http://www.artofbreastfeeding.com/cgi-bin/store/AoB2.cgi?ORDER_ID=405786582922&CPAGE=nutrtn.html
+http://www.artofloving.com/family/30lovemeantobe.htm
+http://www.artofproblemsolving.com/Community/AoPS_Y_MJ_Transcripts.php?mj_id=55
+http://www.artofproblemsolving.com/LaTeX/AoPS_L_GuideLay.php
+http://www.artofthegreyhound.com/inthestudio.html
+http://www.artoftheprint.com/mainpages/gallery_n.htm
+http://www.artonline4u.com/help.html
+http://www.artpapa.com/forum/DCForumID14/6.html
+http://www.artpromote.com/copyrighthelp.shtml
+http://www.artquest.org.uk/artlaw/studios/spacerace1.htm
+http://www.artquest.org.uk/exhibit/mememe/before_you_start.htm
+http://www.artquest.org.uk/opportunities/talks.htm
+http://www.artrenewal.org/
+http://www.artrenewal.org/articles/columns/show.asp?eid=28
+http://www.artrumour.com/Newsletter/newsletter31.htm
+http://www.arts-accredit.org/
+http://www.arts-accredit.org/intro.jsp
+http://www.arts.ac.uk/6652.htm
+http://www.arts.ac.uk/international/9151.htm
+http://www.arts.ac.uk/research/filmcentre/maziere/paper.html
+http://www.arts.ac.uk/student/careers/1868.htm
+http://www.arts.auckland.ac.nz/online/sociol331/lec0304.html
+http://www.arts.cornell.edu/dendro/
+http://www.arts.cornell.edu/romance/italian/it_grad.html
+http://www.arts.gla.ac.uk/SESLL/EngLang/staff.htm
+http://www.arts.gla.ac.uk/SESLL/ScotLit/bibliography/resources.html
+http://www.arts.ouc.bc.ca/fiar/basic.html
+http://www.arts.ouc.bc.ca/fina/glossary/f_list.html
+http://www.arts.ri.gov/education/connec9.htm
+http://www.arts.ualberta.ca/~dmiall/RomCD/Clarkson.htm
+http://www.arts.ubc.ca/Standing_Committees.345.0.html
+http://www.arts.unimelb.edu.au/currentstudents/programs/ug_1styrfaqs.html
+http://www.arts.uwa.edu.au/MotsPluriels/MP1400akan.html
+http://www.arts.uwa.edu.au/MotsPluriels/MP1600gk.html
+http://www.arts.uwaterloo.ca/FINE/juhde/baird962.htm
+http://www.arts.yorku.ca/soci/video/videos/hear.html
+http://www.arts.yorku.ca/sosc/labour/degree/
+http://www.arts.yorku.ca/sosc/labour/degree/option_courses.html
+http://www.arts.yorku.ca/wmst/wsBridgingProgram.html
+http://www.artsadmin.co.uk/artistsadvisor/labsandworkshopstext.html
+http://www.artsalumni.net/awardee04/Writing/
+http://www.artsandscience.utoronto.ca/current/petitions/process.shtml
+http://www.artsandscience.utoronto.ca/ofr/calendar/prg_fys.htm
+http://www.artsandscience.utoronto.ca/ofr/timetable/winter/payotherfees.html
+http://www.artschoolreview.com/fashion/
+http://www.artschoolreview.com/interior_des/
+http://www.artschools.com/interviews/beth-lipman/
+http://www.artsci.lsu.edu/phil/phil1/cogburn/currentcourses/4914/2milleronmill.htm
+http://www.artsci.washington.edu/newsletter/Autumn01/Second%20Career-Simons%20section.htm
+http://www.artsci.wustl.edu/~djkaiser/175/
+http://www.artsci.wustl.edu/~english/courses/undergrad_fall03.htm
+http://www.artsci.wustl.edu/~esl/assessment.html
+http://www.artsci.wustl.edu/~faculty/teaching/dossier_instructions.html
+http://www.artsci.wustl.edu/~fms/about.html
+http://www.artsci.wustl.edu/~music/programs/undergrad/undergrad.description.html
+http://www.artscroll.com/Chapters/voih-009.html
+http://www.artsdata.net/common/META_AudAttenders.htm
+http://www.artservices2000.com/
+http://www.artshapes.net/Celtic-Symbols/Celtic-Art-Designs/dublin.html
+http://www.artshole.co.uk/01directory.htm
+http://www.artsjournal.com/
+http://www.artsjournal.com/aboutlastnight/archives20050313.shtml
+http://www.artsjournal.com/artfulmanager/
+http://www.artsjournal.com/artfulmanager/archives/April_2004.php
+http://www.artsjournal.com/artfulmanager/archives/March_2005.php
+http://www.artsjournal.com/ideas/20040701archive.shtml
+http://www.artsjournal.com/man/archives20050101.shtml
+http://www.artsjournal.com/muse/reverse.php
+http://www.artsjournal.com/muse/sandowcase.html
+http://www.artsjournal.com/pixelpoints/
+http://www.artsjournal.com/theatre/
+http://www.artsjournal.com/yesterdays/20041119-15960.shtml
+http://www.artsjournal.com/yesterdays/20050302-17386.shtml
+http://www.artslaw.com.au/ArtLaw/Archive/00LicensingCartoonCharacters.asp
+http://www.artslaw.com.au/reference/publicliability02/
+http://www.artslynx.org/theatre/design.htm
+http://www.artspace2000.com/
+http://www.artspace2000.com/artspace_II/Directories/art_consultants.htm
+http://www.artsreformation.com/a001/ih-music-rules.html
+http://www.artsudbury.org/past.asp?155id117-pn=&view=2289
+http://www.artsudbury.org/past.asp?155id117-pn=0&view=2289
+http://www.artswales.org/pressoffice/printable.asp?newsid=231
+http://www.artsystems.com/software/faqs.html
+http://www.artthrob.co.za/
+http://www.artthrob.co.za/03sept/reviews/jag.html
+http://www.arttrail.org/June.html
+http://www.artukraine.com/famineart/conquest_lect.htm
+http://www.artukraine.com/famineart/duranty61.htm
+http://www.artuproar.com/?page=moreinfo&num=37071
+http://www.artweek.com/previews.shtml
+http://www.artwithheart.org/960.html
+http://www.arugam.info/
+http://www.arvintd.com/faqs.asp
+http://www.arxan.com/about/business.php
+http://www.aryabhatt.com/
+http://www.aryabhatt.com/articles/Palmistry%20and%20Marriage%20Compltibility.htm
+http://www.aryabhatt.com/fast_fair_festival/Fairs/Kaila_Devi_Fair.htm
+http://www.as-seen-on-tv-discounts.com/avacor_hair_care_system.asp
+http://www.as.wvu.edu/coll03/phys/www/ferer.htm
+http://www.as.wvu.edu/~equity/equity.html
+http://www.as.wvu.edu/~scidis/motor.html
+http://www.as220.org/news/calendar.html
+http://www.asa.org.uk/asa/news/news/2005/Being+an+ASA+Council+Member.htm
+http://www.asa3.org/ASA/PSCF/1988/PSCF9-88Wiester.html
+http://www.asa3.org/ASA/PSCF/1998/PSCF12-98Mills.html
+http://www.asa3.org/ASA/resources/Wiens.html
+http://www.asa3.org/ASA/topics/Philosophy/PSCF6-99Touyran.html
+http://www.asa3.org/ASA/topics/PsychologyNeuroscience/PSCF3-92Thorson.html
+http://www.asa3.org/archive/evolution/199903/0348.html
+http://www.asac.ab.ca/BI_fall01/malcolm.html
+http://www.asahi.com/english/Herald-asahi/TKY200506030126.html
+http://www.asahi.com/english/Herald-asahi/TKY200507010156.html
+http://www.asahp.org/history.htm
+http://www.asahq.org/Newsletters/1997/06_97/Trends_Litigation.html
+http://www.asahq.org/Newsletters/1997/08_97/Outcomes_0897.html
+http://www.asahq.org/publicationsAndServices/chronic_pain.html
+http://www.asaiojournal.com/pt/re/asaio/fulltext.00002480-200007000-00015.htm
+http://www.asamanthinketh.net/bornrich-excerpt.htm
+http://www.asamanthinketh.net/mentor/naamtsap.htm
+http://www.asanet.org/footnotes/septoct02/indexthree.html
+http://www.asanet.org/governance/glbtrpt.html
+http://www.asante.com/
+http://www.asaoakland.org/upcomingevents.htm
+http://www.asashop.org/autoinc/april2001/safetyinspect.cfm
+http://www.asashop.org/autoinc/july2004/techtips.cfm
+http://www.asatonline.org/resources/library/speech-language_therapy.html
+http://www.asbahr.com/paper1html/paper1.html
+http://www.asbbank.co.nz/section307.asp
+http://www.asbj.com/current/research.html
+http://www.asbj.com/lbd/2003/designing.html
+http://www.asbj.com/lbd/2004/inprint/shorr.html
+http://www.asbj.com/schoolspending/carey.html
+http://www.asbj.com/schoolspending/rothstein.html
+http://www.asbmb.org/ASBMB/site.nsf/0/D8A96A1DCC007A1385256C7C00535A7C?OpenDocument
+http://www.asc-cybernetics.org/foundations/history2.htm
+http://www.asc.upenn.edu/usr/chunter/info_society/caught_in_the_web/caught_in_the_web_paper.html
+http://www.ascb.org/news/vol20no11/briefing.html
+http://www.ascd.org/ed_topics/el200110_singh.html
+http://www.asce.org/kids/handson.cfm
+http://www.ascendpress.org/articles/creepy-crawlers/Octopus.htm
+http://www.ascensionbalhamhill.org.uk/Resources/Growth%20Group%20Sunday%202004-NG.html
+http://www.ascensionbalhamhill.org.uk/Resources/sermons/Jesus%20heals%20the%20gentile%20woman.htm
+http://www.asciiartfarts.com/20001213.html
+http://www.asciimation.co.nz/ascii_faq.html
+http://www.asciipr0n.com/condolences/index.php?old=78
+http://www.ascilite.org.au/conferences/adelaide96/papers/07.html
+http://www.asconi.com/investors.html
+http://www.ascp.com/MedicareRx/
+http://www.ascp.com/public/news/2004/11/18/brickley/
+http://www.ascribe.org/ClipPages/clipping10.html
+http://www.ascribe.org/cgi-bin/behold.pl?ascribeid=20050610.071606&time=08%2012%20PDT&year=2005&public=1
+http://www.ascsa.edu.gr/publications/p_books.htm
+http://www.ascusc.org/jcmc/vol2/issue3/gordin.html
+http://www.ascusc.org/jcmc/vol2/issue3/perrone.html
+http://www.asdafilm.org.au/information.html
+http://www.asdafinance.com/home-insurance-what-youre-covered-for.html
+http://www.asdafinance.com/travel-insurance-what-youre-covered-for.html
+http://www.asdd.sa.gov.au/asdd/ANZSA1022000021.html
+http://www.asdk12.org/recognition/archives/may.asp
+http://www.ase.org/content/article/detail/1860
+http://www.ase.org/content/article/detail/2075
+http://www.ase.org/content/news/detail/1828
+http://www.aseam.com.my/news/articles/sc1.htm
+http://www.aseansec.org/6578.htm
+http://www.aseg.org.au/business_plan.htm
+http://www.asent.org/newsletter/2004/july/
+http://www.asgla.com/links/newsfaq/considerations.html
+http://www.asgp.info/rulesandworking.htm
+http://www.asgt.org/am05/program/info.shtml
+http://www.asgt.org/regulatory_issues/fda_response_proposed_rule.html
+http://www.ash-tree.bc.ca/acdsfairies.htm
+http://www.ash.org.uk/html/factsheets/html/fact08.html
+http://www.asha.org/
+http://www.asha.org/about/leadership-projects/national-office/exec-updates/082004.htm
+http://www.asha.org/public/speech/disorders/Communication+Decisions.htm
+http://www.asha.org/public/speech/disorders/Voice-problems.htm
+http://www.asha.org/public/speech/disorders/aac-growing-up-with-aac.htm
+http://www.asha.org/public/speech/disorders/als-voice-lessons-speaking-with-als.htm
+http://www.ashanet.org/Dbase/inv-new-over.html
+http://www.ashanet.org/projects-new/documents/Nutanhat-SiteVisit-Feb01
+http://www.ashanet.org/projects-new/documents/umbvs-raj-visit
+http://www.ashanet.org/projects/document-view.php?id=1283
+http://www.ashanet.org/projects/document-view.php?id=1743
+http://www.ashanet.org/projects/tamilnadu/irulas/SiteVisitReport2000Govind.html
+http://www.asharewarelife.com/2004_04_18_archive.html
+http://www.asharewarelife.com/2004_07_01_archive.html
+http://www.ashbourne-town.com/history/labour.htm
+http://www.ashbourne-town.com/history/life.htm
+http://www.ashcraftandgerel.com/Welcome.html
+http://www.ashdenawards.org/finalist04.html
+http://www.ashelf.com/ashelf/wordlists/e/eec/www/=A.html
+http://www.ashelf.com/ashelf/wordlists/e/eec/www/=B.html
+http://www.ashelf.com/ashelf/wordlists/e/eec/www/=C.html
+http://www.ashelf.com/ashelf/wordlists/e/eec/www/=P.html
+http://www.ashlandschoolsfoundation.org/Page.asp?NavID=41
+http://www.ashleyfurniture.com/WebMisc/Legal.asp?SFID=
+http://www.ashoka.org/fellows/viewprofile3.cfm?reid=99573
+http://www.ashp.org/rtp/MCPhP-stnd.cfm
+http://www.ashrae.org/template/AssetDetail/assetid/24701
+http://www.ashrae.org/template/PDFDetail/assetid/31590
+http://www.ashridge.org.uk/web/leadconf2002.nsf/pages/openSpace
+http://www.ashridge.org.uk/www/OpenProgrammes.nsf/web/msa+Making+Successful+Acquisitions+Timetable
+http://www.ashtabula.kent.edu/Academics/math_dept/najafi.cfm
+http://www.ashton-dennis.org/polar_bear.html
+http://www.ashton-dennis.org/post799a.html
+http://www.asi-mag.com/air_watch/feb-mar2003.htm
+http://www.asia-art.net/coffee_painting.html
+http://www.asia.manufacturers.globalsources.com/gsol/I/Womens-pullover/a/9000000055070.htm
+http://www.asiahotels.com/hotelinfo/Ambassador_Hotel_Taipei_The/
+http://www.asiahotels.com/hotelinfo/Goldiana_Hotel/
+http://www.asiahotels.com/hotelinfo/Jiva_Resort_and_Spa/
+http://www.asiahotels.com/hotelinfo/Lorenzo_Resort_Main/
+http://www.asialink.unimelb.edu.au/arts/residencies/varesappinfo.htm
+http://www.asianart.com/exhibitions/korea/intro.html
+http://www.asianartnow.com/articles/withoutborders.html
+http://www.asianclassics.org/mission/stpeteformat.html
+http://www.asiandb.com/browse/movie_detail.pfm?code=5514&mode=review&num=1356
+http://www.asianfilms.org/korea/kky/KKY/Stairway/KJStext.htm
+http://www.asiangateway.net/advice.htm
+http://www.asianjobsite.co.uk/showvacancy.php/JobID=1039
+http://www.asianlabour.org/archives/000455.php
+http://www.asianlabour.org/archives/000627.php
+http://www.asianlabour.org/archives/001499.php
+http://www.asianlabour.org/archives/cat_burma.php?page=3
+http://www.asianlabour.org/archives/cat_thailand.php?page=7
+http://www.asianlegalonline.com/asia/detail_article.cfm?articleID=1461
+http://www.asianlegalonline.com/usa/detail_article.cfm?articleID=1461
+http://www.asianmanrecords.com/newsletter.php?id=24
+http://www.asianpacificpost.com/news/article/93.html
+http://www.asiansinmedia.org/industry/article.php/profiles/59/
+http://www.asiantribune.com/show_news.php?id=9030
+http://www.asiasource.org/views/av_mp_09_country.cfm?countryid=62
+http://www.asiaspirit.com/lavatory.htm
+http://www.asiatraveltips.com/ShoppinginBangkok.shtml
+http://www.asic-cafe.org/htm/eng/colloquium.htm
+http://www.asid.org/ASID2/resource/newsflash.asp
+http://www.asidsouthernaccents.com/design_specialities/hospitality.asp
+http://www.asij.ac.jp/elementary/gr4web/c4f/professional/teaching/subjects/ss_sci_tech/rube/machineweb/teacher.htm
+http://www.asijobs.com/interviewtips.cfm
+http://www.asil.org/insights/insigh122.htm
+http://www.asimovs.com/_issue_0505/onthenet.shtml
+http://www.asis.org/Bulletin/Dec-03/williams.html
+http://www.asisonline.org/chapters/CPPChapterInfo.xml
+http://www.asja.org/cw/cwfiles/cw031030.php
+http://www.ask-a-librarian.org.uk/mla_vrt/staffing.html
+http://www.askaboutwriting.net/
+http://www.askapatient.com/viewrating.asp?drug=20635&name=LEVAQUIN
+http://www.askapatient.com/viewrating.asp?drug=20711&name=ZYBAN
+http://www.askapatient.com/viewratings.asp?drug=20635&name=LEVAQUIN&sort=age
+http://www.askapatient.com/viewratings.asp?drug=20711&name=ZYBAN&sort=Timelength
+http://www.askapatient.com/viewratings.asp?drug=20711&name=ZYBAN&sort=age
+http://www.askapatient.com/viewratings.asp?drug=20711&name=ZYBAN&sort=gender
+http://www.askapatient.com/viewratings.asp?drug=20711&name=ZYBAN&sort=satisfaction
+http://www.askart.com/interest/nude_art.asp
+http://www.askasia.org/Korea/lp10.html
+http://www.askasia.org/frclasrm/lessplan/l000045.htm
+http://www.askasia.org/teachers/Instructional_Resources/Lesson_Plans/India/LP_india_2.htm
+http://www.askasia.org/teachers/Instructional_Resources/Materials/Readings/China/R_china_10.htm
+http://www.askatl.org.uk/atl_en/news/general_election/candidates_responses.asp
+http://www.askatl.org.uk/atl_en/union/policy/responses/new_professionalism.asp
+http://www.askcedric.org.uk/commnotes.php?note=23
+http://www.askdocweb.com/retin-a2.html
+http://www.askdrgayle.com/qa333.htm
+http://www.askdrsears.com/html/2/T022800.asp
+http://www.askdrsears.com/html/2/T023600.asp
+http://www.askdrsears.com/html/8/T080800.asp
+http://www.askdrshah.com/alzhdis.htm
+http://www.askedu.com/course/ks/ks_E19.htm
+http://www.askheartbeat.com/html/1mar01.html
+http://www.asklyrics.com/display/504_Boyz/Haters_Gon_Hate_Lyrics/125547.htm
+http://www.asklyrics.com/display/B.G./Bounce_With_Me_Lyrics/97091.htm
+http://www.askman.com/fashion/body_and_mind/11_better_living.html
+http://www.askmehelpdesk.com/forum/archive/t-4740.html
+http://www.askmen.com/fashion/body_and_mind/16_better_living.html
+http://www.askmen.com/money/successful/19_success.html
+http://www.askncvo.org.uk/Asp/search/docViewer.aspx?siteID=2&sID=24&documentID=633&catID=119
+http://www.askrose.org/cgi-bin/viewnews.cgi?id=1094047188
+http://www.askthebuilder.com/385_Window_Glass_Replacement_is_Tricky.shtml
+http://www.askthebuilder.com/Premium-Ask-The-Builder.shtml
+http://www.asktheheadhunter.com/hafallacytwo.htm
+http://www.asktheheadhunter.com/hastartjob.htm
+http://www.asktheheadhunter.com/industryinsider8.htm
+http://www.asktheheadhunter.com/women1.htm
+http://www.askthelawguy.info/ask2/2003.08.01_arch.html
+http://www.askthemeatman.com/beef_nutritional_value.htm
+http://www.asktog.com/basics/firstPrinciples.html
+http://www.asktog.com/books/booksDesign.html
+http://www.asktog.com/columns/034OSX-FirstLook.html
+http://www.asktog.com/columns/058SecurityD'ohlts.html
+http://www.asktog.com/columns/061PantherReview.html
+http://www.asktog.com/columns/064MonsterPalm.html
+http://www.asktog.com/reviews/001GoLiveCyberStudio3.html
+http://www.askwhy.co.uk/truth/121QuestioningBelief.html
+http://www.askwhy.co.uk/truth/epistles/009ROdell3.html
+http://www.askyourass.com/askyourass.asp
+http://www.aslab.com/warranty/warrantypolicies.html
+http://www.aslet.org/i4a/pages/Index.cfm?pageid=682
+http://www.asmallvictory.net/
+http://www.asme.org/pubs/detailspecs.html
+http://www.asmera.nl/eritrea2004/eritrea518.htm
+http://www.asmicro.com/supplies.htm
+http://www.asminternational.org/emails/chapter_nexus_0505/May05nexus.htm
+http://www.asn-online.org/newsletter/renal_express/2003/03-08_Rxpress.aspx
+http://www.asn-online.org/policy_and_public_affairs/archives/asnConcern.aspx
+http://www.asne.org/ideas/codes/yorkdailyrecord.htm
+http://www.asne.org/index.cfm?ID=2528
+http://www.asne.org/index.cfm?ID=395
+http://www.asne.org/kiosk/editor/01.may-june/hoyt1.htm
+http://www.asne.org/kiosk/editor/97.mar-may/fry1.htm
+http://www.asno.dfat.gov.au/annual_report_9899/bkg_iaea_o.html
+http://www.asno.dfat.gov.au/annual_report_9900/asno_office_functions.html
+http://www.asno.dfat.gov.au/annual_report_9900/current_topics.html
+http://www.asor.ms.unimelb.edu.au/
+http://www.asp-shareware.org/membership/profile-2003-06.asp
+http://www.asp101.com/
+http://www.asp101.com/articles/john/classicaspinvsnet/default.asp
+http://www.aspartame.com/lydon.htm
+http://www.aspatore.com/bookstore2.asp
+http://www.aspatore.com/bookstore6.asp
+http://www.aspb.org/meetings/pb-2005/housing.cfm
+http://www.aspca.org/site/PageServer?pagename=companionlines_dogs&s_state=06
+http://www.aspca.org/site/PageServer?pagename=companionlines_dogs&s_state=06&printer_friendly=1
+http://www.aspennj.org/playd.html
+http://www.aspensnowmass.com/environment/AboutEAC/recognition1999.cfm?var=1&hasFlash=0
+http://www.aspergerfriends.com/
+http://www.aspet.org/AMSPC/Minutes_Winter_%20Mtng.htm
+http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=182
+http://www.aspiesforfreedom.org/phpBB2/viewtopic.php?t=321
+http://www.aspire2write.com/Columns/WritingHelp.htm
+http://www.aspnews.com/analysis/analyst_cols/article.php/3306521
+http://www.aspnews.com/strategies/asp_basics/article.php/900991
+http://www.asponline.com/10tips.html
+http://www.asponline.com/jmolisani.html
+http://www.aspoonfulofsugar.net/blog/2004/01/
+http://www.aspower.com/2issue1pg4.htm
+http://www.asppb.org/publications/model/act.aspx
+http://www.asppb.org/publications/model/regulations.aspx
+http://www.asprs.org/publications/pers/2004journal/august/
+http://www.aspsys.com/clusters/history/
+http://www.aspsys.com/systems/viewspecs.aspx/video/29/14.aspx
+http://www.aspsys.com/systems/viewspecs.aspx/video/29/8.aspx
+http://www.asres.org/program_1.htm
+http://www.asrm.org/Professionals/PG-SIG-Affiliated_Soc/MHPG/mhpgbooks.html
+http://www.asrt.org/content/ASRTStore/Marketplace/Marketplace_Jobs.aspx
+http://www.assa.org.au/edm.html
+http://www.assainternational.com/workshops/iwpcps_5/exhibitors.cfm
+http://www.assamtea.biz/teabasics.htm
+http://www.assatashakur.org/forums/upload/showthread.php?goto=lastpost&t=3261
+http://www.asse.org/breview14.htm
+http://www.asseenontv.com/
+http://www.assembly-weu.org/en/documents/sessions_ordinaires/pv/2004/pv05.html
+http://www.assembly-weu.org/en/presse/cp/2004/2.html
+http://www.assistbcs.com/bin/web/real_estate/AR56276/ACTIVATE_FRAMES/PROMOTE_FHEO/1103662608.html
+http://www.assistedsuicide.org/typical_example.html
+http://www.assitej-usa.org/Next/a/2004_10/conundrum.html
+http://www.associateprograms.com/search/Books_and_Art/art/index2.shtml
+http://www.associateprograms.com/search/Health_and_Beauty/fitness/index2.shtml
+http://www.associationheadquarters.com/AMCBasics/rfp.htm
+http://www.associationmagazine.com/client/csae/AM.nsf/0/CF4A7D896E2CA668852569D1006B551D?OpenDocument
+http://www.assortedstuff.com/
+http://www.asss.utvinternet.com/buildingcollection/build12writingup1.htm
+http://www.asstr.org/files/Collections/Alt.Sex.Stories.Moderated/Year2002/35258
+http://www.asstr.org/~Kristen/28/timmy.txt
+http://www.asstr.org/~velocity/stories/toilkien040.html
+http://www.assumption.edu/HTML/Faculty/Kantar/HKANTAR2.html
+http://www.assumption.edu/html/Faculty/Kantar/HKANTAR2.HTML
+http://www.assumption.edu/users/Kantar/IICEcall.html
+http://www.assureconsulting.com/workplace/expect.shtml
+http://www.astdhpphe.org/about.asp
+http://www.astdhpphe.org/infect/hanta.html
+http://www.astdps.org/newsletters/2005/May/home.htm
+http://www.astecmodels.co.uk/fgallery.htm
+http://www.asterhobbies.co.uk/pages/models/br03.htm
+http://www.asterius.com/atari/cyberpaint
+http://www.asthm.com.au/courses/courses.htm
+http://www.asthma-drsprecace.com/sinus.html
+http://www.asthma.org.uk/discus/messages/91/1114.html?1111588522
+http://www.asti-usa.com/support/appnotes/26/pt1.htm
+http://www.astm.org/SNEWS/JANUARY_2005/beakley_jan05.html
+http://www.aston.ac.uk/fees
+http://www.aston.ac.uk/international-students/preparingforaston/1orientation.jsp
+http://www.aston.ac.uk/lss/research/prodd/CD/Ch4.jsp
+http://www.aston.ac.uk/lss/wide_languages/index.jsp
+http://www.astondane.plc.uk/about/news.htm
+http://www.astoriasoftware.com/solutions/aerospace/afastdoc.jsp
+http://www.astorytoshare.com/lovequotes.php?&page=6
+http://www.astphnd.org/
+http://www.astr.ua.edu/keel/agn/quasar40.html
+http://www.astralreflections.com/html/karmic.html
+http://www.astro.caltech.edu/~wsk/2004.htm
+http://www.astro.com.my/v5/programming/weekly/weekly.asp?channel_id=M029
+http://www.astro.com/astrology/in_millennium_e.htm
+http://www.astro.com/people/smith_e.htm
+http://www.astro.com/people/smith_g.htm
+http://www.astro.com/people/smith_h.htm
+http://www.astro.com/people/smith_i.htm
+http://www.astro.com/people/smith_p.htm
+http://www.astro.com/people/smith_s.htm
+http://www.astro.com/samples/sp_cash_e.htm?lang=h
+http://www.astro.com/samples/sp_cash_e.htm?lang=s
+http://www.astro.psu.edu/users/lewis/ASTRO11/syllabus.html
+http://www.astro.psu.edu/users/sharma/Astro1/2005Summer/syllabus.html
+http://www.astro.umn.edu/links/
+http://www.astro.unibas.ch/forschung/pe/mw-structure.shtml
+http://www.astro.uu.nl/~strous/AA/en/antwoorden/planeten.html
+http://www.astro.uu.nl/~strous/AA/en/antwoorden/tijd.html
+http://www.astrobio.net/news/article1455.html
+http://www.astrobio.net/news/article389.html
+http://www.astrobiology.com/asc2000/abstract.html?ascid=217
+http://www.astrofish.net/fineprint.html
+http://www.astrohbg.org/
+http://www.astroimages.com/digital.htm
+http://www.astroleague.org/al/socaids/leadship/leadrun.html
+http://www.astrology.com.au/face/theface.asp
+http://www.astrology.com/examples/new/222/bt.html
+http://www.astrology101.com/Heavens/default.asp
+http://www.astrologyalive.com/AA-News-Goods.html
+http://www.astrologycom.com/facts.html
+http://www.astrologyzine.com/love-lady.shtml
+http://www.astromart.com/news/news.asp?news_id=286
+http://www.astronomy.com/asy/default.aspx?c=a&id=2193
+http://www.astronomy.com/asy/default.aspx?c=a&id=2465
+http://www.astronomy.com/asy/default.aspx?c=ss&id=10
+http://www.astronomytower.org/authors/luthiensunstar/PAETF.html
+http://www.astronomytower.org/authors/olitrin/BAR01.html
+http://www.astrosoftware.com/astrolog.htm
+http://www.astrostar.com/articles/BornInFebruary.htm
+http://www.astrosurf.org/buil/us/bestar.htm
+http://www.asu.asn.au/media/ca/
+http://www.asu.edu/caed/proceedings01/ESDP/faludi.htm
+http://www.asu.edu/caed/proceedings97/freund.html
+http://www.asu.edu/caed/proceedings98/Garvin/garvin.html
+http://www.asu.edu/copp/morrison/may05.htm
+http://www.asu.edu/counseling_center/lifeascollegestudent.html
+http://www.asu.edu/educ/epsl/CERU/Community%20Corner/baecherspeech.html
+http://www.asu.edu/educ/epsl/EPRU/documents/EPRU%202002-101/Summary-02.Finn.htm
+http://www.asu.edu/emergency/bcp/pages/miscellaneous_14.html
+http://www.asu.edu/english/englished/yalit/engedya01honorlist.htm
+http://www.asu.edu/graduate/facstaff/mentors/foster89.htm
+http://www.asu.edu/mu/dining.htm
+http://www.asuqld.asn.au/
+http://www.asv-archeology.org/timcrime.htm
+http://www.asw2.net/samples/housing.html
+http://www.asw4autism.org/vision.htm
+http://www.aswift.com/servlet/Job.Search?job.sectorId=34
+http://www.aswm.org/wbn/current.htm
+http://www.asx.com.au/about/l3/AdviserServicesSOA_AA3.shtm
+http://www.at-bristol.org.uk/Newton/experiment.htm
+http://www.ata.org/programs/service_connected.html
+http://www.ataa.org/spotlight/courtrecords.htm
+http://www.atanet.org/pd/finance/bios.htm
+http://www.atariarchives.org/bca/Chapter04_TheOrientExpress.php
+http://www.atariarchives.org/deli/computing_in_europe.php
+http://www.atarihq.com/tsr/special/tetrishist.html
+http://www.atcmag.com/v2n3/article6.asp
+http://www.atdd.noaa.gov/ETOS_additions/etosprogram.htm
+http://www.atdn.org/
+http://www.atdn.org/trs/29.html
+http://www.ateamshrine.co.uk/
+http://www.atelier-vert.com/visitez.tmpl?SKU=31231229422200
+http://www.ateliervanlieshout.com/corporate3/newsletter-no2.htm
+http://www.atfantasy.com/view/453
+http://www.atfantasy.com/view/472
+http://www.atg.com/en/company/atg_management/
+http://www.atg.com/en/news/articles/news_article.jhtml?id=1700036
+http://www.atg.wa.gov/utility/10_97report/title2.html
+http://www.athabascau.ca/calendar/page03_10.html
+http://www.athabascau.ca/course/ug_subject/
+http://www.athabascau.ca/html/courses/list1.htm
+http://www.athe.org/resources/filearchive/ETHICS.html
+http://www.athealth.com/consumer/disorders/alzheimers2.html
+http://www.atheistfoundation.org.au/undec.htm
+http://www.atheistparents.org/pages.php?sc=001&pg=0099
+http://www.atheistparents.org/pages.php?sc=001&pg=0106
+http://www.atheists.org/flash.line/evol7.htm
+http://www.atheists.org/flash.line/kansas5.htm
+http://www.athelstane.co.uk/gmanfenn/begumbag/begum36.htm
+http://www.athenian.org/alumni/AlumniProfiles.php
+http://www.athensguide.com/architecture.html
+http://www.athensguide.com/leaving.html
+http://www.athensguide.com/newmetro.html
+http://www.athensnews.gr/education/1edu19.htm
+http://www.athletesadvisor.com/articles/baseball/pappas.htm
+http://www.athletesedge.com/fall.html
+http://www.athletics.org.au/athletes/bigsister/useful_info.cfm
+http://www.athlonsports.com/articles/3022/
+http://www.athomeplate.com/ethics.shtml
+http://www.ati-net.com/dm-barlo.htm
+http://www.ati-net.com/nausbaum.htm
+http://www.aticourses.com/
+http://www.atimes.com/atimes/Asian_Economy/GF11Dk01.html
+http://www.atimes.com/atimes/Central_Asia/EK06Ag01.html
+http://www.atimes.com/atimes/China/DK02Ad05.html
+http://www.atimes.com/atimes/China/FE26Ad06.html
+http://www.atimes.com/atimes/China/FK18Ad01.html
+http://www.atimes.com/atimes/Global_Economy/FB05Dj01.html
+http://www.atimes.com/atimes/Global_Economy/GE26Dj02.html
+http://www.atimes.com/atimes/Global_Economy/GF16Dj01.html
+http://www.atimes.com/atimes/Korea/FI11Dg03.html
+http://www.atimes.com/atimes/Middle_East/ED04Ak07.html
+http://www.atimes.com/atimes/Middle_East/FG17Ak01.html
+http://www.atimes.com/atimes/Middle_East/FI18Ak02.html
+http://www.atip.org/public/atip.reports.98/atip98.068r.html
+http://www.atips.com/english/news/2004.05.11.htm
+http://www.atis.org/atis/sif/sif1295.htm
+http://www.atis.org/atis/tcif/5tc00a03.htm
+http://www.atkearney.com/main.taf?p=5,3
+http://www.atkielski.com/main/ParisFAQ.html
+http://www.atkinsexposed.org/atkins/135/Corporate_Threat.htm
+http://www.atkinsexposed.org/atkins/65/Atkins_Killed_Our_Daughter.htm
+http://www.atl.ec.gc.ca/climate/nfld.html
+http://www.atl.ec.gc.ca/epb/pollprev/kings_metal.html
+http://www.atl.ec.gc.ca/epb/pollprev/past.html
+http://www.atl.ec.gc.ca/press/01-11-30.html
+http://www.atl.org.uk/atl_en/news/general_election/candidates_responses.asp
+http://www.atl.org.uk/atl_en/union/policy/responses/new_professionalism.asp
+http://www.atla.org/LegalEducationConventions/Tier3/Convenience_AV.aspx
+http://www.atlabama.com/olemissjokes.htm
+http://www.atlantabesthomes.com/
+http://www.atlantaperforms.com/we_inform/hotline/auditions.asp
+http://www.atlantaspeechschool.org/employment.html
+http://www.atlantatribune.com/
+http://www.atlanticbreezes.com/oceancitytownevents/decemberoceancitymaryland.shtml
+http://www.atlanticbulk.com/apply.htm
+http://www.atlanticfirearms.com/rifles/308_rifles/308_rifles.html
+http://www.atlanticfirearms.com/rifles/ar15/ar15.html
+http://www.atlanticgolf.com/aboutcostarica.htm
+http://www.atlanticpanic.com/index.cfm?page=2&chartpage=2&CharterId=152
+http://www.atlantiquecity.com/
+http://www.atlargestudy.org/why-ga-matters.html
+http://www.atlas.sa.gov.au/atlas1986/3PRODUCTION/3MINERALS_ENERGY.cfm
+http://www.atlasmagazine.com/droppings/prev15.html
+http://www.atlassian.com/software/jira/docs/latest/fieldscreenschemes.html
+http://www.atlassian.com/software/jira/docs/v3.2/fieldscreenschemes.html
+http://www.atlassian.com/software/jira/docs/v3.2/issuefield_configuration_schemes.html
+http://www.atlassound.com/contact/warranty.cfm
+http://www.atlastnaturals.com/msm.htm
+http://www.atm.org.uk/professionalofficer/
+http://www.atmos.anl.gov/ABLE/status.html
+http://www.atmosphere.mpg.de/enid/5057ce0c8397e666f5a77ee2a0017790,55a304092d09/1qx.html
+http://www.atnet.org/CR4AT/FocusGroup/FunctionThematic.htm
+http://www.atnf.csiro.au/~rgooch/linux/docs/io-events.html
+http://www.atoday.com/334.0.html
+http://www.atokacity.org/
+http://www.atomicarchive.com/Effects/index.shtml
+http://www.atomicdeathray.com/unprofessional/zombies/reagan.html
+http://www.atomicmuseum.com/tour/decision.cfm
+http://www.atozteacherstuff.com/Tips/Sponge_and_Transition_Activities/
+http://www.atp.nist.gov/alliance/gtc-a.htm
+http://www.atp.nist.gov/eao/gcr02-830/chapt3.htm
+http://www.atp.nist.gov/eao/jtt/jaffe.htm
+http://www.atpm.com/10.10/segments.shtml
+http://www.atpm.com/3.01/page7.shtml
+http://www.atpm.com/5.07/paradigm.shtml
+http://www.atpm.com/5.12/art.shtml
+http://www.atpm.com/6.03/barline.shtml
+http://www.atpm.com/6.08/candy-crisis.shtml
+http://www.atpm.com/6.10/bbedit.shtml
+http://www.atpm.com/7.08/macworld.shtml
+http://www.atpm.com/8.01/howto.shtml
+http://www.atpm.com/9.10/aka.shtml
+http://www.atpobtvs.com/ethqs2.html
+http://www.atptennis.com/en/newsandscores/news/2005/rome_wednesday.asp
+http://www.atreus-systems.com/corporate_info/executive_team.shtml
+http://www.atriarch.com/news/news.html
+http://www.atributetohinduism.com/articles_hinduism/231.htm
+http://www.atriumsoc.org/pages/bullybustersystem.html
+http://www.atropine-live.co.uk/
+http://www.ats-sonic.com/ftsa3.htm
+http://www.ats.org/news.php?id=117
+http://www.atsb.gov.au/road/nrss/nrssp_120804.cfm
+http://www.atsb.gov.au/road/res-exec/cr162ex.cfm
+http://www.atsb.gov.au/road/rpts/cr203/dr_fatigue.cfm
+http://www.atsdr.cdc.gov/HAC/PHA/bridgeport/bro_p3.html
+http://www.atsdr.cdc.gov/HAC/PHA/fafb/faf_p4a.html
+http://www.atsdr.cdc.gov/HAC/PHA/iron/iro_p1.html
+http://www.atsdr.cdc.gov/HAC/PHA/twin/tcr_p3.html
+http://www.atsdr.cdc.gov/tfacts47.html
+http://www.atse.org.au/index.php?sectionid=213
+http://www.atse.org.au/index.php?sectionid=300
+http://www.atsi.org/MemberBenefits/
+http://www.atsnn.com/story/91066.html
+http://www.att.com/gov/voip.html
+http://www.attaboy300.com/6_dog_class.htm
+http://www.attackonamerica.net/operationnorthwoods.htm
+http://www.attainhome.com/
+http://www.attendsource.com/tsb/
+http://www.attendsource.com/tsb/default.asp
+http://www.atthetable.org/extprofile.asp
+http://www.attica.net/usd511/community/information/information.html
+http://www.atticvintage.com/atticpg2.html
+http://www.attitudetravel.com/
+http://www.attorneygeneral.jus.gov.on.ca/english/courts/scc/sccbook-ch6.asp
+http://www.attorneygeneral.jus.gov.on.ca/english/family/pgt/charbullet/bullet4.asp
+http://www.attra.org/attra-pub/cashcropping.html
+http://www.attra.org/attra-pub/organiccrop.html
+http://www.attretirees.org/Articles/Archive%202005/wsj_1-24-05.htm
+http://www.atu2.com/
+http://www.atug.com/andypatterns/rm1.htm
+http://www.atunity.org/nm/publish/news_67.html
+http://www.atvillustrated.com/feature_articles/atv_year_award/prairie650.html
+http://www.au.af.mil/au/awc/awcgate/awc-comm.htm
+http://www.au.af.mil/au/awc/awcgate/awcmedia.htm
+http://www.au.af.mil/au/awc/awcgate/frp/frpcr.htm
+http://www.au.af.mil/au/awc/awcgate/sab-uav/afrttech.htm
+http://www.au.gardenweb.com/forums/load/roses/msg1202291720811.html
+http://www.au.org/site/PageServer?pagename=press_delayfristtranscript
+http://www.au.org/site/PageServer?pagename=resources_brochure_faithbased
+http://www.aua-mirror.com/aua/library/toversionpolicy.htm
+http://www.aua.ac.uk/cpd/PG.cert.htm
+http://www.aua.ac.uk/pubs/pricingtheproduct.htm
+http://www.aubreyturner.org/index.php?/orglog/2004/09/
+http://www.auburn.edu/academic/disabilities/services.html
+http://www.auburn.edu/academic/liberal_arts/cmjn/cmse107/content.php?article.139
+http://www.auburn.edu/academic/liberal_arts/cmjn/cmse107/content.php?article.145
+http://www.auburn.edu/academic/liberal_arts/cmjn/cmse107/content.php?article.146
+http://www.auburn.edu/academic/liberal_arts/cmjn/cmse107/links.php?cat.2
+http://www.auburn.edu/academic/science_math/leach/docs/
+http://www.auburn.edu/administration/business_office/spending/no_po.html
+http://www.auburn.edu/~allenkc/difviews.html
+http://www.auburn.edu/~garriro/d1bohm.htm
+http://www.auburn.edu/~garriro/fk7trouble.htm
+http://www.auburn.edu/~garriro/tamchap1.htm
+http://www.auburn.edu/~johnspm/gloss/growth_theory
+http://www.auburn.edu/~murraba/explor/mcleanrl.html
+http://www.auburn.edu/~murraba/phon.html
+http://www.auca.org/month/project1298.html
+http://www.aucbm.org/english/activiti/research/research.htm
+http://www.aucegypt.edu/faculty/powers/303%5C303Exercises.htm
+http://www.aucta.com.au/projects/displayproject.cfm?pid=29
+http://www.auctioneers.org/conference/conf_ed.php
+http://www.auctionzip.com/cgi-bin/auctionlist.cgi?vuid=1606
+http://www.audata.co.uk/index.php
+http://www.audiblox2000.com/cognitiveskills.htm
+http://www.audiblox2000.com/dyslexia_dyslexic/dyslexia013.htm
+http://www.audiencedialogue.org/kya11b.html
+http://www.audio-t.co.uk/danztramp/walkdiary.html
+http://www.audio-technica.com/using/wireless/advanced/types.html
+http://www.audio-technica2.co.uk/pages/prs/pr.asp?prid=83
+http://www.audiocage.com/1800design.shtml
+http://www.audioenz.co.nz/2004/psb_alphaintro.shtml
+http://www.audioholics.com/news/pressreleases/EnergyReferenceConnoisseur.php
+http://www.audioholics.com/productreviews/loudspeakers/VonSchweikertAudioVR1Page1.html
+http://www.audioholics.com/techtips/audioprinciples/interconnects/audioquestDBScablesrespons.php
+http://www.audioholics.com/techtips/buyingguides/cablebudgetguidelines.php
+http://www.audioholics.com/techtips/buyingguides/interconnects/cable_budget.php
+http://www.audiologyonline.com/articles/arc_disp.asp?id=217
+http://www.audiologyonline.com/articles/pf_arc_disp.asp?id=782
+http://www.audiomidi.com/aboutus/reviews/zvonar_cantor.cfm
+http://www.audiorevolution.com/dvd/revs/buffyseason4.shtml
+http://www.audioscrobbler.com/forum/3/_/7885/0
+http://www.audiotools.com/ordabok.html
+http://www.audiovideo101.com/community/messageboard/displaycategory.asp?catid=9
+http://www.audit.nsw.gov.au/guides-bp/educat98/joint-op.htm
+http://www.audleytravel.com/SouthKorea.shtml
+http://www.audrie.com/open_house_selling.htm
+http://www.audubon.org/bird/at_home/SafeWindows.html
+http://www.audubon.org/campaign/latestnews.html
+http://www.audubon.org/chapter/oh/oh/
+http://www.audubon.org/local/cn/98march/cmas.html
+http://www.augc.aus-soaring.on.net/members/stories.html
+http://www.augcominc.com/whatsnew/ncs4.html
+http://www.augustachronicle.com/race04/
+http://www.augustafreepress.com/stories/storyReader$34583
+http://www.augustafreepress.com/stories/storyReader$35210
+http://www.augustaga.gov/
+http://www.augustaheritage.com/folklore.html
+http://www.aukml.org.uk/deadaug99.htm
+http://www.aukml.org.uk/deadjul00.htm
+http://www.auldhouse.co.nz/CTX-1222.aspx
+http://www.auldhouse.co.nz/CTX-1223AI.aspx
+http://www.aulis.com/nasa-sky-at-night.htm
+http://www.aum-engineering.com/conditions.html
+http://www.aumag.org/coverstory/march03cover.html
+http://www.aura-nio.noao.edu/book/ch4/4_3.html
+http://www.aurauk.com/uk/faqs.htm
+http://www.aurora.edu/catalog/ug04-06/programs/supplemental.htm
+http://www.aurorahealthcare.org/yourhealth/healthgate/getcontent.asp?URLhealthgate=%2222048.html%22
+http://www.auroravideosys.com/buy/termsConditions.html
+http://www.auroville.org/thecity/architecture/arch_regina_mudhousei.htm
+http://www.ausa.org/family/update_0505.html
+http://www.ausa.org/www/armymag.nsf/(all)/D8EC0662B39442CC85256F1D0071514C
+http://www.ausa.org/www/armymag.nsf/0/96A5D4A085D530B185256A370053A931?OpenDocument
+http://www.ausa.org/www/bookprog.nsf/0/624E93D130F122B085256C76004ED8C0?OpenDocument
+http://www.ausaid.gov.au/hottopics/easttimor/easttimor_factfind.cfm
+http://www.ausleisure.com.au/latestnewsDec04.html
+http://www.ausmedia.com.au/omnipg.htm
+http://www.ausport.gov.au/ethics/policy.asp
+http://www.ausport.gov.au/fulltext/1999/acc/icce/kieran1.htm
+http://www.ausport.gov.au/fulltext/2002/ascpub/FuelTennis.asp
+http://www.auspost.com.au/BCP/0,1080,CH2050%257EMO19,00.html
+http://www.auspost.com.au/BCP/0,1080,CH2111%257EMO19,00.html
+http://www.ausref.com/qld/brisbane/content/view/35/49/
+http://www.ausrun.com.au/
+http://www.aussielegal.com.au/informationoutline~nocache~1~SubTopicDetailsID~701.htm
+http://www.aussielegal.com.au/informationoutline~nocache~1~SubTopicDetailsID~972.htm
+http://www.aussieworld.com/newsletter/home.php
+http://www.austa.net/
+http://www.austal.com/product-range/defence-hssv.cfm
+http://www.austehc.unimelb.edu.au/guides/rees/REESS013.htm
+http://www.austehc.unimelb.edu.au/tia/778.html
+http://www.austen.com/derby/amanda2.htm
+http://www.austen.com/derby/elizac8b.htm
+http://www.austen.com/derby/melissr1.htm
+http://www.austen.com/derby/sarahbeth2.htm
+http://www.austen.com/derby/tamz2.htm
+http://www.austinactors.net/classes/
+http://www.austincc.edu/baldwin/Spring05/Itse1356WebPage/ITSE1356.htm
+http://www.austinchronicle.com/2005-01-28/pols_feature.html
+http://www.austinchronicle.com/issues/dispatch/1999-10-08/screens_feature4.html
+http://www.austinchronicle.com/issues/dispatch/1999-12-31/arts_feature.html
+http://www.austinchronicle.com/issues/dispatch/2000-03-10/pols_feature.html
+http://www.austinchronicle.com/issues/dispatch/2000-04-07/xtra_feature.html
+http://www.austinchronicle.com/issues/dispatch/2000-09-22/pols_feature.html
+http://www.austinchronicle.com/issues/dispatch/2000-09-29/xtra_feature6.html
+http://www.austinchronicle.com/issues/dispatch/2001-02-16/screens_feature3.html
+http://www.austinchronicle.com/issues/dispatch/2001-09-21/screens_feature.html
+http://www.austinchronicle.com/issues/dispatch/2001-10-26/books_feature.html
+http://www.austinchronicle.com/issues/dispatch/2003-05-02/pols_feature.html
+http://www.austinchronicle.com/issues/dispatch/2003-05-23/pols_naked3.html
+http://www.austinchronicle.com/issues/dispatch/2003-10-03/pols_feature.html
+http://www.austinchronicle.com/issues/dispatch/2003-10-17/pols_naked9.html
+http://www.austinchronicle.com/issues/dispatch/2004-03-12/pols_feature3.html
+http://www.austinchronicle.com/issues/dispatch/2004-05-07/screens_feature4.html
+http://www.austinchronicle.com/issues/dispatch/2005-01-28/pols_naked7.html
+http://www.austinchronicle.com/issues/dispatch/2005-03-04/screens_feature3.html
+http://www.austinchronicle.com/issues/dispatch/2005-05-20/arts_feature.html
+http://www.austinfilm.org/pov/takeone.php
+http://www.austinisd.org/inside/initiatives/cctltf/index.phtml
+http://www.austinmitchell.org/
+http://www.austinpostcard.com/lhistory.htm
+http://www.austinschools.org/allison/
+http://www.austinwebpros.com/mts/archives/2005/06/
+http://www.austlii.edu.au/au/other/IndigLRes/rciadic/regional/nsw-vic-tas/16.html
+http://www.austlii.edu.au/au/other/alrc/publications/reports/85/ch23.html
+http://www.austlii.edu.au/au/special/alta/alta95/verma.html
+http://www.austlii.edu.au/au/special/alta/alta95/warner.html
+http://www.austlii.edu.au/au/special/rsjproject/rsjlibrary/car/working_together/3.html
+http://www.austmus.gov.au/eureka/schools_earth_sciences/
+http://www.austplants-nsw.org.au/Yr6-Adapt.htm
+http://www.austrac.gov.au/text/publications/moneylaundestimates/chap11.html
+http://www.austrade.gov.au/corporate/layout/0,,0_S1-1_CORPXID0029-2_-3_PWB1181218-4_-5_-6_-7_,00.html
+http://www.australiabasket.com/NCA/nca.asp?NewsNo=19
+http://www.australiablog.com/archives/001851.shtml
+http://www.australiaday.gov.au/your_say2.asp
+http://www.australianbeers.com/culture/poms.htm
+http://www.australianpolitics.com/democracy/terms/federalism.shtml
+http://www.australianpolitics.com/executive/pm/quotes.shtml
+http://www.australianpolitics.com/news/2001/01-08-19.shtml
+http://www.australianpolitics.com/news/2004/10/04-10-30_latham.shtml
+http://www.australianpolitics.com/news/2004/11/04-11-10_gartrell.shtml
+http://www.australianprints.gov.au/Default.cfm?MnuID=SYM2/Nelson
+http://www.australiantelevision.net/bh/series4.html
+http://www.australianvolunteers.com/involved/publications/magazine/winter03/1382
+http://www.auswaertiges-amt.de/www/en/ausgabe_archiv?archiv_id=5467
+http://www.auswaertiges-amt.de/www/en/ausgabe_archiv?archiv_id=5474
+http://www.auswaertiges-amt.de/www/en/ausgabe_archiv?archiv_id=5948
+http://www.auswaertiges-amt.de/www/en/aussenpolitik/ausgabe_archiv?archiv_id=4037&bereich_id=11&type_id=3
+http://www.auswaertiges-amt.de/www/en/laenderinfos/laender/laender_ausgabe_archiv?land_id=162&a_type=Speeches&archiv_id=5035
+http://www.ausxip.com/fanfiction/d/decisions.html
+http://www.ausxip.com/startrek/barbeler/Medical_Emergeny.htm
+http://www.aut.org.uk/media/html/humanrightsactbriefing1.html
+http://www.aut.org.uk/media/html/sh_%20natfheconfspeech.html
+http://www.autc.gov.au/comp_projects.htm
+http://www.authenticityconsulting.com/act-lrn/a-l/coaching.htm
+http://www.authenticwatches.com/info.html
+http://www.author-illustr-source.com/sneedbcollard.htm
+http://www.author-network.com/gould.html
+http://www.author-network.com/wordplay.html
+http://www.authorhouse.com/BookStore/ItemDetail~BookID~25032.aspx
+http://www.authorized-amsoil-dealer-for-synthetic-motor-oil.com/amsoil_testimonies/satisfied_customers_cars/high-mileage-oil.php
+http://www.authorized-amsoil-dealer-for-synthetic-motor-oil.com/amsoil_testimonies/satisfied_customers_cars/oil-police-fleet.php
+http://www.authorized-amsoil-dealer-for-synthetic-motor-oil.com/amsoil_testimonies/satisfied_customers_trucks/amsoil-diesel-oil-going-409000-miles-without-oil-change.php
+http://www.authorsden.com/visit/viewPoetry.asp?AuthorID=22793
+http://www.authorsden.com/visit/viewShortStory.asp?AuthorID=14713&id=11910
+http://www.authorsden.com/visit/viewShortStory.asp?AuthorID=22254&id=14208
+http://www.authorsden.com/visit/viewarticle.asp?AuthorID=17759&id=12232
+http://www.authorsden.com/visit/viewarticle.asp?AuthorID=6274
+http://www.authorsden.com/visit/viewpoetry.asp?AuthorID=14826&id=138750
+http://www.authorsden.com/visit/viewpoetry.asp?AuthorID=2255&id=100946
+http://www.authorsden.com/visit/viewshortstory.asp?authorid=7013
+http://www.authorsden.com/visit/viewshortstory.asp?id=17404&AuthorID=16735
+http://www.autism-society.org/site/PageServer?pagename=TreatmentOptions
+http://www.autism.ca/whataut2.htm
+http://www.autismillinois.org/autprimer.htm
+http://www.autismtoday.com/articles/My-Experiences-with-Visual-Thinking-Sensory-Problems.htm
+http://www.autismwebsite.com/ari/newsletter/negative.htm
+http://www.autisticcuckoo.net/archive.php?id=2005/01/11/block-vs-inline-1
+http://www.autobarn.net/dus20030.html
+http://www.autoblog.com/entry/1234000790027564/
+http://www.autoblog.com/entry/5203211553364187/
+http://www.autoblography.co.uk/backblog/2002_11.php
+http://www.autobytel.com/
+http://www.autobytel.com/content/shared/articles/templates/index.cfm/article_page_order_int/3/article_id_int/237
+http://www.autodidactproject.org/my/phillife.html
+http://www.autodidactproject.org/other/markovic3.html
+http://www.autofieldguide.com/articles/030201.html
+http://www.autofieldguide.com/articles/119705.html
+http://www.autogeek.net/aboutus.html
+http://www.autoinsuraancequote.com/jersey-new.html
+http://www.autoinsuranceindepth.com/auto-insurance-glossary-n-w.html
+http://www.autoinsuranceindepth.com/standard-coverage.html
+http://www.autolawnsprinklers.com/
+http://www.autolinkspro.com/
+http://www.automaatioseura.fi/jaostot/mvn/mvn6/manipulator.html
+http://www.automags.org/forums/archive/index.php/t-163463
+http://www.automatedbuildings.com/news/jun05/articles/cctrls/cctrls.htm
+http://www.automatedbuildings.com/news/nov01/art/ics/ics.htm
+http://www.automationworld.com/articles/Departments/294.html
+http://www.automationworld.com/articles/Departments/294.html?ppr_key=11.2003&sky_key=11.2003&term=11.2003
+http://www.automationworld.com/cds_print.html?rec_id=294
+http://www.automedia.com/affiliate_site/autoCare/ccr20020501pf/ccr20020501pf.asp
+http://www.automotivedesignline.com/howto/bodyelectronics/164302553
+http://www.automotivedesignline.com/howto/infotainment/164302553
+http://www.automotivedesignline.com/howto/showArticle.jhtml?articleID=164302553
+http://www.automotivedesignline.com/showArticle.jhtml?printableArticle=true&articleId=164302553
+http://www.automotiveforums.com/vbulletin/t65283.html
+http://www.automotivejobbank.com/
+http://www.autonav2000.com/faq.asp
+http://www.autonews.com/
+http://www.autoserviceproviders.com/index.cfm
+http://www.autoshuttle.de/A13_en.html
+http://www.autospectator.com/modules/news/article.php?storyid=1514
+http://www.autotax.com/SantaBarbara.htm
+http://www.autotrader.com/research/research.jsp?restype=used
+http://www.autotraining.net/publication3.asp
+http://www.autotransportwatch.com/terms.htm
+http://www.autoworld.com/news/Saab/Saab_9-5_safety.htm
+http://www.auwp.org/HISTORY/history_.htm
+http://www.av1611.org/question/cqtool.html
+http://www.availablelightonline.com/blog/archives/2004/12/
+http://www.avaki.com/news/releases/20040302_61.html
+http://www.avalanche.ca/Forums/ShowPost.aspx?PostID=95
+http://www.avalanche.ca/Forums/ShowPost.aspx?PostID=98
+http://www.avalondesign.com/files_02.html
+http://www.avalonia.co.uk/magickal/david%20rankine/holly%20king%20oak%20king.htm
+http://www.avantek.co.uk/tsandcs.htm
+http://www.avastin.com/avastin/crcBrochure2.m
+http://www.avatara.com/operationignore0.html
+http://www.avdf.com/may96/java_puzzle.html
+http://www.avdf.com/multimedia/samp_neville1.html
+http://www.aved.gov.bc.ca/informedstudent/choosinginstitution.htm
+http://www.aved.gov.bc.ca/psfacilities/environmental/sec-six.htm
+http://www.avellunau.com/vortex/animals.htm
+http://www.avemariasingles.com/success/viewStory.cfm?storyID=28
+http://www.avencentral.org.uk/aven_central_area.php
+http://www.aventispharma-us.com/PIs/lantus_TXT.html
+http://www.averagegirlmagazine.com/Articles/Archive/0411Stuff02.htm
+http://www.avert.org/aafrica.htm
+http://www.avert.org/aidssouthafrica.htm
+http://www.avert.org/drugtreatment.htm
+http://www.avert.org/faq1.htm
+http://www.avert.org/hsexu1.htm
+http://www.avert.org/legislation.htm
+http://www.avert.org/ukaidsnews.htm
+http://www.avert.org/young.htm
+http://www.avert.org/ypbooks.htm
+http://www.avert.org/ypstory.htm
+http://www.averydennison.com/corporate.nsf/PG/LNB1C3_NChina_Operations?OpenDocument
+http://www.averydennison.com/corporate.nsf/PGBUILD/LNB1C3_NChina_Operations?OpenDocument&Click=
+http://www.averyoutdoors.com/stories/Avery_Canada_2003.html
+http://www.averytooley.com/stereo/?itemid=117
+http://www.averytooley.com/stereo/?itemid=368
+http://www.averytooley.com/stereo/?itemid=368&amp;catid=7&catid=7
+http://www.avforums.com/forums/archive/index.php/t-23895.html
+http://www.aviation-health.org/news/browse.php?action=shownews&category=&id=23&topicid=116
+http://www.aviation-health.org/news/browse.php?action=shownews&category=&id=23&topicid=298
+http://www.aviationintegrity.org/word-html/press09-13-02.html
+http://www.aviationtoday.com/cgi/rw/show_mag.cgi?pub=rw&mon=0401&file=0401exectrans.htm
+http://www.avilabeachca.com/march10_01.htm
+http://www.avionix.com/gpscompm.html
+http://www.avionix.com/instruments.html
+http://www.avionix.com/loran.html
+http://www.avionix.com/navcoms.html
+http://www.avip2001.net/OfficialDocuments_files/IOM_010416RD.htm
+http://www.avis.com.mx/english/pages/fra_historia.html
+http://www.avisynth.org/EnhancingDvdVideos
+http://www.avlerchess.com/chess-analysis/Method_in_chess_thinking_70042.html
+http://www.avma.org/careforanimals/animatedjourneys/pethealth/pethealth.asp
+http://www.avma.org/education/cvea/cvtea_faq.asp
+http://www.avma.org/onlnews/javma/dec01/s121501m.asp
+http://www.avma.org/onlnews/javma/feb05/050215a.asp
+http://www.avma.org/onlnews/javma/feb05/x050215a.asp
+http://www.avma.org/statevma/mtvma/default.htm
+http://www.avmaaux.org/info.html
+http://www.avninsider.com/stories/dave110602.shtml
+http://www.avo.alaska.edu/avo4/atlas/volc/spurr/spurr2004/
+http://www.avo.alaska.edu/faq.php
+http://www.avoca.ndirect.co.uk/enigma/enigma2.htm
+http://www.avonandsomerset.police.uk/DocumentsSystem/DownloadDocument.aspx?DocumentID=346
+http://www.avonromance.com.au/books/book_extract.cfm?ISBN=0732281024
+http://www.avonwalk.org/site/DocServer/2.5_New_York_Lead_Release_2004.pdf?docID=1573
+http://www.avopolis.gr/reviews/
+http://www.avtec.alaska.edu/IT-VIA.htm
+http://www.avweb.com/news/airman/184319-1.html
+http://www.aw-bc.com/catalog/academic/product/0,1144,0201485184-PRE,00.html
+http://www.awakenedwoman.com/sh_bari.htm
+http://www.awakenings.com/astronomy/l1.html
+http://www.aware.ie/online%20books/postnatal.html
+http://www.aware.ie/print/support_p.htm
+http://www.aware.ie/support.htm
+http://www.awb.iohome.net/
+http://www.awc.org/Publications/dca/dca3/
+http://www.awea.org/faq/putnam.html
+http://www.awea.org/faq/tutorial/wwt_basics.html
+http://www.awea.org/faq/tutorial/wwt_potential.html
+http://www.awea.org/greenpower/gp_policies1.html
+http://www.awea.org/news/news100899fbl.html
+http://www.awea.org/policy/
+http://www.awea.org/policy/ccwp.html
+http://www.awea.org/smallwind/texas.html
+http://www.aweighout.com/binge/binge_article2.shtml
+http://www.awerty.com/courtshiphtml2.html
+http://www.awerty.com/usher2.html
+http://www.awesomefilm.com/script/hannah.html
+http://www.awesomelibrary.org/Classroom/Social_Studies/Terrorism/Terrorist_Networks.html
+http://www.awfulplasticsurgery.com/
+http://www.awhaleofabook.com/chapter_3.htm
+http://www.awhonn.org/awhonn/?pg=875-3280-7560
+http://www.awi-wa.com/T_MISC.htm
+http://www.awid.org/go.php?list=analysis&prefix=msg&item=00124
+http://www.awid.org/go.php?stid=1441
+http://www.awildtexassoapbar.com/default.asp?pageid=27374
+http://www.awionline.org/Lab_animals/biblio/la-eval.htm
+http://www.awise.org/?q=node/54
+http://www.awm.gov.au/encyclopedia/greek_campaign.htm
+http://www.awm.gov.au/pm/detail.asp?surname=Hughes
+http://www.awma.org/journal/style.htm
+http://www.awmanet.org/dc/dc_cover0402.html
+http://www.awn.com/mag/issue2.1/articles/bevilacqua2.1.html
+http://www.awningsleeveshirt.com/
+http://www.awolbush.com/
+http://www.aworldconnected.org/article.php/483.html
+http://www.aworldconnected.org/article.php/489.html
+http://www.aworldconnected.org/article.php/558.html
+http://www.awprofessional.com/articles/article.asp?p=102614
+http://www.awprofessional.com/articles/article.asp?p=170934&seqNum=2
+http://www.awprofessional.com/articles/article.asp?p=26022
+http://www.awprofessional.com/articles/article.asp?p=30317&seqNum=2
+http://www.awprofessional.com/articles/article.asp?p=357692&seqNum=5
+http://www.awprofessional.com/articles/article.asp?p=379757
+http://www.awprofessional.com/catalog/product.asp?product_id=%7B83B0CC64-C967-41C0-89C7-F1A30260FAB0%7D
+http://www.awprofessional.com/catalog/product.asp?product_id=%7BFA5A9F65-F874-429D-AAE9-8C38974F09D7%7D
+http://www.awprofessional.com/title/0201734095
+http://www.awprofessional.com/title/0201745720
+http://www.awprofessional.com/title/0201775956
+http://www.awprofessional.com/titles/0201775948
+http://www.awqafsa.org.za/public_html/sorce/sustainable2.htm
+http://www.awsna.org/renbalance.html
+http://www.awsp.org/ProDev/pd-2k5-focusonmath.htm
+http://www.awt.org/membr_applic/2002%20memb_applic.htm
+http://www.awwa-hi.org/2_archives/03conf02.htm
+http://www.awwa.org/ace/registration.cfm?event=showEventTrackDetail&meeting=A05&detail=WED25&Track=ALL
+http://www.axcessnews.com/commodities_122204.shtml
+http://www.axcessnews.com/worldnews_011305b.shtml
+http://www.axel-hecht.de/blog/archives/000123.html
+http://www.axel-hecht.de/mt-cgi/mt-RdaREesio.cgi?entry_id=123
+http://www.axethetax.org.uk/
+http://www.axi.ca/TCA/sep2004/betterpractices_3.shtml
+http://www.aximsite.com/boards/archive/index.php/t-62001.html
+http://www.aximsite.com/boards/showthread.php?t=64935&page=1
+http://www.axiomsoftware.com/solutions/mishiring.asp
+http://www.axisoflogic.com/artman/publish/article_16043.shtml
+http://www.axisoflogic.com/artman/publish/article_17015.shtml
+http://www.axledentaldj.com/bpmstudioprofaq.html
+http://www.aya.yale.edu/reunions/ayaReunionInfo.asp?itemType=0&itemID=1300
+http://www.ayeconference.com/wiki/scribble.cgi?read=ProductionPracticesCheckList
+http://www.aylaw.com/bios/r_howell.html
+http://www.aylaw.com/bios/t_whiffen.html
+http://www.aylwardfamily.com/content/200306archive001.asp
+http://www.aypf.org/forumbriefs/2000/fb072700.htm
+http://www.aypf.org/forumbriefs/2005/fb3.18.05.htm
+http://www.aypf.org/tripreports/2002/tr120302.htm
+http://www.ayrshirehistory.org.uk/jsmith/jsmith.htm
+http://www.ayrunitedfc.co.uk/index.asp?p=news&newsid=240
+http://www.ayubmed.edu.pk/JAMC/PAST/14-3/IbrahimMansoor.htm
+http://www.ayubmed.edu.pk/JAMC/PAST/15-1/Shaukat%20DLC.htm
+http://www.ayurvedacollege.com/articles/Asthma1.htm
+http://www.azagel.com/music.html
+http://www.azaleacharities.com/aid.htm
+http://www.azarms.com/nov2001.htm
+http://www.azc.org/azc-zendo-etiquette.html
+http://www.azcardinals.com/news/news_details.html?iid=2878
+http://www.azcentral.com/
+http://www.azcentral.com/business/columns/articles/0124action24.html
+http://www.azcentral.com/families/articles/0824famphonecheating.html
+http://www.azcentral.com/families/articles/1227fam_parenting12251.html
+http://www.azcentral.com/health/kids/articles/0404navajoboy04.html
+http://www.azcentral.com/home/garden/articles/0924putting24.html
+http://www.azcentral.com/news/articles/0202IraqTurnout02-ON.html
+http://www.azcentral.com/news/election/
+http://www.azcentral.com/news/wn.html
+http://www.azcentral.com/specials/special11/articles/0107asuteam09.html
+http://www.azcentral.com/specials/special28/articles/0322evroads22Z12.html
+http://www.azcentral.com/specials/special50/articles/0502guinn0502.html
+http://www.azcentral.com/style/articles/0122eyecream.html
+http://www.azchords.com/b/beatles-tabs-410/shesleavinghome-tabs-101050.html
+http://www.azeri.org/Azeri/az_latin/latin_articles/latin_text/latin_73/eng_73/73_redties.html
+http://www.azfamily.com/news/fireseason/stories/KTVKLNews20050527.2b6096375.html
+http://www.azfamily.com/news/local/stories/KTVKLNews20050622.358dcb9b.html
+http://www.azgita.gov/policies_standards/html/p800_s885_physical_security.htm
+http://www.azh.org/Conservation/azh_cons_grant_app.htm
+http://www.azhikers.org/reports/urique.htm
+http://www.azjungle.com/zonenetbusinessopportunity.html
+http://www.azkidsnet.com/freddy.htm
+http://www.azleg.state.az.us/FormatDocument.asp?inDoc=/legtext/47leg/1R/adopted/H.2462-SE-TRANS.DOC.htm
+http://www.azlyrics.com/lyrics/victoriabeckham/iwish.html
+http://www.azmc.org/aboutus.asp?from=founders
+http://www.azom.com/details.asp?ArticleID=2617
+http://www.azonano.com/news_old.asp?newsID=122
+http://www.azpost.state.az.us/integrity_bulletin/Integrity%20Bulletin%20Vol%2013.htm
+http://www.azpost.state.az.us/integrity_bulletin/Integrity%20Bulletin%20Vol%2020.htm
+http://www.azstarnet.com/dailystar/relatedarticles/20192.php
+http://www.azstarnet.com/dailystar/relatedarticles/57606.php
+http://www.azstarnet.com/neweconomy/biotech1.html
+http://www.azstarnet.com/sn/golf/58725.php
+http://www.azstarnet.com/sn/health/58878.php
+http://www.azstarnet.com/sn/vote_president/45978.php
+http://www.aztriad.com/dl071899.html
+http://www.azundris.com/hacks/ideas/
+http://www.azzcardfile.com/collections/transcriptionists.html
+http://www.b-1st.com/site.php/8.html
+http://www.b-s-h.org.uk/bulletin00.htm
+http://www.b.shuttle.de/wifo/finn/sc-01-c4.htm
+http://www.b2s.com/termsofuse.php
+http://www.b3ta.com/board/2208988
+http://www.b3ta.com/newsletter/issue175/
+http://www.b3ta.com/newsletter/issue185/
+http://www.b975.com/listingsEntry.asp?ID=245621&PT=Community
+http://www.ba.kent.edu:1443/QueryFilter.asp
+http://www.baads.org/news.htm
+http://www.baal.org.uk/seminar_102.htm
+http://www.baas.ac.uk/resources/asib/asibdets.asp?ordernum=7829&head=7829
+http://www.babalublog.com/cgi-bin/mt/valment.cgi?entry_id=1858
+http://www.babcp.org.uk/training/cbtcourses.htm
+http://www.babraham.co.uk/commercial_2.html
+http://www.babybumblebee.com/company/parent_com.cfm
+http://www.babycenter.com/baby/babydevelopment/
+http://www.babycenter.com/baby/babydevelopment/index
+http://www.babycenter.com/bc/plus/readyornot/?binky=CON:TNAV:PLS
+http://www.babycenter.com/comments/baby/babycare/babysoothing/13460
+http://www.babycenter.com/comments/baby/babydevelopment/2347
+http://www.babycenter.com/comments/baby/babyritual/9849
+http://www.babycenter.com/comments/baby/babytravel/11770
+http://www.babycenter.com/comments/pregnancy/pregcomplications/252
+http://www.babycenter.com/comments/pregnancy/prenatalhealth/1480
+http://www.babycenter.com/comments/toddler/toddlerdevelopment/6847
+http://www.babycenter.com/development
+http://www.babycenter.com/dilemma/toddler/toddlerbehavior/1353987.html
+http://www.babycenter.com/dilemma/toddler/toddlerdevelopment/1409439.html
+http://www.babycenter.com/dilemma/toddler/toddlerfeeding/300.html
+http://www.babycenter.com/expert/2709.html
+http://www.babycenter.com/expert/baby/babydevelopment/2347.html
+http://www.babycenter.com/expert/baby/babydevelopment/6569.html
+http://www.babycenter.com/expert/preconception/gettingpregnant/1404503.html
+http://www.babycenter.com/expert/toddler/toddlerdevelopment/14007.html
+http://www.babycenter.com/expert/toddler/toddlerdevelopment/6847.html
+http://www.babycenter.com/general/fetaldevelopment/pregnancy/1290794.html
+http://www.babycenter.com/refcap/1480.html
+http://www.babycenter.com/refcap/baby/babybreastfeed/8910.html
+http://www.babycenter.com/refcap/baby/babydevelopment/6903.html
+http://www.babycenter.com/refcap/baby/babytravel/6991.html
+http://www.babycenter.com/refcap/baby/postpartumsex/1282147.html
+http://www.babycenter.com/refcap/preconception/gettingpregnant/1307393.html
+http://www.babycenter.com/refcap/preconception/gettingpregnant/2915.html
+http://www.babycenter.com/refcap/pregnancy/pregnancynutrition/3542.html
+http://www.babycenter.com/refcap/pregnancy/prenatalhealth/1480.html
+http://www.babycenter.com/refcap/pregnancy/prenatalhealth/1480.html?ccRelLink=&url=%2Fgeneral%2F9254.html&xTopic=prenattest&bus=content
+http://www.babycenter.com/refcap/toddler/toddlerdevelopment/11739.html
+http://www.babycenter.com/refcap/toddler/toddlerdevelopment/1213788.html
+http://www.babycenter.com/refcap/toddler/toddlerdevelopment/6507.html
+http://www.babycenter.com/refcap/toddler/toddlerritual/9833.html
+http://www.babycentre.co.uk/bbs/536611/
+http://www.babycentre.co.uk/bbs/545588/
+http://www.babycentre.co.uk/expert/2069.html
+http://www.babycentre.co.uk/expert/561011.html
+http://www.babycentre.co.uk/refcap/178.html
+http://www.babycentre.co.uk/refcap/196.html
+http://www.babycentre.co.uk/refcap/3585.html
+http://www.babycentre.co.uk/refcap/545272.html
+http://www.babycentre.co.uk/refcap/550468.html
+http://www.babycentre.co.uk/refcap/7864.html
+http://www.babycentre.co.uk/tips/1551.html
+http://www.babycentre.co.uk/tips/1614.html
+http://www.babycentre.co.uk/tips/559067.html
+http://www.babycentre.co.uk/tips/563827.html
+http://www.babyfeathers.net/fine_print.htm
+http://www.babyfriendly.org.uk/uklaw.asp
+http://www.babynames.com.au/Child-Development/0-3-months.htm
+http://www.babynames.com.au/Child-Development/3-6-months.htm
+http://www.babynames.com.au/Child-Development/6-9-months.htm
+http://www.babynamesofireland.com/pages/boy-names-a-c.html
+http://www.babynamesworld.com/forum/topic22513.html
+http://www.babypolargear.com/infant_car_seat_cover.htm
+http://www.babyshopmagazine.com/fall00/mistakes.htm
+http://www.babyswimming.com/Bio.htm
+http://www.babyuniverse.com/cat.asp?store=baby&catid=173&secid=16&lang=
+http://www.babyuniverse.com/pro.asp?store=baby&lang=&id=67852&catid=173
+http://www.babyworld.co.uk/information/birth/birth_plan/bethhomebirthplan.asp
+http://www.babyzone.com/features/content/display.asp?ContentID=1571
+http://www.babyzone.com/features/expertsqa/default.asp?QAID=15559&ExpertID=1
+http://www.bach-cantatas.com/Articles/Keyboard-Temperament%5BFrancis%5D-FB-2.htm
+http://www.bachsociety.com/constitution.html
+http://www.back-to-iraq.com/archives/000218.php
+http://www.back.com/articles-chicken.html
+http://www.back2college.com/asktheexpertsforum.htm
+http://www.back2college.com/asktheexpertsforum1104a.htm
+http://www.back2college.com/bookshelf2.htm
+http://www.backache.md/
+http://www.backandforthfilms.com/pages/films/facevalueproject.html
+http://www.backcare.co.uk/solutions/desk
+http://www.backcare.co.uk/solutions/desk?print_bool=1
+http://www.backfreechurch.co.uk/History/history.htm
+http://www.backpacker.co.uk/rugbyabfranceweekendcoach.htm
+http://www.backpacker.co.uk/rugbyausfranceweekend.htm
+http://www.backpacker.co.uk/rugbyausfranceweekendcoach.htm
+http://www.backpacker.ie/article.php?id=219
+http://www.backpackgeartest.org/reviews/Packs/Infant%20and%20Child%20Carriers/Yakima%20Grasshopper%20Child%20Carrier/Curt%20Peterson/Long%20Term%20Report/
+http://www.backpackgeartest.org/reviews/Shelters/Hammocks/Lawson%20Hammock/David%20Foote/2nd%20Report/
+http://www.backpackgeartest.org/reviews/Sleep%20Gear/Pads%20and%20Air%20Mattresses/Bozeman%20Mountain%20Works%20TorsoLite/Jim%20Sabiston/Initial%20Report/
+http://www.backpackgeartest.org/reviews/Snow%20Gear/Snowshoes/MSR%20Denali%20Classics/MSR%20Denali%20Classic%20Snowshoes%20%20Marge%20Prothman/
+http://www.backpacking.net/bad-back.html
+http://www.backpacking.net/soapbox.html
+http://www.backspace.com/notes/topic/energy
+http://www.backstage.com/backstage/features/article_display.jsp?vnu_content_id=1000964042
+http://www.backstage.com/backstage/news/article_display.jsp?vnu_content_id=1000781078
+http://www.backtothebible.org/gateway/today/18562
+http://www.backtothebible.org/gateway/today/18673
+http://www.backtothebible.org/gateway/today/20842
+http://www.backtothebible.org/gateway/today/20917
+http://www.backtothebible.org/radio/today/
+http://www.backtothecottage.co.uk/ffc.htm
+http://www.backwoodshome.com/articles/silveira58.html
+http://www.backwoodshome.com/articles/williams45.html
+http://www.backwoodshome.com/articles2/chance88.html
+http://www.backwoodshome.com/energy.html
+http://www.backwoodshome.com/store/files/anws.html
+http://www.backyardgardener.com/article/greenhouse.html
+http://www.backyardgardener.com/organic/oct00.htm
+http://www.backyardobservatories.com/comments.htm
+http://www.bacp.co.uk/prof_conduct/faq.html
+http://www.bacp.co.uk/prof_conduct/subject_complaint.html
+http://www.bacp.co.uk/shop/terms.html
+http://www.bad.org.uk/doctors/guidelines/aids.asp
+http://www.badanalysis.com/blog/
+http://www.badanalysis.com/blog/?m=200303
+http://www.badastronomy.com/bablog/
+http://www.badastronomy.com/bablog/?p=33
+http://www.badastronomy.com/bablog/?p=67
+http://www.badbishops.com/leu/cathchur.htm
+http://www.baddteddy.com/stories/baby.htm
+http://www.badfaithinsurance.org/reference/HL/0119a.htm
+http://www.badgeraap.org/index.shtml
+http://www.badgerrealty.com/services.html
+http://www.badgirls.co.uk/arc/arc_s3/arc_s3ep11.html
+http://www.badgirlsonly.com/mardi-gras-2005.htm
+http://www.badil.org/Publications/Press/2001/press204-01.htm
+http://www.badmanrecordingco.com/buy/default.aspx?productDetail=bread
+http://www.badmintoncentral.com/forums/showthread.php?goto=lastpost&t=23804
+http://www.badmothersclub.co.uk/jsp/index.jsp?lnk=306
+http://www.badmovieplanet.com/3btheater/i/idrinkyourblood.html
+http://www.badmovies.org/movies/attackmars/
+http://www.badrap.org/rescue/myths.cfm
+http://www.badsamaritan.com/authors/mg.php
+http://www.badsamaritan.com/original/archives/001934.php
+http://www.badsoftware.com/sepg.htm
+http://www.bae.ncsu.edu/programs/extension/publicat/postharv/ag-413-7/
+http://www.bae.ncsu.edu/programs/extension/publicat/wqwm/he419.html
+http://www.baeabermaw.com/Weddings/YourWedding.htm
+http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
+http://www.baen.com/chapters/W200011/0671319744___1.htm
+http://www.baen.com/chapters/W200308/0743436199___3.htm
+http://www.baen.com/chapters/W200408/0743488415___1.htm
+http://www.baen.com/library/home.htm
+http://www.baen.com/library/palaver6.htm
+http://www.bafa.de/1/en/tasks/01_control.htm
+http://www.bafrenz.com/birds/Belize03/BZ3-C8.htm
+http://www.bag2002.co.uk/
+http://www.bagelhole.org/article.php/Miscellaneous/340/
+http://www.bagelhole.org/article.php/Transportation/171/
+http://www.bagheera.com/inthewild/van_anim_turtle.htm
+http://www.bagroup.com/Pages/briefs/empress_walk.html
+http://www.bahaibookstore.com/client/client_pages/bahai_glossary.cfm
+http://www.bahrain.bnpparibas.com/en/information/legal_information.asp
+http://www.bainbridgeisland.org/vobis/
+http://www.bajr.org/ResourcesLinks/ChooseResourceAll.asp
+http://www.bajr.org/ResourcesLinks/ChooseResourceRecordsLegal.asp
+http://www.bajr.org/ResourcesLinks/ChooseResourceRecordsMagazine.asp
+http://www.bakercommunications.com/
+http://www.bakersfieldcondors.com/condors_town/events.asp
+http://www.bakkermarine.com/search.php?attempt=1
+http://www.bakkermarine.com/search.php?attempt=1&condition=1
+http://www.bakkermarine.com/search.php?attempt=1&searchstyle=2
+http://www.balaams-ass.com/alhaj/append-9.htm
+http://www.balagan.org.uk/war/1700/rules_1700.htm
+http://www.balance-and-dizziness.com/
+http://www.balancetv.ca/balancetv/client/en/Obesity_Special/DetailNews.asp?idNews=3
+http://www.baldrus.com/askthebaldguy.shtml
+http://www.baldwins.com.au/a_precgtasset.htm
+http://www.bali-information.com/expat_forum/viewtopic.php?p=9485
+http://www.baliblog.com/
+http://www.baliblog.com/03-01/may-i-sit-here.html
+http://www.balihilton.com/corp/links14.html
+http://www.balispirit.com/food/
+http://www.balkan-speleo.org/modules.php?name=News&file=article&sid=7
+http://www.ballet-dance.com/200403/
+http://www.ballet-dance.com/200411/articles/ABT20041024.html
+http://www.balloontales.com/articles/tutorial/part2.html
+http://www.ballot-access.org/2004/0501.html
+http://www.ballymena.gov.uk/economic.asp
+http://www.ballymoney.gov.uk/htmlsite/heritage.asp?id=22&step=2&pstring=13,22
+http://www.ballymoney.gov.uk/htmlsite/heritage.asp?id=22&step=2&pstring=13,22&output=print
+http://www.ballymoney.gov.uk/htmlsite/heritagedetails.asp?id=40
+http://www.balticon.org/
+http://www.baltimorepsych.com/On_Beyond_Ritalin.htm
+http://www.baltimorepsych.com/aspergers.htm
+http://www.baltimoreravens.com/template.php?subsection=single_news_show&section=press&content_id=5678&section_id=109
+http://www.baltimoresun.com/news/local/bal-hit29,1,1293257.story?coll=bal-home-headlines
+http://www.baltimoresun.com/news/local/howard/bal-ho.eligibility02feb02,1,6162961.story?coll=bal-local-howard
+http://www.balynce.com/breyer/
+http://www.bambi.net/bob/homebrew.html
+http://www.bamburghresearchproject.co.uk/media.htm
+http://www.bamford.com.au/rampump/qa.htm
+http://www.bampfa.berkeley.edu/exhibits/rubens/essays/essay01.html
+http://www.bampfa.berkeley.edu/exhibits/rubens/essays/essay02.html
+http://www.bampfa.berkeley.edu/exhibits/rubens/exhibition/head5detail.html
+http://www.banbloodsports.com/pqs.htm
+http://www.banc.org.uk/ecosarta/arts23_1/ecosart3.html
+http://www.bandbhac.org.uk/cr192-111999.html
+http://www.bandddesigns.com/energy/
+http://www.bandlife.com/stories.cfm?getstory=714
+http://www.bandlink.net/forum/topic.asp?ARCHIVE=true&TOPIC_ID=21976
+http://www.bandlink.org/director/minute98.htm
+http://www.bandsupplies.co.uk/Disclaimer.asp
+http://www.banffcentre.ca/media_room/Media_Releases/Arts_MVA/2002/020111_WIDC.htm
+http://www.banfffilmlab.com/digitalimage.html
+http://www.bangitout.com/reviews83.html
+http://www.bangkok-hotel.net/go/faq.htm
+http://www.bangkokpost.co.th/election2005/norteast.html
+http://www.bangkokpost.net/News/
+http://www.bangkokpost.net/ecoreviewye2004/health.html
+http://www.bangkokpost.net/ecoreviewye2004/media.html
+http://www.bangkokpost.net/education/site2002/cvdc1801.htm
+http://www.bangkokpost.net/education/site2003/cvoc0703.htm
+http://www.bangkokpost.net/education/site2003/ftdc2303.htm
+http://www.bangkokpost.net/education/site2005/wnfb0805.htm
+http://www.bangkokpost.net/scorecard2005/
+http://www.bangladesh.embassy.gov.au/consular.htm
+http://www.bangladeshobserveronline.com/young/p1_2.htm
+http://www.bangor.ac.uk/ml/abroad.htm
+http://www.bangor.ac.uk/ml/mmlc-eng.htm
+http://www.bangthecorner.com/da/14430
+http://www.bangthecorner.com/default.asp?m=da&id=14430
+http://www.bank.guide2care.com/
+http://www.bankdirector.com/issues/articles.pl?article_id=10002
+http://www.bankdirector.com/issues/articles.pl?article_id=10005
+http://www.bankdirector.com/issues/articles.pl?article_id=11509
+http://www.bankdirector.com/issues/articles.pl?article_id=11509&V=1
+http://www.bankdirector.com/issues/articles.pl?article_id=11512&V=1
+http://www.bankdirector.com/issues/articles.pl?article_id=11649
+http://www.bankdirector.com/supplements/articles.pl?article_id=10969
+http://www.bankdirector.com/supplements/articles.pl?article_id=11309
+http://www.bankerme.com/bme/2003/may/risk_management_2.asp
+http://www.bankersonline.com/lending/ci-appraisaleval.html
+http://www.bankersonline.com/security/fraudgallery1002.html
+http://www.banking.state.tx.us/exec/speeches/04-14-98.htm
+http://www.banknotes.com/pricelst.htm
+http://www.bankofamerica.com/creditcards/application/modules/mod_page_popup.cfm?product_id=mexicana_plat_visa&content=tc_print&
+http://www.bankofamerica.com/military/index.cfm?view=DISCLOSURE
+http://www.bankofamerica.com/newsroom/pr/pr-lobs.cfm
+http://www.bankofamerica.com/newsroom/press/archives.cfm?LOBID=8
+http://www.bankofamerica.com/newsroom/presskits/
+http://www.bankofamerica.com/newsroom/presskits/view.cfm?page=climateandforests
+http://www.bankofamerica.com/smallbusiness/creditcards/data/terms_popup.cfm?app=alaska_air_creditcard&orig=&nav=
+http://www.bankofamerica.com/supplierdiversity/index.cfm?template=sddi_faqs_ov.cfm
+http://www.bankofbotswana.bw/article.php?articleid=143
+http://www.bankofcanada.ca/en/famescript.htm
+http://www.bankofcanada.ca/en/repo_comments.htm
+http://www.bankofcanada.ca/en/speeches/2004/sp04-5.htm
+http://www.bankofcanada.ca/en/speeches/spde01.htm
+http://www.bankofengland.co.uk/education/poundsandpence/
+http://www.bankofengland.co.uk/education/targettwopointzero/mpframework/independentBankEngland.htm
+http://www.bankofengland.co.uk/inflationreport/infrep.htm
+http://www.bankofengland.co.uk/mpc/
+http://www.bankofengland.co.uk/publications/speeches/monetary.htm
+http://www.bankofengland.co.uk/speeches/speech138.htm
+http://www.bankofengland.co.uk/speeches/speech97.htm
+http://www.bankofireland.ie/html/gws/personal/buy_house/step_by_step.html
+http://www.bankofireland.ie/html/gws/personal/credit_card/faqs/
+http://www.bankofireland.ie/html/gws/personal/insurance/terms.html
+http://www.bankofscotland.ie/company/articles/article4.htm
+http://www.bankofscotlandhalifax.co.uk/creditcards/secure_faqs.shtml
+http://www.bankofscotlandhalifax.co.uk/savingsandisas/halifax_impinfo.shtml
+http://www.bankofthejames.com/disclaimer.htm
+http://www.bankone.com/answers/BolAnswersDetail.aspx?top=you&segment=PFS&topic=DebitCards&item=UnitedMileagePlusTHEONECard
+http://www.bankone.com/answers/BolAnswersDetail.aspx?top=you&segment=PFS&topic=Promotion&item=SettingUpPayees
+http://www.bankrate.com/brm/cheap_home.asp
+http://www.bankrate.com/brm/cheap_home.asp?link=2
+http://www.bankrate.com/brm/itax/edit/news/stories/news_071900.asp
+http://www.bankrate.com/brm/itax/tips/20010319a.asp
+http://www.bankrate.com/brm/itax/tips/20010327a.asp
+http://www.bankrate.com/brm/news/advice/20031223a1.asp?prodtype=advice
+http://www.bankrate.com/brm/news/auto/20001129a.asp
+http://www.bankrate.com/brm/news/auto/20040413a1.asp
+http://www.bankrate.com/brm/news/bank/20020823c.asp
+http://www.bankrate.com/brm/news/biz/Cashflow_banking/20021002a.asp
+http://www.bankrate.com/brm/news/checkup/savings2.asp
+http://www.bankrate.com/brm/news/debt/20021018a.asp
+http://www.bankrate.com/brm/news/mtg/20010111a.asp
+http://www.bankrate.com/brm/news/mtg/20010830a.asp
+http://www.bankrate.com/brm/news/mtg/20010830a.asp?prodtype=loan
+http://www.bankrate.com/brm/news/real-estate/20030918a1.asp
+http://www.bankrate.com/brm/news/real-estate/20040910a2.asp?print=on
+http://www.bankrate.com/brm/rate/movingon_home.asp
+http://www.banktech.com/features/showArticle.jhtml?articleID=14701469
+http://www.banktech.com/news/showArticle.jhtml?articleID=164302111
+http://www.banktech.com/showArticle.jhtml?articleID=56900373
+http://www.banktech.com/story/showArticle.jhtml?articleID=59200015
+http://www.banned-books.com/truth-seeker/1995archive/122_2/ts222n.html
+http://www.bannerofliberty.com/
+http://www.banneroflove.net/issues/2000s/2002/2002-01_tour.htm
+http://www.banterist.com/archivefiles/000213.html
+http://www.banyule.vic.gov.au/content.aspx?TopicID=823
+http://www.baobabtravel.com/Zambia/lower_zambezi_national_park.shtm
+http://www.bapo.com/BAPOConf2005.php
+http://www.baptist-health.com/orthopedics/faqs/faqs.asp?s=7
+http://www.baptist2baptist.net/Issues/Marriage/MohlerFeb062004.asp
+http://www.baptist2baptist.net/Issues/Marriage/MohlerOct292003.asp
+http://www.baptistboard.com/ubb/ultimatebb.php/topic/3/2745/2.html
+http://www.baptisthealth.net/greystone/content.jsp?pageid=P00148
+http://www.baptistonline.org/health/healthieryou/family/CurbCompulsiveSpend.asp
+http://www.baptistonline.org/health/healthieryou/family/cyclestress.asp
+http://www.baptistregional.com/brmc.cfm
+http://www.baptistregional.com/brmc.cfm?renderforprint=1
+http://www.barabooyoga.com/wisconsin_acting_classes.html
+http://www.baraita.net/blog/archives/2005_01.html
+http://www.baraita.net/blog/archives/2005_05.html
+http://www.barbadosadvocate.com/NewViewNewsleft.cfm?Record=20342
+http://www.barbara-bell.com/alzheimers.html
+http://www.barbarabretton.com/books/chances_are/index.shtml
+http://www.barbarafeldman.com/cat_working_at_home.html
+http://www.barbaralarock.com/presentations.htm
+http://www.barbarasehr.com/
+http://www.barbsbooks.com/LITguide.htm
+http://www.barbsbooks.com/newARV1.htm
+http://www.barbsbooks.com/physical.htm
+http://www.barca.fsnet.co.uk/punic-wars-muhlberger.htm
+http://www.barcelona-tourist-guide.com/access-barcelona-disabled.html
+http://www.barcelonareview.com/20/e_ln.htm
+http://www.barcelonareview.com/28/e_jk.htm
+http://www.barcelonareview.com/32/e_ka.htm
+http://www.barclays.com/supplier/aiming_high_feedback.html
+http://www.barcouncil.org.uk/document.asp?documentid=2886&languageid=1
+http://www.barcouncil.org.uk/document.asp?documentid=2968&languageid=1
+http://www.barcouncil.org.uk/document.asp?languageid=1&documentid_ddl=1258&documentid=2488&original_documentid=1258
+http://www.barefootsworld.net/13essay.html
+http://www.barefootsworld.net/bftwrite.html
+http://www.barefootsworld.net/monsterunderbed.html
+http://www.barficulture.com/community/chilling/topic.php/150239/
+http://www.barficulture.com/reality/article.php/culture/154/
+http://www.bargainseeker.com.au/warranty.html
+http://www.barking-dagenham.gov.uk/5-work/business/commercial-to-let.cfm
+http://www.barna.org/FlexPage.aspx?Page=BarnaUpdate&BarnaUpdateID=97
+http://www.barnard.edu/dance/majorpage.html
+http://www.barnard.edu/fitbear/flex.htm
+http://www.barnard.edu/hr/info.htm
+http://www.barnesandnoble.com/drweil/index.asp
+http://www.barnesjewish.org/groups/default.asp?NavID=2029
+http://www.barnesreview.org/July_2003/Robert_F/robert_f.html
+http://www.barnsley.gov.uk/education/doing_business.asp
+http://www.barnsleyfc.premiumtv.co.uk/page/MatchReports/0,,10309~27050,00.html
+http://www.barnstablepatriot.com/legals__doc_26_6519.html
+http://www.baronage.co.uk/bphtm-01/badges02.html
+http://www.baronage.co.uk/bphtm-03/hogarth1.htm
+http://www.baroquemusic.org/barvlnbo.html
+http://www.baroquetrumpet.com/trombones.htm
+http://www.barr-rosin.ca/chinese/fields/c1.html
+http://www.barr-rosin.ca/english/fields/c1.html
+http://www.barracudanetworks.com/support/instant_replacement.php
+http://www.barronvangortoth.com/?con=bunny&doc=bunny/vol005
+http://www.barrowdowns.com/
+http://www.barrowlawfirm.com/
+http://www.barrycomp.com/safety_rep190105.htm
+http://www.barryd.com/Airsoft/airsoftreviews.htm
+http://www.barryfarber.com/arton/ibd.html
+http://www.barrymoltz.com/book/
+http://www.barse.org/blog/archives/2004_09.html
+http://www.bartcop.com/
+http://www.bartcop.com/diebold.htm
+http://www.barthanderson.com/wordblog/2005.06.01_arch.html
+http://www.bartleby.com/1004/13.html
+http://www.bartleby.com/11/9006.html
+http://www.bartleby.com/124/pres31.html
+http://www.bartleby.com/124/pres41.html
+http://www.bartleby.com/124/pres59.html
+http://www.bartleby.com/187/3.html
+http://www.bartleby.com/197/33.html
+http://www.bartleby.com/268/10/7.html
+http://www.bartleby.com/268/2/8.html
+http://www.bartleby.com/268/4/3.html
+http://www.bartleby.com/302/1802.html
+http://www.bartleby.com/320/2/3.html
+http://www.bartleby.com/33/1001.html
+http://www.bartleby.com/45/5/205.html
+http://www.bartleby.com/61/5.html
+http://www.bartleby.com/70/1743.html
+http://www.bartlett.ucl.ac.uk/dpu/programmes/msc_dp/ued.htm
+http://www.baruch.cuny.edu/magazine/fall04/notes1.html
+http://www.basc.org.uk/content/choosingadogarticle
+http://www.base21.org/show/show.php?p_cd=0&p_dv=0&p_docnbr=29789
+http://www.base21.org/show/show.php?p_cd=205&p_dv=0&p_docnbr=29789
+http://www.baseball-almanac.com/articles/george_steinbrenner_biography.shtml
+http://www.baseball-almanac.com/hero/hero2002a.shtml
+http://www.baseball-almanac.com/teams/kcratte.shtml
+http://www.baseball-almanac.com/yearly/yr1903n.shtml
+http://www.baseball-almanac.com/yearly/yr1927a.shtml
+http://www.baseball-almanac.com/yearly/yr1927n.shtml
+http://www.baseball-almanac.com/yearly/yr1989a.shtml
+http://www.baseball-almanac.com/yearly/yr1989n.shtml
+http://www.baseball-fever.com/showthread.php?t=23035
+http://www.baseball-fever.com/showthread.php?t=6235
+http://www.baseballevolution.com/asher/what.html
+http://www.baseballprospectus.com/article.php?articleid=1974
+http://www.baseballprospectus.com/news/20020620balls.shtml
+http://www.baseballthinkfactory.org/files/primer/discussion/sorry_for_the_technical_problems/
+http://www.basecamphq.com/
+http://www.basees.org.uk/~conference/abstracts-abc.html
+http://www.basegear.com/hotbuys.html
+http://www.baselinedgsi.com/applications/case_hist8.asp
+http://www.baselinemag.com/print_article2/0,2533,a=132584,00.asp
+http://www.baselinemag.com/print_article2/0,2533,a=152141,00.asp
+http://www.basementideas.com/mag.php
+http://www.basenta.co.uk/useful_links/viagra_europe.html
+http://www.baseops.net/basictraining/airforce.html
+http://www.basic-skills.co.uk/site/page.php?cms=4&p=264&action=changetextSize&txtsz=plus
+http://www.basicint.org/WT/pubs.htm
+http://www.basicint.org/WT/smallarms/main.htm
+http://www.basicint.org/pubs/BReports/BR77.htm
+http://www.basicint.org/pubs/NATObref.htm
+http://www.basicint.org/pubs/Notes/BN041118.htm
+http://www.basicint.org/pubs/Research/1998nuclearfutures5.htm
+http://www.basiclaw.net/Principles/Competitive%20Governments.htm
+http://www.basicsoftrading.com/journal/2002-3/03-08/
+http://www.basictechnologies.gov.uk/site/about/default.cfm?subcat=TechTransfer
+http://www.basketball-drills-and-plays.com/youth-basketball-drills.html
+http://www.basketball.unsw.edu.au/Administration/Meetings/2002/Minutes/05/
+http://www.basketball.unsw.edu.au/Administration/Meetings/2002/Minutes/06/
+http://www.basketballvideosusa.com/passing
+http://www.bassettrealty.com/area_information.htm
+http://www.basspro.com/servlet/catalog.CFPage?&mode=article&objectID=29715&cmid=AOL3_Bass_Tackle
+http://www.bassresource.com/fishing/bass_tournament_strategies.html
+http://www.bastards.org/bq/bq15/babylife.htm
+http://www.bastun.nu/documents/minutes06102001.htm
+http://www.basw.co.uk/articles.php?articleId=83
+http://www.batcon.org/binb/doityourself.html
+http://www.batcon.org/discover/rabies.html
+http://www.bateylink.org/policypontealdia.htm
+http://www.batguano.com/Xqueenofprussia.html
+http://www.bath.ac.uk/bucs/accept-regs.shtml
+http://www.bath.ac.uk/bucs/outhours.shtml
+http://www.bath.ac.uk/esml/profiles/german.htm
+http://www.bath.ac.uk/internal/news/fbstrikeupdate.htm
+http://www.bath.ac.uk/internal/news/promotions-nov04
+http://www.bath.ac.uk/internal/news/tsunami-support
+http://www.bath.ac.uk/international-office/orientation/
+http://www.bath.ac.uk/physics/pgadmissions/
+http://www.bath.ac.uk/staff-development/sdu/service%20level.htm
+http://www.bathnes.gov.uk/BathNES/transportandroads/transportationstrategy/plansandstrategies/LocalTransportPlan/default.htm
+http://www.bathspa.ac.uk/about/profiles/profile.asp?user=academic%5Chilt1
+http://www.bathspa.ac.uk/prospectus/students-union.asp
+http://www.bathwindsorhotel.com/location/mendips.html
+http://www.batnet.com/mfwright/sputnik.html
+http://www.batnet.com/seeandsea/latest/mag3roe_2.html
+http://www.batod.org.uk/index.php?id=/batod/regions/scotland/scotcurrentnews.htm
+http://www.batory.org.pl/art/cultural-policy/guidelines.html
+http://www.batteryinflux.com/interviews/digizine.htm
+http://www.batterysavers.com/
+http://www.battle.net/war2/gs/control.shtml
+http://www.battle.net/war3/basics/specialcommands.shtml
+http://www.battleforaustralia.org.au/kokoda11.html
+http://www.battlefront.co.nz/Article.asp?ArticleID=324
+http://www.battleoffulford.org.uk/ev_york_tidal.htm
+http://www.baudline.com/manual/average.html
+http://www.bauerinnercity.co.uk/pages/news.htm
+http://www.bauhaus.de/english/bauhaus1919/zeittafel1919.htm
+http://www.bavaria.com/misc/useful_us.html
+http://www.bavf.org/shaft/010430.htm
+http://www.bawtc.com/company/membership.asp?PartnerID=
+http://www.baxka.com/hcmc.htm
+http://www.baxter.com/about_baxter/news_room/news_releases/2005/04-11-05-sackett.html
+http://www.baxterregional.org/body.cfm?id=51
+http://www.bayarea-redcross.org/topnav/news/2004/sept04.htm
+http://www.baycongroup.com/education/ed_ESL.htm
+http://www.baycouples.com/articles/first_time.html
+http://www.baydog.com/dogads2.htm
+http://www.bayer.com/stockholders-newsletter-1q2005-id1405/financial_statements/notes.php
+http://www.bayercropscienceus.com/=file:Labels%20MSDS/20050112170600109974094437384248/file
+http://www.bayerdiag.com/conditions_of_use.cfm
+http://www.bayhealth.org/hipaa/faq.asp
+http://www.bayislandsvoice.com/
+http://www.bayjournal.com/article.cfm?article=2464
+http://www.bayjournal.com/article.cfm?article=66
+http://www.baylor.edu/hr_services/index.php?id=1784
+http://www.baylor.edu/pr/news.php?action=story&story=1681
+http://www.baylor.edu/pr/news.php?action=story&story=5283
+http://www.baylor.edu/scholarships/index.php?id=1994
+http://www.baylor.edu/student_union/index.php?id=8194
+http://www.baymarineelectronics.co.nz/ordering.html
+http://www.baynature.com/2002julysept/etg_2002julysept.html
+http://www.bayrose.co.uk/faqs.htm
+http://www.bayshoreeducational.com/bkintro.html
+http://www.bayst-search-engine-optimization.com/large-seo-companies.html
+http://www.baytown.org/
+http://www.bazelon.org/newsroom/10-24-02overlandpark.htm
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=122&a=393
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=143&a=5653&view=print
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=145
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=145&a=5067
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=223
+http://www.bba.org.uk/bba/jsp/polopoly.jsp?d=259&a=3545
+http://www.bbaf-arts.org.uk/sites/bbaf/art-in-env/cat.asp?cat=13
+http://www.bbaf-arts.org.uk/sites/bbaf/art-in-env/cat.asp?cat=4
+http://www.bbb.org/alerts/article.asp?ID=441
+http://www.bbbsilicon.org/news_Nov2003.html
+http://www.bbc.co.uk/6music/shows/music_week/debate_manchester.shtml
+http://www.bbc.co.uk/africalives/features/girl.shtml
+http://www.bbc.co.uk/asiannetwork/presenters/top40_soundtracks_no23.shtml
+http://www.bbc.co.uk/bbctwo/listings/programme.shtml?day=monday&service_id=4286&filename=20050207/20050207_2140_4286_48618_20
+http://www.bbc.co.uk/beasts/teachers/what_killed_dinosaurs.shtml
+http://www.bbc.co.uk/blackcountry/uncovered/walk_through_time/03.shtml
+http://www.bbc.co.uk/blast/music/faq/faq33.shtml
+http://www.bbc.co.uk/blast/music/faq/faq34.shtml
+http://www.bbc.co.uk/burmese/forum/story/2004/09/040909_nld_central_comm_revival.shtml
+http://www.bbc.co.uk/cbeebies/grownups/about_cbeebies/shows/somethingspecial.shtml?ss_teachers
+http://www.bbc.co.uk/cbeebies/tikkabilla/music/wish.shtml
+http://www.bbc.co.uk/comedy/guide/articles/y/yesminister_7777145.shtml
+http://www.bbc.co.uk/comedy/news/2004/11/12/15432.shtml
+http://www.bbc.co.uk/commissioning/contacts/index.shtml?genre=D&category=EB&template=contacts.tmpl&data=contacts.dat
+http://www.bbc.co.uk/commissioning/contacts/index.shtml?genre=L&category=EB&template=contacts.tmpl&data=contacts.dat
+http://www.bbc.co.uk/commissioning/marketresearch/audiencegroup3.shtml
+http://www.bbc.co.uk/communicate/archive/sonofgod/page1.shtml
+http://www.bbc.co.uk/crime/caseclosed/florence1.shtml
+http://www.bbc.co.uk/crime/caseclosed/rillingtonplace.shtml
+http://www.bbc.co.uk/crime/caseclosed/simpsoncase.shtml
+http://www.bbc.co.uk/crime/fighters/dayinthelife/btp.shtml
+http://www.bbc.co.uk/crime/law/becomingapoliceofficer.shtml
+http://www.bbc.co.uk/crime/law/communitylegalservice.shtml
+http://www.bbc.co.uk/devon/news_features/2004/chilli_farmers.shtml
+http://www.bbc.co.uk/dna/collective/A1316071
+http://www.bbc.co.uk/dna/h2g2/A3031949
+http://www.bbc.co.uk/dna/h2g2/A734933
+http://www.bbc.co.uk/dna/h2g2/alabaster/A524242
+http://www.bbc.co.uk/dna/h2g2/alabaster/A536410
+http://www.bbc.co.uk/dna/ican/A2369892
+http://www.bbc.co.uk/dna/ican/speedbumps
+http://www.bbc.co.uk/dna/ww2/A3026693
+http://www.bbc.co.uk/dna/ww2/Help-Technical
+http://www.bbc.co.uk/dna/ww2/Story-Sort
+http://www.bbc.co.uk/education/beyond/factsheets/changing_r_z.shtml
+http://www.bbc.co.uk/education/beyond/factsheets/printable/changing_rz_print.html
+http://www.bbc.co.uk/election97/background/parties/panblair2.htm
+http://www.bbc.co.uk/essex/features/gardening/december_2004.shtml
+http://www.bbc.co.uk/films/2001/05/04/romeo_juliet_1996_review.shtml
+http://www.bbc.co.uk/films/2004/06/01/daniel_radcliffe_emma_watson_rupert_grint_azkaban_interview.shtml
+http://www.bbc.co.uk/food/tv_and_radio/vegtalk_brazilian.shtml
+http://www.bbc.co.uk/freshstart/start_a_business/tools.shtml
+http://www.bbc.co.uk/gardening/tv_and_radio/ginvaders_ten.shtml
+http://www.bbc.co.uk/health/conditions/bedwetting1.shtml
+http://www.bbc.co.uk/health/conditions/cancer/usefulcontacts_index5.shtml
+http://www.bbc.co.uk/health/talking/features/stress.shtml
+http://www.bbc.co.uk/history/scottishhistory/modern/features_modern_women.shtml
+http://www.bbc.co.uk/history/scottishhistory/union/features_union_jacobites.shtml
+http://www.bbc.co.uk/history/war/wwone/battle_passchendaele.shtml
+http://www.bbc.co.uk/history/war/wwtwo/allies_at_war_04.shtml
+http://www.bbc.co.uk/holbycity/reviews/20050503.shtml
+http://www.bbc.co.uk/holiday/destinations/roundtheworld_5/index.shtml
+http://www.bbc.co.uk/homes/design/period_artscrafts.shtml
+http://www.bbc.co.uk/info/licencefee/
+http://www.bbc.co.uk/info/policies/pdf/dig_rev_5sportsextra.htm
+http://www.bbc.co.uk/info/policies/producer_guides/text/elections.shtml
+http://www.bbc.co.uk/info/report99/board3b.shtml
+http://www.bbc.co.uk/info/statements2004/docs/commitments.htm
+http://www.bbc.co.uk/insideout/yorkslincs/series7/mugging.shtml
+http://www.bbc.co.uk/jersey/content/articles/2004/09/01/collinson_oz_4_feature.shtml
+http://www.bbc.co.uk/jobs/about/breadthofservices.shtml
+http://www.bbc.co.uk/jobs/nss/
+http://www.bbc.co.uk/jobs/ourculture/meettheteam/6music/antony_bellekom.shtml
+http://www.bbc.co.uk/jobs/ourculture/meettheteam/6music/miles_mendoza.shtml
+http://www.bbc.co.uk/jobs/ourculture/meettheteam/6music/sarah_cohen.shtml
+http://www.bbc.co.uk/jobs/privacy/index.shtml
+http://www.bbc.co.uk/learning/returning/betterlearner/studyskills/b_control_04.shtml
+http://www.bbc.co.uk/learning/returning/betterlearner/studyskills/b_control_10.shtml
+http://www.bbc.co.uk/learning/returning/betterlearner/studyskills/d_reading_01.shtml
+http://www.bbc.co.uk/learning/returning/betterlearner/studyskills/f_notetaking_05.shtml
+http://www.bbc.co.uk/learning/returning/betterlearner/studyskills/j_essays_01.shtml
+http://www.bbc.co.uk/london/carnival/travel_tips_2004.shtml
+http://www.bbc.co.uk/london/entertainment/films/carryonlondon.shtml
+http://www.bbc.co.uk/london/walks/whattodo.shtml
+http://www.bbc.co.uk/manchester/music/2004/07/12/doors_review.shtml
+http://www.bbc.co.uk/music/classical/reviews/macmillan_sparks.shtml
+http://www.bbc.co.uk/music/experimental/reviews/gybe_yanqui.shtml
+http://www.bbc.co.uk/music/pop/reviews/davidsneddon_sevenyears.shtml
+http://www.bbc.co.uk/music/urban/reviews/50cent_getrich.shtml
+http://www.bbc.co.uk/nationonfilm/location/north/
+http://www.bbc.co.uk/nature/animals/features/298feature1.shtml
+http://www.bbc.co.uk/nature/animals/features/329feature1.shtml
+http://www.bbc.co.uk/nature/animals/mammals/explore/behaviour.shtml
+http://www.bbc.co.uk/nature/wildfacts/animals_a_z.shtml
+http://www.bbc.co.uk/nature/wildfacts/factfiles/3002.shtml
+http://www.bbc.co.uk/nature/wildfacts/factfiles/681.shtml
+http://www.bbc.co.uk/northamptonshire/features/poetry_prose/2004/write/richard_ridley_03.shtml
+http://www.bbc.co.uk/northernireland/oyb/benefits/pensions_part-time_victory.shtml
+http://www.bbc.co.uk/northernireland/talkni/ask_kathy_fulcher.shtml
+http://www.bbc.co.uk/northyorkshire/greedypig/food/reviews/restaurants/plunketts.shtml
+http://www.bbc.co.uk/northyorkshire/iloveny/devolution/your_parliament/index.shtml
+http://www.bbc.co.uk/northyorkshire/sport/football/york_city_fc/have_your_say.shtml
+http://www.bbc.co.uk/ouch/features/fernandez.shtml
+http://www.bbc.co.uk/ouch/tvradio/thisismyfamily/julie_aboutmyhusband.shtml
+http://www.bbc.co.uk/oxford/murder/messageboard.shtml
+http://www.bbc.co.uk/parenting/family_matters/you_dad.shtml
+http://www.bbc.co.uk/parenting/your_kids/teen_risky.shtml
+http://www.bbc.co.uk/parenting/your_kids/toddlers_listentalk1.shtml
+http://www.bbc.co.uk/politics97/devolution/scotland/briefing/1707.shtml
+http://www.bbc.co.uk/politics97/devolution/scotland/briefing/history.shtml
+http://www.bbc.co.uk/pressoffice/commercial/worldwidestories/pressreleases/2002/01_january/xmas_sales_figures.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2004/05_may/18/westons_warriors.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2004/06_june/29/bpv.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/01_january/20/girl.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/03_march/08/kapil_dev.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/04_april/08/new_tricks.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/04_april/08/new_tricks_guests.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/04_april/27/proms.shtml
+http://www.bbc.co.uk/pressoffice/pressreleases/stories/2005/05_may/26/africa_cafe_intro.shtml
+http://www.bbc.co.uk/pressoffice/speeches/stories/thompson_churches.shtml
+http://www.bbc.co.uk/radio1/onelife/personal/relationships/comingout.shtml
+http://www.bbc.co.uk/radio1/onelife/personal/safety/rape_janestory.shtml
+http://www.bbc.co.uk/radio2/shows/criticallist/must_have_diamonddogs.shtml
+http://www.bbc.co.uk/radio2/shows/wright/web_archive.shtml
+http://www.bbc.co.uk/radio2/soldonsong/genres/analysis/soul.shtml
+http://www.bbc.co.uk/radio2/soldonsong/songlibrary/reasontobelieve.shtml
+http://www.bbc.co.uk/radio2/soldonsong/songlibrary/yourviews/one.shtml
+http://www.bbc.co.uk/radio3/africaonyourstreet/shaheeraasante.shtml
+http://www.bbc.co.uk/radio3/intune/rednose.shtml
+http://www.bbc.co.uk/radio4/arts/bookclub/running3.shtml
+http://www.bbc.co.uk/radio4/factual/intouch_transcript_20041102.shtml
+http://www.bbc.co.uk/radio4/factual/intouch_transcript_20041130.shtml
+http://www.bbc.co.uk/radio4/factual/intouch_transcript_20050215.shtml
+http://www.bbc.co.uk/radio4/news/bh/this_week.shtml
+http://www.bbc.co.uk/radio4/reith2003/lecture2.shtml
+http://www.bbc.co.uk/radio4/reith2005/lecture3.shtml
+http://www.bbc.co.uk/radio4/science/casenotes_tr_20050531.shtml
+http://www.bbc.co.uk/radio4/science/migration_schedule.shtml
+http://www.bbc.co.uk/radio4/today/listenagain/
+http://www.bbc.co.uk/radio4/youandyours/?focuswin
+http://www.bbc.co.uk/rd/milestones/1980s.shtml
+http://www.bbc.co.uk/relationships/sex_and_sexual_health/stis_hivaids.shtml
+http://www.bbc.co.uk/religion/programmes/search/2prog2.shtml
+http://www.bbc.co.uk/religion/religions/islam/beliefs/sharia/practical.shtml
+http://www.bbc.co.uk/schools/victorians/parents/contents.shtml
+http://www.bbc.co.uk/schools/wordsandpictures/teachers/phonemeinfo.shtml
+http://www.bbc.co.uk/science/horizon/2000/boyturnedgirl.shtml
+http://www.bbc.co.uk/science/horizon/2001/parallelunitrans.shtml
+http://www.bbc.co.uk/science/horizon/2002/columbusqa.shtml
+http://www.bbc.co.uk/science/humanbody/body/factfiles/heart/heart.shtml
+http://www.bbc.co.uk/science/humanbody/mind/surveys/brainsex/index.shtml
+http://www.bbc.co.uk/science/humanbody/tv/teenspecies/index.shtml
+http://www.bbc.co.uk/science/space/exploration/astronaut/part1.shtml
+http://www.bbc.co.uk/scotland/education/as/tech/shared_area/index.shtml?glossary
+http://www.bbc.co.uk/scotland/education/as/tech/shared_area/index_wwww.shtml?glossary
+http://www.bbc.co.uk/scotland/education/bitesize/standard/french/speaking_writing/planning_rev4.shtml
+http://www.bbc.co.uk/scotland/education/bitesize/standard/other/sos/chemistry/general_questions/index.shtml
+http://www.bbc.co.uk/scotland/history/scotlandonfilm/map/location.shtml?borders
+http://www.bbc.co.uk/scotland/sportscotland/
+http://www.bbc.co.uk/stoke/sport/non_league/index.shtml
+http://www.bbc.co.uk/suffolk/content/articles/2005/02/17/sitting_pretty_review_feature.shtml
+http://www.bbc.co.uk/tees/content/articles/2005/01/26/tsunami_gig_feature.shtml
+http://www.bbc.co.uk/thefuture/text/bbc_bpv_chap1.html
+http://www.bbc.co.uk/tyne/sport/localradio/index.shtml
+http://www.bbc.co.uk/wales/eisteddfodarts03/artist/richard-bevan.shtml
+http://www.bbc.co.uk/wales/info/review_2003/connecting_audiences_television.shtml
+http://www.bbc.co.uk/wales/mid/sites/ilovewales/pages/hotels.shtml
+http://www.bbc.co.uk/wales/mid/sites/weird/pages/martin.shtml
+http://www.bbc.co.uk/wales/music/sites/howto/pages/television.shtml
+http://www.bbc.co.uk/wales/northeast/guides/weird/ufos/pages/vallecrucis.shtml
+http://www.bbc.co.uk/wales/northeast/sites/flintshire/pages/ysceifiog.shtml
+http://www.bbc.co.uk/wales/northeast/sites/rhyl_town/pages/memories.shtml
+http://www.bbc.co.uk/wales/northeast/yoursay/topics/cameras15.shtml
+http://www.bbc.co.uk/wales/northeast/yoursay/topics/rhyl.shtml
+http://www.bbc.co.uk/wales/northwest/sites/football/pages/roundup100404.shtml
+http://www.bbc.co.uk/wales/northwest/sites/history/pages/johngriffiths.shtml
+http://www.bbc.co.uk/wales/northwest/sites/mystory/pages/pilot.shtml
+http://www.bbc.co.uk/wales/northwest/yoursay/topics/speed_cams.shtml
+http://www.bbc.co.uk/wales/oceanrow/daily/update2.shtml
+http://www.bbc.co.uk/wales/raiseyourgame/motivation/goal_setting/rick_evans.shtml
+http://www.bbc.co.uk/wales/scrumv/archive/hook/rugby-writing-42.shtml
+http://www.bbc.co.uk/wales/scrumv/onthebox/tvcoverage/index.shtml
+http://www.bbc.co.uk/wales/scrumv/social/rugbywritings/englandeffects.shtml
+http://www.bbc.co.uk/wales/southeast/sites/ilovewales/pages/scary.shtml
+http://www.bbc.co.uk/wales/southeast/sites/weird/pages/nation066.shtml
+http://www.bbc.co.uk/wales/southeast/yoursay/topics/travel_roads24.shtml
+http://www.bbc.co.uk/wales/southwest/nature/features/pages/gardens2709.shtml
+http://www.bbc.co.uk/wales/southwest/webguide/pages/nature.shtml
+http://www.bbc.co.uk/wales/southwest/yoursay/topics/traffic.shtml
+http://www.bbc.co.uk/wales/surfing/sites/features/pages/duckdiving.shtml
+http://www.bbc.co.uk/wales/walestoday/pages/walestodayon2w.shtml
+http://www.bbc.co.uk/weather/features/understanding/lightning_strike.shtml
+http://www.bbc.co.uk/weather/help.shtml
+http://www.bbc.co.uk/webwise/celeb/melc.shtml
+http://www.bbc.co.uk/worldservice/learningenglish/youmeus/learnit/learnit_archive.shtml
+http://www.bbc.co.uk/worldservice/people/features/ihavearightto/four_b/programmes_archive.shtml
+http://www.bbc.co.uk/writersroom/writing/tvdrama_p5.shtml
+http://www.bbc.net/
+http://www.bbc.net/index.shtml
+http://www.bbc.tv/insideout/yorkslincs/series7/mugging.shtml
+http://www.bbcanada.com/bb_traveller/edition31/
+http://www.bbcenglish.com/tv/engzone/prog20.html
+http://www.bbcworld.com/content/template_clickonline.asp?pageid=666&co_pageid=16
+http://www.bbcworld.com/content/template_customer_faq.asp?pageid=29
+http://www.bbcworld.com/content/whatpage.asp?pageid=29
+http://www.bber.umt.edu/content/?x=1113,1117,1114,1123,1115,1116
+http://www.bbg.org/gar2/topics/kitchen/handbooks/chile/3.html
+http://www.bbhighway.com/Talk/Coach%20Library/reviews/Videos/RMiller_pressure_review.asp
+http://www.bbhq.com/bomrgenx.htm
+http://www.bbhq.com/thiz0726.htm
+http://www.bbk.ac.uk/ccs/courses/
+http://www.bbk.ac.uk/hr/nursery.html
+http://www.bblog.com/viewtopic.php?t=146
+http://www.bbnola.com/bylaws.asp
+http://www.bbonline.com/oh/sassafras/history.html
+http://www.bbsgov.org/ana_vol2/Chapter2.htm
+http://www.bbsrc.ac.uk/news/features/02jan/02_01_transporter.html
+http://www.bbsunshinecoast.com/standards.php
+http://www.bc.edu/bc_org/ath/plex/membership/rules.htm
+http://www.bc.edu/bc_org/avp/soe/academics/grad/masters/ed_admin/default.html
+http://www.bc.edu/bc_org/avp/soe/cihe/newsletter/News34/text012.htm
+http://www.bc.edu/bc_org/research/cjl/Documents/dabru_emet.htm
+http://www.bc.edu/bc_org/rvp/pubaf/04/StarLedgerCameraMouse.html
+http://www.bc.edu/offices/policies/meta-elements/doc/policies/IV/4-700-100.shtml
+http://www.bc.edu/offices/stserv/academic/current/exams/
+http://www.bc.edu/schools/law/lawreviews/meta-elements/journals/bclawr/42_1/04_TXT.htm
+http://www.bc.edu/schools/law/lawreviews/meta-elements/journals/bclawr/45_1/04_TXT.htm
+http://www.bca-europe.com/main.asp?page=89
+http://www.bca.ac.uk/prospectus/site/equestr.html
+http://www.bcab.org.uk/
+http://www.bcaction.org/Pages/SearchablePages/2001Newsletters/Newsletter064C.html
+http://www.bcbs.com/tec/vol18/18_07.html
+http://www.bcbs.com/tec/vol19/19_02.html
+http://www.bcbudget.gov.bc.ca/annualreports/wlap/Report_on_Performance.htm
+http://www.bccba.org/Guest_Lounge/dialcontent.asp?id=120
+http://www.bccf.bc.ca/learn/coup_confl.html
+http://www.bccf.com/ecoed/Teachers/bkgrgriz.html
+http://www.bccla.org/positions/discrim/83vismin.html
+http://www.bccla.org/positions/freespeech/85keegstra.html
+http://www.bcconservatives.ca/history/
+http://www.bccresearch.com/advmat/GB185.html
+http://www.bccresearch.com/advmat/GB196B.html
+http://www.bccresearch.com/advmat/GB196C.html
+http://www.bccresearch.com/archive/C178.html
+http://www.bccresearch.com/biotech/B114R.html
+http://www.bccresearch.com/biotech/B186.html
+http://www.bccresearch.com/biotech/C184R.html
+http://www.bccresearch.com/chem/C184R.html
+http://www.bccresearch.com/food/C203.html
+http://www.bccresearch.com/food/GA101.html
+http://www.bcdc.ca.gov/nam/comm/1999/091699cm.htm
+http://www.bce.ca/en/news/releases/bc/2004/09/16/71654.html
+http://www.bced.gov.bc.ca/irp/germ512/12ucs.htm
+http://www.bced.gov.bc.ca/irp/he1112/fos12fpp.htm
+http://www.bced.gov.bc.ca/irp/math1012/pm10prrf.htm
+http://www.bcen.bc.ca/bcerart/Vol10/eco-cert.htm
+http://www.bcentral.cl/eng/funorg/organiclaw/law04.htm
+http://www.bcfamilylaw.ca/samesex.html
+http://www.bcfamilylawresource.com/04/0400body.htm
+http://www.bcfamilylawresource.com/08/0801body.htm
+http://www.bcfamilylawresource.com/definition%20pop%20ups.html
+http://www.bcfilmclass.com/home.htm
+http://www.bcgcertification.org/resources/heraldry.html
+http://www.bcgs.ca/mememail.htm
+http://www.bch.org.uk/parents_carers/hospitalfacilities.htm
+http://www.bchealthguide.org/healthfiles/hfile41k.stm
+http://www.bchealthguide.org/kbase/dp/topic/aa37799/dp.htm
+http://www.bchealthguide.org/kbase/nord/nord717.htm
+http://www.bchealthguide.org/kbase/nord/nord832.htm
+http://www.bchomesforsale.com/view/shuswap/lori/Default.htm
+http://www.bci.org/prophecy-fulfilled/pk7.htm
+http://www.bcjunction.com/logos.shtml
+http://www.bclumbertrade.com/faq.htm
+http://www.bcmfindings.net/vol1/is4/03apr_m.htm
+http://www.bcmpa.bc.ca/2004_olympics.htm
+http://www.bcnys.org/ppi/drive.htm
+http://www.bcodp.org.uk/
+http://www.bcpl.net/~lmoskowi/hounds/intro/VALL.HTM
+http://www.bcpl8s.ca/boer/chapter1.htm
+http://www.bcpolitics.ca/int_spacewar.htm
+http://www.bcps.org/offices/lis/models/highcore.html
+http://www.bcps.org/offices/lis/models/middle.html
+http://www.bcps.org/offices/lis/models/sub_abuse/
+http://www.bcpsea.bc.ca/public/emplgroups/teacher/eservices/esarchive.html
+http://www.bcpublicservice.ca/workforce/erip/increaseop.htm
+http://www.bcr.com/bcrmag/2005/06/p18.php
+http://www.bcrea.bc.ca/publications/2004-03-29.htm
+http://www.bcrescue.org/epilepsy.html
+http://www.bcs-hci.org.uk/hci2004/confprog-showpapers.asp?pcid=6&t=Workshop
+http://www.bcs-hci.org.uk/hci2005/overview.asp
+http://www.bcs.org/BCS/News/ThoughtLeadership/pastdebates/ITSystems.htm
+http://www.bcs.org/BCS/Products/Publications/JournalsAndMagazines/ComputerBulletin/OnlineArchive/mar02/needtoknow.htm
+http://www.bcschools.net/staff/PowerPointHelp.htm
+http://www.bcsfootball.org/news.cfm?headline=15
+http://www.bcsfootball.org/news.cfm?headline=43
+http://www.bctf.bc.ca/ResearchReports/97tr01/
+http://www.bctf.bc.ca/ResearchReports/97wlc01/
+http://www.bctf.bc.ca/education/health/ResponseOnSchoolFacilities.html
+http://www.bctop100.com/convention_centers.htm
+http://www.bctop100.com/mangement.htm
+http://www.bcwa.co.uk/companygroups/pref/whatisnt.aspx
+http://www.bd.com/leaving/?/thermometers/howto/
+http://www.bd.com/vacutainer/labnotes/Volume14Number2/
+http://www.bda-dentistry.org.uk/advice/news.cfm?ContentID=1357
+http://www.bda-dentistry.org.uk/advice/news.cfm?ContentID=1525
+http://www.bda-dentistry.org.uk/advice/news.cfm?ContentID=871
+http://www.bda.uk.com/BBC_office_weight_loss.html
+http://www.bdcl.org/History1.htm
+http://www.bdcu.org.au/BDDR/bddr12no2/stupa.html
+http://www.bdonline.co.uk/magazine/html/14_May_2004.html
+http://www.be-central.be/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=878&7
+http://www.be.com.au/conditions%20of%20use/default.asp
+http://www.be.udel.edu/business/faculty/kent/kentcv.html
+http://www.be.wvu.edu/grad/msir/
+http://www.beacham.com/
+http://www.beachbody.com/forums/T250102273.jsp
+http://www.beachbody.com/forums/T786106563.jsp
+http://www.beachdestinations.com/Cancun_Hotels/Oasis_Cancun_All_Inclusive.asp
+http://www.beachwalker.com/CharlestonEvents.html
+http://www.beachwatchnj.com/
+http://www.beachwed.com/reservations.htm
+http://www.beaconfellowship.org.uk/press_releases.asp?rel=1049
+http://www.beadandbutton.com/bnb/community/forum/topic.asp?TOPIC_ID=6748
+http://www.beadandbutton.com/bnb/community/forum/topic.asp?page=-1&TOPIC_ID=6748&REPLY_ID=66433
+http://www.beadandbutton.com/bnb/community/forum/topic.asp?page=-1&TOPIC_ID=6748&REPLY_ID=69410
+http://www.beadandbutton.com/bnb/community/forum/topic.asp?page=-1&TOPIC_ID=6748&REPLY_ID=71588
+http://www.beadesigngroup.com/blog/archives/2005/01/grid_systems.html
+http://www.beadnell.org/harbour/
+http://www.beadstylemag.com/bds/community/forum/topic.asp?page=2&TOPIC_ID=5666
+http://www.beahr.com/privacy.aspx?language=0
+http://www.beakman.com/feet/feet-smell.html
+http://www.beale.af.mil/9RW_PA/community.asp
+http://www.bealenet.com/~wchapel/serForgiveness.html
+http://www.beanogas.com/living.asp?AID=7
+http://www.bear.org/Kids/Black_Bear_Facts_Kids.html
+http://www.beardeddragon.org/bjive/viewtopic.php?t=13579
+http://www.beardyfreak.com/rvPrime.htm
+http://www.bearinfo.org/FAQ.htm
+http://www.bearlakemichigan.org/wellhead/wellhead2.html
+http://www.bearstudy.org/Educational_Outreach/Museum_Exhibit.htm
+http://www.beartown.co.uk/sectionviewer.asp?ID=70
+http://www.beatletracks.com/bt45chron.html
+http://www.beaumonthospitals.com/pls/portal30/cportal30.webpage?l_recent=P00342
+http://www.beaumonthospitals.com/pls/portal30/cportal30.webpage?l_recent=P07260
+http://www.beautifuldecay.com/faq.html
+http://www.beauty507.allabout156.info/
+http://www.beauty522.allabout158.info/Mature-Changing-Body-Man-Hair.html
+http://www.beautybeyond50.com/links-humor.htm
+http://www.beautybymatt.com/Wigs.html
+http://www.beauxarts-wa.gov/BOA_Minutes/boa0405.htm
+http://www.beauxarts-wa.gov/Ords/ord267_consol.htm
+http://www.beavercreekreserve.org/BCR/Upcoming%20Events.htm
+http://www.bebits.com/talkback/3323
+http://www.bechervaise.com/BCONF/BCONF5.html
+http://www.becker-posner-blog.com/
+http://www.becker-posner-blog.com/archives/2004/12/disease_populat.html
+http://www.becker-posner-blog.com/archives/2005/05/blogging--a_res.html
+http://www.beckercollege.edu/information/datelinemar03.htm
+http://www.beckman.com/products/instrument/analytical/scintillation/ls6500_countingsystems_inst_dcr.asp
+http://www.beckman.com/resourcecenter/labresources/protein/proteome_litlist.asp
+http://www.beckman.com/resourcecenter/labresources/protein/proteome_litlist.asp?pf=1
+http://www.beckmandavis.com/articles.htm
+http://www.beckncoll.com/
+http://www.becomeaplayer.com/bodylanguage.htm
+http://www.becomehealthynow.com/article/chirohelp/312/
+http://www.becomingtheparent.com/subsections1/question15.html
+http://www.becomingtheparent.com/subsections1/question58.html
+http://www.beconvinced.com/RELIGION/SANTA.htm
+http://www.becreativebooks.com/fabric_crafts.asp
+http://www.becta.org.uk/leaders/leaders.cfm?section=4&id=3286
+http://www.bectu.org.uk/policy/pol073.html
+http://www.bectu.org.uk/policy/pol087.html
+http://www.bedandbreakfastforsale.com/index.cfm?fuseaction=TermsofUse
+http://www.bedbathandbeyond.com/product.asp?order_num=-1&SKU=13653151
+http://www.bedbathandbeyond.com/rdPolicyLegal.asp?order_num=-1
+http://www.bedfordstmartins.com/seeingandwriting/interviews/interview1.html
+http://www.bedfordstmartins.com/seeingandwriting/interviews/interview2.html
+http://www.bedfordstmartins.com/technotes/comment/respondingncbsm.html
+http://www.bedsdirect.com/acatalog/howtoorder.htm
+http://www.bedsguiding.org.uk/annreport2003.htm
+http://www.beebo.com.my/moneytree.html
+http://www.beefusa.org/dsp/dsp_content.cfm?locationId=1602&contentTypeId=1&contentId=18379
+http://www.beehive.govt.nz/ViewDocument.aspx?DocumentID=21545
+http://www.beekeeping.com/articles/us/saville/farmer_participatory.htm
+http://www.beekmanwine.com/prevtopab.htm
+http://www.beemans.net/a_shot_of_humor.htm
+http://www.beemnet.com/win/7-2000news.html
+http://www.beenleigss.qld.edu.au/webquest/actualquest/actualquest.htm
+http://www.beenthere-donethat.org.uk/essex/tollesbury2.html
+http://www.beerhunter.com/documents/19133-000059.html
+http://www.beerhunter.com/documents/19133-001575.html
+http://www.beerhunter.com/documents/19133-001914.html
+http://www.beerintheevening.com/pubs/show.shtml/3012/Harcourt_Arms/Marylebone
+http://www.beertown.org/events/teach/
+http://www.beetleinabox.com/blog/
+http://www.befit.ca/drinks.html
+http://www.befit.ca/fitness_accessories.html
+http://www.beggingtodiffer.com/archives/2005_03.html
+http://www.beginnertriathlete.com/Ron/Book%20Review%20-%20When%20Big%20Boys%20Tri.htm
+http://www.behindthebadge.net/articles/a123.html
+http://www.behindthechair.com/displayarticle.aspx?ID=787
+http://www.behrbemine.com/oblivion/fiction/btvs/buffy-meets-star_8.html
+http://www.behrbemine.com/oblivion/fiction/btvs/even-the-mona-lisa_4.html
+http://www.beijingsoftball.com/results.asp
+http://www.beingvirtuouswomen.com/bookwormcorner/hero/chapter7.htm
+http://www.belairfinishing.com/practical_guide_to_mass_finishing.htm
+http://www.belbin.info/team-roles-answr.htm
+http://www.belcherfoundation.org/admiral_sir_edward_belcher.htm
+http://www.belfastcity.gov.uk/buildingControl/complaints.asp
+http://www.belfastharlequinsrfc.com/Lanarchivenovember2003.asp
+http://www.belfastroyalacademy.com/extra/doe.html
+http://www.belfastroyalacademy.com/extra/industry.html
+http://www.belgraviadispatch.com/archives/001570.html
+http://www.belgraviadispatch.com/archives/004022.html
+http://www.beliefnet.com/frameset.asp?pageLoc=/story/122/story_12259_1.html&storyID=12259&boardID=53216
+http://www.beliefnet.com/frameset.asp?pageLoc=/story/47/story_4779_1.html&boardID=6562
+http://www.beliefnet.com/frameset.asp?pageLoc=/story/97/story_9715_1.html&boardID=31525
+http://www.beliefnet.com/milestones/commemoration.asp?milestoneTypeID=6&pageID=4&milestoneID=17744
+http://www.beliefnet.com/milestones/commemoration.asp?milestoneTypeID=6&pageID=67&milestoneID=2354
+http://www.beliefnet.com/milestones/commemoration.asp?milestoneTypeID=6&pageID=7&milestoneID=17744
+http://www.beliefnet.com/prayer/commemoration.asp?milestoneTypeID=6&pageID=67&milestoneID=2354
+http://www.beliefnet.com/story/129/story_12972.html
+http://www.beliefnet.com/story/139/story_13948_1.html
+http://www.beliefnet.com/story/156/story_15629.html
+http://www.beliefnet.com/story/156/story_15629_1.html
+http://www.beliefnet.com/story/157/story_15773.html
+http://www.beliefnet.com/story/159/story_15988.html
+http://www.beliefnet.com/story/35/story_3518.html
+http://www.beliefnet.com/story/97/story_9715.html
+http://www.believermag.com/exclusives/interview_black.php
+http://www.believetyler.org/
+http://www.belize-challenge.com/main_pages/news.asp
+http://www.belize.gov.bz/library/humandevelopment/chapter3.html
+http://www.belizemissions.com/fishing.htm
+http://www.bellagiopublishingnetwork.org/newsletter21/ranger.htm
+http://www.bellagiopublishingnetwork.org/newsletter26-27/ofori-mensah.htm
+http://www.bellaonline.com/ArticlesP/art26224.asp
+http://www.bellaonline.com/articles/art15801.asp
+http://www.bellaonline.com/articles/art25188.asp
+http://www.bellaonline.com/articles/art26004.asp
+http://www.bellaonline.com/articles/art26224.asp
+http://www.bellaonline.com/articles/art26298.asp
+http://www.bellaonline.com/articles/art27517.asp
+http://www.bellaonline.com/articles/art27725.asp
+http://www.bellaonline.com/articles/art28325.asp
+http://www.bellaonline.com/articles/art5459.asp
+http://www.bellaonline.com/subjects/1204.asp
+http://www.bellaonline.com/subjects/2172.asp
+http://www.bellcraft.com/forum/topic.asp?TOPIC_ID=637
+http://www.belleandsebastian.com/diary.php?did=193
+http://www.belleville.com/mld/belleville/news/10494011.htm
+http://www.bellinghamweekly.com/bw/content/astrology/
+http://www.bellmicro.com/atabased/Products/DYNdatamax8000plus.asp
+http://www.bellmore-merrick.k12.ny.us/catcher2.html
+http://www.bellona.no/en/international/russia/envirorights/36480.html
+http://www.bellspalsy.ws/residual.htm
+http://www.bellsystemmemorial.com/canadian_bell_companies.html
+http://www.bellsystemmemorial.com/comments.html
+http://www.bellsystemmemorial.com/the_att_telephone_story.html
+http://www.bellsystemmemorial.com/tradingpost.html
+http://www.bellsystemmemorial.com/whatkilledmabell.html
+http://www.bellwetherdrygoods.com/
+http://www.belmontclub.blogspot.com/2003_09_01_belmontclub_archive.html
+http://www.belowempty.com/vr/concerts/2005/050109_LondonEngland.php
+http://www.belvpresbyterian.org/
+http://www.bena.com/sherpa1/bpa/Marriage/bCompati.htm
+http://www.benabraham.com/html/30_-_character_and_aims_of_the.html
+http://www.benadorassociates.com/article/11281
+http://www.benadorassociates.com/article/15633
+http://www.benadorassociates.com/article/15792
+http://www.benadorassociates.com/article/2260
+http://www.benadorassociates.com/article/8408
+http://www.benadorassociates.com/article/879
+http://www.benadorassociates.com/events.php?id=350
+http://www.benbest.com/cryonics/protocol.html
+http://www.benbest.com/history/xmas.html
+http://www.bendigo.vic.gov.au/Page/Page.asp?Page_Id=599&h=1
+http://www.bendpress.com/
+http://www.benedict.koeln-service.de/en/c2.htm
+http://www.benefitnews.com/detail.cfm?id=6703
+http://www.benefitsandwork.co.uk/benefits/unspun/ib_pilots_nov03.htm
+http://www.bengaldevelopment.com/
+http://www.bengals.com/press/hobsononline.asp?ho_id=170
+http://www.bengals.com/press/news.asp?news_id=2899
+http://www.benisrael.org/shoah/shoah09.htm
+http://www.benjaminadam.com/
+http://www.benjaminadam.com/archives/2005/05/09/better-blockquote-styling
+http://www.benjaminrosenbaum.com/blog/archives/2005_05.html
+http://www.benjaminzephaniah.com/outernet_kidz.html
+http://www.benmclane.com/climax.htm
+http://www.bennettgold.ca/resources/articles-25.shtml
+http://www.bennettjones.ca/publications_classaction-fall-2004.htm
+http://www.bennettstamps.com/cgi-bin/viewchap.pl?site=1&sale=284&chapter=1&page=1&lang=1
+http://www.bensilverstone.net/bsstoryserver-library.asp?bookid=36
+http://www.bensoc.asn.au/parc_search/transracial_articles_returning.html
+http://www.bensonassoc.com/pct/teapast11.html
+http://www.bensonassoc.com/pct/teapast19.html
+http://www.benthos.org/Links/index.cfm/task/Display/URLtopic/Images
+http://www.bentleyrailway.co.uk/locos.php?cat=svisitors
+http://www.benton.org/publibrary/practice/features/environdefense.html
+http://www.bepress.com/context/gruterclassics/article/1025/viewcontent/
+http://www.bera.ac.uk/oldwelcomes.asp
+http://www.bergen-guide.com/345.htm
+http://www.bergen.org/AAST/Projects/3DSMaxTutorial/mapping_coordinates.html
+http://www.berghuis.co.nz/abiator/patana/5t/literacy/sj-1-2-2003_text.html
+http://www.beri.com/
+http://www.berjaya.com.my/080502matrix_matrix.htm
+http://www.berjaya.com.my/210200unza.htm
+http://www.berkeley.edu/calendar/index_p2.html
+http://www.berkeley.edu/news/berkeleyan/2004/03/03_large.shtml
+http://www.berkeley.edu/news/berkeleyan/2005/01/27_acfreedom.shtml
+http://www.berkeley.edu/news/berkeleyan/2005/06/03_grad.shtml
+http://www.berkeley.edu/news/media/releases/2003/02/12_akerlof.shtml
+http://www.berkeley.edu/news/media/releases/2003/07/22_politics.shtml
+http://www.berkeley.edu/news/media/releases/2004/05/07_pecase.shtml
+http://www.berkeley.edu/news/media/releases/2004/10/11_hersh.shtml
+http://www.berkeley.edu/news/media/releases/2004/10/26_breastfeeding.shtml
+http://www.berkeley.edu/news/media/releases/2004/11/30_BushIraq.shtml
+http://www.berkeley.edu/news/media/releases/2005/03/24_octopus.shtml
+http://www.berkeley.edu/news/media/releases/2005/05/04_sontag.shtml
+http://www.berkeley.edu/news/students/2003/borneo/6.shtml
+http://www.berkeleybuddhistpriory.org/suffering.htm
+http://www.berkeleydaily.org/article.cfm?archiveDate=02-22-05&storyID=20778
+http://www.berkeleysprings.com/shopping.htm
+http://www.berkeleywellness.com/html/ds/dsZinc.php
+http://www.berkshirehumane.org/Adoption_Pages/Adopt_A_Dog
+http://www.berkshirehumane.org/Kids_Who_Care
+http://www.berkshires.org/What_to_Do/index.php?cat=Music
+http://www.berlinpraktikum.de/english/warumwowie.asp
+http://www.bermuda-online.org/sirgeorgesomers.htm
+http://www.bermuda.org.uk/defence.htm
+http://www.bermudasun.bm/archives/2005-06-22/05Life01/
+http://www.bernardcornwell.net/index.cfm?page=11
+http://www.bernardomahoney.com/forthcb/pdt/hajarticles2/footwiaem.shtml
+http://www.bernsteinmedical.com/resources/publications.php
+http://www.berry.edu/phs/
+http://www.berrypatchfarms.net/history.htm
+http://www.berryscotland.com/berryproducts.htm
+http://www.bersin.com/newsletters/dec_2003.asp
+http://www.bertoncini.net/lyrics/article.php?story=20050527152156751
+http://www.berzinarchives.com/e-books/spiritual_teacher/spiritual_teacher_13.html
+http://www.besiweb.com/HKANTAR2.html
+http://www.besse.at/sms/matter.html
+http://www.bessel.org/natlstan.htm
+http://www.best-interview-strategies.com/article35.html
+http://www.best-interview-strategies.com/jobinterviewsuccesssystem.html
+http://www.best-of-cincinnati.com/goods.html
+http://www.bestfreestuffonline.com/costumes.html
+http://www.bestfriends.org/allthegoodnews/specialfeatures/volunteers3.cfm
+http://www.bestjobsca.com/em-cvs-SC016-121-Skilled_labour_Trades_resume_bank.htm
+http://www.bestjudo.com/brmechanicsofjudo.shtml
+http://www.bestofbroadway.com/
+http://www.bestofhealth.com/pvgh/Current/fitfor.html
+http://www.bestplaces.net/docs/studies/crime1.aspx
+http://www.bestplacesonearth.com/destinations/ireland_guides.shtml
+http://www.bestprices.com/cgi-bin/vlink/030277009321BT.html
+http://www.beststuff.com/articles/8497/
+http://www.besttreatments.co.uk/btuk/electsurgery/18620.html
+http://www.bestwebbuys.com/History-Modern-20th_Century-N_10014384-books.html
+http://www.bestwebbuys.com/History-United_States-20th_Century-N_10014664-books.html
+http://www.bestwestern.co.uk/regions/whats-on-when.aspx?region=15&section=11
+http://www.bestwestern.co.uk/rewards/faq.aspx
+http://www.bestwestern.co.uk/rewards/termsandconditions.aspx
+http://www.bet.com/Health/GetFitClub/
+http://www.beta-theta.com/mall/hailo-cash-master-32-lock-box-hailo-cash-master-32-cash-box-assorted-colours-953502-ok/
+http://www.beta-theta.com/s/recreation-sports/sports-gear-equipment/home-gym-equipment-weights-machines/
+http://www.betanews.com/article/Does_Open_Source_Closed_Mind/1113572174
+http://www.betanews.com/article/MP3_Player_Market_Set_to_Explode/1119452328
+http://www.betanews.com/article/Microsoft_Opens_Office_File_Formats/1117692086
+http://www.betanews.com/article/Windows_XP_Adoption_Rates_Slow/1118943913
+http://www.bethanywv.edu/tower/opinions/79.04.09.17.04_opinion.html
+http://www.bethdavidsynagogue.org/happenings.html
+http://www.bethedream.net/GenesisII/GaiaTech.htm
+http://www.bethedream.net/mylife_files/Ashtar-Athena.htm
+http://www.bethel.edu/bgcarchives/friends/trailmarkers/03-04.html
+http://www.bethelks.edu/news/context/archives/001053.php?presentation=normal&issue=February2004
+http://www.bethepeterson.com/econfron.html
+http://www.bethlehemmedia.net/feat46.htm
+http://www.bethor.org/narrishkeit/narrish.html
+http://www.bethquick.com/8-29-04notes.htm
+http://www.betsson.com/cs/poker/pokerschool.asp?id=27
+http://www.better-investing.org/articles/bi/366/5032
+http://www.betterbaking.com/viewArticle.php?article_id=16
+http://www.betterbasketball.com/basketball-passing-video/
+http://www.betterbricks.com/default.aspx?pid=article&articleid=169&typeid=3&topicname=operationsmaintenance&indextype=
+http://www.bettercaring.co.uk/index_pub.cfm?content=Mail/pressrelease.htm&navtable=navtable_about.cfm
+http://www.bettergov.ie/index.asp?docID=184
+http://www.betterhealth.vic.gov.au/bhcv2/BHCLang.nsf/0/C53D7FCBC4CA7D8D4A256B640083B7D8?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Aerobic_exercise?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Eating_tips_for_children_(1)_babies?Open
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Eating_tips_for_children_(1)_babies?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Eating_tips_for_children_(1)_babies?open
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Olive_oil?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Tertiary_studies_friends_and_family?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/Trauma_helping_loved_ones?OpenDocument
+http://www.betterhealth.vic.gov.au/bhcv2/bhcarticles.nsf/pages/hl_stressreduction_general?open
+http://www.betterhealth.vic.gov.au/bhcv2/bhcsite.nsf/pages/sub17?Open
+http://www.betterliving.co.nz/content/atPlay/beauty/sleep-and-our-skin.aspx
+http://www.betterlivingnow.com/main/custsupport/insurance.cfm
+http://www.bettermanagement.com/bettermanagementlive/session.aspx?libraryid=10264
+http://www.bettermanagement.com/keycode.aspx?keycode=511348
+http://www.bettermanagement.com/seminars/seminar.aspx?l=12087
+http://www.betteroralhealth.info/uk-orbit/commercial-dental-companies-and-dental-professionals--a-win-win-situation--by-simon-m-roland-bds-lond--ldsrcs-eng-.html
+http://www.betterpenis.info/alternatives.htm
+http://www.betterworkplacenow.com/flexart.html
+http://www.betterworldclub.com/about/faq.htm
+http://www.bettingadvice.com/
+http://www.bettydodson.com/links3.htm
+http://www.bettyelders.com/encourag4.htm
+http://www.bettysattic.com/website/store/search.asp?UID=&keyword=1980s&cat_keyword=beras&search_page_no=3
+http://www.bettyslist.com/advertise.php
+http://www.between.ne.jp/sij/en/support/koutsu.html
+http://www.beust.com/cedric/perry/
+http://www.beust.com/weblog/archives/000084.html
+http://www.beust.com/weblog/archives/000259.html
+http://www.beust.com/weblog/mt-cedricqwerty.cgi?entry_id=84
+http://www.bev.net/about/research/reports/summary.php
+http://www.bevart.co.uk/links/design.html
+http://www.beveragedaily.com/news/news-ng.asp?n=54095-drinks-manufacturers-hoping
+http://www.beverleyfestival.com/04-festinfo.htm
+http://www.bevhoward.com/CFCamera.htm
+http://www.bewrite.net/modules.php?name=News&file=article&sid=1871
+http://www.bewrite.net/modules.php?name=News&file=article&sid=2054
+http://www.bexcrayconservatives.org.uk/
+http://www.bexley.gov.uk/news/2005/05/
+http://www.bexley.gov.uk/service/education/pass/musicgrants.html
+http://www.beyondacademe.com/
+http://www.beyondblue.org.au/index.aspx?link_id=12
+http://www.beyondblue.org.au/index.aspx?link_id=4.66&oid=418
+http://www.beyondblue.org.au/index.aspx?link_id=9.234&oid=418
+http://www.beyondbooks.com/bb/press/henrico.asp
+http://www.beyondbooks.com/help/guide/page_unit.asp
+http://www.beyondbullets.com/2005/01/face.html
+http://www.beyondcompliance.net/training.html
+http://www.beyonddieting.com/thesis1.html
+http://www.beyondfertility.com/resource.htm
+http://www.beyondintractability.org/m/distributive_bargaining.jsp
+http://www.beyondintractability.org/m/large_scale_communication.jsp
+http://www.beyondmoseying.com/customer-comments.html
+http://www.beyondpesticides.org/infoservices/pesticidesandyou/
+http://www.beyondplay.com/CATALOG/CAU1.HTM
+http://www.beyondplay.com/CATALOG/PRO1.HTM
+http://www.beyondroi.com/Tina-Kelso.php
+http://www.beyondtheclassroom.umd.edu/service.htm
+http://www.beyondtheclassroom.umd.edu/servicetxt.htm
+http://www.beyondthecommons.com/understandingenclosure.html
+http://www.beyondvc.com/
+http://www.beyondvc.com/2004/09/running_an_effi.html
+http://www.beyondweird.com/nuclearwar/s73p926.htm
+http://www.bffsnw.org.uk/modules.php?op=modload&name=FAQ&file=index&myfaq=yes&id_cat=2
+http://www.bfi.gov.uk/reports/2002/bfi/salford/conclusions/
+http://www.bfi.gov.uk/reports/2002/bfi/salford/recommendations/
+http://www.bfi.org.uk/sightandsound/2004_09/father-son.php
+http://www.bfi.org/EveryThing/everything_i_know1.htm
+http://www.bfi.org/EveryThing/everything_i_know9.htm
+http://www.bfi.org/grunch_of_giants6.htm
+http://www.bfms.org.uk/Text_Assets/Newsletter_Aug99.htm
+http://www.bfms.org.uk/Text_Assets/Newsletter_Dec2003.htm
+http://www.bfms.org.uk/Text_Assets/Newsletter_July2003.htm
+http://www.bfrc.org/General_Publications-Windows-A_Total_Cost_Approach.htm
+http://www.bftv.ac.uk/newslet2/sum04p2.htm
+http://www.bg-group.com/international/int-UK_downstream.htm
+http://www.bgclansing.org/donor_page.htm
+http://www.bgcp.org/physical_education_programs.php
+http://www.bgpexpert.com/archive2004q1.php
+http://www.bgs.ac.uk/mineralsuk/links/quarrying/home.html
+http://www.bgsu.edu/cconline/DavisHardy/certeau.html
+http://www.bgsu.edu/offices/president/page693.html
+http://www.bgu.ac.il/chem/Bittner_cv.html
+http://www.bgu.ac.il/html/march2000.htm
+http://www.bham.ac.uk/POLSIS/postgraduate/admissions/FAQ.htm
+http://www.bham.ac.uk/POLSIS/tony_blair.htm
+http://www.bham.ac.uk/ctimath/workshops/wncet2.htm
+http://www.bharat-rakshak.com/LAND-FORCES/Army/Articles/Article07.html
+http://www.bharat-rakshak.com/MONITOR/ISSUE6-4/routray.html
+http://www.bharatmatrimony.com/consult/private/conapr302005.html
+http://www.bharattimes.com/BT_WEB/Economy.htm
+http://www.bhb.hu/
+http://www.bhel.com/bhel/press_conf/2004/press_conference.htm
+http://www.bhf.org.uk/about/index.asp?secID=17&secondlevel=1504&thirdlevel=1576&artID=7211
+http://www.bhf.org.uk/events/index.asp?secID=12&secondlevel=1006&thirdlevel=1017&artID=6830
+http://www.bhf.org.uk/events/printout.asp?secID=12&secondlevel=1006&thirdlevel=1017&artID=6830
+http://www.bhf.org.uk/hearthealth/index.asp?secID=1&secondlevel=77&thirdlevel=352&artID=428
+http://www.bhf.org.uk/hearthealth/index.asp?secID=1&secondlevel=79&thirdlevel=171&artID=700
+http://www.bhf.org.uk/news/index.asp?secID=16&secondlevel=241&thirdlevel=1533&artID=7064
+http://www.bhf.org.uk/news/index.asp?secID=16&secondlevel=241&thirdlevel=1607&artID=7266
+http://www.bhf.org.uk/news/index.asp?secID=16&secondlevel=241&thirdlevel=922&artID=4385
+http://www.bhg.com.au/home_improvement.nsf/Content/Decorating_Curtains_MakingUp
+http://www.bhg.com/bhg/story.jhtml?storyid=/templatedata/ab/story/data/AB0804MaternityLeave.xml&catref=bcat289
+http://www.bhg.com/bhg/story.jhtml?storyid=/templatedata/bhg/step-by-step/data/hie_452.xml&catref=cat4450002&page=2
+http://www.bhg.com/bhg/story.jhtml?storyid=/templatedata/bhg/story/data/BHBL_FramingTheFuture_12092004.xml&catref=cat320002
+http://www.bhg.com/bhg/story.jhtml?storyid=/templatedata/bhg/story/data/kids_furniture_07262001.xml
+http://www.bhhrg.org/CountryReport.asp?ChapterID=220&CountryID=2&ReportID=75&keyword=
+http://www.bhhrg.org/CountryReport.asp?ChapterID=88&CountryID=4&ReportID=14&keyword=
+http://www.bhi.co.uk/hints/bluing.htm
+http://www.bhiva.org/guidelines/2004/adherence/table.html
+http://www.bholland90.fsnet.co.uk/Canoes_And_Kayaks.htm
+http://www.bhsi.org/ageguide.htm
+http://www.biaeducationjobs.com/mnlst.htm
+http://www.bianca.com/whatsnew/
+http://www.biancoblu.fi/tekijat_e.htm
+http://www.biathloncanada.ca/main.asp?cmd=fil&ID=329&lan=0
+http://www.biax.com/mesim/mesim.asp
+http://www.biba.org.uk/mediacentre/medianotes/announcements/25.htm
+http://www.bible-researcher.com/language-koine.html
+http://www.bible.acu.edu/missions/page.asp?ID=780
+http://www.bible.acu.edu/stone-campbell/States/Illinois/cook.htm
+http://www.bible.ca/7-Bacchiocchi.htm
+http://www.bible.ca/ef/expository-2-corinthians-5-10.htm
+http://www.bible.ca/tracks/b-hill-roberts.htm
+http://www.bible.com/bs.html
+http://www.bible.org/illus.asp?topic_id=967
+http://www.bible.org/page.asp?page_id=104
+http://www.bible.org/page.asp?page_id=2450
+http://www.bible.org/page.asp?page_id=414
+http://www.bible.org/page.asp?page_id=45
+http://www.bibleandscience.com/science/evolution.htm
+http://www.biblebb.com/files/GR1120.htm
+http://www.biblebb.com/files/MAC/1947.HTM
+http://www.biblebb.com/files/MAC/1949.HTM
+http://www.biblebb.com/files/MAC/45-4.htm
+http://www.biblebb.com/files/MAC/sg1944.htm
+http://www.biblebb.com/files/MAC/sg27-8.htm
+http://www.biblebb.com/files/MAC/tithe.htm
+http://www.biblebb.com/files/spurgeon/0341.htm
+http://www.biblebb.com/files/spurgeon/2868.htm
+http://www.biblebelievers.com/Streetpreaching6.html
+http://www.biblebelievers.org.au/bb950526.htm
+http://www.biblebelievers.org.au/f&l.htm
+http://www.biblebelievers.org.au/jewhis.htm
+http://www.biblebelievers.org.au/radio119.htm
+http://www.biblebelievers.org/lcomm1.htm
+http://www.biblebelievers.org/lfinl.htm
+http://www.biblebell.org/mbag/mailbcb.html
+http://www.bibleexplained.com/other-early/1&2-Kings/2ki07.html
+http://www.biblegateway.com/cgi-bin/bible?version=NIV&passage=james
+http://www.bibleinterp.com/articles/Isbell-Kitchen_and_Minimalism.htm
+http://www.biblelands.org.uk/project_partners/by_location/egypt/el_saray_church/
+http://www.bibleman.net/Keys_for_numbers.htm
+http://www.bibleplants.com/water.htm
+http://www.bibleplus.org/health/ms_lupus.htm
+http://www.bibleprophesy.org/wrong/stone.htm
+http://www.biblequestlink.com/workshop_rotational.htm
+http://www.biblesearch.com/answers/chrstliving/relothers1.htm
+http://www.biblesearch.com/answers/compteach/compcath1.htm
+http://www.biblesociety.org/wr_342/342_fund.htm
+http://www.biblestudylessons.com/cgi-bin/gospel_way/why_believe.php
+http://www.biblestudymanuals.net/chrstnresp2.htm
+http://www.bibletexts.com/qa/qa133.htm
+http://www.bibletexts.com/terms/redsea.htm
+http://www.bibletopics.com/biblestudy/3.htm
+http://www.bibletopics.com/biblestudy/92b.htm
+http://www.bibleviews.com/
+http://www.biblicalresearch.info/page36.html
+http://www.biblio.com/books/12725134.html
+http://www.biblio.com/catalogs/sub/567/Nature_Writing.html
+http://www.bibliomania.com/0/0/6/10/12640/2.html
+http://www.bibliomania.com/2/1/68/115/24948/1.html
+http://www.bibliomania.com/2/3/270/1820/21945/1.html
+http://www.bibliomania.com/2/9/70/117/24592/1.html
+http://www.bibliomania.com/2/9/70/117/24597/6.html
+http://www.bibliomania.com/2/9/70/117/24601/3.html
+http://www.biblioteksvagten.dk/english/sporgetjenester.asp
+http://www.bicc.de/publications/survey/2001/introduction.php
+http://www.bicusa.org/bicusa/issues/world_bank/index.php
+http://www.bicycle.sfgov.org/site/dptbike_index.asp?id=4040
+http://www.bicyclehabitat.com/site/page.cfm?PageID=410
+http://www.bicyclewv.com/tours.cfm
+http://www.bicyclinglife.com/NewsAndViews/Prodriver.htm
+http://www.biddingtons.com/content/creativehewitt.html
+http://www.bidorbuy.co.za/static/BillingStatement.html
+http://www.bidstrup.com/creation.htm
+http://www.bidstrup.com/phone.htm
+http://www.bieberlabs.com/wordpress/archives/2004/11/30/using-svk
+http://www.biemiller.com/albinoa.htm
+http://www.big-boys.com/articles/2004darwinawards.html
+http://www.big-boys.com/articles/lindsaylip.html
+http://www.big-boys.com/details/3161.html
+http://www.big-boys.com/details/3319.html
+http://www.big-boys.com/picture0.html
+http://www.big-penis-secrets.com/penis-enlargement-program.htm
+http://www.bigalcohol.com/p_profile.php?player_id=20
+http://www.bigbooster.com/business_opportunities/
+http://www.bigboystoyz.co.uk/ecom/magic/magic.htm
+http://www.bigbridge.org/Site/Text/Geist.html
+http://www.bigbrotherinside.org/
+http://www.bigbrotheronline.co.uk/bigbrother6/betting.htm
+http://www.bigbrothersvancouver.com/03-OurPrograms/OurBigBunch.html
+http://www.bigdeadplace.com/contract.html
+http://www.bigdeadplace.com/welcome.html
+http://www.bigempire.com/sake/panty.html
+http://www.bigeye.com/bigeye1.htm
+http://www.bigfatblog.com/archives/001293.php
+http://www.bigfatblog.com/faq/
+http://www.bigfivesafaris.co.za/bushtalk.htm
+http://www.bigga.org.uk/greenkeeper/viewstory.php?id=484
+http://www.biggerbras.com/productsan/opera_length_gloves_air-1416.shtml
+http://www.biggerbras.com/productsan/opera_length_gloves_air-3004.shtml
+http://www.biggerbras.com/productsb/AIR-1415.shtml
+http://www.biggerbras.com/productsb/AIR-840.shtml
+http://www.biggerbras.com/productsb/air-3004.shtml
+http://www.biggerbras.com/productscn/satin_opera_gloves_air-1415.shtml
+http://www.biggeworld.com/avlp/advicebook2.html
+http://www.biggsworkers.com/talkin.php
+http://www.bigham.ca/packing.html
+http://www.bigkeys.co.uk/
+http://www.bigleftoutside.com/
+http://www.biglist.com/2BigList/help/listowners/email_from_webpage.shtml
+http://www.bigmagic.com/pages/blackj/column2e.html
+http://www.bigmouthmedia.com/live/articles/seo-customer-guide-14.asp
+http://www.bigmoviezone.com/articles/?uniq=109
+http://www.bigpicnic.com/
+http://www.bigpicture.org/publications/2004archives/SchoolBoardNews04.htm
+http://www.bigpinkcookie.com/2003/04/24/returning-to-90210/
+http://www.bigredc.com/
+http://www.bigscreen.com/ReaderReview.php?movie=FellowshipoftheRing
+http://www.bigskyastroclub.org/constellation.htm
+http://www.bigsoccer.com/forum/archive/index.php/t-14351.html
+http://www.bigtreemurphy.com/Using%20Usual%20Things.htm
+http://www.bigwhiteguy.com/
+http://www.biipb.org/biipb/committee/commd/d9302.htm
+http://www.bijouflix.com/goods/bijou_store1vcd_B.htm
+http://www.bike.com/template.asp?date=5%2F12%2F2003+1%3A10%3A12+PM&lsectionnumber=24&display=True
+http://www.bikeforums.net/archive/index.php/t-42454
+http://www.bikeforums.net/archive/index.php/t-74796
+http://www.bikekatytrail.com/ktcomments.asp?thid=145
+http://www.bikekatytrail.com/ktcomments.asp?thid=145&full=0&ascdesc=0
+http://www.bikereader.com/contributors/misc/takestwo.html
+http://www.bikerevuk.com/customertestimonials.html
+http://www.bikeweb.com/bff
+http://www.bikexprt.com/research/kaplan/recom.htm
+http://www.bikexprt.com/research/kaplan/specific.htm
+http://www.bilaterals.org/article.php3?id_article=122
+http://www.bilaterals.org/article.php3?id_article=1272
+http://www.bilaterals.org/article.php3?id_article=2090
+http://www.bilkent.edu.tr/bilkent/academic/summer-school/2005/faq.html
+http://www.bilkent.edu.tr/~cindoglu/pre.htm
+http://www.bilkent.edu.tr/~jast/Number15/Maragou.htm
+http://www.billandnancy.com/bnblog/bnblog.html
+http://www.billblaikie.ca/ndp.php/SEC40059776dbb54/ART401038bf5c83e
+http://www.billbright.com/ryw/
+http://www.billiardsdigest.com/ccboard/showflat.php?Cat=&Board=ccb&Number=168241&page=&view=&sb=&o=&vc=1
+http://www.billingsclinic.com/AboutUs/NN_011602.htm
+http://www.billmon.org/archives/000242.html
+http://www.billofrights.com/HistoryoftheConstitution.htm
+http://www.billofrightsinstitute.org/ondindex.php
+http://www.billpalmer.net/
+http://www.billparish.com/msftfraudfacts.html
+http://www.billpetro.com/HolidayHistory/hol/jerusalem1.html
+http://www.billrichardsracing.com/
+http://www.billsells.com/home-buyer_listings-malvern-paoli-pennsylvania-homes.asp
+http://www.billson4dunkley.com/speechs/sp_20.html
+http://www.billsparks.org/BlindTalk/
+http://www.billspens.com/billssale/parker/parker51.htm
+http://www.billyblue.com.au/english/aboutus.html
+http://www.billyblue.com.au/hotel/new.html
+http://www.billycorgan.com/confession24.html
+http://www.billyrawlett.com/moneyback.html
+http://www.binarybits.org/
+http://www.binarybits.org/archives/2004/06/
+http://www.bindependent.com/hompg/bi/bindep/store/aisles/exercise/balls/exerciseballuse.htm
+http://www.binggallery.com/dixon.html
+http://www.bingham.com/Bingham/ourfirm_probonoItem.asp
+http://www.binghamtoncrimestoppers.org/case/
+http://www.bio-itworld.com/archive/101404/firstbase.html
+http://www.bio-itworld.com/archive/101404/firstbase.html?action=print
+http://www.bio-itworld.com/careers/viewpoints/1430.html
+http://www.bio-itworld.com/products/090902_assays-on-demand.html
+http://www.bio.com/industryanalysis/industryanalysis_features.jhtml?cid=ci17921521
+http://www.bio.com/store/terms.jhtml
+http://www.bio.miami.edu/hare/ileus.html
+http://www.bio.org/bioethics/background/okarmatestimony.asp
+http://www.bio.org/foodag/animalpoints.asp?p=yes
+http://www.bio.org/speeches/speeches/plenary2000.asp
+http://www.bio.psu.edu/People/Faculty/Fisher/fisher.htm
+http://www.bio.psu.edu/directory/homepages/crf2.action
+http://www.bio.uu.nl/intecol/programme/list.php?sy=28&ord=session
+http://www.bio.uu.nl/intecol/programme/list.php?sy=35&ord=session
+http://www.biochem.northwestern.edu/ibis/faculty/morimoto.htm
+http://www.biochem.wisc.edu/biochem636/exercise2.html
+http://www.biochemistry.unimelb.edu.au/students/undergrad200.htm
+http://www.biocontrols.com/aero120.htm
+http://www.biodiesel.org/markets/hom/default.asp
+http://www.bioethics.gov/background/callahan_intro.html
+http://www.bioethics.gov/bookshelf/reader/chapter10.html
+http://www.bioethics.gov/reports/cloningreport/children.html
+http://www.bioethics.gov/reports/stemcell/chapter3.html
+http://www.bioethics.gov/reports/stemcell/chapter4.html
+http://www.bioethics.gov/transcripts/jan02/opening01.html
+http://www.bioethics.gov/transcripts/sep03/session3.html
+http://www.bioethics.gov/transcripts/sep03/session4.html
+http://www.bioethics.msu.edu/mhr/04f/continuing_the_discussion.html
+http://www.bioethics.net/articles.php?viewCat=7&articleId=139
+http://www.bioethics.net/journal/j_articles.php?aid=61
+http://www.biogen.nu.ac.za/research.htm
+http://www.biohelsinkiconf.com/programme/liikanen-speech.htm
+http://www.biola.edu/admin/auxil/hb_occupancy.cfm
+http://www.biola.edu/admin/auxil/hb_roomrates.cfm
+http://www.biola.edu/ceacademic/bensonc2.cfm
+http://www.biolbull.org/cgi/content/full/200/2/206
+http://www.bioline.org.br/request?am04034
+http://www.bioline.org.br/request?ni04070
+http://www.biology-online.org/9/3_movement_molecules.htm
+http://www.biology.eku.edu/FOSTER/514syl.htm
+http://www.biology.qmul.ac.uk/teaching/csum.asp?Course_Code=SBS-928
+http://www.biologylessons.sdsu.edu/classes/lab6/lab6.html
+http://www.biologylessons.sdsu.edu/ta/classes/lab6/lab6.html
+http://www.biols.susx.ac.uk/resgroups/biochem/smith.html
+http://www.biom.net/dojo.php/teahouse/INDEX/C108/P10/
+http://www.biom.net/dojo.php/teahouse/INDEX/C182/P10/
+http://www.biomech.com/db_area/archives/2002/0212.cover.bio.shtml
+http://www.biomedcentral.com/1092-8464/7/55/abstract
+http://www.biomedcentral.com/1471-2091/6/4
+http://www.biomedcentral.com/1471-2105/6/77
+http://www.biomedcentral.com/1471-2105/6/S1/S12
+http://www.biomedcentral.com/1471-2105/6/S1/S15
+http://www.biomedcentral.com/1471-213X/2/8
+http://www.biomedcentral.com/1471-2199/6/11
+http://www.biomedcentral.com/1471-2261/2/15
+http://www.biomedcentral.com/1471-2261/5/5
+http://www.biomedcentral.com/1471-2288/4/29
+http://www.biomedcentral.com/1471-2393/5/8
+http://www.biomedcentral.com/1471-244X/5/17
+http://www.biomedcentral.com/1471-2458/3/34
+http://www.biomedcentral.com/1471-2458/4/20
+http://www.biomedcentral.com/1471-2458/4/51
+http://www.biomedcentral.com/1472-6807/2/8
+http://www.biomedcentral.com/1472-6815/2/2
+http://www.biomedcentral.com/1472-6831/5/2
+http://www.biomedcentral.com/1472-6920/5/6
+http://www.biomedcentral.com/1472-6955/3/2
+http://www.biomedcentral.com/1741-7007/3/9
+http://www.biomedcentral.com/1741-7015/2/8
+http://www.biomedcentral.com/1741-7015/3/1
+http://www.biomedcentral.com/info/about/pr-releases?pr=20040510b
+http://www.biomedcentral.com/news/20030312/01/
+http://www.biomedcentral.com/news/20040528/01/
+http://www.biomedcentral.com/openaccess/forum/?letter=20030722ej
+http://www.biomedcomm.com/store/pi_ghc_immune.html
+http://www.biomedicalinstitute.org/index.cfm/fa/press.item/PressID/27
+http://www.biomicrobics.com/
+http://www.biomorphdesk.com/computer_desk.html
+http://www.biomorphdesk.com/ergonomic_furniture.html
+http://www.biomorphdesk.com/human_factors.html
+http://www.biomorphdesk.com/music_production.html
+http://www.biomorphdesk.com/video_production_desk.html
+http://www.bionews.net/B/5/I41CD498-001.htm!ArcEntryInfo=0004.21.I41CD498
+http://www.bionews.net/B/5/I41CD7A6-001.htm!ArcEntryInfo=0004.75.I41CD7A6
+http://www.bionews.net/b/5/I41CD498-001.htm!ArcEntryInfo=0004.21.I41CD498
+http://www.bionow.co.uk/manufacturing.htm
+http://www.bionow.co.uk/monthlynews/number36.htm
+http://www.bioone.org/bioone/?request=get-document&issn=0002-7685&volume=062&issue=08&page=0553
+http://www.bioone.org/bioone/?request=get-document&issn=0002-8444&volume=092&issue=01&page=0030
+http://www.bioone.org/bioone/?request=get-document&issn=0013-0001&volume=056&issue=01&page=0027
+http://www.bioone.org/bioone/?request=get-document&issn=0015-4040&volume=086&issue=01&page=0089
+http://www.bioone.org/bioone/?request=get-document&issn=0022-0493&volume=098&issue=03&page=0976
+http://www.bioone.org/bioone/?request=get-document&issn=0022-3360&volume=074&issue=02&page=0224
+http://www.bioone.org/bioone/?request=get-document&issn=0045-8511&volume=004&issue=04&page=0883
+http://www.bioone.org/bioone/?request=get-document&issn=0046-225X&volume=031&issue=06&page=0977
+http://www.bioone.org/bioone/?request=get-document&issn=0094-8373&volume=029&issue=01&page=0030
+http://www.bioone.org/bioone/?request=get-document&issn=0273-8570&volume=074&issue=04&page=0349
+http://www.bioone.org/bioone/?request=get-document&issn=0890-037X&volume=019&issue=01&page=0043
+http://www.bioone.org/bioone/?request=get-document&issn=1082-6742&volume=014&issue=01&page=0060
+http://www.biopark.org/peru/amazonreading.html
+http://www.biophysj.org/cgi/content/full/74/2/681
+http://www.biophysj.org/cgi/content/full/79/6/2902
+http://www.biophysj.org/cgi/content/full/81/2/1093
+http://www.biopoint.com/inquiry/ibr.html
+http://www.biospace.com/news_category.cfm?CategoryID=24&SR=141
+http://www.biospectrumindia.com/content/shakers/104061001.asp
+http://www.biota.org/people/douglasadams/
+http://www.bioteach.ubc.ca/CellBiology/TheCellCycle/
+http://www.biotech-info.net/Roundup_soybeans_yield_less.html
+http://www.biotech.ca/EN/nrSept1800.html
+http://www.bioterrorism.slu.edu/bt/official.htm
+http://www.biothinking.com/applysd/projects.htm
+http://www.biotopics.co.uk/circuln/blood.html
+http://www.bipolaraware.co.uk/forum/archive/index.php/t-37
+http://www.bipolaraware.co.uk/forum/archive/index.php/t-681.html
+http://www.bipolaraware.co.uk/forum/archive/index.php/t-943.html
+http://www.bipolarworld.net/Bipolar%20Disorder/Diagnosis/dsmv.htm
+http://www.bipsolutions.com/briefings/Briefings2004/Brief04_12.php
+http://www.bipsolutions.com/pass/consultants.php
+http://www.bird.co.uk/
+http://www.birdhop.net/
+http://www.birdpages.co.uk/main%20pages/sleevenotes.htm
+http://www.birds-eye.net/article_archive/distributed_systems.htm
+http://www.birds-eye.net/article_archive/non-invasive_network_mgt.htm
+http://www.birds-n-garden.com/grow_lights_plants_carts_stands.html
+http://www.birlasunlife.com/home1/school/Tax_issues.asp
+http://www.birthcenters.org/faq/clientsatis.php
+http://www.birthingbetter.com/expectant/special/disabilities.htm
+http://www.bis.org/cbhub/indexc6.htm
+http://www.bis.org/cbhub/indexp4.htm
+http://www.bis.org/events/agm2005/sp050627a.htm
+http://www.bis.org/press/p020710.htm
+http://www.bis.org/press/p031011.htm
+http://www.bis.org/press/p050509b.htm
+http://www.bis.org/publ/cpss68.htm
+http://www.bis.org/speeches/sp000505.htm
+http://www.bis.org/speeches/sp001124.htm
+http://www.bis.org/speeches/sp010621.htm
+http://www.bis.org/speeches/sp030205.htm
+http://www.bis.org/speeches/sp040921.htm
+http://www.bis.org/speeches/sp040927.htm
+http://www.bis.org/speeches/sp050330.htm
+http://www.bis.org/speeches/sp991002.htm
+http://www.biscuitfire.com/workshop_notes12_9aft.htm
+http://www.bisnar-chase.com/medical_malpractice.html
+http://www.bisnis.doc.gov/bisnis/bisdoc/010724vlad_banking.htm
+http://www.bisnis.doc.gov/bisnis/bisdoc/0310AutoRFE.htm
+http://www.bisnis.doc.gov/bisnis/bisdoc/0411KZagribusiness%20report.htm
+http://www.bisnis.doc.gov/bisnis/bisdoc/0412pharmge.htm
+http://www.bisnis.doc.gov/bisnis/lead.cfm?1333
+http://www.bisoncentre.com/resources/bce330/bce330_feed_weigh_station.html
+http://www.bit-tech.net/bits/2005/05/24/amd_lucas_starwars/1.html
+http://www.bit-tech.net/columns/2004/10/08/hands_on_the_keyboard/
+http://www.bitbrothers.com/sea/jobs.htm
+http://www.bitc.org.uk/resources/viewpoint/david_frost.html
+http://www.bitc.org.uk/resources/viewpoint/indexhiggs.html
+http://www.bitlaw.com/patent/international.html
+http://www.bitlessbridle.com/about/lighthearted.phtml
+http://www.bitpipe.com/rlist/term/Application-Integration.html
+http://www.bitrixsoft.com/editions/professional.php
+http://www.bitron.com.au/page2.html
+http://www.bitscapesolutions.com/offshore-outsourcing-india.htm
+http://www.bitstream.com/corporate/news/press_2004/bt_041108_q3results.html
+http://www.bitter-girl.com/blogger.html
+http://www.bitterjerksociety.org/
+http://www.bitterpill.org/
+http://www.bitterroot.com/grizzly/bears8n.htm
+http://www.bitvise.com/contact.html
+http://www.biz-community.com/196/18.html
+http://www.biz-community.com/Article/196/20/4860.html
+http://www.biz-community.com/Companies/196/70.html
+http://www.biz-community.com/PressOffice/PressRelease.aspx?i=209&ai=4576
+http://www.biz-day.com/read/general_news/26_jun_05/gqf9t-4/professional_move_by_singapore_india.htm
+http://www.bizarshop.com.au/products/bizar_shop_specs.html
+http://www.bizatomic.com/terms.html
+http://www.bizauto.com/speak.htm
+http://www.bizbooksoftware.com/sellingsystem.htm
+http://www.bized.ac.uk/
+http://www.bized.ac.uk/compfact/no31/no315.htm
+http://www.bized.ac.uk/current/mind/2003_4/031103.htm
+http://www.bized.ac.uk/current/mind/2003_4/080903.htm
+http://www.bized.ac.uk/current/mind/2004_5/140305.htm
+http://www.bized.ac.uk/dataserv/ons/onsadvice.htm
+http://www.bized.ac.uk/educators/16-19/business/marketing/activity/research.htm
+http://www.bized.ac.uk/learn/sheets/glossary.htm
+http://www.bized.ac.uk/timeweb/digging/dig_source_illus.htm
+http://www.bized.ac.uk/virtual/dc/copper/theory/th17.htm
+http://www.bized.ac.uk/virtual/dc/resource/glos3.htm
+http://www.bized.ac.uk/virtual/economy/library/glossary/glossarymp.htm
+http://www.bizfilings.com/advanta/LLCFAQ.htm
+http://www.bizfilings.com/choosepastissue.asp?issue=75
+http://www.bizforward.com/wdc/issues/2002-03/buzzguide/
+http://www.bizhelp24.com/accounting/first-year-tax-capital-allowances-1.shtml
+http://www.bizhelp24.com/personal_development/body_language.shtml
+http://www.bizintelligencepipeline.com/57700251
+http://www.bizjournals.com/albany/stories/2002/12/09/focus4.html
+http://www.bizjournals.com/albany/stories/2002/12/09/focus4.html?jst=s_rs_hl
+http://www.bizjournals.com/atlanta/stories/2001/12/10/daily33.html
+http://www.bizjournals.com/austin/stories/2004/10/11/daily12.html?jst=s_cn_hl
+http://www.bizjournals.com/austin/stories/2004/12/06/daily34.html
+http://www.bizjournals.com/bizwomen/consultants/sales_moves/1999/08/30/column160.html
+http://www.bizjournals.com/bizwomen/consultants/winning_at_work/2004/03/01/column5.html
+http://www.bizjournals.com/boston/stories/2000/10/02/daily10.html?jst=s_rs_hl
+http://www.bizjournals.com/boston/stories/2002/03/25/story5.html
+http://www.bizjournals.com/buffalo/stories/1999/03/01/smallb1.html
+http://www.bizjournals.com/charlotte/stories/2005/04/11/daily3.html?jst=s_cn_hl
+http://www.bizjournals.com/dallas/stories/2005/01/03/daily42.html
+http://www.bizjournals.com/extraedge/consultants/small_business_briefing/2004/04/26/column114.html
+http://www.bizjournals.com/industries/banking_financial_services/commercial_banking/2005/01/31/portland_focus2.html
+http://www.bizjournals.com/industries/real_estate/residential/2005/06/20/memphis_story1.html?page=2
+http://www.bizjournals.com/industries/real_estate/residential/2005/06/20/memphis_story1.html?t=email_story
+http://www.bizjournals.com/jacksonville/stories/2002/05/06/daily35.html
+http://www.bizjournals.com/nashville/stories/1999/07/19/focus3.html
+http://www.bizjournals.com/orlando/stories/2004/12/06/daily6.html?jst=s_cn_hl
+http://www.bizjournals.com/phoenix/stories/2005/01/24/smallb1.html?jst=s_cn_hl
+http://www.bizjournals.com/sanfrancisco/stories/2004/11/01/daily6.html
+http://www.bizjournals.com/sanfrancisco/stories/2005/01/31/editorial3.html
+http://www.bizjournals.com/seattle/stories/2001/03/12/newscolumn2.html
+http://www.bizjournals.com/seattle/stories/2002/02/04/smallb4.html
+http://www.bizjournals.com/seattle/stories/2002/02/18/newscolumn1.html
+http://www.bizjournals.com/seattle/stories/2002/09/30/newscolumn1.html
+http://www.bizjournals.com/seattle/stories/2003/09/22/smallb4.html
+http://www.bizjournals.com/southflorida/stories/2003/05/19/daily28.html
+http://www.bizjournals.com/tampabay/stories/1997/07/07/daily5.html
+http://www.bizjournals.com/twincities/stories/1997/10/06/focus1.html
+http://www.bizjournals.com/washington/stories/2004/01/26/newscolumn2.html
+http://www.bizmonthly.com/6_2005/5.shtml
+http://www.bizrate.com/buy/noncat_prod_details__cat_id--10260100,keyword--Shoe%20Jordan,mid--39490,oid--179183374.html
+http://www.bizrate.com/buy/noncat_prod_details__oid--309663945.html
+http://www.bizrate.com/buy/products__att1162--1127-,att280721--272635-,cat_id--10100000.html
+http://www.bizrate.com/buy/products__att1162--1127-,cat_id--10100000.html
+http://www.bizrate.com/buy/products__att1162--264716-,att364779--271051-,cat_id--13050805.html
+http://www.bizrate.com/buy/products__att259--393647-,att270257--270258-,cat_id--13030200.html
+http://www.bizrate.com/buy/products__att259--395580-,att296669--270263-,cat_id--16010300.html
+http://www.bizrate.com/buy/products__att288121--266491-,cat_id--14010100.html
+http://www.bizrate.com/buy/products__att296669--270263-,cat_id--16010300.html
+http://www.bizrate.com/buy/products__att364779--271051-,cat_id--13050805.html
+http://www.bizrate.com/buy/products__att372172--294218-,cat_id--12020400,keyword--Mitchell%20Ness.html
+http://www.bizrate.com/buy/products__cat_id--10090300,keyword--easy%20fit.html
+http://www.bizrate.com/buy/products__cat_id--14010100,keyword--Lord%20Of%20Rings.html
+http://www.bizrate.com/buy/products__cat_id--8049,keyword--York.html
+http://www.bizrate.com/buy/refine__att--259818,att259818--more,cat_id--10180000.html
+http://www.bizrate.com/buy/refine__att--298072,att298072--more,cat_id--10090300,keyword--easy%20fit.html
+http://www.bizrate.com/marketplace/product_info/overview/index__cat_id--13110104,prod_id--276883712.html
+http://www.bizrate.com/marketplace/product_info/overview/index__cat_id--420,prod_id--11234843.html
+http://www.bizrate.com/marketplace/product_info/overview/index__cat_id--5213,prod_id--1151322.html
+http://www.bizsites.com/webxtras/ebay.html
+http://www.bizspirit.com/bsj/archive/articles/steckel1.html
+http://www.biztimes.com/index.cfm?fuseaction=currentissue.columnists&issuesColumnistsID=16
+http://www.biztimes.com/index.cfm?fuseaction=currentissue.welcome&display=PubHigh&num=5
+http://www.biztroubleshooter.com/Glossary/glossary_a-n.htm
+http://www.bizwiz.com/bizwizwire/pressrelease/2299/848k8wf8x44ww8ske8j.htm
+http://www.bizwiz.com/salesjobs/topcand.htm
+http://www.bizzykidz.com/faq.php
+http://www.bjcc.org/contact/ctofaq.html
+http://www.bjharvest.co.uk/baby.htm
+http://www.bjinvest.gov.cn/english/8bjhk/fy6.jsp
+http://www.bjmjr.com/afromestizo/el_salvador.htm
+http://www.bjophthalmol.com/cgi/content/full/89/2/151
+http://www.bjreview.com.cn/200420/World-200420(C).htm
+http://www.bjreview.com.cn/200421/Cover-200421(A).htm
+http://www.bjreview.com.cn/En-2005/05-10-e/10-bus-3.htm
+http://www.bkd.com/service/tax/CostSegregation-SaveTaxes.htm
+http://www.bkmarcus.com/blog/
+http://www.bkslegal.com/html/newsletters/lawnotes/SecondQuarter2004.html
+http://www.bl.uk/about/policies/digital.html
+http://www.bl.uk/collections/patents/faq.html
+http://www.bl.uk/collections/social/asylum.html
+http://www.bl.uk/projects/theatrearchive/cheeseman.html
+http://www.bl.uk/projects/theatrearchive/draper.html
+http://www.bl.uk/services/learning.html
+http://www.blaauwberg.net/milnertonbook/CHAPTER7.asp
+http://www.blachford.info/computer/Cells/Cell2.html
+http://www.black-collegian.com/african/kingact101.shtml
+http://www.blackaids.org/kujisource/kuji0102/oasis.htm
+http://www.blackamericaweb.com/site.aspx/misc/aboutus
+http://www.blackandasiangrad.ac.uk/students/initiatives.asp?initiativeID=12
+http://www.blackathletesportsnetwork.net/artman/publish/article_0798.shtml
+http://www.blackboxvoting.org/
+http://www.blackboyscan.co.uk/Mainstream.htm
+http://www.blackbritain.co.uk/columnists/category.aspx?c=Legal
+http://www.blackcatholicchicago.org/news_04/family_reflection_0204.htm
+http://www.blackchat.co.uk/theblackforum/forum16/805.html
+http://www.blackchat.co.uk/theblackforum/forum17/3157.html
+http://www.blackchat.co.uk/theblackforum/forum17/8271.html
+http://www.blackchat.co.uk/theblackforum/view_forum.php?id=16&sort_by=starter
+http://www.blackcommentator.com/133/133_kilson_1.html
+http://www.blackcommentator.com/19_commentary.html
+http://www.blackcommentator.com/38/38_e_mail.html
+http://www.blackcommentator.com/47/47_bacon.html
+http://www.blackcommentator.com/48/48_bubble.html
+http://www.blackdoginstitute.org.au/gettinghelp/links/index.cfm
+http://www.blackducksoftware.com/
+http://www.blackfilm.com/20041224/
+http://www.blackfilm.com/20050617/features/angelarobinson.shtml
+http://www.blackfilm.com/20050624/features/georgearomero.shtml
+http://www.blackfive.net/main/2005/06/blackfive_blogi.html
+http://www.blackfive.net/main/2005/06/the_warrior_liv.html
+http://www.blackfive.net/main/listening_to/
+http://www.blackgate.com/jan02/fiction/3nights.htm
+http://www.blackgate.com/july02/fiction/mama.htm
+http://www.blackgirl.org/beauty.html
+http://www.blackhat.com/html/bh-europe-05/bh-eu-asia-05-cfp.html
+http://www.blackhat.info/live/
+http://www.blackhillsfc.org/answerstoquestions.htm
+http://www.blackhole.on.ca/richardson.htm
+http://www.blackmagic-design.com/company/overview/
+http://www.blackmask.com/cgi-bin/newlinks/page.cgi?g=Gothic_Tales%2FM_R_James%2Findex.html&d=1
+http://www.blackmask.com/jrusk/wcollins/ad/pro4.htm
+http://www.blackmask.com/jrusk/wcollins/deep/deep17.htm
+http://www.blackmountainnews.com/?module=displaystory&story_id=662&format=html
+http://www.blackpool.ac.uk/html/content/schools/curriculumdepartments/visualperformingarts/artdesign/fe/
+http://www.blackpower.de/lyrics/main_artist_ede4984689988a5259925b926e7a6743_lyric_fbdddf6d4fe08a6b74613cb4a5e6808f.html
+http://www.blackpresence.co.uk/pages/historical/jeff_green.htm
+http://www.blackradicalcongress.org/mustsucceed.html
+http://www.blackraptor.net/m7fic-13/debts1.htm
+http://www.blackraptor.net/m7fic-27/tomorrow.htm
+http://www.blackraptor.net/m7fic2/nextday1.htm
+http://www.blackrockresidential.com/br-designs.htm
+http://www.blackshipsandsamurai.com/compsite/core_gifts.html
+http://www.blackskies.com/intro.html
+http://www.blackstoneaudio.com/audiobook.cfm?ID=3155
+http://www.blacktable.com/
+http://www.blacktable.com/blacklist040330.htm
+http://www.blacktable.com/gillin030901.htm
+http://www.blacktable.com/maurier050111.htm
+http://www.blacktown.nsw.gov.au/our-city/history/the-landmarks/royal-cricketers-arms-hotel.cfm
+http://www.blacktriangle.org/blogarchive/2003_09_01_archive.html
+http://www.blackwell-synergy.com/doi/abs/10.1111/j.1365-4632.2004.02079.x
+http://www.blackwell-synergy.com/doi/abs/10.1111/j.1398-9995.2005.00773.x
+http://www.blackwell-synergy.com/doi/abs/10.1111/j.1442-9993.2005.01444.x
+http://www.blackwell-synergy.com/doi/abs/10.1111/j.1471-4159.2004.02942.x
+http://www.blackwell-synergy.com/doi/pdf/10.1111/1467-9701.00558
+http://www.blackwell-synergy.com/links/doi/10.1111/0591-2385.00369
+http://www.blackwell-synergy.com/links/doi/10.1111/1475-4983.00331/abs/
+http://www.blackwell-synergy.com/links/doi/10.1111/j.1365-2745.2004.00945.x
+http://www.blackwell-synergy.com/links/doi/10.1111/j.1365-2966.2005.08844.x/abs/
+http://www.blackwellpublishing.com/Dentistry/authors/permission.asp
+http://www.blackwellpublishing.com/PlantSci/latest/article.asp?id=43
+http://www.blackwellpublishing.com/bauthor/ppoint.asp
+http://www.blackwellpublishing.com/socialpolicy/hillinterview.htm
+http://www.blackwellpublishing.com/submit.asp?ref=0308-0110
+http://www.blackwellpublishing.com/submit.asp?ref=1097-3923
+http://www.bladam.com/archives/0209011828.htm
+http://www.bladeforums.com/forums/archive/index.php/t-176733.html
+http://www.bladeforums.com/forums/showthread.php?t=331930&page=2
+http://www.blagger.com/form2.php
+http://www.blah.me.uk/archive/2005_03_01_archive.html
+http://www.blaine.k12.wa.us/EStandards/Standards/document/chapter4/alg.htm
+http://www.blairbancroft.com/major/excerpt.htm
+http://www.blakeneymanor.com/books/sp/15.html
+http://www.blakes.com/english/publications/brip/article.asp?A_ID=161&DB=blakesProperty
+http://www.blakeston.stockton.sch.uk/subjects/ict/blakyinternet.html
+http://www.blakjak.demon.co.uk/bear_tal.htm
+http://www.blanchardonline.com/aboutblanchard/liberty_head_nickel.php
+http://www.blankrome.com/Publications/maritime/update0105_04.asp
+http://www.blastitude.com/4/pg2.htm
+http://www.blather.net/archives3/issue3no5.html
+http://www.blazerscats.com/german_pinscher/pinscher.html
+http://www.blc.org/task_forces/FY02/tf_rss/rss_wd.html
+http://www.ble.org/pr/news/newsflash.asp?id=4062
+http://www.bleading-edge.com/Publications/C++Journal/Cpjour2.htm
+http://www.blender3d.org/cms/Blender_Architecture.336.0.html
+http://www.blepharospasm.org/1999baker.html
+http://www.blert.net/fleetwood/repaint.html
+http://www.blessing.org/
+http://www.bletchleyparkheritage.org.uk/aescvh.htm
+http://www.bletchleyrugby.com/club_news.html
+http://www.bletchleyrugby.com/community_development.html
+http://www.blhumber.co.uk/eventsmain.php?s=01-Jul-2005
+http://www.blimpcam.com/guide/basics/setgoals.html
+http://www.blind.state.ia.us/Bep/ch-216d.htm
+http://www.blind.state.ia.us/code.htm
+http://www.blind.state.ia.us/laws/chapter1-rules.htm
+http://www.blindeyemedia.com/chashama.html
+http://www.blindmindseye.com/
+http://www.blindmusicstudent.org/Articles/learning_teaching.htm
+http://www.blink.org.uk/pdescription.asp?key=3418&grp=44&cat=356
+http://www.blink.org.uk/pdescription.asp?key=4205&grp=2&cat=365
+http://www.blink.org.uk/print.asp?key=3418
+http://www.bliss.org.uk/pagebuild.php?texttype=whatsnew_babywalkers_paper
+http://www.blitzpromotions.com/blitz183.htm
+http://www.blizzard.com/war3x/insider/pardo-interview.shtml
+http://www.blm.gov/education/00_resources/articles/alaskas_cold_desert/classroom.html
+http://www.blm.gov/nhp/NPR/pe_dgst4.html
+http://www.blm.gov/nhp/efoia/or/fy2005/ib/ib-or-2005-064.htm
+http://www.blm.gov/nhp/efoia/wo/fy03/im2003-233.htm
+http://www.blm.gov/nhp/efoia/wo/fy05/im2005-006.htm
+http://www.blm.gov/nhp/news/legislative/pages/2000/te000224.htm
+http://www.blm.gov/nhp/news/legislative/pages/2000/te000720PC.htm
+http://www.blm.gov/nhp/news/legislative/pages/2001/te010308.htm
+http://www.blm.gov/nhp/news/legislative/pages/2003/te030604a.htm
+http://www.blm.gov/nhp/news/legislative/pages/2005/te050427.htm
+http://www.blm.gov/nhp/pubs/rewards/2003/fire.htm
+http://www.blog-irish.com/devil2.htm
+http://www.blog-irish.com/jansen.htm
+http://www.blog-irish.com/noirish.htm
+http://www.blog.com.np/index.php?p=611
+http://www.blog.com.np/index.php?p=671
+http://www.blog.mweb.co.za/users/ntsunda
+http://www.blog.mweb.co.za/users/onlythelonely/
+http://www.blogactive.com/
+http://www.blogactive.com/2005/01/take-action-house-republicans-line-up.html
+http://www.blogfc.com/theblog/?p=276
+http://www.blogfodder.net/archives/2002_07.html
+http://www.blogforamerica.com/
+http://www.blogforamerica.com/archives/006455.html
+http://www.blogforamerica.com/archives/006481.html
+http://www.blogforamerica.com/archives/006526.html
+http://www.blogforcleanair.blogspot.com/
+http://www.blogger.com/about
+http://www.blogger.com/knowledge/2004/07/blogging-from-boston.pyra
+http://www.blogger.com/knowledge/2004/09/promoting-your-blog.pyra
+http://www.blogger.com/knowledge/2005/02/so-you-wanna-be-blogstar.pyra
+http://www.bloggerheads.com/archives/2005/04/im_busy.asp
+http://www.bloggerheads.com/bbc/
+http://www.bloggerheads.com/can_weblogs/bush_bum.asp
+http://www.bloggerme.co.uk/the_uk_web_log_forum/9_my_wifes_shoes/
+http://www.bloggers.ca/
+http://www.bloggingbaby.com/entry/1234000407044150/
+http://www.bloggingbaby.com/entry/1234000527047736/
+http://www.blogherald.com/2005/01/07/gates-claims-nearly-1-million-users-for-msn-spaces/
+http://www.blogherald.com/2005/06/07/100000-bloggers-in-germany/
+http://www.bloglet.com/
+http://www.bloglicious.com/tony/
+http://www.bloglines.com/blog/sanjiva?subid=914623
+http://www.bloglogic.net/
+http://www.blogmaverick.com/
+http://www.blogmaverick.com/entry/1234000270043583/
+http://www.blogorithm.com/
+http://www.blogscanada.ca/blog/default.aspx?date=2004-01-30
+http://www.blogscanada.ca/egroup/default.aspx
+http://www.blogscanada.ca/topblogs/
+http://www.blogsforbush.com/
+http://www.blogsforbush.com/mt/archives/002682.html
+http://www.blogsforbush.com/mt/archives/004595.html
+http://www.blogskins.com/info.php?sid=1208
+http://www.blogsofwar.com/
+http://www.blogtimore.com/
+http://www.blogto.com/city/2005/06/good_enough_is_no_longer_good_enough_for_toronto/
+http://www.blonnet.com/ew/2003/02/19/stories/2003021900080100.htm
+http://www.blonnet.com/iw/2004/01/25/stories/2004012500391200.htm
+http://www.blonnet.com/iw/2004/03/28/stories/2004032800150900.htm
+http://www.blonnet.com/iw/2004/08/01/stories/2004080100060900.htm
+http://www.blood-sports.net/mk/mkfaqs/mkgoldfaqs.shtml
+http://www.blood.co.uk/hospitals/communications/concessionary_letter.htm
+http://www.blood.co.uk/hospitals/communications/hl/0410/0410.htm
+http://www.blood.co.uk/hospitals/library/bm/issue6/BM64.htm
+http://www.blood.co.uk/hospitals/library/shot/shot99a.htm
+http://www.blood.co.uk/hospitals/services/user_guide/UG02.htm
+http://www.blood.co.uk/pages/b10faq.html
+http://www.blood.co.uk/pages/bloodonormd.html
+http://www.blood.co.uk/visually_impaired/vi_bloodonormd.html
+http://www.bloodandtreasure.blogspot.com/
+http://www.bloodbath.biz/
+http://www.bloodbook.com/rare.html
+http://www.bloodbook.com/titles.html
+http://www.bloodjournal.org/cgi/content/full/105/2/750
+http://www.bloodline.net/stories/storyReader$3065
+http://www.bloodservices.ca/CentreApps/Internet/UW_V502_MainEngine.nsf/page/E_FAQSafety_Security?OpenDocument
+http://www.bloodstockireland.co.uk/
+http://www.bloomberg.com/analysis/glossary/bfglosn.htm
+http://www.bloomberg.com/apps/news?pid=10000087&sid=aOrdZLguwGWg&refer=top_world_news
+http://www.bloomfield.me.uk/
+http://www.bloomingpc.com/
+http://www.bloomington.in.us/~phototex/transfer.html
+http://www.bloomquist.ca/publications/Church%20materials/lent%201.HTM
+http://www.blopens.com/faq.htm
+http://www.blossomswap.com/garden-forums/index.php?showtopic=5881
+http://www.blounttn.org/trustee/default.htm
+http://www.blowingrock.com/construction.html
+http://www.bls.census.gov/cps/pub/jec_1298.htm
+http://www.bls.census.gov/cps/pub/jec_dec2000.htm
+http://www.bls.gov/mls/home.htm
+http://www.bls.gov/news.release/empsit.nr0.htm
+http://www.bls.gov/oco/cg/cgs005.htm
+http://www.bls.gov/oco/cg/cgs026.htm
+http://www.bls.gov/oco/cg/cgs031.htm
+http://www.bls.gov/oco/oco2001.htm
+http://www.bls.gov/oco/oco2006.htm
+http://www.bls.gov/oco/ocos002.htm
+http://www.bls.gov/oco/ocos023.htm
+http://www.bls.gov/oco/ocos025.htm
+http://www.bls.gov/oco/ocos048.htm
+http://www.bls.gov/oco/ocos053.htm
+http://www.bls.gov/oco/ocos055.htm
+http://www.bls.gov/oco/ocos058.htm
+http://www.bls.gov/oco/ocos059.htm
+http://www.bls.gov/oco/ocos092.htm
+http://www.bls.gov/oco/ocos114.htm
+http://www.bls.gov/oco/ocos121.htm
+http://www.bls.gov/oco/ocos122.htm
+http://www.bls.gov/oco/ocos160.htm
+http://www.bls.gov/oco/ocos162.htm
+http://www.bls.gov/oco/ocos174.htm
+http://www.bls.gov/oco/ocos192.htm
+http://www.bls.gov/oco/ocos260.htm
+http://www.bls.gov/oco/print/ocos192.htm
+http://www.bls.gov/oco/print/ocos260.htm
+http://www.bls.gov/oes/current/naics3_451000.htm
+http://www.bls.gov/oes/current/naics4_448300.htm
+http://www.bls.gov/oes/current/naics4_451100.htm
+http://www.bls.gov/opub/cwc/cm20030124ar03p1.htm
+http://www.bls.gov/opub/hom/homch13_a.htm
+http://www.bls.gov/opub/hom/homch14_g.htm
+http://www.bls.gov/opub/hom/homch1_f.htm
+http://www.bls.gov/opub/mlr/2001/03/bookrevs.htm
+http://www.bls.gov/opub/ted/2001/mar/wk4/art01.htm
+http://www.bls.gov/ro5/cexmpls.htm
+http://www.bls.gov/ro6/ro6pay.htm
+http://www.bls.gov/ro7/aapaymtn.htm
+http://www.bls.gov/ro7/aapayplains.htm
+http://www.bls.gov/ro9/aapca.htm
+http://www.bls.gov/soc/soc_sept.htm
+http://www.blue-room.org.uk/index.php?showtopic=5303&view=getlastpost
+http://www.bluearc.com/html/solutions/solutions-vm-entertainment.shtml
+http://www.bluebirdlane.com/books.htm
+http://www.bluebirdtransfer.com/movingpolicy.html
+http://www.bluebus.org/archives/000183.php
+http://www.bluebytesoftware.com/blog/default.aspx?date=2004-10-10
+http://www.bluecollarandproudofit.com/advice.htm
+http://www.bluecorncomics.com/primtive.htm
+http://www.bluecornmusic.com/site/artists/1092603973/
+http://www.bluecrossca.com/JobOpportunities/HowtoApply.htm
+http://www.bluediamond.com/growers/grower_news/index.cfm?l_tableid=159
+http://www.bluediamond.com/growers/techniques/pest_management/antAttack.cfm
+http://www.bluefish.org/bpaspark.htm
+http://www.bluegrass.net/~jclark/coral_calcium.htm
+http://www.bluegreenearth.us/archive/reviews/2003b/tim_book1.html
+http://www.bluehaze.com.au/humour/2001_06_01.html
+http://www.bluehaze.com.au/vinyl/tech1.html
+http://www.bluehoney.org/Chaos.htm
+http://www.blueindex.co.uk/stock-trading-strategies-forex.html
+http://www.bluejacketscentral.com/
+http://www.bluekipper.com/chippapers/03_04/league/Leicester(a).htm
+http://www.bluelemur.com/index.php?p=388
+http://www.bluelemur.com/index.php?p=519
+http://www.bluemoonranch.net/what's%20new.htm
+http://www.bluemountains.org.au/bushliving/livingnearthebush/recreation.shtml
+http://www.bluenote.com/detail.asp?SelectionID=10218
+http://www.bluenote.com/detail.asp?SelectionID=10246
+http://www.blueoceaninstitute.org/36?speciesId=34
+http://www.blueoregon.com/2005/05/isnt_it_ironic.html
+http://www.blueoregon.com/2005/06/considering_ira.html
+http://www.blueoxfarms.com/Crossbreeding%20Program/cross_breeding_utilizing_scottis.htm
+http://www.blueoxfarms.com/Crossbreeding_Program/cross_breeding_highland_genetics.htm
+http://www.blueplanetaquarium.com/NewBP/terms.html
+http://www.blueribbontaskforce.ohio.gov/committees/FS_3-8-04_minutes.asp
+http://www.blueridgecountry.com/melung/melung.html
+http://www.bluerodeo.com/archive/2004_05_01_showreviews.html
+http://www.bluerodeo.com/br/onedegree.html
+http://www.bluescopesteel.com/navajo/display.cfm/objectID.796068FF-EB58-6098-F49DA32E4F4AB88F/navID.833E9045-A83B-4A3E-BD7D711CB4446C5A
+http://www.bluescopesteel.com/printfriendly.cfm/objectid.796068FF-EB58-6098-F49DA32E4F4AB88F
+http://www.bluesky-tvc.com/FAQ.htm
+http://www.bluesmatters.com/
+http://www.bluesnews.com/
+http://www.bluesuitmom.com/career/findingbalance/familytime.html
+http://www.blueudewritersservices.com/tipsandmarkets.htm
+http://www.bluewaterbiggame.com/hunting_news/world_conservation_force_200408.cfm
+http://www.bluewatersys.com/consulting/doc/tools/pcb.php
+http://www.bluewatersys.com/development/doc/realview/integrator/im/logic.php
+http://www.bluewatersys.com/development/doc/realview/versatile/lt.php
+http://www.bluewillowinn.com/recipes/recipe1.htm
+http://www.bluffton.edu/~bergerd/NSC_111/science1.html
+http://www.bluhorizonlines.org/kno/kno1.html
+http://www.bluhorizonlines.org/kno1.html
+http://www.blumhardts.com/articles/bl/ActionInWaiting.htm
+http://www.blupete.com/Hist/BiosNS/1700-63/Monckton.htm
+http://www.blupete.com/Hist/NovaScotiaBk1/Part6/Ch03.htm
+http://www.blupete.com/Literature/Essays/Hazlitt/DiffWritSpeak.htm
+http://www.blupete.com/Literature/Essays/Hazlitt/Political/MalthusIII.htm
+http://www.blurredistinction.com/director/
+http://www.blurredistinction.com/director/links.htm
+http://www.bm.com/pages/insights/pubs/articles/as-05-01-2003
+http://www.bma.org.uk/ap.nsf/Content/CCSCconf03sp
+http://www.bma.org.uk/ap.nsf/Content/DDRBEvidenceOct04~DDRBEvidenceOct04App1
+http://www.bma.org.uk/ap.nsf/Content/DemographyMedSchls
+http://www.bma.org.uk/ap.nsf/Content/End+of+life+decisions+-+June+2000
+http://www.bma.org.uk/ap.nsf/Content/PR-Why+are+we+waiting+for+action+on+public+health%3F+asks+BMA+-+04+Feb+2005
+http://www.bma.org.uk/ap.nsf/Content/Prison+medicine
+http://www.bma.org.uk/ap.nsf/Content/annrep2002~annrep2002+-+scotland
+http://www.bma.org.uk/ap.nsf/Content/learnexperience
+http://www.bma.org.uk/ap.nsf/content/demographymedschls
+http://www.bma.org.uk/tcrc.nsf/0/5489cda8ae5a9b6c8025688f00527523?OpenDocument
+http://www.bmbf.de/en/757.php
+http://www.bmcc.org/Headstart/Act/
+http://www.bmd.org/health/glossary.html
+http://www.bme.jhu.edu/~jdiedric/state_space_workshop/
+http://www.bme.sunysb.edu/bme/people/faculty/fac_core.html
+http://www.bme.vanderbilt.edu/research_erc.html
+http://www.bmezine.com/caba/cc95.html
+http://www.bmezine.com/news/people/A10101/nohand/
+http://www.bmezine.com/news/presenttense/20050203.html
+http://www.bmezine.com/news/pubring/20040120.html
+http://www.bmezine.com/news/pubring/20050401.html
+http://www.bmezine.com/pierce/02-tongue/A50118/tngfaile.html
+http://www.bmezine.com/pierce/04-eyebrow/A41014/eyemysec.html
+http://www.bmezine.com/pierce/11-surface/A50127/srfkeepi.html
+http://www.bmezine.com/scar/A41006/scrnaihe.html
+http://www.bmgmusic.com/catalog/product/cd_detail.jhtml?productId=59739
+http://www.bmhcc.org/facilities/oxford/visitors.asp
+http://www.bmjbookshop.com/shop/product_display.asp?productid=072772018X&productname=Alternative+Materials+in+Road+Construction
+http://www.bmjcareers.com/static/soapopera/episode10.html
+http://www.bmjcareers.com/static/soapopera/episode7.html
+http://www.bmn.com/
+http://www.bmo.com/economic/regular/sector.html
+http://www.bmpg.co.uk/problem.html
+http://www.bms.abdn.ac.uk/undergraduate/bi20b2cn.htm
+http://www.bmsworldmission.org/14702
+http://www.bmsworldmission.org/15572
+http://www.bmtnews.org/bmt/bmt.book/chapter.6.html
+http://www.bmwassembly.ie/ga/main_ga.asp?lang=ga&text=&filename=comp/social_care/4_local_develop.htm
+http://www.bmyers.com/coolsite.htm
+http://www.bmyers.com/products/item13.cfm
+http://www.bmyers.com/public/department48.cfm
+http://www.bmz.amsterdam.nl/adam/uk/bruggen.html
+http://www.bna.com/
+http://www.bnai.com/cms.aspx?qpcode=iplw
+http://www.bnaibrith.ca/institute/dfait/DFAIT2003-03.html
+http://www.bnatax.com/tm/insights_JuneCPJ.htm
+http://www.bnatax.com/tm/insights_treatmentofoptions.htm
+http://www.bne.state.tx.us/breakem.htm
+http://www.bne.state.tx.us/telenurse.htm
+http://www.bnet.com/abstract.aspx?cid=161&docid=100882
+http://www.bnet.com/story.html?id=28168
+http://www.bni.com/successnet/2nd_qtr_2001/news-na.shtml
+http://www.bnl.gov/bnlweb/Museum/CampUpton_museum.html
+http://www.bnl.gov/bnlweb/pubaf/pr/2002/bnlpr102902.htm
+http://www.bnl.gov/bnlweb/pubaf/pr/PR_display.asp?prID=05-15
+http://www.bnms.org.uk/radiopharmacists.htm
+http://www.bnn-online.co.uk/news_datesearch.asp?SearchDate=12/Apr/2003&Year=2003
+http://www.bnn-online.co.uk/news_datesearch.asp?page=3&SearchDate=25/Oct/2000&Year=2000
+http://www.bnn-online.co.uk/news_datesearch.asp?page=5&SearchDate=26/Oct/2000&Year=2000
+http://www.bnvn.com/latestvideo/Feb04.htm
+http://www.bo-hemian.com/di02nov.html
+http://www.boajjang.com/
+http://www.boalt.org/bjcl/v8/v8dewey.htm
+http://www.boalt.org/bjcl/v8/v8deweyprint.htm
+http://www.boardco.com/Customerser/return_policy.htm
+http://www.boardgamegeek.com/game/398
+http://www.boardingschoolsusa.com/factshts/purnell.asp
+http://www.boardmember.com/issues/archive.pl?article_id=11907
+http://www.boardmember.com/network/index.pl?section=1022&article_id=11980&show=article
+http://www.boardmember.com/network/index.pl?section=1071&article_id=10229&show=article
+http://www.boardmember.com/network/index.pl?section=1086&article_id=11980&show=article
+http://www.boardmember.com/network/index.pl?section=1152&article_id=10555&show=article
+http://www.boardoftrade.com/vbot_speech.asp?pageID=174&speechID=735&offset=&speechfind=
+http://www.boardofwenches.com/fq77.html
+http://www.boardoptions.com/HEADLINE_apr21.htm
+http://www.boards.ie/vbulletin/archive/index.php/t-205660.html
+http://www.boardsource.org/LandingPage.asp?ID=60
+http://www.boatsandoutboards.com/
+http://www.boattraderonline.com/about.html?view=visitor
+http://www.boatus.com/news/seafood_0304.htm
+http://www.bob-baker.com/qt/supercharge.html
+http://www.bobbergen.com/class.htm
+http://www.bobethomas.com/monologues/monologues_catfish_frameset.htm
+http://www.bobfromaccounting.com/shizzypage9.html
+http://www.boblucky.com/Biking/Holland/day3.htm
+http://www.bobparsons.com/50000foramannottoeatarabbitThecuriouscaseofSaveTobycomt.html
+http://www.bobpikegroup.com/perform_sol/training/decisionfocus.html
+http://www.bobrivers.com/ontheshow/brsnews.asp?dismode=article&artid=2366
+http://www.bobtuley.com/pointshooting.htm
+http://www.boc.ca.gov/BoardMembers.htm
+http://www.boc.net/service.html
+http://www.bocaresort.com/Questions/index.aspx
+http://www.bocce.net/research.jsp?lng=eng
+http://www.bocce.net/research.jsp?lng=fre
+http://www.bocce.net/research.jsp?lng=ita
+http://www.bochk.com/web/home/hyperlink_policy.xml
+http://www.bodegaharbourrestaurant.com/menus.html
+http://www.bodley.ox.ac.uk/dept/readerserv/history/westeuropean.htm
+http://www.bodley.ox.ac.uk/icsu/kingppr.htm
+http://www.bodley.ox.ac.uk/librarian/fiesole/fiesole.htm
+http://www.bodossaki-foundation.gr/dren4.htm
+http://www.bodybreak.com/jen_diet.html
+http://www.bodybuilding.com/fun/atd5.htm
+http://www.bodybuilding.com/fun/babyboom46.htm
+http://www.bodybuilding.com/fun/bbinfo.php?page=Myths
+http://www.bodybuilding.com/fun/david46.htm
+http://www.bodybuilding.com/fun/dickinson8.htm
+http://www.bodybuilding.com/fun/mahler30.htm
+http://www.bodybuilding.com/fun/matt18.htm
+http://www.bodybuilding.com/fun/moser7.htm
+http://www.bodybuilding.com/fun/planet47.htm
+http://www.bodybuilding.com/fun/planet6.htm
+http://www.bodybuilding.com/fun/saunders2.htm
+http://www.bodybuildingforyou.com/health-supplements/green-tea-extract.htm
+http://www.bodychangers.com/nextlevel.shtml
+http://www.bodydharma.org/choices/Iraq/klein2.html
+http://www.bodyfatguide.com/Testimonials.htm
+http://www.bodyguardmagazine.net/subscriptions/subscribenow.php
+http://www.bodyline.co.za/fitfacts2003_day1sessions.htm
+http://www.bodymindinformation.com/articles/article4.htm
+http://www.bodytrends.com/articles/flexibility/inachair.htm
+http://www.boe.ca.gov/sptaxprog/sb_50_bill_20040929_chaptered.htm
+http://www.boe.ca.gov/sutax/faqpurch.htm
+http://www.boe.ca.gov/sutax/taxdecrease.htm
+http://www.bogdana.net/
+http://www.boggsspace.com/
+http://www.boghill.com/Workshops.htm
+http://www.bohlmanquarterhorses.com/equinetips.html
+http://www.bohol.ph/article75.html
+http://www.boingboing.net/images/blobjects.htm
+http://www.boiseartmuseum.org/forum/topic.asp?TOPIC_ID=109
+http://www.boj.com/opportunities/Spring_Green/Spring_Green.htm
+http://www.boku.ac.at/iam/singlecell/
+http://www.bolcomandmorris.com/bolcom.html
+http://www.boldapproach.com/
+http://www.boldapproach.com/public_relations.html
+http://www.boldoutlaw.com/robint/watson1.html
+http://www.boldoutlaw.com/robspot/0199.html
+http://www.bolender.com/Sociological%20Theory/Park,%20Robert%20Ezra/park,_robert_ezra.htm
+http://www.bolingbrook.com/index.php?page_id=33
+http://www.boloji.com/cinema/sod.htm
+http://www.boloji.com/computing/015.htm
+http://www.boloji.com/sikhism/japujisahib/js01.htm
+http://www.boloji.com/stories/003.htm
+http://www.boloji.com/wfs/wfs056.htm
+http://www.bolshevik.org/Leaflets/Vote%20Spartacist.html
+http://www.bolt.com/editor/page/paLmtreeundOne?catname=/Sex
+http://www.bom.gov.au/announcements/media_releases/sa/saro_19981201.shtml
+http://www.bom.gov.au/bmrc/SatRainVal/validation-intercomparison.html
+http://www.bom.gov.au/bmrc/ocean/GODAE/Symposium%20II/Breakout_Abstracts.htm
+http://www.bom.gov.au/faq/
+http://www.bom.gov.au/lam/Students_Teachers/lesson13.shtml
+http://www.bom.gov.au/other/wbf/wa.shtml
+http://www.bomberblitz.com/
+http://www.bomengids.nl/uk/hoofdsleutel.html
+http://www.bond.org.uk/classifieds/jobs.html
+http://www.bondmarkets.com/story.asp?id=782
+http://www.bondmarkets.com/w-weekly/2004.shtml
+http://www.bondtalk.com/global.cfm?S=marcom&SS=market_commentaries&ID=3361
+http://www.bondtrades.com/essent/essent1.html
+http://www.bonhams.com/cgi-bin/wspd_cgi.sh/pubweb/publicSite.r?sContinent=EUR&screen=Staffordshire
+http://www.bonhaven.org/form.shtml
+http://www.bonitanews.com/03/07/bonita/d941360a.htm
+http://www.bonsai-wbff.org/rjapan.shtml
+http://www.bonsaisite.com/survey10.html
+http://www.booch.com/architecture/blog.jsp?archive=2004-02.html
+http://www.boogenstein.com/?c=Music
+http://www.boogenstein.com/?pg=3
+http://www.boogiejack.com/
+http://www.book-worm.org/doyle-arthur-conan/beyond-the-city/chapter-15.html
+http://www.bookbaskets.net/cupbrowse.html
+http://www.bookbay.com/bookfaq.htm
+http://www.bookbrowse.com/bookclubfun/
+http://www.bookbrowse.com/bookclubfun/page4.cfm
+http://www.bookbrowse.com/bookclubfun/page5.cfm
+http://www.bookbrowse.com/dyn_/title/titleID/1202.htm
+http://www.bookbrowse.com/index.cfm?page=author&authorID=123&view=Interview
+http://www.bookbrowse.com/index.cfm?page=title&titleID=1202
+http://www.bookbrowse.com/index.cfm?page=title&titleID=438&view=printguide
+http://www.bookcloseouts.com/default.asp?No=300&N=665&Ne=349&org=sub
+http://www.bookcloseouts.com/default.asp?R=0743248570S
+http://www.bookclubs.ca/catalog/display.pperl?037575881X&view=printrg
+http://www.bookclubs.ca/catalog/display.pperl?0812966015&view=printexcerpt
+http://www.bookclubs.ca/catalog/display.pperl?isbn=037575881X&view=rg
+http://www.bookclubs.ca/catalog/display.pperl?isbn=0812966015&view=excerpt
+http://www.bookclubs.ca/catalog/display.pperl?isbn=9780739302071&view=excerpt
+http://www.bookcrossing.com/articles/1451/Changes-in-Reading-Tastes,-Usually-Cheaper
+http://www.bookcrossing.com/forum/6/2269860/subj_-BLOOD-MERIDIAN
+http://www.bookcrossing.com/journal/2712123
+http://www.bookcrossing.com/journal/2905905
+http://www.bookforum.com/archive/apr_05/vanderbilt.html
+http://www.bookforum.com/boynton.html
+http://www.bookforum.com/vanderbilt.html
+http://www.bookings.org/hotel/gb/carltongeorge.html?aid=300047
+http://www.bookmarc.com/
+http://www.booknoise.net/flickeringmind/reviews/
+http://www.bookpool.com/ct/183
+http://www.bookpool.com/sm/0201752840
+http://www.bookpool.com/sm/0789732564
+http://www.bookpool.com/sm/1578700418
+http://www.bookpool.com/sm/1578700949
+http://www.bookpool.com/sm/1587200880
+http://www.bookrags.com/biography/james-george-frazer-sir/
+http://www.bookreporter.com/reviews/006056038X-excerpt.asp
+http://www.bookreporter.com/reviews/0440241413-excerpt.asp
+http://www.bookreporter.com/reviews2/0060572140-excerpt.asp
+http://www.bookreporter.com/reviews2/0385336675-excerpt.asp
+http://www.bookreporter.com/suspense_thriller/0412montanari/montanari-richard_books.asp
+http://www.bookreporter.com/wom/wom-010525.asp
+http://www.bookreporter.com/wom/wom-010810.asp
+http://www.bookreporter.com/wom/wom-020201.asp
+http://www.bookreporter.com/wom/wom-040109.asp
+http://www.bookreporter.com/wom/wom-040227.asp
+http://www.bookrevue.com/about.html
+http://www.books-about-california.com/Pages/The_Jewel_City/The_Jewel_City_Chap_15.html
+http://www.books.brodart.com/products/automation/dartclix.htm
+http://www.booksandauthors.net/Reviews/GraciesLastSmile.html
+http://www.booksattransworld.co.uk/catalog/extract.htm?command=search&db=twmain.txt&eqisbndata=0593051823
+http://www.booksbyandromeda.alaskawriters.com/kenai2.html
+http://www.booksellers.org.uk/launchdates/code.asp
+http://www.bookslut.com/comicbookslut/2005_03_004682.php
+http://www.bookslut.com/features/2003_12_001158.php
+http://www.booksofzimbabwe.com/page4aa.html
+http://www.booksoup.com/authorevents.asp?LocationID=1
+http://www.bookstore.washington.edu/trade.taf?dept=attribute&category=events&par=trade&ttl=events&page=1
+http://www.booksxyz.com/results.php?sub=2&gg=820
+http://www.bookviews.com/
+http://www.bookviews.com/archive/bookviews-oct2004.htm
+http://www.bookwolf.com/Free_Booknotes/All_Quiet_on_the_Western_Front/Chapter_6_-_All_Quiet_on_the_W/chapter_6_-_all_quiet_on_the_w.html
+http://www.bookzonepro.com/profiles.cfm
+http://www.boombasticradio.com/index.cfm/load/album%20info/albumID/1495/
+http://www.boombasticradio.com/index.cfm/load/album%20info/albumId/1495/
+http://www.boomerangbooks.com/help.htm
+http://www.boomerangbooks.com/reciprocal_links.htm
+http://www.boomkat.com/
+http://www.boomspeed.com/joseph2/aUFOhistoryPage2.htm
+http://www.boonecountyky.org/EM/FamilyDisasterPlan.htm
+http://www.boosey.com/pages/teaching/news/further_info.asp?NewsID=10737&LangID=
+http://www.boosman.com/blog/archives/2005/01/when_does_350_m.html
+http://www.boot.com/
+http://www.boot.com/bsizcvt.htm
+http://www.bootsnall.com/articles/01-02/it-doesnt-matter-which-road-you-take-6.html
+http://www.bootsnall.com/articles/01-09/er-in-guatemala-guatemala.html
+http://www.bootsnall.com/articles/04-12/heart-of-a-lyon-lyon-france.html
+http://www.bootsnall.com/asiatravelguides/apr02aleppo.shtml
+http://www.bootsnall.com/oddsnends/nov03egypt.shtml
+http://www.bootsnall.com/rtw/05-03/personal-stories-petra-stormen.html
+http://www.bopnews.com/archives/001813.html
+http://www.bopnews.com/archives/002390.html
+http://www.bopnews.com/archives/003067.html
+http://www.bopnews.com/archives/003150.html
+http://www.boprugby.co.nz/union/about.htm
+http://www.bopsecrets.org/PH/cem.htm
+http://www.bopsecrets.org/rexroth/essays/new-english-bible.htm
+http://www.bordercollie.org/core.html
+http://www.borderlands-books.com/about_history.html
+http://www.borderlands.com/archives/arch/thermo.html
+http://www.borderlinks.org/bl/wordfromrick/rickoct2000.htm
+http://www.bordersunion.org/node?from=50
+http://www.bordersunion.org/node?from=70
+http://www.borealcanada.ca/news_e.cfm?p_id=222
+http://www.borenstein-online.com/jobs.asp
+http://www.borg.com/~rparkany/Standards/HOPE/NYSSchoolAidDecisionNYT.htm
+http://www.borndigital.com/holm/kurtz.htm
+http://www.bornfree.org.uk/elephantfree/elefree05.html
+http://www.bornfree.org.uk/zoocheck/zcprojects01.htm
+http://www.borntoinspire.com/articles/barbara.rose/personal.alchemy.rsw%7CPOZKSPHEHMOGPVNYWCPBXXSCCZJDLTEA%7C
+http://www.bortonwallace.com/pcl_choosingfirm.html
+http://www.bos.frb.org/economic/nerr/rr2002/q4/doingtime.htm
+http://www.bos.frb.org/finsvcs/services/cash/cash.htm
+http://www.bos.frb.org/news/speeches/cem/2005/011205.htm
+http://www.bos.frb.org/news/speeches/cem/2005/040105.htm
+http://www.bosnianembassypakistan.org/culture&economy.htm
+http://www.bosskey.net/q3a/powerups.html
+http://www.boston.com/
+http://www.boston.com/beyond_bigdig/cases/barcelona/index.shtml
+http://www.boston.com/beyond_bigdig/news/artery_033003_magazine_entire.htm
+http://www.boston.com/beyond_bigdig/opinion/artery_032903.htm
+http://www.boston.com/business/articles/2005/05/18/romney_aide_targets_debt_at_hospitals?mode=PF
+http://www.boston.com/business/articles/2005/06/20/companies_seek_foothold_in_heartland/
+http://www.boston.com/business/articles/2005/06/20/companies_seek_foothold_in_heartland?mode=PF
+http://www.boston.com/business/globe/articles/2005/06/23/abiomeds_heart_device_may_get_ok/
+http://www.boston.com/business/technology/articles/2003/11/02/boston_contractor_helping_us_companies_find_low_wage_labor_abroad/
+http://www.boston.com/globe/metro/packages/tickets/072103.shtml
+http://www.boston.com/globe/nation/packages/nuclear_shadow/061802.htm
+http://www.boston.com/movies/display?display=movie&id=6869
+http://www.boston.com/news/chats/at_home/meltz_121003.htm
+http://www.boston.com/news/education/higher/articles/2004/03/18/medical_students_celebrate_their_match_and_seem_to_back_system/
+http://www.boston.com/news/education/higher/articles/2005/05/01/science_friction?pg=full
+http://www.boston.com/news/education/higher/articles/2005/05/08/in_maine_a_totally_green_graduation/
+http://www.boston.com/news/education/higher/articles/2005/05/15/holy_cross_scraps_sat_admissions_requirement/
+http://www.boston.com/news/education/higher/articles/2005/07/01/ramen_stand_proves_popular_in_greenwich/
+http://www.boston.com/news/education/k_12/articles/2004/07/25/kindergarten_scares_parents_more_than_child/
+http://www.boston.com/news/education/k_12/mcas/articles/2005/06/05/girls_put_numbers_up_in_math/
+http://www.boston.com/news/globe/city_region/
+http://www.boston.com/news/globe/editorial_opinion/oped/articles/2004/12/01/the_fairy_tale_about_soft_drink_nutrition_wont_sell/
+http://www.boston.com/news/globe/editorial_opinion/oped/articles/2005/03/30/charter_schools_troubled_waters/
+http://www.boston.com/news/globe/health_science/articles/2004/04/06/drink_to_this/
+http://www.boston.com/news/globe/health_science/articles/2005/06/14/advice_to_physicians_make_yourself_matter/
+http://www.boston.com/news/globe/ideas/articles/2004/02/29/good_fences/
+http://www.boston.com/news/globe/ideas/articles/2004/10/10/the_revolution_next_time?pg=full
+http://www.boston.com/news/globe/ideas/articles/2005/06/19/downing_street_secrets/
+http://www.boston.com/news/globe/living/articles/2005/06/12/once_upon_a_hill/
+http://www.boston.com/news/globe/magazine/articles/2004/12/05/left_behind?mode=PF
+http://www.boston.com/news/globe/magazine/articles/2004/12/05/left_behind?pg=full
+http://www.boston.com/news/globe/magazine/articles/2005/05/29/same_old_southie?pg=full
+http://www.boston.com/news/globe/magazine/articles/2005/06/26/finishing_his_sentence/
+http://www.boston.com/news/local/articles/2004/05/10/blogs_colliding_with_traditional_media/
+http://www.boston.com/news/local/articles/2005/06/05/girls_put_numbers_up_in_math/
+http://www.boston.com/news/local/articles/2005/06/19/immigrant_labor_force_booming/
+http://www.boston.com/news/local/articles/2005/06/19/not_so_strange_political_bedfellows/
+http://www.boston.com/news/local/massachusetts/articles/2005/06/19/immigrant_population_still_growing/
+http://www.boston.com/news/nation/articles/2004/04/14/a_medical_match_game/
+http://www.boston.com/news/nation/articles/2004/10/03/back_room_dealing_a_capitol_trend?pg=full
+http://www.boston.com/news/packages/iraq/globe_stories/022603_goodbyes.htm
+http://www.boston.com/news/packages/nightclub_fire/Series_of_errors_sealed_crowd_s_fate+.shtml
+http://www.boston.com/news/packages/underattack/weaponry.htm
+http://www.boston.com/news/politics/president/articles/2004/11/04/hope_and_concern_voiced_after_bush_victory?pg=full
+http://www.boston.com/news/specials/gay_marriage/sjc_020404/
+http://www.boston.com/news/world/middleeast/articles/2005/01/08/us_general_warns_of_attacks_before_vote?mode=PF
+http://www.boston.com/realestate/communities/profiles/2001/cohasset.html
+http://www.boston.com/sports/baseball/redsox/articles/2005/02/24/loud_and_clear/
+http://www.boston.com/sports/baseball/redsox/articles/2005/06/09/team_will_have_to_manage_without_him/
+http://www.boston.com/sports/baseball/redsox/articles/2005/06/20/francona_had_patchwork_plan_up_his_sleeve/
+http://www.boston.com/sports/baseball/redsox/articles/2005/06/20/francona_had_patchwork_plan_up_his_sleeve/?page=2
+http://www.boston.com/sports/basketball/celtics/articles/2005/02/03/a_passing_interest_in_kidd/
+http://www.boston.com/sports/football/articles/2005/02/04/pols_get_access_to_relatively_cheap_bowl_tickets/
+http://www.boston.com/sports/football/patriots/articles/2005/02/07/otoole_gets_street_level_view_of_security/
+http://www.boston.com/sports/football/patriots/articles/2005/06/12/terms_of_enrichment/
+http://www.boston.com/sports/hockey/articles/2005/06/07/nhl_attempts_to_redraw_lines_rink_revision_gets_a_test_drive/
+http://www.boston.com/sports/hockey/bruins/articles/2005/06/09/power_trip/
+http://www.boston.com/sports/other_sports/olympics/local_athletes/
+http://www.boston.com/travel/articles/2003/12/28/st_louis_blues____not_for_gay_visitors?mode=PF
+http://www.boston.com/travel/articles/2003/12/28/st_louis_blues____not_for_gay_visitors?pg=full
+http://www.boston.com/travel/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin/
+http://www.boston.com/travel/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin?mode=PF
+http://www.boston.com/travel/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin?pg=full
+http://www.boston.com/travel/getaways/europe/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin/
+http://www.boston.com/travel/getaways/europe/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin?mode=PF
+http://www.boston.com/travel/getaways/europe/articles/2005/02/06/watch_whats_happening_here_cool_contented_in_berlin?pg=full
+http://www.boston.com/yourlife/health/children/articles/2005/06/12/adult_diabetes_hitting_children/
+http://www.boston.com/yourlife/health/diseases/articles/2005/03/10/new_heart_attack_drug_treatment_hailed?mode=PF
+http://www.boston.com/yourlife/health/other/articles/2004/04/06/drink_to_this/
+http://www.bostonbar.org/pw/bw/0304/112303/bw112303.htm
+http://www.bostonbaseball.com/whitesox/baseball_extras/steal.html
+http://www.bostoncomment.com/bostonc3.htm
+http://www.bostoncriticalmass.org/legaldefense.html
+http://www.bostondirtdogs.com/
+http://www.bostongolfschool.com/golf2002.html
+http://www.bostonmagazine.com/ArticleDisplay.php?id=234
+http://www.bostonmagazine.com/ArticleDisplay.php?id=300
+http://www.bostonmagazine.com/ArticleDisplay.php?id=322
+http://www.bostonmagazine.com/ArticleDisplay.php?id=322&print=yes
+http://www.bostonmagazine.com/ArticleDisplay.php?id=432
+http://www.bostonphoenix.com/boston/news_features/dont_quote_me/multi-page/documents/02814301.htm
+http://www.bostonphoenix.com/boston/news_features/editorial/documents/01655665.htm
+http://www.bostonphoenix.com/boston/news_features/other_stories/multipage/documents/04414482.asp
+http://www.bostonphoenix.com/medialog/2003_03_30_archive.asp
+http://www.bostonrecords.com/
+http://www.bostonreview.net/BR21.3/Bankman.html
+http://www.bostonsingersresource.com/elizabethpoe1.asp
+http://www.bostonstrategy.com/players/01_police/01_evans.html
+http://www.botanical.com/botanical/mgmh/r/roses-18.html
+http://www.botanicaldog.com/clientlogin.php
+http://www.botany.hawaii.edu/faculty/wong/BOT135/LECT12.HTM
+http://www.botball.org/standards/
+http://www.bothell.washington.edu/writingcenter/readwrite.html
+http://www.bottle-bong.com/disclaimer.html
+http://www.bottlebooks.com/medicinf.htm
+http://www.bou.org.uk/recnews.html
+http://www.boucherenergy.com/heat.htm
+http://www.boulderbookstore.com/StMartins.html
+http://www.bouncingbearbotanicals.com/nymphaea_caerulea.htm
+http://www.boundbygravity.com/2005_01_01_bbgarchive.aspx
+http://www.boundless.org/2002_2003/features/a0000651.html
+http://www.boundless.org/features/a0000879.html
+http://www.boundless.org/features/a0000879.html?ResultsOnly=livingathome
+http://www.boundless.org/features/a0000879.html?ResultsOnly=valentineshope
+http://www.bountifulbaby.com/seaside/index/destiny
+http://www.bowdoin.edu/counseling/eating/index.shtml
+http://www.bowdoin.edu/profiles/archives/students/elena_roseo_05.shtml
+http://www.bowhunting.net/SteveBartylla/2004-Illinois-03.html
+http://www.bowhunting.net/SteveBartylla/BluffCountry2004b.html
+http://www.bowjamesbow.net/2002/11/18-the_villag.shtml
+http://www.bowjamesbow.net/2003/07/28-writing_fo.shtml
+http://www.bowjamesbow.net/2003/08/22-the_myth_o.shtml
+http://www.bowjamesbow.net/2005/06/02-fifteen_co.shtml
+http://www.bowjamesbow.net/blog.shtml
+http://www.bowlingalone.com/data.php3
+http://www.bowlingfortruth.com/bowlingforcolumbine/scenes/bank.htm
+http://www.boxer2008.com/
+http://www.boxerlaw.com/bg04006.htm
+http://www.boxerrescue.com/foster_home_appl.htm
+http://www.boxerworld.com/rescue/abra/
+http://www.boxerworld.com/rescue/commercial/
+http://www.boxesandarrows.com/archives/cognitive_psychology_ia_from_theory_to_practice.php
+http://www.boxesandarrows.com/archives/computer_human_values.php
+http://www.boxesandarrows.com/archives/defining_feature_sets_through_prototyping.php
+http://www.boxesandarrows.com/archives/got_usability_talking_with_jakob_nielsen.php
+http://www.boxesandarrows.com/archives/oversimple_answers_for_simple_minds.php
+http://www.boxesandarrows.com/archives/site_diagrams_mapping_an_information_space.php
+http://www.boxesandarrows.com/archives/synonym_rings_and_authority_files.php
+http://www.boxesandarrows.com/archives/talking_with_virginia_postrel.php
+http://www.boxesandarrows.com/archives/toggling_shapes_in_visio_special_deliverable_12.php
+http://www.boxesandarrows.com/archives/use_of_narrative_in_interactive_design.php
+http://www.boxesandarrows.com/archives/whats_in_a_name_or_what_exactly_do_we_call_ourselves.php
+http://www.boxesandbubbles.co.uk/moving-tips.php
+http://www.boxtops4education.com/global/rules.asp
+http://www.boycottgreenmountain.com/
+http://www.bozzysworld.com/archives/2003/09/24/michael_moore_responds_to_critics.php
+http://www.bpassoc.org.uk/fundraising/fundraising.htm
+http://www.bpaww.com/about_bpa/team/
+http://www.bpc.edu/administration/human_resources/human_resources_employment.htm
+http://www.bpc.org/resources/articles/machen/culture.html
+http://www.bpcpa.ca/Consumers/help/consumers-help-debt-collection.htm
+http://www.bpcweb.net/official/socratic.htm
+http://www.bpdcentral.com/bks/more_books.shtml
+http://www.bpfh.net/stories/tcp-towers/plaza.html
+http://www.bpkids.org/learning/reference/articles/
+http://www.bplans.com/qa/article.cfm?i=178
+http://www.bplans.com/spv/3003/index.cfm?affiliate=pas
+http://www.bplans.com/spv/3015/1.cfm
+http://www.bplans.com/spv/3015/index.cfm?affiliate=pas
+http://www.bplans.com/spv/3103/index.cfm?affiliate=pas
+http://www.bplans.com/spv/3382/2.cfm
+http://www.bpmotorsports.net/lb2cat-press-7-23-04-web.htm
+http://www.bpp.com/law/left_menu/open_days/open_days.htm
+http://www.bps.org.uk/e-services/faqs/faqs_home.cfm
+http://www.bps.org.uk/e-services/faqs/faqs_home.cfm?templatetheme=textonly
+http://www.bps.org.uk/the-society/ethics-rules-charter-code-of-conduct/code-of-conduct/a-briefing-paper-on-sexual-harassment-at-work-and-the-ethics-of-dual-relationships.cfm
+http://www.bps.org.uk/the-society/ethics-rules-charter-code-of-conduct/code-of-conduct/guidelines-for-psychologists-working-with-animals.cfm
+http://www.bpwpa.org/Programs.htm
+http://www.brabazon.org.uk/brab20.htm
+http://www.bracebridgeexaminer.com/news_-_sept_02_04.htm
+http://www.braces.org/braces/about/faq/faq_concerns.cfm
+http://www.braces.org/news/main.cfm
+http://www.braces.org/news/pf_main.cfm
+http://www.bracu.ac.bd/academics/dept/course.php?code=SADC
+http://www.brad-oliver.com:8080/~boliver/blog/archives/000592.html
+http://www.brad.ac.uk/university/pgpros/mgt-mba.php
+http://www.bradburydesign.com/appliedarts_feature.html
+http://www.bradfallon.com/articles/embed.html
+http://www.bradford.ac.uk/acad/civeng/skills/spelling.htm
+http://www.bradford.ac.uk/university/ugpros/business.php
+http://www.bradfordbulls.co.uk/bb_news_full.asp?newsid=1304
+http://www.bradfordgibson.net/comment/reply/164
+http://www.bradfordgibson.net/node/164
+http://www.bradleyrhodes.com/Papers/remembrance.html
+http://www.bradshawfoundation.com/thor/
+http://www.bradycenter.org/
+http://www.bradymagazine.com/workshops/directory/novel.html
+http://www.bradynet.com/bbs/venezuela/100048-0.html
+http://www.bragdoninsurance.com/privacystatement.htm
+http://www.bragg.army.mil/528csc/FM22-51AxE.htm
+http://www.brainbench.com/xml/bb/aboutus/whitepaper.xml?contentId=627
+http://www.brainbench.com/xml/bb/partners/community/whitepaper.xml?contentId=627
+http://www.brainbox.com.au/members/brainbox/home.nsf/0/7BFD069D9B35F91ACA256CCB00031ED3?opendocument
+http://www.brainconnection.com/content/112_1
+http://www.brainconnection.com/content/112_2
+http://www.brainconnection.com/content/112_3
+http://www.brainconnection.com/content/112_4
+http://www.brainconnection.com/topics/?main=fa/brain-evolution5
+http://www.brainexplorer.org/anxiety/Anxiety_Diagnosis.shtml
+http://www.braingym.org/faq.html
+http://www.brainpowertraining.com.au/
+http://www.brainticket.com/newarr.htm
+http://www.brainydictionary.com/words/fe/feed164146.html
+http://www.brainyquote.com/quotes/authors/s/samuel_smiles.html
+http://www.brama.com/travel/messages/35457.html
+http://www.brandchannel.com/features_effect.asp?pf_id=248
+http://www.brandchannel.com/start1.asp?fa_id=221
+http://www.brandchannel.com/start1.asp?fa_id=248
+http://www.brandeis.edu/departments/philosophy/philpays.html
+http://www.brandnewdad.com/homedaddy/walkontheretailside.asp
+http://www.brandon.org/events.htm
+http://www.brandonblog.com/John_D_Hart.html
+http://www.brandonstaggs.com/star-trek-tng-spoof.html
+http://www.brandonu.ca/Administration/HumanResources/CollectiveAgreements/mgeu/mgeu1.htm
+http://www.brandsmartusa.com/customer_relations.htm
+http://www.brasscompass.com/dalveyclocks.htm
+http://www.brasscompass.com/dalveycup.htm
+http://www.brattle.com/Consultants/ConsultantView.asp?ConsultantID=38
+http://www.braungardt.com/Philosophy/Marx/Money%20into%20Capital.htm
+http://www.brautigan.net/brautigan/recordings.html
+http://www.bravadas.com/medicallyrelatedhairloss.php
+http://www.bravotv.com/Newsletter/
+http://www.brazeau.ab.ca/aservice.html
+http://www.brazier.mistral.co.uk/christmas_stories/1994CharlesAndGenie.html
+http://www.brazilhouston.org/ingles/vitem1.htm
+http://www.brazzil.com/content/view/9275/76/
+http://www.brazzil.com/index2.php?option=com_content&do_pdf=1&id=8926
+http://www.brazzilmag.com/content/view/134/41/
+http://www.brazzilmag.com/content/view/2419/49/
+http://www.brazzilmag.com/content/view/514/41/
+http://www.brc21.org/carson/carson_long.html
+http://www.breacais.demon.co.uk/abs/bsr04/44_momen_women.htm
+http://www.bread-and-roses.com/maathai.html
+http://www.breakbeat.co.uk/features/silver.html
+http://www.breakfastandbrunch.com/recipes2.php?rcpid=54
+http://www.breakfastanytime.net/
+http://www.breakingnewsenglish.com/0506/050625-zimbabwe.html
+http://www.breakswithtradition.com/areas/countrysideandcoastal/kent/attractions/kentattractions.htm
+http://www.breakthechain.org/exclusives/clintonhunt.html
+http://www.breaktheglassceiling.com/Art-Tech.htm
+http://www.breakthroughchurch.com/articles2.html
+http://www.breakthroughonskis.com/Pages/_ski_instruction/instruction12.html
+http://www.breakupgirl.net/advice/980622/980622.html
+http://www.breakupgirl.net/advice/980817/980817d.html
+http://www.breakupgirl.net/todo/001004.html
+http://www.breastcheck.ie/publications/stats03.html
+http://www.breastfeeding.asn.au/bfinfo/galact.html
+http://www.breastfeeding.org/articles/beforebaby.html
+http://www.breasthealth.com.au/livingwithcancer/whattosay.html
+http://www.breasthealthonline.org/cgi-bin/mwf/topic_show.pl?tid=93312
+http://www.breastimplants411.com/dbii/locations.asp~region=&city=Green%20Bay
+http://www.breathineasy.com/tips_sea.html
+http://www.breathingspace.com/content/view/120/152/
+http://www.brechin.com/games2/strong_weak/strong_weak.html
+http://www.brecker.com/
+http://www.brecon-beacons.com/ramblers-merthyr-valley.htm
+http://www.breeders.animaleyecare.com.au/eyecertificates.htm
+http://www.breedingbetterdogs.com/aging.html
+http://www.breeze-courier.com/Main.asp?SectionID=38&SubSectionID=464&ArticleID=56882
+http://www.breggin.com/
+http://www.bren.ucsb.edu/facilities/
+http://www.bren.ucsb.edu/supporting/corporate_giving.html
+http://www.bren.ucsb.edu/supporting/investing_dbhall.html
+http://www.brendan-nyhan.com/blog/2004/11/hoping_for_a_de.html
+http://www.brendashoshanna.com/BrendaShoshanna_noframes/Zen%20and%20the%20Art.htm
+http://www.brendastardom.com/arch.asp?ArchID=308
+http://www.brent.gov.uk/services.nsf/0/0d950490394a0b9e80256e9700491c13?OpenDocument
+http://www.bresink.de/osx/orderfaq.html
+http://www.bretonhomes.com/brittany_property_morbihan.php
+http://www.bretonhomes.com/commercial_property_brittany.php
+http://www.brevard.leon.k12.fl.us/teacher_login.htm
+http://www.brfwitness.org/Articles/1985v20n3.htm
+http://www.brhc.org.uk/css_faq.htm
+http://www.brian894x4.com/BlueMountainsTrip.html
+http://www.brianclardy.com/12022003.html
+http://www.brianharrisonsmith.com/tips,_hints_and_advice.htm
+http://www.brianmac.demon.co.uk/
+http://www.brianmac.demon.co.uk/imagery.htm
+http://www.brianmac.demon.co.uk/weight.htm
+http://www.brianmadden.com/content/content.asp?id=318
+http://www.brianpalmerdds.com/bfing_import.htm
+http://www.bridgeguys.com/LittleKnown/BiedermeijerSAYCThygesen.html
+http://www.bridgend.gov.uk/Web1/groups/public/documents/services/000919.hcsp
+http://www.bridgeport.edu/Indexhtml/Schools/schbus.html
+http://www.bridgeport.wednet.edu/Admin%20&%20News/Moving%20Wall.htm
+http://www.bridgeportvillage.com/htmlsite/article_trib11012003.html
+http://www.bridger.us/2002/12/16/CrashTestingMINICooperVsFordF150
+http://www.bridges4kids.org/articles/9-02/ABCnews9-02.html
+http://www.bridgesforpeace.com/publications/dispatch/archaeology/Article-27.html
+http://www.bridgesforpeace.com/publications/teaching/Article-26.html
+http://www.bridgevictoria.com/
+http://www.bridgewater.edu/WritingCenter/Resources/102in-class4.htm
+http://www.bridgeworld.com/default.asp?d=article_sampler&f=sambp.html
+http://www.bridportred.co.uk/Players%20I%20-%20J%20-%20K.htm
+http://www.brighamandwomens.org/patient/walkingtips.asp
+http://www.bright-europe.org/bright.php/conference/debates
+http://www.bright-wave.co.uk/05_00_04.htm
+http://www.bright-wave.co.uk/05_00_05.htm
+http://www.bright.net/~double/euchre.htm
+http://www.bright.net/~gshaffer/earthchange.htm
+http://www.brightenyourlife.info/ch8.html
+http://www.brighthand.com/article/Three_Hot_Technologies_Part_4?site=Learn
+http://www.brightonandhovegreenparty.org.uk/h/n/NEWS/press_releases/ALL/201/
+http://www.brightplanet.com/deepcontent/tutorials/search/part4.asp
+http://www.brightwhitepaper.com/design.htm
+http://www.brikkerogbrett.com/games/kleppspelet.shtml
+http://www.brikwars.com/
+http://www.brillig.com.au/sitepages/archives.htm
+http://www.bringyou.to/apologetics/num2.htm
+http://www.briomag.com/briomagazine/fictionfix/a0004628.html
+http://www.briomag.com/briomagazine/fictionfix/a0005283.html
+http://www.briomag.com/briomagazine/reallife/a0005293.html
+http://www.bris.ac.uk/Depts/CMPO/workingpapers/abstracts2.htm
+http://www.bris.ac.uk/Depts/CMPO/workingpapers/abstracts3.htm
+http://www.bris.ac.uk/Depts/CMPO/workingpapers/abstracts4.htm
+http://www.bris.ac.uk/Depts/History/Postgrads/pgdissertations.htm
+http://www.bris.ac.uk/Depts/Italian/it3yearpractical.html
+http://www.bris.ac.uk/Depts/SecurityServices/advice.htm
+http://www.bris.ac.uk/Depts/THRS/Admissionsstatement.htm
+http://www.bris.ac.uk/ISC/zope/vine/vinezope.html
+http://www.bris.ac.uk/cas/jobs/termtime.htm
+http://www.bris.ac.uk/english/mm-tributes.html
+http://www.bris.ac.uk/english/undergraduate/current/student-reps.html
+http://www.bris.ac.uk/english/undergraduate/prospective/application-advice.html
+http://www.bris.ac.uk/studentfinance/financing-studies.html
+http://www.bristol-city.gov.uk/artsdev/artbul3.htm
+http://www.bristol-inquiry.org.uk/evidence/transcripts/day18.htm
+http://www.bristol-inquiry.org.uk/evidence/transcripts/day4.htm
+http://www.bristol-inquiry.org.uk/evidence/transcripts/day47.htm
+http://www.bristol-inquiry.org.uk/evidence/transcripts/day52.htm
+http://www.bristol-inquiry.org.uk/evidence/transcripts/day60.htm
+http://www.bristol-inquiry.org.uk/final_report/annex_a/chapter_12_5.htm
+http://www.bristol-inquiry.org.uk/final_report/annex_a/chapter_14_18.htm
+http://www.bristolfoe.org.uk/wildfire/iraq/datescase.htm
+http://www.bristolfoe.org.uk/wildfire/iraq/iraqaug01.htm
+http://www.bristolfoe.org.uk/wildfire/iraq/jo.iraq.2003.04.14.htm
+http://www.brit.croydon.sch.uk/dbold/page34.htm
+http://www.britac.ac.uk/news/reports/ahrbresponse.html
+http://www.britain-in-indonesia.or.id/advice.htm
+http://www.britain.tv/beautyfashion_lipscare.shtml
+http://www.britain.tv/health_a_new_year_a_new_you.shtml
+http://www.britainexpress.com/hotels/yorkshire/113650.php
+http://www.britainexpress.com/hotels/yorkshire/York.htm
+http://www.britainincanada.org/News/100questions/custom.htm
+http://www.britainincanada.org/News/Attractions/traveller.htm
+http://www.britains-smallwars.com/Borneo/paul.html
+http://www.britains-smallwars.com/suez/GROUND-LIAISON.html
+http://www.britainusa.com/consular/houston/other_show.asp?Sarticletype=25&other_ID=389
+http://www.britainusa.com/houston/other_show.asp?Sarticletype=25&other_ID=1237
+http://www.britainusa.com/nireland/articles.asp?SarticleType=21&SCategory=88
+http://www.britainusa.com/nireland/ni_paper1.asp
+http://www.britainusa.com/science/articles_show.asp?SarticleType=1&Article_ID=4789&i=
+http://www.britainusa.com/science/other_show.asp?Sarticletype=2&other_ID=567
+http://www.britainusa.com/sections/articles_show.asp?SarticleType=1&Article_ID=1956&i=117
+http://www.britainusa.com/sections/other_show.asp?SarticleType=2&other_ID=672
+http://www.britannia.co.uk/c_loans/non_product/important_legal_information.html
+http://www.britannia.co.uk/mufc/redrewards_tandc.html
+http://www.britannica.com/Blackhistory/activity4.jsp
+http://www.britannica.com/eb/article?tocId=231679
+http://www.britannica.com/eb/article?tocId=233255
+http://www.britannica.com/eb/article?tocId=233560
+http://www.britannica.com/eb/article?tocId=25979
+http://www.britannica.com/eb/article?tocId=39429
+http://www.britannica.com/eb/article?tocId=9043296
+http://www.britannica.com/ebi/article?tocId=9322886
+http://www.britannica.com/ebi/article?tocId=9325795
+http://www.britannica.com/nobel/micro/204_57.html
+http://www.britarch.ac.uk/ba/ba46/ba46news.html
+http://www.britarch.ac.uk/ba/ba56/ba56feat.html
+http://www.britarch.ac.uk/ba/ba59/feat1.shtml
+http://www.britarch.ac.uk/ba/ba62/news.shtml
+http://www.britarch.ac.uk/conserve/RCEPpol.html
+http://www.britarch.ac.uk/conserve/UncLndEA.html
+http://www.britarch.ac.uk/projects/dob/dl12b.html
+http://www.brite-sparks.com/
+http://www.britfilmusa.com/newsl_jan_29_03.php
+http://www.britglass.co.uk/NewsEvents/BGNewsCurrent/KeyIndustryFiguresMeettoT.html
+http://www.britglass.org.uk/NewsEvents/BGNewsCurrent/AnalysisHighlightsUniqueN.html
+http://www.britgo.org/const.html
+http://www.britischebotschaft.de/en/embassy/agriculture/Agri-Note-Ecolabel.htm
+http://www.british-aggregates.com/pr040609.htm
+http://www.british-franchise.org/
+http://www.british-history.ac.uk/report.asp?compid=36336
+http://www.british-publishing.com/Pages/AberdeenOG/diversifying.html
+http://www.british-study.com/
+http://www.british-study.com/fees/index.php?page=fee_oxford
+http://www.britishcivildefence.org/BCD_NP/York_Flood_PT_1/york_flood_pt_1.html
+http://www.britishcomedy.org.uk/comedy/isirta.htm
+http://www.britishcompanies.co.uk/furniture.htm
+http://www.britishcouncil.org/arts-literature-matters-newsletter-2-fiction2004.htm
+http://www.britishcouncil.org/arts-literature-matters-newsletter-2-fiction2004.htm?printout=1
+http://www.britishcouncil.org/estonia-education-elt-archive.htm
+http://www.britishcouncil.org/languageassistant-cooking.htm
+http://www.britishcouncil.org/languageassistant-essential-famous-britons.htm
+http://www.britishcouncil.org/languageassistant-gambling.htm
+http://www.britishcouncil.org/languageassistant-gambling.htm?printout=1
+http://www.britishcouncil.org/learning-elt-hornby-information.htm
+http://www.britishcouncil.org/learning-elt-hornby-information.htm?printout=1
+http://www.britishecologicalsociety.org/articles/meetings/current/annualmeeting2005/
+http://www.britishexpat.com/Mike_s_Mutts__Jake_The_Dawg_s.178.0.html
+http://www.britishfencing.com/wearingofmasks.html
+http://www.britishhighcommission.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1054572033377
+http://www.britishlifeinsurance.gb.com/term-life-insurance-articles/personal-equity-plans-advantages.htm
+http://www.britishlungfoundation.org/north-west-touch.asp
+http://www.britishmarines.org/armchest3.htm
+http://www.britishmarines.org/armchest4.htm
+http://www.britishorienteering.org.uk/asp/makepage.asp?PID=MEMBPROP
+http://www.britishsoftdrinks.com/htm/qa/Packaging/Packaging.htm
+http://www.britishwaterways.co.uk/newsroom/stories/home_ready.html
+http://www.britkid.org/si-ukimmlaw.html
+http://www.britsoc.co.uk/new_site/index.php?area=about&id=14
+http://www.brns.com/pages4/comed174.html
+http://www.broadbandreports.com/forum/news,59609~reverse=0;mode=flat;days=2000;root=news,59609
+http://www.broadbandreports.com/forum/remark,11887835~mode=flat~start=20
+http://www.broadbandreports.com/forum/remark,12491317
+http://www.broadbandreports.com/forum/remark,12491317~mode=flat
+http://www.broadbandreports.com/forum/remark,12501568~mode=flat
+http://www.broadbandreports.com/forum/remark,12501568~start=-1~mode=flat
+http://www.broadbandreports.com/forum/remark,12575031~mode=flat~start=40
+http://www.broadbandreports.com/forum/remark,12575031~start=38~mode=flat
+http://www.broadbandreports.com/shownews/64859
+http://www.broadcaster.org.uk/invision_forum/lofiversion/index.php/t178.html
+http://www.broadcaster.org.uk/section2/jokes/funnynews.html
+http://www.broadcasting.co.nz/faqspage.htm
+http://www.broadcom.com/press/release.php?id=659800
+http://www.broadstonemiddle.poole.sch.uk/SchoolInfo/Policies.htm
+http://www.broadwaysd.com/seasonofchoiceopener.php
+http://www.broadwayworld.com/blogs/viewblog.cfm?blogid=699
+http://www.brocku.ca/communityservices/youthuniversity/campinfo.php
+http://www.brocku.ca/healthservices/education/depression.html
+http://www.brocku.ca/healthservices/pages/depression.html
+http://www.brocku.ca/instanalysis/taskforce/CntrArts.htm
+http://www.brocku.ca/international/intlstudnts/predep.html
+http://www.brocku.ca/music/degrees_courses.htm
+http://www.brocku.ca/sdc/discipline/conduct.php
+http://www.brodies.co.uk/services/litigation/family_law/
+http://www.brojed.org/newboard/Posts/8725F.html
+http://www.brokenfrontier.com/columns/details.php?id=194
+http://www.brokenfrontier.com/lowdown/details.php?id=19
+http://www.brokenkode.com/archives/manji-spotlight-2-with-spirit/
+http://www.brokentype.com/blog/000107.html
+http://www.bromleyhealthmanagement.com/38remedies.htm
+http://www.bromsgrove-school.co.uk/departments/upper/physics/links.htm
+http://www.bronchosports.com/Wrestlingoutlook.htm
+http://www.bronxmall.com/norwoodnews/past/050604/news/page3.html
+http://www.bronxnet.com/info/program/program.htm
+http://www.brookes.ac.uk/other/conmark/IJCM/issue_02/010202.html
+http://www.brookes.ac.uk/services/ocsd/2_learntch/theories.html
+http://www.brookesnews.com/040612history.html
+http://www.brookesnews.com/040612history_print.html
+http://www.brookesnews.com/041312colebatch.html
+http://www.brookesnews.com/041312colebatch_print.html
+http://www.brookespublishing.com/store/books/notari-3173/
+http://www.brookfields.co.nz/property_law/latest_plcn_index.html
+http://www.brookings.edu/comm/events/20040504lugar.htm
+http://www.brookings.edu/comm/policybriefs/pb121.htm
+http://www.brookings.edu/comm/policybriefs/pb139.htm
+http://www.brookings.edu/fp/projects/terrorism/analysis.htm
+http://www.brookings.edu/views/op-ed/ohanlon/20040604.htm
+http://www.brooklyn.liu.edu/depts/socialworkwebsite/msw/
+http://www.brooklynbirdclub.org/tildenriis.htm
+http://www.brooklynmuseum.org/exhibitions/
+http://www.brooksnet.com/faq/rfc1179.html
+http://www.brother.com/as_oc/printer/info/hl6050dn/hl6050dn_fea.html
+http://www.brother.com/brother_En/news_e/001.html
+http://www.brother.com/europe/printer/info/hl6050dn/hl6050dn_fea.html
+http://www.brotherjeff.com/Pages/HIV_info.html
+http://www.brothersjudd.com/blog/archives/024751.html
+http://www.brouhaha.com/~eric/bad_laws/dat_tax.html
+http://www.broward.com/mld/mercurynews/news/special_packages/5630613.htm
+http://www.broward.com/mld/observer/news/local/states/north_carolina/counties/cabarrus/10120434.htm
+http://www.browardschools.com/schoolboard/board_members.htm
+http://www.brown.edu/Administration/Brown_Alumni_Magazine/95/5-95/mail.html
+http://www.brown.edu/Administration/EEO-AA/sexpol1.html
+http://www.brown.edu/Administration/George_Street_Journal/vol26/26GSJ23c.html
+http://www.brown.edu/Administration/News_Bureau/1999-00/99-035.html
+http://www.brown.edu/Administration/News_Bureau/2001-02/01-090t.html
+http://www.brown.edu/Administration/News_Bureau/2003-04/03-098.html
+http://www.brown.edu/Departments/Brown_Is_Green/greenarch/winintro.html
+http://www.brown.edu/Departments/Taubman_Center/polls/rel603.html
+http://www.brown.edu/Student_Services/Writing_Center/lodewick.htm
+http://www.brown.edu/Students/INDY/archives/2005-04-21/articles/sports-neipris_bassfishing.php
+http://www.brownalumnimagazine.com/storyDetail.cfm?ID=2346
+http://www.brownandcrouppen.com/enbrel.html
+http://www.brownandcrouppen.com/medical_malpractice.html
+http://www.brownbooks.com/authors.htm
+http://www.browndailyherald.com/news/2004/10/22/CampusNews/Breaking.News.Library.Workers.Reach.Tentative.Contract.Agreement-778552.shtml
+http://www.browndailyherald.com/news/2004/10/25/CampusNews/Library.Workers.Reach.Tentative.Contract.Agreement-779528.shtml
+http://www.browndategarden.com/
+http://www.brownielocks.com/notes.html
+http://www.brownielocks.com/wordorigins.html
+http://www.brownledge.org/horseback-riding.html
+http://www.brownmarine.com/story06.htm
+http://www.brownprecision.com/how-i-build-a-rifle-for-myself.htm
+http://www.brownrigg-interiors.com/brownrigg/picture_gallery/286.asp
+http://www.brownrigg-interiors.com/brownrigg/picture_gallery/87.asp
+http://www.brownsmarina.com/tech-winter-outboard.html
+http://www.brp.com/en-CA/Media.Center/Press.Releases/1997/1/1997.09.24.htm
+http://www.brreg.no/workshop/
+http://www.bruceleebook.com/exlcusive_introduction.html
+http://www.brucemcmillan.com/FRB_Book012_StepbyStep.html
+http://www.brucewillis.com/fans/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=17;t=000098
+http://www.bruderhof.co.uk/articles/Anabaptist.htm
+http://www.bruderhof.co.uk/e-books/EarlyChristians.htm
+http://www.bruderhoffoundation.org/tbf/Projects/NIpeacewalk.htm%20
+http://www.brudirect.com/DailyInfo/News/Archive/Jan05/060105/nite02.htm
+http://www.brudirect.com/Happenings/BBOpinion25012003.htm
+http://www.brugesgroup.com/mediacentre/index.live?article=113
+http://www.brugesgroup.com/mediacentre/interviews.live?article=147
+http://www.brugesgroup.com/mediacentre/speeches.live?article=169
+http://www.brugesgroup.com/mediacentre/speeches.live?article=49
+http://www.brugesgroup.com/news.live?article=101&keyword=14
+http://www.brugesgroup.com/news.live?article=101&keyword=15
+http://www.brugesgroup.com/news.live?article=140&keyword=8
+http://www.brugesgroup.com/news.live?article=17&keyword=11
+http://www.brugesgroup.com/news.live?article=17&keyword=15
+http://www.brugesgroup.com/news.live?article=28&keyword=15
+http://www.brundagepublishing.com/brhel.html
+http://www.brunel.ac.uk/bst/1no1/PETRAkuppers.htm
+http://www.brunerconsulting.com/article_vol03_19.htm
+http://www.brunosbestbets.com/mortem04.htm
+http://www.brw.com.au/
+http://www.bryan-talbot.com/FAQ.html
+http://www.brynmawr.edu/cities/history.htm
+http://www.brynmawr.edu/deans/fellowships/marshall.html
+http://www.brynmawr.edu/sandt/2002_october/studyingproteins.html
+http://www.brysons.net/miltonweb/milton05.html
+http://www.bsaa.com.au/H_101.html
+http://www.bsad.org/victory/1984.html
+http://www.bsdforums.org/docs/rules.html
+http://www.bsdmall.com/info.html
+http://www.bsdmc.com/press_release_07_11_02.htm
+http://www.bshf.org/en/to.php/about/dih/projects.php?pID=159
+http://www.bshs.org.uk/news/displayrecord.php?eventID=583
+http://www.bsi-global.com/News/Releases/2004/July/n410f452545d64.xalter
+http://www.bsos.umd.edu/gvpt/lpbr/subpages/reviews/rosenne605.htm
+http://www.bsos.umd.edu/gvpt/lpbr/subpages/reviews/simpson605.htm
+http://www.bsos.umd.edu/socy/theory/Thdis.htm
+http://www.bsr.org/CSRResources/Environment/EnvResources.cfm
+http://www.bsr.org/CSRResources/IssueBriefDetail.cfm?DocumentID=48948
+http://www.bstkd.com/JudoHistory/HistorySix.htm
+http://www.bsu.edu/cob/article/0,,3979--,00.html
+http://www.bt.cdc.gov/coca/summaries/anthrax031604.asp
+http://www.bt.cdc.gov/coca/summaries/tularemia042704.asp
+http://www.bt.infonet.com/about/featured/featured_alinghi2003.asp
+http://www.btboutique.com/privacy.php
+http://www.btbroadbandoffice.com/broadband/terms_busi
+http://www.btexact.com/generalinformation?doc=42981
+http://www.btglobalservices.com/business/global/en/products/mpls/applications.html
+http://www.btglobalservices.com/en/products/mpls/index_print.html
+http://www.bth.se/tks/ctup.nsf/0/6f228f1f36b94a6ac1256f4a0052db19?OpenDocument
+http://www.btimes.co.za/99/0801/comp/comp10.htm
+http://www.btimes.co.za/guide/labour/labour19.htm
+http://www.btimes.co.za/guide/labour/labour26.htm
+http://www.btinternet.com/~J.Dean/nictc.htm
+http://www.btinternet.com/~dafyddk/louis.htm
+http://www.btinternet.com/~nlpwessex/Documents/WATwoolseypeakoil.htm
+http://www.btinternet.com/~nlpwessex/Documents/gmnebraskasoycomment.htm
+http://www.btinternet.com/~ted.power/ted.html
+http://www.btinternet.com/~troubleatmill/speak.htm
+http://www.btinternet.com/~vrota/homepage.htm
+http://www.btlonline.org/
+http://www.btlonline.org/btl032505.html
+http://www.btnmag.com/businesstravelnews/magazine/article_display.jsp?vnu_content_id=1000963789
+http://www.btobonline.com/
+http://www.btobonline.com/article.cms?articleId=5353
+http://www.btobonline.com/article.cms?articleId=9948
+http://www.bton.ac.uk/adc-ltsn/html/about/about-team.html
+http://www.btonline.com.au/content/resources/faqs.htm
+http://www.btp.police.uk/areas/scottish.htm
+http://www.btplc.com/Innovation/Mobility/backup/
+http://www.bts.gov/press_releases/2005/bts014_05/html/bts014_05.html
+http://www.btslessonplans.org/article2.htm
+http://www.btsrr.com/btsdet01.htm
+http://www.btu.org/leftnavbar/HP_Jackson_Charter%20Schools.htm
+http://www.btu.org/leftnavbar/benefitsfsa.html
+http://www.bu.edu/asllrp/fl/
+http://www.bu.edu/calendar/
+http://www.bu.edu/celop/part-time/courses-GenEng.html
+http://www.bu.edu/library/education/glenn1.html
+http://www.bu.edu/wcp/Papers/Aest/AestLam2.htm
+http://www.bu.edu/wcp/Papers/Asia/AsiaKhan.htm
+http://www.bu.edu/wcp/Papers/Cont/ContAssy.htm
+http://www.bu.edu/wcp/Papers/Educ/EducBail.htm
+http://www.bu.edu/wcp/Papers/Inte/InteDudd.htm
+http://www.bu.edu/wcp/Papers/Math/MathMroz.htm
+http://www.bu.edu/wcp/Papers/Onto/OntoRahn.htm
+http://www.bu.edu/wcp/Papers/TEth/TEthScho.htm
+http://www.bu.edu/wcp/Papers/Tech/TechGend.htm
+http://www.buav.org/news/2003/12-09.html
+http://www.buav.org/press/2003/12-09.html
+http://www.bubblycrew.org.uk/interviews.html
+http://www.bubbygram.com/datetowin/advice11.htm
+http://www.buckeye-web.com/prox/77tour.html
+http://www.buckeyewebdesign.com/southeast/southeast2.htm
+http://www.buckhead.org/eastvillage/
+http://www.buckmanelementary.org/archives/2005_03.html
+http://www.bucknell.edu/News_Events/More_News/September_2004/Pennsylvania_House.html
+http://www.bucks.edu/~glassart/
+http://www.bucks.edu/~specpop/knowing.htm
+http://www.buckscc.gov.uk/economic_development/business_events.stm
+http://www.buckscc.gov.uk/foi/step_by_step_guide.htm
+http://www.bucksrestaurant.com/m_hall.htm
+http://www.bucurestiwww.ro/indexart.php?%20noa=63
+http://www.budapest.com/
+http://www.budapesttimes.hu/index.php?art=807
+http://www.buddhamind.info/leftside/actives/drama/sit.htm
+http://www.buddhanet.net/4noble8.htm
+http://www.buddhanet.net/bt_2c3.htm
+http://www.buddhanet.net/hospices.htm
+http://www.buddhanet.net/vmed_9.htm
+http://www.buddhist-astrology.com/monthly/this.html
+http://www.buddhist-temples.com/buddhist-religion.html
+http://www.buddhistinformation.com/mudita.htm
+http://www.buddhistinformation.com/true_buddhist.htm
+http://www.budget.gov.au/2005-06/ministerial/html/dotars-19.htm
+http://www.budget.house.gov/020402pr.htm
+http://www.budget.house.gov/photo/odellstmnt.htm
+http://www.budgetlife.com/whole_life_insurance.htm
+http://www.budgetplanners.net/creditreports.html
+http://www.budgettravel.com/paris.htm
+http://www.budgettravel.com/shop.htm
+http://www.budobs.org/cult-dipl-intl.htm
+http://www.budobs.org/grant-paper.htm
+http://www.budsir.org/Part2_3.htm
+http://www.buffalo.edu/~ddchase/vrPaper.htm
+http://www.buffalobeast.com/75/feature6.htm
+http://www.buffalobreath.com/html/howtoorder.asp
+http://www.buffalodiocese.org/
+http://www.buffalofieldcampaign.org/factsheets/ibmp.html
+http://www.bufton.org/meggiesoft/canasta.htm
+http://www.bugsweeps.com/info/big_bro.html
+http://www.bugsweeps.com/info/eavesdropping_detection.html
+http://www.bugsysclub.com/club/newsletters/club-newsletter2003-04.htm
+http://www.build.com.au/building/regulararticles_1.htm
+http://www.build2pro.co.uk/uk/terms
+http://www.buildeazy.com/diy_plansforsale.html
+http://www.builderau.com.au/architect/work/0,39024596,20283058,00.htm
+http://www.builderau.com.au/manage/project/0,39024668,20272552,00.htm
+http://www.builderau.com.au/manage/work/0,39024674,20282737,00.htm
+http://www.builderau.com.au/manage/work/0,39024674,39173564,00.htm
+http://www.builderau.com.au/program/0,39024614,39173564,00.htm
+http://www.builderau.com.au/program/development/0,39024626,39173564,00.htm
+http://www.builderau.com.au/program/web/0,39024632,39128984,00.htm
+http://www.builderau.com.au/webdev/sitedesign/0,39024698,20282999,00.htm
+http://www.builderonline.com/industry-news.asp?sectionID=26&articleID=141998
+http://www.builderonline.com/industry-news.asp?sectionID=30&articleID=140046
+http://www.buildfreedom.com/healmean.htm
+http://www.building-contract.co.uk/building-contract-package.htm
+http://www.building-muscle101.com/weight-lifting-routines.html
+http://www.buildingconservation.com/articles/fire/fire.htm
+http://www.buildingdesign.co.uk/facil-group5/just-kitchens/
+http://www.buildingdesign.co.uk/facil/west-london-security/
+http://www.buildinggreen.com/auth/article.cfm?fileName=040301a.xml
+http://www.buildinggreen.com/auth/article.cfm?fileName=070801a.xml
+http://www.buildinggreen.com/products/gossamer.html
+http://www.buildingonline.com/news/viewnews.pl?id=2865
+http://www.buildings.com/Articles/detailBuildings.asp?ArticleID=2301
+http://www.bujinkan-cambridge.com/links.shtml
+http://www.bukitbendera.com.my/issdtl.asp?ID=96
+http://www.bukovinasociety.org/Rose-1995.html
+http://www.bulgariandreams.com/property/iskarcentral_sofia/
+http://www.bulkmaterialsinternational.com/
+http://www.bulldogblue.com/cat_domestic_policy.shtml
+http://www.bulletin.uwaterloo.ca/1997/jul/22tu.html
+http://www.bulletin.uwaterloo.ca/1998/jul/20mo.html
+http://www.bulletin.uwaterloo.ca/1998/sep/23we.html
+http://www.bulletin.uwaterloo.ca/1999/jun/29tu.html
+http://www.bulletin.uwaterloo.ca/2000/mar/20mo.html
+http://www.bulletin.uwaterloo.ca/2000/may/04th.html
+http://www.bulletin.uwaterloo.ca/2000/oct/24tu.html
+http://www.bulletin.uwaterloo.ca/2000/sep/13we.html
+http://www.bulletin.uwaterloo.ca/2001/may/23we.html
+http://www.bulletin.uwaterloo.ca/2003/dec/17we.html
+http://www.bulletin.uwaterloo.ca/2003/jan/21tu.html
+http://www.bulletin.uwaterloo.ca/2004/feb/04we.html
+http://www.bulletin.uwaterloo.ca/2004/jun/22tu.html
+http://www.bulletin.uwaterloo.ca/2004/mar/03we.html
+http://www.bulletin.uwaterloo.ca/2005/jan/13th.html
+http://www.bullfrogfilms.com/atozc.html
+http://www.bullfrogfilms.com/catalog/bank.html
+http://www.bullfrogfilms.com/subjects/animals.html
+http://www.bullmarket.com/success.php3
+http://www.bullyinginstitute.org/home/twd/bb/bbstudies/japanese.html
+http://www.bullyonline.org/stress/ww1.htm
+http://www.bumperdumper.com/bumper2.htm
+http://www.bundabergrum.com.au/common/terms_conditions.html
+http://www.bundyology.com/opening.html
+http://www.bungeezone.com/disasters/jumper.shtml
+http://www.bunker8.pwp.blueyonder.co.uk/misc/defence.htm
+http://www.bunkertours.co.uk/barnham.htm
+http://www.bunkosquad.com/
+http://www.bunkosquad.com/archives/2002_03.php
+http://www.bunkosquad.com/archives/2002_05.php
+http://www.bunkosquad.com/archives/2004_10.php
+http://www.bunniestudios.com/wordpress/?p=12
+http://www.bunnyclark.com/97gstltr.htm
+http://www.bunnyears.net/gb/building.html
+http://www.bupa.co.uk/about/asp/pr/index.asp
+http://www.bupa.co.uk/about/html/pub/annual_review_2003/chief2003.html
+http://www.bupa.co.uk/health_information/html/health_news/070303who.html
+http://www.bupa.co.uk/health_information/html/health_news/240904walking.html
+http://www.bupa.co.uk/health_information/html/healthy_living/general/sun_care/kids.html
+http://www.bupa.co.uk/health_information/html/healthy_living/heart/stress.html
+http://www.bupa.co.uk/health_information/html/healthy_living/senior/gardening/alzheimers.html
+http://www.bupa.co.uk/jobs/html/graduate_recruitment/pers_prof.html
+http://www.bupahospitals.co.uk/asp/patientcare/hospital.asp
+http://www.bupers.navy.mil/pers440/pers440e2/Subspec%20Overview.htm
+http://www.burdell.org/articles/macplus.html
+http://www.burdines-macysjobs.com/burdines-macys/career/index2.asp
+http://www.bureau-13.com/query.html
+http://www.bureau42.com/view/2639
+http://www.burke.k12.nc.us/Administration___Staff/Board_of_Education/12_06_04/12_06_04.html
+http://www.burkes-landed-gentry.com/sites/common/sitepages/at0104.asp
+http://www.burkesbackyard.com.au/2004/archives/2004/roadtests/others/dog_dumpage
+http://www.burlco.lib.nj.us/njala/05conference.html
+http://www.burlingtonfreepress.com/specialnews/dean/269.htm
+http://www.burlingtonfreepress.com/specialnews/death/16.htm
+http://www.burmalibrary.org/reg.burma/archives/199609/msg00097.html
+http://www.burmalibrary.org/reg.burma/archives/199906/msg00156.html
+http://www.burmalibrary.org/reg.burma/archives/199909/msg01348.html
+http://www.burmalibrary.org/reg.burma/archives/199911/msg00058.html
+http://www.burmalibrary.org/reg.burma/archives/199911/msg00059.html
+http://www.burmalibrary.org/reg.burma/archives/199911/msg00060.html
+http://www.burningman.com/blackrockcity_yearround/related_groups/related_busi.php
+http://www.burningman.com/blackrockcity_yearround/special_events/decompression/decom2004.html
+http://www.burningman.com/installations/creating_dangerous_art.html
+http://www.burningman.com/whatisburningman/2000/00n_letter_sum_1.html
+http://www.burningman.com/whatisburningman/lectures/90s_art.html
+http://www.burnstimesherald.com/news/story.cfm?story_no=11
+http://www.burridge.nscc.ns.ca/testdrive/site/about/hta/1.html
+http://www.burryman.com/
+http://www.bursitis.org/
+http://www.burtandkurt.com/Stem%20Cell%20Notebook.htm
+http://www.bus.qut.edu.au/teaching/plan.jsp
+http://www.bus.ualberta.ca/Finance-MgmtSci/aboutdepartment.htm
+http://www.bus.ualberta.ca/rfield/Courses/OA402/syllabus.htm
+http://www.bus.wisc.edu/update/june04/mergers.asp
+http://www.bushcountry.org/bush_speeches/n_043004_text_bush.htm
+http://www.bushcountry.org/news/jun_news_pages/g_060304_schmitz_bush_hatred.htm
+http://www.bushfiles.com/bushfiles/dcderby.html
+http://www.bushfiles.com/bushfiles/lomax_mansion.html
+http://www.bushgreenwatch.org/back_issues.php
+http://www.bushidoknights.com/
+http://www.bushisms.com/index1a.html
+http://www.bushnews.com/oil.htm
+http://www.business-advantage.co.uk/cs/issue21/reading.htm
+http://www.business-english-training.com/meeting.htm
+http://www.business-english-training.com/nego.htm
+http://www.business-ethics.com/annual.htm
+http://www.business-in-asia.com/korea_book.html
+http://www.business-marketing.com/store/icebreakers.html
+http://www.business-marketing.com/store/salesmeet.html
+http://www.business-plan-secrets-revealed.com/business-plan-library.html
+http://www.business-standard.com/special/fund/2003/smart.htm
+http://www.business.act.gov.au/text/investing/efficientinfrastructureandservices.html
+http://www.business.com/directory/aerospace_and_defense/equipment_and_supplies/
+http://www.business.com/directory/energy_and_environment/oil_and_gas/tom_brown_inc/news/
+http://www.business.com/directory/transportation_and_logistics/airlines_and_aviation/equipment_and_supplies/parts_and_equipment/test_equipment/
+http://www.business.gov/phases/managing/lead/business_ethics.html
+http://www.business.mmu.ac.uk/newsandevents/news.php?uref=112
+http://www.business.no/artikkel_cultural_issues.htm
+http://www.business.uc.edu/msqa/curriculum/requirements
+http://www.business2.com/b2/web/articles/0,17863,512764,00.html
+http://www.business2.com/b2/web/articles/0,17863,514273,00.html
+http://www.business2000.ie/cases/cases_6th/case30.htm
+http://www.business2000.ie/cases/cases_8th/case4.htm
+http://www.businessawardsforscotland.com/pages/categories.htm
+http://www.businessballs.com/freebusinessplansandmarketingtemplates.htm
+http://www.businessballs.com/johariwindowmodel.htm
+http://www.businessballs.com/meetings.htm
+http://www.businessballs.com/motivation.htm
+http://www.businessballs.com/negotiation.htm
+http://www.businessballs.com/puzzles.htm
+http://www.businessballs.com/roleplayinggames.htm
+http://www.businessballs.com/stories.htm
+http://www.businessballs.com/workshops.htm
+http://www.businesscentral.ws/servlet/go_ProcServ/dbpage=page&gid=01002011540939411066522859&pg=01002011540939411066623800&mode=display&listicid=01002011540939411066783006x27x1&liststart=2
+http://www.businessclique.com/articles/FreddyDavis/Falling_Up_The_Stairs.shtml
+http://www.businessexcellenceaustralia.com.au/GROUPS/ABEF/
+http://www.businesseye.org.uk/2478.html
+http://www.businessfightsaids.org/site/pp.asp?c=nmK0LaP6E&b=202274
+http://www.businessfightsaids.org/site/pp.asp?c=nmK0LaP6E&b=202274&printmode=1
+http://www.businessfundamentals.com/answer.htm
+http://www.businessinafrica.co.za/conferences_events/forum.htm
+http://www.businessinafrica.net/features/tourism/393552.htm
+http://www.businessinafrica.net/technology/314311.htm
+http://www.businessintelligence.com/ex/asp/code.89/xe/article.htm
+http://www.businessintelligence.com/ex/asp/id.4/page.1/xe/biextractdetail.htm
+http://www.businessintelligence.com/ex/asp/id.8/page.1/xe/biextractdetail.htm
+http://www.businessintelligence.com/print_biextract.asp?id=4&page=1
+http://www.businessjournalism.org/05/Lifestyle/
+http://www.businessjournalism.org/content/5621.cfm
+http://www.businessknowhow.com/
+http://www.businessknowhow.com/marketing/membmark.htm
+http://www.businessknowhow.com/marketing/mktgformula.htm
+http://www.businessknowhow.com/marketing/reaching.htm
+http://www.businessladiesgolf.com/birdie.html
+http://www.businessleader.com/bl/aug97/prncpls.html
+http://www.businesslink.gov.uk/bdotg/action/detail?r.s=sl&type=CASE%20STUDIES&itemId=1075062298
+http://www.businesslink.gov.uk/bdotg/action/detail?type=CASE%20STUDIES&itemId=1074726893
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1073790681
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1073791122
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1073791134
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1073791760
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074424773
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074424951
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074428483
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074441122
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074441388
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074446915
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074453495
+http://www.businesslink.gov.uk/bdotg/action/detail?type=RESOURCES&itemId=1074467460
+http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1073876962
+http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1074027316
+http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1074414647
+http://www.businessmeetinglocation.com/planning_tips/hotellingo.html
+http://www.businessmeetinglocation.com/planning_tips/tips.html
+http://www.businessnation.com/Businesses_for_Sale/Featured/page21.html
+http://www.businessnation.com/Businesses_for_Sale/Featured/page8.html
+http://www.businessopportunity4u.info/brian4.htm
+http://www.businessownersideacafe.com/cyberschmooz/GenX/1596.html
+http://www.businessplans.org/Green/Green02.html
+http://www.businessplans.org/Green/Green03.html
+http://www.businesspundit.com/
+http://www.businesspundit.com/archives/000666.html
+http://www.businesspundit.com/archives/000796.html
+http://www.businessreport.co.za/index.php?fArticleId=370592
+http://www.businesstown.com/accounting/projections-advice.asp
+http://www.businesstown.com/planning/creating-bank.asp
+http://www.businesstown.com/planning/creating-plan.asp
+http://www.businessweek.com/1997/52/b3559054.htm
+http://www.businessweek.com/1998/21/b3579165.htm
+http://www.businessweek.com/1999/99_50/b3659118.htm
+http://www.businessweek.com/2000/00_45/b3706051.htm
+http://www.businessweek.com/2001/01_08/b3720135.htm
+http://www.businessweek.com/adsections/extravel/frequent/mortgages_flyer.htm
+http://www.businessweek.com/bw50/content/mar2003/a3826067.htm
+http://www.businessweek.com/bwdaily/dnflash/dec2004/nf20041217_8524_db086.htm
+http://www.businessweek.com/careers/content/sep2001/ca20010918_8565.htm
+http://www.businessweek.com/ebiz/0011/es1116.htm
+http://www.businessweek.com/magazine/content/03_09/b3822617_tc102.htm
+http://www.businessweek.com/magazine/content/03_52/b3864056.htm
+http://www.businessweek.com/magazine/content/04_24/b3887077.htm
+http://www.businessweek.com/magazine/content/04_30/b3893001_mz001.htm
+http://www.businessweek.com/magazine/content/04_40/b3902094_mz063.htm
+http://www.businessweek.com/magazine/content/04_43/b3905090_mz017.htm
+http://www.businessweek.com/magazine/content/04_52/b3914504.htm
+http://www.businessweek.com/smallbiz/content/jan2005/sb20050112_7252_sb040.htm
+http://www.businessweek.com/smallbiz/content/jan2005/sb20050112_7252_sb040.htm?chan=sb
+http://www.businessweek.com/smallbiz/content/jun2000/nj000623.htm
+http://www.businessweekeurope.com/magazine/content/05_07/b3920081_mz054.htm
+http://www.businesswest.co.uk/become_a_member/member_directory/a-z.asp?xsl_arg=/h%25/
+http://www.businesswire.com/cgi-bin/f_headline.cgi?bw.040802/220982381
+http://www.businesswritingtips.com/wbwt/tip337.htm
+http://www.busride.com/2005/01/From_Where_I_m_Sitting.asp
+http://www.busserv.ucsb.edu/contractsproperty/speakers_trainers.htm
+http://www.bust.com/news/arc9-2001.shtml
+http://www.bustrace.com/products/delayedwrite.htm
+http://www.butlerwooten.com/CM/Custom/FlaxVerdict.asp
+http://www.butterfliesandwheels.com/dictionary.php
+http://www.butterflyreleases.com/butterflyreleases.com_friends.html
+http://www.butterflyutopia.com/testimonials.html
+http://www.buttpillow.com/history.htm
+http://www.buy-and-sell.com/vega.asp?id=21611
+http://www.buy.co.uk/info/scottish_gas.asp
+http://www.buyagift.co.uk/products/2135.htm
+http://www.buyagift.co.uk/products/2217.htm
+http://www.buyagift.co.uk/products/4074.htm
+http://www.buyagift.co.uk/products/8103.htm
+http://www.buyamower.co.uk/T_and_C.asp
+http://www.buyblue.org/archives/2004/12/cleveland_plain.html
+http://www.buyblue.org/archives/2005/04/help_wanted_out.html
+http://www.buyblue.org/archives/2005/05/buyblue_communi.html
+http://www.buyblue.org/archives/2005/05/walmart_vs_targ_1.html
+http://www.buyblue.org/detail.php?corpId=7
+http://www.buyersmls.com/fitness/benches.htm
+http://www.buyitsellit.com.au/files/departments.php?page_ID=Electronics
+http://www.buylebanese.com/about.asp
+http://www.buymebuyme.com/retail/customer/product.php?productid=44369
+http://www.buymebuyme.com/retail/customer/product.php?productid=44369&cat=288&page=1
+http://www.buymebuyme.com/retail/customer/product.php?productid=44369&cl=1&partner=bobsherman
+http://www.buyonlinenow.com/viewproduct.asp?sku=BFDEC2741GM
+http://www.buyselltix.com/mlb/cardinals.php
+http://www.buyside.com/archives/2004/0411/0412_buyside/0412tel.asp
+http://www.buytelescopes.com/container.asp?dest=/products/hotproduct.html
+http://www.buyusa.gov/china/en/doingbizinchina.html
+http://www.buyusa.gov/colombia/en/pastevents.html
+http://www.buyusa.gov/singapore/en/singapore_market.html
+http://www.buyya.com/libra/
+http://www.buzzfans.com/sports/story/4381636p-4152303c.html
+http://www.buzzflash.com/
+http://www.buzzflash.com/editorial/03/04/04.html
+http://www.buzzle.com/editorials/4-13-2003-39023.asp
+http://www.buzzmetrics.com/about/ab_newscoverage.htm
+http://www.bvalphaserver.com/article12561.html
+http://www.bvf.org.uk/donations/info.asp
+http://www.bvnemba.org/directions.htm
+http://www.bw.lehigh.edu/standard.asp?section=6
+http://www.bw.lehigh.edu/story.asp?ID=18747
+http://www.bwctc.northants.sch.uk/pages/beacon/beacon_swipe.html
+http://www.bweaver.nom.sh/g_melliss/gmelliss.htm
+http://www.bweaver.nom.sh/j_melliss/jmelliss-pt5.htm
+http://www.bwee.com/products_services/3rd_history.htm
+http://www.bwht.org/sc_chinatown3.html
+http://www.bwkayak.com/DirectionsNew.htm
+http://www.bwpics.co.uk/river.html
+http://www.bwrdd-yr-iaith.org.uk/download.php/pID=1102.2
+http://www.bwrdd-yr-iaith.org.uk/download.php/pID=2421.5
+http://www.bwrdd-yr-iaith.org.uk/download.php/pID=3674
+http://www.bwrdd-yr-iaith.org.uk/en/cynnwys.php?cID=6&pID=6&nID=223
+http://www.bwrdd-yr-iaith.org.uk/en/cynnwys.php?cID=6&pID=72&nID=118
+http://www.bxa.doc.gov/News/2004/USPanama7_22.htm
+http://www.bxa.doc.gov/News/Archive98/WARHighComputers.html
+http://www.bxa.doc.gov/news/2003/ForeignPolicyReport/fprchap5_embargoedcountries.html
+http://www.bxa.doc.gov/policiesandregulations/LibyaOveralGuidance.htm
+http://www.bxsciencepa.org/
+http://www.bygonebyways.com/hist_alt_80.htm
+http://www.bymt.co.uk/courses.cfm
+http://www.byndlimits.com/adventure-travel/rest.htm
+http://www.bynkii.com/archives/2005/04/microsofts_neut.html
+http://www.bynkii.com/archives/2005/05/i_hates_lucas_i.html
+http://www.byregion.net/articles-healers/manifesting.html
+http://www.byte.com/art/9403/sec5/art1.htm
+http://www.byteandswitch.com/document.asp?doc_id=28323&page_number=2
+http://www.byteandswitch.com/document.asp?doc_id=35912&page_number=2
+http://www.bytecool.com/faqs.htm
+http://www.bytefarmers.com/log/index.php?m=20050112
+http://www.byteland.org/projectk9/gdod.htm
+http://www.bytesector.com/data/bs-article.asp?ID=211&ct=LCD
+http://www.bytesector.com/data/index.asp
+http://www.bytheseajewelry.com/about/raves.php
+http://www.bythom.com/support.htm
+http://www.bytware.com/
+http://www.bytware.com/press/case12.html
+http://www.bytware.com/press/news51.html
+http://www.byu.edu/
+http://www.byu.edu/edlf/archives/mckay/46feb5.html
+http://www.byu.edu/tma/arts-ed/units/moveunit.htm
+http://www.byu.edu/~hurlbut/mrds/news-f97.html
+http://www.c-b.com/information%20center/public%20works/ic.asp?tID=14&pID=122
+http://www.c-c-d.org/2005HUD.htm
+http://www.c-design.com/c-design/accrec.html
+http://www.c-level.cc/CorinnaSchnitt.html
+http://www.c-n.com/apps/pbcs.dll/article?AID=/20050608/CJL/505060382/1059
+http://www.c-n.com/apps/pbcs.dll/article?AID=/20050622/NEWS02/506220301/1004
+http://www.c-r.org/accord/sri/accord4/background.shtml
+http://www.c-r.org/pubs/occ_papers/Bright.shtml
+http://www.c-r.org/pubs/occ_papers/af_media/baglo.shtml
+http://www.c-span.org/2004vote/jkerrytestimony.asp
+http://www.c-span.org/executive/transcript.asp?cat=current_event&code=bush_admin&year=1968
+http://www.c-span.org/executive/transcript.asp?cat=current_event&code=bush_admin&year=1978
+http://www.c-span.org/executive/transcript.asp?cat=current_event&code=bush_admin&year=1982
+http://www.c-span.org/executive/transcript.asp?cat=current_event&code=bush_admin&year=2004
+http://www.c-span.org/executive/transcript.asp?cat=current_event&code=bush_admin&year=2005
+http://www.c-ville.com/www/archives/2004/12-28-2004/asp/3.asp
+http://www.c20th.com/ppdukeofyorks.htm
+http://www.c2kni.org.uk/etstrat/elearning/neelb.htm
+http://www.c3f.com/ntytoday.html
+http://www.c4vct.com/kym/vivisect/nnbsad.htm
+http://www.ca-missions.org/illusgl.html
+http://www.ca.blm.gov/alturas/telephone/chapter07.htm
+http://www.ca.uky.edu/agc/pubs/4af/4af05ma/4af05ma.htm
+http://www.ca.uky.edu/agc/pubs/agr/agr33/agr33.htm
+http://www.ca1.uscourts.gov/cgi-bin/getopn.pl?OPINION=03-2096.01A
+http://www.ca1.uscourts.gov/cgi-bin/getopn.pl?OPINION=04-1286.01A
+http://www.caapa.org/english/organize/organiza_4.htm
+http://www.caat.org.uk/campaigns/dsei/dsei2003.php
+http://www.caat.org.uk/information/magazine/article.php?edition=0803&article=Stop+Week+shuts+arms+trade
+http://www.caat.org.uk/information/publications/government/ecgd-submission-1099.php
+http://www.caat.org.uk/information/publications/other/intro-briefing-0901.php
+http://www.caaws.ca/girlsatplay/experts/fitness/
+http://www.cabalamat.org/weblog/current_europe.html
+http://www.cabinda.net/Cabinda08.html
+http://www.cabinetmagazine.org/issues/1/i_moglen_2.php
+http://www.cabinetmagazine.org/issues/9/wall.php
+http://www.cable-modems.org/shop/am_detail.php?ASIN=B00005T3T6
+http://www.cableforum.co.uk/board/article.php?goto=lastcomment&a=42
+http://www.cableorganizer.com/raised-floors/
+http://www.cabq.gov/waterconservation/xeric.html
+http://www.cabrini.edu/writing/assessment/characteristics.html
+http://www.cacatholic.org/enl/enl40527.html
+http://www.cacianalyst.org/view_article.php?%20articleid=1143
+http://www.cactusteachers.com/everythingspain/everythingspainarticle.php
+http://www.cadbury.co.uk/EN/CTB2003/about_chocolate/making_chocolate/cocoa_countries.htm
+http://www.caddigest.com/subjects/research/select/cadspaghetti_reading.htm
+http://www.caddpower.com/B742661069/C1513140654/E776545009/
+http://www.caddprimer.com/cad_software_vendors/cad_cam_general_purpose.htm
+http://www.caddprimer.com/library/
+http://www.caddybytes.com/golf_club(s)_order_FAQ_page.htm
+http://www.cadeca.org/blog/vp_norcal.php
+http://www.cadenhead.org/workbench/entry/2005/06/17
+http://www.cadenhead.org/workbench/news/2622
+http://www.cadets.ca/seacad/resources-ressources/phase1/10_e.asp
+http://www.cadetstuff.org/archives/p000107.html
+http://www.cadserver.co.uk/common/viewer/archive/2000/Oct/12/feature2.phtm
+http://www.cae.com/www2004/Products_and_Services/Military_Simulation_and_Training/Portfolio_of_Experience/helicopterExperience.shtml
+http://www.caem.org/website/pages/PJM_Workshop.htm
+http://www.caep.ca/002.policies/002-04.romanow/romanow-07.htm
+http://www.caerdydd.ac.uk/research/activity/maths/
+http://www.caerdydd.ac.uk/research/publications/pubs/year2003/page25817.html
+http://www.caerdydd.ac.uk/schoolsanddivisions/divisions/humrs/jobs/academicresearchsenior/ref0304.html
+http://www.caf.wvu.edu/wvafes/projects2001/PSS_WVA00161.htm
+http://www.caf.wvu.edu/~forage/vpi/418-012/418-012.htm
+http://www.cafamily.org.uk/Direct/a54.html
+http://www.cafamily.org.uk/Direct/c58.html
+http://www.cafeaulait.org/
+http://www.cafebabel.com/en/article.asp?T=T&Id=3713
+http://www.cafecampesino.com/Atlanta_Journal_Jan_9_2005.html
+http://www.cafecampesino.com/coffee/fairtrade.html
+http://www.cafecancun.com/guide/transprt.htm
+http://www.cafeconleche.org/books/effectivexml/chapters/03.html
+http://www.cafedirect.co.uk/pressoffice/release.builder/00023.html
+http://www.cafedoom.com/black.html
+http://www.cafemama.com/truman/
+http://www.cafepress.com/00ps/458133
+http://www.cafepress.com/americanstyle/516593
+http://www.cafepress.com/cp/browse/N-1551_Ne-25_bt-2
+http://www.cafepress.com/cp/browse/Ne-1160_N-1547+1273+20611267_nr-1_bt-2
+http://www.cafepress.com/danesrusduds/16206
+http://www.cafepress.com/datingdesign
+http://www.cafepress.com/ejournalstuff/388876
+http://www.cafepress.com/irregulargoods/107850
+http://www.cafepress.com/joeandmoe/496310
+http://www.cafepress.com/philosophy_shop/637682
+http://www.cafepress.com/subgen
+http://www.cafepy.com/articles/python_types_and_objects/python_types_and_objects.html
+http://www.cafeunderground.com/Cafesite/Rooms/Writing/MossGard/moss_5.html
+http://www.cafilm.org/
+http://www.cafm-services.com/badug/BADUG-TOC.htm
+http://www.cafod.org.uk/policy_and_analysis/policy_papers/debt/debt_and_mdgs
+http://www.cafonline.org/company/smegrant/main.cfm
+http://www.cafonline.org/news/news_story.cfm?whichStory=3779
+http://www.caft.org.uk/factsheets/reasons-for-trapping.html
+http://www.cafta.org/Response_to_Harbinson_Feb_2003.html
+http://www.cag.lcs.mit.edu/~rinard/paper/
+http://www.cahperd.ca/YearofSportandPE/e/winterweek/lesson_plans.cfm
+http://www.cahro.co.uk/index.cfm?act=gen&page=What%20are%20NVQs
+http://www.cai.gouv.qc.ca/11_foire_aux_questions/entreprises-en.html
+http://www.caihometype.com/cgi-bin/eboard30/index2.cgi?frames=no&board=Main&mode=Current&message=3005
+http://www.caionline.org/excerpts/index.cfm?ProductCode=5613
+http://www.cairnsholiday.com/hotel/casino.htm
+http://www.cairnsmuseum.org.au/aboriginal.htm
+http://www.caithness.org/
+http://www.caj.ca/mediamag/summer2002/info-forbid.html
+http://www.caj.ca/mediamag/winter2001/writingtoolbox.html
+http://www.cajunchess.com/affiliates/aff-signup.htm
+http://www.cakafete.com/election_2000/
+http://www.cakewalk.com/x64/whitepaper.asp
+http://www.cal-neva.com/gallery
+http://www.cal.org/caela/digests/mental.htm
+http://www.cal.org/ebonics/ebfillmo.html
+http://www.cal.org/resources/News/200012/assessment.html
+http://www.cal.org/resources/digest/0108ortiz.html
+http://www.cal.org/resources/digest/ncrcds03.html
+http://www.cal.org/topics/dialres.htm
+http://www.calaa.net/resource_finmngmt.html
+http://www.calcleanair.org/
+http://www.calcuttaweb.com/people/rammohan.shtml
+http://www.caldeson.com/iso15489.html
+http://www.caldiatech.com/legal_internet_marketing.php4
+http://www.caledonia.org.uk/friend_foe.htm
+http://www.caledonia.org.uk/land/response.htm
+http://www.caledonia.org.uk/land/zimbabwe.htm
+http://www.caledonia.org.uk/socialland/loft.htm
+http://www.caledoniankitchen.com/catalog/aboutourhaggis.php
+http://www.calendarlive.com/cl-et-rutten14may14,0,1989743.column
+http://www.calendarlive.com/columnists/cl-et-rutten14may14,0,7928705.column
+http://www.calendarlive.com/movies/cl-ca-cinefile6feb06,2,4725464.story?coll=cl-movies
+http://www.calendarlive.com/movies/cl-et-sundance31jan31,2,4231016.story?coll=cl-home-more-channels
+http://www.calendarlive.com/music/pop/cl-ca-dylan04apr04,0,3583678.story
+http://www.calepa.ca.gov/About/History01/building.htm
+http://www.calfarleysboysranch.org/whatshappening_2004archive.html
+http://www.calgarylabservices.com/LabTests/AlphabeticalListing/MicroTests/HIV-Viral-Load.htm
+http://www.calgarylabservices.com/LabTests/TransfusionMedicine/BloodAdministration.htm
+http://www.calgarywomensshelter.com/html/education/safety_plan.html
+http://www.calharvest.com/trade.html
+http://www.cali.org/jlsc/simonds.html
+http://www.calicocat.com/2003/11/new-sat-why-fix-what-works.html
+http://www.california.com/~mcmf/ts202a.html
+http://www.californiaaggie.com/article/?id=8134
+http://www.californialung.org/press/030617epa.html
+http://www.californialung.org/spotlight/cleanair03_milestones.html
+http://www.californiapeaceaction.org/action/booksnotbombs.htm
+http://www.californiaspeedway.com/news/news.jsp?news_id=45
+http://www.californiaspeedway.com/news/news.jsp?news_id=58
+http://www.californiaspeedway.com/news/news.jsp?news_id=58&print=yes
+http://www.caligirl.net/cg/aboutme-cravings.htm
+http://www.calit2.net/technology/features/3-04_yee.html
+http://www.call-with-current-continuation.org/manual/FAQ.html
+http://www.callcentermagazine.com/article/CCM20020303S0005
+http://www.callcentermagazine.com/shared/article/showArticle.jhtml?articleId=8701474&classroom=
+http://www.callcentermagazine.com/shared/printableArticle.jhtml?articleID=8701474
+http://www.callnetuk.com/home/sjprice/sthilarys/sundayschool.html
+http://www.callofdutyelement.com/forum/index.php?act=ST&f=24&t=2789
+http://www.callofdutyelement.com/forum/index.php?showtopic=2789
+http://www.callofdutyelement.com/forum/index.php?showtopic=2789&view=getnewpost
+http://www.callsense.com/resources/callglossary.htm
+http://www.callsforpapers.com/Categorypages/Business%20Environment%20&%20Managerial%20Economics.html
+http://www.callsure07050.co.uk/
+http://www.calmis.ca.gov/file/oesstructure/oes_def3.htm
+http://www.calmun.org/AMSOUTH/AMSOUTH.htm
+http://www.calorie-count.com/calories/activities/5.html
+http://www.caloriescount.com/testimonials.html
+http://www.calottery.com/games/gamespecifics/claimingprizes.html
+http://www.calpine.com/tools/faqs.asp
+http://www.calpoly.edu/~brupnik/tale.html
+http://www.calpoly.edu/~spc/debate/careers.htm
+http://www.calq.gouv.qc.ca/artistes/architecture_en.htm
+http://www.calq.gouv.qc.ca/artistes/danse_en.htm
+http://www.calq.gouv.qc.ca/artistes/faq_art_en.htm
+http://www.calq.gouv.qc.ca/artistes/studios_prog_en.htm
+http://www.calren2.net/musicsoftware/
+http://www.calresco.org/emerge.htm
+http://www.calresco.org/lucas/eiem.htm
+http://www.calresco.org/lucas/fitness.htm
+http://www.calresco.org/lucas/natures.htm
+http://www.calresco.org/lucas/quantify.htm
+http://www.cals.cornell.edu/human_price_of_land_preservation.cfm
+http://www.cals.ncsu.edu/agcomm/magazine/winter05/productive.htm
+http://www.cals.ncsu.edu/course/ent425/text19/physmech.html
+http://www.cals.ncsu.edu:8050/plantpath/mis&vis.html
+http://www.calsharp.com/music/Cold2.html
+http://www.calsoftware.co.uk/custcase2.htm
+http://www.calsoftware.co.uk/custcase4.htm
+http://www.calstart.org/aboutus/nl_detail.php?id=77
+http://www.caltax.org/member/digest/June2004/6.2004.Coupal-CaliforniaTaxBurden.02.htm
+http://www.calvin-coolidge.org/pages/homestead/
+http://www.calvin.edu/academic/cas/gpa/weserems.htm
+http://www.calvin.edu/academic/engl/ks/teams/nnts99.htm
+http://www.calvin.edu/~dhaarsma/scifaith/chapel.00Nov.htm
+http://www.calvin.edu/~dvrb/sector_files/reports/pollution.htm
+http://www.calvincrc.ca/Sermons/ro12'9f.htm
+http://www.calvincrc.org/sermons/2005/potluckMedJan05.html
+http://www.calypso.org/~neill/guide/emergency.htm
+http://www.calyx.net/~schaffer/GOVPUBS/gao/gao30.html
+http://www.calyx.net/~schaffer/LIBRARY/studies/vlr/vlr8.htm
+http://www.cam.ac.uk/cambuniv/childcare/childguide/nonuniv1.html
+http://www.cam.ac.uk/cambuniv/disability/support/college.html
+http://www.cam.ac.uk/cambuniv/nobelprize.html
+http://www.cam.ac.uk/cs/newsletter/2005/nl224/general.html
+http://www.cam.org/~ifva/Advocacy/BriefStandCommittee.html
+http://www.camagazine.com/index.cfm/ci_id/18168/la_id/1.htm
+http://www.camaraslate.com/flagstone.htm
+http://www.camartech.com.au/ress/shop.php3?aisle=resources-tech
+http://www.camaweb.org/corporate/index.php
+http://www.cambodianbuddhist.org/english/website/canon/sutta/anguttara/an08-039.html
+http://www.cambriachamber.org/cambria/cambria_map.htm
+http://www.cambridge-fpas.co.uk/rules.htm
+http://www.cambridge-news.co.uk:8036/businessawards/categories/categories6.asp
+http://www.cambridge-pubs.co.uk/yellow.html
+http://www.cambridge-united.premiumtv.co.uk/page/News/Feature/0,,10423~468426,00.html
+http://www.cambridge.gov.uk/public/ff/disabled_facilities.html
+http://www.cambridge.org/aus/catalogue/catalogue.asp?isbn=0521529921&ss=exc
+http://www.cambridge.org/aus/catalogue/catalogue.asp?isbn=0521532183&ss=exc
+http://www.cambridge.org/aus/catalogue/catalogue.asp?isbn=0521540712&ss=exc
+http://www.cambridge.org/aus/catalogue/catalogue.asp?isbn=0521547571&ss=toc
+http://www.cambridge.org/aus/catalogue/catalogue.asp?isbn=0521825326&ss=exc
+http://www.cambridge.org/catalogue/catalogue.asp?isbn=0521532183&ss=exc
+http://www.cambridge.org/catalogue/catalogue.asp?isbn=0521547571&ss=toc
+http://www.cambridge.org/catalogue/catalogue.asp?isbn=0521825326&ss=exc
+http://www.cambridge.org/elt/englishinmind/teacher_resources/portfolio.htm
+http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521010632
+http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521521009
+http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521532183&ss=exc
+http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521556252
+http://www.cambridge.org/uk/catalogue/catalogue.asp?isbn=0521825326&ss=exc
+http://www.cambridge.org/uk/catalogue/print.asp?isbn=0521521009&print=y
+http://www.cambridge.org/uk/journals/libserv/consortia.htm
+http://www.cambridgeesol.org/exams/pet.htm
+http://www.cambridgeesol.org/research/savisual.htm
+http://www.cambridgeesol.org/teach/ielts/listening/aboutthepaper/faqs.cfm
+http://www.cambridgeforum.org/
+http://www.cambridgemuslims.info/services/
+http://www.cambridgenetwork.co.uk/pooled/profiles/BF_COMP/view.asp?Q=BF_COMP_17797
+http://www.cambridgescp.com/latin/clc/teachers_area/clc_ta_ped_t_method.html
+http://www.cambridgeshire.gov.uk/council/involved/
+http://www.cambridgevineyard.com/about/staff.htm
+http://www.camcentral.com/review_pccam600.php
+http://www.camcnty.gov.uk/sub/tsd/press.htm
+http://www.camcorderinfo.com/bbs/archive/index.php/t-110548.html
+http://www.camcorderinfo.com/bbs/t110548.html
+http://www.camcycle.org.uk/about/manifesto.html
+http://www.camcycle.org.uk/events/archive/2004.html
+http://www.camcycle.org.uk/newsletters/1/article2.html
+http://www.camcycle.org.uk/newsletters/4/article6.html
+http://www.camdennewjournal.co.uk/2004%20archive/200504/n200504_1.htm
+http://www.camdennewjournal.co.uk/archive/n210803_5.htm
+http://www.cameco.com/investor_relations/annual/1999/marketing.php
+http://www.cameco.com/investor_relations/annual/2002/md_and_a/market.php
+http://www.cameco.com/investor_relations/quarterly/2000-q2/overview.php
+http://www.camelliawaldorf.org/calendar.htm
+http://www.cameraguild.com/magazine/stoo699.htm
+http://www.cameraontheroad.com/
+http://www.cameraontheroad.com/being/lmover9.html
+http://www.camerasunderwater.co.uk/info/pages/d_stills.html
+http://www.cameronmedical.com/whiplash-abroad.html
+http://www.cameronmoll.com/archives/000267.html
+http://www.camh.net/about_addiction_mental_health/take_action_deal_with_drugs.html
+http://www.camhs.net/main/parents01.asp
+http://www.cami.jccbi.gov/AAM-400A/FASMB/HOP/hop_2002_3.htm
+http://www.camla.org/garnier/425bldg.htm
+http://www.camlawstudio.com/legal_English_Plus.html
+http://www.camls.org/news/sep2001/mem.html
+http://www.camp-a-roo.com/UDGD/moms.shtml
+http://www.camp4.com/morerockart.php?newsid=374
+http://www.campaignfinance.org/tracker/summer00/warner.html
+http://www.campaignfinancesite.org/history/reform1.html
+http://www.campaignformuseums.org.uk/html/conf/cr_mm.htm
+http://www.campaignlegalcenter.org/press-1388.html
+http://www.campaignwatch.org/
+http://www.campbell.amedd.army.mil/patient_rights.shtml
+http://www.campbellsci.com/bridge-monitoring
+http://www.campbellsci.com/structural-seismic
+http://www.campbethelvirginia.org/philosophy.htm
+http://www.campchippewa.com/images2002/2002_Sandford_Log.htm
+http://www.campcreative.com.au/courses-visual-arts.html
+http://www.campexperts.com/Testimonials.aspx
+http://www.camphill.org/stories.php
+http://www.campinglife.com/site_page_902/article_page_59.cfm
+http://www.campmanitou.com/directors/
+http://www.campoutlaw.com/blog/archives/000127.html
+http://www.campsilos.org/excursions/hc/fieldtrip.htm
+http://www.campsisterspirit.com/
+http://www.campsitereviews.com/english/site_000176.htm
+http://www.campus-germany.de/
+http://www.campus-germany.de/english/
+http://www.campus-germany.de/english/4.22.3.858.html
+http://www.campus-germany.de/english/4.80.305.html
+http://www.campus-technology.com/article.asp?id=6985
+http://www.campus-technology.com/article.asp?id=7092
+http://www.campus-technology.com/campusmobility/article.asp?id=6985
+http://www.campus-technology.com/news_article.asp?id=10865&typeid=153
+http://www.campus-watch.org/article/id/1104
+http://www.campus-watch.org/article/id/406
+http://www.campus-watch.org/article/id/419
+http://www.campus-watch.org/article/id/432
+http://www.campus-watch.org/article/id/611
+http://www.campusactivism.org/
+http://www.campusblues.com/s_inven.asp
+http://www.campusbooks.com/search.asp?selType=Keyword&txtValue=Fortune%20Telling
+http://www.campuscareercenter.com/students/article.asp?news_id=381
+http://www.campuscareercenter.com/students/article.asp?news_id=903
+http://www.campusgermany.de/english/4.90.337.html
+http://www.campusprogress.org/features/297/everyone-remember-were-doing-this-for-minorities-and-women--minorities-women-and-small-farmers
+http://www.campusprogress.org/page/community/post_group/main/BvR
+http://www.campzine.com/archive/2001/11_2001.html
+http://www.camtp.uni-mb.si/books/Thinking-in-Java/AppendixA.html
+http://www.camwib.org.uk/core.html
+http://www.camwood.org/identity.htm
+http://www.camworld.com/
+http://www.can-cara.com/application_form.htm
+http://www.canada.com/national/features/aircanada/story.html?id=7E2DC895-80CB-44B5-8C0D-71334E7AB6F8
+http://www.canada.com/national/features/iraq/story.html?id=926CC4D1-C63B-4643-A3BB-605E1A71DFEA
+http://www.canadacareerweek.com/products/cp_nav/home_e.cfm?art_number=3&sectionid=5
+http://www.canadafreepress.com/2003/main100603.htm
+http://www.canadafreepress.com/2005/cover022405.htm
+http://www.canadaone.com/ezine/feb05/art_fine_business.html
+http://www.canadaone.com/ezine/nov02/competitors.html
+http://www.canadapost.ca/textonly/tools/pg/manual/b03-E.asp
+http://www.canadapost.ca/tools/pg/manual/b03-e.asp
+http://www.canadavacationplanner.com/listings/EN/518
+http://www.canadianactor.com/info/thebiz.html
+http://www.canadianbiodiversity.mcgill.ca/english/theory/abundance.htm
+http://www.canadianchristianity.com/cgi-bin/na.cgi?nationalupdates/040205galileo
+http://www.canadianchristianity.com/cgi-bin/na.cgi?nationalupdates/050202liberals
+http://www.canadianclayandglass.ca/Ione%20Thorkelsson%20press.html
+http://www.canadianclayandglass.ca/Strategic_plan_2004.html
+http://www.canadianclayandglass.ca/Thorn_Glass.html
+http://www.canadiancontent.ca/articles/092704marriage.html
+http://www.canadiancontent.ca/articles/100501terrorism.html
+http://www.canadiancrc.com/articles/Ottawa_Citizen_RCMP_Officer_sues_Ottawa_police_DV_12MAY04.htm
+http://www.canadiandemocraticmovement.ca/displayarticle559.html
+http://www.canadiandimension.mb.ca/extra/d0428md.htm
+http://www.canadiandimension.mb.ca/v38/v38_1dp.htm
+http://www.canadiandriver.com/articles/bv/wagons.htm
+http://www.canadianexpeditions.com/questions.php
+http://www.canadianfreespeech.com/cafegrams/feb-19-04.html
+http://www.canadianfreespeech.com/cafegrams/feb-23-04.html
+http://www.canadianfreespeech.com/updates/warman/warman_threatens_to_sue.html
+http://www.canadianfriendsearch.com/
+http://www.canadianheritage.gc.ca/pc-ch/min/discours-speech/2004-11-24_e.cfm
+http://www.canadianlawsite.com/intellectual.htm
+http://www.canadiannetworkoncuba.ca/Documents/Petras-1may03.shtml
+http://www.canadiannorthern.ca/chronicle14-1
+http://www.canadianpersonalchefalliance.ca/Topic2.html
+http://www.canadianpokerplayer.com/?pageID=10408
+http://www.canadianpoultry.ca/chapter_iv.htm
+http://www.canadiansport.ca/newsletters/June/strategies_e.cfm
+http://www.canadiansportsman.ca/articles/dec202004.html
+http://www.canalboatholidays.com/canalboat/emerald_star/index.shtml
+http://www.canalconcerts.com/2004_shows.asp?artist=bacon-brothers-kevin
+http://www.canalmuseum.org.uk/venue/meeting.htm
+http://www.canbap.org/sermon46.html
+http://www.canberra.edu.au/studyskills/learning/reading.html
+http://www.canberra.edu.au/studyskills/learning/tutorials.html
+http://www.canberrahouse.com.au/profiles/northbourne.html
+http://www.canberramarathon.com.au/index.php?pageid=52
+http://www.cancer.gov/cancertopics/make-a-difference/allpages
+http://www.cancer.gov/cancertopics/make-a-difference/allpages/print
+http://www.cancer.gov/cancertopics/pdq/cam/cartilage/HealthProfessional/page5
+http://www.cancer.gov/clinicaltrials/finding/treatment-trial-guide/allpages
+http://www.cancer.gov/templates/db_alpha.aspx?expand=F
+http://www.cancer.org/docroot/CRI/content/CRI_2_4_3X_Can_breast_cancer_be_found_early_5.asp?sitearea=
+http://www.cancer.org/docroot/CRI/content/CRI_2_6X_Dealing_With_Treatment.asp?sitearea=CRI
+http://www.cancer.org/docroot/ESN/content/ESN_2_1x_Communicating_with_Friends_and_Relatives_About_Your_Cancer.asp
+http://www.cancer.org/docroot/ESN/content/ESN_2_1x_Helping_Your_Child_Deal_with_a_Family_Members_Cancer_Treatment.asp?sitearea=ESN
+http://www.cancer.org/docroot/ESN/content/ESN_2_4X_Cancer_information_and_support_available_online.asp
+http://www.cancer.org/docroot/MIT/content/MIT_2_3X_What_Supervisors_Can_Do.asp?sitearea=MIT
+http://www.cancer.org/docroot/MIT/content/MIT_7_2X_Keeping_Your_Sex_Life_Going.asp
+http://www.cancer.org/docroot/MIT/content/MIT_7_2X_Keeping_Your_Sex_Life_Going.asp?sitearea=MIT&viewmode=print&
+http://www.cancer.org/docroot/MIT/content/MIT_7_2x_Rekindling_Sexual_Interest.asp?sitearea=MIT
+http://www.cancer.org/docroot/NWS/content/NWS_1_1x_Eating_Lots_of_Red_Meat_Linked_to_Colon_Cancer.asp
+http://www.cancer.org/docroot/NWS/content/NWS_2_1xU_Chemotherapy%E2%80%99s_Side_Effects_Worth_Enduring.asp
+http://www.cancer.org/docroot/NWS/content/update/NWS_2_1xU_Chemotherapy%E2%80%99s_Side_Effects_Worth_Enduring.asp
+http://www.cancer.org/docroot/PED/content/PED_3_1x_Link_Between_Lifestyle_and_CancerMarch03.asp
+http://www.cancer.org/docroot/PUB/PUB_1.asp?sitearea=PUB&level=1
+http://www.cancer.org/docroot/SPC/content/SPC_1_Love_Means_Getting_Men_the_Checkups_They_Need.asp
+http://www.cancer.org/docroot/SPC/content/SPC_1_Love_Means_Getting_Men_the_Checkups_They_Need.asp?sitearea=SPC&viewmode=print&
+http://www.cancer.org/docroot/SPC/content/SPC_1_QandA_Should_You_Exercise_During_Cancer_Treatment.asp
+http://www.cancer.org/docroot/cri/content/cri_2_4_1x_what_is_colon_and_rectum_cancer.asp?sitearea=cri
+http://www.cancer.org/docroot/ped/content/ped_10_14_how_to_fight_teen_smoking.asp
+http://www.cancer.org/docroot/ped/content/ped_10_14_how_to_fight_teen_smoking.asp?sitearea=PED&viewmode=print&
+http://www.canceradvocacy.org/resources/essential/end/decisions.aspx
+http://www.canceradvocacy.org/resources/essential/pain/elderly.aspx
+http://www.cancerbacup.org.uk/Resourcessupport/Eatingwell/Eatingproblems/Feelingsick
+http://www.cancerbacup.org.uk/Resourcessupport/Relationshipscommunication/Talkingaboutyourcancer/Askingforinformation
+http://www.cancerbacup.org.uk/Resourcessupport/Relationshipscommunication/Talkingaboutyourcancer/Askingforsupport
+http://www.cancerbacup.org.uk/Treatments/Chemotherapy/Linesports
+http://www.cancerbacup.org.uk/Treatments/Radiotherapy/Sideeffects
+http://www.cancerbacup.org.uk/Treatments/Supportivetherapies/Bloodtransfusions
+http://www.cancerboard.ab.ca/patient/patient_committed_paying.html
+http://www.cancerconferences.com/sobo/meeting_schedule/saturday.html
+http://www.cancercouncil.com.au/editorial.asp?pageid=1056
+http://www.cancercouncil.com.au/editorial.asp?pageid=1233
+http://www.cancercouncil.com.au/editorial.asp?pageid=1371
+http://www.cancerdecisions.com/062104_page.html
+http://www.cancerdiagnosis.nci.nih.gov/diagnostics/advice.html
+http://www.cancerguide.org/alternative_philosophy.html
+http://www.cancerguide.org/small_trial_stats.html
+http://www.cancerhelp.org.uk/help/default.asp?page=314
+http://www.cancerimmunity.org/SEREX/immunogenicity.htm
+http://www.cancerscreening.nhs.uk/cervical/
+http://www.cancersupportivecare.com/second_opinions.html
+http://www.cancersupportivecare.com/selfcare.html
+http://www.cancersupportivecare.com/surgerypain.html
+http://www.cancerwatch.org/glossary/glossary_10.cfm
+http://www.cancuncare.com/spring_break/spring_break.htm
+http://www.cancure.org/legislation.htm
+http://www.candlepowerforums.com/ubbthreads/showflat.php?Cat=&Number=820222&page=&view=&sb=5&o=
+http://www.candlesandsupplies.com/classes.htm
+http://www.candlesupply.com/
+http://www.candoo.com/genresources/antiguafilms7.htm
+http://www.candoo.com/genresources/antiguafilms8.htm
+http://www.canemasters.com/newsletter/sept2001news.htm
+http://www.canfitpro.com/html/montreal_saturday.asp
+http://www.canfor.com/2200.asp
+http://www.canine-epilepsy.com/FAQ.html
+http://www.canismajor.com/dog/firstsix.html
+http://www.canismajor.com/dog/meanit.html
+http://www.canismajor.com/dog/obedshow.html
+http://www.canismajor.com/dog/rottweil.html
+http://www.canismajor.com/dog/skin1.html
+http://www.canismajor.com/dog/srcshelt.html
+http://www.canismajor.com/dog/thunder.html
+http://www.cankan.com/gizmir/13-interesting_places_of_izmir.htm
+http://www.canlaw.com/scc/smallclaims.htm
+http://www.canlii.org/ca/cas/scc/1992/1992scc78.html
+http://www.canlii.org/ca/cas/scc/2004/2004scc23.html
+http://www.canlii.org/mb/laws/sta/c-240/20041104/whole.html
+http://www.canlii.org/on/laws/sta/o-44/20041104/whole.html
+http://www.canmoreleader.com/story.php?id=141215
+http://www.cannabiscup.com/ht/cancup/content.php?bid=202&aid=3
+http://www.cannabiscup.com/ht/cancup/content.php?bid=9&aid=9
+http://www.cannabiscup.com/ht/cancup/content.php?bid=94&aid=3
+http://www.cannabisnews.com/news/thread14727.shtml
+http://www.canoe-kayak.org/pages/t2.html
+http://www.canoe.ca/LifewiseBeauty0412/21_london-can.html
+http://www.canoe.ca/LifewiseMirrorsBodyMind00/0707_tankard.html
+http://www.canoe.ca/LifewiseWorkEtiquetteladies/011031_etiquette-par.html
+http://www.canoe.ca/NewsStand/CalgarySun/Sports/2005/07/01/1112997-sun.html
+http://www.canoe.ca/NewsStand/LondonFreePress/News/2004/10/12/665385.html
+http://www.canoe.ca/NewsStand/LondonFreePress/News/2005/06/12/1083012-sun.html
+http://www.canoe.ca/NewsStand/LondonFreePress/News/2005/06/19/1094890-sun.html
+http://www.canoe.ca/Slam020724/col_jones-sun.html
+http://www.canoe.ca/SlamNaganoAlpineSkiingArchive/feb16_wea.html
+http://www.canoe.ca/WesternTicker/
+http://www.canoeplants.com/maia.html
+http://www.canoepolo.com/forum/archive/index.php/t-1865.html
+http://www.canoestories.com/bike1c3.html
+http://www.canola-council.org/about/digests/0301.html
+http://www.canolainfo.org/html/truthmyths.html
+http://www.canon-europe.com/For_Work/Products/index.asp
+http://www.canon.com.au/supplies/products/supplies/story_881.html
+http://www.canon.com/environment/eco2004e/p09.html
+http://www.canoncollins.org.uk/about/aboutHistoryIDAF.shtml
+http://www.canongate.net/Weed/SeekingThoseResponsibleForA
+http://www.canopener.ca/article.php?story=20041114134142946
+http://www.canow.org/issues/repro_protectnow.html
+http://www.canpension.ca/pages/national.html
+http://www.canpo.org/workshops_listing.cfm
+http://www.canren.gc.ca/prod_serv/index.asp?CaId=130&PgId=1232
+http://www.cantaloupemusic.com/CA21012.html
+http://www.canteach.ca/elementary/sikhism15.html
+http://www.canteach.ca/elementary/songspoems32.html
+http://www.canterbury.ac.nz/courses/undergrad/bcom.shtml
+http://www.canterbury.nsw.gov.au/history/cantbell/nov98.htm
+http://www.canterburyconservatives.co.uk/page/3/44/
+http://www.cantoraccess.com/keyaccess/keyaccessfaq.htm
+http://www.cantorconcern.com/
+http://www.cantufind.com/acting.htm
+http://www.canuckabroad.com/overseasjobs/korea/cultural.shtml
+http://www.canuckflack.com/
+http://www.canurb.com/programs/int_about_globaldev.php
+http://www.canveyislandfc.com/History%20of%20Canvey%20Island%20FC%20By%20Robert%20Errington%20part%2043.htm
+http://www.canyoncreek.com/about_us/cabinet_care/
+http://www.cao-aco.org/MEDIA/FAQ.html
+http://www.caomhin.org/baseball/
+http://www.cap-caraibes.com/Salesproduct.html
+http://www.cap.nsw.edu.au/projects/2000_inits/moree_2000.htm
+http://www.capax.se/solutions/FormFactors.htm
+http://www.capcollege.bc.ca/programs/psychology/students/esl/
+http://www.capdefnet.org/htm_library/Chandler1.htm
+http://www.capeanimals.org/happyendings.htm
+http://www.capeannweb.com/AGH/
+http://www.capecodfrosty.org/newslets/fall96.htm
+http://www.capecodhealth.org/falmouthhospital/medicalservices.asp
+http://www.capecodonline.com/cctimes/edits/cctblogs/gb/archives/000869.htm
+http://www.capecodonline.com/cctimes/edits/cctblogs/gb/archives/2004_09.htm
+http://www.capecodonline.com/cctimes/update/
+http://www.capecodtoday.com/modules.php?op=modload&name=News&file=article&sid=0175
+http://www.capecodtravelguide.com/literay-provincetown.php
+http://www.capeelizabeth.com/aPlan.html
+http://www.capegateway.gov.za/eng/pubs/guides/R/85540/2
+http://www.capetownpride.co.za/
+http://www.capewind.org/modules.php?op=modload&name=News&file=article&sid=100
+http://www.capeyorkmotorcycles.com.au/tours-road.php
+http://www.capi.uvic.ca/pubs/newsletter/sept99.htm
+http://www.capita-ld.co.uk/capita-ld/resources/employment_law/updates/2005/03.05.05.htm
+http://www.capital-books.com/Books/BookDetail.aspx?productID=73011
+http://www.capital.edu/cc/finaid/finaidworkstudy.cfm
+http://www.capital.edu/mysecondyear/post_body.cfm?pid=293
+http://www.capital.net/~force/126aeca.html
+http://www.capitalaction.org/archive/
+http://www.capitalcampaigns.com/e1.htm
+http://www.capitalcentury.com/1911.html
+http://www.capitalcentury.com/1976.html
+http://www.capitalcorpandtrust.com/estabcorp.php3
+http://www.capitaldisney.co.uk/article.asp?id=1827
+http://www.capitalistchicks.com/html/news-viewarticle-14.html
+http://www.capitalone.com/misc/ya/index.shtml?linkid=WWW_Z_Z_Z_GBLFO_FO_05_T_YA1
+http://www.capitaloto.com/acoustic.htm
+http://www.capitalregional.com/En/gestion/message_president_directeur.html
+http://www.capitol.hawaii.gov/hrscurrent/Vol04_Ch0201-0257/HRS0237/HRS_0237-0025.htm
+http://www.capitol.hawaii.gov/senmaj/legislativeAccomplishments/military.htm
+http://www.capitol.hawaii.gov/session2002/bills/sb2179_cd2_.htm
+http://www.capitol.state.tx.us/statutes/docs/CV/content/htm/cv.086.00.000004.00.htm
+http://www.capitol.state.tx.us/statutes/docs/GV/content/htm/gv.009.00.001204.00.htm
+http://www.capitol.state.tx.us/statutes/docs/HS/content/htm/hs.002.00.000143.00.htm
+http://www.capitol.state.tx.us/statutes/docs/NR/content/htm/nr.002.00.000012.00.htm
+http://www.capitol.state.tx.us/statutes/docs/PR/content/htm/pr.006.00.000071.00.htm
+http://www.capitol.state.tx.us/tlo/76R/billtext/HR00706I.HTM
+http://www.capitol.state.tx.us/tlo/78R/billtext/HC00213I.HTM
+http://www.capitol.state.tx.us/tlo/78R/billtext/HC00215I.HTM
+http://www.capm.qc.ca/international/international_usa_20000218_eng.htm
+http://www.capmag.com/article.asp?ID=241
+http://www.capmag.com/article.asp?ID=2485
+http://www.capo.net/StateOfJudiciary.1.03.html
+http://www.cappdt.ca/summer.html
+http://www.capps-help.bham.ac.uk/batch.htm
+http://www.caps-web.org/3_4petland.htm
+http://www.caps.ucsf.edu/capsweb/networks.html
+http://www.captaincynic.com/thread.php3/thrdid=18554-u-frmid=16
+http://www.captainmike.org/Galactopedia/a3.html
+http://www.captainsquartersblog.com/mt/
+http://www.captainsquartersblog.com/mt/archives/004220.php
+http://www.captainsquartersblog.com/mt/archives/004252.php
+http://www.captainsquartersblog.com/mt/archives/004573.php
+http://www.captainsquartersblog.com/mt/archives/004618.php
+http://www.captainsquartersblog.com/mt/archives/004746.php
+http://www.captainsquartersblog.com/mt/archives/004796.php
+http://www.capterra.com/medical-scheduling-software
+http://www.captivasoftware.com/products/casestudies/casestudies_view.asp?wcs_id=48
+http://www.capveterans.com/caprd_014.htm
+http://www.caraudiocentre.co.uk/glossary.asp
+http://www.caraudiocentre.co.uk/shopfront/glossary.asp
+http://www.caravansitesuk.co.uk/ensite0055.htm
+http://www.carbc.com/Car-News-879.html
+http://www.carbuyingtips.com/
+http://www.carbuyingtips.com/rv.htm
+http://www.carbwire.com/
+http://www.carc.org/pubs/v22no1/know.htm
+http://www.carclubs.org.uk/carclubs/local-authorities.htm
+http://www.carcontrol.com/wxia.htm
+http://www.card.iastate.edu/iowa_ag_review/summer_04/article3.aspx
+http://www.cardboardvampyres.com/
+http://www.cardesignnews.com/news/2005/050420milan-designweek/
+http://www.cardhouse.com/home.htm
+http://www.cardi.org/newsroom/06-01-2005-01.php
+http://www.cardiff.ac.uk/for/prospective/undergradrecruitment/study/p3192.html
+http://www.cardiff.ac.uk/schoolsanddivisions/divisions/stude/advis/page22976.html
+http://www.cardiffblues.com/index.cfm?method=news.news
+http://www.cardozaplayer.com/go/archives/v02/i03/holdem
+http://www.cardozojcr.com/iap/2002_01.html
+http://www.cardplayer.com/poker_magazine/archives/?a_id=13697&m_id=80
+http://www.cardplayer.com/poker_magazine/archives/showarticle.php?a_id=12733
+http://www.cardplayer.com/poker_magazine/archives/showarticle.php?a_id=13264&m_id=63
+http://www.cardplayer.com/poker_magazine/archives/showarticle.php?a_id=13795
+http://www.cardplayer.com/poker_magazine/archives/showarticle.php?a_id=14793&m_id=65565
+http://www.care-givers.com/pages/journal/feelingoverly.html
+http://www.care.ca/work/emergency/tsunami/tsunami_e.shtm
+http://www.care.ed.ac.uk/snl/freestyle/teachimp.php
+http://www.career-resumes.com/blog/
+http://www.career.fsu.edu/ccis/guides/write_eff.html
+http://www.career.fsu.edu/documents/technical%20reports/Technical%20Report%2025/Technical%20Report%2025.htm
+http://www.career.fsu.edu/documents/technical%20reports/Technical%20Report%2034/Technical%20Report%2034.htm
+http://www.career.virginia.edu/students/education/handbook/planning.php
+http://www.career.virginia.edu/students/programs/internship/parentsprogram.php
+http://www.careerbabe.com/yourcareer/legalfaq.html
+http://www.careerbank.com/job.cfm/167724.htm
+http://www.careerbuilder.com/JobSeeker/CareerBytes/1104dolooksmatter.htm
+http://www.careerbuilder.com/JobSeeker/CareerBytes/Headway0900.htm
+http://www.careerbuilder.com/JobSeeker/Companies/CompanyDetails.aspx?Comp_DID=C237R696ZZMNV80LGC&Page=Products
+http://www.careerbuilder.com/JobSeeker/Companies/CompanyJobResults.aspx?Comp_DID=C31F66PNV0Q26Z3HR9
+http://www.careerbuilder.com/JobSeeker/Companies/CompanyJobResults.aspx?Comp_DID=C32TJ5XMCCVTZN0TRQ
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?ncc=%5E%22Advance+America%22%24&IPath=JR
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?ncc=%5E%22RadioShack+Corporation%22%24&IPath=JR
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?ncn=%5E%22Claymont%22%24&IPath=JR
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?ncn=%5E%22North+Chicago%22%24&IPath=JR
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?ncn=%5E%22Wellington%22%24&IPath=JR
+http://www.careerbuilder.com/JobSeeker/Jobs/JobResults.aspx?nsn=%5E%22ND%22%24&IPath=JR
+http://www.careercc.com/resumpr.shtml
+http://www.careercenter.sjsu.edu/careerplanning/whatcanido/majorsheets/speechcomm.html
+http://www.careerchange.com/faq.htm
+http://www.careercornerstone.org/mecheng/megetstart.htm
+http://www.careercross.com/en/0021099.html
+http://www.careerdevelopmentgroup.org.uk/impact/0501/proforma.htm
+http://www.careerenergy.co.uk/career-advice-casestudies.shtml
+http://www.careerexplorer.net/unemployment/south-dakota-unemployment-benefits.asp
+http://www.careergoals.com/perspec3.html
+http://www.careerjournal.com/columnists/diversityreport/20021022-sappal.html
+http://www.careerjournal.com/columnists/weddlesguide/20041115-weddle190.html
+http://www.careerjournal.com/hrcenter/ipma/20040107-ipma.html
+http://www.careerjournal.com/jobhunting/change/20031120-meyers.html
+http://www.careerjournal.com/jobhunting/interviewing/19980505-patterson.html
+http://www.careerjournal.com/jobhunting/interviewing/20041116-marcus.html
+http://www.careerjournal.com/jobhunting/jobloss/20021219-delapa.html
+http://www.careerjournal.com/myc/diversity/20021022-capell.html
+http://www.careerjournal.com/myc/fifty/20021031-buss.html
+http://www.careerjournal.com/myc/management/20020430-careercorner.html
+http://www.careerjournal.com/myc/negotiate/19980126-mende.html
+http://www.careerjournal.com/myc/workfamily/20041116-lisle.html
+http://www.careerjournal.com/salaryhiring/negotiate/20040527-lisle.html
+http://www.careerjournal.com/sidebars/20031028-marcus-sb3.html
+http://www.careerjournal.com/specialreports/bschool03/articles/20020909-alsop-mbsurvey.html
+http://www.careerjournaleurope.com/myc/legal/20040715-kelly.html
+http://www.careerkey.com/career_questions1.htm
+http://www.careerknowhow.com/
+http://www.careerknowhow.com/advancement/polling.htm
+http://www.careernet.state.md.us/careertheory.htm
+http://www.careerone.com.au/newsviews/story/0,8523,11697002-22565,00.html
+http://www.careeroverview.com/air-traffic-controller-careers.html
+http://www.careerplanner.com/Career-Articles/All-About-Career-Tests.htm
+http://www.careerplaybook.com/resume.asp
+http://www.careers-in-finance.com/reoptions.htm
+http://www.careers.bham.ac.uk/links/company.htm
+http://www.careers.cmmc.nhs.uk/utilities/privacy.asp
+http://www.careers.ed.ac.uk/STUDENTS/Applications_Interviews/Effectiveapplications/cv.HTM
+http://www.careers.ed.ac.uk/STUDENTS/Further_Study/howtodecide.HTM
+http://www.careers.iptv.org/enhanced/1139/ec_profile.cfm
+http://www.careers.ox.ac.uk/
+http://www.careers.salford.ac.uk/events
+http://www.careers.strath.ac.uk/intra/empatoz/engineering.htm
+http://www.careerservicescentral.com/asp.cfm
+http://www.careersingovernment.com/index.cfm?page=custom&pageid=80
+http://www.careerswales.com/adult/content.asp?id=609
+http://www.careerswales.com/employers/content.asp?id=768
+http://www.careerswales.com/youngpeople/content.asp?id=4
+http://www.careerswales.com/youngpeople/content.asp?id=687
+http://www.careertimes.com.hk/english/academia/education/COEXX_1107200301.asp?page=1
+http://www.careerwebschool.com/North-Dakota-Home-Inspection/licenseBeginningACareer.html?ernid=747
+http://www.careerwomen.com/resources/resources_511.jsp
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=396
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=396&expandnodeid=384
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=396&expandnodeid=387
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=396&expandnodeid=464
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=396&expandnodeid=481
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=404&expandnodeid=387
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=407&expandnodeid=480
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=460
+http://www.caregiver.org/caregiver/jsp/content_node.jsp?nodeid=891&expandnodeid=443
+http://www.caregivershome.com/news/article.cfm?UID=53
+http://www.caregivershome.com/news/practical.cfm
+http://www.carehealth.co.uk/pmiexpln.htm
+http://www.careinternational.org.uk/about/faqs.htm
+http://www.carenclub.com/skywarn.php
+http://www.carestudy.com/CareStudy/SRVP/Intro.asp
+http://www.careusa.org/newsroom/featurestories/2003/nov/11162003_pbellafghaneducation.asp
+http://www.careusa.org/newsroom/pressreleases/2005/jan/20050126_pb_tsunami_testimony_pr.asp
+http://www.carfree.com/papers/crawford_ags.html
+http://www.cargoandjames.com/public/teasaurus.cfm
+http://www.cargolaw.com/New_Carissa_Ship_Disaster.html
+http://www.carib1500.com/c1500/
+http://www.caribbean-weather.net/win.html
+http://www.caribbeancricket.com/modules.php?name=News&file=article&sid=1771
+http://www.caribbeanedu.com/kewl/language/language04.asp
+http://www.caribbeangraphic.net/gt_news.html
+http://www.caribbeanhotels.org/DOCSpublic/ovr-publications.htm
+http://www.caribbeanmedicine.com/article19.htm
+http://www.cariboo.bc.ca/ae/php/phil/mclaughl/students/phil433/jonas1.htm
+http://www.caribsurf.com/news/LOCAL/INDEX.CFM?RECORD=21564
+http://www.caricom.org/archives/rules-lac.htm
+http://www.caringonline.com/eatdis/people.htm
+http://www.caringtogether.com/exotics/iguanas2.html
+http://www.carinsurance.com/news/content3.aspx
+http://www.carkeys.co.uk/columns/david_finlay/413.asp
+http://www.carl-acrl.org/Archives/ConferencesArchive/Conference02/posterabs.html
+http://www.carla.umn.edu/culture/resources/exercises.html
+http://www.carlamathis.com/Image/Shopping.asp
+http://www.carle.com/Hospital/about/facts.shtml
+http://www.carleton.ca/cu/aboutus/years/s3.html
+http://www.carleton.ca/duc/News/Speech_Content/address-spring04-fisk.html
+http://www.carleton.ca/jmc/cnews/n2.shtml
+http://www.carleton.ca/npsia/whats_new/notices_and_deadlines.html
+http://www.carleton.ca/orientation/faqsub/faqservice.htm
+http://www.carleton.ca/tuition/payment/refund.html
+http://www.carleton.ca/~mmacneil/lablaw1.htm
+http://www.carleton.ca/~thenigha/th_html/fiction_demon.htm
+http://www.carlheilman.com/links.html
+http://www.carlingnet.com/result.php?Keywords=goal&host=www.carlingnet.com&cat=1
+http://www.carlisle.army.mil/ssi/about/faq.cfm
+http://www.carlisle.army.mil/usawc/Parameters/04autumn/ohanlon.htm
+http://www.carlislestudenthousing.co.uk/
+http://www.carlmautz.com/palmquist.html
+http://www.carlocompanies.com/newsroom.asp
+http://www.carlyonbaywatch.co.uk/pr151004.shtml
+http://www.carlyonbaywatch.co.uk/pr170204.shtml
+http://www.carm.org/atheism/lonovya.htm
+http://www.carm.org/diff/Isaiah45_7.htm
+http://www.carm.org/index/helpwanted.htm
+http://www.carmarthentownafc.net/latham.htm
+http://www.carmel.ac.uk/pages/english/art_courses.html
+http://www.carmengroup.com/philosophy.htm
+http://www.carmengroup.com/philosophy.html
+http://www.carnegie.org/reporter/01/russia/index3.html
+http://www.carnegie.org/reporter/05/homeland/protectprivacy.html
+http://www.carnegie.org/reporter/05/homeland/protectprivacy_low.html
+http://www.carnegie.org/reporter/10/bandwidth/index4.html
+http://www.carnegiecouncil.org/printerfriendlymedia.php/prmID/972
+http://www.carnegiecouncil.org/viewMedia.php/prmTemplateID/2/prmID/97
+http://www.carnegiecouncil.org/viewMedia.php/prmTemplateID/2/prmID/972
+http://www.carnegiecouncil.org/viewMedia.php/prmTemplateID/8/prmID/147
+http://www.carnegiecouncil.org/viewMedia.php/prmTemplateID/8/prmID/97
+http://www.carnegiecouncil.org/viewMedia.php/prmTemplateID/8/prmID/972
+http://www.carnegieendowment.org/events/index.cfm?fa=eventDetail&id=126
+http://www.carnegieendowment.org/events/index.cfm?fa=eventDetail&id=49
+http://www.carnegieendowment.org/npp/
+http://www.carnegieendowment.org/publications/index.cfm?fa=view&id=1460
+http://www.carnegieendowment.org/publications/index.cfm?fa=view&id=17006&prog=zgp&proj=zsa
+http://www.carnegieendowment.org/publications/index.cfm?fa=view&id=696
+http://www.carnegiegreenaway.org.uk/shadow/teach/lib_dund.html
+http://www.carnelian-international.com/angola/war_and_the_rol_in_society.htm
+http://www.carolark.com/tips.html
+http://www.carolchanel.com/success_stories.html
+http://www.carolhurst.com/subjects/nativeamericans.html
+http://www.carolina-disability.com/social-security-benefits-laws.php
+http://www.carolinagardener.com/talk/talk.html
+http://www.carolinatrust.org/caroliner_08_2004.html
+http://www.carolinelucasmep.org.uk/interests/peace_human_rights.html
+http://www.carolineoconnor.com.au/bringing_down_the_house.htm
+http://www.carollaula.co.uk/diary_aug03.htm
+http://www.carolqueen.com/pages/advice.html
+http://www.carolqueen.com/pages/center.html
+http://www.carolshouse.com/militaryrecords/vietnam/
+http://www.carousel-farms.com/guestlog.htm
+http://www.carpanglersgroup.com/kidsandcarpgallery.html
+http://www.carpenoctem.tv/cons/di.html
+http://www.carpentersunionbc.com/weblog/blogger.html
+http://www.carrentalexpress.com/international/car-rental-europe.htm
+http://www.carrollandgraf.com/shackleton/sea_ice.html
+http://www.carryduffdesigns.co.uk/kitchen/kitchen.html
+http://www.carryongardening.org.uk/page02_3.asp
+http://www.carryongardening.org.uk/page02_6.asp
+http://www.carryonline.com/carry/locationsthen.html
+http://www.cars.com/carsapp/national/?srv=parser&act=display&tf=/advice/shopping/superstores/retail_haggle.tmpl
+http://www.cars.com/go/about/us.jsp?section=H&aff=dallas
+http://www.cars.com/go/about/us.jsp?section=H&aff=national
+http://www.cars.com/go/about/us.jsp?section=H&aff=usatoday
+http://www.cars.com/go/news/Story.jsp?section=news&subject=recent&story=060905storyaDN&aff=starnews
+http://www.cars101.com/subaru_terms.html
+http://www.carshaltonfc.co.uk/home.htm
+http://www.cartage.org.lb/en/themes/Sciences/LifeScience/PhysicalAnthropology/EvolutionFact/Conclusion/Conclusion.htm
+http://www.cartage.org.lb/en/themes/Sciences/LifeScience/PhysicalAnthropology/EvolutionFact/Otherprocesses/Otherprocesses.htm
+http://www.cartage.org.lb/en/themes/Sciences/Zoology/Animalclassification/OrderPrimates/KindsofTeeth.htm
+http://www.cartage.org.lb/en/themes/Sciences/Zoology/EndangeredSpecies/EndangeredSpeciesFact/GreyWolf/GreyWolf.htm
+http://www.cartercenter.org/doc1620.htm
+http://www.cartersvillemagazine.com/Spring03/events.html
+http://www.cartography.org.uk/Pages/Latest/Archive/Durham11.html
+http://www.cartoonart.org/
+http://www.cartoonbuddy.com/Peter_c1_p8.htm
+http://www.cartoonstock.com/directory/b/bad_employment_agencies_gifts.asp
+http://www.cartoonstock.com/directory/b/bad_employment_agency_gifts.asp
+http://www.cartoonstock.com/directory/e/employment_advert_gifts.asp
+http://www.cartoonstock.com/directory/e/employment_benefits_gifts.asp
+http://www.cartoonstock.com/directory/e/employment_law_gifts.asp
+http://www.cartoonstock.com/directory/e/employment_opportunity_gifts.asp
+http://www.cartoonstock.com/directory/l/long_term_employment_gifts.asp
+http://www.cartoonstock.com/directory/t/temporary_employment_gifts.asp
+http://www.cartoonstock.com/directory/t/termination_of_employment_gifts.asp
+http://www.cartoonstock.com/directory/t/terms_of_employment_gifts.asp
+http://www.cartridgeperformance.com/history.htm
+http://www.cartwheelholidays.co.uk/cornwall-selfcatering.asp
+http://www.carvalu.com/buying.asp
+http://www.carvezine.com/Sept%20stories/a_foot_of_land.htm
+http://www.carynews.com/education/story/1407442p-7530777c.html
+http://www.cas.ca/privacy/
+http://www.cas.usf.edu/english/walker/papers/cyberprop.html
+http://www.cas.usf.edu/~moxley/lc/
+http://www.casa.gov.au/corporat/annualreport/htm/part7a.htm
+http://www.casa.ucl.ac.uk/agent-homepage/visual-fields.htm
+http://www.casadata.org/issuemanager/files/license.html
+http://www.casadeamparo.org/default.asp?S=E3&Document=Employment&NID=21936
+http://www.casas.org/ModelStds/Lsl.cfm
+http://www.casavaria.com/eco/albaeco/sdu36.htm
+http://www.casbah.ac.uk/search/names/az.htm
+http://www.casbah.ac.uk/search/subjects/az.htm
+http://www.cascaid.co.uk/CareerBytes/This_Month.html
+http://www.casdn.neu.edu/~geology/department/staff/colgan/iceland/history.htm
+http://www.case-mod.com/store/product_info.php?products_id=1114
+http://www.case.edu/athletics/varsity/news/2002-03/pr_03-17-03b.htm
+http://www.case.edu/news/2005/5-05/ocasio.htm
+http://www.case.edu/projects/erp/projectdetails.html
+http://www.case.org/Content/Miscellaneous/Display.cfm?CONTAINERID=87&CONTENTITEMID=3805&CRUMB=3
+http://www.case.org/Currents/ViewArticle.cfm?contentItemID=4414
+http://www.casebook.org/victorian_london/jpphotos.html
+http://www.casenet.com/music/music.html
+http://www.casenet.org.uk/voice.html
+http://www.cases.tv/sports1.htm
+http://www.cashregistergroup.com/acatalog/sitemap.html
+http://www.casi.org.nz/issues/family/catholic.html
+http://www.casi.org.uk/discuss/2003/msg00564.html
+http://www.casinocity.com/rule/black.htm
+http://www.casinoelegance.com/rules/keno.html
+http://www.caskating.com/Tour.do?key=171&state=promptTourView
+http://www.caslon.com.au/ipguide15.htm
+http://www.caslt.org/research/aim.htm
+http://www.casperstartribune.net/articles/2004/07/30/news/wyoming/63b4fcb928fe8e6987256ee10054e715.txt
+http://www.caspianstudies.com/recent%20event%20(13%20June).htm
+http://www.caspianstudies.com/recent%20event%20(17%20June).htm
+http://www.caspianstudies.com/recent%20event%20(19%20June).htm
+http://www.caspianstudies.com/recent%20event%20(23%20may).htm
+http://www.caspianstudies.com/recent%20event%20(28%20June).htm
+http://www.caspianstudies.com/recent%20event%20(29%20may).htm
+http://www.cass.net.cn/chinese/s16_sws/English/news/mark.htm
+http://www.cassiopaea.org/
+http://www.cast.org/teachingeverystudent/community/forum.cfm?cp_id=127&f_id=532&t_id=365
+http://www.cast.uark.edu/~kkvamme/geop/army_city.htm
+http://www.castawaysithaca.com/musicschedule.cfm
+http://www.castle-hall.co.uk/main.php?page=prospectus
+http://www.castleofspirits.com/stories03/seeingit.html
+http://www.castleofspirits.com/stories05/ivealways.html
+http://www.castlewales.com/dinas.html
+http://www.castlewales.com/glam_rum.html
+http://www.castlewales.com/hope.html
+http://www.castlewales.com/strngbow.html
+http://www.casusfoederis.org/diplomacy-uk.htm
+http://www.cat.com/cda/layout?m=37670&x=7
+http://www.cat.ilstu.edu/teaching_tips/handouts/criteria.shtml
+http://www.cat.org.au/maffew/decisions.html
+http://www.catalinainfo.com/Events.html
+http://www.catalink.net/brochure_info.php?products_id=01192
+http://www.catalink.net/brochure_info.php?products_id=01312
+http://www.catalog.hawaii.edu/courses/departments/fin.htm
+http://www.catalog.ucsb.edu/2002cat/ls/ic.htm
+http://www.catalog.ucsb.edu/2004cat/LS/ic.htm
+http://www.catalog.ucsb.edu/97cat/fefa.htm
+http://www.catalog.ucsb.edu/98cat/fefa.htm
+http://www.catalog.ucsb.edu/ls/ic.htm
+http://www.catalogingandclassificationquarterly.com/ccq29nr3news.html
+http://www.catalogs.umn.edu/ug/coafes/ag30.html
+http://www.catalogue.nationalarchives.gov.uk/RdLeaflet.asp?sLeafletID=244
+http://www.catalogue.nationalarchives.gov.uk/RdLeaflet.asp?sLeafletID=303
+http://www.catalogue.nationalarchives.gov.uk/RdLeaflet.asp?sLeafletID=336
+http://www.catalogue.nationalarchives.gov.uk/RdLeaflet.asp?sLeafletID=60
+http://www.catalogue.nationalarchives.gov.uk/displaycataloguedetails.asp?CATID=13388&CATLN=3&Highlight=&FullDetails=True
+http://www.catalogue.nationalarchives.gov.uk/displaycataloguedetails.asp?CATID=2356&CATLN=3&Highlight=&FullDetails=True
+http://www.cataplexic.com/
+http://www.catb.org/~esr/guns/gun-ethics.html
+http://www.catb.org/~esr/guns/ipscc1.html
+http://www.catb.org/~esr/writings/cups-horror.html
+http://www.catcharide.co.uk/faq.php
+http://www.catchstar.com/StampDirectory.html
+http://www.cateachingsolutions.com/
+http://www.caterer.com/advice/advice.asp?cate=Employment%20law&FileID=03012246861
+http://www.cateringinscotland.com/2005_03_01_archive.html
+http://www.cateringtruck.com/customunits.htm
+http://www.cathaypacific.com/
+http://www.cathedralofhope.org/morenews.html
+http://www.cathmed.org/
+http://www.catholic-center.rutgers.edu/article3.html
+http://www.catholic-church.org/syrdeaf/aurora.html
+http://www.catholic-forum.com/saints/pope0264hn.htm
+http://www.catholic.com/library/gay_marriage.asp
+http://www.catholic.net/rcc/Periodicals/Faith/Jul-Aug99/mariology.html
+http://www.catholic.org/featured/headline.php?ID=2234
+http://www.catholic.org/featured/reality.php?ID=2234
+http://www.catholicculture.org/docs/doc_view.cfm?recnum=1104
+http://www.catholicculture.org/docs/doc_view.cfm?recnum=271
+http://www.catholicculture.org/docs/doc_view.cfm?recnum=4600
+http://www.catholicculture.org/docs/doc_view.cfm?recnum=6085
+http://www.catholicculture.org/docs/doc_view.cfm?recnum=890
+http://www.catholicculture.org/docs/most/getwork.cfm?worknum=73
+http://www.catholicculture.org/highlights/highlights.cfm?ID=53
+http://www.catholicdoors.com/teaching/book1/1-13.htm
+http://www.catholiceducation.org/articles/catholic_stories/cs0012.html
+http://www.catholicexchange.com/vm/index.asp?art_id=22793
+http://www.catholicherald.com/articles/05articles/sports0113.htm
+http://www.catholicireland.net/pages/index.php?nd=52&art=486
+http://www.catholicity.com/commentary/
+http://www.catholicity.com/mccloskey/articles/princeton.html
+http://www.catholicmatch.com/pl/pages/community/articles/details.html?ra=1;id=153
+http://www.catholicnewsagency.com/document.php?n=2
+http://www.catholicpeacefellowship.org/sopII4/sop9.htm
+http://www.catholicplanet.com/articles/article82.htm
+http://www.catholicrelief.org/our_work/where_we_work/overseas/africa/madagascar/peace.cfm
+http://www.catholicsforchoice.org/new/inthenews/073100ConcernForTheMasses.htm
+http://www.catholicsforchoice.org/nobandwidth/English/new/inthenews/073100ConcernForTheMasses.htm
+http://www.catholicsupply.com/christmas/walldecor.html
+http://www.catholictradition.org/belloc2-4.htm
+http://www.catholicvoice.com.au/196/n_13.htm
+http://www.catholicweb.com/media_index.cfm?fuseaction=view_article&partnerid=40&article_id=2130
+http://www.cathouse-fcc.org/southafrica.html
+http://www.caths.cam.ac.uk/jcr/committee/constitution.php
+http://www.cathsoc.org/2003-04/prog-lent-plain.html
+http://www.cathsoc.org/2003-04/prog-lent.html
+http://www.cathygellis.com/
+http://www.catnutrition.org/LitterBox.htm
+http://www.cato.org/dailys/01-01-04.html
+http://www.cato.org/dailys/01-21-03.html
+http://www.cato.org/dailys/04-23-02.html
+http://www.cato.org/dailys/04-30-04-2.html
+http://www.cato.org/dailys/07-23-02.html
+http://www.cato.org/dailys/10-14-04.html
+http://www.cato.org/dispatch/06-10-05d.html
+http://www.cato.org/moneyconf/14mc-3.html
+http://www.cato.org/new/08-02/08-28-02r.html
+http://www.cato.org/people/basham.html
+http://www.cato.org/pub_display.php?pub_id=2305
+http://www.cato.org/pub_display.php?pub_id=3611
+http://www.cato.org/pub_display.php?pub_id=3611&print=Y
+http://www.cato.org/pubs/books/money/money7.htm
+http://www.cato.org/pubs/pas/pa-226.html
+http://www.cato.org/pubs/pas/pa-277.html
+http://www.cato.org/pubs/pas/pa-284.html
+http://www.cato.org/pubs/pas/pa-392es.html
+http://www.cato.org/pubs/pas/pa-521es.html
+http://www.cato.org/pubs/pas/pa029.html
+http://www.cato.org/pubs/policy_report/cpr-18n5-1.html
+http://www.cato.org/pubs/policy_report/v21n3/events.html
+http://www.cato.org/pubs/regulation/reg19n4e.html
+http://www.cato.org/pubs/regulation/regv14n4/reg14n4-currents.html
+http://www.cato.org/pubs/ssps/ssp7.html
+http://www.cato.org/pubs/tbb/tbb-0204.html
+http://www.cato.org/realaudio/audiopages99.html
+http://www.cato.org/realaudio/drugwar/papers/carpenter.html
+http://www.cato.org/research/articles/gryphon-050217.html
+http://www.cato.org/research/articles/healy-030101.html
+http://www.cato.org/research/articles/moller-050221.html
+http://www.cato.org/research/articles/reynolds-030112.html
+http://www.cato.org/research/articles/taylor-011206.html
+http://www.cato.org/special/ownership_society/boaz.html
+http://www.cato.org/speeches/sp-mg051598.html
+http://www.cato.org/tech/tk/010928-tk.html
+http://www.cato.org/testimony/ct-ce120601.html
+http://www.cato.org/testimony/ct-mg041097.html
+http://www.cato.org/testimony/ct-pi210.html
+http://www.cato.org/testimony/ct-pm100699.html
+http://www.cato.org/testimony/ct-ps720.html
+http://www.catt.com/index.php?page=20
+http://www.cattail.nu/wraithproject/0309waitredem1.html
+http://www.catteacorner.com/ghost.htm
+http://www.catteacorner.com/reviews.htm
+http://www.catteacorner.com/reviews12.htm
+http://www.catteacorner.com/reviews17.htm
+http://www.catteacorner.com/reviews6.htm
+http://www.catteacorner.com/reviews8.htm
+http://www.catteacorner.com/us-t6.htm
+http://www.cattledog.com/rescue/norcal.html
+http://www.cattletoday.com/archive/2004/January/CT306.shtml
+http://www.cattletoday.com/archive/2005/April/CT387.shtml
+http://www.caucasus.dk/publication8.htm
+http://www.caucho.com/resin-3.0/config/control.xtp
+http://www.caught-on-video.com/
+http://www.caught.net/cases/ocg.htm
+http://www.caut.ca/cuasa/benefits/health.html
+http://www.cavalierdaily.com/CVarticle.asp?ID=23414&pid=1297
+http://www.cavalierdaily.com/features/TheFuture/index.aspx?page=future_pat
+http://www.cavaliers.co.uk/articles/testing.htm
+http://www.cave.vt.edu/CAVE/design/design.html
+http://www.cavebear.com/icann-board/diary/mar-13-2001.htm
+http://www.caw.ca/whatwedo/bargaining/bycompany/starbucks/april25_index.asp
+http://www.cawlocal.ca/676/history.asp
+http://www.caymannetnews.com/
+http://www.cb-cda.gc.ca/news/c20012002fs-e.html
+http://www.cb1.com/~john/Religion/returning-rest.html
+http://www.cba.org/CBA/newsletters/con-2003/c3.asp
+http://www.cba.ufl.edu/upo/advising/index.asp
+http://www.cbaa.org.au/content.php/12.html?pubid=63
+http://www.cbass.com/MASTERS.HTM
+http://www.cbbooksdistribution.com/fiction10.html
+http://www.cbbsweb.org/enf/abo_bmt.html
+http://www.cbc.ca/arts/film/oscarchronicles-part4.html
+http://www.cbc.ca/arts/music/leakedmusic.html
+http://www.cbc.ca/canadavotes/analysiscommentary/katherinewalker.html
+http://www.cbc.ca/canadavotes/thecampaign/fightinwords.html
+http://www.cbc.ca/checkup/christmas00.html
+http://www.cbc.ca/consumers/market/files/cars/windshields/
+http://www.cbc.ca/consumers/market/files/home/antitelemarketing/tips.html
+http://www.cbc.ca/hottype/season03-04/04-01-20_sat.html
+http://www.cbc.ca/news/background/drugs/cox-2.html
+http://www.cbc.ca/news/background/forcesofnature/volcanoes.html
+http://www.cbc.ca/news/background/sars/hkdiary030501.html
+http://www.cbc.ca/news/background/uselection2004/swingstates.html
+http://www.cbc.ca/newsreal/teachers.html
+http://www.cbc.ca/ottawamatters/participate/worktales.html
+http://www.cbc.ca/sports/columns/oake/050414.html
+http://www.cbc.ca/sports/columns/running/cause.html
+http://www.cbc.ca/sports/indepth/cba/features/levittreport.html
+http://www.cbc.ca/sports/indepth/cba/features/quotes.html
+http://www.cbc.ca/story/arts/national/2005/05/11/Arts/fiction050511.html
+http://www.cbc.ca/story/canada/national/2004/10/06/subs041006.html
+http://www.cbc.ca/sunday/newman.html
+http://www.cbc.ca/sunday/scheuer.html
+http://www.cbc.ca/thecurrent/2004/200401/20040122.html
+http://www.cbc.ca/thecurrent/2005/200504/20050407.html
+http://www.cbcbooks.org/html/visits.html
+http://www.cbcg.org/beliefs.htm
+http://www.cbe.ab.ca/hr/application.asp
+http://www.cbe.ab.ca/hr/employment.asp
+http://www.cbe.ab.ca/hr/faqs.asp
+http://www.cbe.berkeley.edu/underfloorair/thermalcomfort.htm
+http://www.cbe.wwu.edu/zhang/zhang.htm
+http://www.cbec.gov.in/cae/customs/cs-tariff/cstrulesintrpret.htm
+http://www.cbec.gov.in/cae/draft-circ/fast-track-clearance-procedure.htm
+http://www.cbecal.org/Legal/victoriessum.shtml
+http://www.cbel.com/dance_styles/
+http://www.cbel.com/dance_styles/?order=theme&setcols=2
+http://www.cbel.com/leasing_services/
+http://www.cbest.nesinc.com/CA_sampleques_writing.htm
+http://www.cbgb.com/save_cbgb.htm
+http://www.cbi.org.uk/ndbs/press.nsf/0/b6eda9df7fc67a3d802570070051a2e3?OpenDocument
+http://www.cbi.umn.edu/collections/inv/cbi00006.html
+http://www.cbi.umn.edu/iterations/zabolitzky.html
+http://www.cbintel.com/bankcompliance.htm
+http://www.cbmall.com/join.asp
+http://www.cbmw.org/sermon.php?id=13
+http://www.cbn.com/CBNNews/News/040622c.asp
+http://www.cbn.com/about/jobs/openings.asp
+http://www.cbn.com/health/NaturalHealth/drsears_heartattack.asp
+http://www.cbn.com/health/research/elliott_birthcontrol.asp
+http://www.cbn.com/spirituallife/BibleStudyAndTheology/Discipleship/Murphey_CommittedButFlawedC.asp
+http://www.cbn.com/spirituallife/CBNTeachingSheets/Clearing_The_Air_On_Smoking.asp
+http://www.cbn.com/spirituallife/TeachingSheets/Born_Again_How_To_Be_Saved.asp
+http://www.cbn.com/spirituallife/devotions/vonbuseck_pigeon03.asp
+http://www.cbo.gov/showdoc.cfm?index=1285&sequence=0
+http://www.cbo.gov/showdoc.cfm?index=2731&sequence=6
+http://www.cbo.gov/showdoc.cfm?index=3581&sequence=0
+http://www.cbo.gov/showdoc.cfm?index=4968&sequence=0
+http://www.cbo.gov/showdoc.cfm?index=5085&sequence=0
+http://www.cbo.gov/showdoc.cfm?index=5666&sequence=0
+http://www.cbo.gov/showdoc.cfm?index=5943&sequence=0
+http://www.cbp.org/
+http://www.cbpp.org/11-26-01tax2.htm
+http://www.cbpp.org/2-2-05socsec2.htm
+http://www.cbpp.org/3-10-05bud2.htm
+http://www.cbpp.org/3-10-05tax.htm
+http://www.cbpp.org/3-27-01sfp.htm
+http://www.cbpp.org/3-31-99fs.htm
+http://www.cbpp.org/4-15-04imm.htm
+http://www.cbpp.org/5-2-05socsec3.htm
+http://www.cbpp.org/6-12-01health.htm
+http://www.cbpp.org/6-2-04tax.htm
+http://www.cbpp.org/6-2-05socsec.htm
+http://www.cbpp.org/9-23-03tax.htm
+http://www.cbpp.org/9-4-99tax-rep.htm
+http://www.cbpp.org/taxday98.htm
+http://www.cbr.cam.ac.uk/research/programme3/project3-5.htm
+http://www.cbronline.com/content/COMP/magazine/Articles/Features/AreYouExperienced.asp
+http://www.cbronline.com/content/COMP/magazine/Articles/Features/PerformanceProficiency.asp
+http://www.cbrrescue.org/articles/bringhome.htm
+http://www.cbs.com/daytime/price/community/mailbag/
+http://www.cbs.com/daytime/price/community/mailbag/mailbag_anniversary.shtml
+http://www.cbs.com/daytime/price/community/qa/
+http://www.cbs.dk/cbs_international/programs_courses/prospective_exchange_students/undergraduate_courses
+http://www.cbs.state.or.us/external/imd/rasums/resalert/ewp.html
+http://www.cbs.state.or.us/external/osha/educate/training/pages/200ergofaq.html
+http://www.cbs.state.or.us/external/osha/educate/training/pages/201xmfaq.html
+http://www.cbsa-asfc.gc.ca/E/pub/cp/rc4227/rc4227-e.html
+http://www.cbsa-asfc.gc.ca/import/fast/faq-e.html
+http://www.cbsa-asfc.gc.ca/sima/complain2-e.html
+http://www.cbsc.org/alberta/search/display.cfm?Code=1395&coll=FE_FEDSBIS_E
+http://www.cbsc.org/english/absn/search/display.cfm?code=4029&coll=FE_FEDSBIS_E
+http://www.cbsc.org/english/search/display.cfm?code=1395&coll=FE_FEDSBIS_E
+http://www.cbsc.org/english/search/display.cfm?code=4029&coll=FE_FEDSBIS_E
+http://www.cbsc.org/english/search/display.cfm?code=4077&coll=FE_FEDSBIS_E
+http://www.cbsc.org/ns/english/display_lib.cfm?Code=165254&coll=NS_LIB_COLL_E
+http://www.cbsc.org/nwt/search/display.cfm?Code=4077&Coll=FE_FEDSBIS_E
+http://www.cbsc.org/ontario/absn/english/search/display.cfm?code=4077&coll=FE_FEDSBIS_E
+http://www.cbsc.org/ontario/english/search/display.cfm?Code=1936&coll=FE_FEDSBIS_E
+http://www.cbsc.org/pe/absn/search/display.cfm?code=4077&coll=FE_FEDSBIS_E
+http://www.cbsc.org/pe/english/display.cfm?code=4077&coll=FE_FEDSBIS_E
+http://www.cbsc.org/sask/sbis/search/display.cfm?Code=5917&coll=SK_PROVBIS_E
+http://www.cbsc.org/sask/whats_new.cfm
+http://www.cbsnews.com/sections/earlyshow/saturday/main3480.shtml
+http://www.cbsnews.com/sections/sunday/main3445.shtml
+http://www.cbsnews.com/stories/1999/10/28/48hours/main66317.shtml
+http://www.cbsnews.com/stories/2000/04/25/48hours/main188249.shtml
+http://www.cbsnews.com/stories/2001/01/14/60II/main264144.shtml
+http://www.cbsnews.com/stories/2002/06/20/earlyshow/living/recipes/main512882.shtml
+http://www.cbsnews.com/stories/2002/08/26/earlyshow/contributors/reginalewis/main519808.shtml
+http://www.cbsnews.com/stories/2002/10/03/60minutes/main524268.shtml
+http://www.cbsnews.com/stories/2002/10/30/60II/main527542.shtml
+http://www.cbsnews.com/stories/2002/12/16/60II/main533243.shtml
+http://www.cbsnews.com/stories/2003/01/10/national/main536134.shtml
+http://www.cbsnews.com/stories/2003/01/14/60II/main536416.shtml
+http://www.cbsnews.com/stories/2003/02/24/iraq/main541815.shtml
+http://www.cbsnews.com/stories/2003/03/10/opinion/polls/main543446.shtml
+http://www.cbsnews.com/stories/2003/04/06/60minutes/main548023.shtml
+http://www.cbsnews.com/stories/2003/04/29/earlyshow/living/recipes/main551559.shtml
+http://www.cbsnews.com/stories/2003/08/01/eveningnews/consumer/main566325.shtml
+http://www.cbsnews.com/stories/2003/09/11/tech/main572704.shtml
+http://www.cbsnews.com/stories/2003/09/12/earlyshow/series/main572916.shtml
+http://www.cbsnews.com/stories/2003/11/15/health/main583858.shtml
+http://www.cbsnews.com/stories/2003/11/17/national/main583964.shtml
+http://www.cbsnews.com/stories/2003/11/20/48hours/main584726.shtml
+http://www.cbsnews.com/stories/2003/11/20/tech/digitaldan/main584606.shtml
+http://www.cbsnews.com/stories/2003/11/21/60minutes/main584945.shtml
+http://www.cbsnews.com/stories/2003/11/22/48hours/main585125.shtml
+http://www.cbsnews.com/stories/2003/12/01/48hours/main586151.shtml
+http://www.cbsnews.com/stories/2003/12/23/tech/main589961.shtml
+http://www.cbsnews.com/stories/2004/02/05/iraq/main598147.shtml
+http://www.cbsnews.com/stories/2004/02/25/earlyshow/series/week_of_wishes/main602156.shtml
+http://www.cbsnews.com/stories/2004/03/18/48hours/main607227.shtml
+http://www.cbsnews.com/stories/2004/03/19/60minutes/main607356.shtml
+http://www.cbsnews.com/stories/2004/05/03/60II/main615303.shtml
+http://www.cbsnews.com/stories/2004/05/07/sunday/main616291.shtml
+http://www.cbsnews.com/stories/2004/05/10/tech/main616505.shtml
+http://www.cbsnews.com/stories/2004/05/25/terror/main619569.shtml
+http://www.cbsnews.com/stories/2004/06/01/60minutes/main620619.shtml
+http://www.cbsnews.com/stories/2004/06/01/eveningnews/main620626.shtml
+http://www.cbsnews.com/stories/2004/06/05/national/main621252.shtml
+http://www.cbsnews.com/stories/2004/08/06/earlyshow/leisure/main634424.shtml
+http://www.cbsnews.com/stories/2004/09/06/politics/main641481.shtml
+http://www.cbsnews.com/stories/2004/09/08/60II/main641984.shtml
+http://www.cbsnews.com/stories/2004/09/17/earlyshow/saturday/main644073.shtml
+http://www.cbsnews.com/stories/2004/10/08/60minutes/main648240.shtml
+http://www.cbsnews.com/stories/2004/10/08/earlyshow/saturday/main648269.shtml
+http://www.cbsnews.com/stories/2004/10/13/tech/main649230.shtml
+http://www.cbsnews.com/stories/2004/10/19/health/main650177.shtml
+http://www.cbsnews.com/stories/2004/10/20/earlyshow/series/survivor/main650330.shtml
+http://www.cbsnews.com/stories/2004/10/22/politics/main650966.shtml
+http://www.cbsnews.com/stories/2004/10/25/world/main651191.shtml
+http://www.cbsnews.com/stories/2004/11/03/60II/main653503.shtml
+http://www.cbsnews.com/stories/2004/11/12/60minutes/main655407.shtml
+http://www.cbsnews.com/stories/2004/11/12/world/main655280.shtml
+http://www.cbsnews.com/stories/2004/11/17/48hours/main656245.shtml
+http://www.cbsnews.com/stories/2004/11/18/60minutes/main656458.shtml
+http://www.cbsnews.com/stories/2004/11/24/60II/main657615.shtml
+http://www.cbsnews.com/stories/2004/12/01/60II/main658590.shtml
+http://www.cbsnews.com/stories/2004/12/07/national/main659687.shtml
+http://www.cbsnews.com/stories/2004/12/16/48hours/main661569.shtml
+http://www.cbsnews.com/stories/2004/12/20/earlyshow/living/ConsumerWatch/main661939.shtml
+http://www.cbsnews.com/stories/2005/01/10/national/main665727.shtml
+http://www.cbsnews.com/stories/2005/01/13/48hours/main666740.shtml
+http://www.cbsnews.com/stories/2005/01/14/national/main667118.shtml
+http://www.cbsnews.com/stories/2005/01/16/iraq/main667256.shtml
+http://www.cbsnews.com/stories/2005/01/16/politics/main667243.shtml
+http://www.cbsnews.com/stories/2005/01/21/earlyshow/saturday/main668407.shtml
+http://www.cbsnews.com/stories/2005/01/28/opinion/courtwatch/main670110.shtml
+http://www.cbsnews.com/stories/2005/01/29/tech/main670268.shtml
+http://www.cbsnews.com/stories/2005/01/31/world/main670468.shtml
+http://www.cbsnews.com/stories/2005/02/04/60minutes/main671817.shtml
+http://www.cbsnews.com/stories/2005/02/07/opinion/main672234.shtml
+http://www.cbsnews.com/stories/2005/02/08/national/main672297.shtml
+http://www.cbsnews.com/stories/2005/02/13/tech/main673726.shtml
+http://www.cbsnews.com/stories/2005/02/14/world/main673876.shtml
+http://www.cbsnews.com/stories/2005/02/25/60minutes/main676552.shtml
+http://www.cbsnews.com/stories/2005/03/10/earlyshow/living/money/main679246.shtml
+http://www.cbsnews.com/stories/2005/03/11/60minutes/main679609.shtml
+http://www.cbsnews.com/stories/2005/03/24/national/main682773.shtml
+http://www.cbsnews.com/stories/2005/03/31/earlyshow/series/main684234.shtml
+http://www.cbsnews.com/stories/2005/04/13/earlyshow/living/recipes/main687919.shtml
+http://www.cbsnews.com/stories/2005/04/23/politics/main690360.shtml
+http://www.cbsnews.com/stories/2005/05/06/eveningnews/consumer/main693636.shtml
+http://www.cbsnews.com/stories/2005/06/07/earlyshow/series/main700052.shtml
+http://www.cbsnews.com/stories/2005/06/08/earlyshow/living/main700324.shtml
+http://www.cbsnews.com/stories/2005/06/10/terror/main700815.shtml
+http://www.cbsnews.com/stories/2005/06/13/national/main701355.shtml
+http://www.cbsnews.com/stories/2005/06/14/entertainment/main701735.shtml
+http://www.cbsnews.com/stories/2005/06/14/health/main701753.shtml
+http://www.cbsnews.com/stories/2005/06/17/politics/main702631.shtml
+http://www.cbsnews.com/stories/2005/06/22/terror/main703460.shtml
+http://www.cbss.st/baltinfo/2001/dbaFile635.html
+http://www.cbss.st/documents/cbsspresidencies/10russian/bscc/
+http://www.cbva.ca/rules.htm
+http://www.cc-ob.org/sermons/2005/0105b.htm
+http://www.cc.gatech.edu/classes/cs6751_97_fall/projects/follow_me/exam/kevin.html
+http://www.cc.gatech.edu/fac/Sven.Koenig/icaps/icaps04/acceptedpapers.html
+http://www.cc.gatech.edu/gvu/people/randy.carpenter/folklore/v3n4.html
+http://www.cc.gatech.edu/projects/disl/specialProjects/DeepWeb.html
+http://www.cc.nih.gov/ccc/clinical_pathology_conf/cpccase.html
+http://www.cc.nih.gov/dtm/dtm_directions.htm
+http://www.cc.utah.edu/~gem16460/cirquedusoleil/mystere.html
+http://www.cca.org.au/content.asp?p=108
+http://www.cca.org/dave/fiction/stick
+http://www.ccaej.org/about.htm
+http://www.ccalliance.org/patient/personal/2sharon.html
+http://www.ccatsandiego.org/n_021004DailyTranscript.shtml
+http://www.ccb.se/newsletters/2004/01/news_0401h.htm
+http://www.ccbnet.org/cap02.htm
+http://www.ccboe.com/board.direct.html
+http://www.ccboe.com/site/boardofed/boardprofiles.htm
+http://www.ccbriefing.co.uk/pages/guesteditorials2.php?id=2425
+http://www.ccc.govt.nz/TargetZero/ResourceAndWasteSpecific/
+http://www.ccc.org.au/default.asp?page=risebuild
+http://www.ccchronicle.com/back/2003_spring/2003-02-24/campus5.html
+http://www.cccure.org/Documents/HISM/377-381.html
+http://www.ccdc.com/index.cfm/fuseaction/aboutCCDC.redev_defined
+http://www.ccds.charlotte.nc.us/History/Art/china/writingaboutart.htm
+http://www.cce.ac.nz/info/businessclass/sobnews.html
+http://www.cce.ac.nz/info/whysob/sobnews.html
+http://www.cce.columbia.edu/seas/
+http://www.cce.columbia.edu/seas/advising/basics/cover_letters.php
+http://www.cce.cornell.edu/chemung/energy.htm
+http://www.cce.cornell.edu/seagrant/underwater/underwfiles/scubareport2.html
+http://www.cceconomicdevelopment.com/member_benefits.html
+http://www.ccedtraining.mchenry.edu/courses/ViewCcedCoursesByProgramId.asp?ProgramId=5
+http://www.ccel.org/a/aquinas/summa/FS/FS016.html
+http://www.ccel.org/c/calvin/calcom09/htm/xxiv.ii.htm
+http://www.ccel.org/c/calvin/comment3/comm_vol21/htm/ii.iii.xli.htm
+http://www.ccel.org/fathers/NPNF2-06/letters/letter66.htm
+http://www.ccel.org/pager.cgi?file=fathers/NPNF1-04/augustine/bk_mm/mm.html&from=CHAP16
+http://www.ccel.us/PeaceWithGod.Chapter7.html
+http://www.ccfc.org/design/stories/consumertips/communication.html
+http://www.ccg.org/english/s/p009.html
+http://www.ccgevents.com/detail.php?event=00059
+http://www.cche.net/usersguides/outcomes.asp
+http://www.cche.net/usersguides/prognosis.asp
+http://www.cche.net/usersguides/review.asp
+http://www.cchr.org/art/eng/page28.htm
+http://www.cchra-ccarh.ca/en/skills/thinking_skills.asp
+http://www.cchrc.org/staff.html
+http://www.cchs.net/health/health-info/docs/1100/1185.asp?index=5890
+http://www.cchs.net/health/health-info/docs/1900/1945.asp?index=8615
+http://www.cchsnetwork.org/
+http://www.cci.org.uk/jobs/index.php
+http://www.ccisabroad.org/chinasemester.html
+http://www.cciwa.com/default.aspx?MenuID=1286
+http://www.ccjc.ca/archives/well3.cfm
+http://www.ccjc.ca/resources/fear.cfm
+http://www.ccky.org/Resources/Public%20Witness/Homily_Rev_Richard_Sullivan.htm
+http://www.ccli.com/WorshipResources/Articles.cfm?itemID=14
+http://www.ccm.uc.edu/prep/drama/classes/stage.html
+http://www.ccm.uc.edu/prep/registration/applied_study.html
+http://www.ccmep.org/2003_articles/Iraq/040403_dozens_of_iraqi_dead_after_clust.htm
+http://www.ccmep.org/2003_articles/Iraq/040603_deadly_choice_now_facing_badhdad.htm
+http://www.ccmep.org/hotnews/keepers013102.html
+http://www.ccmi.com/priceindex_0804.html
+http://www.ccmi.com/priceindex_0904.html
+http://www.ccmiservices.com/InTheNews/eprocurementnewdimensions.html
+http://www.ccmtutorials.com/infection/sepsisrx/page23.htm
+http://www.ccn.tv/ccnresources/technology.htm
+http://www.ccne-ethique.fr/english/avis/a_028.htm
+http://www.ccnphawaii.com/FAQ.htm
+http://www.ccnr.net/searchconf/loader.htm
+http://www.ccnr.org/Peaceful_Atom.html
+http://www.ccnr.org/briarpatch_mox.html
+http://www.ccny.cuny.edu/ctl/resource.html
+http://www.cco.caltech.edu/~gatti/gabaldon/writerscorner/writersadvice.html
+http://www.cco.caltech.edu/~ombuds/html/grad_index.html
+http://www.cco.net/~jpete/deepthou.htm
+http://www.cco.net/~watmarc/fdplan.htm
+http://www.ccohs.ca/oshanswers/hsprograms/workingalone.html
+http://www.ccohs.ca/oshanswers/hsprograms/workingalone.html?print
+http://www.ccohs.ca/oshanswers/phys_agents/cold_health.html
+http://www.ccohs.ca/oshanswers/psychosocial/aging_workers.html
+http://www.ccp14.ac.uk/solution/
+http://www.ccpit.org/vhosts/english/IV.htm
+http://www.ccpo.odu.edu/SEES/ozone/class/Chap_2/2_4.htm
+http://www.ccpo.odu.edu/SEES/ozone/class/Chap_4/4_5.htm
+http://www.ccptv.com/business.htm
+http://www.ccri.ca/rcn02-14.html
+http://www.ccri.edu/admissions/glossary.shtml
+http://www.ccriders.us/news.htm
+http://www.ccrkba.org/
+http://www.ccrkba.org/pub/rkba/press-releases/CC-CAlaw.htm
+http://www.ccrl.ca/index.php?id=205
+http://www.ccs.neu.edu/home/matthias/BTLS/preface.html
+http://www.ccs.neu.edu/home/ratinox/champions.html
+http://www.ccscne.org/for/committee/local/
+http://www.ccsf.edu/Services/LAC/lern10/listening.html
+http://www.ccshoreline.org/
+http://www.ccsindia.org/people_dl_nuclear.htm
+http://www.ccsj.edu/academics/syllabi/0102/012mfa150a.htm
+http://www.ccsj.edu/academics/syllabi/0102/012mfa150b.htm
+http://www.ccsj.edu/academics/syllabi/0304/033mfa150a.htm
+http://www.ccsj.edu/academics/syllabi/0405/041mfa150.htm
+http://www.ccsj.edu/academics/syllabi/0405/041mfa150lw.htm
+http://www.ccsn.nevada.edu/planetarium/PPA/DesertSkies/22ds-bowen.html
+http://www.ccso-ccom.ca/sara.html
+http://www.ccsso.org/projects/Interstate_New_Teacher_Assessment_and_Support_Consortium/Projects/Professional_Development_Academies/
+http://www.ccsu.edu/Afstudy/upd3-2.html
+http://www.ccsu.edu/afstudy/upd3-2.html
+http://www.ccsu.edu/afstudy/upd6-2.html
+http://www.ccsu.edu/afstudy/upd9-3.htm
+http://www.cctrail.org/CCT_Points.htm
+http://www.cctrust.org.uk/article5.htm
+http://www.cctv.com/program/bizchina/20040430/101706.shtml
+http://www.ccumc.org/exoffice/anrpts/945com.html
+http://www.ccutler.com/bands/group06.shtml
+http://www.ccvs.state.vt.us/pub_ed/lose.html
+http://www.ccvt.org/azizi.html
+http://www.cd.gov.ab.ca/preserving/parks/managing/managementplans.asp
+http://www.cd1019.com/contests/rules.aspx
+http://www.cda-adc.ca/english/dentistry_in_canada/cdac/default.asp
+http://www.cda-cdai.ca/misc/supportcda.htm
+http://www.cda-cdai.ca/seminars/2001/MND.htm
+http://www.cda.org/public/pubhsrvc.html
+http://www.cdauae.com/Epson%20Page.htm
+http://www.cdb.org/fennel.htm
+http://www.cdbaby.com/cd/ceyjay
+http://www.cdbaby.com/cd/royaljones2/from/musicdish
+http://www.cdbaby.com/dugan
+http://www.cdbaby.com/paulwall1
+http://www.cdbaby.net/articles/review-sales.htm
+http://www.cdbaby.net/dd?f=9
+http://www.cdc.gov/ChooseYourCover/guide.htm
+http://www.cdc.gov/HealthyYouth/physicalactivity/promoting_health/background.htm
+http://www.cdc.gov/communication/emergency/features/f001.htm
+http://www.cdc.gov/cvh/maps/cvdatlas/atlas_mens/01-foreword-toc.htm
+http://www.cdc.gov/diabetes/pubs/focus/step5.htm
+http://www.cdc.gov/doc.do/id/0900f3ec800908f9
+http://www.cdc.gov/drugresistance/community/
+http://www.cdc.gov/drugresistance/community/faqs.htm
+http://www.cdc.gov/elcosh/docs/d0200/d000288/d000288.html
+http://www.cdc.gov/elcosh/docs/d0600/d000626/module12.html
+http://www.cdc.gov/flu/avian/gen-info/facts.htm
+http://www.cdc.gov/mmwr/preview/mmwrhtml/00051435.htm
+http://www.cdc.gov/nasd/docs/d000001-d000100/d000048/d000048.html
+http://www.cdc.gov/nccdphp/dnpa/dnpalink.htm
+http://www.cdc.gov/nccdphp/dnpa/obesity/contributing_factors.htm
+http://www.cdc.gov/nccdphp/dnpa/physical/growing_stronger/exercises/
+http://www.cdc.gov/nccdphp/dnpa/physical/growing_stronger/intensity.htm
+http://www.cdc.gov/nccdphp/dnpa/physical/growing_stronger/staying_on_track.htm
+http://www.cdc.gov/nccdphp/dnpa/physical/health_professionals/
+http://www.cdc.gov/nccdphp/dnpa/physical/importance/why.htm
+http://www.cdc.gov/nccdphp/dnpa/physical/recommendations.htm
+http://www.cdc.gov/nccdphp/dnpa/physical/starting/stage_4.htm
+http://www.cdc.gov/nceh/kids/99kidsday/activities.htm
+http://www.cdc.gov/nchs/hphome.htm
+http://www.cdc.gov/nchstp/od/1997Surveillance_report.htm
+http://www.cdc.gov/nchstp/od/gap/strategies/2_3_blood_safety.htm
+http://www.cdc.gov/ncidod/EID/vol10no2/03-0799.htm
+http://www.cdc.gov/ncidod/EID/vol5no4/kortepeter.htm
+http://www.cdc.gov/ncidod/EID/vol5no4/olson.htm
+http://www.cdc.gov/ncidod/EID/vol8no10/02-0346.htm
+http://www.cdc.gov/ncidod/ar/hughes-fin.htm
+http://www.cdc.gov/ncidod/diseases/hepatitis/c/faq.htm
+http://www.cdc.gov/ncidod/dq/foreign.htm
+http://www.cdc.gov/ncidod/dq/qa_influenza_amendment_to_eo_13295.htm
+http://www.cdc.gov/ncidod/dvbid/jencephalitis/qa.htm
+http://www.cdc.gov/ncidod/dvbid/westnile/qa/insect_repellent.htm
+http://www.cdc.gov/ncidod/dvbid/westnile/qa/transfusion.htm
+http://www.cdc.gov/ncidod/eid/vol4no3/hopkins.htm
+http://www.cdc.gov/ncidod/eid/vol6no5/jelinek.htm
+http://www.cdc.gov/ncipc/factsheets/ipvactivities.htm
+http://www.cdc.gov/niosh/90-100.html
+http://www.cdc.gov/niosh/crane.html
+http://www.cdc.gov/niosh/enews/enewsV2N9.html
+http://www.cdc.gov/niosh/face/In-house/full200305.html
+http://www.cdc.gov/niosh/face/In-house/full200310.html
+http://www.cdc.gov/niosh/face/In-house/full9811.html
+http://www.cdc.gov/niosh/face/stateface/ak/99ak019.html
+http://www.cdc.gov/niosh/face/stateface/wv/01wv034.html
+http://www.cdc.gov/niosh/face/stateface/wy/92wy006.html
+http://www.cdc.gov/niosh/face9317.html
+http://www.cdc.gov/niosh/face9815.html
+http://www.cdc.gov/niosh/hotenvt.html
+http://www.cdc.gov/nip/publications/fs/gen/WhatIfStop.htm
+http://www.cdc.gov/nip/recs/adult-schedule.htm
+http://www.cdc.gov/nip/recs/child-schedule.htm
+http://www.cdc.gov/nip/vacsafe/
+http://www.cdc.gov/node.do/id/0900f3ec80006f95
+http://www.cdc.gov/od/oc/media/mmwrnews/n010216.htm
+http://www.cdc.gov/od/oc/media/mmwrnews/n020111.htm
+http://www.cdc.gov/od/oc/media/mmwrnews/n040326.htm
+http://www.cdc.gov/od/oc/media/mmwrnews/n040409.htm
+http://www.cdc.gov/od/oc/media/mmwrnews/n2k0728.htm
+http://www.cdc.gov/od/oc/media/presskits/conf/cvd.htm
+http://www.cdc.gov/od/oc/media/pressrel/fs040309b.htm
+http://www.cdc.gov/od/oc/media/pressrel/fs040402.htm
+http://www.cdc.gov/od/oc/media/pressrel/r011016.htm
+http://www.cdc.gov/od/oc/media/pressrel/r011016p.htm
+http://www.cdc.gov/od/oc/media/pressrel/r040401.htm
+http://www.cdc.gov/od/oc/media/transcripts/t020321.htm
+http://www.cdc.gov/od/oc/media/transcripts/t020418b.htm
+http://www.cdc.gov/od/oc/media/transcripts/t020509.htm
+http://www.cdc.gov/od/oc/media/transcripts/t020725.htm
+http://www.cdc.gov/od/oc/media/transcripts/t020919.htm
+http://www.cdc.gov/od/oc/media/transcripts/t021017.htm
+http://www.cdc.gov/od/oc/media/transcripts/t030313.htm
+http://www.cdc.gov/od/oc/media/transcripts/t030318.htm
+http://www.cdc.gov/od/oc/media/transcripts/t030321.htm
+http://www.cdc.gov/od/oc/media/transcripts/t030329.htm
+http://www.cdc.gov/od/oc/media/transcripts/t040701.htm
+http://www.cdc.gov/std/Syphilis/STDFact-Syphilis.htm
+http://www.cdc.gov/tobacco/sport_initiatives/facilitators_guide.htm
+http://www.cdc.gov/ulcer/consumer.htm
+http://www.cdc.gov/youthcampaign/research/resources.htm
+http://www.cdc.noaa.gov/Teleconnections/
+http://www.cdc.noaa.gov/coads/climar2/sst_recs.html
+http://www.cdc.noaa.gov/review/Chap02/sec4.html
+http://www.cdc.noaa.gov/review97/overview/chpt6/
+http://www.cdc.ubc.ca/AboutUs/DirectorsMessage.htm
+http://www.cde.ca.gov/be/ms/po/policy99-03-june1999.asp
+http://www.cde.ca.gov/be/st/ss/daglossary.asp
+http://www.cde.ca.gov/be/st/ss/engglossary.asp
+http://www.cde.ca.gov/be/st/ss/scearth.asp
+http://www.cde.ca.gov/fg/fo/r5/ca04cov.asp
+http://www.cde.state.co.us/libnewsletter/sllevel1.htm
+http://www.cde.state.co.us/utility/privacy.htm
+http://www.cdera.org/cunews/news/cayman/article_673.php
+http://www.cdesign.com.au/aate/aate_papers/087_misson.htm
+http://www.cdf.org/7_2_index/acela/acela.html
+http://www.cdfe.org/esa_reform1.htm
+http://www.cdfe.org/wasley.htm
+http://www.cdfohio.org/movement_lncb/the_movement/default.asp
+http://www.cdfreaks.com/article/211/5
+http://www.cdhalton.ca/dispatch/cd0501.htm
+http://www.cdi.anu.edu.au/research_publications/research_LosingControl_2000htm.htm
+http://www.cdi.org/adm/1307/Gurr.html
+http://www.cdi.org/adm/1307/transcript.html
+http://www.cdi.org/adm/1351/transcript.html
+http://www.cdi.org/adm/636/
+http://www.cdi.org/adm/Transcripts/821/
+http://www.cdi.org/blair/launch-on-warning.cfm
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=1468
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=2032
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=2033
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=2272
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=2553
+http://www.cdi.org/friendlyversion/printversion.cfm?documentID=2568
+http://www.cdi.org/program/document.cfm?documentid=2568&programID=84&from_page=../friendlyversion/printversion.cfm
+http://www.cdi.org/russia/234-7.cfm
+http://www.cdi.org/russia/johnson/1089.html
+http://www.cdi.org/russia/johnson/8305-21.cfm
+http://www.cdi.org/russia/johnson/9125-6.cfm
+http://www.cdjapan.co.jp/help/product_info.html
+http://www.cdls.org.uk/background/april2001/back2.htm
+http://www.cdlsusa.org/publications/reachingout/archive/facing-up-to-the-behavior-challenge.html
+http://www.cdma.mod.uk/jsp329/dm4a.htm
+http://www.cdma.mod.uk/jsp329/dm6b.htm
+http://www.cdn-friends-icej.ca/antiholo/cantisem.html
+http://www.cdnfilmcentre.com/training/newmedia.html
+http://www.cdnn.info/industry/i040709b/i040709b.html
+http://www.cdnsba.org/issues/innovation.htm
+http://www.cdp.org.au/fed/mr/1998/981015.asp
+http://www.cdr.state.tx.us/Students/FeaturedCareer/TXCARESfeature_2003-07_LVN.html
+http://www.cdra.org.za/nuggets/If%20you%20meet%20the%20White%20Rabbit%20on%20the%20road,%20steal%20his%20watch!%20-%20by%20Doug%20Reeler%20-%20March%202003%20CDRA%20Nugget.htm
+http://www.cdra.org.za/nuggets/Listening%20at%203%20Levels%20-%20Nugget%20-%20%20October%202003%20CDRA%20Nugget.htm
+http://www.cdrcp.com/ccip_tip_rwi.html
+http://www.cdrecycler.com/categories/detail.asp?SubCatID=111&CatID=22
+http://www.cdrfaq.org/faq01.html
+http://www.cdrinfo.com/Sections/News/Details.aspx?NewsId=11839
+http://www.cdrinfo.com/Sections/News/Details.aspx?NewsId=13760
+http://www.cdrom-businesscard.co.uk/content/specials.phtml
+http://www.cdsgi.com/GeneralTerms.htm
+http://www.cdss.org/sales/american_dance.html
+http://www.cdss.org/sales/english_dance.html
+http://www.cdt.org/
+http://www.cdt.org/copyright/
+http://www.cdt.org/dns/icann/020503ceir.shtml
+http://www.cdt.org/publications/pp_5.1.html
+http://www.cdt.org/publications/pp_7.06.shtml
+http://www.cdt.org/security/usapatriot/030520cdt.shtml
+http://www.cdt.org/security/usapatriot/031027cdt.shtml
+http://www.cdt.org/testimony/030304morris.shtml
+http://www.cdt.org/testimony/20040323berman.shtml
+http://www.cdtcmpo.org/rtp2030/qualreg.htm
+http://www.cdtl.nus.edu.sg/brief/V7n7/sec5.htm
+http://www.cdtl.nus.edu.sg/brief/v5n3/default.htm
+http://www.cdtl.nus.edu.sg/ctp/literarystudies.htm
+http://www.cdtl.nus.edu.sg/link/nov2003/cover.htm
+http://www.cdtl.nus.edu.sg/tawards/tawards.htm
+http://www.cdtm.de/index.php?id=304
+http://www.cduniverse.com/productinfo.asp?pid=5618190&style=music&frm=lk_itchy
+http://www.cduniverse.com/search/xx/games/pid/6870393/a/Modern+Air+Combat:+Lock+on+Gold.htm
+http://www.cduniverse.com/search/xx/music/pid/1107874/a/Greatest+Hits.htm
+http://www.cduniverse.com/search/xx/music/pid/1430927/a/Wo+Ist+Zuhause+Mama.htm
+http://www.cduniverse.com/search/xx/music/pid/3012906/a/Every+Road+Leads+Back+To+You.htm
+http://www.cduniverse.com/search/xx/music/pid/4983042/a/W.O.+Techno+V.6.htm
+http://www.cduniverse.com/search/xx/music/pid/6097287/a/Wings+To+Walk+This+Road.htm
+http://www.cduniverse.com/search/xx/music/pid/6816035/a/Road+Island.htm
+http://www.cdymca.org/branches/chingachgook/sumjobs.htm
+http://www.ce-pro.com/default.asp?NodeID=2946
+http://www.ce.columbia.edu/_Syllabus.cfm?prmID=709
+http://www.ce.columbia.edu/alp/regs.cfm
+http://www.ce.msstate.edu/envr/safety.html
+http://www.ce.umn.edu/~smith/supplements/staq/supnotes6.html
+http://www.ce9.uscourts.gov/Web/OCELibra.nsf/0/ed8849928d18f21988256730007ffe14?OpenDocument
+http://www.ceaa-acee.gc.ca/012/atk_e.htm
+http://www.cebe.ltsn.ac.uk/news/events/sc2/programme.html
+http://www.cebik.com/amod/amod37.html
+http://www.cebik.com/yagi/beam1.html
+http://www.cebrooks.com/representative.htm
+http://www.cec.org/news/details/index.cfm?varlan=english&ID=2441
+http://www.cecarf.org/PressReleases/TransForumPressReleaseFinal.html
+http://www.cecaust.com.au/main.asp?sub=mobilisations/nbw&id=nbw23_05_2005.html
+http://www.cecc.gov/pages/virtualAcad/exp/exptinkerdecision.php
+http://www.cecunc.org/business/ten/businessplans.html
+http://www.cecunc.org/marketing/pc/ad-checklist.html
+http://www.cecwellington.ac.nz/fitness.htm
+http://www.cecwellington.ac.nz/transport.htm
+http://www.ced.com/ced/cedweb3.nsf/0/77707dfc158f0c3086256b56006436f1?OpenDocument
+http://www.cedarbuilt.com/difference.html
+http://www.cedarland.org/black.html
+http://www.cedarlane.org/whodoeswhat.html
+http://www.cedarpark.org/LeadersDay/Leaders_Day_2002.htm
+http://www.cedartubs.com/tub-talk-04-010.html
+http://www.cedmagazine.com/cedailydirect/0903/cedaily030923.htm
+http://www.cee-foodindustry.com/nl/allNLs.asp
+http://www.ceekay.com/
+http://www.ceenet.org/ceenet_cbyc_anicaee.html
+http://www.cefas.co.uk/fishinfo/Surveys.htm
+http://www.cefas.co.uk/fishinfo/gadus_morhua.htm
+http://www.cefi.org/STAGES/G_CHAP4.HTM
+http://www.cefpi.org/atlanta2004/
+http://www.cefpi.org/issue1.html
+http://www.cefpi.org/issue2.html
+http://www.cehn.org/cehn/cccehpressrelease.html
+http://www.cei.org/gencon/005,04304.cfm
+http://www.cei.org/gencon/019,03784.cfm
+http://www.ceid.upatras.gr/faculty/peter/cv.php
+http://www.ceintl.com/products/animation-wp3.html
+http://www.ceip.org/files/Publications/2004-02-03-MichaelSwaine-TroubleInTaiwan.asp?from=pubdate
+http://www.ceip.org/files/nonprolif/templates/article.asp?NewsID=4379
+http://www.celebagents.co.uk/html/mike_reid.html
+http://www.celebratelove.com/jeffglaze4.htm
+http://www.celebratingpeace.com/Peacemakers.htm
+http://www.celebritycookware.com/fdm300.html
+http://www.celebritymoviearchive.com/tour/whatshot.php/4
+http://www.celestica.com/investor/historicalindex.cfm?Act=HFQ299_MDA
+http://www.celestica.com/investor/historicalindex.cfm?Act=HFQ498_MDA
+http://www.cellhealthmakeover.com/skin.html
+http://www.cellml.org/private/progress_reports/20040430_meeting_minutes.html
+http://www.cello.org/heaven/bios/coleap.htm
+http://www.cellofpeace.com/cp_method.htm
+http://www.cellular.co.za/option_fifo.htm
+http://www.celluloid-wisdom.com/pw/index.php?/weblog/entry/scenes_from_my_driveway_continued_x_37/
+http://www.celluloid-wisdom.com/pw/washtimes.html
+http://www.celsatlife.com/Cels-CentreofExcellenceforLifeSciences-WhereBiosciencemeansBusiness.htm
+http://www.celt.dias.ie/english/tionol/synop01.html
+http://www.celtic-manor.com/activities/
+http://www.celtic-nation.com/
+http://www.celticmalts.com/journal-a8.htm
+http://www.celticmalts.com/journal-f1.htm
+http://www.cem.msu.edu/~reusch/VirtualText/react3.htm
+http://www.cema-converting.org/industry/story.asp?RECORD_KEY=ID&ID=351
+http://www.cen-chemjobs.org/employer/chemhr/July02/salarybenchpr.html
+http://www.cen-chemjobs.org/jobseeker/articles/industrialrecruiting.html
+http://www.censa.net/Publications_Passing_The_Torch.asp
+http://www.census.gov/Press-Release/www/2001/raceqandas.html
+http://www.census.gov/Press-Release/www/releases/archives/income_wealth/002484.html
+http://www.census.gov/foreign-trade/Press-Release/current_press_release/ftdpress.txt
+http://www.census.gov/foreign-trade/schedules/b/2004/sb20.html
+http://www.census.gov/foreign-trade/schedules/b/2005/c20.html
+http://www.census.gov/ipc/www/wp96glos.html
+http://www.census.gov/popest/archives/challenges.html
+http://www.census.gov/population/www/socdemo/workathome.html
+http://www.censusindia.net/census2001/history/censusobjectives.html
+http://www.centacs.com/how_to_learn.htm
+http://www.centar-za-mir.hr/engaktivnostiold1.php
+http://www.centaur.co.uk/communities/creative/dw/advertising.aspx
+http://www.centcom.mil/operations/coalition/Coalition_pages/canada.htm
+http://www.centenarystageco.org/07Education/actingclasses.htm
+http://www.centennialofflight.gov/2003FF/primary1.html
+http://www.centennialofflight.gov/essay/Government_Role/1930-airmail/POL6.htm
+http://www.centennialofflight.gov/essay/Prehistory/Cayley/PH2.htm
+http://www.centennialofflight.gov/essay/SPACEFLIGHT/ASTP/SP24.htm
+http://www.centennialofflight.gov/essay/SPACEFLIGHT/soviet_human/SP20.htm
+http://www.centennialofflight.gov/essay/SPACEFLIGHT/soviet_stations/SP22.htm
+http://www.centennialofflight.gov/essay/Theories_of_Flight/TH-OV.htm
+http://www.center.rpi.edu/GranGuid.html
+http://www.center.rpi.edu/PewGrant/RD2%20Award/UMApr1.html
+http://www.center.rpi.edu/PewSym/mono4.html
+http://www.center4nursing.org/education4.htm
+http://www.centerforbookculture.org/context/no14/simpleQ.html
+http://www.centerforbookculture.org/dalkey/backlist/cerf.html
+http://www.centerforbookculture.org/interviews/interview_wallace.html
+http://www.centerforhistory.org/james_oliver.html
+http://www.centerforloss.com/catalog/productdetails.asp?WhichProduct=100
+http://www.centerforloss.com/catalog/productdetails.asp?WhichProduct=13
+http://www.centerforpharmacy.com/resources/reimbursement_tool/reimburse_APC.htm
+http://www.centerforpi.com/BModcourse.htm
+http://www.centerforpolitics.org/crystalball/2004/house/?state=TX
+http://www.centerforpolitics.org/crystalball/article.php?id=LJS2004101201
+http://www.centeronline.org/knowledge/aboutJAL.cfm
+http://www.centerpointe.com/index.php?page=newsletter
+http://www.centerpointe.com/index.php?page=product&sub_page=holosync
+http://www.centerslo.net/l4.asp?L1_ID=31&L2_ID=13&L3_ID=111
+http://www.centervalleyclubgolf.com/outings.php
+http://www.central-city.net/parking.php
+http://www.centralassembly.org/default.aspx?pid=26
+http://www.centralbank.gov.cy/nqcontent.cfm?a_id=660&lang=en
+http://www.centralbank.ie/abt_goviss.asp
+http://www.centralbank.ie/nws_article.asp?ID=92
+http://www.centralbankmalta.com/site/currency2a.html
+http://www.centralcal.com/christ6a.htm
+http://www.centralcityhotel.com/
+http://www.centralconnector.com/GAMES/bocce.html
+http://www.centralequity.com.au/faqs.asp
+http://www.centralmanclc.com/docs/userguide.htm
+http://www.centralohio.com/ohiostate/stories/20020921/football/128896.html
+http://www.centralohioansforpeace.org/FirstYear.asp
+http://www.centralpark.org/guest/guestbook.html
+http://www.centralpark.org/guest/guestbook2000.html
+http://www.centralparknyc.org/thenandnow/partnership/contract
+http://www.centralpt.com/pageview.aspx?menu=1102&id=3837
+http://www.centralsmt.co.uk/the_car_reigns_supreme.htm
+http://www.centralspeechandhearingclinic.com/cshc_Clinic_Staff.htm
+http://www.centralvabank.com/presidents.html
+http://www.centre4activeliving.ca/Research/ResearchUpdate/1995/WellBeing_sept_95.htm
+http://www.centre4artsboca.com/PGE_HowTo.asp
+http://www.centredaily.com/mld/centredaily/2772373.htm
+http://www.centreforenergy.com/displayNewsArticle.asp?From=Sector&template=2,2&NewsID=4427058&ResultCategoryType=2,3&NewsPageID=3
+http://www.centrelink.gov.au/internet/internet.nsf/news_room/vardon98guidingcoalition.htm
+http://www.centrica.co.uk/files/presentations/prelim02/q_a/trans4.htm
+http://www.centrinet.com/christmas/party_games.htm
+http://www.centristcoalition.com/blog/archives/002218.html
+http://www.centrixfinancial.com/financialinstitutions/
+http://www.centroditerapiastrategica.org/network%20journal.htm
+http://www.centropa.org/reports.asp?rep=&ID=6864&TypeID=0
+http://www.centurionenergy.com/s/NewsReleases.asp?ReportID=64362&_Title=Activity-Update
+http://www.centurions.org.uk/ladies.html
+http://www.century-bank.com/business/businessfee.cfm
+http://www.century-of-flight.freeola.com/Aviation%20history/airplane%20at%20war/nocturnal%20defence.htm
+http://www.century21.com.au/lifeathome/lifeathome.cfm?life_id=111
+http://www.centurytel.com/about/companyProfile/companyTimeline.cfm
+http://www.ceoforum.com.au/200109_remuneration.cfm
+http://www.ceoforum.com.au/200112_leadership.cfm
+http://www.ceoforum.com.au/200302_ceoleisure.cfm
+http://www.ceoforum.com.au/200303_remuneration.cfm
+http://www.ceolas.org/artists/Quick_Takes.html
+http://www.ceoonline.com.au/content/expert_talk/sales_marketing
+http://www.cep.aq/default.asp?casid=5074
+http://www.cep.unep.org/issues/lbsp.html
+http://www.cep.unep.org/issues/lbsp.php
+http://www.cephas-library.com/catholic/catholic_vatican_in_world_politics_chpt_1.html
+http://www.cepr.net/columns/baker/ceopay.htm
+http://www.cepr.net/err/nytimesarticles/2005_05_20euro.html
+http://www.cepr.net/professional_supplement.htm
+http://www.cepr.net/publications/ANWR.htm
+http://www.cepr.net/publications/medicare_choice_plus.htm
+http://www.cepr.org/meets/wkcn/misc/notes_for_claimants.htm
+http://www.cepr.org/pubs/EEP/articles/Realappr.htm
+http://www.cepr.org/search/howto/search.htm
+http://www.ceps.be/wp.php?article_id=423
+http://www.ceptualinstitute.com/genre/benking/UN-climate.htm
+http://www.ceptualinstitute.com/genre/benking/overview.htm
+http://www.ceptualinstitute.com/genre/strickreveal.htm
+http://www.cer.org.uk/articles/speech_barroso_17march05.html
+http://www.cer.org.uk/articles/speech_hoon01july04.html
+http://www.cer.org.uk/defence/
+http://www.ceramicindustry.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2710,114129,00.html
+http://www.ceramicindustry.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2710,11588,00.html
+http://www.ceramicindustry.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2710,8356,00.html
+http://www.ceramicindustry.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2710,96037,00.html
+http://www.cerebellum.com/pls/brain/cerebellum.home
+http://www.cerebusfangirl.com/artists/space03.html
+http://www.cereconline.com/ecomaXL/index.php?site=CEREC_January_2005_Office_of_the_Month
+http://www.cerge-ei.cz/events/roundtab/
+http://www.ceri.com/ed-fda.htm
+http://www.cerkit.com/cerkitBlog/CommentView,guid,219df46d-96ea-47ed-b744-0a12024dfb04.aspx
+http://www.cerncourier.com/articles/cnl/2/6/11/1
+http://www.cert.org/congressional_testimony/Pethia_testimony_06-25-03.html
+http://www.cert.org/congressional_testimony/pethia-11-02/Pethia_testimony_11-19-02.html
+http://www.cert.org/reports/dsit_workshop-final.html
+http://www.cert.org/security-improvement/implementations/i018.01.html
+http://www.certifiedarchivists.org/html/archivalprof.html
+http://www.certoffice.org/pages/index.cfm?pageID=whatsnew
+http://www.certtutor.net/
+http://www.ces.ncsu.edu/bladen/EHhomepg.html
+http://www.ces.ncsu.edu/depts/fcs/NEPEF/embrace/embrace.htm
+http://www.ces.ncsu.edu/depts/fcs/human/disas4.html
+http://www.ces.ncsu.edu/depts/fcs/smp9/imageh.htm
+http://www.ces.ncsu.edu/depts/hort/hil/hil-641.html
+http://www.ces.ncsu.edu/hil/hil-8205.html
+http://www.ces.ncsu.edu/nreos/forest/woodland/won-20.html
+http://www.ces.ncsu.edu/nreos/forest/xmas/growing/ag95-IV.htm
+http://www.ces.ncsu.edu/nreos/wild/wildlife/wdc/beavers.html
+http://www.ces.purdue.edu/extmedia/EC/EC-674.html
+http://www.ces.sdsu.edu/creditnocredit.html
+http://www.ces.sdsu.edu/satsems.html
+http://www.cesa.org.uk/conference2003Report.asp
+http://www.cesew.org.uk/news/guidance/04_edskillsdelresults.htm
+http://www.cesnur.org/testi/McPherson.htm
+http://www.cesnur.org/testi/bryn/chen_cook.htm
+http://www.cesnur.org/testi/panic.htm
+http://www.cetconnect.org/geozone/lesson.html
+http://www.cete.org/acve/textonly/docgen.asp?tbl=digests&ID=116
+http://www.cetis.ac.uk/content2/20040724101134
+http://www.cetis.ac.uk/content2/20040724101134/printArticle
+http://www.cetonline.org/AboutCET/hampshire_gazette.htm
+http://www.ceu-net.org/id17_m.htm
+http://www.ceupress.com/books/html/CarryingASecret.html
+http://www.ceutt.org/CEUTTx98.htm
+http://www.cf.ac.uk/hisar/archaeology/reports/hebrides99/TheFaunalRemains.html
+http://www.cf.ac.uk/hisar/history/postgrad.htm
+http://www.cf.adfg.state.ak.us/region2/finfish/salmon/pws/pwsfor05.php
+http://www.cfa.com/Statistics/2000_survey_highlights.htm
+http://www.cfa.gov/meetings/archive/2005/june/appendices/20050616og.html
+http://www.cfa.gov/meetings/archive/2005/may/appendices/20050519og.html
+http://www.cfa.gov/print/meetings/archive/2005/may/appendices/20050519og.html
+http://www.cfa.org/registration-rules.html
+http://www.cfac.org/AGOpinions/opinion_62_658.html
+http://www.cfah.org/factsoflife/vol6no5.cfm
+http://www.cfainc.org/articles/why-not-coerce.html
+http://www.cfainstitute.org/pressroom/fjnews/fjMay02.html
+http://www.cfapubs.org/shared/topical_2.html
+http://www.cfb.ie/fisheries_protection/salmon_tagging/
+http://www.cfbnews.com/mac/Ball_State.htm
+http://www.cfc-efc.ca/docs/cccf/00000065.htm
+http://www.cfcf.ca/cfcf/happening/takeone
+http://www.cfcl.com/cfcl/vlb/Cuute/Questionaires/aspects_of_myself.html
+http://www.cfdonline.org/afterthefire.htm
+http://www.cfdp.ca/sen2000.htm
+http://www.cfe-eutax.org/Activities/frames_activities/european_reports/2005_06.html
+http://www.cff.org/Action/act_GetContent.cfm?ID=4990&FILE=LungTransplant11-04Final.pdf&TYPE=1208
+http://www.cfhs.ca/CriminalCode/analysis.htm
+http://www.cfif.org/htdocs/freedomline/current/in_our_opinion/oil_for_osama.htm
+http://www.cfit.gov.uk/foi/0501mf.htm
+http://www.cfit.gov.uk/mf/reports/roadsafety/ucl/a5.htm
+http://www.cfit.gov.uk/reports/physical/02.htm
+http://www.cfit.gov.uk/reports/regionaltransport/04.htm
+http://www.cfit.gov.uk/research/10year/mms/01.htm
+http://www.cfit.gov.uk/research/psbi/faber/ab.htm
+http://www.cflogic.com/Hotspot2.htm
+http://www.cflri.ca/cflri/pa/surveys/99survey/99survey.html
+http://www.cfmeu.asn.au/national/int_issues/20011203_Activism.html
+http://www.cfo.com/article.cfm/3003600?f=related
+http://www.cfo.com/article.cfm/3006170/3/c_3046580?f=insidecfo
+http://www.cfo.com/article.cfm/3012533?f=archives
+http://www.cfo.com/printable/article.cfm/3010827?f=options
+http://www.cfo.com/printable/article.cfm/3013301?f=options
+http://www.cfo.com/printable/article.cfm/4007442?f=options
+http://www.cfo.com/printable/article.cfm/4055146?f=options
+http://www.cfoasia.com/_rc_treasury.htm
+http://www.cfoasia.com/archives/200001-55.htm
+http://www.cfoasia.com/archives/200204-03.htm
+http://www.cfoasia.com/archives/200210-06.htm
+http://www.cfoasia.com/archives/200303-05.htm
+http://www.cfoasia.com/archives/200309-01.htm
+http://www.cfoasia.com/archives/200407-07.htm
+http://www.cfoeurope.com/displayStory.cfm/1736250
+http://www.cfoeurope.com/displayStory.cfm/1736562
+http://www.cfoeurope.com/displaystory.cfm/1736284/l_print
+http://www.cfoi.org.uk/blairltr191198.html
+http://www.cfoproject.com/solutions.asp?sID=278&n=Business+Intelligence
+http://www.cfoproject.com/solutions.asp?sID=280&n=Electronic+Payments
+http://www.cfoproject.com/solutions.asp?sID=281&n=ERP
+http://www.cfoproject.com/solutions.asp?sID=282&n=Financial+Operations
+http://www.cfoproject.com/solutions.asp?sID=339&n=Regulation+and+Compliance
+http://www.cfoproject.com/solutions.asp?sID=342&n=Shareholder+Value
+http://www.cfoproject.com/solutions.asp?sID=343&n=Financial+Tools
+http://www.cforl.org.uk/aboutus/IntroPack/Intropack_2.asp
+http://www.cfoweb.com.au/freearticle.aspx?relId=14278
+http://www.cfp.net/teamup/cetools.asp
+http://www.cfpc.ca/English/cfpc/programs/patient%20education/activity%20heart%20attack/default.asp?s=1
+http://www.cfpc.ca/English/cfpc/programs/patient%20education/anemia/default.asp?s=1
+http://www.cfpc.ca/English/cfpc/programs/patient%20education/constipation/default.asp?s=1
+http://www.cfpc.ca/English/cfpc/programs/patient%20education/smoking/default.asp?s=1
+http://www.cfpc.ca/cfp/2002/Feb/vol48-feb-editorials-1.asp
+http://www.cfpeople.org/Apologetics/page51a085.html
+http://www.cfpf.org.uk/articles/mediums/rose.html
+http://www.cfpsa.com/en/deployed/jobs/index.asp
+http://www.cfr.org/background/northkorea_japan.php
+http://www.cfr.org/background/trade_jobs.php
+http://www.cfr.org/pub3857/richard_bitzinger/problems_and_prospects_facing_secondtier_armsproducing_states_in_the_postcold_war_era_a_comparative_assessment.php
+http://www.cfr.org/pub5562/david_g_victor/nuclear_energy_not_oil_should_fuel_usrussian_ties.php
+http://www.cfr.org/pub6576/john_f_kerry/making_america_secure_again_setting_the_right_course_for_foreign_policy.php
+http://www.cfr.org/pub7203/zbigniew_brzezinski_robert_m_gates_lee_feinstein_suzanne_maloney/iran_time_for_a_new_approach_an_independent_task_force_on_us_policy_toward_iran.php
+http://www.cfr.washington.edu/internal/Facstaff/CFR%20Leave%20Policy%20Post.htm
+http://www.cfsan.fda.gov/~dms/admehg3.html
+http://www.cfsan.fda.gov/~dms/fdalead.html
+http://www.cfsan.fda.gov/~dms/prodques.html
+http://www.cfsan.fda.gov/~furls/cpgreg.html
+http://www.cfsan.fda.gov/~furls/cpgreg2.html
+http://www.cfsan.fda.gov/~pn/pnqaguid.html
+http://www.cfsan.fda.gov/~pn/pnsiqa.html
+http://www.cfsdoc.org/good_fats.htm
+http://www.cfsfibromyalgia.com/
+http://www.cfsloans.com/en/AboutCFS/PressReleases/news100404.htm
+http://www.cfsuo.forces.gc.ca/booklet/intro_e.asp
+http://www.cftc.gov/opa/speeches/opadial-55.htm
+http://www.cftc.gov/opa/speeches04/opanewsm-49.htm
+http://www.cftl.org/initiatives_TDRDC_KC_JS.php
+http://www.cfxcreative.com/news_june01.html
+http://www.cga.ct.gov/asp/cgabillstatus/cgabillstatus.asp?selBillType=Bill&bill_num=343&which_year=2004
+http://www.cga.ct.gov/pri/archives/1999sbfinalreport1overview.htm
+http://www.cgal.org/Manual/doc_html/cgal_manual/Optimisation/Chapter_main.html
+http://www.cgap.org/direct/docs/donor_briefs/db_08.php
+http://www.cgarchitect.com/vb/showthread.php?t=8501&page=1
+http://www.cgernon.com/sptf/care.htm
+http://www.cgfi.org/materials/speeches/nutrients_gone.htm
+http://www.cgh.com.sg/public/caring/issue65/pulse.html
+http://www.cgibin.ncsu.edu/ced-bin/article.pl?a=200407071
+http://www.cgiphils.org/literature/armor/canscience/canscience.htm
+http://www.cgjungpage.org/talk/showthread.php?t=3693&page=3&pp=10
+http://www.cgl.ucsf.edu/chimera/docs/ContributedSoftware/render/render.html
+http://www.cgl.uwaterloo.ca/~rhbartel/
+http://www.cgonline.com/
+http://www.cgp.org/index.php?option=article&task=default&articleid=132&id=4
+http://www.cgpl.org/
+http://www.cgps.org/view_page.php?Current_Section=5&Current_SubSection=2
+http://www.cgtalk.com/archive/index.php/f-7-p-40.html
+http://www.cgtalk.com/archive/index.php/t-198342.html
+http://www.cgtalk.com/archive/index.php/t-221897.html
+http://www.cgtalk.com/archive/index.php/t-58274.html
+http://www.cgtalk.com/showthread.php?t=205236
+http://www.cgtd.com/global/directory/veconomy.htm
+http://www.ch2bc.org/index11.htm
+http://www.ch2m.com/corporate_2004/Services/Sectors/Transportation/PM_transportation.asp
+http://www.cha.uga.edu/bjc/pursuit.htm
+http://www.chacocanyon.com/essays/whattodo.shtml
+http://www.chacocanyon.com/pointlookout/031008.shtml
+http://www.chacocanyon.com/pointlookout/040526.shtml
+http://www.chacocanyon.com/pointlookout/041103.shtml
+http://www.chaddesley-corbett.co.uk/ringers.htm
+http://www.chaffeezoo.org/animals/bateleurEagle.html
+http://www.chain.net.cn/aidsenglish/aboutus/activities.htm
+http://www.chaindlk.com/reviews/index.php?type=music&category=7
+http://www.chainreaction.com/canada_road.htm
+http://www.challies.com/archives/000569.php
+http://www.challies.com/archives/000632.php
+http://www.chally.com/hiring-mistakes.htm
+http://www.challzine.net/17/17utopia.html
+http://www.cham-ministry.org/ministry/women/lakota1.html
+http://www.chamber.org.hk/info/the_bulletin/dec2001/legco.asp
+http://www.champaign.org/whatshappening/adult_programs.html
+http://www.champaignschools.org/
+http://www.championpersonnel.com/salary_guide.html
+http://www.championtrees.org/forests5.htm
+http://www.championtrees.org/yarrow/snakeoil.htm
+http://www.chan1.org/activities.html
+http://www.chan1.org/activities_0712.html
+http://www.chanceandchoice.com/ChanceandChoice/chapter7.html
+http://www.change-management-toolbook.com/tools/systems.html
+http://www.changemakers.net/journal/02may/sen.cfm
+http://www.changethatsrightnow.com/problem_detail.asp?SDID=1084:1784
+http://www.changingchannels.org/
+http://www.changingcourse.com/archives/issue22.htm
+http://www.changingfaces.co.uk/staring.html
+http://www.changingourworld.com/
+http://www.changingourworld.com/news4.html
+http://www.changingourworld.com/news5.html
+http://www.changingourworld.com/news9.html
+http://www.channel-e.com.my/wps/portal/!ut/p/.scr/channele_securitypolicy
+http://www.channel3000.com/money/3596979/detail.html
+http://www.channel4.com/4car/road-tests/C/citroen/c3pluriel03-/c3pluriel03--comequipt.html
+http://www.channel4.com/4homes/buyingabroad/features/foreign_finance.html
+http://www.channel4.com/community/showcards/0-9/10_Years_Younger.html
+http://www.channel4.com/culture/microsites/B/believeitornot/bornagain2.html
+http://www.channel4.com/culture/microsites/B/believeitornot/bornagain2_t.html
+http://www.channel4.com/culture/microsites/T/thinktv/comments/0105_waac.html
+http://www.channel4.com/entertainment/games/submit-terms-and-conditions.html
+http://www.channel4.com/entertainment/tv/microsites/D/dating/therapy_2.html
+http://www.channel4.com/entertainment/tv/microsites/R/richardandjudy/keep4archive/useful.html
+http://www.channel4.com/entertainment/tv/microsites/R/richardandjudy/regular_features/summer_read_05.html
+http://www.channel4.com/health/microsites/0-9/4health/sex/sar_lovehurts.html
+http://www.channel4.com/health/microsites/0-9/4health/sex/sar_talking.html
+http://www.channel4.com/health/microsites/0-9/4health/teenlife/rel_jealousy.html
+http://www.channel4.com/health/microsites/F/family/baby/ivf.html
+http://www.channel4.com/health/microsites/F/family/parenting/disabled.html
+http://www.channel4.com/history/microsites/H/history/a-b/blackdeath.html
+http://www.channel4.com/history/microsites/H/history/n-s/stone3.html
+http://www.channel4.com/history/timeteam/archive/timeteamlive99/glossary.html
+http://www.channel4.com/learning/main/netnotes/sectionid100663980.htm
+http://www.channel4.com/learning/main/netnotes/sectionid100665559.htm
+http://www.channel4.com/learning/microsites/B/brickingit/training/job_profiles_c2.html
+http://www.channel4.com/life/microsites/R/racism/language/
+http://www.channel4.com/science/microsites/S/science/medicine/humanclone.html
+http://www.channelbeat.com/products/dance/dance_maniax___dance_freaks_series/90.html
+http://www.channelnewsasia.com/stories/afp_asiapacific/view/154092/1/.html
+http://www.channelnewsasia.com/stories/afp_world/view/80951/1/.html
+http://www.channelnewsasia.com/stories/afp_world_business/view/127084/1/.html
+http://www.chanrobles.com/aquinoexecutiveorderno270.htm
+http://www.chantwest.com.au/cwPublic.aspx?MenuItemID=206
+http://www.chaosmailorder.com/stories/warhammer40k/battle/assult_on_gelbryn.php
+http://www.chapel-hill.nc.us/apioa/funstuff.htm
+http://www.chapinsc.com/
+http://www.chaplog.co.uk/blog/index.php?cat=6
+http://www.chapmantripp.co.nz/resource_library/published_article.asp?id=2634
+http://www.chapters.indigo.ca/default.asp?N=35+528484&Section=Books&Catalog=&Lang=en&zxac=1
+http://www.chapters.indigo.ca/default.asp?N=43+528484&Section=Kids&Catalog=&Lang=en&zxac=1
+http://www.chapters.indigo.ca/default.asp?N=43+528484+321131&Section=kids&Catalog=&Lang=en&zxac=1
+http://www.character-shop.com/
+http://www.charactercounts.org/booklist1.htm
+http://www.charactercounts.org/knxwk350.htm
+http://www.charactercounts.org/sports/accord.htm
+http://www.charactercounts.org/sports/gameplan.htm
+http://www.charactercounts.org/sports/team-approach.htm
+http://www.charactered.net/parent/parenttwenty.asp
+http://www.charakclinics.com/2005_01_01_archiveblogs.htm
+http://www.charity-commission.gov.uk/investigations/inquiryreports/whit.asp
+http://www.charity-commission.gov.uk/publications/cc38.asp
+http://www.charity-commission.gov.uk/publications/rs9.asp
+http://www.charity-commission.gov.uk/registeredcharities/rorfaq.asp
+http://www.charity-commission.gov.uk/spr/nopweb.asp
+http://www.charity-commission.gov.uk/tcc/ccnews8.asp
+http://www.charitygift.com/docs/about_us/letter.jsp
+http://www.charitynavigator.org/index.cfm/bay/content.view/catid/2/cpid/35.htm
+http://www.charitynavigator.org/index.cfm/bay/content.view/catid/3/cpid/28.htm
+http://www.charitynavigator.org/index.cfm/bay/content.view/catid/3/cpid/28/print/1.htm
+http://www.charitytimes.com/pages/features/feature%20archive/thecashincentive.htm
+http://www.charlatans.8k.com/
+http://www.charlesbiederman.net/noteworthy.html
+http://www.charlescityia.com/Assist/txtassist.html
+http://www.charlesedwin.com/rdbrms.htm
+http://www.charleshudson.net/weblog/
+http://www.charlesives.org/02bio.htm
+http://www.charleskennedy.org.uk/article190601.htm
+http://www.charleskennedy.org.uk/article290204.htm
+http://www.charleslindbergh.com/history/index.asp
+http://www.charleslipson.com/
+http://www.charlespetzold.com/pwcs/typos.html
+http://www.charlesriverrc.org/articles/flying/joewurts_xcattempt.htm
+http://www.charlestheclown.com/hospital.htm
+http://www.charlierose.com/archives/archive11.shtm
+http://www.charlierose.com/archives/archive5.shtm
+http://www.charminghealth.com/applicability/guilt.htm
+http://www.charminghealth.com/applicability/homesickness.htm
+http://www.chartattack.com/DAMN/2003/03/0334.cfm
+http://www.chartattack.com/Gallery/20000619-cure.cfm
+http://www.chartattack.com/damn/2001/02/0801.cfm
+http://www.chartattack.com/damn/2005/01/2605.cfm
+http://www.chartattack.com/damn/2005/02/0105.cfm
+http://www.chartattack.com/damn/2005/02/0304.cfm
+http://www.charter-boatfishing.com/
+http://www.charter-travel.com/scotland.htm
+http://www.charter88.com/pubs/brief/0201lords.html
+http://www.charteredforesters.org/news_archive2001/news_may.html
+http://www.chartingnature.com/
+http://www.chartingthenation.lib.ed.ac.uk/mapscot.html
+http://www.chase-pitkin.com/How-To/Projects/doors_win/vwindow/vinwin.htm
+http://www.chasefreedom.com/exercise.html
+http://www.chasesc.com/
+http://www.chasingmatisse.com/html/cover-proloque.htm
+http://www.chass.utoronto.ca/mcluhan-studies/v1_iss1/1_1art14.htm
+http://www.chass.utoronto.ca/polsci/writing_uft.htm
+http://www.chatmag.com/help/softwareguide.html
+http://www.chattanoogan.com/articles/article_62972.asp
+http://www.chattanoogan.com/home.asp
+http://www.chattanoogapulse.com/vnews/display.v/ART/2005/06/01/429d1997bd66f
+http://www.chavscum.co.uk/forum/archive/index.php/t-4757.html
+http://www.chavscum.co.uk/forum/showthread.php?t=83
+http://www.chawton.org/biography.php?AuthorID=40
+http://www.chcf.org/topics/download.cfm?pg=insurance&fn=HIMUIndividualMarketRules.pdf&pid=92255&itemid=20739
+http://www.chch.ox.ac.uk/framestructure/getpage.asp?id=373
+http://www.chclibrary.org/micromed/00036630.html
+http://www.chclibrary.org/micromed/00036960.html
+http://www.chclibrary.org/micromed/00045370.html
+http://www.chclibrary.org/micromed/00047720.html
+http://www.chclibrary.org/micromed/00051720.html
+http://www.chclibrary.org/micromed/00054530.html
+http://www.chclibrary.org/micromed/00056800.html
+http://www.chclibrary.org/micromed/00060060.html
+http://www.chclibrary.org/micromed/00062720.html
+http://www.chclibrary.org/micromed/00066650.html
+http://www.chclibrary.org/micromed/00069390.html
+http://www.chcp.org/memorialday.html
+http://www.chcs-ks.org/lifecare_fitness_center.htm
+http://www.chdf.org.au/i-cms?page=111
+http://www.cheap-discount-computer-parts.com/
+http://www.cheap-hostels-in.com/tours-in/kenmare.htm
+http://www.cheap-international-calls-guide.co.uk/
+http://www.cheapflowers.com/category/6
+http://www.cheapsmokesbymail.com/faq.htm
+http://www.cheatcc.com/pc/suffering.html
+http://www.cheatcc.com/psx2/suffering.html
+http://www.cheatcc.com/xb/suffering.html
+http://www.cheatingculture.com/$1billionforconservativeideas.htm
+http://www.cheatingculture.com/exerciseinoverkill.htm
+http://www.cheatingdome.com/pc/11286.htm
+http://www.cheatingspousepi.com/
+http://www.cheatingspousepi.com/cheating_husband/
+http://www.cheatplanet.com/n64cheats/strategy/international_superstar_soccer.htm
+http://www.cheatplanet.com/psstrategy/nhl_2000.htm
+http://www.cheblogs.com/roller/page/1234/EconomicReport
+http://www.chebucto.ns.ca/Philosophy/Sui-Generis/Emerson/success.htm
+http://www.check-in.com.au/Melbourne/Abacus_Apartments.htm
+http://www.check-in.com.au/QLD/Nautilus_Holiday_Apartments.htm
+http://www.check-in.com.au/Sydney/Meriton_World_Tower_Apartments.htm
+http://www.check-in.com.au/customer/HotelDetails.asp?iHotelId=1264
+http://www.check-in.com.au/customer/HotelDetails.asp?iHotelId=856
+http://www.check-in.com.au/rg-2-HotelDetails.asp?iHotelId=858
+http://www.checkerdist.com/patterns/patterns_index.html
+http://www.checkmatic.com/
+http://www.checkplus.info/
+http://www.checkpoint.com/press/2003/q303earnings102003.html
+http://www.checkupdown.com/status/E008.html
+http://www.checnet.org/healthehouse/virtualhouse/search-results-articles.asp?Main_Room_FamilyLiving=1
+http://www.cheef.com/buffaloskin/Answers/The_Pro___Con/Skin_Cancer/Fluorescent_Lighting/fluorescent_lighting.html
+http://www.cheekymonkey.ca/Other%20Products/Product%20Images/MamaKangaroo/What%20is%20Baby%20Wearing.htm
+http://www.cheesereporter.com/editorial.htm
+http://www.chefdepot.net/benchscraper.htm
+http://www.chefelf.com/archives/00000050.shtml
+http://www.chefschoolreview.com/
+http://www.chefwalter.com/WP-events.html
+http://www.chek.org/2005_CHEK_Leadership_Conference.htm
+http://www.chekhovsmistress.com/2004/09/trivia_n_someth.html
+http://www.chelationtherapyonline.com/anatomy/p102.htm
+http://www.chelationtherapyonline.com/anatomy/p91.htm
+http://www.chelationtherapyonline.com/anatomy/p93.htm
+http://www.chelationtherapyonline.com/articles/p195.htm
+http://www.chelonia.org/Articles/TerrapenecareSZ.htm
+http://www.chelseablog.com/category/matches/fa-cup/
+http://www.chelseagreen.com/1992/items/lovingandleaving
+http://www.cheltenham.gov.uk/libraries/templates/page.asp?URN=2388
+http://www.chem.qmul.ac.uk/iubmb/kinetics/ek7.html
+http://www.chem.ucl.ac.uk/basictechorg/results/
+http://www.chem.uwec.edu/Chem406_F04/Pages/lab_assignments/Lab5/lab_5.html
+http://www.chem.uwec.edu/Chem406_F04/Pages/lab_assignments/Lab6/lab_6.html
+http://www.chem.uwec.edu/Chem406_F04/Pages/lab_assignments/Lab7/lab_7.html
+http://www.chem1.com/acad/sci/pseudosci.html
+http://www.chemalliance.org/Handbook/background/back-cercla.asp
+http://www.chemaxon.com/marvin/license.html
+http://www.chemeng.ucl.ac.uk/research/multiphase/projects.html
+http://www.chemguide.co.uk/physical/acidbaseeqia/indicators.html
+http://www.chemguide.co.uk/physical/phaseeqia/vapourpress.html
+http://www.chemistry.org/portal/a/c/s/1/acsdisplay.html?DOC=meetings%5Csandiego2005%5Chousing.html
+http://www.chemistry.org/portal/a/c/s/1/acsdisplay.html?DOC=membership%5Cnetworking.html
+http://www.chemistry.org/portal/a/c/s/1/acsdisplay.html?DOC=vc2%5C3wk%5Cwk3_cpd.html
+http://www.chemistry.org/portal/a/c/s/1/acsdisplay.html?DOC=vc2%5C3wk%5Cwk3_mat.html
+http://www.chemistry.org/portal/a/c/s/1/feature_pro.html?DOC=professionals%5Cpro_nanotech.html
+http://www.chemistrycoach.com/lbe2.htm
+http://www.chemistrycoach.com/student.htm
+http://www.chemoangels.com/In%20the%20News/angels_patients_talk.htm
+http://www.chems.msu.edu/curr.stud/mse.sops/sem.oper.htm
+http://www.chemsoc.org/exemplarchem/entries/2004/dublin_fowler/experiments.html
+http://www.chemtopics.com/elements/act/actf.htm
+http://www.chemtutor.com/sta.htm
+http://www.chenderit.northants.sch.uk/about/sixth-form-prospectus/music.html
+http://www.chenequa.wi.us/Newsletters/summer%202004.htm
+http://www.cheng.cam.ac.uk/groups/biochem/Recent_Research_Projects.htm
+http://www.cheniere.org/briefings/Hubbert/hubbert.htm
+http://www.cheniere.org/misc/qp.htm
+http://www.cheninfo.com/maddychen/blog/?m=200503
+http://www.chennaionline.com/Hotelsandtours/Placesofworship/index.asp
+http://www.chennaionline.com/astro/newyearvishu.asp
+http://www.chennaionline.com/columns/variety/variety4.asp
+http://www.chennaionline.com/health/hopeislife/12life25.asp
+http://www.chennaionline.com/science/Environment/concern.asp
+http://www.chentaiji.com/articles/nurturingways.html
+http://www.cherrylanecollection.com/CloseoutYankeeCandleAromaTherapyTarts0.html
+http://www.cherrylanecollection.com/html/5706.html
+http://www.cherrylanecollection.com/html/620.html
+http://www.cherryleaf.com/examples.htm
+http://www.cherryred.co.uk/cherryred/artists/cliffordtward.htm
+http://www.cherwell.org/?author=Susannah+Atkins
+http://www.cherwell.org/?id=2145
+http://www.cherwell.org/?id=2193
+http://www.cherwell.org/?id=3146
+http://www.cherwell.org/?id=745
+http://www.cherwell.org/?id=985
+http://www.cherwell.org/?s=sports&date=2004-11-12
+http://www.cherwell.org/?s=sports&page=sportsreports&date=2004-11-12
+http://www.cheshire.gov.uk/Planning/ForwardPlanning/Structure+Plan/FP_SP_EIP_EIPparticipants.htm
+http://www.cheslog.com/craig/parrhesia/archives/week_2004_01_04.html
+http://www.chess-dictionary-chesmayne.net/Tree.htm
+http://www.chess-dictionary-chesmayne.net/Women.htm
+http://www.chess.co.uk/books2003.html
+http://www.chess.co.uk/books2003_05.html
+http://www.chess.co.uk/books2004_02.html
+http://www.chess21.com/info/privacy.asp
+http://www.chessbase.com/newsdetail.asp?newsid=1474
+http://www.chessbase.com/newsdetail.asp?newsid=1734
+http://www.chessbase.com/newsdetail.asp?newsid=2094
+http://www.chessbase.com/newsdetail.asp?newsid=2258
+http://www.chessdirect.co.uk/acatalog/info.html
+http://www.chessingtonradiocarclub.co.uk/homepage.html
+http://www.chessvariants.com/people.dir/izzard.html
+http://www.chessvariants.com/ratings.html
+http://www.chester.ac.uk/undergraduate/management.html
+http://www.chestercathedral.com/newsletter.htm
+http://www.chestercc.gov.uk/main.asp?page=257
+http://www.chesterfield.labour.co.uk/ViewPage.cfm?Page=3489
+http://www.chesterton.org/gkc/philosopher/The%20Approach%20To%20Thomism.htm
+http://www.chestjournal.org/cgi/content/full/116/2/539
+http://www.chestjournal.org/cgi/content/full/126/3_suppl/265S
+http://www.chestnet.org/networks/home_care/reviews/2003/management.php
+http://www.chestnuthillinstitute.com/EmotionalEnergyFactor/book/samplechapter.html
+http://www.chetholmes.com/sales_manager.htm
+http://www.cheungswingchun.com/newSite/cdt.htm
+http://www.chevron.com/about/pascagoula/community/firesafetyed.shtml
+http://www.chevron.com/news/archive/chevron_speech/1998/98-5-18.asp
+http://www.chevron.com/news/current_issues/price_supply.asp
+http://www.chevrontexaco.com/news/speeches/2002/12feb2002_robertson.asp
+http://www.chevrontexaco.com/news/speeches/2004/2004-04-13_kirkland.asp
+http://www.chevychasebank.com/htm/banking.html
+http://www.chevychasebank.com/htm/p_online.html
+http://www.chforum.org/scenarios/yc203.html
+http://www.chfpatients.com/faq/dhf.htm
+http://www.chfpatients.com/heartforum.htm
+http://www.chfweb.com/smith/message6.html
+http://www.chi-charity.org.uk/Article1.htm
+http://www.chi2004.org/cfp/doccon.html
+http://www.chi2004.org/cfp/student.html
+http://www.chi2004.org/geninfo/s_volunteers.html
+http://www.chi2005.org/cfp/guide.html
+http://www.chi2005.org/program/prog_workshops.html
+http://www.chiariglione.org/mpeg/standards/mpeg-21/mpeg-21.htm
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=4.90beta1&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=4.90beta2&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=4.90beta3&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=4.90beta4&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=4.91beta1&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=5.01&file=othreps.html
+http://www.chiark.greenend.org.uk/ucgi/~sret1/analog/olddocs.pl?version=5.02&file=othreps.html
+http://www.chiark.greenend.org.uk/~sgtatham/tweak/btree.html
+http://www.chic.org.uk/chicmco/feelingunwell/ear_mounth.htm
+http://www.chic.org.uk/symptoms/eye.asp
+http://www.chicagobotanic.org/plantinfo/pp/PPHeuchera.html
+http://www.chicagobotanic.org/pr/press05/ProfDevelop.html
+http://www.chicagoboyz.net/mt/mt-comments.cgi?entry_id=2996
+http://www.chicagofed.org/about_the_fed/our_history.cfm
+http://www.chicagofed.org/consumer_information/purchase_options_for_consumers.cfm
+http://www.chicagoflame.com/news/2003/11/04/Opinions/Falling.In.Love.With.the.Factor-546472.shtml
+http://www.chicagofreemumia.org/cookdecl.html
+http://www.chicagofreepress.com/freetime/sukiedelacroix/
+http://www.chicagogsb.edu/news/2005-06-10h_lublin.aspx
+http://www.chicagolandtails.com/index.pl/heroes_of_the_canine_kind
+http://www.chicagomarriage.com/frequently_asked_questions.htm
+http://www.chicagorules.com/
+http://www.chicagosuntimes.com/output/lazare/cst-fin-lew31.html
+http://www.chicagotheband.com/historychap08.htm
+http://www.chicagotraveler.com/chicago-events-calendar.htm
+http://www.chicagotribune.com/news/custom/special3/chi-oaklawn.storygallery
+http://www.chicagotribune.com/news/local/north/
+http://www.chicagotribune.com/news/nationworld/chi-garymarx.storygallery
+http://www.chicagovolunteer.net/SearchResults.asp?Page=18&txtSearchType=2&lstJobType=33&cboRegion=1
+http://www.chichester.ac.uk/FOI/foi.htm
+http://www.chichester.gov.uk/work/estates_service_contacts.cfm
+http://www.chickasaw.net/government_133.htm
+http://www.chickensoup.com/Teachers/Teachers_Sample3.htm
+http://www.chicklit.com/paperjam/paperjam60.html
+http://www.chicklit.us/catalog_qs.htm
+http://www.chickmoorman.com/PAlying.html
+http://www.chicogreeks.com/parents.asp
+http://www.chiefdelphi.com/forums/papers.php?s=&categoryid=10&perpage=10&direction=DESC&sort=date
+http://www.chiefengineer.org/content/all_archive_list.cfm/search_year/2004.htm
+http://www.chiefexecutive.net/depts/mkthoriz/179.htm
+http://www.chiefofficer.com/particle.php?t=47
+http://www.chiefsupply.com/safety.phtml
+http://www.chiexplorer.com/chi0010.html
+http://www.chiffandfipple.com/low.html
+http://www.chikamaka-cwy.org/dikaneisdi2.htm
+http://www.child-abuse.com/childhouse/childrens_rights/dci_what.html
+http://www.child-soldiers.org/document_get.php?id=861
+http://www.childbirtheducation.net/services.html
+http://www.childcareaware.org/en/dailyparent/0298/
+http://www.childcareaware.org/en/dailyparent/0399/
+http://www.childcareaware.org/en/dailyparent/0498/
+http://www.childcareaware.org/en/dailyparent/vol12/
+http://www.childcareaware.org/en/dailyparent/vol5/
+http://www.childcareaware.org/en/dailyparent/vol9/
+http://www.childcustodyattorney.com/ohio/_disc54/000006a1.htm
+http://www.childdevelopmentinfo.com/parenting/communication.shtml
+http://www.childfocus-net-alert.be/uk/UK_news_sub01.htm
+http://www.childfun.com/
+http://www.childfun.com/modules.php?name=News&file=article&sid=165
+http://www.childpolicy.org.uk/news/index.cfm?ccs=89
+http://www.childpolicyintl.org/issuebrief/issuebrief5.htm
+http://www.childpro.org/
+http://www.children.smartlibrary.org/NewInterface/segment.cfm?segment=1800
+http://www.children.smartlibrary.org/NewInterface/segment.cfm?segment=2524
+http://www.childrenfirst.org.uk/cis/New%20Initiatives/existing.htm
+http://www.childreninscotland.org.uk/html/poly_i_leg.htm
+http://www.childrennow.org/media/medianow/mnsummer2002.htm
+http://www.childrennow.org/media/medianow/mnwinter1998.html
+http://www.childrens-heart-fed.org.uk/chf%20response%20feb%202003.htm
+http://www.childrens-heart-fed.org.uk/teachers.htm
+http://www.childrensabilityfund.ab.ca/donatenow.htm
+http://www.childrensaidsociety.org/news/1980386
+http://www.childrensbloodfoundation.org/thalassemia.html
+http://www.childrenshospital.org/az/Site508/mainpageS508P0.html
+http://www.childrenshospital.org/cfapps/A2ZtopicDisplay.cfm?Topic=Hypoglycemia
+http://www.childrenshospital.org/cfapps/A2ZtopicDisplay.cfm?Topic=Ineffective%20Latch-On%20or%20Sucking
+http://www.childrenshospital.org/cfapps/A2ZtopicDisplay.cfm?Topic=Motor%20Vehicle%20Safety%20-%20Identifying%20High-Risk%20Situations
+http://www.childrenshospital.org/cfapps/CHdeptPagePressDisplay.cfm?Dept=Press%20Room&PageNbr=49&ParentPage=1
+http://www.childrenshospital.org/dream/DreamWin04/obesity.html
+http://www.childrenshospitalla.org/11381.cfm
+http://www.childrenshospitaloakland.org/t_healthcare.cfm?id=259
+http://www.childrenshospitals.net/TemplateRedirect.cfm?template=/ContentManagement/ContentDisplay.cfm&ContentID=14586
+http://www.childrenslegalcentre.com/Templates/Internal.asp?NodeID=90186
+http://www.childrensmemorial.org/jobs/jobListing.asp?jobID=709
+http://www.childrensmusic.org/light6.html
+http://www.childsupportanalysis.co.uk/information_and_explanation/newspaper_articles/news_articles_1999_q1.htm
+http://www.chilternrugby.co.uk/club_history_3.htm
+http://www.chimesofsolvang.com/wind-chimes/
+http://www.chimie.umontreal.ca/chm109.html
+http://www.china-aids.org/english/five-Year-Plan.htm
+http://www.china-asean.net/asean_biz/myanmar/country_econ/asean_my_econ_basic.html
+http://www.china-embassy.is/eng/7168.html
+http://www.china-embassy.org/eng/jjmy/b/t36297.htm
+http://www.china-embassy.org/eng/zt/first%20beginning/t56123.htm
+http://www.china-embassy.org/eng/zt/zgrq/t36633.htm
+http://www.china-labour.org.hk/iso/article.adp?article_id=1012
+http://www.china-labour.org.hk/iso/article.adp?article_id=1021
+http://www.china-teachers.com/article34.html
+http://www.china-teachers.com/modules.php?name=News&file=print&sid=34
+http://www.china-window.com/china_market/china_industry_reports/western-region-developmen.shtml
+http://www.china.org.cn/e-white/phumanrights19/p-5.htm
+http://www.china.org.cn/english/2003/Sep/74607.htm
+http://www.china.org.cn/english/BAT/76637.htm
+http://www.china.org.cn/english/China/50142.htm
+http://www.china1900.info/ereignisse/nanjingvertrag.htm
+http://www.chinabusinessreview.com/public/0103/horsley.html
+http://www.chinabusinessreview.com/public/0103/keck.html
+http://www.chinabusinessreview.com/public/0409/cheng.html
+http://www.chinabusinessreview.com/public/9911/commentary.html
+http://www.chinacp.com/eng/cpcasestudies/casestudy5.html
+http://www.chinacp.com/eng/cptools/cpt_book00.htm
+http://www.chinadaily.com.cn/en/doc/2003-08/26/content_258459.htm
+http://www.chinadaily.com.cn/en/doc/2003-09/09/content_262342.htm
+http://www.chinadaily.com.cn/english/doc/2004-02/05/content_303348.htm
+http://www.chinadaily.com.cn/english/doc/2004-04/26/content_326365.htm
+http://www.chinadaily.com.cn/english/doc/2004-07/23/content_351109.htm
+http://www.chinadaily.com.cn/english/doc/2004-10/25/content_385293.htm
+http://www.chinadaily.com.cn/english/doc/2004-11/14/content_391332.htm
+http://www.chinadaily.com.cn/english/doc/2004-11/15/content_391483.htm
+http://www.chinadaily.com.cn/english/doc/2005-01/08/content_407138.htm
+http://www.chinadaily.com.cn/english/doc/2005-01/13/content_408478.htm
+http://www.chinadaily.com.cn/english/doc/2005-01/31/content_413729.htm
+http://www.chinadaily.com.cn/english/doc/2005-03/13/content_424372.htm
+http://www.chinadaily.com.cn/english/doc/2005-03/17/content_425973.htm
+http://www.chinadaily.com.cn/english/doc/2005-06/20/content_452774.htm
+http://www.chinaembassy.org.in/eng/zgbd/t165860.htm
+http://www.chinaexcite.com/tradeguide/culture-festival.htm
+http://www.chinafrominside.com/ma/xyxy/guoweihan.html
+http://www.chinainformed.com/Archive/x9710/971004.html
+http://www.chinaknowledge.de/Literature/radicals.html
+http://www.chinamyopia.org/healthnewsguyton.htm
+http://www.chinaonline.com/refer/ministry_profiles/SETCL3.asp
+http://www.chinareform.org/cgi-bin/ResearchPaper/ResearchPaper_main.asp?Ggwk_ID=51&Ggwk_Type=1
+http://www.chinaroad.org/motor.html
+http://www.chinatownsydney.com/social.cfm?id=55
+http://www.chinbin.com/chinfriends.html
+http://www.chincare.com/Activism/ACCKchangebychoice.htm
+http://www.chinese-embassy.org.uk/eng/xw/t182125.htm
+http://www.chinese-forums.com/viewtopic.php?p=30665
+http://www.chinese-forums.com/viewtopic.php?t=3980
+http://www.chinesecinemas.org/reelasian.html
+http://www.chinesetide.com/english/Online_Course/standard_chinese/Course/index.asp?course_id=2
+http://www.chineseupress.com/Chinese/tc1/Dr.luk/Dr.Luk.html
+http://www.chinfo.navy.mil/navpalib/cno/n87/usw/issue_21/subforce.htm
+http://www.chinfo.navy.mil/navpalib/policy/vision/vis99/v99-ch1b.html
+http://www.chinfo.navy.mil/navpalib/ships/carriers/histories/cv43-coralsea/cv43-coralsea.html
+http://www.chinmusicpress.com/
+http://www.chipr.sunysb.edu/sam85/SAM85Manual/Chapter3.htm
+http://www.chips.navy.mil/archives/03_spring/webpages/fargo.htm
+http://www.chipsquinn.org/skills/learning/learning.aspx?id=358
+http://www.chiptaylor.com/ht/srls0067.cfm
+http://www.chirk.com/stmary.html
+http://www.chiro.cc/chiro_testimony.shtml
+http://www.chirosmart.net/fourthjuly.txt
+http://www.chiroweb.com/archives/12/15/03.html
+http://www.chiroweb.com/archives/16/04/02.html
+http://www.chiroweb.com/archives/20/23/14.html
+http://www.chirpingbat.com/
+http://www.chirpingbat.com/index.shtml
+http://www.chistell.com/breast_cancer_health.htm
+http://www.chitraloka.com/sections/stock_shots/awards_stateaward01_02_nanditha.html
+http://www.chitterlings.com/affiliate.html
+http://www.chloeholt.co.uk/toc.html
+http://www.chmed.com/mod.php?mod=userpage&menu=1809&page_id=112
+http://www.chmed.com/mod.php?mod=userpage&menu=2005&page_id=167
+http://www.chnedu.net/20030829/02.htm
+http://www.chnedu.net/20030829/18.htm
+http://www.chnetwork.org/journals/sola/sola5.htm
+http://www.choate.edu/supportchoate/staffdirectory.asp
+http://www.chob.edu/art/index.asp
+http://www.chocolatefantasies.com/shipping.htm
+http://www.chocolatetradingco.com/special.asp?ID=3
+http://www.choice.com.au/goArticle.aspx?ID=104591&p=01
+http://www.choice.com.au/goArticle.aspx?id=101541&p=5
+http://www.choice.com.au/goArticle.aspx?id=103599&p=1
+http://www.choice.com.au/viewArticleAsOnePage.aspx?id=104585&p=1
+http://www.choiceclub.net/memberrules.asp
+http://www.choiceusa.org/editorial/article.php?type=voice
+http://www.choike.org/nuevo_eng/informes/1374.html
+http://www.choisser.com/faceblind/about.html
+http://www.choisser.com/faceblind/who.html
+http://www.chompchomp.com/terms/adjective.htm
+http://www.chomsky.info/books/warfare01.htm
+http://www.choosebooks.com/dealer_details.jsp?dealer_id=5217
+http://www.choosehope.com/support/
+http://www.chooseyourcharity.com/glossary5.htm
+http://www.choralmusic.com/church_christmas.htm
+http://www.chorltonfringe.com/newslog.html
+http://www.chotank.com/gindex.html
+http://www.chox.org.uk/abbey/item.asp?ID=24
+http://www.chox.org.uk/news/fullnews.asp?ID=51
+http://www.chpa.co.uk/
+http://www.chpi.org/history.htm
+http://www.chrc-ccdp.ca/adr/settlements/family-en.asp
+http://www.chrc-ccdp.ca/employment_equity/part1-en.asp
+http://www.chrc-ccdp.ca/legislation_policies/factum/page4-en.asp
+http://www.chrc-ccdp.ca/legislation_policies/preface-en.asp
+http://www.chrc-ccdp.ca/publications/1997_ar/page11-en.asp
+http://www.chrc-ccdp.ca/publications/screening_employment-en.asp
+http://www.chrc-ccdp.ca/publications/screening_employment-en.asp?pm=1
+http://www.chris-lambert.com/SALE/sale.html
+http://www.chris-longhurst.com/carbibles/additives.html
+http://www.chrisabraham.com/community/
+http://www.chriscmooney.com/archives.asp?start=7/5/2004&end=7/11/2004
+http://www.chriscmooney.com/blog.asp
+http://www.chriscorrigan.com/parkinglot/
+http://www.chrisdunmire.com/tidbits/archives/2005/may.shtml
+http://www.chrisjdavis.org/2005/05/14/cjd-rate-it/
+http://www.chrisjdavis.org/sandbox/
+http://www.chrisman.org/LyleChrisman/LyleBiography.htm
+http://www.chrisnolan.com/2003_10_08.html
+http://www.chrisnolan.com/2003_10_8.html
+http://www.chrisnolan.com/archives/000281.html
+http://www.chrisnolan.com/archives/000659.html
+http://www.christaresources.com/energy_attunements/
+http://www.christcenteredmall.com/teachings/kings/ahaz.htm
+http://www.christchurch-virginiawater.co.uk/sermons/genesis6.htm
+http://www.christendom-awake.org/pages/mshivana/logos.html
+http://www.christendom-awake.org/pages/tteague/law&ethics/law&ethics-1.htm
+http://www.christers.net/veeps/charles-fairbanks.html
+http://www.christian-aid.org.uk/indepth/0001biot/biotech.htm
+http://www.christian-aid.org.uk/indepth/0209puzz/debt.htm
+http://www.christian-bookshop.co.uk/free/r04/rev04n4.htm
+http://www.christian-teachers.org.uk/faq.html
+http://www.christian.org.uk/html-publications/gtc.htm
+http://www.christian.org.uk/html-publications/r18submission.htm
+http://www.christianaid.org.uk/indepth/0001biot/biotech.htm
+http://www.christianaid.org.uk/indepth/0003bios/biosafet.htm
+http://www.christianaid.org.uk/news/features/0209corp.htm
+http://www.christianaid.org.uk/seasia/
+http://www.christiananswers.net/godstory/prayer1.html
+http://www.christiananswers.net/q-abr/abr-a023.html
+http://www.christiananswers.net/q-eden/edn-thermodynamics.html
+http://www.christiananswers.net/spotlight/games/2004/doom3.html
+http://www.christiananswers.net/spotlight/movies/2005/sonofthemask2005.html
+http://www.christianbook.com/Christian/Books/cms_content/185665229?page=735685&sp=1052
+http://www.christianbook.com/Christian/Books/cms_content/186466271?page=386186&event=1010SBF
+http://www.christianbook.com/Christian/Books/cms_content/186466271?page=735685&sp=1052
+http://www.christianbook.com/Christian/Books/cms_content/187131446?page=735685&sp=1052
+http://www.christianbook.com/Christian/Books/cms_content/187556868?page=735685&sp=1052
+http://www.christianbook.com/Christian/Books/product/186466271?item_no=836916&event=1025SPF
+http://www.christianbookshops.org.uk/shopname_b.htm
+http://www.christiancourier.com/penpoints/noDesignerArgument.htm
+http://www.christiancrafters.com/sermon_Godscall.html
+http://www.christiancrafters.com/skits.html
+http://www.christianemployment.com/resources/articles.asp?ID=64
+http://www.christianethicstoday.com/Issue/019/Truth-Telling%20-%20An%20Exercise%20In%20Practical%20Morality%20By%20Charles%20Wellborn_019_13_.htm
+http://www.christiangays.com/marriage.shtml
+http://www.christiangoth.com/cutting.html
+http://www.christianity.ca/education/homeschooling/2005/02.000.html
+http://www.christianity.co.nz/born1.htm
+http://www.christianity.co.nz/forgive5.htm
+http://www.christianity.com/CC/article/0,,PTID4211%7CCHID617574%7CCIID1873486,00.html
+http://www.christianity.com/CC/article/0,,PTID42281%7CCHID147904%7CCIID306440,00.html
+http://www.christianity.com/partner/Article_Display_Page/0,,PTID5339%7CCHID14%7CCIID1875788,00.html
+http://www.christianitytoday.com/bc/2005/001/3.8.html
+http://www.christianitytoday.com/biblestudies/areas/biblestudies/articles/040818.html
+http://www.christianitytoday.com/books/web/2001/jan17a.html
+http://www.christianitytoday.com/ch/2003/002/10.32.html
+http://www.christianitytoday.com/cl/2000/002/6.36.html
+http://www.christianitytoday.com/cl/7c6/7c6026.html
+http://www.christianitytoday.com/cpt/2001/002/15.18.html
+http://www.christianitytoday.com/ct/2001/009/15.22.html
+http://www.christianitytoday.com/ct/2001/110/55.0.html
+http://www.christianitytoday.com/ct/2001/140/23.0.html
+http://www.christianitytoday.com/ct/2001/151/31.0.html
+http://www.christianitytoday.com/ct/2002/006/1.38.html
+http://www.christianitytoday.com/ct/2002/125/23.0.html
+http://www.christianitytoday.com/ct/2003/127/46.0.html
+http://www.christianitytoday.com/ct/2003/138/23.0.html
+http://www.christianitytoday.com/ct/2003/139/31.0.html
+http://www.christianitytoday.com/ct/2004/001/30.35.html
+http://www.christianitytoday.com/ct/2004/001/4.52.html
+http://www.christianitytoday.com/ct/2004/118/22.0.html
+http://www.christianitytoday.com/ct/2004/136/41.0.html
+http://www.christianitytoday.com/ct/2005/002/11.66.html
+http://www.christianitytoday.com/ct/2005/101/31.0.html
+http://www.christianitytoday.com/ct/2005/104/53.0.html
+http://www.christianitytoday.com/ct/2005/112/48.0.html
+http://www.christianitytoday.com/ctmag/special/samesexmarriage.html
+http://www.christianitytoday.com/history/newsletter/2003/jul18.html
+http://www.christianitytoday.com/history/newsletter/2005/feb4.html
+http://www.christianitytoday.com/music/artists/jonah33.html
+http://www.christianitytoday.com/music/artists/robertrandolph.html
+http://www.christianitytoday.com/smallgroups/articles/giveservantsheart.html
+http://www.christianitytoday.com/smallgroups/articles/makingrealfriends.html
+http://www.christianitytoday.com/tcw/2000/004/10.37.html
+http://www.christianitytoday.com/tcw/2002/003/15.29.html
+http://www.christianitytoday.com/tcw/8w3/8w3060.html
+http://www.christianitytoday.com/tcw/8w6/8w6037.html
+http://www.christianlaw.org/courtroom.html
+http://www.christianlegalfellowship.org/Conference/Conference%202001/conference2001.html
+http://www.christianmartialartist.com/boborlando.html
+http://www.christianmusicplanet.com/magazine/viewarticle.asp?id=45
+http://www.christianpost.com/article/ministries/95/full/pastor.for.the.armed.forces/1.htm
+http://www.christianpost.com/dbase/education/46/full/1.htm
+http://www.christiansciencemonitor.com/2001/1217/p1s1-wosc.htm
+http://www.christiansciencemonitor.com/2004/0114/p01s01-uspo.html
+http://www.christianwolmar.co.uk/articles/pslg/feb,03.shtml
+http://www.christie.nhs.uk/patientinfo/booklets/TextBooklets/sexandcancer/sexandcancer.htm
+http://www.christinecolumbus.com/airsecurity.asp
+http://www.christinecolumbus.com/products.asp?pID=435
+http://www.christinefeehan.com/dark_melody/
+http://www.christinespeaks.com/reelingcusts.htm
+http://www.christkitchen.org/newsletters/mar_2004.html
+http://www.christmas-time.com/ct-poetry.htm
+http://www.christmascountry.com/treefarm.html
+http://www.christmasinegypt.com/Info-Center/Transportation.asp
+http://www.christmasmountainvillage.com/townhome.html
+http://www.christmasspiritshop.com/product.taf?id=AR-1000
+http://www.christmastrees.org/archived_articles/articles1.htm
+http://www.christojeanneclaude.net/errors.html
+http://www.christopher-gordon.com/Authors/jalongo.shtml
+http://www.christophernolan.net/interviews_qa.php
+http://www.christopherradko.com/html/history.html
+http://www.christopherradko.com/html/press-room-history.html
+http://www.christs.cam.ac.uk/catalog/careers/career_options.html
+http://www.christusrex.org/www1/ofm/mad/discussion/023discuss.html
+http://www.chriswoods.com/archives/2004/10/chicago_radio_s_5.html
+http://www.chrlitworld.com/BookSGP/MKJVExplain.htm
+http://www.chromaenergy.com/ourtechnology_glossary.asp
+http://www.chron.com/class/jobs/recruitment_solutions.html
+http://www.chron.com/content/interactive/space/archives/87/871004.html
+http://www.chron.com/content/interactive/space/missions/sts-092/stories/20000811.html
+http://www.chron.com/content/interactive/special/school/safety.2-1.html
+http://www.chron.com/content/interactive/voyager/sail/mindi/97/08/bg.html
+http://www.chron.com/cs/CDA/ssistory.mpl/ae/books/reviews/1861982
+http://www.chron.com/cs/CDA/ssistory.mpl/ae/books/reviews/2252338
+http://www.chron.com/cs/CDA/ssistory.mpl/ae/books/reviews/2696310
+http://www.chron.com/cs/CDA/ssistory.mpl/ae/books/reviews/2871511
+http://www.chron.com/cs/CDA/ssistory.mpl/business/buggs/3015581
+http://www.chron.com/cs/CDA/ssistory.mpl/business/energy/3015977
+http://www.chron.com/cs/CDA/ssistory.mpl/business/lipman/2208856
+http://www.chron.com/cs/CDA/ssistory.mpl/business/steffy/2729591
+http://www.chron.com/cs/CDA/ssistory.mpl/business/steffy/2808535
+http://www.chron.com/cs/CDA/ssistory.mpl/ec/demconv/2705261
+http://www.chron.com/cs/CDA/ssistory.mpl/editorial/hines/2757371
+http://www.chron.com/cs/CDA/ssistory.mpl/front/3027332
+http://www.chron.com/cs/CDA/ssistory.mpl/metropolitan/3022702
+http://www.chron.com/cs/CDA/ssistory.mpl/outdoors/doggett/2397507
+http://www.chron.com/cs/CDA/ssistory.mpl/outdoors/doggett/2566611
+http://www.chron.com/cs/CDA/ssistory.mpl/politics/2705261
+http://www.chron.com/cs/CDA/ssistory.mpl/prn/texas/3008157
+http://www.chron.com/cs/CDA/ssistory.mpl/sports/justice/extra/2983644
+http://www.chron.com/cs/CDA/story.hts/texas/1451645
+http://www.chronicillnet.org/online/Fisher.html
+http://www.chronicle-independent.com/
+http://www.chronicprostatitis.com/nerves.html
+http://www.chronwatch.com/content/contentDisplay.asp?aid=11114
+http://www.chronwatch.com/content/contentDisplay.asp?aid=11114&catcode=13
+http://www.chronwatch.com/content/contentDisplay.asp?aid=9669
+http://www.chrr.ohio-state.edu/closed_cases/glossary_cc.html
+http://www.chs.harvard.edu/classicsat/issue_2/due-ebbott_2004_all.html
+http://www.chs.med.ed.ac.uk/phs/advisory/advisory.php
+http://www.chsbs.cmich.edu/Desheng_Zong/Zong's%20teaching%20folder/PHL%20118%20at%209%20am.htm
+http://www.chsd.org/1251.cfm
+http://www.chsd.org/166.cfm
+http://www.chsd.org/body.cfm?id=1495
+http://www.chsrf.ca/final_research/ogc/lavis_e.php
+http://www.chsrf.ca/final_research/ogc/roos_e.php
+http://www.chsrf.ca/final_research/ogc/roos_e.php?mode=print&
+http://www.chsrf.ca/final_research/ogc/tomblin_e.php
+http://www.chsrf.ca/final_research/ogc/tomblin_e.php?mode=print&
+http://www.chsrf.ca/other_documents/listening/immedissues_e.php
+http://www.chss.montclair.edu/english/furr/glaspie.html
+http://www.chss.montclair.edu/english/furr/pol/wtc/leibovitz091101.html
+http://www.chss.montclair.edu/english/furr/politics.html
+http://www.chss.montclair.edu/~landwebj/wpp/QEI.htm
+http://www.chtu.org/795Memories.html
+http://www.chubb.com/news/pr20050111.html
+http://www.chuckherrin.com/hackthevotedemo.htm
+http://www.chud.com/fetal/stages.php3
+http://www.chuggnutt.com/
+http://www.chuhak.com/articles/new_proposed_HIPAA_privacy_rules.htm
+http://www.chulavistaca.gov/City_Services/Community_Services/Recreation/RecreationFacilities/parkway.asp
+http://www.chulavistaca.gov/City_Services/Community_Services/Recreation/RecreationFacilities/youth.asp
+http://www.chuliege.be/plancos/english.html
+http://www.chumba.com/_rebelstext.htm
+http://www.chumlimited.com/press/releasetelevision.asp?stationID=28&pressID=1095
+http://www.chumlimited.com/radio/community.asp
+http://www.chumworth.com/december2000.html
+http://www.chuonthis.com/extensions/
+http://www.churchalive.ca/tdo/tdosept98.html
+http://www.churcharmy.org.uk/five_areas_focus/homeless_people/homeless.htm
+http://www.churchbusiness.com/articles/0a1webx3.html
+http://www.churchbusiness.com/articles/111feat4.html
+http://www.churchbusiness.com/articles/121cover.html
+http://www.churchbusiness.com/articles/121webx1.html
+http://www.churchbusiness.com/articles/151webx1.html
+http://www.churchbusiness.com/articles/171webx1.html
+http://www.churchbusiness.com/articles/451feat5.html
+http://www.churchbusiness.com/articles/4c1news.html
+http://www.churchcommunitybuilder.com/knowledge_press_version_7.php
+http://www.churchexecutive.com/2004/09/Capitalize_on_lay_support_to_reach_campaign_goals.asp
+http://www.churchfundingcounsel.com/newsletter2.htm
+http://www.churchill-society-london.org.uk/NmnLbrct.html
+http://www.churchillbooks.com/flatfile.shtml
+http://www.churchinwales.org.uk/gb/apr2004/rb%20review/2_agenda.html
+http://www.churchofcraft.org/doors/new%20york/nyed-sum2005.html
+http://www.churchofcriticalthinking.com/archives/000114issues_with_a_capita.html
+http://www.churchofdeepecology.org/action.htm
+http://www.churchofeuthanasia.org/coefaq.html
+http://www.churchofeuthanasia.org/e-sermons/heavgate.html
+http://www.churchofeuthanasia.org/press/noise_einstein.html
+http://www.churchofeuthanasia.org/snuffit4/askchris.html
+http://www.churchofeuthanasia.org/snuffit4/editor.html
+http://www.churchofgoddfw.com/children/4_garden.html
+http://www.churchofgoddfw.com/children/4_garden.shtml
+http://www.churchofgodonline.com/concerning-women-in-the-ministry.htm
+http://www.churchofscotland.org.uk/discussion/discussion0204a.htm
+http://www.churchofscotland.org.uk/together/togetherupdate.htm
+http://www.churchofscotland.org.uk/webcast/webcastfeedback.htm
+http://www.churchofthemasses.blogspot.com/
+http://www.churchstaffing.com/html/miscellaneous/background_checks.shtml
+http://www.churchworldservice.org/FactsHaveFaces/childwrk.html
+http://www.churchworldservice.org/annualreport2003/letter.html
+http://www.churchworldservice.org/planned_giving.html
+http://www.chw.edu.au/research/sleep_study/overview.htm
+http://www.ci-ce-ct.com/Feature%20articles/11-11-2003.asp
+http://www.ci.albany.or.us/council/citymanager/briefs.php
+http://www.ci.american-canyon.ca.us/Key_links/City_Information/economic_profile.html
+http://www.ci.arlington.tx.us/publicworks/faq_drainage_concern.html
+http://www.ci.auburn.ne.us/attract.htm
+http://www.ci.austin.tx.us/benefits/
+http://www.ci.austin.tx.us/channel6/
+http://www.ci.austin.tx.us/council/ds_11_11_00.htm
+http://www.ci.austin.tx.us/council/ds_11_14_00.htm
+http://www.ci.austin.tx.us/fire/employment.htm
+http://www.ci.austin.tx.us/library/news/nr20050418.htm
+http://www.ci.bend.or.us/cityservices/publicworks/Water_supply.htm
+http://www.ci.berkeley.ca.us/commissions/aging/2003aging/minutes/031903M11.htm
+http://www.ci.berkeley.ca.us/energy/Powerplay%20articles/1PowerplayFacts%20of%20Light.html
+http://www.ci.berkeley.ca.us/prc/ordinance4644.htm
+http://www.ci.berkeley.ca.us/psc/valuation.html
+http://www.ci.berkeley.ca.us/rent/OrdRegs/gcause/Ordinance.html
+http://www.ci.berkeley.ca.us/rent/meetings&events/newslet.html
+http://www.ci.boulder.co.us/openspace/nature/weeds.htm
+http://www.ci.carrboro.nc.us/TC/advisoryboards.htm
+http://www.ci.champaign.il.us/public_works/pwsspl.php
+http://www.ci.citrus-heights.ca.us/home/index.asp?page=1009
+http://www.ci.citrus-heights.ca.us/home/index.asp?page=716
+http://www.ci.concord.nh.us/codeadmin/minutes/ZoningMinutes10-03.asp
+http://www.ci.durham.nc.us/departments/onecall/faq.cfm
+http://www.ci.edmonds.wa.us/current_jobs/041213_emt.htm
+http://www.ci.edmonds.wa.us/current_jobs/041213_paramedic.htm
+http://www.ci.elmira.ny.us/police/child_safety_tips.html
+http://www.ci.fairfield.ca.us/1626.htm
+http://www.ci.fullerton.ca.us/comm_serv/commission/cscmin20040809.html
+http://www.ci.fullerton.ca.us/dev_serv/pc/pcmin001213.html
+http://www.ci.fullerton.ca.us/personnel/ed.html
+http://www.ci.gilbert.az.us/pw/hhw.cfm
+http://www.ci.greeley.co.us/2n/PageNewsDetails.asp?fkOrgID=12&pkNewsDetailsID=698
+http://www.ci.greensboro.nc.us/bad/tax_information.htm
+http://www.ci.howells.ne.us/econ.htm
+http://www.ci.indian-hill.oh.us/planning/septemberplan00.html
+http://www.ci.lakewood.wa.us/index.php?option=com_content&task=view&id=70&Itemid=116
+http://www.ci.larchmont.ny.us/history/streetnames.html
+http://www.ci.leicester.ma.us/calendar/thanks.htm
+http://www.ci.logan.ut.us/commdev/Building/Residential%20Plan%20Checklist.htm
+http://www.ci.malibu.ca.us/download/index.cfm?fuseaction=download&cid=5088
+http://www.ci.manhattan.ks.us/view/faq.asp?id=Finance%20Dept/Utility%20Billing/FAQs
+http://www.ci.marina.ca.us/codehtml/Mrna05/05-20.htm
+http://www.ci.mashpee.ma.us/pages/mashpeema_selectmin/0047E972-000F8513
+http://www.ci.merrimack.nh.us/swedu/ProposedArticle.htm
+http://www.ci.minneapolis.mn.us/about/maps/public-maps-pip.asp
+http://www.ci.mtnview.ca.us/citydepts/cs/rec/yag.htm
+http://www.ci.mtnview.ca.us/citydepts/pw/swp/faq.htm
+http://www.ci.mtnview.ca.us/citygov/council/agendas/cca032205.htm
+http://www.ci.mtnview.ca.us/citygov/council/minutes/rva101403.htm
+http://www.ci.nyc.ny.us/html/dep/html/history.html
+http://www.ci.nyc.ny.us/html/dep/html/news/tokyo.html
+http://www.ci.nyc.ny.us/html/doh/html/public/press05/pr004-05.html
+http://www.ci.pasadena.ca.us/fire/history.asp
+http://www.ci.pasadena.ca.us/trans/parking/pkng_rates.asp
+http://www.ci.phoenix.az.us/FIRE/highrise.html
+http://www.ci.pinetop-lakeside.az.us/pzfaq.shtml
+http://www.ci.pleasanton.ca.us/archive/ccminutes980305.html
+http://www.ci.poquoson.va.us/phone.html
+http://www.ci.poquoson.va.us/solid.htm
+http://www.ci.richmond.ca.us/~hrweb/descriptions/html/Workers_Comp_Exam_08.htm
+http://www.ci.richmond.va.us/visitor/cdxxi_comindex.asp
+http://www.ci.royal-oak.mi.us/clerk/urichsca.html
+http://www.ci.salina.ks.us/HRelations/EqualOpp.htm
+http://www.ci.saline.mi.us/features/econ_dev_link
+http://www.ci.santa-cruz.ca.us/fd/fdhis.html
+http://www.ci.seattle.wa.us/light/conserve/sustainability/
+http://www.ci.seattle.wa.us/neighborhoods/ppatch/start.htm
+http://www.ci.seattle.wa.us/parks/centers/BitterLake/activity.htm
+http://www.ci.sf.ca.us/site/recpark_page.asp?id=20276
+http://www.ci.southside-place.tx.us/index.cfm/MenuItemID/109.htm
+http://www.ci.st-charles.il.us/news/legals.htm
+http://www.ci.superior.wi.us/publicwks/streetdiv.htm
+http://www.ci.tumwater.wa.us/Departments/Parks/Winter%202004/Youth%20Enrichment%20Winter%202004.htm
+http://www.ci.wilmington.nc.us/manager/pio.htm
+http://www.ci.windsor.wi.us/110404boardminutes.htm
+http://www.cia-g.com/~gismc/f1hf.htm
+http://www.cia-g.com/~gismc/f2hf.htm
+http://www.cia-g.com/~gismc/f3hf.htm
+http://www.cia-g.com/~gismc/f4hf.htm
+http://www.cia-g.com/~gismc/f5hf.htm
+http://www.cia-g.com/~gismc/f6hf.htm
+http://www.cia-g.com/~gismc/f7hf.htm
+http://www.cia.gov/cia/public_affairs/speeches/1996/dci_speech_072596.html
+http://www.cia.gov/cia/public_affairs/speeches/1999/nceita_keynote_speech.html
+http://www.cia.gov/cia/public_affairs/speeches/2004/Goss_testimony_02162005.html
+http://www.cia.gov/cia/public_affairs/speeches/2004/dci_speech_07082004.html
+http://www.cia.gov/cia/publications/chiefs/
+http://www.cia.gov/cia/publications/factbook/print/jm.html
+http://www.cia.gov/cia/reports/chile/
+http://www.cia.gov/csi/studies/95unclass/100Days.html
+http://www.cia.gov/csi/studies/97unclass/failure.html
+http://www.cia.gov/employment/student.html
+http://www.ciagents.com/content/view/38/41/
+http://www.ciao.co.uk/Tiscali__5170768/TabId/2
+http://www.ciao.co.uk/studentcomp_co_uk__Review_5413839
+http://www.ciaonet.org/isa/wrs01/
+http://www.ciaonet.org/olj/sa/sa_june01pas02.html
+http://www.ciaonet.org/olj/wt/wt_98howard.html
+http://www.ciaonet.org/wps/bir01/
+http://www.ciaonet.org/wps/bom01/
+http://www.ciaonet.org/wps/str13/
+http://www.ciaonet.org/wps/wak02/
+http://www.cias.wisc.edu/wicst/research/covcrop.htm
+http://www.cibi.org.uk/progress.asp
+http://www.cic.gc.ca/english/pub/study.html
+http://www.cic.gc.ca/english/study/change-renew.html
+http://www.cic.org/projects_services/epe/greensboro.asp
+http://www.cica.org.uk/integration-web/it-integration-conclusions-v3.htm
+http://www.cicero.uio.no/humsec/
+http://www.cicerofoundation.org/lectures/bertozzi_nov02.html
+http://www.cichw.net/pmswvdv2.html
+http://www.cichw.net/pmvw.html
+http://www.cid.bg/en/left/genoverview.htm
+http://www.cid.harvard.edu/cidwp/002.htm
+http://www.cidajamaica.org.jm/cidaproj2.htm
+http://www.cidb.ie/live.nsf/0/27d6bdcc6629698580256dc9004d5f34?OpenDocument
+http://www.cidcm.umd.edu/inscr/stfail/
+http://www.cidh.oas.org/countryrep/Uruguay78eng/chap.7.htm
+http://www.cie.ca/otherpro.htm
+http://www.ciec.org/
+http://www.cieca-drivinglicense.org/html/eng/Advanced/ENG_EXAMPLE_4_2.htm
+http://www.ciee.org/volunteer/terms_conditions.aspx
+http://www.cieh.org/about/policy/responses/illegal_meat_imports.htm
+http://www.ciel.org/Ifi/ifibs.html
+http://www.ciena.com/jp/news/news_619.htm
+http://www.ciena.com/news/news_619.htm
+http://www.ciera.org/library/archive/1999-01/art-online-99-01.html
+http://www.cietours.com/2005vacations/GoAsYouPleaseIreland2005.htm
+http://www.cieux.com/bm/fun.html
+http://www.cifunds.com/web/straighttalk/straight.jsp?lang=ENG&no=2
+http://www.cigaraficionado.com/Cigar/CA_Features/CA_Feature_Basic_Template/0,2344,570,00.html
+http://www.cihr-irsc.gc.ca/e/10968.html
+http://www.cihr-irsc.gc.ca/e/1384.html
+http://www.cihr-irsc.gc.ca/e/27819.html
+http://www.ciis.org.cn/item/2004-12-24/50698.html
+http://www.cilicia.com/armo10c-nyt19151008a.html
+http://www.cilip.org.uk/jobscareers/careeradvice/workingforyourself
+http://www.cilip.org.uk/professionalguidance/ethics
+http://www.cilip.org.uk/publications/updatemagazine/archive/archive2004/november/lorcan.htm
+http://www.cilt.org.uk/green_paper_response.htm
+http://www.cim.sfu.ca/pages/resources_collaborative.htm
+http://www.cimaworld.com/htdocs/targets.htm
+http://www.cimdata.com/PLM/cpdm.html
+http://www.cimetrix.com/launch.cfm?file_load=CIMPortalBeta.html
+http://www.cin.org/jp2/jp97jan1.html
+http://www.cin.org/users/james/ebooks/master/trent/tsacr-m.htm
+http://www.cin.org/users/james/files/lent.htm
+http://www.cincinnati.com/reds/peterose.html
+http://www.cincinnatichildrens.org/give/lb/archives/apr-03/bike.htm
+http://www.cincinnatichildrens.org/health/heart-encyclopedia/signs/chf.htm
+http://www.cincinnatichildrens.org/research/administration/ipvd/licensing/proprietary/eosinophilic-treatment.htm
+http://www.cincinnatiusa.org/faq.asp
+http://www.cincom.com/global/eng/careers/colleagues.html
+http://www.cincypost.com/2004/03/31/pobook033104.html
+http://www.cincypost.com/news/1997/chase061697.html
+http://www.cinderellaaupairs.co.uk/family.htm
+http://www.cindyrushton.com/cgi-bin/cutecast/cutecast.pl?session=BafNA1cVEmHWI8cZa6vAbnccam&forum=16&thread=564&page=
+http://www.cindyseyeofthemoon.com/shop/default.asp?ID=27
+http://www.cinefex.com/weeklyupdate/mailings/17_05112004/web.html
+http://www.cineform.com/customer/ArialFoundation/ArialFoundation.htm
+http://www.cinema-crazed.com/mansquito.htm
+http://www.cinema.com/films/4814/broken_hearts_club/production_notes.phtml
+http://www.cinemablend.com/review.php?id=535
+http://www.cinemainfocus.com/Waterworld_2.htm
+http://www.cineman.co.uk/absolute.html
+http://www.cineman.co.uk/role.html
+http://www.cineman.co.uk/super35.html
+http://www.cinemarati.org/features/awards2001.shtml
+http://www.cinemareview.com/production.asp?prodid=2982
+http://www.cinemascreen.co.uk/filmdata/filmdata.asp?filmid=6561
+http://www.cinemasense.com/Reviews/BeautifulMind.htm
+http://www.cinematography.com/forum2004/lofiversion/index.php?t1121.html
+http://www.cinematography.net/Pages%20DW/OnSetColourCorrection.htm
+http://www.cinemaweb.com/silentfilm/bookshelf/32_inv_6.htm
+http://www.cinemaweb.com/silentfilm/bookshelf/32_inv_9.htm
+http://www.cinemusic.net/reviews/2003/from_beyond.html
+http://www.cinemusic.net/reviews/2004/final_cut.html
+http://www.cinemusic.net/reviews/2004/fog_of_war.html
+http://www.cinenikki.com/Pages/DVD/BrassEyeRegion2/
+http://www.cinenikki.com/Pages/DVD/MADEandSwingersTheMoneyCollection/
+http://www.cinepad.com/vatican.htm
+http://www.cinephilia.net.au/show_links.php?category=Australian
+http://www.cinescene.com/Nat/chimney.html
+http://www.cintel.co.kr/eng/prodt/pack/prodt_pack_ica_03.asp
+http://www.cintelliq.com/res_photo.htm
+http://www.cio-dpi.gc.ca/emf-cag/ppto-gtpss/projplantemplate/ppt-mpp00_e.asp
+http://www.cio-dpi.gc.ca/im-gi/mwg-gtm/typ-typ/docs/2003/schem/schem_e.asp
+http://www.cio.com.au/index.php/id;1473509389;fp;4;fpid;7
+http://www.cio.com.au/index.php/id;200194937;fp;262144;fpid;1
+http://www.cio.com/
+http://www.cio.com/analyst/112801_ca.html
+http://www.cio.com/archive/010102/shop_content.html
+http://www.cio.com/archive/010199_know.html
+http://www.cio.com/archive/021502/security.html
+http://www.cio.com/archive/030100/chase.html
+http://www.cio.com/archive/030105/reality.html
+http://www.cio.com/archive/031504/analysts.html
+http://www.cio.com/archive/031505/leadership.html
+http://www.cio.com/archive/040101/remote.html
+http://www.cio.com/archive/040105/keynote_sidebar_one.html
+http://www.cio.com/archive/041504/excerpt.html
+http://www.cio.com/archive/050103/bad.html
+http://www.cio.com/archive/050103/bad.html?printversion=yes
+http://www.cio.com/archive/050103/portfolio.html
+http://www.cio.com/archive/051502/excerpt.html
+http://www.cio.com/archive/060101/fbi.html
+http://www.cio.com/archive/060104/project.html
+http://www.cio.com/archive/061504/infrastructure.html
+http://www.cio.com/archive/061504/infrastructure.html?printversion=yes
+http://www.cio.com/archive/061505/km.html
+http://www.cio.com/archive/061505/km.html?printversion=yes
+http://www.cio.com/archive/071502/value_financial.html
+http://www.cio.com/archive/090103/money.html
+http://www.cio.com/archive/100102/et_article.html
+http://www.cio.com/archive/101504/km.html
+http://www.cio.com/archive/101504/km.html?printversion=yes
+http://www.cio.com/archive/101504/school.html
+http://www.cio.com/archive/110104/risk.html?printversion=yes
+http://www.cio.com/archive/120102/budget.html?printversion=yes
+http://www.cio.com/archive/enterprise/051599_hs.html
+http://www.cio.com/archive/enterprise/101599_book.html
+http://www.cio.com/communications/edit/glossary.html?action=print
+http://www.cio.noaa.gov/hpcc/access/technews.htm
+http://www.ciobinternational.org/openArticle.asp?ArticleID=4531
+http://www.cioinsight.com/article2/0,1397,1458937,00.asp
+http://www.cioinsight.com/article2/0,1397,1459031,00.asp
+http://www.cioinsight.com/article2/0,1397,1570310,00.asp
+http://www.cioinsight.com/article2/0,1397,1822493,00.asp
+http://www.cioinsight.com/article2/0,1397,1826510,00.asp
+http://www.cioinsight.com/article2/0,1397,1828544,00.asp
+http://www.cioinsight.com/article2/0,1397,1828546,00.asp
+http://www.cios.org/getfile%5CPryluck_V5N195
+http://www.cipd.co.uk/annualconf-ex
+http://www.cipd.co.uk/cande/annconf2005.htm
+http://www.cipd.co.uk/helpingpeoplelearn/researchinpractice_3.asp
+http://www.cipd.co.uk/subjects/corpstrtgy/busiperfm/peoperfki.htm
+http://www.cipd.co.uk/subjects/corpstrtgy/busiperfm/peoperfki.htm?IsSrchRes=1
+http://www.cipd.co.uk/subjects/empbnfts/flexbens/flexiben.htm
+http://www.cipd.co.uk/subjects/hrpract/general/webepolicy.htm
+http://www.cipd.co.uk/subjects/maneco/ecolabmrkt/
+http://www.cipdd.org/cipdd/_a&s/a&s1998/septem~1.htm
+http://www.cipe.org/publications/fs/ert/e13/north-3.htm
+http://www.cipe.org/publications/fs/ert/e25/grahae25.htm
+http://www.cipfa.org.uk/publicfinance/features_details.cfm?News_id=24045
+http://www.cira.ca/en/cat_Registrar.html
+http://www.circinfo.com/methods/circ_methods.html
+http://www.circleofa.com/Q_and_A/denial.html
+http://www.circleofa.com/articles/personal_teacher.html
+http://www.circleofseeds.com/GardeningWithKids.html
+http://www.circlon-theory.com/HTML/earthfallsup.html
+http://www.circuitree.com/CDA/ArticleInformation/coverstory/BNPCoverStoryItem/0,2135,19600,00.html
+http://www.circularstrengthmag.com/27/sonnon6.html
+http://www.circus2iraq.org/updates.asp?page=56
+http://www.circuses.com/fact-george.asp
+http://www.circuses.com/ringling-complaint1.asp
+http://www.cirencester.co.uk/eat.asp
+http://www.ciri.org/resources/reading_room/articles/stock_exchanges/
+http://www.ciri.org/resources/reading_room/street/
+http://www.ciri.org/resources/reading_room/street/?sort_field=a.article_created_date&sort_dir=ASC
+http://www.ciriusonline.dk/Default.asp?id=3799&Printerfriendly=1
+http://www.ciriusonline.dk/default.asp?id=3799
+http://www.cirnetwork.org/education/pphh/index.cfm
+http://www.cirp.org/library/ethics/milos-macris/
+http://www.cirp.org/library/pain/
+http://www.cirp.org/library/psych/rhinehart1/
+http://www.cirt.org/public/pages/index.cfm?pageid=166
+http://www.cirtl.org/partial.htm
+http://www.cis-ieee.org/excomminutes.asp?mm=2004-02
+http://www.cis.org.au/IssueAnalysis/ia23/IA23.htm
+http://www.cis.org.au/IssueAnalysis/ia26/IA26.htm
+http://www.cis.org.au/IssueAnalysis/ia33/ia33.htm
+http://www.cis.org/articles/2002/back1302.html
+http://www.cis.org/articles/2002/back1402.html
+http://www.cis.org/articles/2002/back203.html
+http://www.cis.org/articles/2002/back902.html
+http://www.cis.org/articles/2004/marktestimony032404.html
+http://www.cis.org/articles/2004/petertestimony021304.html
+http://www.cis.temple.edu/~ingargio/cis587/readings/id3-c45.html
+http://www.cis.upenn.edu/~wjposer/RedetManual.html
+http://www.cis.yale.edu/ynhti/curriculum/units/1981/cthistory/81.ch.04.x.html
+http://www.cisatlantic.com/trimix/emaiken/Argon.htm
+http://www.cisco.com/en/US/about/ac123/iqmagazine/archives/q2_2004/features/wyntk.html
+http://www.cisco.com/en/US/netsol/ns339/ns395/ns360/ns365/networking_solutions_customer_profile09186a00801dfeaf.html
+http://www.cisco.com/en/US/netsol/ns339/ns395/ns360/ns372/networking_solutions_customer_profile09186a008014d400.html
+http://www.cisco.com/en/US/netsol/ns339/ns395/ns360/ns372/networking_solutions_customer_profile09186a00801dfeaf.html
+http://www.cisco.com/en/US/netsol/ns340/ns394/ns107/networking_solutions_customer_profile09186a008014d400.html
+http://www.cisco.com/en/US/netsol/ns340/ns394/ns165/ns45/ns14/net_value_proposition09186a00800b4363.html
+http://www.cisco.com/en/US/netsol/ns341/ns396/ns114/networking_solutions_audience_business_benefit0900aecd80119de9.html
+http://www.cisco.com/en/US/netsol/ns341/ns396/ns177/networking_solutions_white_paper0900aecd8013f65a.shtml
+http://www.cisco.com/en/US/netsol/ns341/ns396/ns223/networking_solutions_white_paper09186a00800a11a2.shtml
+http://www.cisco.com/en/US/netsol/ns341/ns396/ns223/ns227/networking_solutions_white_paper09186a00800a11a2.shtml
+http://www.cisco.com/en/US/netsol/ns470/networking_solutions_customer_profile0900aecd801bca40.html
+http://www.cisco.com/en/US/netsol/ns477/networking_solutions_white_paper0900aecd80162f66.shtml
+http://www.cisco.com/en/US/products/hw/gatecont/ps3869/products_configuration_guide_chapter09186a00801e737c.html
+http://www.cisco.com/en/US/products/hw/gatecont/ps3869/products_configuration_guide_chapter09186a00801e737e.html
+http://www.cisco.com/en/US/products/hw/gatecont/ps3869/products_configuration_guide_chapter09186a00801e737f.html
+http://www.cisco.com/en/US/products/hw/switches/ps1901/products_white_paper09186a0080088896.shtml
+http://www.cisco.com/en/US/products/hw/switches/ps1938/products_configuration_guide_chapter09186a00802daef9.html
+http://www.cisco.com/en/US/products/hw/switches/ps1938/products_configuration_guide_chapter09186a00802daefc.html
+http://www.cisco.com/en/US/products/hw/switches/ps1938/products_configuration_guide_chapter09186a00802daefd.html
+http://www.cisco.com/en/US/products/hw/switches/ps293/products_white_paper09186a0080088896.shtml
+http://www.cisco.com/en/US/products/hw/wireless/ps430/prod_business_case09186a0080155835.html
+http://www.cisco.com/en/US/products/hw/wireless/ps430/products_case_study09186a00801f96ee.shtml
+http://www.cisco.com/en/US/products/ps5888/prod_bulletin0900aecd800fd124.html
+http://www.cisco.com/en/US/products/sw/conntsw/ps491/products_case_study09186a00800a18ca.shtml
+http://www.cisco.com/en/US/products/sw/iosswrel/ps5207/products_configuration_guide_chapter09186a008020ecff.html
+http://www.cisco.com/en/US/products/sw/secursw/ps2086/products_case_study09186a008014d400.shtml
+http://www.cisco.com/univercd/cc/td/doc/cisintwk/ics/cs003.htm
+http://www.cisco.com/univercd/cc/td/doc/product/lan/c2900xl/29_35xu/scg/kiclust.htm
+http://www.cisco.com/warp/public/477/RMON/alarm_event.shtml
+http://www.ciscopress.com/articles/article.asp?p=29640&seqNum=2
+http://www.ciscopress.com/articles/article.asp?p=30686
+http://www.ciscopress.com/series/index.asp
+http://www.cise.ufl.edu/~apol/services/distributions.htm
+http://www.cisga.org/QA.html
+http://www.cistercianfamily.org/e-document10.asp
+http://www.cisv.ca/whatispeace.htm
+http://www.cit.cornell.edu/computer/history/Ostrom.html
+http://www.cit.cornell.edu/services/phones/digital.html
+http://www.cit.nih.gov/dnst/DNSTweb/voice_mail.html
+http://www.citb.co.uk/site_info/bookshop_terms.asp
+http://www.citejournal.org/vol1/iss2/currentpractice/article1.htm
+http://www.citejournal.org/vol1/iss2/seminal/article1.htm
+http://www.citiesthatwork.com/Present/TEA21pres/TEA21_position_FAPA.htm
+http://www.citistates.com/blogs/homepageblog/archives/000127.html
+http://www.citizen.org/cmep/energy_enviro_nuclear/nuclear_power_plants/reactor_safety/articles.cfm?ID=4446
+http://www.citizen.org/trade/issues/singapore/articles.cfm?ID=9671
+http://www.citizencorps.gov/ready/faq.shtm
+http://www.citizensadvice.org.uk/macnn/index/campaigns/social_policy/consultation_responses/cr_legalaffairs/cr_communications_bill
+http://www.citizensadvice.org.uk/macnn/index/campaigns/social_policy/parliamentary_briefings/pb_benefitsandtaxcredits/tax_credit_bill_-_exercise_of_right_of_appeal
+http://www.citizensadvice.org.uk/macnn/index/campaigns/social_policy/parliamentary_briefings/pb_legalaffairs/cr_anti-social_behaviour_bill
+http://www.citizensadvice.org.uk/macnn/index/pressoffice/press_index/press-040315.htm
+http://www.citizensagainstsellingtelstra.com/content/2/line-rental.html
+http://www.citizenschools.org/teachingfellows/fellowscircle-april2004.cfm
+http://www.citizenshipfoundation.org.uk/main/news.php?p96
+http://www.citizensleague.net/blogs/homepageblog/archives/2004_03.html
+http://www.citrix.com/site/PS/products/caseStudies.asp?familyID=19&productID=186
+http://www.city-data.com/city/Evening-Shade-Arkansas.html
+http://www.city-data.com/city/Evening-Shade-Oklahoma.html
+http://www.city-data.com/city/Kingston-Rhode-Island.html
+http://www.city-journal.org/article01.php?aid=1508
+http://www.city-journal.org/html/eon_8_19_03sm.html
+http://www.city-net.com/~amandel/portfolio/masters.html
+http://www.city-visitor.com/york/
+http://www.city.ac.uk/healthservice/student/finding.htm
+http://www.city.ac.uk/is_media/print/default_print_1_2769_2769.html
+http://www.city.ames.ia.us/parkrecweb/CommunityCtr.html
+http://www.city.davis.ca.us/pcs/rec/gymnastics/
+http://www.city.hamilton.on.ca/CITY-HALL/parking-and-enforcement/enforcement-operations/default.asp
+http://www.city.kenora.on.ca/city_of_kenora/planning_building/official_plan.html
+http://www.city.kingston.on.ca/
+http://www.city.langley.bc.ca/
+http://www.city.londonmet.ac.uk/deliberations/collab.learning/panitz2.html
+http://www.city.melville.sk.ca/recreation.html
+http://www.city.port-coquitlam.bc.ca/Dynamic/Page275.aspx
+http://www.city.port-coquitlam.bc.ca/Dynamic/Page425.aspx
+http://www.city.port-coquitlam.bc.ca/Dynamic/Page603.aspx
+http://www.city.port-coquitlam.bc.ca/Dynamic/Page605.aspx
+http://www.city.port-coquitlam.bc.ca/Dynamic/Page607.aspx
+http://www.city.port-coquitlam.bc.ca/Page1310.aspx
+http://www.city.toronto.on.ca/fire/prevention/christmas_tree.htm
+http://www.city.toronto.on.ca/publications/cracks.htm
+http://www.city.vancouver.bc.ca/commsvcs/cityplans/transportation/insightintotransportation.htm
+http://www.city.vancouver.bc.ca/commsvcs/planning/udp/2005/minutes/apr13.htm
+http://www.city.vancouver.bc.ca/commsvcs/planning/udp/2005/minutes/apr27.htm
+http://www.city.vancouver.bc.ca/ctyclerk/cclerk/960730/ag960730.htm
+http://www.city.victoria.bc.ca/cityhall/currentprojects_dockside_qna2.shtml
+http://www.city.waltham.ma.us/emweb/trucks.html
+http://www.city.west-lafayette.in.us/government/minutes/cc050602.htm
+http://www.citybeat.com/2002-06-20/sports.shtml
+http://www.citybeat.com/2003-03-05/musicshorttakes.shtml
+http://www.citybeat.com/2004-12-22/cover5.shtml
+http://www.cityequities.com/penny_share_review.asp
+http://www.cityequities.com/penny_share_review.asp?issue=121
+http://www.cityequities.com/penny_share_review.asp?issue=172
+http://www.cityequities.com/penny_share_review.asp?issue=194
+http://www.cityequities.com/penny_share_review.asp?issue=220
+http://www.cityequities.com/penny_share_review.asp?issue=221
+http://www.cityequities.com/penny_share_review.asp?issue=251
+http://www.cityequities.com/penny_share_review.asp?issue=272
+http://www.cityequities.com/uk_company_information.html
+http://www.cityfarmer.org/
+http://www.cityfeet.com/Tools/Glossary/CommercialRealEstateGlossary.aspx
+http://www.cityfeet.com/tools/glossary.asp
+http://www.cityindex.co.uk/citymobile/home.aspx
+http://www.citylinks.org.uk/Default.aspx
+http://www.citymarket.coop/
+http://www.citymayors.com/
+http://www.citymayors.com/business/euro_bizcities.html
+http://www.citymayors.com/gratis/us_mayors.html
+http://www.citymayors.com/politics/uk_neref.html
+http://www.citymayors.com/sections/organisations_content.html
+http://www.citymayors.com/sport/olympics2012_votescast.html
+http://www.cityofalhambra.org/government/city_manager.html
+http://www.cityofbeaumont.com/hist.htm
+http://www.cityofboston.gov/bra/press/PressDisplay.asp?pressID=153
+http://www.cityofbuckley.com/
+http://www.cityofchino.org/
+http://www.cityofcordova.net/council%20minutes%2004/MIN%209-2-04%20PZ.htm
+http://www.cityofcumming.net/Departments/Fairgrounds/Fair/Heritage_Village/heritage_village.html
+http://www.cityofdunedin.com/city/?page=consult_taeirilb
+http://www.cityoffortwayne.org/metro2/courtdecisions.htm
+http://www.cityofhancock.com/info-housing.html
+http://www.cityofhawarden.com/Gov/Min/04min/04-28-04.html
+http://www.cityofhope.org/BloodDonorCenter/bloodDon.htm
+http://www.cityofhope.org/ccc/db/cancer.asp?c=CDR0000062944
+http://www.cityofindustry.org/dex_14.html
+http://www.cityofkingston.ca/residents/recreation/events/november11.asp
+http://www.cityofmyrtlebeach.com/employ.html
+http://www.cityofoxford.org/Page.asp?NavID=699
+http://www.cityofparma-oh.gov/cityhall/service.htm
+http://www.cityofportaransas.org/employment.html
+http://www.cityofsancarlos.org/is/display/0,1124,deptid-20_isid-682,00.html
+http://www.cityofsancarlos.org/jobs/announcement_print/1,1147,deptid-15_jobid-15,00.html
+http://www.cityofseattle.net/commnty/histsea/preservationseattle/techniques/defaultaugust2.htm
+http://www.cityofseattle.net/light/conserve/sustainability/
+http://www.cityofseattle.net/parks/centers/BitterLake/activity.htm
+http://www.cityofseattle.net/tda/talkingpoints.htm
+http://www.cityofsedgwick.org/minutes.htm
+http://www.cityofsound.com/blog/2005/06/the_theft_of_be.html
+http://www.cityofsouthlake.com/recreation/Special%20Events/FallWinter/BooBooBuddies/what's%20a%20dog%20park.htm
+http://www.cityofstandrews.co.uk/link.asp?TOPIC_ID=586&view=lasttopic
+http://www.cityofswan.com/altonepark/staff.asp
+http://www.cityofsydney.nsw.gov.au/catz_ditc_das_on_exhibition.asp
+http://www.cityofsydney.nsw.gov.au/catz_rs_road_safety_strategy.asp
+http://www.cityofyork.com/econfact/company.htm
+http://www.cityofyork.com/tourinfo/faq.htm
+http://www.citypages.com/databank/19/907/article4801.asp
+http://www.citypages.com/databank/25/1240/article12443.asp
+http://www.citypages.com/databank/25/1253/article12756.asp
+http://www.citypages.com/databank/26/1264/article12985.asp
+http://www.citypages.com/databank/26/1280/article13405.asp
+http://www.citypages.com/databank/26/1280/article13407.asp
+http://www.citypages.com/detail.asp?ArticleID=10848
+http://www.citypages.com/detail.asp?ArticleID=11845
+http://www.citypages.com/detail.asp?ArticleID=12459
+http://www.citypages.com/detail.asp?ArticleID=4801
+http://www.citypaper.com/news/story.asp?id=10101
+http://www.citypaper.com/special/story.asp?id=9453
+http://www.citypaper.net/articles/101801/news.godfrey.shtml
+http://www.citypaper.net/articles/121699/news.cb.blue.shtml
+http://www.citysoftware.com.au/Privacy.asp
+http://www.citytech.cuny.edu/academics/continuinged/
+http://www.cityu.edu.hk/HKMetS/acid_guide.htm
+http://www.cityu.edu.hk/cityu/course/deptcurr/eecurr/ee6412.htm
+http://www.cityweekend.com.cn/en/features/2003_08/Profile_LiuHong
+http://www.citywindsor.ca/000881.asp
+http://www.citywire.co.uk/News/NewsArticle.aspx?VersionID=70287
+http://www.citywire.co.uk/News/NewsArticle.aspx?VersionID=70287&MenuKey=News
+http://www.cityyear.org/alumni/enews/feb-2004/events.htm
+http://www.cityzones.co.uk/albertroad.html
+http://www.civc.ca/about/security.asp
+http://www.civeng.unsw.edu.au/about/IAC/Env/
+http://www.civicgardencentre.org/aboutcgc.htm
+http://www.civicheraldry.co.uk/leics.html
+http://www.civics-online.org/library/formatted/texts/house_divided.html
+http://www.civictrust.org.uk/evening/events.shtml
+http://www.civil-war.net/pages/georgia_declaration.asp
+http://www.civil.canterbury.ac.nz/staff/cfleischmann.asp
+http://www.civil.canterbury.ac.nz/staff/pmoss.asp
+http://www.civildefence.govt.nz/memwebsite.nsf/wpg_URL/For-the-CDEM-Sector-Emergency-Update-Waiho-River?OpenDocument&menuexpand=forthecdemsector&topicexpand=forthecdemsectoremergencyupdate
+http://www.civilization.ca/archeo/hnpc/npvol30e.html
+http://www.civilization.ca/media/docs/fsddd01e.html
+http://www.civilrights.org/research_center/civilrights101/desegregation.html
+http://www.civilrightsteaching.org/assemblyspotlight.htm
+http://www.civilservice.gov.uk/improving_services/delivery_and_reform/news/nsg_and_reform_progress.asp
+http://www.civilwarartillery.com/inventors/Parrott.htm
+http://www.civilwarhome.com/chattanoogasummary.htm
+http://www.civilwarhome.com/confedsignalcorps.htm
+http://www.civilwarhome.com/gordonwilderness1.htm
+http://www.civilwarhome.com/grantbio.htm
+http://www.civilwarhome.com/hoodnash.htm
+http://www.civilwarhome.com/shermangeorgia.htm
+http://www.civilwarhome.com/southernseccession.htm
+http://www.civilwarhome.com/unioncav.htm
+http://www.civilwarmedicine.aphillcsa.com/article.html
+http://www.civilwarweb.com/articles/04-99/medicine.htm
+http://www.civilweek.com/1863/feb0163.htm
+http://www.civitas.org.uk/pubs/NHSBriefingApr05.php
+http://www.ciwec-clinic.com/altitude/alti2.html
+http://www.ciwec-clinic.com/diar/
+http://www.ciwmb.ca.gov/MktGuides/Glass/
+http://www.ciwmb.ca.gov/Packaging/Design/TotalPkg.htm
+http://www.ciwmb.ca.gov/Rulemaking/DRSAdjMethod/
+http://www.cix.co.uk/~briksdal/escape/
+http://www.cix.co.uk/~jimh/weblog/2003_04_01_archive.html
+http://www.cj-hosting.com/?page=terms
+http://www.cjac.org/balance/bal3-97.html
+http://www.cjc-online.ca/viewarticle.php?id=73&layout=html
+http://www.cjcj.org/cpp/prisoners_toughen.html
+http://www.cjcj.org/pubs/florida/florida.html
+http://www.cjd.org/paper/people.html
+http://www.cjlf.org/briefs/hghtn3.htm
+http://www.cjlmilwaukee.org/Video/Video%20Catalog%201/Women%20Sections/WOMEN%20(A-H).htm
+http://www.cjlmilwaukee.org/Video/Video%20Catalog%201/World%20Jewry%20Sections/American%20Jewry%20(H-K).htm
+http://www.cjlmilwaukee.org/Video/Video%20Catalog%201/World%20Jewry%20Sections/Soviet%20Jewry.htm
+http://www.cjonline.com/decision2002/generalelection/grid.secretaryofstate.shtml
+http://www.cjonline.com/stories/052404/loc_citygovt.shtml
+http://www.cjr.org/issues/2003/5/lie-greenberg.asp
+http://www.cjr.org/issues/2004/4/felch-peru.asp
+http://www.cjr.org/issues/2004/6/letter-berkeley-siamdoust.asp
+http://www.cjr.org/issues/2004/6/mooney-science.asp
+http://www.cjr.org/issues/2005/1/goldman-caste.asp
+http://www.cjr.org/issues/2005/1/maharidge-hurt.asp
+http://www.cjr.org/issues/2005/1/pein-blog.asp
+http://www.cjr.org/issues/2005/3/hst.asp
+http://www.cjr.org/tools/lc/who.asp
+http://www.cjrdaily.org/archives/000924.asp
+http://www.cjrdaily.org/archives/001121.asp
+http://www.cjrdaily.org/archives/001566.asp
+http://www.cjvlang.com/Writing/writsys/writchin3.html
+http://www.ckbc.org/DonateBlood.jsp
+http://www.ckco.ca/weatherfacts.php
+http://www.cknow.com/cknewsletter/0303.htm
+http://www.cknow.com/vtutor/vtfalseauth.htm
+http://www.ckrumlov.cz/uk/region/histor/t_sport.htm
+http://www.ckrumlov.cz/uk/zamek/zahrada/t_oziven.htm
+http://www.cksales.com/shopdisplayproducts.asp?id=109&cat=Sit+%26+Be+Fit
+http://www.cl.cam.ac.uk/UoCCL/research_degrees/
+http://www.cl.cam.ac.uk/users/mn200/music/composers.html
+http://www.cl.cam.ac.uk/users/rja14/wtc.html
+http://www.cl.cam.ac.uk/~mgk25/ca-law/
+http://www.cl.cam.ac.uk/~rnc1/descrack/
+http://www.cla-net.org/resources/articles/minow_pirating.php
+http://www.cla.sc.edu/PSYC/psycugrad/ugindep.html
+http://www.clac.ca/information/labour_board_decisions/062701.asp
+http://www.clac.ca/publications/government_submissions/Time-For-Change.asp
+http://www.clac.ca/publications/government_submissions/submission-to-section-3-committee.asp
+http://www.clagnut.com/archive/design_thinking/
+http://www.clagnut.com/blog/168/
+http://www.claimsguides.com/
+http://www.clal.org/coc16.html
+http://www.clambake.org/archive/books/apobs/bs1-3.htm
+http://www.clambake.org/archive/books/isd/isd-2n.htm
+http://www.clamcity.com/june2001/pg15jesus.html
+http://www.clannada.org/docs/culture.html
+http://www.clanofthecats.com/fanfic/The%20Son%20of%20the%20Return__%20by%20John%20Beattie.htm
+http://www.clansofscotland.org/bloodandsnow.html
+http://www.clare.cam.ac.uk/admissions/interviews.html
+http://www.clare.cam.ac.uk/admissions/subjects/land-econ.html
+http://www.clarelibrary.ie/eolas/coclare/history/holiday_haunts/blackhead.htm
+http://www.claremont.org/
+http://www.claremont.org/weblog/
+http://www.claremont.org/weblog/2004_01.html
+http://www.claremont.org/writings/keyword-morality_natlaw.html
+http://www.clarifyingchristianity.com/creation.shtml
+http://www.clarinetstudio.com/artists/cipolla.htm
+http://www.clarityworks.biz/Resources/GoodStuff.htm
+http://www.clarkconnect.org/forums/showflat.php?Cat=&Board=backup&Number=59568&page=0&view=expanded&sb=5&o=&fpart=
+http://www.clarkconnect.org/forums/showflat.php?Cat=&Board=backup&Number=59691&page=0&view=expanded&sb=5&o=&fpart=
+http://www.clarke-energy.co.uk/clarke_group/vacancies.htm
+http://www.clarkson.edu/giving/annual_giving/
+http://www.clarku.edu/newsite/alumni/clarknews/fall01/summer.shtml
+http://www.clarku.edu/offices/dos/newstudents/parents/advice.shtml
+http://www.clarku.edu/offices/research/funding/undergrad.shtml
+http://www.clas.ufl.edu/CLAS/jur/0401/mcgradypaper.html
+http://www.clas.ufl.edu/users/gthursby/rel/gate/return.htm
+http://www.clas.ufl.edu/users/gthursby/socsci/ejournal.htm
+http://www.clas.ufl.edu/users/gthursby/taoism/suntext.htm
+http://www.clas.ufl.edu/users/gthursby/taoism/ttcmerel.htm
+http://www.clas.uiowa.edu/faculty/teaching/summer_winter_sessions.shtml
+http://www.classbrain.com/artteenst/publish/article_120.shtml
+http://www.classervices.com/dawnmooring.htm
+http://www.classervices.com/poppysmith.htm
+http://www.classervices.com/secrets.html
+http://www.classic.archined.nl/news/0111/westelijke_tuinsteden_amsterdam_eng.html
+http://www.classical.net/music/comp.lst/copland.html
+http://www.classical.net/music/comp.lst/works/stravinsky/fieryangel.html
+http://www.classicaldressage.co.uk/Sitting_Trot_Woes/sitting_trot_woes.html
+http://www.classicalfencing.com/articles/Palladini.shtml
+http://www.classicalhomeschooling.org/trivium.html
+http://www.classicallibrary.org/maupassant/ossv7/1.htm
+http://www.classicalpursuits.com/toplevel/testimonials.php
+http://www.classicalsource.com/db_control/db_features.php?id=2557
+http://www.classicalvalues.com/
+http://www.classicalvalues.com/archives/001450.html
+http://www.classicalvalues.com/archives/001968.html
+http://www.classicalvalues.com/archives/002454.html
+http://www.classicalvalues.com/archives/2004_03.html
+http://www.classiccarsofne.com/about.htm
+http://www.classiccinemas.com/
+http://www.classicgaming.com/
+http://www.classicgaming.com/doubledragon/ddvcastle.htm
+http://www.classicgaming.com/features/articles/computergaminghistory/index4-3.shtml
+http://www.classicglassstudio.com/contact/Testimonials.asp
+http://www.classicglastron.com/
+http://www.classicmovies.org/
+http://www.classicreader.com/read.php/sid./bookid.221/sec.33/
+http://www.classicreader.com/read.php/sid./bookid.2345/sec.10/
+http://www.classicreader.com/read.php/sid.6/bookid.2160/
+http://www.classicreader.com/read.php/sid.6/bookid.255/
+http://www.classicreader.com/read.php/sid.6/bookid.2953/
+http://www.classicreader.com/read.php/sid.6/bookid.3001/
+http://www.classics.cam.ac.uk/triennial/
+http://www.classicturning.com/contact.php
+http://www.classifiedpost.com/jsarticle.php?lcid=HK.EN&artid=3000007385&arttype=MOVE&artsection=CAREER&communitycode=
+http://www.classontheweb.com/samples/getsetgo/cbse/clas7/science/chap6a.htm
+http://www.classsizematters.org/
+http://www.classtraining.com.au/services/sbtrnfac.htm
+http://www.clausewitz.com/CWZHOME/On_War/Bk5ch12.html
+http://www.clausewitz.com/CWZHOME/On_War/Bk6ch23.html
+http://www.clausewitz.com/CWZHOME/Trinity/TrinityTeachingNote.htm
+http://www.clavius.org/perspshdw.html
+http://www.clay.net/conf.html
+http://www.claytoncramer.com/popularmagazines.htm
+http://www.clc.com.hk/link.html
+http://www.clchamber.com/programs.cfm
+http://www.cle.bc.ca/CLE/Contributors/Profiles/F/FISBA0.htm
+http://www.clean-credit.us/how.to.budget.your.spending.htm
+http://www.clean-funnies.com/html/f458.htm
+http://www.cleanair-coolplanet.org/information/seriouswind.php
+http://www.cleanair.com/About/FAQ/faq.html
+http://www.cleanair.org/CEH/CEHHazards.html
+http://www.cleanairchampions.ca/onetonnechallenge/default.asp?title=aboutotc
+http://www.cleanairtrust.org/
+http://www.cleanclothes.org/codes/fifa.htm
+http://www.cleanclothes.org/urgent/01-02-21-2.htm
+http://www.cleanedge.com/reports-trends2005.php
+http://www.cleanerproduction.com/misc/pubs/Nepalarticle.html
+http://www.cleanlink.com/cp/article.asp?id=1651
+http://www.cleansweepsupply.com/pages/skugroup30992.html
+http://www.cleansweepsupply.com/pages/skugroup30997.html
+http://www.cleansweepsupply.com/pages/skugroup30999.html
+http://www.clearanswers.co.uk/newsstory.aspx?NewsID=61
+http://www.clearanswers.co.uk/newsstory.aspx?NewsID=77
+http://www.cleardata.biz/articles/storedproc.aspx
+http://www.clearharmony.net/
+http://www.clearharmony.net/articles/200405/19529.html
+http://www.clearharmony.net/articles/200406/20329.html
+http://www.clearharmony.net/articles/200409/21965.html
+http://www.clearharmony.net/articles/200411/22916.html
+http://www.clearharmony.net/articles/200505/26337.html
+http://www.clearharmony.net/articles/200505/26337p.html
+http://www.clearpassage.com/contactus2.htm
+http://www.clearpathinternational.org/casestudies/archives/000267.php
+http://www.cleartest.com/testinfo/woody_harrelson.html
+http://www.cleftadvocate.org/cleftteams.html
+http://www.cleftline.org/publications/choosingTeam.htm
+http://www.clementsonresort.com/spring04.html
+http://www.clemmer.net/books/tldpp_intro.shtml
+http://www.clemmer.net/excerpts/pf_whatweget.html
+http://www.clemmer.net/excerpts/whatwe_get.shtml
+http://www.clemmer.net/newsl/dec2003pf.html
+http://www.clemmer.net/newsl/jan2004pf.html
+http://www.clemmer.net/newsl/july2003.html
+http://www.clemmer.net/newsl/july2003pf.html
+http://www.clemmer.net/newsl/sept2003pf.html
+http://www.clemmonscourier.com/obits12.shtml
+http://www.cleoscholars.com/applying_to_law_school/finaid.htm
+http://www.cleovoulou.com/wcgames.htm
+http://www.clerk.co.hernando.fl.us/Other/AlternativeCourts.html
+http://www.cleveland.oh.us/wmv_news/jherr71.htm
+http://www.clevelandacupuncture.com/newpatient.html
+http://www.clevelandart.org/Kids/art/glass/
+http://www.clevelandbrowns.com/news_room/press/arts/3797.0.html
+http://www.clevelandcinemas.com/cedarlee/coming_attractions.asp
+http://www.clevelandclinic.org/cancer/trial/
+http://www.clevelandclinic.org/health/health-info/docs/0300/0359.asp?index=4485
+http://www.clevelandclinic.org/health/health-info/docs/3300/3313.asp?index=11311
+http://www.clevelandclinic.org/heartcenter/pub/history/future/intervention.asp?firstCat=56&secondCat=57&thirdCat=481
+http://www.clevelandclinicmeded.com/diseasemanagement/gastro/intrahepatic/intrahepatic.htm
+http://www.clevelandclinicmeded.com/diseasemanagement/psychiatry/depression/depression.htm
+http://www.clevelanddogparks.com/fido.html
+http://www.clevelandgrowth.com/Working_in_Cleveland/WLA/index.asp
+http://www.clevelandgrowth.com/market_data/Publications/quick_Q&A.asp
+http://www.clevelandonstage.com/interviews/lpinterview.htm
+http://www.clevelandonstage.com/michaelsinterview.htm
+http://www.cley.org.uk/walk_the_village_trail.htm
+http://www.clf.org/general/index.asp?id=457
+http://www.clf.org/programs/cases.asp?id=188
+http://www.cliapei.ca/69.html
+http://www.cliapei.ca/publications.html
+http://www.cliburn.org/blog/?p=60
+http://www.click4tickets.com/index.asp
+http://www.clickandtreat.com/Clicker_Training/GG/GG001/GG002/gg002.htm
+http://www.clickandtreat.com/ff02.htm
+http://www.clickertrain.com/articles/articleofmonth.shtml
+http://www.clickertraining.com/training/shelters/?loaditem=discussion_one
+http://www.clickertraining.com/training/shelters/?loaditem=discussion_one&print=1
+http://www.clickitjobs.com/facinginterview.htm
+http://www.clicknotes.com/hamlet/H12.html
+http://www.clicktime.com/support_news.asp
+http://www.clickx.com/saveonscents/importantfragranceinfo.html
+http://www.clickz.com/stats/sectors/finance/article.php/807451
+http://www.clientelplus.com/paging.htm
+http://www.cliffordbeers.org/getinvolved.htm
+http://www.cliffordstower.com/petition/
+http://www.cliffpearson.com/black_singles.htm
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-124,pageNum-14.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-161,pageNum-8.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-22,pageNum-27.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-29,pageNum-5.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-29,pageNum-8.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-39,pageNum-27.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-39,pageNum-40.html
+http://www.cliffsnotes.com/WileyCDA/LitNote/id-91,pageNum-27.html
+http://www.cliftonunitarian.com/toddstalks/breakingthechains.htm
+http://www.cliftonunitarian.com/toddstalks/practicalmysticism.htm
+http://www.climate-standards.org/news/news_may2005_interest.html
+http://www.climate.org.ua/sectors/methane.html
+http://www.climate.org/aboutus/inaug_lecture.shtml
+http://www.climateark.org/articles/2001/3rd/caurpowe.htm
+http://www.climateark.org/articles/reader.asp?linkid=26601
+http://www.climateark.org/articles/reader.asp?linkid=33464
+http://www.climateark.org/articles/reader.asp?linkid=34322
+http://www.climatechange.gc.ca/english/publications/team_p3plan/phase3_a_a.asp
+http://www.climatechange.govt.nz/resources/cabinet/pol-03-240.html
+http://www.climatechange.govt.nz/resources/cabinet/pol-min-03-21-7.html
+http://www.climateforum2002.org/statement.cfm
+http://www.climbing.com.au/training.php?page=training_programme.htm
+http://www.clinical-depression.co.uk/Depression_Information/signs.htm
+http://www.clinicalevidence.com/ceweb/conditions/end/0607/0607_I5.jsp
+http://www.clinicalevidence.com/ceweb/conditions/nud/1201/1201_I5.jsp
+http://www.clinicaltrials.gov/ct/gui/show/NCT00001308
+http://www.clinicaltrials.gov/ct/gui/show/NCT00069212
+http://www.clinicaltrials.gov/ct/info/glossary
+http://www.clinicaltrials.gov/ct/info/help
+http://www.clinicaltrials.gov/ct/show/NCT00005758
+http://www.clinicaltrials.gov/ct/show/NCT00069212
+http://www.clinicaltrials.gov/ct/show/NCT00115401
+http://www.clinicaltrials.gov/show/NCT00001308
+http://www.clinicians.org/ourmembers/our_members_intro.shtml
+http://www.clintonbusiness.org/pages/626408/page626408.html?refresh=1117455720361
+http://www.clintonpresidentialcenter.org/031303-y-speech.htm
+http://www.clintonpresidentialcenter.org/120804-nr-sp-cf-egy-re-wjc-closing-remarks-at-clinton-foundation-energy-forum.htm
+http://www.clintonpresidentialcenter.org/120804-nr-sp-closing-remarks-at-energy-conf.htm
+http://www.clintonpresidentialcenter.org/legacy/011995-press-release-on-anniversary-of-inauguration-b.htm
+http://www.clintonpresidentialcenter.org/legacy/012396-press-briefing-by-chief-of-staff-panetta.htm
+http://www.clintonpresidentialcenter.org/legacy/013098-speech-by-president-to-conference-of-mayors.htm
+http://www.clintonpresidentialcenter.org/legacy/020896-press-briefing-by-robert-bell-on-b2s-review.htm
+http://www.clintonpresidentialcenter.org/legacy/030200-speech-by-president-to-football-champions.htm
+http://www.clintonpresidentialcenter.org/legacy/040296-joint-press-conference-with-scalfaro.htm
+http://www.clintonpresidentialcenter.org/legacy/040800-press-release-on-legislation-before-congress.htm
+http://www.clintonpresidentialcenter.org/legacy/042293-speech-by-president-at-opening-of-holocaust-museum.htm
+http://www.clintonpresidentialcenter.org/legacy/050399-press-briefing-background-on-chernomyrdin-meeting.htm
+http://www.clintonpresidentialcenter.org/legacy/070293-press-briefing-on-the-travel-office.htm
+http://www.clintonpresidentialcenter.org/legacy/070994-press-backgrounder-on-g-seven-international-trade.htm
+http://www.clintonpresidentialcenter.org/legacy/070996-press-briefing-by-mike-mccurry.htm
+http://www.clintonpresidentialcenter.org/legacy/090398-presidential-letter-to-congress-on-iraq.htm
+http://www.clintonpresidentialcenter.org/legacy/092198-speech-by-president-at-nyu-law-school.htm
+http://www.clintonpresidentialcenter.org/legacy/100495-remarks-by-president-and-pope-at-newark-airport.htm
+http://www.clintonpresidentialcenter.org/legacy/110298-fact-sheet-on-release-of-patients-bill-of-rights-report.htm
+http://www.clintonpresidentialcenter.org/legacy/110598-presidential-letter-to-congress-on-iraq.htm
+http://www.clintonpresidentialcenter.org/legacy/110600-press-briefing-by-jake-siewart.htm
+http://www.clintonpresidentialcenter.org/legacy/121800-press-briefing-by-jake-siewart.htm
+http://www.clip.ubc.ca/research.shtm
+http://www.clipperfund.com/qtr902.html
+http://www.clir.org/pubs/reports/pub114/contents.html
+http://www.clir.org/pubs/reports/pub114/forward.html
+http://www.clis.com/friends/chicamac.htm
+http://www.clissoldleisure.com/
+http://www.cliterati.co.uk/page/article.php?story=20030517214128602&mode=print
+http://www.cliterati.co.uk/page/article.php?story=20041013205843609&mode=print
+http://www.clivar.org/publications/other_pubs/iplan/iip/data_set.htm
+http://www.clivar.org/publications/wg_reports/aamon/aa-monsoon2.htm
+http://www.clive.canoe.ca/filmfestor/home.html
+http://www.clivebarker.dial.pipex.com/ints85.html
+http://www.cll.edu/regions/ncr.htm
+http://www.clltopics.org/Ethics%20and%20Conflicts.htm
+http://www.clms.le.ac.uk/students/
+http://www.cln.org/lists/nuggets/EdTech_report.html
+http://www.cln.org/lists/nuggets/world.html
+http://www.cln.org/themes/masks.html
+http://www.clocktowerfiction.com/Fiction/wishes.shtml
+http://www.clomagazine.com/content/templates/clo_feature.asp?articleid=359&zoneid=31
+http://www.clomedia.com/content/anmviewer.asp?a=222&print=yes
+http://www.clomedia.com/content/anmviewer.asp?a=567&print=yes
+http://www.clomedia.com/content/anmviewer.asp?a=700&print=yes
+http://www.clomedia.com/content/anmviewer.asp?a=823&z=162
+http://www.clomedia.com/content/templates/clo_cloprofile.asp?articleid=517&zoneid=4
+http://www.clomedia.com/content/templates/clo_feature_ls.asp?articleid=388&zoneid=63
+http://www.clomedia.com/content/templates/clo_feature_ls.asp?articleid=486&zoneid=63
+http://www.clomedia.com/content/templates/clo_inpractice.asp?articleid=44&zoneid=83
+http://www.closertotruth.com/topics/technologysociety/110/110transcript.html
+http://www.closertotruth.com/videoarchive/
+http://www.closetsmagazine.com/
+http://www.clothingdoctor.com/magazines.html
+http://www.cloudnet.com/~edrbsass/applerootstocks.html
+http://www.cloudsandclocks.net/CD_reviews/parkereae_mv_E.html
+http://www.clovermoore.com/issues/development/major/scottish/wmc_ida_310_00.htm
+http://www.clown-ministry.com/skits/TrueMeaningOfXmas.html
+http://www.clpe.co.uk/publications/public22.html
+http://www.clpha.org/page.cfm?pageID=276
+http://www.cls.yale.edu/dils/languagepartner/additionalinfo.html
+http://www.club-mgmt.com/course/spikeless.html
+http://www.club-mgmt.com/manager/admin.html
+http://www.clubbing-uk.com/highland_gathering_nye_@_royal_highland_centre,_edinburgh.htm
+http://www.clubdeparis.org/en/countries/countries.php?CONTINENT_ID=&DETAIL_DETTE_PAGE=4&IDENTIFIANT=210&PAY_ISO_ID=UG
+http://www.clubdeparis.org/en/countries/countries.php?CONTINENT_ID=&DETAIL_DETTE_PAGE=4&IDENTIFIANT=26&PAY_ISO_ID=BO
+http://www.clubforgrowth.org/blog/
+http://www.clubfreetime.com/vieweventdetails.asp?ID=38888
+http://www.clubimate.com/index.asp?PAGEACTION=TERMS
+http://www.clublaurier.ca/
+http://www.clubmadrid.org/cmadrid/index.php?id=533
+http://www.cluboc.net/reviews/cases/dynapowerusa/BlackWidow/
+http://www.clubofamsterdam.com/press.asp?contentid=358&catid=85
+http://www.clubofamsterdam.com/press.asp?contentid=359&catid=85
+http://www.clubsafety.com/freeweights.htm
+http://www.cluck.com/SpeakForTJDJ.html
+http://www.cluetrain.com/
+http://www.clunet.edu/Student_Services/StudentPrograms/CSC/AfterYouGraduate.html
+http://www.clunet.edu/cpe
+http://www.cluonline.com/christian-counseling-distance-learning.htm
+http://www.clw.csiro.au/ImageGallery/image-info.html
+http://www.clw.csiro.au/publications/general2002/effectiveness/leakage_casestudies.html
+http://www.clw.org/atop/restrictions_defensenews092601.html
+http://www.clw.org/bush/feith-crouch.html
+http://www.clw.org/cat/atn0100.html
+http://www.clw.org/cat/csmoped.html
+http://www.clw.org/milspend/newsupdates/020510.html
+http://www.clyde.org/www2/dir_amendardnamurchan.shtml
+http://www.clydebank.ac.uk/page.asp?page_id=12
+http://www.clydebank.ac.uk/text.asp?page_id=12
+http://www.clynefarm.com/newsletter/edition_nine.htm
+http://www.cmaj.ca/cgi/content/full/167/6/674
+http://www.cmaj.ca/cgi/content/full/169/1/38
+http://www.cmalliance.org/news/news.jsp
+http://www.cmap.polytechnique.fr/~rama/events.html
+http://www.cmbm.org/trainings/ProfTrainingProgram/
+http://www.cmcpoliceacademy.com/coursedesc.html
+http://www.cmcric.org/resource/national/
+http://www.cmcrossroads.com/bradapp/acme/branching/
+http://www.cmcrossroads.com/bradapp/acme/scm-defs.html
+http://www.cmcrossroads.com/link/1260
+http://www.cmcrossroads.com/newsletter/articles/agilejul03.html
+http://www.cmcsb.com/position.htm
+http://www.cmd.rutgers.edu/Advanced_HRM_cur.htm
+http://www.cmdg.org/Surfer_Warning/surfer_warning.htm
+http://www.cmetfreetown.org/Media/Print/Articles/CSS_Articles/ConcordTimes/CT-010430-02.stm
+http://www.cmf.org.uk/ethics/turning_tide/principle.htm
+http://www.cmha.ca/phorum/read.php?f=5&i=1620&t=1620
+http://www.cmhc-schl.gc.ca/en/burema/gesein/abhose/abhose_ce08.cfm
+http://www.cmic.info/stories01C/
+http://www.cmis.cotswold.gov.uk/CMISWebPublic/Binary.ashx?Document=9193
+http://www.cmis.csiro.au/healthycountry/updates/apr05/story3.htm
+http://www.cmit.csiro.au/brochures/tech/energyexp/
+http://www.cmmonline.com/ENewsArticle.asp?ArticleID=344
+http://www.cmn.hs.h.kyoto-u.ac.jp/CMN7/lambert.html
+http://www.cmn.ie/cmnsitenew/trackark/tol_html/vaa.html
+http://www.cmpbooks.com/all_authors.html
+http://www.cmqr.rmit.edu.au/aqhe.html
+http://www.cms.hhs.gov/about/history/kahn.asp
+http://www.cms.hhs.gov/about/history/rubin.asp
+http://www.cms.hhs.gov/about/oeocr/EEOPolicy.asp
+http://www.cms.hhs.gov/healthplans/pob/mar00pob.asp
+http://www.cms.hhs.gov/healthplans/rates/2000/45day-03.asp
+http://www.cms.hhs.gov/media/press/release.asp?Counter=1150
+http://www.cms.hhs.gov/publications/trusteesreport/
+http://www.cms.hhs.gov/researchers/demos/preventiveservices/3q4.asp
+http://www.cms.int/species/iosea/IOSEAturtle_bkgd.htm
+http://www.cmsrents.com/services_special.asp
+http://www.cmstar.net/
+http://www.cmste.uregina.ca/valley/glossary.html
+http://www.cmstudies.org/CJdocs/Thompson2.htm
+http://www.cmswatch.com/Feature/126-Professional-Services
+http://www.cmswatch.com/Features/ProductWatch/FeaturedProduct/?feature_id=126
+http://www.cmt.com/artists/az/autry_gene/bio.jhtml
+http://www.cmt.com/artists/az/carlisle_bill/bio.jhtml
+http://www.cmu.edu/PR/releases05/050516_blum.html
+http://www.cmu.edu/clips/v102.html
+http://www.cmu.edu/cmnews/011205/011205_fellowships.html
+http://www.cmu.edu/computing/documentation/calendar/calendar_3.html
+http://www.cmu.edu/computing/idtheft/faq.html
+http://www.cmu.edu/hub/finaid.html
+http://www.cmwf.org/newsroom/newsroom_show.htm?doc_id=244495
+http://www.cmwf.org/publications/publications_show.htm?doc_id=229494
+http://www.cmwf.org/publications/publications_show.htm?doc_id=239779
+http://www.cmwf.org/publications/publications_show.htm?doc_id=245178
+http://www.cmwf.org/publications/publications_show.htm?doc_id=281960
+http://www.cmwf.org/tools/tools_show.htm?doc_id=257008
+http://www.cnb.com/ir/annual_reports/annreport00/lttrcalsix.asp
+http://www.cncden.com/renegade_weapons.shtml
+http://www.cnduk.org/pages/binfo/mdcnd.html
+http://www.cndyorks.gn.apc.org/news/articles/reshaping_footprint.htm
+http://www.cndyorks.gn.apc.org/yspace/articles/bmd/space_bombs.htm
+http://www.cne-siar.gov.uk/minbycom/social/E-Minute-Social%20Work%20-%203%20November%202004.htm
+http://www.cnet.com.au/smartappliances/0,39025738,40001281,00.htm
+http://www.cnewmark.com/mt/mt-comments.cgi?entry_id=232
+http://www.cnib.ca/eng/publications/pamphlets/lwvl/chapter3.htm
+http://www.cnlm.org/soq.html
+http://www.cnn.com/2000/TECH/ptech/01/27/glasstron.review/
+http://www.cnn.com/2000/US/08/02/kansas.evolution.01/
+http://www.cnn.com/2000/WORLD/meast/01/30/mideast.talks/
+http://www.cnn.com/2001/WORLD/asiapcf/east/04/09/air.collision.06/
+http://www.cnn.com/2001/WORLD/europe/04/27/oakley.bush/
+http://www.cnn.com/2002/ALLPOLITICS/08/22/bush.timber/
+http://www.cnn.com/2002/BUSINESS/asia/07/01/monmarkets.close/
+http://www.cnn.com/2002/US/08/08/porn.patriot/
+http://www.cnn.com/2002/WORLD/europe/09/30/eu.iraq/
+http://www.cnn.com/2002/WORLD/meast/01/22/mideast/
+http://www.cnn.com/2003/ALLPOLITICS/12/08/elec04.medicare.ap/
+http://www.cnn.com/2003/EDUCATION/08/13/sprj.sch.overview/
+http://www.cnn.com/2003/LAW/11/10/scotus.detainees/
+http://www.cnn.com/2003/SHOWBIZ/12/05/hln.hot.buzz.foaf.networks/
+http://www.cnn.com/2003/SHOWBIZ/TV/02/27/rogers.obit/
+http://www.cnn.com/2003/TECH/ptech/08/18/biological.computing.ap/
+http://www.cnn.com/2003/TECH/space/02/01/shuttle.columbia/
+http://www.cnn.com/2003/TECH/space/02/18/sprj.colu.space.future/
+http://www.cnn.com/2003/TECH/space/02/25/sprj.colu.debris/
+http://www.cnn.com/2003/US/Northeast/02/21/Cappadocia.cnna/
+http://www.cnn.com/2003/WORLD/meast/03/23/sprj.irq.war.main/
+http://www.cnn.com/2003/WORLD/meast/03/24/sprj.irq.marines.nasariya/
+http://www.cnn.com/2003/WORLD/meast/03/30/sprj.irq.arnett.transcript/
+http://www.cnn.com/2004/ALLPOLITICS/10/08/debate.transcript/
+http://www.cnn.com/2004/ALLPOLITICS/10/13/debate.transcript/
+http://www.cnn.com/2004/ALLPOLITICS/11/22/opinion.poll/
+http://www.cnn.com/2004/HEALTH/01/21/sleep.creativity.ap/
+http://www.cnn.com/2004/LAW/05/17/mass.samesex.marriage/
+http://www.cnn.com/2004/LAW/07/09/exorcism/
+http://www.cnn.com/2004/SHOWBIZ/Movies/03/25/review.jersey/
+http://www.cnn.com/2004/WORLD/meast/11/01/binladen.tape/
+http://www.cnn.com/2005/ALLPOLITICS/01/20/bush.transcript/
+http://www.cnn.com/2005/ALLPOLITICS/02/02/sotu.viewer.reax/
+http://www.cnn.com/2005/ALLPOLITICS/02/02/speech.reax/
+http://www.cnn.com/2005/ALLPOLITICS/02/25/dean.democrats.ap/
+http://www.cnn.com/2005/HEALTH/06/06/profile.assistant.kapes/
+http://www.cnn.com/2005/HEALTH/06/06/wnv.location/
+http://www.cnn.com/2005/HEALTH/diet.fitness/01/13/weight.loss/
+http://www.cnn.com/2005/HEALTH/diet.fitness/06/13/elderly.nutrition.ap/
+http://www.cnn.com/2005/LAW/03/14/smith.transcript/
+http://www.cnn.com/2005/LAW/06/14/jackson.trial/
+http://www.cnn.com/2005/LAW/06/21/mississippi.killings/
+http://www.cnn.com/2005/LAW/06/23/scotus.property.ap/
+http://www.cnn.com/2005/POLITICS/04/20/rice.bolton/
+http://www.cnn.com/2005/POLITICS/04/28/bush.transcript/
+http://www.cnn.com/2005/POLITICS/05/12/senate.bolton/
+http://www.cnn.com/2005/POLITICS/05/25/judicial.nominees/
+http://www.cnn.com/2005/POLITICS/06/10/npr.cpb/
+http://www.cnn.com/2005/SHOWBIZ/Movies/06/17/movies.poll.ap/
+http://www.cnn.com/2005/TECH/internet/03/18/artists.online/
+http://www.cnn.com/2005/TECH/internet/06/09/google.map.hacks.ap/
+http://www.cnn.com/2005/TECH/internet/06/14/china.microsoft.ap/
+http://www.cnn.com/2005/TECH/science/04/13/dolphin.rehab/
+http://www.cnn.com/2005/TRAVEL/ADVISOR/05/19/honeymoon.planning/
+http://www.cnn.com/2005/TRAVEL/DESTINATIONS/02/22/sorcerer.lodge/
+http://www.cnn.com/2005/US/05/05/uk.consulate/
+http://www.cnn.com/2005/US/05/16/iraq.memo/
+http://www.cnn.com/2005/US/06/07/bush.blair.africa/
+http://www.cnn.com/2005/US/06/10/fbi.missed.ap/
+http://www.cnn.com/2005/US/06/16/ford.vehicles/
+http://www.cnn.com/2005/US/06/22/missing.scout/
+http://www.cnn.com/2005/WORLD/europe/01/20/ukraine.ap/
+http://www.cnn.com/2005/WORLD/meast/01/13/iraq/
+http://www.cnn.com/2005/WORLD/meast/01/28/media.election/
+http://www.cnn.com/2005/WORLD/meast/04/26/iraq.zarqawi/
+http://www.cnn.com/2005/WORLD/meast/06/08/iraq.family.tragedy/
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/akaka.html
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/boxer.html
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/bunning.html
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/collins.html
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/johnson.html
+http://www.cnn.com/ALLPOLITICS/stories/1999/02/12/senate.statements/wyden.html
+http://www.cnn.com/ELECTION/2000/debates/history.story/1992.html
+http://www.cnn.com/HEALTH/library/CA/00012.html
+http://www.cnn.com/HEALTH/library/CA/00037.html
+http://www.cnn.com/HEALTH/library/DS/00063.html
+http://www.cnn.com/HEALTH/library/DS/00171.html
+http://www.cnn.com/HEALTH/library/DS/00284.html
+http://www.cnn.com/HEALTH/library/DS/00295.html
+http://www.cnn.com/HEALTH/library/DS/00303.html
+http://www.cnn.com/HEALTH/library/DS/00534.html
+http://www.cnn.com/HEALTH/library/HA/00001.html
+http://www.cnn.com/HEALTH/library/HQ/00507.html
+http://www.cnn.com/HEALTH/library/HQ/01010.html
+http://www.cnn.com/HEALTH/library/HQ/01612.html
+http://www.cnn.com/HEALTH/library/NU/00203.html
+http://www.cnn.com/SHOWBIZ/Movies/9905/13/review.phantom.menace/
+http://www.cnn.com/SHOWBIZ/TV/9807/24/must.sell.tv/
+http://www.cnn.com/SPECIALS/2000/russia/story/analysis/putin2/
+http://www.cnn.com/SPECIALS/cold.war/episodes/14/documents/debate/
+http://www.cnn.com/SPECIALS/cold.war/episodes/22/script.html
+http://www.cnn.com/TECH/computing/9909/21/hushmail/
+http://www.cnn.com/US/9607/09/newsbriefs/
+http://www.cnn.com/US/9909/10/soda.schools/
+http://www.cnn.com/chat/transcripts/2000/3/berkley/
+http://www.cnn.com/fyi/interactive/news/10/election.special/teachers/bg.6.html
+http://www.cnn.com/money/2005/02/02/news/economy/bush_speech/
+http://www.cnn.com/money/?cnn=yes
+http://www.cnn.com/si/2005/tennis/specials/french_open/2005/06/05/bc.ten.french.open.men.ap/
+http://www.cnn.com/si/2005/writers/dr_z/04/21/mock.draft.expanded.part1/?cnn=yes
+http://www.cnnames.net/
+http://www.cnnet.com.au/index.php?option=content&task=view&id=242&Itemid=180
+http://www.cnnfn.com/2000/09/29/career/q_degreephysed/
+http://www.cnnsi.com/2004/football/nfl/04/23/tillman.killed/
+http://www.cnnsi.com/2004/writers/richard_deitsch/11/12/media.circus/
+http://www.cnnsi.com/2005/football/nfl/02/10/bc.fbn.probowl.vick.stu.ap/
+http://www.cnnsi.com/2005/scorecard/02/04/truth.rumors.nba/
+http://www.cnnsi.com/2005/tennis/specials/wimbledon/2005/06/29/bc.ten.wimbledon.notebook.ap/
+http://www.cnnsi.com/2005/writers/don_banks/02/02/pats.versatility/
+http://www.cnnsi.com/2005/writers/jon_wertheim/seed.report.women/
+http://www.cnnsi.com/2005/writers/peter_king/01/03/mmqb.week17/
+http://www.cnnsi.com/2005/writers/peter_king/01/24/mmqb.conf/
+http://www.cnnsi.com/basketball/news/2001/12/29/hornets_wizards_ap/
+http://www.cnnsi.com/features/1998/weekly/980921/standingtall.html
+http://www.cnnsi.com/soccer/world/1999/womens_worldcup/news/1999/06/19/wwc_script/
+http://www.cno.org/reg/nonmemb/progs_rpn.htm
+http://www.cnponline.org/Issue%20Briefs/Statelines/statelin0301.htm
+http://www.cnr.berkeley.edu/ucce50/ag-labor/7labor/02.htm
+http://www.cnr.colostate.edu/frws/research/cook/cook/cookcarb/Carbohydrates.htm
+http://www.cnr.colostate.edu/prospective/profiles/chase.html
+http://www.cnr.uidaho.edu/winr/kd24.3.htm
+http://www.cnsnews.com/Culture/archive/200405/CUL20040513c.html
+http://www.cnsnews.com/ViewCommentary.asp?Page=%5CCommentary%5Carchive%5C200301%5CCOM20030127e.html
+http://www.cnsnews.com/ViewCulture.asp?Page=/Culture/archive/200111/CUL20011126d.html
+http://www.cnsnews.com/ViewNation.asp?Page=%5CForeignBureaus%5Carchive%5C200506%5CFOR20050616d.html
+http://www.cnsonline.org/www/archive/alzhmr/alz-01.html
+http://www.cnt.com/documents/?ext=pdf&filename=PL592
+http://www.cnt.gouv.qc.ca/en/lois/normes/commission/index.asp
+http://www.cnt.gouv.qc.ca/en/lois/reglements/normes/index.asp
+http://www.cnu.edu/lls/gardenworkshops.html
+http://www.cnvc.org/spirital.htm
+http://www.co-intelligence.org/I-SynDivWhol.html
+http://www.co-intelligence.org/y2k_WASHsign-on.html
+http://www.co-intelligence.org/y2k_nukeWASH.html
+http://www.co-motion.com/
+http://www.co-motion.com/home.html
+http://www.co-operativebank.co.uk/servlet/Satellite?cid=1079944047609&pagename=CoopBank%2FPage%2FtplPageStandard&c=Page
+http://www.co-ophthalmology.com/pt/re/coophth/fulltext.00055735-200504000-00002.htm
+http://www.co-ownership.org/news/20
+http://www.co.boulder.co.us/bocc/BCNews/1996/september.htm
+http://www.co.boulder.co.us/bocc/BCNews/2000/september.htm
+http://www.co.cook.il.us/secretary/CommitteePages/Meeting%20Reports/Education%20Committee/2001/02-08-01.htm
+http://www.co.cumberland.nj.us/facts/history/unalachtigo/unalachtigo.html
+http://www.co.douglas.ne.us/dept/civil/webjobs.html
+http://www.co.fairfax.va.us/library/internet/home.htm
+http://www.co.ha.md.us/housing/PATH.html
+http://www.co.hennepin.mn.us/vgn/portal/internet/hcdetailmaster/0,2300,1273_82191_101935416,00.html
+http://www.co.honolulu.hi.us/ethics/complaintform.htm
+http://www.co.jackson.or.us/Page.asp?NavID=237
+http://www.co.kandiyohi.mn.us/depts/EnvSvcs/waterplanning.htm
+http://www.co.kern.ca.us/courts/smallclaims.asp
+http://www.co.larimer.co.us/parks/carter_lake_meeting.htm
+http://www.co.mason.wa.us/health/Cshcn.shtml
+http://www.co.mille-lacs.mn.us/Cb030204.htm
+http://www.co.orange.ny.us/documentView.asp?docID=1944
+http://www.co.pacific.wa.us/boards%20and%20commissions/boewin.htm
+http://www.co.pierce.wa.us/pc/abtus/ourorg/distct/dc1faq.htm
+http://www.co.pierce.wa.us/text/abtus/ourorg/distct/dc1faq.htm
+http://www.co.prince-william.va.us/default.aspx?topic=010010000810002865
+http://www.co.prince-william.va.us/default.aspx?topic=010010000830001056
+http://www.co.prince-william.va.us/default.aspx?topic=01001600011
+http://www.co.prince-william.va.us/default.aspx?topic=020010000810002865
+http://www.co.prince-william.va.us/default.aspx?topic=030010000810002865
+http://www.co.prince-william.va.us/default.aspx?topic=040033000100001736
+http://www.co.prince-william.va.us/print.aspx?topic=010010000810002865
+http://www.co.santa-fe.nm.us/departments/hrd_asd/registered_nurse.htm
+http://www.co.solano.ca.us/Links/Link.asp?NavID=1190
+http://www.co.st-louis.mo.us/parks/mountedpatrol.html
+http://www.co.suffolk.ny.us/legis/clerk/cmeet/vm/2004/vm012104R.htm
+http://www.co.summit.co.us/Ehealth/foodsafety.html
+http://www.co.travis.tx.us/dro/common_law.asp
+http://www.co.yavapai.az.us/Meeting/PNB/2005/0406.htm
+http://www.co2clean.com/faqs.html
+http://www.coachability.com/discoveryourpassionbook.htm
+http://www.coachcentral.info/Merrill_study.htm
+http://www.coachesinfo.com/category/swimming/335/
+http://www.coachingforchange.com/pub10.html
+http://www.coachingtohappiness.com/How_Can_I_Be_Happy_When-Happy-When-010.html
+http://www.coachmaria.com/
+http://www.coachwyatt.com/successes.html
+http://www.coag.uvic.ca/cdsmp/cdsmp_program.htm
+http://www.coaleducation.org/lessons/middle/import.htm
+http://www.coaltechnologies.com/
+http://www.coastal.ca.gov/publiced/marinedebris.html
+http://www.coastal.edu/magazine/fall2003/classnotes.html
+http://www.coastalsenior.com/archives/april2004/SNRgracefulelder.html
+http://www.coastalstudies.org/what-we-do/whale-rescue/faq.htm
+http://www.coastcapital.com/library/mbashop.html
+http://www.coastepa.com/php/service/bylaws.php
+http://www.coastkid.org/l03bx.html
+http://www.coastlinecu.com/
+http://www.coat-of-arms.biz/customers.php
+http://www.coax.net/people/erics/TFARM_supercon1.htm
+http://www.coax.net/people/lwf/watch.htm
+http://www.cob.ohio-state.edu/dept/fin/journal/jofsites.htm
+http://www.cob.org/features/2004-11-30-water-rates.htm
+http://www.cob.org/web/council.nsf/0/580821224ead9dbb88257004007a7a43?OpenDocument
+http://www.cob.sjsu.edu/facstaff/nellen_a/TaxComp/exercise.html
+http://www.cobankopegi.com/prong.html
+http://www.cobar.org/opinions/opinionlist.cfm?CaseDate=2/23/2004&CourtID=2
+http://www.cobbcommunications.org/direction_cobb/aug_04/senior.htm
+http://www.cobbcommunications.org/direction_cobb/june_02/dc_june_02.htm
+http://www.cobbetts.co.uk/main/cms/cmRender.asp?i=1163&p=h58p2
+http://www.cobbles.com/simpp/chapter1.htm
+http://www.cobbles.com/simpp_archive/paramountcase_1slump1938.htm
+http://www.cobbles.com/simpp_archive/simpp_1942umpi.htm
+http://www.cobecv.com/cobecv.htm
+http://www.cobracountry.com/york/home.html
+http://www.coc.cc.ca.us/library/Closed_captioned1.asp
+http://www.coc.cc.ca.us/library/Closed_captioned2.asp
+http://www.coc.cc.ca.us/library/Closed_captioned3.asp
+http://www.coc.cc.ca.us/library/Closed_captioned4.asp
+http://www.coc.cc.ca.us/offices/Library/Closed_captioned2.asp
+http://www.coc.cc.ca.us/offices/library/Closed_captioned1.asp
+http://www.coc.cc.ca.us/offices/library/Closed_captioned2.asp
+http://www.coc.org/focus/ej/display.html?ID=126
+http://www.cocaineblunts.com/blog/2004_12_01_cocaineblunts_archive.html
+http://www.coccyx.org/investig/dynamic.htm
+http://www.coccyx.org/personal/2003/cj.htm
+http://www.cochisestrongholdbb.com/guest03.html
+http://www.cochranfirm.com/areas-medmal-heart.html
+http://www.cocoadevcentral.com/articles/000028.php
+http://www.cocoadevcentral.com/articles/000036.php
+http://www.cocoadevcentral.com/articles/000044.php
+http://www.cocoadevcentral.com/articles/000066.php
+http://www.coconut-island.co.uk/main.html
+http://www.coconuts.com/namepage.aspx?pid=P4532&type=P&loc=41159
+http://www.cocoonnutrition.org/catalog/page_hormone_NL.php
+http://www.cod.edu/Academic/AcadProg/Hon_Prog/did_you_know.htm
+http://www.cod.edu/DEPT/REGNER/robert_morris.htm
+http://www.cod.edu/NewsEvnt/Evnt_Cal.htm
+http://www.cod.edu/yrtk/
+http://www.codecomments.com/Cobol/message371320.html
+http://www.codecomments.com/Java_Databases/message392274.html
+http://www.codecomments.com/archive307-2004-9-286523.html
+http://www.codecomments.com/forum290/message354679-1.html
+http://www.codegroup.co.yu/links.htm
+http://www.codeguru.com/Cpp/W-P/ce/registry/article.php/c8301/
+http://www.codeguru.com/forum/showthread.php?t=327820
+http://www.codeguru.com/java/tij/tij_c.shtml
+http://www.codeindigo.co.uk/davidwright/music/ghostsreview.shtml
+http://www.codella.com/shotguns.htm
+http://www.codeonemagazine.com/archives/2003/articles/oct_03/c130/
+http://www.codeproject.com/aspnet/DataPassingBtPages.asp
+http://www.codeproject.com/aspnet/IFrameParams.asp
+http://www.codeproject.com/aspnet/wait_page.asp
+http://www.codeproject.com/csharp/
+http://www.codeproject.com/csharp/csdespat_6.asp?df=100&forumid=13761&exp=0&select=743201
+http://www.codeproject.com/directx/tetris.asp
+http://www.codeproject.com/dotnet/bridge.asp
+http://www.codeproject.com/gen/work/standaloneinnovative.asp?df=100&forumid=14709&exp=0&select=501739
+http://www.codeproject.com/gen/work/standaloneinnovative.asp?df=100&forumid=14709&exp=0&select=501808
+http://www.codeproject.com/gen/work/standaloneinnovative.asp?df=100&forumid=14709&exp=0&select=502480
+http://www.codeproject.com/gen/work/standaloneinnovative.asp?df=100&forumid=14709&exp=0&select=502921
+http://www.codeproject.com/html/webspeed.asp
+http://www.codeproject.com/html/webspeed.asp?df=100&forumid=74944&exp=0&select=872308
+http://www.codeproject.com/html/webspeed.asp?df=100&forumid=74944&exp=0&select=874929
+http://www.codeproject.com/listctrl/
+http://www.codeproject.com/miscctrl/rgba_colour_control.asp
+http://www.codeproject.com/netcf/PpcCompPocketBalance.asp
+http://www.codeproject.com/property/resizeable_wizard97.asp
+http://www.codeproject.com/threads/process_class.asp
+http://www.codeproject.com/threads/processapi.asp
+http://www.codepublishing.com/OR/Fairview/fairvw19/fairvw19110.html
+http://www.codersworkshop.com/viewshowcase.php?id=140
+http://www.codex-politics.com/pcodex/contents.nsf/0/74B9296D82C9C45E00256BD600531C77?OpenDocument
+http://www.codyenterprise.com/guestbook
+http://www.codynamics.net/science.htm
+http://www.coe.berkeley.edu/labnotes/0405/commuter.html
+http://www.coe.int/T/E/Commissioner_H.R/Communication_Unit/Documents/CommDH(1999)1_E.asp
+http://www.coe.int/T/E/Cultural_Co-operation/Heritage/Resources/econfer5.asp
+http://www.coe.int/T/E/Cultural_Co-operation/Youth/4._Financial_support/Study_Sessions/Call4_Application2005.asp
+http://www.coe.int/T/E/cultural_co-operation/Sport/Doping/eEuropack.asp
+http://www.coe.iup.edu/wiupfm/newmembers.htm
+http://www.coe.iup.edu/worldofkindergarten/T/T.html
+http://www.coe.neu.edu/Depts/SET/lis/financial.html
+http://www.coe.uga.edu/sdpl/articlesandpapers/reviewcaringspaces/caringspaces.html
+http://www.coe.uh.edu/courses/cuin6373/onlineinfo/faq.html
+http://www.coega.co.za/content.asp?id=229&node0id=163&node1id=129&node2id=70
+http://www.cof.org/Content/General/Display.cfm?contentID=2570
+http://www.cof.orst.edu/cof/teach/for446/
+http://www.cof.orst.edu/net/software/present/powerpnt/ppguide.sht
+http://www.cof.orst.edu/org/scicomm/030298.htm
+http://www.cofc.edu/~portmord/phil4f97.htm
+http://www.cofchrist.org/called/default.asp
+http://www.cofcu.org/
+http://www.cofe.anglican.org/lifeevents/ministry/safwp/sfot/
+http://www.coffee-makers-espresso-machines.com/aquabrew-commercial-thermal-drip-coffee-makers.html
+http://www.coffeecoffee.com/
+http://www.coffeeforless.com/pressroom.asp
+http://www.coffeefranchisereview.com/coffee-shop-franchise/java_grande
+http://www.coffeefranchisereview.com/franchise/java_grande
+http://www.coffeefranchisereview.com/java/java_grande
+http://www.coffeegeek.com/forums/espresso/general/109154
+http://www.coffeegeek.com/reviews/commercial/isomac_tea/Cafetera
+http://www.coffeegeek.com/reviews/commercial/isomac_tea/mhanley
+http://www.coffeegeek.com/reviews/commercial/isomac_tea/ozzie
+http://www.coffeereview.com/article.cfm?ID=76
+http://www.coffeereview.com/article.cfm?ID=8
+http://www.coffeereview.com/article.cfm?ID=93
+http://www.coffeereview.com/article.cfm?ID=95
+http://www.coffeereview.com/reference.cfm?ID=88
+http://www.coffman.umn.edu/whole/
+http://www.cog.org/interfaith/pwr124.html
+http://www.cog7day.org/applications/message/index.asp?s=7&r=60&numMaxPage=10
+http://www.cogapp.com/home/3975536.html
+http://www.cogentsolver.com/find.htm
+http://www.cognetics.com/papers/charlie/charlie9.html
+http://www.cognitiveliberty.org/neuro/memory_drugs_sd.html
+http://www.cograilway.com/ratestimes.htm
+http://www.cogs.asn.au/orgdefn.html
+http://www.coha.org/Anything%20PHP/by_edition.php
+http://www.coha.org/NEW_PRESS_RELEASES/New_Press_Releases_2004/04.07_Haiti_Waiting.htm
+http://www.coha.org/PHP/by_edition.php
+http://www.cohre.org/FilmsMain.htm
+http://www.coiera.com/bk-intro.htm
+http://www.coinarchives.com/faq.php
+http://www.coinresource.com/guide/exhibit/panama_pacific_fifty.htm
+http://www.coinsofamerica.com/public_folder/50sq.htm
+http://www.cointalk.org/newpostinthread7528.html
+http://www.cojoweb.com/host-andrew-h-jacouse-CD.html
+http://www.cokesbury.com/disciple_controller.aspx?pageid=163&id=17&type=Comm
+http://www.col.org/clippings/leg_draft.htm
+http://www.col.org/events/9707events.htm
+http://www.colby-sawyer.edu/campus-life/commencement/studentawards.html
+http://www.colby.edu/cpse/equipment2/human/human.html
+http://www.colby.edu/home/orgs.shtml
+http://www.colby.edu/personal/r/rmscheck/GermanyC1.html
+http://www.cold-war-crisis.de/wbboard/thread.php?threadid=571&boardid=27
+http://www.coldandflucouncil.org/html/council_gp.htm
+http://www.coldbacon.com/music/calypso.html
+http://www.coldcallpro.com/demo_tour.asp
+http://www.coldcallpro.com/support_gold.asp
+http://www.coldcure.com/html/results.html
+http://www.coldfusionvideo.com/l/lotrtwotowers.html
+http://www.coldspring.co.uk/index.cgi?keywords=Ionosphere
+http://www.coldsteel.co.uk/articles/bayarea.html
+http://www.coldwar.org/articles/90s/fall_of_the_soviet_union.php3
+http://www.colebrooke.info/firearms.htm
+http://www.coleman-firm.com/practiceareas-pa-hacker.php
+http://www.colemanforag.com/biography.asp
+http://www.coleporter.org/bio.html
+http://www.colgate.edu/index.aspx?pgID=6013&nwID=206
+http://www.colgate.edu/index.aspx?pgID=6013&nwID=2689
+http://www.colgatecountryshowdown.com/rules.asp
+http://www.colidoscope.com/fellows/stipends.html
+http://www.colinfirth.com/truth.html
+http://www.coliseum.org.uk/pages/edu_outreach.php
+http://www.colitz.com/site/4120053/4120053f.htm
+http://www.collectics.com/education_imperial.html
+http://www.collectingbooksandmagazines.com/annuals.html
+http://www.collectinsure.com/faqstampcollector.htm
+http://www.collectionscanada.ca/2/16/h16-6201-e.html
+http://www.collectionscanada.ca/6/18/s18-212-e.html
+http://www.collectionscanada.ca/9/13/p13-104-e.html
+http://www.collectionscanada.ca/glenngould/m23-310.1.3-e.html
+http://www.collectionscanada.ca/information-management/06040101_e.html
+http://www.collectionscanada.ca/information-management/060401_e.html
+http://www.collectionscanada.ca/information-management/0609_e.html
+http://www.collectionscanada.ca/primeministers/h4-4060-e.html
+http://www.collectionscanada.ca/primeministers/h4-4072-e.html
+http://www.collectionscanada.ca/superheroes/t3-303-e.html
+http://www.collectmad.com/COLLECTIBLES/toylst.htm
+http://www.collectormania.com.au/storydetail.asp?storyID=3813&storylink=d:%5Cinetpub%5CTopStory%5CStories%5C4799_3813.txt
+http://www.collectorsnet.com/warstuff/civilwar.htm
+http://www.collectspace.com/resources/patches_soviet.html
+http://www.college-of-law.co.uk/20462.html
+http://www.college-of-law.co.uk/senda/20462-4.html
+http://www.collegeart.org/conference/2005/seekers/
+http://www.collegeboard.com/article/0,3868,6-29-0-4494,00.html
+http://www.collegeboard.com/collegecosts
+http://www.collegeboard.com/highered/res/tax.html
+http://www.collegeboard.com/parents/article/0,3708,703-705-0-21290,00.html
+http://www.collegeboard.com/prof/counselors/apply/3.html
+http://www.collegeboard.com/student/testing/clep/ex_us1.html
+http://www.collegecentral.com/NewsDetail.cfm?Consortium=HLT&IND=11
+http://www.collegecentral.com/NewsDetail.cfm?Consortium=ISS&IND=9
+http://www.collegecharlie.com/vandy.html
+http://www.collegeconfidential.com/discus/messages/5711/59170.html
+http://www.collegeconfidential.com/discus/messages/70/82010.html
+http://www.collegefootballnews.com/2003/Bowls/Bowl_Central.htm
+http://www.collegefootballnews.com/2004/Draft/2005_Pro_Prospects_41_70.htm
+http://www.collegefootballnews.com/Mountain_West/Mountain%20West.htm
+http://www.collegefootballnews.com/Top_100_Players/Top_100_Players_23_Tony_Dorsett.htm
+http://www.collegefootballnews.com/mac/2004_Previews/2004_MAC_Preview.htm
+http://www.collegegrad.com/book/21-5.shtml
+http://www.collegegrad.com/careers/manag19.shtml
+http://www.collegegrad.com/careers/servi13.shtml
+http://www.collegegrad.com/jobsearch/21-5.shtml
+http://www.collegehillna.org/MAR2304minutes.htm
+http://www.collegehumor.com/
+http://www.collegejournal.com/aidadmissions/financialissues/20040227-chaker.html
+http://www.collegejournal.com/bschool03/articles/20020909-alsop-mbasurvey.html
+http://www.collegejournal.com/careerpaths/findcareerpath/20050610-millman.html
+http://www.collegejournal.com/columnists/myopinion/20030924-newport.html
+http://www.collegemedianews.com/category.php?catID=1
+http://www.collegeparents.org/cpa/resource-everyone-financial-scholarship_look.html
+http://www.colleges.com/Umagazine/articles.taf?category=features&article=bingedrinking
+http://www.colleges.com/admissions/essays/lf_wordchoice.html
+http://www.collegesexadvice.com/masturbation-mistakes.shtml
+http://www.collegesports.com/sports/m-footbl/stories/081804aat.html
+http://www.collegevalues.org/practices.cfm?id=212&a=1
+http://www.collegevalues.org/reflections.cfm?id=185&a=1
+http://www.collegevalues.org/scholarships.cfm?id=1174&a=1
+http://www.collegeview.com/career/ask_experts/prevet.html
+http://www.collegeview.com/college/ask_experts/choosing_mj/publicrelations.html
+http://www.collegeview.com/college/library/excerpts/101chapter13.html
+http://www.collegian.com/vnews/display.v/SEC/News%3E%3ECampus
+http://www.collegian.psu.edu/archive/2002/10/10-23-02tdc/10-23-02dsports-02.asp
+http://www.collegiatetimes.com/index.php?ID=4856
+http://www.collegiatewaterpolo.org/html/SAACminutes.htm
+http://www.collegiumusa.com/other/3_christmas2004_index.html
+http://www.collinsclubs.com/rcrv/community_projects.php?projID=16
+http://www.collinspartners.com/relationships/meltdowns.htm
+http://www.collisiondetection.net/mt/archives/2004/05/can_you_hear_me.html
+http://www.collisiondetection.net/mt/archives/2004/05/of_texting_teac.html
+http://www.collyerbristow.com/site/default.asp?s=61&cID=12&ctID=5
+http://www.collylogic.com/index.php?/weblog/comments/so_where_does_media_leave_us/
+http://www.coloma.com/business/shopping.php
+http://www.colombiaembassy.org/en/index.php?option=com_content&task=view&id=233&Itemid=146
+http://www.colombiasolidarity.org.uk/
+http://www.colombiasolidarity.org.uk/Solidarity%2014/waronthepeople.html
+http://www.colombiasolidarity.org.uk/UA%20Jan-Mar%2004/UA04.03.04.html
+http://www.colonelmaggie.com/vets.htm
+http://www.colonialhall.com/adamsj/adamsAbigail.php
+http://www.colorado.edu/SASC/tips/enrollstatus/fullcircle.html
+http://www.colorado.edu/StaffCouncil/minutesapril2004.htm
+http://www.colorado.edu/StaffCouncil/minutesnovember2004.htm
+http://www.colorado.edu/StaffCouncil/totalcompensation.htm
+http://www.colorado.edu/StudentGroups/MEChA/MEXAplansb.html
+http://www.colorado.edu/StudentGroups/PhilosophyClub/Referees/SubstitutivityandContext.htm
+http://www.colorado.edu/conflict/peace/!core_problems.htm
+http://www.colorado.edu/conflict/peace/!treating_core.htm
+http://www.colorado.edu/conflict/peace/!treating_overlays.htm
+http://www.colorado.edu/cuenvironmentalcenter/greening_cu/green_building/
+http://www.colorado.edu/ealld/atj/Bridging/talk-advice.html
+http://www.colorado.edu/ealld/atj/Teamreports/Chap4.html
+http://www.colorado.edu/geography/gcraft/warmup/txelect/txelect.bak4
+http://www.colorado.edu/geography/gcraft/warmup/txelect/txelect.bak5
+http://www.colorado.edu/geography/gcraft/warmup/txelect/txelect.bak7
+http://www.colorado.edu/geography/gcraft/warmup/txelect/txelect.html
+http://www.colorado.edu/geography/geomorph/usfs.html
+http://www.colorado.edu/hazards/dr/dr224.html
+http://www.colorado.edu/hazards/dr/dr427.html
+http://www.colorado.edu/history/students/undergrad/papguide.htm
+http://www.colorado.edu/humres/policies/adminleave.html?a=1
+http://www.colorado.edu/humres/policies/adminleave.html?a=5
+http://www.colorado.edu/humres/policies/adminleave.html?a=51
+http://www.colorado.edu/humres/policies/adminleave.html?a=8
+http://www.colorado.edu/journals/standards/V6N1/EDUCATION/jaramillo1.html
+http://www.colorado.edu/journals/standards/V7N2/about.html
+http://www.colorado.edu/kines/ivblab/Brian.htm
+http://www.colorado.edu/news/cgi-bin/print.cgi?year=2003&id=284
+http://www.colorado.edu/news/releases/2003/284.html
+http://www.colorado.edu/ptsp/retreatspring2002/three.html
+http://www.colorado.edu/studentaffairs/sofo/dos_donts.html
+http://www.colorado.edu/topscholarships/geninfo.htm
+http://www.coloradocollege.edu/dept/en/cos/1/sustainablility.asp
+http://www.coloradocollege.edu/dept/en/cos/1/veronica.asp
+http://www.coloradocollege.edu/dept/en/cos/1/wolves.asp
+http://www.coloradocollege.edu/dept/en/cos/vol1/ae_kingb.cfm
+http://www.coloradocollege.edu/dept/en/cos/vol1/pro_hilda.cfm
+http://www.coloradocollege.edu/dept/en/cos/vol1/sports_tigers.cfm
+http://www.coloradodoulas.com/hospitals.html
+http://www.coloradomusicfest.org/conductors.htm
+http://www.coloradosprings.com/relocation/fullstory.php?id=1640
+http://www.coloradotown.com/classifieds/classified_list.cfm?cityid=8&pagenameid=9&subid=41
+http://www.coloransas.com/sbh.html
+http://www.colormatters.com/factoid.html
+http://www.colorpro.com/services/designs.html
+http://www.colorschemer.com/forums/showthread.php?t=130
+http://www.colossal-fossil-site.com/475-legislative/red-white-blue.htm
+http://www.colostate.edu/Depts/CoopExt/4DMG/Plants/cont.htm
+http://www.colourflair.com/Colour___StyleTraining/Training_Course_Prospectus/training_course_prospectus.html
+http://www.colourtherapyhealing.com/crystals/
+http://www.colschildrenstheatre.org/academy/class2005a-winter.htm
+http://www.colts.com/sub.cfm?page=article7&news_id=2630
+http://www.coltsfordmill-fishery.co.uk/members-news-03nov.phtml
+http://www.columba.ie/catalogue.php?cat=Religious%20Life
+http://www.columbia.edu/cu/cspa/97GoldKeyRecipients.html
+http://www.columbia.edu/cu/cssn/cssn-list/2002/01/00146.html
+http://www.columbia.edu/cu/cup/catalog/data/023104/0231046111.HTM
+http://www.columbia.edu/cu/cup/catalog/data/023112/0231125704.HTM
+http://www.columbia.edu/cu/cup/catalog/data/023112/0231127766.HTM
+http://www.columbia.edu/cu/cup/catalog/data/071030/0710305907.HTM
+http://www.columbia.edu/cu/ealac/dkc/chushingura/gonza_film_notes.html
+http://www.columbia.edu/cu/ire/stumsc.html
+http://www.columbia.edu/cu/opg/policies/small-bus.html
+http://www.columbia.edu/cu/polisci/grad/main/faculty/
+http://www.columbia.edu/cu/polisci/printable/grad/main/faculty/
+http://www.columbia.edu/cu/senate/annual_reports/97-98/library.html
+http://www.columbia.edu/cu/senate/resolutions/01-02/CEres.htm
+http://www.columbia.edu/cu/tat/2_roles.html
+http://www.columbia.edu/itc/cerc/danoff-burg/invasion_bio/inv_spp_summ/Apis_mellifera_scutellata.htm
+http://www.columbia.edu/itc/cerc/danoff-burg/invasion_bio/inv_spp_summ/WestNile.html
+http://www.columbia.edu/itc/mealac/pritchett/00islamlinks/txt_sir_sayyid_lucknow_1887.html
+http://www.columbia.edu/itc/mealac/pritchett/00islamlinks/txt_sir_sayyid_meerut_1888.html
+http://www.columbia.edu/kermit/case09.html
+http://www.columbia.edu/kermit/support.html
+http://www.columbia.edu/~ariel/hr695/crowell-mar20.html
+http://www.columbia.edu/~em36/wpdos/wptoword.html
+http://www.columbia.edu/~ftg1/WRITING%20EXECUT.SUMMARY.html
+http://www.columbia.edu/~jrs9/Navy-Yard-Org.html
+http://www.columbia.edu/~rr91/3567/sample_biographies/annette_baxter_rr_bio.htm
+http://www.columbiadems.org/blog/?p=175
+http://www.columbiaforestproducts.com/company/nyw.php
+http://www.columbiagasohio.com/home/glossary/
+http://www.columbian.com/reflections/tornado.cfm
+http://www.columbiaseminary.edu/coffeetalk/grammar.html
+http://www.columbiaspectator.com/vnews/display.v/ART/2005/04/01/424d12cdd2b1b
+http://www.columbiaspectator.com/vnews/display.v/SEC/Manhattanville+Expansion
+http://www.columbiasurgery.org/divisions/pediatrics/stories.html
+http://www.columbineuuchurch.org/sermons/corwin_sermon1.html
+http://www.columbusalive.com/2005/20050223/022305/02230501.html
+http://www.columbusart.com/artscene/tradewinds.html
+http://www.columbusinfobase.org/
+http://www.columbuswired.net/Columns/DollarStretcher/BigHomes_081802.htm
+http://www.com.washington.edu/rccs/bookinfo.asp?AuthorID=58&BookID=200
+http://www.comalco.com/freedom.aspx?pid=406
+http://www.comare.org.uk/statements/comare_statement_wales.htm
+http://www.combat-diaries.co.uk/diary22chapter_9.htm
+http://www.comcare.gov.au/comcare-annual-report-2004/report-operations-5.html
+http://www.comcat.com/~peace/ptelmtn.html
+http://www.comcom121.org/imitation.htm
+http://www.comdev.ca/investors/faq/faq_fin_info.html
+http://www.comdex.com/news/fall2002/features/index.php?s=common&c=keynote_bonilla
+http://www.comdig.com/index.php?id_issue=2000.34
+http://www.comdig.com/index.php?id_issue=2002.06
+http://www.comdig.com/index.php?id_issue=2002.23
+http://www.comdig.com/index.php?id_issue=2003.06
+http://www.comdig.com/index.php?id_issue=2003.34
+http://www.comdig.com/index.php?id_issue=2004.28
+http://www.comdig.com/index.php?id_issue=2004.39
+http://www.comdig.com/index.php?id_issue=2004.41
+http://www.comdig.org/index.php?id_issue=2003.33
+http://www.comdig.org/index.php?id_issue=2004.51
+http://www.come-and-hear.com/bababathra/bababathra_28.html
+http://www.come-clean.org/
+http://www.comedition.com/Fine%20Arts/
+http://www.comedition.com/Money/
+http://www.comedition.com/News/
+http://www.comedition.com/Young%20Adults/
+http://www.comedycentral.com/tv_shows/travelsick/
+http://www.comehearbooks.com/Faq.php
+http://www.comeoverandhelpus.com/blog/2004_10_01_archive.html
+http://www.comerica.com/cma/cda/main/0,00,1_A_2128,00.html
+http://www.comet-cartoons.com/toons/3ddocs/lipsync/lipsync.html
+http://www.comeunity.com/adoption/realmoms/1maria.html
+http://www.comeunity.com/adoption/special_needs/arthrogryposis.html
+http://www.comicbookresources.com/
+http://www.comicbookresources.com/columns/index.cgi?column=litg&article=1508
+http://www.comicbookresources.com/columns/index.cgi?column=tcp&article=1753
+http://www.comicroasts.com.au/Parties2.htm
+http://www.cominganarchy.com/
+http://www.comingsoon.net/forums/archive/index.php/t-10161-p-35.html
+http://www.comingsoon.net/forums/showthread.php?t=12923&page=3
+http://www.comingsoon.net/forums/showthread.php?t=12923&page=3&pp=25
+http://www.comingsoon.net/news.php?id=10127
+http://www.comingsoon.net/news/topnews.php?id=10059
+http://www.comisiwnrichard.gov.uk/content/events/lawsociety/hwilliams-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/belld/index-w.htm
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/huttj/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/huttj/index-w.htm
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/ucac/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/ucac/index-w.htm
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/wdavidmp/index.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/wtb/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/oral/wtb/index-w.htm
+http://www.comisiwnrichard.gov.uk/content/evidence/written/cardiffpublic/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/written/cetw/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/evidence/written/stonewall/stonewall-cymru-w.asp
+http://www.comisiwnrichard.gov.uk/content/printpage.asp?ID=/content/evidence/oral/ucac/index-w.asp
+http://www.comisiwnrichard.gov.uk/content/printpage.asp?ID=/content/evidence/written/cetw/index-w.asp
+http://www.comixpedia.com/modules.php?op=modload&name=News&file=article&sid=2039
+http://www.comm.toronto.edu/~frank/guide/guide3.html
+http://www.command-post.org/2004/2004_print.html
+http://www.command-post.org/2_archives/007353.html
+http://www.command-post.org/gwot/2_archives/009991.html
+http://www.command-tab.com/index.php/ipod-super
+http://www.commentarymagazine.com/Summaries/V102I3P6-1.htm
+http://www.commentarymagazine.com/Summaries/V10I4P106-1.htm
+http://www.commentarymagazine.com/Summaries/V32I1P92-1.htm
+http://www.commentarymagazine.com/podhoretz.htm
+http://www.commentarymagazine.com/tips.asp
+http://www.commentarypage.com/
+http://www.commerce.otago.ac.nz/mgmt/nzjir/feature2402-02.html
+http://www.commerce.uct.ac.za/Managementstudies/bbussci/degree.asp
+http://www.commerce.uct.ac.za/managementstudies/bbussci/degree.asp
+http://www.commerceqld.com.au/www/index.cfm?itemID=172
+http://www.commercialalert.org/index.php/category_id/2/subcategory_id/35/article_id/144
+http://www.commercialalert.org/index.php/external/true/article_id/292
+http://www.commercialalert.org/obesitynestle.htm
+http://www.commercialappeal.com/mca/goelvis_king_weeks/article/0,1426,MCA_2779_1303346,00.html
+http://www.commercialappeal.com/mca/red_hot/article/0,1426,MCA_15397_3502718,00.html
+http://www.commercialappeal.com/mca/tigers_mens_basketball/article/0,1426,MCA_652_3464246,00.html
+http://www.commercialappeal.com/mca/tigers_mens_basketball/article/0,1426,MCA_652_3467195,00.html
+http://www.commercialdiplomacy.org/articles_news/trade_inservices9.htm
+http://www.commercialdiplomacy.org/cd_programs/darling/barmeier.htm
+http://www.commercialdiplomacy.org/manuals/manual_economic.htm
+http://www.commercialisation.strath.ac.uk/ResearchExpertise/Business.htm
+http://www.comminit.com/events_calendar/2003-events/events-1877.html
+http://www.commissioneadozioni.it/site/en-GB/Per_una_famiglia_adottiva/The_Path_of_Adoption_/default.html
+http://www.committment.com/alower.html
+http://www.committment.com/kron.html
+http://www.committment.com/taylor1.html
+http://www.commodities-now.com/content/market-news/market-news-2004110853147.php
+http://www.commodities-now.com/content/market-news/market-news-20041117141850.php
+http://www.common-place.org/vol-01/no-01/arming/
+http://www.common-place.org/vol-04/no-01/tales/
+http://www.common-place.org/vol-05/no-03/reviews/hoeflich.shtml
+http://www.commoncause.org/site/pp.asp?c=dkLNK1MQIwG&b=200104
+http://www.commoncounsel.org/pages/workplace.html
+http://www.commondreams.org/bernie_sanders_vs_alan_greenspan.htm
+http://www.commondreams.org/cgi-bin/newsprint.cgi?file=/news2004/1102-05.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/headlines03/0402-10.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/headlines04/1126-03.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/views04/0513-09.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/views04/1015-30.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/views04/1210-24.htm
+http://www.commondreams.org/cgi-bin/print.cgi?file=/views05/0102-02.htm
+http://www.commondreams.org/headlines01/0307-01.htm
+http://www.commondreams.org/headlines01/0505-01.htm
+http://www.commondreams.org/headlines01/0619-02.htm
+http://www.commondreams.org/headlines01/1220-02.htm
+http://www.commondreams.org/headlines01/1224-02.htm
+http://www.commondreams.org/headlines02/0128-02.htm
+http://www.commondreams.org/headlines02/0513-05.htm
+http://www.commondreams.org/headlines02/0915-07.htm
+http://www.commondreams.org/headlines02/1127-01.htm
+http://www.commondreams.org/headlines02/1203-03.htm
+http://www.commondreams.org/headlines03/0329-03.htm
+http://www.commondreams.org/headlines03/0402-10.htm
+http://www.commondreams.org/headlines03/0414-03.htm
+http://www.commondreams.org/headlines03/0509-08.htm
+http://www.commondreams.org/headlines03/0630-03.htm
+http://www.commondreams.org/headlines03/0831-04.htm
+http://www.commondreams.org/headlines03/1024-01.htm
+http://www.commondreams.org/news2001/0320-03.htm
+http://www.commondreams.org/pressreleases/Dec98/120198b.htm
+http://www.commondreams.org/pressreleases/July98/073198a.htm
+http://www.commondreams.org/pressreleases/June98/062798a.htm
+http://www.commondreams.org/pressreleases/may99/052599i.htm
+http://www.commondreams.org/views/022400-108.htm
+http://www.commondreams.org/views/081400-101.htm
+http://www.commondreams.org/views01/0418-01.htm
+http://www.commondreams.org/views01/0701-02.htm
+http://www.commondreams.org/views01/0723-01.htm
+http://www.commondreams.org/views01/0814-06.htm
+http://www.commondreams.org/views01/0901-03.htm
+http://www.commondreams.org/views01/0915-08.htm
+http://www.commondreams.org/views01/1029-08.htm
+http://www.commondreams.org/views01/1109-01.htm
+http://www.commondreams.org/views01/1222-02.htm
+http://www.commondreams.org/views02/0125-03.htm
+http://www.commondreams.org/views02/0420-01.htm
+http://www.commondreams.org/views02/0719-01.htm
+http://www.commondreams.org/views03/0212-07.htm
+http://www.commondreams.org/views03/0316-08.htm
+http://www.commondreams.org/views03/0403-06.htm
+http://www.commondreams.org/views03/0416-01.htm
+http://www.commondreams.org/views03/0521-10.htm
+http://www.commondreams.org/views03/0701-09.htm
+http://www.commondreams.org/views03/0806-02.htm
+http://www.commondreams.org/views03/0817-07.htm
+http://www.commondreams.org/views03/1027-01.htm
+http://www.commondreams.org/views03/1216-10.htm
+http://www.commondreams.org/views04/0208-05.htm
+http://www.commondreams.org/views04/0308-08.htm
+http://www.commondreams.org/views04/0513-09.htm
+http://www.commondreams.org/views04/0709-11.htm
+http://www.commondreams.org/views04/1014-30.htm
+http://www.commondreams.org/views04/1027-35.htm
+http://www.commondreams.org/views04/1202-33.htm
+http://www.commondreams.org/views04/1215-26.htm
+http://www.commondreams.org/views05/0102-02.htm
+http://www.commondreams.org/views05/0120-22.htm
+http://www.commondreams.org/views05/0207-32.htm
+http://www.commoner.org.uk/02-9groundzero.htm
+http://www.commongoodmovement.com/articles/TheTruthOfScience.asp
+http://www.commonground.ca/iss/0310147/dauncey.shtml
+http://www.commonground.ca/iss/0505166/cg166_weil.shtml
+http://www.commonground.org/org_info/media/articles/2004-04-01_chronicle/
+http://www.commongroundcommonsense.org/forums/index.php?showtopic=28424&view=getnewpost
+http://www.commongroundnews.org/
+http://www.commongroundnews.org/article.php?id=678
+http://www.commongroundnews.org/article.php?mode=2&id=678
+http://www.commongroundnews.org/article.php?mode=3&id=60
+http://www.commongroundradio.org/shows/00/0021.html
+http://www.commonsblog.org/
+http://www.commonsensemedia.org/reviews/review.php?show=kid&id=3049&type=Video%20Game
+http://www.commonsleader.gov.uk/output/page887.asp
+http://www.commonsleader.gov.uk/output/page893.asp
+http://www.commonwealinstitute.org/itstime.html
+http://www.commonwealmagazine.org/article.php?id_article=1002
+http://www.commonwealth.virginia.gov/FAQs/FAQs.cfm
+http://www.commonwealthclub.org/featured.html
+http://www.commonwealthcommonsense.com/
+http://www.commonwealthknowledge.net/MetCD/Chapter5/C5P08.htm
+http://www.commonwealthnorth.org/transcripts/04annual.html
+http://www.commonwealthnorth.org/transcripts/2000meetingintro.html
+http://www.commsdesign.com/design_corner/showArticle.jhtml?articleID=16504307
+http://www.commsdesign.com/main/9803fe4.htm
+http://www.commsdesign.com/news/tech_beat/OEG20030512S0055
+http://www.commtechreview.net/persdfns/secofr.htm
+http://www.commun-i-care.org/faq.html
+http://www.communication.northwestern.edu/csd/courses/?textOnly=1
+http://www.communication.northwestern.edu/performancestudies/programs/graduate/requirements/
+http://www.communication.northwestern.edu/rtf/faculty/Annette_Barbier/
+http://www.communigate.co.uk/york/ynet/page4.phtml
+http://www.communities.qld.gov.au/family/familiesfirst/policy/outcome_1.html
+http://www.communities.qld.gov.au/family/familiesfirst/tipsheets/tipsheet_babies.html
+http://www.communities.qld.gov.au/family/familiesfirst/tipsheets/tipsheet_moretoddlers.html
+http://www.communitiesscotland.gov.uk/nmsruntime/saveasdialog.asp?lID=3284&sID=249
+http://www.communitiesscotland.gov.uk/stellent/groups/public/documents/webpages/cs_007155.hcsp
+http://www.community.net.nz/CommunityCentre/News/National/CharitiesCommissioner.htm
+http://www.communityarts.net/readingroom/archive/56mount.php
+http://www.communityarts.net/readingroom/archive/fuquay68.php
+http://www.communityassociations.net/weblog/
+http://www.communitycare.co.uk/articles/article.asp?liarticleid=44177&liSectionID=10
+http://www.communitycurrency.org/Prime.html
+http://www.communitygreens.org/ExistingGreens/villagehomes/villagehomes.htm
+http://www.communitygreens.org/Resources/FRhdmrcgen.htm
+http://www.communityinclusion.org/publications/text/rp26.html
+http://www.communitymatters.org.uk/aboutus/objectives.htm
+http://www.communityprofiles.mb.ca/province/advantages/business_climate.html
+http://www.communityprofiles.mb.ca/province/advantages/print-business_climate.html
+http://www.communityselfbuildagency.org.uk/index2.html
+http://www.communitysolution.org/sched.html
+http://www.communitytheater.org/discuss/forum/forum_posts.asp?TID=1218&PN=1&get=last
+http://www.commuterpage.com/atp/ben-biking.cfm
+http://www.comnet.ca/~pballan/C3P1.htm
+http://www.comodogroup.com/repository/docs/instantssl_subscriber_agreement.html
+http://www.comp.hkbu.edu.hk/en/undergrad/?content=IS
+http://www.compactequip.com/features.php?Show=gettingthemost
+http://www.compactlaw.co.uk/free_legal_articles/employment_act_2002.html
+http://www.compad.com.au/cms/prinfluences/articles/472
+http://www.companieshouse.gov.uk/about/policyDocuments/welshLangSc.shtml
+http://www.companybarclaycard.co.uk/bus_silver_policy_details.html
+http://www.compar.com/infopool/articles/news1vs8.html
+http://www.compareinterestrates.com/harmonhomes/lib_how_to_shop.html
+http://www.compassconsulting.com/articles/voipintro.html
+http://www.compassionatefriends.org/2005_national_conference/2005_National_Confernce_in_Boston.htm
+http://www.compassionatefriends.org/survey.shtml
+http://www.compassionatwork.com/art_facing_grief.html
+http://www.compassionindying.org/giving.php
+http://www.compassrosesociety.org/BoardMtg2005.htm
+http://www.compassweb.com/cob/kiplinger/200411/us-brazilian_relations.html
+http://www.compax.com/helpful_hints/buying_tips.html
+http://www.compet.com/alphalist.html
+http://www.competencesw.com/csnews/CSNJan03.htm
+http://www.competition-commission.org.uk/our_peop/members/chair_speeches/html/link2-11.htm
+http://www.competitionelectronics.com/media-files/park_pal_operating_instructions.htm
+http://www.competitivehorse.com/
+http://www.compiler.fi/idankaupan/tutkimukset/specialreports/Liuhto-visons.html
+http://www.compilerpress.atfreeweb.com/Anno%20Mirowski%20On%20Playing%20the%20Economics%20Trump%20Card%20in%20the%20Philosophy%20of%20Science%20Why%20It.htm
+http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Advanced-does--usage-example.html
+http://www.compleatmother.com/homebirth.htm
+http://www.compleatmother.com/hosp/liz5.htm
+http://www.compleatmother.com/tea_company.htm
+http://www.compleatsteve.com/essays/toby_art.htm
+http://www.compleatsteve.com/person/scotland_1995.htm
+http://www.complete-review.com/links/links.html
+http://www.complete-review.com/reviews/mcewani/saturday.htm
+http://www.complete-review.com/saloon/
+http://www.complete-review.com/saloon/archive/200308a.htm
+http://www.complete-review.com/saloon/archive/200501a.htm
+http://www.completelindalovelace.com/html/ihow2.html
+http://www.complex-oil.com/eng/
+http://www.compliancepipeline.com/trends/18100122
+http://www.componentsoftware.com/csrcs/Integration/scc.htm
+http://www.compostguide.com/51-100.html
+http://www.compromise.com/
+http://www.compsoc.com/discus4/messages/205/870.html?1044901700
+http://www.compstrategies.com/staffdevelopment/sdresources2.html
+http://www.comptelascent.org/news/member-profiles/profiles/looking-glass.html
+http://www.comptonfoundation.org/environ.html
+http://www.compudirect.net/oki/okidata_toner_is_special.htm
+http://www.compulsivecreative.com/interview.php?intid=24
+http://www.compuserve.co.uk/content/news/more_package.asp
+http://www.compusmart.ab.ca/designs/
+http://www.compusys.co.uk/Compusys/News+and+Promotions/News/Compusys+achieves+Gold+status+in+MPP.htm
+http://www.computacenter.com/Investor/report-accounts-2004/chairman-statement.asp
+http://www.computalaw.com/order/order.asp
+http://www.computer-darkroom.com/ione/ione-1.htm
+http://www.computer-games-station.com/cats/platform,Windows/genre,Action,_Arcade_and_Shooter_Games/
+http://www.computer-jokes.co.uk/computer-joke-10.html
+http://www.computer-training-software.com/digihome.htm
+http://www.computer-vet.com/weblog/
+http://www.computer.org/computer/author.htm
+http://www.computer.org/computer/homepage/0202/ec/
+http://www.computer.org/computer/homepage/0505/profession/
+http://www.computer.org/computer/homepage/0505/random/
+http://www.computer.org/computer/homepage/0604/random/
+http://www.computer.org/computer/homepage/0802/Security/
+http://www.computer50.org/mark1/newman.html
+http://www.computeractive.co.uk/features/1108674
+http://www.computeractive.co.uk/features/1160013
+http://www.computeramerica.com/content/columns/craig/2005/2005-01-17.htm
+http://www.computerbits.com/aboutus/authors.htm
+http://www.computerbits.com/archive/2001/0100/crossplatform.html
+http://www.computerbits.com/archive/2001/0500/telecommuting.html
+http://www.computerbits.com/archive/2004/1100/vaughan0411.html
+http://www.computerbusinessreview.com/content/COMP/magazine/Articles/Business_Applications/PictureThis.asp
+http://www.computerchat.co.nz/stories.php?story=01/08/21/9142920
+http://www.computercrowsnest.com/Holotales/edit_aug2001.htm
+http://www.computercrowsnest.com/sfnews2/02_march/news0302_8.shtml
+http://www.computercrowsnest.com/sfnews2/03_april/review0403_3.shtml
+http://www.computerhistory.org/timeline/timeline.php?timeline_year=1982
+http://www.computerlearningcenter.org/Dreamweaver.html
+http://www.computers.us.fujitsu.com/www/about.shtml?aboutus/backgrounder/index
+http://www.computersolutionsireland.com/serviceagreement.htm
+http://www.computertakeback.com/the_problem/poisonpcstoxictvs.cfm
+http://www.computertakeback.com/the_problem/ppcsttvs2004.cfm
+http://www.computertimes.com/jul03edchoicefamilylawyer.htm
+http://www.computertimes.com/may01edcoicePresario7000.htm
+http://www.computertrainingschools.com/search/PA/
+http://www.computeruser.com/news/00/08/31/news4.html
+http://www.computerwatch.net/content/view/43/
+http://www.computerweekly.com/Article134082.htm
+http://www.computerweekly.com/Article135145.htm
+http://www.computerworld.com.au/index.php
+http://www.computerworld.com.au/index.php/id;471038434;fp;2;fpid;2
+http://www.computerworld.com.au/index.php/id;471038434;relcomp;1
+http://www.computerworld.com.au/index.php/id;589958305;relcomp;1
+http://www.computerworld.com/blogs/node/390
+http://www.computerworld.com/databasetopics/data/software/story/0,10801,100571,00.html
+http://www.computerworld.com/governmenttopics/government/itgovernment/story/0,10801,96288,00.html
+http://www.computerworld.com/governmenttopics/government/legalissues/story/0,10801,96288,00.html
+http://www.computerworld.com/hardwaretopics/storage/story/0,10801,101628,00.html
+http://www.computerworld.com/hardwaretopics/storage/story/0,10801,102325,00.html?SKC=storage-102325
+http://www.computerworld.com/hardwaretopics/storage/story/0,10801,64572,00.html
+http://www.computerworld.com/hardwaretopics/storage/story/0,10801,98148,00.html
+http://www.computerworld.com/managementtopics/management/story/0,10801,99834,00.html
+http://www.computerworld.com/managementtopics/management/story/0,10801,99834,00.html?source=x10
+http://www.computerworld.com/mobiletopics/mobile/story/0,10801,102503,00.html
+http://www.computerworld.com/mobiletopics/mobile/story/0,10801,102503,00.html?SKC=mobile-102503
+http://www.computerworld.com/mobiletopics/mobile/story/0,10801,102503,00.html?from=story_rules
+http://www.computerworld.com/mobiletopics/mobile/story/0,10801,63887,00.html
+http://www.computerworld.com/news/2003/story/0,11280,83864,00.html
+http://www.computerworld.com/news/2005/story/0,11280,100571,00.html
+http://www.computerworld.com/securitytopics/security/holes/story/0,10801,102747,00.html
+http://www.computerworld.com/softwaretopics/os/linux/story/0,10801,88065,00.html
+http://www.computerworld.com/softwaretopics/os/story/0,10801,96288,00.html
+http://www.computerworld.com/softwaretopics/software/appdev/story/0,10801,54157,00.html
+http://www.computerworld.com/softwaretopics/software/groupware/story/0,10801,95471,00.html
+http://www.computerworld.com/softwaretopics/software/report/0,11188,07192004,00.html
+http://www.computerworld.idg.com.au/index.php/id;1074788073;relcomp;1
+http://www.computex.biz/computex2004/Default.asp?HtmlFile=bestchoice4.htm
+http://www.computex.com.tw/show_Special.asp?id=590
+http://www.computhink.com/_documents/articles/Compliance_Top_Concern.asp
+http://www.computing.co.uk/features/1154907
+http://www.computing.co.uk/news/1139486
+http://www.computing.co.uk/products/hardware/1144347
+http://www.computing.dcu.ie/~away/
+http://www.computing.net/gaming/wwwboard/forum/3759.html
+http://www.computing.net/security/wwwboard/forum/14119.html
+http://www.computing.net/windowsme/wwwboard/forum/43907.html
+http://www.comradesandcolleagues.com/pages/help.asp
+http://www.comunidadandina.org/ingles/press/ottawa23-04-99.htm
+http://www.comw.org/poc/0401.html
+http://www.comw.org/rma/
+http://www.comw.org/rma/fulltext/terrorism.html
+http://www.concealedcarry.com/site_news.php
+http://www.conceptualguerilla.com/wagesandresponsibility.htm
+http://www.concern.ie/pressroom_latest.php?Ds_pressroom_latest_ToStep=step_load_news&news_id=80
+http://www.concern.net/pressroom_features.php?Ds_PressroomFeatures_ToStep=step_load_id&article=19
+http://www.concern.net/pressroom_latest.php?Ds_pressroom_latest_ToStep=step_load_news&news_id=215
+http://www.concern.net/pressroom_latest.php?Ds_pressroom_latest_ToStep=step_load_news&news_id=80
+http://www.concernusa.org/fast/CaseStudies.asp
+http://www.concernusa.org/fast/FASTNews.asp
+http://www.concertina.net/guide_english.html
+http://www.concertposterart.com/postersE.htm
+http://www.concierge.com/destination/nevada/search/result/articles?DestinationName=Nevada
+http://www.concierge.com/destination/nevada/search/result/articles?DestinationName=Nevada&ContentSource=Cond%26%23233%3B+Nast+Traveler
+http://www.concierge.com/destination/newyorkcity/features/Editorial/Feature/data/newyorkcity/fodors/WalkingTour_EastVillage.xml/
+http://www.conciergerie.com/foryou/what-to-do/paris/visit-pass.html
+http://www.concord.org/newsletter/2000fall/onlinedev.html
+http://www.concord.org/~kathy/Walden/wldvillage.html
+http://www.concordant.org/expohtml/HumanDestiny/1cor15.html
+http://www.concordcoalition.org/facing_facts/alert_v5_n4.html
+http://www.concordcoalition.org/facing_facts/ff_fax31.html
+http://www.concordcoalition.org/socialsecurity/010806cssssdtestimony.htm
+http://www.concordia.onlinecommunity.com/scamp/
+http://www.concordiahospital.mb.ca/patients.html
+http://www.concordregionalcrimeline.com/crimeline_concord2003.htm
+http://www.concretecentre.com/main.asp?page=671
+http://www.concretechange.org/cost.htm
+http://www.concretelifestyles.com/DecorativeFinishes.htm
+http://www.condohotelcenter.com/alerts/av1.html
+http://www.conductive-education.com/html/news/wright.html
+http://www.conejo-valley-dream-homes.com/index.asp
+http://www.conejo-valley-dream-homes.com/m_about.asp
+http://www.conejo-valley-dream-homes.com/m_home-seller.asp
+http://www.conejo-valley-dream-homes.com/m_homes.asp
+http://www.conejo-valley-dream-homes.com/m_local.asp
+http://www.conejo-valley-dream-homes.com/m_resources.asp
+http://www.conelrad.com/atomic_cafe.html
+http://www.conference-board.org/utilities/pressDetail.cfm?press_ID=2409
+http://www.conferencealerts.com/language.htm
+http://www.conferenceboard.ca/conf/may05/natl-security/overview.htm
+http://www.conferencecall.com/canada/help/tips/attendance.php
+http://www.conferencecall.com/help/tips/attendance.php
+http://www.conferencemediagroup.com/newarrivals.asp
+http://www.conferenceonline.com.au/index.cfm?page=details_venue&pg=1&id=630
+http://www.confidenceworld.com/speaking.htm
+http://www.conflictresolution.uiuc.edu/mediation/roomsurvey.asp
+http://www.congaree.org/justforgirls/fun_faq.html
+http://www.congercoach.com/simply.html
+http://www.congregationalresources.org/article0132.asp
+http://www.congress.org/congressorg/issues/alert/?alertid=7708566&content_dir=ua_congressorg
+http://www.congressfordemocracy.org.uk/bonde%20speech.html
+http://www.congresslink.org/print_basics_histmats_civilrights64_doc7.htm
+http://www.congressmerge.com/onlinedb/cgi-bin/newmemberbio.cgi?member=SCJR&site=congressmerge
+http://www.congressmerge.com/onlinedb/cgi-bin/newmemberbio.cgi?member=SCJR&site=espanol
+http://www.congressonlineproject.org/121803.html
+http://www.conicyt.cl/version-ingles/explora.html
+http://www.coniston-net.com/clubs/community/community.htm
+http://www.conjunctions.com/webcon/roeggla.htm
+http://www.connect-9.com/bethlehem1.htm
+http://www.connectcreditunion.com.au/subpage.cgi?sectionID=6&subsectionID=68
+http://www.connected.org/learn/knowing.html
+http://www.connectedhomemag.com/HomeTheater/Articles/Index.cfm?ArticleID=41473
+http://www.connectforkids.org/content1556/content_show.htm?attrib_id=348&doc_id=71659
+http://www.connectforkids.org/resources3139/resources_show.htm?attrib_id=354&doc_id=43556&parent=82331
+http://www.connectionnewspapers.com/article.asp?article=46721&paper=70&cat=104
+http://www.connerprairie.org/HistoryOnline/economy.html
+http://www.connexions-direct.com/index.cfm?pid=133&catalogueContentID=169
+http://www.connexions.co.uk/culture/html/stones.htm
+http://www.connexions.gov.uk/jobs4u/furtherdetails.cfm?id=110&parentID=270
+http://www.connpsych.org/
+http://www.conquistador.com/lusitano.html
+http://www.consciouschoice.com/2000/cc1304/anotherwomanstreasure1304.html
+http://www.consciouschoice.com/choicebooks/choicebooks1305.html
+http://www.consciouschoice.com/issues/cc1201/y2kandyou.html
+http://www.consciousness.arizona.edu/tucson2002/
+http://www.conseil-constitutionnel.fr/decision/2004/2004498/eng.htm
+http://www.conseil-constitutionnel.fr/decision/2004/2004498/engc.htm
+http://www.conservation.state.mo.us/nathis/exotic/vegman/nineteen.htm
+http://www.conservation.state.mo.us/nathis/insects/butterf/
+http://www.conservationtech.com/FEMA-WEB/FEMA-subweb-flood/01-06-FLOOD/7-Misc-facilities/B.(Misc)HighV-flows.htm
+http://www.conservativeforum.org/EssaysForm.asp?ID=6270
+http://www.conservativenews.org/Politics/archive/199903/POL19990319a.html
+http://www.conservatives.com/policies/
+http://www.conservatives.com/tile.do?def=news.story.page&obj_id=118408
+http://www.conservatives.com/tile.do?def=news.story.page&obj_id=123249&speeches=1
+http://www.conservatives.com/tile.do?def=news.story.page&obj_id=123325
+http://www.conservatives.com/tile.do?def=news.story.page&obj_id=228&speeches=1
+http://www.conservatives.com/tile.do?def=news.story.page&obj_id=96096&speeches=1
+http://www.conservatives.com/tile.do?def=policy.listing.page
+http://www.conservatives.com/tile.do?def=scotland.news.story.page&obj_id=120792&speeches=1
+http://www.conservativethinking.com/archives/round-the-reader/
+http://www.conservativetruth.org/article.php?id=1931
+http://www.consolationchamps.com/
+http://www.consolidated.com/cc/resi/cc_resi_voicemail_help.jsp
+http://www.consortium-chicago.org/research/ria03.html
+http://www.consortiuminfo.org/what/
+http://www.consortiumnews.com/1999/121499b.html
+http://www.consortiumnews.com/1999/122299a.html
+http://www.consortiumnews.com/2001/050101a.html
+http://www.consortiumnews.com/2003/120103.html
+http://www.consortiumnews.com/2004/101904.html
+http://www.consortiumnews.com/2004/102904.html
+http://www.consortiumnews.com/2005/050905.html
+http://www.consortiumnews.com/2005/061205.html
+http://www.conspiracyarchive.com/NWO/Paranoid.htm
+http://www.conspiracypenpal.com/columns/sosorry.htm
+http://www.consrv.ca.gov/CGS/geologic_resources/gold/
+http://www.consrv.ca.gov/cgs/geologic_resources/gold/
+http://www.constitution.org/2ll/schol/jfp5ch04.htm
+http://www.constitution.org/ac/maclay/journal05.htm
+http://www.constitution.org/afp/brutus10.htm
+http://www.constitution.org/ari/ethic_10.htm
+http://www.constitution.org/wr/rawle_17.htm
+http://www.constitution.org/wr/rawle_32.htm
+http://www.constitutioncenter.org/education/ForEducators/LessonPlans/FifthAmendment/5480.shtml
+http://www.constructatlanta.com/featurea/receptionist.html
+http://www.constructionweblinks.com/Resources/Industry_Reports__Newsletters/Aug_16_2004/dist.html
+http://www.constructionweblinks.com/Resources/Industry_Reports__Newsletters/Dec_15_2003/eichleay.htm
+http://www.constructionweblinks.com/Resources/Industry_Reports__Newsletters/Feb_12_2001/productivity_claim.htm
+http://www.constructionwork.com/glossary/s11.html
+http://www.construx.com/returnonsw/support/AssetRetirementUserGuide.txt
+http://www.consular.australia.or.jp/justarrived.html
+http://www.consultingskills.net/resources/
+http://www.consultingtimes.com/archives/2004_11.html
+http://www.consultwebs.com/st-louis-personal-injury-lawyers/
+http://www.consumer-action.org/English/CANews/1997_Summer_Advocacy_EBT/index.php
+http://www.consumer-action.org/English/library/cars/2003_BofA_CarLoan/index.php
+http://www.consumer-guides.info/employment/employment_interviewers/
+http://www.consumer.gov.au/html/direct_marketing/html/Report/3Environment.html
+http://www.consumer.gov.au/html/direct_marketing/html/Report/7TOR4.html
+http://www.consumer.gov.uk/rda/guide/chapter7.htm
+http://www.consumer.qld.gov.au/oft/oftweb.nsf/0/4C95CD28D4DC34CF4A256D410008E744?OpenDocument&L1=Youth+Section
+http://www.consumer.qld.gov.au/oft/oftweb.nsf/0/D99E11C6CFC1A95A4A256D410003EDAF?OpenDocument&L1=Youth+Section
+http://www.consumeraffairs.com/cell_phones/local_phone.htm
+http://www.consumeraffairs.com/homeowners/us_window.html
+http://www.consumeraffairs.com/news04/2005/experian_abandons_data.html
+http://www.consumeraffairs.com/news04/2005/patriot01.html
+http://www.consumeraffairs.com/news04/2005/us_air_attendants.html
+http://www.consumeraffairs.com/news04/vioxx_wsj.html
+http://www.consumeraffairs.govt.nz/aboutus/review/background/key-trends/key-trends-04.html
+http://www.consumeraffairs.govt.nz/consumerinfo/layby.html
+http://www.consumeralert.org/pubs/research/sept97.htm
+http://www.consumerauto.com/scenario.html
+http://www.consumerbuilding.com/ideas_you_can_use_unique.html
+http://www.consumerdirect.gov.uk/before-u-buy/fs_b01.shtml
+http://www.consumerlab.com/results/flaxseed.asp
+http://www.consumerlaw.com/481j.html
+http://www.consumerlaw.org/initiatives/energy_and_utility/liheap52303.shtml
+http://www.consumerlaw.org/initiatives/predatory_mortgage/fdic_com1.shtml
+http://www.consumerpsychologist.com/international.htm
+http://www.consumerreports.org/main/content/display_content.jsp?CONTENT%3C%3Ecnt_id=297923&FOLDER%3C%3Efolder_id=162679&ASSORTMENT%3C%3East_id=333147
+http://www.consumerreports.org/main/content/display_content.jsp?CONTENT%3C%3Ecnt_id=331855&FOLDER%3C%3Efolder_id=162679&ASSORTMENT%3C%3East_id=333147
+http://www.consumerreports.org/main/content/display_content.jsp?CONTENT%3C%3Ecnt_id=378185&FOLDER%3C%3Efolder_id=162679&ASSORTMENT%3C%3East_id=333147
+http://www.consumerreports.org/main/content/display_content.jsp?CONTENT%3C%3Ecnt_id=4071&FOLDER%3C%3Efolder_id=142789&ASSORTMENT%3C%3East_id=333133
+http://www.consumerreports.org/main/content/display_report.jsp?FOLDER%3C%3Efolder_id=419337&ASSORTMENT%3C%3East_id=333141
+http://www.consumerreports.org/main/detailv2.jsp?CONTENT%3C%3Ecnt_id=23347&FOLDER%3C%3Efolder_id=23051
+http://www.consumerreports.org/main/detailv2.jsp?CONTENT%3C%3Ecnt_id=297923&FOLDER%3C%3Efolder_id=162679
+http://www.consumerreports.org/main/detailv4.jsp?CONTENT%3C%3Ecnt_id=161629&FOLDER%3C%3Efolder_id=161605&ASSORTMENT%3C%3East_id=333133
+http://www.consumerreports.org/static/0110bio0.html
+http://www.consumersearch.com/www/automotive/luxury_sedans/fullstory.html
+http://www.consumersearch.com/www/automotive/used_cars_economy_cars/fullstory.html
+http://www.consumersearch.com/www/house_and_home/long_distance_phone_service/fullstory.html
+http://www.consumersonline.gov.au/content/ProductSafety/RIS/resources_RIS_98_2.asp
+http://www.consumersonline.gov.au/content/ProductSafety/RIS/resources_RIS_98_3.asp
+http://www.consumersunion.org/finance/mrgreqfedwc498.htm
+http://www.consumersunion.org/products/fordc1000.htm
+http://www.consumersunion.org/tips/tips-holiday.htm
+http://www.consumerwatchdog.org/healthcare/nw/nw000233.php3
+http://www.consumerwatchdog.org/utilities/nw/nw001582.php3
+http://www.consumerwebwatch.org/dynamic/press-release-beau-brendler.cfm
+http://www.cont-ed.cam.ac.uk/IntSummer/sschools/International/term1/c01.htm
+http://www.cont-ed.cam.ac.uk/IntSummer/sschools/Science/courses/p16.htm
+http://www.cont-ed.cam.ac.uk/PublicCourses/Res/c.html
+http://www.contactinnovations.com/
+http://www.contactpakistan.com/legal/faqs.htm
+http://www.contactprofessional.com/issues/article.asp?ID=57
+http://www.contaxguide.com/archive_contax/050120/050120_florida_news_groups_address_important_concerns_of_gay_seniors.html
+http://www.conted.ox.ac.uk/cpd/healthsciences/courses/ebhc/pg_diploma/fees_and_terms.asp
+http://www.contemplativemind.org/resources/pubs/02lawreport.html
+http://www.contemporaryartscenter.org/calendar/default.lasso
+http://www.contemporarybathdesign.com/stained-glass/
+http://www.contemporaryfamilies.org/2-income%20trap.htm
+http://www.contemporaryfamilies.org/public/articles/change24.htm
+http://www.content-wire.com/Media/Media.cfm?ccs=129&cs=1784
+http://www.contentious.com/articles/1-9/contender1-9.html
+http://www.contentquality.com/tutorial/c21.htm
+http://www.context.co.nz/newsitems/viewdepartment$Defence
+http://www.context.co.nz:8080/stories/storyReader$546
+http://www.context.org/GROUPS/CI/ci.htm
+http://www.context.org/ICLIB/IC02/Gilman2.htm
+http://www.context.org/ICLIB/IC02/Paulson.htm
+http://www.context.org/ICLIB/IC11/WholePer.htm
+http://www.context.org/ICLIB/IC12/Sheldrak.htm
+http://www.context.org/ICLIB/IC13/Playfair.htm
+http://www.context.org/ICLIB/IC20/Shuman.htm
+http://www.context.org/ICLIB/IC22/Barry.htm
+http://www.context.org/ICLIB/IC23/Elgin.htm
+http://www.context.org/ICLIB/IC37/Gartenst.htm
+http://www.context.org/ICLIB/IC37/Gilbert.htm
+http://www.context.org/ICLIB/IC38/Gerbner.htm
+http://www.context.org/ICLIB/IC42/Jeavons.htm
+http://www.contextmag.com/archives/199903/BookExcerpt.asp
+http://www.contextmag.com/archives/199911/VirtualHorizons.asp
+http://www.contextmag.com/archives/199911/VirtualHorizons.asp?process=print
+http://www.contextmag.com/archives/200002/Feature1BlandAmbition.asp
+http://www.contextmag.com/archives/200004/VirtualHorizons.asp
+http://www.contextsmagazine.org/content_sample_v3-4.php
+http://www.conti-tyres.co.uk/conticycle/news/news_sept03.htm
+http://www.conti-tyres.co.uk/conticycle/news/news_sept03part2.htm
+http://www.continentaldrifters.com/betterreview.htm
+http://www.contingentlaw.com/Hiirng%20Temps%20Riskier%20Business.htm
+http://www.continuitycentral.com/feature0136.htm
+http://www.contracostatimes.com/mld/cctimes/living/home/home_improvement/exterior/doors_and_windows/ask_expert_front.htm?forumId=178&mode=display&action=&type=list&pageNo=8
+http://www.contracostatimes.com/mld/cctimes/living/home/home_improvement/exterior/doors_and_windows/ask_expert_front.htm?forumId=178&mode=display&action=&type=list&pageNo=9
+http://www.contracostatimes.com/mld/cctimes/news/state/10708123.htm
+http://www.contracthireandleasing.com/cars/Audi/
+http://www.contracthireandleasing.com/cars/Citroen/
+http://www.contracthireandleasing.com/cars/Vauxhall/
+http://www.contractingbusiness.com/25/SiteMap/Article/False/5351/
+http://www.contractorguides.com/2002costguides.html
+http://www.contractorguides.com/bnifacman20c.html
+http://www.contractors-license.org/oh/Ohio.html
+http://www.contrails.nl/contrails%20research/Contrails%20NASA%2001.htm
+http://www.contrast.org/treesit/archives/2004_07.html
+http://www.contrasto.it/eng/communication/index_stock.asp
+http://www.contributionsmagazine.com/direct_response.html
+http://www.contributionsmagazine.com/julaug03.html
+http://www.control.com.au/bi2003/articles241/feat3_241.shtml
+http://www.control.com/964796944/index_html
+http://www.control.com/965047727/index_html
+http://www.control.com/965237156/index_html
+http://www.converge.org.nz/pma/fs191104a.htm
+http://www.converge.org.nz/pma/rob00231.htm
+http://www.convergedigest.com/standards/standardsarticle.asp?ID=12913
+http://www.conversation-king.com/
+http://www.conversations.org/99-1-turrell.htm
+http://www.conversations.org/jim_campbell.htm
+http://www.conversely.com/Stori/st028.shtml
+http://www.conversionchronicles.com/page.php?PageID=36&tracking=articledifferentiateembedded
+http://www.convivial.com/
+http://www.conzz.com/thump/thump/ltr_931222_tomyfather.html
+http://www.cooking.com/products/shprodde.asp?SKU=300593
+http://www.cookingforengineers.com/article.php?id=45
+http://www.cookmn.com/V,%20Bill%20Lobe.htm
+http://www.cooks.com/rec/search/0,1-00,prime_rib_in_rock_salt,FF.html
+http://www.coolabah.com/ausblog/marie/
+http://www.coolantarctica.com/Antarctica%20fact%20file/antarctica%20environment/whats%20it%20like%20in%20Antarctica2.htm
+http://www.coolcleveland.com/index.php/Main/SkirtingTheIssueWeAreAllMisfits
+http://www.coolios.net/archives/matth.php
+http://www.coollessons.org/
+http://www.coollessons.org/spacecolony.htm
+http://www.coolnurse.com/rape2.htm
+http://www.coolnurse.com/smoking_quit.htm
+http://www.coolrunning.com.au/cgi-bin/ubbcgi/ultimatebb.cgi?ubb=get_topic;f=8;t=000355
+http://www.coolrunning.com/engine/1/1_31/2444.shtml
+http://www.coolrunning.com/engine/2/2_1/165.shtml
+http://www.coolrunning.com/engine/2/2_1/262.shtml
+http://www.coolrunning.com/engine/6/6_1/1073.shtml
+http://www.coolrunning.com/engine/6/6_1/288.shtml
+http://www.coolrunning.com/forums/Forum1/HTML/073047.shtml
+http://www.coolrunning.com/mtwashington/info_week.html
+http://www.coolrunning.com/rd_newsletter/0703.html
+http://www.coolstuffalaska.com/Mall/Stores/StoreInfo/asp/store-id/1000043213.html
+http://www.cooltown.com/cooltown/mpulse/0602-thinker.asp
+http://www.cooltown.com/cooltown/mpulse/0803-moblogging.asp
+http://www.cooltown.com/cooltown/mpulse/1103-computon.asp
+http://www.cooltown.com/cooltown/mpulse/1202-rulesbazaar.asp
+http://www.coolwomen.org/coolwomen/CWsite.nsf/0/A2ACAB7B9C78EE9285256CE60055A94C?OpenDocument
+http://www.coopamerica.org/yearend/fairtrade.html
+http://www.cooper.com/content/insights/newsletters/2004_issue04/Ten_ways_to_kill_design.asp
+http://www.cooscountydemocrat.com/topstories.shtml
+http://www.copebhs.com/Careers%20COPE.htm
+http://www.copeland-corp.com/co/co_6_3_.htm
+http://www.copernic.com/en/products/desktop-search/
+http://www.copernicus.org/EGU/hess/assignment.html
+http://www.copernicus.org/ems/2004/guidelines_for_pc.htm
+http://www.copernicus.org/ems/2005/guidelines_for_pc.htm
+http://www.copernicus.org/icrc/manuscript.htm
+http://www.copernicusmarketing.com/about/mzine/monthlyeds/julaug03.htm
+http://www.coping.org/anger/blocks.htm
+http://www.coping.org/control/letgo.htm
+http://www.coping.org/growth/patient.htm
+http://www.coping.org/victorious/letgovic1.htm
+http://www.copper.org/applications/electrical/pq/casestudy/kgbi_station_A6082.html
+http://www.copper.org/environment/uk/ukrecyc.html
+http://www.copperlily.com/AboutRayWinstone/themartins.html
+http://www.copperriver.org/residentvalues.html
+http://www.copus.org.uk/grants_awarded_2001nsw.html
+http://www.copware.com/support/
+http://www.copyright.cornell.edu/training/Hirtle_Public_Domain.htm
+http://www.copyright.gov/circs/circ1.html
+http://www.copyright.gov/circs/circ15t.html
+http://www.copyright.gov/docs/regstat62499r.html
+http://www.copyright.gov/fedreg/2001/66fr29700.html
+http://www.copyright.gov/title17/92chap1.html
+http://www.copyright.gov/title17/92chap12.html
+http://www.copyright.gov/title17/92chap4.html
+http://www.copyrightaware.gov.au/pathways/students/mean.html
+http://www.cor.eu.int/en/presentation/prior_pres.htm
+http://www.coralcay.org/costs/how_much.php
+http://www.coralss.moe.edu.sg/emagazine/archive/archive2002/sem1/febweek2/educationsystems.htm
+http://www.corante.com/copyfight/archives/2005/05/09/hilary_rosen_laments_apples_drm_strategy.php
+http://www.corante.com/copyfight/archives/2005/05/25/the_economist_rails_on_flawed_bsa_piracy_study.php
+http://www.corante.com/customer/archives/2004_07.html
+http://www.corante.com/importance/
+http://www.corante.com/importance/archives/002098.html
+http://www.corante.com/importance/archives/002343.html
+http://www.corante.com/importance/archives/004563.html
+http://www.corante.com/importance/archives/cat_induce_act.php
+http://www.corante.com/loom/archives/cat_hobbits_homo_floresiensis.html
+http://www.corante.com/many/archives/2004/01/14/adolescence_goes_public.php
+http://www.corante.com/many/archives/2004/01/26/is_social_software_bad_for_the_dean_campaign.php
+http://www.corante.com/many/archives/2004/03/22/relationship_two_worldviews.php
+http://www.corante.com/many/archives/2004/08/02/mimi_ito_on_mobile_devices_and_presence.php
+http://www.corante.com/many/archives/2005/01/20/social_consequences_of_social_tagging.php
+http://www.corante.com/many/archives/2005/01/22/folksonomies_are_a_forced_move_a_response_to_liz.php
+http://www.corante.com/many/archives/2005/01/22/more_on_social_software_as_a_term.php
+http://www.corante.com/mooreslore/archives/2005/06/06/second_secular_humanist_revival_meeting.php
+http://www.corante.com/openmind/archives/001898.php
+http://www.corante.com/personal/
+http://www.corante.com/pipeline/archives/cat_how_not_to_do_it.php
+http://www.corbinball.com/articles_meeting/index.cfm?fuseaction=cor_ArticleView&artid=503&sectionCode=art_meet
+http://www.corbytoday.co.uk/
+http://www.cord.edu/dept/soc.socwk/soc_socwkdept_swcourses.html
+http://www.cordblood.com/cord_blood_news/stem_cell_news/a_heart_muscle.asp
+http://www.cordblood.com/cord_blood_news/stem_cell_news/a_promise.asp
+http://www.cordis.lu/greece/conclusions.htm
+http://www.cordis.lu/improving/public-awareness/science.htm
+http://www.cordis.lu/ist/bwp_en7f.htm
+http://www.cordis.lu/libraries/en/nfp/france-en.html
+http://www.cordis.lu/mariecurie-actions/mscoop/apply.htm
+http://www.core77.com/resource/sell.html
+http://www.coreknowledge.org/CK/about/articles/miscon.htm
+http://www.corelmag.com/newdream/dream101/CHAP03.HTM
+http://www.coreyandjayshow.com/Retrosexuals.html
+http://www.corezon.com/products/CFA.shtml
+http://www.corfield.org/index.cfm?event=blog.archive&month=2003_04
+http://www.cori.ie/justice/about/role_policy.htm
+http://www.corichan.com/contrib/eigocuri.html
+http://www.corichan.com/lyrics/albums/namie-style.html
+http://www.corinproinca.com/english/notes.htm
+http://www.corkcorp.ie/ourservices/environment/demcon.shtml
+http://www.corkcorp.ie/ourservices/finance/revenue.shtml
+http://www.corkid.co.uk/southafricasample.htm
+http://www.corkkerry.ie/accommodation/accomm_types.asp
+http://www.corkmasters.com/index.php?article=44&layout=61&visual=1&view=chronicles
+http://www.corn.org/faq.htm
+http://www.corn.org/web/faq.htm
+http://www.cornell.edu/president/speeches_2003_1012.cfm
+http://www.cornerstone.com/4threcor.html
+http://www.cornerstone.com/antitrus.html
+http://www.cornerstonemag.com/features/iss119/great_is_repentance.html
+http://www.cornerstoneri.com/comments/no,_mr__chairman.htm
+http://www.corning.com/displaytechnologies/ww/en/media_center/press_releases/2004/2004042801.aspx
+http://www.cornwall.gov.uk/Tourism/caccess/prow/budewalk.htm
+http://www.cornwall.gov.uk/Transport/Ltp/detstr/Detstr2f.htm
+http://www.cornwall.gov.uk/business/objone/qr/penwithsep03.htm
+http://www.cornwall.gov.uk/fire/fsafety/fs04.htm
+http://www.cornwall.nhs.uk/rcht/CLIENT/05_facilities/facilities.asp
+http://www.corp.aol.com/whoweare/comminv.shtml
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=AETC&script=400&layout=11
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=BDK&script=1801
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=SIAL&script=410&layout=-6&item_id=634263
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=SIAL&script=410&layout=-6&item_id=671921
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=alex&script=400&item_id=1020304050607
+http://www.corporate-ir.net/ireye/ir_site.zhtml?ticker=alex&script=400&layout=7&item_id=1020304050607
+http://www.corporateaccountability.org/regulation/main.htm
+http://www.corporateartists.com/comedy_the_passing_zone.html
+http://www.corporatelogo.com/articles/341apparel.html
+http://www.corporatetraining.ie/info/about.php
+http://www.corporatewatch.org.uk/magazine/issue9/cw9cm2.html
+http://www.corporatewatch.org.uk/newsletter/issue16/part5.htm
+http://www.corporatewatch.org.uk/profiles/nfu/nfu8.htm
+http://www.corporatewatch.org.uk/resources/working_from_within.htm
+http://www.corporationcentre.ca/docen/pinc/home.asp?t=checkab
+http://www.corporationcentre.ca/docen/pinc/home.asp?t=checkqc
+http://www.corporationcentre.ca/docen/pinc/home.asp?t=checksk
+http://www.corpse.org/issue_14/unm_person/smith.html
+http://www.corptech.com/business-information/applications.php
+http://www.corpun.com/mys00310.htm
+http://www.corpun.com/uks00407.htm
+http://www.corpwatch.org/article.php?id=10449
+http://www.corpwatch.org/article.php?id=11127
+http://www.corpwatch.org/article.php?id=11192
+http://www.corpwatch.org/article.php?id=11244
+http://www.corpwatch.org/article.php?id=11260
+http://www.corpwatch.org/article.php?id=11325
+http://www.corpwatch.org/article.php?id=11624
+http://www.corpwatch.org/article.php?id=11799
+http://www.corpwatch.org/article.php?id=12020
+http://www.corpwatch.org/article.php?id=12201
+http://www.corpwatch.org/article.php?id=12433
+http://www.corpwatch.org/article.php?id=1375
+http://www.corpwatch.org/article.php?id=1810
+http://www.corpwatch.org/article.php?id=447
+http://www.corpwatch.org/article.php?id=4708
+http://www.corpwatch.org/article.php?id=6008
+http://www.corpwatch.org/article.php?id=7608
+http://www.corpwatch.org/article.php?id=7628
+http://www.corpwatch.org/article.php?id=7856
+http://www.corpwatch.org/article.php?id=7890
+http://www.corpwatch.org/article.php?id=852
+http://www.corpwatch.org/article.php?id=878
+http://www.corpwatch.org/print_article.php?&id=10449
+http://www.corpwatch.org/print_article.php?&id=11244
+http://www.corpwatch.org/print_article.php?&id=11799
+http://www.corpwatch.org/print_article.php?&id=11836
+http://www.corpwatch.org/print_article.php?&id=7890
+http://www.corpwatch.org/print_article.php?&id=878
+http://www.corralitoshistory.com/families.html
+http://www.correctionalnews.com/index.cfm?do=otm&action=archive&otm_id=86
+http://www.correctionhistory.org/html/chronicl/nycdoc/html/hynesirish.htm
+http://www.corrections.govt.nz/public/research/psychiatricmorbidity/
+http://www.corrections.state.ne.us/administration/support_services/engineering.html
+http://www.correllconcepts.com/Pizza_Packaging/dream_box.htm
+http://www.correspondences.org/archives/000390.html
+http://www.corrosion-doctors.org/MonitorBasics/Introduction.htm
+http://www.corusconstruction.com/page_9124.htm
+http://www.corvettechallenge.info/04clubchallengepoints.php
+http://www.corwm.org.uk/content-486
+http://www.cos-trust.com/utility/legal.aspx
+http://www.cos.edu/view_page.asp?nodeid=2744&parentid=2258&moduleid=1
+http://www.cosatu.org.za/news/weekly/20050603.htm
+http://www.cosatu.org.za/shop/shop1004/shops1004-04.htm
+http://www.cosatu.org.za/shop/ss0706-3.htm
+http://www.cosforums.com/archive/index.php/t-12303.html
+http://www.cosforums.com/archive/index.php/t-45392.html
+http://www.cosforums.com/archive/index.php/t-7866.html
+http://www.cosmeticpackaginganddesign.com/features/featureJulyAugust041.htm
+http://www.cosmeticsdesign.com/news/listnews.asp?m=1&y=2004
+http://www.cosmeticsdesign.com/news/listnews.asp?m=1&y=2005
+http://www.cosmiclight.com/imagegalleries/beyond.htm
+http://www.cosmoetica.com/B103-DES58.htm
+http://www.cosmos-club.org/journals/1998/ausubel.html
+http://www.cosmos-club.org/journals/1999/kaplan.html
+http://www.cossa.org/CPR/toomeytranscript.htm
+http://www.costablanca-news.com/archives/28nov.htm
+http://www.costablanca-news.com/employ.htm
+http://www.costco.com/Browse/Product.aspx?prodid=10038551&whse=BC&topnav=&cat=115&hierPath=114*115*
+http://www.costik.com/weblog/
+http://www.costik.com/weblog/2004_06_01_blogchive.html
+http://www.costik.com/weblog/2005_04_01_blogchive.html
+http://www.costumes.org/advice/costcraftsmanual/tmpjk8.htm
+http://www.cosworth-technology.co.uk/700_information/700_fuel_eng.htm
+http://www.cotf.edu/ete/modules/korea/kactivities.html
+http://www.cotf.edu/ete/teacher/teacherout.html
+http://www.cotr.bc.ca/trades/cotr_web.asp?IDNumber=199&MenuItem=Heavy+Duty%2FCommercial+Transport+Mechanics&ParentID=Pages
+http://www.cotr.bc.ca/trades/cotr_web_text.asp?IDNumber=199&MenuItem=Heavy+Duty%2FCommercial+Transport+Mechanics&ParentID=Pages
+http://www.cotsjournalonline.com/home/article.php?id=100158
+http://www.cotswolds.info/accommodation/northleach-lodgings.htm
+http://www.cotswolds.info/cotswold-books.htm
+http://www.cotswolds.info/places/moreton-in-marsh.htm
+http://www.cottages4you.co.uk/c4y?action=xsl&view=xsl&xsltId=allabout
+http://www.cottagesunlimited.com/sales.htm
+http://www.cotton.org/issues/2004/csp-comments.cfm
+http://www.cottonboard.org/index.asp?Cat=&sub=&cid=318
+http://www.cottonexperts.com/=file:Labels%20MSDS/20050112170600109974094437384248/file
+http://www.cottonexperts.com/=file:Labels%20MSDS/20050112170609456628694829688581/file
+http://www.cottonexperts.com/beltwide_daily05/
+http://www.cottonsjourney.com/Storyofcotton/page7.asp
+http://www.couchsurfing.com/map_surf.html?id=105625&show=friend_links
+http://www.cougarmtn.com/support/softwareAssurance.asp
+http://www.couns.msu.edu/emotional-trauma.htm
+http://www.couns.uiuc.edu/Brochures/friends.htm
+http://www.couns.uiuc.edu/Brochures/grief.htm
+http://www.counsel.nysed.gov/Decisions/volume38/d13970.htm
+http://www.counsel.nysed.gov/edtopics/technology.htm
+http://www.counsel.ufl.edu/selfHelp/datingSkills.asp
+http://www.counsel.ufl.edu/selfHelp/fairFighting.asp
+http://www.counsel.ufl.edu/selfHelp/handlingFears.asp
+http://www.counsel.ufl.edu/selfHelp/helpingFriend.asp
+http://www.counseling.umd.edu/Infodata/inf_bd5.htm
+http://www.counselingservices.org/past%20spotlights/june2003.htm
+http://www.counselling.cam.ac.uk/eating.html
+http://www.counselling.cam.ac.uk/exams.html
+http://www.counselling.cam.ac.uk/groups.html
+http://www.count.com.au/planning_life/kids_corner.htm
+http://www.counter-surveillance.com/Page_16x.html
+http://www.counterbias.com/blog/
+http://www.countercurrents.org/ei-abunimah240604.htm
+http://www.countercurrents.org/gen-banerjee010503.htm
+http://www.countercurrents.org/iraq-hitmat210804.htm
+http://www.countercurrents.org/pa-omer191004.htm
+http://www.countercurrents.org/peakoil-deffeys270204.htm
+http://www.counterpane.com/jobsfull.html
+http://www.counterpunch.com/jacobs02052005.html
+http://www.counterpunch.org/floyd02152003.html
+http://www.counterpunch.org/leopold01172005.html
+http://www.counterpunch.org/madarasz0527.html
+http://www.counterpunch.org/patrick12222004.html
+http://www.counterpunch.org/sohel1220.html
+http://www.country-data.com/cgi-bin/query/r-13951.html
+http://www.country-studies.com/china/common-social-patterns.html
+http://www.country-studies.com/japan/relations-with-the-united-states.html
+http://www.country-studies.com/pakistan/foreign-economic-relations.html
+http://www.country95.fm/home/results.cfm?QID=464
+http://www.country95.fm/home/results.cfm?QID=624
+http://www.countrycottagesonline.com/Self-catering-August-Bank-Holiday.htm
+http://www.countrycottagesonline.net/project/site/Cottage_details.php?Cottageid=298
+http://www.countryholidays.com.sg/tourDetails.asp?tripKey=111
+http://www.countrynews.com.au/story.asp?TakeNo=200501104548420
+http://www.countryseat.com/store.htm
+http://www.countryside-alliance.org/media-centre/nca/main/010703the.htm
+http://www.countryside.gov.uk/LivingLandscapes/finest_countryside/new_designations/SouthDowns/index.asp
+http://www.countryside.gov.uk/WhoWeAreAndWhatWeDo/boardMeetings/annexes/CA_AP02_28.asp
+http://www.countryside.gov.uk/WhoWeAreAndWhatWeDo/boardMeetings/boardPapers/CA_AP01_17.asp
+http://www.countryside.gov.uk/WhoWeAreAndWhatWeDo/boardMeetings/minutes/12th_minutes.asp
+http://www.countryside.gov.uk/WhoWeAreAndWhatWeDo/boardMeetings/minutes/20th_minutes.asp
+http://www.countryside.gov.uk/WhoWeAreAndWhatWeDo/whoWeAre/speeches_visits/speeches_jan_jun_/chairspeech_23Jan03.asp
+http://www.countrysidemodels.co.uk/homepages/questionnaireonline.htm
+http://www.countrysingles.com/female_personals.htm
+http://www.countrywalker.com/madeira/mad_monte.htm
+http://www.countway.harvard.edu/informatics/courseware/BioCompWWW/generalConsiderations.htm
+http://www.countway.med.harvard.edu/archives/guidanceCommittees.shtml
+http://www.countway.med.harvard.edu/archives/historyNotes.shtml
+http://www.county.oxford.on.ca/economics/economicdevenglish.htm
+http://www.countycar.ie/resources.html
+http://www.countyofinyo.org/Board%20Agenda%20Minutes/board_mi_nutes_-_july_23,_2002.htm
+http://www.countyofinyo.org/Board%20Agenda%20Minutes/board_minutes_-_november_26,_2002.htm
+http://www.countyofrenfrew.on.ca/humanresources/AccessCommittee.htm
+http://www.countyofrenfrew.on.ca/publicworks/roads.htm
+http://www.countyoursheep.com/d/20040125.html
+http://www.couplescompany.com/Advice/Chris/BitesBreaks.htm
+http://www.couplescompany.com/Features/CT/Movies/Fahrenheit911.htm
+http://www.couplescompany.com/Features/Politics/2004/ChildBehind.htm
+http://www.couplesinstitute.com/couples/artman2/publish/article_5.shtml
+http://www.couragetospeak.org/DrugInformation.htm
+http://www.courier-journal.com/cjextra/2005projects/charles/0110/A1-alzdaytwo0110-11961.html
+http://www.courierpostonline.com/columnists/cxan062504a.htm
+http://www.courierpostonline.com/columnists/cxan091904a.htm
+http://www.coursearch.com/articles/school/sat/Sat.html
+http://www.coursecalendar.mcgill.ca/UndergraduateOnline200405-03-1.html
+http://www.courses.lsbu.ac.uk/postgrad/research/index.asp?v1=4
+http://www.courses.vcu.edu/INFO465-gs/orders_&_details.htm
+http://www.coursework.info/i/15914.html
+http://www.coursework.info/i/16256.html
+http://www.coursework.info/i/16913.html
+http://www.coursework.info/i/19046.html
+http://www.coursework.info/i/20950.html
+http://www.coursework.info/i/23106.html
+http://www.coursework.info/i/29795.html
+http://www.coursework.info/i/63983.html
+http://www.court.state.nd.us/court/Notices/970225/rule2.1.htm
+http://www.courts.ie/offices.nsf/lookuppagelink/A92C1F176946C63680256E770049F4A8
+http://www.courts.mo.gov/courts/pubopinions.nsf/0/655db8e2def439a486256e47006ab7bb?OpenDocument
+http://www.courts.mo.gov/courts/pubopinions.nsf/0/fccce115c2be033c86256db0004f50b7?OpenDocument
+http://www.courts.state.me.us/opinions/2004%20documents/04me41hu.htm
+http://www.courts.state.me.us/opinions/2005%20documents/05me20ph.htm
+http://www.courts.state.nh.us/supreme/opinions/2001/neuma173.htm
+http://www.courts.state.ny.us/ctapps/510rules.htm
+http://www.courts.state.ny.us/rules/chiefadmin/116.shtml
+http://www.courts.state.ny.us/supctmanh/brown_at_50.htm
+http://www.courts.state.va.us/drs/faq.html
+http://www.courts.state.wi.us/news/archives/2004/newrule110204.htm
+http://www.courtservice.gov.uk/about_us/our_performance/welsh_lang/e_welshlang/annex_c.htm
+http://www.courtservice.gov.uk/legal_pro/tariffs/tarif_stemp.htm
+http://www.courttv.com/onair/shows/mugshots/indepth/harding_rosenberg.html
+http://www.courttv.com/talk/chat_transcripts/2004/0506houseofclues-karim.html
+http://www.courttv.com/talk/chat_transcripts/2005/0323heists-brasselle.html
+http://www.courttv.com/talk/chat_transcripts/2005/0412heists-myers.html
+http://www.coutts.com/info/contact.asp
+http://www.covchurch.org/cov/financial/12A.html
+http://www.covchurch.org/cov/financial/contents.html
+http://www.covchurch.org/cov/stewardship/help-chair.html
+http://www.covenanter.org/Steele/declarationandtestimony.htm
+http://www.covenanthealthcare.com/body.cfm?id=212
+http://www.coventry.ac.uk/courses/course/279.html
+http://www.coventry.ac.uk/courses/course/9041.html
+http://www.coventry.gov.uk/ccm/navigation/community-and-living/consumer-advice-and-protection/faulty-goods/
+http://www.coventryhall.com.au/hintjones.htm
+http://www.coverbands.com.au/MessageBoard2/topic.asp?ARCHIVE=true&TOPIC_ID=1490&whichpage=6
+http://www.coveredbridgegirlscouts.org/forms.asp
+http://www.coverfire.com/
+http://www.coveringallfamilies.org/Programs.html
+http://www.coveryourasp.net/
+http://www.covewoodlodge.com/cw-njs/lodging-summer.htm
+http://www.cowbeech.force9.co.uk/TOWN.htm
+http://www.cowboylyrics.com/
+http://www.cowsinthebarn.com/
+http://www.coxandforkum.com/
+http://www.coxrail.com/infowanted.htm
+http://www.coyoteblog.com/coyote_blog/2005/06/time_to_thaw_re.html
+http://www.coyoteblog.com/coyote_blog/general_business/
+http://www.cozashop.co.za/spotlight/nissan-micra/index.shtm
+http://www.cp.duluth.mn.us/~ennyman/xon.html
+http://www.cp.org/english/copytalk/ct021997.htm
+http://www.cp.org/survey/c8.htm
+http://www.cp.umist.ac.uk/JCSE/details.html
+http://www.cpa-apc.org/Publications/Archives/CJP/2003/july/vaiva.asp
+http://www.cpa-exam.org/cpa/literature.html
+http://www.cpa.ca/factsheets/parenting.htm
+http://www.cpa.ca/ogloff.htm
+http://www.cpa.ed.ac.uk/edit/2.03/018_Itsafamilyaffair.html
+http://www.cpa.ed.ac.uk/edit/2.04/16_TheOldCollegeDome.html
+http://www.cpa.org.au/garchve5/1111worth.html
+http://www.cpaaindia.org/aboutus/genesis.htm
+http://www.cpaaindia.org/infocentre/
+http://www.cpaaustralia.com.au/cps/rde/xchg/SID-3F57FEDF-38070C80/cpa/hs.xsl/871_11297_ENA_HTML.htm
+http://www.cpag.org.uk/campaigns/press041102_notes.htm
+http://www.cpaireland.ie/custom49/
+http://www.cpatechconf.com/sub-1.htm
+http://www.cpaws-ov.org/a2a7.htm
+http://www.cpaws.org/grassroots-chapters/mb-editorial.html
+http://www.cpb.nl/eng/news/2004_27.html
+http://www.cpc-cpp.gc.ca/DefaultSite/Reppub/index_e.aspx?ArticleID=56
+http://www.cpc-cpp.gc.ca/DefaultSite/Reppub/index_e.aspx?CategoryID=32
+http://www.cpc.ncep.noaa.gov/products/wesley/toga/toga.html
+http://www.cpcb.delhi.nic.in/coinds41.htm
+http://www.cpccorp.com/deep.htm
+http://www.cpcgamereviews.com/t/index5.html
+http://www.cpcml.ca/tmld/D35R10.htm
+http://www.cpcumc.org/elink/around_conf/
+http://www.cpe-sf.com/ruthgroup/downloads/Energy/energypolicyweb.htm
+http://www.cpearson.com/excel/Debug.htm
+http://www.cpen.med.navy.mil/nhcp.cfm?c=msc&sc=child_safety&t=childsafety
+http://www.cpgb.org.uk/worker/241/msacollapses.html
+http://www.cpgb.org.uk/worker/580/aggregate.htm
+http://www.cpi.org/cpiblog/archives/cat_johnson_state_2005.php
+http://www.cpinternet.com/~bhill/sibr/
+http://www.cpinternet.com/~jime/lugers.htm
+http://www.cpiworld.com/started/articles/tellme.asp
+http://www.cpixel.com/other/honesty_friend_zone.asp
+http://www.cpj.org/attacks02/preface.html
+http://www.cpjustice.org/stories/storyReader$383
+http://www.cpjustice.org/stories/storyReader$920
+http://www.cpl33.org/union_factor.htm
+http://www.cpmt.org/scv/courses/csp.html
+http://www.cpmtsudan.org/investigations/Duk%20Padiet/roi_Duk%20Padiet.htm
+http://www.cpomc.org/home.html
+http://www.cpp.com/support/faq.asp
+http://www.cpradr.org/arb-comment.htm
+http://www.cpre.org.uk/campaigns/planning/greenbelts/the-green-belt-success-story.htm
+http://www.cprs.org/conference-educationSaturday.htm
+http://www.cprw.org.uk/press/pn250604.htm
+http://www.cps.ca/english/statements/FN/fn96-02.htm
+http://www.cps.gov.uk/legal/section15/chapter_k.html
+http://www.cps.gov.uk/london/advice_for_professionals/serious_casework_circulars/abuse_of_process_(delay)/
+http://www.cpsalsa.com/Forum/viewtopic.php?t=263
+http://www.cpsd.us/Web/Curriculum/Drama/animalfarm.html
+http://www.cpsp.edu.pk/JCPSP/ARCHIEVE/June2004/page386.asp
+http://www.cpsu.org.au/
+http://www.cpt.coe.int/documents/irl/1999-16-inf-eng.htm
+http://www.cpt.coe.int/documents/irl/2003-37-inf-eng.htm
+http://www.cpt.org/archives/1996/september.html
+http://www.cptonline.org/behindscenes/artstatement.cfm
+http://www.cpuc.ca.gov/proceedings/I0402007.htm
+http://www.cpuc.ca.gov/static/industry/telco/consumer+information/billofrights/archive/040514_brownalt.htm
+http://www.cpuplanet.com/news/article.php/2213141
+http://www.cqaf.com/news.html
+http://www.cqc.state.ny.us/Bestpractices/bestethical.htm
+http://www.cqc.state.ny.us/could_this_happen/case2.htm
+http://www.cqc.state.ny.us/could_this_happen/case29.htm
+http://www.cqc.state.ny.us/hottopics/Leben%20Home%20settlement.htm
+http://www.cqc.state.ny.us/newsletter/87SafetyAlertCautionaryNotesSwimming.htm
+http://www.cqs.com/y2kad.htm
+http://www.cqsb.qc.ca/svs/ginfodc.htm
+http://www.cr.nps.gov/aad/PUBS/NHLEAM/E-Introduction.htm
+http://www.cr.nps.gov/hps/gis/reports/gloss/glossary.htm
+http://www.cr.nps.gov/hps/tps/briefs/brief12.htm
+http://www.cr.nps.gov/hps/tps/briefs/brief15.htm
+http://www.cr.nps.gov/hps/tps/tax/IRSrecapture.htm
+http://www.cr.nps.gov/nr/publications/bulletins/nrb40/nrb40_5.htm
+http://www.cr.nps.gov/nr/travel/baltimore/b31.htm
+http://www.cr.nps.gov/nr/travel/hardin/hon.htm
+http://www.cra-arc.gc.ca/E/pub/tg/rc4108/rc4108eq.html
+http://www.cra-arc.gc.ca/agency/budget2005/changes-e.html
+http://www.cra-arc.gc.ca/tax/charities/policy/ces/ces-013-e.html
+http://www.cra-arc.gc.ca/tax/individuals/topics/income-tax/return/completing/menu-e.html
+http://www.cra-arc.gc.ca/taxcredit/sred/publications/heavy_oil-e.html
+http://www.cra.ba/en/broadcast/?cid=3065
+http://www.cra.org/Activities/craw/dmp/awards/2004/Clodfelter/summerlog.htm
+http://www.cra.org/Activities/snowbird/2002/slides/freeman.html
+http://www.cra.org/govaffairs/blog/archives/000334.html
+http://www.cra.org/reports/wits/chapter_6.html
+http://www.crab.rutgers.edu/~deppen/teach.htm
+http://www.crabcoll.com/journal/sixty.html
+http://www.cradkilodney.net/dmt-1999-05.shtml
+http://www.craft.on.ca/events/ccf_advocacy.html
+http://www.craftcouncil.org/html/magazine/book_dec-jan_2001.shtml
+http://www.crafterschoice.com/doc/full_site_enrollment/fse_about_the_club.jhtml
+http://www.crafterschoice.com/doc/help/help_category.jhtml?category_name=Your%20Account
+http://www.crafterschoice.com/doc/mini_site/ms_about_the_club.jhtml
+http://www.craftfreebies.com/rocklerholiday.html
+http://www.craigentinny.co.uk/resources/ohselect.htm
+http://www.craighospital.org/SCI/METS/breathing.asp
+http://www.craiginteractive.com/
+http://www.craigmarlatt.com/canada/security&defence/caf.html
+http://www.craigmedical.com/Ovu_Cue.htm
+http://www.craigmedical.com/salivascreen5_drug_tests.htm
+http://www.craigslist.org/about/best/bos/23223389.html
+http://www.craigslist.org/about/best/lax/23807450.html
+http://www.craigslist.org/about/best/nyc/27933938.html
+http://www.craigslist.org/about/best/sfo/23025686.html
+http://www.craigslist.org/about/best/sfo/35218073.html
+http://www.craigslist.org/about/best/sfo/71428254.html
+http://www.crankreport.org/2004_11_01_blogarchive.html
+http://www.craphound.com/
+http://www.craphound.com/down/
+http://www.craphound.com/someone/download.php
+http://www.crapville.com/village_idiot/index.asp
+http://www.crash.net/uk/en/feature_view.asp?cid=18&fid=5901
+http://www.crash.net/uk/en/news_view.asp?cid=2&nid=105664
+http://www.crashdown.com/fanfic/crossovers/AKnownStranger_1_Tara.shtml
+http://www.crashonline.org.uk/26/enigma.htm
+http://www.crashonline.org.uk/46/pcw_hardware.htm
+http://www.crashprevention.org/news/news.php?iss=3
+http://www.crashtackle.co.za/features/themaul/themaul.html
+http://www.crashtestdummies.com/albums/god_shuffled_his_feet.html
+http://www.crasiworld.com/beyond/nightfall/turn1.htm
+http://www.crassh.cam.ac.uk/events/2004-5/customarylaw.html
+http://www.cravenpropertydirectory.co.uk/www.mswhewetsons.co.uk/property_details.asp?ID=2498
+http://www.crawforddirect.com/worth.html
+http://www.crawley.org.uk/newslett.htm
+http://www.crayola.com/colorcensus/americas_favorites/display.cfm?color=32
+http://www.crayzee.com/straight/
+http://www.crazyapplerumors.com/archives/000476.html
+http://www.crazycolour.com/os/writing_02.shtml
+http://www.crazydogaudiotheatre.com/deeley.php
+http://www.crazyweiler.com/archives/000596.html
+http://www.crbestbuydrugs.org/drugreports_RXInformation.html
+http://www.crc-net.org.uk/CRC-programme.htm
+http://www.crcah.org.au/index.cfm?attributes.fuseaction=links
+http://www.crcpd.ab.ca/rt2005.html
+http://www.crcsite.org/perspective.htm
+http://www.crd.bc.ca/actionteam/parents.htm
+http://www.cre.gov.uk/duty/reia/how_stage2.html
+http://www.cre.gov.uk/duty/reia/statistics_education.html
+http://www.cre.gov.uk/gdpract/ed_cop_ew_work.html
+http://www.cre.gov.uk/gdpract/ed_cop_scot_work.html
+http://www.crea.co.uk/createcyprus.html
+http://www.creamtec.com/webcream/doc/multithreading.html
+http://www.createcovenants.com/article_dmaa1.htm
+http://www.createstudio.com/art/widenightsky.html
+http://www.createstudio.com/ramallahjourney/RamallahJourneyEmails.html
+http://www.creatinestore.co.uk/categories/Exercise_Equipment.asp
+http://www.creatinglearningcommunities.org/book/additional/holme.htm
+http://www.creatinglearningcommunities.org/book/additional/schafer.htm
+http://www.creatinglearningcommunities.org/book/roots/meighan.htm
+http://www.creatinglearningcommunities.org/book/roots/walkinshaw.htm
+http://www.creatingtechnology.org/concept.htm
+http://www.creationcare.org/responses/faq.php
+http://www.creationent.com/past_events/hx_events/con2001/hxcon2001_4.htm
+http://www.creationethics.org/index.cfm?fuseaction=webpage&page_id=175
+http://www.creationethics.org/index.cfm?fuseaction=webpage&page_id=190
+http://www.creationinthecrossfire.com/documents/Radiomentric%20Dating/Radiometric%20Dating.html
+http://www.creationresearch.org/Merchant2/merchant.mv?Screen=CTGY&Store_Code=CRSOS&Category_Code=C6-SA
+http://www.creationresearch.org/creation_matters/97/cm9711.html
+http://www.creationscience.com/onlinebook/Comets3.html
+http://www.creativecommunities.org.uk/mapdoc.html
+http://www.creativecow.net/show.php?page=/articles/simpson_mark/tornado/index.html
+http://www.creativecremains.com/style.html
+http://www.creativehomeowner.com/glossary/Glossd.html
+http://www.creativehotlist.com/fullProfile.asp?linktarget=fullProfile.asp&indID=47011
+http://www.creativeinfo.net/contact.html
+http://www.creativeinvest.com/cirm/cirm22.html
+http://www.creativekeys.net/FreelanceLiving/article1047.html
+http://www.creativekeys.net/PowerfulPresentations/article1063.html
+http://www.creativepro.com/book/search/583.html
+http://www.creativepro.com/directory/papersupplier/
+http://www.creativepro.com/story/feature/14490.html
+http://www.creativepro.com/story/review/20609.html
+http://www.creativepublic.com/getting_past_tough_times.php
+http://www.creativerefuge.com/pages/spotlight5.htm
+http://www.creativeresistance.ca/united-states/2002-mar30-waist-deep-in-the-big-muddy-interview-with-peete-seeger-orion-afield.htm
+http://www.creativescotland.org.uk/press/releases/121201.htm
+http://www.creativesynth.com/OPINIONS/004_Installations/op_Installations.html
+http://www.creativeteachingsite.com/teach2.htm
+http://www.creativeteachingsite.com/videogames.htm
+http://www.creativewritingcenter.com/Chapbooks%20&%20Tapes.htm
+http://www.creativity-portal.com/becreative/activities/
+http://www.creativity.co.uk/creativity/guhen/rapport_article/
+http://www.creativityshop.com/
+http://www.creator-creation.com/science.htm
+http://www.creb.com/public/careers/bec-a-realtor/new-realtor-courses.php
+http://www.crede.org/research/sd/4.1es.html
+http://www.credit-report-scores.us/budget.you.spending.htm
+http://www.credit-to-cash-advisor.com/news_87.html
+http://www.creditcollectionsworld.com/11sr01.htm
+http://www.creditcollectionsworld.com/cgi-bin/readstory2.pl?story=20040202CCRZ284.xml
+http://www.creditguarantee.co.za/Default.asp?Index=39&ID=44&ISub=9936&sub=2
+http://www.creditinfocenter.com/mortgage/PointsRipOff.shtml
+http://www.credittoday.net/members/1460.cfm
+http://www.creditunions.com/home/articles/template.asp?article_id=1446
+http://www.creia.org/press/
+http://www.creighdeeds.com/blog.htm
+http://www.creighton.edu/~rocsj/liturgy/plan-xmas_contents.html
+http://www.creonline.com/inside.html
+http://www.creonline.com/success-stories/ss-110.html
+http://www.crescent-resources.com/communit/james/drycreek/default.asp
+http://www.crescent-springs.ky.us/another_perspective.htm
+http://www.crescentlife.com/articles/fair_use.htm
+http://www.crescentlife.com/articles/social%20issues/honor2.htm
+http://www.crescentlife.com/disorders/autism.htm
+http://www.cresourcei.org/S-hope.html
+http://www.cresourcei.org/cyeaster.html
+http://www.cresourcei.org/hmovement.html
+http://www.cresourcei.org/isa61.html
+http://www.cresourcei.org/lowhighchurch.html
+http://www.crestnetsales.com/
+http://www.crestor.info/index.asp?did=3430&aid=46623&l1=9&l2=0&ch=Congress+Reports
+http://www.crestwoodmedcenter.com/CustomPage.asp?PageName=Lab%20-%20Operations
+http://www.crf-usa.org/bria/bria12_1.html
+http://www.crf-usa.org/network/net64.html
+http://www.crfc.org/americanjury/damage_awards.html
+http://www.crfonline.org/orc/cro/cro-7.html
+http://www.crgconsulting.co.uk/projects.php?ptype=1
+http://www.crge.umd.edu/publications/Intersection_97/walters.html
+http://www.crh.noaa.gov/dtx/1899.htm
+http://www.crh.noaa.gov/dtx/?page=climate/dtw_summary_2004
+http://www.crh.noaa.gov/dtx/?page=glossary/w
+http://www.crh.noaa.gov/dtx/?page=stories/blizzard1978
+http://www.crh.noaa.gov/dtx/?page=stories/foliage2003
+http://www.crh.noaa.gov/dtx/?page=summer2004_outlook
+http://www.crh.noaa.gov/dtx/?page=summer2004_review
+http://www.crh.noaa.gov/fgf/hydro/red_river_flood.shtml
+http://www.crh.noaa.gov/lmk/soo/research/paps_11794.htm
+http://www.crh.noaa.gov/lsx/climate/torcli/monroemo.htm
+http://www.crh.noaa.gov/pah/1925/fha_body.html
+http://www.crh.noaa.gov/product.php?site=JKL&product=PNSJKL.0506211017
+http://www.crh.noaa.gov/product.php?site=JKL&product=PNSJKL.0506211152
+http://www.crh.noaa.gov/pub/blizzard97/blizzard97.html
+http://www.crh.noaa.gov/pub/ltg/ltg_24aug03_parkcnty_biker_fatal.php
+http://www.cri.ca/publications/june03_communique/licence_application.html
+http://www.cribnotes.com/html/dj-05/dj-05-money.html
+http://www.crichton-official.com/speeches/speeches_quote05.html
+http://www.crichton-official.com/~adara/cgi-bin/messageboard-mc/ultimatebb.cgi
+http://www.cricket.com.au/portal/site/cricketaustralia/menuitem.d4ad98cdc69686be6918d6104420a2a0/
+http://www.cricket365.com/
+http://www.cricketnext.com/news1/next/reporters/rep018.htm
+http://www.crikey.com.au/articles/2004/01/29-0004.html
+http://www.crikey.com.au/articles/2004/06/01-0002.html
+http://www.crikey.com.au/articles/2005/05/09-1204-7954.html
+http://www.crikey.com.au/articles/2005/05/16-1603-9314.html
+http://www.crikey.com.au/media/2002/02/17-triolireith.print.html
+http://www.crikey.com.au/politics/2000/08/13-hillary24.html
+http://www.crikey.com.au/whistleblower/2003/07/01-solomans.html
+http://www.crimblawg.com/waiver/
+http://www.crimedoctor.com/atm.htm
+http://www.crimedoctor.com/home.htm
+http://www.crimelibrary.com/criminal_mind/forensics/serology/3.html?sect=21
+http://www.crimelibrary.com/criminal_mind/forensics/serology/8.html?sect=21
+http://www.crimelibrary.com/criminal_mind/psychology/robert_hare/11.html?sect=19
+http://www.crimelibrary.com/criminology/hazelwood/
+http://www.crimelibrary.com/gangsters_outlaws/mob_bosses/kray/removal_12.html?sect=15
+http://www.crimelibrary.com/gangsters_outlaws/outlaws/kelly/10.html?sect=17
+http://www.crimelibrary.com/gangsters_outlaws/outlaws/kelly/4.html?sect=17
+http://www.crimelibrary.com/notorious_murders/family/crimmins/14.html?sect=12
+http://www.crimelibrary.com/notorious_murders/mass/south_africa/2.html?sect=8
+http://www.crimelibrary.com/notorious_murders/mass/work_homicide/
+http://www.crimelibrary.com/notorious_murders/women/velma_barfield/4.html?sect=11
+http://www.crimelibrary.com/serial_killers/history/gunness/8.html?sect=12
+http://www.crimelibrary.com/serial_killers/predators/heirens/thief_3.html
+http://www.crimelibrary.com/serial_killers/unsolved/diary/two_4.html
+http://www.crimelibrary.com/serial_killers/weird/kids2/effect_5.html?sect=10
+http://www.crimelibrary.com/sheppard/sheppard.htm
+http://www.crimelibrary.com/terrorists_spies/terrorists/jackal/10.html?sect=1
+http://www.crimeprevent.com/docs/v0102.htm
+http://www.crimereduction.co.uk/vehiclecrime41.htm
+http://www.crimereduction.gov.uk/learningzone/cco.htm
+http://www.crimes-of-persuasion.com/Crimes/Delivered/pen_pals.htm
+http://www.crimes-of-persuasion.com/Crimes/InPerson/MajorPerson/ponzi.htm
+http://www.crimes-of-persuasion.com/search.htm
+http://www.crimesofwar.org/archive/archive-deadlycomp.html
+http://www.crimesofwar.org/expert/bush-intro.html
+http://www.crimesofwar.org/expert/me-intro.html
+http://www.crimesofwar.org/expert/me-shamas.html
+http://www.crimesofwar.org/icc_magazine/icc-glasius.html
+http://www.crimesofwar.org/print/expert/me-Shamas-print.html
+http://www.crimesofwar.org/print/expert/me-introduction-print.html
+http://www.crimesofwar.org/thebook/book-review.html
+http://www.crimesofwar.org/thebook/gulf-war.html
+http://www.crimespree.ca/home.php/index.php?m=200411
+http://www.crimethinc.com/a/sh/letters.html
+http://www.crimethinc.com/library/english/washing.html
+http://www.crimetime.co.uk/features/franktallis.php
+http://www.crimlaw.org/defbrief321.html
+http://www.crimlaw.org/defbrief322.html
+http://www.crimsonfeet.org/article123.html
+http://www.crimsonfeet.org/article127.html
+http://www.crimsonfeet.org/article137.html
+http://www.crimsonfeet.org/article184.html
+http://www.crimsonfeet.org/article303.html
+http://www.crimsonfeet.org/article316.html
+http://www.crimsonfeet.org/article321.html
+http://www.crimsonfeet.org/article35.html
+http://www.crin.org/resources/infoDetail.asp?ID=849&flag=report
+http://www.crin.org/violence/search/closeup.asp?infoID=5703
+http://www.crinet.co.uk/news/bulletins.php?view=55
+http://www.crinfo.org/v3-masterresults.cfm?pid=1764
+http://www.crinkles.com/b3act.html
+http://www.crinkles.com/janegood2.html
+http://www.cripplecreekplayers.com/butte.htm
+http://www.crisiscounseling.com/Articles/YouOweMe.htm
+http://www.crisiscounseling.org/TraumaLoss/CopingWithTrauma.htm
+http://www.crisismagazine.com/december2002/feature4.htm
+http://www.crisispapers.org/essays/repub-friend.htm
+http://www.crisispregnancy.com/birth-mother/hospital-time.html
+http://www.crisispregnancy.com/birth-mother/labor-preparation-hospital-checklist.html
+http://www.crisispregnancy.com/birth-mother/post-placement-relating-to-others.html
+http://www.crissycorkboard.org/iyel/voices.htm
+http://www.criswell.edu/facilities.html
+http://www.criticaldance.com/dca/info.html
+http://www.criticalhit.co.uk/w40krp/WD126_knights.shtml
+http://www.criticalmiss.com/issue7/barchapter6-1.html
+http://www.criticalreading.com/novels.htm
+http://www.criticalthinking.com/getProductDetails.do?id=01511&code=c&model=01511BBP&r_section_to_display=product_toc_page.jsp
+http://www.criticalthinking.net/SSConcCTApr3.html
+http://www.criticalthinking.org/forum/index.php?action=recent
+http://www.criticalthinking.org/resources/articles/intellectual-foundations-the-key-missing.shtml
+http://www.criticsociety.com/review.asp?id=1345
+http://www.critpsynet.freeuk.com/pharmaceuticalindustry.htm
+http://www.critrcall.com/key3article.htm
+http://www.crittenden.mvwsd.k12.ca.us/polrules.html
+http://www.crjc.org/heritage/N07-26.htm
+http://www.crjc.org/heritage/V07-3.htm
+http://www.crk.umn.edu/campusinfo/policies/closing.htm
+http://www.crk.umn.edu/people/athletics/fitnesscenter/Nutrition.htm
+http://www.crlaf.org/ab2222.htm
+http://www.crlaf.org/pcun814.htm
+http://www.crlp.org/hill_usfp_icpd.html
+http://www.crlp.org/pr_02_0513la.html
+http://www.crm2day.com/library/EpFkEEyAZAdwvuxtmS.php
+http://www.crmbuyer.com/story/32752.html
+http://www.crn.com/sections/BreakingNews/dailyarchives.asp?ArticleID=41580
+http://www.crn.com/sections/special/hof/hof01.asp?ArticleID=31282
+http://www.crn.vnunet.com/analysis/1153237
+http://www.crn.vnunet.com/analysis/1158112
+http://www.crn.vnunet.com/comment/1156043
+http://www.crn.vnunet.com/comment/1158924
+http://www.crn.vnunet.com/features/1160012
+http://www.crn.vnunet.com/news/1151850
+http://www.crnano.org/Bridges.htm
+http://www.crnano.org/dangers.htm
+http://www.crnano.org/everyone.htm
+http://www.crnano.org/inside.htm
+http://www.crnano.org/products.htm
+http://www.crnano.org/solutions.htm
+http://www.crnano.org/study2.htm
+http://www.crnhomecare.com/html/new_page_7.htm
+http://www.crnusa.org/Shellmedia042401a.html
+http://www.croatiaemb.org/politics/2003/Racan%20PosjetaSve.htm
+http://www.crochet.org/chapter.html
+http://www.crockford.com/wrrrld/begr.html
+http://www.crocus.co.uk/features2/ceanothus/
+http://www.crocus.co.uk/gossip/humour/
+http://www.crocus.co.uk/whatsgoingon/regionallondon/
+http://www.crofterscommission.org.uk/gaidhlig/pi_croftentrantexample.htm
+http://www.crofterscommission.org.uk/pi_croftentrantexample.htm
+http://www.crookedtimber.org/archives/000211.html
+http://www.crookedtimber.org/archives/003197.html
+http://www.crooksandliars.com/
+http://www.cropcirclenews.com/modules/newbb_plus/viewtopic.php?topic_id=237&forum=2
+http://www.cropcircleresearch.com/research/sound/whitecrow.html
+http://www.croquet.org.uk/news/world_player_pack.htm
+http://www.croquetamerica.com/6-wicket-Am.asp
+http://www.croquetamerica.com/gams-rls.asp
+http://www.croquetamerica.com/glossary.asp
+http://www.croquetworld.com/Game/basicbreak.asp
+http://www.cross-stitching.com/awards~year~2002.asp
+http://www.crosscurrents.info/aboutUs.jsp
+http://www.crosscurrents.org/doering.htm
+http://www.crosscurrents.org/kaufman.htm
+http://www.crossharborstudy.com/faq.htm
+http://www.crossroad.to/Books/InvWar/12-gamel.htm
+http://www.crossroad.to/articles2/HP-Movie.htm
+http://www.crossroad.to/articles2/TwistingTruth.html
+http://www.crossroad.to/text/articles/ctfgc97.html
+http://www.crossroads.com/Products/AtTheEdge.asp
+http://www.crossroads.nsc.org/articleTemplate.cfm?id=192&subjectID=4
+http://www.crosssearch.com/People/Youth/Youth_Groups/
+http://www.crosstalk.org/articles/manger.shtml
+http://www.crowcanyon.org/ResearchReports/Shields/Shields_1999_Text.htm
+http://www.crowcanyon.org/ResearchReports/Shields/Shields_2000_text.htm
+http://www.crowddynamics.com/News/jamarat_bridge.htm
+http://www.crp.unt.edu/Design/distance_learning/
+http://www.crpc.rice.edu/newsletters/oct94/director.html
+http://www.crpc.rice.edu/newsletters/sum99/spotlight.html
+http://www.crt-online.org/action.html
+http://www.crtc.gc.ca/archive/ENG/Decisions/2003/db2003-154.htm
+http://www.crtc.gc.ca/eng/NEWS/SPEECHES/2005/s050420.htm
+http://www.cru.uea.ac.uk/~markn/carbon/nerc.htm
+http://www.crucial.com/var/index.asp
+http://www.cruise-eta.com/
+http://www.cruisecritic.com/cruisestyles/articles.cfm?ID=160
+http://www.cruisecritic.com/features/articles.cfm?ID=160
+http://www.cruisediva.com/cost_saving_tips.htm
+http://www.cruisenewsdaily.com/nf40820.html
+http://www.cruisenh.com/2005/highres/about/staff.html
+http://www.cruiseserver.net/travelpage/millennium/day_two.asp
+http://www.cruising.org/About.cfm
+http://www.cruising.org/about.cfm
+http://www.cruisingpower.com/USP/General/PrivacyPolicy.asp?s=5107015C58
+http://www.crummy.com/rachel/2005/04
+http://www.crunchyfrog.net/dixiecup/events.phtml
+http://www.crusader.net/texts/mk/mkch5.html
+http://www.crusader.net/texts/mk/mkv1ch05.html
+http://www.crusader.net/texts/ygg/y21.html
+http://www.crutchfieldadvisor.com/ISEO-rgbtcspd/learningcenter/home/hometheater_planning.html
+http://www.crutchfieldadvisor.com/ISEO-rgbtcspd/learningcenter/home/tv.html
+http://www.crv.com/NewsEvents/News/newsMay122003.html
+http://www.crvp.org/book/Series02/II-2/chapter_v.htm
+http://www.crvp.org/book/Series03/III-14/chapter_xviii.htm
+http://www.crvp.org/book/Series03/III-15/chapter_ix.htm
+http://www.crvp.org/book/Series03/III-7a/chapter_x.htm
+http://www.crwmag.com/CRW/BusRes/Motivate2.html
+http://www.cryingvoice.com/Evolution/Darwin_Owen.html
+http://www.cryonics.org/surgery.html
+http://www.crypticide.com/dropsafe/2004/03/24/
+http://www.crystal-green.com/Past%20Crystal%20Says/crystal_says_05_04.htm
+http://www.crystal-green.com/Past%20Crystal%20Says/crystal_says_08_04.htm
+http://www.crystalacarte.com/about.asp
+http://www.crystalbay.net/
+http://www.crystalclarity.com/author/skarticle11.asp
+http://www.crystalcreeklodge.com/fish.html
+http://www.crystalinks.com/candles.html
+http://www.crystalinks.com/contrails.html
+http://www.crystalinks.com/day6candlemagic.html
+http://www.crystalinks.com/dayafterxmas.html
+http://www.crystalinks.com/dss.html
+http://www.crystalinks.com/egyptexts.html
+http://www.crystalinks.com/egyptmedicine.html
+http://www.crystalinks.com/emerald11bw.html
+http://www.crystalinks.com/indiascience.html
+http://www.crystalinks.com/newmexico.html
+http://www.crystalinks.com/psychicscanning.html
+http://www.crystalinks.com/teutonicknights.html
+http://www.crystalinks.com/weepingstatues.html
+http://www.crystalinks.com/workshop10_10_04.html
+http://www.crystalpalacefoundation.org.uk/Shop/default.asp?id=11
+http://www.crystalwoodlodge.com/act.html
+http://www.crystiesgifts.com/cgi-bin/webc.cgi/NAA.html
+http://www.cs.auckland.ac.nz/diploma/diploma-entry.html
+http://www.cs.auckland.ac.nz/~alan/worknote.htm
+http://www.cs.auckland.ac.nz/~pgut001/
+http://www.cs.berkeley.edu/~jrs/
+http://www.cs.bgu.ac.il/~omri/NNUGA/
+http://www.cs.bham.ac.uk/research/cogaff/crp/
+http://www.cs.bham.ac.uk/resources/staffinfo/handbook/LTStrategy03.html
+http://www.cs.bilkent.edu.tr/~david/derya/stbks1/stbk561.htm
+http://www.cs.bilkent.edu.tr/~david/derya/stbks1/stbk997.htm
+http://www.cs.bris.ac.uk/Tools/Local/Handbook/course.html
+http://www.cs.bris.ac.uk/~flach/ICML04tutorial/
+http://www.cs.bris.ac.uk/~stefan/culture.html
+http://www.cs.clemson.edu/~artpell/classes/462_662/ProjectGuide.html
+http://www.cs.cmu.edu/afs/cs.cmu.edu/user/bam/www/numbers.html
+http://www.cs.colby.edu/~rjones/courses/cs398/history.html
+http://www.cs.columbia.edu/~hgs/etc/writing-bugs.html
+http://www.cs.cornell.edu/Info/People/hollandm/study.html
+http://www.cs.earlham.edu/~jrogers/classes/C++/cplusplus15.html
+http://www.cs.indiana.edu/how.2b/how.2b.community.html
+http://www.cs.jhu.edu/academics_spring04.html
+http://www.cs.jyu.fi/~jpt/doc/thesis/ime-1_5.html
+http://www.cs.man.ac.uk/Research_subweb/Links.asp
+http://www.cs.man.ac.uk/fellowsd-bin/TIP/105.html
+http://www.cs.man.ac.uk/playing-cards/faq.html
+http://www.cs.man.ac.uk/~schalk/work.html
+http://www.cs.mdx.ac.uk/staff/profiles/r_adams.html
+http://www.cs.ncl.ac.uk/old/events/intl.seminars/
+http://www.cs.northwestern.edu/~ian/
+http://www.cs.nsw.gov.au/rpa/RespMed/sleep.htm
+http://www.cs.nyu.edu/courses/fall04/G22.2580-001/lec10.html
+http://www.cs.okstate.edu/~pdcp/vols/vol02/vol02no3soft_reviews.html
+http://www.cs.olemiss.edu/academics/degrees/ms.html
+http://www.cs.olemiss.edu/academics/degrees/phd.html
+http://www.cs.princeton.edu/courses/archive/fall04/cos109/
+http://www.cs.princeton.edu/courses/archive/spr05/cos126/assignments/markov.html
+http://www.cs.princeton.edu/courses/archive/spr05/cos126/faq.html
+http://www.cs.princeton.edu/courses/archive/spring05/cos491/writing/
+http://www.cs.princeton.edu/~jhalderm/cd3/
+http://www.cs.purdue.edu/homes/hosking/cricket/explanation.htm
+http://www.cs.rhul.ac.uk/CompSci/Studying/courses.html
+http://www.cs.rice.edu/CS/CSGSA/DeptInfo/Guidelines/mentor.html
+http://www.cs.rice.edu/~ssiyer/minstrels/poems/1.html
+http://www.cs.rutgers.edu/~lou/530/
+http://www.cs.rutgers.edu/~shklar/www4/rmiller/rhmpapr.html
+http://www.cs.rutgers.edu/~village/opportunities.html
+http://www.cs.sfu.ca/CC/Labs/CSILetiquette.html
+http://www.cs.sfu.ca/~anoop/weblog/archives/2004_10.html
+http://www.cs.sfu.ca/~anoop/weblog/archives/2004_12.html
+http://www.cs.smith.edu/Dept_page/announcements.html
+http://www.cs.state.ny.us/pmi/proposals/ism01.html
+http://www.cs.technion.ac.il/Resources/CS/month-March2005.html
+http://www.cs.toronto.edu/~tfowler/NicomenLake/
+http://www.cs.tut.fi/~jkorpela/HTML3.2/3.7.html
+http://www.cs.tut.fi/~jkorpela/HTML3.2/4.7.html
+http://www.cs.tut.fi/~jkorpela/HTML3.2/5.31.html
+http://www.cs.tut.fi/~jkorpela/html/euro.html
+http://www.cs.tut.fi/~jkorpela/memes.html
+http://www.cs.tut.fi/~jkorpela/prog.html
+http://www.cs.ualberta.ca/~csgsa/modules.php?name=Content&pa=showpage&pid=8
+http://www.cs.ubc.ca/~mrobilla/jex/
+http://www.cs.ucc.ie/~johnj/cs7200/practicals/practical6.html
+http://www.cs.ucl.ac.uk/staff/J.Riegelsberger/trustbuilders_and_trustbusters.htm
+http://www.cs.ucl.ac.uk/staff/W.Langdon/WBL_papers.html
+http://www.cs.ucsb.edu/~agravel/bioproject.html
+http://www.cs.uiowa.edu/~jones/book/dust.html
+http://www.cs.uiuc.edu/graduate/admissions.php
+http://www.cs.umd.edu/gvil/seminar/2002summer.shtml
+http://www.cs.umd.edu/~oleary/gradstudy/node9.html
+http://www.cs.unc.edu/~plaisted/ce/genetics.html
+http://www.cs.unc.edu/~smithja/facetop/
+http://www.cs.usfca.edu/~parrt/course/601/lectures/programming.by.contract.tml
+http://www.cs.usm.maine.edu/~welty/cos368/topics/prototypingB.htm
+http://www.cs.utah.edu/flux/mach4-parisc/html/pamach.html
+http://www.cs.utep.edu/grad/PhD.html
+http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD619.html
+http://www.cs.utexas.edu/users/vl/notes/weinberg.html
+http://www.cs.uu.nl/wais/html/na-dir/finding-groups/general.html
+http://www.cs.uu.nl/wais/html/na-dir/gardens/plants-by-mail.html
+http://www.cs.uu.nl/wais/html/na-dir/net-abuse-faq/troll-faq.html
+http://www.cs.uu.nl/wais/html/na-dir/tv/er-series/questions.html
+http://www.cs.vassar.edu/~priestdo/lyre.html
+http://www.cs.virginia.edu/research/descriptions.html
+http://www.cs.virginia.edu/~techrep/CS-93-60.ps.Z
+http://www.cs.vu.nl/~aske/db.html
+http://www.cs.waikato.ac.nz/Research/starlog/
+http://www.cs.waikato.ac.nz/genquery.php?linklevel=3&linklist=CS&linkname=Postgraduate_Degrees&linktype=report&listby=Degree_Title&lwhere=unique_record_id=5
+http://www.cs.waikato.ac.nz/studentacm/
+http://www.cs.washington.edu/homes/klee/misc/slashdot.html
+http://www.cs.wisc.edu/graphics/Courses/f2003-cs559/p3.htm
+http://www.cs.wisc.edu/~markhill/conference-talk.html
+http://www.cs.wright.edu/~jslater/syllabi.shtml
+http://www.cs.wustl.edu/icse05/Tutorials/Tutorials.shtml
+http://www.cs.wustl.edu/~schmidt/reuse-lessons.html
+http://www.cs.wustl.edu/~sck/132/current-semester/lab/lab1a/
+http://www.cs.york.ac.uk/hci/seminars.html
+http://www.cs.york.ac.uk/~ian/routes.html
+http://www.csa-dixie.com/liverpool_dixie/stonewall.htm
+http://www.csa.com/hottopics/ern/05jun/overview.php
+http://www.csa.com/hottopics/lang/overview.php
+http://www.csa.com/hottopics/snakehead/overview.php
+http://www.csa.com/hottopics/snakehead/oview.html
+http://www.csa.gov.au/parents/agree.htm
+http://www.csa.gov.au/parents/agree_egs.htm
+http://www.csa.gov.uk/about/foi.asp
+http://www.csa.gov.uk/csreform/existing/index.asp
+http://www.csa.gov.uk/newcsaweb/about/foi.asp
+http://www.csaaul.org/DoNotCallClarification.htm
+http://www.csaceliacs.org/library/gliadinfood.php
+http://www.csaceliacs.org/library/howsandwhys.php
+http://www.csae.com/bookstore
+http://www.csae.com/client/csae/payflow.nsf/home?OpenForm
+http://www.csail.mit.edu/research/abstracts/abstracts04/html/118/118.html
+http://www.csail.mit.edu/research/abstracts/abstracts04/html/247/247.html
+http://www.csam.montclair.edu/~whitener/courses/sp2004/108_sp2004_lec.html
+http://www.csba.org/csmag/Spring05/csMagStoryTemplate.cfm?id=65
+http://www.csba.org/pa/GoldenBell/2005/grant.htm
+http://www.csbmb.princeton.edu/ncc/jdc.html
+http://www.csbps.com/overview/directions.shtml
+http://www.csbsju.edu/admission/apply/
+http://www.csbsju.edu/humanrights/complaint2.htm
+http://www.csc-scc.gc.ca/text/pblct/longterm/long-08_e.shtml
+http://www.csc-scc.gc.ca/text/pblct/methadone/a_e.shtml
+http://www.csc-scc.gc.ca/text/prgrm/corcan/eep_final1_e.shtml
+http://www.csc-scc.gc.ca/text/rsrch/reports/r29/r29e_e.shtml
+http://www.csc.ca/news/default.asp?aID=1108
+http://www.csc.com/industries/financialservices/news/2531.shtml
+http://www.csc.liv.ac.uk/~agents2001/accepted.html
+http://www.csc.noaa.gov/magazine/2004/03/california.html
+http://www.csc.tcd.ie/~vdepaul/modules.php?op=modload&name=XForum&file=viewthread&tid=80
+http://www.csctoronto.com/store/privacy.php
+http://www.csd.uu.se/ifip_tc13/ShackelAward.html
+http://www.csdr.org/2004book/Sedivy.htm
+http://www.cse.lehigh.edu/~dkessler/Projects/VirtualLehigh/vr.html
+http://www.cse.org.uk/cgi-bin/news.cgi?list&archive
+http://www.cse.psu.edu/~nate/pretzel.html
+http://www.cse.ucsc.edu/~karplus/bike/pointers.html
+http://www.cse.unsw.edu.au/~lambert/guns/lindgren.html
+http://www.cseasyrstatelocal013.org/1_9_01minutes.html
+http://www.csemag.com/article/CA499040.html?industryid=23443
+http://www.cset.nesinc.com/CS_altarrgs.htm
+http://www.csfb.com/investment_banking/regional/australia.shtml
+http://www.csft.org.uk/health/default.asp?p=f41
+http://www.csh.k12.ny.us/highschool/data/100_best_high_schools_in_america.htm
+http://www.cshl.edu/96AnReport/report.html
+http://www.csicop.org/doubtandabout/peerreview/
+http://www.csicop.org/doubtandabout/sciencewars/
+http://www.csicop.org/scienceandmedia/blockbuster/
+http://www.csicop.org/si/2000-03/stare.html
+http://www.csicop.org/si/2001-03/stare.html
+http://www.csicop.org/si/9505/belief.html
+http://www.csicop.org/si/9607/tt.html
+http://www.csicop.org/superstition/predict/
+http://www.csidata.com/techjournal/csinews/199911/page01.htm
+http://www.csiguide.com/episode.asp?csi=114
+http://www.csilmilano.com/furniture/Sfastgro.html
+http://www.csimadrasdiocese.org/ecumenical.htm
+http://www.csindy.com/csindy/2004-07-01/village.html
+http://www.csiro.au/melbcsirosec/helix/previous/dec95.html
+http://www.csis.co.uk/travel/annual.asp
+http://www.csis.org/asia/pubs/010413csm_article.htm
+http://www.csis.org/ee/events/
+http://www.csis.org/europe/eurofocus/v2n1.html
+http://www.csis.org/hs/
+http://www.csis.org/html/sp010307lindh.html
+http://www.csis.org/ics/dia/intdebor.html
+http://www.csis.org/pacfor/cc/002Qjapan_rus.html
+http://www.csis.org/pacfor/cc/002Qus_china.html
+http://www.csis.org/pacfor/cc/003Qjapan_rus.html
+http://www.csis.org/pacfor/cc/004Qchina_skorea.html
+http://www.csis.org/pacfor/cc/004Qoverview.html
+http://www.csis.org/pacfor/cc/004Qus_skorea.html
+http://www.csis.org/pacfor/cc/0102Qnk_sk.html
+http://www.csis.org/pacfor/cc/0103Qoa.html
+http://www.csis.org/pacfor/cc/0201Qjapan_china.html
+http://www.csis.org/pacfor/cc/0301Qnk_sk.html
+http://www.csis.org/pacfor/cc/0401Qnk_sk.html
+http://www.csis.org/pacfor/cc/992Qchina_asean.html
+http://www.csis.org/pacfor/ccejournal.html
+http://www.csis.org/pacfor/issues/v04n04_ch1.cfm
+http://www.csiss.org/events/workshops/2002/access2002/
+http://www.csiwisepractices.org/?read=22
+http://www.csiwisepractices.org/?read=39
+http://www.csj.org/infoserv_articles/hassan_steven_strategicinteractionapproach.htm
+http://www.csj.org/infoserv_articles/lottick_edward_physician_experience.htm
+http://www.csl.com.au/CSL_Marketing_Statement.asp
+http://www.csls.ca/books/escc.asp
+http://www.csm.arts.ac.uk/textsite/summer.asp?MA=2&CAT=11&CSM=yes
+http://www.csmonitor.com/2002/0329/p11s02-coop.html
+http://www.csmonitor.com/2002/0618/p14s02-lecl.html
+http://www.csmonitor.com/2002/0805/p02s01-ussc.html
+http://www.csmonitor.com/2003/0416/p13s02-lihc.html
+http://www.csmonitor.com/2003/0701/p18s02-hfks.html
+http://www.csmonitor.com/2003/0813/p01s02-wome.html
+http://www.csmonitor.com/2004/0527/p01s03-woeu.html
+http://www.csmonitor.com/2004/0528/p08s02-coop.html
+http://www.csmonitor.com/2004/0624/p09s02-coop.html
+http://www.csmonitor.com/2004/1118/p15s02-sten.html
+http://www.csmonitor.com/2004/1209/p01s02-usmi.html
+http://www.csmonitor.com/2004/1213/p09s01-coop.html?s=hns
+http://www.csmonitor.com/2005/0124/p11s02-ussc.html
+http://www.csmonitor.com/2005/0202/p11s01-lire.html
+http://www.csmonitor.com/2005/0203/p09s02-coop.html
+http://www.csmonitor.com/2005/0510/p11s01-legn.html
+http://www.csmonitor.com/2005/0510/p11s01-legn.html?s=hns
+http://www.csmonitor.com/2005/0531/p11s01-legn.html
+http://www.csmonitor.com/2005/0607/p03s02-uspo.html
+http://www.csmonitor.com/2005/0609/p09s01-coop.html
+http://www.csmonitor.com/2005/0615/p01s03-ussc.html
+http://www.csmonitor.com/2005/0616/p13s01-sten.html
+http://www.csmonitor.com/durable/1998/02/24/home/home.1.html
+http://www.csmonitor.com/durable/1999/09/30/p15s1.htm
+http://www.csmonitor.com/newsinbrief/brieflies.html
+http://www.csmonitor.com/specials/neocon/quiz/neoconQuiz.html
+http://www.csmworld.org/public/csr_brazil.htm
+http://www.csnews.com/csn/search/article_display.jsp?schema=&vnu_content_id=1000845657
+http://www.csolutions.com.sg/services/industrial/index.shtml
+http://www.csoonline.com/analyst/report383.html
+http://www.csp.org.uk/physiotherapy/features/olympic_tips_guide.cfm
+http://www.cspaaa.com/news/news.asp?Goto=1
+http://www.cspinet.org/integrity/press/200502251.html
+http://www.cspinet.org/nah/dhea1.html
+http://www.cspinet.org/nah/marolest.htm
+http://www.csrees.usda.gov/nea/food/efnep/success-beyond.html
+http://www.csreurope.org/news/page1844/
+http://www.csreurope.org/whatwedo/Stakeholderdialogue/CSREuropesresponse/
+http://www.csrwire.com/article.cgi/3297.html
+http://www.css.edu/users/tboone2/asep/JEPgurney.html
+http://www.cssa.org.za/home.asp?pid=724
+http://www.cssin24hours.com/updates.php
+http://www.cssny.org/pubs/urbanagenda/urban-agenda40.htm
+http://www.cssr.uct.ac.za/
+http://www.cstock.org/news/082001/ticket_prices_going_up.html
+http://www.cstv.com/sports/m-basebl/stories/062005aaf.html
+http://www.csu.edu.au/division/regist/agenda/afc0299.htm
+http://www.csu.edu.au/special/raiss99/brochure/program6.htm
+http://www.csub.edu/ssric-trd/crit/ct12/ctpart2.htm
+http://www.csub.edu/~lwildman/syl576.htm
+http://www.csuchico.edu/phil/ct/ct_assess.htm
+http://www.csuchico.edu/plc/coverltr-ex.html
+http://www.csuchico.edu/sac/staff.html
+http://www.csuchico.edu/~pmccaff/syllabi/SPPA336/336unit15.html
+http://www.csudh.edu/dearhabermas/apsappr01.htm
+http://www.csudh.edu/dearhabermas/autism02.htm
+http://www.csudh.edu/dearhabermas/religion42bk.htm
+http://www.csulb.edu/~eruyle/puvudoc_9506_expense.html
+http://www.csulb.edu/~jsmith10/fanfict.html
+http://www.csulb.edu/~jvancamp/freedom1.html
+http://www.csulb.edu/~jvancamp/freedom4.html
+http://www.csulb.edu/~karenk/20thcwebsite/438final/ah438fin-Info.00003.html
+http://www.csulb.edu/~kmacd/361SEX.html
+http://www.csulb.edu/~sbsluss/Women_and_Business.html
+http://www.csulb.edu/~tstevens/h51worth.htm
+http://www.csun.edu/cod/conf/1999/proceedings/session0080.htm
+http://www.csun.edu/cod/conf/2000/proceedings/0069Romich.htm
+http://www.csun.edu/cod/conf/2000/proceedings/0099Baquis.htm
+http://www.csun.edu/cod/conf/2000/proceedings/0164Navrotski.htm
+http://www.csun.edu/cod/conf/2001/proceedings/0130velasco.htm
+http://www.csun.edu/cod/conf/2002/proceedings/247.htm
+http://www.csun.edu/cod/conf/2003/proceedings/225.htm
+http://www.csun.edu/cod/conf/2003/proceedings/324.htm
+http://www.csun.edu/cod/conf/2004/proceedings/156.htm
+http://www.csun.edu/itr/guides/webpagedesign.html
+http://www.csun.edu/~lg48405/vsf/ch4/ch4_the.html
+http://www.csupomona.edu/~biosci/info/
+http://www.csupomona.edu/~honorsprogram/about.htm
+http://www.csupomona.edu/~hsleff/phys.hs.view.htm
+http://www.csupomona.edu/~jcclark/encelia/abstracts.html
+http://www.csurams.com/article.aspx?articleID=6951
+http://www.csus.edu/president/athletictaskforce.stm
+http://www.csv-rsvpscotland.org.uk/AWARD%20HIGHLIGHTS%20SUCCESS%20OF%20RSVP.htm
+http://www.csv.org.uk/News/Award+for+RSVP+Primary+Care.htm
+http://www.csv.org.uk/News/Press+Releases/Press+Releases+17+July+03+MD+Day+launch.htm
+http://www.csvr.org.za/papers/papewgs.htm
+http://www.csvr.org.za/papers/papfish.htm
+http://www.csvr.org.za/papers/paprapej.htm
+http://www.csvr.org.za/papers/papritch.htm
+http://www.csweek.com/customer_service_week_agendas.php
+http://www.cswu.cz/obiwan/eng/profil.html
+http://www.ct-labs.com/Dr%20C/q33.htm
+http://www.ct.gov/
+http://www.ct.gov/ctportal/cwp/view.asp?a=843&q=246434
+http://www.ct.gov/governorrell/cwp/view.asp?A=1793&Q=285214
+http://www.cta-otc.gc.ca/about-nous/excellence/capacity-assessment_e.html
+http://www.cta.org/CaliforniaEducator/v6i4/feature_miracles.htm
+http://www.ctaa.org/
+http://www.ctba.com/calcup04/oct13prev.htm
+http://www.ctbi.org.uk/index.php?op=modload&name=knowledge&file=kbasepage&LinkID=206
+http://www.ctcchicago.org/mission_sponsors.htm
+http://www.ctcfl.ox.ac.uk/FDTL/three%20skills%20report.shtml
+http://www.ctcnet.org/stories/v5/Story6.htm
+http://www.ctcri.ca/en-pages/nationalbest.htm
+http://www.ctcscotland.org.uk/events/sv2004.html
+http://www.ctdata.com/about_ctdata/2005/01/02/225245.shtml
+http://www.ctdlc.org/Faculty/TeachingTips/avoidcheating.html
+http://www.ctds.info/menorrhagia.html
+http://www.cte.dal.ca/course_detail.php?id=4984
+http://www.ctgolfer.com/boards/instruct/instruction.html
+http://www.ctheory.net/printer.asp?id=111
+http://www.ctheory.net/printer.asp?id=65
+http://www.cthrc.ca/news_dec.shtml
+http://www.cthree.org/Publisher/Article.aspx?id=1116
+http://www.ctic.purdue.edu/KYW/Brochures/Wetlands.html
+http://www.ctie.monash.edu.au/hargrave/righter4.html
+http://www.ctinquiry.org/publications/reflections_volume_4/jenson2.htm
+http://www.ctjts.com/
+http://www.ctk9.com/professional.htm
+http://www.ctkelc.org/thisweek/2004/tw040125.html
+http://www.ctlibrary.com/topics/christian-life/character
+http://www.ctmc.org/
+http://www.ctn.state.ct.us/civics/general%20activites/journalistic_politics.htm
+http://www.ctpberk.org/successstory.htm
+http://www.ctrade.org/
+http://www.ctredpol.org/nclb/
+http://www.ctrf.org/
+http://www.ctrl-a.org/docs/survey-w04.html
+http://www.ctserc.org/summit/Articles/StakeholdersPlanningGroup-2.html
+http://www.ctstateu.edu/univrel/ctreview/spring97/ssahle.html
+http://www.cttjobs.com/resources.cfm?task=viewcategory&categoryid=1236&area=g
+http://www.ctu.edu.vn/coursewares/kinhte/Anhvanchuyennganhkinhte/chapter5.htm
+http://www.ctv.ca/servlet/ArticleNews/idol/CTVShows/1118261346699_113669353/
+http://www.ctv.ca/servlet/ArticleNews/mini/CTVNews/1087347912382_160
+http://www.ctv.ca/servlet/ArticleNews/mini/CTVNews/1087347912382_160?s_name=election2004&no_ads=
+http://www.ctv.ca/servlet/ArticleNews/print/CTVNews/1087347912382_160/?hub=CTVNewsAt11&subhub=PrintStory
+http://www.ctv.ca/servlet/ArticleNews/show/CTVShows/1063299170023_58705707/
+http://www.ctv.ca/servlet/ArticleNews/story/CTVNews/1087347912382_160?s_name=&no_ads=
+http://www.ctv.ca/servlet/ArticleNews/story/CTVNews/1107176107632_5/?hub=TopStories
+http://www.ctv.ca/servlet/ArticleNews/story/CTVNews/1107346804507_43?hub=Canada
+http://www.ctv.ca/servlet/ArticleNews/story/CTVNews/1116950430807_112359630/?hub=TopStories
+http://www.ctv.consumerreports.org/transfat.htm
+http://www.cu-portland.edu/financialaid/faqs.cfm
+http://www.cu-watch.com/
+http://www.cu.edu/~policies/General/email.html
+http://www.cubaminrex.cu/bloqueo/Eng/03_eng_d.htm
+http://www.cubavsbloqueo.cu/LinkClick.aspx?link=390&mid=1409
+http://www.cubbobwhite.net/urbanlegends.htm
+http://www.cube-europe.com/news.php?nid=7152
+http://www.cucy.net/lacp/archives/000001.html
+http://www.cudenver.edu/Resources/Human+Resources/Policies-Rules-Procedures/Policies/Leave+Abuse+Policy.htm
+http://www.cue.org/newsletter/may01.html
+http://www.cug.org/S_Cray/Cray_Pepper.html
+http://www.cuhk.edu.hk/adm/handbook/eng/misc/colleges_e.html
+http://www.cuhk.edu.hk/med/hep/eng/courses/e_healthstudies.htm
+http://www.cuke.com/excerpts-articles/cc%20excerpts/Final%20Season,%20ch19%20Ryuho.html
+http://www.culham.ac.uk/sg/inset_institutional.php
+http://www.culham.ac.uk/watch-christianity/head_view.html
+http://www.culinaryprograms.com/work.htm
+http://www.culma.wayne.edu/students/undergrad_academic_programs.htm
+http://www.cult.canterbury.ac.nz/research/res_student.shtml
+http://www.cultdeadcow.com/panel2001/hacktivism_panel.htm
+http://www.culticstudiesreview.org/csr_news/csr_newsgrp/aylmer_church_2002_02_15.htm
+http://www.cultivate-int.org/issue3/presentations/
+http://www.cultivate-int.org/issue4/ketubbot/
+http://www.cultivate-int.org/issue8/mag-news/
+http://www.cultivate-int.org/issue9/mag-news/
+http://www.cultsock.ndirect.co.uk/MUHome/cshtml/media/peacock.html
+http://www.cultsock.ndirect.co.uk/MUHome/cshtml/nvc/nvc5.html
+http://www.cultsoncampus.com/harekrishna.html
+http://www.cultural-enterprise.com/english/clients.html
+http://www.culturaleconomics.atfreeweb.com/Towards.htm
+http://www.culturalorientation.net/kenyareport03.html
+http://www.culturalstudies.net/
+http://www.culture.gouv.fr/culture/archeosm/en/cosqu2.htm
+http://www.culture.gov.uk/global/press_notices/archive_2005/dvdmarketboost_pactdcms.htm
+http://www.culture.gov.uk/global/press_notices/archive_2005/opo_speech_17jan05.htm?month=January&properties=archive_2005%2C%2Fglobal%2Fpress_notices%2Farchive_2005%2F%2C
+http://www.culture.gov.uk/global/press_notices/archive_2005/opo_speech_17jan05.htm?properties=archive_2005%2C%2Fsport%2FQuickLinks%2Fpress_notices%2Fdefault%2C&month=
+http://www.cultureandrecreation.gov.au/conference4/program.htm
+http://www.cultureby.com/trilogy/archives/000164.html
+http://www.culturechange.org/e-letter-57.html
+http://www.culturechange.org/e-letter-peakoil.html
+http://www.culturechange.org/e-letter-resist.html
+http://www.culturechange.org/fall_of_petroleum_civilization.html
+http://www.culturekitchen.com/archives/003074.html
+http://www.culturelle.com/story_time.jsp
+http://www.culturevulture.net/Television2/InspectorLynley.htm
+http://www.culturevulture.net/Theater/FullMonty.htm
+http://www.culturevulture.net/Theater5/WomanWhoWalked.htm
+http://www.culturewars.org.uk/2004-01/calico.htm
+http://www.culturewars.org.uk/2005-01/indopak2.htm
+http://www.cumberlink.com/PSUfootball/01/Game04/game4.html
+http://www.cumbieloac.com/north_carolina_lawyer_d.html
+http://www.cumbria.gov.uk/ccs/news/archive/140303a.asp
+http://www.cumbria.gov.uk/ccs/news/archive/140303b.asp
+http://www.cumc.columbia.edu/dept/nsg/NSGCPMC/specialties/backpain.html
+http://www.cumminsnursery.com/cherry.htm
+http://www.cumrec.org/newsletter/vol_xx/issue_no1/story7.asp
+http://www.cuna.org/gov_affairs/grassroots/project_d/howto.html
+http://www.cupe.sk.ca/nr-march31-04b.htm
+http://www.cupe3903.tao.ca/
+http://www.cupinfo.com/
+http://www.cupofcomfort.com/page7.htm
+http://www.cura.net/dierenbescherming/fundraising.html
+http://www.curbed.com/archives/categories/manhattan_harlem_east_harlem.php
+http://www.curbed.com/archives/categories/world_trade_center_redevelopment.php
+http://www.curehodgkins.com/hodgkins_experiences/jo_ready.html
+http://www.curia.eu.int/en/instit/presentationfr/rapport/preface.htm
+http://www.curiouslabs.com/go/community/currentnews
+http://www.curiousmath.com/
+http://www.curling.ca/inside_the_cca/about_the_organization/event_management.asp
+http://www.curp.neu.edu/aboutus/associates.htm
+http://www.current.org/
+http://www.current.org/cpb/cpb0510stationsreact.shtml
+http://www.current.org/dtv/
+http://www.current.org/outreach/out020dying.html
+http://www.currentfilm.com/dvdreviews2/xfilesseasontwodvd.html
+http://www.currenthistory.com/archivesep03/currentissue.html
+http://www.currentpsychiatry.com/2003_02/0203_psyber_psy.asp
+http://www.curriculumlink.org/mythicmirror/wk5.html
+http://www.curriculumonline.gov.uk/Subjects/FYr/browselist.htm?taxonid=3325&hid=3002197&navid=3500008
+http://www.curriculumsupport.nsw.edu.au/getFile.cfm?i=194&t=5&d=csdPDHPE
+http://www.cursa-ur.com/articles/BornToSing.htm
+http://www.cursor.org/buddrugg/rugg9.htm
+http://www.cursor.org/stories/oldnews.htm
+http://www.curtalliaume.com/winnings.html
+http://www.curtismedia.com/companyinfo.htm
+http://www.curvemag.com/Detailed/143.html
+http://www.cus.cam.ac.uk/~ppgb/Catdevelopment.html
+http://www.cushings-help.com/cynthia.htm
+http://www.custodyreform.com/reform-files/wwwboard/oldmessages/04-04-01to04-04-30/messages/45557.html
+http://www.custodywar.com/kids.htm
+http://www.customcandybars.com/pricing/
+http://www.customerservicecareers.com/jobs_dir/Champaign_Jobs.asp
+http://www.customguide.com/
+http://www.customrodderweb.com/tech/0207cr_binder/
+http://www.customs.go.th/Customs-Eng/TariffNomenclature/TariffNomenclature.jsp?menuNme=Tariff
+http://www.customs.gov.my/html/eng/pelabur.asp?id=130&category=4
+http://www.customs.gov/nafta/docs/us/chap-17.html
+http://www.customs.gov/xp/CustomsToday/2001/January/custoday_oit.xml
+http://www.cusu.cam.ac.uk/campaigns/womens/minutes_easterI_2004_council.htm
+http://www.cusu.cam.ac.uk/publications/altpro/colleges/trinity.html
+http://www.cut-the-knot.org/ctk/GeometryPraise.shtml
+http://www.cut-the-knot.org/ctk/LiberalArts.shtml
+http://www.cut-the-knot.org/ctk/pww.shtml
+http://www.cutglass.org/articles/art11.htm
+http://www.cutimes.com/links/adlinks.asp
+http://www.cuttingedge.org/articles/p235.html
+http://www.cuttingedge.org/ce1042.html
+http://www.cuttingedge.org/news/n1095.cfm
+http://www.cuttingedge.org/news/n1344.cfm
+http://www.cuttingedge.org/news/n1550.cfm
+http://www.cuttingedge.org/news/n1571.cfm
+http://www.cuttingedge.org/news/n1714.cfm
+http://www.cuttingedge.org/news/n1912.cfm
+http://www.cuttingedgeinfo.com/news/past_news.htm
+http://www.cuug.ab.ca/~lapierrs/creative/kraftwerk/
+http://www.cv4success.com/info/letter_application.html
+http://www.cva.edu/about/about_faqs.htm
+http://www.cvc.org/christmas/
+http://www.cvccomm.com/n_l/idea_exchange_nl7.html
+http://www.cvillenews.com/2005/03/28/council-may-put-art-in-place-back-in-budget/
+http://www.cvwd.org/wateriss/colorado.htm
+http://www.cw.ua.edu/vnews/display.v/ART/2004/09/10/4141429f186ad
+http://www.cw.ua.edu/vnews/display.v/ART/2005/06/16/42b12e16f3c2d
+http://www.cwa-union.org/issues/telecom/fcc/chgrefm.asp
+http://www.cwa.tnet.co.th/Network/tf_domestic.html
+http://www.cwb.ca/en/topics/value_added/index.jsp
+http://www.cwc.gov/treaty/annex_veri/annex-06_html
+http://www.cwfa.org/articledisplay.asp?id=910&department=CWA&categoryid=education
+http://www.cwfa.org/articles/5048/CWA/misc/
+http://www.cwfa.org/familyvoice/2001-09/06-15.asp
+http://www.cwnews.com/news/viewstory.cfm?recnum=21821
+http://www.cwob.com/yellowtext/yellowtext0204.html
+http://www.cwob.com/yellowtext/yellowtext0405.html
+http://www.cwoodshop.com/gun_knife.shtml
+http://www.cwrl.utexas.edu/about/about_history.shtml
+http://www.cwrl.utexas.edu/~bump/FS3011/web/Jose/rlm.htm
+http://www.cwrnh.com/
+http://www.cwrr.com/Amtrak/w_chief.html
+http://www.cwrr.com/Amtrak/w_cno.html
+http://www.cwru.edu/development/staff/
+http://www.cwru.edu/finadmin/humres/eerel/ecsg.html
+http://www.cwru.edu/pubaff/univcomm/rel-archive/med-stud.htm
+http://www.cws-scf.ec.gc.ca/nwrc-cnrf/migb/memo_75_e.cfm
+http://www.cwsf.info/response.php
+http://www.cwu.edu/~cob/news/research.html
+http://www.cwu.edu/~cwuadmis/international.html
+http://www.cwu.edu/~observer/story.php?storyid=3168&navArea=Sports
+http://www.cwu.edu/~saffairs/studentjudicialcode.html
+http://www.cwu.ie/members/Agreements/PPFFram2.htm
+http://www.cwu.ie/members/Agreements/PPFOver.htm
+http://www.cxcskiing.org/midWest/0304/Forms/StaringLake.htm
+http://www.cxlogic.com/index.php?p=writing/yesterday
+http://www.cyansoftware.com/eProof_success_stories.htm
+http://www.cyb-glassfibre.co.uk/GRPMaintenance.htm
+http://www.cyb-glassfibre.co.uk/grpdoc.htm
+http://www.cyber-rights.org/reports/hl-let2.htm
+http://www.cyber-sea.com/htmfiles/web9.htm
+http://www.cyber-tango.com/art/code.html
+http://www.cyber-village.net/ginfo_payment.htm
+http://www.cyberattic.com/directory/Holiday580.html
+http://www.cyberbilly.com/meathenge/archives/000225.html
+http://www.cyberclass.net/cooper.htm
+http://www.cybercollege.com/tvp030.htm
+http://www.cybercollege.com/tvp037.htm
+http://www.cyberdating.net/glen_truth1.html
+http://www.cyberdyaryo.com/bboard/bboard.htm
+http://www.cyberedge.com/vru_papers/barber.htm
+http://www.cybergecko.com/events.htm
+http://www.cyberindian.com/mother-teresa/beyond-the-image-book.php
+http://www.cyberinsights.com/s_smarterstats.htm
+http://www.cybernetexpo.com/
+http://www.cyberpat.com/essays/flan.html
+http://www.cyberpet.com/cyberdog/articles/behavior/addpet2d.htm
+http://www.cyberpsych.org/pdg/pdghist.htm
+http://www.cyberroach.com/analog/an18/an18-044.htm
+http://www.cyberscore.net/chart/371
+http://www.cyberscrub.com/antivirus/glossary.php
+http://www.cybersecuritieslaw.com/GDC/fd_call1.htm
+http://www.cybersmartcurriculum.org/lesson_plans/68_03.asp
+http://www.cybertherapy.info/pages/hfact.htm
+http://www.cyberunions.net/articles/article_shostak_1.htm
+http://www.cyberunions.net/articles/article_shostak_3.html
+http://www.cyberus.ca/~carls/cs_sig97.htm
+http://www.cyberussr.com/hcunn/guns/proh-def.html
+http://www.cyberussr.com/rus/dreiser.html
+http://www.cyberwest.com/cw09/v9scwst3.html
+http://www.cyc-net.org/Journals/rty-5-2.html
+http://www.cyc-net.org/cyc-online/cycol-0500-modelling1.html
+http://www.cyc-net.org/cyc-online/cycol-1201-dovey.html
+http://www.cyclades.com/solutions/security.php
+http://www.cycle-heaven.co.uk/folding_bikes.html
+http://www.cycleclub-bexley.org.uk/
+http://www.cyclewales.org.uk/newsapr04.htm
+http://www.cycling.pdx.edu/Training.htm
+http://www.cyclingforums.com/archive/index.php/t-107128.html
+http://www.cyclingforums.com/t211140-just-feeling-sad-and-scared-right-now.html
+http://www.cyclingnews.com/letters/2001/jul04letters.shtml
+http://www.cyclingnews.com/mtb.php?id=riders/2003/interviews/JHK03
+http://www.cyclingnews.com/riders/2002/interviews/?id=ogrady021
+http://www.cyclingnews.com/road/2002/tour02/?id=diaries/etxebarria_022
+http://www.cyclingnews.com/road/2002/tour02/?id=diaries/sanchez02
+http://www.cyclingnews.com/road/2003/tour03/?id=news/jul03/jul24news2
+http://www.cyclingnews.com/road/2003/tour03/?id=photos
+http://www.cyclingnews.com/road/2004/tour04/?id=features/interviews/stuart_ogrady04
+http://www.cyclingnews.com/tech.php?id=tech/2004/reviews/polar725
+http://www.cyclingnews.com/tech/2001/tech16aug.shtml
+http://www.cyclingnews.com/tech/?id=2002/letters/october29
+http://www.cyclingnews.com/track/2005/mar05/bendigo05/?id=results/bendigo051
+http://www.cyclingnz.com/science.phtml?n=49
+http://www.cyclingplus.co.uk/forum/topic.asp?TOPIC_ID=53078&whichpage=1
+http://www.cyclingplus.co.uk/forum/topic.asp?TOPIC_ID=68721&whichpage=2
+http://www.cyclingplus.co.uk/forum/topic.asp?whichpage=-1&TOPIC_ID=53078&REPLY_ID=541744
+http://www.cyclingscotland.org/forum/topic.asp?TOPIC_ID=263
+http://www.cyclismo.org/tutorial/matlab/vector.html
+http://www.cyclone.com/warranty/
+http://www.cydjournal.org/2003Spring/checkoway.html
+http://www.cyg.net/~jblackmo/diglib/telc.html
+http://www.cygnus-books.co.uk/features/full_catastrophe_living.htm
+http://www.cygnus-books.co.uk/features/lovesong_universe_mary_sparrowdancer.htm
+http://www.cylab.cmu.edu/default.aspx?id=296
+http://www.cylab.cmu.edu/files/winternewsletter.htm
+http://www.cymbet.com/cr_021016.php
+http://www.cymok.com/index2.asp
+http://www.cyndislist.com/medical.htm
+http://www.cynical-c.com/archives/2005_04.html
+http://www.cynicscorner.org/ds9_6/ds9_6s.html
+http://www.cynthiaharrison.com/
+http://www.cynthialeitichsmith.com/newreading.htm
+http://www.cypherltd.com/ebmachine.php
+http://www.cypressnet.com/Products/autotask/autotask.htm
+http://www.cyprus-apartments.net/balmyra.html
+http://www.cyprus-mail.com/news/main.php?id=17735&cat_id=4
+http://www.cysanorth.org/Coaching/coaching.htm
+http://www.cyto.purdue.edu/
+http://www.cytographics.com/resource/catalog/tapes/in-cp.htm
+http://www.cytosport.com/news/pr_11_06_04.htm
+http://www.czech.cz/inc/print.php?action=text&id=21
+http://www.czech.cz/index.php?section=3&menu=113&action=text&id=88
+http://www.d-a-l.com/help/archive/index.php/t-15329.html
+http://www.d-a-l.com/help/archive/index.php/t-708.html
+http://www.d-a-l.com/help/showthread.php?goto=lastpost&t=302
+http://www.d-a-l.com/help/showthread.php?goto=newpost&t=302
+http://www.d-a-l.com/help/showthread.php?t=15329
+http://www.d-a-l.com/help/showthread.php?t=302&page=3
+http://www.d-a-l.com/help/showthread.php?t=302&page=3&pp=10
+http://www.d-and-d.com/tinas/actionbox.html
+http://www.d-n-i.net/al_aqsa_intifada/plo_response_mitchell_report.htm
+http://www.d-n-i.net/fcs/comments/c214.htm
+http://www.d-n-i.net/lind/lind_1_14_05.htm
+http://www.d-n-i.net/lind/lind_archive.htm
+http://www.d-r.com/articles/article/art_111.htm
+http://www.d.umn.edu/ehso/infectious_waste/dispose.htm
+http://www.d.umn.edu/lib/librarycopyright.html
+http://www.d.umn.edu/~dcole/phillang/WilliamJamesPragmatismLecture6.htm
+http://www.d.umn.edu/~scastleb/Some%20Interesting%20(and%20some%20useful)%20Web%20Pages.htm
+http://www.d.umn.edu/~svanderh/plato_soc.htm
+http://www.d20zines.com/html/modules.php?op=modload&name=News&file=article&sid=586
+http://www.d3football.com/dailydose/?p=36
+http://www.da.org.za/da/Site/Eng/campaigns/BIG.asp
+http://www.dabar.org/Homiletics/Celebrating/Pageants.htm
+http://www.dabnet.org/mar_fam.htm
+http://www.dachshund-tips.com/
+http://www.dacton.com/rose.html
+http://www.dad.shoesforindustry.net/dad11.html
+http://www.dadalos-europe.org/int/grundkurs1/grundkurs_1.htm
+http://www.dadalos.org/frieden_int/grundkurs_4/peer_mediation.htm
+http://www.dadamo.com/bloggers/k/
+http://www.dadamo.com/columns/profiles/ask2.pl
+http://www.dadamo.com/fao/smartfaq.cgi?answer=1090346257
+http://www.dadamo.com/napharm/store3/template2/encyclopedia.html
+http://www.dadams.co.uk/celebs.htm
+http://www.dadashri.org/dadavideo.html
+http://www.daddac.com/articles_&_poems.htm
+http://www.daddys.com/content/geartips/mtocker/june05.shtml
+http://www.dadgum.com/giantlist/
+http://www.dads.state.tx.us/homepage/hhs_drug_benefit.html
+http://www.dads.state.tx.us/services/
+http://www.daelnet.co.uk/countrynews/archive/2001/country_news_241002.cfm
+http://www.daemonology.net/hyperthreading-considered-harmful/
+http://www.daffodil.org/ncds/shows.htm
+http://www.daft.ie/mortgages/mortgagesexplained.daft
+http://www.daft.ie/ni/rooms_to_share/
+http://www.dafyomi.co.il/berachos/reviewa/br-ra-28.htm
+http://www.dahrjamailiraq.com/hard_news/archives/hard_news/000160.php
+http://www.dai-sho.com/colorblindness/ran.htm
+http://www.daibosatsu.org/sf02news/sf02nyz.html
+http://www.dailybible.com/tev/01/tev0129t.htm
+http://www.dailybreeze.com/news/regstate/articles/1234017.html
+http://www.dailybreeze.com/news/regstate/articles/1623726.html
+http://www.dailybruin.ucla.edu/news/articles.asp?ID=33532
+http://www.dailybruin.ucla.edu/news/articles.asp?id=33780
+http://www.dailycamera.com/bdc/theater/article/0,1713,BDC_2515_3466161,00.html
+http://www.dailycandy.com/article.jsp?ArticleId=22247&city=5
+http://www.dailycardinal.com/news/2002/10/21/Features/Falling.Into.The.Scariest.Time.Of.The.Year-301943.shtml
+http://www.dailycardinal.com/news/2004/03/22/News/Swing.States.Remain.Crucial.To.2004.Presidential.Election-637850.shtml
+http://www.dailycollegian.com/vnews/display.v/ART/2005/02/15/42116d7305dfe
+http://www.dailyemerald.com/vnews/display.v/ART/2005/05/27/429708e5b42fb
+http://www.dailyfreepress.com/news/2003/05/01/News/President.Search.Could.End.By.Next.September-430775.shtml
+http://www.dailyfreepress.com/news/2003/10/14/Sports/Thank.You.Come.Again.You.Want.Pressure.Well.Come.And.Get.It-527794.shtml
+http://www.dailyfx.com/index.php?option=com_content&task=view&id=1495&Itemid=50
+http://www.dailyfx.com/index.php?option=com_content&task=view&id=186&Itemid=39
+http://www.dailygrail.com/node/1516
+http://www.dailygrail.com/node/254
+http://www.dailygrail.com/node/view/254
+http://www.dailyguideposts.com/PositiveThinking/ptm.asp
+http://www.dailyhampshiregazette.com/entertainment/dining/entstory.cfm?id_no=10700152005
+http://www.dailyherald.com/business/businessstory.asp?id=62142
+http://www.dailyhowler.com/dh020305.shtml
+http://www.dailyhowler.com/dh061305.shtml
+http://www.dailyhowler.com/dh101602.shtml
+http://www.dailyhowler.com/h011300_1.shtml
+http://www.dailyhowler.com/h011800_1.shtml
+http://www.dailyhowler.com/h030601_1.shtml
+http://www.dailyhowler.com/h041098_1.shtml
+http://www.dailyhowler.com/h041599_1.shtml
+http://www.dailyhowler.com/h042699_1.shtml
+http://www.dailyhowler.com/h052400_1.shtml
+http://www.dailyhowler.com/h061400_1.shtml
+http://www.dailyhowler.com/h070699_1.shtml
+http://www.dailyhowler.com/h071300_1.shtml
+http://www.dailyhowler.com/h071399_1.shtml
+http://www.dailyhowler.com/h082301_1.shtml
+http://www.dailyhowler.com/h110201_1.shtml
+http://www.dailyinfo.co.uk/guide/leisure_recreation.htm
+http://www.dailyiowan.com/news/2002/10/15/Nation/Va.Female.Killed.At.Home.Depot.Sniper.Suspected-297030.shtml
+http://www.dailyitem.com/archive/2004/0823/biz/stories/06biz.htm
+http://www.dailyitem.com/archive/2005/0217/local/stories/12local.htm
+http://www.dailykos.com/section/Democrats
+http://www.dailykos.com/section/culture
+http://www.dailykos.com/story/2003/11/5/164116/935
+http://www.dailykos.com/story/2004/10/10/225656/93
+http://www.dailykos.com/story/2004/10/31/84014/820
+http://www.dailykos.com/story/2004/10/7/195425/367
+http://www.dailykos.com/story/2004/11/29/72830/001
+http://www.dailykos.com/story/2004/12/24/18317/056
+http://www.dailykos.com/story/2004/3/7/213753/1954
+http://www.dailykos.com/story/2005/1/19/181824/607
+http://www.dailykos.com/story/2005/1/22/233743/636
+http://www.dailykos.com/story/2005/1/26/144024/687
+http://www.dailykos.com/story/2005/2/5/231925/7787
+http://www.dailykos.com/story/2005/2/7/142129/5541
+http://www.dailykos.com/story/2005/3/29/113651/512
+http://www.dailykos.com/story/2005/4/27/104035/827
+http://www.dailykos.com/story/2005/5/6/22220/02926
+http://www.dailykos.com/story/2005/6/18/5297/35724
+http://www.dailykos.com/story/2005/6/2/12202/37060
+http://www.dailykos.com/storyonly/2004/12/9/12813/2522
+http://www.dailykos.com/storyonly/2005/6/18/31146/3144
+http://www.dailykos.com/storyonly/2005/6/18/5297/35724
+http://www.dailylobo.com/news/2003/04/15/Opinion/Cannot.Judge.Life.Too.Soon-418020.shtml
+http://www.dailymail.co.uk/pages/live/articles/columnists/columnists.html?in_page_id=1772&in_article_id=338567&in_author_id=255
+http://www.dailymail.co.uk/pages/live/articles/health/healthmain.html?in_article_id=255329&in_page_id=1774
+http://www.dailymail.co.uk/pages/live/articles/health/healthmain.html?in_article_id=353614&in_page_id=1774
+http://www.dailymail.com/static/movies/
+http://www.dailymedication.com/modules.php?name=News&file=print&sid=32
+http://www.dailynews.com/Stories/0,1413,200~20954~2909246,00.html
+http://www.dailynews.lk/2005/01/13/spo05.html
+http://www.dailynewstranscript.com/localRegional/view.bg?articleid=49880&format=
+http://www.dailynexus.com/feature/2005/9684.html
+http://www.dailynexus.com/print_article.php?a=8704
+http://www.dailyom.com/articles/2005/329.html
+http://www.dailypeloton.com/displayarticle.asp?pk=7969
+http://www.dailypennsylvanian.com/vnews/display.v/ART/2002/03/26/3ca034ed1eebb
+http://www.dailypennsylvanian.com/vnews/display.v/ART/41b571760b20e
+http://www.dailypennsylvanian.com/vnews/display.v/ART/41b571760b20e?in_archive=1
+http://www.dailyprincetonian.com/archives/1998/02/04/news/5844.shtml
+http://www.dailyprincetonian.com/archives/2000/05/03/news/939.shtml
+http://www.dailyprincetonian.com/archives/2003/04/03/arts/7766.shtml
+http://www.dailyprincetonian.com/archives/2004/09/22/news/10793.shtml
+http://www.dailypundit.com/
+http://www.dailypundit.com/archives/013308.php
+http://www.dailyrecord.co.uk/news/news/page.cfm?method=full&objectid=14556816
+http://www.dailyrecord.com/sports/pro/sports1-060405french.htm
+http://www.dailysouthtown.com/southtown/dsliving/031ldfla.htm
+http://www.dailysouthtown.com/southtown/yrtwn/seast/163seyt1.htm
+http://www.dailystar.com.lb/article.asp?article_ID=10669&categ_ID=5&edition_id=10
+http://www.dailystar.com.lb/article.asp?edition_id=10&categ_id=5&article_id=15299
+http://www.dailytargum.com/news/2003/04/23/News/Group.Amends.Constitution.To.Aid.In.Impeachment-423452.shtml
+http://www.dailytexanonline.com/news/2001/04/16/Sports/Softball.Snaps.Losing.Streak.With.Isu.Sweep-699908.shtml
+http://www.dailytimes.com.pk/default.asp?page=story_10-9-2003_pg7_48
+http://www.dailytimes.com.pk/default.asp?page=story_11-3-2004_pg4_20
+http://www.dailytimes.com.pk/default.asp?page=story_13-2-2005_pg7_24
+http://www.dailytimes.com.pk/default.asp?page=story_13-5-2005_pg7_37
+http://www.dailytimes.com.pk/default.asp?page=story_2-3-2004_pg7_31
+http://www.dailytimes.com.pk/default.asp?page=story_22-12-2004_pg5_1
+http://www.dailytimes.com.pk/default.asp?page=story_22-4-2003_pg2_18
+http://www.dailytimes.com.pk/default.asp?page=story_23-12-2003_pg7_33
+http://www.dailytimes.com.pk/default.asp?page=story_3-6-2005_pg7_41
+http://www.dailytimes.com.pk/default.asp?page=story_4-8-2003_pg6_10
+http://www.dailytimes.com.pk/default.asp?page=story_5-5-2005_pg7_11
+http://www.dailytimes.com.pk/default.asp?page=story_6-12-2002_pg4_1
+http://www.dailywriting.net/AthertonGrove.htm
+http://www.daimlerchrysler.com/dccom/0,,0-5-7171-1-304195-1-0-0-0-0-0-70-7164-0-0-0-0-0-0-0,00.html
+http://www.dairy.nu/
+http://www.dairycare.com/investor_relations_information.html
+http://www.dairyfarmer.net/news/program05.html
+http://www.dairyfoods.com/CDA/ArticleInformation/features/BNP__Features__Item/0,6775,110862,00.html
+http://www.dairyreporter.com/nl/allNLs.asp
+http://www.daisy.freeserve.co.uk/bonniewoods.htm
+http://www.dalbeattie.com/domesticcivildefence/refuse.html
+http://www.dalefranks.com/eu.asp
+http://www.daleleatherman.com/GolfSt.AndrewsBay.htm
+http://www.dalian-gov.net/about.asp
+http://www.dalian.gov.cn/i18n/en/intro/culture.htm
+http://www.dalits.org/CERDStatementSDJM.htm
+http://www.dallasartsrevue.com/shows/dma100cover/Inducing-Passion.shtml
+http://www.dallascvb.com/visitors/50free.php
+http://www.dallasfed.org/educate/everyday/ev8.html
+http://www.dallasfed.org/research/beige/bb040728.html
+http://www.dallasfed.org/research/busfront/bus9804.html
+http://www.dallasfed.org/research/swe/2002/swe0202b.html
+http://www.dallasnews.com/breakroom/
+http://www.dallasnews.com/registration/terms/
+http://www.dallasnews.com/s/dws/dn/education/stories/033105dnnatevolution.11b7a.html
+http://www.dallasnews.com/s/dws/news/nation/vitindex.html
+http://www.dallasnews.com/sharedcontent/dws/bus/columnists/rmiller/stories/011605dnbusmiller.52bd2.html
+http://www.dallasnews.com/sharedcontent/dws/bus/personalfinance/stories/052305dnbusperfiinside.d3e6800f.html
+http://www.dallasnews.com/sharedcontent/dws/bus/scottburns/columns/2004/stories/060104dnbusburns.4bb14.html
+http://www.dallasnews.com/sharedcontent/dws/bus/scottburns/columns/2004/stories/100504dnbusburns.939b5.html
+http://www.dallasnews.com/sharedcontent/dws/bus/scottburns/columns/2005/stories/051205dnbusburns.2660f9c53.html
+http://www.dallasnews.com/sharedcontent/dws/bus/scottburns/qa/2005/stories/051205dnbusburns.2660f9c53.html
+http://www.dallasnews.com/sharedcontent/dws/dn/education/stories/121904dnmetcheating.64fa3.html
+http://www.dallasnews.com/sharedcontent/dws/news/city/northwest/stories/060205dnweslandswap.1080a4127.html
+http://www.dallasnews.com/sharedcontent/dws/news/dmn/stories/010305dnmetharvard.46dcc.html
+http://www.dallasnews.com/sharedcontent/dws/news/politics/local/stories/010305dnmetharvard.46dcc.html
+http://www.dallasnews.com/sharedcontent/dws/news/politics/national/vitindex.html
+http://www.dallasnews.com/sharedcontent/dws/news/world/mexico/stories/061005dnintpolicechief.2f9639f9d.html
+http://www.dallasnews.com/sharedcontent/dws/news/world/stories/012905dnintstakes.4a00e.html
+http://www.dallasnews.com/sharedcontent/dws/spe/2005/dfwtop200/stories/051105dnbuspriv2.998f761a.html
+http://www.dallasnews.com/sharedcontent/dws/spt/columnists/bhorn/stories/060405dnspohorncol.111becd0f.html
+http://www.dallasnews.com/sharedcontent/dws/spt/columnists/ksherrington/stories/060705dnsposherrington.1214f185c.html
+http://www.dallasnews.com/sharedcontent/dws/wfaa/jstjames/stories/wfaa040922_wz_medbrkthru.13fb565d6.html
+http://www.dallasnews.com/sharedcontent/dws/wfaa/jstjames/stories/wfaa041119_wz_medbrkthru.70909b5e.html
+http://www.dallasnews.com/sharedcontent/dws/wfaa/jstjames/stories/wfaa050415_wz_medbrkthru.1dcd4cd80.html
+http://www.dallasnews.com/sharedcontent/ptech/gamereviews2/052705ccjrptechgamer.2c6750814.html
+http://www.dallasobserver.com/issues/2005-02-03/news/news.html
+http://www.daltonstate.edu/galeps/Gynandromorphs.htm
+http://www.damagecontrolonline.com/moreabout.htm
+http://www.damageplan.com/
+http://www.damemaggiesmith.com/confessions.html
+http://www.damianpenny.com/
+http://www.damnforeigner.com/archives/2004_02.html
+http://www.damngood.com/catalog/problems.html
+http://www.damnittohell.com/2004/11/white_guy_dread.html
+http://www.dams.org/kbase/consultations/sasia/field.htm
+http://www.dan.sperber.com/pragmatics-modularity-and-mindreading.htm
+http://www.dana-net.com/s_offshore_dev.htm
+http://www.danadelany.com/forum.php
+http://www.danagioia.net/essays/elongfellow.htm
+http://www.danappleman.com/index.php?p=14
+http://www.danbrown.com/secrets/digital_fortress/spying.html
+http://www.dance.com/
+http://www.dance.com/store/customer/home.php
+http://www.dance.com/store/customer/home.php?partner=angst
+http://www.danceartistinfo.com/2brother.htm
+http://www.dancecorner.com/teacher/lessons/probsolv.html
+http://www.danceemc.com/what_feedback_pa.html
+http://www.dancefreak.com/interviews/sir_harry.htm
+http://www.danceholidays.co.uk/ArabicOriental.asp
+http://www.danceholidays.co.uk/Testimonials.asp
+http://www.danceholidays.com/ArabicOriental.asp
+http://www.danceholidays.com/BeforeYouGo.asp
+http://www.danceholidays.com/Testimonials.asp
+http://www.danceinsider.com/f2001/f309_1.html
+http://www.danceinsider.com/f915_1.html
+http://www.danceintimeproductions.com/philos.htm
+http://www.dancemagazine.com/dance_magazine/reviews/show_review.php?f=may_2004/zaccho.php
+http://www.dancepants.com/pages/dancefaq.html
+http://www.dancesask.com/links/
+http://www.dancewithshadows.com/royalair-kingfisher-go.asp
+http://www.danchan.com/weblog/theVooner/2003/8
+http://www.dancingaboutarc.com/lists/plagiarismlist.html
+http://www.dancinghands.com/
+http://www.dandelionbooks.net/archives/the_unexplained_21.html
+http://www.dandies.to/
+http://www.dane-online.org/blog/
+http://www.danelec.com/company/history/
+http://www.danes.org.uk/sponsor/index.shtml
+http://www.danfingerman.com/dtm/archives/cat_privacy.html
+http://www.danforthreview.com/features/interviews/tim_conley.htm
+http://www.dangermouse.net/gurps/amber/log/2775_05_04.html
+http://www.dangerouschunky.com/notebook/
+http://www.dangerouslaboratories.org/drillhistory.html
+http://www.dangerouslaboratories.org/radscout.html
+http://www.danheller.com/biz-sales.html
+http://www.danheller.com/photobiz-book.html
+http://www.danielboonehomestead.org/history.htm
+http://www.danielchampion.com/archives/2005/01/
+http://www.danieldrezner.com/archives/000768.html
+http://www.danieldrezner.com/archives/001047.html
+http://www.danieldrezner.com/archives/001098.html
+http://www.danieldrezner.com/archives/001155.html
+http://www.danieldrezner.com/archives/001670.html
+http://www.danieldrezner.com/archives/001720.html
+http://www.danieldrezner.com/archives/002005.html
+http://www.danieldrezner.com/archives/002016.html
+http://www.danieldrezner.com/blog/
+http://www.danieljackson.co.uk/fun/wenty/
+http://www.danielpipes.org/article/78
+http://www.danielpipes.org/cair.php
+http://www.danielpipes.org/comments/20156
+http://www.danillitphil.com/union.html
+http://www.daniweb.com/techtalkforums/lastpostinthread11602.html
+http://www.daniweb.com/techtalkforums/lastpostinthread16216.html
+http://www.daniweb.com/techtalkforums/thread11602.html
+http://www.daniweb.com/techtalkforums/thread16216.html
+http://www.dankat.com/tales1/rearls.htm
+http://www.danlamont.com/photoEssaysandPortfolios/editorialServices/writings/writingsIndex.html
+http://www.danmahony.com/nellstories4.htm
+http://www.dannychai.com/mymind/2002/mymind298.html
+http://www.dannygregory.com/weblog/archives/2005_02.html
+http://www.danone.com/wps/portal/download/?id=CMS.DanoneAttachments.Finance.RapAnnuel2003_Globalization_US&session=MYSESSION
+http://www.danpinello.com/LawSch.htm
+http://www.danradcliffe.co.uk/shortstories_10.htm
+http://www.dansdata.com/catapultwatch.htm
+http://www.dansdata.com/panther.htm
+http://www.dansdata.com/sbs3.htm
+http://www.dansdata.com/speakersets.htm
+http://www.dansjp3page.com/oldnews7.asp
+http://www.dansworld.com/brit_sk8.html
+http://www.dantecdynamics.com/LDA/Princip/Index.html
+http://www.danwismar.com/archives/wizblog/002515.html
+http://www.daqarta.com/ww00wndo.htm
+http://www.dar-al-masnavi.org/forgiveness.html
+http://www.darcynorman.net/
+http://www.darden.virginia.edu/olsson/
+http://www.dare.org.nz/daretomakechange.html
+http://www.darjnet.com/darjeeling/darjeeling/travel/train/train.htm
+http://www.dark-universe.com/forum/misc.php?do=bbcode
+http://www.dark-wraith.com/2005/05/analysis-if-truth-be-told.html
+http://www.darkaustin.com/index.php?page=reviews
+http://www.darkcarnival.com/dc_history.html
+http://www.darke.k12.oh.us/HPEcos/first.html
+http://www.darkforce.com/royce/w.o.b.htm
+http://www.darkhalf.com/online_Story_Board_Story.asp?Story_ID=12
+http://www.darkicon.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=120&MMN_position=181:181
+http://www.darkicon.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=25&MMN_position=41:41
+http://www.darklite.ie/copyright.php
+http://www.darklyrics.com/lyrics/queensryche/operationmindcrime.html
+http://www.darkshire.net/~jhkim/rpg/encyclopedia/alphabetical/H.html
+http://www.darkshire.net/~jhkim/rpg/encyclopedia/alphabetical/W.html
+http://www.darkshire.net/~jhkim/rpg/theory/examples/bond_sample.html
+http://www.darkshire.net/~jhkim/rpg/theory/genre/death.html
+http://www.darksideofsleepingpills.com/ch2.html
+http://www.darksideofsleepingpills.com/ch9.html
+http://www.darksky.org/
+http://www.darksky.org/infoshts/is026.html
+http://www.darksky.org/infoshts/is033.html
+http://www.darksky.org/key/keyecon.html
+http://www.darkzen.com/Articles/AZI.html
+http://www.darkzen.com/teachings/thekoanqa.htm
+http://www.darlington.gov.uk/Health/Hygiene+and+Healthy+Eating+Awards+2003.htm
+http://www.darpa.mil/ato/solicit/IBC/
+http://www.darpa.mil/baa/baa01-05.htm
+http://www.darpa.mil/body/NewsItems/darpa_fact.html
+http://www.darrenbarefoot.com/archives/001233.html
+http://www.darrenbarefoot.com/archives/001435.html
+http://www.darsie.net/string/
+http://www.darsie.net/string/vhard.html
+http://www.dart.org/boardminutes.asp?zeon=2004
+http://www.dart15.com/buysell.php3
+http://www.dartmoorsociety.com/debate.military.htm
+http://www.dartmouth.edu/dms/students/resources/resources/resources_housing.shtml
+http://www.dartmouth.edu/~chance/course/student_projects/Kristin/Kristin.html
+http://www.dartmouth.edu/~dartfac/coverfeature/0102/healthcare2.html
+http://www.dartmouth.edu/~dartfac/features/message.html
+http://www.dartmouth.edu/~deancoll/documents/handbook/conduct/structure/guidelines.html
+http://www.dartmouth.edu/~news/releases/2004/01/05.html
+http://www.dartmouth.edu/~reg/courses/desc/film.html
+http://www.dartmouth.edu/~toxmetal/bibliogSF.html
+http://www.dartmouth.edu/~uja/resources/accused.html
+http://www.dartmouth.edu/~upne/0-87451-754-0.html
+http://www.dartmouth.edu/~writing/materials/student/ac_paper/research.shtml
+http://www.dartmouthjapan.org/
+http://www.darwin.ws/RationallySpeaking/RS2004-10.htm
+http://www.darwinmag.com/read/feature/column.html?ArticleID=1133
+http://www.darwinmag.com/read/feature/column.html?ArticleID=1133&action=print
+http://www.darwinwars.com/cuts/indie/linc2.html
+http://www.das.psu.edu/index.cfm?pagedefs=NewsApp/_incPgDefsFullStory.cfm&id=442
+http://www.das.state.ct.us/Business_Svs/HCVP/HCVP_FAQs.asp
+http://www.das.state.ct.us/Business_Svs/HCVP/HCVP_Home.asp
+http://www.das.state.ct.us/Purchase/Portal/Portal_Bids_Open.asp?F_Bid_Type=1&F_Unit=TOS
+http://www.dashofmilk.co.uk/
+http://www.dashto.com/links.htm
+http://www.dassk.org/news.php?offset=195&where=
+http://www.data-archive.ac.uk/findingData/snDescription.asp?sn=4097
+http://www.databasetrends.com/datacenter/archives/current.html
+http://www.datadirect.com/techzone/dotnet/topics/managed-code/index.ssp
+http://www.datadirect.com/techzone/jdbc/basics/basics/index.ssp
+http://www.datadynamics.com/ShowPost.aspx?PostID=11815
+http://www.dataglider.com/onDemand.htm
+http://www.datamass.net/ox/oxford-english-dictionary.html
+http://www.datarecoveryreport.com/
+http://www.datascansystems.com/applications/toyota_paintshop.html
+http://www.datasec.co.uk/press/2004_01_22.html
+http://www.datastorex.com/
+http://www.datastorex.com/main.asp
+http://www.datawarehouse.com/article/?articleid=4797
+http://www.date.com/girls-single/unitedkingdom-sheffield.htm
+http://www.datejesus.com/
+http://www.datenschutzzentrum.de/material/recht/bdsg/bdsgeng.htm
+http://www.dating-world.net/Russia%20and%20Russians.htm
+http://www.datingfast.com/datingnew/articleArtID_43.html
+http://www.daughtersandsonstowork.org/wmspage.cfm?parm1=293
+http://www.daughtersofstpaul.com/growinginfaith/scripture/
+http://www.dauphinfriendshipcentre.com/staff.php
+http://www.davekahle.com/article/motivated.htm
+http://www.davekahle.com/bootcamp/seminar.htm
+http://www.davekopel.com/Terror/Fiftysix-Deceits-in-Fahrenheit-911.htm
+http://www.davekopel.org/Media/lrmassag.htm
+http://www.davekopel.org/Terror/Fiftysix-Deceits-in-Fahrenheit-911.htm
+http://www.davesite.com/computers/system/checklist.shtml
+http://www.davesite.com/hodgkins/treatment.shtml
+http://www.david-reid.com/cynic/index.php?paged=2
+http://www.davidappleyard.com/japan/jp4.htm
+http://www.davidbates.free-online.co.uk/prop1.htm
+http://www.davidbrin.com/disputationarticle1.html
+http://www.davidbrin.com/tolkienarticle1.html
+http://www.davidbrittan.com/harmonic_convergence.html
+http://www.davidbudbill.com/jme9.html
+http://www.davidcairns.com/speeches/data/?040220051021
+http://www.davidcorn.com/2005/02/the_state_of_ge.php
+http://www.daviddarling.info/works/ZenPhysics/ZenPhysics_ch6.html
+http://www.davidde.com/articles/zeisscopies.html
+http://www.daviddfriedman.com/Laws_Order_draft/laws_order_ch_17.htm
+http://www.daviddfriedman.com/Lott_v_Teret/Response_to_Webster.html
+http://www.davidgrenier.com/000307.html
+http://www.davidhewson.com/index.php/blogs/C20/
+http://www.davidicke.net/emagazine/vol10/articles/unification.html
+http://www.davidicke.net/emagazine/vol10/articles/unificationt.html
+http://www.davidkrut.com/resources/newyork_all.asp
+http://www.davidlammy.co.uk/da/13280
+http://www.davidlawson.co.uk/Files/Serviced01_093.htm
+http://www.davidlesh.net/
+http://www.davidmaki.net/
+http://www.davidmcwilliams.ie/Articles/comment.asp?ArticleID=210
+http://www.davidmyers.org/Brix?pageID=65
+http://www.davidorchard.com/online/media-2003/mackayonlimbs-wnpgfreepress-030926.html
+http://www.davidpbrown.co.uk/miscellaneous/really-useful-trivia.html
+http://www.davidrendel.org.uk/speeches/17.html
+http://www.davidrmunson.com/bloodinthesnow/
+http://www.davidsemporium.co.uk/_THIRTYEIGHT.html
+http://www.davidsherman.com/legal/ppolicy.html
+http://www.davidson-law.net/dlblog/
+http://www.davidsouthgate.com/030721a.shtml
+http://www.davidsuzuki.org/About_us/Dr_David_Suzuki/Article_Archives/weekly06280201.asp
+http://www.davidsuzuki.org/Climate_Change/Solutions/Green_Leaders.asp
+http://www.davidsuzuki.org/Oceans/CoastalOil/background.asp
+http://www.davidsuzuki.org/about_us/Dr_David_Suzuki/Article_Archives/weekly03120401.asp
+http://www.davincisinquest.com/stories/season3/37.asp
+http://www.davosnewbies.com/
+http://www.davros.org/rail/signalling/bellcodes.html
+http://www.daweslane.com/sane1.html
+http://www.dawn.com/2004/11/24/nat22.htm
+http://www.dawn.com/2004/12/17/spt1.htm
+http://www.dawn.com/2005/01/15/local17.htm
+http://www.dawn.com/2005/01/30/nat11.htm
+http://www.dawn.com/2005/02/04/op.htm
+http://www.dawn.com/2005/02/06/ed.htm
+http://www.dawn.com/2005/02/07/nat12.htm
+http://www.dawn.com/2005/text/op.htm
+http://www.dawn.com/cgi-bin/today.cgi?file=ed.htm
+http://www.dawnbarnhart.com/affa/campaign.html
+http://www.dawncanada.net/voteforequality/issues.htm
+http://www.dawneden.com/2005/01/peace-and-carats.html
+http://www.dawnministries.org/regions/nam/johnwhite/meeting/breaking_bread.html
+http://www.dawodu.com/omoigui10.htm
+http://www.dawodu.com/omoigui35.htm
+http://www.day-tripper.net/price-surveys.html
+http://www.day-tripper.net/pricesexchangemoney.html
+http://www.day1.net/transcript.php?id=374
+http://www.daydreamvillas.co.uk/crevillente/crevillente-bb.htm
+http://www.daynadunbar.com/exerpts.html
+http://www.dayton.bbb.org/rel_nov2100.html
+http://www.dayton.lib.oh.us/~kambitsch/netscape/bogus-proxy-server.html
+http://www.daytradeteam.com/dtt/tradingtips.asp?id=20009
+http://www.db.ucsd.edu/CSE232BS03/
+http://www.dba-oracle.com/art_unix_mig.htm
+http://www.dbazine.com/ofinterest/oi-articles/pascal19
+http://www.dbbalance.com/
+http://www.dbdebunk.com/page/page/622312.htm
+http://www.dbenton.com/go/chronicles/2004/08/
+http://www.dbforums.com/t1114068.html
+http://www.dbl-s.com/dblreadymix.htm
+http://www.dbmarketing.com/articles/Art145.htm
+http://www.dbrmfg.co.nz/Strategy%20Holistic%20Approach.htm
+http://www.dbsalliance.org/Info/clinical.html
+http://www.dbsalliance.org/info/suicide.html
+http://www.dbsalliance.org/survey/index.asp?survey_ID=1
+http://www.dbta.com/in-depth/june04/mckendrick.html
+http://www.dbta.com/in-depth/sept04/baker.html
+http://www.dc.k12.mn.us/mschool/Handbook/Default.htm
+http://www.dca.gov.uk/atoj2000.htm
+http://www.dca.gov.uk/civil/final/sec4b.htm
+http://www.dca.gov.uk/compleng2.htm
+http://www.dca.gov.uk/consult/lcoffice/
+http://www.dca.gov.uk/consult/meta/metafr.htm
+http://www.dca.gov.uk/criminal/auldcom/jud/jud20.htm
+http://www.dca.gov.uk/dept/rulecomms/criminalprc.htm
+http://www.dca.gov.uk/enforcement/enfadgp/open131101.htm
+http://www.dca.gov.uk/family/annrep99/four.htm
+http://www.dca.gov.uk/foi/implement.htm
+http://www.dca.gov.uk/foi/map/modactplan.htm
+http://www.dca.gov.uk/links/gov-legal.htm
+http://www.dca.gov.uk/menincap/ch9.htm
+http://www.dca.gov.uk/pubs/statements/legal-services.htm
+http://www.dca.gov.uk/risk/hlria.htm
+http://www.dca.gov.uk/speeches/1997/lab-sp.htm
+http://www.dca.gov.uk/speeches/2003/lc101203.htm
+http://www.dca.gov.uk/speeches/2003/ps090503.htm
+http://www.dca.gov.uk/speeches/2004/lc181004.htm
+http://www.dca.gov.uk/speeches/2005/lc080605.htm
+http://www.dca.gov.uk/speeches/2005/lc160605.htm
+http://www.dca.gov.uk/speeches/2005/lc210305.htm
+http://www.dcardillo.com/articles/moveon.html
+http://www.dcbar.org/for_lawyers/washington_lawyer/june_2003/lives.cfm
+http://www.dcdoctor.com/pages/rightpages_healthconditions/workerinjuries/california/wi_ca_whattodo.html
+http://www.dce.harvard.edu/pubs/alum/1996/fall/13.html
+http://www.dce.harvard.edu/pubs/charles/2000/fall/btwickler.html
+http://www.dce.harvard.edu/pubs/charles/2001-02/awojnar.html
+http://www.dce.harvard.edu/pubs/charles/2002/fall/skimberly.html
+http://www.dce.k12.wi.us/midschool/information.htm
+http://www.dcfp.navy.mil/checksheets/checksheets.htm
+http://www.dci-pal.org/english/PrinterF.cfm?DocId=252&CategoryID=9
+http://www.dcisc.org/14th/volume2/d01_fact_2003_07_29.html
+http://www.dcita.gov.au/ie/publications/2002/november/advancing_australia_-_the_information_economy_progress_report_2002/international_dimensions
+http://www.dcjs.org.uk/news/summer2001/art12/
+http://www.dckings.com/tips.html
+http://www.dclab.com/dclnews0503.asp
+http://www.dclab.com/dclnews0702.asp
+http://www.dclab.com/xmlwhitepaper.asp
+http://www.dcma.mil/communicator/archives/spring%20summer%202004/ncma_assoc_news_06_04.htm
+http://www.dcmilitary.com/army/standard/8_09/health/22866-1.html
+http://www.dcmilitary.com/tricare/5_1/news/31134-1.html
+http://www.dcmnr.gov.ie/Home/Energy/Sustainable+Energy+Division/Green+Paper+on+Sustainable+Energy/Summary+of+Submissions+to+the+Green+Paper/
+http://www.dcmnr.gov.ie/Home/Energy/Sustainable+Energy+Division/Green+Paper+on+Sustainable+Energy/Summary+of+Submissions+to+the+Green+Paper/Summary+of+Submissions+to+the+Green+Paper.htm
+http://www.dcmstarships.com/article-dse-inquiry-part-5.html
+http://www.dcnr.state.pa.us/wrcf/keynotes/summer01/bats.htm
+http://www.dcr.net/~stickmak/Gaming/magmn.htm
+http://www.dcr.state.va.us/parks/1stland.htm
+http://www.dcrafts.com/motherday.htm
+http://www.dcs.ex.ac.uk/~pjbrown/papers/acm.html
+http://www.dcs.ex.ac.uk/~pjbrown/papers/huc2k_as_submitted.html
+http://www.dcs.kcl.ac.uk/staff/lappin/recent_papers.html
+http://www.dcs.shef.ac.uk/~ajc/
+http://www.dcs.warwick.ac.uk/research/hpsg/ARM/ARM.html
+http://www.dcsconsulting.biz/article4.html
+http://www.dcthomson.co.uk/mags/post/hospice/htm_2003/120103_2.htm
+http://www.dcthornton.com/
+http://www.dctta.asn.au/services.htm
+http://www.dcu.org/streetwise/kids/toy.html
+http://www.dcwatch.com/govern/opm030613.htm
+http://www.dcwatch.com/wasa/040317b.htm
+http://www.ddadelhi.com/planning/how_to_apply.htm
+http://www.ddeamc.amedd.army.mil/clinical/Pathology/DPALSGiveBlood.htm
+http://www.ddfl.org/behavior.htm
+http://www.ddfl.org/behavior/cratetraining.htm
+http://www.ddfl.org/behavior/educated_dog.htm
+http://www.ddfl.org/faq.htm
+http://www.ddin.com/sep15-96pp.htm
+http://www.ddjembedded.com/resources/articles/2001/0110m/0110m.htm
+http://www.ddm.uci.edu/Assembly/instructions.html
+http://www.ddos.com/index.php?content=jobs/content.php
+http://www.ddpartyrental.com/about.html
+http://www.dea.gov/pubs/intel/intel0901.html
+http://www.deabirkett.com/pages/journalism_film/journalism/dream_on.htm
+http://www.deaconessokc.org/
+http://www.deadlybloodyserious.com/Python/
+http://www.deadparrots.net/
+http://www.deadparrots.net/archives/2005/01/
+http://www.deadparrots.net/archives/cat_language.html
+http://www.deadsea-cosmetics.com/b2b/mineral-care.htm
+http://www.deafblind.com/australia.html
+http://www.deafblind.com/dbequipm.html
+http://www.deafblind.com/deafness.html
+http://www.deaflawyers.org/resources.htm
+http://www.deafnative.com/whatsnew.htm
+http://www.deafnessatbirth.org.uk/content2/develop/encourage/02/
+http://www.deafunderstanding.com/book_excerpt.html
+http://www.deakin.edu.au/dlt2005/deakin_online/dso/06components_tools.html
+http://www.deakin.edu.au/its/telephone/voice.php
+http://www.deakin.edu.au/studentlife/careers/career_planning/vocational_assessment.php
+http://www.deakin.edu.au/studentlife/orientation/online_workshops/exam_preparation.php
+http://www.deakin.edu.au/~agoodman/scc219/practical9.php
+http://www.dealtime.co.uk/xDN-Cartridges_and_Toners--hewlett_packard-price_range_1000_2000~V-rows
+http://www.dealtime.com/xDN-Baby_Care--nursery_furniture~S-2~OR-0~V-rows~PG-4
+http://www.dealtime.com/xDN-Clothing--12975_price_range_under_15-artapart_com-ap_gender_age_women~V-rows
+http://www.dealtime.com/xDN-Clothing--ap_gender_age_girls-~V-rows~PG-4
+http://www.dealtime.com/xDN-Clothing--ap_gender_age_girls~V-rows~PG-4
+http://www.dealtime.com/xDN-Sport_and_Outdoor---rollerskating_and_inline_skating-onlinesports~V-rows
+http://www.dealtime.com/xDN-Sport_and_Outdoor--baseball_and_softball-sp_brand_mizuno-fielding_gloves-dicks_sporting_goods~V-rows
+http://www.dealtime.com/xDN-Sport_and_Outdoor--office___desk_accessories-12530_price_range_50_75~V-rows
+http://www.dealtime.com/xDN-Sport_and_Outdoor--personal_fitness-weight_training_equipment-weight_lifting_equipment_guide~V-rows
+http://www.dealtime.com/xPR-Far_Cry~RD-137385315972
+http://www.dealtime.com/xPR-Kodak_EasyShare_CX6230~RD-127692279428
+http://www.dealtime.com/xPR-Nokia_N_Gage~RD-130583006852
+http://www.dealtime.com/xPR-Pioneer_PDP_503CMX~RD-61093023364
+http://www.dealtime.com/xPR-Sony_CCD_TRV308~RD-81212771972
+http://www.dealtime.com/xPR-iRiver_iHP_140~RD-165598629508
+http://www.dean.sbc.edu/pegues.html
+http://www.deanesmay.com/
+http://www.deanesmay.com/archives/000098.html
+http://www.deanesmay.com/archives/005634.html
+http://www.deanesmay.com/posts/1098420917.shtml
+http://www.deanesmay.com/posts/1106938238.comments.shtml
+http://www.deanesmay.com/posts/1106938238.shtml
+http://www.deanza.fhda.edu/specialed/dish/section3/grid.html
+http://www.death-valley.us/article1125.html
+http://www.death-valley.us/article316.html
+http://www.deathandpopcorn.com/thekernel.html
+http://www.deathpenaltyinfo.org/article.php?scid=17&did=448
+http://www.deathpenaltyinfo.org/article.php?scid=21&did=1135
+http://www.deathpenaltyinfo.org/article.php?scid=27&did=1010
+http://www.deathpenaltyinfo.org/article.php?scid=66&did=946
+http://www.deathstar.org/~krlipka/ps/fiction/archive/color.html
+http://www.deb.uscourts.gov/Attorney/Payment_of_Filing_Fees_by_Credit_Card.htm
+http://www.debatabase.org/details.asp?topicID=182
+http://www.debates.org/pages/trans2004a.html
+http://www.debates.org/pages/trans2004c.html
+http://www.debating.org.za/documents/29sep2002.shtml
+http://www.debbieallen.com/pressroom_articles/make_sure_your_holding_right_cards.htm
+http://www.debbieallen.com/pressroom_articles/wearing_lots_of_hats.htm
+http://www.debbiemacomber.com/16LighthouseRoadexcerpt.htm
+http://www.debbiemacomber.com/navywifeexcerpt.htm
+http://www.debbiemacomber.com/shoponblossomstreetexcerpt.htm
+http://www.debbieschlussel.com/bio.shtml
+http://www.debbieweil.com/archives/2003/06/24/take_this_instant_survey/index.php
+http://www.debian.org/devel/wnpp/
+http://www.debian.org/doc/manuals/debian-java-faq/ch-debian-java-woody.html
+http://www.debian.org/support
+http://www.debka.com/article.php?aid=466
+http://www.deblogan.com/win.html
+http://www.deborahhage.com/lying.htm
+http://www.debraashton.com/test.html
+http://www.debradickerson.com/articles/johnny.htm
+http://www.debramullins.com/donovans_bed.html
+http://www.debunker.com/texts/goddess.html
+http://www.debunker.com/texts/vanatinai.html
+http://www.dec.state.ny.us/
+http://www.dec.state.ny.us/website/bondact/publicmeetings2005.html
+http://www.dec.state.ny.us/website/dar/beim/failtext02.html
+http://www.dec.state.ny.us/website/dfwmr/wildlife/deer/bgbaprjun03.htm
+http://www.dec.state.ny.us/website/dfwmr/wildlife/guide/trapping.html
+http://www.dec.state.ny.us/website/dfwmr/wildlife/ifyoucar.html
+http://www.dec.state.ny.us/website/greatlakes/quantity.html
+http://www.dec.state.ny.us/website/ohms/decis/adkfishr.htm
+http://www.dec.state.ny.us/website/ohms/notices/suffolkcowater.html
+http://www.dec.state.ny.us/website/press/pressrel/2005/200505.html
+http://www.dec.state.ny.us/website/regs/part422.html
+http://www.dec.state.ny.us/website/regs/part597a.html
+http://www.dec.state.ny.us/website/regs/subpart225_2.html
+http://www.decanter.com/specials/49312.html
+http://www.decaturdaily.com/decaturdaily/news/031123/election.shtml
+http://www.decaturdaily.com/decaturdaily/news/041121/trade.shtml
+http://www.decaturdaily.com/decaturdaily/religion/040228/pastor.shtml
+http://www.deccanherald.com/deccanherald/jun192005/district180502005618.asp
+http://www.deccanherald.com/deccanherald/jun62005/eb14527200564.asp
+http://www.deccanherald.com/deccanherald/may72005/national135628200556.asp
+http://www.deccanherald.com/deccanherald/nov26/s10.asp
+http://www.december.com/places/faq.html
+http://www.december.com/places/mke/cafes.html
+http://www.december.com/places/sea/events.html
+http://www.decemberists.com/news/
+http://www.decentfilms.com/reviews/finalsolution.html
+http://www.decentfilms.com/reviews/greenmile.html
+http://www.decentfilms.com/reviews/jimmyneutronboygenius.html
+http://www.decentfilms.com/reviews/roadhome2001.html
+http://www.deceptiondollar.com/Inquiry911.htm
+http://www.deceptioninthechurch.com/covering.html
+http://www.deceptioninthechurch.com/orrel19.html
+http://www.deceptioninthechurch.com/thecall.html
+http://www.dechencholing.org/info/
+http://www.decision-finance.co.uk/aff/members/agreement.jsp
+http://www.decisionanalyst.com/publ_art/track.asp
+http://www.decisioncraft.com/datamining/keydrivers.htm
+http://www.decisionquest.com/press_center.php?NewsID=239
+http://www.deco-dence.com/generic29.html
+http://www.decongested.com/story.php?id=19
+http://www.decorate-redecorate.com/certified-redesigner.html
+http://www.decorate-redecorate.com/work-at-home.html
+http://www.decoratingadvice.com/freehelp.html
+http://www.decoupageforthesoul.com/livingintune.tevet5762.htm
+http://www.ded-tanzania.de/countryp.html
+http://www.dedicatedspace.com/
+http://www.deed.state.mn.us/cjs/cjsbook/finish1.htm
+http://www.deeko.com/reviewdetail.asp?id=158
+http://www.deep-software.com/faq.asp
+http://www.deepblacklies.co.uk/operation_black_dog_pr.htm
+http://www.deepchip.com/items/0343-13.html
+http://www.deepchip.com/items/0433-07.html
+http://www.deepchip.com/posts/0132.html
+http://www.deepchip.com/posts/0274.html
+http://www.deepcoveheritage.com/newsvol5.html
+http://www.deepdisc.com/smallpress/
+http://www.deepdiscoforce.com/
+http://www.deepdownproductions.com/ccnoworderfrm2.shtml
+http://www.deepdownwellness.com/diets/southbeach.html
+http://www.deepecology.org/gandmgrantees.html
+http://www.deepeddy.com/~cwg/profession.html
+http://www.deepnetworks.net/help/printers.htm
+http://www.deepred.co.uk/swt.php
+http://www.deepriverct.com/library/history.htm
+http://www.deepseamusic.com/musiclib1.html
+http://www.deepskytech.com/prod_4dextensions/fu4d/recommendations.html
+http://www.deepskytech.com/prod_components/bash_pro/licensing.html
+http://www.deepskytech.com/prod_components/http_client_deux_pro/licensing.html
+http://www.deepskytech.com/prod_components/smtp_client_deux_pro/licensing.html
+http://www.deepskytech.com/prod_components/tcp_deux_pro/licensing.html
+http://www.deepskytech.com/prod_components/tcpsd_pro.html
+http://www.deepsoil.com/
+http://www.deepspring.org/classes_CONTENTS.htm
+http://www.deepstealth.com/store/both.htm
+http://www.deepstealth.com/store/makeup.htm
+http://www.deepstealth.com/store/makeupconsult.htm
+http://www.deere.com/en_US/deerecom/sitemap/
+http://www.deeredoctor.com/mule_testimonial.htm
+http://www.def2.org/submission/guidelines.html
+http://www.defalco.com/sold.htm
+http://www.defamer.com/
+http://www.defamer.com/hollywood/diary/sightings/hollywood-privacywatch-the-butterscotch-stallion-rides-again-106268.php
+http://www.defamer.com/hollywood/gossip/tom-cruise/index.php
+http://www.defamer.com/hollywood/movies/awards/index.php
+http://www.defamer.com/hollywood/tv/the-apprentice/index.php
+http://www.defcom.com.au/cairnsnorthqld_PP_trinity.htm
+http://www.defcom.com.au/sunshinecoast_hd_australis_noosa.htm
+http://www.defeatdiabetes.org/Archives%20of%20News/2003decemberarticles.htm
+http://www.defence-estates.mod.uk/access/walks/walks/walks_otterburn.htm
+http://www.defence.gov.au/budget/02-03/dar/02_04_01army.htm
+http://www.defence.gov.au/budget/02-03/dar/02_04_02armycapinfo.htm
+http://www.defence.gov.au/budget/02-03/dar/03_01_notes01.htm
+http://www.defence.gov.au/budget/02-03/dar/05_02priorities.htm
+http://www.defence.gov.au/budget/03-04/dar/05_06_ohs.htm
+http://www.defence.gov.au/cfo/csp/manual/pdf/menu_pn.htm
+http://www.defence.gov.au/discover/fs004.cfm
+http://www.defence.gov.au/equity/disability/supportinternal.htm
+http://www.defence.gov.au/media/DepartmentalTpl.cfm?CurrentId=2368
+http://www.defence.gov.au/media/DepartmentalTpl.cfm?CurrentId=3048
+http://www.defence.gov.au/media/SpeechTpl.cfm?CurrentId=3608
+http://www.defence.gov.au/media/SpeechTpl.cfm?CurrentId=4097
+http://www.defence.gov.au/media/speechtpl.cfm?CurrentId=3609
+http://www.defence.gov.au/news/armynews/editions/1102/health/story01.htm
+http://www.defence.gov.au/news/armynews/editions/past_editions01.htm
+http://www.defence.gov.au/news/navynews/editions/4804/topstories/STORY02.HTM
+http://www.defence.gov.au/optsunamiassist/gallery.htm
+http://www.defence.gov.au/raaf/reserves/join/join_gdrg.htm
+http://www.defence.gov.au/rusi/State/act%20lectures%20selth.htm
+http://www.defence.gov.au/rusi/state/act%20lectures%20selth.htm
+http://www.defence.govt.nz/public_docs/aircombat/4-air-combat-force.shtml
+http://www.defence.govt.nz/public_docs/mfr/4req-navy.shtml
+http://www.defencebills.gov.uk/community.htm
+http://www.defencejournal.com/dec98/battle-dhalai.htm
+http://www.defencemechanism.com/
+http://www.defencemechanism.com/default.asp
+http://www.defencetalk.com/news/publish/article_002531.shtml
+http://www.defendamerica.gov/
+http://www.defendamerica.mil/archive/2003-09/20030910pm.html
+http://www.defendamerica.mil/archive/2003-09/20030911am.html
+http://www.defenddemocracy.org/in_the_media/in_the_media_show.htm?doc_id=275822
+http://www.defenddemocracy.org/research_topics/research_topics_show.htm?doc_id=281354
+http://www.defenddemocracy.org/research_topics/research_topics_show.htm?doc_id=281354&attrib_id=7575
+http://www.defenders.org/bio-co04.html
+http://www.defenders.org/pubs/nsi09.html
+http://www.defenders.org/pubs/save06.html
+http://www.defense.gov/transcripts/2005/tr20050629-secdef3201.html
+http://www.defensedaily.com/cgi/rw/show_mag.cgi?pub=rw&mon=0401&file=0401exectrans.htm
+http://www.defenselink.mil/news/Mar2005/20050308_122.html
+http://www.defenselink.mil/news/May2004/n05302004_200405303.html
+http://www.defenselink.mil/news/Nov1995/x112295_x1122tri.html
+http://www.defenselink.mil/pubs/prolif97/trans.html
+http://www.defenselink.mil/releases/1996/b022996_bt110-96.html
+http://www.defenselink.mil/releases/2000/b03242000_bt146-00.html
+http://www.defenselink.mil/specials/hispanic02/army.html
+http://www.defenselink.mil/specials/secdef_histories/bios/cheney.htm
+http://www.defenselink.mil/speeches/1995/s19950130-perry.html
+http://www.defenselink.mil/speeches/1995/s19950202-denman.html
+http://www.defenselink.mil/speeches/1995/s19950602-widnall.html
+http://www.defenselink.mil/speeches/1995/s19950622-clinton.html
+http://www.defenselink.mil/speeches/1995/s19951011-moore.html
+http://www.defenselink.mil/speeches/1996/s19960518-white.html
+http://www.defenselink.mil/speeches/1996/s19960917-fogleman.html
+http://www.defenselink.mil/speeches/1997/s19970517-pang.html
+http://www.defenselink.mil/speeches/1997/s19970806-dalton.html
+http://www.defenselink.mil/speeches/1998/s19980519-gansler.html
+http://www.defenselink.mil/speeches/2002/s20020409-depsecdef2.html
+http://www.defenselink.mil/transcripts/1995/t110695_t$b1106.html
+http://www.defenselink.mil/transcripts/2003/tr20030508-0160.html
+http://www.defenselink.mil/transcripts/2003/tr20030529-secdef0230.html
+http://www.defenselink.mil/transcripts/2003/tr20030825-secdef0621.html
+http://www.defenselink.mil/transcripts/2003/tr20031214-1021.html
+http://www.defenselink.mil/transcripts/2004/tr20040907-secdef1281.html
+http://www.defenselink.mil/transcripts/2005/tr20050111-secdef1961.html
+http://www.defenselink.mil/transcripts/2005/tr20050323-2325.html
+http://www.defenselink.mil/transcripts/2005/tr20050517-2841.html
+http://www.defenselink.mil/transcripts/2005/tr20050520-2881.html
+http://www.defenselink.mil/transcripts/2005/tr20050601-secdef2981.html
+http://www.defenselink.mil/transcripts/2005/tr20050609-secdef3021.html
+http://www.defenseofmarriagecoalition.org/gaymarriageqa.php
+http://www.defensetech.org/
+http://www.defensetech.org/archives/001619.html
+http://www.defensetech.org/archives/2005_03.html
+http://www.defra.gov.uk/animalh/quarantine/pets/
+http://www.defra.gov.uk/corporate/consult/fawc-slaughter/consultlist.htm
+http://www.defra.gov.uk/corporate/ministers/speeches/mb031028.htm
+http://www.defra.gov.uk/environment/acre/meetings/00/000203m.htm
+http://www.defra.gov.uk/environment/acre/meetings/00/000720m.htm
+http://www.defra.gov.uk/environment/acre/meetings/02/020321m.htm
+http://www.defra.gov.uk/environment/acre/meetings/02/020523m.htm
+http://www.defra.gov.uk/environment/acre/meetings/04/min040819.htm
+http://www.defra.gov.uk/environment/acre/meetings/98/agen0406m.htm
+http://www.defra.gov.uk/environment/acre/meetings/99/990218m.htm
+http://www.defra.gov.uk/environment/climatechange/trading/uk/faq.htm
+http://www.defra.gov.uk/environment/consult/eeccl/
+http://www.defra.gov.uk/environment/darwin/lecture/030521.htm
+http://www.defra.gov.uk/environment/eaf/
+http://www.defra.gov.uk/environment/economics/appraisal/
+http://www.defra.gov.uk/environment/energy/heca95/
+http://www.defra.gov.uk/environment/energy/heca95/circulars/fpguide.htm
+http://www.defra.gov.uk/environment/energy/hees/
+http://www.defra.gov.uk/environment/rcep/21/05.htm
+http://www.defra.gov.uk/farm/capreform/singlepay/natreserve/
+http://www.defra.gov.uk/farm/organic/actionplan/
+http://www.defra.gov.uk/fish/sea/fleet/
+http://www.defra.gov.uk/foodrin/poultry/legislation.htm
+http://www.defra.gov.uk/hort/Bees/Health/
+http://www.defra.gov.uk/news/latest/2003/poland.htm
+http://www.defra.gov.uk/rural/hunting/hunting_qa_g.htm
+http://www.defra.gov.uk/rural/ruralwp/regional/west_midlands.htm
+http://www.defra.gov.uk/wildlife-countryside/cl/circular/
+http://www.defra.gov.uk/wildlife-countryside/issues/public/
+http://www.defrancostraining.com/articles/archive/articles_t-mag_promaker.htm
+http://www.deftone.com/blogzilla/archives/stuff_my_wife_will_never_use_in_mozilla.html
+http://www.degreechk.com/help/demo.html
+http://www.deh.gov.au/biodiversity/threatened/publications/recovery/abbotts-booby/actions.html
+http://www.deh.gov.au/biodiversity/threatened/publications/tap/phytophthora/appendixa.html
+http://www.deh.gov.au/coasts/pollution/dumping/guidelines/overview2.html
+http://www.deh.gov.au/discussion-groups/public/environment-news/msg00099.html
+http://www.deh.gov.au/erin/cyplus/lup/chapter4.html
+http://www.deh.gov.au/heritage/worldheritage/sites/kakadu/
+http://www.deh.gov.au/industry/waste/elv/chapter6.html
+http://www.deh.gov.au/minister/env/2003/tr03jul03.html
+http://www.deh.gov.au/minister/env/2003/tr15dec03.html
+http://www.deh.gov.au/minister/env/2005/tr14feb05.html
+http://www.deh.gov.au/minister/env/97/sp31may97.html
+http://www.deh.gov.au/minister/env/97/sp9jul97.html
+http://www.deh.gov.au/minister/ps/97/mc26nov97_fenner.html
+http://www.deh.gov.au/parks/kakadu/artculture/art/nourlangie.html
+http://www.dekay.org/blog/archives/2005/04/
+http://www.delafont.com/Jugglers/E/Passing-Zone.htm
+http://www.delafont.com/Jugglers/passing-zone.htm
+http://www.delaneychurch.com/
+http://www.delawaregrapevine.com/12-04minner.asp
+http://www.delawareonline.com/primelife/issues/2000/junjuly/cover_story.html
+http://www.delawareonline.com/spark/2005/01/19hotlanta,georgi.html
+http://www.delawarewoman.com/200312/hothothotf.html
+http://www.delawarewoman.com/june99/beauty.html
+http://www.delcode.state.de.us/title15/c021/
+http://www.delcode.state.de.us/title6/c029/
+http://www.delcotimes.com/site/news.cfm?BRD=1675&dept_id=18170&newsid=13722601&PAG=461&rfi=9
+http://www.delcyp.cec.eu.int/en/qa/emmission.htm
+http://www.delind.cec.eu.int/en/features/faqs.htm
+http://www.deliveryourmedia.com/article-audio-primer-3.html
+http://www.delnet.com/org/csingers/aboutcast.htm
+http://www.deloitte.com/dtt/article/0,1002,cid%253D69660%2526pre%253DY%2526lid%253D1%2526new%253DU,00.html
+http://www.deloitte.com/dtt/article/0,1002,sid%253D2240%2526cid%253D50344,00.html
+http://www.deloitte.com/dtt/press_release/0,1014,sid%253D1018%2526cid%253D28769,00.html
+http://www.delorie.com/gnu/docs/make/make_131.html
+http://www.delorme.com/bluelogger/order.asp
+http://www.delphiforfun.org/Programs/ChickenCrossing.htm
+http://www.delphion.com/help/workfiles
+http://www.delsolstores.com/scripts/shopplus.cgi?DN=delsolstores.com&CARTID=141104273589425&ACTION=action&FILE=/html/rugcare.html
+http://www.delta.edu/rdhoag/
+http://www.deltablues.net/nell2.html
+http://www.deltadiscovery.com/teddykitchen/teddykitch.html
+http://www.deltadiscovery.com/tundrateachtale/tundrateach.html
+http://www.deltafire.ca/Xmas_Tree.htm
+http://www.deltanewsweb.com/archives/september2003.htm
+http://www.deltasociety.org/dsc060.htm
+http://www.deltasociety.org/nsdc/alertv06n03.htm
+http://www.deltek.com/deltekweb.asp?id=477
+http://www.deltur.cec.eu.int/english/e-g-acquiscommunautaire07_3.html
+http://www.delush.com/q_and_a/
+http://www.dem.state.az.us/calendar/wc01200502s.html
+http://www.demensionszine.com/stories/0605s7.html
+http://www.demingcenter.com/html_files/the_center/the_center_bios.htm
+http://www.demko.com/m001014.htm
+http://www.democ.uci.edu/courses/hdk03.htm
+http://www.democracy.ru/english/quotes.php
+http://www.democracycellproject.net/blog/archives/2005/06/congress_shoots.html
+http://www.democracyctr.org/blog/2005_01_01_democracyctr_archive.html
+http://www.democracyforcalifornia.com/blog/archives/000142.html
+http://www.democracyforcalifornia.com/cgi-bin/mt-mojo.cgi?entry_id=780
+http://www.democracymeansyou.com/articles/article.php?ID=144
+http://www.democracynow.org/article.pl?sid=03/04/07/0216217
+http://www.democracynow.org/article.pl?sid=03/04/07/0216217&mode=thread&tid=5
+http://www.democracynow.org/article.pl?sid=04/07/14/1410247
+http://www.democracynow.org/article.pl?sid=04/11/11/1540235
+http://www.democracynow.org/static/ny_model.shtml
+http://www.democratandchronicle.com/apps/pbcs.dll/article?AID=/20050612/NEWS01/506120344/-1/ARCHIVE7
+http://www.democratictalkradio.com/demvoices-03-calif-gop-scandals.html
+http://www.democraticunderground.com/articles/05/04/13_radical.html
+http://www.democraticunderground.com/discuss/duboard.php?az=show_mesg&forum=104&topic_id=2871575&mesg_id=2871575
+http://www.democraticunderground.com/discuss/duboard.php?az=view_all&address=203x15567
+http://www.democraticunderground.com/top10/
+http://www.democraticunderground.com/top10/04/168.html
+http://www.democrats.com/display.cfm?id=157
+http://www.democrats.com/node/4926
+http://www.democrats.com/node/4978
+http://www.democrats.com/node/5043
+http://www.democrats.org.au/speeches/?speech_id=278&display=1
+http://www.demon-tweeks.co.uk/help/default.asp?category_id=4
+http://www.demos.co.uk/
+http://www.demos.co.uk/aboutus/internships/
+http://www.demosondemand.com/dod/feat_cont/gsp/index.aspx
+http://www.demosondemand.com/dod/proddemos/frontend/fed_arms.aspx
+http://www.demuynck.org/feature/mop/task2.html
+http://www.denbighshire.gov.uk/LL/LifeLong.nsf/0/9D8DD5D760C64ED880256FAB00590837?OpenDocument
+http://www.dendy.com.au/
+http://www.deneysreitz.co.za/news/news.asp?ThisCat=2&ThisItem=522
+http://www.denholmvillage.co.uk/19thcentury.htm
+http://www.denic.de/en/bedingungen.html
+http://www.denic.de/en_1/bedingungen.html
+http://www.deniskitchen.com/Merchant2/merchant.mv?Screen=PROD&Store_Code=S&Product_Code=BP_KSP.212
+http://www.deniskitchen.com/docs/TMCM.Bushmiller.html
+http://www.denison.edu/student-affairs/handbook/harassmentprohibited.html
+http://www.dennishensley.com/Press_TalkingPictures.htm
+http://www.denniskennedy.com/archives/cat_legal_technology.html
+http://www.denniskyne.com/Military%20Intervention.htm
+http://www.dennislocorriere.com/tour-dates.htm
+http://www.dennisprager.com/showTapes.html?id=04-03
+http://www.dennisyang.com/archive/2005/04/
+http://www.dent.ohio-state.edu/Outreach/Geriatric_Dental_Program.htm
+http://www.dent.unimelb.edu.au/dsweb/continuing_dev/location_parking.html
+http://www.dentalfearcentral.com/
+http://www.dentalfearcentral.com/dental_phobia_websites.html
+http://www.dentalgentlecare.com/oral_cancer_disease.htm
+http://www.dentalgentlecare.com/playsafe.htm
+http://www.denveraudubon.org/calendar.htm
+http://www.denverbroncos.com/page.php?id=334&storyID=3751
+http://www.denverbroncos.com/page.php?id=334&storyID=3832
+http://www.denverbroncos.com/page.php?id=609&videoID=392
+http://www.denverbrown.com/union.html
+http://www.denvergov.com/GamePlan/template21667.asp
+http://www.denvergov.org/MOEDIT/moed.asp?section=business&page=dus&category_id=1
+http://www.denvergov.org/Moedit/moed.asp?section=business&page=dus&category_id=1
+http://www.denvergov.org/Police/template310226.asp
+http://www.denvergov.org/moedit/moed.asp?section=business&page=dus&category_id=1
+http://www.denverhealth.org/TraumaCenter/Polyheme.aspx
+http://www.denverpost.com/Stories/0,1413,36%257E33%257E2463919,00.html
+http://www.denverseminary.edu/dj/articles2004/0100/0102.php
+http://www.denvervisualstudio.net/
+http://www.denverzoo.org/conservation/conservation.htm
+http://www.dep.org.uk/resources/Race/RaceTeachbks.htm
+http://www.dep.state.fl.us/lands/invaspec/2ndlevpgs/faq.htm
+http://www.dep.state.pa.us/dep/counties/york/Land_Recycling_Program.htm
+http://www.depandagifts.com/33teacstay11.html
+http://www.departments.bucknell.edu/career_dev/prelaw/academicprep.shtml
+http://www.departments.dsu.edu/disted/orientation/tips.htm
+http://www.depauw.edu/news/index.asp?id=13057
+http://www.depauw.edu/sfs/backissues/3/huntington3art.htm
+http://www.depravityscale.org/depravity1.htm
+http://www.depression2.tv/nwo/archives/000018.html
+http://www.depressioncenter.net/depressiontest/
+http://www.depts.drew.edu/jhc/eisenman.html
+http://www.deq.state.or.us/wmc/solwaste/moa11b.html
+http://www.deq.state.or.us/wmc/tank/hotfaqs.htm
+http://www.dequinix.com/a/perfect.php
+http://www.der.org/resources/curriculum-guide-for-film.html
+http://www.derby.ac.uk/prospectus/ugprospectus/coursedetails.asp?Id=373
+http://www.derbyarboretum.co.uk/visitors.htm
+http://www.derbymanagement.com/knowledge/pages/creating/winning.html
+http://www.derbymanagement.com/knowledge/pages/tactics/managing.html
+http://www.derbyshireuk.net/cromford.html
+http://www.derbyshireuk.net/shardlow.html
+http://www.dere-street.com/archives/retail/index.php
+http://www.derelictstudios.net/cta/
+http://www.deremilitari.org/resources/ARTICLES/eltis.htm
+http://www.derickrethans.nl/20021230.php
+http://www.derivativesstrategy.com/magazine/archive/1995-1996/0496test.asp
+http://www.dermstore.com/list_100110-300019ipp500.htm
+http://www.derrittmeister.com/navy.htm
+http://www.derrittmeister.com/robpost.htm
+http://www.dervala.net/archives/000021.html
+http://www.dervala.net/archives/000628.html
+http://www.dervala.net/archives/000671.html
+http://www.desales.edu/default.aspx?pageid=1436
+http://www.descend.com.au/newsletter/2003912912.htm
+http://www.desertskycommunications.com/bulletin-spring2000.html
+http://www.desertsunonline.com/
+http://www.desertsunonline.com/apps/pbcs.dll/frontpage?date=20050131
+http://www.desertusa.com/utfield/utfield.html
+http://www.design-council.org.uk/webdav/servlet/XRM?Page/@id=6003&Session/@id=D_jm42q4dtLEgw2wCTU9AK&Document/@id=3666
+http://www.design-council.org.uk/webdav/servlet/XRM?Page/@id=6011&Session/@id=D_jm42q4dtLEgw2wCTU9AK&Section/@id=1240
+http://www.design-council.org.uk/webdav/servlet/XRM?Page/@id=6046&Session/@id=D_jm42q4dtLEgw2wCTU9AK&Document%5B@id%3D5185%5D/Chapter/@id=3
+http://www.design-council.org.uk/webdav/servlet/XRM?Page/@id=6048&Session/@id=D_jm42q4dtLEgw2wCTU9AK&Document/@id=4690
+http://www.design-publications.co.uk/mike_carver.htm
+http://www.design.iastate.edu/LABS/
+http://www.designaddict.com/design_shop/index.cfm/fuseaction/amazon_list/scope_id/1/scopes_group_id/1/key/COUNTRY/index.cfm
+http://www.designawards.com.au/ADA/INFO/APPLICATION-FORM/APPLICATION-FORM.HTM
+http://www.designawards.com.au/ADA/INFO/APPLICATION-FORM/APPLICATION-FORM.HTM?type=print
+http://www.designboom.com/eng/funclub/designnow.html
+http://www.designbyfire.com/000068.html
+http://www.designbyfire.com/000099.html
+http://www.designbyfire.com/000111.html
+http://www.designbyfire.com/cat_everything.html
+http://www.designbyfire.com/index.xml
+http://www.designchambers.com/wolfhound/
+http://www.designcouncil.info/webdav/servlet/XRM?Page/@id=6048&Session/@id=D_UWask62umMwh2doBlmuC&Document/@id=4690
+http://www.designcouncil.org.uk/webdav/servlet/XRM?Page/@id=6003&Session/@id=D_5AFlTvf705tL9HUtNzYb&Document/@id=5033
+http://www.designcouncil.org.uk/webdav/servlet/XRM?Page/@id=6011&Session/@id=D_QRul95zO1CmOfkaTdaiW&Section/@id=1240
+http://www.designcouncil.org.uk/webdav/servlet/XRM?Page/@id=6046&Session/@id=D_5AFlTvf705tL9HUtNzYb&Document%5B@id%3D5185%5D/Chapter/@id=3
+http://www.designcouncil.org.uk/webdav/servlet/XRM?Page/@id=6048&Session/@id=D_5kVgHuOXLhTfO9T5X06q&Document/@id=4690
+http://www.designcouncil.org.uk/webdav/servlet/XRM?Page/@id=6048&Session/@id=D_QRul95zO1CmOfkaTdaiW&Document/@id=4690
+http://www.designcrux.netfirms.com/trouble_with_information.html
+http://www.designcutters.com/dog-feeders.htm
+http://www.designfor21st.org/pg.cfm?nid=saturday&l=en
+http://www.designinference.com/documents/2003.02.Miller_Response.htm
+http://www.designingforlearning.info/services/writing/conrad.htm
+http://www.designlab-chicago.com/Sales/New%20Sales/Lighting%20Effects.htm
+http://www.designmuseum.org/design/index.php?id=103
+http://www.designmuseum.org/designerex/eileen-gray.htm
+http://www.designnews.com/article/CA130002.html
+http://www.designnews.com/article/CA610462.html
+http://www.designobserver.com/
+http://www.designobserver.com/archives/000121.html
+http://www.designobserver.com/archives/000159.html
+http://www.designobserver.com/archives/000216.html
+http://www.designobserver.com/archives/000883.html
+http://www.designobserver.com/archives/002161.html
+http://www.designobserver.com/archives/002917.html
+http://www.designobserver.com/archives/003459.html
+http://www.designshare.com/Research/Boney/Renovation2.htm
+http://www.designshare.com/Research/Taylor/Taylor_Programming_3.htm
+http://www.designshare.com/Research/Wolff/Project_Learning.htm
+http://www.designtaxi.com/privacypolicy.jsp
+http://www.designthatmatters.org/field-journal/archives/week_2003_08_10.html
+http://www.designweenie.com/blog/
+http://www.designweenie.com/blog/index.php/category/5
+http://www.desiringgod.org/library/biographies/02wilberforce.html
+http://www.desitunes4u.com/Album_Reviews_Get_Ready_Get_Set.htm
+http://www.deskeng.com/Articles/Applications/Making-the-Right-Connection-Can-Lower-Costs-20041001126.html
+http://www.deskeng.com/Articles/Applications/Reducing-Wind-Fatigue-and-Summer-Headaches-20041201213.html
+http://www.deskeng.com/Articles/Cover-Story/Solid-Edge-16:-As-Good-as-the-Previous-Updates?-2004090162.html
+http://www.deskeng.com/index.php?option=content&task=view&id=213
+http://www.deskeng.com/index.php?option=content&task=view&id=62&Itemid=80
+http://www.desktoplinux.com/articles/AT2779208064.html
+http://www.desktoppipeline.com/trends/163703039
+http://www.desmoinesregister.com/apps/pbcs.dll/article?AID=/20050607/OPINION01/506070357/1035/OPINION
+http://www.dest.gov.au/Ministers/Media/Nelson/2003/10/n485141003.asp
+http://www.dest.gov.au/Ministers/Media/Nelson/2004/04/n693300404.asp
+http://www.dest.gov.au/Ministers/Media/Nelson/2004/12/n1022071204.asp
+http://www.dest.gov.au/archive/publications/annual_reports/9697/web/01vol2.htm
+http://www.dest.gov.au/ministers/nelson/jul_03/aim.htm
+http://www.dest.gov.au/schools/recap/section4/nsw.htm
+http://www.destination-scotland.com/activities/regionactivities.asp?region=14
+http://www.destination-scotland.com/activities/water_sports.asp
+http://www.destinationcrm.com/articles/default.asp?ArticleID=1018
+http://www.destinationcrm.com/articles/default.asp?ArticleID=3160&TopicID=9
+http://www.destinationcrm.com/articles/default.asp?ArticleID=5031
+http://www.destinationfootball.net/mainsite/fullStory.aspx?pg=1&newsURL=/competitions/UCL/News/index,newsId=274199.html&country=
+http://www.destinationpartners.com/maritime_park.htm
+http://www.destroy-all-monsters.com/yoshiinterview.shtml
+http://www.det.vic.gov.au/det/about/corpplan/context.htm
+http://www.det.wa.edu.au/connectedlearning/presenters_concurrent_presenters.html
+http://www.dethorpe.demon.co.uk/
+http://www.detnews.com/
+http://www.detnews.com/2002/specialreport/0211/03/a01-629401.htm
+http://www.detnews.com/2003/autosinsider/0309/17/autos-271166.htm
+http://www.detnews.com/2003/autosinsider/0309/21/a01-275770.htm
+http://www.detnews.com/2003/schools/0310/28/a03-309820.htm
+http://www.detnews.com/2003/technology/0307/23/technology-224829.htm
+http://www.detnews.com/2004/autosinsider/0410/12/autos-298236.htm
+http://www.detnews.com/2004/health/0411/29/health-17165.htm
+http://www.detnews.com/2004/health/0412/03/health-17165.htm
+http://www.detnews.com/2004/metro/0412/19/metro-36349.htm
+http://www.detnews.com/2004/specialreport/0403/11/a01-84173.htm
+http://www.detnews.com/2004/specialreport/0403/18/a01-84173.htm
+http://www.detnews.com/2004/technology/0407/12/technology-206044.htm
+http://www.detnews.com/2005/autosconsumer/0501/14/G01-57578.htm
+http://www.detnews.com/2005/autosconsumer/0501/19/G01-57578.htm
+http://www.detnews.com/2005/autosconsumer/0501/23/G01-57578.htm
+http://www.detnews.com/2005/autosconsumer/0501/24/G01-57578.htm
+http://www.detnews.com/2005/autosinsider/0502/03/C01-78397.htm
+http://www.detnews.com/2005/eatsdrinks/0501/24/E03-67911.htm
+http://www.detnews.com/2005/eatsdrinks/0501/28/E03-67911.htm
+http://www.detnews.com/2005/screens/0501/29/E01-72609.htm
+http://www.detnews.com/2005/screens/0502/04/E01-79149.htm
+http://www.detnews.com/2005/technology/0501/04/B01-47391.htm
+http://www.detnews.com/2005/wings/0502/03/F01-78778.htm
+http://www.detnews.com/2005/wings/0502/05/F01-78778.htm
+http://www.detnews.com/2005/wings/0502/06/F01-78778.htm
+http://www.detnews.com/autosconsumer/
+http://www.detoxamin.com/index.asp?pgid=1134
+http://www.detrick.army.mil/cutting_edge/index.cfm?chapter=chapter9
+http://www.detroitkidshow.com/Maureen_Bailey.htm
+http://www.detroitnewspapers.com/deathnotices/displaytext.cfm
+http://www.detroitnewspapers.com/deathnotices/displaytext.cfm?PageNum_get_records=2&keyword=&month=a&perpage=10&day=a&year=a&action=today
+http://www.detto.com/learningcenter/MLCTOTMjune2003.htm
+http://www.detzner.com/answrcop.htm
+http://www.deusex-machina.com/
+http://www.deutschakademie.com/learn-german-courses/Service-AGB.htm
+http://www.deutsche-welle.de/dw/article/0,1564,1414195,00.html
+http://www.devarticles.com/c/a/JavaScript/Suggest-As-You-Type
+http://www.devarticles.com/c/a/JavaScript/Suggest-As-You-Type/
+http://www.devarticles.com/c/b/Web-Design-Standards/
+http://www.develop.com/whidbey
+http://www.developer.com/design/article.php/1593811
+http://www.developer.com/java/other/article.php/627001
+http://www.developer.com/tech/article.php/3306771
+http://www.developer.com/tech/article.php/606241
+http://www.developerfusion.co.uk/csharp/206/
+http://www.developerfusion.co.uk/scripts/print.aspx?id=13
+http://www.developerfusion.co.uk/show/13/3/
+http://www.developerfusion.co.uk/show/4665/
+http://www.developerfusion.co.uk/show/4665/1/
+http://www.developerfusion.co.uk/show/4693/
+http://www.developerfusion.com/show/4665/
+http://www.developeriq.com/articles/view_article.php?id=422
+http://www.developerpipeline.com/59300711
+http://www.developingteachers.com/tips/currenttip.htm
+http://www.development.uwaterloo.ca/ways/grad_gift_progs.html
+http://www.developmentaldisability.org/ChallengesFacingParents.htm
+http://www.developmentinpractice.org/abstracts/vol12/edv12n3guest.htm
+http://www.developmentinpractice.org/readers/Learning%20Org/intro%20essay.htm
+http://www.developments.org.uk/data/issue28/indian-lunch.htm
+http://www.developreneurs.com/all/SC/Cottageville.html
+http://www.developreneurs.com/all/SC/Ehrhardt.html
+http://www.devereonline.co.uk/interactive/subscribe/
+http://www.devereux1.org/books/books.php?id=2162&type=de
+http://www.devguru.com/features/tutorials/AdvancedSQL/advancedSQL.html
+http://www.deviantart.com/
+http://www.deviantart.com/deviation/14480396/
+http://www.deviantart.com/deviation/18984262/
+http://www.deviantart.com/deviation/3491437/
+http://www.deviceforge.com/articles/AT5785815397.html
+http://www.devicelink.com/mddi/archive/03/01/004.html
+http://www.devicelink.com/mddi/archive/03/08/013.html
+http://www.devicelink.com/pmpn/archive/00/01/003.html
+http://www.devicelink.com/pmpn/archive/00/08/004.html
+http://www.devin.com/jg.php3
+http://www.devmaster.net/articles/particle_systems/
+http://www.devon-calling.com/touring%20devon/se-devon.htm
+http://www.devonfarms.co.uk/links.htm
+http://www.devpsy.org/teaching/method/confirmation_bias.html
+http://www.devsource.com/article2/0,1759,1777534,00.asp
+http://www.devunit.gov.ms/budget/2004/budget2004.htm
+http://www.devvy.com/200306031651.html
+http://www.devvy.com/notax.html
+http://www.devweek.com/speakers/
+http://www.devx.com/amd/Article/20555
+http://www.devx.com/dotnet/Article/10921
+http://www.devx.com/dotnet/Article/10921/1763
+http://www.devx.com/getHelpOn/10MinuteSolution/20332/1763
+http://www.devx.com/getHelpOn/10MinuteSolution/20547
+http://www.devx.com/getHelpOn/10MinuteSolution/20547/1763
+http://www.devx.com/ibmpervasive/Article/22148
+http://www.devx.com/ibmpervasive/Article/22148/1763
+http://www.devx.com/opensource/Article/11839/0/page/2
+http://www.devx.com/opensource/Article/11839/1763/page/2
+http://www.devx.com/opensource/Article/11839/1954?pf=true
+http://www.devx.com/opinion/Article/26776/1954?pf=true
+http://www.devx.com/wireless/Article/21452/1954?pf=true
+http://www.dewitt.wramc.amedd.army.mil/News/FAQs.htm
+http://www.dewitt.wramc.amedd.army.mil/Patinfo_ns/appointment.htm
+http://www.dexterdyne.org/302.HTM
+http://www.dexterity.com/aargon-deluxe/
+http://www.dexterity.com/dweep/
+http://www.dfa.gov.za/docs/speeches/2003/zuma1008.htm
+http://www.dfa.ns.ca/dial1003.html
+http://www.dfait-maeci.gc.ca/arms/gov_report-en.asp
+http://www.dfait-maeci.gc.ca/arms/moens/a_eurocopter-en.asp
+http://www.dfait-maeci.gc.ca/arms/westdal2-en.asp
+http://www.dfait-maeci.gc.ca/arts/visual-en.asp
+http://www.dfait-maeci.gc.ca/cfsi-icse/cil-cai/inter-source/cc-en.asp?iso=ps
+http://www.dfait-maeci.gc.ca/cfsi-icse/cil-cai/inter-source/cc-en.asp?iso=sl
+http://www.dfait-maeci.gc.ca/cip-pic/current_discussions/group-en.asp?topic_id=34&bnum=2
+http://www.dfait-maeci.gc.ca/cip-pic/ips/ips-overview2-en.asp
+http://www.dfait-maeci.gc.ca/ciw-cdm/Archer-en.asp
+http://www.dfait-maeci.gc.ca/department/history/canada4-en.asp
+http://www.dfait-maeci.gc.ca/department/history/dcer/details-en.asp?intRefid=6060
+http://www.dfait-maeci.gc.ca/nafta-alena/nafta5_section07-en.asp
+http://www.dfait-maeci.gc.ca/tna-nac/prev-stories-en.asp
+http://www.dfat.gov.au/aib/competitive_economy.html
+http://www.dfat.gov.au/environment/climate/
+http://www.dfat.gov.au/geo/fyrom/fyrom_brief.html
+http://www.dfat.gov.au/media/transcripts/1999/990907_downer_timor_3aw.html
+http://www.dfat.gov.au/media/transcripts/2000/000531_vaile.html
+http://www.dfat.gov.au/media/transcripts/2000/000605_mvt_apecdarwin.html
+http://www.dfat.gov.au/media/transcripts/2000/000606_darwin0630.html
+http://www.dfat.gov.au/media/transcripts/2002/020513_t_geneva.html
+http://www.dfat.gov.au/media/transcripts/2002/020531_t_mex_apec.html
+http://www.dfat.gov.au/media/transcripts/2003/031029_doorstop_sydney.html
+http://www.dfat.gov.au/trade/negotiations/environment/fisheries_subsidies.html
+http://www.dfat.gov.au/trade/negotiations/us_fta/outcomes/02_key_outcomes.html
+http://www.dfcint.com/game_article/2001highlght.html
+http://www.dfes.gov.uk/achievingsuccess/chap1.shtml
+http://www.dfes.gov.uk/alevelreport/
+http://www.dfes.gov.uk/choiceprotects/bulletins/issue2.shtml
+http://www.dfes.gov.uk/curriculum_literacy/access/physical/
+http://www.dfes.gov.uk/dfee/heqe/lmi_ies4.htm
+http://www.dfes.gov.uk/indpartnerships/partnerships/chapters1.shtml
+http://www.dfes.gov.uk/listeningtolearn/
+http://www.dfes.gov.uk/pns/DisplayPN.cgi?pn_id=2001_0129
+http://www.dfes.gov.uk/pns/DisplayPN.cgi?pn_id=2004_0093
+http://www.dfes.gov.uk/pns/DisplayPN.cgi?pn_id=2005_0053
+http://www.dfes.gov.uk/publications/
+http://www.dfes.gov.uk/qualityprotects/work_pro/project_9.shtml
+http://www.dfes.gov.uk/studentsupport/eustudents/pos_postgraduate_st_1.shtml
+http://www.dfg.de/en/news/press_releases/2005/press_release_2005_20.html
+http://www.dfg.de/raumtransportsysteme/einsatz_4_e.html
+http://www.dfglondon.com/training/training_terms.php
+http://www.dfi.wa.gov/cu/bulletins2005.htm
+http://www.dfki.uni-kl.de/~miller/no-word
+http://www.dfo-mpo.gc.ca/canwaters-eauxcan/infocentre/legislation-lois/policies/fhm-policy/chap5_e.asp
+http://www.dfo-mpo.gc.ca/communic/fish_man/ardmp/ardmp-pvqra_e.htm
+http://www.dfpni.gov.uk/economics_division/general/recruitmentandcareerdev.htm
+http://www.dfr.state.nc.us/fire_control/fire_glossary.htm
+http://www.dft.gov.uk/stellent/groups/dft_about/documents/page/dft_about_022067-10.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_about/documents/page/dft_about_031274.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_about/documents/page/dft_about_034404.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_foi/documents/page/dft_foi_507544-04.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_024869-06.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_028957-02.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_028957.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_503229-04.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_503240.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_mobility/documents/page/dft_mobility_503284.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_rdsafety/documents/page/dft_rdsafety_028165-08.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_roads/documents/page/dft_roads_022762.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_roads/documents/page/dft_roads_029787.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_roads/documents/page/dft_roads_038153.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_science/documents/page/dft_science_504480-10.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_susttravel/documents/page/dft_susttravel_503984-02.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_susttravel/documents/page/dft_susttravel_504071-02.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_susttravel/documents/page/dft_susttravel_504076-10.hcsp
+http://www.dft.gov.uk/stellent/groups/dft_susttravel/documents/page/dft_susttravel_504078-15.hcsp
+http://www.dfw.state.or.us/ODFWhtml/InfoCntrFish/FRIMAout.htm
+http://www.dfw.state.or.us/agency/commission/minutes/05/May/index.asp
+http://www.dfwonline.org/resources-grantwritingtips.asp
+http://www.dfwpest.com/
+http://www.dfwpugs.com/health.html
+http://www.dg.dial.pipex.com/plowden17b.shtml
+http://www.dg.dial.pipex.com/plowdenore01.shtml
+http://www.dgp.utoronto.ca/~rudy/mushroom.html
+http://www.dgs.edu.hk/
+http://www.dh.gov.uk/PolicyAndGuidance/HealthAndSocialCareTopics/BloodSafety/DVT/DVTArticle/fs/en?CONTENT_ID=4071438&chk=2OT7NG
+http://www.dh.gov.uk/PolicyAndGuidance/HealthAndSocialCareTopics/CJD/fs/en
+http://www.dh.gov.uk/PolicyAndGuidance/HealthAndSocialCareTopics/FiveADay/FiveADayGeneralInformation/FiveADayGeneralArticle/fs/en?CONTENT_ID=4002343&chk=6XTIfl
+http://www.dh.gov.uk/PolicyAndGuidance/HealthAndSocialCareTopics/Genetics/GeneticsGeneralInformation/GeneticsGeneralArticle/fs/en?CONTENT_ID=4071376&chk=Lhdf9a
+http://www.dh.gov.uk/PolicyAndGuidance/HealthAndSocialCareTopics/LongTermConditions/fs/en
+http://www.dh.gov.uk/PolicyAndGuidance/HumanResourcesAndTraining/NationalTaskforceOnViolence/SelfAuditTool/SelfAuditToolArticle/fs/en?CONTENT_ID=4073881&chk=QVdeAq
+http://www.dh.gov.uk/PublicationsAndStatistics/PressReleases/PressReleasesNotices/fs/en?CONTENT_ID=4111988&chk=PumBe6
+http://www.dh.gov.uk/PublicationsAndStatistics/PressReleases/PressReleasesNotices/fs/en?CONTENT_ID=4113558&chk=gQA8K6
+http://www.dh.gov.uk/PublicationsAndStatistics/Publications/AnnualReports/DHAnnualReportBrowsableDocument/fs/en?CONTENT_ID=4097707&amp;MULTIPAGE_ID=4921426&amp;chk=9cnIbi
+http://www.dh.gov.uk/PublicationsAndStatistics/Publications/PublicationsStatistics/PublicationsStatisticsArticle/fs/en?CONTENT_ID=4111548&chk=sPWTda
+http://www.dh.gov.uk/PublicationsAndStatistics/PublishedSurvey/NationalSurveyOfNHSPatients/NationalSurveyInpatients/NationalSurveyInpatientsArticle/fs/en?CONTENT_ID=4016444&chk=dVFdy3
+http://www.dha.gov.au/dhacontent.asp?menuid=472
+http://www.dha.gov.au/dhacontent.asp?menuid=482
+http://www.dharma-talks.com/
+http://www.dharmacentral.com/faq.htm
+http://www.dharmafish.org/s1018/stuff_show.htm?content_id=3453
+http://www.dharmalife.com/issue26/playing.html
+http://www.dharmamind.net/Archive5.htm
+http://www.dhcd.state.md.us/hidp/index.asp
+http://www.dhhs.state.sc.us/InsideDHHS/Bureaus/BureauofSeniorServices/service1038532003.htm
+http://www.dhn-online.org/freeIssue/cholesterol.html
+http://www.dhp2.com/color/written_general06.shtml
+http://www.dhs.ca.gov/lnc/default.htm
+http://www.dhs.gov/dhspublic/display?content=3870
+http://www.dhs.gov/dhspublic/display?content=3934
+http://www.dhs.gov/dhspublic/display?content=4153
+http://www.dhs.gov/dhspublic/display?content=4246
+http://www.dhs.gov/dhspublic/display?content=490
+http://www.dhs.state.il.us/ts/fss/IL444-2378B(Text).html
+http://www.dhs.state.ri.us/dhs/famchild/dcspgm.htm
+http://www.dhs.vic.gov.au/ahs/archive/nap/biblio7.htm
+http://www.dhushara.com/book/hieros/hieros.htm
+http://www.dhushara.com/book/sci/sexdeth.htm
+http://www.dhyanapeetam.org/Teachings.asp
+http://www.diabetes.fi/english/programme/programme/chapter11.htm
+http://www.diabetes.org.uk/apc/
+http://www.diabetes.org.uk/balance/191/191ladychamp.htm
+http://www.diabetes.org.uk/research/grants/types.htm
+http://www.diabetes.org/type-1-diabetes/smoking.jsp
+http://www.diabetesindia.com/diabetes/diabetes_sdict.htm
+http://www.diabetesinsipidus.org/pets_di_in_bestfriends.htm
+http://www.diabetesmonitor.com/b245.htm
+http://www.diabetesmonitor.com/pima10.htm
+http://www.diabetesnet.com/diabetes_control_tips/hypoglycemia_unawareness.php
+http://www.diabetesportal.com/teentalk/articles/ronan.htm
+http://www.diabetesselfmanagement.com/article.cfm?sid=1&tid=24&stid=44&aid=107&sk=5WZ2
+http://www.diabetic-lifestyle.com/articles/may98_trave_1.htm
+http://www.diabetic-recipes.com/cat_vegetables.htm
+http://www.diabetic.com/newsletter/archives/April2001/index.asp
+http://www.diablogrande.com/winegallery/reception-details.htm
+http://www.diag.org.uk/
+http://www.diagnose-me.com/cond/C47895.html
+http://www.diahome.org/docs/Journal/Journal_author_information.cfm
+http://www.diakrisis.org/messages_15.htm
+http://www.dialdesign.com.au/about.html
+http://www.dialog.com/
+http://www.dialog.inwent.org/en/rub_20020219180527/artikel_20050116164158.html?print=1
+http://www.dialspace.dial.pipex.com/town/terrace/adw03/peel/chartism/o'conmod.htm
+http://www.diamondblog.com/archives/cat_science.html
+http://www.diamondregistry.com/jewel.htm
+http://www.diamondtalk.com/forums/showthread.php?t=47297&pagenumber=3
+http://www.diamondtalk.com/forums/showthread.php?t=47297&pagenumber=9
+http://www.diamondway-buddhism.org/terms/au-signs.htm
+http://www.diana-east.co.uk/frametuition.htm
+http://www.dianaewald.com/
+http://www.dianefarrisgallery.com/artist/chihuly/garfield/
+http://www.dianemiddlebrook.com/tipton/btexcerpt.html
+http://www.diapozytyw.pl/en/site/slady_i_judaica/kazimierz_dolny
+http://www.dickbaldwin.com/python/Pyth0001.htm
+http://www.dickens-literature.com/Bleak_House/33.html
+http://www.dickeybetts.com/
+http://www.dickgregory.com/dick/web_of_lies_.html
+http://www.dickinson.edu/departments/polcy/styles.html
+http://www.dickinson.edu/nectfl/workshops05.html
+http://www.dickinson.edu/prorg/nectfl/workshops05.html
+http://www.dicksonrealty.com/
+http://www.dictionary.net/free
+http://www.didata.com.au/ourclients/clientstory.asp?ctID=262
+http://www.didjshop.com/affiliates/affiliate_FAQs.html
+http://www.diduknow.info/docks/access/dock_history12.html
+http://www.diecast.org/diecast98/html/asp/faq/faq.asp
+http://www.diem.dk/english/diem/digdance/movement.php
+http://www.dier.tas.gov.au/publications/annualre/workplace_standards.html
+http://www.dieselnet.com/tech/fuel_alt.html
+http://www.dieselpage.com/art0500rf.htm
+http://www.diet-i.com/carb-intake.htm
+http://www.diet-step.com/comingsoon.html
+http://www.dieteticintern.com/distance/trendstechnology.htm
+http://www.dietitian.com/choleste.html
+http://www.dietitian.com/fertility.html
+http://www.dietitian.com/general.html
+http://www.dietitian.com/salt.html
+http://www.dietotenhosen.de/en/alldieganzenjahre_interviews_studio.php
+http://www.dietpower.com/getslimslippers.htm
+http://www.dietpower.com/help/diet/exercise_dictionary_1.htm
+http://www.differentstrings.info/archives/2002/09/science_and_the.html
+http://www.difu.de/publikationen/dfk/en/02_2/02_2_kodolitsch.shtml
+http://www.difu.de/publikationen/dfk/en/04_1/04_1_koziol.shtml
+http://www.dig.wroc.pl/en/102/
+http://www.diggerhistory.info/pages-badges/qualification.htm
+http://www.diggerhistory.info/pages-battles/ww1/anzac/timeline.htm
+http://www.diggerhistory.info/pages-battles/ww1/france/yank.htm
+http://www.diggerhistory.info/pages-battles/ww2/maroubra.htm
+http://www.diggers.org/kaliflower/dtf.htm
+http://www.digi-darkroom.com/archive/index.php/t-10527.html
+http://www.digidesign.com/news/details.cfm?story_id=1161
+http://www.digihitch.com/amazonroad-0375509127.html
+http://www.digihitch.com/amazonroad-B00005N7OS.html
+http://www.digihitch.com/ftopic-2305-0.html
+http://www.digihitch.com/ftopicp-14369.html
+http://www.digihitch.com/ftopict-2305.html
+http://www.digilearnonline.com/first_time.asp
+http://www.digiserve.com/eescape/closet/pratchett/Johnny-and-the-Dead.html
+http://www.digiserve.com/eescape/closet/silly/50-Reasons-Jedi-Sucks.html
+http://www.digiserve.com/er/episodes/season5/er509cn.html
+http://www.digiserve.com/er/faq/node9.html
+http://www.digiserve.com/peter/blues.htm
+http://www.digit-life.com/articles2/video/dx-update.html
+http://www.digit-life.com/forum/0004/000191.html
+http://www.digital-copyright.ca/node/view/818
+http://www.digital-teacher.com/homepage/userguide/chapter12.htm
+http://www.digital-tutors.com/forums/showthread.php?threadid=5949
+http://www.digital-web.com/articles/completely_rethinking_the_web
+http://www.digital-web.com/articles/completely_rethinking_the_web/
+http://www.digital-web.com/articles/computer_based_music_production_on_a_budget/
+http://www.digital-web.com/articles/how_to_write_effective_mailing_list_email/
+http://www.digital-web.com/articles/peter_morville_and_lou_rosenfeld/
+http://www.digital-web.com/features/feature_2002-09.shtml
+http://www.digital-web.com/tutorials/tutorial_2002-08.shtml
+http://www.digitalbrain.com/roztru/web/AF/George%20Orwell.db_psc
+http://www.digitalcenter.org/webreport95/history.htm
+http://www.digitaldeck.com/2.2_company_investors.htm
+http://www.digitaldivide.net/articles/view.php?ArticleID=32
+http://www.digitaldivide.net/articles/view.php?ArticleID=70
+http://www.digitaleconomist.com/as_4020.html
+http://www.digitaleconomist.com/intro_4020.html
+http://www.digitaleconomist.com/ms_4020.html
+http://www.digitaledge.org/monthly/2001_06/primer.html
+http://www.digitalfire.ab.ca/cermat/education/45.html
+http://www.digitalgovernment.org/news/stories/2004/1004/1004_ctg_heyman.jsp
+http://www.digitalguestlist.com/media-tjchapman.shtml
+http://www.digitalhistory.uh.edu/modules/coming_civilwar/index.cfm
+http://www.digitaljesters.com/forums/showthread.php?t=2675&goto=nextoldest
+http://www.digitaljournalist.org/issue0005/burnett.htm
+http://www.digitaljournalist.org/issue0110/drew.htm
+http://www.digitaljournalist.org/issue0111/biggart_intro.htm
+http://www.digitaljournalist.org/issue0412/faas-reuters.html
+http://www.digitalmaidstone.co.uk/councils/wkendfreighter.php
+http://www.digitalmedievalist.com/faqs/taliesin.html
+http://www.digitalmonkeybox.com/star_wars_the_phantom_menace.htm
+http://www.digitalmusicnews.com/yesterday/march2005
+http://www.digitalnaturopath.com/cond/C3441.html
+http://www.digitalnorseman.com/healing/archive/2004_02_22_hvarchive
+http://www.digitalnpq.org/global_services/global%20viewpoint/04-20-04.html
+http://www.digitalnpq.org/global_services/global_ec_viewpoint/05-15-01.html
+http://www.digitaloutput.net/content/ContentCT.asp?P=199
+http://www.digitaloutput.net/content/ContentCT.asp?P=53
+http://www.digitalpersona.com/support/custServ/endUserLicense.html
+http://www.digitalpersona.com/terms.html
+http://www.digitalpreservation.gov/formats/content/video_quality.shtml
+http://www.digitalproducer.com/articles/viewarticle.jsp?id=28807
+http://www.digitalproducer.com/articles/viewarticle.jsp?id=7408
+http://www.digitalscrapbookplace.com/shop/Albums/index.shtml
+http://www.digitalspace.com/content/atmosphere/2003/fitsfu/chatlogs/
+http://www.digitalspeech.org/bpdg.shtml
+http://www.digitalspy.co.uk/article/ds16735.html
+http://www.digitalspy.co.uk/tv/beontv/
+http://www.digitaltelevision.com/articles/article_865.shtml
+http://www.digitaltermpapers.com/c4405.htm
+http://www.digitalthreads.com/rada/engr.html
+http://www.digitalvillage.com.au/DiscountInvestment/glossary/glossarybody.htm
+http://www.digitas.harvard.edu/~wdbridge/about.php
+http://www.digitecoptical.com/tele-meade-lxseries-comparison.htm
+http://www.digiwis.com/dwi_ugp5.htm
+http://www.digsmagazine.com/host/host_kickback.htm
+http://www.dillonadopt.com/orphanCare/
+http://www.dilmahtea.com/faq.asp
+http://www.dimacc.com/cdproj.shtml
+http://www.dimensionsmagazine.com/dimtext/Barbers/morphing.html
+http://www.dinesletter.com/mastercourse.html
+http://www.dinf.ne.jp/doc/english/Us_Eu/ada_e/ada/ada_preamble.htm
+http://www.dinf.ne.jp/doc/english/global/david/dwe001/dwe00107.htm
+http://www.dinoridge.org/news_Feb_2004.htm
+http://www.dinovite.com/supplement-tips.html
+http://www.dinsdoc.com/greene-3-18.htm
+http://www.dioala.org/
+http://www.diobeth.org/Bishop/Secular/sec51.html
+http://www.diocal.org/
+http://www.dioceseofcleveland.org/hispanicministry/what's%20happening.htm
+http://www.dioceseofgaylord.org/inside/called-by-god-9/
+http://www.diocesereport.com/rose_m/castro_idiot.shtml
+http://www.diolex.org/advocate/0212/021211t.htm
+http://www.diplom.org/Zine/S1995M/Nelson/Latest.html
+http://www.diplomatie.be/en/press/homedetails.asp?TEXTID=5377
+http://www.diplomatie.gouv.fr/label_france/46/gb/06.html
+http://www.diplomatie.gouv.fr/label_france/49/gb/07.html
+http://www.diploweb.com/english/russia/laughland1.htm
+http://www.diploweb.com/p27.htm
+http://www.dippyrecords.com/Trades/trades-ns.htm
+http://www.dir.ca.gov/oshab/decisions/sweatheart_final.htm
+http://www.dir.ie/interest/Drowsey%20Driving.htm
+http://www.dir.qld.gov.au/privacy.htm
+http://www.dir.qld.gov.au/privacy/faqs/
+http://www.dir.state.tx.us/dir_overview/main/012401minutes.htm
+http://www.dir.state.tx.us/dir_overview/main/022002minutes.htm
+http://www.dir.state.tx.us/dir_overview/main/100401minutes.htm
+http://www.dircsa.org.au/docs/anorex.htm
+http://www.direct-golf.co.uk/
+http://www.direct-golf.co.uk/product/product.asp?product_ID=1464
+http://www.direct-golf.co.uk/product/product.asp?product_ID=278
+http://www.direct-golf.co.uk/product/sections/sections.asp?search_product_type=3
+http://www.direct-golf.co.uk/product/sections/sections.asp?search_product_type=3&pagenum=2
+http://www.direct-golf.co.uk/proshops/ladies.asp
+http://www.direct-golf.co.uk/proshops/newProduct.asp
+http://www.direct-golf.co.uk/sale/index.asp?search_product_type=3
+http://www.direct-golf.co.uk/static/contact/contact.asp
+http://www.direct.gov.uk/Audiences/DisabledPeople/Rights/YourRights/RightsArticle/fs/en?CONTENT_ID=4001076&chk=s9%2BC8q
+http://www.direct.gov.uk/MoneyTaxAndBenefits/PensionsAndRetirement/FinancialPlanningForRetirement/FinancialPlanningArticles/fs/en?CONTENT_ID=10014579&amp;chk=5o6VcJ
+http://www.direct.gov.uk/MoneyTaxAndBenefits/Taxes/InheritanceTaxEstatesAndTrusts/InheritanceTaxArticles/fs/en?CONTENT_ID=10010612&amp;chk=9Tm0VZ
+http://www.direct.gov.uk/Topics/Learning/Glossary/fs/en?CONTENT_ID=4017681&chk=VnhxEI
+http://www.direct.gov.uk/Topics/Learning/Glossary/fs/en?CONTENT_ID=4017696&chk=OEYyQ/
+http://www.direct.gov.uk/Topics/Motoring/CarDrivers/CarDriversInformation/fs/en?CONTENT_ID=4016323&chk=6yLSgW
+http://www.directadvisers.com.au/Financial%20Planning%20FSG.htm
+http://www.directcareclearinghouse.org/l_additions.jsp
+http://www.directessays.com/viewpaper/61035.html
+http://www.directessays.com/viewpaper/96566.html
+http://www.directionjournal.com/spirituality/rumme.htm
+http://www.directionjournal.org/article/?1032
+http://www.directionjournal.org/article/?764
+http://www.directionsmag.com/article.php?article_id=306
+http://www.directionsmag.com/blog/
+http://www.directionsmag.com/blog/archives/200506.html
+http://www.directlyhome.com/contemporary-platform.html
+http://www.directlyhome.com/crawford.html
+http://www.directmag.com/columns/marketing_state_union/
+http://www.directmag.com/mag/marketing_new_blood_finding/
+http://www.directmag.com/mag/marketing_swiss_clinique_terrifique/
+http://www.directmarketingcenter.com/
+http://www.directmarketingcenter.net/
+http://www.directory.co.uk/History_Of_Mobile_Phones.htm
+http://www.directoryofschools.com/auto-mechanic-school.htm
+http://www.directrelief.org/sections/our_work/asia_earthquake.html
+http://www.directron.com/clearance.html
+http://www.directron.com/clearpc.html
+http://www.directron.com/systems-customized-systems.html
+http://www.directron.com/systems.html
+http://www.directwatch.com/Bagpipe/directory/pipe-band.html
+http://www.directwatch.com/SPDADirectoryGenerator/directory/bagpipe-history-scottish.html
+http://www.directwatch.com/SPDADirectoryGenerator/directory/kilt-pattern-scottish.html
+http://www.directwatch.com/SPDADirectoryGenerator/directory/scottish-culture.html
+http://www.directwatch.com/SPDADirectoryGenerator/directory/scottish-play.html
+http://www.dirfile.com/freeware/cellular.htm
+http://www.dirfile.com/freeware/free-mortgage-software.htm
+http://www.dirfile.com/freeware/light.htm
+http://www.dirfile.com/freeware/players.htm
+http://www.dirfile.com/freeware/pressure.htm
+http://www.dirtyfighting.com/
+http://www.disability.gov.uk/campaigns/regs_final.html
+http://www.disability.gov.uk/legislation/ddb/response.asp
+http://www.disabilitycentral.com.au/disAbilityCentral/about.asp
+http://www.disabilitycentral.com/activteen/camp/camp_art_01.htm
+http://www.disabilitycentral.com/activteen/magazine/news_views/news_views.htm
+http://www.disabilitycentral.com/world/special_thoughts.htm
+http://www.disabilityisnatural.com/book.htm
+http://www.disabilitysupplies.co.uk/acatalog/tv_listening_equipment.html
+http://www.disabilitytax.ca/subs/ldac-e.html
+http://www.disabilityworld.org/11-12_02/gov/lagadien.shtml
+http://www.disablejobsite.co.uk/accessible/pro_showvacancy.php/JobID=1882
+http://www.disablejobsite.co.uk/pro_showvacancy.php/JobID=1882
+http://www.disasteraction.org.uk/support/da_guide06.htm
+http://www.disasteraction.org.uk/support/da_guide06p.htm
+http://www.disastereducation.org/guide.html
+http://www.disasterscharter.org/charter_e.html
+http://www.disasterwarning.com/DWN_21_CENTURY.htm
+http://www.disciples.org/ccu/documents/dialpapmorr.htm
+http://www.disciplescross.com/
+http://www.disciplescross.com/index.asp?PageAction=Custom&ID=23
+http://www.disclosureproject.org/responses.htm
+http://www.disco-disco.com/labels/tkdisco.html
+http://www.discount-body-building-supplements.com/m1p.html
+http://www.discount-tickets.us/disney-wide-world-of-sports/disney-wide-world-of-sports.htm
+http://www.discountart.com/store/grumbacher-max-oils.html
+http://www.discountart.com/store/grumbacher-pretest-oils.html
+http://www.discountart.com/store/rembrandtoilcolor.html
+http://www.discountcoffee.com/Catalog.htm
+http://www.discountpetmedicines.com/pet-products.htm
+http://www.discourse.net/archives/2004/06/apologia_pro_tormento_analyzing_the_first_56_pages_of_the_walker_working_group_report_aka_the_torture_memo.html
+http://www.discourse.net/archives/2005/01/how_to_deal_with_this_classroom_situation.html
+http://www.discourse.net/archives/2005/04/those_shirts_are_looking_mighty_brown_sir.html
+http://www.discourse.net/mt/mt-comments.cgi?entry_id=2188
+http://www.discourses.ca/v2n1a4.html
+http://www.discover.com/web-exclusives-archive/world-wide-mind-meld0408/
+http://www.discover.tased.edu.au/english/stand.htm
+http://www.discoverabroad.com/US/LivingAbroad/careers/StepstoTake.htm
+http://www.discovergames.com/Tales2.html
+http://www.discoveringfossils.co.uk/gettingstarted.htm
+http://www.discoveringmontana.com/doa/gsd/procurement/centralstoresprogram.asp
+http://www.discoverjamaica.com/gleaner/discover/tour_ja/tour11.htm
+http://www.discovernorthernireland.com/product.aspx?ProductID=7448
+http://www.discoverohio.com/search/results.asp?From=CategoryDrill&ID=98
+http://www.discoverourtown.com/TownPage.php?Town=3347&Cat=Shopping
+http://www.discoverparis.net/newsletter.html
+http://www.discoversimcoe.com/MappingHelp.cfm
+http://www.discovervancouver.com/forum/topic.asp?TOPIC_ID=4231
+http://www.discovervancouver.com/forum/topic.asp?TOPIC_ID=9323
+http://www.discoverwest.com.au/hotels/country-club-hotel-kununurra-8381.html
+http://www.discovery.org/scripts/viewDB/index.php?command=view&id=2670&program=CSC%20-%20Views%20and%20News
+http://www.discovery.org/scripts/viewDB/index.php?command=view&program=CSC-News&id=2274
+http://www.discovery.org/scripts/viewDB/index.php?command=view&program=Misc&id=1148
+http://www.discoveryfund.org/auction_update.html
+http://www.discoveryinitiatives.co.uk/articleschimp.asp
+http://www.discoveryinitiatives.co.uk/oman.asp
+http://www.discoveryourpersonality.com/newsletter14.html
+http://www.discoverytools.com/
+http://www.discriminations.us/storage/002534.html
+http://www.discriminations.us/storage/003134.html
+http://www.discussanything.com/forums/archive/index.php/t-68557.html
+http://www.discussbodybuilding.com/Another_question/m_34792/tm.htm
+http://www.discussbodybuilding.com/fb.asp?m=34977
+http://www.disinfo.com/archive/pages/article/id1728/pg1/
+http://www.disinfo.com/archive/pages/dossier/id356/pg1/
+http://www.disinfo.com/site/displayarticle1843.html
+http://www.disinfo.com/site/displayarticle7613.html
+http://www.disinfotainmenttoday.com/issue96.htm
+http://www.dislam.org/love/approvable.html
+http://www.dislam.org/science/universe_physics.html
+http://www.disney.ca/vacations/disneyworld/VIIII/magical.html
+http://www.dispatch.com/
+http://www.dispatchesfromfrance.blogspot.com/
+http://www.dissectionchoice.org/
+http://www.dissentmagazine.org/menutest/articles/fa04/brook.htm
+http://www.dissidentvoice.org/Articles/Nader_TitleIX.htm
+http://www.dissidentvoice.org/Nov2004/Berkowitz1125.htm
+http://www.dissidentvoice.org/Nov2004/Reichel1118.htm
+http://www.dissidentvoice.org/Sept04/Petersen0901.htm
+http://www.dissociation.co.uk/links.htm
+http://www.distantcousin.com/Cemetery/PA/Berks/LongswampUnion/
+http://www.distributiondrive.com/Article7.html
+http://www.district.north-van.bc.ca/article.asp?c=126
+http://www.district76.org/int_rules.html
+http://www.district87.org/
+http://www.districtadministration.com/page.cfm?p=611
+http://www.districtadministration.com/page.cfm?p=761
+http://www.districtadministration.com/page.cfm?p=762
+http://www.districtadministration.com/page.cfm?p=811
+http://www.districtenergy.com/CurrentActivities/
+http://www.dit.ie/DIT/graduate/ethics/
+http://www.dit.ie/DIT/news/perspectives/jmolloy.html
+http://www.ditchley.co.uk/news/arms01-01.htm
+http://www.ditd.org/Cybersource/record.aspx?sid=11333&scat=902&stype=110
+http://www.dititu.dk/page103.html
+http://www.divasthesite.com/Society_Divas/ann_woodward_a.htm
+http://www.divatribe.com/articles/coleman_resolutions.shtml
+http://www.diverdiver.com/2002_10_16_diverdiver_archive.html
+http://www.diversitas-international.org/news_events_calendar.html
+http://www.diversityatwork.com/news/jul00/code_sa.html
+http://www.diversitycareers.com/articles/pro/octnov02/mng_martin.htm
+http://www.diversitynow.ca/features/article.jsp?content=20041102_085628_3172&sec=MYSTORY
+http://www.diversityweb.org/Digest/Sp01/mediawatch.html
+http://www.diversityweb.org/diversity_innovations/curriculum_change/advanced_courses_pluralism/ethnic_id_intergroup.cfm
+http://www.diveweb.com/commdive/features/mayjune2000.03.htm
+http://www.diveweb.com/commdive/index.shtml
+http://www.dividedbypolitics.com/fear.htm
+http://www.divine-heart.org/how-to-pick-healer.html
+http://www.divinestra.com/profess01.html
+http://www.division42.org/PublicArea/Info_Public/Info_You_Can_Use/heller_infertility.html
+http://www.divisionoflabour.com/
+http://www.divorce.co.uk/legal/englandwales/legalcloserlook/questions/freqaskquestions.htm
+http://www.divorceaid.co.uk/emotional/HELP/
+http://www.divorceaid.co.uk/emotional/tell-spouse.htm
+http://www.divorceaid.co.uk/financial/settlement.htm
+http://www.divorceaid.co.uk/legal/short-term.htm
+http://www.divorcehelp.com/faq.html
+http://www.divorcehelp.com/shortcourse/C23.html
+http://www.divorceinfo.com/standardvisitation.htm
+http://www.divorcekit.com/memory.htm
+http://www.divorcenet.com/divorcenet_2/states/new_york/military_divorce_and_pensions
+http://www.divorcenet.com/filing/states/minnesota/divorce_toppling_12_myths
+http://www.divorcenet.com/states/colorado/co_art09
+http://www.divorcenet.com/states/maryland/mdart_14
+http://www.divorcenet.com/states/massachusetts/the_financial_affidavit
+http://www.divorcenet.com/states/minnesota/divorce_toppling_12_myths
+http://www.divorcenet.com/states/nationwide/checklist
+http://www.divorcenet.com/states/nationwide/checklist/view
+http://www.divorcenet.com/states/nationwide/the_walkaway_wife_syndrome
+http://www.divorcenet.com/states/new_jersey/njart27/view
+http://www.divorcenet.com/states/new_york/military_divorce_and_pensions
+http://www.divorcenet.com/states/new_york/nyart11
+http://www.divorcenet.com/states/new_york/nyart11/view
+http://www.divorcenet.com/states/new_york/nyart17
+http://www.divorcesource.com/book/categories/mediation.shtml
+http://www.dix.army.mil/PAO/Post02/post091302/pattack.htm
+http://www.dixiesappers.org/hhc/journal/june/june_07.html
+http://www.diygames.com/index.php?p=907&more=1
+http://www.diynet.com/diy/fc_brick/article/0,2037,DIY_13810_2277756,00.html
+http://www.diynet.com/diy/fv_maintenance/article/0,2029,DIY_13825_2273061,00.html
+http://www.diynet.com/diy/gf_types/article/0,2029,DIY_13837_2270427,00.html
+http://www.diynet.com/diy/he_diagnostics/article/0,2037,DIY_13893_2274799,00.html
+http://www.diynet.com/diy/hi_bathrooms/article/0,2037,DIY_13903_3239951,00.html
+http://www.diynet.com/diy/ll_chandeliers/article/0,2041,DIY_14048_2275288,00.html
+http://www.diynet.com/diy/programdaily/0,2019,DIY_14196_2-28-2005_EST,00.html
+http://www.diynet.com/diy/sc_techniques/article/0,2025,DIY_14232_2275010,00.html
+http://www.diynet.com/diy/shows_cds/article/0,2045,DIY_15079_2499051,00.html
+http://www.diynet.com/diy/shows_dqoc/0,2044,DIY_16163,00.html
+http://www.diynet.com/diy/ww_other/article/0,2049,DIY_14443_2492380,00.html
+http://www.diynetwork.com/diy/hi_outdoor_structures/article/0,2037,DIY_13927_2370969,00.html
+http://www.diynetwork.com/diy/os_activities/article/0,2033,DIY_14149_2271261,00.html
+http://www.dizbeaux.net/erin/fiction/lancewentdowntogeorgiaremix.html
+http://www.djamkaret.com/reviews.php
+http://www.djangomontreal.com/doc/djangobooks.htm
+http://www.djangomusic.com/item_movie.asp?dt=53&id=V+++249603
+http://www.djc.com/news/re/11119158.html
+http://www.djdchronology.com/irisguardian011202.htm
+http://www.djmgr.com/public/license_agreement.htm
+http://www.djrhythms.com/db/lb/promoonly/u-radio-1996-01.htm
+http://www.djroger.com/berry%20culture.htm
+http://www.djsource.co.uk/forums/archive/t-17535.html
+http://www.djsource.co.uk/forums/archive/t-19737.html
+http://www.djsource.co.uk/forums/archive/t-30560.html
+http://www.djsource.co.uk/forums/showthread.php?goto=lastpost&t=19737
+http://www.djsource.co.uk/forums/showthread.php?t=19737
+http://www.djspooky.com/articles/kutculture.html
+http://www.djurdjevic.com/Bulletins2002/09(IBM-Insiders).html
+http://www.dkeithrobinson.com/asterisk/archive/2004/08/successful-blog
+http://www.dkeithrobinson.com/asterisk/archive/2004/09/mt-31-impressions
+http://www.dkosopedia.com/index.php/Paul_Dundes_Wolfowitz
+http://www.dkosopedia.com/index.php/Paul_Wolfowitz
+http://www.dksg.org/mia.htm
+http://www.dla.mil/Dimensions/Septoct99/Y2k%20news.htm
+http://www.dla.mil/j-3/a-76/A-76Guidebook29May04AppendA.html
+http://www.dlapiper.com/us/firm/probono.aspx
+http://www.dli.state.pa.us/landi/cwp/browse.asp?A=3&tx=1
+http://www.dli.state.pa.us/landi/cwp/view.asp?a=152%7CQ=59265%7ClandiPNavCtr=%7C905%7C@2010
+http://www.dli.state.pa.us/landi/site/default.asp
+http://www.dlia.org/atbi/science/ex_sum_2004_awards.shtml
+http://www.dlib.org/dlib/february98/arms/02arms.html
+http://www.dlib.org/dlib/january02/berthon/01berthon.html
+http://www.dlib.org/dlib/june04/king/06king.html
+http://www.dlib.org/dlib/june05/lee/06lee.html
+http://www.dlib.org/dlib/may03/authors/05authors.html
+http://www.dlib.org/dlib/october01/garrison/10garrison.html
+http://www.dlib.org/dlib/september02/galloway/09galloway.html
+http://www.dlib.org/dlib/september04/providenti/09providenti.html
+http://www.dlink.com/corporate/news/pr040728.asp
+http://www.dllr.state.md.us/whatsnews/whatsnews.htm
+http://www.dlncoalition.org/dln_issues/2003may10bernard.htm
+http://www.dlnets.com/mctft_20May04.htm
+http://www.dlscouts.ie/scot2002.html
+http://www.dltk-kids.com/rhymes/princessandfrog/mprincessbag.htm
+http://www.dltk-teach.com/rhymes/princessandfrog/mprincessbag.htm
+http://www.dlynnwaldron.com/South_Africa.html
+http://www.dmaconsumers.org/consumerassistance.html
+http://www.dmcityview.com/main.asp?SectionID=12&SubSectionID=73&BrowseClass=1&Category=1000&SubCategory=1000
+http://www.dmeb2.org/authors/redone/ms6.html
+http://www.dmeurope.com/default.asp?ArticleID=2738
+http://www.dmeurope.com/default.asp?ArticleID=7504
+http://www.dmhall.co.uk/news_year_2002.asp
+http://www.dmi.org/dmi/html/publications/news/ebulletin/may04ebulletin.htm
+http://www.dmm.org.uk/colliery/w003.htm
+http://www.dmnforums.com/cgi-bin/displaywwugpost.fcgi?forum=cinema4d&post=050510122123.htm
+http://www.dmreview.com/article_sub.cfm?articleID=1019956
+http://www.dmreview.com/article_sub.cfm?articleID=8222
+http://www.dmreview.com/article_sub.cfm?articleId=1003792
+http://www.dmreview.com/article_sub.cfm?articleId=1012404
+http://www.dmreview.com/article_sub.cfm?articleId=1014146
+http://www.dmreview.com/article_sub.cfm?articleId=1016310
+http://www.dmreview.com/article_sub.cfm?articleId=1016478
+http://www.dmreview.com/article_sub.cfm?articleId=1023911
+http://www.dmreview.com/article_sub.cfm?articleId=1024526
+http://www.dmreview.com/article_sub.cfm?articleId=2553
+http://www.dmreview.com/article_sub.cfm?articleId=4625
+http://www.dmreview.com/article_sub.cfm?articleId=5346
+http://www.dmreview.com/article_sub.cfm?articleId=5891
+http://www.dmreview.com/master.cfm?NavID=55&EdID=7915
+http://www.dmulawsociety.btinternet.co.uk/mooting/midland_comp/midlandscompformat.html
+http://www.dmv.ca.gov/faq/genfaq.htm
+http://www.dmvnv.com/namechange.htm
+http://www.dmxzone.com/go?8200
+http://www.dmxzone.com/go?9167
+http://www.dnaperfection.com/pages/4/page4.html?refresh=1116971491449
+http://www.dnd.ca/somalia/vol4/v4c29e.htm
+http://www.dnd.ca/somalia/vol4/v4c31e.htm
+http://www.dndresources.com/index.php/articles/89
+http://www.dndresources.com/index.php/articles/c122/
+http://www.dnjournal.com/archive/deardomey-archive.htm
+http://www.dnr.state.ak.us/ssd/recoff/default.htm
+http://www.dnr.state.md.us/bay/protect/home.html
+http://www.dnr.state.md.us/humanresources/careers/onlinecareer.htm
+http://www.dnr.state.md.us/wildlife/furbearermgt.asp
+http://www.dnr.state.md.us/wildlife/home4turkeys.asp
+http://www.dnr.state.md.us/wildlife/wthunting/index.asp
+http://www.dnr.state.mn.us/canoeing/straightriver/
+http://www.dnr.state.mn.us/forestry/fire/dangerrating.html
+http://www.dnr.state.mn.us/fwt/back_issues/march98/mcbs.html
+http://www.dnr.state.mn.us/volunteer/julaug02/firewise.html
+http://www.dnr.state.mn.us/volunteer/novdec97/tdeer.html
+http://www.dnr.state.mn.us/young_naturalists/deer/
+http://www.dnr.state.mo.us/concern.htm
+http://www.dnr.state.oh.us/dnap/location/smith_cemetery.html
+http://www.dnr.state.oh.us/parks/parks/clevelkf.htm
+http://www.dnr.state.oh.us/policy/PerformanceReviewProcedure.htm
+http://www.dnr.state.sc.us/cec/news/apr0901.html
+http://www.dnr.state.sc.us/climate/sercc/education/saer/aer_fall_97.html
+http://www.dnr.state.sc.us/marine/pub/seascience/jellyfi.html
+http://www.dnr.state.wi.us/org/caer/ce/news/on/
+http://www.dnr.state.wi.us/org/land/wildlife/whealth/issues/CWD/askscott1_05.htm
+http://www.dnsstuff.com/
+http://www.dnye.co.uk/stock.shtml
+http://www.dnzb.govt.nz/dnzb/Find_Quick.asp?PersonEssay=4B6
+http://www.dnzone.com/go?48
+http://www.doa.state.wi.us/docs_view2.asp?docid=2604
+http://www.doacs.state.fl.us/ai/main/equine_ecard.shtml
+http://www.dobbertinhydrocar.com/Orbiter%20Magazine%20Quotes.htm
+http://www.dobkin.com/content/Articles/CreatingSuccessfulSalesLetters.asp
+http://www.dobkin.com/content/articles/SimpleObjectiveOfAMarketingCampaign.asp
+http://www.doc.govt.nz/Conservation/003~Weeds/south-island-wilding-conifer-strategy/001~The-Wilding-Conifer-Problem/2.2-Characteristics-of-Wilding-Conifer-Spread.asp
+http://www.doc.ic.ac.uk/~dcw/
+http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol2/aa18/article2.html
+http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html
+http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/mssa/
+http://www.doceo.co.uk/original/learnloss_1.htm
+http://www.doceo.com/bday%20script.htm
+http://www.docep.wa.gov.au/lr/LabourRelations/Content/Work%20Life%20Balance/Pay%20Equity/Pages/History%20of%20Women%20in%20.html
+http://www.docfilm.com/mexfilms/tepoz/Resonancia.html
+http://www.docfizzix.com/distance_pics.htm
+http://www.docguide.com/dg.nsf/PrintPrint/BFB7320155978CBD85256F17004A81F7
+http://www.docheritage.state.pa.us/documents/lancasterpetitiontrans.asp
+http://www.docnotes.net/stories/2003/01/26/treatmentOfTheIngrownToenail.html
+http://www.doctechnical.com/fst/notes/fc-cd.htm
+http://www.doctor-hill.com/iol-master/alm.htm
+http://www.doctorbyte.us/datarecoverylevels.htm
+http://www.doctorfloyd.com/pblog/
+http://www.doctorg.com/amazon_products.htm
+http://www.doctorgavin.com/Writing/Fishermans.html
+http://www.doctorsoftheworld.org/common/news/details.cfm?QID=1153&ClientID=11012
+http://www.doctorspiller.com/Dr_Spiller_Biography.htm
+http://www.doctorspiller.com/Root_Canals.htm
+http://www.doctortravel.ca/thrombosis.asp
+http://www.doctronics.co.uk/meter.htm
+http://www.documentary-video.com/displayitem.cfm?vid=1103
+http://www.documentedlife.com/welcome.htm
+http://www.documentsonline.nationalarchives.gov.uk/medals.asp
+http://www.docusearch.com/client_pr.html
+http://www.dod.gov/speeches/1997/s19970806-dalton.html
+http://www.dod.gov/transcripts/2003/tr20030414-secdef0104.html
+http://www.dod.mil/comptroller/icenter/dwcf/gatewaydwcf.htm
+http://www.dod.mil/mapsite/jrspouse.html
+http://www.dod.mil/news/Feb2005/n02242005_2005022402.html
+http://www.dod.mil/news/Mar2005/20050318_240.html
+http://www.dod.mil/transcripts/2004/tr20041208-secdef1761.html
+http://www.dod.mil/transcripts/2005/tr20050207-2104.html
+http://www.dod.mil/transcripts/2005/tr20050614-secdef3041.html
+http://www.dodgestudio.com/
+http://www.dodpi.army.mil/docs/research/97r0003.htm
+http://www.doe.mass.edu/frameworks/foreign/1996/wlpart.html
+http://www.doe.mass.edu/frameworks/scitech/2001/standards/strand4.html
+http://www.doe.state.in.us/olr/archive/infolit/welcome.html
+http://www.dog-play.com/petshop2.html
+http://www.dog.dnr.state.ak.us/oil/products/publications/otherreports/5year99/5year99_og_results.html
+http://www.dogbarter.com/sellerscorner.aspx
+http://www.dogbehaviour.com/behaviourproblems/dogs/yourdog/pullinglead.htm
+http://www.dogclub.co.uk/regions/region-sc.php
+http://www.dogfind.com/apb.asp
+http://www.doggonesafe.com/Become%20a%20Presenter.htm
+http://www.doghouserules.net/
+http://www.doglinks.co.nz/
+http://www.doglinks.co.nz/problems/problems.htm
+http://www.doglogic.com/bloat.htm
+http://www.dogomania.com/names/type/human_names.shtml
+http://www.dogpatch.org/agility/FAQs/faqsho04.html
+http://www.dogplay.com/GettingDog/petshop2.html
+http://www.dogs4sale.com.au/Dog_Names.htm
+http://www.dogscouts.com/clicker.shtml
+http://www.dogsdontbite.com/pages/wisdom.htm
+http://www.dogshome.org/go.rm?id=1118
+http://www.dogshome.org/go.rm?id=494
+http://www.dogshome.org/rehabilitate/behaviour_school/
+http://www.dogster.com/?diary=152196
+http://www.dogstory.net/news_archives_jan_03.htm
+http://www.dogtagsdirect.com/
+http://www.dogthebountyhunter.com/about.html
+http://www.dogtrainersite.com/dogtrainer/becoming-a-dog-trainer.html
+http://www.dogtraining-online.co.uk/
+http://www.dogtrainingblueprint.com/56.html
+http://www.dogtrainingblueprint.com/articles.html
+http://www.dogtulosba.com/archives/cat_hardly_working_is_haaaaaard_work.html
+http://www.doh.gov.za/docs/sp/2004/sp0830.html
+http://www.doh.gov.za/docs/sp/2005/sp0618.html
+http://www.doh.wa.gov/Data/Guidelines/HumanSubjectsguide.htm
+http://www.doh.wa.gov/Hanford/publications/health/working.html
+http://www.doh.wa.gov/Leg/2004_Legup/02_05_04_BillWatch.htm
+http://www.doh.wa.gov/Publicat/2002_News/02-159.htm
+http://www.dohc.ie/publications/fulltext/quality_and_fairness/part3.html
+http://www.dohistory.org/interests/i_teaching.html
+http://www.doi.gov.mt/en/press_releases/2004/03/pr340.asp
+http://www.doi.gov/hrm/pmanager/er9k.html
+http://www.doi.gov/news/finaltfreport.html
+http://www.doi.gov/news/opeds/bend.htm
+http://www.doi.state.id.us/sfm/fm_library.asp
+http://www.doi.vic.gov.au/DOI/Internet/transport.nsf/0/DF597F556E7229C4CA256C1C0017CB91?OpenDocument
+http://www.doit.gmu.edu/portfolio/2004/CS/SCEval04.htm
+http://www.doit.wisc.edu/accessibility/online-course/standards/tables.htm
+http://www.doktorandhandboken.nu/english/after_degree.shtml
+http://www.doktorfrank.com/
+http://www.doktorfrank.com/archives/003166.html
+http://www.dol.gov/dol/allcfr/ESA/Title_29/Part_24/29CFR24.5.htm
+http://www.dol.gov/ebsa/media/congress/20030501_combs_house_approp.htm
+http://www.dol.gov/ebsa/publications/AC_1114b01_report.html
+http://www.dol.gov/esa/regs/compliance/ofccp/directives/dir260.htm
+http://www.dol.gov/esa/regs/compliance/olms/localelec/localelec.htm
+http://www.dol.gov/esa/regs/compliance/owcp/blbenact.html
+http://www.dol.gov/esa/regs/compliance/whd/printpage.asp?REF=whdfs22.htm
+http://www.dol.gov/esa/regs/compliance/whd/whdfs22.htm
+http://www.dol.gov/esa/regs/compliance/whd/whdfs31.htm
+http://www.dol.gov/esa/regs/compliance/whd/whdfs45.htm
+http://www.dol.govt.nz/futureofwork/workforce.asp
+http://www.dol.govt.nz/productivity/whatis/index.asp
+http://www.dol.ks.gov/wcboard/CH8_RES.html
+http://www.dola.state.co.us/doh/Documents/Advances/tenant-l.htm
+http://www.dolacamotorplex.com/rules.htm
+http://www.dole.gov.ph/speeches/speeches2004/nationalconferenceITGLWF_speech.htm
+http://www.dole5aday.com/Grownups/Fun/G_GetKidsToEat5ADay.jsp
+http://www.dole5aday.com/Kids/Friends/K_Peter_Peach.jsp
+http://www.doleta.gov/BRG/
+http://www.doleta.gov/sga/awards/99-008award.cfm
+http://www.dollsntoys.com/liddle.htm
+http://www.dolly-hotel.co.uk/h-a-5063.html
+http://www.dolorouscanter.com/
+http://www.dolphinexplorer.com/tours.html
+http://www.dolphinfreedom.com/d1.html
+http://www.dolphinsfilm.com/Learn/General.htm
+http://www.dolphinuk.co.uk/audio/support/warranty.htm
+http://www.dolphinuk.co.uk/support/warranty_statement.htm
+http://www.dom.com/news/gas2001/pr0104.jsp
+http://www.domain-b.com/organisation/jrd_tata_ecotechnology/20030307_ecology.htm
+http://www.domain.com.au/general/display.aspx?id=HPEp_3Sep04&mode=tvvid
+http://www.domain.com.au/real-estate/VIC/North+East/10.html
+http://www.domain.com.au/real-estate/sydney/unit/48.html
+http://www.domania.com/
+http://www.domeplans.com/text.html
+http://www.domesdaybook.co.uk/william.html
+http://www.domestic-church.com/CONTENT.DCC/19980901/SAINTS/ARCHANGELS.HTM
+http://www.domestic-church.com/CONTENT.DCC/20020101/ESSAY/suffering.htm
+http://www.dominicaninlove.com/latin-girls-49.html
+http://www.dominickeating.com/2005_january.htm
+http://www.domotics.com/homesys/HSpapers/daimlerbenz.htm
+http://www.domtar.com/corporate_section/code_of_ethics/individual_policies/human_rights_policy.asp
+http://www.don-lindsay-archive.org/creation/behe.html
+http://www.don-lindsay-archive.org/creation/denton.html
+http://www.donaghue.org/bio1.htm
+http://www.donaldbaechler.com/info/info.html
+http://www.donaldedavis.com/BM04WEB/Bokstory.html
+http://www.donaldsensing.com/2003_06_01_archive.html
+http://www.donate-blood.com/site2/content/about/blood_supply.asp
+http://www.donatelifeny.org/transplant/murray.html
+http://www.doncaster.gov.uk/Leisure_in_Doncaster/Sports_and_games/Sports_and_leisure_centres/St_James/St_James_Pool_and_Health_Club_-_Prices_2004-05.asp
+http://www.donegalcottageholidays.com/ellyhouse/
+http://www.donegalcottageholidays.com/mountainlodge/
+http://www.donegalcottageholidays.com/thebarn/
+http://www.donegalcottageholidays.com/windyridge/
+http://www.donewaiting.com/
+http://www.donewaiting.com/archives/2005_06.php
+http://www.donewaiting.com/atomicned/
+http://www.donewaiting.com/oh/
+http://www.donhead.com/oldhouse.htm
+http://www.donkeyontheedge.com/2002/10/
+http://www.donlemmon.com/exercise-101-working-out-and-weight-training.html
+http://www.donnunn.com/spiel/2004/01/cnncom_cyanide_.html
+http://www.donquijote.org/english/la/pricelist.courses.asp
+http://www.donquijote.org/english/pricelist.courses.asp
+http://www.dontfretpet.com.au/franchises.php
+http://www.dontronics.com/auto.html
+http://www.dontshake.com/Audience.aspx?categoryID=1&PageName=grandmaspromise.htm
+http://www.dontveter.com/probp/prodoc/example.html
+http://www.dooce.com/
+http://www.dooce.com/archives/daily/07_10_2003.html
+http://www.dooce.com/archives/daily/09_16_2004.html
+http://www.doom9.org/Old_news/august04.htm
+http://www.doom9.org/mpg/ifoedit-dvdauthor.htm
+http://www.dooneyscafe.com/modules.php?op=modload&name=News&file=article&sid=408
+http://www.doors.pe.kr/doors/wainting%20for%20the%20sun/waiting.htm
+http://www.dooyoo.co.uk/archive-electronics/general-comments-2/358918/
+http://www.dooyoo.co.uk/credit-card/marks-spencer-financial-services/1002703/
+http://www.dooyoo.co.uk/discussion/manchester-united-general/1006806/
+http://www.dooyoo.co.uk/garden-furniture/hydropool-hot-tubs/1005653/
+http://www.dooyoo.co.uk/hair-care/futura-hair-styling-irons/reviews/
+http://www.dooyoo.co.uk/hair-care/jerome-russell-hair-colour/reviews/
+http://www.dooyoo.co.uk/mobile-phone/samsung-sgh-a800/reviews/
+http://www.dooyoo.co.uk/multimedia/adobe-audition/1007072/
+http://www.dooyoo.co.uk/pets-and-animals/cocker-spaniels/139982/
+http://www.dooyoo.co.uk/pubs-bars-national/basketmakers-arms/384622/
+http://www.dooyoo.co.uk/transport-international/p-o-north-sea-ferries-1/434590/
+http://www.dooyoo.co.uk/tv-programs/operation-good-guys/
+http://www.dopaminethemovie.com/filmmakers.html
+http://www.dopcampaign.org/action_guide.htm
+http://www.dopcampaign.org/media.htm
+http://www.dor.state.wi.us/faqs/pcs/sales.html
+http://www.doraweiner.org/e_w_report.html
+http://www.dorevillage.co.uk/doretodoorspr05/newsandcomment.htm
+http://www.dorsetforyou.com/index.jsp?articleid=338222
+http://www.dorsethouse.com/books/hire.html
+http://www.dorsey.com/publications/legal_detail.aspx?FlashNavID=pubs_legal&pubid=6618303
+http://www.dos.state.ny.us/lcns/exams/jan-jun2005/esthet.htm
+http://www.dosado.com/articles/hist-callerlab.html
+http://www.dosite.jp/e/do/j-state_infra.html
+http://www.dot-com-alliance.org/newsletter/article.php?article_id=107
+http://www.dot.gov/affairs/shane050905.htm
+http://www.dot.state.ia.us/mvd/ods/
+http://www.dotars.gov.au/localgovt/publications/national_report/01_02/appendix_e/index.aspx
+http://www.dotars.gov.au/terr/xmas/cui/add_port_fac/appendices/app_b.htm
+http://www.dotars.gov.au/terr/xmas/cui/add_port_fac/cui_8.htm
+http://www.dotlessbraille.org/dbnemeth.htm
+http://www.dotnet247.com/247reference/__site/85/2004/3/9
+http://www.dotnetfreak.co.uk/blog/archive/2004/11/06/166.aspx
+http://www.dotpcvc.gov.ph/Packages/Wow-Incentives/wowinc-mla.html
+http://www.dotpcvc.gov.ph/VPY-calendar/vpy-apriljune.html
+http://www.dotrs.gov.au/regional/northern_forum/locations/indian_ocean_territories/christmas_island/first_consult.htm
+http://www.doublezeroproductions.com/loretta.html
+http://www.dougknox.com/xp/tips/xp_bad_search.htm
+http://www.douglasgroup.net/selling_business_art.htm
+http://www.douglasjohnston.net/weblog/archives/2005/05/22/devonthink-attic/
+http://www.douglasknight.org/mambo/content/view/32/38/
+http://www.dountoothers.org/mormonchurchmoney.html
+http://www.doupleinsurance.com/faq.htm
+http://www.dove777.com/
+http://www.dovebid.com/
+http://www.dovebook.com/contact/sellyour.asp
+http://www.dovedale-video-studio.co.uk/titles1.htm
+http://www.dover-web.co.uk/hall_of_fame.asp
+http://www.dover.gov.uk/councillors/key-decisions/home.asp
+http://www.dow.com/dow_news/corporate/2003/20030424b.htm
+http://www.dow.com/dow_news/speeches/20020221_liveris.htm
+http://www.dow.com/dow_news/speeches/20020221a.htm
+http://www.dow.com/merger/pressconf.htm
+http://www.dowagro.com/natreon/resource/faq.htm
+http://www.dowethics.com/r/dow_news/speeches/20021028a.htm
+http://www.downers.us/govt/archives/1998/980511work.html
+http://www.downers.us/govt/archives/1999/990517meet.html
+http://www.downers.us/govt/archives/1999/990621work.html
+http://www.downers.us/govt/archives/2001/010410.htm
+http://www.downes.ca/cgi-bin/website/view.cgi?dbs=Article&key=1012279256
+http://www.downes.ca/cgi-bin/website/view.cgi?dbs=Article&key=964813240
+http://www.downeybrand.com/publications/articles/050118_wrongpremise.php
+http://www.downhillbattle.org/defense/
+http://www.downhillbattle.org/eyes/
+http://www.downhillbattle.org/reasons/
+http://www.downingstreetsays.com/
+http://www.downingstreetsays.org/
+http://www.downingstreetsays.org/archives/000173.html
+http://www.downingstreetsays.org/archives/000209.html
+http://www.downingstreetsays.org/archives/000526.html
+http://www.downingstreetsays.org/archives/000568.html
+http://www.downingstreetsays.org/archives/000619.html
+http://www.downingstreetsays.org/archives/000853.html
+http://www.downingstreetsays.org/archives/001665.html
+http://www.downingstreetsays.org/archives/001685.html
+http://www.downingstreetsays.org/archives/2004_09.html
+http://www.download.com/1200-2001-998542.html
+http://www.download.com/1200-2023-998542.html
+http://www.download.com/3000-2144-10045910.html
+http://www.download.com/3000-2144-10045910.html?part=69274&subj=dlpage&tag=button
+http://www.download.com/3000-8022-10045910.html
+http://www.download.com/3101-2016-0-1.html
+http://www.download.com/Ares-Galaxy/3640-2166_4-10174222.html
+http://www.download.com/CoffeeCup-Free-FTP/3640-2160_4-10287417.html
+http://www.download.com/Spyware-Doctor/3640-8022-10361503.html
+http://www.download.com/Spyware-Doctor/3640-8022_4-10361503.html
+http://www.download2you.com/details_page.asp?titleID=3906
+http://www.download2you.com/details_page.asp?titleID=4590
+http://www.downloadfreetrial.com/employment/amazing-cover-letters-2.html
+http://www.downloadfreetrial.com/family/build-an-automatic-lawn-sprinkler-system.html
+http://www.downloadmagic.com/blog/index.php
+http://www.downtheroad.org/Journals/1BeforeTrip/BikeMovie.htm
+http://www.downtimecentral.com/AboutDowntime.htm
+http://www.downtimecentral.com/Glossary.htm
+http://www.downtown-burbank.org/events.htm
+http://www.downtowndistrict.org/DowntownDistrict/AboutDowntown/WhatstheDifference/
+http://www.downtownexpress.com/de_89/writersspaceopens.html
+http://www.downunderonline.com/
+http://www.doyle.com.au/vikings_in_ireland.htm
+http://www.doylesdartden.com/fruitfly.html
+http://www.doyletics.com/arj/tamrev.htm
+http://www.doyletics.com/arj1revs.htm
+http://www.doyourownpestcontrol.com/mousebait.htm
+http://www.doyourownpestcontrol.com/ratbait.htm
+http://www.doyourownpestcontrol.com/rodcide.htm
+http://www.doyourownpestcontrol.com/rodenticides.htm
+http://www.doyukai.or.jp/en/chairmansmsg/articles/960424.html
+http://www.dpa.ca.gov/collbarg/contract/bu050697.htm
+http://www.dpac.tas.gov.au/divisions/lgo/legislation/LGA%20Review%202002-03/downloads.html
+http://www.dpawson.co.uk/xsl/sect2/N8321.html
+http://www.dpc.ucar.edu/earthscopeVoyager/JVV_Jr/help/helpfeat.html
+http://www.dpent.com/STReportsCat.html
+http://www.dpi.qld.gov.au/animalwelfare/15890.html
+http://www.dpi.qld.gov.au/kids/
+http://www.dpi.qld.gov.au/news/NewsReleases/16771.html
+http://www.dpi.qld.gov.au/pigs/7972.html
+http://www.dpi.vic.gov.au/dse/nrenpa.nsf/FID/-8C3B1A6104EBE3A34A2567CC0001B1B4?OpenDocument
+http://www.dpi.wa.gov.au/licensing/vehcomp/heavy/unit2.html
+http://www.dpmc.govt.nz/cabinet/guide/11a.html
+http://www.dpreview.com/news/0007/00070801psp7beta.asp
+http://www.dpreview.com/news/article_print.asp?date=0007&article=00070801psp7beta
+http://www.dpreview.com/reviews/adobeelements3/
+http://www.dpreview.com/reviews/read_opinion_text.asp?prodkey=oly_c720uz&opinion=12461
+http://www.dps.state.mn.us/patrol/safety/bikesafety/
+http://www.dps61.org/schools/south_shores/k-3%20.htm
+http://www.dqindia.com/dqtop20/2004/artdisp.asp?artid=60650
+http://www.dr-bob.org/babble/psycho/20050129/msgs/453123.html
+http://www.dr-bob.org/tips/maoi.html
+http://www.dr-delgado.com/pro_armlift.html
+http://www.dr1.com/legal/migration/residences.shtml
+http://www.dr1.com/living/customs/11.shtml
+http://www.dr911.com/
+http://www.dra.ie/dublinpact/history.html
+http://www.draaisma.net/rudi/science_cosmology/3-dimensional_time.html
+http://www.drabruzzi.com/taliban_war_on_women.htm
+http://www.draeger.com/HG/internet/AR/en/Anhang/Gewinn_Verlust/erlaeuterungen_guv.jsp
+http://www.dragg.net/jbrown/construc.htm
+http://www.dragon-amazon.net/wilpfaustralia/journal/April2001/Reports%20from%20the%20branches.html
+http://www.dragonflymedia.com/em/em2008/goodfit2008.html
+http://www.dragonlink.co.uk/forums/archive/index.php/t-13152.html
+http://www.dragonscience.com/view/specs.html
+http://www.dragonspiritcomputing.com/internet101.html
+http://www.drakensberg-tourism.com/drakensberg-conference-venues.html
+http://www.dramatec.com/articles/library/a199501001/
+http://www.dramatica.com/theory/theory_faqs/smg/basics.html
+http://www.dramatists.com/cgi-bin/db/single.asp?index=0&key=3126
+http://www.draplin.com/1999/12/
+http://www.draplin.com/2002/05/
+http://www.draplindustries.com/archives/2002/05/
+http://www.draughthorsepress.com/notesonlivinreeltime.html
+http://www.dravard.com/FAQ.htm
+http://www.drawerb.com/features/1058220166.htm
+http://www.drawfluffy.com/facts2.html
+http://www.drbanks.com/thesis/discussion.html
+http://www.drbradley.com/blog/2003/04/
+http://www.drbradley.com/blog/2003/10/
+http://www.drbradley.com/blog/2003/10/she_starts_to_s.html
+http://www.drbradley.com/blog/2004/10/i_know_you_watc.html
+http://www.drbrucegoldberg.com/Exercise1.htm
+http://www.drburnstutor.com/staff.asp
+http://www.drbusch.com/default.html
+http://www.drc-gb.org/askdrc/category/show.asp?id=190
+http://www.drc-gb.org/education/knowyourrights/parentsenglandwales.asp
+http://www.drc-gb.org/newsroom/cehrdetails.asp?id=4
+http://www.drc-gb.org/newsroom/commissionerspeechdetails.asp?id=42
+http://www.drc-gb.org/newsroom/newsdetails.asp?print=true&id=772&section=1
+http://www.drc-gb.org/open4all/publications/campaigndetails.asp?id=398
+http://www.drc-gb.org/publicationsandreports/campaigndetails.asp?print=true&section=access&id=398
+http://www.drc-gb.org/publicationsandreports/campaigndetails.asp?section=access&id=398
+http://www.drc-gb.org/publicationsandreports/campaigndetails.asp?section=oth&id=414
+http://www.drc-gb.org/thelaw/dutyevents.asp
+http://www.drdc-rddc.gc.ca/publications/lfsa/objectives_e.asp
+http://www.drdni.gov.uk/foi/classes_of_info/default.asp?category=Management%20and%20policy%20information
+http://www.drdobbsjournal.com/topics/cpp/compilers/
+http://www.drduru.com/Kim/Kim.html
+http://www.dream-love.com/advice/
+http://www.dreamdoctor.com/romance/stayingpower1.shtml
+http://www.dreamhawk.com/dyd-ch4.htm
+http://www.dreamhawk.com/seitai1.htm
+http://www.dreaminglucid.com/samplewilds.html
+http://www.dreammoods.com/dreamdictionary/c.htm
+http://www.dreamsalivemagazine.com/summer2004/idesign/
+http://www.dreamtheater.net/info_projects.php?s=ayreon
+http://www.dreamtheater.net/news_labrie.php
+http://www.dreamthread.com/spiritdream.html
+http://www.dreamtimevillage.org/faq.html
+http://www.dreddyclinic.com/integrated_med/mercurydetoxification.htm
+http://www.dredf.org/rrn/briefing33.html
+http://www.dredwerkz.com/archive:2005-01-21/13:42:26/
+http://www.dressforsuccess.nl/pagina-7--0000440601.dfs
+http://www.drewbates.com/poetry.htm
+http://www.drexel.edu/doj/artsands/movieview_killbill.asp
+http://www.drexel.edu/doj/fictions/cnf_winner_pritchie_pigroad.asp
+http://www.drexel.edu/doj/myspace/greenberg_losing.asp
+http://www.drfogarty.co.uk/gyn_heavy.html
+http://www.drfogarty.co.uk/gyn_heavy_print.html
+http://www.drgatell.com/wellness.htm
+http://www.drgreene.com/21_1649.html
+http://www.drgreene.com/21_794.html
+http://www.drheller.com/gnration.html
+http://www.drheller.com/tbppangr.html
+http://www.dri.edu/ResearchSupport/techtransferpolicy.htm
+http://www.driftbag.com/saltwater/wave_tamer.shtml
+http://www.drilldr.com/index.php?option=content&task=view&id=196&Itemid=157
+http://www.drilldr.com/index.php?option=content&task=view&id=71&Itemid=95
+http://www.drillers.com/links.cfm
+http://www.drimple.net/
+http://www.drinet.com/seniorshealth.asp
+http://www.drinkanddrugs.net/training/conferences.html
+http://www.drinkboy.com/Cocktails/
+http://www.drinkboy.com/Essays/CocktailOrigins.html
+http://www.drinkboy.com/Essays/CocktailPopularity.html
+http://www.drinkboy.com/Essays/StockingTheBar.html
+http://www.drinkboy.com/press/
+http://www.drinkme.net/dmtext2.html
+http://www.drinkme.net/mayjj04.html
+http://www.drinkstreet.com/searchresults.cgi?drinkid=108&drinkname=category:34
+http://www.drinkstuff.com/comments/
+http://www.drinkstuff.com/products/sale-stuff.asp
+http://www.drirene.com/fighting_rules.htm
+http://www.drive.com.au/buy/finance/tax.aspx
+http://www.driveandstayalive.com/articles%20and%20topics/road%20safety%20overviews/road-safety-past-present-and-future.htm
+http://www.drivecleanacrosstexas.org/for_teachers/grades_k-5/unit2/lesson1.stm
+http://www.drivedemand.com/roimatterspart3.html
+http://www.drivehomesafe.com/
+http://www.drivers.com/article/329/
+http://www.driverzone.com/obb/read.php?TID=886
+http://www.drivingforcemag.com/articles/2003-06-family-matters.html
+http://www.drj.com/forums/lofiversion/index.php/t29.html
+http://www.drjamesanthony.com/procedures.cfm
+http://www.drjanetphd.com/Dr-Janet-guidance.html
+http://www.drjeanette.com/tapes.html
+http://www.drjontry.com/articles/celebration.htm
+http://www.drkaplan.co.uk/art_therapy.htm
+http://www.drkoop.com/encyclopedia/93/135.html
+http://www.drkoop.com/newsdetail/93/519761.html
+http://www.drkoop.com/newsdetail/93/526434.html
+http://www.drlowe.com/emailnewsletter/2003archive2.htm
+http://www.drlowe.com/frf/2004studya/importance.htm
+http://www.drnorthrup.com/health_store-cr-lit.php
+http://www.drnunley.com/123.asp
+http://www.droprightin.co.uk/
+http://www.drownedinsound.com/articles/11234.html
+http://www.drownedinsound.com/articles/11697.html
+http://www.drownedinsound.com/articles/12406.html
+http://www.drownedinsound.com/articles/9822.html
+http://www.drpetra.com/Dogs/Breeding%20&%20Raising%20Puppies.htm
+http://www.drpressman.com/News/news04-05.htm
+http://www.drpribut.com/sports/shoes.html
+http://www.drpribut.com/sports/spshin.html
+http://www.drs.wa.gov/member/publications/pers/pers1returntowork.htm
+http://www.drscience.com/who.htm
+http://www.drthrockmorton.com/article.asp?id=88
+http://www.drudgereport.com/dixie.htm
+http://www.drug-rehabs.org/content.php?cid=263&state=Missouri
+http://www.drugabuse.gov/DrugPages/DrugsofAbuse.html
+http://www.drugabuse.gov/MarijBroch/Marijparentstxt.html
+http://www.drugabuse.gov/NIDA_Notes/NNVol13N6/GoestoSchool.html
+http://www.drugdeliverytech.com/cgi-bin/articles.cgi?idArticle=86
+http://www.drugdigest.org/DD/DVH/Uses/0,3915,1062%7CProcainamide+ER,00.html
+http://www.drugfree.org/Portal/DrugIssue/Research/PATS_Study_2003_-_Teens/Teen_Ecstasy_Use_Leveling_Off_After_Steep_Increas
+http://www.drugfree.org/Portal/Stories/My_Son_Justin
+http://www.drugguide.com/drugOweek.asp?show=dowDetail
+http://www.drughelp.org/intervention/partner.htm
+http://www.druglibrary.org/schaffer/DEBATE/open_letter2.htm
+http://www.druglibrary.org/schaffer/History/kalant.htm
+http://www.druglibrary.org/schaffer/LIBRARY/studies/vlr/vlr8.htm
+http://www.druglibrary.org/schaffer/MISC/Selectivity.html
+http://www.druglibrary.org/schaffer/Misc/driving/s5p5.htm
+http://www.druglibrary.org/schaffer/library/studies/vlr/vlr8.htm
+http://www.drugpolicy.org/
+http://www.drugs.com/PDR/Inderal_LA_Long_Acting_Capsules.html
+http://www.drugs.com/avastin.html
+http://www.drugs.com/data/channel/md/usatoday.cfm?file=nd1935G.htm&ID=1935&type=GI
+http://www.drugs.com/diovan.html
+http://www.drugs.com/medicine/actifed+cold
+http://www.drugs.com/medicine/collagenase
+http://www.drugs.com/morphine.html
+http://www.drugs.com/zyprexa.html
+http://www.drugs.health.gov.au/families/drugs.htm
+http://www.drugscope.org.uk/druginfo/drugsearch/ds_report_results.asp?file=%5Cwip%5C11%5C3%5C004chapter2.html
+http://www.drugscope.org.uk/news_item.asp?a=3&intID=840
+http://www.drugwar.com/byrnedole.shtm
+http://www.druidsofparanor.org/library/gbosch/lesson
+http://www.drunkdrivingdefense.com/publications-articles/intoxilyzer-5000-features.htm
+http://www.drunkenfist.com/oldNews.shtm
+http://www.drvino.net/retailers.php
+http://www.drweil.com/u/QA/QA41143/
+http://www.drwhoguide.com/gallifrey04.htm
+http://www.drwhoguide.com/kennedy.htm
+http://www.drwhoguide.com/sj_05.htm
+http://www.drwnet.com/bfly/colors.htm
+http://www.drwnet.com/bfly/share3.htm
+http://www.drwnet.com/bfly/stories.htm
+http://www.dryburgh.co.uk/cgi-bin/listboard2.pl?thisboard=dryburgh&template=dryburgh
+http://www.dryjapat.com/look.htm
+http://www.ds-invest.co.il/ds-e/pages-t/skira-q499.html
+http://www.dsa.gov.uk/Category.asp?cat=266
+http://www.dsa.org/selling/pyramid.htm
+http://www.dsavoy.com/text/lady_in_red.htm
+http://www.dscr.dla.mil/
+http://www.dscs.state.la.us/progasst/csrules/Chapter5/CHAP5.HTM
+http://www.dsei.co.uk/guidelines/prohibited_weapons.htm
+http://www.dself.dsl.pipex.com/MUSEUM/COMMS/pneumess/pneumess.htm
+http://www.dsfy.com/Japanese_symbol.htm
+http://www.dsl.org/cookbook/cookbook_16.html
+http://www.dslprime.com/Providers/providers.html
+http://www.dslreports.com/forum/remark,11522421~mode=journal~start=60
+http://www.dslreports.com/forum/remark,12496937~mode=flat~start=80
+http://www.dslreports.com/forum/remark,8726649~mode=flat
+http://www.dsm5.org/whitepapers.cfm
+http://www.dspglobal.com/
+http://www.dsrotenstein.com/html/pottery.htm
+http://www.dss.state.va.us/printer/facility/licensed_cr_facts.html
+http://www.dstl.gov.uk/pr/press/pr2003/15-10-03.htm
+http://www.dsu.ca/ourservices.asp?cmPageID=202
+http://www.dsu.org.uk/campaigns/sip/index.php
+http://www.dsu.org.uk/enviro/index.php
+http://www.dsusa.org/ChallMagarchive/Winter04/challmag-winter04-MilitaryRepAthens.html
+http://www.dsvr.co.uk/Services/email/trustedmail.html
+http://www.dtae.org/public/results2/lingo.html
+http://www.dtechgroup.com/dteamwp.htm
+http://www.dtheatre.com/read.php?sid=3224
+http://www.dti.gov.uk/about/procurement/procue5-5.htm
+http://www.dti.gov.uk/ccp/topics1/guide/distsell.htm
+http://www.dti.gov.uk/ccp/topics1/guide/homeshop.htm
+http://www.dti.gov.uk/ccp/topics1/safety.htm
+http://www.dti.gov.uk/energy/domestic_markets/security_of_supply/index.shtml
+http://www.dti.gov.uk/energy/nuclear/fsu/cnci.shtml
+http://www.dti.gov.uk/er/equality/
+http://www.dti.gov.uk/er/er_act_2004.htm
+http://www.dti.gov.uk/er/erbill_2003.htm
+http://www.dti.gov.uk/er/fixed/fixed-pl512b.htm
+http://www.dti.gov.uk/er/nmw/nmwres00.htm
+http://www.dti.gov.uk/er/work_time_regs/exsectors.htm
+http://www.dti.gov.uk/er/work_time_regs/wtr3.htm
+http://www.dti.gov.uk/ewt/nafrica.htm
+http://www.dti.gov.uk/export.control/notices/2000/notice113.htm
+http://www.dti.gov.uk/industries/broadcasting/standards.html
+http://www.dti.gov.uk/industries/broadcasting/technology.html
+http://www.dti.gov.uk/ministers/archived/hewitt130900.html
+http://www.dti.gov.uk/ministers/archived/sainsbury041099.html
+http://www.dti.gov.uk/ministers/archived/sainsbury060901.html
+http://www.dti.gov.uk/ministers/archived/sainsbury061200.html
+http://www.dti.gov.uk/ministers/archived/sainsbury070901.html
+http://www.dti.gov.uk/ministers/archived/sainsbury070998.html
+http://www.dti.gov.uk/ministers/archived/sainsbury170402.html
+http://www.dti.gov.uk/ministers/archived/sainsbury180101.html
+http://www.dti.gov.uk/ministers/archived/sainsbury240602.html
+http://www.dti.gov.uk/ministers/archived/sainsbury260602.html
+http://www.dti.gov.uk/ministers/speeches/Sainsbury260702.html
+http://www.dti.gov.uk/ost/ostbusiness/puset/report.htm
+http://www.dti.gov.uk/renewable/faqs.html
+http://www.dti.nus.edu.sg/industry/coursesseminars_ismdt.htm
+http://www.dtic.mil/domesticviolence/article082901.htm
+http://www.dtic.mil/domesticviolence/meetings02.htm
+http://www.dtic.mil/dpmo/sovietunion/korean_working.htm
+http://www.dtic.mil/jcs/chairman/fox_news_sunday_23mar2003.htm
+http://www.dtic.mil/ndp/ndpbios.htm
+http://www.dtint.com/pswp/dtint/pagespeed/url/Home/story/2850/
+http://www.dtl.org/dtl/article/c-g-p.htm
+http://www.dtl.org/versions/e-mails/obsessed/part-1.htm
+http://www.dtmag.com/divegeo/florida-keys.html
+http://www.dtr.isy.liu.se/en/location
+http://www.dtsonline.com/pro-audio/products.php?ID=1002434300
+http://www.dtvprofessional.com/
+http://www.du.edu/bdld/supintro.htm
+http://www.du.edu/~agrieu/northernireland.htm
+http://www.du.edu/~jcalvert/math/calculus.htm
+http://www.du.edu/~jcalvert/waves/wavefun.htm
+http://www.duallens.com/index.asp?reviewId=12802
+http://www.duallens.com/index.asp?reviewId=22803
+http://www.duang-prateep.de/news/news2002/aktuelles_april2002.htm
+http://www.duas.org/alaviya/dua-154.htm
+http://www.duas.org/imp_of_hajj.htm
+http://www.dubaiworldcup.com/media/press_show.asp?news_id=81
+http://www.dublex-inc.com/blank.php?dir=/About/Content/Test/
+http://www.dublin.ie/forums/showthread.php?goto=lastpost&t=879
+http://www.dublin.ie/getFile.asp?FC_ID=27&docID=129
+http://www.dublinpass.com/dublinpass/detail/default.asp?ID=83
+http://www.duby.com/
+http://www.duc.org/900ssduc_owner.htm
+http://www.duei.de/doi/en/content/research/centralasia_caucasus/geiss_project.html
+http://www.duelzone.net/forums/viewtopic.php?t=1991
+http://www.duesberg.com/articles/iypoppers.html
+http://www.duferco.com/annual/message.html
+http://www.duhaime.org/contract/ca-con2.aspx
+http://www.duindoorn.nl
+http://www.duke-energy.com/company/ehs/news/021029cwrp.asp
+http://www.duke-energy.com/news/mediainfo/viewpoint/2003/030412MW.asp
+http://www.duke.edu/ugm/proposal-submission.html
+http://www.duke.edu/web/DRAGO/humor/mud.html
+http://www.duke.edu/web/brown/
+http://www.duke.edu/web/iaudit/SELF%20ASSESSMENT%20SURVEY.htm
+http://www.duke.edu/web/investment/information.html
+http://www.duke.edu/web/tiss/programs/conferences/Media/Program.html
+http://www.duke.edu/~charvey/Classes/glossary/g_d.htm
+http://www.duke.edu/~mshumate/original.html
+http://www.dukefcu.duke.edu/site/about_calendar.html
+http://www.dukehealth.org/ServicesAndLocations/Services/Surgical/WeightLoss
+http://www.dukehealth.org/articles/20040714143649558
+http://www.dukemagazine.duke.edu/dukemag/issues/091002/mall1.html
+http://www.dukemagazine.duke.edu/dukemag/issues/111202/brink1.html
+http://www.dukemednews.org/news/article.php?id=184
+http://www.dukenews.duke.edu/2000/02/south218.html
+http://www.dukenews.duke.edu/2003/03/grieco0303_print.htm
+http://www.dukenews.duke.edu/news/mandela_1203.html
+http://www.duluthsuperior.com/mld/duluthsuperior/news/world/10703497.htm
+http://www.dulwichcommunityhospital.nhs.uk/index.php?PID=0000000195
+http://www.dumbcriminalacts.com/criminals.php?p=1&site=criminals&cid=4
+http://www.dummies.com/WileyCDA/DummiesArticle/id-1480.html
+http://www.dummies.com/WileyCDA/DummiesArticle/id-1481.html
+http://www.dummies.com/WileyCDA/DummiesArticle/id-1702.html
+http://www.dummies.com/WileyCDA/DummiesArticle/id-1826.html
+http://www.dummies.com/WileyCDA/DummiesArticle/id-2582,subcat-PERSONAL.html
+http://www.dummies.com/WileyCDA/DummiesArticle/id-2679.html
+http://www.dummies.com/WileyCDA/DummiesTitle/productCd-0764554468,page-tableOfContents.html
+http://www.dumpblair.co.uk/btactical.html
+http://www.dumpinggoods.com/dumpinggoods/go.asp?ic=1185482
+http://www.duncanmcneil.com/News/Committee_News/CN_137.htm
+http://www.duncanwil.co.uk/gcsemonte.html
+http://www.dundee.ac.uk/admissions/visit.htm
+http://www.dundee.ac.uk/disabilityservices/access/description.html
+http://www.dundee.ac.uk/english/linksliterary.htm
+http://www.dundee.ac.uk/english/wics/gmh/gmh8.htm
+http://www.dundee.ac.uk/learning/qau/taught/prog/progrev_policy.htm
+http://www.dundee.ac.uk/learning/wasc/outreach/outreach_officer.htm
+http://www.dundee.ac.uk/pressreleases/prdec04/mastersexpo.html
+http://www.dundee.ac.uk/prospectus/graduate/profiles/design.htm
+http://www.dundee.ac.uk/prospectus/undergrad/courses/cestudies.htm
+http://www.dundee.ac.uk/safety/Policy/05-2005.htm
+http://www.dundee.com/
+http://www.dundeecity.gov.uk/registrars/appmarven.htm
+http://www.dundrumfestival.com/
+http://www.dunedinmethodist.org.nz/meth/heresy.html
+http://www.dunedinmethodist.org.nz/mind/ff2.htm
+http://www.dunedinmethodist.org.nz/mind/hlow.htm
+http://www.dunhamssports.com/family/index.jsp?categoryId=863232&cp=710956
+http://www.dunoon-observer.co.uk/archive/arcaug20008.html
+http://www.dunveganprimary.co.za/Past%20Pupils.htm
+http://www.dunway.com/petersun/html/recession.html
+http://www.dunway.com/wealth/html/recession.html
+http://www.dunxd.com/articles.php?show=37
+http://www.dupont.com/safetyglass/lgn/stories/2802.html
+http://www.duport.co.uk/
+http://www.dur.ac.uk/faculty.handbook/module_description.php?module_code=BIOL3351
+http://www.dur.ac.uk/geolsci.www/undergraduates/safety/undergrad_safety.htm
+http://www.dur.ac.uk/student.support/current/managingyourmoney.htm
+http://www.durable-goods.com/article-rsm.html
+http://www.durable-goods.com/blog/
+http://www.duras.blogspot.com/
+http://www.durban.gov.za/eThekwini/Municipality/real_estate/faq
+http://www.durban.gov.za/eThekwini/Services/parks/dbn_botanic_gardens/contact_details
+http://www.durham-business.com/
+http://www.durham.gov.uk/durhamcc/usp.nsf/pws/Local+Transport+Plan+-+Annual+Progress+Report+-+Progress+in+2002-2003
+http://www.durham.gov.uk/durhamcc/usp.nsf/pws/Walking+and+Cycling+-+Walking+Strategy
+http://www.durhamcentral.com/health/article1.htm
+http://www.dusanov-zakonik.co.yu/1-40e.htm
+http://www.dustandashes.com/freebooks/lighttruth1/Chapter56.htm
+http://www.dutchlandinc.com/products2.htm
+http://www.duxcw.com/forum/_forum/jan2000.htm
+http://www.dva.gov.au/adf/dlp/aboutdlp.htm
+http://www.dvcentral.org/input.html
+http://www.dvd.net.au/review.cgi?review_id=1603
+http://www.dvd.net.au/review.cgi?review_id=3684
+http://www.dvd.net.au/review.cgi?review_id=660
+http://www.dvdanswers.com/index.php?r=0&s=2&c=1070
+http://www.dvdbeaver.com/film/DVDCompare2/kingofmasks.htm
+http://www.dvdbeaver.com/film/DVDCompare6/happytogether.htm
+http://www.dvddebate.com/modules.php?name=Forums&file=viewtopic&t=170&start=15
+http://www.dvdinformation.com/news/press/043002.htm
+http://www.dvdjournal.com/quickreviews/a/allmonstersattack.q.shtml
+http://www.dvdjournal.com/quickreviews/s/st-tng.season03.q.shtml
+http://www.dvdork.com/publish/printer_rbk_fearcc.shtml
+http://www.dvdork.com/publish/rbk_fearcc.shtml
+http://www.dvdoverseas.com/sonycamera_keyfeature.htm
+http://www.dvdoverseas.com/sonytv_keyfeature.htm
+http://www.dvdtalk.com/charlesfleischerinterview.html
+http://www.dvdtalk.com/cinemagotham/archives/000203.html
+http://www.dvdtalk.com/dvdsavant/s766lying.html
+http://www.dvdtalk.com/forum/archive/index.php/t-164340.html
+http://www.dvdtalk.com/forum/archive/index.php/t-422906.html
+http://www.dvdtalk.com/forum/showthread.php?goto=lastpost&t=387538
+http://www.dvdtalk.com/forum/showthread.php?t=342981&page=2
+http://www.dvdtalk.com/forum/showthread.php?t=387538
+http://www.dvdtalk.com/forum/showthread.php?t=407474&page=3
+http://www.dvdtalk.com/gangtapesinterview.html
+http://www.dvdtalk.com/grooveinterview.html
+http://www.dvdtalk.com/reviews/read.php?ID=10829
+http://www.dvdtalk.com/reviews/read.php?ID=12205
+http://www.dvdtalk.com/reviews/read.php?ID=12934
+http://www.dvdtalk.com/reviews/read.php?ID=13219
+http://www.dvdtalk.com/reviews/read.php?ID=14278
+http://www.dvdtalk.com/reviews/read.php?ID=15084
+http://www.dvdtalk.com/reviews/read.php?ID=15123
+http://www.dvdtalk.com/reviews/read.php?ID=15226
+http://www.dvdtalk.com/reviews/read.php?ID=15875
+http://www.dvdtalk.com/reviews/read.php?ID=9638
+http://www.dvdtimes.co.uk/content.php?contentid=248
+http://www.dvdtimes.co.uk/content.php?contentid=3717
+http://www.dvdtimes.co.uk/content.php?contentid=4916
+http://www.dvdtimes.co.uk/content.php?contentid=5266
+http://www.dvdtown.com/review/starwarstrilogywidescreen/11796/2329/
+http://www.dvdtown.com/review/troywidescreen/12965/2573/
+http://www.dvdverdict.com/reviews/angelseason1.php
+http://www.dvdverdict.com/reviews/defiantones.php
+http://www.dvdverdict.com/reviews/girlsgirlsfemales.php
+http://www.dvdverdict.com/reviews/lotrrotk.php
+http://www.dvdverdict.com/reviews/soundofmusic.php
+http://www.dvdverdict.com/reviews/startrektngseasonsix.php
+http://www.dvdverdict.com/reviews/windandlion.php
+http://www.dvg.org/aboutgp/art_char_plan/info-url_nocat-2.htm
+http://www.dvhardware.net/article2528.html
+http://www.dvhsmovieguide.com/dvd_detail2.php?free=c
+http://www.dvinfo.net/articles/business/copyrightfaq3.php
+http://www.dvirc.org.au/publications/friendsfamily.htm
+http://www.dvjc.org/beytmidrash/Spring%202005.htm
+http://www.dvla.gov.uk/drivers/applydl.htm
+http://www.dvla.gov.uk/drivers/medical/minutes_2004/meeting_minutes_24_mar_04.htm
+http://www.dvla.gov.uk/drivers/medical/reports_2003/vision_annrep_2003.htm
+http://www.dvmen.org/dv-26.htm
+http://www.dvmnewsmagazine.com/dvm/article/articleDetail.jsp?id=31506
+http://www.dvorak.org/blog/
+http://www.dvorkin.com/essays/unemben.htm
+http://www.dvrepublic.com/link/women.html
+http://www.dvshop.ca/dvcafe/acting/actorbooks.htm
+http://www.dvshop.ca/dvcafe/canada/actorbooks.html
+http://www.dvshop.ca/dvcafe/writing/screenbooks.htm
+http://www.dw-world.de/dw/article/0,1564,1414195,00.html
+http://www.dw-world.de/dw/article/0,1564,1415042,00.html
+http://www.dw-world.de/dw/article/0,1564,1463273,00.html
+http://www.dw-world.de/dw/article/0,1564,1467115,00.html
+http://www.dw-world.de/dw/article/0,1564,1471751,00.html
+http://www.dw-world.de/dw/article/0,1564,1493894,00.html
+http://www.dw-world.de/dw/article/0,1564,1504503,00.html
+http://www.dw-world.de/english/0,3367,1432_A_1236383_1_A,00.html
+http://www.dwcdesignet.com/DWC/2004/mar/indpro.html
+http://www.dwcdesignet.com/DWC/Oct'00/designp.html
+http://www.dwcdesignet.com/DWC/oct03/spotlight.html
+http://www.dwcorp.net/education.htm
+http://www.dwd.state.wi.us/dws/tanf/stanfamn.htm
+http://www.dwd.state.wi.us/er/discrimination_civil_rights/publication_erd_7899_pweb.htm
+http://www.dwd.state.wi.us/ui/Whatsnew/Current.htm
+http://www.dwd.state.wi.us/ui/whatsnew/erupdates/2003qtr1.htm
+http://www.dwd.state.wi.us/ui/whatsnew/erupdates/2003qtr4.htm
+http://www.dwd.state.wi.us/ui/whatsnew/erupdates/2004qtr3.htm
+http://www.dwheeler.com/oss_fs_why.html
+http://www.dwi.gov.uk/pubs/bouchier/bou005.htm
+http://www.dwi.gov.uk/pubs/private/
+http://www.dwp.gov.uk/asd/asd5/134summ.asp
+http://www.dwp.gov.uk/lifeevent/penret/penreform/
+http://www.dwp.gov.uk/lifeevent/penret/penreform/3_fas.asp
+http://www.dwp.gov.uk/lifeevent/penret/penreform/fas_list.asp
+http://www.dws.us/weblog/
+http://www.dxarts.washington.edu/coupe/reading.html
+http://www.dyadic-group.com/wt/redirect_new/pr_1092677279
+http://www.dyenamicmovement.com/Airwalkerguide.html
+http://www.dyenamicmovement.com/ElastaBlastguide.html
+http://www.dyenamicmovement.com/therapistpage.html
+http://www.dyestat.com/3us/4xc/NTN/meet/northwest-julian.htm
+http://www.dynamic-apps.com/tutorials/classpath.jsp
+http://www.dynamic-med.com/content/4/1/3
+http://www.dynamicflight.com/avcfibook/methods/
+http://www.dynamicforces.com/htmlfiles/topcowpress011705.html
+http://www.dynamist.com/weblog/
+http://www.dyrevernalliansen.org/english.php
+http://www.dyske.com/default.asp?view_id=707
+http://www.dyske.com/default.asp?view_id=814
+http://www.dyske.com/design/paper.asp?id=707
+http://www.dyske.com/index.php?view_id=435
+http://www.dyske.com/index.php?view_id=738
+http://www.dyske.com/index.php?view_id=762
+http://www.dyske.com/index.php?view_id=811
+http://www.dyslexia-teacher.com/t114.html
+http://www.dyslexia.com/library/getready.htm
+http://www.dyslexiatalk.com/messages/5/3675.shtml?1097223149
+http://www.dyslexiawales.com/course.htm
+http://www.dystopical.com/W2/week.041002.html
+http://www.dzfx.com/workshops/list/2/Microsoft_Word-Office-XP/
+http://www.e-a-a.org/codef.htm
+http://www.e-bug.net/forum/messages/14482.shtml
+http://www.e-bug.net/forum/messages/15087.shtml
+http://www.e-bug.net/forum/messages/15413.shtml
+http://www.e-bug.net/forum/messages/15414.shtml
+http://www.e-businessguide.gov.au/building/e-commerce
+http://www.e-c-h-o.org/Conf2004intro.htm
+http://www.e-celtic.co.uk/aaods/history.htm
+http://www.e-comprofits.com/offlinepromo.html
+http://www.e-consultancy.com/newsfeatures/360276/uk-high-street-retailers-lack-coherent-leading-e-commerce-provider-screen-pages-publishes-detailed-study-and-benchmarks-of-the-performance-of-major-retailers-in-the-search-engines.html
+http://www.e-driveonline.com/edrive_newsletter_3-03.htm
+http://www.e-guiden.no/cparticle52270-4833a.html
+http://www.e-gun.com/Guns/Safety_and_Safety_Products/Gun_Safe/
+http://www.e-hresources.com/laws.html
+http://www.e-insuranceireland.com/pensions/news.asp
+http://www.e-learningcentre.co.uk/eclipse/showcase/profdev.htm
+http://www.e-learningguru.com/articles/art1_4.htm
+http://www.e-linkschools.org/japanese/school_j/seeking.htm
+http://www.e-mago.co.il/e-magazine/bestsystem.html
+http://www.e-mds.com/emds/prodserv/bill.html
+http://www.e-n.org.uk/1998-05/562-Mad-for-it-in-Manchester.htm
+http://www.e-normous.biz/benchpresstips.asp
+http://www.e-quies.com/funsms/funny.html
+http://www.e-ratecentral.com/archive/News/News2005/weekly_news_20050307.asp
+http://www.e-sthetics.com/BACKGROUND/BASICS/EMOTIONS/anxietysurgery.html
+http://www.e-strategy.ubc.ca/news/update0503/0503-careers.html
+http://www.e-thepeople.org/about/fullstory/Tips
+http://www.e-tote.com/rfu/rules.php
+http://www.e-tutor.com/eNews/issue0205/
+http://www.e.bell.ca/filmfest/2004/livefromthefestival/dailynews.asp?id=26
+http://www.e2open.com/news/article.html?1348
+http://www.eaa-knowledge.com/ojni/ni/8_1/kokol.htm
+http://www.eaa.org/chapters/resources/reference/Reference%20Papers,%20Alert%20the%20Media!%20How%20to%20publicize%20Chapter%20events.html
+http://www.eaa.org/communications/eaanews/pr/020510_distancelearning.html
+http://www.eab.gov.bc.ca/health/96-06.htm
+http://www.eab.gov.bc.ca/pest/96-02(a).htm
+http://www.eab.gov.bc.ca/pest/pestsm93.htm
+http://www.eab.gov.bc.ca/waste/99was23a.htm
+http://www.eaba.co.uk/articles/tomCleary/chapter11.html
+http://www.eaba.co.uk/articles/tomCleary/chapter12.html
+http://www.eaca.com/.docs/pg/11360
+http://www.each1reach1.org/young/plays/indiv/lifeis.html
+http://www.eaesp.org/activities/own/grants.htm
+http://www.eagames.com/official/moh/alliedassault/us/usershowcase/clan_showcase_01.jsp
+http://www.eagle.ca/~matink/holidays.html
+http://www.eagle.org/news/speeches/apr11-2005.html
+http://www.eaglerockschool.org/ER33CourseDescriptions.htm
+http://www.eagletribune.com/news/stories/20041102/LI_001.htm
+http://www.eaipatterns.com/ramblings/26_symmetry.html
+http://www.eajc.org/publish_print_e.php?rowid=13
+http://www.ealinglibdems.org.uk/
+http://www.ean.ie/health.shtml?sid=3&ssid=53
+http://www.eandpnet.com/ep/previous/0100/vision.htm
+http://www.eap.mcgill.ca/CPTFP_7.htm
+http://www.eapglass.com/RiversideSociety/ApplicationPage.htm
+http://www.eapn.ie/events/114
+http://www.eappi.org/eappi.nsf/index/rep-bs-05011721.html
+http://www.eappi.org/eappi.nsf/index/rep-bt-05031802.html
+http://www.eappi.org/eappi.nsf/index/rep-bt-05032907.html
+http://www.eappi.org/eappi.nsf/index/rep-tm-08.html
+http://www.eaprotection.com/eguipment/DVR.htm
+http://www.earcmn.org/html/eng/education/china.html
+http://www.earlham.edu/~guvenfe/philosophyofsocialscifall2004.html
+http://www.earlham.edu/~peters/fos/fosblog.html
+http://www.earlibrary.org/nclive.htm
+http://www.early2bed.com/pages/calendar.html
+http://www.earlybritishkingdoms.com/adversaries/bios/penda.html
+http://www.earlychildhood.com/Articles/index.cfm?FuseAction=Article&A=11&PrintVersion=46
+http://www.earlychildhood.com/community/ask/ask_current.asp?ExpertID=138&QuesId=166
+http://www.earlychildhood.com/community/ask/ask_current.asp?ExpertID=287&QuesId=86
+http://www.earlychristianwritings.com/passion.html
+http://www.earlyflute.com/pages/flutehistory.htm
+http://www.earlygirl.com/schooldaze.shtml
+http://www.earlylearning.ubc.ca/people.htm
+http://www.earlymodernweb.org.uk/emn/
+http://www.earlymodernweb.org.uk/waleslaw/sacheverell.htm
+http://www.earlystageeast.org/success.asp
+http://www.earlytexashistory.com/Tx1836/dispatch9.htm
+http://www.earsurgery.org/meniere.html
+http://www.earsurgery.org/serous.html
+http://www.earth-history.com/Judaism/Philo/philo12.htm
+http://www.earth-pages.com/journals.asp
+http://www.earth-policy.org/Books/Out/Ote2_3adapt.htm
+http://www.earth-policy.org/Updates/Update42.htm
+http://www.earth2tv.com/information/secondseason.html
+http://www.earth360.com/ed-criticallinking.html
+http://www.earth911.org/master.asp?s=e911&a=partners/update/display.asp&b=2004/September
+http://www.earthalchemy.com/onanger.html
+http://www.earthaven.org/LifeTogether/CreatingaLifeTogether.html
+http://www.earthbaby.com/herbsforkids.html
+http://www.earthenergy.co.uk/eegrswel.html
+http://www.earthfromtheair.co.uk/guestbook/index.php?from=300&more=20&key=
+http://www.earthinstitute.columbia.edu/sop2002/sopnews.html
+http://www.earthjustice.org/news/display.html?ID=166&friend=1
+http://www.earthliberationfront.com/
+http://www.earthlydelights.com.au/history6.htm
+http://www.earthlypursuits.com/WarGarV/WarGard1.htm
+http://www.earthlypursuits.com/WarGarV/WarGard6.htm
+http://www.earthprint.com/
+http://www.earthsave.bc.ca/materials/articles/articles/enviro/why_does.html
+http://www.earthsave.bc.ca/materials/articles/enviro/why_does.html
+http://www.earthshare-oregon.org/Events.html
+http://www.earthshelters.com/passive_solar_design.html
+http://www.earthstation9.com/1876_phi.htm
+http://www.earthstation9.com/1904_stl.htm
+http://www.earthstation9.com/1907_jam.htm
+http://www.earthstation9.com/1933_chi.htm
+http://www.earthtym.net/bal-disaster.htm
+http://www.earthtym.net/ref-altitude.htm
+http://www.earthweshare.org/oped970501.html
+http://www.eas.ee/?id=2031
+http://www.easb.edu.sg/programme_year3_acct.htm
+http://www.east-harlem.com/mt/archives/000108.html
+http://www.east-harlem.com/mt/archives/cat_hall_of_fame.html
+http://www.east-tennessee-history.org/
+http://www.eastalabamacycling.org/
+http://www.eastandard.net/hm_news/news_is.php?articleid=22122
+http://www.eastandard.net/mags/executives/articles.php?articleid=22257
+http://www.eastandard.net/print/news.php?articleid=22122
+http://www.eastangelharbor.com/_wsn/page18.html
+http://www.eastasian.ucsb.edu/projects/fswlc/tlsd/research/Journal08/foreword8e.html
+http://www.eastbaycf.org/grantmaking/faq.html
+http://www.eastbayexpress.com/Issues/2005-06-22/news/cityofwarts.html
+http://www.eastbourne.gov.uk/Your_Home/Council_Tenants/your_environment.asp
+http://www.eastbrunswick.org/aroundtown/crystal_springs.asp
+http://www.eastern-europe-women.com/articles.html
+http://www.easterncougarnet.org/prairiestates.html
+http://www.easternct.edu/depts/edu/units/alphabet.html
+http://www.easternforensic.com/fair_settlement.htm
+http://www.easterngreenparty.org.uk/news-2001_03_25.html
+http://www.easterngreenparty.org.uk/news/2004-03-09.html
+http://www.easternmarket.net/pr/pr_063004.html
+http://www.easternprogress.com/news/2002/10/10/News/Assault.Suspect.Wanted.Campus.Sex.Offenses.Rise-293625.shtml
+http://www.easternprogress.com/news/2004/01/22/TheStudio/Cell-Phones.Hang.Them.Up-584857.shtml
+http://www.eastgate.com/HypertextNow/archives/Attention.html
+http://www.eastgwillimbury.ca/current/events.htm
+http://www.eastkingdom.org/combat/fighting/policies.html
+http://www.eastlondoncentre.co.uk/elc/training_opportunities.asp
+http://www.eastlothiancourier.com/news/archivestory.php/aid/1733/Injury_put_international_mountain_race_in_doubt.html
+http://www.eastman.ucl.ac.uk/~epa/conforg.html
+http://www.eastmeetswest.org/
+http://www.eastofenglandobservatory.org.uk/searchResponse.asp?categoryGEOID=902
+http://www.eastofthesun.com/pi6/santa.htm
+http://www.eastoftheweb.com/short-stories/UBooks/Cobw.shtml
+http://www.eastoftheweb.com/short-stories/UBooks/PieSte.shtml
+http://www.eastonbh.ac.nz/article308.html
+http://www.eastpointpolice.org/ws.htm
+http://www.eastrenfrewshire.gov.uk/pls/pestro/url/ITEM/D0F6CD4E158B8DBAE030928D43B1115F
+http://www.eastvalleytribune.com/index.php?sty=43522
+http://www.easy-forex.com/en/Forex.dollareuro.aspx
+http://www.easy-online-loans.co.uk/easy-personal-loans.html
+http://www.easy2.com/tutorials/diy0319/index.asp
+http://www.easy502nd.com/bylaws.htm
+http://www.easyaccesselectronics.com/Products.htm
+http://www.easyenglish.info/teachall/nt02-lbw.htm
+http://www.easygolf.co.uk/acatalog/Online_Catalogue_SALE_SECTION__20.html
+http://www.easyjob.net/faq.htm
+http://www.easypano.com/support/faq/support_faq.asp?rID=118
+http://www.easypooltutor.com/modules.php?name=FAQ&myfaq=yes&id_cat=12&categories=
+http://www.easyracers.com/racing.htm
+http://www.easystand.com/healthbenefits/general_benefits.html
+http://www.easystar.com/jbbnews.html
+http://www.easytraining.com/terms.htm
+http://www.easyweb.co.uk/articles/corporate_sales.html
+http://www.eatingwell.com/articles_recipes/nutrition/willett.html
+http://www.eatnpark.com/aboutus.asp
+http://www.eatright.org/Public/GovernmentAffairs/92_17504.cfm
+http://www.eatright.org/Public/GovernmentAffairs/92_8236.cfm
+http://www.eatsafe.gov.uk/about_us/
+http://www.eatwild.com/products/montana.html
+http://www.eatwild.com/products/multistate.html
+http://www.eatyourbest.com/promotions/
+http://www.eauk.org/contentmanager/content/iraq.cfm
+http://www.eauk.org/contentmanager/content/wales/gweini/english/
+http://www.eb2000.org/ITSR1.htm
+http://www.ebdir.net/olson/teamsternet3.html
+http://www.ebfonline.com/at_forum/at_forum.asp?id=255&linked=252
+http://www.ebgs.co.uk/album/sleeve/index.php
+http://www.ebi.ac.uk/interpro/DisplayIproEntry?ac=IPR007253
+http://www.ebird.org/content/news/LocManage.html
+http://www.ebird.org/content/tutorials/tutorialViewData.html
+http://www.ebonmusings.org/atheism/ruletheworld.html
+http://www.ebooked.co.uk/ebooks/wsonline.htm
+http://www.ebooks.com/
+http://www.ebookweb.org/opinion/roger.sperberg.20010715.aebpr.htm
+http://www.ebparks.org/employ/heavy_equip_oper.htm
+http://www.ebparks.org/parks/hayward.htm
+http://www.ebparks.org/parks/pleasrig.htm
+http://www.ebparks.org/parks/tilanza.htm
+http://www.ebparks.org/parks/tilden.htm
+http://www.ebra.org/regulat/germany.html
+http://www.ebrc.info/conference2004/pages_5CA77A67-AE33-429B-8904-FA33994E73C8.asp
+http://www.ebrd.com/country/sector/energyef/industry/main.htm
+http://www.ebrd.com/oppor/procure/opps/consult/050113b.htm
+http://www.ebrd.com/pubs/insti/basic/basic3.htm
+http://www.ebrd.com/pubs/insti/basic/basic5.htm
+http://www.ebri.org/
+http://www.ebsg.org/program/educational.htm
+http://www.ebsmba.com/new_dec.asp
+http://www.ebsqart.com/artMagazine/za_103.htm
+http://www.ebtx.com/theory/direvolv.htm
+http://www.ec-finance.com/site/about_us/press_releases/10-12-2000-Isabella_Capital.htm
+http://www.ec-online.net/Community/transcript61400.htm
+http://www.ec-online.net/Knowledge/Articles/reflections.html
+http://www.ec.gc.ca/climate/overview_science-e.html
+http://www.ec.gc.ca/ee-ue/incidents/iron_ore_company_e.asp
+http://www.ec.gc.ca/ee-ue/incidents/iron_ore_company_e.asp?print=1
+http://www.ec.gc.ca/ee-ue/pub/chocolate/chpt5_e.asp
+http://www.ec.gc.ca/marine/debris/eng/facts.htm
+http://www.ec.gc.ca/substances/ese/eng/psap/final/roadsalts.cfm
+http://www.ec.gc.ca/water/en/info/pubs/sss/e_sss31.htm
+http://www.ec.gc.ca/water/en/nature/lakes/e_levels.htm
+http://www.eca-watch.org/problems/eu_russ/germany/hermes_sitout.html
+http://www.ecaar.org/Iraq.htm
+http://www.ecampustours.com/campuslife/schoolstress.aspx
+http://www.ecampustours.com/payingcollege/financialaid/financialaidawardletter.aspx
+http://www.ecampustours.com/payingcollege/financialaid/financialaidawardletter.htm
+http://www.ecanews.org/minutes_durban.htm
+http://www.ecanews.org/minutes_krakow.htm
+http://www.ecarcenter.org/fl/fl-usedoil.htm
+http://www.ecav.sk/intl/english/state.htm
+http://www.ecb.int/home/glossary/html/glossn.en.html
+http://www.ecb.int/home/html/disclaimer.en.html
+http://www.ecb.int/press/key/date/1997/html/sp971017.en.html
+http://www.ecb.int/press/key/date/1999/html/sp990427.en.html
+http://www.ecb.int/press/key/date/2000/html/sp000320.en.html
+http://www.ecb.int/press/key/date/2000/html/sp001026_1.en.html
+http://www.ecb.int/press/key/date/2001/html/sp010518.en.html
+http://www.ecb.int/press/key/date/2001/html/sp010608.en.html
+http://www.ecb.int/press/key/date/2001/html/sp010830_5.en.html
+http://www.ecb.int/press/key/date/2001/html/sp011108.en.html
+http://www.ecb.int/press/key/date/2004/html/sp040513_1.en.html
+http://www.ecb.int/press/key/date/2005/html/sp050128.en.html
+http://www.ecb.int/press/pressconf/2002/html/is021205.en.html
+http://www.eccafe.org/sto/alevenson.html
+http://www.eccafe.org/sto/lcoleman.html
+http://www.ecchk.org/T01/tapestry-01Q1-e1.htm
+http://www.eccj.or.jp/ambassador/eng/34/04/4_3.html
+http://www.ecct.com.tw/euroview/issue85/euroview_article0.php
+http://www.ecd.govt.nz/publications/bibliographies/bibchdev.html
+http://www.ece.eps.hw.ac.uk/Research_degrees/guide.htm
+http://www.ece.mtu.edu/faculty/bamork/ee380/
+http://www.ece.uiuc.edu/ingenuity/399/design.html
+http://www.ece.utoronto.ca/undergrad/bahen/main.html
+http://www.ecf.utoronto.ca/apsc/registrar/C.O.S._2.htm
+http://www.ecf.utoronto.ca/~writing/bbieee-help.html
+http://www.ecgd.gov.uk/lrgtxt/index/ps_home/lcfs/lcfs_mi.htm
+http://www.ecgd.gov.uk/news_home.htm?id=6213
+http://www.echochamberproject.com/taxonomy/term/74
+http://www.echoditto.com/node/552
+http://www.echoedvoices.org/Aug2002/IGI_GI_Dream.html
+http://www.echoedvoices.org/Nov2001/NovGoddess.html
+http://www.echoinggreen.org/index.cfm?fuseaction=Page.viewPage&pageID=153
+http://www.eci.ox.ac.uk/biodiversity/bio_publications.html
+http://www.ecis.com/~alizard/technology.html
+http://www.eckerd.edu/aspec/swisspage/Scientific%20Papers.htm
+http://www.eclecticacademy.com/websitedev.htm
+http://www.eclipse.co.uk/mikey/colour2.html
+http://www.eclipse.co.uk/wodehouse/savage020702.htm
+http://www.eclipsechaser.com/eclink/image/widetech.htm
+http://www.eclipsetours.com/1193.html
+http://www.eclipseunleashed.com/tut/feet/feet.htm
+http://www.eclipseunleashed.com/tut/head/lips.htm
+http://www.ecloanpro.com/Content/InThePress/pressRelease20010531.html
+http://www.ecmagazine.net/fa04htm/scoopfa04.htm
+http://www.ecmagazine.net/sp03htm/energybuzzsp03.htm
+http://www.ecmi.de/rubrik/13/opening+celebration/
+http://www.ecmweb.com/mag/electric_code_qa_5/
+http://www.ecmweb.com/mag/electric_options_power_conditioning/
+http://www.ecn.purdue.edu/KDDCUP/
+http://www.ecnp.nl/Congresses/2005Amsterdam/Guidelines/basic_guidelines.html
+http://www.eco-action.org/efau/issues/1998/efau1998_01.html
+http://www.eco-justice.org/lexicon.asp
+http://www.eco-labels.org/home.cfm
+http://www.eco-labels.org/label.cfm?LabelID=272
+http://www.eco-labels.org/label.cfm?LabelID=272&mode=text
+http://www.eco-labels.org/program.cfm?LabelID=272
+http://www.eco-web.com/info/intro.html
+http://www.eco.freedom.org/el/20040802/caruba.shtml
+http://www.ecocycle.org/charm/index.cfm
+http://www.ecofuture.org/pk/pkar9506.html
+http://www.ecoglobe.org/nz/ge-news/rcgm1o30.htm
+http://www.ecohealth101.org/questions/eat.html
+http://www.ecohealth101.org/whats_left/eat7.html
+http://www.ecoindia.com/health7.htm
+http://www.ecok.edu/academics/schools/hss/soc/sociology_courses.asp
+http://www.ecolitgy.com/JLD/people.html
+http://www.ecologicalsystems.biz/windpage.html
+http://www.ecology.kyoto-u.ac.jp/biwako/teikan/
+http://www.ecologyandsociety.org/policies.php
+http://www.ecologyandsociety.org/vol2/iss2/art10/
+http://www.ecologyandsociety.org/vol2/iss2/art4/
+http://www.ecologyfund.com/ecology/info_canada.html
+http://www.ecom.jp/ecom_e/latest/newsletter_no16.htm
+http://www.ecom.unimelb.edu.au/iaesrwww/people/ascott/present.html
+http://www.ecom.unimelb.edu.au/iaesrwww/people/ascott/pub.html
+http://www.ecomhelp.com/KB/inspiration/kb_reaching-your-goals.htm
+http://www.ecomhelp.com/KB/internet/kb_internet-the-amazing-website-makeover.htm
+http://www.ecomhelp.com/KB/marketing/kb_direct-marketing.htm
+http://www.ecominfo.net/supplychaindata/arts/835_atms.htm
+http://www.ecommerce-digest.com/internet-marketing-solution.html
+http://www.ecommerce-guide.com/solutions/customer_relations/article.php/3428931
+http://www.ecommercetimes.com/
+http://www.ecommercetimes.com/perl/board/mboard.pl?board=ecttalkback&thread=2029&id=2174&display=1
+http://www.ecommercetimes.com/story/35383.html
+http://www.ecommercetimes.com/story/36507.html
+http://www.ecommercetimes.com/story/36601.html
+http://www.ecommercetimes.com/story/38826.html
+http://www.ecommercetimes.com/story/39005.html
+http://www.ecommercetimes.com/story/43423.html
+http://www.econ.cam.ac.uk/electricity/research/comparison/groups.htm
+http://www.econ.iastate.edu/classes/econ302/tesfatsion/ht3.htm
+http://www.econ.iastate.edu/classes/econ502/tesfatsion/502fef01.htm
+http://www.econ.iastate.edu/classes/econ502/tesfatsion/502fef99.htm
+http://www.econ.iastate.edu/classes/econ502/tesfatsion/ferevf02.htm
+http://www.econ.qmw.ac.uk/NHS_reforms.com/virtual_ha/health_authority.html
+http://www.econ.usyd.edu.au/drawingboard/digest/0206/mcauley.html
+http://www.econ.usyd.edu.au/drawingboard/digest/0301/sylvan.html
+http://www.econ.usyd.edu.au/drawingboard/digest/0312/wright.html
+http://www.econ.usyd.edu.au/wos/workinglives/register.html
+http://www.econ.vt.edu/research.php?2002
+http://www.econdash.net/econ101_all.html
+http://www.econdoms.co.uk/news.html
+http://www.econedlink.org/lessons/index.cfm?lesson=EM222
+http://www.econedlink.org/lessons/index.cfm?lesson=EM252&page=teacher
+http://www.econedlink.org/lessons/index.cfm?lesson=EM522&page=teacher
+http://www.econlib.org/library/Buchanan/buchCv5c6.html
+http://www.econlib.org/library/Columns/Teachers/riskuncertainty.html
+http://www.econlib.org/library/Enc/Antitrust.html
+http://www.econlib.org/library/Enc/Apartheid.html
+http://www.econlib.org/library/Enc/BankRuns.html
+http://www.econlib.org/library/Enc/FederalReserveSystem.html
+http://www.econlib.org/library/Enc/ForeignInvestmentintheUnitedStates.html
+http://www.econlib.org/library/Enc/GermanEconomicMiracle.html
+http://www.econlib.org/library/Enc/NaturalResources.html
+http://www.econlib.org/library/Enc/ProgramTrading.html
+http://www.econlib.org/library/Enc/SupplySideEconomics.html
+http://www.econmethodology.org/inem/inemconstitution.html
+http://www.econogrind.com/es.html
+http://www.econogrind.com/esc.html
+http://www.econogrind.com/esp.html
+http://www.economagic.com/cenc25.htm
+http://www.economagic.com/em-cgi/data.exe/blscu/CUUR0000SEED03
+http://www.economagic.com/em-cgi/data.exe/blscu/CUUR0000SEHJ03
+http://www.economagic.com/em-cgi/data.exe/blscu/CUUR0000SS0501A
+http://www.economic-examiner.com/Europe_20020107.asp
+http://www.economica.ca/ew13p1.htm
+http://www.economica.ca/ew91p2.htm
+http://www.economicjustice.org/resources/media/wsj-indonesia.html
+http://www.economicprincipals.com/issues/03.05.18.html
+http://www.economicprincipals.com/issues/04.02.22.html
+http://www.economicprincipals.com/issues/04.05.16.html
+http://www.economicsuk.com/blog/000015.html
+http://www.economicsuk.com/original/freelunchsample.html
+http://www.economicswebinstitute.org/glossary/interest.htm
+http://www.economicswebinstitute.org/glossary/socialgroups.htm
+http://www.economicswithaface.com/weblog/archives/2004/10/
+http://www.economist.com.na/2002/1mar/1mar.htm
+http://www.economist.com/PrinterFriendly.cfm?Story_ID=1213392
+http://www.economist.com/PrinterFriendly.cfm?Story_ID=3503700
+http://www.economist.com/PrinterFriendly.cfm?Story_ID=434168
+http://www.economist.com/World/europe/displayStory.cfm?story_id=2250706
+http://www.economist.com/World/europe/displayStory.cfm?story_id=4033465
+http://www.economist.com/World/na/displayStory.cfm?story_id=3503700
+http://www.economist.com/agenda/displayStory.cfm?story_id=3146724
+http://www.economist.com/business/displayStory.cfm?story_id=2054746
+http://www.economist.com/business/displaystory.cfm?story_id=2787854
+http://www.economist.com/business/displaystory.cfm?story_id=4032842
+http://www.economist.com/countries/denmark/profile.cfm?folder=Profile-Economic%20Structure
+http://www.economist.com/countries/southafrica/
+http://www.economist.com/displayStory.cfm?Story_ID=3503700
+http://www.economist.com/displayStory.cfm?Story_id=3422957
+http://www.economist.com/displayStory.cfm?Story_id=457311
+http://www.economist.com/displaystory.cfm?story_id=1213392
+http://www.economist.com/displaystory.cfm?story_id=2071855
+http://www.economist.com/displaystory.cfm?story_id=3909517
+http://www.economist.com/diversions/millennium/PrinterFriendly.cfm?Story_ID=347033
+http://www.economist.com/diversions/millennium/displayStory.cfm?Story_ID=346726
+http://www.economist.com/diversions/millennium/displayStory.cfm?Story_ID=346780
+http://www.economist.com/diversions/millennium/displayStory.cfm?Story_ID=347033
+http://www.economist.com/encyclopedia/Dictionary.cfm?Char=L
+http://www.economist.com/finance/displayStory.cfm?story_id=1748607
+http://www.economist.com/finance/displayStory.cfm?story_id=4010945
+http://www.economist.com/opinion/displayStory.cfm?story_id=2350115
+http://www.economist.com/opinion/displayStory.cfm?story_id=2745515
+http://www.economist.com/printedition/displayStory.cfm?Story_ID=771542
+http://www.economist.com/research/Economics/alphabetic.cfm?LETTER=M
+http://www.economist.com/research/Economics/alphabetic.cfm?LETTER=P
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=EXPENDITURE%20TAX
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=INFERIOR%20GOODS
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=LIBOR
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=OECD
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=REAL%20TERMS
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=RENT
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=RESIDUAL%20RISK
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=RISKS
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=SECURITIES
+http://www.economist.com/research/Economics/alphabetic.cfm?TERM=SUPPLY
+http://www.economist.com/science/displayStory.cfm?story_id=2281888
+http://www.economist.com/science/displaystory.cfm?story_id=2121720
+http://www.economist.com/science/tq/displayStory.cfm?Story_id=3422957
+http://www.economist.com/science/tq/displayStory.cfm?Story_id=3423074
+http://www.economist.com/science/tq/displayStory.cfm?story_id=1841108
+http://www.economist.com/science/tq/displayStory.cfm?story_id=2724420
+http://www.economist.com/surveys/PrinterFriendly.cfm?Story_ID=145631
+http://www.economist.com/surveys/PrinterFriendly.cfm?Story_ID=326221
+http://www.economist.com/surveys/displayStory.cfm?Story_id=1188787
+http://www.economist.com/surveys/displayStory.cfm?Story_id=176637
+http://www.economist.com/surveys/displayStory.cfm?Story_id=326221
+http://www.economist.com/surveys/displayStory.cfm?Story_id=335039
+http://www.economist.com/surveys/displayStory.cfm?Story_id=596927
+http://www.economist.com/surveys/displaystory.cfm?story_id=3785166
+http://www.economist.com/world/europe/displayStory.cfm?story_id=4033465
+http://www.economist.com/world/na/displayStory.cfm?story_id=1270755
+http://www.economist.com/world/na/displayStory.cfm?story_id=2501977
+http://www.economistconferences.com/roundtable/public/con_common.asp?rtID=777&area=2&preview=&rtRegion=2&fprevrt=
+http://www.economy.ws/
+http://www.econphd.net/overview.htm
+http://www.econres.com/documents/Smart_Growth.html
+http://www.ecop.ucl.ac.be/aebiom/biomassnews/News8/Biomass8_6.htm
+http://www.ecoplan.org/children/general/walkingbus.htm
+http://www.ecorecycle.vic.gov.au/www/newsletter_article.asp?id=1172
+http://www.ecos.com/NEWSITE/pages/aboutsub/profile.html
+http://www.ecoschools.com/SFGSA/Publicity/SFGSA_2004Conf_workshops.html
+http://www.ecostudies.org/syefest/ap1res17.htm
+http://www.ecosystem.org/OG/science_letter.html
+http://www.ecotourism.org.au/neap.asp
+http://www.ecotrans.org/acta_en.htm
+http://www.ecouncil.ac.cr/rio/national/reports/europe/hungary.htm
+http://www.ecowaste.com/swanabc/
+http://www.ecoworld.org/Articles/Estok_part2_ew.htm
+http://www.ecoworld.org/Articles/HayesRAN.cfm
+http://www.ecoworld.org/Home/Articles2.cfm?TID=328
+http://www.ecp.fr/en/B_formations/B4_masteres/B4b_mastere_detail.htm?formation_id=3
+http://www.ecpp.co.uk/core_individuals.htm
+http://www.ecs.org/clearinghouse/11/87/1187.htm
+http://www.ecs.org/clearinghouse/16/53/1653.htm
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Amsci/0000.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Amsci/0090.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Amsci/0572.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Amsci/1361.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Amsci/2003.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Author.Eprint.Archives/0005.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Thinking.Psychologically96/0059.html
+http://www.ecs.soton.ac.uk/~harnad/Hypermail/Thinking.Psychologically98/0017.html
+http://www.ecs.soton.ac.uk/~harnad/Temp/UKSTC.htm
+http://www.ecs.soton.ac.uk/~harnad/Temp/greenroad.html
+http://www.ecsa-nc.com/maps.html
+http://www.ecsail.org/mar01.htm
+http://www.ecsanet.org/conferences/ecsaworld2/CHRYSSOCHOOU.htm
+http://www.ecsite-uk.net/news/e_news/ecsite-uk_e-news_oct_2003.html
+http://www.ecsite-uk.net/news/e_news/enews_jun04.html
+http://www.ecsite.net/new/who_are_we.asp?type=intro&keyword=intro2
+http://www.ect.org/news/thomas_reserve.html
+http://www.ectaco.co.uk/Non-talking-Dictionaries/German-items/
+http://www.ectep.com/literacias/discourses.html
+http://www.ectodermaldysplasia.org/text/xrts6.htm
+http://www.ectopic.org/medical_information/detailed_account.asp
+http://www.ectra.org/scenery.htm
+http://www.ecu.edu.au/pr/pines
+http://www.ecu.edu.au/pr/pines.htm
+http://www.ecu.edu/csd/rose.htm
+http://www.ecu.edu/dhs/news/newsstory.cfm?ID=98
+http://www.ecuadordiscover.com/calendar.htm
+http://www.ecuadorexplorer.com/html/weather.html
+http://www.ecureme.com/emyhealth/Pediatrics/Flat_Feet.asp
+http://www.ecureme.com/emyhealth/Pediatrics/Pes_Planus.asp
+http://www.ecustomerserviceworld.com/earticlesstore_articles.asp?type=article&id=1047
+http://www.ecustomerserviceworld.com/earticlesstore_articles.asp?type=article&id=108
+http://www.ecy.wa.gov/programs/wq/plants/weeds/aqua007.html
+http://www.ed-data.k12.ca.us/Glossary.asp
+http://www.ed.gov/Speeches/02-1998/980202.html
+http://www.ed.gov/Speeches/03-1997/secy.html
+http://www.ed.gov/Speeches/04-1997/98senate.html
+http://www.ed.gov/Speeches/08-1995/religion.html
+http://www.ed.gov/Technology/Futures/riel.html
+http://www.ed.gov/Technology/Futures/serim.html
+http://www.ed.gov/about/bdscomm/list/acsfa/edlite-membios.html
+http://www.ed.gov/about/inits/list/fbci/grants2.html
+http://www.ed.gov/about/offices/list/ope/trio/
+http://www.ed.gov/about/offices/list/osdfs/programs.html
+http://www.ed.gov/admins/tchrqual/learn/preparingteachersconference/gordon.html
+http://www.ed.gov/admins/tchrqual/learn/preparingteachersconference/whitehurst.html
+http://www.ed.gov/emergencyplan/
+http://www.ed.gov/legislation/ESEA/sec1124.html
+http://www.ed.gov/news/newsletters/achiever/2003/03012003.html
+http://www.ed.gov/news/opeds/edit/2005/04072005.html
+http://www.ed.gov/news/pressreleases/2001/07/07272001a.html
+http://www.ed.gov/news/pressreleases/2002/03/03052002.html
+http://www.ed.gov/news/pressreleases/2003/03/03072003.html
+http://www.ed.gov/news/pressreleases/2003/06/06242003.html
+http://www.ed.gov/news/pressreleases/2004/01/01142004.html
+http://www.ed.gov/news/pressreleases/2004/02/02042004.html
+http://www.ed.gov/news/pressreleases/2005/02/02282005.html
+http://www.ed.gov/news/pressreleases/2005/04/04072005.html
+http://www.ed.gov/news/speeches/2003/12/12022003a.html
+http://www.ed.gov/news/speeches/2004/10/10142004.html
+http://www.ed.gov/news/speeches/2005/02/02282005.html
+http://www.ed.gov/offices/OERI/ECI/digests/99may.html
+http://www.ed.gov/offices/OSDFS/parents_guide/parents_guide6.html
+http://www.ed.gov/offices/OSERS/Policy/IDEA/article1.html
+http://www.ed.gov/offices/OUS/PES/finaid/enroll98.html
+http://www.ed.gov/policy/elsec/guid/secletter/010813.html
+http://www.ed.gov/policy/elsec/guid/secletter/030220.html
+http://www.ed.gov/policy/fund/reg/edgarReg/edlite-part99c.html
+http://www.ed.gov/prog_info/SFA/StudentGuide/2000-1/apply3.html
+http://www.ed.gov/programs/earlyreading/faq.html
+http://www.ed.gov/pubs/AchGoal5/doengy.html
+http://www.ed.gov/pubs/CPRE/fb2sbm.html
+http://www.ed.gov/pubs/CPRE/t61/
+http://www.ed.gov/pubs/CollegeForAll/graduates.html
+http://www.ed.gov/pubs/CollegeWeek/conclusionb.html
+http://www.ed.gov/pubs/EdReformStudies/EdTech/reasons.html
+http://www.ed.gov/pubs/EdReformStudies/SysReforms/shields1.html
+http://www.ed.gov/pubs/EdReformStudies/SysReforms/shields2.html
+http://www.ed.gov/pubs/EdTechGuide/appc-6.html
+http://www.ed.gov/pubs/GermanCaseStudy/chapter5c.html
+http://www.ed.gov/pubs/LearnCenters/execsum.html
+http://www.ed.gov/pubs/ReadWithMe/onecomm.html
+http://www.ed.gov/pubs/Reform/pt2d.html
+http://www.ed.gov/pubs/Reform/pt4.html
+http://www.ed.gov/pubs/SER/Technology/ch7.html
+http://www.ed.gov/pubs/SER/Technology/ch8.html
+http://www.ed.gov/pubs/USCaseStudy/chapter3.html
+http://www.ed.gov/pubs/charter3rdyear/execsum.html
+http://www.ed.gov/pubs/collegecosts/handbkp7.html
+http://www.ed.gov/pubs/parents/TestTaking/
+http://www.ed.gov/pubs/startearly/ch_1.html
+http://www.ed.gov/pubs/startearly/cite.html
+http://www.ed.gov/rschstat/eval/disadv/promisingresults/edlite-hlights.html
+http://www.ed.gov/rschstat/eval/other/learningcenters/
+http://www.ed.gov/teachers/become/about/survivalguide/parent.html
+http://www.ed.gov/teachers/how/early/cognitivedevsummit02/page_pg2.html
+http://www.ed.gov/teachers/how/early/cognitivedevsummit02/page_pg4.html
+http://www.ed.psu.edu/acsde/deos/deosnews/deosnews5_3.asp
+http://www.ed.psu.edu/englishpds/inquiry/projects/yerkes04.htm
+http://www.ed.psu.edu/insys/ESD/choice/MAChoice.html
+http://www.ed.sc.edu/EDLP/NewsArchive.asp
+http://www.ed.uiuc.edu/EPS/PES-Yearbook/94_docs/SELMAN.HTM
+http://www.ed.uiuc.edu/EPS/PES-Yearbook/95_docs/o'loughlin.html
+http://www.ed.umuc.edu/syllabi/20043/harrogate/bmgt378.awolf.htm
+http://www.ed2go.com/cgi-bin/newoic/newofferings.cgi?name=olemiss&dept=PF
+http://www.eda.admin.ch/geneva_miss/e/home/guide/trav/locaux.html
+http://www.edabg.com/en/hardware/scs_008.php
+http://www.edalive.com/allinfo/purchasingdet.php
+http://www.edauk.com/sub_effects_of_the_media.htm
+http://www.edba.org.au/articles/mugford.html
+http://www.edbroadbent.ca/en/abouted/news/oc_012405.htm
+http://www.edcenter.sdsu.edu/news/news_2004.html
+http://www.edcmag.com/CDA/ArticleInformation/features/BNP__Features__Item/0,4120,18769,00.html
+http://www.edcmag.com/CDA/ArticleInformation/features/BNP__Features__Item/0,4120,19444,00.html
+http://www.edcmag.com/CDA/ArticleInformation/features/BNP__Features__Item/0,4120,20030,00.html
+http://www.edcnews.se/Research/Farewelltoarms.html
+http://www.edcollins.com/stratego/stratego-rule-variations.htm
+http://www.edd.state.nm.us/FILM/RULES/blm.html
+http://www.edd.state.nm.us/FILM/RULES/npm.html
+http://www.edd.state.nm.us/FILM/RULES/ruleregs.html
+http://www.edd.state.nm.us/FILM/RULES/tc.html
+http://www.eddiem.com/projects/csmill/mill.htm
+http://www.eddylaw.com/vol3_no2_art4.htm
+http://www.edelman.com/insights/ShowOne.asp?ID=76
+http://www.edelman.com/speak_up/blog/
+http://www.edelman.com/speak_up/blog/archives/2005/04/where_have_all.html
+http://www.eden.rutgers.edu/~pstuart/ab2/k12schools.html
+http://www.edenvbc.org/news.htm
+http://www.eders.com/Redneck-Stand-p256c35-path0.html
+http://www.edfacilities.org/pubs/fundraising3.html
+http://www.edfacilities.org/pubs/outdoor3.html
+http://www.edfacilities.org/rl/disaster.cfm
+http://www.edfacilities.org/rl/facilities_management.cfm
+http://www.edfacilities.org/rl/facility_assessment.cfm
+http://www.edgateteam.net/wl/aboutwlc.htm
+http://www.edge.org/
+http://www.edge.org/3rd_culture/ledoux/ledoux_p3.html
+http://www.edge.org/3rd_culture/seligman04/seligman_index.html
+http://www.edge.org/discourse/sulloway_personality.html
+http://www.edge.org/documents/archive/edge114.html
+http://www.edge.org/q2005/q05_print.html
+http://www.edgehill.ac.uk/Faculties/HMSAS/ngas/research.htm
+http://www.edgehill.ac.uk/Faculties/HMSAS/ngas/staff.htm
+http://www.edgeleynd.com/edgeleymail/060204/chu_findssimilarities_and_differ.htm
+http://www.edgenews.com/directory/wi.html
+http://www.edgenews.com/issues/2002/04/louise.html
+http://www.edhanced.com/ask-mred/?q=taxonomy/view/or/7&from=20
+http://www.edhec-risk.com/about_us/Advisory%20Board
+http://www.edhelper.com/ReadingComprehension_35_76.html
+http://www.edibleschoolyard.org/cla_eco.html
+http://www.edict.com.hk/polylex/conceng/related.htm
+http://www.edict.com.hk/vlc/GrammarCourse/Lesson10_WordOrder/lesson10.htm
+http://www.edict.com.hk/vlc/articles/ArtAns3.htm
+http://www.edie.net/feedback/index.asp?channel=3
+http://www.edie.net/news/news_story.asp?id=10004&channel=6
+http://www.ediets.com/myDiet/recipeClub.cfm
+http://www.ediets.com/news/article.cfm/cmi_847567
+http://www.ediets.com/news/article.cfm/cmi_915356/cid_1
+http://www.ediets.com/news/article.cfm/cmi_915356/cid_29
+http://www.ediets.com/news/article.cfm/cmi_915356/code_12738
+http://www.ediets.com/news/article.cfm/cmi_915357/cid_28
+http://www.ediets.com/start.cfm?nopop=1&media=healthyliving&dietchoice=11
+http://www.edietsuk.co.uk/news/supersuccesses.cfm?StoryID=1660&code=24005
+http://www.edina.co.uk/stories/storyReader$29
+http://www.edinburgh-festivals.com/topics.cfm?tid=909&id=239712005
+http://www.edinburgh.gov.uk/CEC/Member_Services/List_of_Councillors/RegisterOfInterests.jsp?CllrID=26&CllrName=Hinds
+http://www.edinburgh.gov.uk/cpzextension/whatis.html
+http://www.edinburgh.gov.uk/libraries/historysphere/burkeandhare/burkeandhare.html
+http://www.edinburgh.labour.co.uk/viewpage.cfm?Page=5296
+http://www.edinburghgunners.org.uk/articles/199
+http://www.edinphoto.org.uk/4/4_eps_exhibitions_1922_members.htm
+http://www.edirectory.co.uk/pf/pages/moreinfoa.asp?recordid=1725997
+http://www.edition-reuss.de/pages/nudes/e_family_nudes.html
+http://www.editorsoftware.com/corporate/corporate_main.html
+http://www.edletter.org/current/snow.shtml
+http://www.edletter.org/past/issues/1999-mj/learning.shtml
+http://www.edletter.org/past/issues/1999-so/forum.shtml
+http://www.edletter.org/past/issues/2004-jf/abstracts.shtml
+http://www.edletter.org/past/issues/2004-jf/hiring.shtml
+http://www.edmunds-enterprises.com/
+http://www.edmunds.com/advice/buying/articles/74786/article.html
+http://www.edmunds.com/advice/selling/articles/45786/article.html
+http://www.edmunds.com/advice/selling/articles/74786/article.html
+http://www.edmunds.com/advice/specialreports/articles/103708/article.html
+http://www.edmunds.com/advice/strategies/articles/102203/article.html
+http://www.edmunds.com/advice/strategies/articles/46946/article.html
+http://www.edmunds.com/help/about/press/101432/article.html
+http://www.edmunds.com/insideline/do/Columns/articleId=104582
+http://www.edmunds.com/insideline/do/Drives/FirstDrives/articleId=62442
+http://www.edmunds.com/insideline/do/Drives/FullTests/articleId=103495
+http://www.edmunds.com/insideline/do/Drives/FullTests/articleId=44245
+http://www.edmunds.com/insideline/do/Drives/LongTerm/articleId=103704
+http://www.edn.com/article/CA196478.html
+http://www.edn.com/article/CA438330.html
+http://www.edn.com/article/CA480589.html
+http://www.edn.com/article/CA480589.html?industryid=2853
+http://www.edn.com/article/CA480589.html?text=arm
+http://www.edp24.co.uk/Content/Columnists/NeilHaverson/2003/030426NeilHaverson.asp
+http://www.edrants.com/reluctant/000546.html
+http://www.edrants.com/reluctant/002168.html
+http://www.edri.org/issues/copyright/WIPO
+http://www.edri.org/issues/governance/eupolicy?from=70
+http://www.eds-destatis.de/en/theme3/theme3.php?th=3
+http://www.eds.org.nz/news/consumer_guide.cfm
+http://www.edsgonesouth.com/blog/
+http://www.edsource.org/edu_acc_law.cfm
+http://www.edsource.org/edu_ass_law.cfm
+http://www.edsource.org/edu_sta_law.cfm
+http://www.edsource.org/edu_tea_law.cfm
+http://www.edst.educ.ubc.ca/aerc/2000/nolanr-web.htm
+http://www.edstrong.blog-city.com/radical_left_slogan_turn_antiwar_to_class_war.htm
+http://www.edsw.usyd.edu.au/current_students/policies/style_guide_04.shtml
+http://www.edta.org/rehearsal_hall/acting_1.asp
+http://www.edthibodeau.com/nonplussed/2004/week6/
+http://www.edu-cyberpg.com/Literacy/Play.asp
+http://www.edu-cyberpg.com/Literacy/play.asp
+http://www.edu-cyberpg.com/Teachers/brain.html
+http://www.edu-cyberpg.com/Teachers/cwomen.html
+http://www.edu-cyberpg.com/Teachers/standards.html
+http://www.edu-cyberpg.com/Technology/allengreenspan.html
+http://www.edu-cyberpg.com/culdesac/bhm/bhm.html
+http://www.edu-cyberpg.com/literacy/play.asp
+http://www.edu-orchard.net/PROFESS/ILESSON/ilesmb1.html
+http://www.edu.cn/20010101/22290.shtml
+http://www.edu.cn/20050530/3139084.shtml
+http://www.edu.gov.on.ca/eng/document/curricul/secondary/business/busiful.html
+http://www.edu.gov.on.ca/eng/document/discussi/degree/degree.html
+http://www.edu.gov.on.ca/eng/general/college/progstan/broadcst/radio.html
+http://www.edu.helsinki.fi/activity/pages/chatanddwr/activitysystem/
+http://www.educ.iastate.edu/newvisions/newsite/docarch/trr/1999discuss.html
+http://www.educ.iastate.edu/nflrc/news/200402/homepage.html
+http://www.educaid.com/learningcenter/financialaid.htm
+http://www.educarer.com/culture-who-are-you.htm
+http://www.educarer.com/current-article-relationships.htm
+http://www.education-reform.net/follow_leader.htm
+http://www.education-world.com/
+http://www.education-world.com/a_admin/admin126.shtml
+http://www.education-world.com/a_books/books146.shtml
+http://www.education-world.com/a_curr/curr037.shtml
+http://www.education-world.com/a_curr/curr134.shtml
+http://www.education-world.com/a_curr/curr154.shtml
+http://www.education-world.com/a_curr/curr167.shtml
+http://www.education-world.com/a_curr/curr171.shtml
+http://www.education-world.com/a_curr/curr179.shtml
+http://www.education-world.com/a_curr/curr217.shtml
+http://www.education-world.com/a_curr/curr241.shtml
+http://www.education-world.com/a_curr/curr310.shtml
+http://www.education-world.com/a_curr/curr381.shtml
+http://www.education-world.com/a_curr/profdev053.shtml
+http://www.education-world.com/a_curr/strategy/strategy056.shtml
+http://www.education-world.com/a_issues/chat/chat010.shtml
+http://www.education-world.com/a_issues/chat/chat084.shtml
+http://www.education-world.com/a_lesson/
+http://www.education-world.com/a_lesson/03/lp312-02.shtml
+http://www.education-world.com/a_lesson/lesson/lesson009.shtml
+http://www.education-world.com/a_lesson/lesson/lesson073.shtml
+http://www.education-world.com/a_lesson/lesson073.shtml
+http://www.education-world.com/a_lesson/lesson196.shtml
+http://www.education-world.com/a_tech/tech035.shtml
+http://www.education-world.com/a_tech/tech041.shtml
+http://www.education-world.com/a_tech/tech145.shtml
+http://www.education-world.com/best_of/1999/articles_curr.shtml
+http://www.education-world.com/parents/activities/index.shtml
+http://www.education-world.com/tools_templates/index.shtml
+http://www.education.gov.ab.ca/k_12/testing/diploma/bulletins/humanities/eng301/part_a_example.asp
+http://www.education.gov.ab.ca/k_12/testing/diploma/dip_gib/admin.asp
+http://www.education.gov.ab.ca/news/1997nr/may97/nr-Vegreville.asp
+http://www.education.gov.ab.ca/news/1998nr/May98/NRglobal.asp
+http://www.education.ie/home/home.jsp?pcategory=10917&ecategory=27180&language=EN&letter=M
+http://www.education.ky.gov/KDE/Instructional+Resources/Curriculum+Documents+and+Resources/Library+Media/
+http://www.education.tas.gov.au/delic/publications/physics.htm
+http://www.education.tas.gov.au/equitystandards/esl/overview/eslrole.htm
+http://www.education.theage.com.au/history.asp
+http://www.education.theage.com.au/pagedetail.asp?intpageid=863&strsection=students&intsectionid=0
+http://www.education.ucsb.edu/tep/
+http://www.educationaladvancement.org/resources/search/testing_search.php
+http://www.educationallearninggames.com/the-ungame-cards-family.asp
+http://www.educationallearninggames.com/ungame-christian.asp
+http://www.educationallearninggames.com/ungame.asp
+http://www.educationarcade.org/modules.php?op=modload&name=Sections&file=index&req=printpage&artid=72
+http://www.educationdirect.com/computerscience/
+http://www.educationet.org/
+http://www.educationforthepeople.org/Background%2097statement.htm
+http://www.educationnews.org/George-Scott-Senior-Editorial-Writer.htm
+http://www.educationnews.org/blame-game.htm
+http://www.educationnews.org/letter-from-a-frustrated-english.htm
+http://www.educationnext.org/20013/38moe.html
+http://www.educationnext.org/20014/56.html
+http://www.educationnext.org/2001sp/65.html
+http://www.educationnext.org/20021/50.html
+http://www.educationnext.org/20022/73.html
+http://www.educationnext.org/20031/73.html
+http://www.educationnext.org/20032/68.html
+http://www.educationnext.org/20033/14.html
+http://www.educationnext.org/20033/71.html
+http://www.educationnext.org/20042/30.html
+http://www.educationnext.org/20052/65.html
+http://www.educationpays.org/rreport.asp
+http://www.educationpolicy.org/files/neaftbk/book0004.htm
+http://www.educationworld.com/a_admin/admin/admin297.shtml
+http://www.educationworld.com/a_admin/admin/admin389.shtml
+http://www.educationworld.com/a_curr/columnists/jones/jones014.shtml
+http://www.educationworld.com/a_curr/profdev/profdev039.shtml
+http://www.educationworld.com/a_issues/chat/chat071.shtml
+http://www.educationworld.com/a_lesson/02/lp290-02.shtml
+http://www.educationworld.com/a_lesson/lesson154.shtml
+http://www.educationworld.com/a_lesson/lesson242.shtml
+http://www.educause.edu/Browse/645?PARENT_ID=329
+http://www.educause.edu/Browse/705?ITEM_ID=213
+http://www.educause.edu/January282004/1924
+http://www.educause.edu/apps/coredata/members.asp
+http://www.educause.edu/pub/er/erm04/erm0452.asp
+http://www.edufind.com/english/grammar/ADVERBS7.cfm
+http://www.eduplace.com/math/mw/background/1/11/te_1_11_intervals_ask.html
+http://www.eduplace.com/parents/homework/ss/ss8.html
+http://www.eduplace.com/parents/ss8.html
+http://www.eduplace.com/tview/pages/g/The_Great_Kapok_Tree_Lynne_Cherry.html
+http://www.eduplace.com/tview/rules.html
+http://www.eduref.org/lm_net/directory/o's.htm
+http://www.eduresources.net/science/general/bsa40.htm
+http://www.eduskunta.fi/kirjasto/Home/Julkaisut/Puheita/change-management.htm
+http://www.edutopia.org/modules/LASS/index.php
+http://www.edutopia.org/php/article.php?id=Art_1048&key=189
+http://www.edutopia.org/php/article.php?id=Art_798&key=039
+http://www.eduweb.vic.gov.au/sofweb/science/sampleprogram/early/unitdesc.htm
+http://www.edwalicki.com/studio_tour.htm
+http://www.edwardhugh.net/deflation.html
+http://www.edwardhumes.com/books/baby_er/index.shtml
+http://www.edwardsaquifer.net/medina.html
+http://www.edwardsvilleonline.com/stmary/SCHOOL/policies.htm
+http://www.edwardtbabinski.us/creationism/leaving_yec.html
+http://www.edwardtbabinski.us/religion/cross_evangelist.html
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000D1&topic_id=1
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000Jr&topic_id=1
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000M7&topic_id=1
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000ml&topic_id=1
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0001FG&topic_id=1
+http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0001pB&topic_id=1
+http://www.edwebproject.org/carter.html
+http://www.edwebproject.org/edref.choice.html
+http://www.edwebproject.org/susanne/luangprabang1.html
+http://www.edweek.org/agentk-12/2004/12/15/12market_cc.html
+http://www.edweek.org/agentk-12/articles/2005/03/30/29working.h24.html
+http://www.ee-21.net/projects/show_project.php?pid=254539254333254141254343253934253544
+http://www.ee-21.net/projects/show_project.php?pid=254539254337254141254343253934253544
+http://www.ee.columbia.edu/~sfchang/talks.html
+http://www.ee.gatech.edu/users/3304/icassp96/guide/tutorial.html
+http://www.ee.ryerson.ca:8080/~elf/abacus/history.html
+http://www.ee.scu.edu/eefac/healy/Ibsen4.html
+http://www.ee.upenn.edu/rca/instruments/misctutorials/Ground/grd.html
+http://www.ee.vt.edu/~ha/research/research.html
+http://www.ee.washington.edu/conselec/CE/kuhn/hdtv/95x5.htm
+http://www.eecis.udel.edu/~mills/exec.html
+http://www.eecs.harvard.edu/cs245/pughadvice.html
+http://www.eecs.umich.edu/~lnewton/music/JarrettSketch.html
+http://www.eecufresno.org/security.html
+http://www.eeel.nist.gov/817/817g/acdc.html
+http://www.eehealy.com/healy1.html
+http://www.eelaart.com/control.htm
+http://www.eeoc.gov/abouteeoc/35th/voices/making.html
+http://www.eeoc.gov/abouteeoc/plan/par/2004/management_discussion.html
+http://www.eeoc.gov/ada/adahandbook.html
+http://www.eeoc.gov/policy/docs/qanda-inquiries.html
+http://www.eera.ac.uk/networks/reports00/n14_00.html
+http://www.eera.gov.uk/category.asp?cat=392
+http://www.eere.energy.gov/buildings/info/components/envelope/framing/strawbale.html
+http://www.eere.energy.gov/buildings/info/design/integratedbuilding/passive.html
+http://www.eere.energy.gov/consumerinfo/factsheets/aircond.html
+http://www.eere.energy.gov/consumerinfo/factsheets/bc2.html
+http://www.eere.energy.gov/consumerinfo/factsheets/bd4.html
+http://www.eere.energy.gov/consumerinfo/factsheets/eb9.html
+http://www.eere.energy.gov/consumerinfo/factsheets/ed4.html
+http://www.eere.energy.gov/consumerinfo/factsheets/eewindows.html
+http://www.eere.energy.gov/consumerinfo/factsheets/eewindows.html?print
+http://www.eere.energy.gov/consumerinfo/factsheets/hydropower.html
+http://www.eere.energy.gov/consumerinfo/factsheets/passive_solar.html
+http://www.eere.energy.gov/consumerinfo/factsheets/pool_covers.html
+http://www.eere.energy.gov/consumerinfo/factsheets/pool_covers.html?print
+http://www.eere.energy.gov/consumerinfo/factsheets/pool_heatpumps.html
+http://www.eere.energy.gov/consumerinfo/factsheets/savenrgy.html
+http://www.eere.energy.gov/femp/technologies/techdemo_comp1.cfm
+http://www.eere.energy.gov/femp/technologies/techdemo_comp1.cfm?print
+http://www.eere.energy.gov/news/archive.cfm/pubDate=%7Bd%20'2002-01-23'%7D
+http://www.eere.energy.gov/solar_decathlon/faqs.html
+http://www.eere.energy.gov/troughnet/component_dev.html
+http://www.eesi.org/programs/agriculture/RFS.htm
+http://www.eesi.org/publications/Fact%20Sheets/RFS_issue_summary.htm
+http://www.eeye.com/html/Research/Advisories/AL20010717.html
+http://www.efa.org.au/Issues/Privacy/spam.html
+http://www.efa.org.au/Publish/tape5.htm
+http://www.efc.ca/pages/pr/efc-pr.22apr99.html
+http://www.efca.org/campaign/faq/
+http://www.efcer.org/resources/answers/salvation.html
+http://www.efcf.com/media/ep030727.shtml
+http://www.efda-taskforce-itm.org/MainSite/main.htm
+http://www.efdeportes.com/efd57/cancer1.htm
+http://www.eff.org/IP/?f=Apple_Complaint.html
+http://www.eff.org/Privacy/Crypto_export/Bernstein_case/Legal/
+http://www.eff.org/Privacy/cappsii/concern.php
+http://www.eff.org/broadcastflag/cookbook/
+http://www.eff.org/congress/
+http://www.eff.org/legal/cases/EFGA_v_GA/960924_troyer.affidavit
+http://www.eff.org/news/archives/2004_06.php
+http://www.eff.org/news/archives/2004_10.php
+http://www.eff.org/news/archives/2005_01.php
+http://www.eff.org/patriot/
+http://www.eff.org/wp/eula.php
+http://www.effectingchange.luton.ac.uk/leading_change/index.php?content=legal&a=p
+http://www.effectiveorganization.com/www/displayarticle.asp?ArticleID=163
+http://www.effingpot.com/slang.shtml
+http://www.efinanceinsider.com/email10802.htm
+http://www.efineantiques.com/empress.htm
+http://www.efl-law.com/contracts.html
+http://www.efl.lk/biosafety.html
+http://www.efloristsrus.com.au/
+http://www.efloristsrus.com.au/asp/welcome.asp
+http://www.efmd.org/html/Knowledge/cont_detail.asp?id=041103sqlv&aid=050112rpjt&tid=1
+http://www.efmoody.com/planning/cd.html
+http://www.efn.org/~fairhous/usc4245.html
+http://www.efn.org/~rick/trips/asia2000/
+http://www.efnet-math.org/math_tech/trig0.html
+http://www.efomp.org/policy/policy8.html
+http://www.efpa.be/taskpagina.htm
+http://www.efsa.eu.int/science/biohaz/biohaz_documents/787_en.html
+http://www.efsa.eu.int/science/biohaz/biohaz_documents/catindex_en.html
+http://www.efsec.wa.gov/cert.html
+http://www.efsol.com/golden.html
+http://www.eftasurv.int/?1=1&showLinkID=587&1=1
+http://www.eftours.ca/public/magazine/glspotlight.asp
+http://www.eftours.ca/public/magazine/issues/2002_07/idea.asp
+http://www.eftours.com/public/magazine/issues/2002_07/idea.asp
+http://www.efuse.com/Design/wa-voice.html
+http://www.efuse.com/Design/wa-writing_and_the_web.htm
+http://www.egaa.org/policies.htm
+http://www.egale.ca/features/employer.htm
+http://www.egale.ca/index.asp?lang=E&menu=33&item=169
+http://www.egee.nesc.ac.uk/schedreg/
+http://www.egglestontrust.com/df_intro.html
+http://www.eglobalhealth.com/OutreachProducts.html
+http://www.egoli.com.au/egoli/egoliEducationPage.asp?PageID=%7B856FE4C9-BAD1-4282-B2CC-CC1FEA713E7C%7D
+http://www.egonzehnderknowledge.com/knowledge/content/articles/index.php?article=911
+http://www.egos.co.uk/offshore.HTM
+http://www.egov4dev.org/etranscostbenef.htm
+http://www.egov4dev.org/gyandoot.htm
+http://www.egov4dev.org/impactfailure.htm
+http://www.egr.msu.edu/age/aenewsletter/ae_1_99/ae_1_99.htm
+http://www.egr.msu.edu/~lira/supp/steam/
+http://www.egr.uh.edu/parameters/fall2002/?e=classnotes
+http://www.egr.vcu.edu/me/faculty/me-faculty_tepper.html
+http://www.egrad.com/index.cfm?action=story&iStoryID=271&sectionID=98&subsectionID=102
+http://www.egreeley.com/noticeboard.html
+http://www.egreenway.com/months/monaug.htm
+http://www.egreenway.com/vsjournal/vsjindex.htm
+http://www.egs.edu/faculty/greenaway-resources.html
+http://www.egtaguitarforum.org/ExtraArticles/ingram.html
+http://www.egy.com/historica/97-07-05.shtml
+http://www.egyptmagic.com/
+http://www.egyptmagic.com/visit_redsea.htm
+http://www.egyptmyway.com/articles/mastaba_ti2.html
+http://www.egyptmyway.com/hotels/luxor/isisluxor.html
+http://www.egyptmyway.com/north_coast.html
+http://www.eh.net/bookreviews/library/0518.shtml
+http://www.eh.net/bookreviews/library/easterlin.shtml
+http://www.eh.net/bookreviews/library/grantham.shtml
+http://www.eh.net/encyclopedia/?article=cowen.banking.first_bank.us
+http://www.eh.net/encyclopedia/?article=noll.publicdebt
+http://www.eh.net/hmit/compare/
+http://www.eh.uc.edu/imby/friends.asp
+http://www.eham.net/reviews/detail/1683
+http://www.eharlequin.com/cms/learntowrite/ltwArticle.jhtml?pageID=040601wo02001
+http://www.eharmony.com/core/eharmony?cmd=community-spokespeople
+http://www.ehcs.org/
+http://www.ehealthnurse.com/ehealthi.html
+http://www.ehendrick.org/healthy/003975.htm
+http://www.ehistory.com/uscw/features/articles/0005/vivandieres.cfm
+http://www.ehistory.com/uscw/library/or/108/0981.cfm
+http://www.ehistory.com/world/PeopleView.Cfm?PID=48
+http://www.eho.org/features/article.asp?articleid=187&resourceid=270&topicid=16
+http://www.ehotelbooking.com/thailand/bangkok/sathornvilla/Index.htm
+http://www.ehotelier.com/browse/foodbeverage.php
+http://www.ehotelier.com/news/08/Aug13.htm
+http://www.ehow.com/how_109434_sell-used-baby.html
+http://www.ehow.com/how_109609_buy-bonds.html
+http://www.ehow.com/how_11042_block-straight-punch.html
+http://www.ehow.com/how_111364_shop-warehouse-stores.html
+http://www.ehow.com/how_111790_buy-weight-lifting.html
+http://www.ehow.com/how_12542_research-salary-ranges.html
+http://www.ehow.com/how_12803_aromatherapy-constipation.html
+http://www.ehow.com/how_14336_start-glass-collection.html
+http://www.ehow.com/how_14369_research-salary-ranges.html
+http://www.ehow.com/how_18010_defend-yourself-traffic.html
+http://www.ehow.com/how_9119_run-with-dog.html
+http://www.ehow.com/tips_4743.html
+http://www.ehs.buffalo.edu/food/food.htm
+http://www.ehs.psu.edu/paint/lead.html
+http://www.ehs.ucsf.edu/Manuals/BSM/oehsBSMC12.asp
+http://www.ehs.ucsf.edu/Manuals/RSM/oehsRSMC5.asp
+http://www.ehs.ucsf.edu/Manuals/RSTM/RSTM%20chap9.htm
+http://www.ehs.ufl.edu/General/fallprot.htm
+http://www.ehsco.com/opinion/19980209.html
+http://www.ehsco.com/opinion/20010305.html
+http://www.ehsni.gov.uk/natural/country/70.shtml
+http://www.ehss.vt.edu/Programs/OHIH/Resp/RespiratoryFAQs.htm
+http://www.ehw.org/Lead/LEAD_home3.htm
+http://www.ei-ie.org/ressourc/english/erec1966.htm
+http://www.eia.doe.gov/emeu/cabs/archives/africa/africa.html
+http://www.eia.doe.gov/emeu/cabs/archives/africa/chapter3.html
+http://www.eia.doe.gov/emeu/cabs/archives/africa/chapter6.html
+http://www.eia.doe.gov/emeu/cabs/indoe.html
+http://www.eia.doe.gov/emeu/cabs/safrenv.html
+http://www.eia.doe.gov/emeu/cabs/safrica.html
+http://www.eia.doe.gov/emeu/cabs/usa.html
+http://www.eia.doe.gov/emeu/consumptionbriefs/transportation/rtecs_fuel_economy.html
+http://www.eia.doe.gov/emeu/efficiency/ee_ch3.htm
+http://www.eia.doe.gov/emeu/finance/fdi/
+http://www.eia.doe.gov/emeu/steo/pub/special/mtbecost.html
+http://www.eia.doe.gov/emeu/steo/pub/steo.html
+http://www.eia.doe.gov/kids/energyfacts/saving/recycling/solidwaste/paperandglass.html
+http://www.eia.doe.gov/kids/energyfacts/sources/non-renewable/nuclear.html
+http://www.eia.doe.gov/kids/energyfacts/sources/non-renewable/oil.html
+http://www.eia.doe.gov/kids/energyfacts/sources/renewable/wind.html
+http://www.eia.doe.gov/neic/aboutEIA/budget.htm
+http://www.eia.doe.gov/neic/brochure/ieps2001/chapter1.html
+http://www.eia.doe.gov/oiaf/1605/gg00rpt/emission.htm
+http://www.eia.doe.gov/oiaf/1605/gg97rpt/chap2.html
+http://www.eia.doe.gov/oiaf/aeo/economic.html
+http://www.eia.doe.gov/oiaf/economy/energy_price.html
+http://www.eia.doe.gov/oiaf/issues/wind_supply.html
+http://www.eia.doe.gov/oiaf/kyoto3/chapter2.html
+http://www.eia.doe.gov/oiaf/kyoto3/execsummary.html
+http://www.eia.doe.gov/oiaf/servicerpt/fuel/ozone.html
+http://www.eia.doe.gov/oiaf/servicerpt/natgas/preface.html
+http://www.eia.doe.gov/oiaf/servicerpt/naturalgas/chapter_2.html
+http://www.eia.doe.gov/oiaf/servicerpt/subsidy/introduction.html
+http://www.eia.doe.gov/oiaf/servicerpt/subsidy1/exec_summary.html
+http://www.eia.doe.gov/oiaf/servicerpt/subsidy1/summary.html
+http://www.eia.doe.gov/pub/oil_gas/petroleum/analysis_publications/oil_market_basics/Price_transactions.htm
+http://www.eia.doe.gov/pub/oil_gas/petroleum/analysis_publications/oil_market_basics/Supply_text.htm
+http://www.eib.org/site/index.asp?designation=environment
+http://www.eibis.com/eibis/eibiswww/eibisdoc/4186en.htm
+http://www.eic.ac.cy/EN/E-Dec01.htm
+http://www.eighthsquare.com/strongspirit.html
+http://www.eijkhout.net/lead_follow/arm_tone.html
+http://www.eijkhout.net/lead_follow/connection.html
+http://www.eijkhout.net/lead_follow/multiple_turns.html
+http://www.eijkhout.net/lead_follow/wcs_specific.html
+http://www.einnews.com/mediakit/awards.php
+http://www.einnews.com/pennsylvania/
+http://www.einnews.com/russia/florists.php
+http://www.einnews.com/uk/newsfeed-DavidBlunkett
+http://www.einsteinconspiracy.co.uk/c11.htm
+http://www.einsteinyear.org/facts/physicsFacts
+http://www.eireview.com/standard/faqs/hs-faqs.htm
+http://www.eiro.eurofound.eu.int/1997/12/feature/de9712251f.html
+http://www.eiro.eurofound.eu.int/1998/10/feature/ie9810261f.html
+http://www.eiro.eurofound.eu.int/1999/06/feature/eu9906178f.html
+http://www.eiro.eurofound.eu.int/2001/06/feature/se0106105f.html
+http://www.eiro.eurofound.eu.int/2002/01/feature/no0201187f.html
+http://www.eiro.eurofound.eu.int/2003/country/ireland.html
+http://www.eiro.eurofound.eu.int/2004/06/inbrief/at0406201n.html
+http://www.eiro.eurofound.eu.int/2004/06/tfeature/no0406103t.html
+http://www.eiro.eurofound.eu.int/2004/08/feature/ie0408203f.html
+http://www.eiro.eurofound.eu.int/2004/11/inbrief/se0411102n.html
+http://www.eiro.eurofound.eu.int/print/1999/06/feature/eu9906178f.html
+http://www.eis-learnrep.org.uk/
+http://www.eis.org.uk/
+http://www.eisschool.co.uk/opportunities.html
+http://www.eiu.com/site_info.asp?info_name=ps_cityData&entry1=psNav&page=noads
+http://www.eiu.edu/~finaid/scholarships/fcs.htm
+http://www.eiu.edu/~localite/coles/mattoon/street_fairs/
+http://www.eiy.co.uk/events.htm
+http://www.ejc.nl/hp/je/publicfigure.html
+http://www.ejcl.org/52/art52-3.html
+http://www.ejcl.org/64/art64-20.html
+http://www.ejectejecteject.com/cgi-bin/mt-comments.cgi?entry_id=118
+http://www.ejectorseats.co.uk/russia.htm
+http://www.ejeg.com/volume-2/volume2-issue3/v2-i3-art4.htm
+http://www.ejfi.org/DV/dv-21.htm
+http://www.ejil.org/journal/Vol2/No1/sr1-01.html
+http://www.ejil.org/journal/Vol7/No1/art1-01.html
+http://www.ejil.org/journal/Vol9/No2/sr1-07.html
+http://www.ejnet.org/rachel/rhwn248.htm
+http://www.ejrc.cau.edu/ISEEWEB98.htm
+http://www.ejumpcut.org/archive/jc44.2001/garcia/garciaforsite.html
+http://www.ejumpcut.org/currentissue/KillBill/text.html
+http://www.ejumpcut.org/gatewaypages/aboutus.html
+http://www.ekcep.org/Archive/EdDeptScholarships.htm
+http://www.ekcsk12.org/elem/standards.html
+http://www.ekkane.org/Biographies/ladies_repository_excerpt_1856.htm
+http://www.ektopia.co.uk/ektopia/archives/2004/08/
+http://www.el-comandante.com/mayday.htm
+http://www.el-haqq.com/Islamic_Knowledge/Worship/benefits/benefits.html
+http://www.ela-iet.com/el04000.htm
+http://www.elaineflinn.com/chapter1.htm
+http://www.elainemcewan.com/otherissuescaqs.htm
+http://www.elationlighting.com/warranty.asp
+http://www.elaw.org/resources/text.asp?id=1089
+http://www.elbornes.com/articles/employment/emp_0011.htm
+http://www.elc.jcu.edu.au/accom_options_tsv.shtml
+http://www.elc.org.uk/pages/news_family_poisoned.htm
+http://www.elca.org/candidacy/vision_aim.html
+http://www.elca.org/co/news/images.peace_initiative.html
+http://www.elca.org/disaster/durham_township.html
+http://www.elca.org/jle/articles/contemporary_issues/article.stiltner_brian_pf.html
+http://www.elca.org/schools/perspviolence.html
+http://www.elca.org/youth/helpsheets/riskybus.html
+http://www.elchempub.com/epfiles/ep27.htm
+http://www.elcic.ca/steward/mno/tcalendar.html
+http://www.elcsads-lwf.org/archive/development.html
+http://www.elderhostel.org/about/questions_default.asp
+http://www.eldis.org/static/DOC14815.htm
+http://www.eldrbarry.net/mous/rflt/eb03.htm
+http://www.eldritchpress.org/chh/h1.html
+http://www.eldritchpress.org/chh/h6.html
+http://www.eldritchpress.org/nh/pfenb01.html
+http://www.eldritchpress.org/nh/vir.html
+http://www.elearnaid.com/elearnaid/oedoxendisee1.html
+http://www.elearnaid.com/oedoxendicse.html
+http://www.elearnaid.com/oedoxendisee1.html
+http://www.elearningeuropa.info/index.php?page=doc&doc_id=5082&doclng=6&menuzone=2%20
+http://www.elearningeuropa.info/index.php?page=doc&doc_id=5103&doclng=1&mtopic=5
+http://www.elearningmag.com/ltimagazine/article/articleDetail.jsp?id=36878
+http://www.elearningpost.com/features/archives/001859.asp
+http://www.elearningpost.com/features/archives/002099.asp
+http://www.elearningpost.com/features/archives/006742.asp
+http://www.elearningtoys.com/PROD/Fairies_Stained_Glass_Coloring_Book_Dover423855
+http://www.elearnspace.org/Articles/Preparingstudents.htm
+http://www.elearnspace.org/Articles/connectivism.htm
+http://www.elearnspace.org/Articles/wholepicture.htm
+http://www.elec.uq.edu.au/~rae/LyX/
+http://www.elec.york.ac.uk/comms/researchdegrees.html
+http://www.elecdesign.com/
+http://www.electionprojection.com/archives090104.html
+http://www.electionprojection.com/archives100104.html
+http://www.electionprojection.com/essay1.html
+http://www.elections2004.eu.int/highlights/en/401.html
+http://www.electionsalberta.ab.ca/annualrpt24th.html
+http://www.electrician.com/articles/driller_accident.htm
+http://www.electricityindia.org/workshops.php
+http://www.electricquilt.com/Albums/04/0404/0404p4.htm
+http://www.electricscotland.com/burns/rburns.html
+http://www.electricscotland.com/canada/fraser/eliza_fraser.htm
+http://www.electricscotland.com/canada/guelph/studies2.htm
+http://www.electricscotland.com/espeople/
+http://www.electricscotland.com/familytree/magazine/febmar2004/burns.htm
+http://www.electricscotland.com/history/australia/scotsin_australia.htm
+http://www.electricscotland.com/history/castles/dunnottar.htm
+http://www.electricscotland.com/history/charles/44.htm
+http://www.electricscotland.com/history/highlands/2no13.htm
+http://www.electricscotland.com/history/ho4.htm
+http://www.electricscotland.com/history/leith/4.htm
+http://www.electricscotland.com/history/mcintyre/chap22.htm
+http://www.electricscotland.com/history/mcintyre/chap26.htm
+http://www.electricscotland.com/history/other/scott/lesleys_march.htm
+http://www.electricscotland.com/history/prussia/part1-7.htm
+http://www.electricscotland.com/history/wallace.htm
+http://www.electricscotland.com/history/wylie/vol1ch26.htm
+http://www.electricscotland.com/music/tales/doris.htm
+http://www.electricscotland.com/poetry/logue/logue6.htm
+http://www.electricscotland.com/webclans/m/maclach2.html
+http://www.electro-optical.com/whitepapers/candela.htm
+http://www.electrodrive.com.my/products/cleaner.htm
+http://www.electroherbalism.com/Naturopathy/SelfEducationTips.htm
+http://www.electroline.com.au/elc/feature_article/item_022002b.asp
+http://www.electroline.com.au/elc/feature_article/item_072003a.asp
+http://www.electromagnetism.demon.co.uk/19161.htm
+http://www.electronic-school.com/0198f1.html
+http://www.electronic-school.com/0198f4.html
+http://www.electronic-school.com/0696f4.html
+http://www.electronic-school.com/0995ew1.html
+http://www.electronic-school.com/0996f7.html
+http://www.electronic-school.com/199909/0999f4.html
+http://www.electronic-school.com/2000/03/0300f1.html
+http://www.electronicappraiser.com/Questions
+http://www.electroniccottage.com/websiteinfo.html
+http://www.electronicproducts.com/ShowPage.asp?FileName=spiratech.jun2005.HTML
+http://www.electronicstalk.com/news/doc/doc631.html
+http://www.electronicstalk.com/news/hlt/hlt111.html
+http://www.electronicstoday.org/Emerging_Trends.htm
+http://www.electronixwarehouse.com/humor/animal-farm.htm
+http://www.electronpusher.org/
+http://www.electrovoice.com/Electrovoice3/features.nsf/allpages/736CC646759BA5B586256F82005F4232
+http://www.eleganza.com/fresco-minoan-gallery/1-01-wall-murals-akrotiri.html
+http://www.elementk.com/ourcompany/htm/jobopenings.asp
+http://www.elementk.com/training_advice/htm/05-03-whenwillwelearn.asp
+http://www.elenasmodels.com/
+http://www.elenasmodels.com/?goto=liliya
+http://www.elenasmodels.com/?goto=wesse
+http://www.elenasmodels.com/index.php?list=profile_fav&m=s
+http://www.elenasmodels.com/index.php?list=profile_fav&method=showhtmllist
+http://www.elenasmodels.com/services/ads.htm
+http://www.elenasmodels.com/services/listings.htm
+http://www.elephantpharmacy.com/calendar/events/days/2003/08/16_Sat.php
+http://www.elfrock.com/wildernesssanctuary/shelters2/annaCV.html
+http://www.elfsoft.com/ns/demos.htm
+http://www.elgee.com/about_us.html
+http://www.eli.sdsu.edu/courses/fall95/cs596_1/notes/class3/Class3.html
+http://www.eli.ufl.edu/firsttime/publications/ELI-Gator/spring99.htm
+http://www.eli.ufl.edu/firsttime/publications/voices/spring992.htm
+http://www.elib.scot.nhs.uk/portal/elib/Pages/help/Help.aspx?nid=46507
+http://www.elijahfan.com/index.php?subaction=showcomments&id=1099352538&archive=&start_from=&ucat=1&
+http://www.elinfonet.com/fedarticles/7/4
+http://www.elise.com/lmtstore/B000051SEP/Suunto_X-Lander_Wristop_Computer_Watch_w_Altimeter_Barometer_Compass__Chronograph.html
+http://www.elisiegel.net/poetry/Dissatisfaction-MC.htm
+http://www.elite.net/~ebedyah/PastorsSite/weeklystudies/questionsalways/study4.htm
+http://www.eliteskills.com/c/3623
+http://www.eliteskills.com/c/562
+http://www.eliteskills.com/c/571
+http://www.eliteskills.com/c/589
+http://www.eliteskills.com/z/25377
+http://www.elitestv.com/pub/2005/Mar/EEN4235de4b35060.html
+http://www.eliwhitney.org/arms.htm
+http://www.elixa.com/float/floatREST.htm
+http://www.elixa.com/mattress/mattress.htm
+http://www.elizabethbauchner.info/columns/throw.html
+http://www.elizabethbauchner.info/columns2004/samesex.html
+http://www.elizabethi.org/us/essays/marriage.htm
+http://www.elizabethsoutter.com/
+http://www.ellaz.com/AI/Tips.aspx
+http://www.ellegirl.com/article/article.do?articleId=2612
+http://www.ellegirl.com/article/article.do?articleId=2840&layout=print-layout.vm
+http://www.ellenhume.com/articles/talkshow2.htm
+http://www.ellensburgextreme.com/news/
+http://www.ellenwhite.org/canright/can9.htm
+http://www.ellipsispartners.com/about_us/consultants.html
+http://www.elliptical-trainer-guide.com/catalog/shop/Star_Trac_Natural_Runner_Elliptical_Trainer
+http://www.elmbrook.org/finearts/index.shtml
+http://www.elmhurst.k12.il.us/publications/Welcome_to_BOE.htm
+http://www.elmoreoil.com.au/sports_massage_relief.html
+http://www.elmstocktea.com.au/body_about_tea.html
+http://www.eloisajames.com/bookshelf/enchanting.html
+http://www.eloisajames.com/bookshelf/talk.html
+http://www.elotouch.com/company/elopress/closegap.asp
+http://www.elpasotimes.com/apps/pbcs.dll/article?AID=/20050701/NEWS/507010349/1001
+http://www.elpasotimes.com/openmic/012105marina.html
+http://www.elroy.net/ehr/abortionanswers.html
+http://www.elroy.net/ehr/aboutelroy.html
+http://www.elroy.net/ehr/dountoothers.html
+http://www.elroy.net/ehr/fascism.html
+http://www.elroy.net/ehr/steps.html
+http://www.elsevier.com/locate/ijsolstr
+http://www.elsevier.com/wps/product/cws_home/600644
+http://www.elsevier.com/wps/product/cws_home/706498
+http://www.elsevier.com/wps/product/editors/600644
+http://www.elt-online.co.uk/bookacourse.htm
+http://www.eltnews.com/jobs/
+http://www.elumax.com/en/contact.asp
+http://www.elvenwork.com/book_1.html
+http://www.elwa.ac.uk/elwaweb/elwa.aspx?pageid=2216
+http://www.elwa.ac.uk/elwaweb/elwa.aspx?pageid=2216&tx=y
+http://www.elwa.org.uk/elwaweb/elwa.aspx?pageid=2216
+http://www.elysianholidays.co.uk/?Module=VillaDetails&VillaID=9236&CurrencyCode=
+http://www.ema.org.nz/
+http://www.emag.org.uk/committee_minutes/cm100703.htm
+http://www.email4property.co.uk/wimbledon-village/estate-agents.htm
+http://www.emailreplies.com/
+http://www.emalaysiahotel.com/placesofinterests/sabah/
+http://www.emanet.org/postgraduate/
+http://www.emaxhealth.com/23/2212.html
+http://www.emayzine.com/lectures/writing.htm
+http://www.embedded.com/showArticle.jhtml?articleID=16100908
+http://www.embedded.com/showArticle.jhtml?articleID=20000085
+http://www.embl-heidelberg.de/Conferences/SciSoc02/c2002/cfeedback02.html
+http://www.embl-heidelberg.de/ExternalInfo/fuller/icos0.html
+http://www.embo.org/fellowships/
+http://www.embo.org/fellowships/fellow_guide.html
+http://www.embo.org/projects/fellowsnet/survey2000.html
+http://www.embo.org/projects/world/
+http://www.embratur.gov.br/en/segmento/ver.asp?ServicoId=60&id=387
+http://www.emc.com/ir/annual/annual95/annual_sony_union.htm
+http://www.emc.maricopa.edu/faculty/farabee/BIOBK/BioBookEVOLII.html
+http://www.emc.maricopa.edu/faculty/farabee/BIOBK/BioBookPLANTANAT.html
+http://www.emc.maricopa.edu/faculty/farabee/BIOBK/BioBookintro.html
+http://www.emcc.eurofound.eu.int/content/source/eu04017a.html?p1=ef_publication&p2=null
+http://www.emcit.com/emcit047.shtml
+http://www.emcit.com/emcit109.shtml
+http://www.emcit.com/emcit113.shtml
+http://www.emcit.com/hugo_types.shtml
+http://www.emcreg.org/history.html
+http://www.emd.dk/energyPRO/Price%20List/
+http://www.emeap.org/whats.htm
+http://www.emediacommunications.biz/articles.html
+http://www.emediawire.com/
+http://www.emedicine.com/MED/topic855.htm
+http://www.emedicine.com/PED/topic286.htm
+http://www.emedicine.com/aaem/topic290.htm
+http://www.emedicine.com/derm/topic342.htm
+http://www.emedicine.com/emerg/topic387.htm
+http://www.emedicine.com/ent/topic685.htm
+http://www.emedicine.com/med/topic1193.htm
+http://www.emedicine.com/med/topic2011.htm
+http://www.emedicine.com/med/topic2980.htm
+http://www.emedicine.com/med/topic3281.htm
+http://www.emedicine.com/med/topic3386.htm
+http://www.emedicine.com/med/topic782.htm
+http://www.emedicine.com/med/topic855.htm
+http://www.emedicine.com/med/topic959.htm
+http://www.emedicine.com/oph/topic552.htm
+http://www.emedicine.com/orthoped/topic451.htm
+http://www.emedicine.com/ped/topic2117.htm
+http://www.emedicine.com/ped/topic2494.htm
+http://www.emedicine.com/plastic/topic424.htm
+http://www.emedicine.com/pmr/topic25.htm
+http://www.emedicine.com/radio/topic668.htm
+http://www.emedicinehealth.com/Articles/19039-1.asp
+http://www.emedicinehealth.com/articles/13891-1.asp
+http://www.emedicinehealth.com/articles/17113-3.asp
+http://www.emedicinehealth.com/articles/19039-1.asp
+http://www.emedicinehealth.com/articles/5962-6.asp
+http://www.emeraldbooks.com/astrology/stars/billhillary.html
+http://www.emergency.com/dhahnrpt.htm
+http://www.emergency.com/dtbankrb.htm
+http://www.emergency.com/nycbio98.htm
+http://www.emergency.com/stratknw.htm
+http://www.emergencydispatch.org/JOURNAL/articles/SP04domestic.html
+http://www.emergentmind.org/JNLRMI_I2.htm
+http://www.emergentmind.org/articles.htm
+http://www.emergic.org/archives/2004/06/28/
+http://www.emergic.org/archives/2004/09/29/
+http://www.emergic.org/archives/2005/06/24/
+http://www.emergic.org/collections/tech_talk_thinking_a_new_food_portal.html
+http://www.emergingdemocraticmajorityweblog.com/cgi/dr/mt-comments.cgi?entry_id=360
+http://www.emergingdemocraticmajorityweblog.com/donkeyrising/
+http://www.emergingdemocraticmajorityweblog.com/donkeyrising/archives/000321.php
+http://www.emergingdemocraticmajorityweblog.com/donkeyrising/archives/000481.php
+http://www.emergingdemocraticmajorityweblog.com/donkeyrising/archives/001025.php
+http://www.emergingdemocraticmajorityweblog.com/donkeyrising/index.php
+http://www.emergingleader.com/article27.shtml
+http://www.emergis.com/en/news_events/news/2005/april29.asp
+http://www.emergogroup.com/news_new_markets.htm
+http://www.emeriocorp.com/speak.htm
+http://www.emerling.com/service_dept.php3
+http://www.emersonvet.co.uk/
+http://www.emersonvet.co.uk/lost_found.php
+http://www.emeta.com/products/
+http://www.emhc.org/clinic/specialties/pulmonary.html
+http://www.emiclassics.com/phpNewSite/news/news.php?mode=archive
+http://www.emigrant.ie/
+http://www.emigrant.ie/category.asp?iCategoryID=200&iPage=6
+http://www.emigroup.com/news/pr258.html
+http://www.emilyslist.org/do/jobs/
+http://www.eminent.demon.co.uk/dgie.htm
+http://www.eminfo.com/article.asp?aid=21
+http://www.emints.org/ethemes/resources/S00001080.shtml
+http://www.emints.org/ethemes/resources/S00001382.shtml
+http://www.emints.org/ethemes/resources/by-title.shtml
+http://www.emmasdiary.co.uk/fi_moving_house.asp
+http://www.emmathevet.co.uk/pettalk.asp?id=27
+http://www.emmitsburg.net/gardens/articles/frederick/2001/fall_lawn_fertilization.htm
+http://www.emofree.com/cases/gymnast.htm
+http://www.emofree.com/palace/palaceof4.htm
+http://www.emory.edu/ACAD_EXCHANGE/2002/decjan/kellermannqa.html
+http://www.emory.edu/EDUCATION/mfp/jpluralism.html
+http://www.emory.edu/EDUCATION/mfp/kuhnsyn.html
+http://www.emory.edu/EDUCATION/mfp/tt1.html
+http://www.emory.edu/OXFORD/Publications/Review/reform.html
+http://www.emory.edu/netcom/RatesAndBilling/understandingstatement.htm
+http://www.emoryhealthcare.org/departments/Radiation/patient_info/treatment_cycle.html
+http://www.emotionallyengaged.com/newsletter_couples.htm
+http://www.emotrics.com/people/milton/papers/presenceEmot/
+http://www.emp-serv.com/hot9.html
+http://www.emp.ac.uk/programme/Stage_Two/
+http://www.empcol.com/Financial_Aid/financial_aid.html
+http://www.empereur.com/tanzania.html
+http://www.emperordivers.com/enews/2004_10.html
+http://www.emperorsherbologist.com/stevia-tea.shtml
+http://www.emphysema.net/art.html
+http://www.empire-town.org/land_definition.html
+http://www.empireclubfoundation.com/details.asp?SpeechID=1545&FT=yes
+http://www.empiremovies.com/reviews/reviews.php?id=1669
+http://www.empirenotes.org/shamelections.html
+http://www.empirepage.com/eye_from_albany/pb_802.html
+http://www.empiretickets.com/empiretickets/sports/ncaabasketball/illinois_tickets.asp
+http://www.empiretickets.com/empiretickets/sports/ncaafootball/illinois_tickets.asp
+http://www.empirewholesale.com/employment.htm
+http://www.emploisetc.ca/flmm.jsp?category_id=292&lang=e
+http://www.employeradvisorsnetwork.com/members/joesmith/training.asp
+http://www.employers.careers.utoronto.ca/services/rgestxt.asp?tr=
+http://www.employment-studies.co.uk/summary/summary.php?id=dobusbet
+http://www.employmentguide.com/careeradvice/Leading_the_Way_in_Diversity.html
+http://www.employmentmatters.net.nz/employmentmatters-textonly.asp?v=13&i=3
+http://www.employmentmatters.net.nz/employmentmatters-textonly.asp?v=14&i=2
+http://www.employmentmatters.net.nz/employmentmatters.asp?v=13&i=3
+http://www.employmentmatters.net.nz/employmentmatters.asp?v=14&i=2
+http://www.employmentspot.com/state/employment/Carlisle-PA.htm
+http://www.employmentspot.com/state/employment/Harrisburg-PA.htm
+http://www.employmentspot.com/state/employment/Lebanon-PA.htm
+http://www.employmentspot.com/state/employment/York-PA.htm
+http://www.employmenttribunals.gov.uk/ptwp-information_bulletin-7.asp
+http://www.employmenttribunals.gov.uk/ptwp-information_bulletin-9.asp
+http://www.emporia.edu/earthsci/amber/recover.htm
+http://www.emporia.edu/president/98inaugaddress.htm
+http://www.emporia.edu/smnh/history.htm
+http://www.empowermentgroup.com/empowerment_group_site_map.html
+http://www.empowermentsystems.com/truthcnt.html
+http://www.empproject.com/terms/index1.shtml
+http://www.emptybottle.org/glass/2004/01/never_mind_the_bollocks_heres_the_wonderchicken.php
+http://www.emptyspace.dk/default~KatID~~page~130.htm
+http://www.emptyspace.dk/default~KatID~~page~133.htm
+http://www.emro.who.int/Publications/EMHJ/0203/04.htm
+http://www.emro.who.int/Publications/HealthEdReligion/AIDS/Chapter6.htm
+http://www.ems-c.org/cfusion/saverecord.cfm?type=pdf&filename=EMSManagedCare&id=000874
+http://www.ems.org/nws/2004/01/28/oil_supply_short
+http://www.ems.psu.edu/~fraser/Bad/BadCoriolis.html
+http://www.emsc.nysed.gov/ciai/biling/pub/overage.html
+http://www.emsc.nysed.gov/mgtserv/budget-02.htm
+http://www.emsd.gov.hk/emsd/eng/pee/index.shtml
+http://www.emsl.pnl.gov/docs/mscf/qbank-2.8/features/features.html
+http://www.emsvillage.com/forums/messageview.cfm?catid=28&threadid=631
+http://www.emsvillage.com/forums/messageview.cfm?catid=42&threadid=1009&STARTPAGE=1
+http://www.emtech.net/links/construc.htm
+http://www.emtrading.com/em/htmlpapers/kysuei1higa.html
+http://www.emulators.com/xptutor.htm
+http://www.emulex.com/corp/corpgov/auditor.html
+http://www.emulex.com/ts/docfc/utilities/elxcfg/141a14/change_timer.htm
+http://www.emusic.com/artist/10557/10557363.html
+http://www.emwis.org/MEDA/about_meda.htm
+http://www.enabling.org/ia/celiac/
+http://www.enature.com/fieldguide/showSpeciesFT.asp?fotogID=524&curPageNum=63&recnum=AR0121
+http://www.enature.com/fieldguide/showSpeciesRECNUM.asp?recNum=AR0121
+http://www.enc.org/features/focus/archive/edtech/document.shtm?input=FOC-000697-index
+http://www.enc.org/features/focus/archive/family/document.shtm?input=FOC-000726-index
+http://www.enc.org/features/focus/archive/inquiry/document.shtm?input=FOC-000711-index
+http://www.encana.com/investor/news_releases/news_2002/pcp_0301_2.html
+http://www.encana.com/legal.html
+http://www.enchantedlearning.com/coloring/Africa.shtml
+http://www.enchantedlearning.com/coloring/oceanlife.shtml
+http://www.enchantedlearning.com/geography/glossary/
+http://www.enchantedlearning.com/report/animal/
+http://www.enchantedlearning.com/subjects/animals/Animalbabies.shtml
+http://www.enchantedlearning.com/subjects/butterfly/species/Monarch.shtml
+http://www.enchantedlearning.com/subjects/dinosaurs/classroom/Poem.shtml
+http://www.enchantedlearning.com/subjects/dinosaurs/questions/QnsAug00.shtml
+http://www.enchantedlearning.com/subjects/mammals/Beaver.shtml
+http://www.enchantedlearning.com/subjects/mammals/Placental.shtml
+http://www.enchantedlearning.com/subjects/mammals/lagomorphs/Arctichareprintout.shtml
+http://www.enchantedlearning.com/subjects/mammals/panda/
+http://www.enchantedlearning.com/subjects/ocean/Oceanlife.shtml
+http://www.enchantedlearning.com/subjects/sharks/classification/Carcharhiniformes.shtml
+http://www.enchantedlearning.com/subjects/sharks/species/Greatwhite.shtml
+http://www.enchantedlearning.com/subjects/sharks/species/Hammerhead.shtml
+http://www.enchantedlearning.com/subjects/whales/species/Humpbackwhale.shtml
+http://www.enchantedlearning.com/testoftime/chap/37.shtml
+http://www.enchantedlearning.com/themes/letters/e.shtml
+http://www.enchantedlearning.com/themes/letters/o.shtml
+http://www.enchantedlearning.com/usa/states/michigan/
+http://www.enchantedspirit.org/FamilyMatters/39.php
+http://www.enchantedspirit.org/LifeLines/3228.php
+http://www.encompassinsurance.com/consumer/cc/plan_and_learn/abcs/abcs_of_insurance.asp
+http://www.encorp.ca/cfm/index.cfm?It=908&Id=3
+http://www.encounterbooks.com/books/tipl/tipl_intro.html
+http://www.encourageconnection.com/cgi-bin/mbviewall.pl?msg=117236
+http://www.encyclopedia.com/html/R/Richard1.asp
+http://www.endhomelessness.org/pub/fostercare/webfapdx.htm
+http://www.endicott-studio.com/rdrm/forwmnft.html
+http://www.endicott-studio.com/rdrm/rrMonkeyGirl.html
+http://www.endicott-studio.com/rdrm/rrPeterPan2.html
+http://www.endicott-studio.com/rdrm/rrPeterPan3.html
+http://www.endlessagony.com/Problem_detail.asp?Category=Family&problem_id=1355
+http://www.endo-society.org/journalspublications/rapidreview/index.cfm
+http://www.endocrineweb.com/diabetes/treatment.html
+http://www.endocrinologist.com/Complications.html
+http://www.endowment-compensation.co.uk/16.html
+http://www.endowmentjustice.com/Blog/blog_abloglessmonth.asp
+http://www.endsdirectory.com/articles/index.cfm?action=dir10
+http://www.endsleigh.co.uk/web/policies/travel/activity/cover.html
+http://www.endtheoccupation.org/article.php?id=15
+http://www.enduringword.com/commentaries/5810.htm
+http://www.ene.gov.on.ca/envision/deloro/riskstudy.htm
+http://www.ene.gov.on.ca/envision/techdocs/3794e.htm
+http://www.ene.gov.on.ca/envregistry/016576er.htm
+http://www.energy-garden.com/article020218.html
+http://www.energy-spiritual-healing.com/
+http://www.energy.ca.gov/places/
+http://www.energy.gov.on.ca/index.cfm?fuseaction=conservation.guide4
+http://www.energy.state.or.us/bus/light/
+http://www.energyaction.ie/iher/04.htm
+http://www.energyadvocate.com/burkonly.htm
+http://www.energyalternatives.ca/conservation.asp
+http://www.energybuilder.com/greenhome-basics.htm
+http://www.energybulletin.net/105.html
+http://www.energybulletin.net/1465.html
+http://www.energybulletin.net/1816.html
+http://www.energybulletin.net/3018.html
+http://www.energybulletin.net/320.html
+http://www.energybulletin.net/3249.html
+http://www.energybulletin.net/3691.html
+http://www.energybulletin.net/3702.html
+http://www.energybulletin.net/3792.html
+http://www.energybulletin.net/3846.html
+http://www.energybulletin.net/3898.html
+http://www.energybulletin.net/4055.html
+http://www.energybulletin.net/419.html
+http://www.energybulletin.net/4424.html
+http://www.energybulletin.net/4483.html
+http://www.energybulletin.net/4720.html
+http://www.energybulletin.net/4733.html
+http://www.energybulletin.net/4740.html
+http://www.energybulletin.net/5077.html
+http://www.energybulletin.net/5517.html
+http://www.energybulletin.net/5673.html
+http://www.energybulletin.net/print.php?id=4015
+http://www.energycentral.com/centers/calendar/default.cfm
+http://www.energydesignresources.com/category/stores/
+http://www.energydesignresources.com/resource/130/
+http://www.energyhealingart.com/
+http://www.energyinst.org.uk/content/files/file164
+http://www.energyjustice.net/rps/
+http://www.energyquest.ca.gov/story/chapter01.html
+http://www.energyquest.ca.gov/story/chapter03.html
+http://www.energystar.gov/index.cfm?c=bldrs_lenders_raters.pt_home_industry_professional
+http://www.energystar.gov/index.cfm?c=industry.bus_industry_elevating
+http://www.energytrust.org/Pages/about/library/news/
+http://www.energyusernews.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2584,84743,00.html
+http://www.energyvortex.com/faq/index.cfm?opentopic=1&openquestion=735
+http://www.energyvortex.com/faq/index.cfm?opentopic=2
+http://www.enferscientific.com/news.html
+http://www.enfield.ac.uk/new/rec_docs/details/CAMoperatorecn139Jan05.htm
+http://www.eng-tips.com/viewthread.cfm?qid=101185
+http://www.eng-tips.com/viewthread.cfm?qid=101185&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=104481
+http://www.eng-tips.com/viewthread.cfm?qid=104481&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=107592&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=108691
+http://www.eng-tips.com/viewthread.cfm?qid=110102
+http://www.eng-tips.com/viewthread.cfm?qid=111683&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=125669&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=1510&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=51434
+http://www.eng-tips.com/viewthread.cfm?qid=55891
+http://www.eng-tips.com/viewthread.cfm?qid=55891&page=6
+http://www.eng-tips.com/viewthread.cfm?qid=61988&page=3
+http://www.eng-tips.com/viewthread.cfm?qid=64519&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=67125
+http://www.eng-tips.com/viewthread.cfm?qid=68047&page=9
+http://www.eng-tips.com/viewthread.cfm?qid=69233&page=9
+http://www.eng-tips.com/viewthread.cfm?qid=86650&page=3
+http://www.eng-tips.com/viewthread.cfm?qid=94653&page=1
+http://www.eng-tips.com/viewthread.cfm?qid=98766&page=2
+http://www.eng.yabloko.ru/Publ/2002/papers/moscow-times-251002.html
+http://www.engadget.com/entry/1234000093042918/
+http://www.engadget.com/entry/1234000137045772/
+http://www.engadget.com/entry/1234000137047875/
+http://www.engadget.com/entry/1234000187045382/
+http://www.engadget.com/entry/1234000363043430/
+http://www.engadget.com/entry/1234000370040046/
+http://www.engadget.com/entry/1234000440041962/
+http://www.engadget.com/entry/1234000470021242/
+http://www.engadget.com/entry/1234000490042605/
+http://www.engadget.com/entry/1234000680044499/
+http://www.engadget.com/entry/1234000703046439/
+http://www.engadget.com/entry/1234000767048139/
+http://www.engadget.com/entry/1234000793030739/
+http://www.engadget.com/entry/1234000860046669/
+http://www.engadget.com/entry/1234000960042753/
+http://www.engadget.com/entry/1234000993032986/
+http://www.engadget.com/entry/1234000993047742
+http://www.engadget.com/entry/1234000993047742/
+http://www.engadget.com/entry/2116781680277657/
+http://www.engadget.com/entry/5843952395227141/
+http://www.engadget.com/entry/7796925370303347/
+http://www.engadget.com/entry/8277407851784728/
+http://www.engadget.com/search/?sourceid=Mozilla-search&q=lifedrive
+http://www.engageselling.com/fallingshort/
+http://www.engageselling.com/salesfallingshort/
+http://www.engelbergkristy.com/myths.htm
+http://www.engelen.demon.nl/mariange.htm
+http://www.engelreiman.com/resume.htm
+http://www.engelsk.ku.dk/translationstudies/lifedk.htm
+http://www.engin.brown.edu/undergrad/mechengin/resources.htm
+http://www.engin.umich.edu/dept/name/facilities/refroom/Search.html
+http://www.engineering.swan.ac.uk/vinfo_student.htm
+http://www.engineering.ualberta.ca/nav02.cfm?nav02=26728&nav01=18430
+http://www.engineering.usu.edu/jrestate/workshops/water/water.php
+http://www.engineeringlab.com/
+http://www.engineeringnews.co.za/eng/features/develop/?show=21199
+http://www.engineeringtalk.com/news/ptc/ptc108.html
+http://www.engl.duq.edu/servus/PR_Critic/SP4oct51.html
+http://www.engl.polyu.edu.hk/EECTR/awphandbook/AWPUnittwo.htm
+http://www.engl.uvic.ca/Faculty/MBHomePage/ISShakespeare/LLL/LLL4.3.html
+http://www.englandsnorth.worldweb.com/York/Events/AllEvents/
+http://www.englandsnorthwest2020.com/context.htm
+http://www.englefieldgreen.org.uk/
+http://www.englemed.demon.co.uk/auscol02.htm
+http://www.english-heritage.org.uk/default.asp?wci=Node&wce=8429
+http://www.english-heritage.org.uk/knights/news/tournament_update.asp
+http://www.english-test.net/forum/ftopic567.html
+http://www.english-test.net/forum/ftopic862.html
+http://www.english-test.net/lessons/4/
+http://www.english-to-go.com/
+http://www.english.cam.ac.uk/vclass/class1/note6.htm
+http://www.english.emory.edu/Bahri/Alexander.html
+http://www.english.ox.ac.uk/undergraduate/course.htm
+http://www.english.uiuc.edu/cws/grad_program/grad_resources/sample_reading_bruckner.htm
+http://www.english.uiuc.edu/cws/grad_program/grad_resources/spfld_conversation_exam_day.htm
+http://www.english.uiuc.edu/cws/wworkshop/advice/writing_resumes.htm
+http://www.english.uiuc.edu/maps/poets/a_f/ai/aboutopp.htm
+http://www.english.uiuc.edu/maps/poets/a_f/baca/melendez.html
+http://www.english.uiuc.edu/maps/poets/a_f/frost/apple.htm
+http://www.english.uiuc.edu/maps/poets/g_l/lowell/uniondead.htm
+http://www.english.uiuc.edu/maps/poets/m_r/rich/trying.htm
+http://www.english.uiuc.edu/maps/poets/m_r/robinson/cory.htm
+http://www.english.uiuc.edu/maps/poets/s_z/j_wright/ode.htm
+http://www.english.uiuc.edu/maps/poets/s_z/tolson/liberia.htm
+http://www.english.uiuc.edu/maps/vietnam/timeline.htm
+http://www.englishbaby.com/lessons/slang/slang.php
+http://www.englishcut.com/
+http://www.englishcut.com/archives/000032.html
+http://www.englishdemocrats.org.uk/
+http://www.englishforums.com/ShowPost.aspx?PostID=107077
+http://www.englishforums.com/ShowPost.aspx?PostID=55383
+http://www.englishforums.com/ShowPost.aspx?PostID=68705
+http://www.englishforums.com/ShowPost.aspx?PostID=73
+http://www.englishgardeningschool.co.uk/DLGDStruct.htm
+http://www.englishlearner.com/teachers/writing.html
+http://www.englishraven.com/SLAC_finding_out.html
+http://www.englishschoolwatch.org/webboard_detail.php?topic_id=397
+http://www.englit.ed.ac.uk/studying/undergrd/english_lit_1/Common/essay_guidance.htm
+http://www.englit.ed.ac.uk/studying/undergrd/english_lit_2/Common/essay_guidance.htm
+http://www.englit.ed.ac.uk/studying/undergrd/scottish_lit_1/Common/essay_guidance.htm
+http://www.englit.ed.ac.uk/studying/undergrd/scottish_lit_2/Common/essay_guidance.htm
+http://www.engr.colostate.edu/~dga/high_speed_video/
+http://www.engr.iupui.edu/~orr/webpages/cpt120/mathbios/hamil.htm
+http://www.engr.pitt.edu/industrial/pages/grad_concentrations.html
+http://www.engr.sjsu.edu/rsingh/conference/papers/west.htm
+http://www.engr.ucr.edu/~tbp/
+http://www.engr.uiuc.edu/communications/eupdate/spring03/030303.shtml
+http://www.engr.uiuc.edu/students/prospective/computer.php
+http://www.engr.utexas.edu/alumni/groups/distgrads/2004DG.cfm
+http://www.engr.utexas.edu/news/articles/20020711357/index.cfm
+http://www.engsc.ac.uk/nef/events/past_ltsn.asp
+http://www.engsc.ac.uk/nef/events/southeast03.asp
+http://www.engsw.com/Drawings/Huculak/Huculak.html
+http://www.enhancefrance.com/
+http://www.enhg.org/iddison/folklore.htm
+http://www.enigma.co.nz/hcro/website/index.cfm?fuseaction=articledisplay&FeatureID=1
+http://www.enigma.co.nz/hcro/website/print_issue.cfm?issueid=1
+http://www.enjoy-europe.com/hte/chap05/clothes.htm
+http://www.enjoy-europe.com/hte/chap11/electric.htm
+http://www.enjoyaurora.com/events_drill.cfm?month=01&year=2005
+http://www.enjoythedrive.com/content/?id=7311
+http://www.enjoythemusic.com/magazine/equipment/0204/meadowlarkosprey.htm
+http://www.enjoythemusic.com/magazine/equipment/0205/nadl53.htm
+http://www.enjoythemusic.com/magazine/equipment/1101/swanm200.htm
+http://www.enkueros.net/726016004497.html
+http://www.enlightened.org.uk/communication.html
+http://www.enn.com/aff.html?id=684
+http://www.enn.com/today.html?id=7952
+http://www.enneagraminstitute.com/4and4.asp
+http://www.enneagraminstitute.com/books/Books_UTE.asp
+http://www.enneagraminstitute.com/personalgrowth.asp
+http://www.enotalone.com/books/044657709X.html
+http://www.enotalone.com/forum/viewtopic.php?p=370199
+http://www.enotes.com/leaving-this/copyright
+http://www.enotes.com/old-dick-qn/
+http://www.enquire.org.uk/youngpeople/imap_1.php?laa=GLAS
+http://www.enquirer.com/
+http://www.enquirer.com/editions/2000/01/04/loc_middletown.html
+http://www.enquirer.com/editions/2000/06/11/loc_thoroughbred_owners.html
+http://www.enquirer.com/editions/2000/09/05/loc_kenton_jail_kitchen.html
+http://www.enquirer.com/editions/2001/11/27/loc_world_war_ii_hero.html
+http://www.enquirer.com/editions/2003/02/19/tem_health19lede.html
+http://www.enquirer.com/editions/2004/02/22/biz_warshak22.1.html
+http://www.enquirer.com/editions/2004/06/05/loc_GTHAllen05.html
+http://www.enquirer.com/editions/2004/07/28/loc_cvn1atxt.html
+http://www.enquirer.com/editions/2004/08/29/loc_col1howard.html
+http://www.enquirewithin.co.nz/BUS_APP/buschap6.htm
+http://www.enrager.net/thought/topics/parenting.php
+http://www.enrg.lsu.edu/projects/
+http://www.enrp.undp.org/general/default.htm
+http://www.ensight.org/archives/2004/02/23/its-happening-oss-browsers-taking-over/
+http://www.ensight.org/archives/2004/03/10/wow-dave-caught-cnets-attention/
+http://www.ensignmessage.com/archives/bloodln.html
+http://www.ensignsoftware.com/tips/tradingtips24.htm
+http://www.ent.uga.edu/pmh/Aquatic/Weed_Control.htm
+http://www.entemp.ie/corporate/planning/work.htm
+http://www.entemp.ie/press/1999/130499m.htm
+http://www.entemp.ie/press/2003/230103.htm
+http://www.entemp.ie/press/2005/20050519B.htm
+http://www.entercom.com/pages/pr_march03122.html
+http://www.enterprise-edge.co.uk/articles/penfalprofile.asp
+http://www.enterprisecare.com.au/news0006.htm
+http://www.enterpriseitplanet.com/security/features/
+http://www.enterpriseitplanet.com/storage/
+http://www.enterpriseitplanet.com/storage/features/
+http://www.enterprisemission.com/
+http://www.enterprisemission.com/oh_my_god.htm
+http://www.enterprisemission.com/pasadena2.html
+http://www.enterprisemission.com/sir.htm
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=10
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=2
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=3
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=4
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=5
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=6
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=7
+http://www.enterprisenetwork.co.uk/search/business_challenges_select.asp?biz_chal_id=9
+http://www.enterprisenetwork.co.uk/search/search_tips.asp
+http://www.enterprisenetworksandservers.com/monthly/art.php/1128
+http://www.enterprisenetworksandservers.com/monthly/art.php/1494
+http://www.enterprisestorageforum.com/ipstorage/features/article.php/3421111
+http://www.enterprising-communities.org.uk/rpt-ch1-5.shtml
+http://www.entersandiego.com/point_loma.cfm
+http://www.enterstageright.com/
+http://www.enterstageright.com/archive/articles/0402/0402condi.htm
+http://www.enterstageright.com/archive/articles/0500overpopulation.htm
+http://www.enterstageright.com/archive/articles/1104/1104tomsawyer.htm
+http://www.entertainmentcareers.net/jobid.asp?jcode=32325
+http://www.entertainmentpro.com/Casino-page.htm
+http://www.entertainmenttv.com/astro_2005.htm
+http://www.entil2001.com/series/firefly/season1dvd/ff1-9.html
+http://www.entish.org/willwhim/
+http://www.entnet.org/healthinfo/balance/dizziness.cfm
+http://www.entnet.org/healthinfo/sinus/sinusitis.cfm
+http://www.ento.co.uk/news/newsletter_xmas2001/
+http://www.entofga.com/Aao/aao460/me.get?WEB.websections.show&AAO460_618
+http://www.entomology.cornell.edu/Extension/DiagnosticLab/IDLFS/BedBugs/BedBugs.html
+http://www.entomology.wisc.edu/mbcn/fea201.html
+http://www.entomology.wisc.edu/mbcn/fea610.html
+http://www.entremundos.org/faq.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_ColumnArchive/0,4448,321737,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,229837,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,232505,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,269401,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,300677,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,301605,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,303925,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,305365,00.html
+http://www.entrepreneur.com/Magazines/Copy_of_MA_SegArticle/0,4453,306072,00.html
+http://www.entrepreneur.com/Magazines/MA_SegArticle/0,1539,269401,00.html
+http://www.entrepreneur.com/Your_Business/YB_Node/0,4507,111,00.html
+http://www.entrepreneur.com/Your_Business/YB_Node/0,4507,512,00.html
+http://www.entrepreneur.com/article/0,4621,232505,00.html
+http://www.entrepreneur.com/article/0,4621,269401,00.html
+http://www.entrepreneur.com/article/0,4621,279346,00.html
+http://www.entrepreneur.com/article/0,4621,286649,00.html
+http://www.entrepreneur.com/article/0,4621,287856-4,00.html
+http://www.entrepreneur.com/article/0,4621,287856-7,00.html
+http://www.entrepreneur.com/article/0,4621,293752,00.html
+http://www.entrepreneur.com/article/0,4621,298213,00.html
+http://www.entrepreneur.com/article/0,4621,299619,00.html
+http://www.entrepreneur.com/article/0,4621,300866,00.html
+http://www.entrepreneur.com/article/0,4621,301605,00.html
+http://www.entrepreneur.com/article/0,4621,303987,00.html
+http://www.entrepreneur.com/article/0,4621,304084,00.html
+http://www.entrepreneur.com/article/0,4621,305365,00.html
+http://www.entrepreneur.com/article/0,4621,306053,00.html
+http://www.entrepreneur.com/article/0,4621,306774,00.html
+http://www.entrepreneur.com/article/0,4621,308140,00.html
+http://www.entrepreneur.com/article/0,4621,310776,00.html
+http://www.entrepreneur.com/article/0,4621,315265,00.html
+http://www.entrepreneur.com/article/0,4621,315561,00.html
+http://www.entrepreneur.com/article/0,4621,316202,00.html
+http://www.entrepreneur.com/article/0,4621,316416,00.html
+http://www.entrepreneur.com/article/0,4621,316494,00.html
+http://www.entrepreneur.com/article/0,4621,316521,00.html
+http://www.entrepreneur.com/article/0,4621,318357,00.html
+http://www.entrepreneur.com/article/0,4621,318430,00.html
+http://www.entrepreneur.com/article/0,4621,318600,00.html
+http://www.entrepreneur.com/article/0,4621,320297,00.html
+http://www.entrepreneur.com/article/print/0,2361,301982,00.html
+http://www.entrepreneur.com/article/sbc/0,6136,317790,00.html
+http://www.entrepreneur.com/homeoffice/0,6289,,00.html
+http://www.entrepreneur.com/mag/article/0,1539,311867,00.html
+http://www.entrepreneurslife.com/archives/category/random-stuff/
+http://www.entreworld.org/Channel/GYB.cfm?Topic=FincInvs
+http://www.entreworld.org/Channel/SYB.cfm?Topic=FincInvs
+http://www.entsoc.org/newsletter/2004/jun/founders.htm
+http://www.entsweb.co.uk/eventman/medical/
+http://www.enviro-shield.com/
+http://www.enviroalternatives.com/toiletgraywater.html
+http://www.envirocitizen.org/region/index.asp
+http://www.envirohealthtech.com/coilresearch.htm
+http://www.enviroliteracy.org/subcategory.php/252.html
+http://www.enviroliteracy.org/subcategory.php?id=252&print=1
+http://www.environ.ie/DOEI/DOEIPol.nsf/wvNavView/fsaep?OpenDocument&Lang=en
+http://www.environ.ie/DOEI/DOEIPol.nsf/wvNavView/wwdEnvironment?OpenDocument&Lang=en
+http://www.environ.ie/DOEI/DOEIPol.nsf/wvNavView/wwdRoads?OpenDocument&Lang=en
+http://www.environet.org/
+http://www.environment-agency.gov.uk/aboutus/512398/289428/655143/?lang=_e
+http://www.environment-agency.gov.uk/regions/anglian/484767/652199/?lang=_e&textonly=on&format=
+http://www.environment-agency.gov.uk/regions/anglian/484767/652199/?version=1&lang=_e&textonly=on&format=
+http://www.environment-agency.gov.uk/subjects/flood/826674/927042/?lang=_e
+http://www.environment-agency.gov.uk/subjects/flood/826674/927042/?version=1&lang=_e
+http://www.environment-agency.gov.uk/yourenv/consultations/glass/?lang=_w&version=1&textonly=on
+http://www.environment-agency.gov.uk/yourenv/eff/natural_forces/flooding/?lang=_e
+http://www.environment-agency.gov.uk/yourenv/eff/natural_forces/flooding/?version=1&lang=_e
+http://www.environment-hawaii.org/1000caught.htm
+http://www.environment-hawaii.org/1093public.htm
+http://www.environment-hawaii.org/1295neit.htm
+http://www.environment-hawaii.org/695cov.htm
+http://www.environment.co.il/ArticlePrint.asp?id=103&lang=eng
+http://www.environment.gov.za/DOCUMENTS_UPLOAD/DocumentViewNewsMedia1.aspx?qstrSubCategory=Speeches
+http://www.environment.sa.gov.au/reporting/biodiversity/introduced.html
+http://www.environment.sa.gov.au/reporting/land/landuse/change.html
+http://www.environment.soton.ac.uk/waste/waste.htm
+http://www.environmental-center.com/articles/article1004/article1004.htm
+http://www.environmental-center.com/tech_result.asp?cod=738&idmainpage=29
+http://www.environmental-expert.com/events/cohab2005/cohab2005.htm
+http://www.environmental-expert.com/events/tmdl2005/tmdl2005.htm
+http://www.environmental-expert.com/technology/slickbar/slickbar.htm
+http://www.environmental.org.uk/
+http://www.environmentaldefense.org/article.cfm?contentid=1242
+http://www.environmentaldefense.org/documents/525_Case%20Study%20Pacific%20Fishery.htm
+http://www.environmentalreview.org/vol02/feschba.html
+http://www.environmentnepal.com.np/news_d.asp?id=88
+http://www.environmenttimes.net/article.cfm?pageID=132
+http://www.envisionus.com/article.asp?AID=67
+http://www.eoc-law.org.uk/cseng/tribunalandcourtprocedures/alternatives_to_tribunal.asp?tct=sd
+http://www.eoc.org.uk/cseng/advice/seminar_report_march_04.asp
+http://www.eoc.org.uk/cseng/tribunalandcourtprocedures/alternatives_to_tribunal.asp?PrintIt=yes&SubDate=Wednesday+2+February%2C+2005
+http://www.eoc.org.uk/cseng/tribunalandcourtprocedures/alternatives_to_tribunal.asp?SubDate=Wednesday+2+February%2C+2005
+http://www.eoc.sa.gov.au/public/equity22.html
+http://www.eofftv.com/review/s/silence_of_the_lambs_review.htm
+http://www.eohr.org/report/2005/re0321.htm
+http://www.eoneill.com/texts/tomorrow/contents.htm
+http://www.eonline.com/On/Holly/
+http://www.eos-experience.co.uk/seminar/02.php
+http://www.eos.uoguelph.ca/webfiles/wjames/homepage/Teaching/437/wj437hi.htm
+http://www.eostreorganics.co.uk/boxes_norfolk.htm
+http://www.eowa.gov.au/Information_Centres/Resource_Centre/Directors_Speeches/ahra_0503.asp
+http://www.ep1.rub.de/~panda/doc/PhonebookWeb_HowTo.htm
+http://www.epa.gov/OCEPAterms/aajq.html
+http://www.epa.gov/OCEPAterms/aterms.html
+http://www.epa.gov/OCEPAterms/sterms.html
+http://www.epa.gov/agriculture/factsheets/epa-305-f-98-017ag.html
+http://www.epa.gov/air/clearskies/state/al.html
+http://www.epa.gov/air/clearskies/state/fl.html
+http://www.epa.gov/air/clearskies/state/il.html
+http://www.epa.gov/air/clearskies/state/ms.html
+http://www.epa.gov/air/clearskies/state/nh.html
+http://www.epa.gov/air/clearskies/state/oh.html
+http://www.epa.gov/air/clearskies/state/ok.html
+http://www.epa.gov/air/eac/faq.html
+http://www.epa.gov/airmarkets/acidrain/society/
+http://www.epa.gov/boston/pr/2002/jun/020603.html
+http://www.epa.gov/dears/info.htm
+http://www.epa.gov/envirohealth/children/contaminants/e3.htm
+http://www.epa.gov/eogapti1/glossary/
+http://www.epa.gov/epaoswer/hazwaste/usedoil/usedoil.htm
+http://www.epa.gov/etv/etvoice/01-12.html
+http://www.epa.gov/fedrgstr/EPA-AIR/2004/May/Day-05/a10335.htm
+http://www.epa.gov/fedrgstr/EPA-IMPACT/2002/July/Day-15/i17744.htm
+http://www.epa.gov/fedrgstr/EPA-MEETINGS/2005/January/Day-06/m263.htm
+http://www.epa.gov/fedrgstr/EPAFR-CONTENTS/2003/July/Day-01/contents.htm
+http://www.epa.gov/glnpo/aoc/st-clair.html
+http://www.epa.gov/glnpo/aoc/trchlke.html
+http://www.epa.gov/greenchemistry/whats_gc.html
+http://www.epa.gov/history/topics/canada/02.htm
+http://www.epa.gov/iaq/pubs/ozonegen.html
+http://www.epa.gov/maia/html/intro-species.html
+http://www.epa.gov/oar/eac/faq.html
+http://www.epa.gov/oar/oaqps/air_risc/3_90_024.html
+http://www.epa.gov/oar/oaqps/peg_caa/pegcaa10.html
+http://www.epa.gov/oilspill/edueff.htm
+http://www.epa.gov/oppbppd1/PESP/strategies/2005/nypa05.htm
+http://www.epa.gov/oppsrrd1/op/primer.htm
+http://www.epa.gov/opptintr/pcb/effects.html
+http://www.epa.gov/ost/fishadvice/advice.html
+http://www.epa.gov/otaq/consumer/f00013.htm
+http://www.epa.gov/owow/monitoring/mtg1200.html
+http://www.epa.gov/owow/nps/cwact.html
+http://www.epa.gov/privacy/assess/cdx.htm
+http://www.epa.gov/projectxl/scaqmd2/rule2501.htm
+http://www.epa.gov/radiation/terms/
+http://www.epa.gov/radiation/understand/health_effects.htm
+http://www.epa.gov/region6/6ra/community.htm
+http://www.epa.gov/safewater/arsenic.html
+http://www.epa.gov/superfund/programs/recycle/success/casestud/armycsi.htm
+http://www.epa.gov/superfund/programs/recycle/tools/faq.htm
+http://www.epa.gov/superfund/programs/reforms/reforms/2-6.htm
+http://www.epa.gov/superfund/sites/npl/f840508.htm
+http://www.epa.gov/superfund/sites/npl/pd050218.htm
+http://www.epa.gov/superfund/students/clas_act/haz-ed/ff_09.htm
+http://www.epa.gov/swerffrr/documents/land_use_cercla_remedy.htm
+http://www.epa.gov/swerffrr/documents/pip2.htm
+http://www.epa.gov/swerffrr/documents/pip3.htm
+http://www.epa.gov/swerffrr/documents/pip7_1.htm
+http://www.epa.gov/swerffrr/documents/pip8_1.htm
+http://www.epa.gov/tio/char1_tech.htm
+http://www.epa.gov/water/speeches/041503tm.html
+http://www.epa.gov/waterscience/methods/det/withdrawfs.htm
+http://www.epa.gov/wtc/stories/yearreview.htm
+http://www.epa.nsw.gov.au/envalue/studydetail.asp?id_study=311
+http://www.epa.nsw.gov.au/envalue/studydetail.asp?id_study=399
+http://www.epa.nsw.gov.au/legal/aboutpoeo.htm
+http://www.epanorama.net/links/telephone.html
+http://www.epc.bc.ca/poll.html
+http://www.epcorcentre.org/ecartslearning/development.html
+http://www.ephesians5-11.org/ex_masons_for_jesus/jean.htm
+http://www.ephesians5-11.org/stoney.htm
+http://www.ephilosopher.com/bb-print-43-0.html
+http://www.ephilosopher.com/bb-topic-138.html
+http://www.ephilosopher.com/index.php?name=PNphpBB2&file=viewtopic&p=975
+http://www.ephilosopher.com/index.php?name=PNphpBB2&file=viewtopic&p=977
+http://www.epi-centre.com/reports/9511cs.html
+http://www.epi-global.com/en/Technology/TDPA_faq.htm
+http://www.epi.org/content.cfm/bp162
+http://www.epibiostat.ucsf.edu/courses/masters.html
+http://www.epic.co.uk/content/resources/email_newsletter/December2002.htm
+http://www.epic.co.uk/content/resources/email_newsletter/December2004.htm
+http://www.epic.org/alert/EPIC_Alert_10.09.html
+http://www.epic.org/free_speech/tribe.html
+http://www.epicurious.com/drinking/wine_dictionary/entry?id=6556
+http://www.epicurusconsulting.com/foodservice/index.php
+http://www.epidem.com/pt/re/epidemiology/fulltext.00001648-200007000-00009.htm
+http://www.epigee.org/pregnancy/birthcontrol.html
+http://www.epilepsy.com/epilepsy/team_10common.html
+http://www.epilepsy.com/stories/ps_1094853702.html
+http://www.epilepsy.com/web/print.php?page_name=ps_1094853702
+http://www.epinet.org/content.cfm/Issuebriefs_ib176
+http://www.epinet.org/content.cfm/books_exceptional_returns
+http://www.epinet.org/content.cfm/books_hardships
+http://www.epinet.org/content.cfm/books_rethinking_growth
+http://www.epinet.org/content.cfm/books_swa2002_swa2002intro
+http://www.epinet.org/content.cfm/briefingpapers_117_bp117
+http://www.epinet.org/content.cfm/briefingpapers_bp130
+http://www.epinet.org/content.cfm/briefingpapers_bp150
+http://www.epinet.org/content.cfm/briefingpapers_comp
+http://www.epinet.org/content.cfm/briefingpapers_flsa_jun03
+http://www.epinet.org/content.cfm/briefingpapers_labor99
+http://www.epinet.org/content.cfm/issuebriefs_ib141
+http://www.epinet.org/content.cfm/issuebriefs_ib176
+http://www.epinet.org/content.cfm/webfeatures_econindicators_jobspict_20041008
+http://www.epinet.org/content.cfm/webfeatures_snapshots_07162004
+http://www.epinet.org/content.cfm/webfeatures_snapshots_20050112
+http://www.epinet.org/content.cfm/webfeatures_viewpoints_slouch
+http://www.epinet.org/index.cfm
+http://www.epinet.org/printer.cfm?id=858&content_type=1&nice_name=books_hardships
+http://www.epinions.com/Finding_Our_Roots_Facing_Our_Future_America_in_the_21st_Century_edited_by_Robert_E_Freer_Jr__/display_~latest_prices
+http://www.epinions.com/Honeywell_Enviracaire_HEPA_Air_Purifier_50250_Air_Filters
+http://www.epinions.com/Office_Furniture-Brand_Fulmarque
+http://www.epinions.com/Office_Furniture-Chairs-Brand_Fulmarque
+http://www.epinions.com/Office_Furniture-Fulmarque_Traditional_Series_Conference_Reception_Chair_Forest_Green_Fabric
+http://www.epinions.com/Office_Furniture-Fulmarque_Traditional_Series_Conference_Reception_Chair_w_Casters_Forest_Green_Fabric
+http://www.epinions.com/Office_Furniture-Fulmarque_Traditional_Series_Mid-Manager_s_Tufted_Guest_Chair_Olefin_Forest_Green
+http://www.epinions.com/Pokemon__Ruby_Version_for_Game_Boy_Advance/display_~reviews
+http://www.epinions.com/Pokemon__Ruby_Version_for_Game_Boy_Advance/display_~reviews/pp_~1/sort_~prdrt/sort_dir_~des/sec_~opinion_list
+http://www.epinions.com/Story_Land/display_~reviews
+http://www.epinions.com/The_Beach_House_by_James_Patterson_and_by_Peter_De_Jonge_and_by_Peter_De_Jonge_and_narrated_by_Gil_Bellows/display_~reviews
+http://www.epinions.com/Walking_and_Eating_in_Tuscany_and_Umbria_by_James_Ladsun
+http://www.epinions.com/Walking_and_Eating_in_Tuscany_and_Umbria_by_James_Ladsun/display_~latest_prices
+http://www.epinions.com/Wild_Arms_3_for_PlayStation_2/display_~reviews
+http://www.epinions.com/Wilson_Deep_Red_Irons_Golf_Clubs/display_~reviews
+http://www.epinions.com/Wilson_Deep_Red_Irons_Golf_Clubs/display_~reviews/pp_~1/sort_~date/sort_dir_~des/sec_~opinion_list
+http://www.epinions.com/auto-review-344D-B36CA89-39F5DE20-prod2
+http://www.epinions.com/auto-review-590D-1251985A-39B52554-prod6
+http://www.epinions.com/auto-review-6026-33605AB7-3A40EAF8-prod5
+http://www.epinions.com/auto-review-792E-913E692-3822116C-bd3
+http://www.epinions.com/beat-review-F20-31597A94-39A94616-prod5
+http://www.epinions.com/bicycles_2003_Felt_F75/display_~reviews
+http://www.epinions.com/cmd-review-7BFB-4BB800A6-3A5BE48C-prod3
+http://www.epinions.com/content_102506401412
+http://www.epinions.com/content_103560154756
+http://www.epinions.com/content_103691685508
+http://www.epinions.com/content_105222606468
+http://www.epinions.com/content_105809809028
+http://www.epinions.com/content_106485747332
+http://www.epinions.com/content_109356879492
+http://www.epinions.com/content_109691768452
+http://www.epinions.com/content_112298069636
+http://www.epinions.com/content_112461188740
+http://www.epinions.com/content_113378889348
+http://www.epinions.com/content_1146069124
+http://www.epinions.com/content_115638963844
+http://www.epinions.com/content_115779800708
+http://www.epinions.com/content_116044762756
+http://www.epinions.com/content_116606865028
+http://www.epinions.com/content_118689074820
+http://www.epinions.com/content_122735791748
+http://www.epinions.com/content_125080080004
+http://www.epinions.com/content_126061678212
+http://www.epinions.com/content_1288151172
+http://www.epinions.com/content_129776258692
+http://www.epinions.com/content_130877197956
+http://www.epinions.com/content_133720411780
+http://www.epinions.com/content_134704107140
+http://www.epinions.com/content_135610928772
+http://www.epinions.com/content_141810372228
+http://www.epinions.com/content_142006718084
+http://www.epinions.com/content_143743749764
+http://www.epinions.com/content_145566699140
+http://www.epinions.com/content_145843064452
+http://www.epinions.com/content_147829591684
+http://www.epinions.com/content_147926912644
+http://www.epinions.com/content_148225363588
+http://www.epinions.com/content_148939771524
+http://www.epinions.com/content_150332542596
+http://www.epinions.com/content_1545314436
+http://www.epinions.com/content_156953775748
+http://www.epinions.com/content_16170978948
+http://www.epinions.com/content_165598629508
+http://www.epinions.com/content_169937374852
+http://www.epinions.com/content_170391539332
+http://www.epinions.com/content_171825401476
+http://www.epinions.com/content_173357174404
+http://www.epinions.com/content_178640031364
+http://www.epinions.com/content_179145510532
+http://www.epinions.com/content_180093619844
+http://www.epinions.com/content_181924695684
+http://www.epinions.com/content_183184887428
+http://www.epinions.com/content_183190982276
+http://www.epinions.com/content_184056974980
+http://www.epinions.com/content_184329866884
+http://www.epinions.com/content_184710696580
+http://www.epinions.com/content_186238799492
+http://www.epinions.com/content_20573818500
+http://www.epinions.com/content_21008977540
+http://www.epinions.com/content_21454098052
+http://www.epinions.com/content_22407712388
+http://www.epinions.com/content_22440873604
+http://www.epinions.com/content_2585043076
+http://www.epinions.com/content_2880086148
+http://www.epinions.com/content_36469378692
+http://www.epinions.com/content_38602968708
+http://www.epinions.com/content_3878985860
+http://www.epinions.com/content_3912933508
+http://www.epinions.com/content_40123534980
+http://www.epinions.com/content_40851050116
+http://www.epinions.com/content_4114522244
+http://www.epinions.com/content_43852271236
+http://www.epinions.com/content_47318797956
+http://www.epinions.com/content_48752856708
+http://www.epinions.com/content_52617514628
+http://www.epinions.com/content_53841464964
+http://www.epinions.com/content_57329290884
+http://www.epinions.com/content_60369833604
+http://www.epinions.com/content_63067295364
+http://www.epinions.com/content_66865172100
+http://www.epinions.com/content_67130003076
+http://www.epinions.com/content_67688304260
+http://www.epinions.com/content_67950251652
+http://www.epinions.com/content_74777726596
+http://www.epinions.com/content_74933636740
+http://www.epinions.com/content_75998006916
+http://www.epinions.com/content_76819041924
+http://www.epinions.com/content_77948817028
+http://www.epinions.com/content_80807431812
+http://www.epinions.com/content_88887824004
+http://www.epinions.com/content_89677860484
+http://www.epinions.com/content_91803127428
+http://www.epinions.com/content_92074708612
+http://www.epinions.com/content_92930084484
+http://www.epinions.com/content_93024784004
+http://www.epinions.com/content_94181953156
+http://www.epinions.com/content_95047552644
+http://www.epinions.com/content_95961517700
+http://www.epinions.com/content_96655937156
+http://www.epinions.com/game-Software-All-Gameboy-Pokemon_Gold/display_~reviews
+http://www.epinions.com/help/faq/?show=faq_earnings
+http://www.epinions.com/hmgd-review-1F49-4CA207B-39D32A54-prod1
+http://www.epinions.com/inst-review-120-11F157CF-39775E60-prod2
+http://www.epinions.com/kifm-B-BEquip-Nursery-Bassinets-Arms_Reach_Co-Sleeper_Bedside/display_~reviews/pp_~1/sort_~date/sort_dir_~des/sec_~opinion_list
+http://www.epinions.com/kifm-Safety-Bed_Rails-Safety_1st_Home___Travel_Bed_Rail/display_~reviews
+http://www.epinions.com/kifm-Topics-All-Health/show_~recent_content
+http://www.epinions.com/kifm-review-3224-2709FC5-38C420A6-prod9
+http://www.epinions.com/kifm-review-4B1-E2C7A7D-38ECE3AF-prod4
+http://www.epinions.com/kifm-review-4DE6-3361A664-3A09C8DF-prod6
+http://www.epinions.com/kifm-review-5320-D598550-38EAC505-prod2
+http://www.epinions.com/kifm-review-5D2-3C578BE-3A24BBE6-prod1
+http://www.epinions.com/kifm-review-7E61-13E4382B-38FB86C0-prod4
+http://www.epinions.com/member/?show=news&sub=032201transcript
+http://www.epinions.com/musc-review-34B4-31FEBA00-3A5926A1-prod2/tk_~CB008.1.3
+http://www.epinions.com/musc_mu-109194
+http://www.epinions.com/musc_mu-393064/display_~reviews
+http://www.epinions.com/musc_mu-83103/display_~reviews
+http://www.epinions.com/pr-Coffee-La_Torcaza_Estate_Traditional_Washed-Green
+http://www.epinions.com/pr-Kirby_Air_Ride_for_GameCube
+http://www.epinions.com/pr-Nyko_Air_Flo_EX_For_PlayStation_2_80501_Game_Pad
+http://www.epinions.com/sprt-All-Exercise_Equipment/show_~recent_content
+http://www.epinions.com/sprt-Golf-Nicklaus_Air_Max_Driver/display_~reviews
+http://www.epinions.com/sprt-Strength-Bowflex_Power_Pro_XT/display_~reviews
+http://www.epinions.com/sprt-Topics-All-Exercise_Equipment-How_To/show_~recent_content
+http://www.epinions.com/sprt-review-3FB9-108D6B71-3991D090-prod1
+http://www.epinions.com/sprt-review-5BAF-118C9EA0-39EA525C-prod5
+http://www.epinions.com/srvc-review-2BFD-6576A1A-3871627C-bd3
+http://www.epinions.com/well-review-7AE5-B57CE9E-396682D9-prod3
+http://www.epionline.org/study_detail.cfm?sid=40
+http://www.episcopalchurch.org/hr_54324_ENG_HTM.htm
+http://www.episcopalchurch.org/hr_54324_ENG_Print.html
+http://www.episcopalian.org/efac/lit.html
+http://www.episcopalstmatthew.org/sunday_school.html
+http://www.epistemelinks.com/Edge/Essays/lt_selecting.asp
+http://www.epitonic.com/genres/punk_5.html
+http://www.eplans.com/luxury-home-plans/
+http://www.epmlaw.com/serious_personal_injury.html
+http://www.epn-online.com/index.php?content=page&page=13667
+http://www.epodunk.com/cgi-bin/genInfo.php?locIndex=1819
+http://www.epolitix.com/EN/ForumBriefs/200409/80c2e441-82a0-4af0-8739-5a65eb17d9fa.htm
+http://www.epowhost.com/faq.html
+http://www.epox.com.tw/eng/news_content.php?serno=24
+http://www.epoxysystems.com/
+http://www.epp-ed.org/Policies/pargu/02-economy_en.asp
+http://www.eppc.org/publications/pubID.1964/pub_detail.asp
+http://www.epri.com/newsletter.asp?issueid=231401&marketnid=207813
+http://www.epri.com/newsletter.asp?issueid=231401&marketnid=207813&targetnid=221745&value=01T084.2
+http://www.eprints.org/self-faq/
+http://www.epromos.com/ProductIndex/BrowseCategory.jhtml?categoryId=2069
+http://www.epropertygold.com/advicecenter/selling/getbestprice.cfm
+http://www.eps.ac.uk/members/rules.html
+http://www.epsa.org/forms/documents/DocumentFormPublic/view?id=30630000000B
+http://www.epsa.uq.edu.au/?page=7587
+http://www.epsaweb.org/primary_education_in_member_states.htm
+http://www.epsg.org.uk/meetings/leaves/
+http://www.epson.co.uk/products/inkjet_printers/product_spec/Stylus_Pro_4000.htm
+http://www.epson.co.uk/products/inkjet_printers/product_spec/Stylus_Pro_7600.htm
+http://www.epson.co.uk/products/inkjet_printers/product_spec/Stylus_Pro_9600.htm
+http://www.epson.com.au/products/pro_graphics/SP10600UC_specs.asp
+http://www.epson.com.au/products/pro_graphics/stylusPro4000_specs.asp
+http://www.epson.com.au/products/pro_graphics/stylusPro7600_specs.asp
+http://www.epson.com.au/products/pro_graphics/stylusPro9600_specs.asp
+http://www.epsscentral.info/knowledgebase/articles/timetoknowledge/view
+http://www.epsscentral.info/knowledgebase/desdev/epiplexsuite/epioverview/view
+http://www.epsscentral.info/knowledgebase/related/proceedingschi
+http://www.epsscentral.info/knowledgebase/reportsstudies/3csofcritical/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/aisforamazon/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/bringingdead/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/givinggood/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/informationseeking/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/itexchange/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/keystoimproving/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/makingthecase/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/onlinedrugstores/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/onlinefinancialservices/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/reachingout/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/sitedesignasa
+http://www.epsscentral.info/knowledgebase/reportsstudies/theholidaysonline/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/webpagedesignimplications/view
+http://www.epsscentral.info/knowledgebase/reportsstudies/workingtogether/view
+http://www.eqdruids.com/reference/tactics/tactics_advanced.htm
+http://www.eqgroup.com/Library/court.tn.2001.htm
+http://www.eqos.com/casestudy_bbuy.shtml
+http://www.equality-network.org/Glossary.shtml
+http://www.equaljusticeworks.org/faq/
+http://www.equaljusticeworks.org/faq/index.php?print=1
+http://www.equestrian.co.uk/ShowJumping/OlympiaInternationalShowJ.html
+http://www.equine-world.co.uk/topic.asp?TOPIC_ID=8150&FORUM_ID=28&CAT_ID=6&Topic_Title=In+hand+Showing&Forum_Title=Showing
+http://www.equineadvertiser.co.uk/tack_and_equipment1.htm
+http://www.equinemotifs.com/
+http://www.equineox.com/technology.html
+http://www.equipped.com/
+http://www.equipped.com/shot_show_2002.htm
+http://www.equipped.org/
+http://www.equisearch.com/care/illness/choke010404/
+http://www.equisearch.com/care/illness/eqcolic287/
+http://www.equisearch.com/care/nutrition/eqbranmash497/
+http://www.equisearch.com/care/nutrition/eqfeed3132/
+http://www.equisearch.com/care/nutrition/eqsoak480/
+http://www.equisearch.com/care/nutrition/specialneedsfeeding112397/
+http://www.equisearch.com/community/chattrans/eqfarrier1703/
+http://www.equisearch.com/community/chattrans/eqfencing1940/
+http://www.equisearch.com/community/chattrans/eqhayes2660/
+http://www.equisearch.com/equiwire/results/eqtravers2721/
+http://www.equisearch.com/equiwire/results/sept-oct03/belmont090603/
+http://www.equisearch.com/farm/arenas/eqchat991/
+http://www.equisearch.com/farm/feed/eqbeetpulp660/
+http://www.equisearch.com/farm/stable/eqbarn915/
+http://www.equisearch.com/magazines/Equus/mounting_120503/
+http://www.equisearch.com/magazines/practicalhorseman/straighten_080803/
+http://www.equisearch.com/sports/dressage/eqfeed1805/
+http://www.equisearch.com/sports/driving/driving021603/
+http://www.equisearch.com/tack/eq9points447/
+http://www.equity.psu.edu/framework/institutional.asp
+http://www.equityapartments.com/content/militaryhousing.asp
+http://www.equiworld.net/uk/horsecare/Breeds/morab/
+http://www.equiworld.net/uk/training/foundation.htm
+http://www.er.doe.gov/production/grants/Fr01_03.html
+http://www.era.anthropology.ac.uk/Era_Resources/Era/Kinship/kinSpecification.html
+http://www.era.anthropology.ac.uk/Era_Resources/Era/Stirling/Thesis/StirlingThesis_1.html
+http://www.era.com/erasell/answers-ssp.html
+http://www.eranova.com/about.htm
+http://www.erasmatazz.com/library/Miscellania/AustraliaTrip/Australia_Trip.html
+http://www.erasmatazz.com/library/Politics/A%20conclusion%20of%20sorts.html
+http://www.erblist.com/erbmania/tangor/ephiphany.html
+http://www.erbook.net/
+http://www.erbook.net/enter.htm
+http://www.erbook.net/ermedcat.htm
+http://www.erbook.net/even_more_er_questions_part2.htm
+http://www.erbook.net/more_advice_on_%20becoming_an_ER_doctor_part2.htm
+http://www.ercim.org/publication/Ercim_News/enw39/van_schuppen.html
+http://www.ercrugby.co.uk/cup/25_4207.php
+http://www.erdc.usace.army.mil/pls/erdcpub/!www_fact_sheet.research_page?ps_rp_numb=57742&tmp_Main_Topic=51594&page=All
+http://www.erdc.usace.army.mil/pls/erdcpub/!www_fact_sheet.research_page?ps_rp_numb=57742&tmp_Main_Topic=51594&page=PRODUCTS&page=USERS&page=BENEFITS
+http://www.ereader.com/product/book/excerpt/10950
+http://www.erenkrantz.com/Words/UntitledSnapshot2.shtml
+http://www.eresonant.com/pages/publications/atc1997.html
+http://www.erexchange.com/articles/db/845A640E67C5486BA15400D2AA92036D.asp
+http://www.ergoindemand.com/
+http://www.ergonomics.org.uk/society/external/press03.htm
+http://www.ergonomics4schools.com/lzone/workspace.htm
+http://www.ergospec.com/products/office_furniture/workstations_adj_tables/electric_height.html
+http://www.ergoweb.com/news/detail.cfm?id=335
+http://www.ergoweb.com/training/seminar/
+http://www.erh.noaa.gov/er/pit/branick2.html
+http://www.erh.noaa.gov/ersd/okx.htm
+http://www.ericdigests.org/1992-1/hispanic.htm
+http://www.ericdigests.org/1992-5/reform.htm
+http://www.ericdigests.org/1996-3/in.htm
+http://www.ericdigests.org/1999-1/asian.html
+http://www.ericdigests.org/1999-2/latina.htm
+http://www.ericdigests.org/2002-3/music.htm
+http://www.ericdigests.org/2003-4/judicial-review.html
+http://www.ericdigests.org/pre-927/soviet.htm
+http://www.ericdsnider.com/view.php?srkey=252
+http://www.ericfrancis.com/articles/death_penalty.html
+http://www.ericfrancis.com/essays/state.html
+http://www.erickerickson.org/blog/index.php/category/church-revitalization/
+http://www.ericlee.me.uk/archive/000100.html
+http://www.ericmackonline.com/emo/emonline.nsf/dx/dr-radicati-responds-sort-of
+http://www.ericmackonline.com/ica/blogs/emonline.nsf/dx/sorry-toshiba-Im-not-yabhtu?opendocument&comments
+http://www.ericmeyeroncss.com/bonus/render-mode.html
+http://www.ericsecho.org/scottish.htm
+http://www.ericsson.com/press/20050422-073048.html
+http://www.ericzorn.com/mailbag/wrigley/
+http://www.erie.gov/executive110504.phtml
+http://www.eriebar.org/
+http://www.erikbenson.com/
+http://www.erin.utoronto.ca/~w3mat132/announcements.html
+http://www.erinoconnor.org/reviews/swade.shtml
+http://www.eriposte.com/election04/appalling_polling.htm
+http://www.erisk.com/ResourceCenter/Regulation/MoneylaunderingAreregulat.asp
+http://www.erlang.com/design.html
+http://www.ero.govt.nz/Publications/pubs2002/Montessori.htm
+http://www.erobertparker.com/info/rparker.asp
+http://www.erosboutique.com/
+http://www.erowid.org/chemicals/ayahuasca/ayahuasca_culture3.shtml
+http://www.erowid.org/chemicals/caffeine/caffeine_effects.shtml
+http://www.erowid.org/general/about/about_software.shtml
+http://www.erowid.org/general/mentions/2001_halpern_amjpsyc.shtml
+http://www.erpcsales.com/faq.cfm
+http://www.erranet.org/Events/ERRA/2003/investmentconference
+http://www.errolmorris.com/film/fow_glossary.html
+http://www.ers.dol.govt.nz/goodfaith/code_print.html
+http://www.ers.dol.govt.nz/help/ers.asp
+http://www.ers.dol.govt.nz/holidays/faqs.html
+http://www.ers.usda.gov/Briefing/FarmPolicy/background.htm
+http://www.ers.usda.gov/Briefing/SoybeansOilCrops/
+http://www.ersnet.org/ers/show/default.aspx?id_attach=9127
+http://www.ert.be/pd/pdc/endc03.htm
+http://www.ertnet.demon.co.uk/RightToKnow.html
+http://www.erubberstamp.com/products.htm
+http://www.erudit.org/revue/meta/1999/v44/n1/002224ar.html
+http://www.erunda.org/hooey/2003/09/going-going-here.html
+http://www.es.flinders.edu.au/~mattom/ShelfCoast/notes/chapter17.html
+http://www.esa.int/SPECIALS/Space_Shuttle_Columbia/SEMY2O1A6BD_0.html
+http://www.esa.int/esaCP/ASE4YZ9KOYC_FeatureWeek_0.html
+http://www.esa.int/esaCP/ESA6L7ZPD4D_Protecting_0.html
+http://www.esa.int/esaCP/ESAQRHPZ9NC_index_0.html
+http://www.esa.int/esaCP/Pr_14_2003_i_EN.html
+http://www.esa.int/esaCP/Pr_17_1999_p_EN.html
+http://www.esa.int/esaCP/Pr_27_2005_p_EN.html
+http://www.esa.int/esaCP/Pr_35_2003_p_EN.html
+http://www.esa.int/esaCP/Pr_3_2003_i_EN.html
+http://www.esa.int/esaCP/SEMEGDS1VED_Benefits_0.html
+http://www.esa.int/esaCP/SEMEGDS1VED_index_0.html
+http://www.esa.int/esaCP/SEMF0K0DU8E_Benefits_0.html
+http://www.esa.int/esaCP/SEMF0K0DU8E_index_0.html
+http://www.esa.int/esaTE/SEM90ZR1VED_index_0.html
+http://www.esa.int/esapub/br/br114/br114tec.htm
+http://www.esa.int/esapub/bulletin/bullet88/daman88.htm
+http://www.esa.int/esapub/bulletin/bullet88/steve88.htm
+http://www.esa.int/export/esaCP/Pr_6_2002_i_EN.html
+http://www.esa.int/export/esaEO/ESA6L7ZPD4D_index_0.html
+http://www.esa.int/export/esaHS/ESAGO90VMOC_astronauts_2.html
+http://www.esa.org/benthic/benthicabstracts.htm
+http://www.esaa.com.au/store/page.pl?id=1492
+http://www.esai.org/
+http://www.esajournals.org/esaonline/?request=get-abstract&issn=0012-9658&volume=080&issue=06&page=2064
+http://www.esajournals.org/esaonline/?request=get-document&issn=0012-9615&volume=075&issue=02&page=0231
+http://www.esajournals.org/esaonline/?request=get-document&issn=0012-9658&volume=080&issue=06&page=1806
+http://www.esajournals.org/esaonline/?request=get-document&issn=0012-9658&volume=080&issue=06&page=2064
+http://www.esajournals.org/esaonline/?request=get-document&issn=0012-9658&volume=083&issue=02&page=0480
+http://www.esato.com/archive/t.php/t-74042
+http://www.esato.com/board/viewtopic.php?topic=74042&r=a
+http://www.esato.com/news/article.php/id=402
+http://www.esato.com/news/article.php/id=428
+http://www.esb.ie/main/news_events/press_release247.jsp
+http://www.esbvm.org.uk/oxford2000.htm
+http://www.esc.mtu.edu/EarthWeek2003/houseTours.htm
+http://www.esc1.net/mcec.asp
+http://www.esc2000.com/
+http://www.escan.org.uk/
+http://www.escape-co.com/budget_preparedness.htm
+http://www.escapeartist.com/International_Living/French_Riviera.html
+http://www.escapeartist.com/International_Living/Languedoc.html
+http://www.escapeartist.com/Offshore_Webhosting/Making_Money.html
+http://www.escapeartist.com/e_Books/Ireland_Report/
+http://www.escapeartist.com/efam/38/offshore_companies.html
+http://www.escapeartist.com/efam/56/Istanbul_Travel.html
+http://www.escapeartist.com/efam/57/Authors_Wanted.html
+http://www.escapeartist.com/efam/57/Making_Money.html
+http://www.escapeartist.com/efam34/ESL_teaching_overseas.html
+http://www.escapeartist.com/efam6/Investing_in_Panama.html
+http://www.escapeartist.com/expatriate/expatriate1.htm
+http://www.escapeartist.com/expatriate/expatriate2.htm
+http://www.escapeartist.com/expatriate/insurance.htm
+http://www.escapeartist.com/international/0400_ireland.html
+http://www.escapeartist.com/international/ireland_0300.html
+http://www.escapeartist.com/moving/moving.htm
+http://www.escapeartist.com/transatlantic/magazine4.htm
+http://www.escapefromknab.com/educational-bottom.html
+http://www.escapehomes.com/cities/Sea_Ranch.htm
+http://www.escapehomes.com/main.aspx?Tabid=46&EscapeTownID=157
+http://www.escapehomes.com/main.aspx?tabid=31&ListingID=5905
+http://www.escc.se/misc/hostels.html
+http://www.escmid.org/sites/science/meetings/calendar/index.asp
+http://www.escort.sexcia.com/toronto.html
+http://www.escrs.org/eurotimes/September2003/supplement/Good_technique.asp
+http://www.escrutgers.com/publications/howto/FS607.htm
+http://www.escusd.k12.ca.us/mission_trail/SJBautista/MissionSanJuanBautista.html
+http://www.esd.mun.ca/~gac/PUBLICAT/editors.html
+http://www.esd.ornl.gov/PGG/HERMES/description.html
+http://www.esd.ornl.gov/ern/embyr/embyr.html
+http://www.esd112.org/workshops/elementk_courses.html
+http://www.esdesign.com/projects_comm_page2.htm
+http://www.esf.edu/catalog/WPE.htm
+http://www.esf.edu/newspubs/news/2005/05.03.richter.htm
+http://www.esf.edu/resorg/rooseveltwildlife/Roosevelt.htm
+http://www.esf.org/esf_domain_home.php?section=2&language=0&domain=1
+http://www.esgt.org/president.html
+http://www.eshop.msn.com/marketplace.aspx?pmpType=1&mpId=0&pcId=7714&catId=681&page=4
+http://www.eshre.com/emc.asp?pageId=435
+http://www.eshre.com/emc.asp?pageId=459
+http://www.eshre.com/emc.asp?pageId=627
+http://www.esi-europe.com/case_studies/j_siemens.asp
+http://www.esi-intl.com/Public/consulting/index.asp
+http://www.esi-topics.com/breast-cancer/interviews/dr-khandan-keyomarsi.html
+http://www.eskimo.com/~bpentium/articles/thegates.html
+http://www.eskimo.com/~leiba/history.html
+http://www.eskimo.com/~rkj/e.htm
+http://www.eskimo.com/~robla/politics/condorcet.html
+http://www.eslarp.uiuc.edu/ibex/archive/IDOT/idot26.htm
+http://www.eslcafe.com/forums/job/viewtopic.php?t=12326
+http://www.eslcafe.com/forums/job/viewtopic.php?t=16575
+http://www.eslcafe.com/forums/job/viewtopic.php?t=23135
+http://www.eslcafe.com/forums/job/viewtopic.php?t=23524
+http://www.eslcafe.com/forums/job/viewtopic.php?t=24273
+http://www.eslcafe.com/forums/job/viewtopic.php?t=25510
+http://www.eslcafe.com/forums/job/viewtopic.php?t=25523
+http://www.eslcafe.com/forums/job/viewtopic.php?t=26097
+http://www.eslcafe.com/jobinfo/asia/sefer.cgi?display:1058657421-29133.txt
+http://www.eslcafe.com/jobinfo/europe/sefer.cgi?display:960556612-26372.txt
+http://www.eslcity.com/english/?doc=bbs/gnuboard.php&bo_table=games&page=1&wr_id=44
+http://www.eslnotes.com/movies/html/sleeper.html
+http://www.eslpartyland.com/teachers/grammar/Simplepresandprog.htm
+http://www.esmagazine.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2503,83357,00.html
+http://www.esmo.org/SummerConference/patientSeminar.html
+http://www.eso.org/outreach/info-events/hale-bopp/comet-hale-bopp-summary-mar07-97-rw.html
+http://www.eso.org/outreach/press-rel/pr-1994/pr-16-94.html
+http://www.eso.org/outreach/press-rel/pr-2000/phot-26-00.html
+http://www.eso.org/outreach/press-rel/pr-2000/phot-27-00.html
+http://www.eso.org/outreach/press-rel/pr-2001/pr-10-01.html
+http://www.eso.org/outreach/press-rel/pr-2001/pr-28-01.html
+http://www.eso.org/outreach/press-rel/pr-2003/pr-18-03.html
+http://www.eso.org/outreach/press-rel/pr-2003/pr-26-03.html
+http://www.espac.org/csi_pages/predudiced_discredited.html
+http://www.espace.gc.ca/asc/eng/apogee/2003/09_interview.asp
+http://www.espc.co.uk/news_data/releases/ESPC/2000/PR_2000.asp
+http://www.espen.com/links.htm
+http://www.espen.com/papers/ifip.htm
+http://www.esperanto.ie/english/zaft/zaft(1).htm
+http://www.espnstar.com/facup/facup_newsdetail_1414047.html
+http://www.espnstar.com/studio/studio_coldetail_1037018.html
+http://www.espnstar.com/studio/studio_coldetail_1383318.html
+http://www.espnstar.com/studio/studio_coldetail_887805.html
+http://www.espnstar.com/studio/studio_coldetail_911389.html
+http://www.espressobusiness.com/
+http://www.espressotec.com/iccoffee215.asp
+http://www.esrb.org/about_updates.asp
+http://www.esrc.ac.uk/ESRCContent/news/june04-6.asp
+http://www.esrf.fr/NewsAndEvents/PressReleases/sorel/
+http://www.esri.go.jp/en/archive/bun/abstract/bun165-e.html
+http://www.esri.ie/content.cfm?t=Irish%20Economy&mid=4
+http://www.esrnational.org/guide.htm
+http://www.ess.ucla.edu/faculty/sornette/
+http://www.essaydepot.com/essayme/508/index.php
+http://www.essayedge.com/business/admissions/interview.shtml
+http://www.essayedge.com/college/essayadvice/course/lfour_tone.shtml
+http://www.essayedge.com/graduate/essayadvice/course/lo_flaws.shtml
+http://www.essayedge.com/medical/essayadvice/course/residency.shtml
+http://www.essayproof.net/museum/articles/auctioncats.html
+http://www.essaysample.com/essay/000937.html
+http://www.essaysample.com/essay/001609.html
+http://www.essaysample.com/essay/002142.html
+http://www.essaysample.com/essay/003658.html
+http://www.essaytown.net/boston-tea-party_essays_papers.html
+http://www.essaytown.net/glass-ceiling_essays_papers.html
+http://www.essaytown.net/soviet-union_essays_papers.html
+http://www.essence.com/essence/themix/takebackthemusic/whattheyresaying.html
+http://www.essent-finance.nl/knowledge/bg4.jsp
+http://www.essential-skills.com/RAPPORT.html
+http://www.essential-training.co.uk/reviews.htm
+http://www.essentialbaby.com.au/CFForum/viewmessages.cfm?Forum=27&Topic=138498
+http://www.essentialbaby.com.au/CFForum/viewmessages.cfm?forum=64&topic=138271
+http://www.essentialbaby.com.au/GettingPregnant/Preparing/YourBody/EatingHabits.cfm
+http://www.essentialbaby.com.au/Pregnancy/Complications.cfm
+http://www.essentialschools.org/cs/resources/view/ces_res/137
+http://www.essentialschools.org/cs/resources/view/ces_res/178
+http://www.essentialschools.org/cs/resources/view/ces_res/225
+http://www.essentialschools.org/cs/resources/view/ces_res/74
+http://www.essentialschools.org/cs/resources/view/ces_res/98
+http://www.essentialsuede.com/lyricshm.html
+http://www.essentialtremor.org/discus_adult/messages/9/32.html?1107325525
+http://www.essex.ac.uk/ccfea/people/members.htm
+http://www.essex.ac.uk/centres/euro/news.htm
+http://www.essex.ac.uk/economics/department/new-ug04.shtm
+http://www.essex.ac.uk/filmstudies/news_and_events/mike_leigh.htm
+http://www.essex.ac.uk/methods/Archive/2004%20website/application%20procedure.htm
+http://www.essex.ac.uk/overseas/
+http://www.essex.ac.uk/personnel/Pol&Proc/Grading/c&sfactors.htm
+http://www.essex.ac.uk/programmespecs/oneyear.asp?prog=MA++W6103505
+http://www.essex.ac.uk/programmespecs/threeyear.asp?prog=BA++V1W6++05
+http://www.essex.ac.uk/scra/constitution/default.htm
+http://www.essex.ac.uk/theatre/students/
+http://www.essexjunction.org/pc052004.htm
+http://www.essexpast.co.uk/essexreview/notes1.html
+http://www.essexstudent.com/main/union/membershipservices/ESCA/getmore/degreerelevantopps
+http://www.essortment.com/in/Careers.How-To/
+http://www.essp.be/egnos_receivers.htm
+http://www.estancialajolla.com/careers/index.asp
+http://www.esterline.com/investor/news2001/n-E252_01.stm
+http://www.estevanmassagetherapy.com/doula.html
+http://www.estheryoga.com/vanda.html
+http://www.estss.org/events/tsunam.htm
+http://www.esva.net/~rwest/trouble.html
+http://www.esvon.com/pg/products/p_cl_auto/
+http://www.eta.co.uk/news/newsview.asp?n=306
+http://www.etan.org/et2001c/december/01-8/08were.htm
+http://www.etan.org/et2004/january/18-24/21group.htm
+http://www.etan.org/et99c/october/01-9/3drmurp.htm
+http://www.etan.org/news/2003a/01senate.htm
+http://www.etan.org/news/2003a/10col.htm
+http://www.etch.com/tourip.cfm
+http://www.etci.ie/
+http://www.eteamz.com/gapearlsbasketball/
+http://www.eteamz.com/hllbb/
+http://www.eternalegypt.org/EternalEgyptWebsiteWeb/HomeServlet?ee_website_action_key=action.display.topic.details&language_id=1&trait_item_id=10000031
+http://www.eternalnight.co.uk/fiction/2004s/scentofthewolf-sample.html
+http://www.etesters.com/search/product/listAll.cfm/keyword/Stand_Alone
+http://www.etext.org/Zines/Quanta/circumstances.html
+http://www.etext.org/Zines/Quanta/rules.html
+http://www.etf.bg.ac.yu/Fakultet/donacije.html?lang=en
+http://www.ethailand.com/index.php?id=1774
+http://www.ethanwiner.com/AdultBeg.html
+http://www.ethanzuckerman.com/blog/
+http://www.ethanzuckerman.com/blog/?cat=5
+http://www.ethanzuckerman.com/blog/?cat=6
+http://www.ethanzuckerman.com/blog/?p=85
+http://www.ethanzuckerman.com/blog/index.php?paged=2
+http://www.ethericrainengineering.info/clincher/o_clincher.html
+http://www.ethicalatheist.com/docs/questions_for_god.html
+http://www.ethicalcorp.com/labour2003/programme.shtml
+http://www.ethicalcorporation.com/content.asp?ContentID=3405
+http://www.ethicaltraveler.com/aid_disp.php?disp=3
+http://www.ethics-network.org.uk/Cases/previous/cost.htm
+http://www.ethics-network.org.uk/Course/courses.htm
+http://www.ethics.harvard.edu/welcome_practical.php
+http://www.ethics.org.au/things_to_do/whats_new.asp
+http://www.ethicsclassroom.info/
+http://www.ethicsclassroom.info/index.asp
+http://www.ethicsforschools.org/suffering/why.htm
+http://www.ethos.org/
+http://www.eths.k12.il.us/dept/appliedarts/
+http://www.etiquettehell.com/businessetiquette/PlainBadBusiness/ebusinessarc1999.htm
+http://www.etiquettehell.com/everydayetiquette/RoadRage/roadrage2003arc.htm
+http://www.etiquettehell.com/everydayetiquette/babyshwr/ebabyswrarc2000-3.htm
+http://www.etiquettehell.com/everydayetiquette/guests/guests2000arc.htm
+http://www.etiquettehell.com/weddingetiquette/guests/eguests2002arc.htm
+http://www.etmachinist.com/nov_dec04/product.htm
+http://www.etn.nl/frq/fusiedub.htm
+http://www.etn.nl/frq/fusiesnn.htm
+http://www.etni.org.il/holidays/happening.html
+http://www.etnj.com/tatshack/tattoo/books-a-z.html
+http://www.eto.org.uk/faq/faq04.htm
+http://www.etoile.co.uk/Muse/020215.html
+http://www.etoile.co.uk/Muse/020404.html
+http://www.etoiline.com/dreamer/dev.html
+http://www.etown.edu/vl/eurunion.html
+http://www.etown.edu/vl/globenv.html
+http://www.etprofessional.com/modules.php?name=Content&pa=showpage&pid=33
+http://www.etr.org/recapp/column/column200303.htm
+http://www.etr.org/recapp/practice/youthskills200403.htm
+http://www.etretailbiz.com/Jan2003/guest2.html
+http://www.ets.org/disability/adhdplcy.html
+http://www.ets.org/regions/dco/castle.html
+http://www.ets.org/research/pic/twsec2.html
+http://www.ets.org/research/pic/twsec3.html
+http://www.ets.org/research/pic/v8n1a.html
+http://www.etsc.be/documents/rep_road2.htm
+http://www.etsu.com/activate/closure.htm
+http://www.etsu.edu/wrcetsu/Wmwrdi5.htm
+http://www.etuc.org/a/1176
+http://www.etuc.org/a/237
+http://www.eu-energy.com/Nuclear%20package.html
+http://www.eu-exams.com/eu_institution_overview.html
+http://www.eu-newgov.org/datalists/project_detail.asp?Project_ID=22
+http://www.eu-romani.org/nupepet.htm
+http://www.eu2002.dk/news/news_read.asp?iInformationID=25834
+http://www.eu2004.ie/templates/news.asp?sNavlocator=66&language_id=1&list_id=271
+http://www.eu2005.lu/en/actualites/communiques/2005/02/22us-conf/
+http://www.eubusiness.com/East_Europe/050623120856.d39ad1iw
+http://www.eubusiness.com/East_Europe/050623142344.e9yr1twy
+http://www.eubusiness.com/East_Europe/enlargement.2005-06-20/view
+http://www.eubusiness.com/East_Europe/sex-trade.2005-06-22/view
+http://www.eubusiness.com/East_Europe/turkey.2005-06-22
+http://www.eubusiness.com/Energy/050623125841.dvqup3u0/view
+http://www.eubusiness.com/Finance/050624094302.f4883mvl
+http://www.eubusiness.com/Finance/050626032249.0gset0n3
+http://www.eubusiness.com/Finance/9819
+http://www.eubusiness.com/Finance/index_html?b_start:int=60
+http://www.eubusiness.com/Homepage_Breaking_News/23359
+http://www.eubusiness.com/Institutions/050623153624.gb59uokg
+http://www.eubusiness.com/Institutions/050624090310.wdrvwply/view
+http://www.eubusiness.com/Institutions/050624112924.cz8dbpxp/view
+http://www.eubusiness.com/Institutions/050626025147.u19weebe
+http://www.eubusiness.com/Newswire/plonearticle.2005-06-03.6389895181
+http://www.eubusiness.com/Rd/network.2005-06-23
+http://www.eubusiness.com/afp/050124132711.8n3ajd1h/view
+http://www.eubusiness.com/go/www.meganobeirne.com/joyce-2004.htm
+http://www.eubusiness.com/imported/1999/02/10250
+http://www.eubusiness.com/imported/1999/02/10250/
+http://www.eubusiness.com/imported/2001/11/63162
+http://www.eubusiness.com/imported/2001/11/63162/
+http://www.eubusiness.com/imported/2003/03/105845
+http://www.eubusiness.com/imported/2003/05/109652/
+http://www.eubusiness.com/press/ueapme.2005-06-22
+http://www.eubusiness.com/topics/Constitution/index_html?b_start:int=20
+http://www.eubusiness.com/topics/Employment/ind.2005-01-21/view
+http://www.eubusiness.com/topics/Food/EUNews.2004-05-26.3259
+http://www.eubusiness.com/topics/Institutions/
+http://www.eubusiness.com/topics/Institutions/index_html?b_start:int=20
+http://www.eubusiness.com/topics/Portugal/index_html?b_start:int=20
+http://www.eubusiness.com/topics/Rd/budget.2005-02-07
+http://www.eubusiness.com/topics/Rd/budget.2005-02-07/view
+http://www.eubusiness.com/topics/SMEs/lisbon.2005-02-05/view
+http://www.euconferences.com/chemicals04_agenda.htm
+http://www.euconferences.com/chemicals04_speakers.htm
+http://www.euconferences.com/chemicalsmanagement04/day2presentations.htm
+http://www.eufic.org/gb/food/pag/food04/food041.htm
+http://www.eufic.org/gb/food/pag/food09/food092.htm
+http://www.euforbih.org/links.htm
+http://www.eugeneglassschool.org/
+http://www.eugeneglassschool.org/m_dupille.cfm
+http://www.eugrants.org/choices_mdetail2.asp?id=87
+http://www.euireland.ie/news/
+http://www.euireland.ie/news/echo/
+http://www.eumas.org/2003/venue.html
+http://www.eun.org/ww/en/pub/comenius/about/comenius_action_1__school_part.htm
+http://www.euphorochrome.com/photoblog/index.php?p=131
+http://www.eupolitix.com/EN/Interviews/200309/4f0dc049-33ec-4f24-a0d0-9fd2be364cae.htm
+http://www.euprojects.net/ebygov/team.html
+http://www.euractiv.com/Article?tcmuri=tcm:29-110149-16&type=Analysis
+http://www.euractiv.com/Article?tcmuri=tcm:29-117775-16&type=News
+http://www.euractiv.com/Article?tcmuri=tcm:29-128499-16&type=Analysis
+http://www.euractiv.com/Article?tcmuri=tcm:29-129587-16&type=LinksDossier
+http://www.euractiv.com/Article?tcmuri=tcm:29-131147-16&type=LinksDossier
+http://www.euractiv.com/Article?tcmuri=tcm:29-131692-16&type=News
+http://www.euractiv.com/Article?tcmuri=tcm:29-133371-16&type=LinksDossier
+http://www.euractiv.com/Article?tcmuri=tcm:29-140197-16&type=News
+http://www.euractiv.com/Article?tcmuri=tcm:29-140336-16&type=Interview
+http://www.eurasianet.org/departments/insight/articles/eav082703.shtml
+http://www.eurasianet.org/departments/insight/articles/pp010305.shtml
+http://www.eurasianet.org/departments/rights/articles/eav020303.shtml
+http://www.eurekacyclists.co.uk/HTMLFiles/homePage.htm
+http://www.eurekalert.org/aaasnewsroom/
+http://www.eurekalert.org/features/doe/2002-12/dgi-ssd122602.php
+http://www.eurekalert.org/pub_releases/2003-03/ecrd-ab032703.php
+http://www.eurekalert.org/pub_releases/2003-07/icc-gwi072703.php
+http://www.eurekalert.org/pub_releases/2003-10/uou-bm9102603.php
+http://www.eurekalert.org/pub_releases/2005-05/sri-tse051805.php
+http://www.eurekalert.org/pub_releases/2005-06/aaft-bsi062405.php
+http://www.eurekalert.org/pub_releases/2005-06/df-fsa060205.php
+http://www.eurekalert.org/pub_releases/2005-06/dumc-dkh060205.php
+http://www.eurekalert.org/pub_releases/2005-06/uomh-aae061505.php
+http://www.eurekalert.org/pub_releases/2005-06/vt-5my061305.php
+http://www.eureporter.co.uk/mediacenter/release.cfm?r=103
+http://www.euribor.org/
+http://www.euring.org/edb/methods.htm
+http://www.euro-emergencymed.com/pt/re/ejem/fulltext.00063110-200209000-00006.htm
+http://www.euro-emergencymed.com/pt/re/ejem/fulltext.00063110-200406000-00011.htm
+http://www.euro-tongil.org/1957/570210.html
+http://www.euro.gov.uk/committee_pages.asp?id=11&pg=1&ls=1
+http://www.euro.gov.uk/committee_pages.asp?id=9&pg=1&ls=1
+http://www.euro.who.int/HEN/Syntheses/injuries/20041016_4
+http://www.euro.who.int/eprise/main/WHO/Progs/HPA/Publications/20020423_3
+http://www.euroaccessibility.org/tf3.php
+http://www.eurobasket.com/
+http://www.euroblind.org/fichiersGB/ga7pswrep.htm
+http://www.eurocall-languages.org/news/newsletter/3/
+http://www.eurocean.org/categories.php?category_no=126
+http://www.eurocean.org/categories.php?category_no=95
+http://www.eurocheapo.com/prague/listings/selection/andante.asp
+http://www.eurochristmas.com/euroinfo/iceland.htm
+http://www.eurocomms.co.uk/news/story.shtml?news.REF=1267
+http://www.euroconex.com/aboutus/execbiogs.htm
+http://www.eurocosm.com/Eurocosm/AppEC/Pdcd/Advice/ALLGB.asp
+http://www.eurodata.com/
+http://www.euroeducation.net/prof/albanco.htm
+http://www.euroeducation.net/prof/ukrco.htm
+http://www.eurofighter-typhoon.co.uk/Eurofighter/tech.html
+http://www.eurofound.eu.int/living/socpub_cstudies/ir1.htm
+http://www.eurofunding.com/news_info.asp?idnews=1835
+http://www.eurogamer.net/archive.php?platform=pc&type=feature&sort=reversechrono
+http://www.eurogamer.net/article.php?article_id=2222
+http://www.eurogamer.net/article.php?article_id=57448
+http://www.eurogamer.net/article.php?article_id=59600
+http://www.eurogamer.net/forum_thread_posts.php?thread_id=33043&forum_id=1
+http://www.eurogamer.net/forum_thread_posts.php?thread_id=33308&forum_id=1
+http://www.eurogreens.org/cms/default/dok/37/37562.a_common_manifesto_for_a_common_european.htm
+http://www.eurogreens.org/cms/default/rubrik/3/3133.manifesto.htm
+http://www.eurojgh.com/pt/re/ejgh/fulltext.00042737-200407000-00004.htm
+http://www.eurojobs.com/privacyStatementTemplate.jsp
+http://www.euroleather.com/lithuanian_event.htm
+http://www.eurolink-eu.net/newsletter_november.htm
+http://www.euromonitor.com/Cosmetics_and_Toiletries_in_Romania
+http://www.euromonitor.com/Cosmetics_and_Toiletries_in_Thailand
+http://www.euromonitor.com/Dietetic_Foods_in_France
+http://www.euromonitor.com/Dietetic_Foods_in_Hong_Kong
+http://www.euromonitor.com/Soft_Drinks_in_Slovakia
+http://www.euromonitor.com/Toys_and_Games_in_Turkey
+http://www.europa-pages.com/uk/london.html
+http://www.europaworld.org/week125/europeancommission18403.htm
+http://www.europaworld.org/week169/europeat19304.htm
+http://www.europaworld.org/week227/speechmandelson10605.htm
+http://www.europe-airsports.fai.org/policystatements2
+http://www.europe-technologies.com/index.php?option=com_docman&task=view_category&Itemid=26&subcat=1&catid=83&limitstart=0&limit=10
+http://www.europe-technologies.com/index.php?option=com_docman&task=view_category&Itemid=46&subcat=1&catid=83&limitstart=0&limit=10
+http://www.europe.org/london.html?l=
+http://www.european-biosolids.com/Introduction.htm
+http://www.european-schoolprojects.net/festivals/France/Historic/history.html
+http://www.european-voice.com/archive/issue.asp?id=200
+http://www.european-voice.com/archive/issue.asp?id=318
+http://www.european-voice.com/archive/issue.asp?id=354
+http://www.european-voice.com/archive/issue.asp?id=422
+http://www.european-voice.com/archive/volume.asp?id=2
+http://www.european-wall-tapestries.com/store/catalog/Fleur_De_Lis_Antique_Rod_p_629.html
+http://www.europeanaffairs.org/
+http://www.europeanaffairs.org/current_issue/2004_fall/2004_fall_107.php4
+http://www.europeancarweb.com/longtermers/0105ec_tt/
+http://www.europeancarweb.com/longtermers/0201ec_bmw330i/
+http://www.europeancarweb.com/longtermers/0209ec_jaguar/
+http://www.europeanenergyfocus.com/detail.aspx?pcode=113
+http://www.europeanforum.net/news/131
+http://www.europeanguesthouse.com/dancing_street.htm
+http://www.europeanhostels.com/fall/faq/default.asp
+http://www.europeanrailguide.com/trains/es.html
+http://www.europeantour.com/tournaments/latest.sps?iTourNo=2003028
+http://www.europeanvegetarian.org/evu/english/news/news974/ironman.html
+http://www.europeetravel.net/2004/12/31/196/worlds-greatest-dog-show/
+http://www.europhysicsnews.com/full/12/article12/article12.html
+http://www.europrail.net/service/faq.html
+http://www.euroregion.net/business/jobs/unemployment/governmentpolicy.html
+http://www.eurosport.co.uk/home/pages/v4/l2/s22/e6902/sport_lng2_spo22_evt6902_sto681398.shtml
+http://www.eurosport.com/home/pages/v4/l0/s57/e7184/sport_lng0_spo57_evt7184_sto681052.shtml
+http://www.eurosport.com/home/pages/v4/l2/s13/MessageBoard_lng2_spo13_sto551825.shtml
+http://www.eurosur.org/wide/Globalisation/IvS-Info_gender-indicators.htm
+http://www.eurosurveillance.org/em/v05n03/0503-224.asp
+http://www.eurosurveillance.org/em/v08n02/0802-223.asp
+http://www.eurosurveillance.org/em/v09n12/0912-225.asp
+http://www.eurosurveillance.org/em/v10n02/1002-221.asp
+http://www.eurosurveillance.org/em/v10n02/1002-227.asp
+http://www.eurosurveillance.org/em/v10n03/1003-224.asp
+http://www.eurosurveillance.org/em/v10n04/1004-223.asp
+http://www.eurosurveillance.org/em/v10n04/1004-224.asp
+http://www.eurosurveillance.org/ew/1999/991013.asp
+http://www.eurosurveillance.org/ew/2000/000420.asp
+http://www.eurotechnology.com/austriajapantechforum/
+http://www.eurotherm.com/training/tutorial/instrumentation/holland/measure.htm
+http://www.eursoc.com/news/categoryfront.php/id/27/Europe_Round-Up.html
+http://www.eurunion.org/News/press/2004/200400137.htm
+http://www.eurunion.org/News/press/2004/200400155.htm
+http://www.eurunion.org/News/press/2004/20040077.htm
+http://www.eurunion.org/News/press/2005/2005006.htm
+http://www.eurunion.org/News/press/2005/2005062.htm
+http://www.eurunion.org/News/speeches/2005/050209jmb.htm
+http://www.eurunion.org/News/speeches/2005/050322jbarrotprconf.htm
+http://www.eurunion.org/delegati/ppa/interns.htm
+http://www.eurunion.org/infores/otherweb.htm
+http://www.eurunion.org/legislat/DeathPenalty/deathpenhome.htm
+http://www.eurunion.org/legislat/agd2000/agd2000.htm
+http://www.eurunion.org/news/press/2004/20040073.htm
+http://www.euteach.com/euteach_module_b2
+http://www.evalutech.sreb.org/21stcentury/Standards.asp
+http://www.evan-moor.com/catalog/book.asp?BID=412
+http://www.evan-moor.com/catalog/book.asp?CID=8&SID=9&BID=412
+http://www.evangelicalfellowship.ca/social/page_viewer.asp?SI_Page_ID=3
+http://www.evangelist.org/evv/bish1102.htm
+http://www.evangelsociety.org/francisco/gaychange.html
+http://www.evansranchmercantile.com/crittercorner.html
+http://www.evb-aromatherapy.com/importance.html
+http://www.evcforum.net/cgi-bin/dm.cgi?action=msg&f=28&t=5&m=12
+http://www.evcforum.net/cgi-bin/dm.cgi?action=msg&f=3&t=68&m=1
+http://www.evcj.com/evcj/1093015868277.html
+http://www.eveandersson.com/pi/
+http://www.evenflo.com/pa/bg/pabg_exerciser.phtml
+http://www.eveningtelegraph.co.uk/output/2005/05/23/gensport.shtm
+http://www.eveningtimes.co.uk/features/7013268.html
+http://www.eveningtimes.co.uk/features/7014880.html
+http://www.evenstar8.co.uk/script.html
+http://www.event-solutions.com/halloffame/2002halloffamers.html
+http://www.eventsandadventures.com/FAQ.html
+http://www.eventus.org.uk/fewer/outside.html
+http://www.ever-readyglass.com/auto/
+http://www.evereden.com/villageidiom/column5.html
+http://www.everest.co.uk/everest-windows/trad_timber_sash_windows.cfm
+http://www.everestnews2004.com/everestnews2/mseverest2004dis2.htm
+http://www.everestnews2004.com/malloryandirvine2004/malloryandirvineroute2004.htm
+http://www.everestnews2004.com/summitclimb/chooyuautumn2004dis09112004.htm
+http://www.evergladesplan.org/pm/studies/wpa.cfm
+http://www.evergreen.ca/en/cg/cg-resources.html
+http://www.evergreen.edu/financialaid/FAQ.htm
+http://www.evergreen.edu/financialaid/faq.htm
+http://www.evergreen.edu/studentemployment/Jobs/_View_All_On_Campus_Institutional_Jobs_1.html
+http://www.evergreen.edu/washcenter/resources/acl/c2.html
+http://www.eversheds.com/international/europe.asp
+http://www.eversheds.com/international/usa.asp
+http://www.evert.de/eft807e.htm
+http://www.evertype.com/standards/og/ogmharc.html
+http://www.everybody.co.nz/ubb/ultimatebb.php?ubb=get_topic;f=79;t=000026
+http://www.everydaysteward.com/enewsletter/dec04/budgeting.php
+http://www.everyhit.com/timelines/elvis_presley.html
+http://www.everystudent.com/features/gettingconnected.html
+http://www.everystudent.com/wires/toxic.html
+http://www.everything2.com/?node_id=1116119
+http://www.everything2.com/?node_id=536533
+http://www.everything2.com/index.pl?node=Earth%3A%20Final%20Conflict
+http://www.everything2.com/index.pl?node=The%20%22Watch%20on%20the%20Heather%22%20argument%20for%20creation%20from%20design
+http://www.everything2.com/index.pl?node=arm
+http://www.everything2.com/index.pl?node=blood
+http://www.everything2.com/index.pl?node=death
+http://www.everything2.com/index.pl?node=fear%20and%20loathing
+http://www.everything2.com/index.pl?node=husband
+http://www.everything2.com/index.pl?node=meaning
+http://www.everything2.com/index.pl?node=pi
+http://www.everything2.com/index.pl?node=skin%20cancer
+http://www.everything2.com/index.pl?node=sorry
+http://www.everything2.com/index.pl?node=thank%20you
+http://www.everything2.com/index.pl?node=tremolo
+http://www.everything2.com/index.pl?node=union
+http://www.everything2.com/index.pl?node_id=104744&lastnode_id=11081
+http://www.everything2.com/index.pl?node_id=118419
+http://www.everything2.com/index.pl?node_id=1280792
+http://www.everything2.com/index.pl?node_id=1343265
+http://www.everything2.com/index.pl?node_id=1368793
+http://www.everything2.com/index.pl?node_id=1446862
+http://www.everything2.com/index.pl?node_id=1470814
+http://www.everything2.com/index.pl?node_id=1540153
+http://www.everything2.com/index.pl?node_id=1732555
+http://www.everything2.com/index.pl?node_id=1732556
+http://www.everything2.com/index.pl?node_id=494930&lastnode_id=1694430
+http://www.everything2.com/index.pl?node_id=536533
+http://www.everything2.com/index.pl?node_id=560749
+http://www.everything2.com/index.pl?node_id=724598
+http://www.everything2.com/index.pl?node_id=812459
+http://www.everything2.com/index.pl?node_id=845923
+http://www.everything2.com/index.pl?node_id=865883
+http://www.everythingcomputers.com/presbushspeech.htm
+http://www.everythingesl.net/lessons/american_celebration.php
+http://www.everythingesl.net/quicktips/
+http://www.everythingiknowiswrong.com/2004/04/the_torricelli_.html
+http://www.everythingiknowiswrong.com/2004/05/ahahahhchrumsfe.html
+http://www.everythingt1.com/states/arizona/t1-sun-city-west-arizona.php
+http://www.everythingunderthemoon.net/dealing_with_assholes.htm
+http://www.everytomorrow.org/
+http://www.evilavatar.com/forums/archive/index.php/t-1979.html
+http://www.evilwhiteguy.com/blog/archive/2005/06/04/2611.aspx
+http://www.evite.com/pages/venue/venueDetails.jsp?venueID=ZQXBMLSKWWFAIUVWESPY
+http://www.evl.uic.edu/aej/ESCHOOL/enewsstory.html
+http://www.evl.uic.edu/aej/vrais99/vrais99.html
+http://www.evms.edu/about/news/features/2004-07-26-25-year-reunion.html
+http://www.evolt.org/article/comment/17/60369/
+http://www.evolt.org/article/evolt_org_On_The_Move/27/60493/
+http://www.evolutionday.com/June_2003.htm
+http://www.evolutionfairytale.com/articles_debates/mutation_rate.htm
+http://www.evolutionnyc.com/IBS/SimpleCat/Shelf/ASP/Hierarchy/000Z.html
+http://www.evolvefish.com/
+http://www.evolvefish.com/fish/magnets.html
+http://www.evote.com/features_section/2002-09/archive.asp
+http://www.evsc.k12.in.us/icats/projects/feedback/afterschool.html
+http://www.evsc.virginia.edu/courses/ugrad/specializations.shtml
+http://www.evtek.fi/technology/applying/otherinfo
+http://www.ew.govt.nz/policyandplans/rcpintro/coastalplan/CoastalPlan_124.htm
+http://www.ew.govt.nz/policyandplans/rpsintro/rps/RPS.3.htm
+http://www.ew.govt.nz/policyandplans/wrpintro/wrp/wrp.1.htm
+http://www.ewea.org/03publications/WindDirections_advertising.htm
+http://www.ewea.org/src/directionsadvertising.htm
+http://www.eweek.com/article2/0,1759,1413013,00.asp
+http://www.eweek.com/article2/0,1759,1622086,00.asp
+http://www.eweek.com/article2/0,1759,1656539,00.asp
+http://www.eweek.com/article2/0,1759,1666134,00.asp
+http://www.eweek.com/article2/0,1759,1666353,00.asp
+http://www.eweek.com/article2/0,1759,1751858,00.asp
+http://www.eweek.com/article2/0,1759,1770806,00.asp
+http://www.eweek.com/article2/0,1759,1777493,00.asp
+http://www.eweek.com/article2/0,1759,1812908,00.asp
+http://www.eweek.com/article2/0,1759,1824867,00.asp
+http://www.eweek.com/article2/0,1759,1825008,00.asp
+http://www.eweek.com/article2/0,1759,1825058,00.asp
+http://www.eweek.com/article2/0,1759,1825494,00.asp
+http://www.eweek.com/article2/0,4149,1413013,00.asp
+http://www.eweek.com/category2/0,1738,1237934,00.asp
+http://www.eweek.com/category2/0,1738,1640279,00.asp
+http://www.eweek.org/site/News/newsletter/021103.shtml
+http://www.eweightlosstips.com/weightlossltr.htm
+http://www.ewh.ieee.org/reg/2/r2sac/2004papercontestrules2004.htm
+http://www.ewh.ieee.org/reg/2/r2sac/papercontestrules2003.htm
+http://www.ewh.ieee.org/soc/ias/pub-dept/style.html
+http://www.ewildagain.org/Homeopathy/gunpowder.htm
+http://www.ewmortgage.com/resources/yourproperty.asp
+http://www.eworldwire.com/n_distribution-tips.php
+http://www.ewsi.msu.edu/coursedesc.html
+http://www.ewtn.com/library/THEOLOGY/FR91102.HTM
+http://www.ewtn.com/library/THEOLOGY/PROVID.HTM
+http://www.ewtn.com/library/papaldoc/jp2bvm47.htm
+http://www.ewtn.com/vexperts/showmessage.asp?Pgnu=1&Pg=Forum13&recnu=13&number=425089
+http://www.ewtn.com/vexperts/showmessage_print.asp?number=425089&language=en
+http://www.ewtoo.org/~matt/samsung/
+http://www.ex-astris-scientia.org/inconsistencies5.htm
+http://www.ex-atheist.com/from-skepticism-to-worship.html
+http://www.ex-parrot.com/~chris/wwwitter/20040405-is_all_hope_now_lost.html
+http://www.ex-premie.org/pages/trainings_19990726.htm
+http://www.ex.ac.uk/phytonet/escop.html
+http://www.ex.ac.uk/~PErnest/pome11/art16.htm
+http://www.ex.ac.uk/~RDavies/arian/barter.html
+http://www.ex.ac.uk/~RDavies/arian/emu.html
+http://www.ex.ac.uk/~RDavies/bankfiction/bigbang.html
+http://www.ex.org/1.4/22-gon.html
+http://www.ex0tique.org/carli/
+http://www.examinations.ie/main.php?l=en&mc=ca&sc=sa
+http://www.exampler.com/training.html
+http://www.examstutor.com/chemistry/resources/studyroom/index_gcse.php
+http://www.exatest.com/Research.htm
+http://www.excelforum.com/archive/index.php/t-182242.html
+http://www.excelgov.org/displayContent.asp?NewsItemID=6094&Keyword=mReleases
+http://www.excellon.com/Press/Default.asp?info=/Articles/20030925.htm
+http://www.exceptionalmarriages.com/weblog/BlogDetail.asp?ID=20757
+http://www.excessvoice.com/current.htm
+http://www.excessvoice.com/marketing-experiments.htm
+http://www.exchange4media.com/viewpoint/viewpoint.asp?view_id=44
+http://www.exchangehouse.ie/youth_early.htm
+http://www.exchangenetwork.net/progress/
+http://www.exchangesjournal.org/reviews/review_1086.html
+http://www.exchangeuk.co.uk/exuk/index.php?act=Help&CODE=01&HID=4
+http://www.exchangeuk.co.uk/exuk/index.php?act=Help&CODE=01&HID=6
+http://www.exchippy.org.uk/chippylist50s.html
+http://www.exchippy.org.uk/chippylistM-S.html
+http://www.excitementmachine.org/log/2003_07.html
+http://www.excitementmachine.org/log/cat_excitement_machine_news.html
+http://www.excitementmachine.org/log/cat_readings.html
+http://www.excitepr.com/03b_NIA100104.html
+http://www.exclaim.ca/index.asp?layid=22&csid=799&csid1=3523
+http://www.execstrategies.com/Books%20Etc/Speaking_Success.htm
+http://www.executive-speaker.com/spch0006.html
+http://www.executive.com/fragbook/chapter1.htm
+http://www.executivecoachingstudio.com/sucesfactorresume.htm
+http://www.executivecoachingstudio.com/testimonials.htm
+http://www.executiveplanet.com/business-culture-in/132249775868.html
+http://www.executiveplanet.com/business-culture-in/132272178001.html
+http://www.executiveplanet.com/business-culture-in/132425792783.html
+http://www.executiveplanet.com/business-culture-in/132447984443.html
+http://www.executiveplanet.com/business-culture-in/139447363250.html
+http://www.executivesearch.tv/html/case_histories.html
+http://www.exel.com/exel/home/media/casestudies/importingcasestudy.htm
+http://www.exercisevideosreviews.com/links.html
+http://www.exercisevideosreviews.com/tonestep.html
+http://www.exero.com/mastergate/secured/boytoys/patek.htm
+http://www.exetel.com.au/mobile_terms_conditions.htm
+http://www.exeter.anglican.org/diocese/buildings/dacsound.htm
+http://www.exeterfriendly.co.uk/over_seas_faqs.htm
+http://www.exeterfriendly.co.uk/uk_faqs.htm
+http://www.exhumedfilms.com/whatis.html
+http://www.exim.gov/news/speeches/apr2904a.html
+http://www.exim.gov/products/policies/environment/envproc.html
+http://www.exim.gov/products/policies/environment/envtbl1.html
+http://www.exim.org/exim-html-1.90/doc/html/spec_21.html
+http://www.exim.org/exim-html-2.00/doc/html/spec_20.html
+http://www.exim.org/exim-html-2.10/doc/html/oview.html
+http://www.exim.org/exim-html-2.10/doc/html/spec_20.html
+http://www.exim.org/exim-html-3.00/doc/html/spec_20.html
+http://www.exim.org/exim-html-3.20/doc/html/spec_21.html
+http://www.exim.org/exim-html-3.20/doc/html/spec_3.html
+http://www.exmoorholidayguide.co.uk/list.php?accmtype=Self-Catering
+http://www.exmormon.org/mormon/mormon187.htm
+http://www.exmormon.org/stories.htm
+http://www.exmormon.org/whylft60.htm
+http://www.exoticpetvet.net/avian/strange.html
+http://www.expandinglight.org/retreat/retreat.htm
+http://www.expansys.co.nz/product.asp?code=113873
+http://www.expat-village.com/
+http://www.expat.or.id/aida/myhairdone.html
+http://www.expat.or.id/business/jobseekers.html
+http://www.expat.or.id/business/moveoffice.html
+http://www.expat.or.id/info/batik.html
+http://www.expat.or.id/info/prepare.html
+http://www.expat.or.id/info/weddings.html
+http://www.expatexchange.com/goingabroad.cfm?networkid=28
+http://www.expatexchange.com/lib.cfm?networkID=159&articleID=1103
+http://www.expatexchange.com/rspgennet.cfm?rid=58&answerid=614&networkid=159
+http://www.expatfocus.com/expatriate-spain-telephone-post-internet-tv.php
+http://www.expatica.com/date/dating_edit_user.asp?function=new
+http://www.expatica.com/source/forum_thread.asp?channel_id=1&thread_id=17674
+http://www.expatica.com/source/forum_thread.asp?channel_id=3&thread_id=15300
+http://www.expatica.com/source/forum_thread.asp?channel_id=3&thread_id=6006
+http://www.expatica.com/source/site_article.asp?subchannel_id=26&story_id=16220&name=Fischer+calls+for+unity+on+Iran%3B+talk+with+Rice
+http://www.expatica.com/source/site_article.asp?subchannel_id=36&story_id=1127&name=Tax+time
+http://www.expatica.com/source/site_article.asp?subchannel_id=56&story_id=5540&name=Berlin's+new+airport+%96+still+waiting+for+take-off
+http://www.expatica.com/source/site_article.asp?subchannel_id=58&story_id=15829&name=Building+bridges
+http://www.expatica.com/source/site_article.asp?subchannel_id=6&story_id=143&name=Anti+matters
+http://www.expatica.com/source/site_article.asp?subchannel_id=81&story_id=12569&name=Waiting+to+be+seen
+http://www.expatica.com/source/site_content_subchannel.asp?subchannel_id=3&name=Netherlands+Relocation
+http://www.experience-seminars.co.uk/seminar/02.php
+http://www.experience-seminars.co.uk/seminar/02.php?ih=
+http://www.experience-seminars.co.uk/seminar/02.php?ih=0
+http://www.experiencecafe.com/Day_09.htm
+http://www.experiencedesignernetwork.com/
+http://www.experiencedesignernetwork.com/archives/000540.html
+http://www.experiencefestival.com/a/Ancient_Celts/id/35232
+http://www.experiencefestival.com/a/Feng_Shui/id/35343
+http://www.experiencefestival.com/a/Poltergeists/id/21865
+http://www.experiencefestival.com/comparison
+http://www.experiencefestival.com/essential_oil
+http://www.experiencefestival.com/writing
+http://www.experiencenottinghamshire.com/exec/102507/1499/PROFILE=
+http://www.experienceworks.org/primetime/Primetime2004/oowbios/oklahoma.html
+http://www.experimentaltvcenter.org/history/collections/collections_links.html
+http://www.experimentaltvcenter.org/history/groups/gtext.php3?id=81
+http://www.experit.com/
+http://www.expertbettingadvice.co.uk/forum/index.php?action=profile;u=202;sa=showPosts
+http://www.expertbettingadvice.co.uk/forum/index.php?action=profile;u=76;sa=showPosts
+http://www.expertbettingadvice.co.uk/forum/index.php?topic=11856.15
+http://www.expertfootball.com/training/passing.php
+http://www.expertlaw.com/forums/post-859.html
+http://www.expertreloader.com/
+http://www.experts-exchange.com/Applications/MS_Office/Outlook/Q_21253922.html
+http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/ASP_DOT_NET/Q_21015699.html
+http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Top_Solutions_7.html
+http://www.explodedlibrary.info/2004/01/how_academic_li.html
+http://www.explodedlibrary.info/2005/02/
+http://www.exploit-lib.org/issue5/peer-review/
+http://www.exploit-lib.org/issue7/newsagent/
+http://www.exploratorium.edu/IFI/activities/pinholeinquiry/starting.html
+http://www.explore-edinburgh.com/museum.html
+http://www.explore.co.uk/worldwide/essentials.jsp
+http://www.explorefairbanks.com/FAQ/
+http://www.explorefaith.org/forgive/mraz.html
+http://www.exploreminnesota.com/6Jun200512.html
+http://www.exploreworldwide.com/onfoot/newsarchive.jsp
+http://www.expmath.org/expmath/philosophy.html
+http://www.expo.deschutes.org/index.cfm?fuseaction=cExpo.Directions
+http://www.expomed.com/drugtest/clubdrugs.htm
+http://www.export.gov/comm_svc/press_room/marketofthemonth/Singapore/singapore.html
+http://www.export.gov/exportamerica/NewOpportunities/no_chinabusiness_0304.html
+http://www.export.gov/fas/fas.asp?pName=tsmo
+http://www.exposedbrain.com/archives/000141.html
+http://www.express-cleaning-supplies.co.uk/aboutord.html
+http://www.expressgenes.com/Biodefense-2004-main.htm
+http://www.expressindia.com/
+http://www.expression.edu/admissions/degrees.html
+http://www.expressitpeople.com/20031020/cover.shtml
+http://www.expressivetherapy.com/18thlist2.html
+http://www.expressnews.ualberta.ca/expressnews/articles/ideas.cfm?p_ID=6359&section=Feature&s=m
+http://www.expresspersonnel.com/jobs.asp?id=1498&cc=1
+http://www.expresswayauthority.com/constructionupdate/roadworkupdate.html
+http://www.exrx.net/Store/HK/MethodsGroupExerciseInstr.html
+http://www.exsys.com/publicCIO.html
+http://www.ext.nodak.edu/extpubs/alt-ag/ostrich.htm
+http://www.ext.nodak.edu/extpubs/h2oqual/watsys/ae1047w.htm
+http://www.ext.nodak.edu/extpubs/plantsci/hortcrop/h885w.htm
+http://www.ext.nodak.edu/extpubs/plantsci/hortcrop/pp697-1.htm
+http://www.ext.nodak.edu/extpubs/plantsci/weeds/h1009w.htm
+http://www.ext.nodak.edu/extpubs/plantsci/weeds/w765w.htm
+http://www.ext.nodak.edu/extpubs/yf/foods/he176w.htm
+http://www.ext.vt.edu/news/periodicals/livestock/aps-03_06/aps-236.html
+http://www.ext.vt.edu/pubs/dairy/404-286/404-286.html
+http://www.ext.vt.edu/pubs/envirohort/426-100/426-100.html
+http://www.ext.vt.edu/pubs/family/350-096/350-096.html
+http://www.ext.vt.edu/pubs/family/354-030/354-030.html
+http://www.ext.vt.edu/pubs/forestry/420-085/420-085.html
+http://www.ext.vt.edu/pubs/forestry/420-641/420-641.html
+http://www.extang.com/feedback.html
+http://www.extendedstaynetwork.com/Details/Details.cfm?LocationID=3399&Best=1&In=7/4/2005
+http://www.extension.iastate.edu/Pages/communications/EPC/Spring03/response.html
+http://www.extension.iastate.edu/acreage/AL2000/aljan00.html
+http://www.extension.iastate.edu/agdm/wholefarm/html/c4-72.html
+http://www.extension.iastate.edu/cyf/rating.html
+http://www.extension.iastate.edu/foodsafety/
+http://www.extension.umn.edu/accessmn/final3.html
+http://www.extension.umn.edu/distribution/businessmanagement/DF3700.html
+http://www.extension.umn.edu/distribution/communications/DL6052.html
+http://www.extension.umn.edu/distribution/horticulture/DG3825.html
+http://www.extension.umn.edu/distribution/naturalresources/DD5944.html
+http://www.extension.umn.edu/distribution/naturalresources/M1156.html
+http://www.extension.umn.edu/distribution/naturalresources/components/2022_12.html
+http://www.extension.umn.edu/distribution/nutrition/DJ5513.html
+http://www.extension.umn.edu/distribution/nutrition/DJ5711.html
+http://www.extension.umn.edu/pesticides/pat/2005recert.html
+http://www.extension.umn.edu/projects/yardandgarden/YGLNews/YGLNews.html
+http://www.extique.com/diet.html
+http://www.extra-mile.com/calendars/custom.htm
+http://www.extra-mile.com/kids/
+http://www.extra-mile.com/kids/child-ID.htm
+http://www.extra-mile.com/textiles/beach-towels.htm
+http://www.extra.research.philips.com/euprojects/beyond/presence@finland.htm
+http://www.extraaircraft.com/media/0504_sa.html
+http://www.extrahandsforals.org/mt/archives/000375.html
+http://www.extramile.us/honorees/smithwilson.cfm
+http://www.extremeautoaccessories.co.uk/products.php?section=56
+http://www.extremefilmmaker.com/111Articles111/Article0001_GettingStarted.htm
+http://www.extremefunnypictures.com/funnypic208.htm
+http://www.extremetech.com/article2/0,1558,1228860,00.asp
+http://www.extremetech.com/article2/0,1558,1750720,00.asp
+http://www.extremetech.com/article2/0,1558,863408,00.asp
+http://www.extremetech.com/article2/0,3973,1228860,00.asp
+http://www.ey.com/GLOBAL/content.nsf/UK/TaxMap_-_in_house_support
+http://www.ey.com/global/content.nsf/Luxembourg_E/media_press_articles_luxembourg_real_estate_funds
+http://www.ey.com/global/content.nsf/US/Human_Capital_-_Overview
+http://www.eye.net/eye/issue/issue_06.17.04/op/oped.html
+http://www.eyeassociates.com/images/an_introduction_to_low_vision_re.htm
+http://www.eyeassociates.com/images/common_vision_problems_from_stro.htm
+http://www.eyeassociates.com/images/stroke_second_copy_page.htm
+http://www.eyecancer.com/Editorials/Speak.html
+http://www.eyedesignbook.com/ch2/eyech2-abc.html
+http://www.eyedesignbook.com/ch3/eyech3-b.html
+http://www.eyedesignbook.com/ch3/eyech3-d.html
+http://www.eyeforchem.com/index.asp?news=38082
+http://www.eyeforenergy.com/financingnorthsea/programme.shtml
+http://www.eyeforpharma.com/salesusa05/program.shtml
+http://www.eyemagazine.com/review.php?id=62&rid=72
+http://www.eyemdlink.com/NewsArticle.asp?NewsID=40
+http://www.eyenet.co.za/html/dry_eye_syndrome.html
+http://www.eyeoneducation.tv/reform/curriculum_frameworks.html
+http://www.eyepiece.com/ent/0002/000211al.asp
+http://www.eyesearch.com/corneal.disease.htm
+http://www.eyeshot.net/karaoke1.html
+http://www.eyeshot.net/maudattorney1.html
+http://www.eyesight-2020.com/technology/faq.asp
+http://www.eyesontheprize.org/about/kudos.html
+http://www.eyesontheprize.org/stories/michelet.html
+http://www.eyesurgeon.com.au/services.htm
+http://www.eyewitnesstohistory.com/appomatx.htm
+http://www.eyewitnesstohistory.com/londonfire.htm
+http://www.eyewitnesstohistory.com/pearl.htm
+http://www.eyewitnesstohistory.com/pearl2.htm
+http://www.eyewitnesstohistory.com/richmond.htm
+http://www.eyezone.co.uk/glossary.htm
+http://www.eypuk.com/ncprocedure.htm
+http://www.eypuk.com/rfprocedure.htm
+http://www.eyrie.net/UF/FI/SOS/images-comm.html
+http://www.ezinearticles.com/?How-to-Master-the-Art-of-Salesmanship&id=45422
+http://www.ezinearticles.com/?Meditation:-Why-Just-Sitting-There-Isnt-Just-Sitting-There&id=13180
+http://www.ezinearticles.com/?Real-Weight-Loss-Begins-Today...With-Cliff-Kuhn,-M.D.s-Fun-Factor-Diet!&id=10523
+http://www.ezinearticles.com/?cat=News-and-Society:Politics
+http://www.ezslimdown.com/
+http://www.f-secure.com/virus-info/iraq.shtml
+http://www.f1inschools.co.uk/rule.asp?ID=3
+http://www.f4g.net/vb/archive/index.php/t-55891.html
+http://www.f5.com/solutions/success/PDXLAN_ss.html
+http://www.f5sitedesign.com/Demo/
+http://www.fabcats.org/earproblems.html
+http://www.fabian-society.org.uk/documents/ViewADocument.asp?ID=41&CatID=52
+http://www.fabian-society.org.uk/documents/ViewADocument.asp?ID=97&CatID=52
+http://www.fabjob.com/PublicRelations.asp
+http://www.fabjob.com/publicrelations.asp
+http://www.fabjob.com/publicrelations.asp?affiliate=236
+http://www.fabjob.com/tips148.html
+http://www.fables.org/autumn04/embers.html
+http://www.fac.gov.bc.ca/bcca_dec.htm
+http://www.face.bnl.gov/Modelling/growth1.htm
+http://www.face.bnl.gov/Modelling/results.htm
+http://www.facesandfortunes.com/links.html
+http://www.fachrs.com/pages/members/papers/b_o_p.htm
+http://www.facilitiesnet.com/bom/article.asp?id=1386
+http://www.facilitiesnet.com/bom/article.asp?id=1535
+http://www.facilitiesnet.com/fsd/article.asp?id=2860
+http://www.facilitycity.com/busfac/bf_04_10_cover3.asp
+http://www.facilitycity.com/tfm/tfm_02_10_news1.asp
+http://www.facilitycity.com/tfm/tfm_05_01_cover3.asp
+http://www.facilitygroup.com/tandcps_12_0_0.html
+http://www.facingthechallenge.org/scopes1.htm
+http://www.facingthemirror.org/about_the_book/reviews.php
+http://www.facs.org/ahp/testimony/bariatric.html
+http://www.facsimilation.com/anderson03.html
+http://www.fact.on.ca/facthome/fact_not.htm
+http://www.fact.on.ca/news/news0110/ts01102b.htm
+http://www.factcheck.org/article.aspx@DocID=264.html
+http://www.factcheck.org/article208.html
+http://www.factcheck.org/article239.html
+http://www.factcheck.org/article305.html
+http://www.factcheck.org/article330.html
+http://www.factcheck.org/specialreports188.html
+http://www.factiva.com/network/IBM/register.asp
+http://www.factmonster.com/spot/affirmative1.html
+http://www.factmonster.com/spot/wtc1.html
+http://www.factnet.org/
+http://www.factnet.org/Scientology/hubbard_death.htm?FACTNet
+http://www.factnet.org/discus/messages/1/293.html?1089383136
+http://www.factnet.org/discus/messages/6/1004.html?1091181291
+http://www.factnet.org/headlines/1999_CULTinfo_Conf_TEXT.html?FACTNet
+http://www.factnet.org/singer.htm?FACTNet
+http://www.faculty.de.gcsu.edu/~dvess/ids/courseportfolios/2205/rainf/stu29.htm
+http://www.faculty.de.gcsu.edu/~mmagouli/performance.htm
+http://www.faculty.piercelaw.edu/redfield/library/case-texas.pprinciple.htm
+http://www.faculty.rsu.edu/~felwell/Theorists/Malthus/Index.htm
+http://www.faculty.rsu.edu/~felwell/Theorists/Weber/Whome.htm
+http://www.facultysenate.villanova.edu/FACULTAS99F.htm
+http://www.fadavis.com/townsend/learningactivities.asp
+http://www.fadingwaysmusic.com/
+http://www.fadingwaysmusic.com/mission.html
+http://www.faem.com/
+http://www.fafia-afai.org/Bplus5/altrepf2_e.htm
+http://www.fafia-afai.org/Bplus5/altrepf3_e.htm
+http://www.fafsa.ed.gov/faq002.htm
+http://www.fai.org/aeromodelling/competitions/free_flight/wc03/wcp03f1.htm
+http://www.faia.org.uk/roleofnutrition.php
+http://www.failuremag.com/arch_history_cable_ready.html
+http://www.failuremag.com/arch_history_charles_goodyear.html
+http://www.fair-pr.com/meet-aae/whec15/presentation.php
+http://www.fair.org/articles/cruise-control.html
+http://www.fair.org/press-releases/un-powell-iraq.html
+http://www.fairchildgarden.org/education/n_classes.html
+http://www.fairchildgarden.org/publicprograms/n_employment.html
+http://www.faireconomy.org/research/
+http://www.faireconomy.org/research/Economic_Apartheid_Data.html
+http://www.fairfaxcounty.gov/parks/performances.htm
+http://www.fairfield-city.org/PubWorks/pwdump.cfm
+http://www.fairfield.edu/x532.html
+http://www.fairfordna.com/
+http://www.fairhousing.com/
+http://www.fairlds.org/news/news006.html
+http://www.fairlds.org/pubs/journal/FJ200403.html
+http://www.fairlds.org/pubs/tagm/tagm30.html
+http://www.fairlieburne.co.uk/fairlie.htm
+http://www.fairmark.com/amt/amt101.htm
+http://www.fairmark.com/execcomp/nqostock.htm
+http://www.fairmark.com/rothira/taxfeat.htm
+http://www.fairness.com/resources/by-relation?relation_id=7723
+http://www.fairtradefederation.com/networks/archive/vol12_no1/features.html
+http://www.fairtrading.nsw.gov.au/business/cooperatives/formationkits.html
+http://www.fairview.org/healthlibrary/content/pa_tnbedwet_hhg.htm
+http://www.fairvote.org/reports/1995/chp1/skillen.html
+http://www.fairys.com/newsspring2004.htm
+http://www.faispdx.org/faisfacts/history.asp
+http://www.faithandfamily.com/partner/Article_Display_Page/0,,PTID313086%7CCHID590694%7CCIID1990690,00.html
+http://www.faithandliferesources.org/guidelines.htm
+http://www.faithandvalues.com/tx/CBFN-71/1/
+http://www.faithfreedom.org/Articles/ohmyrus30816.htm
+http://www.faithissues.ca/ChristianLiving/DumpTheRubbleAndRubbish.asp
+http://www.faithnet.org.uk/Science/Science/bigbang.htm
+http://www.faithwebbin.net/grow/family/content/ritalin.html
+http://www.fajrfilmfest.com/23/competition/far/international-film-kot-detail-eng.htm
+http://www.falconblanco.com/fbgb/what.html
+http://www.falklandnews.com/public/story.cfm?get=3280&source=2
+http://www.falklandnews.com/public/story.cfm?get=3285&source=2
+http://www.falklandnews.com/public/story.cfm?get=3292&source=2
+http://www.fallenbrothers.com/community/showthread.php?goto=lastpost&t=4196
+http://www.fallenheroesmemorial.com/oef/profiles/lanemitchella.html
+http://www.fallenheroesmemorial.com/oif/profiles/cedergrendavida.html
+http://www.fallenheroesmemorial.com/oif/profiles/cliftonrichardc.html
+http://www.fallenheroesmemorial.com/oif/profiles/smithpaulr.html
+http://www.fallingawake.com/displayQuote.asp
+http://www.fallingawake.com/maininfo.asp
+http://www.fallingawake.com/maininfo.html
+http://www.falloutsoftware.com/tutorials/ktm/ktm0.htm
+http://www.falls-chutes.com/guide/english/resources/programtools/risk-3.html
+http://www.fallscreek.com.au/summer/Calendar.asp
+http://www.falmouth.ac.uk/en/press-releases/falmouth-college-of-arts-television.asp
+http://www.falmouthicearena.com/funfacts.htm
+http://www.falseallegations.com/drano119-bbo-prop-findings-fact-rulings-law-41404.htm
+http://www.falundafa.org/book/eng/dymf_2.htm
+http://www.falungong.org.uk/article.php?op=Print&sid=28
+http://www.fama.net/Process__Chapter_1/Process__Chapter_2/process__chapter_2.html
+http://www.familialdysautonomia.org/FD_Day_Dr_Axelrod_Speech-2003.htm
+http://www.familiesusa.org/site/PageServer?pagename=Paying_a_Premium_splash
+http://www.familiesusa.org/site/PageServer?pagename=Related_Links_Index
+http://www.family-crests.com/
+http://www.family-crests.com/coat-of-arms-library/family-crest/abbreviations-genealogy.html
+http://www.family-crests.com/contact.html
+http://www.family.msn.com/tool/article.aspx?dept=crafts&sdept=cas&name=sc_111803_givingspirit
+http://www.family.msn.com/tool/article.aspx?dept=raising&sdept=rks&name=me_011304_trailinghusband
+http://www.family.msn.com/tool/article.aspx?dept=raising&sdept=rks&name=sc_111803_givingspirit
+http://www.family.org.au/update/2004/u20040105.htm
+http://www.family.org/cforum/citizenmag/departments/a0004401.cfm
+http://www.family.org/cforum/feature/a0033978.cfm
+http://www.family.org/cforum/fosi/abstinence/parents/a0035110.cfm
+http://www.family.org/cforum/fosi/marriage/ssuap/a0029773.cfm
+http://www.family.org/docstudy/newsletters/a0035339.cfm
+http://www.family.org/fmedia/askdrbill/
+http://www.family.org/fofmag/pp/a0024028.cfm
+http://www.family.org/married/growth/a0022221.cfm
+http://www.family.org/topics/a0034455.cfm
+http://www.familybuilders.net/Seminar%20pages/Seminar_Schedule_Question_4.htm
+http://www.familybusinessstrategies.com/articles05/011505rs.html
+http://www.familycar.com/Classics/SeagraveSafetySedan/
+http://www.familycar.com/RoadTests/LexusGS430/
+http://www.familycaregiversonline.com/100_simple_ways.htm
+http://www.familycircle.com/info/regional.jsp
+http://www.familycircle.com/parenting/archive_braz_040309_everybodysspecial.jsp
+http://www.familycorner.com/dir/Parenting/Humor/index.shtml
+http://www.familydigest.com/stories/happy_marriage.cfm
+http://www.familyeducation.com/article/0,1120,1-20927,00.html
+http://www.familyeducation.com/article/0,1120,1-3482,00.html
+http://www.familyeducation.com/article/0,1120,68-9307,00.html
+http://www.familyeducation.com/experts/advice/0,1183,1-9786,00.html
+http://www.familyeducation.com/experts/advice/0,1183,68-27840,00.html
+http://www.familyeducation.com/topic/front/0,1156,1-10230,00.html
+http://www.familyeducation.com/topic/front/0,1156,22-3189,00.html
+http://www.familyfight.com/american/washington_post_053004.htm
+http://www.familyfirst.net/famlife/halloween.htm
+http://www.familyforest.info/killedinaction.htm
+http://www.familyguyfiles.com/episodes/viewref.php?id=40&title=To%20Love%20and%20Die%20in%20Dixie
+http://www.familyhaven.com/gardening/garden28/garden282.html
+http://www.familylife.co.za/news2005.htm
+http://www.familylife.com/community/church/needs/thirtyone_needs.asp
+http://www.familymanagement.com/aging-index.html
+http://www.familymanagement.com/aging/sexuality.html
+http://www.familymanagement.com/literacy/grimms/grimms39.html
+http://www.familyprocess.org/featured_articles_display.asp?id=35
+http://www.familyradio.com/english/oldbrowsers/literature/llo/llo_1.html
+http://www.familyrecords.gov.uk/focuson/womeninuniform/wrns_profile.htm
+http://www.familyrecords.gov.uk/frc/your_frc/ug-09-10-02.htm
+http://www.familyresource.com/health/23/667/
+http://www.familyresource.com/parenting/26/547/
+http://www.familyresource.com/parenting/34/154/
+http://www.familyresource.com/parenting/52/474/
+http://www.familyresource.com/pregnancy/16/284/
+http://www.familytlc.net/giving_choices.html
+http://www.familyvacationcenter.com/Kids_Activities/2nd_grade.html
+http://www.faminegenocide.com/resources/teachingkuryliw.html
+http://www.famousquotes.me.uk/speeches/John_F_Kennedy/1.htm
+http://www.famsi.org/cgi-bin/print_friendly.pl?file=97068
+http://www.famsi.org/cgi-bin/print_friendly.pl?file=99009
+http://www.fanball.com/fb/article.cfm/ID.3494
+http://www.fandemonium.blogdrive.com/
+http://www.fanfic.net/~jeffwong/rant60-Speeding.html
+http://www.fanfiction-library.com/Simon%20and%20Simon/wiseguys.html
+http://www.fanfiction.mugglenet.com/oc.html
+http://www.fanfiction.net/r/2007542/0/1/
+http://www.fanfiction.net/r/2229738/0/1/
+http://www.fanfiction.net/s/1000604/1/
+http://www.fanfiction.net/s/1391642/1/
+http://www.fanfiction.net/s/752197/1/
+http://www.fanfiction.net/s/98473/1/
+http://www.fanfiction.net/u/218005/
+http://www.fanficweb.net/tvs/pretender/season5/primer.htm
+http://www.fangoriablooddrive.com/rules_and_regulations/
+http://www.fanlight.com/catalog/films/263_btl.shtml
+http://www.fanniemaefoundation.org/ESOL_ABE/tools/tool27.html
+http://www.fanning.uga.edu/About%20Fanning/Pillars.htm
+http://www.fansfocus.com/forum/showflat.php/Cat/0/Number/433612/an/0/page/0
+http://www.fansfocus.com/forum/showflat.php/Cat/0/Number/442923/Main/441900
+http://www.fansonly.com/schools/msu/sports/m-footbl/spec-rel/042603aaa.html
+http://www.fantastically-blonde.com/
+http://www.fantasticfiction.co.uk/authors/James_Ellroy.htm
+http://www.fantasyguru.com/2005-rookie-report.html
+http://www.fantasyinglass.com/
+http://www.fantasyjazz.com/catalog/soulstirrers_cat.html
+http://www.fantasyspringsresort.com/
+http://www.fantasytoyland.com/info.html
+http://www.fao.org/DOCREP/003/AB412E/ab412e06.htm
+http://www.fao.org/DOCREP/003/S6091E/S6091E05.htm
+http://www.fao.org/DOCREP/003/T0388E/T0388E00.HTM
+http://www.fao.org/DOCREP/003/W8989E/W8989E03.htm
+http://www.fao.org/DOCREP/003/X3680E/x3680e02.htm
+http://www.fao.org/DOCREP/003/Y0911E/y0911e04.htm
+http://www.fao.org/DOCREP/004/W3240E/W3240E05.htm
+http://www.fao.org/DOCREP/004/X3936E/X3936E03.htm
+http://www.fao.org/DOCREP/005/Y4143E/y4143e0a.htm
+http://www.fao.org/DOCREP/005/Y4172M/rep2/saintvincent.htm
+http://www.fao.org/DOCREP/005/Y4671E/y4671e09.htm
+http://www.fao.org/DOCREP/006/AD233E/AD233E02.htm
+http://www.fao.org/DOCREP/006/W9941E/w9941e02.htm
+http://www.fao.org/DOCREP/006/Y4961E/y4961e06.htm
+http://www.fao.org/DOCREP/MEETING/004/Y2650e/Y2650e05.htm
+http://www.fao.org/DOCREP/MEETING/006/Y8994e.HTM
+http://www.fao.org/DOCREP/MEETING/008/J1948E/j1948e05.htm
+http://www.fao.org/DOCREP/W7440E/w7440e06.htm
+http://www.fao.org/DOCREP/x0262e/x0262e13.htm
+http://www.fao.org/Gender/en/Lesson-e/Gambia.htm
+http://www.fao.org/WAICENT/FAOINFO/SUSTDEV/WPdirect/WPan0022.htm
+http://www.fao.org/WAICENT/FAOINFO/SUSTDEV/WPdirect/WPan0046.htm
+http://www.fao.org/ag/AGS/AGSE/agse_e/7mo/iita/iita.htm
+http://www.fao.org/ag/aga/agap/lps/dairy/ECS/Comments/com_dis2.htm
+http://www.fao.org/ag/againfo/subjects/en/infpd/documents/econf_scope/paper2.html
+http://www.fao.org/clim/docs/rrp88e12-04.htm
+http://www.fao.org/docrep/005/AC798E/ac798e0j.htm
+http://www.fao.org/docrep/S8270E/S8270E02.htm
+http://www.fao.org/docrep/V6640E/v6640e03.htm
+http://www.fao.org/docrep/W4347E/w4347e0b.htm
+http://www.fao.org/docrep/meeting/003/Y0174E.htm
+http://www.fao.org/docrep/meeting/009/J4968e/j4968e00.htm
+http://www.fao.org/docrep/t1970e/t1970e05.htm
+http://www.fao.org/docrep/u0700E/u0700e07.htm
+http://www.fao.org/docrep/u4400e/u4400e04.htm
+http://www.fao.org/docrep/w1765e/w1765e0a.htm
+http://www.fao.org/docrep/w4086e/w4086e08.htm
+http://www.fao.org/docrep/w9990e/w9990e02.htm
+http://www.fao.org/docrep/x5305e/x5305e02.htm
+http://www.fao.org/docrep/x5563E/X5563e05.htm
+http://www.fao.org/english/newsroom/news/2003/20863-en.html
+http://www.fao.org/newsroom/en/news/2004/50119/
+http://www.fao.org/sd/EIdirect/EIre0046.htm
+http://www.fao.org/sd/LTdirect/LTan0025.htm
+http://www.fao.org/sd/LTdirect/LTforum/ltfo0016.htm
+http://www.fao.org/sd/dim_pe4/pe4_040501a_en.htm
+http://www.fao.org/sd/rodirect/ROan0012.htm
+http://www.fao.org/sd/wpdirect/WPre0132.htm
+http://www.fao.org/sd/wpdirect/wpan0040.htm
+http://www.fao.org/sd/wpdirect/wpre0132.htm
+http://www.fao.org/trade/docs/FAO-Statement-Nov1997.htm
+http://www.fapeonline.org/
+http://www.faqfarm.com/Computer/3638
+http://www.faqfarm.com/History/Founding/15730
+http://www.faqfarm.com/History/Founding/61169
+http://www.faqfarm.com/History/WWII/16614
+http://www.faqfarm.com/History/WWII/23626
+http://www.faqfarm.com/History/WWII/27478
+http://www.faqfarm.com/History/WWII/28257
+http://www.faqfarm.com/Home/34785
+http://www.faqfarm.com/Insurance/Auto/99719
+http://www.faqfarm.com/Insurance/Disability/3360
+http://www.faqfarm.com/Insurance/Medical/p1
+http://www.faqfarm.com/Love/4449
+http://www.faqfarm.com/Love/819
+http://www.faqs.org/contrib/articles2/report.html
+http://www.faqs.org/docs/ZopeBook/BasicObject.html
+http://www.faqs.org/docs/air/avb25.html
+http://www.faqs.org/docs/electric/DC/DC_6.html
+http://www.faqs.org/docs/electric/Digital/DIGI_3.html
+http://www.faqs.org/docs/electric/Semi/SEMI_9.html
+http://www.faqs.org/docs/factbook/fields/2032.html
+http://www.faqs.org/docs/linux_network/x-087-2-resolv.library.html
+http://www.faqs.org/docs/think_java/TIJ307.htm
+http://www.faqs.org/docs/thinkjava/chap02.htm
+http://www.faqs.org/docs/thinkjava/chap04.htm
+http://www.faqs.org/docs/thinkjava/chap11.htm
+http://www.faqs.org/faqs/dogs-faq/medical-info/epilepsy/
+http://www.faqs.org/faqs/religions/c-o-euthanasia/
+http://www.faqs.org/faqs/tv/er-series/medical-jargon/
+http://www.faqs.org/faqs/tv/er-series/questions/
+http://www.faqs.org/rfcs/rfc2521.html
+http://www.faqs.org/rfcs/rfc3245.html
+http://www.faqs.org/rfcs/rfc394.html
+http://www.fark.com/
+http://www.farlingaye.suffolk.sch.uk/engweb/a-level/essays/dhemma.htm
+http://www.farmboy.ca/index.php?action=terms.home
+http://www.farmequip.org/Dlragree.htm
+http://www.farmersboys.com/Roll_of_Honour_Pages/CSgt_Foster.htm
+http://www.farmersinfo.com.au/pages/news/news.htm
+http://www.farmersmarketsnm.org/managers.htm
+http://www.farmgoodsforkids.com/toys-toys-by-brand-plan-toys.html
+http://www.farmingmatters.org.uk/farming/fm-feb03.html
+http://www.farmington.k12.mi.us/district/ace/saturday/w05/classes.html
+http://www.farn-ct.ac.uk/www/default.asp?id=A:6601
+http://www.farnfilm.com/about.htm
+http://www.farnovision.com/tbwit/appendixA.html
+http://www.farscapeworld.com/transcripts/10304.php
+http://www.farsinet.com/zanamu/religion.html
+http://www.fas.harvard.edu/~afroam/Faculty/Evelynn_M__Hammonds/evelynn_m__hammonds.html
+http://www.fas.harvard.edu/~asiactr/haq/200203/0203a002.htm
+http://www.fas.harvard.edu/~fdo/publications/0304/as/general.htm
+http://www.fas.harvard.edu/~fdo/publications/advance/advstd.html
+http://www.fas.harvard.edu/~fdo/publications/as0405/general.htm
+http://www.fas.harvard.edu/~korea/newsletter/newsletter41_001.html
+http://www.fas.harvard.edu/~lingdept/jeal/jealcontent.html
+http://www.fas.harvard.edu/~research/ISGnew.html
+http://www.fas.harvard.edu/~research/greybook/outside.html
+http://www.fas.harvard.edu/~wgs/people/people.htm
+http://www.fas.ie/annual_report/annual_report00/jobseekers02.html
+http://www.fas.ie/annual_report/annual_report03/statutory.htm
+http://www.fas.ie/services_to_businesses/cdp.htm
+http://www.fas.ie/supported_employment_criteria.htm
+http://www.fas.nus.edu.sg/cls/news.htm
+http://www.fas.org/asmp/atwg/panels/IndiaPakistan-28jan03.html
+http://www.fas.org/asmp/campaigns/control.html
+http://www.fas.org/asmp/library/articles/us-mexico.htm
+http://www.fas.org/asmp/library/asm/asm03.html
+http://www.fas.org/asmp/library/asm/asm29.htm
+http://www.fas.org/asmp/library/reports/AAAS.htm
+http://www.fas.org/asmp/profiles/israel.htm
+http://www.fas.org/asmp/profiles/saudi_arabia.htm
+http://www.fas.org/bwc/news/anthraxreport.htm
+http://www.fas.org/faspir/2003/v56n2/book.htm
+http://www.fas.org/faspir/v52m6a.htm
+http://www.fas.org/faspir/v52n5.htm
+http://www.fas.org/irp/congress/1996_cr/h60522aa.htm
+http://www.fas.org/irp/congress/1996_cr/h960618j.htm
+http://www.fas.org/irp/congress/1996_hr/h960925d.htm
+http://www.fas.org/irp/congress/1996_hr/s960605b.htm
+http://www.fas.org/irp/congress/1998_rpt/sgo-sir/2-18.htm
+http://www.fas.org/irp/congress/2001_cr/h100501.html
+http://www.fas.org/irp/congress/2001_hr/071801_roberts.html
+http://www.fas.org/irp/congress/2002_hr/092002fbi.html
+http://www.fas.org/irp/congress/2003_cr/s072403.html
+http://www.fas.org/irp/congress/2005_cr/s316-318.html
+http://www.fas.org/irp/doddir/army/fm33-1/fm33-1m.htm
+http://www.fas.org/irp/nsa/standards.html
+http://www.fas.org/irp/offdocs/int015.html
+http://www.fas.org/irp/offdocs/nsc-hst/nsc-68-5.htm
+http://www.fas.org/irp/offdocs/pdd_ntsc7.htm
+http://www.fas.org/irp/offdocs/walsh/chap_02.htm
+http://www.fas.org/irp/offdocs/walsh/chap_09.htm
+http://www.fas.org/irp/offdocs/walsh/execsum.htm
+http://www.fas.org/irp/ops/ci/agnew.html
+http://www.fas.org/irp/ops/ci/docs/ci2/2ch1_b.htm
+http://www.fas.org/irp/ops/ci/king/turley_030601.html
+http://www.fas.org/irp/ops/ci/king/winthrop.html
+http://www.fas.org/irp/threat/missile/rumsfeld/pt2_katz2.htm
+http://www.fas.org/man/congress/1996/s960315t.htm
+http://www.fas.org/man/dod-101/navy/docs/swos/ops/72-22.html
+http://www.fas.org/man/dod-101/sys/land/row/
+http://www.fas.org/man/dod-101/sys/ship/docs/iismartship.html
+http://www.fas.org/man/dod-101/sys/ship/row/overview.htm
+http://www.fas.org/man/nato/ceern/beern12.htm
+http://www.fas.org/nuke/control/ctbt/text/100799garwin.htm
+http://www.fas.org/nuke/control/npt/docs/PCII35.htm
+http://www.fas.org/nuke/guide/china/com84.html
+http://www.fas.org/nuke/guide/uk/corp/17june98.htm
+http://www.fas.org/nuke/guide/usa/c3i/ec-135.htm
+http://www.fas.org/nuke/guide/usa/icbm/sm-62.htm
+http://www.fas.org/pub/gen/mswg/stealth/b2talk.html
+http://www.fas.org/rlg/v095pcwp.htm
+http://www.fas.org/sgp/advisory/state/hac396.html
+http://www.fas.org/sgp/advisory/state/hac398.html
+http://www.fas.org/sgp/advisory/state/hac98.html
+http://www.fas.org/sgp/bush/eoamend.html
+http://www.fas.org/sgp/eprint/mueller.html
+http://www.fas.org/sgp/foia/ciafoia.html
+http://www.fas.org/sgp/foia/ciafoia2.html
+http://www.fas.org/sgp/library/moynihan/appb.html
+http://www.fas.org/sgp/news/2002/09/fr091302.html
+http://www.fas.org/sgp/spb/spf396.html
+http://www.fas.org/spp/military/docops/operate/ds/images.htm
+http://www.fas.org/spp/starwars/crs/94-470f.htm
+http://www.fas.org/spp/starwars/docops/mns95116da.htm
+http://www.fas.usda.gov/Foodaid/Samples/sample_gfe_a.html
+http://www.fas.usda.gov/info/agexporter/1999/articles/gentle.html
+http://www.fas.usda.gov/ustrade/ustlists/ExFASGrp.asp?QI=
+http://www.fashion-era.com/Trends/fashion_trends_05_wardrobe_planning_2004_2005.htm
+http://www.fashion.arts.ac.uk/courses/further_education/5798.htm
+http://www.fashioncapital.co.uk/component/option,com_boutique/Itemid,75/
+http://www.fashioncapital.co.uk/content/view/1427/27/
+http://www.fashioncapital.co.uk/index.php?option=com_whoswho&task=whoswhoDETAIL&search_detail_on=3249
+http://www.fasken.com/AntitrustCompetitionMarketingBulletin/Nov04
+http://www.fasken.com/web/fmdwebsite.nsf/0/95D32D4D76DF5AF185256E3700684332/$File/BUSINESS_ACTIVITIES_OF_HOSPITALS.PPT?OpenElement
+http://www.fassbex.com/forum/viewtopic.php?t=22
+http://www.fast-rewind.com/kansas.htm
+http://www.fast-times.com/dictionaryp.html
+http://www.fast500europe.com/faqs.asp
+http://www.fastcompany.com/articles/2000/11/prob_campanello.html
+http://www.fastcompany.com/articles/2001/07/buckingham.html
+http://www.fastcompany.com/articles/2001/08/susanka.html
+http://www.fastcompany.com/magazine/01/mountain.html
+http://www.fastcompany.com/magazine/02/meyerson.html
+http://www.fastcompany.com/magazine/04/fcke.html
+http://www.fastcompany.com/magazine/10/brandyou.html
+http://www.fastcompany.com/magazine/16/webjobs.html
+http://www.fastcompany.com/magazine/19/one.html
+http://www.fastcompany.com/magazine/27/ideas.html
+http://www.fastcompany.com/magazine/34/allen.html
+http://www.fastcompany.com/magazine/34/slowfood.html
+http://www.fastcompany.com/magazine/42/pp_waldroop.html
+http://www.fastcompany.com/magazine/45/customerservice.html
+http://www.fastcompany.com/magazine/48/house.html
+http://www.fastcompany.com/magazine/67/newface.html
+http://www.fastcompany.com/magazine/69/growth.html
+http://www.fastcompany.com/magazine/72/gps.html
+http://www.fastcompany.com/magazine/75/angry.html
+http://www.fastcompany.com/magazine/77/sequelking.html
+http://www.fastcompany.com/magazine/81/smartstrategies.html
+http://www.fastcompany.com/magazine/83/playbook.html
+http://www.fastcompany.com/magazine/88/fast-forward-18-24.html
+http://www.fastcompany.com/magazine/90/open_ashoka.html
+http://www.fastcompany.com/magazine/92/open_power-couple.html
+http://www.fastcompany.com/magazine/93/design.html
+http://www.fastcompany.com/magazine/94/fasttalk.html
+http://www.fastcompany.com/online/10/brandyou.html
+http://www.fastcompany.com/online/16/webjobs.html
+http://www.fastcompany.com/online/18/coppola.html
+http://www.fastcompany.com/online/27/ideas.html
+http://www.fastcompany.com/online/39/brilliant.html
+http://www.fastcompany.com/online/45/customerservice.html
+http://www.fastcompany.com/online/53/teaching.html
+http://www.fastcompany.com/social/2005/explanation.html
+http://www.fastfacility.com/FastInfo/info7.asp
+http://www.fastforwardclub.com/
+http://www.fastfreenet.com/archive.html
+http://www.fasting.com/spiritual.html
+http://www.fastmail.fm/docs/faqparts/ChargingAndBilling.htm
+http://www.fastmetrics.com/biznet/fst1.html
+http://www.fastmetrics.com/biznet/t3.html
+http://www.fastrak-consulting.co.uk/tactix/features.htm
+http://www.fastrak-consulting.co.uk/tactix/features/games.htm
+http://www.fastrak-consulting.co.uk/tactix/features/pickmix/pickmix.htm
+http://www.fastrak-consulting.co.uk/tactix/features/tngroi/tngroi.htm
+http://www.fastsearch.com/en/content/view/full/759
+http://www.fastsearch.com/us/content/download/1516/13329/file/
+http://www.fastsearch.com/us/content/view/full/759
+http://www.fastsports.com/tips/tip04/
+http://www.fasttrac.org/article.cfm?id=203
+http://www.fatherlove.com/articles/standing_fire.html
+http://www.fathersdirect.com/news/?page=news&id=667&sub=29
+http://www.fathersforlife.org/per/med2.htm
+http://www.fathersforlife.org/pizzey/pizzey.htm
+http://www.fathertodd.com/blog/archives/2003/09/
+http://www.fathom.com/course/10701044/session4.html
+http://www.fathom.com/course/10701050/session1.html
+http://www.fathom.com/course/21701727/session1.html
+http://www.fathom.com/course/21701736/session1.html
+http://www.fathom.com/course/21701747/session5.html
+http://www.fathom.com/course/21701759/session4.html
+http://www.fathom.com/course/28701907/
+http://www.fathom.com/feature/121625/
+http://www.fathom.com/feature/122290/
+http://www.fathom.com/feature/122347/
+http://www.fathom.com/feature/60800/
+http://www.fathom.com/feature/60993/
+http://www.fathomfive.com/diveteam.htm
+http://www.fatport.com/aboutus/events.php
+http://www.fatprophets.com.au/content.aspx?page=Managed+Funds
+http://www.fattyweightloss.com/
+http://www.fatwa-online.com/scholarsbiographies/15thcentury/abdulmuhsin.htm
+http://www.fatwallet.com/t/18/434191/
+http://www.fatwallet.com/t/52/428098/
+http://www.fatwire.com/news/inthenews_the451_012405.html
+http://www.fau.edu/divdept/exsci/coudesp.htm
+http://www.fau.edu/student/camprec/rent/intro.htm
+http://www.faultline.org/place/pinolecreek/archives/002196.html
+http://www.fauxtan.com/
+http://www.favicon.com/
+http://www.fawc.org.uk/letters/broillet.htm
+http://www.fazekas.hu/~nagydani/rth/Russian-tea-HOWTO-v2.html
+http://www.fazeteen.com/articles/hardlessons.htm
+http://www.fb.org/news/fbn/98/03_16/
+http://www.fb10.uni-bremen.de/anglistik/kerkhoff/AfricanLit/Ngugi/NgugiDorn.htm
+http://www.fbcgalt.org/
+http://www.fbe.unsw.edu.au/learning/Excel97/
+http://www.fbforyouth.com/so_you_think_a_passing_game_is_a_good_idea.htm
+http://www.fbi.gov/congress/congress04/lewis051804.htm
+http://www.fbi.gov/hq/cid/arttheft/arttheft.htm
+http://www.fbi.gov/hq/lab/fsc/current/standards/2005standards5.htm
+http://www.fbi.gov/hq/lab/handbook/intro8.htm
+http://www.fbi.gov/majcases/fraud/fraudschemes.htm
+http://www.fbia.org/fbia.asp?ID=26767
+http://www.fbresearch.org/education/organizations.htm
+http://www.fca.gov/apps/infomemo.nsf/0/ff5559aecfd125738525670c006d5bc0?OpenDocument
+http://www.fcac-acfc.gc.ca/eng/financialservices/picture.asp
+http://www.fcarcsi.com/general/articles/FinalOct03.htm
+http://www.fcc.gov/Bureaus/Common_Carrier/Orders/1997/access/statements.html
+http://www.fcc.gov/Bureaus/Mass_Media/Orders/1998/da980231.txt
+http://www.fcc.gov/Speeches/Hundt/spreh758.html
+http://www.fcc.gov/Speeches/Kennard/spwek833.html
+http://www.fcc.gov/Speeches/Kennard/spwek929.html
+http://www.fcc.gov/Speeches/Powell/2001/spmkp106.html
+http://www.fcc.gov/Speeches/Powell/2001/spmkp109.html
+http://www.fcc.gov/cgb/consumerfacts/plugandplaytv.html
+http://www.fcc.gov/eb/FieldNotices/2002/DOC-238018A1.html
+http://www.fcc.gov/mb/audio/decdoc/letter/1996--06--27--kcvn.html
+http://www.fcc.gov/mb/audio/decdoc/letter/1999--07--30--kaod.html
+http://www.fcc.gov/mb/shva/
+http://www.fccj.or.jp/modules/wfsection/article.php?category=42&articleid=666
+http://www.fcgov.com/utilities/eps.php
+http://www.fcl.org.uk/benefits.php
+http://www.fcm.ca/english/communications/presbrief.htm
+http://www.fcnl.org/issues/item.php?item_id=845&issue_id=101
+http://www.fco.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1019745050212
+http://www.fco.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1086624924399
+http://www.fco.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1097588364146
+http://www.fcoca.org/history.html
+http://www.fcps.k12.va.us/Directives/topicalindexE.htm
+http://www.fcps.net/crisis/duty.htm
+http://www.fcps.net/crisis/fear.htm
+http://www.fcpworld.com/
+http://www.fcs.iastate.edu/computer/tips/onlinetechtips.html
+http://www.fcs.okstate.edu/food/eatng-kepngfodsafe.htm
+http://www.fcs.uga.edu/cs/tutorials/web_seminar/language/tags.html
+http://www.fcsi.org/glossary.html
+http://www.fcsurplus.ca/
+http://www.fcsutler.com/fcweapons.asp
+http://www.fcw.com/
+http://www.fcw.com/fcw/articles/2002/0415/cov-xml-04-15-02.asp
+http://www.fcw.com/fcw/articles/2002/0429/tec-model-04-29-02.asp
+http://www.fcw.com/fcw/articles/2004/0531/news-egov-05-31-04.asp
+http://www.fcw.com/fcw/articles/2004/0607/tec-google-06-07-02.asp
+http://www.fcw.com/fcw/articles/2004/1018/feat-rewire-10-18-04.asp
+http://www.fcw.com/vendorsolutions/NIHECS_04/contract.asp
+http://www.fda.gov/bbs/topics/CONSUMER/CON284b.html
+http://www.fda.gov/bbs/topics/ENFORCE/ENF00441.html
+http://www.fda.gov/cber/minutes/plast101899.htm
+http://www.fda.gov/cber/rules/bldcellsep.htm
+http://www.fda.gov/cder/dmpq/freshair.htm
+http://www.fda.gov/cder/drug/infopage/accutane/medicationguide.htm
+http://www.fda.gov/cdrh/consumer/laserfacts.html
+http://www.fda.gov/cdrh/d861.html
+http://www.fda.gov/cdrh/devadvice/ide/informed_consent.shtml
+http://www.fda.gov/cdrh/humfac/hufactpg.html
+http://www.fda.gov/cdrh/ode/guidance/793.html
+http://www.fda.gov/cdrh/ohip/guidance/1128.html
+http://www.fda.gov/cdrh/safety.html
+http://www.fda.gov/fdac/departs/196_irs.html
+http://www.fda.gov/fdac/departs/2003/103_word.html
+http://www.fda.gov/fdac/departs/2005/205_upd.html
+http://www.fda.gov/fdac/features/096_nhl.html
+http://www.fda.gov/fdac/features/196_kid.html
+http://www.fda.gov/fdac/features/196_test.html
+http://www.fda.gov/fdac/features/1997/497_menu.html
+http://www.fda.gov/fdac/features/1998/498_eye.html
+http://www.fda.gov/fdac/features/1999/199_chol.html
+http://www.fda.gov/fdac/features/2000/400_sun.html
+http://www.fda.gov/fdac/features/2000/600_phone.html
+http://www.fda.gov/fdac/features/2001/101_fish.html
+http://www.fda.gov/fdac/features/2001/201_food.html
+http://www.fda.gov/fdac/features/2001/401_food.html
+http://www.fda.gov/fdac/features/2001/401_vacc.html
+http://www.fda.gov/fdac/features/2001/501_john.html
+http://www.fda.gov/fdac/features/2001/601_flu.html
+http://www.fda.gov/fdac/features/2002/402_botox.html
+http://www.fda.gov/fdac/features/996_bd.html
+http://www.fda.gov/fdac/special/foodlabel/health.html
+http://www.fda.gov/fdac/special/foodlabel/lite.html
+http://www.fda.gov/oashi/patrep/patientrep.html
+http://www.fda.gov/oc/initiatives/criticalpath/whitepaper.html
+http://www.fda.gov/oc/initiatives/generics/whitepaper.html
+http://www.fda.gov/oc/opacom/hottopics/importdrugs/potter042004.html
+http://www.fda.gov/oc/speeches/2000/nationalpressclub.html
+http://www.fda.gov/oc/speeches/2005/wholegrains0520.html
+http://www.fda.gov/opacom/laws/fplact.htm
+http://www.fda.gov/ope/fy03plan/part2_drugs.html
+http://www.fda.gov/ora/compliance_ref/cpg/cpgdev/cpg310-210.html
+http://www.fda.gov/ora/compliance_ref/cpg/cpgvet/cpg680-100.html
+http://www.fda.gov/ora/compliance_ref/rpm_new2/ch9pers.html
+http://www.fda.gov/ora/import/kullman.htm
+http://www.fdfairfield.com/ARCHIVEcitizen_fire_academy%202002.htm
+http://www.fdfairfield.com/cfa1.htm
+http://www.fdic.gov/consumers/consumer/news/cnfall97/wallet.html
+http://www.fdic.gov/regulations/examinations/offshore/
+http://www.fdic.gov/regulations/laws/rules/6500-200.html
+http://www.fdic.gov/regulations/safety/manual/SENSMRK_BOA.html
+http://www.fdimagazine.com/news/fullstory.php/aid/328/South_Africa%92s_dream_becomes_IDZ_reality.html
+http://www.fdimagazine.com/news/fullstory.php/aid/624/The_evolution_of_trade.html
+http://www.fdisk.com/fdisk/
+http://www.fdlsymphonicband.org/ireland_pictures.htm
+http://www.fds.org.au/letter_sep98_01.html
+http://www.fdu.edu/academic/fis/
+http://www.fdungan.com/stick.htm
+http://www.fdvillage.org/Fordhamresearch.htm
+http://www.fe.doe.gov/international/CentralEastern%20Europe/slv96cnf.html
+http://www.feargalquinn.ie/
+http://www.feargalquinn.ie/m/mcrimins.htm
+http://www.feasta.org/documents/wells/contrib.htm
+http://www.feasta.org/documents/wells/seven/healion.html
+http://www.feathersite.com/Poultry/BRKHatcheries.html
+http://www.febs.org/News/Science_Policy/ERC/2003/ERC_F_Mayor.htm
+http://www.fed-soc.org/Publications/hottopics/august.htm
+http://www.fedee.com/euguide.html
+http://www.fedee.com/workinghours.shtml
+http://www.federalistjournal.com/
+http://www.federalnewsradio.com/index.php?nid=82&sid=177148
+http://www.federalreserve.gov/BoardDocs/speeches/2005/20050112/default.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/1997/19970507/11.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/1998/19980121/12.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/1998/19980805/default.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/1999/19990505/12.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/2000/20000119/12.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/2004/20040616/3.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/2004/20040728/11.htm
+http://www.federalreserve.gov/FOMC/BeigeBook/2005/20050615/3.htm
+http://www.federalreserve.gov/boarddocs/speeches/2001/20011011/default.htm
+http://www.federalreserve.gov/boarddocs/speeches/2004/20040707/default.htm
+http://www.federalreserve.gov/boarddocs/speeches/2004/200410152/default.htm
+http://www.federalreserve.gov/boarddocs/speeches/2004/20041021/default.htm
+http://www.federalreserve.gov/boarddocs/testimony/2004/20040225/default.htm
+http://www.federalreserve.gov/boarddocs/testimony/2004/20040421/default.htm
+http://www.federalreserve.gov/fomc/beigebook/2005/20050119/default.htm
+http://www.federalreserve.gov/fomc/beigebook/2005/20050420/11.htm
+http://www.federalreserve.gov/fomc/beigebook/2005/20050615/3.htm
+http://www.federalreserve.gov/paymentsystems/pricing/faqs2.htm
+http://www.federalreserve.gov/paymentsystems/truncation/faqs2.htm
+http://www.federalreserve.gov/pubs/leasing/resource/faq.htm
+http://www.federalreserve.gov/pubs/staffstudies/2000-present/174sum.htm
+http://www.federalunion.org.uk/uk/houseoflords.shtml
+http://www.federalunion.org.uk/uk/wistrichuk.shtml
+http://www.federatedfarmers.com/article.php?sid=214&catid=31
+http://www.fedex.com/us/about/overview/economy/supplychainimpact.html?link=4
+http://www.fedflyfishers.org/Loop/Loopspr01.shtml.htm
+http://www.fedguide.com/
+http://www.fedhealth.com.au/Rules/Normal/32/
+http://www.fedhealth.com.au/Rules/Normal/35/
+http://www.fedmarket.com/Academy/proposalWriting3.htm
+http://www.fedoralegacy.org/about/faq.php
+http://www.fedpubseminars.com/seminar/cdaiclaims.html
+http://www.fee.org/vnews.php?nid=1393
+http://www.fee.org/vnews.php?nid=2537
+http://www.fee.org/vnews.php?nid=2620
+http://www.fee.org/vnews.php?nid=2798
+http://www.fee.org/vnews.php?nid=3830
+http://www.fee.org/vnews.php?nid=408
+http://www.fee.org/vnews.php?nid=4220
+http://www.fee.org/vnews.php?nid=5231
+http://www.fee.org/vnews.php?nid=6290
+http://www.fee.org/vnews.php?nid=951
+http://www.feelingretro.com/view_toy.cfm?id=69
+http://www.felahfd.com/HFDLaw/notebook/503.htm
+http://www.felbers.net/fa/2003/05/28/stimulating-the-economy-with-one-hand/
+http://www.felbers.net/fa/2003/07/
+http://www.felbers.net/fa/2003/11/14/hearts-minds-and-other-organs/
+http://www.feldenkrais.com/method/questel2.html
+http://www.feldnet.com/ItalyADV.cfm
+http://www.felinecrf.org/the_final_hours.htm
+http://www.felinediabetes.com/newdiag.htm
+http://www.felixonline.co.uk/v2/article.php?id=2030
+http://www.fellowshipchurch.com/FCWeb/powersource/default.aspx?pgId=74
+http://www.fellwalk.co.uk/page64.htm
+http://www.felsted.essex.sch.uk/~jms/history/revision/modruss.htm
+http://www.fema.com/diz01/d1391qanda.shtm
+http://www.fema.gov/emanagers/2005/nat020505.shtm
+http://www.fema.gov/fhm/st_fval.shtm
+http://www.fema.gov/txt/reg-iii/newsletter_february2004.txt
+http://www.femalefirst.co.uk/celebrity/11062004.htm
+http://www.femalemuscle.com/library/weekly/aa021400.htm
+http://www.feminist.com/news/vaw8.html
+http://www.feminist.org/gateway/feministgateway-results.asp?category1=lesbian/LGBT
+http://www.feminist.org/intern/
+http://www.feminista.com/archives/v4n2/woodlock.html
+http://www.feministissues.com/
+http://www.fencingofficials.org/Info/HowToBecomeAFencingReferee.html
+http://www.fenews.com/fen28/siminfe.html
+http://www.fenews.com/fen29/one_on_one_interview/one_on_one_kalotay.html
+http://www.fenews.com/fen31/one_on_one_interview/one_on_one_beder.html
+http://www.fenews.com/fen37/one_on_one_duffie/one_on_one_duffie.html
+http://www.fenews.com/fen42/fin_innovations/fin_innovations.html
+http://www.fenews.com/fen42/topics_act_analysis/topics_act_analysis.html
+http://www.fenews.com/fen43/teach_notes/teaching-notes.html
+http://www.fenews.com/issues.htm
+http://www.fengshuiadvice.com/filoanddi.html
+http://www.fengshuimiracle.com/fengshui_paintings.htm
+http://www.fengshuiprophet.com/yi_jing.htm
+http://www.fengshuisociety.org.uk/index.php?location=pages/G_newsViewSingle.php&pullNews=104
+http://www.fengshuitimes.com/main/fst/Default.asp?pg=117&cid=6
+http://www.fenixpanama.com/offshore-panama.html
+http://www.fento.org/res_and_dev/reports/pt_lect_report_case_stu.htm
+http://www.fenwayculture.org/openingourdoors.htm
+http://www.feonline.net/feportal/display?id=2144
+http://www.fepco.com/PDU-1.lynx-excerpt3.html
+http://www.fepproject.org/commentaries/wordsonfire.html
+http://www.fepproject.org/reviews/mediaviolenceJF.html
+http://www.fepproject.org/reviews/russomanno.html
+http://www.feralchildren.com/en/pager.php?df=singh&pg=24
+http://www.ferguselora.com/medical.htm
+http://www.fergusonfoundation.org/cleanuppartners2005.html
+http://www.fergusonsociety.com/
+http://www.fergusontransport.co.uk/news.asp
+http://www.fermanaghtabletennis.com/
+http://www.fermentmagazine.org/FermentIX/Welf.html
+http://www.fernwoodbooks.ca/pages/fern_style_guidelines.html
+http://www.ferrago.com/portal/cluster/124432
+http://www.ferrago.com/portal/cluster/66590
+http://www.ferret-fact.org/Problems.htm
+http://www.ferret.com.au/articles/ad/0c0259ad.asp
+http://www.ferretguy.com/Downloads-req-MostPopular.html
+http://www.ferretsanon.com/Lawsuit/appeal.htm
+http://www.ferris.edu/htmls/academics/course.offerings/doylet/techniques_for_asking_questions_.htm
+http://www.ferris.edu/htmls/colleges/pharmacy/facultypages/outcome_goals_for.htm
+http://www.ferris.edu/library/Subject/Government/census.html
+http://www.ferris.edu/news/jimcrow/coon/
+http://www.ferris.edu/news/jimcrow/jezebel/
+http://www.ferrum.edu/applit/Lessons/NellLP.htm
+http://www.fertilethoughts.com/
+http://www.fertilityplus.org/faq/lowtechfaq.html
+http://www.fes.uwaterloo.ca/planning/prospective/undergraduate/coopreg.html
+http://www.fese.be/initiatives/speeches/2004/eichel_1jun2004.htm
+http://www.festivalofthesea.co.uk/FAQs.html
+http://www.fetalalcohol.com/what-is-fase.htm
+http://www.fetc.org/fetcon/2000-August/rouse.htm
+http://www.feverdreams.net/hankwasam.htm
+http://www.feverdreams.net/tg.htm
+http://www.few.org/tstructure.htm
+http://www.few.vu.nl/~jhulshof/FA2004/
+http://www.ffcd.org/annualforum/bios.html
+http://www.fff.org/comment/com0404f.asp
+http://www.fff.org/comment/com0404h.asp
+http://www.fff.org/freedom/0199e.asp
+http://www.fff.org/freedom/0300d.asp
+http://www.ffii.org.uk/swpat/eudir/texts/recitals.html
+http://www.ffii.org.uk/swpat/ftc/ftc.html
+http://www.ffineart.com/
+http://www.ffmnet.org/QR2-02.htm
+http://www.ffp.csiro.au/publicat/articles/baitbox/
+http://www.fga.net.au/
+http://www.fgcu.edu/support/office2000/word/page.html
+http://www.fgdc.gov/fgdc/coorwg/2003/cwgapr03.html
+http://www.fhcrc.org/phs/cvdeab/chpt12.html
+http://www.fhpc.org/SecondaryPages/BibleSays/BibleSuffering.htm
+http://www.fhs.mcmaster.ca/slru/clear/completed_projects.htm
+http://www.fhsaa.org/
+http://www.fhsu.edu/kga/lp/6/salsbury.html
+http://www.fhwa.dot.gov/construction/accelerated/wsmt04c3.htm
+http://www.fhwa.dot.gov/construction/accelerated/wswa0403.htm
+http://www.fhwa.dot.gov/construction/oversight.htm
+http://www.fhwa.dot.gov/policy/23scmin1.htm
+http://www.fhwa.dot.gov/pressroom/re030130.htm
+http://www.fhwa.dot.gov/reauthorization/mtnc.htm
+http://www.fhwa.dot.gov/resourcecenter/module_4.htm
+http://www.fi.edu/learn.html
+http://www.fi.edu/pieces/knox/automaton/
+http://www.fi.edu/qa99/attic10/
+http://www.fi.edu/tfi/exhibits/sportschallenge/activities.html
+http://www.fia.com/gate?action=retrievePage&locale=en_GB&PageID=2067534132&printer=on
+http://www.fia.com/mediacentre/FIA_Feature/2004/dublin2.html
+http://www.fia.com/mediacentre/Press_Information/F1/Press_Conferences/2004/France/fra_conf1.html
+http://www.fia.com/mediacentre/Press_Information/F1/Press_Conferences/2004/Japan/jap_conf4.html
+http://www.fias.net/investment_climate.html
+http://www.fiatifta.org/aboutfiat/news/old/1998/9801/12.html
+http://www.fiba.com/asp_includes/download.asp?file_id=133
+http://www.fiba.com/asp_includes/download.asp?file_id=346
+http://www.fiberartshop.com/knclbg.htm
+http://www.fiberlink.com/about/bios.htm
+http://www.fibsboard.com/index.php?showtopic=528
+http://www.fic.gov.bc.ca/pensions/qa.htm
+http://www.fic.nih.gov/services/visa.html
+http://www.ficci-sedf.org/fsedf/child4.htm
+http://www.ficorp.com/fipage.html
+http://www.ficpi.org/library/montecarlo99/opposition.html
+http://www.fictionfactor.com/articles/sex.html
+http://www.fictioninferno.com/fictions/blackston_strategist.html
+http://www.fictionpress.com/read.php?storyid=1827633
+http://www.fictionwarehouse.com/yr02/stories/030806.asp
+http://www.fidh.org/article.php3?id_article=1423
+http://www.fidh.org/article.php3?id_article=1824
+http://www.fidler.co.uk/hnew/property/info/guides/guides.html
+http://www.fidm.com/policies/
+http://www.fidnet.com/~dap1955/dickens/christmas.html
+http://www.fidnet.com/~dap1955/dickens/cratchits_christmas.html
+http://www.fidnet.com/~racug/shortcuts.html
+http://www.fido.org.au/moonbi/moonbi104.html
+http://www.fieggen.com/shoelace/lacingmethods.htm
+http://www.field-notes.net/
+http://www.fieldhockey.ca/e/whatsup/index.cfm?issue=2004jul
+http://www.fieldlines.com/comments/2004/12/29/122414/17/8
+http://www.fieldlines.com/story/2004/7/24/204445/128
+http://www.fieldmuseum.org/research_collections/scholarships/default.htm
+http://www.fieldtrip.com/ny/87844520.htm
+http://www.fiery-foods.com/dave/nancy1200.html
+http://www.fifa.com/en/PrinterFriendly/0,3875,MARTV37-Marketing-2004,00.html
+http://www.fifa.com/en/comp/index/0,2442,70602,00.html?comp=CC&year=2003&articleid=70602
+http://www.fifa.com/en/fairplay/index/0,1255,103078,00.html?articleid=103078
+http://www.fifa.com/en/marketing/licensing/index/0,1315,9,00.html
+http://www.fifa.com/en/marketing/newmedia/index/0,3509,10,00.html
+http://www.fifa.com/en/mens/statistics/index/0,2548,103153,00.html?articleid=103153
+http://www.fifa.com/en/news/feature/0,1451,105535,00.html
+http://www.fifa.com/fifa/pub/magazine/fm8-97.4.html
+http://www.fifoost.org/slowakei/EU_SLovakia_2002/node24.php
+http://www.fifthchair.org/school/lesson9.htm
+http://www.fifthpathway.com/ecfmg.html
+http://www.fifty-five-plus.com/health/fitness/SP0046.htm
+http://www.fiftyfoureleven.com/resources/css
+http://www.fiftystatesfsbo.com/
+http://www.fig.net/commission7/
+http://www.figarosensor.com/terms.html
+http://www.fightaging.org/archives/000363.php
+http://www.fightback.com/everywhere/index.cfm
+http://www.fightcps.com/articles/foia&privacyact.html
+http://www.fightingarts.com/
+http://www.fightingarts.com/forums/ubb/Forum1/HTML/002618.html
+http://www.fightingarts.com/forums/ubb/Forum10/HTML/000032.html
+http://www.fightingarts.com/forums/ubb/Forum11/HTML/000110.html
+http://www.fightingarts.com/forums/ubb/Forum19/HTML/000348.html
+http://www.fightingarts.com/forums/ubb/Forum6/HTML/000080.html
+http://www.fightingarts.com/forums/ubb/Forum8/HTML/000039.html
+http://www.fightingarts.com/reading/article.php?id=45
+http://www.fightingbackuk.com/tips.html
+http://www.fightingdemocrat.com/
+http://www.fightingperverts.com/gallery1.html
+http://www.fightingterror.org/members/index.cfm
+http://www.fightnews.com/
+http://www.figureskatingmystery.com/
+http://www.fii.ie/links.asp
+http://www.fiji.gov.fj/publish/page_4050.shtml
+http://www.fiji.org.nz/trade.htm
+http://www.fijibure.com/naiseuseu/activity.htm
+http://www.fijitimes.com/yourSay.aspx?id=3
+http://www.file.brudirect.com/about_brunei/
+http://www.filefront.com/
+http://www.filesaveas.com/pdachoice.html
+http://www.filesniper.com/eraser-software.html
+http://www.filetek.com/papers/Inmon/inmon.htm
+http://www.filipinoexpress.com/18/49_news.html
+http://www.filipinosoftball.com/lined99/lined9904.htm
+http://www.fillingupspace.com/
+http://www.film-philosophy.com/vol8-2004/n4wright
+http://www.film-sklad.si/client.en/index.php?table=articles&ID=103
+http://www.film-to-video.com/
+http://www.film.queensu.ca/Critical/Lawrie1.html
+http://www.film.vic.gov.au/resources/links.shtml
+http://www.filmakers.com/WOMEN.html
+http://www.filmarchive.org.nz/news/pr_040915_NZFP_LMcD.html
+http://www.filmart.com/cgi-bin/filmart/item_list/cat311/Air_Fresheners.html
+http://www.filmatcolumbia.com/producing/producerresource.html
+http://www.filmcommissionhq.com/news.jsp?r=400
+http://www.filmcommissionhq.com/news.jsp?r=403
+http://www.filmeducation.org/primary/animation/sboard.html
+http://www.filmfocus.co.uk/lookat.asp?FilmbaseID=110&FeatureID=8
+http://www.filmforum.com/archivedfilms/amandla/amandlanytimes.html
+http://www.filmforum.org/faq.html
+http://www.filmfreakcentral.net/diff/diff2004capsules.htm
+http://www.filmfreakcentral.net/dvdreviews/beautifulmind.htm
+http://www.filmfreakcentral.net/screenreviews/shaunofthedirtyshame.htm
+http://www.filminflorida.com/ifi/g.asp
+http://www.filminflorida.com/prl/ss.asp
+http://www.filmjumper.com/
+http://www.filmlinc.com/fcm/9-10-2003/ozu.htm
+http://www.filmmaking.net/
+http://www.filmmonthly.com/Profiles/Articles/GChadha/GChadha.html
+http://www.filmmonthly.com/Video/Articles/BornIntoThis/BornIntoThis.html
+http://www.filmo.com/laser.htm
+http://www.filmposters.com/catalog/results.asp?ProdCat=15&PosterSize=&star=&director=&title=&decade=&country=&ScrollAction=Page+19
+http://www.filmrot.com/articles/news/004185.php
+http://www.filmrot.com/articles/news/005213.php
+http://www.filmrot.com/articles/news/005440.php
+http://www.filmrot.com/main.php
+http://www.films.com.br/put.htm
+http://www.filmscanning.co.uk/
+http://www.filmscoremonthly.com/articles/2004/01_Jun---Aisle_Seat_Reissue_Round_Up.asp
+http://www.filmsite.org/amerg.html
+http://www.filmsite.org/anim.html
+http://www.filmsite.org/arse.html
+http://www.filmsite.org/awfu.html
+http://www.filmsite.org/baby3.html
+http://www.filmsite.org/besty2.html
+http://www.filmsite.org/blaz.html
+http://www.filmsite.org/blue.html
+http://www.filmsite.org/blue3.html
+http://www.filmsite.org/cami.html
+http://www.filmsite.org/cloc.html
+http://www.filmsite.org/crow.html
+http://www.filmsite.org/drst.html
+http://www.filmsite.org/duck.html
+http://www.filmsite.org/filmview.html
+http://www.filmsite.org/fort.html
+http://www.filmsite.org/gone.html
+http://www.filmsite.org/itha4.html
+http://www.filmsite.org/lawr.html
+http://www.filmsite.org/loli2.html
+http://www.filmsite.org/moredirectors2.html
+http://www.filmsite.org/myfa.html
+http://www.filmsite.org/noto.html
+http://www.filmsite.org/scenesC.html
+http://www.filmsite.org/sear2.html
+http://www.filmsite.org/shan.html
+http://www.filmsite.org/some.html
+http://www.filmsite.org/suns.html
+http://www.filmsite.org/take.html
+http://www.filmsite.org/wildb.html
+http://www.filmsite.org/wiza.html
+http://www.filmsondisc.com/features/Harris/Harris.htm
+http://www.filmthreat.com:8000/forums/showthread.php?t=2478&page=1
+http://www.filmtracks.com/titles/loves_labours.html
+http://www.filmtribune.com/remainsoftheday.html
+http://www.filmwisconsin.org/productionguide/weather.htm
+http://www.fims.uwo.ca/MediaStudies/structure/ft-course-of-study.htm
+http://www.fims.uwo.ca/mediastudies/structure/ft-course-of-study.htm
+http://www.fimsic.org/english/info_helsinki.html
+http://www.fin.gc.ca/budget04/pamph/paheae.htm
+http://www.fin.gc.ca/budget04/pamph/paleae.htm
+http://www.fin.gc.ca/gloss/gloss-n_e.html
+http://www.fin.gc.ca/news01/01-108e.html
+http://www.fin.gc.ca/news97/97-062e.html
+http://www.fin.gc.ca/toce/2000/ec00e.htm
+http://www.finaid.gatech.edu/scholarships/inst_nonend.php
+http://www.finalcall.com/artman/publish/article_2072.shtml
+http://www.finalgaming.net/
+http://www.finance.cch.com/text/c20s15d510.asp
+http://www.finance.gov.au/pubs/ncoa/chap7.htm
+http://www.finance.gov.au/scripts/Media.asp?Table=MFA&Id=252
+http://www.finance.ohiou.edu/nwslttr/fall2000/fall2000.htm
+http://www.finance.upenn.edu/comptroller/tax/contractor_guide.shtml
+http://www.finance24.com/register/help/mmx_school/displayarticlewide.asp?ArticleID=273817
+http://www.finance24.com/register/help/mmx_school/displayarticlewide.asp?ArticleID=274006
+http://www.financechoices.co.uk/
+http://www.financewise.com/public/edit/riskm/ewrm00/ewrm-intro.htm
+http://www.financial-education-icfe.org/children_and_money/credit_risk_profile_youths.asp
+http://www.financial-education-icfe.org/financial_news_press_releases/2001/20010818_when_your_money_talks_do_you_hear_spend_or_save.asp
+http://www.financial-education-icfe.org/financial_news_press_releases/2002/20021108_dealing_with_foreclosure_on_your_home.asp
+http://www.financial-insights.com/FI/getdoc.jsp?containerId=IDC_P6582
+http://www.financial-ombudsman.org.uk/news/speech/lessons-from-merging.htm
+http://www.financial-planning.com/pubs/fp/20020401034.html
+http://www.financial-planning.com/pubs/fp/20031201013.html
+http://www.financial-planning.com/pubs/fp/20050101021.html
+http://www.financial-planning.com/pubs/mfm/20030908004.html
+http://www.financial-training.com/about/webpage_content.asp?WebPageContent_id=424
+http://www.financial.de/newsroom/englisch/33109.html
+http://www.financialaid.umd.edu/Scholarships/tips.html
+http://www.financialcryptography.com/mt/archives/000009.html
+http://www.financialdirector.co.uk/analysis/1126427
+http://www.financialexpress.com/fe_full_story.php?content_id=87302
+http://www.financialexpress.com/fe_full_story.php?content_id=94197&spf=true
+http://www.financiallearning.com/ge/articles.jsp?c=articles_business&s=business_article1
+http://www.financialprep.com/cfa/testimony.shtml
+http://www.financials.com/c/info/glossary.cfm
+http://www.financialsense.com/Market/hartman/2004/0707.html
+http://www.financialsense.com/Market/wood/2005/0204.html
+http://www.financialsense.com/editorials/murphy/2004/0531.html
+http://www.financialsense.com/fsu/editorials/saxena/2005/0526.html
+http://www.financialsense.com/series3/part1.htm
+http://www.financialsense.com/stormwatch/oldupdates/2004/0804.html
+http://www.find-a-sweetheart.com/blog/
+http://www.find-a-sweetheart.com/blog/2005/06/internet-datings-dirty-little-secret.html
+http://www.findadeath.com/Deceased/y/Robert%20Young/robert_young.htm
+http://www.findapp.com/fMgmt/PDetails.aspx?PID=323
+http://www.findaproperty.co.uk/region.aspx?regionid=058&opt=story&storyid=4863
+http://www.findaproperty.co.uk/story.aspx?storyid=5440
+http://www.findaproperty.com/agent.aspx?agentid=2134&opt=list&salerent=1
+http://www.findaproperty.com/area.aspx?areaid=0256&opt=prop&salerent=1&sp=0
+http://www.findaproperty.com/regi0007.html
+http://www.findaproperty.com/story.aspx?storyid=2603
+http://www.findaproperty.com/storylist0008.html
+http://www.findaresidence.com/relocation/checklist_buying.htm
+http://www.findarticles.com/p/articles/mi_g1epc/is_bio/ai_2419200525
+http://www.findarticles.com/p/articles/mi_go1495/is_200201/ai_n6701678
+http://www.findarticles.com/p/articles/mi_go1884/is_200210/ai_n7102701
+http://www.findarticles.com/p/articles/mi_go1886/is_200202/pg_3
+http://www.findarticles.com/p/articles/mi_go2804/is_200201/ai_n6743938
+http://www.findarticles.com/p/articles/mi_hb071/is_200202
+http://www.findarticles.com/p/articles/mi_hb264/is_200211/ai_hibm1G1115972803
+http://www.findarticles.com/p/articles/mi_hb3105/is_200404/ai_n7764779
+http://www.findarticles.com/p/articles/mi_hb3238/is_200407
+http://www.findarticles.com/p/articles/mi_m0254/is_5_59/ai_70738929
+http://www.findarticles.com/p/articles/mi_m0254/is_n4_v56/ai_20381875
+http://www.findarticles.com/p/articles/mi_m0365/is_n3_v38/ai_15595435
+http://www.findarticles.com/p/articles/mi_m0377/is_2000_Spring/ai_61600826
+http://www.findarticles.com/p/articles/mi_m0412/is_1_27/ai_55437786
+http://www.findarticles.com/p/articles/mi_m0412/is_3_30/ai_94465273
+http://www.findarticles.com/p/articles/mi_m0422/is_1_81/ai_54517307
+http://www.findarticles.com/p/articles/mi_m0422/is_1_82/ai_63910532/pg_5
+http://www.findarticles.com/p/articles/mi_m0422/is_2_80/ai_54073986/pg_4
+http://www.findarticles.com/p/articles/mi_m0422/is_3_84/ai_91673181
+http://www.findarticles.com/p/articles/mi_m0422/is_n1_v79/ai_20824288
+http://www.findarticles.com/p/articles/mi_m0422/is_n4_v78/ai_19178144
+http://www.findarticles.com/p/articles/mi_m0422/is_n4_v78/ai_19178146
+http://www.findarticles.com/p/articles/mi_m0425/is_2_59/ai_64161060
+http://www.findarticles.com/p/articles/mi_m0425/is_n2_v55/ai_18533952
+http://www.findarticles.com/p/articles/mi_m0675/is_1_21/ai_97171375
+http://www.findarticles.com/p/articles/mi_m0675/is_3_21/ai_112982392
+http://www.findarticles.com/p/articles/mi_m0675/is_3_22/ai_n6057263
+http://www.findarticles.com/p/articles/mi_m0675/is_3_22/ai_n6057270
+http://www.findarticles.com/p/articles/mi_m0675/is_6_17/ai_61181987
+http://www.findarticles.com/p/articles/mi_m0675/is_6_20/ai_94981924
+http://www.findarticles.com/p/articles/mi_m0682/is_3_20/ai_90188654
+http://www.findarticles.com/p/articles/mi_m0795/is_2_22/ai_74798215
+http://www.findarticles.com/p/articles/mi_m0815/is_11_27/ai_93987165
+http://www.findarticles.com/p/articles/mi_m0820/is_n210/ai_16019831
+http://www.findarticles.com/p/articles/mi_m0838/is_120/ai_107894054
+http://www.findarticles.com/p/articles/mi_m0838/is_n77/ai_17623541
+http://www.findarticles.com/p/articles/mi_m0846/is_12_23/ai_n6125777
+http://www.findarticles.com/p/articles/mi_m0846/is_5_21/ai_82333607
+http://www.findarticles.com/p/articles/mi_m0846/is_5_23/ai_111518920
+http://www.findarticles.com/p/articles/mi_m0846/is_9_23/ai_n6004454
+http://www.findarticles.com/p/articles/mi_m0857/is_n2_v13/ai_16896759
+http://www.findarticles.com/p/articles/mi_m0857/is_n5_v10/ai_12709420
+http://www.findarticles.com/p/articles/mi_m0887/is_4_23/ai_n6047689
+http://www.findarticles.com/p/articles/mi_m0902/is_2_33/ai_n13563127
+http://www.findarticles.com/p/articles/mi_m0903/is_n9_v13/ai_17441337
+http://www.findarticles.com/p/articles/mi_m0950/is_6_111/ai_103990563
+http://www.findarticles.com/p/articles/mi_m0999/is_7206_319/ai_55552955
+http://www.findarticles.com/p/articles/mi_m0BPW/is_6_15/ai_n6175512
+http://www.findarticles.com/p/articles/mi_m0BQK/is_3_6/ai_74699554
+http://www.findarticles.com/p/articles/mi_m0BQY/is_3_50/ai_112646145
+http://www.findarticles.com/p/articles/mi_m0BQY/is_3_51/ai_n8709812
+http://www.findarticles.com/p/articles/mi_m0BQY/is_6_50/ai_115495752
+http://www.findarticles.com/p/articles/mi_m0BTT/is_170_28/ai_n6040305
+http://www.findarticles.com/p/articles/mi_m0CUH/is_3_27/ai_n6008648
+http://www.findarticles.com/p/articles/mi_m0CUH/is_8_25/ai_90511354
+http://www.findarticles.com/p/articles/mi_m0CVQ/is_4_38/ai_113887419
+http://www.findarticles.com/p/articles/mi_m0CXQ/is_1_15/ai_97424233
+http://www.findarticles.com/p/articles/mi_m0CXQ/is_2002_August_1/ai_90567291
+http://www.findarticles.com/p/articles/mi_m0CYD/is_8_39/ai_n6025826
+http://www.findarticles.com/p/articles/mi_m0CYP/is_3_110/ai_84865570
+http://www.findarticles.com/p/articles/mi_m0DED/is_5_22/ai_81211890
+http://www.findarticles.com/p/articles/mi_m0DTI/is_3_33/ai_n11836471
+http://www.findarticles.com/p/articles/mi_m0DTI/is_5_32/ai_n6023875
+http://www.findarticles.com/p/articles/mi_m0DTI/is_n6_v26/ai_20802706
+http://www.findarticles.com/p/articles/mi_m0EUB/is_4_11/ai_55009448
+http://www.findarticles.com/p/articles/mi_m0EUY/is_24_4/ai_50129271
+http://www.findarticles.com/p/articles/mi_m0EXV/is_1_10/ai_n8576045
+http://www.findarticles.com/p/articles/mi_m0FCH/is_3_29/ai_78680465
+http://www.findarticles.com/p/articles/mi_m0FCI/is_4_62/ai_98249707
+http://www.findarticles.com/p/articles/mi_m0FCJ/is_5_31/ai_114923307
+http://www.findarticles.com/p/articles/mi_m0FCK/is_3_21/ai_104681091
+http://www.findarticles.com/p/articles/mi_m0FCK/is_5_21/ai_110618469
+http://www.findarticles.com/p/articles/mi_m0FCK/is_6_20/ai_96619906
+http://www.findarticles.com/p/articles/mi_m0FCL/is_8_34/ai_n13562627
+http://www.findarticles.com/p/articles/mi_m0FCL/is_9_30/ai_72684370
+http://www.findarticles.com/p/articles/mi_m0FCO/is_3_5/ai_108049496
+http://www.findarticles.com/p/articles/mi_m0FGI/is_3_13/ai_84304017
+http://www.findarticles.com/p/articles/mi_m0FKE/is_7_47/ai_90925280
+http://www.findarticles.com/p/articles/mi_m0FKX/is_1-2_39/ai_n6146847/pg_7
+http://www.findarticles.com/p/articles/mi_m0FKX/is_1-2_39/ai_n6146848/pg_5
+http://www.findarticles.com/p/articles/mi_m0FKX/is_2002_Spring-Summer/ai_87915678
+http://www.findarticles.com/p/articles/mi_m0FKX/is_3-4_38/ai_111265622
+http://www.findarticles.com/p/articles/mi_m0FQP/is_4568_130/ai_81761669
+http://www.findarticles.com/p/articles/mi_m0FQP/is_4595_131/ai_89858438
+http://www.findarticles.com/p/articles/mi_m0FQP/is_4695_133/ai_n6114762
+http://www.findarticles.com/p/articles/mi_m0FSL/is_n3_v68/ai_21136023
+http://www.findarticles.com/p/articles/mi_m0FXS/is_1_81/ai_82077629
+http://www.findarticles.com/p/articles/mi_m0GER/is_n94/ai_21260233
+http://www.findarticles.com/p/articles/mi_m0HFI/is_2_55/ai_112366866
+http://www.findarticles.com/p/articles/mi_m0HMU/is_13_29/ai_95909523
+http://www.findarticles.com/p/articles/mi_m0HMU/is_13_30/ai_111895912
+http://www.findarticles.com/p/articles/mi_m0HMU/is_4_30/ai_99817173
+http://www.findarticles.com/p/articles/mi_m0HMU/is_6_30/ai_102840385
+http://www.findarticles.com/p/articles/mi_m0HSW/is_2002_June_28/ai_89232778
+http://www.findarticles.com/p/articles/mi_m0HTZ/is_4_130/ai_80303787
+http://www.findarticles.com/p/articles/mi_m0HWW/is_10_4/ai_71711482
+http://www.findarticles.com/p/articles/mi_m0ISW/is_2001_May/ai_73959325
+http://www.findarticles.com/p/articles/mi_m0JIW/is_4_54/ai_83295123
+http://www.findarticles.com/p/articles/mi_m0KFZ/is_2_10
+http://www.findarticles.com/p/articles/mi_m0KFZ/is_2_10/ai_102274081
+http://www.findarticles.com/p/articles/mi_m0KJI/is_3_115/ai_98901459
+http://www.findarticles.com/p/articles/mi_m0KOC/is_3_8/ai_n13503041
+http://www.findarticles.com/p/articles/mi_m0KWG/is_2002_July-Sept/ai_107637284
+http://www.findarticles.com/p/articles/mi_m0KZC/is_2002_July_4/ai_90107695
+http://www.findarticles.com/p/articles/mi_m0MJG/is_4_1/ai_87779403
+http://www.findarticles.com/p/articles/mi_m0MJT/is_3_15/ai_n6134602
+http://www.findarticles.com/p/articles/mi_m0MXI/is_3_24/ai_114476999
+http://www.findarticles.com/p/articles/mi_m0NAH/is_1_34/ai_111896956
+http://www.findarticles.com/p/articles/mi_m0NHG/is_1_16/ai_98542877
+http://www.findarticles.com/p/articles/mi_m0NIU/is_2003_Feb/ai_99429212
+http://www.findarticles.com/p/articles/mi_m0NQM/is_3_42/ai_108442656
+http://www.findarticles.com/p/articles/mi_m0NTG/is_1_3/ai_n6109899
+http://www.findarticles.com/p/articles/mi_m0OUK/is_1_9/ai_101517630
+http://www.findarticles.com/p/articles/mi_m0PAG/is_2003_Oct-Dec/ai_110808262
+http://www.findarticles.com/p/articles/mi_m0PAL/is_505_159/ai_n6157804/pg_3
+http://www.findarticles.com/p/articles/mi_m0PAL/is_509_159/ai_n6153275
+http://www.findarticles.com/p/articles/mi_m0PAL/is_511_160/ai_n9770029
+http://www.findarticles.com/p/articles/mi_m0PAL/is_512_160/ai_n9770073
+http://www.findarticles.com/p/articles/mi_m0PAL/is_515_161/ai_n13499282
+http://www.findarticles.com/p/articles/mi_m0PAM/is_136/ai_106732183
+http://www.findarticles.com/p/articles/mi_m0UBT/is_42_18/ai_n6276318
+http://www.findarticles.com/p/articles/mi_m0UNZ/is_1998_Oct_19/ai_53098137
+http://www.findarticles.com/p/articles/mi_m0WVI/is_1998_June_29/ai_59272593
+http://www.findarticles.com/p/articles/mi_m1038/is_n2_v33/ai_9034471
+http://www.findarticles.com/p/articles/mi_m1038/is_n5_v38/ai_17565127
+http://www.findarticles.com/p/articles/mi_m1041/is_2_81/ai_97173893
+http://www.findarticles.com/p/articles/mi_m1041/is_6_80/ai_86061847
+http://www.findarticles.com/p/articles/mi_m1052/is_n12_v110/ai_7382852
+http://www.findarticles.com/p/articles/mi_m1077/is_7_58/ai_100544491
+http://www.findarticles.com/p/articles/mi_m1082/is_n1_v42/ai_20353608
+http://www.findarticles.com/p/articles/mi_m1082/is_n5_v42/ai_21151811
+http://www.findarticles.com/p/articles/mi_m1134/is_1_113/ai_113456801
+http://www.findarticles.com/p/articles/mi_m1134/is_2_112/ai_98254971
+http://www.findarticles.com/p/articles/mi_m1154/is_n5_v80/ai_12186497
+http://www.findarticles.com/p/articles/mi_m1175/is_4_36/ai_104681954
+http://www.findarticles.com/p/articles/mi_m1175/is_5_34/ai_82261895
+http://www.findarticles.com/p/articles/mi_m1175/is_n12_v22/ai_6995706
+http://www.findarticles.com/p/articles/mi_m1189/is_3_273/ai_73443807
+http://www.findarticles.com/p/articles/mi_m1189/is_4_274
+http://www.findarticles.com/p/articles/mi_m1189/is_4_274/ai_87706209
+http://www.findarticles.com/p/articles/mi_m1189/is_6_272/ai_66456043
+http://www.findarticles.com/p/articles/mi_m1189/is_n1_v260/ai_6273527
+http://www.findarticles.com/p/articles/mi_m1208/is_10_228/ai_114086623
+http://www.findarticles.com/p/articles/mi_m1208/is_25_227/ai_103799818
+http://www.findarticles.com/p/articles/mi_m1208/is_4_228/ai_112647664
+http://www.findarticles.com/p/articles/mi_m1208/is_52_228/ai_n8702696
+http://www.findarticles.com/p/articles/mi_m1216/is_n2_v180/ai_6286265
+http://www.findarticles.com/p/articles/mi_m1216/is_n2_v180/ai_6286289
+http://www.findarticles.com/p/articles/mi_m1248/is_10_92/ai_n7576774/pg_2
+http://www.findarticles.com/p/articles/mi_m1248/is_9_92/ai_n6232154
+http://www.findarticles.com/p/articles/mi_m1248/is_n12_v83/ai_17860704
+http://www.findarticles.com/p/articles/mi_m1264/is_1_31/ai_61891747
+http://www.findarticles.com/p/articles/mi_m1264/is_9_33/ai_96195348
+http://www.findarticles.com/p/articles/mi_m1272/is_2700_132/ai_108791285
+http://www.findarticles.com/p/articles/mi_m1279/is_1999_August/ai_55226118
+http://www.findarticles.com/p/articles/mi_m1279/is_n137/ai_13580738
+http://www.findarticles.com/p/articles/mi_m1282/is_25_53/ai_80932687
+http://www.findarticles.com/p/articles/mi_m1282/is_n7_v45/ai_13699788
+http://www.findarticles.com/p/articles/mi_m1295/is_1_63/ai_53531071
+http://www.findarticles.com/p/articles/mi_m1306/is_4_69/ai_99554650
+http://www.findarticles.com/p/articles/mi_m1306/is_4_70/ai_n5993122
+http://www.findarticles.com/p/articles/mi_m1309/is_3_35/ai_54259348
+http://www.findarticles.com/p/articles/mi_m1310/is_2001_Dec/ai_82066715
+http://www.findarticles.com/p/articles/mi_m1346/is_7_46/ai_76157784
+http://www.findarticles.com/p/articles/mi_m1365/is_11_33/ai_102453200
+http://www.findarticles.com/p/articles/mi_m1511/is_11_20/ai_57042529/pg_2
+http://www.findarticles.com/p/articles/mi_m1511/is_2_20/ai_53631764
+http://www.findarticles.com/p/articles/mi_m1511/is_9_21/ai_64698195
+http://www.findarticles.com/p/articles/mi_m1511/is_n7_v18/ai_19560110
+http://www.findarticles.com/p/articles/mi_m1568/is_11_35/ai_n6030471
+http://www.findarticles.com/p/articles/mi_m1568/is_1_34/ai_84841743
+http://www.findarticles.com/p/articles/mi_m1568/is_2_34/ai_85701096
+http://www.findarticles.com/p/articles/mi_m1568/is_9_35/ai_n6156598/pg_2
+http://www.findarticles.com/p/articles/mi_m1585/is_11_23/ai_50338518
+http://www.findarticles.com/p/articles/mi_m1608/is_4_18/ai_84153427
+http://www.findarticles.com/p/articles/mi_m1608/is_7_18/ai_88583543
+http://www.findarticles.com/p/articles/mi_m1608/is_n7_v14/ai_20946881
+http://www.findarticles.com/p/articles/mi_m1608/is_n9_v14/ai_21099916
+http://www.findarticles.com/p/articles/mi_m2120/is_2_80/ai_54336604
+http://www.findarticles.com/p/articles/mi_m2120/is_6_80/ai_56022627
+http://www.findarticles.com/p/articles/mi_m2185/is_3_14/ai_99430626
+http://www.findarticles.com/p/articles/mi_m2242/is_1645_282/ai_98184520
+http://www.findarticles.com/p/articles/mi_m2294/is_2002_Nov/ai_97728459
+http://www.findarticles.com/p/articles/mi_m2294/is_2003_April/ai_101174062/pg_2
+http://www.findarticles.com/p/articles/mi_m2294/is_2003_April/ai_101174062/pg_3
+http://www.findarticles.com/p/articles/mi_m2294/is_n3-4_v37/ai_20119673
+http://www.findarticles.com/p/articles/mi_m2372/is_3_36/ai_61487450
+http://www.findarticles.com/p/articles/mi_m2405/is_n4_v119/ai_13906384
+http://www.findarticles.com/p/articles/mi_m2472/is_3_13/ai_95148981
+http://www.findarticles.com/p/articles/mi_m2479/is_5_28/ai_73640914
+http://www.findarticles.com/p/articles/mi_m2493/is_6_51/ai_87025854
+http://www.findarticles.com/p/articles/mi_m2822/is_2001_Spring-Summer/ai_100808920
+http://www.findarticles.com/p/articles/mi_m2843/is_2_24/ai_60302609
+http://www.findarticles.com/p/articles/mi_m3012/is_4_179/ai_54480074
+http://www.findarticles.com/p/articles/mi_m3101/is_7_75/pg_2
+http://www.findarticles.com/p/articles/mi_m3165/is_2_40/ai_113644202
+http://www.findarticles.com/p/articles/mi_m3197/is_8_49/ai_n6171795
+http://www.findarticles.com/p/articles/mi_m3225/is_n4_v49/ai_15166719
+http://www.findarticles.com/p/articles/mi_m3230/is_n4_v25/ai_14039870
+http://www.findarticles.com/p/articles/mi_m3284/is_n4_v13/ai_9242982
+http://www.findarticles.com/p/articles/mi_m3289/is_4_171/ai_84652261
+http://www.findarticles.com/p/articles/mi_m3741/is_10_50/ai_93534994
+http://www.findarticles.com/p/articles/mi_m3741/is_9_52/ai_n6210368
+http://www.findarticles.com/p/articles/mi_m3763/is_n5_v91/ai_11847828
+http://www.findarticles.com/p/articles/mi_m3765/is_n3_v16/ai_15349865
+http://www.findarticles.com/p/articles/mi_m3779/is_n51/ai_11917846
+http://www.findarticles.com/p/articles/mi_m3809/is_n63/ai_11173918
+http://www.findarticles.com/p/articles/mi_m3830/is_2_53/ai_n6094125
+http://www.findarticles.com/p/articles/mi_m3888/is_2_28/ai_n6157854
+http://www.findarticles.com/p/articles/mi_m3955/is_n6_v48/ai_18989780
+http://www.findarticles.com/p/articles/mi_m3MKT/is_177_106/ai_50342144
+http://www.findarticles.com/p/articles/mi_m4021/is_2002_Jan_1/ai_82264530
+http://www.findarticles.com/p/articles/mi_m4021/is_n2_v19/ai_19115337
+http://www.findarticles.com/p/articles/mi_m4339/is_2000_Annual/ai_63543388
+http://www.findarticles.com/p/articles/mi_m5072/is_34_25/ai_107255142
+http://www.findarticles.com/p/articles/mi_m5072/is_46_24/ai_97768168
+http://www.findarticles.com/p/articles/mi_m6280/is_4_191/ai_74337793/pg_2
+http://www.findarticles.com/p/articles/mi_m6280/is_5_198/ai_n7584069
+http://www.findarticles.com/p/articles/mi_qa3621/is_199601/ai_n8749389
+http://www.findarticles.com/p/articles/mi_qa3631/is_200207/ai_n9134392
+http://www.findarticles.com/p/articles/mi_qa3647/is_200404/ai_n9377675
+http://www.findarticles.com/p/articles/mi_qa3675/is_200503/ai_n13461603
+http://www.findarticles.com/p/articles/mi_qa3689/is_200208/ai_n9095994
+http://www.findarticles.com/p/articles/mi_qa3705/is_200501/ai_n13632939/pg_3
+http://www.findarticles.com/p/articles/mi_qa3727/is_200104/ai_n8952575
+http://www.findarticles.com/p/articles/mi_qa3742/is_200406/ai_n9452478/pg_3
+http://www.findarticles.com/p/articles/mi_qa3754/is_199803/ai_n8806523
+http://www.findarticles.com/p/articles/mi_qa3772/is_200311/ai_n9313288
+http://www.findarticles.com/p/articles/mi_qa3793/is_200204/ai_n9079825/pg_4
+http://www.findarticles.com/p/articles/mi_qa3798/is_199810/ai_n8814952
+http://www.findarticles.com/p/articles/mi_qa3818/is_200301/ai_n9231299
+http://www.findarticles.com/p/articles/mi_qa3819/is_200403/ai_n9398536
+http://www.findarticles.com/p/articles/mi_qa3844/is_200405/ai_n9427743
+http://www.findarticles.com/p/articles/mi_qa3857/is_200001/ai_n8883712
+http://www.findarticles.com/p/articles/mi_qa3892/is_200501/ai_n12934780
+http://www.findarticles.com/p/articles/mi_qa3900/is_200209/ai_n9137894
+http://www.findarticles.com/p/articles/mi_qa3949/is_200403/ai_n9357932
+http://www.findarticles.com/p/articles/mi_qa3977/is_200409/ai_n9449884
+http://www.findarticles.com/p/articles/mi_qa3981/is_200212/ai_n9153966
+http://www.findarticles.com/p/articles/mi_qa4046/is_200404/ai_n9396959/pg_5
+http://www.findarticles.com/p/articles/mi_qa4083/is_200504/ai_n13634731
+http://www.findarticles.com/p/articles/mi_qn4153/is_200302/ai_n12032582
+http://www.findarticles.com/p/articles/mi_zdcis/is_200212/ai_ziff35096
+http://www.findarticles.com/p/articles/mi_zdoup/is_200411/ai_n7180960
+http://www.findarticles.com/p/articles/mi_zdpcm/is_200502/ai_n9483058
+http://www.findarticles.com/p/search?tb=art&qt=Independent+regulatory+commissions+%2F+Officials+and+employees
+http://www.findaupair.co.uk/fam_what_is_an_aupair.htm
+http://www.findforward.com/about/
+http://www.findgift.com/Holidays/Christmas/Her/Friend/
+http://www.findgift.com/Holidays/Christmas/Him/Friend/
+http://www.findinglisp.com/blog/2004/11/web-application-design-rest-of-story.html
+http://www.finditireland.com/links/businessb.html
+http://www.findlaw.com.au/articles/default.asp?task=read&id=12894&site=GN
+http://www.findlaw.com.au/cases/caseRTF.asp?id=345428
+http://www.findlaw.com.au/cases/caseRTF.asp?id=345716
+http://www.findlaw.com/
+http://www.findlaw.com/12international/countries/nz/articles/2026.html
+http://www.findory.com/source?source=Sadagopan's%20weblog%20on%20Emerging%20Technologies&ib=1
+http://www.finds.org.uk/news/letters3.php
+http://www.finds.org.uk/news/story.php?newsID=142
+http://www.findwatches.co.uk/products_new.php/page/5
+http://www.findyourcoach.com/roi-study.htm
+http://www.fineartforum.org/Backissues/Vol_18/faf_v18_n02/faftext/gye.html
+http://www.fineartsassociation.org/performance.html
+http://www.finecutfilms.com/Interviews/Interee03.html
+http://www.finecutfilms.com/Production/Interviews/Interview1.html
+http://www.finecutfilms.com/Production/Overview/Over1.html
+http://www.finecutfilms.com/Production/Overview/Over2.html
+http://www.finegael.ie/PubUploads/Coveney%20-%20Renewable%20Energy.htm
+http://www.finegael.ie/fine-gael-news.cfm/NewsID/21794/action/detail/year/2005/month/1/level/page/aid/186/
+http://www.finelinefeatures.com/advent/synopsis.htm
+http://www.finelinefeatures.com/lvc/prodnotes.htm
+http://www.fineliving.com/fine/cda/select_print/1,1983,FINE_8068_16819_SELECT-TEXT-DETAIL-PRINT,00.html
+http://www.fineliving.com/fine/practical_living/text/0,1663,FINE_8068_14283,00.html
+http://www.fineliving.com/fine/practical_living/text/0,1663,FINE_8068_16361,00.html
+http://www.fineliving.com/fine/practical_living/text/0,1663,FINE_8068_16616,00.html
+http://www.fineliving.com/fine/practical_living/text/0,1663,FINE_8068_16819,00.html
+http://www.fineliving.com/fine/practical_living/text/0,1663,FINE_8068_17337,00.html
+http://www.fineliving.com/fine/rejuvenation_essentials/article/0,1663,FINE_1422_3506320,00.html
+http://www.finescale.com/
+http://www.finescale.com/fsm/community/forum/topic.asp?TOPIC_ID=32938
+http://www.finestimage.com/singlesnf/scmsw.htm
+http://www.finestimage.com/singlesnf/tnwsm.htm
+http://www.fineticachild.com/html/testimonials.html
+http://www.finewaters.com/Water_Food/Stemware/Fostoria_Glass_Company.asp
+http://www.finfacts.com/biz10/europeanuniontaxationstructuressystems.htm
+http://www.finfacts.com/biz10/idairelandinvestmentreview.htm
+http://www.finfacts.com/irelandeconomy/usmultinationalprofitsireland.htm
+http://www.fingaz.co.zw/fingaz/2005/January/January13/7512.shtml
+http://www.finishsystems.com/accusprayairsprayguns.html
+http://www.fink.com/papers/impossible.html
+http://www.finkelsteinlibrary.org/forthcoming.html
+http://www.finnachta.com/eu-env-comm-m-wallstromm.htm
+http://www.finnfacts.com/english/innovations/investment/
+http://www.finographics.com/schutzhund/protection/preydrive-1.htm
+http://www.finsights.com/article43266.html
+http://www.finsvc.duke.edu/gap/m200-070.html
+http://www.fintrac.gc.ca/re-ed/casinos_e.asp
+http://www.fintrac.gc.ca/re-ed/fx_e.asp
+http://www.fintrac.gc.ca/re-ed/life_e.asp
+http://www.fintrac.gc.ca/re-ed/real_estate_e.asp
+http://www.fintronic.com/manual/farm.html
+http://www.fipr.org/
+http://www.fipresci.org/criticism/archive/archive_2004/szolnok/szolnok_04_tkurelec.htm
+http://www.fire-flies.net/Content/Ecological%20Renewal/Content/Peace%20and%20Intercultural%20perspectives
+http://www.fire-flies.net/Content/Peace%20and%20Intercultural%20perspectives
+http://www.fire-museum.netfirms.com/page4.html
+http://www.fire.ca.gov/FireEmergencyResponse/FirePlan/appendixb.html
+http://www.fire.ca.gov/cdf/incidents/about.html
+http://www.fire.gov/newsletter/fall2004/page_one.htm
+http://www.fire.org.nz/building/faq/DRU.htm
+http://www.fire.org.uk/IETRI/news-desk/template.php?t=4&id=904
+http://www.fire.qld.gov.au/exchange/
+http://www.fire.qld.gov.au/news/view.asp?id=142
+http://www.fire.uni-freiburg.de/GFMCnew/2003/0128/20030128_aus.htm
+http://www.fire.uni-freiburg.de/GFMCnew/2003/0204/20030204_aus.htm
+http://www.fire.uni-freiburg.de/GFMCnew/2003/0214/20030214_aus.htm
+http://www.fireandknowledge.org/archives/2005/01/
+http://www.fireandknowledge.org/archives/category/art-and-design/
+http://www.firearmstactical.com/briefs3.htm
+http://www.firefacts.com/training.html
+http://www.firefightersburnfundvictoria.ca/support/unit/unit1.htm
+http://www.firefightersworkout.com/fitbyte82.html
+http://www.fireflyfans.net/thread.asp?b=18&t=7837
+http://www.fireflymovie.com/news.html
+http://www.fireflysun.com/book/breakingranks.php
+http://www.fireflysun.com/book/match.php
+http://www.firelightpublishing.com/bwprologue.htm
+http://www.firelily.com/gender/gianna/why.come.out.html
+http://www.firelily.com/gender/sstgfaq/family.html
+http://www.firelily.com/gender/sstgfaq/tstg.html
+http://www.fireplan.gov/leadership/meetnote_5_18_04.html
+http://www.fireplan.gov/resources/glossary/c.html
+http://www.firesafe.org.uk/html/basicmoe.htm
+http://www.firesafetytoolbox.org.uk/TwoColumn/FoundationStones/CoreFirePreventionMessages/FirePrevention.asp
+http://www.firethistime.org/feariraqgovt.htm
+http://www.firethistime.org/quotes.htm
+http://www.firetimes.com/subcontent.asp?FragID=11587
+http://www.firetrip.sr.unh.edu/
+http://www.firewheeldesign.com/sparkplug/articles/wwil/
+http://www.fireworld.com/incidents/April2001.htm
+http://www.firingsquad.com/news/newsarticle.asp?searchid=6705
+http://www.firingsquad.com/news/newsarticle.asp?searchid=8191
+http://www.first-business-systems.co.uk/companyformations/termsandconditions.php
+http://www.first-school.ws/activities/firststeps/olympics.htm
+http://www.first-unitarian-pgh.org/worship/sermons/sermon20020915.html
+http://www.first.army.mil/pao/2005_Articles/2_28_BCT_Ready_Iraq.htm
+http://www.firstact.com/www3/tuneandplay/howto/training.asp
+http://www.firstactive.co.uk/fa/forms/application_form_2004.pdf?nourl=www.firstactive.co.uk/nonsales-jobcentre-app_form
+http://www.firstactive.co.uk/fa/journalists.shtml
+http://www.firstaffirmative.com/news/sriArticle.html
+http://www.firstam.com/faf/ir/earnings-2-03b.html
+http://www.firstambank.com/commercialloans.html
+http://www.firstamendmentcenter.org/Speech/arts/faqs.aspx?id=12246
+http://www.firstamendmentcenter.org/Speech/arts/faqs.aspx?id=13482
+http://www.firstamendmentcenter.org/Speech/arts/faqs.aspx?id=14717
+http://www.firstamendmentcenter.org/Speech/arts/topic.aspx?topic=comix
+http://www.firstamendmentcenter.org/Speech/overview.aspx
+http://www.firstamendmentcenter.org/commentary.aspx?id=2704
+http://www.firstamendmentcenter.org/rel_liberty/publicschools/topic_faqs.aspx?topic=religious_clubs
+http://www.firstamendmentcenter.org/rel_liberty/publicschools/topic_faqs.aspx?topic=religious_clubs&printer-friendly=y
+http://www.firstamendmentcenter.org/speech/adultent/topic.aspx?topic=pornography
+http://www.firstamendmentcenter.org/speech/adultent/topic.aspx?topic=pornography&printer-friendly=y
+http://www.firstamendmentcenter.org/speech/internet/topic.aspx?topic=pornography
+http://www.firstamendmentcenter.org/speech/libraries/topic.aspx?topic=banned_books
+http://www.firstamendmentcenter.org/speech/studentexpression/news.aspx?id=14679&printer-friendly=y
+http://www.firstamendmentschools.org/news/article.aspx?id=15122
+http://www.firstbackup.com/Partners/Affiliate/default.asp
+http://www.firstbaptistnorthville.com/fbn_files/adult.html
+http://www.firstbusiness.us/
+http://www.firstcaribbeanbank.com/terms_conditions.html
+http://www.firstchoice.co.uk/info/aboutus/contactus.html
+http://www.firstconsult.com/?action=view_article&id=1037290&type=103&bref=1
+http://www.firstcov.com/happening.htm
+http://www.firstcu.coop/products&services.htm
+http://www.firstenergygroup.com/company/company_profiles.htm
+http://www.firstfoot.com/php/glossary/phpglossar_0.8/index.php?letter=p
+http://www.firstfoot.com/php/glossary/phpglossar_0.8/index.php?letter=s
+http://www.firstgov.gov/
+http://www.firstgov.gov/Agencies/State_and_Territories.shtml
+http://www.firsthome.gov.au/
+http://www.firstmonday.dk/issues/issue9_1/galitsky/
+http://www.firstmonday.org/issues/issue10_2/crowston/
+http://www.firstmonday.org/issues/issue10_4/geist/
+http://www.firstmonday.org/issues/issue10_4/meijer/
+http://www.firstmonday.org/issues/issue10_5/iannacci/
+http://www.firstmonday.org/issues/issue10_6/bloom/
+http://www.firstmonday.org/issues/issue4_6/kelsey/
+http://www.firstmonday.org/issues/issue5_10/smith/
+http://www.firstmonday.org/issues/issue5_2/delong/
+http://www.firstmonday.org/issues/issue5_5/nardi/
+http://www.firstmonday.org/issues/issue5_9/sholtz/
+http://www.firstmonday.org/issues/issue6_10/wiggins/
+http://www.firstmonday.org/issues/issue6_11/ishii/
+http://www.firstmonday.org/issues/issue6_11/poblocki/
+http://www.firstmonday.org/issues/issue6_6/newmarch/
+http://www.firstmonday.org/issues/issue6_7/abel/
+http://www.firstmonday.org/issues/issue6_7/bennett/
+http://www.firstmonday.org/issues/issue6_9/brown/
+http://www.firstmonday.org/issues/issue7_10/cisler/
+http://www.firstmonday.org/issues/issue7_4/hargittai/
+http://www.firstmonday.org/issues/issue7_6/krishnamurthy/
+http://www.firstmonday.org/issues/issue8_2/keats/
+http://www.firstmonday.org/issues/issue8_5/keller/
+http://www.firstmonday.org/issues/issue8_9/tompkins/
+http://www.firstmonday.org/issues/issue9_12/poulin/
+http://www.firstmonday.org/issues/issue9_3/zachary/
+http://www.firstmonday.org/issues/issue9_4/levesque/
+http://www.firstparish.org/sermons/2002-04-07.html
+http://www.firstpreston.com/disclaimers.asp
+http://www.firstrunfeatures.com/th_title_d.html
+http://www.firstscience.com/SITE/editor/045_ramblings_27022004.asp
+http://www.firstscience.com/SITE/factfile/factfile2521_2540.asp
+http://www.firstscience.com/SITE/review_radiant.asp
+http://www.firstscience.com/site/articles/dinosaur.asp
+http://www.firstscience.com/site/articles/rees2.asp
+http://www.firstscience.com/site/editor/045_ramblings_27022004.asp
+http://www.firststone.org/articles/topics/parents/a_model_for_hurting_parents.htm
+http://www.firstthings.com/ftissues/ft0011/articles/coons.html
+http://www.firstthings.com/ftissues/ft0101/public.html
+http://www.firstthings.com/ftissues/ft0106/reviews/carrese.html
+http://www.firstthings.com/ftissues/ft0210/articles/witte.html
+http://www.firstthings.com/ftissues/ft0401/reviews/barr.html
+http://www.firstthings.com/ftissues/ft0403/articles/young.html
+http://www.firstthings.com/ftissues/ft0408/articles/budziszewski.htm
+http://www.firstthings.com/ftissues/ft0410/articles/noll.htm
+http://www.firstthings.com/ftissues/ft0504/public.html
+http://www.firstthings.com/ftissues/ft9202/articles/noll.html
+http://www.firstthings.com/ftissues/ft9504/articles/harvey.html
+http://www.firstthings.com/ftissues/ft9604/articles/stuntz.html
+http://www.firstthings.com/ftissues/ft9702/articles/iannone.html
+http://www.firstthings.com/ftissues/ft9812/public.html
+http://www.firsttracksonline.com/utah2004.htm
+http://www.firsttvdrama.com/enterprise/e8.php3
+http://www.firstusa.com/cgi-bin/webcgi/webserve.cgi?partner_dir_name=midfirst&page=cont&mkid=6029
+http://www.firstwebbuilder.co.uk/ebooks.html
+http://www.firstworldwar.bham.ac.uk/ma/dayschools.htm
+http://www.firstworldwar.com/battles/nasiriyeh.htm
+http://www.firstworldwar.com/battles/overview_gf.htm
+http://www.firstworldwar.com/diaries/cavalrybrigadeatcambrai.htm
+http://www.firstworldwar.com/diaries/labourcompanyatypres.htm
+http://www.firstworldwar.com/diaries/ordinarywaronthesomme.htm
+http://www.firstworldwar.com/features/christmastruce.htm
+http://www.firstworldwar.com/features/foch.htm
+http://www.firstworldwar.com/features/trenchlife.htm
+http://www.firstworldwar.com/features/wilsonadministration.htm
+http://www.firstworldwar.com/source/scrapofpaper2.htm
+http://www.firstworldwar.com/source/serbia_neutralleague.htm
+http://www.firstworldwar.com/weaponry/tanks.htm
+http://www.fis.utoronto.ca/resources/eleccoll/bscw/instructions.htm
+http://www.fish4fun.com/contact.htm
+http://www.fishandgame.com/icefish/wait.htm
+http://www.fishdreamer.com/20jan05.html
+http://www.fisher-price.com/us/playstages/play.asp?lMinAge=1.50&lMaxAge=2.00
+http://www.fisher-price.com/us/prepare/article.asp?c=bg_prgnttn&artid=158553
+http://www.fisher-price.com/us/prepare/qanda.asp?c=bg_prgnttn&qandaid=114279
+http://www.fisheries.co.uk/whitesprings/
+http://www.fisheries.org/html/fisheries/F2809/Guest%20Director.htm
+http://www.fishernuts.com/employ.htm
+http://www.fisherycrisis.com/nscod.htm
+http://www.fishingmegastore.com/acatalog/Books_and_Videos.html
+http://www.fishingnj.org/netusa11.htm
+http://www.fishlakegeorge.com/
+http://www.fishlakia.com/john3.htm
+http://www.fishpondinfo.com/toad.htm
+http://www.fishsniffer.com/cgi-bin/forumsyabb/YaBB.pl?board=general_classifieds;action=display;num=1107283827
+http://www.fishtech.com/speech.html
+http://www.fisme.org.in/custom.htm
+http://www.fiso.co.uk/premiership_players.htm
+http://www.fit.edu/hr/current_postings.htm
+http://www.fitchburg.k12.ma.us/fhs/art.html
+http://www.fitchratings.com/corporate/presentations/asia_glob_bank_conf_jun2005/pages/agenda.html
+http://www.fitfaq.com/2004/12/staying-active-keeps-mind-sharp-in-old.html
+http://www.fitfaq.com/make-time-for-exercise.html
+http://www.fitflex.com/legal_gear_methyl_1_p_review.html
+http://www.fitforpublicconsumption.com/
+http://www.fitlouisville.com/version3/fitLouisville1.asp?p=h
+http://www.fitmaternity.com/Merchant2/merchant.mvc?Screen=CTGY&Category_Code=t2
+http://www.fitness.gov/exerciseweight.html
+http://www.fitness.gov/may_month_2005/maymonth-activityideas.htm
+http://www.fitnessandkids.com/kids-diabetes.html
+http://www.fitnessav.ca/selectingvendor.aspx
+http://www.fitnessboutique.co.uk/default.asp?fonction=eng&option=cond
+http://www.fitnessgram.net/ProgDesc.htm
+http://www.fitnessinfomercialreview.com/hollywooddiet.htm
+http://www.fitnessmanagement.com/FM/tmpl/genPage.asp?p=/information/articles/library/groupex/social0501.html
+http://www.fitnessnetworkcentre.com/PRODUCTS/SHOWPRODUCT.CFM?ISBN=073604907X
+http://www.fittonbooks.com/
+http://www.fitwoman.com/testimonials.htm
+http://www.fitz-claridge.com/node.php?id=7
+http://www.fiu.edu/~mizrachs/techgnosis.html
+http://www.fivemasks.com/indie_eye002.htm
+http://www.fiveoclockclub.com/becomemember2_successStories.shtml
+http://www.fivesevensix.com/articles/2005/05
+http://www.fix.law-firm.co.uk/napier.htm
+http://www.fki.or.kr/letter/issue/0408/activity.asp
+http://www.flabar.org/tfb/TFBConsum.nsf/0/ef6bbf8e74deceaa85256b2f006c5aba?OpenDocument
+http://www.flaghouse.com/jobs.asp?Category=Athletic
+http://www.flags.net/
+http://www.flagstaffactivist.org/fan/study.phtml
+http://www.flahec.org/nfahec/chs/2001/escambia.html
+http://www.flakehq.com/rolemode.htm
+http://www.flanders-image.com/index.php?col=/news&doc=050404_New_MIPTV_05_product_A_to_Z
+http://www.flascot.com/
+http://www.flash-mx.com/news/archives/2005_03.cfm
+http://www.flashbrights.com/research.htm
+http://www.flashplayer.com/games/toprated/
+http://www.flashwebhost.com/circuit/morse_code_tutor.php
+http://www.flasolar.com/overview.htm
+http://www.flastergreenberg.com/services/fed_tax.cfm
+http://www.flat-panel-mount.com/flat_panel_arm_mount/LCD_ARM_610.htm
+http://www.flatbridge.com/inventory_management.aspx
+http://www.flatearth.com/modules.php?name=Forums&file=viewtopic&p=18681
+http://www.flatearth.com/modules.php?name=Forums&file=viewtopic&t=344&view=previous
+http://www.flatearth.com/modules.php?name=Forums&file=viewtopic&t=552
+http://www.flatline.org.uk/
+http://www.flausa.com/cms/index.php/id=149
+http://www.fleetcapital.com/resources/capeyes/a08-04-237.html
+http://www.fleetcounselor.com/
+http://www.fleetwood-trawlers.connectfree.co.uk/monument.html
+http://www.fleitkain.com/page6pub.html
+http://www.fleshbot.com/archives/deep-inside-the-alabama-sex-toy-ban-018818.php
+http://www.fleurdelis.com/coatofarms.htm
+http://www.flexibility.co.uk/flexwork/time/rostima.htm
+http://www.flexiblelearning.net.au/toolbox/series3/315.htm
+http://www.flexicose.com/flexicose-pets/
+http://www.flfairtrade.org/index.php?fuseaction=announcements.List&aCategory=Florida
+http://www.flghrwg.net/index.php?option=content&task=view&id=394&Itemid=84
+http://www.flhosp.org/services/breakchain/
+http://www.flickfilosopher.com/flickfilos/archive/2005/hidealone.shtml
+http://www.flickfilosopher.com/oscars/bestpix/englishpatient.shtml
+http://www.flickr.com/groups/topic/33020/
+http://www.flight93crash.com/flight93_heroes.html
+http://www.flight93crash.com/flight93_military_faq.html
+http://www.flightsimnetwork.com/aea/
+http://www.flightweb.com/archive/flightmed/2003/04/msg00058.html
+http://www.flinders.edu.au/?news=21
+http://www.flinders.edu.au/getconnected/dropout.htm
+http://www.flipcode.com/articles/gprimer1_issue09.shtml
+http://www.flirt.com/forums/index899.html
+http://www.flirtzone.com/testimonial%205.htm
+http://www.flll.jku.at/teaching/Pattern/pattern.html
+http://www.flll.uni-linz.ac.at/teaching/Pattern/pattern.html
+http://www.fln.vcu.edu/grimm/dorneng.html
+http://www.fln.vcu.edu/ld/ld.html
+http://www.flo-joe.co.uk/newsletter/cae/caeletter.htm
+http://www.flo.com.au/History.htm
+http://www.flong.com/parsons/thesis02002/020020926.html
+http://www.floodlight.org/theory/bofna.html
+http://www.floordaily.net/features/Feat100Man0503.htm
+http://www.floordaily.net/features/FeaturesMain.htm
+http://www.floordaily.net/newlayout/floorradioarchives.asp
+http://www.floornature.com/worldaround/articolo.php/art3/5/en/arch3
+http://www.floorpie.net/
+http://www.flopturnriver.com/phpBB2/forum/losing-15-big-bets-per-hour-in-a-fish-tank-2224.htm
+http://www.flopturnriver.com/phpBB2/viewtopic.php?t=2126
+http://www.flora.ca/russell/drafts/globe-20041111.html
+http://www.flora.org/flora.comnet-www/1570
+http://www.flora.org/homeschool-ca/faq.html
+http://www.florahealth.com/flora/home/international/products/7515.asp
+http://www.florida-actors.com/FLjobs.htm
+http://www.florida-estate.com/defence.html
+http://www.florida-inns.com/North-East/staugustine.shtml
+http://www.florida-nursing-home-abuse.com/
+http://www.floridabicycle.org/freedomfromfear.html
+http://www.floridabicycle.org/rights/takethelane.html
+http://www.floridahistory.com/inset99.html
+http://www.floridamalpractice.com/stat400.022.htm
+http://www.floridaramada.com/
+http://www.floridareenactorsonline.com/flatlakelet2000.htm
+http://www.floridasportsman.com/boating/0403_straight/index1.html
+http://www.floridasportsman.com/features/F_9706_Shot/index1.html
+http://www.floridastateparks.org/findapark.htm
+http://www.floridata.com/ref/C/cari_pap.cfm
+http://www.florin.ms/hareflorence4.html
+http://www.flounder.com/bush2.htm
+http://www.flow3d.com/Cfd-101/freesmod.htm
+http://www.flow3d.com/Cfd-101/whatyou.htm
+http://www.flowbiz.com.au/FlowBiz/Information/Procedurecharteredition.asp
+http://www.flowerscanada.com/flwrs35a/El_Mirage_Florist_Fenton_Flowers.html
+http://www.flowershopnetwork.com/search/SC/Rock%20Hill
+http://www.flowmaster.com/case_studies/general/
+http://www.flra.gov/decisions/v23/23-088-3.html
+http://www.flsenate.gov/Session/index.cfm?Mode=Bills&SubMenu=1&Tab=session&BI_Mode=ViewBillInfo&BillNum=0434
+http://www.flsenate.gov/Session/index.cfm?Mode=Bills&SubMenu=1&Tab=session&BI_Mode=ViewBillInfo&BillNum=0558
+http://www.flu.org.cn/hitscount.asp?action=newsHitsCount&link_id=591&filename=2005228257
+http://www.fluka.org/material/Fluka/sect/s014/text.html
+http://www.flutehistory.com/Players/Johann_George_Tromlitz/index.php3
+http://www.flutespirit.com/PrivateLesson/Dvorak/Largo_1a.html
+http://www.fluxion.com/?count=5
+http://www.flwi.ugent.be/AAHE/garbage.htm
+http://www.flwriters.org/
+http://www.fly.co.uk/fly/archives/2004/11/carla_marciano_-_following_in_tranes_groove.html
+http://www.fly2dc.com/db_articles/article.asp?article_id=30
+http://www.fly2neverland.com/issue11.html
+http://www.flyariana.com/history.htm
+http://www.flybournemouth.com/passenger-information/security-advice.php
+http://www.flychicago.com/doa/avi_news/doa_avi_news_pr_86.shtm
+http://www.flydealflies.com/leaderdesign.html
+http://www.flydealflies.com/strikeindicators.html
+http://www.flyernews.com/article.php?section=AE&volume=52&issue=2&artnum=01
+http://www.flyertalk.com/forum/showthread.php?t=394070
+http://www.flyethiopian.com/new/shebamiles/terms.aspx
+http://www.flyfisherman.com/international/ovscotland/
+http://www.flyfisherman.com/skills/brleadercalc/
+http://www.flyfishingforum.com/chronicles/gooddoctor/bonus_trip.htm
+http://www.flyi.com/too-travel_policies.htm
+http://www.flyingsites.co.uk/features/pylon2000.htm
+http://www.flyingsnail.com/Dahbud/rss
+http://www.flyingsnail.com/snailmain.html
+http://www.flynnfiles.com/archives/politics2005/cmon_get_happy.html
+http://www.flyoakland.com/tex/history.shtml
+http://www.flyte.biz/resources/newsletters/05/02-selling-online.html
+http://www.flyted.com/meetted/lowfare.htm?navSource=lowfare
+http://www.flywight.co.uk/news.htm
+http://www.fm.uci.edu/recycling/advantage.html
+http://www.fm1032.com.au/News.asp
+http://www.fmaint.com/
+http://www.fmc.gov/Speeches/Creel/Los%20Angeles.htm
+http://www.fmc.gov/cfr/565.htm
+http://www.fmca.com/motorhomingguide/fulltiming/features/2004/1204.asp
+http://www.fmctechnologies.com/loadingsystems/engineeredproducts/chiksantruckandrailcarloadingarms.aspx
+http://www.fme.fujitsu.com/products/displays/latestnews_4_lcd.html
+http://www.fmep.org/analysis/Robert_Malley_US_failures_under_Clinton.html
+http://www.fmep.org/analysis/wilcox_seize_the_opportunity.html
+http://www.fmglobal.com/about/facts/facts_history.asp
+http://www.fmi.org/advantage/index.cfm?fuseaction=display&article_id=977
+http://www.fmrib.ox.ac.uk/~rami/fmribplugin/
+http://www.fmrib.ox.ac.uk/~steve/susan/susan/node8.html
+http://www.fmrib.ox.ac.uk/~stuart/thesis/chapter_6/section6_4.html
+http://www.fmsbonds.com/strat_costofwaiting3ann.html
+http://www.fnal.gov/orgs/gsa/guide/v2000/WestSuburbs.html
+http://www.fnal.gov/projects/hq98/
+http://www.fnal.gov/pub/inquiring/matter/whysupport/
+http://www.fnga.org/contact.asp
+http://www.fno.org/dec99/scaffold.html
+http://www.fno.org/jun02/impact.html
+http://www.fno.org/may02/discerning.html
+http://www.fno.org/parenting/questioning3.html
+http://www.fno.org/sept00/powerpoints.html
+http://www.fno.org/sept97/online.html
+http://www.fno.org/text/grazing.html
+http://www.fnpw.com.au/enews1/textLetter.htm
+http://www.fns.usda.gov/cga/2002_Farm_Bill/special_nutrition.html
+http://www.fns.usda.gov/cga/PressReleases/2003/irradiation-qas.htm
+http://www.fns.usda.gov/fsp/rules/Memo/PRWORA/99/QandAs.htm
+http://www.fns.usda.gov/oane/MENU/Published/FoodSecurity/FSGuidesum.htm
+http://www.focalpoint.bc.ca/pages/Newsletters/Spring2000News.htm
+http://www.focalpointfires.plc.uk/
+http://www.focusas.com/Ecstasy.html
+http://www.focusas.com/ListeningSkills.html
+http://www.focusas.com/Overweight.html
+http://www.focusas.com/Programs.html
+http://www.focusas.com/Suicide.html
+http://www.focuscareer.com/women.cfm
+http://www.focusdiy.co.uk/stry/pr04&bklist=
+http://www.focusedperformance.com/
+http://www.focusedperformance.com/2003_06_01_blarch.html
+http://www.focusedperformance.com/2004_03_01_blarch.html
+http://www.focusing.org/crossing.htm
+http://www.focusing.org/fot/gendlin_imagery.html
+http://www.focusnfly.com/pages/tipsfromtom.php?selissue=5
+http://www.focusonadhd.com/about_ADHD/talking_about_ADHD.jhtml
+http://www.focusonfertility.org/insure_amicovered.htm
+http://www.focusonfertility.org/pr_holiday.htm
+http://www.focusonyourchild.com/relation/art1/A0001349.html
+http://www.focusweb.org/popups/articleswindow.php?id=437
+http://www.focuswest.org/energy/trans_efficiency.cfm
+http://www.focuswest.org/energy/trans_market.cfm
+http://www.focuswest.org/energy/trans_utilities.cfm
+http://www.fodors.com/miniguides/mgresults.cfm?destination=new_york_city@111&cur_section=fea&feature=30004
+http://www.fodors.com/miniguides/mgresults.cfm?destination=savannah@249&cur_section=fea&feature=30003
+http://www.foe.co.uk/pubsinfo/infoteam/pressrel/1997/19970403134300.html
+http://www.foe.co.uk/pubsinfo/infoteam/pressrel/2002/20020211000120.html
+http://www.foe.co.uk/pubsinfo/infoteam/pressrel/2002/20020901103634.html
+http://www.foe.co.uk/resource/briefings/wake_erika_oil_spill.html
+http://www.foe.co.uk/resource/consultation_responses/climate_change_levy_foe.html
+http://www.foe.co.uk/resource/press_releases/bba_agm_pinnochio_comes_to.html
+http://www.foe.co.uk/resource/press_releases/mps_call_for_ports_strateg.html
+http://www.foe.org.au/docs/pub_an.htm
+http://www.foe.org/new/releases/0503cornshow.html
+http://www.foeeurope.org/press/accountable_to_whom.htm
+http://www.foejapan.org/en/aid/jbic02/sondu-miriu/letter-pm01082001.htm
+http://www.foi-uk.org/hottopics.html
+http://www.foi.gov.ie/foi.nsf/0/ca7db6f848ebadb480256f33004e0af3?OpenDocument&Click=
+http://www.fol.org.au/issues/docs/focus-qld-200408.htm
+http://www.foliomag.com/
+http://www.folklore.bc.ca/Onefineday.htm
+http://www.folklore.ee/rl/pubte/ee/usund/ingl/hoppal.html
+http://www.folkways.si.edu/projects_initiatives/indonesian/liner_notes/volume15.html
+http://www.folusa.org/html/fact10.html
+http://www.folusa.org/html/fact11.html
+http://www.fonerbooks.com/q_sales.htm
+http://www.fonerbooks.com/selling.htm
+http://www.fonerbooks.com/website.htm
+http://www.fontanavillage.com/fontanavillage_activities.html
+http://www.fontcraft.com/csa/politicscomments.php?id=181_0_7_0_C
+http://www.fonterra.com/content/corporategovernance/boardoffonterra/default.jsp
+http://www.fontstuff.com/access/acctut15.htm
+http://www.fontstuff.com/access/acctut15pfv.htm
+http://www.food-irradiation.com/Trade.htm
+http://www.food.gov.uk/aboutus/ourboard/boardmeetings/board2003/boardmeeting111303/boardminutes131103
+http://www.food.gov.uk/aboutus/ourboard/boardmem/johnkrebs/riph
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/compconsulteng/additiontofoodstuffs
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/compconsulteng/allergenlabelling2004eng
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/compconsulteng/recastinfantformconsult
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completconsultscot/recastinfantformscotconsult
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completconsultwales/allergenwales
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completconsultwales/recastdirinfantwales
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completconsultwales/recastdirinfantwales?view=printerfriendly
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completedconsultni/allergenlabelling2004ni
+http://www.food.gov.uk/foodindustry/Consultations/completed_consultations/completedconsultni/recastinfformniconsult
+http://www.food.gov.uk/foodindustry/Consultations/consultni/generalfoodhyregsni
+http://www.food.gov.uk/foodindustry/guidancenotes/labelregsguidance/supplementreformguidance
+http://www.food.gov.uk/multimedia/pdfs/fsanews1
+http://www.food.gov.uk/multimedia/pdfs/fsanews6
+http://www.food.gov.uk/news/newsarchive/2002/may/
+http://www.food.gov.uk/news/newsarchive/2005/may/parared
+http://www.food.gov.uk/science/research/researchinfo/nutritionresearch/foodacceptability/n09programme/n09projectlist/
+http://www.foodbankccs.org/pages/organize-drive.html
+http://www.foodcomm.org.uk/press_junk_marketing_03.htm
+http://www.foodfirst.org/action/2003/2003-08-unorca_update.html
+http://www.foodfirst.org/node/257
+http://www.foodfirst.org/progs/anhr/wafbvol22.php
+http://www.foodfirst.org/pubs/backgrdrs/2003/sp03v9n3.html
+http://www.foodfirst.org/s01v24n82
+http://www.foodfirst.org/taxonomy/term/109
+http://www.foodinstitute.com/pressreleases.cfm
+http://www.foodlandpeople.org/coalition/license.html
+http://www.foodlandpeople.org/newsletter/spring_summer_2002.html
+http://www.foodlandpeople.org/praise/enthusiastic.html
+http://www.foodlaw.rdg.ac.uk/news/uk-00-62.htm
+http://www.foodlaw.rdg.ac.uk/news/uk-04019.htm
+http://www.foodnavigator-usa.com/nl/allNLs.asp
+http://www.foodnavigator.com/
+http://www.foodnavigator.com/news/listnews.asp?m=9&y=2001
+http://www.foodnavigator.com/news/news-ng.asp?id=51840-science-queries-soy
+http://www.foodnavigator.com/news/news-ng.asp?id=59180-costs-rise-for
+http://www.foodnavigator.com/nl/allnls.asp
+http://www.foodnavigator.com/productnews/news.asp?id=59180&k=costs-rise-for
+http://www.foodnetwork.com/food/my_recipe_box/review/0,1973,FOOD_9919_17372,00.html
+http://www.foodnotbombs.net/villagevoice.html
+http://www.foodproductdesign.com/archive/2000/0400cs.html
+http://www.foodproductdesign.com/archive/2000/0600cs.html
+http://www.foodproductdesign.com/archive/2003/0703CS.html
+http://www.foodproductdesign.com/archive/2004/0704NT.html
+http://www.foodproductdesign.com/current/0305AP.html
+http://www.foodproductdesign.com/current/0305NN.html
+http://www.foodproductdesign.com/current/0505CON.html
+http://www.foodproductiondaily.com/news/listnews.asp?m=2&y=2003
+http://www.foodproductiondaily.com/news/news-ng.asp?id=59180-costs-rise-for
+http://www.foodproductiondaily.com/nl/allNLs.asp
+http://www.foodpros.com/allsuppliers.html
+http://www.foodqualitynews.com/news/news-ng.asp?id=59180-costs-rise-for
+http://www.foodqualitynews.com/nl/allNLs.asp
+http://www.foodreference.com/html/artkitchendesign2.html
+http://www.foodreference.com/html/html/february12.html
+http://www.foodreference.com/html/vol_3_no_41_december_12__2002.html
+http://www.foodrevolution.org/becomingagrandfather.htm
+http://www.foodrevolution.org/letter.htm
+http://www.foodriskclearinghouse.umd.edu/eggs_and_egg_products_policy_actions.cfm
+http://www.foodsci.purdue.edu/news/showarticle.cfm?id=58
+http://www.foodsci.purdue.edu/news/showarticle.cfm?id=59
+http://www.foodscience.cornell.edu/Sensory/short.htm
+http://www.foodscience.unsw.edu.au/study/food2490.html
+http://www.foodsciencebureau.com.au/media/media001.htm
+http://www.foodsecurity.org/f2cconf2005.html
+http://www.foodshare.net/toolbox_month09.htm
+http://www.foodsiteoftheday.com/previousitesf.htm
+http://www.foodstuffireland.com/foodfeatures/article.php?id=46
+http://www.foodtimeline.org/food2.html
+http://www.foodwatch.com.au/energy.html
+http://www.fool.com/
+http://www.fool.com/CashKing/CashKingPortStep1.htm
+http://www.fool.com/Iomega/1998/Iomega980227.htm
+http://www.fool.com/News/mft/2005/mft05012420.htm
+http://www.fool.com/News/mft/2005/mft05060811.htm?source=eptyholnk303100&logvisit=y&npu=y
+http://www.fool.com/News/mft/2005/mft05062314.htm
+http://www.fool.com/boringport/2000/boringport000228.htm
+http://www.fool.com/foolish8/2001/foolish8010904.htm
+http://www.fool.com/news/commentary/2003/commentary030822wt.htm
+http://www.fool.com/news/commentary/2004/commentary04081304.htm
+http://www.fool.com/news/commentary/2005/commentary05010502.htm
+http://www.fool.com/news/commentary/2005/commentary05010701.htm
+http://www.fool.com/news/commentary/2005/commentary05011301.htm
+http://www.fool.com/news/commentary/2005/commentary05011402.htm
+http://www.fool.com/news/commentary/2005/commentary05020403.htm?source=eptyholnk303100&logvisit=y&npu=y
+http://www.fool.com/news/commentary/2005/commentary05050207.htm
+http://www.fool.com/news/take/2004/take040416.htm
+http://www.fool.com/news/take/2004/take040802.htm
+http://www.fool.com/portfolios/RuleMaker/2002/rulemaker020605.htm
+http://www.fool.com/portfolios/rulebreaker/2000/rulebreaker000724.htm
+http://www.fool.com/portfolios/rulebreaker/2000/rulebreaker001016.htm
+http://www.fool.com/portfolios/rulebreaker/2002/rulebreaker021029.htm
+http://www.fool.com/portfolios/rulemaker/1999/rulemaker990514.htm
+http://www.fool.com/portfolios/rulemaker/2002/rulemaker020605.htm
+http://www.fool.com/savings/shortterm/01.htm?source=PFinAg
+http://www.fool.com/school/Glossary/glossary.htm?source=PFinAg
+http://www.fool.com/school/taxes/taxes10.htm
+http://www.fool.com/specials/2000/sp000523a.htm
+http://www.fool.com/taxes/2000/taxes000526.htm
+http://www.fool.com/taxes/2003/taxes030131.htm
+http://www.foosballstore.com/
+http://www.football.co.uk/aston_villa/match_reports/story_8194.shtml
+http://www.football.co.uk/football_features/story_11658.shtml
+http://www.football.co.uk/manchester_united/match_reports/story_8194.shtml
+http://www.footballasia.com/en/comps/afcu17/index.asp?id=36854&cid=1149&mth=9&yr=2004
+http://www.footballculture.net/players/feat_women.html
+http://www.footballculture.net/youron/gender_history.html
+http://www.footballfanatics.com/HTMLPages/root/NHL/PhiladelphiaFlyers.html
+http://www.footcaremd.com/gf_footwear.html
+http://www.foothill.edu/news/releases/asianevents2004.html
+http://www.footprints-inthe-sand.com/LettersPage.htm
+http://www.footprintsrecruiting.com/content.php?cat=317&sc=15
+http://www.footprintsrecruiting.com/content.php?cat=339&sc=24
+http://www.footstepstothepast.com/page_15.cfm
+http://www.footstompin.com/artists/edinburgh_military_tattoo
+http://www.footstompin.com/forum?threadid=27967
+http://www.footy4kids.co.uk/Soccer%20injuries%20and%20how%20to%20treat%20them.htm
+http://www.footysa.com/article.php?sid=1008
+http://www.for.gov.bc.ca/his/isis/mlsedt/
+http://www.for.gov.bc.ca/protect/FAQ/behaviour.htm
+http://www.for.gov.bc.ca/tasb/legsregs/fpc/fpcguide/defoliat/chap3.htm
+http://www.forbes.com/
+http://www.forbes.com/2000/10/20/1020simons_print.html
+http://www.forbes.com/2001/10/04/1004short.html
+http://www.forbes.com/2002/05/04/0504hires.html
+http://www.forbes.com/2002/10/17/1017feat.html
+http://www.forbes.com/2002/10/25/cx_bs_1025home.html
+http://www.forbes.com/2003/08/06/cx_kf_0806suite.html
+http://www.forbes.com/2003/08/26/cx_mf_0826vow.html
+http://www.forbes.com/2003/10/07/cx_jf_1007flint.html
+http://www.forbes.com/2003/10/08/cz_af_1008health.html
+http://www.forbes.com/2003/10/30/cx_aw_1030economy.html
+http://www.forbes.com/2004/06/14/0614automarketscan05.html
+http://www.forbes.com/2004/09/27/cz_sk_0927test.html
+http://www.forbes.com/2004/10/15/cx_gl_1015faceweek.html
+http://www.forbes.com/2004/10/20/cx_ab_1020video3_print.html
+http://www.forbes.com/asap/2002/0624/076_print.html
+http://www.forbes.com/associatedpress/feeds/ap/2005/01/13/ap1757130.html
+http://www.forbes.com/associatedpress/feeds/ap/2005/01/19/ap1767986.html
+http://www.forbes.com/associatedpress/feeds/ap/2005/01/19/ap1768188.html
+http://www.forbes.com/business/healthcare/2005/06/03/0603automarketscan07.html
+http://www.forbes.com/businesswire/feeds/businesswire/2005/01/26/businesswire20050126005893r1.html
+http://www.forbes.com/businesswire/feeds/businesswire/2005/02/04/businesswire20050204005056r1.html
+http://www.forbes.com/columnists/free_forbes/2003/1006/037.html
+http://www.forbes.com/finance/2005/02/04/cz_jd_0204watch.html
+http://www.forbes.com/forbes/2001/1029/076.html
+http://www.forbes.com/forbes/2002/0415/056.html
+http://www.forbes.com/free_forbes/2005/0110/142.html
+http://www.forbes.com/global/2002/0204/060_print.html
+http://www.forbes.com/global/2002/1111/044.html
+http://www.forbes.com/global/2003/0414/044.html
+http://www.forbes.com/global/2004/0920/029_print.html
+http://www.forbes.com/home/feeds/afx/2005/06/13/afx2089378.html
+http://www.forbes.com/home_asia/economy/2005/06/01/cx_pm_0602europe.html
+http://www.forbes.com/investmentnewsletters/2004/11/10/cz_jd_1110gurusow.html
+http://www.forbes.com/markets/2004/10/20/cx_ab_1020video3.html
+http://www.forbes.com/markets/2005/01/19/cx_pk_0119eyeonstocks.html
+http://www.forbes.com/markets/2005/01/20/cx_pk_0120eyeonstocks.html
+http://www.forbes.com/markets/2005/02/01/cx_pk_0201splosers.html
+http://www.forbes.com/markets/2005/04/06/cx_pk_0406eyeonstocks.html
+http://www.forbes.com/markets/feeds/ap/2005/06/20/ap2101053.html
+http://www.forbes.com/prnewswire/feeds/prnewswire/2005/01/05/prnewswire200501051057PR_NEWS_B_NET_PH_PHW022.html
+http://www.forbes.com/prnewswire/feeds/prnewswire/2005/01/24/prnewswire200501240100PR_NEWS_B_GBL_HS_UKF014.html
+http://www.forbes.com/prnewswire/feeds/prnewswire/2005/06/20/prnewswire200506201202PR_NEWS_B_MWT_CG_CGM032.html
+http://www.forbes.com/taxes/
+http://www.forbes.com/technology/2005/06/02/cz_qh_0602pillar.html
+http://www.forbes.com/work/feeds/ap/2005/01/19/ap1767986.html
+http://www.forbes.com/work/management/2004/09/10/0910gkbook.html
+http://www.forbeslibrary.org/about/meetings/04-02-16.html
+http://www.forcedmigration.org/about-us.htm
+http://www.forcedmigration.org/faq/
+http://www.forcedmigration.org/papers/
+http://www.forcedmigration.org/webguide/text/1.htm
+http://www.forces.ca/dgcb/educat/howto/engraph/howto16_e.asp?flag=Go
+http://www.forces.gc.ca/admmat/dglepm/wes/questions_e.html
+http://www.forces.gc.ca/hr/scondva/engraph/2001acc_e.asp?cat=1
+http://www.forces.gc.ca/site/Reports/dps/index_e.asp
+http://www.forces.gc.ca/site/community/MapleLeaf/html_files/html_view_e.asp?page=vol6-28p6-7
+http://www.forces.gc.ca/site/community/MapleLeaf/html_files/html_view_e.asp?page=vol8-24army
+http://www.forces.gc.ca/site/newsroom/view_news_e.asp?id=1285
+http://www.forces.gc.ca/site/newsroom/view_news_e.asp?id=1604
+http://www.forces.gc.ca/site/newsroom/view_news_e.asp?id=1670
+http://www.forces.gc.ca/site/newsroom/view_news_e.asp?id=52
+http://www.forces.gc.ca/site/newsroom/view_news_f.asp?id=52
+http://www.forces.org/
+http://www.forces.org/evidence/colby/b-chap6.htm
+http://www.forces.org/writers/hatton/files/talking.htm
+http://www.forces.org/writers/james/files/cigar.htm
+http://www.forces.org/writers/james/leavcorn.htm
+http://www.ford.utexas.edu/grf/bbfbio.htm
+http://www.fordfound.org/news/view_news_detail.cfm?news_index=14
+http://www.fordfound.org/news/view_news_detail.cfm?news_index=14&print_version=1
+http://www.fordham.edu/Academics/Academic_Resources/Middle_States_Accred/Middle_States_Charge_15961.html
+http://www.fordham.edu/Academics/Colleges__Graduate_S/Graduate__Profession/Arts__Sciences/Admissions/FAQ_6515.html
+http://www.fordham.edu/economics/vinod/ehr05.htm
+http://www.fordham.edu/halsall/ancient/1650nesilim.html
+http://www.fordham.edu/halsall/byzantium/
+http://www.fordham.edu/halsall/catholic_sources.html
+http://www.fordham.edu/halsall/courses.html
+http://www.fordham.edu/halsall/india/1870-monier-parsees.html
+http://www.fordham.edu/halsall/jewish/1182-jewsfrance1.html
+http://www.fordham.edu/halsall/medweb/links.htm
+http://www.fordham.edu/halsall/mod/1415janhus.html
+http://www.fordham.edu/halsall/mod/1650bradford.html
+http://www.fordham.edu/halsall/mod/1690locke-sel.html
+http://www.fordham.edu/halsall/mod/1777burney-maoris.html
+http://www.fordham.edu/halsall/mod/1798jenner-vacc.html
+http://www.fordham.edu/halsall/mod/1859Faraday-forces.html
+http://www.fordham.edu/halsall/mod/1865helmholtz-ice.html
+http://www.fordham.edu/halsall/mod/1880huxley-scicult.html
+http://www.fordham.edu/halsall/mod/1905portarthur.html
+http://www.fordham.edu/halsall/mod/1945YALTA.html
+http://www.fordham.edu/halsall/mod/1950-korea-un1.html
+http://www.fordham.edu/halsall/mod/1963Kennedy-peacestrat.html
+http://www.fordham.edu/halsall/mod/hs1000.html
+http://www.fordham.edu/halsall/mod/modsbook3.html
+http://www.fordham.edu/halsall/mod/modsbook45.html
+http://www.fordham.edu/halsall/mod/nightingale-rural.html
+http://www.fordham.edu/halsall/sbook.html
+http://www.fordham.edu/halsall/source/froissart1.html
+http://www.fordham.edu/halsall/source/naprous.html
+http://www.fordham.edu/halsall/source/stlouis1.html
+http://www.fordham.edu/middlestates/Charges.htm
+http://www.fordracingparts.com/announcements/jacksonsupercharger.asp
+http://www.foreclosures.com/pages/gurus_to_avoid.asp?gID=49
+http://www.forefieldkt.com/KT/trns.aspx?xd=ED-FQ-0001-044&il=ba&xsl=content
+http://www.foreignaffairs.gov.ie/information/publications/roc/iii.asp
+http://www.foreignaffairs.org/19930201faessay5924/m-graeme-bannerman/arabs-and-israelis-slow-walk-toward-peace.html
+http://www.foreignaffairs.org/19940101fareviewessay8557/robin-w-winks/the-great-wo-man-theory-of-history.html
+http://www.foreignaffairs.org/20020701fareviewessay8528/barry-eichengreen/the-globalization-wars-an-economist-reports-from-the-front-lines.html
+http://www.foreignaffairs.org/20020701fareviewessay8528/barry-eichengreen/the-globalization-wars-an-economist-reports-from-the-front-lines.html?mode=print
+http://www.foreignaffairs.org/20030501faessay11217-p30/michael-j-glennon/why-the-security-council-failed.html
+http://www.foreignaffairs.org/20030501faessay11217-p40/michael-j-glennon/why-the-security-council-failed.html
+http://www.foreignaffairs.org/20040301faessay83204-p10/andrei-shleifer-daniel-treisman/a-normal-country.html
+http://www.foreignaffairs.org/20040701facomment83401/james-f-hoge-jr/a-global-power-shift-in-the-making.html
+http://www.foreignaffairs.org/20040701faessay83404-p30/john-browne/beyond-kyoto.html
+http://www.foreignaffairs.org/20050101faessay84109/selig-s-harrison/did-north-korea-cheat.html
+http://www.foreignaffairs.org/20050101faresponse84116/robert-kagan/a-matter-of-record.html
+http://www.foreignaffairs.org/20050301faresponse84214/mitchell-b-reiss-robert-gallucci/red-handed.html
+http://www.foreignaffairs.org/background/terrorism
+http://www.foreignborn.com/self-help/banking/
+http://www.foreignborn.com/self-help/banking/5-acct_features.htm
+http://www.foreignminister.gov.au/parlsec/speeches/ps_oyster_020510.html
+http://www.foreignminister.gov.au/speeches/2005/050211_3rd_aust_japan_conf.html
+http://www.foreignpolicy.com/redirect/5417.php
+http://www.foreignword.com/Technology/art/Gross/gross91.htm
+http://www.foremostboaters.com/safety/water_safety.htm
+http://www.foremostonline.co.uk/leaderboard/
+http://www.forensicfocusmag.com/articles/3b1feat2.html
+http://www.forerunner.com/theonomy/conopening.htm
+http://www.foreseeresults.com/Press_OnlineExperience.html
+http://www.foresight.org/EOC/EOC_Chapter_6.html
+http://www.foresight.org/Nanomedicine/SayAh/
+http://www.foresight.org/SciAmDebate/Round3.html
+http://www.foresight.org/Updates/Update17/Update17.5.html
+http://www.foresight.org/about/Bennett.html
+http://www.foresight.org/impact/impossible.html
+http://www.forest.nsw.gov.au/publication/forest_facts/forest_types/default.asp
+http://www.forester.net/ecm_0403_saving.html
+http://www.forestethics.org/article.php?id=1036
+http://www.foresthomes.org.uk/what.html
+http://www.forestnet.com/archives/June_00/roadbuilding.htm
+http://www.forestprod.org/shop/
+http://www.forestry.gov.uk/forestry/infd-5r2cyv
+http://www.forestry.gov.uk/newsrele.nsf/0/9cd50786ee1ede4680256cc90035945c?OpenDocument
+http://www.forestryscotland.com/pages/displaypressrelease.asp?pr=141&loc=latest&home=true
+http://www.forests.org/articles/reader.asp?linkid=37802
+http://www.forestsmonitor.org/reports/highstakes/part2a.htm
+http://www.forestsolutions.ca/articles/041402.htm
+http://www.forestview.dpsnc.net/~forringe/classroomplan.html
+http://www.forex-business.com/glossary.htm
+http://www.forexmillionaire.com/
+http://www.forexnews.com/na/default.asp
+http://www.forfas.ie/news.asp?page_id=218
+http://www.forfas.ie/news.asp?page_id=224
+http://www.forgiver.net/anger.htm
+http://www.forgottenfutures.com/game/ff9/peril/peril06.htm
+http://www.forgottenfutures.com/game/ff9/peril/peril28.htm
+http://www.forio.com/facevalue20010531.htm
+http://www.forkncork.com/content/showthread.php?threadid=72&goto=newpost
+http://www.forministry.com/USNHUCOFCMVCCM
+http://www.forministry.com/vsItemDisplay.dsp&objectID=DFAF4839-994D-4E51-940C199C89AD1C35&method=display&templateID=C3435351-D45C-4B52-867A3F794D1CD85C
+http://www.formrunner.com/frundocs/callprgz.html
+http://www.formula1.com/insight/technicalinfo/11/1421.html
+http://www.formulasystems.com/press/2000/pr100200a.htm
+http://www.forparentsbyparents.com/inter_quotes.html
+http://www.forschung3r.ch/de/publications/bu22.html
+http://www.forschung3r.ch/en/publications/bu22.html
+http://www.forschung3r.ch/fr/publications/bu22.html
+http://www.forsythe.com/Forsythe/pressroombyline.do
+http://www.fortbraggnc.com/info/calendar_instep.php
+http://www.forthoodausa.org/adopt.html
+http://www.fortliberty.org/military-library/nuclear-war.shtml
+http://www.fortnight.org/SUPPS/SUPP_393_01.htm
+http://www.fortressalarms.com/products.html
+http://www.fortune.com/
+http://www.fortune.com/fortune/author_archive?authorname=Julia%20Boorstin&column_id=1&year=2005
+http://www.fortune.com/fortune/author_archive?authorname=Julia%20Boorstin&column_id=21&year=2005
+http://www.fortune.com/fortune/author_archive?authorname=Julia%20Boorstin&column_id=66&year=2005
+http://www.fortune.com/fortune/author_archive?authorname=Julia%20Boorstin&column_id=7&year=2005
+http://www.fortune.com/fortune/smallbusiness/articles/0,15114,1008826,00.html
+http://www.fortune.com/fortune/smallbusiness/managing/articles/0,15114,614421,00.html
+http://www.fortune.com/fortune/smallbusiness/technology/articles/0,15114,1062892-1,00.html
+http://www.fortune.com/fortune/streetlife/archive?year=2005&column_id=21&pub_id=6
+http://www.fortune.com/fortune/technology/articles/0,15114,1011763,00.html
+http://www.fortunechildbooks.com/objector.htm
+http://www.fortunecity.com/bally/durrus/153/gramex10.html
+http://www.fortunecity.com/greenfield/ecolodge/25/yearinlife.htm
+http://www.fortunecity.com/healthclub/cpr/798/paula.htm
+http://www.fortunecity.com/meltingpot/old/431/megan.html
+http://www.fortunecity.com/meltingpot/portland/971/contact.htm
+http://www.fortunecity.com/tatooine/niven/142/talentpo/tp16.html
+http://www.fortunecity.com/tinpan/morrison/794/beyonce.html
+http://www.fortunecity.com/tinpan/morrison/794/redhotchillipeppers.html
+http://www.fortwayne.com/mld/beaconjournal/news/local/states/ohio/counties/summit_county/
+http://www.fortwayne.com/mld/newssentinel/news/editorial/8136223.htm?template=contentModules/printstory.jsp
+http://www.fortworthisd.org/departments/jrotc/hs_jrotc.html
+http://www.forum-global.de/soc/bibliot/comte/comtepositivephilosophy.htm
+http://www.forum.nokia.com/main/0,,010_20_10-Platform-40-6,00.html
+http://www.forum.nokia.com/main/0,,015-empty-empty-9,00.html
+http://www.forum.nokia.com/main/0,,0155-empty-empty-9,00.html
+http://www.forum.nokia.com/main/0,6566,050,00.html
+http://www.forum.psoft.net/showthread.php?p=10568
+http://www.forum18.org/Archive.php?article_id=590
+http://www.forum4designers.com/message180018.html
+http://www.forumasia.org/about/mission.shtml
+http://www.forumoneurope.ie/index.asp?locID=45&docID=614
+http://www.forumplanet.com/planethalflife/topic.asp?fid=2348&tid=1590185
+http://www.forums.improvingsex.com/ubb/Forum8/HTML/000047.html
+http://www.forums.woodnet.net/ubbthreads/showflat.php?Cat=&Number=1275925&page=0&view=collapsed&sb=7&o=
+http://www.forusa.org/programs/colombia/col-pp-update-1104-N.html
+http://www.forusa.org/programs/rej/letters-congress.html
+http://www.forward.com/articles/3392
+http://www.forwarderlaw.com/archive/arch2.htm
+http://www.fosterstudio.co.uk/restoration.htm
+http://www.fostertravel.com/FLMIAM.html
+http://www.fotf.ca/familyfacts/issues/sexeducation/resources.html
+http://www.fotofo.sk/imago/16/czech.htm
+http://www.fotojones.com/onassignment/calendar/oa_info.html
+http://www.fotosbyfrank.com/michele/tips.html
+http://www.fotosearch.com/DGV491/1315023/
+http://www.fotosearch.com/EYW246/uli_028/
+http://www.fotosearch.com/IGS233/is099-008/
+http://www.fotosearch.com/IGS233/is099-017/
+http://www.fotosearch.com/IGS233/is099-033/
+http://www.fotosearch.com/IGS233/is099-036/
+http://www.fotosearch.com/MDG215/833022/
+http://www.fotosearch.com/PDS518/200029134-001/
+http://www.fotosearch.com/PHD354/ss38023/
+http://www.fotosearch.com/RLF114/sh_omsr_25/
+http://www.fotw.us/flags/au-new.html
+http://www.foundationnews.org/CME/article.cfm?id=1418&issueID=1406&authByte=1034&profileID=160129
+http://www.founders.org/library/polity/mohler.htm
+http://www.foundersfcu.com/terms.cfm
+http://www.foundlocally.com/Halifax/Communications/TradeShowImpact.htm
+http://www.foundlocally.com/Rockies/Communications/TradeShowImpact.htm
+http://www.foundmagazine.com/events.html
+http://www.foundrymusic.com/bands/websites.cfm/div/bands/page/bands_websites.html
+http://www.fountaincourt.co.uk/members/m_mclaren.htm
+http://www.fountaingateway.com/Christmas/christmasdira.html
+http://www.fourfoldhealing.com/Printable%20Sample_menus.htm
+http://www.fourfoldhealing.com/Sample_Menus.htm
+http://www.fourgates.com/ghost.asp
+http://www.fourhourday.org/city_paper_article.htm
+http://www.fourmilab.ch/francais/lfrench.html
+http://www.fourmilab.ch/gravitation/orbits/
+http://www.fourmilab.ch/hackdiet/www/subsection1_2_3_0_4.html
+http://www.fourthfreedom.org/Applications/cms.php?page_id=29
+http://www.fourthfreedom.org/Applications/cms.php?page_id=65
+http://www.fourthworld.com/embassy/articles/netapps.html
+http://www.fourwheeldrive.co.za/constitution.htm
+http://www.fourwinds10.com/NESARA/news/2003/09H-11-15-03-what-is-happening-to-our-world.html
+http://www.fox-dreams.com/art/renaissance/kilt.html
+http://www.fox-hills.com/rates_and_packages/
+http://www.fox11az.com/news/local/stories/KMSB-20050622-dsbp-schwartz.35239899.html
+http://www.fox21.com/Global/story.asp?S=2803892&nav=2KPpV9BW
+http://www.fox23news.com/
+http://www.fox30online.com/news/local/story.aspx?content_id=E1FA5E04-CE78-4B77-AEAA-25F98D140296
+http://www.fox41.com/terms.asp
+http://www.foxesonidol.com/cgi-bin/ae.pl?mode=1&article=article1666.art&page=1
+http://www.foxesonidol.com/cgi-bin/ae.pl?mode=1&article=article1738.art&page=1
+http://www.foxinternet.co.uk/
+http://www.foxlawson.com/job_evaluationsPT2.html
+http://www.foxnews.com/story/0,2933,101051,00.html
+http://www.foxnews.com/story/0,2933,105706,00.html
+http://www.foxnews.com/story/0,2933,106198,00.html
+http://www.foxnews.com/story/0,2933,107274,00.html
+http://www.foxnews.com/story/0,2933,107815,00.html
+http://www.foxnews.com/story/0,2933,109441,00.html
+http://www.foxnews.com/story/0,2933,109674,00.html
+http://www.foxnews.com/story/0,2933,115605,00.html
+http://www.foxnews.com/story/0,2933,115682,00.html
+http://www.foxnews.com/story/0,2933,116497,00.html
+http://www.foxnews.com/story/0,2933,130081,00.html
+http://www.foxnews.com/story/0,2933,134978,00.html
+http://www.foxnews.com/story/0,2933,136321,00.html
+http://www.foxnews.com/story/0,2933,138948,00.html
+http://www.foxnews.com/story/0,2933,139208,00.html
+http://www.foxnews.com/story/0,2933,140371,00.html
+http://www.foxnews.com/story/0,2933,140970,00.html
+http://www.foxnews.com/story/0,2933,141073,00.html
+http://www.foxnews.com/story/0,2933,141777,00.html
+http://www.foxnews.com/story/0,2933,143208,00.html
+http://www.foxnews.com/story/0,2933,145449,00.html
+http://www.foxnews.com/story/0,2933,146546,00.html
+http://www.foxnews.com/story/0,2933,146656,00.html
+http://www.foxnews.com/story/0,2933,148775,00.html
+http://www.foxnews.com/story/0,2933,150957,00.html
+http://www.foxnews.com/story/0,2933,152015,00.html
+http://www.foxnews.com/story/0,2933,152020,00.html
+http://www.foxnews.com/story/0,2933,152613,00.html
+http://www.foxnews.com/story/0,2933,157098,00.html
+http://www.foxnews.com/story/0,2933,157537,00.html
+http://www.foxnews.com/story/0,2933,158010,00.html
+http://www.foxnews.com/story/0,2933,158014,00.html
+http://www.foxnews.com/story/0,2933,158166,00.html
+http://www.foxnews.com/story/0,2933,158795,00.html
+http://www.foxnews.com/story/0,2933,159952,00.html
+http://www.foxnews.com/story/0,2933,160755,00.html
+http://www.foxnews.com/story/0,2933,26758,00.html
+http://www.foxnews.com/story/0,2933,46020,00.html
+http://www.foxnews.com/story/0,2933,54478,00.html
+http://www.foxnews.com/story/0,2933,55304,00.html
+http://www.foxnews.com/story/0,2933,59474,00.html
+http://www.foxnews.com/story/0,2933,62992,00.html
+http://www.foxnews.com/story/0,2933,66649,00.html
+http://www.foxnews.com/story/0,2933,76443,00.html
+http://www.foxnews.com/story/0,2933,96109,00.html
+http://www.foxnews.com/story/0,2933,96797,00.html
+http://www.foxnews.com/story/0,2933,98228,00.html
+http://www.foxriverwatch.com/monsanto2a_pcb_pcbs.html
+http://www.foxsearchlight.com/weekendread/
+http://www.foxtel.com.au/209_1264.htm
+http://www.foxtel.com.au/236_377.htm
+http://www.foxtel.com.au/748.htm
+http://www.foxx-industries.com/2300ad/pbemmain.htm
+http://www.foycwidows-widowers.com/we_would_like_to_devote_this_pag.htm
+http://www.fpa-apff.com/constitution.htm
+http://www.fpa.org/topics_info2414/topics_info_show.htm?doc_id=195939
+http://www.fpanet.org/journal/articles/2004_Issues/jfp0404-art1.cfm
+http://www.fpanet.org/journal/articles/index.cfm
+http://www.fpanet.org/member/meetings/online_education/Library/04_14_2004.cfm
+http://www.fpc.org.uk/articles/160
+http://www.fpc.org.uk/articles/184
+http://www.fpc.org.uk/articles/240
+http://www.fpc.org.uk/topics/energy/
+http://www.fpch.org/hollywoodpulpit.org/sermon990117.html
+http://www.fpcnyc.org/volunteer-first.html
+http://www.fpcu.org/loans_improveCredit.asp
+http://www.fpd.finop.umn.edu/groups/ppd/documents/FAQ/InvestmentsFAQ.cfm
+http://www.fpef.org/teacher_resources/teachers_resources.htm
+http://www.fpf.duke.edu/diagnose.html
+http://www.fpg.unc.edu/~ecers/iterscomparison_frame.html
+http://www.fpg.unc.edu/~ncedl/pages/project_summary.cfm?studyid=7
+http://www.fpif.org/briefs/vol6/v6n19defense_body.html
+http://www.fpif.org/papers/03petropol/politics.html
+http://www.fpif.org/papers/0506cafta.html
+http://www.fpl.fs.fed.us/pressroom/newsreleases/filters.htm
+http://www.fplc.edu/risk/vol5/spring/cookdeeg.htm
+http://www.fpm.iastate.edu/recycling/WPDAYS.asp
+http://www.fpml.org/documents/working-papers/standards-c/rules-of-operation.asp
+http://www.fpmt-osel.org/teachings/daily.htm
+http://www.fpp.co.uk/online/02/12/SMH031202.html
+http://www.fprado.com/armorsite/chall2.htm
+http://www.fpri.org/enotes/20040206.middleeast.inbar.israeliperspective.html
+http://www.fpri.org/footnotes/087.200312.ellington.japaneseeducation.html
+http://www.fpri.org/fpriwire/1201.200401.pollack.aftersaddam.html
+http://www.fpri.org/ww/0505.200407.eberstadt.demography.html
+http://www.fpri.org/ww/0508.200410.weaver.europeperfectunion.html
+http://www.fr.com/practice/trade.cfm?child=trade
+http://www.frac.org/html/news/newsdigest/06.19.05.html
+http://www.fractalus.com/gumbycat/lesson2.html
+http://www.fractiles.com/frusers.html
+http://www.fradical.com/Articles_on_Donald_Smith_trial.htm
+http://www.fralippolippi.com/history.htm
+http://www.framtak.com/info/oil.html
+http://www.france-hotel-guide.com/nocommissioneng.htm
+http://www.france.co.nz/personal/children.html
+http://www.francemagazine.org/articles/issue69/article88.asp?issue_id=69&article_id=88
+http://www.francemonthly.com/n/0303/index.php
+http://www.franceonfoot.com/up-index.htm
+http://www.franchise.primroseschools.com/franchise/opportunities/management.asp
+http://www.franchiseadvantage.com/franchises/franchise_health.ihtml
+http://www.franchiseadvantage.com/franchises/l2_weight_loss_franchise.ihtml
+http://www.franchiseregistry.com/Registry/
+http://www.francineyork.com/
+http://www.francisbennion.com/pages/02/05/03/02/03/06chapter.htm
+http://www.franco-scottish.org.uk/
+http://www.franconiaminerals.com/s/SanFrancisco.asp
+http://www.frankecampbell.com/monuments.asp
+http://www.frankfordhospitals.org/wellness/article6597.html
+http://www.franklin.com/pressroom/news/arch00/000106_a.asp
+http://www.franklincovey.com/foryou/articles/seven.html
+http://www.franklinhills.org/bodyshop.html
+http://www.franklintempleton.com/retail/jsp_cm/corp/articles/education/fund_basic/fb_asset_allocation.jsp
+http://www.franksreelreviews.com/reviews/spacestation3d.htm
+http://www.franksreelreviews.com/shorttakes/reelrant/franksrant0703.htm
+http://www.frankston.com/public/essays/EncryptedIPV6.asp
+http://www.fraserinstitute.ca/shared/readmore.asp?sNav=pb&id=178
+http://www.fraserinstitute.org/shared/readmore.asp?sNav=pb&id=604
+http://www.fraterslibertas.com/2003_10_01_archive.html
+http://www.fraterslibertas.com/2004_01_01_archive.html
+http://www.fraudsandscams.com/pyramid.htm
+http://www.fraudulenttransfers.com/1997_WI_1182.htm
+http://www.frbsf.org/federalreserve/careers/benefits.html
+http://www.frc.org/get.cfm?i=PL05B01
+http://www.freaksforum.com/ubb/ultimatebb.php/topic/34/86.html
+http://www.freba.com/
+http://www.fred.net/tzaka/two.html
+http://www.frederickdouglass.org/morsell_bio.html
+http://www.fredericksburg.com/News/FLS/2005/012005/01092005/1627908
+http://www.frederictonfirefighters.ca/museum/stmarysfire.htm
+http://www.fredgarbo.com/guestbook.php
+http://www.fredlaw.com/articles/corporate/corp_0207_js.html
+http://www.fredmiranda.com/reviews/showproduct.php?product=112&sort=7&cat=28&page=1
+http://www.fredoneverything.net/Dating.shtml
+http://www.fredschoeneman.com/archives/000737.html
+http://www.fredsplace.org/
+http://www.free-eco.org/agendas/agenda_seminar_judges_july9_2002.html
+http://www.free-essays.us/dbase/b7/ena70.shtml
+http://www.free-essays.us/dbase/c9/kfw217.shtml
+http://www.free-for-recruiters.com/Resumes/MN/1309528-Resume.html
+http://www.free-minds.org/articles/gods_system/mumin.htm
+http://www.free-n-cool.com/contca18.html
+http://www.free-n-cool.com/contcana.html
+http://www.free-n-cool.com/contlt18.html
+http://www.free-resume-tips.com/10tips.html
+http://www.free-smile.com/
+http://www.free-stay.com/html/hospitality_exchange_experienc.html
+http://www.freeanwar.com/index3.htm
+http://www.freeanwar.net/news/Budi_Report.html
+http://www.freearabvoice.org/Iraq/Report/report108.htm
+http://www.freearabvoice.org/Iraq/Report/report25.htm
+http://www.freebsd.org/doc/en_US.ISO8859-1/articles/committers-guide/ports.html
+http://www.freebsd.org/doc/en_US.ISO8859-1/articles/java-tomcat/x59.html
+http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/x86-environment.html
+http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html
+http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/x-understanding.html
+http://www.freecarve.com/gen_tab2.asp?CatID=19
+http://www.freechild.org/ReadingList/reviews/walking.htm
+http://www.freecolorado.com/2005/01/blue77.html
+http://www.freecolorprinters.com/fcp_printer_supplies.cfm
+http://www.freeconference.com/NewsChicagoTribuneAug2004.asp
+http://www.freedieting.com/weight_loss_articles.htm
+http://www.freedive.net/ibsrc/fish_pgs/greater_amb.htm
+http://www.freedom-in-education.co.uk/school/dyslexia.htm
+http://www.freedom-of-information.de/info_berlin/acts/ifg_01_en.htm
+http://www.freedom-to-tinker.com/archives/000573.html
+http://www.freedomdogs.com/
+http://www.freedomdomain.com/concamps/fema01.html
+http://www.freedomdomain.com/ufo/hoagland01.html
+http://www.freedomfiles.org/war/ireland/nireland.htm
+http://www.freedomforum.org/templates/document.asp?documentID=14129
+http://www.freedomforum.org/templates/document.asp?documentID=17869
+http://www.freedomforum.org/templates/document.asp?documentID=17869&printerfriendly=1
+http://www.freedomfromfear.com/genanxiety.asp
+http://www.freedomhall.com/weddingpackages.html
+http://www.freedomofmind.com/resourcecenter/groups/m/moonies/moonies_in_Japan.htm
+http://www.freedomofthought.com/archives/001439.php
+http://www.freedomroad.org/antiwar_statement_102003.html
+http://www.freedomsite.org/cfirc/news/canada_first_on_land_claims.html
+http://www.freedomworks.org/informed/issues_template.php?issue_id=2055
+http://www.freedomworks.org/informed/issues_template.php?issue_id=2163
+http://www.freedomworks.org/informed/issues_template.php?issue_id=683
+http://www.freedomworks.org/informed/issues_template.php?issue_id=684
+http://www.freedomworks.org/informed/issues_template.php?issue_id=926
+http://www.freedomworks.org/processor/printer.php?issue_id=2099
+http://www.freedomyou.com/mil/Seeking%20God's%20Will.htm
+http://www.freedomyou.com/nutrition_book/Let's%20Eat.htm
+http://www.freedownloadscenter.com/Business/MS_Office_Add-ins/ACT_To_Outlook_Convert.html
+http://www.freehi.com/newmain/how2a.html
+http://www.freehills.com/CA256AD900137BAA/page/Listing-acl-Playing+Complex+Games+With+Competition+Policy0002BC8A
+http://www.freeinfosociety.com/computers/coprocessors.html
+http://www.freeinfosociety.com/computers/dostechnical.html
+http://www.freeinfosociety.com/misc/artofsniping.htm
+http://www.freelanceworkexchange.com/find-work.html
+http://www.freelebanon.org/
+http://www.freemaninstitute.com/crazy.htm
+http://www.freemars.org/filk/crackityourself.html
+http://www.freemasonrywatch.org/1index.html
+http://www.freemasonrywatch.org/cardinallaw.html
+http://www.freemasons-freemasonry.com/apikeintro.html
+http://www.freemasons-freemasonry.com/claudy2.html
+http://www.freemerchant.com/tutorial/op.htm
+http://www.freeminds.org/psych/leaving.htm
+http://www.freeminds.org/psych/mindcont.htm
+http://www.freenet.org.nz/python/yahooquote/doc/private/YahooQuote.Ticker-class.html
+http://www.freenet.org.nz/python/yahooquote/doc/public/YahooQuote.Ticker-class.html
+http://www.freenetpages.co.uk/hp/alan.gauld/tutgui.htm
+http://www.freenewmexican.com/news/10167.html
+http://www.freenewmexican.com/news/9163.html
+http://www.freenewmexican.com/news/9194.html
+http://www.freenewmexican.com/recentcomments.php
+http://www.freenewmexican.com/sfguide/127.html
+http://www.freenorthkorea.net/archives/freenorthkorea/cat_reference.html
+http://www.freeos.com/articles/2557/
+http://www.freep.com/features/living/age29e_20041229.htm
+http://www.freep.com/features/living/connec26_20031126.htm
+http://www.freep.com/features/living/shop8e_20050208.htm
+http://www.freep.com/index/business.htm
+http://www.freep.com/money/autonews/autoreport27e_20050127.htm
+http://www.freep.com/money/autoshow/2005/families18e_20050118.htm
+http://www.freep.com/news/health/erica13_20040413.htm
+http://www.freep.com/news/locway/shoot16_20000516.htm
+http://www.freep.com/news/metro/reccenters27e_20041227.htm
+http://www.freep.com/news/mich/date3e_20050103.htm
+http://www.freep.com/news/statewire/sw110755_20050127.htm
+http://www.freep.com/voices/sunday/eban30e_20050130.htm
+http://www.freepatentsonline.com/4013202.html
+http://www.freepatentsonline.com/4131196.html
+http://www.freepatentsonline.com/4355831.html
+http://www.freepatentsonline.com/4471935.html
+http://www.freepatentsonline.com/4542839.html
+http://www.freepatentsonline.com/4554154.html
+http://www.freepatentsonline.com/4698732.html
+http://www.freepatentsonline.com/5073231.html
+http://www.freepatentsonline.com/5096257.html
+http://www.freepatentsonline.com/5275278.html
+http://www.freepatentsonline.com/5622497.html
+http://www.freepatentsonline.com/5630168.html
+http://www.freepatentsonline.com/5785601.html
+http://www.freepatentsonline.com/5904271.html
+http://www.freepaws.org/
+http://www.freepeltier.org/011504_habeas_writ.htm
+http://www.freeplants.com/landscapedesign.htm
+http://www.freeportelectric.com/dereg.htm
+http://www.freepres-markethill.org/LosingTouch.html
+http://www.freepress.org/departments/display/19/2004/886
+http://www.freepress.org/departments/display/19/2005/1102
+http://www.freepress.org/departments/display/20/2005/1333
+http://www.freepressed.com/mygod.htm
+http://www.freeprinterpower.com/
+http://www.freerangegraphics.com/html/valentine/rules.html
+http://www.freereinart.com/WinterQuarterEvents.html
+http://www.freerepublic.com/focus/f-backroom/1308885/posts
+http://www.freerepublic.com/focus/f-chat/1310526/posts
+http://www.freerepublic.com/focus/f-news/1105141/posts
+http://www.freerepublic.com/focus/f-news/1146624/posts
+http://www.freerepublic.com/focus/f-news/1165061/posts
+http://www.freerepublic.com/focus/f-news/1188739/posts
+http://www.freerepublic.com/focus/f-news/1289100/posts
+http://www.freerepublic.com/focus/f-news/1294638/posts
+http://www.freerepublic.com/focus/f-news/1294995/posts
+http://www.freerepublic.com/focus/f-news/1296609/posts
+http://www.freerepublic.com/focus/f-news/1304348/posts
+http://www.freerepublic.com/focus/f-news/1305180/posts
+http://www.freerepublic.com/focus/f-news/1305291/posts
+http://www.freerepublic.com/focus/f-news/1309066/posts
+http://www.freerepublic.com/focus/f-news/1311434/posts
+http://www.freerepublic.com/focus/f-news/1312563/posts
+http://www.freerepublic.com/focus/f-news/1314201/posts
+http://www.freerepublic.com/focus/f-news/1315774/posts
+http://www.freerepublic.com/focus/f-news/1316400/posts
+http://www.freerepublic.com/focus/f-news/1317032/posts?page=56
+http://www.freerepublic.com/focus/f-news/1319991/posts
+http://www.freerepublic.com/focus/f-news/1320342/posts
+http://www.freerepublic.com/focus/f-news/1320399/posts
+http://www.freerepublic.com/focus/f-news/1323399/posts
+http://www.freerepublic.com/focus/f-news/1326420/posts
+http://www.freerepublic.com/focus/f-news/1329126/posts
+http://www.freerepublic.com/focus/f-news/1329881/posts
+http://www.freerepublic.com/focus/f-news/1330029/posts
+http://www.freerepublic.com/focus/f-news/1331358/posts
+http://www.freerepublic.com/focus/f-news/1331549/posts
+http://www.freerepublic.com/focus/f-news/1331756/posts
+http://www.freerepublic.com/focus/f-news/1331864/posts
+http://www.freerepublic.com/focus/f-news/1332158/posts
+http://www.freerepublic.com/focus/f-news/1332226/posts
+http://www.freerepublic.com/focus/f-news/1332226/posts?page=31
+http://www.freerepublic.com/focus/f-news/1332359/posts
+http://www.freerepublic.com/focus/f-news/1334473/posts
+http://www.freerepublic.com/focus/f-news/1334495/posts
+http://www.freerepublic.com/focus/f-news/1335475/posts
+http://www.freerepublic.com/focus/f-news/1336939/posts
+http://www.freerepublic.com/focus/f-news/1337437/posts
+http://www.freerepublic.com/focus/f-news/1346517/posts
+http://www.freerepublic.com/focus/f-news/1430112/posts
+http://www.freerepublic.com/focus/f-news/1430374/posts
+http://www.freerepublic.com/focus/f-news/1432554/posts
+http://www.freerepublic.com/focus/f-news/527264/posts
+http://www.freerepublic.com/focus/f-news/923505/posts
+http://www.freerepublic.com/focus/f-vetscor/1317517/posts
+http://www.freerepublic.com/forum/a3619c6b65ba0.htm
+http://www.freerepublic.com/forum/a364325090ea9.htm
+http://www.freerepublic.com/forum/a36b7494d1f3e.htm
+http://www.freerepublic.com/forum/a3713194926c5.htm
+http://www.freerepublic.com/~sirfrancisdashwood/
+http://www.freeroybennett.com/articles/06072002_standup.html
+http://www.freescale.com/webapp/sps/site/application.jsp?nodeId=02430ZNtdx4J11
+http://www.freescale.com/webapp/sps/site/application.jsp?nodeId=02VS0lxdYLZyky
+http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=02VS0llCc5pzMPYZjg28617061
+http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=CAL&parentCode=C-5E&nodeId=018rH3bTdG1729Sb94hm17SZGC
+http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=CAL&parentCode=null&nodeId=02VS0lxdYL1r1R
+http://www.freesearch.co.uk/search?q=american+bank
+http://www.freesearching.com/card_az5.htm
+http://www.freespeech.com/archives/001741.html
+http://www.freestanley.com/detroit_letters.html
+http://www.freestateproject.org/about/essay_archive/strategies.jsp
+http://www.freestuff4baby.com/top10babyfreebies.htm
+http://www.freeswan.org/freeswan_trees/freeswan-1.99/doc/quickstart-firewall.html
+http://www.freethechildren.org/youthinaction/war_affected_children.htm
+http://www.freethoughtdebater.com/FEvolutionCase.htm
+http://www.freetibet.org/info/file/file16.html
+http://www.freetime.com/outoftown.html
+http://www.freetimes.com/modules.php?op=modload&name=News&file=article&sid=520
+http://www.freetoon.com/chapter5.php?pageID=110
+http://www.freetrade.org/faqs/faqs.html
+http://www.freetrade.org/pubs/briefs/tpb-002.html
+http://www.freevibe.com/Drug_Facts/why_drugs.asp
+http://www.freevocabulary.com/
+http://www.freewebs.com/2boredinclass/
+http://www.freewebs.com/lester/naarchives.htm
+http://www.freewebs.com/snugglekitten/mywriting.htm
+http://www.freeweightloss.com/article5.html
+http://www.freewillastrology.com/horoscopes/allsigns.html
+http://www.freewillastrology.com/horoscopes/printer-friendly.html
+http://www.freewilliamsburg.com/archives/2005/03/us_military_say.html
+http://www.freewilliamsburg.com/december_2001/interviews.html
+http://www.freewoodworkingplan.com/
+http://www.freeworldgroup.com/news.htm
+http://www.freeworldweb.net/unitedeurope.html
+http://www.freeyourmindproductions.com/archives/01/bound-for-glory-when-the-hammer-falls-lyrics
+http://www.freezedriedmovies.com/review.php?id=178
+http://www.freezerbox.com/archive/article.asp?id=17
+http://www.freezerbox.com/archive/print.asp?id=17
+http://www.fremontartscouncil.org/meetings/minutes/oct04.html
+http://www.fremontbank.com/personal_banking/pam/faqs.htm
+http://www.french-accommodation-bureau.com/
+http://www.french-mortgage-connection.com/mortgages-decisions.htm
+http://www.french-news.com/176/news_briefs_main.shtml
+http://www.french-property.com/info/newsletters/user_003.htm
+http://www.french-property.com/info/newsletters/user_003.htm?printerfv=1
+http://www.frenchculture.org/art/events/othoniel.html
+http://www.frenchculture.org/art/residence/belin.html
+http://www.frenchentree.com/fe-forum/home.asp?status=view&MessageID=4278&origin=4278
+http://www.frenchentree.com/france-limousin-holt-property/DisplayArticle.asp?ID=3115
+http://www.frenchfusion.com/
+http://www.frenchhomerentals.com/swregions/minoune.htm
+http://www.frenchquarter.com/dining/GrandeDames.php
+http://www.frenchquarter.com/nightlife/IrishPubs.php
+http://www.frenchquarterfiction.com/ittybitty.html
+http://www.fresh-hell.com/journal/past/2001_11.html
+http://www.freshdirection.co.uk/forum/messages/12/226.shtml?1101215124
+http://www.freshdirection.co.uk/forum/messages/3/223.shtml?1101214318
+http://www.freshdirection.co.uk/forum/messages/7/225.shtml?1101215060
+http://www.freshfilmfestival.net/pages/Film%20Making%20guide.html
+http://www.freshnews.com/news/fresh-money/article_24837.html
+http://www.freshobsessed.com/faq/faq.aspx?param=faq
+http://www.freshpatents.com/
+http://www.fresno.gov/news&info/03272003_b.asp
+http://www.fresnobee.com/local/sv/story/9898628p-10742512c.html
+http://www.fresnobee.com/local/sv/v-textonly/story/9898628p-10742512c.html
+http://www.fresnocitycollege.edu/policeacademy/advcourses.html
+http://www.fresnorepublican.com/
+http://www.fridgetech.com/articles/acrnews/parallelflowchiller/
+http://www.friederich.net/chapter2.html
+http://www.friedkitten.com/archive/2001/08/
+http://www.friedlnet.com/industry_background_energy.html
+http://www.friedrich-tholstrup.com/
+http://www.friends-classics.demon.co.uk/ancientandmodern.htm
+http://www.friends-partners.org/GLOSAS/Global_University/Guideline/Sharma's_paper_on_Peace.html
+http://www.friends-partners.org/civnet/quarterreport01-vor2.html(opt,mozilla,unix,english,,new)
+http://www.friends-partners.org/friends/news/omri/1998/06/980619I.html(opt,mozilla,unix,english,,new)
+http://www.friends.org.uk/school/headrep/headrepjun02.htm
+http://www.friendsandflags.org/packs.htm
+http://www.friendsearch.com/dating/articlesf.htm
+http://www.friendshiphospital.com/privacy.php
+http://www.friendshipvillage.net/career_openings.html
+http://www.friendsofanimals.org/
+http://www.friendsofanimals.org/news/2005/february/rally-to-protect-the-arctic-refuge.html
+http://www.friendsofanimals.org/news/2005/january/judge-refuses-to-suspend-wolf-control.html
+http://www.friendsofscotland.gov.uk/business/emotion.html
+http://www.friendsofscotland.gov.uk/business/germany.html
+http://www.friendsofscotland.gov.uk/education/islaypower.html
+http://www.friendsreunited.co.uk/FriendsReunited.ASP?WCI=info
+http://www.friesian.com/british.htm
+http://www.friesian.com/universl.htm
+http://www.frif.com/cat97/a-e/blood_in.html
+http://www.frightscape.com/agememnon_messages4.html
+http://www.frischling.com/travelogue/12171999.php3
+http://www.frobenius.com/instruction-set.htm
+http://www.frodus.com/content_acalltoarms.html
+http://www.frogdesign.com/inside/history/
+http://www.froggyswebs.com/popular_aussie_slang-2.htm
+http://www.froginawell.net/japan/
+http://www.frograbbitmonkey.com/archives/000350.html
+http://www.frogwaresoftware.com/weddings.htm
+http://www.frolicanddetour.com/losingthecow/archives/2004/08/changing_tracks.html
+http://www.from-ireland.net/glimpses.htm
+http://www.fromallangles.com/glossary/credit-cards/terms/standard-floor-limit.htm
+http://www.fromartz.com/Pages/workforce.html
+http://www.frommers.com/destinations/paris/0062021098.html
+http://www.fromsitetostory.org/sources/papers/mnarch48/48inv-bf-a.asp
+http://www.fromthewilderness.com/
+http://www.fromthewilderness.com/free/ww3/02_11_02_lucy.html
+http://www.fromthewilderness.com/free/ww3/030402_cornreply.html
+http://www.fromthewilderness.com/free/ww3/040405_writing_wall.shtml
+http://www.fromthewilderness.com/free/ww3/060104_darley_saudi.shtml
+http://www.fromthewilderness.com/free/ww3/060704_tripod_fema.html
+http://www.fromthewilderness.com/free/ww3/060804_coup_detat.html
+http://www.fromthewilderness.com/free/ww3/071503_watergate_II.html
+http://www.fromthewilderness.com/free/ww3/100303_eating_oil.html
+http://www.fromthewilderness.com/free/ww3/102302_campbell.html
+http://www.fromthewilderness.com/free/ww3/111504_privilege_debt.shtml
+http://www.frontcompany.com/src/truth/myths.html
+http://www.frontier-assoc.com/inquiryarchives.htm
+http://www.frontierairlines.com/earlyreturns/
+http://www.frontierairlines.com/travel/early_returns.asp
+http://www.frontierbank.com/?u_ha=189,1743,630
+http://www.frontierpc.com/privacy.aspx
+http://www.frontiertech.com.au/Terms1.htm
+http://www.frontlineonnet.com/fl1422/14220410.htm
+http://www.frontlineonnet.com/fl1808/18080300.htm
+http://www.frontlineonnet.com/fl2015/stories/20030801005403900.htm
+http://www.frontpagemag.com/Articles/Printable.asp?ID=15455
+http://www.frontpagemag.com/Articles/ReadArticle.asp?ID=13682
+http://www.frontpagemag.com/Articles/ReadArticle.asp?ID=14435
+http://www.frontpagemag.com/Articles/ReadArticle.asp?ID=17369
+http://www.frontpagemag.com/Articles/ReadArticle.asp?ID=3833
+http://www.frontpagemag.com/blog/index.asp
+http://www.frontpagemagazine.com/Articles/ReadArticle.asp?ID=15740
+http://www.frontpagemagazine.com/Articles/ReadArticle.asp?ID=16328
+http://www.frontpagemagazine.com/Articles/ReadArticle.asp?ID=7583
+http://www.frootsmag.com/content/about/writeguide/
+http://www.frost.com/prod/servlet/vp.pag/2843802
+http://www.froststreet.net/archives/2004_03.html
+http://www.frostvalley.org/educational_programs/programs/model_forest.htm
+http://www.frozennorth.org/
+http://www.frp.qut.edu.au/train/finance/purchasing/receipting3.jsp
+http://www.frp.uk.com/sub_page.cfm/title/FRP%20Research%20Priorities/section/previous_call/editID/36
+http://www.frsd.k12.nj.us/boe/Board%20Policies/2431%20Athletic%20Competition.htm
+http://www.frst.govt.nz/publications/foundation/downloads/index/issue17.cfm
+http://www.frsuu.org/serm116.htm
+http://www.frugalfun.com/bottomfeeder.html
+http://www.frugalmarketing.com/dtb/sales-garden.shtml
+http://www.fruitfromwashington.com/whatsnew/whatsnew.html
+http://www.fruitfuljobs.com/careers_CV.aspx
+http://www.fruits-passion.com/en/corpo/terms.asp
+http://www.frumster.com/datingadvice.php
+http://www.fs.fed.us/database/feis/plants/tree/jugnig/all.html
+http://www.fs.fed.us/database/feis/wildlife/bird/pibo/all.html
+http://www.fs.fed.us/eco/s21draft.htm
+http://www.fs.fed.us/gpnf/fire/fire-danger-ratings.shtml
+http://www.fs.fed.us/gpnf/mshnvm/education/teachers-corner/library/fast-faqs.shtml
+http://www.fs.fed.us/gpnf/mshnvm/education/teachers-corner/registrations/visitor-centers/a4-eses-in-out-03.shtml
+http://www.fs.fed.us/gpnf/mshnvm/education/teachers-corner/registrations/visitor-centers/b4-mses-in-out-03.shtml
+http://www.fs.fed.us/land/emterms.html
+http://www.fs.fed.us/land/pubs/ecoregions/ch13.html
+http://www.fs.fed.us/ne/delaware/atlas/
+http://www.fs.fed.us/npnht/quotes/fitzgerald.shtml
+http://www.fs.fed.us/nwacfire/robert/news/robert/8-29-am.html
+http://www.fs.fed.us/pnw/corvallis/mdr/mapss/forecastdescription.htm
+http://www.fs.fed.us/r1/gallatin/fire/wyifc/main.htm
+http://www.fs.fed.us/r6/wenatchee/summerhomes/
+http://www.fs.fed.us/r9/ottawa/forest_management/fisheries_water/water_facs.htm
+http://www.fs.fed.us/rm/main/pa/newsclips/01_03/032901_gnarled.html
+http://www.fs.uci.edu/Cashier/checks.htm
+http://www.fsa.go.jp/en/refer/noact/index_menu.html
+http://www.fsa.gov.uk/Pages/Library/Communication/PR/1999/021.shtml
+http://www.fsa.gov.uk/Pages/Library/Cooperate/Performance/standards/complaints/complaints-full.shtml
+http://www.fsa.gov.uk/pages/Doing/Regulated/Fees/faqs/cp0502.shtml
+http://www.fsa.gov.uk/vhb/html/AUTH/authapp2.11.html
+http://www.fsa.gov.uk/vhb/html/GEN/GEN2.2.html
+http://www.fsa.gov.uk/vhb/html/MCOB/MCOB3.6.html
+http://www.fsa.usda.gov/drought/reference/public_law_105.htm
+http://www.fsae.com/fsaej_article.shtml
+http://www.fsbassociates.com/2001-02winter.asp
+http://www.fsc1.wpafb.af.mil/commu.htm
+http://www.fsec.ucf.edu/bldg/baihp/casestud/
+http://www.fsec.ucf.edu/bldg/pubs/egUSA/
+http://www.fsec.ucf.edu/bldg/pubs/japan/
+http://www.fsec.ucf.edu/bldg/pubs/valid/
+http://www.fsec.ucf.edu/ed/activit/bowlrules2003.htm
+http://www.fsec.ucf.edu/ed/activit/scibowlrules2004.htm
+http://www.fsf.org/licensing/licenses/gpl.html
+http://www.fsfe.org/documents/whyfs.en.html
+http://www.fsfeurope.org/documents/eur5greve.en.html
+http://www.fsfeurope.org/documents/eur5greve.sv.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.cs.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.en.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.fr.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.ro.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.sq.html
+http://www.fsfeurope.org/projects/swpat/letter-20040510.sv.html
+http://www.fsgkidsbooks.com/teachersguides/atthesign.htm
+http://www.fshsociety.org/fsh/FSHSocietyWTestimony_HouseApprops_FY2006LaborHHS_April12005_Proof.htm
+http://www.fsis.usda.gov/Fact_Sheets/FSIS_Rule_Designed_to_Reduce_Listeria/index.asp
+http://www.fsis.usda.gov/News_&_Events/NR_010405_01/index.asp
+http://www.fsis.usda.gov/News_&_Events/NR_063004_01/index.asp
+http://www.fsis.usda.gov/OA/speeches/2001/mc_publichealth060701.htm
+http://www.fsis.usda.gov/OPPDE/nacmpi/May2000/Wffbriefing_Attachments2.html
+http://www.fsis.usda.gov/Regulations_&_Policies/2003_Interim_&_Final_Rules_Index/index.asp
+http://www.fsis.usda.gov/fact_sheets/listeria_monocytogenes/index.asp
+http://www.fsm-a.org/stacks/AP_files/APAppC.html
+http://www.fsmb.org/Policy%20Documents%20and%20White%20Papers/HealthFraud.htm
+http://www.fsmgov.org/nat_d01.html
+http://www.fsmitha.com/h2/ch19sp.htm
+http://www.fsmitha.com/h2/ch26.htm
+http://www.fsmitha.com/h2/ch33.htm
+http://www.fsmlaw.org/fsm/code/title19/T19_Ch04.htm
+http://www.fso.arizona.edu/fso/deptman/9/912outs.html
+http://www.fss.gsa.gov/
+http://www.fst.org/doyle.htm
+http://www.fst.org/ethics.htm
+http://www.fsu.edu/~CandI/health/courses/4870.htm
+http://www.fsu.edu/~air/Alert2u1.htm
+http://www.fsu.edu/~trauma/T039.html
+http://www.fsu.edu/~trauma/ogcross.html
+http://www.fsu.edu/~trustees/meeting/minutes/03-26-04.html
+http://www.fsu.edu/~trustees/meeting/minutes/09-20-02.html
+http://www.fsunews.com/vnews/display.v/ART/2005/01/17/41eafa14b2ce7
+http://www.fsunion.org.au/article.asp?artid=600
+http://www.fsus.fsu.edu/mcquone/HurrInClass/background.htm
+http://www.ft-wayne.in.us/home/facts.html
+http://www.ft2.org.uk/training/
+http://www.ft2.org.uk/training/pindex.html
+http://www.fta.co.uk/trainingprospectus05/info/terms.jsp
+http://www.ftaa-alca.org/FTAADraft03/ChapterXX_e.asp
+http://www.ftaaimc.org/en/index.shtml
+http://www.ftacusa.org/
+http://www.ftb.ca.gov/aboutftb/annrpt/1996/legis2.html
+http://www.ftb.ca.gov/forms/updates/updateResults.asp?FormNum=Publication+1001
+http://www.ftb.ca.gov/law/rulings/active/lr94_2.html
+http://www.ftb.ca.gov/law/rulings/active/lr98_1.html
+http://www.ftc.gov/acoas/bylaws%20.htm
+http://www.ftc.gov/acoas/papers/acoasdraft2.htm
+http://www.ftc.gov/acoas/papers/finalreport.htm
+http://www.ftc.gov/bc/adops/011.htm
+http://www.ftc.gov/bcp/conline/pubs/alerts/invnalrt.htm
+http://www.ftc.gov/bcp/conline/pubs/autos/usedcar.htm
+http://www.ftc.gov/bcp/conline/pubs/credit/fcb.htm
+http://www.ftc.gov/bcp/conline/pubs/credit/kneedeep.htm
+http://www.ftc.gov/bcp/conline/pubs/credit/repair.htm
+http://www.ftc.gov/bcp/conline/pubs/general/sortgrn.htm
+http://www.ftc.gov/bcp/conline/pubs/invest/vending.htm
+http://www.ftc.gov/bcp/conline/pubs/services/model.htm
+http://www.ftc.gov/bcp/conline/pubs/tmarkg/nine.htm
+http://www.ftc.gov/bcp/franchise/advops/advis97-4.htm
+http://www.ftc.gov/bcp/franchise/advops/advis99-5.htm
+http://www.ftc.gov/bcp/privacy/wkshp97/comments2/dmaapp4.htm
+http://www.ftc.gov/be/v030008.htm
+http://www.ftc.gov/be/v980033.htm
+http://www.ftc.gov/opa/2000/06/comp629.htm
+http://www.ftc.gov/opa/2002/12/fyi0268.htm
+http://www.ftc.gov/opa/2003/06/fyi0336.htm
+http://www.ftc.gov/opa/2004/05/gates.htm
+http://www.ftc.gov/os/1997/06/interado.htm
+http://www.ftc.gov/os/1997/06/kcddo.htm
+http://www.ftc.gov/os/1997/06/shelldo.htm
+http://www.ftc.gov/os/1998/06/9810173.cmp.htm
+http://www.ftc.gov/os/1998/09/9810173.cmp.htm
+http://www.ftc.gov/os/1999/03/9810261northtahoecomplaint.htm
+http://www.ftc.gov/os/1999/08/northtahoecomplaint.htm
+http://www.ftc.gov/os/2000/06/gasolinecommerce.htm
+http://www.ftc.gov/os/2000/06/gasolinegovref.htm
+http://www.ftc.gov/os/2000/06/gasolinejudiciary.htm
+http://www.ftc.gov/os/2001/06/northdakotaletter.htm
+http://www.ftc.gov/os/2002/04/cccicmplnt.htm
+http://www.ftc.gov/os/2003/04/030409testimony.htm
+http://www.ftc.gov/os/2003/06/030611reauthhr.htm
+http://www.ftc.gov/os/2003/06/030611reauthsenate.htm
+http://www.ftc.gov/speeches/anthony/standardppf.htm
+http://www.ftc.gov/speeches/leary/atljva4.htm
+http://www.ftc.gov/speeches/muris/murisaba.htm
+http://www.ftc.gov/speeches/other/ahafin.htm
+http://www.ftc.gov/speeches/swindle/030428aggressive.htm
+http://www.ftexploring.com/askturtleboy/askturtleboy1.html
+http://www.ftlcomm.com/ensign/Sun3pan/areyouready/areyouready.html
+http://www.ftmac.org/preserve.htm
+http://www.ftmastering.com/mmo/mmo13_3.htm
+http://www.fto.nsw.gov.au/content.asp?content=8&Id=29
+http://www.fto.nsw.gov.au/fund.asp?Id=206&subID=3
+http://www.ftponline.com/ea/magazine/fall2004/features/akolawa/
+http://www.ftponline.com/resources/spcollections/servlets_jsp/
+http://www.ftponline.com/vsm/2004_11/magazine/departments/letters/
+http://www.ftponline.com/wss/2004_12/magazine/columns/sqlconnection/default_pf.aspx
+http://www.ftrain.com/astrakhan_awareness.html
+http://www.ftrain.com/run_ground_zero.html
+http://www.ftvideo.com/genex/buzz/04/natswrap/index1.htm
+http://www.fuckfrance.com/read.html?postid=1006317&replies=30&page=1
+http://www.fuckfrance.com/read.html?postid=1012884&replies=11&page=1
+http://www.fuckfrance.com/read.html?postid=711220&replies=59&page=3
+http://www.fucknationalcity.com/pages/locks/index.shtml
+http://www.fuckthesouth.com/
+http://www.fudan.edu.cn/english/about/organization/office_6.html
+http://www.fudco.com/habitat/archives/000023.html
+http://www.fudgecakedesign.co.uk/
+http://www.fuelcelleurope.org/
+http://www.fuelcellstore.com/information/coming_of_age.html
+http://www.fuelcelltoday.com/FuelCellToday/EducationCentre/EducationCentreExternal/EducationCentreLinks/EduCentreDisplayLinks/0,1762,CollegesUSA,00.html
+http://www.fuelcelltoday.com/FuelCellToday/IndustryDirectory/IndustryDirectoryExternal/IndustryDirectoryDisplayCompany/0,1664,1810,00.html
+http://www.fuelcelltoday.com/FuelCellToday/IndustryDirectory/IndustryDirectoryExternal/IndustryDirectoryDisplayCompany/0,1664,2153,00.html
+http://www.fuelcelltoday.com/FuelCellToday/IndustryDirectory/IndustryDirectoryExternal/IndustryDirectoryDisplayCompany/0,1664,2537,00.html
+http://www.fuelcelltoday.com/FuelCellToday/IndustryDirectory/IndustryDirectoryExternal/IndustryDirectoryDisplayCompany/0,1664,559,00.html
+http://www.fuelcelltoday.com/FuelCellToday/IndustryInformation/IndustryInformationExternal/NewsByTaxHome/0,1614,Technology,00.html
+http://www.fuelcelltoday.com/shop/FCTEShopByCategory/0,2205,7,00.html
+http://www.fuelcelltoday.org/FuelCellToday/EducationCentre/EducationCentreExternal/EduCentreDisplay/0,1741,FCInfoUses,00.html
+http://www.fueleconomy.gov/feg/info.shtml
+http://www.fujifilm.co.uk/minilabs/frontier_cs.php?id=47
+http://www.fujifilm.co.uk/technical/hireshop/tandc.html
+http://www.fujiiya.com/bbse/aska_ii.cgi
+http://www.fujispray.com/partsaccessories.htm
+http://www.fujitsu.com/global/news/pr/recent/index-topic_computing.html
+http://www.fujitsu.com/us/services/solutions/lifescience/
+http://www.fukubonsai.com/M-L9d.html
+http://www.fulbright.jp/e4/wj-guide.html
+http://www.fulbrightalumni.org/olc/pub/FBA/programs/rules.html
+http://www.fulbrightthai.org/knowledge/education-us.php
+http://www.fulcrum-books.com/html/rvs_getting_out.html
+http://www.fulcrum-gardening.com/html/intuitive_gardener.html
+http://www.fullcontext.com/archives/000192.html
+http://www.fullliving.com/workshops.html
+http://www.fullyarticulated.com/MATTPAGE.html
+http://www.fullyramblomatic.com/archive/20040818-0908.htm
+http://www.fultonspeedway.com/rules/purestock.html
+http://www.fum.org/QL/issues/0311/passages.htm
+http://www.fumc-conroe.org/
+http://www.fun-with-words.com/neologisms_0007.html
+http://www.funagain.com/control/product/~product_id=014299
+http://www.funattic.com/game_classroom.htm
+http://www.functionalgenomics.org.uk/sections/activitites/Reports/report_geneva_2001.htm
+http://www.functionart.com/Press0104/GlassArtists04.html
+http://www.fundacionfaes.es/boletin/boletines/boletin_1372_ing.htm
+http://www.fundacjauj.pl/information.php?l=en
+http://www.fundadvice.com/FEhtml/InvestingBasics/0009.html
+http://www.fundadvice.com/FEhtml/PsychHurdles/0206b.html
+http://www.fundadvice.com/press/alaskaairlines.html
+http://www.fundaec.org/en/guidingprinciples/principles.htm
+http://www.fundamentalbiblechurch.org/Tracts/fbctruth.htm
+http://www.fundedplans.com/directory/funded-home-business.html
+http://www.fundraiserhelp.com/
+http://www.fundraisingweb.org/world/uk.htm
+http://www.fundsforwriters.com/ebooks.htm
+http://www.fundsupermart.com/main/research/viewHTML.tpl?articleNo=951
+http://www.funeralplan.com/mcfarland/losing
+http://www.funeralplan.com/pgfh/hgrief0
+http://www.funeralplan.com/pgfh/hgrief1
+http://www.funeralplan.com/reinke/hgrief0
+http://www.funeralplan2.com/bakerhazelfuneralhome/hgrief0
+http://www.funeralplan2.com/bakerhazelfuneralhome/hgrief1
+http://www.funeralplan2.com/green/hgrief0
+http://www.funkygrad.com/think/displayarticle.php?artID=13&subcat=study
+http://www.funkymjsite.co.uk/videotabloid5.html
+http://www.funkypancake.com/blog/archives/cat_signs_of_hounds.html
+http://www.funlake.com/accommodations/site_legend.php
+http://www.funlake.com/maps/site_legend.php
+http://www.funsci.com/fun3_en/blood/blood.htm
+http://www.funsci.com/fun3_en/electro/electro.htm
+http://www.funsci.com/fun3_en/usph/usph.htm
+http://www.funsci.com/texts/index_en.htm
+http://www.funsupply.com/parts.html
+http://www.funtrivia.com/playquiz.cfm?qid=141080&origin=
+http://www.funtrivia.com/quizzes/for_children/words_for_kids/word_meanings.html
+http://www.furcadia.com/community/events.html
+http://www.furcadia.com/roleplay/primes.html
+http://www.furholt.net/elaynas_den/_ST_Demons06.html
+http://www.furia.com/twas/twas0012.html
+http://www.furia.com/twas/twas0243.html
+http://www.furia.com/twas/twas0304.html
+http://www.furia.com/twas/twas0328.html
+http://www.furia.com/twas/twas0406.html
+http://www.furia.com/twas/twas0467.html
+http://www.furia.com/twas/twas0485.html
+http://www.furia.com/twas/twas0503.html
+http://www.furious.com/perfect/staff.html
+http://www.furman.edu/summerscholars/psychology.htm
+http://www.furninfo.com/absolutenm/anmviewer.asp?a=3987&z=2
+http://www.furnitureforthepeople.com/bushjokes.htm
+http://www.furnitureforthepeople.com/workpoor.htm
+http://www.furnitureontheweb.com/NoFrame/Products/completefullsizecanopybeds1nf.html
+http://www.furry-paws.com/faq.php
+http://www.furtherconfusion.org/fc2005/hotel.php
+http://www.furtherconfusion.org/fc2006/codeofconduct.php
+http://www.furthermore.org.uk/archives/2003_08.html
+http://www.fusmadison.org/
+http://www.fussell.org/bacds/bacdspriceincrfaq.htm
+http://www.futurecasts.com/25_year_economic_forecasts.html
+http://www.futurecasts.com/Keynes,%20The%20General%20Theory%20(I).htm
+http://www.futurecasts.com/book%20review%205-8.htm
+http://www.futuredynamicadvantage.com/
+http://www.futureenergies.com/modules.php?op=modload&name=News&file=article&sid=884
+http://www.futurefeedforward.com/front.php?fid=21
+http://www.futurefocus.net/news/newsapr05.htm
+http://www.futurefocus.net/news_info.htm
+http://www.futurefocus.net/pages.htm
+http://www.futuregamez.net/ps2games/scell2/scell2.html
+http://www.futureharvest.org/earth/malawi.shtml
+http://www.futurehi.net/archives/000015.html
+http://www.futurehi.net/phlebas/text/cultnote.html
+http://www.futurenetworkusa.com/news/2003/pr-2003-04-22.html
+http://www.futureofchildren.org/information2827/information_show.htm?doc_id=102647
+http://www.futureofmusic.org/articles/INDUCEanalysis.cfm
+http://www.futureofmusic.org/contractcrit.cfm
+http://www.futurepets.com/Cat_Trees.htm
+http://www.futurepets.com/Littermaid_Litter_Boxes.htm
+http://www.futurephysical.org/pages/content/ecotechnology/ecotech/190203_KEYNOTE_SPEECH_MASAKI_FUJIHATA.htm
+http://www.futureproducers.com/forums/showthread/threadid/112725
+http://www.futureproof.org/risk.htm
+http://www.futurepundit.com/archives/000919.html
+http://www.futurepundit.com/archives/001283.html
+http://www.futurepundit.com/archives/001611.html
+http://www.futurepundit.com/archives/001684.html
+http://www.futurepundit.com/archives/002284.html
+http://www.futurepundit.com/archives/002813.html
+http://www.futurepundit.com/archives/cat_brain_disorder_repair.html
+http://www.futurepundit.com/archives/cat_brain_emotions.html
+http://www.futurepundit.com/mt/mt-comments.cgi?entry_id=2813
+http://www.futuresearch.com/articles.php?showsite=65
+http://www.futuresindustry.org/fimagazi-1929.asp?a=893
+http://www.futuretech.blinkenlights.nl/prfdifpro.html
+http://www.futurismic.com/fiction/shibuya.html
+http://www.futurist.com/911/notes_about_calamity.htm
+http://www.futurist.com/portal/science/science_hit.htm
+http://www.fvastro.org/bylaws.htm
+http://www.fvi.org.uk/events/korea2006.html
+http://www.fvpsurgery.com/html/contact.html
+http://www.fvsd.ab.ca/flomac/TLC.htm
+http://www.fvsd.ab.ca/stm/Spring.htm
+http://www.fwas.org/link.asp?TOPIC_ID=891
+http://www.fwfr.com/fourum/topic.asp?ARCHIVE=true&TOPIC_ID=1479
+http://www.fwfr.com/fourum/topic.asp?TOPIC_ID=1388
+http://www.fwoa.org/news/fwoanws8c.html
+http://www.fwointl.com/
+http://www.fwradiology.com/watch.htm
+http://www.fws.gov/habitatconservation/news_archive.htm
+http://www.fws.gov/patuxent/ntedu.html
+http://www.fwtwr.com/18xx/rules_difference_list/2_4.htm
+http://www.fwtwr.com/fwtwr/ra/rules.htm
+http://www.fxstreet.com/nou/content/103340/content.asp?menu=knowledge
+http://www.fye.uconn.edu/awards.htm
+http://www.fyilondon.com/cgi-bin/niveau2.cgi?s=shopping&p=96437.html&a=1
+http://www.fylde.com/bluepan.html
+http://www.fypower.org/faq.html
+http://www.fypower.org/news/back_issue/enewswire_502.html
+http://www.fzaoint.net/dofp/fca.php
+http://www.fzaoint.net/doubt.html
+http://www.g-gej.org/5-2/letter2.html
+http://www.g-nation.co.uk/teachers/mediacentre/news.cfm?contentid=52
+http://www.g21.net/africa55.html
+http://www.g21.net/mars327.htm
+http://www.g21.net/mars374.htm
+http://www.g21.net/mars407.htm
+http://www.g2mil.com/UrbanInf.htm
+http://www.g4tv.com/callforhelp/features/47508/Easy_HomeNetwork_Storage.html
+http://www.g4tv.com/gearandgadgets/features/50081/HDTV_Epiphany_.html
+http://www.g8.utoronto.ca/summit/2004seaisland/fact_mefta.html
+http://www.g8legalsupport.info/addinfo/
+http://www.gabbitas.co.uk/index.cfm?action=rac.jobOp
+http://www.gabbitas.co.uk/index.cfm?action=tea.home
+http://www.gacp.org/webapps/gacp/en/about_history.jsp
+http://www.gactr.uga.edu/gcq/gcqwin96/ronsimpson.html
+http://www.gaddgedlar.com/anglo-scots.htm
+http://www.gadgetopia.com/2003/06/26/WhateverHappenedToKiokenDesign.html
+http://www.gadgetstuff.com/product.asp?id=10118&cid=2
+http://www.gadgetstuff.com/terms.asp
+http://www.gaiahouse.co.uk/booking_retreats.htm
+http://www.gaiam.com/retail/gai_content/learn/gai_learnArticle.asp?article_id=1120
+http://www.gaietyschool.com/04/otp.htm
+http://www.gainesville.com/apps/pbcs.dll/article?AID=/20050205/API/502050525&cachetime=5
+http://www.gainsbc.co.uk/locations.asp
+http://www.gairdner.org/news.html
+http://www.gaisan.com/blogs/archives/2005/04/
+http://www.gal.co.za/newsitem.php?id=51
+http://www.galaktek.com/cgi-bin/index?page=deffect2.html
+http://www.galapagos-ecuador.com/galapagos-islands.html
+http://www.galapagosartspace.com/events2.html
+http://www.galaxy-h.gov.uk/teacher_worklab.html
+http://www.galaxygoo.org/blogs/archives/000589.html
+http://www.gale.com/free_resources/bhm/bio/charles_r.htm
+http://www.galegroup.com/free_resources/bhm/bio/charles_r.htm
+http://www.galegroup.com/free_resources/bhm/bio/jackson_j.htm
+http://www.galegroup.com/free_resources/bhm/bio/lee_s.htm
+http://www.galegroup.com/free_resources/glossary/
+http://www.galegroup.com/free_resources/glossary/glossary_bc.htm
+http://www.galegroup.com/free_resources/whm/bio/curie_m.htm
+http://www.galegroup.com/servlet/HTMLFileServlet?imprint=9999&region=7&fileName=reference/archive/200409/scopus.html
+http://www.galeschools.com/grant_goldmine/foundations/smith_reynolds_foundation.htm
+http://www.galha.org/glh/182/sagan.html
+http://www.galha.org/glh/211/foxwell.html
+http://www.galileoweb.org/galileoLibrary/
+http://www.gallerydir.com/cgi-bin/gd/gd.exe/MEMBERSEARCH
+http://www.galleryone.com/phillips_prints_a-d.htm
+http://www.galleryreina.com/hh_retro/retro.html
+http://www.gallerywalk.org/Hays.html
+http://www.gallifreyone.com/review.php?id=na-46
+http://www.gallowaygroup.co.uk/news.html
+http://www.galwayadvertiser.ie/
+http://www.gamasutra.com/columns/fristrom/20040702/fristrom_01.shtml
+http://www.gamasutra.com/features/19990129/implementing_01.htm
+http://www.gamasutra.com/features/19990924/messiah_02.htm
+http://www.gamasutra.com/features/19991208/imislund_03.htm
+http://www.gamasutra.com/features/20000530/sharp_01.htm
+http://www.gamasutra.com/features/20001101/woodcock_01.htm
+http://www.gamasutra.com/features/20011219/spanel_01.htm
+http://www.gamasutra.com/features/20020401/hancock_01.htm
+http://www.gamasutra.com/features/20031003/lindley_01.shtml
+http://www.gamasutra.com/features/20041123/hall_01.shtml
+http://www.gamasutra.com/features/20041124/mezihorak_01.shtml
+http://www.gamasutra.com/features/20050420/tan_01.shtml
+http://www.gamasutra.com/newswire/eurospeak/20000828/
+http://www.gambletribune.org/article548.html
+http://www.gambling-forum.com/online-casino/ruby-fortune.htm
+http://www.gamblingresearch.org/contentdetail.sz?cid=2007&pageid=289
+http://www.game-group.com/
+http://www.game-over.net/reviews.php?page=gamecubereviews&id=91
+http://www.game-over.net/reviews.php?page=ps2reviews&id=302
+http://www.game-research.com/
+http://www.game-research.com/art_computer_game_research.asp
+http://www.game-research.com/review_what_video_games_have_to_teach.asp
+http://www.game-universe.com/product_info.php?products_id=21968&
+http://www.game-universe.com/product_info.php?products_id=32401&
+http://www.gameai.com/youknow.html
+http://www.gamealbum.com/keyword/free/23.html
+http://www.gameandfishcoalition.com/LegislativeResponses.cfm
+http://www.gameandfishmag.com/gear/gs0205motors/
+http://www.gameandfishmag.com/hunting/bowhunting-hunting/gf_aa076504a/
+http://www.gameandfishmag.com/walleyes/gf_aa026604a/
+http://www.gamearena.com.au/files/details/html/2430
+http://www.gamearena.com.au/files/details/html/4189
+http://www.gamearena.com.au/games/title/pc_naturalselection/messageboard/thread.php/2597461
+http://www.gameblogs.org/view_entry_byday.php?day=2005-06-24
+http://www.gameblogs.org/view_entry_popular.php?day=2005-06-14
+http://www.gameboomers.com/reviews/Pp/PolarExpressbygremlin.htm
+http://www.gameboomers.com/wtcheats/pcQq/QFG1.htm
+http://www.gamedev.net/columns/hardcore/dxshader2/page4.asp
+http://www.gamedev.net/community/forums/ViewReply.asp?id=1844017
+http://www.gamedev.net/community/forums/topic.asp?topic_id=278014
+http://www.gamedev.net/community/forums/topic.asp?topic_id=288493
+http://www.gamedev.net/community/forums/topic.asp?topic_id=295727&whichpage=2
+http://www.gamedev.net/community/forums/viewreply.asp?ID=1872531
+http://www.gamedev.net/reference/articles/article1832.asp
+http://www.gamedev.net/reference/articles/article796.asp
+http://www.gamedev.net/reference/articles/article837.asp
+http://www.gamedev.net/reference/business/features/legalissues1/
+http://www.gamedev.net/reference/list.asp?categoryid=77
+http://www.gamefaqs.com/features/help/entry.html?cat=29
+http://www.gamefaqs.com/portable/gbadvance/code/468480.html
+http://www.gamefaqs.com/portable/gbadvance/code/921183.html
+http://www.gamefaqs.com/portable/gbadvance/review/R51718.html
+http://www.gamegirladvance.com/
+http://www.gamegirladvance.com/archives/2002/12/10/video_games_tech_used_as_research_tool.html
+http://www.gamegirladvance.com/archives/2003/04/16/genderplay_successes_and_failures_in_character_designs_for_videogames.html
+http://www.gamegirladvance.com/archives/2003/07/03/the_choice_to_cheat.html
+http://www.gamegirladvance.com/archives/2003/08/11/silent_hill_3.html
+http://www.gamegirladvance.com/archives/2005/06/04/what_we_learn_from_video_games.html
+http://www.gamegirladvance.com/archives/2005/06/07/workers_of_the_world_unite_maybe.html
+http://www.gamegirlz.com/adventures/game_001.shtml
+http://www.gamegrene.com/node/285
+http://www.gamegrene.com/node/340
+http://www.gamegrene.com/node/490
+http://www.gamegrene.com/node?from=45
+http://www.gamegrene.com/taxonomy/term/14
+http://www.gamegrene.com/taxonomy_menu/2/14
+http://www.gamehippo.com/cat/all_1_64.shtml
+http://www.gamejournalism.com/archives/2004/Nov/03/fragdolls_sex_blogs_and_firstperson_shooters.html
+http://www.gamekids.com/games3.html
+http://www.gameloaded.co.uk/buy-1819-serious-sam-the-.html
+http://www.gameloaded.co.uk/buy-2313-double-pack-poke.html
+http://www.gameplanet.co.nz/mag.dyn/Reviews/2644.html
+http://www.gamer-girl.org/
+http://www.gamerankings.com/cheats/921183
+http://www.gamerifts.com/news/archives/arc10-2004.shtml
+http://www.gameroom.com/gamebits/RULES/Murder_She_Wrote_Rules.html
+http://www.gameroomwarehouse.com/faq.html
+http://www.gamershell.com/news/13201.html
+http://www.gamershell.com/news/21765.html
+http://www.gamershell.com/news/7089.html
+http://www.gamershell.com/ps2/athens_2004/review.html
+http://www.gamersinfo.net/index.php?art/id:307
+http://www.gamersmark.com/reviews/view/499
+http://www.gamerstemple.com/games/000394/000394r01.asp
+http://www.gamerstemple.com/games5/000768/000768r02.asp
+http://www.gamesarefun.com/gamesdb/review.php?reviewid=375
+http://www.gamesconference.org/digra2005/viewabstract.php?id=39
+http://www.gameseek.co.uk/Games/DVD/TV-Series/gso/60/
+http://www.gameseek.co.uk/resultslist.php?ps=TV%20Series&c=&o=td&pc=DVD
+http://www.gamesfromwithin.com/articles/0501/000066.html
+http://www.gamesindustry.biz/content_page.php?aid=9456
+http://www.gamesinvestor.com/Thinkpieces/The_Evolving_Games_Industry__1/the_evolving_games_industry__1.html
+http://www.gamespot.com/gamecube/action/metroidprime/review.html
+http://www.gamespot.com/gamecube/rpg/lostkingdoms/review.html
+http://www.gamespot.com/gamecube/sports/ssx3/review.html
+http://www.gamespot.com/gamespot/features/all/gamespotting/121401/p6_01.html
+http://www.gamespot.com/gba/strategy/advancewars2/printable_6030327.html
+http://www.gamespot.com/gbc/sports/nhl2000/review.html
+http://www.gamespot.com/mobile/driving/asphalturbangt2d/review.html
+http://www.gamespot.com/mobile/puzzle/chipschallenge/review.html
+http://www.gamespot.com/mobile/puzzle/familyfeud2/review.html
+http://www.gamespot.com/mobile/puzzle/optimalvideopoker/review.html
+http://www.gamespot.com/mobile/strategy/ah1seabomber/
+http://www.gamespot.com/mobile/strategy/ah1seabomber/checkprices.html
+http://www.gamespot.com/news/2005/05/26/news_6126595.html?part=rss&tag=gs_news&subj=6126595
+http://www.gamespot.com/pc/action/coldfear/preview_6114393.html
+http://www.gamespot.com/pc/action/freedomthebattleforli/printable_6075492.html
+http://www.gamespot.com/pc/action/halflife2/news_6101409.html
+http://www.gamespot.com/pc/action/thesuffering/review.html
+http://www.gamespot.com/pc/rpg/kotor2/preview_6113336.html
+http://www.gamespot.com/pc/rpg/neverwinternights/review.html
+http://www.gamespot.com/pc/sim/dday1944invasionofeurope/factsheet_6094625.html
+http://www.gamespot.com/ps/action/silhouettemirage/review.html
+http://www.gamespot.com/ps2/action/freedomthebattleforli/printable_6075496.html
+http://www.gamespot.com/ps2/action/rez/news_6092290.html
+http://www.gamespot.com/ps2/action/scarface/news_6104520.html
+http://www.gamespot.com/ps2/driving/streetracingsyndicate/review.html
+http://www.gamespot.com/ps2/rpg/arctheladgeneration/preview_6124397.html
+http://www.gamespot.com/ps2/strategy/kessen3/news_6105822.html
+http://www.gamespot.com/xbox/driving/streetracingsyndicate/review.html
+http://www.gamespyarcade.com/support/help/classicgames.shtml
+http://www.gamespydaily.com/news/fullstory.asp?id=1585
+http://www.gamestation.co.uk/terms.asp
+http://www.gamesurge.com/pc/reviews/nfspu.shtml
+http://www.gamesurge.com/pc/strategy/pc_wt/Blood-omen.shtml
+http://www.gametalk.com/talk/psp/rengoku/72877324.htm
+http://www.gamewinners.com/DOSWIN/blsuffering.htm
+http://www.gamewinners.com/playstation2/Suffering.htm
+http://www.gamewinners.com/xbox/SoulCalibur2.htm
+http://www.gamewinners.com/xbox/Suffering.htm
+http://www.gameworld.com/saved/Award-WinningGame.htm
+http://www.gamingnexus.com/Review.asp?ID=92
+http://www.gamingreport.com/article.php?sid=17473&mode=nested&order=0&thold=0
+http://www.gamingtoday.com/index.cfm?articleid=12164&AIN=510888
+http://www.gammaphibeta.org/news/detail.asp?NEWS_ID=901&NEWS_CATEGORY_ID=11
+http://www.gammassl.co.uk/topics/conundrums.htm
+http://www.gammonitis.com/backgammon_clock%20rules.htm
+http://www.gammonline.com/demo/articles/hank.htm
+http://www.gammonskanska.com/hk/eng/careers.asp
+http://www.gams.com/docs/putt.htm
+http://www.gandhi.ca/activities/speakers/carter.php
+http://www.gandynet.com/art/Masters/Richard_Lack/Lack_bio.htm
+http://www.ganglandnews.com/column114.htm
+http://www.gangofpour.com/underground/nosound/playoff02/
+http://www.gannett.com/go/difference/greatfalls/pages/part4/families.html
+http://www.gannett.com/go/difference/greatfalls/pages/part5/teen.html
+http://www.gannett.com/go/newswatch/2004/december/nw1210-2.htm
+http://www.gannonbroadcasting.com/countryshowdown.html
+http://www.gantthead.com/membership.cfm
+http://www.gao.ca/index.cfm/ci_id/1227/la_id/1.htm
+http://www.gao.gov/cgi-bin/getrpt?GAO-02-1095T
+http://www.gao.gov/decisions/appro/302710.htm
+http://www.gao.gov/decisions/appro/302993.htm
+http://www.gao.gov/decisions/appro/303906.htm
+http://www.gao.gov/decisions/bidpro/295946.htm
+http://www.gao.gov/decisions/other/303767.htm
+http://www.gao.gov/htext/d03723.html
+http://www.gao.gov/htext/d04570r.html
+http://www.gapersblock.com/airbags/archives/ode_to_a_cast_iron_skillet/
+http://www.gapingvoid.com/
+http://www.gapingvoid.com/Moveable_Type/archives/000932.html
+http://www.gapingvoid.com/Moveable_Type/archives/000989.html
+http://www.gapingvoid.com/Moveable_Type/archives/001111.html
+http://www.gapingvoid.com/Moveable_Type/archives/001207.html
+http://www.gapingvoid.com/Moveable_Type/archives/001679.html
+http://www.gapingvoid.com/Moveable_Type/archives/2004_09.html
+http://www.gapingvoid.com/Moveable_Type/archives/2005_01.html
+http://www.gapsemc.com/national/thumbsup.html
+http://www.garage-toys.com/fo25foflho.html
+http://www.garagegames.com/mg/projects/tge/
+http://www.garantibank.com/welcome/cr_nature.html
+http://www.garden-birds.co.uk/guestbook/archive/guestbk03h.htm
+http://www.garden.co.uk/acatalog/THE_GARDEN_PHARMACY__ELECTRICAL_GOODS_13.html
+http://www.garden.co.uk/acatalog/THE_GARDEN_PHARMACY__Electrical_goods_13.html
+http://www.gardenadvice.com/index.cfm/fuseaction/basics.detail/basicsId/105831/catId/31293
+http://www.gardenadvice.com/index.cfm/fuseaction/basics.detail/basicsId/106406/catId/23598
+http://www.gardenadvice.com/index.cfm/fuseaction/basics.detail/basicsId/106440/catId/31257
+http://www.gardenartisans.com/accents.html
+http://www.gardenbuddies.com/forum/messages/4450/1124421.html
+http://www.gardendigest.com/trees2.htm
+http://www.gardenforever.com/pages/artwater.htm
+http://www.gardenguides.com/articles/raisedbedgarden2.htm
+http://www.gardenguides.com/forum/showthread.php?t=10238
+http://www.gardenguides.com/forum/showthread.php?t=11809&page=1
+http://www.gardenguides.com/forum/showthread.php?t=6103&goto=nextoldest
+http://www.gardeningnhc.org/rental_weddings.asp
+http://www.gardenlighting.co.uk/review.asp
+http://www.gardenofdemocracy.org/programmed_to_fail.html
+http://www.gardenofdemocracy.org/transylvania_lecture.html
+http://www.gardenofpraise.com/ibdbell.htm
+http://www.gardenscape.com/GSMagsBooks.html
+http://www.gardenscape.com/GSResources.html
+http://www.gardensonline.com.au/HowToShop/Policies.asp
+http://www.gardenvisit.com/garden_product/design/methods/twelve_things.htm
+http://www.gardenvisit.com/got/17/11.htm
+http://www.garella.com/rich/camret.htm
+http://www.garhwalhimalayas.com/feel_garhwal/fairs_festivals/
+http://www.garlic.com/~tgracyk/value.htm
+http://www.garlikov.com/EPFE/chap19.htm
+http://www.garlikov.com/EPFE/chap21.htm
+http://www.garlikov.com/Soc_Meth.html
+http://www.garlikov.com/philosophy/Tolerance.html
+http://www.garlikov.com/philosophy/majorityrule.htm
+http://www.garments.globalsources.com/gsol/I/Embroidered-emblem/a/9000000064290.htm
+http://www.garmin.com/cartography/mapSource/citynavMideast.jsp
+http://www.garnertedarmstrong.ws/Mark_Wordfroms/Euro1/euro1-17.shtml
+http://www.garnertedarmstrong.ws/breaking.shtml
+http://www.garp.com/risknews/newsfeed.asp?Category=31&MyFile=2004-11-18-9744.html
+http://www.garrettfineteas.com/index.asp?PageAction=Custom&ID=8
+http://www.garretthardinsociety.org/articles/articles.html
+http://www.garswoodsaintswfc.co.uk/computer-course/leading-to-mcse.html
+http://www.gartnerg2.com/research/rpt-0102-0010.asp
+http://www.garyfeldman.com/a_who-realtor-agent-broker.asp
+http://www.garynull.com/Documents/Continuum/HIVATZPart1.htm
+http://www.garynull.com/Documents/Continuum/VentilatingAnAIDSPatient.htm
+http://www.garynull.com/Documents/erf/TheImportanceOfVisionPartI.htm
+http://www.garynull.com/Documents/erf/philadelphia_dumps_on_the_poor.htm
+http://www.garynull.com/Documents/niceeasy.htm
+http://www.garynull.com/Documents/spirit/50adventures.htm
+http://www.garypnunn.com/news-greatness.php
+http://www.gasandoil.com/ogel/samples/freearticles/article_62.htm
+http://www.gasandoil.com/ogel/samples/freearticles/article_75.htm
+http://www.gasandoil.com/ogel/samples/freearticles/roundup_14.htm
+http://www.gasnet.org/societies/apsf/clinical_safety/adverse_event.php
+http://www.gastonchamber.com/ProgramofWork2005.htm
+http://www.gasunie.nl/nv/en/12.htm
+http://www.gatech.edu/accessibility/
+http://www.gatech.edu/news-room/archive/news_releases/light-life.html
+http://www.gatech.edu/news-room/release.php?id=96
+http://www.gatesfoundation.org/MediaCenter/Speeches/BillgSpeeches/BGSpeechNGA-050226.htm
+http://www.gateway.com/work/cp/solutions/case_study.shtml
+http://www.gateway2russia.com/st/art_220533.php
+http://www.gatewaycenter.com/events/events.html
+http://www.gatewaynewspapers.com/southhillsrecord/focus/40293/
+http://www.gateworld.net/movies/02.shtml
+http://www.gatherthewomen.org/gtw/join_us.htm
+http://www.gaudiclub.com/ingles/i_links/sfdes04.asp
+http://www.gavilan.edu/jobs/jobs.html
+http://www.gawa.asn.au/competitions.htm
+http://www.gawker.com/news/culture/blogs/index.php
+http://www.gawker.com/news/culture/jonathan-cheban/my-foray-into-masochism-dinner-with-jonathan-cheban-031611.php
+http://www.gawker.com/news/culture/movies-celebs/index.php
+http://www.gawker.com/news/culture/stalker/index.php
+http://www.gawker.com/news/culture/star-jones/index.php
+http://www.gawker.com/news/media/commentary/index.php
+http://www.gawwk.co.uk/i/clothes%20shopping.html
+http://www.gay.com/support/click.html$rg/5374,80398,c:/health/hiv/news/?date=2004/12/28/3&navpath=channels/health/mental
+http://www.gaycanada.com/pflag-york/our.html
+http://www.gaycenter.org/program_folders/rogram.2004-09-24.6037303604/program_view
+http://www.gaycitynews.com/gcn.356/bombshellcitylacksaids.html
+http://www.gaycitynews.com/gcn_419/acollectiveeffortat.html
+http://www.gaydarthemovie.com/making/producing.html
+http://www.gaydaze.com/feb96/eric/e-60225.htm
+http://www.gaygardener.com/quotes/quotes7.phtml
+http://www.gayhomes.net/rickandsteve/eatingout/eatingcast.htm
+http://www.gayleborden.com/about_us.htm
+http://www.gayot.com/travel/citytrips/nice.html
+http://www.gayoutdoors.org/page.cfm?sectionid=117&typeofsite=snippets&parent=153
+http://www.gaypsychotherapy.com/relstyle.htm
+http://www.gayscribe.com/readingroom/coors.htm
+http://www.gayspirituality.freeservers.com/mirrors.html
+http://www.gaytoz.com/bevents.asp
+http://www.gaywork.com/
+http://www.gayyouthuk.org.uk/speakout/index.phtml
+http://www.gazette.net/200522/princegeorgescty/county/278495-1.html
+http://www.gbacg.org/Patterns/butterick.htm
+http://www.gbairways.com/legal/conditions/term8/
+http://www.gbarto.com/turkey/
+http://www.gbax.com/
+http://www.gbg.bonet.se/bwf/art/industrialTies.html
+http://www.gbgm-umc.org/methchsrilan/SERMON.HTM
+http://www.gblaw.com/news.asp?newsID=18
+http://www.gbn.com/PageDisplayServlet.srv?page=legal
+http://www.gbnet.net/worksys/diplomat/techsum.htm
+http://www.gbrmpa.gov.au/corp_site/info_services/library/resources/online_catalogue.html
+http://www.gbrmpa.gov.au/corp_site/info_services/science/research_priorities/search.html?group=2
+http://www.gbrownc.on.ca/communityservices/programs.html
+http://www.gbtc.org/whatelse.html
+http://www.gcal.ac.uk/radicalglasgow/chapters/tom_bell.html
+http://www.gcc.edu/alumni/giving/outright/default.htm
+http://www.gcc.tas.gov.au/site/page.cfm?u=216
+http://www.gccni.org.uk/education/
+http://www.gcic.peachnet.edu/CRN/goingtohsTEXT.htm
+http://www.gcis.gov.za/docs/portcom/02creative.html
+http://www.gcis.gov.za/media/cabinet/020807.htm
+http://www.gcis.gov.za/media/ceo/020727.htm
+http://www.gcn.com/24_15/dodcomputing/36065-1.html
+http://www.gcn.com/research_results/cybersecurity2.html
+http://www.gcn.com/vol18_no34/guide/781-1.html
+http://www.gcpiano.us/piano_course_application.htm
+http://www.gcrio.org/CONSEQUENCES/vol3no1/biodiversity.html
+http://www.gcrio.org/CONSEQUENCES/vol4no1/carbcycle.html
+http://www.gcrta.org/schedules/rt2sa.html
+http://www.gcsaa.org/gcm/2005/june05/06feature2.asp
+http://www.gcsp.ch/e/training/Out-of-Geneva/SEE/Index.htm
+http://www.gcsrw.org/
+http://www.gct-chinese-translation.com/chinese-services/mandarin-translation.htm
+http://www.gct.org/aug04_1.html
+http://www.gct.org/may04_1.html
+http://www.gdarkness.com/theatre.html
+http://www.gdconf.com/conference/seriousgames.htm
+http://www.gdconf.com/schedule/descriptions.htm
+http://www.gdi-solutions.com/
+http://www.gdr.org/newsletter1.htm
+http://www.gdrc.org/icm/micro/sonfield-barbato.html
+http://www.gdusa.com/lookout/3_03.php
+http://www.ge.com/en/subidea/
+http://www.ge.com/stories/en/10897.html?category=Products_Business
+http://www.geafiltration.com/html/product_services/pilot_testing.html
+http://www.gearbits.com/archives/000620.html
+http://www.gearlive.com/index.php/news/article/the_final_cut_look_hitchhikers_guide_movie_history_04280358/
+http://www.gebible.org/jesus.html
+http://www.geda.co.za/Default.asp?index=9913&ID=233&sub=2
+http://www.geda.co.za/default.asp?index=9913&ID=233&sub=2
+http://www.geek.com/news/geeknews/2001dec/chi20011203009120.htm
+http://www.geek.com/news/geeknews/2001jan/pda20010202004119.htm
+http://www.geek.com/news/geeknews/2002mar/gee20020321010825.htm
+http://www.geek.com/news/geeknews/2003Sep/bpd20030915021752.htm
+http://www.geek.com/news/geeknews/2004Aug/fea20040827026692.htm
+http://www.geek.com/news/geeknews/2004Dec/bch20041214028248.htm
+http://www.geek.com/news/geeknews/2004Jun/fea20040611025542.htm
+http://www.geek.com/news/geeknews/2004Jun/ran20040611025542.htm
+http://www.geek.com/news/geeknews/2004May/bga20040507025046.htm
+http://www.geek.com/news/geeknews/2005Jun/gee20050608030846.htm
+http://www.geek.com/pdageek/newsletter/nlpda08182000.htm
+http://www.geeknewscentral.com/
+http://www.geeknewscentral.com/archives.html
+http://www.geekslut.org/archive/04/09/23/
+http://www.geeksnet.com/faq/faq2.htm
+http://www.geektastic.com/archives/2004_11.php
+http://www.geekwithglasses.com/index.php?display=archives.php
+http://www.geelongcollege.vic.edu.au/com_archives_100_7.html
+http://www.gegenstandpunkt.com/english/northire.html
+http://www.gehealthcare.com/usen/education/patient_channel/tpc_faq_general.html
+http://www.geist.com/notes/issue.php?id=46
+http://www.gelcandlemaking.com/section4.html
+http://www.gem-werc.org/mmrc/mmrc9729.htm
+http://www.gemcal.com/mogok.htm
+http://www.gemdatabase.org/GEMDatabase/BrowseTitles.asp?curpage=30
+http://www.gemedicalsystemseurope.com/euen/monitor/homepage_perinatal.html
+http://www.gemini.no/english/technology_en.asp
+http://www.gemstone.org/gem-by-gem/english/garnet.html
+http://www.gemut.com/News.asp?NewsID=30
+http://www.gemut.com/News.asp?NewsID=33
+http://www.gemut.com/news.asp?NewsID=30
+http://www.gen-probe.com/career_op/index.asp
+http://www.gencourt.state.nh.us/rsa/html/XXXVIII/421-B/421-B-11.htm
+http://www.gender.org.uk/derby/history.htm
+http://www.gendergap.com/elections.htm
+http://www.gendertrust.org.uk/showarticle.php?aid=14
+http://www.genderweb.org/family/gfam4.html
+http://www.gene.ucl.ac.uk/anhumgen/guide-to-authors-2002.htm
+http://www.genealinks.com/marriages/nc.htm
+http://www.genealogyforum.rootsweb.com/gfaol/beginners/Unk4.htm
+http://www.genealogysf.com/Houk-p/p31.htm
+http://www.genealogyweb.com/coatofarms.htm
+http://www.genecampaign.org/archive21.html
+http://www.geneletter.com/page434.htm
+http://www.genelevine.com/toc/assett/toc-assett-chap3.htm
+http://www.genelevine.com/toc/assett/toc-assett.htm
+http://www.genencor.com/wt/gcor/pr_1030661380
+http://www.geneontology.org/GO.evidence.shtml
+http://www.geneontology.org/GO.usage.shtml
+http://www.generalsjoes.com/
+http://www.generation-europe.eu.com/default.asp?sid=110&cid=1100
+http://www.generation-online.org/t/metropolis.htm
+http://www.generationterrorists.com/quotes/firstlines.html
+http://www.generativeart.com/papersga2003/b29.htm
+http://www.genesciences.com/DNAjobsNews/17Dec04.htm
+http://www.genesdev.org/cgi/content/full/14/6/704
+http://www.geneseo.edu/~bicket/panop/topic_semiotic.htm
+http://www.genesiscenters.com/html/Growing_Baby_Businesses.html
+http://www.genesyslab.com/about/news_events/archives/2005/february/gets.asp
+http://www.genetics-and-society.org/resources/items/20041108_biocentury_usdin.html
+http://www.genetics.com.au/factsheet/04.htm
+http://www.genetics.org/cgi/content/full/153/3/1077
+http://www.geneva.ch/genevaguidengCorporationswiss.htm
+http://www.genevac.com/info/atex.html
+http://www.genevacsd.org/curriculum_mapping_science_grade%202.htm
+http://www.geni.org/globalenergy/library/media_coverage/SanDiegoUnionTribune/Power-sharing/Power-sharing.shtml
+http://www.geniushealth.com/
+http://www.geniuspapers.com/index.cfm?page=access
+http://www.genlytethomas.com/pdf/conflictgenlyte.pdf?A=398&B=419
+http://www.genocidewatch.org/BurundianpeacetalksMay2003.htm
+http://www.genome.gov/10001220
+http://www.genome.gov/10001707
+http://www.genome.org/cgi/content/abstract/13/6b/1360
+http://www.genome.org/cgi/content/full/11/6/923
+http://www.genome.org/cgi/content/full/12/7/1091
+http://www.genome.org/cgi/content/full/13/3/347
+http://www.genomenewsnetwork.org/articles/2004/03/04/sargasso.php
+http://www.genpoint.com/Files/news.html
+http://www.gensteel.com/
+http://www.gentel.net/intheloop/
+http://www.gentheoryrubbish.com/
+http://www.gentlebirth.org/archives/comfort.html
+http://www.gentlebirth.org/archives/emotionl.html
+http://www.gentlegiantsrescue.com/adoptions_page_2.htm
+http://www.gentletouchsweb.com/
+http://www.genuineblog.com/
+http://www.genuki.org.uk/big/eng/YKS/ARY/York/YorkHistory6.html
+http://www.genuki.org.uk/big/eng/YKS/Misc/Descriptions/ERY/ERYDescription2.html
+http://www.genuki.org.uk/big/eng/YKS/Misc/MIs/ARY/YorkMinsterBurials5.html
+http://www.genuki.org.uk/big/eng/YKS/Misc/Transcriptions/ARY/YorkMinsterMarriages1.html
+http://www.genuki.org.uk/big/eng/civreg/
+http://www.genworth.com/genworth/terms.jsp
+http://www.genzyme.com/corp/media/GENZ%20PR-110404.asp
+http://www.geo-logistics.com/WTR_Customs/incoterms.asp
+http://www.geo.cornell.edu/geology/faculty/RWA/maintext.html
+http://www.geo.ed.ac.uk/home/hsy/hsy.html
+http://www.geo.hunter.cuny.edu/~mpavlov/Courses/GisSG/MasteryEx4.html
+http://www.geo.msu.edu/geo333/Oil&gas.html
+http://www.geo.msu.edu/geo333/fires_ii.html
+http://www.geo.utep.edu/pub/keller/AGuideforTeachers.html
+http://www.geobop.com/education/Unions/
+http://www.geobytes.com/GeoNetMap.htm
+http://www.geocities.com/AgencyCBS/write.html
+http://www.geocities.com/Area51/Cavern/1841/pds/pds15.htm
+http://www.geocities.com/Area51/Rampart/2060/rules/slamgen.html
+http://www.geocities.com/Area51/Shadowlands/4077/boost.html
+http://www.geocities.com/Area51/Stargate/5103/cryptofiction/moth.html
+http://www.geocities.com/Athens/1534/ruleaug.html
+http://www.geocities.com/Athens/2705/mediarel.html
+http://www.geocities.com/Athens/3682/lord_nelson.html
+http://www.geocities.com/Athens/8945/links.html
+http://www.geocities.com/Athens/Academy/8395/rose.html
+http://www.geocities.com/Athens/Academy/9594/
+http://www.geocities.com/Athens/Academy/9594/tibet.html
+http://www.geocities.com/Athens/Acropolis/4198/rh/0199.html
+http://www.geocities.com/Athens/Acropolis/7001/alrm.htm
+http://www.geocities.com/Athens/Acropolis/8141/halftracks.html
+http://www.geocities.com/Athens/Acropolis/9669/kerala.htm
+http://www.geocities.com/Athens/Aegean/4217/theory.html
+http://www.geocities.com/Athens/Aegean/6354/mla.html
+http://www.geocities.com/Athens/Atlantis/6689/aspects.html
+http://www.geocities.com/Athens/Atrium/5924/forensicscienceactivites.htm
+http://www.geocities.com/Athens/Delphi/1088/natives/sitting.htm
+http://www.geocities.com/Athens/Delphi/1880/spiller/spiller.html
+http://www.geocities.com/Athens/Forum/1611/sins22lies19.html
+http://www.geocities.com/Athens/Forum/5037/Hist.html
+http://www.geocities.com/Athens/Forum/5037/ILS4.html
+http://www.geocities.com/Athens/Forum/6811/yalp/
+http://www.geocities.com/Athens/Olympus/8161/program/busadmin/bcourses.html
+http://www.geocities.com/Athens/Oracle/2351/petro.html
+http://www.geocities.com/Athens/Oracle/2528/br_polideal.htm
+http://www.geocities.com/Athens/Parthenon/4052/laylinin.htm
+http://www.geocities.com/Athens/Parthenon/6528/avoid.htm
+http://www.geocities.com/Athens/Parthenon/6528/peniel.htm
+http://www.geocities.com/Athens/Sparta/6997/rorty.html
+http://www.geocities.com/Athens/Troy/1791/rapallo.html
+http://www.geocities.com/Athens/Troy/3869/Robins.html
+http://www.geocities.com/BourbonStreet/3754/finalround.html
+http://www.geocities.com/BourbonStreet/4587/artcas9.html
+http://www.geocities.com/BourbonStreet/Bayou/1088/int.html
+http://www.geocities.com/Broadway/1906/r_buffy6.html
+http://www.geocities.com/Broadway/1928/pink_hair.htm
+http://www.geocities.com/Broadway/6384/Memoriam/mmoline.html
+http://www.geocities.com/Broadway/Alley/3765/trail7.html
+http://www.geocities.com/Broadway/Stage/2203/SMhandbook.html
+http://www.geocities.com/CapeCanaveral/Hall/9304/
+http://www.geocities.com/CapitolHill/1320/page3.html
+http://www.geocities.com/CapitolHill/1931/secB3.html
+http://www.geocities.com/CapitolHill/1931/secB7.html
+http://www.geocities.com/CapitolHill/5202/canada.html
+http://www.geocities.com/CapitolHill/Embassy/7213/links.html
+http://www.geocities.com/CapitolHill/Lobby/2379/FAILED.HTM
+http://www.geocities.com/CapitolHill/Lobby/2379/echmatt.htm
+http://www.geocities.com/CapitolHill/Parliament/2398/home.htm
+http://www.geocities.com/CapitolHill/Parliament/2398/posts.html
+http://www.geocities.com/CapitolHill/Parliament/4018/when_i_first_arrived_in_montreal.htm
+http://www.geocities.com/CollegePark/6174/eat-dog-groak.htm
+http://www.geocities.com/CollegePark/Quad/6460/CW/index2.html
+http://www.geocities.com/Colosseum/8682/heavy/basic.htm
+http://www.geocities.com/Colosseum/Dugout/4143/
+http://www.geocities.com/Colosseum/Park/2070/KOOLFAQ.HTM
+http://www.geocities.com/Heartland/6508/BLUE.HTM
+http://www.geocities.com/Heartland/7006/psychopolitics.html
+http://www.geocities.com/Heartland/Acres/6826/rhs2.htm
+http://www.geocities.com/Heartland/Fields/1759/volone/dat13.htm
+http://www.geocities.com/Heartland/Prairie/7305/may.htm
+http://www.geocities.com/Heartland/Valley/2822/miles_davis.html
+http://www.geocities.com/Heartland/Valley/7259/earlylife.html
+http://www.geocities.com/Hollywood/6952/7earlyreview.html
+http://www.geocities.com/Hollywood/Bungalow/5014/BREAKING_NEWS.html
+http://www.geocities.com/Hollywood/Cinema/9894/prequels.htm
+http://www.geocities.com/Hollywood/Derby/3267/25.html
+http://www.geocities.com/Hollywood/Hills/7336/503.htm
+http://www.geocities.com/Hollywood/Set/7601/acting.htm
+http://www.geocities.com/HotSprings/2455/asparwt.html
+http://www.geocities.com/MadisonAvenue/Lobby/4500/
+http://www.geocities.com/MotorCity/Downs/6995/archiveindex/fuelcrisis.html
+http://www.geocities.com/Nashville/Stage/7799/hitrecords.htm
+http://www.geocities.com/Paris/2809/peter06.html
+http://www.geocities.com/Pentagon/Bunker/3974/dec98.html
+http://www.geocities.com/Pentagon/Quarters/1975/g_itawna.htm
+http://www.geocities.com/Petsburgh/Fair/3341/
+http://www.geocities.com/RainForest/Canopy/5322/molybdenum.html
+http://www.geocities.com/RainForest/Vines/4825/82sfh-bylaws2001-r1.1.html
+http://www.geocities.com/SoHo/1422/vatican_time_machine.html
+http://www.geocities.com/SoHo/Coffeehouse/4587/others3.html
+http://www.geocities.com/SoHo/Studios/9526/fable018.htm
+http://www.geocities.com/SouthBeach/1285/wedding.html
+http://www.geocities.com/SouthBeach/Port/2470/bio.html
+http://www.geocities.com/SunsetStrip/Bistro/7458/cos/cos.htm
+http://www.geocities.com/TelevisionCity/8627/scrpt110.html
+http://www.geocities.com/TelevisionCity/Lot/2701/Lost2.html
+http://www.geocities.com/TheTropics/3328/navy.htm
+http://www.geocities.com/TheTropics/Island/6810/ivan/lasttown.html
+http://www.geocities.com/TimesSquare/Dungeon/1257/parents2.html
+http://www.geocities.com/Wellesley/4281/groundhog98.htm
+http://www.geocities.com/WestHollywood/Park/6443/Christmas/santa_story.html
+http://www.geocities.com/WestHollywood/Park/6443/Jews/fundamental1.html
+http://www.geocities.com/WileyMike/DenverLyrics.html
+http://www.geocities.com/Yosemite/1015/g1.htm
+http://www.geocities.com/Yosemite/9173/legoland.html
+http://www.geocities.com/acceatherton/html/lawsuit.htm
+http://www.geocities.com/acceatherton/html/letter2.htm
+http://www.geocities.com/aer_mcr/irdance/irdance.html
+http://www.geocities.com/aer_mcr/libjob/interview.html
+http://www.geocities.com/alienaxioms/addicted_automaton.html
+http://www.geocities.com/alienaxioms/alien_god.html
+http://www.geocities.com/apartment_garden/
+http://www.geocities.com/archiebaldsinclair/
+http://www.geocities.com/athens/acropolis/7001/alrm.htm
+http://www.geocities.com/bcbcollegeuk/Information.htm
+http://www.geocities.com/beezer542/2fstanley.htm
+http://www.geocities.com/bethlehem_soccer/gl070722.html
+http://www.geocities.com/bobarnebeck/ch11.html
+http://www.geocities.com/canadian_sf/pages/media/czerneda_interview.htm
+http://www.geocities.com/canadiancelticarts/2005.html
+http://www.geocities.com/catts_way/
+http://www.geocities.com/chessdp/ttchsrules.htm
+http://www.geocities.com/china_e_lobby/03April2002.html
+http://www.geocities.com/china_e_lobby/24September2003.html
+http://www.geocities.com/chtn_nhatrang/grandmother.html
+http://www.geocities.com/craigmaxim/f-4a.html
+http://www.geocities.com/craigsbookclub/sorrywrong.html
+http://www.geocities.com/creche_school/
+http://www.geocities.com/d-patanella/boop.html
+http://www.geocities.com/davidnicholson_99/GovDebate.htm
+http://www.geocities.com/dcjarviks/Idler/vIIIn114.html
+http://www.geocities.com/denisev2/spd_fine_motor_tasks.html
+http://www.geocities.com/doccnagel/satire/computerads.html
+http://www.geocities.com/dosser2/decadetopten.html
+http://www.geocities.com/dyancey3/lutheran.htm
+http://www.geocities.com/ecm_grrl/The_chance_to_say_Goodbye.htm
+http://www.geocities.com/endtimedeception/robert.htm
+http://www.geocities.com/erslyman/newpoems.html
+http://www.geocities.com/evophonic/methods.html
+http://www.geocities.com/fineyoungsocialist/co.d.html
+http://www.geocities.com/freethoughtmecca/bismilwarda.html
+http://www.geocities.com/gameshowguy2000/WINNINGLINES.htm
+http://www.geocities.com/gamut_mag/neverland.htm
+http://www.geocities.com/gedojudea/gundam/zechs2.html
+http://www.geocities.com/giantfideli/CellNEWS_Human_Cloning_Race_Is_On.html
+http://www.geocities.com/grubbymitts/page1.html
+http://www.geocities.com/harlaquinn_2000/fictionsuits.html
+http://www.geocities.com/heluoarticles/art_nfsm_10.htm
+http://www.geocities.com/henry_diamond/russian.htm
+http://www.geocities.com/hiromimw/NYtea.html
+http://www.geocities.com/hislantern/PhysicianLooks.htm
+http://www.geocities.com/historymech/3polarization.html
+http://www.geocities.com/hmelberg/papers/001027.htm
+http://www.geocities.com/hmelberg/papers/970818.htm
+http://www.geocities.com/howtodressemo/
+http://www.geocities.com/iamthekey_2000/jackvanimpe.html
+http://www.geocities.com/icmmclubs/ICMMClubs.htm
+http://www.geocities.com/jeangrey1021/images.html
+http://www.geocities.com/jingram05/Plant2.htm
+http://www.geocities.com/jkeeler415/rest_event_main.html
+http://www.geocities.com/juventusfootball/extra/extra.htm
+http://www.geocities.com/koalakid_1999/UNIVERSITY/vertical.html
+http://www.geocities.com/meagsdream/MeagsDream.html
+http://www.geocities.com/metisnation/culturedog.html
+http://www.geocities.com/mirrorplanets/
+http://www.geocities.com/missionalia/links.htm
+http://www.geocities.com/mizzenwood/shop6.htm
+http://www.geocities.com/mjsayers/owtext.html
+http://www.geocities.com/mknemesis/homerun.html
+http://www.geocities.com/mollyjoyful/marriage.html
+http://www.geocities.com/mr-ostomy/XFilesonostomates.htm
+http://www.geocities.com/mrbeaverfalls/season3.html
+http://www.geocities.com/mukmirai/newssummery3.html
+http://www.geocities.com/munichseptember1972/bloodmoney.htm
+http://www.geocities.com/nigat_uk/BAAT20.html
+http://www.geocities.com/nodotus/hbglass.html
+http://www.geocities.com/noelcox/Diana.htm
+http://www.geocities.com/nzclimbing/guides/farmpark.html
+http://www.geocities.com/ojochan/Namie/style.html
+http://www.geocities.com/onelibrarian.geo/
+http://www.geocities.com/operationshekhinah/one.html
+http://www.geocities.com/ottopallone/tmovies/tomorrow.html
+http://www.geocities.com/p_nut84/lyrics/aliceinchains.html
+http://www.geocities.com/pharsea/RightsOfWrong.html
+http://www.geocities.com/pmj6/
+http://www.geocities.com/presidentialspeeches/1972.htm
+http://www.geocities.com/princeofpeace_07508/Therese.html
+http://www.geocities.com/pythoninsanity/Season3Episode9.html
+http://www.geocities.com/r_deruvo/
+http://www.geocities.com/roboplanes/cessna.html
+http://www.geocities.com/sandychan87/vacation.html
+http://www.geocities.com/sarahmcraig/fam_friends.html
+http://www.geocities.com/saudhouse_p/blood,.htm
+http://www.geocities.com/script_maker33/atwt/scripts01/pr-5-16-02.html
+http://www.geocities.com/sdontrelle/kidsplash/gameshowworld/misc.htm
+http://www.geocities.com/sentryusa2000/reinventtreason.htm
+http://www.geocities.com/sheenaghpugh/folkmusic.html
+http://www.geocities.com/sixtyfourth_ovi/fies_sultana.html
+http://www.geocities.com/smvgrey/signs.html
+http://www.geocities.com/socialistparty/socview/svspring01H.htm
+http://www.geocities.com/sscwon/t21mill.html
+http://www.geocities.com/starheavens_2000/timeline.htm
+http://www.geocities.com/stevestravelguides/ljubljana.htm
+http://www.geocities.com/stgregorysabbey/vocation.html
+http://www.geocities.com/stlaasr/msa1937.html
+http://www.geocities.com/tangawarra/paulwri4.html
+http://www.geocities.com/televisioncity/set/8681/ltlinks.html
+http://www.geocities.com/the_right_turn2003/conservativecorner.html
+http://www.geocities.com/the_wanderling/meeting.html
+http://www.geocities.com/thekickinggame/FGandPAT.htm
+http://www.geocities.com/thenietzschechannel/bgept1.htm
+http://www.geocities.com/vamosness/bruce.htm
+http://www.geocities.com/waddly/york.html
+http://www.geocities.com/willboyne/nosurrender/PotatCom.html
+http://www.geocities.com/willboyne/nosurrender/ws.html
+http://www.geocities.com/wilsontctc/Step_6_How_signplanethouse_meanings_interact.htm
+http://www.geocities.com/xpatriot_1999/One/SJCnorth.html
+http://www.geocities.com/ycgf/arti_TBX.htm
+http://www.geocities.com/yes125/
+http://www.geocities.com/zen_appeal/tipofthemonth.html
+http://www.geocities.com/~abdulwahid/muslimarticles/khutbah.html
+http://www.geocities.com/~bblair/france_twp.htm
+http://www.geocities.com/~bblair/reflections_twp.htm
+http://www.geocities.com/~chronopublish/chronotrigger/
+http://www.geocities.com/~daburton/barnwell/highl.html
+http://www.geocities.com/~johngray/wcon103.htm
+http://www.geocities.com/~pack215/webelos-cere.html
+http://www.geocities.com/~pamsway/karipray.html
+http://www.geocities.jp/cosmos_akino/english/sentence4.html
+http://www.geoffhook.com/archive/2000/
+http://www.geoffrey.com.au/interview_nk.htm
+http://www.geoffrey.com.au/review.htm?ID=14
+http://www.geog.gla.ac.uk:443/staff/hlorimer
+http://www.geog.port.ac.uk/hist-bound/country_rep/poland.htm
+http://www.geog.ubc.ca/graduate/getready.html
+http://www.geog.ucsb.edu/more/history_articles/history_saga_chapter10.htm
+http://www.geog.ucsb.edu/~jeff/115a/lectures/camera_systems.html
+http://www.geog.ucsb.edu/~jeff/sb_69oilspill/69oilspill_articles2.html
+http://www.geography.btinternet.co.uk/reviews4.htm
+http://www.geography.org.uk/theme/theme_archive.asp
+http://www.geography.wisc.edu/classes/geog360/ExamTwoAnswer.htm
+http://www.geographyfieldwork.com/VisitorsBookRead.htm
+http://www.geographypages.co.uk/ictkey4.htm
+http://www.geographypages.co.uk/issue45.htm
+http://www.geomancy.org/secular_space/secular.html
+http://www.geonet.org.nz/mmi.html
+http://www.geonsoul.com/journal/archives/2001_04.htm
+http://www.george-orwell.org/The_Road_to_Wigan_Pier/4.html
+http://www.george.net.au/
+http://www.george.site.btinternet.co.uk/lightyear/lightyearcontd5.html
+http://www.georgedillon.com/theatre/graft_programme_note.shtml
+http://www.georgedillon.com/theatre/the_gospel_of_matthew_programme.shtml
+http://www.georgeformby.co.uk/ladies/gregory/biog.htm
+http://www.georgegoldsmith.com/info/terms.html
+http://www.georgesmay.com/html/our_clients/clients/dewitt.cfm
+http://www.georgetown.edu/bassr/garden.html
+http://www.georgetown.edu/centers/woodstock/business_ethics/hc-news1.htm
+http://www.georgetown.edu/crossroads/AmericanStudiesAssn/newsletter/archive/articles/pokrovsky.html
+http://www.georgetown.edu/crossroads/AmericanStudiesAssn/newsletter/archive/newsarchive/iwtaskforce.html
+http://www.georgetown.edu/crossroads/guide/engines.html
+http://www.georgetown.edu/faculty/ap85/papers/
+http://www.georgetown.edu/faculty/ap85/papers/MaternalLoveandAbortion.html
+http://www.georgetown.edu/faculty/millwarj/
+http://www.georgetown.edu/honor/plagiarism.html
+http://www.georgetown.edu/labyrinth/conf/cs95/papers/moran.html
+http://www.georgetown.edu/research/scdp/News.htm
+http://www.georgetown.edu/sfs/programs/clas/profs/rking/rkcv.htm
+http://www.georgetown.edu/tamlit/teaching/getz.html
+http://www.georgianc.on.ca/hr/proced/sect2/pro2_102.htm
+http://www.georgianc.on.ca/hr/proced/sect5/pro5_105.htm
+http://www.georgiarugbyunion.org/
+http://www.georgiarugbyunion.org/index.php?menu=01
+http://www.georgiascienceteacher.org/
+http://www.geosociety.org/news/pr/01-03.htm
+http://www.geosociety.org/pubs/gsatoday/gsat0006.htm
+http://www.geospectra.net/kite/equip/equip.htm
+http://www.geotimes.org/july00/scene.html
+http://www.gerardkeegan.co.uk/glossary/gloss_c.htm
+http://www.gerardtruffle.com/gerard.htm
+http://www.gerber.com/phase/devcontent?phase=9
+http://www.geriatricsyllabus.com/syllabus/main.jsp?cid=SGS-VIS-4-2
+http://www.german-claims.com/articlelj2.htm
+http://www.german-way.com/german/gwlistarch04.html
+http://www.germanbritishchamber.co.uk/en/links.php
+http://www.germanculture.com.ua/library/weekly/aa022801a.htm
+http://www.germanculture.com.ua/recipes/blbak11.htm
+http://www.germanembassy-singapore.org.sg/en/willkommen/visa/visa_non_sing.html
+http://www.germanfoods.org/consumer/germancomfortfoods.cfm
+http://www.germanlawjournal.com/article.php?id=550
+http://www.germanmart.com/mainstore/content/products/mats-jonasson.asp
+http://www.germantown.k12.il.us/indians/woodland2.html
+http://www.germanunited.com/en/programs/tvmovies/tvmovies08.html
+http://www.germany-tourism.co.uk/pages/camping.html
+http://www.germany-tourism.de/e/business_travel.html
+http://www.germany-tourism.de/e/culinary_route_north_rhine_westphalia.html
+http://www.gerrold.com/
+http://www.gerrymkaye.org/marriage.html
+http://www.gertzfile.com/gertzfile/ring031601.html
+http://www.gesource.ac.uk/hazards/Tornadoes-photography.html
+http://www.gesource.ac.uk/roads/cgi-bin/browsesql.pl?limit=0&subject=363.8&toplevel=environment
+http://www.getamped.co.uk/forum/index.php?showtopic=87
+http://www.getannoyed.com/general.htm
+http://www.getconnected.com/about/legal.asp?tag=f15
+http://www.getcreativeshow.com/seminars/seashells.htm
+http://www.getech.co.uk/security/about_the_getech_intrusion_detection_and_intrusion_prevention_systems_product_portfolio.htm
+http://www.geteducated.com/vug/oct01/vug1001e.htm
+http://www.getforme.com/accommodation_news.htm
+http://www.getintomedschool.com/recommendations.html
+http://www.getlive.co.uk/grandopera/?wid=32&rid=449
+http://www.getorganizednow.com/aboutus.html
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=2;t=002414
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=2;t=002533
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=2;t=002557
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=3;t=002924
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=3;t=002945
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=4;t=000486
+http://www.getorganizednow.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=7;t=001778
+http://www.getorganizednow.com/newbook.html
+http://www.getreading.co.uk/pfriendly.asp?intid=12188
+http://www.getreading.co.uk/story.asp?intid=12188
+http://www.getresponse.com/features.html
+http://www.getrolling.com/fit/resistance.html
+http://www.gettingconnected.org.uk/GCunits.htm
+http://www.gettingthemsober.com/cgi-shl/recwebbbs.pl?noframes;read=8693
+http://www.gettysburg.edu/it/compserv/student/joboppor.htm
+http://www.gettysburgtourguides.org/Dispatch/klingle.html
+http://www.geuatmsu.org/modules.php?name=Forums&file=viewtopic&t=40
+http://www.geuatmsu.org/modules.php?name=Forums&file=viewtopic&t=48&view=previous
+http://www.geus.dk/departments/quaternary-marine-geol/posters/littoral98-uk.htm
+http://www.gf.com.au/articles_269.htm
+http://www.gf.state.az.us/h_f/hunting_units_33.shtml
+http://www.gf9.com/
+http://www.gfamissions.org/saying.html
+http://www.gfk-macon.com/gfk_macon_news/0105_field%20service%20activity%20planning.htm
+http://www.gfkms.com/marketnews/newsarchiv.php/zeige=details&id=2379
+http://www.gfxartist.com/community/forum/68612
+http://www.gg.gov.au/speeches/textonly/speeches/2003/031113.html
+http://www.ggaengrs.com/projEdhigher.html
+http://www.gghc.org/about.cfm
+http://www.gguitars.com/electro.html
+http://www.gha.org/ContentMgr/presentdoc.asp?F=8183
+http://www.ghazi.de/society.html
+http://www.ghbkills.com/memorials.htm
+http://www.ghfordtea.com/history.htm
+http://www.ghi.com/members/understand/m_und_utilization.html
+http://www.ghostroadpress.com/
+http://www.ghosts.org/hellhouse2005.html
+http://www.ghostweb.com/ouija.html
+http://www.ghostwriters.org/poetry.htm
+http://www.gia.edu/newsroom/issue/2798/1362/insider_newsletter_details.cfm
+http://www.giac.org/certifications/security/
+http://www.giac.org/certified/certmatters/steven_drew.php
+http://www.gibbonslaw.com/publications/articlesuser2.cfm?pubid=965
+http://www.gibsondunn.com/practices/publications/detail/id/766/?pubItemId=7610
+http://www.gicare.com/pated/edtgs12.htm
+http://www.gicentre.com/en/hk_4.htm
+http://www.giconsultants.com/patiented.asp?ID=5
+http://www.giconsultants.com/patiented.asp?ID=9
+http://www.gidesigns.net/clearance.html
+http://www.gieson.com/school/flash/ActionScript/04_dotSyntax.html
+http://www.giftsforprofessionals.com/92545335-1179.html
+http://www.giftsforprofessionals.com/92545335-ag-08.html
+http://www.giftsforprofessionals.com/92599910-5707.html
+http://www.gigalaw.com/articles/2000-all/gall-2000-07-all.html
+http://www.gigalaw.com/articles/2000-all/kubiszyn-2000-05b-all.html
+http://www.gigalaw.com/articles/2000-all/smith-2000-06-all.html
+http://www.gigalaw.com/articles/2001-all/gall-2001-03-all.html
+http://www.gigalaw.com/articles/2004-all/ip-2004-03-p2.html
+http://www.giganews.com/useful_links.html
+http://www.gigaom.com/broadbandits/
+http://www.gigglepotz.com/sales.htm
+http://www.gignews.com/bizgamesites.htm
+http://www.gignews.com/careerfeatures/gamewriter.htm
+http://www.gignews.com/careerfeatures/hiringmanager.htm
+http://www.gigwise.com/contents.asp?contentid=3119
+http://www.gigwise.com/post.asp?TOPIC_ID=35262&method=TopicQuote
+http://www.gihyo.co.jp/magazine/SD/pacific/SD_0504.html
+http://www.gilad.co.uk/html%20files/blood.html
+http://www.gilead.com/wt/sec/pr_1067371563
+http://www.gilest.org/36.php3
+http://www.gilkatho.com.au/faqs/ViewItem.asp?ID=119
+http://www.gilli.net/gillimoon/articleartofproduction.htm
+http://www.gillingham-in-dorset.com/games.html
+http://www.gils.net/technical.html
+http://www.gimp.org/
+http://www.gimp.org/tutorials/Red_Eye_Removal/
+http://www.gingerbread.org.uk/wg20001.html
+http://www.gingergeezer.net/stinkfootstory.html
+http://www.gingerjive.co.uk/workshops.asp
+http://www.gingko.ch/cdrom/Haruki_20Murakami.asp
+http://www.ginini.com.au/tools/postcard-direct/
+http://www.ginini.com/software/postcard-direct/
+http://www.ginsengseed.com/brochure.html
+http://www.ginuwine.com/bio.html
+http://www.gio.gov.tw/taiwan-website/5-gp/join_who/2002/who_11.htm
+http://www.gippsland.org/WestSaleMigrant/Pages/times-article.html
+http://www.gipri.ch/spip/gipri_art78.html
+http://www.girl-mom.com/node/125
+http://www.girl-mom.com/node/view/107
+http://www.girlboards.com/ordersecure.htm
+http://www.girldatingtips.com/directory/Ethnic_Dating/
+http://www.girlfriendsmag.com/cover.html
+http://www.girlfromauntie.com/journal/index.php/2005/further-ruminations-on-ease/
+http://www.girlguides.ca/default.asp?id=103
+http://www.girlguides.org.nz/sp-events.asp
+http://www.girlguiding.org.uk/xq/asp/sID.183/aID.1119/qx/new/international/article.asp
+http://www.girlhoodhomecompanion.com/Peoria.htm
+http://www.girlontheright.com/
+http://www.girlpowernow.com/nutrition.html
+http://www.girlsarepretty.com/
+http://www.girlscouts-lonestar.org/volunteer/adult-training_leader.html
+http://www.girlscouts-lonestar.org/volunteer/adult-training_register.html
+http://www.girlscouts.net/f04_gadt.html
+http://www.girlscouts.org/for_adults/leader_magazine/2004_winter/third_culture_kids.asp
+http://www.girlscouts.org/program/gs_central/insignia/online/safety/11_17_safety_award.asp
+http://www.girlscouts.org/program/gs_central/leading_advising_faqs/default.asp
+http://www.girlscouts.org/who_we_are/history/low_biography/
+http://www.girlscoutsclc.org/internal.asp?name=Site&catID=4350&parentID=2374
+http://www.girlslife.com/dec04/youwroteit.php
+http://www.girlsontherun.org/why.htm
+http://www.girlsstuff.co.uk/terms.asp
+http://www.girr.org/girr/tips/tips4/tractive_effort_tests.html
+http://www.girton.cam.ac.uk/about/accommodation/livingout.html
+http://www.gis.net/~acentrik/AAUentryNov13.html
+http://www.gisajob.com/Information_Technology_jobs.html
+http://www.gisajob.com/jobs.cgi?j=3135707&m=more
+http://www.gisdevelopment.net/downloads/toolutil/
+http://www.gisdevelopment.net/magazine/years/2004/aug/jodhpur_project2.htm
+http://www.gismonitor.com/news/newsletter/archive/101002.php
+http://www.givemeliberty.org/
+http://www.givemeliberty.org/default.htm
+http://www.giveneyestosee.com/journal/2003_04_13_archive.html
+http://www.giving.umich.edu/leadersbest/fall2004/giftnews.htm
+http://www.giving.umn.edu/facts/glossary/
+http://www.giving.utoronto.ca/
+http://www.giving.utoronto.ca/osotf/student_ahmed.html
+http://www.givingforum.org/giving/planning/info-u3.htm
+http://www.givingnetwork.org/GNE_npsurvey.html
+http://www.givingtowestern.uwo.ca/ambassador/mahy.htm
+http://www.gizmag.com/goodthinking/
+http://www.gizmo.com.au/go/3503/
+http://www.gizmotron.org/mtml/mtxpl.html
+http://www.gjcc.org/news.htm
+http://www.gla.ac.uk/centres/disabilityresearch/projects.htm
+http://www.gla.ac.uk/departments/sociology/units/media/effects.htm
+http://www.gla.ac.uk/publications/leadingedge/4/diet.html
+http://www.gla.ac.uk:443/avenue/story.cfm?id=118&category=feature
+http://www.glaad.org/publications/resource_doc_detail.php?id=3771
+http://www.gladstoneparkchefs.co.uk/job_pages/chef_de_partie_jobs.htm
+http://www.gladwell.com/1998/1998_08_17_a_harris.htm
+http://www.gladwell.com/2002/2002_04_29_a_blowingup.htm
+http://www.gladwell.com/2002/2002_07_22_a_talent.htm
+http://www.gladwell.com/2002/2002_08_05_a_face.htm
+http://www.gladwell.com/2002/2002_08_12_a_heat.htm
+http://www.gladwell.com/2004/2004_12_13_a_picture.html
+http://www.gladwell.com/blink/
+http://www.gladwell.com/blink/blink_excerpt3.html
+http://www.glafreniere.com/sa_evolution.htm
+http://www.glafreniere.com/sa_scanner.htm
+http://www.glam.ac.uk/courses/detail2.php?id=1926&sfrom=easy&dosommat=stri
+http://www.glamorganantiques.co.uk/royalty.htm
+http://www.glasfit.co.za/scripts/products/res_glass_glossary.asp
+http://www.glasgow.gov.uk/en/AboutGlasgow/History/Cultural+Renaissance.htm
+http://www.glasgow.gov.uk/en/Residents/Environment/FloodPrevention/riverclydefloodprevention.htm
+http://www.glasgow.k12.ky.us/elem/sge/pages/martin%20luther.htm
+http://www.glasgowguide.co.uk/info-fame1.html
+http://www.glasgowsculpture.com/
+http://www.glass-pipes-water-bongs.com/
+http://www.glass.co.nz/johnwalshwalsh.htm
+http://www.glass.co.nz/tarsitano.html
+http://www.glass.org/indres/info.htm
+http://www.glassandpowder.com/
+http://www.glassandpowder.com/index.php?cPath=26_37_78_219
+http://www.glassandpowder.com/product_info.php?cPath=21_22_48&products_id=64
+http://www.glassandpowder.com/product_info.php?cPath=21_22_48&products_id=65
+http://www.glassandpowder.com/product_info.php?cPath=26_37_78_221&products_id=1303
+http://www.glassandpowder.com/product_info.php?products_id=67
+http://www.glassart.biz/Corp/Help-FAQ.asp
+http://www.glassartcanada.ca/glasswire/comings_8.html
+http://www.glassartists.org/Lnk52_Stained_Glass.asp
+http://www.glassartists.org/RichardCarterRick
+http://www.glassartmagazine.com/Art-Glass-Article-6.asp
+http://www.glassclub.org/events.htm
+http://www.glasscolor.com/community/conference_call_1.aspx
+http://www.glasscolor.com/community/conference_call_2.aspx
+http://www.glasscolor.com/community/conference_call_4.aspx
+http://www.glassdog.com/
+http://www.glassdog.com/archives/2004/08/25/whats_wrong_with_feed_readers.html
+http://www.glasseyeweb.com/contract.html
+http://www.glassgardenbeads.com/Classes/class.html
+http://www.glasshalfempty.co.uk/
+http://www.glasssmith.ca/product/catproddetails.cfm?id=26
+http://www.glastara.com/History.htm
+http://www.glastonbury.gov.uk/g_gov/mod.php?mod=userpage&menu=5302&page_id=21
+http://www.glc.k12.ga.us/BuilderV03/LPTools/LPShared/lpdisplay.asp?LPID=15168
+http://www.glcom.com/hassan/kanga_history.html
+http://www.glcq.com/
+http://www.glcq.com/bush_at_arpc1.htm
+http://www.gleim.com/accounting/ea/takingexam.php
+http://www.glen-carbon.il.us/Services/Winter.htm
+http://www.glen-ellyn.com/
+http://www.glen-ellyn.com/gov/
+http://www.glen-ellyn.com/newcomers/
+http://www.glenalmondcollege.co.uk/pages-news/news_lectures-visitors-and-societies.htm
+http://www.glenbow.org/collections/search/findingAids/archhtm/franklin.cfm
+http://www.glenbrook.k12.il.us/gbssci/phys/Class/waves/u10l4a.html
+http://www.glenbrook.k12.il.us/gbssci/phys/visitor/about.html
+http://www.glencoe.com/sec/teachingtoday/educationupclose.phtml/11
+http://www.glendalearenaaz.com/guest_services/az_guide.php
+http://www.glendon.yorku.ca/counselling/studygroups.html
+http://www.glendon.yorku.ca/hispanicstudies/students.htm
+http://www.glenndaily.com/fiduciaries.htm
+http://www.glennmiller.org/scholar.htm
+http://www.glenoaklumber.com/noflash/policies.html
+http://www.glenoaks.cc.mi.us/degrees/AASB-P.html
+http://www.glenwalk.com/stories/wales.html
+http://www.glesga.ukpals.com/GlescaSong2.htm
+http://www.glfc.cfs.nrcan.gc.ca/science/research/fire_e.html
+http://www.glfc.cfs.nrcan.gc.ca/treedisease/index_e.html
+http://www.glidecam.com/article-wedding-event-videography.php
+http://www.glidingmagazine.com/ListFeatureArticleDtl.asp?id=455
+http://www.glinx.com/~djbishop/dogs.htm
+http://www.glitterberries.com/fanfic/richardlobinske/F8_WE.htm
+http://www.global-defence.com/1997/AirbourneRecon.html
+http://www.global-electrolysis-supply.com/
+http://www.global-garden.com.au/gardenbegin_care2.htm
+http://www.global-leader.org/gl_research.htm
+http://www.global-meeting.co.uk/acw.asp
+http://www.global-vision.org/dream/dreamch2.html
+http://www.globalagendamagazine.com/2005/billrichardson.asp
+http://www.globalagendamagazine.com/2005/jamesderderian.asp
+http://www.globalagendamagazine.com/2005/richardcooper.asp
+http://www.globalagendamagazine.com/2005/robertmalley.asp
+http://www.globalaging.org/waa2/articles/abuseolder.htm
+http://www.globalarbitrationmediation.com/india_arbitration_act.shtml
+http://www.globalchallenge2004.com/en/feature.asp?chco_id=11503
+http://www.globalchange.com/drugs/TAD-Chapter%206.htm
+http://www.globalchange.com/drugs/TAD-Chapter%207.htm
+http://www.globalchange.com/ppt2/Saks15/
+http://www.globalchange.com/radiation.htm
+http://www.globalchange.com/rfids.htm
+http://www.globalchange.umich.edu/globalchange2/current/lectures/pop_socio/pop_socio.html
+http://www.globalclassroom.org/jarrell.html
+http://www.globalclassroom.org/trouble.html
+http://www.globalcomment.com/current_affairs/article_38.asp
+http://www.globalcommunity.org/timeline/80/index.shtml
+http://www.globaleconomicsgame.com/TheEuro.htm
+http://www.globaled.org/chinaproject/teachingmaterials/seminar/8a1.php
+http://www.globaled.org/curriculum/site.html
+http://www.globaleducation.edna.edu.au/archives/secondary/casestud/vietnam/1/hiv-aids.html
+http://www.globalenvision.org/index.php?fuseaction=library.print&printerfriendly=1&category=12&itemid=308
+http://www.globalenvision.org/library/11/474/
+http://www.globalenvision.org/library/12/308/
+http://www.globaleventspartners.com/customer.cfm
+http://www.globalexchange.org/campaigns/alternatives/debtCrisis.html
+http://www.globalexchange.org/campaigns/cafta/actions.html
+http://www.globalexchange.org/campaigns/fairtrade/coffee/442.html
+http://www.globalexchange.org/campaigns/sweatshops/
+http://www.globalexchange.org/campaigns/wto/2877.html
+http://www.globalexchange.org/campaigns/wto/prisons.html
+http://www.globalexchange.org/countries/mideast/iraq/2182.html
+http://www.globalexchange.org/wbimf/facts.html
+http://www.globalfundforwomen.org/work/trafficking/garden-of-evil.html
+http://www.globalgraphics.com/news/ggpress.nsf/PressReleasesPublishedCurrent/A476B41ECC21B50C80256CC400517A52
+http://www.globalgreen.org/programs/building.html
+http://www.globalguardians.com/npcs/npcsab/bloodredking.php
+http://www.globalhealth.gov/
+http://www.globalhealth.org/news/search.php3?category=general&offset=1870
+http://www.globalhouseplans.com/colonial_floor_plans.htm
+http://www.globalien.com/aupair.htm
+http://www.globalissues.org/EnvIssues/GEFood/PublicReaction.asp
+http://www.globalissues.org/EnvIssues/GlobalWarming/Hague.asp
+http://www.globalissues.org/EnvIssues/Population/Numbers.asp
+http://www.globalissues.org/Geopolitics/ArmsTrade/CodeOfConduct.asp
+http://www.globalissues.org/Geopolitics/WarOnTerror/FearProfits.asp?p=1
+http://www.globalissues.org/Geopolitics/WarOnTerror/FullList.asp
+http://www.globalissues.org/Geopolitics/WarOnTerror/PropAgenda.asp
+http://www.globalissues.org/HumanRights/Media/Corporations/Owners.asp
+http://www.globalissues.org/HumanRights/Racism.asp
+http://www.globalissues.org/TradeRelated/
+http://www.globalissues.org/TradeRelated/Corporations/Evasion.asp
+http://www.globalissues.org/TradeRelated/Debt/USAid.asp
+http://www.globalissues.org/TradeRelated/Development/PovertyEnv.asp
+http://www.globalissues.org/TradeRelated/FreeTrade/Regional.asp
+http://www.globalissues.org/TradeRelated/Seattle.asp
+http://www.globalissues.org/about.asp
+http://www.globalization101.org/news.asp?NEWS_ID=46
+http://www.globaljusticeecology.org/index.php?set_table=content&articleID=284&page=news
+http://www.globalmeditations.com/kathkeith.htm
+http://www.globalpapermoney.org/tappipm/issues/2004-05-18/22.html
+http://www.globalpolicy.org/empire/analysis/2004/02thinkagain.htm
+http://www.globalpolicy.org/empire/humanint/2004/01nothuman.htm
+http://www.globalpolicy.org/empire/terrorwar/liberties/2005/0612statsterror.htm
+http://www.globalpolicy.org/globaliz/cultural/2003/0812mtv.htm
+http://www.globalpolicy.org/globaliz/politics/prague.htm
+http://www.globalpolicy.org/nations/citizen/2002/0610.htm
+http://www.globalpolicy.org/nations/sovereign/failed/2004/0121feeding.htm
+http://www.globalpolicy.org/ngos/role/index1.htm
+http://www.globalpolicy.org/security/issues/0331resist.htm
+http://www.globalpolicy.org/security/issues/diamond/chowd.htm
+http://www.globalpolicy.org/security/issues/ethiopia/2003/0408hea.htm
+http://www.globalpolicy.org/security/issues/iraq/attack/law/2003/0321illegal.htm
+http://www.globalpolicy.org/security/issues/iraq/occupindex.htm
+http://www.globalpolicy.org/security/issues/kosovo1/2001/0531mac.htm
+http://www.globalpolicy.org/security/natres/oilindex.htm
+http://www.globalpolicy.org/security/oil/2005/0421blood.htm
+http://www.globalpolicy.org/security/sanction/iraq1/2004/01sanctionsworth.htm
+http://www.globalpolicy.org/socecon/bwi-wto/wbank/2003/0925dubairesults.htm
+http://www.globalpolicy.org/socecon/bwi-wto/wbank/2004/0922developmentgateway.htm
+http://www.globalpolicy.org/socecon/develop/2003/0701famine.htm
+http://www.globalpolicy.org/wtc/analysis/2004/0726questions.htm
+http://www.globalpov.com/october/expertpov_forno.htm
+http://www.globalprblogweek.com/archives/pr_is_dead.php
+http://www.globalpsychics.com/lp/Insights/seventeen.htm
+http://www.globalpsychics.com/lp/Tips/colors.htm
+http://www.globalpublicmedia.com/products/167
+http://www.globalrelocate.com/articles/canada/nontradca.htm
+http://www.globalresearch.ca/articles/HAR411A.html
+http://www.globalresearchbusiness.com/paperdis.php?pid=3641
+http://www.globalroadsafety.org/
+http://www.globalsecurity.org/eye/lessons.htm
+http://www.globalsecurity.org/intell/library/congress/1998_hr/alibek.htm
+http://www.globalsecurity.org/intell/library/congress/2004_rpt/iraq-wmd-intell_chapter2-b.htm
+http://www.globalsecurity.org/intell/systems/gbcs.htm
+http://www.globalsecurity.org/military/
+http://www.globalsecurity.org/military/agency/army/arcent-ku.htm
+http://www.globalsecurity.org/military/agency/army/arng-tn.htm
+http://www.globalsecurity.org/military/agency/army/usar-history.htm
+http://www.globalsecurity.org/military/facility/crane.htm
+http://www.globalsecurity.org/military/facility/fairchild.htm
+http://www.globalsecurity.org/military/facility/incirlik.htm
+http://www.globalsecurity.org/military/facility/keflavik.htm
+http://www.globalsecurity.org/military/facility/north-island.htm
+http://www.globalsecurity.org/military/facility/pearl_harbor.htm
+http://www.globalsecurity.org/military/facility/silverbell.htm
+http://www.globalsecurity.org/military/facility/southwest.htm
+http://www.globalsecurity.org/military/library/congress/2000_hr/00-06-21waldron.htm
+http://www.globalsecurity.org/military/library/policy/army/fm/55-20/ch4.htm
+http://www.globalsecurity.org/military/library/report/1991/BWJ.htm
+http://www.globalsecurity.org/military/library/report/1992/BCD.htm
+http://www.globalsecurity.org/military/library/report/1995/AMA.htm
+http://www.globalsecurity.org/military/library/report/1996/9607spd2.html
+http://www.globalsecurity.org/military/library/report/2004/onpoint/ack.htm
+http://www.globalsecurity.org/military/ops/desert_thunder.htm
+http://www.globalsecurity.org/military/ops/enduring-freedom.htm
+http://www.globalsecurity.org/military/ops/iraq_hotdocs.htm
+http://www.globalsecurity.org/military/ops/iraq_orbat.htm
+http://www.globalsecurity.org/military/ops/korea-timeline.htm
+http://www.globalsecurity.org/military/ops/oplan-5027-3.htm
+http://www.globalsecurity.org/military/ops/world_war_2.htm
+http://www.globalsecurity.org/military/systems/aircraft/ah-64-fms.htm
+http://www.globalsecurity.org/military/systems/ground/m107.htm
+http://www.globalsecurity.org/military/systems/ship/cruiser-intro.htm
+http://www.globalsecurity.org/military/systems/ship/cvn-68.htm
+http://www.globalsecurity.org/military/systems/ship/tah-19.htm
+http://www.globalsecurity.org/military/world/iraq/fallujah.htm
+http://www.globalsecurity.org/military/world/para/aceh.htm
+http://www.globalsecurity.org/military/world/para/jaysh-muhammad.htm
+http://www.globalsecurity.org/military/world/ukraine/economy.htm
+http://www.globalsecurity.org/org/news/2005/050522-fort-monmouth.htm
+http://www.globalsecurity.org/security/library/congress/9-11_commission/031119-orszag.htm
+http://www.globalsecurity.org/security/library/report/2004/hsc-planning-scenarios-jul04_09.htm
+http://www.globalsecurity.org/space/agency/afspc.htm
+http://www.globalsecurity.org/space/library/congress/1996_h/h960530c.htm
+http://www.globalsecurity.org/space/library/news/2003/urltrurl-4.htm
+http://www.globalsecurity.org/wmd/library/news/iraq/2004/01/01-28_index.htm
+http://www.globalsecurity.org/wmd/library/news/iraq/2004/10/10-21_index.htm
+http://www.globalsecurity.org/wmd/library/policy/army/fm/3-19/ch82.htm
+http://www.globalshareware.com/Desktop-Enhancements/Screensavers/Michael-Manley-s-Magic-Milk-Machine-Screen-Saver.htm
+http://www.globalsources.com/si/6008814575489/wscase.co
+http://www.globalspec.com/FeaturedProducts/SearchResults?criteria=Magnets&frmtrk=ofInterest
+http://www.globalstoresgroup.com/
+http://www.globalstudies.org.uk/index.php?id=1,28,0,0,1,0
+http://www.globalvolunteers.org/1main/hungary/hungaryfaq.htm
+http://www.globalvolunteers.org/1main/italy/italyfaq.htm
+http://www.globalvolunteers.org/1main/mexico/mexicohistory.htm
+http://www.globalvolunteers.org/1main/tax_deductibility.htm
+http://www.globalwarming.org/
+http://www.globalwarming.org/index.php
+http://www.globalwitness.org/reports/show.php/en.00049.html
+http://www.globalwoodsource.com/oneofakind.html
+http://www.globe-guardian.com/cus.htm
+http://www.globelaw.com/LawSea/lsconts.htm
+http://www.globetechnology.com/servlet/story/RTGAM.20041007.gtevalsoct7/BNStory/TechReviews/
+http://www.globetechnology.com/servlet/story/RTGAM.20050627.gtkapicajun27/BNStory/Technology/
+http://www.globosapiens.net/travel-information/Miami-555.html
+http://www.globusz.com/ebooks/Mormons/00000029.htm
+http://www.globusz.com/ebooks/Tea/00000014.htm
+http://www.glocom.org/opinions/essays/20040301_tsurumi_president/
+http://www.glocom.org/special_topics/eu_report/20040129_eureport_s69/
+http://www.gloomboomdoom.com/marketcoms/010901.htm
+http://www.gloriana.nu/cloud.html
+http://www.glorywrestling.com/News/20041111.asp
+http://www.glos.ac.uk/departments/personnel/staffdev/videos.cfm
+http://www.glos.ac.uk/subjectsandcourses/postgraduatetaught/pc/descriptors/pc403.cfm
+http://www.glos.ac.uk/subjectsandcourses/undergraduatefields/el2/descriptors/el227.cfm
+http://www.glos.ac.uk/subjectsandcourses/undergraduatefields/hm/descriptors/hm216.cfm
+http://www.glotinternational.com/geninfo.htm
+http://www.glovesoff.org/features/caffentzis_030603.html
+http://www.glscs.com/archives/06.03.opinion.htm?adcode=30
+http://www.glscs.com/archives/12.01.technology.htm?adcode=90
+http://www.glscs.com/news/11.30.04.newsletter.htm
+http://www.glscs.com/webzine/04.04.opinion_print.html
+http://www.gluckman.com/Death'Penalty.htm
+http://www.gluckman.com/Pei.htm
+http://www.glucocontrol.org/eng/lk/lk_4653.php
+http://www.glvchina.com/english/teachers/Pings1_e.php
+http://www.gly.bris.ac.uk/WWW/TerraNova/dimple/dimple.html
+http://www.gm-unccd.org/English/DOCS/report_cop2.htm
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=1430
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=195
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=203
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=203&
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=882
+http://www.gmabrands.com/news/docs/NewsRelease.cfm?DocID=882&
+http://www.gmabrands.com/publicpolicy/docs/Comment.cfm?DocID=1370&
+http://www.gmailforums.com/index.php?showtopic=3572&st=60
+http://www.gmax.co.za/look/07/30-capitalletters.html
+http://www.gmbodyaware.com/about.cfm
+http://www.gmc-uk.org/standards/CONSENT.HTM
+http://www.gmc-uk.org/standards/consent.htm
+http://www.gmc-uk.org/standards/good.htm
+http://www.gmc-uk.org/standards/manage.htm
+http://www.gmcr.com/ContentPage.aspx?Name=NewsReleases&DeptName=AboutGMCR
+http://www.gmcr.com/ContentPage.aspx?Name=NewsReleases&DeptName=InvestorServices
+http://www.gmdcnd.org.uk/earlywarning/ewfebruarymarch04.htm
+http://www.gmfc.org/index.php/gmc6/content/view/full/580
+http://www.gmhc.org/health/treatment/ti/ti1702.html
+http://www.gmp.police.uk/hot_topics/index.asp
+http://www.gmptools.com/nf/warranty.htm
+http://www.gmsciencedebate.org.uk/topics/forum/0030.htm
+http://www.gmsciencedebate.org.uk/topics/forum/0101.htm
+http://www.gmsciencedebate.org.uk/topics/forum/0102.htm
+http://www.gmu.edu/academic/ijps/vol2_2/seljuq.htm
+http://www.gmu.edu/departments/economics/wew/articles/00/majorityrule.html
+http://www.gmu.edu/facstaff/legal-affairs/signature.htm
+http://www.gn.apc.org/Issues/Community/
+http://www.gn.apc.org/Issues/Cultural/orgs.html
+http://www.gnaa.us/pr.phtml?troll=gnaa-goatse
+http://www.gner.co.uk/GNER/Livewire/Features/Poison.htm
+http://www.gnld.com/store/Product.aspx?STORE_ID=1&CATEGORY_ID=1207&NAV_CATEGORY_ID=1014&PRODUCT_ID=10027
+http://www.gnn.gov.uk/Content/Detail.asp?ReleaseID=156041&NewsAreaID=2
+http://www.gnn.gov.uk/environment/detail.asp?ReleaseID=130626&NewsAreaID=2&NavigatedFromDepartment=False
+http://www.gnn.tv/articles/article.php?id=1029
+http://www.gnn.tv/articles/article.php?id=761
+http://www.gnn.tv/headlines/3344/Sunday_Times_UK_Ministers_were_told_of_need_for_Gulf_war_excuse
+http://www.gnnetcom.com.sg/reseller_toolbox.php
+http://www.gnome.org/~seth/blog/2005/Mar
+http://www.gnosis.org/library/hermes13.html
+http://www.gns.cri.nz/rafter/glossary.htm
+http://www.gns.cri.nz/what/earthact/land_stab/04landslides/
+http://www.gnu.org/brave-gnu-world/issue-13.en.html
+http://www.gnu.org/brave-gnu-world/issue-28.en.html
+http://www.gnu.org/brave-gnu-world/issue-36.en.html
+http://www.gnu.org/brave-gnu-world/issue-37.en.html
+http://www.gnu.org/brave-gnu-world/issue-38.en.html
+http://www.gnu.org/brave-gnu-world/issue-39.en.html
+http://www.gnu.org/brave-gnu-world/issue-46.en.html
+http://www.gnu.org/brave-gnu-world/issue-49.en.html
+http://www.gnu.org/brave-gnu-world/issue-58.en.html
+http://www.gnu.org/gnu/gnu-linux-faq.html
+http://www.gnu.org/gnu/linux-and-gnu.html
+http://www.gnu.org/gnu/manifesto.html
+http://www.gnu.org/gnu/thegnuproject.html
+http://www.gnu.org/licenses/gpl-faq.html
+http://www.gnu.org/philosophy/categories.html
+http://www.gnu.org/philosophy/dat.html
+http://www.gnu.org/philosophy/free-sw.html
+http://www.gnu.org/philosophy/gif.html
+http://www.gnu.org/philosophy/gpl-american-way.html
+http://www.gnu.org/philosophy/motivation.html
+http://www.gnu.org/philosophy/shouldbefree.html
+http://www.gnu.org/philosophy/why-free.html
+http://www.gnu.org/software/guile/
+http://www.gnu.org/software/guile/guile.html
+http://www.gnu.org/software/libc/manual/html_node/Streams-and-I18N.html
+http://www.gnu.org/software/make/manual/html_chapter/make_17.html
+http://www.gnu.org/software/rcs/rcs.html
+http://www.gnucash.org/
+http://www.gnxp.com/MT2/archives/001264.html
+http://www.gnxp.com/MT2/archives/002064.html
+http://www.gnxp.com/MT2/archives/cat_language.html
+http://www.go-adventuresports.com/programsforcamps.htm
+http://www.go-ahead.com/financials/annualreport2004/businessdescription/
+http://www.go-mad.org/13message.html
+http://www.go-newyorkcity.com/
+http://www.go-russia.com/guestbook.php
+http://www.go-russia.com/taffy.htm
+http://www.go-star.com/antiquing/georgia.htm
+http://www.go-star.com/antiquing/gross.htm
+http://www.go-synthetic.com/Quick_Lube/quick_lube.htm
+http://www.go-synthetic.com/save_money/save_money.htm
+http://www.go.com.mt/services/go_live/print_mms_faqs.cfm
+http://www.go2lanka.com/stories/031003.html
+http://www.go2peru.com/cajamarca_travel_guide.htm
+http://www.go2thestart.com/2004/11/
+http://www.goaidc.com/faqs.html
+http://www.goal-setting-guide.com/goal-writing.html
+http://www.goal-setting-guide.com/reaching-beyond-your-goals.html
+http://www.goal.com/
+http://www.goal.com/NewsDetail.aspx?idNews=62124&progr=4
+http://www.goal.com/forum.aspx?p=posts&f=27&t=41311
+http://www.goalline.org/Goal%20Line/CA/HSS/HSS10.html
+http://www.goanews.com/31jan99.htm
+http://www.goang.com/about/aboutang_benefits.aspx
+http://www.goanvoice.ca/2004/issue17/newslinecanada.htm
+http://www.goapply.com/tools/mortgageFAQ.cfm
+http://www.goarch.org/en/ourfaith/articles/article7064.asp
+http://www.goarch.org/en/ourfaith/articles/article8025.asp
+http://www.goarch.org/en/ourfaith/articles/article8434.asp
+http://www.goarch.org/en/resources/saints/
+http://www.goarms.com/winter2001435.html
+http://www.goarmy.com/about/for_parents/personal_growth.jsp?fl=false
+http://www.goarmy.com/life/living_the_army_values.jsp
+http://www.goarmy.com/life/living_the_army_values.jsp?fl=false
+http://www.goaskalice.columbia.edu/0716.html
+http://www.goaskalice.columbia.edu/1475.html
+http://www.goaskalice.columbia.edu/1686.html
+http://www.goaskalice.columbia.edu/2629.html
+http://www.goats.com/forums/news/1467/
+http://www.gobair.org/programs/sculling/sculling_manual.htm
+http://www.gobinder.com/note-taking.aspx
+http://www.goblincombe.org.uk/community/backwell.asp
+http://www.gobosoft.com/eiffel/gobo/structure/traversal.html
+http://www.gocampus.org/alliance/engage/engage1-7.htm
+http://www.gocampus.org/alliance/launch/launch1-5.html
+http://www.goclean.com/kitchencare.htm
+http://www.goclean.com/links.cfm
+http://www.god-dess.com/services_sensesJune03.html
+http://www.god.tv/Europe/Tunein.asp
+http://www.godandscience.org/apologetics/atheismintro.html
+http://www.godandscience.org/doctrine/plannedparenthood.html
+http://www.godcast.org/categories/rachelSChoice/
+http://www.goddardusd.com/GMS/events.html
+http://www.goddessgift.com/goddess_path/goddess_Valentine's_Day_2003.htm
+http://www.godecookery.com/mtales/mtales19.html
+http://www.godestiny.org/ministries/hell-house/kit.php
+http://www.godfire.net/theyknew4.html
+http://www.godlessgeeks.com/pol/doubt.htm
+http://www.godo.visitwales.com/21588/09.AA.html
+http://www.godonfilm.com/about.html
+http://www.godrules.net/library/flavius/flaviusb25c9.htm
+http://www.godsdirectcontact.com/gm.html
+http://www.godshew.org/GodShew.htm
+http://www.godsimmediatecontact.com/meditate_true.html
+http://www.godspy.com/issues/WHATS-LOVE-GOT-TO-DO-WITH-IT-The-Ethical-Contradictions-of-Peter-Singer-by-Dr-Peter-J-Colosi.cfm
+http://www.godspy.com/reviews/Always-Our-Neighbors-Why-the-New-Oxford-Review-Gets-the-Gospels-Wrong-by-David-Morrison.cfm
+http://www.godubai.com/citylife/ls5.asp?article_id=2001/BIK%2312
+http://www.goer.org/Journal/2002/Jul/
+http://www.goer.state.ny.us/cna/bucenter/cseahighlights.html
+http://www.goertzel.org/books/intel/chapter_four.htm
+http://www.goethe.de/kug/kue/arc/thm/en256901.htm
+http://www.goethe.de/kug/kue/flm/thm/en218553.htm
+http://www.goethe.de/kug/kue/flm/thm/en54756.htm
+http://www.goetheanstudies.org/perspectives/giovannamollo.html
+http://www.goexam.com/faq.shtml
+http://www.gofastsports.com/drink/
+http://www.gofishbc.com/maxperformance.htm
+http://www.goflow.com/ac2000.htm
+http://www.gogetlost.com/html/letters.htm
+http://www.gogomag.com/yearbooks/faq.htm
+http://www.goines.net/exchange_qtr1_01.html
+http://www.goines.net/exchange_qtr3_04.html
+http://www.going2usa.com/tourism/afterreaching.html
+http://www.goingfaster.com/angst/awakeron.htm
+http://www.goingfaster.com/angst/hdlclarence.htm
+http://www.goinglobal.com/hot_topics/uk_keener_connect.asp
+http://www.goingunderground.net/maps.html
+http://www.goingware.com/tips/marketing.html
+http://www.goingwirelessbook.com/chap_deathofcash.html
+http://www.golay.com/ve/247.htm
+http://www.gold-eagle.com/editorials_03/helfield022803.html
+http://www.gold-eagle.com/editorials_03/helfield022803pv.html
+http://www.gold-eagle.com/editorials_04/appel051004pv.html
+http://www.gold-eagle.com/editorials_04/chapmand051304pv.html
+http://www.gold-eagle.com/editorials_05/mound060705.html
+http://www.gold-eagle.com/gold_digest_99/joubert091799.html
+http://www.gold.ac.uk/connect/evaluationuk.html
+http://www.gold.org/jewellery/professional/
+http://www.gold.org/value/invest/glossary/
+http://www.gold.org/value/markets/glossary/
+http://www.gold.org/value/markets/supply_demand/mine_production.html
+http://www.gold.org/value/reserve_asset/glossary/
+http://www.gold.org/value/stats/glossary/
+http://www.goldcoast.qld.gov.au/t_gcw.asp?pid=3121
+http://www.goldcoastna.org/20questions.htm
+http://www.golden-rule.com/fi-etiquette.php
+http://www.goldenbar.com/GoldenBarReport/Goldilocks.htm
+http://www.goldenbeartour.com/main.htm
+http://www.goldenessays.com/free_essays/1/business/mis-project.shtml
+http://www.goldenhelix.com/HelixTree_MacOSX_details.html
+http://www.goldenkey.canterbury.ac.nz/aboutus.php
+http://www.goldenpaints.com/technicaldata/florclth.php
+http://www.goldensoftware.com/products/mapviewer/mapviewer.shtml
+http://www.goldenwestflyin.org/volunteers/volopportunitynew.shtml
+http://www.goldenwords.net/issues/article.php?id=3921-5
+http://www.goldlyrics.com/song_lyrics/cannibal_corpse/the_bleeding/she_was_asking_for_it/
+http://www.goldlyrics.com/song_lyrics/george_strait/carrying_your_love_with_me/carrying_your_love_with_me/
+http://www.goldlyrics.com/song_lyrics/george_strait/carrying_your_love_with_me/the_nerve/
+http://www.goldlyrics.com/song_lyrics/george_strait/latest_greatest_straitest_hits/carrying_your_love_with_me/
+http://www.goldlyrics.com/song_lyrics/u2/pop/staring_at_the_sun_lab_rat_mix/
+http://www.goldmark.org/netrants/no-word/attach.html
+http://www.goldpoints.com/en_US/site/earn/Computers.jsp
+http://www.goldpoints.com/en_US/site/earn/Games.jsp
+http://www.goldpoints.com/en_US/site/earn/Gifts.jsp
+http://www.goldpoints.com/en_US/site/earn/Health.jsp
+http://www.goldpoints.com/en_US/site/earn/Jewelry.jsp
+http://www.goldpoints.com/en_US/site/earn/Misc.jsp
+http://www.goldsmiths.ac.uk/study-options/teacher-training/PGCE-Secondary.php
+http://www.goletadepot.org/depohist.htm
+http://www.goletapublishing.com/jstamps/0502deep.htm
+http://www.golf-gear-review.com/review-display/4617.html
+http://www.golf.com/gdc/news/article.asp?id=21149
+http://www.golfclubatlas.com/hiddencreek2.html
+http://www.golfclubatlas.com/interviewmandell.html
+http://www.golfclubreview.com/
+http://www.golfcountryhomes.com/closing.htm
+http://www.golfing-scotland.com/history.asp
+http://www.golfingmobile.com/TC.asp
+http://www.golfinternationalmag.co.uk/News/010205_4.htm
+http://www.golfonline.com/golfonline/equipment/features/article/0,17742,470610,00.html
+http://www.golfonline.com/golfonline/fitness/yoga/article/0,17742,483524,00.html
+http://www.golfonline.com/golfonline/instruction/features/article/0,17742,468908,00.html
+http://www.golfonline.com/golfonline/instruction/shortgame/article/0,17742,469230,00.html
+http://www.golfscotland.com/news.asp
+http://www.golfthemidatlantic.com/story/79
+http://www.golftipsmag.com/content/pastissues/2001/jan/season.html
+http://www.golftipsmag.com/content/pastissues/2001/may/top40.html
+http://www.golftipsmag.com/content/pastissues/2002/apr/wantvsneed.html
+http://www.golftoday.co.uk/news/yeartodate/news05/leonard2.html
+http://www.golftodaymagazine.com/0301Jan/newp11.htm
+http://www.golfweb.com/story/4879735
+http://www.golfweb.com/story/6436857
+http://www.golfweb.com/story/6494889
+http://www.golfweb.com/story/6694905
+http://www.golfweb.com/story/7558553
+http://www.golfweb.com/story/7995513
+http://www.golfweb.com/story/8143678
+http://www.golfweb.com/tournaments/usopen/story/8567175
+http://www.goliathindustries.com/vb/VBNews.html
+http://www.golocaljamaica.com/readarticle.php?ArticleID=1583
+http://www.golocaljamaica.com/readarticle.php?ArticleID=2839
+http://www.gomath.com/Questions/question.php?question=17601
+http://www.gomery.ca/en/openingstatement/
+http://www.gomotorbids.com/LotDetail.cfm?Lot_ID=81130
+http://www.gon.com/deer803.html
+http://www.gon.com/dog503.html
+http://www.gon.com/legis204.html
+http://www.gon.com/lucus405.html
+http://www.gon.com/public7.html
+http://www.gon.com/varner1.html
+http://www.gon.com/wildlifeinmind.html
+http://www.gon.com/winmind.html
+http://www.gonomad.com/traveldesk/0103/javins_extendedtravel.html
+http://www.gonzaga.edu/Academics/Colleges+and+Schools/School+of+Professional+Studies/Ph.D.+-+Leadership+Studies/Syllabi+Index/DPLS+772:+Ways+of+Knowing:+Teaching+Learning+and+Leadership.htm
+http://www.goob.com/
+http://www.good-tutorials.com/author/Think-Designs
+http://www.good-win-racing.com/goodwinracing_004.htm
+http://www.goodadvicepress.com/
+http://www.goodbyemag.com/sep97/animals.html
+http://www.goodbyemag.com/sep97/inventors.html
+http://www.goodcharacter.com/GROARK/Listening.html
+http://www.goodcharacter.com/YCC/Feelings.html
+http://www.gooddogz.org/getadog/petloss.htm
+http://www.goodearthpeanuts.com/aboutpeanuts.htm
+http://www.goodearthtravel.com/FindATripAction.asp?chkSpecials=True
+http://www.goodeatsfanpage.com/Season4/Tea/TeaTranscript.htm
+http://www.goodexperience.com/blog/archives/000165.php
+http://www.goodfight.org/hwcolumbineeffect.html
+http://www.goodfridayappeal.com.au/
+http://www.goodhandarts.com/index.asp?act=g&c=6&begin=46
+http://www.goodinsurance.co.uk/term-life-insurance.html
+http://www.goodnewsbroadcast.com/syltisbeautiful.html
+http://www.goodnewsinc.net/damnnone/manistim.html
+http://www.goodnewsindia.com/index.php/Home/printTextOnly/62/
+http://www.goodnewsindia.com/index.php/Home/printWithImages/62/
+http://www.goodnewsnetwork.org/Pages/inspirational.html
+http://www.goodparentsinc.com/questionofthemonth.htm
+http://www.goodpooch.com/ISSUES/etiquette.htm
+http://www.goodquotes.com/answeringmachine.htm
+http://www.goodschools.com/chandler.htm
+http://www.goodschools.com/mike.htm
+http://www.goodschools.com/myers2.htm
+http://www.goodschools.com/reparations.htm
+http://www.goodthings.com/01_00_gl116.html
+http://www.goodusedstuff.com/search.asp?V=Q&Fp=Y&Category=Office&rs=0
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=magazine/erotica/2005/20050330.html
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=magazine/features/sex_and_culture/2003102.html
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=magazine/features/sex_and_culture/archive.html
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=magazine/our_regulars/politically_erect/199901.html
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=magazine/our_regulars/queen_of_hearts/20050112.html
+http://www.goodvibes.com/cgi-bin/sgdynamo.exe?HTNAME=store_news/2001_holiday.html
+http://www.google-watch.org/bigbro.html
+http://www.google.com/help/features.html
+http://www.google.com/jobs/positions-in.html
+http://www.google.com/jobs/sales.html
+http://www.google.com/jobs/search.html
+http://www.google.com/webmasters/seo.html
+http://www.googlism.com/when_is/c/chad/
+http://www.goonan.com/mars.html
+http://www.goonan.com/tirnanog.html
+http://www.gooznews.com/
+http://www.gop.com/GOPAgenda/AgendaPage.aspx?id=2
+http://www.gop.com/news/read.aspx?ID=5320
+http://www.gop.com/news/read.aspx?ID=5330
+http://www.gop.com/news/read.aspx?ID=5358
+http://www.gop.gov/Committeecentral/printversion/20050426dfb.asp
+http://www.gopaddle.com/html/on_the_water.html
+http://www.gopbloggers.org/
+http://www.gopherit.org/Helpdesk/Y2K.htm
+http://www.gophersports.com/Facilities/gibson_nagurski.asp
+http://www.gopsusports.com/pressreleases/pressrelease.cfm?anncid=7489
+http://www.gopteamleader.com/myissues/view_issue.asp?id=2667
+http://www.gopusa.com/florida/
+http://www.gor.de/work_4.htm
+http://www.gor.de/work_e_4.htm
+http://www.gordon-c-harrison.co.uk/lochewe1.htm
+http://www.gordonandgordon.com/marcomwriting.html
+http://www.gordongallery.com/archive/articles/artistsmage5-95arti.html
+http://www.gordonhorseshoes.com/nhpa_rules.html
+http://www.gordonhospital.com/InternetTopicDisplay.asp?TopicID=279
+http://www.gordonresearch.com/articles_oral_chelation/the_great_oral_edta_chelation_debate.html
+http://www.gordonsguide.com/cattle-drives/chicobasinranch/index.cfm
+http://www.gorell.com/pages/gardenwindows.htm
+http://www.gorey.com.au/personal/
+http://www.gorgerentals.com/resources.html
+http://www.gorilla-haven.org/ghdebbie.htm
+http://www.gorin.com/courses.html
+http://www.gorkhapatra.org.np/pageloader.php?file=2004/11/23//topstories/main1
+http://www.gorobotics.net/
+http://www.gorr.state.ny.us/gorr/pf_startbus.htm
+http://www.gorskys.com.au/articles/evolution-improvements.html
+http://www.gorskys.com.au/ask/need-money-before-babys-born.html
+http://www.goshen.edu/art/ed/artlsn.html
+http://www.goski.com/rswi/1arosa.htm
+http://www.gospel-music.de/Bible/Isaiah.htm
+http://www.gospel-music.de/Bible/Jeremiah.htm
+http://www.gospelcom.net/chi/DAILYF/2001/06/daily-06-12-2001.shtml
+http://www.gospelcom.net/chi/DAILYF/2001/11/daily-11-02-2001.shtml
+http://www.gospelcom.net/chi/DAILYF/2003/04/daily-04-08-2003.shtml
+http://www.gospelcom.net/chi/DAILYF/2003/05/daily-05-19-2003.shtml
+http://www.gospelcom.net/chi/DAILYF/2003/12/daily-12-06-2003.shtml
+http://www.gospelcom.net/chi/GLIMPSEF/Glimpses/glmps103.shtml
+http://www.gospelcom.net/guide/resources/church-pages.php
+http://www.gospelcom.net/guide/resources/church-template.php
+http://www.gospelcom.net/guide/resources/hobby.php
+http://www.gospelcom.net/guide/resources/jesus-communicator.php
+http://www.gospelcom.net/guide/resources/teach-it.php
+http://www.gospelcom.net/guide/resources/writing.php
+http://www.gospelcom.net/nehemiah/
+http://www.gospelcom.net/nehemiah/about.htm
+http://www.gospelcom.net/nehemiah/distinct.htm
+http://www.gospelcom.net/nehemiah/distinct2.htm
+http://www.gospelcom.net/nehemiah/kgwxchap.htm
+http://www.gospelcom.net/ocf/pubs/leading.html
+http://www.gospelcom.net/peggiesplace/words49.htm
+http://www.gospelcom.net/rbc/ds/cb922/point5.html
+http://www.gospelcom.net/rbc/ds/cb931/page7.html
+http://www.gospelcom.net/rbc/ds/q1208/point2.html
+http://www.gospelcom.net/watkins/shortsissues.htm
+http://www.gospelcom.net/wcsg/christmas/family_activities/
+http://www.gospelflava.com/articles/newmusicpreview2005.html
+http://www.gospelfortoday.org/men/firmjuly03.htm
+http://www.gospeloutreach.net/doesgodexist.html
+http://www.gospelthomas.com/gospelthomas66.html
+http://www.gospeltruth.net/1837LTPC/ltpc14_christ_husbandofchu.htm
+http://www.gospeltruth.net/1840OE/40%20lets_art/400812_parents_1.htm
+http://www.gospeltruth.net/1840OE/Let_to_parents/400812_parents_1.htm
+http://www.gospeltruth.net/1849-51Penny_Pulpit/501208pp_self_condemnation.htm
+http://www.gospeltruth.net/1851Sys_Theo/st48.htm
+http://www.gospeltruth.net/1861OE/610605_looking2jesus.htm
+http://www.gospeltruth.net/children/400812_parents_1.htm
+http://www.gosullivan.com/mamhitswords.html
+http://www.goswim.tv/pMachinePro/forum/threads.php?id=626_0_13_0_C
+http://www.gothamcomedyclub.com/PressReleases/crains.htm
+http://www.gothamgazette.com/article/20050124/200/1252
+http://www.gothamgazette.com/article/issueoftheweek/20021216/200/20
+http://www.gothamgazette.com/rebuilding_nyc/topics/groundzero/
+http://www.gothamgazette.com/searchlight2001/vallone_urban.html
+http://www.gothamist.com/archives/2003/09/19/gothamist_601am_thank_you.php
+http://www.gothamist.com/archives/2004/09/20/four_and_a_half_up_two_weeks_to_go.php
+http://www.gothamist.com/archives/2004/12/23/nicola_kraus_and_emma_mclaughlin_citizen_girl_and_the_nanny_diaries_authors.php
+http://www.gothamist.com/archives/2005/01/20/sponge_bob_pawn_in_culture_war.php
+http://www.gothamist.com/archives/2005/04/11/jessica_blank_and_erik_jensen_playwrights_the_exonerated_authors_living_justice.php
+http://www.gothamist.com/archives/2005/06/06/city_teachers_still_need_a_contract.php
+http://www.gothamist.com/archives/ask_gothamist/
+http://www.gothamist.com/archives/ask_gothamist/index.php
+http://www.gothamist.com/archives/food/
+http://www.gothamist.com/archives/interview/
+http://www.gothamist.com/forum/viewtopic.php?t=457
+http://www.gothitica.com/memory/education.html
+http://www.goto-silicon-valley.com/articles/mary-gospe/b2b-sales-part2.shtml
+http://www.gotogs.com/
+http://www.gotpoetry.com/index.php?name=Forums&file=viewtopic&p=2700
+http://www.gotthegeek.com/newspro/archive/news-archive-12-2-2004.shtml
+http://www.gottman.com/marriage/
+http://www.gotw.ca/publications/concurrency-ddj.htm
+http://www.gotwavs.com/Movies/Full_Metal_Jacket.shtml
+http://www.goucher.edu/cwpromo/cwsamples/differen.htm
+http://www.goucher.edu/it/index.cfm?view=tips
+http://www.goucher.edu/library/robin/paper.htm
+http://www.goughinfo.co.uk/how%20to%20make%20money%20horse%20racing3.htm
+http://www.gourmetfoodmall.com/
+http://www.gourmetkitchenstore.com/cgi-bin/gks/PDM101.html
+http://www.gourmetkitchenstore.com/cgi-bin/gks/PDM104.html
+http://www.gourmetkitchenstore.com/cgi-bin/gks/PDM121.html
+http://www.gourmetretailer.com/gourmetretailer/magazine/article_display.jsp?vnu_content_id=1000484138
+http://www.gourmetretailer.com/gourmetretailer/magazine/article_display.jsp?vnu_content_id=1000727598
+http://www.gourmetretailer.com/gourmetretailer/magazine/article_display.jsp?vnu_content_id=1068415
+http://www.gourmetretailer.com/gourmetretailer/reports_analysis/feature_display.jsp?vnu_content_id=1000727598
+http://www.gourmetschoice.com/terms_updated.html
+http://www.gouv.qc.ca/wps/portal/!ut/p/.cmd/cs/.ce/7_0_A/.s/7_0_10C/_th/J_3_FL/_s.7_0_A/7_0_105/_me/7_0_104-7_0_A/_s.7_0_A/7_0_10C?lang=en
+http://www.gov.bw/cgi-bin/news.cgi?d=20000922
+http://www.gov.bw/cgi-bin/news.cgi?d=20010919
+http://www.gov.chilliwack.bc.ca/main/page.cfm?id=953
+http://www.gov.im/lib/news/transport/transportpublicn75.xml
+http://www.gov.mb.ca/agriculture/climate/waa50s00.html
+http://www.gov.mb.ca/agriculture/financial/agribus/cch15s02.html
+http://www.gov.mb.ca/agriculture/organizations/wi/mwi12s01.html
+http://www.gov.mb.ca/chc/press/top/2004/08/2004-08-19-02.html
+http://www.gov.mb.ca/finance/labour/class/specs/storekeep.html
+http://www.gov.mb.ca/workandlife.html
+http://www.gov.nf.ca/releases/1997/env_n97.htm
+http://www.gov.nf.ca/releases/1997/envlab/1204n02.htm
+http://www.gov.nl.ca/mines&en/geosurvey/dimension/dimension.stm
+http://www.gov.ns.ca/
+http://www.gov.ns.ca/enla/ohs/info_R6.htm
+http://www.gov.ns.ca/enla/psafe/fsb0303.htm
+http://www.gov.ns.ca/just/regulations/rxam-z.htm
+http://www.gov.ns.ca/legi/legc/statutes/tradeun.htm
+http://www.gov.ns.ca/legislature/hansard/comm/r/re000111.htm
+http://www.gov.ns.ca/news/results.asp?deptnum=21
+http://www.gov.ns.ca/ohp/tcu/quitting.htm
+http://www.gov.ns.ca/snsmr/muns/plan/plandev/news.asp?cmd=view&articleid=419
+http://www.gov.on.ca/FIN/english/scm/peeng.htm
+http://www.gov.on.ca/LAB/english/
+http://www.gov.on.ca/LAB/english/es/factsheets/fs_hours.html
+http://www.gov.on.ca/LAB/english/hs/guidelines/lead/appendix_2.html
+http://www.gov.on.ca/LAB/english/hs/reg838/reg838_draft_1.html
+http://www.gov.on.ca/LAB/english/lr/faq/lr_faq4.html
+http://www.gov.on.ca/LAB/english/news/2004/04-92cp.html
+http://www.gov.on.ca/LAB/english/news/2005/05-71s.html
+http://www.gov.on.ca/OMAFRA/english/crops/facts/00-067.htm
+http://www.gov.on.ca/OMAFRA/english/crops/facts/97-021.htm
+http://www.gov.on.ca/OMAFRA/english/engineer/facts/04-019.htm
+http://www.gov.on.ca/OMAFRA/english/livestock/beef/news/vbn1104a3.htm
+http://www.gov.on.ca/OMAFRA/english/livestock/dairy/facts/cullingcows.htm
+http://www.gov.on.ca/OMAFRA/english/livestock/horses/facts/87-022.htm
+http://www.gov.on.ca/OMAFRA/english/livestock/swine/facts/93-003.htm
+http://www.gov.on.ca/OMAFRA/english/policy/strategic/summary.htm
+http://www.gov.on.ca/OMAFRA/english/rural/facts/88-026.htm
+http://www.gov.on.ca/lab/english/hs/new_workers.html
+http://www.gov.on.ca/lab/english/news/2005/05-71s.html
+http://www.gov.on.ca/lab/olrb/eng/infbul/infbul14.htm
+http://www.gov.pe.ca/lg/gallery/26Dalton.php3
+http://www.gov.ph/forum/thread.asp?rootID=47812&catID=18
+http://www.gov.sk.ca/newsrel/releases/2001/08/10-633.html
+http://www.gov.sk.ca/psc/MgmtComp/Impact_Influence.htm
+http://www.gov.sk.ca/topics/keyword/keyword?topic=arts-culture-recreation&keyword=2177
+http://www.governance.com.au/BoardMatters/brdmattersarticleNew19.htm
+http://www.governance.com.au/BoardMatters/brdmattersarticleNew3.htm
+http://www.governor.state.pa.us/governor/cwp/view.asp?a=1101&q=440184
+http://www.governor.state.tx.us/divisions/music/events/tmec_march.htm
+http://www.govexec.com/calendar/
+http://www.govexec.com/features/0202/0202s2.htm
+http://www.govexec.com/gelive/archive/20050518.htm
+http://www.govexec.com/mailbagDetails.cfm?aid=30667
+http://www.govhouse.wa.gov.au/cgi-bin/engage.pl?Year=2004&Month=3
+http://www.govsux.com/Heir_To_The_Halocost.html
+http://www.govt.co.charles.md.us/
+http://www.govt.nz/services?treeid=172
+http://www.govtech.net/magazine/story.php?id=87473&issue=2:2004
+http://www.govtech.net/magazine/story.php?id=89559
+http://www.govtech.net/magazine/story.php?id=89559&issue=3:2004
+http://www.gower.k12.il.us/Staff/ASSESS/8_apdx2.htm
+http://www.gozochannel.com/customerservice.htm
+http://www.gp.com/build/DocumentViewer.aspx?repository=bp&elementid=4462
+http://www.gpc.edu/forms/program_information.php3?program=fire_management&option=certificate
+http://www.gpforums.co.nz/showthread.php?s=&threadid=222067&pagenumber=3
+http://www.gpifilms.com/berga.html
+http://www.gpmlaw.com/law/page_128_16_151.htm
+http://www.gpnotebook.co.uk/medwebpage.cfm?ID=1107689527
+http://www.gpnotebook.co.uk/medwebpage.cfm?ID=1543897121
+http://www.gpo.gov/bca/decisions/79-5.htm
+http://www.gpo.gov/factsheet/
+http://www.gpo.gov/int/int015.html
+http://www.gpoaccess.gov/branches.html
+http://www.gpoaccess.gov/databases.html
+http://www.gpoaccess.gov/topics/business.html
+http://www.gpoaccess.gov/usbudget/fy00/guide05.html
+http://www.gpoaccess.gov/usbudget/fy01/guide05.html
+http://www.gptboycott.com/dead/disneyawards.php
+http://www.gr8gear.com/
+http://www.graceandpeace.us/archives/2004_12.html
+http://www.graceandtruthbooks.com/links/
+http://www.gracecathedral.org/enrichment/brush_excerpts/brush_20041027.shtml
+http://www.gracethrufaith.com/selah/forgiveness/life-in-the-garden
+http://www.graceyoung.com/excerpts1.html
+http://www.grad.gatech.edu/orientation/
+http://www.grad.niu.edu/osp/FAQs.html
+http://www.graddiv.ucsb.edu/pubs/filing_guide/special/
+http://www.gradesaver.com/ClassicNotes/Authors/about_james_cooper.html
+http://www.gradesaver.com/ClassicNotes/Titles/budd/themes.html
+http://www.gradesaver.com/ClassicNotes/Titles/catcherrye/summ4.html
+http://www.gradesaver.com/ClassicNotes/Titles/communist/summ2.html
+http://www.gradesaver.com/ClassicNotes/Titles/crucible/charlist.html
+http://www.gradesaver.com/ClassicNotes/Titles/earnest/fullsumm.html
+http://www.gradesaver.com/ClassicNotes/Titles/gawain/charlist.html
+http://www.gradesaver.com/ClassicNotes/Titles/liberty/summ2.html
+http://www.gradesaver.com/ClassicNotes/Titles/night/summ7.html
+http://www.gradesaver.com/ClassicNotes/Titles/night/summ8.html
+http://www.gradesaver.com/ClassicNotes/Titles/sense/summ3.html
+http://www.gradesaver.com/ClassicNotes/Titles/thunder/charlist.html
+http://www.gradesaver.com/ClassicNotes/Titles/winesburg/summ6.html
+http://www.gradesaver.com/ClassicNotes/Titles/winesburg/summ7.html
+http://www.gradesaver.com/ClassicNotes/Titles/winesburg/summ9.html
+http://www.gradingthemovies.com/html/mv/gtm_mv00413.shtml
+http://www.gradlink.edu.au/content/view/full/1405
+http://www.gradlink.edu.au/content/view/full/1406
+http://www.gradresources.org/articles/emotional_fatigue.shtml
+http://www.gradschool.unc.edu/events/october2003/lee.html
+http://www.gradschools.com/listings/UK/environ_studies_UK.html
+http://www.gradschools.com/listings/UK/geography_UK.html
+http://www.graduatecareers.hobsons.co.uk/advice_content.jsp?id=FOLLOWING_REJECTION
+http://www.graduatecareers.hobsons.co.uk/careers_content.jsp?id=SCIENCE_ADVICE_FOOD
+http://www.graduatecareers.hobsons.co.uk/result_profile.jsp?EmployerID=373&Content=CaseStudy2
+http://www.gradunion.cam.ac.uk/forum/viewtopic.php?t=665
+http://www.grady.uga.edu/coxcenter/activities/activities0203/act065.htm
+http://www.grady.uga.edu/coxcenter/mapor2.htm
+http://www.graffiti.org/faq/graffiti.glossary.html
+http://www.grahamazon.com/sp/other.php
+http://www.grahamfraserfoundation.org.uk/selvadurai%20report.htm
+http://www.grahamleader.com/Stories/0,1413,242%257E25260%257E2693086,00.html
+http://www.grahamsalisbury.com/books.html
+http://www.grain.org/bio-ipr/?id=386
+http://www.grain.org/seedling/?id=332
+http://www.gramcord.org/hwinnew.htm
+http://www.graminex.com/searching/ch15.php
+http://www.grammarstation.com/UserGuide.html
+http://www.grammarstation.com/grammar_glossary.html
+http://www.grammy.com/news/artswatch/2005/0620oecd.aspx
+http://www.grammy.com/press/upcoming.aspx
+http://www.granarybooks.com/books/clay/clay3.html
+http://www.granburydepot.org/church/elmhist.htm
+http://www.grancanariayoungsters.com/article374.html
+http://www.grancoffee.com/about_us.html
+http://www.grand.teton.national-park.com/boat.htm
+http://www.grandboomers.com/GB_retirement.html
+http://www.grandchalet.com/banquet.html
+http://www.grandin.com/references/acclimate.cattle.horses.html
+http://www.grandiose.com/98/980112.html
+http://www.grandiose.com/vb/femusic.html
+http://www.grandlodge-nc.org/nclor/SJandMHC.htm
+http://www.grandlodgescotland.com/website/famous.html
+http://www.grandmaraismichigan.com/Businesses/Clubs&NPOrgs/historicalsociety/historicalsociety.htm
+http://www.grandmothersforpeace.org/newsletters/December1999/Page02a.html
+http://www.grandparenting.org/New%20Generations.htm
+http://www.grandparenting.org/Stepgrandparenting.htm
+http://www.grandprix.com/ft/ft00034.html
+http://www.grandprix.com/ft/ft00117.html
+http://www.grandprix.com/ft/ft00305.html
+http://www.grandprix.com/race/r730sunpc.html
+http://www.grandtimes.com/Conquering_Sleep.html
+http://www.grandtimes.com/What_Dying.html
+http://www.grandtimes.com/articles/Deferred_Retirement.html
+http://www.grandtimes.com/christmas.html
+http://www.grandvilledrumline.com/FAQ.htm
+http://www.grange.org.uk/afrentrip.htm
+http://www.grannyd.com/speeches.php?id=46&action=list
+http://www.grannyd.com/speeches.php?id=60&action=list
+http://www.grannys.com/
+http://www.grannysgardenschool.com/
+http://www.granta.com/books/chapters/39
+http://www.granta.com/extracts/1872
+http://www.granta.com/extracts/1959
+http://www.granta.com/extracts/2040
+http://www.granta.com/extracts/683
+http://www.grantadesign.com/solutions/polymers/review.htm
+http://www.grantarchitects.com/
+http://www.grants.armstrong.edu/glossary.htm
+http://www.grants.gov/Apply
+http://www.grantthornton.ca/mgt_papers/MIP_template.asp?MIPID=43
+http://www.grantthornton.ca/mgt_papers/MIP_template.asp?MIPID=84
+http://www.grantthornton.com/content/70820.asp
+http://www.grape.org.za/Grape19/is19c.html
+http://www.grapevine.on.ca/faq.html
+http://www.graphesthesia.com/rw/s-Job.html
+http://www.graphics-muse.com/codingstandards.html
+http://www.graphpad.com/www/book/Interpret.htm
+http://www.grasstopsusa.com/boltonfight.html
+http://www.gratefulness.org/books/dsr.htm
+http://www.graveaddiction.com/egrave.html
+http://www.gravett.org/AA/archives/006241.html
+http://www.gravett.org/yobbo/quiz/quiz.htm
+http://www.grayhillsolutions.com/section508/
+http://www.grc-exchange.org/g_themes/ssaj_safety.html
+http://www.grc.com/stevegibson.htm
+http://www.grc.nasa.gov/WWW/Wright/airplane/balance.html
+http://www.grc.nasa.gov/WWW/Wright/airplane/balanceo.html
+http://www.grcnet.20m.com/custom2.html
+http://www.gre.ac.uk/courses/post/sch/bus/elogist.html
+http://www.gre.ac.uk/students/affairs/progression/principle-conditions.htm
+http://www.gre.org/respredict.html
+http://www.gre.org/writdir.html
+http://www.great-adventures.com/destinations/usa/new_york/newyork.html
+http://www.great-britain.co.uk/A-to-Z/accommodation-food.htm
+http://www.great-explorations.com/Pages/sts.html
+http://www.great-ideas.org/
+http://www.great-ideas.org/18prin.htm
+http://www.great-ideas.org/bookordr.htm
+http://www.great-lakes.net/teach/envt/fish/fish_4.html
+http://www.greatandhra.com/interviews/spiritual_stars.html
+http://www.greatbasin.net/index.php?click=sales&click_sub=ipass
+http://www.greatbooks.org/library/guides/steinbeck.html
+http://www.greatbooks.org/library/guides/steinbeck.shtml
+http://www.greatbooks.org/library/guides/trevor.shtml
+http://www.greatbooks.org/tcr/personalchoice.shtml
+http://www.greatbooksandfilm.com/macbeth.htm
+http://www.greatbritishkitchen.co.uk/regional/welshfood.htm
+http://www.greatchange.org/footnotes-overshoot.html
+http://www.greatcom.org/resources/know_why_you_believe/chap09/default.htm
+http://www.greatcommandment.net/content.php?id=62
+http://www.greatdividecyclery.com/techtalk/weight.html
+http://www.greatdreams.com/baby.htm
+http://www.greatdreams.com/diana4.htm
+http://www.greatdreams.com/eeyore/puppymls.htm
+http://www.greatdreams.com/nynuke.htm
+http://www.greatdreams.com/superstorm.htm
+http://www.greatercharlottebiz.com/article.asp?id=439
+http://www.greaterdemocracy.org/2003_07_01_gd.html
+http://www.greaterdemocracy.org/archives/2004_07.html
+http://www.greaterkwchamber.com/market_watch.shtml
+http://www.greaterlafayettedfa.org/
+http://www.greaterthings.com/JJDewey/Critique/suddenly.htm
+http://www.greatervancouverhotels.com/vancouver/carmana-plaza-hotel.htm
+http://www.greatestjeneration.com/archives/001320.php
+http://www.greateyecare.com/faq.html
+http://www.greatfallstribune.com/news/stories/20040829/localnews/1137963.html
+http://www.greatgridlock.net/NYC/nyc2b.html
+http://www.greatharvestministries.com/s16.html
+http://www.greatlists.com/faqs.htm
+http://www.greatnwfcu.com/electronics.html
+http://www.greatplainsgameandfish.com/hunting/guns-shooting/gf_aa096702a/
+http://www.greatplainsgameandfish.com/hunting/hunting-dogs/gf_aa116104a/
+http://www.greatreporter.com/modules.php?name=News&file=print&sid=81
+http://www.greatschools.net/modperl/browse_school/tx/9554
+http://www.greatschools.net/modperl/browse_school/vt/336
+http://www.greatschools.net/modperl/browse_school/wa/3116
+http://www.greatschools.net/modperl/browse_school/wa/3147
+http://www.greatschools.net/modperl/bycity/ok/?city=Felt&showall=1&level=a
+http://www.greatscottishwalk.com/events/rules.htm
+http://www.greatsite.com/featured-items-and-events/symposium.html
+http://www.greatstbarts.com/livery.htm
+http://www.greatvoice.com/archive_ivo/archiveindex_ivo.html
+http://www.greatwar.co.uk/westfront/ypsalient/secondypres/prelude/4thaokplan.htm
+http://www.greatwar.org.nz/leaving.htm
+http://www.greatwardifferent.com/Great_War/Albert/Albert_01.htm
+http://www.greatwardifferent.com/Great_War/Filming_the_War/Filming_the_War_01.htm
+http://www.greatwardifferent.com/Great_War/First_Gas_Attack/First_Gas_Attack_01.htm
+http://www.greatwardifferent.com/Great_War/Flying_Fighting_Men/Flying_Fighting_Men_01.htm
+http://www.grecoreport.com/gwb_&_the_neocons_%5Blay_down_w__dogs,_get_up_w_fleas%5D.htm
+http://www.grecoreport.com/slavery_in_the_ancient_greek_world_an_objective_approach_to_the_matter.htm
+http://www.greece.k12.ny.us/ath/library/high-school-teacher-projects/vail.htm
+http://www.greece.k12.ny.us/ath/library/webquests/backintime/default.htm
+http://www.greece.k12.ny.us/taylor/topics/class_size.htm
+http://www.greecetravel.com/phones/dorian.html
+http://www.greek101.com/customer/policies.php
+http://www.greekislands.com/crete/chania/south.htm
+http://www.greektravel.com/greekislands/kalymnos/
+http://www.greeleytrib.com/apps/pbcs.dll/article?AID=/20030608/ACCESSABILITY04/306070021/-1/ACCESSABILITY
+http://www.green-alliance.org.uk/mediaroom/ChildsPlacePressRelease/
+http://www.green-street.ca/how_it_works/index_e.html
+http://www.greenaction.org.il/english/
+http://www.greenaction.org/cancer/sfdraftlegislation.shtml
+http://www.greenair.com/interpri.htm
+http://www.greenanarchist.org/books/westrise.html
+http://www.greenbarley.com/neurodyne.html
+http://www.greenbeam.com/features/tour090301.stm
+http://www.greenbelt-news.org.uk/
+http://www.greenbelt.org.uk/generous/index.php?p=21
+http://www.greenbelts.ukos.com/gbconclude.html
+http://www.greenbuilder.com/general/articles/GBNews1.97.html
+http://www.greenbuilder.com/general/articles/GBNews10.97.html
+http://www.greenbuilder.com/general/articles/GBNews5.97.html
+http://www.greenbuildingstore.co.uk/regulations.php
+http://www.greenbuildingstudio.com/About.aspx
+http://www.greencarcongress.com/
+http://www.greencarcongress.com/2004/04/the_shadow_of_y.html
+http://www.greencarcongress.com/2004/05/china_and_kazak.html
+http://www.greencarcongress.com/2004/09/more_on_the_che.html
+http://www.greencarcongress.com/2004/10/flex_fuel_zooms.html
+http://www.greencarcongress.com/2005/02/iran_determined.html
+http://www.greencardplus.com/gc_marriage.html
+http://www.greencardplus.com/gc_renewal.html
+http://www.greencine.com/article?action=view&articleID=197&pageID=359
+http://www.greencollege.ubc.ca/gcds/content.cfm?Action=guidlines
+http://www.greenconstruction.co.uk/Archive/RoundUp9.htm
+http://www.greendoorfilms.co.uk/tandc.htm
+http://www.greeneconomics.net/OilWeEat.htm
+http://www.greenerbuilding.org/dealer_list.php?action=state&sid=20
+http://www.greenfeet.net/newsletter/Confessions-of-a-Modern-Day-Greenie.shtml
+http://www.greenfield.com/about_us/newsletters.asp
+http://www.greenfleet.com.au/transport/41.asp
+http://www.greenfutures.org.uk/text/viewpoints/default.asp
+http://www.greenfutures.org.uk/viewpoints/default.asp
+http://www.greengablesdollhouse.com/Miniature%20Lighthouses,%20Firehouses,%20Churches,%20Gazebos.htm
+http://www.greenglobe21.com/Documents/Newsletters/JULY2003.htm
+http://www.greenhomebuilding.com/QandA/earthshelteringQandA.htm
+http://www.greenhosp.org/greenwich/programs_hlc.htm
+http://www.greenhosp.org/greenwich/tyh-14.htm
+http://www.greenhouse.gov.au/coolcommunities/motivating/info.html
+http://www.greenhouse.gov.au/international/
+http://www.greenhouse.gov.au/yourhome/technical/fs75d_4.htm
+http://www.greenhouseonline.org/HC%20briefs.html
+http://www.greeninformation.com/nukeglossary.htm
+http://www.greenjournal.org/cgi/content/full/100/5/992
+http://www.greenjournal.org/cgi/content/full/104/6/1282
+http://www.greenkeybooks.com/
+http://www.greenland.com/Travel_Info/Hiking_Guides/Tasiilaq.php
+http://www.greenleaf-publishing.com/catalogue/unfold.htm
+http://www.greenleft.org.au/back/1992/46/46p10aiw.htm
+http://www.greenleft.org.au/back/2003/532/532p19d.htm
+http://www.greenleft.org.au/back/2004/607/607p6.htm
+http://www.greenleft.org.au/back/2004/609/609pp18f.htm
+http://www.greenleft.org.au/back/2004/610/610p22g.htm
+http://www.greenleft.org.au/back/2004/610/610p24c.htm
+http://www.greenleft.org.au/back/2005/613/613p4b.htm
+http://www.greenlife-herbal.com/version2/Doctor_Patients/case3.htm
+http://www.greenlinnet.com/fineprint/
+http://www.greenlitetravel.co.nz/previousnews.html
+http://www.greenmarketing.com/articles/IB_Nov_03.html
+http://www.greenmediaonline.com/uploads/shoptalk/0409st.asp
+http://www.greenmoneyjournal.com/article.mpl?newsletterid=24&articleid=250
+http://www.greenmountaincenter.org/tnhtour/ymca05.htm
+http://www.greenmountaindiapers.com/howto.htm
+http://www.greenmtn.edu/faculty/gravesj.asp
+http://www.greenockmortonsc.com/whats_new.html
+http://www.greenocktelegraph.co.uk/readstory.php?id=4008
+http://www.greenparty.ie/en/in_the_dail/communications_marine_natural_resources
+http://www.greenparty.org.uk/index.php?nav=speeches&n=29
+http://www.greenpeace.org.uk/contentlookup.cfm?ucidparam=20010730121201&CFID=2549109&CFTOKEN=88004637
+http://www.greenpeace.org.uk/contentlookup.cfm?ucidparam=20010730121201&Menupoint=D-B-C
+http://www.greenpeace.org/features/details?item_id=130555
+http://www.greenpeace.org/features/details?item_id=130555&print=1
+http://www.greenpeace.org/international_en/faq/view-q-and-a?category_id=4396&faq_id=15401
+http://www.greenpeace.org/international_en/news/details?item_id=455673
+http://www.greenpeace.org/international_en/send/send?return_url=%2Finternational_en%2Ffeatures%2Fdetails%3Fitem_id%3D327510
+http://www.greenpeace.org/international_en/victory/
+http://www.greenpeace.org/news/details?item_id=490662
+http://www.greenpeace.org/~toxics/html/content/actswiss.html
+http://www.greenplastic.com/
+http://www.greenplastic.com/discography/videography/fake_plastic_trees/index.php
+http://www.greenplumbers.com.au/index.php?pageID=110
+http://www.greenriverwriters.org/grwblog/archives/00000011.html
+http://www.greens.org.nz/campaigns/buylocal/cic6.htm
+http://www.greens.org.nz/docs/speeches/990606jf-confad.htm
+http://www.greens.org.nz/office/whatsnew2001.htm
+http://www.greens.org.nz/searchdocs/PR5497.html
+http://www.greens.org.nz/searchdocs/speech3001.html
+http://www.greens.org.nz/searchdocs/speech3024.html
+http://www.greens.org.nz/searchdocs/speech8263.html
+http://www.greensborocoliseum.com/calendar_details.cfm?id=168
+http://www.greensborocoliseum.com/ncaa_info.cfm
+http://www.greensborocoliseum.com/special_events_center_production_info.cfm
+http://www.greensborocoliseum.com/ticket_info_seating.cfm
+http://www.greensborocoliseum.com/ticket_outlets.cfm
+http://www.greenshop.co.uk/solar/solar-electric-intro.htm
+http://www.greensocialist.org.uk/ags/umbrella/u045.shtml
+http://www.greenspun.com/bboard/q-and-a-fetch-msg.tcl?msg_id=00458e
+http://www.greenspun.com/bboard/q-and-a.tcl?topic=Coffee%20Related%20Buy%2FSell%2FTrade
+http://www.greenstar.com/index.asp
+http://www.greentourism.org.uk/Default.aspx.LocID-008new085.RefLocID-008015003.Lang-EN.htm
+http://www.greenventure.ca/ecohouse.asp
+http://www.greenville.edu/publications/writing/writing1.shtml
+http://www.greenwichlibrary.org/coscobfriends.htm
+http://www.greenwichtime.com/news/local/scn-gt-wallofsound3jun23,0,2594191.story?coll=green-news-local-headlines
+http://www.greenwoodinstitute.org/resources/resmiss.html
+http://www.greenyearbook.org/agree/mar-env/oprc.htm
+http://www.gregbrown.org/gb4466.html
+http://www.gregburch.net/cars/hotrod.html
+http://www.gregevans.com.au/work.html
+http://www.greggsimpson.com/soundgallerymotionstudio.htm
+http://www.gregorc.com/workshop.html
+http://www.gregpalast.com/detail.cfm?artid=418&row=1
+http://www.gregsegal.com/style_and_scale.htm
+http://www.greippi.net/get/ringtone/All_alone.php
+http://www.grep-fu.net/archives/00000009.html
+http://www.greybearddesign.com/legal-termsofuse.asp
+http://www.greyblue.net/MidnightBlue/Childe/02.htm
+http://www.greyblue.net/MidnightBlue/Childe/03.htm
+http://www.greyblue.net/MidnightBlue/Mirror/12.htm
+http://www.grf-services.com/research.htm
+http://www.grf.k12.il.us/PineCrest/state_learning_standards.htm
+http://www.grida.no/climate/ipcc/emission/060.htm
+http://www.grida.no/climate/ipcc_tar/wg1/006.htm
+http://www.grida.no/climate/ipcc_tar/wg1/049.htm
+http://www.grida.no/climate/ipcc_tar/wg1/052.htm
+http://www.grida.no/climate/ipcc_tar/wg1/059.htm
+http://www.grida.no/climate/ipcc_tar/wg1/071.htm
+http://www.grida.no/climate/ipcc_tar/wg1/082.htm
+http://www.grida.no/climate/ipcc_tar/wg1/089.htm
+http://www.grida.no/climate/ipcc_tar/wg1/092.htm
+http://www.grida.no/climate/ipcc_tar/wg1/247.htm
+http://www.grida.no/climate/ipcc_tar/wg1/303.htm
+http://www.grida.no/climate/ipcc_tar/wg1/357.htm
+http://www.grida.no/climate/ipcc_tar/wg1/365.htm
+http://www.grida.no/climate/ipcc_tar/wg1/369.htm
+http://www.grida.no/climate/ipcc_tar/wg1/388.htm
+http://www.grida.no/climate/ipcc_tar/wg1/451.htm
+http://www.grida.no/climate/ipcc_tar/wg2/498.htm
+http://www.grida.no/geo/geo3/english/498.htm
+http://www.gridtb.org/projects/CEO/annex2.htm
+http://www.grieflossrecovery.com/grief-articles/talbott01.html
+http://www.griffin.uga.edu/fultonmastergarden/
+http://www.griffith.edu.au/text/jobs/med1482505/home.htm
+http://www.griffithobs.org/IPS%20Planetarian/IPSgradeconcepts.html
+http://www.griffjon.com/writing/fuckinghot.html
+http://www.grinningplanet.com/2004/07-08/political-truth-article.htm
+http://www.grist.org/comments/dispatches/2005/01/25/mckibben/index1.html
+http://www.grist.org/news/maindish/2003/02/11/warriors/
+http://www.grist.org/news/maindish/2004/10/27/scherer-christian/
+http://www.gritsonline.org/topo.htm
+http://www.grizedale.org/lying/postscript/
+http://www.grizzlyanalytical.com/
+http://www.grmi.org/renewal/Richard_Riss/sermons/0007.html
+http://www.grmi.org/renewal/Richard_Riss/sermons/0013.html
+http://www.gro-scotland.gov.uk/famrec/from_our_records/hallfame/science_engineering_and_industry.html
+http://www.groireland.ie/fees.htm
+http://www.grokdotcom.com/Volumes/
+http://www.grokdotcom.com/topics/EmotionallySpeaking.htm
+http://www.grokdotcom.com/topics/YouTalkingToMe.html
+http://www.grouchyoldcripple.com/archives/001665.html
+http://www.groundwatercentral.info/
+http://www.groupbstrep.com/brochure.htm
+http://www.groupnbt.com/jobs.php4
+http://www.groupsplus.com/pages/articles.htm
+http://www.grout.demon.co.uk/Barbara/bsrlm.htm
+http://www.grover.org/6week.htm
+http://www.growbag.com/features/all/all.html
+http://www.growingbusiness.co.uk/YQ8Oi6honnYeow.html
+http://www.growingbusiness.co.uk/YXCnZg8.html
+http://www.growingbusinessmag.co.uk/c0zl0aJoG9RP_Q.html
+http://www.growingbusinessmag.co.uk/change_view_mode.axd?id=aBvUT_12bA
+http://www.growingearth.com/six_leading_tree_problems_and_wh.htm
+http://www.growinggreener2.com/default.aspx?id=213
+http://www.growingnd.com/allmedia.pdf?mediaID=147&sz=172549
+http://www.growingsensibly.org/news/clippingsDetail.asp?objectID=1368
+http://www.growingsensibly.org/resources/listservDetail.asp?objectID=1037
+http://www.growingstrong.org/rop/feelings.html
+http://www.growthhouse.org/
+http://www.growthwork.ca/life-coach-weblog-entries/36_0_1_0_C/
+http://www.grrlstories.org/edactivities/ShantelParentTeacherAct.htm
+http://www.grumblemagazine.com/articles/toots/middleeast/
+http://www.grumet.net/writing/web/deep-thinking-about-weblogs.html
+http://www.grumpyspond.com/AUTUMN.HTM
+http://www.gruntdoc.com/2005/06/setting_the_rec.html
+http://www.gruts.com/darwin/
+http://www.gs.com/client_services/urban_investment_group/press_releases/press_release3.html
+http://www.gsa.gov/section515
+http://www.gsacsports.org/
+http://www.gsas.harvard.edu/financial/financialaid.html
+http://www.gsas.harvard.edu/publications/handbook/req_histsci.html
+http://www.gsb.columbia.edu/ipd/j_fdi.html
+http://www.gsb.columbia.edu/ipd/j_gdp_bk.html
+http://www.gsb.stanford.edu/community/bmag/sbsm0396/deregulation.htm
+http://www.gsb.stanford.edu/history/timeline/military.html
+http://www.gsb.stanford.edu/news/bmag/sbsm0411/feature_philanthropy.shtml
+http://www.gsb.stanford.edu/news/headlines/2005alumniconf_london_geopoliticspanel.shtml
+http://www.gsb.stanford.edu/news/headlines/2005healthcareconf.shtml
+http://www.gsb.stanford.edu/news/headlines/2005internatldevconf_zewdie.shtml
+http://www.gsb.stanford.edu/news/headlines/2005studytrip_dc.shtml
+http://www.gsblaw.com/join/dc.asp
+http://www.gsd.harvard.edu/inside/cadcam/description.html
+http://www.gsd.harvard.edu/inside/computer_resources/manual/printing/color/deskpub.htm
+http://www.gsd.harvard.edu/manual/cadcam/
+http://www.gsd.harvard.edu/users/pbcote/enr-100/exercise.htm
+http://www.gsdma.org/plaintruth_sep02/gujrehab.htm
+http://www.gsdring.com/cgi-bin/class/class_ad.pl?action=View+&cat=Older%20Dogs&scat=All&display=25&begin=1&end=10
+http://www.gsdrni.org/
+http://www.gse.buffalo.edu/programs/tei/undergrad/
+http://www.gse.harvard.edu/hfrp/eval/issue27/bbt1.html
+http://www.gse.harvard.edu/hfrp/projects/afterschool/conference/nsaca-2004.html
+http://www.gse.harvard.edu/hfrp/projects/fine/fineforum/forum5/questions.html
+http://www.gse.harvard.edu/hfrp/projects/fine/fineforum/forum7/spotlight.html
+http://www.gse.harvard.edu/hfrp/projects/fine/fineforum/forum8/questions.html
+http://www.gse.harvard.edu/hfrp/projects/fine/memberinsights.html
+http://www.gse.harvard.edu/hfrp/projects/fine/resources/teaching-case/standards.html
+http://www.gse.harvard.edu/hfrp/pubs/onlinepubs/ecd/may99.html
+http://www.gse.harvard.edu/hfrp/pubs/onlinepubs/rrb/learning.html
+http://www.gse.harvard.edu/news/features/boles06012003.html
+http://www.gse.harvard.edu/news/features/digitaldivide07012003.html
+http://www.gse.harvard.edu/~hepg/
+http://www.gse.harvard.edu/~ncsall/fob/2004/garner.html
+http://www.gse.uci.edu/markw/overview.html
+http://www.gseis.ucla.edu/courses/ed253a/2003_03_01_archive.php
+http://www.gseis.ucla.edu/courses/ed253a/2004_12_01_archive.php
+http://www.gseis.ucla.edu/courses/ed253a/Luke/LITLEX1.html
+http://www.gseis.ucla.edu/courses/ed253a/blogger.php
+http://www.gseis.ucla.edu/heri/darcu_pr.html
+http://www.gseis.ucla.edu/news/?id=22
+http://www.gsfc.nasa.gov/topstory/20011016ozonelayer.html
+http://www.gsfc.nasa.gov/topstory/2002/20020806ngst.html
+http://www.gsfc.nasa.gov/topstory/20020806ngst.html
+http://www.gsh.org/GSH/CF/ViewNarrative.cfm?narr=1014
+http://www.gsh.org/GSH/CF/ViewNarrative.cfm?narr=603
+http://www.gsh.org/GSH/CF/ViewNarrative.cfm?narr=985
+http://www.gsh.org/GSH/CF/_cfm/ViewNarrative.cfm?narrID=442
+http://www.gslis.utexas.edu/~palmquis/courses/reviews/judys-n.htm
+http://www.gsm.ucdavis.edu/faculty/Research/Fall2002.htm
+http://www.gsmwvc.org/TradingPost.html
+http://www.gsonet.org/shared/articles/HumanStem.htm
+http://www.gsriverland.com/modules/web/index.php?id=25
+http://www.gssiweb.com/reflib/attachment.cfm?id=4
+http://www.gsspl.org.uk/
+http://www.gstc.org/cookieSale.php
+http://www.gstrc.com/newslist.asp
+http://www.gsu.edu/~eslhpb/grammar/grammar_from_context.htm
+http://www.gsu.edu/~wwwadm/acceptstudent/advisement.htm
+http://www.gsu.edu/~wwwfit/fithome.html
+http://www.gsu.edu/~wwwfit/swimming.html
+http://www.gsu.edu/~wwwhcs/archives/archive_of_current_system.htm
+http://www.gsu.edu/~wwwpug/AppliedPracticaSites.htm
+http://www.gsu.edu/~wwwrtp/overview.htm
+http://www.gsu.tcd.ie/node/109
+http://www.gswc.ws/NewsLinks.htm
+http://www.gtabloggers.com/
+http://www.gtaforums.com/index.php?showtopic=175345
+http://www.gtaforums.com/index.php?showtopic=175555
+http://www.gtap.agecon.purdue.edu/
+http://www.gtap.agecon.purdue.edu/resources/res_display.asp?RecordID=576
+http://www.gtce.org.uk/achieve1national/
+http://www.gtce.org.uk/gtcinfo/remit.asp
+http://www.gtff.net/
+http://www.gthelectronics.com/controls.htm
+http://www.gtlaw.com/pub/pr/2003/dallas03a.htm
+http://www.gtldna.com/testimonials.html
+http://www.gtpcc.org/gtpcc/bullseye2pro.htm
+http://www.gty.org/cgi-bin/store/452001.html
+http://www.gu.edu.au/jobs/med1482505/home.htm
+http://www.gu.edu.au/school/art/text/oct02/letters.htm
+http://www.guantanamohrc.org/
+http://www.guard-ga.org/kids/ear.html
+http://www.guarded.net/solutions_services.html
+http://www.guardian.bz/hot.html
+http://www.guardian.co.uk/
+http://www.guardian.co.uk/Columnists/Column/0,5673,1164181,00.html
+http://www.guardian.co.uk/Columnists/Column/0,5673,1411348,00.html
+http://www.guardian.co.uk/Columnists/Column/0,5673,1489315,00.html
+http://www.guardian.co.uk/Columnists/Column/0,5673,1516043,00.html
+http://www.guardian.co.uk/Film/features/featurepages/0,4120,1477031,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1083847,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1206725,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1210520,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1215006,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1403708,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1411350,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1423237,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1432040,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,1508193,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,915579,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,943638,00.html
+http://www.guardian.co.uk/Iraq/Story/0,2763,966819,00.html
+http://www.guardian.co.uk/Northern_Ireland/Story/0,2763,209091,00.html
+http://www.guardian.co.uk/Northern_Ireland/Story/0,2763,725864,00.html
+http://www.guardian.co.uk/Observer/business/story/0,6903,949136,00.html
+http://www.guardian.co.uk/Society/publichealth/comment/0,11098,1352373,00.html
+http://www.guardian.co.uk/afghanistan/story/0,1284,1372484,00.html
+http://www.guardian.co.uk/afghanistan/story/0,1284,1440836,00.html
+http://www.guardian.co.uk/afghanistan/story/0,1284,822344,00.html
+http://www.guardian.co.uk/arts/arttheft/0,13883,1034066,00.html
+http://www.guardian.co.uk/arts/columns/laughingmatters/story/0,12231,946022,00.html
+http://www.guardian.co.uk/arts/critic/feature/0,1169,928930,00.html
+http://www.guardian.co.uk/arts/features/story/0,11710,1191655,00.html
+http://www.guardian.co.uk/arts/features/story/0,11710,1302348,00.html
+http://www.guardian.co.uk/arts/features/story/0,11710,1369643,00.html
+http://www.guardian.co.uk/arts/features/story/0,11710,1476763,00.html
+http://www.guardian.co.uk/arts/features/story/0,11710,1478777,00.html
+http://www.guardian.co.uk/arts/fridayreview/story/0,12102,1512708,00.html
+http://www.guardian.co.uk/arts/news/story/0,11711,1161737,00.html
+http://www.guardian.co.uk/arts/portrait/story/0,11109,1168194,00.html
+http://www.guardian.co.uk/arts/proms2002/story/0,12155,753715,00.html
+http://www.guardian.co.uk/arts/saatchi/story/0,13010,928929,00.html
+http://www.guardian.co.uk/bloodysunday/article/0,2763,184928,00.html
+http://www.guardian.co.uk/britain/article/0,2763,1461790,00.html
+http://www.guardian.co.uk/bulger/article/0,2763,195286,00.html
+http://www.guardian.co.uk/business/story/0,,912387,00.html
+http://www.guardian.co.uk/business/story/0,3604,1393476,00.html
+http://www.guardian.co.uk/business/story/0,3604,1514175,00.html
+http://www.guardian.co.uk/butler/story/0,14750,1332673,00.html
+http://www.guardian.co.uk/cars/story/0,15383,1487020,00.html
+http://www.guardian.co.uk/china/story/0,7369,1489182,00.html
+http://www.guardian.co.uk/china/story/0,7369,1509375,00.html
+http://www.guardian.co.uk/climatechange/story/0,12374,1324379,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1186509,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1287054,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1381165,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1433979,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1435203,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1480279,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1490687,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1495260,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1495640,00.html
+http://www.guardian.co.uk/comment/story/0,3604,1507420,00.html
+http://www.guardian.co.uk/comment/story/0,3604,968356,00.html
+http://www.guardian.co.uk/comment/story/0,3604,975423,00.html
+http://www.guardian.co.uk/conservation/story/0,13369,1324287,00.html
+http://www.guardian.co.uk/drugs/Story/0,2763,961868,00.html
+http://www.guardian.co.uk/economicdispatch/story/0,12498,968842,00.html
+http://www.guardian.co.uk/elsewhere/journalist/story/0,7792,1485890,00.html
+http://www.guardian.co.uk/elsewhere/journalist/story/0,7792,1495570,00.html
+http://www.guardian.co.uk/enron/story/0,11337,650327,00.html
+http://www.guardian.co.uk/equatorialguinea/story/0,15013,1497227,00.html
+http://www.guardian.co.uk/eu/story/0,7369,1492415,00.html
+http://www.guardian.co.uk/fairtrade/story/0,12458,1039189,00.html
+http://www.guardian.co.uk/food/Story/0,2763,1443677,00.html
+http://www.guardian.co.uk/freedom/Story/0,2763,1382740,00.html
+http://www.guardian.co.uk/g2/story/0,3604,813189,00.html
+http://www.guardian.co.uk/guantanamo/story/0,13743,1002942,00.html
+http://www.guardian.co.uk/guardian_jobs_and_money/story/0,3605,1503650,00.html
+http://www.guardian.co.uk/guardianpolitics/story/0,,1486289,00.html
+http://www.guardian.co.uk/guardianpolitics/story/0,3605,1204918,00.html
+http://www.guardian.co.uk/gun/Story/0,2763,1458377,00.html
+http://www.guardian.co.uk/hutton/story/0,13822,1130846,00.html
+http://www.guardian.co.uk/international/story/0,3604,1103566,00.html
+http://www.guardian.co.uk/international/story/0,3604,1484718,00.html
+http://www.guardian.co.uk/international/story/0,3604,344548,00.html
+http://www.guardian.co.uk/israel/Story/0,2763,1374609,00.html
+http://www.guardian.co.uk/japan/story/0,7369,1493940,00.html
+http://www.guardian.co.uk/kashmir/Story/0,2763,748897,00.html
+http://www.guardian.co.uk/korea/article/0,2763,1238120,00.html
+http://www.guardian.co.uk/life/feature/story/0,13026,960681,00.html
+http://www.guardian.co.uk/life/lastword/
+http://www.guardian.co.uk/life/science/story/0,12996,1497195,00.html
+http://www.guardian.co.uk/life/table/0,13235,937441,00.html
+http://www.guardian.co.uk/mayday/story/0,7369,481319,00.html
+http://www.guardian.co.uk/mayor/Story/0,2763,220012,00.html
+http://www.guardian.co.uk/military/story/0,11816,1265824,00.html
+http://www.guardian.co.uk/obituaries/story/0,3604,1200211,00.html
+http://www.guardian.co.uk/online/businesssolutions/story/0,12581,1290734,00.html
+http://www.guardian.co.uk/online/feedback/story/0,12457,1342480,00.html
+http://www.guardian.co.uk/online/news/0,12597,1210455,00.html
+http://www.guardian.co.uk/online/story/0,3605,1374155,00.html
+http://www.guardian.co.uk/online/story/0,3605,1383611,00.html
+http://www.guardian.co.uk/online/story/0,3605,884658,00.html
+http://www.guardian.co.uk/parents/story/0,3605,1476018,00.html
+http://www.guardian.co.uk/racism/0,2759,180308,00.html
+http://www.guardian.co.uk/religion/Story/0,2763,1339532,00.html
+http://www.guardian.co.uk/religion/Story/0,2763,1450292,00.html
+http://www.guardian.co.uk/religion/Story/0,2763,738814,00.html
+http://www.guardian.co.uk/september11/story/0,11209,601396,00.html
+http://www.guardian.co.uk/styleguide/page/0,5817,184827,00.html
+http://www.guardian.co.uk/supermarkets/story/0,12784,1432052,00.html
+http://www.guardian.co.uk/terrorism/story/0,12780,1171905,00.html
+http://www.guardian.co.uk/terrorism/story/0,12780,1486389,00.html
+http://www.guardian.co.uk/thebeatles/story/0,11212,606548,00.html
+http://www.guardian.co.uk/transport/Story/0,2763,1011437,00.html
+http://www.guardian.co.uk/tsunami/story/0,15671,1380838,00.html
+http://www.guardian.co.uk/uk_news/story/0,3604,1484698,00.html
+http://www.guardian.co.uk/ukraine/story/0,15569,1431029,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1033904,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1260037,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1407422,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1411349,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1493443,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1504193,00.html
+http://www.guardian.co.uk/usa/story/0,12271,1505997,00.html
+http://www.guardian.co.uk/usa/story/0,12271,947880,00.html
+http://www.guardian.co.uk/uselections2004/glennreynolds/story/0,15140,1321776,00.html
+http://www.guardian.co.uk/water/story/0,13790,1027654,00.html
+http://www.guardian.co.uk/weather/Story/0,2763,1432699,00.html
+http://www.guardian.co.uk/weekend/story/0,3605,985375,00.html
+http://www.guardian.co.uk/worldsummit2002/story/0,12264,763166,00.html
+http://www.guardian.co.uk/wtccrash/story/0,1300,583869,00.html
+http://www.guardian.co.uk/yugo/article/0,2763,1252052,00.html
+http://www.guardian.co.uk/yugo/article/0,2763,1324024,00.html
+http://www.guardian.co.uk/zimbabwe/article/0,2763,440229,00.html
+http://www.guardianlife.com/solutions/retirement/choose_retirement_destination.html
+http://www.guardianlife.com/study/retirement/choose_retirement_destination.html
+http://www.guardiannewsngr.com/focus_record/article01
+http://www.guardianship.gov.uk/ourcommitment/complaints.htm
+http://www.guardiansorder.com/2005/
+http://www.guernseydems.org/index.php?display=ArticleDetails&id=544330
+http://www.guerrillagirls.com/hotflashes/index.shtml
+http://www.guest-tek.com/index.php?page=30
+http://www.guidant.com/condition/heart/vessel_intro.shtml
+http://www.guidedbiblestudies.com/001res3.htm
+http://www.guidedbiblestudies.com/001sin8.htm
+http://www.guidehorse.com/guide_horse_candidates_grahmann.htm
+http://www.guideline.gov/summary/summary.aspx?doc_id=5888&nbr=3874&ss=6&xl=999
+http://www.guideline.gov/summary/summary.aspx?view_id=1&doc_id=5888
+http://www.guidelines.gov/summary/summary.aspx?ss=15&doc_id=5592&nbr=3778
+http://www.guides.org.uk/members/brownies/brframe.htm
+http://www.guidetocoachingbasketball.com/defense.htm
+http://www.guidetopsychology.com/ad_viol.htm
+http://www.guidetopsychology.com/intro.htm
+http://www.guidetopsychology.com/legal.htm
+http://www.guidewire.com/customers/
+http://www.guidewiregroup.com/archives/ideas/
+http://www.guidingstar.ca/MGVC/Spring_2005_Courses_1.htm
+http://www.guild.org.au/public/nsw/marketing.asp
+http://www.guildofblades.com/retailer-overview.html
+http://www.guitar.co.nz/test.php3
+http://www.guitar9.com/danmc3.html
+http://www.guitar9.com/studionine.html
+http://www.guitaralliance.com/
+http://www.guitarnoise.com/article.php?id=151
+http://www.guitarnoise.com/article.php?id=21
+http://www.guitarnoise.com/article.php?id=318
+http://www.guitarnoise.com/article.php?id=480
+http://www.guitarnoise.com/article.php?id=512
+http://www.guitarnoise.com/article.php?id=516
+http://www.guitarnoise.com/article.php?id=83
+http://www.guitarnoise.com/print_article.php?id=21
+http://www.guitarprinciples.com/GettingBetter/essay6.htm
+http://www.guitarschool.net/product_show.asp?product_id=33
+http://www.guitarschool.net/product_show.asp?product_id=55
+http://www.guitarschool.net/product_show.asp?product_id=81
+http://www.gulfinvestigations.net/document330.html
+http://www.gulflink.osd.mil/2d_recon/2d_recon_refs/n51en083/f545-m.htm
+http://www.gulflink.osd.mil/kuwaiti_final/kuwaiti_final_s03.htm
+http://www.gulflink.osd.mil/m8a1alarms/m8a1s02.htm
+http://www.gulflink.osd.mil/oil_well_fires/oil_well_fires_sec01.htm
+http://www.gulflink.osd.mil/owf_ii/owf_ii_s01.htm
+http://www.gulflink.osd.mil/owf_ii/owf_ii_s02.htm
+http://www.gulfnews.com/Articles/news.asp?ArticleID=46275
+http://www.gulfwarvets.com/hot.htm
+http://www.gulliversports.co.uk/level1.asp?id=2&l2=120&cat=1&c=&r=Y
+http://www.gumbopages.com/music-books.html
+http://www.gumbopages.com/neworleans.html
+http://www.gumtree.com.au/sydney/75/1898475.html
+http://www.gumtree.com/london/43/1508143.html
+http://www.gumtree.com/london/84_1.html
+http://www.gun-control-network.org/IN0204.htm
+http://www.gun-control-network.org/IN0804.htm
+http://www.guncite.com/court/state/72se260.html
+http://www.guncite.com/court/state/80ma614.html
+http://www.guncite.com/gc2ndpur.html
+http://www.guncite.com/journals/halvt.html
+http://www.guncite.com/journals/reytenn.html
+http://www.gunfighter.com/webservices/
+http://www.gunitsoldier.com/
+http://www.gunowners.org/fs0104.htm
+http://www.gunsamerica.com/1101/1101-oldfirst-1.htm
+http://www.gunsamerica.com/1101/1101-random-1.htm
+http://www.gunsamerica.com/1180/1180-oldfirst-1.htm
+http://www.gunsamerica.com/1180/1180-random-1.htm
+http://www.gunsamerica.com/1291/1291-oldfirst-1.htm
+http://www.gunsamerica.com/1291/1291-random-1.htm
+http://www.gunsamerica.com/2350/2350-random-9.htm
+http://www.gunsamerica.com/2371/2371-random-6.htm
+http://www.gunsamerica.com/guns/976458117.htm
+http://www.gunsandammomag.com/values/index1.html
+http://www.gunsandammomag.com/values/september_1216/
+http://www.gunsandammomag.com/values/values0401_0415/
+http://www.gunshop.it/
+http://www.guntheranderson.com/liqueurs/storage.htm
+http://www.gurn.net/forums/archive/forum/14-1.html
+http://www.gurteen.com/gurteen/gurteen.nsf/0/A35FB14183960CB38025699100507D94/
+http://www.gurteen.com/gurteen/gurteen.nsf/id/X00091FC2/
+http://www.gurtler.net/2005/01/big-brother-watching-students-eat.html
+http://www.guru3d.com/article/network/119/6/
+http://www.gurusoftware.com/GuruNet/InternetTechnology.htm
+http://www.gurusoftware.com/GuruNet/Personal/Secret.htm
+http://www.gurusoftware.com/GuruNet/Personal/Topics/Energy.htm
+http://www.gurusoftware.com/GuruNet/Personal/Topics/Process.htm
+http://www.gurusoftware.com/GuruNet/Personal/Topics/Silent.htm
+http://www.gusbooks.com/sfhard1.html
+http://www.gusplc.com/gus/news/gusarchive/gus2004/2004-01-14/
+http://www.gutenberg.org/browse/authors/b
+http://www.gutenberg.org/browse/authors/f
+http://www.gutenberg.org/browse/authors/l
+http://www.gutenberg.org/dirs/1/4/5/6/14562/14562-h/14562-h.htm
+http://www.gutenberg.org/newsletter/features/index.php?article=poe.html
+http://www.guthwulf.com/toys/spawn/alientoys.html
+http://www.guttmacher.org/pubs/journals/2910603.html
+http://www.guttmacher.org/pubs/journals/gr030108.html
+http://www.guttmacher.org/pubs/tgr/05/3/gr050301.html
+http://www.guu.co.uk/debguide.htm
+http://www.guyanajournal.com/charlie.html
+http://www.guyanajournal.com/where_mutton.html
+http://www.guybuys.com/2117730.html
+http://www.guyfinley.com/Key_Lessons/Expanded_Lessons/Further_Understanding/1798/?q=depression&ps=100&print=1
+http://www.gvep.org/section/recentactivities/
+http://www.gvhabitue.com/
+http://www.gvshp.org/fwvlpcsub904.html
+http://www.gw.govt.nz/story6446.cfm
+http://www.gwaliorworld.com/ArticleView.asp?article_id=18
+http://www.gwbc.com/
+http://www.gwcadopt.org/news_display.php?id=16
+http://www.gwentprobation.gov.uk/about/about_pir.html
+http://www.gwhatchet.com/news/2004/10/28/MetroNews/Waiting.In.Line.Is.Now.An.Hourly.Job-784466.shtml
+http://www.gwhatchet.com/news/2005/05/23/CampusNews/PartTime.Faculty.Union.To.Go.Forward.Pending.Certification-953565.shtml
+http://www.gwhealthpolicy.org/newsps/Home/intro.html
+http://www.gwhealthpolicy.org/newsps/SCHIP/intro_ex_sum.htm
+http://www.gwiep.net/books/bp08.htm
+http://www.gwiep.net/books/gwm12.htm
+http://www.gwla.org/governance/digitalref.htm
+http://www.gwla.org/governance/digitalrefpf.htm
+http://www.gwmicro.com/wemanual/section6_6.htm
+http://www.gwpca.org/sections_committees/Committees/commain.htm
+http://www.gwpda.org/naval/bcs002.htm
+http://www.gwpda.org/naval/rnoilnts.htm
+http://www.gwsae.org/executiveupdate/2005/January/actively.htm
+http://www.gwsafrica.org/knowledge/ap1.html
+http://www.gwu.edu/~erpapers/documents/articles/favorsmith.html
+http://www.gwu.edu/~gwpres/speeches_senate_sept04.html
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB142/
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB42/
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB58/
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB7/nsaebb7.htm
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB82/
+http://www.gwu.edu/~nsarchiv/NSAEBB/NSAEBB82/press.htm
+http://www.gwu.edu/~nsarchiv/news/19991105/13jun89.htm
+http://www.gwu.edu/~nsarchiv/news/20050310/
+http://www.gwu.edu/~nsarchiv/news/20050510/
+http://www.gwu.edu/~nsarchiv/nsa/publications/nh/
+http://www.gwumc.edu/sphhs/healthpolicy/chsrp/newsps/Home/intro.html
+http://www.gwworx.com/aff/products/cb/indexm0.html
+http://www.gwyneddfriends.org/jenkinschapter10.htm
+http://www.gwyneddfriends.org/jenkinschapter9.htm
+http://www.gyford.com/phil/writing/2004/07/09/what_webloggers_.php
+http://www.gyford.com/phil/writing/2004/08/25/seeing_the_light.php
+http://www.gymboree.ch/play.html
+http://www.gymuser.co.uk/regions/scotland/health-clubs-in-quarter.htm
+http://www.gymuser.co.uk/regions/south-east/health-clubs-in-oxford.htm
+http://www.gypsymoth.ento.vt.edu/~sharov/biosem/geninfo.html
+http://www.gyrodynehelicopters.com/seaman_cindy.htm
+http://www.h-net.org/reviews/showrev.cgi?path=182101087482516
+http://www.h-net.org/reviews/showrev.cgi?path=191131055743941
+http://www.h-net.org/reviews/showrev.cgi?path=275411024069377
+http://www.h-net.org/~german/gtext/nazi/wanneng2.html
+http://www.h-net.org/~habsweb/sourcetexts/serbs1.htm
+http://www.h-u-m.net/
+http://www.h-w-k.de/english/ginneken.htm
+http://www.h1base.com/page.asp?id=326
+http://www.h2om.com/course.htm
+http://www.haaretzdaily.com/hasen/spages/529898.html
+http://www.haas.berkeley.edu/groups/newspubs/haasnews/archives/hn062303.html
+http://www.hab.gov.hk/en/policy_responsibilities/others/gambling.htm
+http://www.habd.org/Social%20Services3.htm
+http://www.habitat.org/hw/feb_march04/feature6.html
+http://www.habonimdror.org/news/btnua/feb2000/activism.htm
+http://www.habraken.com/john/annotate.htm
+http://www.habtheory.com/1/106.php
+http://www.habtoor.com/thinkingclearly/html/issue33.htm
+http://www.hackaday.com/entry/1234000213034956/
+http://www.hackcanada.com/canadian/phreaking/bcps2.html
+http://www.hackcanada.com/ice3/wetware/ratbot_ethics.html
+http://www.hackingnetflix.com/netflix/2004/11/netflix_collect.html
+http://www.hackingnetflix.com/netflix/2005/01/taxing_problem_.html
+http://www.hackingnetflix.com/netflix/2005/02/blockbuster_sup.html
+http://www.hacknot.info/hacknot/action/showEntry?eid=50
+http://www.hackwriters.com/lostcity.htm
+http://www.hada.com/Default.aspx?tabid=46
+http://www.haemibalgassi.com/advice.html
+http://www.haemo-sol.com/faq.html
+http://www.haemofili-advokat.com/media.htm
+http://www.hafftka.com/hunter/
+http://www.hafresno.org/default_sub.asp?page=faq_hcv_evictions
+http://www.hagangroup.com/acepfaqs.asp
+http://www.hahc.org.uk/sltt/SLTT2003-4a.htm
+http://www.hain.org/Ha/haonline2004/Jun2004.htm
+http://www.hair-styles.org/are-salon-products-better.html
+http://www.hairboutique.com/
+http://www.hairboutique.com/snippits/snippits2000.htm
+http://www.hairboutique.com/tips/productreviews.htm
+http://www.hairboutique.com/tips/tip095.htm
+http://www.hairboutique.com/tips/tip10017.htm
+http://www.hairboutique.com/tips/tip1051.htm
+http://www.hairboutique.com/tips/tip1141.htm
+http://www.hairboutique.com/tips/tip1144.htm
+http://www.hairboutique.com/tips/tip826.htm
+http://www.hairboutique.com/tips/tip967.htm
+http://www.hairboutique.com/tips/tips.htm
+http://www.hairlossadvisor.com/webcast_transcript.asp?f=hairloss&c=hairloss_medaction&b=hairlossadvisor
+http://www.haithindustrial.co.uk/index.php?sec=term
+http://www.haiti-info.com/article.php3?id_article=194
+http://www.haiti.org/business&opportunity/bus_guide_investing.htm
+http://www.haitiglobalvillage.com/sd-sd-navmaps/Solidarity%20House.htm
+http://www.haitisurf.com/forums/viewtopic.php?t=1729
+http://www.haiweb.org/medicineprices/faq.html
+http://www.haleproducts.com/customerservice/faq/
+http://www.halexandria.org/dward496.htm
+http://www.halfbakery.com/idea/Big_20Guns
+http://www.halfbakery.com/idea/Celebrity_20Name_20Tag
+http://www.halfbakery.com/idea/Hair_20Whippersnapper
+http://www.halfbakery.com/idea/The_20Euro_20is_20dead
+http://www.halfbakery.com/idea/The_20Evening_20Calculator
+http://www.halfbakery.com/idea/The_20Hundred_20Thousand_20Gallon_20Restaurant
+http://www.halhigdon.com/
+http://www.halhigdon.com/beginningskier/turning.htm
+http://www.halifaxinitiative.org/index.php/Resources_Glossary
+http://www.hallert.net/misc/tankcam/tankcam.html
+http://www.hallgold.com/Neways_training_aspartame2.htm
+http://www.hallgold.com/ailments_aspartame.htm
+http://www.hallofflame.org/KresekReport.htm
+http://www.halloweenishere.com/ghost_stories.html
+http://www.hallrender.com/health_care/health_economics_01.html
+http://www.halobabies.net/archive/04/10/11/monday_fan_art_features/
+http://www.halogensoftware.com/news/May26th2005.php
+http://www.halplotkin.com/cnbcs136.htm
+http://www.halsguide.com/bobm1.html
+http://www.haltabuse.org/help/header.shtml
+http://www.haltonsearch.com/hr/ob/story/2581858p-2993607c.html
+http://www.hamiltoncountyauditor.org/news_dog_article1.asp
+http://www.hamiltonlabels.co.uk/
+http://www.hamline.edu/law/adr/study_abroad/paris_budapest_program_-_courses_and_teachers.html
+http://www.hammerandco.com/publications-agenda-ch2.asp
+http://www.hammerwood.mistral.co.uk/otherbb.htm
+http://www.hammerzone.com/archives/exterior/trim/water_table/pvc.htm
+http://www.hammockcamping.com/Free%20Reports/PeaPod03.htm
+http://www.hampshireprobate.com/common_legal_terms.htm
+http://www.hampton-smith.com/portfolio.html
+http://www.hampton.lib.nh.us/hampton/history/pamphlets/16381888.htm
+http://www.hamptonva.biz/welcome_region.html
+http://www.hancockshakervillage.org/about/employment_and_volunteering.html
+http://www.handbag.com/beauty/skincare/recovery2/
+http://www.handballcity.com/news07122003to04062003.htm
+http://www.handbook.uts.edu.au/law/ug/c10139.html
+http://www.handbook.uts.edu.au/sci/ug/c10174.html
+http://www.handbook.uts.edu.au/sci/ug/c10184.html
+http://www.handgunrepairshop.com/
+http://www.handlebarclub.org.uk/garyspagef.htm
+http://www.handmade4baby.com/
+http://www.handonline.org/parents/
+http://www.handpapermaking.org/BackIssues.html
+http://www.handprint.com/HP/WCL/pigmt2.html
+http://www.handsoffvenezuela.org/natfhe_support_bolivarian_revolution.htm
+http://www.handsoffvenezuela.org/venepal_workers_control.htm
+http://www.handsonenglish.com/
+http://www.handsonnetwork.org/etc/newsletters/200401/news.html
+http://www.handtops.com/show/news/78
+http://www.handweaving.net/ProductDetails.aspx?SKU=5
+http://www.handyarchive.com/free/economic/
+http://www.handymanwire.com/questions/heatingq.html
+http://www.handymate.co.uk/
+http://www.hanen.org/Hanen2002/pages/LearningResourceCentre/BooksVideosAndOtherMaterials/BooksVideosAndOtherMaterials.htm
+http://www.hangtide.com/poetry/066/
+http://www.hanitzotz.com/challenge/76/sowing.htm
+http://www.hanitzotz.com/challenge/83/michal-wall-jm2.htm
+http://www.hankermetal.com/int-ss.htm
+http://www.hankermetal.com/lyriow.htm
+http://www.hankermetal.com/lyriowr.htm
+http://www.hannabery.com/equipment.shtml
+http://www.hannabery.com/products.shtml
+http://www.hannabery.com/spotlightC.shtml
+http://www.hanoverparkillinois.org/ReferenceDesk/PressReleases.htm
+http://www.hanoverparkillinois.org/Services/CommunityDevelopment/GuidesAndPublications/GuideForNewBusinesses.htm
+http://www.hansenonline.net/Networking/bind-spam.html
+http://www.hants.gov.uk/regulatory/busadvice/fish.html
+http://www.hants.gov.uk/regulatory/busadvice/gavew.html
+http://www.hants.gov.uk/regulatory/busadvice/gavew2.html
+http://www.hants.gov.uk/socservs/directpayments/direct113.html
+http://www.hanzismatter.com/
+http://www.happen.ca/terms.html
+http://www.happeningpeople.com/newsletters/newsletter.asp
+http://www.happinessclub.com/FairfieldCitizen/060904.htm
+http://www.happinessonline.org/BeTemperate/
+http://www.happy.co.uk/abouthappy/mediaFT.asp
+http://www.happycampnews.com/
+http://www.happychild.org.uk/nvs/appeals/africa/sle1059.htm
+http://www.happychild.org.uk/translate/english/
+http://www.happydaycards.com/ww/recipeindex.html
+http://www.happyfamilies.com/familypages.html
+http://www.happyhealthypregnancy.com/info/sjmj/index.aspx
+http://www.happypawsdaycare.com/id1.html
+http://www.happyscrappy.com/
+http://www.harborfreight.com/cpi/t/h.taf?acct=2002898&email=&c=1
+http://www.harbour.sfu.ca/freda/reports/mpol10.htm
+http://www.harbour.sfu.ca/~hayward/van/lyrics/days.html
+http://www.harbus.org/news/2003/04/28/Ae/A.Minute.With.Steven.T.Florio-427580.shtml
+http://www.harchester.net/episodes/episodes.php?season=8&episode=335
+http://www.harchester.net/interviews/dt7-interviews.php?interview=7
+http://www.harcourtbooks.com/bookcatalogs/bookpage.asp?isbn=0156030101&option=excerpt
+http://www.hardballtimes.com/main/article/a-world-of-pain/
+http://www.hardballtimes.com/main/article/defensive-regression-analysis-complete-series/
+http://www.hardballtimes.com/main/article/nnq-18august04/
+http://www.hardballtimes.com/main/article/ten-things-i-didnt-know-last-week10/
+http://www.hardgainers-home-gym.com/exer_text/video.htm
+http://www.hardhats.org/history/hardhats.html
+http://www.hardnewscafe.usu.edu/artlife/features/053105_hickman.html
+http://www.hardocp.com/
+http://www.hardwareanalysis.com/content/topic/38863/
+http://www.hardwarecentral.com/hardwarecentral/reviews/4722/1
+http://www.hardwicke.co.uk/housing/articles/01120103.htm
+http://www.hardwicke.co.uk/pi/caselaw/
+http://www.haringkids.com/book/randb/contest/highschool3.htm
+http://www.haringkids.com/lessons/envs/live/htdocs/lesson115.htm
+http://www.harithehadron.blogspot.com/
+http://www.harktheherald.com/index.php
+http://www.harlemlive.org/arts-culture/music/subwaydrumer/
+http://www.harley.com/art/abstract-art/
+http://www.harmonicacountry.com/cowboy/westerns/Pony/Pony1.html
+http://www.harmonicinc.com/ah_investor_relations.cfm
+http://www.harmonicinc.com/gs_techsupport_spr-form.cfm
+http://www.harmonybakery.com/music.html
+http://www.harmreduction.org/idu/chapter2.html
+http://www.haroldpinter.org/acting/acting_forstage.shtml
+http://www.harpanddragon.com/designbooks.htm
+http://www.harperacademic.com/catalog/excerpt_xml.asp?isbn=0380804891
+http://www.harperacademic.com/catalog/instructors_guide_xml.asp?isbn=0060936843
+http://www.harperchildrens.com/catalog/excerpt_xml.asp?isbn=0064400972
+http://www.harpercollins.com.au/title.cfm?ISBN=0007157215&Author=0000000
+http://www.harpercollins.com.au/title.cfm?ISBN=0007157304&Author=0000000
+http://www.harpercollins.com.au/title.cfm?ISBN=0007195222&Author=0000000
+http://www.harpercollins.com/authorevents.asp?ACT=AuthorEvents&EAuthorID=19638
+http://www.harpercollins.com/authorevents.asp?ACT=DisplayType&EventType=BOOKSTORE&EChannel=&EImprint=&EAuthorID=
+http://www.harpercollins.com/authorevents.asp?ACT=DisplayType&EventType=BOOKSTORE&EChannel=History&EImprint=&EAuthorID=
+http://www.harpercollins.com/authorevents.asp?ACT=DisplayType&EventType=EVENT&EChannel=&EImprint=William%20Morrow&EAuthorID=
+http://www.harpercollins.com/authorevents.asp?ACT=DisplayType&EventType=EVENT&EChannel=History&EImprint=&EAuthorID=
+http://www.harpercollins.com/channels.asp?channel=History&section=events
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060092661&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060280921&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060516925&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060528885&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060541644
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060541644&tc=bd
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060543140&tc=ai
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060567031
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060567031&tc=ae
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060580852&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060586370&tc=rg
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060594071&tc=ai
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060594179&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060596376&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060675209&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060721480&tc=ae
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060821655&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060934646&tc=ae
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=006093834X&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0060989033
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0061042935&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0064401146&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0064407330&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0066214130&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0380791234&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0380797631&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0380815370&tc=rg
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0688176941&tc=ai
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0688177824&tc=cx
+http://www.harpercollins.com/global_scripts/product_catalog/book_xml.asp?isbn=0887306152&tc=cx
+http://www.harpercollins.com/imprints.asp?imprint=William%20Morrow&section=events
+http://www.harpercollins.com/rd_om/bbn-0404/book/0060521538
+http://www.harpercollins.com/rd_om/bbn-0404/excerpt/0060578718
+http://www.harperimage.com/anilox-specs-line.asp
+http://www.harpers.org/2004-01-WeComeInPeace.html
+http://www.harpers.org/Business.html
+http://www.harpers.org/Education.html
+http://www.harpers.org/Entertainer.html
+http://www.harpers.org/Folly.html
+http://www.harpers.org/GoodEnoughForWashington.html
+http://www.harpers.org/Holiday.html
+http://www.harpers.org/Oil.html
+http://www.harpers.org/Poverty.html
+http://www.harpers.org/SeizingArabOil.html
+http://www.harpers.org/SoldiersOfChrist.html
+http://www.harpers.org/TheApocalypseWillBeTelevised.html
+http://www.harpers.org/TheColumnsOfLiberty.html
+http://www.harpers.org/TheOilWeEat.html
+http://www.harpers.org/War.html
+http://www.harpsociety.org/handbook/publicity.html
+http://www.harpsonline.org/rescues.htm
+http://www.harriman-house.com/backoffice/
+http://www.harrimanarts.org/0506descriptions.htm
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=304
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=339
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=417
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=454
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=486
+http://www.harrisinteractive.com/harris_poll/index.asp?PID=533
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=304
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=338
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=384
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=455
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=485
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=757
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=820
+http://www.harrisinteractive.com/news/allnewsbydate.asp?NewsID=837
+http://www.harrisoncountyia.org/assessor/
+http://www.harrisoncsd.org/lmk/student.htm
+http://www.harrybrowne.org/articles/EconomicGrowth.htm
+http://www.harrymccracken.com/blog/
+http://www.harryrinker.com/col-933.html
+http://www.hartford-hwp.com/archives/26/016.html
+http://www.hartford-hwp.com/archives/26/055.html
+http://www.hartford-hwp.com/archives/28/007.html
+http://www.hartford-hwp.com/archives/29/033.html
+http://www.hartford-hwp.com/archives/30/165.html
+http://www.hartford-hwp.com/archives/36/424.html
+http://www.hartford-hwp.com/archives/37a/105.html
+http://www.hartford-hwp.com/archives/40/068.html
+http://www.hartford-hwp.com/archives/45a/004.html
+http://www.hartford-hwp.com/archives/45a/525.html
+http://www.hartford-hwp.com/archives/45a/563.html
+http://www.hartfordchurchdetroit.org/html/who/pastor.html
+http://www.hartfordmarathon.com/
+http://www.hartman-group.com/products/HB/2004_12_23.html
+http://www.hartpub.co.uk/style.html
+http://www.harunyahya.com/solutions01.php
+http://www.haruth.com/Jhumor41.htm
+http://www.harvard-magazine.com/issues/ma00/rightnow.html
+http://www.harvard-magazine.com/issues/mj99/damnd.html
+http://www.harvard-magazine.com/on-line/050465.html
+http://www.harvard-magazine.com/on-line/070474.html
+http://www.harvardlawreview.org/issues/112/7_1610.htm
+http://www.harvardmagazine.com/features/march15-remarks.html
+http://www.harvardmagazine.com/on-line/010452.html
+http://www.harvardmagazine.com/on-line/030597.html
+http://www.harvardmagazine.com/on-line/070281.html
+http://www.harvardmagazine.com/on-line/090453.html
+http://www.harvardsquarelibrary.org/unitarians/whitney.html
+http://www.harvardwestlake.com/students/studyskills/chapter2.html
+http://www.harvardwestlake.com/students/studyskills/chapter4.html
+http://www.harvestfields.ca/ebook/01/037/03.htm
+http://www.harvestfields.netfirms.com/Tea/01tb/017.htm
+http://www.harvestmoonbrewery.com/index.php/pg=brew/menu.html
+http://www.harvestmooncampaign.com/classes/technomagus.htm
+http://www.harveyind.com/homeowner/windows_doors/glossary.asp
+http://www.has-scotland.co.uk/TeachersPensions.htm
+http://www.hasbara.us/Gerald_A.htm
+http://www.hasbro.com/mylittlepony/pl/page.party_fun/dn/default.cfm
+http://www.hasbro.com/pl/page.game_and_toy_instructions/letter.P/dn/default.cfm
+http://www.hasbrouck-heights.nj.us/
+http://www.hasbrouck.org/draft/health.html
+http://www.hashai.com/blog/
+http://www.hashemian.com/
+http://www.haskell.org/tutorial/functions.html
+http://www.hasslberger.com/
+http://www.hasslberger.com/phy/phy.htm
+http://www.hastings-i.org/arch/artman/publish/cat_index_29.shtml
+http://www.hastingslegal.co.uk/Houses/754.htm
+http://www.hat.net/gadgets/audio_and_video.headphones.enclosed_headphones/shure_e5c_sound_isolating_earphones/
+http://www.hat.net/gadgets/audio_and_video.headphones.wireless_headphones/sennheiser_ba151_rechargeable_battery_for_sennheis/
+http://www.hat.net/pop/books.scary/lord_of_the_flies/
+http://www.hattrickpoli.com/cup/
+http://www.hattrickpoli.com/cup/default.asp?action=home
+http://www.hauntedchambers.net/rules.html
+http://www.hauntedhouse.com/submit/suggest.html
+http://www.hauntedink.com/25/definition.html
+http://www.havant.gov.uk/havant-4134
+http://www.have-a-heart.com/bipolar-depression.html
+http://www.havenworks.com/election/2002/
+http://www.haverford.edu/publications/fall97/campaignfinance.html
+http://www.hawaii-realty.com/free-real-estate-reports/8.htm
+http://www.hawaii-relocation.com/
+http://www.hawaii.edu/mauispeech/html/infotopichelp.html
+http://www.hawaii.gov/dbedt/ert/activitybook/cleanfuels.html
+http://www.hawaii.gov/gov/Members/candice/governor-newsletter/Newsletter.2004-12-03
+http://www.hawaiibusiness.cc/hb112002/default.cfm?articleid=19
+http://www.hawaiibusiness.cc/hb92004/default.cfm?articleid=13
+http://www.hawaiifive0.org/links.shtml
+http://www.hawaiiholidays.com/oahu.htm
+http://www.hawaiiplants.com/news.htm
+http://www.hawkesbury.sydneywideconferences.com.au/
+http://www.hawking.org.uk/lectures/warps2.html
+http://www.hawking.org.uk/text/public/warps.html
+http://www.hawksheadshow.co.uk/horticulture.htm
+http://www.hawkslandinggolfclub.com/index.asp?menuID=134
+http://www.haworth-village.org.uk/walks/scarborough/scarborough.asp
+http://www.haworth-village.org.uk/walks/straw-race/straw-race.asp
+http://www.haworthpress.com/store/E-Text/View_EText.asp?a=3&fn=J026v15n04_06&i=4&s=J026&v=15
+http://www.haworthpress.com/store/Toc_views.asp?TOCName=J001v18n01_TOC&desc=Volume%3A%2018%20Issue%3A%201
+http://www.haworthpress.com/store/product.asp?sku=4987
+http://www.hawspets.org/
+http://www.hay-on-wye.co.uk/yorkhouse/
+http://www.haygrove.somerset.sch.uk/data/Curriculum/GCSE_choice1.htm
+http://www.haywardgardens.com/garden.html
+http://www.haywoodhall.org/events/pol_guide.html
+http://www.hazards.org/deadlybusiness/careless.htm
+http://www.hazards.org/diyresearch/
+http://www.hazards.org/news/08jan05.htm
+http://www.hazards.org/rehab/
+http://www.hazards.org/sickness/
+http://www.hba.org.my/news/2004/904/government_servants.htm
+http://www.hbamahoningvalley.com/HBAMembershipFolder/hbamvapprovedpolicies.htm
+http://www.hbc.com/hbcheritage/history/people/builders/simpson.asp
+http://www.hbc.com/hbcheritage/learning/bibliography/
+http://www.hbci.com/~wenonah/new/hsense.htm
+http://www.hbcunetwork.com/modules/Networking/ginascorner/
+http://www.hbd.com/disclaimer.php
+http://www.hbds.co.za/info.asp
+http://www.hbe.co.uk/tolet.htm
+http://www.hbees.com/heretcdeephe.html
+http://www.hbg.psu.edu/LearningCenter/staff/employment.html
+http://www.hbns.org/news/income11-12-02.cfm
+http://www.hbo.com/billmaher/new_rules/
+http://www.hbo.com/films/laramie/
+http://www.hbo.com/sixfeetunder/episode/season4/episode42.shtml
+http://www.hbo.com/sixfeetunder/episode/season4/episode47.shtml
+http://www.hbo.com/thewire/behindthescenes/murderers_row.shtml
+http://www.hbofanclub.com/
+http://www.hbosplc.com/abouthbos/History/BoS%20Tree/Thistle_Bank.asp
+http://www.hbosplc.com/economy/scottisheconomicindex.asp
+http://www.hbs.edu/about/news/030603_erc.html
+http://www.hbs.edu/mba/recruiting/calendar.html
+http://www.hbschool.com/newsbreak/wales.html
+http://www.hc-sc.gc.ca/english/media/releases/2002/2002_51.htm
+http://www.hc-sc.gc.ca/english/media/releases/2003/2003_68.htm
+http://www.hc-sc.gc.ca/english/media/releases/2003/2003_71.htm
+http://www.hc-sc.gc.ca/english/protection/warnings/sars/learning/reports/naylor_ocoth_recommendations.html
+http://www.hc-sc.gc.ca/fnihb-dgspni/fnihb/nihb/pharmacy/bulletin/november2002.htm
+http://www.hc-sc.gc.ca/hecs-sesc/tobacco/council/advisorycouncil_meeting_2.html
+http://www.hc-sc.gc.ca/hecs-sesc/water/factsheets/blue_green_algae.htm
+http://www.hc-sc.gc.ca/hpfb-dgpsa/inspectorate/stand_operat_pro_det_equi_e.html
+http://www.hc-sc.gc.ca/hpfb-dgpsa/nhpd-dpsn/exploration_botanical_07_e.html
+http://www.hc-sc.gc.ca/hpfb-dgpsa/onpp-bppn/fptgn_e.html
+http://www.hc-sc.gc.ca/hppb/healthcare/pubs/selfcare/ch2-2en.htm
+http://www.hc-sc.gc.ca/iacb-dgiac/arad-draa/english/rmdd/bulletin/microbial.html
+http://www.hca.heacademy.ac.uk/history/index.php?section=history
+http://www.hca.heacademy.ac.uk/resources/disability/index.php
+http://www.hca2005.com/Life+_+Work/Biography/Short+Biography
+http://www.hcbible.org/
+http://www.hcc.hawaii.edu/~pine/Phil100/essay3-s-02.html
+http://www.hccentral.com/birkey1/mismod1.html
+http://www.hccentral.com/fdoct.html
+http://www.hcch.net/index_en.php?act=conventions.text&cid=69
+http://www.hccu.com.au/newsletter/default.php
+http://www.hcd.man.ac.uk/content/PubDetails/14629/
+http://www.hcea.org/issuespressbox_practices.html
+http://www.hcfo.net/topic0604.htm
+http://www.hcfo.net/topic0704.htm
+http://www.hcilondon.net/cgi-bin/printnews.pl?NewsCode=1047
+http://www.hcn.org/servlets/hcn.Article?article_id=2692
+http://www.hcourt.gov.au/publications_05.html
+http://www.hcourt.gov.au/speeches/kirbyj/kirbyj_deakin2.htm
+http://www.hcourt.gov.au/speeches/kirbyj/kirbyj_evattexhibition.htm
+http://www.hcourt.gov.au/speeches/kirbyj/kirbyj_genetics.htm
+http://www.hcourt.gov.au/speeches/kirbyj/kirbyj_inaugural.htm
+http://www.hcp.med.harvard.edu/research/quality/
+http://www.hcqualitycommission.gov/cborr/chap2.html
+http://www.hcqualitycommission.gov/cborr/exsumm.html
+http://www.hcqualitycommission.gov/meetings/mar12/discuss.html
+http://www.hcstarck.com/index.php?page_id=320
+http://www.hda.nhs.uk/html/resources/cancer_prevention/chapter8_e.html
+http://www.hda.org.uk/research/rs022.html
+http://www.hdb.gov.sg/isoa020p.nsf/0/6cfd00832cf8266d4825693f00292207?OpenDocument
+http://www.hdc.org/%20testimonyjuly13.htm
+http://www.hdinc.com/Reengineering/other_consult.html
+http://www.hdra.org.uk/publications/pubslist_compbooks.php
+http://www.hds.harvard.edu/news/article_archive/ground_zero.html
+http://www.hds.harvard.edu/prse/ndrs2004.html
+http://www.hds.org/hansonbook.html
+http://www.hdscotland.org/viewContent.php?id=99
+http://www.hdtvinfoport.com/About-HDTV-InfoPort.html
+http://www.hdtvpub.com/articles/whatisdtv/displaytypes.cfm
+http://www.hea.ie/index.cfm/page/sub/id/501
+http://www.hea.ie/index.cfm/page/sub/id/502
+http://www.head-cleaners.com/guilt.htm
+http://www.head-cleaners.com/guiltquilt.html
+http://www.headheritage.co.uk/uknow/features/index.php?id=25
+http://www.headheritage.co.uk/unsung/albumofthemonth/359
+http://www.headinjury.com/doctors.htm
+http://www.headinjuryonline.com/legal_pages/commitment.html
+http://www.headlinehistory.co.uk/teachers.htm
+http://www.headsetzone.com/ergonomics.html
+http://www.headwatersnews.org/p.091802.html
+http://www.headway.org.uk/default.asp?step=4&pid=41
+http://www.headwayireland.ie/about.abi.item.asp?id=6
+http://www.healer.ch/success.html
+http://www.healing-arts.org/mehl-madrona/mmtraditionalpaper.htm
+http://www.healingcrow.com/antibiotics/antibiotics.html
+http://www.healingdaily.com/colon-kidney-detoxification.htm
+http://www.healingheart.ltd.uk/faqs1.htm
+http://www.healingpeople.com/ht/index.php?option=content&task=view&id=56&Itemid=152
+http://www.healingwell.com/library/alzheimers/knox1.asp
+http://www.healingyourchild.com/
+http://www.healpastlives.com/future/rule/rucelmem.htm
+http://www.healpastlives.com/pastlf/exercise/explvows.htm
+http://www.healpastlives.com/pastlf/food/fdpain.htm
+http://www.healternatives.com/2004shows.htm
+http://www.health-heart.org/vitamins.htm
+http://www.health-marketplace.com/article-hair-regrowth.htm
+http://www.health-report.co.uk/aspartame-ailments.html
+http://www.health.adelaide.edu.au/info/bhs/current/enrol.html
+http://www.health.family.org/babies/articles/
+http://www.health.gov.au/internet/wcms/publishing.nsf/Content/ageing-manuals-dam-contents-5classi10.htm
+http://www.health.gov.au/internet/wcms/publishing.nsf/Content/health-archive-mediarel-1996-rwcordbl.htm
+http://www.health.gov.au/internet/wcms/publishing.nsf/Content/health-archive-mediarel-1998-mwsp980610.htm
+http://www.health.gov.au/internet/wcms/publishing.nsf/Content/health-mediarel-yr2004-ta-abb187.htm
+http://www.health.gov.au/nhmrc/publications/humans/preamble.htm
+http://www.health.gov.on.ca/english/providers/program/emu/pan_flu/ohpip/op_sub.html
+http://www.health.gov.on.ca/english/providers/program/mas/reviews/review_evar_0302.html
+http://www.health.gov.on.ca/english/providers/program/mas/reviews/review_vac_1204.html
+http://www.health.gov.on.ca/english/public/program/ltc/11_community.html
+http://www.health.gov.on.ca/english/public/pub/foodsafe/foodhandl.html
+http://www.health.gov.sk.ca/ps_coverage_opoc.html
+http://www.health.harvard.edu/fhg/Harchive/healthy.1100.shtml
+http://www.health.harvard.edu/newsweek/C-Reactive_Protein_test_to_screen_for_heart_disease.htm
+http://www.health.ie/
+http://www.health.net/corp_terms_of_use.asp
+http://www.health.net/disclaimer/
+http://www.health.nsw.gov.au/fcsd/rmc/cib/circulars/archive/index82.html
+http://www.health.nsw.gov.au/public-health/chorep/com/com_syphilisnot_ahs.htm
+http://www.health.ri.gov/publications/phb_8105.php
+http://www.health.sa.gov.au/hsfinder/LinkClick.aspx?link=HSFKeywordList.txt&mid=364
+http://www.health.sa.gov.au/pregnancy/DesktopDefault.aspx?tabid=181
+http://www.health.state.mn.us/divs/chs/mumar03.htm?page=5
+http://www.health.state.mn.us/divs/hpcd/chp/hpkit/text/phase4.htm
+http://www.health.state.ny.us/nysdoh/chplus/disclaim.htm
+http://www.health.state.ny.us/nysdoh/fhplus/disclaim.htm
+http://www.health.state.ny.us/nysdoh/hcra/cash_assess/crinstr.htm
+http://www.health.state.ny.us/nysdoh/lcanal/402news.htm
+http://www.health.state.ny.us/nysdoh/lcanal/902news.htm
+http://www.health.state.ny.us/nysdoh/westnile/final/c3/c3summry.htm
+http://www.health.state.ny.us/press/releases/2000/westnile9.htm
+http://www.health.state.ok.us/program/Injury/okface/Combine.htm
+http://www.health.vic.gov.au/maternity/yourpregnancy/earlydays.htm
+http://www.health.vic.gov.au/privatehospitals/impact/3.htm
+http://www.health24.com/Man/General/748-771,13591.asp
+http://www.health24.com/Man/Work/748-764,14285.asp
+http://www.health24.com/Woman/Common_conditions/711-712,18125.asp
+http://www.health24.com/Woman/Health_by_numbers/711-716,24378.asp
+http://www.health24.com/Woman/Special_events/711-729,20083.asp
+http://www.health24.com/fitness/Getting_started/16-474-486,11382.asp
+http://www.health24.com/man/general/748-771,13591.asp
+http://www.health24.com/medical/Condition_centres/777-792-814-1762,23100.asp
+http://www.health24.com/sex/Dating/1253-1255-1256,13360.asp
+http://www.healthaffairs.org/press/septoct0406.htm
+http://www.healthandage.com/Home/118!gm=1!gid2=1333
+http://www.healthandage.com/Home/122!gid2=2415
+http://www.healthandage.com/Home/130!gid2=2153
+http://www.healthandage.com/Home/832!gm=6!gid1=5203
+http://www.healthandage.com/Home/gc=40!l=2
+http://www.healthandage.com/Home/gc=40!l=2!gid2=1174
+http://www.healthandage.com/Home/gid6=6602
+http://www.healthandage.com/Home/gid6=6602!gm=15
+http://www.healthandage.com/Home/gid6=6602!gm=24
+http://www.healthandage.com/Home/gm=0!gc=36!l=2!gid2=2931
+http://www.healthandage.com/Home/gm=0!gc=9!l=7
+http://www.healthandage.com/Home/gm=1!gid1=6875
+http://www.healthandage.com/Home/gm=2!gid2=2153
+http://www.healthandage.com/Home/gm=20!gid2=2073
+http://www.healthandage.com/Home/gm=20!gid2=2128
+http://www.healthandage.com/PHome/gm=0!gc=36!l=1!gid1=5189
+http://www.healthandage.com/html/res/primer/primer3.htm
+http://www.healthandsafetyzone.com/shewebwatch.nsf/ArticleListHTML/18CA4635C2A22C4E80256D9B0046F4B7
+http://www.healthandwelfare.idaho.gov/
+http://www.healthassistancepartnership.org/site/PageServer?pagename=Preparingforhearings
+http://www.healthatoz.com/healthatoz/Atoz/dc/caz/bone/arth/artrheu.jsp
+http://www.healthatoz.com/healthatoz/Atoz/dc/caz/cosm/face/womturn.jsp
+http://www.healthatoz.com/healthatoz/Atoz/dc/cen/ment/sled/alert01042001.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/alcohol-related_neurologic_disease.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/anorexia_nervosa.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/endocarditis.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/exercise.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/liver_function_tests.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/lung_diseases_due_to_gas_or_chemical_exposure.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/minority_health.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/pseudomonas_infections.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/pulmonary_embolism.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/splenic_trauma.jsp
+http://www.healthatoz.com/healthatoz/Atoz/ency/warts.jsp
+http://www.healthatoz.com/healthatoz/Atoz/hc/chi/teen/alert09242003.jsp
+http://www.healthboards.com/boards/archive/index.php/t-69574.html
+http://www.healthbulletin.org/herbs/herbs13.htm
+http://www.healthbusinessuk.com/default.asp?id=111
+http://www.healthcare.ucla.edu/healthsciences/healthcare/ucla-medical/news/detail?rad_id=5876
+http://www.healthcare.uiowa.edu/InternalMedicine/Patients/bonemarrow/Patients/FAQ.htm
+http://www.healthcarereview.com/latest_news.php?show=109
+http://www.healthcarereview.com/latest_news.php?show=184
+http://www.healthcentral.com/bcp/main.asp?page=newsdetail&id=522192&ap=43&brand=16
+http://www.healthcentral.com/drdean/408/57662.html
+http://www.healthcentral.com/peoplespharmacy/pharmfulltext.cfm?ID=61022&storytype=PPherbdrug
+http://www.healthchoice.org.uk/codex/default.aspx
+http://www.healthcoalition.ca/relman.html
+http://www.healthcomplaints.act.gov.au/c/hcc?a=sendfile&ft=p&fid=1067564949&sid=
+http://www.healthcyclopedia.com/health-issues/body-image.html
+http://www.healthcyclopedia.com/health-products.html
+http://www.healthdefence.com/free_advice.html
+http://www.healthdevelopment.org/hphc/serabu.htm
+http://www.healthdiscovery.net/articles/accept_your_body.htm
+http://www.healthdiscovery.net/bootcamp/chat/chatwelcome.htm
+http://www.healthfulvalley.org/survey.html
+http://www.healthgrades.com/directory_search/Physician/Profiles/Cardiology/alpha19.cfm
+http://www.healthieryou.com/helpdep.html
+http://www.healthindustrycouncil.org/Task_Forces/
+http://www.healthinfonet.ecu.edu.au/html/html_health/specific_aspects/other_aspects/substance_use/alcohol_use1.htm
+http://www.healthinitiative.org/html/stoptb/
+http://www.healthinschools.org/focus/2002/no3.htm
+http://www.healthinschools.org/sh/influenza.asp
+http://www.healthinsite.gov.au/topics/Intellectual__Developmental_and_Learning_Disabilities
+http://www.healthinsite.gov.au/topics/Safe_Sex
+http://www.healthinsite.gov.au/topics/Self_Esteem_in_Childhood
+http://www.healthinsite.gov.au/topics/Young_People_and_Sex
+http://www.healthinsuranceindepth.com/other-self-employed-insurance.html
+http://www.healthlawyers.org/hlw/issues/030502/030502_01_top_01_oigcompguid.cfm
+http://www.healthlawyers.org/hlw/issues/030627/030627_13_reimburse_ibc.cfm
+http://www.healthleaders.com/magazine/feature1.php?contentid=36877
+http://www.healthleaders.com/magazine/feature1.php?contentid=39740
+http://www.healthleaders.com/magazine/roundtable1.php?contentid=35905&issueId=7
+http://www.healthleaders.com/news/archives.php?date=2004-5-25
+http://www.healthleaders.com/news/feature64106.html
+http://www.healthlibrary.com/news/2004/1-6-nov04/news18.html
+http://www.healthmatters.org.uk/stories/weeks.html
+http://www.healthmgttech.com/archives/h0103deadline.htm
+http://www.healthpolicycoach.org/doc.asp?id=3741
+http://www.healthrecipes.com/juice_fasting.htm
+http://www.healthscout.com/rxdetail/68/105/7/main.html
+http://www.healthsquare.com/fgwh/wh1ch07.htm
+http://www.healthsquare.com/mc/fgmc1531.htm
+http://www.healthstylesexercise.com/balance/Weeble-Board-Exercise.htm
+http://www.healthsystem.virginia.edu/UVAHealth/news_DiabetesHealth/0409dh.cfm
+http://www.healthsystem.virginia.edu/UVAHealth/peds_safety/mvseats.cfm
+http://www.healthsystem.virginia.edu/internet/infection-control/ICManual/icmEH&OH.cfm
+http://www.healthsystem.virginia.edu/internet/infection-control/ICManual/icmprinisolation.cfm
+http://www.healthsystem.virginia.edu/uvahealth/adult_breast/lymph.cfm
+http://www.healthsystem.virginia.edu/uvahealth/news_HeartCare/
+http://www.healthsystem.virginia.edu/uvahealth/peds_growth/encopres.cfm
+http://www.healthtogether.org/healthtogether/facingFear/about.html
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=00412&title=ASTHMA+IN+CHILDREN+&cid=HTHLTH
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=00412&title=ASTHMA+IN+CHILDREN+&cid=HTHLTH&print=yes
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=02422&title=BULIMIA+NERVOSA+&cid=HTHLTH
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=02422&title=BULIMIA+NERVOSA+&cid=HTHLTH&print=yes
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=02432&title=DEATH+AND+DYING+&cid=HTHLTH
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=02432&title=DEATH+AND+DYING+&cid=HTHLTH&print=yes
+http://www.healthtouch.com/bin/EContent_HT/cnoteShowLfts.asp?fname=02806&title=DIABETIC+FOOT+CARE+&cid=HTHLTH
+http://www.healthtouch.com/bin/EContent_HT/drugShowLfts.asp?fname=usp0682.htm&title=AlphaNine+SD&cid=HT
+http://www.healthtouch.com/bin/EContent_HT/drugShowLfts.asp?fname=usp0682.htm&title=Christmas+factor&cid=HT
+http://www.healthtouch.com/bin/EContent_HT/drugShowLfts.asp?fname=usp0682.htm&title=Immunine+VH&cid=HT
+http://www.healthtouch.com/bin/EContent_HT/drugShowLfts.asp?fname=usp0682.htm&title=Konyne+80&cid=HT
+http://www.healthtouch.com/bin/EContent_HT/drugShowLfts.asp?fname=usp0682.htm&title=Mononine&cid=HT
+http://www.healthunit.on.ca/faq/faq_parenting.html
+http://www.healthwatcher.net/Quackerywatch/
+http://www.healthwatcher.net/Quackerywatch/Quack-radio/
+http://www.healthworks.com.au/hw4u/2004-12dec.htm
+http://www.healthy.net/collinge/massage.htm
+http://www.healthy.net/scr/Column.asp?id=232
+http://www.healthy.net/scr/article.asp?ID=207
+http://www.healthy.net/scr/column.asp?ColumnId=12&ID=232
+http://www.healthyarkansas.com/services/westnilevirus_main.htm
+http://www.healthyb.dal.ca/latestUpdatesPage.htm
+http://www.healthybuilding.net/news/steingraber-050304.html
+http://www.healthyeating.net/HE_8-05.HTM
+http://www.healthyhairplus.com/the_difference.htm
+http://www.healthylife.net/media/peopletalking.html
+http://www.healthyliving.gov.uk/publications/
+http://www.healthyliving.gov.uk/publications/publications.cfm
+http://www.healthyliving.gov.uk/whatsgoingon/
+http://www.healthymagnets.com/triphala.htm
+http://www.healthynewage.com/free-fitness-tools.htm
+http://www.healthynewage.com/self-healing.htm
+http://www.healthynj.org/dis-con/cat/main.htm
+http://www.healthynj.org/dis-con/ld/main.htm
+http://www.healthynj.org/dis-con/mi/main.htm
+http://www.healthynj.org/health-wellness/fitness/main.htm
+http://www.healthynj.org/health-wellness/seniorfitness/main.htm
+http://www.healthyontario.com/english/features_details.asp?channel_id=0&aggregate_id=71&text_id=2645
+http://www.healthyontario.com/english/features_details.asp?channel_id=0&aggregate_id=75&text_id=1990
+http://www.healthyontario.com/english/features_details.asp?channel_id=4&aggregate_id=209&text_id=2242
+http://www.healthyontario.com/english/printVersion.asp?which=features&text_id=2247&channel_id=0
+http://www.healthyontario.com/english/printVersion.asp?which=features&text_id=2645&channel_id=0
+http://www.healthypages.net/newspage.asp?newsid=4767
+http://www.healthyplace.com/Communities/Abuse/Site/transcripts/sexual_abuse_damage.htm
+http://www.healthyplace.com/Communities/Abuse/lisk/reporting_rape.htm
+http://www.healthyplace.com/Communities/Anxiety/phobias.asp
+http://www.healthyplace.com/Communities/Eating_Disorders/peacelovehope/ask.html
+http://www.healthyplace.com/communities/anxiety/paems/panic/symptoms_anxiety_disorders.htm
+http://www.healthyplace.com/communities/bipolar/kathryn/essay_satisfactionsurveys_01.html
+http://www.healthyplace.com/communities/depression/treatment/therapy/article_overcoming_depression.asp
+http://www.healthyplace.com/communities/depression/treatment/therapy/finding_therapist.asp
+http://www.healthyplace.com/site/support_groups_hp.htm
+http://www.healthyskepticism.org/news/2004/1to3.htm
+http://www.healthytalkradio.com/2002Guests.htm
+http://www.healthyweightnetwork.com/atechs.htm
+http://www.healthyweightnetwork.com/hww.htm
+http://www.healthywomen.org/presskit/meno04/3.html
+http://www.healtoronto.com/starep10.html
+http://www.healtoronto.com/starep3.html
+http://www.healtoronto.com/starep6.html
+http://www.heanosantiq.com/glass%20marks.htm
+http://www.hear-it.org/list.dsp?forside=yes&area=284
+http://www.hearingconcern.com/aai_ahl_faq.html
+http://www.hearingconcern.com/nae_hcn.html
+http://www.hearingvoices.com/carrier.html
+http://www.hearnet.com/events/events_Its-Hip-to-HEAR.shtml
+http://www.heart-disease-bypass-surgery.com/data/articles/125.htm
+http://www.heartball.org/get_involved.html
+http://www.heartcenteronline.com/termsConditions.cfm
+http://www.heartchoice.com/forums/read.php?f=1&i=3092&t=3092
+http://www.heartchoice.com/forums/read.php?f=1&i=3113&t=3092
+http://www.heartfelt.com/hukat-balak.htm
+http://www.heartfeltadoption.com/newbabies.htm
+http://www.heartibet.org/background.html
+http://www.heartinfo.org/ms/guides/4/main.html
+http://www.heartinfo.org/ms/guides/8/main.html
+http://www.heartland.org/Article.cfm?artId=13535
+http://www.heartlight.org/articles/200405/20040511_suffering.html
+http://www.heartmath.com/company/proom/pr/breaking_myth.html
+http://www.heartmontana.com/sitepages/pid2.php
+http://www.heartpath.org/pairs.html
+http://www.heartpoint.com/Chollowfatdiet.html
+http://www.heartpoint.com/highbloodpage.html
+http://www.heartquotes.net/Listening.html
+http://www.heartsfc.premiumtv.co.uk/page/TermsAndConditions/0,,10289,00.html
+http://www.heathgateresources.com.au/public/content/heathgate_public_notices.asp?xcid=138
+http://www.heathrowhikers.org/issue4.htm
+http://www.heatisonline.org/contentserver/objecthandlers/index.cfm?id=3663&method=full
+http://www.heatisonline.org/contentserver/objecthandlers/index.cfm?id=4325&method=full
+http://www.heatpumpcentre.org/Publications/Case_Lowell.asp
+http://www.heavyreading.com/
+http://www.heavyreading.com/details.asp?sku_id=514&skuitem_itemid=544&promo_code=&aff_code=&next_url=%2Fdefault.asp%3F
+http://www.heavyreading.com/details.asp?sku_id=723&skuitem_itemid=717&promo_code=&aff_code=&next_url=%2Fdefault.asp%3F
+http://www.heavyreading.com/details.asp?sku_id=724&skuitem_itemid=718&promo_code=&aff_code=&next_url=%2Fdefault.asp%3F
+http://www.heavyreading.com/document.asp?doc_id=66308&site=lightreading
+http://www.heavysixer.com/atb/index.php?option=content&task=view&id=10&Itemid=29
+http://www.heavysports.com/
+http://www.heavysports.com/emag/athlete_of_month/march_04.html
+http://www.hebrewcollege.edu/html/hc_online/jsarticle.htm
+http://www.hebrewcollege.edu/html/jsarticle.htm
+http://www.hebs.scot.nhs.uk/info/strategy/stratSection.cfm?TxtSNo=4&TxtTCode=331
+http://www.hebs.scot.nhs.uk/topics/diet/dietgroup.cfm?offset=11
+http://www.hec.unil.ch/jantonakis/recent%20publications.htm
+http://www.hec.unil.ch/mbrulhar/SEA2/
+http://www.hedgestreet.com/gettingstarted/faq/trading.html
+http://www.hedgetoad.com/archive/2005_01_01_
+http://www.hedweb.com/bgcharlton/awconlang.html
+http://www.hefce.ac.uk/pubs/hefce/1999/99_07.htm
+http://www.hefce.ac.uk/pubs/hefce/2003/03_36.htm
+http://www.heftyseed.com/agminute.html
+http://www.hegalplace.com/logan/MandM.html
+http://www.heico.com/1998/012_01.htm
+http://www.heidrick.com/IC/Published/Leadership/LeadersTalkLeadership/Biographies.htm
+http://www.heinemann.com/shared/products/E00492.asp
+http://www.heinemann.com/shared/products/SPTC1.asp
+http://www.heinemann.com/shared/products/SPWS1.asp
+http://www.heinleinsociety.org/
+http://www.heinricharnold.com/articles/homage/Sannerz.htm
+http://www.heinricharnold.com/articles/homage/Sannerz.htm?format=print
+http://www.heinricharnold.com/articles/homage/Silum.htm
+http://www.heinzctr.org/ecosystems/fr_water/index.shtml
+http://www.heinzctr.org/ecosystems_copy/fr_water/index.shtml
+http://www.helenbrowningorganics.co.uk/the_farm/walking_tour.phtml
+http://www.heller.brandeis.edu/sid/cid_projects_poverty_rights.htm
+http://www.hellmann.com/mystery-author/image-of-death.htm
+http://www.hello.ac/dataroom/1/2000.html
+http://www.helloboulder.com/YP/c_BEAUTYSALONS.Cfm
+http://www.hellohello.com.au/devotion/premium.html
+http://www.hellohello.com.au/devotion/yuccamix.html
+http://www.helloworldblog.com/2005/04/
+http://www.hellschancecantina.com/ATSOM3.html
+http://www.hellschancecantina.com/Tube_Rat1.html
+http://www.helmets.org/astmdocs/min0211.htm
+http://www.helpdesk.umd.edu/documents/4/4018/
+http://www.helpfulholidays.com/region.asp?regionref=A
+http://www.helpguide.org/aging/healthy_weight_loss.htm
+http://www.helpguide.org/aging/senior_careers_employment.htm
+http://www.helpguide.org/aging/senior_citizen_driving.htm
+http://www.helpguide.org/mental/blended_families_stepfamilies.htm
+http://www.helpguide.org/mental/eating_disorder_treatment.htm
+http://www.helpguide.org/mental/grieving_loss.htm
+http://www.helpiammoving.com/moving_house/4-2weeks_before_moving_day.php
+http://www.helpingdoctors.com/
+http://www.helpinguskids.org/
+http://www.helpinsure.com/lcenter/moldpub.html
+http://www.helpline.org/helpyou.html
+http://www.helpmefind.com/rose/ez.php?publicationID=478&js=0
+http://www.helpmefind.com/rose/ezine.php
+http://www.helsinki.fi/science/xantippa/wee/weetext/wee243.html
+http://www.helsinki.fi/tasa-arvo/english/discplan.html
+http://www.helsinki.fi/~ksiazkie/travel/wales/
+http://www.helsinki.fi/~tasalmin/tvarminne.html
+http://www.helsinki.fi/~vptynkky/elections.html
+http://www.hematology.org/government/policy/open_access.cfm
+http://www.hempevolution.org/media/capital_times/ct040805.htm
+http://www.hempfiles.com/php/page.php?id=56
+http://www.hendersonpetrophysics.com/SVG_Main.html
+http://www.hendersonvillenews.com/apps/pbcs.dll/article?AID=/20041227/NEWS/412270301/1015/OPINION01
+http://www.hendersonvillenews.com/apps/pbcs.dll/article?AID=/20050206/API/502060985
+http://www.hendersonvillenews.com/apps/pbcs.dll/article?Date=20050114&Category=NEWS&ArtNo=501140332&SectionCat=&Template=printart
+http://www.hendonpub.com/lawmag/uniformdepot.htm
+http://www.hendricks.com/dbcart/agl_letter.html
+http://www.henhouses.co.uk/rabbits.html
+http://www.hennepin.us/vgn/portal/internet/hcdetailmaster/0,2300,1273_1716_101935416,00.html
+http://www.hennesseyhouse.com/itinerary_nopop.htm
+http://www.henneth-annun.net/stories/story_recommend.cfm?rcidf=30
+http://www.henryflynt.org/philosophy/substantialpossibility.html
+http://www.henrygeorge.org/chp1.htm
+http://www.henshall.com/blog/archives/2002_06.html
+http://www.heorot.dk/tafl/
+http://www.hep.phys.soton.ac.uk/phd/reading.html
+http://www.hepatitisnetwork.com/hepc/clfpam99.html
+http://www.hepcan.org/passfedlaws.htm
+http://www.heptune.com/StarTrk9.html
+http://www.heptune.com/farts.html
+http://www.heptune.com/preslist.html
+http://www.herald-coaster.com/articles/2004/01/07/news/top_story/topstory.txt
+http://www.heraldmag.org/02mj_8.htm
+http://www.heraldnet.com/homeandgarden/story.cfm?sectionname=GARDENING&file=03100217557714.cfm&keywords=gardening
+http://www.heraldnet.com/stories/05/06/17/100ae_summerinterview002.cfm
+http://www.heraldsun.news.com.au/common/story_page/0,5478,11927795%255E1702,00.html
+http://www.heraldsun.news.com.au/learn/story_page/0,8772,5868452%255E24352,00.html
+http://www.heraldtimesonline.com/stories/thismonth/21/neighbors.0221-HT-B1_WCS17653.sto
+http://www.heraldtribune.com/apps/pbcs.dll/article?AID=/20050129/APA/501290742
+http://www.herbalgram.org/herbalgram/articleview.asp?a=2550
+http://www.herbalife.com/hl/templates/templatepreportal/herbalife/products/success.jsp
+http://www.herbalremedies.com/
+http://www.herc.org/maketheconnection/informed.htm
+http://www.herdesires.net/archives/stories/
+http://www.herecomestheguide.com/fairs/nocal.htm
+http://www.herefordshire.gov.uk/community_and_living/life_events/1378.asp
+http://www.hereinreality.com/hinckley.html
+http://www.hereinreality.com/insidertrading.html
+http://www.heretical.com/bjerre/heaven1.html
+http://www.heretical.com/pound/chicken.html
+http://www.heretical.com/toa/toa-s24.html
+http://www.heretical.com/wilson/ftruth.html
+http://www.herhighnessness.com/2003_08_01_history.html
+http://www.heritage.nf.ca/exploration/avalon.html
+http://www.heritage.nf.ca/society/rhs/terms.html
+http://www.heritage.org.ac/avis11.htm
+http://www.heritage.org.ac/avis12.htm
+http://www.heritage.org/Press/Commentary/ED032300b.cfm
+http://www.heritage.org/Research/Budget/BG1703.cfm
+http://www.heritage.org/Research/Economy/wm527.cfm
+http://www.heritage.org/Research/EnergyandEnvironment/Test072099b.cfm
+http://www.heritage.org/Research/Europe/bg1648.cfm
+http://www.heritage.org/Research/Europe/index.cfm
+http://www.heritage.org/Research/Family/BG1421.cfm
+http://www.heritage.org/Research/Family/HL684.cfm
+http://www.heritage.org/Research/Family/bg1662.cfm
+http://www.heritage.org/Research/GovernmentReform/HL644.cfm
+http://www.heritage.org/Research/HealthCare/HL541.cfm
+http://www.heritage.org/Research/HealthCare/bg1673.cfm
+http://www.heritage.org/Research/HealthCare/wm146.cfm
+http://www.heritage.org/Research/HealthCare/wm297.cfm
+http://www.heritage.org/Research/HealthCare/wm355.cfm
+http://www.heritage.org/Research/HomelandDefense/Test071502.cfm
+http://www.heritage.org/Research/HomelandDefense/bg1723.cfm
+http://www.heritage.org/Research/InternationalOrganizations/bg1772.cfm
+http://www.heritage.org/Research/InternationalOrganizations/wm641.cfm
+http://www.heritage.org/Research/LatinAmerica/bg1787.cfm
+http://www.heritage.org/Research/MiddleEast/wm368.cfm
+http://www.heritage.org/Research/SocialSecurity/CDA04-06.cfm
+http://www.heritage.org/Research/SocialSecurity/wm650.cfm
+http://www.heritage.org/Research/SocialSecurity/wm650.cfm?renderforprint=1
+http://www.heritage.org/Research/SocialSecurity/wm726.cfm
+http://www.heritage.org/Research/SocialSecurity/wm747.cfm
+http://www.heritage.org/Research/SocialSecurity/wm747.cfm?renderforprint=1
+http://www.heritage.org/Research/Taxes/wm572.cfm
+http://www.heritage.org/Research/Taxes/wm704.cfm
+http://www.heritage.org/Research/TradeandForeignAid/BG1634.cfm
+http://www.heritage.org/Research/TradeandForeignAid/HL753.cfm
+http://www.heritage.org/Research/TradeandForeignAid/hl872.cfm
+http://www.heritage.org/Research/Welfare/
+http://www.heritage.org/Research/Welfare/bg1713.cfm
+http://www.heritage.org/Research/Welfare/bg1722.cfm
+http://www.heritage.org/Research/reagan06_12_87.cfm
+http://www.heritage.org/research/family/bg1662es.cfm
+http://www.heritage.org/research/features/Issues2004/socialsecurity.cfm
+http://www.heritage.org/research/features/issues2004/family.cfm
+http://www.heritage.org/research/features/issues2004/poverty-and-inequality.cfm
+http://www.heritage.org/research/welfare/welfarebriefingroom.cfm
+http://www.heritage.vic.gov.au/page.asp?ID=162
+http://www.heritagecomics.com/common/wordfromsteve.php
+http://www.heritagecommunitybank.com/privacy.htm
+http://www.heritagecouncil.ie/publications/biodata/7.html
+http://www.heritagemovieposters.com/common/view_item.php?Sale_No=617&Lot_No=28065
+http://www.heritageopendays.org/about.shtml
+http://www.heritagepartnership.ca/forum/messageview.cfm?catid=10&threadid=36&STARTPAGE=1
+http://www.heritagepartnership.ca/forum/messageview.cfm?catid=10&threadid=36&enterthread=y
+http://www.heritagetours.com.au/15CapeOverSea.html
+http://www.hermangroup.com/retentionconnection/article_keeping_employees_cheap.html
+http://www.hermanmiller.com/CDA/SSA/Category/0,1564,a10-c699,00.html
+http://www.hermanmiller.com/CDA/SSA/Category/0,1564,a4-c699,00.html
+http://www.hermanus.com/whalewatching.mv
+http://www.hermes-press.com/Perennial_Tradition/plato_geometry.htm
+http://www.hermes-press.com/etch1.htm
+http://www.hermetic.com/stavish/essays/secret-fire.html
+http://www.hero.ac.uk/uk/inside_he/archives/2003/when_the_west_goes_to_war4309.cfm
+http://www.hero.ac.uk/uk/studying/archives/2002/look_into_your_coffee_cup3231.cfm
+http://www.hero.ac.uk/uk/studying/archives/2004/fair_copy_5700.cfm
+http://www.hero.ac.uk/uk/studying/careers_and_lifelong_learning/basic_skills_and_literacy.cfm
+http://www.hero.ac.uk/uk/universities___colleges/london/central_school_of_speech_and_drama.cfm
+http://www.hero.ac.uk/uk/universities___colleges/scotland/the_glasgow_school_of_art.cfm
+http://www.hero.ac.uk/uk/universities___colleges/yorkshire_and_humber/university_of_york.cfm
+http://www.heroesofhistory.com/page22.html
+http://www.herogames.com/
+http://www.heroicstories.com/hshelps.html
+http://www.herpesalliance.org/ask_nurse.asp
+http://www.hersethforcongress.org/issues04.htm
+http://www.hertfordshirefa.com/County_Cups/Sunday/Sunday_Intermediate_Cup.htm
+http://www.herts.ac.uk/fhle/faculty/humanities/web%20pages/literature/Grammar.html
+http://www.herts.ac.uk/humanities/philosophy/Presentations_ass.html
+http://www.herts.ac.uk/services/counselling/Eating_Disorders.htm
+http://www.herveybaywhalewatch.com.au/watch.html
+http://www.hesa.ac.uk/circulars/student/2002/02_03.htm
+http://www.hesca.org/
+http://www.het.brown.edu/physics/review/bdecay.html
+http://www.hevanet.com/peace/
+http://www.hewlett.org/Programs/Population/Resources+and+Policies/
+http://www.hewmon.com/
+http://www.hexawizards.com/empire/empirehouses.html
+http://www.hexus.net/
+http://www.heydary.com/internet-laws/20031030.html
+http://www.heyou.net/glaslink.htm
+http://www.hf.uio.no/iakk/roger/lithic/bar/bar4-5.html
+http://www.hfac.uh.edu/gbrown/philosophers/leibniz/BritannicaPages/KingCharles-I/KingCharles-I.html
+http://www.hfac.uh.edu/gbrown/philosophers/leibniz/BritannicaPages/KingJames-II/KingJames-II.html
+http://www.hfalert.com/Public/MarketPlace/LatestLaunches/index.cfm
+http://www.hfg.org/hfg_review/3/blanchard-hebert-3.htm
+http://www.hfienberg.com/kesher/2004/10/sitting-on-sofa-on-sunday-afternoon.html
+http://www.hfienberg.com/scots/490nationalism.html
+http://www.hfs.msu.edu/uh/resources/documents/policy.html
+http://www.hg.org/multi.html
+http://www.hgfound.org/
+http://www.hghhealthshop.com/
+http://www.hgnetwork.co.uk/siye/viewstory.php?sid=4754
+http://www.hgriggs.com/serendipity/
+http://www.hgtv.com/hgtv/about_us/article/0,1783,HGTV_3080_1424672,00.html
+http://www.hgtv.com/hgtv/ah_cleaning_seasonal/article/0,1801,HGTV_3110_1388172,00.html
+http://www.hgtv.com/hgtv/ah_entertaining_wine/article/0,1801,HGTV_3120_1390817,00.html
+http://www.hgtv.com/hgtv/ah_kids_family_infants/article/0,1801,HGTV_3125_1383902,00.html
+http://www.hgtv.com/hgtv/at_home/article/0,1801,HGTV_3221_1380630,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3080_1424672_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3120_1390817_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3256_1373461_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3298_1507325_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3322_1377109_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3330_1394076_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/cda/article_print/0,1983,HGTV_3563_1399111_ARTICLE-DETAIL-PRINT,00.html
+http://www.hgtv.com/hgtv/chats/article/0,1783,HGTV_3224_1387941,00.html
+http://www.hgtv.com/hgtv/chats/article/0,1783,HGTV_3224_1387951,00.html
+http://www.hgtv.com/hgtv/chats/article/0,1783,HGTV_3224_1387988,00.html
+http://www.hgtv.com/hgtv/chats/article/0,1783,HGTV_3224_1554005,00.html
+http://www.hgtv.com/hgtv/chats/article/0,1783,HGTV_3224_2373499,00.html
+http://www.hgtv.com/hgtv/cr_clay_figures/article/0,1789,HGTV_3237_2859265,00.html
+http://www.hgtv.com/hgtv/cr_kid_crafts/article/0,1789,HGTV_3256_1373461,00.html
+http://www.hgtv.com/hgtv/cr_quilting/article/0,1789,HGTV_3298_1507325,00.html
+http://www.hgtv.com/hgtv/cr_sewing_alterations/article/0,1789,HGTV_3322_1377109,00.html
+http://www.hgtv.com/hgtv/cr_sewing_other/article/0,1789,HGTV_3330_1394076,00.html
+http://www.hgtv.com/hgtv/cr_wood_glass_other/article/0,1789,HGTV_3349_1370940,00.html
+http://www.hgtv.com/hgtv/dc_books_videos_other/article/0,,HGTV_3361_3254000,00.html
+http://www.hgtv.com/hgtv/dc_books_videos_other/article/0,1793,HGTV_3361_3254000,00.html
+http://www.hgtv.com/hgtv/dc_design_bathroom/article/0,1793,HGTV_3365_1380688,00.html
+http://www.hgtv.com/hgtv/dc_design_bedroom/article/0,1793,HGTV_3366_2294884,00.html
+http://www.hgtv.com/hgtv/dc_design_kitchen/article/0,1793,HGTV_3375_1390720,00.html
+http://www.hgtv.com/hgtv/dc_design_themes/article/0,1793,HGTV_3383_1393054,00.html
+http://www.hgtv.com/hgtv/dc_occasions_other/article/0,1793,HGTV_3478_1370340,00.html
+http://www.hgtv.com/hgtv/dc_resources_expert_advice/article/0,1793,HGTV_3492_2236291,00.html
+http://www.hgtv.com/hgtv/decorating/article/0,1793,HGTV_3545_1507998,00.html
+http://www.hgtv.com/hgtv/decorating/article/0,1793,HGTV_3545_1528403,00.html
+http://www.hgtv.com/hgtv/decorating/article/0,1793,HGTV_3545_1704576,00.html
+http://www.hgtv.com/hgtv/decorating/article/0,1793,HGTV_3545_1966891,00.html
+http://www.hgtv.com/hgtv/dream_home_archive/article/0,1783,HGTV_11536_1898730,00.html
+http://www.hgtv.com/hgtv/gl_design_asian/article/0,1785,HGTV_3563_1399111,00.html
+http://www.hgtv.com/hgtv/gl_plants_other/article/0,1785,HGTV_3609_2410757,00.html
+http://www.hgtv.com/hgtv/gl_plants_propagation/article/0,1785,HGTV_3611_2775213,00.html
+http://www.hgtv.com/hgtv/gl_plants_roses/article/0,1785,HGTV_3612_1385144,00.html
+http://www.hgtv.com/hgtv/pac_ctnt/text/0,,HGTV_3936_5800,FF.html
+http://www.hgtv.com/hgtv/pac_ctnt/text/0,1783,HGTV_3936_16292,FF.html
+http://www.hgtv.com/hgtv/shows_dod/episode/0,1806,HGTV_9056_33838,00.html
+http://www.hhlong.com/main/Sinks/9.asp
+http://www.hhmi.org/annual94/c120.html
+http://www.hhmi.org/cgi-bin/askascientist/highlight.pl?kw=&file=answers%2Fgeneral%2Fans_037.html
+http://www.hhmi.org/cgi-bin/askascientist/highlight.pl?kw=&file=answers%2Fgeneral%2Fans_040.html
+http://www.hhmi.org/news/fuchs.html
+http://www.hhmi.org/news/fuchs2.html
+http://www.hhmi.org/news/jacks2.html
+http://www.hhmi.org/news/zoghbi3.html
+http://www.hhmi.umbc.edu/hhmischolars/
+http://www.hhof.com/html/exSCJ_29.shtml
+http://www.hhp.umd.edu/FMST/res/family_policy.html
+http://www.hhpl.on.ca/sigs/ehs/DL1854-7.html
+http://www.hhs.gov/asl/testify/t041118.html
+http://www.hhs.gov/asl/testify/t050405.html
+http://www.hhs.gov/asl/testify/t050405c.html
+http://www.hhs.gov/asl/testify/t050405d.html
+http://www.hhs.gov/asl/testify/t050428a.html
+http://www.hhs.gov/bloodsafety/summaries/sumaug97.html
+http://www.hhs.gov/bloodsafety/summaries/sumaug98.html
+http://www.hhs.gov/bloodsafety/summaries/sumjan98.html
+http://www.hhs.gov/bloodsafety/transcripts/aug27_98.html
+http://www.hhs.gov/bloodsafety/transcripts/jan27_00.html
+http://www.hhs.gov/eeo/no_fear_act_of_2001.html
+http://www.hhs.gov/news/press/2004pres/20040219.html
+http://www.hhs.gov/news/press/2004pres/20040309.html
+http://www.hhs.gov/news/press/2005pres/20050401.html
+http://www.hhs.gov/ocr/lep/finalproposed.html
+http://www.hhs.gov/read/irmpolicy/0003.html
+http://www.hhs.gov/smallpox/
+http://www.hhs.oregonstate.edu/outreach/fsf/blood-screening.html
+http://www.hi-arts.co.uk/jul04_battlefield_band.htm
+http://www.hi-arts.co.uk/training_april05.htm
+http://www.hi-beam.net/hi-beam/Anderson1.html
+http://www.hi-fiworld.co.uk/hfw/featureshtml/turntableroundup.html
+http://www.hi-ways.org/shownewsitem.asp?n=97084&s=2865726
+http://www.hiaper.ucar.edu/monthly/0804.html
+http://www.hibberts.co.uk/collect2/manchth.htm
+http://www.hibbett.com/community/superstars.php
+http://www.hibblenradio.com/CBS.html
+http://www.hic.hr/books/indefence/df113.htm
+http://www.hickoksports.com/rules/raerobatics.shtml
+http://www.hida.jp/english/event_winter.htm
+http://www.hiddenglasgow.com/rotundas/
+http://www.hiddenhurt.co.uk/Articles/Keepingsafe.htm
+http://www.hie.co.uk/default.aspx.locid-0finewkj1.htm
+http://www.hie.co.uk/shetland/skills2industry
+http://www.hifichoice.co.uk/review_print.asp?ID=1725
+http://www.hifichoice.co.uk/review_print.asp?ID=1956
+http://www.hifn.com/technology/HIPP.html
+http://www.highclearing.com/archivesuo/week_2004_04_11.html
+http://www.highcountryranch.com/
+http://www.highcrimesbooks.com/recent.htm
+http://www.highdesert.com/cgi-bin/re/search.cgi?BrokerID=212001789
+http://www.highenergyknits.net/
+http://www.highergroundmusic.com/faqs/
+http://www.higherpraise.com/Lyrics4/MercyIsFalling.htm
+http://www.highertrustmarketing.com/
+http://www.higheryork.org/Project%20codeHigher%20York%20R&CF.htm
+http://www.highland.gov.uk/minutes/areas/skye_and_lochalsh/minutes/sl_site_inspection_min_230204.htm
+http://www.highland.gov.uk/minutes/headquarters/new_archive/prop/prop_min_190398.htm
+http://www.highland.gov.uk/minutes/headquarters/resources/agendas/resources-ag-050608.htm
+http://www.highlandadventure.co.uk/prices.htm
+http://www.highlandcathedral.org/gaelic/psalm10.asp
+http://www.highlandcathedral.org/gaelic/psalm148.asp
+http://www.highlandcattlesociety.com/breedstandard.htm
+http://www.highlanderweb.co.uk/wallace/anne.htm
+http://www.highlandssummerfestival.on.ca/
+http://www.highlandxpress.com/new.html
+http://www.highlysensitivesouls.com/articles/newbie.htm
+http://www.highonadventure.com/Hoa00dec/Catalina/catalina.htm
+http://www.highrankings.com/forum/index.php?showtopic=12185&view=old
+http://www.highrankings.com/forum/index.php?showtopic=12889
+http://www.highrollerssportsbetting.com/
+http://www.highschooljournalism.org/students/AuthorArticles.cfm?articleId=171
+http://www.highschooljournalism.org/teachers/tipshowtowrite.htm
+http://www.highschoolrugby.org/directions.asp
+http://www.highscope.org/EducationalPrograms/Elementary/music.htm
+http://www.hightech.clara.net/feetfirs.htm
+http://www.hightechfinland.com/2003/newmaterialsprocess/transport/kone.html
+http://www.hightechfinland.com/2005/hightech_country/en_GB/tekes/
+http://www.hightimes.com/ht/events/content.php?bid=94&aid=3
+http://www.hightimes.com/ht/grow/content.php?bid=257&aid=4
+http://www.hightimes.com/ht/news/content.php?bid=123&aid=24
+http://www.hightowertrail.com/Huguent.htm
+http://www.hightowertrail.com/ScoutingIntro.HTMl
+http://www.hightowertrail.com/Scoutingintro.html
+http://www.highveld.co.za/thewrap/sapstips.asp
+http://www.highwaycode.gov.uk/01.htm
+http://www.highwaycode.gov.uk/09.shtml
+http://www.highwayengineers.org/scanner010505f.html
+http://www.highwaysmaintenance.com/osophi.htm
+http://www.hikaruchan.com/writings/bhh.html
+http://www.hikercentral.com/dogsled/
+http://www.hilary.com/fashion/yogafashion.html
+http://www.hildebrandt.com/Documents.aspx?Doc_ID=2208
+http://www.hildebrandt.com/Documents.aspx?Doc_ID=588
+http://www.hillandknowlton.be/luxembourg_presidency_2004/hk.html
+http://www.hillary.org/hc/Hillary_Clinton_Forum_583_chat1.cgi
+http://www.hillcrestonline.com/handlers/index.cfm?pageID=200301260000161564
+http://www.hilliard.ws/jokes.htm
+http://www.hillingdon.gov.uk/education/amr/lido.php
+http://www.hillnews.com/news/050703/edwards.aspx
+http://www.hillnews.com/thehill/export/TheHill/Business/041305_congress.html
+http://www.hillnews.com/thehill/export/TheHill/Features/CapitalLiving/011905_cookie.html
+http://www.hillnews.com/thehill/export/TheHill/Features/RestaurantReview/ceiba.html
+http://www.hillnews.com/thehill/export/TheHill/News/Frontpage/052405/ss_reserve.html
+http://www.hillnews.com/thehill/export/TheHill/News/Frontpage/060105/disabilities.html
+http://www.hillnews.com/thehill/export/TheHill/News/Frontpage/060905/thune.html
+http://www.hillnews.com/thehill/export/TheHill/News/UndertheDome/051005.html
+http://www.hillnews.com/thehill/export/TheHill/News/UndertheDome/112404.html
+http://www.hillsidefree.com/sermons/lifestylematters.html
+http://www.hillsong.com/church/women/bin/view.pl?sitename=women&page=ideas&showwomen=true&showMinistries=true
+http://www.hillyard.com/ProductsServices/Products/PSProduct.asp?cid=92&cn=Water-Based+System&srt=seq
+http://www.hillyard.com/ProductsServices/Products/PSProduct.asp?cid=93&cn=Solvent-Based+System&srt=seq
+http://www.hillzoo.com/index.php?id=243
+http://www.hilton.kzn.school.za/subjects/
+http://www.hiltonpark.ie/grounds.htm
+http://www.himalayanacademy.com/resources/books/hbh/hbh_ch-9.html
+http://www.himalmag.com/00Jan/royal.htm
+http://www.himel.com/cgi-bin/himel/hs.cgi?run=top&catid=9&itemid=10&vid=0
+http://www.hindu.com/thehindu/nic/0041/synopsis.htm
+http://www.hindu.com/thehindu/nic/tncmspeech042505.htm
+http://www.hinduhumanrights.org/hindufocus/hindufocus.htm
+http://www.hinduism.co.za/speech-.htm
+http://www.hindunet.com/forum/showflat.php?Cat=&Number=42229&page=0&view=collapsed&sb=5&o=&fpart=1
+http://www.hindunet.org/saraswati/indianarms.htm
+http://www.hindustanlink.com/ebook-download/alternative-health-care-ebooks-e-book.htm
+http://www.hindustanlink.com/ebook-download/remedies-health-care-ebooks-e-book-resources.htm
+http://www.hindustanlink.com/sex/s40sex.htm
+http://www.hindustantimes.com/news/181_400176,00500017.htm
+http://www.hindustantimes.com/news/181_402791,00500017.htm
+http://www.hindustantimes.com/news/181_405200,00500017.htm
+http://www.hindustantimes.com/news/7170_0,00500017.htm
+http://www.hindustantimes.com/news/7242_1237542,00180010.htm
+http://www.hingdaiwui.com/testimonials.html
+http://www.hinkleymall.com/beachboy.html
+http://www.hintsandthings.co.uk/kennel/Tips%20on%20how%20best%20to%20give%20medication%20to%20dogs..htm
+http://www.hipaadvisory.com/live/
+http://www.hiphopdx.com/index/features/id.265
+http://www.hiphopdx.com/index/features/id.325
+http://www.hiphopdx.com/index/features/id.347
+http://www.hiphopdx.com/index/features/id.368
+http://www.hiphopdx.com/index/features/id.373
+http://www.hiphopdx.com/index/reviews/id.488
+http://www.hiphophotspot.com/album_reviews/default.asp
+http://www.hiphopmusic.com/archives/000392.html
+http://www.hiphopmusic.com/archives/000995.html
+http://www.hipmama.com/node/view/1461
+http://www.hippocrates.com/archive/December1999/12departments/12editorial.html
+http://www.hippy.com/php/article-227.html
+http://www.hiprecycling.com/files/about.html
+http://www.hiqhq.com/InterpersonalSkills.asp?Cattype=1001001
+http://www.hiqhq.com/Management.asp?Cattype=1001001
+http://www.hiraganatimes.com/hp/visa/file/visainfo1-e.htm
+http://www.hiram.edu/future/traditional/majors/theatrearts/tyst.html
+http://www.hireamericancitizens.org/fastcompany001.html
+http://www.hirestandard.com/
+http://www.hiroshima-cdas.or.jp/home/yuu/indexen.htm
+http://www.hiroshima-is.ac.jp/Hiroshima/crane.htm
+http://www.hirshorn.com/AFSA2LTCform.html
+http://www.hirstarts.com/tips9/tips9.html
+http://www.his.org.uk/resource_library.cfm?cit_id=242&FAArea1=customWidgets.content_view_1&usecache=false
+http://www.his.org.uk/resource_library/_rinse_water_for_heat_labile_endoscopy_equipment.cfm?cit_id=242&FAArea1=customWidgets.content_view_1&usecache=false
+http://www.his.org.uk/resource_library/gre.cfm?cit_id=242&FAArea1=customWidgets.content_view_1&usecache=false
+http://www.hisandherhealth.com/articles/Beyond_the_G_spot_Where_do_we_go_from_here.shtml
+http://www.hisandherhealth.com/articles/Vasectomy_Reversal_Can_Be_Highly_Successful.shtml
+http://www.hisf.no/njmt/artikkelruudnewmusic.html
+http://www.hislastchance.com/guest/guestbook.shtml
+http://www.hispanicherbs.com/
+http://www.hispaniconline.com/magazine/2004/nov/Cultura/
+http://www.hispeace.org/html/useresrc.htm
+http://www.histori.ca/minutes/minute.do?ID=10225
+http://www.historians.org/Perspectives/Issues/2005/0505/0505tec1.cfm
+http://www.historians.org/info/annualreports/2002/committeereports.cfm
+http://www.historians.org/projects/GIRoundtable/Marriages/Marriages5.htm
+http://www.historians.org/pubs/careers/resources.htm
+http://www.historic-uk.com/HistoryUK/England-History/KingsandQueens.htm
+http://www.historicalvoices.org/spokenword/research.php
+http://www.historichomeworks.com/hhw/pbriefs/pb12.htm
+http://www.historicism.com/Guinness/Light/light22.htm
+http://www.historicjamestowne.org/learn/lesson_plans.php
+http://www.historicsmithfield.org/Summary.htm
+http://www.history-of-rock.com/haley.htm
+http://www.history.ac.uk/ihr/Focus/Victorians/simon.html
+http://www.history.ac.uk/ihr/Focus/War/reviews/revbeckettf.html
+http://www.history.ac.uk/ihr/Focus/War/reviews/revfrostRob2.html
+http://www.history.ac.uk/reviews/paper/stobartresp.html
+http://www.history.navy.mil/docs/wwii/pearl/ph73.htm
+http://www.history.navy.mil/sources/ma/slr.htm
+http://www.history.noaa.gov/stories_tales/saltlake.html
+http://www.history.org/Foundation/journal/Autumn03/society.cfm
+http://www.history.org/visit/eventsAndExhibits/kimballTheatre/history.cfm
+http://www.history.ox.ac.uk/alumni/oxhistorian/issue_2/08_once_a_king.htm
+http://www.history.ox.ac.uk/ecohist/coursebooklet/05_testsexams.htm
+http://www.history.ox.ac.uk/ecohist/synopses/1a_economic_business/child_labour.htm
+http://www.history.rochester.edu/canal/bib/hosack/APP0V.html
+http://www.history.umd.edu/Programs/mastersnew4.html
+http://www.history.upenn.edu/phr/archives/97/sanchez.html
+http://www.historybookworld.com/reviews/acw/hbcivilwarminutes.htm
+http://www.historycooperative.org/journals/ahr/107.3/br_99.html
+http://www.historycooperative.org/journals/ahr/109.2/rodriguez.html
+http://www.historycooperative.org/journals/cp/vol-04/no-01/talk/
+http://www.historycooperative.org/journals/heq/44.2/albisetti.html
+http://www.historycooperative.org/journals/ht/36.2/moyer.html
+http://www.historycooperative.org/journals/jah/87.3/bouton.html
+http://www.historycooperative.org/journals/lhr/18.2/farmer.html
+http://www.historycooperative.org/journals/llt/50/notebook.html
+http://www.historyebook.org/heb-whitepaper-1.html
+http://www.historyguide.org/earlymod/lecture4c.html
+http://www.historyguide.org/europe/lecture13.html
+http://www.historyguide.org/guide/notes2.html
+http://www.historyguide.org/guide/read.html
+http://www.historyguide.org/intellect/lecture21a.html
+http://www.historyguide.org/intellect/lecture25a.html
+http://www.historyhome.co.uk/peel/chartism/o'conmod.htm
+http://www.historylearningsite.co.uk/1997_general_election.htm
+http://www.historylearningsite.co.uk/John_Calvin.htm
+http://www.historylearningsite.co.uk/hiroshima.htm
+http://www.historylearningsite.co.uk/institutions_of_the_european_uni.htm
+http://www.historylearningsite.co.uk/prime_minister_british_politics.htm
+http://www.historyorb.com/today/yesterdaysevents.php
+http://www.historyshelf.org/secf/silver/coull.php
+http://www.historytoday.com/dm_getArticle.asp?gid=10966
+http://www.historytoday.com/dm_getArticle.asp?gid=30935
+http://www.historywise.com/KoTrain/Courses/WHT/WHT_Campaigns_and_Elections.htm
+http://www.hit.org.uk/displayPage.asp?id=18
+http://www.hit40uk.com/article.asp?id=14115
+http://www.hitachi.com/New/cnews/040909a.html
+http://www.hitachifoundation.org/grants/initiatives/infotech/assumptions.html
+http://www.hitentertainment.com/legal/privacy/
+http://www.hitentertainment.com/privacy/
+http://www.hithype.com/lyric-detail.asp?song_id=13477&lyrics=song
+http://www.hitsquad.com/smm/freeware/98/
+http://www.hitsquad.com/smm/programs/Scale_Master/
+http://www.hitthetrail.com/
+http://www.hitthosekeys.com/archives/topics/influences.html
+http://www.hittinthenote.com/featured_release3.asp
+http://www.hitxp.com/person/240303.htm
+http://www.hitz.fm/04/rules.asp
+http://www.hiv.bg/WhatareTCells.english.htm
+http://www.hivan.org.za/campussupport/HIV_AIDS_infoandFAQs.asp
+http://www.hivandhepatitis.com/hiv_aids.html
+http://www.hivnet.ubc.ca/News93.html
+http://www.hixie.ch/advocacy/xhtml
+http://www.hjd.org/hjd/howucanhelp_body_hjd.jsp?hosp=hjd
+http://www.hjta.org/calcommentaryV2-18.htm
+http://www.hkdf.org/pr.asp?func=show&pr=153
+http://www.hkentreview.com/1999/september/0925to0926/0925.html
+http://www.hkentreview.com/2000/march/0305/0305.html
+http://www.hkentreview.com/2001/january/0117/0117.html
+http://www.hktrader.net/200212/myhk/myhk-steiner120202-12.htm
+http://www.hku.hk/cc/sp2/software/stopwatch/doc/user_guide/node26.html
+http://www.hku.hk/cerc/5c.htm
+http://www.hku.hk/chinaed/newsletter/phil-brown.html
+http://www.hku.hk/hkcer/articles/v4/rsui.htm
+http://www.hku.hk/hkcer/articles/v8/renrlich.htm
+http://www.hku.hk/student/all/ugp/html2001/curric.htm
+http://www.hkvpradio.com/
+http://www.hlaweb.org/html/job%20items/JI20031020.html
+http://www.hlf.org.np/ev.html
+http://www.hlfallout.net/comments.php?id=7498
+http://www.hlst.heacademy.ac.uk/resources/leisure_consumerism.html
+http://www.hltcentral.org/page-1049.shtml
+http://www.hltcentral.org/page-245.0.shtml
+http://www.hlth.qut.edu.au/ph/student/faqs.jsp
+http://www.hltmag.co.uk/sep02/ex.htm
+http://www.hm-ng.com/
+http://www.hm-treasury.gov.uk/documents/enterprise_and_productivity/encouraging_enterprise/ent_ee_tonnage.cfm
+http://www.hm-treasury.gov.uk/documents/public_spending_and_services/public_services_productivity_panel/pss_psp_press3.cfm
+http://www.hm-treasury.gov.uk/newsroom_and_speeches/press/2002/press_136_02.cfm
+http://www.hm-treasury.gov.uk/newsroom_and_speeches/press/2005/press_03_05.cfm
+http://www.hm-treasury.gov.uk/newsroom_and_speeches/press/2005/press_36_05.cfm
+http://www.hm-treasury.gov.uk/newsroom_and_speeches/speeches/chancellorexchequer/speech_chex_250902.cfm
+http://www.hm-treasury.gov.uk/pre_budget_report/pre_budget_report_2000/pbr_regional_leaflets/prebud_pbr00_lftwales.cfm
+http://www.hm-treasury.gov.uk/spending_review/spending_review_2000/associated_documents/spend_sr00_ad_ccrappe.cfm
+http://www.hm-treasury.gov.uk/spending_review/spending_review_2000/associated_documents/spend_sr00_ad_ccrgloss.cfm
+http://www.hm-treasury.gov.uk/spending_review/spending_review_2000/associated_documents/spend_sr00_ad_ccrpubs.cfm
+http://www.hmac.org/benefits/
+http://www.hmag.org.uk/robertTressell/
+http://www.hmc.com/content/writingresumes.shtml
+http://www.hmc.psu.edu/healthinfo/b/blooddonation.htm
+http://www.hmc.psu.edu/healthinfo/g/glaucoma.htm
+http://www.hmce.gov.uk/channelsPortalWebApp/channelsPortalWebApp.portal?_nfpb=true&_pageLabel=pageContactUs_ShowContent&id=HMCE_CL_001610&propertyType=document
+http://www.hmce.gov.uk/channelsPortalWebApp/downloadFile?contentID=HMCE_CL_000345
+http://www.hmcourts-service.gov.uk/legalprof/tariffs/tariff_harker.htm
+http://www.hmcstaff.com.au/Products%20and%20Services/Cheques/Member%20Information/MEMBER%20CHEQUING%20TERM%20&%20CONDITIONS.htm
+http://www.hmhm.com/hmhm/serviceofferring/
+http://www.hmongihrw.org/contactlist.html
+http://www.hmongtoday.com/displaynewsRedirectMe.asp?ID=1644
+http://www.hmrc.gov.uk/cnr/nr_landlords.htm
+http://www.hmrc.gov.uk/freedom/foi-02.htm
+http://www.hmrc.gov.uk/payrollgiving/employers/stories.htm
+http://www.hmrc.gov.uk/pdfs/ir148.htm
+http://www.hms.harvard.edu/ombuds/ci_directions.htm
+http://www.hmsconway.org/conway_trust.html
+http://www.hmso.gov.uk/acts/acts1995/Ukpga_19950025_en_5.htm
+http://www.hmso.gov.uk/acts/locact99/90001--b.htm
+http://www.hmso.gov.uk/sr/sr2004/20040519.htm
+http://www.hoadley.net/options/BS.htm
+http://www.hoadley.net/options/bs.htm
+http://www.hoadley.net/options/calculators.htm
+http://www.hoagiesgifted.org/highly_gifted.htm
+http://www.hoagiesgifted.org/lighter_note.htm
+http://www.hoart.cam.ac.uk/staff.htm
+http://www.hoax-slayer.com/current-issue.html
+http://www.hoax-slayer.com/perfume-bogus-warning.html
+http://www.hoax-slayer.com/survive-heart-attack.html
+http://www.hobartpulp.com/
+http://www.hobbico.com/jobs.html
+http://www.hobbshillwood.herts.sch.uk/events/wales/weekend_away_at_wales.htm
+http://www.hobbsnet.com/university/chapter11.html
+http://www.hobby-lobby.com/howto.htm
+http://www.hobbyhouse.co.uk/electric.htm
+http://www.hobbyspace.com/Active/controversy.html
+http://www.hobbyspace.com/SatWatching/
+http://www.hobbyspace.com/Tourism/
+http://www.hobbytalk.com/modules.php?op=modload&name=News&file=index&catid=&topic=&startrow=110
+http://www.hoboes.com/html/NetLife/NSpace/Using/Control.shtml
+http://www.hobotraveler.com/083makingnewslettersshorterinsert.html
+http://www.hobrad.com/acregree.htm
+http://www.hobrad.com/ands.htm
+http://www.hockeyfights.com/articles/194
+http://www.hockeysfuture.com/article.php?sid=7184&mode=threaded&order=0
+http://www.hockeysfuture.com/article.php?sid=7235&mode=threaded&order=0
+http://www.hockeysfuture.com/article.php?sid=7249&mode=threaded&order=0
+http://www.hockeysfuture.com/article.php?sid=7395&mode=threaded&order=0
+http://www.hockeytech.com/summer_camp_program_outlines
+http://www.hockinghills.com/maps/wf_tour.htm
+http://www.hoerl.com/Music/music4_summary.html
+http://www.hoffmannbaron.com/press/trade_dress.cfm
+http://www.hoflin.com/ShortStory.html
+http://www.hoganstand.com/general/ground/articles/03140311.htm
+http://www.holar.is/teach.htm
+http://www.holdenarb.org/detschedule.htm
+http://www.holdthefrontpage.co.uk/day/code/code2.shtml
+http://www.holdthefrontpage.co.uk/news/sept2001newsindex.shtml
+http://www.holdthefrontpage.co.uk/news/titlesdaily/020.shtml
+http://www.holdthefrontpage.co.uk/training/031216nce.shtml
+http://www.holford.org.uk/mt/
+http://www.holiday-rentals.co.uk/index.cfm/property/4242.cfm
+http://www.holiday-rentals.com/index.cfm/property/12185.cfm
+http://www.holiday-rentals.com/index.cfm/property/15107
+http://www.holiday-rentals.com/index.cfm/property/8409.htm
+http://www.holidayhotels.com/hotel.php?HID=20020524182610953909
+http://www.holidayhotels.com/hotel.php?HID=20020815142805491494
+http://www.holidayhotels.com/hotel.php?HID=20020815142805491494&hn=Gran%20Tacande%20Hotel%20(Tenerife)%20
+http://www.holidayhotels.com/hotel.php?HID=20031107091419393111
+http://www.holidayhotels.com/hotel.php?HID=20031126123321820782
+http://www.holidayhotels.com/hotel.php?HID=20040123112135669212
+http://www.holidayhotels.com/hotel.php?HID=20040615171804890778
+http://www.holidaylettings.co.uk/rentals/Italy/Umbria/easy-reach-of-Spoleto-city-centre./above-Ferentillo/4377
+http://www.holidays.net/mlk/holiday.htm
+http://www.holidaytruths.co.uk/viewtopic.php?p=153754
+http://www.holidaytruths.co.uk/viewtopic.php?p=92230
+http://www.holidaze.com/cgi-bin/index.cgi?current=9&subcurrent=55&site=holidaze
+http://www.holistichelp.net/saveplanet.html
+http://www.holisticseek.com/holistic_information_articles.htm
+http://www.hollandconsultinggroup.com/publications_behaviour.HTM
+http://www.hollanddate.com/
+http://www.hollisterkids.com/download.asp?Asset_Id=20&File_Id=263
+http://www.hollowbones.org/sutra6.html
+http://www.hollygolightly.com/forum/forum_posts.asp?TID=29&PN=1
+http://www.hollylisle.com/fm/Articles/wc1-4.html
+http://www.hollylisle.com/fm/Workshops/deeper-people.html
+http://www.hollylisle.com/fm/Workshops/notecard_plotting.html
+http://www.hollywood.com/news/detail/article/1705101
+http://www.hollywoodgateway.com/news-old.php
+http://www.hollywoodjesus.com/truman2.htm
+http://www.hollywoodnorthextras.com/info.htm
+http://www.hollywoodreporter.com/thr/article_display.jsp?vnu_content_id=1000485569
+http://www.hollywoodreporter.com/thr/international/feature_display.jsp?vnu_content_id=1000732581
+http://www.hollywoodteenmovies.com/ForSaleRichardNorton.html
+http://www.hollywoodtheatre.ca/programmes/20021220.html
+http://www.holocaust-history.org/19420605-rauff-spezialwagen/
+http://www.holocaust-history.org/auschwitz/pressac/technique-and-operation/pressac0053.shtml
+http://www.holocaust-history.org/see-no-evil/
+http://www.holocaust-trc.org/fry.htm
+http://www.holoscience.com/news/mystery_solved.html
+http://www.holotank.com/CBS/cbshistory.htm
+http://www.holovaty.com/blog/archive/2005/05/31/0225
+http://www.holstengalleries.com/nl/206.html
+http://www.holstengalleries.com/nl/211.html
+http://www.holtorf.com/Ray/south_park_republicans.htm
+http://www.holy-trinity.org/morality/homosexuality.html
+http://www.holybible.com/resources/about_kjv.htm
+http://www.holycross.edu/departments/theatre/projects/isp/measure/teachguide/pedagogy.html
+http://www.holyexperiment.org/pages/archst.html
+http://www.holyghostchurch.info/social_ministry/
+http://www.holysmoke.org/cos/kent-fake-religion.htm
+http://www.holysmoke.org/cos/the-lrh-abyss.htm
+http://www.holysmoke.org/sdhok/ken-yng.htm
+http://www.holytrinitygerman.org/septlent.html
+http://www.holytrinitynewrochelle.org/yourti17181.html
+http://www.holytrinityseminary.com/FAQ.htm
+http://www.holywar.org/NoPope.htm
+http://www.homa.org/Details.asp?ContentID=2137352748&TOCID=2083225413
+http://www.home-jewelry-business-success-tips.com/increasing-sales.html
+http://www.home.earthlink.net/~lionlamb/WARNING.HTM
+http://www.home.gil.com.au/~bbiggar/india4.htm
+http://www.home.gil.com.au/~vburton/cryptics/answers.htm
+http://www.home.ix.netcom.com/~hancockm/felt_&_tarrant.htm
+http://www.home.turbonet.com/kitchenculture/tcinfo.htm
+http://www.home.zonnet.nl/cterlaan/awesomeputting.htm
+http://www.home.zonnet.nl/ireland22/irlnews4.htm
+http://www.homeandplay.com/Home%20and%20Play/ask_SummerPlayIdeas.shtml
+http://www.homebase-hols.com/news32.shtml
+http://www.homebirth.org.uk/law.htm
+http://www.homebirth.org.uk/overdue.htm
+http://www.homebirth.org.uk/pain.htm
+http://www.homebirth.org.uk/plan.htm
+http://www.homebirth.org.uk/pph.htm
+http://www.homebirth.org.uk/robert.htm
+http://www.homebirth.org.uk/sophiebreech.htm
+http://www.homebirth.org.uk/transferstudies.htm
+http://www.homebirth.org.uk/water.htm
+http://www.homebizbuzz.co.nz/article.php3?ArticleID=661
+http://www.homebusinessmanual.com.au/promotion/selling.html
+http://www.homebuying.co.uk/DontMiss/featuresStories/2.htm
+http://www.homecaremag.com/mag/medical_good_nights_rest/
+http://www.homecaremag.com/mag/medical_road_traveled/
+http://www.homecinemachoice.com/articles/hccarticles/buyingguide/software.php
+http://www.homeconcepts.ca/house-floor-plans-home%20floor%20plans/house-plans-home-plans-building-resources.htm
+http://www.homeconcepts.ca/house-plans-links/exterior_accessories.htm
+http://www.homeconcepts.ca/house-plans-links/interior_accessories.htm
+http://www.homeedmag.com/HEM/214/jatch.html
+http://www.homeedmag.com/HEM/HEM145.97/145.97_clmn_tkch.html
+http://www.homeenergy.org/consumerinfo/
+http://www.homeenergy.org/consumerinfo/air-leaks/
+http://www.homeenvy.com/db/2/12.html
+http://www.homeenvy.com/db/2/712.html
+http://www.homeexchange.com/show.php?id=14311&nav=Previous+Page
+http://www.homeexchange.com/show.php?id=38809&nav=Previous+Page
+http://www.homeexchange.com/show.php?id=39282&nav=Previous+Page
+http://www.homeexchange.com/show.php?id=39282&nav=Previous+page
+http://www.homefinder.com/philly/search_results.jhtml?search_by_type=new_const&geo_area_text_lookup_id=63611
+http://www.homefinder.com/philly/search_results.jhtml?search_by_type=new_const&geo_area_text_lookup_id=63746
+http://www.homefinder.com/philly/search_results.jhtml?search_by_type=new_const&sort_attrib_active_adult=Y&geo_area_text_lookup_id=63746
+http://www.homefromhome.com/mumbles/fishermans_cottages.htm
+http://www.homegain.com/about_hg/man_team
+http://www.homehealth-uk.com/medical/healthybalanceddiet.htm
+http://www.homehealth-uk.com/medical/heartdisease.htm
+http://www.homelanddefensejournal.com/conf_securityGA.htm
+http://www.homelanddefensejournal.com/conf_securitySF.htm
+http://www.homelanddefensejournal.com/conf_securityTX.htm
+http://www.homelandsecurity.mo.gov/ThreatReports080104.htm
+http://www.homelandsecurityus.com/
+http://www.homelandsecurityus.com/aqfrogmen.asp
+http://www.homeless.org.uk/db/20031117160417
+http://www.homeloans.ie/profile_terms.htm
+http://www.homemods.org/homemods_monthly_news/monthly-Feb04.htm
+http://www.homemortgageguide.com/approve/
+http://www.homeoffice.gov.uk/crime/burglary/preventionadvice/
+http://www.homeoffice.gov.uk/crimpol/police/penalty/faq.html
+http://www.homeoffice.gov.uk/docs/s31.html
+http://www.homeoffice.gov.uk/docs2/buildpicturecomcohesion.html
+http://www.homeoffice.gov.uk/docs2/hs_safesecure2.html
+http://www.homeofficereports.com/Anti-Virus%20Software.htm
+http://www.homeofficereports.com/phones_faxes.htm
+http://www.homeofheroes.com/hallofheroes/1st_floor/flag/1bfb_disp6.html
+http://www.homeofheroes.com/wallofhonor/spanish_am/08_roughriders.html
+http://www.homeoint.org/morrell/articles/pm_workl.htm
+http://www.homepokertourney.com/cards.htm
+http://www.homerecordingconnection.com/forum.php?action=view_thread&id=6655&frm=1
+http://www.homerhickam.com/cgi-bin/included/newsletters.cgi?id=8
+http://www.homernews.com/stories/033105/seawatch_0331sea001.shtml
+http://www.homeroomdirect.com/under25/
+http://www.homerton.nhs.uk/visitingus/visitingtimes.html
+http://www.homes4sale.co.nz/useful-links/
+http://www.homeschooling.com.au/index8.asp?tree=3&doc=3&page=catalog1&name=Craft&folder=cat&subjects=Craft
+http://www.homeschoollearning.com/units/unit_04-26-02.shtml
+http://www.homeschoollearning.com/units/unit_09-27-01.shtml
+http://www.homeschools.org/tutorials/
+http://www.homeschoolzone.com/science/butterflies.htm
+http://www.homeseekers.ie/asp/hs_rentallist.asp
+http://www.homesite.com.au/renovate/flooring/ideas_and_designs/energy_efficient_floor_structures/
+http://www.homesite.com.au/renovate/flooring/ideas_and_designs/energy_efficient_floor_structures/2/
+http://www.homespuntapes.com/artists/artistpage.asp?artID=358
+http://www.homestateonline.com/privacy.htm
+http://www.homestead.com/bulldogsworld/IBD.html
+http://www.homestead.com/dclwolf/gospeld31.html
+http://www.homestead.com/dclwolf/gospeld39.html
+http://www.homestead.com/dclwolf/temple.html
+http://www.homestead.com/ohio45/knoxville.html
+http://www.homestead.com/philofreligion/files/Paleyhume.html
+http://www.homesteadhotels.com/siteInfo/makingReservation.asp
+http://www.homestore.com/Finance/Legal/Billcollectors.asp
+http://www.homestore.com/HomeGarden/Decorate/FengShui/1225.asp
+http://www.homestore.com/HomeGarden/Gardening/Features/Gardens/FrontyardFacelift.asp
+http://www.homestore.com/HomeGarden/HomeImprovement/Tools/Glossary/CRHO_D.asp
+http://www.homestore.com/Move/Moving/DIY/Pets.asp
+http://www.homestore.com/RealEstateNews/General/KeepCool.asp
+http://www.homestore.com/homegarden/gardening/landscaping/zones/climate/index.asp
+http://www.homestyleservices.com/askTheExperts.asp
+http://www.homesweetroad.com/
+http://www.hometaught.com/homeschooling/ed_philosophy/app_objective.aspx
+http://www.hometeams.com/stlouisrams1.html
+http://www.hometheaterforum.com/htforum/showthread.php?s=&threadid=209202
+http://www.hometheatermag.com/frontprojectors/305panasonic/
+http://www.hometownlocator.com/City/Fairfax-Station-Virginia.cfm
+http://www.hometownsource.com/columns_opinion/heinzman/stories/120100.html
+http://www.hometoys.com/htinews/apr02/articles/railey/railey.htm
+http://www.hometoys.com/htinews/feb05/articles/rti/baker.htm
+http://www.hometoys.com/tips/tips13.htm
+http://www.hometoys.com/tips/tips22.htm
+http://www.hometrainingtools.com/faq/products/insects/q9.html
+http://www.homevideostudio.com/training.htm
+http://www.homeworking.com/
+http://www.homeworkout.com/equipment.php
+http://www.hominf.org/slat/slatmm.htm
+http://www.hon.ch/Dossier/MotherChild/birth_disorders/down_syndrome.html
+http://www.hon.ch/Dossier/MotherChild/female_repro/puberty.html
+http://www.hon.ch/Library/Theme/HepB/inf.html
+http://www.hon.ch/Library/Theme/HepB/intro.html
+http://www.honda.ca/RacingEng/PressRelease/RoadRacing/2004-07-04-01.htm
+http://www.hondaev.org/acarc.html
+http://www.honestpage.co.uk/index.asp?p=2&stid=276
+http://www.honestselling.com/articles/manipulation_through_truth.htm
+http://www.honestthinking.org/
+http://www.honeybeecentre.com/course_descriptions.htm
+http://www.honeycouncil.ca/users/folder.asp?FolderID=1932
+http://www.honeyharbour.on.ca/Regatta/RegattaOverview2003.htm
+http://www.honeynet.org/papers/bots/
+http://www.hongkong-eu.org/press_release/pressrelease_CNYluncheon_Dublin2005.html
+http://www.hongkongpost.com/eng/products_services/trade_declaration_service/pec_details.htm
+http://www.honkunji.com/okinawa.html
+http://www.honoluluadvertiser.com/specials/pearlharbor60/chapter1.html
+http://www.honors.ufl.edu/applicationprocedure.html
+http://www.honors.umd.edu/ScholarshipFAQ.htm
+http://www.honvedelem.hu/cikk.php?cikk=18221&next=
+http://www.hoo-ah.net/
+http://www.hoo-ah.net/entry1.html
+http://www.hooah4health.com/body/new/askLucyFAQs_2.htm
+http://www.hoobly.com/0/1857/0/
+http://www.hoobly.com/0/2162/0/
+http://www.hoobly.com/10745/0/10/
+http://www.hoobly.com/10745/42/0/
+http://www.hoobly.com/184/1781/0/
+http://www.hood-meddac.army.mil/default.asp?page=adv_med_dir&vi=n&mnu=1
+http://www.hood-meddac.army.mil/default.asp?page=families&vi=n&mnu=1
+http://www.hood-meddac.army.mil/default.asp?page=links&vi=n&mnu=0
+http://www.hood-meddac.army.mil/default.asp?page=news_archive_2001_07&vi=n&mnu=6
+http://www.hood-meddac.army.mil/default.asp?page=pregnancy_series&vi=n&mnu=1
+http://www.hoofcare.com/newproducts1_0599.html
+http://www.hooked-on-nails.com/naildisorders.html
+http://www.hookonline.org/articles/WA_A_06.htm
+http://www.hoopshype.com/rumors.htm
+http://www.hoopsvibe.com/courtside-here-comes-the-sun-again-article-18415.html
+http://www.hoopsvibe.com/eastern-conference-playoff-preview-article-22292.html
+http://www.hoopsworld.com/article_7415.shtml
+http://www.hoopsworld.com/cgi-bin/news/exec/view.cgi?archive=39&num=8569
+http://www.hoopsworld.com/printer_7415.shtml
+http://www.hootenanny.com/hoot/2/jewelry.html
+http://www.hooverdigest.org/974/robinson.html
+http://www.hooverdigest.org/982/anderson_m.html
+http://www.hoovers.com/hni-corporation/--ID__13626--/free-co-factsheet.xhtml
+http://www.hooyou.com/roadtogreencard/faq.html
+http://www.hope.edu/pr/announcements/ten.html
+http://www.hope4kidz.org/Lexi/l_s.html
+http://www.hopeforhealing.org/Maynews98.html
+http://www.hopetillman.com/findqual.html
+http://www.hopeworldwide.org/
+http://www.hopkins-arthritis.som.jhmi.edu/case/case7/7_case.html
+http://www.hopkins-arthritis.som.jhmi.edu/mngmnt/exercise.html
+http://www.hopkins-arthritis.som.jhmi.edu/mngmnt/osteoandweight.html
+http://www.hopkins.k12.mn.us/pages/high/GenInfo/royal_roundtable.html
+http://www.hopkinsafter50.com/html/silos/nutrition/nwLIB_HA50_SeriousDisorders.php
+http://www.hopkinsmedicine.org/hmn/S03/annals.cfm
+http://www.hopstudios.com/nep/column/
+http://www.hoptechno.com/book11.htm
+http://www.horizongalleries.co.uk/artist/index.lasso?artist=34
+http://www.horizonherbs.com/herb-seed-links.html
+http://www.horizonmag.com/2/ira-glass.asp
+http://www.horizonmag.com/5/eaves.htm
+http://www.horizonshelpr.org/science/ecosystems/standards.html
+http://www.hormoneprofile.com/resources.htm
+http://www.hornes.org/theologia/aboutus.htm
+http://www.horoscope.com/samples/future.html
+http://www.horror-wood.com/lewood.htm
+http://www.horror.com/php/article-439-1.html
+http://www.horrorchannel.com/dread/modules.php?op=modload&name=News&file=article&sid=896
+http://www.horse-sense.org/archives/20040619095347.phtml
+http://www.horseandhound.co.uk/best/396/55954.html
+http://www.horseandhound.co.uk/news/397/59397.html
+http://www.horsecouncil.org.au/POCMEDIA.html
+http://www.horsedata.co.uk/Making%20Allowances/Chapter%2013%20Part%201.htm
+http://www.horseflyonline.com/index.php?fuseaction=home.viewarticle&article_id=356
+http://www.horsegroomingsupplies.com/horse-forums/archive/index.php/f-6.html
+http://www.horsekeeping.com/Horse_Newsletter/October_2004.htm
+http://www.horsekeeping.com/horse_care/horse_health_care_program.htm
+http://www.horsekeeping.com/horse_health_care/horse_health_care_program.htm
+http://www.horsemagazine.com/BREEDINGBARN/2005%20Jumping%20Breeders/2005Jumping%20Breeders.html
+http://www.horseracingintfed.com/infoDisplay.asp?section=3
+http://www.horsereview.net/News_2001/footandmouth1.htm
+http://www.horseshoepitching.com/rules/nhparul.shtml
+http://www.horsleylasik.net/index.cfm/news/horsleydocs
+http://www.hort.uconn.edu/2005garden/2005program.htm
+http://www.hort.uconn.edu/cipwg/art_pubs/GUIDE/consideration.htm
+http://www.hort.uconn.edu/cipwg/criteria/criteria.html
+http://www.hort.uconn.edu/ipm/nursery/htms/invasives.htm
+http://www.horwath.com.au/publications/articles/oct_breakup.asp
+http://www.hoseasons.co.uk/holidays/ricottages/conditions.shtml
+http://www.hoseasons.co.uk/holidays/rilodges/conditions.shtml
+http://www.hoseasons.co.uk/holidays/rilodges/parks/clog.asp
+http://www.hoselton.net/religion/hwa/booklets/ptchild/part1.htm
+http://www.hoslink.com/bttut.htm
+http://www.hospice.ie/sorder.htm
+http://www.hospicecare.com/
+http://www.hospicepatients.org/hospic1.html
+http://www.hospices.org/inpatient_unit.htm
+http://www.hospitalconnect.com/aha/about/history.html
+http://www.hospitalityupgrade.com/hospitality/Client/HU/Articles.nsf/0/50C38A8706A13A4585256F8100538531?OpenDocument
+http://www.hospitalmanagement.net/contractors/general/wuzhou/
+http://www.hospitals.be/chuliege/plancos/english.html
+http://www.hostboard.com/cgi-bin/ultimatebb.cgi/ubb/get_topic/f/410/t/6019/p/1
+http://www.hostboard.com/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=410&t=6019
+http://www.hosted-forum.com/index.php?boardid=amisweb&showtopic=28
+http://www.hostels-ireland.com/seedo3.php
+http://www.hostingmetro.com/resources/a-h.html
+http://www.hostingonnet.com/usepolicy.php
+http://www.hostroute.com/tos.html
+http://www.hot-property-spain.com/dreamaccount/?page=static&content=acceptable_use
+http://www.hot.springs.national-park.com/sights.htm
+http://www.hot933.fm/station/privacy.aspx
+http://www.hot933.fm/station/terms.aspx
+http://www.hot937.com/privacy_policy.shtml
+http://www.hot937.com/terms_of_use.shtml
+http://www.hot983.com/rdub.html
+http://www.hotaction.ca/
+http://www.hotboxingnews.com/
+http://www.hotcalaloo.com/oct03.htm
+http://www.hotcalaloo.com/www8v2.htm
+http://www.hotchkiss.k12.co.us/HHS/nobelnov/faulkner.htm
+http://www.hotel-europe.co.uk/brochure/boars-head-hotel-carmarthen/
+http://www.hotel-ireland.com/cork-hotels/cork-city-hotels.html
+http://www.hotel-northwales.com/conferences1.html
+http://www.hotel-online.com/Neo/SpecialReports1998/Nov98_Ferguson.html
+http://www.hotel-rates.com/australia/victoria/melbourne/novotel-melbourne-on-collins.html
+http://www.hotel-rates.com/bahamas/nassau/one-and-only-ocean-club.html
+http://www.hotel-rates.com/us/district-of-columbia/washington/lc-the-st-regis-washington-dc.html
+http://www.hotel-uk.com/uk-hotels/birmingham-hotels.html
+http://www.hotelbruce.com/01_02/bruceblog.php
+http://www.hotelbuenavista.com/2004/04Publishedstories/SDUniontribuneEC.htm
+http://www.hotelfun4kids.com/hotelproducts/diaperchange.htm
+http://www.hotelfun4kids.com/travelnews/resorts-hotels/queenelizabeth.htm
+http://www.hotelfun4kids.com/travelsafetytips/walkingsafe.htm
+http://www.hotelgarza.com/post-texas-lodging.asp
+http://www.hoteli-palace.si/EN/ceniki/posebna_ponudba.php
+http://www.hoteljobresource.com/menu/article14825.html
+http://www.hoteljobs.ie/ireland.asp
+http://www.hotelnet.ro/romania.htm
+http://www.hotelreviewscotland.com/hotel.asp?id=276
+http://www.hotels-huahin.com/praseban/
+http://www.hotels-in-vietnam.com/hotels/hanoi/operahilton.html
+http://www.hotels-prague.org/hotel-carlo-iv-prague.htm
+http://www.hotels-search-engine.org/hotel/11265251
+http://www.hotels-search-engine.org/hotel/11283219
+http://www.hotelstreet.co.uk/Hotels-1052-Jupiter-Saturno-Marte_Complex__Club_Mac_Alcudia_.html
+http://www.hotelthailand.com/advicetovisitors.html
+http://www.hotfair.com/category.cfm?ID=65
+http://www.hothardware.com/hh_files/Drives/plextor_708a.shtml
+http://www.hothardware.com/viewarticle.cfm?articleid=557&cid=4
+http://www.hotlib.com/articles/show.php?t=Heart_Attack_Warning_Signs
+http://www.hotlib.com/articles/show.php?t=Parenting
+http://www.hotlizard.net/terms.asp
+http://www.hotmsnnames.com/msn_names_w.php
+http://www.hotornot.com/pages/faq.html
+http://www.hotplatters.com/lp/Indy.html
+http://www.hotpointstringband.com/raves.html
+http://www.hotsaucelive.com/
+http://www.hotscripts.com/Detailed/11182.html
+http://www.hotscripts.com/Detailed/19450.html
+http://www.hotscripts.com/Detailed/8968.html
+http://www.hotscripts.com/Detailed/9706.html
+http://www.hotstocks.com/
+http://www.hotvsnot.com/
+http://www.hotwire.com/
+http://www.hotworldcustoms.com/BBB%20Project.htm
+http://www.houghtonmifflinbooks.com/catalog/titledetail.cfm?textType=excerpt&titleNumber=688199
+http://www.houghtonmifflinbooks.com/readers_guides/bunting/train.shtml
+http://www.hounslow.gov.uk/home/a-z_services/t/tradingstandardsandconsumeradvice.htm
+http://www.hour.ca/news/news.aspx?iIDArticle=5747
+http://www.hour.ca/news/news.aspx?iIDArticle=6274
+http://www.house-of-tartan.scotland.net/viewinf.htm
+http://www.house-removals-uk.co.uk/guide_house_removals_faq.asp
+http://www.house.gov/appropriations_democrats/press/pr_050624.htm
+http://www.house.gov/apps/list/hearing/ok04_cole/spendingbulge.html
+http://www.house.gov/apps/list/press/mt00_rehberg/2002423rockyboys.html
+http://www.house.gov/bradmiller/legissuessci.html
+http://www.house.gov/budget_democrats/cmte_rules.htm
+http://www.house.gov/budget_democrats/congressional_budgets/fy2004/conf_summary/repubs_cut.htm
+http://www.house.gov/budget_democrats/glossary.htm
+http://www.house.gov/capuano/
+http://www.house.gov/cunningham/
+http://www.house.gov/ethics/DeLay_letter.htm
+http://www.house.gov/hasc/testimony/106thcongress/99-03-04ohle.htm
+http://www.house.gov/hasc/testimony/106thcongress/99-10-13graham.htm
+http://www.house.gov/hasc/testimony/106thcongress/99-10-26jumper.htm
+http://www.house.gov/house/Tying_it_all.shtml
+http://www.house.gov/international_relations/democratic/statement_040421_Hearing_Taiwan.html
+http://www.house.gov/jec/fed/intern.htm
+http://www.house.gov/jec/hearings/intell/alibek.htm
+http://www.house.gov/jec/hearings/radio/merritt.htm
+http://www.house.gov/jec/imf/meltzer.htm
+http://www.house.gov/kingston/2003Nominees.htm
+http://www.house.gov/lucas/news/press108/108subcom.html
+http://www.house.gov/mcdermott/agoa/index.shtml
+http://www.house.gov/mcdermott/sp050609.shtml
+http://www.house.gov/paul/congrec/congrec2003/cr012903.htm
+http://www.house.gov/pitts/press/commentary/050218c-pitts-gerlach-familyfarm.htm
+http://www.house.gov/rehberg/hottopics.shtml
+http://www.house.gov/rules/rules_hear10.htm
+http://www.house.gov/rules/rules_over_106.htm
+http://www.house.gov/rules/rules_over_108.htm
+http://www.house.gov/science/barnard_061799.htm
+http://www.house.gov/science/gardella_071900.htm
+http://www.house.gov/science/hearings/full03/mar12/harnage.htm
+http://www.house.gov/science/hearings/full03/mar26/jacobs.htm
+http://www.house.gov/science/hearings/space02/oct03/weiler.htm
+http://www.house.gov/science/press/107/107-296.htm
+http://www.house.gov/science/press/109/109-10.htm
+http://www.house.gov/science/smith_031199.htm
+http://www.house.gov/scott/press/teachers_guide_in_war.htm
+http://www.house.gov/shays/reform/s98-409.htm
+http://www.house.gov/tauscher/media/speech-warcollege-06-05-00.html
+http://www.house.gov/tierney/press/brownvboard051704.shtml
+http://www.house.gov/transportation/aviation/04-09-03/bolen.html
+http://www.house.gov/transportation/cgmt/12-06-01/loy.html
+http://www.house.gov/transportation/press/press2001/release144.html
+http://www.house.mo.gov/bills051/jrn/jrn051.htm
+http://www.house.state.mo.us/bills01/biltxt01/intro01/HB0267I.htm
+http://www.houseandhomeonline.com/garden0799.html
+http://www.househusband.blogspot.com/
+http://www.houseofbrides.com/national/orderstatus.htm
+http://www.houseofcaron.com/paulette_stinson_molds.htm
+http://www.houseofedu.com/aiuft/design.html
+http://www.houseofmabel.com/programs/winthemes/
+http://www.houseofwonders.com/details.asp?idaccomodation=33&iddestination=2&idarea=
+http://www.houseofwonders.com/details.asp?idaccomodation=63&iddestination=2&idarea=
+http://www.housepals.co.uk/html/faq.html
+http://www.houseplansandmore.com/estimator/index.aspx
+http://www.housepricechat.co.uk/
+http://www.houserabbit.co.uk/rwf/articles/abscesses.htm
+http://www.housesbybonnie.com/main.htm
+http://www.housing.berkeley.edu/student/livingwitharoommate/
+http://www.housing.ku.edu/handbook/03_supportstaff.htm
+http://www.housing.lon.ac.uk/site7/Postcodes/SE15.htm
+http://www.housing.org.uk/library/viewfile.asp?fid=2269
+http://www.housing.org.uk/library/viewfile.asp?fid=2270
+http://www.housing.org.uk/library/viewfile.asp?fid=3563
+http://www.housingauthority.gov.hk/en/aboutus/hd/waitlistapp/0,,,00.html
+http://www.housingoutlook.co.uk/Papers/ancient2.html
+http://www.housingzone.com/topics/giants/management/pbg04ha006.asp
+http://www.housingzone.com/topics/giants/management/pbg04ja006.asp
+http://www.housingzone.com/topics/nahb/green/nhb00ca029.asp
+http://www.houston-press.com/extra/cyberstalk.html
+http://www.houstonculture.org/hispanic/tejano1.html
+http://www.houstonculture.org/hispanic/tejano3.html
+http://www.houstonisd.org/Departments/channel_front/0,3107,49953492_49937982,00.html
+http://www.houstonpress.com/Issues/2005-05-26/news/letters.html
+http://www.houstontexans.com/community/news_detail.php?PRKey=766
+http://www.houstonvoice.com/blog/index.cfm?start=1/28/05&end=2/4/05
+http://www.hoverclubofamerica.org/index.php?showtopic=328&st=30
+http://www.hoverclubofamerica.org/lofiversion/index.php/t328.html
+http://www.howard.k12.md.us/ourschools/terrorism.html
+http://www.howardbloom.net/reinventing_capitalism/
+http://www.howardnations.com/lawlinks/writing_aids.html
+http://www.howardpublishing.com/pcsamples/chapters/sevencheckleader.htm
+http://www.howardwfrench.com/archives/2005/01/13/feel_like_doin_something_wrong/
+http://www.howdesign.com/
+http://www.howe.k12.ok.us/~jimaskew/chem/pass4.htm
+http://www.howe.k12.ok.us/~jimaskew/feynman.htm
+http://www.howestreet.com/
+http://www.howestreetgallery.com/dynamic/artist_artwork.asp?ArtistID=105
+http://www.howlin-wolf.com/about.htm
+http://www.howrey.com/practices/ip/index.cfm?contentID=261
+http://www.howrey.com/practices/ip/index.cfm?contentID=293
+http://www.howstuffworks.com/light1.htm
+http://www.howtocreate.co.uk/sidebarF.php?fullDetails=1
+http://www.howtogermany.com/pages/doctors.html
+http://www.howtolearn.com/personal.html
+http://www.howtomodel.com/ask_aaron/answer_archive.html
+http://www.howtousewhatyouvegot.com/excerpts.htm
+http://www.howtousewhatyouvegot.com/praise.htm
+http://www.hp.com/hpinfo/execteam/speeches/robison/nab04.html
+http://www.hp.com/hpinfo/newsroom/feature_stories/2003/03itanium.html
+http://www.hp.com/hpinfo/newsroom/feature_stories/2004/04smartoffice2.html
+http://www.hp.com/hpinfo/newsroom/feature_stories/2005/05clark.html
+http://www.hp.com/hpinfo/newsroom/press/2004/040802a.html
+http://www.hp.com/products1/servers/scalableservers/superdome/wos.html
+http://www.hp.com/sbso/productivity/color/success_share.html
+http://www.hp.com/sbso/productivity/office/presentations_guide.html
+http://www.hpa.org.au/mary.htm
+http://www.hpa.org.uk/cdr/pages/news.htm
+http://www.hpac.com/member/archive/0004war.htm
+http://www.hpana.com/news.17946.html
+http://www.hpbazaar.com/cooltown/mpulse/0803-moblogging.asp
+http://www.hpbazaar.com/cooltown/mpulse/1202-rulesbazaar.asp
+http://www.hpcc.gov/pubs/blue94/section.4.3.html
+http://www.hpcc.org/datafile/datafilev01.html
+http://www.hpclt.org/min_02-04-23.htm
+http://www.hpclt.org/min_03-11-10.htm
+http://www.hpcnet.org/PresidentCampusPlanningLaunch
+http://www.hpcnursing.com/news.html
+http://www.hpolicy.duke.edu/cyberexchange/conversion/gexecsum.html
+http://www.hpronline.org/news/2002/11/11/BooksAndArts/A.Marriage.Of.Ideas-318707.shtml
+http://www.hps-online.com/disease.htm
+http://www.hps-online.com/hurine1.htm
+http://www.hps.com/~tpg/singapore/index.php?file=vol16
+http://www.hps.com/~tpg/ukdict/index.php?file=ukdict-2
+http://www.hps.com/~tpg/ukdict/index.php?file=ukdict-7
+http://www.hpssims.com/pages/products/adc2/ADC2-Main.html
+http://www.hpworld.com/hpworldnews/hpw009/04mpe.html
+http://www.hq.nasa.gov/office/pao/History/SP-4009/v4p2a.htm
+http://www.hq.nasa.gov/office/pao/History/SP-4009/v4p2c.htm
+http://www.hq.nasa.gov/office/pao/History/SP-4201/ch13-4.htm
+http://www.hq.nasa.gov/office/pao/History/SP-4201/ch9-1.htm
+http://www.hq.nasa.gov/office/pao/History/SP-4203/ch13-6.htm
+http://www.hq.nasa.gov/office/pao/History/SP-4205/ch11-2.html
+http://www.hq.nasa.gov/office/pao/History/SP-4214/ch10-5.html
+http://www.hq.nasa.gov/office/pao/History/SP-4214/ch4-2.html
+http://www.hq.nasa.gov/office/pao/History/SP-4214/ch6-2.html
+http://www.hq.nasa.gov/office/pao/History/augustine/racfup3.htm
+http://www.hq.nasa.gov/office/pao/History/hyperrev-x15/ch-1.html
+http://www.hq.nasa.gov/ogc/general_law/ethics/postemployment.html
+http://www.hr.columbia.edu/hr/benefits/ssbib-2005/dental/twu.html
+http://www.hr.columbia.edu/hr/policies/fmla/fmla/
+http://www.hr.columbia.edu/hr/printable/policies/fmla/fmla/
+http://www.hr.duke.edu/policy/ppm/e-5.htm
+http://www.hr.lanl.gov/JobClassification/jobseries/osgs_standards.shtml
+http://www.hr.msu.edu/HRsite/Documents/Staff/Policies/CFC.htm
+http://www.hr.msu.edu/HRsite/forms/FacultyForms/FormInfoAppt.htm
+http://www.hr.queensu.ca/benefits/sup-plan.php
+http://www.hr.unimelb.edu.au/someone-says-i-harassed-them/
+http://www.hr.upenn.edu/staffrelations/resolution/resolving.asp
+http://www.hr.upenn.edu/staffrelations/resolution/resolving.asp?print=true
+http://www.hr95.org/dw101.htm
+http://www.hrblock.com/taxes/fast_facts/tax_law/taxlaw_wftr.html
+http://www.hrc.co.nz/index.php?p=13886&format=text
+http://www.hrc.org/
+http://www.hrc.org/Content/NavigationMenu/About_HRC/Internships.htm
+http://www.hrc.org/Content/NavigationMenu/Work_Life/Get_Informed2/Marriage_and_Your_Workplace/Marriage_and_Workplace_Introduction.htm
+http://www.hrc.org/Template.cfm?Section=Resources2&Template=/ContentManagement/ContentDisplay.cfm&ContentID=22931
+http://www.hrc.state.vt.us/mediation.htm
+http://www.hrc.wmin.ac.uk/hrc/theory/mediaspectacular/t.1.3%5B3%5D.html
+http://www.hrcberkeley.org/courses/courses_past.html
+http://www.hrcr.org/Text/HotTopics/palestinian.html
+http://www.hrcr.org/safrica/expression/tinker_des_moines.html
+http://www.hrcr.org/safrica/labor/broadcasting_canada.html
+http://www.hrd.qut.edu.au/recruitselect/itembanks/selectionhowto.jsp
+http://www.hrd.qut.edu.au/recruitselect/jobs/25001.jsp
+http://www.hrdirection.co.nz/articles.html
+http://www.hrea.org/learn/guides/slavery.html
+http://www.hreoc.gov.au/
+http://www.hreoc.gov.au/disability_rights/decisions/conciliation/0904.htm
+http://www.hreoc.gov.au/disability_rights/faq/Goods_etc/goods_etc.html
+http://www.hreoc.gov.au/disability_rights/standards/www_3/www_3.html
+http://www.hreoc.gov.au/human_rights/asylum_seekers/
+http://www.hreoc.gov.au/human_rights/human_rights_reports/hrc_report_16.html
+http://www.hreoc.gov.au/info_for_teachers/pregnancy/fact_sheet.html
+http://www.hreoc.gov.au/sex_discrimination/
+http://www.hreoc.gov.au/sex_discrimination/pml2/faq.html
+http://www.hreoc.gov.au/sex_discrimination/sexual_harrassment/guide_to_sda.html
+http://www.hreoc.gov.au/sex_discrimination/young_women/
+http://www.hreoc.gov.au/social_justice/nt_issues/introduction.html
+http://www.hreoc.gov.au/speeches/sex_discrim/making_it_work.html
+http://www.hreoc.gov.au/speeches/social_justice/treaty_conference.html
+http://www.hrforum.com/press/newsletters/enews52.asp
+http://www.hrforumzim.com/evmp/evmpreports/pev000807/peviol000807d.htm
+http://www.hrforumzim.com/members_reports/foodriots98/food9801c5.htm
+http://www.hrh.org/faq.html
+http://www.hri.org/cgi-bin/brief?/news/greek/ana/2000/00-08-01.ana.html
+http://www.hri.org/cgi-bin/brief?/news/greek/apeen/1997/97-06-08.apeen.html
+http://www.hri.org/docs/statedep/1997/97-02-26.std.html
+http://www.hri.org/news/greek/ana/2000/00-08-01.ana.html
+http://www.hrinfodesk.com/
+http://www.hrinfodesk.com/employmentlaw_5.htm
+http://www.hrinz.org.nz/SITE_Default/SITE_HR_Info/SITE_Hot_Stuff/default.asp
+http://www.hrm.neu.edu/benefits-glance.html
+http://www.hrm.uh.edu/docs/lpmi%20archives/2000.04.htm
+http://www.hrma-agrh.gc.ca/scripts/contracts-contrats/reports-rapports_e.asp?r=l&yr=2004&q=1
+http://www.hrmguide.co.uk/amazon-big/heavy.xsl
+http://www.hrnicholls.com.au/nicholls/nichvo20/Dalgleish99.html
+http://www.hrnicholls.com.au/nicholls/nichvo22/elliott2001.html
+http://www.hrnk.org/pr-oct2103.html
+http://www.hrothgar.co.uk/YAWS/practice/pdp-47.htm
+http://www.hrrc.net/news/constitution.html
+http://www.hrs.iastate.edu/AAO/eod/introduction.shtml
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=/en/cs/sin/0200/0200_010.shtml&hs=sxn
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=/en/hip/hrp/corporate/labourmobility/labourmobility.shtml&hs=hzp
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=en/ei/application/applying_for_benefits.shtml&hs=aed
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=en/isp/pub/cpp/stayntouch-03.shtml&hs=cdp
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=en/lp/fmcs/07LMPP.shtml&hs=pzp
+http://www.hrsdc.gc.ca/asp/gateway.asp?hr=en/lp/lo/fp/faq.shtml&hs=fzp
+http://www.hrsdc.gc.ca/en/bc-yk/5625/jwtc/lmi/lmr3q02.shtml
+http://www.hrsfc.ac.uk/vacancies/vacancies.asp
+http://www.hrsolidarity.net/mainfile.php/2000vol10no08/656/
+http://www.hrsolidarity.net/mainfile.php/2004vol14no03/2346/
+http://www.hrsonline.org/media/pressDetails.asp?id=5443
+http://www.hrw.org/about/projects/womrep/General-97.htm
+http://www.hrw.org/backgrounder/asia/afghan-bck1005.htm
+http://www.hrw.org/backgrounder/asia/china-bck-0701.htm
+http://www.hrw.org/campaigns/sierra/
+http://www.hrw.org/doc/?t=americas
+http://www.hrw.org/doc/?t=europe
+http://www.hrw.org/doc?t=americas&c=chile&document_limit=20,20
+http://www.hrw.org/editorials/1999/etimor820.htm
+http://www.hrw.org/english/docs/2004/10/04/turkey9433.htm
+http://www.hrw.org/english/docs/2005/01/13/china9809.htm
+http://www.hrw.org/english/docs/2005/01/13/kyrgyz9894.htm
+http://www.hrw.org/english/docs/2005/01/13/tunisi9801.htm
+http://www.hrw.org/press/2000/07/chinaeu0728.htm
+http://www.hrw.org/press98/jan/eu-china.htm
+http://www.hrw.org/reports/1991/us2/
+http://www.hrw.org/reports/1999/india/India994-02.htm
+http://www.hrw.org/reports/2000/frmwrkr/
+http://www.hrw.org/reports/2000/nato/Natbm200.htm
+http://www.hrw.org/reports/2003/iraq1003/6.htm
+http://www.hrw.org/reports/2005/usa0105/12.htm
+http://www.hrw.org/reports/2005/usa0105/13.htm
+http://www.hrw.org/reports/2005/usa0105/7.htm
+http://www.hrw.org/wr2k4/10.htm
+http://www.hrw.org/wr2k4/15.htm
+http://www.hs-stm.org/index.php
+http://www.hsa2005.com/index.php?pd=YXBwbGljYXRpb246e2FjdGlvbj1ldmVudHN9pz_pz_pz_&md=events&view_mode=view_events&id=6
+http://www.hsadvisor.com/bookstore/k_art.shtml
+http://www.hsadvisor.com/bookstore/learning_styles.shtml
+http://www.hsadvisor.com/bookstore/parenting.shtml
+http://www.hsarpabaa.com/main/technical_support_working_group.htm
+http://www.hsba.hostme.com/business/standing.htm
+http://www.hsbc.com/hsbc/graduates/information-technology/apply
+http://www.hsbc.com/hsbc/graduates/information-technology/apply?bt=Apply%20for%20Information%20Technology
+http://www.hsc.missouri.edu/fibro/fm-pt.html
+http://www.hsc.stonybrook.edu/shtm/programs/pa/faq.html
+http://www.hsc.unt.edu/departments/cellbiogen/resinterests.cfm
+http://www.hsc.unt.edu/tcom2007/
+http://www.hsc.wvu.edu/admin/facultydev/Winter%20Spring%202005%20Leadership%20Management%20Series/Handouts/Gunn-conflict.htm
+http://www.hsc.wvu.edu/som/shs/hoursofop_.htm
+http://www.hschange.com/CONTENT/306/?id_conf=8
+http://www.hschange.com/CONTENT/445/?conf=11
+http://www.hschange.org/CONTENT/675/
+http://www.hschange.org/CONTENT/682/
+http://www.hschange.org/CONTENT/684/
+http://www.hschange.org/CONTENT/718/
+http://www.hschange.org/CONTENT/75/
+http://www.hschange.org/index.cgi?topic=topic02
+http://www.hsdc.org/News/Audiology/teachers.htm
+http://www.hse.gov.uk/costs/incost_calc/incost_calc.asp
+http://www.hse.gov.uk/enforce/enforcementguide/investigation/expert/court.htm
+http://www.hse.gov.uk/fod/timber02.htm
+http://www.hse.gov.uk/lau/lacs/23-14.htm
+http://www.hse.gov.uk/services/localgovernment/
+http://www.hse.gov.uk/slips/experience/airport.htm
+http://www.hse.org.uk/events.php
+http://www.hsegroup.com/hse/text/caffiene.htm
+http://www.hsf.ca/research/guidelines/g_1.html
+http://www.hsforum.com/authors
+http://www.hslda.org/courtreport/V20N6/V20N601.asp
+http://www.hslda.org/speakers/speaker.asp?s=16
+http://www.hsletter.com/members/Old_Mkt_Updates/Full/2001/mktupdateFull091001.html
+http://www.hslnkc.org/Posters_and_Presentations.htm
+http://www.hsound.com/malcolm/
+http://www.hsph.harvard.edu/Organizations/healthnet/HUpapers/implosion/depop.html
+http://www.hsph.harvard.edu/Organizations/healthnet/SAsia/suchana/0909/rh057.html
+http://www.hsph.harvard.edu/ats/Dec1/
+http://www.hsph.harvard.edu/erc/somehistory.html
+http://www.hsph.harvard.edu/healthliteracy/talk_drvisit.html
+http://www.hsph.harvard.edu/hsb207b/list3.html
+http://www.hsph.harvard.edu/hsc/faqs.html
+http://www.hsph.harvard.edu/now/apr15/tobacco.html
+http://www.hsph.harvard.edu/nutritionsource/Exercise.htm
+http://www.hsph.harvard.edu/nutritionsource/calcium.html
+http://www.hsph.harvard.edu/organizations/grhf/SAsia/suchana/0500/h003.html
+http://www.hsph.harvard.edu/press/releases/press02021999.html
+http://www.hsph.harvard.edu/review/review_winter_02/special.html
+http://www.hsrc.ac.za/research/npa/HRD/about/hrd_do.html
+http://www.hsrd.houston.med.va.gov/vagenmedsection.htm
+http://www.hssonline.org/meeting/program/archiveprogs/2003%20Abstracts.htm
+http://www.hst.org.za/news/20040394
+http://www.hst.org.za/news/20040868
+http://www.hsus.org/animals_in_research/animals_in_research_news/scottish_research_team_concludes_that_fish_feel_pain.html
+http://www.hsus.org/hsus_field/first_strike_the_connection_between_animal_cruelty_and_human_violence/
+http://www.hsus.org/legislation_laws/wayne_pacelle_the_animal_advocate/shortsighted_how_shortterm_thinking_crashed_a_billiondollar_beef_export_market.html
+http://www.hsus.org/pets/issues_affecting_our_pets/hsus_statement_on_freeroaming_cats.html
+http://www.hsus.org/pets/issues_affecting_our_pets/insurance_companies_unfairly_target_specific_dog_breeds.html
+http://www.hsus.org/wildlife/wildlife_news/us_house_shuts_down_sale_wild_horses.html
+http://www.hswriting.ca/handouts/lit-review.asp
+http://www.hsx.com/help/glossary/
+http://www.hsx.com/help/glossary/index_main.htm
+http://www.hta-bi.bfh.ch/Groups/eduswiss/i-jav.d/Exercises/Problems/StartResumeStop1/
+http://www.hta-bi.bfh.ch/Groups/eduswiss/i-jav.d/Exercises/Problems/StartResumeStop2/
+http://www.htdp.org/2001-01-18/Book/node57.htm
+http://www.htexplained.com/abridged/Chap%20Index.htm
+http://www.htmlbible.com/sacrednamebiblecom/kjvstrongs/FRMSTRHEB47.htm
+http://www.htmldog.com/
+http://www.htmlgoodies.com/letters/016.html
+http://www.htmlgoodies.com/tutors/src.html
+http://www.htmlhelp.com/reference/css/classification/
+http://www.htmlhelp.com/reference/css/classification/list-style-type.html
+http://www.htmlhelp.com/reference/wilbur/quickref.html
+http://www.htpcnews.com/snapstreama2.html
+http://www.htservices.com/Tools/VBandC/SerialCommunications.htm
+http://www.htwm.de/stu-engl/ww/economy.htm
+http://www.hu.mtu.edu/~cwaddell/Basic_Prose_Style.html
+http://www.hubbertpeak.com/
+http://www.hubbertpeak.com/campbell/
+http://www.hubbertpeak.com/campbell/commons.htm
+http://www.huc.edu/newspubs/pressroom/2004/11/ellenson-tide.shtml
+http://www.hud.ac.uk/sas/forensic/news.htm
+http://www.hud.ac.uk/sas/pharmsci/news.htm
+http://www.hud.gov/energy/taskforce.cfm
+http://www.hud.gov/news/release.cfm?content=pr04-097.cfm
+http://www.hudson.k12.ma.us/schools_district/jfk/JFKRara.html
+http://www.hudsonunitedbank.com/faq.html
+http://www.huduser.org/datasets/assthsg/statedata98/descript.html
+http://www.huduser.org/periodicals/fieldworks/1299/fworks2.html
+http://www.huffmaster.com/emails/march_2005/
+http://www.hugelyrics.com/lyrics/134866/Eminem/Mosh
+http://www.hughbayley.labour.co.uk/ViewPage.cfm?Page=12774
+http://www.hughchou.org/calc/
+http://www.hughestrueman.com/people.html
+http://www.hughhewitt.com/
+http://www.hughston.com/hha/a.climb.htm
+http://www.huh.harvard.edu/nebc/Summaries/1998/Dec98sum.html
+http://www.hull.ac.uk/05/news/dec/medical_trial.html
+http://www.hull.ac.uk/05/news/june/tutu.html
+http://www.hullcc.gov.uk/archives/links.php
+http://www.hullcc.gov.uk/conservation/ca_garden_village.php
+http://www.hullcc.gov.uk/publicprotection/tradingstandards/consumer_law_faq.php
+http://www.hullcityafc.net/
+http://www.hullcityafc.premiumtv.co.uk/page/Match/MatchReport/0,,10338~26951,00.html
+http://www.hulubei.net/tudor/humor/marriage.html
+http://www.hulver.com/scoop/story/2005/3/30/74459/2145
+http://www.human-inquiry.com/expsr8.htm
+http://www.human-resources-health.com/content/2/1/5
+http://www.human-resources-health.com/content/2/1/8
+http://www.human.pefri.hr/~lara/oslo.html
+http://www.humanbeams.com/fatman/fm1104kelley-juanasembrace.shtml
+http://www.humanedgetech.com/guide1/choices.htm
+http://www.humanefood.ca/news_35.html
+http://www.humaneteen.org/projects5.htm
+http://www.humaneventsonline.com/blog-cb.php
+http://www.humanflowerproject.com/
+http://www.humanism.org.uk/site/cms/contentViewArticle.asp?article=1260
+http://www.humanismbyjoe.com/Bible_Opposes_Knowledge.htm
+http://www.humanismbyjoe.com/Sex_Industry_Benefits.htm
+http://www.humanistictexts.org/sa'di.htm
+http://www.humanists.net/cdhs/recap-2003-05-11-Gordinier.html
+http://www.humanitarian.net/eidnet/fmd/tripartite2000.html
+http://www.humankinetics.com/products/showexcerpt.cfm?excerpt_id=3235
+http://www.humankinetics.com/products/showexcerpt.cfm?excerpt_id=3387
+http://www.humankinetics.com/products/showexcerpt.cfm?excerpt_id=3474
+http://www.humankinetics.com/products/showproduct.cfm?isbn=073604907X
+http://www.humankinetics.com/products/showproduct.cfm?isbn=073604907x
+http://www.humanposture.com/
+http://www.humanresources-centre.net/
+http://www.humanrights.gov.au/movingforward/speech_ruddock.html
+http://www.humanrights.gov.au/sex_discrimination/exemption/letter1.html
+http://www.humanrightsfirst.org/media/2003_alerts/0221.htm
+http://www.humanrightsfirst.org/media/2003_alerts/0918.htm
+http://www.humanrightsfirst.org/us_law/detainees/status_review_080204.htm
+http://www.humanrightsfirst.org/us_law/loss/loss_ch4a.htm
+http://www.humanrightsinitiative.org/policeemag/innovation_practices.htm
+http://www.humanrightswatch.org/doc/?t=americas
+http://www.humanscale.com/ergo_info/articles.cfm?type=studies
+http://www.humansecuritybulletin.info/February_2005/Home/en/
+http://www.humanshields.org/modules.php?op=modload&name=News&file=article&sid=113
+http://www.humbermouth.org.uk/2000/critical_eye_02.html
+http://www.humberside.police.uk/Publications/pagefive.htm
+http://www.humboldt.edu/~english/gwpepurp.html
+http://www.humboldt.edu/~jcb10/spanwar.shtml
+http://www.humboldt.edu/~pls13/exam2fall-02KEY.html
+http://www.humboldt.edu/~tha1/discip-options.html
+http://www.humboldthomes.com/humboldt-county-real-estate.htm
+http://www.humbul.ac.uk/about/portal.html
+http://www.humeseeds.com/aug01qa.htm
+http://www.humguide.com/seniornews/issues/9901a.shtml
+http://www.humiliationstudies.org/whoweare/evelin.php
+http://www.humiliationstudies.org/whoweare/evelin04.php
+http://www.hummingbird.com/collateral/plugin/category.html?metaConceptId=12&contentId=54776&language=1&contentIndex=45973
+http://www.hummingbird.com/collateral/plugin/category.html?metaConceptId=12&contentIndex=0&contentId=0&language=1
+http://www.hummingbirded.com/fall_apples_acorns.html
+http://www.humnet.ucla.edu/calendar/0102/tesl.html
+http://www.humorcafe.com/da_newz/press1/kfc_taco_bell.htm
+http://www.humormatters.com/aging.htm
+http://www.humorwriters.org/8waystopromote.html
+http://www.humournet.co.uk/Jokes/sex.htm
+http://www.huna.org/html/kuwork_sf.html
+http://www.huna.org/html/lpharmny.html
+http://www.hungryflower.com/links.html
+http://www.hungryghost.net/magpolitics/DarkAngels.htm
+http://www.hunterbear.org/handling_the_klan_on_easter_sund.htm
+http://www.hunterinformation.com/caf99.htm
+http://www.huntgenealogy.com/about.htm
+http://www.huntinginquiry.gov.uk/evidence/huntingassocireland.htm
+http://www.huntinginquiry.gov.uk/evidence/nfucymru.htm
+http://www.huntinginquiry.gov.uk/evidence/wspa.htm
+http://www.huntinginquiry.gov.uk/evidence2/badgerwatch.htm
+http://www.huntingmag.com/small_game/clay_070604/
+http://www.huntington.org/ArtDiv/Morris2003/Morris2003.html
+http://www.huntingtonbeachhostel.com/mitchell.html
+http://www.huntrealestate.com/StaticContent.aspx?sta_name=services_sellersecurity
+http://www.huntsvillealabamausa.com/newcomers/education.html
+http://www.huppi.com/kangaroo/L-chimonetarism.htm
+http://www.huppi.com/kangaroo/L-clintondeserve.html
+http://www.huppi.com/kangaroo/L-evolutiontheory.htm
+http://www.hurstjaws.com/Home/PressReleases.Asp
+http://www.hurston-wright.org/writers.html
+http://www.hus.fi/default.asp?path=59,403,2252,6035
+http://www.hus.fi/default.asp?path=59;403;2252;6035&print=1
+http://www.hus.fi/default.asp?path=59;403;2252;6035&text=1
+http://www.husdal.com/gis/news.htm
+http://www.hussaini.20m.com/photo4.html
+http://www.huuc.net/sermons/KeepingFaith.html
+http://www.hvacmechanic.com/trouble_shooting/commericalsplits.htm
+http://www.hvbgroup.com/-snm-0134963952-1119146548-0000019543-0000000255-1119190325-enm-cms/english/press/showdetail.html?id=8297&pid=0&cid=0&dr=0
+http://www.hvcb.org/membership/DIDYOUKNOW.HTML
+http://www.hvfinc.com/longtermcare.html
+http://www.hvk.org/articles/0603/196.html
+http://www.hvk.org/articles/0704/140.html
+http://www.hvsinternational.com/Personnel/Profile.aspx?Id=47&Bp=380
+http://www.hwcn.org/link/forhv/whatsnew/up200405/up040505replace.htm
+http://www.hwcn.org/link/hasc/letter_cf.html
+http://www.hwcn.org/link/mkg/app_6.html
+http://www.hwfc.com/Sales/
+http://www.hwforums.com/2011/messages/2364.html
+http://www.hwforums.com/2011/messages/2368.html
+http://www.hwize.com/health_product/highstreet/highstreet_purchase_page.html
+http://www.hws.edu/about/history/war.asp
+http://www.hws.edu/admissions/adm_visit/ways.asp?clienttype=parents
+http://www.hws.edu/admissions/adm_visit/ways.asp?clienttype=prospective
+http://www.hws.edu/news/speakers/transcripts/trinitydedication_salisbury.asp
+http://www.hww.ca/hww2p.asp?id=76&cid=0
+http://www.hwwilson.com/Databases/biobank.htm
+http://www.hwwilson.com/print/storeind.cfm
+http://www.hy-vee.com/default.asp?p=healthlibrary
+http://www.hyahya.org/70god_created_sci08.php
+http://www.hyattcarter.com/
+http://www.hybd.net/~mms/forum.php?action=view%20topic&id=175
+http://www.hydepark.org/parks/burnham/burnhamnatctr.htm
+http://www.hydeparkny.us/history.shtml
+http://www.hydraairpacific.com/products2.htm
+http://www.hydro.co.nz/1_information/1_risk_management/risk.html
+http://www.hydrogenforecast.com/JulyArticles/hfc_csmcolumn071504.html
+http://www.hydroponics101.com/sw53074.asp
+http://www.hydroponicsbc.com/propogation.html
+http://www.hydroponicsonline.com/qapages/qapage34.htm
+http://www.hygeia.org/poems10.htm
+http://www.hygra.com/book/
+http://www.hymnsandcarolsofchristmas.com/Hymns_and_Carols/Biographies/robert_may.htm
+http://www.hyms.ac.uk/prospectus/admission.asp
+http://www.hypeandhope.com/wt/page/index/it_1103149394
+http://www.hyper-parenting.com/newsweek5.htm
+http://www.hyperborea.org/alenxa/apk3.html
+http://www.hypercatracing.com/bike_fit_feedback.htm
+http://www.hyperdic.net/dic/go.htm
+http://www.hyperion-records.co.uk/notes/67310-N.asp
+http://www.hyperlogik.com/jerry_gov/3.html
+http://www.hypermail-project.org/archive/99/05/0734.html
+http://www.hyperorg.com/backissues/joho-apr10-99.html
+http://www.hyperorg.com/backissues/joho-aug5-99.html
+http://www.hyperorg.com/backissues/joho-feb5-99.html
+http://www.hyperorg.com/backissues/joho-jan28-05.html
+http://www.hyperorg.com/backissues/joho-jun20-05.html
+http://www.hyperorg.com/backissues/joho-oct25-02.html
+http://www.hyperorg.com/blogger/archive/2002_03_01_archive.html
+http://www.hyperorg.com/blogger/mtarchive/003680.html
+http://www.hyperorg.com/misc/books/amazon.html
+http://www.hyperreal.org/~mpesce/
+http://www.hypertensionaha.org/cgi/content/full/43/5/957
+http://www.hypertextnavigation.com/timstyle.htm
+http://www.hyperthot.com/1115_bk.htm
+http://www.hyperwerks.com/series/deity_chara.html
+http://www.hyperzine.co.nz/hyper_15/intern_15.shtml
+http://www.hypnodean.com/selling%20success.htm
+http://www.hypnos.co.uk/hypnomag/peltbook/chapter10p1.htm
+http://www.hypnos.co.uk/hypnomag/peltbook/chapter9p1.htm
+http://www.hypnos.info/cds/speaking.html
+http://www.hypnosis.org/overcomingCSA.htm
+http://www.hypocrites.com/article11273.html
+http://www.hypography.com/
+http://www.hypography.com/hypography.cfm?id=38
+http://www.hypography.com/scienceforums/showthread.php?goto=lastpost&t=1317
+http://www.hypography.com/scienceforums/showthread.php?t=1002&page=3
+http://www.hypography.com/scienceforums/showthread.php?t=1002&page=3&pp=10
+http://www.hypography.com/scienceforums/showthread.php?t=1053
+http://www.hypography.com/scienceforums/showthread.php?t=1053&page=1
+http://www.hypography.com/scienceforums/showthread.php?t=1053&page=1&pp=10
+http://www.hypography.com/scienceforums/showthread.php?t=1171&goto=nextnewest
+http://www.hypography.com/scienceforums/showthread.php?t=1250&goto=nextnewest
+http://www.hypography.com/scienceforums/showthread.php?t=1317
+http://www.i-america.net/loclinks.htm
+http://www.i-cynic.com/weekly_38.asp
+http://www.i-cynic.com/weekly_51.asp
+http://www.i-d-d.com/interior_design_books/interior_design_professional_books.htm
+http://www.i-hacked.com/content/view/18/94/
+http://www.i-know.at/author_guidelines/style_guide
+http://www.i-resign.com/uk/workinglife/viewarticle_46.asp
+http://www.i-served.com/SilentVictoryTeam.html
+http://www.i-sis.org.uk/ATPA.php
+http://www.i-sis.org.uk/ERCD.php?printing=yes
+http://www.i-sis.org.uk/EngineeringLifeAndMind.php
+http://www.i-sis.org.uk/EngineeringLifeAndMind.php?printing=yes
+http://www.i-sis.org.uk/GMRII.php
+http://www.i-sis.org.uk/isisnews/i-sisnews9-22.php
+http://www.i-sis.org.uk/public.php
+http://www.i-tech.com.au/products/3230_Hardware_Assembled_with_1_Year_Parts.asp
+http://www.i-tech.com.au/products/3231_Hardware_Assembled_with_2_Years_Parts.asp
+http://www.i-tech.com.au/products/3232_Hardware_Assembled_with_3_Years_Parts.asp
+http://www.i-uk.com/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1079976720577
+http://www.i-uk.com/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1079976722770
+http://www.i18nguy.com/spam_glam/
+http://www.i18nguy.com/unicode/codepages.html
+http://www.i2itelevision.com/video_store.php
+http://www.i4at.org/
+http://www.i4market.com/services/research.html
+http://www.i638.com/p.php?f=iposttoday&title=iPost%20Today&theme=default&page=4
+http://www.ia-sb.org/humanresources/er/ERFeb2002.asp
+http://www.ia-sb.org/humanresources/er/ERJune29.asp
+http://www.ia.net/~gheller/burning/Index.htm
+http://www.iaadp.org/aggression.html
+http://www.iaamrh.org/ic_jursp20003.html
+http://www.iabc.com/members/faqmem.htm
+http://www.iabin-us.org/documents/tor/tor_pilot.html
+http://www.iacenter.org/haiti-030804update.htm
+http://www.iacenter.org/rokke_0205.htm
+http://www.iacenter.org/sacrific.htm
+http://www.iaci-canada.com/Subjects.htm
+http://www.iacocca-lehigh.org/globalvillage/newsletterfall2003.htm
+http://www.iad.org/books/S-women.html
+http://www.iadb.org/EXR/doc98/apr/br772e.htm
+http://www.iadb.org/exr/english/POLICIES/participate/forew.htm
+http://www.iadb.org/idbamerica/English/JAN02E/jan02e2.html
+http://www.iadis.org/confman_es2004/accepted.asp
+http://www.iaea.org/NewsCenter/Focus/IaeaLibya/libya_timeline.shtml
+http://www.iaea.org/NewsCenter/Statements/2004/ebsp2004n012.html
+http://www.iaea.org/NewsCenter/Statements/DDGs/2003/goldschmidt26112003.html
+http://www.iaea.org/PrinterFriendly/NewsCenter/Statements/DDGs/2003/goldschmidt26112003.html
+http://www.iaeste.ie/info2004.html
+http://www.iaff.org/across/local.html
+http://www.iaff.org/build/benefits.html
+http://www.iafss.org/html/newsletter03.htm
+http://www.iafss.org/html/newsletter04.htm
+http://www.iags.org/es042103.html
+http://www.iags.org/es052103.html
+http://www.iags.org/n0124053.htm
+http://www.iah.bbsrc.ac.uk/schools/scientists/pasteur.htm
+http://www.iahcsmm.com/basic_man_0302.htm
+http://www.iaiabc.org/
+http://www.iaje.org/bio.asp?ArtistID=72
+http://www.ialc.org/people.htm
+http://www.ials.ed.ac.uk/eltt/eltt3_8.html
+http://www.iam141.org/legislat.htm
+http://www.iamawlodge1426.org/hisupdate39.htm
+http://www.iamawolf.com/alone/
+http://www.iambic.com/agenduspro/palmos/
+http://www.iamfitforlife.com/air_travel.htm
+http://www.iamg.org/cqs/cqsbook1.htm
+http://www.iaml.com/organize.htm
+http://www.iamm.com/man-cu.htm
+http://www.iamusic.com/articles/source.php
+http://www.ianano.org/abstract-online.htm
+http://www.ianchadwick.com/essays/madness.html
+http://www.ianr.unl.edu/ianr/fcs/upsdowns/upsjune02.htm
+http://www.iansmith.co.uk/lotr/weblogs/July17th2003.htm
+http://www.iap-tv.com/weavahinterview.htm
+http://www.iap.nl.com/falletti.html
+http://www.iap.nl.com/speeches2/alternative.html
+http://www.iap.tuwien.ac.at/www/surface/STM_Gallery/electronwaves.html
+http://www.iapn.org/daniel_m.htm
+http://www.ias.org.uk/licensing/reform_mpsbriefing.html
+http://www.iasb.com/files/j0050603.htm
+http://www.iasb.com/files/nb0602.htm
+http://www.iasb.com/files/nb0701.htm
+http://www.iascp.com/bylaws.html
+http://www.iasig.org/wg/index.shtml
+http://www.iasp-pain.org/PCU01-4.html
+http://www.iasp-pain.org/PCU96a.html
+http://www.iasp-pain.org/PCU99b.html
+http://www.iasp-pain.org/TC97NovDec.html
+http://www.iasp-pain.org/TC98SeptOct.html
+http://www.iaspei.org/commissions/CEH/Hanoi_meeting.html
+http://www.iaspm.net/rpm/jour_Fren.html
+http://www.iastate.edu/~ceah/symposium_info.html
+http://www.iasted.org/conferences/2005/russia/acit-specialsession.htm
+http://www.iat.ac.uk/courses/eleceleceng.htm
+http://www.iatdmct.org/dutchqa.htm
+http://www.iath.virginia.edu/holocaust/spiegelman.html
+http://www.iath.virginia.edu/london/Archive/On-line-pubs/2001/paper4.html
+http://www.iath.virginia.edu/public/jjm2f/rationale.html
+http://www.iath.virginia.edu/waters/front.html
+http://www.iauc.org/convention2004report.htm
+http://www.ibainc.com/sell/
+http://www.ibanet.org/humanrights/Training.cfm
+http://www.ibdhost.com/
+http://www.ibeurope.com/
+http://www.ibiblio.org/ahkitj/diaries/tph/
+http://www.ibiblio.org/ahkitj/section27/
+http://www.ibiblio.org/astrobiology/index.php?page=terraform03
+http://www.ibiblio.org/astrobiology/print.php?page=terraform03
+http://www.ibiblio.org/bosak/pa/pa-act.htm
+http://www.ibiblio.org/cisco/tracy-article.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg2000/khrg0001a.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg2000/khrg0001c.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg2002/khrg0201a.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg2002/khrg02u1.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg96/khrg9605.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg96/khrg96c3.html
+http://www.ibiblio.org/freeburma/humanrights/khrg/archive/khrg99/khrg99u4.html
+http://www.ibiblio.org/herbmed/eclectic/kings/camellia-sine.html
+http://www.ibiblio.org/herbmed/eclectic/tea/chapter-vi.html
+http://www.ibiblio.org/herbmed/rhod/2003/jun03-b.html
+http://www.ibiblio.org/hyperwar/AAF/I/AAF-I-12.html
+http://www.ibiblio.org/hyperwar/UN/UK/rep/PRO/DEFE/5/188/DEFE-5-188-5.html
+http://www.ibiblio.org/hyperwar/USN/ships/dafs/CL/cl50.html
+http://www.ibiblio.org/icky/speech2.html
+http://www.ibiblio.org/obl/docs/KW67.htm
+http://www.ibiblio.org/obl/docs/NN2003-09-03.htm
+http://www.ibiblio.org/obp/electricCircuits/DC/DC_14.html
+http://www.ibiblio.org/obp/electricCircuits/DC/DC_6.html
+http://www.ibiblio.org/obp/thinkCS/cpp/english/chap02.htm
+http://www.ibiblio.org/obp/thinkCS/cpp/english/chap04.htm
+http://www.ibiblio.org/obp/thinkCSpy/chap04.htm
+http://www.ibiblio.org/obp/thinkCSpy/chap10.htm
+http://www.ibiblio.org/rdu/a-apathy.html
+http://www.ibiblio.org/rdu/speedsci.html
+http://www.ibiblio.org/rge/faq-html/appendxb.htm
+http://www.ibiblio.org/warstop/warbfly.html
+http://www.ibill.com/about/gkardagreement.cfm
+http://www.ibis-school.com/about_2.php
+http://www.ibisassoc.co.uk/effective_planning.htm
+http://www.ibizbasics.com/online010201.htm
+http://www.ibm.com/annualreport/2003/noflash/guide_glossary.shtml
+http://www.ibm.com/annualreport/2004/annual/guide_cse.shtml
+http://www.ibm.com/annualreport/2004/annual/guide_csfp.shtml
+http://www.ibm.com/annualreport/2004/annual/guide_glossary.shtml
+http://www.ibm.com/developerworks/library-combined/.backup/gr-gap/
+http://www.ibm.com/developerworks/web/library/us-ucd2/
+http://www.ibm.com/shop/americas/webapp/wcs/stores/servlet/ProductDisplay?productId=8781014&storeId=1&langId=-1&catalogId=-840
+http://www.ibm1130.net/functional/OMPR.html
+http://www.ibmemployee.com/Highlights040201.shtml
+http://www.iboa.ie/
+http://www.iboxpublishing.com/responses1.htm
+http://www.ibrattleboro.com/index.php?topic=Political&page=8
+http://www.ibreathemusic.com/article/46
+http://www.ibreathemusic.com/article/73
+http://www.ibsf.org/wpbsa/worldsnookernews.php
+http://www.ibsnetwork.org.uk/Information/Trustees.htm
+http://www.ibstales.com/women_and_diarrhea_13.htm
+http://www.ibt-pep.com/default.asp?ObjectID=258
+http://www.ibt.org.uk/Images%20&%20Reality%20site/I&Rweb%20folder/I&Rweb/script/lesson1.html
+http://www.ic-network.com/forum/showthread.php?goto=lastpost&t=12420
+http://www.ic-network.com/guestlectures/peters1100transcript.html
+http://www.ic.ac.uk/templates/text_3.asp?P=3398
+http://www.ic.gc.ca/cmb/welcomeic.nsf/0/85256a220056c2a485256a2300603145?OpenDocument
+http://www.ic.sunysb.edu/Clubs/jca/reflections/20031009-Marianne.shtml
+http://www.ic.u-tokyo.ac.jp/japanese/a03_01_01_e.html
+http://www.ic.u-tokyo.ac.jp/japanese/b01_02_e.html
+http://www.icaainc.com/breed_standards.htm
+http://www.ican2000.com/usbuyaut.html
+http://www.ican2000.com/ussethome.html
+http://www.icann.org/committees/nom-comm/coi-subcom-charge-03may03.htm
+http://www.icann.org/gnso/whois-tf/report-19feb03.htm
+http://www.icann.org/tlds/org/applications/unity/VII/C35.htm
+http://www.icao.int/apac/meetings_arch.htm
+http://www.icap.org.pk/TRs/TR-29.htm
+http://www.icar.org.uk/res/nav/ng003/ng003-03.html
+http://www.icard.uillinois.edu/dsp_faqsusesprngfld.cfm
+http://www.icareregistry.com/reunions/mary.asp
+http://www.icas.org.uk/seekingthetruth/paulvolcker.asp
+http://www.icasit.org/km/kmrt/feb03/
+http://www.icbl.hw.ac.uk/ltdi/implementing-it/support.htm
+http://www.icbl.org/4msp/report/annex_v_1.html
+http://www.icbl.org/4msp/report/annex_v_3.html
+http://www.icbl.org/4msp/report/annex_v_4.html
+http://www.icc-cpi.int/recruitment/cc1g/intern_FAQ.html
+http://www.icc-cpi.int/recruitment/vpp1g/vprof_FAQ.html
+http://www.icc-cricket.com/corruption/code_of_conduct_report.html
+http://www.icc-cricket.com/print/corruption/code_of_conduct_report.html
+http://www.icce.rug.nl/documents/cplusplus/cplusplus12.html
+http://www.icce.rug.nl/~soundscapes/DATABASES/CAR/car19.html
+http://www.icce.rug.nl/~soundscapes/DATABASES/MIE/Part2_chapter08.html
+http://www.icce.rug.nl/~soundscapes/DATABASES/RNI/rni02.html
+http://www.icci.org/98final/chugh3.htm
+http://www.iccrimea.org/scholarly/tuarel-hakan.html
+http://www.iccs-isac.org/eng/asd-about.htm
+http://www.iccthailand.or.th/front.asp?id=103
+http://www.iccwbo.org/court/english/arbitration/rules.asp
+http://www.iccwbo.org/home/news_archives/2004/fourtou_pc_may.asp
+http://www.iccwbo.org/home/statements_rules/statements/2002/Arbitration%20in%20International%20Tax%20Matters.asp
+http://www.iccweb.com/industry/industry.asp?pageid=17
+http://www.icdc.com/~neubauer/states.htm
+http://www.icdc.com/~paulwolf/cointelpro/churchfinalreportIIIm.htm
+http://www.icdc.com/~paulwolf/gaitan/memorandumopinionandorder.htm
+http://www.icdri.org/technology/indexbp.htm
+http://www.iceboat.org/
+http://www.iced.org/e-news/0804/
+http://www.icelan.com/glossary/default.htm
+http://www.iceland.org/us/the-embassy/trade-economy/
+http://www.icesports.com/normalpg.php?pageId=5&catId=400
+http://www.icevi-europe.org/tt/ttw3/topic7.html
+http://www.icewebring.com/ICE_Products/RM2/RM2_1600_Companion_II.shtml
+http://www.icfa.org.au/saathi.htm
+http://www.icfconsulting.com/Markets/Community_Development/cd-expertise-4.asp
+http://www.icfconsulting.com/Markets/Homeland-Security/emergency-management-response-recovery.asp
+http://www.icfconsulting.com/Markets/Homeland-Security/vulnerability-assessment.asp
+http://www.icfire.com/thedanielproject/NewFiles/chapter3_3.html
+http://www.icg.org/home/getfile.cfm?id=1559&tid=3156
+http://www.icg.org/home/index.cfm?id=1690&l=1
+http://www.ich.ucl.ac.uk/gosh_families/ask_dr_jane_collins/mind/exam_results.html
+http://www.ichelp.com/TreatmentAndSelfHelp/BladderRetrainingProgram.html
+http://www.ichotelsgroup.com/h/d/pc/1/en/home
+http://www.ichotelsgroup.com/h/d/pc/925/en/home
+http://www.ichotelsgroup.com/priorityclub
+http://www.ichthys.com/Pet14.htm
+http://www.ici.org/i4s/bro_i4s_informed.html
+http://www.ici.org/statements/cmltr/01_sec_related_perf_com.html
+http://www.ici.org/statements/cmltr/03_sec_soft_com.html
+http://www.iciclesoftware.com/vlh7/VLH7Contracts.html
+http://www.icimod.org/sus_options/salt_steps.htm
+http://www.icj-cij.org/icjwww/idecisions/isummaries/ibnlsummary590620.htm
+http://www.icj-cij.org/icjwww/idocket/icn/icnpleadings/icn_rejoinder/icn_ipleadings_nigeria_rejoinder_20010101_Ch09.htm
+http://www.icj-cij.org/icjwww/idocket/icn/icnpleadings/icn_rejoinder/icn_ipleadings_nigeria_rejoinder_20010101_Ch10.htm
+http://www.icj-cij.org/icjwww/idocket/iluk/ilukjudgment/iluk_ijudgment_980227_dissentingjennings.html
+http://www.icjw.org/icjw/site/institutional/newsletter/newsletter08.php
+http://www.icknowledge.com/
+http://www.icle.org/michlaw/Rules/MRE/2001-51_07-16-03_or.html
+http://www.icm-computer.co.uk/products/business_continuity/recovery_solutions/reclocation_details.asp?LocAreaID=8&map=true
+http://www.icmarc.org/xp/news/financialplanning/73742035.xml
+http://www.icmarc.org/xp/vl/learn/glossary/
+http://www.icmc.net/docs/en/programs/help
+http://www.icmc.net/docs/es/programs/help
+http://www.icmc.net/docs/fr/programs/help
+http://www.icmci.org/Istanbul%202003/Delegate.htm
+http://www.icn.org/studentservices/skills.html
+http://www.icols.org/pages/RGrayson/RG_SPAI.html
+http://www.icomm.ca/dragon/igcare.htm
+http://www.icommag.com/directory-post-production.html
+http://www.iconmag.co.uk/gearin_tosh.htm
+http://www.iconnect-online.org/Stories/Story.import4353
+http://www.iconsupperclub.com/events/event-planning/event-planning-firm.html
+http://www.iconsystemsnetwork.com/products/revelations/index.asp
+http://www.icosavillage.net/FAQs_assembly.html
+http://www.icpnm.org/graduatesProfiles.html
+http://www.icponline.org/feature_articles/f10_99.htm
+http://www.icponline.org/world_ed_news/w_ed1_03.htm
+http://www.icponline.org/world_ed_news/w_ed3_01.htm
+http://www.icponline.org/world_ed_news/w_ed5_02.htm
+http://www.icr.org/bible/bhta46.html
+http://www.icr.org/cgi-bin/faq/go.cgi?id=34
+http://www.icr.org/cgi-bin/faq/go.cgi?id=99
+http://www.icr.org/goodsci/bot-9709.htm
+http://www.icrc.org/WEB/ENG/siteeng0.nsf/htmlall/p0361?OpenDocument&style=Custo_Final.4&View=defaultBody2
+http://www.icrc.org/Web/Eng/siteeng0.nsf/htmlall/63AGHE
+http://www.icrc.org/ihl-nat.nsf/0/eb71b7f31aaf3380c1256afb0036970d?OpenDocument
+http://www.icrc.org/ihl.nsf/0/7f15bb724290e0f8c12563cd0042b8ca?OpenDocument
+http://www.icrc.org/themissi.nsf/0/f1c59e06da1a24dfc1256ba50048dacf?OpenDocument
+http://www.icrc.org/web/eng/siteeng0.nsf/htmlall/57JPV7?OpenDocument&View=defaultBody&style=custo_print
+http://www.icrc.org/web/eng/siteeng0.nsf/htmlall/5DGM4K?OpenDocument&View=defaultBody&style=custo_print
+http://www.icrc.org/web/eng/siteeng0.nsf/iwpList121/9DAF0CDB12CFDFFEC1256C24005808FA
+http://www.icrc.org/web/eng/siteeng0.nsf/iwpList165/48380A7CC789E723C1256B890033D659
+http://www.icrc.org/web/eng/siteeng0.nsf/iwpList245/5A6114ED72F9B728C1256B66005C6DAC
+http://www.icrc.org/web/eng/siteeng0.nsf/iwpList377/438B7C44BDEAC7A3C1256B66005DCAAB
+http://www.icrisat.org/text/pubs/fft/fft8/gpub2d.html
+http://www.ics.com/support/docs/viewkit/1.3/pguide/ch04wia1.htm
+http://www.ics.trieste.it/ActivityDetailsArchive.aspx?pcode=2.3&activity_id=43
+http://www.ics.uci.edu/~eppstein/cgt/
+http://www.icsc.org/srch/sct/current/sct0800/02.html
+http://www.icsc.org/srch/sct/sct1002/page53.php?region=
+http://www.icsc.org/srch/sct/sct1203/page39.php?region=
+http://www.icspp.org/index.php?option=com_content&task=view&id=39&Itemid=49
+http://www.icstars.com/HTML/journal/Turkey-Town1.html
+http://www.icsti.org/forum/39/
+http://www.icsu.org/eXcal2/calendar.php4?mode=flyer&date=2005-07-01
+http://www.icsw.org/global-conferences/poverty-eradication.htm
+http://www.ict-uk.org/events_tsunami.html
+http://www.ict.gov.gh/html/prepcom.htm
+http://www.ict.org.il/articles/articledet.cfm?articleid=456
+http://www.ict.org.il/articles/articledet.cfm?articleid=481
+http://www.ict.org.il/spotlight/det.cfm?id=516
+http://www.ictadvice.org.uk/index.php?section=ae
+http://www.icte.org/icteweb1/pmopen.htm
+http://www.icte.uq.edu.au/communityeducation/communityeducation_creativewriting.htm
+http://www.ictr.org/ENGLISH/cases/Akayesu/decisions/WARNING190398.htm
+http://www.ictr.org/ENGLISH/speeches/jallow130605.htm
+http://www.ictr.org/ENGLISH/updates/upd008.htm
+http://www.ictsd.org/biores/02-11-07/inbrief.htm
+http://www.icybrian.com/fanfic/whitecrescent/twilightmeeting.php
+http://www.id.com.au/macroc/commprofile/default.asp?WebID=10&MnID=7&PgID=3
+http://www.id.gov.jo/human/activities2000/t-cult_report.html
+http://www.id21.org/insights/insights36/insights-iss36-art05.html
+http://www.id21.org/insights/insights51/insights-iss51-art00.html
+http://www.id21.org/insights/insights54/insights-iss54-art00.html
+http://www.id21.org/insights/insights56/insights-iss56-art00.html
+http://www.ida.liu.se/~pelab/xjobb/
+http://www.ida.net/users/rdk/ces/maritial_customs.html
+http://www.ida.net/users/tetonsl/railroad/lcb.htm
+http://www.idahobizhelp.org/cf/print_activities.cfm
+http://www.idahostatesman.com/apps/pbcs.dll/article?AID=/20040904/NEWS010702/409040312/1024
+http://www.idaireland.com/home/index.aspx?id=193
+http://www.idaireland.com/home/news.aspx?id=3&content_id=243
+http://www.idaireland.com/home/news.aspx?id=3&content_id=253
+http://www.idatech.com/technology/publications.html?pub=14
+http://www.idblog.org/archives/000276.html
+http://www.idblog.org/archives/000286.html
+http://www.idc.com/getdoc.jsp?containerId=VWP000248
+http://www.idea-knowledge.gov.uk/idk/terms.do
+http://www.ideacenter.org/clubs/resources_meeting.php
+http://www.ideacenter.org/contentmgr/showdetails.php/id/847
+http://www.ideaexplore.net/news/050204.html
+http://www.ideafinder.com/features/century/3m.htm
+http://www.ideafinder.com/history/inventions/story055.htm
+http://www.ideafinder.com/history/inventions/story069.htm
+http://www.ideafinder.com/history/inventions/story078.htm
+http://www.idealcheese.com/
+http://www.idealliance.org/events/calendar.asp
+http://www.idealliance.org/papers/xml2001papers/tm/WEB/06-04-04/06-04-04.htm
+http://www.idealliance.org/proceedings/xml04/papers/27/UBL.html
+http://www.idealword.org/sucker/46/
+http://www.ideamarketers.com/library/article.cfm?articleid=31171&wherefrom=PROFILE
+http://www.ideamarketers.com/library/article.cfm?articleid=37746
+http://www.ideamarketers.com/library/article.cfm?articleid=38174
+http://www.ideamerge.com/
+http://www.ideamerge.com/libraryleasingchapter.html
+http://www.ideas4writers.co.uk/index.php
+http://www.ideasfactory.com/business/features/bus_feature26.htm
+http://www.ideasfactory.com/business/marketing/know_it/insider1.html
+http://www.ideasfactory.com/film_tv/features/ftv_feature13.htm
+http://www.ideasfactory.com/training_courses/features/train_feature29.htm
+http://www.idenise.net/weblog/week_2003_03_30.php
+http://www.identityblog.com/
+http://www.identitytheory.com/fiction/nielsen_fists.php
+http://www.identitytheory.com/interviews/birnbaum140.php
+http://www.identitytheory.com/people/birnbaum20.html
+http://www.identitytheory.com/people/birnbaum89.html
+http://www.identitytheory.com/pokerblog/
+http://www.ideosphere.com/fx/docs/create.cgi
+http://www.ides.state.il.us/general/dirmsg2.asp
+http://www.idevgames.com/articles/programming/id1002/
+http://www.idevnews.com/TipsTricks.asp?ID=30
+http://www.idfa.org/
+http://www.idfa.org/dbrief/dbrief021804.html
+http://www.idfuel.com/index.php?m=200401
+http://www.idiom.com/~drjohn/ect.html
+http://www.idl.dundee.ac.uk/~chris/blog/
+http://www.idlebrain.com/allari/interview.html
+http://www.idler.co.uk/html/chin/happychin.htm
+http://www.idler.co.uk/html/pleasures/pleasures3.htm
+http://www.idmonsters.com/rtc/02/patchadams.html
+http://www.idmu.co.uk/medicinal.htm
+http://www.idolblog.com/node/2002088
+http://www.idoweddingphotography.com/prices/
+http://www.idp.com/adsjakarta/returnedstudents/article30.asp
+http://www.idp.com/adsjakarta/returnedstudents/newsletters/article9.asp
+http://www.idph.state.il.us/public/press96/ems96.htm
+http://www.idra.org/Newslttr/2005/Jan/Cuca.htm
+http://www.idrc.ca/en/ev-1441-201-1-DO_TOPIC.html
+http://www.idrc.ca/en/ev-28595-201-1-DO_TOPIC.html
+http://www.idrc.ca/en/ev-67678-201-1-DO_TOPIC.html
+http://www.idrc.ca/fr/ev-54439-201-1-DO_TOPIC.html
+http://www.idrc.ca/fr/ev-67660-201-1-DO_TOPIC.html
+http://www.idrs.org/Publications/Journal/JNL15/JNL15.Apfelstadt.Canadian.html
+http://www.ids.ac.uk/ids/bookshop/briefs/brief15.html
+http://www.idsachicago.org/past/2003.html
+http://www.idscorral.com/corcamcorder.shtml
+http://www.idsnews.com/subsite/story.php?id=29400
+http://www.idsusa.org/map_frame.html
+http://www.ie.lspace.org/books/dawcn/dawcn-english.html
+http://www.iea.org.uk/record.jsp?type=news&ID=243
+http://www.iea.org/Textbase/press/pressdetail.asp?PRESS_REL_ID=123
+http://www.ieabioenergy.com/directory.php
+http://www.iec.org/online/tutorials/mpls_traffic/topic02.html
+http://www.iee.org/OnComms/PN/sustainability/Event_report.cfm
+http://www.iee.org/oncomms/pn/healthtech/chairmanswelcome.cfm
+http://www.ieee-boston.org/reliability_society.htm
+http://www.ieee-virtual-museum.org/collection/event.php?taid=&id=3456945&lid=1
+http://www.ieee-virtual-museum.org/collection/people.php?taid=&id=1234567&lid=1
+http://www.ieee.be/emsreport.htm
+http://www.ieee.org/organizations/history_center/general_info/lines_menu.html
+http://www.ieee.org/organizations/pubs/newsletters/npss/0904/nuclear.html
+http://www.ieeecolumbus.org/TPI/tpi%20old/tpi.htm
+http://www.ieeeusa.org/policy/LIBRARY/PAPERS/licensing.html
+http://www.ieer.org/pubs/e&g-ch5.html
+http://www.ieer.org/sdafiles/vol_4/4-3/4_3art1.html
+http://www.ieer.org/sdafiles/vol_6/6-2/cleanup.html
+http://www.iei-la.org/projects.asp?File=200803.asp
+http://www.iei.net/~pwagner/brazarticles/Apr2004.htm
+http://www.iemily.com/Article.cfm?ArtID=552
+http://www.ienhance.com/procedure/description.asp?ProcID=4&bodyid=1&specialtyid=1
+http://www.ieor.berkeley.edu/~goldberg/fixturing/fixture_background.htm
+http://www.iep.utm.edu/s/skepmod.htm
+http://www.ies.aust.com/ten/ten10.htm
+http://www.ies.aust.com/~visible/papers/CBT.html
+http://www.ies2005.com/
+http://www.iesabroad.org/vienna.do
+http://www.iesabroad.org/vienna/vienna.html
+http://www.iesna.org/industry/linksallied.cfm
+http://www.ietf.org/proceedings/02nov/214.htm
+http://www.ietf.org/proceedings/03mar/226.htm
+http://www.ietf.org/proceedings/98aug/I-D/draft-ietf-asid-mime-direct-08.txt
+http://www.ieu.asn.au/campaigns/general/61.html
+http://www.ieu.asn.au/issues/general/34.html
+http://www.ieu.asn.au/ohs/stressburnout.html
+http://www.ifad.org/events/gc/28/speech/op.htm
+http://www.ifad.org/events/gc/28/speech/op_s.htm
+http://www.ifad.org/gender/learning/sector/agriculture/in_4_2.htm
+http://www.ifad.org/lrkm/tags/320.htm
+http://www.ifad.org/operations/projects/regions/PF/des/ET.htm
+http://www.ifadu.co.uk/
+http://www.ifamericansknew.org/us_ints/pg-nyt1.html
+http://www.ifasok.co.uk/financial_ombudsman_service.htm
+http://www.ifb.net/webit/recipes.htm
+http://www.ifeminists.net/introduction/essays/introduction.html
+http://www.ifex.org/fr/content/view/full/50174/
+http://www.iffiso.com/tax.htm
+http://www.ifi.ie/links.asp
+http://www.ifia-federation.org/guidelines/chpt3.htm
+http://www.ific.org/publications/brochures/pregnancybroch.cfm
+http://www.ific.org/publications/brochures/sucralosebroch.cfm
+http://www.ific.org/tools/messages.cfm
+http://www.ifip.or.at/minutes/c2001/c2001_part1.htm
+http://www.ifiwatchnet.org/eyes/item.shtml?x=43272
+http://www.ifiwatchnet.org/eyes/item.shtml?x=43274
+http://www.ifj.org/default.asp?index=1232&Language=EN
+http://www.ifj.org/default.asp?index=2757&Language=EN
+http://www.ifla.org/IV/ifla62/62-xiaj.htm
+http://www.ifla.org/IV/ifla69/faq-e.htm
+http://www.ifla.org/IV/ifla69/minutes.htm
+http://www.iflexsolutions.com/news/newsview.asp?cat=273
+http://www.ifma.org/research/research/change.cfm?actionbig=24&actionlil=284
+http://www.ifmagazine.com/common/article.asp?articleID=523
+http://www.ifor.org/WPP/faq.htm
+http://www.ifpafletcherconference.com/oldtranscripts/2003/bolton.htm
+http://www.ifpri.org/divs/mtid/dp/mtidp67.htm
+http://www.ifpri.org/pubs/fps/fps17.htm
+http://www.ifpri.org/pubs/fps/fps25.htm
+http://www.ifpri.org/themes/biotech/022400.htm
+http://www.ifpri.org/themes/mp05/pubs.htm
+http://www.ifpri.org/themes/mp17/results.htm
+http://www.ifpte17.org/organizing/formingunions.htm
+http://www.ifrc.org/docs/news/01/061502/
+http://www.ifrc.org/what/values/discrimination/infokit/bgext.asp
+http://www.ifremer.fr/anglais/plan.htm
+http://www.ifremer.fr/ditigo/molagnon/fortran90/engfaq.html
+http://www.ifs.org.uk/election/index01.php
+http://www.ifshinviolins.com/features_condition.html
+http://www.ifslearning.com/cefs/Units/unit1.htm
+http://www.ifsw.newport.ac.uk/mainpage.html
+http://www.ifsw.org/Activities/3.2.act.html
+http://www.ifsw.org/Directory/2.1.dir.html
+http://www.ifsw.org/Publications/4.4.pub.html
+http://www.ift.org/cms/?pid=1000422
+http://www.ift.org/cms/?pid=1000422&printable=1
+http://www.iftcommand.com/enlist/meminfo.php
+http://www.iftn.ie/awards/terms.htm
+http://www.iftn.ie/handbook/dsp_indexassociations.cfm
+http://www.iftn.ie/mediadesk/markets_marketaccess.htm
+http://www.iftn.ie/mediadesk/markets_third_countries.htm
+http://www.iftta.org/news.php?Region=Wales
+http://www.ifw-kiel.de/konfer/innovation/inno.htm
+http://www.ig.utexas.edu/hess_deep/treport4.htm
+http://www.igames.org/tournaments/MiniNewsView.asp?MiniID=30&AssetID=201
+http://www.igamingnews.com/index.cfm?page=artlisting&tid=5103
+http://www.igcar.ernet.in/transiim/_private/Authors/instructions_to_authors.htm
+http://www.igda.org/articles/miller_time.php
+http://www.igda.org/articles/rreynolds_ethics.php
+http://www.igda.org/smichigan/Jun04/report.htm
+http://www.igigroup.com/
+http://www.igin.com/Irrigation/0304meter.html
+http://www.iglou.com/vrsky/home.html
+http://www.iglss.org/accessible/html/angles/angles1-2_p2.html
+http://www.igluski.com/propertyInfo.cfm?pid=19028&dep=LGW
+http://www.igluski.com/propertyInfo.cfm?pid=19596&dep=EDI
+http://www.ignatzmice.com/Adam/features/Canal_Walk/WALKING_THE_CANALS_OF_AMSTERDAM_2.htm
+http://www.igoldrush.com/feat8.htm
+http://www.igougo.com/planning/journalEntryActivity.asp?JournalID=9028&EntryID=16611&n=Lowery's+Hot+Glass
+http://www.igreens.org.uk/
+http://www.igs.berkeley.edu/library/gallery-ca.html
+http://www.igs.berkeley.edu/publications/uspolitics.html
+http://www.igs.berkeley.edu/reports/democraticDeficit.html
+http://www.igsb.uiowa.edu/gsi/gb70/m_qury_sect_written.htm
+http://www.igtoa.org/news/letters/sepvoz/cdf_bulletin.php
+http://www.ih-osaka.or.jp/enjoy/en/housing/01.html
+http://www.ihavideo.com/RRVideos.html
+http://www.ihc.com/xp/ihc/aboutihc/lifestories.xml
+http://www.ihealthbeat.org/index.cfm?Action=dspItem&itemID=105124
+http://www.iherve.com/oracle/aordby.htm
+http://www.iheu.org/modules/afsection/article.php?articleid=326
+http://www.iheu.org/modules/afsection/article.php?articleid=43
+http://www.iheu.org/modules/bfsection/article.php?articleid=326
+http://www.iheu.org/modules/bfsection/article.php?articleid=96
+http://www.iheu.org/modules/news/article.php?storyid=118
+http://www.iheu.org/modules/news/print.php?storyid=118
+http://www.iheu.org/modules/wfsection/article.php?articleid=257
+http://www.iheu.org/modules/wfsection/article.php?articleid=326
+http://www.iheu.org/modules/wfsection/article.php?articleid=490
+http://www.ihf.info/CDA/tactics_corner,11997,0,,en.html
+http://www.ihhotel.com/overview.html
+http://www.ihigh.com/0,1773,2_1_0_97776,00.html
+http://www.ihigh.com/0,1773,2_4_0_97827,00.html
+http://www.ihispano.com/JobDetails.asp?ReviewJobs=322869&jTitle=General+Manager+3%2C+Food
+http://www.ihp.edu/coficg_tibet.html
+http://www.ihpm.org/programs/4ps/
+http://www.ihr.org/books/kulaszka/33leuchter.html
+http://www.ihr.org/jhr/v02/v02p137_Weber.html
+http://www.ihrc.org.uk/show.php?id=1030
+http://www.ihrim.org/
+http://www.ihsenergy.com/products/geps/index.jsp
+http://www.ihspress.com/whatsnew.htm
+http://www.ihssolutions.com/canada/clients/profiles.cfm?id=27
+http://www.ihssolutions.com/us/clients/profiles.cfm?id=27
+http://www.iht.com/articles/2004/10/18/news/edslaughter.html
+http://www.iht.com/articles/2004/12/28/news/edpfaff.html
+http://www.iht.com/articles/2005/01/23/business/prices.html
+http://www.iht.com/articles/2005/05/23/news/class.php
+http://www.iht.com/articles/2005/05/23/news/korea.php
+http://www.iht.com/articles/2005/06/10/news/india.php
+http://www.iht.com/articles/2005/06/10/opinion/edkrug.php
+http://www.iht.com/articles/2005/06/12/news/ravsaf.php
+http://www.iht.com/articles/2005/06/13/news/defect.php
+http://www.iht.com/articles/2005/06/15/news/troops.php
+http://www.iht.com/articles/2005/06/19/opinion/edbrooks.php
+http://www.iht.com/articles/2005/06/24/sports/tennis.php
+http://www.iht.com/articles/536614.html
+http://www.ihuntalberta.com/showdown.asp
+http://www.iia.edu.au/content/faq.html
+http://www.iiasa.ac.at/Research/LUC/Papers/gkh1/chap1.htm
+http://www.iidc.indiana.edu/irca/education/whoFor.html
+http://www.iie.com/publications/newsreleases/globaleconprospects3.htm
+http://www.iie.com/publications/papers/camdessus0202.htm
+http://www.iie.com/publications/papers/hufbauer0102.htm
+http://www.iie.com/publications/papers/lardy1003.htm
+http://www.iie.com/publications/papers/noland0202.htm
+http://www.iie.com/publications/papers/noland0203.htm
+http://www.iie.com/publications/papers/paper.cfm?ResearchID=354
+http://www.iie.com/publications/papers/paper.cfm?ResearchID=437
+http://www.iie.com/publications/papers/posen1002.htm
+http://www.iie.com/publications/pb/pb01-8.htm
+http://www.iie.org/Content/NavigationMenu/Research_Publications/Chicago1/person1.htm
+http://www.iied.org/mmsd/Bulletin/bulletin_16.html
+http://www.iif.edu/academicprograms/courselisting.htm
+http://www.iif.edu/academicprograms/dlpcourselisting.htm
+http://www.iihs.org/sr.htm
+http://www.iihs.org/vehicle_ratings/ictl/ictl.htm
+http://www.iiim.org/islamed3.html
+http://www.iinet.com.au/~scarffam/cpa.html
+http://www.iir.berkeley.edu/library/blg/unionorg.html
+http://www.iirobotics.com/webpages/robothistory.php
+http://www.iis.ee.ethz.ch/~neeri/soccer/GC95Mar12.html
+http://www.iisc.ernet.in/soi/ch.htm
+http://www.iisd.ca/cairo.html
+http://www.iisd.ca/population/ungass/30june.html
+http://www.iisd.ca/sd/iucn/wcc3/sdvol39num10e.html
+http://www.iisd.ca/sd/iucn/wcc3/sdvol39num13e.html
+http://www.iisd.ca/sd/sdmos/ymbvol110num1e.html
+http://www.iisd.ca/sd/wto-issues/july7am.html
+http://www.iiss.org/news-more.php?itemID=1209
+http://www.iiss.org/stratcomfree.php?scID=419
+http://www.iist.unu.edu/newrh/I/4/page.html
+http://www.iit.edu/departments/msed/msed_philosophy.html
+http://www.iit.edu/~iitcomdev/south_partners/bronzville1.html
+http://www.iit.edu/~osa/Handbook/FinePrint5.html
+http://www.iit.edu/~smile/ma9403.html
+http://www.iitfoundation.org/giving/
+http://www.iitt.org.uk/public/events/conference1.asp
+http://www.iittl.unt.edu/IITTL/about.htm
+http://www.ij.org/publications/liberty/2003/12_6_03_a.html
+http://www.ijc.com/ci1
+http://www.ijc.com/ci1/
+http://www.ijc.org/php/publications/html/osoyoos/osoyoos_cy00.htm
+http://www.ijc.org/php/publications/html/osoyoos/special_statement.htm
+http://www.ijc.org/php/publications/html/pubforum97/labour.html
+http://www.ijc.org/rel/agree/air.html
+http://www.ijccm.org/article.asp?issn=0972-5229;year=2004;volume=8;issue=2;spage=106;epage=110;aulast=Seppelt
+http://www.ijee.dit.ie/OnlinePapers/Interactive/Lundgren/Lundgren04.htm
+http://www.ijf.org/rule/rule_manual_04.php?Code=5
+http://www.ijri.org/teaching/teach.htm
+http://www.ikidney.com/iKidney/Community/Pro2Pro/Administrators/PearlsofWisdomUnityIntheRenalCareEnvironment.htm
+http://www.ikidney.com/iKidney/Community/Pro2Pro/Nurses/PearlsofWisdomUnityIntheRenalCareEnvironment.htm
+http://www.ikidney.com/iKidney/Community/StickySituation.htm
+http://www.ikidney.com/iKidney/Lifestyles/LifestyleTips/Hemodialysis/TheCriticalImportanceofControllingYourBloodPressure.htm
+http://www.ikidney.com/iKidney/Lifestyles/LifestyleTips/PeritonealDialysis/TheCriticalImportanceofControllingYourBloodPressure.htm
+http://www.ikmagazine.com/currentissue.asp
+http://www.ikosmos.com/wisdomeditions/mindscience/mindscience_ch3.htm
+http://www.ikosmos.com/wisdomeditions/mindscience/noetic_review.htm
+http://www.ilaea.org/iaea/careers.htm
+http://www.ilcaonline.org/modules.php?op=modload&name=News&file=article&sid=1688
+http://www.ilcaonline.org/print.php?sid=1688
+http://www.ilga.gov/legislation/publicacts/pubact90/acts/90-0676.html
+http://www.ilga.info/Information/Legal_survey/Asia_Pacific/malaysia.htm
+http://www.ilga.info/Information/Legal_survey/Asia_Pacific/supporting%20files/australia__new_south_wales_.htm
+http://www.ilga.info/Information/Legal_survey/africa/supporting%20files/yan_daudu_and_proud__same.htm
+http://www.ilga.info/Information/Legal_survey/europe/hungary.htm
+http://www.ilga.info/Information/Legal_survey/ilga_world_legal_survey%20introduction.htm
+http://www.ilikelasagna.com/blog/2003_02_01_archive.html
+http://www.ilir.uiuc.edu/faculty/papers.html
+http://www.ilizarov.org.uk/stress.htm
+http://www.illegal-art.org/
+http://www.illegal-art.org/index2.html
+http://www.illinoisbar.org/Association/014-16e.htm
+http://www.illinoisbiz.biz/com/ghta/2004_winners.html
+http://www.illinoisfms.org/BethRu2.html
+http://www.illinoisleader.com/news/newsview.asp?c=2262
+http://www.illinoislegalaid.org/index.cfm?fuseaction=home.dsp_content&contentID=182
+http://www.illinoislegalaid.org/index.cfm?fuseaction=home.dsp_content&contentID=1949
+http://www.illinoislegalaid.org/index.cfm?fuseaction=home.dsp_content&contentID=336
+http://www.illinoisloop.org/
+http://www.illinoisloop.org/brain.html
+http://www.illinoisloop.org/desks.html
+http://www.illinoislottery.com/subsections/news03.htm
+http://www.illinoispolicyinstitute.org/blog/archives/2005/04/index.php
+http://www.illinoistrialpractice.com/
+http://www.illuminati-news.com/e-books/morals-dogma/apikeintro.html
+http://www.ilo.org/dyn/dwresources/iebrowse.home
+http://www.ilo.org/dyn/dwresources/iebrowse.page?p_lang=en&p_ieresource_id=626
+http://www.ilo.org/ilolex/cgi-lex/convde.pl?C146
+http://www.ilo.org/public/english/bureau/inf/magazine/47/globit.htm
+http://www.ilo.org/public/english/bureau/inf/magazine/53/cambodia.htm
+http://www.ilo.org/public/english/bureau/inf/pr/2004/35.htm
+http://www.ilo.org/public/english/bureau/inf/pr/2005/32.htm
+http://www.ilo.org/public/english/bureau/leg/agreements/switz.htm
+http://www.ilo.org/public/english/dialogue/ifpdial/la/gp/quebec.htm
+http://www.ilo.org/public/english/dialogue/sector/sectors/educat.htm
+http://www.ilo.org/public/english/dialogue/sector/techmeet/jmps98/jmpsrep1.htm
+http://www.ilo.org/public/english/dialogue/sector/techmeet/smc97/smcrep.htm
+http://www.ilo.org/public/english/employment/gems/eeo/guide/usa/eeeoc.htm
+http://www.ilo.org/public/english/employment/gems/eeo/law/mexico/inst_sls.htm
+http://www.ilo.org/public/english/employment/recon/crisis/conf/empwork.htm
+http://www.ilo.org/public/english/employment/recon/eiip/countries/asia/india.htm
+http://www.ilo.org/public/english/employment/recon/eiip/news/
+http://www.ilo.org/public/english/employment/skills/recomm/publ/pdf_04.htm
+http://www.ilo.org/public/english/employment/skills/recomm/topic_i/t26_ilo.htm
+http://www.ilo.org/public/english/employment/skills/recomm/topic_i/t7_ilo.htm
+http://www.ilo.org/public/english/employment/skills/training/casest/laiki.htm
+http://www.ilo.org/public/english/employment/strat/publ/iddp8.htm
+http://www.ilo.org/public/english/region/afpro/mdtharare/conf/recentevents.htm
+http://www.ilo.org/public/english/region/eurpro/geneva/activities/ac/ac_02.htm
+http://www.ilo.org/public/english/region/eurpro/london/projects/winwo.htm
+http://www.ilo.org/public/english/standards/norm/whatare/stndards/indrel.htm
+http://www.ilo.org/public/english/standards/relm/ilc/ilc87/com-chid.htm
+http://www.ilo.org/public/english/support/lib/dblist.htm
+http://www.ilo.org/public/english/support/publ/revue/articles/ank97-3.htm
+http://www.ilo.org/public/english/tribunal/fulltext/1277.htm
+http://www.ilocarib.org.tt/meetings/lmis_sem/
+http://www.ilove.co.uk/info/ilove-gb-en-uk/catalogue/england/he-seeking-her-hamish69-1985.html
+http://www.ilove.co.uk/info/ilove-gb-en-uk/catalogue/england/he-seeking-her-peter787-1969.html
+http://www.ilove.co.uk/info/ilove-gb-en-uk/catalogue/england/huddersfield/he-seeking-her-johnyfive-1958.html
+http://www.ilovenapa.com/visitors_activities_home.php
+http://www.ilovephilosophy.com/phpbb/viewtopic.php?p=1620853
+http://www.ilr.cornell.edu/trianglefire/texts/newspaper/cst_032611.html?location=Fire!
+http://www.ilr.tu-berlin.de/WKA/windnet/usw01.html
+http://www.ilrc-trico.org/ilrcnewsltrs/ilrcnews4Q2001.html
+http://www.ilrg.com/forms/realestate-purchase-co.html
+http://www.ilrg.com/forms/realestate-purchase.html
+http://www.ilri.org/html/trainingMat/policy_X5547e/x5547e0z.htm
+http://www.ilsr.org/ecotax/grntaxfn.html
+http://www.ilsr.org/pubs/pubsrules.html
+http://www.ilstu.edu/depts/police/summary/2001/mar19_25.htm
+http://www.ilwu19.com/history/the_ilwu_story/international_solidarity.htm
+http://www.ima.umn.edu/newsltrs/updates/summer03/
+http://www.imacdigest.com/2000rep/p79-84.html
+http://www.image-asia.com/events.htm
+http://www.imagefv.org/services_salons.htm
+http://www.imagematics.com/ProductPage.htm
+http://www.imagens-terra.com/travel/best-guides.htm
+http://www.imageproshop.com/terms.asp
+http://www.imagesjournal.com/issue01/features/wayne2.htm
+http://www.imagesjournal.com/issue10/reviews/blackchristmas/text.htm
+http://www.imaginaryplanet.net/essays/travel/albania2/leaving1.html
+http://www.imagination-institute.com/Martin%20Brofman.htm
+http://www.imaging-resource.com/PRODS/ES10/ES10A.HTM
+http://www.imaging-resource.com/SOFT/SMPE/SMPE.HTM
+http://www.imagingnotes.com/marapr02/murphy.htm
+http://www.imakenews.com/fulbright/e_article000293019.cfm
+http://www.imakenews.com/fulbright/e_article000304348.cfm
+http://www.imakenews.com/psaanews/index000050690.cfm?x=b11,0,w
+http://www.imakenews.com/ptcexpress/e_article000310857.cfm?x=b3G28WM,0,w
+http://www.imao.us/archives/000634.html
+http://www.imaps.org/imaps2004/pdcs_sunday.htm
+http://www.imarest.org/emarine/issue4.htm
+http://www.imarest.org/inews/1998dec/Default.htm
+http://www.imat.ca/emma_sponsorship.shtml
+http://www.imc-usa.org/cgi-bin/cfm/WeeklyDigest.cfm?WDid=108
+http://www.imc.cas.cz/en/imc/dop/
+http://www.imc.co.uk/our_standards/statement_best_practice.php
+http://www.imcworldwide.org/loc_indo-tim012305.shtml
+http://www.imdb.co.uk/title/tt0405159/
+http://www.imdb.com/
+http://www.imdb.com/Newsletter/newsletter-15
+http://www.imdb.com/Title?0375611
+http://www.imdb.com/name/nm0000577/
+http://www.imdb.com/name/nm0001774/
+http://www.imdb.com/name/nm0090124/
+http://www.imdb.com/name/nm0647705/
+http://www.imdb.com/name/nm0667734/news
+http://www.imdb.com/name/nm0787715/
+http://www.imdb.com/news/sb/
+http://www.imdb.com/news/sb/2005-03-18
+http://www.imdb.com/news/wenn/2005-04-18
+http://www.imdb.com/news/wenn/2005-06-24/
+http://www.imdb.com/title/tt0008827/
+http://www.imdb.com/title/tt0031381/fullcredits
+http://www.imdb.com/title/tt0031381/usercomments
+http://www.imdb.com/title/tt0034167/
+http://www.imdb.com/title/tt0036342/quotes
+http://www.imdb.com/title/tt0043274/dvd
+http://www.imdb.com/title/tt0047673/
+http://www.imdb.com/title/tt0047849/
+http://www.imdb.com/title/tt0060196/
+http://www.imdb.com/title/tt0061209/
+http://www.imdb.com/title/tt0064116/
+http://www.imdb.com/title/tt0074084/
+http://www.imdb.com/title/tt0074254/
+http://www.imdb.com/title/tt0076759/quotes
+http://www.imdb.com/title/tt0076984/
+http://www.imdb.com/title/tt0078902/
+http://www.imdb.com/title/tt0083851/
+http://www.imdb.com/title/tt0085334/
+http://www.imdb.com/title/tt0086979/usercomments
+http://www.imdb.com/title/tt0087843/
+http://www.imdb.com/title/tt0089881/
+http://www.imdb.com/title/tt0092099/quotes
+http://www.imdb.com/title/tt0093209/usercomments
+http://www.imdb.com/title/tt0093638/
+http://www.imdb.com/title/tt0094347/usercomments
+http://www.imdb.com/title/tt0097336/usercomments
+http://www.imdb.com/title/tt0098844/
+http://www.imdb.com/title/tt0106341/combined
+http://www.imdb.com/title/tt0107034/
+http://www.imdb.com/title/tt0108778/usercomments
+http://www.imdb.com/title/tt0109642/
+http://www.imdb.com/title/tt0109906/usercomments
+http://www.imdb.com/title/tt0115376/usercomments
+http://www.imdb.com/title/tt0116913/
+http://www.imdb.com/title/tt0117705/usercomments
+http://www.imdb.com/title/tt0118571/
+http://www.imdb.com/title/tt0120586/
+http://www.imdb.com/title/tt0120915/
+http://www.imdb.com/title/tt0128239/usercomments
+http://www.imdb.com/title/tt0151804/quotes
+http://www.imdb.com/title/tt0160289/
+http://www.imdb.com/title/tt0167261/
+http://www.imdb.com/title/tt0190590/quotes
+http://www.imdb.com/title/tt0208654/
+http://www.imdb.com/title/tt0209144/
+http://www.imdb.com/title/tt0221218/
+http://www.imdb.com/title/tt0233200/
+http://www.imdb.com/title/tt0238784/
+http://www.imdb.com/title/tt0243017/usercomments
+http://www.imdb.com/title/tt0243655/
+http://www.imdb.com/title/tt0265666/maindetails
+http://www.imdb.com/title/tt0266697/
+http://www.imdb.com/title/tt0268397/usercomments
+http://www.imdb.com/title/tt0280760/usercomments
+http://www.imdb.com/title/tt0286499/
+http://www.imdb.com/title/tt0294357/
+http://www.imdb.com/title/tt0307453/combined
+http://www.imdb.com/title/tt0316356/
+http://www.imdb.com/title/tt0320808/combined
+http://www.imdb.com/title/tt0326900/combined
+http://www.imdb.com/title/tt0338013/
+http://www.imdb.com/title/tt0338290/usercomments
+http://www.imdb.com/title/tt0339707/usercomments
+http://www.imdb.com/title/tt0350258/usercomments
+http://www.imdb.com/title/tt0363988/
+http://www.imdb.com/title/tt0364828/
+http://www.imdb.com/title/tt0366629/
+http://www.imdb.com/title/tt0368447/
+http://www.imdb.com/title/tt0372784/
+http://www.imdb.com/title/tt0375063/combined
+http://www.imdb.com/title/tt0375063/quotes
+http://www.imdb.com/title/tt0376541/
+http://www.imdb.com/title/tt0387360/
+http://www.imdb.com/title/tt0397065/
+http://www.imdb.com/title/tt0398679/
+http://www.imdb.com/title/tt0405980/
+http://www.imdb.com/title/tt0418819/combined
+http://www.imdb.com/title/tt0424774/
+http://www.imdb.com/title/tt0424774/combined
+http://www.imdb.com/title/tt0424774/usercomments?start=10
+http://www.imdb.com/title/tt0452674/
+http://www.imdiversity.com/Villages/African/Daily_News.asp
+http://www.imdiversity.com/Villages/Asian/Village_Index_List.asp
+http://www.imediaconnection.com/content/1927.asp
+http://www.imediaconnection.com/content/5412.asp
+http://www.imediaconnection.com/content/6146.asp
+http://www.iment.com/maida/family/
+http://www.imergentinc.com/testimonials.html
+http://www.imf.org/external/np/cm/2000/092500.htm
+http://www.imf.org/external/np/cm/2001/111801.htm
+http://www.imf.org/external/np/exr/facts/asia.htm
+http://www.imf.org/external/np/exr/facts/surv.htm
+http://www.imf.org/external/np/exr/ib/2000/041200.htm
+http://www.imf.org/external/np/exr/ib/2000/062600.htm
+http://www.imf.org/external/np/loi/1999/022299.htm
+http://www.imf.org/external/np/loi/2003/mng/01/
+http://www.imf.org/external/np/loi/2004/bgr/01/
+http://www.imf.org/external/np/loi/2004/geo/01/
+http://www.imf.org/external/np/loi/2004/irq/01/
+http://www.imf.org/external/np/ms/2000/070300.htm
+http://www.imf.org/external/np/ms/2002/102802.htm
+http://www.imf.org/external/np/ms/2005/061305.htm
+http://www.imf.org/external/np/omd/2004/eng/041904.htm
+http://www.imf.org/external/np/pdr/sdrm/2002/090402.htm
+http://www.imf.org/external/np/rosc/cmr/banking.htm
+http://www.imf.org/external/np/sec/pr/2000/pr0054.htm
+http://www.imf.org/external/np/speeches/2004/032304a.htm
+http://www.imf.org/external/np/speeches/2004/082504.htm
+http://www.imf.org/external/np/speeches/2004/100404.htm
+http://www.imf.org/external/np/speeches/2004/111104.htm
+http://www.imf.org/external/np/speeches/2004/120604.htm
+http://www.imf.org/external/np/speeches/2004/121504.htm
+http://www.imf.org/external/np/tr/1998/tr980921.htm
+http://www.imf.org/external/np/tr/2003/tr030320.htm
+http://www.imf.org/external/np/tr/2003/tr030916.htm
+http://www.imf.org/external/np/tr/2004/tr040423a.htm
+http://www.imf.org/external/np/tr/2005/tr050511.htm
+http://www.imf.org/external/np/vc/2003/121503.htm
+http://www.imf.org/external/pubs/ft/fandd/1999/12/tapscott.htm
+http://www.imf.org/external/pubs/ft/issues/issues23/
+http://www.imf.org/external/pubs/ft/sd/index.asp?decision=EBM/02/94_2
+http://www.imf.org/external/pubs/ft/weo/1999/01/data/
+http://www.imf.org/external/pubs/ft/weo/2000/01/data/
+http://www.imglobal.com/coverage/
+http://www.imglobal.com/coverage/patriot/
+http://www.imglobal.com/coverage/patriot_extreme/
+http://www.imisite.org/advocacy.php
+http://www.imj.ie/news_detail.php?nNewsId=2629&nVolId=101
+http://www.imj.ie/news_detail.php?nPrint=1&nNewsId=2629&nVolId=101
+http://www.immanuelbible.net/outreach/understanding_homosexuality.htm
+http://www.immd.gov.hk/ehtml/contactus.htm
+http://www.immediatefuture.co.uk/364
+http://www.immi.gov.au/study/working/
+http://www.immigrantgarden.com/cast.htm
+http://www.immigration.ca/permres-citizenship-requirements.asp
+http://www.immigration.ca/permres-gii-election.asp
+http://www.immigrationboards.com/old/index.php?forum_id=1&topic_id=004430
+http://www.imminet.com/about/about_industry.htm
+http://www.imminst.org/forum/index.php?act=ST&f=67&t=3499&s=
+http://www.imminst.org/forum/index.php?act=ST&f=69&t=4947&s=
+http://www.immunesupport.com/Library/showarticle.cfm/ID/4906/HealthWatch/HealthWatch-Treatment-Guide-2003
+http://www.immunesupport.com/library/showarticle.cfm/ID/4620/e/1/T/CFIDS_FM/
+http://www.imnotsorry.net/FAQ.htm
+http://www.imnotsorry.net/stacy.htm
+http://www.imo.ie/
+http://www.imo.ie/view_categories.php?cat_id=126&doc_id=3736
+http://www.imo.ie/view_categories.php?cat_id=15&doc_id=3717
+http://www.imo.ie/view_categories.php?cat_id=536&doc_id=3390&sCat=536
+http://www.imo.ie/view_categories.php?cat_id=560&doc_id=3782
+http://www.imo.ie/view_categories.php?cat_id=568&doc_id=3851
+http://www.imo.ie/view_categories.php?cat_id=568&doc_id=3853
+http://www.imo.ie/view_categories.php?cat_id=572&doc_id=3875
+http://www.imo.org/Conventions/mainframe.asp?topic_id=251
+http://www.imo.org/InfoResource/mainframe.asp?topic_id=835
+http://www.imonline.co.uk/movinghome/guides/conveyancing/acting_for_the_buyer/completion.asp
+http://www.imonline.co.uk/movinghome/guides/conveyancing/acting_for_the_buyer/pre-contract.asp
+http://www.imonline.co.uk/movinghome/guides/conveyancing/acting_for_the_seller/pre-contract.asp
+http://www.imonthe.net/66wnbc/engineer.htm
+http://www.impact-sharing.com/impactsharing/PastEvents
+http://www.impactfactory.com/p/customer_facing_skills_training/snacks_170-2103-63735.html
+http://www.impactgames.biz/newreleases/
+http://www.impactlab.com/modules.php?name=News&file=article&sid=4737
+http://www.impactlab.com/modules.php?name=News&file=print&sid=4737
+http://www.impactpress.com/articles/aprmay04/moore4504.html
+http://www.impactpress.com/articles/aprmay99/newleader4599.html
+http://www.impactpress.com/articles/decjan04/democrats120104.html
+http://www.impactpress.com/articles/febmar99/musicr2399.html
+http://www.impactrm.com/html/airprod.html
+http://www.impactscan.org/
+http://www.impawards.com/
+http://www.impeach-andrewjohnson.com/10RemainderOfAJTermLife/vii-11.htm
+http://www.imperial-software.com/pr7.22.02.html
+http://www.imperial.ac.uk/P2025.htm
+http://www.imperial.ac.uk/P2349.htm
+http://www.imperial.ac.uk/P5155.htm
+http://www.imperial.ac.uk/research/theory/about/useful/eating.htm
+http://www.imperialinnovations.co.uk/news/news2002/innovation_14_05_02.asp
+http://www.imperialoil.ca/Canada-English/Products/Fuels/Road_Transport/PS_F_RT_RoadTransportTipBeforeGo.asp
+http://www.imperialtea.com/about/RecentPress1.asp
+http://www.imperialteagarden.com/blog1.html
+http://www.imperiumjournal.com/0pages/40003.html
+http://www.impetuous-epicure.com/archives/2004_10.html
+http://www.impliedbydesign.com/web-design-clients.html
+http://www.impress.com.au/albinism.htm
+http://www.improvementsart.com/perl/frSearch?collectionID=3190&sortType=MostRelevant&page=6
+http://www.improvresourcecenter.com/mb/showthread.php?s=&threadid=1982
+http://www.ims.org/projects/project_info/irma.html
+http://www.ims.org/projects/project_info/mission.html
+http://www.ims.org/projects/project_info/step_nc.html
+http://www.imserba.com/DownloadsPlus+index-req-viewdownloaddetails-lid-3515-ttitle-Oil_Rig.html
+http://www.imswebtips.com/issue20top1.htm
+http://www.imuis.uiowa.edu/cic/infolink/counseling.shtml
+http://www.imuis.uiowa.edu/services/ges/policies/3.shtml
+http://www.imuna.org/c2c/chapt4.html
+http://www.in-cites.com/journals/EcologyLetters.html
+http://www.in-forum.com/specials/savingnd/index2.cfm?page=chat_inside
+http://www.in.gov/dor/contact/district.html
+http://www.in.gov/dor/contact/indy.html
+http://www.in.gov/judiciary/rules/prof_conduct/
+http://www.in.gov/legislative/bills/2005/IN/IN1025.1.html
+http://www.inanews.com/careers/viewjob.html
+http://www.inarinpaliskunnat.org/rights.html
+http://www.inboxrobot.com/news/DavidDreier
+http://www.inboxrobot.com/news/StateFarmInsurance
+http://www.inboxrobot.com/news/WinstonCup
+http://www.inbusinesslasvegas.com/2005/06/24/smbizpro.html
+http://www.inc.com/articles/2000/02/17239.html
+http://www.inc.com/articles/2004/03/7dayweekend.html
+http://www.inc.com/businessfinance/
+http://www.inc.com/magazine/19971015/1473.html
+http://www.inc.com/magazine/19990401/765.html
+http://www.inc.com/magazine/20000401/18114.html
+http://www.inc.com/magazine/20001101/20915.html
+http://www.inc.com/magazine/20010401/22307.html
+http://www.inc.com/magazine/20010615/22800.html
+http://www.inc.com/magazine/20030301/25211.html
+http://www.inc.com/magazine/20030701/25643.html
+http://www.inc.com/magazine/20040601/nbrodsky.html
+http://www.inc.com/magazine/20040801/optimist.html
+http://www.inc.com/magazine/20041015/why-size-matters.html
+http://www.inc.com/magazine/20050101/eoty-rutan.html
+http://www.inc.com/magazine/20050501/bestcities.html
+http://www.inc.com/resources/finance/articles/20041101/venturecapital.html
+http://www.incaf.com/catalog.php
+http://www.incent.com/pubs/interactions.html
+http://www.inch-aweigh.com/pilatescraze.htm
+http://www.inchem.org/documents/cicads/cicads/cicad47.htm
+http://www.inchem.org/documents/cicads/cicads/cicad50.htm
+http://www.inchem.org/documents/ehc/ehc/ehc086.htm
+http://www.incidentcontrol.com/firethanks.html
+http://www.incloseup.co.uk/reports/gorillas&palmtrees.htm
+http://www.inclusive.co.uk/catalog/touchmon_flat.shtml
+http://www.inclusivechurch.net/news.html?id=62
+http://www.incog.org/City%20of%20Tulsa%20Zoning%20Code/CH_06.htm
+http://www.incoming.com/queuetips/pages/200201/qt02011105.aspx?SelectedNode=QueueTips
+http://www.incredible-adventures.com/coldfinger.html
+http://www.incrediblechange.com/staying.html
+http://www.incremax.com/?clid=76&cid=373&cmid=107
+http://www.incsoftware.co.uk/contact.html
+http://www.ind.homeoffice.gov.uk/ind/en/home/0/preventing_illegal/avoiding_racial_discrimination.html
+http://www.indafusion.co.uk/
+http://www.indax.com/findnpla.html
+http://www.indcatholicnews.com/footm.html
+http://www.indcjournal.com/
+http://www.indcjournal.com/archives/001441.php
+http://www.indeconomist.com/151104_sfl.html
+http://www.indeed.com/jobs?q=&l=Detroit%2C+MI&start=10
+http://www.indeed.com/jobs?q=&l=Detroit%2C+MI&start=20
+http://www.indeed.com/jobs?q=+Director+of+Product+PRICING&l=Seattle%2C+WA&rb=1
+http://www.indegayforum.org/authors/dahl/dahl25.html
+http://www.indegayforum.org/authors/swayne/swayne7.html
+http://www.indepen.co.uk/weeklynews.html
+http://www.independent-media.tv/
+http://www.independent-media.tv/gtheme.cfm?ftheme_id=54&fdate_posted=%7Bts%20'2004-04-27%2000:00:00'%7D
+http://www.independent-media.tv/gtheme.cfm?ftheme_id=54&fdate_posted=%7Bts%20'2004-04-28%2000:00:00'%7D
+http://www.independent-media.tv/index.cfm
+http://www.independent-media.tv/item.cfm?fmedia_id=10232&fcategory_desc=Under%20Reported
+http://www.independent-media.tv/item.cfm?fmedia_id=10312&fcategory_desc=Election%202004
+http://www.independent-media.tv/item.cfm?fmedia_id=10354&fcategory_desc=Under%20Reported
+http://www.independent-media.tv/item.cfm?fmedia_id=1979&fcategory_desc=Under%20Reported
+http://www.independent-media.tv/item.cfm?fmedia_id=3617&fcategory_desc=Under%20Reported
+http://www.independent-media.tv/item.cfm?fmedia_id=7279&fcategory_desc=Promoted%20Materials
+http://www.independent-media.tv/itemprint.cfm?fmedia_id=10354&fcategory_desc=Under%20Reported
+http://www.independent-media.tv/itemprint.cfm?fmedia_id=9183&fcategory_desc=Promoted%20Materials
+http://www.independent.org/aboutus/saying.asp
+http://www.independent.org/newsroom/article.asp?ID=69
+http://www.independent.org/newsroom/article.asp?id=1465
+http://www.independent.org/publications/books/book_summary.asp?bookID=32
+http://www.independent.org/tii/content/pubs/review/books/TIR32_McDougall.html
+http://www.independentinspectors.org/
+http://www.independentjudiciary.com/issues/
+http://www.independentliving.co.uk/financial/jobseeker.html
+http://www.independentliving.co.uk/financial/severe.html
+http://www.independentliving.co.uk/manual-handling.html
+http://www.independentliving.com/
+http://www.independentliving.org/docs2/enilfuture.html
+http://www.independentliving.org/docs6/martinez2003.html
+http://www.independentsector.org/issues/buildingvalue/opsupport.html
+http://www.independenttraveler.com/resources/article.cfm?AID=432&category=11
+http://www.independentvoice.com/sub/ssp.html
+http://www.indepundit.com/archive2/2004/11/rules_of_engage_1.html
+http://www.inderscience.com/filter.php?aid=2535
+http://www.inderscience.com/papers/submissions.php
+http://www.indexbooks.co.uk/complete.html
+http://www.indexmagazine.com/interviews/aphex_twin.shtml
+http://www.indexonline.org/en/news/articles/2005/1/nepal-king-silences-his-own-country.shtml
+http://www.india-seminar.com/2000/491/491%20s.k.%20bhowmik.htm
+http://www.india.moog.com/noq/_news__c284t3529/
+http://www.indiacgny.org/php/showContent.php?linkid=29
+http://www.indiadaily.com/editorial/11-19c-04.asp
+http://www.indiadaily.com/editorial/1610.asp
+http://www.indiadaily.com/editorial/3280.asp
+http://www.indiaday.org/new-development3.htm
+http://www.indiafm.com/interviews/05/vipulwaqt/index.shtml
+http://www.indiahabitat.org/newarrivals/newarrivals_20thjune2k5.html
+http://www.indiainfoline.com/comp/alst/dr00.html
+http://www.indiainfoline.com/lega/feat/cran.html
+http://www.indiainfoline.com/lega/feat/pios.html
+http://www.indiainfoline.com/nevi/mact.html
+http://www.indiainfoline.com/nevi/stst1.html
+http://www.indiainfoline.com/nevi/wadi/
+http://www.indiainfoline.com/nevi/wave.html
+http://www.indiainfoline.com/view/070200.html
+http://www.indiainfoline.com/view/2703.html
+http://www.indiainternets.com/
+http://www.indialantic.com/
+http://www.indialantic.com/contents/news_let/2004/Rec02_04/Rec02_04.htm
+http://www.indialantic.com/contents/news_let/2004/Rec06_04/Rec06_04.htm
+http://www.indialantic.com/contents/news_let/Rec06_99/rec06_99.htm
+http://www.indiana.edu/~ancmed/foundations.htm
+http://www.indiana.edu/~bulletin/iub/grad/2000-2002/speech.html
+http://www.indiana.edu/~csrc/perl2.html
+http://www.indiana.edu/~famlygrf/units/decisions.html
+http://www.indiana.edu/~iaunrc/caweb.html
+http://www.indiana.edu/~idt/shortpapers/documents/design_culture_smith.html
+http://www.indiana.edu/~iubnurse/home/course/description.html
+http://www.indiana.edu/~jah/mexico/jdurand.html
+http://www.indiana.edu/~kettlab/ellen/abstracts.html
+http://www.indiana.edu/~kines/activity_dance.html
+http://www.indiana.edu/~league/1944.htm
+http://www.indiana.edu/~letrs/vwwp/norton/mob.html
+http://www.indiana.edu/~letrs/vwwp/schreiner/closer.html
+http://www.indiana.edu/~libsalc/african/awards/commonwealth.html
+http://www.indiana.edu/~phil/ByLaws.htm
+http://www.indiana.edu/~pietsch/emeritusiu.html
+http://www.indiana.edu/~pietsch/split-brain.html
+http://www.indiana.edu/~sfa/types_aid/ws.html
+http://www.indiana.edu/~sscr/summaries/aas1999/aas_szonyi.html
+http://www.indiana.edu/~west/grant.shtml
+http://www.indiana.edu/~wts/pamphlets/personal_statement.shtml
+http://www.indianacharters.org/faq.asp
+http://www.indianamasons.org/imoanti/isittrue/chap5.htm
+http://www.indianamilitary.org/WakemanHospital/Donations/Donations-11-22-1946.htm
+http://www.indiananurses.org/government/2004_leg_updates/senate_current.htm
+http://www.indiananurses.org/government/2004_leg_updates/senate_current_print.htm
+http://www.indianasoccerleague.com/Policies%20and%20Procedures.htm
+http://www.indianchild.com/child_development.htm
+http://www.indianchild.com/friendship.htm
+http://www.indianchristianity.org/roman.html
+http://www.indiancountry.com/content.cfm?id=1091217296
+http://www.indianembassy.org/indusrel/india_us/nehru_congress_Oct_13_1949.htm
+http://www.indianembassy.org/indusrel/india_us/rao_congress_May_18_1994.htm
+http://www.indianembassy.org/new/NewDelhiPressFile/Kargil_July_1999/Dealing_Pakistan_July_26_1999.html
+http://www.indianembassy.org/policy/Disarmament/technology_armsrace.htm
+http://www.indianembassy.org/policy/Economy/budget-2.htm
+http://www.indianembassy.org/policy/WTO/wto_india/issue_india_98.htm
+http://www.indianexpress.com/columnists/full_column.php?content_id=58454
+http://www.indianexpress.com/columnists/suni/20011124.html
+http://www.indianexpress.com/flair/20010805/1e.html
+http://www.indianexpress.com/full_story.php?content_id=52177
+http://www.indianexpress.com/full_story.php?content_id=61517
+http://www.indianexpress.com/full_story.php?content_id=62927
+http://www.indianexpress.com/full_story.php?content_id=64128
+http://www.indianexpress.com/print.php?content_id=64116
+http://www.indianfoundry.com/excellence/
+http://www.indianfriendsearch.com/
+http://www.indianngos.com/corporate/hongkongconference.htm
+http://www.indianpediatrics.net/april2001/april-332-339.htm
+http://www.indianpediatrics.net/sept2001/sept-1056-1058.htm
+http://www.indianrailways.gov.in/railway/deptts/stores/min-spl-cos.htm
+http://www.indians.org/welker/crazyhor.htm
+http://www.indianstreetbridge.com/faq/
+http://www.indiantelevision.com/headlines/y2k2/mar/mar49.htm
+http://www.indiantelevision.com/headlines/y2k2/may/may39.htm
+http://www.indiantelevision.com/headlines/y2k5/feb/feb23.htm
+http://www.indiantelevision.com/interviews/rajnayak.htm
+http://www.indiantelevision.com/perspectives/y2k4/tv_films.htm
+http://www.indiantelevision.com/tvlinx/y2k4/dec/dec2.htm
+http://www.indiaonestop.com/home2.htm
+http://www.indiaoppi.com/guipage4.htm
+http://www.indiaparenting.com/articles/data/art09_006.shtml
+http://www.indiaparenting.com/articles/data/art09_014.shtml
+http://www.indiaparenting.com/faqs/speech_ent/delayed_speech.shtml
+http://www.indiaplaza.com/catalog/books+software/books_catalog.asp?catid=1659&subcatid=107&majorcat=books&subcat=books&place=US
+http://www.indiapolicy.org/lists/india_policy/2001/Jul/msg00007.html
+http://www.indiapolicy.org/lists/india_policy/2001/Jul/msg00010.html
+http://www.indiapolicy.org/lists/india_policy/2001/Jul/msg00016.html
+http://www.indiapost.org/IMTList1.html
+http://www.indiaproperties.com/research/articles/eco-friendly/eco-living.asp
+http://www.indiatraveltimes.com/weather/
+http://www.indie-rpgs.com/articles/27/
+http://www.indie-rpgs.com/reviews/28/
+http://www.indiebride.com/essays/macadam/
+http://www.indielondon.co.uk/film/criminal_reillyQ&A.html
+http://www.indiescene.net/archives/2004_07.html
+http://www.indieville.net/festivals/b-r2004/MARCH7WEEK.html
+http://www.indiewire.com/biz/alpha33.html
+http://www.indiewire.com/people/alpha13.html
+http://www.indigenouspeople.net/crazyhor.htm
+http://www.indigodev.com/Handbook.html
+http://www.indigogirls.com/lyrics/byalbum/indigo.html
+http://www.indigogirls.com/lyrics/byalbum/swamp.html
+http://www.indigorose.com/forums/showthread.php?t=9765
+http://www.indigovision.com/investorrelations.htm
+http://www.indium.com/bottomline/openworkshops.php
+http://www.indo-us.org/news.htm
+http://www.indonesia-ottawa.org/economy/INCOMETAX/pph08.htm
+http://www.indoor-air-quality.org/Certification-Courses/Course-Descriptions/cmrs-details.htm
+http://www.indranet.com/arts/lcds/facemask2.html
+http://www.indtravel.com/bang/places.html
+http://www.indusscitech.net/
+http://www.industriallabs.net/Customer%20Service%20Support/customer.htm
+http://www.industriallogic.com/papers/learning.html
+http://www.industrialpress.com/topics.asp?Topic=MANU
+http://www.industrialrelationscentre.com/infobank/articles/the_seven_habits_of_successful_mediators.htm
+http://www.industrialrelationscentre.com/newsletters/april2005/
+http://www.industrialsafetytalk.com/news/sve/sve101.html
+http://www.industry.gov.au/content/itrinternet/cmscontent.cfm?ObjectID=44EB0823-308E-4613-91A645017B0DDC5C
+http://www.industrypages.com/artman/publish/Industry_News_3502.stm
+http://www.industryweek.com/CurrentArticles/asp/articles.asp?ArticleID=855
+http://www.industryweek.com/CurrentArticles/asp/articles.asp?ArticleId=1348
+http://www.industryweek.com/CurrentArticles/asp/articles.asp?ArticleId=467
+http://www.industryweek.com/DailyPage/newsitem.asp?id=150
+http://www.industryweek.com/Events/Response/register.asp?Ref=EVARCH
+http://www.indybay.org/news/2004/08/1691169.php
+http://www.indyeastend.com/cgi-bin/indep/news.cgi?action=article&category=Jerry&id=6007
+http://www.indygolf.com/Articles/PM13.html
+http://www.indymedia.nl/nl/2001/11/797.shtml
+http://www.indymedia.org.uk/en/2003/07/274625.html
+http://www.indymedia.org.uk/en/2004/10/298702.html
+http://www.indymedia.org.uk/en/2004/10/300266.html
+http://www.indymedia.org.uk/en/2005/02/304722.html
+http://www.indymedia.org.uk/en/2005/03/307433.html
+http://www.indymedia.org.uk/en/2005/04/308640.html
+http://www.indymedia.org.uk/en/2005/04/309840.html
+http://www.indymedia.org.uk/en/2005/06/312762.html
+http://www.indymedia.org.uk/en/2005/06/314214.html
+http://www.indymedia.org.uk/en/regions/cambridge/2004/02/286118.html
+http://www.indymedia.org.uk/en/regions/cambridge/2005/06/314766.html
+http://www.indymedia.org.uk/en/regions/london/2005/04/308640.html
+http://www.indymedia.org.uk/en/regions/london/2005/06/314766.html
+http://www.indymedia.org.uk/en/regions/manchester/2005/02/304722.html
+http://www.indymedia.org.uk/en/regions/oxford/2004/08/295904.html
+http://www.indymedia.org.uk/en/regions/oxford/topics/indymedia/
+http://www.indymedia.org.uk/en/regions/oxford/topics/socialstruggles/
+http://www.indymedia.org.uk/en/regions/scotland/2005/06/312762.html
+http://www.indymedia.org/en/2004/10/111999.shtml
+http://www.indystar.com/articles/5/006738-6575-092.html
+http://www.indystar.com/articles/6/209263-3146-255.html
+http://www.indyweek.com/durham/2003-12-03/porch.html
+http://www.ined.fr/bdd/projrech/saisie/am_unite_ps.php?idunite=U08
+http://www.ineesite.org/standards/msee.asp
+http://www.inequality.org/lardneressay2.html
+http://www.inequality.uiowa.edu/?whatpage=news&whatID=13
+http://www.inesap.org/bulletin20/bul20art20.htm
+http://www.inesap.org/bulletin21/bul21art15.htm
+http://www.inesap.org/bulletin21/bul21art30.htm
+http://www.inetnews.org/news/article.asp?id=3112
+http://www.inetours.com/New_York/Pages/NYC_Hotels.html
+http://www.inetworld.net/bosworth/tracks.htm
+http://www.inexpressible.com/e232-238.html
+http://www.inf.uniroma3.it/calendar/gd97/gd97scipro.html
+http://www.infantry-sector.com/
+http://www.infashionkids.com/infanttoys.html
+http://www.infc.ulst.ac.uk/~dave/trees/tree4/
+http://www.infectioncontroltoday.com/articles/281topics.html
+http://www.infectiousdiseasenews.com/200403/aids.asp
+http://www.infed.org/archives/e-texts/barnett_club_and_church.htm
+http://www.infed.org/archives/e-texts/ippr_passing_time.htm
+http://www.infed.org/archives/e-texts/owen_new_lanark.htm
+http://www.infed.org/archives/e-texts/robertson_clubs.htm
+http://www.infed.org/archives/gov_uk/circular1486.htm
+http://www.infed.org/archives/nayc/ferris_girls_clubs_leader.htm
+http://www.infed.org/archives/settlements/esa_community_education.htm
+http://www.infed.org/biblio/b-selfdr.htm
+http://www.infed.org/biblio/globalization.htm
+http://www.infed.org/biblio/social_capital.htm
+http://www.infed.org/christianeducation/calling-doyle.htm
+http://www.infed.org/foundations/assess.htm
+http://www.infed.org/groupwork/b-grpwk.htm
+http://www.infed.org/lifelonglearning/b-life.htm
+http://www.infed.org/thinkers/argyris.htm
+http://www.infed.org/thinkers/et-bp.htm
+http://www.infed.org/thinkers/et-freir.htm
+http://www.infed.org/thinkers/et-lewin.htm
+http://www.infed.org/thinkers/leonard_barnett.htm
+http://www.infed.org/thinkers/putnam.htm
+http://www.infed.org/thinkers/stansfeld.htm
+http://www.infed.org/youthwork/b-ywprin.htm
+http://www.infid.be/statementofthestateministerfornationaldevelopmentplanning.htm
+http://www.infidels.org/library/historical/charles_bradlaugh/roberts-bradlaugh/night1/1roberts1.html
+http://www.infidels.org/library/historical/charles_bradlaugh/roberts-bradlaugh/night2/2roberts1.html
+http://www.infidels.org/library/modern/mark_vuletic/five.html
+http://www.infidels.org/news/atheism/logic.html
+http://www.infield.com/Deep_and_Ultra-Deepwater_Annual_Market_Report.htm
+http://www.infield.com/deepwater_ultra_deepwater_market_reports.htm
+http://www.infield.com/services.htm
+http://www.infiltration.org/transit-subway.html
+http://www.infineon.com/boerse/jahresbericht2001/english/1_1_chronik_1_e.htm
+http://www.infinite-energy.com/iemagazine/issue4/whyallthestatic.html
+http://www.infinite-energy.com/resources/faq.html
+http://www.infinitecat.com/
+http://www.infinitemonkeys.co.uk/gasgiant/
+http://www.infinitemonkeys.co.uk/gasgiant/000229.shtml
+http://www.infinityplus.co.uk/nonfiction/intaruch.htm
+http://www.infinityplus.co.uk/stories/fearofwidths.htm
+http://www.infinityplus.co.uk/stories/luxuryofsleep.htm
+http://www.infinitywalk.com/Contact.htm
+http://www.infive.com/NB.html
+http://www.infj.org/rules.html
+http://www.info-france-usa.org/atoz/sea_fish.asp
+http://www.info-france-usa.org/news/statmnts/2005/villepin_secularism022405.asp
+http://www.info.dfat.gov.au/info/historical/HistDocs.nsf/vVolume/3AC2DA12BC9AB4F0CA256B7F0009D6D9
+http://www.info.dfat.gov.au/info/historical/HistDocs.nsf/vVolume/BEC768A80103B61ECA256B7F0009D0EE
+http://www.info.gov.hk/eac/en/legco/230600c.htm
+http://www.info.gov.hk/info/population/eng/summary.htm
+http://www.info.gov.hk/info/structure-e.htm
+http://www.info.gov.hk/itc/eng/technology/foundation.shtml
+http://www.info.gov.za/speeches/1998/98c31_hanek9811575.htm
+http://www.info.gov.za/speeches/1999/9910071007a1001.htm
+http://www.info.gov.za/speeches/2000/0001141036a1006.htm
+http://www.info.gov.za/speeches/2000/000510223p1004.htm
+http://www.info.gov.za/speeches/2000/000725410p1001.htm
+http://www.info.gov.za/speeches/2001/010703945a1004.htm
+http://www.info.gov.za/speeches/2001/010827945a1007.htm
+http://www.info.gov.za/speeches/2002/02080809461002.htm
+http://www.info.gov.za/speeches/2003/03051609461005.htm
+http://www.info.gov.za/speeches/2003/03091809461006.htm
+http://www.info.gov.za/speeches/2003/03092514461002.htm
+http://www.info.gov.za/speeches/2003/03092611461001.htm
+http://www.info.gov.za/speeches/2003/03102309461003.htm
+http://www.info.gov.za/speeches/2004/04022710461002.htm
+http://www.info.gov.za/speeches/2004/04102809451001.htm
+http://www.info.gov.za/speeches/2005/05013115151005.htm
+http://www.info.gov.za/speeches/2005/05031608451007.htm
+http://www.info.gov.za/speeches/2005/05061514451001.htm
+http://www.info.tdri.or.th/pr_mep.htm
+http://www.infoadriatic.com/useful_links.shtml
+http://www.infoadvantage.com/doc/about_press_dotcash.htm
+http://www.infobaseventures.com/blog/
+http://www.infocastinc.com/NanoRoadmap/nnrp.htm
+http://www.infochangeindia.org/PopulationIbp.jsp
+http://www.infochangeindia.org/PopulationItop.jsp?section_idv=3
+http://www.infocomm.org/index.cfm?objectID=74A022E8-FAA2-40C5-81A2DAC388CBED04
+http://www.infocusmag.com/03january/mendes.htm
+http://www.infoforhealth.org/inforeports/mec/mecprint.html
+http://www.infoforhealth.org/pr/j48/chart4.shtml
+http://www.infoisrael.net/cgi-local/text.pl?source=4/b/ii/191220041
+http://www.infomanagementcenter.com/enewsletter/200412/
+http://www.infomat.net/infomat/rd741/rd1/database/RoyalPhotographic/index.asp
+http://www.infomotion.co.za/theatre/news0505.html
+http://www.infomotions.com/musings/systems-administration/
+http://www.infopackets.com/channels/en/windows/gazette/2005/20050520_why_does_windows_constantly_report_virtual_memory_low.htm
+http://www.infopak.gov.pk/SAARCCM/saarc_standing_committee_30th_session_spokesman_opening_statement.htm
+http://www.infopak.gov.pk/news/appnews/appnews2003/app_sep12_2003.htm
+http://www.infopak.gov.pk/news/appnews/appnews2004/app_may07_2004.htm
+http://www.infopak.gov.pk/public/govt/resp_humanright.htm
+http://www.infoplease.com/ce6/people/A0841801.html
+http://www.infoplease.com/ce6/people/A0850140.html
+http://www.infoplease.com/finance/tips/money/money_intern.html
+http://www.infoplease.com/ipa/A0004451.html
+http://www.infoplease.com/ipa/A0107374.html
+http://www.infoplease.com/ipa/A0107484.html
+http://www.infoplease.com/ipa/A0107751.html
+http://www.infoplease.com/ipa/A0148736.html
+http://www.infoplease.com/ipa/A0781456.html
+http://www.infoplease.com/ipa/A0900855.html
+http://www.infoplease.com/ipa/A0904269.html
+http://www.infoplease.com/spot/affirmative1.html
+http://www.infoplease.com/spot/bhmquotes1.html
+http://www.infoplease.com/spot/terror-qaeda.html
+http://www.infoplease.com/spot/wtc1.html
+http://www.infoplease.com/t/hist/inaugural/47.html
+http://www.inforain.org/gfr/4_2.htm
+http://www.inforain.org/gfr/assmnt/usersguide.htm
+http://www.informars.com/barryleeds/legal.asp
+http://www.informatics-review.com/thoughts/next.html
+http://www.informatics.bangor.ac.uk/~dewi/ci_grp/Conference_Abstracts.htm
+http://www.informatik.uni-trier.de/~ley/db/journals/corr/corr0209.html
+http://www.informatik.uni-trier.de/~ley/db/journals/corr/corr0410.html
+http://www.informatik.uni-trier.de/~ley/db/journals/lncs1700-1799.html
+http://www.information-britain.co.uk/showPlace.cfm?Place_ID=28953
+http://www.informationclearinghouse.info/article5365.htm
+http://www.informationclearinghouse.info/article7759.htm
+http://www.informationweek.com/showArticle.jhtml?articleID=16400193
+http://www.informationweek.com/showArticle.jhtml?articleID=19400079
+http://www.informationweek.com/story/IWK20010713S0009
+http://www.informationweek.com/story/showArticle.jhtml?articleID=14100041
+http://www.informationweek.com/story/showArticle.jhtml?articleID=164303537
+http://www.informationweek.com/story/showArticle.jhtml?articleID=17601949
+http://www.informationweek.webservicespipeline.com/57701384
+http://www.informedconsent.org/draft.html
+http://www.informedpublic.com/archive/2005_06_01_archive.html
+http://www.informit.com/
+http://www.informit.com/articles/article.asp?p=102173&seqNum=29
+http://www.informit.com/articles/article.asp?p=102614
+http://www.informit.com/articles/article.asp?p=170432
+http://www.informit.com/articles/article.asp?p=170517&seqNum=2
+http://www.informit.com/articles/article.asp?p=170934&seqNum=2
+http://www.informit.com/articles/article.asp?p=174329
+http://www.informit.com/articles/article.asp?p=174329&seqNum=2
+http://www.informit.com/articles/article.asp?p=18225&seqNum=2
+http://www.informit.com/articles/article.asp?p=24027
+http://www.informit.com/articles/article.asp?p=26022
+http://www.informit.com/articles/article.asp?p=29640&seqNum=2
+http://www.informit.com/articles/article.asp?p=30429
+http://www.informit.com/articles/article.asp?p=30869
+http://www.informit.com/articles/article.asp?p=31105&seqNum=12
+http://www.informit.com/articles/article.asp?p=360063&seqNum=2
+http://www.informit.com/articles/article.asp?p=360649&seqNum=7
+http://www.informit.com/articles/article.asp?p=383854
+http://www.informit.com/articles/article.asp?p=99706&seqNum=3
+http://www.informit.com/guides/content.asp?g=msoffice&seqNum=135
+http://www.informit.com/guides/content.asp?g=msoffice&seqNum=136
+http://www.informit.com/title/0201734095
+http://www.informs.org/Press/barnett02c.htm
+http://www.informs.org/Prizes/TeachingORPracticePrizeDetails.html
+http://www.informs.org/Prizes/whoisErlang.html
+http://www.infoshop.org/inews/article.php?story=20050625113048151&mode=print
+http://www.infosource.gc.ca/emp/emp01_e.asp
+http://www.infosource.gc.ca/fed/fed01_e.asp
+http://www.infosports.com/football/arch/2452.htm
+http://www.infosprts.com/football/arch/2452.htm
+http://www.infostuff.com/carstuff/cartalk1.htm
+http://www.infotechresearch.com/2004/12/intellectual-property-vs-fair-use.html
+http://www.infotoday.com/MMSchools/NovMMS/cyberbee11.html
+http://www.infotoday.com/MMSchools/mar03/cyber0303.shtml
+http://www.infotoday.com/MMSchools/may99/dcon0599.htm
+http://www.infotoday.com/cilmag/mar00/donnelly.htm
+http://www.infotoday.com/cilmag/may04/huwe.shtml
+http://www.infotoday.com/it/oct01/poynder.htm
+http://www.infotoday.com/newsbreaks/nb020422-3.htm
+http://www.infotoday.com/newsbreaks/nb020923-1.htm
+http://www.infotoday.com/searcher/jan01/lambert.htm
+http://www.infotoday.com/searcher/oct02/west.htm
+http://www.infoville.org.uk/business/
+http://www.infowars.com/articles/world/property_of_the_state.htm
+http://www.infowars.com/videos.html
+http://www.infoworld.com/Windows_XP_SP2_(Service_Pack_2)/product_47393.html?view=8&curNodeId=108&prId=UKTH01303022005-1
+http://www.infoworld.com/article/03/05/22/HNwirestandard_1.html
+http://www.infoworld.com/article/04/09/24/39storinside_1.html
+http://www.infoworld.com/article/04/11/19/HNoracle_1.html?DATABASES
+http://www.infoworld.com/article/04/11/19/HNoracle_1.html?s=feature
+http://www.infoworld.com/article/04/12/26/HNcanspamnoteffective_1.html
+http://www.infoworld.com/articles/hn/xml/02/10/04/021004hnliberty.html
+http://www.infozee.com/application-issues/financial-aid.htm
+http://www.infozee.com/application-issues/resume.htm
+http://www.infozee.com/usa/app-procedure-pg.htm
+http://www.infracon.org/EN/ENpropositum02-2003.html
+http://www.infusionpad.com/meditation.html
+http://www.ingenio.com/documents/help/prtoolkit.asp
+http://www.ingeniux.com/x345.xml
+http://www.ingentaconnect.com/content/arn/cg/2004/00000011/00000001/art00006
+http://www.ingentaconnect.com/content/arn/ct/2004/00000001/00000003/art00002
+http://www.ingentaconnect.com/content/bpl/ajsp/1998/00000001/00000001/art00004
+http://www.ingentaconnect.com/content/bpl/area/2002/00000034/00000002/art00066
+http://www.ingentaconnect.com/content/bpl/bjes/2003/00000051/00000003/art00004
+http://www.ingentaconnect.com/content/bpl/bjir/1997/00000035/00000002/art00047
+http://www.ingentaconnect.com/content/bpl/bjom/1998/00000009/00000002/art00080
+http://www.ingentaconnect.com/content/bpl/bjpi/2004/00000006/00000002/art00008
+http://www.ingentaconnect.com/content/bpl/bjsp/2000/00000027/00000001/art00153
+http://www.ingentaconnect.com/content/bpl/dpr/1997/00000015/00000004/art00044
+http://www.ingentaconnect.com/content/bpl/dpr/2003/00000021/00000001/art00006
+http://www.ingentaconnect.com/content/bpl/hist/2001/00000086/00000282/art00186
+http://www.ingentaconnect.com/content/bpl/irel/2002/00000041/00000004/art00268
+http://www.ingentaconnect.com/content/bpl/irj/1998/00000029/00000002/art00085
+http://www.ingentaconnect.com/content/bpl/jors/2001/00000041/00000003/art00224
+http://www.ingentaconnect.com/content/bpl/mila/1997/00000012/00000003/art00059
+http://www.ingentaconnect.com/content/bpl/misr/2004/00000006/00000001/art00017
+http://www.ingentaconnect.com/content/bpl/obes/2004/00000066/00000005/art00002
+http://www.ingentaconnect.com/content/bpl/padm/1999/00000077/00000003/art00164
+http://www.ingentaconnect.com/content/bpl/poqu/1999/00000070/000000s1/art00254
+http://www.ingentaconnect.com/content/bpl/poqu/2004/00000075/00000004/art00005
+http://www.ingentaconnect.com/content/bpl/prog/2004/00000056/00000003/art00004
+http://www.ingentaconnect.com/content/bpl/trps/1999/00000097/00000002/art00049
+http://www.ingentaconnect.com/content/brunner/gasc/2003/00000016/00000004/art00005
+http://www.ingentaconnect.com/content/brunner/uedi/2003/00000011/00000004/art00002
+http://www.ingentaconnect.com/content/bsc/add/2003/00000098/00000007/art00010
+http://www.ingentaconnect.com/content/bsc/aec/2003/00000028/00000005/art00003
+http://www.ingentaconnect.com/content/bsc/afje/2003/00000041/00000001/art00007
+http://www.ingentaconnect.com/content/bsc/anae/1998/00000053/00000003/art00282
+http://www.ingentaconnect.com/content/bsc/anae/2002/00000057/00000005/art00013
+http://www.ingentaconnect.com/content/bsc/anae/2002/00000057/00000005/art00014
+http://www.ingentaconnect.com/content/bsc/ara/2000/00000044/00000003/art00833
+http://www.ingentaconnect.com/content/bsc/ares/2003/00000034/00000010/art00003
+http://www.ingentaconnect.com/content/bsc/bij/2002/00000075/00000004/art00035
+http://www.ingentaconnect.com/content/bsc/bij/2004/00000084/00000002/art00011
+http://www.ingentaconnect.com/content/bsc/bjh/1999/00000105/00000003/art01379
+http://www.ingentaconnect.com/content/bsc/bjh/2001/00000115/00000003/art03155
+http://www.ingentaconnect.com/content/bsc/cbi/2003/00000017/00000001/art00037
+http://www.ingentaconnect.com/content/bsc/cchd/2004/00000030/00000002/art00010
+http://www.ingentaconnect.com/content/bsc/cdi/2003/00000005/00000002/art00020
+http://www.ingentaconnect.com/content/bsc/clh/1999/00000021/00000003/art00218
+http://www.ingentaconnect.com/content/bsc/cpro/2001/00000034/00000006/art00222
+http://www.ingentaconnect.com/content/bsc/vop/2003/00000006/00000003/art00001
+http://www.ingentaconnect.com/content/bto/bird/2000/00000047/00000001/471022
+http://www.ingentaconnect.com/content/bto/bird/2000/00000047/00000003/473352
+http://www.ingentaconnect.com/content/bva/vet/2004/00000154/00000023/art00008
+http://www.ingentaconnect.com/content/bva/vet/2004/00000154/00000025/art00001
+http://www.ingentaconnect.com/content/bva/vet/2004/00000155/00000001/art00006
+http://www.ingentaconnect.com/content/cabi/ber/1999/00000089/00000001/art00002
+http://www.ingentaconnect.com/content/carfax/cjem/2001/00000026/00000003/art00004
+http://www.ingentaconnect.com/content/carfax/cmit/2004/00000009/00000002/art00006
+http://www.ingentaconnect.com/content/fcp/ccp/2002/00000040/00000002/art00004
+http://www.ingentaconnect.com/content/fcp/ep/2003/00000012/00000001/art00012
+http://www.ingentaconnect.com/content/ffp/jfp/2001/00000027/00000001/art00005
+http://www.ingentaconnect.com/content/geol/jgs/1993/00000150/00000004/15040788
+http://www.ingentaconnect.com/content/hsp/jpa/2003/00000003/00000003/art00008
+http://www.ingentaconnect.com/content/hum/endo/2003/00000020/F0020001/art00007
+http://www.ingentaconnect.com/content/iabse/sei/2004/00000014/00000001/art00004
+http://www.ingentaconnect.com/content/imp/hpt/1992/00000013/00000001/258
+http://www.ingentaconnect.com/content/imp/jcs/1998/00000005/00000001/810
+http://www.ingentaconnect.com/content/isis/mitat/2000/00000009/00000005/art00005
+http://www.ingentaconnect.com/content/jbp/bab/2004/00000050/00000001/art00005
+http://www.ingentaconnect.com/content/jhsb/jhsb/2004/00000079/00000002/art00015
+http://www.ingentaconnect.com/content/jws/isaf/2004/00000012/00000001/art00002
+http://www.ingentaconnect.com/content/jws/smi/2002/00000018/00000004/art00939
+http://www.ingentaconnect.com/content/jws/uog/2003/00000022/00000002/art00017
+http://www.ingentaconnect.com/content/kli/cola/2003/00000040/00000004/02003039
+http://www.ingentaconnect.com/content/klu/argu/1998/00000012/00000002/00161753
+http://www.ingentaconnect.com/content/klu/aten/2001/00000090/00000004/00346976
+http://www.ingentaconnect.com/content/klu/bioc/2002/00000011/00000012/05099403
+http://www.ingentaconnect.com/content/klu/biph/2000/00000015/00000004/00264643
+http://www.ingentaconnect.com/content/klu/ccar/2003/00000032/00000001/00458679
+http://www.ingentaconnect.com/content/klu/csow/1997/00000025/00000003/00424571
+http://www.ingentaconnect.com/content/klu/dopc/2002/00000382/F0030001/00370600
+http://www.ingentaconnect.com/content/klu/ebfi/2004/00000070/00000002/05252691
+http://www.ingentaconnect.com/content/klu/educ/1996/00000033/00000003/00119724
+http://www.ingentaconnect.com/content/klu/emas/1999/00000059/00000003/00192023
+http://www.ingentaconnect.com/content/klu/flui/2002/00000037/00000006/00461182
+http://www.ingentaconnect.com/content/klu/jadd/2003/00000033/00000002/00461019
+http://www.ingentaconnect.com/content/klu/jeei/1998/00000019/00000004/00417475
+http://www.ingentaconnect.com/content/klu/lahu/1999/00000023/00000002/00413443
+http://www.ingentaconnect.com/content/klu/mell/2001/00000045/F0020005/00363936
+http://www.ingentaconnect.com/content/maney/pm/2000/00000043/00000001/art00002
+http://www.ingentaconnect.com/content/mcb/002/1997/00000024/00000006/art00003
+http://www.ingentaconnect.com/content/mhra/mlr/2005/00000100/00000001/art00028
+http://www.ingentaconnect.com/content/mitpress/jcn/2002/00000014/00000007/art00011
+http://www.ingentaconnect.com/content/mksg/aos/2003/00000081/00000005/art00013
+http://www.ingentaconnect.com/content/mksg/cod/2004/00000051/00000004/art00006
+http://www.ingentaconnect.com/content/oecd/04745574/2001/00002001/00000002/c18
+http://www.ingentaconnect.com/content/paho/paho557/1996/00000557/00000001/art00023
+http://www.ingentaconnect.com/content/pal/0960085x/2000/00000009/00000001/3000345
+http://www.ingentaconnect.com/content/pal/14724790/2004/00000002/00000002/art00002
+http://www.ingentaconnect.com/content/psych/plat/1997/00000002/00000001/art00005
+http://www.ingentaconnect.com/content/rodopi/ludus/2002/00000006/00000001/art00003
+http://www.ingentaconnect.com/content/routledg/rcjo/2001/00000012/00000003/art00005
+http://www.ingentaconnect.com/content/routledg/rijh/2001/00000012/00000008/art00007
+http://www.ingentaconnect.com/content/saf/fs/2004/00000050/00000002/art00009
+http://www.ingentaconnect.com/content/saf/njaf/2001/00000018/00000002/art00005
+http://www.ingentaconnect.com/content/sage/ecr/2004/00000002/00000002/art00001
+http://www.ingentaconnect.com/content/sage/j224/2001/00000029/00000002/art00004
+http://www.ingentaconnect.com/content/sage/j307/2001/00000035/00000002/art00008
+http://www.ingentaconnect.com/content/sage/j331/1999/00000024/00000001/art00001
+http://www.ingentaconnect.com/content/sage/j363/2001/00000025/00000003/art00007
+http://www.ingentaconnect.com/content/sage/spr/2003/00000020/00000003/art00003
+http://www.ingentaconnect.com/content/tandf/ccos/2004/00000016/00000001/art00003
+http://www.ingentaconnect.com/content/tandf/cijf/2003/00000054/00000006/art00010
+http://www.ingentaconnect.com/content/tandf/tcus/1998/00000030/00000001/art00004
+http://www.ingentaconnect.com/content/tandf/tphb/2000/00000080/00000012/art00006
+http://www.ingentaconnect.com/content/tandf/tsed/2002/00000024/00000001/art00003
+http://www.ingentaconnect.com/content/tandf/usyb/2001/00000050/00000002/art00004
+http://www.ingentaconnect.com/content/tpp/pap/2002/00000030/00000002/art00003
+http://www.ingentaconnect.com/content/urban/281/2001/00000045/00000006/art00103
+http://www.ingentaconnect.com/content/whp/ev/2004/00000013/00000004/art00002
+http://www.ingersoll.com/rs/20031001.htm
+http://www.initaly.co.uk/bologna/fiobolo.rental.apartments.php
+http://www.initaly.com/regions/lakes/lake4.htm
+http://www.initaly.com/regions/latium/ostia.htm
+http://www.initaly.com/regions/museums/sims.htm
+http://www.injusticebusters.com/05/Klassen_appeal.shtml
+http://www.inl.org/bicycle/glacier/day4.html
+http://www.inlander.com/parking/280981676292130.php
+http://www.inlander.com/parking/282302208034715.php
+http://www.inlandrevenue.gov.uk/board/
+http://www.inlandrevenue.gov.uk/cbr-smp/sum_smp_changes.htm
+http://www.inlandrevenue.gov.uk/employers/empbull10.htm
+http://www.inlandrevenue.gov.uk/employers/empbull12.htm
+http://www.inlandrevenue.gov.uk/employers/empbull13.htm
+http://www.inlandrevenue.gov.uk/employers/empbull15.htm
+http://www.inlandrevenue.gov.uk/employers/employee_sick.htm
+http://www.inlandrevenue.gov.uk/manuals/cismanual/html/cis6300/34_0018_CIS6358.htm
+http://www.inlandrevenue.gov.uk/manuals/cismanual/html/cis6300/34_0019_CIS6360.htm
+http://www.inlandrevenue.gov.uk/manuals/samanual/samadj/samadj04107.htm
+http://www.inlandrevenue.gov.uk/pdfs/pse1.htm
+http://www.inletny.com/event.asp?mon=11
+http://www.inliquid.com/art/paint/rosenthal/rosenthal_b.shtml
+http://www.inlovingmemoryonline.com/books2.html
+http://www.inmamaskitchen.com/FOOD_IS_ART/Aboutus.html
+http://www.inmotionmagazine.com/er/pedro34.html
+http://www.inmotionmagazine.com/selling.html
+http://www.inmotionmagazine.com/shiva.html
+http://www.inmusicwetrust.com/articles/31h02.html
+http://www.innerbonding.com/index.lasso?did=content&content.article=218
+http://www.innercitypress.org/2004hmda.html
+http://www.innercitypress.org/bofa.html
+http://www.innerear.on.ca/firstreflections/afternoontubes.html
+http://www.innerself.com/Magazine/Towards_2000_Plus/failed_negative_prophecy.htm
+http://www.innertemple.org.uk/history/lamb.html
+http://www.innerviews.org/inner/manring.html
+http://www.innerviews.org/inner/mclaughlin.html
+http://www.innerviews.org/inner/strawbs.html
+http://www.innfinder.com/innfinder-faq.html
+http://www.innovation-enterprise.com/6.1/6.1.78.php
+http://www.innovation.ca/innovation2/essay_caulfield.html
+http://www.innovationalberta.com/article.php?articleid=129
+http://www.innovationalberta.com/article.php?articleid=395
+http://www.innovationavenue.com/sales-publicrelations-glossary.htm
+http://www.innovationlaw.org/lawforum/pages/traditional_knowledge.htm
+http://www.innovations-report.com/html/profiles/profile-496.html
+http://www.innovations-report.com/html/reports/environment_sciences/report-46001.html
+http://www.innovations-report.com/html/reports/medicine_health/report-24580.html
+http://www.innovations-report.com/html/reports/medicine_health/report-39516.html
+http://www.innovations-report.de/html/berichte/geowissenschaften/bericht-12085.html
+http://www.innovations-report.de/html/berichte/umwelt_naturschutz/bericht-12261.html
+http://www.innovationtools.com/Articles/EnterpriseDetails.asp?a=175
+http://www.innovative-hrsolutions.com/BA.htm
+http://www.innovativebrew.com/hints.htm
+http://www.innvista.com/culture/religion/deities/chris25.htm
+http://www.innvista.com/health/nutrition/essensug/diction.htm
+http://www.inoohr.org/worldpopulationcontrolpromote.htm
+http://www.inpassing.org/node/view/2350
+http://www.inpassing.org/node?from=150
+http://www.inpassing.org/node?from=180
+http://www.inq7.net/globalnation/col_mom/2004/nov08.htm
+http://www.inq7.net/lif/2004/apr/13/lif_22-1.htm
+http://www.inq7.net/opi/2003/oct/27/opi_wesposo-1.htm
+http://www.inq7.net/opi/2004/may/16/opi_rsdavid-1.htm
+http://www.inq7.net/opi/2004/may/22/opi_wbello-1.htm
+http://www.inq7.net/wnw/2004/may/28/wnw_1-1.htm
+http://www.inquebeccity.com/
+http://www.inquiry.net/adult/trainer/urban_legends.htm
+http://www.inquiry.net/outdoor/autumn/taxidermy/taxidermy.htm
+http://www.inquiry.net/outdoor/campfire/helps/story_telling.htm
+http://www.inquiry.net/outdoor/campfire/helps/you_do.htm
+http://www.inquiry.net/outdoor/skills/b-p/staff.htm
+http://www.inquiry.net/patrol/gilwell/quartermaster.htm
+http://www.inquiry.net/traditional/handbook/
+http://www.inquiry.net/uniforms/traditional/shirt01.htm
+http://www.inr.unp.ac.za/vetiver/news7/News7_Applications.htm
+http://www.inria.fr/actualites/colloques/manifestations2004.en.html
+http://www.inria.fr/rapportsactivite/RA2004/orpailleur2004/uid25.html
+http://www.ins.state.ny.us/rg050222.htm
+http://www.insanelygreatsites.com/
+http://www.insanescouter.com/t276/newsletter/0802.htm
+http://www.insc.anl.gov/dbfiles/plant_info/oper_hist/Kola.html
+http://www.insearchofpeace.org/4v36issue.htm
+http://www.insearchofpeace.org/4v41issue.htm
+http://www.insearchofpeace.org/4v48issue.htm
+http://www.insearchofpeace.org/6v23issue.htm
+http://www.insectscience.org/3.11/
+http://www.insectscience.org/4.10/
+http://www.insecure.org/sploits/NT.syscalls.vulnerability.html
+http://www.insidebayarea.com/trivalleyherald/ci_2555407
+http://www.insidecx.com/interviews/archive/nodoubt.html
+http://www.insidedefense.com/public/awardpent20-12-2.asp
+http://www.insidedenver.com/drmn/broncos/article/0,1299,DRMN_17_3493308,00.html
+http://www.insidefilm.com/dealingrewrite.html
+http://www.insideglass.com/poljot/president_Eng.html
+http://www.insidehighered.com/jobs/search/?event=ViewJobDetails&job_posting_id=2468
+http://www.insidehighered.com/news/2005/01/20/penn
+http://www.insidehighered.com/news/2005/05/13/lawrence
+http://www.insidehighered.com/news/2005/06/15/exit
+http://www.insidehighered.com/news/2005/06/20/nyu
+http://www.insidehighered.com/views/2005/03/08/mclemee11
+http://www.insidehighered.com/views/2005/05/09/halberstam
+http://www.insidehighered.com/views/2005/06/22/wilson
+http://www.insidehoops.com/about.shtml
+http://www.insidehoops.com/nash-conference-071404.shtml
+http://www.insideindonesia.org/edit55/beeson.htm
+http://www.insideindonesia.org/edit62/hancock1.htm
+http://www.insideindonesia.org/edit66/yatun.htm
+http://www.insideindonesia.org/edit69/michelef.htm
+http://www.insidejoke.tv/200406/campaign06.asp
+http://www.insideout.com/easyedit/admin/pageeditor.html?sku=directions
+http://www.insider.co.uk/
+http://www.insideronline.org/feature.cfm?id=141
+http://www.insiders.com/bermuda/main-watersports2.htm
+http://www.insiderzim.com/jul03guest.html
+http://www.insideschools.org/fs/school_profile.php?id=737
+http://www.insidetheweb.com/
+http://www.insidetri.com/race/iro/articles/2481.0.html
+http://www.insidetri.com/train/cts/articles/2464.0.html
+http://www.insightful.com/news_events/release.asp?RID=124
+http://www.insightful.com/support/whitepaper_download.asp
+http://www.insightful.com/support/whitepapers.asp
+http://www.insightinvestment.com/Adviser%5Cnews%5C2004%5Cpr_property_fund_oversubscribed.asp
+http://www.insights.org.uk/volumelist.aspx?volumeid=15
+http://www.insightsystem.com/enfj.htm
+http://www.insigne.org/TD-Forces-I.htm
+http://www.insignia.com/content/investor/releases/release_050524.shtml
+http://www.insitefitness.com.au/lessons/General%20Health%20&%20Fitness/Fitness%20Components.html
+http://www.insolitology.com/topten/koostrenite/ri-974i.htm
+http://www.insolvency.gov.uk/guidanceleaflets/cdda.htm
+http://www.insolvency.gov.uk/guidanceleaflets/complain.htm
+http://www.insolvencyhelpline.co.uk/company-info/bullying-policy.htm
+http://www.insomniacure.com/
+http://www.inspection.gc.ca/english/anima/meavia/mmopmmhv/chap4/annexme.shtml
+http://www.inspirationfarm.com/GG/articles/article8.html
+http://www.inspirationpeak.com/shortstories/ronaldmcdonald.html
+http://www.inspiritmusic.com/links/?page=1
+http://www.installshield.com/news/newsletter/0407-articles/deploy.asp
+http://www.installshield.com/products/adminstudio/
+http://www.instantheadacherelief.com/
+http://www.instantmlmsalesletters.com/
+http://www.instantsellhome.com/
+http://www.instantsellhome.com/house_for_sale_by_owner_fsbo.htm
+http://www.instantspeakingsuccess.com/profit.htm
+http://www.instat.com/newmk.asp?ID=726
+http://www.instat.com/press.asp?ID=725&sku=IN0301141MT
+http://www.instawares.com/Tea.10-1579-2.0.1-3.2.htm
+http://www.instepnews.com/cordiallyyours.html
+http://www.instituteofideas.com/publications/
+http://www.institutodopvc.org/english/atualidades5.htm
+http://www.insulators.com/books/oi/
+http://www.insulators.com/computer/1996_01.htm
+http://www.insultmonger.com/swearing/dutch.htm
+http://www.insurance.ca.gov/CSD/Brochure/Residential/ResidInsurance.htm
+http://www.insurance.co.uk/ProductsClassic/travel/info/infojargonbuster.asp
+http://www.insurance.com.hk/tvlsafe/ts3b/bc_declare.htm
+http://www.insurance.com/Article.aspx/artid/157
+http://www.insurance.com/Article.aspx/artid/256
+http://www.insurance.wa.gov/factsheets/factsheet_detail.asp?FctShtRcdNum=26
+http://www.insurance.wa.gov/factsheets/factsheet_detailprint.asp?FctShtRcdNum=26
+http://www.insurancebroadcasting.com/122904retire.htm
+http://www.insurancebrokers.hsbc.com/hsbc/professional_indemnity/frequently-asked-questions
+http://www.insurancejournal.com/magazines/west/2004/04/19/ratings
+http://www.insurancejournal.com/news/national/2005/06/14/55964.htm
+http://www.insurancepoliciesonline.com/resourcecenter/safety/back%20safety.htm
+http://www.insurancetech.com/resources/fss/showArticle.jhtml?articleID=14706417
+http://www.insurancetech.com/story/IST20030403S0010
+http://www.insurancetech.com/story/coverStory/IST20010904S0009
+http://www.insurancetech.com/story/workforce/IST20030403S0010
+http://www.insurgentdesire.org.uk/luddites.htm
+http://www.int.pan.wroc.pl/?lid=7&lang=en
+http://www.int505.org/new3.htm
+http://www.intams.org/library/practical_details.php
+http://www.integramed.com/inmdweb/content/cons/shared.jsp
+http://www.integratedanimal.com/Shopping.asp
+http://www.integritychildren.com/about.html
+http://www.intel-dump.com/archives/archive_2003_12_21.shtml
+http://www.intel-dump.com/archives/archive_2004_12_00.shtml
+http://www.intel-dump.com/archives/archive_2005_05_08-2005_05_14.shtml
+http://www.intel-dump.com/archives/archive_2005_05_29-2005_06_04.shtml
+http://www.intel.com/education/design/resources/what_engineers_do.htm
+http://www.intel.com/education/handhelds/lessonplans/eat.htm
+http://www.intel.com/intel/finance/gcr03/12-ethics_compliance.htm
+http://www.intel.com/netcomms/technologies/wimax/
+http://www.intel.com/pressroom/archive/releases/20020227corp.htm
+http://www.intel.com/pressroom/archive/releases/CN102797.HTM
+http://www.intel.com/pressroom/archive/speeches/otellini20040907.htm
+http://www.intel.com/standards/execqa/qa0904.htm
+http://www.intelihealth.com/IH/ihtIH/WSAZR000/14220/28923/224700.html?d=dmtContent
+http://www.intelihealth.com/IH/ihtIH/WSHPO000/25792/10969.html
+http://www.intelihealth.com/IH/ihtIH/WSHPO000/25792/9407.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/14220/28923/224700.html?d=dmtContent
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/23722/20988/232308.html?d=dmtContent
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/24479/24336/187048.html?d=dmtHealthAZ
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/29816/31053.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/35263/35269/211317.html?d=dmtHealthAZ
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/7165/25988/194299.html?d=dmtContent
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/8315/23999/366614.html?d=dmtContent
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/10131.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/10969.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/25866.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/31035.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/31115.html
+http://www.intelihealth.com/IH/ihtIH/WSIHW000/9339/9407.html
+http://www.intelihealth.com/IH/ihtPrint/WSIHW000/9339/9407.html?hide=t&k=basePrint
+http://www.intellectbooks.com/europa/number8/eu.htm
+http://www.intellectualconservative.com/article2543.html
+http://www.intellectualconservative.com/article2787.html
+http://www.intellibiz.com/realty/credit.html
+http://www.intellichoice.com/carBuying101/Maintenance
+http://www.intellichoice.com/carBuying101/UnloadingOldCar
+http://www.intellichoice.com/reports/vehicleReport/vehicle_nmb/15758/section/all/type/new
+http://www.intelligence.org.il/eng/corruption.htm
+http://www.intelligencer-record.com/
+http://www.intelligentagent.com/archive/march_road.html
+http://www.intelligentcrm.com/showArticle.jhtml?articleID=53700686
+http://www.intelligentedu.com/cat4.html
+http://www.intelligententerprise.com/000626/feat2.jhtml
+http://www.intelligententerprise.com/031030/617feat3_1.shtml
+http://www.intelligententerprise.com/showArticle.jhtml?articleID=22102121
+http://www.intellirecovery.com/data/recovery/
+http://www.intellivisionlives.com/retrotopia/direct2tv.shtml
+http://www.intelproplaw.com/Copyright/Forum/msg/498.shtml
+http://www.intelproplaw.com/Forum/Forum.cgi?board=newspostings;action=display;num=1100267232
+http://www.intense-workout.com/bench_press.html
+http://www.inter.uadm.uu.se/FAQ.html
+http://www.interactivelunacy.com/74annoy.htm
+http://www.interactives.co.uk/hearts_racehrs.htm
+http://www.interbridge.com/weblog/
+http://www.intercast.it/home_mel/danretme_el.htm
+http://www.interchurchfamilies.org/journal/2002jan03.shtm
+http://www.intercomm.it/calabria/storia_giscard.htm
+http://www.interconnections.de/agentur/html/start_uk.shtml
+http://www.intercotwest.com/boards/ultimatebb.php?ubb=get_topic;f=13;t=000822
+http://www.interculturalstudies.org/IIS/film-preservation.html
+http://www.interdisciplines.org/artcognition/papers/6
+http://www.interdisciplines.org/coevolution/papers/11/printable/discussions
+http://www.interdisciplines.org/interdisciplinarity/papers/3
+http://www.interdisciplines.org/interdisciplinarity/papers/7
+http://www.interdisciplines.org/interdisciplinarity/papers/7/10
+http://www.interdisciplines.org/interdisciplinarity/papers/7/7
+http://www.interdys.org/forum/post.asp?method=ReplyQuote&REPLY_ID=609&TOPIC_ID=247&FORUM_ID=6
+http://www.interdys.org/forum/post.asp?method=ReplyQuote&REPLY_ID=622&TOPIC_ID=247&FORUM_ID=6
+http://www.interesting-people.org/archives/interesting-people/199912/msg00076.html
+http://www.interestonlyloans.com/
+http://www.interfaithfamily.com/phorums/read.php?f=143&i=14&t=143
+http://www.interfaithfamily.com/phorums/read.php?f=143&i=15&t=143
+http://www.interfaithfamily.com/phorums/read.php?f=157&i=68&t=157
+http://www.interfax.kz/eng/?id=exclusive
+http://www.interferenza.com/bcs/villagesights.htm
+http://www.interfire.org/features/anti-arson.asp
+http://www.interfire.org/features/legalview.asp?date=08122002
+http://www.interfire.org/res_file/nfpaj_ar.asp
+http://www.intergate.com/~jcordaro/Finney%D5s_Let_to_Parents_1.html
+http://www.intergate.com/~spentron/unreal/
+http://www.interim.co.kr/limerick/univ/ire_economic.html
+http://www.interiordesign.edu/
+http://www.interiordesign.net/id_article/CA370931/id?stt=001
+http://www.interiordesign.net/id_article/CA482348/id
+http://www.interjournal.org/manuscript_abstract.php?24206
+http://www.interlog.com/~funnyboy/cinrev.htm
+http://www.interlog.com/~temc/
+http://www.intermargins.org/about_intermargins.html
+http://www.internalcontrolsdesign.co.uk/reportdesign/
+http://www.international-relations.com/
+http://www.international.ucla.edu/africa/article.asp?parentid=9415
+http://www.international.ucla.edu/article.asp?parentid=20198
+http://www.international.ucla.edu/article.asp?parentid=3915
+http://www.international.ucla.edu/asia/article.asp?parentid=20198
+http://www.international.ucla.edu/cseas/article.asp?parentid=6780
+http://www.international.ucla.edu/cseas/print.asp?parentid=6780
+http://www.international.utas.edu.au/static/studyAbroad/FAQS.php
+http://www.internationalairportguide.com/atlanta_atl.html
+http://www.internationalassociationofcoaches.org/15prof.html
+http://www.internationalfengshui.com/fs_yearrooster.htm
+http://www.internationalglassreview.com/default.asp?Page=1&SID=465175&ISS=12488
+http://www.internationalrelations.ca/intern.html
+http://www.internationalreports.net/africa/tunisia/2004/interview.html
+http://www.internationalstudent.com/discussions/archive.php/o_t__t_1452__advice-about-visas.html
+http://www.internationaltaxreview.com/?Page=10&PUBID=35&ISS=14052&SID=494397&TYPE=20
+http://www.internationaltouch.com.au/news_print.html?oid=1252003
+http://www.internationalviewpoint.org/article.php3?id_article=815
+http://www.internationalwindsurfing.com/default.asp?menu=46&parent=15&grandparent=3
+http://www.internest.com/concertamericanhomes/concertamericanhomes14305.asp
+http://www.internest.com/concertamericanhomes/concertamericanhomes15453.asp
+http://www.internest.com/norwood/norwood8946.asp
+http://www.internest.com/norwood/norwood8947.asp
+http://www.internest.com/oakcityhomes/oakcityhomes18102.asp
+http://www.internest.com/pultehomeshouston/pultehomeshouston12744.asp
+http://www.internest.com/vistahomes/vistahomes12258.asp
+http://www.internest.com/xyz/newsletter/newsdetail.asp
+http://www.internest.com/xyz/newsletter/pricing.asp
+http://www.internet-effects.com/index/policies.htm
+http://www.internet-health-directory.com/Alternative_Holistic_and_Integrated_Medicine_Alternative_Cancer_Treatment.html
+http://www.internet-health-directory.com/Conditions_and_Diseases_Infectious_Diseases_Zoonoses.html
+http://www.internet-health-directory.com/Support_Groups_Conditions_and_Diseases_Facial_Differences.html
+http://www.internet-home-business.org/search3.htm
+http://www.internet-librarian.com/Monday.shtml
+http://www.internet-librarian.com/tuesday.shtml
+http://www.internet-soft.com/affiliat.htm
+http://www.internet4classrooms.com/career.htm
+http://www.internet4classrooms.com/month2month.htm
+http://www.internetautoguide.com/
+http://www.internetautoguide.com/reviews/45-int/sedans/lincoln/town-car/1999/
+http://www.internetbasedmoms.com/business-success-stories/
+http://www.internetcamcordersdirect.co.uk/
+http://www.internetcamcordersdirect.co.uk/?campaign=internetcamerasdirect_468x60_c01
+http://www.internetfitness.com/articles/fitness_evaluate.htm
+http://www.internetfitness.com/articles/fitness_treadmill.htm
+http://www.internetghana.com/ceo.htm
+http://www.internetmarketingforsmallbusiness.com/
+http://www.internetmonk.com/archives/2005/01/019830.html
+http://www.internetnews.com/dev-news/article.php/3400941
+http://www.internetretailer.com/article.asp?id=9881
+http://www.internetsportstravel.com/Puma_International_soccer_camp.htm
+http://www.internettexasholdem.com/phpbb2/poker_strategy_forum/william-hill-poker-reviews-598_30.htm
+http://www.internettexasholdem.com/phpbb2/sun-feb-06-2005-848-pm-vp104284.html
+http://www.internettg.org/newsletter/june98/web_design.html
+http://www.internetvalley.com/archives/apr99/magrank1.html
+http://www.internetwatch.org.uk/government/page.101.222.htm
+http://www.internetwk.com/columns00/rob060500.htm
+http://www.internetwork.ca/register/tips/
+http://www.internetworldstats.com/surfing.htm
+http://www.internjobs.com/jobSeekers/resources/bliss/april2003.html
+http://www.internotes.com/index.cfm?fuseaction=dealer.main
+http://www.internshipberlin.com/warumwowie.asp
+http://www.interoute.com/products_share_labels.html
+http://www.interpol.com/Public/WorkOfArt/
+http://www.interpol.com/Public/WorkOfArt/Default.asp
+http://www.interpol.int/Public/Children/SexualAbuse/NationalLaws/csaRussia.asp
+http://www.interpol.int/Public/Region/Europe/pjsystems/Germany.asp
+http://www.interpon.com/about/environment.asp
+http://www.interpunk.com/item.cfm?Item=108189&
+http://www.interracialvoice.com/landrith3.html
+http://www.interreg.ie/ict.html
+http://www.intertanko.com/
+http://www.intertext.com/magazine/v13n2/eveningtide.html
+http://www.intertext.com/magazine/v4n3/wineandcheese.html
+http://www.intertwingly.net/blog/1502.html
+http://www.interuniv.isig.it/FAQs.html
+http://www.intervarsity.org/cbs/info.php?id=3067
+http://www.intervarsity.org/news/news.php?item_id=816
+http://www.intervarsity.org/slj/article/2430
+http://www.intervarsity.org/slj/su00/su00_cs_addiction_or_balance.html
+http://www.interventionmag.com/cms/modules.php?file=article&name=News&op=modload&sid=89
+http://www.interviews-with-poets.com/john-ashbery/ashbery-note.html
+http://www.interweave.com/spin/projects/rare_wools.asp
+http://www.inthe00s.com/index.php/topic,117.0/prev_next,prev.html
+http://www.inthe00s.com/index.php/topic,5117.0.html
+http://www.inthe80s.com/adsmusic/c.shtml
+http://www.inthe80s.com/adsmusic/l.shtml
+http://www.inthe80s.com/feelold.shtml
+http://www.inthe80s.com/latest/1100152800.shtml
+http://www.inthe80s.com/perfectvideos/a.shtml
+http://www.intheagora.com/archives/2005/02/okay_so_we_prob.html
+http://www.inthebite.com/special_events/index.shtml
+http://www.intheknowzone.com/whattosay/reasons.htm
+http://www.inthemix.com.au/forum/showthread.php?t=118202
+http://www.inthenationalinterest.com/Articles/October2004/October2004Kohlhaas.html
+http://www.inthenationalinterest.com/Articles/October2004/October2004KohlhaasPFV.html
+http://www.inthenationalinterest.com/Articles/October2004/October2004Realist.html
+http://www.inthenationalinterest.com/Articles/Vol3Issue15/Vol3Issue15Boyko.html
+http://www.inthesetimes.com/comments.php?id=514_0_4_0_C
+http://www.inthesetimes.com/comments.php?id=672_0_1_0_C
+http://www.inthesetimes.com/issue/25/13/moberg2513.html
+http://www.inthesetimes.com/projectcensored/stclair2323new.html
+http://www.inthesetimes.com/site/main/article/1351/
+http://www.inthesetimes.com/site/main/article/2136/
+http://www.inthesetimes.com/site/main/article/521/
+http://www.inthesetimes.com/site/main/article/578/
+http://www.inthesetimes.com/site/main/article/979/
+http://www.intime.uni.edu/model/democracy/thin.html
+http://www.intindian.com/issues/012.05/business.htm
+http://www.intix.org/news.php?ArticleID=839
+http://www.intix.org/news.php?ArticleID=867
+http://www.intjrehabilres.com/pt/re/intjrr/fulltext.00004356-200212000-00001.htm
+http://www.intl.boun.edu.tr/yos.html
+http://www.intl.elsevierhealth.com/catalogue/title.cfm?ISBN=0750640766
+http://www.intouch.org/myintouch/exploring/studies/FSSG_92339.html
+http://www.intouchmission.org/reports/archives/cat_presidents_page.html
+http://www.intoxica.co.uk/jbrown.htm
+http://www.intracen.org/textilesandclothing/projects_technical_assistance.htm
+http://www.intrafish.com/intrafish-analysis/hss_1999_47_eng/print.php3
+http://www.intrafish.com/laws-and-regulations/report_bc/v4c_iii.htm
+http://www.intranetjournal.com/articles/200412/pij_12_17_04a.html
+http://www.intranets.com/ProductInfo/Intranet_Customers/TEG_Federal_Credit_Union.asp
+http://www.intraval.nl/nl/a/a01_chapter1.html
+http://www.intraval.nl/nl/a/a01_chapter7.html
+http://www.intrepidsoftware.com/sgadd/
+http://www.intrepidtravel.com/challenges_trek.php
+http://www.intrigue.co.uk/personal/lifewithjj7.shtml
+http://www.intrinxec.com/fcbpw.htm
+http://www.intstudy.com/india/entryuk.htm
+http://www.intstudy.com/study_abroad/livfiles/nvisas02.htm
+http://www.intug.net/views/europe/universal_access.html
+http://www.intuitive.com/blog/archives/000811.html
+http://www.intuitive.com/blog/general_motors_miffed_at_la_times_review_pulls_all_advertising.html
+http://www.invacare.com/
+http://www.invasivespecies.gov/council/profiles.shtml
+http://www.inventionconvention.com/inventorsvoice/report/section21.html
+http://www.inventorfraud.com/ndcode.htm
+http://www.inventtomorrow.com/Econ_Dev/State%20Dev.html
+http://www.inventtomorrow.com/archives/Minutes_March%2015_2004.html
+http://www.invest-in-germany.de/en/news/newsletter/index.php?topcat=11129721221908939322
+http://www.investing.rutgers.edu/unit03.html
+http://www.investis.com/dixons/annual-report-2002/3-6.html
+http://www.investissementresponsable.com/textes/what.html
+http://www.investmentrarities.com/bestofjm01-17-05.htm
+http://www.investmentrarities.com/weeklycommentary.html
+http://www.investmentu.com/IUEL/2004/20040811.html
+http://www.investmentwatch.org/theissue.html
+http://www.investopedia.com/articles/04/020404.asp
+http://www.investopedia.com/articles/basics/03/080103.asp
+http://www.investopedia.com/articles/optioninvestor/02/030102.asp
+http://www.investopedia.com/categories/taxes.asp
+http://www.investopedia.com/terms/c/carryingcharge.asp
+http://www.investopedia.com/university/economics/economics4.asp
+http://www.investopedia.com/university/fiveminute/fiveminute9.asp
+http://www.investopedia.com/university/mergers/mergers1.asp
+http://www.investopedia.com/university/retirementplans/qualifiedplan/
+http://www.investopedia.com/university/tm/TradingStrategies/FindingTheBestFishInTheStockOcean.asp
+http://www.investorguide.com/cgi-bin/stock.cgi?stock=ETM
+http://www.investorguide.com/igustockchoose.html
+http://www.investors.com/breakingnews.asp?journalid=23398630&brk=1
+http://www.investors.com/breakingnews.asp?journalid=27991515&brk=1
+http://www.investors.com/editorial/tech01.asp?v=1/27
+http://www.investorsinpeople.co.uk/IIP/Internet/ResearchandDevelopment/Research/CaseStudies/Ashwell+Pupil+Referral+Unit.htm
+http://www.investorsobserver.com/DoN_portfolio_info.asp
+http://www.invinciblemilitary.org/
+http://www.invinciblemusic.com/ricflauding.htm
+http://www.invisibleadjunct.com/archives/000004.html
+http://www.invisibleadjunct.com/archives/000130.html
+http://www.invisibleadjunct.com/archives/000416.html
+http://www.invisibleadjunct.com/archives/000497.html
+http://www.invisiblejames.com/2005/01/29/
+http://www.invisiondigital.com/interview-mk.html
+http://www.invitrotech.com/employment.cfm
+http://www.invoicedealers.com/cars/Features.asp?model=1944&modelname=Ford+F350+Super+Duty
+http://www.invoicedealers.com/cars/Features.asp?model=2007&trim=12320
+http://www.inwardjourney.com/2004PresidentialElection.htm
+http://www.inwent.org/E+Z/1997-2002/de502-7.htm
+http://www.inwriting.org/weblog/archives/000164.html
+http://www.inxservices.com/SOM/noframes/som/student_poetry.html
+http://www.io-software.com/news/pr_november_301104_e.jsp
+http://www.io.com/~bmokeefe/dragon/
+http://www.io.com/~hcexres/tcm1603/acchtml/book_design.html
+http://www.io.com/~hcexres/tcm1603/acchtml/reportsq.html
+http://www.io.com/~kinnaman/aupessay.html
+http://www.io.com/~snewton/zen/sanskrit.html
+http://www.io.com/~tyrbiter/eb.1.html
+http://www.io.com/~woodward/d7/gccookie.html
+http://www.ioba.org/newsletter/committee0400.html
+http://www.ioe.ac.uk/thisweek/TW12062000.htm
+http://www.ioffer.com/
+http://www.ioffer.com/c/Running-Springs-92382/Coins-Money-130000
+http://www.ioffer.com/shops/northspoon
+http://www.iohio.org/en/recent.htm
+http://www.ioko365.com/DAIS/CRM/CRM+Perspectives/
+http://www.iol.co.za/html/frame_sport.php?click_id=79&art_id=ct20010310185508887P200311
+http://www.iol.co.za/index.php?click_id=19&art_id=qw1107706321101B216
+http://www.iol.co.za/index.php?set_id=1&click_id=&art_id=qw1107517320504B263
+http://www.iol.co.za/index.php?set_id=1&click_id=24&art_id=qw1107092340335B211
+http://www.iol.co.za/index.php?set_id=1&click_id=29&art_id=qw1107092340335B211
+http://www.iol.co.za/index.php?set_id=1&click_id=31&art_id=qw1100213642791B252
+http://www.iol.co.za/index.php?set_id=3&click_id=270
+http://www.iol.co.za/index.php?set_id=6&click_id=2829&art_id=qw1082822940617S163
+http://www.iol.co.za/index.php?set_id=6&click_id=2829&art_id=qw1105195681432S163
+http://www.iol.co.za/index.php?set_id=6&click_id=2829&art_id=qw110520396132S163
+http://www.iol.co.za/index.php?set_id=6&click_id=2829&art_id=qw1105259583336B216
+http://www.iol.co.za/index.php?set_id=6&click_id=2830&art_id=qw1078129270530S163
+http://www.iol.co.za/index.php?set_id=6&click_id=2830&art_id=qw110550654291F452
+http://www.iol.co.za/index.php?set_id=6&click_id=2910
+http://www.iol.co.za/index.php?set_id=6&click_id=38&art_id=qw1106284514471B216
+http://www.iol.co.za/index.php?set_id=6&click_id=582&art_id=qw1089471781418B262
+http://www.iol.ie/~duacon/wompr3.htm
+http://www.iol.ie/~duacon/wompr8.htm
+http://www.iol.ie/~locka/mozilla/faq.htm
+http://www.iolfree.ie/~kerryhouse/
+http://www.iom-rqa.org/news_full.asp?id=15
+http://www.iom.edu/view.asp?id=5061
+http://www.iona.com/blogs/vinoski/
+http://www.iop.kcl.ac.uk/iopweb/departments/research/default.aspx?locator=375
+http://www.iop.org/EJ/abstract/0954-3899/17/2/001
+http://www.iop.org/EJ/abstract/0954-3899/18/9/014
+http://www.iop.org/EJ/abstract/1126-6708/1999/11/031
+http://www.iop.org/EJ/abstract/1126-6708/2003/07/069
+http://www.ioplex.com/~miallen/libmba/
+http://www.iopp.org/pages/index.cfm?pageid=312
+http://www.iorg.com/papers/amdahl/adapt.html
+http://www.iosn.net/events/asiasource-2005/faq
+http://www.iospress.nl/html/01672533_ita.html
+http://www.iospress.nl/html/15741702_ita.html
+http://www.iot.ac.jp/english/institute.html
+http://www.iovs.org/cgi/content/full/40/12/2803
+http://www.iowa3rdcavalry.com/jonasroe.html
+http://www.iowaaflcio.org/vol_3-02_sept.htm
+http://www.iowadnr.com/parks/state_park_list/union_grove.html
+http://www.iowadnr.com/water/tmdlwqa/pres_pub.html
+http://www.iowaflags.org/faq.html
+http://www.iowalum.com/magazine/jun04/moving_beyond.html
+http://www.iowapolicyproject.org/
+http://www.iowapork.org/rscinfo/forecast_2005i.html
+http://www.iowaruralwater.org/news.html
+http://www.iowastatedaily.com/vnews/display.v/ART/2004/08/19/41450d9b337f4?in_archive=1
+http://www.iowastatedaily.com/vnews/display.v/ART/2005/01/31/41fdbd3db08c6?in_archive=1
+http://www.iowaworkforce.org/region3/technology.htm
+http://www.iowest.com/shows/special
+http://www.ipa.ie/?id=54
+http://www.ipa.org.au/files/news_722.html
+http://www.ipaqchoice.com/ESDCategory.aspx?cat=1001
+http://www.ipaqchoice.com/ESDProduct.aspx?cat=33
+http://www.iparliament.com.au/hansard.asp?id=13
+http://www.ipartnersinc.net/newsletter/
+http://www.ipaustralia.gov.au/resources/news_new.shtml
+http://www.ipaustralia.gov.au/smart_start/c4p1.shtml
+http://www.ipcs.org/Nuclear_articles2.jsp?action=showView&kValue=1615&issue=1015&status=article&mod=a
+http://www.ipcs.org/nmt_criminal.jsp
+http://www.ipcs.org/whatsNewArticle1.jsp?action=showView&kValue=1633&status=article&mod=b
+http://www.ipenz.org.nz/ipenz/media_comm/2005/convention_Turkington.cfm
+http://www.ipenz.org.nz/ipenz/media_comm/2005/convention_turkington.cfm
+http://www.ipf.co.uk/bestvalue/CRS/agendas/performancemgt/february2005.htm
+http://www.ipfw.edu/senate/Minutes/2000-01/Minutes6.htm
+http://www.iphotocentral.com/advertise/advertise.php
+http://www.ipi.uni-hannover.de/html/forschung/laufend/wipka/wipka.htm
+http://www.ipia.ie/oilbrief/climate_change.htm
+http://www.ipjur.com/episwpat.php3
+http://www.ipl.org/div/aon/browse/ent50.00.00/
+http://www.ipl.org/div/aon/browse/hum20.00.00/
+http://www.ipl.org/div/serials/browse/hum00.00.00/
+http://www.ipl.org/div/subject/browse/com10.00.00/
+http://www.ipl.org/div/subject/browse/ent30.00.00/
+http://www.ipls.org.nz/Acceptable_Use.html
+http://www.ipmall.info/hosted_resources/exams/97-Fall-SPORTS-LAW.html
+http://www.ipmalmanac.com/basics/beneficial.asp
+http://www.ipmenu.com/archive/May2001toJune2001.htm
+http://www.ipmenu.com/iptranslation.htm
+http://www.ipmenu.com/patentresources.htm
+http://www.ipmsitaly.com/faq/ModelFAQ10.html
+http://www.ipn.uni-kiel.de/projekte/ioste/sympos.htm
+http://www.ipoaa.com/voodoo.htm
+http://www.ipodlounge.com/articles_more.php?id=5941_0_8_0_C
+http://www.ipodlounge.com/articles_more.php?id=6226_0_8_0_C
+http://www.ipodlounge.com/index.php/reviews/comments/4454/
+http://www.ipodlounge.com/reviews_more.php?id=3986_0_6_0_M
+http://www.ipplc.com/ipplc/media/newsreleases/2000/2000-08-21/
+http://www.ippublishing.com/abstract_tourism.htm
+http://www.ipre.com/selling/index.shtml
+http://www.iproject.com/escher/teaching/beyondcraft.html
+http://www.iprsonline.org/unctadictsd/dialogue/2005-01-17/2005-01-17_desc.htm
+http://www.ips-dc.org/colombian_unionists/moises.htm
+http://www.ips-dc.org/comment/Bennis/demendoc.htm
+http://www.ips-dc.org/comment/Bennis/tp23debates.htm
+http://www.ips-dc.org/iraq/primer3.htm
+http://www.ips-dc.org/iraq/talkingpoints.htm
+http://www.ipsea.org.uk/sundaytimes.htm
+http://www.ipsen.com/
+http://www.ipsnews.co.th/writingpeace/features/thailand.html
+http://www.ipsnews.net/new_nota.asp?idnews=28414
+http://www.ipsnews.net/news.asp?idnews=29057
+http://www.ipsos.ca/ideas/
+http://www.ipsos.ca/prod/syndicated/
+http://www.iptv.org/about_online_roadrules.cfm
+http://www.iptv.org/k12catalog/list_detail.cfm?showID=135
+http://www.ipu.org/conf-e/110/110-2.htm
+http://www.ipv6forum.org/modules.php?op=modload&name=News&file=index
+http://www.irahelp.com/pr_041702.shtml
+http://www.iran-bulletin.org/IBMEF_1_word%206%20files/No%20Blood%20for%20Oil.htm
+http://www.iran-e-azad.org/english/maryam/March8/Chapter3.html
+http://www.iran-press-service.com/ips/articles-2004/march/index.shtml
+http://www.iran-press-service.com/ips/articles-2004/may/hedayat_hunger_strike_13504.shtml
+http://www.iranchamber.com/culture/articles/persian_roots_christian_traditions.php
+http://www.iranchamber.com/history/articles/arming_iraq.php
+http://www.iranian.ws/iran_news/publish/article_4286.shtml
+http://www.iranian.ws/iran_news/publish/article_7493.shtml
+http://www.iraniantrade.org/
+http://www.iranite.com/can_a_war_ever_be_just.htm
+http://www.irankicks.com/ikboard/archive/index.php/t-22518.html
+http://www.iranpressnews.com/english/source/003613.html
+http://www.iraqbodycount.net/coverage/time_20oct2003.php
+http://www.iraqbodycount.net/press/
+http://www.iraqbodycount.net/resources/falluja/
+http://www.iraqcoalition.org/pressreleases/20040511_media.html
+http://www.iraqcoalition.org/transcripts/20040320_Mar20_KimmittSenor.html
+http://www.iraqcoalition.org/transcripts/20040609_Wolfowitz_roadmap.html
+http://www.iraqfoundation.org/news/2003/isept/22_part2.html
+http://www.iraqfoundation.org/news/2003/joct/16_eden.html
+http://www.iraqitradeunions.org/archives/000177.html
+http://www.iraqoccupationfocus.org.uk/
+http://www.iraqoccupationfocus.org.uk/socu.htm
+http://www.iraqwatch.org/un/UNSCOM/1051/s-1999-401.htm
+http://www.irc-online.org/content/bulletin/bull43.php
+http://www.irc.org/tech_docs/TS-Delay.html
+http://www.irchelp.org/irchelp/communication-research/mass-media/mass-media-dreyfus-s-1997.html
+http://www.ircnet.lu/matching/completerec.cfm?BBS_ID=13794&org=106&back=true
+http://www.irconnect.com/untd/conf/3q2003_transcript.html
+http://www.ird.gov.hk/eng/paf/bus_pft_tsp.htm
+http://www.ird.govt.nz/businesses/yoursituation-bus/starting/
+http://www.ird.govt.nz/fbt/returns/
+http://www.ird.govt.nz/forms-guides/keyword/childsupport/custodians/ir167-guide-cs-returning-to-work.html
+http://www.ird.govt.nz/forms-guides/keyword/childsupport/ir167-guide-cs-returning-to-work.html
+http://www.ird.govt.nz/forms-guides/keyword/gst/ir323-guide-record-keeping.html
+http://www.ird.govt.nz/forms-guides/number/forms-300-399/ir323-guide-record-keeping.html
+http://www.ird.govt.nz/future-IR/childsupport/paying-parents/cs-whentocontact.html
+http://www.irda.qc.ca/Site_anglais/propos_a/propos_a.htm
+http://www.ired.com/news/lieberman/000806.htm
+http://www.iredellems.com/personnel/employees/ICEMS%20Protocol%20Web/Administrative%20Pages/deceased_subjects.htm
+http://www.ireggae.com/midniteloveright.htm
+http://www.irelan.net/becoming/archives/2003_04.shtml
+http://www.ireland-ac.com/antrim/self-catering-accommodation-antrim.htm
+http://www.ireland-accommodation-directory.com/ed/general/bizopp.htm
+http://www.ireland-information.com/nov04.htm
+http://www.ireland-now.com/visiting/expenses.html
+http://www.ireland.com/focus/election_2002/boom/boom1.htm
+http://www.ireland.com/newspaper/front/2001/1220/
+http://www.ireland.com/newspaper/front/2005/0202/1925445434HM1CENTRALBANK.html
+http://www.irelandforvisitors.com/articles/kilkenny_med_city.htm
+http://www.irelandin1.com/ireland_hotels/hotel_pages/kilronan_house_guesthouse_dublin.jsp?countyID=Dublin
+http://www.irelandview.com/clare-festivals.php
+http://www.irex.org/programs/completed/sproj/libreports/tbilisi.asp
+http://www.irex.org/pubs/frontline/fall98/exchanges.asp
+http://www.irfs.org.uk/docs/future/03.htm
+http://www.irfs.org.uk/docs/future/04.htm
+http://www.irfs.org.uk/docs/future/05.htm
+http://www.irfs.org.uk/docs/future/12.htm
+http://www.irfs.org.uk/docs/future/exec.htm
+http://www.irfs.org.uk/docs/future/recommend.htm
+http://www.irfs.org.uk/docs/positionpaper/
+http://www.iri.org/11-09-04-nytimes.asp
+http://www.iri.org/countries.asp?id=1102928473
+http://www.iridescent-publishing.com/msc/msc13.htm
+http://www.irinfo.org/Articles/article_6_2005_handlin.html
+http://www.irinnews.org/report.asp?ReportID=36152&SelectRegion=West_Africa&SelectCountry=NIGERIA
+http://www.irinnews.org/report.asp?ReportID=44244&SelectWeekly=Weekly&WRegion=Southern_Africa
+http://www.irinnews.org/report.asp?ReportID=45098&SelectRegion=East_Africa&SelectCountry=SUDAN
+http://www.irinnews.org/report.asp?ReportID=45801&SelectRegion=West_Africa
+http://www.irinnews.org/report.asp?ReportID=45801&SelectRegion=West_Africa&SelectCountry=BENIN
+http://www.irinnews.org/report.asp?ReportID=46704&SelectRegion=Asia
+http://www.irinnews.org/report.asp?ReportID=47321&SelectRegion=Asia
+http://www.irinnews.org/report.asp?ReportID=47321&SelectRegion=Asia&SelectCountry=UZBEKISTAN
+http://www.irinnews.org/report.asp?ReportID=47399&SelectRegion=Asia&SelectCountry=NEPAL
+http://www.irinnews.org/report.asp?ReportID=47544&SelectRegion=Southern_Africa
+http://www.irinnews.org/webspecials/DR/47338.asp
+http://www.irinnews.org/webspecials/Guinea/501245gr.asp
+http://www.irinnews.org/webspecials/guinea/501245gr.asp
+http://www.irish-architecture.com/onsite/urban_editing/indus.html
+http://www.irish-eyes.com/growers/index.php?growerchoice=1
+http://www.irishcultureandcustoms.com/3Focloir/2Index.html
+http://www.irishecho.com/newspaper/story.cfm?id=15892
+http://www.irishemigrant.com/article.asp?iCategoryID=200&iArticleID=34179
+http://www.irishexaminer.com/text/story.asp?j=138617347736&p=y386y734793z&n=138617347965
+http://www.irishexaminer.com/text/story.asp?j=310474569674&p=3yx47457xyy3&n=310474570189
+http://www.irishhealth.com/?level=4&con=462
+http://www.irishhealth.com/?level=4&con=462&var=print
+http://www.irishhealth.com/?level=4&id=1073
+http://www.irishhealth.com/?level=4&id=3781
+http://www.irishhealth.com/?level=4&id=3991
+http://www.irishhealth.com/?level=4&id=4491
+http://www.irishhealth.com/?level=4&id=5016
+http://www.irishhealth.com/?level=4&id=5506
+http://www.irishhealth.com/?level=4&id=6463
+http://www.irishhealth.com/?level=4&id=7641
+http://www.irishlassie.com/ICQ/stars.html
+http://www.irishlifepermanent.ie/ipm/media/pressreleases/permtsb/ptsb2005/2005-01-28/
+http://www.irishnews.com/championship2005/football/tyrone.html
+http://www.irishpatients.ie/index.cfm/loc/2-1/pt/0/spid/C78523FA-065A-44FD-B71CDA5B3481302B.htm
+http://www.irishrail.ie/breaks_and_trips/south_east.asp
+http://www.irishreader.com/Features/Coll.htm
+http://www.irishscientist.ie/2000/contents.asp?contentxml=016s.xml&contentxsl=insight3.xsl
+http://www.irishstatutebook.ie/1993_18.html
+http://www.irishweavers.com/?/
+http://www.irishweavers.com/corporate/
+http://www.iriveramerica.com/support/ultra/iFP_FAQ.aspx
+http://www.irlgov.ie/committees-99/c-enterprise/rep-superstores/default.htm
+http://www.irmep.org/Policy_Briefs/3_27_2003_Clean_Break_or_Dirty_War.html
+http://www.irmi.com/Insights/Articles/2002/Olson07.aspx
+http://www.irmi.com/expert/articles/rossi003.asp
+http://www.irn.org/pubs/wrr/9701/japan.html
+http://www.irnes.com/virtual-org.htm
+http://www.irocracing.com/current_season/series.html
+http://www.irokotheatre.org.uk/press.html
+http://www.irondale.org/gguide/pyc.htm
+http://www.ironmanflorida.com/
+http://www.irontontribune.com/articles/2005/01/30/news/news470.txt
+http://www.irontontribune.com/articles/2005/02/04/news/news470.txt
+http://www.iroquoisfalls.com/interest_items/pedskalny2003/trapped_in.htm
+http://www.irp.wisc.edu/faqs/faq3.htm
+http://www.irp.wisc.edu/publications/dps/dpabs2002.htm
+http://www.irrawaddy.org/database/2004/vol12.3/cover1.html
+http://www.irregularoo.com/goods2.html
+http://www.irregulartimes.com/americatown.html
+http://www.irregulartimes.com/irregularribbons.html
+http://www.irregulartimes.com/trees.html
+http://www.irreverence.ismagical.com/Irrevuglytruth.html
+http://www.irri-kiib.be/speechnotes/04/041020-wolfensohn.htm
+http://www.irrs.ie/Common%20Files/archiveUTA.htm
+http://www.irs.aber.ac.uk/research/fbs.shtml
+http://www.irs.gov/app/understandingTaxes/jsp/whys/lp/IWT2L6lp.jsp
+http://www.irs.gov/businesses/page/0,,id%3D7039,00.html
+http://www.irs.gov/businesses/page/0,,id%3D7043,00.html
+http://www.irs.gov/businesses/page/0,,id%3D7065,00.html
+http://www.irs.gov/faqs/faq-kw189.html
+http://www.irs.gov/faqs/faq-kw23.html
+http://www.irs.gov/irb/2005-02_IRB/ar14.html
+http://www.irs.gov/irm/part4/ch45s02.html
+http://www.irs.gov/irm/part5/ch10s03.html
+http://www.irs.gov/privacy/article/0,,id=131233,00.html
+http://www.irs.gov/privacy/article/0,,id=131238,00.html
+http://www.irs.gov/publications/p3/ar02.html
+http://www.irs.gov/publications/p3/ix01.html
+http://www.irs.gov/publications/p530/ar02.html
+http://www.irs.gov/publications/p550/ch02.html
+http://www.irs.gov/publications/p553/ch02.html
+http://www.irs.gov/retirement/article/0,,id=123290,00.html
+http://www.irsa.asn.au/3.html
+http://www.irt.org/software/sw017/
+http://www.irtces.org/isshhu/isfd04.htm
+http://www.irtheory.com/know.htm
+http://www.irvineayrshire.org/burns/hon1965etseq.htm
+http://www.irvingisd.net/districtweekly/weekly133.htm
+http://www.irvingstudios.com/child_abuse_survivor_monument/PublicAware.htm
+http://www.irwebreport.com/perspectives/2004/firefox.htm
+http://www.irwinabrams.com/books/excerpts/annual94.html
+http://www.irwinlaw.com/
+http://www.is.mcgill.ca/studentaid/workstudy/employer.htm
+http://www.isa.org/InTechTemplate.cfm?Section=InTech&template=/ContentManagement/ContentDisplay.cfm&ContentID=20066
+http://www.isa.org/InTechTemplate.cfm?Section=InTech&template=/ContentManagement/ContentDisplay.cfm&ContentID=44005
+http://www.isa.org/PrinterTemplate.cfm?Section=InTech&template=/ContentManagement/ContentDisplay.cfm&ContentID=20066
+http://www.isa.org/Template.cfm?Section=Education_and_Training&template=/TaggedPage/DetailDisplay.cfm&ContentID=39706
+http://www.isa.org/Template.cfm?Section=Education_and_Training&template=/TaggedPage/DetailDisplay.cfm&ContentID=42005
+http://www.isa.org/Template.cfm?Section=InTech&template=/ContentManagement/ContentDisplay.cfm&ContentID=20066
+http://www.isaca.org/TemplateRedirect.cfm?template=/ContentManagement/ContentDisplay.cfm&ContentID=7890
+http://www.isaca.org/TemplateRedirect.cfm?template=/ContentManagement/ContentDisplay.cfm&ContentID=9442
+http://www.isag.org.uk/journal/comparisonguide.asp
+http://www.isandiegorealestate.com/relocation_b.htm
+http://www.isanet.org/handbook/regionsc.html
+http://www.isanet.org/noarchive/hannaojanen.html
+http://www.isaserver.org/tutorials/sqlinstallingthetools.html
+http://www.isbd.org/australian_conference.htm
+http://www.isbe.man.ac.uk/courses/MSc_Opportunities/msc_prospectus/overview.htm
+http://www.isceast.com/App/homepage.cfm?appname=100036&moduleid=327
+http://www.ischool.utexas.edu/~rpollock/tla2001/talk01.html
+http://www.iscifistory.com/forums/forum/topic.asp?TOPIC_ID=720
+http://www.isd77.k12.mn.us/board/m031215.htm
+http://www.isdesignet.com/ED/ED9/pre_events.html
+http://www.ise5-14.org.uk/Prim3/New_Guidelines/Levels_SS/topics-c.htm
+http://www.ise5-14.org.uk/Prim3/New_Guidelines/Levels_SS/topics-d.htm
+http://www.ise5-14.org.uk/Prim3/New_Guidelines/Levels_SS/topics-e.htm
+http://www.isec2000.org.uk/abstracts/papers_g/grol_1.htm
+http://www.isec2000.org.uk/abstracts/papers_m/marston_1.htm
+http://www.iseek.org/sv/13000.jsp?id=100172
+http://www.iseek.org/sv/13000.jsp?id=100179
+http://www.iseek.org/sv/13000.jsp?id=100238
+http://www.iseek.org/sv/13000.jsp?id=100250
+http://www.iseek.org/sv/13000.jsp?id=100331
+http://www.iseek.org/sv/22030.jsp?id=161300
+http://www.iseek.org/sv/46001.jsp?id=273031
+http://www.iseekgolf.com/courses/course_detail.php?c_id=1915
+http://www.iseekgolf.com/view_articles.php/1413/1/5492/3/39/343/1/
+http://www.isellpot.ws/distribution/16home.htm
+http://www.isenberg.umass.edu/alumni/cw/s04/Classnotes/
+http://www.isep.org/us/va/
+http://www.iserv.net/~alexx/lib/tutorial.htm
+http://www.isg.rhul.ac.uk/msc/info.shtml
+http://www.isgb.org/forum/ubbthreads/showflat.php?Cat=&Board=beadtechniques&Number=55546&Main=55143
+http://www.isgplanning.com/FAQs.htm
+http://www.isham-research.com/quattro/tla.html
+http://www.ishecheatingonyou.com/5.htm
+http://www.ishib.org/newsletter/vol_3_3.html
+http://www.ishiboo.com/~nirva/Kitty/
+http://www.ishipress.com/breakup.htm
+http://www.ishipress.com/donaldso.htm
+http://www.ishn.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2162,1733,00.html
+http://www.ishn.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2162,3141,00.html
+http://www.ishr.ch/About%20UN/Reports%20and%20Analysis/CESCR/CESCR-26thSession.htm
+http://www.ishrs.org/articles/hair-recipient-site.htm
+http://www.ishwar.com/history.html
+http://www.isi.edu/natural-language/news.html
+http://www.isi.salford.ac.uk/dooy/thinking.html
+http://www.isic.org/sisp/?fx=theme&loc_id=131659&cat_id=2233
+http://www.isicus.com/MyISIC/IssuingOffice/apply.aspx
+http://www.isidore-of-seville.com/angels/10.html
+http://www.isidore-of-seville.com/machu/4.html
+http://www.isil.org/
+http://www.isilox.com/support/manual/ixl/ixlTextOptions.htm
+http://www.isis-group.com/MF-800-Note.htm
+http://www.isis.or.ug/knowhow/nextkw.html
+http://www.isisweb.org/jobs.htm
+http://www.isiswomen.org/wia/wia299/agr00001.html
+http://www.isixsigma.com/library/content/c040209a.asp
+http://www.islam-online.net/English/News/2001-09/13/article22.shtml
+http://www.islam-online.net/English/News/2001-11/17/article15.shtml
+http://www.islam.co.za/abdalqadirjilani/about.htm
+http://www.islamanswers.net/science/physics.htm
+http://www.islamanswers.net/unity/schools.htm
+http://www.islamfortoday.com/athar02.htm
+http://www.islamfortoday.com/ummzaid01.htm
+http://www.islamfortoday.com/womensrightsbadawi.htm
+http://www.islamic-awareness.org/Quran/Science/scientists.html
+http://www.islamic-bank.com/islamicbanklive/BankingTerms/1/Home/1/Home.jsp
+http://www.islamicvoice.com/august.2004/cr.htm
+http://www.islamicvoice.com/august.2004/embrace.htm
+http://www.islamicweb.com/beliefs/fiqh/alalwani_usulalfiqh/ch4.htm
+http://www.islamistwatch.org/texts/qutb/Milestones/culture.html
+http://www.islamonline.com/cgi-bin/news_service/fatwah_story.asp?service_id=256
+http://www.islamonline.com/cgi-bin/news_service/fatwah_story.asp?service_id=291
+http://www.islamonline.com/cgi-bin/news_service/fatwah_story.asp?service_id=466
+http://www.islamonline.com/cgi-bin/news_service/spot_full_story.asp?service_id=678
+http://www.islamonline.net/English/In_Depth/volunteers/2005/06/08.shtml
+http://www.islamonline.net/English/News/2003-08/05/article04.shtml
+http://www.islamonline.net/English/News/2004-10/18/article06.shtml
+http://www.islamonline.net/English/Science/2004/03/article03.shtml
+http://www.islamonline.net/English/Science/2004/05/article08.shtml
+http://www.islamonline.net/English/artculture/2005/01/article08.shtml
+http://www.islamonline.net/SiteDirectory/English/subcategories.asp?id=146
+http://www.islamonline.net/english/Science/2001/12/article7.shtml
+http://www.islamonline.net/fatwa/english/FatwaDisplay.asp?hFatwaID=38563
+http://www.islamonline.net/iol-english/dowalia/techng-2-2-2000/techng2.asp
+http://www.islamonline.net/livedialogue/english/Browse.asp?hGuestID=062KPe
+http://www.islamonline.net/livedialogue/english/Browse.asp?hGuestID=44tQNh
+http://www.islamonline.net/livedialogue/english/Browse.asp?hGuestID=B1FRj5
+http://www.islamworld.net/black_stone.htm
+http://www.island-flower.com/Annegifts.htm
+http://www.island-of-freedom.com/AUQUOTES.HTM
+http://www.island.net/~wmm/lifestyle.htm
+http://www.islandconcepts.com/psearch.php?pt=L&pa=AA
+http://www.islandnet.com/~see/weather/history/artmirge.htm
+http://www.islandnet.com/~see/weather/history/beaufort.htm
+http://www.islandrecords.com/bonjovi/theband_jbj_speeches.las
+http://www.islandscene.com/fitness/2005/050202/foot_speed/
+http://www.islandscene.com/fitness/current.asp
+http://www.islandsun.com/2005-May/07052005/local10-v15i13.html
+http://www.isle-of-man.com/manxnotebook/fulltext/sm1883/ginfo.htm
+http://www.islma.org/about_islma.htm
+http://www.islma.org/resources.htm
+http://www.ism-london.org.uk/nablus_april_2005.php
+http://www.isma.org.uk/stressnw/agedescrim1.htm
+http://www.isma.org.uk/stressnw/sittingwell1.htm
+http://www.isma.org.uk/stressnw/socreps.htm
+http://www.ismh.org/mhn/mhn02.htm
+http://www.ismi.net/paws/wait2.html
+http://www.isminc.com/index.php3?M=mwssifaq2
+http://www.isn.ch/news/sw/details.cfm?ID=7683
+http://www.isn.ethz.ch/isis/Research_Studies/Black_Sea_Basin_Regional_Profile/BlackSea1999_04-06.htm
+http://www.isn.ethz.ch/news/sw/letters.cfm?mystartrow=6&realstartrow=6
+http://www.isnow.com/hair/features/spotlights/0301metro.html
+http://www.iso.org.au/socialistworker/508/p3a.html
+http://www.isoc.org/inet2000/cdproceedings/8e/8e_1.htm
+http://www.isoc.org/inet96/proceedings/c4/c4_1.htm
+http://www.isoc.org/internet/standards/papers/crocker-on-standards.shtml
+http://www.isop.ucla.edu/eas/documents/mao491216.htm
+http://www.isoqol.org/Conference/2001/2001_exhibitor.html
+http://www.isp-planet.com/marketing/2004/branding_bol.html
+http://www.ispaweb.org/en/Documents/Farrell%20(SP).htm
+http://www.ispcon.com/fall2004/attend-keynotes.asp
+http://www.ispcon.com/spring2004/attend-faculty.asp
+http://www.ispr.net/
+http://www.isr.net/
+http://www.isr.umd.edu/~jwh2/iol/
+http://www.isracast.com/tech_news/310505_tech.htm
+http://www.israelforum.com/board/showthread.php?goto=lastpost&t=8233
+http://www.israelinsider.com/channels/security/articles/sec_0060.htm
+http://www.isreview.org/issues/26/thieves_kitchen.shtml
+http://www.isroldenburg.org/?pid=sales%25list
+http://www.iss.co.za/Pubs/ASR/11No3/Stohl.html
+http://www.iss.co.za/Pubs/ASR/12No1/FStewart.html
+http://www.iss.co.za/Pubs/ASR/5No6/Steyn.html
+http://www.iss.co.za/Pubs/ASR/7No5/PeaceInforcement.html
+http://www.iss.co.za/Pubs/ASR/8No5/DefiningDefence.html
+http://www.iss.co.za/Pubs/Monographs/No42/Preface.html
+http://www.iss.co.za/Pubs/Monographs/No5/Steenkamp.html
+http://www.iss.co.za/Pubs/Papers/67/Paper67.html
+http://www.iss.co.za/pubs/papers/105/Paper105.htm
+http://www.iss.net/security_center/advice/Support/KB/default.htm
+http://www.iss.net/wireless/WLAN_FAQ.php
+http://www.iss.org.za/Pubs/ASR/4No2/DefensiveDefence.html
+http://www.iss.org.za/Pubs/ASR/SADR2/Heitman.html
+http://www.iss.soton.ac.uk/infra/telephony/newcollege.html
+http://www.issaquahfish.org/learnmore/redd.html
+http://www.issbd2006.com.au/legal.shtml
+http://www.issd.org/Conference2004/confbrochure.htm
+http://www.issfanclub.com/modules.php?name=News&new_topic=6
+http://www.issn.org:8080/pub/getting-checking/checking/print_en
+http://www.isso.cornell.edu/prepare/faq.html
+http://www.issociate.de/board/post/21197/Incorrect_
+http://www.isss.org/admin/presidential.html
+http://www.isss.umn.edu/jstudent/JStFullCourse.html
+http://www.issso.uh.edu/FAQ.html
+http://www.issueactionpublications.com/documents/literature/lit.dont.just.stand.html
+http://www.issues-mag.com/july3/acting.phtml
+http://www.issues-views.com/index.php/sect/1002/article/1199
+http://www.issues-views.com/index.php/sect/2004/article/2065
+http://www.issues.org/issues/19.2/p_pielke.htm
+http://www.issues.org/issues/20.1/rabalais.html
+http://www.issues.org/issues/21.3/hirsch.html
+http://www.issues2000.org/2004/George_W__Bush_Energy_+_Oil.htm
+http://www.issues2000.org/2004/George_W__Bush_Foreign_Policy.htm
+http://www.issues2000.org/2004/George_W__Bush_Welfare_+_Poverty.htm
+http://www.issues2000.org/2004/More_George_W__Bush_Health_Care.htm
+http://www.issues2000.org/Bob_Smith.htm
+http://www.issues2000.org/Celeb/Bill_Clinton_Principles_+_Values.htm
+http://www.issues2000.org/Celeb/George_W__Bush_Energy_+_Oil.htm
+http://www.issues2000.org/Domestic/James_Inhofe_Gun_Control.htm
+http://www.issues2000.org/Governor/Frank_Keating_Energy_+_Oil.htm
+http://www.issues2000.org/Governor/Mike_Foster_Energy_+_Oil.htm
+http://www.issues2000.org/Governor/Mike_Huckabee_Energy_+_Oil.htm
+http://www.issues2000.org/Governor/Roy_Barnes_Energy_+_Oil.htm
+http://www.issues2000.org/Governor/Tony_Knowles_Energy_+_Oil.htm
+http://www.issues2000.org/Myrth_York.htm
+http://www.issues2000.org/NJ/Robert_Menendez.htm
+http://www.issues2000.org/Ralph_Nader.htm
+http://www.issues2000.org/Republican_Party.htm
+http://www.issues2000.org/Unique_Voice.htm
+http://www.issuespa.net/articles/13243/
+http://www.istain.org/sam.cfm?xnode=2600
+http://www.istc.org.uk/pages/nosunit18.php
+http://www.iste.org/Content/NavigationMenu/Advocacy/Policy/Washington_Notes/19982/Jul5/Jul.htm
+http://www.iste.org/Content/NavigationMenu/Advocacy/Policy/Washington_Notes/20003/Jan8/Jan.htm
+http://www.iste.org/Content/NavigationMenu/Advocacy/Washington_Notes/19982/Jul5/Jul.htm
+http://www.istec.or.jp/Isis/PAMPH/Epamp.html
+http://www.isteve.com/BabyGap.htm
+http://www.isteve.com/IQhoax.htm
+http://www.isteve.com/babygap.htm
+http://www.istl.org/01-summer/article3.html
+http://www.istl.org/02-spring/article2.html
+http://www.istl.org/02-spring/conf1.html
+http://www.istl.org/02-summer/article2.html
+http://www.istl.org/03-spring/refereed1.html
+http://www.istl.org/04-fall/article4.html
+http://www.istl.org/04-summer/article3.html
+http://www.istl.org/99-fall/article3.html
+http://www.istockphoto.com/article_view.php?ID=14
+http://www.isu.edu/departments/english/english-DA.html
+http://www.isu.edu/departments/pubsafe/manuals/emergency/chapter_10.html
+http://www.isuma.net/v02n01/putnam/putnam_e.shtml
+http://www.isuma.net/v03n02/isnor/isnor_e.shtml
+http://www.iswface.org/
+http://www.it-director.com/article.php?articleid=11224
+http://www.it-director.com/article.php?articleid=12048
+http://www.it-director.com/article.php?articleid=2469
+http://www.it-director.com/article.php?articleid=8874
+http://www.it-directory.ie/Irish_Online_Communities/
+http://www.it.bton.ac.uk/staff/rng/teaching/IS307/ALbookmarks.html
+http://www.it.northropgrumman.com/home.asp?bid=1746
+http://www.it.rit.edu/~ell/409/409-042/archives/css_and_typography_studio_exercise.php
+http://www.it.ufl.edu/telecom/phone_singleLinePhones1.html
+http://www.ita.doc.gov/exportamerica/GlobalNewsLine/gnl_0902.html
+http://www.itaa.org/events/event.cfm?EventID=1104
+http://www.itaa.org/isec/doc021601tran.htm
+http://www.itab.ca/english/docs/mou.asp
+http://www.italiamerica.org/id36.htm
+http://www.italian-language-courses.net/hotels_italy_miramare.htm
+http://www.italiansrus.com/articles/ourpaesani/espresso_caffe.htm
+http://www.italianwinesdirectclub.com/december04.htm
+http://www.italianwinesdirectclub.com/july.htm
+http://www.italianwinesdirectclub.com/june.htm
+http://www.italianwinesdirectclub.com/november04.htm
+http://www.italiaspeed.com/2004/motor_show/bologna/review/pininfarina/nido/2312.html
+http://www.italydownunder.com.au/issueseven/cilauro.html
+http://www.italyemb.org/AdmissionsRequirement.htm
+http://www.italyheaven.co.uk/getaround.html
+http://www.italyun.org/docs/statemen/2005-26-04%20Statement%20Mantovani_clustI.htm
+http://www.itbusinessedge.com/reports/osa20041020.html
+http://www.itc.nl/~bakker/info/rs-data/kodak.html
+http://www.itc.virginia.edu/
+http://www.itcilo.it/actrav/english/calendar/2000/A3_2069/work/ACTION_PLANS/cambodia.htm
+http://www.itcilo.it/english/actrav/telearn/global/ilo/guide/toy.htm
+http://www.itcilo.it/english/actrav/telearn/global/ilo/seura/castel.htm
+http://www.itcportal.com/chairman_speaks/chairman_2000.html
+http://www.itcrunch.com/administrator/DisplayArticle.asp?sArticleID=107~4&sFirstKeyword=interview&cameFrom=DisplayArticlesByAuthor
+http://www.itdc.k12.ca.us/curriculum/charter.html
+http://www.itdg.org/
+http://www.itdg.org/?id=faq
+http://www.itdg.org/?id=p2p_kleiburg
+http://www.itdg.org/?id=region_sudan_western
+http://www.itdg.org/?id=south_asia_tsunami
+http://www.itdg.org/?id=special_appeals
+http://www.itdg.org/home_text.asp?id=region_sudan_western
+http://www.itdg.org/home_text.asp?id=south_asia_tsunami
+http://www.itdl.org/Journal/Jan_05/article01.htm
+http://www.ite.edu.sg/admission/ft/faq.htm
+http://www.iteaonline.org/Journal/31N4/31N4Amateur.shtml
+http://www.itebooks.net/Bike/
+http://www.item-bioenergy.com/directory/
+http://www.itfacts.biz/index.php?id=P1821
+http://www.itftennis.com/coaching/publications/itfpublications/books.asp
+http://www.itgulfcoast.org/pageview.asp?PageType=ND&edit_id=2&NEID=4
+http://www.ithaca.edu/ithacan/articles/0310/02/accent/5rap_show_mak.htm
+http://www.ithacahours.com/home.html
+http://www.ithacastation.com/history.html
+http://www.itinscales.com/kitchenscales.htm
+http://www.itinscales.com/specials.htm
+http://www.itinscales.com/tmulti.htm
+http://www.itm.org.uk/2005/index.asp
+http://www.itmonline.com/active99/psi99_active.asp?SR=Thinking+Connections
+http://www.itmweb.com/essay003.htm
+http://www.itnetcentral.com/article.asp?id=13794
+http://www.itnteachers.com/static_generic.cgi?a=workingUK_londonGuide
+http://www.itopf.com/
+http://www.itotd.com/blog.alt?month=2004-12
+http://www.itp.net/features/details.php?id=2817&category=
+http://www.itpaa.org/modules.php?name=News&file=article&sid=1711
+http://www.itppeople.com/FAQAdults.htm
+http://www.itppeople.com/short.htm
+http://www.itreviews.co.uk/
+http://www.itri.brighton.ac.uk/~Adam.Kilgarriff/WORDSKETCHES/tea_n.html
+http://www.its-sti.gc.ca/Architecture/english/web/p/p-24.htm
+http://www.its.berkeley.edu/techtransfer/resources/pub/nl/04-3/roadside.html
+http://www.its.caltech.edu/~dg/fusion_art.html
+http://www.its.leeds.ac.uk/projects/primavera/p_calming.html
+http://www.its.queensu.ca/uis/CAS_intro.shtml
+http://www.itsallelectric.com/index.asp?PageId=44
+http://www.itsdocs.fhwa.dot.gov/JPODOCS/REPTS_PR/13669/section04.htm
+http://www.itsdocs.fhwa.dot.gov/JPODOCS/REPTS_TE/14114.htm
+http://www.itsecurity.com/papers/iss8.htm
+http://www.itsgoodtoknow.com/eyecanseeI.asp
+http://www.itslifejimbutnotasweknowit.org.uk/library_reports_research11.htm
+http://www.itsmf.com/conference/session.asp?SessionID=181
+http://www.itsmypark.org/resources/grants_program.html
+http://www.itstime.com/slinks.htm
+http://www.itsybitsyyoga.com/tykesyogatraining.htm
+http://www.itszone.co.uk/zone0/viewtopic.php?t=2532
+http://www.ittc.ku.edu/~trajkova/CurrentWork.html
+http://www.itv-football.co.uk/Features/story_141523.shtml
+http://www.itvregions.com/corporate_info.php?region=Wales&content=5710
+http://www.itvregions.com/corporate_info.php?region=West&content=5037
+http://www.itvs.org/RichardWright/chron.html
+http://www.itweb.co.za/sections/business/2005/0501210850.asp?A=%25&O=F
+http://www.itweb.co.za/sections/internet/2002/0205230701.asp?O=FPL
+http://www.itweb.co.za/sections/leisure30.asp
+http://www.itweek.co.uk/analysis/104655
+http://www.itworld.com/App/818/swol-0895-sysadmin/
+http://www.itworld.com/AppDev/4061/swol-1013-regex/
+http://www.itworld.com/Career/3710/050603elearning/
+http://www.itworld.com/Net/3303/nls_itinsights050216/
+http://www.itwtranstech.com/Pages/Orion_130.html
+http://www.iucn.org/biodiversityday/reshuffling.htm
+http://www.iucn.org/places/orma/areas/Humedales/english/economical.values.htm
+http://www.iucn.org/reuters/1999/articles/winningamerica.htm
+http://www.iucn.org/themes/law/cel07.html
+http://www.iucn.org/themes/ssc/
+http://www.iucn.org/themes/sustainableuse/sg/bhim.html
+http://www.iucn.org/themes/wcpa/newsbulletins/news-oct02.html
+http://www.iucn.org/themes/wcpa/theme/values/values.html
+http://www.iucn.org/themes/wetlands/
+http://www.iucr.org/cgi-bin/paper?gl0318
+http://www.iucr.org/iucr-top/docs/int/commguide.html
+http://www.iucr.org/iucr-top/lists/cif-developers/msg00012.html
+http://www.iugm.org/sumr-dir.html
+http://www.iugs.org/iugs/pubs/epi21-3.htm
+http://www.iuoe882.com/Facilities%20Subsector%20Association%20of%20Unions%20-and-%20HEABC%20(Clarification%20-%20Implementation%20of%20Bill%2037).htm
+http://www.iupat.org/news/
+http://www.iupload.com/
+http://www.iupload.com/default.asp
+http://www.iupui.edu/~anth/degreereqs.html
+http://www.iupui.edu/~anthpm/fieldschool2002.html
+http://www.iupui.edu/~finaid/generalInfo/loanDebt.html
+http://www.iupui.edu/~museum/admissions1.html
+http://www.ius.edu/brochures/AcademicPrograms/?brochure=music&SchoolCode=ARL
+http://www.ius.edu/publicrelations/CampusNews.cfm
+http://www.iusb.edu/~journal/1998/Paper16.html
+http://www.iusb.edu/~journal/2001/wilkie.html
+http://www.iusb.edu/~sbhist/degree.shtml
+http://www.iuscomp.org/gla/judgments/tgcm/z630930.htm
+http://www.iuscomp.org/gla/literature/access.htm
+http://www.iusedtobelieve.com/
+http://www.iussp.org/Activities/scc-thr/thr-outline.php
+http://www.iussp.org/Activities/scp-gen/gen-rep99.php
+http://www.iussp.org/Activities/wgc-urb/urb-rep02.php
+http://www.iussp.org/Publications_on_site/PRP/prp18.php
+http://www.iut-info.univ-lille1.fr/docs/thinking/AppendixA.html
+http://www.ivanberryman.co.uk/concorde_prints.htm
+http://www.ivanhoffman.com/artist.html
+http://www.ivanhoffman.com/distributors.html
+http://www.ivanhoffman.com/gap.html
+http://www.ivanhoffman.com/language2.html
+http://www.ivanhoffman.com/lostopportunity.html
+http://www.ivanhoffman.com/nightmare.html
+http://www.ivanhoffman.com/onlinefair.html
+http://www.ivanhoffman.com/protect.html
+http://www.ivarhagendoorn.com/personal/archives/2004/week47.html
+http://www.ivc.ca/governments/usa/state/
+http://www.ivc.org.uk/resources/aIVC/conference_weekend.htm
+http://www.ivcc.edu/gen2002/Darwin_Origin.htm
+http://www.ivcfnynj.org/basileia_wcspecial.asp
+http://www.ivcs.org.uk/donation.htm
+http://www.iventa.com/Email-Publishing-Tracking-System.aspx
+http://www.ivenus.com/health/features/SU-beat_it-wk51.asp
+http://www.ivey.org/pages/grantsbio_2001.html
+http://www.ivey.org/pages/grantsgen_2001.html
+http://www.ivey.uwo.ca/executive/emba/lets_talk.htm
+http://www.iveybusinessjournal.com/topics.asp?intTopic_ID=2
+http://www.ivf-et.com/financial_intro.html
+http://www.ivf-et.com/tlc/fact_art_success.html
+http://www.ivf-et.com/tlc/forum/pregnancy.html
+http://www.ivfconnections.com/qpregnancy.htm
+http://www.ivillage.co.uk/food/partyfood/drinksparties/articles/0,,165155_165651,00.html
+http://www.ivillage.co.uk/newspol/celeb/cfeat/articles/0,,528719_667213,00.html
+http://www.ivillage.co.uk/pregnancyandbaby/fertility/adoption/articles/0,,6_177637,00.html
+http://www.ivillage.co.uk/print/0,,181710,00.html
+http://www.ivillage.co.uk/relationships/couple/right/qas/0,9584,144_664694,00.html
+http://www.ivillage.co.uk/relationships/dating/men/articles/0,,139_572742-9,00.html
+http://www.ivillage.co.uk/relationships/famfri/emotwb/articles/0,,161285_587628-1,00.html
+http://www.ivillage.co.uk/relationships/famfri/emotwb/articles/0,,181034_587628,00.html
+http://www.ivillage.co.uk/relationships/sex/talksex/qas/0,,173_158600,00.html
+http://www.ivillage.co.uk/relationships/sex/talksex/qas/0,9584,173_158600,00.html
+http://www.ivisgroup.info/resources/pressreleases/20020401.asp
+http://www.ivm.org.uk/aboutivm_publications_beyondthe_function.htm
+http://www.ivmdl.org/cbec.cfm?study=141
+http://www.ivmdl.org/cbec.cfm?study=60
+http://www.ivr.org.uk/audit.htm
+http://www.ivthome.com/conferences/computer_validation_va.html
+http://www.ivu.org/congress/euro97/food.html
+http://www.ivu.org/congress/thai99/reports/mrpye.html
+http://www.ivu.org/congress/wvc38/manchester-report.html
+http://www.ivu.org/history/societies/french.html
+http://www.ivu.org/history/vfu/meeting15.html
+http://www.ivu.org/nzvs/app/prod.htm
+http://www.ivybound.net/IBstory.html
+http://www.ivywest.com/iwsatfaq.htm
+http://www.iw3p.com/DailyPundit/2002_04_21_dailypundit_archive.php
+http://www.iwa2171.bc.ca/education/edu_gloss_union.html
+http://www.iwantmedia.com/timewarner.html
+http://www.iwasabducted.com/report61.htm
+http://www.iwf.org.uk/government/page.101.222.htm
+http://www.iwf.org/initiatives/init_detail.asp?ArticleID=634
+http://www.iwf.org/issues/issues_detail.asp?ArticleID=515
+http://www.iwf.org/issues/issues_detail.asp?ArticleID=543
+http://www.iwh.on.ca/products/atwork2005/Spring05/statistical40.htm
+http://www.iwm.org.uk/upload/package/21/creteegypt/standegypt20.htm
+http://www.iwmi.cgiar.org/tools/perform.htm
+http://www.iwpr.net/index.pl?archive/irq/irq_46_7_eng.txt
+http://www.iwpr.net/index.pl?archive/tri/tri_208_1_eng.txt
+http://www.iwpr.net/special_index1.html
+http://www.iwr.co.uk/News/1161048
+http://www.iwr.com/exerciser2000/testimonies.htm
+http://www.iwraw-ap.org/protocol/standing.htm
+http://www.iww.org/en/projects/gdc
+http://www.ixtapa-zihuatanejo.com/info/pesca2.htm
+http://www.iyp.oxfam.org/news/voice/index.asp
+http://www.j-aircraft.com/research/rdunn/tuluvu/tuluvu_4.htm
+http://www.j-bradford-delong.net/Econ_Articles/Reviews/easterlin.html
+http://www.j-bradford-delong.net/OpEd/virtual/technet/spmicro.html
+http://www.j-bradford-delong.net/Teaching_Folder/manifesto.html
+http://www.j-bradford-delong.net/TotW/Easterly_neoliberal.html
+http://www.j-bradford-delong.net/movable_type/2005-3_archives/000240.html
+http://www.j-bradford-delong.net/movable_type/2005-3_archives/001041.html
+http://www.j-bradford-delong.net/movable_type/archives/001131.html
+http://www.j-bradford-delong.net/movable_type/archives/001448.html
+http://www.j-church.com/articles/newsletter09-9-6.html
+http://www.j-k.co.uk/jkcm/JK/Product/Samples.cms
+http://www.j-n-v.org/AW_briefings/ARROW_briefing033.htm
+http://www.j-paine.org/bb.html
+http://www.j31.co.uk/kiveton.html
+http://www.ja-gps.com.au/whatisgps.html
+http://www.ja.org/programs/programs_elem_skills.shtml
+http://www.jaa.nl/licensing/classtyperatings.html
+http://www.jabootu.com/seaserpent.htm
+http://www.jackandsusie.com/modules.php?op=modload&name=Web_Links&file=index&l_op=viewlink&cid=1
+http://www.jackasscritics.com/movie.php?movie_key=386
+http://www.jackblood.com/index/id1.html
+http://www.jackbridge.com/eprojack.htm
+http://www.jackhanna.com/africa99/vumbura2.htm
+http://www.jackhodgson.com/weblog/archives/000873.html
+http://www.jackjackman.com/wtc.html
+http://www.jackjohnsonmusic.com/forum2/topic.asp?whichpage=-1&TOPIC_ID=17757&REPLY_ID=236481
+http://www.jacklondons.net/writings/WolfHouseBurning/page_four.html
+http://www.jackmassie.com/facility.html
+http://www.jackmorton.com/360/market_focus/july03_mf.asp
+http://www.jackson.cc.mi.us/InfoTech/LRC/Feb%20Programs.htm
+http://www.jackson.k12.ky.us/readingstrategies/m4b.htm
+http://www.jackson.k12.ky.us/readingstrategies/m4c.htm
+http://www.jacksonandperkins.com/cgi-bin/ncommerce3/ExecMacro/base.d2w/report?html=tips_gardenease.html
+http://www.jacksonfreepress.com/comments.php?id=4756_0_7_0_C
+http://www.jacksonhole.com/info/pr.filmkit.asp
+http://www.jacksonholewy.net/lodging/jh_hotels.php
+http://www.jacksonsmill.wvu.edu/
+http://www.jacobite.ca/documents/17431223a.htm
+http://www.jacobite.ca/kings/henry.htm
+http://www.jacobite.ca/kings/james2.htm
+http://www.jacobsen.no/anders/blog/archives/2003/07/17/improving_crm_at_zingo_taxi.html
+http://www.jadetower.org/dave/archives/2005_02.html
+http://www.jadetower.org/dave/archives/2005_06.html
+http://www.jafi.org.il/education/100/zionism/b8.html
+http://www.jafi.org.il/education/actual/zr/6.html
+http://www.jag-lovers.org/modern/models.htm
+http://www.jag-lovers.org/x350.html
+http://www.jagan.org/tributes2a.htm
+http://www.jagcentral.org/
+http://www.jagcnet.army.mil/
+http://www.jagersmith.com/NewsFall04.htm
+http://www.jaguarcars.com/uk/sja/ch4.html
+http://www.jaguarcars.com/uk/sja/ch8.html
+http://www.jahworks.org/music/features/fire_burn.html
+http://www.jaialai.com/2004%20SH%20hdcp%20Rules.asp
+http://www.jainworld.com/society/jainfood/cosmetics.htm
+http://www.jakeludington.com/ask_jake/20050116_5_hdtv_shopping_tips.html
+http://www.jakeslife.com/diary.htm
+http://www.jakko.com/life/shoes.htm
+http://www.jakonrath.com/record2.html
+http://www.jal.cc.il.us/~mikolajsawicki/ex_astro.html
+http://www.jal.co.jp/jalmile/euro_e/jaljta.html
+http://www.jalt.org/calendar/main.php?v=c&ch=Akita&change=0
+http://www.jama.org/library/position100197.htm
+http://www.jamaicans.com/culture/anansi/anancy_watchderide.shtml
+http://www.jambands.com/Columns/AMiller/content_2004_09_29.00.phtml
+http://www.jambands.com/Features/content_2002_08_25.09.phtml
+http://www.jambands.com/forums/read.php?f=2&i=5854&t=5780
+http://www.jambands.com/forums/read.php?f=2&i=5868&t=5780
+http://www.jambomama.com/chapter1.html
+http://www.jambomama.com/chapter2.html
+http://www.james.com/beaumont/dr_life.htm
+http://www.jamesandjames.com/htmlfiles/info/info.htm
+http://www.jamesbowman.net/articleDetail.asp?pubID=1413
+http://www.jamesgomeznews.com/article.php?AID=104
+http://www.jameshay.co.uk/Company/Directions.htm
+http://www.jameskalyn.com/reviews/1997/wmmason2.html
+http://www.jamesmadisonproject.org/aboutjmp.html
+http://www.jamesmartinpa.com/letters.htm
+http://www.jamesmichaelstarr.com/carolandcharlotte.html
+http://www.jamesoregan.com/Producer/
+http://www.jamestown.org/email-to-friend.php?article_id=4619
+http://www.jamestown.org/publications_details.php?volume_id=17&issue_id=637&article_id=4584
+http://www.jamestown.org/publications_details.php?volume_id=25&&issue_id=2252
+http://www.jamestown.org/publications_details.php?volume_id=25&issue_id=2237&article_id=19311
+http://www.jamestown.org/publications_details.php?volume_id=395&issue_id=2931&article_id=23659
+http://www.jamestownfd.com/
+http://www.jameswalker.co.uk/docs/support.htm
+http://www.jameswhuston.com/asp/huston.asp?page=secret_justice_ex
+http://www.jamieanderson.com/classes.html
+http://www.jamisongreen.com/Report_Findings.htm
+http://www.jamminjobs.com/JS/General/Job.asp?id=3287455
+http://www.jamminjobs.com/JS/General/Job.asp?id=3332113
+http://www.jammu-kashmir.com/basicfacts/basics.html
+http://www.jamsadr.com/j_pub/articles.asp?cyear=2002&pn=2
+http://www.jamsadr.com/j_pub/articles.asp?cyear=2004&pn=6
+http://www.jamsadr.com/j_pub/articles.asp?cyear=2005&pn=6
+http://www.jan.wvu.edu/soar/motor/4_lifting.html
+http://www.janda.org/politxts/State%20of%20Union%20Addresses/1945-1952%20Truman/HST47.html
+http://www.janda.org/politxts/State%20of%20Union%20Addresses/1964-1969%20Johnson/LBJ68.html
+http://www.janda.org/politxts/State%20of%20Union%20Addresses/1981-1988%20Reagan/rwr88.html
+http://www.janegalt.net/
+http://www.janegalt.net/2002_01_13_janegalt_archive.html
+http://www.janegalt.net/blog/archives/003938.html
+http://www.janegalt.net/blog/archives/004739.html
+http://www.janegalt.net/blog/archives/005242.html
+http://www.janekurtz.com/ethiopia5.html
+http://www.janela1.com/vh/docs/v0000015.htm
+http://www.janeresture.com/beru/
+http://www.janeresture.com/kiribati_food/
+http://www.janeresture.com/nauru_history/
+http://www.janes.com/
+http://www.janes.com/defence/air_forces/news/jawa/jawa001013_1_n.shtml
+http://www.janes.com/transport/exhibitions/
+http://www.janesavoie.com/books.html
+http://www.janfennellthedoglistener.com/contact.htm
+http://www.jang-group.com/thenews/jan2005-weekly/busrev-31-01-2005/p2.htm
+http://www.jang.com.pk/cricket/cwc2003/squads/southafrica/allan-donald.htm
+http://www.jang.com.pk/thenews/apr2005-daily/21-04-2005/main/update.shtml
+http://www.jang.com.pk/thenews/aug2003-weekly/tapest-28-08-2003/
+http://www.jang.com.pk/thenews/dec2004-daily/06-12-2004/world/w3.htm
+http://www.jang.com.pk/thenews/feb2005-daily/12-02-2005/business/b1.htm
+http://www.jang.com.pk/thenews/jan2005-weekly/tapest-20-01-2005/
+http://www.jang.com.pk/thenews/jun2005-daily/11-06-2005/main/main2.htm
+http://www.jang.com.pk/thenews/may2005-daily/15-05-2005/sports/s6.htm
+http://www.jang.com.pk/thenews/oct2003-daily/04-10-2003/world/w11.htm
+http://www.janisian.com/article-eric_flint-free_library.html
+http://www.janisian.com/article-fallout.html
+http://www.janmatthies.info/chess/cvt/imview.htm
+http://www.janmulligan.com/cs.html
+http://www.jannah.org/sisters/marparen.html
+http://www.jannah.org/sisters/womeninislam.html
+http://www.janthor.de/galerie.html
+http://www.januarymagazine.com/features/aftershaft.html
+http://www.januarymagazine.com/features/southbeachdietexc.html
+http://www.janus.co.yu/vrujci/sports.htm
+http://www.jaott.org/Unit6.htm
+http://www.japan-guide.com/local/?aCAT=111
+http://www.japan-society.org/crest_jssdt.html
+http://www.japan-zone.com/modern/manga.shtml
+http://www.japan-zone.com/store/traditional.shtml
+http://www.japan.org.au/Q&A.htm
+http://www.japanconsuming.com/contents/2005/contents_0501.html
+http://www.japancorp.net/Article.Asp?Art_ID=10012
+http://www.japancorp.net/Article.Asp?Art_ID=3490
+http://www.japanesefriendsearch.com/
+http://www.japanesesnacks.com/storelist.php
+http://www.japanesestudies.org.uk/articles/Bassani.html
+http://www.japanlaw.info/lawletter/jan86/eba.htm
+http://www.japanphone.com/faq.html
+http://www.japanscan.com/review.htm
+http://www.japantoday.com/e/?content=bbs&order=msg&author=BJP
+http://www.japantoday.com/e/?content=bbs&order=msg&author=hm
+http://www.japantoday.com/e/?content=comment&id=352
+http://www.japantoday.com/e/?content=comment&id=584
+http://www.japantoday.com/e/?content=comment&id=584&page=11
+http://www.japantoday.com/e/?content=feature&id=843
+http://www.japantoday.com/e/?content=feature&id=843&page=2
+http://www.japantoday.com/e/?content=kuchikomi&id=87
+http://www.japantoday.com/e/?content=news&cat=1&id=340725
+http://www.japantoday.com/e/?content=news&cat=1&id=340765
+http://www.japantoday.com/e/?content=newsmaker&id=195
+http://www.japantoday.com/e/?content=quote
+http://www.japanus150.org/haikuguidelines.html
+http://www.japanwindow.com/
+http://www.jarretthousenorth.com/
+http://www.jarretthousenorth.com/2001/07/31.html
+http://www.jarvm.com/articles/Vol1Iss1/CASTIJVM.htm
+http://www.jasa.net.au/seaside/sickness.htm
+http://www.jascc.org/partnerships&alliances/freinds.html
+http://www.jashford.com/Pages/ACCReviews.html
+http://www.jasna.org/persuasions/on-line/opno3/eggleston.html
+http://www.jasondoucette.com/worldrecords.html
+http://www.jasonmperry.com/articles/
+http://www.jasonosipa.com/SS_FAQ.htm
+http://www.jasonsantamaria.com/
+http://www.jasonsantamaria.com/archive/2004/07/18/index.php
+http://www.jasonwilber.com/
+http://www.jaspong.force9.co.uk/doom.htm
+http://www.jatruck.com/stonewall/soldierb2.htm
+http://www.java.com/en/download/manual.jsp
+http://www.javacoffeebreak.com/articles/thinkinginjava/abitaboutgarbagecollection.html
+http://www.javalobby.org/
+http://www.javaonthebrain.com/brain.html
+http://www.javaspecialists.co.za/archive/Issue035.html
+http://www.javaworld.com/javaworld/javaone99/j1-99-gosling.html
+http://www.javaworld.com/javaworld/jw-01-2002/jw-0111-hotspotgc.html
+http://www.javaworld.com/javaworld/jw-03-2000/jw-0331-java101.html
+http://www.javaworld.com/javaworld/jw-03-2001/jw-0323-perfbooks.html
+http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-ten.html
+http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-dao.html
+http://www.javaworld.com/javaworld/jw-03-2005/jw-0314-scripting_p.html
+http://www.javaworld.com/javaworld/jw-04-2002/j1-02-bestworst.html
+http://www.javaworld.com/javaworld/jw-05-1999/jw-05-idgns-suninterview.html
+http://www.javaworld.com/javaworld/jw-05-2001/jw-0511-iw-webgain.html
+http://www.javaworld.com/javaworld/jw-08-1998/jw-08-techniques.html
+http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html
+http://www.javaworld.com/javaworld/jw-11-1997/jw-11-indepth.html
+http://www.javaworld.com/javaworld/jw-12-2000/jw-1201-weblogic.html
+http://www.jayallen.org/comment_spam/2004/03/movable_type_30_and_mtblacklist
+http://www.jayallen.org/stories/an_unexpected_end
+http://www.jayallen.org/stories/procrastinators_unite_soonish
+http://www.jaybsays.com/
+http://www.jaycaruso.com/index.php?p=837
+http://www.jaydavidson.com/Teaching/TYCWell/tycw.htm
+http://www.jaynadavis.com/main.html
+http://www.jayseverin.org/_wsn/page3.html
+http://www.jayski.com/pages/tracks/rockingham.htm
+http://www.jayski.com/pages/tracks/sched2005.htm
+http://www.jayyousonline.org/englishweb/jayyous_town.htm
+http://www.jazma.com/archive.html
+http://www.jazma.com/forum.html
+http://www.jazzbreak.com/interview.php?jparm=ID_1821,lg_1,dossier_437
+http://www.jazzfiddlewizard.com/Seifert.htm
+http://www.jazzinamerica.org/student.asp?LPOrder=4
+http://www.jazzlandrec.com/bugge_bio.html
+http://www.jazzstandard.net/red/secondary/jazzCalendar.html
+http://www.jazztimes.com/columns_and_features/final_chorus/index.cfm?id=16
+http://www.jazztimes.com/columns_and_features/final_chorus/index.cfm?id=35
+http://www.jazztimes.com/columns_and_features/final_chorus/index.cfm?id=48
+http://www.jazztrumpetsolos.com/Lew_Soloff_Biography.asp
+http://www.jazzweekly.com/interviews/bradford.htm
+http://www.jb.man.ac.uk/news/connected/
+http://www.jb.man.ac.uk/public/story/tracking/
+http://www.jbc.org/cgi/content/full/278/22/20171
+http://www.jbc.org/cgi/content/full/279/50/52168
+http://www.jbhe.com/news_views/45_wait_list.html
+http://www.jbidirect.co.uk/intschools/private_med_ins.html
+http://www.jbonline.com.au/accommodation.html
+http://www.jboss.org/?module=bb&op=viewtopic&t=57357
+http://www.jbox.com/SEARCHES/super_mario_toys/
+http://www.jbpub.com/catalog/0763728462/
+http://www.jbsmusic.co.uk/
+http://www.jbutler.org.uk/e2e/ssw/w10/index.shtml
+http://www.jbwb.co.uk/pfguidelines.htm
+http://www.jc-solarhomes.com/five.htm
+http://www.jc-solarhomes.com/greenhouse_effect.htm
+http://www.jc-solarhomes.com/solar_heating.htm
+http://www.jcaa.org/JCNL9901/9901HMSR.htm
+http://www.jcaho.org/about+us/news+letters/sentinel+event+alert/sea_23.htm
+http://www.jcaho.org/general+public/patient+safety/
+http://www.jcb.org/cgi/content/full/141/2/483
+http://www.jcb.org/cgi/content/full/144/5/963
+http://www.jcb.org/cgi/content/full/168/2/201
+http://www.jccu.coop/English_here/news/new_040618_02.htm
+http://www.jceps.com/index.php?pageID=article&articleID=33
+http://www.jcim.net/Copyright/raj.htm
+http://www.jcl.healthinkonline.com/modules/SelfCareWellness/wellAdvised.asp?artID=621&catID=2&catname=Serious+Conditions
+http://www.jcm-europe.com/
+http://www.jcna.com/library/concours/index.php
+http://www.jcnm.ca/Jchist.htm
+http://www.jco.org/cgi/content/full/21/15/3000
+http://www.jcp.org/en/press/news/licensing_update
+http://www.jcpa.org/art/knesset4.htm
+http://www.jcpa.org/brief/brief4-4.htm
+http://www.jcpa.org/phas/phas-25.htm
+http://www.jcpr.org/wp/WPprofile.cfm?ID=322
+http://www.jcpr.org/wp/WPprofile.cfm?ID=69
+http://www.jcrelations.net/en/?id=745
+http://www.jcsm.org/StudyCenter/kjvstrongs/STRHEB47.htm
+http://www.jcsm.org/biblelessons/listening.htm
+http://www.jctr.org.zm/bnb/bnbasketov.htm
+http://www.jctr.org.zm/press_releases.htm
+http://www.jcu.edu.au/school/ns/WHAT/postgrad/mnstudies.htm
+http://www.jcu.edu.au/school/phtm/PHTM/frogs/gjwork.htm
+http://www.jdate.com/default.asp?p=13000&CategoryID=4
+http://www.jdbsound.com/art/art510.html
+http://www.jdfrecreation.com/fitness/
+http://www.jdrf.org.au/about_jdrf/corppartner.html
+http://www.jdrf.org/legislative/moor.php
+http://www.jeanniebaker.com/focus_web/magic_of_the_daintree.htm
+http://www.jeb.co.uk/studentquotes.asp
+http://www.jedburgh.org.uk/towntrail.asp
+http://www.jeddy.org/aybs/char/wilberforce/
+http://www.jeffcomo.org/main/jobs.html
+http://www.jefferson.edu/jchp/pt/index.cfm
+http://www.jefferson.k12.ky.us/Schools/Elementary/GoldsmithLane/policies.html
+http://www.jeffersonhospital.org/kit/cancercare/article10189.html
+http://www.jeffersonhospital.org/news/2004/article9928.html
+http://www.jefferycotton.net/info.asp?pgs=rant_revenge
+http://www.jeffgreefwoodworking.com/vitrine/vitrine.html
+http://www.jefflang.com.au/whatever.htm
+http://www.jefflindsay.com/LDSFAQ/FQ_prophets.shtml
+http://www.jefflindsay.com/textbooks.html
+http://www.jeffmajor.com/film/essays/indemnity/
+http://www.jeffooi.com/MT3/mt-comments.cgi?entry_id=1672
+http://www.jeffooi.com/MT3/mt-comments.cgi?entry_id=2051
+http://www.jeffooi.com/MT3/mt-comments.cgi?entry_id=2575
+http://www.jeffooi.com/MT3/mt-comments.cgi?entry_id=2611
+http://www.jeffooi.com/archives/2004/02/survey_majority.php
+http://www.jeffooi.com/archives/2004/04/medical_insuran.php
+http://www.jeffooi.com/archives/2004/09/tai_ee_long_co.php
+http://www.jeffreymasson.com/sharing.html
+http://www.jems.com/firerescue/ffnews/fd2000/1index.html
+http://www.jems.com/paramedics/ch4.html
+http://www.jenandtonic.ca/archives/000637.html
+http://www.jenkins-ip.com/mym/autumn2004/item_16.htm
+http://www.jenkins-ip.com/mym/spring2001/snippets.htm
+http://www.jenkins-ip.com/mym/spring2004/item_04.htm
+http://www.jenkinspublishing.com/balance.html
+http://www.jenners.com/about/productmix1.asp
+http://www.jennymiller.com/
+http://www.jenolancaves.com/wedding/weddings.htm
+http://www.jensonusa.com/helpdesk/shopping.aspx
+http://www.jerberyd.com/climbing/stories/k2/
+http://www.jeremysiegel.com/view_article.asp?p=376
+http://www.jeremysilman.com/chess_thinking_cap/040403_thinking_cap.html
+http://www.jeremysilman.com/chess_thinking_cap/latest_thinking_cap.html
+http://www.jeremysilman.com/movies_tv_js/overlooked_sci_fi_films.html
+http://www.jerf.org/iri/
+http://www.jerf.org/resources/xblinjs/widgetAdvancedUses.html
+http://www.jerf.org/writings/communicationEthics/node5.html
+http://www.jericsmith.com/Other/prez.htm
+http://www.jerryfowlerperformancehorses.com/question_a4.htm
+http://www.jerrypournelle.com/archives2/archives2view/view167.html
+http://www.jerseygardens.com/go/officialrules.cfm
+http://www.jerseygardens.com/go/ssRules.cfm
+http://www.jerusalemites.org/news/english/2003/dec2003/1.htm
+http://www.jerusalemites.org/news/english/march2005/16.htm
+http://www.jerusalemletter.co.il/archives/Dec30,1998/kibbutz.htm
+http://www.jesperjuul.net/text/timetoplay/
+http://www.jesref.org/dispatch/disp.php?lang=en&dispId=enlatest
+http://www.jesref.org/dispatch/disp.php?lang=es&dispId=enlatest
+http://www.jesref.org/dispatch/disp.php?lang=es&dispId=enlatest&langBody=en
+http://www.jesref.org/dispatch/disp.php?lang=fr&dispId=enlatest
+http://www.jesref.org/dispatch/disp.php?lang=it&dispId=enlatest
+http://www.jesref.org/reports/report.php?lang=en&repId=bi050415en
+http://www.jesref.org/reports/report.php?lang=fr&repId=bi050415en
+http://www.jess3.com/2004_05_09_archiveblogger.html
+http://www.jessanderson.org/doc/telling_guy.html
+http://www.jesseshunting.com/reviewpost/showproduct.php?product=575&sort=7&cat=272&page=1
+http://www.jessewarden.com/archives/design/
+http://www.jessicaswell.com/Life-Page01.htm
+http://www.jesuit.org/sections/sub.asp?SECTION_ID=189&SUBSECTION_ID=460&PARENT_ID=235
+http://www.jesuit.org/sections/sub.asp?SECTION_ID=189&SUBSECTION_ID=472&PARENT_ID=
+http://www.jesuits-chi.org/social/lima.htm
+http://www.jesus-is-lord.com/islam.htm
+http://www.jesus-is-lord.com/kjvdefns.htm
+http://www.jesus-is-lord.com/nivmusli.htm
+http://www.jesus-is-lord.com/sexabuse.htm
+http://www.jesus-is-lord.com/steve.htm
+http://www.jesus-is-lord.com/transtoc.htm
+http://www.jesus-is-savior.com/Evils%20in%20Government/Federal%20Reserve%20Scam/united_states_is_in_deep_doodoo.htm
+http://www.jesusiscoming.com/Scripture.htm
+http://www.jesuswalk.com/lessons/18_24-34.htm
+http://www.jet.efda.org/pages/faqs/faq2.html
+http://www.jetcareers.com/fa.htm
+http://www.jetpress.org/volume13/bainbridge.html
+http://www.jetro.go.jp/en/market/trend/smaller/docs/2004_06_ryukyubio.html
+http://www.jetsettersmagazine.com/archive/jetezine/globe02/Carib02/prico/wildlife/salt1.html
+http://www.jetwolf.com/buffy/dolphins/slice02.php
+http://www.jetwolf.com/hof/osb/fotw4.html
+http://www.jewelers.org:8080/ja_consumer/projeweler1.html
+http://www.jewellerymoscow.com/pressrel.en.html
+http://www.jewfaq.org/gentiles.htm
+http://www.jewfaq.org/sex.htm
+http://www.jewish-history.com/Occident/volume2/april1844/jethro.html
+http://www.jewish-history.com/Occident/volume3/jun1845/questions.html
+http://www.jewish-languages.org/ml/200204.html
+http://www.jewish.com/modules.php?name=News&file=article&sid=1576
+http://www.jewishamerica.com/ja/features/CrashCourse.cfm
+http://www.jewishencyclopedia.com/view.jsp?artid=1120&letter=A
+http://www.jewishencyclopedia.com/view.jsp?artid=142&letter=O
+http://www.jewishencyclopedia.com/view.jsp?artid=204&letter=S
+http://www.jewishencyclopedia.com/view.jsp?artid=215&letter=M
+http://www.jewishencyclopedia.com/view.jsp?artid=365&letter=H
+http://www.jewishgen.org/Belarus/intro_1897_russian_census.htm
+http://www.jewishgen.org/SAfrica/alexander-immig.htm
+http://www.jewishgen.org/databases/GivenNames/dbdespop.htm
+http://www.jewishjournal.com/home/searchview.php?id=6512
+http://www.jewishpeacefellowship.org/jpfpublications.htm
+http://www.jewishreunion.co.uk/
+http://www.jewishsoftware.com/default.asp?page=content&contentvalue=6&tab=cs
+http://www.jewishtelegraph.com/roots_20.html
+http://www.jewishtelegraph.com/roots_21.html
+http://www.jewishvirtuallibrary.org/jsource/History/crane.html
+http://www.jewishvirtuallibrary.org/jsource/Judaism/marriage.html
+http://www.jewishvirtuallibrary.org/jsource/Peace/beginreplyCD.html
+http://www.jewishvirtuallibrary.org/jsource/Peace/ispaecon.html
+http://www.jewishvirtuallibrary.org/jsource/Peace/paeconup.html
+http://www.jewishvirtuallibrary.org/jsource/Politics/labor.html
+http://www.jewishvirtuallibrary.org/jsource/US-Israel/phantom.html
+http://www.jewishvirtuallibrary.org/jsource/arabs/modjor.html
+http://www.jewishvirtuallibrary.org/jsource/biography/RRubinstein.html
+http://www.jewishvirtuallibrary.org/jsource/biography/Rand.html
+http://www.jewishvirtuallibrary.org/jsource/vie/Jerusalem3.html
+http://www.jewsforjudaism.org/web/handbook/s_personal.html
+http://www.jfcom.mil/newslink/storyarchive/2001/pa031701.htm
+http://www.jfcom.mil/newslink/storyarchive/2002/no081402a.htm
+http://www.jfcom.mil/newslink/storyarchive/2004/sp021004.htm
+http://www.jfcspb.org/index.php?src=news&prid=700
+http://www.jfcspb.org/index.php?src=news&prid=700&category=FUND_RAISING
+http://www.jfind.com/articles/glass070900.shtml
+http://www.jfk.edu.mx/08/03.htm
+http://www.jfk.org/Research/Cuba/Missile_Crisis.htm
+http://www.jfklancer.com/jfk3.html
+http://www.jfklibrary.org/fa_rpcv_oh.html
+http://www.jfklibrary.org/forum_clinton2003.html
+http://www.jfklibrary.org/j012061.htm
+http://www.jfklibrary.org/j061063.htm
+http://www.jfklibrary.org/store_page22.html
+http://www.jfkmontreal.com/media_coup.htm
+http://www.jfo.org.uk/health/diagnosis/legalwork.htm
+http://www.jforum.net/posts/list/80.page
+http://www.jgarden.org/gardens.asp?ID=347
+http://www.jgi.doe.gov/News/news_12_12_02.html
+http://www.jguru.com/faq/view.jsp?EID=568075
+http://www.jharp.com/testimonials.htm
+http://www.jhbmc.jhu.edu/studies/
+http://www.jhpatel.com/s_chandrashekar.html
+http://www.jhu.dailyjolt.com/food/
+http://www.jhu.edu/hurj/focus-lhee-etal.html
+http://www.jhu.edu/~ccenter/training.html
+http://www.jhu.edu/~istr/links/
+http://www.jhu.edu/~jhumag/0403web/cold.html
+http://www.jhu.edu/~jhumag/994web/cultss.html
+http://www.jhu.edu/~phil/academics/appendixA.html
+http://www.jhu.edu/~president/inaug.html
+http://www.jhubc.it/forum/topic.asp?TOPIC_ID=19
+http://www.jhuccp.org/africa/regional/cup.shtml
+http://www.jhuccp.org/pubs/ci/7/index.shtml
+http://www.jhuger.com/goodnews.php
+http://www.jhunewsletter.com/vnews/display.v/ART/2005/05/09/427e67759d121
+http://www.jiad.org/vol5/no1/hernandez/
+http://www.jian.com/resources/marketing/articles.html?id=1079733868
+http://www.jianda.net/
+http://www.jianda.net/fresh/000280.htm
+http://www.jias.org/newsletter.leaving.html
+http://www.jic.bbsrc.ac.uk/corporate/About_JIC/comm_partnership.html
+http://www.jic.bbsrc.ac.uk/exhibitions/bio-future/
+http://www.jic.bbsrc.ac.uk/exhibitions/bio-future/sr_healtheat.htm
+http://www.jidaw.com/itsolutions/vsatoutline.html
+http://www.jigsawlounge.co.uk/film/jeepers2breckinterview.html
+http://www.jihadwatch.org/archives/001681.php
+http://www.jihadwatch.org/archives/002917.php
+http://www.jihadwatch.org/archives/003944.php
+http://www.jihadwatch.org/archives/004407.php
+http://www.jihadwatch.org/archives/004745.php
+http://www.jihadwatch.org/archives/004761.php
+http://www.jihadwatch.org/archives/004811.php
+http://www.jihadwatch.org/archives/004957.php
+http://www.jihadwatch.org/cgi-bin/mt-comments.cgi?entry_id=2074
+http://www.jihadwatch.org/dhimmiwatch/archives/002074.php
+http://www.jihadwatch.org/dhimmiwatch/archives/004977.php
+http://www.jil.go.jp/bulletin/year/1995/vol34-06/05.htm
+http://www.jil.go.jp/bulletin/year/1999/vol38-12/06.htm
+http://www.jil.go.jp/bulletin/year/2000/vol39-09/07.htm
+http://www.jil.go.jp/bulletin/year/2001/vol40-09/06.htm
+http://www.jillbliss.com/
+http://www.jillevans.net/press021016.html
+http://www.jillpurce.com/articles_beyondwords.htm
+http://www.jimandellen.org/trollope/AmericanSena.show.html
+http://www.jimgilliam.com/2004/09/john_kerrys_biggest_mistake_he_believed_george_bush.php
+http://www.jimhopper.com/hope/
+http://www.jimlangley.net/ride/bikefriday.html
+http://www.jimloy.com/fiction/thin.htm
+http://www.jimmillergolf.com/golfsinception.html
+http://www.jimmyakin.org/2005/05/newsweek_lied_p.html
+http://www.jimmycarterlibrary.org/documents/campdavid/accords.phtml
+http://www.jimmyfund.org/eve/event/scooper_history.asp
+http://www.jimnovo.com/
+http://www.jimpinto.com/enews/feb6-2001.html
+http://www.jimpinto.com/writings/globalcompetition.html
+http://www.jimpoz.com/quotes/category.asp?categoryid=17
+http://www.jims.net/appendix.asp
+http://www.jimsmobile.com/carrying_cases_data.htm
+http://www.jimsteinman.com/ohyeah.htm
+http://www.jimwegryn.com/Names/CatsDogs.htm
+http://www.jinglebiz.com/say.htm
+http://www.jinsa.org/articles/view.html?documentid=505
+http://www.jirehpublishers.com/Awakenings.Chapter1.htm
+http://www.jis.gov.jm/minspeeches/html/20041021t230000-0500_4015_jis_national_broadcast_by_dr__the_hon__peter_phillips__minister_of_national_security_on_october_21__2004.asp
+http://www.jisan.org/studentinformation/studentsbenefit/student_benefits.htm
+http://www.jisc.ac.uk/index.cfm?name=bringing_to_life_census_news_170205
+http://www.jisc.ac.uk/index.cfm?name=event_townmtg2_0202
+http://www.jisc.ac.uk/index.cfm?name=event_townmtg_0502
+http://www.jisc.ac.uk/printer_friendly.cfm?name=jcsr_1102
+http://www.jiscinfonet.ac.uk/Events
+http://www.jiscinfonet.ac.uk/Events/index_html/
+http://www.jiscinfonet.ac.uk/InfoKits/edrm/stage-9/printable_version/html2pdf
+http://www.jiscinfonet.ac.uk/InfoKits/edrm/stage-9/step-1
+http://www.jiscinfonet.ac.uk/InfoKits/effective-use-of-VLEs/managing-for-sustainability/man-sust-cultural-practices
+http://www.jito.org.nz/glass_gateway/school.htm
+http://www.jivemagazine.com/column.php?pid=2653
+http://www.jiverson.com/FAQS/bus_plan.html
+http://www.jjbradshaw.com/Insomnia_Solutions.htm
+http://www.jje.info/lostlives/exhib/potp/rollofhonour3.html
+http://www.jjohnnypress.com/books/lets_talk.html
+http://www.jkevinmorton.com/step_2/
+http://www.jkokuryo.com/papers/1997002/c-c.htm
+http://www.jkrishnamurti.org/showcollectedworks.asp?cwid=93
+http://www.jkup.net/graphics.html
+http://www.jlist.com/ANIME/ANHF_1.html
+http://www.jlist.com/SEARCH/toilet%20paper/1/
+http://www.jlpierson.com/Litig.htm
+http://www.jlsloan.com/ownerman.htm
+http://www.jm-hohenems.at/index.php?id=2020&lang=1
+http://www.jmartinmft.com/es-again.html
+http://www.jmcc.org/research/special/rabin.html
+http://www.jmfiberoptics.com/training_at_jmfo/
+http://www.jmir.org/2001/4/e31/
+http://www.jmir.org/2005/2/e15/
+http://www.jmmdhs.com/index.php/news_article/newsID/29.html
+http://www.jmt.org/news/2003/oct03.html
+http://www.jmu.edu/madison/center/main_pages/teacher/curriculum/chap14.htm
+http://www.jmu.edu/madison/center/main_pages/teacher/curriculum/chap16.htm
+http://www.jmu.edu/madison/center/main_pages/teacher/curriculum/chap4.htm
+http://www.jmu.edu/madison/gpos225-madison2/madexpcontojeff.htm
+http://www.jmu.edu/montpelier/2003Spring/MoldingAFoundingFather.shtml
+http://www.jmwc.org/jmwc_faq.html
+http://www.jncb.com/corp_info/financials.asp
+http://www.jncb.com/corp_info/financials.asp?30092003
+http://www.jncb.com/corp_info/financials.asp?30092004
+http://www.jncb.com/corp_info/financials.asp?31122003
+http://www.jncc.gov.uk/ProtectedSites/SACselection/habitat.asp?FeatureIntCode=H7120
+http://www.jnd.org/
+http://www.jnd.org/askdon.html
+http://www.jneurosci.org/cgi/content/full/22/19/8661
+http://www.jnewswire.com/library/article.php?articleid=337
+http://www.jngm.net/allthings/
+http://www.jniwrapper.com/
+http://www.jnj.com/news/jnj_news/20041213_103803.htm
+http://www.joancarrisbooks.com/ideas.html
+http://www.joancrawfordbest.com/b.htm
+http://www.joanelloyd.com/fbthrust.htm
+http://www.joannabriggs.edu.au/best_practice/bp12.php
+http://www.joannejacobs.com/mtarchives/015322.html
+http://www.joanryan.labour.co.uk/ViewPage.cfm?Action=LargeText&Page=3649
+http://www.joanryan.labour.co.uk/ViewPage.cfm?Page=3649
+http://www.job-descriptions.org/building-pest-control-service-jobs.html
+http://www.job-hunt.org/article_emailedcoverletters.shtml
+http://www.job-hunt.org/jobsearchstandingout.shtml
+http://www.job-hunt.org/onlinejobsearchguide/issue_03_28_02.shtml
+http://www.job-interview.net/duringtheinterview.htm
+http://www.jobbankusa.com/ohb/ohb194.html
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Customers/JobHuntingHelp/WritingLetters
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Customers/WorkingAgeBenefits/493
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Customers/WorkingAgeBenefits/494
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Customers/WorkingAgeBenefits/495
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Customers/WorkingAgeBenefits/497
+http://www.jobcentreplus.gov.uk/cms.asp?Page=/Home/Partners/AllowancesandBenefits/494
+http://www.jobcentreplus.gov.uk/cms.asp?TextOnly=True&Page=/Home/Customers/WorkingAgeBenefits/494
+http://www.jobcyclone.com/articles/haretortoise.php
+http://www.jobcymru.com/en/localecon_canolbarthcymru.php
+http://www.jobdoggy.com/extra1.php
+http://www.jobfitmatters.com/ourpractice/searches/current/nonprofit/p_wvi_dirisp.html
+http://www.jobfizz.com/skills/jobs/Perl_jobs.html
+http://www.jobgusher.com/recfeatures.asp
+http://www.jobjobbed.com/
+http://www.jobjournal.com/article_full_text.asp?artid=638
+http://www.jobplan.com/
+http://www.jobprocentral.com/
+http://www.jobprofiles.org/artfilm2.htm
+http://www.jobprofiles.org/artgym2.htm
+http://www.jobprofiles.org/artlivetheatre.htm
+http://www.jobs-from-home.com/assemblywork.htm
+http://www.jobs.telegraph.co.uk/item.aspx?id=146923
+http://www.jobs.uk.com/
+http://www.jobs1.co.uk/directory/recruitment_graduate.html
+http://www.jobsearch.com/Wyoming-GreenRiver.htm
+http://www.jobseekersadvice.com/employment_issues/articles/leaving_your_job.htm
+http://www.jobserve.com/RecruiterJobListing.aspx?cid=6190
+http://www.jobshoptechnology.com/features/0505/engineering_manufacturing/
+http://www.jobsinireland.ie/recruiter.htm
+http://www.jobsinjapan.com/book/teaching.html
+http://www.jobsinjapan.com/classifieds/business.html
+http://www.jobsinjapan.com/personals/msw.html
+http://www.jobsinnh.com/misc/page.aspx?pagenum=195
+http://www.jobsinsports.com/
+http://www.jobsite.co.uk/privacy/
+http://www.jobsletter.org.nz/jbl17700.htm
+http://www.joburg.org.za/july_2002/brixton2.stm
+http://www.jobwatch.org/national.html
+http://www.jobweb.com/resources/library/Career_Pursuit/Career_Tips_for_Road_232_01.htm
+http://www.jockeyslut.info/staying_in/film/index.php
+http://www.jockmurphy.com/blojsom/blog/travelblog/?month=12&day=8&year=2004
+http://www.joe-ks.com/animals.htm
+http://www.joe-ks.com/palindromes.htm
+http://www.joe.org/joe/1985spring/a4.html
+http://www.joe.org/joe/1995february/a4.html
+http://www.joe.org/joe/1996december/rb2.html
+http://www.joe.org/joe/1999october/a1.html
+http://www.joe.org/joe/2001february/rb1.html
+http://www.joebobbriggs.com/drivein/1990/jailbait.htm
+http://www.joebobbriggs.com/jbamerica/1996/jba960310.html
+http://www.joebolin.net/FSL5CS/Custom/TOCBusiness%20Entity.asp
+http://www.joeclark.org/access/crtc/crtctranscript.html
+http://www.joeclark.org/access/crtc/ctv/crtctranscript.html
+http://www.joeclark.org/access/description/thearrow.html
+http://www.joeclark.org/access/dvd/guidelines/WGBH/
+http://www.joeellers.com/ezine4.htm
+http://www.joeha.com/whiteboard/wbnnov62000.htm
+http://www.joehilldispatch.org/walmartbeat/archives/cat_solutions.php
+http://www.joejennings.com/Bush1.htm
+http://www.joelarose.com/
+http://www.joelfuhrmann.com/blog/archives/cat_culture.html
+http://www.joelkotkin.com/Commentary/LAT%20Home%20Builders%20Looking%20Inward.htm
+http://www.joelonsoftware.com/articles/CollegeAdvice.html
+http://www.joelonsoftware.com/printerFriendly/articles/Wrong.html
+http://www.joelonsoftware.com/printerFriendly/articles/fog0000000051.html
+http://www.joelonsoftware.com/uibook/chapters/fog0000000059.html
+http://www.joepixel.com/blog.php
+http://www.joesmithjazz.com/happy.html
+http://www.joewoodworker.com/catalog/reviews.php?page=5
+http://www.jofreeman.com/sixtiesprotest/FSMMiss.htm
+http://www.joggingstroller.com/faq/general.htm
+http://www.johannesburgbar.co.za/pupillage.html
+http://www.john-daly.com/deadisle/
+http://www.john-daly.com/deadisle/part2.htm
+http://www.john-ross.net/doormat.htm
+http://www.johnankerberg.com/Articles/ATRJ/proof/ATRJ1103-1.htm
+http://www.johnappt.com/experience.htm
+http://www.johnbowman.btinternet.co.uk/scandinavia_6.htm
+http://www.johnclaytonbooks.com/blogger.htm
+http://www.johnclaytonbooks.com/chap1.htm
+http://www.johncullinan.net/2004/01/ummmmmwhat.html
+http://www.johndclare.net/RoadtoWWII4.htm
+http://www.johnduncan.org/bd-essays.html
+http://www.johnedward.net/index2.htm
+http://www.johnfishbein.com/FeelBetterFast/Fishbein/prin1.html
+http://www.johnfishbein.com/princ1.htm
+http://www.johnforester.com/Articles/Social/psychnat.htm
+http://www.johngrooms.org.uk/luckydip/code/lucky_dip.html
+http://www.johnhagel.com/blog20030520.html
+http://www.johnharris.me.uk/arch/comment/record.htm
+http://www.johnharris.me.uk/arch/review/courtney.htm
+http://www.johnhritter.com/
+http://www.johnkay.com/in_action/133
+http://www.johnkerry.com/pressroom/news/news_2004_0915a.html
+http://www.johnkharms.com/whysex.htm
+http://www.johnlescroart.com/holmesex.html
+http://www.johnlewis.com/Shops/DSHistory.aspx?StoreID=11
+http://www.johnlewis.com/Shops/DSLocalEvents.aspx?StoreID=23
+http://www.johnmartin.com/earthquakes/eqpapers/00000049.htm
+http://www.johnmartin.com/earthquakes/eqsafs/safs_970.htm
+http://www.johnmccrory.com/wrote.asp?this=57
+http://www.johnniemoore.com/000309.php
+http://www.johnniemoore.com/blog/archives/000554.php
+http://www.johnnyspencer.info/
+http://www.johnofgod.com/article.htm
+http://www.johnsgate.com/things_to_do.html
+http://www.johnsofromford.co.uk/helmets.htm
+http://www.johnson-county.com/assessor/index.shtml
+http://www.johnsonhealthnetwork.com/jhnvolunteer.htm
+http://www.johnsonshotrodshop.com/bikes.htm
+http://www.johnstonsarchive.net/nuclear/nuclearwar1.html
+http://www.jointheteam.com/press/press_release.asp?id=24
+http://www.jointogether.org/gv/news/features/reader/0,2061,564248,00.html
+http://www.jointogether.org/sa/resources/facts/reader/0,1896,559280,00.html
+http://www.jokes2go.com/00/12/j25.html
+http://www.joma.org/mathDL/4/?pa=content&sa=viewDocument&nodeId=493&bodyId=695
+http://www.jonathanames.com/james/james.html
+http://www.jonathanedwards.com/text/Spider.htm
+http://www.jonathanedwards.com/text/osin/OS-Part%203-1.htm
+http://www.jonathanvangieson.com/archives/2002_12.shtml
+http://www.jonatmat.zen.co.uk/jonatmat/Nutrition/Fear.htm
+http://www.jonentine.com/reviews/UPI_commentary.htm
+http://www.joneslanglasalle.com/shareholders/annual_review/1998/report.html
+http://www.jonesstudioinc.com/index.swf
+http://www.jongailmor.com/passingthru.htm
+http://www.jongailmor.com/smile.htm
+http://www.jonhorne.co.uk/jptapes/jptapes.html
+http://www.joodsmaassluis.com/louise.htm
+http://www.joot.com/dave/writings/articles/hw-sw.shtml
+http://www.jordan.dpsnc.net/fc/may1997/femsmokers.html
+http://www.jordan.palo-alto.ca.us/staff/jforte/public/Voice%20Lesson/voicelesson2.html
+http://www.jordanembassyus.org/06282001002.htm
+http://www.jordanembassyus.org/cbs_09132001.htm
+http://www.jordanembassyus.org/new/commercial/qiz.shtml
+http://www.jordanpublishing.co.uk/tandc.aspx
+http://www.jordantimes.com/fri/weekend/weekend3.htm
+http://www.joric.com/Conspiracy/Bussche-Attempt.htm
+http://www.josephdobrian.com/occupation/parliament.html
+http://www.josephholmes.com/news.html
+http://www.joseyvogels.com/columnweek1.html
+http://www.joshhunt.com/goodart.html
+http://www.joshhunt.com/tension.html
+http://www.joshshear.com/blogjosh/
+http://www.joshuacitrus.com/products.asp?Type=Savers%2BChoice%2BFruit%2BClub&Display_Type=detail
+http://www.joslin.harvard.edu/news/prevent_type2.shtml
+http://www.jour.sc.edu/news/isite/wblock.html
+http://www.jour.unr.edu/zephyr/04_spring_pages/story5/rejfek_sill.html
+http://www.journal.forces.gc.ca/engraph/Vol4/no3/book6_e.asp
+http://www.journal.naeyc.org/btj/200401/maxwell.asp
+http://www.journal.naeyc.org/btj/200409/haddal.asp
+http://www.journalclub.org/2004/11/04/n15
+http://www.journalism.ku.edu/school/waw/writings/waw/newspaper/editorials/whatsthematter.html
+http://www.journalism.org/resources/research/reports/war/postwar/lynch.asp
+http://www.journalism.org/resources/tools/ethics/plagiarism/excerpts.asp?from=print
+http://www.journalism.wisc.edu/j417/fall04/Business/Articles/trek1.htm
+http://www.journalnow.com/servlet/Satellite?pagename=WSJ%2FMGArticle%2FWSJ_BasicArticle&c=MGArticle&cid=1031770150383
+http://www.journalnow.com/servlet/Satellite?pagename=WSJ%2FMGArticle%2FWSJ_BasicArticle&c=MGArticle&cid=1031783308423
+http://www.journalnow.com/servlet/Satellite?pagename=WSJ%2FMGArticle%2FWSJ_BasicArticle&c=MGArticle&cid=1031783499888
+http://www.journalnow.com/servlet/Satellite?pagename=WSJ/MGArticle/WSJ_BasicArticle&c=MGArticle&cid=1031783308423
+http://www.journalofmas.com/contributors.asp
+http://www.journalofwoundcare.com/nav?page=jowc.browselist
+http://www.journals.apa.org/prevention/volume2/pre0020004c.html
+http://www.journals.apa.org/prevention/volume5/pre0050043c.html
+http://www.journals.uchicago.edu/AJ/journal/issues/v125n4/202484/202484.text.html
+http://www.journalstar.com/articles/2004/11/14/election/doc41883266530e3820462872.txt
+http://www.journeyofhearts.org/jofh/about
+http://www.journeyofhearts.org/jofh/butterfly/blaze
+http://www.journeywoman.com/lovestories/twowomen.html
+http://www.journeywoman.com/msbiz/solodining.html
+http://www.joycejamestours.com/joycejames/scottish_journey.htm
+http://www.joycenter.on.ca/books6.htm
+http://www.joycerupp.com/cupofourlife.html
+http://www.joycevalenza.com/questions.html
+http://www.joyjobs.com/
+http://www.joystiq.com/entry/1234000520043660/
+http://www.joystiq.com/entry/1234000617043196/
+http://www.jpgn.org/pt/re/jpgn/fulltext.00005176-200211000-00014.htm
+http://www.jpox.org/servlet/forum/viewthread?thread=1454&lastpage=yes
+http://www.jpri.org/publications/critiques/critique_IV_6.html
+http://www.jpri.org/publications/critiques/critique_X_Special.html
+http://www.jpri.org/publications/occasionalpapers/op19.html
+http://www.jpri.org/publications/occasionalpapers/op29.html
+http://www.jpri.org/publications/workingpapers/wp102.html
+http://www.jpri.org/publications/workingpapers/wp106.html
+http://www.jpri.org/publications/workingpapers/wp24.html
+http://www.jpri.org/publications/workingpapers/wp40.html
+http://www.jprose.com/intro.htm
+http://www.jr.com/JRProductPage.process?Product=3736968
+http://www.jr.com/JRProductPage.process?Product=3819115
+http://www.jr.com/JRProductPage.process?Product=3819118
+http://www.jr.com/JRProductPage.process?Product=3819119
+http://www.jr.com/JRProductPage.process?Product=3819120
+http://www.jr.com/JRProductPage.process?Product=3819121
+http://www.jr.com/JRProductPage.process?Product=3819125
+http://www.jr.com/JRProductPage.process?Product=3863364
+http://www.jr.com/JRProductPage.process?Product=3992940
+http://www.jr.com/JRSectionView.process?N=11266+411269&Ne=400000
+http://www.jr.com/JRSectionView.process?N=19648+4294933172&Ne=500
+http://www.jr.com/JRSectionView.process?Ns=ReleaseDate%7C1&N=19648+4294933172&Ne=500
+http://www.jr.com/JRSectionView.process?Section_Path=/Home_Products/Kitchen/Mixers_and_Processors/
+http://www.jr.com/templates/guides/dental+care.tem
+http://www.jr.com/templates/information/general_shopping.tem
+http://www.jr2.ox.ac.uk/bandolier/ImpAct/imp03/i3-4.html
+http://www.jr2.ox.ac.uk/bandolier/ImpAct/imp04/i4-02.html
+http://www.jr2.ox.ac.uk/bandolier/ImpAct/imp12/i12-5.html
+http://www.jr2.ox.ac.uk/bandolier/band105/b105-1.html
+http://www.jr2.ox.ac.uk/bandolier/band28/b28-5.html
+http://www.jr2.ox.ac.uk/bandolier/bandopubs/WART.html
+http://www.jr2.ox.ac.uk/bandolier/booth/diagnos/Diagessy.html
+http://www.jr2.ox.ac.uk/bandolier/booth/hliving/loswt.html
+http://www.jr2.ox.ac.uk/bandolier/booth/mgmt/patsur2.html
+http://www.jref.com/dir/Business_&_Economy/Economic_Institutions/index.shtml
+http://www.jref.com/dir/Business_&_Economy/Sales_&_Distribution/index.shtml
+http://www.jref.com/dir/Gastronomy/Tea/index.shtml
+http://www.jref.com/dir/Pop_Culture/JPop/
+http://www.jref.com/dir/Pop_Culture/JPop/index.shtml
+http://www.jref.com/dir/Recreation_&_Sports/
+http://www.jref.com/dir/Recreation_&_Sports/index.shtml
+http://www.jref.com/dir/Science_&_Technology/Institutions/index.shtml
+http://www.jref.com/forum/showthread.php?t=9172&page=4
+http://www.jref.com/language/japanese_writing_system_kanji_hiragana_katakana_romaji.shtml
+http://www.jrf.org.uk/knowledge/findings/briefings/LandForHousing.asp
+http://www.jrf.org.uk/knowledge/findings/housing/661.asp
+http://www.jrf.org.uk/knowledge/findings/housing/H188.asp
+http://www.jrf.org.uk/knowledge/findings/housing/HRD58.asp
+http://www.jrf.org.uk/knowledge/findings/housing/h218.asp
+http://www.jrf.org.uk/knowledge/findings/housing/hrd58.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/349.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/732.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/831.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/SC55.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/SC90.asp
+http://www.jrf.org.uk/knowledge/findings/socialcare/n62.asp
+http://www.jrf.org.uk/knowledge/findings/socialpolicy/230.asp
+http://www.jrf.org.uk/knowledge/findings/socialpolicy/621.asp
+http://www.jrf.org.uk/knowledge/findings/socialpolicy/n71.asp
+http://www.jrf.org.uk/knowledge/findings/socialpolicy/spr468.asp
+http://www.jrf.org.uk/knowledge/findings/summary/353.asp
+http://www.jrf.org.uk/knowledge/responses/docs/fairaccesstocare.asp
+http://www.jrf.org.uk/knowledge/responses/docs/lowpaycomm.asp
+http://www.jrf.org.uk/knowledge/responses/docs/newtaxcredits.asp
+http://www.jrmooneyham.com/cnspr.html
+http://www.jrn.columbia.edu/studentwork/cns/2002-04-03/67.asp
+http://www.jrn.columbia.edu/studentwork/cns/2002-04-10/349.asp
+http://www.jrn.columbia.edu/studentwork/cns/2003-04-27/246.asp
+http://www.jroller.com/page/raghukodali/20050328
+http://www.jroller.org/page/bhavin
+http://www.jrothman.com/weblog/archive/2003_04_01_htparchive.html
+http://www.jrothman.com/weblog/archive/2004_07_01_mpdarchive.html
+http://www.jrothman.com/weblog/archive/2004_11_01_htparchive.html
+http://www.jrothman.com/weblog/blogger.html
+http://www.jrsa.org/pubs/reports/bja_handbook_4.html
+http://www.jrtr.net/jrtr13/people48.html
+http://www.jrussellshealth.com/alcben_beerwine.html
+http://www.jsastc.org/expeds_canarygold.htm
+http://www.jseb.org/ourguy.html
+http://www.jsmf.org/grants/bmb/essays/2003/salmelin.htm
+http://www.jsonline.com/alive/news/aug00/irradsd02080100.asp
+http://www.jsonline.com/alive/news/jun05/335255.asp
+http://www.jsonline.com/alive/nutrition/jun05/331489.asp
+http://www.jsonline.com/bym/news/dec03/195898.asp
+http://www.jsonline.com/bym/news/may05/328787.asp
+http://www.jsonline.com/columns/fcstoh.asp
+http://www.jsonline.com/lifestyle/advice/feb02/17657.asp
+http://www.jsonline.com/lifestyle/col/lcabby.asp
+http://www.jsonline.com/news/editorials/jun05/335407.asp
+http://www.jsonline.com/news/editorials/sep04/258047.asp
+http://www.jsonline.com/news/metro/feb02/19229.asp
+http://www.jsonline.com/news/metro/feb04/207685.asp
+http://www.jsonline.com/news/metro/jul03/152233.asp
+http://www.jsonline.com/news/metro/jun05/334084.asp
+http://www.jsonline.com/news/metro/jun05/336605.asp
+http://www.jsonline.com/news/metro/mar05/309565.asp
+http://www.jsonline.com/news/metro/oct02/85620.asp
+http://www.jsonline.com/news/nobits/jun05/334805.asp
+http://www.jsonline.com/news/racine/may05/326357.asp
+http://www.jsonline.com/news/state/jan05/291638.asp?format=print
+http://www.jsonline.com/news/state/may03/137990.asp
+http://www.jsonline.com/news/state/sep04/261898.asp
+http://www.jsonline.com/packer/news/dec04/287433.asp
+http://www.jsonline.com/sports/prep/mar03/125600.asp
+http://www.jsonline.com/traffic/
+http://www.jsps.go.jp/j-rftf/saishu/013-2_e.html
+http://www.jstor.org/news/2001.10/publisher.trust.html
+http://www.jsu.edu/depart/edprof/hper/des.html
+http://www.jsurfers.com/surfreports_05_2001.html
+http://www.jsurfers.com/surfreports_07_2002.html
+http://www.jtb.co.jp/sunrisetour/07_condition_2005.html
+http://www.jtgreendds.com/html/procedures.html
+http://www.jtsears.com/fayedisco.htm
+http://www.juaa.or.jp/english/main/hyouka/koumoku/koumoku001.html
+http://www.juancole.com/2003_12_01_juancole_archive.html
+http://www.juancole.com/2004_03_01_juancole_archive.html
+http://www.juancole.com/2004_05_01_juancole_archive.html
+http://www.juancole.com/2004_07_01_juancole_archive.html
+http://www.juancole.com/2004_09_01_juancole_archive.html
+http://www.juancole.com/2004_11_01_juancole_archive.html
+http://www.juancole.com/2005/02/chalabi-interviewed-by-stephanopoulos.html
+http://www.juanperez.com/history/flag.html
+http://www.jubilee-centre.org/kss/
+http://www.jubilee2000uk.org/worldnews/europe/times070903.htm
+http://www.jubileeusa.org/join_us/NC_meeting.html
+http://www.jud.state.ct.us/legalterms.htm
+http://www.judandk.force9.co.uk/workhouse.html
+http://www.judgeslodging.org.uk/education/Pages/stolen_ducks_trial.html
+http://www.judicialwatch.org/5309.shtml
+http://www.judiciary.state.nj.us/higbee/Smith050125.htm
+http://www.judocalendar.com/judo/20050205PAJudoRefereeClinic.htm
+http://www.judoinfo.com/biblio3.htm
+http://www.judonsw.com.au/registeredclubs.htm
+http://www.judson.org/sermons/senecal/03-10-02.htm
+http://www.judyblume.com/articles/places-intro.html
+http://www.judyblume.com/writing-jb.html
+http://www.judycolwell.com/Congrats.html
+http://www.judygruen.com/newsletter126307.htm
+http://www.judymalloy.net/newmedia/irene.html
+http://www.judymori.com/
+http://www.judyreeveswriter.com/paying_attention.htm
+http://www.judyreeveswriter.com/writing_in_community.htm
+http://www.julianhodgebank.com/group/accounts.asp
+http://www.julianlewis.net/speech_detail.php?id=37
+http://www.julianlewis.net/tribute_detail.php?id=3
+http://www.juliemorgenstern.com/task_masters.html
+http://www.julien-k.com/phpBB2/viewtopic.php?p=48223&
+http://www.july27.org/faqs.html
+http://www.jumbojoke.com/000093.html
+http://www.jumbomumbo.com/bluesuedepages/bluesuedechap11.html
+http://www.jumbomumbo.com/bluesuedepages/bluesuedechap13.html
+http://www.jumpforthecause.com/archive/JFTC2000.htm
+http://www.jumptheshark.com/t/totellthetruth.htm
+http://www.jumpybumpy.com/jb/freechory/viewchoreography.asp?freechoryid=259
+http://www.junction.co.uk/HTMLTemplates/our_work/future_junction.htm
+http://www.juneauempire.com/weddings/story/planning/tips.shtml
+http://www.junepekol.com/body.cfm?page=list&commercial=0&EstateType=1&groupid=1
+http://www.juneshelley.com/actress.htm
+http://www.jungtype.com/types/estj.htm
+http://www.juniorabroad.com/
+http://www.junioreurovision.tv/english/971.htm
+http://www.juniorexec.gov.uk/juniorexec/servlet/controller?p_service=Content.show&p_applic=CCC&pContentID=426
+http://www.juniorleagueofmiami.com/journalfall03.html
+http://www.junklight.com/thoughts/
+http://www.junklight.com/weblog/archives/000089.html
+http://www.junkmail.org/resources/questions.html
+http://www.juntosociety.com/dayinhistory/020103.html
+http://www.juntosociety.com/inaugural/bharrison.html
+http://www.juntosociety.com/information/galen/gi_ccm25_072303.htm
+http://www.juntosociety.com/information/galen/gi_ccm3021203.htm
+http://www.jupiterevents.com/sew/fall04/
+http://www.jur.lu.se/Internet/Biblioteket/Examensarbeten.nsf/0/D85109F696820FB7C1256E080071AC82/$File/xsmall.pdf?OpenElement
+http://www.jurispub.com/books.asp?id=20
+http://www.jus.uio.no/lm/cmi.york.antwerp.rules.1994/doc.html
+http://www.jus.uio.no/lm/un.sea.carriage.hamburg.rules.1978/doc
+http://www.jusbiz.org/resources/globalmobile.shtml
+http://www.just-food.com/features_detail.asp?art=856
+http://www.just-food.com/press_releases_detail.asp?art=1077
+http://www.just-for-kids.com/48FGCA.HTM
+http://www.just-for-kids.com/FUNCA.HTM
+http://www.just35.com/Finance/Compensation%20and%20Personal%20Injury%20Claims/
+http://www.justabovesunset.com/id45.html
+http://www.justabovesunset.com/id837.html
+http://www.justagwailo.com/
+http://www.justcolleges.com/grad/index.phtml?inc=grad_peer.htm
+http://www.justforwomen.net/ExerciseWellness/StayingFit/index.jsp
+http://www.justfrancesales.com/luberon.html
+http://www.justfreestuff.com/survey.html
+http://www.justgive.org/ways/50wayschildren.jsp
+http://www.justglassmall.com/directory/directory.html
+http://www.justgrenada.co.uk/info.htm
+http://www.justice.gouv.qc.ca/english/publications/generale/union-civ-a.htm
+http://www.justice.gov.ab.ca/ocme/publications_stats.aspx?id=1958
+http://www.justice.gov.yk.ca/prog/cs/wit/beingwit.html
+http://www.justice.govt.nz/pubs/reports/1999/dir_of_info/list_r/racing_industry.html
+http://www.justice.govt.nz/pubs/reports/2004/status-hearings-evaluation/complainants.html
+http://www.justice.govt.nz/pubs/reports/2004/target-hardening/partc.htm
+http://www.justicedemanded.org/arty17.htm
+http://www.justiceinitiative.org/activities/lcd/cle/cle_ceefsu
+http://www.justicewomen.com/letters.html
+http://www.justitie.nl/english/Publications/factsheets/same-sex_marriages.asp
+http://www.justlisted.com.au/sp/jlresagplist.asp?ag=2224&fr=home&stype=rs
+http://www.justnaturalstuff.co.uk/ishop/1013/shopscr345.html
+http://www.justpeace.org/rules.htm
+http://www.justpeople.com/contentnew/careeradvice/WorkingLife/SquareMeal.asp
+http://www.justphonecards.com/helpdesk/faq.html
+http://www.justproperty.com/articles/dec.html
+http://www.justracing.com.au/index.php?news_page=3&artid=1292&catid=52
+http://www.justreservations.com/content.asp~PageID=213
+http://www.justresponse.net/Abad_2.html
+http://www.justresponse.net/DougalWatt20Aug02.html
+http://www.justriddlesandmore.com/screensavers.html
+http://www.justswimmac.org/
+http://www.juvenile.org/about.html
+http://www.jvfc.com/
+http://www.jwj.org/updates/2001/08-01.htm
+http://www.jwod.gov/jwod/participate/current_distributors.html
+http://www.jwolfe.clara.net/Downloads/Match.htm
+http://www.jwpepper.com/catalog/search?wwwinvno=&passwd=&weblist=subvocreplinkmid4&id=&index=104
+http://www.jwww.com/riverbends/
+http://www.jyda.org/cnl.html
+http://www.jyetara.com/
+http://www.jyi.org/volumes/volume11/issue1/articles/patel.html
+http://www.jyi.org/volumes/volume11/issue3/articles/rauschecker.html
+http://www.jymkruse.com/Family/KDT.html
+http://www.jyu.fi/intl/eng/courses/sport_sciences.html
+http://www.k-1.com/Orwell/site/$country=us$/interaction/link.html
+http://www.k-1.com/Orwell/site/discussion/show_thread.html?board=102&thread=1083
+http://www.k-1.com/Orwell/site/work/essays/bookshop.html
+http://www.k-online.de/cipp/md_k/custom/pub/content,lang,2/oid,4258/ticket,g_u_e_s_t/local_lang,2
+http://www.k12.dc.us/dcps/dcpsnews/dcmediacntr.html
+http://www.k12.wa.us/
+http://www.k12.wa.us/SchFacilities/ESRR.aspx
+http://www.k12.wa.us/certification/teacher/teacherinformation.aspx
+http://www.k12.wa.us/curriculumInstruct/Arts/frameworks/Edance.aspx
+http://www.k2news.com/mak02disp2.htm
+http://www.kab.org/aboutus2.asp?id=130
+http://www.kab.org/kabtoolbox/toolbox2.asp?id=373
+http://www.kabalarians.com/forum/forum_posts.asp?TID=93&PN=1
+http://www.kabalarians.com/forum/forum_posts.asp?TID=93&PN=1&TPN=1
+http://www.kable.com/news/Industry/5200,02,0612,002.asp
+http://www.kabulguide.net/kbl-walking.htm
+http://www.kacike.org/Fewkes.html
+http://www.kacike.org/srcc/project.htm
+http://www.kagyubuddhist.org/biography.htm
+http://www.kaibab.org/bc/gc_tr_tt.htm
+http://www.kaibab.org/moodies/mxjays.htm
+http://www.kaine2005.org/issues_faithandvalues.asp
+http://www.kairo.at/science/lang/country.php
+http://www.kaisernetwork.org/daily_reports/rep_index.cfm?DR_ID=30788
+http://www.kaisernetwork.org/daily_reports/rep_index.cfm?hint=1&DR_ID=28358
+http://www.kaisernetwork.org/daily_reports/rep_index.cfm?hint=2&DR_ID=24723
+http://www.kakiseni.com/notices
+http://www.kal69.dial.pipex.com/shop/pages/isbn021.htm
+http://www.kalanienglish.com/news_mauinews_030131.html
+http://www.kalbould.wa.gov.au/index.php?content=marketing&page=faq.htm
+http://www.kalesnursery.com/gardencenter.htm
+http://www.kalilily.net/weblog/03/08/28/142940.html
+http://www.kamcity.com/library/articles/distsale.htm
+http://www.kamera.co.uk/reviews_extra/buffalo_soldiers.php
+http://www.kamya.com/aos/ncarolina.html
+http://www.kamya.com/aos/nebraska.html
+http://www.kananaskisgolf.com/pro.html
+http://www.kancoll.org/books/thayer/t_introd.htm
+http://www.kancoll.org/books/ware/ew_chap01.htm
+http://www.kanemarie.com/glass/simpson/
+http://www.kanetrading.com/a_comm/04_4Qarc/december/121204_d_comm_arc.html
+http://www.kanetrading.com/a_comm/05_1Qarc/january/012305_d_comm_arc.html
+http://www.kangguru.org/englishmagazine.htm
+http://www.kankeiren.or.jp/English/k-eco-now0107.htm
+http://www.kannerandassoc.com/matrix106.html
+http://www.kansascity.com/mld/kansascity/classifieds/real_estate/for_sale/ask_expert_front.html
+http://www.kansascity.com/mld/kansascity/contact_us/help/faq_np1/
+http://www.kansasmonks.org/RuleOfStBenedict.html
+http://www.karagen.org/
+http://www.karagrant.net/olympicqualification04.html
+http://www.karakuri.gr.jp/creation/report/report006-010/report6-10.htm
+http://www.karaokeunlimited.com/shipping.php
+http://www.karat.org/eu_and_economy/bettina_musiolek.html
+http://www.karateconnection.com/faq.htm
+http://www.karenalkalay-gut.com/diaryjan2804.html
+http://www.karencheng.com.au/archive/0308.htm
+http://www.karinvintners.co.uk/wineguide/essential.asp
+http://www.karinvintners.co.uk/wineschool/ar000003.asp
+http://www.karinya.com/ph.htm
+http://www.karinya.com/torndos.htm
+http://www.karisable.com/court.htm
+http://www.karlloren.com/Diabetes/p64.htm
+http://www.karlloren.com/ultrasound/p37.htm
+http://www.karma-kagyud.org.sg/Dharma/true_buddhist.htm
+http://www.karmabum.com/diary4.htm
+http://www.karmanos.org/app.asp?id=371
+http://www.karmanos.org/app.asp?id=371&ssec=5
+http://www.karmanos.org/app.asp?id=385
+http://www.karmanos.org/app.asp?id=385&go.x=12&go.y=7
+http://www.karmel.at/eng/teresa.htm
+http://www.karnakcorp.com/faq_articles_01.html
+http://www.karting.co.uk/KandK/Tech/KartSetup.html
+http://www.karvy.com/compresearch/final%20sectors/auto-cars/1players285.htm
+http://www.kashmirobserver.com/wadoo.htm
+http://www.kasino.co.uk/2002_06_16_blogarchive.htm
+http://www.katapi.org.uk/TandS/XI.htm
+http://www.katelundy.com.au/Anti-war.htm
+http://www.katelundy.com.au/Japan.htm
+http://www.katherinegarbera.com/books/xmas.htm
+http://www.kathkwilts.com/shops/alaska.html
+http://www.kathleensworld.com/photos.html
+http://www.katie.com/babyblog/archives/2004_04.html
+http://www.katikati.co.nz/kk_text/kdv.html
+http://www.katinkahesselink.net/kr/love.html
+http://www.katkunz.com/updates2003.htm
+http://www.katsueydesignworks.com/happyclients.htm
+http://www.katyfreeway.org/contractB_TCP.html
+http://www.katyterrega.com/dirtyjob.html
+http://www.kauffman.org/items.cfm/510
+http://www.kaufmanzoning.net/horsemeat/PiratePress122003.htm
+http://www.kaunas.lt/english/business/economics.shtml
+http://www.kauppalehti.fi/4/i/eng/stocks/share/bulletin.jsp?id=200501193306&stoid=AMC1V&comid=AMC
+http://www.kaupthing.net/default.aspx?pageid=1159
+http://www.kavasoft.com/iTunesCatalog/faq/
+http://www.kavlaoved.org.il/katava_main.asp?news_id=976&sivug_id=21
+http://www.kavousa.com/products/lab/gb_fd/arcuspro.asp?navid=4620&lan=Us&nstr=5000
+http://www.kayakbaja.com/guides.html
+http://www.kayakconnection.com/KC_Pages/Equipment_Rentals.html
+http://www.kaycounty.info/101_Ranch/the-stories.htm
+http://www.kayukay.co.uk/yorkbandb.html
+http://www.kaywebs.co.uk/portfolio_average.htm
+http://www.kazakhembus.com/
+http://www.kazakhembus.com/Life_under.html
+http://www.kbalertz.com/kb_832926.aspx
+http://www.kbdnet.net.au/ryudo/news_letter.htm
+http://www.kbis.co.uk/bloodstock_policy.htm
+http://www.kc3.com/editorial/40reasons.htm
+http://www.kcba.org/justice/
+http://www.kcbbs.gen.nz/lori/ar/behaviour.html
+http://www.kcc.state.ks.us/pipeline/minutes_050605.htm
+http://www.kcc.zaq.ne.jp/dfeea307/archer.html
+http://www.kccu.com/misc/news.asp
+http://www.kcffulocal1301.com/article.php?sid=104
+http://www.kcffulocal1301.com/article.php?sid=99
+http://www.kcfs.org/standards05/idcritiques/dennison.html
+http://www.kcglass.co.uk/home.html
+http://www.kchealthcare.com/productpromosite/patientwarming/www/Index.asp?action=productdetails&id=1404
+http://www.kckpl.lib.ks.us/FINEARTS/ARTLINKS/Film.htm
+http://www.kcl.ac.uk/depsta/catser/pgmchospext.html
+http://www.kcl.ac.uk/depsta/catser/pgmchospint.html
+http://www.kcl.ac.uk/depsta/geog/staff/drake.html
+http://www.kcl.ac.uk/depsta/rel/ccjs/justicelink/police.html
+http://www.kcl.ac.uk/diveng/mecheng/msc/msc-came.html
+http://www.kcl.ac.uk/humanities/cch/allc/refdocs/com0305.htm
+http://www.kcl.ac.uk/humanities/cch/allc/refdocs/com1200.htm
+http://www.kcl.ac.uk/humanities/cch/handbooks/handbook2001/courses.htm
+http://www.kcl.ac.uk/lhcma/cats/kirke/ki80-01-.htm
+http://www.kcl.ac.uk/ugp06/programme.php?getid=181
+http://www.kcls.org/goodreads1/teen/read_three.cfm
+http://www.kcmetro.cc.mo.us/longview/ctac/corenotes.htm
+http://www.kcna.co.jp/item/1997/9709/news9/11.htm
+http://www.kcna.co.jp/item/1999/9910/news10/04.htm
+http://www.kcna.co.jp/item/1999/9910/news10/07.htm
+http://www.kcna.co.jp/item/1999/9912/news12/02.htm
+http://www.kcna.co.jp/item/1999/9912/news12/14.htm
+http://www.kcna.co.jp/item/2000/200012/news12/30.htm
+http://www.kcna.co.jp/item/2004/200405/news05/06.htm
+http://www.kcna.co.jp/item/2004/200410/news10/29.htm
+http://www.kcna.co.jp/item/2005/200502/news02/08.htm
+http://www.kcpt.org/olin/stardate.html
+http://www.kcpug.org/site/modules/newbb/viewtopic.php?topic_id=180&forum=4
+http://www.kcscripts.com/manual/classifieds_help.htm
+http://www.kcstar.com/item/pages/opinion.pat,opinion/30db01bd.524,.html
+http://www.kcstar.com/item/pages/printer.pat,opinion/30db01bd.524,.html
+http://www.kcunitedway.org/warrick.htm
+http://www.kcwindows.co.uk/
+http://www.kdassem.dk/didaktik/l4-16.htm
+http://www.kde.org/announcements/announcement.php
+http://www.kdedevelopers.org/node/view/1001
+http://www.kdedevelopers.org/node/view/1138
+http://www.kdedevelopers.org/node/view/219
+http://www.kdedevelopers.org/node/view/786
+http://www.kdhe.state.ks.us/news/web_archives/2004/06042004.html
+http://www.kdhx.org/reviews/christmas_carol_0312.html
+http://www.kdnuggets.com/companies/products.html
+http://www.kdp.org/lifecycle/emeritus/opportunities.php
+http://www.kdp.pp.se/music/
+http://www.keele.ac.uk/depts/aa/studentsupport/counselling/problems/depression.htm
+http://www.keen.com/documents/help/prtoolkit.asp
+http://www.keene.edu/catalog/acadresources.cfm
+http://www.keener13.com/memories/Default.asp
+http://www.keepandbeararms.com/news/nl/disp.asp?d=6/20/2005
+http://www.keepandbeararms.com/opsd/default.asp
+http://www.keepflbeautiful.org/bylaws.asp
+http://www.keepgoing.org/issue19_demands/the_quest_for_answers.html
+http://www.keepitcoming.net/sci-fi.html
+http://www.keepkidshealthy.com/parenting_tips/parenting_in_public.html
+http://www.keepkidshealthy.com/reviews/parenting_books/the_good_son.html
+http://www.keepmainefree.org/ld1219.html
+http://www.keepmedia.com/Search.do?criteria=glass%20ceiling&extID=10026
+http://www.keepmedia.com/pubs/AccessControlSecuritySystems/2005/05/01/871433?extID=10026
+http://www.keepmedia.com/pubs/Construction/2005/03/14/774670?extID=10026
+http://www.keepmedia.com/pubs/ConstructionNews/2005/03/07/765432?extID=10026
+http://www.keepmedia.com/pubs/Direct/2000/05/31/112639?extID=10026
+http://www.keepmedia.com/pubs/Esquire/2000/02/01/171758?extID=10026
+http://www.keepmedia.com/pubs/Esquire/2002/05/01/139242?extID=10026
+http://www.keepmedia.com/pubs/Esquire/2002/10/01/139524?extID=10026
+http://www.keepmedia.com/pubs/Esquire/2003/09/01/262146?extID=10026
+http://www.keepmedia.com/pubs/GiftsDecorativeAccessories/2005/01/01/703123?extID=10026
+http://www.keepmedia.com/pubs/Shape/2005/06/07/884674?extID=10026
+http://www.keepmedia.com/pubs/TestMeasurementWorld/2002/09/01/191694?extID=10026
+http://www.keepmedia.com/pubs/USNewsWorldReport/2004/02/02/362297?extID=10026
+http://www.keepmedia.com/pubs/netConnect/2005/04/15/889707?extID=10026
+http://www.keepyoursecrets.com/
+http://www.keeverforcongress.com/pressreleases.html
+http://www.keganpaul.com/product_info.php?cPath=43&products_id=289
+http://www.keir.net/k9.html
+http://www.keithmurray.co.uk/news/index.shtml
+http://www.kelb-tal-fenek.com/rabbithunt.htm
+http://www.kelkoo.co.uk/b/a/sbs/uk/toyKeywords/keywords/leap+pad/168001.html
+http://www.keller.co.uk/klr/corporate/csr/
+http://www.kellogg.northwestern.edu/news/hits/040323npr.htm
+http://www.kellogg.northwestern.edu/register/1st_asgn/winter9798/m&s-day-win.htm
+http://www.kellogg.northwestern.edu/webresources/faculty/directory.htm
+http://www.kellogg.umich.edu/bios/moroi.research.html
+http://www.kellogg.umich.edu/patientcare/maps/annarbormap.html
+http://www.kellymom.com/babyconcerns/gassybaby.html
+http://www.kellyn.com/lrcgd/events.htm
+http://www.kellypro.com/MagiciansAndJugglers/ThePassingZone.htm
+http://www.kellys-korner-xp.com/win_xp_restart.htm
+http://www.kellysearch.co.uk/gb-product-33047.html
+http://www.kellysearch.com/qu-product-64138.html
+http://www.kellyservices.ie/eprise/main/web/ie/services/en/win_at_work
+http://www.kelseybassranch.com/
+http://www.kempler.com/product_detail.cfm/datakey/2/category/Presses/category1/Laminating%20(Also%20See%20Presses,%20Molding%20Compression)/seqnum1/2161.htm
+http://www.kempler.com/product_detail.cfm/datakey/2/category/Presses/category1/Molding%20Compression%20Hydraulic%20(Also%20See%20Presses,%20Laminating%20and%20Molding%20Compression%20Transfer)/seqnum1/2428.htm
+http://www.kempler.com/product_detail.cfm/datakey/2/category/Presses/category1/Molding%20Compression%20Hydraulic%20(Also%20See%20Presses,%20Laminating%20and%20Molding%20Compression%20Transfer)/seqnum1/2456.htm
+http://www.kempler.com/product_detail_print.cfm/datakey/2/category/Presses/category1/Laminating%20(Also%20See%20Presses,%20Molding%20Compression)/seqnum1/2161.htm
+http://www.kempler.com/product_detail_print.cfm/datakey/2/category/Presses/category1/Molding%20Compression%20Hydraulic%20(Also%20See%20Presses,%20Laminating%20and%20Molding%20Compression%20Transfer)/seqnum1/2162.htm
+http://www.kempt.co.uk/
+http://www.kenai-peninsula.org/archives/000058.html
+http://www.kenanmalik.com/essays/expression.html
+http://www.kenanmalik.com/papers/engelsberg_nature.html
+http://www.kenanmalik.com/tv/analysis_value.html
+http://www.kenanmalik.com/work_in_progress/archive/race_03.html
+http://www.kenaz.com/shaman/shamansuffering.htm
+http://www.kencollins.com/bobo-02.htm
+http://www.kencollins.com/bobo-57.htm
+http://www.kendall-bioresearch.co.uk/crust.htm
+http://www.kendall-bioresearch.co.uk/domest.htm
+http://www.kendall-bioresearch.co.uk/spider.htm
+http://www.kendall.edu/index.cfm/fuseaction/academics.school_detail/object_id/4F1B93C1-C477-42C8-AE91-1B56DABA20A6/sub_school_id/CC503CC0-3D74-4ADF-8D60-8C931638B62E
+http://www.kendallsummerhawk.com/marketing-speaking.html
+http://www.kendo-world.com/forum/archive/index.php?t-5961.html
+http://www.kendo-world.com/forum/showthread.php?t=7131
+http://www.kenes.com/arrhythmia/wel.htm
+http://www.kenes.com/stroke2006/abstract_form.asp
+http://www.kenkifer.com/Thoreau/village.htm
+http://www.kenkifer.com/bikepages/
+http://www.kenkifer.com/bikepages/traffic/motorist.htm
+http://www.kenleonardjr.com/articles/FearOfLosingMoney.html
+http://www.kenmarend.com/kenmarenews/feature%20stories/feature120.htm
+http://www.kennedy-center.org/about/virtual_tour/jazz_club.html
+http://www.kennedykrieger.org/kki_cp.jsp?pid=1574
+http://www.kennedykrieger.org/kki_cp.jsp?pid=1577
+http://www.kennedyspacecenter.com/visitKSC/atx.asp
+http://www.kenneldesign.com/blueprints/double12/building/
+http://www.kenneldesign.com/blueprints/double12/storeroom/
+http://www.kenneldesign.com/blueprints/double12/walkway/
+http://www.kenneldesign.com/blueprints/double20/building/
+http://www.kenneldesign.com/blueprints/double20/storeroom/
+http://www.kennelstation.com/
+http://www.kennethoppel.ca/pg_b_liveforever_excpt.htm
+http://www.kennyrichey.org/index.php?option=content&task=view&id=26&Itemid=38
+http://www.kennysia.com/archives/2005/04/40_hours_at_the.php
+http://www.kennywood.com/attractions/policies.php
+http://www.keno.org/hound_dog_taylor/notesbybruce.htm
+http://www.kenpattern.or.id/femina.html
+http://www.kensington-chelsea.com/Walk.htm
+http://www.kenstone.net/fcp_homepage/24p_in_FCP_nattress.html
+http://www.kenstone.net/fcp_homepage/beyond_dv_nattress.html
+http://www.kent.ac.uk/careers/ScienceJobs.htm
+http://www.kent.ac.uk/politics/research/erwp/vana.htm
+http://www.kent.ac.uk/psychology/department/people/hamilton-westke/
+http://www.kent.edu/comm/communique/index.cfm
+http://www.kented.org.uk/ngfl/ict/IWB/whiteboards/report.html
+http://www.kentishguards.org/briefhistory.htm
+http://www.kentlaw.edu/classes/rstaudt/internetlaw/casebook/electronic_communications_privacy1.html
+http://www.kentmerkezi.com/avni/lyrics/carmina.html
+http://www.kentucky.com/mld/heraldleader/2005/01/30/news/nation/10771254.htm
+http://www.kentucky.com/mld/kentucky/living/health/10706769.htm
+http://www.kentucky.com/mld/kentucky/news/world/11899559.htm
+http://www.kentucky.com/mld/kentucky/sports/colleges/university_of_kentucky/10793213.htm
+http://www.kentuckycenter.org/backstagepass/econtent.asp?cid=000&iid=BA9526&aid=33
+http://www.kentuckycenter.org/backstagepass/econtent.asp?cid=000&iid=JA83918&aid=33
+http://www.kentuckycoal.com/About%20KCA.htm
+http://www.kentuckygameandfish.com/hunting/ducks-geese-hunting/ky_aa112204a/
+http://www.kentuckygaming.com/news&reports.htm
+http://www.kenyanews.com/exp24/psto_32.html
+http://www.kenyanews.com/exp24/sto_32.html
+http://www.kenyaweb.com/people/taita-taveta.html
+http://www.kenyon.edu/x11602.xml
+http://www.kenyon.edu/x15598.xml
+http://www.keom.de/denkmal/summary.html
+http://www.kepplewray.org.uk/quotes.htm
+http://www.keratex.net/keratex_history.htm
+http://www.kerenmalki.org/UN_establishes_damage_register_for_Palestinians.htm
+http://www.kerismith.com/blog/
+http://www.kerismith.com/blog/archives/2005_01.html
+http://www.kernel.org/
+http://www.kernelthread.com/publications/security/types.html
+http://www.kerneltraffic.org/kernel-traffic/kt20050104_291.html
+http://www.kernvalley.com/news/whiskeyflatcamp.htm
+http://www.kerriscatcare.com/
+http://www.kerryblues.org/RESOURCES/TRAINERS.HTML
+http://www.kerrycoco.ie/environment/litter.asp?id=2
+http://www.kerrycoco.ie/writersweb/
+http://www.kerrytherealmccoy.com/Journal2004.html
+http://www.kersplebedeb.com/mystuff/s11/churchill.html
+http://www.kesgrave.suffolk.sch.uk/learningzone/subjects/geography/ppgcse.html
+http://www.keshilliministrave.al/english/lajm.asp?id=4339
+http://www.ket.org/cgi-plex/watch/?date=2004-12-07+18:00&cd=1&
+http://www.ketchum.org/milo/MSK-IStructE.html
+http://www.kevinharvick.com/POSTRACE/110704.htm
+http://www.kevinhoffberg.com/Guest%20Rants/Leavinghome.htm
+http://www.kevinhogan.com/
+http://www.kevinleitch.co.uk/wp/?p=229
+http://www.kevinmd.com/blog/2005/06/despite-all-complaining-that-doctors.html
+http://www.kevinsites.net/2004_10_31_archive.html
+http://www.kevinsites.net/warboy3_3.php
+http://www.kewaunee.k12.wi.us/Middle%20School%20Student%20Handbook.htm
+http://www.keweenaw.info/conditions.aspx
+http://www.keya.org.uk/text_only.htm
+http://www.keyclub.org/keyclub/about/history/
+http://www.keyclub.org/keyclub/magazine/0205ftatough.asp
+http://www.keyframe.org/txt/matchframe/
+http://www.keymailorder.com/cgi-bin/keymail.pl?special=pinkfloyd0505.htm
+http://www.keynote.org.uk/art/ks3pupils/key_stage_3.htm
+http://www.keyscorner.com/index.php?cat=7
+http://www.keyskillsincontext.co.uk/pru/B/communication/5.php
+http://www.keyskillsincontext.co.uk/pwc/B/communication/2.php
+http://www.keyskillssupport.net/faq/workbased/External_assessment.asp
+http://www.keyskillssupport.net/studentguidesupp/schoolscolleges/learningsupp.asp
+http://www.keystoneresearch.org/sprawl/
+http://www.keytlaw.com/az/corpservices.htm
+http://www.keytlaw.com/az/entities/oafaq.htm
+http://www.keyway.ca/htm2002/samaria.htm
+http://www.kff.org/medicare/loader.cfm?url=/commonspot/security/getfile.cfm&PageID=14375
+http://www.kfki.hu/~tudtor/tudos1/kurti.html
+http://www.kfvs12.com/Global/story.asp?S=1230282
+http://www.kfvs12.com/Global/story.asp?S=2569264&nav=8H3xT9ib
+http://www.kfvs12.com/Global/story.asp?S=2682655
+http://www.kfvs12.com/Global/story.asp?S=2682655&nav=8H3xUASg
+http://www.kgs.ku.edu/General/Geology/Morton/03_intro.html
+http://www.kgs.ku.edu/General/faq.html
+http://www.kgsr.com/iTOOLIncludes/orton.php
+http://www.khaleejtimes.co.ae/appoint1.htm
+http://www.khaleejtimes.com/DisplayArticle.asp?xfile=data/business/2005/January/business_January238.xml&section=business&col=
+http://www.khamaid.org/programs/education/scholarships/
+http://www.khaosanroad.com/inaheartbeat.htm
+http://www.kheper.net/topics/hermeneutics/NiSAN-1.html
+http://www.khilafah.com/home/category.php?DocumentID=9718&TagID=24
+http://www.khmerkrom.net/modules.php?name=News&file=article&sid=271
+http://www.khouse.org/articles/nanscorner/20020501-410.html
+http://www.kickassgear.com/Reviews/Free%20Country.htm
+http://www.kickstartnews.com/reviews/pda/rotring_trio_600_stylus_pen.html
+http://www.kid-at-art.com/htdoc/lesson57.html
+http://www.kidney.org/affiliate/sctx/atoz/atozItem.cfm?id=112
+http://www.kidney.org/atoz/atozItem.cfm?id=112
+http://www.kidney.org/atoz/atozItem.cfm?id=119
+http://www.kidney.org/atoz/atozPrint.cfm?id=112
+http://www.kidney.org/kls/factsheets/showFS.cfm?id=76
+http://www.kidneypatientguide.org.uk/site/whatTheySay.php
+http://www.kidneytransplant.org/kidneyglossary.html
+http://www.kids-klub.co.uk/
+http://www.kids-party.com/ideas-2.htm
+http://www.kids-right.org/newsweek.htm
+http://www.kids-safety-klub.com/
+http://www.kids.nsw.gov.au/arcade/relationships_conflicts.html
+http://www.kids.nsw.gov.au/check/faq.html
+http://www.kidscamps.com/press/parenthood.html
+http://www.kidscanmakeadifference.org/Newsletter/ns2000j.htm
+http://www.kidscanmakeadifference.org/cando.htm
+http://www.kidsclick.com/disney.htm
+http://www.kidsclick.com/math.htm
+http://www.kidscook.com/whatsnew.ASP
+http://www.kidsdomain.com/craft/pencil5.html
+http://www.kidsgrowth.com/resources/advicedetail.cfm?id=2351
+http://www.kidsgrowth.com/resources/articledetail.cfm?id=145
+http://www.kidshealthworks.com/topic.asp?topic_id=171
+http://www.kidsincars.org/actualcases/Abductions_Kidnappings.htm
+http://www.kidsincars.org/actualcases/Vehicle%20In%20Motion.htm
+http://www.kidsource.com/NICHCY/girl_disability3.html
+http://www.kidsource.com/kidsource/content2/appropriate.add.html
+http://www.kidsource.com/kidsource/content2/assistive_technology.html
+http://www.kidsource.com/kidsource/content2/funding/apply.html
+http://www.kidsource.com/kidsource/content4/legal.rights.gifted.ed.html
+http://www.kidsource.com/kidsource/content4/promote.phyed.html
+http://www.kidsource.com/kidsource/pages/dis.add.html
+http://www.kidsread.net/bohideous5.html
+http://www.kidsreads.com/index.asp
+http://www.kidsrunning.com/ask/krask0209fundraiser.html
+http://www.kidstamps.com/showprod.asp?Mugs
+http://www.kidswithtasers.com/index.php?itemid=61
+http://www.kidzworld.com/site/p2470.htm
+http://www.kier.co.uk/news/Default.asp?PageNo=3&Mode=1&company=0&f=p
+http://www.kierenmccarthy.me.uk/pages/journalism/register/2003/Mar/itu-meeting.html
+http://www.kifaru.com/aboutus.html
+http://www.kiiss.org/SecondhandSmokePosesHeartAttackRisk.htm
+http://www.kilgorenewsherald.com/news/2005/0417/Front_Page/015.html
+http://www.kilkennycoco.ie/publications/advertisements/default.aspx?id=1173
+http://www.kilkennycoco.ie/publications/advertisements/default.aspx?id=1174
+http://www.kilkennycollege.ie/pastps/pastppnews.htm
+http://www.killallthewhiteman.com/lessoldnews.html
+http://www.killermovies.com/forums/archive/index.php/t-5855
+http://www.killermovies.com/forums/f38/t346337.html
+http://www.killerorange.com/KillerRefs/Category/orgdonatehousegoods.htm
+http://www.killingthebuddha.com/moreletters.htm
+http://www.killingtrain.com/archives/000336.html
+http://www.kilmorecottage.com/faq.htm
+http://www.kilroywashere.org/006-Pages/06-BombOregon.html
+http://www.kiltmen.com/world.htm
+http://www.kimcorealty.com/News/article.asp?FileName=1stQtrpressrelease4-25-2005-WEB_4-25-2005_7-34-54AM.inc
+http://www.kimel.net/angel.html
+http://www.kimel.net/hitman.html
+http://www.kimopress.com/fire.html
+http://www.kimskorner4teachertalk.com/
+http://www.kimsoft.com/korea/kji-815.htm
+http://www.kimsoft.com/korea/us-army.htm
+http://www.kinderart.com/
+http://www.kinderhookconnection.com/attractn.htm
+http://www.kinderkorner.com/back2.html
+http://www.kinderstart.com/bringinghomebaby/babysitters.html
+http://www.kindredhealthcare.com/BulletinBoard/bb100903.asp
+http://www.kinema.uwaterloo.ca/hollo-bff051.htm
+http://www.kinema.uwaterloo.ca/micz952.htm
+http://www.kinesic.com/miva/merchant.mvc?Screen=PLST&Store_Code=KEP
+http://www.kineticcom.com/thecompany-jay.html
+http://www.kinetico.com/residntl/hardsoft.htm
+http://www.kineticsolutions.co.uk/00000017.html
+http://www.king.igs.net/~elgin/elginnew/main/xmasstory.html
+http://www.kingcountyjournal.com/sited/story/html/107801
+http://www.kingdomofdrakkar.com/faq_4.htm
+http://www.kingfisherpress.com/Hugo_page_2.htm
+http://www.kingharold.essex.sch.uk/testsite/bstaffinglist.asp
+http://www.kinghussein.gov.jo/94_dec14.html
+http://www.kinglawler.com/update092602.html
+http://www.kingsarmsinn.co.uk/history_of_the_kings.htm
+http://www.kingsbrook.northants.sch.uk/departments.htm
+http://www.kingsbruton.org.uk/
+http://www.kingschools.com/productDetail.asp?ITEMNO=OOC+AVMRMCD
+http://www.kingschools.com/productDetail.asp?ITEMNO=OOC+AVMRMCDW
+http://www.kingshighway.org/articles/20020501-410.html
+http://www.kingston.ac.uk/cusp/Lectures/Lashmar.htm
+http://www.kingston.ac.uk/fractal/abstr2004.html
+http://www.kingston.ac.uk/undergraduate/courses/a103.htm
+http://www.kingstownecatclinic.com/New%20Pet%20Introduction.htm
+http://www.kingstownecatclinic.com/crf.htm
+http://www.kingsway-global.com/legal.asp
+http://www.kinkosworkersunite.info/
+http://www.kinkyfriedman.com/news/2004/11/olive-oil-for-peace.html
+http://www.kinnaird.net/scothist.htm
+http://www.kinocite.co.uk/16/1692.php
+http://www.kinrossrender.com/publiceye/newsletter.php?issue=3
+http://www.kintespace.com/rasx09.html
+http://www.kintespace.com/rasxlog/
+http://www.kintespace.com/rasxlog/index.php?cat=11
+http://www.kiontv.com/guides/parenting/story.aspx?content_id=DB6B88ED-2632-434F-8B4F-4838AF92F552
+http://www.kiosks.org/articles/worksol072103a.html
+http://www.kiowacountycolo.com/sf-oil.htm
+http://www.kiplinger.com/columns/car/archive/2003/car0717.html?section=&department=&sub_department=
+http://www.kiplinger.com/columns/fitness/archive/2003/ff030115.htm?section=&department=&sub_department=
+http://www.kiplinger.com/features/archives/2002/December/spending/car5step.html
+http://www.kiplinger.com/tools/fig401k.html
+http://www.kir.org/babycontent/school-years.htm
+http://www.kiranbedi.com/spotlight.htm
+http://www.kirchman.com/comply/compliance_training_CDs.html
+http://www.kirjasto.sci.fi/minnes.htm
+http://www.kirjasto.sci.fi/shakespe.htm
+http://www.kirjasto.sci.fi/wharton.htm
+http://www.kirkbrownband.com/guestbook.htm
+http://www.kirkleesmc.gov.uk/you-kmc/kmc-formsindex/formindex.shtml
+http://www.kirkoswald.cumb.org.uk/work.htm
+http://www.kirksvillecity.com/PublicWorks/pubwksinfo.html
+http://www.kirotv.com/news/2267247/detail.html
+http://www.kirschfoundation.org/done/events.html
+http://www.kirschfoundation.org/why/articles_archive.html
+http://www.kirtland.af.mil/Organizations/FamilySupport/boys_girls.htm
+http://www.kismetworldwide.com/laurieweed/asia_update_16.htm
+http://www.kiss.svitonline.com/trip.htm
+http://www.kissack.co.uk/content/view/199/
+http://www.kissack.co.uk/content/view/199/64/
+http://www.kitbraz.com/tchr/comp/method.html
+http://www.kitchencollection.com/tempbrandlistall.cfm?catname=Shop%20By%20Brand&scat=Hamilton%20Beach&sscat=Drink%20Mixer
+http://www.kitchendoctor.com/healthconditions/parasites/blood_parasites.html
+http://www.kitchenkapers.com/ind.html
+http://www.kitchenproject.com/html/germcook.html
+http://www.kitchenwindow.com/CC_ClassScheduleS.asp
+http://www.kitchenwitch.com/herbs/angelica.html
+http://www.kitco.com/ind/Hanlon/jun022005.html
+http://www.kitco.com/weekly/paulvaneeden/sept242004.html
+http://www.kiteboarding.com/index.php?page=info.htm
+http://www.kitesource.com/contact/1cfcontact.shtml
+http://www.kith.org/logos/wander/3.bos/week14.html
+http://www.kitlv.nl/hisdhelp.html
+http://www.kitsapsun.com/bsun/features/0,2403,BSUN_19080,00.html
+http://www.kitsune.addr.com/SF-Conversions/Rifts-WC-Vehicles/Confederation_FA-14E_Raptor_Starfighter.htm
+http://www.kiva.net/~kls/gone.html
+http://www.kiwi-wildlife.co.nz/
+http://www.kiwibox.com/givingback.asp
+http://www.kiwicareers.govt.nz/jobs/4c_mec/j48311x.htm
+http://www.kjmagnetics.com/
+http://www.kk.org/newrules/newrules-intro.html
+http://www.kkflyfisher.com/rods/loomis_roaringriver.html
+http://www.kkohki.com/English/kkohkiparts.html
+http://www.kl.oakland.edu/services/instruction/pathfinders/Callnos.htm
+http://www.klaatu.org/list.html
+http://www.klariti.com/business-writing/Golden-Rules-before-starting-RFP-ITT-proposal.shtml
+http://www.klariti.com/proposal-writing/index.shtml
+http://www.klattu.com.au/~jsinger/nolonger.htm
+http://www.kld.com/research/ratings.html
+http://www.klebergbank.com/73983.html
+http://www.kleesgolf.com/php/fitting.php
+http://www.kls.org.uk/blog/
+http://www.kls.org.uk/display/ShowJournal?moduleId=55067&creatorId=5451
+http://www.klse.com.my/website/listing/cbrs.htm
+http://www.kluc.com/morning_zoo.asp
+http://www.klup.com/weblogs/kmc/adate12010050.aspx
+http://www.km-uk.com/testimonials.asp
+http://www.km.dk/publikationer/thechurch.htm
+http://www.kma.org.za/race_control.htm
+http://www.kmike.com/Tech%20Rep.htm
+http://www.kml.k12.wi.us/fine_arts/band.htm
+http://www.kmmagazine.com/currentissue.asp
+http://www.kmrscripts.com/cdguide.html
+http://www.kmsfinancial.com/kms/mwwknrpt.htm
+http://www.kmworld.com/publications/specialpublication/index.cfm?action=readarticle&Article_ID=1694&Publication_ID=106
+http://www.kn.pacbell.com/wired/fil/pages/webshakespera.html
+http://www.kn.sbc.com/wired/fil/pages/webreflectiga.html
+http://www.knac.com/article.asp?ArticleID=3669
+http://www.knaresborough.co.uk/stmaryrcchurch/justpeace.html
+http://www.kneeguru.co.uk/kneegeeks/5324399901.html
+http://www.kneelsit.com/
+http://www.knewt.com/people/people.htm
+http://www.knic.com/Kn_Hist.htm
+http://www.knightfdn.org/default.asp?story=diversity/lehrman2/index.html
+http://www.knipe.org.uk/blogs/carla/
+http://www.knitty.com/ISSUEspring03/PATTbabynorgi.html
+http://www.knityourdreams.com/whats%20happening.html
+http://www.knmi.nl/onderzk/oceano/enso/fem_eng_sum.html
+http://www.knmskjold.org/logg2001/englog2001_1.htm
+http://www.knology.net/~parkersinal/adoption.htm
+http://www.knottyboy.com/learn/productinfo.php
+http://www.know-2.org/
+http://www.knowab.co.uk/wbwteam.html
+http://www.knowdotnet.com/lessmith.html
+http://www.knowhere.co.uk/3190_events.html
+http://www.knowhere.co.uk/3332_events.html
+http://www.knowhere.co.uk/3353_events.html
+http://www.knowhere.co.uk/3372_events.html
+http://www.knowhere.co.uk/340_events.html
+http://www.knowhere.co.uk/3434_events.html
+http://www.knowhere.co.uk/3582_goodbad.html
+http://www.knowhere.co.uk/4342_events.html
+http://www.knowhere.co.uk/467_events.html
+http://www.knowhere.co.uk/481.html
+http://www.knowhere.co.uk/481_eatdrink.html
+http://www.knowhere.co.uk/481_events.html
+http://www.knowhere.co.uk/481_goodbad.html
+http://www.knowhere.co.uk/481_links.html
+http://www.knowhere.co.uk/481_music.html
+http://www.knowhere.co.uk/518_musicians.html
+http://www.knowhere.co.uk/578_musicians.html
+http://www.knowhere.co.uk/593_music.html
+http://www.knowhere.co.uk/65_music.html
+http://www.knowhere.co.uk/82_events.html
+http://www.knowislam.info/drupal/ispart
+http://www.knowital.com/Towns/Lucca2/html/knowital_-_telephones___the_po.html
+http://www.knowital.com/index/findindex/tuscany/104610/
+http://www.knowledge.hut.fi/projects/mgain/project.html
+http://www.knowledge.state.va.us/main/sol/solview.cfm?curriculum_abb=MAT&category_abb=6
+http://www.knowledgebank.irri.org/theme1/
+http://www.knowledgeboard.com/cgi-bin/item.cgi?id=120536&d=pnd
+http://www.knowledgeboard.com/help/feedback_form.html
+http://www.knowledgedemocracy.org/node?from=23
+http://www.knowledgefoundation.com/fuelcell.html
+http://www.knowledgehound.com/topics/business.htm
+http://www.knowledgemessenger.com/a/viewblog.asp?app=thismatters&id=48&hdr=no
+http://www.knowledgeplex.org/news/68411.html
+http://www.knowledgeplex.org/news/96950.html
+http://www.knowledgeproblem.com/archives/001291.html
+http://www.knowledgestorm.com/
+http://www.knowledgestorm.com/search/keyword/Sony%20Video%20Conference/Sony%20Video%20Conference
+http://www.knowledgestorm.com/search/keyword/Web%20Cam%20Conference/Web%20Cam%20Conference
+http://www.knowledgestorm.com/search/tabkeyword/research/Hospital+Computer+System+Article/1/index.jsp
+http://www.knowledgeway.org/about/press/pr970403.html
+http://www.knowledgeway.org/living/create_web/homepage.html
+http://www.knowltonhouse.com/History/history.htm
+http://www.knowprose.com/node/2549
+http://www.knowprose.com/node?from=40
+http://www.knoxtrans.org/choices/smart1.htm
+http://www.koalaexpress.com.au/kangaroo%20stuffed%20toy.htm
+http://www.kobashi.to/against_adulteration/musk_rose.html
+http://www.kobashi.to/aroma-therapy/essentialoil/rose-abs_musk_org_in_joj_5ml.html
+http://www.kodak.co.uk/
+http://www.kodak.com/US/en/motion/support/glossary/glossary.jhtml?id=0.1.4.11.20&lc=en
+http://www.kodak.com/eknec/PageQuerier.jhtml?pq-path=317&pq-locale=en_US
+http://www.kodak.com/global/en/health/productsByUse/medicalRadiography/filmImaging/technical/density.jhtml
+http://www.kodak.com/global/en/professional/member/ProPass/advancedAmateur/tenneson.jhtml?id=0.2.14.36.10.16&lc=en
+http://www.kodak.com/global/en/service/publications/urg00273toc.jhtml?chapsec=urg00273c2s7&pq-path=3065
+http://www.koekie.org.uk/funnel/tdt/tdt2.html
+http://www.koeppeldirect.com/media-buying-direct-response-Dec2004.htm
+http://www.kofax.com/learning/casestudies/ascent_adrenaline_case_financial_plans.asp
+http://www.kofax.com/learning/casestudies/capio_case_healthcare_walter.asp
+http://www.koffeekorner.com/koffeekorner.html
+http://www.kohlscorporation.com/2004PressReleases/News0129Release.htm
+http://www.kolabora.com/
+http://www.kolabora.com/news/2005/01/27/advantages_of_meeting_online.htm
+http://www.kolabora.com/news/2005/05/30/virtually_networked_teams_how_to.htm
+http://www.kolbenschlagandco.com/qa/qa.aspx?s=Personal+Tax&l=2000
+http://www.koleksyon.com/showbiz/news/jan_wk4/lani_mercado.asp
+http://www.kolesarstudios.com/about_BKMP.htm
+http://www.kolinska.com/financial_information-povzetek1.php
+http://www.kolumbus.fi/puistot/collect.htm
+http://www.kolumbus.fi/soulexpr/burkedg.htm
+http://www.kolumbus.fi/soulexpr/perry.htm
+http://www.komag.com/press/press_030722.html
+http://www.komal.hu/lap/2002-ang/pozsgay.e.shtml
+http://www.komediaentertainment.com/news.php
+http://www.kommersant.com/tree.asp?rubric=3&node=36&doc_id=300257
+http://www.komo1000news.com/stories/34981.htm
+http://www.komotv.com/features/gardenguys/tip_47.asp
+http://www.komotv.com/news/mnewsaction.asp?ID=37165
+http://www.komotv.com/news/story_m.asp?ID=32496
+http://www.komotv.com/news/story_m.asp?ID=32532
+http://www.komotv.com/news/story_m.asp?ID=35126
+http://www.komotv.com/news/story_m.asp?id=23244
+http://www.komotv.com/stories/35166.htm
+http://www.komotv.com/weather/ski_report.asp
+http://www.kon.org/urc/scherbarth.html
+http://www.konavillage.com/2005_pkgs.asp
+http://www.kongoi.com/modules.php?op=modload&name=News&file=article&sid=52
+http://www.konsk.co.uk/planning/1998prog.htm
+http://www.konsk.co.uk/planning/1998targ.htm
+http://www.koool.com/life/96apr.html
+http://www.koramangala.com/korabuz/health/apr01.htm
+http://www.koramangala.com/korabuz/health/sept01a.htm
+http://www.koramangala.com/korabuz/pers1999/11.htm
+http://www.korea.net/korea/kor_loca.asp?code=H0102
+http://www.korea.net/news/news/newsView.asp?serial_no=20040905001&part=106&SearchDay=
+http://www.koreaemb.org/archive/2003/08_1/econ/econ2.asp
+http://www.koreananimals.org/
+http://www.koreanesl.com/forumdsp.asp?ser=7882
+http://www.koreanfriendsearch.com/
+http://www.korrnet.org/wpc/history.htm
+http://www.korrnet.org/wpc/westminsterplayers.htm
+http://www.korry.com/products/nightshield/
+http://www.koryubooks.com/library/lhearn1.html
+http://www.kosb-edinburgh-branch.co.uk/guestbook.php?table=guestbook&o=700
+http://www.kosherdelight.com/Current3.htm
+http://www.koskoff.com/index.cfm/hurl/SectionID=15/NewsID=113
+http://www.kosmor.com/help_appendixc.php
+http://www.kosovo.com/news/archive/2004/October_19/2.html
+http://www.kosovo.mod.uk/brief030699.htm
+http://www.kosovo.mod.uk/brief310599.htm
+http://www.kotakmutual.com/hmf.htm
+http://www.kotaku.com/
+http://www.kotaku.com/gaming/gamecube/
+http://www.kotaku.com/gaming/psp/
+http://www.kottke.org/
+http://www.kottke.org/05/04/a-whole-new-internet
+http://www.kottke.org/about/patron/support2005.html
+http://www.kozmikhoroscopes.com/haig.htm
+http://www.kpfa.org/lsb/docs.php?type=minutes&id=12&doc=21
+http://www.kpmg.co.uk/services/t/index.cfm
+http://www.kpresorts.com/tnt/tnn/tnn93.htm
+http://www.kqed.org/spark/artists-orgs/nikolaswei.jsp
+http://www.kqed.org/spark/artists-orgs/paulkos.jsp
+http://www.kqed.org/tv/indiefilms/index.jsp
+http://www.kqed.org/w/baywindow/guns/lesson2.html
+http://www.kqed.org/w/jpfastfood/program.html
+http://www.kqed.org/weblog/food/2005/02/wistful-thinking-california-chardonnay.jsp
+http://www.kquarterhorse.com/sale.htm
+http://www.kramerslaw.com/revoking_wills.htm
+http://www.krav-maga.org.uk/index.php?mod=faqs
+http://www.kravmagaonline.co.uk/index.php?mod=faqs
+http://www.krellinst.org/work/howessiam.html
+http://www.krem.com/health/stories/NW_031004HEKREMheartspecial_introEL.6c4c253c.html
+http://www.kriskrug.com/?m=200405
+http://www.kriskrug.com/?p=390
+http://www.kristagreen.com/index.cfm?fuseaction=ArticleList&SectionID=78
+http://www.kristinhannah.com/faq/faq.asp
+http://www.kristisiegel.com/inter_comp2003.htm
+http://www.kriyayoga.com/english/on_your_wings/beprepared.htm
+http://www.kriyayoga.com/english/on_your_wings/openforgod.htm
+http://www.kriyayoga.com/newsletters/newsletter200010-3.htm
+http://www.krla870.com/poll/viewall.asp?ID=3125
+http://www.krom.no/hva_er_krom/hva_er_krom.html
+http://www.krownspellman.com/cgi-bin/spellman/find/title/Ch.html
+http://www.krud.com/stupid.html
+http://www.krugerpark.co.za/Kruger_National_Park_Wildlife-travel/images-of-kruger-the-big-five_4.html
+http://www.krugerpark.org/Family_Safari_Lodges-travel/pricing_lodges-south-africa-tangala-safari-camp.html
+http://www.krugerpark.org/Safari_Essentials-travel/kruger-park-private-lodges-on-safari-in-africa_6.html
+http://www.krukowski.com/pages/firm.html
+http://www.krusch.com/real/ladanyi.html
+http://www.kryogenix.org/afe/fanficdb/story.cas?story=ambar&part=17
+http://www.kryptonsite.com/planetkstore.htm
+http://www.krysstal.com/ec1998.html
+http://www.krysstal.com/worldww.html
+http://www.ksa-uk.co.uk/ksa_survey.htm
+http://www.ksc.nasa.gov/nasadirect/archives/KSCDirect/archives/launch/sts112/day2/shuttle-qa.htm
+http://www.kscourts.org/kscases/ctapp/1998/19980403/78501.htm
+http://www.kscourts.org/kscases/supct/1999/19990122/79625.htm
+http://www.kscourts.org/kscases/supct/1999/19991105/82909.htm
+http://www.ksg.harvard.edu/news/opeds/2002/city_hill_euchner_bg_090402.htm
+http://www.ksg.harvard.edu/news/opeds/2002/euchner_schools_tough_love_bg_011802.htm
+http://www.ksg.harvard.edu/wappp/happen/yamanaka.html
+http://www.kshitij.com/govt/residentfx.shtml
+http://www.kshs.org/projects/lem/directory/lemnames03.htm
+http://www.ksinclair.com/Article550.htm
+http://www.ksinclair.com/Article722.htm
+http://www.ksl.com/
+http://www.kspress.com/web/isite.dll?1010350452886
+http://www.ksrevenue.org/taxcredits-altfuel.htm
+http://www.kstatecollegian.com/article.php?a=2240
+http://www.kstope.ang.af.mil/YB49/returning_the_stone.htm
+http://www.kstrom.net/isk/books/art/art2032.html
+http://www.ksu.edu/InfoTech/buying/faqs.html
+http://www.ksu.edu/baptistcenter/jesus.html
+http://www.ksu.edu/chem/personnel/faculty/grad/mmc/collinson.html
+http://www.ksu.edu/counseling/csweb/topics/stress/drstress.html
+http://www.ksu.edu/counseling/topics/life/sleep.html
+http://www.ksu.edu/economics/nafwayne/oup2000.htm
+http://www.ktc.com/personal/sirdavid/
+http://www.ktcdallas.org/creative/grief/essay.htm
+http://www.ku.edu/carrie/docs/texts/29mcki2.htm
+http://www.ku.edu/carrie/texts/carrie_books/gilbert/09.html
+http://www.ku.edu/pri/resrep/r227.htm
+http://www.ku.edu/~grobe/rules-of-fair-fighting.html
+http://www.ku.edu/~recycle/who_recycles.htm
+http://www.ku.edu/~scitask/minutes/jan3.shtml
+http://www.kubatana.net/html/archive/gen/041215msz.asp?sector=GEN
+http://www.kubby.com/issues/education.html
+http://www.kucinich.us/floor_speeches/work_cafta4may.php
+http://www.kudzufiles.com/archives/2005_01.html
+http://www.kuglercom.com/documents/strategic.html
+http://www.kuhistory.com/proto/story-printable.asp?id=99
+http://www.kuhistory.com/proto/story.asp?id=105
+http://www.kuhistory.com/proto/story.asp?id=24
+http://www.kuhistory.com/proto/story.asp?id=56
+http://www.kuhistory.com/proto/story.asp?id=99
+http://www.kuleuven.ac.be/lucina/Mens/Organisational%20constellations.html
+http://www.kulichki.com/moshkow/PERL/perltut.txt
+http://www.kultur.gov.tr/portal/kultur_en.asp?belgeno=5639
+http://www.kultursmog.com/Life-Page01.htm
+http://www.kulturturizm.gov.tr/portal/kultur_en.asp?belgeno=5647
+http://www.kumc.edu/anatomy/postdocs.html
+http://www.kumc.edu/hospital/huntingtons/behavior.html
+http://www.kumc.edu/joanhunt/BioSketches/psmith.html
+http://www.kungfu.net/brucelee.html
+http://www.kuninfelt.com/kuninfriends/
+http://www.kuninfelt.com/wheretobuy/
+http://www.kunstmusik.com/
+http://www.kurai.com/clarity/glass.html
+http://www.kuraoka.com/career.html
+http://www.kurd.org/Zagros/helicopter1.html
+http://www.kurdmedia.com/reports.asp?id=2013
+http://www.kuro5hin.org/main/3
+http://www.kuro5hin.org/section/culture
+http://www.kuro5hin.org/story/2002/2/6/19922/36571
+http://www.kuro5hin.org/story/2003/2/21/144256/437
+http://www.kuro5hin.org/story/2003/8/12/171427/607
+http://www.kuro5hin.org/story/2005/1/27/105710/925
+http://www.kuro5hin.org/story/2005/1/29/103757/255
+http://www.kurtz-fernhout.com/PlantStudio/userssay.htm
+http://www.kurumi.com/opinion/htm.html
+http://www.kutv.com/
+http://www.kvali.com/press/NYtimes.html
+http://www.kwanah.com/txmilmus/36division/archives/443/4434.htm
+http://www.kwantlen.ca/calendar/jrnlprg.html
+http://www.kwantlen.ca/facilities/emergencies.html
+http://www.kwanumzen.com/practice/sitting.html
+http://www.kwanumzen.com/primarypoint/v10n1-1993-winter-wbzm-leaveyourmindalone.html
+http://www.kwanumzen.com/pzc/oldnewsletter/v08n03-1980-march-shzm-makingacompleteeffort.html
+http://www.kwanumzen.com/pzc/oldnewsletter/v10n07-1982-july-shzm-doubt.html
+http://www.kweaver.org/archives/2004/06/
+http://www.kweaver.org/archives/2004/08/
+http://www.kweaver.org/archives/2004/10/
+http://www.kweaver.org/archives/2005/04/
+http://www.kweaver.org/archives/2005/05/
+http://www.kweaver.org/archives/2005/06/
+http://www.kwfdn.org/ProgramAreas/Facilities/links.html
+http://www.kwqc.com/Global/story.asp?S=2866995
+http://www.kwqc.com/global/story.asp?s=2866995&ClientType=Print
+http://www.kwru.org/kwru/rene.htm
+http://www.kwru.org/mfol/aboutppehrc.html
+http://www.kwru.org/mfol/callinterpretingstudents.htm
+http://www.kwru.org/mfol/marchforourlives.html
+http://www.kxen.com/infocenter/faqs.php
+http://www.kybaptist.org/kbc/welcome.nsf/pages/newkbb
+http://www.kyero.com/news/2005_02_01_archive.php
+http://www.kyero.com/news/2005_03_01_archive.php
+http://www.kygo.com/home/features_staff_bios.html
+http://www.kyodai.com/news/index,9.en.html
+http://www.kyrene.org/ksdnews/2003/october/
+http://www.kyz.uklinux.net/giflzw.php
+http://www.kzion.com/help_listening.php
+http://www.kznwildlife.com/honorary_policy.htm
+http://www.kzpg.com/Lib/Pages/Books/NSSM-200/09-CH1.html
+http://www.l-m-c.org.uk/texts/feedbacktm.html
+http://www.l5p.com/altpapers.html
+http://www.la-mancha.net/archives/000697.html
+http://www.la-mancha.net/archives/000785.html
+http://www.la-puce.co.uk/books.html
+http://www.la-systems.co.uk/ventilation.htm
+http://www.la-umc.org/bclong.htm
+http://www.la.unm.edu/~katem/E102fa03/toulmin_diagram.htm
+http://www.la.unm.edu/~katem/Engl101F03/standard_policies.htm
+http://www.la.utexas.edu/research/poltheory/sidgwick/me/me.b02.c04.s02.html
+http://www.la.utexas.edu/research/poltheory/sidgwick/ppe/ppe.b03.c03.s06.html
+http://www.la.utexas.edu/research/poltheory/sidgwick/ppe/ppe.b03.c04.s14.html
+http://www.la4x4.com/beginner.htm
+http://www.laavengers.com/community.php
+http://www.lab7.kuis.kyoto-u.ac.jp/admission.html
+http://www.labcaire.co.uk/ref_f200a.htm
+http://www.laboratorium.net/
+http://www.laboratorytalk.com/news/rdp/rdp137.html
+http://www.laboreducator.org/gamplan8.htm
+http://www.laborheritage.org/iall-dc.html
+http://www.laborlawtalk.com/showthread.php?t=1423
+http://www.labornet.org/news/0704/turban.htm
+http://www.labornotes.org/archives/2002/07/a.html
+http://www.laborready.com/common/privacystmt.asp
+http://www.laborresearch.org/section.php/Economy
+http://www.laborresearch.org/union_busting_watch.php
+http://www.labour.gov.bc.ca/esb/facshts/truck_drivers.htm
+http://www.labour.gov.sk.ca/safety/firefighters/transportation.htm
+http://www.labour.gov.sk.ca/safety/forklifts/
+http://www.labour.gov.sk.ca/safety/mine-rescue-manual/chapter-4/mine-fires-2.htm
+http://www.labour.ie/anneferris/issues/20040721153304.html
+http://www.labour.ie/northernireland/newtsm.html
+http://www.labour.ie/northernireland/skills.html
+http://www.labour.nic.in/ilas/secyinter.htm
+http://www.labour.org.uk/aboutlabour
+http://www.labour.org.uk/ac2003qandaarchive/?chatid=58
+http://www.labour.org.uk/ac2003qandaarchive/?chatid=97
+http://www.labour.org.uk/ac2004news?ux_news_id=ac04js
+http://www.labour.org.uk/environment04/
+http://www.labour.org.uk/index.php?id=ac2004archive&chatid=97
+http://www.labour.org.uk/index.php?id=tupartnership
+http://www.labour.org.uk/iraqbrief250303/
+http://www.labour.org.uk/tonyblair3
+http://www.labourbehindthelabel.org/publications/wearing_thin4.htm
+http://www.labourcourt.ie/labour/labcourtweb.nsf/0/80256a770034a2ab802562750041ad18?OpenDocument
+http://www.labourcourt.ie/labour/labcourtweb.nsf/0/80256a770034a2ab802562750041b09e?OpenDocument
+http://www.labourfriendsofiraq.org.uk/archives/000289.html
+http://www.labourfriendsofiraq.org.uk/archives/2004_12.html
+http://www.labourfriendsofiraq.org.uk/archives/2005_02.html
+http://www.labourfriendsofiraq.org.uk/archives/2005_03.html
+http://www.labourfriendsofiraq.org.uk/archives/2005_04.html
+http://www.labourfriendsofiraq.org.uk/archives/2005_05.html
+http://www.labourmobility.com/individuals/toolstests/
+http://www.labourmobility.com/organisations/toolstests/
+http://www.labournet.net/ukunion/0504/wmd1.html
+http://www.labournet.net/ukunion/0506/fbu1.html
+http://www.labournet.net/world/0401/korea4.html
+http://www.labouroflove.org/caring-for-self/creating-support/
+http://www.labourstart.org/
+http://www.labsafety.com/refinfo/fedreg/frnov02.htm
+http://www.labsafety.com/refinfo/techlines/tchln0804.htm
+http://www.labsafety.com/refinfo/techlines/tchln1203.htm
+http://www.labsafety.com/refinfo/techlines/tchln1299.htm
+http://www.labtestsonline.org/news/psa040806.html
+http://www.labtestsonline.org/understanding/conditions/hep.html
+http://www.labtestsonline.org/understanding/features/screening-3.html
+http://www.laburnumcottage.ca/house.html
+http://www.labx.com/v2/newad.cfm?catID=51
+http://www.lacarte.org/fairness/sexuality/boyscouts/diversions.html
+http://www.lacity.org/hra/hrawa1.htm
+http://www.lackofstyle.com/mt/
+http://www.lacma.org/art/perm_col/ancient/ancient.htm
+http://www.lacma.org/art/perm_col/se_asian/asian.htm
+http://www.lacnet.org/the_academic/chat/QA_Mangala.shtml
+http://www.ladah.org/excerptsch1.htm
+http://www.ladas.com/BULLETINS/2002/0202Bulletin/CanadaInterpretPatentClaim.html
+http://www.laddonline.com/
+http://www.ladental.org/benefits.htm
+http://www.ladsoflagos.com/Maris.htm
+http://www.ladybear.com/services/policy.html
+http://www.ladyfootlocker.com/content/custserv.cfm?Q=5&help=sizing_help
+http://www.ladylibrty.com/our_view_archives/2005/skin-deep.html
+http://www.ladylucan.co.uk/index1.htm
+http://www.ladymisstree.com/callipygian/
+http://www.ladysmithchronicle.com/portals-code/obits.cgi?paper=18&submit=&name=&skip=10
+http://www.laetusinpraesens.org/docs/bmethod.php
+http://www.laetusinpraesens.org/docs/infwill/inf3.php
+http://www.laetusinpraesens.org/docs70s/71intorg.php
+http://www.lafarge.com/lafarge_en/htm/lafarge_acquires_assets_concrete.html
+http://www.lafarge.com/lafarge_en/htm/sharp_increase_interim_results.html
+http://www.lafayette-online.com/cgi-bin/coranto/viewnews.cgi?id=EEEuyEElkVfLXEMoGi
+http://www.lafayette.edu/news.php/view/2327/
+http://www.lafayetteanimalaid.org/meddogs.htm
+http://www.lafayettecounty.org/bizdev/commercialsites.html
+http://www.lafayettejc.com/News_Promo.shtml
+http://www.lafn.org/~dave/trans/energy/does_mt_saveE.html
+http://www.laforlag.nu/cgi-bin/laforlag/index.pl/metabolic-research-center-weight-loss.html
+http://www.laforlag.nu/cgi-bin/laforlag/index.pl/obesity-attractive.html
+http://www.lahinchgolf.com/
+http://www.lakecityreporter.com/guestbook
+http://www.lakedistrictwalks.com/glaram.html
+http://www.lakedistrictwalks.com/losman.html
+http://www.lakedistrictwalks.com/sedcal.html
+http://www.lakegreeley.com/jobsf/sapp1.htm
+http://www.lakeheadualumni.ca/category/6
+http://www.lakeland.ie/farm-notes-dec-2004.htm
+http://www.lakelandptv.org/Pages/June/09Jun04.htm
+http://www.lakesurf.com/MA.htm
+http://www.laketahoechamber.com/area/state.html
+http://www.laksamana.net/vnews.cfm?ncat=41&news_id=7384
+http://www.lakungfu.com/kungfusifujackmanwong.html
+http://www.lalabor.com/main/id/97.html
+http://www.lalecheleague.org/FAQ/bfpregnant.html
+http://www.lalecheleague.org/llleaderweb/LV/LVAprMay98p21.html
+http://www.laleva.cc/choice/nutrition_nytimes.html
+http://www.lamasbeauty.com/fashion/image_making/attitude_check_part1.htm
+http://www.lamb-of-god.com/ashes2/info/privacy_policy.php
+http://www.lambdalit.org/LBReport/MarApr04/De%20Veaux.html
+http://www.laminatewoodfloor.com/
+http://www.lammd.com/book/chapter2.cfm
+http://www.lammd.com/book/chapter4.cfm
+http://www.lamp.ac.uk/recruitment/press_releases/ebroadcast.htm
+http://www.lamp.ac.uk/su/revision.htm
+http://www.lamp.ac.uk/su/welfare/physical.htm
+http://www.lancastergreens.nshc.co.uk/GreenCllrs.htm
+http://www.lancastergreens.nshc.co.uk/citycouncilelections.htm
+http://www.lancasterukonline.net/
+http://www.lanceandeskimo.com/guest/wal-mart.shtml
+http://www.lancearthur.com/archives/001316.html
+http://www.lanceradvanced.com/XForm/Stories/Biker.html
+http://www.lancetteer.com/feature11_coc_opera_house.htm
+http://www.lancs.ac.uk/depts/conted/nwsummerschools.htm
+http://www.lancs.ac.uk/depts/personnel/sabschem.htm
+http://www.lancs.ac.uk/fss/wstudies/iff.htm
+http://www.lancs.ac.uk/iss/rules/security.htm
+http://www.lancs.ac.uk/palatine/reports/key-staf.htm
+http://www.lancs.ac.uk/palatine/reports/pop.htm
+http://www.lancs.ac.uk/users/counsel/docs/exams.html
+http://www.landacleary.com/go_as_you_please_Ireland.htm
+http://www.landandwater.com/features/vol41no1/vol41no1_2.html
+http://www.landcareresearch.co.nz/research/biodiversity/forest/waitutu/index.asp
+http://www.landcareresearch.co.nz/research/rurallanduse/soilservicesprog.asp
+http://www.landecon.cam.ac.uk/under_grad_study.htm
+http://www.landecon.cam.ac.uk/under_prospectus.htm
+http://www.lander.edu/rsfox/310TechniquesLab.html
+http://www.landfood.unimelb.edu.au/courses/tafe/parttime.html
+http://www.landings.com/_landings/Forums/md/md-internal.html
+http://www.landinstitute.org/vnews/display.v/ART/1995/01/18/41ec44ddf1681
+http://www.landinstitute.org/vnews/display.v/ART/2002/09/04/3d751c7faaac1
+http://www.landlinemag.com/todays_news/Daily/2002/March02/030602.htm
+http://www.landlinemag.com/todays_news/Daily/2005/Jun05/060705.htm
+http://www.landliving.com/archives/0000042005.aspx
+http://www.landliving.com/articles/0000000581.aspx
+http://www.landlordandtenant.org/faqs/be.html
+http://www.landlordzone.co.uk/dir/education-courses.htm
+http://www.landmark-project.com/blogmeister/index.php?panel=w&display=warlick
+http://www.landmarkcases.org/mapp/society.html
+http://www.landmarkcases.org/plessy/excerpts_min.html
+http://www.landmarkcases.org/tinker/reaction.html
+http://www.landmarklegal.org/complaints.cfm?webpage_id=456
+http://www.landofodds.com/store/alldolledup.htm
+http://www.landofodds.com/store/press080103.htm
+http://www.landor.com/index.cfm?fuseaction=cBranding.getArticle&storyid=134
+http://www.landoverbaptist.net/forums/index.php?showtopic=3751&mode=linear&view=findpost&p=63068
+http://www.landoverbaptist.net/forums/index.php?showtopic=3751&view=getlastpost
+http://www.landoverbaptist.net/forums/index.php?showtopic=3751&view=getnewpost
+http://www.landoverbaptist.org/brotherharry/august2001.html
+http://www.landrights.org/OCS/CARA.cushman_testimony.99_6.htm
+http://www.landrum-brown.com/MasterPlans/PVD/Study%20Resource.htm
+http://www.landstewardshipproject.org/pr/newsr_112700.html
+http://www.landwatch.net/fallnl/fall_2002_newsltr.htm
+http://www.lane.ca/200303-index.php
+http://www.lang.ltsn.ac.uk/700reasons/reasons.aspx?keywordid=490
+http://www.lang.ltsn.ac.uk/700reasons/reasons.aspx?keywordid=703
+http://www.lang.ltsn.ac.uk/700reasons/reasons.aspx?keywordid=743
+http://www.lang.ltsn.ac.uk/700reasons/reasons.aspx?keywordid=771
+http://www.lang.ltsn.ac.uk/700reasons/reasons.aspx?keywordid=918
+http://www.lang.ltsn.ac.uk/events/llaseventarchiveitem.aspx?resourceid=460
+http://www.lang.ltsn.ac.uk/resources/conferenceitem.aspx?resourceid=1391
+http://www.lang.nagoya-u.ac.jp/~matsuoka/EG-Knutsford.html
+http://www.langa.com/newsletters/2001/2001-10-01.htm
+http://www.langa.com/newsletters/pre1999/5-apr-98.htm
+http://www.langcent.manchester.ac.uk/learningresources/humanitieslimegrove/library/
+http://www.langemark.com/taxonomy/term/27
+http://www.langer.camelot.de/Articles/C++Report/NewIOStreams/NewIOStreams.html
+http://www.langer.camelot.de/Articles/C++Report/StandardFacets/StandardFacets.html
+http://www.langer.camelot.de/Articles/Cuj/Internationalization/I18N.html
+http://www.langer.camelot.de/Resources/Books/J2SE.htm
+http://www.langleys.com/main.asp?page=29
+http://www.langmaker.com/db/bbl_rinti_form.htm
+http://www.langmaker.com/ml0104.htm
+http://www.langmaker.com/outpost/eswldeng.htm
+http://www.langmichener.com/index.cfm?fuseaction=content.contentDetail&ID=8493&tID=244
+http://www.langshotels.co.uk/glasgow/aroundglasgow.asp
+http://www.languageandlaw.org/PLAINENGLISH.HTM
+http://www.languagecrossing.com/support/faq/spanish_lessons.html
+http://www.languagehat.com/archives/000872.php
+http://www.languagehat.com/archives/001711.php
+http://www.languageinindia.com/oct2001/foreign3.html
+http://www.languages.ait.ac.th/EL21DISC.HTM
+http://www.languages.salford.ac.uk/postgraduate/traniint/modules.php
+http://www.lankalibrary.com/myths/saradiel3.htm
+http://www.lankalibrary.com/news.html
+http://www.lankalibrary.com/news/yala.htm
+http://www.lanl.gov/DLDSTP/fast/
+http://www.lanl.gov/education/jumpstart/programs.shtml
+http://www.lanl.gov/news/index.php?fuseaction=home.story&story_id=1196
+http://www.lanl.gov/orgs/pa/News/020899.html
+http://www.lanl.gov/worklife/terminations/notices.shtml
+http://www.lanl.gov/worldview/news/releases/archive/01-083.shtml
+http://www.lannetlinux.com/mgr_guide/Manager's-Guide-to-Linux.html
+http://www.lansademo.com/Helptext.htm
+http://www.lansingsc.org/pages/stpetersburg.cfm
+http://www.lao.ca.gov/ballot/2004/1A_11_2004.htm
+http://www.laohumrights.org/99octoga.html
+http://www.laox.co.jp/laox/eng_gc.html
+http://www.lapbandsolutions.com/faq.html
+http://www.lapdonline.org/general_information/did_you_know/did_you_know_main.htm
+http://www.lapetite.com/summercamps.html
+http://www.lapidaryjournal.com/feature/aug00str.cfm
+http://www.lapidaryjournal.com/rockshops/
+http://www.laportehealth.org/healthcare/cancer/cancersvcs.html
+http://www.lappan.de/foreign-rights.php
+http://www.larchmontgazette.com/2004/articles/20041216volboard.html
+http://www.largelypositive.com/Pages/Links.html
+http://www.largelypositive.com/Pages/SelfEsteem4.html
+http://www.largelypositive.com/Pages/news05_2004.html
+http://www.largeprimenumbers.com/archive.php?display=200501
+http://www.larkspring.com/Kid/Book2/2-9.html
+http://www.larouchepub.com/hzl/2002/2950lautenbach.html
+http://www.larouchepub.com/lar/2003/3019_church_and_state.html
+http://www.larouchepub.com/pr_lar/2003/031004hitl_schwarzen.html
+http://www.larouchepub.com/pubinfo.html
+http://www.larp.com/jahavra/trouble.html
+http://www.larryelder.com/
+http://www.larrykrantz.com/wyept1.htm
+http://www.larsoa.org.uk/news_dec03/rsnews_22dec.html
+http://www.las-cruces.org/fire/strength_training.html
+http://www.las-inc.com/press_releases/2003/Feb03/pr_021403.shtml
+http://www.lasa.org.uk/cgi-bin/publisher/display.cgi?124-0104-60002+computanews
+http://www.lasa.org.uk/knowledgebase/pages/cscrprojreflections.shtml
+http://www.lasallebank.com/articles/runaway.html
+http://www.laser66.com/html/advice.html
+http://www.laseraid.com/
+http://www.laserrania.com/odysseys/sep_01.html
+http://www.lasertraining.org/
+http://www.lasfs.org/lasfs/about/pubs/menace/Men1996/men-9605.htm
+http://www.lasr.net/remote/whylasr.php
+http://www.lassp.cornell.edu/sethna/Cracks/Zero_Radius_of_Convergence.html
+http://www.last.fm/faq.php
+http://www.last.fm/forum/897/_/34862/3
+http://www.last.fm/forum/899/_/18573
+http://www.lastfirst.net/catalog.php?cPath=923
+http://www.lastminute.com/lmn/pages/tandc_popup.jhtml?POSITION=replaceme
+http://www.lastminutegolfer.com/Course/Course.asp?CourseID=168
+http://www.lastminutetravel.com/PageUserAgreement.aspx
+http://www.lastoftheindependents.com/chivington.html
+http://www.lasuerte.org/cafta2.htm
+http://www.lasuerte.org/facultyNekaris.htm
+http://www.lasuperiorcourt.org/courtrules/Chapter3.htm
+http://www.lasvegassun.com/sunbin/stories/archives/2000/may/23/510291667.html?title%3Agermans+title%3Aeye+title%3Adeal
+http://www.lasvegassun.com/sunbin/stories/racing/1999/jul/23/509086743.html
+http://www.lasvegassun.com/sunbin/stories/w-asia/2005/feb/06/020607184.html
+http://www.lasvegassun.com/sunbin/stories/w-me/2005/feb/02/020208977.html
+http://www.lasvegastripreport.com/display_tr.php3?tr_id=2038
+http://www.lasvegasweekly.com/2002/09_11/news_coverstory_index.html
+http://www.lasvegasweekly.com/2005/05/19/feature1.html
+http://www.lasvegasweekly.com/features/the_volunteer.html
+http://www.laterlife.com/laterlife-looking-good-in-laterlife37.htm
+http://www.laterooms.com/en/C90142.html
+http://www.latestbuy.com.au/oggz_morph_lights.html
+http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/2414&
+http://www.latimes.com/business/investing/sfl-ybask20jun20,1,1797338.column?coll=la-utilities-business-money
+http://www.latimes.com/business/specials/la-fi-newdeal30dec30,1,7708201.story
+http://www.latimes.com/classified/realestate/results.classified?class=3660
+http://www.latimes.com/extras/careereducation/consultant.html
+http://www.latimes.com/extras/homedesign/feature_story.html
+http://www.latimes.com/features/health/medicine/la-me-infants6jun06,1,5667481.story?coll=la-health-medicine
+http://www.latimes.com/features/health/medicine/la-na-fda17jun17,1,2165269.story?coll=la-health-medicine
+http://www.latimes.com/features/health/women/la-me-infants6jun06,1,3172563.story?coll=la-health-womens
+http://www.latimes.com/features/lifestyle/cl-et-rutten14may14,0,3651918.column?coll=la-home-utilities
+http://www.latimes.com/features/lifestyle/cl-et-rutten7may07,0,4004916.column?coll=la-home-utilities
+http://www.latimes.com/features/printedition/books/la-et-book20jun20,1,6103221.story?coll=la-headlines-bookreview
+http://www.latimes.com/news/columnists/cl-et-rutten14may14,1,6093957.column?coll=la-news-columns
+http://www.latimes.com/news/custom/showcase/cl-et-rutten14may14,0,3582970.column
+http://www.latimes.com/news/local/la-me-lopez8jun08,1,151769.column
+http://www.latimes.com/news/local/la-me-lopez8jun08,1,151769.column?coll=la-headlines-california
+http://www.latimes.com/news/local/la-me-profile14jun14,1,1306183.story?coll=la-util-news-local
+http://www.latimes.com/news/local/la-me-waterford7feb07,0,7883953.story
+http://www.latimes.com/news/nationworld/nation/la-na-bush20may20,0,4316498.story
+http://www.latimes.com/news/nationworld/world/la-021705intel_lat,0,864926.story
+http://www.latimes.com/news/opinion/commentary/la-oe-scheer21dec21,0,2909225.column
+http://www.latimes.com/news/politics/la-2004_elections-sg.story
+http://www.latimes.com/news/politics/la-et-dems16feb16,0,1388898.story?coll=la-home-politics
+http://www.latimes.com/news/politics/la-me-mayor26jan26,0,3793103.story?coll=la-home-politics
+http://www.latimes.com/news/printedition/california/la-me-profile14jun14,1,5125978.story?coll=la-headlines-pe-california
+http://www.latimes.com/news/printedition/opinion/la-op-cuba19jun19,1,6049167.story?coll=la-news-comment
+http://www.latimes.com/sports/tennis/la-sp-wimbledon23jun23,1,4608490.story?coll=la-headlines-sports
+http://www.latimes.com/travel/columnists/la-tr-qa6feb06,1,6576746.column
+http://www.latimes.com/travel/printedition/la-tr-spano12dec12,1,2943662.column?coll=la-headlines-travel
+http://www.latinainstitute.org/takeaction.html
+http://www.latinbayarea.com/entertainment/music/musictypes.htm
+http://www.latinschool.org/liveandlearn/computers.html
+http://www.latroba.co.uk/uk/ukestate.php
+http://www.latrobe.edu.au/indiangallery/default.htm
+http://www.latrobe.edu.au/lasu/eslresour/reading.html
+http://www.latrobe.edu.au/physics/ugrad/
+http://www.latrobe.edu.au/screeningthepast/style.html
+http://www.latrobe.edu.au/webaccess/teach-learn.html
+http://www.latter-blum.com/content/company/prohead.asp
+http://www.latter-blum.com/rl/appraisal/
+http://www.latter-blum.com/rl/appraisal/default.asp
+http://www.latter-blum.com/subdivisionlist/NOLAMLS/ROBERT/Subdivisions.htm
+http://www.latterdaylampoon.com/advice/cheryl/
+http://www.laughatliberals.com/blog/archives/2005/somebody-get-teddy-a-drink/
+http://www.laughingoutlaw.com.au/store/categories.asp?cID=1&p=17
+http://www.laughlin.af.mil/Legal/transition_compensation_for_abus.htm
+http://www.laumc.org/worship/sermons_091904.htm
+http://www.lauraingraham.com/
+http://www.laurelhurstcc.com/Letter/news10&1101.html
+http://www.laurelmarina.com/NewFiles/dive.html
+http://www.laurelvfd.org/
+http://www.lausanne.org/Brix?pageID=14284
+http://www.lavalane.org/blava/2005/01/inauguration-spending.html
+http://www.lavasoftusa.com/software/adaware/
+http://www.lavasoftusa.com/software/adawareprofessional/
+http://www.law-lib.utoronto.ca/resguide/medical.htm
+http://www.law.auckland.ac.nz/handbook/complaintsrelati.html
+http://www.law.berkeley.edu/centers/bclbe/visitors/ForeignForms.html
+http://www.law.berkeley.edu/php-programs/printpage.php?uri=/prospectives/academics/courses/criminal.html
+http://www.law.berkeley.edu/prospectives/academics/courses/criminal.html
+http://www.law.cam.ac.uk/docs/view.php?doc=205
+http://www.law.columbia.edu/prosp_students/jd_prog/applic_inf/ways_app
+http://www.law.com/
+http://www.law.com/jsp/article.jsp?id=1032128729744
+http://www.law.cornell.edu/copyright/cases/499_US_340.htm
+http://www.law.cornell.edu/ethics/dc/narr/DC_NARR_1_09.HTM
+http://www.law.cornell.edu/nyctap/I04_0073.htm
+http://www.law.cornell.edu/nyctap/I99_0056.htm
+http://www.law.cornell.edu/rules/fre/rules.htm
+http://www.law.cornell.edu/socsec/martin/2socsech.htm
+http://www.law.duke.edu/boylesite/Subject.htm
+http://www.law.duke.edu/cspd/probonopublico.html
+http://www.law.duke.edu/internat/europe/photo.html
+http://www.law.duke.edu/journals/dltr/articles/2001dltr0033.html
+http://www.law.duke.edu/journals/dltr/articles/2002dltr0004.html
+http://www.law.duke.edu/journals/dltr/articles/2002dltr0023.html
+http://www.law.duke.edu/journals/dltr/articles/2005dltr0017.html
+http://www.law.duke.edu/journals/lcp/articles/lcp61dAutumn1998p233.htm
+http://www.law.duke.edu/pd/papers.html
+http://www.law.duke.edu/student/act/mootCourt/pages/jessup.html
+http://www.law.fsu.edu/journals/landuse/Vol132/Butl.htm
+http://www.law.georgetown.edu/career/fallcolumn5.html
+http://www.law.georgetown.edu/finaid/loanconsolidation/
+http://www.law.gmu.edu/econ/history.html
+http://www.law.gwu.edu/apply/llmadmitus.asp
+http://www.law.harvard.edu/academics/graduate/admissions/sjd.php
+http://www.law.harvard.edu/academics/registrar/exams_01-02/html/ancheta2.html
+http://www.law.harvard.edu/library/services/ill/hls_ill.php
+http://www.law.harvard.edu/news/2005/04/12_service.php
+http://www.law.harvard.edu/programs/hrp/internships.htm
+http://www.law.harvard.edu/publications/evidenceiii/cases/robbins.htm
+http://www.law.harvard.edu/students/finaid/general/resources/scincome.php
+http://www.law.harvard.edu/students/orgs/jol/vol41_1/jacksonreply.php
+http://www.law.harvard.edu/students/orgs/wlj/vol27/thomas-graham.php
+http://www.law.indiana.edu/envdec/c.html
+http://www.law.kuleuven.ac.be/casebook/
+http://www.law.mcgill.ca/institutes/csri/paper-europeancommission.php3
+http://www.law.memphis.edu/career/JobPosts/nontraditional.htm
+http://www.law.msu.edu/amicus/wi_2002-03/howard.html
+http://www.law.ou.edu/hist/adams1.html
+http://www.law.ou.edu/hist/albplan.html
+http://www.law.qut.edu.au/hschool/faq.jsp
+http://www.law.stanford.edu/publications/lawyer/issues/71/klausner.html
+http://www.law.state.ak.us/doclibrary/conconv/25.html
+http://www.law.state.ak.us/doclibrary/conconv/37.html
+http://www.law.stetson.edu/bo/employ.asp
+http://www.law.stetson.edu/courses/torts/default.htm
+http://www.law.uc.edu/CCL/34ActRls/rule15c3-1b.html
+http://www.law.uc.edu/CCL/34ActRls/rule3b-17.html
+http://www.law.uchicago.edu/news/madscientists.html
+http://www.law.umkc.edu/faculty/projects/FTrials/scottsboro/SB_33Brid.html
+http://www.law.umkc.edu/faculty/projects/ftrials/Bounty/bountycompany.html
+http://www.law.umkc.edu/faculty/projects/ftrials/Hauptmann/Ransom.htm
+http://www.law.umkc.edu/faculty/projects/ftrials/LizzieBorden/biographiesborden.html
+http://www.law.umkc.edu/faculty/projects/ftrials/anthony/sbaaccount.html
+http://www.law.umkc.edu/faculty/projects/ftrials/anthony/voteletters.html
+http://www.law.umkc.edu/faculty/projects/ftrials/bruce/brucemonologues.html
+http://www.law.umkc.edu/faculty/projects/ftrials/conlaw/conhist.html
+http://www.law.umkc.edu/faculty/projects/ftrials/conlaw/pruneyard.html
+http://www.law.umkc.edu/faculty/projects/ftrials/conlaw/richmond.html
+http://www.law.umkc.edu/faculty/projects/ftrials/conlaw/stanley2.html
+http://www.law.umkc.edu/faculty/projects/ftrials/firstamendment/tinker.html
+http://www.law.umkc.edu/faculty/projects/ftrials/scopes/bryanw.htm
+http://www.law.umkc.edu/faculty/projects/ftrials/trialsgoals.html
+http://www.law.umkc.edu/faculty/projects/ftrials/wilde/sexlies.html
+http://www.law.usyd.edu.au/~library/lawx/sept98/contracts.htm
+http://www.law.villanova.edu/currentstudents/academicsupport/studygroups.asp
+http://www.law.virginia.edu/home2002/html/academics/extern.htm
+http://www.law2.byu.edu/Law_Library/Digital_Collections/Robert_Thomas/100.html
+http://www.law2.byu.edu/alisymp/newAlisymhome.htm
+http://www.lawac.org/speech/welteke%202002.htm
+http://www.lawandeverythingelse.com/id54.htm
+http://www.lawandliberty.org/malcolm.htm
+http://www.lawbookexchange.com/july04/law-books-july04-12.html
+http://www.lawcareers.net/Solicitors/TrainingContract.aspx
+http://www.laweekly.com/ink/03/26/features-kaplan.php
+http://www.laweekly.com/ink/03/26/film-powers.php
+http://www.laweekly.com/ink/04/09/features-quinones.php
+http://www.lawfirminc.com/texts/1204/incamera1204.html
+http://www.lawfoundationbc.org/new-summ.html
+http://www.lawgazette.com.sg/2000-6/focus2.htm
+http://www.lawguru.com/articles/showarticle.php?id=26
+http://www.lawguru.com/forums/lofiversion/index.php/t47.html
+http://www.lawhelp.org/documents/81281divorce.htm
+http://www.lawhern.org/
+http://www.lawjaw.com/profiles.html
+http://www.lawlawlaw.com/patents-vs-trade-secrets.html
+http://www.lawlib.state.ma.us/updates.html
+http://www.lawlink.nsw.gov.au/cpd.nsf/pages/vaw-aar-5
+http://www.lawlink.nsw.gov.au/ir.nsf/pages/practicedirection2
+http://www.lawlink.nsw.gov.au/lec/lec.nsf/feedbackform
+http://www.lawlink.nsw.gov.au/lec/lec.nsf/feedbackformservice
+http://www.lawlink.nsw.gov.au/sc%5Csc.nsf/pages/spigelman_020703
+http://www.lawlink.nsw.gov.au/sc%5Csc.nsf/pages/wood_30072004
+http://www.lawlink.nsw.gov.au/sc/sc.nsf/pages/spigelman_291004
+http://www.lawmall.com/lawbook/tell_friend.php
+http://www.lawmemo.com/default.htm
+http://www.lawmoose.com/index.cfm?Action=Library.&Topic=MN165074
+http://www.lawmoose.com/index.cfm?Action=Library.&Topic=WI165074
+http://www.lawontheweb.co.uk/webster.htm
+http://www.laworderreferendum.org.nz/Crimestories.htm
+http://www.lawpublish.com/ftcintan.html
+http://www.lawrence.com/blogs/godjilla/2005/jun/20/artichokes/
+http://www.lawrence.com/news/2005/mar/09/brothersinarmsxbox/
+http://www.lawrence.com/places/mad_greek_restaurant/
+http://www.lawrence.edu/fast/boardmaw/mcntn_rules.html
+http://www.lawrence.edu/fast/kimm/reviews.html
+http://www.lawrenceplanning.org/index-faqs.shtml
+http://www.lawrencetown.com/farming.htm
+http://www.lawreports.co.uk/chanjulc0.2.htm
+http://www.lawsociety.com.au/page.asp?PartID=3584
+http://www.lawsociety.com.au/page.asp?PartID=4287
+http://www.lawsociety.com.au/page.asp?PartID=5279
+http://www.lawsociety.com.au/page.asp?PartID=7841
+http://www.lawsociety.com.au/page.asp?partID=6816
+http://www.lawsociety.com.au/page.asp?partID=7188
+http://www.lawsociety.com.au/page.asp?partID=7315
+http://www.lawsociety.com.au/page.asp?partID=7568
+http://www.lawsociety.com.au/page.asp?partID=7841
+http://www.lawsociety.com.au/page.asp?partID=8027
+http://www.lawsociety.com.au/page.asp?partID=8192
+http://www.lawsociety.com.au/page.asp?partid=1552
+http://www.lawsociety.com.au/page.asp?partid=16303
+http://www.lawsociety.com.au/page.asp?partid=1717
+http://www.lawsociety.com.au/page.asp?partid=2126
+http://www.lawsociety.com.au/page.asp?partid=3460
+http://www.lawsociety.com.au/page.asp?partid=3584
+http://www.lawsociety.com.au/page.asp?partid=4287
+http://www.lawsociety.com.au/page.asp?partid=5276
+http://www.lawsociety.com.au/page.asp?partid=5431
+http://www.lawsociety.com.au/page.asp?partid=5557
+http://www.lawsociety.com.au/page.asp?partid=5825
+http://www.lawsociety.com.au/page.asp?partid=826
+http://www.lawsociety.mb.ca/case_digest_99_10.htm
+http://www.lawsociety.sk.ca/
+http://www.lawteacher.net/ELS/Law%20Making/Judicial%20Precedent%202.htm
+http://www.lawteacher.net/Family/Family10.htm
+http://www.lawtechjournal.com/archives/blt/i6-rjy.html
+http://www.lawyerethics.org/mt/archives/001019.html
+http://www.lawyers.com/lawyers/A~1001146~LDS/DIVORCE+VISITATION+SCHEDULE.html
+http://www.lawyers.com/lawyers/A~1001367~LDS/LIVING+TOGETHER.html
+http://www.lawyers.com/lawyers/A~1001840~LDS/FAQ+HOUSING+DISCRIMINATION.html
+http://www.lawyerscomm.org/ep04/ep0920/edobserver0917.html
+http://www.lawyerscomm.org/features/arnwinestatement/statement2.html
+http://www.laxpower.com/faqs/faq.htm
+http://www.layhands.com/VisualBaseball/
+http://www.laymyhat.com/newsletters/newsletter2.htm
+http://www.laymyhat.com/newsletters/newsletter5.htm
+http://www.laynechristensen.com/oilgas_services.html
+http://www.layover.com/driverscorner/safety/0804.html
+http://www.lazarus.freepascal.org/
+http://www.lazaruscorporation.co.uk/v4/zenon/
+http://www.lazybeescripts.co.uk/Sketches/Index.htm
+http://www.lbjlib.utexas.edu/johnson/archives.hom/speeches.hom/680117.asp
+http://www.lbl.gov/Publications/Currents/Archive/Apr-18-2003.html
+http://www.lbl.gov/Publications/Currents/Archive/Oct-03-2003.html
+http://www.lbl.gov/abc/Basic.html
+http://www.lbl.gov/abc/Glossary.html
+http://www.lbo.state.oh.us/123ga/fiscalnotes/123ga/SB0144SP.HTM
+http://www.lbo.state.oh.us/fiscal/fiscalnotes/125ga/SB0080SP.HTM
+http://www.lboro.ac.uk/admin/elsu/presess.htm
+http://www.lboro.ac.uk/gawc/rb/rb61.html
+http://www.lbp.police.uk/press_release/articles/2004%5CFebruary%5C24%5C1.htm
+http://www.lbscr.demon.co.uk/livery/
+http://www.lbunion.com/currentissue/grunionreader.php?focusissuedate=2004-11-08&grunion_id=248
+http://www.lbwf.gov.uk/index/social/social-inclusion/access-info-pack/access-section1.htm
+http://www.lc-tech.co.uk/
+http://www.lc-tech.co.uk/hardware.htm
+http://www.lc.unsw.edu.au/onlib/exam.html
+http://www.lcaaa.org/services.htm
+http://www.lcanimal.org/invest/baird_news003.htm
+http://www.lcb.state.pa.us/RETAIL/STOct01.asp
+http://www.lcc.gatech.edu/gallery/rhetoric/terms/ethos.html
+http://www.lcc.gatech.edu/~bcliff/cliff_WritingSpring05.html
+http://www.lcc.gatech.edu/~herrington/classes/3401f2000/vissers.html
+http://www.lcdf.org/~eddietwo/xmahjongg/man.html
+http://www.lcfc.premiumtv.co.uk/page/News/NewsDetail/0,,10274~676917,00.html
+http://www.lchwelcome.org/cap-news2.html
+http://www.lclark.edu/dept/admiss/7overnighthosts.html
+http://www.lclark.edu/org/artslive/citylecspr03.html
+http://www.lclark.edu/~krauss/ORTESOL2000web/home.html
+http://www.lclark.edu/~soan370/glossary/rawshit2.html
+http://www.lcmedia.com/mind170.htm
+http://www.lcms.org/ca/www/cyclopedia/02/display.asp?t1=W&t2=o
+http://www.lcms.org/pages/internal.asp?NavID=3728
+http://www.lcnp.org/wcourt/wasedalecture.htm
+http://www.lcnpub.com/water.htm
+http://www.lcolby.com/b-chap6.htm
+http://www.lcsc.edu/ss150/u5s2p4.htm
+http://www.lcsc.edu/welcome/history.htm
+http://www.ld-add.com/Info.htm
+http://www.ld.org/livingwithld/doihaveld_knowing.cfm
+http://www.lda.gov.uk/server.php?show=ConWebDoc.805
+http://www.lda.gov.uk/server.php?show=ConWebDoc.805&setPaginate=No
+http://www.ldaamerica.org/aboutld/teachers/understanding/types.asp
+http://www.ldac-taac.ca/InDepth/identify_begin-e.asp
+http://www.ldaca.org/gram/lewkowic.htm
+http://www.ldc.upenn.edu/Projects/LVDID/
+http://www.ldcm.org/rentals.html
+http://www.ldolphin.org/backslide.html
+http://www.ldolphin.org/corpsin.html
+http://www.ldonline.org/article.php?id=362&loc=87
+http://www.ldonline.org/article.php?max=20&id=0&loc=103
+http://www.ldonline.org/article.php?max=20&id=0&loc=47
+http://www.ldonline.org/article.php?max=20&id=607&loc=49
+http://www.ldonline.org/article.php?max=20&id=607&loc=51
+http://www.ldonline.org/article.php?max=20&skip=&special_grouping=&id=0&loc=40&start=21&end=40&sortby=title&show_abstract=1
+http://www.ldonline.org/first_person/christmas_lesson.html
+http://www.ldonline.org/first_person/first_person_archives.html
+http://www.ldpride.net/learningstyles.MI.htm
+http://www.ldrc.ca/help/howto/html.php
+http://www.ldresources.com/articles/growing_words.html
+http://www.ldresources.com/articles/learning_despite_ld.html
+http://www.ldresources.org/?p=569
+http://www.lds-mormon.com/evolutionandmormonism.shtml
+http://www.lds-mormon.com/tmpc.shtml
+http://www.ldsfilm.com/bio/bioH2.html
+http://www.ldsfilm.com/bio/bioV.html
+http://www.ldsfilm.com/bio/bioW.html
+http://www.ldsfilm.com/bio/bioW2.html
+http://www.ldsfilm.com/directors/Dutcher2.html
+http://www.ldsfilm.com/faq.html
+http://www.ldsleather.com/patches.html
+http://www.ldsr.org/info/tip.phtml?tip=2
+http://www.ldu.leeds.ac.uk/ldu/projects/tqef/centres.htm
+http://www.le-brewery.com/indarticle.htm
+http://www.le-fresnoy.tm.fr/english/e_ecole.htm
+http://www.le-marche.com/Marche/html/property.htm
+http://www.le.ac.uk/arthistory/cert/
+http://www.le.ac.uk/psychology/acn5/PS2017.html
+http://www.le.ac.uk/unions/aut/news/recog.html
+http://www.leaa.org/218/fotisletter.html
+http://www.leaa.org/218/leghistory.html
+http://www.leacock.com/locust/loop/rules.html
+http://www.leader-values.com/Content/default.asp?ContentTypeID=2
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=102
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=127
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=220
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=277
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=346
+http://www.leader-values.com/Content/detail.asp?ContentDetailID=47
+http://www.leadercomputer.com/testimonials.htm
+http://www.leadermortgage.com/Programs.asp
+http://www.leaders.net/for/Rick/connecting-people/
+http://www.leadershipnow.com/leadershop/4857-5.html
+http://www.leadershipnow.com/leadershop/4932-9.html
+http://www.leadershipstudio.com/execgrowthassess.html
+http://www.leadersindubai.com/pressroom.cfm?prid=3
+http://www.leaderu.com/common/green.html
+http://www.leaderu.com/ftissues/ft9308/reviews/kass.html
+http://www.leaderu.com/ftissues/ft9312/opinion/kamisar.html
+http://www.leaderu.com/marco/marriage/
+http://www.leaderu.com/menus/featured.html
+http://www.leaderu.com/msu/chapter7.html
+http://www.leaderu.com/offices/billcraig/docs/talbott2.html
+http://www.leaderu.com/orgs/bpf/lguide/leader05.html
+http://www.leaderu.com/orgs/bpf/pathways/cheerup.html
+http://www.leaderu.com/orgs/narth/1995papers/satinover.html
+http://www.leaderu.com/orgs/probe/docs/breakdwn.html
+http://www.leaderu.com/orgs/probe/docs/cap-pun.html
+http://www.leaderu.com/orgs/probe/docs/carols.html
+http://www.leaderu.com/orgs/probe/docs/char-def.html
+http://www.leaderu.com/orgs/probe/docs/darwinbx.html
+http://www.leaderu.com/orgs/probe/docs/film-xn.html
+http://www.leaderu.com/orgs/probe/docs/homosex1.html
+http://www.leaderu.com/real/ri9301/thewind.html
+http://www.leaderu.com/real/ri9502/sommers.html
+http://www.leaderu.com/real/ri9503/gill.html
+http://www.leaderu.com/science/kobe.html
+http://www.leaderu.com/stonewall/pages/carol_c.html
+http://www.leaderu.com/stonewall/pages/michaelr.html
+http://www.leaderu.com/university/facultyclubsandpews.html
+http://www.leadingedgebc.ca/dyn.Business_Leaders.php
+http://www.leadingedgeresumes.com/
+http://www.leadingtoday.org/Onmag/dec03/gt-dec03.html
+http://www.leadlists.com/nf_info_1.htm
+http://www.leaf.ca/legal-status_1999.html
+http://www.leafpile.com/TravelLog/EuropeTravelItinerary_Slovakia.html
+http://www.league.org/league/projects/sail/catalog_2003.htm
+http://www.league.org/publication/abstracts/leadership/labs0388-2.html
+http://www.leajonesmusic.com/4more.htm
+http://www.leanadvisors.com/Lean/Manufacturing/Workshops2.cfm?CourseID=0
+http://www.leanadvisors.com/Lean/Strategy/value_stream_mapping.cfm
+http://www.leanadvisors.com/Lean/tools/5S.cfm
+http://www.leanleft.com/archives/2005/04/
+http://www.leanleft.com/archives/2005/06/13/4280/
+http://www.leanleft.com/archives/2005/06/17/4286/
+http://www.leannehoad.com.au/aboutus/aboutus_facilities.asp
+http://www.leannehoad.com.au/aboutus/aboutus_facilities.htm
+http://www.leannehoad.com.au/faq.asp
+http://www.leannehoad.com.au/faq.htm
+http://www.leannehoad.com.au/news/news_aug2003.htm
+http://www.leannehoad.com.au/news/news_sep2004.asp
+http://www.leannehoad.com.au/news/news_sep2004.htm
+http://www.leannehoad.com.au/resourcecentre/biztips/facilities.asp
+http://www.leannehoad.com.au/resourcecentre/biztips/facilities.htm
+http://www.leaonline.com/doi/abs/10.1207/S15327736ME1503_4
+http://www.leaonline.com/doi/pdf/10.1207/S15327043HUP1501&02_06
+http://www.leaonline.com/doi/pdf/10.1207/S15327604JAWS0603_01
+http://www.leaonline.com/doi/pdfplus/10.1207/S15327973RLSI3303_2
+http://www.leapingfromthebox.com/hs/alhs.html
+http://www.learmedia.ca/product_info.php/products_id/791
+http://www.learn-by-doing.com/broadcasters-training-faq.htm
+http://www.learn-german-online.net/learning-german-resouces/lern-cd_en.htm
+http://www.learn-texas-holdem.com/questions/dealing-with-tilt-and-swings.htm
+http://www.learn.co.uk/cima-mc/teachers/keyskills.htm
+http://www.learn2hand.com/DesktopSubCategory.aspx?s=1
+http://www.learn4good.com/languages/evrd_idioms/id-c.htm
+http://www.learn4good.com/tefl/tefl_training_uk.htm
+http://www.learnaboutgolf.com/beginner/lesson/lesson22.html
+http://www.learndirect-advice.co.uk/helpandadvice/whichcourse/acqual/
+http://www.learndirect-advice.co.uk/helpwithyourcareer/jobprofiles/profiles/profile1348/
+http://www.learndirect-advice.co.uk/helpwithyourcareer/jobprofiles/profiles/profile898/
+http://www.learndirect-advice.co.uk/helpwithyourcareer/jobprofiles/profiles/profile981/
+http://www.learnenglish.org.uk/stories/exam_answers.html
+http://www.learner.org/channel/courses/biology/textbook/compev/compev_2.html
+http://www.learner.org/channel/courses/biology/units/biodiv/experts/sterling.html
+http://www.learner.org/channel/courses/biology/units/genom/experts/altshuler.html
+http://www.learner.org/channel/libraries/makingmeaning/about/project.html
+http://www.learner.org/channel/libraries/readingk2/owen/closer.html
+http://www.learner.org/channel/libraries/readingk2/owen/first.html
+http://www.learner.org/channel/workshops/primarysources/coldwar/docs/lippman.html
+http://www.learner.org/edtech/rscheval/vvs.html
+http://www.learner.org/jnorth/search/GWhaleNotes3.html
+http://www.learning-org.com/99.05/0024.html
+http://www.learning.ox.ac.uk/iaul/IAUL+5+5+main.asp
+http://www.learningcommons.uoguelph.ca/ByFormat/OnlineResources/Fastfacts/LearningFastfacts/Fastfacts-MultipleChoiceExams.html
+http://www.learningcurve.gov.uk/empire/g2/cs2/background.htm
+http://www.learningcurve.gov.uk/snapshots/snapshot31/snapshot31.htm
+http://www.learningcurve.gov.uk/workshops/history.htm
+http://www.learningdesign.biz/sections/humanty.html
+http://www.learningdisability.com/newsletter_archive/mileage.htm
+http://www.learningeffects.com/SC2002Success.html
+http://www.learningenrichment.org/eyes_asia_stud.html
+http://www.learningfrompractice.org/paarn/monos00/snider00.htm
+http://www.learningplaceonline.com/relationships/books/intimacy.htm
+http://www.learningplaceonline.com/therapy/book-reviews/couple-intimacy.htm
+http://www.learningpt.org/employ/patech0119.htm
+http://www.learningsim.com/catalog/easyway02.html
+http://www.learningsolutions.com/WhitePapers/7KeysRetainTopTalent.html
+http://www.learningtogive.org/lessons/unit156/lesson1.html
+http://www.learningtogive.org/materials/careers.asp
+http://www.learningtrust.co.uk/special_needs/assessment.aspx
+http://www.learnntc.com/tools/GettingStarted/someIdeas.cfm
+http://www.learnpoints.com/corporate/terms_of_service.html
+http://www.learnthenet.com/english/html/51server.htm
+http://www.learntime.com/index.php/weblog/2004/08/
+http://www.learnwell.org/healthscript.htm
+http://www.learnworld.com/ZNW/LWText.York.Race.Ch01.html
+http://www.learnworld.com/ZNW/LWText.York.Race.Ch12.html
+http://www.learnworld.com/ZNW/LWText.York.RaceToOblivion.html
+http://www.learnworld.com/org/TX.002=1983.03.23.Reagan.html
+http://www.learnyoruba.com/learnyoruba.htm
+http://www.leasingprofessional.com/Newlp/LA/LA401/las401.htm
+http://www.leasingprofessional.com/Newlp/LA/LA821/las821.htm
+http://www.leaskstravel.co.uk/car-hire/
+http://www.leasttern.com/workshops/butnotleast/OnlineTools/webcontentcompare.html
+http://www.leatherconnexion.com/products/saddlebags/x3100.htm
+http://www.leathernroses.com/abuse/cindydifferences.htm
+http://www.leavealegacy.org/DonorStories/donor_Lewis.asp
+http://www.leaveitbehind.com/
+http://www.leaveitbehind.com/home/2004/10/apple_field_red.html
+http://www.leaveitbehind.com/home/2005/06/thanks_dave.html
+http://www.leavenotrace.com/
+http://www.leavenworth.army.mil/milrev/English/NovDec02/copolla.htm
+http://www.leaving-memories.com/forum/index.php
+http://www.lectlaw.com/files/bul17.htm
+http://www.lectlaw.com/files/bul18.htm
+http://www.lectlaw.com/files/con01.htm
+http://www.lectlaw.com/files/cos77.htm
+http://www.lectlaw.com/files/int11.htm
+http://www.lectlaw.com/filesh/bbg11.htm
+http://www.lectlaw.com/tcas.htm
+http://www.leeandlow.com/teachers/
+http://www.leeandthompson.com/MusicGuide/Chapter2_Part3_1.html
+http://www.leebase.com/icocnews/
+http://www.leechild.com/uk/excerpt-enemy.htm
+http://www.leecustomhomes.com/floorplans.html
+http://www.leeds.ac.uk/cedars/colman/CIW01r.html
+http://www.leeds.ac.uk/educol/documents/00003134.htm
+http://www.leeds.ac.uk/educol/ncihe/a4_014.htm
+http://www.leeds.ac.uk/educol/ncihe/nr_074.htm
+http://www.leeds.ac.uk/educol/ncihe/nr_411.htm
+http://www.leeds.ac.uk/educol/ncihe/r10_022.htm
+http://www.leeds.ac.uk/educol/ncihe/sc12.htm
+http://www.leeds.ac.uk/educol/ncihe/sc49.htm
+http://www.leeds.gov.uk/heritagetrails/walk.html
+http://www.leedsfloat.co.uk/faq.htm
+http://www.leemwr.com/web-content/Htmls/BOSS/BOSS.html
+http://www.leerburg.com/101e.htm
+http://www.leerburg.com/121.htm
+http://www.leerburg.com/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=104;t=000018
+http://www.leerburg.com/no-art.htm
+http://www.leerburg.com/rcmppolice.htm
+http://www.leeredcross.org/
+http://www.leesburgtoday.com/current.cfm?catid=31&newsid=9589
+http://www.lef.org/dsnews/ds_1998_sep.html
+http://www.lef.org/featured-articles/apr2000_clon_01.html
+http://www.lef.org/magazine/mag2002/oct2002_awsi_01.html
+http://www.lef.org/magazine/mag2003/jul2003_report_male_01.html
+http://www.lef.org/magazine/mag95/95jun1.htm
+http://www.lef.org/magazine/mag97/march-cover97.html
+http://www.lef.org/magazine/mag97/nov-fit97.html
+http://www.lef.org/magazine/mag99/sep99-report3.html
+http://www.lef.org/protocols/prtcl-071.shtml
+http://www.lef.org/protocols/prtcl-125.shtml
+http://www.lef.org/protocols/prtcl-147a.shtml
+http://www.lef.org/protocols/prtcls-txt/t-prtcl-071.html
+http://www.lef.org/protocols/prtcls-txt/t-prtcl-088.html
+http://www.leflaw.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=114
+http://www.leftbusinessobserver.com/SocialSecurityRevisited.html
+http://www.lefthook.org/Politics/ChowkwanyunFrank110104.html
+http://www.leftist.org/haightspeech/archives/000148.html
+http://www.leg.state.or.us/01reg/measures/hb2500.dir/hb2555.en.html
+http://www.leg.state.or.us/01reg/measures/sb0001.dir/sb0089.intro.html
+http://www.leg.state.or.us/03reg/measures/hb2200.dir/hb2222.a.html
+http://www.leg.state.or.us/03reg/measures/hb2200.dir/hb2222.en.html
+http://www.leg.state.or.us/03reg/measures/hb2800.dir/hb2801.a.html
+http://www.leg.state.or.us/03reg/measures/hb2800.dir/hb2801.intro.html
+http://www.leg.state.or.us/03reg/measures/hb2800.dir/hb2840.intro.html
+http://www.leg.state.or.us/03reg/measures/hb2900.dir/hb2985.intro.html
+http://www.leg.state.or.us/03reg/measures/hb3500.dir/hb3541.intro.html
+http://www.leg.state.or.us/03reg/measures/sb0600.dir/sb0696.intro.html
+http://www.leg.state.or.us/05reg/measures/sb0001.dir/sb0087.intro.html
+http://www.leg.state.or.us/97reg/measures/hb3600.dir/hb3623.int.html
+http://www.leg.state.or.us/99reg/measures/hb3300.dir/hb3371.a.html
+http://www.leg.state.or.us/99reg/measures/hb3400.dir/hb3400.a.html
+http://www.leg.state.or.us/99reg/measures/sb0200.dir/sb0231.int.html
+http://www.leg.state.or.us/99reg/measures/sb0200.dir/sb0232.int.html
+http://www.leg.state.or.us/ors/307.html
+http://www.leg.state.vt.us/docs/legdoc.cfm?URL=/docs/2000/bills/house/H-629.HTM
+http://www.leg.state.vt.us/docs/legdoc.cfm?URL=/docs/2000/bills/intro/H-770.HTM
+http://www.leg.wa.gov/RCW/index.cfm?section=28B.15.031&fuseaction=section
+http://www.leg.wa.gov/RCW/index.cfm?section=71.09.020&fuseaction=section
+http://www.legacy1.net/d_hong.html
+http://www.legal500.com/devs/uk/sl/uksl_017.htm
+http://www.legalaffairs.org/issues/May-June-2004/argument_mooney_mayjun04.msp
+http://www.legalaffairs.org/issues/May-June-2005/review_adler_mayjun05.msp
+http://www.legalaffairs.org/issues/November-December-2002/review_bazelon_novdec2002.html
+http://www.legalaffairs.org/webexclusive/debateclub_527s1004.html
+http://www.legalaffairs.org/webexclusive/debateclub_terror0904.html
+http://www.legaldocs.com/labor-s.htm
+http://www.legalmarketingblog.com/
+http://www.legalmediagroup.com/internationaltaxreview/default.asp?Page=3&SID=3193&M=6&Y=2004
+http://www.legalmediagroup.com/mip/includes/print.asp?SID=2175
+http://www.legalnewswatch.com/news_466.html
+http://www.legalreader.com/
+http://www.legalstudies.com/LNC.html
+http://www.legalunderground.com/2005/05/medical_malprac.html
+http://www.legassembly.sk.ca/journals/Votes/23L3S/2303vp31.htm
+http://www.legaudit.state.ak.us/pages/audits/2000/4609rpt.htm
+http://www.legends.org.za/arthur/appeal.html
+http://www.legendsofamerica.com/CA-BottleVillage.html
+http://www.leggette.com/mainbody.asp
+http://www.legiodraconis.com/modules.php?op=modload&name=News&file=article&sid=2358
+http://www.legion.de/en/carrier/products
+http://www.legion.org/?section=pub_relations&subsection=pr_speeches&content=pr_speech_memorial
+http://www.legis.gov.bc.ca/37th2nd/votes/v020126.htm
+http://www.legis.gov.bc.ca/37th5th/votes/v040428.htm
+http://www.legis.gov.bc.ca/cmt/36thParl/CMT13/hansard/so0604.htm
+http://www.legis.gov.bc.ca/hansard/29th1st/29p_01s_700204p.htm
+http://www.legis.gov.bc.ca/hansard/29th1st/29p_01s_700209p.htm
+http://www.legis.gov.bc.ca/hansard/29th1st/29p_01s_700223p.htm
+http://www.legis.gov.bc.ca/hansard/29th2nd/29p_02s_710215p.htm
+http://www.legis.gov.bc.ca/hansard/29th2nd/29p_02s_710312p.htm
+http://www.legis.gov.bc.ca/hansard/29th3rd/29p_03s_720229p.htm
+http://www.legis.gov.bc.ca/hansard/29th3rd/29p_03s_720328p.htm
+http://www.legis.gov.bc.ca/hansard/30th2nd/30p_02s_730321p.htm
+http://www.legis.gov.bc.ca/hansard/30th3rd/30p_03s_731025p.htm
+http://www.legis.gov.bc.ca/hansard/30th4th/30p_04s_740205p.htm
+http://www.legis.gov.bc.ca/hansard/30th4th/30p_04s_740326p.htm
+http://www.legis.gov.bc.ca/hansard/30th4th/30p_04s_740430p.htm
+http://www.legis.gov.bc.ca/hansard/31st1st/31p_01s_760609p.htm
+http://www.legis.gov.bc.ca/hansard/31st2nd/31p_02s_770301p.htm
+http://www.legis.gov.bc.ca/hansard/31st2nd/31p_02s_770623p.htm
+http://www.legis.gov.bc.ca/hansard/31st2nd/31p_02s_770810p.htm
+http://www.legis.gov.bc.ca/hansard/31st2nd/31p_02s_770826a.htm
+http://www.legis.gov.bc.ca/hansard/31st2nd/31p_02s_770927a.htm
+http://www.legis.gov.bc.ca/hansard/31st3rd/31p_03s_780501p.htm
+http://www.legis.gov.bc.ca/hansard/32nd2nd/32p_02s_800305p.htm
+http://www.legis.gov.bc.ca/hansard/32nd2nd/32p_02s_800318p.htm
+http://www.legis.gov.bc.ca/hansard/32nd2nd/32p_02s_800401p.htm
+http://www.legis.gov.bc.ca/hansard/32nd2nd/32p_02s_800515p.htm
+http://www.legis.gov.bc.ca/hansard/32nd3rd/32p_03s_810611p.htm
+http://www.legis.gov.bc.ca/hansard/33rd1st/33p_01s_830726p.htm
+http://www.legis.gov.bc.ca/hansard/33rd2nd/33p_02s_840215a.htm
+http://www.legis.gov.bc.ca/hansard/33rd3rd/33p_03s_850507a.htm
+http://www.legis.gov.bc.ca/hansard/34th1st/34p_01s_870519p.htm
+http://www.legis.gov.bc.ca/hansard/34th1st/34p_01s_871207p.htm
+http://www.legis.gov.bc.ca/hansard/34th1st/34p_01s_871215p.htm
+http://www.legis.gov.bc.ca/hansard/34th2nd/34p_02s_880406p.htm
+http://www.legis.gov.bc.ca/hansard/34th3rd/34p_03s_890518p.htm
+http://www.legis.gov.bc.ca/hansard/34th3rd/34p_03s_890608p.htm
+http://www.legis.gov.bc.ca/hansard/34th3rd/34p_03s_890711p.htm
+http://www.legis.gov.bc.ca/hansard/34th5th/34p_05s_910617p.htm
+http://www.legis.gov.bc.ca/hansard/37th2nd/h20126a.htm
+http://www.legis.gov.bc.ca/info/2-11-1.htm
+http://www.legis.gov.bc.ca/mla/38thParl/bennett.htm
+http://www.legis.state.ga.us/legis/2003_04/mbrs/moraitakisnick42ndpost4.htm
+http://www.legis.state.ia.us/GA/80GA/Session.2/SC/SC0114.html
+http://www.legis.state.wi.us/2005/data/ab_list.html
+http://www.legislation.hmso.gov.uk/si/si1987/Uksi_19871542_en_1.htm
+http://www.legislation.hmso.gov.uk/si/si1989/Uksi_19891941_en_4.htm
+http://www.legislation.hmso.gov.uk/si/si1994/Uksi_19942040_en_1.htm
+http://www.legislation.hmso.gov.uk/si/si2002/20020284.htm
+http://www.legislative.noaa.gov/Archives/2002/nationalgreenhousegasdatabase042502.html
+http://www.legislature.idaho.gov/sessioninfo/2003/StandingCommittees/hcommin.html
+http://www.legislature.state.oh.us/bills.cfm?ID=125_HB_325
+http://www.legslarry.beerdrinkers.co.uk/ego/Worlds95.htm
+http://www.lehigh.edu/library/guides/companyguide.html
+http://www.lehigh.edu/~amsp/blog.html
+http://www.lehigh.edu/~amsp/tubb5.html
+http://www.lehigh.edu/~amsp/tubb7.html
+http://www.lehigh.edu/~inllnote/coursedesign.htm
+http://www.lehman.edu/deannss/sociologysocwk/courses/sociology/soc247/propout.html
+http://www.lehtoslaw.com/thingssales.html
+http://www.leicester.gov.uk/departments/page.asp?pgid=1943
+http://www.leicester.gov.uk/newssite/newsview/page.asp?pgid=5123
+http://www.leicesterandleicestershire.com/Stefanie_Rose.htm
+http://www.leicestercollege.ac.uk/courses/cont/plmd/computers.asp
+http://www.leighbureau.com/speaker.asp?id=55
+http://www.leighsaintthomas.wigan.sch.uk/coat_of_arms.htm
+http://www.leinsterhockey.ie/leinsterwip/default.asp?URL=coaching/mini_hockey.asp&Main_MM=divMainCoaching
+http://www.leiss.ca/articles/50
+http://www.leisurejobs.com/jobdir.php/224/0/0/46
+http://www.leisuremusic.co.uk/product_reviews_info.php/products_id/38/reviews_id/5
+http://www.leisureopportunities.co.uk/
+http://www.leithner.com.au/circulars/circular44.htm
+http://www.leithner.com.au/newsletter/
+http://www.lemac.co.uk/company/people.html
+http://www.lemonlawoffice.com/lemonpages/att_info.php?state=ri
+http://www.lemonlawsusa.com/Arkansas.asp
+http://www.lemonysnicket.com/excerptpage.cfm?bookid=28661
+http://www.lemonysnicket.com/excerptpage.cfm?bookid=41403
+http://www.lemoyne.edu/OTRP/teachingresources.html
+http://www.lemurreserve.org/lemurs.html
+http://www.lendingexpo.net/articlec_business_and_finance_1155.htm
+http://www.lendingtree.com/cec/yourhome/homeequityloans/home-equity-loans-vs-lines-of-credit.asp?esourceid=23976&source=23976
+http://www.lendingtree.com/cec/yourhome/homeequityloans/home-equity-loans-vs-lines-of-credit.asp?esourceid=24200&source=24200
+http://www.lendingtree.com/cec/yourhome/homeequityloans/home-equity-loans-vs-lines-of-credit.asp?esourceid=33988&source=33988
+http://www.lenscove.com/newsletter.asp?hl=102
+http://www.lenzienet.co.uk/fp/aigraham.htm
+http://www.leonardbernstein.com/studio/element2.asp?id=384
+http://www.leonardfitness.com/faq8.htm
+http://www.leonpaul.com/home/entry_form.htm
+http://www.leonstudioone.com/Export8.htm
+http://www.leopardmag.co.uk/feats/26/north-sea-oil---both-in-retrospect-and-prospect
+http://www.leprosy.org/ALMcareers.html
+http://www.leprosymission.org.uk/html/projects.php?itm=72
+http://www.lermanet.com/cos/underbelly.html
+http://www.lesbianalliance.com/content.cfm?cat=entertainment&sub=books&file=dana6
+http://www.lesi.org/education/faq.asp
+http://www.lesi.org/education/faq.asp?printer=yes
+http://www.lesjones.com/posts/000275.shtml
+http://www.lesjones.com/posts/001531.shtml
+http://www.lesley.edu/threshold/cwrite.html
+http://www.lesliefield.com/other_history/robert_dossin_interview_1983.htm
+http://www.lesnelson.com/corp.htm
+http://www.lespagesauxfolles.ca/Book7/2003LPAF69.htm
+http://www.lessig.org/blog/
+http://www.lessig.org/blog/archives/001746.shtml
+http://www.lessig.org/blog/archives/001754.shtml
+http://www.lessig.org/blog/archives/001840.shtml
+http://www.lessig.org/blog/archives/002872.shtml
+http://www.lessig.org/blog/archives/002933.shtml
+http://www.lessig.org/blog/archives/002942.shtml
+http://www.lessig.org/blog/archives/002943.shtml
+http://www.lessonplanspage.com/MusicArtDesignACDCoverIdea67.htm
+http://www.lessonplanspage.com/ScienceExTempGravityAffectSeedGerminationMO68.htm
+http://www.lessons4living.com/box_of_personality.htm
+http://www.lessontutor.com/eesReflexive.html
+http://www.lessontutor.com/jm8.html
+http://www.lessontutor.com/jm_digestive.html
+http://www.lessontutor.com/ml5.html
+http://www.let.leidenuniv.nl/history/migration/chapter9.html
+http://www.let.leidenuniv.nl/tcimo/tulp/Research/ejz16.htm
+http://www.let.uu.nl/womens_studies/anneke/filmtheory.html
+http://www.letchworthgardencity.net/lgcs/westrell.htm
+http://www.letfreedomgrow.com/recipes/green_peril.htm
+http://www.lethbridge.ca/home/City+Hall/City+Council/Council+Information/Communicating+with+City+Council/
+http://www.letmestayforaday.com/report/?id=149
+http://www.letnaderdebate.org/townhall.asp
+http://www.letran.edu/collegiate/clased/clas_comarts.php
+http://www.letrascanciones.org/bbmak/into-your-head/staring-into-space.php
+http://www.letsautomate.com/10868.cfm
+http://www.letsautomate.com/10911.cfm
+http://www.letsfight.com/
+http://www.letsgothere.co.uk/lgtnet/attraction/0022667-0.aspx
+http://www.letsrecycle.com/features/glass_emissions.jsp
+http://www.letsrun.com/forum/flat_read.php?thread=458338
+http://www.letssingit.com/topic-68644-3.html
+http://www.letstalksense.com/quotes.html
+http://www.letstalkwinning.com/
+http://www.letters-of-york.co.uk/holidays.htm
+http://www.lettersfrombabylon.com/engineering/
+http://www.letusreason.org/Latrain10.htm
+http://www.letusreason.org/Wf27.htm
+http://www.letusreason.org/trin5.htm
+http://www.leukaemiabusters.org.uk/our-history.htm
+http://www.leukemia-lymphoma.org/all_mat_detail.adp?item_id=28602&sort_order=17&cat_id=
+http://www.leukemia-lymphoma.org/all_mat_detail.adp?item_id=28602&sort_order=17&cat_id=1731
+http://www.levellers.co.uk/cfm/prod.cfm?ProductGroupID=22
+http://www.levinegreenberg.com/deals.asp
+http://www.levistrauss.com/about/history/denim.htm
+http://www.levity.com/alchemy/didier.html
+http://www.lewingroup.com/pages/00June/organizationbasics.htm
+http://www.lewiscopublichealth.org/directors%20message.htm
+http://www.lewisginter.org/html/membership.asp
+http://www.lewishampct.nhs.uk/document_view.php?DID=00000000000000000064
+http://www.lewrockwell.com/barnhart/barnhart26.html
+http://www.lewrockwell.com/bonner/bonner114.html
+http://www.lewrockwell.com/englund/englund13.html
+http://www.lewrockwell.com/kwiatkowski/kwiatkowski55.html
+http://www.lewrockwell.com/latulippe/latulippe52.html
+http://www.lewrockwell.com/north/north178.html
+http://www.lewrockwell.com/north/north184.html
+http://www.lewrockwell.com/north/north280.html
+http://www.lewrockwell.com/north/north283.html
+http://www.lewrockwell.com/north/north328.html
+http://www.lewrockwell.com/north/north379.html
+http://www.lewrockwell.com/orig3/monahan1.html
+http://www.lewrockwell.com/orig4/katz1.html
+http://www.lewrockwell.com/paul/paul76.html
+http://www.lewrockwell.com/roberts/roberts102.html
+http://www.lewrockwell.com/stein/stein14.html
+http://www.lewrockwell.com/vance/vance7.html
+http://www.lewrockwell.com/wall/wall24.html
+http://www.lewrockwell.com/white/white71.html
+http://www.lexar.com/activememory/qa.html
+http://www.lexi.com/web/solpharmacy.jsp
+http://www.lexingtoninstitute.org/defense/jammer.htm
+http://www.lexingtoninstitute.org/immigration/040404.asp
+http://www.lexingtonleader.com/life.shtml
+http://www.lexis-nexis.com/cispubs/guides/african_american/bscp/bscp3.htm
+http://www.lexisnexis.com/academic/2upa/Aph/bdfaSeriesC.asp
+http://www.lexisnexis.com/lawschool/study/qanda/business.asp
+http://www.lexisone.com/legalresearch/payasyougo/contentlistings/texas_lar.html
+http://www.lexusownersclub.co.uk/forum/index.php?showtopic=17587
+http://www.lexusownersclub.co.uk/forum/lofiversion/index.php/t17587.html
+http://www.leybourne.com/stories3.html
+http://www.leyhunt.fsnet.co.uk/lhunt87.htm
+http://www.leylop.com/2003/12/korean-war.html
+http://www.lezamizrealestate.com/r_ask-twin-falls-idaho-real-estate.asp
+http://www.lezhrak.greyhorn.org/
+http://www.leziate.demon.co.uk/hom/homw.htm
+http://www.lfig.org/events.htm
+http://www.lfpl.org/business/busclip7.htm
+http://www.lft1614.org/august2003.htm
+http://www.lg-employers.gov.uk/rewards/schemes/performance.html
+http://www.lg01.com/
+http://www.lgcnet.com/pages/products/elections/elfeat4.htm
+http://www.lge.com/experience/social_commitment/culture.jsp
+http://www.lgpc.state.ny.us/aug04min.html
+http://www.lhf.org/visit.html
+http://www.lhh.org/hrq/24-1/village.htm
+http://www.lhmu.org.au/lhmu/news/762.html
+http://www.lhospital.org/rapporti_annuali/eng_moreinfo_1998.htm
+http://www.lhs.liverpool.k12.ny.us/lhslib/Weblinks/president.html
+http://www.lhss.uce.ac.uk/englishweb/undergrad/ba/notes/englishinglobalcontext/Week1.htm
+http://www.lhup.edu/~dsimanek/3d/illus1.htm
+http://www.lhup.edu/~dsimanek/solar.htm
+http://www.liamodonnell.com/IndigoHarry.html
+http://www.lib.az.us/extension/road5-03.htm
+http://www.lib.az.us/text/braille/tbn12-03t/volnewst.cfm
+http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/Evaluate.html
+http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/WhatIs.html
+http://www.lib.byu.edu/~english/WWI/influence/graves.html
+http://www.lib.byu.edu/~rdh/wwi/1914/ypres1.html
+http://www.lib.byu.edu/~rdh/wwi/bio/l/ludendrf.html
+http://www.lib.byu.edu/~rdh/wwi/versa/tri1.htm
+http://www.lib.duke.edu/ias/NewBooks/Mideast/January_2004.htm
+http://www.lib.ecu.edu/govdoc/terrorism.html
+http://www.lib.ed.ac.uk/about/pubs/lg51/h75.shtml
+http://www.lib.flinders.edu.au/resources/sub/education/science.html
+http://www.lib.gcal.ac.uk/heatherbank/picture.html
+http://www.lib.gla.ac.uk/sjmc/directory/
+http://www.lib.ipfw.edu/637.0.html
+http://www.lib.ksu.edu/teams/
+http://www.lib.mq.edu.au/digital/seringapatam/other/viraraja.html
+http://www.lib.msu.edu/corby/reviews/posted/shore.htm
+http://www.lib.msu.edu/harris23/grants/4relfund.htm
+http://www.lib.msu.edu/harris23/grants/pgiving.htm
+http://www.lib.msu.edu/harris23/red_tape/stat9804.htm
+http://www.lib.niu.edu/ipo/ii770211.html
+http://www.lib.niu.edu/ipo/ip940524.html
+http://www.lib.niu.edu/ipo/oi000812.html
+http://www.lib.uchicago.edu/e/ets/Responsa.html
+http://www.lib.uchicago.edu/e/gifts/brooker/2004desai.html
+http://www.lib.uchicago.edu/e/ssa/nbl_01.10.html
+http://www.lib.uchicago.edu/e/using/catalog/whatstatusmeans.html
+http://www.lib.uconn.edu/about/publications/scholcomopenaccessbasic.htm
+http://www.lib.umich.edu/govdocs/elec2004.html
+http://www.lib.umich.edu/govdocs/stecfor.html
+http://www.lib.umich.edu/govdocs/stpolisc.html
+http://www.lib.umich.edu/pap/tools/publications/ptolemy.html
+http://www.lib.umich.edu/tcp/eebo/proj_stat/archive_admin_may2_00.html
+http://www.lib.unb.ca/Texts/NBHistory/Education/bin/tei2html_chap.cgi?determine=bibliography
+http://www.lib.unb.ca/Texts/SCL/bin/get.cgi?directory=vol15_1/&filename=Goldman.htm
+http://www.lib.unb.ca/Texts/Special_Collections/unb/db.html
+http://www.lib.unb.ca/Texts/TRIC/bin/get.cgi?directory=vol12_2/&filename=Knowles.htm
+http://www.lib.unb.ca/Texts/TRIC/bin/getPrint.cgi?directory=vol12_2/&filename=Knowles.htm
+http://www.lib.unc.edu/prices/1996/PRIC165.HTML
+http://www.lib.unc.edu/prices/1998/PRIC211.HTML
+http://www.lib.uoguelph.ca/news/library_links/spring_05/commons.html
+http://www.lib.utexas.edu/services/borrower/recalls_and_holds.html
+http://www.lib.utexas.edu/taro/tslac/60004/tsl-60004.html
+http://www.lib.utexas.edu/taro/utaaa/00006/aaa-00006.html
+http://www.lib.utk.edu/music/contact.html
+http://www.lib.utk.edu/spcoll/manuscripts/ms2070fa.html
+http://www.lib.virginia.edu/area-studies/SouthAsia/SAserials/Dawn/1996/29Ag96.html
+http://www.lib.virginia.edu/reference/socsci/business.html
+http://www.lib.virginia.edu/small/exhibits/sixties/civil.html
+http://www.lib.virginia.edu/small/vhp/neh/part4.html
+http://www.lib.washington.edu/business/tlc/archive/skv.html
+http://www.lib.washington.edu/specialcoll/exhibits/past.html
+http://www.lib.washington.edu/subject/history/historyday/pri.html
+http://www.lib.wayne.edu/geninfo/policies/safety/general/safetyfeatures.php
+http://www.libarts.ucok.edu/communication/CommforTeachersSmith.html
+http://www.libb.com/home/
+http://www.libchrist.com/bible/divorce.html
+http://www.libchrist.com/swing/happysafestudies.html
+http://www.libchrist.com/swing/phxclubs.html
+http://www.libdems.org.uk/index.cfm/page.main/section.parliamentary/article.6233
+http://www.libdems.org.uk/index.cfm/page.main/section.parliamentary/article.8114
+http://www.libdems.org.uk/index.cfm/page.whois/section.people/wid.809/wgroup.ppc
+http://www.liberal.ca/pressroom_e.aspx
+http://www.liberal.ca/staff_e.aspx
+http://www.liberal.org.il/libe2txt.html
+http://www.liberales.be/cgi-bin/en/show.pl?boek&hayek
+http://www.liberalkids.org/preschool.html
+http://www.liberaloasis.com/shop.htm
+http://www.liberation.org.za/docs/books/ccsa.php
+http://www.liberator.net/articles/LiberatorMark/DefendingModelSpreads.html
+http://www.libertarian.to/NewsDta/templates/news1.php?art=art483
+http://www.libertarian.to/NewsDta/templates/news1.php?art=art815
+http://www.libertariannation.org/a/n030l2.html
+http://www.libertariantv.com/an_american_revolution/an_american_revolution.asp
+http://www.libertocracy.com/PoliveriumE-2/E-2Sectors/E-2Capitalium/E-2EconomyX/BankMoney/Bankoperation.htm
+http://www.libertybaptistaz.com/trailofblood.htm
+http://www.libertyforum.org/showarticles.php?Format=full&Placement=BreakingNews&Type=&Startat=0&Total=30&t=
+http://www.libertyhaven.com/noneoftheabove/sciencetechnologyortheinternet/whatkilled.html
+http://www.libertyhaven.com/politicsandcurrentevents/environmentalismorconservation/abundance.html
+http://www.libertyindia.org/tsunami/artht.php
+http://www.libertylegal.org/cases.htm
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=82626
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=83034
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=83654
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=83911
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=98782
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=98931
+http://www.libertypost.org/cgi-bin/readart.cgi?ArtNum=98931&Disp=4&Trace=on
+http://www.libertyroundtable.org/faq.hardquestions.html
+http://www.libertyskating.com/LibertySummer.html
+http://www.libertyunites.us/ftopicp-144318-.html
+http://www.libr.org/PL/22_Sipley.html
+http://www.libr.org/WSS/newsletter/1999fall.html
+http://www.libr.org/WSS/newsletter/2000fall.html
+http://www.libr.org/WSS/newsletter/2001spring.html
+http://www.libr.org/WSS/newsletter/2003spring.html
+http://www.libr8.co.uk/pages/which.htm
+http://www.librarianactivist.org/news/11_2004.html
+http://www.librarianavengers.org/weblog/
+http://www.libraries.psu.edu/nabokov/schuman.htm
+http://www.librarium-online.com/articles.php?action=show&showarticle=177
+http://www.library.adelaide.edu.au/guide/hum/english/E_ozfilm.html
+http://www.library.arizona.edu/ej/jpe/volume_2/harmsvol2.htm
+http://www.library.auckland.ac.nz/about/annrep/annrep99-2.htm
+http://www.library.auckland.ac.nz/subjects/bus/subjects/MER.htm
+http://www.library.auckland.ac.nz/subjects/lit/course-pages/eng220.htm
+http://www.library.auckland.ac.nz/subjects/lit/course-pages/eng230.htm
+http://www.library.ca.gov/SITN/2004/0451.htm
+http://www.library.cmu.edu/Research/Archives/Heinz/HJH_Bio.html
+http://www.library.cornell.edu/Reps/DOCS/anderson.htm
+http://www.library.cornell.edu/Reps/DOCS/howard.htm
+http://www.library.cornell.edu/Reps/DOCS/hughes.htm
+http://www.library.cornell.edu/Reps/DOCS/nolen_11.htm
+http://www.library.cornell.edu/colldev/mideast/balfr.htm
+http://www.library.cornell.edu/colldev/slav/publishinghistory.html
+http://www.library.cornell.edu/iris/policies/performance.html
+http://www.library.cornell.edu/preservation/tutorial/presentation/table7-1.html
+http://www.library.csi.cuny.edu/dept/history/lavender/182f97.html
+http://www.library.csi.cuny.edu/dept/history/lavender/386/truewoman.html
+http://www.library.drexel.edu/resources/tutorials/usingcallnumbers.html
+http://www.library.georgetown.edu/guides/mla/
+http://www.library.hbs.edu/go/bloomberg_help.html
+http://www.library.hbs.edu/hc/wes/indexes/alpha/content/1001955889/
+http://www.library.louisville.edu/kornhauser/gfdb/b.asp
+http://www.library.louisville.edu/kornhauser/gfdb/f.asp
+http://www.library.louisville.edu/kornhauser/gfdb/j.asp
+http://www.library.louisville.edu/kornhauser/gfdb/l.asp
+http://www.library.pitt.edu/subject_guides/westeuropean/wwwes/mspr-fr.html
+http://www.library.pitt.edu/subject_guides/westeuropean/wwwes/mspr-ge.html
+http://www.library.soton.ac.uk/subjects/sobs/searchguide.shtml
+http://www.library.tmc.edu/abcc/Neel/Neel_intro.htm
+http://www.library.ualberta.ca/databases/databasesubject_minor/index.cfm?fuseaction=minor&minorid=78&minorlabel=Polar%20Studies
+http://www.library.ualberta.ca/subject/english/introguide/index.cfm
+http://www.library.ucsb.edu/istl/97-summer/article3.html
+http://www.library.uiuc.edu/edx/rankgen.htm
+http://www.library.umass.edu/spcoll/university/class/rg4desc.html
+http://www.library.umc.edu/pe-db/pe-asthma-what.html
+http://www.library.uni.edu/speccoll/liboakb.html
+http://www.library.unisa.edu.au/resources/subject/digitalart.asp
+http://www.library.unisa.edu.au/resources/subject/olympics.asp
+http://www.library.unp.ac.za/id62.htm
+http://www.library.unt.edu/gpo/ota/tech/safety/ap18.html
+http://www.library.utoronto.ca/pcs/eps/social/social1.htm
+http://www.library.utoronto.ca/rir/successstories.html
+http://www.library.yale.edu/~llicense/ListArchives/0404/msg00077.html
+http://www.library.yale.edu/~llicense/ListArchives/0503/msg01149.html
+http://www.libraryinstruction.com/confusion.html
+http://www.libraryinstruction.com/liinternational.html
+http://www.libraryjournal.com/article/CA456252.html
+http://www.libraryjournal.com/article/CA456252.html?display=searchResults&stt=001&text=when+lssi+comes+to+town
+http://www.libraryjournal.com/article/CA515802.html
+http://www.librarypreservation.org/mee/capacity/resources.html
+http://www.libraryreference.org/index.php?c=Arts/Performing_Arts/Acting
+http://www.librarysupportstaff.com/4emailthinking.html
+http://www.librarysupportstaff.com/4subscribe.html
+http://www.libsci.sc.edu/miller/plants.htm
+http://www.libya1.com/news/n2004/dec/n18dec4a.htm
+http://www.libyarockart.com/physical.htm
+http://www.licb.com/mortgages_subitems.asp?id=12&sid=58
+http://www.licha.de/astro_article_atmosphere.php
+http://www.lichfield.anglican.org/lichfield/rugeley/norton/
+http://www.lichfieldfestival.org/htm2004/festExtra_04.shtml
+http://www.liebertonline.com/doi/pdfplus/10.1089/blr.2004.23.754
+http://www.liebsoft.com/index.cfm/products/tsp/features
+http://www.liechtenstein.li/en/eliechtenstein_main_sites/portal_fuerstentum_liechtenstein/fl-wuf-wirtschaft_finanzen/fl-wuf-wirtschaftsstandort/fl-wuf-wirtschaftsstandort-standortbedingungen.htm
+http://www.lies.com/
+http://www.lies.com/wp/2005/06/15/more-on-downing-street/
+http://www.lies.com/wp/2005/06/18/still-more-downing-street-memos-significance/
+http://www.lieye.com/articles/arthurhouse/mercedes.shtml
+http://www.life-educationaustralia.com.au/ezine_6_04.htm
+http://www.life-enhancement.com/LE/displayart.asp?id=373
+http://www.life-peace.org/newroutes/newroutes1997/nr199701/resist.htm
+http://www.life.ca/nl/60/pr.html
+http://www.life.uiuc.edu/govindjee/biochem494/Abs.html
+http://www.life.uiuc.edu/plantbio/wimovac/results.htm
+http://www.life.uiuc.edu/pru/team/efficiency.html
+http://www.lifeaction.org/Articles/viewarticle.asp?id=1016111410
+http://www.lifeadventures.com/puerto_vallarta.htm
+http://www.lifeadventures.com/victoria.htm
+http://www.lifeaftertheoilcrash.net/
+http://www.lifeaftertheoilcrash.net/Introduction.html
+http://www.lifebeatonline.com/spring2005/patients.shtml
+http://www.lifebeatonline.com/summer2004/news.shtml
+http://www.lifecare.com/connection/3q03_8.html
+http://www.lifechallenges.org/create/emotions.html
+http://www.lifechallenges.org/create/moore.html
+http://www.lifecoachschoolinternational.co.uk/enrol.htm
+http://www.lifecomhealth.com/html/aboutlifecom_management.html
+http://www.lifegatechurch.com/2005summercamp.htm
+http://www.lifehacker.com/software/productivity/index.php
+http://www.lifeissues.net/
+http://www.lifeissues.net/writers/kah/kah_06background1.html
+http://www.lifeissues.org/connector/99jul.html
+http://www.lifelong.ed.ac.uk/news/essays/parkinson.html
+http://www.lifelongaidsalliance.org/advocacy/legtrack.html
+http://www.lifelonglearning.co.uk/dearing/dr9006.htm
+http://www.lifelonglearning.co.uk/iip/anx02.htm
+http://www.lifelovesyou.com/Life_Coach_ezine-Parenting_specialtime.html
+http://www.lifeofrobert.com/london/archives/london/
+http://www.lifeplusinc.com/patientcaregivers.asp
+http://www.lifepositive.com/Mind/psychology/stress/time-management-skills.asp
+http://www.lifeprinciples.net/HappinessWhoIAm.html
+http://www.lifeprint.com/asl101/lessons/lesson1.htm
+http://www.lifeprint.com/asl101/pages-layout/literacy1.htm
+http://www.liferelationships.com/resources/articles/index.asp
+http://www.lifesatwitch.com/brakes_tics.html
+http://www.lifesite.net/ldn/1999/mar/990304b.html
+http://www.lifespan.org/services/bmed/wt_loss/articles/surgery/log.htm
+http://www.lifesteps.com/gm/Atoz/ency/obstetrical_emergencies_pr.jsp
+http://www.lifestyle.scotsman.com/families/headlines_specific.cfm?articleid=516
+http://www.lifetimetv.com/community/chat/robertstack_transcript.html
+http://www.lifetimetv.com/reallife/health/features/inshape_ascouple.html
+http://www.lifetimetv.com/reallife/relation/dating/askmp_restaurant2.html
+http://www.lifetoolsforwomen.com/f/drugging-adhd.htm
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D150275%2526M%253D50026,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D150800%2526M%253D50071,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D152444%2526M%253D200106,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D152932%2526M%253D50024,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D153179%2526M%253D200237,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D153936%2526M%253D50011,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D155881%2526M%253D150019,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D156436%2526M%253D50019,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D156720%2526M%253D200119,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D158104%2526X%253D1%2526M%253D50068,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D158512%2526M%253D200355,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D159003%2526M%253D200119,00.html
+http://www.lifeway.com/lwc/article_main_page/0,1703,A%253D160195%2526M%253D200392,00.html
+http://www.lifeway.com/lwc/lwc_cda_article/0,1643,A%253D152444%2526X%253D1%2526M%253D50088,00.html
+http://www.lifewaystores.com/lwstore/envelopes.asp
+http://www.lifewaystores.com/lwstore/product.asp?isbn=0633003018
+http://www.lifewithalacrity.com/2004/10/tracing_the_evo.html
+http://www.lifewithms.com/after~1.htm
+http://www.light-house.co.uk/intro.htm
+http://www.lightandmatter.com/area1sales.html
+http://www.lightandmatter.com/article/sneaky.html
+http://www.lightcycle.org/2004/04/index.php
+http://www.lighthouse.org/jodi.htm
+http://www.lighthouseratings.com/cape%20may/
+http://www.lightingchina.com/english/lighting_books/bzrz/zmbz.htm
+http://www.lightingmagic.com/famsitqa.htm
+http://www.lightning.org/media.htm
+http://www.lightplanet.com/mormons/daily/activity/lay_participation_eom.htm
+http://www.lightplanet.com/mormons/daily/missionary/farms_why.htm
+http://www.lightrailnow.org/facts.htm
+http://www.lightrailnow.org/news/n_aus_2004-01.htm
+http://www.lightreading.com/document.asp?doc_id=47173
+http://www.lightreading.com/document.asp?doc_id=47173&site=lightreading
+http://www.lightreading.com/document.asp?doc_id=67960&site=unstrung
+http://www.lightscameraacting.com/Classes.html
+http://www.lightship.org/cope.htm
+http://www.lightwork.com/lw_news.htm
+http://www.lightworker.com/SacredRooms/fear/
+http://www.lightworks-user.com/news.php
+http://www.lightworks.com/MonthlyAspectarian/2002/February/lichtenberg.htm
+http://www.lightyears2.com/ColorTherapy20x24.html
+http://www.lightyourfire.com/
+http://www.liguide.com/cgi-bin/insurance/agents.pl?Dental=home-based&group=Term
+http://www.lii.org/search?searchtype=subject;query=Science+Study+teaching;subsearch=Science+Study+teaching
+http://www.lik-sang.com/list.php?nav=top&category=264
+http://www.likesbooks.com/coverballot/2003/WO-results-2003.html
+http://www.likesbooks.com/covers3.html
+http://www.likesbooks.com/megan29.html
+http://www.lileks.com/bleats/
+http://www.lileks.com/bleats/archive/01/1101/110101.html
+http://www.lileks.com/bleats/archive/03/0203/020303.html
+http://www.lileks.com/bleats/archive/03/0303/032403.html
+http://www.lileks.com/bleats/archive/03/0703/070203.html
+http://www.lileks.com/bleats/archive/04/0504/052804.html
+http://www.lileks.com/bleats/archive/04/0804/080504.html
+http://www.lilienthal-museum.de/olma/e213.htm
+http://www.lilikoi.com/cost_frame.html
+http://www.lilithgallery.com/glowmaid/freedomofmarriage.html
+http://www.lima.ohio-state.edu/events/creative-writing/jrsrfichm2.html
+http://www.lime.ki.se/gorilla
+http://www.limitedgov.org/sites/lg/common_sense_select.aspx
+http://www.linacre.org/humreprodtechn.htm
+http://www.linacreschoolofdefence.org/
+http://www.lincoln.coop/travel/straighttalking.htm
+http://www.lincoln.gov.uk/Information_page_+_3_pic.asp?sec_id=1382
+http://www.lincolncenter.org/visitor/blackhistorymonth.asp?ws=&version=to
+http://www.lincolnheightsbaptist.org/PDF_Files/04Dec01W.htm
+http://www.lincolninst.edu/pubs/pub-detail.asp?id=299
+http://www.lincolninst.edu/pubs/pub-detail.asp?id=971
+http://www.lincon.com/travel/oceana/miscoc/srilanka.htm
+http://www.lindal-in-furness.co.uk/SchNews/schnews.htm
+http://www.lindapaul.com/links_to_tile_paintings_artists.htm
+http://www.lindasy.com/skin411/411_jan05p2.html
+http://www.lindatellingtonjones.com/shopequipment.shtml
+http://www.lindatellingtonjones.com/tteamcommunication.shtml
+http://www.lindqvist.com/bert.php
+http://www.lindsaybks.com/dgjp/dave/philos/
+http://www.line-dance.com/Rules%202000.htm
+http://www.line56.com/articles/default.asp?ArticleID=2982
+http://www.line56.com/articles/default.asp?ArticleID=4348
+http://www.line56.com/articles/default.asp?ArticleID=5522&TopicID=9
+http://www.line56.com/articles/default.asp?ArticleID=6214
+http://www.line56.com/articles/default.asp?NewsID=2982
+http://www.lines-magazine.org/Art_May05/vasuki.htm
+http://www.lines-magazine.org/Art_Nov02/Pepe.htm
+http://www.lines-magazine.org/Art_Nov03/Bazeer.htm
+http://www.linezine.com/3.1/features/jhmwsh.htm
+http://www.linfield.edu/admission/procedure.html
+http://www.linfield.edu/dce/resources/faculty/html/Fall04/CSC152_Fall2004.htm
+http://www.ling.canterbury.ac.nz/personal/asudeh/frames/new.html
+http://www.ling.lancs.ac.uk/study/masters/admissions.htm
+http://www.ling.upenn.edu/courses/Fall_2003/ling001/English.html
+http://www.ling.upenn.edu/~kurisuto/phone_wiring.html
+http://www.linguistics.ucla.edu/people/hayes/
+http://www.linguistlistplus.com/glot/geninfo.htm
+http://www.linguisystems.com/age.php?age=10&agetopic=15
+http://www.linguisystems.com/age.php?age=14&agetopic=15
+http://www.linguisystems.com/age.php?age=18&agetopic=15
+http://www.linguisystems.com/age.php?age=5&agetopic=15
+http://www.linguisystems.com/assessments.php?testtopic=15
+http://www.linguisystems.com/games.php?gametopic=15
+http://www.linguisystems.com/test-create.php
+http://www.linguisystems.com/test-login.php
+http://www.linguisystems.com/testing.php
+http://www.linkny.com/~civitas/page205.html
+http://www.links.net/daze/98/03/07/
+http://www.links.net/vita/sf/egg/
+http://www.links.net/vita/swat/course/thesis/food/ethan.html
+http://www.links2love.com/poetryandfiction.htm
+http://www.linkshare.com/press/news_wabctv.html
+http://www.linktolearning.com/language.htm
+http://www.linkwaregraphics.com/music/
+http://www.linkwordlanguages.com/
+http://www.linnrecords.com/disclaimer.asp
+http://www.linnsoft.com/tour/verticalScale.htm
+http://www.linux-gull.ch/projets/reseau/mail/msg01816.html
+http://www.linux-m68k.org/debian-atari.html
+http://www.linux-m68k.org/debian-vme.html
+http://www.linux-mag.com/2001-06/mysql_01.html
+http://www.linux-mag.com/2001-12/mysql_01.html
+http://www.linux-mag.com/2002-03/debian_01.html
+http://www.linux-mag.com/content/view/237/2082/
+http://www.linux-mag.com/content/view/266/2257/
+http://www.linux-plus.com/support_services.php
+http://www.linux.ie/old-list/37321.html
+http://www.linux.ie/pipermail/ilug/2004-December/020606.html
+http://www.linuxant.com/driverloader/wlan/faq.php
+http://www.linuxbase.org/policy/charter.html
+http://www.linuxbusinessweek.com/story/38045_f.htm
+http://www.linuxbusinessweek.com/story/46070.htm
+http://www.linuxdevcenter.com/pub/a/linux/2001/11/01/physics.html
+http://www.linuxdevcenter.com/pub/a/linux/2003/06/19/cpp_mm-1.html?page=2
+http://www.linuxdevcenter.com/pub/a/linux/2005/05/26/textonly.html
+http://www.linuxdevices.com/cgi-bin/ct.cgi?type=1&sponsorid=SP5943140291&url=%2Fsponsors%2FSP5943140291-NS9767106545.html
+http://www.linuxdevices.com/cgi-bin/ct.cgi?type=1&sponsorid=SP7466157949&url=%2Fsponsors%2FSP7466157949-NS9292224283.html
+http://www.linuxdevices.com/news/NS9767106545.html
+http://www.linuxgazette.com/aggregator?from=80
+http://www.linuxgazette.com/issue35/icaza.html
+http://www.linuxgazette.com/issue39/sevenich.html
+http://www.linuxgazette.com/node/10218
+http://www.linuxgazette.com/node/9942
+http://www.linuxinsider.com/perl/board/mboard.pl/tnwtalkback/thread2439/2439.html
+http://www.linuxinsider.com/story/34225.html
+http://www.linuxinsider.com/story/36120.html
+http://www.linuxinsider.com/story/42177.html
+http://www.linuxjournal.com/article.php?sid=6207
+http://www.linuxjournal.com/article/7535
+http://www.linuxjournal.com/comment/reply/3882
+http://www.linuxjournal.com/node/4752/print
+http://www.linuxjournal.com/node/7158/print
+http://www.linuxmafia.com/faq/Linux_PR/linuxone.html
+http://www.linuxmafia.com/faq/Web/opti.html
+http://www.linuxmednews.com/cindys
+http://www.linuxpackages.net/catalog/privacy.php
+http://www.linuxplanet.com/linuxplanet/subjects/629/
+http://www.linuxquestions.org/
+http://www.linuxsecurity.com/content/view/117265/50/
+http://www.linuxsecurity.com/content/view/117589/49/
+http://www.linuxworld.com/read/45683.htm
+http://www.lioncity.net/buddhism/blog/nithska/index.php?cmd=showentry&eid=198
+http://www.lioncity.net/buddhism/index.php?automodule=blog&blogid=43&
+http://www.lioncity.net/buddhism/index.php?showtopic=14628&st=0
+http://www.lioncity.net/buddhism/index.php?showtopic=2164
+http://www.lioncity.net/buddhism/index.php?showtopic=2164&st=0
+http://www.lionelcollectors.org/about/privacy_policy.asp
+http://www.lioness.net/speech.html
+http://www.lionhrtpub.com/orms/orms-8-00/vehiclerouting.html
+http://www.lionpic.co.uk/
+http://www.lions.odu.edu/~knesius/miniunits/epsilon/epsilon9.html
+http://www.lionsroarmandala.org/meditation_and_yoga.php
+http://www.lipid.org/clinical/patients/1000005.php
+http://www.lipmagazine.org/articles/featlydersen_gottleib.shtml
+http://www.lipmagazine.org/articles/featlydersen_gottlieb_p.htm
+http://www.lipmagazine.org/articles/featwise_immigrationexcerpt.shtml
+http://www.lipmagazine.org/articles/featwise_theman.htm
+http://www.liptoncup.co.za/eventhistory.asp
+http://www.liquid-control.net/
+http://www.liquidthinking.org/
+http://www.liquor.qld.gov.au/appeals/cases/sunnybank_hotel.asp
+http://www.lis.uiuc.edu/review/summer1995/spiteri.html
+http://www.lis.uiuc.edu/~b-sloan/r4r.final.htm
+http://www.lisa-raymond.com/ASTR/poole.htm
+http://www.lisa.lsbu.ac.uk/04_services/staff/info_res_and_bb.htm
+http://www.lisaleighphotography.com/weddings/winfo.htm
+http://www.lisamcpherson.org/fairgame.htm
+http://www.lisamcpherson.org/spt2-23.htm?FACTNet
+http://www.lisamurkowski.com/artman/publish/tonyjobs.html
+http://www.lisasgenealogypages.homestead.com/TheHistoryofCharlesDavisLtd.html
+http://www.lisawhiteman.com/
+http://www.lisc.org/resources/capacity_building.shtml?Organizational+Development
+http://www.liscareer.com/craig_cko.htm
+http://www.liscareer.com/lee_interviewing.htm
+http://www.lisleinternational.org/www/restricted/leaderhandbook.htm
+http://www.lisproject.org/dataccess/jobsub.htm
+http://www.lissaexplains.com/forum/archive/index.php/t-60513.html
+http://www.lissaexplains.com/forum/showthread.php?t=70192
+http://www.listen.org/quotations/quotes_humorous.html
+http://www.listener.co.nz/default,2698.sm
+http://www.listening-in.com/grndintr.html
+http://www.lists.pdx.edu/waoe-news/current/0008.html
+http://www.listtool.com/resources.html
+http://www.liswa.wa.gov.au/adultwinners.html
+http://www.lit.ie/researchwebpage/LIT%20RD%20INTRNET/RD%20Strategy.html
+http://www.litcom.net.au/documents/schoolsplanning.php
+http://www.litencyc.com/php/stopics.php?rec=true&UID=1480
+http://www.litencyc.com/php/stopics.php?rec=true&UID=689
+http://www.literacyconnections.com/0_0130984620.html
+http://www.literacyrules.com/Letters%20_%20Charles.htm
+http://www.literacytrust.org.uk/Database/Primary/lithour.html
+http://www.literacytrust.org.uk/Database/able.html
+http://www.literacytrust.org.uk/Database/boys/genderupdate.html
+http://www.literacytrust.org.uk/Database/expel.html
+http://www.literacytrust.org.uk/Database/modernlang.html
+http://www.literacytrust.org.uk/Database/oracy.html
+http://www.literacytrust.org.uk/Database/povertyupdate.html
+http://www.literacytrust.org.uk/Database/univupdate.html
+http://www.literacytrust.org.uk/Pubs/carey.html
+http://www.literacytrust.org.uk/Research/liteval.html
+http://www.literacytrust.org.uk/Research/readchoicereviews.html
+http://www.literacytrust.org.uk/Research/transferreviews.html
+http://www.literacytrust.org.uk/Update/Scotlupdate.html
+http://www.literacytrust.org.uk/talktoyourbaby/campaign.html
+http://www.literacytrust.org.uk/talktoyourbaby/music.html
+http://www.literacytrust.org.uk/talktoyourbaby/talkingtips.html
+http://www.literaryleaps.com/leapaisle.cfm?aislenumber=67&lastfound=101
+http://www.literaryleaps.com/leapaisle.cfm?aislenumber=82
+http://www.literarymama.com/fiction/archives/000672.html
+http://www.literarypotpourri.com/004_06/ss_01.html
+http://www.literarytraveler.com/bram-stokers-dracula/bram-stokers-dracula.htm
+http://www.literateweb.com/wyss/wyss11.htm
+http://www.literature.org/authors/barrie-james-matthew/the-adventures-of-peter-pan/chapter-06.html
+http://www.literature.org/authors/burroughs-edgar-rice/the-gods-of-mars/chapter-21.html
+http://www.literature.org/authors/dickens-charles/chimes/chapter-02.html
+http://www.literature.org/authors/montgomery-lucy-maud/anne-of-green-gables/chapter-05.html
+http://www.literature.org/authors/stoker-bram/lair/chapter-03.html
+http://www.literaturepage.com/read/warandpeace-1001.html
+http://www.litestructures.co.uk/news/syndicate.htm
+http://www.litfood-fair.com/index.php?lng=lt&content=pages&page_id=68&pg=10&cat_id=&country_id=
+http://www.lithuaniangenealogy.org/databases/il/StGeorge/StGeorge.html?letter=G
+http://www.litnet.co.za/youngwriters/add_michelle_mcgrane2.asp
+http://www.litnet.co.za/youngwriters/stacy_hardy.asp
+http://www.litrg.org.uk/help/pensioners/incomesover/understandingiht.cfm
+http://www.litrg.org.uk/help/pensioners/links.cfm
+http://www.litriocht.com/shop/product_info.php?cPath=39&products_id=2895
+http://www.litrix.com/madraven/madne044.htm
+http://www.littlecolonel.com/Books/Arizona/Chapter08.htm
+http://www.littlecolonel.com/books/arizona/Chapter08.htm
+http://www.littleexplorers.com/subjects/Geologictime.html
+http://www.littleflower.org/learn/littleflower.asp
+http://www.littlefuckingrayofsunshine.com/2002/06/
+http://www.littlegiraffes.com/christmas.html
+http://www.littlegreenfootballs.com/
+http://www.littlegreenfootballs.com/weblog/?entry=10791
+http://www.littlegreenfootballs.com/weblog/?entry=15232&only
+http://www.littlegreenfootballs.com/weblog/?entry=15232&only=yes
+http://www.littlegreenfootballs.com/weblog/?entry=16324_Media_Matters_Issues_Talking_Points
+http://www.littlegreenfootballs.com/weblog/?entry=7208_Roadmap_to_Murderville_Update
+http://www.littlelabs.com/redeye.html
+http://www.littlemachineshop.com/
+http://www.littleredboat.co.uk/
+http://www.littleredboat.co.uk/2004_05.php
+http://www.littletoncollection.com/stanislav_libensky.htm
+http://www.littlewhitedog.com/
+http://www.littoninterconnect.com/main.aspx?mid=hom&bid=Banner%20E&pid=Employment
+http://www.littoralsociety.org/issues.htm
+http://www.liu.edu/cwis/cwp/library/html/text.htm
+http://www.liu.se/en/education/faq/
+http://www.liuna.org/about/resolutions/ResXXIX.html
+http://www.liutilities.com/products/wintaskspro/whitepapers/paper1/
+http://www.liv-n-letliv.net/talbot.html
+http://www.liv.ac.uk/Psychology/DeptInfo/StaffProfile/DDickins.html
+http://www.liv.ac.uk/ophthalmology/ed.htm
+http://www.livablecities.org/Publications_Documentation.htm
+http://www.livablecities.org/TrueUrbanism.htm
+http://www.liveabroad.com/articles/france.html
+http://www.liveabroad.com/articles/ireland.html
+http://www.livebaltimore.com/merch/licplate/
+http://www.livejournal.com/community/_brokenangels/
+http://www.livejournal.com/community/astronomy/
+http://www.livejournal.com/community/childfree/4114926.html
+http://www.livejournal.com/community/dancebeautiful/
+http://www.livejournal.com/community/deleterius/1241525.html
+http://www.livejournal.com/community/deleterius/1241525.html?mode=reply
+http://www.livejournal.com/community/felines/
+http://www.livejournal.com/community/girlfeet/
+http://www.livejournal.com/community/hail_victory/63083.html
+http://www.livejournal.com/community/idol_reflection/20313.html?mode=reply
+http://www.livejournal.com/community/karate_the_band/
+http://www.livejournal.com/community/lj_biz/231617.html?thread=6896577
+http://www.livejournal.com/community/lj_dev/668080.html
+http://www.livejournal.com/community/lj_dev/670215.html?thread=7003399
+http://www.livejournal.com/community/lj_maintenance/102665.html?thread=7730697
+http://www.livejournal.com/community/lj_stylecontest/
+http://www.livejournal.com/community/lj_support/405625.html
+http://www.livejournal.com/community/ljforchoice/
+http://www.livejournal.com/community/ljireland/
+http://www.livejournal.com/community/mock_the_stupid/
+http://www.livejournal.com/community/sgselltrade/2005/05/15/
+http://www.livejournal.com/community/sgselltrade/2005/06/17/
+http://www.livejournal.com/community/sgselltrade/2005/06/19/
+http://www.livejournal.com/community/trance_class/16140.html
+http://www.livejournal.com/community/yoga/349420.html
+http://www.livejournal.com/go.bml?journal=davidlevine&itemid=2743&dir=next
+http://www.livejournal.com/go.bml?journal=ramoth4&itemid=3042&dir=next
+http://www.livejournal.com/support/
+http://www.livejournal.com/support/faqbrowse.bml?faqcat=s2
+http://www.livejournal.com/users/anti_peace_riot/
+http://www.livejournal.com/users/benmurrihy/7838.html
+http://www.livejournal.com/users/blackpepper/
+http://www.livejournal.com/users/bwinter/
+http://www.livejournal.com/users/chiefgnome/
+http://www.livejournal.com/users/ciphergoth/
+http://www.livejournal.com/users/cleolinda/
+http://www.livejournal.com/users/col_ki/27532.html
+http://www.livejournal.com/users/dabigbird/
+http://www.livejournal.com/users/ea_spouse/274.html
+http://www.livejournal.com/users/fledglingoflove/
+http://www.livejournal.com/users/hyuri/
+http://www.livejournal.com/users/imomus/103751.html
+http://www.livejournal.com/users/imomus/2005/06/04/
+http://www.livejournal.com/users/jmhm/1182255.html
+http://www.livejournal.com/users/jmhm/1222951.html
+http://www.livejournal.com/users/jmhm/1246418.html
+http://www.livejournal.com/users/jmhm/1271579.html
+http://www.livejournal.com/users/justgoto/
+http://www.livejournal.com/users/katequicksilvr/82800.html
+http://www.livejournal.com/users/matthardwick/
+http://www.livejournal.com/users/moltag/
+http://www.livejournal.com/users/mypapercrane/
+http://www.livejournal.com/users/news/82926.html
+http://www.livejournal.com/users/outa_controlx/
+http://www.livejournal.com/users/perl_review/
+http://www.livejournal.com/users/pjammer/62029.html?thread=1337933
+http://www.livejournal.com/users/shamu200/
+http://www.livejournal.com/users/stankow/
+http://www.livejournal.com/users/sweetamberlily/
+http://www.livejournal.com/users/telophase/113219.html
+http://www.livejournal.com/users/theferrett/434874.html
+http://www.livejournal.com/users/thomb/67683.html
+http://www.livejournal.com/users/twinkledru/630231.html?mode=reply
+http://www.livejournal.com/~punk_apple/83146.html
+http://www.livejournal.com/~punk_apple/83146.html?mode=reply
+http://www.livejournal.com/~sleeplesslylost/55821.html
+http://www.livelihoods.org/pip/pip/dcimg.html
+http://www.livelihoods.org/post/Mig8-postit.html
+http://www.liver.org.my/medical_hepatitis_a.htm
+http://www.liverpool.gov.uk/Business/Business_and_street_trading_licences/Alcohol_and_Entertainment/Licensing_Act_2003/index.asp
+http://www.liverpoolarms.com/
+http://www.liverpoolcfa.com/development/education.asp
+http://www.liverpoolcollege.org.uk/school_magazine.htm
+http://www.liverpoolmuseums.org.uk/maritime/archive/displayGuide.aspx?sid=23&mode=html&sorStr=&serStr=&pgeInt=&catStr=
+http://www.livescience.com/forcesofnature/041214_tsunami_mega.html
+http://www.livescience.com/forcesofnature/050622_new_madrid.html
+http://www.livescience.com/forcesofnature/disaster_chronology_1980_2004.html
+http://www.livescience.com/technology/050627_warming_solution.html
+http://www.living-lessons.org/about/f.privacy_policy.asp
+http://www.living-well.org/life.html
+http://www.livingassistance.com/features.asp?key=home%20care%20franchise
+http://www.livingbold.net/articles/lb020916a.html
+http://www.livingchoices.com/agent/agentdetail.aspx?refer=lycos&mid=5720&aid=239075406
+http://www.livingchoices.com/agent/agentdetail.aspx?refer=lycos&mid=N410&aid=239075406
+http://www.livingearthherbs.com/
+http://www.livinggracefellowship.org/sermons_2004/010404_carrying_your_cross.htm
+http://www.livingislam.org/n/nsrsf_e.html
+http://www.livingmanicdepressive.com/A_350.html
+http://www.livingroom.org.au/blog/archives/2002_12.php
+http://www.livingroom.org.au/blog/archives/introducing_the_offering_machine.php
+http://www.livingroom.org.au/blog/archives/questioning_church.php
+http://www.livingrosaries.org/centeringprayer.htm
+http://www.livingstreets.org.uk/file.php?fileid=126
+http://www.livingstreets.org.uk/page.php?pageid=116
+http://www.livingstreets.org.uk/page.php?pageid=116&print=1
+http://www.livingthesolution.com/beherenow.htm
+http://www.livingthesolution.com/holdingupamirror.htm
+http://www.livingthesolution.com/turningpoint.htm
+http://www.livingthruloss.bc.ca/walking.htm
+http://www.livingvalues.net/impact/kenya.html
+http://www.livingvalues.net/kenya/
+http://www.livingyourgift.com/workshops-sacred.html
+http://www.lizasoe.blogspot.com/
+http://www.lizcarlyle.com/New_Page_Folder/books/gent.htm
+http://www.lizmichael.com/columbin.htm
+http://www.ljdrama.org/index.php?p=953
+http://www.ljlseminars.com/
+http://www.ljlseminars.com/phone.htm
+http://www.ljworld.com/section/citynews/story/183902
+http://www.ljworld.com/section/incoldblood/story/201169
+http://www.ljworld.com/section/localpolitics/story/46294
+http://www.ljworld.com/section/recsports/story/194883
+http://www.ljworld.com/section/ross/story/196583
+http://www.llanelliafc.co.uk/prog_miscellaneous_articles.htm
+http://www.llc.manchester.ac.uk/Research/Centres/CentreforLatinAmericanCulturalStudies/News/
+http://www.llewellynsecurity.com/encyclopedia/bookmain.htm
+http://www.llewellynsecurity.com/noframes/nfbook.htm
+http://www.lleytonhewitt.biz/ao05art.htm
+http://www.lleytonhewitt.biz/daviscup/rd104day3art.htm
+http://www.lllusa.org/lllusa/calendar.html
+http://www.llnl.gov/es_and_h/hsm/doc_15.02/doc15-02.html
+http://www.lloydstsb.com/internet_banking.asp
+http://www.llr.state.sc.us/POL/Accountancy/index.asp?file=CPAREQ.HTM
+http://www.llr.state.sc.us/scfireac/ifsac1.htm
+http://www.llrc.org/du/subtopic/durs.htm
+http://www.llrx.com/columns/grammar4.htm
+http://www.llrx.com/columns/guide13.htm
+http://www.llrx.com/columns/guide29.htm
+http://www.llrx.com/columns/marketing4.htm
+http://www.llrx.com/columns/notes31.htm
+http://www.llrx.com/columns/notes43.htm
+http://www.llrx.com/columns/notes46.htm
+http://www.llrx.com/features/km2.htm
+http://www.llrx.com/features/verifying.htm
+http://www.lls.lt/engl_program1996.html
+http://www.llsdc.org/sourcebook/sch-v.htm
+http://www.llu.com/
+http://www.llu.edu/llumc/ceu/registrationinfo.html
+http://www.lmcc.net/EventsandExhibitions/Public_Art/freedom/freedom_schedule.html
+http://www.lmh.org/iqhealth/
+http://www.lmitnet.com/CIO-SP2/task.cfm
+http://www.lmu.ac.uk/the_news/apr05/rugby_womensru_matchreport.htm
+http://www.lmu.ac.uk/visiting/apply_art.htm
+http://www.lmu.livjm.ac.uk/gonw/template.aspx?itemid=839
+http://www.lmusu.org.uk/AdvTopic.asp?tid=5
+http://www.lni.wa.gov/WISHA/Rules/corerules/HelpfulTools/HT4_AdditionalProgramRequirementsTable.htm
+http://www.lni.wa.gov/news/2004/pr041214a.asp
+http://www.lnt.org/about/history.html
+http://www.loanofficersuccess.com/
+http://www.loantownusa.com/mortgage/
+http://www.lobsterconservation.com/surfclam/
+http://www.loc.gov/catdir/pcc/sca/agdatatgfinal.html
+http://www.loc.gov/exhibits/declara/ruffdrft.html
+http://www.loc.gov/film/donate.html
+http://www.loc.gov/film/implemen.html
+http://www.loc.gov/film/plan.html
+http://www.loc.gov/flicc/edintro.html
+http://www.loc.gov/folklife/selectlst/selrec90.html
+http://www.loc.gov/law/public/asl/htdoc/asl004.html
+http://www.loc.gov/loc/legacy/bldgs.html
+http://www.loc.gov/marc/languages/langhome.html
+http://www.loc.gov/marc/marbi/2001/2001-dp05.html
+http://www.loc.gov/marc/marbi/2005/2005-dp01.html
+http://www.loc.gov/nls/newsletters/flash/2005/number4.html
+http://www.loc.gov/nls/technical/dtb20steps.html
+http://www.loc.gov/nls/z3986/background/features.htm
+http://www.loc.gov/rr/mopic/copies.html
+http://www.loc.gov/today/pr/2003/03-106.html
+http://www.local.dtlr.gov.uk/review/consult/addexemp.htm
+http://www.local10.com/health/1920078/detail.html
+http://www.local1000.com/canadian_pension/plan.php
+http://www.local1259iaff.org/disaster.html
+http://www.local2452afge.com/
+http://www.local6.com/news/3879408/detail.html
+http://www.localhikes.com/Hikes/SanAntonioHCVHPWlk_7240.asp
+http://www.localhistories.org/eastleigh.html
+http://www.localhistories.org/irehist.html
+http://www.localhistories.org/york.html
+http://www.localhistory.scit.wlv.ac.uk/articles/Railway%20Gazette/Edition2.htm
+http://www.localinnovation.org/headlines/byWeek.html?yearWeek=200511&storyType=Headlines
+http://www.localizationworld.com/LWSF2004/aboutUs.htm
+http://www.localizationworld.com/aboutUs.htm
+http://www.localrecruit.co.uk/Bolton/
+http://www.localrecruit.co.uk/dudley/
+http://www.locateadoc.com/articles.cfm/search/1294
+http://www.locationscout.com/locservices/comments.html
+http://www.lockergnome.com/
+http://www.lockhartsteele.com/blog/archives/2003_10.shtml
+http://www.lockheedmartin.co.uk/news/232.html
+http://www.lockwood.k12.mt.us/counsel/dwight/dwightwar.htm
+http://www.locoloboevents.com/cgi-bin/locolobo/specialize.pl?111
+http://www.locusmag.com/index/b131.html
+http://www.locusmag.com/index/s392.html
+http://www.locusmag.com/index/s611.html
+http://www.locustvalley.com/japanese%20stroll%20garden.html
+http://www.locustworld.com/
+http://www.loe.org/shows/shows.htm?programID=03-P13-00017
+http://www.loe.org/shows/shows.htm?programID=05-P13-00022
+http://www.loe.org/shows/shows.htm?programID=94-P13-00043
+http://www.loe.org/shows/shows.htm?programID=95-P13-00017
+http://www.loe.org/stonyfield/instructions.htm
+http://www.loep.state.la.us/factsheets/Deceptivewinterstorms.htm
+http://www.lofcom.com/nostalgia/shows/ilam/trucktapes.phtml
+http://www.loft.org/classbcnf.html
+http://www.logan.com/afi/spencer3.html
+http://www.logantele.com/~aubhis/locprop.htm
+http://www.logexpo.com/r5/showkiosk.asp?listing_id=420998
+http://www.loghelp.com/logcore/04/winter/winter_trades.html
+http://www.logicept.com/wtc/
+http://www.logicsouth.com/~lcoble/bible/movin.html
+http://www.logicsouth.com/~lcoble/bible/sign-aa.html
+http://www.logicsouth.com/~lcoble/dir9/prepared.htm
+http://www.logobob.com/logo-design-clients.htm
+http://www.logoi.com/links/health/exercise_diet.html
+http://www.logoi.com/links/tattoo/tattoo_parlors.html
+http://www.logos-net.net/ilo/150_base/en/init/can_1.htm
+http://www.logos-net.net/ilo/150_base/en/topic_i/t7_ilo.htm
+http://www.logoworks.com/logo-design/3-logo-design.html
+http://www.loismurphy.org/pr-release_08oct04.php
+http://www.lolapress.org/artenglish/garre11.htm
+http://www.lolapress.org/artenglish/thuee15.htm
+http://www.lompocrecord.com/articles/2005/01/30/news/news20.txt
+http://www.london-eating.co.uk/129.htm
+http://www.london-eating.co.uk/1752.htm
+http://www.london-eating.co.uk/341.htm
+http://www.london-eating.co.uk/69.htm
+http://www.london.anglican.org/Marriages
+http://www.london.gov.uk/gla/disabled_access.jsp
+http://www.london.gov.uk/mayors_daily_issue_archive.jsp
+http://www.londoncigcard.co.uk/cards.html
+http://www.londonexternal.ac.uk/current_students/vle_resources/faqs.shtml
+http://www.londonexternal.ac.uk/undergraduate/lse/units/100.shtml
+http://www.londonjobs.co.uk/help/advanced_search.html
+http://www.londonlantern.com/articles/default.asp?snID=&cssType=0&Issue=200501&ID=543
+http://www.londonlantern.com/default.asp?snID=&cssType=0&Issue=200501&Area=0&TRCday=0
+http://www.londonmet.ac.uk/admin/assessment-north/
+http://www.londonmet.ac.uk/admin/graduation-and-conferments/graduation-and-conferments_home.cfm
+http://www.londonmet.ac.uk/module-catalogue/1/mm/mm1011.cfm
+http://www.londonmet.ac.uk/services/sas/departmental-development/development/how-to-apply-for-training.cfm
+http://www.londonmet.ac.uk/ug-prospectus-2005/courses/internet-applications-development.cfm
+http://www.londonmet.ac.uk/ugprospectus/courses/internet-applications-development.cfm
+http://www.londonplay.org.uk/listings.htm
+http://www.londonscottish.com/reports_3rd%20XV.html
+http://www.londonshakespeare.org.uk/Othello2/pvm.htm
+http://www.londontown.com/LondonInformation/Alexa/Hoxton_Boutique/ac5c/
+http://www.londontown.com/LondonInformation/Attraction/Contemporary_Applied_Arts/f59a/
+http://www.londontown.com/LondonInformation/Attraction/Hoxton_Hall/459c/
+http://www.londontown.com/LondonInformation/Attraction/Hoxton_Street_Market/a1a1/
+http://www.londontown.com/LondonInformation/Attraction/St_James_Church/7445/
+http://www.londontown.com/LondonInformation/Bars_and_Clubs/Home/6196/
+http://www.londontown.com/LondonInformation/Bars_and_Clubs/Reliance/4d68/
+http://www.londontown.com/LondonInformation/Bars_and_Clubs/The_Red_Lion/a26d/
+http://www.londontown.com/LondonInformation/Entertainment/Robert_Sandelson_Gallery/890b/
+http://www.londontown.com/LondonInformation/Shops/Contemporary_Applied_Arts/1e92/
+http://www.londontown.com/LondonInformation/Shops/Deepak_Cash__Carry/e293/
+http://www.londontown.com/LondonInformation/Underground_Stations/East_Putney/1ef5/
+http://www.londontown.com/LondonStreets/old_street_173.html
+http://www.londontown.com/londonmaps/index.php?ID=20739&IV_Type=TotalLondon&IV_RunByMethod=VBGC&IV_GeoHorizontal=
+http://www.londontown.com/londonmaps/index.php?ID=21912&IV_Type=TotalLondon&IV_RunByMethod=VBGC&IV_GeoHorizontal=
+http://www.londonvicaragehotel.com/pages/culture.html
+http://www.lonefathers.com.au/octnov01/page23.html
+http://www.lonelyplanet.com/destinations/europe/france/printable.htm
+http://www.lonelyplanet.com/destinations/europe/scotland/printable.htm
+http://www.lonelyplanet.com/destinations/europe/scottish_highlands_and_islands/printable.htm
+http://www.lonelyplanet.com/destinations/europe/york/
+http://www.lonelyplanet.com/destinations/europe/york/history.htm
+http://www.lonelyplanet.com/destinations/indian_subcontinent/pakistan/attractions.htm
+http://www.lonelyplanet.com/destinations/south_america/caracas/history.htm
+http://www.lonesentry.com/articles/officercorps/
+http://www.lonesentry.com/battleoftheomars/section1.html
+http://www.lonesentry.com/tacticalstudy/
+http://www.longdarkteatime.com/
+http://www.longhornblogs.com/rdawson/archive/2005/05/23/14104.aspx
+http://www.longislandassociation.org/member_benefits.cfm
+http://www.longislandpress.com/?cp=154&show=article&a_id=4036
+http://www.longlake.ca/news/sep21a_04.asp
+http://www.longpauses.com/blog/2003_01_01_longpauses_archive.html
+http://www.longstoryshortpier.com/vaults/2004/03/18/three_simple_rules_for_talking_about_comics
+http://www.longtermrental.co.uk/short-term-contract-hire.asp
+http://www.longwood.edu/longwood/Winter02/coverstory.html
+http://www.longyangclub.org/newsite/personals/personals_apr05.htm
+http://www.lookingforlewiscarroll.com/lovepoetry2.html
+http://www.lookingforlewiscarroll.com/seriouspoetry.html
+http://www.lookingland.com/board/
+http://www.lookingland.com/board/forumdisplay.php?s=&forumid=3
+http://www.lookinguntojesus.net/ata20030817.htm
+http://www.loomisflute.com/forum.htm
+http://www.loonygames.com/content/1.29/mouth/
+http://www.loopers-delight.com/loopography/Records.html
+http://www.loopfilmworks.com/film/projects/cinemania/
+http://www.looselycoupled.com/stories/2003/closer-soa-ca1229.html
+http://www.loosetooth.com/Art/artwork.php3
+http://www.lootedart.com/
+http://www.lopezbooks.com/articles/first.html
+http://www.loraincountyunitedway.com/faqs/
+http://www.lordofthebeans.com/wordpress/
+http://www.lordofthebeans.com/wordpress/?cat=1
+http://www.lordofthebeans.com/wordpress/?m=200506
+http://www.lordofthebeans.com/wordpress/?p=6
+http://www.lordsofpain.net/news/2005/articles/1117699011.php
+http://www.lorealusa.com/Career/career_grad.aspx
+http://www.lorenbennett.org/children.htm
+http://www.lorenwebster.net/In_a_Dark_Time/
+http://www.lorenwebster.net/In_a_Dark_Time/category/haiku-and-beyond/
+http://www.losangelesmission.com/ed/articles/2000/1100rk.htm
+http://www.losingblueprint.com/lbppress.html
+http://www.lostadmiralreturns.com/manual/mission1.html
+http://www.losthorizons.com/Cracking_the_Code.htm
+http://www.lostrivers.ca/points/bofuc.htm
+http://www.losttrails.com/pages/Tales/Inquiries/Herodotus_36.html
+http://www.losttrails.com/pages/Tales/Inquiries/Herodotus_4.html
+http://www.losttreasure.com/fieldtests/LT950940.cfm
+http://www.lothingland.page.co.uk/ashbysun.htm
+http://www.lothingland.page.co.uk/hso7.htm
+http://www.lotterypost.com/news-97823.htm
+http://www.lotteryusa.com/lottery/FAQs.html
+http://www.lotuscarclub.org/
+http://www.lotusespritworld.co.uk/Sale/parts.html
+http://www.loudside.com/bands/?bandID=191
+http://www.loudtechinc.com/news/2005/03072005_slm.html
+http://www.loudthinking.com/arc/000333.html
+http://www.loudthinking.com/arc/2005_01.html
+http://www.loudwire.net/users/metzger/
+http://www.lougheedhouse.com/history.php
+http://www.louisbeam.com/leaderless.htm
+http://www.louiseferguson.com/cityofbits.htm
+http://www.louisiana.edu/Advancement/PRNS/news/2005/195.shtml
+http://www.louisianafolklife.org/LFP/main_defining_terms.html
+http://www.louislamourslosttreasures.com/Lost_Treasures/killkennywhetstone_2.htm
+http://www.louissachar.com/Bio.htm
+http://www.louisville.com/loumag/mar/bacon.htm
+http://www.louisville.edu/president/boards/trustees/minutes/2001/092401.html
+http://www.louisvilledoctor.com/rights.htm
+http://www.louisvillemojo.com/huckster/index.cfm?cat=music%20%26%20musicians%3A%20wanted
+http://www.louisvillepeace.org/CAPA/news.html
+http://www.louisvilleveneer.com/veneerglossary.htm
+http://www.louisxiv.demon.co.uk/standrewscc/1999/9906minute.html
+http://www.loutitlibrary.org/early%20resident%20a-h.htm
+http://www.loveandlearning.com/
+http://www.loveathome.com/
+http://www.lovefilm.com/actor.php?at_id=570
+http://www.loveforalifetime.com/asksharon.php
+http://www.lovegevity.com/parenting/parentingadvice/casual_remarks.html
+http://www.lovelife.org.za/corporate/media_programmes/outdoor.html
+http://www.loveme.com/tour/cartagena/
+http://www.lovemusiclovedance.com/bill_williams_trading_chaos.htm
+http://www.loveofscotland.com/citywalk.html
+http://www.loveshack.org/forums/newreply.php?s=&action=newreply&postid=386724
+http://www.loveshack.org/forums/showthread.php?postid=395244
+http://www.loveshack.org/forums/t55090/
+http://www.loveshack.org/forums/t55860/
+http://www.loveshack.org/forums/t55860/?goto=lastpost
+http://www.loveshack.org/forums/t55868/
+http://www.loveshack.org/forums/t55868/?goto=lastpost
+http://www.lovesicily.com/blog/index.php?m=200410
+http://www.lovetactics.com/ask/category.html?id=Commitment
+http://www.lovetheoutdoors.com/camping/Safety.htm
+http://www.lovingyou.com/content/romance/content.shtml?ART=loveletterideas
+http://www.low-carb.com/whyhasmylowc.html
+http://www.lowaprcredit.com/
+http://www.lowcarbcafe.com/FAQ's.htm
+http://www.lowculture.com/archives/2003/09/
+http://www.lowculture.com/archives/2004/09/
+http://www.lowculture.com/archives/2005/01/pyramid_scheme.html
+http://www.lowculture.com/archives/2005/02/rummy_mr_nice_g.html
+http://www.lowculture.com/archives/2005/03/
+http://www.lowculture.com/archives/2005/03/the_murderer_ha_1.html
+http://www.lowculture.com/archives/2005/04/coming_soon_the_2.html
+http://www.lowefamily.org/interviews/sep00.html
+http://www.lowenstein.com/new/54.html
+http://www.lowensteyn.com/iroquois/
+http://www.lowerbuckshospital.org/privacy.html
+http://www.lowerhalstow.org.uk/war/ww1/diddums.asp
+http://www.lowermanhattan.info/health/question_week/q__how_many_77456.asp
+http://www.lowermanhattan.info/health/question_week/what_is_the_status_62885.asp
+http://www.lowermanhattan.info/health/question_week/what_s_happening_with_77703.asp
+http://www.lowermanhattan.info/news/hanukah_celebrations___49251.asp
+http://www.lowes.com/lkn?action=howTo&p=HomeDecor/RefnWdFurn&topic=howToLibrary
+http://www.lowes.com/lkn?action=pg&p=/Energy/conserv_vapfusret.html
+http://www.lowpay.gov.uk/lowpay/research/research2_05.shtml
+http://www.lowridermagazine.com/features/0112lrm_historybook/
+http://www.lowtax.net/lowtax/html/jswoltr.html
+http://www.lowtax.net/lowtax/html/stkitts_nevis/jnvcfir.html
+http://www.lp.org/campaigns/lpa/1996/lpa-2-staff.html
+http://www.lp.org/issues/foreign-policy.html
+http://www.lp.org/lpn/9409-talking.html
+http://www.lpb.org/programs/heroes/1998.html
+http://www.lpch.org/DiseaseHealthInfo/HealthLibrary/digest/diaphrag.html
+http://www.lpch.org/DiseaseHealthInfo/HealthLibrary/hematology/donate.html
+http://www.lpch.org/DiseaseHealthInfo/HealthLibrary/safety/mvshrsk.html
+http://www.lpch.org/NewsFeatures/cffWebcast.html
+http://www.lpdallas.org/features/draheim/dr980527.htm
+http://www.lpj.org/Nonviolence/Raed/eng-article/Opinoin/Christians.html
+http://www.lpj.org/schools.html
+http://www.lpl.arizona.edu/~showman/research.html
+http://www.lpn.org/content/privacy/privacy.cfm
+http://www.lpnm.org/forum/0232.html
+http://www.lq.ca/issues/fall2001/articles/article07.html
+http://www.lrainc.com/swtaboo/stalkers/ml_ggs.html
+http://www.lrb.bc.ca/
+http://www.lrb.bc.ca/forms/
+http://www.lrb.bc.ca/rules/rules2.htm
+http://www.lrb.co.uk/classified/index.php
+http://www.lrb.co.uk/v21/n04/clar03_.html
+http://www.lrb.co.uk/v21/n04/print/clar03_.html
+http://www.lrb.co.uk/v21/n19/fodo01_.html
+http://www.lrb.co.uk/v21/n24/john01_.html
+http://www.lrb.co.uk/v21/n24/print/john01_.html
+http://www.lrb.co.uk/v22/n04/letters.html
+http://www.lrb.co.uk/v22/n08/enri01_.html
+http://www.lrb.co.uk/v22/n11/hami01_.html
+http://www.lrb.co.uk/v22/n14/mcki01_.html
+http://www.lrb.co.uk/v22/n16/letters.html
+http://www.lrb.co.uk/v23/n10/beck02_.html
+http://www.lrb.co.uk/v23/n10/print/beck02_.html
+http://www.lrb.co.uk/v23/n11/print/lutt01_.html
+http://www.lrb.co.uk/v23/n13/mcki01_.html
+http://www.lrb.co.uk/v23/n19/camp01_.html
+http://www.lrb.co.uk/v23/n19/print/camp01_.html
+http://www.lrb.co.uk/v23/n24/jone01_.html
+http://www.lrb.co.uk/v23/n24/print/jone01_.html
+http://www.lrb.co.uk/v25/n05/ande01_.html
+http://www.lrb.co.uk/v25/n18/jone01_.html
+http://www.lrb.co.uk/v26/n08/farm01_.html
+http://www.lrb.co.uk/v26/n17/ande01_.html
+http://www.lrb.co.uk/v26/n17/zize01_.html
+http://www.lrb.co.uk/v27/n08/reto01_.html
+http://www.lrb.co.uk/v27/n11/print/runc01_.html
+http://www.lrb.co.uk/v27/n11/runc01_.html
+http://www.lrc.ie/viewdoc.asp?DocID=142&m=u
+http://www.lrc.ie/viewdoc.asp?DocID=433&m=f
+http://www.lrc.ie/viewprint.asp?DocID=433&m=f
+http://www.lrc.state.ky.us/KRS/344-00/CHAPTER.HTM
+http://www.lre.usace.army.mil/_kd/go.cfm?destination=ShowItem&Item_ID=2819
+http://www.lrf.org.zm/Newsletter/december2001/lrf.news.chadiza.htm
+http://www.lrf.org.zm/pixstory.html
+http://www.lrfbc.org/ministries/friends/
+http://www.lrpeaceandjustice.org/new_page_1.htm
+http://www.lrwonline.com/about/special/newprods.htm
+http://www.lrz-muenchen.de/~hr/lang/dt-hist.html
+http://www.lsa.umich.edu/history/ug/colloquia.asp
+http://www.lsa.umich.edu/saa/firstyear/courseguide/archive/04winter/379.html?w04
+http://www.lsa.umich.edu/saa/publications/RE_lists/R&E.F01.html
+http://www.lsa.umich.edu/saa/publications/courseguide/winter/archive/Winter89.cg/CAAS.w89.html
+http://www.lsadc.org/faq/index.php?aaa=bilingchildfaq.htm
+http://www.lsadc.org/faq/index.php?aaa=endangered.htm
+http://www.lsadc.org/faq/index.php?aaa=faqengl.htm
+http://www.lsadc.org/faq/index.php?aaa=faqthink.htm
+http://www.lsadc.org/faq/index.php?aaa=howmany.htm
+http://www.lsb.lilly.com.sg/careers/job_opportunities/
+http://www.lsb.state.ok.us/house/mediahme.htm
+http://www.lsbu.ac.uk/esbe/about/depapp.shtml
+http://www.lsbu.ac.uk/esbe/about/depeng.shtml
+http://www.lsbu.ac.uk/families/jrfsibresources.shtml
+http://www.lsbu.ac.uk/internat/coursefees.htm
+http://www.lsbu.ac.uk/lrc/rules.html
+http://www.lsbu.ac.uk/sas/news.html
+http://www.lsc.gov.uk/NR/exeres/DAE09273-4535-4995-AA1B-8290D95CF593.htm
+http://www.lsc.org/school_resources/cardiac_classroom/cardiac_activities.html
+http://www.lse.ac.uk/Depts/language/InsessionalSupport.htm
+http://www.lse.ac.uk/Depts/language/englishfaqs.htm
+http://www.lse.ac.uk/Depts/language/termsandconditions.htm
+http://www.lse.ac.uk/clubs/hayek/Ama-gi/Volume1/number2/what_is_liberalism.htm
+http://www.lse.ac.uk/collections/IBSS/support/trainingCourses.htm
+http://www.lse.ac.uk/collections/LSEPublicLecturesAndEvents/events/2005/20050531t1459z001.htm
+http://www.lse.ac.uk/collections/asiaResearchCentre/events.htm
+http://www.lse.ac.uk/collections/enterpriseLSE/associatesAffiliates.htm
+http://www.lse.ac.uk/collections/generalCourse/FAQs.htm
+http://www.lse.ac.uk/collections/globalDimensions/research/vcable.htm
+http://www.lse.ac.uk/collections/pressAndInformationOffice/newsAndEvents/archives/2005/LSE_SuttonTrust_report.htm
+http://www.lse.ac.uk/collections/pressAndInformationOffice/staffStudentsAndAlumni/newsandviews/07-05-2002.htm
+http://www.lse.ac.uk/collections/pressAndInformationOffice/staffStudentsAndAlumni/newsandviews/28-10-2002.htm
+http://www.lse.ac.uk/collections/studentRecruitment/links.htm
+http://www.lse.ac.uk/resources/graduateProspectus2005/departmentsInstitutesCentres/departmentOfGovernment.htm
+http://www.lse.ac.uk/resources/graduateProspectus2005/departmentsInstitutesCentres/departmentOfInternationalRelations.htm
+http://www.lse.ac.uk/resources/schoolRegulations/health.htm
+http://www.lse.co.uk/ShareInformation.asp?SharePrice=GON&AddToWatch=y
+http://www.lse.co.uk/ShowStory.asp?story=AY1614107S&news_headline=wall_collapses_at_new_arsenal_stadium_site_
+http://www.lse.co.uk/uknews.asp?story=AY1614107S&news_headline=wall_collapses_at_new_arsenal_stadium_site_
+http://www.lse.com.au/bcast.htm
+http://www.lseinc.com/news/p0845/
+http://www.lsemod.com/whybuy/about.html
+http://www.lsoft.com/customers/lm_net.asp
+http://www.lsschools.k12.ca.us/lakeside/7thgradestandards.asp
+http://www.lsst.org/Science/NEOsurvey.html
+http://www.lsu.edu/deafness/recent.htm
+http://www.lsu.edu/lsutoday/010420/pageone.html
+http://www.lsuagcenter.com/news/November2003/NewsUse/PlanHolidaySpending.asp
+http://www.lsualumni.org/
+http://www.lsuc.on.ca/regulation/a/discipline/july02/
+http://www.lsureveille.com/vnews/display.v/ART/2005/02/02/4200853523f26
+http://www.lt-smash.us/
+http://www.lt-smash.us/archives/002759.html
+http://www.ltcconsultants.com/consumer/partnership/index.shtml
+http://www.ltcshelton.com/result.php?Keywords=leads&host=www.ltcshelton.com&relay=1&original=leads+ltc
+http://www.ltcshelton.com/result.php?Keywords=leads+you&host=www.ltcshelton.com&relay=1&original=insurance+leads
+http://www.ltembassyus.org/Speeches/Wyoming11202003.html
+http://www.ltsc.ucsb.edu/urca/calendar.php
+http://www.ltscotland.org.uk/faq_scottish_education.asp
+http://www.ltu.mmu.ac.uk/ltia/
+http://www.luag.org/pages/viewfull.cfm?ElementID=150
+http://www.luannudell.com/blog/2003/03/07.html
+http://www.lubbockartscenter.org/film.html
+http://www.lubipumps.com/closed_coupled_monoblock_pumps_1450.html
+http://www.lucasgroup.com/candidates/careercommunity/get_wsjarticle.cfm?ID=244
+http://www.lucasgroup.com/candidates/careercommunity/get_wsjarticle.cfm?ID=42
+http://www.luccioleonline.org/documentazione/conference.htm
+http://www.luceatlux.com/psb/remnantsreviews.html
+http://www.lucianne.com/
+http://www.lucidcafe.com/library/96jan/bessemer.html
+http://www.lucire.com/2005a/0606ll1.shtml
+http://www.luckymojo.com/mojo.html
+http://www.luckymojo.com/peacefulhome.html
+http://www.luckymojo.com/redbeans.html
+http://www.luckymojo.com/tkbiologicalbasis.html
+http://www.luckymojo.com/tkintersex.html
+http://www.luckyworld.co.uk/index.php?p=19
+http://www.ludd.net/retort/msg00116.html
+http://www.ludonauts.com/index.php/2004/06/15/girls_as_game_designers_what_choices_do
+http://www.ludonauts.com/index.php/2004/12/28/p99
+http://www.ludonauts.com/index.php/2005/02/14/p204
+http://www.lufkinisd.org/concode.html
+http://www.luggerhotel.co.uk/outdoors.html
+http://www.lugjam.co.uk/
+http://www.luhs.org/depts/injprev/Breakpnt/bp-v3-11.htm
+http://www.lulu.com/forums/viewtopic.php?t=12218
+http://www.lulu.com/forums/viewtopic.php?t=8261
+http://www.lumc.edu/rmch/child/Mileston.htm
+http://www.luminar.co.uk/cgi/page-view.cgi?pagename=terms&type=live
+http://www.luminet.net/~tgort/gwb092001.htm
+http://www.luminet.net/~wenonah/new/hsense.htm
+http://www.luminous-landscape.com/reviews/mf-backs.shtml
+http://www.luminous-landscape.com/tutorials/dq.shtml
+http://www.luminous-landscape.com/tutorials/understanding-series/lens-contrast.shtml
+http://www.lumpen.com/magazine/81/critical_art_ensemble.shtml
+http://www.lums.lancs.ac.uk/files/marketing/3401/download/
+http://www.lums.lancs.ac.uk/news/cuttings/
+http://www.lunadust.com/blog2/archives/2001/01/
+http://www.lunar-reclamation.org/papers/rille_paper3.htm
+http://www.lunar-reclamation.org/papers/rille_paper4.htm
+http://www.lunaranomalies.com/rad.htm
+http://www.lunarrock.com/Research.asp?m=4
+http://www.lundytruth.co.nz/whats_your_verdict_commentary.html
+http://www.lungusa.org/site/apps/s/link.asp?c=dvLUK9O0E&b=203680
+http://www.lungusa.org/site/pp.asp?c=dvLUK9O0E&b=22598
+http://www.lungusa.org/site/pp.asp?c=dvLUK9O0E&b=39310
+http://www.lungusa.org/site/pp.asp?c=dvLUK9O0E&b=42546
+http://www.lupin.com/
+http://www.lupinworks.com/article/learn.html
+http://www.lupus.org/education/faq.html
+http://www.luquette.org/inspire/christmas/1_corinthians_13_for_christmas.htm
+http://www.lustbook.com/hers/free/730.shtml
+http://www.lustbook.com/hers/read_online/pre_sex_issues.asp
+http://www.lusternia.com/planes.php?inc=prime
+http://www.luther.edu/about/jensjensen.html
+http://www.lutheranhour.org/stories/tragicirony.htm
+http://www.lutheranwomantoday.org/bible/session1fall05-06.html
+http://www.lutheranworld.org/What_We_Do/Dts/Programs/DTS-Theology-Church.html
+http://www.lutins.org/nasa.html
+http://www.luton.ac.uk/alumni/wherenow/i-r/maura-mcdonagh
+http://www.luton.gov.uk/internet/business/trading_standards/Advice%20to%20business
+http://www.luton.gov.uk/internet/transport_and_streets/engineering%20&%20transportation/Road%20adoption
+http://www.luuonline.com/advice/crime.html
+http://www.luxverbi.org.uk/arch/secrets_behind_theveil_introduction.htm
+http://www.lvalpacas.com/shearing.htm
+http://www.lvcitylife.com/local_news/shrapnel/
+http://www.lvlife.com/2000/01/features/story05.html
+http://www.lvlife.com/2000/07/features/story02.html
+http://www.lvlife.com/2000/11/features/story01.html
+http://www.lvmh.com/lvmhetvous/pg_bourses.asp?rub=13
+http://www.lvmh.com/lvmhetvous/pop_conference_asie.asp
+http://www.lvmh.com/magazine/pg_mag_contenu.asp?archive=0&int_id=29&rubrique=FOCUS
+http://www.lwca.org/
+http://www.lwh.org.uk/about_us/facilities.html
+http://www.lwr.org/news/01/021401.asp
+http://www.lwsd.wednet.edu/ms/handbook.html
+http://www.lwtc.ctc.edu/contact/help/
+http://www.lwv.org/elibrary/nv/2002/voter_0902_5.html
+http://www.lww-medicalcare.com/pt/re/medcare/callforpapers.htm
+http://www.lww-medicalcare.com/pt/re/medcare/fulltext.00005650-199607000-00002.htm
+http://www.lww-medicalcare.com/pt/re/medcare/fulltext.00005650-199909000-00006.htm
+http://www.lyd.com/biblioteca/libros/private/school.html
+http://www.lydmar.se/
+http://www.lyingliar.com/
+http://www.lyingmediabastards.com/2004/12/leaving-las-vegas
+http://www.lyingmediabastards.com/2005/01/request-line
+http://www.lyingsocialistweasels.com/responsibility_and_the_right_win.htm
+http://www.lymec.org/
+http://www.lymeregis.com/studio36/timetable/
+http://www.lymphnet.org/2005summit/ptsummit05.html
+http://www.lymphomainfo.net/nhl/diagnosis.html
+http://www.lynchnet.com/
+http://www.lynn.edu/index.php?src=news&submenu=News&prid=1052&category=Mens%20Baseball%20News
+http://www.lynnuniversity.edu/adventure/011004.htm
+http://www.lyonhomes.com/homes/northern-california-homebuilders.php
+http://www.lyrical.nl/song/4871
+http://www.lyrics4all.net/i/imx/imx/hate-the-playa.php
+http://www.lyricscrawler.com/song/2333.html
+http://www.lyricscrawler.com/song/48104.html
+http://www.lyricsdepot.com/ben-folds/losing-lisa.html
+http://www.lyricsdepot.com/dj-clue/exclusive-new-shit.html
+http://www.lyricsdepot.com/missy-elliott/go-to-the-floor.html
+http://www.lyricsdomain.com/22/victoria_beckham/i_wish.html
+http://www.lyricsdomain.com/9/imx/hate_the_playa.html
+http://www.lyricsfreak.com/t/third-eye-blind/136705.html
+http://www.lyricsfreak.com/v/victoria-adams/144295.html
+http://www.lyricshead.com/show_lyrics/george-strait/carrying-your-love-with-me/
+http://www.lyricsstyle.com/i/imx/hatetheplaya.html
+http://www.lyricsxp.com/lyrics/s/stop_listening_tanita_tikaram.html
+http://www.lyriczz.com/lyriczz.php?songid=10048
+http://www.lysanderspooner.org/UnconstitutionalityOfSlavery9.htm
+http://www.lysator.liu.se/c/bwk-tutor.html
+http://www.lysator.liu.se/c/plan9c.html
+http://www.lysator.liu.se/pbm/starcluster/introex1.html
+http://www.lysator.liu.se/~/k13/reuse.html
+http://www.lysator.liu.se/~chief/SID/sid98-28.htm
+http://www.lysator.liu.se/~rasmus/skepticism/dowsing.html
+http://www.lzine.com/1104/firmaf.html
+http://www.m-a.org.uk/making_better_use_of_mathematical_talent/
+http://www.m-a.org.uk/whats_new/beyond_the_numeracy_strategy/
+http://www.m-asa.org/
+http://www.m-cc.nl/purposeful_change_in_seven_steps.htm
+http://www.m-me.com/educational.html
+http://www.m5p.com/~pravn/hp/d-4.html
+http://www.m5p.com/~pravn/hp/g-4.html
+http://www.m5p.com/~pravn/hp/m-2.html
+http://www.m5p.com/~pravn/hp/m-3.html
+http://www.m5p.com/~pravn/hp/m-4.html
+http://www.maa.org/editorial/knot/LiberalArts.html
+http://www.maa.org/editorial/knot/chocolate.html
+http://www.maa.org/pmet/minigrants/progressSJFC.html
+http://www.maa.org/pubs/employ.html
+http://www.maa.org/reviews/brief_apr03.html
+http://www.maagmedical.com/patientcaregivers.asp
+http://www.maandparailroad.com/mapahistory.html
+http://www.mabalawyers.org/eWebPages/Job-Bank.html
+http://www.macaddict.com/forums/post/772583
+http://www.macaddict.com/forums/post/772693
+http://www.macaddict.com/forums/post/772748
+http://www.macaddict.com/forums/topic/51630/3
+http://www.macaddict.com/forums/topic/52675
+http://www.macalester.edu/german/whygerman.html
+http://www.macalester.edu/~envirost/MacEnvReview/reviewconserving.htm
+http://www.macalester.edu/~psych/whathap/UBNRP/aesthetics/therapy.html
+http://www.macattitude.com/9912/digitalprint.shtml
+http://www.macaulay.ac.uk/tarland/whatis.html
+http://www.maccaws.org/kit/way-forward/
+http://www.maccentral.com/
+http://www.macchess.cornell.edu/MacCHESS-2004/equipment.html
+http://www.macchiato.com/unicode/timeIntervals.htm
+http://www.macconnection.com/SiteHelp/ShippingInfo.htm
+http://www.macdevcenter.com/pub/a/mac/2005/06/07/wwdc.html
+http://www.macdisk.com/cdcreaten.php3
+http://www.macedonianhistory.ca/html/events/just_arrived.html
+http://www.macfdn.org/programs/fel/faq.htm
+http://www.macfixit.com/article.php?story=20050616083226250
+http://www.macfound.org/announce/press_releases/7_17_2004.htm
+http://www.macfound.org/announce/press_releases/7_22_2002_2.htm
+http://www.macfound.org/issues/issue_1/story_1.htm
+http://www.machinedesign.com/ASP/viewSelectedArticle.asp?strArticleId=56597&strSite=MDSite&Screen=AUTO&catId=382
+http://www.machinedesign.com/ASP/viewSelectedArticle.asp?strArticleId=58715&strSite=MDSite&Screen=CURRENTISSUE&CatID=3
+http://www.machinevisiononline.org/public/articles/archivedetails.cfm?id=1486
+http://www.machinima.com/article.php?article=164
+http://www.machinima.com/article.php?article=378
+http://www.machovec.com/rope/info.htm
+http://www.machsomwatch.org/docs/monthlyReports/September2004Eng.asp?link=summaries&lang=eng
+http://www.macintouch.com/support08.html
+http://www.macjournals.com/mwj/mwj_samples/piracy_hokum.html
+http://www.mackinac.org/article.asp?ID=6028
+http://www.mackinac.org/depts/ecodevo/article.asp?ID=6628
+http://www.mackinawcity.com/calendar.phtml
+http://www.macleans.ca/switchboard/columnists/donaldcoxe/article.jsp?content=20030915_65347_65347
+http://www.macleans.ca/topstories/business/article.jsp?content=20041220_95189_95189
+http://www.macnewsworld.com/story/31536.html
+http://www.macnewsworld.com/story/33132.html
+http://www.macnewsworld.com/story/34225.html
+http://www.macnewsworld.com/story/34228.html
+http://www.macnewsworld.com/story/36688.html
+http://www.macnewsworld.com/story/38733.html
+http://www.macnewsworld.com/story/39337.html
+http://www.macnewsworld.com/story/42177.html
+http://www.macnewsworld.com/story/42429.html
+http://www.macnewsworld.com/story/43627.html
+http://www.macnewsworld.com/story/pE9NswskNp1zcg/Apple-Hits-the-Intel-Switch.xhtml
+http://www.macnightowl.com/bullish/2003/06/06-02.htm
+http://www.macnightowl.com/newsletters/2004/12/263.htm
+http://www.macnn.com/articles/05/06/08/intel.and.mobile.computing/
+http://www.macobserver.com/article/2001/02/20.10.shtml
+http://www.macobserver.com/article/2004/07/21.6.shtml
+http://www.macobserver.com/article/2004/12/03.1.shtml
+http://www.macobserver.com/article/2005/06/08.8.shtml
+http://www.macobserver.com/article/2005/06/22.4.shtml
+http://www.macobserver.com/columns/frameline/2005/20050224.shtml
+http://www.macobserver.com/tips/hotcocoa/2001/20010817.shtml
+http://www.macon.com/mld/macon/news/world/11857196.htm
+http://www.macon.com/mld/telegraph/news/local/10763487.htm
+http://www.macopinion.com/columns/roadwarrior/02/07/23/
+http://www.macopinion.com/columns/roadwarrior/03/10/21/
+http://www.macopinion.com/columns/tangible/01/07/26/
+http://www.macosx.com/forums/archive/index.php/t-35175.html
+http://www.macosxhints.com/article.php?story=20050302225659382
+http://www.macquarie.com.au/au/corporations/managed_funds/research_resources/resources.htm
+http://www.macrobiotics.co.uk/features/GuinatJanetRice.htm
+http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_15106
+http://www.macromedia.com/cfusion/showcase/index.cfm?event=casestudydetail&casestudyid=1955&loc=en_us
+http://www.macromedia.com/cfusion/showcase/index.cfm?event=casestudydetail&casestudyid=3262&loc=en_us
+http://www.macromedia.com/cfusion/showcase/index.cfm?event=casestudydetail&loc=en_us&casestudyid=2827%20
+http://www.macromedia.com/cfusion/showcase/index.cfm?event=casestudyprint&casestudyid=2827&loc=en_us
+http://www.macromedia.com/cfusion/webforums/forum/messageview.cfm?catid=297&threadid=1003207&enterthread=y
+http://www.macromedia.com/devnet/flex/articles/halo_04.html
+http://www.macromedia.com/devnet/mx/coldfusion/articles/ben_forta_faster.html
+http://www.macromedia.com/devnet/mx/coldfusion/articles/dc_wizard_09.html
+http://www.macromedia.com/devnet/mx/coldfusion/articles/migrating.html
+http://www.macromedia.com/devnet/mx/coldfusion/articles/rsswatch_print.html
+http://www.macromedia.com/devnet/mx/coldfusion/j2ee/articles/cf_mx_overview.html
+http://www.macromedia.com/devnet/mx/director/articles/evolution_director.html
+http://www.macromedia.com/devnet/mx/dreamweaver/articles/dw_templates.html
+http://www.macromedia.com/devnet/mx/dreamweaver/articles/dwmx_vqs_ch11.html
+http://www.macromedia.com/devnet/mx/freehand/articles/site_nav_print.html
+http://www.macromedia.com/devnet/security/articles/sandbox_02_02.html
+http://www.macromedia.com/go/gnavtray_show_sodarchive
+http://www.macromedia.com/macromedia/accessibility/article/director_retrofit/
+http://www.macromedia.com/software/director/productinfo/upgrade/
+http://www.macromedia.com/support/director/releasenotes/8/releasenotes_85.htm
+http://www.macromedia.com/support/director/releasenotes/mx/releasenotes_mx.html
+http://www.macromedia.com/support/dreamweaver/building/master_detail_net/master_detail_net03.html
+http://www.macromedia.com/support/fireworks/programs/using_fw_with_dir/
+http://www.macs.hw.ac.uk/britishisles/
+http://www.macs.hw.ac.uk/~makholm/
+http://www.mactech.com/articles/mactech/Vol.04/04.10/ToolsCompared/
+http://www.macucc.org/central/directions.htm
+http://www.macwhiz.com/articles/art-of-turboing.html
+http://www.macworld.com/
+http://www.macworld.com/2002/02/reviews/office/
+http://www.macworld.com/2003/07/features/putweblogstowork/index.php
+http://www.macworld.com/2005/06/features/intelfaq/index.php
+http://www.macworld.com/news/2005/04/21/powerbookhandson/index.php
+http://www.mad-cow.org/00/dec00_late_news.html
+http://www.mad-cow.org/00/feb01_news_mid.html
+http://www.mad-cow.org/00/jan00_news.html
+http://www.mad-cow.org/00/mar01_news.html
+http://www.mad-cow.org/00/may00_late_news.html
+http://www.mad-cow.org/dec_early_news.html
+http://www.mad-cow.org/lacey.html
+http://www.mad-cow.org/no_sod.html
+http://www.mad-cow.org/~tom/vampire.html
+http://www.madamebonancieux.com/charles_gen.html
+http://www.madanthony.org/blogger/archive/2005_01_02_index.html
+http://www.madcowprod.com/11242004.html
+http://www.madd.org/under21/1,1056,1107_11_20,00.html
+http://www.maddox.xmission.com/c.cgi?u=creeve
+http://www.madhattersimc.org/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=4
+http://www.madison.k12.wi.us/boe/minutes/regular/2003-06-02.htm
+http://www.madmaxmovies.com/flubs/madmax3.html
+http://www.madmonkey.net/page.cgi/flyingsolo0100
+http://www.madpony.com/
+http://www.madre.org/co_iraq_thanksgiving.html
+http://www.madridpost.com/
+http://www.madsci.org/posts/archives/dec2001/1008606727.Ph.r.html
+http://www.madsci.org/posts/archives/jun99/929552614.Ph.r.html
+http://www.maeko.org/blog/
+http://www.maes-natl.org/index.php?module=ContentExpress&func=display&ceid=210
+http://www.maes-natl.org/index.php?module=ContentExpress&func=display&ceid=225
+http://www.maesakharov.com/adultHome.htm
+http://www.maf.govt.nz/mafnet/press/110505fmd3.htm
+http://www.maf.govt.nz/mafnet/rural-nz/people-and-their-issues/access/meeting-notes/meeting-notes-10.htm
+http://www.maf.govt.nz/mafnet/rural-nz/people-and-their-issues/access/meeting-notes/meeting-notes-12.htm
+http://www.maf.govt.nz/mafnet/rural-nz/statistics-and-forecasts/sonzaf/2000/apples.htm
+http://www.mafhoum.com/press/amelect.htm
+http://www.mag.org/
+http://www.mag1instruments.com/cldnts_visit.html
+http://www.magazine.tcu.edu/articles/2004-04-AM.asp
+http://www.magazinesupermart.com/about-us---faq-s-the-truth-about-those-free-trial-offers---.html
+http://www.magdrl-nj.com/sponsors_gtk.html
+http://www.magentastudios.com/
+http://www.maggiesmusic.com/dvdinfo.html
+http://www.maggiesmusic.com/mm218.html
+http://www.magic4you.nu/forum2/viewtopic.php?t=4773
+http://www.magicauction.com/Mag_auc/cards4.htm
+http://www.magichook.com/About_the_Captain.htm
+http://www.magickmirror.com/new_page_4.htm
+http://www.magictimes.com/
+http://www.magictricks.co.uk/prodlist.asp?cat=excl
+http://www.magictricks.co.uk/prodshow.asp?code=258&RevDisp=showall
+http://www.magictricks.co.uk/prodshow.asp?code=88
+http://www.magictrips.com/plan/medical.shtml
+http://www.magma.ca/~scimat/eyesurgery.htm
+http://www.magnatalent.com/magna.htm
+http://www.magnitude.com/main/News/news20030707.htm
+http://www.magnolia.net/~leonf/MyEssays/SpinTech/SoftHard.htm
+http://www.magnoliarestoration.com/investors/default.asp
+http://www.magnumresearch.com/News_print.asp?story=rshooter.asp
+http://www.magnumresearch.com/news_detail.asp?story=rshooter.asp
+http://www.magnuski.org/magnusy.html
+http://www.magportal.com/c/ent/art/
+http://www.magsys.co.uk/telecom/
+http://www.magweb.com/sample/wn002nd.htm
+http://www.magweb.com/sample/wn012nd.htm
+http://www.magweb.com/sample/wn021st.htm
+http://www.magweb.com/sample/wn992nd.htm
+http://www.magwerks.com/Considerations-of-UV.htm
+http://www.mahablog.com/2005.01.23_arch.html
+http://www.mahablog.com/2005.06.05_arch.html
+http://www.maharashtradirectory.com/SearchResult.asp?ProductID=3695
+http://www.maharashtradirectory.com/searchresult.asp?productid=1806
+http://www.maharashtradirectory.com/searchresult.asp?productid=3706
+http://www.mahatmehospital.com/research/pages/woodcutter.htm
+http://www.mahindarama.com/msps/activities-msps.htm
+http://www.mahoganyinn.com.au/aboutus.html
+http://www.mahrecords.com/
+http://www.mail-archive.com/best-forex-signal@yahoogroups.com/msg00006.html
+http://www.mail-archive.com/best-forex-signal@yahoogroups.com/msg00007.html
+http://www.mail-archive.com/do-wire@tc.umn.edu/msg00267.html
+http://www.mail-archive.com/mcb-infoline@lists.berkeley.edu/msg00204.html
+http://www.mail-archive.com/openssl-users@openssl.org/msg39934.html
+http://www.mail-archive.com/skyreport-text@mediabizcorp.com/msg00046.html
+http://www.mail-archive.com/tomcat-dev@jakarta.apache.org/msg72205.html
+http://www.mail-archive.com/tomcat-dev@jakarta.apache.org/msg72207.html
+http://www.mail-archive.com/tomcat-dev@jakarta.apache.org/msg72245.html
+http://www.mail-archive.com/trade-opportunity@yahoogroups.com/msg00540.html
+http://www.mail-archive.com/wsg@webstandardsgroup.org/msg02042.html
+http://www.mailbag.com/users/ragreiner/filterfile.html
+http://www.maildropnet.com/bankacct/5star.htm
+http://www.mailman.hs.columbia.edu/news/dna-damage-study.html
+http://www.mailmsg.com/guest-articles/8-tips-to-help-you-avoid-spam.htm
+http://www.mailonsunday.co.uk/pages/live/articles/health/healthmain.html?in_article_id=255329&in_page_id=1774
+http://www.mailonsunday.co.uk/pages/live/articles/prmts/prmts.html?in_article_id=322074&in_page_id=1777
+http://www.mailonsunday.co.uk/pages/live/articles/prmts/prmts.html?in_article_id=332513&in_page_id=1777
+http://www.main.nc.us/bcsc/Chess_in_Education.htm
+http://www.mainchance.org/bignews/read/april2003/burch.html
+http://www.maine.gov/dmr/rulemaking/july162004.htm
+http://www.maine.gov/sos/cec/rules/notices/041603.htm
+http://www.maine.gov/sos/cec/rules/notices/052699.htm
+http://www.maine.gov/sos/cec/rules/notices/063099.htm
+http://www.maine.gov/sos/cec/rules/notices/103002.htm
+http://www.mainealumni.org/membership/adv_services.htm
+http://www.mainerosesociety.com/rosysurveys.html
+http://www.mainevent.com.au/terms.asp
+http://www.mainlandlaw.com/laborcertification.html
+http://www.mainlandminerals.co.nz/otherproducts.html
+http://www.mainstreampublishing.com/private/forthcoming_titles_general.html
+http://www.mainstreetchillicothemo.com/about.htm
+http://www.mainstreetmom.com/parenting/agree.htm
+http://www.mainstreetmom.com/spirit/worry.htm
+http://www.mainstreetmusic.com/cgi-bin/msmusic/LA0000765290.html
+http://www.mainstreetmusic.com/cgi-bin/msmusic/LA0001494555.html
+http://www.mainstwebdesign.com/link_library/catalog-shopping.htm
+http://www.maintenanceworld.com/reliability-links.htm
+http://www.maisonneuve.org/print_article.php?article_id=411
+http://www.majorcox.com/columns/five-txt.htm
+http://www.majorityreportradio.com/data/op-ed/archives/001226.php
+http://www.majorityreportradio.com/weblog/archives/000055.php
+http://www.majorityreportradio.com/weblog/archives/000056.php
+http://www.majorityreportradio.com/weblog/archives/000066.php
+http://www.majorityreportradio.com/weblog/archives/000084.php
+http://www.majorityreportradio.com/weblog/archives/000435.php
+http://www.majorityreportradio.com/weblog/archives/000625.php
+http://www.majorityreportradio.com/weblog/archives/001049.php
+http://www.majorityreportradio.com/weblog/archives/001146.php
+http://www.majorityreportradio.com/weblog/archives/001151.php
+http://www.majorityreportradio.com/weblog/archives/001269.php
+http://www.majorityreportradio.com/weblog/archives/001317.php
+http://www.majorityreportradio.com/weblog/archives/001394.php
+http://www.majorityreportradio.com/weblog/archives/001554.php
+http://www.majorityreportradio.com/weblog/index.php
+http://www.makai.com/c-makailay.htm
+http://www.make-a-store.com/site/category/gold-c-r_Heavy_Metal_Shopping_Cart_Software_Package_I_Overview
+http://www.make-believe.org/
+http://www.makehits.co.uk/qanda.htm
+http://www.makeithappen.ws/
+http://www.makeitmagic.com/shop/page5.html
+http://www.makemeheal.com/mmh/product/medical_garment.vm
+http://www.makeoutcity.com/Archives/2003/12/25/141600/
+http://www.makepovertyhistory.org/
+http://www.makeworlds.org/node/63
+http://www.makeyougohmm.com/
+http://www.makeyougohmm.com/20050421/1742/
+http://www.makeyouhappy.com/sr_win_module_info.htm
+http://www.makingakilling.org/chapter4.html
+http://www.makinglifeeasier.com/articles/article_journey.php
+http://www.makingmemories.org/html/milestones_-_how_we_accomplish.html
+http://www.makingthemodernworld.org.uk/stories/the_second_industrial_revolution/05.ST.01/?scene=3
+http://www.mala.bc.ca/~johnstoi/arguments/argument2.htm
+http://www.mala.bc.ca/~johnstoi/arguments/argument8.htm
+http://www.mala.ca/policies/policy.asp?rdPolicyNumber=31.10
+http://www.malak.ca/super.html
+http://www.malarcf.org/2004_fall_conf_page.html
+http://www.malariajournal.com/content/4/1/22
+http://www.malcolmbruce.libdems.org.uk/speeches/9.html
+http://www.malcompta.com/legislation.asp
+http://www.maldivesculture.com/news/nss__role_maldives_01.htm
+http://www.maldivesroyalfamily.com/
+http://www.maleface.com/testimonials.htm
+http://www.malehealth.co.uk/userpage1.cfm?item_id=125
+http://www.malehealth.co.uk/userpage1.cfm?item_id=191
+http://www.malehealth.co.uk/userpage1.cfm?item_id=557
+http://www.malehealth.co.uk/userpage1.cfm?item_id=584
+http://www.malet.com/war's%20moral%20poverty%20cannot%20be%20saved%20by%20legality.htm
+http://www.malevolent.com/weblog/archive/2005/05/01/add-google-maps/
+http://www.mallard.co.za/caroline/TTR.htm
+http://www.maltafly.com/modules.php?name=News&file=article&sid=438
+http://www.maltanetworkresources.com/newsgroup/mnr.maltaforum/msg00013.shtml
+http://www.maltedmedia.com/books/papers/s3-ieeet.html
+http://www.malwarwick.com/newsletter/success0304.html
+http://www.mamaloveconnect.com/rkn/member/keys/workshop02.php3
+http://www.mamasbelly.com/testimonials.html
+http://www.mamashealth.com/diets/wmyth.asp
+http://www.mamashealth.com/eat/edrecov.asp
+http://www.mambaonline.co.za/whatson/
+http://www.mambaonline.com/agony/
+http://www.mambaonline.com/whatson/
+http://www.mambers.com/archive/index.php/t-5598.html
+http://www.mambers.com/showthread.php?t=20409&page=3&pp=10
+http://www.mamboportal.com/component/option,com_frontpage/Itemid,1/limit,10/limitstart,50/
+http://www.mamkschools.org/hommocks/class/h&c/nelson/Child%20Dev/Child_Dev.htm
+http://www.mamkschools.org/hommocks/class/hc/nelson/Child%20Dev/Child_Dev.htm
+http://www.mammothfilms.com/history.html
+http://www.mamut.com/homepages/Switzerland/2/9/festivals/newsdet60.htm
+http://www.mamut.com/homepages/Switzerland/2/9/festivals/newsdet77.htm
+http://www.man-health-fitness-solutions.com/
+http://www.man-health-magazine-online.com/vitamin-c.html
+http://www.man.ac.uk/policies/39d.htm
+http://www.man.ac.uk/study/mature/mature_handbook/section4.html
+http://www.man.ac.uk/study/ugrad/new/baecon.html
+http://www.mana.org/committee.html
+http://www.managebytes.com/privacy.html
+http://www.managedcaremag.com/archives/0011/0011.peer_msa.html
+http://www.managedcaremag.com/archives/0412/0412.obesity_continued.html
+http://www.managedcaremag.com/archives/9807/9807.coping_medicare.shtml
+http://www.managedcaremag.com/pharm/pharmcomplist.shtml
+http://www.management-advantage.com/products/free-ee2.htm
+http://www.management-training-consultants.com/shared-values-process.htm
+http://www.managementconsultancy.co.uk/analysis/1131559
+http://www.managementconsultancy.co.uk/features/it/1155507
+http://www.managementconsultants.com/postacquisition_duediligence.html
+http://www.managementdirect.com/web/preview/headlines/childcare.shtml
+http://www.managementscience.org/news/news20.asp
+http://www.managementscience.org/news/news22.asp
+http://www.managementscience.org/research/ab9504.asp
+http://www.managenergy.tv/me_portal/portal.do?bc=154
+http://www.managers.org.uk/institute/content_3.asp/category=3/id=38/id=30/id=29
+http://www.managingchange.com/mediums/inter-tv/hw-swsup.htm
+http://www.managingmymoney.com/worksheets.html
+http://www.managingstress.com/articles/physiology.htm
+http://www.managingstress.com/articles/webpage3.htm
+http://www.manateebrain.org/03body/
+http://www.manateeworld.net/modules.php?op=modload&name=News&file=article&sid=41
+http://www.manchester.ac.uk/degreeprogrammes/postgraduate/taught/720.htm
+http://www.manchester.gov.uk/advice/factsheets/consumer/guide/
+http://www.manchester.gov.uk/advice/training/shortcourses/bailiffs.htm
+http://www.manchester.gov.uk/benefits/claim/older.htm
+http://www.manchester.gov.uk/bestvalue/equality/race/scheme/background.htm
+http://www.manchester.gov.uk/education/exclusions/section04.htm
+http://www.manchester.gov.uk/education/schools/pupildata/
+http://www.manchester.gov.uk/environment/recycling/banks.htm
+http://www.manchester.gov.uk/localdemocracy/committees/wythenshawe/2003/2703.htm
+http://www.manchester.gov.uk/localdemocracy/constitution/finance/guidance/cash.htm
+http://www.manchester2002-uk.com/celebs/military3.html
+http://www.manchesterlabour.org.uk/manifesto.html
+http://www.manchesteronline.co.uk/entertainment/music/albumreviews/s/144/144355_the_eric_watsonchristof_lauer_quartet__road_movies_act_.html
+http://www.manchesteronline.co.uk/entertainment/music/audioandvideo/s/117/117031_watch_the_datsuns_blacken_my_thumb_video.html
+http://www.manchesteronline.co.uk/entertainment/music/audioandvideo/s/137/137331_watch_the_streets_could_well_be_in_video.html
+http://www.manchesteronline.co.uk/entertainment/music/audioandvideo/s/86/86039_watch_d12s_my_band_video.html
+http://www.manchesteronline.co.uk/entertainment/music/popandurban/s/132/132327_streets_singer_in_small_scale_show.html
+http://www.manchesteronline.co.uk/homes/advice/buyingandselling/s/48/48714_expert_predictions_for_2003.html
+http://www.manchesteronline.co.uk/homes/latest/readershomes/s/147/147960_selfbuild_deco_delight.html
+http://www.manchesteronline.co.uk/homes/latest/shopping/s/24/24685_home_on_the_range_.html
+http://www.manchesteronline.co.uk/news/s/125/125550_mps_quizzed_on_metrolink_snub.html
+http://www.manchesteronline.co.uk/news/s/143/143837_mps_attack_cancer_treatment_by_postcode_lottery_.html
+http://www.manchesteronline.co.uk/news/s/161/161708_mias_crucial_heart_op_put_back.html
+http://www.manchesteronline.co.uk/news/s/161/161907_thousands_must_pay_back_benefits__.html
+http://www.manchesteronline.co.uk/news/s/25/25765_gilchrist_sold_us_out_says_union_boss.html
+http://www.manchesteronline.co.uk/news/s/46/46910_attack_on_christmas_day_traders.html
+http://www.manchesteronline.co.uk/news/s/56/56769_race_riot_fears_of_teachers.html
+http://www.manchesteronline.co.uk/news/s/71/71331_fergie_rejected_millions_for_super_stallion.html
+http://www.manchesteronline.co.uk/news/s/75/75343_defeat_over_tree_house__.html
+http://www.manchesteronline.co.uk/news/s/77/77755_police_ask_labour_protesters_for_tipoff.html
+http://www.manchesteronline.co.uk/news/s/79/79351_tainted_blood_cash_row.html
+http://www.manchesteronline.co.uk/personalfinance/s/162/162008_childrens_account_to_makes_parents_smile.html
+http://www.manchesteronline.co.uk/sport/football/manchestercity/fanprofiles.html
+http://www.manchesteronline.co.uk/sport/football/manchesterunited/s/141/141794_ferguson_admits_goal_should_have_stood.html
+http://www.manchesteronline.co.uk/sport/football/manchesterunited/s/162/162188_dont_price_out_the_true_fans.html
+http://www.mandarindesign.com/2004_08_01_archive.html
+http://www.mandarindesign.com/2005_05_01_archive.html
+http://www.mandate.ie/inuvgata.htm
+http://www.mandiberg.com/time/
+http://www.mandtbank.com/employment/benefits.cfm
+http://www.mandy.com/1/film2simple.cfm?p=39
+http://www.manepoints.com/articles/0404_agw_ride.shtml
+http://www.manepoints.com/articles/0404_mp_ride.shtml
+http://www.manepoints.com/articles/articles97/0297basic.shtml
+http://www.manfredlehmann.com/sieg414.html
+http://www.manfredmann.co.uk/whats_new/press_cuttings.html
+http://www.manfrommars.com/hippo.html
+http://www.mangaacademy.com/chapter.php?ch=22
+http://www.mangar.co.uk/mangar_news.html
+http://www.mangoproducts.net/testimonial.htm
+http://www.manh.com/news/news_releases_20050117_marykay.html
+http://www.manhattan-institute.org/hazlett/rahazlett40.htm
+http://www.manhattan-institute.org/html/_stlouisd-dude_wheres.htm
+http://www.manhattan-institute.org/html/cjm_35.htm
+http://www.manhattan-institute.org/html/clp_11-18-02.htm
+http://www.manhattan-institute.org/html/cr_23.htm
+http://www.manhattan-institute.org/html/cr_6.htm
+http://www.manhattantransfer.blogspot.com/
+http://www.manifest-tech.com/media_dvd/dvd_play.htm
+http://www.manifestingvibration.com/manifesting-vibration.html
+http://www.manisses.com/2online/PUAlert/ARCHIVES/2002/PA10-10.html
+http://www.manitobasoccer.ca/playerdev/index.php
+http://www.mankatofreepress.com/archives/2002/020507/story1.html
+http://www.manleylabs.com/techpage/trouble.html
+http://www.manning.demon.co.uk/
+http://www.manningclark.org/papers/clark-on-waten.html
+http://www.manningclark.org/papers/science_part_1.htm
+http://www.manoa.hawaii.edu/students/academic_grievance/AG_committee.html
+http://www.manordrug.com/
+http://www.manorhouses.com/manors/
+http://www.manovich.net/digitalsalon.htm
+http://www.mansfield.ox.ac.uk/apply/interview.htm
+http://www.mansfield.ox.ac.uk/study/subjects/ministerial.htm
+http://www.mansgland.com/
+http://www.mansooramarnacollection.com/scandal/chapter5.html
+http://www.mantex.co.uk/samples/plan.htm
+http://www.manticeye.com/article.php?id=95_0_2_0_C
+http://www.manufacturedhousing.org/modern_homes/archive/V2N3/V2N3_FEAT_be_a_star.html
+http://www.manufacturing.net/ctl/article/CA515958
+http://www.manufacturing.net/ctl/article/CA515958?spacedesc=featuredNews
+http://www.manufacturing.net/ind/blog/530000053/post/540000654.html
+http://www.manufacturing.net/lm/article/CA451720.html
+http://www.manufacturing.net/scm/article/CA318372.html?nid=2184&rid=1782958173
+http://www.manufacturingcenter.com/tooling/archives/0898/898ntro.asp
+http://www.manufacturingtalk.com/indexes/categorybrowseae.html
+http://www.manufacturingtalk.com/news/lkl/lkl121.html
+http://www.manukau.ac.nz/study/ua@m/sec4.asp
+http://www.manulife.ca/canada/Investments.nsf/Public/mid_caps
+http://www.manutd.com/footballnow/matchreport.sps?reportid=6234&iEventID=16318&compid=
+http://www.manutdsoccerschools.com/latest_news/01.htm
+http://www.manutdsoccerschools.com/latest_news/04.htm
+http://www.manutdsoccerschools.com/privacy_policy.htm
+http://www.manythings.org/voa/02/020722ta_t.htm
+http://www.manythings.org/voa/03/030604ex_t.htm
+http://www.manythings.org/voa/03/030907pa_t.htm
+http://www.manythings.org/voa/04/040715mn_t.htm
+http://www.maori.org.nz/papa_panui/link.asp?TOPIC_ID=175&view=lasttopic
+http://www.map21ltd.com/COSTC11/wkgr1A_2.htm
+http://www.mapability.com/ei8ic/grids/help/project.html
+http://www.mapcruzin.com/morebooks.htm
+http://www.mapcs.org/
+http://www.mapendoz.com/index.php
+http://www.mapl.com.au/A2.htm
+http://www.mapleheightsohio.com/communityprofile/communityprofile.html
+http://www.mapleleaf.com/ForwardStatement.aspx
+http://www.mapleleafs.com/story.ml?title=News&ctype=News&n=4757&e=AdminGroup
+http://www.mapmatrix.com/tmhtm/mapcat.html
+http://www.mapping-your-future.org/features/mentor.htm
+http://www.maps.org/media/spi5.9.02.html
+http://www.maps.org/news-letters/v09n4/09431sue.html
+http://www.maps.org/news-letters/v11n2/11210moj.html
+http://www.maps.org/news-letters/v13n1/13104mit.html
+http://www.mapsadopt.org/doctor.html
+http://www.mapsport.co.nz/mtbo/organiser.html
+http://www.mapw.org.au/missiledefence/MD%20article%20March04.html
+http://www.mar-eco.no/sci/modules.php?name=News&new_topic=41
+http://www.marathonguide.com/training/articles/MandBFuelOnFat.cfm
+http://www.marathonstore.com/20kpro-over.html
+http://www.maravot.com/frame197618.html
+http://www.marchofdimes.com/pnhec/159_516.asp
+http://www.marchofdimes.com/pnhec/188_1080.asp
+http://www.marchofdimes.com/professionals/14332_1150.asp
+http://www.marchofdimes.com/professionals/681_1150.asp
+http://www.marchofdimes.com/professionals/681_1170.asp
+http://www.marchofdimes.com/professionals/681_1228.asp
+http://www.marchofdimes.com/professionals/681_4546.asp
+http://www.marcmoini.com/f3_en.html
+http://www.marcomblog.com/?p=107
+http://www.marconi.com/Home/about_us/Our%20History/Acquired%20and%20Disposed%20Businesses
+http://www.marconi.com/Home/about_us/Our%20History/Acquired%20and%20Disposed%20Businesses;internal&action=print.action
+http://www.marcopolo-education.org/MarcoGrams/Feb2004.html
+http://www.marcorsyscom.usmc.mil/sites/mcub/PAGES/Uniform%20Regs%20Chapters/Chapter%2010%5CChapter%2010.htm
+http://www.marcusletter.com/writead.htm
+http://www.marcustheatres.com/view_theatre.cfm?tid=00407
+http://www.mardigrasday.com/
+http://www.mardigrasneworleans.com/mardi1.html
+http://www.mardiros.net/design-guidelines.html
+http://www.mareforum.com/ship_finance_information.htm
+http://www.marfan.org/nmf/GetSubContentRequestHandler.do?sub_menu_item_content_id=43&menu_item_id=7
+http://www.margaretcho.com/articles/individual_articles/los_angeles_times_march2001_article.htm
+http://www.margaretthatcher.net/studies/niproblem.php
+http://www.margaretwheatley.com/articles/lifetoschools.html
+http://www.margaretwheatley.com/articles/speakingoursuffering.html
+http://www.marginalrevolution.com/marginalrevolution/2003/09/in_memoriam.html
+http://www.marginalrevolution.com/marginalrevolution/2005/02/02/
+http://www.marginalrevolution.com/marginalrevolution/2005/05/why_dont_people.html
+http://www.marginalsoftware.com/HowtoScan/DiscussionsTone/scanning_color_negative_film.htm
+http://www.marginrelease.net/2003_07_06_talkingoutofschoolarchive.html
+http://www.margolisbrown.org/docs/tarticles.htm
+http://www.margrabe.com/CreditRisk.html
+http://www.margrabe.com/DrRisk.html
+http://www.margrabe.com/ModelRisk.html
+http://www.mariancoll.edu/Academics/Graduation/Spring%20Commencement.htm
+http://www.marianland.com/aut_Product12365.html
+http://www.marianland.com/aut_Product18004.html
+http://www.marianland.com/aut_Product64804.html
+http://www.marianland.com/aut_ProductBX740.html
+http://www.mariannedyson.com/spaceactivities.html
+http://www.mariannedyson.com/spacestationscienceinfo.html
+http://www.mariannedyson.com/writespace.htm
+http://www.maricopalivesteamers.com/lbn.html
+http://www.marietta.edu/~delemeeg/expernom/Fall2001/hill.html
+http://www.marietta.edu/~ema/150hour.html
+http://www.marijuana.com/420/archive/index.php/t-29047.html
+http://www.marijuana.org/AuburnJourn6-3-99.html
+http://www.marijuana.org/UtahAppealPetitionWEB.htm
+http://www.marijuana.org/agreement.html
+http://www.marijuanafacts.org/
+http://www.marijuananews.com/news.php3?sid=314
+http://www.marilynglenville.com/dieting.htm
+http://www.marilynglenville.com/general/infections.htm
+http://www.marine-medic.com.au/pages/glossary.html
+http://www.marinearts.com/rwscrimshaw.htm
+http://www.marinelog.com/DOCS/NEWSMMIIa/MMIIJun28.html
+http://www.marinemammal.org/research/nutstres.php
+http://www.marineman.ws/article.php?sid=72
+http://www.marineparents.com/usmc/donations.asp
+http://www.marineparents.com/usmc/finance.asp
+http://www.marinerswelfare.com.au/Newsletters/newsletterV2N2.htm
+http://www.marinews.com/fishing/fishing/Fishing%20Articles/fa_special.htm
+http://www.marinunited.org/marinunited/muDefault.aspx?tabindex=0&tabid=1
+http://www.marion.k12.fl.us/dept/cai/mets/info.htm
+http://www.marionstreetpress.com/PenSample4.html
+http://www.marissalingen.com/021702.html
+http://www.maritimeheritage.org/newtale/bloomers.html
+http://www.marjon.ac.uk/courses/course_info/pgce_secondary.asp
+http://www.mark-weeks.com/chess/78kk$$.htm
+http://www.markamerika.com/bio.html
+http://www.markarkleiman.com/archives/000355.html
+http://www.markarkleiman.com/archives/john_lott_/2003/05/lott_donohue_and_levitt.php
+http://www.markcarey.com/cgi-bin/mt/mt-view.cgi/18/entry/25656/discussion_page?start=101&show=20
+http://www.markcarey.com/me/discuss-open-text-chief-puts-out-the-welcome-mat.html
+http://www.markcarey.com/me/open-text-chief-puts-out-the-welcome-mat.html
+http://www.markcarey.com/shopping/p/B00000IQBW
+http://www.markcarey.com/shopping/p/B0000YEES0
+http://www.markcarey.com/shopping/p/B0002XVQSU
+http://www.markcarey.com/web-presence-strategies.html
+http://www.markdanner.com/newyorker/120693_The_Massacre.htm
+http://www.market-research-report.com/datamonitor/BFFS0314.htm
+http://www.marketharboroughonline.co.uk/pp/event/results.asp?Offset=40&CategoryID=104
+http://www.marketing-intelligence.co.uk/services/training.htm
+http://www.marketing-magic.biz/workshops/website-selling/trigger-a-successful-sale.htm
+http://www.marketing-make-money.com/
+http://www.marketing-seek.com/content/article691.php
+http://www.marketingfind.com/articles/does_size_matter_the_long_versus_short_copy_debate_continues.html
+http://www.marketingforsuccess.com/
+http://www.marketingforsuccess.com/increase-websales.html
+http://www.marketinggolf.com/advertising.html
+http://www.marketingpilot.com/marketingpilot_resources.shtml
+http://www.marketingpilot.com/solutions/integration.shtml
+http://www.marketingprofs.com/2/askless_getmore.asp
+http://www.marketingprofs.com/4/davison1.asp
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=1584
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=2931
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=2955
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=6892
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=7722
+http://www.marketingprofs.com/ea/qst_question.asp?qstID=836
+http://www.marketingprofs.com/webnews/4/news3-30-04.asp
+http://www.marketingsource.com/articles/view/1413
+http://www.marketingsuccessdaily.com/
+http://www.marketingtool.com/channel/flash/b.459.g.4981.html
+http://www.marketingtool.com/channel/flash/b.459.g.7287.html
+http://www.marketingtool.com/channel/webfirm/b.435.g.4981.html
+http://www.marketingtool.com/channel/webfirm/b.435.g.7287.html
+http://www.marketingvox.com/archives/2003/06/24/amazoncom_tweaks_commission_structure/
+http://www.marketingvox.com/archives/2003/10/10/valueclick_buys_commission_junction/
+http://www.marketingvox.com/archives/categories/political_parties_organizations/
+http://www.marketingvox.com/archives/categories/sex_sells/
+http://www.marketingweb.co.za/marketing/398087.htm
+http://www.marketingwonk.com/archives/categories/direct_marketing/
+http://www.marketlaunchers.com/december2001.html
+http://www.marketmarks.com/php/help.php
+http://www.marketnewzealand.com/MNZ/Browse/4/Textile-clothing-leather-footwear.aspx?promo=5
+http://www.marketresearch.com/product/display.asp?productid=1111793&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111796&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111817&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111820&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111826&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111832&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111835&g=1
+http://www.marketresearch.com/product/display.asp?productid=1111841&g=1
+http://www.marketscreen.com/help/AtoZ/default.asp?Num=46
+http://www.marketspaceglobal.com/pidllp.asp
+http://www.markettrends.com/fieldtab.htm
+http://www.marketwatch.com/news/story.asp?column=Europe+Markets&siteid=bizjournal
+http://www.markitek.com/articles/marrying2.htm
+http://www.markjuddery.com/html/news.html
+http://www.marklazarowicz.org.uk/parliament/speeches2004/9.9.htm
+http://www.marklitwak.com/articles/film/distribution_deal.html
+http://www.marklitwak.com/film_festivals/festival.php?fm=&id=T
+http://www.markme.com/hoyt/archives/2004_12.cfm
+http://www.markme.com/thiggins/archives/2005_01.cfm
+http://www.markprindle.com/grenadia.htm
+http://www.markriebling.com/archives/00000104.html
+http://www.markshuttleworth.com/blogossfunding.html
+http://www.marlamallett.com/mounting.htm
+http://www.marlaswoffer.com/blog/
+http://www.marlenewinell.com/ltf-ch2.html
+http://www.marlwood.com/OMS/information/policies.htm
+http://www.marmalade-skies.co.uk/complex.htm
+http://www.marmalademedia.com.au/amplitude.htm
+http://www.marmoset.com/60minute/Webnav/ebola.html
+http://www.marquette.edu/polisci/wolfe/appi.htm
+http://www.marquette.org/Voice%20of%20Business/2003/September%202003.htm
+http://www.marratech.com/userman/portal/app_firewalls.html
+http://www.marriagebuilders.com/graphic/mbi5042b_qa.html
+http://www.marriagebuilders.com/graphic/mbi5043_qa.html
+http://www.marriagebuilders.com/graphic/mbi5052_qa.html
+http://www.marriageequality.org/chapter.htm
+http://www.marriageromance.com/stories/10144035484.htm
+http://www.marriageromance.com/stories/10889681668.htm
+http://www.marriagesavers.org/public/a_christian_declaration_on_marri.htm
+http://www.marrow.org/PHYSICIAN/evaluating_adult_patients.html
+http://www.mars.com/Legal_disclaimer.asp
+http://www.marsdenjacob.com.au/Team.htm
+http://www.marsdens.net.au/page/family_law.html
+http://www.marshall-es.marshall.k12.tn.us/BuildYourHome/People/RiversideSchoolPart3.html
+http://www.marshall-stevens.com/appraisers_goal.htm
+http://www.marshall.edu/akanart/akancosmology.html
+http://www.marshall.edu/human-resources/handbook/policies.htm
+http://www.marshall.org/article.php?id=7
+http://www.marshall.org/article.php?id=98
+http://www.marshallfoundation.org/marshall_plan_economic_background_kindleberger.html
+http://www.marssociety.org/
+http://www.marthagrahamdance.org/company/repnotes05.shtml
+http://www.marthascottage.com/beatlesforsale.htm
+http://www.martialartsplanet.com/forums/search/topic/24683-1.html
+http://www.martin.fl.us/GOVT/minutes/94minutes/ceb/dec12.html
+http://www.martinandalex.com/blog/archives/2003/08/reflexions_on_l.html
+http://www.martinandalex.com/blog/archives/2004/10/
+http://www.martinandalex.com/blog/archives/2005/01/ebay_drops_a_bo.html
+http://www.martindalecenter.com/Nutrition_6_Bev.html
+http://www.martinfowler.com/articles/mdaLanguageWorkbench.html
+http://www.martinfowler.com/bliki/SpecificationByExample.html
+http://www.martinfrost.ws/htmlfiles/royal_ancient.html
+http://www.martinshousecomic.co.uk/blogs.html
+http://www.martydee.com/poligov/archives/003288.html
+http://www.martygrant.com/census.htm
+http://www.martynmission.cam.ac.uk/CKaggwa.htm
+http://www.maruhon.com/bizsummary.htm
+http://www.marvel.com/catalog/listing.htm?artist=TIM%20SALE
+http://www.marvel.com/catalog/listing.htm?artist=Tim%20Sale
+http://www.marvel.com/catalog/listing.htm?cover_art=TIM%20SALE
+http://www.marveldirectory.com/individuals/j/jeangrey.htm
+http://www.marveldirectory.com/xoops/modules/newbb/viewtopic.php?topic_id=127&forum=11&post_id=34321
+http://www.marvunapp.com/Appendix/zherednaprec.htm
+http://www.marxidad.com/Poems/TheDesert
+http://www.marxist.com/Africa/nigeria_strike_10_03.html
+http://www.marxist.com/Europe/djindic_murder.html
+http://www.marxist.com/Globalisation/seattle_to_nice.html
+http://www.marxist.com/Latinam/venez_year_after.html
+http://www.marxist.com/appeals/ife_nigeria.html
+http://www.marxist.com/hbt/2-1.html
+http://www.marxist.com/science/chaostheory.html
+http://www.marxist.com/waronterror.asp
+http://www.marxist.com/women/connolly_on_women.html
+http://www.marxist.com/women/equal_pay.html
+http://www.marxist.net/scotland/1998/defence3.htm
+http://www.marxists.org/archive/bax/1898/05/command.htm
+http://www.marxists.org/archive/cliff/works/1967/04/revtrad.htm
+http://www.marxists.org/archive/cliff/works/1988/03/mood.htm
+http://www.marxists.org/archive/cliff/works/1995/02/balance.htm
+http://www.marxists.org/archive/connolly/1897/08/patlabr.htm
+http://www.marxists.org/archive/connolly/1901/10/homrulab.htm
+http://www.marxists.org/archive/connolly/1908/01/india1.htm
+http://www.marxists.org/archive/connolly/1908/07/polact.htm
+http://www.marxists.org/archive/connolly/1910/lih/chap03.htm
+http://www.marxists.org/archive/connolly/1910/lih/chap08.htm
+http://www.marxists.org/archive/connolly/1910/lih/chap16.htm
+http://www.marxists.org/archive/connolly/1910/lnr/06.htm
+http://www.marxists.org/archive/connolly/1910/lnr/foreword.htm
+http://www.marxists.org/archive/connolly/1911/connwalk/5-syminter.htm
+http://www.marxists.org/archive/connolly/1913/10/workcase.htm
+http://www.marxists.org/archive/connolly/1914/04/solidrty.htm
+http://www.marxists.org/archive/connolly/1914/08/contrev.htm
+http://www.marxists.org/archive/connolly/1915/10/budget.htm
+http://www.marxists.org/archive/connolly/1915/12/trstldrs.htm
+http://www.marxists.org/archive/eleanor-marx/1884/01/record-international.htm
+http://www.marxists.org/archive/foot-paul/1982/3letters/letter2.htm
+http://www.marxists.org/archive/glass/1946/07/x01.htm
+http://www.marxists.org/archive/hallas/works/1993/10/thompson.htm
+http://www.marxists.org/archive/kautsky/1903/economic/ch11.htm
+http://www.marxists.org/archive/kidron/works/1967/xx/permarms.htm
+http://www.marxists.org/archive/kollonta/works/1921/evolution.htm
+http://www.marxists.org/archive/lafargue/1883/lazy/ch03.htm
+http://www.marxists.org/archive/lenin/works/1898/dec/market.htm
+http://www.marxists.org/archive/lenin/works/1899/dcr8vii/vii8x.htm
+http://www.marxists.org/archive/lenin/works/1906/nov/23f.htm
+http://www.marxists.org/archive/lenin/works/1907/feb/11.htm
+http://www.marxists.org/archive/lenin/works/1916/imp-hsc/ch02.htm
+http://www.marxists.org/archive/lenin/works/1916/ni-beta/jeidels.htm
+http://www.marxists.org/archive/liebknecht-k/works/1916/future-belongs-people/ch12.htm
+http://www.marxists.org/archive/liebknecht-k/works/1916/future-belongs-people/ch24.htm
+http://www.marxists.org/archive/luxemburg/1916/04/eitheror.htm
+http://www.marxists.org/archive/marx/works/1848/communist-manifesto/ch01.htm
+http://www.marxists.org/archive/marx/works/1867-c1/ch09.htm
+http://www.marxists.org/archive/marx/works/1885-c2/ch05.htm
+http://www.marxists.org/archive/marx/works/subject/hist-mat/anti-durhing/p2.htm
+http://www.marxists.org/archive/mattick-paul/1959/war-economy.htm
+http://www.marxists.org/archive/morris/works/1884/justice/05rad.htm
+http://www.marxists.org/archive/morrow-felix/1942/warproduction.htm
+http://www.marxists.org/archive/reed/works/1918/origins.htm
+http://www.marxists.org/archive/reed/works/1918/soviets.htm
+http://www.marxists.org/archive/reed/works/1918/state.htm
+http://www.marxists.org/archive/sedgwick/1971/xx/fifties.htm
+http://www.marxists.org/archive/shachtma/1945/10/unity.htm
+http://www.marxists.org/archive/thalheimer/works/missed/appendix.htm
+http://www.marxists.org/archive/trotsky/works/1919-mil/ch08.htm
+http://www.marxists.org/archive/trotsky/works/1921-mil/ch01.htm
+http://www.marxists.org/archive/trotsky/works/1922-mil/ch19.htm
+http://www.marxists.org/archive/trotsky/works/1922-mil/ch20.htm
+http://www.marxists.org/archive/trotsky/works/1938/1938-kronstadt.htm
+http://www.marxists.org/archive/trotsky/works/1940/1940-american.htm
+http://www.marxists.org/archive/vygotsky/works/1933/play.htm
+http://www.marxists.org/glossary/terms/c/r.htm
+http://www.marxists.org/glossary/terms/d/i.htm
+http://www.marxists.org/glossary/terms/g/o.htm
+http://www.marxists.org/glossary/terms/l/a.htm
+http://www.marxists.org/glossary/terms/l/e.htm
+http://www.marxists.org/glossary/terms/m/e.htm
+http://www.marxists.org/glossary/terms/m/i.htm
+http://www.marxists.org/glossary/terms/p/l.htm
+http://www.marxists.org/glossary/terms/s/e.htm
+http://www.marxists.org/history/etol/document/china/glass01.htm
+http://www.marxists.org/history/etol/writers/burnham/1935/07/bands.htm
+http://www.marxists.org/history/international/comintern/sections/canada/buck-tim/30years/ch13.htm
+http://www.marxists.org/history/international/comintern/sections/sacp/1991/socialism.htm
+http://www.marxists.org/history/international/iwma/documents/1865/london-soiree-report.htm
+http://www.marxists.org/history/ussr/government/law/1936/moscow-trials/22/contemptible-terrorists.htm
+http://www.marxists.org/history/ussr/government/law/1936/moscow-trials/22/prosecution.htm
+http://www.marxists.org/history/ussr/government/red-army/1918/raskolnikov/ilyin/ch02.htm
+http://www.marxists.org/reference/archive/debord/society.htm
+http://www.marxists.org/reference/archive/hegel/works/hl/hlbeing.htm
+http://www.marxists.org/reference/archive/hegel/works/ph/phintro.htm
+http://www.marxists.org/reference/archive/malcolm-x/
+http://www.marxists.org/reference/archive/mao/selected-works/volume-9/mswv9_22.htm
+http://www.marxists.org/reference/archive/smith-adam/works/wealth-of-nations/book01/ch07.htm
+http://www.marxists.org/reference/archive/strong-anna-louise/1925/children_revolution/ch05.htm
+http://www.marxists.org/reference/subject/economics/keynes/general-theory/ch14a.htm
+http://www.marxists.org/reference/subject/economics/keynes/general-theory/ch20.htm
+http://www.marxists.org/reference/subject/economics/keynes/general-theory/ch21.htm
+http://www.marxists.org/reference/subject/economics/keynes/general-theory/ch23.htm
+http://www.marxists.org/reference/subject/philosophy/works/at/godel.htm
+http://www.marxists.org/reference/subject/philosophy/works/en/bacon.htm
+http://www.marxists.org/reference/subject/philosophy/works/en/hume.htm
+http://www.marxists.org/reference/subject/philosophy/works/en/spencer.htm
+http://www.marxists.org/reference/subject/philosophy/works/fr/derrida2.htm
+http://www.marxists.org/reference/subject/philosophy/works/fr/merleaup.htm
+http://www.marxists.org/reference/subject/philosophy/works/ge/habermas.htm
+http://www.marxists.org/reference/subject/philosophy/works/ge/heisenb2.htm
+http://www.marxists.org/reference/subject/philosophy/works/us/fireston.htm
+http://www.marxists.org/subject/art/literature/children/texts/marshak/art.html
+http://www.marxists.org/subject/students/
+http://www.mary-bryant.com/don.htm
+http://www.mary.havering.sch.uk/history_of_the_school.htm
+http://www.marybalogh.com/s-sinful-ex2.html
+http://www.marybird.org/index.cfm?fuseaction=TreatTeam&expandID=2
+http://www.maryjaneclark.com/nobodyknows/prologue1.html
+http://www.maryjanesgarden.com/seedsman.php
+http://www.maryjones.us/essays/rossetti2.html
+http://www.maryknollogc.org/election.htm
+http://www.marylandinfo.com/Professional_Services/
+http://www.marylandmath.org/publications/tax-break.asp
+http://www.marylandpolicy.org/Welf8-99.htm
+http://www.marymcdowell.org/enrichment/enrich_theater.html
+http://www.marynorth.com/about_clia.html
+http://www.marypages.com/PrayerstoMary.htm
+http://www.maryruth.org/chapter06/Mary_Ruth_Chapter_6.htm
+http://www.marys-touch.com/truth/address.htm
+http://www.mascom.co.nz/store.php?cat=Rugby
+http://www.mashmagazine.com/00april/aprilliterary.html
+http://www.maskit.net/cybrpnk.cgi/cybrpnk/free_trade/
+http://www.masmforum.com/simple/index.php?topic=1912.new
+http://www.masmn.org/documents/Books/Abul_Ala_Mawdudi/Towards_Understanding_Islam/007.htm
+http://www.masnet.org/islamscience.asp?id=165
+http://www.masoncontractors.org/aboutmasonry/greenbuildingsystem/index.php
+http://www.masonicinfo.com/shaw.htm
+http://www.mass.gov/gic/safety.htm
+http://www.mass.gov/legis/laws/mgl/111-70e.htm
+http://www.mass.gov/legis/reports/C70workinggroup.htm
+http://www.mass.gov/mtrb/refdocs/1099retq.htm
+http://www.massagem4m.com/masseur.cfm?id=11416&m=readReviews
+http://www.massagem4m.com/masseur.cfm?id=12080
+http://www.massbike.org/people/melcher/hostages.htm
+http://www.massey.ac.nz/~trauma/books/flin.htm
+http://www.massey.ac.nz/~trauma/issues/1998-3/gow1.htm
+http://www.massey.ac.nz/~trauma/issues/2001-1/ronan.htm
+http://www.massey.ac.nz/~trauma/issues/2004-2/lahad.htm
+http://www.massgeneral.org/allpsych/Bulimia/BulimiaNervosa_three.htm
+http://www.massgeneral.org/privacynotice.htm
+http://www.massgeneral.org/pubaffairs/Issues/031403whats.htm
+http://www.massgeneral.org/pubaffairs/Issues/080803task.htm
+http://www.massgeneral.org/pubaffairs/Issues/082401whats.htm
+http://www.massgeneral.org/pubaffairs/releases/press2001.htm
+http://www.massillonohio.com/housing/tenant_landlord.htm
+http://www.masslegalhelp.org/page/94017
+http://www.masslegalservices.org/page/94017
+http://www.massmutual.com/mmfg/prepare/events/job.html
+http://www.massnews.com/2004_editions/11_nov/112904_universal_healthcare_hurts_everyone.htm
+http://www.massnurses.org/News/2004/05/amendment_text.htm
+http://www.massnurses.org/leg/legadnabills/safestaff.htm
+http://www.masspsy.com/residential.html
+http://www.massretirees.com/ss/sshot0304.html
+http://www.masta.org/travel-health/disease-risks.asp?group=2&dis_id=54
+http://www.mastamariner.com/border_collie_colours_page.html
+http://www.mastercollector.com/articles/models/images/scottsmodelcar.shtm
+http://www.mastercomposter.com/purpose/goodsoil.html
+http://www.mastergardenproducts.com/gardenerscorner/indoor_gardening.htm
+http://www.mastermason.com/hope-lodge-number-four/default.htm
+http://www.mastermason.com/jjcrowder/scottish/scottish.html
+http://www.masternewmedia.org/2003/02/07/better_safe_than_sorry_the_dangers_of_feeling_immune_on_a_mac.htm
+http://www.masternewmedia.org/2003/03/31/how_to_create_a_visually_oriented_realtime_chat_and_collaboration_environment.htm
+http://www.masternewmedia.org/2003/04/12/sars_patient_zero_chinese_doctors_research_causes_epidemic.htm
+http://www.masternewmedia.org/2003/09/29/first_fame_then_fortune_an_alternative_look_at_micropayments_potential_for_social_and_economic_change.htm
+http://www.masternewmedia.org/2004/04/04/nine_rules_for_good_technology.htm
+http://www.masternewmedia.org/news/2004/07/09/easily_publish_your_voice_and.htm
+http://www.masternewmedia.org/news/2004/10/14/design_with_emotion_volvo_shows.htm
+http://www.masternewmedia.org/news/2005/04/01/where_to_find_great_free.htm
+http://www.masterpeez.com/University/City/14347.html
+http://www.mastersgames.com/cat/outdoor/croquet-68-player.htm
+http://www.mastersinthemaking.com/
+http://www.mastertexts.com/index.php?PageName=ChapterDetails&TitleID=1726&VolumeNo=&ChapterNo=3
+http://www.masterviews.com/2005/05/20/how_to_do_away_with.htm
+http://www.mastervisions.com/mirrors/dhc_m-western.htm
+http://www.mastgeneralstore.com/news/20010418.php3
+http://www.mastgeneralstore.com/news/20010514.php3
+http://www.mastgeneralstore.com/news/20031022.php3
+http://www.masud.co.uk/ISLAM/nuh/qawamuna.htm
+http://www.matadorrecords.com/arsonists/news.html
+http://www.match.com/magazine/article2.aspx?articleid=3940
+http://www.matchingroommates.com/archives/04_1998.html
+http://www.matchschool.org/Press/press.php?link=articles/herald_01-03-05_goldstein.htm
+http://www.matchtech.com/candidates/advice/working-in-uk/
+http://www.matchtech.com/engineering/power-nuclear/
+http://www.materialreligion.org/documents/apr99doc.html
+http://www.materials.ac.uk/events/regionalox.asp
+http://www.materiamagica.com/start/rules/index.php
+http://www.math.columbia.edu/~woit/blog/
+http://www.math.columbia.edu/~woit/blog/archives/000031.html
+http://www.math.columbia.edu/~woit/blog/archives/000059.html
+http://www.math.com/students/kaplan/sat2.html
+http://www.math.fau.edu/locke/GRAPHTHE.HTM
+http://www.math.grin.edu/courses/Scheme/spring-1998/characters.html
+http://www.math.grin.edu/~stone/courses/fundamentals/IEEE-reals.html
+http://www.math.grin.edu/~stone/courses/scheme/labs/beginning-Scheme.xhtml
+http://www.math.grin.edu/~stone/courses/scheme/readings/characters.xhtml
+http://www.math.ias.edu/~boaz/methods2003/
+http://www.math.ksu.edu/conf2001/
+http://www.math.kth.se/4ecm/program/4ecm.programme.html
+http://www.math.mcgill.ca/darmon/
+http://www.math.mcgill.ca/~darmon/
+http://www.math.montana.edu/frankw/ccp/multiworld/partdes/heatbuilding/body.htm
+http://www.math.niu.edu/~rusin/known-math/index/11-XX.html
+http://www.math.niu.edu/~rusin/known-math/index/beginners.html
+http://www.math.northwestern.edu/menu/menu.html
+http://www.math.nus.edu.sg/aslaksen/
+http://www.math.odu.edu/~adam/min/min5.html
+http://www.math.ohio-state.edu/conferences/matroid-2002/
+http://www.math.tau.ac.il/~safra/ACT/
+http://www.math.toronto.edu/mathnet/carcompet/startup.html
+http://www.math.toronto.edu/mathnet/plain/carcompet/startup.html
+http://www.math.uncc.edu/~hbreiter/hbrvita.html
+http://www.math.washington.edu/~smith/Seminar/F04abs.html
+http://www.math.yorku.ca/SCS/StatResource.html
+http://www.math.yorku.ca/sfp/sfp.ex.html
+http://www.mathcaddy.com/
+http://www.mathcats.com/contest/apr2004winners.html
+http://www.mathcats.com/grownupcats/ideabankfractions.html
+http://www.mathcats.com/grownupcats/ideabankplacevalue.html
+http://www.mathdittos2.com/columns/bh/bh981122.html
+http://www.mathematicallycorrect.com/impkm.htm
+http://www.mathematik.uni-kl.de/mathint/programme/living_in_D.htm
+http://www.mathleague.com/help/data/data.htm
+http://www.mathnews.uwaterloo.ca/Issues/mn7807/social.php
+http://www.mathpages.com/home/kmath242/kmath242.htm
+http://www.mathpages.com/rr/s5-04/5-04.htm
+http://www.mathpages.com/rr/s5-07/5-07.htm
+http://www.mathpuzzle.com/older.htm
+http://www.maths.ed.ac.uk/guides/Syll/mf0.html
+http://www.maths.ed.ac.uk/~derek/Syll/af0.html
+http://www.maths.ed.ac.uk/~derek/Syll/mc4.html
+http://www.maths.ed.ac.uk/~derek/Syll/mf0.html
+http://www.maths.ex.ac.uk/~mwatkins/zeta/surprising.htm
+http://www.maths.leeds.ac.uk/Applied/news.dir/issue25.dir/jour/jour.html
+http://www.maths.nottingham.ac.uk/admissions/FAQs.html
+http://www.maths.tcd.ie/~mogwai/bsides.html
+http://www.maths.unsw.edu.au/students/future/fycourseintro.html
+http://www.mathsci.appstate.edu/~sjg/class/1010/highlightsf01.html
+http://www.mathsci.appstate.edu/~sjg/class/1010/highlightss02.html
+http://www.mathworks.com/access/helpdesk/help/techdoc/creating_guis/ch_program23.html
+http://www.mathworks.com/access/helpdesk/help/toolbox/optim/fgoalattain.html
+http://www.mathworks.com/company/newsletters/auto_digest/nov_03/mod_cal.html
+http://www.matisse.net/files/glossary.html
+http://www.matr.net/article-3338.html
+http://www.matrikonopc.com/products/opc-drivers/Details.asp?driver=188
+http://www.matrix.com/matrix_buzz/
+http://www.matrixenergetics.com/radio-transcript_01.htm
+http://www.matrixracing.com/
+http://www.matrixscience.com/mascot_support.html
+http://www.matt-thornton.net/blog/
+http://www.mattandjess.net/
+http://www.mattelscrabble.com/fr/adults/privacy.html
+http://www.mattelscrabble.com/fr/kids/privacy.html
+http://www.mattfurey.com/florida_hurricanes_102204.html
+http://www.matthewarnoldstern.com/speeches.html
+http://www.matthewbooks.com/samplevoices.htm
+http://www.matthewflickinger.com/blog/archives/2004/08/default.asp
+http://www.matthewgood.org/mblog/index.php
+http://www.matthewholt.net/2004/11/quality-dsm-convincing-anyone-maybe.html
+http://www.matthewreilly.com/high/faq2.htm
+http://www.matthewyglesias.com/archives/week_2004_06_20.html
+http://www.mattnathanson.com/reps/index.shtml
+http://www.mattneuman.com/chaptr23.htm
+http://www.mattschulze.info/fanfic_lostlove.html
+http://www.matttaylor.com/public/bay_area_studio.html
+http://www.matttaylor.com/public/mt_hand_n_book_p_9_11_no_7.htm
+http://www.matttaylor.com/public/mt_hand_notebook_index.htm
+http://www.matttaylor.com/public/valueweb.htm
+http://www.maudnewton.com/blog/
+http://www.maui-tomorrow.org/issuespages/landuse/
+http://www.maui-tomorrow.org/issuespages/landuse/showdown.html
+http://www.maui-tomorrow.org/issuespages/makena/conditions2.html
+http://www.maui-tomorrow.org/issuespages/water/diversion_ruling.html
+http://www.mauigateway.com/~donjusko/human.htm
+http://www.mauritania-today.com/economy/investment-code.htm
+http://www.mav.vic.edu.au/PSTC/refer/history.htm
+http://www.mavericklabel.com/imagemax.html?assoc=1
+http://www.mavicanet.com/directory/gle/11190.html
+http://www.mawn.net/historyeurope.htm
+http://www.mawwfire.gov.uk/doc_eng/report_welsh_language.htm
+http://www.max.co.za/Man/General/748-771,13591.asp
+http://www.max.co.za/Woman/General/711-733-1498,13591.asp
+http://www.max.co.za/experts/CyberShrink/979-984-1938,29146.asp
+http://www.maxboxing.com/Kim/Kim012605.asp
+http://www.maxdesign.com.au/presentation/
+http://www.maxedoutgen.com/archives/cat_students_and_debt.html
+http://www.maxim-ic.com.cn/appnotes.cfm/appnote_number/1881
+http://www.maxim-ic.com/appnotes.cfm/appnote_number/1916
+http://www.maxim-ic.com/tarticle/view_article.cfm/article_id/1184/
+http://www.maximumcrowe.com/beautifulmind/set8.html
+http://www.maximummusician.com/newsletter.htm
+http://www.maxkrimmel.com/Alabaster/HowToPart1/HowTo1.html
+http://www.maxlyrics.com/songView.php/18815
+http://www.maxmoose.com.au/review/rfrwildb.htm
+http://www.maxon.net/pages/products/c4d/91features_e.html
+http://www.maxpotential.com/a-forum.htm
+http://www.maxsacks.com/articles/psbj23.html
+http://www.maxspeak.org/mt/
+http://www.maxwell.af.mil/msd/newcomer/famsupport/relas.htm
+http://www.maxwell.syr.edu/maxpages/faculty/jbennett/651s04/silly651.html
+http://www.maxwideman.com/pmglossary/PMG_W01.htm
+http://www.may41970.com/Jackson%20State/jackson_state_may_1970.htm
+http://www.mayasites.com/7classic.html
+http://www.maybach.ru/en/official/maybach32.htm
+http://www.maybelogic.org/maybequarterly/01/0122MQColophon.htm
+http://www.maybo.com/cgi-bin/news_view_article.cgi?news_id=20040129oneint017
+http://www.mayflowerfamilies.com/mayflower/mayflower_passenger_list.htm
+http://www.mayfloweroceanlines.com/maritime_her.htm
+http://www.mayhem.net/Crime/serial2.html
+http://www.mayitpleasethecourt.net/journal.asp?blogid=669
+http://www.maym.org/friends_women/quaker_bonnet.htm
+http://www.maynarddixon.com/aboutdixon.htm
+http://www.maynardije.org/columns/dickprince/041215_prince/
+http://www.maynardije.org/news/features/011006_chips/011011_chips4/
+http://www.maynegroup.com/
+http://www.maynegroup.com/149_467.asp
+http://www.maynegroup.com/149_481.asp
+http://www.maynegroup.com/149_536.asp
+http://www.maynoothcollege.ie/courses/bacc_theology_arts.shtml
+http://www.mayoclinic.com/invoke.cfm?id=HB00032
+http://www.mayoclinic.com/invoke.cfm?id=HQ00507
+http://www.mayoclinic.org/becomingpat-jax/financial.html
+http://www.mayoclinic.org/patientstories-sct/brandenlombardi.html
+http://www.mayoclinic.org/patientstories/brandenlombardi.html
+http://www.mayq.com/Best_european_trips/Loire/Loire.htm
+http://www.mayq.com/Best_european_trips/Provence/Provence.htm
+http://www.mayrand.org/meaning-e.htm
+http://www.maysvillekentucky.com/articles/page.asp?articleid=2049
+http://www.mazal.org/Pressac/Pressac0053.htm
+http://www.mazama.net/scheme/pscheme.htm
+http://www.mazars.ie/initial/cms/php/workflow.php?queryType=3&item=news&itemId=113
+http://www.mba.hobsons.com/advice/mbamarketing_gmatandtoefl
+http://www.mbaauthority.com/cc/startup.html
+http://www.mbarchitects.org/web/members-employment3.shtml
+http://www.mbari.org/news/news_releases/2005/sinkers.html
+http://www.mbcomp.com/LitzOnLebanon/4thQtr02
+http://www.mbcpapers.org/cgi-bin/main.plex?form_type=display_auth_instructions
+http://www.mbeddow.net/xml/technotes2.html
+http://www.mbherald.com/41-16/generalmb.html
+http://www.mbinet.org/web/magazine/cooler02_03.html
+http://www.mbinet.org/web/magazine/cooler02_03.html&style=printable
+http://www.mbl.edu/inside/what/news/events/2005_events_friday/events_friday_07_08_05.html
+http://www.mbl.edu/inside/what/services/serv_childcare.html
+http://www.mblink.mbusa.com/Inetapps/PressReleases.nsf/0/50ff8ecb209e80d785256f710074e430?OpenDocument&Click=
+http://www.mbs-brasses.co.uk/pic_lib/May_2005_brass_of_the_month.htm
+http://www.mbta.com/insidethet/art_redline.asp
+http://www.mbta.com/projects_underway/nbfr_faqs.asp
+http://www.mbtrading.com/disc1.asp
+http://www.mbts.edu/
+http://www.mc-mncppc.org/parks/brookside/greenmatters/greenmatters.shtm
+http://www.mc-mncppc.org/parks/index.shtm
+http://www.mc.maricopa.edu/~reffland/anthropology/anthro2003/origins/hominid_journey/newspecies.html
+http://www.mc.uky.edu/transplant/jozefowicz.htm
+http://www.mc.vanderbilt.edu/root/vumc.php?site=RiskMgmt&doc=1781
+http://www.mc3.edu/sa/stact/stact.htm
+http://www.mcanerin.com/canada/prices-example.htm
+http://www.mcard.umich.edu/faq.htm
+http://www.mcare.org/mcaremail/producernews/fall_2004/
+http://www.mcasco.com/glossary.html
+http://www.mcasco.com/p1meas.html
+http://www.mcasco.com/p1wke.html
+http://www.mcauley.acu.edu.au/~yuri/ethics/aborig.html
+http://www.mcaws.gov.bc.ca/womens_services/keeping-safe/
+http://www.mcb.uct.ac.za/tutorial/morbilli.htm
+http://www.mcbi.org/DSC_statement/sign.htm
+http://www.mcbi.org/destructive/Destructive.htm
+http://www.mcbiz.com.au/PharosText2.html
+http://www.mcc.org/peace/info/CO_history.html
+http://www.mcca.com/site/data/corporate/BP/littler.htm
+http://www.mccarthyandstone.co.uk/investor_relations/Envir_Report.asp
+http://www.mcclelland.com/catalog/display.pperl?isbn=0771046332&view=excerpt
+http://www.mccombs.utexas.edu/news/magazine/00s/konana.asp
+http://www.mccombs.utexas.edu/~cbatoday/ford_porsche.html
+http://www.mcconaghy-aus.com/
+http://www.mcconnellfoundation.ca/president.e/interview.html
+http://www.mcconnellinternational.com/ereadiness/EReadinessReport.htm
+http://www.mccormicknicholson.co.uk/bayview-garlieston.htm
+http://www.mccoyconsulting.com/interest.htm
+http://www.mccoymwr.com/Family/cys.htm
+http://www.mccp.co.uk/digest/story-22
+http://www.mccronehealthbeat.com/
+http://www.mce.be/knowledge/138/18
+http://www.mce.be/knowledge/423/47
+http://www.mce.be/knowledge/447/18
+http://www.mce.be/knowledge/72/16
+http://www.mcf.org/mcf/forum/outlook2002.htm
+http://www.mcf.org/mcf/grant/writing.htm
+http://www.mcfn.org/nljuly00.htm
+http://www.mcg.edu/medart/MI-FAQ.html
+http://www.mcg.org.au/default.asp?pg=article&articleid=521
+http://www.mcg.org.au/default.asp?pg=redevelopmentdisplay&articleid=1548
+http://www.mcgeesmusings.net/2003/02/08.html
+http://www.mcgibney.com/self-assessment.htm
+http://www.mcgill.ca/biochemistry/graduates/interests/
+http://www.mcgill.ca/macdonald/research/facilities/
+http://www.mcgill.ca/news/2004/fall/reviews/
+http://www.mcgill.ca/politicalscience/faculty/soroka/
+http://www.mcgill.ca/provost/courseevaluations/questions/
+http://www.mcgill.ca/reporter/34/10/bloom/
+http://www.mcgill.ca/reporter/34/12/hiring/
+http://www.mcgill.ca/reporter/35/07/tutoring/
+http://www.mcgill.ca/studenthealth/information/generalhealth/sleep/
+http://www.mcgillreport.org/whatsthematter.htm
+http://www.mcgm.gov.in/Departments/Stores/Duties.html
+http://www.mcgraw-hill.co.uk/kingscourt/reviewcentre/matchword.html
+http://www.mcgregor.edu/ilps/naw/
+http://www.mcgurr.com/comicsbiz.htm
+http://www.mch.govt.nz/anthem/history.htm
+http://www.mchenryonline.com/westosha/deep.shtml
+http://www.mchoralhealth.org/PediatricOH/mod4_3.htm
+http://www.mchron.net/site/edublog.php
+http://www.mcifa.com/parcel2.cfm
+http://www.mcilwaindentistry.com/services_policies_pedo.htm
+http://www.mckenziestudycenter.org/bible/langgod/LGans6.html
+http://www.mckenziestudycenter.org/education/articles/letter.html
+http://www.mckeough.com/about/testimonials.htm
+http://www.mckinneyisd.net/departments/curriculum/accountability/
+http://www.mckinneytexas.org/safety/fire/education.htm
+http://www.mckinsey.com/aboutus/mckinseynews/pressarchive/uscurrency.asp
+http://www.mckinsey.com/clientservice/bto/careers/careerpath.asp
+http://www.mckinsey.com/ideas/books/valuation/interview.asp
+http://www.mclam.com/msolorzano.html
+http://www.mclaughlin.com/bb/bb.asp?topicid=1464&pagenumber=5
+http://www.mcleanevents.com/General/RecentEvents/
+http://www.mcleanscotland.co.uk/gardens.htm
+http://www.mcleanscotland.co.uk/luxurytour.htm
+http://www.mcluhan.utoronto.ca/tsc_plato_education_teaching_writing.htm
+http://www.mcm.edu/sports/crosscountry/
+http://www.mcmanis.com/chuck/computers/vaxen/
+http://www.mcmanweb.com/forum14.htm
+http://www.mcmanweb.com/philippic.htm
+http://www.mcmanweb.com/soprano.htm
+http://www.mcmaster.ca/pres/UofTConv2005.html
+http://www.mcmaster.ca/pres/negevdinner.htm
+http://www.mcmichael.com/learn-groupvisits2.shtml
+http://www.mcmurrayhatchery.com/
+http://www.mcn.org/1/rrparks/fortross/Curriculum/ftales.htm
+http://www.mcnp.org/steward/resources.htm
+http://www.mcny.org/Collections/paint/Painting/pttcat50.htm
+http://www.mcobject.com/standardedition.shtml
+http://www.mcpmag.com/aboutus/contributors/
+http://www.mcpmag.com/features/article.asp?EditorialsID=2
+http://www.mcpmag.com/newsletter/article.asp?EditorialsID=76
+http://www.mcps.k12.md.us/curriculum/socialstd/MWH/11013_3.html
+http://www.mcps.k12.md.us/curriculum/socialstd/MWH_Guide.html
+http://www.mcrcb-events.co.uk/news.cfm/title/DONINGTON%20PARK%20ROUND%2013%20PREVIEW/flag/2/id/113
+http://www.mcrcb-events.co.uk/news.cfm/title/MONDELLO%20PARK%20ROUND%205%20PREVIEW/flag/2/id/58
+http://www.mcrosolv.demon.co.uk/gallery/
+http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibmaths.html
+http://www.mcsasail.org/ICSATeamRaceObserverGuide
+http://www.mcspotlight.org/case/pretrial/factsheet_ref.html
+http://www.mcspotlight.org/case/trial/tnews1.html
+http://www.mcspotlight.org/media/press/mcds/dailymail150304.html
+http://www.mcspotlight.org/media/press/releases/mcspot290703.html
+http://www.mcspotlight.org/people/witnesses/animals/lyman_howard.html
+http://www.mcspotlight.org/people/witnesses/environment/quintana.html
+http://www.mcspotlight.org/people/witnesses/food_poisoning/north_richard.html
+http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?write
+http://www.mcu.usmc.mil/sncoa/29Palms/info.cfm
+http://www.mcvuk.com/newsitem.php?id=261
+http://www.mcwa.com/kids.htm
+http://www.mcwilliams.com/books/aint/404.htm
+http://www.mcwilliams.com/books/aint/405.htm
+http://www.mcwilliams.com/books/aint/507.htm
+http://www.mcwilliams.com/books/doit/d4c.htm
+http://www.mcz.com/sport/fatboys.htm
+http://www.mdah.state.ms.us/pubs/mhn/may03index.html
+http://www.mdarchives.state.md.us/msa/stagser/s1259/131/html/road.html
+http://www.mdausa.org/mattie/eulogies.cfm
+http://www.mdausa.org/news/021115sperep.html
+http://www.mdausa.org/publications/Quest/q116fromwhere.cfm
+http://www.mdausa.org/publications/Quest/q66metabolic.html
+http://www.mdausa.org/publications/Quest/q81cantwork.cfm
+http://www.mdausa.org/publications/Quest/q82tower.cfm
+http://www.mdausa.org/publications/Quest/q96fall-down.cfm
+http://www.mdc.com.cn/EN/InformationCenter/01-LatestNews41.php?menuid=8
+http://www.mdc.edu/
+http://www.mdcbowen.org/cobb/
+http://www.mdcbowen.org/cobb/archives/002952.html
+http://www.mde.net/newsletter/may1_04/
+http://www.mde.state.md.us/CitizensInfoCenter/FishandShellfish/home/index.asp
+http://www.mdflora.org/placesatrisk/crabtree.html
+http://www.mdgop.org/site/apps/nl/content2.asp?c=6oIKKZMFF&b=32695&ct=118802
+http://www.mdisfun.org/about_md_tourism/sm_associations.asp
+http://www.mdlinx.com/EmergencyMDLinx/index.cfm?subspec_id=250&bt=todaysnews
+http://www.mdlinx.com/InternalMDLinx/index.cfm?subspec_id=161&bt=todaysnews
+http://www.mdlinx.com/heartlinx/index.cfm?subspec_id=149&bt=todaysnews
+http://www.mdlinx.com/psychlinx/index.cfm
+http://www.mdm.org.my/archived_articles.php?newsID=5&archived=yes
+http://www.mdn.org/1996/STORIES/MENTAL01.HTM
+http://www.mdna.com/press/medicap8.html
+http://www.mdng.com/departments/sept_oct2003/cover.html
+http://www.mdpme.com/moral.htm
+http://www.mdrc.org/area_issue_10.html
+http://www.mdschoolofdoggrooming.com/ownertimwray/
+http://www.mdsupport.org/clinic/sonkinsession1.html
+http://www.mdvma.org/classifieds/classifieds.shtml
+http://www.mdx.ac.uk/runnymede/interview.htm
+http://www.mdx.ac.uk/www/study/6bioh.htm
+http://www.mdx.ac.uk/www/study/SSHglo.htm
+http://www.mdx.ac.uk/www/study/Spider.htm
+http://www.mdx.ac.uk/www/study/arcolive.htm
+http://www.mdx.ac.uk/www/study/sshglo.htm
+http://www.mdx.ac.uk/www/study/xmad.htm
+http://www.mdx.ac.uk/www/study/xtho.htm
+http://www.me.pdx.edu/~gerry/nmm/mfiles/
+http://www.me.ucsb.edu/dept_site/student_info/grad_courses.html
+http://www.me.utexas.edu/~jensen/ORMM/omie/computation/unit/invent_add/det_none.html
+http://www.me3.org/issues/climate/mninterfaith.html
+http://www.mea.com.lb/cedarmiles/conditions.htm
+http://www.mead.ch/htm/ch/bios_texte/Crypto05_text.html
+http://www.meals-on-wheels.ca/services/meals.cfm
+http://www.meaning.ca/articles/meaning_esl_students.html
+http://www.meaning.ca/articles/presidents_column/print_copy/new_algebra.htm
+http://www.meaningoflife.i12.com/suffering.htm
+http://www.meansbusiness.com/Finance-and-Profitability-Books/Staying-Wealthy.htm
+http://www.meansbusiness.com/Ideas_122600.asp
+http://www.meansbusiness.com/Organizing-Work-and-People-Books/Understanding-Organizations.htm
+http://www.meansbusiness.com/ideas_archive.asp
+http://www.meansbusiness.com/mbsite/press.asp
+http://www.meatindueseason.org/newbold/or/harlot/harlot6.html
+http://www.meatprocess.com/productnews/productpresentation.asp?id=207
+http://www.meccapixel.com/archives/000132.php
+http://www.meccsa.org.uk/conference/accepted-papers.html
+http://www.mecda.org/
+http://www.mecep.org/report-layoff/Layoff_report.htm
+http://www.mech.utah.edu/~rusmeeha/labNotes/fatigue.html
+http://www.mechanicalcat.net/richard/log/Games
+http://www.mechanicalmusicpress.com/history/articles/eurotrip.htm
+http://www.med-electronics.com/doppler_n.html
+http://www.med-help.net/First-Aid.htm
+http://www.med.cornell.edu/news/press/2004/05_25_04.html
+http://www.med.govt.nz/buslt/compliance/balance/balance-11.html
+http://www.med.govt.nz/irdev/elcom/keyissues/keyissues-03.html
+http://www.med.govt.nz/irdev/elcom/keyissues/keyissues.html
+http://www.med.govt.nz/pbt/infotech/ictinclusion/ictinclusion-03.html
+http://www.med.harvard.edu/chge/textbook/toxic/organic/reading_3.htm
+http://www.med.miami.edu/communications/som_news/index.asp?id=15
+http://www.med.miami.edu/psychiatry/Psychol.html
+http://www.med.monash.edu.au/psych/research/rda/
+http://www.med.nus.edu.sg/lilly/P_Medviews.htm
+http://www.med.sc.edu:1081/prodplacementstudy.htm
+http://www.med.stanford.edu/osa/publicservice/green.team/week7/main.html
+http://www.med.ucla.edu/modules/wfsection/article.php?articleid=97
+http://www.med.ufl.edu/oea/cc/duff.html
+http://www.med.ufl.edu/ortho/mspathcdreview.htm
+http://www.med.umich.edu/1libr/aha/aha_parkinsn_crs.htm
+http://www.med.umich.edu/1libr/pa/pa_wc10year_hhg.htm
+http://www.med.umich.edu/1libr/wha/wha_parkinsn_crs.htm
+http://www.med.umich.edu/1libr/yourchild/enuresis.htm
+http://www.med.umich.edu/cvc/adult/prefail2.htm
+http://www.med.umich.edu/depression/donations.htm
+http://www.med.umich.edu/obgyn/smartmoms/labor/labor/beginning.htm
+http://www.med.umich.edu/opm/newspage/2002/dirtyair.htm
+http://www.med.umich.edu/opm/newspage/2003/patienttransfer.htm
+http://www.med.umich.edu/opm/newspage/2003/quitsmoking.htm
+http://www.med.umich.edu/opm/newspage/2005/patientsafetykids.htm
+http://www.med.umich.edu/prmc/directions.htm
+http://www.med.unc.edu/~nupam/prince1.html
+http://www.med.und.nodak.edu/bimd/atkinson.html
+http://www.med.und.nodak.edu/bimd/text_anatomy_courses.htm
+http://www.med.und.nodak.edu/depts/fammed/SportsMed/alumni.htm
+http://www.med.upenn.edu/mstp/thesis_student.html
+http://www.med.uwo.ca/physpharm/courses/medsweb/L4Aud/m4aud.swf
+http://www.med.wayne.edu/intmed/ishib.asp
+http://www.medadvising.ku.edu/interviews.shtml
+http://www.medalia.net/Faq.html
+http://www.medaloffreedom.com/RalphBunche.htm
+http://www.medalofhonor.com/KoreanCampaign1871.htm
+http://www.medalofhonor.com/Sgt.York.htm
+http://www.medeleq.com.au/?ld='General'
+http://www.medem.com/medlb/article_detaillb.cfm?article_ID=ZZZH31JDJMC&sub_cat=74
+http://www.medeng.net/
+http://www.medford.k12.ma.us/tech/tu.htm
+http://www.medformation.com/ac/patiented.nsf/page/kneesuccess
+http://www.medhelp.org/nadf/nadf11.htm
+http://www.medhunters.com/articles/headscarvesAndHospitality.html
+http://www.medhunters.com/articles/walkThisWay.html
+http://www.medhunters.com/job/9118.html
+http://www.medhunters.com/jobs/bmu.html
+http://www.medhunters.com/nursing-jobs/bmu.html
+http://www.medhunters.com/queryResult/jobQuery/nurseManagerAmbulatoryCare/page1.html
+http://www.media-access.com/resources.html
+http://www.media-access.com/whatis.html
+http://www.media-awareness.ca/english/issues/stereotyping/women_and_girls/women_girls.cfm
+http://www.media-awareness.ca/english/issues/violence/effects_media_violence.cfm
+http://www.media-awareness.ca/english/parents/television/talking_to_kids_tv.cfm
+http://www.media-awareness.ca/english/resources/educational/handouts/crime/crime_not_black_and_white.cfm
+http://www.media-awareness.ca/english/resources/special_initiatives/toolkit_resources/tipsheets/pitching_story.cfm
+http://www.media-ecology.org/publications/proceedings/v2/flight_of_minerva's_owl.html
+http://www.media-general.com/reports/presentations/conf_calls/jan27_05_remarks.htm
+http://www.media-strategies.com/updatevol2.htm
+http://www.media-visions.com/itv-usability.html
+http://www.media-watch.org/articles/0799/
+http://www.media-watch.org/articles/0799/subject.html
+http://www.media.anglican.com.au/tma/2003/12/cleary.html
+http://www.media.rice.edu/media/NewsBot.asp?MODE=VIEW&ID=3374&SnID=932236771
+http://www.media.rice.edu/media/NewsBot.asp?MODE=VIEW&ID=7420&SnID=762166156
+http://www.mediabistro.com/articles/cache/a170.asp
+http://www.mediabistro.com/articles/cache/a3746.asp
+http://www.mediabistro.com/bbs/cache%5Ct19616_1.asp
+http://www.mediabistro.com/fishbowlDC/television/donaldson_network_news_is_dead_20722.asp
+http://www.mediabistro.com/fishbowlLA/on/estrich_hopping_mad_at_mike_kinsley_4033.asp
+http://www.mediabistro.com/fishbowldc/
+http://www.mediabistro.com/tvnewser/archive/2004_10_23_archive.asp
+http://www.mediabistro.com/tvnewser/cbs/evening_news_viewers_would_rather_4599.asp
+http://www.mediacen.navy.mil/vi/scan.htm
+http://www.mediachance.com/dvdlab/Help/burning.htm
+http://www.mediachance.com/dvdlab/Helppro/burning.htm
+http://www.mediachannel.org/atissue/sample4/index.shtml
+http://www.mediachannel.org/reform/indy114.php
+http://www.mediachannel.org/views/dissector/affalert232.shtml
+http://www.mediacircus.net/election.html
+http://www.mediacircus.net/scarymovie.html
+http://www.mediacollege.com/employment/television/
+http://www.mediacy.com/offices.htm
+http://www.mediadomain.com/cgi-bin/netforum/gl/a.cgi/3-68
+http://www.mediageek.org/archives/2004_06.html
+http://www.mediageneral.com/reports/presentations/conf_calls/jan27_05_remarks.htm
+http://www.mediageneral.com/reports/presentations/vcu/vcu_speech.htm
+http://www.mediainfo.com/eandp/news/article_display.jsp?vnu_content_id=1000579414
+http://www.mediajobsearchcanada.ca/job_opportunities_magazine.asp
+http://www.mediajobsearchcanada.com/job_opportunities_magazine.asp
+http://www.medialens.org/blog/archives/00000099.htm
+http://www.medialens.org/cogitations/040430_COG_Beyond_Indifference.HTM
+http://www.medialit.org/reading_room/article277.html
+http://www.mediamatic.net/article-200.5740.html
+http://www.mediamatic.net/article-200.5768.html
+http://www.mediamatic.net/article-200.5779.html
+http://www.mediamatic.net/article-200.5793.html&q_keyword=200.260
+http://www.mediamatic.net/article-200.5793.html&q_theme=200.260
+http://www.mediamatic.net/article-200.5847.html
+http://www.mediamatic.net/article-200.5847.html&q_keyword=200.229
+http://www.mediamatic.net/article-200.5885.html&q_keyword=200.230
+http://www.mediamatic.net/article-200.8574.html&q_keyword=200.262
+http://www.mediaminer.org/fanfic/view_st.php/85140
+http://www.medianet-ny.com/pricing.htm
+http://www.mediarelations.ksu.edu/WEB/News/InView/110404upclose.html
+http://www.mediarelations.ksu.edu/WEB/News/NewsReleases/pethealth.html
+http://www.mediascope.org/pubs/ntvs.htm
+http://www.mediascope.org/whtwedo/evnts.htm
+http://www.mediascope.org/whtwedo/inits.htm
+http://www.mediasharx.com/index.php/comics/3458
+http://www.mediaspin.com/thefan.html
+http://www.mediate.com/articles/morenoE5.cfm
+http://www.mediathatmattersfest.org/mtm04/index.php
+http://www.mediathatmattersfest.org/mtm04/media/novela_novela.php
+http://www.mediationuk.org.uk/template.asp?lv=1&MenuItemID=22&MenuID=1
+http://www.mediatransparency.org/people/elliot_abrams.htm
+http://www.mediatrips.com/mt/archives/2004/10/
+http://www.mediatrips.com/mt/archives/2004/10/eminiems_antibu.html
+http://www.mediawar.info/censorednews.htm
+http://www.mediawar.info/censorednews6.htm
+http://www.mediawatch.co.nz/default,422.sm
+http://www.mediaweek.co.uk/articles/2004/10/12/dailytvmarketplace131004/view
+http://www.mediaweek.co.uk/articles/2004/10/19/smallwhitebox
+http://www.mediaweek.co.uk/articles/2004/10/26/bigmouthstrikes
+http://www.mediaweek.co.uk/articles/2004/10/daily-tv-marketplace-20Oct04/view
+http://www.mediaweek.co.uk/articles/2004/10/dailytv-081004/view
+http://www.mediaweek.co.uk/articles/2004/10/tvmarketplace-26sept/view
+http://www.mediaweek.co.uk/articles/2004/10/tvmarketplace-oct21/view
+http://www.mediaweek.co.uk/articles/2004/11/tvbuyers_estimates_111104/view
+http://www.mediaweek.co.uk/articles/2004/11/tvmarketplace-07nov/view
+http://www.mediaweek.co.uk/articles/2004/11/tvmarketplace-3nov/view
+http://www.mediaweek.co.uk/articles/2004/12/tvmarketplace-15dec/view
+http://www.mediaweek.co.uk/articles/2004/6/29/Keepingthebestofbothworlds
+http://www.mediaweek.co.uk/articles/2004/9/07/smokingoutalackofteamworkandproductivityinmysalesdepartment
+http://www.mediaweek.co.uk/articles/folder2005/01/25/brainwavesagenciesembrace
+http://www.medic8.com/healthguide/articles/hibp.html
+http://www.medical.philips.com/main/products/resuscitation/biphasic_technology/waveform_design.html
+http://www.medicalboard.state.ga.us/consumer_faq.html
+http://www.medicalclaimsservice.com/MCSMarketingHome/Privacy.asp
+http://www.medicalclaimsservice.com/mcsmarketinghome/Privacy.asp
+http://www.medicalcomputingtoday.com/0listcme.html
+http://www.medicalconsumers.org/pages/hawking_heart_scans.html
+http://www.medicalhomeinfo.org/screening/vision.html
+http://www.medicalimagingmag.com/issues/articles/2000-12_01.asp
+http://www.medicalnewstoday.com/
+http://www.medicalnewstoday.com/medicalnews.php?newsid=12768
+http://www.medicalnewstoday.com/medicalnews.php?newsid=14146
+http://www.medicalnewstoday.com/medicalnews.php?newsid=20416
+http://www.medicalnewstoday.com/medicalnews.php?newsid=22777
+http://www.medicalnewstoday.com/medicalnews.php?newsid=24494
+http://www.medicalnewstoday.com/medicalnews.php?newsid=24716
+http://www.medicalnewstoday.com/medicalnews.php?newsid=25558
+http://www.medicalnewstoday.com/medicalnews.php?newsid=25674
+http://www.medicalnewstoday.com/medicalnews.php?newsid=26012
+http://www.medicalnewstoday.com/medicalnews.php?newsid=26302
+http://www.medicalnewstoday.com/medicalnews.php?newsid=9385
+http://www.medicalpocketpc.com/software/utilities.shtml
+http://www.medicalresonancetherapymusic.com/05%20International%20Experts/1114%20Alexander%20Reznikov.htm
+http://www.medicalsurveys.net/tips/patient_satisfaction_tip11.htm
+http://www.medicalwellnesscenter.com/Differinquestionsandanswers.htm
+http://www.medicare.gov/Choices/Overview.asp
+http://www.medicare.gov/LongTermCare/Static/Home.asp
+http://www.medicarerights.org/pressrelease200210.html
+http://www.mediccleanair.com/uk/uk21.html
+http://www.medicfirstaid.us/index.php?page_id=48
+http://www.medicine.mcgill.ca/Internal-Med/RVH/cmrinfo/cmrinfo.htm
+http://www.medicine.mcgill.ca/artcell/2000Editorial.htm
+http://www.medicine.mcgill.ca/physio/courses/314A/krnjevic/LECT1.2004.htm
+http://www.medicinebuddha.org/
+http://www.medicinehat.worldweb.com/DrivingTours/8-91.html
+http://www.medicinenet.com/exercise_and_activity/article.htm
+http://www.medicinenet.com/script/main/art.asp?articlekey=15081
+http://www.medicinenet.com/script/main/art.asp?articlekey=19804&page=2
+http://www.medicinenet.com/script/main/art.asp?articlekey=35016
+http://www.medicinenet.com/script/main/art.asp?articlekey=40449
+http://www.medicomm.net/Consumer%20Site/am/iridology.htm
+http://www.medicouncilalcol.demon.co.uk/articles.htm
+http://www.medieval.org/emfaq/misc/whatis.htm
+http://www.medieval.org/music/world/java.html
+http://www.medievalacademy.org/about/bylaws.htm
+http://www.medihealthdme.com/education/diabetes_cleveland.htm
+http://www.medilexicon.com/medicalnews.php?newsid=19747&language=spanish
+http://www.medill.northwestern.edu/~secure/docket/mt/archives/000122.php
+http://www.medill.northwestern.edu/~secure/docket/mt/archives/000151.php
+http://www.medill.northwestern.edu/~secure/docket/mt/archives/000326.php
+http://www.medill.northwestern.edu/~secure/docket/mt/archives/000800.php
+http://www.medimmunol.com/content/3/1/3/abstract
+http://www.meditateinlondon.com/articles/05_simplymantra.htm
+http://www.meditech.com/productbriefs/pages/ProductBriefsCSBH.htm
+http://www.mediterrasian.com/straight_talk_exercise.htm
+http://www.mediterrasian.com/straight_talk_exercise_pf.htm
+http://www.mediumgeek.com/
+http://www.medlib.iupui.edu/faculty/etme99/
+http://www.medlib.iupui.edu/hom/biblio.html
+http://www.medrecinst.com/forum/forum_posts.asp?TID=22&get=last
+http://www.medschoolchat.com/displayarticle196.html
+http://www.medschoolguide.co.uk/forum/archive/index.php/t-3012.html
+http://www.medschoolguide.co.uk/forum/archive/index.php/t-3471.html
+http://www.medschoolguide.co.uk/forum/showthread.php?t=9503&page=12&pp=10
+http://www.medsci.ox.ac.uk/gazette/volume54-1/16/
+http://www.medtronic-ers.com/company/history.cfm
+http://www.medway.gov.uk/index/business/licensing/30964-2.htm
+http://www.medwaycoopbank.com/business_products.htm
+http://www.medwaycoopbank.com/deposit_24_hour_banking.htm
+http://www.medwaycoopbank.com/deposit_checking.htm
+http://www.medword.com/MedwordStore/courses/online_medical_transcription.html
+http://www.medzilla.com/books.html
+http://www.medzilla.com/ptf-1.html
+http://www.meeilaser.com/contact.htm
+http://www.meekercolorado.com/HSociety.htm
+http://www.meer.org/chap4.htm
+http://www.mees.com/postedarticles/oped/a47n36d02.htm
+http://www.meet-an-inmate.com/male/saul-1581.htm
+http://www.meet-an-inmate.com/male/stephano-1831.htm
+http://www.meetingfriendsonline.com/
+http://www.meetinglocators.com/agreement.html
+http://www.meetings-conventions.com/breakingnews.aspx
+http://www.meetingstrategiesworldwide.com/services.php
+http://www.meetlimerickshannon.com/?id=11
+http://www.meetmarketadventures.com/testimonials.php
+http://www.meetup.com/boards/view/viewthread?thread=1255244&pager.offset=20
+http://www.meetup.com/boards/view/viewthread?thread=1266089&pager.offset=10
+http://www.meetup.com/boards/view/viewthread?thread=1405602&pager.offset=0
+http://www.meetup.com/cities/gb/bristol/?offset=80&sort=soon&radius=25&desc=
+http://www.meforum.org/article/270
+http://www.meforum.org/article/277
+http://www.meforum.org/article/651
+http://www.mega-tex.nl/software/cinema4dr9.1.html
+http://www.mega-tex.nl/software/old%20news/softwareupdateII.html
+http://www.megadoc.net/TV/
+http://www.megaproxy.com/
+http://www.megaspin.net/store/viewproduct.asp?pid=b-relop
+http://www.megatokyo.com/
+http://www.megginson.com/blogs/lahso/
+http://www.megstoybox.com/pages/clothing.htm
+http://www.meh.hu/english/activities/briefing/20050505.html
+http://www.mei-fr.org/textes_fondateurs_en.php
+http://www.meib.org/articles/0302_l1.htm
+http://www.meister-artist.com/r.htm
+http://www.mekarn.org/sarec03/toan.htm
+http://www.melanoma.org/PatientInfo.jsp
+http://www.melbourne.catholic.org.au/archbishop/homilies/DHhomily383-20030912.htm
+http://www.melbourne.indymedia.org/news/2004/05/68752_comment.php
+http://www.melbourne.indymedia.org/news/2004/07/73337.php
+http://www.melbourne.indymedia.org/news/?display=x&page=3&category=3
+http://www.melbournear.com/communityprofile.htm
+http://www.melchizedek.com/Blaustein.htm
+http://www.mellesgriot.com/products/machinevision/lef_2.htm
+http://www.mellon.org/arli88.html
+http://www.melnworld.com/englanniksi/legends.php3?id=24
+http://www.melodramatic.com/users/angel_in_chaos
+http://www.melodymakers.de/forum/showpost.php?p=19603&postcount=14
+http://www.melonfarmers.co.uk/bpbarrat.htm
+http://www.melonfarmers.co.uk/cw.htm
+http://www.melonfarmers.co.uk/news1299.htm
+http://www.melonfarmers.co.uk/saindex.htm
+http://www.melonfarmers.co.uk/ssphon05.htm
+http://www.melonfarmers.co.uk/sssatx.htm
+http://www.melonfire.com/community/columns/trog/print.php?id=244
+http://www.meloware.com/vitaphone/vit7.htm
+http://www.melta.org.my/ET/1999/main3.html
+http://www.mem-algeria.org/actu/ministre/allocutions/james_a_baker_6-4_eng.htm
+http://www.memagazine.org/backissues/march99/departments/washington/washington.html
+http://www.memagazine.org/backissues/oct99/features/molding/molding.html
+http://www.memagazine.org/supparch/medes04/inscale/inscale.html
+http://www.membergate.com/products/item7.cfm
+http://www.members.aol.com/_ht_a/sk8swthazlzzrds2/page1.html
+http://www.members.aol.com/drangus01/Torvaldsland.html
+http://www.members.aol.com/mbtexts/44.html
+http://www.members.aol.com/sk8swthazlzzrds2/page1.html
+http://www.members.aol.com/wwanglia/gowen1.htm
+http://www.members.cox.net/t.s/data.html
+http://www.members.lycos.co.uk/thecavefreeware/spy.html
+http://www.members.optusnet.com.au/~hsadler/beaglediary.html
+http://www.members.shaw.ca/MANweb/Pretzel.html
+http://www.members.shaw.ca/creatingcomics/writers.html
+http://www.memory-key.com/news/2004/news_2004Oct.htm
+http://www.memory-project.org/portraitsforchildren.html
+http://www.memphis.edu/egypt/artifact.html
+http://www.memphisflyer.com/content.asp?ID=2834&onthefly=1
+http://www.memphisguide.com/directory/dir00168.htm
+http://www.memri.de/uebersetzungen_analysen/laender/aegypten/egypt_election_20_05_05.html
+http://www.memri.de/uebersetzungen_analysen/laender/aegypten/egypt_wife_II_11_01_02.html
+http://www.memri.de/uebersetzungen_analysen/laender/persischer_golf/irak_exercise_27_08_04.html
+http://www.menafn.com/Glossary/bfglosf.asp
+http://www.menc.org/guides/explor/explor1.html
+http://www.menc.org/information/advocate/facts.html
+http://www.menc.org/information/trim/advisors_sampleCnB.html
+http://www.menc.org/networks/rnc/Bergee-Report.html
+http://www.menc.org/publication/books/otl.html
+http://www.mencap.org.uk/html/about_mencap/changing_attitudes.htm
+http://www.mendiseasestcm.com/translatione.htm
+http://www.mendocino.com/
+http://www.meniett.com/stripcontent.php?parent_file=/testimonial_patricia_borello_monie.html
+http://www.meningitis-trust.org/media/media_case_studies.php?category=41&sub=147
+http://www.meningitis.org/sect5/subsect2
+http://www.menke.com/RestoringAmericanDream.htm
+http://www.menopause.org.au/education/educationQandA.asp
+http://www.mensetmanus.net/windpower/comment.shtml
+http://www.menshealth.co.uk/talk/thread.phtml/post644707/
+http://www.menshealth.co.uk/talk/thread.phtml/post697820/
+http://www.menshealth.co.uk/talk/thread.phtml/post802891/
+http://www.menshealth.com/cda/article/0,2823,s1-141-0-0-2000,00.html
+http://www.menshealth.com/cda/article/printer_friendly/0,2826,s1-141-0-0-2000,00.html
+http://www.mensjournal.com/healthFitness/0412/poll_trainer.html
+http://www.mensnewsdaily.com/archive/s/salvato/2005/salvato063005.htm
+http://www.mensresourcecenter.org/badguys.html
+http://www.menstruation.com.au/menstrualproducts/testimonials.html
+http://www.mental-health-matters.com/articles/article.php?artID=503
+http://www.mental-health-matters.com/selfhelp/r_employment.php
+http://www.mentalhealth.com/books/mama/mama-20.html
+http://www.mentalhealth.com/mag1/p5m-dp05.html
+http://www.mentalhealth.org/cre/ch4_need_mental_health.asp
+http://www.mentalhealth.org/highlights/January2005/weight/links.asp
+http://www.mentalhealthcare.org.uk/pharmacist/
+http://www.mentalhealthcare.org.uk/schizophrenia/carer/handlingsymptoms/inactivity/
+http://www.mentalhealthcommission.gov/reports/FinalReport/FullReport-05.htm
+http://www.mentalhelp.net/poc/view_doc.php?id=30&type=book&cn=66
+http://www.mentaljokes.com/bad_boys.html
+http://www.mentalskills.co.uk/articles/featured_article.php?docid=14
+http://www.mentor-media.com/
+http://www.menweb.org/backfutu.htm
+http://www.menweb.org/keenivu.htm
+http://www.menweb.org/mcdermot.htm
+http://www.menz.org.nz/index.php?m=200412
+http://www.mep.org/
+http://www.mepartnership.org/protectourwater/pow_whatsnew.asp?new_id=763
+http://www.mepc.org/public_asp/forums_briefs/3-7-03.asp
+http://www.meprcouncil.org/jobbank/posting.asp?ID=208
+http://www.meps.ahrq.gov/papers/hl10_99-0031/hl10.htm
+http://www.meps.ahrq.gov/papers/st4/stat04.htm
+http://www.merceric.com.au/summary.jhtml/dynamic/idContent/1177130
+http://www.merceric.com/attachment.dyn?idContent=1167320&idFile=144711
+http://www.merceric.com/summary.jhtml/dynamic/idContent/1167320
+http://www.merchantaccount.com/services.html
+http://www.merchantinter.net/hardwaresolutions/networks/networks/help/printers.htm
+http://www.merck.com/mmhe/sec01/ch007/ch007e.html
+http://www.merck.com/mmhe/sec03/ch025/ch025a.html
+http://www.merck.com/mmhe/sec05/ch067/ch067b.html
+http://www.merck.com/mmhe/sec14/ch176/ch176a.html
+http://www.merck.com/mmhe/sec20/ch231/ch231a.html
+http://www.merck.com/mmhe/sec24/ch299/ch299f.html
+http://www.merck.com/mrkshared/mm_geriatrics/sec2/ch18.jsp
+http://www.merck.com/mrkshared/mmanual/section19/chapter260/260h.jsp
+http://www.merck.com/mrkshared/mmg/sec11/ch92/ch92a.jsp
+http://www.merck.com/mrl/research/areas/amcs.html
+http://www.merck.com/newsroom/press_releases/corporate/2004_0427.html
+http://www.merckmedicus.com/pp/us/hcp/thcp_dorlands_content.jsp?pg=/ppdocs/us/common/dorlands/dorland/dmd-a-045.htm
+http://www.merckmedicus.com/pp/us/hcp/thcp_dorlands_content.jsp?pg=/ppdocs/us/common/dorlands/dorland/dmd-m-033.htm
+http://www.merckmedicus.com/pp/us/hcp/thcp_dorlands_content.jsp?pg=/ppdocs/us/common/dorlands/dorland/dmd-m-040.htm
+http://www.merckmedicus.com/pp/us/hcp/thcp_dorlands_content.jsp?pg=/ppdocs/us/common/dorlands/dorland/dmd-p-063.htm
+http://www.merckvetmanual.com/mvm/htm/bc/25300.htm
+http://www.mercola.com/2000/dec/3/sucralose_dangers.htm
+http://www.mercola.com/2000/sep/17/soy_brain.htm
+http://www.mercola.com/2001/mar/10/immigrants.htm
+http://www.mercola.com/2001/mar/24/coconut_oil.htm
+http://www.mercola.com/2001/may/19/estrogen.htm
+http://www.mercola.com/2001/sep/22/blood_clot_risks.htm
+http://www.mercola.com/2001/sep/29/bioterrorism.htm
+http://www.mercola.com/2002/apr/24/treadmills.htm
+http://www.mercola.com/2002/feb/23/tmj.htm
+http://www.mercola.com/2002/feb/23/vitamin_d_deficiency.htm
+http://www.mercola.com/2002/jan/26/baby_aspirin.htm
+http://www.mercola.com/2003/feb/1/gm_fish.htm
+http://www.mercola.com/2003/jul/26/avoid_wheat.htm
+http://www.mercola.com/2004/feb/18/drug_companies.htm
+http://www.mercola.com/2004/oct/30/flu_vaccine.htm
+http://www.mercola.com/2005/jan/5/exercise_deficiency.htm
+http://www.mercola.com/article/milk/no_milk.htm
+http://www.mercola.com/article/sleep.htm
+http://www.mercola.com/article/sugar/sugar_cancer.htm
+http://www.mercola.com/forms/total_health_book.htm
+http://www.mercola.com/nst/explain.htm
+http://www.mercury.com/it/customers/successes/royal-caribbean.html
+http://www.mercurynews.com/mld/mercurynews/news/special_packages/iraq/weblog/
+http://www.mercy.net/healthinfo/archive/041124.asp
+http://www.mercycare.org/childrenandfever.aspx
+http://www.mercycorps.org/items/1150/
+http://www.mercydesmoines.org/aboutMercy/directions.asp
+http://www.mercyhealthplans.com/savvyshopper/healthheadlines/020716.aspx
+http://www.mercyhealthplans.com/savvyshopper/healthheadlines/041124.aspx
+http://www.mercyhospital.com/whatsnew/
+http://www.meredithmanor.com/features/articles/faith/pants.asp
+http://www.meredy.com/nursetips/holidayhealthtips.html
+http://www.meresearch.org.uk/friends/recent.html
+http://www.mergerplace.com/mp/visitor/buyers/search/results/brloc/us:ny
+http://www.mergerplace.com/mp/visitor/buyers/view/29857
+http://www.mergers-acquisitions.com/books.html
+http://www.meridian-technology.com/full_time/Financial_Aid.asp
+http://www.meridianeng.com/airpolld.html
+http://www.meridiangrp.net/articles/news8.html
+http://www.meridianmagazine.com/books/040414deliver.html
+http://www.merip.org/mer/mer215/215_bennis.html
+http://www.merip.org/mer/mer220/220_alkadiri.html
+http://www.merip.org/mero/mero011104.html
+http://www.merip.org/mero/mero043002.html
+http://www.merip.org/mero/mero070700.html
+http://www.merit.edu/mail.archives/nanog/2004-07/msg00102.html
+http://www.merit.unimaas.nl/phd/coursework.htm
+http://www.meritcare.com/jobs/benefits.asp
+http://www.meritcare.com/specialties/more/sleep/
+http://www.meriter.com/mhs/hospital/emergency.htm
+http://www.merlinwebdesign.com/client_sites.shtml
+http://www.merlyn.demon.co.uk/gravity1.htm
+http://www.merp.com/essays/MichaelMartinez/michaelmartinezsuite101essay113
+http://www.merricks.com/healthyfoal.html
+http://www.merrimackcanoes.com/carry_canoe.htm
+http://www.merrycoz.org/student/BESTGIRL.HTM
+http://www.mersenne.org/
+http://www.mersenne.org/ips/
+http://www.mersenne.org/prime.htm
+http://www.merthyrmike.free-online.co.uk/dowlais.htm
+http://www.merton.ox.ac.uk/subjects/music.html
+http://www.meryl.net/
+http://www.meryl.net/blog/archives/2000_08.php
+http://www.mesa.edu.au/
+http://www.mesa.edu.au/forums/topic.asp?ARCHIVE=true&TOPIC_ID=399
+http://www.mesalek.com/colo/facts.html
+http://www.mesart.com/invitations/EliseSmithBoston.shtml
+http://www.mesart.com/invitations/KellySmithBoston.shtml
+http://www.mesart.com/invitations/RhondaM.SmithSomerville.shtml
+http://www.mesart.com/invitations/StephenSmithBoston.shtml
+http://www.mesolink.org/mesothelioma-news/04-06-05.html
+http://www.mesomorphosis.com/articles/haycock/medically-supervised-steroid-use.htm
+http://www.mesp.wisc.edu/abroad.htm
+http://www.messefrankfurt.com/congresscenter/en/meta_ekb.html
+http://www.messefrankfurt.com/conventure/en/home_ekb.html
+http://www.messenger-inquirer.com/news/kentucky/8488541.htm
+http://www.messf.gouv.qc.ca/securite-du-revenu/programmes-mesures/assistance-emploi/prestation-de-base_en.asp
+http://www.met.tamu.edu/class/Metr201/Ch10MidlatitudeCyclones.html
+http://www.meta-library.net/iftm/demdec-body.html
+http://www.meta-religion.com/Extremism/White_extremism/Aryan_republican_army/white_supremacist_bank.htm
+http://www.meta-religion.com/New_religious_groups/Groups/New_Age/way_international.htm
+http://www.meta-religion.com/Psychiatry/The_Paranormal/does_recurrent_isolated.htm
+http://www.metabridge.com/assoc/creatler.html
+http://www.metacog.com/problems.htm
+http://www.metacritic.com/film/titles/aloneinthedark
+http://www.metacritic.com/film/titles/collateraldamage
+http://www.metacritic.com/film/titles/meangirls/
+http://www.metacritic.com/music/artists/destinyschild/destinyfulfilled
+http://www.metacritic.com/music/artists/destinyschild/destinyfulfilled/
+http://www.metacritic.com/video/titles/englishpatient
+http://www.metafilter.com/
+http://www.metafilter.com/contest_results.mefi
+http://www.metafilter.com/mefi/38799
+http://www.metafilter.com/mefi/42657
+http://www.metafilter.com/mefi/42711
+http://www.metafuture.org/Books/Questions_and_Answers_for_the_busy_manager.htm
+http://www.metal-observer.com/articles.php?lid=1&sid=6&id=5605
+http://www.metal-powder.net/features/archive/feature_jun05.html
+http://www.metal-tiger.com/Wu_Tang_PCA/PakuaTapeSale.html
+http://www.metalasylum.com/ragingbull/movies/halloween.html
+http://www.metalevents.com/eventMain.asp?id=AluminiumIII
+http://www.metalgearsolid.pl/print.php?what=infopage&id=134
+http://www.metalupdate.com/
+http://www.metamodels.com/maps/business,sales.html
+http://www.metamorphosis.com/index2.html
+http://www.metamorphozis.com/content_articles/seo/All_About_Links_Interview_with_link_building_expert.php
+http://www.metaphoria.org/ac4t9503.html
+http://www.metaphysicalsolutions.com/ordernow.htm
+http://www.metaresearch.org/media%20and%20links/press/on-improbable-claims.asp
+http://www.metaweb.com/wiki/wiki.phtml?title=Monmouth
+http://www.metaweb.com/wiki/wiki.phtml?title=Monmouth&printable=yes
+http://www.methodistwales.org.uk/South/Information/history/
+http://www.methodsandtools.com/archive/archive.php?id=18
+http://www.methuselahfoundation.org/
+http://www.metimes.com/articles/normal.php?StoryID=20041110-085834-5258r
+http://www.metlife.com/Applications/Corporate/WPS/CDA/PageGenerator/0,1674,P1174,00.html
+http://www.metlife.com/Applications/Corporate/WPS/CDA/PageGenerator/0,1674,P1524,00.html
+http://www.metlinkmelbourne.com.au/latest_news/news_events.php
+http://www.metmuseum.org/special/Heritage_of_Power/Heritage_of_Power_more.htm
+http://www.metmuseum.org/toah/hd/aams/hd_aams.htm
+http://www.metmuseum.org/toah/hd/apol/hd_apol.htm
+http://www.metmuseum.org/toah/hd/rgls/hd_rgls.htm
+http://www.metmuseum.org/toah/ho/08/sfw/hod_1978.412.322.htm
+http://www.metmuseum.org/toah/ho/09/sfs/hod_2001.408.htm
+http://www.metmuseum.org/toah/ht/11/sfs/ht11sfs.htm
+http://www.metoffice.com/climate/uk/interesting/13oct02rain.html
+http://www.metoffice.com/climate/uk/interesting/27oct2002storm.html
+http://www.metoffice.com/climate/uk/interesting/7_8july2004.html
+http://www.metoffice.com/climate/uk/location/england/
+http://www.metone.com/faq.htm
+http://www.metone.com/questions_answers.htm
+http://www.metricmethods.com/whatistheSI.html
+http://www.metro-watch.com/news.htm
+http://www.metro.co.uk/metro/interviews/interview.html?in_page_id=8&in_interview_id=1013
+http://www.metroactive.com/papers/cruz/06.27.01/wives-0126.html
+http://www.metroactive.com/papers/metro/04.12.01/mpnews2-0115.html
+http://www.metrochamber.com/economic/manufacturing.asp
+http://www.metrocouncil.org/planning/stcroixvalley/preserving_re.htm
+http://www.metrofashion.com/dirq_quickly_rush.html
+http://www.metrojersey.com/pets_animals.htm
+http://www.metrokc.gov/assessor/PersonalProp/PersPropFAQ.htm
+http://www.metrokc.gov/ddes/perminfo/
+http://www.metrokc.gov/exec/news/2004/102004.htm
+http://www.metrokc.gov/health/famplan/birthcontrol/
+http://www.metrokc.gov/kcdot/news/myr/myr4.htm
+http://www.metrolinktrains.com/news_update/detail.php?news_id=127833
+http://www.metronc.com/issues/issue09_03/MUCS/mucsq.html
+http://www.metronet.co.uk/cultv/champions.htm
+http://www.metroplexatheists.org/
+http://www.metropolis-network.net/getFile.php?rubr=prod&doc=224&t=53
+http://www.metropolismag.com/cda/events.php?region=Competitions
+http://www.metropolismag.com/cda/story.php?artid=370
+http://www.metropolismag.com/cda/story.php?artid=393
+http://www.metropolismag.com/html/content_0401/ob/ob3.html
+http://www.metropulse.com/dir_suncity/dir_calendar/cal_guide.html
+http://www.metrotimes.com/editorial/story.asp?id=3259
+http://www.metrotimes.com/editorial/story.asp?id=7079
+http://www.metroweekly.com/feature/?ak=1639
+http://www.metroweekly.com/gauge/?ak=352
+http://www.metroweekly.com/gauge/?ak=430
+http://www.metrowellnez.com/
+http://www.metrowerks.com/MW/download/request.asp?action=dl&product=CW68k3.2
+http://www.metservice.co.nz/default/help.php?subject=analysis
+http://www.metservice.co.nz/default/index.php?static=1997spring2
+http://www.mettaforest.org/Article/The%20Economy%20of%20Gifts.htm
+http://www.metwashairports.com/employment/jobs/05-081.htm
+http://www.metzler.us/metzler/sources/sou0005.html
+http://www.metzler.us/wilbourne/sources/sou0000.html
+http://www.meuse-argonne.com/Randys%20Webpages/features__neuvilly_church_and_canteen.htm
+http://www.mewburn.com/meipef-2.htm
+http://www.mewburn.com/meipef.htm
+http://www.mexconnect.com/mex_/dt/dtcarstickers.html
+http://www.mexconnect.com/mex_/dt/dtclothing300.html
+http://www.mexconnect.com/mex_/dtbuses.html
+http://www.mexconnect.com/mex_/history/jtuck/jtlcardenas.html
+http://www.mexconnect.com/mex_/recipes/puebla/kgtacos1.html
+http://www.mexicodesconocido.com/english/naturaleza/flora/detalle.cfm?idsec=10&idsub=33&idpag=1790
+http://www.mexicodesconocido.com/english/naturaleza/otras_areas_naturales_prot/detalle.cfm?idsec=9&idsub=0&idpag=2056
+http://www.mexicomike.com/stories/why_live.htm
+http://www.mext.go.jp/english/kaihatu/earth/resume/framworkdocument_e.htm
+http://www.mext.go.jp/english/org/struct/040.htm
+http://www.meyerbos.com/basic/search.cgi?searchTerms=SOVIET%20UNION
+http://www.meyerbos.com/search.cgi?searchTerms=SOVIET%20UNION&restrict=Category%20Field
+http://www.mezzoblue.com/archives/2004/09/16/minheight_fi/index.php
+http://www.mezzoblue.com/dailies/
+http://www.mfa.gov.il/MFA/History/Early%20History%20-%20Archaeology/Bethsaida-%20An%20Ancient%20Fishing%20Village%20on%20the%20shore
+http://www.mfa.gov.il/mfa/peace%20process/guide%20to%20the%20peace%20process/madrid%20letter%20of%20invitation
+http://www.mfa.gov.pl/index.php?page=1020000001
+http://www.mfc.org/contents/article.asp?id=1363
+http://www.mfe.govt.nz/issues/resource/participation/designations.html
+http://www.mfe.govt.nz/publications/about/soi/2003/part-one-delivering.html
+http://www.mfe.govt.nz/publications/air/proposed-prohibited-standards/prohibited-standards.html
+http://www.mfe.govt.nz/publications/waste/packaging-accord-action-plans-jul04/plan-glass.html
+http://www.mfgquote.com/profiles/Membrane-Switches-United-States.html
+http://www.mfgquote.com/profiles/Swiss-Turning-Ohio.html
+http://www.mfpa.org/reports/report10925856100.htm
+http://www.mfso.org/Hankins.html
+http://www.mfu-upm.com/english/index.cfm?id=115
+http://www.mg.co.za/articlePage.aspx?articleid=196723&area=/breaking_news/breaking_news__international_news/
+http://www.mgain.org/project.html
+http://www.mgb.gov.ph/response/miningissues.htm
+http://www.mgeurts.tmfweb.nl/carmlyr.htm
+http://www.mgfcentre.com/interior.htm
+http://www.mggpillai.com/sections.php3?op=viewarticle&artid=9093
+http://www.mglff.com/2003/031803pr.htm
+http://www.mgmt.utoronto.ca/~baum/mgt2005/valuable.html
+http://www.mgnoc.com/_overlay/Archives/land_speed_record.htm
+http://www.mgoblue.com/document_display.cfm?document_id=6512
+http://www.mgoblue.com/document_display.cfm?document_id=6512&season_id=136
+http://www.mgs4u.com/president2.htm
+http://www.mgt.uea.ac.uk/external.asp
+http://www.mgwater.com/antodaya.shtml
+http://www.mhagstl.org/War_Related_Stress.htm
+http://www.mhamc.org/html/special28.cfm
+http://www.mhcs.health.nsw.gov.au/health-public-affairs/mhcs/publications/5610.html
+http://www.mhcs.health.nsw.gov.au/health-public-affairs/mhcs/publications/5850.html
+http://www.mhcs.health.nsw.gov.au/health-public-affairs/mhcs/publications/600.html
+http://www.mhec.org/aboutmhec.html
+http://www.mhhe.com/biosci/pae/es_map/index.mhtml
+http://www.mhhe.ltsn.soton.ac.uk/news/events.asp?period=2005
+http://www.mhmonline.com/defaultdirectory.asp
+http://www.mhmonline.com/nID/1048/iID/3843/MHM/viewStory.asp
+http://www.mhmonline.com/nID/1087/iID/7275/MHM/viewStory.asp
+http://www.mhmonline.com/nID/1200/iID/20141/MHM/viewStory.asp
+http://www.mhmonline.com/nID/1679/iID/6267/MHM/viewStory.asp
+http://www.mhmonline.com/nID/1862/iID/6586/MHM/viewStory.asp
+http://www.mhmonline.com/nID/2058/iID/20500/MHM/viewStory.asp
+http://www.mhmonline.com/nID/2286/iID/20760/MHM/viewStory.asp
+http://www.mhmonline.com/nID/2555/iID/7215/MHM/viewStory.asp
+http://www.mhmonline.com/nID/2646/iID/20340/MHM/viewStory.asp
+http://www.mhmonline.com/nID/2939/iID/20871/MHM/viewStory.asp
+http://www.mhmonline.com/nID/3204/iID/7595/MHM/viewStory.asp
+http://www.mhmonline.com/nID/3819/MHM/viewStory.asp
+http://www.mhmonline.com/nID/3886/iID/20901/MHM/viewStory.asp
+http://www.mhr-viandes.com/en/docu/docu/d0000272.htm
+http://www.mhs.mb.ca/docs/pageant/20/lorddufferintrail.shtml
+http://www.mhsc.ca/encyclopedia/contents/D5350ME.html
+http://www.mhsc.org.uk/NVQ/Leadership/using_resources.htm
+http://www.mhsc.org.uk/NVQ/Leadership/working_people.htm
+http://www.mhwcom.com/pages/listeningtalking.html
+http://www.mi5.gov.uk/output/Page167.html
+http://www.miafacts.org/bones.htm
+http://www.miami.com/mld/miamiherald/living/columnists/steve_rothaus/qa_forum.htm?forumId=660&mode=display&action=&type=list&pageNo=4
+http://www.miami.muohio.edu/documents_and_policies/bulletin02/courses/eng.cfm
+http://www.miami.muohio.edu/documents_and_policies/bulletin04/courses/chm.cfm
+http://www.miami.muohio.edu/documents_and_policies/bulletin04/ham_midd.cfm
+http://www.miami.muohio.edu/documents_and_policies/bulletin06/courses/eng/
+http://www.miami.muohio.edu/president/presidentsjournal/journal_entry4.cfm
+http://www.miamialum.org/pages/membershipbenefitsandservices.htm
+http://www.miamicityballet.org/mcbdev/go_sponsorship.shtml
+http://www.miamidolphins.com/history/halloffamers/halloffamers_shula_d.asp
+http://www.miaminewtimes.com/issues/2004-12-30/kulchur.html
+http://www.miamiproject.med.miami.edu/x244.xml
+http://www.miamiredcross.org/international.html
+http://www.miamisunpost.com/business.htm
+http://www.miamitodaynews.com/news/031204/story1.shtml
+http://www.mic.go.kr/eng/mic/mic_fun.jsp
+http://www.mica.edu/academic/hs_students_precollege.cfm
+http://www.michael-tippett.com/operaintroknoteng.htm
+http://www.michaelbarrier.com/Capsules/Cock_Robin/CockRobin_capsule.htm
+http://www.michaelbarrier.com/Commentary/Incredibles/Incredibles.htm
+http://www.michaelbloodmeteorites.com/GMPhysAnth.html
+http://www.michaelcornell.com/featured.html
+http://www.michaelcovel.com/archives/cat_systems_trading.html
+http://www.michaeldexter.com/cebit/innovation-howto.htm
+http://www.michaeldvd.com.au/Reviews/Reviews.asp?ID=3630
+http://www.michaelgreer.com/keep_moving.htm
+http://www.michaelheraghty.com/website-findability-sample-section.html
+http://www.michaelholigan.com/Departments/HowTo/HowToPage.asp?ts_id=ath385
+http://www.michaelholigan.com/Departments/HowTo/HowToPage.asp?ts_id=chimcap
+http://www.michaelhowardmp.com/pr040105.htm
+http://www.michaeljennings.blogspot.com/2004_05_16_michaeljennings_archive.html
+http://www.michaelmarshallsmith.com/forum/topic.asp?TOPIC_ID=13&whichpage=2
+http://www.michaelmarshallsmith.com/forum/topic.asp?whichpage=-1&TOPIC_ID=13&REPLY_ID=1016
+http://www.michaelmesser.co.uk/BluesMatters.htm
+http://www.michaelmoore.com/links/index.php
+http://www.michaelmoore.com/mustread/articles/index.php?article=content/20030327-latimes
+http://www.michaelmoore.com/warroom/f911notes/index.php?id=20
+http://www.michaelmoore.com/words/
+http://www.michaelmoore.com/words/index.php?id=1271
+http://www.michaelmoore.com/words/index.php?id=2758
+http://www.michaelmoore.com/words/latestnews/breakingnews/index.php?id=1291
+http://www.michaelmoore.com/words/message/index.php?messageDate=2004-09-06
+http://www.michaelmoore.com/words/message/index.php?messageDate=2004-11-01
+http://www.michaelmoore.com/words/message/index.php?messageDate=2004-12-13
+http://www.michaelnewberry.com/studioupdate/2001-10/
+http://www.michaelnovak.net/
+http://www.michaelraywalker.com/website-marketing.htm
+http://www.michaelspecter.com/ny/2003/2003_02_03_vaccine.html
+http://www.michaelspecter.com/times/1994/1994_03_06_nyt_death.html
+http://www.michaeltotten.com/archives/000698.html
+http://www.michaeltotten.com/archives/000705.html
+http://www.michaeltotten.com/archives/000722.html
+http://www.michaelweiss.org/support.shtml
+http://www.michbar.org/journal/article.cfm?articleID=412&volumeID=31
+http://www.michbusiness.org/
+http://www.michelinag.com/agx/en-US/products/warranty/warranty_us.jsp
+http://www.michener.ca/ce/csu_corpbio_master.php
+http://www.michigan.gov/corrections/0,1607,7-119-9741_33218-96272--,00.html
+http://www.michigan.gov/gov/0,1607,7-168-23442_21981-64915--,00.html
+http://www.michigan.gov/hal/0,1607,7-160-17447_18630_22778-109909--,00.html
+http://www.michigan.gov/mdcd/0,1607,7-122-1683_2858-8635--M_2002_1,00.html
+http://www.michigan.gov/mde/0,1607,7-140--117270--,00.html
+http://www.michigan.gov/minewswire/0,1607,7-136-3452-34872--M_1997_1,00.html
+http://www.michigan.gov/scope/0,1607,7-155-10710_10733_10738-36019--,00.html
+http://www.michigandnr.com/law/ReportWeekDetail.asp?Week=1/14/2001
+http://www.michigandnr.com/law/ReportWeekDetail.asp?Week=4/26/1998
+http://www.michiganhistorymagazine.com/extra/joseph/sitting_bull.html
+http://www.michiganinbrief.org/edition07/Chapter5/Elections.htm
+http://www.michiganmilitia.com/SMVM/members/supersix/super_six.htm
+http://www.michiganmilitia.com/literature/level_1.htm
+http://www.michiganmilitia.org/html/fighting%20terrorism.html
+http://www.michiganufos.com/oakpark.html
+http://www.michinoku.ne.jp/~sugayuki/lesson6.html
+http://www.mickfinch.com/buren.htm
+http://www.microbicides2004.org.uk/timetab.html
+http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1417&param=en506142&Pagetitle=LCD%20FAQs
+http://www.microcontentnews.com/
+http://www.microcontentnews.com/articles/blogware.htm
+http://www.microcontentnews.com/articles/googleblogs.htm
+http://www.microcreditsummit.org/newsletter/speaking6.htm
+http://www.micron.com/products/imaging/applications/dsc.html
+http://www.microopticalcorp.com/Press/onlinemedia/register0408.html
+http://www.micropersuasion.com/2005/03/reader_challeng.html
+http://www.microscope-depot.com/privacy.asp
+http://www.microscopy-uk.net/mag/artnov02/bdforambooklet.html
+http://www.microscopyu.com/articles/confocal/pawley39steps.html
+http://www.microsearchsf.com/breakin.htm
+http://www.microsoft-watch.com/
+http://www.microsoft-watch.com/article2/0,1995,1619063,00.asp
+http://www.microsoft-watch.com/article2/0,1995,1777009,00.asp
+http://www.microsoft.com/BusinessSolutions/RetailManagementSystem/rms_headquarters.aspx
+http://www.microsoft.com/BusinessSolutions/community/axapta_brian_king_interview.aspx
+http://www.microsoft.com/BusinessSolutions/frx_monthlyreportsfeature.aspx
+http://www.microsoft.com/Education/CampusAgreement.aspx?ID=LicensingColbySawyer
+http://www.microsoft.com/Education/JohnPaulCollege.aspx
+http://www.microsoft.com/Windowsxp/expertzone/meetexperts/default.mspx
+http://www.microsoft.com/athome/intouch/onlinejournal.mspx
+http://www.microsoft.com/athome/moredone/eliminatepaper.mspx
+http://www.microsoft.com/athome/moredone/windowshop.mspx
+http://www.microsoft.com/athome/security/privacy/password.mspx
+http://www.microsoft.com/atwork/manageinfo/email.mspx
+http://www.microsoft.com/australia/business/hidden/keytoprofit.aspx
+http://www.microsoft.com/australia/smallbusiness/issues/creating/dms/editing.mspx
+http://www.microsoft.com/australia/smallbusiness/themes/practical/article9.mspx
+http://www.microsoft.com/billgates/speeches/02-22aasa.asp
+http://www.microsoft.com/billgates/speeches/02-26wcit.asp
+http://www.microsoft.com/billgates/speedofthought/additional/gurleypp.asp
+http://www.microsoft.com/canada/casestudies/search.aspx
+http://www.microsoft.com/enable/casestudy/seti.aspx
+http://www.microsoft.com/enable/research/acctechnology.aspx
+http://www.microsoft.com/games/flightsimulator/fs2004_articles_fs_training.asp
+http://www.microsoft.com/info/cpyright.mspx
+http://www.microsoft.com/ireland/businesssolutions/casestudies/Comicrelief_GP.mspx
+http://www.microsoft.com/learning/mcpexams/faq/benefits.asp
+http://www.microsoft.com/mac/default.aspx?pid=office2004td
+http://www.microsoft.com/malaysia/business/articles/linkpage3055.asp
+http://www.microsoft.com/mind/0499/beyond/beyond0499.asp
+http://www.microsoft.com/msft/earnings/FY99/earn_rel_q199.mspx
+http://www.microsoft.com/msft/earnings/FY99/earn_rel_q299.mspx
+http://www.microsoft.com/msft/earnings/FY99/earn_rel_q399.mspx
+http://www.microsoft.com/office/sharepoint/prodinfo/upgrade.mspx
+http://www.microsoft.com/office/using/column06.asp
+http://www.microsoft.com/office/xml/response.mspx
+http://www.microsoft.com/presspass/events/svspeaker/06-09msr.mspx
+http://www.microsoft.com/presspass/exec/Jim/10-27pdc03.asp
+http://www.microsoft.com/presspass/exec/jeff/07-12WWPC04.mspx
+http://www.microsoft.com/presspass/exec/steve/2001/03-28GovtConf.mspx
+http://www.microsoft.com/presspass/features/2000/03-10xbox.mspx
+http://www.microsoft.com/presspass/features/2001/nov01/11-05trustedcomputing.mspx
+http://www.microsoft.com/presspass/features/2003/jul03/07-24GetNetWise.mspx
+http://www.microsoft.com/presspass/features/2004/Jan04/01-07OfficeMac.asp
+http://www.microsoft.com/presspass/press/2003/jul03/07-24RTCBetterFasterPR.asp
+http://www.microsoft.com/presspass/press/2004/jul04/07-06Champions04PR.mspx
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=11940
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=13082
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=13541
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=14116
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=14597
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=15471
+http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=16032
+http://www.microsoft.com/resources/casestudies/casestudy.asp?CaseStudyID=15731
+http://www.microsoft.com/resources/casestudies/casestudy.asp?casestudyid=13408
+http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/prepare_for_the_upgrade_of_a_mixed_or_Win2000_domain.asp
+http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/sag_mscscheck_22.asp
+http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/upgrading_a_mixed_domain.asp
+http://www.microsoft.com/resources/documentation/sql/2000/all/reskit/en-us/part8/c3061.mspx
+http://www.microsoft.com/resources/documentation/windows/98/all/reskit/en-us/part5/wrkc27.mspx
+http://www.microsoft.com/resources/documentation/windowsnt/4/server/proddocs/en-us/clustsvr/mscsadm2.mspx
+http://www.microsoft.com/resources/sharedsource/Articles/LicensingBasics.mspx
+http://www.microsoft.com/security/articles/spam.asp
+http://www.microsoft.com/smallbusiness/issues/management/leadership_training/8_ways_to_show_speaking_skills_in_a_meeting.mspx
+http://www.microsoft.com/smallbusiness/issues/management/leadership_training/sit_up_straight_and_keep_your_wrists_in_neutral.mspx
+http://www.microsoft.com/smallbusiness/issues/management/recruiting_staffing/new_rules_on_overtime_pay_how_they_could_affect_you.mspx
+http://www.microsoft.com/smallbusiness/issues/marketing/customer_service_acquisition/how_to_write_an_effective_sales_letter_11_tips.mspx
+http://www.microsoft.com/smallbusiness/issues/marketing/online_marketing/5_reasons_to_track_web_site_traffic.mspx
+http://www.microsoft.com/smallbusiness/issues/technology/communications/how_to_host_a_successful_b2b_webcast.mspx
+http://www.microsoft.com/smallbusiness/online/search-engine-optimization/submit-it/articles/right_tool_com_finds_the_right_tool_in_search_engines.mspx
+http://www.microsoft.com/smallbusiness/resources/technology/broadband_mobility/wi_fi_on_the_road_4_tips_for_hitting_hotspots.mspx
+http://www.microsoft.com/smallbusiness/resources/technology/communications/the_email_you_save_can_be_held_against_you.mspx
+http://www.microsoft.com/smallbusiness/support/articles/sec_win2000pro_p2p.mspx
+http://www.microsoft.com/speech/businessvalue/news/earlyAdopters.asp
+http://www.microsoft.com/technet/community/columns/cableguy/cg0103.mspx
+http://www.microsoft.com/technet/community/columns/secmgmt/default.mspx
+http://www.microsoft.com/technet/community/columns/secmgmt/sm0704.mspx
+http://www.microsoft.com/technet/itsolutions/cits/dsd/enterprise/zertpd_17.mspx
+http://www.microsoft.com/technet/itsolutions/cits/iwp/ricm/tninput.mspx
+http://www.microsoft.com/technet/itsolutions/msit/security/msirsec.mspx
+http://www.microsoft.com/technet/prodtechnol/netshow/deploy/distret.mspx
+http://www.microsoft.com/technet/prodtechnol/office/officexp/deploy/xpdeploy.mspx
+http://www.microsoft.com/technet/prodtechnol/sscomm/reskit/ssriskpr.mspx
+http://www.microsoft.com/technet/prodtechnol/windows2000serv/deploy/confeat/kerberos.mspx
+http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/sharepoint/spoffint.mspx
+http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/xpmanaged/02_xpact.mspx
+http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/xpmanaged/10_xphyp.mspx
+http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/xpmanaged/22_xprem.mspx
+http://www.microsoft.com/technet/scriptcenter/resources/officetips/jun05/tips0621.mspx
+http://www.microsoft.com/technet/scriptcenter/topics/win2003/lastlogon.mspx
+http://www.microsoft.com/technet/security/bulletin/MS01-028.mspx
+http://www.microsoft.com/technet/security/bulletin/MS03-026.mspx
+http://www.microsoft.com/technet/security/bulletin/MS04-011.mspx
+http://www.microsoft.com/technet/security/smallbusiness/prodtech/windows2000/sec_win2000pro_p2p.mspx
+http://www.microsoft.com/technet/security/topics/identitymanagement/smrtcdcb/default.mspx
+http://www.microsoft.com/typography/otfntdev/bengalot/shaping.htm
+http://www.microsoft.com/typography/otfntdev/devanot/shaping.htm
+http://www.microsoft.com/typography/otfntdev/gujartot/shaping.htm
+http://www.microsoft.com/typography/otfntdev/gurmukot/shaping.htm
+http://www.microsoft.com/typography/otfntdev/kanadot/shaping.htm
+http://www.microsoft.com/typography/otfntdev/teluguot/shaping.htm
+http://www.microsoft.com/uk/businesssolutions/resources/casestudies/comicrelief_gp.aspx
+http://www.microsoft.com/windows/windowsmedia/forpros/hdcd/hdcdfaq.aspx
+http://www.microsoft.com/windows/windowsmedia/knowledgecenter/mediaadvice.aspx
+http://www.microsoft.com/windows/windowsmedia/knowledgecenter/mediaadvice/0044.aspx
+http://www.microsoft.com/windows/windowsmedia/mp10/onlinestores.aspx
+http://www.microsoft.com/windows/windowsmedia/music/default.aspx
+http://www.microsoft.com/windows2000/server/evaluation/casestudies/jdedwards.asp
+http://www.microsoft.com/windows2000/techinfo/interop/unix.asp
+http://www.microsoft.com/windows2000/techinfo/planning/activedirectory/bulksteps.asp
+http://www.microsoft.com/windowsmobile/communities/pocketpc/localclubs/finding.mspx
+http://www.microsoft.com/windowsmobile/communities/smartphone/localclubs/finding.mspx
+http://www.microsoft.com/windowsserversystem/facts/default.mspx
+http://www.microsoft.com/windowsxp/expertzone/meetexperts/default.mspx
+http://www.microsoft.com/windowsxp/mediacenter/evaluation/privacy/epgprivacy.mspx
+http://www.microsoft.com/windowsxp/pro/eula.mspx
+http://www.microsoft.com/windowsxp/using/digitalphotography/expert/crawford_04photoblog.mspx
+http://www.microsoft.com/windowsxp/using/games/learnmore/gamerkids.mspx
+http://www.microsoft.com/windowsxp/using/games/learnmore/gifts.mspx
+http://www.microsoft.com/windowsxp/using/mce/learnmore/recordedtv.mspx
+http://www.microsoft.com/windowsxp/using/moviemaker/expert/jones_02november25.mspx
+http://www.microsoft.com/windowsxp/using/networking/expert/ballew_feb2005.mspx
+http://www.microsoft.com/windowsxp/using/networking/learnmore/russel_02april08.mspx
+http://www.microsoundmusic.com/clynes/WSJ_art.htm
+http://www.microsphere.com/supportpage.htm
+http://www.microstrategy.com/Customers/Successes/uk/bankofscotland.asp
+http://www.microtunneling.com/
+http://www.microworks.net/pacific/personal/bill_paull2.htm
+http://www.mid-day.com/smd/eat/2003/february/44957.htm
+http://www.midcitiesmortgage.com/faq/faq04.html
+http://www.midcoast.com/~lizmcl/aa865.html
+http://www.midcoast.com/~michael1/charts.htm
+http://www.middle-east-online.com/english/?id=13843
+http://www.middle-east-online.com/english/lebanon/?id=13635
+http://www.middle-east-online.com/english/opinion/?id=12671
+http://www.middle-east-online.com/english/opinion/?id=13843
+http://www.middlebrook-gardens.com/understandinghome.htm
+http://www.middleeastnews.com/SriLanka.html
+http://www.middleeastwindow.com/article1175.html
+http://www.middleforkofthesalmon.com/
+http://www.middlesexcentre.on.ca/committees/adjustment_meetings/03_11_20.htm
+http://www.middletownbiblechurch.org/dispensa/dispch1.htm
+http://www.middletownbiblechurch.org/romans/romans12.htm
+http://www.middlevillage.com/html/join/prices.html
+http://www.middlevillage.com/html/join/proposal.html
+http://www.middlevillage.com/html/living/points.html
+http://www.middlewaypress.com/peace.html
+http://www.middleweb.com/1stDResources.html
+http://www.middleweb.com/Prinstandrd.html
+http://www.middleweb.com/ReadWrkshp/JK42.html
+http://www.middleweb.com/ReadWrkshp/JK64.html
+http://www.middleweb.com/mw/msdiaries/02-03wklydiaries/CT01.html
+http://www.middleweb.com/mw/resources/MSModel.html
+http://www.mideasti.org/indepth/islam/schools.html
+http://www.mideastinfo.com/roadtrip.htm
+http://www.mideastweb.org/194.htm
+http://www.mideastweb.org/log/archives/00000138.htm
+http://www.midgard.net/~richardt/easy.html
+http://www.midhosp.org/go/F3EC6076-E7D2-9CFE-20F199F50F37F8A8/
+http://www.midi.org/about-midi/aboutmidi3.shtml
+http://www.midnight-fire.net/shadows/whatrests.html
+http://www.midnighteye.com/features/silentfilm_pt2.shtml
+http://www.midrealm.org/heraldry/education/primary.htm
+http://www.midtenrelics.com/blades.htm
+http://www.midvalecity.org/P&Z/P%20%20Z%2010-11-00%20MEETING.htm
+http://www.midweek.com/coverstory/coverstory.html
+http://www.midwest-itc.org/index.php/web/news/mitc_news/october_15_2004
+http://www.midwestacademy.com/Account/Account1.html
+http://www.midwestoutreach.org/02-Information/02-OnlineReference/04-Etc/01-TheJournal/Volume5/No4-EnduringMonumentToPaganOrigins.html
+http://www.midwestoutreach.org/journals/once_upon.html
+http://www.midwesttechjournal.com/modules.php?name=News&new_topic=14
+http://www.midwestvisioncongress.com/App/main.cfm?appname=190&moduleID=330&LinkID=16385&Date=05/14/2005
+http://www.midwiferytoday.com/articles/hummous.asp
+http://www.midwiferytoday.com/articles/qq61.asp?q=breastfeed*
+http://www.midwinter.com/lurk/guide/006.html
+http://www.midwinter.com/lurk/guide/067.html
+http://www.midwinter.com/lurk/guide/068.html
+http://www.midwinter.com/lurk/making/production.html
+http://www.midwinter.com/lurk/synops/105.html
+http://www.mier.sr.gov.yu/code/navigate.asp?Id=26
+http://www.mifsudbonnici.com/lexnet/articles/pilrecog.html
+http://www.miftah.org/Display.cfm?DocId=4406&CategoryId=21
+http://www.migrationheritage.nsw.gov.au/gettingmarried/rema_fadle.html
+http://www.migrationinformation.org/Feature/display.cfm?ID=209
+http://www.migrationinformation.org/Feature/display.cfm?id=220
+http://www.migrationinformation.org/Feature/display.cfm?id=276
+http://www.migrationinformation.org/Profiles/display.cfm?ID=156
+http://www.migrationinformation.org/USfocus/display.cfm?ID=149
+http://www.migrationinformation.org/USfocus/display.cfm?ID=160
+http://www.migrationinformation.org/USfocus/display.cfm?id=100
+http://www.migrationinformation.org/USfocus/display.cfm?id=149
+http://www.migrationinformation.org/USfocus/print.cfm?ID=160
+http://www.migrationint.com.au/news/czech_republic/mar_1996-01mn.asp
+http://www.migrationint.com.au/news/finland/oct_1996-11.asp
+http://www.migrationint.com.au/ruralnews/budapest/oct_1997-20rmn.asp
+http://www.mihivnews.com/features/they_care.htm
+http://www.mihr.org/?q=taxonomy_menu/1/2
+http://www.mihra.org/2k/
+http://www.mii.org/periodic/LifeElement.html
+http://www.mii.org/teachercom.html
+http://www.mijag.com/
+http://www.mike-mcintyre.com/about_meet_mike.html
+http://www.mikebentley.com/bike/harry/22-24.htm
+http://www.mikebrownsolutions.com/gain3.htm
+http://www.mikeco31.com/Stories/chief.html
+http://www.mikedoyle.ca/climbing/visualization.shtml
+http://www.mikeholt.com/misc.php?id=unformatted/union&type=u&title=Union%20IBEW%20(2-10-2K)
+http://www.mikeindustries.com/blog/archive/2004/05/getting-started-in-design
+http://www.mikeindustries.com/blog/archive/2004/08/sifr
+http://www.mikeindustries.com/blog/archive/2004/09/sifr2-kick-the-tires
+http://www.mikejackman.com/secure_healthcare_messaging.htm
+http://www.mikementzer.com/hdchap1.html
+http://www.mikementzer.com/quotes.html
+http://www.mikes-ecommerce-software.com/ecommerce-forum/redirect/137129
+http://www.mikewilliams.net/home.htm
+http://www.mikey-san.net/damage/index_2003-05-22.html
+http://www.mikulich.com/shroba_stech_02.htm
+http://www.mil.za/Articles&Papers/DefenceReview/chapter_one.htm
+http://www.milehighsportsmagazine.com/jobopportunities.htm
+http://www.milepoint.biz/press/news.asp?news_id=072803
+http://www.milepoint.biz/terms/
+http://www.miles-and-more.com/mam/de/en/gnf/0,3678,0-0-1112459,00.html
+http://www.milescc.edu/ps_technical.html
+http://www.mileshealthcare.org/miles_ways_help/dev.htm
+http://www.milford.co.uk/hotels/stratford-upon-avon-grosvenor-hotel.html
+http://www.militantislammonitor.org/article/id/34
+http://www.military-art.com/
+http://www.military-art.com/dhm1008.htm
+http://www.military-quotes.com/Churchill.htm
+http://www.military-quotes.com/forum/viewtopic.php?t=8147
+http://www.military-quotes.com/military-gear.htm
+http://www.military.com/Education/Content/0,13302,Education_Ask4,00.html
+http://www.military.com/NewContent/0,13190,FreedomAlliance_Index,00.html
+http://www.military.com/NewContent/0,13190,Galloway_010704,00.html
+http://www.military.com/NewContent/0,13190,Galloway_032403,00.html
+http://www.military.com/NewContent/0,13190,Galloway_071803,00.html
+http://www.military.com/NewContent/0,13190,Smith_051905,00.html
+http://www.military.com/NewContent/0,13190,Smith_Index,00.html
+http://www.military.com/Recruiting/Content/0,13898,rec_step02_benefits,,00.html
+http://www.military.com/Recruiting/Content?file=Joining_Index&area=Content
+http://www.military.com/Resources/ResourcesContent/0,13964,32676--1,00.html
+http://www.military.com/Resources/ResourcesContent/0,13964,34092--1,00.html
+http://www.military.com/spouse/fs/0,,fs_child_care,00.html
+http://www.military.ie/careers/armycond.htm
+http://www.military.ie/naval/roles.htm
+http://www.militaryblood.dod.mil/press_kit/releases.htm
+http://www.militarycity.com/valor/256561.html
+http://www.militarycity.com/valor/256727.html
+http://www.militaryhistoryonline.com/wwii/armies/chapter7.aspx
+http://www.militaryhorse.org/studies/artillery/yule.asp
+http://www.militaryhorse.org/studies/mcclellan/whiting_modification.asp
+http://www.militarymarksmanship.org/worldcup.htm
+http://www.militarymoney.com/money/1076684101
+http://www.militarymoney.com/money/1109358625
+http://www.militarymoney.com/success/1101919692
+http://www.militarynews.com/wheel/wheel_news.htm
+http://www.militarywoman.org/other.htm
+http://www.militaryworkingdog.com/history/
+http://www.millardlumber.com/HowTo/vwindow/vinwin.htm
+http://www.miller-insurance.com/specialist_areas/Programmes_and_facilities/Professional_lines.asp
+http://www.miller.co.uk/news_list.asp?division=construction
+http://www.millerfornewyork.com/issues/
+http://www.millerinsurance.co.uk/Specialist_areas/Programmes_and_facilities/Professional_lines.asp
+http://www.millerparking.com/APPLICATIONS.HTM
+http://www.millerpublishing.com/Publications.asp
+http://www.millersmiles.co.uk/press-release-031604.html
+http://www.millersoap.com/castile.html
+http://www.millersoap.com/soapproc.html
+http://www.millersriver.net/mrec/history.html
+http://www.millerthomson.ca/issue.asp?NL=19&Year=2003&Season=9
+http://www.millerthomson.com/mtweb.nsf/Web_Practice_Area_Display_en?ReadForm&Area=mtte6a993m
+http://www.millicentlibrary.org/hhr-dab.htm
+http://www.milliecriswell.com/staying_single.html
+http://www.millimanusa.com/washington_watch/congress.asp
+http://www.millionairetv.com/walkinandwin.html
+http://www.millsaps.edu/psych/psychclub.shtml
+http://www.millstones.com/46_48/
+http://www.millwall-history.co.uk/Origins-6.htm
+http://www.millwall-history.co.uk/Pre-Season2.htm
+http://www.millwoodssoccer.com/
+http://www.milma.com/trcmpu.html
+http://www.milonic.com/
+http://www.milta.org/Newsletters/June.htm
+http://www.milta.org/Newsletters/Newsltr_2003Special.html
+http://www.miltonvillage.org.uk/php/bin/readarticle.php?articlecode=file:pc200111.html&papercode=1
+http://www.milwaukeestingvb.org/PolandJournal.asp
+http://www.mimersbrunn.se/doc_print.asp?aID=3567
+http://www.minarsas.demon.co.uk/harn/lynnfana/chargen.htm
+http://www.mind-body.org/Barry%20Bittman%20-%20feeling-good.htm
+http://www.mind-field.com/mi00005.htm
+http://www.mind.org.uk/Information/Conference+and+training/AC2005/Parallel+sessions+-+Group+2.htm
+http://www.mindandmuscle.net/content/page-281.html
+http://www.mindandmuscle.net/content/page-300.html
+http://www.mindandmuscle.net/content/page-48.html
+http://www.mindanews.com/2005/06/25vws-ilagan.ht.html
+http://www.mindbodymed.com/Books_and_Tapes/ihealer.html
+http://www.mindbodymed.com/Journaling/hjournalweb.html
+http://www.mindcontrolforums.com/pro-freedom.co.uk/mmc_tf.html
+http://www.mindcraft.com/whitepapers/openbench1-ph12.html
+http://www.mindef.gov.sg/fsd/scme/scmeinfohub_papers.asp
+http://www.mindef.gov.sg/safti/pointer/back/journals/2000/Vol26_1/3.htm
+http://www.mindfields.org.uk/Workshops.html
+http://www.mindfiresolutions.com/Casestudies.htm
+http://www.mindfully.org/Farm/2003/Everything-Is-Illegal1esp03.htm
+http://www.mindfully.org/Food/Organic-Industrial-Complex.htm
+http://www.mindfully.org/GE/Playing-God-Garden.htm
+http://www.mindfully.org/GE/RR-Soybeans-Yield-Less.htm
+http://www.mindfully.org/Health/2003/Cancer-Rates-15M3apr03.htm
+http://www.mindfully.org/Heritage/2004/Strip-Mine-Bush26jan04.htm
+http://www.mindfully.org/Nucs/2004/Hanford-Lack-Safety20feb04.htm
+http://www.mindfully.org/Pesticide/More-GMOs-Less-Pesticide.htm
+http://www.mindfully.org/Pesticide/Warren-Porter-Interviewed13nov01.htm
+http://www.mindfully.org/Plastic/Better-Science-Through-Money.htm
+http://www.mindfully.org/Reform/2003/Americas-War-Machine13apr03.htm
+http://www.mindfully.org/Reform/2003/Sharon-Remove-Arafat26sep03.htm
+http://www.mindfully.org/Reform/2004/Homeless-Street-Seminar1apr04.htm
+http://www.mindfully.org/Technology/2005/Microwave-Wake-Up1mar05.htm
+http://www.mindfully.org/Water/Coca-Cola-Water-Battle-India13aug02.htm
+http://www.mindgap.org/index.php
+http://www.mindjack.com/feature/evoting.html
+http://www.mindlesscrap.com/jokes/oldjokes1.htm
+http://www.mindnmuscle.com/
+http://www.mindpub.com/art402.htm
+http://www.mindsay.com/tags/pissed
+http://www.mindsay.com/tags/songs
+http://www.mindscience.org/news/
+http://www.mindspace.org/liberation-news-service/archives/000661.html
+http://www.mindspring.com/~chucksaudio/
+http://www.mindspring.com/~jmcgiv/jun0501.html
+http://www.mindspring.com/~kimall/Japanese/particles.html
+http://www.mindspring.com/~kimall/Reviews/walkingpeople.html
+http://www.mindspring.com/~phporter/econ.html
+http://www.mindspring.com/~scottr/nde/_ketamine.html
+http://www.mindspring.com/~spacklebeast/querytosale/klaststand.html
+http://www.mindspring.com/~ssshp/ssshp_cd/ss_btl3.htm
+http://www.mindtools.com/CommSkll/RunningMeetings.htm
+http://www.mindtools.com/cgi-bin/sgx2/shop.cgi?page=MakeTimeForSuccess-LSC.htm
+http://www.mindtools.com/dectree.html
+http://www.mindtools.com/goalsett.html
+http://www.mindtools.com/page6.html
+http://www.mindtools.com/pages/article/HTEReviews.htm
+http://www.mindtools.com/pages/article/newPPM_03.htm
+http://www.mindtools.com/pages/article/newPPM_05.htm
+http://www.mindtools.com/pages/article/newTCS_06.htm
+http://www.mindtools.com/pages/article/newTED_08.htm
+http://www.mindtools.com/pages/article/newTIM_04.htm
+http://www.mindtools.com/pmi.html
+http://www.mindtools.com/rdstratg.html
+http://www.mindtools.com/redpstv.html
+http://www.mindtools.com/stress/PerformanceStress/ThoughtAwareness.htm
+http://www.mindtools.com/stress/UnderstandStress/StressPerformance.htm
+http://www.mindtree.com/news/view_news.phtml?nid=68
+http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
+http://www.mindview.net/Seminars/ObjectsAndSystems/
+http://www.mindview.net/Seminars/ThinkingInJava/Java.html
+http://www.mindview.net/WebLog/log-0048
+http://www.mindweavers.co.uk/main.asp?sitepages=NewsCompany
+http://www.minedu.fi/minedu/news/pr/loka99.htm
+http://www.minedu.govt.nz/index.cfm?indexID=1108&layout=index
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=5172&indexid=1042&indexparentid=1108
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=6135&indexid=1072&indexparentid=1000
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=6917&indexid=4289&indexparentid=1004
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=8411&data=l
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=8411&indexid=6088&indexparentid=1000
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=8699&indexid=5451&indexparentid=5437
+http://www.minedu.govt.nz/index.cfm?layout=document&documentid=9208&indexid=6664&indexparentid=6663
+http://www.minedu.govt.nz/print_doc.cfm?documentid=8411
+http://www.minerals.nsw.gov.au/prodServices/publications/titles/exploration/strategyMiningDevelopmentCentralWest/land_access_and_community_relations
+http://www.mines.edu/Academic/computer/policies/software.htm
+http://www.mines.edu/Academic/courses/math_cs/macs261/LABS/F03/lab5.html
+http://www.mines.edu/Academic/courses/math_cs/macs261/LABS/SP03/lab5.html
+http://www.mines.edu/Academic/courses/math_cs/macs261/LABS/SP04/lab5.html
+http://www.mines.edu/stu_life/house/ResHallsFAQ.html
+http://www.mines.utah.edu/~wmcemi/appls/sbl/
+http://www.minesandcommunities.org/Action/press347.htm
+http://www.minesandcommunities.org/Action/press377.htm
+http://www.minesandcommunities.org/Company/inco2.htm
+http://www.minesandcommunities.org/Company/rio6.htm
+http://www.minfin.nl/default.asp?CMS_ITEM=A9525A72A5AC486E9A11975877E03761X1X43778X23
+http://www.mini-itx.com/projects/windowsxpbox/
+http://www.mini2.com/forum/showthread.php?t=83145&goto=newpost
+http://www.miniaturewargaming.com/index.php/P1010/
+http://www.miniaturewargaming.com/index.php/mwg/C19/
+http://www.miniaturewargaming.com/index.php/mwg/C49/
+http://www.miniaturewargaming.com/index.php/mwg/C50/
+http://www.mining-technology.com/exhibitions/
+http://www.mining.ca/english/publications/london.html
+http://www.miningweekly.co.za/min/about/advertise/?show=68811
+http://www.miningweekly.co.za/min/about/tip/?show=68811
+http://www.miningweekly.co.za/min/features/information/?show=56564
+http://www.ministry-exchanges.org/scotland.htm
+http://www.ministryhealth.net/mh_articles/231_kg_85_character_disorders.html
+http://www.ministryofsound.com.au/news_ctemplate.cfm?page_id=15537305117011010&se_id=110
+http://www.ministryofsound.com.au/news_ctemplate.cfm?page_id=42021554117011010&se_id=110
+http://www.minitruckinweb.com/tech/0209mt_tech/
+http://www.minjungkim.com/
+http://www.minjungkim.com/?p=2675
+http://www.minke.tv/trips/jj002.html
+http://www.minnbankers.com/i4a/pages/index.cfm?pageid=3335
+http://www.minneapolisparks.org/default.asp?PageID=815
+http://www.minnesotarugby.org/template.php?sid=35
+http://www.minnewaukan.com/Econ_Dev.htm
+http://www.minniepauz.com/dearminnie.html
+http://www.minorcon.org/parentsdontchange.html
+http://www.minortheatres.com/
+http://www.minsky.com/sharpaper.htm
+http://www.mint-tea.blogspot.com/
+http://www.mintchaos.com/archives/2003_02.shtml
+http://www.minted.am/en/natural.html
+http://www.minted.am/en/tour_program.html
+http://www.mintergardens.com/Newsletter%20March.htm
+http://www.mio.co.za/article.php?cat=software_reviews&id=231
+http://www.miox.com/tech_form/tech_form.cfm
+http://www.mipham.com/talk.php?id=14
+http://www.mipharm.com/annual/Saturday.htm
+http://www.mir3europe.com/submitters/detail.asp?type=article.asp&submitterID=98
+http://www.mira.ca/contenta/s1a.html
+http://www.mirabilis.ca/archives/cat_science.html
+http://www.miracosta.cc.ca.us/conted/esl/ESLcivics/LearnESLandCivics.htm
+http://www.miraculouscreations.com/pages/main.shtml
+http://www.miramar.sdccd.cc.ca.us/faculty/fgarces/ChemComon/Testphobia.htm
+http://www.mirandanet.ac.uk/news/letter_display.php?recnoField=26
+http://www.mirc.net/projects.php?go=1063381627
+http://www.mirc.net/projects.php?go=1063381627&thread=3882&view=3882&quote=1
+http://www.mirej.com/story.cfm?Market=CIP&StoryID=13101
+http://www.mirella-dance.com/tutu/issue_1.html
+http://www.mironov.ru/english/publications.phtml?id=6312
+http://www.mironov.ru/english/publications.phtml?id=6419
+http://www.mironov.ru/english/publications.phtml?id=6500
+http://www.mironov.ru/english/publications.phtml?id=6639
+http://www.mironov.ru/english/publications.phtml?id=7411
+http://www.mironov.ru/english/publications.phtml?id=8045
+http://www.mirror-weekly.com/nn/show/436/38029/
+http://www.mirror.co.uk/
+http://www.mirror.co.uk/haveyoursay/tm_objectid=15414669&method=m2_msg_full&siteid=94762&start=381-name_page.html
+http://www.mirror.co.uk/news/allnews/content_objectid=14042696_method=full_siteid=50143_headline=-MY-HELL-IN-CAMP-X-RAY-name_page.html
+http://www.mirror.co.uk/news/allnews/page.cfm?objectid=%2013112330&method=full&siteid=50143
+http://www.mirror.co.uk/news/allnews/page.cfm?objectid=12783733&method=full&siteid=50143
+http://www.mirror.co.uk/news/allnews/tm_objectid=14923511&method=full&siteid=50143&headline=blunkett-s-fear-as-visa-scandal-threatens-job-name_page.html
+http://www.mirror.co.uk/news/billborrows/tm_column_date=21052005-name_index.html
+http://www.mirror.co.uk/news/fiona/tm_column_date=18062005-name_index.html
+http://www.mirror.co.uk/news/kevinmaguire/
+http://www.mirror.co.uk/news/latest/tm_objectid=15634909&method=full&siteid=94762&headline=partygaming-ipo-to-raise-1-1-bln-pounds-as-poker-booms-name_page.html
+http://www.mirror.co.uk/sexandhealth/sexandrelationships/tm_objectid=14366484&method=full&siteid=94762&headline=i-lost-5-stone---but-it-cost-me-my-boyfriend--name_page.html
+http://www.mirror.co.uk/sport/readeonsport/tm_column_date=18102003-name_index.html
+http://www.mirror.co.uk/tvandfilm/shelleyvision/
+http://www.mirroreyes.com/smallbiz/makemoney/hyip.html
+http://www.mirrorx2.com/Non_frames/articles_hom.html
+http://www.misc-iecm.mcgill.ca/socdem/richar.htm
+http://www.miscmedia.com/3-29-00.html
+http://www.miscojobs.com/employers/resumes/L_2/rsm_14824.htm
+http://www.miscojobs.com/employers/resumes/L_3/C_6/rsm_13776.htm
+http://www.miseagrant.org/pubs/on/msg-99-500.html
+http://www.miserlymoms.com/MOMSHCS.htm
+http://www.mises.org/classroom/lse.asp
+http://www.mises.org/content/huttbio.asp
+http://www.mises.org/epofe/c6sec1.asp
+http://www.mises.org/etexts/johnprincesmith.asp
+http://www.mises.org/fipandol/fipsec2.asp
+http://www.mises.org/freemarket_detail.asp?control=120&sortorder=articledate
+http://www.mises.org/freemarket_detail.asp?control=63
+http://www.mises.org/fullstory.asp?control=1385
+http://www.mises.org/fullstory.asp?control=362&FS=State+Science%2C+State+Truth
+http://www.mises.org/fullstory.aspx?control=1385&id=76
+http://www.mises.org/fullstory.aspx?control=1385&id=77
+http://www.mises.org/humanaction/chap16sec15.asp
+http://www.mises.org/humanaction/chap18sec3.asp
+http://www.mises.org/humanaction/chap26sec1.asp
+http://www.mises.org/humanaction/chap29sec3.asp
+http://www.mises.org/humanaction/chap9sec2.asp
+http://www.mises.org/journals/fm/fm1295.asp
+http://www.mises.org/misesreview_detail.asp?control=238&sortorder=issue
+http://www.mises.org/quiz.asp?QuizID=5
+http://www.miskatonic.net/pickman/mythos/sign.htm
+http://www.miskatonic.org/history/burton-gordon.html
+http://www.miskatonic.org/library/book-numbers.html
+http://www.misq.org/archivist/vol/no10/issue1/vol10no1mason.html
+http://www.missbellydance.com/
+http://www.missing-you.net/Adoptions.php?startnum=7520
+http://www.missionalchurch.org/resources/transforming.html
+http://www.missionfrontiers.org/1994/0910/so9413.htm
+http://www.missionhonduras.com/
+http://www.missiontogether.org.uk/MT/MT14/MT14_TN_Pg2.htm
+http://www.mississippi.org/programs/energy/schools_institutions.htm
+http://www.missoulian.com/articles/2004/01/28/news/top/news01.txt
+http://www.missoulian.com/bonus/progress03/progress07.html
+http://www.missoulian.com/bonus/progress03/progress23.html
+http://www.missoulian.com/specials/fallfromgrace/mon1.html
+http://www.missouri.edu/~jourvs/raracemf.html
+http://www.missouri.edu/~jourvs/rtcodes.html
+http://www.missourianonline.com/features/2005/spring/0120.php
+http://www.missouribusiness.net/docs/strategies_customers_coming_back.asp
+http://www.missouribusiness.net/irs/Indexing/e-idxacc.html
+http://www.missouridems.org/
+http://www.missourigameandfish.com/hunting/bowhunting-hunting/mo_aa123202a/
+http://www.missourilife.com/home019.shtml
+http://www.missworld.tv/beautyWithAPurpose/charities.sps?iType=6910&icustompageid=11590
+http://www.misterart.com/store/browse/001/cat_id/112/Art-Supplies-Easels--Furniture--Tables--Drawing-Boards.htm
+http://www.misterfixit.com/camsensr.htm
+http://www.misticriver.net/boards/archive/index.php/t-1940.html
+http://www.mit.com.au/business_605_%20IT_Contract_Management.htm
+http://www.mit.edu/people/jcb/jokes/
+http://www.mit.edu/~mkgray/index.3.html
+http://www.mit.edu/~vona/bass/bass.html
+http://www.mit.edu:8001/people/davis/EncycEnv.html
+http://www.mit.edu:8001/people/rei/Ki.html
+http://www.mitaliperkins.com/youngadultbooks.htm
+http://www.mitchamcouncil.sa.gov.au/site/page.cfm?u=123
+http://www.mitchamcouncil.sa.gov.au/site/page.cfm?u=415
+http://www.mitchamcouncil.sa.gov.au/site/page.cfm?u=419
+http://www.mitchellchefitz.com/about-press.htm
+http://www.mithertongue.co.uk/faq.shtml
+http://www.mithertongue.co.uk/lang02.shtml
+http://www.miti.gov.mt/site/page.aspx?pageid=182
+http://www.mitratech.com/solutions/claims_features.php
+http://www.mitre.org/news/digest/defense_intelligence/03_03/di_jefx02.html
+http://www.mitre.org/news/events/tech02/decision_support.html
+http://www.mitre.org/news/the_edge/july_01/wieland.html
+http://www.mitre.org/news/the_edge/march_97/third.html
+http://www.mitsui.com/about_compliance.shtml
+http://www.miva.com/uk/index.asp
+http://www.mja.com.au/public/issues/181_03_020804/har10700_fm.html
+http://www.mja.com.au/public/issues/may5/kaldor/kaldor.html
+http://www.mja.com.au/public/issues/sep21/kamien/kamien.html
+http://www.mjbabybibs.com/links.cfm
+http://www.mjbovo.com/Healing.htm
+http://www.mjni.com/support/articlesdetail.aspx?articleID=10
+http://www.mjq.net/fiveo/5-0log7.htm
+http://www.mkeever.com/sweden.html
+http://www.mkeever.com/thailand.html
+http://www.mklinux.org/articles/sr990529.html
+http://www.mkprojects.com/fa_PsychicAttacks.htm
+http://www.mkr-group.com/epmed/epmed_ir.php
+http://www.mkssoftware.com/docs/man1/pax.1.asp
+http://www.mkssoftware.com/docs/man5/perlfork.5.asp
+http://www.mkweb.co.uk/futurecmk/DisplayArticle.asp?ID=19781
+http://www.mla.gov.uk/information/advice/conserv13.asp
+http://www.mla.org/ade/bulletin/N078/078024.htm
+http://www.mla.org/ade/bulletin/n111/111004.htm
+http://www.mlaforum.org/volumeII/issue1/InternationalBib.html
+http://www.mlahanas.de/Greeks/Greeks.htm
+http://www.mlanet.org/about/history/w_draper.html
+http://www.mlanet.org/publications/style/style_names_terms.html
+http://www.mldirect.ml.com/publish/public/note.asp
+http://www.mlit.go.jp/crd/daisei/daikan/hosin-6_e.html
+http://www.mlj.com.my/free/articles/hardial.htm
+http://www.mlj.com.my/free/articles/rizal&zuhdi2.htm
+http://www.mljewish.org/cgi-bin/retrieve.cgi?VOLUME=2&NUMBER=35&FORMAT=html
+http://www.mlkonline.net/holiday.html
+http://www.mlmknowhow.com/articles/marketing/7habitsless.htm
+http://www.mlmlegal.com/MLMsoftware/internet_sales.html
+http://www.mlmwoman.com/issue99.htm
+http://www.mln.lib.ma.us/info/mtida.htm
+http://www.mlrapcb.net/olivepolicy.html
+http://www.mlsnet.com/MLS/news/mls_news.jsp?ymd=20050308&content_id=23670&vkey=news_mls&fext=.jsp
+http://www.mlui.org/growthmanagement/fullarticle.asp?fileid=16773
+http://www.mlui.org/growthmanagement/fullarticle.asp?fileid=16779
+http://www.mlui.org/growthmanagement/fullarticle.asp?fileid=16783
+http://www.mlui.org/growthmanagement/fullarticle.asp?fileid=16785
+http://www.mlui.org/pageview.asp?fileid=16630
+http://www.mlui.org/pageview.asp?fileid=16810
+http://www.mlui.org/pageview.asp?fileid=16843
+http://www.mlui.org/pubs/glb/glb12-00/glb12-03.html
+http://www.mmaa-modelairplanes.org/swap.htm
+http://www.mmaonline.net/publications/MNMed2004/March/Pulse.html
+http://www.mmbb.org/dictionary/index.cfm?letter=s
+http://www.mmc.com/views2/98spr.marino.shtml
+http://www.mmc.com/views2/McCaw20040225.php
+http://www.mmc.com/views2/Rothschild200404.php
+http://www.mmc.com/views2/SLong20040319.php
+http://www.mmc.com/views2/autumn03Weissel.php
+http://www.mmcrecordings.com/artist.asp?id=565
+http://www.mme.state.va.us/Dmr/PUB/Brochures/quake.html
+http://www.mmfa.qc.ca/en/activites/enseignants/activites_25.html
+http://www.mmh.com/article/CA484836.html
+http://www.mmh.com/article/CA606598.html
+http://www.mmhc-online.com/articles/male_infertility.html
+http://www.mml.cam.ac.uk/courses/part2/criteria.html
+http://www.mml.cam.ac.uk/ital2000/CD/eval.html
+http://www.mmpi-info.com/medea.html
+http://www.mmpia.mb.ca/eia.html
+http://www.mms.gov/glossary/wa-we.htm
+http://www.mms.gov/ooc/testimony/con_rqst.htm
+http://www.mmsonline.com/articles/029706.html
+http://www.mmsonline.com/articles/049605.html
+http://www.mmsonline.com/articles/059801.html
+http://www.mmsonline.com/articles/0998cnc.html
+http://www.mmsonline.com/articles/110301.html
+http://www.mmsonline.com/articles/moi0306.html
+http://www.mnaidsproject.org/
+http://www.mnartists.org/community/thread.jspa?forumID=32&threadID=469&messageID=12433
+http://www.mnartists.org/community/thread.jspa?forumID=32&threadID=469&start=75&tstart=0
+http://www.mnartists.org/resourceList.do?action=view&rid=61552
+http://www.mnav.com/online.htm
+http://www.mncn.org/bp/pov2003.htm
+http://www.mndaily.com/articles/2003/10/03/6811
+http://www.mndaily.com/articles/2004/04/19/9316
+http://www.mndaily.com/articles/2004/09/13/10139
+http://www.mndaily.com/daily/2000/10/26/editorial_opinions/e1026/
+http://www.mndaily.com/daily/2001/01/18/news/new6/
+http://www.mndnsw.asn.au/htmdocs/textVersion/history.htm
+http://www.mnea.org/publications/sb/sb_storytelling.htm
+http://www.mnemo.qc.ca/html2/97(11)a.html
+http://www.mnforsustain.org/australia_sustainable_population_policy.htm
+http://www.mninter.net/~babaloo/blue2.htm
+http://www.mnisose.org/profiles/lwrbrule.htm
+http://www.mnllp.com/EEnivfamily.html
+http://www.mnnursing.org/resource/practicalnursing.html
+http://www.mnr.org.uk/about/history.html
+http://www.mnseedpotato.org/extension/VPG.htm
+http://www.mnstate.edu/gracyk/courses/phil%20110/110definitions.htm
+http://www.mnstate.edu/hendrix/wellness/policies.cfm
+http://www.mnsu.edu/weather/218labs/glossary/glossary_m.html
+http://www.moaa.org/TodaysOfficer/FinancialCenter/CollegeFinances_1.asp
+http://www.moaa.org/magazine/June2003/f_tricare.asp
+http://www.moaa.org/todaysofficer/include/print.asp?page=/TodaysOfficer/FinancialCenter/CollegeFinances_1.asp
+http://www.moarkkeyclub.org/history.html
+http://www.mobar.org/journal/2000/mayjun/taxes.htm
+http://www.mobar.org/lpmonline/email.htm
+http://www.mobikefed.org/2004_11_01_cyclingtipsarchive.html
+http://www.mobile-review.com/tetatet/siemens/pauly-en.shtml
+http://www.mobiledia.com/glossary/180.html
+http://www.mobiledia.com/glossary/252.html
+http://www.mobilegamefaqs.com/gansgon.php?id=15
+http://www.mobileread.com/forums/showthread.php?goto=lastpost&t=1260
+http://www.mobileread.com/forums/showthread.php?t=1260&page=7&pp=15
+http://www.mobiletechreview.com/games/PSP/hot-shots-golf.htm
+http://www.mobiletechreview.com/tips/Treo_650_cases.htm
+http://www.mobileunderground.com/soundproviders/
+http://www.mobot.org/MOBOT/Research/russia/appen1.shtml
+http://www.mobot.org/jwcross/duckweed/practical_duckweed.htm
+http://www.mobot.org/mobot/archives/about.asp
+http://www.mocha.org/teachertrainingparented/
+http://www.mod.uk/consultations/reservists1.htm
+http://www.mod.uk/dlo/
+http://www.mod.uk/dlo/catering/bus_support/
+http://www.mod.uk/dpa/news/pn2004/jul04/watchkeeper_prog.htm
+http://www.mod.uk/dpa/projects/apache.htm
+http://www.mod.uk/issues/afops/chapter1/challenges.htm
+http://www.mod.uk/issues/cooperation/multinational.htm
+http://www.mod.uk/issues/diversification/diversification_gp.htm
+http://www.mod.uk/issues/policy2001/priorities.htm
+http://www.mod.uk/issues/sdr/new_chapter/reserves/
+http://www.mod.uk/issues/sdr/new_chapter/reserves/glance.htm
+http://www.mod.uk/issues/security/cm6269/cgs.htm
+http://www.mod.uk/publications/performance2003/chap4.htm
+http://www.mod.uk/schools/facts/hisfacts.html
+http://www.modculture.co.uk/modlinks/links.php?action=rated
+http://www.modculture.co.uk/shag/
+http://www.modelaviatorsassociation.fsnet.co.uk/Graupner%20Junior%20Sport%20Plus.htm
+http://www.modelboatmayhem.co.uk/Modellers/John_Richardson/EGRETE.htm
+http://www.modelminority.com/article417.html
+http://www.modelminority.com/article554.html
+http://www.modelshipbuilding.com/militaryswords.htm
+http://www.modelshipmaster.com/
+http://www.modemac.com/cliches.html
+http://www.modemsite.com/56k/x2-tech.asp
+http://www.moderateindependent.com/v1i16debate.htm
+http://www.moderateindependent.com/v1i5wmdwatch.htm
+http://www.modern-woodmen.org/PubRel/MemberBenefits/Scholarships.htm
+http://www.moderncreative.com/services/event_management_fundraisers.asp
+http://www.modernism.com/prod_gen.cfm?srow1=30&load=1001
+http://www.modernmicroscopy.com/main.asp?article=27
+http://www.modernmicroscopy.com/main.asp?article=31&print=true&pix=true
+http://www.modernmountaindulcimer.com/schedule.html
+http://www.modernmuslima.com/hijabstyles.htm
+http://www.modernreformation.org/rc01pelagian.htm
+http://www.modernrocklyrics.com/F/falloutboy_takethistoyourgrave.php
+http://www.modernrocklyrics.com/F/flickerstick_welcomehometheastronauts.html
+http://www.modernrocklyrics.com/F/futureheads_futureheads.php
+http://www.modernrocklyrics.com/N/neworder_getready.html
+http://www.modernrocklyrics.com/O/oasis_dontbelievethetruth.php
+http://www.modernsilver.com/chicagosilver.htm
+http://www.modlangs.gatech.edu/student_resources/registration/
+http://www.modrepro.com/pages/issues/2003/303/feature.shtml
+http://www.modthesims2.com/showthread.php?t=42014
+http://www.modularschools.com/faq.html
+http://www.modus-operandi.co.uk/portal/character.asp?TOPIC_ID=217
+http://www.moe.gov.sg/speeches/2003/sp20030308.htm
+http://www.moe.gov.sg/speeches/2003/sp20030913.htm
+http://www.moe.gov.sg/speeches/2004/sp20040605.htm
+http://www.moe.gov.sg/speeches/2004/sp20041109.htm
+http://www.moeacgs.gov.tw/english/twgeol/twgeol_generalgeol.jsp
+http://www.moellendorf.com/index.phtml?ow_page_number=120
+http://www.moeller.net/en/industry/references_applications/automation/reference010.jsp
+http://www.mof.go.jp/english/bonds/minutes/010920e.htm
+http://www.mof.go.jp/english/budget/brief/2003/2003-12.htm
+http://www.mof.go.jp/english/budget/brief/2004/2004e_02.htm
+http://www.mof.go.jp/english/f_review/fr47e.htm
+http://www.mof.go.jp/english/mf_review/321_03.htm
+http://www.mof.gov.cy/mof/cystat/statistics.nsf/sitemap_en/sitemap_en?OpenDocument
+http://www.mofa.go.jp/announce/press/1995/12/1219.html
+http://www.mofa.go.jp/announce/press/1995/3/307.html
+http://www.mofa.go.jp/announce/press/1996/6/621.html
+http://www.mofa.go.jp/announce/press/1997/6/629.html
+http://www.mofa.go.jp/announce/press/1998/1/120.html
+http://www.mofa.go.jp/announce/press/1998/10/1013.html
+http://www.mofa.go.jp/announce/press/1998/4/403.html
+http://www.mofa.go.jp/announce/press/1998/5/522.html
+http://www.mofa.go.jp/announce/press/1998/6/605.html
+http://www.mofa.go.jp/announce/press/1998/9/922.html
+http://www.mofa.go.jp/announce/press/1999/1/122.html
+http://www.mofa.go.jp/announce/press/1999/1/126.html
+http://www.mofa.go.jp/announce/press/1999/4/406.html
+http://www.mofa.go.jp/announce/press/1999/5/525.html
+http://www.mofa.go.jp/announce/press/2005/3/0329.html
+http://www.mofa.go.jp/announce/press/2005/4/0408.html
+http://www.mofa.go.jp/policy/economy/asem/aeyls/1997/economics.html
+http://www.mofa.go.jp/policy/economy/summit/2004/press.html
+http://www.mofa.go.jp/policy/human/women_rep4/part2_2.html
+http://www.mofa.go.jp/policy/human/women_rep5/part2_4.html
+http://www.mofa.go.jp/region/asia-paci/asean/pmv9812/briefing.html
+http://www.mofa.go.jp/region/europe/france/
+http://www.mofa.go.jp/region/middle_e/afghanistan/asg4.html
+http://www.mofa.go.jp/region/middle_e/peaceprocess/measure0211.html
+http://www.mofa.gov.mm/speeches/bimst.html
+http://www.mofa.gov.mm/speeches/speech7.html
+http://www.mofabd.org/statements/fm14.htm
+http://www.mofga.org/mofctrees.htm
+http://www.mofga.org/mofgs04k.html
+http://www.mofosports.net/news/ducks/1099477625.html
+http://www.mofoster.com/stories/studiotales.html
+http://www.mofunzone.com/cheatsandcodes/pc/suffering.html
+http://www.moggies.co.uk/articles/feb2005/136_cats.html
+http://www.moggies.co.uk/html/pethealth.html
+http://www.moh.govt.nz/foodborne.html
+http://www.moh.govt.nz/moh.nsf/wpg_index/About-moh-chiefadvisors
+http://www.moh.govt.nz/pho
+http://www.mohistory.org/content/fair/wf/html/Educators/page3.html
+http://www.mohmatch.com/
+http://www.mojolures.com/testimonials.php
+http://www.mokuula.com/news/mauinews_010609b.shtml
+http://www.moldea.com/GHodgson.html
+http://www.moles.co.uk/group/history.ihtml
+http://www.molgen.ua.ac.be/bioinfo/novosnp/downloads.html
+http://www.molliekatzen.com/harvard.php
+http://www.molly.com/
+http://www.molly.com/2003/11/
+http://www.molly.com/2005/06/14/the-geekiest-thing-youve-ever-done/
+http://www.mollybrownmuseum.com/molly-history.html
+http://www.mollybrownmuseum.com/molly-history2.html
+http://www.mollyivins.com/showArticle.asp?ArticleID=1790
+http://www.molrca.com/buy-sell/buy&sell.htm
+http://www.molteno.com/technical.html
+http://www.molwick.com/memint.en/am0-364-fitness.html
+http://www.molwick.com/memint.en/am0-420-memorymanager.html
+http://www.mom2momlist.com/articles/arch/64.shtml
+http://www.momentum.co.nz/index.php?currentPage=74
+http://www.mommd.com/babyduringmedsc.shtml
+http://www.mommyandme.com/activities/viewActivity.php?momentID=2
+http://www.mommyneedscoffee.com/index.php/weblog/comments/680/
+http://www.mommysavers.com/moneywise/make_staying_home_a_reality.htm
+http://www.momof9splace.com/sapphira.html
+http://www.momonwheels.com/sbla/donkey/dk94feb.html
+http://www.momsonthemove.tv/BuildingBaby'sBrain.htm
+http://www.momsteam.com/alpha/features/nutrition/eating_behaviors_and_patterns.shtml
+http://www.momsteam.com/alpha/features/sports_girl_talk/daughter_wants_play_boys_team.shtml
+http://www.momsview.com/discus/messages/23/13275.html
+http://www.momsview.com/sierratradingpost.shtml
+http://www.momsworkathomesite.com/go/go.php/BSchott
+http://www.momtomomchat.com/articles/dyslexia.html
+http://www.mona.uwi.edu/carimac/ATsp.html
+http://www.monachos.net/patristics/palamas_theology.shtml
+http://www.monadnock.net/stories/ralph.html
+http://www.monafoundation.org/newsletters/
+http://www.monaghan-outdoors.com/
+http://www.monarchist.ca/menu/updates.html
+http://www.monarchwatch.org/class/studproj/mass.htm
+http://www.monarchwatch.org/read/articles/canmon3.htm
+http://www.monash.edu.au/policy/pgemc.htm
+http://www.monash.edu.au/pubs/calendar/regulations/regulations14.html
+http://www.monash.edu.au/pubs/handbooks/units/index-byName-L.html
+http://www.monash.edu.au/pubs/move/making.html
+http://www.monash.edu.au/pubs/parents/application.html
+http://www.monbiot.com/archives/1994/11/23/the-scattering-of-the-dead/
+http://www.monbiot.com/archives/1996/01/01/seize-it-back/
+http://www.monbiot.com/archives/2000/06/09/choose-life/
+http://www.monbiot.com/archives/2000/10/01/interview-with-labour-left-briefing/
+http://www.monbiot.com/archives/2002/03/10/private-affluence-public-rip-off/
+http://www.monbiot.com/archives/2002/11/26/see-you-in-court/
+http://www.monbiot.com/archives/2003/06/09/how-to-stop-america/
+http://www.monbiot.com/archives/2004/08/19/correspondence-with-david-bellamy/
+http://www.monbiot.com/archives/2005/01/04/killing-vs-helping/
+http://www.monbiot.com/archives/category/static/
+http://www.mondaq.com/article.asp?articleid=32445&hotopic=1
+http://www.mondaymemo.net/021202feature.htm
+http://www.mondialogo.org/mo/site/?key=2.1.1&lang=en
+http://www.mondopolitico.com/discus/messages/13/1700.html?1089363737
+http://www.mondopolitico.com/library/socialcredit/appendix.htm
+http://www.money-at-home.com/director.htm
+http://www.moneycontrol.com/backends/News/frontend/news_detail.php?autono=160046
+http://www.moneycontrol.com/mf/mfsspeak/detail.php
+http://www.moneyexpert.com/default.asp?view=glossary&p=t
+http://www.moneyextra.com/faqs/morfaq1.html
+http://www.moneyextra.com/features/011748.features.html
+http://www.moneyfacts.co.uk/access_guide.asp
+http://www.moneyfacts.co.uk/features/185.asp
+http://www.moneygram.com/servlet/DefaultApplyXSL?xslURL=/Display/temgweb.xsl&URL=/Document/p2_2__PressReleases.xml
+http://www.moneymaking-home-business.com/homefamily1.htm
+http://www.moneymax.co.za/articles/displayarticle.asp?articleID=298405
+http://www.moneymax.co.za/articles/displayarticle.asp?articleID=325454
+http://www.moneysense.ca/investing/stocks_markets/columnist.jsp?content=20030811_083658_4116
+http://www.moneysupermarket.com/ISA/GuideToIsas.asp
+http://www.moneysupermarket.com/savings/GuideToSavings.asp
+http://www.moneytree.com/privacy.htm
+http://www.moneyweb.co.za/people/profiles/407764.htm
+http://www.mongabay.com/external/2005/01_20h-economist.html
+http://www.mongolia-challenge.com/main_pages/news.asp
+http://www.mongoosepublishing.com/home/detail.php?id_currency=USD%09%09%09%09%09&qsID=90&qsSeries=4%09%09%09%09%09%20%20
+http://www.monikie.org.uk/famhistory.htm
+http://www.monitor.net/rachel/r248.html
+http://www.monitor.upeace.org/archive.cfm?id_article=194
+http://www.monitortan.com/mt/archives/2004_02.html
+http://www.monitortan.com/mt/archives/2005_01.html
+http://www.monklands.com/boardconnector.php?action=viewthread&mid=2079
+http://www.monksofadoration.org/bcp/bcp3.html
+http://www.monmouth.army.mil/monmessg/newmonmsg/sep192003/m38renita.htm
+http://www.monochrom.at/cracked/reviews/Rev%20kiritchenko.htm
+http://www.monolithic.com/thedome/bio/
+http://www.monologues.co.uk/Baskets.htm
+http://www.monroe.k12.la.us/mcs/hot_list/holidays.html
+http://www.monroecc.edu/depts/pstc/vidinsrv.htm
+http://www.monroecrossing.com/ltglyrics.php
+http://www.monsanto.com/monsanto/layout/media/04/06-21-04.asp
+http://www.monsoonmag.com/fiction/i3fic_naqvi.html
+http://www.monstergamer.net/vb/showthread.php?t=3023&page=2
+http://www.monstermarketplace.com/PapasanChairsPapasanCushions/Product/165/Listing/AdditionalShippingCharge/272/26/250/1
+http://www.monstermoving.monster.com/
+http://www.monstersinmotion.com/catalog/product_info.php/products_id/7312
+http://www.monsterzine.com/200301/mummy.php
+http://www.montac.com/mtb/controls.htm
+http://www.montaguema.net/faqs.cfm?faq_type_ID=6
+http://www.montana-churches.org/resources/index.asp
+http://www.montana.com/stafford/treadmill.html
+http://www.montana.edu/msse/2003%20Capstone%20Projects.htm
+http://www.montana.edu/wwwcxair/facts_co.html
+http://www.montana.edu/wwwpb/pubs/mt200202.html
+http://www.montanaforum.com/
+http://www.montanagreenpower.com/greenpower/
+http://www.montanapets.org/pawhs/residentdog.html
+http://www.montanasat.net/rickv/Hermas_Anger.html
+http://www.montclair.edu/parking/updates.html
+http://www.montecitowater.com/Min0520.html
+http://www.monterey.org/fire/news/valor.html
+http://www.montereybay.com/creagrus/elkhornslough.html
+http://www.montereybay.com/creagrus/otherfam.html
+http://www.montereybeachresort.com/events.html
+http://www.montereybiz.com/calendar_july2005.php
+http://www.montereycountyweekly.com/issues/Issue.03-11-04/news/Article.news1
+http://www.montereyherald.com/mld/montereyherald/10766684.htm
+http://www.montereyherald.com/mld/montereyherald/2005/01/29/news/10766684.htm
+http://www.montereymushrooms.com/customer_energy.asp
+http://www.montessori-ami.org/4people/4bmariala1925.htm
+http://www.montevallo.edu/faculty/Policies/04001.shtm
+http://www.montevallo.edu/personnel/Staff/Handbook/Section2.shtm
+http://www.montevallo.edu/undergrad/cmusic.shtm
+http://www.montezucker.com/content.html?page=8
+http://www.montgomeryarc.org/Disaster%20Services/AFES.htm
+http://www.montgomeryarc.org/disaster_response.htm
+http://www.montgomerycountymd.gov/Apps/News/press/DisplayInfo.cfm?ItemID=1215
+http://www.montgomerycountymd.gov/apps/dpwt/solidwaste/collectionservices/material_detail.asp?categoryID=19
+http://www.montgomerycountymd.gov/content/dpwt/operations/parking/FAQ/CashKey.asp
+http://www.montgomerycountytn.org/county/sheriff/DVSA_WEB_SITE/DVSA_Who_we_are.htm
+http://www.monthlyreview.org/0102petras2.htm
+http://www.monticellotimes.com/main.asp?SectionID=23&SubSectionID=89&ArticleID=306&TM=8438.786
+http://www.montrealabcf.org/hayes/updateoct02/
+http://www.montrealfood.com/
+http://www.montrealserai.com/2001_Volume_14/14_3/Article_2.htm
+http://www.montrealserai.com/2002_Volume_15/15_3/Article_2.htm
+http://www.montykins.com/mkins/000578.html
+http://www.moodstats.com/pages/support.asp
+http://www.moomilk.com/archive/bailey-08.htm
+http://www.moomilk.com/archive/nutrition-21.htm
+http://www.moomilk.com/archive/outlook_46.htm
+http://www.moonlight-chronicles.com/
+http://www.moonshop.com/
+http://www.moonwashedrose.com/honeymine/nativity.html
+http://www.moonwhisper.com/meditation.html
+http://www.moore.org/about_bios_content.asp?Name=staff_gordonandbettym
+http://www.mooreallen.co.uk/agriculture/mid-term-review-update.htm
+http://www.moorecoffee.com/french/legal.html
+http://www.moorecoffee.com/tea/legal.html
+http://www.mooreexposed.com/swm.html
+http://www.moorewatch.com/
+http://www.moorhouses.co.uk/history.html
+http://www.moorishgirl.com/archives/2004_04.html
+http://www.moorlandschool.co.uk/earth/earth_science_page.htm
+http://www.mooseandsquirrel.net/
+http://www.moosehill.com/kafka/window-glass.html
+http://www.mooseintl.org/public/moosemagazine/augsepoct04/moose/moosemag_feature5.htm
+http://www.mooseyscountrygarden.com/garden-journal-03/garden-journal-2003-late-june.html
+http://www.moosh.net/mush/List/penn.shtml
+http://www.mope.gov.np/population/chapter8.php
+http://www.mopie.com/blog/2003_12_01_backintheday
+http://www.moraldefense.com/initium/02-01-03.htm
+http://www.moravian.org/products/other.html
+http://www.more-gifts.co.uk/cgi-bin/price.cgi?price=125
+http://www.morecambefc.com/juniorcup.htm
+http://www.morefireglass.com/auction.php
+http://www.morelandhills.com/historical.html
+http://www.moremobile.co.uk/mobile-phone-news/article.asp?a=206
+http://www.moremusic.co.uk/links/sell.htm
+http://www.morencyrest.com/scope2.htm
+http://www.moresoftmoneyhardlaw.com/articles/20040419a.cfm
+http://www.morettiglas.20fr.com/
+http://www.morgan.edu/phonedir/
+http://www.morgan.edu/phonedir/Phnebook.asp
+http://www.morganhorse.org.uk/tacksale.shtml
+http://www.morganstanley.com/GEFdata/digests/20020718-thu.html
+http://www.morganstanley.com/GEFdata/digests/20021105-tue.html
+http://www.morganstanley.com/GEFdata/digests/20050224-thu.html
+http://www.morganstanley.com/GEFdata/digests/20050425-mon.html
+http://www.morganstanleyindividual.com/customerservice/dictionary/Default.asp?letter=B
+http://www.morgue.demon.co.uk/Pages/Other_stuff/ARMY.HTM
+http://www.moria.co.nz/sf/bank.htm
+http://www.moriapoetry.com/ahearn.html
+http://www.moriel.org/articles/discernment/church_issues/analysis_of_purpose_driven_life.htm
+http://www.morino.org/advan_sp_new.asp
+http://www.morningnewsbeat.com/archives/2003/05/08.html
+http://www.morningred.com/friend/2002/05/idiosyncratica.html
+http://www.morningsidekick.com/2004-best-of-old/2004-best-of-01.htm
+http://www.moroccotimes.com/paper/article.asp?idr=2&id=7562
+http://www.morrice.info/walk/dean.html
+http://www.morrisdailyherald.com/main.asp?SectionID=1&SubSectionID=58&ArticleID=12778&TM=54345.38
+http://www.morrispost.com/races.htm
+http://www.mortgage101.com/Articles/LoanPrograms.asp?ArticleID=1020&p=mtg101
+http://www.mortgageit.com/About/PrivacyAndSecurity.aspx
+http://www.mortgagenewsdaily.com/3182005_Mortgage_Foreclosures.asp
+http://www.mortgagenewsdaily.com/6152005_Reverse_Mortgages_Info.asp
+http://www.morticiasmorgue.com/tish/mt/archive/000183.html
+http://www.morticiasmorgue.com/tish/mt/archive/000248.html
+http://www.morton-hotels.com/newton/weddings.html
+http://www.mos.com.np/services/webspace.html
+http://www.mos.org/doc/1600
+http://www.mosaec.com/mosaec/film/film_lisafrance.htm
+http://www.mosaiclife.com/2004_12_01_archives.php
+http://www.mosaicmatters.co.uk/features/vanessabenson.htm
+http://www.mosaicmatters.co.uk/questions/adhesive_queries.htm
+http://www.mosessinger.com/articles/files/eltonjohn.htm
+http://www.moskowitz-inc.com/events/shorttalks.html
+http://www.mosley-electronics.com/commercial.htm
+http://www.mosnews.com/feature/2004/04/12/police.shtml
+http://www.mosnews.com/money/2004/06/21/howmuch.shtml
+http://www.mosnews.com/money/2004/10/05/mobilecasinos.shtml
+http://www.mosnews.com/news/2004/12/28/policeschools_.shtml
+http://www.mosnews.com/news/2005/04/05/spaceprices.shtml
+http://www.mosquitoes.org/FISHPAGE.html
+http://www.most.gov.cn/English/Programs/key_RD/menu.htm
+http://www.mostateparks.com/twainsite/map.htm
+http://www.mostateparks.com/unionbridge/map.htm
+http://www.mostlybrightideas.com/dealers.html
+http://www.mostmerciful.com/history-2.htm
+http://www.mote.org/~mhenry/WREDTIDE.phtml
+http://www.motheratwork.co.uk/Childcare/0502education.asp
+http://www.motheratwork.co.uk/Finance/
+http://www.motherearth.org/lakenheathaction/
+http://www.mothering.com/articles/growing_child/discipline/take_a_bath.html
+http://www.mothering.com/articles/growing_child/food/green_horizons.html
+http://www.mothering.com/articles/new_baby/diapers/diaper-dance.html
+http://www.motherjones.com/commentary/columns/1993/01/ivins.html
+http://www.motherjones.com/commentary/columns/2002/10/we_177_01.html
+http://www.motherjones.com/commentary/columns/2004/05/04_200.html
+http://www.motherjones.com/commentary/columns/2005/06/FMLA.html
+http://www.motherjones.com/commentary/columns/2005/06/the_chauffeurs_dilemma.html
+http://www.motherjones.com/letters/2005/06/06_300.html
+http://www.motherjones.com/news/dailymojo/2004/11/10_503.html
+http://www.motherjones.com/news/feature/1992/09/bushboys.html
+http://www.motherjones.com/news/feature/1993/05/sesser.html
+http://www.motherjones.com/news/feature/1993/07/rodriguez.schrieberg.html
+http://www.motherjones.com/news/feature/2003/03/ma_273_01.html
+http://www.motherjones.com/news/feature/2003/03/ma_311_01.html
+http://www.motherjones.com/news/feature/2004/11/10_401.html
+http://www.motherjones.com/news/outfront/2003/09/ma_505_01.html
+http://www.motherjones.com/news/outfront/2004/01/12_400.html
+http://www.motherjones.com/news/qa/2000/03/jackson.html
+http://www.motherjones.com/news/qa/2005/04/bradley_martin.html
+http://www.motherjones.com/search/category_economy.html
+http://www.mothernature.com/Library/Bookshelf/Books/10/75.cfm
+http://www.mothernature.com/Library/Bookshelf/Books/16/208.cfm
+http://www.mothernature.com/Library/Bookshelf/Books/16/228.cfm
+http://www.mothernature.com/Library/Bookshelf/Books/19/3.cfm
+http://www.mothernature.com/Library/Bookshelf/Books/44/68.cfm
+http://www.mothernature.com/Library/Bookshelf/Books/46/13.cfm
+http://www.mothersbliss.co.uk/planning/illness.asp
+http://www.motivateus.com/
+http://www.motivation.org.uk/_get_involved/individuals.html
+http://www.motorbikestoday.com/features/Articles/2004_review.htm
+http://www.motorcraft.com/products.asp?T=2&M=15&PageID=74
+http://www.motorcyclegearreview.com/reviews.php?prodID=2
+http://www.motorcyclejournal.net/articles/Bike_Review/Colin%20Edwards/article.html
+http://www.motorhomemagazine.com/cforum/index.cfm/fuseaction/thread/tid/14901500.cfm
+http://www.motoring.co.za/index.php?fArticleId=2402324
+http://www.motoring.co.za/index.php?fArticleId=2402324&fSectionId=942&fSetId=381
+http://www.motoringfile.com/
+http://www.motoringfile.com/2005/05/04/minis_2006_color_changes
+http://www.motorists.com/ma/kill.html
+http://www.motorola.com/mediacenter/news/detail/0,,5662_5646_23,00.html
+http://www.motorspeed.com/multimedia_nav.html
+http://www.motorsport.com/news/article.asp?ID=142689&FS=NASCAR
+http://www.motorsports-network.com/honda/2005mc/crf450X.htm
+http://www.motto.com/glossary.html
+http://www.moultonlabs.com/gold.htm
+http://www.mountain-images.co.uk/scottish_highlands_gallery.htm
+http://www.mountain-plains.org/research/2000proj/ndsu/MPC-201.php
+http://www.mountain-portal.co.uk/text/Berne_meeting.html
+http://www.mountain-portal.co.uk/text/mallory.html
+http://www.mountainartcenter.org/dance.htm
+http://www.mountainastrologer.com/planettracks/hand/hand.html
+http://www.mountainastrologer.com/planettracks/recall.html
+http://www.mountainastrologer.com/plumb600.html
+http://www.mountainbike.com/community/article/1,4823,4102_621,00.html
+http://www.mountainman.com.au/yorta.html
+http://www.mountainroseherbs.com/specials/specials.php
+http://www.mountaintimes.com/community/environmental.php3
+http://www.mountaintop.be/index.php?tempDateOfEntry=200403010240
+http://www.mountainvoices.org/i_th_environment.asp
+http://www.mountainvoices.org/m_th_health.asp
+http://www.mountainvoices.org/p_th_traditional_skills.asp
+http://www.mountainzone.ir/News/newsarchive1.htm
+http://www.mountauburn.caregroup.org/library/healthguide/en-us/support/topic.asp?hwid=tx4097abc
+http://www.mounteverest.net/story/BestofExplorersWeb2004AwardsEverestCentralNorthWallDec262004.shtml
+http://www.mounteverest.net/story/stories/ExWebEverestDebriefRussianCentralNorthWallJul222004.shtml
+http://www.mounthorebwi.info/newvoterform.htm
+http://www.mountmorgan.com/dArcy.html
+http://www.mountsnow.com/summer/re_faq.html
+http://www.mousesavers.com/dlresorts.html
+http://www.mouthshut.com/review/Dealing_with_Fear-64763-1.html
+http://www.mouthshut.com/review/Nachlai_-_Harbhajan_Maan-66769-1.html
+http://www.mouthstick.net/desk/carrturn.htm
+http://www.mouthulcers.org/intro.html
+http://www.mouthulcers.org/mucositis.html
+http://www.mouthulcers.org/regdupre.html
+http://www.mouthulcers.org/richardthomas.html
+http://www.mouthulcers.org/stevenpohlhaus.html
+http://www.mouthulcers.org/thisworks.html
+http://www.mouton-noir.org/writings/thesis/ch1/transition1.html
+http://www.move.com.au/disc.cfm/3266
+http://www.moveamericaforward.com/index.php/DailyFile/
+http://www.moveamericaforward.org/index.php/DailyFile/
+http://www.moveamericaforward.org/index.php/DailyFile/2004/08/
+http://www.moveandstay.com/milan/guide_airport_information.asp
+http://www.moveleft.com/moveleft_essay_2004_05_09_if_bush_were_truly_sorry_about_the_prisoners_in_iraq.asp
+http://www.movementasnetwork.org/
+http://www.movementdisorders.org/europeansection/recentactivities.shtml
+http://www.moveon.org/gore-speech.html
+http://www.mover.net/cam/content/TipsEn.html
+http://www.movermax.com/overseas_packing_guide.asp
+http://www.movie-gazette.com/cinereviews/672
+http://www.movie-gazette.com/cinereviews/978
+http://www.movie-trains.com/obrother.html
+http://www.moviecitynews.com/columnists/poland/
+http://www.moviecitynews.com/columnists/poland/2005/050421.html
+http://www.moviediva.com/MD_root/reviewpages/MDWomen.htm
+http://www.moviefreak.com/dvd/combo05.htm
+http://www.moviemaker.com/hop/vol4/05/digital.html
+http://www.moviemaker.com/hop/vol4/05/directing.html
+http://www.moviemaker.com/issues/36/36_kimberly.html
+http://www.moviemaker.com/issues/53/htdi.html
+http://www.moviemarshal.com/comment16-19-dec-04.html
+http://www.moviemartyr.com/2001/ghostworldmyfirstmister.htm
+http://www.moviemistakes.com/film3246
+http://www.moviemistakes.com/film3861
+http://www.moviemistakes.com/questions_generic.php
+http://www.moviemistakes.com/tv2651/pictures
+http://www.movienet.com/capturingfriedmans.html
+http://www.movienet.com/stationagent.html
+http://www.movienet.com/walkonwater.html
+http://www.moviepoopshoot.com/news/jun05/18.html
+http://www.moviepoopshoot.com/old/story4.html
+http://www.moviesforme.ca/detail.asp?product_ID=2403
+http://www.moviesonline.ca/movienews_2382.html
+http://www.moviesunlimited.com/musite/product.asp?sku=277703++
+http://www.moviesunlimited.com/musite/product.asp?sku=796519++
+http://www.moviesunlimited.com/musite/product.asp?sku=D11122++
+http://www.moviesunlimited.com/musite/product.asp?sku=D17496++
+http://www.moviesunlimited.com/musite/product.asp?sku=D37860++
+http://www.movietickets.com/default.asp
+http://www.moviewavs.com/Movies/O_Brother_Where_Art_Thou.shtml
+http://www.moving-company-guide.com/
+http://www.moving-to-france-made-easy.com/preparing-for-the-move-to-france.html
+http://www.moving.org/before/cmcstate.asp
+http://www.movinghands.net/nac/nov04index.asp
+http://www.movinghands.net/nac/okt04index.asp
+http://www.movinghere.org.uk/galleries/histories/caribbean/growing_up/growing_up.htm
+http://www.movinghere.org.uk/help/glossary.htm
+http://www.movinghere.org.uk/stories/story254/story254.htm?identifier=stories/story254/story254.htm&ProjectNo=9
+http://www.movingideas.org/content/en/on_the_hill/2005_sou.htm
+http://www.movingimages.ca/catalogue/Individual/Individual_h.html
+http://www.movingimages.ca/catalogue/Individual/Individual_l.html
+http://www.movingimages.ca/catalogue/Individual/Individual_s.html
+http://www.movingon.org/article.asp?sID=1&Cat=16&ID=839
+http://www.movingon.org/article.asp?sID=8&Cat=19&ID=1281
+http://www.movingthegoalposts.org/archives/000084.html
+http://www.movingturtle.com/
+http://www.movingvision.co.uk/html/people.htm
+http://www.moxon.net/india/james_bond_in_india.html
+http://www.moytura.com/lackagh.htm
+http://www.moytura.com/reflections/TinyFoot.html
+http://www.mozilla.org/docs/xul/xulnotes/xulnote_beasts.html
+http://www.mozilla.org/hacking/coding-introduction.html
+http://www.mozilla.org/products/firefox/releases/1.0.4.html
+http://www.mozilla.org/projects/firefox/qa/changelog-rc1.html
+http://www.mozilla.org/projects/firefox/qa/downloads.html
+http://www.mozilla.org/projects/security/pki/nss/ref/ssl/sslerr.html
+http://www.mozilla.org/releases/mozilla1.6b/known-issues-int.html
+http://www.mozilla.org/releases/mozilla1.7/README.html
+http://www.mozilla.org/releases/mozilla1.7rc2/README.html
+http://www.mozilla.org/support/firefox/faq
+http://www.mozilla.org/support/thunderbird/faq
+http://www.mozillaquest.com/Mozilla_News_02/Mozilla_1-0-0_preview-browser_Story01.html
+http://www.mp-marine.com/systems.html
+http://www.mp3.com/albums/10649067/summary.html
+http://www.mp3.com/albums/196338/summary.html
+http://www.mp3.com/albums/263621/summary.html
+http://www.mp3.com/h%C3%BCsker-d%C3%BC/artists/3864/biography.html
+http://www.mpa.gov.uk/about/recruitment/eodirectoranddep.htm
+http://www.mpaa.org/MPAAPress/2003/2003_09_17b.htm
+http://www.mpaa.org/legislation/press/96/96_8_16.htm
+http://www.mpcc-cppm.gc.ca/300/319/e_e.html
+http://www.mpcc-cppm.gc.ca/300/319/f_e.html
+http://www.mpdigest.com/Articles/Oct2001/CST/Default.htm
+http://www.mpegable.com/e5/converter/
+http://www.mpegable.com/e5/encode/
+http://www.mpegable.com/e5/videomp4/
+http://www.mpi-hd.mpg.de/be/tsr/ecool_sys_low.html
+http://www.mpi.mb.ca/english/claims/appeals/rab.html
+http://www.mpiweb.org/chapters/chapters/chaplead-issue5.asp
+http://www.mpiweb.org/resources/jobs/view_record.asp?record_ID=3529
+http://www.mplayerhq.hu/homepage/design7/news.html
+http://www.mplcommunications.com/mccartney/paul_news.asp
+http://www.mpnmag.com/mpn_show/seminars2004.htm
+http://www.mpogd.com/reviews/?ID=1557
+http://www.mpopc.org.my/abtefu1.htm
+http://www.mposth.com/freeread.html
+http://www.mpp.org/WA/bills_759.html
+http://www.mprize.org/
+http://www.mps.com/newsevents/PressReleases/042304.asp
+http://www.mpsc839.org/_Pegboard/Pegboard_h/_PB_2004/PB200410.HTM
+http://www.mpt.org/motorweek/longterm/armada04.shtml
+http://www.mptrader.com/marketshistory.php?id=235
+http://www.mrbass.org/dvdshrink/
+http://www.mrbellersneighborhood.com/story.php?storyid=1466
+http://www.mrbellersneighborhood.com/story.php?storyid=1501
+http://www.mrbellersneighborhood.com/story.php?storyid=1519
+http://www.mrbrown.com/blog/2004/10/is_the_new_musi.html
+http://www.mrc-cbu.cam.ac.uk/amodeus/cp.html
+http://www.mrc.ac.uk/index/public-interest/public-news_centre/public-press_office/public-press_releases_2003/public-25_march_2003.htm
+http://www.mrc.ac.uk/index/publications/publications-annual_reports/publications-annual_reports-2/publications-annual_report_2002/publications-annual_report_2002_support_for_research.htm
+http://www.mrc.ac.za/capeheart/highlights.htm
+http://www.mrc.org/BozellColumns/entertainmentcolumn/2004/col20041222.asp
+http://www.mrc.org/cyberalerts/2002/cyb20020923.asp
+http://www.mrc.org/cyberalerts/2003/cyb20030421.asp
+http://www.mrc.org/printer/cyberalerts/2003/cyb20030421pf.asp
+http://www.mrc.org/projects/mww/mww0303.asp
+http://www.mrc.org/projects/mww/welcome.asp
+http://www.mrc.state.va.us/cfn497.htm
+http://www.mrc.state.va.us/swr/swr1_00.htm
+http://www.mrc.state.va.us/vswft/vsft1.htm
+http://www.mrcltd.org.au/included_files/comment6.cfm
+http://www.mrcoldcall.com/SuccessfulPayment3.html
+http://www.mrcoldcall.com/SuccessfulPayment4.html
+http://www.mrcophth.com/mrcophth2experience/34candidatesmrcophthpart2.html
+http://www.mrd.gov.fj/gfiji/mining/prospect/guidesmp.html
+http://www.mrdbridges.com/hennepin.php
+http://www.mrexcel.com/weightloss.shtml
+http://www.mrfa.org/vnstats.htm
+http://www.mrfs.net/trips/1998/France_and_Belgium/Paris_3/Paris_3.html
+http://www.mrltc.com/interviews-mr-long-term-care.html
+http://www.mrltc.com/ltc-articles-redlining-data.html
+http://www.mrmnursingtheory.org/Overview%20MRM.htm
+http://www.mrn.gouv.qc.ca/english/energy/forms/forms-electricity.jsp
+http://www.mrnc.org/mrnc_web/corp/default.aspx?ID=NewsReleases
+http://www.mrotoday.com/mro/archives/exclusives/PERMALIGHT.htm
+http://www.mrpc.info/
+http://www.mrsc.org/mc/courts/supreme/089wn2d/089wn2d0959.htm
+http://www.mrsc.org/subjects/pubsafe/emergency/EM-Terrorism.aspx
+http://www.mrsfields.com/
+http://www.mrtrally.com.au/clientcars.htm
+http://www.mrtv3.net.mm/news/12press.html
+http://www.ms.northropgrumman.com/siteindex/Help.html
+http://www.ms.washington.edu/acms/seminars/A99/scheduleA99.html
+http://www.msa-natl.org/matf/news2.php?ID=27
+http://www.msac.uoguelph.ca/Denton.htm
+http://www.msacroa.org/
+http://www.msactivesource.co.uk/animation/datasheet.asp?userID=&ID=4
+http://www.msad54.k12.me.us/MSAD54Pages/skow/ForeignXchange/memik.html
+http://www.msaustralia.org.au/msinformation/being_a_parent_with_ms.htm
+http://www.msc.ec.gc.ca/education/scienceofclimatechange/understanding/FAQ/sections/3_e.html
+http://www.mscd.edu/~themet/TheMetropolitan/04_05/Vol27_issue11/f1.html
+http://www.mscnet.com/jenny/mk/events/99/nationals/reports.html
+http://www.msdnevents.com/
+http://www.mse.uiuc.edu/studentnews/nov04studnews.html
+http://www.msf.org.au/stories/twfeature/2005/077-twf.shtml
+http://www.msf.org/content/page.cfm?articleid=CFEBA3CE-0911-4573-A4064529B87C875C
+http://www.msfc.com/content.cfm?releaseID=48
+http://www.msfinancialsavvy.com/archive/abusive_tax_fraud.html
+http://www.msgmates.com/
+http://www.msit.unp.ac.za/MSIT_SchoolNews.htm
+http://www.msj.bolton.sch.uk/ethos.htm
+http://www.mskcc.org/mskcc/html/426.cfm
+http://www.mskcc.org/mskcc/html/50379.cfm
+http://www.msmagazine.com/contact.asp
+http://www.msmagazine.com/jun99/monica-abrams.asp
+http://www.msmagazine.com/summer2005/birthcontrol.asp
+http://www.msmoney.com/mm/planning/marriage/family_planning.htm
+http://www.msnbc.com/modules/newsweek/gersh/529994.asp
+http://www.msnbc.com/news/929152.asp
+http://www.msnbc.com/news/934190.asp
+http://www.msnbc.com/news/937302.asp
+http://www.msnbc.com/news/946440.asp
+http://www.msnbc.com/news/984676.asp
+http://www.msnbc.msn.com/
+http://www.msnbc.msn.com/ID/6886726/
+http://www.msnbc.msn.com/ID/7761272/
+http://www.msnbc.msn.com/id/3044924/site/newsweek/
+http://www.msnbc.msn.com/id/3071534/
+http://www.msnbc.msn.com/id/3077151/
+http://www.msnbc.msn.com/id/3077811/
+http://www.msnbc.msn.com/id/3080261/
+http://www.msnbc.msn.com/id/3217961/
+http://www.msnbc.msn.com/id/3607201/
+http://www.msnbc.msn.com/id/3626796/
+http://www.msnbc.msn.com/id/3705241/
+http://www.msnbc.msn.com/id/3754103/
+http://www.msnbc.msn.com/id/3907357/
+http://www.msnbc.msn.com/id/4138986/
+http://www.msnbc.msn.com/id/4179618/
+http://www.msnbc.msn.com/id/4326967/
+http://www.msnbc.msn.com/id/4347250/
+http://www.msnbc.msn.com/id/4449087/
+http://www.msnbc.msn.com/id/4625213/
+http://www.msnbc.msn.com/id/4684713/
+http://www.msnbc.msn.com/id/4711931/
+http://www.msnbc.msn.com/id/4767542/
+http://www.msnbc.msn.com/id/4796366/
+http://www.msnbc.msn.com/id/4880556/
+http://www.msnbc.msn.com/id/4901848/
+http://www.msnbc.msn.com/id/4925464/
+http://www.msnbc.msn.com/id/5092840/site/newsweek/
+http://www.msnbc.msn.com/id/5113550/
+http://www.msnbc.msn.com/id/5184077/
+http://www.msnbc.msn.com/id/5197853/site/newsweek
+http://www.msnbc.msn.com/id/5217861/
+http://www.msnbc.msn.com/id/5270511/
+http://www.msnbc.msn.com/id/5327529/
+http://www.msnbc.msn.com/id/5574180/
+http://www.msnbc.msn.com/id/5626555/site/newsweek/
+http://www.msnbc.msn.com/id/5848770/
+http://www.msnbc.msn.com/id/6075393/
+http://www.msnbc.msn.com/id/6091997/site/newsweek/
+http://www.msnbc.msn.com/id/6113461/
+http://www.msnbc.msn.com/id/6142953/
+http://www.msnbc.msn.com/id/6195024/
+http://www.msnbc.msn.com/id/6199779/site/newsweek/
+http://www.msnbc.msn.com/id/6308419/
+http://www.msnbc.msn.com/id/6409077/
+http://www.msnbc.msn.com/id/6410075/
+http://www.msnbc.msn.com/id/6595798/site/newsweek/
+http://www.msnbc.msn.com/id/6667405/
+http://www.msnbc.msn.com/id/6694659/
+http://www.msnbc.msn.com/id/6712885/
+http://www.msnbc.msn.com/id/6742330/
+http://www.msnbc.msn.com/id/6759369/
+http://www.msnbc.msn.com/id/6805000/
+http://www.msnbc.msn.com/id/6841189/
+http://www.msnbc.msn.com/id/6846348/
+http://www.msnbc.msn.com/id/6853606/
+http://www.msnbc.msn.com/id/6861528/
+http://www.msnbc.msn.com/id/6882747/
+http://www.msnbc.msn.com/id/6915347/
+http://www.msnbc.msn.com/id/6923245/
+http://www.msnbc.msn.com/id/6949637/
+http://www.msnbc.msn.com/id/6954712/
+http://www.msnbc.msn.com/id/6999382/site/newsweek/
+http://www.msnbc.msn.com/id/7004627/
+http://www.msnbc.msn.com/id/7019590/site/newsweek/
+http://www.msnbc.msn.com/id/7041426/
+http://www.msnbc.msn.com/id/7108135/
+http://www.msnbc.msn.com/id/7173024/
+http://www.msnbc.msn.com/id/7197633/
+http://www.msnbc.msn.com/id/7243574/
+http://www.msnbc.msn.com/id/7258896/
+http://www.msnbc.msn.com/id/7275547/
+http://www.msnbc.msn.com/id/7284978/
+http://www.msnbc.msn.com/id/7322400/
+http://www.msnbc.msn.com/id/7325063/site/newsweek/
+http://www.msnbc.msn.com/id/7407401/page/2/
+http://www.msnbc.msn.com/id/7590370/site/newsweek/
+http://www.msnbc.msn.com/id/7619740/
+http://www.msnbc.msn.com/id/7629770/
+http://www.msnbc.msn.com/id/8079314/
+http://www.msnbc.msn.com/id/8113663/
+http://www.msnbc.msn.com/id/8132778/
+http://www.msnbc.msn.com/id/8170650/
+http://www.msnbc.msn.com/id/8185490/site/newsweek/
+http://www.msnbc.msn.com/id/8233501/
+http://www.msnbc.msn.com/id/8242097/
+http://www.msnbc.msn.com/id/8256796/
+http://www.msnbc.msn.com/id/8270310/site/newsweek/
+http://www.msnbc.msn.com/id/8284735/
+http://www.msnbc.msn.com/id/8308501/
+http://www.msnbc.msn.com/id/8309720/
+http://www.msnbc.msn.com/id/8313299/
+http://www.msnbc.msn.com/id/8326362/
+http://www.msnbc.msn.com/id/8330748/
+http://www.msnbc.msn.com/id/8332675
+http://www.msnbc.msn.com/id/8338004/
+http://www.msnbc.msn.com/id/8405353/
+http://www.msnepal.org/reports_pubs/ekchhin/2003_issue3/04.htm
+http://www.msno.org/pay.html
+http://www.msnucleus.org/membership/html/k-6/wc/wcoverview.html
+http://www.mso.anu.edu.au/info/fire/orchiston/
+http://www.mspalliance.com/articles.php?article=406
+http://www.mspalliance.com/articles.php?article=474
+http://www.mspb.gov/decisions/1999/bn210pko.html
+http://www.mspb.gov/decisions/2004/west_dc020145c1.html
+http://www.mspb.gov/studies/newsletters/04sepnws/04sepnws.htm
+http://www.mspb.gov/studies/rpt_02-20-02_jobseekers/redd.htm
+http://www.msprugby.co.nz/history.html
+http://www.msq.qld.gov.au/qt/msq.nsf/index/tides_notes
+http://www.mssc.state.ms.us/rules/RuleText.asp?RuleTitle=RULE+803.+HEARSAY+EXCEPTIONS%3B+AVAILABILITY+OF+DECLARANT+IMMATERIAL&IDNum=4
+http://www.mssm.edu/labs/godfrt01/research/neck.html
+http://www.mssm.edu/peds/spec_pulmcare.shtml
+http://www.mssociety.ca/chapters/crc/
+http://www.mssociety.ca/en/give/pg_literature.htm
+http://www.mssociety.ca/en/information/mseffects.htm
+http://www.msss.com/http/ps/life/life.html
+http://www.msstate.edu/org/ifc/publicrelations.html
+http://www.mssu.edu/accents/accents2004/accents02-13-04.htm
+http://www.mssu.edu/seg-vm/bio_e__r___harry__harrison.html
+http://www.mssu.edu/seg-vm/bio_james_r__wait.html
+http://www.mssv.net/archives/000523.shtml
+http://www.mst.dk/indu/02050800.htm
+http://www.mstateathletics.com/0,5604,1__0_62173,00.html
+http://www.mstbrazil.org/ag/forum050300.html
+http://www.msteelcycles.co.uk/renovate.htm
+http://www.mstevensandson.co.uk/shop/conditions.php
+http://www.mstrust.org.uk/publications/furtherreading.jsp
+http://www.mstu.edu.ru/publish/vestnik/v01_1_n01/eng_cont.html
+http://www.msu.edu/course/aec/810/clippings/Farmers%20lose%20land.htm
+http://www.msu.edu/unit/acadgov/corrage/chap1.html
+http://www.msu.edu/unit/cisah/b_courses_fa02.htm
+http://www.msu.edu/unit/msuarhc/buildingexhibit.htm
+http://www.msu.edu/unit/ombud/dishonestyFAQ.html
+http://www.msu.edu/unit/phl/gradconference/archive/abstracts2001.html
+http://www.msu.edu/user/abbottb/formal.htm
+http://www.msu.edu/user/glsen/butchest.htm
+http://www.msu.edu/user/kilpela/doubtpref.htm
+http://www.msu.edu/~dugganha/intro.htm
+http://www.msu.edu/~watson51/Lv4RLS/Lv4homework.html
+http://www.msubaroda.ac.in/My%20Webs/curriculum%20sy.htm
+http://www.msue.msu.edu/imp/moddp/20293100.html
+http://www.mswmanagement.com/msw_0001_trailer.html
+http://www.msz.gov.pl/start.php?page=1020000001
+http://www.mszs.si/eng/ministry/publications/development/pogl_01.asp
+http://www.mt-online.com/articles/1203emerson.cfm
+http://www.mta.ca/tour/academicdepartments.html
+http://www.mta.net/press/2002/09_September/mta_082.htm
+http://www.mta.net/press/2004/09_september/mta_156.htm
+http://www.mta.net/projects_plans/HOV/faqs.htm
+http://www.mta.net/projects_plans/midcity/alpa.htm
+http://www.mta.nyc.ny.us/mta/ada/rail.htm
+http://www.mtafund.org/reference/human.htm
+http://www.mtb-consulting.com/itplan.htm
+http://www.mtb-freeride.com/community/forum/topic.asp?TOPIC_ID=213&whichpage=2
+http://www.mtbakerbsa.org/
+http://www.mtekk.com.au/browse/page739.html
+http://www.mtgs-etc.com/VTS/vssarticle.htm
+http://www.mth.kcl.ac.uk/~streater/cotdeaths.html
+http://www.mtholyoke.edu/acad/intrel/Petroleum/iraq.htm
+http://www.mtholyoke.edu/acad/intrel/bush/choice.htm
+http://www.mtholyoke.edu/acad/intrel/bush/japan.htm
+http://www.mtholyoke.edu/acad/intrel/bush/role.htm
+http://www.mtholyoke.edu/acad/intrel/globecon/kilborn.htm
+http://www.mtholyoke.edu/acad/intrel/kalicki.htm
+http://www.mtholyoke.edu/acad/intrel/kurd4.htm
+http://www.mtholyoke.edu/acad/intrel/pentagon/doc52.htm
+http://www.mtholyoke.edu/acad/intrel/pentagon4/doc259.htm
+http://www.mtholyoke.edu/acad/intrel/sen.htm
+http://www.mtholyoke.edu/courses/sgabriel/economics/china-essays/4.html
+http://www.mtholyoke.edu/offices/comm/csj/050605/science.shtml
+http://www.mtholyoke.edu/omc/faclegis/legisl/facleg12.html
+http://www.mthoodsoapworks.com/faqs.html
+http://www.mthurricane.com/Hurricane_Charley.htm
+http://www.mtishows.com/show_home.asp?ID=000021
+http://www.mtk.com.tw/ir-home.php
+http://www.mtmha.org/cell-phone-carrying-case.html
+http://www.mtnforum.org/emaildiscuss/discuss02/031102283.htm
+http://www.mtniron.com/PublicWorks/BuildingPolicy.htm
+http://www.mtnrimfsc.org/agencyupdates.html
+http://www.mto.gov.on.ca/english/engineering/cosens/
+http://www.mtpleasantlawyers.com/links/federal.htm
+http://www.mtq.gouv.qc.ca/en/reseau/signalisation/camions.asp
+http://www.mtroyal.ab.ca/conservatory/academy.shtml
+http://www.mtroyal.ab.ca/conservatory/sum_string.shtml
+http://www.mtroyal.ab.ca/studentlife/study_notetaking.shtml
+http://www.mtroyal.ab.ca/studentlife/study_studying.shtml
+http://www.mts.net/~pmorrow/bayeng1.htm
+http://www.mts.net/~pmta/gentrl/
+http://www.mtsd.org/mihs/main/taylor/indinv.html
+http://www.mtsgrinders.com/coolcut.php
+http://www.mtstandard.com/
+http://www.mtstandard.com/articles/2005/02/06/entertain_top/hjjejhjfjbegge.txt
+http://www.mtstandard.com/articles/2005/02/09/entertain_top/hjjejhjfjbegge.txt
+http://www.mtstandard.com/front
+http://www.mtstars.com/forum/equipment/mtstars1.shtml
+http://www.mtsu.edu/~pmccarth/io_nts2.htm
+http://www.mtsu.edu/~proffice/Record/Rec_v11/rec1105/rec1105.html
+http://www.mtu.edu/current/parentnet/archives/listserv/concerned.html
+http://www.mtuk.org/index.php?page=mammal_carnivores
+http://www.mtv.com/bands/az/deep_forest/bio.jhtml
+http://www.mtv.com/bands/az/jackson_michael/bio.jhtml
+http://www.mtv.com/bands/t/taking_back_sunday/news_feature_082304/
+http://www.mtv.com/music/album_preview/mario/turning_point/
+http://www.mtv.com/news/articles/1471546/20030425/story.jhtml
+http://www.mtv.com/news/articles/1479429/09302003/fuel.jhtml
+http://www.mtv.com/news/articles/1495046/12172004/cam_ron.jhtml
+http://www.mtv.com/news/articles/1495046/20041217/story.jhtml
+http://www.mtv.com/news/articles/1496008/01192005/green_day.jhtml
+http://www.mtv.com/news/articles/1496008/20050119/green_day.jhtml?headlines=true
+http://www.mtv.com/news/articles/1496008/20050119/story.jhtml
+http://www.mtv.com/onair/dyn/made/episode.jhtml?episodeID=81699
+http://www.mtv.com/shared/movies/interviews/b/berry_catwoman_040701/
+http://www.mtvasia.com/ubbthreads2/showflat.php?Cat=&Board=MariahCarey&Number=653377&Main=642789
+http://www.mtvasia.com/ubbthreads2/showflat.php?Cat=&Board=MariahCarey&Number=654139&Main=642789
+http://www.mtwain.com/A_Helpless_Situation/0.html
+http://www.mty.itesm.mx/rectoria/pi/internationalstudents/Ingles/undergraduate_students/materias/EC99859.htm
+http://www.mu.ac.ke/finform/curri.html
+http://www.muc.edu/admission/new_student_information/new_student_faqs
+http://www.muchmusic.net/en/listsingerinfo.asp?singer=No%20Doubt
+http://www.mudcat.org/thread.cfm?threadid=67070&messages=76&page=1&desc=yes
+http://www.mudhutsmedia.co.uk/modules.php?name=Forums
+http://www.mudsprings.com/WebGen.aspx?WGPage=GIS%20Glossary
+http://www.mudvillegazette.com/archives/000359.html
+http://www.mudvillegazette.com/archives/002684.html
+http://www.muffley.net/pacific/dutch/ozland.htm
+http://www.mugglenet.com/editorials/thephoenixfiles/tpf6.shtml
+http://www.mugsnj.org/events.html
+http://www.mukto-mona.com/new_site/mukto-mona/human_rights/sentence_raped.htm
+http://www.mullingarharriers.com/
+http://www.mult-sclerosis.org/news/Jun2004/TwoWelshDoctorsMakingaDifference.html
+http://www.mult-sclerosis.org/news/Sep1999/BaltimoreSunMS.html
+http://www.multicians.org/f7y.html
+http://www.multicians.org/fjcc1.html
+http://www.multicians.org/security.html
+http://www.multied.com/Navy/cruiser/Helena.html
+http://www.multied.com/dates/1959.html
+http://www.multiflora.co.uk/Hair%20loss%20treatments%20information%20+%20Free%20trial!.htm
+http://www.multiflora.co.uk/hair%20loss%20FAQ.htm
+http://www.multiflorum.com/
+http://www.multilingualbooks.com/basque.html
+http://www.multilingualbooks.com/musical-spanish.html
+http://www.multilingualvacancies.com/terms.htm
+http://www.multiple-sclerosis-us.web.com/ed_story.htm
+http://www.multiplemyeloma.org/about_myeloma/2.05.html
+http://www.multispectral.com/history.html
+http://www.multisuite.com/readme.htm
+http://www.multitel.be/?page=projets
+http://www.multiworld.org/taleemnet/eduexp/hstp.htm
+http://www.mum-mum.info/2004_10_17_mum-mum_archive.html
+http://www.mum.com.au/
+http://www.mum.org/menhydev.htm
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2506
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2587
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2617
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2644
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2645
+http://www.mumfordbooks.co.uk/CAT.asp?BookID=2646
+http://www.mun.ca/ceuep/external_relations.html
+http://www.mun.ca/finance/policies_procedures/computer_system_admin.php
+http://www.munciesanitary.org/sewer/long_term.php
+http://www.munciesanitary.org/sewer/long_term.php?print=1
+http://www.mundania.com/books-flightsofmind.html
+http://www.municipal.gov.sk.ca/mrd/haul/5skmainagrees.shtml
+http://www.munnar.com/html/Tea1.htm
+http://www.munnar.com/html/tea2.htm
+http://www.muonline.com/ReGlobal/subpages/news/news.asp?Next_Page=4&Munews_Section=0&Munews_Text=
+http://www.mup.org/html/ministries.htm
+http://www.muq.org/~cynbe/compression/ppm.html
+http://www.murderdog.com/august_rapcointelpro/targetarea.html
+http://www.murdoch.edu.au/elaw/issues/v1n1/iorns113.html
+http://www.murdoch.edu.au/elaw/issues/v5n4/whitton54.html
+http://www.murdoch.edu.au/elaw/issues/v6n3/blyth63_text.html
+http://www.murdoch.edu.au/elaw/issues/v7n4/simmonds74_text.html
+http://www.murdoch.edu.au/elaw/issues/v9n1/cathcart91_text.html
+http://www.murdoconline.net/archives/002388.html
+http://www.murraystate.edu/qacd/cos/geo/gsc641/1997/rahman/
+http://www.musangsa.org/t02.htm
+http://www.musc.edu/cvc/NIDApubs.htm
+http://www.musclemustangfastfords.com/tech/0302MMFF_SlammedPt1/
+http://www.muscletech.com/TRAINING/GOAL_SETTING_TIPS/Goal_Setting_Tips_Bodybuilding.shtml
+http://www.muscleupcanada.com/upcoming-events.htm
+http://www.muscular-dystrophy.org/document.rm?id=163
+http://www.muscular-dystrophy.org/research/research_reviews/duchenne_1.html
+http://www.museletter.com/archive/110.html
+http://www.museletter.com/archive/cia-oil.html
+http://www.museletter.com/partys-over.html
+http://www.museum-security.org/01/087.html
+http://www.museum-security.org/products.html
+http://www.museum.cornell.edu/HFJ/rental/guide.html
+http://www.museum.tv/archives/etv/E/htmlE/ethicsandte/ethicsandte.htm
+http://www.museum.tv/archives/etv/E/htmlE/eyewitnessto/eyewitnessto.htm
+http://www.museum.tv/archives/etv/I/htmlI/ilovelucy/ilovelucy.htm
+http://www.museum.tv/archives/etv/R/htmlR/russellken/russellken.htm
+http://www.museum.tv/archives/etv/S/htmlS/spaceprogram/spaceprogram.htm
+http://www.museum.tv/archives/etv/W/htmlW/wales/wales.htm
+http://www.museum.tv/debateweb/html/history/2000/00essay/article6.htm
+http://www.museum4kids.net/BirthdayParties.htm
+http://www.museumland.com/LotherA.html
+http://www.museumldv.com/lionardo/ldv-en/vridning.htm
+http://www.museummarketingtips.com/articles/webmistakes.html
+http://www.museumofhoaxes.com/hoax/forum/forum_comments/2420/
+http://www.museumofhoaxes.com/hoax/weblog/comments/1244/
+http://www.museumofleftwinglunacy.com/archives/2005/06/dick_durbin_bla.html
+http://www.museumoflondon.org.uk/MOLsite/learning/practical/access.html
+http://www.museumoneinc.org/articles/september.htm
+http://www.museums.ca/Cma1/About/Links/museumstudies/provinces/ontario/thunderbay.htm
+http://www.museums.org.za/bio/plants/theaceae/camellia_sinensis.htm
+http://www.museumserver.nl/expositie/kunc/embarrassing.html
+http://www.museumsontario.com/resources/rsc_tip_orgs.shtml
+http://www.music-critic.ca/album-reviews/dashboard_mtv_unplugged.shtml
+http://www.music.columbia.edu/~polashek/phonology.html
+http://www.musicalheaven.com/s/sunday_in_the_park_with_george.shtml
+http://www.musicalonline.com/molmagazine/article/web_portal.htm
+http://www.musicals101.com/bwaythhist2.htm
+http://www.musicals101.com/cd1.htm
+http://www.musicals101.com/who10.htm
+http://www.musicalspanish.com/features.htm
+http://www.musicboxattic.com/suhaingrhohi.html
+http://www.musiccentre.ca/apps/index.cfm?fuseaction=composer.FA_dsp_biography&authpeopleid=9408&by=M
+http://www.musicconnection.com/currentissue/mcprofile1/mcprofile1.lcgi
+http://www.musicdish.com/mag/?id=10236
+http://www.musicdish.com/mag/index.php3?id=10236
+http://www.musicedmarket.com/MEMChart/MEMchart.htm
+http://www.musiceducationmadness.com/contributions.shtml
+http://www.musiceducationonline.org/smea/ARTSED1.html
+http://www.musicforamerica.org/blog/2128
+http://www.musicforamerica.org/community?from=56
+http://www.musicforamerica.org/layout/past/9
+http://www.musicforamerica.org/node/1058
+http://www.musicforamerica.org/node/70845
+http://www.musicforamerica.org/node/view/1323
+http://www.musicforamerica.org/taxonomy/term/20770
+http://www.musicfromthemovies.com/sotw.asp?ID=39
+http://www.musiciansfinder.com/Product-Sports3-Branded_Accessories-26002-13.html
+http://www.musicianshealth.com/whyrsi.htm
+http://www.musicianshotline.com/taaffe/practice_up.htm
+http://www.musiclinks.nl/T/Tanita_Tikaram/songtekst-Stop-Listening-L9319.html
+http://www.musicmedals.org/?page=introduction/quotes.html
+http://www.musicnotes.com/sheetmusic/book.asp?ppn=bkhl699202
+http://www.musicplayer.com/ubb/ultimatebb.php?/ubb/get_topic/f/18/t/014535/p/1.html
+http://www.musicplayer.com/ubb/ultimatebb.php?/ubb/get_topic/f/5/t/012003.html
+http://www.musicremedy.com/articles/index.cfm?FuseAction=ShowMessage&Id=1125
+http://www.musicsales.com/DesktopDefault.aspx?TabID=211&ItemID=40
+http://www.musicsender.com/jazzlistings.html
+http://www.musicsonglyrics.com/I/imxlyrics/imxhatetheplayalyrics.htm
+http://www.musictank.co.uk/events_future.htm
+http://www.musictank.co.uk/funding_res.htm
+http://www.musicteachers.co.uk/links/index.php?category=10
+http://www.musicteachers.co.uk/links/index.php?category=44
+http://www.musictherapy.org/factsheets/olderadults.html
+http://www.musicthoughts.com/list/cat/b
+http://www.musketeer.org/
+http://www.muskoka.com/tour/artists/p/
+http://www.muslimedia.com/archives/oaw00/clinton-oil.htm
+http://www.muslimhands.org/
+http://www.muslimhomeschool.com/mhsnr/ED/game/dr.htm
+http://www.muslimintro.com/browse-men-28.html
+http://www.muslimuzbekistan.com/eng/ennews/2004/11/ennews09112004_1.html
+http://www.muslimwakeup.com/elections/archives/001173.php
+http://www.mustrad.org.uk/reviews/zoop.htm
+http://www.mustrad.org.uk/vop/665.htm
+http://www.mustseenewyork.com/the-roger-smith-hotel.html
+http://www.mustudentnews.com/120904/infocus/facebook.html
+http://www.mutantreviewers.com/rgof1.html
+http://www.mutantreviewers.com/yakkity1.html
+http://www.mutronics.co.uk/html/st_sound.htm
+http://www.mutualofamerica.com/articles/Fortune/2002_06_27/homedepot2.asp
+http://www.mv-voice.com/morgue/2001/2001_08_24.epc.html
+http://www.mvcc.edu/HumanRsrcs/jobopp.htm
+http://www.mvgazette.com/news/2004/12/24/habitat_family.php
+http://www.mvgazette.com/news/2005/02/18/marie_allen.php
+http://www.mvia.com/Digcams/dig_cameras.html
+http://www.mvmf.org/language.shtml
+http://www.mvnu.edu/facstaff/admin/presidentsoffice/fairbanksvita.html
+http://www.mvo.ms/october_2001_activity_this_week_.htm
+http://www.mvpcasino.com/online_casino_gambling_deposit_methods_.html
+http://www.mvpracebook.com/online_racebook_gambling_deposit_methods_.html
+http://www.mvprince.com/activities.php
+http://www.mvps.org/
+http://www.mvps.org/marksxp/WindowsXP/driveltr.php
+http://www.mvps.org/project/faqs.htm
+http://www.mvps.org/vbvision/Super_Collections.htm
+http://www.mvremix.com/urban/reviews/2004/bglife.shtml
+http://www.mvrf.org/md101/cbs.html
+http://www.mvs.usace.army.mil/pm/E_St_Louis/factsheet.htm
+http://www.mvsweddinginvitations.com/english/international.asp
+http://www.mwa.govt.nz/cont_pp.html
+http://www.mwaa.com/dulles/ground.htm
+http://www.mwambao.com/visa1.htm
+http://www.mwci.org/chapters/SCRAP/articles/BE-2001-11-10.html
+http://www.mwcog.org/commuter/Bdy-Grh-testimonials.html
+http://www.mwetech.com/policies.htm
+http://www.mwfam.com/who.html
+http://www.mwhb.ie/healthservices/entitlements/eu.htm
+http://www.mwls.co.uk/deutsch.htm
+http://www.mwls.co.uk/shop/psych.pl
+http://www.mwlusa.org/publications/essays/legalrights.html
+http://www.mwmlaw.com/sept-oct_2000.htm
+http://www.mwords.co.uk/pages/FAQ/articlePrinterDesignRant.htm
+http://www.mwotrc.com/rr2004_02/tonywons.htm
+http://www.mwpha.org/issues/carefirst/
+http://www.mwscomp.com/movies/grail/grail-11.htm
+http://www.mxextensions.com/XcDirViewInCat.asp?ID=38
+http://www.mxhealth.co.za/media_businessday_30Mar04.asp
+http://www.my-hope.com/Bill/essays/esource.html
+http://www.my-penis.org/size.html
+http://www.myacpa.org/comm/global/conf2004.htm
+http://www.myanmar.com/Understanding%20Myanmar/mfp.html
+http://www.myanmar.com/gov/tourist/today1.htm
+http://www.myanmar.com/nlm/article/May14.htm
+http://www.myanmar.gov.mm/Article/Article2004/Oct04/Oct18.htm
+http://www.myanmar.gov.mm/NLM-2002/Dec17.html
+http://www.myanmar.gov.mm/NLM-2002/Nov28.html
+http://www.myanmar.gov.mm/NLM-2004/Jan04/Jan10.html
+http://www.myanmar.gov.mm/Perspective/persp1997/12-97/lea12-97.htm
+http://www.myanmars.net/myanmar-news-1999/myanmar-news-n990516.htm
+http://www.myarmoury.com/review_casi_wm.html
+http://www.myarmoury.com/talk/viewtopic.php?p=30644&highlight=
+http://www.myaustinhealey.com/austin_healey_technical_articles.html
+http://www.mybabyfingers.com/BFclasses.html
+http://www.mybelfast.co.uk/belfast/property-shorts.htm
+http://www.mybowler.com/Bax+Scratching/992.aspx
+http://www.mybrum.co.uk/birmingham/restaurants-review-bank.htm
+http://www.mycashback.com/html/index.php?sp=11
+http://www.myccr.com/SectionResources/Humour/HangingTheFoodPack.htm
+http://www.mycen.com.my/duasen/090904_products.html
+http://www.mychurchdonations.com/agreement1.htm
+http://www.myclan.com/clans/Balfour_152/default.php
+http://www.mycollegeguide.org/schools/Arcadia/index.phtml
+http://www.mycoolcareer.com/bio/bio_jillofficial.html
+http://www.mycopper.net/professional-web-hosting.html
+http://www.mycvbuilder.com/cvb/index.cfm?fuseaction=arts.showmemberarts&articleID=5
+http://www.mydailyplanet.com/04-77-colddick.htm
+http://www.mydas.com/company.htm
+http://www.mydd.com/story/2004/5/10/192540/572
+http://www.mydd.com/story/2005/1/14/155754/517
+http://www.mydd.com/story/2005/1/27/133629/315
+http://www.mydna.com/health/diabetes/resources/news/200506/news_20050603_diaknow.html
+http://www.mydna.com/health/weight/weightobesity/dietmyths.html
+http://www.mydr.com.au/default.asp?Article=2555
+http://www.mydswa.org/code_of_ethics.asp
+http://www.myeclipseide.com/PNphpBB2+file-viewtopic-t-75.html
+http://www.myeclipseide.com/index.php?name=PNphpBB2&file=viewtopic&p=13129
+http://www.myenvoy.com/sleepybear/teeth.html
+http://www.myers.com/press/articles/1201.html
+http://www.myetv.org/television/productions/legacy/parts/introduction2.html
+http://www.myfootballnews.co.uk/Frank-Lampard-Player-News-174.html
+http://www.myfortress.org/greatchristianscientists.html
+http://www.myfreegold.com/Documents/teardownthiswall.htm
+http://www.mygreathome.com/safety/school_safety/walking.htm
+http://www.myhandwriting.com/learn/homestudy.html
+http://www.myhome.org/pg/numbers.html
+http://www.myisraelsource.com/content/knesset_description
+http://www.myjanee.com/PSRL/tutfx.htm
+http://www.myjewishlearning.com/ideas_belief/sex_sexuality/Overview_Judaism_And_Sexuality/Purpose_And_Meaning/Sex_Contraception_Isaacs.htm
+http://www.myjokemail.com/content/modules/myalbum/photo.php?lid=2661&cid=1
+http://www.myleaders.com/leadership-training.htm
+http://www.mylibertybank.com/view.php/id/21
+http://www.mylivingtree.com/Charles/
+http://www.mymommybiz.com/ebooks/sit.html
+http://www.mymoneyskills.com/visa/hk/en_US/managing_debt/getout.shtml
+http://www.mymotherlode.com/Fire_Information/
+http://www.mymusic.ca/product.asp?muzenbr=529853&myptr=galaxie&curr=1
+http://www.mynrma.com.au/board_of_directors.asp
+http://www.mynrma.com.au/cars_kids.asp
+http://www.myonlinesolicitor.co.uk/
+http://www.myopia.org/principles.htm
+http://www.mypage.tsn.cc/self-helpconcepts/
+http://www.mypethaven.com/essential_oils.htm
+http://www.mypetstop.com/UK/Cats/Lifestyle/Travel+Moving+Holiday/Carrying+Pets+Safely+in+Your+Car.htm
+http://www.mypharmacy.co.uk/health_products/products/o/omron/blood_pressure_monitors/omron_r5_i.htm
+http://www.mypleasure.com/education/sexed/sensual_massage.asp
+http://www.mypleasure.com/education/sexed/sensual_massage.asp?printversion=YES&
+http://www.myrealtywebsite.com/package7/P7b_asking.htm
+http://www.myresortnetwork.com/Sell-Timeshare/The-Cliffs-at-Peace-Canyon/Las-Vegas/Nevada/
+http://www.myri.com/scs/L3/doc/gcc_toc.html
+http://www.myriobiblos.gr/texts/english/Pannenberg_europe.html
+http://www.myronthompson.com/bio.htm
+http://www.mysan.de/international/gate.html?name=News&friend&op=FriendSend&sid=27529
+http://www.mysan.de/international/gate.html?name=News&friend&op=FriendSend&sid=27572
+http://www.mysan.de/international/gate.html?name=News&friend&op=FriendSend&sid=27591
+http://www.mysan.de/international/gate.html?name=News&friend&op=FriendSend&sid=27641
+http://www.myschool-monecole.gc.ca/psma-lmfp/lp/index_e.html
+http://www.myscschools.com/News/1999/sat-2nd.htm
+http://www.myscschools.com/news/1999/sat-2nd.htm
+http://www.myshelf.com/holiday/pages/xmasmisc.htm
+http://www.mysociety.org/
+http://www.myspace.com/index.cfm?fuseaction=user.viewProfile&friendID=529&Mytoken=20050614073533
+http://www.myspace.com/index.cfm?fuseaction=user.viewProfile&friendID=6528124&Mytoken=20050603032429
+http://www.myspace.com/movemeant
+http://www.mysteriestodiefor.com/first_editions_f_m.htm
+http://www.mysteriousworld.com/Journal/2003/Summer/Osiria/
+http://www.mysterygarden.com/garden.htm
+http://www.mysterynet.com/tv/profiles/nypd/
+http://www.mysteryone.com/GarHaywoodInterview.htm
+http://www.mysterypollster.com/deepmotive/2005/06/felt_colson_bre.html
+http://www.mysterypollster.com/main/2004/12/exits_were_the_.html
+http://www.mysterypollster.com/main/2005/01/final_results.html
+http://www.mysterypollster.com/main/2005/01/media_whore_ale.html
+http://www.mystgalaxy.com/scifi_a.html
+http://www.mysticadvisor.com/occult/
+http://www.mystical-www.co.uk/leylines.htm
+http://www.mystiquebeads.com/nagaland%20glass.htm
+http://www.mystiqueshopper.com/faq.html
+http://www.mystockoptions.com/articles/Fundamentals/Exercise/index.cfm/catid/3F70ED0D-2048-4F05-B8C4C2918A4F27AB
+http://www.mystworlds.com/us/archives.php?mois=1&annee=2005
+http://www.mytelus.com/sports/article.do?pageID=sports_home&articleID=1961851&
+http://www.mythinglinks.org/summersolstice2000.html
+http://www.mythmakerjohn.com/services.html
+http://www.mythologicalmovieclub.org/
+http://www.mytoos.com/
+http://www.myuniaddress.com/description-5-1-Straight_Jacket.html
+http://www.myvworld.com/
+http://www.mywhatever.com/cifwriter/library/eperc/fastfact/ff31.html
+http://www.mza.com/oldnews.html
+http://www.mzv.cz/washington/newslet/2000/ctn012000.html
+http://www.n-a.co.uk/na16.htm
+http://www.n-email.net/ZOO/inzoosoc.04.04.htm
+http://www.n-gon.com/freshmeat/b./
+http://www.n2arts.com/ee/theatre/storypage/the_economics_of_acting_classes/
+http://www.na-ygn.org/aboutus/roles.shtml
+http://www.na.fs.fed.us/spfo/pubs/howtos/ht_birch/ht_birch.htm
+http://www.na.fs.fed.us/spfo/pubs/silvics_manual/volume_2/general/notes.htm
+http://www.na.fs.fed.us/spfo/pubs/silvics_manual/volume_2/quercus/rubra.htm
+http://www.na.fs.fed.us/spfo/pubs/uf/techguide/values.htm
+http://www.na.org/basic.htm
+http://www.na.org/ips/eng/nares.htm
+http://www.na.org/legal/ipbul3-03rv.htm
+http://www.na.org/naway/en/naway163-12.htm
+http://www.na.org/naway/en/naway5-e-2.htm
+http://www.na.org/naway/en/naway5-e.htm
+http://www.na.org/prespapers/naws-hi_pub2.htm
+http://www.naa.gov.au/Publications/corporate_publications/ar2003/corporate_management.html
+http://www.naa.gov.au/recordkeeping/access/records_public.html
+http://www.naa.gov.au/recordkeeping/preservation/care_records.html
+http://www.naa.gov.au/recordkeeping/rkpubs/advices/advice10.html
+http://www.naa.gov.au/recordkeeping/rkpubs/advices/advice22.html
+http://www.naa.org/artpage.cfm?AID=5195&SID=1129
+http://www.naa.org/artpage.cfm?AID=6114&SID=1097
+http://www.naa.org/artpage.cfm?AID=6114&SID=1121
+http://www.naa.org/horizon/eBaySidebar.html
+http://www.naae.org/news/3_03/page7.htm
+http://www.naaec.gc.ca/eng/nac/gr024_e.htm
+http://www.naaf.org/research/research-announce.asp
+http://www.naaf.org/research/research-q_and_a-triggers.asp
+http://www.naafa.org/
+http://www.naafa.org/documents/essays/fatandhappy.html
+http://www.naafa.org/kids.html
+http://www.naaidt.org.uk/about/guidelines/numeracy.html
+http://www.naatanet.org/shopnaata/videos/title/
+http://www.naaweb.org/
+http://www.naaweb.org/publicpolicynews.htm
+http://www.nab.org/conventions/
+http://www.nab.org/membersonly/nabsays/legal/MAIN_STUDIO_1999.asp
+http://www.naboo.freeserve.co.uk/figslate.htm
+http://www.nabuur.com/modules/villages_forum/viewtopic.php?topic_id=744&forum=182&villageid=68
+http://www.nabuur.com/modules/villages_forum/viewtopic.php?villageid=68&topic_id=744&forum=182
+http://www.nac-cna.ca/en/nacnews/viewnews.cfm?ID=635&cat=catET
+http://www.naccc.org/NA_News/Feb_04/Page_5.htm
+http://www.nace-cee.org/prnov04.htm
+http://www.nacjamaica.com/pac/report_2002_quarterly4.htm
+http://www.nacs.uci.edu/telephone/principal.html
+http://www.nacsa.com/
+http://www.nacsonline.com/NACS/News/Daily_News_Archives/December2003/nd1224033.htm
+http://www.nacsonline.com/NACS/Resource/Finance/mf_020200_ir.htm
+http://www.nacsonline.com/NACS/Resource/MotorFuels/irsmsspguidelines.htm
+http://www.nacubo.org/x4225.xml
+http://www.nacubo.org/x4981.xml
+http://www.nacufs.org/about/styleguide.asp
+http://www.nada.kth.se/BIT/BIT_History.html
+http://www.nadadventist.org/ohr/about/history2.htm
+http://www.nadir.org/nadir/initiativ/agp/free/iraq/0218blood_oil.htm
+http://www.nadir.org/nadir/initiativ/agp/free/wsf/worldforum.htm
+http://www.nadir.org/nadir/initiativ/agp/pgaeurope/leiden/Newsletter03.htm
+http://www.nadrac.gov.au/adr/QldLawSoc.htm
+http://www.nadwatululama.org/intr1.htm
+http://www.nae.edu/NAE/naehome.nsf/weblinks/MKEZ-547S83?OpenDocument
+http://www.naea-reston.org/programs-research.html
+http://www.naec.ws/
+http://www.naesp.org/ContentLoad.do?contentId=295
+http://www.naesp.org/ContentLoad.do?contentId=295&action=print
+http://www.nafcon.dircon.co.uk/fgeckos1.html
+http://www.nafcon.dircon.co.uk/pzgen.html
+http://www.nafcu.org/Content/NavigationMenu/Events_Education/24th_Annual_Volunteers_Conference/2005_Volunteers.htm
+http://www.nafdma.com/Boston/ConfFAQ/
+http://www.nafeo.org/intern.htm
+http://www.nafsa.org/content/ProfessionalandEducationalResources/ImmigrationAdvisingResources/10points.htm
+http://www.nafsa.org/content/publicpolicy/usintledpolicy/senconres7.htm
+http://www.nagara.org/1997_Meeting/1997_introduction.html
+http://www.nagt.org/nagt/abstracts/jan01.html
+http://www.nagt.org/nagt/jge/abstracts/jan01.html
+http://www.nahbmonday.com/eyeonecon/issues/2003-05-21.html
+http://www.nahbmonday.com/eyeonecon/issues/2004-09-22.html
+http://www.nahenahe.net/panther/tale1223.html
+http://www.nahste.ac.uk/cgi-bin/view_isad.pl?id=GB-0582-HWC-3-1-53-132&view=basic
+http://www.naic.org/insprod/catalog_pub_supplementary.htm
+http://www.naimark.net/writing/gifu.html
+http://www.nais.org/about/eventdoc.cfm?ItemNumber=144667
+http://www.nais.org/products/?type=books&sn.ItemNumber=146020&tn.ItemNumber=142498
+http://www.najah.edu/english/articles/13.htm
+http://www.najumary.org/catholic01-cath.html
+http://www.nakack.net/?p=23
+http://www.nakamalathome.com/culture.php
+http://www.nakedknitting.com/archives/cat_bad_days.html
+http://www.nal.usda.gov/Kids/4han.htm
+http://www.nal.usda.gov/Kids/4henv.htm
+http://www.nal.usda.gov/Kids/4hgensci.htm
+http://www.nal.usda.gov/bic/Biotech_Patents/1994patents/05306863.html
+http://www.nal.usda.gov/ttic/nalsci/becky/4han.htm
+http://www.nalanda.demon.co.uk/prajapat.htm
+http://www.nalc.gov.uk/becomeacouncillor/
+http://www.naleihulu.org/guestbook/guestbook_viewy.htm
+http://www.nalis.gov.tt/NationalAwards-Emblems/T&T_Independence.html
+http://www.nalis.gov.tt/protective_services/protective_services_science_of_crime.html
+http://www.nalsw.net/news/
+http://www.nalv.org.uk/news7-2/03-16-17.htm
+http://www.nam.gov.za/minmeet/paha294a.htm
+http://www.namamillers.org/PR_Bioterror_04_09_03.html
+http://www.namaqua.com/couch.html
+http://www.namasthenri.com/excontrol/chapt6.htm
+http://www.namasthenri.com/excontrol/chapt9.htm
+http://www.nambarrie.com/terms_&_conditions/
+http://www.namcor.com.na/press_releases.htm
+http://www.namenerds.com/uucn/advice/family.html
+http://www.names.co.uk/terms.html
+http://www.nami.org/Template.cfm?Section=Issue_Spotlights&template=/ContentManagement/ContentDisplay.cfm&ContentID=5015
+http://www.nami.org/Template.cfm?Section=Issue_Spotlights&template=/ContentManagement/ContentDisplay.cfm&ContentID=8648
+http://www.nami.org/update/unitedbill.html
+http://www.namibweb.com/fishinfo.html
+http://www.namirdeiter.com/fc/joyrainbow.htm
+http://www.namiscc.org/News/2004/Summer/NewLeadership.htm
+http://www.nammuniversity.com/mod/forum/discuss.php?d=45
+http://www.namontana.com/proinfo.htm
+http://www.nandhi.com/songsiddhars.htm
+http://www.nanfa.org/convention/99report.shtml
+http://www.nano.com.au/history.html
+http://www.nano.gov/html/about/Metrology_Agenda_1_23_04.htm
+http://www.nanomicroclub.com/
+http://www.nanowrimo.org/modules/cjaycontent/index.php?id=28
+http://www.nanowrimo.org/modules/newbb/viewtopic.php?topic_id=17066&forum=14
+http://www.nanowrimo.org/modules/newbb/viewtopic.php?topic_id=20329&forum=73
+http://www.nanowrimo.org/modules/newbb/viewtopic.php?topic_id=8621&forum=174
+http://www.nanowrimo.org/modules/newbb/viewtopic.php?viewmode=flat&order=DESC&topic_id=25191&forum=160
+http://www.nanowrimo.org/modules/xoopsfaq/index.php?cat_id=1
+http://www.nantucketislandliving.com/articles.php?Section=1
+http://www.naomimusic.com/pages/order/trebleClef.htm
+http://www.nap.edu/books/0309040329/html/145.html
+http://www.nap.edu/books/0309047889/html/50.html
+http://www.nap.edu/books/0309048397/html/69.html
+http://www.nap.edu/books/0309049334/html/361.html
+http://www.nap.edu/books/0309051401/html/44.html
+http://www.nap.edu/books/0309051916/html/109.html
+http://www.nap.edu/books/0309054842/html/115.html
+http://www.nap.edu/books/030905494X/html/212.html
+http://www.nap.edu/books/0309056829/html/19.html
+http://www.nap.edu/books/0309056829/html/25.html
+http://www.nap.edu/books/0309056829/html/3.html
+http://www.nap.edu/books/0309058333/html/125.html
+http://www.nap.edu/books/0309058988/html/1.html
+http://www.nap.edu/books/0309059267/html/90.html
+http://www.nap.edu/books/0309063787/html/197.html
+http://www.nap.edu/books/0309065356/html/55.html
+http://www.nap.edu/books/0309065909/html/33.html
+http://www.nap.edu/books/0309065925/html/10.html
+http://www.nap.edu/books/0309068754/html/184.html
+http://www.nap.edu/books/0309069254/html/1.html
+http://www.nap.edu/books/0309069254/html/11.html
+http://www.nap.edu/books/0309069254/html/404.html
+http://www.nap.edu/books/0309069483/html/84.html
+http://www.nap.edu/books/0309070368/html/190.html
+http://www.nap.edu/books/0309070775/html/207.html
+http://www.nap.edu/books/0309070775/html/84.html
+http://www.nap.edu/books/0309070775/html/91.html
+http://www.nap.edu/books/0309072735/html/187.html
+http://www.nap.edu/books/0309073375/html/130.html
+http://www.nap.edu/books/0309074266/html/25.html
+http://www.nap.edu/books/0309075602/html/R1.html
+http://www.nap.edu/books/0309075939/html/35.html
+http://www.nap.edu/books/0309082749/html/418.html
+http://www.nap.edu/books/0309082803/html/108.html
+http://www.nap.edu/books/0309082986/html/82.html
+http://www.nap.edu/books/0309083419/html/40.html
+http://www.nap.edu/books/0309084091/html/114.html
+http://www.nap.edu/books/0309084091/html/81.html
+http://www.nap.edu/books/0309084261/html/9.html
+http://www.nap.edu/books/030908461X/html/90.html
+http://www.nap.edu/books/0309084628/html/34.html
+http://www.nap.edu/books/030908492X/html/1.html
+http://www.nap.edu/books/0309084938/html/13.html
+http://www.nap.edu/books/0309084997/html/105.html
+http://www.nap.edu/books/030908539X/html/66.html
+http://www.nap.edu/books/030908542X/html/1.html
+http://www.nap.edu/books/030908542X/html/108.html
+http://www.nap.edu/books/030908542X/html/145.html
+http://www.nap.edu/books/030908542X/html/222.html
+http://www.nap.edu/books/030908542X/html/41.html
+http://www.nap.edu/books/0309085470/html/119.html
+http://www.nap.edu/books/0309085489/html/207.html
+http://www.nap.edu/books/0309085497/html/238.html
+http://www.nap.edu/books/0309085497/html/350.html
+http://www.nap.edu/books/0309087015/html/112.html
+http://www.nap.edu/books/0309087015/html/41.html
+http://www.nap.edu/books/0309087023/html/21.html
+http://www.nap.edu/books/0309087252/html/63.html
+http://www.nap.edu/books/0309087341/html/99.html
+http://www.nap.edu/books/0309087376/html/132.html
+http://www.nap.edu/books/0309087376/html/183.html
+http://www.nap.edu/books/0309088534/html/171.html
+http://www.nap.edu/books/030908895X/html/7.html
+http://www.nap.edu/books/0309089093/html/9.html
+http://www.nap.edu/books/0309089301/html/9.html
+http://www.nap.edu/books/030908931X/html/129.html
+http://www.nap.edu/books/030908931X/html/62.html
+http://www.nap.edu/books/0309089484/html/29.html
+http://www.nap.edu/books/030908962X/html/42.html
+http://www.nap.edu/books/0309089980/html/51.html
+http://www.nap.edu/books/0309091365/html/167.html
+http://www.nap.edu/books/0309091454/html/24.html
+http://www.nap.edu/books/0309091640/html/93.html
+http://www.nap.edu/books/0309092205/html/63.html
+http://www.nap.edu/books/0309092213/html/76.html
+http://www.nap.edu/books/0309092329/html/121.html
+http://www.nap.edu/books/0309092329/html/97.html
+http://www.nap.edu/books/0309092582/html/268.html
+http://www.nap.edu/books/0309094437/html/1.html
+http://www.nap.edu/books/0309094445/html/96.html
+http://www.nap.edu/books/0309095018/html/31.html
+http://www.nap.edu/books/0309095182/html/8.html
+http://www.nap.edu/books/0309095204/html/30.html
+http://www.nap.edu/books/0309095409/html/1.html
+http://www.nap.edu/books/0309096596/html/R1.html
+http://www.nap.edu/books/NI000473/html/20.html
+http://www.nap.edu/books/NI000537/html/1.html
+http://www.nap.edu/books/NI000682/html/11.html
+http://www.nap.edu/catalog/10373.html
+http://www.nap.edu/catalog/10508.html
+http://www.nap.edu/execsumm/NI000444.html
+http://www.nap.edu/html/howpeople1/ch2.html
+http://www.nap.edu/html/howpeople1/ch8.html
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=advertising+bans&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=economic+consequences&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=focal+segment&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=health+campaigns&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=intervention+impact&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=spirits+consumption&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=supreme+court&isbn=0309089352
+http://www.nap.edu/nap-cgi/chaphits.cgi?term=teen+court&isbn=0309089352
+http://www.nap.edu/nap-cgi/morehits.cgi?display=text&isbn=0309072735&term=%22law+enforcement%22&file=137-186.htm
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309047447&chap=76-130
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309047463&chap=468-497
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309074339&chap=351-394
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309084768&chap=198-213
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309091802&chap=11-40
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=030909318X&chap=95-152
+http://www.nap.edu/nap-cgi/skimit.cgi?isbn=0309093236&chap=187-204
+http://www.nap.edu/openbook/0309064244/html/33.html
+http://www.nap.edu/openbook/0309064856/html/130.html
+http://www.nap.edu/openbook/0309065577/html/178.html
+http://www.nap.edu/openbook/0309070368/html/190.html
+http://www.nap.edu/openbook/0309084997/html/
+http://www.nap.edu/openbook/0309087163/html/7.html
+http://www.nap.edu/openbook/0309090911/html/64.html
+http://www.nap.edu/openbook/0309092302/html/32.html
+http://www.nap.edu/readingroom/books/mentor/1.html
+http://www.nap.edu/readingroom/books/nses/html/6e.html
+http://www.nap.edu/readingroom/books/nses/html/solar7.html
+http://www.nap.edu/readingroom/books/researchdoc/preface.html
+http://www.napa.ufl.edu/2003news/muscledamage.htm
+http://www.napa.ufl.edu/2005news/aorta.htm
+http://www.napc.org/wor_the_cup.htm
+http://www.napeo.org/annualconference/index.cfm
+http://www.naperhomes.com/real_estate_article.asp?gi=1019&ai=204
+http://www.naperhomes.com/real_estate_article.asp?gi=1026&ai=204
+http://www.naperville.il.us/dynamic_template.cfm?doc_id=1078
+http://www.napervillechorus.org/carmina_lyrics.html
+http://www.napier.ac.uk/depts/careers/Students/leaving.htm
+http://www.naplibrary.com/history2.htm
+http://www.napnt.org/2004_07_01_arc.mediareleases.html
+http://www.napoleongames.com/forums/showpost.php?p=355&postcount=2
+http://www.napster.com/press_releases/pr_031202.html
+http://www.napswq.gov.au/about-nap.html
+http://www.napswq.gov.au/publications/iga.html
+http://www.naqshbandi.org/suhba/return.htm
+http://www.nar.org/hpcert/NARhpdetails.html
+http://www.nar.org/pinkbook/7_officials.html
+http://www.nara-wacc.org/pages/centcom/centcom04a.htm
+http://www.narehotel.co.uk/outdoors.html
+http://www.naresa.ac.lk/jss.htm
+http://www.narmada.org/ALTERNATIVES/alt/html/AlternativeEnergy.html
+http://www.narmada.org/archive/toi/dec/11mahm5.htm
+http://www.narmada.org/nba-press-releases/april-2005/Medha_SC_Response.html
+http://www.naropa.edu/humanresources/gradopenings.html
+http://www.narphonax.com/docjohn/amityville.html
+http://www.narrow-gauge.co.uk/directory/show.php?area=g
+http://www.narth.com/docs/guideme.html
+http://www.narutofan.com/index.php/content-plus,narutofan%20plus%20downloads
+http://www.nas.edu/
+http://www.nas.org/statements/defend.htm
+http://www.nasa.gov/centers/dryden/news/FactSheets/FS-084-DFRC.html
+http://www.nasa.gov/centers/glenn/about/history/centaur.html
+http://www.nasa.gov/centers/goddard/news/topstory/2003/0212suv.html
+http://www.nasa.gov/centers/johnson/news/releases/2004/H04-141.html
+http://www.nasa.gov/centers/langley/news/releases/2003/03-087.html
+http://www.nasa.gov/centers/marshall/news/news/releases/2003/03-099.html
+http://www.nasa.gov/home/hqnews/2004/apr/HQ_04141_ortiz_longo.html
+http://www.nasa.gov/lb/home/hqnews/2004/apr/HQ_04141_ortiz_longo.html
+http://www.nasa.gov/vision/space/livinginspace/Astronaut_Laundry.html
+http://www.nasabb.com/nasabbnew/hairtips1.htm
+http://www.nasabb.com/nasabbnew/keleoil1.htm
+http://www.nasaexplores.com/extras/astronauts/lu.html
+http://www.nasaexplores.com/show2_articlea.php?id=01-006
+http://www.nasaexplores.com/show2_articlea.php?id=01-062
+http://www.nasaproracing.com/hpde/theline.html
+http://www.nascar.com/
+http://www.nascar.com/2003/news/cnnsi/01/10/jburton_maloof/
+http://www.nascar.com/2004/news/features/conversation/08/31/rwallace_convo/
+http://www.nascar.com/2005/news/headlines/cup/06/19/bsaid_sonoma/
+http://www.nascar.com/2005/news/headlines/cup/06/20/dearnhardtjr.eury/
+http://www.nasda-hq.org/FMD/
+http://www.nasdaq.com/newsroom/news/pr2002/ne_section02_112.html
+http://www.naseeb.com/naseebvibes/interview-detail.php?aid=2064
+http://www.nasemsd.org/report_on_national_ems_resourc.html
+http://www.naseo.org/news/2002_03.htm
+http://www.nashuatelegraph.com/apps/pbcs.dll/article?AID=/20040803/SECTIONS12/40803033
+http://www.nashville.gov/cclerk/hotel.htm
+http://www.nashville.gov/mhc/whos_who.htm
+http://www.nasja.org/nasja/info/siteuse.htm
+http://www.nasma.net/zone1.htm
+http://www.naspa.com.au/indrel.htm
+http://www.nasponline.org/NEAT/angermgmt_general.html
+http://www.nasponline.org/NEAT/children_war.html
+http://www.nasponline.org/NEAT/children_war_general.html
+http://www.nasponline.org/NEAT/terrorism.html
+http://www.nasponline.org/publications/cq306practips.html
+http://www.naspweb.com/
+http://www.nassauclerk.org/index.cfm?FuseAction=Files.View&File_id=570&FileStore_id=1557&CFID=368844&CFTOKEN=46989456
+http://www.nastybit.blogspot.com/
+http://www.nastyz28.com/faq/geninfo.htm
+http://www.naswnyc.org/a4.html
+http://www.naswpress.org/resources/tools/01-write/guidelines_3.htm
+http://www.nat.au.dk/pages/uk1153/
+http://www.nat.au.dk/pages/uk363/
+http://www.nat.au.dk/pages/uk418/
+http://www.nat.au.dk/pages/uk4876/
+http://www.nat.au.dk/pages/uk6526/
+http://www.nat.org.uk/
+http://www.natalieportman.com/npcom.php
+http://www.natashayi.com/features_news.html
+http://www.nataviguides.com/broketemplate_annualbudget.html
+http://www.natcath.com/NCR_Online/archives/031403/031403c.htm
+http://www.natcen.ac.uk/natcen/pages/op_scotcen.htm
+http://www.natcom.org/Instruction/Competencies/college_competencies_tables2-4.htm
+http://www.natcom.org/Instruction/Pathways/5thEd.htm
+http://www.natconet.com/newsletr/qtr103/
+http://www.natconet.com/newsletr/qtr499/4q99letr.htm
+http://www.natd.com/public/INDUSTRY%20STANDARDS%20AND%20DEFINITIONS%202002.htm
+http://www.nateurope.com/products.php?svArticleGroup=PMC
+http://www.natfhe.org.uk/anc2002/satdaypm.html
+http://www.nathanielbranden.net/dis/2219.shtml
+http://www.nathanielturner.com/africancenterededucation.htm
+http://www.nathanielturner.com/cleansingprologue.htm
+http://www.nathanielturner.com/richardwright3.htm
+http://www.nathannewman.org/log/archives/001140.shtml
+http://www.national.com/appinfo/power/lighting.html
+http://www.national.org.nz/Article.aspx?ArticleID=4126
+http://www.nationalach.com/
+http://www.nationalarchives.gov.uk/accessions/1998/98digests/politics.htm
+http://www.nationalarchives.gov.uk/pathways/firstworldwar/spotlights/blockade.htm
+http://www.nationalcatholicreporter.org/washington/wnb071404.htm
+http://www.nationalcatholicreporter.org/word/
+http://www.nationalcatholicreporter.org/word/word012005.htm
+http://www.nationalcoalition.org/culture/articles/sspartners.html
+http://www.nationalcowboymuseum.org/research/r_a_fras.html
+http://www.nationalcyclingstrategy.org.uk/vbulletin229/upload/archive/index.php/t-109.html
+http://www.nationalcyclingstrategy.org.uk/vbulletin229/upload/archive/index.php/t-92.html
+http://www.nationalcyclingstrategy.org.uk/vbulletin229/upload/showthread.php?t=109
+http://www.nationalcyclingstrategy.org.uk/vbulletin229/upload/showthread.php?t=92
+http://www.nationaldefensemagazine.org/issues/2001/Dec/Munitions_Sector.htm
+http://www.nationaldefensemagazine.org/issues/2003/Jan/a-12.htm
+http://www.nationaledtechplan.org/actionsteps.asp
+http://www.nationalexpressgroup.com/nx/cr/policies/humanrights/
+http://www.nationalgeographic.co.uk/watch/default.asp?Currentdate=2/7/2005
+http://www.nationalgeographic.com/adventure/0406/excerpt5.html
+http://www.nationalgeographic.com/ngkids/games/games_main.html
+http://www.nationalgeographic.com/ngm/0010/feature4/
+http://www.nationalgeographic.com/xpeditions/lessons/08/g35/seaslighting.html
+http://www.nationalgeographic.com/xpeditions/lessons/08/g68/ccwhalesounds.html
+http://www.nationalgeographic.com/xpeditions/lessons/08/g68/seasshark.html
+http://www.nationalgeographic.com/xpeditions/lessons/10/gk2/fairytale.html
+http://www.nationalgeographic.com/xpeditions/lessons/15/g35/givemehome.html
+http://www.nationalist.org/docs/law/branch.html
+http://www.nationaljewish.org/medfacts/energy.html
+http://www.nationalmssociety.org/%5CMUCS_health.asp
+http://www.nationalmssociety.org/Brochures-Clear%20Thinking.asp
+http://www.nationalmssociety.org/Brochures-On%20Gait.asp
+http://www.nationalmssociety.org/Brochures-SomeoneYouknow.asp
+http://www.nationalmssociety.org/FLN/event/event_page.asp?p=24546&e=10257
+http://www.nationalmssociety.org/Federal-Spring2004.asp
+http://www.nationalmssociety.org/IMSJan04-Pain.asp
+http://www.nationalmssociety.org/VAB/event/event_detail.asp?e=8754
+http://www.nationalmssociety.org/VAB/home/privacy.asp
+http://www.nationalparks.nsw.gov.au/npws.nsf/Content/Sydneys+top+whale+watching+spot
+http://www.nationalpartnership.org/default.aspx?tabname=library&fileid=196
+http://www.nationalradio.com/tt_PPahApril04.shtml
+http://www.nationalreview.com/01jun98/nadler060198.html
+http://www.nationalreview.com/THECORNER/03_09_14_CORNER-ARCHIVE.ASP
+http://www.nationalreview.com/blyth/blyth200412160826.asp
+http://www.nationalreview.com/buckley/buckley200312051231.asp
+http://www.nationalreview.com/comment/comment-singer060203.asp
+http://www.nationalreview.com/comment/comment-smith011603.asp
+http://www.nationalreview.com/comment/donnelly200505090921.asp
+http://www.nationalreview.com/comment/duncan200405170818.asp
+http://www.nationalreview.com/comment/frist200503181027.asp
+http://www.nationalreview.com/comment/karnick200401301312.asp
+http://www.nationalreview.com/comment/rosett200404182336.asp
+http://www.nationalreview.com/comment/schaeffer200403010923.asp
+http://www.nationalreview.com/comment/sirico200407290001.asp
+http://www.nationalreview.com/derbyshire/derbyshire200403241040.asp
+http://www.nationalreview.com/editorial/editors200505161044.asp
+http://www.nationalreview.com/europress/boyles200404230956.asp
+http://www.nationalreview.com/flashback/flashback200501050715.asp
+http://www.nationalreview.com/frum/diary122302.asp
+http://www.nationalreview.com/gaffney/gaffney042303.asp
+http://www.nationalreview.com/hanson/hanson200506100747.asp
+http://www.nationalreview.com/impromptus/impromptus062603.asp
+http://www.nationalreview.com/kopel/kopel012703.asp
+http://www.nationalreview.com/kopel/kopel200309221255.asp
+http://www.nationalreview.com/kudlow/kudlow200505051554.asp
+http://www.nationalreview.com/levin/levin072302.asp
+http://www.nationalreview.com/lowry/lowry200410151203.asp
+http://www.nationalreview.com/nordlinger/nordlinger200506080746.asp
+http://www.nationalreview.com/nrof_bartlett/bartlett200501271039.asp
+http://www.nationalreview.com/nrof_bartlett/bartlett200506150907.asp
+http://www.nationalreview.com/nrof_comment/tamny200504080923.asp
+http://www.nationalreview.com/nrof_comment/tamny200506240838.asp
+http://www.nationalreview.com/nrof_leuffer/leuffer012703.asp
+http://www.nationalreview.com/nrof_luskin/luskin200501110842.asp
+http://www.nationalreview.com/owens/owens200401270825.asp
+http://www.nationalreview.com/robbins/robbins200407270837.asp
+http://www.nationalreview.com/robbins/robbins200506060801.asp
+http://www.nationalreview.com/rosett/rosett200407130834.asp
+http://www.nationalreview.com/rubin/rubin200405180836.asp
+http://www.nationalreview.com/seipp/seipp200502080732.asp
+http://www.nationalreview.com/thecorner/04_03_21_corner-archive.asp
+http://www.nationalreview.com/thecorner/04_07_25_corner-archive.asp
+http://www.nationalreview.com/thecorner/04_09_05_corner-archive.asp
+http://www.nationalreview.com/thecorner/04_09_26_corner-archive.asp
+http://www.nationalreview.com/thecorner/04_11_04_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_01_16_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_01_30_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_03_27_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_05_08_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_06_05_corner-archive.asp
+http://www.nationalreview.com/thecorner/05_06_12_corner-archive.asp
+http://www.nationalreview.com/thecorner/2002_04_28_corner-archive.asp
+http://www.nationalreview.com/thecorner/corner.asp
+http://www.nationalreview.com/york/york-issue112901.shtml
+http://www.nationalreview.com/york/york021102.shtml
+http://www.nationalreview.com/york/york061203.asp
+http://www.nationalreview.com/york/york071002.asp
+http://www.nationalreview.com/york/york200405270829.asp
+http://www.nationalreviewofmedicine.com/issue/2004_01_15/article04.html
+http://www.nationalrrmuseum.org/collections-019-historical-outline.html
+http://www.nationalsecurity.gov.au/agd/www/nationalsecurityhome.nsf/Page/RWP9B017663B19BF3B2CA256F0F001F06EA
+http://www.nationalstonecentre.org.uk/euas/appendices/app18industryactivities2.htm
+http://www.nationalstonecentre.org.uk/euas/logistics/supervison.htm
+http://www.nationalterroralert.com/readyguide/anthraxtreatment.htm
+http://www.nationaltrust.org.uk/main/placestovisit/northern_ireland.html
+http://www.nationaltrust.org.uk/main/thingstodo/events/default.asp?propertyID=84
+http://www.nationaltrust.org.uk/webpack/bin/webpack.exe/livebase?object=LiveBase1&itemurn=1744&mode=wbFullItem
+http://www.nationaltrust.org/Magazine/current/cover.htm
+http://www.nationalunderwriter.com/nucatalog/showall.asp?lk_id=&mscssid=
+http://www.nationalwind.org/publications/wes/wes06.htm
+http://www.nationalwind.org/publications/wes/wes08.htm
+http://www.nationarchive.com/Summaries/v095i2465_03.htm
+http://www.nationaudio.com/News/DailyNation/28122003/Comment/Comment281220030.html
+http://www.nationjob.com/company/cfbg
+http://www.nationjob.com/company/wssi
+http://www.nationmakers.com/chap18.htm
+http://www.nationmaster.com/
+http://www.nationmaster.com/country/br
+http://www.nationmaster.com/encyclopedia/1754
+http://www.nationmaster.com/encyclopedia/Central-Bank-and-Financial-Services-Authority-of-Ireland
+http://www.nationmaster.com/encyclopedia/Charles-Watson_Wentworth,-2nd-Marquess-of-Rockingham
+http://www.nationmaster.com/encyclopedia/February-Revolution
+http://www.nationmaster.com/encyclopedia/Five_Year-Plan
+http://www.nationmaster.com/encyclopedia/Five_year-plan
+http://www.nationmaster.com/encyclopedia/Glass
+http://www.nationmaster.com/encyclopedia/Louis-XV-of-France
+http://www.nationmaster.com/encyclopedia/Mary-I-of-Scotland
+http://www.nationmaster.com/encyclopedia/Scotland
+http://www.nationofimmigrators.com/?p=21
+http://www.nationwide.co.uk/savingsinvestments/existing-investors/
+http://www.nationwideinternational.com/operating_files/pay_in/sterling_applydirectdebit.htm
+http://www.native-net.org/archive/ne/94a/0073.html
+http://www.native-net.org/archive/nl/9301/0042.html
+http://www.nativeinstruments.de/index.php?id=1814&type=1&ftu=87864865ea
+http://www.nativeinstruments.de/index.php?id=1814&type=1&ftu=90985b90b2
+http://www.nativeknowledge.org/db/files/tp186.htm
+http://www.nativepeoples.com/np_nov-dec/nd00-viewpoint/nd00-viewpoint.html
+http://www.nativeremedies.com/acne_gel.shtml
+http://www.nativeremedies.com/testimonials/uti-holistic-urinary-treatment.html
+http://www.natives.co.uk/resorts/tig/
+http://www.natlbcc.org/nbccf/info/evidence.html
+http://www.nato-pa.int/Default.asp?SHORTCUT=400
+http://www.nato.int/docu/basictxt/bt-a6.htm
+http://www.nato.int/docu/basictxt/treaty.htm
+http://www.nato.int/docu/comm/49-95/c671213a.htm
+http://www.nato.int/docu/handbook/2001/hb070101.htm
+http://www.nato.int/docu/review/2001/0102-07.htm
+http://www.nato.int/docu/review/2003/issue3/english/interview.html
+http://www.nato.int/docu/review/2003/issue3/english/military.html
+http://www.nato.int/docu/review/2003/issue4/english/art1.html
+http://www.nato.int/docu/review/2004/issue3/english/art4.html
+http://www.nato.int/docu/review/2005/issue2/english/art1.html
+http://www.nato.int/docu/update/2004/02-february/index-e.htm
+http://www.nato.int/ims/2001/win/hungary.htm
+http://www.nato.int/sfor/trans/2003/t030527a.htm
+http://www.nato.int/shape/news/2005/05/i050518a.htm
+http://www.natoa.org/links/
+http://www.natpact.nhs.uk/competency_framework/partnership/Integrated_service_provision/
+http://www.natpact.nhs.uk/competency_framework/partnership/Integrated_service_provision/index.php
+http://www.natpact.nhs.uk/competency_framework/service_provision/Equality_and_diversity/index.php
+http://www.natpact.nhs.uk/competency_framework/service_provision/Workforce_planning/index.php
+http://www.natsoc.org.uk/
+http://www.natsoc.org.uk/teachers/staffinreligiousschool.php
+http://www.nattax.com/fedbasic.htm
+http://www.nattax.com/higher.htm
+http://www.nattax.com/testimonials.htm
+http://www.natur.cuni.cz/~sykora/text/eps.htm
+http://www.natural-law-party.org.uk/UKmanifesto/geneticengineering3.htm
+http://www.naturalchild.com/advice/q23.html
+http://www.naturalchild.com/guest/karen_walant2.html
+http://www.naturalchild.com/whatever_happened/chapter4.html
+http://www.naturaldocs.org/documentation/html/files/Modules/NaturalDocs/Languages/ActionScript-pm.html
+http://www.naturalfamilyonline.com/articles/winter.htm
+http://www.naturalhealthmag.com/energy/6
+http://www.naturalhealthvillage.com/
+http://www.naturalhealthweb.com/articles/Adams3.html
+http://www.naturalhealthweb.com/articles/weed15.html
+http://www.naturalhealthweb.com/topics/subtopics/weight_management.html
+http://www.naturalhistory.bc.ca/VNHS/Birding/Birding.htm
+http://www.naturalhub.com/
+http://www.naturallaw.org.nz/genetics/HandBook/9.htm
+http://www.naturallythere4you.com/news_index3102.html
+http://www.naturalmom.com/fluoride.htm
+http://www.naturalphysiques.com/cms/index.php?itemid=19&catid=9
+http://www.naturalphysiques.com/tools.php?itemid=19
+http://www.naturalphysiques.com/tools.php?itemid=19&catid=9
+http://www.naturalselling.com/
+http://www.naturalstrength.com/weightroom/detail.asp?ArticleID=164
+http://www.nature.com/bjc/journal/v89/n8/full/6601287a.html
+http://www.nature.com/bjc/journal/v89/n8/full/6601297a.html
+http://www.nature.com/bjp/journal/v144/n1/full/0706038a.html
+http://www.nature.com/celldivision/milestones/full/milestone03.html
+http://www.nature.com/cgi-taf/DynaPage.taf?file=/gt/journal/v11/n1s/full/3302381a.html&filetype=pdf
+http://www.nature.com/cgi-taf/DynaPage.taf?file=/nature/journal/v419/n6906/full/nature00988_r.html&filetype=&dynoptions=
+http://www.nature.com/cgi-taf/DynaPage.taf?file=/nature/journal/v427/n6971/full/427213a_r.html&filetype=&dynoptions=
+http://www.nature.com/cgi-taf/DynaPage.taf?file=/nm/journal/v7/n1/full/nm0101_33.html
+http://www.nature.com/cgi-taf/DynaPage.taf?file=/nmat/journal/v2/n1/full/nmat788.html&filetype=pdf
+http://www.nature.com/cgi-taf/dynapage.taf?file=/emboj/journal/v23/n23/abs/7600458a.html
+http://www.nature.com/cgi-taf/dynapage.taf?file=/emboj/journal/v23/n23/full/7600458a.html
+http://www.nature.com/cgi-taf/dynapage.taf?file=/labinvest/journal/v80/n12/full/3780189a.html
+http://www.nature.com/cgi-taf/dynapage.taf?file=/labinvest/journal/v80/n12/full/3780189a.html&filetype=pdf
+http://www.nature.com/doifinder/10.1038/nature03236
+http://www.nature.com/doifinder/10.1038/nn1017
+http://www.nature.com/drugdisc/nj/articles/nj6893-04a.html
+http://www.nature.com/genomics/papers/human.html
+http://www.nature.com/horizon/chemicalspace/highlights/s5_nonspec1.html
+http://www.nature.com/ijo/journal/v29/n1/full/0802842a.html
+http://www.nature.com/jea/journal/vaop/ncurrent/full/7500421a.html
+http://www.nature.com/modpathol/journal/vaop/ncurrent/full/3800396a.html
+http://www.nature.com/nature/about/first/eclipse.html
+http://www.nature.com/nature/debates/women/women_contents.html
+http://www.nature.com/nature/first/eclipse.html
+http://www.nature.com/nature/focus/accessdebate/33.html
+http://www.nature.com/nature/fow/
+http://www.nature.com/nature/journal/v433/n7021/full/nature03086.html
+http://www.nature.com/nature/journal/v433/n7024/full/nature03072.html
+http://www.nature.com/nature/journal/v434/n7031/full/434274a.html
+http://www.nature.com/nature/journal/v434/n7034/full/434688a.html
+http://www.nature.com/nature/journal/v434/n7036/full/434941a.html
+http://www.nature.com/nature/journal/v434/n7036/full/nature03454.html
+http://www.nature.com/nature/journal/v435/n7041/full/435400a.html
+http://www.nature.com/nature/journal/v435/n7042/
+http://www.nature.com/nature/journal/v435/n7042/full/nj7042-709a.html
+http://www.nature.com/nature/journal/v435/n7044/
+http://www.nature.com/nature/techfeatures/
+http://www.nature.com/nbt/journal/v22/n10/full/nbt1018.html
+http://www.nature.com/ncb/journal/v5/n12/full/ncb1072.html
+http://www.nature.com/ncb/journal/v6/n5/full/ncb0504-377.html
+http://www.nature.com/nchembio/authors/ed_process/
+http://www.nature.com/ncpcardio/journal/v1/n2/full/ncpcardio0060.html
+http://www.nature.com/ncpcardio/journal/v2/n1/full/ncpcardio0065.html
+http://www.nature.com/ncpuro/journal/v1/n1/full/ncpuro0016.html
+http://www.nature.com/neuro/press_release/nn0100.html
+http://www.nature.com/news/1999/991028/full/991028-5.html
+http://www.nature.com/news/2000/000309/full/000309-9.html
+http://www.nature.com/news/2000/000914/full/000914-10.html
+http://www.nature.com/news/2002/020819/full/020819-7.html
+http://www.nature.com/news/2003/030120/full/030120-4.html
+http://www.nature.com/news/2004/040223/full/040223-3.html
+http://www.nature.com/news/2004/040223/pf/427774a_pf.html
+http://www.nature.com/news/2004/040322/full/428362a.html
+http://www.nature.com/news/2004/040531/full/040531-9.html
+http://www.nature.com/news/2004/040621/pf/429800a_pf.html
+http://www.nature.com/news/2004/040719/full/040719-3.html
+http://www.nature.com/news/2004/040802/full/040802-3.html
+http://www.nature.com/news/2004/041129/full/041129-9.html
+http://www.nature.com/news/2004/041206/full/nbt1204-1497.html
+http://www.nature.com/news/2005/050117/full/050117-12.html
+http://www.nature.com/news/2005/050307/full/050307-2.html
+http://www.nature.com/news/2005/050404/full/434688a.html
+http://www.nature.com/news/2005/050620/full/4351008a.html
+http://www.nature.com/ng/journal/vaop/ncurrent/full/ng1582.html
+http://www.nature.com/nphys/authors/editorial_process.html
+http://www.nature.com/wcs/a26.html
+http://www.nature.nps.gov/hazardssafety/toxic/howtouse.cfm
+http://www.nature.nps.gov/protectingrestoring/IM/resourceinventories.cfm
+http://www.nature.shetland.co.uk/
+http://www.natureboundaustralia.com/didyouknow/default.php
+http://www.naturehills.com/new/product/productdetails.aspx?proname=Canadian+Hemlock
+http://www.naturehills.com/new/product/productdetails.aspx?proname=Swamp+White+Oak
+http://www.naturenet.net/trees/tpo.htm
+http://www.naturepark.com/act.htm
+http://www.naturescapes.net/112004/ej1104.htm
+http://www.naturesgift.com/essential/descriptionm-o.htm
+http://www.naturesgift.com/special.htm
+http://www.naturesorganics.com.au/product_availability.htm
+http://www.naturespet.com/accessories.html
+http://www.naturespet.com/treats.html
+http://www.naturetrek.co.uk/responsible-tourism.asp
+http://www.natvan.com/american-dissident-voices/adv072493.html
+http://www.naukri.com/lls/pat/ordinanc.htm
+http://www.naukriguru.com/privacy.asp
+http://www.nauticalmind.com/customer/pages.php?pageid=3
+http://www.nautilus.org/DPRKBriefingBook/economy/APCSSreport.html
+http://www.nautilus.org/fora/security/0227A_Siga.html
+http://www.nautilus.org/fora/security/0331_Frank.html
+http://www.nauvoonews.com/temple/finished/openhouse/Now_and_then.htm
+http://www.navajonationcouncil.org/KTNN/051304_ktnn.htm
+http://www.navajonationcouncil.org/Sept_pr/090804-budget.htm
+http://www.naval-technology.com/projects/t23/
+http://www.navanet.org/press/SixAnnuityQuestionsRelease_FINAL.htm
+http://www.navis.gr/manager/imp_com.htm
+http://www.navs.org/research/arguments.cfm?SectionID=Research
+http://www.navy-nex.com/command/employment/handbook/ch3.htm
+http://www.navy.com/faq
+http://www.navy.forces.gc.ca/marpac/base-units/marpac_base-units_e.asp?category=6&title=27
+http://www.navy.mil.nz/rnzn/article.cfm?article_id=115&article_type=discuss
+http://www.navyleague.ca/eng/about/
+http://www.navyleague.org/seapower/operation_desert_fox.htm
+http://www.navynews.co.uk/articles/2002/0206/1002061901.asp
+http://www.navyseals.com/community/articles/article.cfm?id=5772
+http://www.nawgj.org/marian_dykes.htm
+http://www.nawol.org/
+http://www.nayre.org/cj.htm
+http://www.nazi.org/community/columns/lindstrom/column7/
+http://www.nba.com/blog/blog31.html
+http://www.nba.com/bulls/news/hinrich_feature_030827.html
+http://www.nba.com/features/bobcats_040623.html
+http://www.nba.com/hawks/news/Ivey_feature_101304.html
+http://www.nba.com/hawks/news/draftpicks_meetmedia_040628.html
+http://www.nba.com/heat/community/southfloridabloodbanks_041001.html
+http://www.nba.com/hornets/news/fan_guide.html
+http://www.nba.com/jrnba/coaches/Coachs_Guide_Part_9.html
+http://www.nba.com/raptors/history/200304.html
+http://www.nba.com/sonics/news/pf041028.html
+http://www.nba.com/suns/news/nash_presser_040714.html
+http://www.nba.com/suns/news/sarver_ua_050518.html
+http://www.nba.com/suns/news/skiles_presser_transcript.html
+http://www.nba.com/suns/news/stoudemire_030207.html
+http://www.nba.com/warriors/community/season_of_giving.html
+http://www.nbbd.com/godo/tpi/
+http://www.nbc.com/Fear_Factor/rewind/301_rewind.shtml
+http://www.nbc.com/Fear_Factor/rewind/index.shtml
+http://www.nbc.com/boards/SNL_0405/thread-112790-5.html
+http://www.nbc.com/boards/SNL_0405/thread-120176-2.html
+http://www.nbc.com/boards/SNL_0405/thread-125711-4.html
+http://www.nbc.com/boards/SNL_0405/thread-136173-8.html
+http://www.nbc.com/nbc/The_Apprentice_3/episode_recaps/index.shtml
+http://www.nbc.com/nbc/footer/NBC_Studio_Pass.shtml
+http://www.nbc.gov/cci/matrix.cfm
+http://www.nbc10.com/employmentadvice/962683/detail.html
+http://www.nbc11.com/food/4106137/detail.html
+http://www.nbc30.com/rowland/2754352/detail.html
+http://www.nbc4.tv/entertainment/3651161/detail.html
+http://www.nbc4.tv/news/2415988/detail.html
+http://www.nbc4i.com/
+http://www.nbc4i.com/entertainment/3651161/detail.html
+http://www.nbc4i.com/winterhomecare/4104160/detail.html
+http://www.nber.org/2002japanconf/ito_discussion.html
+http://www.nber.org/aginghealth/spring03/w9782.html
+http://www.nber.org/cycles/july2003.html
+http://www.nber.org/digest/jun04/w10191.html
+http://www.nber.org/papers/W5536
+http://www.nber.org/papers/W7527
+http://www.nber.org/papers/w6541
+http://www.nber.org/reporter/spring05/moretti.html
+http://www.nbgh.org/wolfson.html
+http://www.nbi.ac.za/anreview2021/market.htm
+http://www.nbi.dk/NBA/files/sem/symp/whitemore.html
+http://www.nbm.org/blueprints/95s/winter99/page2/page2.htm
+http://www.nbma.com/news/other/rev.html
+http://www.nbnnews.com/NBN/issues/2004-12-06/Business+Management/
+http://www.nbnnews.com/NBN/textonly/2003-07-21/Seniors+Housing/
+http://www.nbnnews.com/eyeonecon/issues/2005-06-01.html
+http://www.nbportal.com/travel-destinations/kenya/diani-beach/
+http://www.nbr.co.nz/home/column_article.asp?id=12246&cid=4&cname=Business+Today
+http://www.nbri-lko.org/ecoeducation.htm
+http://www.ncaa.org/convention/2003/state_of_association.html
+http://www.ncaa.org/releases/miscellaneous/2004/2004022301ms.htm
+http://www.ncac.org/issues/cyberlibrary.html
+http://www.ncacihe.org/index.php?option=com_content&task=view&id=36&Itemid=81
+http://www.ncad.ie/news/events.html
+http://www.ncae.org/structure/beliefs/positions/timetoteach.shtml
+http://www.ncahf.org/digest02/02-01.html
+http://www.ncahf.org/pp/acu.html
+http://www.ncahigherlearningcommission.org/resources/electronic_degrees/
+http://www.ncahlc.org/index.php?option=com_content&task=view&id=36&Itemid=81
+http://www.ncalcricket.org/html/clubs/caribbean.html
+http://www.ncaonline.org/arts/ticket-summary.shtml
+http://www.ncas.npsa.nhs.uk/about/who
+http://www.ncat.org/energy_current.html
+http://www.ncat.org/liheap/reach/reacht03.htm
+http://www.ncb.org.uk/topic_detail.asp?AreaID=14
+http://www.ncbar.com/lamp/l_dvfaregl.htm
+http://www.ncbex.org/tests/mpre/mpretxt.htm
+http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=hstat2.chapter.4409
+http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=hstat4.section.15260
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=10540269&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=14505772&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=1703759&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=6316674&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=7492350&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=7509755&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=8168409&dopt=Abstract
+http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?holding=npg&cmd=Retrieve&db=PubMed&list_uids=2621635&dopt=Abstract
+http://www.ncbiotech.org/biotech101/glossary.cfm
+http://www.ncbl.com/post/
+http://www.ncc-1776.com/tle2004/tle295-20041031-11.html
+http://www.ncc.nsw.gov.au/news/issues/index.cfm
+http://www.ncca.gov.ph/culture&arts/profile/RA%208491.htm
+http://www.nccbi.org/NCMagazine/2001/mag10-01execprofile.htm
+http://www.ncccusa.org/ecmin/licc/Old_LICC/june2001.html
+http://www.ncccusa.org/news/04dhn.html
+http://www.ncccusa.org/unity/fandostafford.html
+http://www.nccetraining.com/mee.htm
+http://www.nccg.org/323Art-Marry2.html
+http://www.nccg.org/nefilim/ch11.html
+http://www.nccg.org/nefilim/ch6.html
+http://www.ncchc.org/pubs/CC/transsexualism.html
+http://www.nccn.org/patients/patient_gls/_english/_distress/1_introduction.asp
+http://www.nccnhr.org/public/50_156_452.cfm
+http://www.nccob.org/NCCOB/Misc/AboutUs/history.htm
+http://www.nccsia.org/article.asp?articleid=57259
+http://www.nccuslis.org/people/faculty/swain/handout.htm
+http://www.ncd.gov/newsroom/publications/2003/catalyst_theory.htm
+http://www.ncdex.com/Products/products_agro_soya.aspx?Type=Gen
+http://www.ncdoi.com/BCBSConversion.asp
+http://www.ncdot.org/dmv/driver_services/drivershandbook/chapter4/hazardousDriving.html
+http://www.ncdot.org/transit/aviation/council/governing/chapter143b.html
+http://www.ncdsa.com/44/The-Gong-Show-with-Kenny-Nature-Boy-Mollica.htm
+http://www.nceas.ucsb.edu/~alroy/TimeScale.html
+http://www.nceducationalliance.org/links/
+http://www.ncei.com/WSJ-12898.htm
+http://www.ncf.carleton.ca/~bj333/HomePage.boys.html
+http://www.ncfbc.org/lapl.htm
+http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
+http://www.ncga.com/education/unit1/u1story.html
+http://www.ncgs.org/type0.php?pid=16
+http://www.ncgs.org/type0.php?pid=183
+http://www.ncgs.org/type0.php?pid=186
+http://www.nchems.org/news-dec2000.htm
+http://www.nchsinc.com/shop/New%20Items%20IV.htm
+http://www.nchv.org/content.cfm?id=22
+http://www.nchv.org/wheretogo.cfm
+http://www.nci.org/l/l73197.htm
+http://www.nci.org/seatrans.htm
+http://www.ncis.co.uk/sa_members.asp
+http://www.ncisse.org/conferences/cisse2004/history.htm
+http://www.ncjfcj.org/dept/ppcd/main.cfm?Action=GETFILE&filename=DesMoinesMC.pdf&artID=153
+http://www.ncjfcj.org/dept/training/brevity/
+http://www.ncjournalforwomen.com/months/2005_months/jan05/jan05smith2.htm
+http://www.ncl.ac.uk/gane/page12.htm
+http://www.ncl.ac.uk/hss/postgrad/studentprofiles/220
+http://www.ncl.ac.uk/langcen/oac/notices.htm
+http://www.ncl.ac.uk/pahs/about/services.htm
+http://www.ncl.ac.uk/sml/undergrad/YrAbroad/index.php
+http://www.ncleg.net/EnactedLegislation/Statutes/HTML/ByArticle/Chapter_58/Article_89A.html
+http://www.nclg.org.uk/book1/2_10.htm
+http://www.nclis.gov/govt/ntis/testimon.html
+http://www.nclnet.org/apecrpt3.htm
+http://www.nclrc.org/caidlr15.htm
+http://www.nclrights.org/publications/genderasylum.htm
+http://www.ncmedboard.org/
+http://www.ncmentor.org/Applications/UNC/apply/North_Carolina_Central_University.html
+http://www.ncmtns.biz/newsletter_feb.shtml
+http://www.ncnr.nist.gov/AnnualReport/FY2002_html/pages/advanced.htm
+http://www.ncnr.nist.gov/AnnualReport/FY2002_html/pages/observation.htm
+http://www.ncolr.org/jiol/archives/2003/fall/03/
+http://www.nconepal.org/proposed.htm
+http://www.ncpa.org/abo/quarterly/2001a.html
+http://www.ncpa.org/abo/quarterly/2002d.html
+http://www.ncpa.org/about/1stquarter.html
+http://www.ncpa.org/about/2ndquarter.html
+http://www.ncpa.org/about/3rdquarter.html
+http://www.ncpa.org/about/4thquarter.html
+http://www.ncpa.org/pub/st/st276/
+http://www.ncpad.org/disability/fact_sheet.php?sheet=187&section=1386
+http://www.ncpad.org/disability/fact_sheet.php?sheet=187&section=1389
+http://www.ncpad.org/disability/fact_sheet.php?sheet=187&view=all
+http://www.ncpad.org/disability/fact_sheet.php?sheet=195&section=1462
+http://www.ncpad.org/disability/fact_sheet.php?sheet=195&section=1464
+http://www.ncpamd.com/Adult_ADD.htm
+http://www.ncpamd.com/Social_Phobia.htm
+http://www.ncpamd.com/adhd.htm
+http://www.ncpamd.com/adultadd.htm
+http://www.ncpamd.com/dementia.htm
+http://www.ncpamd.com/mcjokes.htm
+http://www.ncpeacejustice.org/article.php?id=40
+http://www.ncpeacejustice.org/article.php?id=59
+http://www.ncpp.org/qajsa.htm
+http://www.ncppa.org/
+http://www.ncptsd.org/publications/cq/v7/n2/curran.html
+http://www.ncptsd.va.gov/facts/disasters/fs_children_disaster.html
+http://www.ncptsd.va.gov/treatment/cq/v4/n2/freedy_k.html
+http://www.ncptsd.va.gov/treatment/cq/v7/n4/southwick.html
+http://www.ncpublicschools.org/educators/pe_demos2001.html
+http://www.ncpublicschools.org/newsroom/facts/goodnews/
+http://www.ncpublicschools.org/student_promotion/mtg/spring02.html
+http://www.ncra-usa.org/join/ctg/join.htm
+http://www.ncra.ca/CRTC/PublicNotice/1988-161.html
+http://www.ncrealtors.org/searchpubs/THR/2002/thr-0302/impact.htm
+http://www.ncrel.org/engauge/framewk/pro/issues/proiss.htm
+http://www.ncrel.org/he/tot/think/script36.htm
+http://www.ncrel.org/info/nlp/lpf02/innovate.htm
+http://www.ncrel.org/litweb/pd/thinking.php
+http://www.ncrel.org/policy/pubs/html/weknow/chapter6.htm
+http://www.ncrel.org/policy/states/files/ilpta.htm
+http://www.ncrel.org/sdrs/areas/isbe/isbedes.htm
+http://www.ncrel.org/sdrs/areas/issues/educatrs/leadrshp/le0bow.htm
+http://www.ncrel.org/sdrs/areas/issues/educatrs/leadrshp/le4pppd.htm
+http://www.ncrel.org/sdrs/areas/issues/educatrs/profdevl/pd300.htm
+http://www.ncrel.org/sdrs/areas/issues/envrnmnt/go/go100.htm
+http://www.ncrel.org/sdrs/areas/issues/methods/technlgy/te800.htm
+http://www.ncrel.org/sdrs/areas/stw_esys/5erly_ch.htm
+http://www.ncrel.org/sdrs/edtalk/newtimes.htm
+http://www.ncrel.org/sdrs/edtalk/tef.htm
+http://www.ncrel.org/tech/challenge/common.htm
+http://www.ncreportcards.org/src/communityLeaders.jsp
+http://www.ncrlc.com/Church-of-Scotland.html
+http://www.ncrr-la.org/campaign.html
+http://www.ncrr.nih.gov/clinical/capextnd.asp
+http://www.ncrs.fs.fed.us/pubs/maps/
+http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/IBMp690/IBM/usr/share/man/info/en_US/xlf/html/lr02.HTM
+http://www.ncsbcs.com/newsite/national%20alliance/Minutes__Afford_013004.htm
+http://www.ncsbcs.org/newsite/national%20alliance/tech_task_force/Tech_minutes_033004.htm
+http://www.ncsbs.org/crashreports/crashreports2001_1.htm
+http://www.ncsc.dni.us/ncsc/ctc4/articles/elec_b.htm
+http://www.ncsc.info/mod.php?mod=userpage&menu=19&page_id=81
+http://www.ncseonline.org/NLE/CRSreports/Risk/rsk-39.cfm
+http://www.ncseonline.org/Updates/83.htm
+http://www.ncseonline.org/ncseconference/2005conference/page.cfm?FID=2504
+http://www.ncseonline.org/updates/83.htm
+http://www.ncset.org/publications/essentialtools/dropout/intro.asp
+http://www.ncseweb.org/resources/articles/5400_legal_background_2_15_2001.asp
+http://www.ncseweb.org/resources/articles/9472_part_04_dr_william_dembski__10_31_2002.asp
+http://www.ncseweb.org/resources/articles/9928_58_sonleitner_what39s_wr_11_24_2004.asp
+http://www.ncseweb.org/resources/news/2004/OH/832_critical_analysis_of_evolutio_3_10_2004.asp
+http://www.ncseweb.org/resources/rncse_content/vol18/9954_the_1998_international_confere_12_30_1899.asp
+http://www.ncsl.org/programs/esnr/96TECH.HTM
+http://www.ncsl.org/programs/health/forum/olmsreport.htm
+http://www.ncsl.org/programs/transportation/trafsafleg01.htm
+http://www.ncsl.org/statefed/ib970707.htm
+http://www.ncsociology.org/sociationtoday/v22/south.htm
+http://www.ncsociology.org/south.htm
+http://www.ncss.org/election/
+http://www.ncsu.edu/greek_life/councils/IFC/caldwell.htm
+http://www.ncsu.edu/meridian/2000wint/inclusive/method.html
+http://www.ncsu.edu/meridian/sum2000/elecnet/
+http://www.ncsu.edu/scivis/lessons/machines/machines.html
+http://www.ncsu.edu/stud_orgs/frat_sor/zta/zetahistory.shtml
+http://www.ncsu.edu/study_abroad/places/africa/ghana_spring.html
+http://www.ncsu.edu/studyabroad/cost/fa.html
+http://www.ncsu.edu/studyabroad/places/europe/florence.html
+http://www.ncsustainableenergy.org/renewable/cleanenergy.html
+http://www.ncsustainableenergy.org/renewable/tax-credits.html
+http://www.ncsymphony.org/index.cfm
+http://www.ncte-in.org/pub/unesco/ch9.htm
+http://www.ncte-in.org/pub/unesco/introduction.htm
+http://www.ncte.org/groups/affiliates/mtgs/117882.htm
+http://www.nctimes.com/
+http://www.nctimes.com/articles/2004/09/13/special_reports/homes/21_49_179_10_04.txt
+http://www.nctimes.com/articles/2004/09/27/special_reports/homes/21_26_089_24_04.txt
+http://www.nctimes.com/articles/2004/10/09/special_reports/homes/22_11_4510_8_04.txt
+http://www.nctimes.com/articles/2005/01/12/news/inland/poway/0_18_361_12_05.txt
+http://www.nctimes.com/articles/2005/02/03/news/coastal/23_14_162_2_05.txt
+http://www.nctimes.com/articles/2005/02/03/obituaries/feature/2_2_0522_25_30.txt
+http://www.nctimes.com/articles/2005/06/09/news/politics/20_30_416_8_05.txt
+http://www.nctimes.com/articles/2005/06/12/news/top_stories/22_41_056_11_05.txt
+http://www.nctimes.com/articles/2005/06/30/news/inland/san_marcos/22_47_536_29_05.txt
+http://www.nctimes.com/front
+http://www.ncu.edu.tw/~ncu7006/eng2/event/event.php?uid=8
+http://www.ncver.edu.au/publications/1532.html
+http://www.ncvhs.hhs.gov/000330mn.htm
+http://www.ncvo-vol.org.uk/asp/search/ncvo/main.aspx?siteID=1&sID=18&subSID=187&documentID=308
+http://www.ncvo-vol.org.uk/asp/search/ncvo/main.aspx?siteID=1&sID=18&subSID=88&documentID=1930
+http://www.ncvo-vol.org.uk/asp/search/ncvo/main.aspx?siteID=1&sID=8&subSID=116&documentID=2359
+http://www.ncvo-vol.org.uk/asp/search/ncvo/main_textonly.aspx?siteID=1&sID=18&subSID=187&documentID=308
+http://www.ncw-av.com/ncwterms.html
+http://www.ncw.wsu.edu/treefruit/fireblight/2000f.htm
+http://www.ncw.wsu.edu/treefruit/fireblight/mdl98c.htm
+http://www.ncwd-youth.info/resources_&_Publications/disability_Legislation/wia.shtml
+http://www.ncwd-youth.info/resources_&_Publications/hot_Topics/preparatory_Experiences/youth.shtml
+http://www.ncwd-youth.info/resources_&_Publications/hot_Topics/youth_Development/youth_family.shtml
+http://www.ncwildflower.org/plants/gentianopsis_crinita/gentianopsis_crinita.htm
+http://www.ncwine.org/02sfwinners.htm
+http://www.nczonline.net/
+http://www.nd.edu/~crosenbe/jobs.html
+http://www.nd.edu/~dbates1/math105/summary.html
+http://www.nd.edu/~kellogg/undergrad/scholars.html
+http://www.nd.edu/~music/courses/previouscourses/ugrad_spring03.html
+http://www.nd.edu/~ndbizmag/issue9/opinion.shtml
+http://www.nda.ox.ac.uk/wfsa/html/u02/u02_003.htm
+http://www.nda.ox.ac.uk/wfsa/html/u06/u06_006.htm
+http://www.nda.ox.ac.uk/wfsa/html/u12/u1212_01.htm
+http://www.nda.ox.ac.uk/wfsa/html/u18/u1810_01.htm
+http://www.nda.ox.ac.uk/wfsa/html/u18/u1813_01.htm
+http://www.ndc-md.org/ndc/dcompetition.html
+http://www.ndcs.org.uk/treks_challenges/fundraising_information/focus_on_a_fundraiser/cycle_cuba.html
+http://www.ndcs.org.uk/treks_challenges/uk_challenges/training_tips/
+http://www.ndctz.com/kilindpark.htm
+http://www.nde.state.ne.us/COMMISH/febart2.html
+http://www.nderf.org/trisha_h's_nde.htm
+http://www.ndga.net/whatisdg.htm
+http://www.ndia.org/Content/NavigationMenu/Resources1/Presidents_Corner2/February_2002.htm
+http://www.ndia.org/Content/NavigationMenu/Resources1/Presidents_Corner2/January_2003.htm
+http://www.ndia.org/Content/NavigationMenu/Resources1/Presidents_Corner2/July_2004.htm
+http://www.ndia.org/PrinterTemplate.cfm?Section=Presidents_Corner2&Template=/ContentManagement/HTMLDisplay.cfm&ContentID=5066
+http://www.ndif.org/Article/jar-286.html
+http://www.ndow.org/wild/animals/facts/squirrel_rock.shtm
+http://www.ndoylefineart.com/design1.html
+http://www.ndoylefineart.com/drawexercise1.html
+http://www.ndoylefineart.com/gesture3.html
+http://www.ndoylefineart.com/mechanics4.html
+http://www.ndoylefineart.com/ringgold.html
+http://www.ndrcc.com/ndrcc_flying_field_rules.htm
+http://www.ndsmcobserver.com/news/2003/10/09/Sports/Howard.Looks.To.End.Season.With.Upset.Of.Unbeaten.Lewis-523920.shtml
+http://www.ndsu.edu/counseling/successstrategies/friends.shtml
+http://www.ndsu.nodak.edu/communication/masters/grdclss.php
+http://www.ndsu.nodak.edu/ndsu/kbrooks/blog/
+http://www.ndt.net/article/wcndt2004/html/htmltxt/450_sjerve.htm
+http://www.ndu.edu/ctnsp/biosensing_05.htm
+http://www.ndu.edu/ctnsp/dh40.htm
+http://www.ndu.edu/inss/McNair/mcnair42/m042ch07.html
+http://www.ndu.edu/inss/books/Books%20-%201990%20to%201995/Dominant%20Battlespace%20Knowledge%20-%20Oct%2095/dbkch04.html
+http://www.ndu.edu/inss/books/Books_2002/Globalization_and_Maritime_Power_Dec_02/02_ch01.htm
+http://www.ndu.edu/inss/strforum/SF159/forum159.html
+http://www.nea.org/lessons/tt021209.html
+http://www.nea.org/socialsecurity/stories.html
+http://www.nea.org/socialsecurity/stories.html?mode=print
+http://www.nea.org/teachexperience/tsklk040621.html
+http://www.neahs.nsw.gov.au/web/learning-services/awards-grants.shtml
+http://www.nealpollack.com/
+http://www.nealstephenson.com/content/author_bad.htm
+http://www.near-death.com/bubulka.html
+http://www.near-death.com/dennis.html
+http://www.near-death.com/differences.html
+http://www.near-death.com/experiences/evidence07.html
+http://www.near-death.com/experiences/evidence10.html
+http://www.near-death.com/experiences/suicide07.html
+http://www.near-death.com/famous.html
+http://www.near-death.com/religion.html
+http://www.near-death.com/tart.html
+http://www.nearstar.org/v2/joinFAQ.asp
+http://www.neasc.org/cpss/visit_protocol.htm
+http://www.neasc.org/ctci/policy_statement_electronically_offered_degree.htm
+http://www.neatsolutions.com/Healthy%20Food%20Choices/Garden.htm
+http://www.neaturl.com/rules.html
+http://www.nebraskahistory.org/histpres/nrhp.htm
+http://www.nebridalguide.com/
+http://www.nec-mitsubishi.com/coremedia/generator/index,spec=x__uk__en,realm=Company__TermsAndConditions
+http://www.nec.ac.uk/debates/category-browse?category_id=2282
+http://www.nec.ac.uk/debates/category-browse?category_id=2502
+http://www.nec.ac.uk/info/news-item?news_item_id=103055
+http://www.nec.ac.uk/resources/category-browse?category_id=458
+http://www.nec.co.uk/MultiSync_VT770.aspx
+http://www.necanoe.org/Training.htm
+http://www.necelam.com/news/index.php?Subject=detail&page=SID2005
+http://www.necg.com.au/JustDoIPArchive/issue050415_270.shtml
+http://www.nechville.com/testimonials.html
+http://www.necnp.org/files/newsletters/otw1199.html
+http://www.ned.org/events/anniversary/oct1603-Bush.html
+http://www.nedlac.org.za/top.asp?inc=docs/reports/annual/1999/trade.html
+http://www.nedlac.org.za/top.asp?inc=summit/1997/labour.html
+http://www.nedo.go.jp/english/archives/170601/170601.html
+http://www.needabreak.com/mtl/nabfire.nsf/NABMAPSEARCHRESULTS?ReadForm&pn=5&st=1&ed=10&pets=0
+http://www.needcoffee.com/
+http://www.needlenose.com/node/view/1453
+http://www.neelb.org.uk/administration/humanresources/eqlops/ad00034a.asp
+http://www.neelb.org.uk/administration/humanresources/eqlops/ad00039a.asp
+http://www.neelb.org.uk/administration/humanresources/eqlops/ad00040a.asp
+http://www.nees.lehigh.edu/index.php/fuseaction/manual.2
+http://www.neforestry.org/forestry/proutywoods.asp
+http://www.neh.gov/grants/grantsgov/hifacultyhbcuinstructions.html
+http://www.neh.gov/grants/guidelines/hifacultyhbcu.html
+http://www.neh.gov/grants/guidelines/institutional.html
+http://www.neh.gov/news/humanities/2005-01/medals.html
+http://www.nehealth.org/pbmc.asp
+http://www.nehemiahinstitute.com/articles/index.php?action=show&id=30
+http://www.nehra.com/articlesresources/article.cfm?id=546&_categorytypeid=1
+http://www.nehra.com/articlesresources/article.cfm?id=796&_categorytypeid=4
+http://www.nehra.com/articlesresources/leadership.cfm
+http://www.nehra.com/articlesresources/trainingdevelopment.cfm
+http://www.nehrlich.com/philosophy/attention.html
+http://www.nei.nih.gov/amd/summary.asp
+http://www.nei.nih.gov/health/cataract/cataract_facts.asp
+http://www.nei.nih.gov/health/clinicaltrials_facts/index.asp
+http://www.nei.nih.gov/health/cornealdisease/index.asp
+http://www.nei.nih.gov/health/maculardegen/armd_facts.asp
+http://www.nei.nih.gov/news/congresstest/opening2004.asp
+http://www.nei.nih.gov/news/pressreleases/062201.asp
+http://www.nei.org/index.asp?catnum=2&catid=71
+http://www.neighborhoodnewsweb.com/NNWSignUp1.asp
+http://www.neilgaiman.com/faq/faq.asp
+http://www.neilgaiman.com/journal/2004_02_15_archive.asp
+http://www.neilgaiman.com/journal/2005/01/everything-you-wanted-to-know-about.asp
+http://www.neilinnes.org/chords/listerama.htm
+http://www.neilstewartassociates.com/sh131/
+http://www.neisd.net/curriculum/science.html
+http://www.neisd.net/curriculum/science/cos_secondary.htm
+http://www.neisd.net/curriculum/science/science.html
+http://www.neisd.net/risk/dental.html
+http://www.neiu.edu/~reseller/ehpg18envmvmt.htm
+http://www.nel.edu/NEL-Club-of-Friends.htm
+http://www.nela-illinois.org/
+http://www.nelinet.net/digital/dcms/education.htm
+http://www.nelliemuller.com/evaluation_pageNew_format.htm
+http://www.nelliemuller.com/task2.htm
+http://www.nellis.af.mil/retiree.htm
+http://www.nelsonbc.ca/bb/messages/12600.html
+http://www.nelsonbc.ca/bb/messages/12601.html
+http://www.nelsonbibles.com/bibles/quotationpolicies/QuotationPolicies_NKJV.asp
+http://www.nelsoncitycouncil.co.nz/environment/-human/human-main.htm
+http://www.nelsondemille.net/books/rivers_of_babylon_ex.asp
+http://www.nema.org/fieldreps/codealerts/
+http://www.nema.org/media/pr/20050204a.cfm
+http://www.nema.org/media/pr/20050506a.cfm
+http://www.nema.org/stds/fieldreps/codealerts/index.cfm?renderForPrint=1
+http://www.nemetschek.net/edispatch/Vol25/
+http://www.nemmar.com/
+http://www.nena9-1-1.org/
+http://www.nenie.net/archives/2004_10.html
+http://www.neobirth.org.za/abortion.html
+http://www.neoboard.net/index.php?id=1110
+http://www.neoc.ne.gov/faq/faq.htm
+http://www.neodata.com/hfm/llde/gift-subscribe.shtml
+http://www.neoflux.com/archive/data/2003/0825-111837.shtml
+http://www.neogeoforlife.com/ngpc/reviews/snk_vs_capcom_motm.shtml
+http://www.neonatology.org/classics/allin.html
+http://www.neonbubble.com/index.php?postid=81
+http://www.neopets.com/art/storytell.phtml?issue=180
+http://www.neoscientists.org/~cmuehlan/tekc64/
+http://www.neoseeker.com/Games/Products/PC/bloodomen2/
+http://www.neoseeker.com/Movies/Products/mean_girls/
+http://www.neoverve.com/ecommerce/storesense_difference.html
+http://www.nepalnews.com.np/contents/englishweekly/independent/10-01/tourism.htm
+http://www.nepalnews.com.np/contents/englishweekly/spotlight/2000/jan/jan21/newsnotes.htm
+http://www.nepanewsletter.com/food.html
+http://www.nepforums.co.uk/thisisdevon/showflat.php?Cat=&Number=3708&page=&view=&sb=5&o=
+http://www.neratsociety.co.uk/images/showfirsttime/showfirsttime.htm
+http://www.neravt.com/left/attack.html
+http://www.neravt.com/left/frontpage.html
+http://www.nerc.ac.uk/publications/latestpressrelease/2004-21globalairpollution.asp
+http://www.nerone.cc/services/rental/romanref/extrainfo.htm
+http://www.nesa.edu/ce/cemarch.html
+http://www.nesa.org.uk/latest_issue/july03.htm
+http://www.nesales.com/tools/scrollsaw.htm
+http://www.nesc.wvu.edu/nsfc/nsfc_products_archive.htm
+http://www.nesea.org/publications/NESun/green_schools_web.html
+http://www.neseabirds.com/conservationtrawling.htm
+http://www.nestafuturelab.org/research/reviews/ts03.htm
+http://www.nestafuturelab.org/viewpoint/art44.htm
+http://www.nestafuturelab.org/viewpoint/art51.htm
+http://www.nestafuturelab.org/viewpoint/creat17.htm
+http://www.nestmom.com/bravado.html
+http://www.net-about-town.com.au/imaginepeace/articles/Patrick%20Cockburn%20Waiting%20For%20the%20Missiles%20to%20Fall.html
+http://www.net-consumers.org/erica/policy/consumers.htm
+http://www.net-detective-download.us/
+http://www.net-floor.com/corporate/corporate.htm
+http://www.net-floor.com/drawings/faq.htm
+http://www.net-impact.org/index.php?id=1086
+http://www.net-magic.net/users/gordo55j/mountain.htm
+http://www.net-temps.com/jobs/legal/wetfeet.htm?index=0
+http://www.net-temps.com/jobs/legal/wetfeet.htm?index=3
+http://www.net-weather.co.uk/forum/lofiversion/index.php/t17213.html
+http://www.net.org/factsheets/
+http://www.net.org/factsheets/index.vtml
+http://www.net4dem.org/mayglobal/Events/Global%20Events/northA.htm
+http://www.net4nowtforum.co.uk/forumdisplay.php?f=113
+http://www.net4nowtforum.co.uk/forumdisplay.php?f=113&daysprune=-1&order=asc&sort=postusername
+http://www.net4nowtforum.co.uk/forumdisplay.php?f=113&daysprune=-1&order=desc&sort=lastpost
+http://www.net4nowtforum.co.uk/forumdisplay.php?f=113&daysprune=-1&order=desc&sort=voteavg
+http://www.net4nowtforum.co.uk/forumdisplay.php?f=113&page=4&sort=lastpost&order=&pp=25&daysprune=-1
+http://www.net4tv.com/voice/story.cfm?StoryID=1730
+http://www.netacc.net/~gradda/fa93pitt.html
+http://www.netacc.net/~gradda/su96deal.html
+http://www.netage.com/netage2k/library2k/agenet/sec7.htm
+http://www.netalive.org/topics/26554
+http://www.netaloid.com/
+http://www.netapp.com/education/faq.html
+http://www.netapp.com/education/faq.html?fmt=print
+http://www.netartreview.net/
+http://www.netb2b.com/netMarketing200/1999/
+http://www.netb2b.com/netMarketing200/1999/company.html
+http://www.netballcoaching.com/coachmanuals.htm
+http://www.netbookings.com.au/privacy-policy.htm
+http://www.netc.org/openoptions/pros_cons/principles.html
+http://www.netce.com/course.asp?Course=2100
+http://www.netcomuk.co.uk/~rwevans1/FabianWales/essay0001.html
+http://www.netcopspsi.com/netcopsstories/juvpartiesstory.html
+http://www.netdiver.net/
+http://www.netdiver.net/interviews/peterpaulkoch.php
+http://www.netdiver.net/x_editorials/sacredR.php
+http://www.netdoctor.co.uk/ate/liverandkidney/205173.html
+http://www.netdoctor.co.uk/ate/mentalhealth/205693.html
+http://www.netdoctor.co.uk/ate/musclesjoints/202615.html
+http://www.netdoctor.co.uk/diseases/depression/drugsanddepression_000487.htm
+http://www.netdoctor.co.uk/diseases/facts/asthma_extentinuk.htm
+http://www.netdoctor.co.uk/diseases/facts/hyperthyroidism.htm
+http://www.netdoctor.co.uk/diseases/facts/polycythaemia.htm
+http://www.netdoctor.co.uk/features/pelvicexercises_003841.htm
+http://www.netdoctor.co.uk/focus/pmi/index.shtml
+http://www.netdoctor.co.uk/health_advice/examinations/bloodsamples.htm
+http://www.netdoctor.co.uk/health_advice/facts/labour_complications_000610.htm
+http://www.netdoctor.co.uk/health_advice/facts/pregnant_feel_terrible_000614.htm
+http://www.netdoctor.co.uk/hilaryjones/secondopinion/cholesterol.htm
+http://www.netdoctor.co.uk/medicines/100003466.html
+http://www.netdoctor.co.uk/sex_relationships/facts/childrenandsex.htm
+http://www.netdoctor.co.uk/sex_relationships/facts/ed_partner.htm
+http://www.netdoctor.co.uk/sex_relationships/facts/masturbation.htm
+http://www.netdoctor.co.uk/sex_relationships/facts/prematureejaculation.htm
+http://www.netdoctor.co.uk/sex_relationships/facts/sterilisation_women.htm
+http://www.netdoctor.co.uk/special_reports/manmanual.htm
+http://www.netdoctor.co.uk/travel/diseases/crossing_borders_with_medicines.htm
+http://www.netfamilynews.org/emergencyhelp.html
+http://www.netfamilynews.org/nl041001.html
+http://www.netforcuba.org/InfoCuba-EN/Economy/SocialistEconomy.htm
+http://www.netfreestuff.co.uk/
+http://www.netguruindia.com/features/jyotibasu/interview.html
+http://www.nethemb.org.sg/listabbre.html
+http://www.netherlands-embassy.org/article.asp?articleref=AR00001651EN
+http://www.nethy.org/nethyhouse/helpforguests/
+http://www.netimperative.com/2000/06/20/GoldZack_building/view
+http://www.netimperative.com/2002/06/19/RESEARCH_Media_giants
+http://www.netincome.gr/
+http://www.netincome.gr/home-based-business-articles/Does_MLM_really_work.htm
+http://www.netjak.com/review.php/872
+http://www.netjak.com/review.php/918
+http://www.netjer.org/forums/showflat.php?Cat=&Board=wehem&Number=73318&page=0&view=collapsed&sb=5&o=&fpart=1
+http://www.netjer.org/forums/showflat.php?Cat=&Board=wehem&Number=73318&page=0&view=collapsed&sb=5&o=&fpart=all
+http://www.netjer.org/forums/showflat.php?Cat=&Number=73318&page=0&view=collapsed&sb=5&o=
+http://www.netjer.org/forums/showflat.php?Cat=&Number=73318&page=0&view=collapsed&sb=5&o=&fpart=1
+http://www.netkidswear.com/edbauertravp.html
+http://www.netlib.org/na-digest-html/05/v05n22.html
+http://www.netlib.org/na-digest-html/87/v87n62.html
+http://www.netlib.org/na-digest-html/87/v87n70.html
+http://www.netlib.org/na-digest-html/88/
+http://www.netlib.org/na-digest-html/91/v91n18.html
+http://www.netlib.org/netlib/na-digest-html/04/v04n02.html
+http://www.netlistinc.com/technology_products.aspx?sm=gl
+http://www.netmechanic.com/news/vol6/design_no2.htm
+http://www.netmechanic.com/news/vol6/html_no3.htm
+http://www.netmechanic.com/news/vol6/promo_no2.htm
+http://www.netministries.org/see/churches.exe/ch08395
+http://www.netnutritionist.com/studies.htm
+http://www.netpress.org/careandfeeding.html
+http://www.netreach.net/~sixofone/
+http://www.netrelate.com/forums/Messages.php?Topic=7433&StartIndex=0
+http://www.netrep.dk/gb/generel1GB.htm
+http://www.netresources.co.uk/news.html
+http://www.netrition.com/expert_foods_cakeability_page.html
+http://www.netsci.org/Science/Compchem/feature14e.html
+http://www.netsnippets.com/casestudies/jody_k.htm
+http://www.netsuite.com/portal/customers/cs_hampton.shtml
+http://www.nettally.com/palmk/crderiva.html
+http://www.netvalley.com/intval.html
+http://www.netvalley.com/intvalxan.html
+http://www.netwellness.org/centers/aahealth/editorial/
+http://www.netwellness.org/healthtopics/aging/faqhos.cfm
+http://www.netwellness.org/healthtopics/violence/
+http://www.netwolves.com/new_netwolves/press_release_article72.php
+http://www.network54.com/Forum/169624?it=16
+http://www.network54.com/Forum/thread?forumid=180658&messageid=1078719287&lp=1079203399
+http://www.network54.com/Forum/thread?forumid=180658&orderid=1068764463&moveto=prevtopic
+http://www.network54.com/Forum/thread?forumid=99039&messageid=1051572231&lp=1054087209
+http://www.networkcomputing.com/1210/1210sp1.html
+http://www.networkcomputing.com/showitem.jhtml?articleID=51202084&pgno=1
+http://www.networkcomputing.com/showitem.jhtml?docid=1524ws1
+http://www.networkcomputing.com/unixworld/1209/1209uw.html
+http://www.networkcultures.net/20_21/contemporary.html
+http://www.networkearth.org/naturalbuilding/composite.html
+http://www.networkedchurch.com/
+http://www.networkforgood.youthnoise.com/gm/realStories2.asp
+http://www.networkideas.org/themes/inequality/jan2002/ie28_Brazil.htm
+http://www.networkideas.org/themes/world/feb2003/we13_NAFTA.htm
+http://www.networkmagazine.com/shared/printableArticle.jhtml?articleID=21401746
+http://www.networkphysics.com/products/literature/case_studies/mpls.shtml
+http://www.networkworld.com/columnists/2005/032805gearhead.html
+http://www.networkworld.com/indepth/
+http://www.networkworld.com/news/2002/0121webservices.html?docid=7747
+http://www.networkworld.com/news/2003/1201apm.html
+http://www.networkworld.com/news/2005/050905widernet.html
+http://www.networkworld.com/reviews/2002/1028bgrev.html
+http://www.netwrx1.com/CherryAmes/firstaid.html
+http://www.netxusa.com/products/Digium/IAXy/
+http://www.netzwissenschaft.de/mob.htm
+http://www.neuroatomik.com/content/article.php/aid/290
+http://www.neurology.org/misc/sugg.htm
+http://www.neurologychannel.com/vertigo/index.shtml
+http://www.neuron.yale.edu/course/net2.html
+http://www.neuroskills.com/tbi/treat.shtml
+http://www.neurosurg.wisc.edu/sunlab/inter.html
+http://www.neurosurgery.pitt.edu/cranialbase/endonasal/
+http://www.neuroticfishbowl.com/archives/002882.html
+http://www.nevadaappeal.com/apps/pbcs.dll/article?AID=/20040526/SPECIALA03/105260033&template=printart
+http://www.nevadaappeal.com/apps/pbcs.dll/article?AID=/20050110/REGION/110100075&template=printart
+http://www.nevadaappeal.com/apps/pbcs.dll/article?AID=/20050118/REGION/101180027&template=printart
+http://www.nevadaappeal.com/article/20040526/SPECIALA03/105260033
+http://www.nevadaappeal.com/article/20050102/NEVADA/101020037
+http://www.nevadaappeal.com/article/20050110/REGION/110100075
+http://www.nevadaappeal.com/article/20050112/PERSONALAPPEAL/101120017
+http://www.nevadaappeal.com/article/20050118/REGION/101180027
+http://www.nevadaappeal.com/article/20050120/NEWS/101200038/0/FRONTPAGE
+http://www.nevadacitychamber.com/area_hike.htm
+http://www.nevadadesertexperience.org/TR_action.html
+http://www.nevadagives.org/01_giving_guide/01_individual_donors/
+http://www.nevadainventors.org/nl03oct.html
+http://www.nevdgp.org.au/geninf/std_misc/THE_DEMENTIAS.htm
+http://www.neveh.org/morgan/nidah/nidah09.html
+http://www.nevisrange.co.uk/summer/
+http://www.new-agri.co.uk/98-3/debate.html
+http://www.new-agri.co.uk/99-3/debate.html
+http://www.new-visions.com/essentialoils.html
+http://www.new.co.za/~currin/coldlyrics.html
+http://www.new.co.za/~currin/rabbitt_boys.html
+http://www.new.co.za/~currin/rabbitt_hits.html
+http://www.newadvent.org/cathen/02374a.htm
+http://www.newadvent.org/cathen/03449a.htm
+http://www.newadvent.org/cathen/03534a.htm
+http://www.newadvent.org/cathen/04213b.htm
+http://www.newadvent.org/cathen/04332a.htm
+http://www.newadvent.org/cathen/05103b.htm
+http://www.newadvent.org/cathen/05184b.htm
+http://www.newadvent.org/cathen/06220a.htm
+http://www.newadvent.org/cathen/07010b.htm
+http://www.newadvent.org/cathen/07110b.htm
+http://www.newadvent.org/cathen/08719a.htm
+http://www.newadvent.org/cathen/08724a.htm
+http://www.newadvent.org/cathen/09160c.htm
+http://www.newadvent.org/cathen/10005a.htm
+http://www.newadvent.org/cathen/10321a.htm
+http://www.newadvent.org/cathen/11744a.htm
+http://www.newadvent.org/cathen/12254b.htm
+http://www.newadvent.org/cathen/12276a.htm
+http://www.newadvent.org/cathen/14326b.htm
+http://www.newadvent.org/cathen/15073a.htm
+http://www.newadvent.org/cathen/15621c.htm
+http://www.newadvent.org/cathen/15724b.htm
+http://www.newadvent.org/fathers/0830.htm
+http://www.newadventures.com/pa/Default.htm
+http://www.newagecitizen.com/PraNews010604.htm
+http://www.newamericancentury.org/iraqletter1998.htm
+http://www.newamericancentury.org/iraqsep1898.htm
+http://www.newamericancentury.org/nato-20010618.htm
+http://www.newamericancentury.org/tertrais-20041119.htm
+http://www.neward.net/ted/weblog/index.jsp?date=20030522
+http://www.neward.net/ted/weblog/index.jsp?date=20040425
+http://www.newark.com/NewarkWebCommerce/newark/en_US/support/help/terms.jsp
+http://www.newarkcatholic.org/departments/Classes/Biology_Vohsing.htm
+http://www.newbalkanpolitics.org.mk/napis.asp?id=35&lang=English
+http://www.newblueshoe.com/archives/love/index.php
+http://www.newbury-college.ac.uk/jkcm/default.asp?pg=%2F2004Website%2FTextOnly%2FTextOnlyBlack%2F&viewversion=0
+http://www.newbury-society.org.uk/Newsletters/2002_Winter/changes.htm
+http://www.newburyport.k12.ma.us/middle/about.htm
+http://www.newburytheatre.co.uk/groups/newbury.htm
+http://www.newbusiness.co.uk/content/2306/newsarticle.htm
+http://www.newbusiness.co.uk/content/2504/article.htm
+http://www.newcanaan.info/whats_new.html
+http://www.newcastle-emlyn.com/issues/parkingcharges/objectletter.shtml
+http://www.newcastle-emlyn.com/stopwar/archive.shtml
+http://www.newcastle.gov.uk/educlibnew.nsf/0/5beddf87627e38f480256bf800293492?OpenDocument
+http://www.newchurchissues.org/nce/nceint.htm
+http://www.newciv.org/nl/newslog.php/_v56/__show_article/_a000056-000007.htm
+http://www.newcolonist.com/usablu_jhk.html
+http://www.newcomersclubcanada.com/publicity.htm
+http://www.newcomersnetwork.com/mel/oursay/expertadvice/cppm.php
+http://www.newconceptspublishing.com/hauntingmelody.htm
+http://www.newconceptspublishing.com/theassassinsblade.htm
+http://www.newcounterculture.com/log/
+http://www.newcovpub.com/icc/3quest.html
+http://www.newcriterion.com/archive/13/sept94/bowman.htm
+http://www.newcriterion.com/archive/22/june04/america.htm
+http://www.newcriterion.com/archive/22/june04/jay(may).htm
+http://www.newcriterion.com/archive/22/june04/tour.htm
+http://www.newcriterion.com/archive/23/dec04/rconquest.htm
+http://www.newcriterion.com/weblog/armavirumque.html
+http://www.newcrops.uq.edu.au/newslett/ncnl3-93.htm
+http://www.newcurioshop.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=4&page=1
+http://www.newdawnmagazine.com.au/Articles/Crypto-HistoryP1.html
+http://www.newdawnmagazine.com/Articles/Spying%20Prying%20Lying.html
+http://www.newday.com/reviews/ThatsAFamilyREV.html
+http://www.newdemocracyproject.org/publications/closing_deficits/deficits_four.cfm
+http://www.newdialogue.org.uk/disc/discf101.html
+http://www.newdimensiongames.com/phenomenon5.htm
+http://www.newdonkey.com/
+http://www.newdream.net/~sage/old/
+http://www.newdream.net/~sage/old/numbers/
+http://www.newdream.org/consumer/buycoffee.php
+http://www.newdream.org/make/bts/talkingpoints.php
+http://www.neweconomyindex.org/states/2002/strategies.html
+http://www.newenglandancestors.org/education/articles/NEA/disease_and_our_ancestors_mortality_in_the_eighte_607_1807.asp
+http://www.newenglandbouldering.com/news/news301.html
+http://www.newenglandconservatory.edu/newsHightlights/2005/gardiner_commencement.html
+http://www.newenglanddairycouncil.org/intheNews.htm
+http://www.newenglandgolf.com/features/plymouth-golf-174.htm
+http://www.newenglandinns.com/so_propinfo.cfm?PID=629&PromoID=13
+http://www.newenglandna.org/faqs/
+http://www.newenglandtennis.com/news_2004-09-09.html
+http://www.newenglandtennis.com/news_2005-01-11.html
+http://www.newfangled.com/contentmgr/showdetails.php/id/5448
+http://www.newfarm.org/archive/1000_stories/sare_stories/ha.shtml
+http://www.newfarm.org/columns/Martens/2003/march%202003/index.shtml
+http://www.newfarm.org/columns/Martens/2003/march%202003/index_print.shtml
+http://www.newfarm.org/news/2004/0204/2.20.04/white_paper.shtml
+http://www.newfilipina.com/index_magsalita.html
+http://www.newfilipina.com/members/halo/nagbasa/fiction/list.html
+http://www.newfilmco.com/newfilm.htm
+http://www.newfoundations.com/GALLERY/HutchinsII.html
+http://www.newfriend.us/love-store/Joy_of_Sex
+http://www.newfriend.us/state/MA_5
+http://www.newfriend.us/state/NY_43
+http://www.newfriends4u.com/friendship-clubs-online.shtml
+http://www.newgenevacenter.org/biography/einstein2.htm
+http://www.newgenevacenter.org/biography/hobbes2.htm
+http://www.newgenevacenter.org/biography/newton2.htm
+http://www.newgenevacenter.org/biography/socrates2.htm
+http://www.newgenevacenter.org/biography/spinoza2.htm
+http://www.newgenevacenter.org/our-story/14_catholic_church.htm
+http://www.newgenevacenter.org/our-story/17_reformation.htm
+http://www.newgrounds.com/
+http://www.newhair.com/
+http://www.newhair.com/info/history.asp
+http://www.newhair.com/resources/mp-1996-scalp-reductions.asp
+http://www.newhair.com/resources/mp-2003-future-ht.asp
+http://www.newhair.com/treatment/basics-overview.asp
+http://www.newhomemaker.com/about/ezzo.html
+http://www.newhomemaker.com/family/parenting/safeholiday.html
+http://www.newhopepa.com/events/0201.htm
+http://www.newhorizons.org/future/Creating_the_Future/crfut_knowles.html
+http://www.newhorizons.org/lifelong/higher_ed/marchese.htm
+http://www.newhorizons.org/neuro/diamond_brain_response.htm
+http://www.newhorizons.org/neuro/tallal.htm
+http://www.newhorizons.org/spneeds/gifted/nowak3.htm
+http://www.newhorizons.org/strategies/learning_environments/dickinson_lrnctr4.htm
+http://www.newhorizons.org/strategies/literacy/oconnor.htm
+http://www.newhorizons.org/strategies/multicultural/front_multicultural.htm
+http://www.newhorizons.org/strategies/styles/reinert.htm
+http://www.newhorizons.org/strategies/technology/front_tech.htm
+http://www.newhouse.com/archive/barnett012505.html
+http://www.newhouse.com/lileks.html
+http://www.newhousenews.com/archive/lesie051903.html
+http://www.newhousenews.com/archive/tilove073103.html
+http://www.newhum.com/for_teachers/sample_assignments/sa_nussbaum.html
+http://www.newhumanist.org.uk/volume116issue3_more.php?id=144_0_16_0_C
+http://www.newhumanist.org.uk/volume118issue3_more.php?id=94_0_21_0_C
+http://www.newideafitness.com/Instructor.html
+http://www.newideas.net/attention_deficit/treatment.htm
+http://www.newindpress.com/sunday/sundayitems.asp?id=SEV20050114040553&eTitle=Focus&rLink=0
+http://www.newint.org/issue141/making.htm
+http://www.newint.org/issue160/share.htm
+http://www.newint.org/issue166/letters.htm
+http://www.newint.org/issue166/mirage.htm
+http://www.newint.org/issue178/harlem.htm
+http://www.newint.org/issue182/update.htm
+http://www.newint.org/issue190/workers.htm
+http://www.newint.org/issue221/keynote.htm
+http://www.newint.org/issue248/husband.htm
+http://www.newint.org/issue254/fire.htm
+http://www.newint.org/issue261/action.htm
+http://www.newint.org/issue261/sssh.htm
+http://www.newint.org/issue278/keynote.html
+http://www.newint.org/issue285/history.html
+http://www.newint.org/issue294/reviews.htm
+http://www.newint.org/issue307/malign.htm
+http://www.newint.org/issue322/keynote.htm
+http://www.newint.org/issue344/walk.htm
+http://www.newint.org/issue377/tanya.htm
+http://www.newint.org/streets/210900.htm
+http://www.newjerseygolf.net/features/faq/handicapping.shtml
+http://www.newleftreview.com/NLR25501.shtml
+http://www.newlifeministries-nlm.org/online/nlm_report_3.htm
+http://www.newlifeministries-nlm.org/people/6-2_Church_Culture.htm
+http://www.newlifeministries-nlm.org/people/8-02_Spiritual_Warfare.htm
+http://www.newline.com/press/2004/0317_gaypride.shtml
+http://www.newmanreader.org/works/britishcritic/notices10-38.html
+http://www.newmanreader.org/works/development/chapter12.html
+http://www.newmanreader.org/works/discourses/discourse11.html
+http://www.newmanreader.org/works/gain/chapter1-10.html
+http://www.newmanreader.org/works/parochial/volume3/sermon7.html
+http://www.newmanreader.org/works/subjects/sermon19.html
+http://www.newmanreader.org/works/subjects/sermon20.html
+http://www.newmanu.edu/school-artshum/visualarts/faculty/rose.html
+http://www.newmediaexplorer.org/chris/2003/11/24/take_your_pills.htm
+http://www.newmediaexplorer.org/chris/2005/01/11/michael_forrest_is_in_jail_for_making_and_selling_electromedicine_devices.htm
+http://www.newmediastudies.com/art/gilbert.htm
+http://www.newmediastudies.com/effects1.htm
+http://www.newmediastudies.com/intro2004.htm
+http://www.newmexico.org/nm-magazine/recipe.php
+http://www.newmodelarmy.org/shop.htm
+http://www.newmuseum.org/Press_Office/Press_Releases/East%20Village%20USA.10.htm
+http://www.newmuseum.org/Press_Office/Press_Releases/SanaaDesign.htm
+http://www.newmusiccanada.com/
+http://www.newmusicwest.com/
+http://www.newpath4.com/faithgrandmaandapplepie.htm
+http://www.newport-county.co.uk/archives/season_2001-2002/players_profile_2001-02.html
+http://www.newport-news.va.us/eoc/eop.htm
+http://www.newport.ac.uk/apply/ug1.htm
+http://www.newportnewstimes.com/articles/2005/01/07/news/news20.txt
+http://www.newpro-replacement-window.com/2/privacy.jsp
+http://www.newproductdynamics.com/services.htm
+http://www.newreleasetuesday.com/features/interview_dayoffire.shtml
+http://www.newrider.com/forum/showthread.php?threadid=46332
+http://www.newrider.com/forum/showthread.php?threadid=46814
+http://www.newrules.org/drdave/5-internettax.html
+http://www.newrules.org/drdave/6-nclb.html
+http://www.newrules.org/hta/hta0802.htm
+http://www.newrules.org/retail/news_archive.php?year=2003&browseby=date
+http://www.newrules.org/retail/size.html
+http://www.news-gazette.com/essential/food/index.cfm?page=kirbystory.cfm&id=52
+http://www.news-gazette.com/special/scottone/index.cfm?page=story&id=14
+http://www.news-herald.com/site/news.cfm?newsid=13900231&BRD=1698&PAG=461&dept_id=21849&rfi=6
+http://www.news-leader.com/_sunday/0116-Kingmonume-276525.html
+http://www.news-leader.com/_sunday/0116-Modernworl-276524.html
+http://www.news-leader.com/_tuesday/0118-Women,66,g-278019.html
+http://www.news-leader.com/_tuesday/20050201-Horseownercharg.html
+http://www.news-leader.com/today/0118-Women,66,g-278019.html
+http://www.news-medical.net/?id=10123
+http://www.news-medical.net/?id=1868
+http://www.news-medical.net/?id=2316
+http://www.news-medical.net/?id=2462
+http://www.news-medical.net/?id=3167
+http://www.news-medical.net/?id=3651
+http://www.news-medical.net/?id=3711
+http://www.news-medical.net/?id=4860
+http://www.news-medical.net/?id=5130
+http://www.news-medical.net/?id=5708
+http://www.news-medical.net/?id=7109
+http://www.news-medical.net/print_article.asp?id=2462
+http://www.news-record.com/ran/
+http://www.news-record.com/sports/stadium/stadium_name_120704.htm
+http://www.news-tasmania.com/march04.html
+http://www.news-tribune.net/articles/2005/06/28/lifestyles/the_evening_news/life07.txt
+http://www.news.com.au/story/0,10117,12097747-38201,00.html
+http://www.news.com/SpecialFeatures/0,5,7953,00.html
+http://www.news.harvard.edu/gazette/1999/03.18/shakespeare.html
+http://www.news.harvard.edu/gazette/1999/05.27/immigration.html
+http://www.news.harvard.edu/gazette/2000/04.06/nlr.html
+http://www.news.harvard.edu/gazette/2000/10.05/14-nader.html
+http://www.news.harvard.edu/gazette/2000/10.26/06-writing.html
+http://www.news.harvard.edu/gazette/2001/04.26/03-impression.html
+http://www.news.harvard.edu/gazette/2003/07.17/01-earthbirth.html
+http://www.news.harvard.edu/gazette/2003/09.18/24-bellfellows.html
+http://www.news.harvard.edu/gazette/2005/03.24/07-hockey.html
+http://www.news.ops.gov.ph/archives2003/may13.htm
+http://www.news.tamilcanadian.com/news/2000/06/20000608_1.shtml
+http://www.news.ucdavis.edu/budget/Atkinson_interview.html
+http://www.news.uiuc.edu/ii/01/0607/0607index.html
+http://www.news.uiuc.edu/ii/05/0602/
+http://www.news.uiuc.edu/scitips/03/0206protein.html
+http://www.news.utoronto.ca/bin2/thoughts/comment020311.asp
+http://www.news.utoronto.ca/bin5/031216a.asp
+http://www.news.utoronto.ca/bin5/040504b.asp
+http://www.news.utoronto.ca/bin6/040603-92.asp
+http://www.news.utoronto.ca/bin6/thoughts/040510-36.asp
+http://www.news.utoronto.ca/bin6/thoughts/040726-283.asp
+http://www.news.wisc.edu/9163.html
+http://www.news14charlotte.com/content/headlines/?ArID=95937&SecID=41
+http://www.news24.com/
+http://www.news24.com/News24/World/Iraq/0,,2-10-1460_1645397,00.html
+http://www.newsandentertainment.com/GamesRaero.html
+http://www.newsandstar.co.uk/healthylife/viewarticle.aspx?id=169243
+http://www.newsaskew.com/archives/news-archive-1-1998.shtml
+http://www.newsbatch.com/africa.htm
+http://www.newsbatch.com/sex.htm
+http://www.newscentre.bham.ac.uk/release.htm?releaseId=2007&page=1&year=2005&month=6&showUndelivered=N
+http://www.newschool.edu/gf/publicculture/backissues/pc38/bach.html
+http://www.newschools.org/viewpoints/april_24.html
+http://www.newscientist.com/
+http://www.newscientist.com/article.ns?id=dn4499
+http://www.newscientist.com/article.ns?id=dn4637
+http://www.newscientist.com/article.ns?id=dn5077
+http://www.newscientist.com/article.ns?id=dn6533
+http://www.newscientist.com/article.ns?id=dn6689
+http://www.newscientist.com/article.ns?id=dn6950
+http://www.newscientist.com/article.ns?id=dn6950&print=true
+http://www.newscientist.com/article.ns?id=dn7006
+http://www.newscientist.com/article.ns?id=dn7554&feedId=online-news_rss20
+http://www.newscientist.com/article.ns?id=mg18625043.900
+http://www.newscientist.com/channel/being-human/mg18625011.900
+http://www.newscientist.com/channel/fundamentals/quantum-world
+http://www.newscientist.com/channel/fundamentals/quantum-world/
+http://www.newscientist.com/channel/life/dinosaurs
+http://www.newscientist.com/channel/life/dinosaurs/
+http://www.newscientist.com/dailynews/news.jsp?id=ns9999897
+http://www.newscientistjobs.com.au/insider/article.action?article.id=insider66&focusId=usa
+http://www.newscientistjobs.com/insider/article.action?article.id=insider66&focusId=usa
+http://www.newsclipper.com/faq.html
+http://www.newsdata.com/enernet/conweb/conweb.html
+http://www.newsday.co.tt/morenews.php
+http://www.newsday.com/about/ny-helpafamily,0,5972807.htmlstory?coll=ny-rightrail-bottompromo
+http://www.newsday.com/entertainment/ny-2know4313285jun22,0,3087078.story?coll=ny-entertainment-promo
+http://www.newsday.com/go/homes/
+http://www.newsday.com/news/columnists/ny-opklu244316861jun24,0,4811792.column?coll=ny-news-columnists
+http://www.newsday.com/news/local/wire/connecticut/ny-bc-ct--fatalfire-family0614jun14,0,3673573.story?coll=ny-region-apconnecticut
+http://www.newsday.com/news/local/wire/connecticut/ny-bc-ct--fatalfire-family0615jun14,0,4066790.story?coll=ny-region-apconnecticut
+http://www.newsday.com/news/nationworld/wire/sns-ap-north-american-security,0,6098890.story?coll=sns-ap-nationworld-headlines
+http://www.newsday.com/news/nationworld/world/chi-0412310291dec31,0,965808.story
+http://www.newsday.com/news/opinion/letters/
+http://www.newsday.com/news/opinion/ny-opric064292830jun06,0,3912562.story?coll=ny-viewpoints-headlines
+http://www.newsday.com/news/printedition/health/ny-hsdoc4321704jun28,0,4132380.story?coll=ny-health-print
+http://www.newsday.com/news/printedition/opinion/ny-opklu244316861jun24,0,7513808.column?coll=ny-opinion-print
+http://www.newsdissector.com/blog/2002/05/14/oh-stop-it/
+http://www.newsdominica.com/forum/forum_posts.asp?TID=1366&get=last
+http://www.newsfilter.org/antimtv/bandfearfactory.html
+http://www.newsfromafrica.org/newsfromafrica/articles/art_580.html
+http://www.newsfromme.com/
+http://www.newsgd.com/business/laws/
+http://www.newsgd.com/government/govpress/200503070051.htm
+http://www.newsgd.com/pictures/construction/
+http://www.newshe.com/cravesinbed5.shtml
+http://www.newshounds.us/2004/07/27/bush_and_friends.php
+http://www.newshounds.us/2004/07/29/i_could_hardly_believe_this.php
+http://www.newshounds.us/2004/08/04/look_whos_biased.php
+http://www.newshounds.us/2004/08/12/red_ink_getting_redder.php
+http://www.newshounds.us/2004/08/18/political_correctness.php
+http://www.newshounds.us/2004/09/03/judy_woodruff_caught_on_camera.php
+http://www.newshounds.us/2004/09/14/deflection_achieved.php
+http://www.newshounds.us/2004/09/24/trying_to_be_happy_about_iraq_ii.php
+http://www.newshounds.us/2004/11/01/hannitys_last_chance_2004.php
+http://www.newshounds.us/2004/12/14/chris_wallace_points_loaded_question_at_jon_corzine.php
+http://www.newshounds.us/2004/12/17/democrats_progessives_get_that_chin_up_off_the_floor.php
+http://www.newshounds.us/2004/12/19/gambling_on_social_security.php
+http://www.newshounds.us/2005/01/08/fox_news_cant_bring_itself_to_say_media_matters_for_america.php
+http://www.newshounds.us/2005/01/12/gibson_to_fallujah_sorry_but_we_had_to_do_it.php
+http://www.newshounds.us/2005/01/17/you_cant_pay_for_publicity_like_this_hugh_hewitt_endorses_blogs_on_the_oreilly_factor.php
+http://www.newshounds.us/2005/03/10/bill_oreilly_is_giving_away_an_ipod_on_friday.php
+http://www.newshounds.us/2005/04/12/byron_york_and_john_gibson_on_the_vast_leftwing_conspiracy.php
+http://www.newshounds.us/2005/04/26/tom_delay_gets_a_ride_on_air_force_one.php
+http://www.newshounds.us/2005/06/17/wesley_clark_surprises_hannity.php
+http://www.newshounds.us/2005/06/22/suddenly_free_trade_isnt_such_a_good_idea.php
+http://www.newsisfree.com/sources/browse/95/
+http://www.newsmax.com/
+http://www.newsmax.com/archives/articles/2001/5/7/223843.shtml
+http://www.newsmax.com/archives/articles/2002/10/30/71538.shtml
+http://www.newsmax.com/archives/articles/2002/3/26/202236.shtml
+http://www.newsmax.com/archives/articles/2003/3/18/172506.shtml
+http://www.newsmax.com/archives/articles/2003/4/22/212645.shtml
+http://www.newsmax.com/archives/articles/2003/8/1/123445.shtml
+http://www.newsmax.com/archives/articles/2003/8/26/160951.shtml
+http://www.newsmax.com/archives/articles/2004/1/28/134249.shtml
+http://www.newsmax.com/archives/articles/2004/5/26/142153.shtml
+http://www.newsmax.com/archives/articles/2004/6/17/220520.shtml
+http://www.newsmax.com/archives/articles/2004/6/23/91028.shtml
+http://www.newsmax.com/archives/articles/2004/7/22/161446.shtml
+http://www.newsmax.com/archives/articles/2004/7/27/214356.shtml
+http://www.newsmax.com/archives/articles/2004/7/29/220354.shtml
+http://www.newsmax.com/archives/articles/2005/1/12/164023.shtml
+http://www.newsmax.com/archives/articles/2005/1/20/131205.shtml
+http://www.newsmax.com/archives/articles/2005/6/17/94914.shtml
+http://www.newsmax.com/archives/articles/2005/6/23/134620.shtml
+http://www.newsmax.com/articles/?a=2000/1/25/70247
+http://www.newsobserver.com/sports/golf/usopen/story/2498075p-8902355c.html
+http://www.newsouthassoc.com/CRMBrochure.html
+http://www.newspaperdetectives.co.uk/master1864H.htm
+http://www.newspaperdetectives.co.uk/master1865V.htm
+http://www.newspapersoc.org.uk/Documents/Publications/Parl&Euro/july04-dec04.htm
+http://www.newsplex.org/program/training.shtml
+http://www.newspress.com/millionhome/squeeze.htm
+http://www.newsreel.org/guides/skindeep.htm
+http://www.newsreview.com/issues/reno/2001-02-22/arts.asp
+http://www.newsreview.com/issues/reno/2005-04-21/cover.asp
+http://www.newsreview.com/issues/sacto/2001-10-11/cover.asp
+http://www.newsreview.com/issues/sacto/2002-05-09/bites.asp
+http://www.newsreview.com/issues/sacto/2004-04-01/news.asp
+http://www.newsreview.com/issues/sacto/2004-07-01/cover.asp
+http://www.newsreview.com/issues/sacto/2004-08-05/film.asp
+http://www.newsreview.com/issues/sacto/2005-04-28/fifteen.asp
+http://www.newsroom.msu.edu/site/indexer/2145/content.htm
+http://www.newsroom.ucr.edu/cgi-bin/display.cgi?id=433
+http://www.newssafety.com/aboutus/constitution.htm
+http://www.newssafety.com/hotspots/westbank.htm
+http://www.newsshopper.co.uk/announcements/
+http://www.newstalk106.ie/news.asp
+http://www.newstarget.com/
+http://www.newstarget.com/000675.html
+http://www.newstarget.com/000935.html
+http://www.newstarget.com/000978.html
+http://www.newstarget.com/001474.html
+http://www.newstarget.com/001514.html
+http://www.newstarget.com/001868.html
+http://www.newstarget.com/002040.html
+http://www.newstarget.com/002904.html
+http://www.newstarget.com/003478.html
+http://www.newstarget.com/003551.html
+http://www.newstarget.com/003837.html
+http://www.newstarget.com/004156.html
+http://www.newstarget.com/004625.html
+http://www.newstarget.com/hair_loss.html
+http://www.newstarget.com/z002040.html
+http://www.newstartmag.co.uk/ashford.html
+http://www.newstatesman.com/200501240050
+http://www.newstatesman.com/Ideas/200506270022
+http://www.newstatesman.com/People/200501170023
+http://www.newstatesman.com/People/Society
+http://www.newstatesman.com/generalelection/200505090001
+http://www.newstatesman.com/site.php3?newTemplate=NSArticle_World&newDisplayURN=200409270001
+http://www.newstips.org/interior.php?section=Successful+Schools+Sub&main_id=108
+http://www.newswales.co.uk/?section=Agriculture
+http://www.newsweekshowcase.com/international-schools/index.shtml
+http://www.newswire.ca/en/releases/archive/December2003/11/c2069.html
+http://www.newswire.ca/en/releases/archive/June2005/22/c5094.html
+http://www.newswire.ca/en/releases/archive/May2005/27/c4759.html
+http://www.newswire.ca/en/releases/archive/September2003/12/c0518.html
+http://www.newswise.com/articles/view/512551/
+http://www.newswise.com/articles/view/512566/
+http://www.newswise.com/articles/view/?id=empthft.osu
+http://www.newswithviews.com/Bill/sizemore10.htm
+http://www.newswithviews.com/Cuddy/dennis29.htm
+http://www.newswithviews.com/Engstrom/dave.htm
+http://www.newswithviews.com/religion/religion9.htm
+http://www.newswithviews.com/your_govt/your_government59.htm
+http://www.newtechfoundation.org/Board%20of%20Directors.htm
+http://www.newtechusa.com/ppi/pressroom.asp
+http://www.newtexts.com/newtexts/book.cfm?book_id=2581
+http://www.newtimes.org/issue/0112/journey.htm
+http://www.newtimes.org/issue/9706/97-06-mmm.html
+http://www.newtimes.org/issue/9708/97-08-beauty.html
+http://www.newtimes.ru/eng/detail.asp?art_id=200
+http://www.newtimes.ru/eng/detail.asp?art_id=783
+http://www.newtimesbpb.com/issues/2003-03-27/news/feature_print.html
+http://www.newton.cam.ac.uk/reports/9899/nsp.html
+http://www.newton.cam.ac.uk/reports/9900/sce.html
+http://www.newton.co.uk/ifa/micro/capital_protection/legal/legalpopup.html
+http://www.newton.co.uk/institutional/legal/legalpopup.html
+http://www.newton.co.uk/pim/legal/legalpopup.html
+http://www.newton.dep.anl.gov/agree.htm
+http://www.newton.dep.anl.gov/askasci/gen01/gen01264.htm
+http://www.newtopiamagazine.net/content/issue17/exclusive/creativeecon9.php
+http://www.newtopiamagazine.net/content/issue19/features/corporate.php
+http://www.newtowntheatre.com.au/Short_&_Sweet/Short_&_Sweet.htm
+http://www.newurbannews.com/JulAug01.html
+http://www.newvillage.net/Journal/Issue3/3silka.html
+http://www.newvision.co.ug/D/8/20/441414
+http://www.newvisions.org/cal/resources/middle-grades-reform/index.shtml
+http://www.newvisions.org/resources/guide3_11.shtml
+http://www.newwork.com/Pages/Networking/2004/Older%20workers.html
+http://www.newwork.com/Pages/WITNE/2002/Trust.html
+http://www.newwork.com/Pages/WITNE/2004/Feb%20WITNE.html
+http://www.newworldcelts.org/australia.html
+http://www.newyinzer.com/issue02/r-hoffman.html
+http://www.newyorkcitytransit.com/
+http://www.newyorkcityvoices.org/2004winter/2004winter45.html
+http://www.newyorkdivorcelaw.com/preparing_for_divorce_court.html
+http://www.newyorker.com/critics/books/?031124crbo_books
+http://www.newyorker.com/fact/content/?021007fa_fact
+http://www.newyorker.com/fact/content/?030317fa_fact
+http://www.newyorker.com/fact/content/?050124fa_fact3
+http://www.newyorker.com/fact/content/?050214fa_fact1
+http://www.newyorker.com/printable/?fact/030317fa_fact
+http://www.newyorker.com/printable/?fact/050124fa_fact3
+http://www.newyorker.com/shouts/content/?040726sh_shouts
+http://www.newyorkfed.org/CfCBSWEB/disgroup2004.html
+http://www.newyorkfed.org/newsevents/speeches/1998/mcd981001.html
+http://www.newyorkfirst.com/gifts/6053.html
+http://www.newyorkgames.org/news/archives/002487.html
+http://www.newyorkled.com/chinatown.htm
+http://www.newyorkled.com/dave_frieder.htm
+http://www.newyorklife.com/cda/0,3254,12820,00.html
+http://www.newyorklife.com/cda/0,3254,14100,00.html
+http://www.newyorkmetro.com/nymetro/news/media/columns/medialife/6099/
+http://www.newyorkmetro.com/pages/details/9889.htm
+http://www.newyorkmetro.com/shopping/articles/sb/
+http://www.newyorkmetro.com/urban/guides/family/schools/features/feature_publicorprivate.htm
+http://www.newyorksocialdiary.com/list.php
+http://www.newzealandnz.co.nz/
+http://www.newzimbabwe.com/pages/tuesday7.11469.html
+http://www.nexgear.com/index.php?showtopic=5021&st=20
+http://www.nexgear.com/index.php?showtopic=5021&st=40
+http://www.nexgear.com/index.php?showtopic=9720&st=80
+http://www.nexgear.com/lofiversion/index.php/t5021-250.html
+http://www.nexgear.com/lofiversion/index.php/t7838.html
+http://www.nexgear.com/lofiversion/index.php/t9391.html
+http://www.nexor.com/profile.asp
+http://www.nexor.com/profile.htm
+http://www.nextag.com/BestBuyPcs~147058z55215364z2700468zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z57273551z300265zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z57700159z300265zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z57719904z300265zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z57758099zzreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z58720415z900503zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z60606915z300265zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z60660629z500014zreviewsz1zmainz17-htm
+http://www.nextag.com/BestBuyPcs~147058z65208372z300265zreviewsz1zmainz17-htm
+http://www.nextag.com/Food___Wine~2700035z8z90z200z0zB12cgzmainz5-htm
+http://www.nextag.com/Kodak_Premium_Picture_Paper~55358596z9znz900808z4z1z900808zzmainz1-htm
+http://www.nextag.com/Watches~2702409z196705z0zB6cgzmainz5-htm
+http://www.nextdaypets.com/directory/dogs/sale/
+http://www.nextdaypets.com/directory/dogs/sale/1100088/
+http://www.nexternal.com/shared/HelpDesk/default.asp?CS=whitewhale&RowID=1513
+http://www.nextstepmagazine.com/NSMPages/articledetails.aspx?articleid=1794
+http://www.nextwavefilms.com/sf/
+http://www.nexus.edu.au/teachstud/gat/jewell1.htm
+http://www.nexusmagazine.com/articles/CellularMemories.html
+http://www.nexusmagazine.com/articles/Rhodes&SecretSocieties.html
+http://www.nexusmagazine.com/articles/darwinism.1.html
+http://www.nexusmagazine.com/articles/petfood1.html
+http://www.nezperce.org/~srcurrents/June%202004.htm
+http://www.nezperce.org/~srcurrents/November%202004.htm
+http://www.nfadirect.com/timeline.php
+http://www.nfais.org/publications/mc_lecture_1996.htm
+http://www.nfais.org/publications/mc_lecture_2002.htm
+http://www.nfap.net/researchactivities/articles/weeklyStandard_032904.aspx
+http://www.nfb.ca/E/5/ny_info.html
+http://www.nfb.ca/whatremainsofus/
+http://www.nfb.org/bm/bm03/bm0306/bm030612.htm
+http://www.nfb.org/bm/bm04/bm0403/bm040311.htm
+http://www.nfb.org/bm/bm04/bm0411/bm041112.htm
+http://www.nfb.org/bm/bm04/bm0412/bm041205.htm
+http://www.nfb.org/bm/bm97/bm970301.htm
+http://www.nfb.org/bm/bm98/bm980608.htm
+http://www.nfb.org/bm/bm99/bm990602.htm
+http://www.nfb.org/books/books1/ifblind.htm
+http://www.nfb.org/convent/firsttime.htm
+http://www.nfb.org/fr/fr14/fr04se18.htm
+http://www.nfb.org/fr/fr15/fr04fa17.htm
+http://www.nfb.org/fr/fr8/frsf0217.htm
+http://www.nfb.org/nfbrti/hava_usabilitycheck.htm
+http://www.nfbcblood.org/
+http://www.nfbmidtn.org/assets/who.htm
+http://www.nfer.ac.uk/htmldocs/html/Outcome_AEP.html
+http://www.nfer.ac.uk/research-areas/pims-data/summaries/tid-teachers-international-professional-development-programme.cfm
+http://www.nfer.ac.uk/research-areas/pims-data/summaries/tid-teachers-international-professional-development-programme.cfm?print=1
+http://www.nfib.com/object/2869137.html
+http://www.nfie.org/publications/engaging.htm
+http://www.nfl.com/features/tmq/112304
+http://www.nfl.com/gamecenter/recap/NFL_20041205_GB@PHI
+http://www.nfl.com/news/archive/08/2003
+http://www.nfl.com/news/story/7593385
+http://www.nfl.com/news/story/8539855
+http://www.nfl.com/news/story/8546033
+http://www.nfl.com/teams/news/archive/HOU
+http://www.nfl.com/teams/news/archive/NO
+http://www.nfl.com/teams/story/DAL/8539855
+http://www.nfl.com/teams/story/DEN/7833650
+http://www.nfld.com/~dalton/messages.html
+http://www.nfleurope.com/teams/story/RHE/8275192
+http://www.nfleurope.com/teams/story/RHE/8303898
+http://www.nflhs.com/TipsDrills/Features/CompleteQB1_11212002_sim.asp
+http://www.nflplayers.com/players_network/players_network.aspx?ID=30218
+http://www.nflplayers.com/players_network/players_network.aspx?ID=34527
+http://www.nflplayers.com/players_network/players_network.aspx?strSection=bio&ID=30218
+http://www.nflplayers.com/players_network/players_network.aspx?strSection=bio&ID=34527
+http://www.nflpuddingstrike.com/debates/Song_Mason.htm
+http://www.nflyouthfootball.com/exec/nfl_ppk/PPK_-_Curriculum_Class_III_Kicking.cfm?publicationID=23
+http://www.nfpa.org/displaycontent.asp?categoryID=768&itemID=19839
+http://www.nfpa.org/riskwatch/parent_fireburn.html
+http://www.nfraweb.org/promotions/frozen.html
+http://www.nfsa.org.uk/conservation/conservation_plan.htm
+http://www.nfsnet.org/faq-nfs.html
+http://www.nfti.com/sosline.html
+http://www.nftsfilm-tv.ac.uk/scusite/Courses/Production/Producing_Courses_1.htm
+http://www.nfu.ca/effofwto.htm
+http://www.nfu.ca/wtopearc.htm
+http://www.nga.gov/exhibitions/upcoming.shtm
+http://www.nga.org/common/issueBriefDetailPrint/1,1434,4441,00.html
+http://www.ngb.army.mil/news/story.asp?id=1441
+http://www.ngb.army.mil/news/story.asp?id=370
+http://www.ngb.army.mil/onguard/31/10/article.asp?aid=1313
+http://www.ngb.army.mil/onguard/32/03/article.asp?aid=1273
+http://www.ngc.org/summary/summary.aspx?ss=15&doc_id=5430&nbr=3724
+http://www.ngdc.noaa.gov/paleo/ei/ei_reconsa.html
+http://www.ngiip.gov.np/atlas.php
+http://www.ngnews.com/news/2004/10/1019_041019_biobus.html
+http://www.ngochr.org/view/index.php?basic_entity=DOCUMENT&list_ids=552
+http://www.ngoforum.org.kh/Land/Docs/study_farming_files/discu_recom.htm
+http://www.ngpc.state.ne.us/nebland/articles/hunting/round.asp
+http://www.ngrain.com/news/news_2003_nov_3_knowledge_module_release.html
+http://www.ngs.noaa.gov/PUBS_LIB/gislis96.html
+http://www.ngtlibrary.com/ngtsr/newsite/salesteam.asp
+http://www.ngwa.org/e/expo05/0512136010.shtml
+http://www.ngwa.org/ngwef/darcy.html
+http://www.ngy1.1st.ne.jp/~ieg/icrm/2001/01/01n970.htm
+http://www.nhamagazine.com/feature4_0504.html
+http://www.nhbs.com/services/liborgpack.html
+http://www.nhc.rtp.nc.us/tserve/eighteen/ekeyinfo/grawaken.htm
+http://www.nhc.rtp.nc.us:8080/ideasv41/schram4.htm
+http://www.nhdds.org/nhddsit/nhqop/domain4-01.html
+http://www.nhforums.com/forums/showthread.php?goto=lastpost&t=2317
+http://www.nhforums.com/forums/showthread.php?t=1758
+http://www.nhforums.com/forums/showthread.php?t=2317
+http://www.nhg.com/news/May20012.htm
+http://www.nhhealthplan.org/
+http://www.nhi.org/online/issues/113/dejong.html
+http://www.nhi.org/online/issues/125/fostercare.html
+http://www.nhi.org/online/issues/135/organize.html
+http://www.nhi.org/online/issues/140/court.html
+http://www.nhinet.org/failed.htm
+http://www.nhl.com/futures/features/prospects_dal050305.html
+http://www.nhlbi.nih.gov/about/nhaap/nhaap_hi1002.htm
+http://www.nhlbi.nih.gov/hbp/prevent/h_eating/h_eating.htm
+http://www.nhlbi.nih.gov/health/dci/Diseases/pah/pah_what.html
+http://www.nhlbi.nih.gov/health/prof/lung/nett/lvrsweb.htm
+http://www.nhlbi.nih.gov/meetings/nhlbac/feb05min.htm
+http://www.nhlbi.nih.gov/new/press/03-02-24.htm
+http://www.nhlbi.nih.gov/new/press/03-04-22.htm
+http://www.nhlbi.nih.gov/new/press/oberel4f.htm
+http://www.nhlbirthplace.ca/NHA/NHA&NHL.htm
+http://www.nhlcbanews.com/transcripts/bettman_121404.html
+http://www.nhm.ac.uk/hosted_sites/acarology/saas/list.html
+http://www.nhm.ac.uk/hosted_sites/ina/ina8/abstr_k04.html
+http://www.nhm.ac.uk/zoology/stranding/Recent_Events/RE_2001_09_10/RE_2001_Sep_Oct.html
+http://www.nhoem.state.nh.us/mitigation/section_iii.htm
+http://www.nhptv.org/kn/nh/nhlp5a.htm
+http://www.nhratterriers.com/breedinfo.htm
+http://www.nhrc.navy.mil/programs/donsir/publications.html
+http://www.nhs.uk/youngpeople/
+http://www.nhs24.com/default.asp?page=s4_4&newsid=1582&back=s4_3
+http://www.nhscareers.nhs.uk/nhs-knowledge_base/data/5630.html
+http://www.nhscareers.nhs.uk/nhs/
+http://www.nhsconfed.org/press/default.asp
+http://www.nhsestates.gov.uk/patient_environment/content/introduction.html
+http://www.nhshistory.co.uk/clinicalprogress.htm
+http://www.nhsia.nhs.uk/def/pages/conf_archive/wmcim_biog01.asp
+http://www.nhspe.org/pages/meeting-notes/nov98.html
+http://www.nhtrails.org/Trailspages/SnomoPages/snomoTrlCndtn.html
+http://www.nhtsa.dot.gov/cars/rules/adaptive/AirBagsSwitches/NHTSA-2004-19092_On-Off_Switches.htm
+http://www.nhtsa.dot.gov/people/injury/olddrive/OlderDriversBook/pages/Ch9-Section4.html
+http://www.nhtsa.dot.gov/people/injury/research/wireless/
+http://www.nhtsa.dot.gov/people/injury/research/wireless/appenf.htm
+http://www.nhtsa.dot.gov/people/injury/traffic_tech/1995/TT094.htm
+http://www.nhvweb.net/nhhs/docs/NHHS%20Student%20Handbook%202004-2005.pps
+http://www.nhweddingmagazine.com/invitationtrends.html
+http://www.nia.com.au/category.asp?categoryID=715
+http://www.niaaa.nih.gov/about/factsheet-text.htm
+http://www.niaaa.nih.gov/about/factsheet.htm
+http://www.niaaa.nih.gov/publications/PSA/underagepg2.htm
+http://www.niace.org.uk/Organisation/advocacy/14-19GreenPaper/Default.htm
+http://www.niace.org.uk/Publications/Periodicals/AdultsLearning/Default.htm
+http://www.niacouncil.org/SBA/sbafaq.asp
+http://www.niagarahealth.on.ca/!sites/gngs/patient_info.htm
+http://www.niagaraparks.com/nature/navyisland.php
+http://www.niaid.nih.gov/director/statements/11172004_testimony.htm
+http://www.niaid.nih.gov/factsheets/asthma.htm
+http://www.niaid.nih.gov/healthdisparities/HDSYMPOSIUM/proceedings2/adolescents.htm
+http://www.niaid.nih.gov/ncn/glossary/default4.htm
+http://www.niaid.nih.gov/ncn/grants/charts/checklists.htm
+http://www.niallkennedy.com/blog/archives/2005/03/whose_voice_is.html
+http://www.niams.nih.gov/hi/topics/acne/acne.htm
+http://www.niams.nih.gov/hi/topics/lupus/lupusguide/chppis11.htm
+http://www.niams.nih.gov/ne/highlights/spotlight/1999/lowdose.htm
+http://www.niapublications.org/engagepages/longterm.asp
+http://www.niapublications.org/pubs/hearts-arteries/p2.htm
+http://www.niassembly.gov.uk/agriculture/moe/moe010504.htm
+http://www.niassembly.gov.uk/agriculture/moe/moe021011i.htm
+http://www.niassembly.gov.uk/enterprise/moe/moe020619.htm
+http://www.niassembly.gov.uk/environment/moe/moe020516.htm
+http://www.niassembly.gov.uk/environment/moe/moe020627iii.htm
+http://www.niassembly.gov.uk/health/moe/moe020522.htm
+http://www.niassembly.gov.uk/highereduc/reports/report1-00r.htm
+http://www.niassembly.gov.uk/qanda/writtenans/001208.htm
+http://www.niassembly.gov.uk/qanda/writtenans/020607.htm
+http://www.niassembly.gov.uk/record/reports/001121.htm
+http://www.niassembly.gov.uk/record/reports/011105.htm
+http://www.nibiker.co.uk/niguide/hotroads.html
+http://www.nibs.com/nibvalues.html
+http://www.nicaliving.com/node/view/57
+http://www.nicc.org.uk/nicc-public/Public/practices/ncop040.htm
+http://www.nice.org.uk/page.aspx?ln=cy&o=14487
+http://www.nice.org.uk/page.aspx?o=45736
+http://www.nicecupofteaandasitdown.com/
+http://www.nicecupofteaandasitdown.com/biscuits/views.php3?icons%5B%5D=6
+http://www.nicecupofteaandasitdown.com/biscuits/views.php3?icons%5B%5D=6&icons%5B%5D=20
+http://www.nicedoggie.net/archives/2005/03/standing.php
+http://www.nicekids.org/newsfall2001.html
+http://www.niceperson.org/archive/2004/02/index.php
+http://www.nichcy.org/Trainpkg/traintxt/7script.htm
+http://www.nichcy.org/enews/foundations/stafftraining.asp
+http://www.nichd.nih.gov/about/cpr/dbs/sp/hirshman.htm
+http://www.niche.com.au/mw/events.html
+http://www.nicholas.duke.edu/duke_yale_fair/studentreg.html
+http://www.nicholsdiag.com/products/anemia-descrip.htm
+http://www.nick-james.com/public/department35.cfm
+http://www.nick.co.uk/global/legal/comprules.aspx
+http://www.nick.com/all_nick/everything_nick/public_letsjustplay2.jhtml
+http://www.nickbarlow.com/blog/
+http://www.nickbarlow.com/blog/index.php?cat=42
+http://www.nickbarlow.com/blog/index.php?cat=9
+http://www.nickcaveandthebadseeds.com/
+http://www.nickdenton.org/docs/mtnov01.htm
+http://www.nickelformen.com/Main/TheSpa.asp
+http://www.nicklaus.com/nicklaus_news/news042804.php
+http://www.nicks.com.au/gift_super.html
+http://www.nickschager.com/nsfp/
+http://www.nickselby.com/articles/travel/autobahn.htm
+http://www.nicox.com/pages/governance.html
+http://www.nictd.com/info/delays.htm
+http://www.nida.nih.gov/DIR/treatment.html
+http://www.nida.nih.gov/DrugPages/DrugsofAbuse.html
+http://www.nida.nih.gov/MeetSum/International/StreetChildren.html
+http://www.nida.nih.gov/StrategicPlan/Intro.html
+http://www.nida.nih.gov/TXManuals/CBT/CBT18.html
+http://www.nida.nih.gov/TXManuals/CBT/CBT4.html
+http://www.nida.nih.gov/TXManuals/CBT/CBT8.html
+http://www.nida.nih.gov/TXManuals/CRA/CRA9.html
+http://www.nida.nih.gov/TXManuals/DCCA/DCCA5.html
+http://www.nidcd.nih.gov/funding/programs/cp/summary.asp
+http://www.nidcd.nih.gov/health/balance/balance_disorders.asp
+http://www.nidcd.nih.gov/news/releases/05/1_19_05.asp
+http://www.niddk.nih.gov/fund/grants_process/grantwriting.htm
+http://www.nidek.com/salenavx.html
+http://www.niehs.nih.gov/envgenom/conclear.htm
+http://www.niehs.nih.gov/external/fy2004/home.htm
+http://www.nielsenhayden.com/makinglight/
+http://www.nieman.harvard.edu/reports/99-4_00-1NR/Kovach_Roots.html
+http://www.niesr.ac.uk/pubs/discuss.htm
+http://www.nieubethesda.co.za/Starling%20Dec%202000.htm
+http://www.nifc.gov/news/firecode/faqs.html
+http://www.nifc.gov/nr_airtanker-contracts.html
+http://www.nifc.gov/preved/comm_guide/wildfire/fire_18.html
+http://www.nifc.gov/refmat.html
+http://www.nifc.gov/wfstar/refmat.html
+http://www.nifl.gov/nifl-family/2001/0351.html
+http://www.nifl.gov/nifl/facts/family.html
+http://www.nifl.gov/partnershipforreading/glossary/glossary.html
+http://www.nifl.gov/partnershipforreading/publications/html/adult_ed/adult_ed_5.html
+http://www.niftc.co.uk/newspage.asp?id=100&storyID=349
+http://www.niftc.co.uk/page.asp?id=57
+http://www.nifty.org/nifty/journal-entries/0019.222
+http://www.nifty.org/nifty/journal-entries/0918.141
+http://www.nigc.gov/nigc/about/faq/finalfaq.jsp
+http://www.nigeria-law.org/LabourAct.htm
+http://www.nigeria.gov.ng/DEMOCRACY/chapter2/education.htm
+http://www.nigeriavillagesquare1.com/Articles/Guest/2005/01/silent-majority-is-part-of-problem-as.html
+http://www.nigeriavillagesquare1.com/nigeria%20bubblin.html
+http://www.night-sky.org/~spotty/writing/gelatinomancy.htm
+http://www.nightcats.com/sales/proposal.html
+http://www.nightclubbinuk.com/
+http://www.nightingale-clinic.co.uk/find_us.shtml
+http://www.nightly.net/ubb/ultimatebb.php/topic/20/5927.html
+http://www.nightly.net/ubb/ultimatebb.php/topic/39/1141.html
+http://www.nightly.net/ubb/ultimatebb.php/topic/56/8171.html
+http://www.nightly.net/ubb/ultimatebb.php/topic/70/2717.html
+http://www.nightly.net/ubb/ultimatebb.php/topic/73/161.html
+http://www.nightlybusiness.org/transcript/2001/trnscrpt031901.htm
+http://www.nightlybusiness.org/transcript/2001/trnscrpt080801.htm
+http://www.nightlybusiness.org/transcript/2002/trnscrpt012802.htm
+http://www.nightlybusiness.org/transcript/2003/transcript062403.html
+http://www.nightlybusiness.org/transcript/2004/transcript012804.html
+http://www.nightlybusiness.org/transcript/2004/transcript102604.html
+http://www.nightlybusiness.org/transcript/2005/transcript040505.html
+http://www.nightmedia.net/shop/shopsetup.html
+http://www.nightsea.com/heaveho.htm
+http://www.nightshadebooks.com/discus/messages/480/2423.html?1092176838
+http://www.nightvisionweb.com/terms_and_conditions.htm
+http://www.nigms.nih.gov/news/findings/mar02/harris.html
+http://www.nih.go.jp/~jun/research/phylip/consense.html
+http://www.nih.gov/news/NIH-Record/02_17_2004/story06.htm
+http://www.nih.gov/news/NIH-Record/03_30_2004/story02.htm
+http://www.nih.gov/news/NIH-Record/05_13_2003/story06.htm
+http://www.nih.gov/news/NIH-Record/09_02_2003/story07.htm
+http://www.nih.gov/news/NIH-Record/09_16_2003/story04.htm
+http://www.nih.gov/news/WordonHealth/apr2004/risk.htm
+http://www.nih.gov/news/WordonHealth/aug2004/story03.htm
+http://www.nih.gov/news/WordonHealth/dec2003/osteo.htm
+http://www.nih.gov/news/pr/feb2004/nhlbi-02.htm
+http://www.nih.gov/news/pr/feb2005/nichd-22.htm
+http://www.nih.gov/news/pr/may2004/ninr-12.htm
+http://www.nih.gov/nihrecord/09_14_2004/story01.htm
+http://www.nih.gov/nihrecord/09_28_2004/story01.htm
+http://www.nih.gov/nihrecord/11_09_2004/story02.htm
+http://www.nih.gov/science/models/nmm/executive_summary.html
+http://www.nihe.gov.uk/sp/spquality&monitoring/
+http://www.niherst.gov.tt/scipop/our-world-of-science/science-club-christmas-2003.htm
+http://www.nihrc.org/viewarcnews.asp?ID=97
+http://www.nikart.ca/writing/english.html
+http://www.nikmakris.com/index.asp
+http://www.nikon.co.jp/main/eng/feelnikon/kumon_dsc/kd01_e.htm
+http://www.niksula.cs.hut.fi/~bethy/contents/stephenie/
+http://www.nils.org.au/ais/web/resources/toolbar/toolbar_tutorial.html
+http://www.nimbit.com/webtools/faq.php
+http://www.nimbustier.net/contree/beloteurs-en.html
+http://www.nimbustier.net/contree/savoir-en.html
+http://www.nimh.nih.gov/publicat/harmaway.cfm
+http://www.nimlok.co.uk/uk/uktraining/facts.asp
+http://www.nimr.mrc.ac.uk/millhillessays/2001/ageing.htm
+http://www.nimr.mrc.ac.uk/millhillessays/2002/infertility.htm
+http://www.nimroth.de/APJ/TheBonding.txt
+http://www.ninapaley.com/
+http://www.ninaspencer.com/index.cfm?Fuseaction=ArticleDisplay&ArticleID=174
+http://www.ninaspencer.com/index.cfm?Fuseaction=ArticleDisplay&ArticleID=174&SectionID=60
+http://www.ninch.org/copyright/2001/denverreport.html
+http://www.ninch.org/copyright/2003/nyc.report.html
+http://www.ninds.nih.gov/disorders/huntington/detail_huntington.htm
+http://www.ninds.nih.gov/find_people/groups/brain_tumor_prg/NeuroProgenitor.htm
+http://www.ninds.nih.gov/news_and_events/congressional_testimony/99pdtestimony.htm
+http://www.ninehundred.com/~equalccw/
+http://www.ninehundred.net/control/mc-ch5.html
+http://www.ninjaburger.com/employment/apps/app.shtml
+http://www.nintendo.ca/2002/english/privacy_corp.shtml
+http://www.nintendo.com/consumer/manuals/precautions_handheld_english.jsp
+http://www.nintendoinsider.com/site/EpZZZyAkEEjMjLKnvc.php
+http://www.nintendoland.com/virtual/games.htm
+http://www.nintendorks.com/reviews.php?ContentID=1175
+http://www.nion.us/NSOC/Suskind.htm
+http://www.nirdagan.com/research/199803/
+http://www.nirvanaclub.com/get.php?section=lyrics&file=nevermind.htm
+http://www.nirvanaclub.com/news.html
+http://www.nisa.org/
+http://www.nisat.org/publications/the%20west%20africa%20book/programme_for_coannex_brit.htm
+http://www.nisat.org/publications/us_arms_central_america.htm
+http://www.niscair.res.in/ScienceCommunication/ResearchJournals/rejour/ijpap/ijpapaug2k2.htm
+http://www.niser.org.my/news/2001_01_14_01.html
+http://www.nissan-global.com/EN/STORY/0,1299,SI9-CH179-LO3-TI911-CI685-IFY-MC109,00.html
+http://www.nist.gov/public_affairs/taglance/tag99sprsum/99sp_sum.htm
+http://www.nist.gov/public_affairs/techbeat/tb2004_0702.htm
+http://www.nist.gov/testimony/2000/rkstds.htm
+http://www.nisus.com/blogs/
+http://www.nisus.se/archive/voksenasene.html
+http://www.nitrateonline.com/1999/rastro.html
+http://www.nitrateonline.com/2004/fcityofgod.html
+http://www.nivi.com/blog/article/greasemonkey-and-business-models
+http://www.nixers.com/ApplyForJob.aspx?Id=114111
+http://www.niyam.com/gnulinux/lfy/fy/FY-monthly-col.php?jan2k4
+http://www.nizkor.org/features/fallacies/appeal-to-emotion.html
+http://www.nizkor.org/hweb/imt/nca/nca-01/nca-01-05-opening-address-usa.html
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-02/tgmwc-02-12-01.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-04/tgmwc-04-36-03.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-05/tgmwc-05-44-04.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-07/tgmwc-07-59-09.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-07/tgmwc-07-62-01.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-09/tgmwc-09-81-06.shtml
+http://www.nizkor.org/hweb/imt/tgmwc/tgmwc-18/tgmwc-18-170-07.shtml
+http://www.nizkor.org/hweb/places/poland/wlodawa/wlodawa-015.html
+http://www.nj.gov/dep/newsrel/releases/03_0131.htm
+http://www.njarboristsisa.com/
+http://www.njbiomaterials.org/facil/mdcl.htm
+http://www.njbmwcca.org/
+http://www.njchamber.com/Events/
+http://www.nje3.org/
+http://www.njit.edu/old/pwt/resources/journal.html
+http://www.njit.edu/v2/Registrar/Residency.htm
+http://www.njjewishnews.com/njjn.com/012705/njterror.html
+http://www.njjobbank.com/JOBS/Sales/1009-2.htm
+http://www.njn.net/workforce/teaching.html
+http://www.njneuro.org/bios/walters.asp
+http://www.njpanda.org/PT4.html
+http://www.njpcgreens.org/garysnyder.html
+http://www.njproperty.com/sold.htm
+http://www.njshares.org/aboutNJShares/press/index.asp
+http://www.nkconcepts.com/animal_health_week.htm
+http://www.nkconcepts.com/equipment.htm
+http://www.nkfreedom.org/
+http://www.nkfreedom.org/122204protest.html
+http://www.nkfreedom.org/chineseembassy042805.html
+http://www.nksd.net/admin/personnel/jobs/sped_ed.htm
+http://www.nku.edu/~krugd/m224/ProofsIndex.html
+http://www.nku.edu/~yannarella/news9704.html
+http://www.nla.gov.au/collect/prompt/annie.html
+http://www.nla.gov.au/collect/prompt/kirsova.html
+http://www.nla.gov.au/nla/staffpaper/hberthon2.html
+http://www.nla.gov.au/nla/staffpaper/lyall1.html
+http://www.nlada.org/Defender
+http://www.nlanr.net/NA/
+http://www.nlbra.com/info/2003-2004_changes.htm
+http://www.nldline.com/Q&A.htm
+http://www.nldline.com/dale_brown1.htm
+http://www.nlembassy.org.yu/contents/funds/c_matra_kap.htm
+http://www.nlembassy.org.yu/contents/trade/investment/foreign_trade.htm
+http://www.nlembassy.pl/funds/c_funds2.htm
+http://www.nlihc.org/news/041005.html
+http://www.nlihc.org/news/051805.html
+http://www.nlm.nih.gov/changingthefaceofmedicine/resources/videos.html
+http://www.nlm.nih.gov/hmd/nichsr/ginzberg.html
+http://www.nlm.nih.gov/medlineplus/ency/article/000160.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/000195.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/000699.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/001946.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003058.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003090.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003108.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003163.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003210.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003259.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003442.htm
+http://www.nlm.nih.gov/medlineplus/ency/article/003579.htm
+http://www.nlm.nih.gov/medlineplus/exerciseandphysicalfitness.html
+http://www.nln.ac.uk/materials/tutors/round_two_materials.asp
+http://www.nlo.co.uk/music+mind.htm
+http://www.nlpc.org/olap/UCU2/04_17.htm
+http://www.nlrb.gov/nlrb/legal/manuals/rules/act.asp
+http://www.nlrb.gov/nlrb/press/releases/r2259.asp
+http://www.nls.org/regs/358-3.3.htm
+http://www.nls.uk/burns/mainsite/burns/cowie.htm
+http://www.nls.uk/collections/business/
+http://www.nls.uk/digitallibrary/map/early/blaeu/903.html
+http://www.nlsbibliography.org/qauthor.php3?xxx=JOHNSON,+RICHARD+W.
+http://www.nm-pharmacy.com/body_sunday.htm
+http://www.nma-fallout.com/
+http://www.nmas.ac.uk/apply.html
+http://www.nmass.org/nmass/wcomp/workerscomp.html
+http://www.nmauk.co.uk/nma/do/live/addOfTheWeek?showBrowse=false
+http://www.nmbfacts.com/NMB%20GC%20Vacancy%20Announcement.htm
+http://www.nmc4jobs.com/apply_for_position.php?VacancyId=9436
+http://www.nmca.org/PAPER16.htm
+http://www.nmculturenet.org/heritage/kicking_bear/narrativ.htm
+http://www.nmdance.com/etiquette/hygiene.htm
+http://www.nmenv.state.nm.us/swqb/hg_white.html
+http://www.nmgw.ac.uk/about_nmgw/news/news/article.shtml?id=106
+http://www.nmgw.ac.uk/about_nmgw/strategy_policy/industry/index.en.shtml
+http://www.nmh.org/nmh/adam/adamencyclopedia/HIEArticles/003089.htm
+http://www.nmha.org/camh/college/fact_sheets.cfm
+http://www.nmhu.edu/inauguration/inthenews.php
+http://www.nmjc.org/ProgAct.html
+http://www.nmm.ac.uk/server/show/conWebDoc.3067/viewPage/3
+http://www.nmm.ac.uk/server/show/conWebDoc.413
+http://www.nmnh.si.edu/botany/projects/cpd/sa/sa27.htm
+http://www.nmpg.com/default.aspx?page=article&article=Articles/Dermatology/acneandros.1.xml
+http://www.nmpplant.com/plant_en.html
+http://www.nms.on.ca/Secondary/vegetarian_eating.htm
+http://www.nmsa.org/development/onsite.htm
+http://www.nmsa.org/moya/moya_2004/presskits/tech.htm
+http://www.nmsa.org/research/res_articles_march2000_build.htm
+http://www.nmsa.org/research/ressum19.htm
+http://www.nmsa.org/services/msj/msj_sept2002.htm
+http://www.nmsdcus.org/news/NMSDC%20names.html
+http://www.nmsr.org/behe.htm
+http://www.nmsu.edu/Academic_Progs/Undergraduate_Catalog_97_98/ch8/pep.html
+http://www.nmsu.edu/~housing/FAQS.htm
+http://www.nncc.org/Guidance/sac16_estab.rules.html
+http://www.nncc.org/Parent/childview.html
+http://www.nndb.com/people/001/000047857/
+http://www.nnrhospital.com/gettingtreatment.shtml
+http://www.no-euro.com/mediacentre/archive.asp?ID=209
+http://www.noahsarksearch.com/ronwyatt.htm
+http://www.nob.on.ca/ubrt/2004/directory.asp?cat=120
+http://www.nobel.no/eng_lect_2003a.html
+http://www.nobelprizes.com/nobel/peace/MLK-jail.html
+http://www.noble.org/Ag/Forage/Crabgrass4Forage/development2.html
+http://www.nobleharbor.com/tea/teabook/4.htm
+http://www.noblood.com/
+http://www.nobody-knows-anything.com/mtarchives/2003/01/adaptation_the.html
+http://www.nobody-knows-anything.com/mtarchives/2003/07/blue_moon_ice_c.html
+http://www.nobody-knows-anything.com/mtarchives/politics/
+http://www.nobrainerblinds.com/funstuff/
+http://www.nobully.org.nz/guidelines.htm
+http://www.nocompromise.org/issues/11RodSNV.html
+http://www.noctilucent.org/blog/archives/2003/09/
+http://www.nocturne.com/tot/default.asp?ID=8
+http://www.nocturnis.net/reviews/vampire/default/2000/March/45.html
+http://www.nod32.com.hk/products/outpost.htm
+http://www.node707.com/archives/001121.shtml
+http://www.node707.com/archives/001952.shtml
+http://www.node707.com/archives/004103.shtml
+http://www.nodice.ca/elections/alberta/index.php
+http://www.nodoubt.com/band/Articles/21MtvOn.htm
+http://www.nodoubt.com/band/Articles/35Details.htm
+http://www.nodoubt.com/features/
+http://www.nodoubt.com/music/rocksteadybio.html
+http://www.nodump.com/history.htm
+http://www.noeesnook.com/myblog/archives/2005_06.html
+http://www.noelhodson.com/index_files/property_telework.htm
+http://www.noendpress.com/caleb/biodiesel/index.php
+http://www.nofluffjuststuff.com/show_view.jsp?showId=19
+http://www.nofluffjuststuff.com/show_view.jsp?showId=26
+http://www.noharmm.org/nontrad.htm
+http://www.nohoartsdistrict.com/tv/
+http://www.noindoctrination.org/af_p.shtml
+http://www.noisebetweenstations.com/personal/weblogs/
+http://www.nokotahorse.org/Newsletter04-03.htm
+http://www.nola.com/hornets/t-p/index.ssf?/base/sports-1/110646409369430.xml
+http://www.nola.com/sports/t-p/index.ssf?/base/sports-16/110646409069430.xml
+http://www.nolinrecc.com/energystore/appliances.asp
+http://www.nolo.com/article.cfm/ObjectID/1C4C7F8B-892C-4E35-B5800081DCDE7C8C/catID/C1DBB6FC-F9C3-40CA-8A4D77366ED0D4D5/111/254/ART/
+http://www.nolo.com/article.cfm/ObjectID/1F63F9B2-8146-4418-A5464600C72190D2/catID/D067F3DC-202E-4EF7-AAEEEFB60061533D/310/266/ART/
+http://www.nolo.com/article.cfm/ObjectID/E43F6B1F-C983-42DE-9BD4ACCC9AC4C117/catID/5DD3BD40-C970-45AC-BF68DC9BA717AFDB/310/238/181/ART/
+http://www.nolo.com/lawcenter/auntie/questions.cfm/ObjectID/DB3DFB26-87FB-4AD1-A80D2367CBCAB275/catID/1C25B3F1-4442-4184-869226E5BA959B5B
+http://www.nolo.com/lawcenter/auntie/questions.cfm/ObjectID/DB3DFB26-87FB-4AD1-A80D2367CBCAB275/catID/E9D6A309-C25E-4D84-B69EC9EE66380B33
+http://www.nolo.com/lawcenter/auntie/questions.cfm/ObjectID/DB3DFB26-87FB-4AD1-A80D2367CBCAB275/catID/F12B8A3E-0ED4-40C8-B18E8CD8034A1F2E
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/1FF752C2-0C80-4539-8B159557A55CC17D/catID/283B9600-ECC3-49ED-9D9A20A3E13F42E0
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/1FF752C2-0C80-4539-8B159557A55CC17D/catID/575C3BE9-F0C1-448E-B5F43D22FE36E9F2
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/234E9150-81AB-4316-93F84A2D2B28A743/catID/2C200607-463A-4D37-AD52850B52FEC248
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/4A2EDAAE-21E0-458D-B0099737751F4CA1/catID/0D973BC0-3287-4CA1-944DC75DE82DC59F
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/586AC0B4-0435-4D7C-BD06608979A6CBF9/catID/697DBAFE-20FF-467A-9E9395985EE7E825
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/9A7A20CE-F670-40B9-928A4F8F05795DF5/catID/0D973BC0-3287-4CA1-944DC75DE82DC59F
+http://www.nolo.com/lawcenter/ency/article.cfm/ObjectID/9FF29B52-1B44-42D1-9C96C0D49CAE4589/catID/8FA0132B-91C2-4773-828573F2D3D58DFA
+http://www.nolo.com/lawcenter/ency/article.cfm/objectID/87F6DD43-E6F2-4DFE-BCDB8E2E85DFF80B/catID/806B7BA0-4CDF-4221-9230A3135E2DF07A
+http://www.nolo.com/lawcenter/ency/article.cfm/objectID/EA88ECFE-C38F-4DF8-BA6551FCBE64DCA0
+http://www.nolo.com/lawcenter/ency/index.cfm/articles/sb/index.cfm/catID/4BEF1F62-722F-435E-98AB18960A6EAB0E
+http://www.nolo.com/lawcenter/ency/index.cfm/catID/4BEF1F62-722F-435E-98AB18960A6EAB0E
+http://www.nolo.com/product.cfm/ObjectID/48BB18A0-4224-4A2B-AA1929A13C4B02EA/update/1/118/209/
+http://www.nolo.com/product.cfm/ObjectID/86C28D85-A787-42FA-A25A09551389EC7A/111/228/
+http://www.nolo.com/product.cfm/ObjectID/EF0DE668-BA17-48AF-B7634507589AA51D/111/159/
+http://www.nolo.com/product.cfm/objectID/A151D009-A210-4497-89D1A2F991676E17/samplechapter/1/111/
+http://www.nomad-online.co.uk/html/floodlight_cup.html
+http://www.nomanagedcare.org/eleven.html
+http://www.nomic.net/deadgames/imperial/28.2/rules.html
+http://www.nominet.org.uk/DisputeResolution/Decisions/TarmacLimited-v-AndrewEtches.html
+http://www.nominet.org.uk/ReferenceDocuments/TermsAndConditions/TermsAndConditions.html
+http://www.nominet.org.uk/nominet-terms.html
+http://www.nomorelyrics.net/song/191656.html
+http://www.nomorepanic.co.uk/research.htm
+http://www.non-gm-farmers.com/news_details.asp?ID=1001
+http://www.nonliteral.com/lawson/weblog/articles/tivo_dying_young_but_leaving_a_great_looking_corpse/
+http://www.nonoise.org/lawlib/cities/me/york_me.htm
+http://www.nonprofitbasics.org/CompleteGlossary.aspx?curLetter=B&ID=-1
+http://www.nonprofitrisk.org/jobs/jobs.htm
+http://www.nonprofitrisk.org/tools/archive/insurance050605-p.htm
+http://www.nonprofits.org/npofaq/01/09.html
+http://www.nonprofits.org/npofaq/16/08.html
+http://www.nonprofits.org/npofaq/18/77.html
+http://www.nonprofits.org/parlor/acknow/landesman/vpopg-d.html
+http://www.nonprofitwatch.org/npt/stclair.php
+http://www.nonstopenglish.com/allexercises/
+http://www.nonstopenglish.com/reading/articles/Can-Sitting-at-Your-Computer-Help-You-Lose-Weight.asp
+http://www.nonstopenglish.com/reading/articles/Is-Mothering-Wearing-You-Out.asp
+http://www.nonstopenglish.com/reading/history_in_english/History-in-English-25-December.asp
+http://www.nonstopenglish.com/reading/quotations/k_Fear.asp
+http://www.nonviolence.org/quaker/blogs/
+http://www.noonsite.com/Members/doina/R2002-12-04-1
+http://www.noopportunitywasted.com/about_now/about_phil.php
+http://www.nooro.com/datapoints.html
+http://www.nopa.net/Useful_Information/Presidential_Speeches/38.shtml
+http://www.nopna.org/profiles/Central_921.html
+http://www.norden.org/learningsecondlanguages/encell_report.html
+http://www.norelevance.com/bock/
+http://www.norfolk.gov.uk/environment/conservation/historicbuildings/greenbuildingmaterials.htm
+http://www.norfolk.police.uk/article.cfm?artID=1069&catID=584
+http://www.norfolk.police.uk/article.cfm?catID=584&artID=1069
+http://www.norfolkbc.fsnet.co.uk/bc_issues/bc_94_jun_00/94_jun_00.htm
+http://www.norges-bank.no/english/nb/legislation/reg-2003-12-19.html
+http://www.noria.com/dictionary.html
+http://www.noripcord.co.uk/reviews/W/williamelliotwhitmorealbum.html
+http://www.norkro.com/index_files/page0010.htm
+http://www.norlarco.com/24hr_banking.asp
+http://www.norm-uk.org/circumcision_unhappy.html
+http://www.normal.org/MayorAndCouncil/Boards/2030/2030Minutes2004_03_31.htm
+http://www.normal.org/MayorAndCouncil/CouncilAM/Minutes2003_10_20.htm
+http://www.normal.org/MayorAndCouncil/CouncilAM/Minutes2004_10_18.htm
+http://www.normaleating.com/obsession.php
+http://www.normandale.edu/directory/index.cfm?choice=byname&criteria=Richard%20Brown
+http://www.normandale.edu/directory/index.cfm?choice=byname&criteria=Richard%20Dunning
+http://www.normemma.com/indxadvo.htm
+http://www.norml.org/index.cfm?Group_ID=4946
+http://www.norsiglar.com/english/travelog.html
+http://www.north-sea.net/
+http://www.northadamsbank.com/personal_checking.htm
+http://www.northamericanwhitetail.com/deermanagement/wt_202foodplots/
+http://www.northamptonshire.nhs.uk/cshappeal/pressroom/Default.asp
+http://www.northants-chamber.co.uk/factsheet.php/155
+http://www.northants-chamber.co.uk/product.php/910
+http://www.northantsnews.com/
+http://www.northark.edu/2004cit/
+http://www.northbankfred.com/90.html
+http://www.northbankfred.com/spr95_1.html
+http://www.northbay.com/foodwine/jordan/29pantry.html
+http://www.northcoastjournal.com/012303/garden0123.html
+http://www.northcoastjournal.com/020702/cover0207.html
+http://www.northdenmarkonline.dk/readers/mason.htm
+http://www.northdevongazette.co.uk/news.asp
+http://www.northdevongazette.co.uk/northdevongazette/news/
+http://www.northeastbadminton.net/Advice-RunningClub.asp
+http://www.northeastmedical.org/press_releases/patient_info_guidelines.html
+http://www.northeasttimes.com/2000/0705/devon.html
+http://www.northeasttimes.com/2004/0930/director.html
+http://www.northern.ac.uk/aboutus/meet_the_governors.asp?link=aboutus
+http://www.northern.edu/registrar/grad-rates.html
+http://www.northerncambria.com/
+http://www.northernconcord.org.uk/Police-Sense.htm
+http://www.northernontariobusiness.com/displayHeadline.asp?194id115-pn=&view=22351
+http://www.northernskynews.com/backissue%20pages/Moving%20to%20Canada.html
+http://www.northernstars.ca/actorsstu/shearerbio.html
+http://www.northernvisions.org/Education.htm
+http://www.northhampshire.nhs.uk/patients/comein/leaflets/surgery_dis.html
+http://www.northhousefolkschool.com/classes/Shelter.htm
+http://www.northhousefolkschool.com/classes/Woodwork.htm
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXk2OTkmZmdiZWw3Zjd2cWVlRUV5eTY1NDg2NTgmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk5
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXkyNjkmZmdiZWw3Zjd2cWVlRUV5eTU5MTY0NTkmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk2
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXkyNjkmZmdiZWw3Zjd2cWVlRUV5eTU5MTY0NTkmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk5
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXkyNjkmZmdiZWw3Zjd2cWVlRUV5eTYzNDg3NzAmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk2
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXkyNjkmZmdiZWw3Zjd2cWVlRUV5eTYzNTMyMzkmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk2
+http://www.northjersey.com/page.php?qstr=eXJpcnk3ZjczN2Y3dnFlZUVFeXkyNzgmZmdiZWw3Zjd2cWVlRUV5eTY2NjQ3MDEmeXJpcnk3ZjcxN2Y3dnFlZUVFeXk5
+http://www.northjersey.com/topic.php?qstr=eXJpcnk3ZjcxN2Y3dnFlZUVFeXk2JnlyaXJ5N2Y3MjdmN3ZxZWVFRXl5MzAmeXJpcnk3ZjczN2Y3dnFlZUVFeXkxMjc=
+http://www.northjersey.com/topic.php?qstr=eXJpcnk3ZjcxN2Y3dnFlZUVFeXk2JnlyaXJ5N2Y3MzdmN3ZxZWVFRXl5MTI3
+http://www.northjerseyjobs.com/rajan_4.php
+http://www.northkoreanrefugees.com/mrs-ae.htm
+http://www.northlan.gov.uk/your+council/news/latest+news/food+watch+campaign+reveals+colouring+issue.html
+http://www.northpolealaska.com/
+http://www.northsailsod.com/class/sonar/sonar_whatsnew.html
+http://www.northseattle.edu/info/news/article.phtml?id=76
+http://www.northstar.sierraclub.org/about/e-sierra/2003/200308.html
+http://www.northstaracademy.org/middleschoolcodeofconduct.html
+http://www.northstarteens.org/pages.cfm?gpt=2&g=8&ID=75
+http://www.northtyneside.gov.uk/education/sen_appeals.htm
+http://www.northwalesbmd.org.uk/marriageinfo.html
+http://www.northwaleschronicle.co.uk/ihome2/catdetail.asp?catid=1&officeid=8&type=0
+http://www.northwest.coop/support/LD-FAQ.htm
+http://www.northwestern.edu/ipr/publications/workingpapers/wpF95.html
+http://www.northwestern.edu/magazine/northwestern/spring2003/classnotes/deaths.htm
+http://www.northwestern.edu/magazine/northwestern/summer2004/classnotes/60s.htm
+http://www.northwestnotes.net/mood.htm
+http://www.northwestnotes.net/richler_review.htm
+http://www.northwestpackgoats.com/leading.htm
+http://www.northwestsaysno.org.uk/news19.asp
+http://www.northyorkharvestfoodbank.com/
+http://www.northyorkshire.police.uk/initiative-cycleunit.asp
+http://www.nortonmusic.com/fake16.html
+http://www.nortonpoets.com/ex/celanp.htm
+http://www.norwalkhosp.org/website/nhssite.nsf/MainPageKey/Residency-IntMed-1-AboutNH
+http://www.norway.com/meetingplanner/mp_d_company.asp?id=1740&lang=44
+http://www.norway.gr/business/Environmental+Technology/
+http://www.norway.org.my/
+http://www.norway.org/culture/architecture/fehn/
+http://www.norway.org/xmas04/events.htm
+http://www.norwayheritage.com/articles/templates/voyages.asp?articleid=28&zoneid=6
+http://www.norwescon.org/archives/norwescon28/policies.html
+http://www.norwichunion.co.uk/sponsorship/gr-do-the-right-thing-what-is.htm
+http://www.norwichunion.com/private-health-insurance/trust-care-benefits.htm
+http://www.nosoftwarepatents.com/phpBB2/viewtopic.php?t=123
+http://www.nospank.net/couture3.htm
+http://www.nostalgiacentral.com/60/60tv.htm
+http://www.nostalgiacentral.com/years/1977main.htm
+http://www.nostatusquo.com/ACLU/Nikki/academic1.html
+http://www.nosuch.org/2005_01_01_archive.html
+http://www.nosweatshoplabel.com/report.htm
+http://www.notationmachine.com/how_to_read_sheetmusic/readingmusic.htm
+http://www.notbored.org/nachman.html
+http://www.notcalmdotcom.blogspot.com/
+http://www.notcoming.com/reviews.php?id=254
+http://www.note.com/note/pp/jackpot.html
+http://www.noteaccess.com/APPROACHES/AGW/Dionysos.htm
+http://www.noteaccess.com/ELEMENTS/Space.htm
+http://www.noteaccess.com/RELATIONSHIPS/PerspectiveMA.htm
+http://www.notebookreview.com/
+http://www.notebookreview.com/price/default.asp?productID=8230&display=opinionDetail
+http://www.notebookreview.com/price/default.asp?productID=8299&display=opinionDetail
+http://www.notebookreview.com/price/default.asp?productID=9257&display=opinionDetail
+http://www.noteinvestors.com/
+http://www.notestips.com/80256B3A007F2692/1/TAIO-68SEBN
+http://www.nothing-fancy.com/michaelkitchen/interviews/foyle202.htm
+http://www.nothingisreal.com/girlfriend/
+http://www.nothyme.com/plantpropagation.cfm
+http://www.noticias.info/Archivo/2004/200410/20041009/20041009_35592.shtm
+http://www.notinourname.net/restrictions/prez-powers-16apr04.htm
+http://www.notlame.com/
+http://www.notmydog.com/2001_10_01_archive.html
+http://www.notpretty.com/skeletons/000044half_of_something.html
+http://www.notpretty.com/skeletons/000047get_the_pictures.html
+http://www.nottingham.ac.uk/prospectuses/undergrad/introduction/life/students-union.phtml
+http://www.nottingham.ac.uk/public-affairs/press-releases/press-up.phtml?menu=pressuparchive&sub=208
+http://www.nottingham.edu.cn/english/admissions/d4.asp
+http://www.nottinghamcity.gov.uk/coun/department/dps/parking/payanddisplay/benefits/default.asp
+http://www.nottinghamema.com/en/customer-information/duty-free.html
+http://www.nottinghamema.com/en/customer-information/retail-catering/alphashopping.html
+http://www.nottinghamshire.gov.uk/home/social_care/gettingabout/specialaccess.htm
+http://www.nottinghillonline.com/page.asp?id=347
+http://www.nottshistory.org.uk/Jacks1881/chilwell.htm
+http://www.nottshistory.org.uk/articles/itinerary/itinerary1933p3.htm
+http://www.noumenal.com/marc/dadd/
+http://www.nova.edu/cwis/hrd/emphanbk/conduct.html
+http://www.nova.edu/ssss/QR/QR2-3/schooley.html
+http://www.novagold.net/s/Disclaimer.asp
+http://www.novalex2000.net/startingabusiness.htm
+http://www.novan.com/aggresr2.htm
+http://www.novan.com/art3imag.htm
+http://www.novan.com/mind.htm
+http://www.novascotiabusiness.com/business/success/
+http://www.novelier.com/911.html
+http://www.novell.com/coolsolutions/feature/14817.html
+http://www.novell.com/coolsolutions/gwmag/features/a_formativ_applet_central_gw.html
+http://www.novell.com/coolsolutions/tip/11624.html
+http://www.novell.com/coolsolutions/tip/9460.html
+http://www.novell.com/linux/truth/better_choice.html
+http://www.novell.com/news/leadstories/2001/sep19/
+http://www.novell.com/news/press/archive/2003/04/pr03020.html
+http://www.novell.com/news/press/archive/2005/02/pr05014.html
+http://www.novellus.com/dome/showpr.asp?pr_id=151
+http://www.novem.org/core.htm
+http://www.novemberlearning.com/blogs/regismit/
+http://www.novexcn.com/viet_finance_main.html
+http://www.novica.com/artistdetail/index.cfm?faID=2822&view_testimonial=1&t_id=2105
+http://www.novita.org.au/content.asp?p=5
+http://www.novita.org.au/content.asp?p=88
+http://www.novoco.com/resource.shtml
+http://www.now.org/cgi-bin/store/BK-HER.html?id=AvkUqjKT
+http://www.now.org/nnt/05-97/media.html
+http://www.now.org/nnt/summer-2000/falllineup.html
+http://www.now.org/press/11-00/11-08-00B.html
+http://www.nowarcollective.com/woodward.htm
+http://www.nowhereroad.com/nwr-thegame/entry3.html
+http://www.nowtoronto.com/issues/2004-12-02/music_discs3.php
+http://www.npb-cnlc.gc.ca/infocntr/policym/man_11_e.htm
+http://www.npc.org.uk/page/1031854965
+http://www.npc.org.uk/page/1100042349
+http://www.npca.org/marine_and_coastal/marine_wildlife/make_a_difference.asp
+http://www.npcil.org/nupower_vol13_3/roiphwr.htm
+http://www.npd.no/English/Emner/Ytre+miljo/sokkelaret_2004_miljo.htm?print=true
+http://www.npelra.org/legal/ted.asp
+http://www.npg.org/ga_poll/georgia.html
+http://www.npg.org/pospapers/smluspop.htm
+http://www.npg.org/specialreports/bartlett_section3.htm
+http://www.npicenter.com/listings/Categories.aspx?catId=3710
+http://www.npl.washington.edu/AV/altvw86.html
+http://www.nplindia.org/npl/npl.htm
+http://www.npma.org/pubs/education/41_114_688.CFM
+http://www.npr.org/
+http://www.npr.org/about/nextgen/sum04/bios_a-f.html
+http://www.npr.org/about/press/050128.newsnotes.html
+http://www.npr.org/features/feature.php?wfId=1355120
+http://www.npr.org/news/specials/healthcarepoll/
+http://www.npr.org/programs/death/980310.death.html
+http://www.npr.org/templates/story/story.php?storyId=3108017
+http://www.npr.org/templates/story/story.php?storyId=4161552
+http://www.npr.org/templates/story/story.php?storyId=4181343
+http://www.npr.org/templates/story/story.php?storyId=4461694
+http://www.npr.org/templates/story/story.php?storyId=4487263
+http://www.npr.org/templates/story/story.php?storyId=4561398
+http://www.npr.org/templates/story/story.php?storyId=4668391
+http://www.npr.org/templates/story/story.php?storyId=4678527
+http://www.npr.org/templates/story/story.php?storyId=4695607
+http://www.npr.org/templates/story/story.php?storyId=4714303
+http://www.npr.org/templates/topics/complex_topic.php?topicParentId=1010&topicId=1014,1010&pageNum=11
+http://www.npr.org/templates/topics/complex_topic.php?topicParentId=1016&topicId=1014,1016&pageNum=5
+http://www.npra.org/issues/energy.cfm
+http://www.nps.gov/arho/tour/history/arlingtoninbetween2.html
+http://www.nps.gov/bowa/tuskin.html
+http://www.nps.gov/colo/Jthanout/Glassmak.html
+http://www.nps.gov/colo/Jthanout/JSmith.html
+http://www.nps.gov/deto/gmp_final/04a_consequences.htm
+http://www.nps.gov/efmo/parks/glossary.htm
+http://www.nps.gov/gett/soldierlife/soldiers.htm
+http://www.nps.gov/grca/compliance/nr-ems-fire.htm
+http://www.nps.gov/hale/pages/tier_two/nene.htm
+http://www.nps.gov/jeff/LewisClark2/CorpsOfDiscovery/TheOthers/Civilians/York.htm
+http://www.nps.gov/nava/adhi/adhi7a.htm
+http://www.nps.gov/pinn/education/wow-post_s.htm
+http://www.nps.gov/rich/ri_auto.htm
+http://www.nps.gov/sahi/travel/
+http://www.nps.gov/tapr/Schedule.htm
+http://www.nps.gov/thro/tr_trnha.htm
+http://www.nps.gov/whmi/history/garth.htm
+http://www.nps.gov/yell/nature/nhighlights/ncanyon.htm
+http://www.nps.gov/yose/news/2002/fire1030.htm
+http://www.nps.gov/yose/planning/yfalls/ch6.htm
+http://www.npsag.com/newsletter.htm
+http://www.npsc.org/students/requirements.html
+http://www.npsf.org/html/research/1998award2.html
+http://www.npt.gov.uk/businessandeconomy/
+http://www.nptimes.com/Jul03/npt1.html
+http://www.nq.unioncommand.com/
+http://www.nqi.ca/CAEAwards/default.aspx
+http://www.nqi.ca/caeawards/
+http://www.nrahq.org/hunting/clinic/ordermaterials.asp
+http://www.nraila.org/Issues/Articles/Read.aspx?ID=78
+http://www.nraila.org/Issues/FactSheets/Read.aspx?ID=15
+http://www.nrao.edu/pr/2004/m31HVCs/
+http://www.nrao.edu/pr/2005/3c273jet/
+http://www.nrb.org/partner/Article_Display_Page/0,,PTID308778%7CCHID568026%7CCIID1535514,00.html
+http://www.nrc.gov/public-involve/info-quality/v67n36p8451.html
+http://www.nrc.gov/reading-rm/doc-collections/commission/secys/2002/secy2002-0116/2002-0116scy.html
+http://www.nrc.gov/reading-rm/doc-collections/commission/speeches/2001/s01-004.html
+http://www.nrc.gov/reading-rm/doc-collections/commission/tr/2002/20020821b.html
+http://www.nrc.gov/reading-rm/doc-collections/enforcement/actions/reactors/ea04213.html
+http://www.nrc.gov/reading-rm/doc-collections/event-status/event/2004/20041202en.html
+http://www.nrc.gov/reading-rm/doc-collections/event-status/part21/2000/2000100.html
+http://www.nrc.gov/reading-rm/doc-collections/fact-sheets/reducing-hazards-spent-fuel.html
+http://www.nrc.gov/reading-rm/doc-collections/gen-comm/info-notices/1981/in81026.html
+http://www.nrc.gov/reading-rm/doc-collections/gen-comm/info-notices/1984/in84073.html
+http://www.nrc.gov/reading-rm/doc-collections/nuregs/contract/cr6876/
+http://www.nrc.gov/reading-rm/doc-collections/nuregs/staff/sr0933/sec3/077r1.html
+http://www.nrc.gov/who-we-are/organization/nsirfuncdesc.html
+http://www.nrcam.uchc.edu/applications/nuc_envelope_dir/nuc_envelope.html
+http://www.nrcan-rncan.gc.ca/cfs-scf/national/what-quoi/sof/sof02/review_e.html
+http://www.nrcan-rncan.gc.ca/media/archives/speeches/2003/200390_e.htm
+http://www.nrcan.gc.ca/mms/canmet-mtb/mmsl-lmsm/mend/reports/3212aes_e.htm
+http://www.nrcs.usda.gov/technical/land/meta/t5839.html
+http://www.nrcs.usda.gov/technical/land/nri02/
+http://www.nrcs.usda.gov/technical/land/pubs/gosstext.html
+http://www.nrcs.usda.gov/technical/sciencetech_faq.html
+http://www.nrdc.org.uk/content.asp?CategoryID=546
+http://www.nrdc.org/air/energy/rep/chap3.asp
+http://www.nrdc.org/globalWarming/pcarbon.asp
+http://www.nrec.org/synapse44/bonedig.html
+http://www.nreionline.com/finance/capital/real_estate_debt_pipeline_bulging/
+http://www.nreionline.com/mag/real_estate_cincinnati_market_sectors/
+http://www.nreionline.com/property/retail/real_estate_putting_new_life/
+http://www.nrel.gov/analysis/analysis_tools_tech_vehic.html
+http://www.nrel.gov/buildings/windows/trip2.html
+http://www.nrf.ac.za/focusareas/iks/
+http://www.nrglink.com/archives/nrgs1103.html
+http://www.nrglink.com/archives/nrgs1104.html
+http://www.nrhtx.com/dept_secretary_teen_court_board.cfm
+http://www.nrl.com/privacy.cfm
+http://www.nrlc.org/Federal/LegUpdates/challenges2005.html
+http://www.nrlc.org/abortion/Fetal_Pain/Smithremarks052004.html
+http://www.nrlo.net/MessagefromDirectorofTraining.html
+http://www.nrm.gov.au/monitoring/indicators/soil/carbon.html
+http://www.nrm.qld.gov.au/education/modules/junior_secondary/sec_biodiversity/resourcesheet7.html
+http://www.nrmp.org/
+http://www.nrrf.org/article_traub_8-3-03.htm
+http://www.nrs-inc.com/support/ezfaq.asp
+http://www.nrsp.co.uk/
+http://www.nrtee-trnee.ca/Publications/HTML/Complete-Documents/SOD_Nature_E/chapter9_e.htm
+http://www.nrtw.org/RDA.htm
+http://www.nrtw.org/b/nr_150.php
+http://www.nrvanimalshelters.com/Floyd/
+http://www.nrwa.org/sitemap.htm
+http://www.ns.lung.ca/news/clearing01_03.html
+http://www.nsa.gov/careers/students_2_1.cfm
+http://www.nsa.gov/releases/relea00059.html
+http://www.nsa.naples.navy.mil/panorama/Clubs.htm
+http://www.nsba.org/boardbuzz
+http://www.nsba.org/sbot/toolkit/Conflict.html
+http://www.nsba.org/site/page.asp?TRACKID=&CID=1362&DID=32712
+http://www.nsbn.org/case/jointuse/developfacilities.php
+http://www.nsbri.org/Research/Projects/viewsummary.epl?pid=105
+http://www.nsc.ie/News/Title,4255,en.html
+http://www.nsc.ie/RoadSafety/TheRoadtoSafety/Synopsis/
+http://www.nsc.org/ehc/jrn/tips/tip161.htm
+http://www.nsc.org/issues/emerg/99esc.htm
+http://www.nsca-lift.org/Perform/article.asp?ArticleID=118
+http://www.nscaa.com/PostConJournal/2003CoachesAwards/67562.html
+http://www.nscaa.com/coachingtips/journal/27854.html
+http://www.nscaa.com/home/67562.html
+http://www.nscaa.com/tips/
+http://www.nsdc.org/library/publications/jsd/hornbeck243.cfm
+http://www.nsdc.org/library/publications/jsd/pardinihigh223.cfm
+http://www.nsdssurvey.org/WallSt.htm
+http://www.nsela.org/safesci15.htm
+http://www.nserc.ca/forms/instructions/180/e.asp
+http://www.nserc.ca/professors_e.asp?nav=profnav&lbi=f5
+http://www.nsf.ac.lk/jss/jss23-4-12.htm
+http://www.nsf.org/business/about_NSF/careers_description.asp?j_id=8583&j_dep=NSF-ISR
+http://www.nsgtmo.navy.mil/gazette/History_98-64/hischp19.htm
+http://www.nsh.nsw.gov.au/healthinfo/healthprom/whatsnew/Spring99/Main.htm
+http://www.nshouseofyoga.com/Protect%20Disks.htm
+http://www.nskstate.com/philosophy/speeches/address1989.php
+http://www.nsm88.com/aryanattack/aryanattack20041114.html
+http://www.nsm88.com/aryanattack/aryanattack20041128.html
+http://www.nsmb.com/gear/seaotter2_04_05.php
+http://www.nsmb.com/people/darren_butler_05_05.php
+http://www.nsna.org/career/juggling.asp
+http://www.nso.com/case/cases_area_index.php?id=50&area=OB/GYN
+http://www.nso.com/case/cases_area_index.php?id=61&area=Geriatrics
+http://www.nspainc.com/journal3.htm
+http://www.nspcc.org.uk/inform/ReadingLists/Bullying.asp
+http://www.nssb.org/certapp_details.cfm?certapp_id=377
+http://www.nssb.org/certapp_details.cfm?certapp_id=379
+http://www.nssb.org/certapp_details.cfm?certapp_id=380
+http://www.nssc1.org/safeweek/safe.htm
+http://www.nssd.net/Links/train-ind-conv.html
+http://www.nsta.org/conventions
+http://www.nsu.newschool.edu/blur/blur02/user_love.html
+http://www.nsu.ru/english/
+http://www.nswagtc.org.au/admin/authoring.html
+http://www.nswpeace.org/features/1093492419_20743.html
+http://www.nswtf.org.au/edu_online/61/matl.html
+http://www.nt.gov.au/health/healthdev/health_promotion/bushbook/volume2/chap1/cannabis.htm
+http://www.nt.gov.au/ntsc/doc/sentencing_remarks/0/86/0/NS000570.htm
+http://www.nt.net/~a815/survey.htm
+http://www.nt.net/~toby/intrep.html
+http://www.nt.net/~torino/glows.html
+http://www.ntc-dfw.org/ntccmtedescriptions.html
+http://www.ntcp.org/openEye/executing.html
+http://www.ntcumc.org/SpecEd/2003/090603.html
+http://www.nten.org/news-03-06-24
+http://www.nteu.org.au/about/policymanualold/2923
+http://www.nteu.org.au/news/current/12156
+http://www.ntf.flinders.edu.au/TEXT/PRJS/PACIFIC/pacific.html
+http://www.ntfaxfaq.com/pages/fexreview.htm
+http://www.ntholidays.com/nt/ntholidays/maps_info/safety/sunsafe.html
+http://www.nthzine.com/fiction.html?archiveDisplay=20030503
+http://www.nthzine.com/fiction.html?archiveDisplay=20050602
+http://www.nti.org/e_research/e3_38b.html
+http://www.nti.org/e_research/profiles/NK/45_541.html
+http://www.ntia.doc.gov/ntiahome/domainname/agreements/docstatement_09192002.htm
+http://www.ntia.doc.gov/ptfp/application/equipcost_ed.html
+http://www.ntia.doc.gov/top/publicationmedia/speeches/wilhelm_fcc_10_2004.htm
+http://www.ntia.doc.gov/top/whatsnew/whatsnew.htm
+http://www.ntimc.org/newswire.php?type=eventnotice
+http://www.ntionline.com/CourseInfo.asp?CourseNumber=ID005
+http://www.ntlf.com/html/lib/bib/faqdisc.htm
+http://www.ntlf.org/ntlf_standards_ten_point_coalitions.htm
+http://www.ntmconline.net/EOM/care%20award/September/care_sept.htm
+http://www.ntn.ca/news2.htm
+http://www.ntrbonline.org/english/whoweare.html
+http://www.nts.org.uk/web/site/home/visit/places/Property.asp?PropID=10026&NavPage=10026&NavId=5115
+http://www.ntsc-uk.com/review.php?platform=ngc&game=MetroidPrime2
+http://www.ntt-west.co.jp/solution/eng/journal/tokushu_2003_06/011spe_03.html
+http://www.nttdocomo.com/privacy/
+http://www.ntu.ac.uk/news/annualreport/614gp.html
+http://www.ntu.ac.uk/parents/calendar/
+http://www.ntu.edu.sg/studorgn/osa/studentchapter/
+http://www.ntu.org/main/press_issuebriefs.php?PressID=159&org_name=NTU
+http://www.ntu.org/main/press_papers.php?PressID=604&org_name=NTUF
+http://www.ntu.org/main/press_printable.php?PressID=604&org_name=NTUF
+http://www.nu.edu/Admissions/FinancialAid/Programs.html
+http://www.nubasurvival.com/news&events/Jun%202001%20NRRDO%20Declaration.htm
+http://www.nuclearfiles.org/etinternationallaw/johansenusoppositiontoicc.htm
+http://www.nuclearfiles.org/hinonproliferationtreaty/95-npt-8.html
+http://www.nuclearfiles.org/hinonproliferationtreaty/99-npt-chairman-rev1.html
+http://www.nuclearfiles.org/menu/educators/study-guides/history_decision-to-drop-bomb.htm
+http://www.nuclearfiles.org/menu/library/treaties/physical-protection-material/trty_conv-protection-nuclear-material_1987-02-08.htm
+http://www.nuclearpolicy.org/NewsArticle.cfm?NewsID=2255
+http://www.nuclearsafety.gc.ca/eng/regulatory_information/licence_fees/CRAG_minutes_20041209.cfm
+http://www.nucleartourist.com/basics/why.htm
+http://www.nudist-resorts.org/talk/topic.asp?TOPIC_ID=746
+http://www.nufc.com/
+http://www.nufc.com/html/geninfo.html
+http://www.nufc.premiumtv.co.uk/page/NewsDetail/0,,10278~569393,00.html
+http://www.nuff.ox.ac.uk/general/prospectus/vignettes.aspx
+http://www.nuffic.nl/ciran/ikdm/7-2/enwereji.html
+http://www.nuffieldbioethics.org/
+http://www.nuggetnews.com/front01.shtml
+http://www.nuggetribcookoff.com/
+http://www.nuggetsoftruth.com/pinna.html
+http://www.nulab.com.au/support/easy_reference.htm
+http://www.nuloen.com/eqsl.html
+http://www.num.org.uk/?p=news
+http://www.numa.net/articles/search_for_the_hunley.html
+http://www.numa.net/expeditions/cumberland_and_florida_1.html
+http://www.numag.neu.edu/0009/passages.html
+http://www.numarkassoc.com/res/NGartEng.htm
+http://www.number-10.gov.uk/output/Page132.asp
+http://www.number-10.gov.uk/output/Page1446.asp
+http://www.number-10.gov.uk/output/Page1521.asp
+http://www.number-10.gov.uk/output/Page1598.asp
+http://www.number-10.gov.uk/output/Page1606.asp
+http://www.number-10.gov.uk/output/Page1666.asp
+http://www.number-10.gov.uk/output/Page1667.asp
+http://www.number-10.gov.uk/output/Page1668.asp
+http://www.number-10.gov.uk/output/Page1715.asp
+http://www.number-10.gov.uk/output/Page3088.asp
+http://www.number-10.gov.uk/output/Page3282.asp
+http://www.number-10.gov.uk/output/Page3347.asp
+http://www.number-10.gov.uk/output/Page4426.asp
+http://www.number-10.gov.uk/output/Page5185.asp
+http://www.number-10.gov.uk/output/Page6333.asp
+http://www.number-10.gov.uk/output/Page7562.asp
+http://www.number-10.gov.uk/output/page139.asp
+http://www.number-10.gov.uk/output/page1869.asp
+http://www.number-10.gov.uk/output/page2489.asp
+http://www.number-10.gov.uk/output/page3496.asp
+http://www.number-10.gov.uk/output/page3554.asp
+http://www.number-10.gov.uk/output/page821.asp
+http://www.number-10.gov.uk/su/voluntary/report/04.htm
+http://www.number-10.gov.uk/su/winning/active/02.htm
+http://www.number10.gov.uk/output/page6333.asp
+http://www.numberwatch.co.uk/2001%20January.htm
+http://www.numberwatch.co.uk/2004%20February.htm
+http://www.numberwatch.co.uk/2005%20May.htm
+http://www.numeraire.com/invest.htm
+http://www.numismedia.com/fmv/grades.shtml
+http://www.numsa.org.za/article.php?cat=&id=511
+http://www.numsa.org.za/newsitem.php?id=46
+http://www.nunavut.com/nunavut99/english/change.html
+http://www.nupge.ca/news_2002/news_ja02/n28ja02a.htm
+http://www.nurse-prescriber.co.uk/Articles/Evidence-based_Px.htm
+http://www.nurse-prescriber.co.uk/news/News2005/News142(19_04_05).htm
+http://www.nursenc.org/recruitmentandretention/youth/resourcescampaign.htm
+http://www.nurseryretailer.com/Article_Archives/article_detail.asp?Key=188
+http://www.nurserysite.com/clubs/peninsular/articles/feb2002.html
+http://www.nursetom.com/Book%20Reviews.htm
+http://www.nurseweek.com/features/98-5/manager.html
+http://www.nurseweek.com/news/features/01-11/military.html
+http://www.nursing-homes.biz/nursing-home-details/Greenville-ME-Charles-A-Dean-Memorial-Hospital/
+http://www.nursing-homes.biz/nursing-home-details/Lovelock-NV-Pershing-General-Hospital-Skilled-Nursing-Facility/
+http://www.nursing-homes.biz/nursing-home-details/Murray-KY-Murray-Calloway-County-Hospital/
+http://www.nursing-homes.biz/nursing-home-details/Reno-NV-Physicians-Hospital-for-Extended-Care/
+http://www.nursing-homes.biz/nursing-home-details/Rock-Hill-SC-Healthsouth-Rehabilitation-Hospital-Skilled-Nursing-Facility/
+http://www.nursing-standard.co.uk/students/experiences.asp
+http://www.nursing.umich.edu/gateway/alumni_giving/legacy.html
+http://www.nursingadvocacy.org/media/tv/er.html
+http://www.nursingcenter.com/prodev/ce_article.asp?tid=582125
+http://www.nursinghumor.com/geriatrics.senior.citizen.humor.htm
+http://www.nursingsociety.org/chapters/clr_200b.html
+http://www.nursingworld.org/needlestick/nshome.htm
+http://www.nursingworld.org/ojin/ethicol/ethics_7.htm
+http://www.nursingworld.org/ojin/topic16/tpc16_4.htm
+http://www.nursingworld.org/ojin/topic25/tpc25_3.htm
+http://www.nursingworld.org/tan/99novdec/inbrief.htm
+http://www.nus.edu.sg/nex/instructors.htm
+http://www.nuskinenterprises.com/livebetterlonger/health/product.shtml
+http://www.nusonline.co.uk/
+http://www.nuspel.org/hogstime.html
+http://www.nutleysons.com/nsw1.html
+http://www.nutraingredients-usa.com/news/news-NG.asp?n=54083-olympics-may-fuel
+http://www.nutraingredients.com/news/listnews.asp?m=5&y=2002
+http://www.nutraingredients.com/news/news-NG.asp?n=36800-meps-pass-strict
+http://www.nutraingredients.com/news/news-NG.asp?n=37676-green-tea-treatment
+http://www.nutraingredients.com/news/news-ng.asp?id=59818-numico-s-q
+http://www.nutraingredients.com/news/news-ng.asp?n=57472-risk-model-on
+http://www.nutramed.com/zeno/guidelines.htm
+http://www.nutribase.com/assess.shtml
+http://www.nutribase.com/testimonials.shtml
+http://www.nutribase.com/whybuy.shtml
+http://www.nutrition.org/cgi/content/full/130/7/1734
+http://www.nutrition.org/cgi/content/full/131/3/1054S
+http://www.nutrition.org/cgi/content/full/135/2/273
+http://www.nutrition4health.org/NOHAnews/NNS04SurvivingModernTechnology.htm
+http://www.nutritionalsupplements.com/training40.html
+http://www.nutritionandhealthshow.co.uk/nhconf/proceedings/
+http://www.nutritionaustralia.org/About_Us/Offices/qld.asp
+http://www.nutritiondata.com/dieting-weight-loss.html
+http://www.nutritiondynamics.com/prayer/prayer.htm
+http://www.nutritionlifestyles.com/bpgarlic.htm
+http://www.nutters.org/docs/wildstrom
+http://www.nutzso.com/MTblog/archives/2003_01.html
+http://www.nuveen.com/viewdoc.aspx?id=25433
+http://www.nuveen.com/viewdoc.aspx?id=610
+http://www.nv.blm.gov/elko/rubyhotshots.htm
+http://www.nvbc.net/testimonies.htm
+http://www.nvca.org/grady_tes.html
+http://www.nvca.org/nvca11_22_02.html
+http://www.nvcc.edu/home/vpoulakis/Translation/dantetr1.htm
+http://www.nvhotels.com/Content/Trade/exhibitorlist.html
+http://www.nvisionit.co.za/Default.aspx?tabid=96&ItemID=82
+http://www.nvnews.net/vbulletin/archive/index.php/t-12279.html
+http://www.nvnews.net/vbulletin/showthread.php?t=12279
+http://www.nvpc.org.sg/tsunami/
+http://www.nvt.com/whatsnew.html
+http://www.nvvam.org/women/cow.html
+http://www.nwa.com/services/shipping/cargo/luggage/faq.shtml
+http://www.nwac.noaa.gov/products/SABSEA
+http://www.nwalbion.u-net.com/neville/content.html
+http://www.nwara.com/security/
+http://www.nwarmy.org/news/articles.asp?StoryID=649
+http://www.nwave.com/hauntedcastle/prodnotes/
+http://www.nwbaby.com/archive/2004/sep2004/l4.html
+http://www.nwbaby.com/l6.html
+http://www.nwbl.com/chill/tickets.html
+http://www.nwc.com/1011/1011r1side2.html
+http://www.nwc.com/showitem.jhtml?docid=1410centerfold
+http://www.nwc.com/showitem.jhtml?docid=1513letters
+http://www.nwcc.info/
+http://www.nwchurch-of-god.org.uk/
+http://www.nwcurrent.com/commentary/1638401.html
+http://www.nwdc.navy.mil/Library/Documents/NDPs/ndp5/ndp50002.htm
+http://www.nwe.ufl.edu/~crinne/1102/2110/syll.html
+http://www.nwe.ufl.edu/~crinne/1102/2153/syll.html
+http://www.nwe.ufl.edu/~eotto/ENC_1101_1695.html
+http://www.nwf.org/internationalwildlife/1998/quagga.html
+http://www.nwf.org/nationalwildlife/article.cfm?articleId=958&issueId=69
+http://www.nwfoodalliance.co.uk/opportunities.php?event_id=9&news_start=&page_number=0
+http://www.nwfrontiers.com/booking_conditions_g.asp?page=36
+http://www.nwfusion.com/archive/1999/82568_12-06-1999.html
+http://www.nwfusion.com/columnists/2004/081604gearhead.html
+http://www.nwfusion.com/columnists/2005/013105tolly.html
+http://www.nwfusion.com/edge/news/
+http://www.nwfusion.com/gifts/2004/afterdetails.jsp?_tablename=aftergift_live&recordid='S1324941'
+http://www.nwfusion.com/net.worker/news/2002/1014netlead.html
+http://www.nwfusion.com/news/2000/0224cia.html
+http://www.nwfusion.com/news/2002/0527supercomm.html
+http://www.nwfusion.com/news/2004/0405winxp.html
+http://www.nwfusion.com/news/2004/0405winxp.html?nl
+http://www.nwfusion.com/news/2004/0716dellrolli.html
+http://www.nwfusion.com/news/2004/112204ecbriefs.html
+http://www.nwfusion.com/newsletters/vortex/2005/0114vortex1.html
+http://www.nwfusion.com/research/2004/0322spam.html
+http://www.nwh.org/displayContent.asp?categoryID=312
+http://www.nwhp.org/whm/all-honorees.html
+http://www.nwicatholic.com/Recipie%20Pages/Christmas.htm
+http://www.nwitimes.com/articles/2004/12/09/news/lake_county/4b80966c3dce0be186256eb10009455c.txt
+http://www.nwjc.org.au/subir.html
+http://www.nwk9.com/foundation_program.htm
+http://www.nwkansas.com/home/evan/humor/masondixon.html
+http://www.nwlc-clfn.ca/achievements.aspx?loc=ach
+http://www.nwlg.org/pages/ict/ict15_biology.htm
+http://www.nwlh.nhs.uk/research/application/ethics_committees_bh/brent/outline.htm
+http://www.nwlink.com/~donclark/leader/leadob.html
+http://www.nwlink.com/~donclark/leader/leadtem2.html
+http://www.nwls.org/Newsletter/PVN/Spring2005.htm
+http://www.nwlwrestling.com/profiles/rambo/chefjohnarch-16.html
+http://www.nwmechanical.com/faq/
+http://www.nwmindia.org/job_skills/media-ethics/journalistic_rigour.htm
+http://www.nwmo.ca/default.aspx?DN=896,177,20,1,Documents
+http://www.nwra.gov.uk/whatsnew/pressreleases.php?archive_start=0&full_article=yes&release_id=110
+http://www.nwrel.org/msec/nwteacher/spring2001/happy.html
+http://www.nwrel.org/msec/nwteacher/winter2001/teachers.html
+http://www.nwrel.org/nwedu/fall_98/article3.html
+http://www.nwrel.org/scpd/catalog/ModelDetails.asp?ModelID=2
+http://www.nwrel.org/scpd/sirs/2/topsyn2.html
+http://www.nwrls.lib.fl.us/ready_ref.htm
+http://www.nws.noaa.gov/oso/oso1/oso12/d31/d-31prt4.htm
+http://www.nws9.com.au/bts.html
+http://www.nwsy.navy.mil/pao/reportpage1.html
+http://www.nwtel.ca/about/corpProfile/history.jsp
+http://www.nwtrcc.org/taxday2005.htm
+http://www.nwtta.nt.ca/prospective_teachers.html
+http://www.ny.frb.org/aboutthefed/fedpoint/fed48.html
+http://www.ny.frb.org/education/fx/foreign.html
+http://www.ny.frb.org/newsevents/speeches/2004/rut040322.html
+http://www.ny.frb.org/newsevents/speeches/2005/gei050329.html
+http://www.ny.frb.org/research/conference/2004/antitrust_activity.html
+http://www.ny3rs.org/cpurpose.html
+http://www.nyaa.edu/
+http://www.nyapplecountry.com/edorchard.htm
+http://www.nyas.org/ebriefreps/main.asp?intSubsectionID=1353
+http://www.nybiodiversity.org/summaries/protoctista/slime/species.html
+http://www.nybioscape.org/bioapproach/humdim.htm
+http://www.nybooks.com/articles/13765
+http://www.nybooks.com/articles/14263
+http://www.nybooks.com/articles/14380
+http://www.nybooks.com/articles/14529
+http://www.nybooks.com/articles/15180
+http://www.nybooks.com/articles/16057
+http://www.nybooks.com/articles/16953
+http://www.nybooks.com/articles/17050
+http://www.nybooks.com/articles/17489
+http://www.nybooks.com/articles/17647
+http://www.nybooks.com/articles/17690
+http://www.nybooks.com/articles/17788
+http://www.nybooks.com/articles/17852
+http://www.nybooks.com/articles/17965
+http://www.nybooks.com/articles/17982
+http://www.nybooks.com/articles/17994
+http://www.nybooks.com/articles/18034
+http://www.nybooks.com/articles/18050
+http://www.nybooks.com/articles/18075
+http://www.nybooks.com/articles/2252
+http://www.nybooks.com/articles/474
+http://www.nyc-architecture.com/ARCH/ARCH-RichardMUpjohn.htm
+http://www.nyc-architecture.com/LM/LM049-EMPIREBUILDING.htm
+http://www.nyc-architecture.com/MID/MID-HellsKitchen.htm
+http://www.nyc.gov/html/dcas/html/civilservice.html
+http://www.nyc.gov/html/dcp/html/erw/
+http://www.nyc.gov/html/dot/html/masstran/airquality.html
+http://www.nyc.gov/html/dot/html/motorist/scrintro.html
+http://www.nyc.gov/html/hpd/html/for-owners/hep-specialized.html
+http://www.nyc.gov/html/hpd/html/for-tenants/section-8-tenant.html
+http://www.nyc.gov/html/law/html/lawjobsdetail.html
+http://www.nyc.gov/html/nyctv/html/order/show_city_classics.shtml
+http://www.nyc.gov/html/sbs/home.html
+http://www.nyc.gov/html/sbs/html/lbe.html
+http://www.nyc.gov/html/sbs/html/mwbe.html
+http://www.nyc.gov/html/selltonyc/html/new_vendors.html
+http://www.nycago.org/html/grievance.html
+http://www.nycaledonian.org/events.php
+http://www.nycbirdreport.com/general/reading.html
+http://www.nyccfb.info/press/1999-11-04.htm
+http://www.nyccfb.info/press/2003-12-03.htm
+http://www.nyceflorence.com/nyceflorence-privacy.html
+http://www.nycerome.com/nycerome-privacy.html
+http://www.nycgovparks.org/sub_newsroom/media_advisories/press_releases.php?id=18518
+http://www.nycjpg.com/about/themes.proposed.html
+http://www.nycmccap.org/guide/chap05a2.html
+http://www.nycourts.gov/courts/4jd/motionterms.shtml
+http://www.nycsubway.org/articles/earlyrapidtransitinbrooklyn.html
+http://www.nycsubway.org/irt/subwayinoperation.html
+http://www.nycsubway.org/irt/westside/
+http://www.nycwasteless.org/bus/casestudies/cs-distribpkg.html
+http://www.nycwatershed.org/news_press_nimham_nyt.html
+http://www.nydailynews.com/05-11-2003/news/local/v-pfriendly/story/82547p-75569c.html
+http://www.nydailynews.com/boroughs/story/256547p-219706c.html
+http://www.nydailynews.com/front/
+http://www.nydailynews.com/front/story/180723p-156921c.html
+http://www.nydailynews.com/front/story/270072p-231292c.html
+http://www.nydailynews.com/front/story/312212p-267072c.html
+http://www.nydailynews.com/front/story/80325p-73744c.html
+http://www.nydailynews.com/front/v-pfriendly/story/180723p-156921c.html
+http://www.nydailynews.com/news/gossip/story/319830p-273490c.html
+http://www.nydailynews.com/news/ideas_opinions/story/246784p-211393c.html
+http://www.nyguild.org/SPNews/010424SP.htm
+http://www.nyhistory.com/central/oneida.htm
+http://www.nyigf.com/05/content/tips.htm
+http://www.nyla.org/index.php?page_id=819&news_id=82
+http://www.nylawyer.com/boards/showflat.pl?Cat=&Board=NYLawyer_Board&Number=6562&page=3&view=collapsed&sb=5&o=0&part=
+http://www.nylawyer.com/boards/showflat.pl?Cat=&Board=NYLawyer_Board&Number=6562&page=3&view=collapsed&sb=5&o=0&part=all
+http://www.nylim.com/mainstayfunds/0,2058,20_1006338,00.html
+http://www.nyls.org/bjweb.htm
+http://www.nymarriottmarquis.com/privacy_policy.asp
+http://www.nymc.edu/fhp/centers/syncope/Fainting%20and%20Related%20Phenomena.htm
+http://www.nynewsday.com/entertainment/nyc-xrests1130,0,7312477.story
+http://www.nynewsday.com/impulse/barsandclubs/nyc-xrests1130,0,5552431.story
+http://www.nynewsday.com/news/local/manhattan/wtc/
+http://www.nynewsday.com/news/ny-bzwtc123581047dec12,0,7527185.story?coll=nyc-groundzero-headlines
+http://www.nynice.org/main.htm
+http://www.nynjtc.org/trails/longpath/
+http://www.nyobserver.com/pages/frontpage7.asp
+http://www.nyobserver.com/pages/observer.asp
+http://www.nyoi.ie/index.php?page=auditions&section=venues
+http://www.nypa.gov/ar03/pages/chair.htm
+http://www.nypl.org/branch/features/index2.cfm?PFID=250
+http://www.nypl.org/research/chss/spe/art/photo/pchist/pchist2.html
+http://www.nyplanning.org/variance_standards.html
+http://www.nypress.com/16/31/news&columns/signorile.cfm
+http://www.nypress.com/17/30/news&columns/ChristopherLord.cfm
+http://www.nysafp.org/November%202004%20Newsletter.htm
+http://www.nysais.org/page.cfm?p=78
+http://www.nyserda.org/programs/Green_Buildings/default.asp
+http://www.nysfair.org/state_fair/2005/html/every_day.shtml
+http://www.nysgis.state.ny.us/costanal.htm
+http://www.nysgis.state.ny.us/gateway/mg/glossary.htm
+http://www.nysgis.state.ny.us/reports/lulc/lulc5_04.htm
+http://www.nysia.org/events/calendar.cfm?year=2004&month=3
+http://www.nysl.nysed.gov/libdev/libs/pltypes.htm
+http://www.nyspirit.com/issue113/article2.html
+http://www.nyspsych.org/public/components/societytools/admin/viewNewnews.asp?ArticleID=2773&newsjob=ArticleID
+http://www.nyspsych.org/public/components/societytools/admin/viewNewnews.asp?ArticleID=3190&newsjob=ArticleID
+http://www.nysscpa.org/cpajournal/2004/604/essentials/p36.htm
+http://www.nysscpa.org/cpajournal/old/08135908.htm
+http://www.nysscpa.org/trustedprof/105/tp5.htm
+http://www.nystrs.org/main/library/divorce.html
+http://www.nysun.com/article/11727
+http://www.nysun.com/article/14429
+http://www.nysun.com/article/14604
+http://www.nysun.com/article/15291
+http://www.nysun.com/article/15628
+http://www.nysun.com/article/4530
+http://www.nysun.com/article/7163
+http://www.nysun.com/article/8199
+http://www.nysun.com/article/9508
+http://www.nysut.org/newyorkteacher/2000-2001/
+http://www.nysut.org/ra99/media/990422civility.html
+http://www.nyt.co.uk/robbie.glen.htm
+http://www.nytheatre.com/nytheatre/archweb/arch2003_e.htm
+http://www.nytimes.com/2004/10/07/technology/circuits/07cons.html
+http://www.nytimes.com/2005/01/16/international/europe/16estonia.html
+http://www.nytimes.com/2005/01/25/international/25cnd-trad.html
+http://www.nytimes.com/2005/02/01/science/earth/01conv.html
+http://www.nytimes.com/2005/06/10/sports/othersports/10olympic.html?fta=y&pagewanted=print
+http://www.nytimes.com/2005/06/13/business/13cardio.html?pagewanted=print
+http://www.nytimes.com/2005/06/15/nyregion/15heat.html
+http://www.nytimes.com/2005/06/15/nyregion/15heat.html?pagewanted=print
+http://www.nytimes.com/2005/06/16/garden/16kids.html?pagewanted=all
+http://www.nytimes.com/2005/06/18/international/europe/18europe.html
+http://www.nytimes.com/2005/06/18/international/europe/18europe.html?pagewanted=all
+http://www.nytimes.com/2005/06/18/national/18quake.html?8hpib
+http://www.nytimes.com/2005/06/19/magazine/19ADVISER.html
+http://www.nytimes.com/2005/06/19/nyregion/thecity/19long.html
+http://www.nytimes.com/2005/06/19/opinion/19brooks.html?pagewanted=all
+http://www.nytimes.com/2005/06/21/nyregion/21house.html
+http://www.nytimes.com/2005/06/21/politics/21cnd-bolton.html
+http://www.nytimes.com/2005/06/21/politics/21cnd-bolton.html?8bl
+http://www.nytimes.com/2005/06/22/automobiles/22auto.html?pagewanted=all
+http://www.nytimes.com/2005/06/22/automobiles/22auto.html?pagewanted=print
+http://www.nytimes.com/2005/06/23/nyregion/23crusade.html?pagewanted=all
+http://www.nytimes.com/2005/06/24/politics/24military.html
+http://www.nytimes.com/2005/06/25/science/25autism.html
+http://www.nytimes.com/2005/06/26/fashion/sundaystyles/26STUY.html?pagewanted=1&hp
+http://www.nytimes.com/2005/06/26/international/asia/26kazakhstan.html
+http://www.nytimes.com/2005/06/26/opinion/l26social.html?n=Top%2FOpinion%2FEditorials%20and%20Op-Ed%2FLetters
+http://www.nytimes.com/2005/06/27/sports/baseball/27mets.html
+http://www.nytimes.com/2005/07/02/politics/politicsspecial1/02bush.html
+http://www.nytimes.com/cfr/international/20050501faessay84309_grant.html?pagewanted=all
+http://www.nytimes.com/cfr/international/20050501faessay84310_arana.html?pagewanted=all
+http://www.nytimes.com/marketing/jobmarket/employercentral/help.html
+http://www.nytimes.com/nytstore/books/reference/NSGESSK.html
+http://www.nytimes.com/ref/membercenter/help/linkingfaq.html
+http://www.nyu.edu/classes/keefer/joe/boyd1.html
+http://www.nyu.edu/gallatin/current/ba/life-club.html
+http://www.nyu.edu/globalbeat/nato/johnson070898.html
+http://www.nyu.edu/hr/adjunct/uaw.html
+http://www.nyu.edu/hr/worklife/wldess05.html
+http://www.nyu.edu/projects/sciabarra/essays/wtcremember03.htm
+http://www.nyudh.org/nyudh/about.jsp
+http://www.nyym.org/qr/nyympa/wau/wapl09sep04.html
+http://www.nz-immigration.co.nz/new-zealand/clothing.html
+http://www.nzarchaeology.org/
+http://www.nzb.co.nz/news.cfm?content_id=387
+http://www.nzbooks.com/nzbooks/product.asp?sku=witiihimaera1877178160
+http://www.nzbwsc.co.nz/
+http://www.nzc.co.nz/m4m.html
+http://www.nzedge.com/heroes/park.html
+http://www.nzelectricity.co.nz/H4msc/030919.htm
+http://www.nzepc.auckland.ac.nz/seeingvoices/smither.asp
+http://www.nzfsa.govt.nz/consumers/food-safety-topics/chemicals-in-food/hemp/
+http://www.nzgirl.co.nz/articles/3879
+http://www.nzgovtdirectory.com/directory/section1/parties.htm
+http://www.nzherald.co.nz/index.cfm?ObjectID=3609330
+http://www.nzherald.co.nz/index.cfm?c_id=18&ObjectID=10330777
+http://www.nzherald.co.nz/index.cfm?c_id=3&ObjectID=10008575
+http://www.nzherald.co.nz/index.cfm?c_id=3&ObjectID=8500945
+http://www.nzherald.co.nz/index.cfm?l_id=146&ObjectID=10123980
+http://www.nzherald.co.nz/index.cfm?l_id=154&ObjectID=10330777
+http://www.nzherald.co.nz/storydisplay.cfm?storyID=3556647&thesection=technology&thesubsection=general&thesecondsubsection=
+http://www.nzhistory.net.nz/Gallery/parlt-hist/film.html
+http://www.nzhistory.net.nz/Gallery/police/erebus.html
+http://www.nzhorses.co.nz/Marketplace/Equipment.cfm
+http://www.nzhorses.co.nz/Marketplace/Equipment.cfm?CFID=3063087&CFTOKEN=24702460
+http://www.nzhorses.co.nz/Marketplace/Equipment.cfm?CFID=3168525&CFTOKEN=39464376
+http://www.nzmusic.com/post.cfm?i=219844
+http://www.nzmusic.org.nz/pag.cfm?i=812
+http://www.nzmusician.co.nz/index.php/ps_pagename/articledetail/pi_articleid/50
+http://www.nzonair.govt.nz/television_detail.php?pid=317&sid=300&st=r&title=&category=&producer=&broadcaster=&keywords=&searchset=200
+http://www.nzqa.govt.nz/framework/explore/domain.do?frameworkId=1125
+http://www.nzroses.org.nz/archive.htm
+http://www.nzsoccer.org.nz/thearms/Main.htm
+http://www.nzsportsacademy.co.nz/domestic.htm
+http://www.nzsportsacademy.co.nz/english/domestic.htm
+http://www.nzsportsacademy.co.nz/english/our_team.htm
+http://www.nzsta.org.nz/wContent.asp?PageID=100001424&LevelOne=100001424
+http://www.o4r.org/pf_v1n4/TextbookCase.htm
+http://www.o6t.com/index.cfm?articleid=338
+http://www.o6t.com/index.cfm?articleid=338&articleaction=get_email
+http://www.oa.mo.gov/pers/ClassSpecs/6047.htm
+http://www.oacusa.org/warstories.htm
+http://www.oafccd.com/factshee/fact69.htm
+http://www.oag-bvg.gc.ca/domino/other.nsf/html/01aa02_e.html
+http://www.oag-bvg.gc.ca/domino/reports.nsf/html/0032ce.html
+http://www.oag-bvg.gc.ca/domino/reports.nsf/html/0110ce.html
+http://www.oag-bvg.gc.ca/domino/reports.nsf/html/0205ce.html
+http://www.oag-bvg.gc.ca/domino/reports.nsf/html/0206ce.html
+http://www.oag.govt.nz/HomePageFolders/Publications/Publications.htm
+http://www.oag.govt.nz/HomePageFolders/Publications/audits.htm
+http://www.oag.state.md.us/Opinions/News/98-4.htm
+http://www.oag.state.ny.us/crime/neighborhood_watch/anti_crime_strategies.html
+http://www.oag.state.ny.us/press/2002/aug/aug29a_02.html
+http://www.oag.state.ny.us/press/2003/feb/feb10a_03.html
+http://www.oag.state.tx.us/newspubs/releases/2003/20030205dunnfacts.shtml
+http://www.oag.state.tx.us/newspubs/weeklyag/2005/0305all.html
+http://www.oag.state.tx.us/oagnews/release.php?id=134
+http://www.oag.state.tx.us/oagnews/release.php?id=502
+http://www.oag.state.tx.us/opinopen/og_faqs.shtml
+http://www.oah.org/
+http://www.oah.org/pubs/magazine/family/king.html
+http://www.oah.org/pubs/magazine/standards/nhs1.html
+http://www.oaim.org/marriage.html
+http://www.oakbox.com/article.cgi?p1048469389
+http://www.oakknoll.com/detail.php?d_booknr=33966
+http://www.oaklandairport.com/seir/notice_availability.shtml
+http://www.oaklandcc.edu/library/subAZ_psychology.htm
+http://www.oaklandcc.edu/library/subAZ_quick.htm
+http://www.oaklandlibrary.org/AAMLO/
+http://www.oaklands.co.nz/bambermore.html
+http://www.oaklandtribune.com/cda/article/print/0,1674,82~1726~677650,00.html
+http://www.oakparkrealtors.org/ComPro/Oak_Park/oak_park.html
+http://www.oakplus.com/html/5706.html
+http://www.oakplus.com/html/8417.html
+http://www.oakridger.com/progress/
+http://www.oakville.com/mississauga.asp
+http://www.oalj.dol.gov/Public/WBLOWER/decsn/97sta18a.htm
+http://www.oalj.dol.gov/cite.htm
+http://www.oalj.dol.gov/eduction.htm
+http://www.oalj.dol.gov/printdoc.htm?URL=%2Fcite.htm
+http://www.oalj.dol.gov/printdoc.htm?URL=%2Fpublic%2Fwblower%2Fdecsn%2F86era24e.htm
+http://www.oalj.dol.gov/printdoc.htm?URL=%2Fpublic%2Fwblower%2Fdecsn%2F94sta24a.htm
+http://www.oamk.fi/english/idps/bit/
+http://www.oamk.fi/english/idps/technology/
+http://www.oamk.fi/guide/2005/?page=selection
+http://www.oanda.com/products/fxnews/html/fxnews.shtml
+http://www.oandp.com/edge/issues/articles/2003-05_04.asp
+http://www.oandp.com/edge/issues/articles/2004-10_12.asp
+http://www.oandp.org/jpo/library/1998_02_042.asp
+http://www.oas.org/speeches/speech.asp?sCodigo=02-0398
+http://www.oas.org/usde/publications/Unit/oea02s/ch04.htm
+http://www.oas.org/usde/publications/Unit/oea04e/ch11.htm
+http://www.oas.org/usde/publications/Unit/oea54e/ch13.htm
+http://www.oasismag.com/node/view/1149
+http://www.oaxacaoaxaca.com/artisans.htm
+http://www.obanfarmpark.co.uk/holidays.html
+http://www.obdev.at/products/littlesnitch/docu/docu.html
+http://www.obeleoil.com/oilshock2.htm
+http://www.oberlin.edu/Geopage/projects/204projects/kolker/kolker.html
+http://www.oberlin.edu/allenart/exhibitions/woven/wp_05role.html
+http://www.oberlin.edu/alummag/oamcurrent/oam_winter2002/feat_looking3.htm
+http://www.oberlin.edu/coladm/onlineapplication/
+http://www.oberlin.edu/external/EOG/DAddarioHonors/DAddarioHonors-intro.htm
+http://www.oberlin.edu/newserv/02jan/blackhistory.html
+http://www.obfs.org/Jobs_Meet_Archv/announcements.html
+http://www.obgyn.net/avtranscripts/aium2000_tritsch.htm
+http://www.obgyn.net/displayarticle.asp?page=/firstcontroversies/prague1999sinha-arulkumaran
+http://www.obgyn.net/displayarticle.asp?page=/firstcontroversies/prague1999tucker
+http://www.obgyn.net/displayppt.asp?page=/english/pubs/features/presentations/shoham2/shoham2-ss
+http://www.obgyn.net/english/pubs/features/fibroids_dah.htm
+http://www.obgyn.net/women/features/Wiseman_chat_062398.htm
+http://www.obhe.ac.uk/products/reports/transcripts/discussion_february.html
+http://www.objectivismstore.com/pc-194-38-toc-live-2002-how-you-can-make-a-difference.aspx
+http://www.objectsbydesign.com/projects/python_example.html
+http://www.objectwatch.com/ata.htm
+http://www.oblivio.com/
+http://www.obmg.com/reelreports/index.asp?month=8
+http://www.observer.com/pages/frontpage5.asp
+http://www.observer.com/pages/frontpage5a.asp
+http://www.observer.com/pages/frontpage7.asp
+http://www.observer.com/pages/frontpage9.asp
+http://www.observer.com/pages/newyorkdiary.asp
+http://www.observer.com/pages/observer.asp
+http://www.observer.com/pages/world.asp
+http://www.observergroup.net/ob80back/stories.htm
+http://www.obsessionwithfood.com/
+http://www.obsi.ca/obsi/pages_english/invest_case06.php3
+http://www.obvious.fsnet.co.uk/tigers/tigers.htm
+http://www.obviously.com/recycle/guides/common.html
+http://www.obviously.com/recycle/guides/hard.html
+http://www.oc-j.com/july03/Ricketts4.htm
+http://www.oc-j.com/mar03/Ricketts_Interview_Part_3.htm
+http://www.oca.org/pages/ocaadmin/documents/holysynod/040203sexualmisconduct.html
+http://www.oca.org/pages/orth_chri/Q-and-A_OLD/Rules-and-Customs.html
+http://www.ocala.com/apps/pbcs.dll/article?AID=/20050629/NEWS/206290354/1003/news03
+http://www.ocala.com/apps/pbcs.dll/article?AID=/20050629/NEWS/206290354/1025
+http://www.ocallahan.com/fromjay/fall99.shtml
+http://www.ocastronomers.org/news.asp?action=print&article=135
+http://www.ocba.sa.gov.au/businessadvice/?friendly=printable
+http://www.occ.ac.uk/international_study.htm
+http://www.occ.treas.gov/99Rellst.htm
+http://www.occ.treas.gov/interp/aug99/intaug99.htm
+http://www.occ.treas.gov/jobs/info.htm
+http://www.occupationalhazards.com/articles/13555
+http://www.occupationalhazards.com/safety_zones/35/article.php?id=12868
+http://www.occupationalhazards.com/safety_zones/41/article.php?id=11806
+http://www.occupationalhazards.com/safety_zones/41/article.php?id=7113
+http://www.occupationalhazards.com/safety_zones/50/article.php?id=10468
+http://www.occupationalhazards.com/safety_zones/58/article.php?id=10467
+http://www.occupationwatch.org/analysis/archives/2005/05/blood_for_oil.html
+http://www.ocdcentre.com/pages/shwartz.htm
+http://www.ocdonline.com/articlephillipson1.htm
+http://www.ocdonline.com/articlephillipson2.htm
+http://www.ocean.com/Travel/Features/2001/09/
+http://www.ocean98.org/seahfiji.htm
+http://www.oceaniafootball.com/index.cgi?det=1&intArticleID=1475&sID=12
+http://www.oceanicresearch.org/crrainspt.html
+http://www.oceanmammalinst.org/w90.html
+http://www.oceannavigator.com/site/csrv/content.asp?id=1210
+http://www.oceans.gov.au/marine_industry_dev_strategy/page_006.jsp
+http://www.oceansatlas.org/cds_static/en/atlas_marine_activities_coastal_communities__en_1876_17511.html
+http://www.oceanstar.com/patti/crit/960602.htm
+http://www.oceanwildlife.com/stories/3kings1.htm
+http://www.oceanwings.co.nz/albatross/ocean_save/
+http://www.ocf.berkeley.edu/~sjlee/cometoberkeley.html
+http://www.ocf.berkeley.edu/~wrader/slang/p.html
+http://www.ocfoundation.org/ocf_0030.htm
+http://www.ocgs.org/society_foundation.asp
+http://www.ocipep.gc.ca/info_pro/self_help_ad/general/be_prep_e.asp
+http://www.ociweb.com/cnb/CORBANewsBrief-200301.html
+http://www.ocjobsite.com/job-articles/hire-yourself.asp
+http://www.oclc.org/middleeast/en/support/documentation/unionlist/using/userguide/appb/b.htm
+http://www.oclc.org/middleeast/en/support/documentation/worldcat/cataloging/userguide/appa.htm
+http://www.ocma.net/?page=join_events
+http://www.ocnus.net/artman/publish/article_16260.shtml
+http://www.ocnus.net/cgi-bin/exec/view.cgi?archive=60&num=15628
+http://www.oconeecounty.net/Government/Planning/
+http://www.ocri.ca/email_broadcasts/021405PartConference.html
+http://www.ocrid.org/events.html
+http://www.ocsa.on.ca/feedback/Hansard_2001/body_hansard_20010621f.html
+http://www.octobergallery.com/paintmagazine/pages/for_staying-motivated.html
+http://www.ocua.ca/node/view/16
+http://www.ocua.ca/title/1993+Bylaws
+http://www.ocv.org.uk/weasel.php
+http://www.ocvhs.com/publications/papersarticles/iklecture01.html
+http://www.ocweb.org/index.php/pre_nuptial/article/the_prenuptial_agreement_a_husbands_assumption_of_obligation/
+http://www.odac-info.org/PeakOilUKConferenceProceedings.htm
+http://www.odan.org/tw_opposition_to_canonization.htm
+http://www.odcmp.com/Competitions.htm
+http://www.odetocode.com/articles/323.aspx
+http://www.odi.org.uk/esau/publications/working_papers/esau_wp6_summary.html
+http://www.odi.org.uk/speeches/edc_2010/meeting_report_19november.html
+http://www.odi.org.uk/speeches/un2004/third_meeting_13_May/meeting3_print_friendly.html
+http://www.odiousdebts.org/odiousdebts/index.cfm?DSP=odo_news&NewsID=2119
+http://www.odod.state.oh.us/EDD/Loans_Grants.htm
+http://www.odod.state.oh.us/EDD/Tax_Credit.htm
+http://www.odod.state.oh.us/tech/titc/
+http://www.odot.state.or.us/techserv/bikewalk/planimag/importbw.htm
+http://www.odot.state.or.us/techserv/bikewalk/planimag/laws.htm
+http://www.odpm.gov.uk/pns/DisplayPN.cgi?pn_id=2003_0176
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_022696-05.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_028831.hcsp?s=1
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_028832.hcsp?s=1
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_029259-05.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_031212.hcsp?s=1
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_032072.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_about/documents/page/odpm_about_038271.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_communities/documents/page/odpm_comm_023301-06.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_fire/documents/page/odpm_fire_033558-03.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_homelessness/documents/page/odpm_home_029093-09.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_housing/documents/page/odpm_house_028080-04.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_housing/documents/page/odpm_house_033436-04.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_housing/documents/page/odpm_house_602542-02.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_housing/documents/page/odpm_house_609032-04.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_housing/documents/page/odpm_house_609039.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_localgov/documents/page/odpm_locgov_605087-16.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_localgov/documents/page/odpm_locgov_605189-02.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_023045.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_033609-03.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_033609-06.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_033609-30.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_033609-31.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_605856.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_605858.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_605908-01.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_606476-05.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_606896-06.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_607847-02.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_607847-06.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_607847-09.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_planning/documents/page/odpm_plan_609567.hcsp
+http://www.odpm.gov.uk/stellent/groups/odpm_regions/documents/page/odpm_regions_607900-16.hcsp
+http://www.odu.edu/ao/instadv/quest/AidsInChina.html
+http://www.odysseybks.com/textbooks.html
+http://www.oecd.org/dac
+http://www.oecd.org/dataoecd/62/63/1932624.htm
+http://www.oecd.org/department/0,2688,en_2649_22555297_1_1_1_1_1,00.html
+http://www.oecd.org/department/0,2688,en_2649_33721_1_1_1_1_1,00.html
+http://www.oecd.org/department/0,2688,en_2649_33757_1_1_1_1_1,00.html
+http://www.oecd.org/department/0,2688,en_2649_34105_1_1_1_1_1,00.html
+http://www.oecd.org/document/10/0,2340,en_2649_34831_32682826_1_1_1_1,00.html
+http://www.oecd.org/document/15/0,2340,en_2649_34489_2007183_1_1_1_1,00.html
+http://www.oecd.org/document/18/0,2340,en_2649_34173_4139666_1_1_1_1,00.html
+http://www.oecd.org/document/18/0,2340,en_2649_34221_4139666_1_1_1_1,00.html
+http://www.oecd.org/document/18/0,2340,fr_2649_34221_4139666_1_1_1_1,00.html
+http://www.oecd.org/document/21/0,2340,en_33873108_33873402_33633173_1_1_1_1,00.html
+http://www.oecd.org/document/21/0,2340,fr_33873108_33873402_33633173_1_1_1_1,00.html
+http://www.oecd.org/document/30/0,2340,en_2649_34385_2074974_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,en_2649_201185_34972080_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,en_2649_34111_34972080_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,en_2649_34487_34972080_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,en_2649_37443_33702064_1_1_1_37443,00.html
+http://www.oecd.org/document/48/0,2340,en_2649_37443_34972080_1_1_1_37443,00.html
+http://www.oecd.org/document/48/0,2340,en_2825_32066506_33702064_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,fr_2649_201185_34972080_1_1_1_1,00.html
+http://www.oecd.org/document/48/0,2340,fr_2649_34487_34972080_1_1_1_1,00.html
+http://www.oecd.org/document/5/0,2340,en_33873108_33873764_33701381_1_1_1_1,00.html
+http://www.oecd.org/document/52/0,2340,en_2649_34665_2488035_1_1_1_1,00.html
+http://www.oecd.org/document/56/0,2340,en_2649_201185_34992056_1_1_1_1,00.html
+http://www.oecd.org/document/56/0,2340,en_2649_34487_34992056_1_1_1_1,00.html
+http://www.oecd.org/document/56/0,2340,en_33873108_33873376_34992056_1_1_1_1,00.html
+http://www.oecd.org/document/56/0,2340,fr_2649_201185_34992056_1_1_1_1,00.html
+http://www.oecd.org/document/61/0,2340,en_2649_201185_31460861_1_1_1_1,00.html
+http://www.oecd.org/document/61/0,2340,fr_2649_201185_31460861_1_1_1_1,00.html
+http://www.oecd.org/document/62/0,2340,en_2649_201185_31935102_1_1_1_1,00.html
+http://www.oecd.org/documentprint/0,2744,en_2649_201185_34820463_1_1_1_1,00.html
+http://www.oecd.org/documentprint/0,2744,en_2649_201185_34972080_1_1_1_1,00.html
+http://www.oecd.org/home/
+http://www.oecd.org/statsportal/0,2639,en_2825_293564_1_1_1_1_1,00.html
+http://www.oecd.org/topic/0,2686,en_2649_37413_1_1_1_1_37413,00.html
+http://www.oecd.org/topic/0,2686,en_2649_37439_1_1_1_1_37439,00.html
+http://www.oecdobserver.org/news/categoryfront.php/id/82/Ireland.html
+http://www.oecdobserver.org/news/fullstory.php/aid/1081/Population_ageing:_Facing_the_challenge.html
+http://www.oecdobserver.org/news/fullstory.php/aid/1373/Was_it_worth_it__.html
+http://www.oecdobserver.org/news/fullstory.php/aid/1516/European_monetary_policy.html
+http://www.oecdobserver.org/news/fullstory.php/aid/236/Trucks:_the_road_to_ruin_or_increased_efficiency_.html
+http://www.oecdobserver.org/news/fullstory.php/aid/673/The_brain_drain:_Old_myths,_new_realities.html
+http://www.oecdobserver.org/news/fullstory.php/aid/713/Wanted:_Jubilee_2010.html
+http://www.oecdobserver.org/news/fullstory.php/aid/824/Retiring_later_makes_sense.html
+http://www.oecdobserver.org/news/fullstory.php/aid/872/The_learning_business.html
+http://www.oecdwash.org/
+http://www.oecdwash.org/PUBS/PERIOD/per-crs.htm
+http://www.oefre.unibe.ch/law/icl/sa00000_.html
+http://www.oeg-messtechnik.de/english/1d1.htm
+http://www.oehha.ca.gov/prop65/out_of_date/122200not.html
+http://www.oehs.wayne.edu/OEH&S/rtkprog.html
+http://www.oeronline.com/php/2001_may_june/main4.php
+http://www.ofb.biz/modules.php?name=News&file=article&sid=265
+http://www.ofb.biz/modules.php?name=News&file=article&sid=338
+http://www.ofbyandfor.org/weblink?from=60
+http://www.ofcn.org/cyber.serv/academy/ace/soc/cecsst/cecsst002.html
+http://www.ofcom.org.uk/licensing_numbering/numbers/numbers_administered/?a=87101
+http://www.ofcom.org.uk/licensing_numbering/tele_gen_auth/gcoe/?a=87101
+http://www.ofcom.org.uk/media/speeches/2005/01/eforum_cs
+http://www.ofcom.org.uk/media/speeches/2005/01/eforum_cs?view=Welsh
+http://www.ofcom.org.uk/static/archive/oftel/publications/consumer/bill0200.htm
+http://www.ofes.fusion.doe.gov/More_HTML/Artsimovich/Palumbo1980.html
+http://www.off-road.com/jeep/questions/2005_04/
+http://www.off-road.com/rick/class_feb.html
+http://www.office-ergo.com/12things2.htm
+http://www.office1000.com/discount/boards-display-dry-erase.html
+http://www.officefile.co.uk/Directory/vending-machine-sales-service.htm
+http://www.officefile.co.uk/Directory/window-cleaners.htm
+http://www.officefile.co.uk/Directory/window-installers.htm
+http://www.officefile.co.uk/Directory/window-manufacturers.htm
+http://www.official-documents.co.uk/document/deps/ofsted/170/10-independent.html
+http://www.officialforum.com/printthread.php?threadid=17507
+http://www.officialforum.com/showthread.php?threadid=17507&pagenumber=2
+http://www.officialforum.com/showthread.php?threadid=17630&pagenumber=2
+http://www.offoffoff.com/theater/2004/corporaterock.php
+http://www.offordcentre.com/rsd/hac/report/06-6.html
+http://www.offpistemag.com/themag/features/vol3/girlbomb.html
+http://www.offroad-motorsport.com/
+http://www.offroaders.com/info/tech-corner/reading/sand_dri.htm
+http://www.offshore-environment.com/news.html
+http://www.offshore-technology.com/projects/cook/
+http://www.offthetelly.co.uk/comedy/improv.htm
+http://www.offthetelly.co.uk/interviews/markwright.htm
+http://www.offthetelly.co.uk/interviews/nigelplaskitt.htm
+http://www.ofsted.gov.uk/publications/index.cfm?fuseaction=pubs.displayfile&id=2583&type=pdf
+http://www.ofsted.gov.uk/publications/index.cfm?fuseaction=pubs.displayfile&id=3546&type=doc
+http://www.ofsted.gov.uk/publications/index.cfm?fuseaction=pubs.displayfile&id=3591&type=pdf
+http://www.ofsted.gov.uk/publications/index.cfm?fuseaction=pubs.displayfile&id=3674&type=pdf
+http://www.ofswa.on.ca/thelog/july2001/page1.html
+http://www.oft-aft.org/In.the.news/CharterSchls/2002/3.30.02.htm
+http://www.oft.gov.uk/Business/Mergers+FTA/Advice/Clearances+and+referrals/Duralay.htm
+http://www.og.dti.gov.uk/consultations/consultation180902.htm
+http://www.og.dti.gov.uk/glossary.htm
+http://www.og.dti.gov.uk/upstream/infrastructure/frametxt.htm
+http://www.ogc.doc.gov/ogc/legreg/testimon/106s/reinsch0404.htm
+http://www.ogi.edu/graduate_edu/textbooks/spring.cfm
+http://www.ogilvy.com/viewpoint/view_ko.php?id=10214&iMagaId=7
+http://www.ogilvy.com/viewpoint/view_ko.php?id=41319&iMagaId=-1
+http://www.ogp.noaa.gov/mpe/clivar/pacific/fy99/wang99.htm
+http://www.ogra.org/lib/db2file.asp?fileid=8697
+http://www.oha.com/Client/OHA/OHA_LP4W_LND_WebStation.nsf/page/Government+Funding+Announcement+Performance+Agreement+Sign+Back
+http://www.oha.doe.gov/cases/eia/vee0028.htm
+http://www.ohchr.org/english/law/freedom.htm
+http://www.ohgosh-buttons.com/black1.html
+http://www.ohiaai.org/iaai_chapter_news.html
+http://www.ohio.com/mld/ohio/sports/columnists/marla_ridenour/
+http://www.ohioafp.org/wfmu/index.php?issue=64
+http://www.ohioarchaeology.org/simonelli_10_2003.html
+http://www.ohiodems.org/index.php?display=ArticleDetails&id=544330
+http://www.ohiodnr.com/dnap/location/smith_cemetery.html
+http://www.ohiodnr.com/forestry/Education/ohiotrees/maplered.htm
+http://www.ohiodnr.com/wildlife/Resources/wildohio/wildohiolink.htm
+http://www.ohiogreens.org/newsletters/011110.html
+http://www.ohiohistory.org/places/harding/
+http://www.ohiohistory.org/places/natlroad/
+http://www.ohiohistorycentral.org/ohc/history/ocoa/peo/truths.shtml
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-001.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-002.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-003.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-032.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-045.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/05-048.asp
+http://www.ohionationalguard.com/jobs/Tech%20Jobs/347-04.asp
+http://www.ohiou.edu/recreation/is/RULES/flrhcky_rules2.htm
+http://www.ohiou.edu/researchnews/extracredit/article2a.html
+http://www.ohiou.edu/writing/teaching_writing_in_large_classes.htm
+http://www.ohn.gov.uk/glossary/h.htm
+http://www.ohr.psu.edu/lifeevents/absence/
+http://www.ohr.psu.edu/lifeevents/begin/
+http://www.ohrc.on.ca/en_text/consultations/race-policy-dialogue-paper-jar.shtml
+http://www.ohrp.umd.edu/faculty/fsa/fsa1998.html
+http://www.ohrpa.on.ca/jobposting.html
+http://www.ohsrep.org.au/hazards/Cold.html
+http://www.ohsrep.org.au/hazards/mobiles.html
+http://www.ohsrep.org.au/hazards/nonionising.html
+http://www.ohsu.edu/about/plan/
+http://www.ohsu.edu/csail/prog01.html
+http://www.oic.gov.ie/252a_3c2.htm
+http://www.oidmg.org/page_tmp/oib/Iraq_Conference_Report.htm
+http://www.oie.int/eng/normes/en_mcode.htm
+http://www.oie.int/eng/normes/mcode/en_chapitre_1.3.7.htm
+http://www.oie.int/eng/normes/mmanual/A_00015.htm
+http://www.oie.int/eng/normes/mmanual/A_00020.htm
+http://www.oie.int/eng/normes/mmanual/A_00073.htm
+http://www.oie.int/eng/normes/mmanual/A_00138.htm
+http://www.oii.ox.ac.uk/about/?rq=history
+http://www.oikos.org/ecology/freehome.htm
+http://www.oil.dbxexpo.com/top%2025%20interview/nzar%20alhafod%20en.htm
+http://www.oilcareers.com/content/community/board/view.asp?mode=viewtopic&topicID=354
+http://www.oilcrisis.com/campbell/update2002.htm
+http://www.oilcrisis.com/laherrere/disctrnd.htm
+http://www.oilcrisis.com/us/ca/texas/
+http://www.oildepletion.org/roger/summary/summary.htm
+http://www.oilempire.us/abiotic.html
+http://www.oilempire.us/media.html
+http://www.oilempire.us/peakoil.html
+http://www.oilpaintingtechniques.com/
+http://www.oilrecycling.gov.au/admin-guidelines/section-3.html
+http://www.oilrecycling.gov.au/annual-report02/chapter4.html
+http://www.oilseedrape.com/pages/trials/stand_pow_tab.htm
+http://www.oilsite.com/
+http://www.oilspillresponse.com/about/aboutus.html
+http://www.oilstick.com/rparks/boatreunion/bio.htm
+http://www.oir.uiuc.edu/assessment/plans/agricultural_and_consumer_econom.htm
+http://www.oireachtas.ie/viewdoc.asp?fn=/documents/a-misc/leg.htm
+http://www.oise.utoronto.ca/cwse/summerinst_05.htm
+http://www.oise.utoronto.ca/depts/aecdcp/teach/ts2.html
+http://www.oise.utoronto.ca/field-centres/TVC/RossReports/vol4no3.htm
+http://www.oisf.org.uk/0145prog.htm
+http://www.oiss.wayne.edu/Info_F1F2/F1_OPT.html
+http://www.oit.nsw.gov.au/Guidelines/4.3.6.d-CC-Operational.asp
+http://www.oit.umass.edu/virus/malware.html
+http://www.ojaiblog.com/
+http://www.ojar.com/view_5771.htm
+http://www.ojar.com/view_740.htm
+http://www.ojar.com/view_935.htm
+http://www.ojp.usdoj.gov/bjs/pub/ascii/cp96.txt
+http://www.ojp.usdoj.gov/bjs/pub/ascii/soo.txt
+http://www.ojp.usdoj.gov/nij/dnamtgtrans/trans-j.html
+http://www.ojp.usdoj.gov/nij/dnamtgtrans5/trans-i.html
+http://www.ojp.usdoj.gov/ovc/publications/infores/restorative_justice/96522-multicultural/multi9.html
+http://www.ojp.usdoj.gov/ovc/publications/infores/vestmtl/trainout.htm
+http://www.ojr.org/ojr/business/1062025099.php
+http://www.ojr.org/ojr/glaser/1054844800.php
+http://www.ojr.org/ojr/stories/050405glaser/
+http://www.okcca.net/online/oujis/oujisrvr.jsp?oc=OUJI-CR%209-10
+http://www.okdocc.state.ok.us/TITLE160/chapter45.php
+http://www.okea.org/ESEA/actionresources/TQ.html
+http://www.okefenokee.com/tourmotor.htm
+http://www.okefenokee.com/tourspaddling.htm
+http://www.okemo.com/learning/skisnbtips.html
+http://www.okemosweb.com/Allegra.html
+http://www.okfamilypc.org/marriage_initiative.htm
+http://www.okhighered.org/ohlap/funding-update.shtml
+http://www.okinawajet.com/yak/2003/november/typhoon14/
+http://www.okinawatimes.co.jp/eng/20020427.html
+http://www.okisemi.com/jp/english/arm-top.htm
+http://www.oklahomahomeschool.com/unitstudies.html
+http://www.oklahomaredhawks.com/contact/
+http://www.okmedicalboard.org/miscFunction.php?filename=20030301MD.htm&header=1
+http://www.okmoga.com/tour.html
+http://www.oktax.state.ok.us/faq.html
+http://www.okusi.net/garydean/works/seatrade.html
+http://www.olapreport.com/How_not_to_buy.htm
+http://www.olapreport.com/fasmi.htm
+http://www.olasky.com/Questions/Obrother.html
+http://www.olats.org/africa/projets/gpEau/pouvoir/contrib/contrib_malina_alan.shtml
+http://www.olcsoft.com/select_0601.htm
+http://www.old-time.com/sfx.html
+http://www.oldamericancentury.org/
+http://www.oldamericancentury.org/dave300014.htm
+http://www.oldandsold.com/articles02/article1143.shtml
+http://www.oldbaileyonline.org/history/crime/punishment.html
+http://www.oldbexleians.co.uk/pupils.asp?year=1970
+http://www.oldcampbellians.co.uk/NoticeBoard/notice_board.htm
+http://www.oldcitycemetery.com/InNews/Bee0998.htm
+http://www.oldcountrytours.com/greatgardens.htm
+http://www.oldcourse-experience.com/data/enquiries/enquiries.htm
+http://www.olddalriads.com/forum.htm
+http://www.oldeenglish.org/board/viewtopic.php?p=5413
+http://www.oldegoodthings.com/newsletter6.htm
+http://www.oldengine.org/shows/NAMES98/
+http://www.olderhomelessness.org.uk/?section=5&topic=3&article=0
+http://www.oldfortjohnson.org/arch1.html
+http://www.oldham.gov.uk/contrast/living/every_child_matters/ecm-task-groups.htm
+http://www.oldham.gov.uk/living/every_child_matters/ecm-task-groups.htm
+http://www.oldhousejournal.com/notebook/npsbriefs/brief12.shtml
+http://www.oldies.com/product/view.cfm/id_042987.html
+http://www.oldies.com/product/view.cfm/id_56252.html
+http://www.oldmanriver.com/solar/sunny_side.htm
+http://www.oldmansea.com/press/press5.htm
+http://www.oldmutual.co.za/MarketWatch/todaysnews.asp?content=bus
+http://www.oldmutual.co.za/aboutom/Vacancies/Details.asp?Assignment_Number=CS3436
+http://www.oldmutual.co.za/coza_store/templates/Article1.asp?id=42
+http://www.oldmutual.co.za/coza_store/templates/Article1.asp?id=489
+http://www.oldnautibits.com/features/aerofeature6.shtml
+http://www.oldnewspublishing.com/story1.htm
+http://www.oldno9.org/artists.html
+http://www.oldradioworld.de/gollum/analysis.htm
+http://www.oldwestnews.com/aboutoldwestnews.html
+http://www.olegdulin.com/index.php/archives/2004/10/12/official-sources-are-not-recognized-by-wizbang/
+http://www.olemiss.edu/courses/ce407/exp_S1.html
+http://www.olemiss.edu/depts/english/ms-writers/dir/faulkner_william/
+http://www.olemiss.edu/mwp/books/1997/september.html
+http://www.olemiss.edu/mwp/books/1998/november.html
+http://www.olemiss.edu/mwp/books/2001/february.html
+http://www.olemiss.edu/mwp/dir/bosco_joseph/
+http://www.olemiss.edu/mwp/dir/faulkner_william/
+http://www.olf.gouv.qc.ca/english/charter/title1chapter7.html
+http://www.oli.org/for_teachers/oli_cdrom/lessons/6_la_lp.html
+http://www.olin.msu.edu/factsheet.php?id=11
+http://www.olivado.co.nz/avocadooil.htm
+http://www.olivefilms.com/info.html
+http://www.olivegarden.com/ourcommunity/rules.asp
+http://www.olrb.gov.on.ca/english/homepage.htm
+http://www.olsen-twins-news.com/index.php?p=118
+http://www.olympia-antiques.co.uk/FAAF/Summer/FAAFPRSU.nsf/prs/47CA11E40BBC045480256FBD005CD272
+http://www.olympia-antiques.com/FAAF/Summer/FAAFPRSU.nsf/prs/47CA11E40BBC045480256FBD005CD272
+http://www.olympic.ca/EN/organization/news/2004/0804_2.shtml
+http://www.olympic.ca/EN/organization/news/2004/0804_3.shtml
+http://www.olympic.org/uk/games/past/index_uk.asp?OLGT=1&OLGY=1968
+http://www.olympic.org/uk/games/past/index_uk.asp?OLGT=1&OLGY=1984
+http://www.olympic.org/uk/organisation/commissions/women/full_story_uk.asp?id=350
+http://www.olympicholidays.co.uk/info.asp?item=SPAS
+http://www.olympichotelsf.com/html/union-square-san-francisco-downtown-dining.html
+http://www.olympics.org.uk/training/lofer.asp
+http://www.olympus.net/olympusnet/services/dsl/
+http://www.olympusamerica.com/pss_section/pss_faq.asp
+http://www.olympusfluoview.com/resources/fluoviewusers.html
+http://www.olywa.net/cagle/seatails/
+http://www.olywa.net/speech/october99/candidates.html
+http://www.om.org/newsbytes/0105.jsp
+http://www.oma.org/phealth/position.htm
+http://www.omaid.com/english_section/in_the_press/geoPolitics_pTomsen_Feb01.htm
+http://www.omarmasry.net/islamofacists.htm
+http://www.omatrix.com/manual/glossary_frame1.htm
+http://www.ombud.gov.bc.ca/reports/Public_Reports/PR33_river/RIVER3.html
+http://www.ombwatch.org/article/archive/48/50?TopicID=1
+http://www.ombwatch.org/article/articleview/213/1/1
+http://www.ombwatch.org/article/articleview/2529/1/231?TopicID=3
+http://www.omdec.com/articles/reliability/demoCBMadvancedDiscussion.html
+http://www.omegabyte.com/support_technical_whatwesupport.htm
+http://www.omegachess.com/chesslinks.htm
+http://www.omegapage.com/briceland/home.htm
+http://www.omg.org/gettingstarted/process2-RFP.htm
+http://www.omgcenter.org/pew/051304session-final.html
+http://www.omhrc.gov/clas/guide3a.asp
+http://www.omhrc.gov/ctg/full-mhm.htm
+http://www.omic.com/resources/risk_man/deskref/medicaloffice/managedcare/9.cfm
+http://www.omidyar.net/group/help/ws/Help%20on:%20Home/
+http://www.omidyar.net/group/showcase/news/61/
+http://www.omiinc.com/awards.html
+http://www.omiworld.org/DocumentationDettaglio.asp?L=1&I=35
+http://www.omiworld.org/DocumentationDettaglioPrintable.asp?L=1&I=35
+http://www.omnexus.com/resources/articles/article.aspx?id=4758
+http://www.omnistraining.com/200404NZOZ.html
+http://www.omnium.com/bil/
+http://www.omnology.com/gurps-levels.html
+http://www.omplace.com/articles/PriceOnPriceless.html
+http://www.omplace.com/om_articles/OnComingtoTermswiththePWord.html
+http://www.omsoul.com/totbbib.phtml
+http://www.omta.net/
+http://www.on-luebeck.de/friendship_force/gready.htm
+http://www.on-samui.com/stories/blessings.html
+http://www.on-the-net.com/interskills/minis/business.htm
+http://www.on-this-day.com/onthisday/thedays/alldays/dec01.htm
+http://www.on.ec.gc.ca/pollution/fpd/csap/intro-e.html
+http://www.onagocag.com/nazca.html
+http://www.onceinoticediwasonfireidecidedtorelaxandenjoythefall.org/merkabah/archives/000637.html
+http://www.onceuponalife.com/forums/archive/index.php/t-9331
+http://www.oncewritten.com/Excerpts/2003-07/AlaskaTales.htm
+http://www.oncfs.gouv.fr/events/game_wildlife/instructions-uk.php
+http://www.oncolink.com/treatment/article.cfm?c=2&s=10&id=117
+http://www.oncolink.com/treatment/article.cfm?c=2&s=9&id=72
+http://www.oncourseworkshop.com/Interdependence010.htm
+http://www.ondemandjournal.com/specialfeatures/nagi11.cfm
+http://www.ondemandjournal.com/specialfeatures/presstek16.cfm
+http://www.ondoctrine.com/2spurgeo.htm
+http://www.ondreaming.com/theories/
+http://www.one-europe.ac.uk/cgi-bin/esrc/world/db.cgi/proj.htm?id=6
+http://www.one-ring.co.uk/index.php?page=-1&type=article&artid=240
+http://www.onebee.com/writing/2005/06/intelligent_design_theory
+http://www.onecountry.org/e132/e13212as_Education_for_Peace.htm
+http://www.onefinedayky.com/what.htm
+http://www.onehumanrace.com/docs/cains_wife.asp
+http://www.oneia.ca/NewsArch804.asp
+http://www.onekit.com/store/reviews/graphics_and_design/200407.html
+http://www.onelegacy.org/prod/components/donation/stories.html
+http://www.onelittleangel.com/wisdom/quotes/philo.asp?mc=62
+http://www.oneofus.co.uk/articles/on_being_a_responsible_writer.htm
+http://www.onepaper.com/stthomasvi/?v=d&i=&s=News:Local&p=1105685689
+http://www.onepeoplesproject.com/index2.php?option=content&task=view&id=562&pop=1&page=0
+http://www.onepica.com/
+http://www.oneplusoneequalsthree.com/2004/12/
+http://www.oneroofentertainment.com/press_onestopshop.html
+http://www.onestepatatime.com/
+http://www.onestopenglish.com/ProfessionalSupport/ask/methodology.htm
+http://www.onestopenglish.com/english_grammar/prepositions_tefl_esl.htm
+http://www.onestopenglish.com/teaching_minimal_resources/craven_2tips.htm
+http://www.onestopenglish.com/teaching_minimal_resources/writing_lind_adr.htm
+http://www.onestopenglish.com/tefl_esl_warmers/icebreaker.htm
+http://www.onestopenglish.com/tefl_esl_warmers/stand.htm
+http://www.onestops.info/article.php?article_id=50&subcat_id=8
+http://www.onetalentsource.com/view_article/14/
+http://www.onetao.com/
+http://www.onetongorilla.com/
+http://www.onetongorilla.com/archives/2005/01/
+http://www.onetrick.net/dvd.htm
+http://www.oneworld-publications.com/samples/daoism.htm
+http://www.oneworldchallenge.com/news/archive/02112002.html
+http://www.onfocus.com/2003/10/
+http://www.onherown.net/modules.php?name=News&file=article&sid=126
+http://www.onjava.com/pub/a/onjava/2002/07/31/java3.html
+http://www.onjava.com/pub/a/onjava/2003/03/12/pmd_cpd.html
+http://www.onjava.com/pub/a/onjava/2004/01/21/dbunit.html
+http://www.onjava.com/pub/a/onjava/2005/06/01/kgpjava.html
+http://www.onjava.com/pub/a/onjava/2005/06/01/kgpjava_part2.html
+http://www.onlamp.com/pub/a/onlamp/2004/01/29/scm_overview.html
+http://www.onlamp.com/pub/a/php/2001/04/26/php_admin.html
+http://www.onlamp.com/pub/a/security/2004/09/16/open_source_security_myths.html
+http://www.online-dictionary.net/computer/index.php
+http://www.online-learning.com/papers/articlementored.html
+http://www.online-literature.com/agatha_christie/mysterious_affair_styles/6/
+http://www.online-literature.com/alcott/jack_and_jill/22/
+http://www.online-literature.com/anton_chekhov/1173/
+http://www.online-literature.com/chesterton/man_knew_much/1/
+http://www.online-literature.com/darwin/voyage_beagle/7/
+http://www.online-literature.com/doyle/beyond_city/15/
+http://www.online-literature.com/fyodor-sologub/1969/
+http://www.online-literature.com/george_bernard_shaw/1101/
+http://www.online-literature.com/george_bernard_shaw/devil_disciple/9/
+http://www.online-literature.com/hardy/blue_eyes/18/
+http://www.online-literature.com/hardy/casterbridge/24/
+http://www.online-literature.com/hardy/woodlanders/24/
+http://www.online-literature.com/henry_james/beast_in_jungle/5/
+http://www.online-literature.com/henry_james/wings_dove/16/
+http://www.online-literature.com/henry_james/wings_dove/21/
+http://www.online-literature.com/john-buchan/huntingtower/12/
+http://www.online-literature.com/john-mcelroy/red-acorn/7/
+http://www.online-literature.com/js-fletcher/talleyrand-maxim/16/
+http://www.online-literature.com/leroux/phantom_opera/24/
+http://www.online-literature.com/orwell/1984/1/
+http://www.online-literature.com/orwell/1984/13/
+http://www.online-literature.com/ralph-barbour/behind-the-line/2/
+http://www.online-literature.com/shakespeare/lovelost/7/
+http://www.online-literature.com/shakespeare/measure/
+http://www.online-literature.com/shakespeare/measure/5/
+http://www.online-literature.com/shakespeare/midsummer/
+http://www.online-literature.com/shakespeare/romeo_and_juliet/27/
+http://www.online-literature.com/shakespeare/timonofathens/9/
+http://www.online-literature.com/stowe/uncletom/17/
+http://www.online-literature.com/swift/gulliver/
+http://www.online-literature.com/twain/320/
+http://www.online-literature.com/twain/huckleberry_finn/
+http://www.online-literature.com/victor_hugo/les_miserables/122/
+http://www.online-literature.com/victor_hugo/les_miserables/362/
+http://www.online-literature.com/wilde/being_earnest/4/
+http://www.online-literature.com/wordsworth/528/
+http://www.online-sweepstakes.com/forums/showthread.php?t=216075
+http://www.online-visions.com/challenges/0306solved-3.html
+http://www.online.bg/onlinebgcom/elections.html
+http://www.onlineartmall.com/limited/paulhorton/
+http://www.onlineathens.com/stories/031404/opi_20040314004.shtml
+http://www.onlineathens.com/stories/100604/opi_20041006009.shtml
+http://www.onlinebristol.com/index.cfm/ID/80/Page/African-American_History
+http://www.onlinebusadv.com/feb99train.html
+http://www.onlineclarity.co.uk/I_Ching_community/e-answers59.html
+http://www.onlinecreditcenter2.com/sams/rfs_credit_terms.html
+http://www.onlineinaminute.com/Templates-Personal/allinthefamily-family.htm
+http://www.onlinejournal.com/Commentary/010705Dodgins/010705dodgins.html
+http://www.onlinejournal.com/Commentary/020205Engel/020205engel.html
+http://www.onlinelawyersource.com/androstenedione/
+http://www.onlineopinion.com.au/June00/Stilwell.htm
+http://www.onlineopinion.com.au/onlinefocus/qld-election-2004/candidates.asp?id=189
+http://www.onlineopinion.com.au/view.asp?article=1429
+http://www.onlineopinion.com.au/view.asp?article=1473
+http://www.onlineopinion.com.au/view.asp?article=1739
+http://www.onlineopinion.com.au/view.asp?article=2694
+http://www.onlineopinion.com.au/view.asp?article=3342
+http://www.onlineopinion.com.au/view.asp?article=3583
+http://www.onlineopinion.com.au/view.asp?article=378
+http://www.onlineopinion.com.au/view.asp?article=786
+http://www.onlineoriginals.com/showitem.asp?itemID=104
+http://www.onlinepolicy.org/action/legpolicy/opg_v_diebold/
+http://www.onlinepot.org/legal/copstops4.htm
+http://www.onlinereviewlondon.com/reviews/Bombshells.html
+http://www.onlineseats.com/a-walk-down-abbey-road-tickets/index.asp
+http://www.onlinesports.com/sportstrust/sports30.html
+http://www.onlinewbc.gov/docs/finance/captoo.html
+http://www.onlinewbc.gov/docs/finance/insure_types.html
+http://www.onlinewbc.gov/docs/manage/SoMuchTime.html
+http://www.onlinewbc.gov/docs/manage/bod.html
+http://www.onlinewbc.gov/docs/manage/comm_style.html
+http://www.onlinewbc.gov/docs/market/mk_net_ready.html
+http://www.onlinewbc.gov/successofthemonth.html
+http://www.onlineweb.com/theones/1975_1979.htm
+http://www.onlineworkshops.com/
+http://www.onlisareinsradar.com/archives/002153.php
+http://www.onlisareinsradar.com/archives/free_mike_hawash/index.php
+http://www.only4ukids.com/knowledge/life/animals/marinevariety/index.shtml
+http://www.onlybaseballmatters.com/
+http://www.onlylyrics.com/song.php?id=28083
+http://www.onphilanthropy.com/bestpract/bp2005-01-29.html
+http://www.onphilanthropy.com/tren_comm/tc2004-06-18.html
+http://www.onr.navy.mil/
+http://www.onrec.com/content2/news.asp?ID=2530
+http://www.onrglobal.navy.mil/fleetforces/faqs.asp
+http://www.onsightergo.com/articles/palmrestarticle.html
+http://www.onspanishtime.com/web/testimonials3.htm
+http://www.ont-woodlot-assoc.org/info_pub_guide.html
+http://www.ont.com/users/kolya/AR15/aw94.htm
+http://www.ontario.anglican.ca/sunday_by_sunday_a.htm
+http://www.ontarioaccommodation.com/alliedmem.htm
+http://www.ontariodeerelkfarmers.com/venison.shtml
+http://www.ontariogenomics.ca/research_programs/applied_genomics.asp
+http://www.ontarioironworkers.com/BF_claim.HTM
+http://www.ontariosciencecentre.ca/media/default.asp?releaseid=867
+http://www.ontariosciencecentre.ca/school/curriculum/primary.asp
+http://www.ontariosciencecentre.ca/scizone/e3/truth/default.asp
+http://www.ontariosiresstakes.com/2004/leaders/horseleaders.html?gait=P&age=2&sex=C
+http://www.ontariosiresstakes.com/2004/leaders/horseleaders.html?gait=P&age=2&sex=F
+http://www.ontcm.com/dise/obes/main.htm
+http://www.onthemove.ualberta.ca/index.aspx?Page=18
+http://www.ontherail.com/business/big_pork.html
+http://www.ontla.on.ca/documents/Bills/38_Parliament/Session1/b080_e.htm
+http://www.ontla.on.ca/hansard/committee_debates/36_parl/session1/estimates/e028.htm
+http://www.ontological.com/rf/rfarchives/rftexts/SUPPOSE.html
+http://www.ontruck.org/careers/drivertraining.htm
+http://www.oo-rah.com/Store/seastories/ss36.asp
+http://www.ooaq.qc.ca/Mai/bruitsecoute_an.html
+http://www.oodiscs.com/oo64.html
+http://www.oomyungdoe.com/main.asp
+http://www.oosa.unvienna.org/isis/highlights2000/sect5a.html
+http://www.oosterhoff.info/diary/2000/germany2.html
+http://www.ooyc.org/
+http://www.op.nysed.gov/dec01.htm
+http://www.opc.org/new_horizons/NH00/0002c.html
+http://www.opcw.org/html/db/cwc/eng/cwc_annex_verification_part_VI.html
+http://www.opcw.org/regpub/index_afr_en.html
+http://www.opcw.org/regpub/index_asia_en.html
+http://www.opdv.state.ny.us/legislation/summary00.html
+http://www.ope.vic.gov.au/domino/Web_Notes/OPE/rwp553.nsf/0/522E3223673BFD81CA256F63007D5BA7?OpenDocument
+http://www.opec.co.uk/aboutus.html
+http://www.opec.org/opecna/Speeches/2005/DubaiPetGas.htm
+http://www.opeiu8.org/ResourcesLinks/
+http://www.open-sandwich.co.uk/copyright.htm
+http://www.open-spaces.com/article-v2n1-cosgriff.php
+http://www.open.org/mrdsnts/m10600.htm
+http://www.open2.net/forum/post!reply.jspa?messageID=10264
+http://www.open2.net/marksteel/pankhurst_lecture.html
+http://www.open2.net/someonetowatch/further.html
+http://www.openair.org/cross/precis.html
+http://www.openarchives.org/documents/OAIRightsWhitePaper.html
+http://www.openarchives.org/pipermail/oai-general/2001-September/000090.html
+http://www.openbrackets.com/
+http://www.openbrackets.com/article/674/telling
+http://www.openbsd.org/mail.html
+http://www.opencenter.org/Trainings/ChineseHerbalism.htm
+http://www.opendarwin.org/en/articles/osx_smb/ar01s03.html
+http://www.opendemocracy.net/articles/View.jsp?id=2245
+http://www.opendemocracy.net/debates/article-6-129-2462.jsp
+http://www.opendemocracy.net/democracy-europe_constitution/holland_2567.jsp
+http://www.opendemocracy.net/xml/xhtml/articles/2245.html
+http://www.opendemocracy.net/xml/xhtml/articles/2567.html
+http://www.opendiary.com/entryview.asp?authorcode=A956071&entry=10248
+http://www.opendoorsuk.org/projects_catalog.php
+http://www.openfieldsoftware.com/privacy.asp
+http://www.opengeospatial.org/specs/?page=specs
+http://www.opengl.org/about/arb/notes/minutes9-18-02/meeting_note_2002-09-18.html
+http://www.opengl.org/resources/features/fontsurvey/
+http://www.opengoal.tv/losingstreak.htm
+http://www.opengroup.org/desktop/faq/
+http://www.opengroup.org/onlinepubs/009695399/functions/getrlimit.html
+http://www.openletters.net/000731/watters000804.html
+http://www.openletters.net/000807/oconnor000808.html
+http://www.openlinksw.com/main/jobs.htm
+http://www.openoffice.org/project/www/mail_list.html
+http://www.openoutsource.com/index.php
+http://www.openoutsource.com/resource-dated13121-HCL%20to%20add%20more%20jobs%20in%20Northern%20Ireland.phtml
+http://www.openoutsource.com/resource-dated13681-Services%20Spending%20Strong.phtml
+http://www.openoutsource.com/resource-dated7083-Kerry%20Campaign%20Urges%20White%20House%20to%20Disavow%20Chamber%20of%20Commerce%20....phtml
+http://www.openoutsource.com/resource-dated9665-Convergys%20Expands%20E-Learning%20Services%20Offerings%20with%20Introduction%20....phtml
+http://www.openp2p.com/pub/a/p2p/2001/01/18/shirky_umbrellas.html
+http://www.openp2p.com/pub/a/p2p/2001/08/28/p2pwar.html
+http://www.openpro.com/solutions_enterprise.html
+http://www.opensecrets.org/527s/527events.asp?orgid=41
+http://www.opensecrets.org/527s/527events.asp?orgid=41&Format=Print
+http://www.opensecrets.org/alerts/v3/ALRTV3N28.asp
+http://www.opensolaris.org/os/community/onnv/devref_toc/devref_2/
+http://www.opensourcetheology.net/node/view/666
+http://www.openspacecomm.com/Articles/Gifted%20Education.htm
+http://www.openspacetechnology.com/articles/factors.html
+http://www.openspaceworld.com/spirt_shows.htm
+http://www.openssl.org/support/faq.html
+http://www.opentechsupport.net/forums/archive/topic/27810-1.html
+http://www.opentechsupport.net/forums/archive/topic/31981-1.html
+http://www.opentechsupport.net/forums/archive/topic/32575-1.html
+http://www.opentechsupport.net/forums/printthread.php?t=31981&page=2&pp=14
+http://www.opentechsupport.net/forums/printthread.php?t=31981&pp=1000
+http://www.opentechsupport.net/forums/showthread.php?t=31981&page=2
+http://www.opentechsupport.net/forums/showthread.php?t=31981&page=2&pp=14
+http://www.opentext.com/news/pr.html?id=1457
+http://www.opentheory.org/oxkonferenz3-invite/text.phtml?lang=en
+http://www.openves.org/
+http://www.openwordchurch.org/sermons/2004-04-11.html
+http://www.openworld.org/about/careers2.shtml
+http://www.operationhomefront.net/nh/ChapterNews.htm
+http://www.operationhomefront.org/Info/info_deploy.shtml
+http://www.operationhope.org/AboutOHI/Pressroom/
+http://www.operationhope.org/Epublications/September_11_00/
+http://www.operationhope.org/Financial_Literacy/default.htm
+http://www.operationlettertosanta.com/Pages/contact.htm
+http://www.operationmigration.org/field_2002_fal.html
+http://www.operationmilitarysupport.com/letters/letters_2005/letters_01_05.htm
+http://www.operationmom.org/newsltr1203.html
+http://www.operationrebirth.com/archive/mmunroe.html
+http://www.operationrebirth.com/archive/tacl-leviticus.html
+http://www.operationrescue.org/
+http://www.operationrescue.org/?p=52
+http://www.operations.mod.uk/telic/casualties.htm
+http://www.operations.mod.uk/telic/kelly.htm
+http://www.operations.mod.uk/telic/press_27march.htm
+http://www.operations.mod.uk/telic/sofs_fpa_24march.htm
+http://www.operationsaveamerica.org/press/press/010330jameskopparres.html
+http://www.operaworld.com/north/street/streetbackground.shtml
+http://www.opg.com/ops/N_darlington.asp
+http://www.opic.gov/PressReleases/2002/2-41.htm
+http://www.opinion.telegraph.co.uk/travel/main.jhtml?xml=/travel/2004/10/11/etzambia1010.xml
+http://www.opinionjournal.com/best/?id=110002241
+http://www.opinionjournal.com/best/?id=110004957
+http://www.opinionjournal.com/best/?id=110006106
+http://www.opinionjournal.com/best/?id=110006327
+http://www.opinionjournal.com/best/?id=110006807
+http://www.opinionjournal.com/best/?id=110006823
+http://www.opinionjournal.com/columnists/cRosett/?id=110002335
+http://www.opinionjournal.com/columnists/pdupont/?id=110003067
+http://www.opinionjournal.com/columnists/pdupont/?id=110005433
+http://www.opinionjournal.com/columnists/pnoonan/
+http://www.opinionjournal.com/columnists/pnoonan/?id=110003143
+http://www.opinionjournal.com/columnists/pnoonan/?id=110005442
+http://www.opinionjournal.com/columnists/pnoonan/?id=110006000
+http://www.opinionjournal.com/columnists/pnoonan/?id=110006332
+http://www.opinionjournal.com/columnists/pnoonan/?id=110006442
+http://www.opinionjournal.com/columnists/pnoonan/?id=110006794
+http://www.opinionjournal.com/columnists/pnoonan/?id=65000052
+http://www.opinionjournal.com/columnists/pnoonan/?id=65000339
+http://www.opinionjournal.com/editorial/?id=110006777
+http://www.opinionjournal.com/editorial/feature.html?id=110004855
+http://www.opinionjournal.com/editorial/feature.html?id=110005192
+http://www.opinionjournal.com/editorial/feature.html?id=110006074
+http://www.opinionjournal.com/extra/?id=110006228
+http://www.opinionjournal.com/extra/?id=110006785
+http://www.opinionjournal.com/forms/printThis.html?id=110003233
+http://www.opinionjournal.com/la/?id=110006427
+http://www.opinionjournal.com/medialog/?id=110004950
+http://www.opinionjournal.com/taste/?id=110003623
+http://www.opisnet.com/aboutus.asp
+http://www.opm.go.kr/warp/webapp/content/view?meta_id=english&id=28
+http://www.opm.go.kr/warp/webapp/content/view?meta_id=english&id=53
+http://www.opm.gov/cfr/vol_1/5cfr532.htm
+http://www.opm.gov/ehs/workplac/html/domestic-sec1.asp
+http://www.opm.gov/er/adrguide/Section1-army.asp
+http://www.opm.gov/er/adrguide_2002/section1-army.asp
+http://www.opm.gov/fedclass/0600pa/AP_F1.asp
+http://www.opm.gov/fedclass/text/intro.htm
+http://www.opm.gov/fers_election/fersh/h_scd9.htm
+http://www.opm.gov/gpra/opmgpra/par2001/progress.htm
+http://www.opm.gov/hrmc/2004/msg-010.asp
+http://www.opm.gov/insure/99/brochures/73-065.html
+http://www.opm.gov/insure/handbook/fehb10.asp
+http://www.opm.gov/insure/ltc/
+http://www.opm.gov/insure/ltc/ic2003/03042003.htm
+http://www.opm.gov/oca/compmemo/2004/2004-22.asp
+http://www.opm.gov/oca/pay/HTML/Grade_PayRetention_EX.asp
+http://www.opm.gov/oca/pay/html/simultaneous_pay.asp
+http://www.opm.gov/qualifications/SEC-IV/B/GS0300/0334.HTM
+http://www.opm.gov/qualifications/sec-ii/s2-e7.htm
+http://www.opm.gov/veterans/html/vghist.asp
+http://www.opm.gov/workforceplanning/wfpmodel_step1.htm
+http://www.opm.state.ct.us/pdpd2/energy/enserv.htm
+http://www.opma.on.ca/advicearticle_03_17_1997_perscriptionorthotics.htm
+http://www.opnet.com/opnetwork2003/hotels.html
+http://www.opnet.ops.gov.ph/speech-2001june20.htm
+http://www.opportunities.org.uk/peoplewithdisabilities/archive/september04.html
+http://www.opportunities.org.uk/peoplewithdisabilities/jobhunter/current.html
+http://www.opportunity.nl/english/worklife.htm
+http://www.opposition.bc.ca/QP/QP%20-%20Fall%202002/20021024nhamemo.html
+http://www.oprah.com/health/omag/health_omag_200301_fit_story.jhtml
+http://www.oprah.com/obc/omag/obc_omag_200206_books.jhtml
+http://www.oprah.com/tows/pastshows/tows_2002/tows_past_20020130_c.jhtml
+http://www.oprs.ucla.edu/animal/FAQ.htm
+http://www.ops.gov.ph/speeches2002/speech-2002oct27.htm
+http://www.opsc.dgs.ca.gov/
+http://www.opseu.org/
+http://www.optics.arizona.edu/academics/CareersInOptics.htm
+http://www.opticsexpress.org/view_file.cfm?doc=%24(L%23%2FK%20%20%20%0A&id=%24)L%23-J%20%20%20%0A
+http://www.optimizemag.com/article/showArticle.jhtml?articleId=164302622
+http://www.optimizemag.com/article/showArticle.jhtml?articleId=17700880
+http://www.optimizemag.com/article/showArticle.jhtml?articleId=53701400&pgno=2
+http://www.optimizemag.com/issue/027/law.htm
+http://www.optimus2020.com/casestudies/showArticle.asp?article_ID=101
+http://www.option.org/miracle/ch22.html
+http://www.option.org/to_love/tl_c03.html
+http://www.optionsxpress.com/welcome/tour/
+http://www.optometrists.org/optometrists.html
+http://www.optruth.org/main.cfm?actionId=globalShowStaticContent&screenKey=hear&htmlId=1043
+http://www.optruth.org/main.cfm?actionId=globalShowStaticContent&screenKey=hear&htmlId=1530
+http://www.optruth.org/main.cfm?actionId=globalShowStaticContent&screenKey=userShowStories
+http://www.optruth.org/main.cfm?actionId=globalShowStaticContent&screenKey=userShowStories&lnav=1
+http://www.optumanswers.com/research/articles/research.shtml
+http://www.opusa.org/shipping/shippingnews.htm
+http://www.opusdei.org/art.php?w=32&p=4927
+http://www.opusdei.org/art.php?w=32&p=5578
+http://www.oqha.com/blessed.htm
+http://www.oqha.com/swaph.htm
+http://www.oqhra.com/
+http://www.or.regence.com/provider/contracting/medical/
+http://www.oracle.com/pls/cis/Profiles.print_html?p_profile_id=100665
+http://www.oracle.com/pls/cis/Profiles.print_html?p_profile_id=100985
+http://www.oracle.com/technology/oramag/oracle/03-jan/o13asktom.html
+http://www.oracle.com/technology/oramag/oracle/04-jul/o44tech_perf.html
+http://www.oracle.com/technology/oramag/oracle/04-mar/o24tech_industry.html
+http://www.oracle.com/technology/pub/articles/masterj2ee/j2ee_wk3.html
+http://www.oracle.com/technology/software/htdocs/distlic.html?/technology/software/tech/windows/odpnet/utilsoft.html
+http://www.oraculartree.com/postcards11.html
+http://www.oraculartree.com/s_portal_entering_forest.html
+http://www.oraculartree.com/s_shadowed_ones3.html
+http://www.oraculartree.com/s_shadowed_ones38.html
+http://www.oraculartree.com/shadowdancer84.html
+http://www.orafaq.com/tools/revealnet/formatter.htm
+http://www.oraflcio.unions-america.com/
+http://www.oralcancerfoundation.org/facts/clinical_trials.htm
+http://www.oralchelation.com/LifeGlowBasic/technical/p14.htm
+http://www.oralchelation.net/heartdisease/ChapterSix/page6.htm
+http://www.oralhistory.org.uk/ethics/
+http://www.oramd.com/
+http://www.orange-papers.org/orange-cult_q2.html
+http://www.orange.co.uk/service_plans/pay_monthly/your_plan/offpeak.html
+http://www.orbeon.com/services/tech-support
+http://www.orbicom.uqam.ca/in_focus/columns/en/archives/2003_fev.html
+http://www.orbit.org.uk/newsite/OHA/How2Apply.htm
+http://www.orca.on.ca/About-Us/history.002.html
+http://www.orcadian.co.uk/archive/2002/archive8.htm
+http://www.orchidlady.com/orchidgarden/1999-12/
+http://www.orchidlady.com/plantpals/
+http://www.orchids.org/culture/culture.html
+http://www.orcsoftware.com/Company/PNR/PNR_040317_notice_to_attend_eng.htm
+http://www.orderedlist.com/articles/a_practical_start
+http://www.orderedlist.com/articles/wordpress-administration-design-tiger/
+http://www.ordinarymind.net/Straight/straighttalk_may2002.htm
+http://www.oregon.gov/DOR/TOB/IC-105-404.shtml
+http://www.oregonadultsoccer.com/player_reg_form.htm
+http://www.oregongarden.org/calendar/November.html
+http://www.oregongenealogy.com/union/union.htm
+http://www.oregonguard.com/
+http://www.oregonlottery.org/general/allocate/
+http://www.oregonstatelands.us/news/news_director.htm
+http://www.oreilly.com/
+http://www.oreilly.com/catalog/esa2/chapter/ch03.html
+http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html
+http://www.oreilly.com/catalog/opensources/book/young.html
+http://www.oreilly.com/catalog/peertopeer/chapter/ch06.html
+http://www.oreilly.com/catalog/spt2/chapter/ch04.html
+http://www.oreilly.com/oreilly/author/ch03.html
+http://www.oreillynet.com/et2005/
+http://www.oreillynet.com/lpt/wlg/2366
+http://www.oreillynet.com/oscon2003/
+http://www.oreillynet.com/pub/a/linux/2005/01/27/freevo.html
+http://www.oreillynet.com/pub/a/network/2000/06/30/magazine/mozilla_stylesheets.html?page=2
+http://www.oreillynet.com/pub/a/network/2002/10/01/whatsinacondition.html
+http://www.oreillynet.com/pub/a/network/2005/06/07/geospatialweb.html
+http://www.oreillynet.com/pub/a/oreilly/opensource/news/subversion_ch01.html
+http://www.oreillynet.com/pub/a/wireless/2002/04/19/security.html
+http://www.oreillynet.com/pub/a/wireless/2002/12/20/zeroconf.html
+http://www.oreillynet.com/pub/a/wireless/excerpt/palmprog2_ch5/index2.html
+http://www.oreillynet.com/pub/wlg/1399
+http://www.oreillynet.com/pub/wlg/2125
+http://www.oreillynet.com/pub/wlg/2366
+http://www.oreillynet.com/pub/wlg/3936
+http://www.oreillynet.com/pub/wlg/4288
+http://www.oreillynet.com/pub/wlg/5171
+http://www.org2.com/dick/wamd.html
+http://www.organicanews.com/news/article.cfm?story_id=15
+http://www.organicconsumers.org/foodsafety/pepsi_pesticides.cfm
+http://www.organicfood.co.uk/stories/foodforthought.html
+http://www.organicmatter.net/node/122
+http://www.organicnutrition.co.uk/water.htm
+http://www.organicvegetarian.co.uk/
+http://www.organix.net/organix/guidelines.htm
+http://www.organizationdesignforum.org/conference/2005agenda.html
+http://www.organizedteens.com/jssociallife.htm
+http://www.orgs.ttu.edu/tstasp/MEETINGS_EVENTS/meetings_events1.htm
+http://www.oriental.cam.ac.uk/progs_admin_info.html
+http://www.orientaloutpost.com/proddetail.php?prod=gws-0184
+http://www.original-diamonds.com/affiliates_agreement.php
+http://www.originarts.com/mj451/biography.html
+http://www.originscanada.org/open_records/bc.html
+http://www.orindaben.com/dw/incrabund.htm
+http://www.orionfutures.com/opts.htm
+http://www.oriononline.org/pages/om/02-2om/NewEconomy.html
+http://www.oriononline.org/pages/om/04-2om/TempestWilliams.html
+http://www.oriononline.org/pages/om/archive_om/Berry/Local_Economy.html
+http://www.oriononline.org/pages/oo/curmudgeon/index_BigAndBlue.html
+http://www.oriononline.org/pages/oo/curmudgeon/index_CargoKarma.html
+http://www.orionsarm.com/clades/Sailors.html
+http://www.orionsarm.com/eg/e/Ea-Ec.html
+http://www.orionsarm.com/eg/l/Lo-Lt.html
+http://www.orissa.org.uk/
+http://www.orlandoweekly.com/columns/story.asp?id=4762
+http://www.ormondshead.com/menus.html
+http://www.ornery.org/essays/warwatch/2003-11-16-1.html
+http://www.ornl.gov/info/ornlreview/rev25-34/chapter7.shtml
+http://www.ornl.gov/roofs+walls/insulation/ins_01.html
+http://www.ornl.gov/sci/roofs+walls/insulation/ins_18.html
+http://www.ornl.gov/sci/techresources/Human_Genome/biosync/body.shtml
+http://www.ornl.gov/sci/techresources/Human_Genome/elsi/minorities.shtml
+http://www.ornl.gov/sci/techresources/Human_Genome/elsi/patents.shtml
+http://www.ornl.gov/sci/techresources/Human_Genome/hg5yp/hlight.shtml
+http://www.ornl.gov/sci/techresources/Human_Genome/project/benefits.shtml
+http://www.ornl.gov/sci/techresources/Human_Genome/project/info.shtml
+http://www.ornl.gov/sci/tpm/pkgspec_type_a_xref.shtml
+http://www.ornstein.org/2004treehouses.html
+http://www.oromoliberationfront.org/TPLF_schoolbombingt.htm
+http://www.orphantrainriders.com/riders11.html
+http://www.orps.state.ny.us/assessor/manuals/vol6/rfv/sect11.htm
+http://www.orps.state.ny.us/legal/rules/part200/sub200-2.htm
+http://www.orrick.com/fileupload/377.htm
+http://www.orrick.com/offices/tokyo/employment_benefits.asp
+http://www.ors.duke.edu/ors/policies/conflict.html
+http://www.ors2.state.sc.us/abstract/chapter11.asp
+http://www.ors2.state.sc.us/abstract/series.asp
+http://www.orsp.cmich.edu/GC_AwardMar.htm
+http://www.ortakales.com/Illustrators/Jones.html
+http://www.ortelius.de/kalender/jul_en.php
+http://www.orthodoxinfo.com/inquirers/ec_secondcoming.aspx
+http://www.orthodoxytoday.org/articles4/CouretasNCC.shtml
+http://www.orthodoxytoday.org/articlesprint/WolfeSoulDiedP.htm
+http://www.orwelltoday.com/armydeployment.shtml
+http://www.orwelltoday.com/cubacastro.shtml
+http://www.orwelltoday.com/jurabarnhillvisit.shtml
+http://www.os.dhhs.gov/news/speech/2005/050201.html
+http://www.os.mennoniteusa.org/index.php?cPath=2
+http://www.os2.co.za/ordpolicy.htm
+http://www.osbd.state.ok.us/Credit/Statutes/20012005.htm
+http://www.osburndesign.com/start_case1.html
+http://www.osc.state.ny.us/legal/2001/op2001-8.htm
+http://www.osc.state.ny.us/legal/2003/op2003-7.htm
+http://www.osca.ca/health-res.htm
+http://www.oscarbach.org/Commission%20List.htm
+http://www.oscars.org/74academyawards/winners/04leadingactress.html
+http://www.oscars.org/76academyawards/ona.html
+http://www.oscars.org/77academyawards/ona.html
+http://www.oscars.org/events/sorrellandson/
+http://www.oscarsborg.vgs.no/inteng.html
+http://www.oscarwatch.com/Awards/dga.html
+http://www.osce.org/
+http://www.oscn.net/applications/oscn/deliverdocument.asp?citeid=73216&date=5/17/94
+http://www.osdllinuxsummit.org/program-d.htm
+http://www.osfa.state.la.us/schgrt6a20.htm
+http://www.osfa.state.la.us/schgrt6a27.htm
+http://www.osfa.state.la.us/schgrt6a57.htm
+http://www.osfa.state.la.us/schgrt6a89.htm
+http://www.osh.com/Cultures/en-US/Articles/GardenNursery/ControllingGophers.htm
+http://www.osha.gov/Publications/OSHA3152/osha3152.html
+http://www.osha.gov/Reduction_Act/WALKSUP2.html
+http://www.osha.gov/SLTC/etools/computerworkstations/components_chair.html
+http://www.osha.gov/SLTC/etools/computerworkstations/components_keyboards.html
+http://www.osha.gov/SLTC/etools/grocerywarehousing/storage.html
+http://www.osha.gov/SLTC/etools/hospital/hazards/sharps/sharps.html
+http://www.osha.gov/doc/outreachtraining/htmlfiles/traintec.html
+http://www.osha.gov/dts/osta/otm/legionnaires/faq.html
+http://www.osha.gov/pls/oshaweb/owadisp.show_document?p_table=FEDERAL_REGISTER&p_id=16904
+http://www.osha.gov/pls/oshaweb/owadisp.show_document?p_table=FEDERAL_REGISTER&p_id=17902
+http://www.osho.com/Topics/TopicsEng/Terrorism.htm
+http://www.oshrc.gov/decisions/html_1991/87-0008.html
+http://www.osjspm.org/cjen298.htm
+http://www.osloader.com/eula.htm
+http://www.osmotek.com/adv.htm
+http://www.ospace.net/manual/interface.en.html
+http://www.ospca.on.ca/ta_wild_fs_property.html
+http://www.ospolitics.org/workpay/
+http://www.ospreysrugby.com/
+http://www.osric.com/university/threedaughters.html
+http://www.osrllg.com/federal_fs3.php
+http://www.oss-watch.ac.uk/resources/calibre04.xml?style=text
+http://www.oss-watch.ac.uk/resources/flosspols04.xml?style=printable
+http://www.oss.org.uk/responses/mainresponses.htm
+http://www.ost.gov.uk/policy/advice/guidelines_2000/
+http://www.ost.gov.uk/research/forwardlook03/statements/departments/deputy_pm2.htm
+http://www.ostomy.evansville.net/septembernews5.htm
+http://www.osu.edu/academicplan/stage.php
+http://www.osu.edu/researchnews/archive/bonaback.htm
+http://www.osu.edu/units/research/archive/doubt.htm
+http://www.osumdphd.org/overview.htm
+http://www.osv.com/Enewsletter/newsletter111704.htm
+http://www.osv.com/periodicals/show-article.asp?pid=976
+http://www.oswaldmosley.com/policies/spheresofinfluence.html
+http://www.oswego.org/testprep/ela4/g/adjectiveskindl2.cfm
+http://www.oswegocountybusiness.com/issue78/78SpecialArticle.html
+http://www.oswestry.com/
+http://www.otago.ac.nz/maoricentre/html/groups.html
+http://www.otago.ac.nz/news/news/2004/16-07-04_press_release.html
+http://www.otakuaniverse.com/features/lain/
+http://www.otal.umd.edu/SHORE2000/photobrowse/results.html
+http://www.otal.umd.edu/~sies/jobadvice.html
+http://www.otal.umd.edu/~vg/mssp96/ms18/project3.html
+http://www.otc.umd.edu/Inventors/labnotebooks.html
+http://www.othercinema.com/fall2002.html
+http://www.othercinema.com/fall2003.html
+http://www.otherpeoplesstories.com/070.html
+http://www.otherstream.com/
+http://www.otherwise.com/population/logistic.html
+http://www.oti.fsu.edu/documents/bpr_12_6_00.html
+http://www.otpp.com/web/website.nsf/web/samsonite
+http://www.otrcat.com/memory/georgepedicini.htm
+http://www.ott.zynet.co.uk/polio/lincolnshire/library/bach/pdandsdp.html
+http://www.ottawa.diplo.de/en/04/citizenship_20law/UB_20citizenshiplaw.html
+http://www.ottawabusinessjournal.com/280078439730617.php
+http://www.ottawabusinessjournal.com/281837527759227.php
+http://www.ottawabusinessjournal.com/285313723334178.php
+http://www.ottawaplus.ca/portal/feature/8150/orage.jsp
+http://www.ottawapolice.ca/en/crime_prevention/neighbourhood_watch/safety_tips.cfm
+http://www.otte.vic.gov.au/apprenticeships/nac1.htm
+http://www.otternet.com/ROA/sara.htm
+http://www.otternet.com/species/seaotter.htm
+http://www.otterproject.org/site/pp.asp?c=8pIKIYMIG&b=695263
+http://www.ottoskinner.com/about.html
+http://www.otway.com/family/1.html
+http://www.ou.org/about/judaism/rabbis/rshimonbaryochai.htm
+http://www.ou.org/public/statements/2000/nate5.htm
+http://www.ou.org/torah/tt/5760/vayishlach60/specialfeatures.htm
+http://www.ouboces.org/MSTgrant2/CONTENT/penguinparade.html
+http://www.ouc.bc.ca/er/contactLR.html
+http://www.oucc.org.uk/expeditions/report1967/report67_all.htm
+http://www.oucs.ox.ac.uk/ltg/vle/vle_frances.xml.ID=start
+http://www.oucs.ox.ac.uk/ltg/vle/vle_frances.xml.ID=summary
+http://www.oucs.ox.ac.uk/pcbuy/index.xml?style=printable
+http://www.oucs.ox.ac.uk/pcbuy/index.xml?style=text
+http://www.oucs.ox.ac.uk/typesetting/fonts/index.xml?style=text
+http://www.oudancesport.co.uk/Team/internal_notices/handbook/handbook3.htm
+http://www.oufc.premiumtv.co.uk/page/TheMainFeature/0,,10342,00.html
+http://www.oufoundation.org/sm/fall2003/thams.asp?ID=82
+http://www.oufoundation.org/sm/winter2003/story.asp?ID=43
+http://www.ouhk.edu.hk/WCM/?FUELAP_TEMPLATENAME=tcSingPage&ITEMID=CCLIPACECONTENT_38506925
+http://www.ouhk.edu.hk/WCM/?FUELAP_TEMPLATENAME=tcSingPage&ITEMID=CCLIPACECONTENT_38514435
+http://www.ouhk.edu.hk/WCM/?FUELAP_TEMPLATENAME=tcSingPage&pri=2&ITEMID=CCLIPACECONTENT_38506925
+http://www.ouje.ca/history/history.htm
+http://www.oulipocompendium.com/html/intro.html
+http://www.oup.co.uk/ep/prodsupp/ref/oed2v2_tech/
+http://www.oup.co.uk/isbn/0-19-263221-3
+http://www.oup.co.uk/isbn/0-19-850656-2
+http://www.oup.co.uk/isbn/0-19-866224-6
+http://www.oup.co.uk/isbn/0-19-927780-X
+http://www.oup.co.uk/music/repprom/berkeley/prognotesa-f/
+http://www.oup.com/ca/isbn/0-19-541357-1
+http://www.oup.com/elt/catalogue/guidance_articles/article_video?cc=global
+http://www.oup.com/eltnew/catalogue/isbn/1040?cc=global
+http://www.oup.com/eltnew/catalogue/isbn/1400?cc=global
+http://www.oup.com/eltnew/catalogue/teachersites/happyearth/?cc=global
+http://www.oup.com/online/groveart/
+http://www.oup.com/us/catalog/general/subject/Anthropology/BiologicalPhysicalAnthropology/?ci=0195173511&view=usa
+http://www.oup.com/us/catalog/general/subject/Anthropology/BiologicalPhysicalAnthropology/~~/cHI9MTAmcGY9MCZzcz1hdXRob3IuYXNjJnNmPWFsbCZzZD1hc2Mmdmlldz11c2EmY2k9MDE5NTE3MzUyWA==
+http://www.oup.com/us/catalog/general/subject/Anthropology/BiologicalPhysicalAnthropology/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk1MTczNTEx
+http://www.oup.com/us/catalog/general/subject/Anthropology/BiologicalPhysicalAnthropology/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk1MTczNTJY
+http://www.oup.com/us/catalog/general/subject/Anthropology/BiologicalPhysicalAnthropology/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk1MTczNTJY?view=usa&ci=019517352X
+http://www.oup.com/us/catalog/general/subject/ClassicalStudies/AncientHistory/Roman/?ci=0195161327&view=usa
+http://www.oup.com/us/catalog/general/subject/ClassicalStudies/ClassicalLiteratureinTranslation/?ci=0199240000&view=usa
+http://www.oup.com/us/catalog/general/subject/HistoryWorld/British/Medieval/?view=usa&ci=0198202075
+http://www.oup.com/us/catalog/general/subject/HistoryWorld/European/France/?ci=0340706503&view=usa
+http://www.oup.com/us/catalog/general/subject/LiteratureEnglish/AmericanLiterature/AfricanAmerican/?view=usa&ci=0195107691
+http://www.oup.com/us/catalog/general/subject/Music/PerformanceStudiesAppliedMusic/Voice/?view=usa&ci=0195160053
+http://www.oup.com/us/catalog/general/subject/Philosophy/Social/?ci=0195071484&view=usa
+http://www.oup.com/us/catalog/general/subject/Politics/ComparativePolitics/EuropeanUnion/?view=usa&ci=0199276129
+http://www.oup.com/us/catalog/general/subject/Politics/InternationalStudies/InternationalOrganizations/?ci=0199240566&view=usa
+http://www.oup.com/us/catalog/general/subject/ReligionTheology/HistoryofChristianity/~~/c2Y9YWxsJnNzPWF1dGhvci5hc2Mmc2Q9YXNjJnBmPTEwJnZpZXc9dXNhJnByPTEwJmJvb2tDb3ZlcnM9eWVzJmNpPTAxOTUxNTI4NzU=
+http://www.ourbrowncounty.com/0604s2.htm
+http://www.ourcatholicfaith.org/canonlaw/CANON1259-1272.html
+http://www.ourcatholicfaith.org/canonlaw/CANON197-199.html
+http://www.ourcatholicfaith.org/canonlaw/CANON200-203.html
+http://www.ourcatholicfaith.org/canonlaw/CANON29-34.html
+http://www.ourcivilisation.com/cooray/rights/chap6.htm
+http://www.ourcivilisation.com/public/chap4.htm
+http://www.ourcivilisation.com/signs/chap7.htm
+http://www.ourcommunity.com.au/boards/boards_article.jsp?articleId=1367
+http://www.ourcs.org.uk/index.php?menuexpand=&content=/flag/current.php
+http://www.ourcs.org.uk/index.php?menuexpand=1&content=/flag/current.php
+http://www.ourdialogue.com/m4.htm
+http://www.ourdogs.co.uk/News/January2005/News210105/greyhound.htm
+http://www.ourhollowearth.com/PolarOpn.htm
+http://www.ourlittleplace.com/mcslists.html
+http://www.ourpla.net/cgi-bin/pikie.cgi?AbbeNormal
+http://www.ourplanet.com/imgversn/112/brown.html
+http://www.ourplanet.com/imgversn/153/geel.html
+http://www.oursportscentral.com/services/releases/?id=3118212
+http://www.oursportscentral.com/usfl/playg-n.htm
+http://www.ourstolenfuture.org/Commentary/News/2003/2003-0619-LAT-popsandbears.htm
+http://www.oursworld.net/ingilizce-ders/eski-sayilar/dergi-02/izbul-0035.htm
+http://www.ourtimes.ca/features/99specdel.html
+http://www.ourworldisnotforsale.org/regtrade/02.htm
+http://www.ourzion.com/history/zion1979.html
+http://www.ousa.org.nz/index2.php?option=content&do_pdf=1&id=230
+http://www.ousu.org/main/advice/livingout/legalstandards
+http://www.ousu.org/main/advice/livingout/legalstandards?accessibility=1
+http://www.ousu.org/main/campaigns/ethics/purchasing/morocco
+http://www.ousu.org/main/clubsocs/society/additionalinfo
+http://www.ousu.org/main/clubsocs/society/additionalinfo?accessibility=1
+http://www.ousu.org/main/graduates/meetings/pgaagendas/pgaagendaht05
+http://www.ousu.org/main/services/ousulive
+http://www.ousu.org/main/services/ousulive?accessibility=1
+http://www.ousu.org/main/yourunion/council/councilagendas?accessibility=1
+http://www.outdoorcanada.ca/special/barilko4.shtml
+http://www.outdoorclub.org/Hypothermia.html
+http://www.outdoored.com/anm/templates/?a=1684&z=17
+http://www.outdoorgear.co.uk/rswebsite/terms.htm
+http://www.outdoorjapan.com/columns/japanlinks-1.html
+http://www.outdoorlife.com/outdoor/gear/gunvault/article/0,19912,604357,00.html
+http://www.outdoorplaces.com/Features/Paddle/pickcanoe/newcanoe5.htm
+http://www.outdoors.net/site/features/feature.aspx+Forum+Firearms+ArticleCode+978+V+N+SearchTerm+
+http://www.outdoorsafety.org/articles/Article.asp?ArticleID=106
+http://www.outdoorsmagic.com/news/article/mps/UAN/3075/v/1/sp/
+http://www.outdoorsoc.co.uk/merchandise.asp
+http://www.outdoorstaff.co.uk/training/mltb/wgl.html
+http://www.outdoortoysdirect.co.uk/Table-Top-Games/Club-Tornament
+http://www.outerlife.com/2004/07/reading_is_doom.html
+http://www.outlawsonline.com/education.htm
+http://www.outlook.co.za/info/faq.htm
+http://www.outlookindia.com/submain1.asp?mode=25&refer=30890&refa=&dissum=&rcount=47
+http://www.outofbounds.com/html/oct_98_updates.html
+http://www.outofservice.com/music-personality-test/faq/
+http://www.outoftheboxlawyering.com/archives/2004_01.html
+http://www.outpost.com/product/3207761
+http://www.outrate.net/outrateallovertheguy.html
+http://www.outreachtraining.com/trainingteam.html
+http://www.outsider.co-uk.com/welcome/toolkit.htm
+http://www.outsideshore.com/school/art/oil.htm
+http://www.outsidethebeltway.com/archives/005782.html
+http://www.outsidethebeltway.com/archives/005959.html
+http://www.outsidethebeltway.com/archives/9149
+http://www.outsmartmagazine.com/issue/i02-03/authorauthor.php
+http://www.outsmartmagazine.com/issue/i03-04/a-6-Television_2.php
+http://www.outsports.com/history/billtilden.htm
+http://www.outtacontext.com/life/archive/000166.shtml
+http://www.outtacontext.com/life/archive/000259.shtml
+http://www.outwardbound.co.nz/36.0.html
+http://www.outwardbound.co.nz/72.0.html
+http://www.outwardboundwilderness.org/course/canada_hut-to-hut_xc_skiing_254.html
+http://www.outwestnewspaper.com/goldrush.html
+http://www.ouwb.ohiou.edu/mlea/demo/c_intro.htm
+http://www.ovarian-cysts-pcos.com/pcos-book-res.html
+http://www.ovarian-news.org/neuropathy.html
+http://www.overberginfo.com/
+http://www.overclockers.com/articles1179/
+http://www.overclockers.com/tips402/
+http://www.overflite.com/science.html
+http://www.overheardinnewyork.com/
+http://www.overlakehospital.com/AboutUs.htm
+http://www.overlawyered.com/
+http://www.overlawyered.com/archives/00mar1.html
+http://www.overlawyered.com/archives/00mar2.html
+http://www.overlawyered.com/archives/02/apr1.html
+http://www.overlawyered.com/archives/2003_09.html
+http://www.overlawyered.com/archives/99july1.html
+http://www.overlawyered.com/topics/responsib.html
+http://www.overpopulation.com/discussion/fullthread$msgnum=393
+http://www.overpopulation.org/education.html
+http://www.overpopulation.org/older.html
+http://www.overpopulation.org/solutions.html
+http://www.overpopulation.org/whyPopMatters.html
+http://www.overseas-emigration.co.uk/nzguide/health.php
+http://www.oversimple.net/2005/01/big-city-river-trouble.html
+http://www.ovid.com/site/catalog/Journal/1690.jsp?top=2&mid=3&bottom=7&subsection=12
+http://www.ovid.com/site/products/ovidguide/cctrdb.htm
+http://www.ovlov.co.nz/yamaha.htm
+http://www.ovpr.uga.edu/qau/advisor2.html
+http://www.ovpr.uga.edu/researchnews/92sp/wings.html
+http://www.ovpr.uga.edu/researchnews/fall2003/printslime.htm
+http://www.ovrlnd.com/MainPage/MissionStatement.html
+http://www.ovum.com/go/content/c,51266
+http://www.owa.gov.on.ca/faq.html
+http://www.owdna.org/ermillbonner.htm
+http://www.owhn.on.ca/faq.htm
+http://www.owl-online.org/content/library/field.htm
+http://www.owlpages.com/species/bubo/bubo/Default.htm
+http://www.owlsdottir.com/dreams/walking_ones_dreams.htm
+http://www.owlsoup.com/3LBE/3LBE11/3LBE11story4.html
+http://www.owneroperatorjob.com/
+http://www.oww.be/pages/page.php?ID=17
+http://www.owzatgames.com/page10.html
+http://www.ox.ac.uk/gazette/1996-7/supps/1_4426.htm
+http://www.ox.ac.uk/gazette/1996-7/weekly/101096/ads.htm
+http://www.ox.ac.uk/gazette/1997-8/weekly/201197/ads.htm
+http://www.ox.ac.uk/gazette/1998-9/weekly/150799/notc.htm
+http://www.ox.ac.uk/gazette/1998-9/weekly/221098/ads.htm
+http://www.ox.ac.uk/gazette/2001-2/weekly/090502/notc.htm
+http://www.ox.ac.uk/it/strategy/2000/it011.htm
+http://www.ox.ac.uk/publicrelations/pubs/annualreview/ar00/12.shtml
+http://www.ox.ac.uk/publicrelations/pubs/annualreview/ar98/manage.shtml
+http://www.ox.ac.uk/webhelp/guides.shtml
+http://www.ox.compsoc.net/info/history.shtml
+http://www.oxan.com/about/news/2003-09-17USPower.asp
+http://www.oxfam.ca/news/AsianEarthQuake_Floods/Thanks2.htm
+http://www.oxfam.org.hk/english/cyberschool/teachers/
+http://www.oxfam.org.hk/english/cyberschool/world/02.htm
+http://www.oxfam.org.uk/coolplanet/beyondwave/dayfive_am.htm
+http://www.oxfam.org.uk/coolplanet/kidsweb/oxfam/campaigns/mph_aid.htm
+http://www.oxfam.org.uk/coolplanet/teachers/devrights/devbackgr.htm
+http://www.oxfam.org.uk/jobs/meet_our_staff/diary_jasmine.htm
+http://www.oxfam.org.uk/press/releases/wto_africa_160204.htm
+http://www.oxfam.org.uk/what_we_do/issues/debt_aid/mdgs_price.htm
+http://www.oxfam.org.uk/what_we_do/issues/democracy_rights/bp51_prsp.htm
+http://www.oxfam.org.uk/what_we_do/issues/education/gce_zambia_imf.htm
+http://www.oxfam.org.uk/what_we_do/issues/trade/bp76_modalities_and_dumping.htm
+http://www.oxfam.org.uk/what_we_do/issues/trade/trading_rights.htm
+http://www.oxfam.org.uk/what_we_do/where_we_work/indonesia/programme.htm
+http://www.oxfam.org.uk/what_you_can_do/campaign/election/questions_libdem.htm
+http://www.oxfam.org/eng/event_wsf04_diaries.htm
+http://www.oxfamgb.org/eastasia/indonesia/indoprog.html
+http://www.oxford-access.org.uk/proyear9.php
+http://www.oxford-chiltern-bus-page.co.uk/020303.htm
+http://www.oxford-chiltern-bus-page.co.uk/130604.htm
+http://www.oxford-chiltern-bus-page.co.uk/250104.htm
+http://www.oxford-knowledge.co.uk/information/training/online_tutorial/internet_vs.htm
+http://www.oxford.oxon.sch.uk/teaching%20staff.htm
+http://www.oxfordamericanmag.com/lost_issue/article2.htm
+http://www.oxfordamericanmag.com/musicissue.htm
+http://www.oxfordarch.co.uk/pages/industrialrev.htm
+http://www.oxfordballoon.com/books.htm
+http://www.oxfordbands.com/
+http://www.oxfordbands.com/index.php
+http://www.oxfordbands.com/modules.php?name=Weblog&file=comments&wbid=87
+http://www.oxfordbands.com/modules.php?name=Weblog&spage=60&limit=10
+http://www.oxfordbiomedica.co.uk/news/2000-ob-19.htm
+http://www.oxfordbiomedica.co.uk/news/2002-ob-10.htm
+http://www.oxfordbiomedica.co.uk/news2004.htm
+http://www.oxfordcroquet.com/clubs/saca/index.asp
+http://www.oxfordcroquet.com/diplomatic/usa/index.asp
+http://www.oxfordcycleworkshop.org.uk/advice/cycle_security.php
+http://www.oxforddivecentre.com/chambers.html
+http://www.oxfordenergy.org/comment.php?0003
+http://www.oxfordenergy.org/comment.php?0010
+http://www.oxfordenergy.org/comment.php?0103
+http://www.oxfordenergy.org/comment.php?0105
+http://www.oxfordenergy.org/comment.php?0403
+http://www.oxfordenergy.org/comment.php?0502
+http://www.oxfordenergy.org/comment.php?9902
+http://www.oxfordenergy.org/comment.php?9908
+http://www.oxfordenergy.org/comment_prn.php?0303
+http://www.oxfordenergy.org/news-archive.shtml
+http://www.oxfordenergy.org/petrol.shtml
+http://www.oxfordgossip.co.uk/new/archive/index.php/t-268.html
+http://www.oxfordgrammarschool.com/Annualceleb.htm
+http://www.oxfordgrammarschool.com/currentprg1.htm
+http://www.oxfordhouse.org/edmonds.html
+http://www.oxfordleadership.com/ExecutiveDevp/stratFocus.asp?cbomenu=34
+http://www.oxfordms.net/faq_files/faqindex.htm
+http://www.oxfordmuse.com/museideas/museaims.htm
+http://www.oxfordmuse.com/selfportrait/portrait15.htm
+http://www.oxfordmuse.com/selfportrait/portrait32.htm
+http://www.oxfordmuse.com/selfportrait/portrait41.htm
+http://www.oxfordmuse.com/selfportrait/portrait42.htm
+http://www.oxfordmuse.com/selfportrait/portrait48.htm
+http://www.oxfordmuse.com/selfportrait/portrait5.htm
+http://www.oxfordmuse.com/selfportrait/portrait55.htm
+http://www.oxfordplains.com/a_classifieds_072604.htm
+http://www.oxfordplayhouse.com/burtontaylor/udo/
+http://www.oxfordresearchgroup.org.uk/publications/CDRs/CDR25introduction.htm
+http://www.oxfordscholarship.com/oso/public/content/religion/0195082591/toc.html
+http://www.oxfordscholarship.com/oso/public/content/religion/019513138X/toc.html
+http://www.oxfordstars.com/jokes.html
+http://www.oxfordstudent.com/1999-10-28/ox2
+http://www.oxfordstudent.com/1999-11-18/features/2
+http://www.oxfordstudent.com/2001-10-11/features/1
+http://www.oxfordstudent.com/2002-01-10/news/4
+http://www.oxfordstudent.com/2002-11-14/features/3
+http://www.oxfordstudent.com/2002-11-21/features/1
+http://www.oxfordstudent.com/tt2005wk6/News/elite_dry_cleaners_under_fire_again_as_students_claim_intimidation
+http://www.oxfordstudent.com/tt2005wk6/news/elite_dry_cleaners_under_fire_again_as_students_claim_intimidation
+http://www.oxis.com/profiling/interview.shtml
+http://www.oxnet.org/phpBB2/viewtopic.php?t=509&sid=
+http://www.oxss.co.uk/christmas-coursedetails.html
+http://www.oxss.co.uk/easter-coursedetails.html
+http://www.oxss.co.uk/summer-coursedetails.html
+http://www.oyate.org/books-to-avoid/myHeart.html
+http://www.oycf.org/Perspectives/5_043000/beyond_calligraphy_and_philanthr.htm
+http://www.oysterboyreview.com/16/fiction/RubackM-Road.html
+http://www.oysterboyreview.com/archived/09/ebersole.html
+http://www.oz-artfocus.com/pages/Gsmith/part2.htm
+http://www.oz.net/~cyndihow/pensions.htm
+http://www.oz.net/~greglove/longhair/longhair.htm
+http://www.ozdoba.net/swisswatch/ttouch.html
+http://www.ozemedia.com/online-business/online-business-1586.htm
+http://www.ozemedia.com/online-business/online-business-362.htm
+http://www.ozemedia.com/online-business/online-business-710.htm
+http://www.ozgrid.com/News/LookUpMatchIndexVBAFind.htm
+http://www.ozgrid.com/forum/showthread.php?t=29244
+http://www.ozlanka.com/sports/mugabe.htm
+http://www.oznet.ksu.edu/Johnson/Specials_TV_Shows/Christmas_Tree_Safety/Tips_for_Christmas_Tree_Disposal.htm
+http://www.oznet.ksu.edu/hfrr/hnewslet/2001/ksht0112.htm
+http://www.oznet.ksu.edu/humannutrition/spotlight/JunJul04.htm
+http://www.ozweb.biz/home_websteps.html
+http://www.ozzie.net/blog/stories/2002/08/04/why.html
+http://www.ozzu.com/ftopic26131.html
+http://www.ozzu.com/ftopic27193.html
+http://www.ozzu.com/ftopic33589-30.html
+http://www.ozzu.com/ftopic38850.html
+http://www.ozzu.com/ftopic38872.html
+http://www.p-e-p.org/target.htm
+http://www.p2pays.org/ref/03/02233.htm
+http://www.p2pays.org/ref/03/02453/domestic.htm
+http://www.p2pays.org/ref/04/03616.htm
+http://www.p2punited.org/modules.php?op=modload&name=FAQ&file=index&myfaq=yes&id_cat=3
+http://www.p7a77.net/dennys/viewer/view-nc.html
+http://www.pa-roots.org/~memorialday/tribute.html
+http://www.pac-10.org/compliance/legis/99legtrack.html
+http://www.pac-manager.com/about.htm
+http://www.pac-nor.com/pricelist/
+http://www.pacdelaware.com/publications/corporate/indemnification_agreement.html
+http://www.pacelearning.com/library/lull.html
+http://www.pacepros.com/CENewsletter_html/cenewsletter_010915.html
+http://www.pacfuel.com/action1.htm
+http://www.pacgolf.com/phoenix.htm
+http://www.pacific.edu/marketing/media-relations.asp
+http://www.pacificartleague.org/
+http://www.pacificbluesapphire.com/cut.html
+http://www.pacificcc.co.uk/display-items.asp?intTypeID=1&intItemID=30
+http://www.pacificcc.co.uk/display-items.asp?intTypeID=1&intItemID=312
+http://www.pacificcouncil.org/public/Events/2004Events.asp
+http://www.pacificdesigncenter.com/eventsites.html
+http://www.pacificenvironment.org/actionalerts/okinawa.htm
+http://www.pacificenvironment.org/articles/Sakhalinecology.htm
+http://www.pacificnet.net/~johnr/cgi/aesop1.cgi?hca&a71
+http://www.pacificnet.net/~mandel/Science.html
+http://www.pacificnet.net/~mandel/TheArts.html
+http://www.pacificresearch.org/press/com/2002/sfe_02-03-17.html
+http://www.pacificsportsllc.com/CatalinaTriathlon/athlete9.htm
+http://www.pacificviews.org/weblog/archives/000714.html
+http://www.pacificvillage.org/villagevoices/tibetchinaopen05/archives/000611.html
+http://www.pacificwhale.org/childrens/fsgreensea.html
+http://www.pacificworlds.com/palau/land/winds.cfm
+http://www.pacifier.com/~graphcom/gr00005.htm
+http://www.pack75.net/newscout.htm
+http://www.packagingtoday.co.uk/story.asp?storyCode=8804
+http://www.packard.org/index.cgi?page=news&aid=0028&year=2002
+http://www.packer34.freeserve.co.uk/1939v1951.htm
+http://www.packersproshop.com/page/shipping_info/20050616142354/1118949842/
+http://www.packessentials.com/boxes.asp
+http://www.packet.cc/files/multi-net-inter-comm.html
+http://www.packing.org/news/article.jsp/1480
+http://www.packing.org/news/article.jsp/2446
+http://www.packing.org/news/article.jsp/3750
+http://www.packing.org/news/article.jsp/4021/
+http://www.packing.org/news/article.jsp/4181
+http://www.packing.org/news/article.jsp/4216
+http://www.packing.org/news/article.jsp/4438
+http://www.packing.org/news/article.jsp/4457
+http://www.packing.org/news/article.jsp/4770
+http://www.packing.org/news/article.jsp/4777
+http://www.packing.org/news/article.jsp/4777/
+http://www.packing.org/news/article.jsp/5273
+http://www.packing.org/news/article.jsp/6166
+http://www.packing.org/news/article.jsp/7598
+http://www.packing.org/news/article.jsp/7677
+http://www.packing.org/news/article.jsp/8516
+http://www.packing.org/news/article.jsp/9640
+http://www.packing.org/news/article.jsp/9640/
+http://www.packing.org/news/article.jsp/9897/
+http://www.packing.org/news/article.jsp/9907/
+http://www.packing.org/news/article.jsp/9967/
+http://www.packing.org/state/index.jsp/arizona
+http://www.packing.org/state/index.jsp/arizona/
+http://www.packing.org/state/index.jsp/kansas/
+http://www.packing.org/state/index.jsp/tennessee/
+http://www.packing.org/state/index.jsp/utah/
+http://www.packing.org/talk/thread.jsp/34458/
+http://www.packing.org/talk/thread.jsp/34467/
+http://www.packing.org/talk/thread.jsp/35381/
+http://www.packing.org/talk/thread.jsp/35420/
+http://www.packworld.com/articles/Departments/18828.html?ppr_key=02.2005&sky_key=02.2005&term=02.2005
+http://www.pacode.com/secure/data/022/chapter16/chap16toc.html
+http://www.pacode.com/secure/data/210/chapter9/s902.html
+http://www.paconsulting.com/insights/managing_complex_projects/
+http://www.paconsulting.com/news/by_pa/2002/by_pa_200205130.htm
+http://www.pacsky.org/resources/publicity/pressrelease.html
+http://www.pactv.org/rules.htm
+http://www.pactworld.org/about/staff_profiles.htm
+http://www.paddydoyle.com/historyofneglect.html
+http://www.paddyk.com/crop_tops.htm
+http://www.padfield.com/contents.html
+http://www.padraic-king.com/residential.htm
+http://www.paetzel.info/histgerm.htm
+http://www.pag.com.au/articles/6515.html
+http://www.pagameandfish.com/pa_aa114304a/
+http://www.pagameandfish.com/pa_aa114404a/
+http://www.pagat.com/allfours/schmier.html
+http://www.pagat.com/euchre/bideuch.html
+http://www.pagat.com/invented/duel.html
+http://www.pagat.com/vying/mus.html
+http://www.pagb.co.uk/media/downloads/doc/
+http://www.page-net.com/swansea.localhistory/llansamlet/pages/miningtrail.html
+http://www.pagebypagebooks.com/Frances_Hodgson_Burnett/A_Lady_of_Quality/Dealing_with_that_which_was_done_in_the_Panelled_Parlour_p3.html
+http://www.pages.drexel.edu/~menapack/info673/cash_for_college.htm
+http://www.pages.unibe.ch/jobs/postdoc.html
+http://www.pagespersonalcleaning.net/cleaningarticles.htm
+http://www.pagodapr.co.uk/webpages/media_rela.htm
+http://www.pagoo.com/services/tos_Pagoo.html
+http://www.pagosa.com/
+http://www.paho.org/English/DPI/Number12_article2_3.htm
+http://www.paho.org/English/DPI/Number14_article4_5.htm
+http://www.pahomeschoolers.com/newsletter/issue75b.htm
+http://www.pahomeschoolers.com/storybill/six.htm
+http://www.paidcontent.org/pc/arch/2003_11_03.shtml
+http://www.paidresponse.com/faq.html
+http://www.painandthelaw.org/aslme_content/24-4c/24.4c.html
+http://www.painconcern.org.uk/pages/page22.php
+http://www.painfulpleasures.com/xcart/distributor_catalog/Logo_Picture_Rings_Logo_TongueStraight_Barbells-p-1-c-97.html
+http://www.painfulpleasures.com/xcart/distributor_catalog/Straight_Barbells-p-2-c-13.html
+http://www.painfulpleasures.com/xcart/distributor_catalog/Straight_Barbells_Picture_Logo_Straight_Barbells-p-1-c-63.html
+http://www.painfulpleasures.com/xcart/wholesaler_catalog/Logo_Picture_Rings_Logo_TongueStraight_Barbells-p-1-c-97.html
+http://www.painintheenglish.com/
+http://www.painonline.org/guessing.htm
+http://www.painpoints.com/patient.htm
+http://www.painsfireworks.co.uk/company3.htm
+http://www.paintedchurch.org/wambo.htm
+http://www.paintedmountaingolf.com/
+http://www.paintedperfectly.com/article5730.html
+http://www.painterskeys.com/clickbacks/ctherapy.asp
+http://www.painterskeys.com/clickbacks/internetreview.htm
+http://www.painterskeys.com/getquotes.asp?fname=cf&ID=106
+http://www.painting-frame.com/
+http://www.pair-of-dice.com/reviews.html
+http://www.pair.com/support/knowledge_base/about_your_account/web_stats_webalizer.html
+http://www.paisley.ac.uk/courses/ug-courseinfo.asp?courseid=325
+http://www.paisley.ac.uk/courses/ug-courseinfo.asp?courseid=374
+http://www.paisley.ac.uk/schoolleavers/ug-courseinfo.asp?courseid=325
+http://www.paisley.ac.uk/schoolleavers/ug-courseinfo.asp?courseid=374
+http://www.paisleysky.net/foodnerd/
+http://www.pakistaneconomist.com/database1/cover/c2003-1.asp
+http://www.paktoday.com/faith.htm
+http://www.paktribune.com/news/index.php?id=66294
+http://www.pakwatan.com/main/article_detail.php3?t1=5339
+http://www.palace-eagles.com/history.html
+http://www.palace.net.au/serenades/main.htm
+http://www.palaceavenue-methodist.org.uk/links.htm
+http://www.paladin.demon.co.uk/oxphab/old_programme98.html
+http://www.palaestra.com/featurestory.html
+http://www.palaindians.com/news/news_000507_sdut.htm
+http://www.paleodirect.com/
+http://www.palestine-info.co.uk/extra/demands.htm
+http://www.palestine-un.org/mission/attempt1.html
+http://www.palestine-un.org/peace/c_a.html
+http://www.palestinecampaign.org/archives.asp?xid=1245
+http://www.palestinecampaign.org/archives.asp?xid=181
+http://www.palestinecampaign.org/archives.asp?xid=507
+http://www.palestinehistory.com/prisoners.htm
+http://www.palestinemonitor.org/new_web/terrorism_israeli_palestinian_relations.htm
+http://www.palgrave.com/business/gardiner/contents/chapter6/References.htm
+http://www.palindromelist.com/longest.htm
+http://www.palisade-europe.com/html/testimonials.html
+http://www.palmbeachclassifieds.com/employment/jobs/main/jobs_background_checks_main.html
+http://www.palmbeachpost.com/blogs/content/shared-blogs/palmbeach/editorial/entries/2005/06/elections_gopst.html
+http://www.palmbeachpost.com/business/content/business/epaper/2005/06/13/c1bz_downtownwpb_0613.html
+http://www.palmbeachpost.com/events/content/accent/epaper/2005/01/28/a1e_fair_vendors_0128.html
+http://www.palmbeachpost.com/health/content/local_news/epaper/2005/06/19/m1a_stemcell_0619.html
+http://www.palmbeachpost.com/news/content/news/special_reports/scripps/c1a_lerner_0127.html
+http://www.palmbeachpost.com/search/content/news/special_reports/scripps/c1a_lerner_0127.html
+http://www.palmbeachpost.com/sports/content/sports/epaper/2005/06/30/a1c_PBP_STODA_0630.html
+http://www.palmbeachpost.com/storm/content/local_news/epaper/2004/09/29/s1a_HIRISE_0929.html
+http://www.palmbeachpost.com/storm/content/storm/getready/2005/survivors.html
+http://www.palmdigitalmedia.com/product/book/excerpt/10950
+http://www.palminfocenter.com/view_story.asp?ID=1995&curpage=3
+http://www.palminfocenter.com/view_story.asp?ID=7532
+http://www.palmsource.com/interests/sales/
+http://www.palo-alto.com/su/bp/shs.cfm?id=295
+http://www.paloaltoonline.com/short_story/short_story_17/child1.shtml
+http://www.paloaltoonline.com/short_story/short_story_19/adult1.shtml
+http://www.palomar.edu/library/libserve.htm
+http://www.palominas.com/gifts01.htm
+http://www.palsplus.org/wanaque/archive/reservoir.htm
+http://www.pamdixon.com/faregame.htm
+http://www.pamelaeaston.com/home-buyer_listings-modesto-turlock-california-homes.asp
+http://www.pamelaeaston.com/home-seller_presentation-modesto-turlock-california-real-estate.asp
+http://www.pamf.org/health/guidelines/coloncancer.html
+http://www.pamgolding.co.za/services/services_leisure.asp
+http://www.pamij.com/99_4_1_wren.html
+http://www.pamij.com/harrison.html
+http://www.pamij.com/preston1.html
+http://www.pampetty.com/cwlitbased.htm
+http://www.pamspaulding.com/weblog/
+http://www.pana.ie/idn/130104.html
+http://www.panachemag.com/Archive/5_04/Feature%20Story/Powerplay/Power_Play.asp
+http://www.panam.edu/orgs/MEChA/st_barbara.html
+http://www.panarchy.org/anonymous/democracy.1962.html
+http://www.panasonic.co.uk/technology/d-snap-explained.html
+http://www.panasonic.co.uk/technology/viera-explained.html
+http://www.panasonic.com/business/provideo/app_dv_24qaboutdv1.asp
+http://www.pandagon.net/
+http://www.pandagon.net/archives/2005/05/gays_cant_destr.html
+http://www.pandagon.net/archives/2005/05/how_to_date_in.html
+http://www.pandagon.net/archives/2005/06/okay_guys_quit.html
+http://www.pandagon.net/archives/2005/06/you_bet_your_bi.html
+http://www.pandaholiday.com/english/tianfu/festival4.htm
+http://www.pandasthumb.org/pt-archives/000996.html
+http://www.pandia.com/sw-2002/36-holiday.html
+http://www.pandorapressus.com/dsm/spring02/agriculture.htm
+http://www.pandorasbox.com/louisebrooks/biblio/girleveryport-reviews.html
+http://www.pangaeasystems.com/Solutions/PangaeaSolutions3.htm
+http://www.pangeaexpo.ru/english/hints.htm
+http://www.pangolin.com/userhelp/return_shipping.htm
+http://www.panicattacks.com.au/mindful/mind03.html
+http://www.panix.com/~dangelo/col28.html
+http://www.panix.com/~gabriel/membersguide/details.html
+http://www.panix.com/~wlinden/osm.html
+http://www.panmacmillan.com.au/johnmarsden/0406-bridgewater.htm
+http://www.pannett.com/gumbo.html
+http://www.panoscan.com/PanoPress/2005Press/Lemony/LemonySnicket.html
+http://www.panosinst.org/productions/island/ib07e.php
+http://www.pantagraph.com/features/feat1217.html
+http://www.pantesting.com/testFAQ.htm
+http://www.pantheater.com/Articles/RulesImprovPartI.htm
+http://www.pantheism.net/paul/
+http://www.panther.state.fl.us/handbook/threats/institutional.html
+http://www.panthers.com/multimedia/programming.jsp
+http://www.panzerworld.net/marketgarden.html
+http://www.pao.gov.ab.ca/health/flexible-work/jobshare/what-jobshare-can-do.htm
+http://www.papaink.org/gallery/home/artist/display/4.html
+http://www.papascott.de/archives/2003/06/19/a-positive-german-link-from-instapundit/
+http://www.papau.webz.cz/doors/doors-sun.htm
+http://www.paperhall.org/info/glossary.html
+http://www.papernapkin.net/blog/
+http://www.papernews.de/papernews7/htm/englisch/protectors.php
+http://www.paperpresentation.com/
+http://www.paperwhite.co.uk/english/paper_white/articles/internal_and_external_communications/every_touch
+http://www.papillonsartpalace.com/fightreting.htm
+http://www.papillonsartpalace.com/teauchers.htm
+http://www.papimi.gr/cancer.htm
+http://www.parable.com/parable/browse.asp?cid=3339&page=2
+http://www.parable.com/parable/item_0310247500.htm&ct=Chapter_Excerpt
+http://www.parable.com/parable/item_1578561272.htm
+http://www.paradigm-sys.com/cttart/sci-docs/ctt73-smpio.html
+http://www.paradigm-sys.com/cttart/sci-docs/ctt98-iasoc.html
+http://www.paradisepoker.com/real_money.html
+http://www.paralegaladvice.org.za/docs/chap05/03.html
+http://www.paralegaladvice.org.za/docs/chap08/19.html
+http://www.paramedic.org.uk/Members/Enigma/News_Item.2004-03-17.1044/view
+http://www.paramedic.org.uk/Members/Enigma/News_Item.2004-04-17.1949/view
+http://www.paramountartscenter.com/history/murals.html
+http://www.paramountzone.com/A24.htm
+http://www.paramountzone.com/mp3.htm
+http://www.paranormaldatabase.com/calendar/Pages/jul.php
+http://www.paranormalnews.com/article.asp?ArticleID=1068
+http://www.paranormalnews.com/dream.asp
+http://www.parapsych.org/pa_bylaws.html
+http://www.parapsych.org/pa_convention_abstracts_2002.html
+http://www.parapundit.com/archives/001865.html
+http://www.paraseek.com/
+http://www.parashift.com/c++-faq-lite/big-picture.html
+http://www.parasol.com/
+http://www.parasolemt.com.au/Manual/fractures.asp
+http://www.paratrooper.net/commo/rssfeed.aspx?id=9&Task=ForumRSS
+http://www.pardonmyenglish.com/
+http://www.parecon.org/writings/10lecs.htm
+http://www.parentalguide.com/Documents/Jews_Information_Desk/Forcast_of_jesus.htm
+http://www.parentalk.co.uk/atwork/budget.asp
+http://www.parentcompany.com/creation_essays/essay9.htm
+http://www.parentcompany.com/handy_dandy/hder5.htm
+http://www.parenthetical.org/
+http://www.parenthood.com/articles.html?article_id=2011
+http://www.parentingdecisions.com/pregnancy/
+http://www.parentingdecisions.com/story/2004_02_01_history.htm
+http://www.parentinghumor.com/categories/familyparenting/dancingmath.htm
+http://www.parentingme.com/selfhelp.htm
+http://www.parents-talk.com/expertsadvice/ea_pa_0020.html
+http://www.parents.com/articles/age/5752.jsp?page=2
+http://www.parentsassociation.com/college/failed_rite.html
+http://www.parentscare.org/news/NCLB%20Forum.htm
+http://www.parentscentre.gov.uk/choosingaschool/schoolchoiceyourrights/
+http://www.parentscentre.gov.uk/whatchildrenlearn/learningathomeoutsideschool/homework/
+http://www.parentscentre.org.nz/copy.asp?dir=mag&type=m&pubid=11526
+http://www.parentspress.com/ffproball.html
+http://www.parentssource.com/give.article.3.00.html
+http://www.parentstv.org/PTC/familyguide/main.asp
+http://www.parentstv.org/ptc/campaigns/sexinthecity/main.asp
+http://www.parentsunite.org/CFparentsunite/hot/nation.cfm
+http://www.parentsunited4dc.org/theblamegame.htm
+http://www.parentsurf.com/p/articles/mi_m0FCP/is_2_23/ai_78256204
+http://www.parentswithoutpartners.org/vaMyers.htm
+http://www.parentwatch.org/generalinfo-salesperson.html
+http://www.paris-anglo.com/dedent/dedent.php?request=guide/understand/francofilechronicles/64.php
+http://www.paris-anglo.com/sign_up/preview.php?issuesID=19
+http://www.paris-anglo.com/sign_up/preview.php?issuesID=96
+http://www.paris-ar.com/html/profile.html
+http://www.parispwn.net/nl_epwn/italy/italy_11_04.html
+http://www.park2parkla.com/040215/observatoryorch/observatoryorch.cfm
+http://www.parkbank.com/nbinfo.htm
+http://www.parkcitylibrary.org/parkcitylibrary-org/history_of_library.htm
+http://www.parkelectro.com/122304.html
+http://www.parker.com/ead/cm2.asp?cmid=6893
+http://www.parkerriver.org/pages/events_cal.htm
+http://www.parkes.soton.ac.uk/external.htm
+http://www.parkingpal.com/traffic_updates.html
+http://www.parkinson.org/site/pp.asp?c=9dJFJLPwB&b=71356
+http://www.parkinsons.org.nz/about_parkinsons.html
+http://www.parkinsonsinfo.com/about_parkinsons/otherways.html
+http://www.parknicollet.com/Cancer/Health-Care-Team.cfm
+http://www.parknicollet.com/Clinic/doctors/clinic_info/clinic_providers/clinic_providers.cfm?clinicid=19&specialtyid=35
+http://www.parknicollet.com/Methodist/Doctors/Find_a_doctor/provider_detail/provider_detail.cfm?ID=1395
+http://www.parknicollet.com/Methodist/Doctors/find_a_doctor/provider_detail/provider_detail.cfm?ID=1417
+http://www.parknicollet.com/Methodist/Doctors/find_a_doctor/provider_detail/provider_detail.cfm?ID=817
+http://www.parknicollet.com/foundation/cfl/donate_c.cfm
+http://www.parkplaceschoolspage.co.uk/album1_005.htm
+http://www.parks.wa.gov/public.asp
+http://www.parksassociates.com/research/reports/tocs/2004/digital_music.htm
+http://www.parkvillageauctions.co.za/profile.php
+http://www.parkweb.vic.gov.au/1process_content.cfm?main=14&page=6
+http://www.parkweb.vic.gov.au/1process_content.cfm?main=9&page=2
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/097jr_1998-11-26-E.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/108jr_1999-02-09-E.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/118jr_1999-03-10-E.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/118jr_1999-03-10-e.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/126jr_1999-04-13-E.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/1/parlbus/chambus/senate/jour-e/126jr_1999-04-13-e.htm?Language=E&Parl=36&Ses=1
+http://www.parl.gc.ca/36/2/parlbus/chambus/house/debates/062_2000-03-03/han062_1145-e.htm
+http://www.parl.gc.ca/37/2/parlbus/chambus/senate/jour-e/032jr_2003-02-05-E.htm?Language=E&Parl=37&Ses=2
+http://www.parl.gc.ca/37/2/parlbus/commbus/senate/com-e/soci-e/rep-e/repoct02vol6-e.htm
+http://www.parl.gc.ca/38/1/parlbus/chambus/house/debates/008_2004-10-14/han008_1530-E.htm
+http://www.parl.gc.ca/38/1/parlbus/chambus/house/debates/008_2004-10-14/han008_1530-e.htm
+http://www.parl.gc.ca/38/1/parlbus/chambus/house/debates/022_2004-11-04/han022_1025-e.htm
+http://www.parl.gc.ca/InfoComDoc/36/2/ENVI/Studies/Reports/envi01/11-ch4-e.html
+http://www.parl.gc.ca/InfoComDoc/36/2/INDU/Studies/Reports/indu01/15-ch8-e.html
+http://www.parl.gc.ca/bills/government/C-32/C-32_3/12472b-5E.html
+http://www.parl.gc.ca/committee/CommitteePublication.aspx?SourceId=37898
+http://www.parl.gc.ca/common/Bills_ls.asp?Parl=37&Ses=1&ls=C16
+http://www.parl.gc.ca/common/Bills_ls.asp?Parl=37&Ses=1&ls=S13
+http://www.parl.gc.ca/common/Bills_ls.asp?Parl=37&Ses=1&ls=S34
+http://www.parl.gc.ca/information/InterParl/Associations/Commonwealth/Constitution-e1.htm
+http://www.parl.gc.ca/information/InterParl/Associations/OTAN/Nov2002/NATO48th-E.HTM
+http://www.parl.gc.ca/information/about/people/House/Speaker/role_duties/index_e.html
+http://www.parl.gc.ca/information/about/people/House/Speaker/speeches/speeches_4_9_e.html
+http://www.parl.gc.ca/information/about/people/house/mpsCom.asp?lang=E&CM=M
+http://www.parl.gc.ca/information/about/process/senate/rules-e/senrules_05-e.htm
+http://www.parl.gc.ca/information/library/PRBpubs/bp194-e.htm
+http://www.parliament.go.ug/hansard/hans_view_date.jsp?dateYYYY=1995&dateMM=07&dateDD=11
+http://www.parliament.gov.ws/popup_gen.cfm?sto=29
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/0/d0ae245ca2738df5ca256d360031b23f?OpenDocument
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA19921013024
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA20000404019
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA20001124021
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA20010921025
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA20020510021
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LA20050503019
+http://www.parliament.nsw.gov.au/prod/parlment/hansart.nsf/V3Key/LC20030916027
+http://www.parliament.nsw.gov.au/prod/parlment/publications.nsf/0/06606E8109509100CA256ECF000B1907
+http://www.parliament.sa.gov.au/about/diarymemberofhoa.shtm
+http://www.parliament.tas.gov.au/lc/finch/qa/24nov2004.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm/cmtlgr.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200001/cmselect/cmdfence/29/2913.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200102/cmselect/cmodpm/1206/1206m34.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200203/cmbills/006/en/03006x--.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200304/cmselect/cmdfence/390/39009.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200304/cmselect/cmdfence/572/4052507.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200405/cmhansrd/cm050407/text/50407w49.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200405/cmselect/cmodpm/61/4120703.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050518/debtext/50518-10.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050526/wmstext/50526m01.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050608/debtext/50608-16.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050615/debtext/50615-01.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050615/debtext/50615-24.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050615/debtext/50615-30.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050620/text/50620w22.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050622/debtext/50622-04.htm
+http://www.parliament.the-stationery-office.co.uk/pa/cm200506/cmhansrd/cm050622/debtext/50622-05.htm
+http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds05/text/50623-10.htm
+http://www.parliament.uk/commons/selcom78/a&wpnt2.htm
+http://www.parliament.uk/commons/selcom78/t&ipnt16.htm
+http://www.parliament.uk/commons/selcom90/defpnt22.htm
+http://www.parliament.uk/parliamentary_committees/environmental_audit_committee/eac_31_01_05_a.cfm
+http://www.parliament.uk/parliamentary_committees/public_administration_select_committee/pasc_19.cfm
+http://www.parliament.uk/parliamentary_committees/science_and_technology_committee/scitech180603a.cfm
+http://www.parliament.uk/parliamentary_committees/work_and_pensions_committee/wap_pn34.cfm
+http://www.parliament.uk/parliamentary_offices/post/pubs1996.cfm
+http://www.parliament.uk/useful/sp_iraq.cfm
+http://www.parliament.uk/works/newproc.cfm
+http://www.parliament.uk/works/pagovopp.cfm
+http://www.parliament.vic.gov.au/windowintime/views/showview.cfm?viewid=8
+http://www.parliament.wa.gov.au/web/webpages.nsf/WebPages/About+Bills
+http://www.parliamentofbangladesh.org/IPS_Committee_Conference/ips-14_panel1abdulhaque.htm
+http://www.parliamentofbangladesh.org/IPS_Newsletters/newsletter6_Dec00.htm
+http://www.parnasas.com/PopArena/Articles/wish.html
+http://www.parrotcode.org/faq/
+http://www.parrotparrot.com/articles/aa082200.htm
+http://www.parrotparrot.com/birdhealth/
+http://www.parrysound.com/
+http://www.parstimes.com/spaceimages/shahdad_quake.html
+http://www.partition-manager.com/home/personal/demo.htm
+http://www.partners.org/departments/teaching/C/homc3bloodtransf.htm
+http://www.partners.org/research/gme/houseofficermanuals/c/homc11interpsvcs.html
+http://www.partners.org/research/gme/houseofficermanuals/c/homc18rehab.html
+http://www.partners.org/research/gme/houseofficermanuals/c/homc3bloodtransf.html
+http://www.partnersandsimons.com/mind/news/articles/2004-07-17.asp
+http://www.partnershipcards.com/html/legal.html
+http://www.partnershipforlearning.org/article.asp?ArticleID=2142
+http://www.partnershipforlearning.org/emailarticle.asp?ArticleID=2142
+http://www.partsearch.com/press/06_28_2005.html
+http://www.partyamerica.com/about.html
+http://www.partygameideas.com/christmas-games.htm
+http://www.partygameideas.com/halloweengames.htm
+http://www.partyparties.co.uk/
+http://www.partyvibe.com/vbulletin/archive/index.php/t-2471.html
+http://www.parvez-video.com/insight/islam/is_islam_failure/index.asp
+http://www.parvez-video.com/sexual_relationships_crimes.asp
+http://www.pas-meeting.org/2005DC/Schedule/0517.htm
+http://www.pas.gov.on.ca/scripts/en/generalInfo.asp
+http://www.pasadenacal.com/rose_parade_bowl.html
+http://www.pasadenakids.com/nextSaturday.html
+http://www.pasadenaweekly.com/features/coverStory/coverstory.html
+http://www.pasco.com/experiments/biology/may_2003/home.html
+http://www.pasd.wednet.edu/school/hs/DatesTimeSch/Program%20of%20Studies/Prog%20Ind%20Trades%20Voc.htm
+http://www.pasd.wednet.edu/school/sms/admin/handbook.html
+http://www.paseniorcenters.org/information/details.htm
+http://www.pass.to/glossary/Default.htm
+http://www.passia.org/publications/dialogue_series/collaborators/saleh.html
+http://www.passingnotes.com/
+http://www.passingreflections.com/uweek.htm
+http://www.passiondiscs.co.uk/articles/cuban_generoso_jimenez_int01.htm
+http://www.passportintime.com/15-1/california.html
+http://www.passtheword.org/Jane-Lead/msgpeace.htm
+http://www.pastors.com/article.asp?ArtID=1728
+http://www.pata.org/patasite/index.php?id=873
+http://www.patagonia.com/enviro/grants_app.shtml
+http://www.patagonia.com/enviro/reports/a_dont_buy.shtml
+http://www.patchmanmusic.com/NyleSteinerHomepage.html
+http://www.patchworkprogression.com/index/entry/suddenly-simple/
+http://www.patchworx.org/Quilt/bios/ldspeaker.html
+http://www.pateam.org/list.html
+http://www.pateltonra.com/news%20Aug%2004.htm
+http://www.patent.gov.uk/about/consultations/afspost/annexh.htm
+http://www.patent.gov.uk/about/consultations/afspost/background.htm
+http://www.patent.gov.uk/about/ippd/issues/cii-meeting-hayward.htm
+http://www.patent.gov.uk/patent/reference/mediguidlines/surgery.htm
+http://www.patent.gov.uk/patent/sas/docdata.htm
+http://www.patent.gov.uk/tm/notices/rpwg/rpwg170603.htm
+http://www.patentalert.com/postingSample.food.jsp
+http://www.path.org/rfp.php?id=9
+http://www.pathfoundation.org/about/index.cfm
+http://www.pathguy.com/lectures/eye-path.htm
+http://www.pathguy.com/lectures/spleen.htm
+http://www.pathlights.com/Passion/Emmaus.htm
+http://www.pathlights.com/ce_encyclopedia/01-evol1.htm
+http://www.pathlights.com/ce_encyclopedia/10mut06.htm
+http://www.pathlights.com/ce_encyclopedia/18law05.htm
+http://www.pathlights.com/theselastdays/booklets/L26_addinfo.htm
+http://www.pathlights.com/theselastdays/tracts/tract_22j.htm
+http://www.pathnet.org/si.asp?id=430
+http://www.pathnet.org/si.asp?id=490
+http://www.pathologyinformatics.org/downloads/tutor.htm
+http://www.pathsoflearning.org/library/bridge.cfm
+http://www.pathways2promise.org/family/impact.htm
+http://www.patient.co.uk/find_me.asp
+http://www.patient.co.uk/showdoc/26740363/
+http://www.patientcenters.com/
+http://www.patientfirst.com/HealthNews/
+http://www.patientmedia.com/howto/socratic.htm
+http://www.patmcnees.com/work24.htm
+http://www.patrickcrusade.org/Alabama_News.html
+http://www.patricking.com/index.php/whois/entry/ask_cleo/
+http://www.patrickneate.com/page.asp?p=Road
+http://www.patrickswayze.net/alongkit1.htm
+http://www.patrickswayze.net/article2.htm
+http://www.patriot-paradox.com/archives/2003_10.php
+http://www.patriotblog.com/index.php?id=625
+http://www.patriotist.com/jaarch/ja20020408.htm
+http://www.patriotist.com/taxfacts.htm
+http://www.patriotnetwork.info/Not%20Intended.htm
+http://www.patriots.com/games/index.cfm?ac=completereportsdetail&pid=10149&pcid=41&special_section=na
+http://www.patriots.com/games/index.cfm?ac=gamereportdetail&pid=10149&pcid=41
+http://www.patriots.com/search/index.cfm?ac=searchdetail&pid=2777&pcid=41
+http://www.patrobertson.com/Speeches/IsraelLauder.asp
+http://www.pattinson.co.uk/Public/Modules/Buy/Land.aspx
+http://www.paulbrady.com/lyrics/libertytapes.asp
+http://www.paulfleischman.net/bio.htm
+http://www.paulieworld.com/blog/
+http://www.paulleydenonline.com/simonbio.html
+http://www.paulmccall.com/specevent.html
+http://www.paulmichaelglaser.org/gmtv_2004.html
+http://www.paulmichaelglaser.org/ukreunion_interview_1999.html
+http://www.paulpearsall.com/info/press/3.html
+http://www.paulszabo.com/quarterly_reports/summer_2002.htm
+http://www.pavedarts.ca/memberpolicyfulltext.php
+http://www.pavefrance.com/blog/
+http://www.pavilion.co.uk/williampennpri/page6.html
+http://www.pavingexpert.com/layflag1.htm
+http://www.pavingexpert.com/pic01.htm
+http://www.paw-rescue.org/PAW/PETTIPS/DogTip_HowtoPreventEscapes.php
+http://www.pawsonline.info/lookingafterkittens.htm
+http://www.paxchristi.org.uk/JustPeace/jp226.htm
+http://www.paxchristi.org.uk/PeaceSunday1.htm
+http://www.pay-equity.org/info-opposition.html
+http://www.payaway.co.uk/
+http://www.payload.com/content/directions.html
+http://www.paynoincometax.com/
+http://www.paypal.com/html/nyt-062900.html
+http://www.paypaldev.org/topic.asp?TOPIC_ID=9668
+http://www.paypaldev.org/topic.asp?TOPIC_ID=9972
+http://www.payperclicksearchengines.com/update-newsletter-034.shtml
+http://www.payroll.ucla.edu/qaptredb.htm
+http://www.pballes.com/views1.htm
+http://www.pbase.com/abbarich/coloured_alphabet
+http://www.pbbi.nl/English/Businesses-For-Sale.htm
+http://www.pbc.gov.cn/english/detail.asp?col=6500&ID=51
+http://www.pbc.gov.cn/english/detail.asp?col=6500&ID=70
+http://www.pbc.gov.cn/english/detail.asp?col=6500&id=70
+http://www.pbc.org/dp/ritchie/3997.html
+http://www.pbc.org/dp/ritchie/4001.html
+http://www.pbc.org/dp/stedman/adventure/0264.html
+http://www.pbc.org/dp/stedman/colossians/4022.html
+http://www.pbc.org/dp/stedman/leviticus/0515.html
+http://www.pbc.org/dp/stedman/misc/3137.html
+http://www.pbc.org/dp/stedman/parables/0371.html
+http://www.pbc.org/library/files/html/3997.html
+http://www.pbc.org/library/files/html/exo019.html
+http://www.pbcchicago.com/subhtml/proj_hist_display.asp?Agency_Code=PLA&pRecSet=25
+http://www.pbgc.gov/plans/grandunion/questions.htm
+http://www.pbgc.gov/plans/grandunion/status.htm
+http://www.pblutah.com/community.asp
+http://www.pbm.com/~lindahl/articles/onbards.html
+http://www.pbm.com/~lindahl/lod/vol1/hitwkidnap.html
+http://www.pbm.com/~lindahl/rgp.faq.html
+http://www.pbministries.org/Theology/Davis%20Huckabee/Sermons%20To%20Baptist%20Churches/ch17_independent_baptists.htm
+http://www.pbministries.org/Theology/J.%20B.%20Moody/My_Church/my_church06b.htm
+http://www.pbministries.org/books/gill/gills_archive.htm
+http://www.pbnco.com/eng/news/pbn_in_print/written_by_pbn/RGA_VNikonov.php
+http://www.pbp.com/editor.html
+http://www.pbrc.net/dogpages/west/arpf10458.html
+http://www.pbreview.com/products/reviews/3276/?expdesc=1
+http://www.pbs.org/aboutpbs/aboutpbs_support_ways.html
+http://www.pbs.org/americanrootsmusic/pbs_arm_oralh_flacojimenez.html
+http://www.pbs.org/americanrootsmusic/pbs_arm_oralh_jamescotton.html
+http://www.pbs.org/art21/artists/turrell/clip1.html
+http://www.pbs.org/art21/help.html
+http://www.pbs.org/auschwitz/about/
+http://www.pbs.org/campus/006_News/006-nov-03.html
+http://www.pbs.org/civilwar/classroom/lesson_appomattox.html
+http://www.pbs.org/cringely/pulpit/pulpit20000601.html
+http://www.pbs.org/cringely/pulpit/pulpit20010628.html
+http://www.pbs.org/cringely/pulpit/pulpit20020627.html
+http://www.pbs.org/cringely/pulpit/pulpit20040408.html
+http://www.pbs.org/cringely/pulpit/pulpit20040506.html
+http://www.pbs.org/cringely/pulpit/pulpit20040527.html
+http://www.pbs.org/cringely/pulpit/pulpit20040624.html
+http://www.pbs.org/cringely/pulpit/pulpit20050331.html
+http://www.pbs.org/cringely/pulpit/pulpit20050512.html
+http://www.pbs.org/cringely/pulpit/pulpit20050609.html
+http://www.pbs.org/edens/borneo/teachers_batty.html
+http://www.pbs.org/fmc/interviews/oneill.htm
+http://www.pbs.org/frontlineworld/stories/bhutan/interview.html
+http://www.pbs.org/hollywoodpresents/theoldsettler/prodroles/pr_costume.html
+http://www.pbs.org/hueypnewton/revolution/revolution_feedback.html
+http://www.pbs.org/independentlens/resources.html
+http://www.pbs.org/jazz/about/about_behind_the_scenes3.htm
+http://www.pbs.org/journeytoplanetearth/education/agriculture.html
+http://www.pbs.org/justone/jonscr2.htm
+http://www.pbs.org/kcet/senioryear/music/nobodyswatching_pop.html
+http://www.pbs.org/kcet/tavissmiley/archive/200505/20050527_transcript.html
+http://www.pbs.org/kcts/preciouschildren/diversity/read_parent.html
+http://www.pbs.org/klru/austin/interviews/mmcdonald_interview.html
+http://www.pbs.org/lewisandclark/living/idx_7.html
+http://www.pbs.org/lewisandclark/living/idx_9.html
+http://www.pbs.org/newshour/bb/africa/jan-june01/congo_1-23.html
+http://www.pbs.org/newshour/bb/africa/july-dec02/zimbabwe_8-21.html
+http://www.pbs.org/newshour/bb/asia/jan-june00/korea_6-14.html
+http://www.pbs.org/newshour/bb/asia/jan-june00/pakistan_3-24.html
+http://www.pbs.org/newshour/bb/asia/jan-june01/armitage_4-13.html
+http://www.pbs.org/newshour/bb/asia/jan-june02/korea_2-20.html
+http://www.pbs.org/newshour/bb/asia/jan-june04/friedman_03-09.html
+http://www.pbs.org/newshour/bb/asia/jan-june05/coping_1-3.html
+http://www.pbs.org/newshour/bb/asia/jan-june05/help_1-3.html
+http://www.pbs.org/newshour/bb/asia/jan-june05/medical_1-5.html
+http://www.pbs.org/newshour/bb/asia/jan-june05/nuclear_2-10.html
+http://www.pbs.org/newshour/bb/asia/july-dec02/nuclear_10-17.html
+http://www.pbs.org/newshour/bb/asia/july-dec04/aid_12-29.html
+http://www.pbs.org/newshour/bb/asia/july-dec97/imf_12-12.html
+http://www.pbs.org/newshour/bb/asia/july-dec99/wto_11-15.html
+http://www.pbs.org/newshour/bb/asia/vietnam/hmong_5-4.html
+http://www.pbs.org/newshour/bb/bosnia/jan-june98/holbrooke_5-19.html
+http://www.pbs.org/newshour/bb/budget/july-dec98/budget_10-21.html
+http://www.pbs.org/newshour/bb/business/jan-june02/housing_5-28.html
+http://www.pbs.org/newshour/bb/business/jan-june02/markets_6-26.html
+http://www.pbs.org/newshour/bb/business/jan-june02/trading_3-19.html
+http://www.pbs.org/newshour/bb/business/jan-june02/worldcom_5-01.html
+http://www.pbs.org/newshour/bb/business/jan-june05/labor_6-15.html
+http://www.pbs.org/newshour/bb/business/jan-june99/american_2-15.html
+http://www.pbs.org/newshour/bb/business/july-dec01/hp_9-4.html
+http://www.pbs.org/newshour/bb/business/july-dec01/microsoft_11-6.html
+http://www.pbs.org/newshour/bb/business/july-dec01/philanthropy_12-25.html
+http://www.pbs.org/newshour/bb/business/july-dec02/perks_09-16.html
+http://www.pbs.org/newshour/bb/business/july-dec02/slow_retail_12-31.html
+http://www.pbs.org/newshour/bb/business/july-dec99/overwork_9-6.html
+http://www.pbs.org/newshour/bb/business/july-dec99/russianbanks.html
+http://www.pbs.org/newshour/bb/business/wal-mart/challenging.html
+http://www.pbs.org/newshour/bb/canada/july-dec00/election_11-28.html
+http://www.pbs.org/newshour/bb/cyberspace/july-dec00/napster_7-27.html
+http://www.pbs.org/newshour/bb/economy/jan-june00/econ_4-5.html
+http://www.pbs.org/newshour/bb/economy/jan-june00/economists_1-13.html
+http://www.pbs.org/newshour/bb/economy/jan-june01/fed_1-3.html
+http://www.pbs.org/newshour/bb/economy/jan-june01/natgas_2-26.html
+http://www.pbs.org/newshour/bb/economy/jan-june01/summit_4-20.html
+http://www.pbs.org/newshour/bb/economy/jan-june03/fed_06-25.html
+http://www.pbs.org/newshour/bb/economy/jan-june03/plan_1-7.htm
+http://www.pbs.org/newshour/bb/economy/jan-june99/fed_6-30.html
+http://www.pbs.org/newshour/bb/economy/july-dec02/ports_10-03.html
+http://www.pbs.org/newshour/bb/economy/july-dec03/unemployment_07-29.html
+http://www.pbs.org/newshour/bb/economy/july-dec98/rates_10-15.html
+http://www.pbs.org/newshour/bb/economy/july-dec98/wolfensohn_10-8.html
+http://www.pbs.org/newshour/bb/economy/july-dec99/fed_8-24.html
+http://www.pbs.org/newshour/bb/education/jan-june02/costs_6-5.html
+http://www.pbs.org/newshour/bb/education/jan-june98/creation_4-21.html
+http://www.pbs.org/newshour/bb/education/jan-june98/vouchers_4-29.html
+http://www.pbs.org/newshour/bb/education/jan-june99/educators_4-22.html
+http://www.pbs.org/newshour/bb/education/jan-june99/retention_3-9.html
+http://www.pbs.org/newshour/bb/election/jan-june99/elections_6-24.html
+http://www.pbs.org/newshour/bb/election/july-dec99/hatch_12-17.html
+http://www.pbs.org/newshour/bb/election/october96/finance_reform_10-21.html
+http://www.pbs.org/newshour/bb/entertainment/jan-june02/culture_1-01.html
+http://www.pbs.org/newshour/bb/entertainment/july-dec00/rockwell_7-4.html
+http://www.pbs.org/newshour/bb/entertainment/july-dec97/streetcar_11-11.html
+http://www.pbs.org/newshour/bb/environment/jan-june00/wildfires_5-11.html
+http://www.pbs.org/newshour/bb/environment/jan-june01/bushenv_3-29.html
+http://www.pbs.org/newshour/bb/environment/jan-june01/envpol_1-3.html
+http://www.pbs.org/newshour/bb/environment/july-dec02/firefight_7-2.html
+http://www.pbs.org/newshour/bb/europe/europe.html
+http://www.pbs.org/newshour/bb/europe/jan-june02/allies_5-23.html
+http://www.pbs.org/newshour/bb/europe/jan-june02/fischer.html
+http://www.pbs.org/newshour/bb/europe/jan-june03/blair_1-31.html
+http://www.pbs.org/newshour/bb/europe/jan-june05/putin_2-24.html
+http://www.pbs.org/newshour/bb/europe/jan-june99/albright_5-7.html
+http://www.pbs.org/newshour/bb/europe/jan-june99/cook_5-21.html
+http://www.pbs.org/newshour/bb/europe/jan-june99/kosovo_2-22.html
+http://www.pbs.org/newshour/bb/europe/jan-june99/military_3-31.html
+http://www.pbs.org/newshour/bb/europe/july-dec02/germany_10-31.html
+http://www.pbs.org/newshour/bb/europe/july-dec98/hume_10-16.html
+http://www.pbs.org/newshour/bb/europe/july-dec98/mitchell_10-16.html
+http://www.pbs.org/newshour/bb/europe/july-dec99/berlin_9-6.html
+http://www.pbs.org/newshour/bb/europe/july-dec99/russianbanks.html
+http://www.pbs.org/newshour/bb/fedagencies/jan-june00/data_6-13a.html
+http://www.pbs.org/newshour/bb/fedagencies/jan-june00/richardson1_6-21.html
+http://www.pbs.org/newshour/bb/fedagencies/jan-june00/richardson_6-21.html
+http://www.pbs.org/newshour/bb/fedagencies/jan-june98/tax_4-15.html
+http://www.pbs.org/newshour/bb/fedagencies/july-dec02/intelligence_10-17.html
+http://www.pbs.org/newshour/bb/fedagencies/july-dec04/goss_9-15.html
+http://www.pbs.org/newshour/bb/fedagencies/july-dec04/ridge_11-30.html
+http://www.pbs.org/newshour/bb/health/jan-june00/genome_sharing_3-16.html
+http://www.pbs.org/newshour/bb/health/jan-june00/healthcare_1-20.html
+http://www.pbs.org/newshour/bb/health/jan-june01/cancer_01-01.html
+http://www.pbs.org/newshour/bb/health/jan-june01/diets_01-11.html
+http://www.pbs.org/newshour/bb/health/jan-june01/genome_2-12.html
+http://www.pbs.org/newshour/bb/health/jan-june02/eden_2-27.html
+http://www.pbs.org/newshour/bb/health/jan-june05/fish.html
+http://www.pbs.org/newshour/bb/health/jan-june05/flu_4-7.html
+http://www.pbs.org/newshour/bb/health/jan-june05/mintz.html
+http://www.pbs.org/newshour/bb/health/jan-june98/breast_4-16.html
+http://www.pbs.org/newshour/bb/health/july-dec01/anthrax_10-23.html
+http://www.pbs.org/newshour/bb/health/july-dec01/hopkins_7-20.html
+http://www.pbs.org/newshour/bb/health/july-dec01/patients_8-02.html
+http://www.pbs.org/newshour/bb/health/july-dec03/pill_12-17.html
+http://www.pbs.org/newshour/bb/health/july-dec04/celebrex_12-17.html
+http://www.pbs.org/newshour/bb/health/july-dec04/odorico.html
+http://www.pbs.org/newshour/bb/health/july-dec04/wounded2_7-16.html
+http://www.pbs.org/newshour/bb/health/july-dec99/hmos_9-30.html
+http://www.pbs.org/newshour/bb/health/washington_4-9.html
+http://www.pbs.org/newshour/bb/international/jan-june00/moore_1-20.html
+http://www.pbs.org/newshour/bb/international/jan-june00/seattle_1-18.html
+http://www.pbs.org/newshour/bb/international/jan-june02/axis_1-30.html
+http://www.pbs.org/newshour/bb/international/jan-june04/madrid_3-15.html
+http://www.pbs.org/newshour/bb/international/july-dec02/wright_11-28.html
+http://www.pbs.org/newshour/bb/international/july-dec03/wto_9-15.html
+http://www.pbs.org/newshour/bb/latin_america/jan-june00/elian_3-30.html
+http://www.pbs.org/newshour/bb/latin_america/jan-june04/haiti_2-25.html
+http://www.pbs.org/newshour/bb/latin_america/jan-june98/chile_5-26.html
+http://www.pbs.org/newshour/bb/latin_america/july-dec99/colombia_8-11.html
+http://www.pbs.org/newshour/bb/latin_america/july97/mexico_7-7.html
+http://www.pbs.org/newshour/bb/law/jan-june01/russia_3-23.html
+http://www.pbs.org/newshour/bb/law/jan-june03/patriot_2-24.html
+http://www.pbs.org/newshour/bb/law/jan-june05/patriot_6-16.html
+http://www.pbs.org/newshour/bb/law/jan-june99/crimestats_5-18.html
+http://www.pbs.org/newshour/bb/law/june97/mcveigh_6-2.html
+http://www.pbs.org/newshour/bb/media/jan-june00/political_ads_1-12.html
+http://www.pbs.org/newshour/bb/media/jan-june01/greenfield_04-25.html
+http://www.pbs.org/newshour/bb/media/jan-june01/news_3-9.html
+http://www.pbs.org/newshour/bb/media/jan-june03/lynch_06-10.html
+http://www.pbs.org/newshour/bb/media/jan-june04/adwars_06-02.html
+http://www.pbs.org/newshour/bb/media/jan-june04/clark_03-29.html
+http://www.pbs.org/newshour/bb/media/jan-june04/images_4-23.html
+http://www.pbs.org/newshour/bb/media/jan-june05/deepthroat_6-01.html
+http://www.pbs.org/newshour/bb/media/july-dec00/ad_wars_9-21.html
+http://www.pbs.org/newshour/bb/media/july-dec00/filipov_7-27.html
+http://www.pbs.org/newshour/bb/media/july-dec00/race_7-11.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june03/armitage_3-25.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june03/basra_5-14.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june03/iraq_1-30.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june03/iraqupdate_06-12.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june03/military_3-24.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june04/abuse_05-19.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june04/iraq_04-30.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june04/wmd_01-09.html
+http://www.pbs.org/newshour/bb/middle_east/jan-june05/negroponte_1-31.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec00/schultz_10-23.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec03/iraq_12-15.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec03/iraq_8-20.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec03/saddamsons_7-23.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec04/najaf_8-12.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec04/yellowcake_7-20.html
+http://www.pbs.org/newshour/bb/middle_east/july-dec98/albright_11-12.html
+http://www.pbs.org/newshour/bb/military/jan-june02/assault_3-8.html
+http://www.pbs.org/newshour/bb/military/jan-june02/myers_4-19.html
+http://www.pbs.org/newshour/bb/military/jan-june03/ground_03-17.html
+http://www.pbs.org/newshour/bb/military/jan-june03/military_03-28.html
+http://www.pbs.org/newshour/bb/military/jan-june04/army_1-13.html
+http://www.pbs.org/newshour/bb/military/jan-june05/gays_4-13.html
+http://www.pbs.org/newshour/bb/military/july-dec01/meyers_8-24.html
+http://www.pbs.org/newshour/bb/military/july-dec01/terror_response_9-12.html
+http://www.pbs.org/newshour/bb/military/july-dec04/reserves_7-21.html
+http://www.pbs.org/newshour/bb/military/july-dec99/race_military_11-29.html
+http://www.pbs.org/newshour/bb/political_wrap/jan-june05/sb_4-15.html
+http://www.pbs.org/newshour/bb/political_wrap/july-dec03/sy_07-04.html
+http://www.pbs.org/newshour/bb/politics/jan-june01/advise_01-15.html
+http://www.pbs.org/newshour/bb/politics/july-dec00/for-policy_10-12.html
+http://www.pbs.org/newshour/bb/politics/july-dec04/economics_7-26.html
+http://www.pbs.org/newshour/bb/race_relations/jan-june05/killen_6-20.html
+http://www.pbs.org/newshour/bb/race_relations/jan-june05/killen_6-21.html
+http://www.pbs.org/newshour/bb/race_relations/july-dec01/york_7-23.html
+http://www.pbs.org/newshour/bb/race_relations/july-dec03/march_08-28.html
+http://www.pbs.org/newshour/bb/religion/jan-june05/papacy_4-04.html
+http://www.pbs.org/newshour/bb/science/jan-june00/genome_2-29.html
+http://www.pbs.org/newshour/bb/science/jan-june04/cicadas_05-26-04.html
+http://www.pbs.org/newshour/bb/science/july-dec03/planet_07-11.html
+http://www.pbs.org/newshour/bb/science/july-dec04/everglades_11-25.html
+http://www.pbs.org/newshour/bb/social_security/jan-june05/ss_2-03.html
+http://www.pbs.org/newshour/bb/sports/jan-june05/steroids_3-17.html
+http://www.pbs.org/newshour/bb/sports/jan-june99/olympics_1-25.html
+http://www.pbs.org/newshour/bb/sports/jewell_10-28.html
+http://www.pbs.org/newshour/bb/terrorism/jan-june02/dragnet_4-3.html
+http://www.pbs.org/newshour/bb/terrorism/jan-june04/test_3-24.html
+http://www.pbs.org/newshour/bb/terrorism/jan-june04/wrong_04-13.html
+http://www.pbs.org/newshour/bb/terrorism/july-dec01/binladen_11-20.html
+http://www.pbs.org/newshour/bb/terrorism/july-dec01/military_10-19.html
+http://www.pbs.org/newshour/bb/terrorism/july-dec01/wolfowitz-9-14.html
+http://www.pbs.org/newshour/bb/terrorism/july-dec04/commission_7-22.html
+http://www.pbs.org/newshour/bb/transportation/jan-june02/skies_1-17.html
+http://www.pbs.org/newshour/bb/transportation/jan-june04/privacy_1-22.html
+http://www.pbs.org/newshour/bb/transportation/july-dec01/airports_07-10.html
+http://www.pbs.org/newshour/bb/transportation/july-dec02/air_8-15.html
+http://www.pbs.org/newshour/bb/transportation/july-dec99/crash_10-26.html
+http://www.pbs.org/newshour/bb/white_house/jan-june03/action_1-15.html
+http://www.pbs.org/newshour/bb/white_house/jan-june04/clinton_06-21.html
+http://www.pbs.org/newshour/bb/white_house/jan-june05/address_1-20.html
+http://www.pbs.org/newshour/bb/white_house/july-dec04/clinton_7-07.html
+http://www.pbs.org/newshour/bb/white_house/july-dec04/firstlady_10-25.html
+http://www.pbs.org/newshour/bb/white_house/july-dec04/review_12-30.html
+http://www.pbs.org/newshour/bb/white_house/july-dec99/barshefsky_11-18.html
+http://www.pbs.org/newshour/bb/youth/jan-june01/scoutwars_05-23.html
+http://www.pbs.org/newshour/bb/yugoslavia/jan-june01/milosevic_5-8.html
+http://www.pbs.org/newshour/character/essays/roosevelt.html
+http://www.pbs.org/newshour/extra/features/jan-june00/martialarts.html
+http://www.pbs.org/newshour/extra/features/jan-june00/vietnam.html
+http://www.pbs.org/newshour/extra/features/jan-june02/milosevic_2-6.html
+http://www.pbs.org/newshour/extra/features/jan-june03/ephedra.html
+http://www.pbs.org/newshour/extra/features/july-dec00/brokensystem.html
+http://www.pbs.org/newshour/extra/features/july-dec04/ukraine_11-24.html
+http://www.pbs.org/newshour/extra/teachers/lessonplans/economics/trade_long.html
+http://www.pbs.org/newshour/extra/teachers/lessonplans/health/clubdrugs/
+http://www.pbs.org/newshour/extra/teachers/lessonplans/media/clock_9-02.html
+http://www.pbs.org/newshour/extra/teachers/lessonplans/world/haiti_long_3-10.html
+http://www.pbs.org/newshour/forum/may02/us_design.html
+http://www.pbs.org/newshour/forum/women_workplace_4-24.html
+http://www.pbs.org/newshour/gergen/july-dec99/worldwar_women_10-11.html
+http://www.pbs.org/newshour/health/global/generics_wto.html
+http://www.pbs.org/newshour/health/prescriptions/bush_7-12.html
+http://www.pbs.org/newshour/impeachment/analysis/safrica_12-22.html
+http://www.pbs.org/newshour/shields&gigot/april99/sb_4-2.html
+http://www.pbs.org/newshour/shields&gigot/july99/sg_7-30.html
+http://www.pbs.org/newshour/shields&gigot/november99/sg_11-5.html
+http://www.pbs.org/newshour/shields&gigot/september98/sg_9-11.html
+http://www.pbs.org/newshour/vote2004/debates/
+http://www.pbs.org/niot/about/niot1.html
+http://www.pbs.org/now/classroom/diet.html
+http://www.pbs.org/now/politics/911widows.html
+http://www.pbs.org/now/politics/burma.html
+http://www.pbs.org/now/politics/gundebate.html
+http://www.pbs.org/now/politics/gundebate2.html
+http://www.pbs.org/now/printable/transcript_delta_print.html
+http://www.pbs.org/now/printable/transcript_henwood_print.html
+http://www.pbs.org/now/science/medicareqanda.html
+http://www.pbs.org/now/transcript/transcript_clearc.html
+http://www.pbs.org/now/transcript/transcript_delta.html
+http://www.pbs.org/now/transcript/transcript_henwood.html
+http://www.pbs.org/odyssey/voice/20040405_vfts_transcript.html
+http://www.pbs.org/opb/childrenshospital/classroom/
+http://www.pbs.org/parents/issuesadvice/talkingandreading/html/baby/books_classic.html
+http://www.pbs.org/parents/issuesadvice/talkingandreading/html/rwriter/talking_milestones.html
+http://www.pbs.org/pbsyou/schedules/description.html?nola_root=HAMA&date=2005-02-02
+http://www.pbs.org/pbsyou/schedules/description.html?nola_root=LEEB&date=2005-01-18
+http://www.pbs.org/pbsyou/schedules/description.html?nola_root=LEEB&date=2005-02-02
+http://www.pbs.org/pov/pov2003/west47thstreet/behind_ask.html
+http://www.pbs.org/pov/pov2004/lastmanstanding/behind_journal.html
+http://www.pbs.org/pov/pov2004/thirst/behind_interview.html
+http://www.pbs.org/pov/pov2004/warfeelslikewar/special_covering.html
+http://www.pbs.org/pov/pov2005/chisholm/behind_journal.html
+http://www.pbs.org/pov/pov2005/shelbyknox/special_interviews_2.html
+http://www.pbs.org/pov/pov2005/shelbyknox/special_interviews_3.html
+http://www.pbs.org/pov/pov2005/shelbyknox/special_pledges_1.html
+http://www.pbs.org/pov/tvraceinitiative/facingthetruth/
+http://www.pbs.org/race/000_About/002_04-background-01-y.htm
+http://www.pbs.org/readytolearn/resources/tvtips.html
+http://www.pbs.org/remotecontrol/news/notice_talkinghealth.html
+http://www.pbs.org/remotecontrol/news/notice_talkingwar.html
+http://www.pbs.org/saf/1101/teaching/teaching.htm
+http://www.pbs.org/saf/1104/teaching/teaching2.htm
+http://www.pbs.org/saf/1107/resources/transcript.htm
+http://www.pbs.org/saf/1203/resources/transcript.htm
+http://www.pbs.org/saf/1205/teaching/teaching.htm
+http://www.pbs.org/saf/1207/hotline/hballard.htm
+http://www.pbs.org/saf/1208/resources/transcript.htm
+http://www.pbs.org/saf/1209/resources/transcript.htm
+http://www.pbs.org/safarchive/4_class/45_pguides/pguide_303/4533_dyslexia.html
+http://www.pbs.org/safarchive/4_class/45_pguides/pguide_702/4572_malaria.html
+http://www.pbs.org/safarchive/5_cool/galapagos/g48_glossary.html
+http://www.pbs.org/speak/ahead/technology/voiceinterface/
+http://www.pbs.org/speak/education/curriculum/high/style/
+http://www.pbs.org/speak/seatosea/americanvarieties/AAVE/hooked/
+http://www.pbs.org/speak/seatosea/americanvarieties/pacificnorthwest/
+http://www.pbs.org/speak/seatosea/americanvarieties/texan/
+http://www.pbs.org/speak/speech/prejudice/women/
+http://www.pbs.org/standarddeviantstv/transcript_amergov.html
+http://www.pbs.org/teachersource/media_lit/getting_started.shtm
+http://www.pbs.org/teachersource/planning/schedulex/description.shtm?nola_root=CBDG&date=2005-06-18
+http://www.pbs.org/teachersource/planning/schedulex/description.shtm?nola_root=MAYM&date=2005-06-18
+http://www.pbs.org/teachersource/prek2/issues/1102issue.shtm
+http://www.pbs.org/teachersource/recommended/health_fitness/lk_boysandgirls.shtm
+http://www.pbs.org/teachersource/recommended/science_tech/lk_generalscience.shtm
+http://www.pbs.org/teachersource/roadrules.shtm
+http://www.pbs.org/teachersource/teachtech/research.shtm
+http://www.pbs.org/teachersource/thismonth/jan00/index.shtm
+http://www.pbs.org/theblues/classroom/intdelta.html
+http://www.pbs.org/thinktank/transcript1017.html
+http://www.pbs.org/transistor/tv/script3.html
+http://www.pbs.org/tuckercarlson/asktucker/pastqa_20040917.html
+http://www.pbs.org/weta/forcemorepowerful/nashville/interview.html
+http://www.pbs.org/weta/forcemorepowerful/series/interview.html
+http://www.pbs.org/weta/reportingamericaatwar/about/filmmakers.html
+http://www.pbs.org/weta/roughscience/series3/gold_rush/balance.html
+http://www.pbs.org/weta/thewest/people/a_c/custer.htm
+http://www.pbs.org/weta/washingtonweek/transcripts/transcript970425.html
+http://www.pbs.org/wgbh/amex/cable/peopleevents/e_first.html
+http://www.pbs.org/wgbh/amex/cable/peopleevents/p_field.html
+http://www.pbs.org/wgbh/amex/daughter/peopleevents/p_kim.html
+http://www.pbs.org/wgbh/amex/dday/sfeature/sf_press.html
+http://www.pbs.org/wgbh/amex/grant/peopleevents/p_sherman.html
+http://www.pbs.org/wgbh/amex/guerrilla/filmmore/pt.html
+http://www.pbs.org/wgbh/amex/newyork/peopleevents/e_archit.html
+http://www.pbs.org/wgbh/amex/newyork/peopleevents/e_ideal.html
+http://www.pbs.org/wgbh/amex/presidents/37_nixon/psources/ps_inaug2.html
+http://www.pbs.org/wgbh/amex/telephone/filmmore/transcript/
+http://www.pbs.org/wgbh/amex/three/timeline/index_3.html
+http://www.pbs.org/wgbh/amex/till/sfeature/sf_look_confession.html
+http://www.pbs.org/wgbh/amex/vietnam/108ts.html
+http://www.pbs.org/wgbh/aso/databank/entries/bmbarn.html
+http://www.pbs.org/wgbh/aso/databank/entries/boleak.html
+http://www.pbs.org/wgbh/commandingheights/shared/minitext/ess_germanhyperinflation.html
+http://www.pbs.org/wgbh/evolution/library/04/3/text_pop/l_043_42.html
+http://www.pbs.org/wgbh/evolution/library/10/
+http://www.pbs.org/wgbh/masterpiece/mrchips/ntof_raid.html
+http://www.pbs.org/wgbh/misunderstoodminds/mathstrats.html
+http://www.pbs.org/wgbh/mystery/announced/actors.html
+http://www.pbs.org/wgbh/nova/elegant/view-peet.html
+http://www.pbs.org/wgbh/nova/galileo/mistake.html
+http://www.pbs.org/wgbh/nova/listseason/11.html
+http://www.pbs.org/wgbh/nova/meningitis/amy.html
+http://www.pbs.org/wgbh/nova/redbaron/mind.html
+http://www.pbs.org/wgbh/nova/satoyama/hibernation.html
+http://www.pbs.org/wgbh/nova/sciencenow/feedback/
+http://www.pbs.org/wgbh/nova/teachers/activities/2411_coma.html
+http://www.pbs.org/wgbh/nova/teachers/activities/2412_barrier.html
+http://www.pbs.org/wgbh/nova/teachers/activities/2702_everest.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3005_vinson.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3011_redbaron.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3101_mars.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3107_tornado.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3108_worldbal.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3113_origins.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3202_hoax.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3204_02_nsn.html
+http://www.pbs.org/wgbh/nova/teachers/activities/3205_vinland.html
+http://www.pbs.org/wgbh/nova/tornado/forecasting.html
+http://www.pbs.org/wgbh/nova/tothemoon/lastman2.html
+http://www.pbs.org/wgbh/nova/transcripts/2704stockmarket.html
+http://www.pbs.org/wgbh/nova/transcripts/3202_hoax.html
+http://www.pbs.org/wgbh/nova/worldbalance/about.html
+http://www.pbs.org/wgbh/pages/frontline/gulf/oral/baker/1.html
+http://www.pbs.org/wgbh/pages/frontline/shows/assault/context/employment.html
+http://www.pbs.org/wgbh/pages/frontline/shows/binladen/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/binladen/who/interview.html
+http://www.pbs.org/wgbh/pages/frontline/shows/choice2000/gore/morris.html
+http://www.pbs.org/wgbh/pages/frontline/shows/choice2000/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/choice2004/etc/script.html
+http://www.pbs.org/wgbh/pages/frontline/shows/choice2004/interviews/woodward.html
+http://www.pbs.org/wgbh/pages/frontline/shows/choice2004/talk/index2.html
+http://www.pbs.org/wgbh/pages/frontline/shows/clinton/etc/11091994.html
+http://www.pbs.org/wgbh/pages/frontline/shows/cool/rushkoff/brand.html
+http://www.pbs.org/wgbh/pages/frontline/shows/crash/interviews/soros.html
+http://www.pbs.org/wgbh/pages/frontline/shows/cyberwar/etc/letter.html
+http://www.pbs.org/wgbh/pages/frontline/shows/drugs/special/north.html
+http://www.pbs.org/wgbh/pages/frontline/shows/edison/interviews/horsey.html
+http://www.pbs.org/wgbh/pages/frontline/shows/evil/interviews/marchal.html
+http://www.pbs.org/wgbh/pages/frontline/shows/evil/readings/french.html
+http://www.pbs.org/wgbh/pages/frontline/shows/evil/warning/premonitions.html
+http://www.pbs.org/wgbh/pages/frontline/shows/fertility/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/fostercare/etc/producers.html
+http://www.pbs.org/wgbh/pages/frontline/shows/fostercare/etc/synopsis.html
+http://www.pbs.org/wgbh/pages/frontline/shows/hackers/interviews/power.html
+http://www.pbs.org/wgbh/pages/frontline/shows/heart/etc/synopsis.html
+http://www.pbs.org/wgbh/pages/frontline/shows/heart/view/
+http://www.pbs.org/wgbh/pages/frontline/shows/invasion/interviews/white.html
+http://www.pbs.org/wgbh/pages/frontline/shows/iraq/themes/beyond.html
+http://www.pbs.org/wgbh/pages/frontline/shows/jefferson/mixed/onedrop.html
+http://www.pbs.org/wgbh/pages/frontline/shows/karadzic/interviews/ceric.html
+http://www.pbs.org/wgbh/pages/frontline/shows/khadr/interviews/abdullah.html
+http://www.pbs.org/wgbh/pages/frontline/shows/kosovo/interviews/krulak.html
+http://www.pbs.org/wgbh/pages/frontline/shows/mandela/etc/script.html
+http://www.pbs.org/wgbh/pages/frontline/shows/meat/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/military/force/lake.html
+http://www.pbs.org/wgbh/pages/frontline/shows/music/interviews/codikow.html
+http://www.pbs.org/wgbh/pages/frontline/shows/music/interviews/guido.html
+http://www.pbs.org/wgbh/pages/frontline/shows/music/perfect/mtv.html
+http://www.pbs.org/wgbh/pages/frontline/shows/pentagon/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/porn/business/howtheme.html
+http://www.pbs.org/wgbh/pages/frontline/shows/prescription/hazard/independent.html
+http://www.pbs.org/wgbh/pages/frontline/shows/race/etc/gates.html
+http://www.pbs.org/wgbh/pages/frontline/shows/race/interviews/ecleaver.html
+http://www.pbs.org/wgbh/pages/frontline/shows/race/talk/
+http://www.pbs.org/wgbh/pages/frontline/shows/reaction/etc/faqs.html
+http://www.pbs.org/wgbh/pages/frontline/shows/religion/first/roles.html
+http://www.pbs.org/wgbh/pages/frontline/shows/religion/first/women.html
+http://www.pbs.org/wgbh/pages/frontline/shows/royals/interviews/greenslade.html
+http://www.pbs.org/wgbh/pages/frontline/shows/sacred/deconstruction/
+http://www.pbs.org/wgbh/pages/frontline/shows/sats/etc/chat.html
+http://www.pbs.org/wgbh/pages/frontline/shows/sats/etc/script.html
+http://www.pbs.org/wgbh/pages/frontline/shows/sats/interviews/chauncey.html
+http://www.pbs.org/wgbh/pages/frontline/shows/secret/discuss/story1.html
+http://www.pbs.org/wgbh/pages/frontline/shows/smith/etc/longhard.html
+http://www.pbs.org/wgbh/pages/frontline/shows/tehran/inside/theme.html
+http://www.pbs.org/wgbh/pages/frontline/shows/truth/fighting/turfwars.html
+http://www.pbs.org/wgbh/pages/roadshow/series/cook/2002/08.26.02.html
+http://www.pbs.org/wgbh/pages/roadshow/series/highlights/2000/toronto.html
+http://www.pbs.org/wgbh/pops/listen/places.html
+http://www.pbs.org/wgbh/questionofgod/voices/james.html
+http://www.pbs.org/wholechild/abc/communication.html
+http://www.pbs.org/wholechild/providers/f-s.html
+http://www.pbs.org/wnet/berga/about_description.html
+http://www.pbs.org/wnet/berga/print/about_description.html
+http://www.pbs.org/wnet/closetohome/science/
+http://www.pbs.org/wnet/closetohome/viewpoints/html/addict.html
+http://www.pbs.org/wnet/gperf/dialogue/dialogue_carn04_fleming.html
+http://www.pbs.org/wnet/jimcrow/education_lesson5_steps.html
+http://www.pbs.org/wnet/jimcrow/php/scribble.php?pic=3
+http://www.pbs.org/wnet/journaleditorialreport/062405/transcript_briefing.html
+http://www.pbs.org/wnet/nature/redroos/lesson_plan_b.html
+http://www.pbs.org/wnet/religionandethics/week712/perspectives.html
+http://www.pbshawaii.org/local_productions/na-mele/winston.html
+http://www.pbso.org/index.cfm?fa=sexualpredators
+http://www.pc-help.org/security/scrap.htm
+http://www.pc.gc.ca/apprendre-learn/prof/sub/eco/sec4/pl-lp6/index_e.asp
+http://www.pc.gc.ca/lhn-nhs/bc/langley/visit/visit5_e.asp
+http://www.pc.gc.ca/lhn-nhs/on/bellevue/natcul/natcul1_e.asp
+http://www.pc.gc.ca/progs/beefp-fhbro/code/code7e_E.asp
+http://www.pc.gc.ca/progs/np-pn/eco_integ/index_E.asp
+http://www.pc.gc.ca/voyage-travel/pv-vp/itm6-/page18_E.asp
+http://www.pc.ibm.com/us/support/thinkpad/landesk.html
+http://www.pcacoalition.org/site/News2?page=NewsArticle&id=5335%22
+http://www.pcaky.org/capm2004/five.htm
+http://www.pcanswer.com/articles/sjm_cellphone2001.htm
+http://www.pcauthority.com.au/print.aspx?CIID=21176&SIID=10
+http://www.pcaw.co.uk/about/whistleblowers.html
+http://www.pcaw.co.uk/policy_pub/case_summaries.html
+http://www.pcaw.co.uk/policy_pub/oecdreport.html
+http://www.pcbuyerbeware.co.uk/Warrant.htm
+http://www.pcbuyerbeware.co.uk/sharedbirthday/birthdays/February/Feb4.htm
+http://www.pcc.org.uk/cop/cop.asp
+http://www.pcc.org.uk/cop/history.html
+http://www.pcc.org.uk/press/detail.asp?id=131
+http://www.pccctx.com/privacy.shtml
+http://www.pccnaturalmarkets.com/sc/0409/sc0409-sus-pcc.html
+http://www.pcdf.org/meadows/dark_budget.html
+http://www.pcfe.ac.uk/aboutus/awards_txt.php
+http://www.pcfe.ac.uk/plymouthinternationalcollege/accommodation/
+http://www.pcfe.ac.uk/plymouthinternationalcollege/accommodation/text.htm
+http://www.pcgamer.com/reviews/review_2004-08-02d.html
+http://www.pcgamereview.com/dreamcast-games-and-equipment/dreamcast-action/King,of,Fighters,Dream,Match,99/PRD_86588_3730crx.aspx
+http://www.pcgs.com/articles/article658.chtml
+http://www.pcguide.com/ref/hdd/geom/tracksSector-c.html
+http://www.pcguide.com/ref/hdd/op/actActuator-c.html
+http://www.pcguide.com/ts/sup/callTips-c.html
+http://www.pcguide.com/ts/x/sys/booterrGBER43-c.html
+http://www.pcguide.com/vb/showthread.php?goto=newpost&t=34650
+http://www.pcguide.com/vb/showthread.php?t=34650
+http://www.pch.gc.ca/pc-ch/min/discours-speech/2004-11-16_e.cfm
+http://www.pch.gc.ca/progs/ac-ca/pol/cinema-film/pubs/comm10.htm
+http://www.pch.gc.ca/progs/ac-ca/progs/fcmus-cmusf/pubs/2004-2005/gen/1_e.cfm
+http://www.pch.gc.ca/progs/ac-ca/progs/fcmus-cmusf/pubs/2004-2005/simpl/1_e.cfm
+http://www.pch.gc.ca/progs/ac-ca/progs/ri-bpi/pubs/juneau/anglais/chap1/ch1.htm
+http://www.pchell.com/acronyms/
+http://www.pchire.com.au/disclaimer.asp
+http://www.pchs.org/pointordinance.shtml
+http://www.pcma.org/convene/Templates/Special/Page25.html
+http://www.pcma.org/convene/Templates/Special/Page55.html
+http://www.pcma.org/resources/careers/jobbank/resume-view.asp?JOB_RESUME_ID=449
+http://www.pcma.org/source/membership/professional-benefits/getmember.asp
+http://www.pcma.org/templates/food_bev/negotiation.htm
+http://www.pcmag.com/article2/0,1759,1159222,00.asp
+http://www.pcmag.com/article2/0,1759,1730992,00.asp
+http://www.pcmag.com/article2/0,1759,1781594,00.asp
+http://www.pcmag.com/article2/0,1759,925278,00.asp
+http://www.pcmag.com/article2/0,4149,426285,00.asp
+http://www.pcmall.com/pcmall/shop/detail~dpno~269195.asp
+http://www.pcnr.com/
+http://www.pcnsw.org.au/codeonline/fourteen.htm
+http://www.pco.nsw.gov.au/nswleg.html
+http://www.pco.org.hk/english/publications/newsletter_2000nov.html
+http://www.pcowinc.com/blog/index.php?m=200503
+http://www.pcpages.com/spoiler/
+http://www.pcpitstop.com/
+http://www.pcplus.co.uk/reviews/default.asp?pagetypeid=2&articleid=30650&subsectionid=372&subsubsectionid=39
+http://www.pcplus.co.uk/tutorials/default.asp?pagetypeid=2&articleid=17806&subsectionid=379
+http://www.pcpsr.org/survey/polls/2003/p7a.html
+http://www.pcpsr.org/survey/polls/2003/p7epressrelease.html
+http://www.pcqhra.org/award.asp
+http://www.pcquest.com/content/editorscolumn/2005/105041101.asp
+http://www.pcreview.co.uk/forums/thread-1784306.php
+http://www.pcreview.co.uk/shop/mode-classical-search_type-ArtistSearch-input_string-Janet+Baker-locale-uk.htm
+http://www.pcrm.org/health/prevmed/cholesterol_heartdisease.html
+http://www.pcrm.org/resch/anexp/hpv_testimony.html
+http://www.pcs.org.uk/Templates/Internal.asp?NodeID=894986
+http://www.pcsb.k12.fl.us/teachnet/bush_insua/agtoc.htm
+http://www.pcse.org/content.asp
+http://www.pcsoftland.com/business/presentation/procedure-charter-standard.htm
+http://www.pcspeak.com/hints/general/vocabulary/codecitations.shtml
+http://www.pcsproud.org.uk/reps_trans_links.html
+http://www.pcstats.com/articleview.cfm?articleID=868
+http://www.pcstats.com/articleview.cfm?articleid=1583&page=4
+http://www.pcsupport.dk/software/IconLibrary.html
+http://www.pct.edu/annualfund/planned_giving.htm
+http://www.pcusa.org/peacemakingoffering/25ways.htm
+http://www.pcusa.org/today/joan/guide1-21.htm
+http://www.pcw.co.uk/features/1138665
+http://www.pcw.co.uk/news/1138714
+http://www.pcw.co.uk/news/1139234
+http://www.pcworks.demon.co.uk/magazine/cannabis/zzcanprot.htm
+http://www.pcworld.com/howto/article/0,aid,107864,00.asp
+http://www.pcworld.com/howto/article/0,aid,108710,00.asp
+http://www.pcworld.com/howto/article/0,aid,108728,00.asp
+http://www.pcworld.com/howto/article/0,aid,111127,00.asp
+http://www.pcworld.com/howto/article/0,aid,111531,00.asp
+http://www.pcworld.com/howto/article/0,aid,112902,00.asp
+http://www.pcworld.com/howto/article/0,aid,118058,00.asp
+http://www.pcworld.com/howto/article/0,aid,118058,tk,sbx,00.asp
+http://www.pcworld.com/howto/article/0,aid,118523,00.asp
+http://www.pcworld.com/howto/article/0,aid,16479,00.asp
+http://www.pcworld.com/howto/article/0,aid,47514,00.asp
+http://www.pcworld.com/howto/article/0,aid,58383,00.asp
+http://www.pcworld.com/news/article/0,aid,109084,00.asp
+http://www.pcworld.com/news/article/0,aid,110783,00.asp
+http://www.pcworld.com/news/article/0,aid,111035,00.asp
+http://www.pcworld.com/news/article/0,aid,115509,00.asp
+http://www.pcworld.com/news/article/0,aid,116473,00.asp
+http://www.pcworld.com/news/article/0,aid,117691,00.asp
+http://www.pcworld.com/news/article/0,aid,118447,00.asp
+http://www.pcworld.com/news/article/0,aid,119390,00.asp
+http://www.pcworld.com/news/article/0,aid,120518,00.asp
+http://www.pcworld.com/news/article/0,aid,120886,00.asp
+http://www.pcworld.com/news/article/0,aid,17702,00.asp
+http://www.pcworld.com/news/article/0,aid,50084,00.asp
+http://www.pcworld.com/news/article/0,aid,79223,00.asp
+http://www.pcworld.com/resource/article/0,aid,10613,pg,4,00.asp
+http://www.pcworld.com/resource/article/0,aid,121363,pg,1,RSS,RSS,00.asp
+http://www.pcworld.com/resource/article/0,aid,121429,pg,1,RSS,RSS,00.asp
+http://www.pcworld.com/resource/browse/0,cat,1558,sortIdx,1,pg,1,00.asp
+http://www.pcworld.com/resource/product_submissions.asp
+http://www.pcworld.com/reviews/article/0,aid,117523,pg,2,00.asp
+http://www.pcworld.com/reviews/article/0,aid,119249,pg,2,00.asp
+http://www.pcworld.idg.com.au/index.php/id;1235678367;fp;512;fpid;1035602669
+http://www.pcworld.idg.com.au/index.php/id;1827834069;pp;2;fp;2;fpid;76768
+http://www.pcworld.idg.com.au/index.php/id;665412976;fp;2;fpid;1
+http://www.pcworldmalta.com/archive/iss51/errors.htm
+http://www.pd9soft.com/megabbs/forums/thread-view.asp?tid=1259&posts=31
+http://www.pd9soft.com/megabbs/forums/thread-view.asp?tid=1259&start=26&posts=31
+http://www.pdaphonehome.com/forums/showthread.php?s=&goto=lastpost&threadid=11108
+http://www.pdaphonehome.com/forums/showthread.php?s=&threadid=11108
+http://www.pdarcade.com/modules.php?name=Reviews&rop=showcontent&id=277
+http://www.pdc.kth.se/support/run/running_ia64.html
+http://www.pdcmachines.com/pilot_plants.asp
+http://www.pddp.org.np/pub/progress/chap4.htm
+http://www.pdf.org/Ask/faq.cfm
+http://www.pdfstore.com/details.asp?ProdID=633
+http://www.pdftron.com/cosedit/faq.html
+http://www.pdga.com/pdgatour.php
+http://www.pdis.com.au/addons.html
+http://www.pdkintl.org/tconnect/archask/att06.htm
+http://www.pdp.ca/Archives.435.0.html
+http://www.pdports.co.uk/press35.htm
+http://www.pdsa.org/conference2004/conf2004abs.htm
+http://www.pdsconsulting.co.uk/Glossary/P.htm
+http://www.pdsg.org.uk/Factsheets/PPAphasia.htm
+http://www.pdx.edu/giving/gse_student_letters.html
+http://www.pdx.edu/giving/sba.html
+http://www.pdx.edu/giving/sfpa.html
+http://www.pdx.edu/usp/education.html
+http://www.pdxcityclub.org/committees/arts-culture.php
+http://www.pe.com/sharedcontent/iraq/elections2/051905ccdriraqhelp.28e445763.html
+http://www.pe.gatech.edu/conted/servlet/edu.gatech.conted.upload.DownloadFile?ID=2481
+http://www.peace-action.org/home/print/piraq.html
+http://www.peace-srilanka.org/sama1.htm
+http://www.peace-with-justice.org/letters/020708cc.html
+http://www.peace.ca/10minutesolution.htm
+http://www.peace.ca/CCOPPaction2004.htm
+http://www.peace.ca/CanadianAgenda2003.htm
+http://www.peace.ca/CanadianAgenda2004.htm
+http://www.peace.ca/critiquesofcanadamilitary.htm
+http://www.peace.ca/firstannualconferenceonpeaceed.htm
+http://www.peace.ca/humanrighttopeace.htm
+http://www.peace.ca/leadershipandacultureofviolence.htm
+http://www.peace.ca/peacestudiescriticism.htm
+http://www.peace.ca/speechfromthrone.htm
+http://www.peace.ca/upcoming.htm
+http://www.peace.ca/worldpeace.htm
+http://www.peace.edu/biology_faculty.html
+http://www.peacealliance.org.uk/projects.html
+http://www.peaceandlove.ca/AIDSsexmyth.html
+http://www.peacebrigades.org/annrept/ar98eng.html
+http://www.peacebrigades.org/ern/ern99-05.html
+http://www.peacebrigades.org/etp/etp.html
+http://www.peacecorps.gov/index.cfm?shell=resources.faf.safety
+http://www.peacecorps.gov/wws/cybervol/2004-5/Phillips_Dec_Letter.html
+http://www.peacecorps.gov/wws/guides/looking/lesson26.html
+http://www.peacecorps.gov/wws/guides/nepal/culture.html
+http://www.peacecorps.gov/wws/guides/senegal/dank.html
+http://www.peacecorpswriters.org/pages/depts/resources/bibliog/bibr.html
+http://www.peacecorpswriters.org/pages/depts/resources/resour_writers/100daysbook/bk100da.html
+http://www.peacecourier.com/UKNuclearNews/UKNuclearNewsDecember2004.htm
+http://www.peaceday.org/peacfrds.htm
+http://www.peacediaries.org/2_community/gallery2B/1_Recipes/1Rc20_TAIWAN.html
+http://www.peacefactory.com/Wormwood/chap01.htm
+http://www.peacefulmind.com/exercise.htm
+http://www.peacefulplaygrounds.com/press16.htm
+http://www.peacehall.com/news/gb/english/2004/12/200412150153.shtml
+http://www.peaceinsrilanka.org/insidepages/RRR/Appeal/Appeal.asp
+http://www.peaceinsrilanka.org/insidepages/stories/PMltrtoAB-02-06.asp
+http://www.peacejam.org/aung/china.html
+http://www.peacejam.org/tutu/u1c6.html
+http://www.peacekidz.com/stories/peacepledge/
+http://www.peacelutheran.net/peace_progress/Nov2004pp.html
+http://www.peacemagazine.org/archive/v06n3p20.htm
+http://www.peacemagazine.org/archive/v13n1p23.htm
+http://www.peacemagazine.org/archive/v14n2p12.htm
+http://www.peacemakers.net/clergysexualabuse/abusedperspective.htm
+http://www.peacemakers.org.uk/casestudy.html
+http://www.peacenews.info/issues/2444/civicduty.html
+http://www.peacenvironment.net/1lgwpf/foundation.html
+http://www.peaceofficerministries.org/letter.htm
+http://www.peacepark.us/OldWebSite/week3.html
+http://www.peacepilgrim.net/book/chapt3.htm
+http://www.peacepilgrim.net/news/ppp17.htm
+http://www.peacepilgrim.org/FoPP/newsletter/nl33.htm
+http://www.peaceresearchfoundation.org/benefit_pastevents.asp
+http://www.peaceriverstudios.com/183_links/wlmain.html
+http://www.peacetaxseven.com/
+http://www.peacethroughunderstanding.org/
+http://www.peacethroughunderstanding.org/index.php
+http://www.peacethroughunderstanding.org/index.php?act=idx
+http://www.peacethroughunderstanding.org/index.php?automodule=blog&blogid=12&
+http://www.peacethroughunderstanding.org/index.php?automodule=blog&blogid=12&cmd=showentry&eid=6
+http://www.peacethroughunderstanding.org/index.php?showtopic=3850
+http://www.peacethroughunderstanding.org/index.php?showtopic=3850&view=getlastpost
+http://www.peacethroughunderstanding.org/index.php?showtopic=3851
+http://www.peacethroughunderstanding.org/index.php?showtopic=3851&view=getlastpost
+http://www.peacewomen.org/news/Chechnya/newsarchive03/Chechenbrides.html
+http://www.peacexpeace.org/dearann.htm
+http://www.peachpit.com/articles/article.asp?p=102173&seqNum=29
+http://www.peachpit.com/articles/article.asp?p=30292&seqNum=3
+http://www.peachpit.com/articles/article.asp?p=360068
+http://www.peak.co.nz/ausat/
+http://www.peak.ie/bleedex.html
+http://www.peak.org/~fixin/personal/fmu/php/axle.php
+http://www.peak.sfu.ca/the-peak/2001-1/issue3/fe-springfield.html
+http://www.peak.sfu.ca/the-peak/97-1/issue10/hootie.html
+http://www.peakoil.com/
+http://www.peakoil.com/fortopic3949-15.html
+http://www.peakoil.com/post51778.html
+http://www.peakoil.net/CC4April2005OilGas.html
+http://www.peakoilaction.org/modules.php?name=Forums&file=viewtopic&t=78
+http://www.peakperformancetraining.org/sitefiles/articles/optimal.htm
+http://www.peaksofotterwinery.com/history.htm
+http://www.pearlharborattacked.com/
+http://www.pearlvillage.co.th/
+http://www.pearson.com/community/csr_report2004/labour.html
+http://www.pearsonassessments.com/tests/basi.htm
+http://www.pearsoned.ca/sightlines/gr_10/resources/western/lesson.html
+http://www.pearsoned.co.uk/Authors/HigherProfessional/Textbook/
+http://www.pearsoneducationbooks.com/Includes/Terms.html
+http://www.peaseinternational.com/15/lesson-letter-writing.html
+http://www.pecdar.org/Default.asp?page=2164
+http://www.pecentral.org/assessment/assessmentresearch.html
+http://www.peckhamacademy.southwark.sch.uk/Intranet/College/The_Curriculum.php
+http://www.pecs.com/asaPEC3panel.html
+http://www.ped.gu.se/biorn/journal/pedfo/v1/n1sum.html
+http://www.ped.gu.se/biorn/phgraph/misc/constr/goodno2.html
+http://www.pediatriccardiacinquest.mb.ca/ch06/ju/post-op.html
+http://www.pediatrics.org/cgi/content/full/111/6/1433
+http://www.pediatricservices.com/inspire/inspire33.htm
+http://www.pediheart.org/Terms_of_use.htm
+http://www.pedisurg.com/PtEducENT/Otitis_Media.htm
+http://www.pedropan.org/
+http://www.peele.net/lib/boswell.html
+http://www.pegasus.co.uk/operaii/latest.asp
+http://www.pegasusassociates.com/UCXenon.jsp
+http://www.pegaweb.com/
+http://www.pegaweb.com/tutorials/touch-of-class/touch-of-class-web-design-tutorial-1.htm
+http://www.pegpress.org/women.htm
+http://www.peiapathways.com/lvminter/selfcare/sinkrasa.htm
+http://www.peiunitedway.com/changes.html
+http://www.pejmanesque.com/
+http://www.pejmanesque.com/archives/007299.html
+http://www.pejmanesque.com/archives/007578.html
+http://www.pejmanesque.com/archives/008529.html
+http://www.pejmanesque.com/archives/010577.html
+http://www.peleast.org/leg.htm
+http://www.pelion.co.uk/html/us.html
+http://www.pell.portland.or.us/~silas/birthstory.shorter.html
+http://www.pelvicpain.com/sharing.html
+http://www.pemberley.com/janeinfo/pptopic2.html
+http://www.pembina.org/donate_home.asp
+http://www.pembina.org/newsitem.asp?newsid=110&section=
+http://www.pen-paper.net/
+http://www.pen-paper.net/modules.php?op=modload&name=Reviews&file=index&req=showcontent&id=30
+http://www.pen.k12.va.us/VDOE/newvdoe/teachyr.html
+http://www.pencildude.ca/shopping/booksdvdsandmusic.html
+http://www.pencoedmedical.co.uk/breast_screening.htm
+http://www.pencoyd.com/clock/2004/07/14.html
+http://www.pendlehill.org/Lectures%20and%20Writings/fall_lecture99_18.htm
+http://www.penfolds.com.au/ContactUs/PrivacyStatement.html
+http://www.penguin.co.uk/nf/Book/BookDisplay/0,,0_0140276335,00.html
+http://www.penguin.co.uk/nf/Book/BookDisplay/0,,0_014029466X,00.html?sym=EXC
+http://www.penguin.co.uk/static/cs/uk/0/minisites/lesleypearse/about.html
+http://www.penguin.co.uk/static/cs/uk/0/minisites/nickhornby/books/31s_extract.html
+http://www.penguin.com.au/puffin/spotlight/spotlight.cfm?SBN=0143000306&Page=Notes
+http://www.penguinbooksindia.com/FreeChapters/MakingMinisterSmile.htm
+http://www.penguinclassics.co.uk/nf/shared/WebDisplay/0,,203903_1_10,00.html
+http://www.penguinputnam.com/nf/Book/BookDisplay/0,,0_0803726090,00.html
+http://www.penguinputnam.com/static/rguides/us/grapes_of_wrath.html
+http://www.penguinputnam.com/static/rguides/us/piano_teacher.html
+http://www.penguinputnam.com/static/rguides/us/rapstone_chronicles.html
+http://www.penguinputnam.com/static/rguides/us/the_kitchen_boy.html
+http://www.peninsulaclarion.com/stories/090204/gar_090204new001001.shtml
+http://www.peninsulaymca.org/map.htm
+http://www.penisowner.com/jamesbrown.html
+http://www.penmachine.com/musicpages/digipiano2003.html
+http://www.penmachine.com/techie/website_is_for_2004-05.html
+http://www.pennhealth.com/ency/article/003579.htm
+http://www.pennhealth.com/health_info/bloodless/blood_step7.html
+http://www.pennhealth.com/health_info/pregnancy/firstweeks/articles/daycarework.html
+http://www.penninepens.co.uk/election.html
+http://www.pennsic.net/cgi-bin/mb/mb.cgi?cmd=read&topic=politics&id=1093284872&offset=0
+http://www.penny-arcade.com/news.php3?date=2005-01-17
+http://www.pennywit.com/drupal/node/2479
+http://www.penrithcity.nsw.gov.au/index.asp?id=2584
+http://www.pensandwatches.com/_pages/sold9.html
+http://www.penstarsys.com/
+http://www.pentagon.gov/transcripts/2005/tr20050629-secdef3201.html
+http://www.penthesilea.ch/yabb-smiley-sets/
+http://www.peopil.com/viewdetail.asp?ID=18
+http://www.people-one.com/aboutus/inthenews.asp
+http://www.people.fas.harvard.edu/~lipoff/research/
+http://www.people.virginia.edu/~cah2k/infoy2k.htm
+http://www.people.virginia.edu/~hms2f/small.html
+http://www.people.virginia.edu/~ner4t/Gonzaga/GonzagaMemories/SchoeniMemories.html
+http://www.people.virginia.edu/~rjh9u/blkysc82.html
+http://www.people.virginia.edu/~tsd3r/Upcoming_Programs.html
+http://www.people.virginia.edu/~tsd3r/home_new.htm
+http://www.peopleandplanet.org/news/news.php?story=505
+http://www.peoplefirst.org.uk/book/ukstore.html
+http://www.peoplefirstindia.org/9village.htm
+http://www.peoplefirstofnh.org/SABE/RickyWhistnant.htm
+http://www.peopleforchange.net/forums/lofiversion/index.php?t18233.html
+http://www.peoples.com/im/cda/press_room/1,6832,11893,00.html
+http://www.peoples.com/im/cda/press_room/1,6832,12790,00.html
+http://www.peoples.com/im/cda/press_room/1,6832,13393,00.html
+http://www.peoplesguide.com/1pages/rv-camp/rv/trip/winnie/1winnie.html
+http://www.peoplespub.com/nercda/text/brains.html
+http://www.peoplewithpets.com/catagory.asp?Link=14
+http://www.peoriaaz.com/jobs/Descriptions/JIMS/claims%20Coordinator_j.htm
+http://www.pepperfoundation.org/cowdrey.htm
+http://www.peppermint.com/TMTSling%20Wearing%20Instructions.htm
+http://www.pepperproducts.com/date.html
+http://www.pepys.info/fire.html
+http://www.pepysdiary.com/archive/1661/01/15/index.php
+http://www.pepysdiary.com/archive/1661/05/08/index.php
+http://www.pepysdiary.com/archive/1661/08/27/index.php
+http://www.per-usa.org/kona.htm
+http://www.perc.org/education/guide.php
+http://www.percepp.demon.co.uk/cohesion.htm
+http://www.perceptions.couk.com/medical.html
+http://www.percys.co.uk/news_features/news_bnav.htm
+http://www.perefound.org/em-s_sp.html
+http://www.peregrine.com/cases/
+http://www.perfect.co.uk/
+http://www.perfectblue.co.uk/terms.html
+http://www.perfectentertaining.com/article1086.html
+http://www.perfectgoods.com/insurance/knowledge_term.asp
+http://www.perfectmarriage.co.uk/?p=260
+http://www.perfectpaws.com/cpv.html
+http://www.perfectpaws.com/mmd.html
+http://www.performance-appraisal.com/intro.htm
+http://www.performance-media.com/
+http://www.performance-vision.com/articles/art-boring.htm
+http://www.performance-vision.com/articles/art-reengineering-learning.htm
+http://www.performance.doh.gov.uk/waitingtimes/2004/q1/def.html
+http://www.performance.doh.gov.uk/waitingtimes/2004/q2/def.html
+http://www.performanceschool.org/teacher_ed.htm
+http://www.performanceschool.org/teacher_ed.html
+http://www.peribit.com/news/pr/2002/9_16_02.htm
+http://www.perio.org/consumer/questions.survey.htm
+http://www.perio.org/education/trans03_Finlayson.htm
+http://www.perio.org/perio-bin-nd3/commerce/search?keywords=dental_implants
+http://www.periodproperty.co.uk/ppom082002.htm
+http://www.periodproperty.co.uk/ppom112000.htm
+http://www.perkel.com/think/
+http://www.perkins-observatory.org/roverconstruction.html
+http://www.perkinscoie.com/page.cfm?id=159
+http://www.perl.com/pub/a/2003/02/19/engine.html
+http://www.perl.com/pub/a/2004/04/16/a12.html?page=4
+http://www.perlguy.com/articles/nt_service.html
+http://www.permanentend.org/mission.html
+http://www.perpetualpreschool.com/holiday_themes/christmas_games.html
+http://www.perrycomo.net/biography.html
+http://www.perryslingsbysystems.com/re_main.htm
+http://www.persephone.com/purrscilla/postings1.html
+http://www.persephonebooks.co.uk/pq/21story.htm
+http://www.perseus.com/blogsurvey/thebloggingiceberg.html
+http://www.persfin.co.za/index.php?fArticleId=2254573&fSectionId=707&fSetId=300
+http://www.persfin.co.za/index.php?fSectionId=593&fArticleId=2254573
+http://www.persianfootball.com/forums/archive/index.php/t-282.html
+http://www.persianmirror.com/culture/famous/bios/omidyar.cfm
+http://www.persianstudents.org/archives/001474.html
+http://www.personable.com/solutions/index.asp
+http://www.personal.psu.edu/faculty/g/a/gal4/AcademicLineage/AcademicLineage.html
+http://www.personal.psu.edu/faculty/j/x/jxm22/svgopen03/
+http://www.personal.psu.edu/mjh/
+http://www.personal.psu.edu/staff/j/x/jxf17/france2003/loire.html
+http://www.personal.psu.edu/users/a/n/anh140/my_biggest_fear.htm
+http://www.personal.psu.edu/users/m/a/mat1/Duesersrevfinal1.html
+http://www.personalbest.com.au/learning.html
+http://www.personalbest.com.au/music.html
+http://www.personalcommunications.net/marcus.html
+http://www.personaldemocracy.com/node/184
+http://www.personaldemocracy.com/node/378/
+http://www.personaldemocracy.com/node/472
+http://www.personaldemocracy.com/node/501
+http://www.personaldemocracy.com/node/560
+http://www.personaldemocracy.com/node/594
+http://www.personaldemocracy.com/node/626
+http://www.personalfinancebudgeting.com/saving-money-is-easy.php
+http://www.personalinjuryfyi.com/west/california/central_valley_stockton-modesto-tracy_ca/law/directory/personal_injury/priority.html
+http://www.personalitypathways.com/faces.html
+http://www.personalityresearch.org/papers/lee.html
+http://www.personalityresearch.org/papers/naik.html
+http://www.personaltechpipeline.com/163100674
+http://www.personnel.stir.ac.uk/recruitment/opportunities_secretarial.html
+http://www.personnel.umd.edu/jobposting/cgi-bin/empNECONI.idc
+http://www.personnel.umd.edu/jobposting/cgi-bin/empTP.idc
+http://www.personnelconcepts.com/compliance/complianceConcepts.asp?issueid=19&articleNum=2&sid=1um9p26837z79
+http://www.personnelconcepts.com/products/default.asp?id=103&cat=LL&sid=1um9p26837z79
+http://www.personnelconcepts.com/products/default.asp?id=103&cat=LL&sid=1v942h80z28
+http://www.personneltoday.co.uk/Articles/FilterList.aspx?NavigationID=110&Sections=10021
+http://www.personneltoday.com/Articles/FilterList.aspx?NavigationID=110&Sections=10021
+http://www.personsmissing.com/unsolved1.html
+http://www.perspectives.com/forums/forum39/4692.html
+http://www.perspectives.com/forums/forum4/21913.html
+http://www.perspectives.com/forums/forum4/26850-2.html
+http://www.perspectives.com/forums/forum5/29646-4.html
+http://www.perspectives.com/forums/forum5/29646.html
+http://www.perspectives.com/forums/forum71/24172.html
+http://www.perspectives.com/forums/reply.php?topic_id=15055&post_id=189585&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=15055&post_id=192755&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=189637&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=190818&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=191016&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=207254&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=208622&quote=1
+http://www.perspectives.com/forums/reply.php?topic_id=16645&post_id=208625&quote=1
+http://www.perspectives.com/forums/view_topic.php?id=26850&forum_id=4&jump_to=369547
+http://www.perspectives.com/forums/view_topic.php?id=4692&forum_id=39&jump_to=63791
+http://www.perspektif.net/articles/view.asp?id=515
+http://www.perth.au.emb-japan.go.jp/hiroba_newsletter_oct03.htm
+http://www.perthshire.co.uk/index.asp?lm=281
+http://www.perthshire.co.uk/index.asp?pg=198&news=yes
+http://www.perugiaonline.com/shopping_perugia.html
+http://www.pervinfamilybusiness.com/library/articles/fi3.asp
+http://www.pes.org/content/view/188/130/lang,en/
+http://www.pesoftware.com/Resources/whype.html
+http://www.pesticides.gov.uk/aa_eu.asp?id=481
+http://www.pesticides.gov.uk/aa_eu.asp?id=509
+http://www.pesticides.gov.uk/fg_ec.asp?id=398
+http://www.pesticides.gov.uk/fg_ec.asp?id=481
+http://www.pesticides.gov.uk/fg_ec.asp?id=509
+http://www.pesticides.gov.uk/prc.asp?id=1625
+http://www.pesticides.gov.uk/publications.asp?id=380
+http://www.pesticides.gov.uk/publications.asp?id=481
+http://www.pesticides.gov.uk/publications.asp?id=509
+http://www.pesticides.gov.uk/publications.asp?id=999
+http://www.pet-sitters.biz/pet_sitters_by_state_usa.cfm?st=Pennsylvania
+http://www.pet-sitters.biz/pet_sitting_faq.cfm
+http://www.pet-sitters.biz/pet_sitting_faq.html
+http://www.pet.cam.ac.uk/petreans/friends/
+http://www.petco.com/?cmid=3ppfx100802xxxxxxlogononexxx
+http://www.petco.com/product_info.asp?webt=0&tab=3&sku=4679825772
+http://www.petcocruelty.com/why.html
+http://www.petdoctor.com.au/
+http://www.peteholiday.com/
+http://www.peter-drucker.com/books/0887306144.html
+http://www.peter-feuchtwanger.de/english/sitting.html
+http://www.peter-lock.de/txt/rheinmetall.html
+http://www.peter-thomson.co.uk/tornado/fusion/Charge_sheath_vortex_basics_for_tornado.html
+http://www.peter.baumgartner.name/
+http://www.peteranthonyholder.com/02-01-j.htm
+http://www.peterbergen.com/bergen/articles/details.aspx?id=91
+http://www.peterblum.com/vam/From123aspx_2.aspx
+http://www.peterborough.gov.uk/transport/road_safer.shtml
+http://www.peterboroughtoday.co.uk/mk4CustomPages/CustomPage.aspx?pageID=42963
+http://www.peterboroughtoday.co.uk/viewarticle2.aspx?sectionid=845&ArticleID=826767
+http://www.peterboyd.com/darwinshrews.htm
+http://www.peterchurch.com/
+http://www.peterellis.org.nz/Interviews/T2_1992-0528.htm
+http://www.peterfhamilton.co.uk/conf_kulu.html
+http://www.peterflaschner.com/?id=154
+http://www.petergruberfoundation.org/Women's%20Rights/women_recipients.htm
+http://www.peterjaworski.com/Friedman
+http://www.peterkatt.com/articles/AAII_may2002.html
+http://www.peterkreeft.com/topics/pascals-wager.htm
+http://www.peterkurth.com/YEAR%20END%20REVIEW%202004.htm
+http://www.peterlefcourt.com/
+http://www.peterli.com/archive/spm/561.shtm
+http://www.petermaass.com/core.cfm?p=1&mag=1&magtype=1
+http://www.petermaass.com/core.cfm?p=1&mag=88&magtype=1
+http://www.petermac.unimelb.edu.au/dept/crfd/main.htm
+http://www.petermacs-books.com/hotheads.html
+http://www.petermcfadden.com/christmas.html
+http://www.peterme.com/archives/000090.html
+http://www.peterme.com/archives/000507.html
+http://www.peterme.com/archives/000514.html
+http://www.peterme.com/browsed/browsed082999.html
+http://www.peterpanbus.com/customer/disabilities.shtml
+http://www.peterpayne.net/
+http://www.peterpugger.com/pugmill-extruder/pugmill-uses.html
+http://www.peterschrock.com/archive/2004_07_01_archive.html
+http://www.peterson.af.mil/hqafspc/News/News_asp/nws_tmp.asp?storyid=04-104
+http://www.petersonengineering.com/SkyDiv/m_a_ii.htm
+http://www.petersons.com/PSchools/code/visit.asp?sponsor=1
+http://www.petersons.com/blackcolleges/profiles/meharry.asp?sponsor=2904
+http://www.petersons.com/stdyabrd/abroad4.html
+http://www.petersons.com/stdyabrd/abroad7.html
+http://www.petersons.com/ugchannel/articles/selfevaluate.asp
+http://www.petertan.com/blog/
+http://www.peterwebb.co.uk/investment.htm
+http://www.peterweircave.com/articles/articlec.html
+http://www.peterweircave.com/dps/comparison.html
+http://www.peterwhitecycles.com/
+http://www.petesweekly.co.za/
+http://www.petfinder.org/
+http://www.petfinder.org/shelters/CO74.html
+http://www.petfinder.org/shelters/IN163.html?Dog=
+http://www.petfinder.org/shelters/MN69.html
+http://www.petfinder.org/shelters/MO11.html
+http://www.petfinder.org/shelters/TX254.html
+http://www.petfriendly-hotels.com/first_aid.htm
+http://www.pethealthcare.net/html/body_breeding_dogs.html
+http://www.pethealthcare.net/html/body_canine_bloat.html
+http://www.pethealthcare.net/html/body_canine_inhalant_allergy.html
+http://www.petitbourgeois.com/
+http://www.petplanet.co.uk/petplanet/health/behaviour_statusrelatedaggression.htm
+http://www.petpublishing.com/dogken/articles/insurance.shtml
+http://www.petrescue.com/library/start-rescue.htm
+http://www.petri.co.il/understanding_function_levels_in_windows_2003_ad.htm
+http://www.pets911.com/forthedogs/7habits.php
+http://www.petscorner.com.my/articles/article-Increasing_palatab.html
+http://www.petsmart.com/global/orphan.jsp?ASSORTMENT%3C%3East_id=2534374302023687&CONTENT%3C%3Ecnt_id=10134198673312270
+http://www.petticoated.com/sophiestory.htm
+http://www.pevans.co.uk/Swiggers/FormulaDe2001.html
+http://www.peverelscotland.co.uk/news_story.asp?strareano=62_1&intelement=2066
+http://www.peverelscotland.co.uk/philosophy.asp
+http://www.pewclimate.org/press_room/speech_transcripts/coal.cfm
+http://www.pewinternet.org/PPF/p/1083/pipcomments.asp
+http://www.pewinternet.org/press_release.asp?r=97
+http://www.pewtrusts.com/news/news_subpage.cfm?content_item_id=1284&content_type_id=7&page=nr1
+http://www.pfar.org/govarchives01.htm
+http://www.pfaw.org/pfaw/general/default.aspx?oid=3297
+http://www.pfaw.org/pfaw/general/default.aspx?oid=6905
+http://www.pfblog.com/archives/274_roi_of_prepaying_january_mortgage_bill.shtml
+http://www.pfblog.com/archives/799_new_overtime_rule_passed.html
+http://www.pfc.org.uk/gr-bill/grb-sc3.htm
+http://www.pfc.org.uk/legal/cash-eat.htm
+http://www.pfdf.org/leaderbooks/L2L/summer2001/seifter.html
+http://www.pfdf.org/leaderbooks/hesselbein/beknowdo.html
+http://www.pfdf.org/leaderbooks/l2l/fall2003/allen.html
+http://www.pfdf.org/leaderbooks/l2l/summer2000/roddick.html
+http://www.pfdf.org/leaderbooks/l2l/winter2002/meyerson.html
+http://www.pfir.org/statements/voting
+http://www.pfizer.com/are/investors_releases/2004pr/mn_2004_1020.cfm
+http://www.pfizer.com/are/investors_reports/annual_2003/review/p2003ar16_17.htm
+http://www.pfizer.com/are/mn_investors_corporate_committees.cfm
+http://www.pfizer.com/are/news_releases/2004pr/mn_2004_0708.html
+http://www.pflag.org/index.php?id=298
+http://www.pfm.org/AM/Template.cfm?Section=BreakPoint1&template=/CM/ContentDisplay.cfm&ContentID=14909
+http://www.pfm.org/AM/Template.cfm?Section=The_Wilberforce_Forum&template=/CM/ContentDisplay.cfm&ContentID=14909
+http://www.pfm.org/AM/Template.cfm?Section=The_Wilberforce_Forum&template=/CM/ContentDisplay.cfm&ContentID=15609
+http://www.pfsc.uq.edu.au/01_about_us/completed_research.html
+http://www.pga.com/pgachampionship/2003/news_081603_clubpro.html
+http://www.pga.com/seniorpga/2004/news_interviews_052804_jenkins.html
+http://www.pgatour.com/story/7825321
+http://www.pgc.state.pa.us/
+http://www.pgc.state.pa.us/pgc/cwp/view.asp?Q=163285&A=11
+http://www.pgc.state.pa.us/pgc/cwp/view.asp?a=458&q=160709
+http://www.pgc.state.pa.us/pgc/cwp/view.asp?a=458&q=160709&tx=1
+http://www.pgc.state.pa.us/pgc/cwp/view.asp?a=465&q=151434
+http://www.pgc.state.pa.us/pgc/cwp/view.asp?a=478&q=151105
+http://www.pgcareers.com/index.asp?l1=4&l2=9&l3=87
+http://www.pgcf.org/pgcagrantapp.htm
+http://www.pgdc.com/usa/
+http://www.pgdc.net/BRAF/ARC-19990818145700
+http://www.pgdc.net/BRAF/GPD-20010124122829
+http://www.pgdc.net/BRAF/NAL-20011017115727
+http://www.pgdc.net/BRAF/RR_PGO-index
+http://www.pgdc.net/OSU/GPD-20010124122829
+http://www.pgdc.net/OSU/NAL-20011017115727
+http://www.pgdc.net/OSU/RR_PGO-index
+http://www.pgdc.net/TBF/GPD-20010124122829
+http://www.pgdc.net/TBF/RR_PGO-index
+http://www.pgecorp.com/news/press_releases/Release_Archive2004/040817press_release.shtml
+http://www.pgh.com.sg/news-271104-BT-fit_for_life.jsp
+http://www.pghevents.com/type.php/3
+http://www.pghevents.com/type.php/5
+http://www.pghfamily.net/goodnews/BB-ch5.htm
+http://www.pgl.co.uk/online/ourcentres/centre.asp?centrecode=CF
+http://www.pgmuseum.org/Tuttle/animal~1.htm
+http://www.pgsa.org/pncc.htm
+http://www.ph.ucla.edu/epi/snow.html
+http://www.ph.unimelb.edu.au/~foot/
+http://www.ph.utexas.edu/~gleeson/httb/section1_3_7_3.html
+http://www.phaa.net.au/policy/indigenous.htm
+http://www.phac-aspc.gc.ca/dca-dea/publications/hbsc-2004/chapter_4_e.html
+http://www.phac-aspc.gc.ca/dca-dea/publications/wsc_e.html
+http://www.phac-aspc.gc.ca/dca-dea/pubs/ffc-ief/book1.html
+http://www.phac-aspc.gc.ca/ncfv-cnivf/familyviolence/html/nfntsxvictimsurviv_e.html
+http://www.phac-aspc.gc.ca/pau-uap/fitness/pacp/2005-2006.html
+http://www.phac-aspc.gc.ca/ph-sp/phdd/docs/where/intro.html
+http://www.phac-aspc.gc.ca/ph-sp/phdd/docs/where/mobilization.html
+http://www.phac-aspc.gc.ca/seniors-aines/pubs/sleeping_tranq/what_sleep/whatsleep_e.htm
+http://www.phac-aspc.gc.ca/wn-no/materials/protect-protegez_e.html
+http://www.phacilitate.co.uk/pages/phaciliate/article_mazzo.html
+http://www.phact.org/e/dennis4.html
+http://www.phact.org/e/skeptic/frenfaq.htm
+http://www.phact.org/e/z/newmanl.htm
+http://www.phantomshockey.com/phanphorum/testimonials.asp
+http://www.pharmabiz.com/article/detnews.asp?articleid=11315&sectionid=46
+http://www.pharmaceutical-drug-manufacturers.com/pharmaceutical-classification/pharmaceutical-hs-classification.html
+http://www.pharmaceutical-industry.info/modules/pharmaceutical_projects/pharma_index.html
+http://www.pharmacy.arizona.edu/organizations/asp/home.htm
+http://www.pharmacy.org/jobs/jobavail.html
+http://www.pharmacy.vcu.edu/phartech/techreq.html
+http://www.pharmafocus.com/cda/focusH/1,2109,20-0-0-FEB_2003-focus_home-0-0,00.html
+http://www.pharmapolitics.com/davidgoldbloom.html
+http://www.pharmaquality.com/
+http://www.pharmexec.com/pharmexec/article/articleDetail.jsp?id=123012&sk=&date=&%0A%09%09%09&pageID=2
+http://www.pharmexec.com/pharmexec/article/articleDetail.jsp?id=123893
+http://www.pharmgkb.org/search/pathway/cyclophos/cyclophos-pk.jsp
+http://www.pharmiweb.com/Features/feature.asp?ROW_ID=227
+http://www.pharmiweb.com/Resources/default.asp
+http://www.pharmiweb.com/features/feature.asp?ROW_ID=227
+http://www.pharmiweb.com/features/feature.asp?ROW_ID=460
+http://www.pharmiweb.com/pwToday/default.asp?row_id=376
+http://www.pharmiweb.com/pwToday/default.asp?row_id=387
+http://www.pharmj.com/Editorial/20000304/business/security.html
+http://www.pharmj.com/Editorial/20031115/articles/drugfreesport.html
+http://www.pharmj.com/Hospital/Editorial/200401/technicians/mentalhealthunit.html
+http://www.pharmj.com/students/tp2003/difficultpeople.html
+http://www.pharosgames.com/ally1/walkthru.shtml
+http://www.phaseloop.com/foreignprisoners/news-laos21.html
+http://www.phayul.com/news/article.aspx?id=303&article=Straight+Answers&t=1&c=5
+http://www.phc.vcu.edu/Feature/oldfeature/benzene/
+http://www.phc4.org/reports/cardiaccare/pr_heart.htm
+http://www.phcentral.org/medical/dx-process.html
+http://www.phcentral.org/recognition/memorypages/kathyevans.html
+http://www.phd-survey.org/advice/art_history.htm
+http://www.phd-survey.org/advice/english.htm
+http://www.phdcompletion.org/promising/environmentNelson.asp
+http://www.pheed.com/news
+http://www.phen.ab.ca/materials/het/het12-01c.html
+http://www.phen.ab.ca/materials/intouch/vol3/intouch3-06.html
+http://www.phgu.org.uk/info_database/diseases/cancer/cancer_wales.html
+http://www.phgu.org.uk/info_database/diseases/downs_syndrome/downs.html
+http://www.phil.mq.edu.au/staff/jsutton/MovingThinkingDance.html
+http://www.phila.gov/personnel/webregs/reg05.htm
+http://www.phila.gov/personnel/webregs/reg2209.htm
+http://www.philadelphiaindependent.net/original/html/article/TPI_12_bedford.htm
+http://www.philadelphiaindependent.net/public/articles/7.html
+http://www.philadelphiaindependent.net/public/change_stylesheet.html?ss=larger&ruri=/public/articles/7.html
+http://www.philadelphiaweekly.com/view.php?id=9452
+http://www.philadelphiawriters.com/articles/04_2004/webber.htm
+http://www.philanthropy.com/free/articles/v13/i05/05000101.htm
+http://www.philanthropy.iupui.edu/classnotes2.html
+http://www.philanthropy.iupui.edu/nr-COPPS.html
+http://www.philanthropynow.com/pn/supporttools.htm
+http://www.philanthropyroundtable.org/magazines/2003/january/harperinterview.html
+http://www.philanthropyroundtable.org/magazines/2004/january/Rating%20Services.htm
+http://www.philaprintshop.com/birch.html
+http://www.philaprintshop.com/currquer.html
+http://www.philbrodieband.com/jokes_tongue_twister.htm
+http://www.philcallaway.ab.ca/articles/christmas_story.htm
+http://www.philcollins.co.uk/shop2.htm
+http://www.philhine.org.uk/writings/ktul_darkmess.html
+http://www.philipglass.com/?cmd=biographies&contents=3
+http://www.philipglass.com/cgi-bin/guestbook.cgi?size=100000
+http://www.philipglass.com/html/recordings/kronos-performs-philip-glass.html
+http://www.philipglass.com/html/recordings/music-in-12-parts.html
+http://www.philkaplan.com/thefitnesstruth/RadioShowMENU.htm
+http://www.phillipslaw.com/dui/yourrights.php
+http://www.phillyburbs.com/pb-dyn/news/239-01252005-438182.html
+http://www.phillyburbs.com/pb-dyn/news/93-02022005-442997.html
+http://www.phillyimc.org/
+http://www.phillytown.com/pubscaperead.asp?v1=bentelbow&v2=The+Bent+Elbow&v3=bent_elbo.htm
+http://www.philmore-datak.com/page_199.htm
+http://www.philocrites.com/archives/001966.html
+http://www.philonline.com.ph/~pctvf/abtchild.html
+http://www.philosophers.co.uk/portal_article.php?id=546
+http://www.philosophicalgourmet.com/advice.htm
+http://www.philosophy.leeds.ac.uk/Philosophy%20undergraduate/structure.htm
+http://www.philosophynow.org/archive/articles/49news.htm
+http://www.philosophynow.org/issue51/51blumenau.htm
+http://www.philosophypages.com/hy/2b.htm
+http://www.philosophypages.com/hy/3n.htm
+http://www.philosophypages.com/hy/5f.htm
+http://www.philosophypages.com/hy/5i.htm
+http://www.philosophypages.com/lg/e07b.htm
+http://www.phish.com/coventrynews/letter.html
+http://www.phishare.org/documents/EarthPolicy/2395/
+http://www.phishare.org/documents/icddrb/2738/
+http://www.phlebotomy.org/disc_Phleb1_tocf.htm
+http://www.phlf.org/plannedgiving/
+http://www.phlux.net/bboard/message-4848.html
+http://www.phmainstreet.com/mba/pride/db100aex.htm
+http://www.phmc.state.pa.us/ppet/roads1/page3.asp?secid=31
+http://www.phmovement.org/md/md-english.html
+http://www.phocuswright.com/events/travdex-03-program.php
+http://www.phocuswright.com/events/travdex-04-program.php
+http://www.phoenix5.org/Basics/treatsides/incontinence/incontMorganstern.html
+http://www.phoenix5.org/essays2rvy/rvy021021seeing.html
+http://www.phoenixcareersearch.net/np9-wallStreetJournal13.html
+http://www.phoenixcontact.com/com/service/16506.htm
+http://www.phon.ucl.ac.uk/home/estuary/trudgill.htm
+http://www.phon.ucl.ac.uk/home/richardh/deference.htm
+http://www.photius.com/countries/brazil/glossary/
+http://www.photo.net/bboard/q-and-a-fetch-msg?msg_id=00CYa8
+http://www.photo.net/learn/darkroom/black-and-white-intro
+http://www.photofocus.com/showarchive.php?aid=56&cid=7
+http://www.photon-magazine.com/news/news_2004-11_%20eu%20feat%20Apollon.htm
+http://www.phouka.com/travel/travelogue/day3.html
+http://www.phowmo.com/sgc/shorts/sgodnt01.html
+http://www.php-mag.net/itr/online_artikel/psecom,id,637,nodeid,114.html
+http://www.php.net/
+http://www.php.net/function.key
+http://www.php.net/key
+http://www.phparch.com/discuss/index.php/t/1237/0/
+http://www.phppatterns.com/index.php/article/articleview/30/1/1/
+http://www.phppatterns.com/index.php/article/articleview/35/1/2/
+http://www.phptr.com/articles/article.asp?p=165225
+http://www.phptr.com/articles/article.asp?p=26241&seqNum=9
+http://www.phptr.com/articles/article.asp?p=360649&seqNum=7
+http://www.phptr.com/title/013146745X
+http://www.phptr.com/title/0131476548
+http://www.phrack.org/phrack/25/P25-07
+http://www.phrack.org/show.php?p=25&a=7
+http://www.phrases.org.uk/bulletin_board/33/messages/429.html
+http://www.phrases.org.uk/meanings/him.html
+http://www.phrases.org.uk/meanings/proverbs.html
+http://www.phreacs.com.au/tanerai/lesson_04.html
+http://www.phreak.co.uk/stonehenge/psb/dicegeor.htm
+http://www.phrusa.org/research/forensics/rwanda/forgrav2.html
+http://www.phrusa.org/research/health_effects/exec.html
+http://www.phrusa.org/research/istanbul_protocol/isethiccode.html
+http://www.phryne.com/dates/DATES.HTM
+http://www.phs.org/healthinfo/tips2000/february2.shtml
+http://www.phsa.ca/News/Pulse/November7-2003.htm
+http://www.phschool.com/eteach/social_studies/2002_04/essay.html
+http://www.phschool.com/science/science_news/articles/anatomy_of_lightning.html
+http://www.phsspca.org/training/basic_control.htm
+http://www.phuket-info.com/picofday.htm
+http://www.phuketdir.com/phuketinfo/beaches.htm
+http://www.phuketisland.com/culture.htm
+http://www.phuketisland.info/eShopWEBs/eshopwebs.htm
+http://www.phy.cam.ac.uk/cavendish/history/years/firstten.php
+http://www.phy.ilstu.edu/programs/ptefiles/hmpg.html
+http://www.phy6.org/earthmag/oersted.htm
+http://www.phy6.org/stargaze/Lsun5wav.htm
+http://www.phys.ksu.edu/area/jrm/outlook.html
+http://www.phys.uu.nl/~suyver/Equiptment.html
+http://www.physica.org/xml/article.asp?article=t100a00088.xml
+http://www.physicalgeography.net/fundamentals/10w.html
+http://www.physicalgeography.net/fundamentals/7p.html
+http://www.physicalgeography.net/physgeoglos/b.html
+http://www.physicalgeography.net/physgeoglos/o.html
+http://www.physicalgeography.net/physgeoglos/s.html
+http://www.physicalplant.louisiana.edu/employ.shtml
+http://www.physicaltherapy.org/packer/backpain/
+http://www.physiciansnews.com/business/904glusman.html
+http://www.physiciansnews.com/cover/499wp.html
+http://www.physiciansnews.com/cover/698.html
+http://www.physiciansnews.com/finance/902.html
+http://www.physiciansnews.com/law/702bernick.html
+http://www.physiciansnews.com/law/897wade.html
+http://www.physics.csbsju.edu/QM/square.12.html
+http://www.physics.curtin.edu.au/teaching/FAQ/FAQstart.html
+http://www.physics.gatech.edu/people/faculty/ethomas.html
+http://www.physics.hku.hk/~nature/CD/regular_e/lectures/chap19.html
+http://www.physics.isu.edu/radinf/terms.htm
+http://www.physics.lsa.umich.edu/academics/research/robinson.htm
+http://www.physics.ohio-state.edu/~aubrecht/106journal.html
+http://www.physics.ohio-state.edu/~dvandom/Edu/newcor.html
+http://www.physics.ox.ac.uk/CM/singlecrystal.htm
+http://www.physics.ox.ac.uk/cm/singlecrystal.htm
+http://www.physics.ubc.ca/~kotlicki/alta_tecnical2.htm
+http://www.physics.ucla.edu/k-6connection/Mass,w,d.htm
+http://www.physics.ucsb.edu/~samuelp/2003_07_01_blogarchive.html
+http://www.physics.umanitoba.ca/IUPAP/C2role.html
+http://www.physics.wsu.edu/academics/labs/101Labs/Projectile(9-15-04).htm
+http://www.physicscentral.com/writers/writers-02-3.html
+http://www.physicsclassroom.com/Class/1DKin/U1L4a.html
+http://www.physicsclassroom.com/Class/waves/U10L4a.html
+http://www.physicsforums.com/archive/t-13290_Hitler's_Second_Book.html
+http://www.physicsforums.com/archive/t-44351_Frame_of_Reference.html
+http://www.physicsforums.com/archive/topic/t-23071_World_Underpopulation_Problem.html
+http://www.physicsforums.com/archive/topic/t-33392_Science_and_Truth.html
+http://www.physicsforums.com/archive/topic/t-44391_Self_taught_trig.html
+http://www.physicsforums.com/showthread.php?goto=lastpost&t=79732
+http://www.physicsroom.org.nz/log/archive/12/losangeles/
+http://www.physicsweb.org/article/world/10/12/2
+http://www.physicsweb.org/article/world/11/4/2
+http://www.physionet.org/faq.shtml
+http://www.physionet.org/tutorials/fmnc/node9.html
+http://www.physioroom.com/news/december01/index.shtml
+http://www.physorg.com/news1077.html
+http://www.physorg.com/news4571.html
+http://www.physsportsmed.com/issues/1996/03_96/artal.htm
+http://www.physsportsmed.com/issues/1996/07_96/colliton.htm
+http://www.physsportsmed.com/issues/1997/01jan/eqpt.htm
+http://www.physsportsmed.com/issues/1998/08aug/mcdevitt.htm
+http://www.physsportsmed.com/issues/1999/02_99/shephard.htm
+http://www.physsportsmed.com/issues/1999/10_15_99/kligman.htm
+http://www.physsportsmed.com/issues/2000/01_00/shelbourne.htm
+http://www.physsportsmed.com/issues/2000/02_00/motivated.htm
+http://www.physsportsmed.com/issues/2001/02_01/killingsworth.htm
+http://www.pia.org.uk/lastyearsAGM.htm
+http://www.pianolane.com/text/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=006005000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=002001000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=002008000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=002014000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=007004000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=008005000000000000
+http://www.pianolane.com/v2/catalog/searchresults.asp?start=1&search&sort=2&searchtype=advanced&catnumber=008006000000000000
+http://www.pianolane.com/v2/news/viewarticle.asp?id=528
+http://www.pianolane.com/v2/news/viewarticle.asp?id=570
+http://www.piapico.org/issue_areas/trust_funds.html
+http://www.pic.org/pilp%5Csummergrants.htm
+http://www.picanol.be/PICBESITE/EN/PRESS/PRESSRELEASES/PICWEAVINGSYSTEMS/Press_rel_30-04-2004.htm
+http://www.picard.tnstate.edu/~cmcginnis/PISI431-II.htm
+http://www.picard.tnstate.edu/~cmcginnis/Telepolitics.htm
+http://www.picgames.com/forum/list-away-messages.php?cat=normal
+http://www.pickingjobs.com/Information/information.htm
+http://www.pickupguide.com/layguide/simple.htm
+http://www.picoturbine.com/classroomideas.htm
+http://www.pics.com/highspeed.html
+http://www.pictet.com/en/home/services/forex/forexupdate.html
+http://www.pictographics.com/hostfee.lasso
+http://www.pictureflow.com/making_pictures/
+http://www.picturehouses.co.uk/site/cinemas/Cambridge/ralp.htm
+http://www.picturesofengland.com/England/Gloucestershire/Coleford/The_Wyndham_Arms_Hotel
+http://www.picturesofengland.com/England/Oxfordshire/Henley_on_Thames/Nuffield_Place
+http://www.piedmontcommunities.us/servlet/go_ProcServ/dbpage=page&gid=01002011540939411066522859&pg=01002011540939411066623800&mode=display&listicid=01002011540939411066783006x27x1&liststart=2
+http://www.pierce.ctc.edu/Library/internet/axis.html
+http://www.piercecountywa.org/pc/abtus/ourorg/aud/elections/ceoac/minutes52003.htm
+http://www.piercelaw.edu/risk/vol3/fall/tuler.htm
+http://www.piercelaw.edu/risk/vol3/winter/hilton.htm
+http://www.piercelaw.edu/risk/vol5/spring/drucker.htm
+http://www.piercelaw.edu/risk/vol5/winter/Fischhof.htm
+http://www.piercelaw.edu/risk/vol7/spring/intro.htm
+http://www.piercelaw.edu/risk/vol7/spring/vari.htm
+http://www.piercenet.com/Proteomics/browse.cfm?fldID=6782CD4F-1ECD-4BB9-A64B-FDA0235390D2
+http://www.pierre-chenxu.com/
+http://www.pierreseche.com/VAFranceEnglish.html
+http://www.pietermaritzburg.co.za/business/classifieds.asp?page=4&classType=classifieds
+http://www.pih.org.uk/articles/chetty.html
+http://www.pikapps.net/
+http://www.pikauba.com/asphelp/details.htm
+http://www.pikerpress.com/index.cfm
+http://www.pikespeakpermaculture.org/billmollisonspeaks.html
+http://www.pilchuck.com/educational_program/scholarships.htm
+http://www.pilkington.com/pilkington/corporate/english/company+briefing/business+profile/growth.htm
+http://www.pilkingtonandsons.com/suffering.htm
+http://www.pillar-solutions.com/resources/product_reviews.asp
+http://www.pillsburylaw.com/Go/bios.nsf/professionals/Ronald%20A.%20Fleming
+http://www.pillsburylaw.com/go/areamaster.nsf/practices-all/International%20Trade
+http://www.pilotswanted.com/
+http://www.pima.gov/bos/dist5/dist5.html
+http://www.pima.org/technical_bulletins/tbull102.html
+http://www.pimco.com/LeftNav/Latest+Publications/2004/Dialynas+Paper.html
+http://www.pimlicosoftware.com/support.htm
+http://www.pimptravel.com/01_SxDest_Prostitute.dir/3738f_Philippine_News_Link.htm
+http://www.pims.math.ca/education/2004/workshop/Reform/Israeledu.html
+http://www.pinenet.com/~rooster/karlen-1.html
+http://www.pinetreeweb.com/dewet-chapter-05.htm
+http://www.pinewood.schoolreference.com/old-computer-uses-donate-recycle-upgrade-game.html
+http://www.pinggolf.com/interact_repair.html
+http://www.pingle.derbyshire.sch.uk/newsletter/pingle_newsletter_26.htm
+http://www.pingwales.co.uk/internet/broadband-wales-hit-and-miss.html
+http://www.pinkmonkey.com/booknotes/monkeynotes/pmTimeMachine16.asp
+http://www.pinkmonkey.com/booknotes/monkeynotes/pmTimeMachine18.asp
+http://www.pinko.org/4.html
+http://www.pinkpear.net/bs02/skinstadmoves.htm
+http://www.pinkproducts.co.uk/civilpartnershipsadvice.htm
+http://www.pinkpussycatscorner.com/sleeptight.html
+http://www.pinkribbon.com/diagnosis.htm
+http://www.pinkribbon.com/info.htm
+http://www.pinksheets.com/risk.jsp
+http://www.pinn.net/~sunshine/book-sum/condorcet4.html
+http://www.pinnaclenews.com/sb-edition/letters.php
+http://www.pinnaclewest.com/main/pnw/careers/testing/testing_1.html
+http://www.pinnaclewest.com/main/pnw/investors/presentations/presentations_40.html
+http://www.pinnadent.com/feart.html
+http://www.pinr.com/report.php?ac=view_printable&report_id=242&language_id=1
+http://www.pinr.com/report.php?ac=view_report&report_id=242&language_id=1
+http://www.pinsonault.com/news_priorauth.asp
+http://www.pioneerthinking.com/ara-gardenserenity.html
+http://www.pioneerthinking.com/gasoline.html
+http://www.pioneerthinking.com/winterskin.html
+http://www.pipa.org/OnlineReports/BFW/finding1.html
+http://www.pipe-line.com/archive/archive_98-05/98-05_associations.html
+http://www.pipeline.com/~jude/Play%20Synopses.htm
+http://www.pipersclub.co.nz/
+http://www.piperspiece.co.uk/feed.htm
+http://www.pipingdesigners.com/Thinking%20outside%20the%20box.htm
+http://www.pipsqueak.com/skills/Project_Design-t.html
+http://www.pirweb.org/html/htm03e_myth.htm
+http://www.pirweb.org/pir03e_myth.htm
+http://www.pisd.edu/news/2004bond/minutes.shtml
+http://www.pistehors.com/articles/avalanche/avalanche-transceivers.htm
+http://www.pitara.com/activities/craft.asp
+http://www.pitchadjust.com/site/articles/article.php?article_id=2497
+http://www.pitcherplant.org/papers/CALGARY.htm
+http://www.pitchforkmedia.com/columns/resonant-frequency/06-10-05.shtml
+http://www.pitchforkmedia.com/features/artistlists/c/cross_david-05/
+http://www.pitchforkmedia.com/news/05-04/11.shtml
+http://www.pitchforkmedia.com/news/05-05/09.shtml
+http://www.pitchforkmedia.com/news/05-06/06.shtml
+http://www.pitchforkmedia.com/news/05-06/23.shtml
+http://www.pitchforkmedia.com/watw/02-05/krautrock.shtml
+http://www.pitching.com/conditioning_program.php
+http://www.piton.org/default.asp?nav_id=5&subnav=18
+http://www.pitpass.com/fes_php/pitpass_feature_item.php?fes_art_id=10344
+http://www.pitt.edu/~biohome/Dept/Frame/applytograduateschool.htm
+http://www.pitt.edu/~dash/grimm011.html
+http://www.pitt.edu/~oafa/biolsctarg.html
+http://www.pitt.edu/~press/news/stephaniepr.html
+http://www.pitt.edu/~property/tenantrights.html
+http://www.pitt.edu/~sac/October%202004.htm
+http://www.pittsbororelayforlife.org/ReasonForRelay.htm
+http://www.pittsburghlive.com/x/tribune-review/education/s_248931.html
+http://www.pittsburghlive.com/x/tribune-review/entertainment/movies/info/nowshowing.php
+http://www.pittsburghlive.com/x/tribune-review/health/s_167266.html
+http://www.pittsburghlive.com/x/tribune-review/news/s_164823.html
+http://www.pittsburghlive.com/x/tribune-review/pittsburgh/s_151968.html
+http://www.pittsburghlive.com/x/tribune-review/specialreports/buriedlegacy/s_88316.html
+http://www.pittsburghlive.com/x/tribune-review/specialreports/enterprise2005/s_306304.html
+http://www.pittsburghlive.com/x/tribune-review/sports/steelerslive/s_291292.html
+http://www.pittsburghlive.com/x/tribune-review/sundayextras/faywest/?record=2
+http://www.pittsburghlive.com/x/tribune-review/sundayextras/monvalley/?record=2
+http://www.pittsburghlive.com/x/tribune-review/sundayextras/westmoreland/?record=1
+http://www.pittsfieldhistory.org/index.php?section=history&content=bios_reader_james
+http://www.pittstate.edu/ssas/goal6.html
+http://www.pitzer.edu/offices/human_resources/jobs/staff.asp
+http://www.pixar.com/companyinfo/jobs/howto.html
+http://www.pixelgirlpresents.com/
+http://www.pixelgirlpresents.com/index.php
+http://www.pixmania.co.uk/uk/uk/xx/xx/0-77/25/6/criteresn.html
+http://www.pjb.co.uk/npl/bp10.htm
+http://www.pjb.com.au/comp/tea.html
+http://www.pjhealy.com/coldwar/final.html
+http://www.pjonline.com/Editorial/20050507/comment/lett01.html
+http://www.pjpres.org/
+http://www.pju.org/nuevo/basepanjuv2004eng.htm
+http://www.pju.org/nuevo/basepanjuv2005eng.htm
+http://www.pkal.org/open.cfm?d_id=294
+http://www.pkarchive.org/column/8900.html
+http://www.pkarchive.org/economy/FearEconomy.html
+http://www.pkarchive.org/global/yergin.html
+http://www.pkf.co.uk/web/pkfweb.nsf/pagesByID/ID5BCE47865FEF668C80256F56003A35CE?opendocument
+http://www.pla.blogspot.com/2002_10_13_pla_archive.html
+http://www.placedesarts.ca/groupmusic.html
+http://www.placerdome.com/newsroom/templates/newsrelease_master.jsp?INFORMATIONRELEASEOID=12009
+http://www.placerdome.com/newsroom/templates/newsrelease_master.jsp?INFORMATIONRELEASEOID=12010
+http://www.plaidcymru.org/press031030a.html
+http://www.plainenglish.co.uk/europe.html
+http://www.plainenglish.co.uk/issue40.html
+http://www.plainenglish.co.uk/issue47.html
+http://www.plainlanguagenetwork.org/Legal/leonard.html
+http://www.plainsinstitute.com/index.php
+http://www.plakatthai.com/drsmith.html
+http://www.plan-uk.org/uk/action/campaigns/?view=textonly
+http://www.plan-uk.org/uk/action/campaigns/giveusaminute/
+http://www.plan2ipo.com/failure.htm
+http://www.planecrashinfo.com/cvr721229.htm
+http://www.planecrashinfo.com/cvr980902.htm
+http://www.planesafe.org/legislation/775-4.htm
+http://www.planet-f1.com/news/story_19996.shtml
+http://www.planet-rugby.com/Teams/South_Africa/story_41145.shtml
+http://www.planet-rugby.com/Teams/Tonga/story_37086.shtml
+http://www.planet-rugby.com/Teams/Wales/story_40037.shtml
+http://www.planet-source-code.com/
+http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=16&lngWId=9
+http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1619&lngWId=8
+http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=58182&lngWId=1
+http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=58386&lngWId=1
+http://www.planet-teddybear.com/updateimages/2004/november/pattern/index.shtml
+http://www.planet-teddybear.com/updateimages/2004/november/pattern/print.shtml
+http://www.planetannihilation.com/coreprime/asp/listunits_read.asp?id=80105
+http://www.planetannihilation.com/madta/units_arm.asp
+http://www.planetark.com/dailynewsstory.cfm/newsid/26633/newsDate/17-Aug-2004/story.htm
+http://www.planetark.com/dailynewsstory.cfm/newsid/29217/story.htm
+http://www.planetark.com/envpicstory.cfm/newsid/24503
+http://www.planetark.com/envpicstory.cfm/newsid/29358
+http://www.planetark.org/dailynewsstory.cfm/newsid/26633/story.htm
+http://www.planetary.org/html/news/articlearchive/headlines/2003/flightpath-to-mars4.html
+http://www.planetary.org/news/2004/beagle2_inquiry-report_0524.html
+http://www.planetary.org/news/2004/mer-update_2-5-04.html
+http://www.planetary.org/news/2004/mer-update_3-02-04.html
+http://www.planetary.org/solarsail/Cosmosreport607.htm
+http://www.planetc1.com/cgi-bin/n/search.cgi?category=1&keyword=Will+Brooks
+http://www.planetdiablo.com/darksky/
+http://www.planetdoom.com/doom3cc/
+http://www.planetdreamcast.com/games/reviews/aerowings2/
+http://www.planetdungeonsiege.com/dungeoneers/tutorials/deep_modding.shtml
+http://www.planetf1.com/features/editorial/story_18258.shtml
+http://www.planethoustonamx.com/Shut_Up_Files/SUAD%2071.htm
+http://www.planetmagrathea.com/shortreview.html
+http://www.planetpapers.com/Assets/3885.php
+http://www.planetpdf.com/forumarchive/110759.asp
+http://www.planetquake.com/
+http://www.planetrugby.com/News/story_44485.shtml
+http://www.planetsave.com/index.php?option=com_content&task=view&id=1125&Itemid=34
+http://www.planetside-universe.com/forums/archive/index.php/t-499.html
+http://www.planetsimpson.com/radiohead.aspx
+http://www.planetworldcup.com/CUPS/2006/oceania_p01.html
+http://www.planetworldcup.com/GUESTS/paul20020412.html
+http://www.planetworldcup.com/GUESTS/peter20020619.html
+http://www.planetworldcup.com/GUESTS/peter20031113.html
+http://www.planit.co.uk/planitCatalog/n_product_info.php?mItem=12&products_id=260
+http://www.planitplus.net/careerzone/areas/default.aspx?PID=nf&TOPL=7&SECL=7A&ID=178
+http://www.planitplus.net/careerzone/areas/default.aspx?PID=nf&TOPL=7&SECL=7A&ID=179
+http://www.planitplus.net/careerzone/areas/default.aspx?PID=nf&TOPL=7&SECL=7A&ID=181
+http://www.plankwoodfloors.com/
+http://www.plannedobsolescence.net/
+http://www.plannersweb.com/articles/cogan.html
+http://www.plannersweb.com/articles/look22.html
+http://www.plannersweb.com/wfiles/w269.html
+http://www.plannersweb.com/wfiles/w359.html
+http://www.plannersweb.com/wfiles/w375.html
+http://www.planning-inspectorate.gov.uk/cymru/wal/appeals/enforcement_appeals/making_enfo_appeal_jan04_appendix5_e.htm
+http://www.planning-inspectorate.gov.uk/pins/agency_info/ppu/ppu_instructions.htm
+http://www.planning-inspectorate.gov.uk/pins/appeals/costs/circular08_19930329.htm
+http://www.planning.dot.gov/Documents/PublicInvolvement/arcata.htm
+http://www.planning.go.ke/Narc_Economic_Achievements_2003.html
+http://www.planning.org/25anniversary/influentials.htm
+http://www.planning.org/conferencecoverage/2004/saturday/charrette.htm
+http://www.planning.org/consultant/consult4.html
+http://www.planning.org/fromwashington/
+http://www.planning.org/joinapa/
+http://www.planning.org/newsreleases/2005/ftp052405.htm
+http://www.planning.org/thecommissioner/19952003/fall96.htm
+http://www.planning.org/thecommissioner/19952003/summer02.htm
+http://www.planning.org/thecommissioner/19952003/summer02.htm?project=Print
+http://www.planning.unc.edu/news/Walking.htm
+http://www.planningni.gov.uk/A-Z_Index.htm
+http://www.planningreport.com/tpr/?module=displaystory&story_id=1086&format=html
+http://www.planorganic.com/articles.htm
+http://www.plant-maintenance.com/m-news/edition15.shtml
+http://www.plant-maintenance.com/m-news/edition45.shtml
+http://www.plant-maintenance.com/m-news/edition46.shtml
+http://www.plantanswers.com/How_to_Select_and_PlantTree.htm
+http://www.plantanswers.com/How_to_Select_and_Plant_a_Tree.htm
+http://www.plantanswers.com/garden_column/aug_02/3.htm
+http://www.plantanswers.com/garden_column/july02/3.htm
+http://www.plantanswers.com/sale.htm
+http://www.plantapalm.com/vpe/ethnobotany/vpe_ethnobotany4-4.htm
+http://www.plantpatent.com/articles.html
+http://www.plantphysiol.org/cgi/content/full/132/3/1153
+http://www.plantphysiol.org/cgi/content/full/137/1/297
+http://www.plants.ox.ac.uk/ofi/prospect/backg.htm
+http://www.plantstress.com/methods/PotExp.htm
+http://www.plantzafrica.com/plantefg/geraniummulti.htm
+http://www.plantzafrica.com/plantqrs/siphonaeth.htm
+http://www.planware.org/exlfaq1.htm
+http://www.planware.org/salepwb.htm
+http://www.planware.org/salepwe.htm?source=trpanel
+http://www.plasmatvbuyingguide.com/plasmatvreviews/plasma-vs-lcd.html
+http://www.plasmatvbuyingguide.com/productreviews/companyreviews.html
+http://www.plasmawarehouseuk.com/jargon-explained.htm
+http://www.plastic.com/comments.html;sid=04/12/21/18572322;cid=41
+http://www.plasticbag.org/archives/2004/06/developing_a_url_structure_for_broadcast_radio_sites.shtml
+http://www.plasticbag.org/archives/2004/07/what_you_should_know_before_starting_a_doctorate.shtml
+http://www.plasticbag.org/archives/2005/01/a_really_rough_proposal_for_an_apple_media_hub_part_two.shtml
+http://www.plasticbag.org/archives/2005/03/social_software_for_settop_boxes.shtml
+http://www.plasticbag.org/archives/2005/06/on_leaving_and_rejoining_services_online.shtml
+http://www.plasticsindustry.org/public/oheic/oheic.htm
+http://www.plasticsindustry.org/public/worksafe/faqs.htm
+http://www.plasticsurgery.org/public_education/procedures/SkinManagement.cfm
+http://www.plasticsurgery4u.com/web_links_folder/barnes_noble_difference.html
+http://www.platinumplusmiles.com/rules.html
+http://www.platts.com/Electric%20Power/Resources/European%20Glossary/
+http://www.platts.com/Metals/Resources/Whats%20moving%20the%20market/
+http://www.platts.com/Oil/Newsletters%20&%20Reports/US%20Crudewire/
+http://www.plaxo.com/privacy/policy
+http://www.play-asia.com/paOS-13-28-link-71-9h-70-ckm.html
+http://www.play.net/forums/messages.asp?forum=20&category=2&topic=9
+http://www.playamayanews.com/article402.html
+http://www.playbill.com/features/article/90627.html
+http://www.playbill.com/news/article/92288.html
+http://www.playbill.com/news/article/93282.html
+http://www.playbill.com/news/article/93442.html
+http://www.player2player.net/index.php?name=News&file=article&sid=8
+http://www.players-golf.net/TommyBahama/TBshirts3.shtml
+http://www.playingbyear.com/tankarena/
+http://www.playingfieldpromotions.com/index.asp
+http://www.playinginfog.com/kudos2.html
+http://www.playjazzguitar.com/letter.html
+http://www.playkingdoms.com/pk/museum/one/figperkey.asp
+http://www.playordraw.com/db/article.asp?id=96
+http://www.playusa.com/playusa.asp?page=title&r=R1&title=114856
+http://www.playusa.com/playusa.asp?page=title&r=R1&title=161284
+http://www.playwinningpoker.com/rgp/01/july01.html
+http://www.playwinningpoker.com/rgp/early99.html
+http://www.pleasantondowntown.net/directory.php?page=10&id=&kw=
+http://www.pleasantondowntown.net/directory.php?page=13&id=&kw=
+http://www.pleasantondowntown.net/directory.php?page=24&id=&kw=
+http://www.pleasantondowntown.net/directory.php?page=9&id=&kw=
+http://www.pleasureunitbar.com/bandprofiles_r.htm
+http://www.plentyoffish.com/interests/eating.aspx
+http://www.plentyoffish.com/interests/walking.aspx
+http://www.plentyoffish.com/personals/37onlinedating15.htm
+http://www.plentyoffish.com/personals/482onlinedating.htm
+http://www.plentyoffish.com/personals/549onlinedating28.htm
+http://www.plentyoffish.com/personals/848onlinedating.htm
+http://www.plentyoffish.com/personals/9078onlinedating.htm
+http://www.plexusguam.com/biograph.htm
+http://www.pliableproducts.com/california.htm
+http://www.plig.org/xwinman/basics.php
+http://www.plig.org/xwinman/resource.php
+http://www.plim.org/Male%20and%20Female%20Androgyny.htm
+http://www.plotinus.com/exercise_subpersonalities2_copy.htm
+http://www.plotinus.com/exercise_subpersonalities_copy(3).htm
+http://www.ploughshares.ca/CONTENT/ABOLISH%20NUCS/BMD%20Page/BMD.update.htm
+http://www.ploughshares.ca/CONTENT/BRIEFINGS/brf021.html
+http://www.ploughshares.ca/CONTENT/CONTROL%20WEAPONS/LACCsmallarmsLatinAmericaJuly2000.html
+http://www.ploughshares.ca/CONTENT/MONITOR/mons99f.html
+http://www.ploughshares.ca/CONTENT/REDUCE%20MILITARY/CdnDefencePolicylist.html
+http://www.ploughshares.ca/content/BRIEFINGS/brf016.html
+http://www.ploughshares.ca/content/BRIEFINGS/brf017.html
+http://www.ploughshares.ca/content/BRIEFINGS/brf045.html
+http://www.ploughshares.ca/content/MONITOR/mond01e.html
+http://www.ploughshares.ca/content/MONITOR/mons96d.html
+http://www.ploughshares.ca/content/REDUCE%20MILITARY/CdnDefencePolicylist.html
+http://www.plowsharesactions.org/sunda%20times-infiltration.htm
+http://www.plu.edu/print/catalog/degrees-courses/coop.html
+http://www.plu.edu/scene/issue/2005/summer/features/garfield-street.html
+http://www.pluggedinonline.com/movies/movies/a0001984.cfm
+http://www.pluggedinonline.com/movies/movies/a0002105.cfm
+http://www.plumbingstore.com/ssink.html
+http://www.plumchoice.com/basic.html
+http://www.plumcreek.com/company/tree_species.cfm
+http://www.plumtree.com/applications/sales_support/
+http://www.plumtree.com/applications/sales_support/mazda.asp
+http://www.plumtree.com/jp/applications/sales_support/mazda.asp
+http://www.plumtree.com/news_events/pressreleases/2003/press051403.htm
+http://www.plusroot.com/dbook/01Puzzle.html
+http://www.plusroot.com/dbook/16Intend.html
+http://www.plussizeliving.com/articles/article.html?id=402
+http://www.plvsc.co.uk/members_scooters/
+http://www.plwha.org.au/PLWHA/TEXT%20ONLY%20PLWHA/HTML/about_plwha/ruralprojects.htm
+http://www.plymouth.ac.uk/staff/awilliams
+http://www.plymouthtea.com/abouttea.html
+http://www.pm.gov.au/news/Interviews/Interview1156.html
+http://www.pm.gov.pg/pmsoffice/pmsoffice.nsf/0/1C4BC655F126D2CD4A256C3D002DC7C3?OpenDocument
+http://www.pm.gov.pg/pmsoffice/pmsoffice.nsf/0/7FDE881E18BF99704A256C3D002DC6B3?OpenDocument
+http://www.pm.gov.uk/output/page2498.asp
+http://www.pm.gov.uk/output/page2510.asp
+http://www.pm.org/successful/
+http://www.pmachine.com/forum/threads.php?id=26448_0_19_0_C
+http://www.pmb.co.nz/hobbycorner/pages/intmicro.htm
+http://www.pmb.ox.ac.uk/alumni/paragraphs_1970s.html
+http://www.pmc.edu/ELI/questions.html
+http://www.pmc.gov.au/about_pmc/divisions/economic/index.cfm
+http://www.pmc.gov.au/recruitment/workplace_diversity/3_program.cfm
+http://www.pmdinc.cc/services.htm
+http://www.pmel.noaa.gov/pubs/outstand/stab2040/atmospheric.shtml
+http://www.pmel.noaa.gov/tao/elnino/el-nino-story.html
+http://www.pmel.noaa.gov/~kessler/occasionally-asked-questions.html
+http://www.pmengineer.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2732,61038,00.html
+http://www.pmengineer.com/CDA/ArticleInformation/features/BNP__Features__Item/0,2732,66380,00.html
+http://www.pmg.org.za/briefings/040615depsport.htm
+http://www.pmg.org.za/briefings/briefings.php?id=100
+http://www.pmiapp.com/APP_Web_Old/cutedge/a_cut_apstest_p5.html
+http://www.pmiaus.com/company/
+http://www.pmibookstore.org/
+http://www.pmimilehi.org/PMI2/webroot/cfm/root/promentoring.cfm
+http://www.pmjobs.net/NewsView.asp?id=1768
+http://www.pml.ac.uk/amt/publications/dsr/special.htm
+http://www.pmo.gov.my/WebNotesApp/PMMain.nsf/hv_PMKiniSemasaNew/06EB17B44F81B5D348256F960034626B
+http://www.pmq.com/mag/2003spring/big_dave_ostrander.shtml
+http://www.pmq.com/staying_alive.shtml
+http://www.pmra-arla.gc.ca/english/consum/mosquitos-e.html
+http://www.pmrma.army.mil/cleanup/facts/ESDNorth%20Plants%20Soil%20Volume.htm
+http://www.pmtexpo.it/?IDsezione=11850
+http://www.pmwf.com/Watches/Watch%20Sales%20Table.htm
+http://www.pnas.org/cgi/content/full/94/24/12823
+http://www.pnas.org/cgi/content/full/95/9/4816
+http://www.pnas.org/cgi/content/full/96/13/7117
+http://www.pnas.org/cgi/content/full/96/22/12760
+http://www.pnas.org/cgi/content/full/97/24/12985
+http://www.pnas.org/cgi/content/full/97/26/14019
+http://www.pnas.org/cgi/content/full/98/5/2346
+http://www.pnas.org/misc/archive041403.shtml
+http://www.pnca.edu/admissions/tuition/
+http://www.pnefc.premiumtv.co.uk/page/News/NewsDetail/0,,10362~673526,00.html
+http://www.pnhp.org/news/2005/february/bankruptcy_study_hig.php
+http://www.pnionline.com/dnblog/extra/
+http://www.pnionline.com/dnblog/extra/archives/001002.html
+http://www.pnl.gov/ag/usage/confuse.html
+http://www.pnl.gov/er_news/08_95/er_news/ZBRF.MBM.html
+http://www.pns.anl.gov/
+http://www.pnsn.org/REPTS/q00B.html
+http://www.pnsn.org/REPTS/q98C.html
+http://www.pnsn.org/REPTS/q98D.html
+http://www.poagao.org/pjournal.htm
+http://www.pobronson.com/No_To_The_Money.htm
+http://www.pocahontas.org/planningyou/shopping.aspx
+http://www.pocketfactory.com/forum/viewtopic.php?t=1194
+http://www.pocketgps.co.uk/menu_gpsstreetrouting.php
+http://www.pocketpccity.com/
+http://www.pocketpclife.co.uk/softreviewdetails.asp?cat=28&categorytitle=Voice+Recognition%2Ftext+to+speech&type=software
+http://www.pocketpcthoughts.com/forums/viewtopic.php?t=36829
+http://www.poclad.org/bwa/fall03.htm
+http://www.pocreations.com/friendship.html
+http://www.podbaydoor.com/archives/cat_television.html
+http://www.podcast.net/show/47979
+http://www.podcast.net/tag/common
+http://www.podcastingnews.com/details/feeds.feedburner.com/TownSquare/view.htm
+http://www.podgallery.com/html/submissions.html
+http://www.poeforward.com/poeveranda/texts/goethehawthorne-howellsbio.htm
+http://www.poemhunter.com/p/m/poem.asp?poet=3095&poem=376420
+http://www.poems.com/essarsmi.htm
+http://www.poetryconnection.net/search/Lack_of_Steadfastness
+http://www.poetrymagazine.org/magazine/0605/comment_171122.html
+http://www.poetrymagic.co.uk/advanced/truthinpoetry.html
+http://www.poetrysociety.org.uk/news/closeup.htm
+http://www.poetrysociety.org.uk/places/publicat.htm
+http://www.poetrysociety.org.uk/places/simon2.htm
+http://www.poetrysociety.org.uk/poetinthecity/schools.htm
+http://www.poets.org/page.php/prmID/47
+http://www.poetshouse.org/progpoetics.htm
+http://www.poewar.com/
+http://www.poewar.com/archives/2004/10/23/12-exercises-for-improving-dialogue/
+http://www.poewar.com/archives/2004/12/21/document-hack-a-technical-writers-journal-contracting-for-fun-profit/
+http://www.pogge.ca/
+http://www.pogo.org/p/contracts/co-940807-amox.html
+http://www.pohly.com/interview-4.html
+http://www.pohly.com/mags/hospitalliability.html
+http://www.pointoflaw.com/feature/
+http://www.pointsincase.com/columns/amir/1-19-05.htm
+http://www.pointsofdeparture.blogspot.com/
+http://www.pointstone.com/products/systemcleaner/
+http://www.pokemondungeon.com/pokedex/tauros.shtml
+http://www.poker.net/headlines/articles/learningandlying.htm
+http://www.pokermike.com/poetry/Falling.html
+http://www.pokernetwork.com/Nnoticeboard_reply.cfm?Summary_ID=498
+http://www.pokerpages.com/articles/archives/napolitano01.htm
+http://www.pokerpages.com/articles/archives/spath23.htm
+http://www.pokerpages.com/articles/players/stern03.htm
+http://www.pokerplayernewspaper.com/viewarticle.php?id=392
+http://www.pokersyte.com/omaha_holdem_poker.htm
+http://www.polar.icestorm.com/biblebell/n981220.html
+http://www.polar.se/antarktis/lagar_regler/treaty_protocol.html
+http://www.polarbearandco.com/runes.html
+http://www.polarisinstitute.org/polaris_project/corp_security_state/publications_articles/
+http://www.polarisinstitute.org/polaris_project/corp_security_state/publications_articles/missile_defence_june_03_PRINT.htm
+http://www.polas.latentmedium.com/nes/blob.html
+http://www.polb.com/html/1_about/tielines.html
+http://www.poliblogger.com/index.php?cat=1
+http://www.police.wa.gov.au/Services/Traffic/TrafficCameraSection.asp?FrequentlyAskedQuestions
+http://www.policecouldyou.co.uk/default.asp?action=article&ID=106
+http://www.policeone.com/police-products/duty-gear/personal-protective-equipment/articles/92343/
+http://www.policeone.com/policeone/frontend/parser.cfm?object=Columnists&tmpl=article&id=77200
+http://www.policies.uci.edu/adm/procs/800/800-11.html
+http://www.policies.uci.edu/adm/procs/900/900-21.html
+http://www.policy-network.net/php/article.php?sid=5&aid=171
+http://www.policy.ilstu.edu/policydocs/information.htm
+http://www.policyalmanac.org/environment/archive/crs_anwr.shtml
+http://www.policyreview.org/APR01/letters.html
+http://www.policyreview.org/FEB01/abrams.html
+http://www.policyreview.org/FEB01/abrams_print.html
+http://www.policyreview.org/apr01/rozenman.html
+http://www.policyreview.org/apr02/jewett.html
+http://www.policyreview.org/apr04/hess.html
+http://www.policyreview.org/aug02/letters.html
+http://www.policyreview.org/aug03/kagan.html
+http://www.policyreview.org/feb00/Caldwell.html
+http://www.policyreview.org/jun01/eberstadt.html
+http://www.policyreview.org/jun05/hill.html
+http://www.policyreview.org/jun99/eberstadt.html
+http://www.policyreview.org/may98/quotas.html
+http://www.policystrategists.com/seal_history.htm
+http://www.polisci.uci.edu/Graduate_files/pub_choice/pub_choice_main.htm
+http://www.polisci.uci.edu/faculty.htm
+http://www.politicalaffairs.net/article/view/312/1/32
+http://www.politicalaffairs.net/article/view/312/1/46
+http://www.politicalaffairs.net/article/view/467/1/47
+http://www.politicalcartoon.co.uk/html/history/dublin-opinion.html
+http://www.politicalgateway.com/main/columns/read.html?col=220
+http://www.politicalgateway.com/news/read.html?id=2694
+http://www.politicalreviewnet.com/polrev/reviews/MISR/R_1521_9488_091_1004979.asp
+http://www.politicalstrategy.org/archives/000019.php
+http://www.politicaltheory.info/
+http://www.politicalvine.com/announcements/announcementsview.asp?c=17510
+http://www.politicos.co.uk/item.jsp?ID=4691
+http://www.politics.co.uk/campaignsite/engineering-and-physical-sciences-research-council-(epsrc)-$1588947$4.htm
+http://www.politics.co.uk/campaignsite/iea-institute-of-economic-affairs-$7884313$4.htm
+http://www.politics.co.uk/campaignsite/professional-association-of-teachers-(pat)-$3645379$2.htm
+http://www.politics.co.uk/issueoftheday/charles-kennedy-britain-has-three-party-politics-$2805208.htm
+http://www.politics.co.uk/issues/police-funding-$2120139.htm
+http://www.politics.guardian.co.uk/life/feature/story/0,13026,1481436,00.html
+http://www.politics.ie/modules.php?name=News&file=article&sid=5802
+http://www.politics.ox.ac.uk/teaching/grad_pol/readinglist/polgovuk/polgovuk.asp
+http://www.politicsonline.com/coverage/philenq/
+http://www.politixgroup.com/comm266.htm
+http://www.polity.co.uk/global/sidebyside.htm
+http://www.polity.org.za/govdocs/green_papers/labour.html
+http://www.polity.org.za/html/govdocs/legislation/basicpop.html
+http://www.poliwatch.org/archives/Analysis/2004/03/index.php
+http://www.polksheriff.org/library/gangs/identifying.html
+http://www.pollingreport.com/ncpp.htm
+http://www.pollutionengineering.com/CDA/ArticleInformation/features/BNP__Features__Item/0,6649,106210,00.html
+http://www.polocrosse.net/aus/nsw/shpanews/jun2003news1.html
+http://www.poloniatoday.com/history11.htm
+http://www.polsci.wvu.edu/ipa/mono/html/mono3.html
+http://www.polska2000.pl/item2619_en.html
+http://www.polyconomics.com/searchbase/gp6.htm
+http://www.polygamyinfo.com/past_media%20plyg%2062%20trib.htm
+http://www.polygamyinfo.com/plygmedia%2003%2011newtimesaz.htm
+http://www.polymath-systems.com/intel/essayrev/sexdiff.html
+http://www.polymerupdate.com/helpdesk/default.htm
+http://www.polytropos.org/
+http://www.polytropos.org/archives/2004/09/the_passing_of.html
+http://www.pomegranatearts.com/project-philip_glass/more.html
+http://www.ponddoc.com/WhatsUpDoc/Plants/EnchantingPlants.htm
+http://www.pool-table-sale.com/pts/bca_10ball.php
+http://www.pool-table-sale.com/pts/bca_cowboy.php
+http://www.pool-table-sale.com/pts/bca_general3.php
+http://www.poole-associates.com/cafesociety.htm
+http://www.pooltherapy.com/
+http://www.poopreport.com/Ask/Content/legs.html
+http://www.poopreport.com/Office/Content/pathological.html
+http://www.poorandstupid.com/
+http://www.poorandstupid.com/2005_05_29_chronArchive.asp
+http://www.poorandstupid.com/chronicle.asp
+http://www.poormissfinch.com/index.php
+http://www.poorschmuck.net/
+http://www.poosh.org/index.php?s=content&p=events
+http://www.pop.umn.edu/bios/Brian_P_McCall.html
+http://www.popastro.com/sections/meteor/rev98.htm
+http://www.popcenter.org/Problems/problem-burglary-family.htm
+http://www.popcenter.umd.edu/people/larsen_ulla/pubs.shtml
+http://www.popecenter.org/about/staff_fellows_scholars.html
+http://www.popechart.com/Papal%20Election.htm
+http://www.popecon.org/forthcomingpapers.php
+http://www.popejoan.com/excerpts.htm
+http://www.popgadget.net/
+http://www.popjustice.co.uk/aaron/trains.htm
+http://www.popmatters.com/books/reviews/s/society-of-others.shtml
+http://www.popmatters.com/columns/warner/020313.shtml
+http://www.popmatters.com/film/reviews/b/beautiful-people.shtml
+http://www.popmatters.com/film/reviews/b/beautiful.shtml
+http://www.popmatters.com/film/reviews/b/breakin-all-the-rules.shtml
+http://www.popmatters.com/film/reviews/d/dawn-of-the-dead-1979.shtml
+http://www.popmatters.com/film/reviews/f/fat-man-and-little-boy.shtml
+http://www.popmatters.com/film/reviews/s/sorority-boys.shtml
+http://www.popmatters.com/film/reviews/w/wet-hot-american-summer.shtml
+http://www.popmatters.com/film/ride-with-the-devil.html
+http://www.popmatters.com/music/concerts/w/wango-tango-2005.shtml
+http://www.popmatters.com/music/reviews/d/davismiles-completemontreux.shtml
+http://www.popmatters.com/music/reviews/u/union-blue.shtml
+http://www.popmatters.com/sports/features/041005-jocks.shtml
+http://www.popmatters.com/sports/features/050126-nikecommercials.shtml
+http://www.popmatters.com/tv/reviews/a/arrested-development.shtml
+http://www.popmatters.com/tv/reviews/l/law-and-order-svu.shtml
+http://www.popmatters.com/tv/reviews/s/6-feet-under-2003.shtml
+http://www.popmatters.com/tv/reviews/t/tru-calling.shtml
+http://www.poppolitics.com/articles/2000-07-18-vpsurvivor.shtml
+http://www.popsci.com/popsci/computers/article/0,20967,1006968,00.html
+http://www.popsci.com/popsci/medicine/article/0,20967,698068,00.html
+http://www.popularhotrodding.com/events/0306sr_reunion/
+http://www.popularhotrodding.com/tech/0302PHR_Troy/
+http://www.popularmechanics.com/automotive/car_care/1266956.html?page=8&c=y
+http://www.popularscience.co.uk/
+http://www.populationconnection.org/Reports_Publications/Publications/publication432.html
+http://www.porkpie.co.uk/shoppe-supplyterms.asp
+http://www.port80software.com/support/articles/webperformance
+http://www.portabletypewriters.com/secrets.htm
+http://www.portadownnews.com/20Jul01.htm
+http://www.portagedailygraphic.com/story.php?id=144493
+http://www.portalmarket.com/tealine.html
+http://www.portalsmag.com/articles/default.asp?ArticleID=4375
+http://www.portalsmag.com/articles/default.asp?ArticleID=5631
+http://www.portaskarate.org/weights.html
+http://www.portblue.com/pub/what-are-expert-systems
+http://www.portercountysheriff.com/blotter/blotter-archives/blotter-04/july.html
+http://www.portishead.org.uk/
+http://www.portlandgeneral.com/about_pge/news/giving_campaign_million.asp
+http://www.portlandphoenix.com/features/other_stories/multi3/documents/04418191.asp
+http://www.portlandphoenix.com/features/top/ts_multi/documents/04258169.asp
+http://www.portlandrobotics.org/index.php?id=68
+http://www.portlandstories.org/000028.html
+http://www.portofcalcutta.com/kopt05012.html
+http://www.portphillip.vic.gov.au/community_group_training.html
+http://www.portseattle.org/about/organization/millerremarks05.shtml
+http://www.portsmouth.gov.uk/living/819.asp
+http://www.portsmouth.gov.uk/living/819.html
+http://www.portsmouth.va.us/tourism/shopping.htm
+http://www.posetech.com/pose_method/technique.html
+http://www.positioning-search-engines.com/kinds.htm
+http://www.positioniseverything.net/articles/float-bugs-1.html
+http://www.positioniseverything.net/easyclearing.html
+http://www.positive-way.com/listenin.htm
+http://www.positiveatheism.org/hist/quotes/dawkins.htm
+http://www.positiveatheism.org/hist/quotes/lecky.htm
+http://www.positiveatheism.org/hist/quotes/quote-h.htm
+http://www.positiveatheism.org/hist/quotes/wright.htm
+http://www.positiveatheism.org/mail/eml8295.htm
+http://www.positiveatheism.org/mail/eml8378.htm
+http://www.positiveatheism.org/mail/eml9547.htm
+http://www.positiveatheism.org/mail/eml9928.htm
+http://www.positiveatheism.org/tocrw.htm
+http://www.positiveatheism.org/writ/alleluyup.htm
+http://www.positiveatheism.org/writ/pkgagme.htm
+http://www.positiveconnections.org/bulletin.htm
+http://www.positivehealth.com/Reviews/books/kaplan69.htm
+http://www.positivehealth.com/permit/Articles/Massage/big45.htm
+http://www.positiveliberty.com/2004/02/cheat-sheet-is-blowin-in-wind.html
+http://www.positiveliberty.com/2005/01/same-sex-marriage-reply-to-pseudo.html
+http://www.positron.com/ut.html
+http://www.posner.com/articles/garrison.htm
+http://www.post-gazette.com/healthscience/19981026wave5.asp
+http://www.post-gazette.com/lifestyle/20010821franticwoman0821fnp3.asp
+http://www.post-gazette.com/localnews/20031222closeuplocal3P3.asp
+http://www.post-gazette.com/pg/03341/248380.stm
+http://www.post-gazette.com/pg/04073/285038.stm
+http://www.post-gazette.com/pg/04119/307558.stm
+http://www.post-gazette.com/pg/04137/316500.stm
+http://www.post-gazette.com/pg/04167/331972.stm
+http://www.post-gazette.com/pg/04272/386393.stm
+http://www.post-gazette.com/pg/04294/398441.stm
+http://www.post-gazette.com/pg/04306/404776.stm
+http://www.post-gazette.com/pg/04315/409165.stm
+http://www.post-gazette.com/pg/04323/413677.stm
+http://www.post-gazette.com/pg/04342/422669.stm
+http://www.post-gazette.com/pg/04347/425044.stm
+http://www.post-gazette.com/pg/04348/425914.stm
+http://www.post-gazette.com/pg/05023/445588.stm
+http://www.post-gazette.com/pg/05031/450455.stm
+http://www.post-gazette.com/pg/05065/467032.stm
+http://www.post-gazette.com/pg/05075/471966.stm
+http://www.post-gazette.com/pg/05085/478099.stm
+http://www.post-gazette.com/pg/05107/489014.stm
+http://www.post-gazette.com/pg/05114/493083.stm
+http://www.post-gazette.com/pg/05132/502769.stm
+http://www.post-gazette.com/pg/05142/491411.stm
+http://www.post-gazette.com/pg/05157/516635.stm
+http://www.post-gazette.com/pg/05160/518067.stm
+http://www.post-gazette.com/pg/05161/519400.stm
+http://www.post-gazette.com/pg/05163/519249.stm
+http://www.post-gazette.com/pg/05163/519829.stm
+http://www.post-gazette.com/pg/05163/520178.stm
+http://www.post-gazette.com/pg/05163/520342.stm
+http://www.post-gazette.com/pg/05168/522925.stm
+http://www.post-gazette.com/pg/05168/523356.stm
+http://www.post-gazette.com/pg/05170/522814.stm
+http://www.post-gazette.com/pg/05171/525312.stm
+http://www.post-gazette.com/pg/05172/525943.stm
+http://www.post-gazette.com/pg/05173/526664.stm
+http://www.post-gazette.com/pg/05174/527016.stm
+http://www.post-gazette.com/pg/05175/527652.stm
+http://www.post-gazette.com/pg/05175/528036.stm
+http://www.post-gazette.com/pg/05177/528123.stm
+http://www.post-literate.com/gerpunx/archives/2005/01/prepare_to_lose_your_mind.php
+http://www.postanarki.net/jason3.htm
+http://www.postcarbon.org/eos/articles_reviews.htm
+http://www.postcolonialweb.org/singapore/literature/jeyaretnam/teabags.html
+http://www.postdoc.ucla.edu/modules/smartfaq/
+http://www.postednote.com/
+http://www.postfix.org/QSHAPE_README.html
+http://www.postgazette.com/healthscience/20021220cellssci2p2.asp
+http://www.postgrad.hobsons.com/study.jsp?id=STUDY_RESEARCH_5
+http://www.postgradmed.com/issues/2000/11_00/zerbe.htm
+http://www.postgresql.org/docs/7.4/static/functions-matching.html
+http://www.postgresql.org/docs/8.0/interactive/plpgsql-statements.html
+http://www.postil.com/postshirut.nsf/misparidE/107?opendocument
+http://www.postnewsline.com/2004/10/strongdouala_ra.html
+http://www.postnewsline.com/2005/05/strongcattu_woo.html
+http://www.postpoppulp.org/story/display/4.html
+http://www.potaroo.net/ispcolumn/2003-07-v4-address-lifetime/ale.html
+http://www.potentialtechnology.com/sportshypnosis.htm
+http://www.pottstownmercury.com/site/news.cfm?newsid=13756070&BRD=1674&PAG=461&dept_id=515154&rfi=6
+http://www.poulsbo.net/msc/
+http://www.poulsbomsc.org/
+http://www.poultry.org/labor_koreanjobs.htm
+http://www.povertyeast.org/jobs/speakers.html
+http://www.powayschools.com/projects/ewe2/introduction.htm
+http://www.powells.com/authors/baxter.html
+http://www.powells.com/authors/chopra.html
+http://www.powells.com/authors/pierre.html
+http://www.powells.com/calendar.html
+http://www.powells.com/cgi-bin/biblio?inkey=17-0071406948-0
+http://www.powells.com/cgi-bin/product?isbn=0312421435
+http://www.powells.com/cgi-bin/product?isbn=0345455770
+http://www.powells.com/cgi-bin/product?isbn=0679775439
+http://www.powells.com/cgi-bin/product?isbn=0897323238
+http://www.powells.com/cgi-bin/product?isbn=1573229326
+http://www.powells.com/features/tolkien.html
+http://www.powells.com/pow/review/2004_08_07.html
+http://www.powells.com/psection/AirAmerica.html
+http://www.powells.com/psection/Reference.html
+http://www.powells.com/review/2004_10_02.html
+http://www.powells.com/review/2005_02_15.html
+http://www.powells.com/review/2005_04_30.html
+http://www.powells.com/subsection/AttheMoviesSideways.1.html
+http://www.powells.com/subsection/AttheMoviesSideways.html
+http://www.powells.com/subsection/ChildrensNativeAmericanStories.html
+http://www.powells.com/subsection/CookingandFoodKidsParties.html
+http://www.powells.com/tnr/review/2001_05_17.html
+http://www.powells.com/usedbooks/ReligionWestern.10.html
+http://www.power-surge.com/transcripts/fox329.htm
+http://www.power-zone.com/sept02newsletter.htm
+http://www.power.org/news/interviews/hawkins/
+http://www.powerballs.com/
+http://www.powercranks.com/newsite/faq.html
+http://www.powerdesigners.com/InfoWeb/design_center/Appnotes_Archive/A1813.shtm
+http://www.powerfuloffers.com/
+http://www.powerhomebiz.com/vol2/liveup.htm
+http://www.powerhomebiz.com/vol33/breakeven.htm
+http://www.powerhomebiz.com/vol52/sale.htm
+http://www.powerhomebiz.com/vol71/comingback.htm
+http://www.powerhomebiz.com/vol76/walton.htm
+http://www.powerhomebiz.com/vol85/difference.htm
+http://www.powerhomebiz.com/vol96/attitude.htm
+http://www.powerhousehosting.net/usespam.htm
+http://www.powerhousetv.com/stellent2/groups/public/documents/pub/phtv_se_000500.hcsp
+http://www.powerhousetv.com/stellent2/groups/public/documents/pub/phtv_yh_bu_gs_000393.hcsp
+http://www.poweringmuscles.com/article.php?article_id=51
+http://www.powerlabs.org/railgunprogress.htm
+http://www.powerlight.com/case-studies/state/san_francisco.shtml
+http://www.powerlight.com/faqs/case_studies.shtml
+http://www.powerlineblog.com/
+http://www.powerlineblog.com/archives/007760.php
+http://www.powerlink.net/fen/FENCU22.htm
+http://www.powerlink.net/fen/JULIA22.htm
+http://www.powerlink.net/fen/mitch.htm
+http://www.powernet.net/~jcrafton/person-c.html
+http://www.powernet.net/~jcrafton/stellr-c.html
+http://www.powerprep.com/prepstra.htm
+http://www.powerquality.com/news/power_detroit_edison_prepared/
+http://www.powertoshare.com/dropzone/index.php?p=332&more=1&c=1
+http://www.poweru.net/ebay/instructor/registration5.asp
+http://www.powerwriting.com/answers.html
+http://www.pownetwork.org/bios/m/m139.htm
+http://www.powysweb.co.uk/english/subcats.php3?cat=alink
+http://www.poynter.org/column.asp?id=34&aid=77396
+http://www.poynter.org/column.asp?id=36&aid=875
+http://www.poynter.org/content/content_view.asp?id=32702
+http://www.poynter.org/content/content_view.asp?id=77423
+http://www.poynton.com/notes/video/Constant_luminance.html
+http://www.poyntonweb.co.uk/
+http://www.pp.msu.edu/cust/Safety/MSDS_Webs/HeavyDutyPrespray.htm
+http://www.pp.okstate.edu/ehs/modules/ergo/Eye.htm
+http://www.ppao.gov.on.ca/sitemap.html
+http://www.pparc.ac.uk/frontiers/archiveText/feature.asp?id=12F1&style=feature
+http://www.ppforum.ca/ow/brison.html
+http://www.ppg.com/ppgaf/pline498.htm
+http://www.ppgworld.com/transcripts/files/BoughtAndScold.htm
+http://www.ppionline.org/ndol/print.cfm?contentid=964
+http://www.pplm.org/clinic/pat_rit/pat_rit.html
+http://www.pplmotorhomes.com/parts/tv-antennas/rv-satellite-dish.htm
+http://www.pplweb.com/about/our+management+team/James+H.+Miller.htm
+http://www.ppnie.com/CalculatorsNowOffLimits.html
+http://www.pponline.co.uk/encyc/0147.htm
+http://www.pponline.co.uk/encyc/0161.htm
+http://www.pponline.co.uk/encyc/0279.htm
+http://www.pponline.co.uk/encyc/0310.htm
+http://www.pponline.co.uk/encyc/0501.htm
+http://www.pponline.co.uk/encyc/0600.htm
+http://www.pponline.co.uk/encyc/0686.htm
+http://www.pponline.co.uk/encyc/0800.htm
+http://www.pponline.co.uk/encyc/0852b.htm
+http://www.pponline.co.uk/encyc/0863.htm
+http://www.pponline.co.uk/encyc/0905.htm
+http://www.pponline.co.uk/encyc/1024.htm
+http://www.pponline.co.uk/encyc/balance-exercise.html
+http://www.pponline.co.uk/encyc/power-training.html
+http://www.pponline.co.uk/encyc/running.htm
+http://www.pponline.co.uk/encyc/team-sport.htm
+http://www.pponline.co.uk/prewp/pp-membertop.html
+http://www.pponline.co.uk/prewp/ppsubs-masters.html
+http://www.ppplants.com/resources/tip/5.19.05.html
+http://www.pprc.org/pubs/grnchain/purchase.cfm
+http://www.pprc.org/pubs/pubslist.cfm
+http://www.ppsp.org/employment.asp
+http://www.ppsv.com/issues/managedcare.htm
+http://www.ppu.org.uk/learn/peaceed/pe_which.html
+http://www.ppu.org.uk/peacematters/1999/pm_99sum_abolish.html
+http://www.pqu.uts.edu.au/surveys/fots.html
+http://www.pra.org.uk/research/projects/tr_1_84.htm
+http://www.pra.org.uk/technical/ecolabel.htm
+http://www.practical-philosophy.org.uk/Volume2Articles/ConferenceReflections.htm
+http://www.practicalanarchy.org/fnb_crass2.html
+http://www.practicalfm.co.uk/shownews.asp?id=76129
+http://www.practicalmoneyskills.com/english/at_home/consumers/debt/out/reducing.php
+http://www.practicalparent.org.uk/boys.htm
+http://www.practicalparent.org.uk/talk.htm
+http://www.practicalpolitics.net/guest/kolmar2.html
+http://www.practicalpreschool.com/site_files/booksindex.html
+http://www.practicalwinery.com/novdec02/novdec02p6.htm
+http://www.practicesource.com/hob/blog/
+http://www.practicesource.com/hob/blog/index.php
+http://www.prague-tribune.cz/2004/1/11.htm
+http://www.prague2001.com/links.htm
+http://www.pragueaccommodations.com/
+http://www.prairiedog.info/prairie_dog_reintroduction.htm
+http://www.prairieghosts.com/ags.html
+http://www.prairieghosts.com/conference.html
+http://www.prairieghosts.com/ouija.html
+http://www.prairienet.org/icpr/archive/news4-97.html
+http://www.prairieshoreproperties.com/financing.htm
+http://www.pratham.org/news/peace_delegation.php
+http://www.pratt.duke.edu/pratt_press/web.php?sid=123&iid=15
+http://www.pratt.duke.edu/students/profiles_auyeung.php
+http://www.pratt.duke.edu/students/profiles_gonce.php
+http://www.praxisinterim.com/casestudies.asp
+http://www.praxisinterim.com/imoftheyear.asp
+http://www.praxisinterim.com/imoftheyear.asp?id=502&section=181
+http://www.praxisinterim.com/imoftheyear.asp?id=503&section=181
+http://www.prb.org/AmeristatTemplate.cfm?Section=RaceandEthnicity&Template=/Topics.cfm&InterestCategoryID=244
+http://www.prb.org/Content/NavigationMenu/PRB/Educators/Build-A-Text1/Build-A-Text.htm
+http://www.prb.org/Content/NavigationMenu/PRB/Educators/Human_Population/Population_Growth/Population_Growth.htm
+http://www.prb.org/Content/NavigationMenu/PRB/PRB_Library/Glossary2/Glossary.htm
+http://www.prb.org/Content/NavigationMenu/PRB/Publications1/Build-A-Text/Build-A-Text.htm
+http://www.prb.org/PrintTemplate.cfm?Section=PRB&template=/ContentManagement/ContentDisplay.cfm&ContentID=12057
+http://www.prb.org/PrintTemplate.cfm?Section=PRB&template=/ContentManagement/ContentDisplay.cfm&ContentID=12344
+http://www.prb.org/Template.cfm?Section=PRB&template=/ContentManagement/ContentDisplay.cfm&ContentID=12057
+http://www.prb.org/Template.cfm?Section=PRB&template=/ContentManagement/ContentDisplay.cfm&ContentID=12344
+http://www.prc.org/resources_student.html
+http://www.prcharness.com/
+http://www.prdomain.com/companies/s/samsung/news_releases/200203mar/pr_samsung_20020306.htm
+http://www.prdomain.com/pr_speak/k_srinivasan_interview.htm
+http://www.pre-conproducts.com/proj.html
+http://www.pre-eclampsia.co.uk/Miranda.html
+http://www.pre.nl/normal.html
+http://www.precious-testimonies.com/Hope_Encouragement/f-j/janie.htm
+http://www.preciouspets.org/truth.htm
+http://www.predecimal.com/forsale/choicecoins.htm
+http://www.predictweather.com/ozone%20depletion/index.asp
+http://www.pref.hiroshima.jp/shoukou/ricchi/ricchi/ryugu-e.html
+http://www.preferredrentals.com/reserve.htm
+http://www.prefixmag.com/features.php?t=interview&f=BritishSeaPower%20Interview%20Part1
+http://www.pregnancy-info.net/QA/answers-Depo_Shot__Please_Read_/
+http://www.pregnancy-info.net/QA/answers-falling_HCG_and_then_rising_/
+http://www.pregnancy.org/article.php?sid=975
+http://www.pregnancy.org/phpBB2/viewtopic.php?p=3709924&
+http://www.pregnancyantenatal.com/showquestion.aspx?Q=750
+http://www.pregnantpause.org/abort/babyhope.htm
+http://www.preksmarties.com/moms/sahm3.htm
+http://www.premiere-racing.com/04_KW_Results/kw_2004_releases.htm
+http://www.premierelasercentre.com/laserhairremoval/faq_gentleyag.asp
+http://www.premiertourismmarketing.com/fyi/aug04.html
+http://www.prenhall.com/author_guide/nontech1/illustrations.html
+http://www.prenhall.com/author_guide/nontech2/illustrations.html
+http://www.prenhall.com/author_guide/tech1/illustrations.html
+http://www.prenhall.com/author_guide/tech2/illustrations.html
+http://www.prenhall.com/cgi-bin/success/polls/insertPoll.pl?definitionFile=StudySkills.def
+http://www.prenhall.com/nellen/html/chapter11.htm
+http://www.prepare.org/children/childrencope.htm
+http://www.preparerespondrecover.com/
+http://www.prepress-skills.wa.edu.au/about_us/facts_about_us.htm
+http://www.prequal1.net/
+http://www.presbyterian.ca/pwsd/apafgh04.htm
+http://www.presbytery.org/news.asp?file=040715.htm
+http://www.preschoolrainbow.org/activities-small.htm
+http://www.preschoolrainbow.org/holiday-craft.htm
+http://www.preschoolrainbow.org/prek-fall.htm
+http://www.preschoolrainbow.org/preschool-outdoor.htm
+http://www.preschoolrainbow.org/preschool-winter.htm
+http://www.prescod.net/politics/
+http://www.presencemultimedia.co.uk/bitsnbobs/onelumportwo/tea_game.swf
+http://www.presentationhelper.co.uk/giving_presentation.htm
+http://www.presentationhelper.co.uk/kennedy_man_on_the_moon_speech.htm
+http://www.presentationhelper.co.uk/president_kennedy_speech_man_moon.htm
+http://www.presentations.com/presentations/technology/article_display.jsp?vnu_content_id=1000738248
+http://www.preservationde.org/gibraltar/gardens/garden_sculpture.htm
+http://www.presidency.gov.eg/html/13_9.htm
+http://www.presidency.ucsb.edu/ws/index.php?pid=3996
+http://www.presidentreagan.info/
+http://www.presidentreagan.info/speeches/brandenburg_gate.cfm
+http://www.presidio.gov/About_the_Presidio/PresidioPost/NovDec2003/PHSH.htm
+http://www.preskorn.com/columns/9611.html
+http://www.press.bayer.com/news/news.nsf/id/815CA88228EF0A70C1256F4E003EBB84
+http://www.press.dtlr.gov.uk/pns/DisplayPN.cgi?pn_id=2001_0615
+http://www.press.jhu.edu/books/hopkins_guide_to_literary_theory/entries/phenomenology.html
+http://www.press.org/abouttheclub/record/1998record/record-1-8-98.html
+http://www.press.uchicago.edu/Misc/Chicago/077977in.html
+http://www.press.uchicago.edu/Misc/Chicago/305724in.html
+http://www.press.uchicago.edu/Misc/Chicago/312283.html
+http://www.press.uchicago.edu/Misc/Chicago/555607in.html
+http://www.press.uchicago.edu/Misc/Chicago/779939.html
+http://www.press.uchicago.edu/Subjects/virtual_sociology.html
+http://www.press.uchicago.edu/Subjects/virtual_women.html
+http://www.press.uillinois.edu/epub/books/eick/ch4.html
+http://www.press.uillinois.edu/epub/books/rose/ch5.html
+http://www.press.uillinois.edu/epub/books/sinke/ch1.html
+http://www.press.uillinois.edu/journals/contours/1.2/br3.html
+http://www.press.uillinois.edu/journals/lhr/toc.php
+http://www.press.umich.edu/jep/08-01/syropoulos.html
+http://www.press.umich.edu/jep/works/DanieContr.html
+http://www.pressaction.com/news/weblog/full_article/mickeyz06202005
+http://www.pressaction.com/news/weblog/full_article/wheeler07282004/
+http://www.pressbox.co.uk/detailed/29673.html
+http://www.pressbox.co.uk/detailed/International/Hair_care_Trends_this_summerHair_care_Trends_this_summer_25869.html
+http://www.pressdigest.org/english.html
+http://www.pressgazette.co.uk/?t=article&l=the_good_the_bad
+http://www.pressiechurch.org/Theol_1/covenant__in__the__scottish__experience.htm
+http://www.pressrepublican.com/outdoors/lib/03312002out1.htm
+http://www.pressurebasketball.com/newreview.html
+http://www.pressxchangeusa.com/main.cfm?P=pxc_terms_ENG
+http://www.prestigeproperty.co.uk/search_result.asp?Country=Spain&Region=North%20East%20Spain&County=Costa%20Brava
+http://www.prestosports.com/features.html
+http://www.pretorianews.co.za/index.php?fSectionId=672&fArticleId=2405636
+http://www.pretty-scary.com/augusta-ga-meet-single/augusta-ga-meet-single.php?key=augusta%20ga%20meet%20single
+http://www.pretty-scary.com/single-network/single-network.php?key=single%20network
+http://www.pretty-scary.com/winnipeg-dating-club-meet-single-in-your-area/winnipeg-dating-club-meet-single-in-your-area.php?key=winnipeg%20dating%20club%20meet%20single%20in%20your%20area
+http://www.preventcancer.com/losing/acs/wealthiest_links.htm
+http://www.preventgenocide.org/lemkin/AxisRule1944-1.htm
+http://www.prevention.com/article/0,5778,s1-1-74-206-2446-1,00.html
+http://www.prevention.com/article/0,5778,s1-2-56-235-3926-4,00.html
+http://www.prevention.com/article/0,5778,s1-2-92-221-3926-4,00.html
+http://www.preventionmouthrinse.com/BoardExaminationTips.html
+http://www.preventivecare.com/toc.html
+http://www.prevlink.org/therightstuff/teachers/talking.html
+http://www.prevx.com/emailsupport.asp
+http://www.prex.com/sell-foreign-dvds.html
+http://www.prfirms.org/resources/nike/nike071403.asp
+http://www.prfirms.org/resources/publications/hiring_firm.asp
+http://www.prgs.edu/environment/randwhat.html
+http://www.prguru.com/producing_vnrs.htm
+http://www.prh.noaa.gov/itic/library/pubs/glossary/tsu_glossary_html/tsunami_glossary6.html
+http://www.price-pottenger.org/Articles/Acid_alk_bal.htm
+http://www.pricerunner.co.uk/home-appliances/cookers/215782/details
+http://www.pricerunner.co.uk/home-appliances/cookers/218268/details
+http://www.pricerunner.co.uk/home-appliances/kettles/143062/details
+http://www.pricerunner.com/kids-and-family/toys/freetext/6?a_type=build&a_build=block
+http://www.pricerunner.com/sound-and-vision/sound/audio-systems/
+http://www.pricescope.com/MSU/leakage.asp
+http://www.pricingsociety.com/conference/meeting4-23.asp
+http://www.pricingsociety.com/ppsinthenews.asp?nid=177
+http://www.pridelondon.ca/sponsorsvendors.html
+http://www.priestsforlife.org/magisterium/99-11-15adlimina.html
+http://www.primaat.com/quotes
+http://www.primacycompanies.com/modern/weekly.cfm
+http://www.primal-page.com/stett.htm
+http://www.primalseeds.org/urbanplants.htm
+http://www.primarymatters.com/Contact.htm
+http://www.primaryresearch.org/PRTHB/Dane/Cahill/cahill.htm
+http://www.prime-leisure.com/pricelist.html
+http://www.primebooks.net/books/book_detail.asp?isbn=0-9668968-8-2
+http://www.primefocus.com/
+http://www.primeideas.com/fofmerchandise.asp
+http://www.primelocation.com/estate-agents/properties/a/rich/uk/y/sr/s/
+http://www.primelocation.com/farms-estates-and-land/developing-your-property/
+http://www.primelocation.com/uk-property-for-sale/browse/Houses/uk/england/london/north_west_london/hampstead_heath_station/61/
+http://www.primelocation.com/uk-property-to-rent/browse/all/uk/england/london/west_london/shepherds_bush/
+http://www.primelocation.com/uk-property-to-rent/browse/all/uk/england/london/west_london/shepherds_bush_station/
+http://www.primeminister.govt.nz/oldpms/1974rowling.html
+http://www.primepointfoundation.org/donald_interview.htm
+http://www.primerehab.com/pages/wellness.html
+http://www.primetimeshortwave.com/
+http://www.primetravels.com/modesofpayment.shtml
+http://www.primusweb.com/fitnesspartner/library/weight/weight02.htm
+http://www.princegeorge.com/royalpurple/info.html
+http://www.princeofwales.gov.uk/speeches/princestrust_25101996.html
+http://www.princes-trust.org.uk/Main%20Site%20v2/14-30%20and%20need%20help/advice%20for%20careleavers.asp
+http://www.princeton.edu/hr/handbook/partone/timeoff.htm
+http://www.princeton.edu/main/news/archive/S11/04/86Q66/
+http://www.princeton.edu/main/news/archive/S11/04/86Q66/index.xml
+http://www.princeton.edu/main/news/archive/S11/41/04S81/index.xml
+http://www.princeton.edu/main/news/archive/S11/53/24A92/index.xml?section=featured
+http://www.princeton.edu/odus/student_organizations/forms.html
+http://www.princeton.edu/patents/intelprop.htm
+http://www.princeton.edu/pr/catalog/ua/03/389.htm
+http://www.princeton.edu/pr/pub/ags/04/062.htm
+http://www.princeton.edu/pr/pwb/02/1118/3a.shtml
+http://www.princeton.edu/pr/pwb/03/0421/1b.shtml
+http://www.princeton.edu/pr/pwb/03/1208/
+http://www.princeton.edu/pr/pwb/03/1208/1b.shtml
+http://www.princeton.edu/pr/pwb/05/0418/
+http://www.princeton.edu/pr/pwb/05/0516/
+http://www.princeton.edu/~fsun/Theme-tour/Reunion--2004/
+http://www.princeton.edu/~gsg/2004/Assembly/08/bylawamendments
+http://www.princeton.edu/~oa/nature/naturobs.shtml
+http://www.princeton.edu/~paw/columns/p-nut_gallery/pnut120402.html
+http://www.princeton.edu/~rockyhp/trips.html
+http://www.princeton.edu/~stcweb/html/pope99essay.html
+http://www.princeton.edu/~vp/commencement/disable.html
+http://www.princetoninfo.com/200112/11205s03.html
+http://www.princetonol.com/events/daytrip.html
+http://www.princetonol.com/family/daytrips.html
+http://www.princetonol.com/groups/iad/Files/Rousseau.htm
+http://www.princetonol.com/groups/iad/lessons/elem/sue-baskets.htm
+http://www.princetonol.com/groups/iad/lessons/middle/color1.htm
+http://www.princetonreview.com/college/apply/eyeonapply/2005/jordan_profile.asp
+http://www.princetonreview.com/college/apply/eyeonapply/2005/welton_feb.asp
+http://www.princetonreview.com/college/apply/eyeonapply/ana_Sep.asp
+http://www.princetonreview.com/college/research/articles/find/artschools.asp
+http://www.princetonreview.com/college/research/articles/find/rankingsFAQ.asp
+http://www.princetonreview.com/college/research/articles/majors/activeapproach.asp
+http://www.princetonreview.com/college/research/articles/prepare/extracurriculars.asp
+http://www.princetonreview.com/cte/articles/cresearch/profileEinstein.asp
+http://www.princetonreview.com/law/apply/articles/admission/vanderbiltQA.asp
+http://www.princetonreview.com/law/apply/articles/application/essayBook2.asp
+http://www.princetonreview.com/law/research/articles/find/world.asp
+http://www.princetonreview.com/law/research/articles/success/excel.asp
+http://www.princetonreview.com/mba/apply/eyeonapply/jamila.asp
+http://www.principalpromotions.com/ireland/
+http://www.principledprofits.com/Positive_Power_of_Principled_Profit-pp-2-15-04.html
+http://www.printdealers.com/learn.cfm
+http://www.printingworld.com/newspast/04_01_29.shtml
+http://www.printingworld.com/technology/digital_printing/general/003.shtml
+http://www.printingworld.com/technology/finishing/digital/001.shtml
+http://www.printondemand.com/MT/archives/000611.html
+http://www.printsgeorge.com/Jane_Austen-Language.htm
+http://www.printsolutionsmag.com/issues/november03/promprod.html
+http://www.printsolutionsmag.com/issues/september04/profile2.html
+http://www.priondata.org/data/A_cotreats.html
+http://www.priondata.org/data/A_mkttreat.html
+http://www.priority1mortgage.com/loanoptions.htm
+http://www.priorityclub.com/
+http://www.priory.com/cmol/heartfail.htm
+http://www.priory.com/commun.htm
+http://www.priory.com/dbt.htm
+http://www.priory.com/fam/italgp.htm
+http://www.priory.com/med/cigsmoking.htm
+http://www.priory.com/psych/asthma.htm
+http://www.prism-magazine.org/oct01/accreditation.cfm
+http://www.prismix.com/news.cfm
+http://www.prismlegal.com/index.php?option=content&task=view&id=79
+http://www.prisonactivist.org/materials/wto_pic.html
+http://www.prisonactivist.org/pps+pows/MOVE/move-story.html
+http://www.prisonactivist.org/pps+pows/davidgilbert/sds-wuo.html
+http://www.prisonflicks.com/reviews.php?filmID=43
+http://www.prisonpotpourri.com/PRISON_FAITH/Justice%20%20Supreme%20Court%20to%20Decide%20Extent%20of%20Prisoners%92%20Access%20to%20Religion.html
+http://www.prisum.iastate.edu/solarenergy/
+http://www.pritzkerprize.com/99announce.htm
+http://www.privacy.gov.au/privacy_rights/npr.html
+http://www.privacy.gov.au/publications/IS8_01.html
+http://www.privacy.org/pi/activities/idcard/idcard_faq.html
+http://www.privacy.org/pi/issues/outsourcing/eds.html
+http://www.privacy.org/pi/reports/bug_off.html
+http://www.privacyalliance.org/resources/enforcement.shtml
+http://www.privacyright.com/info/hipaaprivacy.html
+http://www.privacyrights.org/ar/GmailLetter.htm
+http://www.privacyrights.org/ar/RFIDposition.htm
+http://www.privacyrights.org/ar/macrocommerce.htm
+http://www.privacyrights.org/ar/nagg-mill.htm
+http://www.privacyrights.org/fs/fs14b-stalking.htm
+http://www.privacyworld.com/cool/degree.html
+http://www.privateclubs.com/archives/2003-mar-apr/travel_deep_intheheart.htm
+http://www.privateequityweek.com/pew/freearticles/1093016044217.html
+http://www.privatelessons.net/wellness.asp
+http://www.privateline.com/TelephoneHistory4/History4.htm
+http://www.privateline.com/dailynotes/index40.html
+http://www.privatisation.gov.pk/finance/NITL/nit.htm
+http://www.privcom.gc.ca/fs-fi/02_05_d_26_e.asp
+http://www.privcom.gc.ca/media/nr-c/2003/submission_nid_030918_e.asp
+http://www.privcom.gc.ca/media/nr-c/opinion_021122_lf_e.asp
+http://www.privcom.gc.ca/speech/02_05_a_020207_e.asp
+http://www.privcom.gc.ca/speech/02_05_a_020213_e.asp
+http://www.privcom.gc.ca/speech/2004/vs/vs_sp-d_040331_e.asp
+http://www.prm.ox.ac.uk/educationweb/totem%20pole.html
+http://www.prm.ox.ac.uk/totem.html
+http://www.prmachine.com.au/
+http://www.prnewswire.co.uk/cgi/news/release?id=119191
+http://www.prnewswire.co.uk/cgi/news/release?id=138486
+http://www.prnewswire.com/cgi-bin/micro_stories.pl?ACCT=238613&TICK=NCOR&STORY=/www/story/11-13-2003/0002057499&EDATE=Nov+13,+2003
+http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=105&STORY=/www/story/03-08-2000/0001160417
+http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=BIO_ORG.story&STORY=/www/story/02-03-2005/0002946793&EDATE=THU+Feb+03+2005,+07:04+AM
+http://www.pro-forex.com/en/difference.php
+http://www.pro-g.co.uk/news/nid/985/
+http://www.pro-researcher.co.uk/encyclopaedia/english/first_class_cricket
+http://www.pro-war.com/prowardotcom/
+http://www.pro-weather.com/forums/lofiversion/index.php/t1974.html
+http://www.proaudiosystems.co.uk/acatalog/Index.html
+http://www.probablefuture.com/
+http://www.probe.org/docs/e-adultkids.html
+http://www.probe.org/docs/film-xn.html
+http://www.probigua.conexion.com/pressgr.htm
+http://www.processimpact.com/articles/mtraps.html
+http://www.prochelp.com/ProchelpNews.htm
+http://www.procon.com.au/Costing.htm
+http://www.procooling.com/reviews/html/chilli_pro_case_review.php
+http://www.procurement.virginia.edu/main/departments/BuyPayBasics.html
+http://www.prodeathpenalty.com/Pending/03/aug03.htm
+http://www.prodigals.org.uk/
+http://www.production-machining.com/articles/0901tb2.html
+http://www.productionbase.co.uk/fregister.php
+http://www.productionbase.co.uk/sampleinput.php
+http://www.productliabilitylawyer.com/tires.cfm
+http://www.productreview.com.au/showitem.php?item_id=1954
+http://www.productreview.com.au/showitem.php?item_id=2120
+http://www.productreview.com.au/showitem.php?item_id=2122
+http://www.productselector.co.uk/help/search_tips.htm
+http://www.professional-lurker.com/
+http://www.professionalcar.org/procar.html
+http://www.professionalimagedress.com/six_occasions_for_jacket.htm
+http://www.professionalroofing.net/article.aspx?A_ID=168
+http://www.professionalroofing.net/article.aspx?A_ID=422
+http://www.professionalroofing.net/article.aspx?A_ID=456
+http://www.professorbainbridge.com/
+http://www.professorbainbridge.com/2005/06/the_government_.html
+http://www.profile.co.za/UDT/DATA/0016/0082/News.html
+http://www.profilehomes.com/0299_barn-conversion-property-for-sale-in-wales_ForSale.htm
+http://www.profilesinhistory.com/inthemedia.html
+http://www.profit-loss.com/
+http://www.profitguide.com/buysell/article.jsp?content=20040614_140049_4660
+http://www.profitguide.com/buysell/article.jsp?content=20040614_140049_4660&page=1
+http://www.profitguide.com/greatplace/article.jsp?content=20041028_210332_6648
+http://www.profitguide.com/personaldev/article.jsp?content=20040922_150631_3780
+http://www.profitguide.com/startups/article.jsp?content=341
+http://www.profootballweekly.com/PFW/NFL+Zone/Team+Reports/default.htm
+http://www.profoundeffects.com/legal/
+http://www.proftpd.org/old_news.html
+http://www.profundis.co.uk/peteblog/default,date,2003-09-18.aspx
+http://www.profutures.com/article.php/264/
+http://www.progarchives.com/Progressive_rock_discography_CD.asp?cd_id=1256
+http://www.progenerations.com/articles/InterDavidBornstein.htm
+http://www.program-ace.com/advantages/acecrm.htm
+http://www.programmersheaven.com/2/Whats-New-in-C-Sharp2-Misc-New-Feature
+http://www.programmingforums.org/forum/showthread.php?t=1760
+http://www.programurl.com/a-threat-from-the-sea.htm
+http://www.programurl.com/software/blood-pressure-report.htm
+http://www.progress.org/2005/fpif60.htm
+http://www.progress.org/archive/imf15.htm
+http://www.progressforamerica.com/pfa/wrapper.jsp?PID=1101-331&CID=1101-011104D
+http://www.progressive.org.nz/modules.php?name=News&file=article&sid=744
+http://www.progressive.org/0901/zinn1101.html
+http://www.progressiveboink.com/archive/godgame.htm
+http://www.progressivedistributor.com/progressive/Online%20exclusives/Opportunities.htm
+http://www.progressivedistributor.com/progressive/archives/Sales%20mgmt/double%20team.htm
+http://www.progressiveengineer.com/PEWebBackissues2003/PEWeb%2034%20Jan%2003-2/34editor.htm
+http://www.progressivehumanism.com/outofcontrol.html
+http://www.progressivehumanism.com/proghum.html
+http://www.progressives.org.uk/magazine/default.asp?action=magazine&articleid=271
+http://www.progressivetrail.org/articles/031104Lutz.shtml
+http://www.progressivetrail.org/articles/040109Brown.shtml
+http://www.progressivetrail.org/articles/040317McCormack.shtml
+http://www.progressivetrail.org/articles/040528Hartung.shtml
+http://www.progressnow.org/weblog/
+http://www.progressor.net/review/jugalbandi_overall.html
+http://www.progressplus.org/paulqual.htm
+http://www.progreviews.com/reviews/display.php?rev=tmo-bof
+http://www.proi.net/
+http://www.project-entropia.com/StdContent.ajp?Id=1152
+http://www.project-syndicate.org/commentary/angell1/English
+http://www.project-syndicate.org/commentary/stiglitz50/English
+http://www.project-x.org.uk/pxcivvy.html
+http://www.project18.org/Project18/reportcard2003/economic_security.htm
+http://www.project2061.org/publications/2061Connections/2004-11b.htm
+http://www.project2061.org/tools/benchol/ch6/ch6.htm
+http://www.project2061.org/tools/textbook/mgsci/Primesci/PRIM_ls3.htm
+http://www.projectcensored.org/publications/2004/15.html
+http://www.projectconnections.com/
+http://www.projectghb.org/friendtohave.htm
+http://www.projectgo.org/
+http://www.projecthaven.com/
+http://www.projecthealthybeginnings.com/about.htm
+http://www.projectrestore.org/
+http://www.projectsinknowledge.com/Init/G/1665/
+http://www.projektlernen.de/rollenspiel_e/rp_staying_leaving.htm
+http://www.projinf.org/fs/GenoPheno.html
+http://www.projinf.org/fs/candidasys.html
+http://www.projinf.org/fs/dementia.html
+http://www.projinf.org/fs/vaccines.html
+http://www.projinf.org/pub/37/ois.html
+http://www.projo.com/business/content/projo_20050131_31sdamage.201d156.html
+http://www.projo.com/cgi-bin/include.pl/blogs/shenews/archives/weekninetyeight.htm
+http://www.projo.com/news/content/projo_20050604_union4.21d4afc.html
+http://www.projo.com/news/content/projo_20050621_pfarm21.2341ba2.html
+http://www.projo.com/news/content/projo_20050625_vote25.21f23ce.html
+http://www.projo.com/sharedcontent/east/patriotact/content/projo_20040710_patday7x.21fb25.html
+http://www.promisekeepers.org/meet10
+http://www.promoguy.net/
+http://www.promopeddler.com/Search.php?cat=Bells
+http://www.promopeddler.com/Search.php?cat=Christmas+Decorations
+http://www.promopeddler.com/Search.php?cat=Televisions
+http://www.promopeddler.com/Search.php?offset=2&go=20&cat=Christmas%20Decorations
+http://www.promopeddler.com/Search.php?offset=2&go=20&cat=Gift%20Wrap
+http://www.promopeddler.com/Search.php?offset=3&go=20&cat=Decorations
+http://www.promopeddler.com/Search.php?offset=3&go=20&cat=Greeting%20Cards
+http://www.promopeddler.com/Search.php?offset=4&go=20&cat=Greeting%20Cards
+http://www.promoteu.com/
+http://www.promotionandarts.com/resources/up165.aspx
+http://www.promusky.com/2004shelbyville.shtml
+http://www.propaganda.net/skoleside/2135.shtml
+http://www.propan.co.uk/ir/intro/
+http://www.proparanoid.com/priorknowledge.htm
+http://www.property-abroad.com/OP/PA/info-on-america-factfile11.htm
+http://www.property-marking.co.uk/personal-attack-alarm.htm
+http://www.property.bg/Apartments_in_Bulgaria-en/Add_to_wish_list642_Apartments_for_sale_in_Albena.html
+http://www.property.org.uk/eire/
+http://www.propertyinvesting.net/content/planning.htm
+http://www.propertyinvestmentcentre.com/
+http://www.propertyrightsresearch.org/has_wally_klump_failed_the_law.htm
+http://www.propertywindow.com/
+http://www.propertywindow.com/Templates/Lints/17PierstfieldCrescent.htm
+http://www.proposalsthatwin.com/articles.htm
+http://www.proposalworks.com/systematic.html
+http://www.prorec.com/prorec/articles.nsf/articles/D3E5F9F9B963E08A86256CA8000D68CC
+http://www.prorev.com/
+http://www.prosourcebmi.com/technotes_waltergraff2.cfm
+http://www.prospect.org.uk/doclib/profile/profile_2002/profile_issue_2_02?display=nothtml
+http://www.prospect.org/columns/reich/
+http://www.prospect.org/print/V12/17/kuttner-r.html
+http://www.prospect.org/web/page.ww?section=root&name=ViewPrint&articleId=7603
+http://www.prospect.org/web/page.ww?section=root&name=ViewWeb&articleId=8917
+http://www.prospect.org/web/printfriendly-view.ww?id=9829
+http://www.prospect.org/web/view-print.ww?id=4805
+http://www.prospect.org/web/view-print.ww?id=6831
+http://www.prospect.org/web/view-print.ww?id=8343
+http://www.prospect.org/web/view-print.ww?id=9028
+http://www.prospect.org/web/view-web.ww?id=1044
+http://www.prospect.org/web/view-web.ww?id=249
+http://www.prospect.org/web/view-web.ww?id=7725
+http://www.prospect.org/web/view-web.ww?id=8735
+http://www.prospect.org/web/view-web.ww?id=8997
+http://www.prospect.org/web/view-web.ww?id=9829
+http://www.prospect.org/webfeatures/2003/03/jones-m-03-05.html
+http://www.prospect.org/weblog/archives/2002/10/
+http://www.prospect.org/weblog/archives/2004/01/
+http://www.prospect.org/weblog/archives/2004/02/
+http://www.prospect.org/weblog/archives/2004/07/
+http://www.prospect.org/weblog/archives/2005/01/
+http://www.prospect.org/weblog/archives/2005/05/
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Explore_job_sectors/Food_and_drink/As_it_is/p!ebfeLek;$20$3F$F
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Explore_job_sectors/Food_and_drink/As_it_is/p!ebfeLek;$7DQ$EA$
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Explore_job_sectors/Food_and_drink/As_it_is/p!ebfeLek;$B5$EF$0
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Explore_job_sectors/Health/As_it_is/p!eigalk;$2D$3F$D
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Explore_job_sectors/Health/As_it_is/p!eigalk;$E4$20G$
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/Flexible_working/Hours/p!eigkcap;$05$3F$1
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/What_do_graduates_do__2004/Science_editorial/p!edXLaj;$0C$28$0
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/What_do_graduates_do__2004/Science_editorial/p!edXLaj;$1F$DD$3
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/What_do_graduates_do__2004/Science_editorial/p!edXLaj;$3D$B6$
+http://www.prospects.ac.uk/cms/ShowPage/Home_page/What_do_graduates_do__2004/Science_editorial/p!edXLaj;$E2$E10X
+http://www.prosperityuk.com/get_involved/bromsgrove/principles.php
+http://www.prosperityuk.com/prosperity/bromsgrove/principles.html
+http://www.prostatitis.org/doityourself.html
+http://www.proteacher.com/110022.shtml
+http://www.protectinganimals.org/issues.html
+http://www.protectionconnect.com/0704allseeing.html
+http://www.prothemovie.com/default.aspx?layout=interview
+http://www.protonradio.com/show.php?action=bio&showid=69&bioid=293
+http://www.proudtobecanadian.ca/threads/showflat.php?Cat=&Number=1255&Main=1211
+http://www.prout.org/ChapterTwo.html
+http://www.proutjournal.org/economy/economy.html
+http://www.provardis.co.uk/home/apps/seeing_through.p?SessionId=tmqrEWcriXdjUlhGyzsicTddcpwDyjcR
+http://www.proveallthings.org/articles/hidden_costs_of_doing_business_outside.htm
+http://www.provenasaintjoe.org/news.aspx?id=329
+http://www.provendis.info/home/PROvendis_eng.html
+http://www.providencephoenix.com/archive/features/03/02/27/STATION.html
+http://www.provincia.venezia.it/levi/ma/index/number1/stokes1/st1_3mas.htm
+http://www.provost.harvard.edu/it_fund/distlearn223.html
+http://www.provost.umich.edu/reports/media_rights/
+http://www.provwater.com/history.htm
+http://www.proweb.co.uk/~sdbf/C304_seeing_salvation.htm
+http://www.prowriststraps.com/bench_press_bands_training_how_to_use
+http://www.proyectovision.net/english/success/rios.html
+http://www.proz.com/arabic-to-spanish-translation-services/freelance-translator/59354
+http://www.proz.com/chinese-to-spanish-translation-services/freelance-translator/88171
+http://www.proz.com/pro/2503
+http://www.proz.com/topic/32489
+http://www.proz.com/translators/104020?bs=1
+http://www.proz.com/translators/10917?bs=1
+http://www.prozactruth.com/article_drug_giant_accused.htm
+http://www.prrac.org/full_text.php?text_id=310&item_id=3286&newsletter_id=33&header=Race+%2F+Racism
+http://www.prs-ltsn.leeds.ac.uk/employ/philosophy_graduates_and_jobs.html
+http://www.prsa.org/_Networking/environment/index.asp?ident=en1
+http://www.prsa.org/_Resources/profession/careeroverview.asp?ident=prof2
+http://www.prsgroup.com/commonhtml/faq.html
+http://www.prsgroup.com/commonhtml/methods.html
+http://www.prudentbear.com/archive_comm_article.asp?category=Guest+Commentary&content_idx=41608
+http://www.prudentbear.com/midweekanalysis.asp
+http://www.prudential.com/simpleArticle/0,1470,intPageID%253D1935%2526blnPrinterFriendly%253D0,00.html
+http://www.prwatch.org/
+http://www.prwatch.org/documents/clear_v9n1.html
+http://www.prwatch.org/forum/showthread.php?t=5578&goto=nextoldest
+http://www.prwatch.org/node/3667
+http://www.prwatch.org/prwissues/2000Q3/junkman.html
+http://www.prwatch.org/spin/March_2004.html
+http://www.prweek.com/news/news_story_free.cfm?ID=236020&site=3
+http://www.prweek.com/thisweek/index.cfm?ID=238572
+http://www.prx.org/for_stations.do?articleId=31
+http://www.prx.org/for_stations.do?articleId=41
+http://www.prx.org/piece/3468
+http://www.prx.org/piece_profile.do?id=1254&showAll=true
+http://www.prx.org/piece_profile.do?id=2110&showAll=true
+http://www.prx.org/piece_profile.do?id=3468&showAll=true
+http://www.ps.uni-sb.de/~duchier/pub/vbush/vbush5.shtml
+http://www.ps2now.com/cheats/t/thesuffering/thesuffering.html
+http://www.psa.org.nz/pay.asp
+http://www.psac.com/COMM/UPDATE/vol13-3/13-3-e.htm
+http://www.psac.com/bargaining/ccra/info_26-e.shtml
+http://www.psac.com/bargaining/ccra/info_29-e.shtml
+http://www.psal.org/
+http://www.psandman.com/articles/voluntr.htm
+http://www.psandman.com/col/sorry.htm
+http://www.psaudio.com/articles/listening_room_1.asp
+http://www.psbc.org/careers/index.asp
+http://www.psc-cfp.gc.ca/centres/c25/submission_e.htm
+http://www.psc-cfp.gc.ca/lhhr-lcrh/2000/00_01b_e.htm
+http://www.psc-cfp.gc.ca/ppc/learning_style_inventory_e.htm
+http://www.psc-cfp.gc.ca/recours/dec/federal-court/wilseman_e.htm
+http://www.psc-cfp.gc.ca/recours/reference/conflict_e.htm
+http://www.psc-cfp.gc.ca/research/timeline/psc_timeline_e.htm
+http://www.psc-cfp.gc.ca/speech/2004/mb_2004-11-02_e.htm
+http://www.psc-cfp.gc.ca/staf_dot/pol-guid/chap_04/index_e.htm
+http://www.psc.edu/general/software/packages/gcc/manual/gcc_toc.html
+http://www.pscac-cccfp.gc.ca/advisory_council/advisory_council_terms_ref_e.php
+http://www.pscode.com/
+http://www.pscufs.com/feb_20_03pr.htm
+http://www.psd267.wednet.edu/~kfranz/SchoolYear0102/socialstudies0102/GAPcaring02/sesartwork.html
+http://www.pseudotheos.com/view_object.php?object_id=599
+http://www.psg.com/~dlamkins/sl/contents.html
+http://www.pshares.org/issues/article.cfm?prmArticleID=615
+http://www.psi.org.uk/ehb/projectsblackburn.html
+http://www.psia-nw.org/articles/creating_turning_power_through_o.htm
+http://www.psichi.org/pubs/articles/article_123.asp
+http://www.psichi.org/pubs/articles/article_49.asp
+http://www.psigate.ac.uk/newsite/reference/plambeck/chem1/p01264.htm
+http://www.psigate.ac.uk/roads/cgi-bin/search_webcatalogue2.pl?limit=225&term1=proton
+http://www.psigate.ac.uk/roads/cgi-bin/search_webcatalogue2.pl?limit=25&term1=Fuel*%20+cells
+http://www.psigate.ac.uk/roads/cgi-bin/search_webcatalogue2.pl?limit=25&term1=fuel*%20+cells
+http://www.pslgroup.com/dg/244a8e.htm
+http://www.psncc.org/empathic_listening.html
+http://www.psnow.org/
+http://www.psoj.org/pressRelease_feb192003.html
+http://www.psoriasis.org/forum/archive/index.php/t-7925.html
+http://www.psorsite.com/bathing.html
+http://www.psppower.com/2001august/thumbnails.htm
+http://www.psr.edu/page.cfm?l=62&id=1655
+http://www.psr.keele.ac.uk/area/uk/man/con66.htm
+http://www.psr.keele.ac.uk/area/uk/pebs/lab01.htm
+http://www.psrd.hawaii.edu/Dec97/impactBlast.html
+http://www.psrf.org/issues/wedge.jsp
+http://www.psrmadison.org/psrmadtakeson.html
+http://www.psroutdoors.com/supportbf.htm
+http://www.pssg.gov.bc.ca/speeches/htm/28February2004.htm
+http://www.psteas.com/faq.php
+http://www.psu.edu/dept/altoonalrc/mar05.htm
+http://www.psu.edu/ouic/orientation100/T4/2fiftyways.html
+http://www.psu.edu/ur/about/50ways.html
+http://www.psu.edu/ur/archives/50ways/50ways.html
+http://www.psu.edu/ur/archives/intercom_2000/July17/trustees.html
+http://www.psubs.org/faq.html
+http://www.psy.cmu.edu/faculty/just/
+http://www.psych.lse.ac.uk/complexity/Events/Symposium_March04.htm
+http://www.psych.mcgill.ca/grad/clnprg.htm
+http://www.psych.org/advocacy_policy/leg_issues/privacy/hhs41802.cfm
+http://www.psych.ualberta.ca/~phurd/evals.html
+http://www.psych.ubc.ca/~brotto/gorzalka_pubs.htm
+http://www.psych.uiuc.edu/~wbrewer/solarmodel.html
+http://www.psych.upenn.edu/~fjgil/SriLankaUpdate.htm
+http://www.psych.utoronto.ca/~reingold/courses/ai/cache/searle.html
+http://www.psychedelic-library.org/books/ecstatic19.htm
+http://www.psychedelic-library.org/psychedl.htm
+http://www.psychguides.com/ecgs2.php
+http://www.psychiatrictimes.com/p010701c.html
+http://www.psychiatrictimes.com/p0210pt.html
+http://www.psychiatrictimes.com/p021101a.html
+http://www.psychiatrictimes.com/p040301b.html
+http://www.psychiatrictimes.com/p981107.html
+http://www.psychiatry.med.uwo.ca/survive/st2d.htm
+http://www.psychlaws.org/GeneralResources/advocates_visitleg.htm
+http://www.psychlinks.ca/phpbb/viewtopic.php?p=2676&
+http://www.psycho-ward.org/story/return/ch6.shtml
+http://www.psychoanalysis.net/IPPsa/Arlow/I-9
+http://www.psychohistory.com/htm/money.html
+http://www.psychologicalscience.org/observer/getArticle.cfm?id=1164
+http://www.psychologicalscience.org/teaching/tips/tips_0703.html
+http://www.psychology.nottingham.ac.uk/bns/abstracts_posters_april-2001.htm
+http://www.psychology.org.au/join/services_benefits/default.asp
+http://www.psychology.org.au/news/default.asp
+http://www.psychology.org/links/Popular/
+http://www.psychologyandmarkets.org/journals/abstracts/issue_2.html
+http://www.psychologymatters.org/endlife.html
+http://www.psychologymatters.org/polygraphs.html
+http://www.psychologymatters.org/selfdetermin.html
+http://www.psychologytoday.com/articles/PTO-20030902-000005.html
+http://www.psychosomaticmedicine.org/cgi/content/abstract/46/4/363
+http://www.psychosomaticmedicine.org/cgi/content/full/63/3/423
+http://www.psychotactics.com/speaker.htm
+http://www.psychotactics.com/tony.htm
+http://www.psychstat.smsu.edu/introbook/sbk04m.htm
+http://www.psyeta.org/sa/sa1.1/lawrence.html
+http://www.psywarrior.com/FM33-1.html
+http://www.psywarrior.com/HerbDStorm5.html
+http://www.psyweb.com/Mdisord/MdisordADV/AdvPsych.jsp
+http://www.psywww.com/books/interp/chap01d.htm
+http://www.psywww.com/resource/commerce.htm
+http://www.psywww.com/resource/findit.htm
+http://www.pta.org/archive_article_details_1118092469265.html
+http://www.ptc.com/company/ptcexpress/200012/cad_potential.htm
+http://www.pte.state.id.us/ast/journal-jessie.htm
+http://www.ptfilmfest.com/festival/
+http://www.pti.org/elib/publish/to_letter.asp
+http://www.ptil.no/English/Helse+miljo+og+sikkerhet/HMS-aktuelt/risikonivaa_paa_sokkelen_2002.htm
+http://www.ptiusa.com/packaging/food/cupandtrayfillingsealing/default.cfm
+http://www.ptotoday.com/0303fundraising.html
+http://www.ptponline.com/detail.cfm?page=303
+http://www.ptypes.com/externals.html
+http://www.pub-ed-inquiry.org/reports/final_reports/03/Ch5_27.html
+http://www.pub-ed-inquiry.org/reports/final_reports/04/Ch13_64.html
+http://www.pubclub.com/newyear/neworleans.htm
+http://www.pubclub.org/history.php
+http://www.puberty101.com/aacap_eating.shtml
+http://www.public-action.com/911/rescue/nfpa.html
+http://www.public-domain.org/?q=taxonomy/page/or/1&from=12
+http://www.public.asu.edu/~zzhao/html/Resume.htm
+http://www.public.iastate.edu/~horsebarn/Classes/classes.htm
+http://www.public.iastate.edu/~jdjohnso/hist284.html
+http://www.public.iastate.edu/~purchasing/whats_new.htm
+http://www.publicaddress.net/default,1736.sm
+http://www.publicaddress.net/default,gnza.sm
+http://www.publicaddress.net/print,1736.sm
+http://www.publicaffairs.noaa.gov/releases2003/mar03/noaa03r117.html
+http://www.publicagenda.org/issues/red_flags.cfm?issue_type=environment
+http://www.publications.doh.gov.uk/cmo/annualreport2001/healthinequalities.htm
+http://www.publications.doh.gov.uk/cmo/annualreport2003/gift.htm
+http://www.publications.doh.gov.uk/cmo/annualreport2003/progress.htm
+http://www.publications.doh.gov.uk/cmo/annualreport2003/regional.htm
+http://www.publications.doh.gov.uk/medicaltrainingintheuk/refugeehpcnetwork.htm
+http://www.publications.parliament.uk/pa/cm199495/cmhansrd/1995-01-13/Writtens-1.html
+http://www.publications.parliament.uk/pa/cm199798/cmstand/e/st980519/pm/pt2/80519s01.htm
+http://www.publications.parliament.uk/pa/cm199899/cmstand/b/st990112/90112s01.htm
+http://www.publications.parliament.uk/pa/cm199900/cmstand/d/st000302/am/00302s01.htm
+http://www.publications.parliament.uk/pa/cm199900/cmstand/h/st000629/pm/00629s01.htm
+http://www.publications.parliament.uk/pa/cm200001/cmagenda/ob001214.htm
+http://www.publications.parliament.uk/pa/cm200203/cmstand/other/st031110/31110s01.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040514/debtext/40514-02.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040608/debtext/40608-32.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040615/debtext/40615-32.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040622/debtext/40622-08.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040624/debtext/40624-29.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040629/debtext/40629-24.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040701/debtext/40701-25.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo040719/text/40719w08.htm
+http://www.publications.parliament.uk/pa/cm200304/cmhansrd/vo041018/text/41018w02.htm
+http://www.publications.parliament.uk/pa/cm200304/cmselect/cmodpm/972/972we27.htm
+http://www.publications.parliament.uk/pa/cm200304/cmselect/cmsctech/399/39907.htm
+http://www.publications.parliament.uk/pa/cm200304/cmselect/cmsctech/599/599we39.htm
+http://www.publications.parliament.uk/pa/cm200304/cmstand/a/st040120/pm/40120s03.htm
+http://www.publications.parliament.uk/pa/cm200304/cmstand/deleg1/st040315/40315s03.htm
+http://www.publications.parliament.uk/pa/cm200304/cmstand/deleg4/st040329/40329s01.htm
+http://www.publications.parliament.uk/pa/cm200304/cmstand/e/st040629/pm/40629s01.htm
+http://www.publications.parliament.uk/pa/cm200405/cmbills/005/en/05005x--.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041206/debtext/41206-08.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041206/text/41206w13.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041214/text/41214w21.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041216/debtext/41216-15.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041220/debtext/41220-24.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041220/debtext/41220-40.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm041221/text/41221w53.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050112/debtext/50112-03.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050112/debtext/50112-04.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050117/debtext/50117-04.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050117/text/50117w42.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050119/debtext/50119-09.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050131/debtext/50131-41.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050204/debtext/50204-01.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050208/debtext/50208-01.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050224/debtext/50224-01.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050310/debtext/50310-07.htm
+http://www.publications.parliament.uk/pa/cm200405/cmhansrd/cm050324/debtext/50324-17.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050511/debtext/50511-01.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050608/debtext/50608-14.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050608/debtext/50608-16.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050609/debtext/50609-03.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050613/debtext/50613-17.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050615/debtext/50615-30.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050616/debtext/50616-22.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050621/text/50621w24.htm
+http://www.publications.parliament.uk/pa/cm200506/cmhansrd/cm050622/text/50622w11.htm
+http://www.publications.parliament.uk/pa/jt200304/jtselect/jtrights/182/18215.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds04/text/41117w03.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds04/text/41207-30.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50126-30.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50222-06.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50302-31.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50309-22.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50310-16.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50316-13.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50321-13.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50323-06.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50607w03.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50608-17.htm
+http://www.publications.parliament.uk/pa/ld199900/ldhansrd/pdvn/lds05/text/50623-10.htm
+http://www.publications.parliament.uk/pa/ld200102/minutes/020619/ldminute.htm
+http://www.publicdebt.treas.gov/
+http://www.publicdebt.treas.gov/mar/marsbomindivseries.htm
+http://www.publicdebt.treas.gov/mar/marsbomintrogeneral.htm
+http://www.publiceye.org/frontpage/911/reactions.html
+http://www.publiceye.org/magazine/chrisre1.html
+http://www.publicguardian-scotland.gov.uk/html/news_pg2.htm
+http://www.publichistory.org/reviews/view_review.asp?DBID=34
+http://www.publicintegrity.org/bow/report.aspx?aid=155
+http://www.publicintegrity.org/oil/default.aspx
+http://www.publicintegrity.org/oil/report.aspx?aid=380
+http://www.publicintegrity.org/oil/report.aspx?aid=430
+http://www.publicintegrity.org/oil/report.aspx?aid=430&sid=100
+http://www.publicintegrity.org/report.aspx?aid=332&sid=100
+http://www.publicinterestpolling.com/highlts.htm
+http://www.publicnet.co.uk/publicnet/fe040305.htm
+http://www.publicradiofan.com/cgi-bin/station.pl?stationid=2834
+http://www.publicsafety.net/dalmatian.htm
+http://www.publicsafetyandsourgas.org/AdvisoryBios.htm
+http://www.publictechnology.net/modules.php?op=modload&name=News&file=article&sid=1817
+http://www.publicwhip.org.uk/division.php?date=1997-07-07&number=47
+http://www.publicwhip.org.uk/division.php?date=2000-03-20&number=117
+http://www.publishersmarketplace.com/members/TDCILiterary/
+http://www.publishersweekly.com/article/CA606584.html
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=137496&rendertype=abstract
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=27165
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=27165&rendertype=abstract
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=28532
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=533045
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=544878
+http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=86097
+http://www.pubs.asce.org/ceonline/ceonline04/1004feat.html
+http://www.pubs.com/postal.htm
+http://www.puc.state.tx.us/telecomm/row/rates.cfm
+http://www.pueblo.gsa.gov/cic_text/employ/lt-disability/insurance.htm
+http://www.pueblo.gsa.gov/cic_text/employ/tomorrowjobs/tomojobs.htm
+http://www.pueblo.gsa.gov/cic_text/family/drgfree/parents_guide1.html
+http://www.pueblo.gsa.gov/cic_text/health/count-cal/loseweight.html
+http://www.pueblo.gsa.gov/cic_text/health/count-cal/t_loseweight.html
+http://www.pueblo.gsa.gov/cic_text/housing/outdoorcheck/outdoorcheck.htm
+http://www.pueblo.gsa.gov/cic_text/misc/usmetric/metric-qa.htm
+http://www.pueblo.gsa.gov/cic_text/money/bankruptcy/bankruptcy.htm
+http://www.pueblo.gsa.gov/cic_text/money/credit-report/rscredit.htm
+http://www.pueblo.gsa.gov/cic_text/money/financial-planner/10questions.html
+http://www.pueblochamber.org/
+http://www.pufferbellytoys.com/pbt/Home/Page/Catalog/Mfr/1/sort/name/num_to_show/12/start/12
+http://www.pugetsystems.com/
+http://www.pugmarks.com/humour/general.htm
+http://www.pugwash.org/reports/ees/ees5.htm
+http://www.pugwash.org/reports/pac/53/rotblat.htm
+http://www.pugwash.org/reports/pac/pac256/presidential.htm
+http://www.pugwash.org/reports/pac/pac256/rotblat.htm
+http://www.puk.org/default.asp
+http://www.pulitzer.org/year/1995/spot-news-reporting/works/FEAR.html
+http://www.pulli.com/physics_today.html
+http://www.pulpanddagger.com/movies/i_b.html
+http://www.pulpanddagger.com/pulpmag/dark/pont_8.html
+http://www.pulpny.org/html/393_4.html
+http://www.pulse24.com/Plugins/Web_Poll/DisplayPollResults.asp?PollId=994
+http://www.pulsemed.org/internet-advertising-solution.htm
+http://www.pulsetc.com/article.php?sid=1583
+http://www.pulsus.com/Plastics/08_02/tayl_ed.htm
+http://www.pummeldex.de/songtexte.php?cid=602
+http://www.punjab.gov.pk/labour/minimum_wages_board/mwb/glass_industry.htm
+http://www.punkinternational.com/v2/
+http://www.punknews.org/article.php?sid=10044&mode=thread&order=0&thold=0
+http://www.punknews.org/reviews.php?op=albumreview&id=3417
+http://www.punkrocks.net/display_showreview.php?id=57
+http://www.punkrockshop.co.uk/how.htm
+http://www.punktastic.com/news.php?navID=1&archive=200402
+http://www.puppyclass.com/puppyphilosophy.htm
+http://www.puppydogweb.com/beware.htm
+http://www.pupress.princeton.edu/chapters/i7179.html
+http://www.pupress.princeton.edu/chapters/i7182.html
+http://www.pupress.princeton.edu/chapters/i7675.html
+http://www.pupress.princeton.edu/chapters/i7768.html
+http://www.pupress.princeton.edu/chapters/i7787.html
+http://www.pupress.princeton.edu/chapters/s6776.html
+http://www.pupress.princeton.edu/chapters/s6819.html
+http://www.pupress.princeton.edu/chapters/s7121.html
+http://www.pupress.princeton.edu/chapters/s7497.html
+http://www.pupress.princeton.edu/chapters/s7748.html
+http://www.pura-aventura.com/aracenainntoinn2.asp
+http://www.purchasing.com/article/CA139276.html
+http://www.purchasing.com/article/CA74610.html
+http://www.purdue.edu/DFA/privacy.htm
+http://www.purdue.edu/hr/BPM/HR_Index/paypract.htm
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlces.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlcler.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlinfo.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wllab.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlnew.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlprof.shtml
+http://www.purdue.edu/hr/Employment/Job_Vacancies/wlserv.shtml
+http://www.purdue.edu/odos/administration/gradeappeals.htm
+http://www.purdue.edu/oop/univregs/pages/state_equal/antiharassment.html
+http://www.purdue.edu/policies/pages/human_resources/iv_10_1.html
+http://www.purdue.edu/univregs/pages/state_equal/antiharassment.html
+http://www.purdueexponent.org/2001/10/16/city/rail.html
+http://www.purdueexponent.org/interface/bebop/showstory.php?date=2004/03/22&section=sports&storyid=index
+http://www.pure80spop.co.uk/yabbse/index.php?board=23;action=display;threadid=660
+http://www.pureambient.com/autoreverse.html
+http://www.pureawakening.net/pa/article/2002/9/1/11139.html
+http://www.pureawakening.net/pa/article/2002/9/1/11139p.html
+http://www.pureenergysystems.com/os/EdGrayMotor/PM_PEM_MG/patents/3890548/
+http://www.purefood.org/irradlink.html
+http://www.purejoylivingfoods.com/
+http://www.purenudism.net/happy-nudist-couple.html
+http://www.purereason.org/soul.html
+http://www.purifymind.com/JudsiamVege.htm
+http://www.purposedriven.com/en-US/AboutUs/
+http://www.purposedriven.com/en-US/AboutUs/New_Website_Article.htm
+http://www.purposedriven.com/en-US/AboutUs/WhatIsPD/PD_Articles/Ministry_Objectives.htm
+http://www.purposedriven.com/en-US/TsunamiReliefMission/Giving.htm
+http://www.purselipsquarejaw.org/2002_12_01_blogger_archives.php
+http://www.pushback.com/environment/SmogCheckTestimony.html
+http://www.pushhamburger.com/pagan.htm
+http://www.putnam-fl.com/brd/Board_htmls/ELA.htm
+http://www.putnamartscouncil.com/PACCulturalInfo.htm
+http://www.puttingzone.com/MyTips/bubblehead.html
+http://www.puttingzone.com/MyTips/practice.html
+http://www.puzzlersparadise.com/page1034.html
+http://www.puzzles.com/products/rushhour.htm
+http://www.pvihotelgroup.com/pviapps.html
+http://www.pvpa.org/printerfriendly.php?id=327
+http://www.pvrblog.com/pvr/2005/01/tivo_walked_awa.html
+http://www.pvrblog.com/pvr/2005/01/tivotogo_lanuch.html
+http://www.pvrblog.com/pvr/2005/01/why_hasnt_tivo_.html
+http://www.pvresources.com/
+http://www.pw.org/mag/teachersguide/indexloun.html
+http://www.pwc.com/Extweb/service.nsf/docid/2DAD30C1F5F5EFEF80256ED9002B2988
+http://www.pwcglobal.com/Extweb/industry.nsf/docid/24979F7B1DEB56BC85256E37005AE52A
+http://www.pwcglobal.com/Extweb/industry.nsf/docid/5D983CCC7EF373F280256DBB0033AB86
+http://www.pwcglobal.com/Extweb/manissue.nsf/docid/63FBA1C122BA8F53CA256F1E000E5B64
+http://www.pwcglobal.com/Extweb/ncpressrelease.nsf/docid/078629E55442192480256E62004FF325
+http://www.pwcglobal.com/extweb/aboutus.nsf/docid/E18C60C12984544C80256F2C004C83C4
+http://www.pwcglobal.com/extweb/ncinthenews.nsf/docid/de090b42386c0c60ca256f86000b1ca0
+http://www.pwcglobal.com/extweb/newcoatwork.nsf/docid/2E4EDE8195F81DD085256D7300501048
+http://www.pwcglobal.com/extweb/newcoatwork.nsf/docid/A68BAC559ADD948985256F7A0079893B
+http://www.pwcglobal.com/extweb/newcoatwork.nsf/docid/E4E9DBEC740090A185256EA6006BE9BC
+http://www.pwgsc.gc.ca/recgen/text/bcmsanrep00-e.html
+http://www.pwgsc.gc.ca/recgen/text/bcmsanrep01-e.html
+http://www.pwgsc.gc.ca/sponsorship/2004-08-09-01-e.html
+http://www.pwias.ubc.ca/
+http://www.pwl-empire.com/qa_artists.html
+http://www.pwmnet.com/news/categoryfront.php/id/72/Issue_18_(March).html
+http://www.pwmnet.com/news/categoryfront.php/id/74/ALTERNATIVE_INVESTMENTS.html
+http://www.pwshop.com/html/content8.html
+http://www.pwsi.org/content/home.asp
+http://www.pww.org/article/articleview/6251/1/244/
+http://www.pww.org/article/articleview/6845/1/141/
+http://www.pww.org/article/articleview/7159/1/272/
+http://www.pym.org/education/newsletter/
+http://www.pym.org/education/newsletter/2000-03.htm
+http://www.pym.org/haddonfield-qm/haddonfieldmm/haddonfield-nl-200101.htm
+http://www.pym.org/workcamp/China/pages/views.htm
+http://www.pyongyangsquare.com/nuclear/opinion.html
+http://www.pyramidschemealert.org/PSAMain/resources/tenlies3.html
+http://www.pyramidsociety.org/market2.htm
+http://www.python.org/dev/doc/devel/lib/module-asynchat.html
+http://www.python.org/peps/pep-0237.html
+http://www.pythonland.com/episode35.php
+http://www.pythonware.com/library/tkinter/introduction/x444-fonts.htm
+http://www.pyzdek.com/non-normal.htm
+http://www.q2travel.co.za/luxury-train-travel.asp
+http://www.qaa.ac.uk/aboutus/evidence/evidence2.asp
+http://www.qaa.ac.uk/academicinfrastructure/FHEQ/SCQF/2001/default.asp
+http://www.qaa.ac.uk/academicinfrastructure/benchmark/honours/areastudies.asp
+http://www.qaa.ac.uk/academicinfrastructure/programSpec/progspec.asp
+http://www.qaa.ac.uk/access/reports/SWWalesOCN02.asp
+http://www.qaa.ac.uk/crntwork/scottish_advisory.htm
+http://www.qaa.ac.uk/public/learningfrom/subjectreviewsection2.htm
+http://www.qaa.ac.uk/revreps/oseas/OUHungary/Monitor.htm
+http://www.qadas.com/qadas/nasa/nasa-hm/0542.html
+http://www.qajaqusa.org/cgi-bin/GreenlandTechniqueForum_config.pl/noframes/read/920
+http://www.qando.net/Default.aspx?tabid=38
+http://www.qando.net/default.aspx?tabid=38
+http://www.qantas.com.au/info/flying/travelClasses/internationalBusiness
+http://www.qbe.com/
+http://www.qbr.com/interviews.html
+http://www.qca.org.uk/10012.html
+http://www.qca.org.uk/13.html
+http://www.qca.org.uk/13192_6405.html
+http://www.qca.org.uk/251_6212.html
+http://www.qca.org.uk/7017.html
+http://www.qca.org.uk/7031_12914.html
+http://www.qca.org.uk/7606_7661.html
+http://www.qca.org.uk/7606_7666.html
+http://www.qca.org.uk/8798_7666.html
+http://www.qca.org.uk/9985.html
+http://www.qca.org.uk/history/innovating/key3/planning/model2/rationales_yr7.htm
+http://www.qca.org.uk/pess/695.htm
+http://www.qcad.org/qcad/manual_reference/modification.html
+http://www.qcbaseball.com/baseball_rules/infield_fly_rule1.aspx
+http://www.qcknightnews.com/news/2004/11/16/News/Election.2004.In.Reviewvoting.Issues.Abound-810274.shtml
+http://www.qedcorp.com/pcr/pcr/qcat.html
+http://www.qfit.com/
+http://www.qhorses.com/
+http://www.qhpress.org/texts/dymond/causes.html
+http://www.qigong.org.uk/grades.html
+http://www.qinetiq.com/home/newsroom/news_releases_homepage/2004/2nd_quarter/Love_is_in_the_air___QinetiQ_helps_ESA_probe_Venus.html
+http://www.qlrs.com/emedia.asp?id=313
+http://www.qlrs.com/issues/apr2002/ss/whiterose.html
+http://www.qlrs.com/story.asp?id=188
+http://www.qmdra.org.au/2004_reports/meetreportaugust1.htm
+http://www.qmfound.com/soldier_dead.htm
+http://www.qmmuseum.lee.army.mil/korea/they_wrote_the_book.htm
+http://www.qnorvic.com/quaker/qfp/content.html
+http://www.qp-sport.co.nz/links.htm
+http://www.qpac.com.au/at_qpac/location_and_access/
+http://www.qparks.asn.au/relocatablergn.html
+http://www.qrp.pops.net/probe1.htm
+http://www.qsa.qld.edu.au/yrs1to10/case-studies/westend.html
+http://www.qsl.net/w5www/breeding.html
+http://www.qsl.net/w5www/serious.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/Cancer/day.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/Tests/mercurytests.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/Tests/vitamitician.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/altbraid.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/emf.html
+http://www.quackwatch.org/01QuackeryRelatedTopics/hfsadvice.html
+http://www.quackwatch.org/03HealthPromotion/eqpt.html
+http://www.quackwatch.org/04ConsumerEducation/News/ephedra.html
+http://www.quackwatch.org/04ConsumerEducation/QA/osteo.html
+http://www.quad30campaign.org/quad30_happenings.html
+http://www.quadlock.com/dealers.php?state=AK
+http://www.quaker.org.uk/
+http://www.quaker.org.uk/bym/5yrplan.html
+http://www.quaker.org.uk/pubsetc/ovnight.html
+http://www.quaker.org/fptp/31lord.html
+http://www.quaker.org/pamphlets/PendleHill.html
+http://www.quaker.org/qcea/peacetax/analysiseng.htm
+http://www.quakerinfo.com/quakxms1.shtml
+http://www.quakerinfo.com/voc_min1.shtml
+http://www.quakernet.org.uk/
+http://www.qual.auckland.ac.nz/
+http://www.qualitychurchfurniture.com/chairs.htm
+http://www.qualitydigest.com/
+http://www.qualitydigest.com/dec98/html/perfimp.html
+http://www.qualitydigest.com/dec99/html/nonnormal.html
+http://www.qualitydigest.com/jan97/probes.html
+http://www.qualityforum.org/home.htm
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=426
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=431
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=441
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=6155
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=6158
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=6159
+http://www.qualitymeasures.ahrq.gov/summary/summary.aspx?ss=1&doc_id=6160
+http://www.qualityoflife.org/ich/childabuse/childa3.cfm
+http://www.qualityoflife.org/ich/hmr/hmr4.cfm
+http://www.qualityoilnc.com/history.html
+http://www.qualityprofiles.org/quality_profiles/case_studies/Chronic_Illness/1_10.asp
+http://www.quamnet.com/fcgi-bin/clip.fpl?par2=10&par3=1&date=20050114&file_id=20040930HKPR06559E
+http://www.quantico.usmc.mil/g1/lanman/02-February/24.htm
+http://www.quantros.com/provider/orm.htm
+http://www.quantummatter.com/see.html
+http://www.quantumphilosophy.net/Article1529.html
+http://www.quarterhorsenews.com/article_two/article_two.html
+http://www.quarterhorses.com/links/default.html
+http://www.quarterlifecrisis.com/forums/showthread.php?t=11639&page=3
+http://www.quarterman.org/who/williamphysician.html
+http://www.quartermoonranch.com/asset.html
+http://www.quartermoonranch.com/brayer.html
+http://www.quasimondo.com/archives/000227.php
+http://www.quatloos.com/brad-c/magna.htm
+http://www.quatloos.com/life_settlement-life_settlements.htm
+http://www.quatloos.com/taxscams/purecase/cid-warn.htm
+http://www.quebecoislibre.org/030816-12.htm
+http://www.quechuanetwork.org/news_template.cfm?news_id=2129&lang=s
+http://www.queencitynews.com/print.php?sid=3397
+http://www.queencitynews.com/print.php?sid=3433
+http://www.queencitynews.com/print.php?sid=3464
+http://www.queendom.com/chaiselongue/love/q_tonyschirtzinger27.html
+http://www.queendom.com/chaiselongue/relationships/r_bobrich4.html
+http://www.queenscourier.com/lead2.htm
+http://www.queenslandholidays.com.au/tropical_north_queensland/cape_york.cfm
+http://www.queensu.ca/msp/pages/Project_Publications/Films/Trevors.htm
+http://www.queensu.ca/pps/unionstreet/html/pubmeet2.html
+http://www.queensu.ca/samp/migrationnews/1998/apr.htm
+http://www.queensu.ca/theology/spages/Finance_Assist.shtml
+http://www.queeringdiabetes.org/substance/invalid.html
+http://www.quepublishing.com/articles/article.asp?p=102224&seqNum=2
+http://www.quepublishing.com/articles/article.asp?p=170517&seqNum=2
+http://www.quepublishing.com/articles/article.asp?p=383854
+http://www.quepublishing.com/title/0789733145
+http://www.queryster.com/odp.php?browse=/Regional/Europe/United_Kingdom/Recreation_and_Sports/Home_and_Garden/Gardening/
+http://www.quesant.com/Library/Technotes/T5.htm
+http://www.quest-online.com/NewFiles/National1.html
+http://www.quest.arc.nasa.gov/events/destination/2002/DEST7.html
+http://www.questcareer.com/resume_guide.htm
+http://www.questconnect.org/Oaxaca_Mexico.htm
+http://www.questconnect.org/africa_sa.htm
+http://www.questdiagnostics.com/kbase/topic/major/hw188548/trtover.htm
+http://www.questerre.com/stlawrencelowlands.htm
+http://www.questexperiences.com/quest2/PortsToAdventure/halloween/default.asp
+http://www.questia.com/aboutQuestia/privacyPolicy.html
+http://www.questmarketing.co.uk/sales-revenue.htm
+http://www.questonline.co.uk/content/view/full/4073
+http://www.questonline.co.uk/topics/sport_fitness_leisure/sports_fitness
+http://www.questoverseas.com/quest2000/main1.htm
+http://www.qui-gonline.org/fanfic/MarnieCominghome8.htm
+http://www.qui-gonline.org/fanfic/belindadiscovery5.htm
+http://www.qui-gonline.org/fanfic/moriahAOTC2.htm
+http://www.qui-gonline.org/fanfic/remembrance3.htm
+http://www.qui-gonline.org/fanfic/tammymemory.htm
+http://www.qui-gonline.org/faq.htm
+http://www.qui-gonline.org/ficrules.htm
+http://www.qui-gonline.org/polls.htm
+http://www.quia.com/shared/italian/
+http://www.quic.gov/consumer/conference/molnar.htm
+http://www.quic.gov/consumer/conference/summary/summ2.htm
+http://www.quickconsultant.com/classifieds.htm
+http://www.quicklogic.com/home.asp?PageID=469&sMenuID=333
+http://www.quickmba.com/mgmt/7hab/
+http://www.quickmba.com/strategy/porter.shtml
+http://www.quietamerican.org/commentary_leaving.html
+http://www.quiltart.com/yellowchallenge.htm
+http://www.quiltersfancy.com/classes.htm
+http://www.quilts-calicos.on.ca/winclasses.htm
+http://www.quiltuniversity.com/classlist.htm
+http://www.quintcareers.com/career_experts/Norine_Dagliano.html
+http://www.quintcareers.com/cover_letter_basics.html
+http://www.quintcareers.com/jobs_for_teens.html
+http://www.quintcareers.com/older_worker_strategies.html
+http://www.quintcareers.com/temping_strategies.html
+http://www.quintcareers.com/wild_card_interview_questions.html
+http://www.quirksmode.org/js/events_order.html
+http://www.quirksmode.org/js/events_tradmod.html
+http://www.quirksmode.org/js/introevents.html
+http://www.quit.org.uk/quitweight.htm
+http://www.quixote.org/hr/campaigns/hsw-2003/campaign-us.php
+http://www.quizilla.com/users/DistantMemories/quizzes/.:Meant%20to%20Be:.%206/
+http://www.quizilla.com/users/dracolove31/quizzes/Still%20On%20My%20Brain%20(A%20Harry%20Potter%20Songfic)/
+http://www.quizilla.com/users/jessude8907/quizzes/Harry%20and%20you-Part%2038-Back%20to%20Normal/
+http://www.quizilla.com/users/jessude8907/quizzes/The%20Girl%20Who%20Lived-Part%2012/
+http://www.quizzing.co.uk/trivia/viewtopic.php?t=315
+http://www.quodlibet.net/jmurdoch-preaching.shtml
+http://www.quodlibet.net/perkins-mind.shtml
+http://www.quodlibet.net/savage-tyrrell.shtml
+http://www.quorndon-mag.org.uk/archive/spring2003/rawlinsnews.html
+http://www.quoteadvantage.com/AMBest.aspx
+http://www.quotegarden.com/be-self.html
+http://www.quotegarden.com/war.html
+http://www.quotesandjokes.com/jokes/christmas.html
+http://www.quotewerks.com/whyqp.asp
+http://www.quovadx.com/customers/success_int.jsp
+http://www.quran.org.uk/ieb_quran_direct_confrontation1.htm
+http://www.qut.edu.au/admin/mopp/B/B_12_03.html
+http://www.qwantz.com/forum/viewforum.php?f=1
+http://www.qwantz.com/posterchild/
+http://www.r-3.com/diversity/chapter.htm
+http://www.r-calfusa.com/FTAA-TPA/current_state_of_the_u_s__live_cattle_industry.htm
+http://www.r-ds.com/opera/hoffmann/kaye_edition.htm
+http://www.r-type.org/static/pentode.htm
+http://www.r6.fws.gov/fisheries/frimaindex.htm
+http://www.r7designer.com/news/scripts/000099.php
+http://www.ra-gotessays.com/ge-topics/films_artists_alphabetized.html
+http://www.ra.ethz.ch/CDstore/www6/Technical/Paper014/speech-css.html
+http://www.rabbit.org/faq/sections/litter.html
+http://www.rabidtigers.com/rtn/newsletterv2n10.html
+http://www.rac.ca/regulatory/courses.htm
+http://www.rac.co.uk/carbuying/examinations/terms_and_conditions_pu
+http://www.rac.co.uk/travelservices/motorway/
+http://www.rac.co.uk/travelservices/northern_england/
+http://www.rac.co.uk/travelservices/southern_england/
+http://www.raceforthecure-denver.com/Help/FriendraiserHelp/JoiningFundraisingTeam.htm
+http://www.racematters.org/
+http://www.racematters.org/astoryofviolentfaith.htm
+http://www.racematters.org/freeatlast.htm
+http://www.racematters.org/goodinformation.htm
+http://www.racematters.org/kimkangja.htm
+http://www.racematters.org/manykindsofsmartencarta.htm
+http://www.racematters.org/stirringupoldterrors.htm
+http://www.racematters.org/thetroublewithselfesteem.htm
+http://www.racematters.org/vinnettecarroll.htm
+http://www.racereviewer.com/previews/long_walk_preview.cfm
+http://www.racesir.com/
+http://www.rachellucas.com/archives/2004/11/mail_please_god.html
+http://www.racing.ohio.gov/
+http://www.racingbetter.co.uk/races_2005/cheltenham/news/mark_bradburne.html
+http://www.racingunderground.com/rudufaq.html
+http://www.racingwest.com/racescene/insidegroove/
+http://www.rackenford-devon.co.uk/press.htm
+http://www.racoon.dircon.co.uk/spots/35.htm
+http://www.radaronline.com/fresh-intelligence/index.php
+http://www.radarpages.co.uk/mob/postwar/postwar1.htm
+http://www.radfordreviews.com/cgi-bin/view.cgi?rm=mode2&name=excerpt_two
+http://www.radfordreviews.com/excerpt_two.html
+http://www.radiancemagazine.com/kids_project/size_positive_books.htm
+http://www.radiation-pills.com/News___Links/Nuclear_War/Ch_15/ch_15.htm
+http://www.radicalmiddle.com/x_judis_brooks.htm
+http://www.radicalmiddle.com/x_past_n_future.htm
+http://www.radio4all.org/aia/act_street.html
+http://www.radioacademy.org/faq/index.shtml
+http://www.radiobs.net/mediaslander/archives/2005/05/100_ways_to_sla.php
+http://www.radiobs.net/mediaslander/archives/2005/06/the_boston_hera.php
+http://www.radiocom.net/History/index7.htm
+http://www.radiodirectory.com/usstoreproductsB000066HO4.html
+http://www.radioenthusiast.com/listen_to_the_war.htm
+http://www.radiofreesrini.com/
+http://www.radioguide.com/magazine/vol3no3/rr33/hotflash.htm
+http://www.radiologycorp.com/meet_our_people.html
+http://www.radiologyeducation.com/
+http://www.radiologyinfo.org/content/functional_mr.htm
+http://www.radiologyinfo.org/content/lower_gi.htm
+http://www.radiomissions.org/
+http://www.radioparadise.com/modules.php?name=Forums&file=viewtopic&p=690280
+http://www.radioparadise.com/modules.php?name=Forums&file=viewtopic&t=686
+http://www.radioparadise.com/modules.php?name=Forums&file=viewtopic&t=686&start=0
+http://www.radioproject.org/archive/1999/9906.html
+http://www.radiorewind.co.uk/Notice_board_2002.htm
+http://www.radiovillage.com/calendar.cfm
+http://www.radissonedwardian.com/specialoffers/offerdetail.jsp?offerId=406887
+http://www.radmeters4u.com/states/nv.htm
+http://www.radongas.org/Continuing_Ed_Courses_1.html
+http://www.radosh.net/archive/2004_10_01_radosh_archive.html
+http://www.radsafe.pitt.edu/Manual/Chapter4.htm
+http://www.radstats.org.uk/no056/frankenstein.htm
+http://www.radstats.org.uk/no074/article5.htm
+http://www.radstats.org.uk/no075/pahl.htm
+http://www.radzone.org/cgi-bin/weblab/lovestories/salon3.0/public.cgi?mode=All_Thread&salon=Relationship+Group+5&thread=3
+http://www.raelity.org/science/
+http://www.ragged-edge-mag.com/0599/b599ft3.htm
+http://www.raheny.com/where.htm
+http://www.raid-symposium.org/raid98/Prog_RAID98/Panels.html
+http://www.raids.org/gen00303.htm
+http://www.raids.org/raftery.htm
+http://www.rail.metaltype.co.uk/
+http://www.railcorp.info/about_railcorp/board_of_directors
+http://www.railpage.org.au/tram/usa.html
+http://www.railroadblues.com/schedule2k.php
+http://www.railwayage.com/jun00/cbtc.html
+http://www.railwaypeople.com/rail-jobs/search-results.html?company=10563
+http://www.rainbowcrystal.com/reiki/reiki1.html
+http://www.rainbowhorizons.com/teaching_units/index.php?CID=Novel_Studies
+http://www.rainbownation.com/uk/services/service.asp?tid=1&sid=27
+http://www.rainbowradio.org/supermanhood.htm
+http://www.rainforests.net/home.htm
+http://www.rainn.org/gcpost.html
+http://www.raintaxi.com/online/2001summer/federman.shtml
+http://www.rainwater.com/CONNECTchapters.html
+http://www.rainwaterharvesting.org/Rural/manapia.htm
+http://www.rainydaygames.ca/Webpage.asp?Page=OnSale&Name=Games%20On%20Sale
+http://www.raisinggreatkids.com/questions/q2.html
+http://www.raisingkids.co.uk/forum/display_topic_threads.asp?ForumID=8&ThreadPage=3&TopicID=4542
+http://www.rajasenterprises.com/lab.htm
+http://www.rajeevnet.com/hacks_hints/os_clone/os_cloning.html
+http://www.rajeun.net/testosterone.html
+http://www.rajivshah.com/camera/archives/2005/04/
+http://www.rajuabju.com/elat/on_marriage.htm
+http://www.rakemag.com/columns/detail.asp?catID=50&itemID=628
+http://www.rakemag.com/columns/detail.asp?catID=50&itemID=629
+http://www.rakmuseum.gov.ae/kush2.html
+http://www.raleigh-nc.org/
+http://www.raleighlittletheatre.org/
+http://www.raleys.com/cfapps/evntcntr/calendar.cfm
+http://www.raleys.com/cfapps/evntcntr/calendar.cfm?chain=ra
+http://www.ralphrobertmoore.com/lately080302.html
+http://www.ralst.com/ComeStay17-18.HTM
+http://www.ralst.com/Damage21-24.HTM
+http://www.ralst.com/Surface1-3.HTM
+http://www.ram.org/music/indie/mrr.html
+http://www.ram.org/ramblings/other/eu_trip_report.html
+http://www.ram.org/ramblings/philosophy/fmp/music_future.html
+http://www.ramapoorchid.org/
+http://www.ramblers.co.uk/groups/20s-30s.php
+http://www.ramblers.org.uk/forum/post.asp?method=ReplyQuote&REPLY_ID=20670&TOPIC_ID=2711&FORUM_ID=8
+http://www.ramblers.org.uk/info/contacts/govt.html
+http://www.ramblers.org.uk/info/everyone/disability.html
+http://www.ramblers.org.uk/info/factsandfigures/resources.html
+http://www.ramblers.org.uk/info/practical/maps.html
+http://www.ramblers.org.uk/info/practical/navigation.html
+http://www.ramblers.org.uk/info/practical/safety.html
+http://www.ramblersholidays.co.uk/Default.asp?pageID=72
+http://www.ramblersholidays.co.uk/Default.asp?pageid=72
+http://www.ramdac.org/fallacies.php?fallacy=Appeal%20to%20Emotion
+http://www.ramdasstapes.org/videos.htm
+http://www.ramdhanyk.com/movabletype/archives/thoughtprocess/000794.html
+http://www.rampantscotland.com/humour/blhumlong.htm
+http://www.rampantscotland.com/let020824.htm
+http://www.rampantscotland.com/let030426.htm
+http://www.rampantscotland.com/letter.htm
+http://www.rampantscotland.com/stay/bldev_stay_howard.htm
+http://www.ramsar.org/key_rules_cop.htm
+http://www.ramsar.org/ram/ram_rpt_19e.htm
+http://www.ran.org/home/victories.html
+http://www.ranadasgupta.com/notes.asp?note_id=21
+http://www.ranchskydive.com/dznews/2003/feb.htm
+http://www.ranchweb.com/lajitas/
+http://www.rand.org/commentary/062605SDUT.html
+http://www.rand.org/congress/environment/
+http://www.rand.org/hot_topics/nato.html
+http://www.rand.org/news/atlantic_summaries.html
+http://www.rand.org/news/press.04/06.16.html
+http://www.rand.org/paf/highlights/acqreform.html
+http://www.rand.org/publications/IP/IP187/IP187.html
+http://www.rand.org/publications/MR/MR773/MR773.chap2.html
+http://www.rand.org/publications/MR/MR855/mr855.ch3.html
+http://www.rand.org/publications/MR/MR855/mr855.ch4.html
+http://www.rand.org/publications/RB/RB32.html
+http://www.rand.org/publications/RB/RB5044/
+http://www.rand.org/publications/RB/RB7536/
+http://www.rand.org/publications/RB/RB7554/
+http://www.rand.org/publications/RB/RB9056/
+http://www.rand.org/publications/RP/RP493.html
+http://www.rand.org/randeurope/research/publications/review/1.3-daly.html
+http://www.randallwine.com/
+http://www.randi.org/jr/070904that.html
+http://www.randi.org/jr/08-31-01.html
+http://www.randi.org/jr/10-16-2000.html
+http://www.randi.org/jr/122404alien.html
+http://www.randolphvt.com/ossu/ruhs/ruhssp.shtml
+http://www.randomhouse.ca/catalog/display.pperl?0385658885&view=print
+http://www.randomhouse.ca/catalog/display.pperl?isbn=0385658885
+http://www.randomhouse.ca/catalog/display.pperl?isbn=0440241413&view=excerpt
+http://www.randomhouse.ca/catalog/display.pperl?isbn=0679311807
+http://www.randomhouse.com/BB/read/catalog/display.pperl?0345443284&view=rg
+http://www.randomhouse.com/BB/read/catalog/display.pperl?isbn=9780375760907&view=excerpt
+http://www.randomhouse.com/acmart/catalog/display.pperl?isbn=0679734775&view=tg
+http://www.randomhouse.com/audio/catalog/display.pperl?isbn=0739316842&view=excerpt
+http://www.randomhouse.com/bantamdell/catalog/display.pperl?isbn=0-385-33548-2&view=excerpt
+http://www.randomhouse.com/boldtype/0500/hemon/rtable.html
+http://www.randomhouse.com/broadway/blackink/catalog/display.pperl?isbn=0767914260
+http://www.randomhouse.com/catalog/display.pperl?1400076935
+http://www.randomhouse.com/catalog/display.pperl?isbn=0345425707&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=0345426533&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=0345443284&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=037572513X&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=0679751149&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=1400033837&view=rg
+http://www.randomhouse.com/catalog/display.pperl?isbn=9780739316849&view=excerpt
+http://www.randomhouse.com/catalog/display.pperl?isbn=9780739317761&view=excerpt
+http://www.randomhouse.com/catalog/display.pperl?isbn=9780739317778&view=excerpt
+http://www.randomhouse.com/catalog/display.pperl?isbn=9780739317785&view=excerpt
+http://www.randomhouse.com/crown/catalog/display.pperl?isbn=9781400082940&view=excerpt
+http://www.randomhouse.com/delrey/catalog/display.pperl?0345435400&view=printexcerpt
+http://www.randomhouse.com/delrey/catalog/display.pperl?isbn=9780345435408&view=excerpt
+http://www.randomhouse.com/doubleday/thefamily/ata_note.php
+http://www.randomhouse.com/features/steel/nami.html
+http://www.randomhouse.com/highschool/catalog/display.pperl?0-345-33182-6&view=tg
+http://www.randomhouse.com/knopf/catalog/display.pperl?isbn=9781400040865&view=excerpt
+http://www.randomhouse.com/rhpg/catalog/display.pperl?isbn=0345471253&view=excerpt
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0385323301&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440229049&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440411475&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440412706&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440413761&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440415802&view=tg
+http://www.randomhouse.com/teachers/catalog/display.pperl?isbn=0440416787&view=tg
+http://www.randomhouse.com/teens/catalog/display.pperl?isbn=0-440-41139-4
+http://www.randomhouse.com/teens/catalog/display.pperl?isbn=0440238412&view=tg
+http://www.randomhouse.com/teens/sisterhoodcentral/author_qa.html
+http://www.randomhouse.com/vintage/catalog/display.pperl?isbn=0679781382&view=excerpt
+http://www.randomhouse.com/vintage/catalog/display.pperl?isbn=1400032954&view=excerpt
+http://www.randomhouse.com/vintage/catalog/display.pperl?isbn=1400076935
+http://www.randomhouse.com/words/language/avoid_guide.html
+http://www.randomhouse.com/wotd/index.pperl?date=20000929
+http://www.randomjottings.net/archives/001262.html
+http://www.randsinrepose.com/archives/2004/07/10/what_to_do_when_youre_screwed.html
+http://www.randwick.nsw.gov.au/council_information/feesCharges.php
+http://www.randycrow.com/articles/012104.htm
+http://www.randynewman.com/tocdiscography/disc_good_old_boys/lyricsgoodoldboys
+http://www.ranelagh-sc.co.uk/rafulham.htm
+http://www.rangeguide.net/eta/link2.html
+http://www.rangers.co.uk/club/view/stadium/0,,5,00.html
+http://www.rangertell.com/tales10.htm
+http://www.rangzen.net/eng/dea/
+http://www.rangzen.org/peaceride04/html/Reports/reportshtml/strikersupport.html
+http://www.rankandrevue.net/modules.php?name=News&new_topic=10
+http://www.ranknfile-ue.org/cap_st11.html
+http://www.ranknfile-ue.org/newsupdates/news.php?topicid=128&pageID=uenews&pagetype=article
+http://www.ranknfile-ue.org/stwd_idx.html
+http://www.ranknfile-ue.org/stwd_newsletter.html
+http://www.ranknfile-ue.org/uen_0703_brazil.html
+http://www.ransac.org/Official%20Documents/U.S.%20Congress/105200481551AM.html
+http://www.ransac.org/Projects%20and%20Publications/News/Nuclear%20News/2002/06_10_02.html
+http://www.ransac.org/Publications/News/Nuclear%20News/2002/06_10_02.html
+http://www.ransac.org/about%20ransac/staff.asp
+http://www.ransomfellowship.org/R_Brains.html
+http://www.rantburg.com/default.asp?D=11/29/2004&C=International-UN-NGOs
+http://www.rantmorgan.com/
+http://www.rantmorgan.com/modules/news/
+http://www.rapereliefshelter.bc.ca/herstory/1981_movement_matters.html
+http://www.rapid-response-consulting.com/rst-cam.html
+http://www.rapidimmigration.com/usa/1_eng_coming_usa.html
+http://www.rapidintellect.com/AEQweb/rufen1.htm
+http://www.rapidnet.com/~jbeard/bdm/Cults/newage.htm
+http://www.rapidnet.com/~jbeard/bdm/Psychology/self-est/rapha.htm
+http://www.rapidnet.com/~jbeard/bdm/Psychology/xmas/xmas_car.htm
+http://www.rapidnet.com/~jbeard/bdm/exposes/macarthur/gccstmt.htm
+http://www.rapidvet.com/felineanemic.html
+http://www.rapnewsdirect.com/News/2005/01/18/50.Feb.XXL/
+http://www.raptureready.com/rap49.html
+http://www.raptureready.com/resource/morrison2/lost06.html
+http://www.raptureready.com/rr-date-setters.html
+http://www.raptureready.com/who/Robert_Van_Kampen.html
+http://www.rarebooks.nd.edu/digital/civil_war/letters/index.shtml
+http://www.rarebooks.nd.edu/digital/early_american/letters/index.shtml
+http://www.rarediseases.org/briefs/fdasa_floorstatement
+http://www.rarediseases.org/news/webvolunteering
+http://www.rareplanes.com/revw.htm
+http://www.rarey.com/sites/jsrarey/jsrbook.html
+http://www.ras.org.uk/html/meetings/RASSDAG.html
+http://www.ras.org.uk/index.php?option=com_content&task=view&id=748&Itemid=2
+http://www.rasch.org/erp3.htm
+http://www.rasta-man.co.uk/contributions.htm
+http://www.rastko.org.yu/rastko-lu/istorija/historie.htm
+http://www.ratbags.com/loon/2001/05may.htm
+http://www.ratbags.com/rsoles/history/2001/05may.htm
+http://www.ratcliffeblog.com/archives/000251.html
+http://www.rateapy.com/rates/
+http://www.ratestogo.com/City/EN/Hong_Kong
+http://www.ratical.org/co-globalize/SMICS.html
+http://www.ratical.org/co-globalize/altBSP.html
+http://www.ratical.org/insideERF.html
+http://www.ratical.org/many_worlds/LvdP/
+http://www.ratical.org/radiation/CNR/PBC/chp4F.html
+http://www.ratical.org/radiation/CNR/PP/chp7.html
+http://www.ratical.org/radiation/KillingOurOwn/KOOappA.html
+http://www.ratical.org/radiation/WorldUraniumHearing/PeterBossew.html
+http://www.ratical.org/ratville/JFK/MLKapr67.html
+http://www.ratical.org/renewables/
+http://www.rational.org.nz/public/BeliefsQuestionnaire/sup9.htm
+http://www.rationalmind.net/essay/12usa_politics
+http://www.rationalrevolution.net/articles/capitalism_economy.htm
+http://www.ratm.com/new2/freedom/04_00.html
+http://www.rattlesnake.com/notions/Choice-and-Constraint.html
+http://www.rattlesnake.com/notions/clarity-iraq.html
+http://www.rattlesnake.com/notions/earth-air-fire-water.html
+http://www.ratwarehouse.com/shop_view.php?cat=16
+http://www.ratz.co.uk/showingrats.html
+http://www.rauth.at/papers/masters.php
+http://www.raven1.net/
+http://www.ravensblog.net/
+http://www.ravenswing.com/~keys/challenges/blackwidow.html
+http://www.ravenwerks.com/leadership/kills.htm
+http://www.ravenwerks.com/practices/writing.htm
+http://www.raw-dogs.com/faq.html
+http://www.rawbandwidth.com/services/pbdslform.html
+http://www.rawbw.com/~hinshaw/cgi-bin/id?61
+http://www.rawfoodsupport.com/read.php?f=2&i=7216&t=7216
+http://www.rawganique.com/PantsCP1.htm
+http://www.rawsistaz.com/BOMshowcase.htm
+http://www.rawstory.com/archives/101704.php
+http://www.rawstory.com/exclusives/avery/outed_online_712.htm
+http://www.rawworld.org/html/raw_world_community_news_issue2.html
+http://www.raygirling.com/jean.htm
+http://www.raymondjames.com/inv_strat.htm
+http://www.rayrilingarmsbooks.com/cgi-bin/rrb455.cgi/3333.html
+http://www.raysahelian.com/sleep.html
+http://www.raytheon.com.au/Default.aspx?x=168
+http://www.raywhite.com/cgi-bin/rw/doc_manager.pl?t=view&aid=168&c=12
+http://www.razorprices.com/
+http://www.rba.co.uk/tfttr/xmas84.htm
+http://www.rbc.com/economics/
+http://www.rbcinsurance.com/unumprovident/
+http://www.rbcnews.com/press_rev/press_rev-141004_tv_shares.shtml
+http://www.rbcnews.com/press_rev/press_rev-180604_vedomosti.shtml
+http://www.rbcroyalbank.com/aol/
+http://www.rbcroyalbank.com/business/services/hold-policy.html
+http://www.rbcroyalbank.com/cards/rbcrewards/magazine/homeentertaining.html
+http://www.rbcroyalbank.com/kbi/me_ps2.html
+http://www.rbenjamin.com/pg226.cfm
+http://www.rbgsyd.nsw.gov.au/sydney_gardens_domain/visitor_information/walks_and_tours/heritage_walk
+http://www.rbgtrust.com/files/letters.htm
+http://www.rblanchard.com/corp/wk-rev/98q1/980103.html
+http://www.rbm.lawoffice.com/overview.htm
+http://www.rbnz.govt.nz/careers/currentvacancies/0164261.html
+http://www.rbnz.govt.nz/payment/0154525.html
+http://www.rbnz.govt.nz/speeches/0056822.html
+http://www.rbnz.govt.nz/speeches/0067862.html
+http://www.rbs.co.uk/CBFM/International_Services/Trade_Services/Trade_Guides_and_Forms/Trade_Application_Forms/Forms/form3_help.htm
+http://www.rbs.co.uk/Small_Business/Royal_Business_Magazine/Issue_28/Case_Studies/Practice_makes_perfect/default.htm
+http://www.rbs.co.uk/small_business/Royal_Business_Magazine/Issue_28/Case_Studies/Practice_makes_perfect/default.htm
+http://www.rbs.com/
+http://www.rbscs.co.uk/pressreleases2003.asp
+http://www.rc3.org/cgi-bin/archive.pl?year=2004&month=03&day=30
+http://www.rca.ac.uk/pages/study/funding_2066.html
+http://www.rca.org/news/journals/windfire/0105.html
+http://www.rcaguilar.com/lieder/index-weihnachten.htm
+http://www.rccaraction.com/rc/articles/tourers_4.asp
+http://www.rcep.org.uk/news/95-8.htm
+http://www.rcgp.org.uk/bru/index.asp
+http://www.rcgroups.com/forums/showthread.php?t=273581&page=2
+http://www.rcgroups.com/forums/showthread.php?t=70968
+http://www.rch.org.au/bloodtrans/about.cfm?doc_id=7374
+http://www.rch.org.au/engineering/staff/index.cfm?doc_id=1372
+http://www.rch.org.au/library/journals/jrjpen.htm
+http://www.rci.rutgers.edu/~cfs/305_html/MentalChron/MOlympics.html
+http://www.rci.rutgers.edu/~insects/comm.htm
+http://www.rci.rutgers.edu/~insects/sp23.htm
+http://www.rcm.ac.uk/content.asp?display=Courses/How_to_apply/How_to_apply&wp=-146
+http://www.rcmp-learning.org/docs/ecdd0087.htm
+http://www.rcmp-learning.org/iim/ecdi0071.htm
+http://www.rcn.org.uk/agendaforchange/countries/northernireland/
+http://www.rcn.org.uk/members/zones/index.php?a=6
+http://www.rcn.org.uk/news/display.php?ID=1074&area=Press
+http://www.rcollins.org/ddj/Sep96/Sep96.html
+http://www.rcontario.com/rconews.html
+http://www.rcowen.com/authllus.htm
+http://www.rcpamanual.edu.au/sections/singlearticle.asp?s=46
+http://www.rcplondon.ac.uk/college/committee/nccg/comm_nccg_minutes0310.htm
+http://www.rcpsglasg.ac.uk/hdrg/2001Oct9.htm
+http://www.rcpsych.ac.uk/college/faculty/dementia/index.aspx?eId=5
+http://www.rcpsych.ac.uk/cru/qnic.htm
+http://www.rcpsych.ac.uk/press/parliament/bournewoodresponse.htm
+http://www.rcpsych.ac.uk/press/preleases/pr/pr_628.htm
+http://www.rcrnews.com/searchResults.cms?companyId=825
+http://www.rcsb.org/pdb/newsletter/2001q4/mom.html
+http://www.rcslt.org/whatdo.shtml
+http://www.rctc.org/about/agendas.asp
+http://www.rcuniverse.com/magazine/article_display.cfm?article_id=67
+http://www.rda-causeway.blinkz.com/
+http://www.rdc.noaa.gov/~hrmo/SES-Perf-Elmts-FY04.htm
+http://www.rdoc.org.uk/exp13.html
+http://www.rdrop.com/~ffvc/News0803.html
+http://www.rdrop.com/~paul/main.html
+http://www.rdrop.com/~paul/main_december2002.html
+http://www.rdvp.org/~sketchpel/blog/2005/05/rdvp-seminar-peter-hart-ricoh.html
+http://www.re-creation.com.au/
+http://www.reach-the-edge.com/edgepoll.html
+http://www.reach.ie/archive.htm
+http://www.reach.ie/new.htm
+http://www.reach4morocco.com/page_b.asp?p=11107
+http://www.reachingcriticalwill.org/legal/npt/ngorep/nukepsych.html
+http://www.reachingoutfoundation.org/yourmoney.htm
+http://www.reachm.com/amstreet/
+http://www.reachm.com/amstreet/archives/2004/05/26/the-best-speech-of-his-presidency/
+http://www.reachm.com/amstreet/archives/2004/09/25/how-bushs-grandfather-helped-hitlers-rise-to-power/
+http://www.reachm.com/amstreet/archives/2004/12/27/republicans-done28099t-respond-to-the-call-of-duty-they-just-change-the-statistical-methodologies/
+http://www.reachm.com/amstreet/archives/2005/01/06/oh-jeeves-are-we-still-warring-with-those-atrocious-iraqis/
+http://www.reachm.com/amstreet/archives/2005/02/03/bush-tells-the-truth-twice/
+http://www.reachm.com/amstreet/archives/2005/03/03/cnn-present-inside-the-conservative-blogs
+http://www.reachm.com/amstreet/archives/2005/04/
+http://www.reachm.com/amstreet/archives/2005/04/30/ms-rice-visits-south-america/
+http://www.reachm.com/amstreet/archives/category/discrimination/black-interests/
+http://www.reachm.com/amstreet/archives/category/discrimination/glbt-interests/
+http://www.reachm.com/amstreet/archives/category/discrimination/latino-interests/
+http://www.reachm.com/amstreet/archives/category/discrimination/womens-interests/
+http://www.reachm.com/amstreet/archives/category/expression/
+http://www.reachm.com/amstreet/archives/category/the-campaign-2004/strategies/
+http://www.reachout.com.au/default.asp?ti=1291
+http://www.reachout.com.au/default.asp?ti=1652
+http://www.reachout.com.au/default.asp?ti=1652&lo=1
+http://www.reachout.com.au/default.asp?ti=76
+http://www.reachoutandread.org/about_job.html
+http://www.reachtheworld.org/fieldnotes/fn_carib2.shtml
+http://www.reactintl.org/nuz/nuz-2001-0516.htm
+http://www.reactivemetals.com/Data_Instructions/Chemical/d_me_msds.htm
+http://www.reactmag.com/features/50cent.php
+http://www.reactual.com/
+http://www.readbookonline.net/read/69/2776/
+http://www.readbookonline.net/read/69/2778/
+http://www.readbookonline.net/readOnLine/1487/
+http://www.readerprivacy.com/?mod%5Btype%5D=learn_more
+http://www.reading-college.ac.uk/courses/advice/welfare_and_financial_support.asp
+http://www.reading-guide.co.uk/cgi-bin/bnews.cgi?3069
+http://www.reading.org/publications/reading_today/samples/RTY-0412-hotnot.html
+http://www.readingarts.com/artsdevelopment/
+http://www.readinggroupguides.com/advice/running.asp
+http://www.readinggroupguides.com/guides/bonesetters_daughter-excerpt.asp
+http://www.readinggroupguides.com/guides/daughter_of_fortune.asp
+http://www.readinggroupguides.com/guides/hotel_du_lac.asp
+http://www.readinggroupguides.com/guides/leaving_a_trace.asp
+http://www.readinggroupguides.com/guides3/foxs_walk3.asp
+http://www.readinggroupguides.com/guides3/grapes_of_wrath1.asp
+http://www.readinggroupguides.com/guides3/orchard3.asp
+http://www.readinggroupguides.com/guides3/torn_skirt3.asp
+http://www.readinggroupguides.com/guides3/waiting_for_an_angel1.asp
+http://www.readingmatrix.com/articles/gupta_oboler/
+http://www.readingmatrix.com/articles/gupta_oboler/references.html
+http://www.readingrecovery.org/sections/reading/disabilities.asp
+http://www.readprint.com/author-89/Edith-Wharton
+http://www.readprint.com/chapter-10043/Jules-Verne
+http://www.readprint.com/chapter-10229/H-G--Wells
+http://www.readprint.com/chapter-7399/Lucy-Maud-Montgomery
+http://www.readprint.com/chapter-8547/George-Bernard-Shaw
+http://www.readprint.com/chapter-986/Francis-Hodgson-Burnett
+http://www.readprint.com/work-1180/Guy-de-Maupassant
+http://www.readprint.com/work-1444/Mark-Twain
+http://www.readprint.com/work-263/Anton-Chekhov
+http://www.readtofeed.org/
+http://www.readtofeed.org/for_teachers_leaders_and_parents/
+http://www.readwritethink.org/lessons/lesson_view.asp?id=136
+http://www.readwritethink.org/lessons/lesson_view.asp?id=302
+http://www.readwritethink.org/lessons/lesson_view.asp?id=56
+http://www.readwriteweb.com/archives/001862.php
+http://www.readwriteweb.com/archives/002637.php
+http://www.reaganfoundation.org/reagan/speeches/wall.asp
+http://www.realbeer.com/news/articles/news-000276.php
+http://www.realchangenews.org/current/manley_quest.html
+http://www.realchangenews.org/pastissuesupgrade/2003_01_09/features/all_quiet.html
+http://www.realcities.com/mld/krwashington/10703534.htm
+http://www.realcities.com/mld/krwashington/11574296.htm
+http://www.realcities.com/mld/krwashington/11949626.htm
+http://www.realcities.com/mld/krwashington/9927782.htm
+http://www.realcities.com/mld/krwashington/news/special_packages/iraq/intelligence/10704306.htm
+http://www.realcities.com/mld/krwashington/news/special_packages/riskyrx/10408938.htm
+http://www.realclearpolitics.com/commentary.html
+http://www.realclearpolitics.com/talk_show.html
+http://www.realclimate.org/index.php?p=86
+http://www.realclimate.org/index.php?p=87
+http://www.realestate.com.au/cgi-bin/rsearch?a=v&id=140&cat=res:Buying&t=res&ag=&cu=&print=1
+http://www.realestate.com.au/cgi-bin/rsearch?a=v&t=nc-def&id=140&cat=res:Buying&ag=&cu=
+http://www.realestate.com.au/cgi-bin/rsearch?a=v&t=nhm&id=140&cat=res:Buying&ag=&cu=
+http://www.realestate.com.au/cgi-bin/rsearch?a=v&t=res&id=140&cat=res:Buying&ag=&cu=
+http://www.realestate.com.au/cgi-bin/rsearch?a=v&t=rur&id=140&cat=res:Buying&ag=&cu=
+http://www.realestateexpo.us/miami2005/exhibits.html
+http://www.realestatejournal.com/buysell/mortgages/20050617-simon.html?rejpartner=mktw
+http://www.realestatejournal.com/buysell/salestrends/20040405-hagerty.html
+http://www.realestatejournal.com/homeimprove/homeimprove/20000503-fletcher.html
+http://www.realestateview.com.au/media_spotlights.html
+http://www.realestateyork.com/a_who-realtor-agent-broker.asp
+http://www.realestateyork.com/index.asp
+http://www.realestateyork.com/m_resources.asp
+http://www.realestateyork.com/r_ask-york-dallastown-shrewsbury-pennsylvania-real-estate.asp
+http://www.realestateyork.com/r_mortgage-calculator_adjustable.asp
+http://www.realgreen.com/bios.htm
+http://www.realgroovy.co.nz/books/isbn/0670915947
+http://www.realhope.com/free_tips.php
+http://www.reality.org.nz/articles/31/31-laurent.html
+http://www.realityblurred.com/realitytv/archives/survivor/2000_Aug_05_james_garner_id
+http://www.realityblurred.com/realitytv/archives/trading_spaces/2003_Aug_13_naked_paige_cover
+http://www.realityhq.com/news86.html
+http://www.realitytvmagazine.com/blog/2005/06/fire_me_please_.html
+http://www.realitytvworld.com/index/articles/newssection.php?x=%7C%7C4
+http://www.realitytvworld.com/index/articles/newssection.php?x=01%7C2001%7C4
+http://www.realitytvworld.com/index/articles/newssection.php?x=06%7C2001%7C4
+http://www.realitytvworld.com/index/articles/popnewscathome.php?x=2
+http://www.realitytvworld.com/index/articles/popnewscathome.php?x=3
+http://www.realitytvworld.com/index/articles/story.php?s=1001454
+http://www.realitytvworld.com/index/articles/story.php?s=1001541
+http://www.realitytvworld.com/index/articles/story.php?s=2576
+http://www.realitytvworld.com/index/articles/story.php?s=2866
+http://www.realitytvworld.com/index/articles/story.php?s=2943
+http://www.realitytvworld.com/index/articles/summary.php?i=362
+http://www.realitytvworld.com/index/modules.php?op=modload&name=News&file=index&catid=4
+http://www.realitytvworld.com/thecomplex/
+http://www.reallans.com/bj.shtml
+http://www.reallifecoach.com/stories.htm
+http://www.really-useful-books.com/
+http://www.reallylinux.com/docs/basicdialup.shtml
+http://www.reallysi.com/newsletter10_2.htm
+http://www.reallysi.com/newsletter15_2.htm
+http://www.reallysimplesyndication.com/
+http://www.realmacaw.com/pages/impobser.html
+http://www.realmilk.com/happening.html
+http://www.realmtech.net/article59.html
+http://www.realnormal.com/
+http://www.realpitbull.com/puppymills.html
+http://www.realpix.com/parkridge.html
+http://www.realrates.com/news/hours.htm
+http://www.realrunner.com/gear/article=rg01.php
+http://www.realsimple.com/realsimple/web/gift/solutions/ar2/0,22035,749901,00.html
+http://www.realsportsnetwork.com/Golf_Organizations_Associations_and_Leagues.html
+http://www.realsportsnetwork.com/Soccer_Competitions_Women's_World_Cup.html
+http://www.realsurf.com.au/index.php3
+http://www.realsurf.com/
+http://www.realtimes.com/headlines/relibrary_sellersadvice.htm
+http://www.realtimetraders.com/sp/sectorind.asp?vid=0&item=20
+http://www.realtor.com/
+http://www.realtor.com/Basics/AllAbout/Bookshelf/Manufactured.asp
+http://www.realtor.org/rmomag.NSF/pages/economyfeb05?OpenDocument
+http://www.realtor.org/rmomag.NSF/pages/featuredec03donotcall?OpenDocument
+http://www.realtraps.com/
+http://www.realtrees4kids.org/members/plantseed.htm
+http://www.realworldlinuxsecurity.com/
+http://www.reason.com/
+http://www.reason.com/0203/fe.mw.the.shtml
+http://www.reason.com/0205/fe.mg.hollywood.shtml
+http://www.reason.com/0303/cr.co.global.shtml
+http://www.reason.com/0306/cr.cf.look.shtml
+http://www.reason.com/0310/co.mw.liberty.shtml
+http://www.reason.com/0310/fe.vp.designing.shtml
+http://www.reason.com/0311/fe.jb.kroger.shtml
+http://www.reason.com/0311/fe.jb.show.shtml
+http://www.reason.com/0407/co.mw.only.shtml
+http://www.reason.com/0411/fe.dc.whos.shtml
+http://www.reason.com/0501/fe.ps.cut.shtml
+http://www.reason.com/0506/cr.vp.consumer.shtml
+http://www.reason.com/0506/fe.ls.how.shtml
+http://www.reason.com/cy/cy110403.shtml
+http://www.reason.com/hitandrun/2003/09/21-week/index.shtml
+http://www.reason.com/hitandrun/2003/12/21-week/index.shtml
+http://www.reason.com/hitandrun/2004/02/08-week/index.shtml
+http://www.reason.com/hitandrun/2004/10/yay_blood_for_o.shtml
+http://www.reason.com/hitandrun/2005/04/the_dworkin_whi_1.shtml
+http://www.reason.com/hitandrun/2005/06/lowcost_showdow.shtml
+http://www.reason.com/hitandrun/2005/06/whats_yours_is.shtml
+http://www.reason.com/hod/jh110804.shtml
+http://www.reason.com/links/links052003.shtml
+http://www.reason.com/links/links061605.shtml
+http://www.reason.com/rb/rb010704.shtml
+http://www.reason.org/35ann.html
+http://www.reasongonemad.com/columns/2005/0508film.asp
+http://www.reasons.org/resources/fff/2001issue07/index.shtml
+http://www.rebeccablood.net/archive/2002/06.html
+http://www.rebeccablood.net/archive/2004/03.html
+http://www.rebeccablood.net/archive/2004/05.html
+http://www.rebeccablood.net/archive/2005/03.html
+http://www.rebeccablood.net/archive/2005/06.html
+http://www.rebelhome.net/terms.html
+http://www.rebelscum.com/article.asp?i=7895
+http://www.rebelscum.com/article.asp?i=93042
+http://www.rebelscum.com/qa072699.asp
+http://www.rebif.com/rebif_guide/ra320.jsp
+http://www.rebuildingmadison.info/may04.htm
+http://www.recappub.com/games.html
+http://www.recessrecords.com/pages/press.html
+http://www.recipelink.com/gm/5/2211
+http://www.recipesforaction.com/a_time.html
+http://www.recipezaar.com/79179
+http://www.recipezaar.com/r/
+http://www.reclaimamerica.org/
+http://www.reclaimthemedia.org/pages.php?node=04/07/16/7439782
+http://www.reclaimthemedia.org/stories.php?story=03/02/11/9036810
+http://www.reclaimthemedia.org/stories.php?story=04/03/25/0299770
+http://www.reclaimthemedia.org/stories.php?story=05/05/07/5328986
+http://www.reclaimthemedia.org/stories.php?story=05/06/19/8233381
+http://www.recmusic.org/lieder/get_text.html?TextId=15085
+http://www.recmusic.org/lieder/get_text.html?TextId=20416
+http://www.recoilmag.com/news/unemployment_rate_zero_percent_0304.html
+http://www.reconnections.net/inner_war.htm
+http://www.reconstructinghistory.com/irish/leine.htm
+http://www.reconstruction.ws/052/vanleeuwen.shtml
+http://www.record-eagle.com/2004/nov/12trojan.htm
+http://www.record-eagle.com/2005/jan/30liz.htm
+http://www.recordemporium.com/id6.html
+http://www.recordonline.com/archive/2001/09/21/kmcol921.htm
+http://www.recordonline.com/archive/2003/06/21/acnewreg.htm
+http://www.recordonline.com/archive/2004/03/15/jgpensio.htm
+http://www.recordonline.com/archive/2004/07/09/buscemac.htm
+http://www.recordonline.com/archive/2004/09/30/lewis30.htm
+http://www.recordonline.com/archive/2005/01/12/12letter.htm
+http://www.records.nsw.gov.au/publications/migranteduc/page2.htm
+http://www.records.nsw.gov.au/publicsector/rk/storage/Guidelines/security.htm
+http://www.recordstore.co.uk/kidcarpet.jsp
+http://www.recover98.com/hardware.htm
+http://www.recovery-inc.com/resources/low2.html
+http://www.recoverybydiscovery.com/hydrogen.htm
+http://www.recoverycourse.com/compare.html
+http://www.recoveryeq.com/cushings_syndrome.htm
+http://www.recoveryeq.com/cushings_syndrome_pro.htm
+http://www.recoveryeq.com/laminitis_founder.htm
+http://www.recoveryeq.com/laminitis_founder_pro.htm
+http://www.recoveryfromcfs.org/chapter7.htm
+http://www.recruitersnetwork.com/articles/article.cfm?ID=1513
+http://www.recruitersnetwork.com/articles/printer.cfm?ID=1513
+http://www.recruitingnews.com/2005/2.1.htm
+http://www.recruitmarine.co.uk/vacancies.htm
+http://www.recsupply.com/TOC/1DeckEquipment.htm
+http://www.rect.muni.cz/statut/rulesPhD.htm
+http://www.recycle.mcmail.com/shop.htm
+http://www.recycleworks.org/greenbuilding/gbg_heating_and_cooling.html
+http://www.recyclingconsortium.org.uk/community/nappies_info.htm
+http://www.recyclingtoday.com/articles/article.asp?Id=3406&SubCatID=85&CatID=13
+http://www.recyclingtoday.com/articles/article.asp?Id=4334&SubCatID=29&CatID=7
+http://www.recyclingtoday.com/articles/article.asp?Id=4334&SubCatID=59&CatID=13
+http://www.red-bean.com/guile/guile/old/0772.html
+http://www.red-gate.com/code_profiling.htm
+http://www.red-gate.com/jobs.htm
+http://www.red4.co.uk/ebooks/shorthistory/localgovernment.htm
+http://www.red4.co.uk/ebooks/wildwales/chapt64.htm
+http://www.redandtanlines.com/passenger_rules.htm
+http://www.redbackrock.com/rock/video___dvd/story_krnspnhrsf_1400.html
+http://www.redbarons.com/
+http://www.redbull.com/article.action?documentIntID=1115653232798-221576344
+http://www.redcar-cleveland.gov.uk/YrCounc1.nsf/0/95EBFCF762EC2A7880256D11004C1709?OpenDocument
+http://www.redcolony.com/art.php?id=0501220
+http://www.redcritique.org/WinterSpring2005/leftpopulisms.htm
+http://www.redcross-cleveland.org/
+http://www.redcross.ca/main.asp?id=002857
+http://www.redcross.ca/main.asp?id=007398
+http://www.redcross.ca/print.asp?id=007398
+http://www.redcross.int/en/standcom/speech_cod01.asp
+http://www.redcross.lt/refugee_activities.html
+http://www.redcross.org/
+http://www.redcross.org/article/0,1072,0_485_2354,00.html
+http://www.redcross.org/donate/donate.html
+http://www.redcross.org/museum/history/claraBarton.asp
+http://www.redcross.org/preparedness/cdc_english/IsoQuar.asp
+http://www.redcross.org/preparedness/cdc_english/health_adults.asp
+http://www.redcross.org/preparedness/cdc_english/health_high.asp
+http://www.redcross.org/preparedness/cdc_english/health_middle.asp
+http://www.redcross.org/preparedness/cdc_english/health_seniors.asp
+http://www.redcross.org/services/biomed/0,1082,0_19_,00.html
+http://www.redcross.org/services/biomed/0,1082,0_557_,00.html
+http://www.redcross.org/services/disaster/0,1082,0_585_,00.html
+http://www.redcross.org/services/disaster/beprepared/seniors.html
+http://www.redcrossdallas.org/misc/mission_2.htm
+http://www.redcrossidaho.org/news_article.asp?NewsID=408
+http://www.redcrossillinois.org/
+http://www.redding.com/redd/features/
+http://www.reddottours.com/Information/advice.php
+http://www.reddragonfm.co.uk/article.asp?id=7571
+http://www.redelvises.com/press/press-rustys.htm
+http://www.redfaction.com/character_sketch.cfm?id=hendrix
+http://www.redfeather.org/
+http://www.redflag-linux.com/chanpin_old/ecp.php?id=10000006
+http://www.redgoldfish.co.uk/js_docs.asp?doc=22
+http://www.redgoldfish.co.uk/jsviewjob.asp?jid=105147&sectors=5&region=0&jtype=&keywords=practice&offset=
+http://www.redhat.com/magazine/001nov04/features/selinux/
+http://www.redhat.com/training/rhce/courses/
+http://www.redherring.com/Article.aspx?a=10988&hed=Risky+returns
+http://www.redherring.com/Article.aspx?a=10988&hed=Risky+returns&sector=Industries&subsector=VentureCapital
+http://www.redherring.com/Article.aspx?a=11181&hed=Got+spectrum%3F&sector=Industries&subsector=Communications
+http://www.redherring.com/Article.aspx?a=11181&sector=Capital&subsector=EconomyAndPolicy
+http://www.redherring.com/Article.aspx?a=11181&sector=Industries&subsector=Communications
+http://www.redhillconsulting.com.au/blogs/simon/archives/2004_02.html
+http://www.rediboom.com/englisch/material/kunstst.html
+http://www.rediff.com/business/ar00apr.htm
+http://www.rediff.com/election/1999/oct/12atala.htm
+http://www.rediff.com/election/2003/mar/01naga1.htm
+http://www.rediff.com/money/2003/jan/09pbd4.htm
+http://www.rediff.com/news/1999/jun/05us1.htm
+http://www.rediff.com/news/2001/apr/06nad.htm
+http://www.rediff.com/news/2003/jun/17arvind.htm
+http://www.rediff.com/news/2003/may/06praful.htm
+http://www.rediff.com/news/2003/sep/19ayo.htm
+http://www.rediff.com/news/2003/sep/26rajeev.htm
+http://www.rediff.com/news/2004/feb/28buzz.htm
+http://www.rediff.com/news/2004/jul/21rajeev.htm
+http://www.rediff.com/news/oct/30arun.htm
+http://www.rediff.com/search/2001/mar/26busi.htm
+http://www.rediff.com/search/soccer.htm
+http://www.rediff.com/search/soccer6.htm
+http://www.redlandbaptist.org/about_us/terms_of_use.php
+http://www.redletterdays.co.uk/common_files/terms.asp
+http://www.redlineoil.com/legal.asp
+http://www.redlionpa.org/redevelopment.htm
+http://www.redlist.org/info/organization.html
+http://www.redmondmag.com/columns/article.asp?EditorialsID=858
+http://www.redmonk.com/jgovernor/archives/2005_02.html
+http://www.redmonk.com/sogrady/archives/000465.html
+http://www.rednova.com/
+http://www.rednova.com/news/display/?id=96995
+http://www.redpepper.org.uk/Apr2004/x-Apr2004-Grzincic.html
+http://www.redpepper.org.uk/KYE/x-kye-Jun2005.htm
+http://www.redpepper.org.uk/global/x-jun05-hilary.htm
+http://www.redpepper.org.uk/intarch/x-bove-june2002.html
+http://www.redpepper.org.uk/intarch/xcities.html
+http://www.redpepper.org.uk/iraq/x-mar2005-sgrena.htm
+http://www.redpepper.org.uk/natarch/xfilter.html
+http://www.redracingparts.com/
+http://www.redrag.net/2004/02/17/self-fulfilling-prophecy/
+http://www.redrat.net/BUSH_WAR/liberation.htm
+http://www.redrooster3.com/past%20reports/dec2003.htm
+http://www.redrooster3.com/past%20reports/may2003.htm
+http://www.redrovermarketing.com/Membership_Marketing_Turning_Occasional_Buyers_Into_Loyal_Customers.shtml
+http://www.redruth.cornwall.sch.uk/departments/english/ks3/attainment/speaklisten.htm
+http://www.redseacollege.com/POLISH/tips1.htm
+http://www.redseaonyourtravels.co.uk/hyatt.html
+http://www.redsoxnation.net/forums/lofiversion/index.php/t15416.html
+http://www.redstone.army.mil/history/abmaspec/part2.html
+http://www.redsun.com/type/logotype/
+http://www.redtram.com/catalogue/world/science-and-technologies/
+http://www.redvsblue.com/
+http://www.redwoodcity.org/cds/redevelopment/downtown/history/
+http://www.reebokaerobicstep.co.uk/directory/Reebok-Step-System.html
+http://www.reebokmultigym.co.uk/directory/Reebok-Step-System.html
+http://www.reed-electronics.com/eb-mag/article/CA506856?industryid=2116
+http://www.reed-electronics.com/electronicnews/article/CA438406?spacedesc=news
+http://www.reed-electronics.com/semiconductor/article/CA372260
+http://www.reedfloren.com/articles/personal-finance/teaching-children-about-money.html
+http://www.reedsmith.com/library/publicationView.cfm?itemid=3763
+http://www.reedsmith.com/library/publicationView.cfm?itemid=82657&catid=13
+http://www.reef.crc.org.au/members/
+http://www.reefed.edu.au/teaching/primary/index2.html
+http://www.reelradio.com/aw3k/script.html
+http://www.reenactor.net/ww1/morsels/fisher/tunic-1.htm
+http://www.reengage.org/go/Article_127.html
+http://www.reengage.org/go/Article_335.html
+http://www.rees.emory.edu/certificates.html
+http://www.refac.com/html/20020820.html
+http://www.refcofx.com/glossary.html
+http://www.refdesk.com/
+http://www.refdesk.com/expert.html
+http://www.refdesk.com/health.html
+http://www.refdesk.com/pets.html
+http://www.reflexology-research.com/WEB10_1.html
+http://www.reflexology-research.com/reflexions2.htm
+http://www.reform.org/pr091000.htm
+http://www.reformation.org/borgia-ch5.html
+http://www.reformed.org/webfiles/antithesis/v2n4/ant_v2n4_storm.html
+http://www.reformedreader.org/rbb/broadus/wtbd.htm
+http://www.reformist.org/isign.shtml
+http://www.reformmonitor.org/
+http://www.refresher.com/!brandnaming.html
+http://www.refresher.com/!ddesavvy.html
+http://www.refresher.com/!dkdcontext.html
+http://www.refresher.com/!editpros10
+http://www.refresher.com/!hdwithin.html
+http://www.refugee.org.nz/rsaa/text/docs/1655-93.htm
+http://www.refuseandresist.org/ab/022802pendergraft.html
+http://www.refuseandresist.org/article-print.php?aid=1047
+http://www.refuseandresist.org/detentions/art.php?aid=1047
+http://www.refuseandresist.org/detentions/art.php?aid=1317
+http://www.refuseandresist.org/police_state/art.php?aid=1886
+http://www.refuseandresist.org/police_state/art.php?aid=912
+http://www.refuseandresist.org/war/art.php?aid=932
+http://www.refusersolidarity.net/default.asp?content_new=one_story_dv
+http://www.refusingtokill.net/whathaveidone.htm
+http://www.reg.ufl.edu/02-03-catalog/courses/p_r/courses_Public_Relations.htm
+http://www.reg.ufl.edu/03-04-catalog/courses/public-relations.html
+http://www.reg.ufl.edu/99-20catalog/courses/public-relations.html
+http://www.reg.ufl.edu/catalog-2000-01/courses/p_r/26C_001_Public_Relations.htm
+http://www.regaltitles.com/
+http://www.regannursery.com/getting_started/rose_glossary.htm
+http://www.regannursery.com/news/archive/2003/05_01_2003.htm
+http://www.regenerationreservation.org/an_apache_chief_find_truth.htm
+http://www.regenstrief.org/loinc/meetings/20031006/Announcement
+http://www.regents.nysed.gov/2004Meetings/November2004/1104brd4.htm
+http://www.regentstreetonline.com/strategies/public_realm_full.htm
+http://www.reginalibrary.ca/buildings.html
+http://www.reginalibrary.ca/film-list.html
+http://www.region.peel.on.ca/planning/rop-strategic-update/update2.htm
+http://www.region.waterloo.on.ca/web/region.nsf/0/C9C4CC13D2598C8085256EC50066BB77/$file/CR-CLK-04-004_1.pdf?openelement
+http://www.region.york.on.ca/Services/Regional+Planning/Long+Range+and+Strategic+Plan/ProvincialPlanningInitiatives.htm
+http://www.region12.nafsa.org/conference/hotel.html
+http://www.regional.org.au/au/abts/2001/t1/mclellan.htm
+http://www.regional.org.au/au/asa/1998/7/265cox.htm
+http://www.regional.org.au/au/asa/2001/plenery/1/hatfield.htm
+http://www.regional.org.au/au/countrytowns/strategies/potter.htm
+http://www.regional.org.au/au/roc/1991/roc1991083.htm
+http://www.regionvqnet.org/
+http://www.regis.edu/regis.asp?sctn=cam&p1=wp&p2=rc
+http://www.registan.net/index.php?s=kokand&submit=Search
+http://www.registerdata.com/phantominfo.html
+http://www.registerguard.com/news/2004/07/04/a1.healthcosts.0704.html
+http://www.registerguard.com/news/2004/12/23/a1.iraqsoldier.1223.html
+http://www.registrar.dal.ca/calendar/ug/BIOE.htm
+http://www.registrar.uiowa.edu/registrar/catalog/UniversityCourses/IowaBiosciencesAdvantage.html
+http://www.registration.yourhost.is/enhr2005iceland/
+http://www.regrettheerror.com/
+http://www.rehabnurse.org/education/04conference/thur.html
+http://www.rehabnurse.org/profresources/painmgmt.html
+http://www.rehaboutlet.com/1051_2_2.htm
+http://www.rehabpub.com/ltrehab/112001/3.asp
+http://www.rehabpub.com/ltrehab/452000/4.asp
+http://www.reic.co.uk/disclaimer1.htm
+http://www.reiclub.com/articles/planning-success
+http://www.reidepotshop.com/notes.html
+http://www.reiki-4-all.com/index.php?showtopic=1326&view=getlastpost
+http://www.reiki-evolution.co.uk/oainteg.htm
+http://www.reiki-reflex.co.uk/what_is_reflexology.htm
+http://www.reinforcedplastics.com/market_focus/marine_offshore/Mirabella.html
+http://www.reise.idealo.de/airlines/19102004/details/Air_Scotland_routes_1.html
+http://www.relationships.com.au/advice/fair_fighting.asp
+http://www.relationships.com.au/advice/two_persons.asp
+http://www.relaxintuit.com/main.asp
+http://www.relaypoint.net/~carlan/prealg.html
+http://www.releases.gov.nl.ca/releases/2003/exec/0131n01.htm
+http://www.relevantmagazine.com/article.php?sid=4238
+http://www.relevantmagazine.com/article.php?sid=4440
+http://www.relexsoftware.com/customers/cs/honeywell.asp
+http://www.reliability.com/articles/article01.htm
+http://www.reliability.com/articles/article18.htm
+http://www.reliability.com/articles/article25.htm
+http://www.reliability.com/articles/article45.htm
+http://www.reliability.com/articles/article63.htm
+http://www.reliabilitydirect.com/alignmentproducts/ACC-SAT.htm
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/ACOS-64CPVS?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/DDAD-692MKY?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/DDAD-6AKSK9?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/EVOD-6DJGED?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/HMYT-6DFT6B?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/KHII-67H8SW?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/KHII-6BF35W?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/KHII-6DB4HT?OpenDocument
+http://www.reliefweb.int/rw/RWB.NSF/db900SID/OCHA-64DC2A?OpenDocument
+http://www.reliefweb.int/rw/res.nsf/db900SID/OCHA-6DELV7?OpenDocument
+http://www.reliefweb.int/rw/rwb.nsf/0/74fde1a9267601c049256fd200049033?OpenDocument
+http://www.reliefweb.int/w/rwb.nsf/0/1bb0ff74035edb3f85256b87006f6ac5?OpenDocument
+http://www.reliefweb.int/w/rwb.nsf/0/9315accad57fa238c1256b100031a150?OpenDocument
+http://www.reliefweb.int/w/rwb.nsf/0/dc5c9f04a5df645c49256f57002094fc?OpenDocument
+http://www.religion-online.org/showarticle.asp?title=115
+http://www.religion-online.org/showarticle.asp?title=1870
+http://www.religion-online.org/showarticle.asp?title=2936
+http://www.religion-online.org/showarticle.asp?title=895
+http://www.religion-online.org/showarticle.asp?title=91
+http://www.religion-online.org/showarticle.asp?title=945
+http://www.religion-online.org/showarticle.asp?title=982
+http://www.religion-online.org/showchapter.asp?title=420&C=265
+http://www.religion-online.org/showchapter.asp?title=690&C=906
+http://www.religionandpolicy.org/show.php?p=1.1.879
+http://www.religionnews.com/ArticleofWeek60205.html
+http://www.religionnews.com/bkgd_mormon1.html
+http://www.religionnewsblog.com/8449-.html
+http://www.religioscope.com/info/doc/jihad/azzam_defence_3_chap1.htm
+http://www.religioscope.com/info/dossiers/textislamism/faraj_jansen.htm
+http://www.religiousconsultation.org/News_Tracker/genital_cutting_shows_signs_of_losing_favor.htm
+http://www.religioustolerance.org/amend_1.htm
+http://www.religioustolerance.org/attack.htm
+http://www.religioustolerance.org/chr_cell.htm
+http://www.religioustolerance.org/chr_syatp.htm
+http://www.religioustolerance.org/dixon_03.htm
+http://www.religioustolerance.org/ev_dialog.htm
+http://www.religioustolerance.org/evolutio.htm
+http://www.religioustolerance.org/gl_p.htm
+http://www.religioustolerance.org/harra_wk.htm
+http://www.religioustolerance.org/hom_mar8.htm
+http://www.religioustolerance.org/hom_marb26.htm
+http://www.religioustolerance.org/hom_marb45.htm
+http://www.religioustolerance.org/hom_marb5.htm
+http://www.religioustolerance.org/hom_news_01c.htm
+http://www.religioustolerance.org/hom_rom3.htm
+http://www.religioustolerance.org/hom_umc7.htm
+http://www.religioustolerance.org/igm_circ.htm
+http://www.religioustolerance.org/ine_none3.htm
+http://www.religioustolerance.org/jepd_gen.htm
+http://www.religioustolerance.org/mar_amend2.htm
+http://www.religioustolerance.org/prayer_4.htm
+http://www.religioustolerance.org/ps_pra7.htm
+http://www.religioustolerance.org/rel_rate.htm
+http://www.religioustolerance.org/sci_cchris.htm
+http://www.religioustolerance.org/sep_cs_can.htm
+http://www.remarkablemedicine.com/Medicine/depression.html
+http://www.remembering.org.uk/
+http://www.remington.com/magazine/current/2004_0504.asp
+http://www.remote.org/frederik/culture/antigua/nightlife.html
+http://www.renaissance-group.com/investphilosophy.htm
+http://www.renavigator.com/sample_chapter.html
+http://www.render-boy.com/questions.html
+http://www.renderlab.net/projects/wardrive/media.html
+http://www.renderx.net/lists/xep-support/0367.html
+http://www.reneereyes.com/Webdocs/make-4body2-exercise.htm
+http://www.renegadegardener.com/content/newu2001.htm
+http://www.renewableenergyaccess.com/rea/news/story?id=18953
+http://www.renewal.org.au/cgregory/writing/eden.shtml
+http://www.renewamerica.us/
+http://www.renewamerica.us/archives/speeches/02_05_02jerusalem.htm
+http://www.renewamerica.us/columns/creech/041018
+http://www.renewamerica.us/columns/duke/050126
+http://www.renewamerica.us/columns/huntwork/040224
+http://www.renewamerica.us/columns/shroder/041210
+http://www.renewnyc.com/FundingInitiatives/partialact_plans.asp
+http://www.renewnyc.com/plan_des_dev/wtc_site/new_design_plans/refined_plan/Sept2003Statement.asp
+http://www.renewscotland.org/scotland/buying.html
+http://www.renlearn.com/Enews/March03.htm
+http://www.renotype.com/faq.asp
+http://www.rensco.com/faq.asp
+http://www.rense.com/general24/hate.htm
+http://www.rense.com/general33/shadow.htm
+http://www.rentnet.com/apartments/fyp/reading_room/move/moving_out.jhtml
+http://www.rentokil-initial.com/press2.php
+http://www.repeater-builder.com/maxtrac/maxtrac-interfacing.html
+http://www.repeater-builder.com/rbtip/fair-use.html
+http://www.repentamerica.com/singalittlelouder.html
+http://www.reportage.uts.edu.au/stories/2004/social/ageism.htm
+http://www.reporter-archive.mcgill.ca/Rep/r3116/lin.html
+http://www.reportmaster.com/sample_narrative.htm
+http://www.reptilerooms.com/forumtopic-7550.html
+http://www.republic.k12.mo.us/board/handbooks/hb_ms.htm
+http://www.republic.org.au/ARM-2001/history/history_rac_pjkspeech.htm
+http://www.republic.org.au/ARM-2001/speeches&articles/spa_keating1.htm
+http://www.republicofliberia.com/opening.htm
+http://www.republicoft.com/index.php/archives/2005/06/10/camp-hetero/
+http://www.republicoft.com/index.php/archives/2005/06/11/more-on-zacks-story/
+http://www.republicoftea.com/pages/questionsanswers.asp
+http://www.rereviewed.com/thedeepnorth/index.php?p=54
+http://www.res-ltd.com/arkhill1/intro.htm
+http://www.res.org.uk/
+http://www.res.org.uk/society/mediabriefings/festival/BAbriefings/BAbriefig2001.asp
+http://www.res.org.uk/society/mediabriefings/pdfs/1996/July/benston.asp
+http://www.res.org.uk/society/mediabriefings/pdfs/1997/September/ruttan.asp
+http://www.res.org.uk/society/mediabriefings/pdfs/1999/July/smith2.asp
+http://www.res.org.uk/society/mediabriefings/pdfs/2002/January/milanovic.asp
+http://www.rescomp.berkeley.edu/~hossman/cs263/paper.html
+http://www.rescomp.upenn.edu/docs/choose1.cfm
+http://www.rescuehouse.com/content/firefighter-articles/009321.php
+http://www.resdal.org.ar/Archivo/alem-cap2.htm
+http://www.research.att.com/~bs/applications.html
+http://www.research.att.com/~hall/pubs.html
+http://www.research.ibm.com/infoecon/paps/html/cia98/node7.html
+http://www.research.ibm.com/journal/sj/404/suggest.html
+http://www.research.ibm.com/rules/home.html
+http://www.research.ibm.com/weather/Chicago/Chicago.html
+http://www.research.murdoch.edu.au/grants/salariesarc.asp
+http://www.research.psu.edu/arp/health.shtml
+http://www.research.uh.edu/otm/Desk%20Reference%20-%20Web/Legal%20Reference%20File/HTML%20Files/Statutes/USCA_T.5.htm
+http://www.research.usf.edu/continued1_9.htm
+http://www.research.utoronto.ca/edge/fall2004/psychology.html
+http://www.researchandmarkets.com/feats/download_pdf.asp?report_id=53541
+http://www.researchco-op.co.nz/article_26.html
+http://www.researchictafrica.net/modules.php?op=modload&name=News&file=index&catid=&topic=35&allstories=1
+http://www.researchoninnovation.org/tiip/archive/2004_4b.htm
+http://www.resellerratings.com/dt_popb3970.html
+http://www.resellerratings.com/seller1417-p14-s1-d1.html
+http://www.resellerratings.com/seller1871-p1-s1-d2.html
+http://www.resellerratings.com/seller1871.html
+http://www.resellerratings.com/seller2721-p1-s3-d1.html
+http://www.resellerratings.com/seller4950.htm
+http://www.resellerratings.com/seller_info.pl?seller_id=1508&comment=172515
+http://www.resellerratings.com/sellerpop1640-p1.html
+http://www.reservebank.co.za/internet/Publication.nsf/0/1113deaaea45ae7842256b72002c9fd6?OpenDocument&AutoFramed
+http://www.reservebank.co.za/internet/Publication.nsf/0/73eace5f1aa433d542256c840035d5a0?OpenDocument&AutoFramed
+http://www.reshape.com/products/pdoptimizer.html
+http://www.residualforces.com/index.php/2005/06/07/336/
+http://www.resist.com.au/comments/c684.asp
+http://www.resist.com.au/displayallcomments.asp?page=13
+http://www.resist.org.uk/reports/archive/dsei03/
+http://www.reslife.net/html/faq-parents.html
+http://www.reslife.net/html/faq-students.html
+http://www.resna.org/
+http://www.resna.org/Conference/2005Conference/Proposals/CallForPapers.php
+http://www.resort.com/~prime8/Orwell/patee.html
+http://www.resortdata.com/RDPWin/Interfaces/SDCCreditCard/SDC.htm
+http://www.resortsinitaly.com/strutture/432_eng.htm
+http://www.resource-advisors.com/prm_detailedfeatures.htm
+http://www.resource-alliance.org/page.php?sectionid=5&subsectionid=91&pageid=521
+http://www.resource-allocation.com/content/1/1/1
+http://www.resourcefulhomeschooler.com/files/WhyUnschooling.html
+http://www.resourcehelp.com/qserwrit.htm
+http://www.resourceroom.net/older/speechrec.asp
+http://www.resourceshelf.com/
+http://www.respondus.com/download/studymate.shtml
+http://www.respondus.com/products/comments.shtml
+http://www.responsiblethinking.com/Book_One_Third_Revision_Chapter_23.htm
+http://www.responsibletravel.com/TripSearch/South%20America/Country100068.htm
+http://www.responsiveclassroom.org/newsletter/15_1NL_1.asp
+http://www.restaurant-guide.com/4014/
+http://www.restaurant.org/business/magarticle.cfm?ArticleID=144
+http://www.restaurant.org/pressroom/pressrelease.cfm?ID=913
+http://www.restaurant.org/show/media/
+http://www.restaurant.org/show/media/index.cfm
+http://www.restaurant.org/show/news/story.cfm?ID=386
+http://www.restaurantreport.com/departments/biz_eight_design_tips.html
+http://www.restaurantreport.com/features/ft_design.html
+http://www.restaurantreport.com/features/ft_pologrill.html
+http://www.resteddoginn.ca/caesar.php
+http://www.restministries.org/ARTICLES/art-reachingforgodsyoke.htm
+http://www.restministries.org/ARTICLES/art_behindrudolph.htm
+http://www.restorationvoice.org/p-r.html
+http://www.resultsforbusiness.co.uk/personaldevt/interviewconfidence.shtml
+http://www.resumeedge.com/professionals/resumeadvice/6step.shtml
+http://www.resumelogic.com/
+http://www.resumesystems.com/faq/Default.htm
+http://www.resurgence.org/resurgence/issues/lord203.htm
+http://www.resurgence.org/resurgence/issues/lowenstein213.htm
+http://www.resurgence.org/resurgence/issues/simms218.htm
+http://www.resurrectionsong.com/
+http://www.retaildecisions.com.au/315_917.asp
+http://www.retailretreat.com/Article24067.html
+http://www.retailwire.com/Discussions/Sngl_Discussion.cfm/10530
+http://www.retailworker.com/node/15225
+http://www.retailworker.com/node/15225?from=0&comments_per_page=10
+http://www.rethinkingschools.org/archive/13_02/edit1302.shtml
+http://www.rethinkingschools.org/archive/13_02/gay.shtml
+http://www.rethinkingschools.org/archive/13_02/track.shtml
+http://www.rethinkingschools.org/archive/15_02/Act152.shtml
+http://www.rethinkingschools.org/archive/16_03/Cash163.shtml
+http://www.rethinkingschools.org/archive/16_04/Hope164.shtml
+http://www.rethinkingschools.org/archive/18_03/acti183.shtml
+http://www.rethinkingschools.org/archive/18_03/good183.shtml
+http://www.rethinkingschools.org/sex/elders.shtml
+http://www.rethinkingschools.org/special_reports/union/unside.shtml
+http://www.rethinkingschools.org/special_reports/voucher_report/vsosintl.shtml
+http://www.rethinkingschools.org/war/readings/awar174.shtml
+http://www.rethinkingschools.org/war/readings/elem173.shtml
+http://www.retirement-matters.co.uk/gparchive/alcohol.htm
+http://www.retirementwithapurpose.com/50plusfinebal.html
+http://www.retirementwithapurpose.com/aarptakecareyourself.html
+http://www.retirementwithapurpose.com/aarptakecareyourself.html?printable=yes
+http://www.retouchpro.com/forums/showthread.php?t=4830&page=1&pp=15
+http://www.retrovsmetro.org/dividedtimes/archive/
+http://www.retroweb.com/apollo_retrospective.html
+http://www.reuters.co.uk/newsArticle.jhtml?type=reutersEdgeNews&storyID=765959
+http://www.reutershealth.com/wellconnected/doc29.html
+http://www.reutershealth.com/wellconnected/doc53.html
+http://www.reuther.wayne.edu/collections/hefa_1542-seiu-sul.htm
+http://www.revbilly.com/
+http://www.reveal.org/library/history/paden.html
+http://www.revenue.state.co.us/TPS_Dir/wrap.asp?incl=Formnumber
+http://www.revenue.state.co.us/TPS_Dir/wrap.asp?incl=Taxalerts
+http://www.revenue.state.co.us/TPS_Dir/wrap.asp?incl=salestaxforms
+http://www.revenue.state.co.us/TPS_Dir/wrap.asp?incl=severanceforms
+http://www.revenue.state.co.us/TPS_Dir/wrapprnt.asp?title=Unknown&incl=salestaxforms
+http://www.revenue.state.co.us/TPS_Dir/wraptext.asp?title=Unknown&incl=Formnumber
+http://www.revenue.state.co.us/TPS_Dir/wraptext.asp?title=Unknown&incl=salestaxforms
+http://www.revenue.state.co.us/TPS_Dir/wraptext.asp?title=Unknown&incl=severanceforms
+http://www.revenuesa.sa.gov.au/taxes/ltax.html
+http://www.reversespeech.com/clinton2.htm
+http://www.reviewcentre.com/
+http://www.reviewcentre.com/consumer_reviews62.html
+http://www.reviewcentre.com/review113663.html
+http://www.reviewcentre.com/reviews57533.html
+http://www.reviewjournal.com/lenny/041802.html
+http://www.reviewjournal.com/lvrj_home/1998/Feb-10-Tue-1998/news/6928025.html
+http://www.reviewjournal.com/lvrj_home/1998/Jan-17-Sat-1998/news/6787104.html
+http://www.reviewjournal.com/lvrj_home/2003/Jan-24-Fri-2003/sports/20531374.html
+http://www.reviewjournal.com/lvrj_home/2004/Dec-14-Tue-2004/living/25407518.html
+http://www.reviewjournal.com/lvrj_home/2004/Jan-29-Thu-2004/news/23102688.html
+http://www.reviewjournal.com/lvrj_home/2004/Sep-20-Mon-2004/sports/24806967.html
+http://www.reviewjournal.com/lvrj_home/2005/Feb-01-Tue-2005/sports/25775345.html
+http://www.reviewjournal.com/lvrj_home/2005/Feb-04-Fri-2005/business/25799014.html
+http://www.reviewjournal.com/lvrj_home/2005/Jan-13-Thu-2005/news/25656941.html
+http://www.reviewjournal.com/lvrj_home/2005/Jan-15-Sat-2005/opinion/25653595.html
+http://www.reviewjournal.com/lvrj_home/2005/Jun-12-Sun-2005/news/
+http://www.reviewjournal.com/sports/gladiators/
+http://www.revision-notes.co.uk/revision/562.html
+http://www.revision-notes.co.uk/revision/627.html
+http://www.revisor.leg.state.mn.us/arule/8710/2000.html
+http://www.revisor.leg.state.mn.us/stats/466/03.html
+http://www.revisor.leg.state.mn.us/stats/609/531.html
+http://www.revival-library.org/catalogues/prayer/edwards-humble/01.htm
+http://www.revivalnow.com/PrayerProphecyItem.php3?art=608&c=254&id=31&style=
+http://www.reviveourhearts.com/radio/today/22428
+http://www.reviveourhearts.com/radio/today/22539
+http://www.reviveourhearts.com/radio/today/22939
+http://www.reviveourhearts.com/radio/today/22941
+http://www.reviveourhearts.com/radio/today/23122
+http://www.reviveourhearts.com/radio/today/23359
+http://www.reviveourhearts.com/radio/today/24599
+http://www.reviveourhearts.com/radio/today/25683
+http://www.revolt.co.uk/news149.html
+http://www.revolt.co.uk/news170.html
+http://www.revolt.co.uk/news93.html
+http://www.revolts.co.uk/
+http://www.revolutionary-history.co.uk/backiss/Vol1/No2/lifujen.html
+http://www.revolutionary-history.co.uk/otherdox/SMP/Smp1.html
+http://www.revolutionarydemocracy.org/rdv5n1/teaplant.htm
+http://www.revolutionconsulting.com/2003_08_31_archblog.htm
+http://www.revophth.com/archive/newsletter/ro_110104.htm
+http://www.rexanne.com/articles.html
+http://www.rexanne.com/baby-home.html
+http://www.rexanne.com/rwr-54.html
+http://www.rexswain.com/soundcity.html
+http://www.reyessyndrome.co.uk/after_reyes_syndrome.htm
+http://www.rfa.org/english/news/2004/12/15/china_dissidents/
+http://www.rfa.org/english/news/politics/2004/10/15/china_falun_gong/
+http://www.rfc-archive.org/getrfc.php?rfc=3245
+http://www.rfc-archive.org/getrfc.php?rfc=394
+http://www.rfc.org.uk/cgi-bin/lookup.cgi?rfc=rfc0394
+http://www.rfcentral.com/testimonials.shtml
+http://www.rfcgr.mrc.ac.uk/Registered/Help/oldstaden/manual-2.1-12.html
+http://www.rfcgr.mrc.ac.uk/Registered/Help/oldstaden/manual-2.1-6.html
+http://www.rfcomm.harris.com/contact/
+http://www.rferl.org/featuresarticle/2004/05/b64de879-1d30-4916-8e35-7fb660b0b1dd.html
+http://www.rferl.org/featuresarticle/2004/07/7c366300-84ee-4e22-af67-4dca14576b7e.html
+http://www.rferl.org/featuresarticle/2004/09/73fa4ee3-64eb-4a92-adc1-cc05fb56875f.html
+http://www.rferl.org/featuresarticle/2004/1/0D5F6EC1-AB32-45EF-8AE5-834E3213F275.html
+http://www.rferl.org/featuresarticle/2004/11/6d2296a6-454d-412c-81a7-fd8431abde1e.html
+http://www.rferl.org/featuresarticle/2004/11/faabcaa3-8a9f-465d-9390-3fbe712cec71.html
+http://www.rferl.org/featuresarticle/2004/11/fc8153d5-39b6-4c28-b132-fab499dd3d21.html
+http://www.rferl.org/featuresarticle/2004/12/ea8a7a74-4b47-4398-bb60-cfde1180a740.html
+http://www.rferl.org/featuresarticle/2005/01/7087c198-6d8c-4f37-81e6-00e1f9ba44c4.html
+http://www.rferl.org/featuresarticle/2005/01/cb2fd089-605c-416d-a7ab-a340c54acd2d.html
+http://www.rferl.org/featuresarticle/2005/02/3b577f06-f2dc-4933-a6b9-5d48d0f9440a.html
+http://www.rferl.org/featuresarticle/2005/02/bbbc9301-b0f0-4a9e-95ed-42c302e60248.html
+http://www.rferl.org/featuresarticle/2005/02/f2cbf488-3f57-41d3-bc67-549b6e2dc974.html
+http://www.rferl.org/featuresarticle/2005/03/5ecc8783-a76f-4a6b-bf29-e1b6a97f2121.html
+http://www.rferl.org/featuresarticle/2005/03/c0b2c3b9-73a1-477f-8da5-6b530f319164.html
+http://www.rferl.org/featuresarticle/2005/04/e7339a51-61a2-41f1-8ab7-4784cb30519e.html
+http://www.rferl.org/featuresarticle/2005/04/fe412f7c-bc5b-4b92-9dd8-5f736bb113f1.html
+http://www.rferl.org/featuresarticle/2005/05/2b1ff493-1bcc-4e11-82b1-d7a99fa48ff1.html
+http://www.rferl.org/featuresarticle/2005/05/605276b2-e154-4bff-a01f-562c884c4aee.html
+http://www.rferl.org/featuresarticle/2005/05/ad7f1448-b19a-47bf-b3fa-e7699ab652a8.html
+http://www.rferl.org/featuresarticle/2005/1/7087C198-6D8C-4F37-81E6-00E1F9BA44C4.html
+http://www.rferl.org/featuresarticle/2005/4/1A7E927A-4306-4650-9E35-27B0FCB5BF98.html
+http://www.rferl.org/featuresarticle/2005/6/79E224ED-4481-461B-AFB4-F327AABFC6BC.html
+http://www.rferl.org/featuresarticleprint/2004/05/b64de879-1d30-4916-8e35-7fb660b0b1dd.html
+http://www.rferl.org/featuresarticleprint/2005/01/7087c198-6d8c-4f37-81e6-00e1f9ba44c4.html
+http://www.rferl.org/featuresarticleprint/2005/03/5ecc8783-a76f-4a6b-bf29-e1b6a97f2121.html
+http://www.rferl.org/featuresarticleprint/2005/04/fe412f7c-bc5b-4b92-9dd8-5f736bb113f1.html
+http://www.rferl.org/newsline/6-swa.asp
+http://www.rferl.org/reports/iran-report/2005/03/9-010305.asp
+http://www.rfida.com/contact.htm
+http://www.rfidnews.org/library/2004/05/20/ask-the-experts-katherine-albrecht-director-caspian/?issue=aHR0cDovL3d3dy5yZmlkbmV3cy5vcmcvbGlicmFyeS8wMDI4NzQucGhwP2tleT0yNzE4
+http://www.rfimusique.com/siteen/article/article_7455.asp
+http://www.rfleming.net/Returning.htm
+http://www.rfp-hk.org/public_html/exam.html
+http://www.rfsafe.com/article19.html
+http://www.rfsuny.org/about/directions.htm
+http://www.rftf2000.org.uk/programme/prog_conf_day5.html
+http://www.rfthomas.clara.net/papers/hansen.html
+http://www.rfu.com/index.cfm/fuseaction/RFUHome.Premier_Detail/StoryID/8776
+http://www.rfu.com/index.cfm/fuseaction/for.showthread/threadid/5106.cfm
+http://www.rfu.com/microsites/rwc2007/intro.cfm
+http://www.rfu.org/buyingclub.htm
+http://www.rg16.asn-wien.ac.at/~python/how2think/chap04.htm
+http://www.rg9.co.uk/sections/pubs/fullpubs/victoria.html
+http://www.rgpfaq.com/holdem-skills.html
+http://www.rgs.org/templ.php?page=1socimis
+http://www.rgs.org/templ.php?page=4edsead2
+http://www.rgs.uci.edu/gradvoice/articles/contribute.htm
+http://www.rgs.uci.edu/ora/rp/hrpp/assessingrisks.htm
+http://www.rgs.uci.edu/ora/rp/hrpp/surrogateconsent.htm
+http://www.rgs.uky.edu/odyssey/fall99/caer.html
+http://www.rgs.uky.edu/odyssey/spring05/stemcell_sidebars.html
+http://www.rgsmithmusic.com/free_sheet_music.htm
+http://www.rh.edu/~stodder/BE/NewEcon.htm
+http://www.rha-ps.com/issues_alerts/Burien_crime-free_multi-family_housing_ordinance.aspx
+http://www.rha-ps.com/rha_landlord_tenant_act--Seattle.aspx
+http://www.rha.net/public/adviceandinfo/
+http://www.rhd.uit.no/art/michael02.html
+http://www.rhdcc.gc.ca/asp/gateway.asp?hr=en/ei/application/applying_for_benefits.shtml&hs=aed
+http://www.rhdcc.gc.ca/asp/gateway.asp?hr=en/lp/fmcs/07LMPP.shtml&hs=pzp
+http://www.rheingold.com/texts/artonlinehost.html
+http://www.rheintacho.com/about_us/history.htm
+http://www.rheuma21st.com/archives/report_hess_lupus_therapies.html
+http://www.rhiannon3.net/cs/article7.html
+http://www.rhino-management.co.uk/home.htm
+http://www.rhino.com/RZine/StoryKeeper.lasso?StoryID=34
+http://www.rhino.com/rzine/StoryKeeper.lasso?StoryID=269
+http://www.rhino.com/rzine/StoryKeeper.lasso?StoryID=274
+http://www.rhino.com/rzine/StoryKeeper.lasso?StoryID=313
+http://www.rhino.com/store/ProductDetail.lasso?Number=7715
+http://www.rhino3d.com/products.htm
+http://www.rhinocortaqua.com/c/control/differences.asp
+http://www.rho.org/html/cxca_keyissues.htm
+http://www.rho.org/html/refugee_keyissues.htm
+http://www.rhodeisland-aa.org/riareac/GSR.htm
+http://www.rhodesfamily.org.uk/yesterdays/1903/19dec03.htm
+http://www.rhodesianridgebacks.org/puppyadvice.htm
+http://www.rhodia.com/htm_en/sustainable_development_health_safety_and_environment_4.html
+http://www.rhr.israel.net/projects/issues.shtml
+http://www.rhs.org.uk/WhatsOn/gardens/wisley/archive/wisleypci03feb.asp
+http://www.rhs.org.uk/gardens/harlowcarr/harlowcarrreach.asp
+http://www.rhs.org.uk/gardens/wisley/archive/wisleypci03feb.asp
+http://www.rhs.org.uk/publications/pubs/garden0304/italian.asp
+http://www.rhs.org.uk/publications/pubs/garden1103/mycorrhiza.asp
+http://www.rhs.org.uk/publications/pubs_library_reference.asp
+http://www.rhs51.com/jukebox.htm
+http://www.rhsmith.umd.edu/fullmba/lifeclubs.html
+http://www.rhsmith.umd.edu/jointmba/lifeclubs.html
+http://www.rhsmith.umd.edu/portal/portal_help.html
+http://www.rhul.ac.uk/Management/Research/SCALE/rhul.html
+http://www.rhull.freeserve.co.uk/sweden.htm
+http://www.rhunt.f9.co.uk/Glass_Blowing/Getting_Started/Getting_Started_Page1.htm
+http://www.riaa.com/news/filings/napster_faq.asp
+http://www.riaa.com/news/newsletter/032304.asp
+http://www.rialian.com/rnboyd/gravitation-subquantumflux.htm
+http://www.riba.org/go/RIBA/News/Press_3101.html
+http://www.ric.edu/adamslibrary/resources/courseguides/history164.html
+http://www.ricancercouncil.org/health/fastfood.php
+http://www.rich.frb.org/pubs/relevance/
+http://www.rich.frb.org/research/regional/indicators/
+http://www.richard-seaman.com/USA/States/
+http://www.richard.attenborough.dial.pipex.com/oldpupils.htm
+http://www.richardbuxton.co.uk/reference/view.php?table=transcripts&id=58&flag=name
+http://www.richardcommission.gov.uk/content/printpage.asp?ID=/content/evidence/responses/countrysidea/index.asp
+http://www.richarderiksson.com/china/inner_mongolia.php
+http://www.richardgregory.org/papers/brainmodels/illusions-and-brain-models_p2.htm
+http://www.richardhenry.co.uk/faq.asp
+http://www.richardherring.com/warmingup/warmingup.php?id=136
+http://www.richardiii.net/richtoday_media.htm
+http://www.richardjeni.com/merchandise.htm
+http://www.richardkatrovas.com/poetics.html
+http://www.richardlloyd.com/lessons/studqa.htm
+http://www.richardneville.com.au/
+http://www.richardsbayminerals.co.za/market.htm
+http://www.richardsdad.btinternet.co.uk/overview.htm
+http://www.richardseah.com/news/balance.html
+http://www.richardsilverstein.com/tikun_olam/2005/01/malcolm_hoenlei.html
+http://www.richardsonfarm.com/r-maze.htm
+http://www.richardstudios.com/
+http://www.richardthompson-music.com/USFans.asp
+http://www.richardthompson-music.com/What%20R%20fans%20saying.asp
+http://www.richland2.k12.sc.us/rce/south.htm
+http://www.richleader.com/tech1.htm
+http://www.richmediatech.com/hardware/overview.asp
+http://www.richmond.com/forums/ShowPost.aspx?PostID=117
+http://www.richmond.edu/~ebolt/history398/USAdvisoryExperience(1954-1965).html
+http://www.richmondeye.com/symloss.htm
+http://www.richmondeye.com/sympain.htm
+http://www.richmondreview.co.uk/features/magnum.html
+http://www.richmondreview.co.uk/library/gardin04.html
+http://www.richterscale.org/InternetTutorial/DiveReport_97NovDec.html
+http://www.richthofen.com/scheer/scheer05.htm
+http://www.rickard.karoo.net/articles/people_newcastle.html
+http://www.rickastley.co.uk/lyrics/wyns.htm
+http://www.rickdenney.com/white_rock_relay.htm
+http://www.rickjohnson.com/
+http://www.rickmanistareview.com/twg.html
+http://www.rickmcginnis.com/articles/Glassindex.htm
+http://www.ricknelson.com/062698.html
+http://www.rickross.com/ethics.html
+http://www.rickross.com/faq.html
+http://www.rickross.com/reference/deprogramming/deprogramming21.html
+http://www.rickross.com/reference/general/general306.html
+http://www.rickross.com/reference/general/general699.html
+http://www.rickross.com/reference/heavensgate/gate1.html
+http://www.rickross.com/reference/jw/jw73.html
+http://www.rickross.com/reference/loc/loc33.html
+http://www.rickross.com/reference/nuwaubians/nuwaubians46.html
+http://www.rickross.com/reference/recovery/recovery4.html
+http://www.rickross.com/reference/unif/unif130.html
+http://www.rickross.com/reference/vistar/vistar1.html
+http://www.rickross.com/reference/yogaville/yogaville21.html
+http://www.ricksteves.com/graffiti/archives/rickontv.htm
+http://www.ricksteves.com/graffiti/graffiti113.html
+http://www.ricksteves.com/plan/destinations/austria/pc_shot.htm
+http://www.ricksteves.com/plan/destinations/france/paris1.htm
+http://www.ricksteves.com/tvr/amsrse206_scr.htm
+http://www.rickwalton.com/aboutric/rickkid.htm
+http://www.rickwalton.com/utahauth/bringing.htm
+http://www.ricoh-sustainability.com/faq/index.php
+http://www.rics.org.uk/Management/Businessmanagement/Professionalpractice/Dutyofcare/Liability/Who%20Designed%20That.html
+http://www.rics.org.uk/Management/Facilitiesmanagement/dec04instmess.html
+http://www.rics.org.uk/Property/Propertyappraisalandvaluation/Trade%20and%20Industry%20Select%20Committee%20%20Investigation%20into%20%20Pub%20Companies.html
+http://www.rics.org.uk/Property/Ruralandnaturalassets/Ruralandnaturalassetmanagement/Providing%20access%20to%20the%20countryside%20for%20people%20with%20disabilities.html
+http://www.rics.org/Management/Facilitiesmanagement/dec04instmess.html
+http://www.rics.org/Property/Ruralandnaturalassets/Ruralandnaturalassetmanagement/Providing+access+to+the+countryside+for+people+with+disabilities.htm
+http://www.riddler.com/
+http://www.ridgepointecountryclub.com/golf/golf_rules.htm
+http://www.ridgetownc.on.ca/education/diploma_vtdiff.cfm
+http://www.ridor.blogspot.com/
+http://www.rieti.go.jp/en/columns/a01_0104.html
+http://www.rieti.go.jp/en/events/bbl/03052801.html
+http://www.rieti.go.jp/en/papers/research-review/013.html
+http://www.rifeconference.com/videos.html
+http://www.rifeenergymedicine.com/Adven2.html
+http://www.rigatourism.com/Riga/portal/alias__en/lang__en/tabid__3746/DesktopDefault.aspx
+http://www.rigb.org/rimain/events/index.jsp
+http://www.rigby-research.co.uk/mmatters/?id=22
+http://www.right-thinking.com/
+http://www.right-to-education.org/content/age/austria.html
+http://www.right-to-education.org/content/age/bangladesh.html
+http://www.right-wing-pseudo-christians.com/church-teachings.htm
+http://www.right-writing.com/middle-grade.html
+http://www.rightclickwebs.com/seo/seo-analogy.php
+http://www.rightclub.co.uk/courses/portugal/vilamoura_pinhal.asp
+http://www.rightnation.us/forums/lofiversion/index.php/t67402.html
+http://www.rightrainbow.com/archives/cat_samesex_marriage.html
+http://www.rightsnet.org.uk/dc/dcboard.php?az=show_topics&forum=106&page=2
+http://www.rightstuf.com/
+http://www.righttoplay.com/bios/charles_nkazamyampi.asp
+http://www.righttovote.org/involved.asp?Subsection=endorse
+http://www.rightwingnews.com/archives/week_2004_05_23.PHP
+http://www.rightwingnews.com/archives/week_2004_06_06.PHP
+http://www.rightwingnews.com/archives/week_2004_07_11.PHP
+http://www.rightwingnews.com/archives/week_2005_04_24.PHP
+http://www.rightwingnews.com/special/greatestfigures.php
+http://www.rigzone.com/insight/insight.asp?i_id=156
+http://www.rigzone.com/news/article.asp?a_id=19243
+http://www.rii.com.au/
+http://www.riken.jp/engn/r-world/info/release/news/2003/jul/
+http://www.riksbank.com/templates/Page.aspx?id=12900
+http://www.riksbank.com/templates/Page.aspx?id=15507
+http://www.rileyguide.com/finance.html
+http://www.rileyguide.com/internat.html
+http://www.rileyguide.com/resdb.html
+http://www.rilin.state.ri.us/Statutes/TITLE5/5-37.3/5-37.3-4.HTM
+http://www.rimcountry.com/rosie.htm
+http://www.rims.org/Printable.cfm?section=RiskWire
+http://www.ring.com/yooper/yooper.htm
+http://www.ringing.info/shaggy.html
+http://www.ringoffire.biz/level1.htm
+http://www.ringsurf.com/info/Food/Coffee/Coffee_Preparations.html
+http://www.rintonpress.com/books/datkinson2.html
+http://www.ripe.net/ripe/wg/technical-security/minutes/r41-minutes.html
+http://www.ripoffreport.com/
+http://www.ripoffreport.com/reports/ripoff33753.htm
+http://www.ripoffreport.com/view.asp?id=30016
+http://www.ripoffreport.com/view.asp?id=46315
+http://www.rippleeffectpress.com/quotes.htm
+http://www.rirdc.gov.au/comp03/tto1.html
+http://www.rirdc.gov.au/pub/shortreps/improve.html
+http://www.riredcross.org/otherwaystohelp.htm
+http://www.risd.edu/grad_financial_aid.cfm
+http://www.rise-and-shine.com/interviews.php?mode=AUTHOR&interviewid=20
+http://www.riseup.net/~micah/nerf/archives/2004_09.html
+http://www.rishon-rishon.com/archives/2005_05.php
+http://www.risingslowly.com/
+http://www.risingstarbordercollies.com/akcstandard.htm
+http://www.risingwomen.com/arceden6.htm
+http://www.risklab.ch/Projects.html
+http://www.riskworld.com/Nreports/1996/risk_rpt/html/nr6aa017.htm
+http://www.riskworld.com/Nreports/1996/risk_rpt/html/nr6aa027.htm
+http://www.rismedia.com/index.php/article/articleview/8759/1/1
+http://www.rismedia.com/index.php/article/articleview/8759/1/1/
+http://www.rit.edu/~257www/tips/paper.htm
+http://www.rit.edu/~692awww/resources/manuals/dgae1p9.html
+http://www.rit.edu/~692awww/seac/Utah.html
+http://www.rit.edu/~932www/ugrad_bulletin/colleges/cos/
+http://www.rit.edu/~comets/pages/workshops/Careeredscimath.html
+http://www.rit.edu/~flwstv/presocratic.html
+http://www.rit.edu/~gdc9977/docs/CLARKE873-1.html
+http://www.rit.edu/~jhb4598/jblog/archives/2004_02.php3
+http://www.rit.edu/~ntiditc/projects-9842.shtml
+http://www.rit.edu/~seawww/readingcomp/rc04during.html
+http://www.rit.edu/~sofa/admissions/faq/
+http://www.rit.edu/~unitywww/news.html
+http://www.ritachu.com/amanda/weblog.php?id=C0_7_1
+http://www.ritalindeath.com/
+http://www.ritalindeath.com/Prozac.htm
+http://www.ritalindeath.com/blumenfeld15.htm
+http://www.ritalindeath.com/north_carolina.htm
+http://www.ritalindeath.com/north_dakota.htm
+http://www.riteitem.com/Minneapolis/Mpls.htm
+http://www.ritesite.com/11956.cfm
+http://www.rittenhouse.ca/hortmag/Horticulture&Gardens/Christmas_Garden_Fun/City_Gardening_December_2001.htm
+http://www.rittman.net/archives/2005_06.html
+http://www.ritualistic.com/forum_rules.php
+http://www.ritualistic.com/forums/rules.php?Cat=
+http://www.rivercitykitty.com/blogger.html
+http://www.riverdeep.net/current/2000/07/072600_sunspots.jhtml
+http://www.riverdeep.net/current/2002/03/030402t_insects.jhtml
+http://www.riverdeep.net/current/archive/environment.jhtml
+http://www.riverdeepmountainhigh.co.uk/holidays/Short.asp
+http://www.riverflow.com/macfadden/famefortunefolly.html
+http://www.riverfronttimes.com/issues/2005-05-25/calendar/summerguide6.html
+http://www.rivergods.com.au/sea.html
+http://www.riverhead.com/pr/guard.html
+http://www.riverhillsplantation.com/Lake-Wylie-Information~5324~291.htm
+http://www.rivernet.org/9611_e.txt
+http://www.riverone.com/content_corp_vision.asp?ContentId=209
+http://www.riversideboatclub.com/club.htm
+http://www.riversideiceandleisure.com/live%20life%20scheme.htm
+http://www.riversidenb.com/OnlineBank/Ibank_agree.asp
+http://www.riverswithoutborders.org/issues/issues_taku.htm
+http://www.riverthames.co.uk/eatandrink/pub/southbank.htm
+http://www.rivijera.hr/en/index.php?link=hotels_villas
+http://www.rivkin.com.au/Education-Workshops.asp
+http://www.rivkinradler.com/rivkinradler/Publications/newformat/200407conneely.shtml
+http://www.rix-web.com/analyzer/docs/othreps.html
+http://www.riyadi.com/
+http://www.riza.com/richard/christmas.shtml
+http://www.rjbank.com/InformationCenter/RJBK3005.htm
+http://www.rjcc.org.uk/
+http://www.rkba.org/
+http://www.rkssoftware.com/misc/generalfaqs.html
+http://www.rlapc.com/
+http://www.rlbuht.nhs.uk/content/pol.asp?web=63&sub=133
+http://www.rlc.com/technical_support_RLC_ARM.htm
+http://www.rlg.org/en/page.php?Page_ID=20571
+http://www.rlg.org/en/page.php?Page_ID=68
+http://www.rlgsc.com/
+http://www.rlnn.com/ArtJune05/MoreNeedsBeDoneWhiteclay.html
+http://www.rlnn.com/ArticlesJune04/StMaryCapCamp1.html
+http://www.rlrouse.com/blog/index.php?p=13
+http://www.rlshelp.org/rlscomp50.htm
+http://www.rmc-recruitment.com/jobs_storeops.html
+http://www.rmc.ca/academic/gradrech/dorn15_e.html
+http://www.rmca.org/Articles/orphans.htm
+http://www.rmhiherbal.org/a/e.chooshrbs.html
+http://www.rmi.org/sitepages/pid622.php
+http://www.rmit.edu.au/browse/About%20RMIT%2FHelp%2FMedia%20Assets%2FComposite%2Fby%20group%2FApplied%20Media/
+http://www.rmit.edu.au/browse/Our%20Organisation%2FFaculties%2FArt,%20Design%20&%20Communication%2FAbout%2F;ID=oooqtngbpg5dz;STATUS=A
+http://www.rmit.edu.au/labourandindustry
+http://www.rmlibrary.com/sites/ergonchair.php?mcat=Ergonomics&scat=Chairs/Sitting
+http://www.rmoj.com/
+http://www.rna.ca/digital_art/index.shtml
+http://www.rnao.org/about/rn_journal_advertising.asp
+http://www.rnews.com/Story_2004.cfm?ID=23958&rnews_story_type=18&category=10
+http://www.rnews.com/Story_2004.cfm?ID=24034&rnews_story_type=18&category=10
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_contrast.hcsp
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003635.hcsp
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003653.hcsp
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003699.hcsp
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003699.hcsp?printPage=1
+http://www.rnib.org.uk/xpedio/groups/public/documents/PublicWebsite/public_rnib003711.hcsp
+http://www.rnib.org.uk/xpedio/groups/public/documents/Visugate/public_nbmay96.hcsp?printPage=1
+http://www.rnib.org.uk/xpedio/groups/public/documents/publicwebsite/public_cvipsact2002.hcsp
+http://www.rnid.org.uk/information_resources/factsheets/benefits/factsheets_leaflets/attendanceallowance.htm
+http://www.rnrs.com/humor/domestic.htm
+http://www.road-school.com/york.htm
+http://www.roadandtravel.com/company/marketing/writerguide.html
+http://www.roadcycling.com/news/article1019.shtml
+http://www.roadid.com/
+http://www.roadid.com/default.asp
+http://www.roadid.com/testimonials.asp
+http://www.roadkillbill.com/lnk.html
+http://www.roadmaps.org/wish.html
+http://www.roadsafety.org.uk/information/publish/article_286.shtml
+http://www.roadsassy.com/spicedsass/archives/000721.html
+http://www.roadsense.com.au/copsay.html
+http://www.roadstaronline.com/underwood/2005/0503.html
+http://www.roadtoromance.ca/month/monthcoble.htm
+http://www.roadtoromance.ca/spots/spotkeiswanson.htm
+http://www.roadtoromance.ca/spots/spotmelissajames.htm
+http://www.roadtosurfdom.com/
+http://www.roadtosurfdom.com/archives/2005/05/because_they_ca_1.html
+http://www.roadtosurfdom.com/archives/2005/05/discontinuous_r.html
+http://www.roadtosurfdom.com/archives/2005/06/the_gword.html
+http://www.roadtripamerica.com/DefensiveDriving/Drive-Safe-With-Uncle-Bob.htm
+http://www.roadtripamerica.com/roadtripamericaConference/Thread.cfm?CFApp=44&CFID=70873&CFTOKEN=99508889&Thread_ID=2942
+http://www.roamintours.co.uk/pages/quotes.html
+http://www.roanoke.edu/catalog99/courses-physicaleducation.htm
+http://www.roarcanada.com/productview.aspx?PID=48
+http://www.robanders.com/News/20040615%20instant%20ctv.htm
+http://www.robbernard.com/archives/000861.html
+http://www.robert-fisk.com/articles5.htm
+http://www.robert-fisk.com/reject_nomination.htm
+http://www.robert-schuman.org/lettre/lettrean171.htm
+http://www.robert-schuman.org/lettre/lettrean172.htm
+http://www.robert-sorby.co.uk/tip-pen-turning.htm
+http://www.robertaisleib.com/prntchpt1fairway.htm
+http://www.robertdam-cos.dk/Meeting%20Caspar.html
+http://www.robertdam-cos.dk/My%20story%20with%20management.html
+http://www.robertefuller.com/RobertEFullersite/About.htm
+http://www.robertgraves.org/bio.php
+http://www.robertinventor.com/tuning-math/s___8/msg_7325-7349.html
+http://www.robertkbrown.com/
+http://www.robertnyman.com/2005/06/20/rise-lord-javascript/
+http://www.robertpopefoundation.org/robert_pope_bio.cfm
+http://www.robertsonhall.com/business.htm
+http://www.robiecreek.com/training.htm
+http://www.robinhood.ca/tip.asp?tcid=19
+http://www.robinkelly.btinternet.co.uk/spfaq10.htm
+http://www.robinkelly.btinternet.co.uk/wesker1.htm
+http://www.robinparis.co.uk/biog/history.htm
+http://www.robinsons-uk.com/content/content.asp?id=61
+http://www.robix.com/
+http://www.robotgames.net/WCRG/resource-lodging.htm
+http://www.robotgroup.org/projects/mobile_platform.html
+http://www.roboticsevents.com/Overview.html
+http://www.roboticsonline.com/public/articles/archivedetails.cfm?id=1039
+http://www.roboticsonline.com/public/articles/articlesdetails.cfm?id=1360
+http://www.roboticsonline.com/public/articles/index.cfm?cat=216
+http://www.robsviolet.com/what_we_ship.htm
+http://www.robyncarr.com/recent.html
+http://www.robyninsearchof.blogspot.com/
+http://www.rocemabra.com/~roger/tagg/generals/general04.html
+http://www.rochdaleobserver.co.uk/news/s/200/200690_mias_crucial_heart_op_is_put_back.html
+http://www.rochedalss.eq.edu.au/orbweaver.htm
+http://www.rochedalss.qld.edu.au/orbweaver.htm
+http://www.rochester.edu/College/MUR/faq/
+http://www.rochester.edu/Eastman/composition/admissions.html
+http://www.rochester.edu/SBA/sbaecs.html
+http://www.rochesterbusinessalliance.com/scriptcontent/va_custom/va_cm/ContentPageDisplay.cfm?Content_ID=1078
+http://www.rock-idols.com/asp/privacy_policy.htm
+http://www.rock.co.za/files/rabbitt_boys.html
+http://www.rockabillyhall.com/JerryJaye1.html
+http://www.rockchallenge.com.au/modules.php?op=modload&name=PagEd&file=index&topic_id=0&page_id=113
+http://www.rockchallenge.com.au/modules.php?op=modload&name=PagEd&file=index&topic_id=0&page_id=36
+http://www.rockclimbing.com/forums/viewtopic.php?t=68853
+http://www.rockclimbing.com/forums/viewtopic.php?t=73335&start=45
+http://www.rockefeller.edu/research/abstract.php?id=40
+http://www.rocket-hire.com/news/2004/ap.html
+http://www.rocketmanblog.com/2004/02/let_a_thousand_.html
+http://www.rocketreader.com/works/sat.html
+http://www.rockhurst.edu/services/hr/jobs.asp
+http://www.rockiesgolf.com/golfcourses/reviews/floridadiamondplayersclermont.htm
+http://www.rockiesventureclub.org/resources/Understanding_Traditional_Professional_VC.htm
+http://www.rockingham.k12.va.us/EMS/Holocaust/Holocaust.html
+http://www.rockjethwa.com/techdocuments/taskanalysis_virtualmeetingsoftware.html
+http://www.rocklinux.org/submaster.html
+http://www.rocklist.net/kerrang_p2.htm
+http://www.rockmountain.com/directions.cfm
+http://www.rockportinstitute.com/about_testimonials.php
+http://www.rockportinstitute.com/resumes.html
+http://www.rockridgeinstitute.org/projects/strategic/simple_framing
+http://www.rocksoc.org.uk/wus/dj/dj-abj21.html
+http://www.rocktheworld.org/contagion/RTWDocument.2003-12-03.3136
+http://www.rockwellcollins.com/news/background/page3019.html
+http://www.rockymountainjobs.com/CareerGuide/resignation.asp
+http://www.rockymounttelegram.com/search/content/services/agreement.html
+http://www.roctober.com/roctober/greatness/equals.html
+http://www.rodgeglass.com/fiction.htm
+http://www.rodmiller.com/wireless_lenz.shtml
+http://www.rodneycroome.id.au/other?id=C0_18_2
+http://www.roehampton.ac.uk/pg/ses/
+http://www.roehampton.ac.uk/ug/ses/
+http://www.roehampton.ac.uk/ug/slc/
+http://www.roehampton.ac.uk/ug/spc/
+http://www.roehampton.ac.uk/ug/sse/
+http://www.roehampton.ac.uk/ug/sss/
+http://www.rogerhedgecock.com/homefront.html
+http://www.rogerlsimon.com/
+http://www.rogerlsimon.com/mt-archives/2004/11/this_time_the_t.php
+http://www.rogerwilliamsparkzoo.org/visit/ParkCarousel.cfm
+http://www.roizen.com/games/
+http://www.rolfgordon.co.uk/
+http://www.rolfpotts.com/writers/halliday.php
+http://www.rollacity.org/muncourt/newordinance/chapter14.html
+http://www.rollanet.org/~rlions/26j.html
+http://www.rollaramp.co.uk/
+http://www.rollcall.com/pub/50_56/fiftyyears/7568-1.html
+http://www.roller-coaster.com.au/news.php
+http://www.rollercoaster.ie/boards/postform.asp?ID=40997&GroupID=37&forumdb=1
+http://www.rollerfeet.com/backporchbeer/archives/2004_06.html
+http://www.rollinghills.org/GettingConnected/Reach/
+http://www.rollingrocksdownhill.com/2005/01/chapter_3a_the_.html
+http://www.rolls-royce.com/history/overview/memorial.jsp
+http://www.rolltide.com/Womens%20Basketball/9731.asp
+http://www.roman-emperors.org/livia.htm
+http://www.roman-empire.net/army/army.html
+http://www.roman-empire.net/articles/article-002.html
+http://www.roman-empire.net/collapse/petronius.html
+http://www.roman-empire.net/society/soc-nobiloblig.html
+http://www.romance-your-wife.com/site/472890/product/162-4329435
+http://www.romanceandfriends.com/monthly_pick.html
+http://www.romanceeverafter.com/our_love_was_meant_to_be.htm
+http://www.romanceopedia.com/
+http://www.romanceopedia.com/chapter5.html
+http://www.romancestuck.com/
+http://www.romanhomes.com/vacation_rentals/apartments/3_star/borromini.htm
+http://www.romantic-lyrics.com/romanticideas.shtml
+http://www.romanticasheville.com/Blue_Ridge_Parkway_Biking2.htm
+http://www.romnews.com/community/modules.php?op=modload&name=News&file=article&sid=630&mode=thread
+http://www.rona.ca/webapp/wcs/stores/servlet/rona/project_corpo.jsp?assetNo=2085&sectionId=223&storeId=10001&langId=-1
+http://www.rona.ca/webapp/wcs/stores/servlet/rona/project_corpo.jsp?assetNo=2085&sectionId=252&storeId=10001&langId=-1
+http://www.ronankeating.ca/articles/2004/mirror_3am_oct_2004.htm
+http://www.ronankeating.ca/walk_ireland/rkca_papervoice.htm
+http://www.rondexter.com/filmschool/opportunities_in_film_and_video.htm
+http://www.ronfletcherwork.com/fletchbio4.html
+http://www.rong-chang.com/book/movie.html
+http://www.rong-chang.com/guestbook/guestbook68.shtml
+http://www.ronjun-eshop.com/
+http://www.ronkaufman.com/articles/article.service.html
+http://www.ronwiebeagencies.com/1024x768/rural.htm
+http://www.ronwiebeagencies.com/800x600/homes.htm
+http://www.ronwiebeagencies.com/800x600/rural.htm
+http://www.roofingcontractor.com/CDA/ArticleInformation/features/BNP__Features__Item/0,3241,13055,00.html
+http://www.roofingcontractor.com/CDA/ArticleInformation/features/BNP__Features__Item/0,3241,91296,00.html
+http://www.rooftopsessions.com/winterrose.htm
+http://www.rooseveltmiddle.com/media_center/MediaCenterMinute.htm
+http://www.rootenbergbooks.com/Rootenberg_Books_Autographs.html
+http://www.rootschat.com/forum/index.php/topic,65360.0.html
+http://www.rootsweb.com/~ctfairfi/pages/cemetery/cm_stmfrd/northstreet.htm
+http://www.rootsweb.com/~genepool/treatrob.htm
+http://www.rootsweb.com/~iladams/bios/cuzzins.htm
+http://www.rootsweb.com/~nwa/ah.html
+http://www.rootsweb.com/~nyherkim/schuyler/meetinghouses.html
+http://www.rootsweb.com/~nysteube/cn/cn5.html
+http://www.rootsweb.com/~nytompki/Caroline/tcodd.htm
+http://www.rootsweb.com/~rwguide/lesson8.htm
+http://www.rootsweb.com/~srgp/bradsby/bradc15.htm
+http://www.rootsweb.com/~txnavarr/pioneer_village/1838_indian_trading_post.htm
+http://www.roppongihills.com/en/access_service/service_0507.html
+http://www.rorkesdriftvc.com/vc/chavasse.htm
+http://www.rosaryparts.com/pages/instructions/instructions.asp
+http://www.rosbaltnews.com/2003/04/14/61383.html
+http://www.rosbaltnews.com/2005/06/18/66611.html
+http://www.rosbaltnews.com/2005/06/25/66611.html
+http://www.rosbaltnews.com/2005/06/28/66611.html
+http://www.roscalen.com/signals/
+http://www.rosco.com/uk/news/index.asp
+http://www.rose-hulman.edu/Catalogue03/special.htm
+http://www.rose-hulman.edu/Class/CalculusProbs/Problems/catlist.html
+http://www.rose-hulman.edu/hss/courses/techtran.htm
+http://www.rose.brandeis.edu/users/gelles/stall/
+http://www.rose.edu/faculty/ssaulmon/r&r.htm
+http://www.rosecitysoftware.com/Courier/
+http://www.rosecitysoftware.com/courier/
+http://www.rosedalevision.com/eye_care.htm
+http://www.rosefdn.org/voters.html
+http://www.roseinfo.com/rose_lore.html
+http://www.rosemed.com/CustomPage.asp?PageName=Lynne%20Wagner%20Named%20Rose%20CNO
+http://www.rosemed.com/CustomPage.asp?guidCustomContentID=%7B17BECB79-F122-11D3-AD19-00508B91A0DD%7D
+http://www.rosenthal.hs.columbia.edu/cancer/info/ctrials.html
+http://www.roseparvin.com/html/Rose%20Legacy%20of%20Global%20Culture%20of%20Peace%20&%20Freedom.html
+http://www.roseparvin.com/html/parvin_Global%20_Cultural_Peace_and_Reform_Program.html
+http://www.roseprinting.com/electroPublisher/website/index.cfm?pageID=12
+http://www.rosesfoto.com/about_rose/index.asp
+http://www.rosneath.com.au/ipc6/ch02/brooks/
+http://www.rosneath.com.au/ipc6/ch07/kennedy/
+http://www.rospa.com/awards/winners2004/gold_medal.htm
+http://www.rossdillon.com/id9.htm
+http://www.rossfordohio.com/viewsites.asp
+http://www.rossiterandco.com/awards1.htm
+http://www.rossmartin.co.uk/Settlements/Arctic%20Appeal.htm
+http://www.rotacal.org/smile.htm
+http://www.rotary1080.fsnet.co.uk/1080_site_link/1080_foundation/india_dist_3210-projects_2001_2002.htm
+http://www.rotary5450.org/gse/africa/
+http://www.rotary7450.org/ExtonFrazer/
+http://www.rotarywillemstad.org/html/fundraisers.html
+http://www.rothenberg.org/Cosi-Fan-Tutte/6.htm
+http://www.rotherhams.co.nz/index.cfm/newsletters/archive/legal_update_autumn_2005
+http://www.rothstein.com/drjbooks/drj513.htm
+http://www.rotishops.com/jokes.html
+http://www.rototimes.com/index.php?sport=bsball&type=playernotes&month=06&day=1&league=both
+http://www.rototimes.com/index.php?sport=pftball&type=teamnotes&name=TB
+http://www.rotrally.com/Pages/Public/Events.asp
+http://www.rotten.com/library/bio/crime/mafia/louis-buchalter/
+http://www.rotten.com/library/bio/entertainers/radio/lord-haw-haw/
+http://www.rotten.com/library/bio/presidents/george-hw-bush/
+http://www.rotten.com/library/culture/peta/
+http://www.rotten.com/library/language/gate/
+http://www.rottentomatoes.com/g/playstation_2/sitting_ducks/
+http://www.rottentomatoes.com/m/alone_in_the_dark/
+http://www.rottentomatoes.com/m/alone_in_the_dark/?beg=0&int=24&page=1
+http://www.rottentomatoes.com/m/alone_in_the_dark/?rtp=1
+http://www.rottentomatoes.com/m/alone_in_the_dark/articlegate.php
+http://www.rottentomatoes.com/m/alone_in_the_dark/news.php
+http://www.rottentomatoes.com/m/baby_boy/
+http://www.rottentomatoes.com/m/blue_streak/
+http://www.rottentomatoes.com/m/cars/
+http://www.rottentomatoes.com/m/how_i_killed_my_father/
+http://www.rottentomatoes.com/m/monkey_trouble/?sortby=source&critic=columns
+http://www.rottentomatoes.com/m/mr_and_mrs_smith/numbers.php
+http://www.rottentomatoes.com/m/my_flesh_and_blood/
+http://www.rottentomatoes.com/m/open_water/about.php
+http://www.rottentomatoes.com/m/operation_dumbo_drop/articlegate.php
+http://www.rottentomatoes.com/m/operation_dumbo_drop/dvd.php
+http://www.rottentomatoes.com/m/operation_enduring_freedom_america_fights_back/articlegate.php
+http://www.rottentomatoes.com/m/operation_petticoat/articlegate.php
+http://www.rottentomatoes.com/m/reaching_beyond_magical_child_5_critical_and_creative_thinking/
+http://www.rottentomatoes.com/m/secret_art_the_whitetail_tree_stand_hunting_tactics/
+http://www.rottentomatoes.com/m/showtime_comedy_superstars_brett_butler_sold_out/
+http://www.rottentomatoes.com/m/soldiers_girl/
+http://www.rottentomatoes.com/m/they_would_love_you_in_france/
+http://www.rottentomatoes.com/m/westinghouse_studio_one_there_was_a_crooked_man/
+http://www.rottentomatoes.com/vine/showthread.php?goto=lastpost&t=387575
+http://www.rottentomatoes.com/vine/showthread.php?t=324770&page=8
+http://www.rottentomatoes.com/vine/showthread.php?t=379285
+http://www.rottentomatoes.com/vine/showthread.php?t=379285&page=1
+http://www.rottentomatoes.com/vine/showthread.php?t=415823
+http://www.roubiniglobal.com/setser/archives/2005/04/well_on_our_way.html
+http://www.roubiniglobal.com/setser/archives/2005/06/an_unbalanced_u.html
+http://www.roughnecksrugby.org/coaching_corner_conditioning_mardigras.htm
+http://www.roughnotes.com/rnmagazine/2003/march03/03p148.htm
+http://www.roughstock.com/roughstock/stacy/PAGE15.html
+http://www.rouncefield.homestead.com/files/as_soc_ed_2.htm
+http://www.roundrockisd.org/purplesage/
+http://www.roundtop.com/bluebell.htm
+http://www.roundupnews.com/news/2003/03/17/News/Bush-May.Launch.War.Tonight-393649.shtml
+http://www.rousette.org.uk/blog/archives/2004/04/11/why-wordpress/
+http://www.rousette.org.uk/blog/archives/category/culture/music/
+http://www.rousselle.com/allan/archives/000293.html
+http://www.rousselle.com/allan/archives/cat_journey_of_a_thousand_pounds.html
+http://www.roxar.com/article.php?articleID=2241
+http://www.roxbury.net/exploredelinquent.html
+http://www.royagcol.ac.uk/undergrad_courses/pas.htm
+http://www.royal-ballet-school.org.uk/Applications_Auditions/Fees.htm
+http://www.royal-navy.mod.uk/static/pages/1845.html
+http://www.royal-navy.mod.uk/static/pages/209.html
+http://www.royal-navy.mod.uk/static/pages/2932.html
+http://www.royal-navy.mod.uk/static/pages/7421.html
+http://www.royal-navy.mod.uk/static/pages/7549.html
+http://www.royal-navy.mod.uk/static/pages/content.php3?page=6817
+http://www.royal.gov.uk/output/Page3669.asp
+http://www.royal.gov.uk/output/page3965.asp
+http://www.royalacademy.org.uk/?lid=1244
+http://www.royalafricansociety.org/what_we_do/recent_meetings/eporting_africa
+http://www.royalbcmuseum.bc.ca/end_species/es_plans/4gloss.html
+http://www.royaldeaf.org.uk/home.htm
+http://www.royaldeaf.org.uk/jshort.htm
+http://www.royaldeaf.org.uk/signbaby.htm
+http://www.royaldeaf.org.uk/simple3.htm
+http://www.royaldeaf.org.uk/simple35.htm
+http://www.royaldeaf.org.uk/steiner.htm
+http://www.royaldockstrust.org.uk/Grantslist.html
+http://www.royaldornoch.com/champ.htm
+http://www.royalharbourresort.com/weeks4sale.htm
+http://www.royalinstitutephilosophy.org/articles/dawkins_genes.htm
+http://www.royaljones.com/
+http://www.royals.org/matdoc/100104.html
+http://www.royalsoc.ac.uk/news.asp?year=&id=1657
+http://www.royalsoc.ac.uk/news.asp?year=&id=1666
+http://www.royalsoc.ac.uk/page.asp?id=1167
+http://www.royalsoc.ac.uk/page.asp?id=1824
+http://www.royalsoc.ac.uk/page.asp?id=2176
+http://www.royalsunalliance.com/
+http://www.royalty.nu/America/Hawaii.html
+http://www.royfinartcomforsco.gov.uk/def5.html
+http://www.royjonesdogshows.com/PremiumLists/KennelClubofYorkville/KennelClubOfYorkvilleILL05.htm
+http://www.royoftherovers.com/footballfunnies/petespage.htm
+http://www.rpainc.org/pages/whowearebios.html
+http://www.rpani.gov.uk/briefingpapers/practice.htm
+http://www.rpasmith.co.uk/galashiels.htm
+http://www.rpasmith.co.uk/inverness.htm
+http://www.rpbridge.net/7j33.htm
+http://www.rpbridge.net/7j45.htm
+http://www.rpca.co.uk/community.html
+http://www.rpcv.org/pages/groupinfo.cfm?id=83&category=2
+http://www.rpf-bc.org/forum/featuresja98.html
+http://www.rpg.net/larp/scenario/Brian_Phillips/codename/double.html
+http://www.rpg.net/larp/truth.html
+http://www.rpg.net/news+reviews/columns/elements01nov02.html
+http://www.rpg.net/reviews/archive/9/9195.phtml
+http://www.rpg.net/reviews/archive/9/9671.phtml
+http://www.rpghoard.com/cgi-bin/arcdb.cgi?action=dl&id=1246
+http://www.rpgnews.com/articles.php
+http://www.rpgnews.com/tibetrpg.php
+http://www.rpgplace.net/contrib/rina/fanfics/lod/dragoncampaign.php
+http://www.rpgplanet.com/kingdomhearts/
+http://www.rpgplanet.com/memw/
+http://www.rpi.edu/dept/IT/grad/faq.html
+http://www.rpi.edu/~bulloj/Doom_Patrol/dp99.html
+http://www.rpi.edu/~eglash/eglash.dir/ethnic.dir/nerds.dir/nerd.htm
+http://www.rpi.edu/~eglash/eglash.dir/itrev.htm
+http://www.rppi.org/edbudget.shtml
+http://www.rppi.org/onewaystreets.html
+http://www.rppi.org/outofcontrol/archives/000860.html
+http://www.rppi.org/outsourcing/index.shtml
+http://www.rppi.org/sewagetreatment.html
+http://www.rppi.org/wtc/100501staley.html
+http://www.rps.psu.edu/0201/bats.html
+http://www.rps.psu.edu/jan98/violin.html
+http://www.rpsplc.co.uk/news.asp?N=272&secid=news&siteid=29&SessionID=
+http://www.rpsrelocation.com/Moving&storage.htm
+http://www.rptia.com/about.html
+http://www.rrb.gov/rb104.html
+http://www.rrc.mb.ca/international/china/teachertestimonials.htm
+http://www.rrca.org/coaching/Intro.html
+http://www.rrca.org/publicat/walkrun.html
+http://www.rrich.com/revvasoazzurro.html
+http://www.rrvwsp.com/dwra.htm
+http://www.rs485.com/ppricelist.html
+http://www.rsacmotorsport.co.uk/docs/notesrs1.html
+http://www.rsc-ne-scotland.ac.uk/training/
+http://www.rsc.org.uk/richard/current/understudying.html
+http://www.rsc.org.uk/titus/students/director.html
+http://www.rsc.org/science/industry/ITFquest.htm
+http://www.rscc.cc.tn.us/owl&writingcenter/OWL/WritingLitAnalysis1.html
+http://www.rscdstoronto.org/whats_on.html
+http://www.rsesymposia.org/page.asp?p=35
+http://www.rsf.org/article.php3?id_article=10186
+http://www.rsf.org/article.php3?id_article=10439
+http://www.rsf.org/article.php3?id_article=13356
+http://www.rsf.org/article.php3?id_article=317
+http://www.rsf.org/article.php3?id_article=6541
+http://www.rsf.org/print.php3?id_article=10186
+http://www.rsf.org/print.php3?id_article=10439
+http://www.rsf.org/rubrique.php3?id_rubrique=144
+http://www.rsi.com.sg/english/singaporescene/view/20031119170928/1/.html
+http://www.rsi.deas.harvard.edu/preventing.html
+http://www.rsi.deas.harvard.edu/spread.html
+http://www.rsiftl.com/ourteaching/faq.htm
+http://www.rsingermanson.com/html/james__bone_box.html
+http://www.rsis.com/rsis-corporate/RSIS/RSIS-Business/RSIS-Contracts/CIO-SP2i.cfm
+http://www.rsjo.com/record.html
+http://www.rsl.org.au/about/history.html
+http://www.rslqld.org/index.php?itemid=26
+http://www.rsm.ac.uk/new/pr97.htm
+http://www.rsnz.org/awards/st_medals/index.php
+http://www.rsnz.org/directory/yearbooks/year02/dell.php
+http://www.rsnz.org/publish/nzjz/2002/008.php
+http://www.rsnz.org/topics/biol/gene/
+http://www.rspaintball.net/
+http://www.rspb.org.uk/birds/faqs/feeding.asp
+http://www.rspb.org.uk/birds/faqs/feeding.asp?view=print
+http://www.rspb.org.uk/international/illegal_hunting/greece/index.asp
+http://www.rspca.org.au/animalcare/cats.asp
+http://www.rspcavic.org/animal_services/inspectorate_cases.htm
+http://www.rsph.org/events/Old%20events/2001%20events.asp
+http://www.rssl.com/OurServices/Training/Food/TraditionalandRapidMicrobiologyMethods.htm
+http://www.rstrading.com/resources/Medical.htm
+http://www.rt66.com/~rifetech/
+http://www.rtachicago.com/infocenter/paratransit.asp
+http://www.rtcgroup.com/arm/advisory.php
+http://www.rtcmagazine.com/home/article.php?id=100010
+http://www.rtd.si/eng/medn/cost/predstavitev.asp
+http://www.rtd.si/eng/medn/cost/predstavitev.asp?ZaTisk=Da
+http://www.rte.ie/health/2004/0512/health1010208.html
+http://www.rte.ie/sport/2005/0109/england.html
+http://www.rthum.com/Troxler%20Review.htm
+http://www.rtmagazine.com/i_Articles.ASP?articleid=I0309D06
+http://www.rtnda.org/foi/sunshinepkfin.shtml
+http://www.rtnda.org/news/2005/050602b.shtml
+http://www.rtnda.org/resources/speeches/rather3.html
+http://www.rtnda.org/resources/speeches/rather3.shtml
+http://www.rtog.org/committees/minutes/headneck.html
+http://www.rtog.org/members/pathology/pathletter.html
+http://www.rtoonline.com/Content/Article/Dec03/DTVSalesExplode121903.asp
+http://www.rtoonline.com/Content/Article/Jun04/FallingElectronicsPricesPressureCategory062404.asp
+http://www.rts.net.au/jpet.html
+http://www.rtweb.info/ch01/nfr1.html
+http://www.rtweb.info/ch04/
+http://www.rubber-ducky.org/carolynsboards/read.php?f=23&i=1101&t=1100
+http://www.rubberpaw.com/leadership.html
+http://www.rubesville.com/interviews.shtml
+http://www.rubicon-response.co.uk/team.htm
+http://www.ruf.org/sounds/books.htm
+http://www.ruf.rice.edu/~mgpowell/bureaucrat.html
+http://www.ruf.rice.edu/~musi/facultybios/chen.html
+http://www.ruf.rice.edu/~poli/GraduateStudies/gradpg1.html
+http://www.rufy.com/roger/knowledge.html
+http://www.rugbycanada.ca/index.php?lang=en&page_id=10&news_id=978
+http://www.rugbycoach.com/club/skills/cognitive.htm
+http://www.rugbycoach.com/fitness/weight/power.htm
+http://www.rugbyonguam.com/spg.htm
+http://www.rugbypostnz.com/howto.html
+http://www.rugbystudies.com/Newsletters/Newsletter120.htm
+http://www.ruhl-ruhl.com/3435
+http://www.ruishi.info/forum/read.php?tid=24623&page=e
+http://www.rules.co.uk/news.shtml
+http://www.rules.co.uk/reviews.html
+http://www.rulesonline.com/parliamentarians_websites.htm
+http://www.rulesonline.com/rror-10.htm
+http://www.rulesonline.com/rror-12.htm
+http://www.rulon.com/Catpages/127Bilingual.htm
+http://www.ruminatethis.com/
+http://www.ruminatethis.com/archives/002084.html
+http://www.rumormillnews.com/TERRORIST%20ATTACK%20911.htm
+http://www.rumormillnews.com/cgi-bin/forum.cgi?noframes;read=54165
+http://www.rumormillnews.com/operation.htm
+http://www.run-gear.com/buyingtips.html
+http://www.run100s.com/HR/gloomis00.html
+http://www.runasnailspace.com/
+http://www.runbox.com/twiki/bin/view/RunboxInfo/News
+http://www.rundeep.co.uk/new/knowledge/papers_sticky.asp
+http://www.runjamesrun.blogspot.com/
+http://www.runnerduck.com/04-23-04.htm
+http://www.runnersworld.co.uk/news/article.asp?UAN=1144
+http://www.runningblue.com/rewards/
+http://www.runningdeerslonghouse.com/webdoc130.htm
+http://www.runningmovies.com/
+http://www.runningspot.com/Ask/BR/Default.htm
+http://www.runningtimes.com/highschool/
+http://www.runningtimes.com/issues/02oct/pregnancy.htm
+http://www.runningtimes.com/issues/02sep/utica.htm
+http://www.runningtimes.com/issues/03apr/goal.htm
+http://www.runningtimes.com/issues/99julaug/artmar.htm
+http://www.runningtrades.com/
+http://www.runswith.com/royalwedding.html
+http://www.rupaliparda.com/khasi/introduction.htm
+http://www.rupe-india.org/36/parasitism.html
+http://www.ruraledu.org/rpm/rpm410a.htm
+http://www.ruralgateway.org.uk/item/512/11/24/46&dateformat=%25o-%25b-%25h
+http://www.ruralheritage.com/vet_clinic/hoof_and_mouth.htm
+http://www.ruralhillfarm.org/servlet/Main?page=ScottishOrScots-Irish
+http://www.ruralnetwork.net/~newsroom/story%20924.htm
+http://www.ruralwater.org/sec1926b/sequoya.htm
+http://www.ruralwomyn.net/story3.html
+http://www.rurdev.usda.gov/rbs/farmbill/4280pre06.htm
+http://www.rurdev.usda.gov/rbs/farmbill/4280pre07.htm
+http://www.rurdev.usda.gov/rbs/pub/sep03/apple.html
+http://www.ruready2party.com/funny_bar_stories.htm
+http://www.rusc.com/
+http://www.rush.edu/professionals/gme/children/faculty.html
+http://www.rush.edu/rumc/page-1098987387188.html
+http://www.rush.edu/rumc/page-R11761.html
+http://www.rushcliffe.gov.uk/recycling2go/doc.asp?cat=40&doc=4792
+http://www.rushlimbaugh.com/home/breck/kerry_campaign_knows_they_re_down.guest.html
+http://www.rushlimbaugh.com/home/breck/kerry_campaign_knows_they_re_down.guest.print.html
+http://www.rushlimbaugh.com/home/menu/fstack/we_were_first__lying_crook__choice.guest.html
+http://www.rushlimbaugh.com/home/menu/fstack/we_were_first__lying_crook__choice.guest.print.html
+http://www.rushmore.edu/practical2.htm
+http://www.rusnet.nl/news/2003/02/08/report01.shtml
+http://www.russbaker.com/CJR%20-%20Murdoch's%20Mean%20Machine,%20by%20Russ%20Baker.htm
+http://www.russbaker.com/Phily%20Inquirer%20-%20Resourceful%20Man%20Of%20Mercy.htm
+http://www.russellbeattie.com/notebook/1007946.html
+http://www.russellmelloncaps.com/site/xmas/CharityReview2004.aspx
+http://www.russfeingold.org/
+http://www.russfound.org/Enet/nizkor.htm
+http://www.russian.ee/~star/helix/mil/
+http://www.russianbooks.org/killers3.htm
+http://www.russianspaceweb.com/a4_team_moscow.html
+http://www.russianspaceweb.com/baikonur_road.html
+http://www.russojapanesewar.com/sea-of-japan.html
+http://www.russwhitney.com/faqs.aspx
+http://www.rustyspell.com/games/rustysreviews.html
+http://www.rutherford.org/articles_db/legal_features.asp?article_id=114
+http://www.ruthpennebaker.com/work13.htm
+http://www.rutledgeblog.com/askrutl/archives/2005_04.html
+http://www.ruv.net/
+http://www.rv.net/forum/index.cfm/fuseaction/thread/tid/14874443/gotomsg/14876005.cfm
+http://www.rv.net/forum/index.cfm/fuseaction/thread/tid/15016945/page/2.cfm
+http://www.rvf.org.uk/new_page_4.htm
+http://www.rwanda-vcp.org/info.projekt.en.html
+http://www.rwcmd.ac.uk/college_knowledge/purpose.asp
+http://www.rwcmd.ac.uk/howtoapply/ba_stage_management.asp
+http://www.rwe.org/works/Essays-2nd_Series_7_Politics.htm
+http://www.rwg-bayreuth.de/chemie/unterricht/carrying.htm
+http://www.rwjf.org/newsroom/newsreleasesdetail.jsp?id=10285
+http://www.rwjuh.edu/visitor/piservices.html
+http://www.rworld.ca/franchise.asp
+http://www.rx4us.com/en/prescription+drugs+news/pawlenty+canada+won+t+ban+cross+border+drug+sales+immediately.html
+http://www.rxassist.org/Search.cfm
+http://www.rxassist.org/Terms_n_Privacy.cfm
+http://www.rxlist.com/rxboard/paxil.pl?read=12931
+http://www.rxlist.com/rxboard/prozac.pl?read=718
+http://www.rxmed.com/b.main/b2.pharmaceutical/b2.1.monographs/CPS-%20Monographs/CPS-%20(General%20Monographs-%20C)/CARDIZEM.html
+http://www.rxpgnews.com/research/endocrinology/diabetes/article_1634.shtml
+http://www.rxsolutions.com/c/about/management.asp
+http://www.ryanair.com/dest/dublin.html
+http://www.ryanco.com/develop/Texas_Sales_&_Use_Tax_Managed_Compliance-Advantages_and_Disadvantages.html
+http://www.ryderfleetproducts.com/cgi-bin/ryderfp/technicalbulletins/sealinstall.jsp
+http://www.ryecongregational.com/thrift-shop.htm
+http://www.ryznardesign.com/web_coding/image_replacement/2004/gilder_levin_ryznar_jacoubsen/glrj_1_static.html
+http://www.rzim.org/publications/slicetran.php?sliceid=426
+http://www.s-c-g.org/facetoface/
+http://www.s-gabriel.org/names/dietmar/hints.html
+http://www.s-h-systems.co.uk/hotels/lowestoft.html
+http://www.s-h-systems.co.uk/hotels/seabank.html
+http://www.s-ox.com/News/detail.cfm?articleID=865
+http://www.s-ox.com/features/article.cfm?articleID=207
+http://www.s11n.net/papers/context_singletons.html
+http://www.s8int.com/atomic1.html
+http://www.sa-cd.net/showthread/1275/4175
+http://www.sa-tourmed.com/content/traveller/travelling.asp
+http://www.sa-venues.com/ga/hakunamatata.htm
+http://www.sa-venues.com/north_cape_tours.htm
+http://www.sa.psu.edu/usa/qa.shtml
+http://www.sa.uts.edu.au/publications/caras/untitled.html
+http://www.saa.org/repatriation/lobby/SCIAtestimony.html
+http://www.saabnet.com/tsn/models/1999/9995pr2.html
+http://www.saag.org/notes3/note241.html
+http://www.saag.org/papers12/paper1102.html
+http://www.saag.org/papers12/paper1173.html
+http://www.saag.org/papers13/paper1231.html
+http://www.saag.org/papers2/paper131.html
+http://www.saag.org/papers5/paper450.html
+http://www.saao.ac.za/~wgssa/as3/roberts.html
+http://www.saarclawnet.com/saarclawnet/osca20c1.html
+http://www.saatchikevin.com/talkingit/judge.html
+http://www.saatchikevin.com/workingit/love_change.html
+http://www.saathi.org/vijay's_voice.htm
+http://www.sabah.gov.my/events/2002statebudget/statebudgetbr/default.htm
+http://www.sabceducation.co.za/educatorspace/beyondtheclassroom/episode_10.html
+http://www.sabeel.org/old/fos-na/ateekal2.htm
+http://www.sabellastudios.com/tips_krichards.php
+http://www.sabertoothgames.com/forum/forum_posts.asp?TID=3873&get=last
+http://www.sabes.org/resources/adventures/vol12/12mcguire.htm
+http://www.sabes.org/resources/fieldnotes/fnguide.htm
+http://www.sabian.org/Alice/lgchap04.htm
+http://www.sablesys.com/accres.html
+http://www.saburchill.com/history/chapters/chap4012.html
+http://www.saburchill.com/history/hist003.html
+http://www.sac.ac.uk/consultancy/organic/nae/news/organicstock
+http://www.sacbee.com/06-07-2005/classads/notices/legal_notices/
+http://www.sacbee.com/24hour/entertainment/books/reviews/story/2423146p-10716489c.html
+http://www.sacbee.com/24hour/jobs/story/2495827p-10848245c.html
+http://www.sacbee.com/24hour/sports/story/2510346p-10872350c.html
+http://www.sacbee.com/content/homes/re_news/story/12134263p-13005358c.html
+http://www.sacbee.com/content/news/energy/story/5077880p-6084704c.html
+http://www.sacbee.com/content/news/medical/
+http://www.sacbee.com/content/news/story/13039604p-13885506c.html
+http://www.sacbee.com/content/news/story/13052770p-13898468c.html
+http://www.sacbee.com/content/opinion/editorials/story/12956334p-13803706c.html
+http://www.sacbee.com/content/opinion/story/13112498p-13956952c.html
+http://www.sacbee.com/content/politics/ca/budget/story/11326020p-12240755c.html
+http://www.sacbee.com/content/politics/ca/budget/story/11803354p-12691192c.html
+http://www.sacbee.com/content/sports/story/13102180p-13946933c.html
+http://www.sacbee.com/static/archive/family/features/20010408.html
+http://www.sacbee.com/static/archive/news/projects/environment/20010505.html
+http://www.sacbee.com/static/archive/news/projects/violence/stats_01.html
+http://www.sacbee.com/static/archive/news/projects/workers/20010521_main.html
+http://www.saccourt.com/family/self_help_center/center.asp
+http://www.sacosalmon.org/bylaws.php
+http://www.sacp.org.za/bua/2003/issue2.html
+http://www.sacp.org.za/docs/history/failed.html
+http://www.sacred-texts.com/atl/soa/soa15.htm
+http://www.sacred-texts.com/atl/tll/tll02.htm
+http://www.sacred-texts.com/aus/ntna/ntna04.htm
+http://www.sacred-texts.com/bud/tea.htm
+http://www.sacred-texts.com/cfu/liki/liki06.htm
+http://www.sacred-texts.com/egy/eml/eml14.htm
+http://www.sacred-texts.com/evil/hod/hod14.htm
+http://www.sacred-texts.com/hin/m12/m12a099.htm
+http://www.sacred-texts.com/neu/celt/fab/fab102.htm
+http://www.sacred-texts.com/pag/frazer/gb06205.htm
+http://www.sacred-texts.com/wmn/wb/wb52.htm
+http://www.sacredconnection.ndo.co.uk/Health%20Awareness/The%20Big%20Picture%20of%20Health.htm
+http://www.sacredland.org/historical_sites_pages/taos_blue_lake.html
+http://www.sacredsites.com/europe/ireland/tower_of_cashel.html
+http://www.sacredspace.ie/livingspace/SundayArchive/B-Easter4.htm
+http://www.sacsheriff.com/crime_prevention/documents/teens_at_risk_02.cfm
+http://www.sactree.com/isa/pruning_young_trees.htm
+http://www.sad.org.uk/communication.htm
+http://www.saddleback.cc.ca.us/div/la/neh/juaneno.htm
+http://www.saddleback.edu/AP/atas/CommArts/
+http://www.saddleupequestrian.co.uk/legacy.asp
+http://www.saddonline.com/issues2.htm
+http://www.saddonline.com/teenstoday/study.htm
+http://www.sadeveloper.net/team.aspx
+http://www.sadiesonline.com/
+http://www.sadker.org/textbooks.htm
+http://www.sadoun.com/Sat/Channels/Channels-FTA-free-to-air-Satellite-TV.htm
+http://www.sadoun.com/Sat/Products/GE/GE-Max-Antenna.htm
+http://www.saee.ca/policy/D_018_DDB_LON.php
+http://www.saee.ca/policy/D_019_DDB_LON.php
+http://www.saee.ca/policy/D_020_DDB_LON.php
+http://www.saee.ca/policy/D_067_DDD_LON.php
+http://www.saee.co.za/
+http://www.saembassy.org/Letter%20of%20the%20President%20Young%20Lions%20of%20the%20African%20Century.htm
+http://www.saf.org/journal/4_Kopel.html
+http://www.safaricom.co.ke/Option/
+http://www.safe-food.org/-consumer/brands.html
+http://www.safe-food.org/-news/1999-12-04.html
+http://www.safeaccessnow.org/article.php?id=373
+http://www.safecom.org.au/brennan.htm
+http://www.safefood.net.au/content.cfm?sid=477
+http://www.safegamesillinois.org/
+http://www.safehaven.com/article-12.htm
+http://www.safehaven.com/article-1704.htm
+http://www.safehaven.com/article-3242.htm
+http://www.safehaven.com/forums-12805.htm
+http://www.safehomeproducts.com/SHP/SF/Child_Safety_Products.asp
+http://www.safemanitoba.com/sw_stats.html
+http://www.safemark.co.uk/Pages/3_types_of_thief.htm
+http://www.safemotherhood.org/smrg/action/a5/a5_materials.htm
+http://www.safeprogram.com/extracredit.htm
+http://www.saferoads.org/polls/harrispoll98.htm
+http://www.saferoutestoschools.org/Pressroom/Enewsletters/Apr04.htm
+http://www.saferoutestoschools.org/Pressroom/Enewsletters/Nov04.htm
+http://www.saferparks.org/are_rides_safe/
+http://www.saferworld.co.uk/media/pr251102.htm
+http://www.safesearching.com/robertpatrick/features/interview-detour.shtml
+http://www.safesite.com/category.php%5Baction%5Dbrowse&i=350&id=237&f=%7C%7C%7C%7C&s=product.date_released%7CDESC%5BSiteID%5Ddigibuy
+http://www.safespeed.org.uk/pacts.html
+http://www.safety.fsu.edu/radpic.html
+http://www.safetycenter.navy.mil/media/approach/vault/articles/0152.htm
+http://www.safetycentral.com/emnot.html
+http://www.safetycops.com/commercial_burglary.htm
+http://www.safetyline.wa.gov.au/PageBin/guidwswa0061.htm
+http://www.safetyline.wa.gov.au/pagebin/pg000066.htm
+http://www.safetyline.wa.gov.au/pagebin/pg000581.htm
+http://www.safetyline.wa.gov.au/pagebin/pg001113.htm
+http://www.safetyplus.net/Elvexsafetyglasses.html
+http://www.safetyplus.net/resources3/
+http://www.safetyshop.com/
+http://www.safeware-eng.com/index.php/white-papers/accident-causes
+http://www.safeware-eng.com/index.php/white-papers/differ
+http://www.saffronwalden.essex.sch.uk/depts/science/home.htm
+http://www.safis.co.il/info1.asp
+http://www.safm.co.za/programmedetails/?programmeid=32
+http://www.safnet.org/archive/0205_howtobeetle.cfm
+http://www.safnet.org/archive/0205_howtobeetle.cfm?printPage=1&
+http://www.safrica.info/ess_info/sa_glance/government/gov.htm
+http://www.safrica.info/ess_info/sa_glance/history/tenyearsago2.htm
+http://www.saga.co.uk/health_news/pages/article.asp?id=1A2DF232-60EC-4D8B-AEC7-0CE547CC641B
+http://www.saga.co.uk/magazine/article/0013E3A6-CA7F-4C38-AC89-CA4DFBB731C0.asp
+http://www.saga.co.uk/magazine/article/4D6EF02E-0213-4569-A4A6-CA792DCE228E.asp
+http://www.sage.co.uk/accountants/home.asp?tid=136547
+http://www.sage.org/groups/setup.mm
+http://www.sageant.net/1163/index.cfm
+http://www.sageant.net/crockett
+http://www.sagecrossroads.net/public/webcasts/20/
+http://www.sagepub.com/journal.aspx?pid=221
+http://www.sagharborchamber.com/terms.htm
+http://www.sagindie.org/interviews/Dirt.html
+http://www.sah.org/index.php?module=ContentExpress&func=display&ceid=228
+http://www.sahel.org.uk/programmes/jiton.htm
+http://www.sahistory.org.za/pages/sources/docs/doc21-anc-resolutions.htm
+http://www.sahpa.co.za/ppg-boogie/before.htm
+http://www.sahrc.org.za/human_rights_forum.htm
+http://www.saiasecure.com/Rules/view.asp?item=670-25
+http://www.saibaba.org/shirdi8.html
+http://www.saibaba.ws/articles1/areyoureallysuffering.htm
+http://www.saic.com/news/2003/apr/14.html
+http://www.saigon.com/~anson/ebud/bd8p/bd8p_15.htm
+http://www.saigon.com/~anson/ebud/ebdha219.htm
+http://www.saiia.org.za/modules.php?op=modload&name=News&file=article&sid=454
+http://www.saila.com/articles/privacy/?print
+http://www.sailboatlistings.com/
+http://www.sailing.co.za/oldfeat/2001/fa_2112.htm
+http://www.sailingissues.com/navcourse0.html
+http://www.sailingscuttlebutt.com/news/04/0302cabrall/
+http://www.sailnet.com/collections/articles/index.cfm?articleid=merric0018
+http://www.sailnet.com/collections/articles/index.cfm?articleid=suelar0226
+http://www.saint-andre.com/blog/2004-07.html
+http://www.saint-andre.com/blog/2005-01.html
+http://www.saint-lucia.com/st-lucia-hints.html
+http://www.saint-mike.org/library/Marriage/Marriage.html
+http://www.saintgeorgesbahamas.com/renewal.shtml
+http://www.saintgeorgeschurch.org/ministry_lmc.htm
+http://www.saintjoe.edu/life/srtk-ath-grad.html
+http://www.saintjoe.edu/life/srtk-grad.html
+http://www.saintmarys.edu/Services/InfoTech/News/
+http://www.saintmarys.edu/~resnet/belleaire/macosxwireless.html
+http://www.saintmatthewschurches.com/planofsalvation.html
+http://www.saintrescue.org/adopted_saint_bernards%202001.htm
+http://www.saints.org.sg/dyk54c.cfm
+http://www.saintsforever.com/bs1.html
+http://www.saintsforever.com/bs2.html
+http://www.saintsforever.com/hundred.html
+http://www.saipantribune.com/newsstory.aspx?newsID=47711&cat=2
+http://www.sairr.org.za/members/pub/ff/200011/crime/profit.htm
+http://www.sairr.org.za/members/pub/fof/1999q1/labour.htm
+http://www.sairr.org.za/members/pub/fof/2000q1/ngo.htm
+http://www.sairr.org.za/members/pub/fof/2000q1/riddance.htm
+http://www.sais-jhu.edu/Nanjing/new_students/benefits.shtml
+http://www.sais-jhu.edu/pubaffairs/media_events/Media_Advisories/MA2005/atlstorm05.html
+http://www.sais.gov.uk/forecast_archive/00-01/2001.03.17
+http://www.sais.gov.uk/forecast_archive/00-01/2001.03.25
+http://www.sais.gov.uk/forecast_archive/00-01/2001.03.27
+http://www.sajha.com/sajha/html/OpenThread.cfm?forum=116&ThreadID=4572
+http://www.sakhalinenergy.com/news/nws_updates.asp
+http://www.sakurasystems.com/articles/rs-a1.html
+http://www.sal.ksu.edu/safecon/about.html
+http://www.saladltd.co.uk/salad%20pages/Nlp%20tips/nlp_tip_5.htm
+http://www.salaf.indiaaccess.com/atheist/groundwork_on_islamic_philosophy.htm
+http://www.salagram.net/Japa1.htm
+http://www.salary.com/careers/layouthtmls/crel_display_nocat_Ser16_Par40.html
+http://www.salary.com/careers/layoutscripts/crel_display.asp?tab=cre&cat=nocat&ser=Ser18&part=Par42
+http://www.salas.com/work/resume.htm
+http://www.salcc.edu.lc/index.php?option=com_content&task=view&id=57&Itemid=105
+http://www.salem-audubon.org/refuge.html
+http://www.sales-train.com/Files/marketingtips.html
+http://www.sales-training-management-institute.com/
+http://www.salesandmarketingcoach.com/blog/archives/the_art_of_self_promotion/
+http://www.salesianmissions.org/salesians/st/sim.htm
+http://www.salesjobs.ie/mot_article.asp?aid=1
+http://www.salestaxinstitute.com/archiveMiscellaneous.jsp
+http://www.salestrainingtv.com/how_sellers.asp
+http://www.salford.ac.uk/course-finder/course/1337
+http://www.salgba.com/guidelines738.cfm
+http://www.saligad.org/fieldwork/garissa.html
+http://www.salliemae.com/forms/apporder.asp
+http://www.sallybedellsmith.com/kennedy-white-house/book-jacket.php
+http://www.sallys-place.com/beverages/coffee/expresso_machine.htm
+http://www.sallys-place.com/beverages/tea/solo_teas.htm
+http://www.sallys-place.com/food/ethnic_cusine/india.htm
+http://www.salon.com/books/feature/2001/01/16/quindlen/print.html
+http://www.salon.com/books/feature/2002/10/23/pearson/index1.html
+http://www.salon.com/books/feature/2004/03/22/midlist/
+http://www.salon.com/ent/?lid=ent_Bottom&lpos=Bottom_ent
+http://www.salon.com/mwt/feature/2005/06/08/bancroft_brooks/
+http://www.salon.com/mwt/feature/2005/06/10/warren/
+http://www.salon.com/mwt/letters/2002/09/16/heresy_letters/index1.html
+http://www.salon.com/news/feature/2003/04/14/ron_reagan/
+http://www.salon.com/news/feature/2004/01/13/moveon/
+http://www.salon.com/news/feature/2004/02/14/burkett/
+http://www.salon.com/news/feature/2004/06/14/panther/
+http://www.salon.com/news/feature/2004/11/05/viguerie/
+http://www.salon.com/news/feature/2005/01/12/srilanka2/
+http://www.salon.com/news/feature/2005/04/21/pyramid/
+http://www.salon.com/news/feature/2005/06/09/press_and_downing_street_memo/
+http://www.salon.com/news/sports/bounds/2001/08/30/kent/
+http://www.salon.com/news/wire/2005/02/05/missing_jet/
+http://www.salon.com/news/wire/2005/06/17/military_in_schools/
+http://www.salon.com/news/wire/2005/06/29/copter/
+http://www.salon.com/opinion/conason/2005/06/17/dsm_press/
+http://www.salon.com/people/bc/1999/06/01/gaskin/
+http://www.salon.com/people/bc/1999/10/05/gehry/print.html
+http://www.salon.com/people/feature/1999/09/01/comhell/print.html
+http://www.salon.com/politics/feature/2001/05/17/energy_plan/
+http://www.salon.com/tech/fsp/glossary/
+http://www.saloncity.com/marketplace.asp
+http://www.salsbook.com/lodge.htm
+http://www.salt.org.il/palc.html
+http://www.saltaire.org/chap28.html
+http://www.saltedwound.com/archives/001474.php
+http://www.saltedwound.com/archives/cat_general.php
+http://www.saltfilms.net/zababdeh/dec01.html
+http://www.saltinstitute.org/28.html
+http://www.salto-youth.net/seenews
+http://www.saltonsea.ca.gov/environ.htm
+http://www.saltshakers.com/myson/
+http://www.saltspring.com/capewest/ct.htm
+http://www.saltspring.com/capewest/mc.htm
+http://www.saltworks.us/salt_info/si_SaltAndGoodHealth.asp
+http://www.saludos.com/fields/biotech.html
+http://www.salvationarmy.org.nz/SITE_Default/SITE_family_support/Family_Store_article.asp
+http://www.salvationarmy.org.uk/en/Library/publications/salvationist/2004/2-21/Sal040221p07.htm
+http://www.salvationarmy.org.uk/en/Library/publications/warCry/2001/05-12/2001.05.12warcry_12-05-2001_p3.xml.htm
+http://www.salvationarmy.org.uk/en/Library/publications/warCry/2004/7-24/WC040724p02.htm
+http://www.salvos.com/saprincegeorge/corner.html
+http://www.samachar.com/features/160205-features.html
+http://www.samag.com/
+http://www.samarmagazine.org/archive/article.php?id=81
+http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/PolicyMgmt.html
+http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ServerType.html
+http://www.samesexmarriage.ca/advocacy/Saint_John_Pride2003.htm
+http://www.samesexmarriage.ca/advocacy/turin/KeesWaaldijk_2002.htm
+http://www.samesexmarriage.ca/legal/bill160205.htm
+http://www.samford.edu/groups/prelaw/applying.html
+http://www.samford.edu/schools/business/MBA/schedules.html
+http://www.samhorn.com/training_institute.html
+http://www.samizdat.com/curious.html
+http://www.samizdat.com/ebay5.html
+http://www.samizdat.com/experts.html
+http://www.samizdat.com/micah/orestes.html
+http://www.samizdat.com/rinkessay1.html
+http://www.samizdat.com/sand24.html
+http://www.samizdat.com/warren/rev6.html
+http://www.samizdat.qc.ca/vc/sexe/bergner_e.htm
+http://www.samizdata.net/blog/archives/002562.html
+http://www.samizdata.net/blog/archives/005297.html
+http://www.samizdata.net/blog/archives/007085.html
+http://www.samizdata.net/blog/archives/007569.html
+http://www.samizdata.net/blog/archives/007613.html
+http://www.samizdata.net/mt/mt-comments.cgi?entry_id=5297
+http://www.samizdata.net/mt/mt-comments.cgi?entry_id=6343
+http://www.samizdata.net/mt/mt-comments.cgi?entry_id=7452
+http://www.samizdata.net/mt/mt-comments.cgi?entry_id=7569
+http://www.samplesize.ca/writingArtMarkClintbergSar.html
+http://www.sampson.cc.nc.us/college/financia.html
+http://www.samsclub.com/eclub/main_shopping.jsp?coe=0&oidPath=0%3A-23541%3A-42532%3A-43371%3A-43377&mt=a&n=0
+http://www.samsclub.com/eclub/main_shopping.jsp?coe=0&oidPath=0%3A-23542%3A-23595%3A-36137%3A-36145%3A907621&mt=a&n=0
+http://www.samsclub.com/eclub/main_shopping.jsp?mt=a&n=0&coe=0&oidPath=0%3A-23542%3A-23595%3A-36137%3A-36145%3A907620
+http://www.samsclub.com/eclub/main_shopping.jsp?mt=a&n=0&coe=0&oidPath=0%3A-23542%3A-23595%3A-36137%3A-36145%3A907621
+http://www.samsclub.com/eclub/main_shopping.jsp?mt=a&n=0&coe=0&oidPath=0%3A-23542%3A-25822%3A-41015%3A933960
+http://www.samsclub.com/eclub/main_shopping.jsp?mt=a&n=0&coe=0&oidPath=0%3A-23542%3A-25822%3A-41015%3A933962
+http://www.samsloan.com/missusa.htm
+http://www.samspublishing.com/articles/article.asp?p=101316
+http://www.samspublishing.com/articles/article.asp?p=101760
+http://www.samspublishing.com/articles/article.asp?p=174379
+http://www.samspublishing.com/articles/article.asp?p=29742&seqNum=5
+http://www.samspublishing.com/articles/article.asp?p=30348
+http://www.samspublishing.com/articles/article.asp?p=360063&seqNum=2
+http://www.samuelbrittan.co.uk/spee19_p.html
+http://www.samuelbrittan.co.uk/spee24_p.html
+http://www.samuelfrench.com/store/product_info.php/products_id/1579
+http://www.samuelgriffith.org.au/papers/html/volume5/v5chap7.htm
+http://www.samurai-archives.com/mth.html
+http://www.san.beck.org/Life7-Imagination.html
+http://www.sanalz.org/BestFriendsApproachEffectiveinCareforAlzheimersPatients.htm
+http://www.sanbeiji.com/bass/
+http://www.sandgate-kent.org.uk/soilslip.htm
+http://www.sandhillsonline.com/content.php/303/60
+http://www.sandia.gov/materials/sciences/goodnews.htm
+http://www.sandidahlpaintings.com/artist.htm
+http://www.sandiegodvunit.org/article4.htm
+http://www.sandiegomag.com/issues/february05/featurea0205.asp
+http://www.sandiegomag.com/issues/jan96/bowlme.shtml
+http://www.sandiegomag.com/issues/september04/business0904.asp
+http://www.sandiegostories.com/archives/2004/05/
+http://www.sandiegostories.com/archives/2004/05/fourfinger_fran.html
+http://www.sandisk.com/retail/drivers-sddr-7x.asp
+http://www.sandnsea.com/guidelines.html
+http://www.sandy-balls.co.uk/latest_news.asp
+http://www.sandylane.com/retreats/
+http://www.sandyloan.f2s.com/Newsletter%2001.htm
+http://www.sandyspringbank.com/ps_pb.htm
+http://www.sanfordrose.com/update/january1999.htm
+http://www.sangam.org/NEWSEXTRA/Ganesh08_26_02.htm
+http://www.sangrea.net/bully/selfhelp.php
+http://www.sanjose.org/meetingplanners/meeting_hotels.asp
+http://www.sanjoseca.gov/cty_clk/3_6_01D_5.htm
+http://www.sanjosejazz.org/Festivalpress.html
+http://www.sanjosepeace.org/action_alerts.htm
+http://www.sanjuanbasintechschool.org/about.htm
+http://www.sankaranethralaya.org/care_eyecare.htm
+http://www.sanlam.co.za/eng/newsreports/moneymatters/money+matters+july+2004.htm
+http://www.sanluisobispo.com/mld/sanluisobispo/news/local/10344848.htm
+http://www.sanluisobispo.com/mld/sanluisobispo/news/politics/11919428.htm
+http://www.sanmarcos.net/ana/analysis.html
+http://www.sanpedrosun.net/old/stpetersinau.html
+http://www.sanramonobserver.org/default.asp
+http://www.sans.org/newsletters/newsbites/newsbites.php?vol=6&issue=24
+http://www.sans.org/resources/popular.php
+http://www.sant.ox.ac.uk/princeton/pap_nielsen.shtml
+http://www.santa-clarita.com/cityhall/council/marchapril.htm
+http://www.santa-clarita.com/cityhall/parks/straight.asp
+http://www.santa-claus-lane.com/newpage16.htm
+http://www.santacruzchronicles.com/smbk.html
+http://www.santacruzguide.com/top.cgi/features/music01.html
+http://www.santacruzsentinel.com/archive/2003/December/20/biz/stories/01biz.htm
+http://www.santacruzsentinel.com/archive/2003/October/20/biz/stories/01biz.htm
+http://www.santacruzsentinel.com/archive/2004/December/30/sport/stories/04sport.htm
+http://www.santacruzsentinel.com/archive/2004/October/21/sport/stories/03sport.htm
+http://www.santaland.com/tradit.html
+http://www.santapaulatimes.com/news/fullstory.php/aid/7954/Letters_to_the_Editor.html
+http://www.santateresacitizen.org/
+http://www.santeecooper.com/environment/vegmanagement/vegetation_faq.html
+http://www.saorsamedia.com/shop/wise.html
+http://www.sap.com/australia/services/education/venues/index.aspx
+http://www.sap.com/australia/text/services/education/venues/index.aspx
+http://www.sap.com/france/company/press/press.aspx?PressID=4516
+http://www.sap.com/text/company/investor/faq/index.epx
+http://www.sappex.org.za/environmental_factors_affecting_proteas.php
+http://www.sapphireblue.com/dangerousart/2002_11.php
+http://www.sapphirecoast.com.au/whales/about.htm
+http://www.saprin.org/zimbabwe/zimbabwe_forum1.htm
+http://www.sapsis-rigging.com/NSTTerms.html
+http://www.sar.org/about/committs.htm
+http://www.saracity.com/scwedu/group_certif.html
+http://www.sarahhatter.com/
+http://www.sarahsmiley.com/Faqs.htm
+http://www.sarahsmiley.com/Resources.htm
+http://www.saraleecoffeetea.com/legal.asp
+http://www.saranam.com/Help/help6.asp
+http://www.sarantakos.com/bridge/kapnuggets80-84.htm
+http://www.sararegistry.gc.ca/gen_info/HTML/Regs_e.cfm
+http://www.sarasamusic.org/outreach/concerts/2005-04westboro-reception-unit.shtml
+http://www.sarasotanewsandbooks.com/February%20events.htm
+http://www.sarbc.org/hypo2.html
+http://www.sardi.sa.gov.au/pages/horticulture/about_hort/hort_about_costirri.htm:sectID=446&tempID=79
+http://www.sare.org/sanet-mg/archives/html-home/10-html/0210.html
+http://www.sarkanniemi.fi/oppimateriaali/eng_spe1.html
+http://www.saroff.com/ratings/bodyguards/executive-protection-dog.htm
+http://www.saroff.com/ratings/bodyguards/private-security-firm.htm
+http://www.sarr.org/coaddicts/dealing_with_a_husband.htm
+http://www.sars.gov.za/v_a_t/vatnews/vat_news_1.htm
+http://www.sars.no/embocourse/subjects4.html
+http://www.sartma.com/art_35_11_102_2.html
+http://www.sartma.com/artd_1309_12_2004_9.html
+http://www.sarvodaya.org/divisions/sarvodaya-legal/implementation-of-legal-empowerment/
+http://www.sarvodaya.org/philosophy/collected-works-vol-1/100-village-development/
+http://www.sarvodaya.org/philosophy/collected-works-vol-2/role-of-shramadana-in-rural-development/
+http://www.sas.ac.uk/ies/events/confs/Capital1700-2000/Capital1700-2000.htm
+http://www.sas.ac.uk/igs/HPEXILECENTRE.htm
+http://www.sas.ac.uk/warburg/Fellowships/Shortt.htm
+http://www.sas.com/news/sascom/2004q4/column_1to1.html
+http://www.sas.com/offices/europe/belux/customer/cust_fortis.html
+http://www.sas.com/success/ambgenerali.html
+http://www.sas.com/success/bcbsfla_abm.html
+http://www.sas.com/success/hbos.html
+http://www.sas.com/success/lot.html
+http://www.sas.com/success/royalbankscotland.html
+http://www.sas.com/success/westlb.html
+http://www.sas.org.uk/papers/envirosub.asp
+http://www.sas.upenn.edu/African_Studies/Hornet/strp_jul99.html
+http://www.sas.upenn.edu/African_Studies/Hornet/welo0598.html
+http://www.sas.upenn.edu/African_Studies/eue_web/Elect_r5.htm
+http://www.sas.upenn.edu/CGS/summer/highschool/pssa/forensic.php
+http://www.sas.upenn.edu/elp/programs/intensive/courses/intensive_advanced.php
+http://www.sas.upenn.edu/elp/programs/intensive/courses/intensive_intermediate.php
+http://www.sas.upenn.edu/elp/programs/intensive/courses/si-evening_courses.php
+http://www.sas.upenn.edu/sasalum/newsltr/fall96/numbers.html
+http://www.sas.upenn.edu/~baron/cvcost.html
+http://www.sas.upenn.edu/~baron/p399.htm
+http://www.sasb.org.au/Sivarajan.html
+http://www.saschools.co.za/brooklyn/extra_curricular.htm
+http://www.sasexpo.org/2004/schedule.htm
+http://www.sasexpo.org/2005/schedule.htm
+http://www.saskarchives.com/web/pub-bulletin-7.html
+http://www.saskatoonhealthregion.ca/your_health/ch_sch_emergency.htm
+http://www.saskatoonhealthregion.ca/your_health/ps_primary_health.htm
+http://www.sasked.gov.sk.ca/docs/ela/speaking01.html
+http://www.sasked.gov.sk.ca/docs/history20/asses.html
+http://www.sasked.gov.sk.ca/docs/mla/actiii.html
+http://www.sasked.gov.sk.ca/docs/mla/listen.html
+http://www.sasktrade.sk.ca/conference/2004/schedule.shtml
+http://www.sassyclassics.com/necklaces2.htm
+http://www.sassyclassics.com/watches.htm
+http://www.sassyclassics.com/watches2.htm
+http://www.sasvr.com/ttonsite/pages/va_d1diary02.html
+http://www.sat.dundee.ac.uk/~arb/cpc/century.html
+http://www.sat7.org/downloads/Newsletter%20-%20October.htm
+http://www.satacademy.org/terms.php
+http://www.satanservice.org/coe/sermons/txt.smnhvnsgat
+http://www.satanservice.org/coe/suicide/guide/
+http://www.satcure-focus.com/design/page1.htm
+http://www.satelliteguys.us/archive/index.php/t-43829.html
+http://www.satgtu.org/comments.htm
+http://www.satinslippers.com/library/topic.asp?TOPIC_ID=744
+http://www.satisfice.com/articles.shtml
+http://www.satoripublishing.com/puzzles/
+http://www.satp.org/satporgtp/countries/bangladesh/terroristoutfits/PBCP.htm
+http://www.satpracticetest.us/verbal/critical_reading/tips_and_advice.htm
+http://www.satyamag.com/apr03/khosla.html
+http://www.satyamag.com/jan01/lyman.html
+http://www.saudervillage.com/History/markmatthews.asp
+http://www.saudi-us-relations.org/Fact_Sheets/TimelineTerrorism.html
+http://www.saudia-online.com/news2004/nov04/news01.shtml
+http://www.saudia-online.com/press/Netvista.shtml
+http://www.saudiaramcoworld.com/issue/197906/arab.aid-who.gives.it.htm
+http://www.sauer-thompson.com/
+http://www.savannahnow.com/exchange/stories/051603/EXCWALKINGTOUR.shtml
+http://www.savannahnow.com/exchange/stories/112102/EXClocalbizbriefs.shtml
+http://www.savaspublishing.com/10-08-03.html
+http://www.savecamphill.org.uk/news_items2.htm
+http://www.savecommunities.org/youcando.html
+http://www.savedisney.com/news/features/fe083104.1.asp
+http://www.saveenterprise.com/forum2/index.php?showtopic=2944&view=getlastpost
+http://www.saveenterprise.com/forum2/lofiversion/index.php/t2643.html
+http://www.savefenwaypark.com/news_detail.cfm?ID=241&SORTBY=ID%20DESC
+http://www.savemartha.com/
+http://www.savemoneyoncars.co.uk/cheap_new_cars/Mazda/
+http://www.savemoneyoncars.co.uk/cheap_new_cars_display/Ford/Streetka/
+http://www.saveonfoods.com/1/brightlife/healthy_eating/fiber.htm
+http://www.saveonfoods.com/1/brightlife/healthy_eating/sd_infant_nutrition.htm
+http://www.saveonscents.com/
+http://www.saveontests.com/terms_and_conditions.htm
+http://www.saveourearth.co.uk/soe_enews.php?number=13
+http://www.savethechildren.org/mothers/report_2005/lesson_plan.asp
+http://www.savethekoala.com/kidscornerstories.html
+http://www.savethemales.ca/000298.html
+http://www.savethemales.ca/000319.html
+http://www.savethemales.ca/120602.html
+http://www.savewealth.com/planning/estate/livingtrusts/
+http://www.savingchildhood.org/common/embeddedContent/chEmbedded?embeddedObjectId=31333&fulltext=true
+http://www.savingsandclone.com/ethics/debates4.html
+http://www.savvypatients.com/supplements.htm
+http://www.sawadee.com/samui/samuiparadise/
+http://www.sawhillkitchens.com/started.html
+http://www.saxmundham.org/aboutsax/henrybright.html
+http://www.saxton.com.au/default.asp?nc8=150&sc8=161
+http://www.sayhomebusiness.com/home-business.html
+http://www.sayido.com/privacy.asp
+http://www.sayplanning.com/sayimprove/exterior/siding.html
+http://www.saysuncle.com/archives/2003/01/
+http://www.saysuncle.com/archives/category/civil_liberties/
+http://www.sba.muohio.edu/sba_home/faculty/resources/teacher_eval_policy.asp
+http://www.sbac.edu/~ir/
+http://www.sbbike.org/SBBC/policies.html
+http://www.sbcamping.org/templates/cussbca/Details.asp?id=1882&PID=7165
+http://www.sbcannualmeeting.org/sbc99/news58.htm
+http://www.sbgh.mb.ca/campus_sbgh/LaboratorySvcs/index_BloodBank.html
+http://www.sbhla.org/coll.htm
+http://www.sbls.org/gbufs3.htm
+http://www.sbm.org/ebbm/sbmconference.html
+http://www.sbmahimalaya.org/babies/babies_rachna.htm
+http://www.sbministries.org/music.html
+http://www.sbomagazine.com/sbomag/nov02/technology.html
+http://www.sbp-movie-reviews.com/rev_eyeswideshut.htm
+http://www.sbpoet.com/2004/10/debate_blogging_2.html
+http://www.sbrc.ca/framekardami.htm
+http://www.sbrnet.com/order_form.htm
+http://www.sbs.co.za/imesa2004/imesa2004_welcome.htm
+http://www.sbs.co.za/wcce2005/icool/icool.html
+http://www.sbs.com/pressroom/85
+http://www.sbs.gov.uk/entareas/productivityUKpage4.php
+http://www.sbt.siemens.com/FIS/products/sysintel.asp
+http://www.sbwr.org.sg/wetlands/text/98-5-1-3.htm
+http://www.sc.ca.lp.org/scl/9811-chair.html
+http://www.sc.edu/eop/sexharassment.html
+http://www.sc.edu/policies/hr124.html
+http://www.sc.eso.org/santiago/science/sentable.html
+http://www.scad.edu/thechronicle/archive/vol_5/04_15/sports.html
+http://www.scadathletics.com/programs/basketball/womens/index.php?story=all_headlines
+http://www.scadathletics.com/programs/soccer/mens/index.php?story=all_headlines
+http://www.scadathletics.com/programs/soccer/womens/index.php?story=all_headlines
+http://www.scae.com/default.asp?page=viewnews&cat=Miscellaneous+Document&nid=482
+http://www.scalecraft.com/index.asp?PageAction=Custom&ID=4
+http://www.scalesgalore.com/tmulti.htm
+http://www.scalzi.com/whatever/002576.html
+http://www.scalzi.com/whatever/002625.html
+http://www.scalzi.com/whatever/003582.html
+http://www.scalzi.com/whatever/003585.html
+http://www.scalzi.com/whatever/2003_03.html
+http://www.scalzi.com/whatever/2003_07.html
+http://www.scam.com/showthread.php?mode=hybrid&t=1262
+http://www.scam.com/showthread.php?t=1262&page=3
+http://www.scam.com/showthread.php?t=1262&page=3&pp=10
+http://www.scam.com/showthread.php?t=840
+http://www.scam.com/showthread.php?t=840&page=1
+http://www.scambusters.org/Scambusters59.html
+http://www.scamecanica.com/czar/CzarHelp/window/main.html
+http://www.scamorama.com/bourbon.html
+http://www.scamorama.com/darkman_acme.html
+http://www.scamorama.com/marmite_okon.html
+http://www.scamorama.com/pencil.html
+http://www.scamorama.com/strog_ezeh.html
+http://www.scan.co.uk/Terms.ASP
+http://www.scandals.org/derekchristian/brd41.html
+http://www.scandinaviahouse.org/programs.html
+http://www.scandinavianseminar.org/index.php?id=101
+http://www.scandinavica.com/
+http://www.scandoil.com/moxie/news/world_news/100m-boost-for-great-brit.shtml
+http://www.scanning-fams.org/scanabstracts/SCANNING98/20318.shtml
+http://www.scansoft.co.uk/news/20031013_speechify.asp
+http://www.scansoft.com.au/news/20031013_speechify.asp
+http://www.scansoft.com/company/ir/earnings/20000510_q1.asp
+http://www.scansoft.com/news/pressreleases/2003/20031009_speechifyjill.asp
+http://www.scaper.com/fanfiction/daddysgirl.html
+http://www.scar.utoronto.ca/~lifesci/psych-handbook/FAQ.html
+http://www.scarborough.gov.uk/content/planning/planning_apps_comm.html
+http://www.scarboroughtoday.co.uk/ViewArticle2.aspx?SectionID=800&ArticleID=937259
+http://www.scaredycatstalker.com/recipes2.html
+http://www.scarletpixel.com/
+http://www.scaryplace.com/HauntedTheater.html
+http://www.scavenger-hunt-idea.com/kids-hunt.html
+http://www.scbar.org/member/conductrule.asp?rule=3.6
+http://www.scc.rutgers.edu/serbian_digest/227/t227-1.htm
+http://www.sccoe.k12.ca.us/events/2005/sos/
+http://www.scconline.org/education/publications/journal_54_1.htm
+http://www.sccs.swarthmore.edu/users/06/adem/engin/e28/labs/lab1/
+http://www.sccyc.org/general_information.htm
+http://www.scdi.org.uk/page.php?id=1275
+http://www.sceida.org/03212001.htm
+http://www.scena.org/lsm/sm7-7/technique-en.html
+http://www.scenic.org/contextsensitive/modelcsslegislation.htm
+http://www.scenic7byway.com/postnuke/index.php?module=ContentExpress&file=index&func=display&ceid=19&meid=34
+http://www.scenichudson.org/press/announcements/details.cfm?ID=87&topic=cement&type=REL
+http://www.scfc.co.uk/scarlet12.html
+http://www.scgameandfish.com/
+http://www.sch3.net/POMH3_runs0017.htm
+http://www.schaeffersresearch.com/commentary/dailycontrarian.aspx?click=home&newsid=1801
+http://www.schema.com/pressShow.asp?id=101&year=
+http://www.schenectadyhistory.org/resources/patent/15.html
+http://www.schenectadyhistory.org/resources/ripley-ss/
+http://www.schick-shadel.com/addiction.asp
+http://www.schickele.com/
+http://www.schmoozeletter.com/schmoozeletter/html/81.html
+http://www.schneider-electric.com/en/Careers/Career_prospects/Spotlight/HIDDEN_New_Fiche3/HIDDEN_New_Fiche3.html
+http://www.schneier.com/blog/archives/2005/02/sha1_broken.html
+http://www.schneier.com/blog/archives/2005/03/garbage_cans_th.html
+http://www.schneier.com/blog/archives/2005/04/security_tradeo.html
+http://www.schneier.com/blog/archives/2005/04/wifi_minefield.html
+http://www.schneier.com/crypto-gram-0308.html
+http://www.schneier.com/crypto-gram-0410.html
+http://www.schneier.com/crypto-gram-0505.html
+http://www.schneier.com/crypto-gram-9909.html
+http://www.schneier.com/paper-blowfish-fse.html
+http://www.schnews.org.uk/diyguide/howtodoofficework.htm
+http://www.schofields.ltd.uk/Policy_Details/Overseas/overseas.htm
+http://www.schola-tutorials.com/faq.htm
+http://www.scholars.nus.edu.sg/landow/post/pakistan/literature/rushdie/srpolitics2.html
+http://www.scholars.nus.edu.sg/literature/macaulay.html
+http://www.scholars.nus.edu.sg/sep/students/bbonus/p3.html
+http://www.scholars.rotary1040.org/leeds_2004_report.htm
+http://www.scholastic.co.uk/zone/book_allys-world.htm
+http://www.scholastic.com/earlylearner/age3/childcare/pre_timealonetog.htm
+http://www.scholastic.com/earlylearner/age4/learning/abstractthinking.htm
+http://www.scholastic.com/earlylearner/age5/learning/abstractthinking.htm
+http://www.scholastic.com/earlylearner/experts/behavior/3_5_listenfollowdir.htm
+http://www.scholastic.com/familymatters/parentguides/schoolinvolve/fundraising.htm
+http://www.scholastic.com/familymatters/parentguides/summer/librariantips.htm
+http://www.scholastic.com/familymatters/read/gr3_5/readskills.htm
+http://www.school-for-champions.com/senses/6thexperiments.htm
+http://www.school.gr/learning/euro.htm
+http://www.schoolchoices.org/roo/fried1.htm
+http://www.schoolchoices.org/roo/sted1.htm
+http://www.schoolconstructionnews.com/index.cfm?do=otm&action=archive&otm_id=175
+http://www.schoolfriend.co.uk/subscription/schoolreg.asp
+http://www.schoolfunding.info/states/nc/lit_nc.php3
+http://www.schoolfunding.info/states/wi/7-7-04walk.php3
+http://www.schoolgovernors-oss.org.uk/individual.htm
+http://www.schoolhistory.co.uk/help/serverstatus.shtml
+http://www.schoolhousesoftware.com/company_top.htm
+http://www.schoolmatch.com/articles/technos.htm
+http://www.schooloftheseasons.com/aprdays1.html
+http://www.schoolredesign.net/srn/server.php?idx=684
+http://www.schoolredesign.net/srn/server.php?idx=854
+http://www.schoolredesign.net/srn/server.php?idx=854&page=1&open=850
+http://www.schoolreport.com/schoolreport/articles/choice_for_teachers_03_02.htm
+http://www.schools-of-interior-design.com/Interior-Design-vs.-Interor-Decorating.htm
+http://www.schools.ash.org.au/litweb/gender.html
+http://www.schools.nsw.edu.au/schoollibraries/scan/15_1996/moore.htm
+http://www.schools.nt.edu.au/howardsp/webquests/SuperSpeciesSaver/supersp.htm
+http://www.schoolscience.co.uk/content/4/biology/abpi/skin/skin3.html
+http://www.schoolscience.co.uk/questions/5/biology/faqresearch.asp
+http://www.schoolscience.co.uk/teachers/chemclub/chemclub3_4.html
+http://www.schoolsintheusa.com/careerprofiles_details.cfm?carid=1080
+http://www.schoolworld.asn.au/members/members.html
+http://www.schoolzone.co.uk/resources/articles/Career/Training/Quality_SEN.asp
+http://www.schoolzone.co.uk/resources/evaluations/printcon.asp?p=GRAN-1844410935
+http://www.schott.com/english/company/annual_reporting/j02-03/units.html
+http://www.schs.state.nc.us/SCHS/CCR/Article_7.html
+http://www.schulers.com/books/stories/Famous_Modern_Ghost_Stories/Famous_Modern_Ghost_Stories10.htm
+http://www.schulich.yorku.ca/ssb-extra/bba.nsf/0/28f5fe24c0c45ddd85256ace004fc3a3?OpenDocument
+http://www.schulich.yorku.ca/ssb-extra/school.nsf/0/016dc3b05647562585256ed00067abe6?OpenDocument
+http://www.schulich.yorku.ca/ssb-extra/school.nsf/0/11e5695ea36cecf985256b8e0063c1eb?OpenDocument
+http://www.schwablearning.org/articles.asp?r=316&g=2
+http://www.schweser.com/faq/repeating.php
+http://www.schweser.com/help/return_policy_2005.php
+http://www.schweser.com/help/terms_conditions.php?terms_level=cfa1
+http://www.schweser.com/news/announcements.php?announcement_id=154
+http://www.schweser.com/products/products.php?category=STRATEGIES
+http://www.schweser.com/products/products.php?category=SUPERCHAT
+http://www.sci-eng.mmu.ac.uk/igds/programme.asp
+http://www.sci-journal.org/index.php?template_type=report&id=15&htm=reports/vol4no2/v4n2a1.html&link=reports/home.php
+http://www.sci.sdsu.edu/classes/bio508/RUBRICS.html
+http://www.sciam.com/
+http://www.sciam.com/article.cfm?articleID=0005930F-3978-10AE-B97883414B7FFE9F
+http://www.sciam.com/article.cfm?articleID=000806D1-24E2-1C75-9B81809EC588EF21
+http://www.sciam.com/article.cfm?articleID=0008E453-D7E5-1113-B94183414B7F4945
+http://www.sciam.com/article.cfm?articleID=000BC08E-5B8C-1D2B-97CA809EC588EEDF
+http://www.sciam.com/article.cfm?articleID=000E555C-4387-1237-81CB83414B7FFE9F
+http://www.sciam.com/page.cfm?section=magazine
+http://www.sciconf.igbp.kva.se/Amsterdam_Declaration.html
+http://www.scics.gc.ca/cinfo02/830754004_e.html
+http://www.scidev.net/Editorials/index.cfm?fuseaction=readEditorials&itemid=148&language=1
+http://www.scidev.net/editorials/index.cfm?fuseaction=printarticle&itemid=143&language=1
+http://www.scidev.net/gateways/index.cfm?fuseaction=printarticle&rgwid=3&item=Editorials&itemid=143&language=1
+http://www.scidev.net/gateways/index.cfm?fuseaction=printarticle&rgwid=6&item=Editorials&itemid=143&language=1
+http://www.scie.org.uk/publications/practiceguides/fostering/education/index.asp
+http://www.scielo.br/scielo.php?pid=S0103-97332000000300012&script=sci_arttext&tlng=en
+http://www.scielo.br/scielo.php?pid=S0104-59702005000400014&script=sci_arttext&tlng=en
+http://www.scielo.br/scielo.php?pid=S0104-65001998000100006&script=sci_arttext&tlng=en
+http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0004-27492003000600014
+http://www.scielo.br/scielo.php?script=sci_arttext&pid=S1516-31801999000200004
+http://www.scielo.cl/scielo.php?pid=S0716-078X2001000200017&script=sci_arttext&tlng=en
+http://www.scielosp.org/scielo.php?pid=S0042-96862002000700011&script=sci_arttext&tlng=en
+http://www.science-house.org/admin/AnnualRept97.html
+http://www.science-spirit.org/articles/archive_cm_detail.cfm?item_id=184
+http://www.science.ca/scientists/scientistprofile.php?pID=16
+http://www.science.doe.gov/SC-80/trail/history.htm
+http://www.science.doe.gov/grants/
+http://www.science.doe.gov/informationtechnologymgmt/html/faq.htm
+http://www.science.edu.sg/ssc/detailed.jsp?artid=2679&type=6&root=5&parent=5&cat=54
+http://www.science.mcmaster.ca/Biology/Harbour/SPECIES/BEETLES/HAMIL.HTM
+http://www.science.org.au/nova/075/075key.htm
+http://www.science.org.au/proceedings/emergingdiseases/geering.htm
+http://www.science.org.au/proceedings/emergingdiseases/wright.htm
+http://www.science.widener.edu/~bramer/chemconf/
+http://www.scienceagogo.com/news/19990926192456data_trunc_sys.shtml
+http://www.scienceblog.com/community/older/2003/C/2003892.html
+http://www.scienceblog.com/community/older/2003/G/20035450.html
+http://www.scienceblog.com/community/older/archives/L/1997/A/un970079.html
+http://www.scienceblog.com/community/older/archives/L/2000/A/un000504.html
+http://www.scienceblog.com/community/older/archives/L/2001/A/un010122.html
+http://www.scienceblog.com/community/older/archives/L/2001/A/un010131.html
+http://www.scienceblog.com/community/older/archives/L/2001/A/un010146.html
+http://www.scienceblog.com/community/older/archives/L/2001/B/un011014.html
+http://www.scienceblog.com/community/older/archives/L/2001/B/un011535.html
+http://www.scienceblog.com/community/older/archives/L/2002/B/un021756.html
+http://www.sciencecityyork.org.uk/DynNews/news_archive.cfm
+http://www.sciencecityyork.org.uk/community/
+http://www.sciencecityyork.org.uk/dynnews/News_Details.cfm?NewsID=150
+http://www.sciencedaily.com/
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0130979538
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=020532178X
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0425098478
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0471271136
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0471272353
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0765703424
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0807508683
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemLookup&ItemId=0878148256
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?Operation=ItemSearch&SearchIndex=Books&Author=Hsiao-Wuen+Hon
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?myOperation=Collectible&ItemId=078173584X
+http://www.sciencedaily.com/cgi-bin/apf4/amazon_products_feed.cgi?myOperation=Used&ItemId=0670031550
+http://www.sciencedaily.com/news/mind_brain/
+http://www.sciencedaily.com/print.php?url=/releases/2005/01/050106092140.htm
+http://www.sciencedaily.com/releases/2000/09/000927144349.htm
+http://www.sciencedaily.com/releases/2000/11/001122182036.htm
+http://www.sciencedaily.com/releases/2003/11/031111064658.htm
+http://www.sciencedaily.com/releases/2005/01/050106092140.htm
+http://www.sciencedaily.com/releases/2005/02/050205092829.htm
+http://www.sciencedaily.com/releases/2005/02/050223135558.htm
+http://www.sciencedaily.com/releases/2005/04/050425205316.htm
+http://www.sciencedaily.com/releases/2005/05/050518175350.htm
+http://www.sciencedaily.com/releases/2005/06/050605234633.htm
+http://www.sciencedaily.com/releases/2005/06/050614000600.htm
+http://www.sciencedaily.com/releases/2005/06/050619122634.htm
+http://www.sciencedaily.com/upi/index.php?feed=Science&article=UPI-1-20050607-13155900-bc-us-wimax.xml
+http://www.sciencedaily.com/upi/index.php?topic=labour&subtopic=advanced+training
+http://www.sciencefictionblog.com/
+http://www.scienceforums.net/forums/showpost.php?p=124271&postcount=6
+http://www.sciencefriday.com/kids/sfkc20021227-2.html
+http://www.sciencefriday.com/kids/sfkc20030110-1.html
+http://www.sciencefriday.com/kids/sfkc20030530-2.html
+http://www.sciencefriday.com/kids/sfkc20031205-2.html
+http://www.sciencefriday.com/kids/sfkc20040123-1.html
+http://www.sciencefriday.com/kids/sfkc20040319-1.html
+http://www.sciencefriday.com/kids/sfkc20040416-2.html
+http://www.sciencefriday.com/kids/sfkc20040924-2.html
+http://www.scienceinafrica.co.za/2001/august/edge.htm
+http://www.scienceinafrica.co.za/2002/august/tea.htm
+http://www.scienceinafrica.co.za/newtech.htm
+http://www.scienceinafrica.co.za/scicrisis.htm
+http://www.sciencemag.org/cgi/content/full/291/5512/2318a
+http://www.sciencemag.org/cgi/content/full/304/5668/196a
+http://www.sciencemag.org/cgi/content/full/304/5668/197
+http://www.sciencemag.org/cgi/content/full/307/5708/364
+http://www.sciencemediacentre.org/press_releases/07-21-04_savioursiblings.htm
+http://www.sciencenetlinks.com/lessons.cfm?BenchmarkID=4&DocID=415
+http://www.sciencenetlinks.com/lessons.cfm?DocID=26
+http://www.sciencenetlinks.com/lessons.cfm?DocID=415
+http://www.sciencenetlinks.com/lessons_printable.cfm?DocID=404
+http://www.sciencenetlinks.org/lessons.cfm?BenchmarkID=5&DocID=411
+http://www.sciencenetlinks.org/lessons.cfm?BenchmarkID=8&DocID=27
+http://www.sciencenetlinks.org/lessons.cfm?BenchmarkID=8&DocID=28
+http://www.sciencenetlinks.org/resources_individual.cfm?DocID=346&Grade=6-8&Benchmark=5
+http://www.sciencenetlinks.org/resources_individual.cfm?DocID=357&Grade=9-12&Benchmark=4
+http://www.sciencenetlinks.org/sci_update.cfm?DocID=117
+http://www.sciencenetlinks.org/sci_update.cfm?DocID=163
+http://www.sciencenetlinks.org/sci_update.cfm?DocID=236
+http://www.sciencenews.org/20000219/bob1.asp
+http://www.sciencenews.org/20000826/bob1.asp
+http://www.sciencenews.org/20000923/bob1.asp
+http://www.sciencenews.org/20020209/bob8.asp
+http://www.sciencenews.org/articles/20000226/bob10.asp
+http://www.sciencenews.org/articles/20001014/food.asp
+http://www.sciencenews.org/articles/20001111/food.asp
+http://www.sciencenews.org/articles/20011020/mathtrek.asp
+http://www.sciencenews.org/articles/20030802/bob8.asp
+http://www.sciencenews.org/articles/20031213/bob9.asp
+http://www.sciencenews.org/articles/20040731/bob8.asp
+http://www.sciencenews.org/articles/20041016/bob10.asp
+http://www.sciencenews.org/articles/20041113/food.asp
+http://www.sciencenews.org/articles/20050305/food.asp
+http://www.sciencenews.org/pages/sn_arc98/12_12_98/mathland.htm
+http://www.sciencenews.org/sn_arch/11_23_96/bob1.htm
+http://www.sciencenewsforkids.org/articles/20031126/Feature1.asp
+http://www.sciencenewsforkids.org/articles/20040505/Feature1.asp
+http://www.sciencenewsforkids.org/articles/20041222/Note2.asp
+http://www.sciencenewsforkids.org/articles/20050105/Feature1.asp
+http://www.sciencentral.com/articles/view.php3?article_id=218392318&cat=1_3
+http://www.sciencentral.com/articles/view.php3?article_id=218392367&cat=1_5
+http://www.scienceonline.co.uk/energy/meals.html
+http://www.sciences.univ-nantes.fr/info/perso/permanents/khammaci/
+http://www.scienceteacher.org/otresources/interviews.htm
+http://www.scienceteacherprogram.org/biology/Paul00-3.html
+http://www.sciencewatch.com/july-aug2000/sw_july-aug2000_page1.htm
+http://www.sciencewatch.com/march-april99/sw_march-april99_page3.htm
+http://www.sciencewatch.com/sept-oct2002/sw_sept-oct2002_page8.htm
+http://www.scientifictrader.com/stock_trading_strategy.htm
+http://www.scientologyhandbook.org/sh4_3.htm
+http://www.scientwists.com/1_experiments_1.html
+http://www.scif.com/news-info/lc-bulletins/office_lighting.htm
+http://www.scifair.org/ideas/index.shtml
+http://www.scifi.com/battlestar/bts/hatch/
+http://www.scifi.com/scifiction/classics/classics_archive/moore/moore1.html
+http://www.scifi.com/scifiction/classics/classics_archive/sheckley/sheckley1.html
+http://www.scifi.com/terms/termsofservice.html
+http://www.scifi.com/transcripts/MorganWong.html
+http://www.sciforum.hu/index.php?image=update&content=upvizi
+http://www.sciforums.com/archive/index.php/t-42535
+http://www.sciforums.com/showthread.php?goto=lastpost&t=46144
+http://www.sciforums.com/showthread.php?t=30523&goto=nextnewest
+http://www.sciforums.com/showthread.php?t=40486&page=3
+http://www.sciforums.com/showthread.php?t=42535
+http://www.scim.org/curoct99.htm
+http://www.scip.org/05annual/sessionstechniques.asp
+http://www.sciquip.com/browses/AlphaBrowses/listingA.asp
+http://www.sciscoop.com/
+http://www.sciscoop.com/story/2002/12/31/73140/525
+http://www.sciscoop.com/story/2003/2/10/7368/86418
+http://www.sciscoop.com/story/2003/8/15/25038/4626
+http://www.sciscoop.com/story/2004/12/10/112538/62
+http://www.sciscoop.com/story/2004/3/19/63135/3192
+http://www.sciscoop.com/story/2004/9/6/203523/1781
+http://www.sciserv.org/isef/results/grnd2003.asp
+http://www.sciserv.org/isef/results/sao2003.asp
+http://www.scism.sbu.ac.uk/law/Section4/sec4/s4c3p3.html
+http://www.scitechdaily.com/
+http://www.scity.org/life_science_park.asp
+http://www.sciway.net/facts/
+http://www.scld.org.uk/
+http://www.scld.org.uk/index.asp
+http://www.scoba.us/resources/sac-economy.asp
+http://www.scom.com/ourservices.asp?id=190
+http://www.scoop.co.nz/
+http://www.scoop.co.nz/international.htm
+http://www.scoop.co.nz/mason/stories/BU0406/S00081.htm
+http://www.scoop.co.nz/mason/stories/BU0502/S00217.htm
+http://www.scoop.co.nz/mason/stories/HL0208/S00068.htm
+http://www.scoop.co.nz/mason/stories/HL0408/S00313.htm
+http://www.scoop.co.nz/stories/BU0506/S00255.htm
+http://www.scoop.co.nz/stories/BU0507/S00021.htm
+http://www.scoop.co.nz/stories/CU0210/S00198.htm
+http://www.scoop.co.nz/stories/CU0506/S00068.htm
+http://www.scoop.co.nz/stories/CU0506/S00141.htm
+http://www.scoop.co.nz/stories/HL0205/S00091.htm
+http://www.scoop.co.nz/stories/HL0307/S00064.htm
+http://www.scoop.co.nz/stories/HL0307/S00078.htm
+http://www.scoop.co.nz/stories/HL0411/S00083.htm
+http://www.scoop.co.nz/stories/HL0505/S00325.htm
+http://www.scoop.co.nz/stories/HL0506/S00146.htm
+http://www.scoop.co.nz/stories/HL0506/S00335.htm
+http://www.scoop.co.nz/stories/PA0501/S00016.htm
+http://www.scoop.co.nz/stories/PA0502/S00528.htm
+http://www.scoop.co.nz/stories/PA0506/S00133.htm
+http://www.scoop.co.nz/stories/PA0506/S00295.htm
+http://www.scoop.co.nz/stories/PA0506/S00366.htm
+http://www.scoop.co.nz/stories/PO0203/S00062.htm
+http://www.scoop.co.nz/stories/WO0506/S00482.htm
+http://www.scoop0901.net/AWAKE/Legal/ClarkstonRRcrash/index.shtml
+http://www.scoopy.com/jamesjoyceswomen.htm
+http://www.scooterhelp.com/genmaintain/crankcase.oil.html
+http://www.scopenews.org/spring01/e-02spr.htm
+http://www.scopereviews.com/begin.html
+http://www.scopereviews.com/clash2.html
+http://www.scorpiusdigital.com/auth1.html
+http://www.scorps.com/am.html
+http://www.scot-borders.co.uk/stcuthbertsway/harestanes_kirkyetholm.asp
+http://www.scot-borders.co.uk/stcuthbertsway/melrose_harestanes.asp
+http://www.scot-borders.co.uk/stcuthbertsway/walkingholidays.htm
+http://www.scotchproductions.com/scottish-poet/bio.html
+http://www.scotclans.com/history/1468_orkney.html
+http://www.scotclans.com/history/1879_tay.html
+http://www.scotcourts.gov.uk/opinions/125_2000.html
+http://www.scotcourts.gov.uk/opinions/2005CSOH8.html
+http://www.scotcourts.gov.uk/opinions/247_00.html
+http://www.scotcourts.gov.uk/opinions/LJC3011.html
+http://www.scotcourts.gov.uk/opinions/P798.html
+http://www.scotcourts.gov.uk/opinions/XA99.html
+http://www.scotcourts.gov.uk/opinions/XC458.html
+http://www.scotcourts.gov.uk/opinions/XC676_03.html
+http://www.scotcourts.gov.uk/opinionsv/xa136_01.html
+http://www.scotland-hotels.com/walking.htm
+http://www.scotland-legislation.hmso.gov.uk/legislation/scotland/ssi1999/19990061.htm
+http://www.scotland-legislation.hmso.gov.uk/legislation/scotland/ssi2002/20020528.htm
+http://www.scotland-legislation.hmso.gov.uk/legislation/scotland/ssi2004/20040076.htm
+http://www.scotland-sdma.org.uk/
+http://www.scotland.gov.uk/clickthinking/clikt-04.htm
+http://www.scotland.gov.uk/consultations/justice/porhr-00.asp
+http://www.scotland.gov.uk/consultations/transport/rucccc-00.asp
+http://www.scotland.gov.uk/consultations/transport/rucccc-02.asp
+http://www.scotland.gov.uk/consultations/transport/stag-18.asp
+http://www.scotland.gov.uk/consultations/transport/stag-30.asp
+http://www.scotland.gov.uk/cru/kd01/blue/eval03.htm
+http://www.scotland.gov.uk/cru/kd01/orange/sdsp-08.asp
+http://www.scotland.gov.uk/cru/resfinds/drf05-00.htm
+http://www.scotland.gov.uk/cru/resfinds/hdf6-00.asp
+http://www.scotland.gov.uk/cru/resfinds/lsf10-00.htm
+http://www.scotland.gov.uk/cru/resfinds/lsf44-00.asp
+http://www.scotland.gov.uk/deleted/library3/education/sqss-04.asp
+http://www.scotland.gov.uk/library/documents-w1/spmai-02.htm
+http://www.scotland.gov.uk/library/documents-w10/ersa-17.htm
+http://www.scotland.gov.uk/library/documents-w6/edwp-09.htm
+http://www.scotland.gov.uk/library/documents-w6/fiis-01.htm
+http://www.scotland.gov.uk/library/documents-w8/pttp-13.htm
+http://www.scotland.gov.uk/library/documents-w8/rec-08.htm
+http://www.scotland.gov.uk/library/ict/append-section4.htm
+http://www.scotland.gov.uk/library/sas/sa02-32.htm
+http://www.scotland.gov.uk/library2/doc01/taco-05.htm
+http://www.scotland.gov.uk/library2/doc03/iim-02.htm
+http://www.scotland.gov.uk/library2/doc15/sim-05.asp
+http://www.scotland.gov.uk/library3/agri/aaps-06.asp
+http://www.scotland.gov.uk/library3/education/fcsr-06.asp
+http://www.scotland.gov.uk/library3/education/lacr-04.asp
+http://www.scotland.gov.uk/library3/education/mwki-08.asp
+http://www.scotland.gov.uk/library3/health/csac-08.asp
+http://www.scotland.gov.uk/library3/housing/edfp-04.asp
+http://www.scotland.gov.uk/library3/housing/edfp-07.asp
+http://www.scotland.gov.uk/library3/housing/edfp-09.asp
+http://www.scotland.gov.uk/library3/social/sjaip-18.asp
+http://www.scotland.gov.uk/library3/social/sjan-00.asp
+http://www.scotland.gov.uk/library4/JD/CL/00018329.aspx
+http://www.scotland.gov.uk/library5/finance/ser03-13.asp
+http://www.scotland.gov.uk/library5/lifelong/alls-03.asp
+http://www.scotland.gov.uk/library5/planning/saqprf-19.asp
+http://www.scotland.gov.uk/nationalculturalstrategy/docs/cult-09.asp
+http://www.scotland.gov.uk/news/2000/08/se2345.asp
+http://www.scotland.gov.uk/news/releas99_8/se0417.htm
+http://www.scotland.gov.uk/planning/award/9901.asp
+http://www.scotland.org.uk/Web_Links+index-req-viewlink-cid-317-orderby-hitsA.html
+http://www.scotland.org.uk/Web_Links+index-req-viewlink-cid-317-orderby-ratingA.html
+http://www.scotlandforvisitors.com/wanlockhead.php
+http://www.scotlandoffice.gov.uk/our-communications/speech.php?id=6
+http://www.scotlandonline.com/heritage/cookery_december_recipe_two.cfm
+http://www.scotlandonline.com/heritage/heritage_gscots_detail.cfm?id=280
+http://www.scotlandonline.com/heritage/main_feature.cfm?feature_id=35&site_id=15&feature_cat_id=6
+http://www.scotlandonline.com/outdoors/columista.cfm?feature_cat_id=27&selectedfeature_id=122
+http://www.scotlandonline.com/outdoors/news_story.cfm?story_id=91174&news_type_id=640
+http://www.scotlandonline.com/outdoors/template_files/iym_conference.cfm
+http://www.scotlandonline.com/outdoors/walkabout_week35/index.cfm
+http://www.scotlandroyalty.org/
+http://www.scotlands-footprint.com/launch.htm
+http://www.scotlandspast.org/psychocyclist/SusLinks.cfm
+http://www.scotlandspeople.gov.uk/content/help/index.aspx?r=551&427
+http://www.scotlandspeople.gov.uk/index.php?area=content/articles/article&id=152
+http://www.scotlink.com/scottish-referendum/political-parties-scotland.htm
+http://www.scots-online.org/grammar/whits.htm
+http://www.scotshistoryonline.co.uk/sutherla.html
+http://www.scotsindependent.org/
+http://www.scotsindependent.org/2001/010817/
+http://www.scotsindependent.org/brown/adam_dunnett.htm
+http://www.scott.lib.in.us/history.htm
+http://www.scottandrew.com/cgi-bin/mt/mt-new-comments.cgi?entry_id=759
+http://www.scottish-country-cottages.co.uk/ccs?action=xsl&view=xsl&xsltId=allabout
+http://www.scottish-enterprise.com/dumfriesandgalloway/
+http://www.scottish-enterprise.com/feedback.htm
+http://www.scottish-enterprise.com/lanarkshire
+http://www.scottish-enterprise.com/lanarkshire/
+http://www.scottish-enterprise.com/sedotcom_home/about_se/local_enterprise_companies/borders/borders-local-initiatives/about-bordersportfolio.htm
+http://www.scottish-enterprise.com/sedotcom_home/about_se/local_enterprise_companies/dumfriesandgalloway.htm
+http://www.scottish-enterprise.com/sedotcom_home/news-se/news-fullarticle.htm?articleid=113218&
+http://www.scottish-enterprise.com/sedotcom_home/services-to-business/going-online/settingupawebsite.htm?siblingtoggle=1
+http://www.scottish-enterprise.com/sedotcom_home/stn/scottishtechnology/scottishtechnologynews-backissues/scottishtechnology_jul04/scottishtechnologynews-features_jul04.htm
+http://www.scottish-heavies.com/TheRules_files/Sect1_3.htm
+http://www.scottish-history.com/origins.shtml
+http://www.scottish-history.com/stirlingbridge2.shtml
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-01-28k.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-02-04k.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-02-06k.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-02-11k.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-02-12a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-03-26e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-05-21e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-11-27e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-12-09e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-02/bb-12-10a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-03/bb-07-21e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-01-07a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-02-25a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-03-10a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-04-01a.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-04-19e.htm
+http://www.scottish.parliament.uk/business/businessBulletin/bb-04/bb-09-08e.htm
+http://www.scottish.parliament.uk/business/chamber/mop-00/mop-03-16.htm
+http://www.scottish.parliament.uk/business/chamber/mop-99/mop-08-06c.htm
+http://www.scottish.parliament.uk/business/committees/communities/or-04/co04-2202.htm
+http://www.scottish.parliament.uk/business/committees/enterprise/inquiries/bg/16-EntrepreneurExchange.htm
+http://www.scottish.parliament.uk/business/committees/enterprise/inquiries/bg/34-RSC.htm
+http://www.scottish.parliament.uk/business/committees/enterprise/inquiries/bg/50-ScottishTechForum.htm
+http://www.scottish.parliament.uk/business/committees/enterprise/inquiries/rei/ec04-reis-craig,david.htm
+http://www.scottish.parliament.uk/business/committees/environment/or-04/ra04-0202.htm
+http://www.scottish.parliament.uk/business/committees/equal/or-04/eo04-0502.htm
+http://www.scottish.parliament.uk/business/committees/europe/mop-04/eumop04-0928.htm
+http://www.scottish.parliament.uk/business/committees/europe/or-04/eu04-0102.htm
+http://www.scottish.parliament.uk/business/committees/europe/or-04/eu04-0202.htm
+http://www.scottish.parliament.uk/business/committees/health/inquiries/wkf-nhs/he-wkf-56.htm
+http://www.scottish.parliament.uk/business/committees/health/or-04/he04-1502.htm
+http://www.scottish.parliament.uk/business/committees/historic/ad-fish/or-03/sf03-0102.htm
+http://www.scottish.parliament.uk/business/committees/historic/europe/or-01/eu01-1402.htm
+http://www.scottish.parliament.uk/business/committees/historic/europe/or-03/eu03-0102a.htm
+http://www.scottish.parliament.uk/business/committees/historic/europe/or-03/eu03-0702a.htm
+http://www.scottish.parliament.uk/business/committees/historic/justice1/or-01/j101-0802.htm
+http://www.scottish.parliament.uk/business/committees/historic/petitions/or-00/pu00-0902.htm
+http://www.scottish.parliament.uk/business/committees/historic/petitions/or-01/pu01-0302.htm
+http://www.scottish.parliament.uk/business/committees/historic/petitions/or-01/pu01-1402.htm
+http://www.scottish.parliament.uk/business/committees/historic/subleg/or-01/su01-0302.htm
+http://www.scottish.parliament.uk/business/committees/historic/subleg/or-03/su03-1002a.htm
+http://www.scottish.parliament.uk/business/committees/historic/x-rural/or-00/ra00-1002.htm
+http://www.scottish.parliament.uk/business/committees/historic/x-rural/or-02/ra02-2302.htm
+http://www.scottish.parliament.uk/business/committees/historic/x-transport/or-00/tr00-3002.htm
+http://www.scottish.parliament.uk/business/committees/historic/x-transport/or-00/tr00-3102.htm
+http://www.scottish.parliament.uk/business/committees/historic/x-transport/or-02/tr02-1702.htm
+http://www.scottish.parliament.uk/business/committees/justice1/or-04/j104-0802.htm
+http://www.scottish.parliament.uk/business/committees/justice2/or-04/j204-3502.htm
+http://www.scottish.parliament.uk/business/committees/justice2/reports-05/j2r05-03-01.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/archive/or-00/or080402.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-01/sor0524-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-01/sor1220-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-02/sor0307-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-02/sor0328-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-04/sor0318-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-04/sor1202-02.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-99/or010704.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-99/or010705.htm
+http://www.scottish.parliament.uk/business/officialReports/meetingsParliament/or-99/or021002.htm
+http://www.scottish.parliament.uk/business/pqa/wa-02/wa1224.htm
+http://www.scottish.parliament.uk/business/pqa/wa-03/wa0701.htm
+http://www.scottish.parliament.uk/business/pqa/wa-03/wa1021.htm
+http://www.scottish.parliament.uk/business/pqa/wa-99/wa0615.htm
+http://www.scottish.parliament.uk/business/research/subject/education.htm
+http://www.scottish.parliament.uk/corporate/anrep-accts/spar/ar-01/parlar01-01.htm
+http://www.scottish.parliament.uk/corporate/elu/reports-01/elu-r190301.html
+http://www.scottish.parliament.uk/corporate/elu/reports-02/elu-r070102.html
+http://www.scottish.parliament.uk/corporate/history/whisp/whisp-04/wh039-04.htm
+http://www.scottish.parliament.uk/factfiles/ff5.htm
+http://www.scottish.parliament.uk/msp/MSPAllowances/
+http://www.scottish.parliament.uk/nmCentre/news/news-01/pa01-094.htm
+http://www.scottish.parliament.uk/nmCentre/news/news-comm-01/cent01-002.htm
+http://www.scottish.parliament.uk/nmCentre/news/news-comm-05/cent05-003.htm
+http://www.scottish.parliament.uk/vli/holyrood/building/queensberryHouse.htm
+http://www.scottish.parliament.uk/vli/visitingHolyrood/wtspm/wtspm-00.htm
+http://www.scottish.parliament.uk/vli/visitingHolyrood/yvspe/yvspe-00.htm
+http://www.scottisharts.org.uk/1/artsinscotland/literature/features/shortstory.aspx
+http://www.scottishbaptist.org.uk/main/public_issues/20040414_sexhealth.html
+http://www.scottishbooksellers.com/acatalog/Flora.html
+http://www.scottishbooksellers.com/acatalog/General_History.html
+http://www.scottishchambers.org.uk/page.asp?page=21
+http://www.scottishchristian.com/churches/catholic.shtml
+http://www.scottishcrofters.com/campground.htm
+http://www.scottishexecutive.gov.uk/library5/finance/sern04-09.asp
+http://www.scottishgatherings.co.uk/page152.html
+http://www.scottishgolfclassics.com/speyside/event_2002.htm
+http://www.scottishgreens.org.uk/news/2004/august/230804antiwmd.htm
+http://www.scottishgreens.org.uk/news/2004/august/230804wave.htm
+http://www.scottishgreens.org.uk/orgtargetsbill/oftb_eg.htm
+http://www.scottishgreens.org.uk/site/id/4525/title/Top_Five_Reasons_Not_To_Vote_New_Labour.html
+http://www.scottishintensivecare.org.uk/sics_newsletter_2000.htm
+http://www.scottishjobs.com/jobdesc.asp?id=17375&JMID=246&RefPage=Member
+http://www.scottishjobs.com/resource_centre/individual_article.asp?ArtID=413&SID=7
+http://www.scottishjobs.com/resource_centre/individual_article.asp?ArtID=682&SID=4
+http://www.scottishlabour.org.uk/mcconnellspeech2003/
+http://www.scottishlaw.org.uk/scotlaw/newspapers.html
+http://www.scottishmediamonitor.com/articles2.cfm?ID=64
+http://www.scottishmediamonitor.com/articles2.cfm?ID=89
+http://www.scottishmediamonitor.com/features2.cfm?ID=14
+http://www.scottishmuseums.org.uk/members_services/registration/Intro_to_reg.asp
+http://www.scottishombudsman.org.uk/put_things_right/
+http://www.scottishprintarchive.org/master_printers1964_6.html
+http://www.scottishproducts.com/SPDACustomisedGifts.htm
+http://www.scottishproducts.com/SPDAToysModelsCollectibles.htm
+http://www.scottishrenewables.com/newsitem.asp?id=38
+http://www.scottishrenewables.com/newsitem.asp?id=50
+http://www.scottishrenewables.com/newsitem.asp?id=54
+http://www.scottishrugby.org/sites/Ayr-RFC/news.cfm?action=combiDetail&newsid=12335
+http://www.scottishsocialistparty.org/conference/conf04/sun_motions03.html
+http://www.scottishsocialistvoice.net/pakistan/Pakistan2.html
+http://www.scottishspca.org/campaign/seasonal.html
+http://www.scottishsport.co.uk/othersports/lacrosse.htm
+http://www.scottishtories.org.uk/conf04-pduncan.html
+http://www.scottishtorymeps.org.uk/stevenson/issues/speeches/archive_2003/speech18.htm
+http://www.scottishtours.co.uk/static/Terms%20and%20Conditions.htm
+http://www.scottishwater.co.uk/pls/portal/url/item/EB918B4A891047C4E0340003BA475CA3
+http://www.scottishweddingsonline.co.uk/?module=products&showcat=57&showproduct=5
+http://www.scottishwidows.co.uk/nfshow.wpl/1056
+http://www.scottlondon.com/insight/scripts/calthorpe.html
+http://www.scottmccloud.com/home/essays/2003-09-micros/micros.html
+http://www.scottsaustralia.com.au/defender.htm
+http://www.scottsdaleaz.gov/design/AreaPlans/CAPs/DynFthls/Goals&Strategies.asp
+http://www.scottsdaleaz.gov/events/default.asp
+http://www.scottsdaleaz.gov/water/conservation/qa.asp
+http://www.scotusblog.com/movabletype/archives/2005/06/court_upholds_p.html
+http://www.scotusblog.com/movabletype/archives/2005/06/does_anyone_dou.html
+http://www.scotweb.co.uk/underthekilt/haggis.html
+http://www.scoutbase.org.uk/6to25/ppoints/pp-2003-09.htm
+http://www.scouter.com/forums/viewThread.asp?threadID=81900
+http://www.scouter.com/forums/viewThread.asp?threadID=82475
+http://www.scoutingmagazine.org/issues/0305/d-lett.html
+http://www.scoutingresources.org.uk/badge_scienceexp04.html
+http://www.scoutscan.com/rovering/ch1.html
+http://www.scp.nl/english/publications/summaries/9037701299.html
+http://www.scpronet.com/point/point/letters.html
+http://www.scrapbookscrapbook.com/DAC-ART/tropical-linens-tropical-interiors.html
+http://www.scrappersfriend.com/
+http://www.scrappleface.com/
+http://www.scrappleface.com/MT/archives/001906.html
+http://www.scrappleface.com/cgi-bin/mt-comments.cgi?entry_id=2220
+http://www.scre.ac.uk/resreport/rr107/2.html
+http://www.scre.ac.uk/rie/nl44/nl44thomson.html
+http://www.scre.ac.uk/rie/nl67/nl67plowman.html
+http://www.scre.ac.uk/spotlight/spotlight43.html
+http://www.scre.ac.uk/spotlight/spotlight54.html
+http://www.scre.ac.uk/spotlight/spotlight67.html
+http://www.screams-of-terror.com/teenie.asp
+http://www.screenit.com/movies/2002/big_trouble.html
+http://www.screenit.com/movies/2004/vanity_fair.html
+http://www.screenit.com/movies/2004/walking_tall.html
+http://www.screenonline.org.uk/people/id/449654/
+http://www.screenpages.com/archives/000215.html
+http://www.screenpages.com/archives/000231.html
+http://www.screenplayers.net/robertmckee.html
+http://www.screenselect.co.uk/visitor/product_detail.html?product_id=1428
+http://www.screentalk.biz/art003.htm
+http://www.screwgravity.com/tutorials/catleap_standing/tutorial_catleap_standing.htm
+http://www.scribble.clara.net/disabled.htm
+http://www.scripophily.net/shipandcruis.html
+http://www.scripps.edu/newsandviews/e_20050606/romesberg.html
+http://www.scripps.edu/~rnepomuc/interests.html
+http://www.scripps.ohiou.edu/mediahistory/mhmjour4-1.htm
+http://www.scripps.ohiou.edu/producer/newjobs.htm
+http://www.scripps.ohiou.edu/wjmcr/vol03/3-4a-n.htm
+http://www.scriptblaster.com/
+http://www.scriptmag.com/earticles/earticle.php?358
+http://www.scriptmag.com/earticles/earticle.php?375
+http://www.scripts4webmasters.com/follow-up-autoresponder-pro/features.shtml
+http://www.scriptwritingsecrets.com/Show_it.htm
+http://www.scrum.com/6nations/2003/scoreboards/engvfra/commentary.htm
+http://www.scrum.com/6nations/2004/stats/default.asp
+http://www.scrum.com/news/newzealand_default.asp
+http://www.scrum.com/tours/2004/stats/default.asp
+http://www.scs.cs.nyu.edu/~mfreed/adventures/Northeast-CrawfordNotch.html
+http://www.scs.northwestern.edu/ugrad/tuition/financial_aid.cfm
+http://www.scs.org/scsarchive/getDoc.cfm?id=1951
+http://www.scs.uiuc.edu/~skypen/Pia/mark.html
+http://www.scseagrant.org/events/events_arch_00.htm
+http://www.scseagrant.org/insidesg/insidesg_stratplan.htm
+http://www.scseagrant.org/library/library_coaher_sum01.htm
+http://www.scselfservice.org/fam/custvist.htm
+http://www.scselfservice.org/probate/adult/lpsconservator.htm
+http://www.scsmallbiz.com/sections.php?Section=Financial
+http://www.scss.com.au/family/andrew/camera/decision/
+http://www.scstatehouse.net/sess116_2005-2006/bills/637.htm
+http://www.scsuscholars.com/2005_05_01_scsu-scholars_archive.html
+http://www.scteachers.org/cert/nbcert.cfm
+http://www.scu.edu.au/schools/gcm/ar/arp/grounded.html
+http://www.scu.edu.au/schools/vbs/index.php?page_id=25&menu=12_33
+http://www.scuba-doc.com/Midearbt.html
+http://www.scubamom.com/travels/britain/wales.htm
+http://www.sculptor.bc.ca/pages/hints.html
+http://www.sculpture.org/documents/scmag04/julaug04/spiraljetty/julaug04_spiraljetty.htm
+http://www.scvas.org/keepcats.html
+http://www.scvmed.org/channel/0,4770,chid%253D58953%2526sid%253D10710,00.html
+http://www.scvo.org.uk/funding/strategic_funding_issues/briefing_june_2000.htm
+http://www.scvo.org.uk/pias/lobbying/formulating_campaign_strategy.html
+http://www.scvo.org.uk/policy/new_politics/local_government/community_budgeting.htm
+http://www.scwf.org/articles/index.php?view=392
+http://www.scwf.org/articles/index.php?view=395
+http://www.sd-commission.gov.uk/
+http://www.sd-research.org.uk/sdrguide/env-cost-benefit.html
+http://www.sd5.k12.mt.us/kjhs/WritingCenter/storylikewind/story.htm
+http://www.sdaa.net/
+http://www.sdbar.org/public/consumers/property.htm
+http://www.sdbonline.org/fly/aimorph/glia.htm
+http://www.sdbonline.org/fly/neural/optomt2b.htm
+http://www.sdbonline.org/fly/newgene/sina4.htm
+http://www.sdc.gc.ca/asp/gateway.asp?hr=/en/cs/sp/edd/reports/1997-000367/page05.shtml&hs=cpr
+http://www.sdc.gc.ca/asp/gateway.asp?hr=en/isp/pub/oas/gismain.shtml&hs=ozs
+http://www.sdc.gc.ca/en/cs/comm/sd/ministers/minister/speech/2005/050303.shtml
+http://www.sdc.gc.ca/en/cs/sp/arb/CONTACT/contact_us.shtml
+http://www.sdc.gc.ca/en/isp/oas/oasoverview.shtml
+http://www.sdc.gc.ca/en/isp/pub/cpp/stayntouch-04.shtml
+http://www.sdc.gc.ca/en/isp/pub/cpp/stayntouch-05.shtml
+http://www.sdcity.edu/degrees/associate_degree.asp
+http://www.sdcity.edu/worldcultures/Defaulttxt.asp
+http://www.sdcitybeat.com/article.php?id=136
+http://www.sdcitybeat.com/article.php?id=658
+http://www.sdcn.org/webworks/strategies/knowing.htm
+http://www.sdearthtimes.com/et1296/et1296s1.html
+http://www.sdfparty.org/english/speeches/368.php
+http://www.sdgfp.info/Wildlife/hunting/PrairieDog.htm
+http://www.sdi.qld.gov.au/dsdweb/v3/guis/templates/content/gui_cue_menu.cfm?id=2794
+http://www.sdm.buffalo.edu/news/20011214_students.html
+http://www.sdma.com/sedgwick.updates/articles/insurance-bad-faith/?upd_art_ins_051503.html
+http://www.sdmagazine.com/documents/s=818/sdm0305h/
+http://www.sdnpa.org/
+http://www.sdpi.org/help/articles_in_press/Aug2003articles_mohsins.htm
+http://www.sdreader.com/published/2004-11-04/sheep.html
+http://www.sdrm.org/faqs/brakes.html
+http://www.sdrm.org/faqs/brakes/history/
+http://www.sdrotary.org/home.htm
+http://www.sdsc.edu/GatherScatter/GSsummer96/gaggiotti.html
+http://www.sdtimes.com/cols/javawatch_114.htm
+http://www.sdtta.org/nika-sunday_paper_4-13-03.html
+http://www.sea-job.com/employeur4b.htm
+http://www.sea.co.uk/marine_bibliography.html
+http://www.seabass.co.uk/evo_techshop.htm
+http://www.seacentr.org/programs/special_events%20.html
+http://www.seacoastonline.com/news/02162005/news/64766.htm
+http://www.seacoastonline.com/news/exeter/05062005/currents/41005.htm
+http://www.seacoastonline.com/news/yorkweekly/06152005/business/47734.htm
+http://www.seacottage.com/AGENTS/agents.htm
+http://www.seacrestmanor.com/Debrett.html
+http://www.seacritters.com/
+http://www.seacritters.com/teachers.html
+http://www.seacritters.com/tteachers.html
+http://www.seafish.org/whatsnew/current.asp?p=ce338
+http://www.seafish.org/whatsnew/current.asp?p=ce409
+http://www.seafoodintelligence.com/EditModule.aspx?tabid=151&def=Terms
+http://www.seaforce.com/sof/negodemo.htm
+http://www.seafriends.org.nz/oceano/kaipara.htm
+http://www.seagate.com/support/disc/drivers/diskmanager_eula.html
+http://www.seagoville.net/seagopinions.htm
+http://www.seagrantnews.org/education/edu_case.html
+http://www.seagrantnews.org/news/19990927_pfiesteria.html
+http://www.seagulllighting.com/
+http://www.seairth.com/blog/industry
+http://www.seak.com/semlegficwrit05ficwritconfidential.htm
+http://www.seakayak.co.nz/sea-kayak-tours/on_2dkw.htm
+http://www.sean.org.uk/ectqu/ectqu8.php
+http://www.seanational.com.au/courseDetail_04.jsp?courseID=15409
+http://www.seanbiggerstaff.com/
+http://www.seanchaibooks.com/ourlinks.htm
+http://www.seangabb.co.uk/flcomm/flc007.htm
+http://www.seanmattison.com/dreamcatcher/2004_06_01_archives.php
+http://www.seanstewart.org/novels/thenightwatch/extract/
+http://www.seaofcortez.org/
+http://www.seaofcortez.org/Log8.html
+http://www.seaoftranquility.org/article.php?sid=292&mode=thread&order=0&thold=0
+http://www.searay.com/terms_of_use.asp?tab=0&p=y&
+http://www.searaymusic.com/
+http://www.search-engine-lists.com/marktwain/theoretical-morals.html
+http://www.search-institute.org/assets/infants.html
+http://www.search-institute.org/assets/preschoolers.html
+http://www.search-institute.org/assets/toddlers.html
+http://www.search.eb.com/elections/pri/Q00099.html
+http://www.searchengineforums.com/apps/searchengine.forums/action::thread/thread::1104877057/forum::seo-101/
+http://www.searchengineforums.com/apps/webmaster.forums/action::thread/thread::1104877057/forum::seo-101/
+http://www.searchengineforums.com/apps/webmaster.forums/action::thread/thread::877/forum::keyword-research/
+http://www.searchengineguide.com/lloyd/2003/1125_bl1.html
+http://www.searchengineposition.com/info/netprofit/adbudget1.asp
+http://www.searchenginepromotionhelp.com/m/articles/search-engine-problems/google-ban-1.php
+http://www.searchenginewatch.com/webmasters/meta.html
+http://www.searchgodsword.org/com/bcc/view.cgi?book=1th&chapter=005
+http://www.searchgodsword.org/com/bcc/view.cgi?book=php&chapter=002
+http://www.searchgodsword.org/his/ad/sch/view.cgi?book=1&chapter=17
+http://www.searchlores.org/london/lea2tra.htm
+http://www.searchlores.org/schopeng.htm
+http://www.searchmusicnetwork.com/Bands_and_Artists_3_30_Odd_Foot_of_Grunts.html
+http://www.searchmusicnetwork.com/Vocal_Courses_and_Lessons.html
+http://www.searchsystems.net/list.php?nid=17
+http://www.searchu.co.uk/directory/G/generally_02.html
+http://www.searchu.co.uk/directory/L/light_04.html
+http://www.searchu.co.uk/directory/S/significant_02.html
+http://www.searchu.co.uk/search.php?q=even&o=10
+http://www.searchwhateveraustralia.com.au/contact.htm
+http://www.searchword.org/tr/triad.html
+http://www.searlescholars.net/people/1982/parham.html
+http://www.searls.com/ds_open_letter.html
+http://www.seaservices.com/times_article.html
+http://www.seasideawards.org.uk/blue5.asp
+http://www.seaslugteam.com/
+http://www.seasonsnaturaltoys.com/dolls/little_families/seasons_families.htm
+http://www.seaspower.com/StrategicOverview.htm
+http://www.seasva.gwu.edu/programs/acc_telecom/indexc15.htm
+http://www.seat61.com/Europe.htm
+http://www.seat61.com/India.htm
+http://www.seat61.com/UKtravel.htm
+http://www.seattle-chat.com/modules.php?name=News&file=article&sid=40
+http://www.seattleairgear.com/kl.htm
+http://www.seattleartsupply.com/customerservice.asp
+http://www.seattlecenter.com/transportation/Monthly.asp
+http://www.seattlechildrens.org/child_health_safety/health_safety_resources/cc_SearchResults.asp?KeySubject=16&Keyword=291
+http://www.seattlefirstbaptist.org/Default.asp?Header=Adult%20Education&Locator=Education_Adult
+http://www.seattleopera.org/wagner/seattle/
+http://www.seattlerandonneur.org/member/SIR_rider_expectations.html
+http://www.seattlerandonneur.org/newsletters/2004/april/
+http://www.seattleredcross.org/VolunteerNow/opportunities.htm
+http://www.seattleredcross.org/afes/
+http://www.seattleredcross.org/international/language/
+http://www.seattlewcswing.org/competition_rules.htm
+http://www.seattleweekly.com/features/0018/features-downey.shtml
+http://www.seattleweekly.com/features/0410/040310_news_blackbox.php
+http://www.seaturtle.org/mtn/jobs/
+http://www.seaturtle.org/mtn/jobs/40GR345.shtml
+http://www.seaturtles.org/press_release2.cfm?pressID=74
+http://www.seaturtles.org/prog_camp2.cfm?campaignID=20
+http://www.seav.vic.gov.au/buildings/firstrate/index.asp
+http://www.seav.vic.gov.au/renewable_energy/wind/
+http://www.seav.vic.gov.au/sustainable_energy_challenge/barriers.asp
+http://www.seawatch.org/solution/coalition_sea_of_cortez.php
+http://www.seaweb.org/background/safina1.html
+http://www.seaweb.org/programs/swordfish/4.26.99release.html
+http://www.seaworld.com.au/education/project_info_index.cfm?project_id=12
+http://www.seaworld.com.au/visitor_info/faq.cfm
+http://www.sebastianholsclaw.com/archives/2003_10.html
+http://www.sebastianholsclaw.com/archives/2004_06.html
+http://www.sebiology.org/pageview.asp?S=7&id=242
+http://www.sec.gov/divisions/corpfin/guidance/cfbcafaq.htm
+http://www.sec.gov/divisions/marketreg/mr-noaction/sab051004.htm
+http://www.sec.gov/info/accountants/staffletters/dtt042704.htm
+http://www.sec.gov/interps/telephone/phonesupplement4.htm
+http://www.sec.gov/investor/pubs/roadmap/habit.htm
+http://www.sec.gov/investor/pubs/toolkit.htm
+http://www.sec.gov/litigation/admin/34-42392.htm
+http://www.sec.gov/litigation/aljdec/id268lam.htm
+http://www.sec.gov/litigation/opinions/34-41755.htm
+http://www.sec.gov/news/speech/spch020405skg.htm
+http://www.sec.gov/news/speech/spch021104smc.htm
+http://www.sec.gov/news/speech/spch022504pfr.htm
+http://www.sec.gov/news/speech/spch040605whd-nms.htm
+http://www.sec.gov/news/speech/spch042303lar.htm
+http://www.sec.gov/news/speech/spch042804whd.htm
+http://www.sec.gov/news/speech/spch060204whd.htm
+http://www.sec.gov/news/speech/spch060804alb.htm
+http://www.sec.gov/news/speech/spch101703iosco.htm
+http://www.sec.gov/news/speech/spch102604-1psa.htm
+http://www.sec.gov/news/speech/spch120604cag.htm
+http://www.sec.gov/news/speech/spch121103gaf.htm
+http://www.sec.gov/news/speech/spch453.htm
+http://www.sec.gov/rules/final/34-50781.htm
+http://www.sec.gov/rules/pcaob/34-50077.htm
+http://www.sec.gov/rules/proposed/33-8170.htm
+http://www.sec.gov/rules/proposed/33-8287.htm
+http://www.sec.gov/rules/proposed/s71903/ccc100803.htm
+http://www.sec.gov/rules/proposed/s71903/ccs100803.htm
+http://www.sec.gov/rules/proposed/s74502/blake1.htm
+http://www.sec.gov/rules/sro/34-48787.htm
+http://www.sec.noaa.gov/Data/notices.html
+http://www.sec.noaa.gov/primer/primer.html
+http://www.sec.state.ma.us/pre/presea/sealhis.htm
+http://www.sec.state.ma.us/sct/sctgbla/gblaidx.htm
+http://www.secf.org/acp/INFO-U~3.HTM
+http://www.secinfo.com/dqwhf.5f891.htm
+http://www.secondaryenglish.com/bridgingenglish.html
+http://www.secondaryenglish.com/moving%20on.htm
+http://www.secondbreakfast.net/
+http://www.secondbreakfast.net/archives/001915.html
+http://www.secondharvest.org/site_content.asp?s=97
+http://www.secondnature.org/history/writings/speeches/leveraging_change.html
+http://www.secondnature.org/history/writings/speeches/role_engineers.html
+http://www.secondparentadoption.org/publish/publishmenu.htm
+http://www.secondsout.com/Ringside/sopranos.cfm?ccs=354&cs=13263
+http://www.secret-passage.com/mckay/
+http://www.secretary.state.nc.us/kidspg/history.htm
+http://www.secretary.state.nc.us/pubsweb/links/links5.htm
+http://www.secretary.state.nc.us/sec/secfaq.aspx
+http://www.secretscourse.com/letters.html
+http://www.secretsofthenormaninvasion.com/corresp/wessex2.htm
+http://www.secularism.org.uk/humanletters.htm
+http://www.secularism.org.uk/newspress/americanatheistsaug03t.htm
+http://www.secularism.org.uk/rowson.htm
+http://www.secumd.org/html/employment_secu/
+http://www.securegiving.co.uk/shop/cnd/shop.php
+http://www.securingjava.com/chapter-two/chapter-two-4.html
+http://www.securitiesfraudfyi.com/lehman_brothers.html
+http://www.security.vt.edu/playitsafe/index.phtml
+http://www.securityandsafetysupply.com/
+http://www.securitybank.com.ph/html/annual.htm
+http://www.securitydocs.com/library/2885
+http://www.securityfocus.com/infocus/1592
+http://www.securityfocus.com/infocus/1690
+http://www.securityfocus.com/infocus/1836
+http://www.securityfocus.com/library?cat=38&offset=150
+http://www.securityfocus.com/news/10271
+http://www.securityfocus.com/news/5239
+http://www.securityoffice.net/mssecrets/aladdin/FTCSLong.html
+http://www.securityoncampus.org/lawyers/saelzler.html
+http://www.securityoncampus.org/schools/cleryact/pl101542.html
+http://www.securitypipeline.com/162100867
+http://www.securitypipeline.com/howto/161500614
+http://www.securitypronews.com/
+http://www.sed.uga.edu/programs/mla/financial.htm
+http://www.sedgleywoods.org/NiceUp/jbm.html
+http://www.sedl.org/change/facilitate/leaders.html
+http://www.sedl.org/loteced/comparing_assessment.html
+http://www.sedl.org/pubs/sedl-letter/v14n03/6.html
+http://www.sedl.org/pubs/sedletter/v11n02/spark.html
+http://www.sedl.org/scimath/compass/v02n02/assessment.html
+http://www.sedl.org/slc/advanced.html
+http://www.sedonajo.com/sje/news.cfm?id=26
+http://www.sedonajo.com/sje/news.cfm?id=31
+http://www.sedos.org/english/foodsum.htm
+http://www.seds.org/messier/open.html
+http://www.seductioninsider.com/articles/evan_katz.html
+http://www.seductioninsider.com/articles/fear_of_rejection.html
+http://www.seductioninsider.com/articles/sex_appeal.html
+http://www.seductioninsider.com/articles/weird_sex_laws.html
+http://www.sedwickcoins.com/silver_cobs_potosi.htm
+http://www.see.ed.ac.uk/~gerard/Management/art3.html
+http://www.see.ed.ac.uk/~gerard/Management/art5.html
+http://www.see.ed.ac.uk/~gerard/Management/art9.html
+http://www.see.org.za/group_portrait.htm
+http://www.seedsofpeace.org/site/PageServer?pagename=OB_v8i2securitysuffering
+http://www.seedsofpeace.org/site/PageServer?pagename=lpuht01cult
+http://www.seedtest.org/en/content---1--1011.html
+http://www.seedtest.org/en/content---1--1135--270.html
+http://www.seefido.com/html/training_11.htm
+http://www.seeing-stars.com/Churches/StCharles.shtml
+http://www.seeingmachines.com/hmi.htm
+http://www.seeingred.com/Copy/5.4_milt_pillage_ivory_coast.html
+http://www.seeingwithc.org/topic7html.html
+http://www.seekerschurch.org/liturgies/199109.htm
+http://www.seekersglass.com/artists/savoie/biography.htm
+http://www.seekingalpha.com/2004/12/etrade_and_the_.html
+http://www.seekingsuccess.com/getting.php3
+http://www.seekingsuccess.com/reading.php3
+http://www.seeklyrics.com/lyrics/BEN-FOLDS/Losing-Lisa.html
+http://www.seeklyrics.com/lyrics/PINK-FLOYD/Wearing-The-Inside-Out.html
+http://www.seeklyrics.com/lyrics/Victoria-Beckham/I-Wish-Featuring-Robbie-Craig.html
+http://www.seeklyrics.com/lyrics/Victoria-Beckham/I-Wish.html
+http://www.seekwellness.com/fitness/fit_for_life.htm
+http://www.seelai.com/blog/2004/01/the_genius.html
+http://www.seelai.com/blog/2004/08/caught_with_pro.html
+http://www.seelai.com/blog/adventures_of_ah_chig/
+http://www.seelai.com/nudekingontheblog/2004/08/
+http://www.seeseattle.org/meetingPlanners/services/support.asp
+http://www.seethedonkey.com/
+http://www.seetickets.com/see/event.asp?artist=girls+aloud&resultsperpage=50&filler1=see
+http://www.sei.cmu.edu/news-at-sei/columns/software-product-lines/software-product-lines.htm
+http://www.sei.cmu.edu/news-at-sei/features/2002/3q02/feature-3-3q02.htm
+http://www.sei.cmu.edu/news-at-sei/features/2003/2q03/feature-2-2q03.htm
+http://www.seiko.co.jp/en/contribution/sustainability07.html
+http://www.seirtec.org/publications/lessondoc.html
+http://www.seishindo.org/newsletter/20_evolving.html
+http://www.seismo-watch.com/SWI/SWI.UsageTerms.html
+http://www.seismo.berkeley.edu/seismo/annual_report/ar00_01/node9.html
+http://www.seismo.berkeley.edu/seismo/annual_report/ar01_02/node11.html
+http://www.seismo.nrcan.gc.ca/significant_eq/charlevoix/1925/dommage_e.php
+http://www.seiu503.org/
+http://www.sejm.gov.pl/english/prace/cf6.htm
+http://www.selah.k12.wa.us/SOAR/SciProj2001/MorgenA.html
+http://www.selah.k12.wa.us/SOAR/SciProj2004/BrookeS.html
+http://www.selectabed.com/
+http://www.selekta.com/content/PPL.TB/apieceofhismind-6-91.asp
+http://www.selekta.com/content/PPL.TB/davidharnessgives-35-374.asp
+http://www.self.org/bhutan.asp
+http://www.selfdefenseforums.com/forums/archive/index.php/t-1076.html
+http://www.selfdefenseforums.com/forums/archive/index.php/t-1462.html
+http://www.selfdefenseforums.com/forums/archive/index.php/t-1690.html
+http://www.selfdefenseforums.com/forums/archive/index.php/t-5891.html
+http://www.selfgrowth.com/articles/Goodridge1.html
+http://www.selfgrowth.com/articles/Kuhn3.html
+http://www.selfgrowth.com/articles/Linardakis1.html
+http://www.selfgrowth.com/articles/namka4.html
+http://www.selfgrowth.com/positive.html
+http://www.selfhelpgraphics.com/about/history.shtml
+http://www.selfhelpmagazine.com/articles/sports/preventburnout.html
+http://www.selfhelpmagazine.com/articles/wf/platocav.html
+http://www.selkirkrexcats.org/standards.html
+http://www.sellascript.com/Source/Sales.cfm
+http://www.sellcom.com/ergochair.html
+http://www.selling-today.com/toc.html
+http://www.sellingpower.com/article/display.asp?aid=SP7560846
+http://www.sellingselling.com/articles/front-5.html
+http://www.sellingselling.com/articles/reachingcustomers.html
+http://www.sellingselling.com/articles/slow.html
+http://www.sellingsmartonline.com/speaking.htm
+http://www.sellingwaves.com/
+http://www.sellsbrothers.com/money/
+http://www.selman.cc/creditunion/add/about.cfm/sample2
+http://www.selmedica.com/licerx/
+http://www.selu.edu/NewsEvents/PublicInfoOffice/fancal00.htm
+http://www.selvesandothers.org/article7418.html
+http://www.semanticbible.com/hyperconc/S/Stand.html
+http://www.semcosh.org/Jose%20Bove.htm
+http://www.semesteratsea.com/voyages/spring2005/sp2005_courselist.html
+http://www.semicolon.com/Solitaire/Articles/Pyramid.html
+http://www.semiconductorfabtech.com/features/lithography/articles/body2.223.php3
+http://www.semint.com/umaie/rules.html
+http://www.senate.gov/artandhistory/art/artifact/Painting_31_00002.htm
+http://www.senate.gov/artandhistory/history/common/briefing/Meeting_Places_Quarters.htm
+http://www.senate.gov/artandhistory/history/common/generic/Historical_Intro_Biographical_Directory.htm
+http://www.senate.gov/artandhistory/history/common/generic/Leaders_Lecture_Series_Bush.htm
+http://www.senate.gov/artandhistory/history/common/generic/Leaders_Lecture_Series_Mansfield.htm
+http://www.senate.gov/pagelayout/committees/one_item_and_teasers/committee_hearings.htm
+http://www.senate.gov/pagelayout/history/one_item_and_teasers/chronology.htm
+http://www.senate.gov/reference/common/person/barry_black.htm
+http://www.senate.gov/~appropriations/releases/record.cfm?id=211834
+http://www.senate.gov/~feingold/statements/03/10/2003A22748.html
+http://www.senate.gov/~judiciary/oldsite/te090401so-simon.htm
+http://www.senate.gov/~kohl/press/statements/2005208B19.html
+http://www.senate.mo.gov/05info/BTS_Web/Summary.aspx?SessionType=R&SummaryID=80672&BillID=21806
+http://www.senate.state.ny.us/pressreleases.nsf/0/602619f3409e1e2e85256e210072f3e5?OpenDocument
+http://www.senate.state.ny.us/pressreleases.nsf/0/8a418b7f4c94ddee85256e1a0061fabb?OpenDocument
+http://www.senate.ufl.edu/minut_agen/SteerMin031797.htm
+http://www.senatedems.state.ct.us/Info.html
+http://www.senatorchapman.com/bbbb.htm
+http://www.senatorlines.com/home/profile/com_prof_essentialsa73a_2.jsp
+http://www.senatorserfmaltese.com/
+http://www.send2press.com/PRnetwire/pr04_120703-voices.shtml
+http://www.send2press.com/newswire/2005_01_0110-002.shtml
+http://www.sendcoffee.com/dog-o-matic/essays/becky.html
+http://www.sendcoffee.com/dog-o-matic/trees.html
+http://www.sendit.com/video/item/7000000071771
+http://www.sendit.com/video/item/7000000083554
+http://www.sendmemovies.com/p-44803-miles-davis-kind-of-blue-1959-dual-disc.aspx
+http://www.sendmemovies.com/p-44804-miles-davis-kind-of-blue-1959-sacd.aspx
+http://www.sendrevival.com/tattoos/argument%20against%20Christian%20tattoos.htm
+http://www.senecamarine.com/honor.htm
+http://www.senectutis.com/vacancy1.htm
+http://www.senescence.info/grandpa.html
+http://www.seniorcitizens.com/
+http://www.seniorcitizensbureau.com/articles/article3.htm
+http://www.seniorco-opnet.org/elkriver/
+http://www.seniority.co.uk/contributions/homeandhobbies/gardening/index.php?ArticleID=gardening_1011538625
+http://www.seniorjournal.com/NEWS/Aging/4-05-11AMD.htm
+http://www.seniorjournal.com/NEWS/Nutrition-Vitamins/4-06-23low-carb.htm
+http://www.seniorjournal.com/NEWS/Politics/4-08-04GrannyD.htm
+http://www.seniorjournal.com/NEWS/SeniorStats/5-01-19SeniorsInternet.htm
+http://www.seniormag.com/conditions/cancer/cancerglossary/t.htm
+http://www.senioronesource.com/Road.htm
+http://www.seniorshomeconnection.com/thinkingofselling26.html
+http://www.seniorsite.com/fulmore/fulmore_retirees_should_be_the_ones_to_define_retirement.asp
+http://www.seniorsnetwork.co.uk/campaigns/restore.htm
+http://www.seniorwomen.com/articles/julia/articlesJulia100900.html
+http://www.seniorwomen.com/ca/cw/01/cult120601.html
+http://www.seniorwomen.com/healthfitness.html
+http://www.seniorwomen.com/hfs/hf_fitness.html
+http://www.seniorwomen.com/hfs/hf_style.html
+http://www.senioryears.com/talkingback.html
+http://www.sennholz.com/fallingincome.html
+http://www.sense.bc.ca/news/news-04.htm
+http://www.sense.org.uk/involved/deafblind/seemehearme.htm
+http://www.sensenet.hu/engine.aspx?page=ceginformacio_article&QueryPluginContentName=sajtocikk_BBJ_Enterprise_Portals_HU
+http://www.sensenet.hu/engine.aspx?page=fejlesztoknek_article&QueryPluginContentName=sajtocikk_BBJ_Enterprise_Portals_HU
+http://www.sensenet.hu/engine.aspx?page=portalengine_article&QueryPluginContentName=sajtocikk_BBJ_Enterprise_Portals_HU
+http://www.sensenet.hu/engine.aspx?page=sajto_article&QueryPluginContentName=sajtocikk_BBJ_Enterprise_Portals_HU
+http://www.senser.com/04-01-06.htm
+http://www.sensesofcinema.com/contents/00/10/douglas.html
+http://www.sensesofcinema.com/contents/00/7/ghost.html
+http://www.sensesofcinema.com/contents/cteq/02/20/king_hu.html
+http://www.sensesofcinema.com/contents/cteq/05/35/volcano_high.html
+http://www.sensesofcinema.com/contents/directors/02/bresson.html
+http://www.sensesofcinema.com/contents/festivals/02/22/muff.html
+http://www.sensibility.com/classes.htm
+http://www.sensiblehealth.com/Y-Dan.php
+http://www.sensorsmag.com/resources/web_picks/wp0204.shtml
+http://www.sensuoussadie.com/sadiescolumns/series/fashion2.htm
+http://www.sentex.net/~mwandel/cannon/air_gun.html
+http://www.sentex.net/~mwandel/tech/scanner.html
+http://www.sentimentalrefugee.com/mira_hall.html
+http://www.sentrysafes.co.uk/
+http://www.sep.co.uk/venturer/feature_semicon.html
+http://www.sepnet.org/index.php?op=ViewArticle&articleId=167&blogId=1
+http://www.sepo.net/books/english-grammar/requirements-of-speech/
+http://www.sepos.org/
+http://www.seppelt.com.au/privacy/
+http://www.seps.org/cvoracle/faq/mold.html
+http://www.september11fund.org/letters.php
+http://www.september11news.com/
+http://www.september11news.com/WTCPlans.htm
+http://www.september11victims.com/september11Victims/VictimInfo.asp?ID=2609
+http://www.seqroc.qld.gov.au/content/Achievements.asp
+http://www.sequart.com/indexCONTINUITY2.htm
+http://www.sequentialtart.com/archive/dec04/pmbq.shtml
+http://www.serageldin.org/speeches/Buchrst8.htm
+http://www.serc.si.edu/labs/fish_invert_ecology/publications/publications_86_90.jsp
+http://www.serenapowers.com/playingcards2.html
+http://www.serenapowers.com/spanishcards.html
+http://www.serendipit-e.com/miasma/archives/2002_08.html
+http://www.serendipity.li/wot/kutabomb.htm
+http://www.serfes.org/orthodox/notforsale.htm
+http://www.serialtext.com/stir/45_minutes_of_deceit.html
+http://www.serif.com/store/partners/hyperpen12000_usb.asp
+http://www.seriousgames.org/ben/archives/000012.html
+http://www.seriouspoker.com/pdintro.html
+http://www.seriousstrength.com/protein.html
+http://www.seriouswheels.com/art-four-rings-1.htm
+http://www.serono.com/media/stories2004/20040205_en.jsp?major=4&minor=1
+http://www.serpentine.org.uk/advice/coach/fh47.php
+http://www.serpentine.org.uk/advice/coach/fh54.php
+http://www.serpentine.org.uk/tri/racing/reviews.php
+http://www.serve.com/marbeth/pros_cons_comp.html
+http://www.serve.com/pfc/misc/bogbasra.html
+http://www.serve.org/seir-tec/publications/lessondoc.html
+http://www.serverfiles.com/Other-network-software/Misc.-network-software/
+http://www.serversdirect.com/showpages.asp?pid=1063
+http://www.serverwatch.com/sreviews/article.php/10903_3434051_2
+http://www.serverwatch.com/sreviews/article.php/3467761
+http://www.serverworldmagazine.com/monthly/2001/04/oilgas.shtml
+http://www.serverworldmagazine.com/monthly/2003/02/home.shtml
+http://www.serverworldmagazine.com/sunserver/2000/12/analytical.shtml
+http://www.service-level-agreement.net/
+http://www.servicecaster.com/pj_casters.htm
+http://www.servicepals.com/
+http://www.services.unimelb.edu.au/llsu/resources/exams1.html
+http://www.services.unimelb.edu.au/plagiarism/advice.html
+http://www.sesameworkshop.org/parents/solutions/safety/
+http://www.sesd.info/hiresources.htm
+http://www.sesp.northwestern.edu/common/news/?NewsID=66
+http://www.setfocus.com/Terms.aspx
+http://www.seti-italia.cnr.it/Page%20Articles/Page03_HowManyCivilizations.htm
+http://www.seti.nl/article.php?id=1143
+http://www.seti.org/site/apps/nl/content2.asp?c=ktJ2J9MMIsE&b=194993&ct=363416
+http://www.seti.org/site/pp.asp?c=ktJ2J9MMIsE&b=178987
+http://www.setileague.org/editor/stride2.htm
+http://www.setimes.com/cocoon/setimes/xhtml/en_GB/features/setimes/features/2004/12/06/feature-01
+http://www.setimes.com/cocoon/setimes/xhtml/en_GB/features/setimes/features/2005/01/14/feature-01
+http://www.setoninstitute.org/grants_awarded/
+http://www.setsail.com/dashew/dashew219.html
+http://www.setsail.com/dashew/fpb_alu_dink.html
+http://www.setsail.com/products/mwh/mwh_toc.html
+http://www.setsail.com/s_logs/deridder/dragon8.html
+http://www.sett.ed.ac.uk/clink/opportunities/teenagers.html
+http://www.settingtheworldtorights.com/node/428
+http://www.sevendaysvt.com/columns/health_wanted_health/
+http://www.sevenseasmagazine.com/november2002/nov02_tessa.htm
+http://www.sevillaonline.com/ActiveX/vb5/ARFlatBttnCtrl.htm
+http://www.sew-dolling.com/baby_nursery.htm
+http://www.sewa.org/pmfund/progress.htm
+http://www.sewanee.edu/
+http://www.sewbid.com/auctionhelp/Buying.htm
+http://www.sewwrong.com/
+http://www.sex-project.com/kama-sutra-5.shtml
+http://www.sexnewsdaily.com/issue/b427-051603.html
+http://www.sexnewsdaily.com/issue/b488-121603.html
+http://www.sexnewsdaily.com/issue/b514-040704.html
+http://www.sexualassault.army.mil/Prevention.cfm
+http://www.sexualcontrol.com/
+http://www.sexualcontrol.com/sex-addiction-masturbation-pornography_01.html
+http://www.sexuality.org/authors/steinberg/cn156.html
+http://www.sexuality.org/erotmass.html
+http://www.sexuality.org/flirtadv.html
+http://www.sexuality.org/l/tantra/yoga.html
+http://www.sexuality.org/mgswing.html
+http://www.sexuality.org/other.html
+http://www.sexualityandu.ca/eng/parents/TS/health.cfm
+http://www.sexualoffenders.com/florida-sexoffenders.htm
+http://www.sexualoffenders.com/ohio-sexoffenders.htm
+http://www.sexualrecords.com/WSRtechnique.html
+http://www.sexwriters.com/unspoken.htm
+http://www.seyboldreports.com/TSR/subs/0505/volume_printers.php
+http://www.seykota.com/rm/history/history.htm
+http://www.sf-bbbs.org/2_volunt.htm
+http://www.sfbg.com/37/18/news_fcc.html
+http://www.sfbg.com/asc/224.html
+http://www.sfbr.org/pages/news_release_detail.php?id=57
+http://www.sfc.ucdavis.edu/pubs/brochures/kiwi.html
+http://www.sfca.co.uk/policy/green_paper_response3.htm
+http://www.sfcg.org/programmes/iran/programmes_iran.html
+http://www.sfcityguides.org/faqs.html
+http://www.sfcm.edu/prospective/application.aspx
+http://www.sfcoaches.org/dearcoach2004.html
+http://www.sfdonline.org/Link%20Pages/Link%20Folders/01Ds/sb281001.html
+http://www.sfdonline.org/Link%20Pages/Link%20Folders/Conference/Pol21/Chia.html
+http://www.sfenvironment.com/articles_pr/2000/article/042700.htm
+http://www.sfenvironment.com/articles_pr/2001/article/031101.htm
+http://www.sfexaminer.com/articles/2005/06/17/news/20050617_ne11_muni.txt
+http://www.sff.net/people/laresnick/filpro.html
+http://www.sff.net/people/mberry/finger1.htm
+http://www.sffoodbank.org/employment.html
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2002/11/24/LV115743.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2003/11/28/EBG5S3ABM41.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/08/19/MNG428AGR51.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/10/14/BUGR28JFEN59.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/10/22/MNCITY6.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/11/25/BUGJ1A120B1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/12/07/MNGSCA7P7P1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2004/12/30/MNG13AIBEN1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/01/28/WBG0IAVU2N1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/03/13/BROADBAND.TMP
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/03/20/LVGFBBPE611.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/03/30/MNGN6C0JB81.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/04/29/DDGQSCGERQ18.DTL&type=performance
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/05/01/MNG4TCID0F1.DTL&type=health
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/05/15/ING0TCN4721.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/08/HOGB0CJD4I27.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/10/SPGVOD6KMQ1.DTL&type=tvradio
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/12/MNGJND7G5V1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/21/BAGASDBOB41.DTL&type=health
+http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2005/06/27/MNG1VDF6EM1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2002/11/10/CM148265.DTL&type=news
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2004/05/19/DDG5R6NB431.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2004/08/09/SPGMS84Q7K23.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2004/10/02/SPG7P92VA91.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2004/11/12/BUG3N9PU2V1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2004/12/19/LVGTMACHV81.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2005/01/23/REG3RAUG5M1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2005/06/19/TRG4VD8IMH1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?f=/chronicle/archive/2005/06/26/TRGFFDDKSV1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=%2Fc%2Fa%2F2003%2F11%2F21%2FMNGLT37MH71.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2002/09/10/MN157237.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2003/02/21/BA49366.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/02/23/MNGJ7566RL1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/10/25/MNGED9FNH21.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/11/28/MNGQ4A2RLK1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/12/07/MNGSCA7P7P1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/01/13/MNGATAPKOF1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/01/14/MNGE6AQER31.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/02/02/EDGGTB3GAK1.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/05/01/MNG4TCID0F1.DTL&type=health
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/06/12/MNGJND7G5V1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2005/06/13/BLOG.TMP
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/1998/10/18/RV58736.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/1998/12/26/MN90209.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/03/12/RV49126.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/06/08/MN44384.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/06/08/MN44384.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/06/08/MN44384.DTL&type=science
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/07/05/BU20361.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2002/05/19/MN182963.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2002/08/26/BU67751.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2003/03/22/MN284946.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2003/05/25/BU268156.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2003/09/26/MN176326.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2003/11/21/MNGLT37MH71.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/02/23/BUGD855EQK1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/03/05/DDG8G5CL291.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/06/22/BUGRK79OT81.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/06/22/BUGRK79OT81.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/08/09/MNG5M828D140.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/09/14/BAGME8OK0V1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/10/25/MNGED9FNH21.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/10/30/BAGS99J2GR1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/11/03/MNGVB9KVA31.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/11/12/BUG3N9PU2V1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/11/26/DDGIEA0NDE1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2004/12/27/BAGP3AHAJC1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/02/BUGINAITB11.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/02/BUGINAITB11.DTL&type=business
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/02/BUGINAITB11.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/12/BUGKJAOPUA1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/12/BUGKJAOPUA1.DTL&type=business
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/12/BUGKJAOPUA1.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/25/EDG26AVQIC1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/25/EDG26AVQIC1.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/01/31/EDGT0ARQPL1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/05/26/DDGM7C8EID1.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2005/06/13/BUGOMD64QH51.DTL&type=tech
+http://www.sfgate.com/cgi-bin/article.cgi?file=/g/a/2003/09/03/notes090303.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2001/09/18/nosilvbullet.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2003/11/06/fool252.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2003/11/06/fool252.DTL&type=printable
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2004/12/10/notes121004.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2004/12/22/notes122204.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2005/02/04/bollydance.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/gate/archive/2005/06/07/worldviews.DTL
+http://www.sfgate.com/cgi-bin/article.cgi?file=/news/archive/2000/01/04/national0123EST0425.DTL
+http://www.sfgate.com/cgi-bin/article/article?f=/n/a/2005/02/05/international/i043253S54.DTL
+http://www.sfgate.com/cgi-bin/examiner/article.cgi?year=1997&month=07&day=21&article=NEWS2121.dtl
+http://www.sfgate.com/columnists/dailydish/
+http://www.sfgate.com/samesexmarriage/
+http://www.sfgate.com/traveler/guide/sf/neighborhoods/nb.shtml
+http://www.sfha.co.uk/sfha.asp?pg=32&s=%20%5BHA%20Name%5D%20&a=c
+http://www.sfha.co.uk/sfha.asp?pg=5&week=10/01/2005
+http://www.sfha.co.uk/sfha_text.asp?pg=5&week=10/01/2005
+http://www.sfist.com/
+http://www.sflnc.com/index/readthis/news/new_orleans/22.html
+http://www.sflovers.org/Reference/fandom/WSFS/sr-a-02.htm
+http://www.sfmatch.org/general/algorithm.html
+http://www.sfmelrose.u-net.com/adjustyourset/
+http://www.sfmuseum.org/1906/liquor.html
+http://www.sfmuseum.org/hist1/vig56proc.html
+http://www.sfmuseum.org/hist6/sherman2.html
+http://www.sfmuseum.org/quake/awss.html
+http://www.sfn.org/content/Publications/BrainBriefings/fear.html
+http://www.sfowler.force9.co.uk/page_15.htm
+http://www.sfpe.org/sfpe30/omnisam/event/eventreg_info.cfm?product_id=292
+http://www.sfsf.com.au/hansfoik_deepquestions.htm
+http://www.sfsite.com/01b/nor49.htm
+http://www.sfsite.com/04b/gdb79.htm
+http://www.sfsite.com/05b/aa176.htm
+http://www.sfsite.com/columns/steven120.htm
+http://www.sfsite.com/fsf/bibliography/fsfcovartwhen07.htm
+http://www.sfsite.com/gary/wise01.htm
+http://www.sfstampede.com/OffTheIce/EventsAndPromotions.cfm
+http://www.sfsu.edu/~career/students/resume.html
+http://www.sfsu.edu/~poetry/narrativity/issue_three/alvarez1.html
+http://www.sftt.org/
+http://www.sftt.org/cgi-bin/csNews/csNews.cgi?command=viewone&id=327&database=DefenseWatch%20Archive.db
+http://www.sftt.org/dt040.html
+http://www.sftu.org/
+http://www.sfu.ca/archaeology/museum/ndi/mystudy.html
+http://www.sfu.ca/casr/ft-bullock1.htm
+http://www.sfu.ca/cognitive-science/vancouver-studies/
+http://www.sfu.ca/economics/research/working/wpjanfeb99.html
+http://www.sfu.ca/philosophy/schulte/topics.htm
+http://www.sfwa.org/ergonomics/eyestrain.htm
+http://www.sfwa.org/writing/copyed.htm
+http://www.sfweekly.com/Issues/2005-06-22/news/infiltrator.html
+http://www.sfweekly.com/issues/2000-03-01/dining/eat2_print.html
+http://www.sfweekly.com/issues/2000-03-01/eat2.html
+http://www.sfweims.com/ratingsStandard.html
+http://www.sg.ufl.edu/branches/legislative/senate_docs/minutes/2005%5C05-10-05.htm
+http://www.sg1archive.com/s4.shtml
+http://www.sgaus.org/armyres.htm
+http://www.sgb-midatlantic.org/features/feature6.html
+http://www.sgh.com/publications/str-dsn/str-dsn.htm
+http://www.sghms.ac.uk/Courses/undergrad/foundation_med.htm
+http://www.sgi-usa.org/thesgiusa/membercorner/peaceproposals/peaceproposal2002.htm
+http://www.sgi.com/company_info/newsroom/press_releases/2005/may/fraunhofer.html
+http://www.sgi.org/english/Features/quarterly/0101/casestudy.htm
+http://www.sgilbertcompaniesinc.com/foreign/srilanka.html
+http://www.sgir.org/newsletter/postconf.htm
+http://www.sgisland.org/pages/main/book.htm
+http://www.sgpc.net/rehat_maryada/section_four_chap_eleven.html
+http://www.sgps.ca/health/dental.asp
+http://www.sgrin.co.uk/production/ProductionCalendar.html
+http://www.sgrm.com/art21.htm
+http://www.sgtstryker.com/weblog/archives/001015.php
+http://www.sgvarc.org/?id=11&sub=27&sid=
+http://www.sha.org.uk/cm/newsStory.asp?cmnID=1967&cmnRef=35&cmnTopic=2
+http://www.sha.state.md.us/ImprovingOurCommunity/oppe/4f/glos_key_terms.htm
+http://www.shaadi.com/wedding/fashion/etiquette/050208-wearing-this-valentine-1.php
+http://www.shaadi.com/wedding/health/grooming/050520-natural-colour.php
+http://www.shaav.com/professional/linguistics/evollang.html
+http://www.shacamerica.net/resources_security.htm
+http://www.shacknews.com/extras/e_playinggames/
+http://www.shadesofday.com/
+http://www.shadesofday.com/method.html
+http://www.shadisoft.com/speak/
+http://www.shadisoft.com/speakmail2000/
+http://www.shadownode.com/shadowrun/srcamp/contacts.html
+http://www.shadowrunrpg.com/
+http://www.shadowrunrpg.com/fiction/fiction6_unmaking.shtml
+http://www.shadowrunrpg.com/index.shtml
+http://www.shadowrunrpg.com/missions/gamemasters.shtml
+http://www.shadowsonthewall.co.uk/04/art-i.htm
+http://www.shadowsonthewall.co.uk/04/art-k.htm
+http://www.shadowsonthewall.co.uk/04/short-a.htm
+http://www.shadowspace.net/matters.html
+http://www.shafr.org/council%20minutes/minutes105.htm
+http://www.shafr.org/guide%20main.htm
+http://www.shairport.com/en/about04.jsp
+http://www.shakealeg.org/SpclEvntsSpnsrshp.htm
+http://www.shakespeare-w.com/english/game/
+http://www.shakespearefest.org/Christmas%20Carol%20Study%20Guide.htm
+http://www.shakespearespeddler.com/archive/april2000.html
+http://www.shaksper.net/archives/2005/0889.html
+http://www.shallowsky.com/eyepiece-faq.html
+http://www.shallowwaterangler.com/conservation/050418/
+http://www.shamansense.org/articles/spirtually.html
+http://www.shambhala.org/centers/grassvalley/
+http://www.shambhala.org/meditationinstruction.html
+http://www.shambhalamountain.org/magazine/modules.php?name=News&file=article&sid=18
+http://www.shambhalasun.com/Archives/Columnists/Ray/nov_01.htm
+http://www.shambhalasun.com/Archives/Features/1999/May99/gere.htm
+http://www.shambles.net/pages/learning/primary/Zoos/
+http://www.shaml.org/agenda/2003/humanitarian.html
+http://www.shamwari.com/article5.asp
+http://www.shands.org/public/faq/Insurance.htm
+http://www.shanemedia.com/article.asp?articleID=679
+http://www.shanghai.ws/TIClook11334.html
+http://www.shanghaiexpat.com/PNphpBB2-viewtopic-t-21813.phtml
+http://www.shanghaimosquito.com/blog/2003_10_01_archive.html
+http://www.shanghaimosquito.com/blog/2004_05_01_archive.html
+http://www.shanghaimosquito.com/blog/2004_12_01_archive.html
+http://www.shankly.com/retirement.htm
+http://www.shannonthunderbird.com/residential_schools.htm
+http://www.shapeshifter.net.nz/
+http://www.shapingsf.org/ezine/labor/bsstrike/main.html
+http://www.shapingsf.org/ezine/labor/offworkers/main.html
+http://www.shapingsf.org/ezine/labor/shanghai/main.html
+http://www.shapingtomorrow.com/welcome.cfm?mod=3&top=55&stop=179
+http://www.sharbrough.net/
+http://www.shardslrp.com/community/tales/fivesouls.html
+http://www.share.org/member_center/communications/digest/janfeb04/feature.cfm
+http://www.shared-vision.com/old_site/y01m05/storyb02.html
+http://www.sharedlearnings.org/index.cfm?fuseaction=News.FA_dsp_news&ym=2003-06
+http://www.shareholder.com/bid/Releases.cfm?Year=2000
+http://www.shareholder.com/bid/news/20040728-140503.cfm
+http://www.shareholder.com/ruralmetro/ReleaseDetail.cfm?ReleaseID=35019
+http://www.shareintl.org/magazine/old_issues/sep_04.htm
+http://www.shareintl.org/magazine/si_letters.htm
+http://www.sharenet.co.za/spread/glossary.phtml
+http://www.sharewareconnection.com/list.php?categ=504500&page=1&criteria=date
+http://www.sharewareconnection.com/multimedia-design-image-editing-1.htm
+http://www.sharewareconnection.com/multimedia-design-media-management-1.htm
+http://www.sharewareconnection.com/titles/film.htm
+http://www.sharewareconnection.com/titles/inner.htm
+http://www.sharewareconnection.com/titles/lotus-1-2-3.htm
+http://www.sharewareconnection.com/titles/speaking-caller-id.htm
+http://www.sharewareorder.com/SPAD-VII-1-32-scale-19-Corps-RAS-DCM-scheme-2-download-22257.htm
+http://www.shareyourstory.org/webx?128@68.GALha11glWb.0@.ee8ca29
+http://www.shareyourstory.org/webx?14@68.GALha11glWb.0@.ee8ca29/0
+http://www.shareyourstory.org/webx?7@68.GALha11glWb.0@.ee8ca29/18
+http://www.shark.com/gngcd/gngcd/081403.php
+http://www.sharp.org.uk/FAQSummer.htm
+http://www.sharpman.com/Article.asp?ArticleID=540
+http://www.sharpman.com/Article.asp?Department=SharpWork
+http://www.sharptext.com/terms.html
+http://www.shastalake.com/shastalake/
+http://www.shastamarketing.com/proven-results.htm
+http://www.shatincollege.edu.hk/parents/pta/bus.htm
+http://www.shawnallison.com/dbacksbraves.php
+http://www.shawpittman.com/home/news.nsf/0/251BD37097B657AC85256F3B00673D83?OpenDocument
+http://www.shawresources.com/artpareto.html
+http://www.shawtaichi.com/newsletter.htm
+http://www.shawu.edu/SUDS/html/education/CTTP.html
+http://www.shd.org.yu/HtDocs/SHD/SHD-publishing.htm
+http://www.she-net.com/modules/newbb/viewtopic.php?topic_id=1837&forum=7
+http://www.shea-butter.com/letter_march_03.shtml
+http://www.shearman.com/inniatives/assoc_init.html
+http://www.sheboygan.lib.wi.us/pages/meetingrooms.html
+http://www.shecards.net/shop.html
+http://www.sheck.com/serendipity/
+http://www.sheeplaughs.com/scrooge/stave1page2.htm
+http://www.shef.ac.uk/cics/corptime/usingct/ct_guideline.html
+http://www.shef.ac.uk/nfa/history/rides/twist.php
+http://www.shef.ac.uk/nlc2004/Proceedings/Symposia/Symposium9/Jones_et_al.htm
+http://www.shef.ac.uk/uni/academic/N-Q/psysc/staff/sihomer/prp.html
+http://www.shef.ac.uk/uni/projects/icg/
+http://www.shef.ac.uk/uni/projects/ptpdlp/soc6.html
+http://www.shef.ac.uk/~eas/PostgradTaught/DLJapaneseLanguage.shtml
+http://www.shef.ac.uk/~ptpdlp/newsletter/issue87.html
+http://www.shefc.ac.uk/about_us/departments/learning_teaching/jltc_annual_report.htm
+http://www.sheffield.gov.uk/index.asp?pgid=5550&mtype=print
+http://www.sheffieldforum.co.uk/showthread/t-17937.html
+http://www.sheffieldforum.co.uk/showthread/t-2357.html
+http://www.sheffieldforum.co.uk/showthread/t-26458.html
+http://www.sheffieldmayday.ukf.net/war/greatestargument.htm
+http://www.sheffieldnet.com/srn_artice16.html
+http://www.sheilaomalley.com/
+http://www.sheilaomalley.com/archives/004655.html
+http://www.sheldensays.com/help_solve_a_50yearold_mystery.htm
+http://www.sheldonbrown.com/harris/mafac.html
+http://www.sheldonfamily.org/ho_shel.htm
+http://www.sheldonsiegel.com/book4/chapter2.htm
+http://www.sheldrake.org/papers/Staring/followup_full.html
+http://www.shelflife.com/shop/shelflife/life051.html
+http://www.shellchemicals.com/news/1,1098,72-news_id=501,00.html
+http://www.shellvacationsclub.com/GetSVSHomeScreen.event
+http://www.shelterpub.com/_fitness/_weight_training/B_Pearl_story.html
+http://www.shelterstyle.com/portfolio_6.mv
+http://www.shemalestrokers.com/
+http://www.shenandoahconnection.com/winchesterrealestate.htm
+http://www.shenango.psu.edu/sa_clubs.htm
+http://www.shepherd.edu/compserv/prevent/internetch.htm
+http://www.sheppardsenator.com/archives/2004/073004/a0203.shtml
+http://www.sheppardsenator.com/stories/b0103.shtml
+http://www.shepparton.vic.gov.au/home/guide/12703
+http://www.sheridanc.on.ca/vpa/accouncil/acnov801.html
+http://www.sherlock-holmes.co.uk/library/story.html
+http://www.sherlockian.net/world/221b.html
+http://www.shermanhillmrrc.org/club_by_laws.html
+http://www.sheroescentral.com/dc/dcboard.php?az=show_topic&forum=13&topic_id=4222&mesg_id=4222&page=
+http://www.sheroesfans.com/dc/dcboard.php?az=show_mesg&forum=13&mesg_id=859&topic_id=827
+http://www.sherpa-walking-holidays.co.uk/tours/escorted/fgrrc.asp
+http://www.sherpa-walking-holidays.co.uk/walking-vacations.htm
+http://www.shesaid.com.au/article/2005/06/07/1741_ll.php
+http://www.sheshunoff.com/email/archive/0404/finance_new1.html
+http://www.shetha.com/blog/archives/000160.html
+http://www.sheu.org.uk/leaflets/rolsroyc.htm
+http://www.shgresources.com/ia/timeline/
+http://www.shgresources.com/tn/symbols/insectladybug/
+http://www.shh.org/disclaimer.asp
+http://www.shhh.org/html/TC03.html
+http://www.shiachat.com/forum/lofiversion/index.php/t6331.html
+http://www.shiawasseehistory.com/zimmerman.html
+http://www.shibuya.com/garden/colorpsycho.html
+http://www.shifthappens.com/art_createvalue.html
+http://www.shifthappens.com/whyjim.html
+http://www.shiftworker.com/articles-and-links/sleep_loss_and_chronic_fatigue.htm
+http://www.shikanda.net/ethnicity/labour.htm
+http://www.shin-shih.com.tw/playintroducten.htm
+http://www.shinraonline.com/board/forumdisplay.php?f=521
+http://www.ship.edu/~cgboeree/anticipation.html
+http://www.ship.edu/~cgboeree/conclusions.html
+http://www.ship.edu/~cgboeree/jung.html
+http://www.ship.edu/~cgboeree/kelly.html
+http://www.ship.edu/~cgboeree/maslow.html
+http://www.ship.edu/~cgboeree/meaning.html
+http://www.ship.edu/~cgboeree/psychosocialhistory.html
+http://www.ship.edu/~cgboeree/qualmethfour.html
+http://www.ship.edu/~cgboeree/rogers.html
+http://www.ship.edu/~cgboeree/sevenpersp.html
+http://www.ship.edu/~cgboeree/wundtjames.html
+http://www.shire.net/big.brother/utah.htm
+http://www.shirebooks.co.uk/Industrial/industrial-bl.htm
+http://www.shirleyclarke-education.org/learning_teams_update/southend_9january.html
+http://www.shirleys-wellness-cafe.com/anibooks.htm
+http://www.shirleys-wellness-cafe.com/animal-shop.htm
+http://www.shirleys-wellness-cafe.com/eczema.htm
+http://www.shirleys-wellness-cafe.com/flaxoil.htm
+http://www.shirleys-wellness-cafe.com/tf/pets.htm
+http://www.shirleys-wellness-cafe.com/tf/s/pets.htm
+http://www.shmc.org/index.php/page/245
+http://www.shmoo.com/~bmc/
+http://www.shobanarayan.com/FTmain.htm
+http://www.shocklogic.org/shocklogic/nlstory.cfm?ID=39&NLID=10
+http://www.shockwavewriters.com/Articles/WS/border.htm
+http://www.shodor.org/interactivate/activities/
+http://www.shoestoboots.com/danskoshoe_1.htm
+http://www.shogaya.com/bbs-e/minibbs.cgi
+http://www.shoggoth.net/article.php3?story_id=100
+http://www.shooting4all.com/advert05.asp
+http://www.shooting4all.com/land_rovers.asp
+http://www.shootingstarhistory.com/home.html
+http://www.shop.com/amos/cc/main/catalog/pcd/10410187/ccsyn/260/_x_/Home-Visions-
+http://www.shopaarons.com/sports/race_report_bristol2.htm
+http://www.shopbydiet.com/
+http://www.shopcol.com/mit.html
+http://www.shopcol.com/neclcd1760vm.html
+http://www.shopcol.com/neclcd1860nx.html
+http://www.shopcol.com/neclcd2080ux.html
+http://www.shopdownhomer.com/pgi-Product%20Spec?18900,
+http://www.shopdownhomer.com/pgi-Product%20Spec?4196,
+http://www.shopetc.com/helpdesk/index.do
+http://www.shopireland.ie/dvd/detail/B00005A3KS/Point-Break-(REGION-1)-(NTSC)/
+http://www.shoplocal.com/courier-journal/default.aspx?action=browsespecialpromo&promo=valentines_him
+http://www.shoplocal.com/theolympian/default.aspx?action=browsespecialpromo&promo=valentines_him
+http://www.shoplocal.com/theolympian/new_user_entry.aspx?CityStateZip=98501
+http://www.shopping.com/xDN-Baby_Care
+http://www.shopping.com/xDN-Clothing--shirts_and_tops-shadowline_lingerie~V-grid
+http://www.shopping.com/xMDS-Anyway--The-Paradoxical-Commandments--Finding-Personal-Meaning-in-a-Crazy-World~PD-650407285633
+http://www.shopping.com/xMR-Blue_Nile~MRD-9101~RD-805206
+http://www.shopping.com/xMR-circuit_city_stores,_inc._~MRD-9270~PG-3~S-3
+http://www.shopping.com/xMR-store_dell~MRD-9228~PG-11~S-1
+http://www.shopping.com/xPO-Citizen_Elektra_Diamond_Eco_Drive_EP520054A
+http://www.shopping.com/xPR-iPod_4_GB_Blue_M9436LL_A~RD-163249163908
+http://www.shoppingtarget.com/Food_Diet_Sugar-Free.html
+http://www.shopsofli.com/Mall/Stores/StoreInfo.asp?Store_id=1000008761
+http://www.shopsofli.com/Mall/Stores/StoreInfo.asp?Store_id=1000043213
+http://www.shopwoodfield.com/IM/?store=Anchor4
+http://www.shorediving.com/Earth/Canada_/Vancouver_Island_Central_/Mystery_Wreck/review_4444.htm
+http://www.short-media.com/forum/showthread.php?t=20368
+http://www.shortcourses.com/choosing/files/08.htm
+http://www.shortcourses.com/choosing/sensors/05.htm
+http://www.shortcourses.com/choosing/types/04.htm
+http://www.shortnews.com/web/id/3386/u_id/56602/x_id/Sex%20on%20TV%20Increasing%20Dramatically/start.cfm
+http://www.shortnews.com/web/id/45933/u_id/56602/x_id/Ford%20Giving%20Computers,%20GM%20Offering%20Interest-Free%20Loans/start.cfm
+http://www.shortnews.com/web/id/46090/u_id/56602/x_id/Entire%20Law%20Firm%20Sanctioned%20For%20Lying%20and%20Sent%20Back%20to%20School/start.cfm
+http://www.shortsupport.org/News/0035.html
+http://www.shotgunconcepts.com/speaking.htm
+http://www.shotinthedark.info/archives/000778.html
+http://www.shotinthedark.info/archives/005930.html
+http://www.shotokai.cl/otras_artes/151_em_.html
+http://www.shotokai.com/ingles/history/hagi.html
+http://www.shotokanworld.com/sensei_richard_amos.htm
+http://www.shout.net/~mathman/html/rotations_with_matrices.html
+http://www.shout99.com/contractors/showarticle.pl?id=12226&n=300
+http://www.shoutout.info/
+http://www.show.scot.nhs.uk/cso/Publications/rm25/rm25-01.htm
+http://www.show.scot.nhs.uk/scottishhealthsurvey/sh806-01.html
+http://www.show.scot.nhs.uk/tuht/hosps/pri/pri.htm
+http://www.show.scot.nhs.uk/wishaw/public/inpatient.htm
+http://www.showbusinessweekly.com/
+http://www.showingsolutions.com/Out_HowItWorks.asp
+http://www.showmenews.com/2004/Sep/20040914Comm010.asp
+http://www.showroom.com.au/dragons/fitness.htm
+http://www.shragerlaw.com/html/medical_malpractice.html
+http://www.shredofevidence.com/may03/cold_cocked.html
+http://www.shredofevidence.com/may04/hit_and_ran.html
+http://www.shreveporttimes.com/apps/pbcs.dll/article?AID=/20041130/NEWS05/411300311/1064
+http://www.shrewsburytown.premiumtv.co.uk/page/SupportersTrustDetail/0,,10443~489829,00.html
+http://www.shrinershq.org/patientedu/arthrogryposis1.html
+http://www.shrinershq.org/shc/chicago/patientinfo.html
+http://www.shrm.org/
+http://www.shrm.org/hrmagazine/articles/0902/0902contavespi.asp
+http://www.shroomery.org/forums/showflat.php/Cat/0/Number/3532432/page/fpart/2/vc/1
+http://www.shroomery.org/forums/showflat.php?Cat=0&Board=Forum14&Number=3653928&page=0&fpart=3
+http://www.shs.starkville.k12.ms.us/mswm/MSWritersAndMusicians/writers/Faulkner.html
+http://www.shsu.edu/catalog/calendar.html
+http://www.shsu.edu/~his_ncp/NezPerce.html
+http://www.shsu.edu/~klett/ch%2033%20new.htm
+http://www.shtull-trauring.org/aron/Community/Articles/War_is_a_Force_That_Gives_us_Meaning.html
+http://www.shu.ac.uk/emls/10-1/revspilm.htm
+http://www.shu.ac.uk/emls/si-14/siegcity.html
+http://www.shu.ac.uk/schools/cs/design/furniture/apply.htm
+http://www.shundahai.org/APPEALFIRE.htm
+http://www.shunn.net/mormon/terror/terror03.html
+http://www.shutterblinds.com/shutters_blinds/raised_panel.asp
+http://www.shutterbug.com/features/0804sb_wideopen/
+http://www.shutterbug.net/columns/0903sb_lesson/
+http://www.shuttleworthfoundation.org/index.php?option=content&task=view&id=73&Itemid=28
+http://www.shytobuy.co.uk/index.cfm?mm=10&fuse=SkinCare&cat=30&sub=67
+http://www.si.edu/scmre/educationoutreach/ourstory.htm
+http://www.si.umich.edu/chico/instrument/pages/tlkdrum_gnrl.html
+http://www.si.umich.edu/spies/people.html
+http://www.sia.com/speeches/html/purcell11-7-03.html
+http://www.siam.org/siamnews/05-01/howes.htm
+http://www.siamdivers.com/advice/advice.htm
+http://www.siamesekitties.com/2000int.html
+http://www.siav.org/vivisection/rdelays/
+http://www.siburesort.com/Getting%20to%20Sibu/Getting%20to%20Sibu.htm
+http://www.sice.oas.org/TPD/CAR/MatxMarch16_2005.asp
+http://www.sice.oas.org/Trade/us-jrd/usjrd2.asp
+http://www.sice.oas.org/trade/crcrcom_e/Chap01_e.asp
+http://www.sichosinenglish.org/cgi-bin/calendar?holiday=purim1821
+http://www.sick-boy.com/roadtoperdition.htm
+http://www.sickle-psychology.com/
+http://www.sics.se/~martins/research.php
+http://www.siderean.com/pr20041206stidolph.html
+http://www.sideroad.com/seamless/column20.html
+http://www.sidhe.org/~dan/blog/archives/cat_what_couldve_been.html
+http://www.sidis.net/Genius.htm
+http://www.sidis.net/tf1.htm
+http://www.sidran.org/casa.html
+http://www.sidroth.org/prayer_main28.htm
+http://www.siebertnet.com/html/body_newsletter.asp?Idx=43
+http://www.siecus.org/policy/PUpdates/pdate0116.html
+http://www.sienasojourn.com/sienaletter.html
+http://www.sierraclub.ca/national/media/item.shtml?x=817
+http://www.sierraclub.ca/national/programs/atmosphere-energy/climate-change/ten-myths-kyoto.html
+http://www.sierraclub.com/sprawl/factsheet.asp
+http://www.sierraclub.org/biotech/kraft.asp
+http://www.sierraclub.org/ca/scc/bylaws.asp
+http://www.sierraclub.org/john_muir_exhibit/life/life_and_letters/chapter_5.html
+http://www.sierraclub.org/john_muir_exhibit/life/life_and_letters/chapter_8.html
+http://www.sierraclub.org/john_muir_exhibit/writings/cruise_of_the_corwin/appendix_2.html
+http://www.sierraclub.org/john_muir_exhibit/writings/my_first_summer_in_the_sierra/chapter_1.html
+http://www.sierraclub.org/john_muir_exhibit/writings/my_first_summer_in_the_sierra/chapter_11.html
+http://www.sierraclub.org/john_muir_exhibit/writings/my_first_summer_in_the_sierra/chapter_4.html
+http://www.sierraclub.org/john_muir_exhibit/writings/our_national_parks/chapter_3.html
+http://www.sierraclub.org/john_muir_exhibit/writings/the_yosemite/chapter_6.html
+http://www.sierraclub.org/planet/backissues.asp
+http://www.sierraclub.org/sierra/199903/lol.asp
+http://www.sierraclub.org/sierra/199911/lol.asp
+http://www.sierraclub.org/sierra/200009/whyvote.asp
+http://www.sierraclub.org/sierra/200011/lol.asp
+http://www.sierraclub.org/sierra/200103/letters.asp
+http://www.sierraclub.org/sierra/200311/media1.asp
+http://www.sierraclub.org/sierra/200405/lol.asp
+http://www.sierraclub.org/sierra/200407/lol.asp
+http://www.sierraclub.org/sierra/200411/lol.asp
+http://www.sierraclub.org/sprawl/factsheet.asp
+http://www.sierraclub.org/trade/overview/
+http://www.sierraclubmass.org/events/events.html
+http://www.sierraclubri.org/transportation/
+http://www.sierraconsultants.net/Stormwater%20Filters.htm
+http://www.sierraoaksranch.com/links.html
+http://www.sierrasun.com/article/20050106/LIFE/101060011
+http://www.sierratimes.com/05/01/15/soldier_may_speak.htm
+http://www.sierratradingpost.com/xq/asp/base_no.80369/dept_id./est./qx/product.htm
+http://www.sierratradingpost.com/xq/asp/base_no.80369/dept_id./qx/product.htm
+http://www.sierratradingpost.com/xq/asp/base_no.80370/dept_id./qx/product.htm
+http://www.sierratradingpost.com/xq/asp/base_no.80371/dept_id./est./qx/product.htm
+http://www.sierratradingpost.com/xq/asp/base_no.80371/dept_id./qx/product.htm
+http://www.siestakeychamber.com/about.htm
+http://www.sifc.edu/Indian%20Studies/IndigenousThought/winter99/iroquois.htm
+http://www.sifry.com/alerts/archives/000320.html
+http://www.sifry.com/alerts/archives/2005_03.html
+http://www.sigames.com/softography.php?type=view&id=13
+http://www.sigames.com/the_bootroom.php?type=view&article_id=846
+http://www.sightquest.com/shopping/automobiles-3163.htm
+http://www.sightsavers.org.uk/html/eyeconditions/human_eye_default.htm
+http://www.sigilgames.com/000103.php
+http://www.siglamag.com/features/0407/AngelsWithDirtyFaces.php
+http://www.sigmadesigns.com/investors/earnings/F2000_Q3.htm
+http://www.sigmatel.com/products/tech-support.htm
+http://www.sign-lang.uni-hamburg.de/SigningBooks/SBRC/Grid/d71/guide17.htm
+http://www.sign.ac.uk/guidelines/fulltext/54/section2.html
+http://www.sign.ac.uk/guidelines/fulltext/56/section9.html
+http://www.sign.ac.uk/guidelines/fulltext/66/section2.html
+http://www.signaturebooks.com/JosephSmith.htm
+http://www.signindustry.com/digital/articles/2004-08-31-JD-CRMpt1.php3
+http://www.signonsandiego.com/news/weblogs/brain/archives/001279.html
+http://www.signonsandiego.com/travel/askgeorge.html
+http://www.signonsandiego.com/uniontrib/20040721/news_1c21patients.html
+http://www.signonsandiego.com/uniontrib/20041128/news_1b28jaffe.html
+http://www.signonsandiego.com/uniontrib/20041207/news_lz1c7qa.html
+http://www.signonsandiego.com/uniontrib/20041214/news_lz1c14well.html
+http://www.signonsandiego.com/uniontrib/20050102/news_lz1v2fear.html
+http://www.signonsandiego.com/uniontrib/20050120/news_1n20iraq.html
+http://www.signonsandiego.com/uniontrib/20050123/news_1m23sdsu.html
+http://www.signonsandiego.com/uniontrib/20050127/news_1n27derail.html
+http://www.signserv.com/alphadisplays.html
+http://www.signweb.com/electric/cont/nuts990319.html
+http://www.sigov.si/mzz/eng/slovenes_abro/about_us.html
+http://www.sigphi.org/theta/chief.htm
+http://www.sihe.ac.uk/sihe/hum_pa/pthuman.htm
+http://www.sikhlionz.com/antisikhantimuslimriots.htm
+http://www.sikhnet.com/sikhnet/articles.nsf/0/c0d52a29e13995de87256671004e4634?OpenDocument
+http://www.sil.org/anthro/articles/sustain.htm
+http://www.sil.org/klp/ttt/chapter1.html
+http://www.silcom.com/~peterf/ideas/carter5.htm
+http://www.silentmajorityny.org/your_stories/
+http://www.silentqueuedesign.com/babyblog/
+http://www.siliconbeachtraining.co.uk/human_resources_training.htm
+http://www.siliconbeachtraining.co.uk/sales_training.htm
+http://www.siliconbeat.com/
+http://www.siliconchip.com.au/cms/A_102993/article.html
+http://www.siliconera.com/ps2/fmadreamcarnival/040908.htm
+http://www.siliconstrategies.com/markets/
+http://www.siliconstrategies.com/markets/business/?archiveDate=01/01/2005
+http://www.siliconstrategies.com/markets/business/europe/?archiveDate=01/01/2005
+http://www.siliconvalley.com/mld/siliconvalley/8461735.htm
+http://www.siliconvalley.com/mld/siliconvalley/business/columnists/dan_gillmor/ejournal/2529072.htm
+http://www.siliconvalley.com/mld/siliconvalley/business/columnists/gmsv/11211227.htm
+http://www.siliconvalley.com/mld/siliconvalley/business/columnists/gmsv/6273717.htm
+http://www.siliconvalley.com/mld/siliconvalley/business/columnists/gmsv/6273717.htm?template=contentModules/printstory.jsp
+http://www.siliconvalley.com/mld/siliconvalley/business/special_packages/silicon_valley_150/5630613.htm
+http://www.siliconvalley.com/mld/siliconvalley/business/special_packages/silicon_valley_150/5630613.htm?template=contentModules/printstory.jsp
+http://www.silklantern.com/bb_profile.php?mode=view&user=164
+http://www.silver-engineering.com/p_n_c.htm
+http://www.silver-investor.com/charlessavoie/DOGS.htm
+http://www.silver-investor.com/charlessavoie/edmondson.htm
+http://www.silverblue.org/wp/index.php?cat=25
+http://www.silverbulletcomicbooks.com/ambi/104668606257023.htm
+http://www.silverbulletcomicbooks.com/reviews/110812888963663.htm
+http://www.silverbulletcomicbooks.com/ynb/
+http://www.silverdiscount.com/customDocs/just2System.asp
+http://www.silverliningmm.com/photohldrframe.htm
+http://www.silvermedicine.org/silver-heavy-metal.html
+http://www.silversmithing.com/1forum.htm
+http://www.silversure.com/shop/cutlery_collector.php
+http://www.silvertipstea.com/Merchant2/merchant.mv?Screen=CTGY&Store_Code=STTRR&Category_Code=FAIRTRADE
+http://www.simaqianstudio.com/
+http://www.simbithi.com/
+http://www.simegen.com/jl/kren/krenMoltBrotherinfo.html
+http://www.simhq.com/simhq3/sims/turret/sbmissions/scenarioprinciples.shtml
+http://www.simlabs.arc.nasa.gov/vms/research.html
+http://www.simmonsco-intl.com/company_qa.asp
+http://www.simnet.is/halfdanh/vestur.htm
+http://www.simon-rose.com/
+http://www.simon.rochester.edu/programs/simon_experience_exe.aspx
+http://www.simon.rochester.edu/programs/simon_experience_ms.aspx
+http://www.simon.rochester.edu/programs/simon_experience_pt.aspx
+http://www.simonlewis.com/books/cars_c.htm
+http://www.simonmidgley.co.uk/achieving/inclusion.htm
+http://www.simonsays.com/content/content.cfm?sid=33&pid=407189&agid=2
+http://www.simonsays.com/content/content.cfm?sid=33&pid=501102&agid=2
+http://www.simonsays.com/content/content.cfm?sid=33&pid=505977&agid=4
+http://www.simonsays.com/content/content.cfm?sid=33&pid=507409
+http://www.simonsays.com/content/content.cfm?sid=33&pid=512651
+http://www.simonsays.com/content/content.cfm?sid=45&pid=507409
+http://www.simonsays.com/content/content.cfm?sid=45&pid=512651
+http://www.simonsays.com/content/content.cfm?sid=798&pid=505977&agid=4
+http://www.simonyi.ox.ac.uk/dawkins/WorldOfDawkins-archive/Catalano/box/behe.shtml
+http://www.simonyi.ox.ac.uk/dawkins/WorldOfDawkins-archive/Dawkins/Work/Articles/1999-10-04snakeoil.shtml
+http://www.simonyi.ox.ac.uk/dawkins/WorldOfDawkins-archive/Dawkins/Work/Interviews/thinktnk.shtml
+http://www.simonyi.ox.ac.uk/dawkins/WorldOfDawkins-archive/Media/meaning_of_life.shtml
+http://www.simotime.com/vsmfsk01.htm
+http://www.simple-times.org/pub/simple-times/usec/wp01.html
+http://www.simplebits.com/
+http://www.simplebits.com/notebook/2003/09/08/simplequiz_part_iv_when_to_p.html
+http://www.simpleliving.net/simpleradio/resource.asp?sku=elal
+http://www.simpleliving.net/ymoyl/fom-article-16.asp
+http://www.simpleliving.org/Archives/XPac/XPac1987WarToys.html
+http://www.simpleliving.org/main/StudyGuides.html
+http://www.simplemotor.com/
+http://www.simpleplan.com/news.php
+http://www.simpletoremember.com/vitals/Anthropic-Principle.htm
+http://www.simpletoremember.com/vitals/LifeisforLove.htm
+http://www.simplewood.co.uk/feature.php?featureID=48
+http://www.simplonpc.co.uk/NorthSeaFerries.html
+http://www.simplyhandhelds.com/reviews/B00004VWM3_5.html
+http://www.simplyhydro.com/whatis.htm
+http://www.simplymanchester.co.uk/business.asp?id=524
+http://www.simpol.org/dossiers/dossier-UK/html-UK/implementation-UK.html
+http://www.simpsoncrazy.com/information/lists/recycled.shtml
+http://www.simpsonsfolder.com/production/
+http://www.sims.berkeley.edu/~hal/people/hal/NYTimes/2004-03-11.html
+http://www.sims.monash.edu.au/research/km/ackmids2003/program03.html
+http://www.simulation-argument.com/simulation.html
+http://www.simulationinformation.com/calendar.html
+http://www.simulations.co.uk/mixeval.htm
+http://www.sinatraarchive.com/tis/cold1.html
+http://www.sinauer.com/detail.php?id=8478
+http://www.sinc.sunysb.edu/Class/rndtable/the_magazine/essays/passing.html
+http://www.sinclair.edu/academics/egr/index.cfm
+http://www.sing365.com/music/lyric.nsf/Blueprint-Complication-lyrics-Kanye-West/A8F3DCA1A84640D648256FE1000D0D12
+http://www.sing365.com/music/lyric.nsf/D-X-L-Hard-White-lyrics-DMX/9BA4E112357272C848256874000C8C32
+http://www.sing365.com/music/lyric.nsf/Hate-The-Playa-lyrics-IMx/C6049698B6CC8D9348256BE500049D21
+http://www.sing365.com/music/lyric.nsf/Mosh-lyrics-Eminem/4B2AC85F1BA8364C48256F350006365C
+http://www.sing365.com/music/lyric.nsf/Real-Life-lyrics-Girls-Aloud/B5D8C37EC98F5E9C48256F550015E296
+http://www.sing365.com/music/lyric.nsf/South-Side-lyrics-Ashanti/CAA511F2F5654A6148256E8E0005EF18
+http://www.sing365.com/music/lyric.nsf/U-Know-What's-Up-Rap-Remix-lyrics-Xzibit/E9C483CEDA624A96482569FB0013427C
+http://www.singaporeexpats.com/forum/ftopic9850.html
+http://www.singers.com/world/africa.html
+http://www.singhsabha.com/ceremonies.htm
+http://www.singlefather.org/carticles/stayinginvolved123101.htm
+http://www.singlescafe.net/10tips.html
+http://www.singlescafe.net/HSM.html
+http://www.singlesouthernguy.com/
+http://www.singletrackworld.com/article.php?sid=1602
+http://www.singmind.com/singleminded/
+http://www.singmind.com/singleminded/home.htm
+http://www.singpersonals.com/
+http://www.sinistervisions.com/portfolio/port_testify.shtml
+http://www.sinkandstove.co.uk/albumpages/hospitalradio2.html
+http://www.sinoherbking.com/sk1/news20021018-1.html
+http://www.sintef.no/content/page1____1749.aspx
+http://www.sintef.no/content/page1____3581.aspx
+http://www.sintonisd.net/Administration/articles/TESTIMONY_BEFORE_THE_JOINT_SELECT_COMMITTEE.htm
+http://www.siol-nan-gaidheal-usa.com/educt.htm
+http://www.siol-nan-gaidheal.com/agg.htm
+http://www.siol-nan-gaidheal.com/yester.htm
+http://www.siom.com/resources/texts/articles/xie-kr/xie.html
+http://www.sioux-art.com/en/articles.php?CatNo=46
+http://www.sipcenter.com/sip.nsf/html/Reports+about+SIP
+http://www.sipe.com/halebopp/cometpix.htm
+http://www.sipixdigital.com/support/Common/usb_xp.shtml
+http://www.siptu.ie/publications/ppe.html
+http://www.sir-cliff.com/cliffv5.html
+http://www.sir-george-young.org.uk/FAQ/newsitem.cfm?newsid=1545
+http://www.sir.com.au/news/london.html
+http://www.sirc.org/articles/articles.html
+http://www.sirc.org/publik/fvintro.html
+http://www.sirdelux.com/content/interview.htm
+http://www.sirharrylauder.com/lyrics/
+http://www.sirinet.net/~jgjohnso/apbio2.html
+http://www.sirlunchalot.com/
+http://www.sirmeeting.org/index.cfm?fuseaction=Custom.Content&MenuID=905
+http://www.sirsi.com/Resources/abram_articles.html
+http://www.sirspeedydowntownsandiego.com/
+http://www.sirweb.org/congAff/capitolHillUpdateApr04.shtml
+http://www.sis.gov.eg/calendar/html/cl301296.htm
+http://www.siskiyous.edu/class/engl12/folksong/
+http://www.siskiyous.edu/dsps/faq.html
+http://www.siskiyous.edu/hper/athletics/football/shasta2004.htm
+http://www.siskoid.com/AtoZA1.htm
+http://www.sisoftware.co.uk/
+http://www.sissel-online.com/article/ten_steps.php
+http://www.sisterbetty.org/roadtrip2004/roadtripday9.htm
+http://www.sisterschoice.com/tradadopt.html
+http://www.sit-on-topkayaking.com/Store/StoreAcc.html
+http://www.sit.edu/degree.html
+http://www.sit.edu/sit40/conference.html
+http://www.site.uottawa.ca/~luigi/csi5109/recursive.html
+http://www.sitedone.com/site/about/index.php
+http://www.siteexperts.com/paradise/getResource.asp?r_id=1301
+http://www.sitepoint.com/article/become-a-business-owner
+http://www.sitepoint.com/article/core-relationship-strategy
+http://www.sitepoint.com/article/dhtml-utopia-modern-web-design
+http://www.sitepoint.com/article/influence-sell-web-design
+http://www.sitepoint.com/article/james-atkinson-founder-phpbb
+http://www.sitepoint.com/article/loading-time-keep-visitor
+http://www.sitepoint.com/article/means-painless-pitch
+http://www.sitepoint.com/article/product-manager-macromedia
+http://www.sitepoint.com/article/steps-next-freelance-client/2
+http://www.sitepoint.com/article/successful-development
+http://www.sitepoint.com/books/css1/
+http://www.sitepoint.com/forums/archive/index.php/t-178569.html
+http://www.sitepoint.com/forums/showthread.php?goto=lastpost&t=222967
+http://www.sitepoint.com/forums/showthread.php?t=158750
+http://www.sitepoint.com/forums/showthread.php?t=219050
+http://www.sitepoint.com/forums/showthread.php?t=222967
+http://www.sitepoint.com/print/it-industry-certification
+http://www.sitepoint.com/print/james-atkinson-founder-phpbb
+http://www.sitepoint.com/print/steps-next-freelance-client
+http://www.sitepoint.com/print/teach-yourself-css-24-hours
+http://www.sitesatlas.com/cgi-bin/pod/pod.cgi?dir=/Regional/Europe/United_Kingdom/Recreation_and_Sports/Home_and_Garden/Gardening/
+http://www.siths.org/contracts/physed.htm
+http://www.sitnbull.com/
+http://www.sitra.fi/eng/index.asp?DirID=68&DocID=4443
+http://www.siu.edu/orda/guide/chap7.html
+http://www.siu.edu/~gpsc/minutes03/Minutes030204.htm
+http://www.siu.edu/~shp/
+http://www.siue.edu/GRADUATE/catalog/CH2/CAS/history.html
+http://www.sivakalpa.org/revwaypart1.html
+http://www.sivananda.org/ttceurope/introduction.php
+http://www.sixapart.com/log/2003/04/six_apart_miles.shtml
+http://www.sixapart.com/log/2003/06/why_we_need_ech.shtml
+http://www.sixapart.com/log/2004/06/announcing_pric.shtml
+http://www.sixapart.com/log/2004/08/launched_movabl.shtml
+http://www.sixapart.com/press/six_apart_ltd_announces_new_weblogg.shtml
+http://www.sixgolds.com/tasi.htm
+http://www.sixmurphys.com/bradley/howtoavoid.htm
+http://www.sizemore.co.uk/blogmore.html
+http://www.sizewise.com/articles/god/god.html
+http://www.sizzlebop.com/gift2.htm
+http://www.sjc.edu/content.cfm/pageid/255
+http://www.sjc.org/AirportReport/Mar05/AR_content.html
+http://www.sjc.ox.ac.uk/alumni/display/magazine.php?pageId=6&textId=34&pageNo=1
+http://www.sjc.ox.ac.uk/alumni/display/vi_magazine.php?pageId=6&textId=34&pageNo=1
+http://www.sjcc.com/event_planning/food_beverage/
+http://www.sjgames.com/ill/1995/ill-may95.html
+http://www.sjpbank.co.uk/importantinfo/legalinfo.asp
+http://www.sjpc.co.uk/announcements-press-2000-22mar.html
+http://www.sjsharks.com/interactive/in_the_crease/news.asp?news_id=15
+http://www.sjsoft.com/technicalpapers/WhyOrderBook.htm
+http://www.sjsu.edu/depts/english/2004.htm
+http://www.sjsu.edu/depts/english/foropen.htm
+http://www.sjteach.org/5home
+http://www.skadden.com/index.cfm?contentID=45&bioID=835
+http://www.skagitvalleyherald.com/articles/2004/12/30/news/news05.txt
+http://www.skateboard.com/frontside/101/myride/trucks.asp
+http://www.skatecity.com/nyc/where/manhattann.html
+http://www.skategroove.com/represent.asp
+http://www.skateparkguide.com/For%20Profit.htm
+http://www.skattabrain.com/css-books-plain/067232587X.html
+http://www.skatteetaten.no/Templates/ArtikkelUtskrift.aspx?id=28667&printmode=true
+http://www.skedaddle.co.uk/page.asp?ID=9
+http://www.skepsis.nl/bonati-eng.html
+http://www.skeptic.com/03.2.miele-murray-interview.html
+http://www.skeptic.com/eskeptic12-30-04.html
+http://www.skepticfiles.org/american/disease.htm
+http://www.skepticfiles.org/mys4/nxtdcade.htm
+http://www.skepticfiles.org/mys4/shin.htm
+http://www.skepticfiles.org/skeptic/circlera.htm
+http://www.skepticism.net/discussion/fullthread$msgnum=134
+http://www.skepticnews.com/
+http://www.skepticnews.com/2005/02/rednova_news_ca.html
+http://www.skepticreport.com/mystics/ghoststory.htm
+http://www.skeptics.ca/articles/gower-ghost.html
+http://www.skeptictank.org/gs/safe3edu.htm
+http://www.skhs.org.au/SKHShotels/introduction.htm
+http://www.ski-and-ski.com/Patrick/Pat_Histry.htm
+http://www.skiclub.co.uk/skiclub/fitness/transceiverhire.asp
+http://www.skidmore.edu/~gthompso/britrock/NME/nme6810.htm
+http://www.skiingmag.com/skiing/feature/article/0,12910,396084,00.html
+http://www.skill.org.uk/help/index.asp
+http://www.skillsactiveuk.com/newsstore/news071004018
+http://www.skillset.org/
+http://www.skillstudio.co.uk/course/presentation-skills-3.htm
+http://www.skillstudio.co.uk/faqs/
+http://www.skimarmot.com/u/whatsnew.html
+http://www.skin-beauty.com/acneskin.html
+http://www.skincancer.org/older/index.php
+http://www.skincarephysicians.com/eczemanet/whatis.html
+http://www.skincarephysicians.com/psoriasisnet/thinking_other_ways.htm
+http://www.skinorthcarolina.com/default.asp
+http://www.skiplacour.com/visit.htm
+http://www.skippingdot.net/2002/01/30
+http://www.skippyslist.com/skippylist.html
+http://www.skiptonweb.co.uk/
+http://www.skoah.com/
+http://www.skokie.lib.il.us/s_kids/kd_booklists/kd_lists/jewish_arab.html
+http://www.skoool.ie/skoool/careermatters.asp?id=607
+http://www.skoool.ie/skoool/collegechoice.asp?id=2758
+http://www.skoool.ie/skoool/examcentre_jc.asp?id=179
+http://www.skoool.ie/skoool/examcentre_sc.asp?id=1397
+http://www.skoool.ie/skoool/examcentre_sc.asp?id=1707
+http://www.skotos.net/articles/BSTG_56.shtml
+http://www.skuz.net/potatoware/PSKB-029.html
+http://www.sky-bolt.com/hollyandivy.htm
+http://www.sky.com/showbiz/article/0,,50120-1166694,00.html
+http://www.skyartstudio.com/
+http://www.skyhawke.com/investors.html
+http://www.skyhighway.com/~adam/gaia_resurrection_new_version.html
+http://www.skylab.com.au/kb/doc_faq_0043.html
+http://www.skylab.com.au/kb/doc_faq_0047.html
+http://www.skylab.com.au/kb/doc_faq_0056.html
+http://www.skylighter.com/skylighter_info_pages/article.asp?Item=65
+http://www.skylineproperties.com/buyers_resources.php
+http://www.skylit.com/bpquotes.html
+http://www.skyminds.net/lit_gb/lord_jim_wandering_tale.php
+http://www.skynet.ie/~patcamp/My.cv.html
+http://www.skype.com/products/explained.html
+http://www.skyrme.com/insights/3lrnorg.htm
+http://www.skyrme.com/pubs/kcomm.htm
+http://www.skyrme.com/updates/u32.htm
+http://www.skyscript.co.uk/colour.html
+http://www.skyscript.co.uk/horary1ed.html
+http://www.skysurfers.skywards.com/SkysurfersGoodies/Rewards/Hotels/partners_hotels.asp
+http://www.skyviewzone.com/astroanalyze.htm
+http://www.skyward.com/News/Archive/Q2_2003.shtml
+http://www.skywards.co.nz/infoCafeBar.htm
+http://www.skywatchertelescope.net/WhatsNew.html
+http://www.sla.org/chapter/csrn/Employment.html
+http://www.sla.org/chapter/ctx/jobs.htm
+http://www.sla.org/chapter/cwcn/wwest/v4n2/slform.htm
+http://www.sla.org/content/Events/Confannualreports/2002annualreport.cfm
+http://www.sla.org/content/SLA/advocacy/ppolicyupdts/update0201.cfm
+http://www.sla.org/content/resources/research/rsrchstatement.cfm
+http://www.slac.stanford.edu/slac/media-info/980724/fel-pr.htm
+http://www.slackermanager.com/
+http://www.slackermanager.com/slacker_manager/
+http://www.slais.ubc.ca/PEOPLE/students/resumes/R_Matiachuk/Employment-Present.htm
+http://www.slam.nhs.uk/news/mediadetail.aspx?id=50
+http://www.slam.nhs.uk/news/mediadetail.aspx?id=57
+http://www.slam.nhs.uk/news/press/media2002a.asp
+http://www.slamnet.org.uk/re/common_questions.htm
+http://www.slantpoint.com/mt-arx/2004/10/simubloging_bas.php
+http://www.slashnot.com/index.php3?topic_id=49
+http://www.slattsnews.observationdeck.org/
+http://www.slayage.tv/essays/slayage4/barbaccia.htm
+http://www.slcpl.lib.ut.us/master_events.jsp?parent_id=9&page_id=21
+http://www.sldirectory.com/cal.html
+http://www.sleddogcentral.com/merchandise.htm
+http://www.sleepnet.com/definition.html
+http://www.sleepnet.com/rest2/messages/467.html
+http://www.sleepnet.com/shift2/messages/343.html
+http://www.sleepnet.com/shift2/messages/397.html
+http://www.slelections.gov.lk/election_pro3.html
+http://www.slick-net.com/space/horizons/index.phtml
+http://www.slidescanning.com/
+http://www.slightlybewildered.com/archives.php?date=2002_01
+http://www.slightlybewildered.com/archives.php?date=2004_04
+http://www.slightlynorth.com/
+http://www.slightlyoff.com/bio_cpe.htm
+http://www.slightlywarped.com/stories/timewrp2.html
+http://www.slimeland.com/lazy/webdesign.html
+http://www.slis.indiana.edu/news/story.php?story_id=640
+http://www.sln.org.uk/geography/
+http://www.sln.org.uk/geography/thinking_through_geography.htm
+http://www.sloan-c.org/effective/details3.asp?LE_ID=37
+http://www.sloan-c.org/effective/details3.asp?LE_ID=60
+http://www.sloan-c.org/effective/framework.asp
+http://www.sloan-c.org/publications/jaln/v8n1/v8n1_rhodes.asp
+http://www.sloan-c.org/publications/jaln/v8n3/v8n3_pelz.asp
+http://www.sloan-c.org/publications/view/v2n5/editorletterv2n5.htm
+http://www.sloan-c.org/workshop/copyrightworkshop.asp
+http://www.sloanmusic.com/a/about/patricksustour
+http://www.slolane.org/politics.htm
+http://www.sloperama.com/advice/bulletinbd.htm
+http://www.slostc.org/
+http://www.slovakspectator.sk/clanok-1342.html
+http://www.slovobooks.com/phoenix/phoenix_2003/newsletter_3.html
+http://www.slowapple.com/
+http://www.slower-speeds.org.uk/redesign.htm
+http://www.slowpokefarm.com/class_details.htm
+http://www.slowtrav.com/europe/cell_phones.htm
+http://www.slowtrav.com/europe/wear.htm
+http://www.slowtrav.com/tr/TripReport.asp?tripid=508&index=4
+http://www.slowtrav.com/tr/print.asp?tripid=508
+http://www.slowtrav.com/uk/instructions/driving.htm
+http://www.slowtwitch.com/mainheadings/coachcorn/power.html
+http://www.slowtwitch.com/mainheadings/interview/warrenscott.html
+http://www.slsa.sa.gov.au/site/text_only.cfm?nav_id=1128
+http://www.slsii.org/ecotour.htm
+http://www.slso.org.uk/information.html
+http://www.slso.org.uk/justice1-01.html
+http://www.slu.edu/libraries/pius/archives/collections/docmss2.html
+http://www.sluggerotoole.com/archives/2005/05/when_asked_by_j.php
+http://www.sluggerotoole.com/archives/2005/06/whiterock_parad.php
+http://www.sluggerotoole.com/archives/parties/index.php
+http://www.sluggy.com/
+http://www.slumdance.com/blogs/brian_flemming/archives/001126.html
+http://www.slv.se/templatesHeatox/Heatox_Page____10170.aspx
+http://www.slweekly.com/cls/browse.cfm?categoryID=6
+http://www.slweekly.com/editorial/2004/feat_2004-01-22.cfm
+http://www.slyck.com/archive.php?m=9&y=2003
+http://www.sma-uk.org/sma-uk/constitution.htm
+http://www.sma.org/smj/96jul8.htm
+http://www.smag.co.uk/branch_information.html
+http://www.smallbizbooks.com/cgi-bin/SmallBizBooks/00073.html
+http://www.smallbizpipeline.com/resources/taxcenter.jhtml
+http://www.smallbiztechnology.com/avantgo/2005/06/8-tips-for-customer-relationship.shtml
+http://www.smallbusinesscomputing.com/biztools/print.php/2110351
+http://www.smallbusinesscomputing.com/webmaster/article.php/3454731
+http://www.smallbusinesscomputing.com/webmaster/print.php/3454731
+http://www.smallbytes.net/~bobkat/fear.html
+http://www.smallcap.ca/SC2.37.htm
+http://www.smalldeadanimals.com/
+http://www.smalldeadanimals.com/archives/001630.html
+http://www.smalldog.com/newsarchive/edsup_display.php?id=95
+http://www.smalldoggies.com/colsp_holm_002.html
+http://www.smallfarmsuccess.info/management/print_669.cfm
+http://www.smallfarmsuccess.info/management/print_671.cfm
+http://www.smallfordspares.co.uk/terms.phtml
+http://www.smallholder.co.uk/the_west_country/smallholder/news/SMALLHOLDER_NEWS_ORGANIC4.html
+http://www.smallisprofitable.org/207Benefits.html
+http://www.smalltalksolutions.com/schedule2004.htm
+http://www.smalltimes.com/document_display.cfm?document_id=8159
+http://www.smalltimes.com/document_display.cfm?section_id=97&document_id=5754
+http://www.smart.net/~tak/Chesterton/manwho_1.html
+http://www.smart2help.com/e-books/tij-2nd-edition/AppendA.htm
+http://www.smartads.info/articles/wa/8.html
+http://www.smartbooks.com/excerpt.asp?ISBN=0385504322
+http://www.smartdivorce.com/articles/interstate.shtml
+http://www.smartdraw.com/specials/flowchart.asp
+http://www.smarterscience.com/sandycoastappendix.html
+http://www.smartertravel.com/advice/advfeatures/advice.php?id=8894
+http://www.smartgrowth.org/about/principles/resources.asp?resource=4&type=6
+http://www.smartgrowth.org/library/byissue.asp?iss=12
+http://www.smartgrowth.org/news/bystate.asp?state=VT
+http://www.smartjourneys.com/concept.html
+http://www.smartmarriages.com/born.networker.html
+http://www.smartmarriages.com/quiz.html
+http://www.smartmarriages.com/using.frontpage.oc.html
+http://www.smartmobs.com/archive/2003/04/08/recommender_sys.html
+http://www.smartmobs.com/book/book_bib_ch_5_0_30.html
+http://www.smartmoney.com/aheadofthecurve/index.cfm?story=20031107
+http://www.smartmoney.com/ask/
+http://www.smartmoney.com/bn/index.cfm?story=20001022093744
+http://www.smartmoney.com/bn/index.cfm?story=20010117080735
+http://www.smartmoney.com/bn/index.cfm?story=20040510090444
+http://www.smartmoney.com/bn/index.cfm?story=20041215043523
+http://www.smartmoney.com/consumer/index.cfm?story=20040524&pgnum=2
+http://www.smartmoney.com/stockscreen/index.cfm?story=20040805intro
+http://www.smartmoney.com/tax/capital/index.cfm?story=taxrates
+http://www.smartmoney.com/tax/retire/index.cfm?story=IRAwithdrawal5
+http://www.smartmoney.com/tradecraft/index.cfm?story=20020401
+http://www.smartmotorist.com/dro/dro.htm
+http://www.smartmotorist.com/nig/nig.htm
+http://www.smartnewchoice.com/ourviews.asp?SPID=7185&LinkID=9236&Title=Featured%20Story%20Idea
+http://www.smartplay.net/ouch/medical/heat/heatinfo.html
+http://www.smartraveller.gov.au/tips/gaolos.html
+http://www.smartraveller.gov.au/tips/travelwell.html
+http://www.smartraveller.gov.au/tips/womtrav.html
+http://www.smartrisk.ca/
+http://www.smartrisk.ca/ContentDirector.aspx?tp=2733
+http://www.smarttelecom.ie/investors/
+http://www.smartthinking.ukideas.com/Putting.html
+http://www.smartvoter.org/1998nov/wa/state/meas/i200/
+http://www.smartvoter.org/2004/11/02/ca/sn/meas/R/
+http://www.smartvoter.org/2004/11/02/ca/state/race/usrep17/
+http://www.smartvoter.org/2005/07/26/ca/sd/vote/rider_r/paper1.html
+http://www.smartwriters.com/
+http://www.smasd.org/Chapter4/scitech%5Cscitechall.htm
+http://www.smbc.org/discover_smbc/faq.htm
+http://www.smbc.org/ministries/children/childrens_events.htm
+http://www.smc.org.uk/glossary/glossary_3.htm
+http://www.smd.qmul.ac.uk/dental/courses/complement/certohe/
+http://www.smdc.army.mil/PubAff/98Eagle/Apr/Page%207.htm
+http://www.smdc.army.mil/PubAff/ArchivedPress/LASERS.html
+http://www.sme.org/cgi-bin/get-mag.pl?&&02sem175&000007&2002/02sem175&ARTME&SME&
+http://www.sme.org/cgi-bin/get-newsletter.pl?LEAN&20041012&4&
+http://www.smh-hq.org/gazette/volumes/152/calls.html
+http://www.smh.com.au/articles/2002/08/01/1028157807780.html
+http://www.smh.com.au/articles/2003/01/19/1042911270602.html
+http://www.smh.com.au/articles/2003/01/19/1042911271082.html
+http://www.smh.com.au/articles/2003/01/26/1043533953403.html
+http://www.smh.com.au/articles/2003/01/27/1043533999118.html
+http://www.smh.com.au/articles/2003/02/28/1046407753895.html
+http://www.smh.com.au/articles/2003/03/26/1048653746026.html
+http://www.smh.com.au/articles/2003/04/10/1049567814312.html
+http://www.smh.com.au/articles/2003/04/28/1051381901056.html
+http://www.smh.com.au/articles/2003/05/19/1053196515705.html
+http://www.smh.com.au/articles/2003/07/02/1056825457732.html
+http://www.smh.com.au/articles/2003/11/25/1069522602007.html
+http://www.smh.com.au/articles/2003/11/26/1069522651339.html
+http://www.smh.com.au/articles/2003/11/26/1069522660731.html
+http://www.smh.com.au/articles/2004/01/19/1074360697178.html?from=storyrhs
+http://www.smh.com.au/articles/2004/02/12/1076548148866.html?from=storyrhs
+http://www.smh.com.au/articles/2004/02/22/1077384635558.html?from=storyrhs
+http://www.smh.com.au/articles/2004/03/26/1079939852080.html?from=storyrhs
+http://www.smh.com.au/articles/2004/03/29/1080544413545.html
+http://www.smh.com.au/articles/2004/04/12/1081621893287.html?from=storyrhs
+http://www.smh.com.au/articles/2004/05/23/1085250868270.html
+http://www.smh.com.au/articles/2004/05/25/1085461749804.html?from=storyrhs
+http://www.smh.com.au/articles/2004/06/04/1086203628511.html
+http://www.smh.com.au/articles/2004/06/09/1086749764191.html
+http://www.smh.com.au/articles/2004/07/16/1089694568757.html
+http://www.smh.com.au/articles/2004/08/03/1091476477691.html
+http://www.smh.com.au/articles/2004/08/07/1091732135091.html
+http://www.smh.com.au/articles/2004/08/11/1092102531995.html
+http://www.smh.com.au/articles/2004/09/10/1094789682660.html?from=storylhs
+http://www.smh.com.au/articles/2004/09/15/1095221657499.html?from=storylhs
+http://www.smh.com.au/articles/2004/09/16/1095221711309.html?from=storylhs
+http://www.smh.com.au/articles/2004/09/22/1095651394146.html?from=storylhs
+http://www.smh.com.au/articles/2004/10/17/1097951555281.html
+http://www.smh.com.au/articles/2004/12/11/1102625586883.html
+http://www.smh.com.au/articles/2005/06/26/1119724527001.html?from=rss
+http://www.smh.com.au/editorial/
+http://www.smh.com.au/handheld/articles/2005/06/21/1119321733713.html
+http://www.smh.com.au/news/After-Saddam/Bombing-near-Allawi-party-office/2005/01/03/1104601298122.html
+http://www.smh.com.au/news/After-Saddam/Fear-and-loathing-on-the-campain-trail/2005/01/29/1106850160213.html
+http://www.smh.com.au/news/Asia-Tsunami/A-life-sacrificed-to-let-her-daughter-survive/2004/12/29/1103996615182.html
+http://www.smh.com.au/news/Asia-Tsunami/A-life-sacrificed-to-let-her-daughter-survive/2004/12/29/1103996615182.html?oneclick=true
+http://www.smh.com.au/news/Asia-Tsunami/Suddenly-I-had-to-learn-how-to-bath-100-babies/2005/01/09/1105205983740.html
+http://www.smh.com.au/news/Basketball/Stink-as-dog-puts-skids-under-match/2005/01/19/1106110816623.html
+http://www.smh.com.au/news/Breaking-News/Inflation-rose-sharply-in-January/2005/01/31/1107020294509.html
+http://www.smh.com.au/news/Breaking-News/Origin-Energy-predicts-profit-rise/2005/02/21/1108834712969.html
+http://www.smh.com.au/news/Breaking-News/Origin-announces-631m-rights-issue/2005/02/21/1108834700608.html
+http://www.smh.com.au/news/Breaking/NICTA-Microsoft-sign-web-security-deal/2005/02/10/1107890327960.html
+http://www.smh.com.au/news/Budget-2005/Instant-tax-cuts-for-all/2005/05/10/1115584970020.html
+http://www.smh.com.au/news/Business/APRA-gives-General-Re-chance-to-explain/2005/03/29/1111862389340.html
+http://www.smh.com.au/news/Business/Christmas-credit-can-be-trouble/2004/12/05/1102182154592.html
+http://www.smh.com.au/news/Business/OPEC-chiefs-fear-spike-turning-to-slump/2004/12/10/1102625535193.html
+http://www.smh.com.au/news/Business/Retail-sales-dip-relieves-rates-pressures/2005/02/04/1107476793048.html
+http://www.smh.com.au/news/Election-2004/Cricket-tragic-pursues-the-followon/2004/10/08/1097089570021.html
+http://www.smh.com.au/news/Election-2004/New-South-Wales/2004/08/29/1093717827090.html
+http://www.smh.com.au/news/Environment/Citys-thirst-a-threat-to-health-of-Shoalhaven/2005/01/14/1105582718207.html
+http://www.smh.com.au/news/Health/Cash-driving-IVF-not-patient-needs-ethicist/2004/11/07/1099781247221.html
+http://www.smh.com.au/news/Horseracing/Even-MPs-should-know-selling-the-Farm-is-not-a-good-idea/2005/01/02/1104601240663.html
+http://www.smh.com.au/news/Icon/Technology-bites-back/2005/04/06/1112489536595.html
+http://www.smh.com.au/news/League/Manly-had-to-sack-me-says-Hoppa/2005/03/23/1111525226714.html
+http://www.smh.com.au/news/Letters/A-mean-spirit-that-forces-families-to-such-heartbreak/2005/04/29/1114635748841.html
+http://www.smh.com.au/news/Letters/Without-rail-were-being-taken-for-village-idiots/2004/12/10/1102625533369.html
+http://www.smh.com.au/news/Management-Focus/New-terrain/2005/05/09/1115584893848.html
+http://www.smh.com.au/news/Miranda-Devine/Standing-up-to-aggressive-secularism/2004/12/08/1102182363720.html
+http://www.smh.com.au/news/Music/Deep-dark-and-dry/2004/12/10/1102625531028.html
+http://www.smh.com.au/news/National/Better-care-for-car-victims/2005/06/12/1118514931365.html?from=moreStories
+http://www.smh.com.au/news/National/Chooks-feet-the-acid-test-for-footinmouth-disease/2005/01/23/1106415457747.html?from=moreStories
+http://www.smh.com.au/news/National/Engine-may-be-the-future-of-space-travel/2005/06/24/1119321897305.html
+http://www.smh.com.au/news/National/Ive-still-never-heard-the-word-sorry/2005/03/04/1109700661799.html
+http://www.smh.com.au/news/National/NYE04-Sydney-reflects/2004/12/30/1104344919159.html
+http://www.smh.com.au/news/National/States-told-to-drop-taxes-or-lose-GST/2005/04/11/1113071914713.html
+http://www.smh.com.au/news/National/The-doctor-who-left-a-town-for-dead/2005/05/27/1117129901058.html
+http://www.smh.com.au/news/National/The-doctor-who-left-a-town-for-dead/2005/06/10/1118347579995.html
+http://www.smh.com.au/news/National/The-risk-that-follows-caesarean/2004/12/16/1102787218025.html
+http://www.smh.com.au/news/National/Tilt-train-crashed-at-twice-speed-limit/2004/11/17/1100574541072.html
+http://www.smh.com.au/news/Next/Justice-Owen-keeps-it-on-the-record/2005/06/13/1118514953233.html
+http://www.smh.com.au/news/Obituaries/Something-of-the-modern-Medici-about-this-Tristan/2005/01/12/1105423552148.html
+http://www.smh.com.au/news/Opinion/For-men-tis-the-season-to-be-jolly-well-sitting-down/2004/12/09/1102182422617.html
+http://www.smh.com.au/news/Opinion/Living-free-of-responsibility-leaves-others-holding-the-baby/2004/11/21/1100972259671.html
+http://www.smh.com.au/news/Opinion/Work-less-an-ethic-more-an-order/2005/06/07/1118123836063.html
+http://www.smh.com.au/news/Peter-Hartcher/Lathams-a-hot-topic-PM-the-devil-they-know/2004/10/07/1097089493393.html
+http://www.smh.com.au/news/Planning/Learning-the-savings-game-is-childs-play/2005/02/04/1107476798856.html
+http://www.smh.com.au/news/Review-New/Ford-F6-Typhoon/2005/01/20/1106110913616.html
+http://www.smh.com.au/news/Ross-Gittins/Porkies-used-to-support-industrial-relations-reform/2005/02/13/1108229855490.html
+http://www.smh.com.au/news/Sauce/Restaurant-rules-with-savvy-deal/2005/06/03/1117568376758.html
+http://www.smh.com.au/news/Soccer/Kingz-hoping-Adshead-hasnt-lost-any-of-his-All-Whites-magic/2005/01/13/1105582651924.html
+http://www.smh.com.au/news/Sport/Scott-makes-strong-start-at-US-Open/2005/06/17/1118869072408.html
+http://www.smh.com.au/news/Tennis/Illequipped-Molik-forced-to-give-herself-a-break/2005/06/16/1118869043252.html
+http://www.smh.com.au/news/business/safety-in-numbers-for-bosses-not-workers/2005/06/24/1119321904705.html
+http://www.smh.com.au/news/national/big-wet-forces-thousands-to-flee/2005/06/30/1119724757181.html
+http://www.smh.com.au/news/russia/sorry-youve-missed-your-connection/2004/10/22/1107890247824.html
+http://www.smh.com.au/news/sport/what-a-start--everyones-had-a-chance-to-put-the-boot-in/2005/06/24/1119321908941.html?from=moreStories
+http://www.smh.com.au/news/united-states/north-and-south/2005/06/18/1118869107293.html
+http://www.smh.com.au/text/articles/2005/02/04/1107476806594.html
+http://www.smh.com.au/text/articles/2005/06/24/1119321904705.html
+http://www.smh.com.au/yoursay/2003/10/03/
+http://www.smhall.org/seniors/
+http://www.smile-aa.citymax.com/page/page/580677.htm
+http://www.smilechildren.org/
+http://www.smilingowner.com/learnfrommistakes.htm
+http://www.smith.edu/meridians/localboard.htm
+http://www.smith.edu/meridians/s-weditorialgrp.html
+http://www.smithallinglane.com/MichaelEMcAleenan.html
+http://www.smithbarney.com/research/disclaimer/8028.html
+http://www.smithdata.net/product.htm
+http://www.smithfam.com/news/mar01z.html
+http://www.smithindustries.com/How-To.html
+http://www.smithindustries.com/LinksEarthFriendlyMore.html
+http://www.smiths-group.com/PressReleases_hand.asp?autonum=77
+http://www.smiths-group.com/PressReleases_hand.asp?autonum=90
+http://www.smiths-group.com/media/PressReleases_hand.asp?autonum=90
+http://www.smiths.com/PressReleases_hand.asp?autonum=90
+http://www.smithsfoodanddrug.com/corpnewsinfo_pr_speeches_pr_archives.htm
+http://www.smithsonianmag.com/smithsonian/issues00/mar00/interest_mar00.html
+http://www.smithsonianmag.si.edu/smithsonian/issues96/oct96/heyman_oct96.html
+http://www.smithvet.com/speaker.shtml
+http://www.smj.org.uk/0802/EWTD.htm
+http://www.sml.ex.ac.uk/postgraduates/phd_film_pract.html
+http://www.smm.org/heart/lessons/lesson1.htm
+http://www.smockingstore.com/folkwear.html
+http://www.smoke-free.ca/filtertips04/spending.htm
+http://www.smokersclubinc.com/
+http://www.smokykin.com/smhs/sevier.html
+http://www.smom.org.au/mIho.htm
+http://www.smorgonsteel.com.au/reinforcing/contact/index.cfm
+http://www.smsonline.com/ct/ct_inf.html
+http://www.smsu.edu/folksong/maxhunter/SongTitle.html
+http://www.smtcmpo.org/bike-ped/activities/bike-map.asp
+http://www.smu.edu/admission/advantage_pride.asp
+http://www.smu.edu/continuing_education/continuing_studies/faq.asp
+http://www.smu.edu/ems/QueryFilter.asp
+http://www.smuc.ac.uk/specialneeds/disability_statement.html
+http://www.smud.org/residential/saving/trees/
+http://www.smuggling.co.uk/web/text/smug43.htm
+http://www.smwa.org.uk/newsite/projects/pg_projects.htm
+http://www.snak.com/SnakHistory.html
+http://www.snakesandfrogs.com/scra/notes/notes0103.htm
+http://www.snant.com/fp/archives/a-new-approach-to-gnostic-myth-and-scripture/
+http://www.snapnetwork.org/stories_about_snap/ca_theyre_not_alone.htm
+http://www.snapnetwork.org/survivors_voice/cyndi_truth_and_voice.htm
+http://www.snark.org/~pjhughes/sci2.htm
+http://www.snarkland.com/index.php/weblog/2316/
+http://www.snarly.com/Unsassy/etiquette.html
+http://www.snh.org.uk/strategy/sr-res00.asp
+http://www.snhu.edu/Southern_New_Hampshire_University/Academics/General_Info/School_of_HTCM/Policies_and_Schedule.html
+http://www.sniggle.net/about.php
+http://www.sniksnak.com/aavs.html
+http://www.sniksnak.com/cathealth/firstaid.html
+http://www.sniksnak.com/doghealth/bloat.html
+http://www.sniksnak.com/doghealth/breeding.html
+http://www.sniksnak.com/doghealth/inhalants.html
+http://www.sniksnak.com/kaddokatz/stories2.html
+http://www.snipsmag.com/CDA/ArticleInformation/features/BNP__Features__Item/0,3374,124600,00.html
+http://www.snma.org/mission6.html
+http://www.snn-rdr.ca/snn/2003jun/faith.html
+http://www.snopes.com/cokelore/bottle.asp
+http://www.snopes.com/critters/cruelty/dynamite.htm
+http://www.snopes.com/food/origins/gatorade.htm
+http://www.snopes.com/humor/nonsense/piano.htm
+http://www.snopes.com/media/notnews/brothel.asp
+http://www.snopes.com/message/ultimatebb.php?/ubb/get_topic/f/20/t/000469/p/1.html
+http://www.snopes.com/message/ultimatebb.php?/ubb/get_topic/f/69/t/000976/p/2.html
+http://www.snopes.com/music/artists/richards.htm
+http://www.snopes.com/music/songs/blowin.htm
+http://www.snopes.com/oldwives/warts.asp
+http://www.snopes.com/politics/ballot/travis.asp
+http://www.snopes.com/politics/kerry/service.asp
+http://www.snopes.com/pregnant/babyexam.htm
+http://www.snopes.com/quotes/barry.htm
+http://www.snopes.com/weddings/newlywed/beckham.asp
+http://www.snopes2.com/rumors/warning.htm
+http://www.snorestop.com/pages/faq.htm
+http://www.snoringshop.com/
+http://www.snowbirds.org/csanews/issues/53/20.html
+http://www.snowcoalition.org/site/about/listserves
+http://www.snowest.com/fusetalk/messageview.cfm?catid=10&threadid=162308
+http://www.snowleopardconservancy.org/homestays-too.htm
+http://www.snowlife.org.uk/telemark_comp.asp
+http://www.snowlionpub.com/pages/astrology.php
+http://www.snpp.com/episodes/1F20.html
+http://www.snpp.com/episodes/7F23.html
+http://www.snpp.com/lists.html
+http://www.snpp.com/news.html
+http://www.snpp.com/other/interviews/scully99b.html
+http://www.snre.umich.edu/current-students/graduate-funds.php
+http://www.sns.ias.edu/~jns/?pagename=Security
+http://www.sntp.net/science_mind.htm
+http://www.snwonline.com/behind/home.asp
+http://www.soane.org/nextii.htm
+http://www.soapcity.com/days/history/history_detail_13400019.jhtml
+http://www.soapcity.com/pass/oneonone/pass_jacklynn_briskey.jhtml
+http://www.sobe.ex.ac.uk/undergraduate/ugfaq.php
+http://www.soc-um.org/survivors/philosophy.html
+http://www.soc.northwestern.edu/blog/publicspaces/archives/000393.html
+http://www.soc.org/breakin1.html
+http://www.soc.ucla.edu/faculty.php?lid=1327&display_one=1
+http://www.soc.ucsb.edu/faculty/scheff/29.html
+http://www.soc.utu.fi/tdk/kv-asiat/esmp.htm
+http://www.socarchsci.org/bulletin/9809/9809n.htm
+http://www.soccer-books.co.uk/acatalog/Online_Catalogue_Advanced_Coaching_Videos_97.html
+http://www.soccer.com/TemplatesFIFA/Catalog/FIFApolicies.tem?fwc=1
+http://www.soccerhall.org/Spotlight%20HallofFamer/JamesBrown_spotlight.htm
+http://www.soccerhelp.com/Soccer_Coach_Comments.shtml
+http://www.soccerphile.com/soccerphile/archives/wc2002/ne/ssgr.html
+http://www.soccertimes.com/mls/1999/aug24.htm
+http://www.soccerway.com/_oldlayout/news/full/?page=details&area=1105899649
+http://www.soccerway.com/news/full/?page=details&area=1105899649
+http://www.socengine.com/seo/
+http://www.socgenmicrobiol.org.uk/about/history.cfm
+http://www.sochealth.co.uk/history/inversecare.htm
+http://www.social.mtu.edu/careers/alumnicareers.htm
+http://www.socialaffairsunit.org.uk/about_us.php
+http://www.socialaffairsunit.org.uk/blog/
+http://www.socialaffairsunit.org.uk/blog/archives/000291.php
+http://www.socialaffairsunit.org.uk/blog/archives/000370.php
+http://www.socialaffairsunit.org.uk/blog/archives/000473.php
+http://www.socialfunds.com/news/article.cgi/1685.html
+http://www.socialgracesperfected.com/professional_speaker.html
+http://www.socialimpactgames.com/modules.php?op=modload&name=News&file=index&catid=9&topic=&allstories=1
+http://www.socialinvest.org/areas/research/Moskowitz/1996_full.htm
+http://www.socialism.com/elections/opposition.html
+http://www.socialismtoday.org/34/family34.html
+http://www.socialismtoday.org/41/gb_green41.html
+http://www.socialismtoday.org/68/NewZealand.html
+http://www.socialist.net/html/support_sacked_wembley_workers.html
+http://www.socialistalternative.com/literature/stonewall.html
+http://www.socialistalternative.org/literature/nader.html
+http://www.socialistdemocracy.org/Debate/DebateReplyOnIrishRepublicanism.html
+http://www.socialisthistory.ca/Docs/Leninist/Industrial_Act_23.htm
+http://www.socialistnigeria.org/
+http://www.socialistparty.org.uk/2003/313/np4a.htm
+http://www.socialistparty.org.uk/2004/355/pp6.htm
+http://www.socialistparty.org.uk/2004/373/np3c.htm
+http://www.socialistparty.org.uk/socialistwomen/sw3.htm
+http://www.socialistreview.org.uk/westhamblog/
+http://www.socialistunitynetwork.co.uk/reports/solidjune19.htm
+http://www.socialistworker.co.uk/article.php4?article_id=1236
+http://www.socialistworker.co.uk/article.php4?article_id=3238
+http://www.socialistworker.co.uk/article.php4?article_id=3744
+http://www.socialistworker.co.uk/article.php4?article_id=4753
+http://www.socialistworker.co.uk/article.php4?article_id=6705
+http://www.socialistworker.co.uk/print_article.php4?article_id=1236
+http://www.socialistworker.org/2003-2/467/467_08_Chile.shtml
+http://www.socialistworker.org/2004-2/504/504_08_Bhopal.shtml
+http://www.socialistworker.org/2005-2/549/549_10_Socialism.shtml
+http://www.socialistworld.net/eng/2002/03/21.html
+http://www.socialistworld.net/eng/2004/04/15ni.html
+http://www.socialistworld.net/eng/2004/08/18germany.html
+http://www.socialitelife.com/mt/archives/000296.php
+http://www.socialresearchmethods.net/Gallery/king/gmk.ecop.htm
+http://www.socialresearchmethods.net/Gallery/parapi/parapi1.htm
+http://www.socialresearchmethods.net/kb/formatting.htm
+http://www.socialrolevalorization.com/resource/Leipolt.htm
+http://www.socialsecurity.org/daily/05-28-99.html
+http://www.socialservice.com/
+http://www.socialstudies.org/election/
+http://www.society.omron.com/station.html
+http://www.societyofauthors.net/soa/page_id.php4?pid=74&sid=5&urlsection=Information+and+news
+http://www.sociology.org/content/2004/tier2/brasted.html
+http://www.socma.com/Conferences/AnnualDinner_03.htm
+http://www.socom.mil/
+http://www.socrepsoc.com/trep.html
+http://www.socstats.soton.ac.uk/cass/courses0203/sda3.html
+http://www.sodexhousa.com/pubs_fastforward3.htm
+http://www.soe.umich.edu/adifference/davis/
+http://www.soe.umich.edu/innovator/3501/davis/
+http://www.soekris.com/
+http://www.soest.hawaii.edu/expeditions/education-les10.htm
+http://www.soest.hawaii.edu/expeditions/mariana/education-les10.htm
+http://www.sofc.org/ROSARYBOOK2/p261.htm
+http://www.sofiaecho.com/article/jogging-club-takes-off/id_2203/catid_32/brojid_40
+http://www.sofiaecho.com/article/resting-recharging-and-returning/id_4462/catid_32
+http://www.sofiaecho.com/article/resting-recharging-and-returning/id_4462/catid_32/brojid_87
+http://www.sofinpac.com/news/newsarticle.php
+http://www.sofitel.com/hotel_sofitel_england/5_star_hotel_atlantic_city.html
+http://www.sofitel.com/hotel_sofitel_england/alsace_bed_and_breakfast.html
+http://www.sofitel.com/hotel_sofitel_england/bed_breakfast_discount_hotel_london.html
+http://www.sofitel.com/hotel_sofitel_england/cheap_city_hotel_london.html
+http://www.sofitel.com/hotel_sofitel_england/cheap_hotel_madrid.html
+http://www.sofotex.com/download/File_Management/more4.html
+http://www.soft-gems.net/ThemeManager.php
+http://www.softadventure.net/driveleft.htm
+http://www.softerlite.com/html/ourprojects.html
+http://www.softexe.com/
+http://www.softlandmark.com/CyberlinkPowerVCRII.htm
+http://www.softlookup.com/tutorial/SQL/ch03.asp
+http://www.softlord.com/comp/
+http://www.softpanorama.org/History/index.shtml
+http://www.softpedia.com/get/Programming/Other-Programming-Files/Ready-Dating-Site.shtml
+http://www.softrock.co.nz/parkt/pt1299.htm
+http://www.softskull.com/detailedbook.php?isbn=1-932360-40-9
+http://www.softvelocity.com/faq/Language/107-PassingParameterstoUpdate.htm
+http://www.softwar.net/caac.html
+http://www.software-engineer.org/article_read.php?article_id=5000094
+http://www.software-tech.com/dontletthis.html
+http://www.software.org/pub/externalpapers/9804-2.html
+http://www.softwaredioxide.com/channels/PersonView.asp?id=6447
+http://www.softwaregarden.com/products/listgarden/websiterss.html
+http://www.softwarepractice.co.uk/training_tandc.asp
+http://www.softwareshelf.co.uk/info/profile.asp
+http://www.softwaretechnews.com/technews2-2/practical.html
+http://www.sofweb.vic.edu.au/internet/netiquet.htm
+http://www.sofweb.vic.edu.au/science/famsci/activity/lateryr/physics/plyact21.htm
+http://www.sofweb.vic.edu.au/tax/general/
+http://www.sogang.ac.kr/~anthony/KHHiroshima.htm
+http://www.sohh.com/forums/archive/index.php/t-180679.html
+http://www.sohh.com/thewire/read.php?contentID=6532
+http://www.sohh.com/thewire/read.php?contentID=7220
+http://www.soho-it-goes.com/resources/articles/
+http://www.sohu.com/about/English/77.htm
+http://www.soi.city.ac.uk/pgcourses/hcs/hcs5.html
+http://www.soi.city.ac.uk/~db522/disinhe/Evaluation.htm
+http://www.soilandhealth.org/02/0202genhealthbiblio.html
+http://www.sojo.net/index.cfm?action=magazine.article&issue=soj9511&article=951132g
+http://www.sojo.net/index.cfm?action=magazine.article&mode=author&authorid=4&issue=soj9811&article=981142c
+http://www.sojo.net/index.cfm?action=sojomail.display&issue=050609
+http://www.sokwanele.com/blog/2005_06_05_blogarchive.html
+http://www.sol.com/en/modulo.asp?IdPoblacion=10&modulo=Contactar
+http://www.sol.com/en/modulo.asp?IdPoblacion=2&modulo=Contactar
+http://www.sol.com/en/modulo.asp?IdPoblacion=77&modulo=Contactar
+http://www.sol.com/en/modulo.asp?IdProvincia=11&modulo=Contactar
+http://www.sol.com/en/modulo.asp?IdProvincia=29&modulo=Contactar
+http://www.sol.com/en/modulo.asp?IdProvincia=41&modulo=Contactar
+http://www.sol.com/modulo.asp?IdProvincia=29&modulo=Contactar
+http://www.sol.com/modulo.asp?IdProvincia=41&modulo=Contactar
+http://www.solareco.com/articles/article.cfm/id/100
+http://www.solareco.com/articles/article.cfm/id/2
+http://www.solareco.com/articles/article.cfm/id/85
+http://www.solareco.com/service/common.cfm
+http://www.solarispictures.com/reviews7.htm
+http://www.solarmetric.com/News_and_Events/
+http://www.solarnavigator.net/catamaran_hull.htm
+http://www.solarnavigator.net/geography/cape_york_australia.htm
+http://www.solarschools.net/ed_resources/bsmart.aspx
+http://www.solarsolar.com/solarfaq.html
+http://www.solarviews.com/eng/earthsp.htm
+http://www.solbaram.org/articles/clm2su.html
+http://www.solbaram.org/articles/ruschur.html
+http://www.soldiermagazine.co.uk/ll/mailbag1.htm
+http://www.soldiermagazine.co.uk/mag/feature8.htm
+http://www.solent.ac.uk/law/crime.html
+http://www.solidarity-us.org/atc/116Fish.html
+http://www.solidaritycenter.org/document.cfm?documentID=58
+http://www.solihull.gov.uk/cabinet/Housing/hsgcommsafety250304.htm
+http://www.solihull.gov.uk/cabinet/Regeneration/regencd080703.htm
+http://www.solinet.org/www/hamiltonwater
+http://www.solitudethemovie.com/filmmakers.htm
+http://www.sologig.com/employer/profiles/view.php?id=64257
+http://www.solomonsguide.com/go/rissington/
+http://www.solonline.org/aboutsol/who/Senge/
+http://www.solreform.com/naepwritingletter.htm
+http://www.solstice-training.co.uk/TLP.htm
+http://www.solucient.com/forms/demochange.shtml
+http://www.solutionsabroad.com/
+http://www.solutionsabroad.com/index.asp
+http://www.solutionsoft.com/pub1/manualp12.htm
+http://www.solutionsoft.com/pub2/manualp12.htm
+http://www.solutionsoft.com/pub3/manualp12.htm
+http://www.solwayfirthpartnership.org.uk/education.htm
+http://www.solwest.org/contact.htm
+http://www.solwest.org/fairprog04/workshops.htm
+http://www.som.soton.ac.uk/research/cbcs/mentalhealth/JournalClub/JOURN.HTM
+http://www.som.tulane.edu/irb/glossary.html
+http://www.somerset-health.org.uk/mendip/boardexec.html
+http://www.somerset.lib.nj.us/sclsweb1/npreaderscornernewnonfiction.htm
+http://www.somerset.net/arm/fm_only_lowtech.html
+http://www.somersetgateway.com/aboutsom/somermag/july2000/cider.htm
+http://www.somersworld.com/ISSUES/Issue43/special_military.htm
+http://www.somesites2sea.com/deepseafishing.html
+http://www.something-fishy.org/isf/genetics.php
+http://www.something-fishy.org/reach/otherside_eva.php
+http://www.somethingjewish.co.uk/articles/1188_new_chosen_people_.htm
+http://www.somethingjewish.co.uk/articles/1426_get_a_date_online.htm
+http://www.somethingpositive.net/
+http://www.somewhatmuchly.co.uk/index.php?cat=Archaeology
+http://www.somucheasier.co.uk/buy-lcd-tv.html
+http://www.son-rise.org/srsu_reviews.html
+http://www.son.utmb.edu/developt/alumni_halloffame.htm
+http://www.sondrak.com/
+http://www.sonesta.com/neworleans_royal/page.asp?pageid=15966
+http://www.songfacts.com/detail.lasso?id=1443
+http://www.songfacts.com/detail.lasso?id=1791
+http://www.songfacts.com/detail.lasso?id=197
+http://www.songfacts.com/detail.lasso?id=3002
+http://www.songfacts.com/detail.lasso?id=59
+http://www.songlyrics4me.com/brazilian_girl.htm
+http://www.songlyrics4me.com/drunk_horny_woman.htm
+http://www.songman.com/intervie/inter.html
+http://www.songmeanings.net/lyric.php?lid=218
+http://www.songmeanings.net/lyric.php?lid=3530822107858484706
+http://www.songmeanings.net/lyric.php?lid=3530822107858500289
+http://www.songmeanings.net/lyric.php?lid=3530822107858516647
+http://www.songmeanings.net/lyric.php?lid=35777
+http://www.songmeanings.net/lyric.php?lid=39143
+http://www.songmeanings.net/lyric.php?lid=41908
+http://www.songmeanings.net/lyric.php?lid=942
+http://www.songquery.com/html/title/s/songbase_for_worship_leaders_complete_vineyard_song_collection.html
+http://www.songs4teachers.com/easterinformation.htm
+http://www.songsbysinatra.com/stories/stories13.html
+http://www.songsforteaching.com/michaelmitchell/canadafolk.htm
+http://www.songwriteruniverse.com/savage.html
+http://www.soniadf.com/
+http://www.sonic.net/bristlecone/dendro.html
+http://www.sonnets.org/pound.htm
+http://www.sonofthesouth.net/leefoundation/chapter20.htm
+http://www.sonofthesouth.net/leefoundation/civil-war/1861/February/new-orleans-customs-house.htm
+http://www.sonofthesouth.net/leefoundation/lee-jackson/harpers-jackson-lee-2.htm
+http://www.sonoma.edu/users/d/dove/courses/BUS340/Compensation.html
+http://www.sonomabusiness.com/archives/2001-11-column-thomas.html
+http://www.sonomabusiness.com/archives/2002-06-column-caesare.html
+http://www.sonomavalleyvoice.com/
+http://www.sonomavalleyvoice.com/articles.php?id=588
+http://www.sonshi.com/richards.html
+http://www.sony.net/SonyInfo/News/Press/200010/00-1006E/
+http://www.sonypictures.com/corp/cliplicensing.html
+http://www.soonerthought.com/archives/cat_news_commentary.html
+http://www.sooradio.com/en/casino-online-william-hill.html
+http://www.sophia-perennis.com/roots.htm
+http://www.soroptimist-gbi.org/news_070404
+http://www.soros.org/resources/events/downsizing_20050412/summary
+http://www.sorrento.cc/area-positano.php
+http://www.sorryeverybody.com/
+http://www.sortitonline.com/living/default.asp
+http://www.sos-childrensvillages.org/html/situation_around_sos_children_s_village_rafah_deteriorates.html
+http://www.sos.bangor.ac.uk/research/CASIX_PhD_Nov_2004.htm
+http://www.sos.org.uk/smallads.htm
+http://www.sos.state.or.us/elections/nov22004/guide/meas/m38_opp.html
+http://www.sos.state.tx.us/elections/pamphlets/federalapp.shtml
+http://www.soschildrensvillages.org.uk/sos-children-charity/about-child-sponsorship.htm
+http://www.soschildrensvillages.org.uk/sos-children-charity/aids-africa/aids-africa-orphans-best-practice-9.htm
+http://www.sosig.ac.uk/grapevine/Query?view=fullConf&conf_id=-805441355
+http://www.sosig.ac.uk/help/custom.html
+http://www.sosig.ac.uk/roads/subject-listing/Europe-cat/labmark.html
+http://www.sosig.ac.uk/roads/subject-listing/Europe/labmark.html
+http://www.sosig.ac.uk/roads/subject-listing/UK/labmark.html
+http://www.soss.com/
+http://www.sossobriety.com/
+http://www.sossobriety.org/orientation.htm
+http://www.sothethingis.com/Reading%20Aloud.htm
+http://www.soton.ac.uk/International/Applications/Meetusinyourcountry/
+http://www.soton.ac.uk/NewsandEvents/Events/MeetandGreetservice2005/
+http://www.soton.ac.uk/ResearchSupportOffice/FAQs/
+http://www.soton.ac.uk/~qahbk4/desapprev2-7-1.htm
+http://www.sou.edu/AAASPD/Ashland2005/SpecialEvents.html
+http://www.sou.edu/siskiyoucenter/seniorventures/
+http://www.soul-healer.com/book/b-st-fo.htm
+http://www.soulbrother.co.uk/flyingdutchmananthology2.htm
+http://www.soulcity.org.za/01.01.asp
+http://www.souldevice.org/qa_godscommunication_2.html
+http://www.soulforce.org/nola_sbcletters.html
+http://www.soulforce.org/romeadvancereport.html
+http://www.soulfulliving.com/divinecreativity.htm
+http://www.soulfulliving.com/gardeningspiritual.htm
+http://www.soulinvitation.com/peaceuniversity/
+http://www.soulrise.com/common/tolerance.htm
+http://www.soulselfhelp.on.ca/as1.html
+http://www.soundart-hot.com/english/users1_10.htm
+http://www.soundclick.com/stations/stations.cfm?id=110462
+http://www.soundclick.com/stations/stations.cfm?id=141094
+http://www.soundclick.com/stations/stations.cfm?id=146411
+http://www.soundclick.com/stations/stations.cfm?id=79340
+http://www.soundcontrol.co.uk/mod_1/pages/mod_1.21/pages/index.php
+http://www.soundgenerator.com/village/features.cfm?articleid=3793
+http://www.soundgenerator.com/village/features.cfm?articleid=3793&maingenreid=1
+http://www.soundonsound.com/adverts
+http://www.soundonsound.com/readersads/AdBrowse.php?Cat=10
+http://www.soundonsound.com/sos/apr99/articles/b.engineer.htm
+http://www.soundonsound.com/sos/aug03/articles/logicnotes.htm
+http://www.soundonsound.com/sos/jan04/articles/cubasenotes.htm
+http://www.soundonsound.com/sos/oct99/articles/producedsound.htm
+http://www.soundpartners.org/content2005/content_show.htm?doc_id=203239&attrib_id_list=1169,6489,1143
+http://www.soundpolitics.com/archives/004596.html
+http://www.soundslam.com/articles/interviews/interviews.php?interviews=in_yungwu
+http://www.soundstage.com/feedback/resp69.htm
+http://www.soundstage.com/vinyl/vinyl200504.htm
+http://www.soundtransit.org/about/board/resolutions/resolutions_2000.asp
+http://www.sourcekeg.co.uk/cran/doc/contrib/Lemon-kickstart/kr_dstat.html
+http://www.sourcekeg.co.uk/www.python.org/peps/pep-0310.html
+http://www.sourcelife.org/studies/sermons/lyinglion.htm
+http://www.sourcelists.com/Testimonials.asp
+http://www.sourcetext.com/grammarian/less-than-words-can-say/10.htm
+http://www.sourceuk.net/articles/a01975.html
+http://www.sourcewatch.org/index.php?title=Center_for_the_Defense_of_Free_Enterprise
+http://www.south-ayrshire.gov.uk/cgi-bin/Cllr.exe?Category=Ward%203%20-%20Councillor%20William%20MCINTOSH
+http://www.south-end.org/newsletter/
+http://www.south-norfolk.gov.uk/south-norfolk/council.nsf/pages/cabdec020204.html
+http://www.south-norfolk.gov.uk/south-norfolk/council.nsf/pages/cabdec081104.html
+http://www.south-pole.com/p0000071.htm
+http://www.southafrica-newyork.net/consulate/mediumterm.htm
+http://www.southafrica.co.za/travel_info_40.html
+http://www.southafrica.info/10years/addison-book.htm
+http://www.southafrica.info/ess_info/sa_glance/fauna_flora/wildlife.htm
+http://www.southafrica.info/ess_info/sa_glance/scitech/
+http://www.southafrica.info/ess_info/sa_glance/scitech/brenner.htm
+http://www.southafrica.info/ess_info/sa_glance/scitech/opensourcecentre.htm
+http://www.southafrica.info/ess_info/sa_glance/sports/thobela.htm
+http://www.southafrica.info/plan_trip/travel_tips/getting_around/joburg.htm
+http://www.southafrica.info/what_happening/news/elephanttwins.htm
+http://www.southafrica.net/index.cfm?SitePageID=13990
+http://www.southampton.gov.uk/community/communitygroups/communityconcern.asp
+http://www.southampton.liu.edu/academic/courses/u_engl.htm
+http://www.southasianconnection.com/articles/3/1/Targeting-the-Second-Generation-of-South-Asians
+http://www.southasianconnection.com/articles/5/1/John&%2339%3Bs-Search-for-God
+http://www.southasianmedia.net/cnn.cfm?id=172244&category=Religion&Country=AFGHANISTAN
+http://www.southasianmedia.net/cnn.cfm?id=180203&category=Sports&Country=WORLD
+http://www.southasianmedia.net/major_issues/nuclear_armrace/account_talks.cfm?did=55
+http://www.southaustralia.biz/capabilities/management.htm
+http://www.southaustralianhistory.com.au/edeowie.htm
+http://www.southbeach-diet.info/
+http://www.southbendtribune.com/local/communityindex.html
+http://www.southbendtribune.com/stories/2005/06/17/entertainment.20050617-sbt-MICH-D1-Material.sto
+http://www.southbus.com.au/clss3.html
+http://www.southcarolinabedandbreakfast.com/by-laws.shtml
+http://www.southcentre.org/info/southbulletin/bulletin11/bulletin11web-02.htm
+http://www.southcoast.org/heart/
+http://www.southcoasttoday.com/daily/05-99/05-09-99/d01sp082.htm
+http://www.southcollegetn.edu/01beta/beta/serv.html
+http://www.southcollegetn.edu/sctn/serv.html
+http://www.southcom.mil/usag-miami/sites/about/history.asp
+http://www.southdakotastockgrowers.org/news%20releases.htm
+http://www.southdowns.ac.uk/professional/fitness.htm
+http://www.southeast-ra.gov.uk/southeastplan/plan/faqs.html
+http://www.southeastcoachworks.co.uk/testimonials.htm
+http://www.southend.wayne.edu/
+http://www.southend.wayne.edu/modules/news/article.php?storyid=1401
+http://www.southendgrounds.com/
+http://www.southendpress.org/books/p&pex.shtml
+http://www.southern.net/southern/news/?id=2
+http://www.southernct.edu/organizations/rccs/ethicomp/bynum.html
+http://www.southernct.edu/services/?file=services.html
+http://www.southernct.edu/services/index.php?file=services.html
+http://www.southernfoodways.com/oral_history/tnbbq/M02_barbqshop.shtml
+http://www.southernfoodways.com/oral_history/tnbbq/R03_bobbys.shtml
+http://www.southernfoodways.com/oral_history/tnbbq/R12_scotts.shtml
+http://www.southernmuseum.org/exhibits.html
+http://www.southernsiberian.com/available_dogs.html
+http://www.southernvoice.com/blog/index.cfm?start=1/28/05&end=2/4/05
+http://www.southernwindinn.com/bedandbreakfastrooms/flagler.html
+http://www.southessex-trust.nhs.uk/benefits.asp
+http://www.southkent.ac.uk/Access/ViewAllCourses/JanStarts_CourseDetails.asp?GUIDE=99&CREF=NV2BTLD
+http://www.southkent.ac.uk/Access/ViewAllCourses/JanStarts_CourseDetails.asp?GUIDE=99&CREF=VQ2BCTL
+http://www.southknoxbubba.net/skblog/archive_2005_06.php
+http://www.southlakeland.gov.uk/main.asp?page=23&atoz=R
+http://www.southnorthants.gov.uk/business/vsg.php
+http://www.southnorthants.gov.uk/contactus/departments.php
+http://www.southpacificrealestate.com/details.cfm?PropID=1081
+http://www.southpacificrealestate.com/details.cfm?PropID=1176
+http://www.southparkstudios.com/fans/bbs/viewtopic.php?p=251867
+http://www.southparkstudios.com/fans/bbs/viewtopic.php?p=251876
+http://www.southparkstudios.com/fans/bbs/viewtopic.php?p=252498
+http://www.southshore.com/natco.htm
+http://www.southtravels.com/asia/philippines/cordovareefresort/
+http://www.southvalleypeacecenter.org/
+http://www.southwalesindex.co.uk/pages/2273.html
+http://www.southwalesindex.co.uk/pages/274_637.html
+http://www.southwalesindex.co.uk/pages/286_625.html
+http://www.southwalesindex.co.uk/searchmg?q=wedding+venues
+http://www.southwark.anglican.org/cathedral/educate/reform1.htm
+http://www.southwark.gov.uk/YourServices/transport/greentravel/
+http://www.southwestfilmstudios.com/ne/ne-3.html
+http://www.southwestgigguide.co.uk/
+http://www.southwestgigguide.co.uk/gg/a.asp?aid=189
+http://www.southwestgreens.com/synthetic_putting_green.html
+http://www.southwestlowvision.com/sunwear.htm
+http://www.southwestmedical.com/mfgsearchresults.cfm?MFG_ID=Humanicare_International_Dignity
+http://www.southwestyorkshire.nhs.uk/services-details.asp?Name=Dewsbury+Two+Sector+Team
+http://www.southwestyorkshire.nhs.uk/services-details.asp?Name=Spenborough+Sector+Team
+http://www.sova-enterprises.com/designerspotlight/ds_oct2003.php
+http://www.sover.net/~lsudlow/ARvsAW.htm
+http://www.sover.net/~ozus/emperorsclub.htm
+http://www.sovereign-publications.com/hospital-decisions-regn.htm
+http://www.sovereigngraceministries.org/sgo/v21no2/growing.html
+http://www.sovereigngraceministries.org/sgo/v21no2/prt_growing.html
+http://www.sovereignty.org.uk/features/footnmouth/bailiff.html
+http://www.sovgrace.net/born.htm
+http://www.soviet-awards.com/
+http://www.soviet-awards.com/titles1.htm
+http://www.sovlit.com/bios/nagibin.html
+http://www.sovlit.com/rasskazy/fatfaced.html
+http://www.sovlit.com/rasskazy/light.html
+http://www.soyinfo.com/haz/warning.shtml
+http://www.soyouwanna.com/site/syws/neighbors/neighbors.html
+http://www.soyouwanna.com/site/syws/standup/standup5.html
+http://www.soyouwanna.com/site/syws/standup/standupFULL.html
+http://www.soyouwanna.com/site/syws/traindog/traindogFULL.html
+http://www.soyouwanttodrive.com/article.php?id=100
+http://www.sp.edu.sg/estop/articles/2005/eetc.htm
+http://www.sp.uconn.edu/~wwwethos/toc1999.html
+http://www.space-frontier.org/Policies/bantam-0198-final.html
+http://www.space-frontier.org/Projects/TheWatch/
+http://www.space.com/businesstechnology/lunarshield_techwed_050112.html
+http://www.space.com/businesstechnology/technology/higher_ground_040222.html
+http://www.space.com/businesstechnology/technology/pancam_techwed_040114.html
+http://www.space.com/businesstechnology/technology/space_elevator_021120.html
+http://www.space.com/missionlaunches/050520_mars_masterplan.html
+http://www.space.com/missionlaunches/050524_rovers_update.html
+http://www.space.com/missionlaunches/exp10_chiaovote_041102.html
+http://www.space.com/missionlaunches/imax_iss_020416.html
+http://www.space.com/missionlaunches/iss_crewchange_041021.html
+http://www.space.com/missionlaunches/launches/launch_schedule.html
+http://www.space.com/missionlaunches/launches/sealaunch_preview_000728.html
+http://www.space.com/missionlaunches/missions/sts92_z1_001014.html
+http://www.space.com/missionlaunches/rutan_launchdate_040602.html
+http://www.space.com/missionlaunches/soyuz_update_020426.html
+http://www.space.com/missionlaunches/spirit_talks_040123.html
+http://www.space.com/missionlaunches/titan2_launch_030106.html
+http://www.space.com/news/attack_folo_010911.html
+http://www.space.com/news/dextre_hubble_040811.html
+http://www.space.com/news/hubble_wars_050124.html
+http://www.space.com/news/iss_fin_020918.html
+http://www.space.com/news/remote_surveillance_010914-1.html
+http://www.space.com/news/spacestation/zvezda_jump_start_000711.html
+http://www.space.com/scienceastronomy/aas_earthsize_020329.html
+http://www.space.com/scienceastronomy/asteroid_warning_040322.html
+http://www.space.com/scienceastronomy/astronomy/cosmic_darkmatt_020108-1.html
+http://www.space.com/scienceastronomy/generalscience/5mysteries_universes_020205-1.html
+http://www.space.com/scienceastronomy/map_discovery_030211.html
+http://www.space.com/scienceastronomy/opportunity_news_040302.html
+http://www.space.com/scienceastronomy/planetearth/earth_move_010207.html
+http://www.space.com/scienceastronomy/solarsystem/near_probe_000110.html
+http://www.space.com/scienceastronomy/solarsystem/second_moon_991029.html
+http://www.space.com/spacelibrary/books/library_creating_021218.html
+http://www.space.com/spacewatch/full_moon_names_2005.html
+http://www.space.com/spacewatch/iss_viewing_040507.html
+http://www.space.com/spacewatch/seasonal_stars_030207.html
+http://www.space.com/spacewatch/where_is_mars.html
+http://www.space1999.net/~fanfiction/r_s/fathers.html
+http://www.space4peace.org/articles/counter_space_doctrine.htm
+http://www.spaceagepop.com/tvshows.htm
+http://www.spaceandculture.org/2004_02_01_archive.php
+http://www.spaceandculture.org/2004_06_01_archive.php
+http://www.spaceandtech.com/digest/flash2002/flash2002-088.shtml
+http://www.spacecast.com/command/faq/index2.asp
+http://www.spacecityrock.com/2004_01_11_break-archive.html
+http://www.spacecityrock.com/break.html
+http://www.spacedaily.com/news/energy-tech-05m.html
+http://www.spacedaily.com/news/mars-mers-04zzk.html
+http://www.spacedaily.com/news/materials-04g.html
+http://www.spacedaily.com/news/timetravel-01a.html
+http://www.spaceflight.esa.int/users/file.cfm?filename=fac-iss-col-scdf-cad
+http://www.spaceflightnow.com/news/n0403/19cometwild2/
+http://www.spacefuture.com/archive/a_common_cost_target_of_space_transportation_for_space_tourism_and_space_energy_development.shtml
+http://www.spacefuture.com/archive/an_evaluation_of_the_potential_demand_for_space_tourism_within_the_united_kingdom.shtml
+http://www.spacefuture.com/archive/feasibility_of_commercial_resort_hotels_in_low_earth_orbit.shtml
+http://www.spacefuture.com/archive/on_the_practical_and_sporting_aspects_of_football_in_zero_gravity.shtml
+http://www.spacefuture.com/archive/prospects_of_space_tourism.shtml
+http://www.spacefuture.com/archive/space_elevators_space_hotels_and_space_tourism.shtml
+http://www.spacefuture.com/archive/space_tourism_and_its_effects_on_space_commercialization.shtml
+http://www.spacefuture.com/archive/space_tourism_market_demand_and_the_transportation_infrastructure.shtml
+http://www.spacefuture.com/archive/space_tourism_the_door_into_the_space_age.shtml
+http://www.spacefuture.com/archive/space_tourism_the_surprising_new_industry.shtml
+http://www.spacefuture.com/archive/the_business_of_commercializing_space.shtml
+http://www.spacefuture.com/archive/the_cultural_effect_of_space_tourism_on_the_space_industry_and_society.shtml
+http://www.spacefuture.com/tourism/sciencefiction.shtml
+http://www.spacehab.com/gsa/how.htm
+http://www.spaceline.org/history/2.html
+http://www.spacenet.on.ca/stories/medicine/SLEEPING/sleep.htm
+http://www.spaceprojects.com/washtimes110500/
+http://www.spacequest.net/sq7/
+http://www.spaceref.com/china/china.white.paper.nov.22.2000.html
+http://www.spaceref.com/news/viewsr.html?pid=13769
+http://www.spaceref.com/news/viewsr.html?pid=15066
+http://www.spaceref.com/news/viewsr.html?pid=15282
+http://www.spacetelescope.org/news/html/heic0406.html
+http://www.spacetoday.org/History/SpaceFactoids/SpaceFactoids4.html
+http://www.spacetoday.org/Time/TimeExplained.html
+http://www.spaceuk.org/bstreak/bs/bsmilitary.html
+http://www.spacewar.com/news/missiles-05zp.html
+http://www.spaceweather.com/
+http://www.spaff.org/CompostOven/CompostOven.htm
+http://www.spain-hotels-discount.com/travel_guide.html
+http://www.spamresource.com/catalog/p642558.html
+http://www.spamresource.com/catalog/p642560.html
+http://www.spanish-immersion.com/planning.asp
+http://www.spannerfilms.net/?lid=706
+http://www.sparc.sunysb.edu/html/noaa/noaa_trop.html
+http://www.sparetheair.org/community/resourceteams.htm
+http://www.sparkmuseum.com/BOOKS_T.HTM
+http://www.sparknotes.com/astronomy/earth/terms.html
+http://www.sparknotes.com/drama/glengarry/themes.html
+http://www.sparknotes.com/history/european/frenchrev/section9.rhtml
+http://www.sparknotes.com/history/european/ww2/section2.rhtml
+http://www.sparknotes.com/lit/awakening/summary.html
+http://www.sparknotes.com/lit/belcanto/section5.rhtml
+http://www.sparknotes.com/lit/hisdarkmaterials/section1.html
+http://www.sparknotes.com/lit/jungle/section2.rhtml
+http://www.sparknotes.com/lit/missjane/characters.html
+http://www.sparknotes.com/lit/missjane/themes.html
+http://www.sparknotes.com/lit/nolonger/quiz.html
+http://www.sparknotes.com/lit/nolonger/themes.html
+http://www.sparknotes.com/lit/ourtown/themes.html
+http://www.sparknotes.com/lit/salesman/section2.rhtml
+http://www.sparknotes.com/lit/wrinkle/section8.rhtml
+http://www.sparknotes.com/philosophy/republic/section5.rhtml
+http://www.sparknotes.com/physics/thermodynamics/structure/problems1.html
+http://www.sparknotes.com/physics/thermodynamics/structure/section1.html
+http://www.sparknotes.com/poetry/browning/section6.rhtml
+http://www.sparknotes.com/poetry/paradiselost/context.html
+http://www.sparknotes.com/shakespeare/henryv/characters.html
+http://www.sparknotes.com/shakespeare/macbeth/section8.rhtml
+http://www.sparknotes.com/testprep/books/newsat/powertactics/numop/chapter3section5.rhtml
+http://www.sparknotes.com/testprep/books/sat2/biology/chapter8section1.rhtml
+http://www.sparknotes.com/testprep/books/sat2/biology/chapter9section1.rhtml
+http://www.sparknotes.com/testprep/books/sat2/chemistry/chapter5section14.rhtml
+http://www.sparknotes.com/testprep/books/sat2/chemistry/chapter5section5.rhtml
+http://www.sparknotes.com/testprep/books/sat2/physics/chapter1.html
+http://www.sparky.on.ca/school/gr11/football/lfp_0920.html
+http://www.spartacus.schoolnet.co.uk/2WWeuropeunity.htm
+http://www.spartacus.schoolnet.co.uk/2WWpatton.htm
+http://www.spartacus.schoolnet.co.uk/2WWportal.htm
+http://www.spartacus.schoolnet.co.uk/2WWshirer.htm
+http://www.spartacus.schoolnet.co.uk/DSavenell.htm
+http://www.spartacus.schoolnet.co.uk/DSfarmer.htm
+http://www.spartacus.schoolnet.co.uk/FWWnurses.htm
+http://www.spartacus.schoolnet.co.uk/FWWwells.htm
+http://www.spartacus.schoolnet.co.uk/GERunemployment.htm
+http://www.spartacus.schoolnet.co.uk/IRarkwright.htm
+http://www.spartacus.schoolnet.co.uk/IRowen.htm
+http://www.spartacus.schoolnet.co.uk/JFKbissell.htm
+http://www.spartacus.schoolnet.co.uk/JFKgreerW.htm
+http://www.spartacus.schoolnet.co.uk/JFKkupcinet.htm
+http://www.spartacus.schoolnet.co.uk/JFKlarue.htm
+http://www.spartacus.schoolnet.co.uk/Jmorris.htm
+http://www.spartacus.schoolnet.co.uk/Jpicturepost.htm
+http://www.spartacus.schoolnet.co.uk/Jreach.htm
+http://www.spartacus.schoolnet.co.uk/MEDwilliam1.htm
+http://www.spartacus.schoolnet.co.uk/PRhay.htm
+http://www.spartacus.schoolnet.co.uk/PRpitt.htm
+http://www.spartacus.schoolnet.co.uk/REVscience.htm
+http://www.spartacus.schoolnet.co.uk/REVseminars.htm
+http://www.spartacus.schoolnet.co.uk/REVteacherscentre.htm
+http://www.spartacus.schoolnet.co.uk/RUSred.htm
+http://www.spartacus.schoolnet.co.uk/RUSstalin.htm
+http://www.spartacus.schoolnet.co.uk/SCfaraday.htm
+http://www.spartacus.schoolnet.co.uk/SPpopular.htm
+http://www.spartacus.schoolnet.co.uk/STUcharles1.htm
+http://www.spartacus.schoolnet.co.uk/STUcharles2.htm
+http://www.spartacus.schoolnet.co.uk/Sconnolly.htm
+http://www.spartacus.schoolnet.co.uk/TUDaragon.htm
+http://www.spartacus.schoolnet.co.uk/TUDmary1.htm
+http://www.spartacus.schoolnet.co.uk/TUgallacher.htm
+http://www.spartacus.schoolnet.co.uk/TUhodge.htm
+http://www.spartacus.schoolnet.co.uk/USACWarmyU.htm
+http://www.spartacus.schoolnet.co.uk/USACWsherman.htm
+http://www.spartacus.schoolnet.co.uk/USACWthompsonF.htm
+http://www.spartacus.schoolnet.co.uk/USAShousing.htm
+http://www.spartacus.schoolnet.co.uk/USASreconstruction.htm
+http://www.spartacus.schoolnet.co.uk/USAaltgeld.htm
+http://www.spartacus.schoolnet.co.uk/USAappealR.htm
+http://www.spartacus.schoolnet.co.uk/USAchild.htm
+http://www.spartacus.schoolnet.co.uk/USAgriffith.htm
+http://www.spartacus.schoolnet.co.uk/USAmarshallG.htm
+http://www.spartacus.schoolnet.co.uk/USArussellCE.htm
+http://www.spartacus.schoolnet.co.uk/USAschwerner.htm
+http://www.spartacus.schoolnet.co.uk/USAsitin.htm
+http://www.spartechsoftware.com/reeko/MoreExperimentsSortCategory.htm
+http://www.spc.com.sg/aboutus/worldwide.asp
+http://www.spc.int/coastfish/News/BDM/11/4Jaquemet.htm
+http://www.spc.noaa.gov/faq/tornado/
+http://www.spc.noaa.gov/products/outlook/day1otlk.html
+http://www.spca.org.nz/history.htm
+http://www.spcare.org/fdfh/endorsements-sogyalrinpoche.html
+http://www.spcnet.tv/forums/showthread.php?t=10697
+http://www.spe.org/spe/jsp/basic/0,,1104_12111_1045655,00.html
+http://www.spe.org/spe/jsp/basic/0,,1104_1728,00.html
+http://www.spe.org/spe/jsp/basic/0,,1104_3306579,00.html
+http://www.spe.org/spe/jsp/basic/0,2396,1104_1728_0,00.html
+http://www.spe.org/spe/jsp/meetingtechnicalsession/0,,1104_1535_3024806_2485693,00.html
+http://www.spe.org/spe/jsp/meetingtechnicalsession/0,,1104_1535_3024844_2485693,00.html
+http://www.speak.org.uk/tracker
+http://www.speakcampaigns.org.uk/
+http://www.speaking.com/speakerindexes/lifebalance.html
+http://www.speakingcircles.com/Articles/articles_gary.html
+http://www.speaksforitself.com/speaksforitself/docs.asp?UID=181665862268
+http://www.spebsqsa.org/web/groups/public/documents/pages/pub_id_051991.hcsp
+http://www.special-lady.com/russian_brides.html
+http://www.specialchem4adhesives.com/resources/articles/article.aspx?id=33
+http://www.specialchem4polymers.com/resources/latest/displaynews.aspx?id=2001&lr=rupa053&li=%7BID_USER_C%7D
+http://www.specialchild.com/success.html
+http://www.specialfamilies.com/dating_marriage_&_autism.htm
+http://www.specialist-games.com/bloodbowl/forum_b/topic.asp?TOPIC_ID=3091&whichpage=1
+http://www.specialist-games.com/bloodbowl/reveiw.asp
+http://www.specialneeds.com/conference_ICDL.asp
+http://www.specialneedsfamilyfun.com/accessible-home/
+http://www.specialoperations.com/Counterterrorism/Barras.htm
+http://www.specialtactics.com/ubbthreads/showflat.php?Cat=0&Number=29587&Main=29568
+http://www.specialtyinterests.net/codexhammurabi.html
+http://www.speciesatrisk.gc.ca/search/speciesDetails_e.cfm?SpeciesID=290
+http://www.speciesorchids.com/NewsletterNovember02.html
+http://www.spectacle.org/0701/mcveigh.html
+http://www.spectacle.org/496/demo.html
+http://www.spectacle.org/kazoo/tele.html
+http://www.spectator-online.com/vnews/display.v/ART/2003/11/20/3fbd96b371817?in_archive=1
+http://www.spectator.org/dsp_article.asp?art_id=6822
+http://www.spectatornews.com/news/2004/12/02/Showcase/Mobile.Madness.Students.Explain.Views.On.Cell.Phones-818986.shtml
+http://www.spectronicsinoz.com/library.asp?article=4391
+http://www.spectronicsinoz.com/product.asp?product=35
+http://www.spectrum.ieee.org/WEBONLY/resource/jan03/surv.html
+http://www.spectrum.ieee.org/WEBONLY/wonews/may05/0505njarv.html
+http://www.spectrum.ieee.org/careers/careerstemplate.jsp?ArticleId=m100304
+http://www.speculativevision.com/library/classics.cgi?folder=iliad&next=14
+http://www.speculativevision.com/library/classics.cgi?folder=iliad&next=15
+http://www.specwarnet.com/europe/sas.htm
+http://www.spedonline.com/esteem.htm
+http://www.speech-writers.com/80birthdayhusbandtoasts.htm
+http://www.speech-writers.com/90birthdayhusbandtoasts.htm
+http://www.speech.kth.se/qpsr/tmh/
+http://www.speechdelay.com/cgi-bin/ikonboard/topic.cgi?forum=12&topic=24
+http://www.speechdelay.com/cgi-bin/ikonboard/topic.cgi?forum=5&topic=336
+http://www.speechstudio.com/section_508.htm
+http://www.speechteach.com/links.html
+http://www.speedcreep.com/2004_rules.html
+http://www.speedflirt.co.uk/terms.php
+http://www.speedmuseum.org/educational_poster.html
+http://www.speedsleep.com/faq.html
+http://www.speedster.com/Field%20Hockey.htm
+http://www.spegcs.org/en/articles/search.asp?category=Then%20and%20Now
+http://www.spellingsociety.org/pubs/pvs/pv8rondthaler.html
+http://www.spelthorne.gov.uk/contrast/lei_laleham_village.htm
+http://www.spelthorne.gov.uk/environment___planning/transport/env_transport_plan.htm
+http://www.spelthorne.gov.uk/lei_laleham_village.htm
+http://www.spelthorne.gov.uk/lei_leisure_tourism/tourism/lei_walksinspelthorne/lei_walk_shepperton.htm
+http://www.spence-n.demon.co.uk/wcnn.htm
+http://www.spencerstuart.com/yourcareer/development/561/
+http://www.spencerstudio.com/red_eye_club.htm
+http://www.sph.umich.edu/~jkoopman/802Web/Chap9/Chap9.htm
+http://www.sphere.bc.ca/test/srbooks.html
+http://www.spicejar.org/asiplease/archives/2003_10.html
+http://www.spicejar.org/asiplease/archives/2004_10.html
+http://www.spidercox.co.uk/grange.htm
+http://www.spiderwebz.co.uk/eaglewing/gport.htm
+http://www.spie.org/Conferences/Programs/02/pw/
+http://www.spiffle.com/mix/seamaster/overview
+http://www.spiffle.com/rants/06-30-1998_12-50am
+http://www.spike2000.com/whatsnew/wordsearch/archives/funstuff/
+http://www.spiked-online.com/Articles/00000002D290.htm
+http://www.spiked-online.com/Articles/00000006DD7A.htm
+http://www.spiked-online.com/Articles/00000006E02B.htm
+http://www.spiked-online.com/Articles/0000000CA37D.htm
+http://www.spiked-online.com/Articles/0000000CA40D.htm
+http://www.spiked-online.com/Articles/0000000CA554.htm
+http://www.spiked-online.com/Articles/0000000CA5DE.htm
+http://www.spiked-online.com/Printable/00000002D290.htm
+http://www.spiked-online.com/Printable/00000006E02B.htm
+http://www.spiked-online.com/Printable/0000000CA37D.htm
+http://www.spiked-online.com/Printable/0000000CA554.htm
+http://www.spiked-online.com/Printable/0000000CA889.htm
+http://www.spiked-online.com/Sections/Culture/Film/Index.htm
+http://www.spikesys.com/Trains/brk_faq.html
+http://www.spikynorman.dsl.pipex.com/ucemsg.html
+http://www.spinalfitness.com/Lever%20Discussion.htm
+http://www.spinalrehab.com.au/welcome/PatientHandbook.htm
+http://www.spinalsoothers.com/ablebody.htm
+http://www.spine-health.com/topics/cd/ergo/ergo05.html
+http://www.spine-health.com/topics/conserv/posterg/posture01.html
+http://www.spine-health.com/topics/conserv/yoga/yoga01.html
+http://www.spine.org/articles/grantwinners_1997.cfm
+http://www.spinelessbooks.com/gadsby/01.html
+http://www.spineuniversity.com/public/print.asp?id=41
+http://www.spineuniversity.com/public/spinesub.asp?id=41
+http://www.spineuniversity.com/public/spinesub.asp?id=65
+http://www.spineworks.com/public/nelson/nelson.htm
+http://www.spinifexpress.com.au/cf/cybercon.htm
+http://www.spinme.com/2004/05/take_a_fresh_lo.html
+http://www.spinme.com/2004/07/notching_down_t.html
+http://www.spinme.com/2005/01/submit_your_son.html
+http://www.spinninglobe.net/carnegiehall.htm
+http://www.spinybabbler.org/events/Jan_%202005/evnt_5_therapeutic_art.php
+http://www.spiral.org.uk/celtic-jewelry.html
+http://www.spiral.org.uk/pewter-jewellery.html
+http://www.spiral.org.uk/sitemap.html
+http://www.spiralhaircase.com/ice.html
+http://www.spiretech.com/~leonard/cfn/adopt/adopt.htm
+http://www.spirit-alembic.com/alchemy.html
+http://www.spirit-alembic.com/organic.html
+http://www.spirit-net.ca/sermons/a-ad02sm.php
+http://www.spirit-net.ca/sermons/a-ch01-keeping.php
+http://www.spirit-net.ca/sermons/abc-worldwidecommunionsunday.php
+http://www.spirit-net.ca/sermons/b-ch00sn.html
+http://www.spirit-net.ca/sermons/b-ea07su.html
+http://www.spirit-net.ca/sermons/b-le05se.html
+http://www.spirithome.com/cessatio.html
+http://www.spirithome.com/prayer_3.html
+http://www.spiritledwriter.com/march2004/demand.html
+http://www.spiritlifechurch.com/qu_God_stop_suffering.html
+http://www.spiritoffreedom.org.uk/resources/20years.html
+http://www.spiritofgracefellowship.org/sermons_2004/010404_carrying_your_cross.htm
+http://www.spiritofmaat.com/archive/jul1/packer.htm
+http://www.spiritone.com/~gdy52150/goldp5.html
+http://www.spiritrock.org/html/sched_february.html
+http://www.spiritual.com.au/articles/ascension/lemonade_jdstone.htm
+http://www.spiritualbeggars.com/
+http://www.spiritualchicks.com/Article_Bobby.htm
+http://www.spiritualitea.com/articles/bookoftea.shtml
+http://www.spiritualityhealth.com/newsh/items/article/item_2895.html
+http://www.spiritualityhealth.com/newsh/items/article/item_2899.html
+http://www.spiritualityhealth.com/newsh/items/blank/item_3065.html
+http://www.spiritualityhealth.com/newsh/items/moviereview/item_2809.html
+http://www.spiritualityhealth.com/newsh/items/newsitem/item_9317.html
+http://www.spiritualitytoday.org/spir2day/884013berrigan.html
+http://www.spiritualitytoday.org/spir2day/91434kownacki.html
+http://www.spiritualminds.com/articles.asp?articleid=2126
+http://www.spiritwatch.org/relabbehin.htm
+http://www.spitsbergentravel.no/eng/goxpage00000024.html
+http://www.spitting-image.net/archives/000794.html
+http://www.spivalaw.com/legalteam.html
+http://www.spizzazzz.com/
+http://www.spj.org/board_minutes_011007spj.asp
+http://www.spl.org.uk/youngpeople/education/schools_poetry.htm
+http://www.splab.org/workshop.html
+http://www.splashesfromtheriver.com/parenting.htm
+http://www.spohnc.org/clinicalinfo.htm
+http://www.spokane.net/
+http://www.spokanecenter.com/eventsrvc.htm
+http://www.spokanevalleyonline.com/articles/biovam1.htm
+http://www.spokeandsprocket.com/cartgenie/pg_Class.asp
+http://www.spokes.org.uk/index.php?name=PNphpBB2&file=printview&t=32&start=0
+http://www.spokes.org.uk/index.php?name=PNphpBB2&file=viewtopic&t=32
+http://www.spokesmanreview.com/allstories-news-story.asp?date=050804&ID=s1517947
+http://www.spokesmanreview.com/blogs/conversation/archive.asp?postID=2811
+http://www.spokesmanreview.com/blogs/conversation/archive.asp?postID=2877
+http://www.spokesmanreview.com/boise/blog.asp?postID=19813
+http://www.spolin.com/dir_metam_mind.html
+http://www.sport.act.gov.au/wdiscpriv.html
+http://www.sportaircraft.net/browse.php?cat=441&name=Kit%20Built
+http://www.sportbarcelona.com/s/sportbarcelona/tsindex.html
+http://www.sportengland.org/text/index/news_and_media/news_gs/carter_speech.htm
+http://www.sportinglife.com/football/cups/facup/news/story_get.cgi?STORY_NAME=soccer/05/01/31/SOCCER_Chelsea_Terry.html
+http://www.sportingnews.com/experts/stan-mcneal/20050617.html
+http://www.sportingpulse.com.au/assoc_page.cgi?client=%40Men%20of%20League%402807%40%40%40%40%40%4011%40%407%40&sID=82
+http://www.sportmovement.com/
+http://www.sportnetwork.net/main/s107/st74023.htm
+http://www.sportnetwork.net/main/s200/st60180.htm
+http://www.sportnetwork.net/main/s237/st66775.htm
+http://www.sports.det.nsw.edu.au/nswchs/handbook/section_6_11.htm
+http://www.sports.det.nsw.edu.au/nswchs/handbook/section_6_19.htm
+http://www.sportscardforum.com/archive/index.php/t-41924_FS_or_Trade.html
+http://www.sportscardforum.com/archive/index.php/t-5090_SOSA_get_standing_ovation_tonight.html
+http://www.sportscardforum.com/archive/index.php/t-72679_About_collecting_specific_players.html
+http://www.sportsci.org/traintech/glycerol/rar.htm
+http://www.sportscolumn.com/story/2005/2/24/151759/465/nhl/A_Few_Million_Too_Few
+http://www.sportsecyclopedia.com/nhl/monwan/wanderers.html
+http://www.sportsfilter.com/comments.cfm/4308
+http://www.sportsgoons.com/Vol2_Iss34/Michael_Vick_Experience.com.htm
+http://www.sportshollywood.com/lawrigley.html
+http://www.sportsimports.com/contact/faq.asp
+http://www.sportsinjurybulletin.com/archive/core-strength-training.html
+http://www.sportsinjurybulletin.com/archive/weight-training-veteran.html
+http://www.sportsmatch.co.uk/sportsmatch_review_march_2002.htm
+http://www.sportsmed.com.au/sportsmed/hospital.html?page_id=24
+http://www.sportsmed.org/about/document.asp?did=59
+http://www.sportsnutrition4u.com/about.aspx
+http://www.sportsrentbc.com/
+http://www.sportsshooter.com/news/1409
+http://www.sportsshooter.com/news_story.html?id=882
+http://www.sportstaronnet.com/tss2429/24290360.htm
+http://www.sportsteacher.co.uk/news/editorial/01sprF_sportengland.html
+http://www.sportzblitz.net/body-blitz-challenge/margaret-schafer.php
+http://www.sportzblitz.net/body-blitz-challenge/melinda-troughton.php
+http://www.spotlighthealth.com/common/chat/ChatTransDetail.asp?m=1&cid=76
+http://www.spotstop.com/default.asp?newsID=114
+http://www.sppa.org.uk/
+http://www.spra.org.uk/news1.html
+http://www.spra.org.uk/news18.html
+http://www.spreadfirefox.com/
+http://www.spreadfirefox.com/?q=node&from=15
+http://www.spreadfirefox.com/?q=node/view/12983
+http://www.spreadfirefox.com/?q=node/view/16047
+http://www.spreadfirefox.com/?q=node/view/8508
+http://www.spring-green.com/mower_care.htm
+http://www.springboard.net.au/Newsletters/Newsletter-2005FederalBudgetSpecialEdition.htm
+http://www.springboardconsultancy.com/fspringf.htm
+http://www.springboardconsultancy.com/ispringf.htm
+http://www.springdaleark.org/cosa/article_05.1.htm
+http://www.springeronline.com/sgw/cda/frontpage/0,11855,4-40356-72-33467843-0,00.html
+http://www.springeronline.com/sgw/cda/frontpage/0,11855,4-40356-72-33467891-0,00.html
+http://www.springeroperahouse.org/contactus.cfm
+http://www.springfieldcastle.com/
+http://www.springfieldlibrary.org/board/actionplan.html
+http://www.springgulch.com/SGrates.cfm
+http://www.spritehand.com/default.aspx
+http://www.sps.arizona.edu/proposal/quick-reference.htm
+http://www.spsma.co.uk/technique.php
+http://www.spss.com/press/template_view.cfm?PR_ID=589
+http://www.spss.com/success/template_view.cfm?Story_ID=88
+http://www.spssi.org/saturday_sessions.html
+http://www.spt.co.uk/About/publschm.html
+http://www.spt.co.uk/garl/press/story002.html
+http://www.spt.co.uk/garl/press/story003.html
+http://www.spt.co.uk/news/story247.html
+http://www.sptimes.com/2002/02/04/Opinion/Florida_Power__explai.shtml
+http://www.sptimes.com/2002/08/24/TampaBay/Podiatrist_s_arsenal_.shtml
+http://www.sptimes.com/2003/07/06/Neighborhoodtimes/Thanks_to_all_who_hel.shtml
+http://www.sptimes.com/2003/09/21/State/Investors_left_with_b.shtml
+http://www.sptimes.com/2003/11/30/Tampabay/The_clogged_commute.shtml
+http://www.sptimes.com/2003/12/06/Tampabay/Flu_vaccine_has_run_o.shtml
+http://www.sptimes.com/2004/01/16/Citytimes/Region_1_students_cho.shtml
+http://www.sptimes.com/2004/06/13/Worldandnation/Bush_key__Succeed_whe.shtml
+http://www.sptimes.com/2004/08/01/Columns/Economic_heavy_hitter.shtml
+http://www.sptimes.com/2004/09/12/Action/Child_s_savings_accou.shtml
+http://www.sptimes.com/2004/10/01/Action/Effective_use_of_fund.shtml
+http://www.sptimes.com/2004/10/07/Artsandentertainment/Hack_job.shtml
+http://www.sptimes.com/2004/10/22/Action/Don_t_get_hooked_by_a.shtml
+http://www.sptimes.com/2004/10/29/Brandontimes/Now_sober__he_wants_t.shtml
+http://www.sptimes.com/2004/11/07/Bucs/Seeking_a_turning_poi.shtml
+http://www.sptimes.com/2004/11/19/Worldandnation/Haitian_pastor_dies_o.shtml
+http://www.sptimes.com/2004/12/03/Action/Next_time__look_befor.shtml
+http://www.sptimes.com/2005/02/03/Action/Failure_to_cancel_mot.shtml
+http://www.sptimes.com/2005/03/06/State/Schools_still_rank_ne.shtml
+http://www.sptimes.com/2005/06/01/State/Teacher_plan_moves_fo.shtml
+http://www.sptimes.com/News/110501/Technology/QA__Net_s_potential_b.shtml
+http://www.sptimes.com/News/50999/Floridian/Boy_wonder.shtml
+http://www.sptimes.com/schools/
+http://www.sptimesrussia.com/archive/times/699/top/t_4458.htm
+http://www.spu.edu/depts/uc/response/winter99/truth.html
+http://www.spu.edu/library/databases/subjects.htm
+http://www.spub.ksu.edu/issues/v099b/su/n153/opn-newt-lewerenz.html
+http://www.spuc.org.uk/lobbying/consultations/donor-information
+http://www.spunk.org/library/writers/makhno/sp001781/chap3.html
+http://www.spunmag.com/article/050605socks
+http://www.spurgeon.org/sermons/0341.htm
+http://www.spurgeon.org/sermons/2449.htm
+http://www.spy.co.uk/Articles/NMC/NielsenProfile/
+http://www.spy.org.uk/ratblog/archives/2003/11/theft_queries_a.html
+http://www.spybusters.com/Great_Seal_Bug.html
+http://www.spychips.com/jointrfid_position_paper.html
+http://www.spymac.com/forums/showthread.php?ppp=10&threadid=147853&c=4
+http://www.spymac.com/weblog/?pageid=244576
+http://www.spymuseum.org/index_exhibits_permanent.asp
+http://www.spywareguide.com/shop/az_detail_B0002UCSKI.html
+http://www.spyworld.com/Covert-Video.htm
+http://www.sqa.org.uk/sqa/servlet/controller?p_service=Content.show&p_applic=CCC&pContentID=4349
+http://www.sql-server-performance.com/query_analysis_tuning.asp
+http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql
+http://www.sqlthing.com/Resources/CallingProcedureFromFunction.html
+http://www.squarefootgardening.com/html/body_latest_news2.html
+http://www.squarefree.com/2003/10/11/false-fire-alarm/
+http://www.squarefree.com/2003/10/page/2/
+http://www.squarelake.com/Five/William-Luvaas.htm
+http://www.squaremeal.co.uk/venues/london/search.php?Sel_ID=69
+http://www.squash.co.yu/resources.php?show=rulesd
+http://www.squashtalk.com/doubles/summer05/news05-5-1.htm
+http://www.squashtalk.com/doubles/summer05/news05-5-2.htm
+http://www.squashtalk.com/html/news/globalgallery6.htm
+http://www.squashtalk.com/html/news/wsfpr346.htm
+http://www.squashtalk.com/kneipp/mar-apr03/report03-09.htm
+http://www.squashtalk.com/melbourne2001/diner3.htm
+http://www.squishedfrog.com/mtblog/archives/2005_01.shtml
+http://www.sr.bham.ac.uk/nam2005/pr17.html
+http://www.srapplications.com/
+http://www.srce.aaen.edu.yu/bilten72.html
+http://www.srcf.ucam.org/~hmw26/join-the-dots/2004/12/11/houseguest/
+http://www.srcf.ucam.org/~jj253/altpros.htm
+http://www.sre.gob.mx/discapacidad/logistics.htm
+http://www.sre.gob.mx/discapacidad/paperblreport.htm
+http://www.sre.gob.mx/discapacidad/principlesfordrafting.htm
+http://www.sreb.org/programs/EdTech/professional/profindex.asp
+http://www.srgc.org.uk/discus/messages/6/6172.html?1107214068
+http://www.srgseniorliving.com/ShermanOaks.htm
+http://www.srh.noaa.gov/ffc/research/finalPP2.htm
+http://www.srh.noaa.gov/mlb/ltgcenter/ltgsafety.html
+http://www.srh.noaa.gov/oun/climate/heavysnow/study.php
+http://www.srh.weather.gov/srh/jetstream/atmos/ll_airweight.htm
+http://www.srhuston.net/mt/000017.html
+http://www.srihc.co.uk/
+http://www.srim.org/
+http://www.sriramakrishnamath.org/magazine/vk/2005/02-2-1.asp
+http://www.srisd.com/2004_testimonials.htm
+http://www.sriwittayapaknam.ac.th/teaching/dresscode.htm
+http://www.srl.org/interviews/world_art.html
+http://www.srmason-sj.org/web/journal-files/Issues/jan03/sizemore.htm
+http://www.sro.org/helpcurrentissue.html
+http://www.sro.org/helpcurrentissuef.html
+http://www.srpf.a.se/forsk/refsum.html
+http://www.srq.qld.gov.au/induction_of_volunteers.cfm
+http://www.srs.fs.usda.gov/econ/personel/cv-bmoul.htm
+http://www.srsc.org.uk/about/aims.asp
+http://www.srsc.org.uk/education/national_strategy/index.asp
+http://www.srsc.org.uk/education/national_strategy/research_strategy_rse.asp
+http://www.srsc.org.uk/education/preschool/gymcards.asp
+http://www.srsc.org.uk/education/secondary/index.asp
+http://www.srsc.org.uk/links/cyclists.asp
+http://www.srsc.org.uk/links/industry.asp
+http://www.srsc.org.uk/publicity/annual_seminar/seminar_2002/speaker_zeedyk.asp
+http://www.srslawfirm.com/news/key/wabc7newyork.htm
+http://www.sru.edu/print/7421.asp
+http://www.srv.net/opt/sunchrt.html
+http://www.srv.net/~csei/history.htm
+http://www.ssa.gov/OP_Home/rulings/ar/04/AR93-01-ar-04.html
+http://www.ssa.gov/OP_Home/rulings/ar/06/AR86-15-ar-06.html
+http://www.ssa.gov/OP_Home/rulings/ssi/02/SSR81-35-ssi-02.html
+http://www.ssa.gov/disability-new-approach/
+http://www.ssa.gov/disability/professionals/bluebook/8.00-Skin-Adult.htm
+http://www.ssa.gov/enews/last.htm
+http://www.ssa.gov/history/fpbiossa.html
+http://www.ssa.gov/history/hfaq.html
+http://www.ssa.gov/history/lbjstmts.html
+http://www.ssa.gov/history/reports/boskinrpt.html
+http://www.ssa.gov/history/reports/schlabach1.html
+http://www.ssa.gov/history/taxationofbenefits.html
+http://www.ssa.gov/history/voluntaryannuities.html
+http://www.ssa.gov/legislation/testimony_051701.html
+http://www.ssa.gov/planners/
+http://www.ssa.gov/policy/docs/progdesc/ssptw/1999/sweden.htm
+http://www.ssc.wisc.edu/cde/datalib/845/cur1.htm
+http://www.ssc.wisc.edu/irp/research/undpovhome.htm
+http://www.ssc.wisc.edu/nsfh/t3sum.htm
+http://www.ssc.wisc.edu/~jpiliavi/357/syllabus2004.htm
+http://www.sscnet.ucla.edu/aasc/classweb/winter02/aas197a/mhilario1.html
+http://www.sscnet.ucla.edu/ioa/labs/computers.html
+http://www.sscnet.ucla.edu/polisci/faculty/anderson/Lewinsky.htm
+http://www.ssda.org.uk/ssda/default.aspx?page=626
+http://www.ssec.wisc.edu/media/highlights2002/highlights2002short.htm
+http://www.ssec.wisc.edu/visitview/tutorial/img6a.html
+http://www.ssec.wisc.edu/visitview/usage.html
+http://www.ssfs.com.au/sc03_news/body2.cfm
+http://www.ssha.org/gender/stanfors.html
+http://www.sshl.org.uk/paulrobesonhouse.asp
+http://www.sshl.org.uk/summer/termsandconditions.htm
+http://www.sshs.org.sg/gl/
+http://www.ssi.gouv.fr/en/confidence/documents/memo-gb.html
+http://www.ssk.co.uk/Business-Bank-Scotland.html
+http://www.sskrplaw.com/publications/031231.html
+http://www.ssn.flinders.edu.au/scanlink/nornotes/vol6/articles/kristina.html
+http://www.ssnet.org/qrtrly/eng/05a/less03.html
+http://www.ssnet.org/qrtrly/eng/05a/less03kjv.html
+http://www.ssnet.org/qrtrly/eng/05a/less03nkjv.html
+http://www.ssonet.com.au/issue.asp?Issue=716
+http://www.ssqq.com/archive/vinlin10.htm
+http://www.ssqq.com/ssqq/jokes.htm
+http://www.ssrc.org/sept11/essays/teaching_resource/tr_building_peace.htm
+http://www.ssrottweilerrescue.org/vioxx?Vioxx=Vioxx&Vioxx=Vioxx&Vioxx=Vioxx
+http://www.sss-mag.com/jobtopics.html
+http://www.sss-mag.com/smith01.html
+http://www.sss.gov/FSregist.htm
+http://www.sss.gov/perfplan_fy2004.html
+http://www.sss.gov/when.htm
+http://www.ssspc.org/ssspc/feature-e.html
+http://www.ssssclub.com/tol2000.htm
+http://www.ssta.org.uk/Archive/Congress2004-motions.htm
+http://www.ssta.sk.ca/research/technology/96-06.htm
+http://www.ssti.org/Digest/2004/041204.htm
+http://www.ssti.org/Digest/2004/071204.htm
+http://www.ssti.org/Digest/2005/012405.htm
+http://www.ssw.com.au/SSW/Standards/Rules/RulestoBetterDeadTime.aspx
+http://www.ssw.umich.edu/trapped/res_sur_questions.html
+http://www.st-andrews.ac.uk/develop/hr/support-advice/policies/poor-performance
+http://www.st-andrews.ac.uk/mecacs/STUDENTS.HTM
+http://www.st-andrews.ac.uk/services/admissions/sssprog.htm
+http://www.st-andrews.ac.uk/~scotparl/history.html
+http://www.st-edmunds.cam.ac.uk/cis/houghton/lecture4.html
+http://www.st-georges.org.uk/aboutkeyfacts.asp
+http://www.st-georges.org.uk/findcar.asp
+http://www.st-hypertext.com/tos/tos-1rev.html
+http://www.st-hypertext.com/tos/tos-2rev.html
+http://www.st-louis-personal-injury-lawyers.com/
+http://www.st-marys.nhs.uk/privatepatients/lindo.htm
+http://www.st-peters.york.sch.uk/history/guyfawkes.htm
+http://www.st-therese.org/Administration/one_vision.htm
+http://www.st.com/stonline/press/magazine/challeng/2ndedi99/chal02.htm
+http://www.st.com/stonline/press/news/year2003/p1267c.htm
+http://www.st.com/stonline/products/families/memories/fl_nor/index_new.htm
+http://www.st.org/?id=4713&pad=15
+http://www.sta.bris.ac.uk/handbook/appendix-glossary.html
+http://www.stabilant.com/appnt41h.htm
+http://www.stabilitypact.org/pages/speeches/detail.asp?y=2003&p=7
+http://www.stacistallings.com/writingreadingspeakingtalking.htm
+http://www.staff.city.ac.uk/~ra826/group5/mg/mgindex.html
+http://www.staff.city.ac.uk/~ra826/group5/mg/printversion.html
+http://www.staff.ncl.ac.uk/david.harvey/AEF372/AEF372.2.html
+http://www.stafffinders.co.uk/
+http://www.staffordmall.com/mallbsl.htm
+http://www.stage-directions.com/backissues/mar01/allisbut_toys.shtml
+http://www.stage-directions.com/backissues/oct00/managedcare.shtml
+http://www.stageleft.com.au/blakes7/ph2mind.html
+http://www.stakes.fi/tidecong/723garvi.htm
+http://www.stalbansobserver.co.uk/display.var.563477.0.tenants_flee_homes_hit_by_arsonist.php
+http://www.stalbert.cruiseshipcenters.ca/Page.aspx-URL-CruisingWithKids.htm
+http://www.stamiweber.no/hefa/whp/6_fitfor.htm
+http://www.stammeringcentre.org/teenagers/articles/whathappens.html
+http://www.stampington.com/html/golden.html
+http://www.stampsonstamps.org/
+http://www.standardbank.co.za/SBIC/Frontdoor_02_02/0,2454,3447_7351181_0,00.html
+http://www.standardbank.co.za/SBIC/Frontdoor_02_02/0,2454,3447_9212_0,00.html
+http://www.standardbank.co.za/SBIC/Frontdoor_02_02/0,2454,7264092_7277831_0,00.html
+http://www.standarddeviants.com/1-800-238-9669/cerebellum.home
+http://www.standardfederalbank.com/privacy/reporting.html
+http://www.standards.dfes.gov.uk/forums/showflat.php?Cat=&Number=314&Main=314
+http://www.standards.dfes.gov.uk/keystage3/respub/mathsframework/maths/across_curriculum/
+http://www.standards.dfes.gov.uk/literacy/prof_dev/articles_archive/659925/?leaf=0
+http://www.standards.dfes.gov.uk/primary/casestudies/literacy/629485/654861/
+http://www.standards.dfes.gov.uk/primary/casestudies/literacy/boys_achievement/1094329/
+http://www.standards.dfes.gov.uk/primary/features/literacy/659925/
+http://www.standards.dfes.gov.uk/primary/publications/literacy/nls_framework/glossary/
+http://www.standards.dfes.gov.uk/research/digests/FriNov11552362002/?view=amzRsText
+http://www.standards.dfes.gov.uk/schemes2/geography/geo17/?view=list&column=outcome
+http://www.standards.dfes.gov.uk/schemes2/secondary_mff/mff13/?view=list&column=activity
+http://www.standards.dfes.gov.uk/schemes2/secondary_science/sci09a/09aq2?view=get
+http://www.standards.dfes.gov.uk/schemes2/secondary_science/sci09a/?view=list&column=activity
+http://www.standards.dfes.gov.uk/seu/policy/
+http://www.standardsasap.org/press2.htm
+http://www.standuptoracism.com.au/default.asp?nc=3535&id=168
+http://www.standuptoracism.com.au/default.asp?nc=7329&id=340
+http://www.stanford.edu/dept/HPS/Nanodreams/DeepSafari.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradapply/assignproc.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradapply/faq.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradapply0405/faq.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradresults/assigned.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradresults/chance.html
+http://www.stanford.edu/dept/hds/has/applying/grad/gradresults/lottery/chance.html
+http://www.stanford.edu/dept/hds/has/applying/summer/smrapply/src.html
+http://www.stanford.edu/dept/hds/has/applying/walkinguide.html
+http://www.stanford.edu/dept/hds/has/drawdoc/pri.html
+http://www.stanford.edu/dept/itss/services/imap/details.html
+http://www.stanford.edu/dept/news/pr/03/ogata64.html
+http://www.stanford.edu/dept/news/pr/98/981104wagegap.html
+http://www.stanford.edu/dept/news/report/news/april19/mri-419.html
+http://www.stanford.edu/dept/news/report/news/february16/internetsurvey-216.html
+http://www.stanford.edu/dept/news/report/news/january13/nie113.html
+http://www.stanford.edu/dept/undergrad/uac/preprof/law_application.htm
+http://www.stanford.edu/group/King/publications/papers/vol1/440500-The_Negro_and_the_Constitution.htm
+http://www.stanford.edu/group/King/publications/papers/vol3/551205.004-MIA_Mass_Meeting_at_Holt_Street_Baptist_Church.htm
+http://www.stanford.edu/group/King/publications/papers/vol4/570207.012-Announcement_of_New_Orleans_Conference.htm
+http://www.stanford.edu/group/SHR/4-2/text/fetzer.html
+http://www.stanford.edu/group/SHR/4-2/text/hofstadter.html
+http://www.stanford.edu/group/ews/degreqmsefmh2.html
+http://www.stanford.edu/group/las/resources/volunteer_work.html
+http://www.stanford.edu/group/pawender/html/apop.html
+http://www.stanford.edu/group/scip/sirp/NAICS.html
+http://www.stanford.edu/group/sjir/3.1.09_ratliff.html
+http://www.stanford.edu/group/sjir/3.2.07_meyer.html
+http://www.stanford.edu/group/spa/admit/sthought.html
+http://www.stanford.edu/home/stanford/facts/chron.html
+http://www.stanford.edu/home/stanford/history/leader.html
+http://www.stanford.edu/home/statistics/
+http://www.stanford.edu/news/report/news/may17/powers-517-a.html
+http://www.stanford.edu/news/report/news/november4/wagegap114-a.html
+http://www.stanford.edu/~dement/equip.html
+http://www.stanford.edu/~dement/silvercelebration.html
+http://www.stanford.edu/~gohogs/feland_CV.htm
+http://www.stanford.edu/~hakuta/E_CLAD/Course3/groppwork_case.htm
+http://www.stanford.edu/~hakuta/racial_dynamics/News/stanford%20report.htm
+http://www.stanford.edu/~joboaler/uk.html
+http://www.stanford.edu/~meehan/donnellyr/gerald.html
+http://www.stanford.edu/~wfsharpe/art/djam/djam.htm
+http://www.stanford.edu/~wfsharpe/mia/int/mia_int3.htm
+http://www.stanford.edu/~wfsharpe/mia/prc/mia_prc5.htm
+http://www.stanford.edu/~yesavage/GDS.html
+http://www.stanfordalumni.org/news/magazine/1998/mayjun/articles/doctors_of_invention.html
+http://www.stanfordalumni.org/news/magazine/2002/julaug/features/anthro.html
+http://www.stanfordalumni.org/news/magazine/2002/mayjun/classnotes/obituaries.html
+http://www.stanfordalumni.org/news/magazine/2004/mayjun/farm/news/journals.html
+http://www.stanfordalumni.org/news/magazine/2004/sepoct/features/car.html
+http://www.stanfordalumni.org/news/magazine/2005/janfeb/show/steinbeck.html
+http://www.stanfordaustin.org/privacy.asp
+http://www.stanfordhospital.com/clinicsmedServices/COE/heart/heartTransplant/frequentlyAskedQuestions.html
+http://www.stanfordhospital.com/healthLib/greystone/bariatric/preventingObesity.html
+http://www.stanfordhospital.com/healthLib/greystone/heartCenter/heartCareNews/heartCare_0408hc.html
+http://www.stanfordhospital.com/newsEvents/heartCareNews/
+http://www.stanfordreview.org/Archive/Volume_XXXIV/Issue_9/Opinions/Opinions14.shtml
+http://www.stangrist.com/Humboldt.htm
+http://www.staplesart.com/about.html
+http://www.star4cast.com/political_display.asp?ID=59
+http://www.starbounding.com/08_home_exercise.htm
+http://www.starcitygames.com/php/news/expandnews.php?Article=1765
+http://www.stare.com/1997/week21.html
+http://www.stare.com/2000/transition19.html
+http://www.starglaze-windows.co.uk/
+http://www.starhawk.org/activism/activism-writings/whywashington.html
+http://www.starisland.org/docs/000110board.html
+http://www.stark.kent.edu/writing/review%201998/laney.htm
+http://www.starland.com/Activities/SF03_Activities.htm
+http://www.starnine.com/
+http://www.starpolish.com/news/interviews/MacKayeWatt2/index.asp
+http://www.starquest.com/Supportdocs/techSP/StarSQL_and_StarPipe.html
+http://www.starsnsites.com/voice/help/acting_classes.html
+http://www.starstore.com/acatalog/
+http://www.starstore.com/acatalog/Starstore_Catalogue_DRAGON_MILITARY_FIGURES_1094.html
+http://www.starstreak.net/blog/
+http://www.startersorders.com/sopro.htm
+http://www.startrek.com/startrek/view/features/specials/article/3783.html
+http://www.startribune.com/health/
+http://www.startribune.com/stories/131/4970789.html
+http://www.startribune.com/stories/1389/21718-2.html
+http://www.startribune.com/stories/1519/5211218-2.html
+http://www.startribune.com/stories/1694/2257932.html
+http://www.startribune.com/stories/389/5101240.html
+http://www.startribune.com/stories/401/3720482.html
+http://www.startribune.com/stories/412/5068934.html
+http://www.startribune.com/stories/432/4970789.html
+http://www.startribune.com/stories/535/5193016.html
+http://www.startribune.com/stories/611/4909888.html
+http://www.startupjournal.com/runbusiness/taxadvice/20040831-miller.html
+http://www.startups.co.uk/YSYyaN1ojdegVw.html
+http://www.startups.co.uk/YXw5QGloGiKUjw.html
+http://www.starvingmind.net/detail/0142000280.html
+http://www.starwars.com/databank/character/yoda/
+http://www.starwars.com/eu/lit/novel/f20050125/
+http://www.starwarschicks.com/media/collectibles.shtml
+http://www.starwoodhotels.com/fourpoints/about/history.html
+http://www.starwoodhotels.com/preferredguest/
+http://www.starz.com/se/starz/hdtv.html
+http://www.stat.go.jp/english/data/shakai/2001/jikan/yoyakuj.htm
+http://www.stat.lsa.umich.edu/courses/courselist.html
+http://www.stat.ohio-state.edu/dept/spotlight.html
+http://www.stat.psu.edu/news/conferences/ccc_conference/main.html
+http://www.stat.umn.edu/geyer/8701/parm/
+http://www.statcan.ca/english/research/11-621-MIE/11-621-MIE2004019.htm
+http://www.statcan.ca/english/survey/household/security/sfs2005.htm
+http://www.state.co.us/gov_dir/leg_dir/lcs/fn/fnote98/sb019.htm
+http://www.state.co.us/gov_dir/leg_dir/lcsstaff/2003/research/03sunsetproc.htm
+http://www.state.co.us/gov_dir/leg_dir/lcsstaff/2005/research/05sunsetproc.htm
+http://www.state.co.us/oed/news/050120tour.html
+http://www.state.co.us/oemc/publications/archive/sgfinal/
+http://www.state.ct.us/csec/general/
+http://www.state.ct.us/dcf/Good_News/staying.htm
+http://www.state.ct.us/foi/Meeting_Agendas_and_Minutes/Minutes/2004_Minutes/20041027MRM.htm
+http://www.state.ct.us/foi/What's_New/What's%20New%20Content/2005_foi_conf_prog.htm
+http://www.state.ga.us/cgi-bin/pub/ocode/ocgsearch?number=4-11&format=full
+http://www.state.gov/
+http://www.state.gov/e/eb/ifd/2005/42035.htm
+http://www.state.gov/e/eb/rls/othr/8021.htm
+http://www.state.gov/e/eb/rls/rm/2002/11813.htm
+http://www.state.gov/e/rls/rm/2003/23797.htm
+http://www.state.gov/g/drl/rls/hrrpt/2003/27768.htm
+http://www.state.gov/g/drl/rls/hrrpt/2003/27773.htm
+http://www.state.gov/g/drl/rls/hrrpt/2004/41645.htm
+http://www.state.gov/g/drl/rls/hrrpt/2004/41737.htm
+http://www.state.gov/g/drl/rls/rm/2001/6378.htm
+http://www.state.gov/g/drl/rls/spbr/29867.htm
+http://www.state.gov/g/drl/rls/spbr/42805.htm
+http://www.state.gov/g/oes/rls/rm/2002/12164.htm
+http://www.state.gov/g/oes/rls/rm/2002/14540.htm
+http://www.state.gov/g/oes/rls/rm/2004/32254.htm
+http://www.state.gov/g/rls/rm/2004/33685.htm
+http://www.state.gov/g/rls/rm/2005/46358.htm
+http://www.state.gov/m/a/als/qtrpt/2002/9248.htm
+http://www.state.gov/m/a/als/qtrpt/2003/18799.htm
+http://www.state.gov/m/dghr/flo/9859.htm
+http://www.state.gov/m/dghr/flo/rsrcs/pubs/2042.htm
+http://www.state.gov/m/ds/rls/rpt/19773.htm
+http://www.state.gov/m/rm/rls/dosstrat/2004/23506.htm
+http://www.state.gov/p/2005/45146.htm
+http://www.state.gov/p/eap/rls/rm/2002/8581.htm
+http://www.state.gov/p/eap/rls/rm/2005/46935.htm
+http://www.state.gov/p/eap/rls/rm/2005/47334.htm
+http://www.state.gov/p/eur/rls/rm/2003/19407.htm
+http://www.state.gov/p/io/rls/rm/2003/20538.htm
+http://www.state.gov/p/nea/rls/20573.htm
+http://www.state.gov/p/sa/rls/fs/33577.htm
+http://www.state.gov/p/sa/rls/rm/2005/40739.htm
+http://www.state.gov/p/sa/rls/rm/2005/42330.htm
+http://www.state.gov/p/sa/rls/rm/22296.htm
+http://www.state.gov/p/sa/rls/rm/29230.htm
+http://www.state.gov/r/pa/ei/bgn/2859.htm
+http://www.state.gov/r/pa/ei/bgn/3180.htm
+http://www.state.gov/r/pa/ei/bgn/35855.htm
+http://www.state.gov/r/pa/ei/bgn/3997.htm
+http://www.state.gov/r/pa/ho/adcom/mtgnts/11697.htm
+http://www.state.gov/r/pa/ho/adcom/mtgnts/18004.htm
+http://www.state.gov/r/pa/ho/frus/kennedyjf/xxv/6029.htm
+http://www.state.gov/r/pa/ho/frus/nixon/iv/15230.htm
+http://www.state.gov/r/pa/prs/dpb/2003/24154.htm
+http://www.state.gov/r/pa/prs/dpb/2005/40755.htm
+http://www.state.gov/r/pa/prs/dpb/2005/41413.htm
+http://www.state.gov/r/pa/prs/dpb/2005/42749.htm
+http://www.state.gov/r/pa/prs/dpb/2005/42962.htm
+http://www.state.gov/r/pa/prs/dpb/2005/43013.htm
+http://www.state.gov/r/pa/prs/dpb/2005/47006.htm
+http://www.state.gov/r/us/15912.htm
+http://www.state.gov/s/ct/rls/pgtrpt/2000/2450.htm
+http://www.state.gov/s/ct/rls/pgtrpt/2002/html/19992.htm
+http://www.state.gov/s/ct/rls/pgtrpt/2003/31759.htm
+http://www.state.gov/s/d/former/armitage/remarks/2001/5198.htm
+http://www.state.gov/s/d/former/armitage/remarks/2002/14640.htm
+http://www.state.gov/s/d/rm/44052.htm
+http://www.state.gov/s/p/rem/36915.htm
+http://www.state.gov/secretary/former/powell/remarks/2001/1000.htm
+http://www.state.gov/secretary/former/powell/remarks/2001/2659.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/12435.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/14087.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/14494.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/14602.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/14980.htm
+http://www.state.gov/secretary/former/powell/remarks/2002/9940.htm
+http://www.state.gov/secretary/former/powell/remarks/2003/21970.htm
+http://www.state.gov/secretary/former/powell/remarks/2005/40800.htm
+http://www.state.gov/secretary/former/powell/remarks/30558.htm
+http://www.state.gov/secretary/former/powell/remarks/32931.htm
+http://www.state.gov/secretary/former/powell/remarks/40145.htm
+http://www.state.gov/secretary/rm/2005/41834.htm
+http://www.state.gov/secretary/rm/2005/41973.htm
+http://www.state.gov/secretary/rm/2005/42072.htm
+http://www.state.gov/secretary/rm/2005/43345.htm
+http://www.state.gov/secretary/rm/2005/45131.htm
+http://www.state.gov/secretary/rm/2005/46826.htm
+http://www.state.gov/t/pm/rls/rm/39978.htm
+http://www.state.gov/t/us/rm/8889.htm
+http://www.state.gov/t/vc/30587.htm
+http://www.state.gov/t/vc/rls/rm/2004/39361.htm
+http://www.state.hi.us/lrb/rpts95/petro/petappi.html
+http://www.state.hi.us/sfca/hawaiistateartmuseum.htm
+http://www.state.ia.us/das/directors_office/wall_of_fame.html
+http://www.state.ia.us/tax/educate/78573.html
+http://www.state.ia.us/tax/educate/78601.html
+http://www.state.il.us/hpa/Blackhawk.htm
+http://www.state.il.us/hpa/hs/Blackhawk.htm
+http://www.state.in.us/isp/memoriam/
+http://www.state.me.us/legis/ofpr/billsumm.htm
+http://www.state.mi.us/dmb/apps/oop/purchasing_user.asp?frm=attachments&cmd=view&itb_id=3202&att_id=4
+http://www.state.mn.us/
+http://www.state.nd.us/arts/resources/accessability.htm
+http://www.state.nd.us/hist/sakakawea.htm
+http://www.state.nd.us/ndins/company/details.asp?ID=178
+http://www.state.nd.us/sec/electvote/voting/vote-history.html
+http://www.state.nj.us/dca/dhcr/msnj_dri.shtml
+http://www.state.nj.us/dep/fgw/artbonds.htm
+http://www.state.nj.us/dep/parksandforests/parks/round.html
+http://www.state.nj.us/dobi/wysk1.htm
+http://www.state.nj.us/lps/ca/adopt.htm
+http://www.state.nj.us/lps/ca/adoption/adopt.htm
+http://www.state.nj.us/lps/ca/proposal/cosmopro.htm
+http://www.state.nj.us/lps/ca/proposal/mar2pro.htm
+http://www.state.nj.us/lps/ca/proposal/proposal.htm
+http://www.state.nj.us/lps/racing/about.html
+http://www.state.nj.us/personnel/testimonials/HRDI.htm
+http://www.state.ny.us/governor/low_man_speec04.html
+http://www.state.sc.us/dmh/bryan/websczaf.htm
+http://www.state.sd.us/deca/DDN4Learning/ThemeUnits/west/cs.htm
+http://www.state.sd.us/dol/dolui/tax/TX_rates.htm
+http://www.state.sd.us/social/EBT/STOFR.htm
+http://www.state.tn.us/education/nclb04ltrtosimon
+http://www.state.vt.us/educ/new/html/mainemploy.html
+http://www.state.vt.us/vlrb/00-46.htm
+http://www.state.vt.us/vlrb/02-60.htm
+http://www.state.vt.us/vlrb/02-61.htm
+http://www.state.vt.us/vlrb/03-47.htm
+http://www.state.vt.us/vlrb/03-54.htm
+http://www.state.vt.us/vlrb/04-42.htm
+http://www.statebankofindia.com/contactus/training.asp
+http://www.statefarm.com/consumer/burgbroc.htm
+http://www.statefarm.com/consumer/vhouse/articles/sumpump.htm
+http://www.statefarm.com/mutual/disclosure.asp
+http://www.statehouse.go.ug/news.detail.php?newsId=434&category=News%20Release
+http://www.statehouse.go.ug/news.detail.php?newsId=452&category=News%20Release
+http://www.statehousereport.com/columns/04.1024.economy.htm
+http://www.stateofthemedia.org/2005/narrative_radio_newsinvestment.asp?cat=6&media=8
+http://www.stateofthenewsmedia.org/narrative_ethnicalternative_ethnic.asp?media=9
+http://www.statepress.com/issues/2001/10/19/
+http://www.statesforbiomed.org/facts.html
+http://www.statesman.com/news/content/shared/tx/legislature/stories/06/2hhs.html
+http://www.statewatch.org/
+http://www.stationfive.com/movies/Scripts/Hannah_and_Her_Sisters.txt
+http://www.statistics.gov.uk/CCI/nscl.asp?ID=6614
+http://www.statistics.gov.uk/CCI/nscl.asp?ID=6677
+http://www.statistics.gov.uk/CCI/nscl.asp?ID=7501&RT=16&PG=3
+http://www.statistics.gov.uk/cci/nscl.asp?ID=6614
+http://www.statistics.gov.uk/cci/nscl.asp?ID=6627
+http://www.statistics.gov.uk/cci/nscl.asp?ID=7696
+http://www.statistics.gov.uk/cci/nscl.asp?id=6652
+http://www.statistics.gov.uk/cci/nscl.asp?id=6656
+http://www.statistics.gov.uk/cci/nscl.asp?id=7136
+http://www.statistics.gov.uk/cci/nscl.asp?id=7696
+http://www.statistics.gov.uk/census2001/2001_ciw_report.asp
+http://www.statistics.gov.uk/statbase/ssdataset.asp?vlnk=5939&More=Y
+http://www.statit.com/partners/opportunities.htm
+http://www.statoil.ie/rom/dub00107.nsf/docs/Drilling_Begins
+http://www.statoil.ie/statoilie/svg02976.nsf/0/f712b017efc1867080256c55004a4935?OpenDocument
+http://www.statravel.co.uk/c_aboutus/branch.asp?affID=statravel&branchID=edinburgh
+http://www.stats.gov.cn/english/newrelease/statisticalreports/t20050228_402231957.htm
+http://www.stats.govt.nz/quick-facts/people/age-sex-and-ethnicity-diversity.htm
+http://www.stats.govt.nz/schools-corner/curr-by-level/level3-4tchers/fig-facts-tchers.htm
+http://www.stats.org/record.jsp?type=news&ID=173
+http://www.statsoft.com/textbook/glosr.html
+http://www.statsoft.com/textbook/glosu.html
+http://www.stayingalive.ca/kids_zone.html
+http://www.stayinginshape.com/3osfcorp/libv/p39.shtml
+http://www.stayingput.org.uk/paying.html
+http://www.staylace.com/textarea/originalfiction/@@tgfsfg_1.htm
+http://www.staynavy.navy.mil/counselors_resources/content/Newsletter_Archives/JuneLetterTwo.asp
+http://www.staynavy.navy.mil/counselors_resources/content/Newsletter_Archives/LetterOne.asp
+http://www.staynavy.navy.mil/enlisted/content/pay_and_benefits/pay.asp
+http://www.staynavy.navy.mil/officer/content/pay_and_benefits/pay.asp
+http://www.staynovascotia.ca/
+http://www.stayonline.net/pr/PRvAc1iN.html
+http://www.stazsoftware.com/yspeak/support.php
+http://www.stbartztravel.com/disclaimer.asp
+http://www.stbedes.ngfl.ac.uk/nws0703.htm
+http://www.stbernards.org/newslet/no28_p7a.html
+http://www.stbride.org/conference2002/TypefaceClassification.html
+http://www.stbride.org/conference2002/ViceCards.html
+http://www.stc-carolina.org/competitions/techart/index.shtml
+http://www.stc-phoenix.com/Rough%20Draft_Current/Jan04_files/changework_jan04.htm
+http://www.stcath-hosp.org/proam/sponsor_oppt.htm
+http://www.stcatherines.net.au/School/ELC.asp
+http://www.stcatz.ox.ac.uk/Studying_at_St_Catherines/Graduates/Accommodation.htm
+http://www.stchristopher-ottilie.org/madonna_heights.htm
+http://www.stclaircollege.ca/campus/thames/daycare.html
+http://www.stcloudstate.edu/studenthandbook/facilities/default.asp
+http://www.stcsig.org/usability/newsletter/0310-motivation.html
+http://www.stcwvc.org/competition/competition_art.html
+http://www.stcynic.com/blog/archives/2005/06/victory_in_gull.php
+http://www.stcynic.com/blog/archives/intelligent_design/gull_lake_situation/index.php
+http://www.stealthencrypt.com/koolkids/st_ha01.html
+http://www.stealthpacs.org/about/page.cfm?pageid=7
+http://www.steamboats.com/engineroom3.html
+http://www.steampunk.com/sfch/writing/ckilian/
+http://www.steddy.com/tekst_video3_eng.htm
+http://www.stedwards.edu/educ/minus/read4343/rubrics/observation_grading.htm
+http://www.steel.org/learning/glossary/glossary.htm
+http://www.steelphoenix.com/projects/Crystal/bios.html
+http://www.steelydan.com/dennys3.html
+http://www.steelypips.org/library/BigU.html
+http://www.steelypips.org/principles/2005_05_08_principlearchive.php
+http://www.steelypips.org/weblog/
+http://www.steg.com/jan2000.html
+http://www.stegbar.com.au/products/windows_and_doors/timber/
+http://www.steidlmayer.com/
+http://www.steigrad.com/cat/vandervoort01.html
+http://www.steigrad.com/cat/vandervoort02.html
+http://www.steinitzpuzzlers.com/first_urn.html
+http://www.steintravel.ie/guides/destination4.asp
+http://www.stellabooks.com/cats/sonia/Dogs---Terriers-16-4-2005.htm
+http://www.stellamarrs.com/about/
+http://www.stellar-database.com/non-ISDB/LogansRun.html
+http://www.stellarubinantiques.com/catalog/Archives:Decorative_Art60.html
+http://www.stellenberg.org.za/exchange_programme.htm
+http://www.stelpipe.com/glossary.html
+http://www.stemproject.co.uk/kingalfreds03/03/glossary.html
+http://www.stempublishing.com/authors/wolston/SPIRIT02.html
+http://www.stenomuseet.dk/person/hb.ukref.htm
+http://www.stepforward.net/OnLineHelp/A1P2b.html
+http://www.stephen-knapp.com/
+http://www.stephen-knapp.com/why_understand_the_creation_of_the_universe.htm
+http://www.stephenbates.com/yellowdoggereldemocrat/doggerel_200501b.htm
+http://www.stephenfried.com/gia/firstch.html
+http://www.stephennewton.com/2004/11/holidays-walking-painting-writing-and.html
+http://www.stephenpollard.net/002060.html
+http://www.stephiedavis.com/putting_boys_on_the_ledge.html
+http://www.stepintohistory.com/states/NJ/Allaire_Village.htm
+http://www.stepstone.com/ir/finance_detail.cfm?aid=153
+http://www.steptwo.com.au/papers/cardsorting/
+http://www.steptwo.com.au/papers/kmc_content/
+http://www.steptwo.com.au/papers/kmc_intranetvsweb/
+http://www.steptwo.com.au/seminars/cms/
+http://www.stereophile.com/
+http://www.stereosociety.com/body_foursides.html
+http://www.stereotimes.com/amp041805.shtm
+http://www.stereotimes.com/cable121604.shtm
+http://www.steria.co.uk/index.asp?itemid=3161
+http://www.sterlingbancorp.com/trust/investmentmgt.cfm
+http://www.sterlinghoffman.com/newsletter/articles/article77.html
+http://www.stern.nyu.edu/Sternbusiness/fall_winter_2000/silicon.html
+http://www.stern.nyu.edu/Sternbusiness/fall_winter_2003/justsayingno.html
+http://www.stern.nyu.edu/Sternbusiness/spring_summer_2005/press.html
+http://www.stetson.edu/~psteeves/relnews/0008d.html
+http://www.stetson.edu/~rhansen/advertising_exercises.html
+http://www.steve.gb.com/rants/esperanto.html
+http://www.steveackerman.net/spiritualfood/try_putting.html
+http://www.steveajao.com/messages.htm
+http://www.steveearle.net/lyrics/ly-guita.php
+http://www.steveellis.co.uk/reccol_loveaffair.html
+http://www.stevefossett.com/html/press_archives/isle_Wight_09nov01.html
+http://www.stevegoz.com/
+http://www.stevemcconnell.com/rdkind.htm
+http://www.stevenberlinjohnson.com/movabletype/archives/000211.html
+http://www.stevenmsmith.com/weblog/
+http://www.stevens-tech.edu/ocs/successful.htm
+http://www.stevenyoung.co.nz/chinesevoice/ChinConf/S5.html
+http://www.stevepavlina.com/blog/2004/11/why-pursue-personal-growth-at-all/
+http://www.stevepavlina.com/blog/2004/12/knowing-when-to-break-a-commitment/
+http://www.stevepavlina.com/blog/2005/01/what-is-your-career/
+http://www.stevepavlina.com/blog/2005/03/hard-work/
+http://www.stevepavlina.com/blog/2005/04/30-days-to-success/
+http://www.stevepavlina.com/blog/2005/06/working-in-unusual-places/
+http://www.stevespanglerscience.com/index.php
+http://www.steveverdon.com/archives/2004_04.html
+http://www.steviedavies.com/sd_f_element_review.html
+http://www.stewartstewart.com/order/
+http://www.stf.sk.ca/teaching_res/library/teach_mat_centre/tmc/p11425/p11425.htm
+http://www.stfm.org/fmhub/fm1997/may1997/abstract.html
+http://www.stgambit.gda.pl/
+http://www.stgeorge.com.au/about/directors/default.asp?orc=about
+http://www.stgeorge.com.au/about/investor/governance/risk_charter.asp?orc=investor
+http://www.stgeorge.com.au/about/your_security/default.asp?orc=personal
+http://www.sthct.nhs.uk/depts/mentalHealth/MentalHealth_LD.htm
+http://www.sthelenatourism.com/FF-faqcenter.htm
+http://www.sthildas.qld.edu.au/curriculum/SSLOTEGer10.htm
+http://www.stibc.org/links.php
+http://www.sticklers.org/sip/sipnws13.html
+http://www.stickmanbangkok.com/Reader/reader1191.htm
+http://www.stickmanbangkok.com/reader/reader1024.html
+http://www.stickmanbangkok.com/reader/reader584.html
+http://www.stickmanbangkok.com/reader/reader94.html
+http://www.stickyminds.com/BetterSoftware/magazine.asp?fn=cifea&id=55
+http://www.stickyminds.com/se/S3372.asp
+http://www.stickyminds.com/se/S6404.asp
+http://www.stickyminds.com/se/S7294.asp
+http://www.stiftung-evz.de/fremdsp/englisch/merkblatt_en.html
+http://www.stikage.com/guide_carabiners.htm
+http://www.stillhq.com/planet-aus-dotnet/
+http://www.stingraysoccer.com/coaching_tips.html
+http://www.stinky.com/wtc/stories5.html
+http://www.stirling-enterprise.co.uk/news.htm
+http://www.stjames.finchampstead.co.uk/worship/churchguide.html
+http://www.stjamescareers.ie/jobs/Listings.asp?jobFile=jb561.asp
+http://www.stjamescareers.ie/jobs/Listings.asp?jobFile=jb565.asp
+http://www.stjamescareers.ie/jobs/Listings.asp?jobFile=jb583.asp
+http://www.stjameschurchsydney.org.au/Clergy/Sermons/AS/010603.asp
+http://www.stjamesmercy.org/cardiacrehab.html
+http://www.stjamesmercy.org/inthenews.html
+http://www.stjamespullman.org/Sermon.htm
+http://www.stjoan-center.com/Trials/sec21.html
+http://www.stjoenews-press.com/main.asp?FromHome=1&TypeID=1&ArticleID=61199&SectionID=152&SubSectionID=423
+http://www.stjoenews-press.com/main.asp?SectionID=152&SubSectionID=423&ArticleID=61199&TM=10838.22
+http://www.stjoenews-press.com/main.asp?SectionID=152&SubSectionID=423&ArticleID=61199&TM=51239.53
+http://www.stjoenews-press.com/main.asp?SectionID=152&SubSectionID=423&ArticleID=61199&TM=8581.017
+http://www.stjohnks.net/santafetrail/research/forthaysfortdodgeroad01.html
+http://www.stjohnparish.com/lakemaurepas/aboutus.htm
+http://www.stjohns.ca/cityhall/councilminutesdetail.jsp?id=122
+http://www.stjude.org/media/0,2561,453_2137_5922,00.html
+http://www.stlblues.net/pete_bankheadpleaseaccept.htm
+http://www.stlconfluence.org/
+http://www.stleonardshospice.org.uk/news67.html
+http://www.stlimc.org/
+http://www.stlouisfed.org/publications/re/2005/b/pages/appearances.html
+http://www.stltoday.com/stltoday/business/stories.nsf/0/78D510128666666C86256F960014A9D2?OpenDocument&Headline=Microsoft+will+restrict+updates+on+security&tetl=1
+http://www.stltoday.com/stltoday/lifestyle/stories.nsf/travel/story/C7120DBF9EF807D2862570150004A11A?OpenDocument
+http://www.stltoday.com/stltoday/neighborhoods/stories.nsf/0/f2558b58aeb41e2786256fe8004a862e?OpenDocument&Highlight=2,%22williams%22%20AND%20%22ebay%22&Click=
+http://www.stltoday.com/stltoday/neighborhoods/stories.nsf/news/story/F2558B58AEB41E2786256FE8004A862E?OpenDocument&highlight=2,%22williams%22+AND+%22ebay%22
+http://www.stlucia.gov.lc/primeminister/budgetaddresses/budgetaddress199899.htm
+http://www.stlukeseye.com/Conditions/Fuchs.asp
+http://www.stm-assoc.org/annualreport/10committee.php
+http://www.stmadsophie.org/HowTo/ReturnToChurch.htm
+http://www.stmaryorthodoxchurch.org/orthodoxy/articles/2004-hughes-sin.php
+http://www.stmarys.kzn.school.za/news.htm
+http://www.stmatthew-ucc.org/sermon-losingweight.htm
+http://www.stmatthews.org.nz/s085.htm
+http://www.stmatthews.org.nz/smaca086.htm
+http://www.stmoroky.com/reviews/books/teadrgn.htm
+http://www.stnews.org/calendar.html
+http://www.stock-channel.net/stock-board/archive/index.php3/t-1770.html
+http://www.stockbrokers.barclays.co.uk/content/home/message_centre.htm?usecase=messagecentre
+http://www.stockcarracing.com/thehistoryof/14460/
+http://www.stockcarracing.com/thehistoryof/32379/
+http://www.stockcarracing.com/thehistoryof/60018/
+http://www.stockcharts.com/education/IndicatorAnalysis/indic_Bbands.html
+http://www.stockholmtown.com/templates/Kartena___9855__EN.aspx?pageId=10167&type=1
+http://www.stockingshq.com/articles/culture/embarrassing01.htm
+http://www.stockpatrol.com/article/key/u_%20Livestar6
+http://www.stoessel.ch/cambodia3.htm
+http://www.stolaf.edu/catalog/academicprogram/music.html
+http://www.stolaf.edu/cll/travel/europe/greatbritainitin.html
+http://www.stolaf.edu/people/leming/soc260fam/news/April_1.html
+http://www.stompproject.org/staff.asp
+http://www.stone.com/dev/SDTableView/ReordingTableView.html
+http://www.stonecaretechniques.com/38_m.htm
+http://www.stonecottage.com/josh/
+http://www.stonehenge.com/merlyn/LinuxMag/col42.html
+http://www.stonehenge.com/merlyn/WebTechniques/col07.html
+http://www.stonehenge.com/merlyn/WebTechniques/col55.html
+http://www.stonehill.edu/compsci/ShaisJournal/Andrea2.htm
+http://www.stonehill.edu/srs/rules.htm
+http://www.stonelantern.com/bonsaitodaybackissues.html
+http://www.stonesrivertrading.com/dug_confederate_buttons.htm
+http://www.stonetablesoftware.com/quotes.html
+http://www.stonetechpro.com/stonecare/idx/22/075/article/Heavy-Duty-Stone-Sealer.html
+http://www.stonetechpro.com/stonecare/idx/22/102/article/Heavy-Duty-Exterior-Stone--Masonry-Sealer.html
+http://www.stonetechpro.com/stonecare/idx/22/109/article/KlenzAll-Heavy-Duty-Stone--Tile-Cleaner.html
+http://www.stonetechpro.com/stonecare/idx/22/116/article/Heavy-Duty-Coating-Stripper.html
+http://www.stonetechpro.com/stonecare/idx/5/075/Product-Usage-Instructions/article/Heavy-Duty-Stone-Sealer.html
+http://www.stonewallrevisited.com/pages/michaelr.html
+http://www.stonnington.vic.gov.au/backyard/parking/7840
+http://www.stonyfield.com/MT-STATIC/mt-comments.cgi?entry_id=414
+http://www.stonyfield.com/WebLogarchives/CreatingHealthyKids/2004_05.html
+http://www.stonyfield.com/Wellness/MooslettersDisplay.cfm?moos_id=16
+http://www.stopdesign.com/log/2005/01/31/msn-goes-css.html
+http://www.stopecg.org/default.htm
+http://www.stopftaa.org/
+http://www.stophairlossnow.co.uk/Rogaine_for_Women4.htm
+http://www.stopmessinabout.co.uk/CarOn-Art-PR2.htm
+http://www.stopnader.com/news.asp?NewsID=47
+http://www.stoptheftaa.org/artman/publish/printer_93.shtml
+http://www.stopthehogs.com/research/ten_reasons.htm
+http://www.stopthephonetax.com/whyoppose/hightax.htm
+http://www.stopwar.org.uk/cd.asp
+http://www.storagebysony.com/OEM/categories/categorymain.asp?id=7
+http://www.storagebysony.com/categories/categorymain.asp?id=7
+http://www.storagepipeline.com/story/showArticle.jhtml?articleID=13100964
+http://www.storagetek.co.uk/about/press/291104.html
+http://www.storefrontdemme.com/marysteenburgen.html
+http://www.storerunner.com/Mall/Stores/StoreInfo.asp?Store_id=1000008761
+http://www.storerunner.com/Mall/Stores/StoreInfo.asp?Store_id=1000043213
+http://www.stores.org/archives/cover.asp
+http://www.stores.org/newsletter/April1803newsletter.html
+http://www.stories.com/
+http://www.stories.com/page/read_write/read_write.html
+http://www.stormbirds.com/common/model.htm
+http://www.stormfront.org/archive/t-148657National_Socialism_in_a_Irish_Context.html
+http://www.stormfront.org/archive/t-171058Question_to_WNs_from_a_WN.html
+http://www.stormfront.org/archive/t-177150Help!.html
+http://www.stormfront.org/forum/showthread.php?t=177150
+http://www.stormfront.org/whitehistory/hwr53i.htm
+http://www.stormpages.com/garyjkennedy/British/british_infantry_battalion.htm
+http://www.stormpages.com/garyjkennedy/Weapons/infantry_weapons_of_world_war_tw.htm
+http://www.stormpages.com/lyrics/text/beacon.html
+http://www.stormsurf.com/page2/papers/category.html
+http://www.stormsurf.com/page2/tutorials/atmomodel.shtml
+http://www.stormtrack.org/library/1997/lg061197.htm
+http://www.storybin.com/sponsor/sponsor129.shtml
+http://www.storyboards-east.com/adwexcpt.htm
+http://www.storybookonline.net/archive/Real_Life_Story.aspx
+http://www.storycenter.org/diner/pages/aj3.html
+http://www.storyhouse.org/djurica2.html
+http://www.storymania.com/cgibin/sm2/smshowauthorbox.cgi?alpha=G&author=GambleC
+http://www.storymania.com/cgibin/sm2/smshowtitlebox.cgi?title=TheManWhoWalkedUnseen&category=shortstories&page=15
+http://www.storyscribe.com/aah023.html
+http://www.storysouth.com/fall2001/expansespirit.html
+http://www.storysouth.com/winter2003/carnival.html
+http://www.stowmarketstriders.org.uk/ClubRaces/Scenic7.htm
+http://www.stp.uh.edu/vol58/93-04-01.html
+http://www.stpaulchgo.org/mission2000/dia8.htm
+http://www.stpetersburgtimes.com/2002/01/29/TampaBay/For_Tampa__Quick_draw.shtml
+http://www.stpetersburgtimes.com/2002/03/17/Worldandnation/US_claimed_it_killed_.shtml
+http://www.stpeterscambridge.org/sermons/tlpmar1702.html
+http://www.str.org/free/commentaries/abortion/canidest.htm
+http://www.str.org/free/commentaries/theology/ess_doct.htm
+http://www.str.org/free/commentaries/theology/prophand.htm
+http://www.str.org/free/studies/cultural.htm
+http://www.str8up.co.uk/archive/soulSista/SoulSistas_11_04.html
+http://www.straddle3.net/context/02/blog_0201.en.html
+http://www.straight.com/content.cfm?id=1780
+http://www.straight.com/content.cfm?id=4752
+http://www.straight.com/content.cfm?id=6681
+http://www.straightblastgym.com/
+http://www.straightblastgym.com/thoughts.htm
+http://www.straightdope.com/classics/a3_395.html
+http://www.straightdope.com/classics/a991022.html
+http://www.straightdope.com/columns/021122.html
+http://www.straightdope.com/mailbag/mfancool.html
+http://www.straightfromtheheart.com/author_amen.htm
+http://www.straightgoods.ca/Election2004/ViewNews.cfm?Ref=37
+http://www.straightgoods.ca/Election2004/ViewNews.cfm?Ref=46
+http://www.straightgoods.ca/Features.cfm
+http://www.straightgoods.ca/ViewConsForum5.cfm?REF=7
+http://www.straightgoods.ca/ViewFeature5.cfm?REF=54
+http://www.straightgoods.ca/ViewFeature5.cfm?REF=71
+http://www.straightgoods.ca/ViewLetter.cfm?REF=1405
+http://www.straightgoods.ca/ViewLetter.cfm?REF=1421
+http://www.straightgoods.com/Boutin/010122.shtml
+http://www.straightgoods.com/Guyatt/010402-1.shtml
+http://www.straightgoods.com/item180.shtml
+http://www.straightgoods.com/item411.shtml
+http://www.straightgoods.com/item425.shtml
+http://www.straightgoods.com/item440.shtml
+http://www.straightwhiteguy.com/
+http://www.strangehorizons.com/2001/20010903/on_the_wall.shtml
+http://www.strangehorizons.com/2003/20031013/fahrenheit.shtml
+http://www.strangehorizons.com/2004/20040503/tetrarchs.shtml
+http://www.strangehorizons.com/2004/20040906/greenglass-f.shtml
+http://www.strangehorizons.com/2005/20050620/network-darkness-a.shtml
+http://www.strangemag.com/exorcistpage1.html
+http://www.strangemag.com/mysteryofchance.html
+http://www.strangescience.net/darwin.htm
+http://www.strassmann.com/pubs/cw/y2kdebate/
+http://www.strassmann.com/pubs/hbr/carr-letter.shtml
+http://www.strassmann.com/pubs/knowledge-report.html
+http://www.strategery.modblog.com/
+http://www.strategichealthcare.com/list2001.html
+http://www.strategicnetwork.org/index.php?loc=pray&mode=v&type=&id=1817
+http://www.strategy-gaming.com/auto_insurance/compare-auto-insurance-rate.html
+http://www.strategyinformer.com/shooters/reviews/onemustfallbattlegrounds.shtml
+http://www.strategypage.com/dls/articles/200459a.asp
+http://www.strategypage.com/dls/articles/20052110.asp
+http://www.strategypage.com/dls/articles/200522720.asp
+http://www.strategypage.com/messageboards/messages/73-156.asp
+http://www.strategypage.com/messageboards/messages/73-157.asp
+http://www.strategypage.com/messageboards/messages/73-159.asp
+http://www.strategyplanet.com/emperor/spies.shtml
+http://www.strategyplanet.com/memw/
+http://www.strategyplanet.com/poseidon/archives.html
+http://www.stratford-upon-avon.co.uk/wslife.htm
+http://www.strathclydetechnology.com/ResearchExpertise/Business.htm
+http://www.strathdon.com/code/content.asp?contentid=915&pid=915&gpid=903
+http://www.strathspey.org/mailinglist
+http://www.strathstudents.com/DisplayPage.asp?pageid=5146
+http://www.stratics.com/content/portals/vanguard/
+http://www.stratsplace.com/rogov/reflections_frappes.html
+http://www.stratus.com/products/reference/texasstate.htm
+http://www.strawbalecentral.com/techniques3.html
+http://www.strawberry.org/scam/aug04.html
+http://www.strawberryswitchblade.net/interviews/bysubject_18.php
+http://www.streamingmedia.com/article.asp?id=7286&c=30
+http://www.streamingmedia.com/west2000/program.asp
+http://www.strecorsoc.org/jwoolman/w07.html
+http://www.stred.com/pr/news2.php
+http://www.streetauthority.com/p/ma/12-17-04-house.htm
+http://www.streetauthority.com/reports/top-ten-2005.asp
+http://www.streetbiker-mag.com/sb0124/6.html
+http://www.streetcar.org/msr/restoration/162updates/
+http://www.streetplay.com/skully/rules/
+http://www.streetrodderweb.com/events/0306sr_nhrareunion/
+http://www.streetschools.com/14press/14press.html
+http://www.streettalk.co.nz/modules/news/article-cat-31.html
+http://www.strength-shoes.com/policies.htm
+http://www.strength.org/nyc_operationfrontline.htm
+http://www.strengthtech.com/correct/behavior/behav2.htm
+http://www.stresscure.com/jobstress/reorg.html
+http://www.stresscure.com/relation/7keys.html
+http://www.stressdoc.com/war.htm
+http://www.stressfree.com/answers.html
+http://www.stretcher.com/stories/00/000214f.cfm
+http://www.stretcher.com/stories/00/000911j.cfm
+http://www.stretcher.com/stories/01/010115k.cfm
+http://www.stretcher.com/stories/03/03jun02e.cfm
+http://www.stretcher.com/stories/04/04jul12d.cfm
+http://www.stretcher.com/stories/04/04jun14t.cfm
+http://www.stretcher.com/stories/980119a.cfm
+http://www.strictlybowhunting.com/Anov01issue/2005mar-notime_HR.htm
+http://www.strike-the-root.com/
+http://www.strip-paint.com/healthandsafety.htm
+http://www.striperchaser.com/third.htm
+http://www.stripers247.com/canadastripers.htm
+http://www.strober.com/press.htm
+http://www.stroke.org.uk/media_centre/press_releases/stroke_survivor.html
+http://www.strolen.com/
+http://www.strolen.com/forums/viewtopic.php?t=1849
+http://www.strolen.com/forums/viewtopic.php?t=1849&start=0
+http://www.strolen.com/netbooks/cantrips.txt
+http://www.strom.clemson.edu/primelands/
+http://www.stronefarm.co.uk/stronefarm.shtml
+http://www.strongcity.com/books/gift/gift05.html
+http://www.strongcity.com/winds/1997/05/south_africa.html
+http://www.stronghealth.com/services/fracture/team.cfm
+http://www.stronghealth.com/services/neurology/Bio/stanton.cfm
+http://www.stronghealth.com/services/totaljoint/jointteam.cfm
+http://www.strongsville.org/content/City_Council_Minutes_May_2_2005.asp
+http://www.strose.edu/Future_Students/Academics/School_of_Arts_and_Humanities/art_ed_ug.asp
+http://www.strose.edu/Future_Students/Academics/School_of_Arts_and_Humanities/communications_ug.asp
+http://www.strose.edu/Future_Students/Academics/School_of_Arts_and_Humanities/music_ed_ug.asp
+http://www.strose.edu/Future_Students/Academics/School_of_Education/cmd_grad.asp
+http://www.strose.edu/Future_Students/Academics/School_of_Education/cmd_ug.asp
+http://www.strose.edu/Visitors/Saint_Rose_News/Default.asp?id=429
+http://www.strosechurch.net/School/handbook.htm
+http://www.strsoh.org/boardnews/Nov03.html
+http://www.stryker.com/products/
+http://www.strykernews.com/archives/2004/10/28/update_1028.html
+http://www.strykernews.com/archives/cat_michael_oreskovic.html
+http://www.stryper.com/interviews/kenneymetcaff.html
+http://www.stsc.hill.af.mil/crosstalk/1995/08/Intellig.asp
+http://www.stsc.hill.af.mil/crosstalk/1997/12/shelfware.asp
+http://www.stsc.hill.af.mil/crosstalk/1999/11/sharp.asp
+http://www.stsc.hill.af.mil/crosstalk/2000/10/westbrown.html
+http://www.stsc.hill.af.mil/crosstalk/2002/10/bowers.html
+http://www.stsc.hill.af.mil/crosstalk/2004/11/0411Hunt.html
+http://www.stsintl.com/business/articles/tensecrets.html
+http://www.ststephenspittsfield.org/child.htm
+http://www.stthom.edu/cbes/Corporate%20Governance%20Ethics%20Across%20the%20Board.html
+http://www.stthomas.org/employment/living/
+http://www.stthomasbcs.org/stthomaselc.com/teachers.shtml
+http://www.stthomasu.ca/inkshed/nlett604/horne.htm
+http://www.stthomasu.ca/~hunt/batpoet.htm
+http://www.stu.uea.ac.uk/advice/housing/pack/04-moving-in_html
+http://www.stu.uea.ac.uk/ents/entsListings/Ents.2005-01-13.4010/view
+http://www.stu.uea.ac.uk/news/recent_news
+http://www.stu.uea.ac.uk/recent_news
+http://www.stuartlawler.com/links/index.asp
+http://www.stuckintraffic.com/archive/stuck042.html
+http://www.student-affairs.buffalo.edu/student-unions/policy1.shtml
+http://www.student-direct.co.uk/
+http://www.student-support-saas.gov.uk/personal_eligibility.htm
+http://www.student.org/campusminister/think%20about%20it%20and%20act/article%202.htm
+http://www.studentaccommodation.org/links.asp?cat=Student%20Accommodation%20South%20America
+http://www.studentaccommodation.org/student_accommodation_south_america.asp
+http://www.studentaffairs.cmu.edu/theword/university/nonacademic.cfm
+http://www.studentaffairs.com/vcs/2005evaluationresults-comments.html
+http://www.studentbmj.com/back_issues/0998/data/0998s2.htm
+http://www.studentbmj.com/back_issues/1100/education/417.html
+http://www.studentbmj.com/issues/01/08/education/277.php
+http://www.studentbmj.com/issues/0105/education/13.html
+http://www.studentbmj.com/issues/02/09/careers/325.php
+http://www.studentbmj.com/issues/04/07/careers/286.php
+http://www.studentbmj.com/issues/04/11/reviews/435b.php
+http://www.studentbmj.com/issues/05/03/life/120.php
+http://www.studentbmj.com/issues/05/05/news/181a.php
+http://www.studentcenter.org/profile/myqanda.php?the_profile_name=DeadDollie&jumpto=423552
+http://www.studentcenter.org/profile/myqanda.php?the_profile_name=DeadDollie&jumpto=423557
+http://www.studentcentral.co.uk/Religious_Studies/Christianity/more7.html
+http://www.studentcentral.co.uk/governments_set_economic_objectives_-_discuss_rela_3066/
+http://www.studentcentral.co.uk/has_japan_really_benefitted_economically_as_a_resu_6167/
+http://www.studentcents.ie/pluto.htm
+http://www.studentdonor.org/learn_more/religious_views.htm
+http://www.studentgroups.ucla.edu/enigma/diplomacy/allrules/
+http://www.studentleader.com/orig_04-21-2003.htm
+http://www.studentloanconsolidator.com/
+http://www.studentloanconsolidator.com/consolidation/rightratefaq.shtml
+http://www.studentorg.umd.edu/pvrg/clothing.html
+http://www.studentpress.org/acp/trends/~govstate.html
+http://www.students.ucr.edu/catalog/current/undergradstudies.html
+http://www.studentsfirst.us/news/contentview.asp?c=139184
+http://www.studentsforchoice.com/
+http://www.studentvillage.co.za/article/articleview/2697/1/157
+http://www.studentvillage.co.za/article/articleview/2697/1/315/
+http://www.studentvillage.co.za/article/articleview/3091/1/305/
+http://www.studentz.co.nz/music/articles.asp?id=4150
+http://www.studiesabroad.com/programs/multi/mcprogram/1/mcsession/IMCF2105/viewCourses/16808
+http://www.studiesabroad.com/programs/multi/mcprogram/1/mcsession/IMCW2105/viewCourses/15130
+http://www.studiesirishreview.com/articles/2004/Costello.htm
+http://www.studio-tech.com/Data-IFBPlus.htm
+http://www.studio-tech.com/Data-M770.htm
+http://www.studio-visit.com/interview3.html
+http://www.studio1dancecenter.com/references.htm
+http://www.studio4496.com/
+http://www.studioae.com/haha/sd/chapter2.html
+http://www.studioeditions.com/young_people.html
+http://www.studiofrance.co.uk/
+http://www.studioindiana.com/LSpreface.html
+http://www.studiolo.org/Letters/letter06.htm
+http://www.studiopotter.org/pubs/?view=back_2
+http://www.studiopottery.com/pots/02487b.html
+http://www.studlife.com/news/2003/04/01/Opinion/Study.Verifies.Humpty.Dumpty.Fable-404648.shtml
+http://www.studyabroadloans.com/us-grad-students.php
+http://www.studyabroadloans.com/us-students.php
+http://www.studyglobal.net/countrynewzealand.htm
+http://www.studyglobal.net/oxford.htm
+http://www.studylets.co.uk/
+http://www.studyoverseas.com/america/usaed/commun2.htm
+http://www.studyoverseas.com/furthereducation/articles/uscommunitycolls.htm
+http://www.studyoverseas.com/it/comp4a.htm
+http://www.studyoverseas.com/re/re.htm
+http://www.studyoverseas.com/uk/uked/comp4.htm
+http://www.studyoverseas.com/uk/uked/re%20.htm
+http://www.studysa.co.za/studysa3.htm
+http://www.studyskillslink.com/chapter_sample.html
+http://www.studystack.com/java-studysta/FlashCards.jsp?studyStackId=18
+http://www.studystack.com/java-studysta/Games.jsp?studyStackId=18
+http://www.studystack.com/java-studysta/StudyTable.jsp?studyStackId=18
+http://www.studythebible.com/question/topics/newquestions.htm
+http://www.studyworld.com/basementpapers/repce/Politics/104.htm
+http://www.studyworld.com/newsite/ReportEssay/CreativeWriting/PersonalEssays%5CA_Modernization_Of_The_Theme_Of_The_Iliad-384379.htm
+http://www.studyworld.com/newsite/ReportEssay/CreativeWriting/PersonalEssays%5CMetamorphasis.htm
+http://www.studyworld.com/newsite/ReportEssay/SocialIssues/Political%5CChanges_in_Women_and_Marriage-14.htm
+http://www.studyworld.com/newsite/ReportEssay/SocialIssues/Political%5CMalcolm_X-30944.htm
+http://www.studyworld.com/newsite/ReportEssay/SocialIssues/Political%5CPolarization_in_the_Political_System-18.htm
+http://www.stuff.co.nz/stuff/0,2106,3313530a12,00.html
+http://www.stuff4beauty.com/catalog.php?maincat=Tigi%20Bed%20Head%20Body%20Care%20and%20Haircare%20
+http://www.stuffandnonsense.co.uk/archives/accessibility_and_a_society_of_control.html
+http://www.stufun.com/payment_terms.php3
+http://www.stupidlyhappy.com/archives/2002_05.html
+http://www.stupidquestionsanswered.com/answered/braille2.htm
+http://www.stuttercut.org/hungry/archives/week_2004_08_01.php
+http://www.stvincent.org/ourlocations/hospitals/randolph/default.htm
+http://www.stwing.upenn.edu/~avm/Amber.shtml
+http://www.stybelpeabody.com/bioform.htm
+http://www.stybelpeabody.com/ycarbio.htm
+http://www.style2000.com/p05.html
+http://www.stylegala.com/archive/shaun_of_the_dead.htm
+http://www.stylephyle.com/outfit_journal/8-03.html
+http://www.stylet-oil.com/
+http://www.styleweekly.com/back.asp
+http://www.stylusmagazine.com/blog/archives/2005_06.php
+http://www.stylusmagazine.com/feature.php?ID=1513
+http://www.stylusstudio.com/w3c/xlink/link-behaviors.htm
+http://www.stylusstudio.com/xmldev/200304/post20180.html
+http://www.su.edu/conservatory/scon/Courses/MUPP.IDC
+http://www.su.ualberta.ca/su/businesses_and_services/campus_food_bank
+http://www.suaa.org/SUAA/whats_happening/actionalert.html
+http://www.suaevents.com/
+http://www.sub-tv.co.uk/atvzooms.asp
+http://www.sub-tv.co.uk/bbcschools.asp
+http://www.subaru-msm.com/global/pcwrc2004/3/2.html
+http://www.subclub.org/darkroom/splitter.htm
+http://www.subgenius.com/bigfist/answers/faqs/X0006_SubG_FAQ_8_Can_I_mar.html
+http://www.subiasoft.com/article-inbound-links.html
+http://www.sublet.com/Apartment_Roommate_Rental_Details/illinois_November04.html
+http://www.submag.com/cgi-bin/subscribe/EK?tc=1&NC=Y&pid=
+http://www.submag.com/cgi-bin/subscribe/ML?tc=1&NC=Y&pid=
+http://www.submag.com/cgi-bin/subscribe/WR?tc=1&NC=Y&pid=
+http://www.submitawebsite.com/press/generalsteel.html
+http://www.submityourarticle.com/articles/easypublish.php?art_id=851
+http://www.subnet.com/fleet/ss173.htm
+http://www.subpop.com/scripts/main/catalog.php
+http://www.substancemisuse.net/problem-users/pumonthlynews/monthlynews-feb04.htm
+http://www.subtraction.com/archives/2005/0102_new_improve.php
+http://www.suburbanbliss.net/suburbanbliss/2005/06/
+http://www.suburbanchicagonews.com/beaconnews/top/a25gold.htm
+http://www.suburbanchicagonews.com/features/specialsections/vietnam/riley.htm
+http://www.suburbanchicagonews.com/opinions/columnists/mego/
+http://www.suburbanchicagonews.com/opinions/columnists/vanburen/c16abby.htm
+http://www.suburbanhospital.org/askthedoc/ask_the_doc0602.html
+http://www.sucasabb.com/
+http://www.succeedinginbusiness.com/blog/archives/000031.html
+http://www.succeedinginbusiness.com/blog/archives/000083.html
+http://www.succeedinginbusiness.com/blog/archives/000134.html
+http://www.succeedinginbusiness.com/catalog/ColdCalling.shtml
+http://www.succeedinginbusiness.com/catalog/GettingBetterResults.shtml
+http://www.succeedinginbusiness.com/catalog/eBookQuestions.shtml
+http://www.succeedtoread.com/
+http://www.successbroker.com/store/babyeinsteindvd.html
+http://www.successbroker.com/store/beaudiocds.html
+http://www.successbroker.com/store/beholidaycollection.html
+http://www.successbroker.com/store/bepuppets.html
+http://www.successclinic.com/Topics.html
+http://www.successforall.com/Resource/research/schorgrd.htm
+http://www.successfulmeetings.com/successmtgs/search/search_display.jsp?vnu_content_id=1000618659
+http://www.successfulschizophrenia.com/stories/lefave07self.html
+http://www.successlink.org/colearn/struct.asp
+http://www.successmakers.net/newsletters/smvol1.htm
+http://www.successunlimited.co.uk/bully/case40.htm
+http://www.succulent-plant.com/hoya.html
+http://www.sudanembassy.org/default.asp?page=documentsreports_khartoum
+http://www.sudantribune.com/article.php3?id_article=1796
+http://www.sudantribune.com/article.php3?id_article=6733
+http://www.sudantribune.com/article.php3?id_article=7584
+http://www.sudantribune.com/article.php3?id_article=7597
+http://www.suddenlysenior.com/91101.html
+http://www.suddenlysenior.com/canadiandrugstores.html
+http://www.suddenlysenior.com/links.shtml
+http://www.suddenlysenior.com/medicaresupplements101.html
+http://www.suddenlysenior.com/newyearresolution.html
+http://www.suddenlysenior.com/othergoodstuff.html
+http://www.sudipbose.com/archives/2004/04/
+http://www.sudval.org/archives/dsm5/0291.html
+http://www.suelaflin.pwp.blueyonder.co.uk/MPhil/MPhilChap3.html
+http://www.suelebeau.com/characterednie.htm
+http://www.suffering.net/detail.htm
+http://www.sugar-grove.il.us/
+http://www.sugar-grove.il.us/2004_0121_plan.html
+http://www.suhsd.k12.ca.us/moh/KMMIWP/acuba1.htm
+http://www.suite101.com/article.cfm/13890/107622
+http://www.suite101.com/article.cfm/lutheranism/116637
+http://www.suite101.com/article.cfm/pakistan_culture/115112
+http://www.suite101.com/article.cfm/women_following_dreams/107622
+http://www.suite101.com/course.cfm/19532/seminar
+http://www.suite101.com/discussion.cfm/17261/90596
+http://www.suite101.com/discussion.cfm/5722/38623/261482
+http://www.suite101.com/discussion.cfm/6436/42972
+http://www.suite101.com/discussion.cfm/cooking_with_grandma/112211/1043711
+http://www.suite101.com/discussion.cfm/cooking_with_grandma/52436/latest/1
+http://www.suite101.com/discussion.cfm/seasonal_cooking/93304/latest/1
+http://www.suite101.com/splash.cfm/227
+http://www.suite101.com/topic_page.cfm/16591/4399
+http://www.suite101.com/welcome.cfm/faith_and_rural_economy
+http://www.suite101.com/welcome.cfm/investing
+http://www.suk.fh-wiesbaden.de/~mettler/index-e.html
+http://www.sukipot.com/reflections/janeeyre.html
+http://www.sulekha.com/about.html
+http://www.sulekha.com/chpost.asp?forum=creative&cid=78480&show=0
+http://www.sulekha.com/expressions/column.asp?cid=305907
+http://www.sullivan-county.com/id3/debate.htm
+http://www.sullivan-county.com/nf0/ep/la_times.htm
+http://www.sullivan-county.com/x/er.htm
+http://www.sullivanandwolf.com/faq.htm
+http://www.sullivannyc.com/
+http://www.sumatranorangutan.com/site_mawas/UK/PROJECT/pag/project_add_activities.htm
+http://www.sumeria.net/health/Cartel.html
+http://www.sumeria.net/politics/drugwar2.html
+http://www.sumeria.net/politics/maresca.html
+http://www.sumico.net/
+http://www.summer.harvard.edu/2005/help/directions.jsp
+http://www.summerjoy.com/MichaelCH.html
+http://www.summerlearning.org/resources/ebulletins/feb2005.html
+http://www.summermatters.com/talking.htm
+http://www.summerstays.org/go_abroad/questions.htm
+http://www.summerwood.com/tips_ideas_cabanas.jsp
+http://www.summitchurch.org/
+http://www.summitclimb.com/everest_trek_tibet.htm
+http://www.summitcollaborative.com/dot_org_issue3.html
+http://www.summitconsulting.com/balancingact/balancingact_october02.html
+http://www.summitdynamics.net/catalog/personalkeys.html
+http://www.sumptionandwyland.com/documents/Estate_Tax_Repeal_and_Charitable_Giving.htm
+http://www.sun-associates.com/cos/resources/webresources/search.html
+http://www.sun-sentinel.com/business/columnists/sfl-ybask20jun20,0,5145519.column?coll=sfla-business-col
+http://www.sun-sentinel.com/business/nationworld/ats-ap_business11jul01,0,6194163.story?coll=sns-business-headlines
+http://www.sun-sentinel.com/business/sns-yourmoney-0829gettingstarted,0,6785177.story?coll=sfla-business2
+http://www.sun-sentinel.com/features/booksmags/sfl-bkbombshellsjun05,0,3501544.story?coll=sfla-features-books
+http://www.sun-sentinel.com/news/columnists/sfl-abauza26jun26,0,6675749.column?coll=sfla-news-col
+http://www.sun-sentinel.com/news/local/cuba/sfl-abauza26jun26,0,2774550.column?coll=sfla-news-cuba
+http://www.sun-sentinel.com/news/weather/hurricane/sfl-hc-prep-documents,0,1056000.story?coll=sfla-hurricane-utility
+http://www.sun-sentinel.com/sports/baseball/marlins/sfl-burnett28jun28,0,4110768.story?coll=sfla-sports-marlins
+http://www.sun-sentinel.com/sports/sfl-burnett28jun28,0,3284950.story?coll=sfla-sports-front
+http://www.sun.com/aboutsun/media/features/mars.html
+http://www.sun.com/access/background/laws.html
+http://www.sun.com/br/0804_ezine/ret_sec.html
+http://www.sun.com/cddl/CDDL_why_details.html
+http://www.sun.com/products-n-solutions/edu/edusoft/institution/
+http://www.sun.com/smi/Press/sunflash/2004-07/sunflash.20040726.1.html
+http://www.sun.com/smi/Press/sunflash/2004-08/sunflash.20040816.2.html
+http://www.sun.com/smi/Press/sunflash/2005-06/sunflash.20050606.5.html
+http://www.sun.com/software/products/jscreator/faqs.xml
+http://www.sun.com/solutions/documents/articles/go_rfid_dod.xml
+http://www.sun.com/solutions/documents/articles/mf_train_aa.xml
+http://www.sun.com/solutions/documents/solution-sheets/EN_grid-oil+gas-ds_FF.xml
+http://www.sunburstech.com/k-9/wolfgang.htm
+http://www.sundaycolors.com/category/housewarminggifts/
+http://www.sundayherald.com/25393
+http://www.sundayherald.com/31826
+http://www.sundayherald.com/43156
+http://www.sundayherald.com/43485
+http://www.sundayherald.com/44321
+http://www.sundayherald.com/44386
+http://www.sundayherald.com/45700
+http://www.sundayherald.com/47117
+http://www.sundayherald.com/8759
+http://www.sundayherald.com/np/34851
+http://www.sundayherald.com/print15468
+http://www.sundayherald.com/print50305
+http://www.sundayindependent.co.za/index.php?fArticleId=2400006
+http://www.sundayindependent.co.za/index.php?fSectionId=1041&fArticleId=2400006
+http://www.sundaymail.co.uk/jobsplus/tm_objectid=15619502&method=full&siteid=86024&headline=dram-fine-way-to-earn-a-living-name_page.html
+http://www.sundaymirror.co.uk/radar/
+http://www.sundayobserver.lk/2004/02/08/fea02.html
+http://www.sundayriver.com/releases.html?id=1530
+http://www.sundaytelegraph.news.com.au/story/0,9353,12020844-28780,00.html
+http://www.sundaytimes.news.com.au/common/story_page/0,7034,12074892%255E401,00.html
+http://www.sundaytimes.news.com.au/common/story_page/0,7034,12141300%255E401,00.html
+http://www.sundaytimes.news.com.au/common/story_page/0,7034,12348219%255E1702,00.html
+http://www.sundaytribune.co.za/index.php?fArticleId=2399762&fSectionId=165&fSetId=
+http://www.sundaytribune.co.za/index.php?fSectionId=&fArticleId=2399762
+http://www.sunderland.ac.uk/~es0mda/jms.htm
+http://www.sunderlandschools.org/sandhillview/The%20Curriculum.htm
+http://www.sunderlandtoday.co.uk/ViewArticle2.aspx?SectionID=1512&ArticleID=938246
+http://www.sundials.co.uk/~oxon.htm
+http://www.sundive.co.uk/sherlockholmes/dogged7.htm
+http://www.sundive.co.uk/singles/ramblings.htm
+http://www.sundram.com/investors.htm
+http://www.suneido.com/forum/topic.asp?TOPIC_ID=330&FORUM_ID=1&CAT_ID=1&Topic_Title
+http://www.sunion.warwick.ac.uk/portal/training/Default.asp?url=TAC
+http://www.sunion.warwick.ac.uk/portal/union/Default.asp?url=TAC
+http://www.sunless.com/review/Target_Suncatcher_Sunless_Tanning_Cr%C3%A8me_Deep_Dark/200/
+http://www.sunnexbiotech.com/therapist/blue%20light%20damage.html
+http://www.sunnipath.com/resources/Questions/qa00000381.aspx
+http://www.sunnydale-slayers.com/episodes/ehellmouth.html
+http://www.sunnyfield.co.uk/dayspast/pcbook.htm
+http://www.sunpig.com/reviews/quick/archives/001566.html
+http://www.sunprotectingfactory.com/sunShield/shield_man.html
+http://www.sunprotectingfactory.com/sunShield/shield_manfr.html
+http://www.sunrisetelecom.com/lansoftware/faq_runtime.shtml
+http://www.sunseekerhomes.com/aboutus.php
+http://www.sunsetbeach.co.za/beach_hotel_kitchen.htm
+http://www.sunshine-project.org/biodefense/lemonletter.html
+http://www.sunshinediving.com/
+http://www.sunshinediving.com/main_pages/client_comments.htm
+http://www.sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_17.html
+http://www.sunsonline.org/trade/process/followup/1996/04170096.htm
+http://www.sunsonline.org/trade/process/followup/1996/07170196.htm
+http://www.sunspot.noao.edu/sunspot/pr/answerbook/moon.html
+http://www.sunspot.noao.edu/sunspot/pr/tree/universe.html
+http://www.sunstar.com.ph/static/gen/2005/01/24/bus/mine.firm.to.pour.in.$600m.fresh.capital.html
+http://www.sunstoneonline.com/magazine/searchable/Issue23.asp
+http://www.suntimes.co.za/2001/12/30/insight/in03.asp
+http://www.suntimes.co.za/2004/02/08/lifestyle/life05.asp
+http://www.suntimes.co.za/explorer/today.asp
+http://www.suntimes.co.za/specialreports/baghdad/tuesday11.asp
+http://www.suntimes.com/output/business/econ23.html
+http://www.suntimes.com/output/elect/cst-nws-bolton12.html
+http://www.suntimes.com/output/jesse/cst-edt-jesse10.html
+http://www.suntimes.com/output/news/cst-nws-flu31.html
+http://www.suntimes.com/output/savage/cst-fin-terry283.html
+http://www.suntimes.com/output/steinberg/cst-nws-stein27.html
+http://www.suntimes.com/savage/greatest_hits/spending.html
+http://www.suntimes.com/special_sections/crime/cst-nws-gangbcop08.html
+http://www.suntimes.com/special_sections/failing_teacher/followup/cst-nws-fail24.html
+http://www.suntimes.com/special_sections/failing_teacher/part1/cst-nws-main06.html
+http://www.sunweb.com.hk/pahk/history.htm
+http://www.sunyjcc.edu/jamestown/computing/comp-policy.html
+http://www.sunysb.edu/Reinventioncenter/Conference_04/Garrell/Physical_Sciences_Mathematics.htm
+http://www.sunysb.edu/Reinventioncenter/Conference_04/Taking_it_to_the_Street/Taking_it_to_the_streets.htm
+http://www.sunysb.edu/philosophy/faculty/pgrim/fuzzy.htm
+http://www.sunysb.edu/research/monmemo/archives/monmem020812.html
+http://www.sunysccc.edu/academic/hss/faculty.html
+http://www.suodenjoki.dk/us/productions/articles/photo_gallery.htm
+http://www.supafamous.com/archives/2002/12/000605.shtml
+http://www.superbowl.com/news/story/8173158
+http://www.supercheats.com/xbox/yagercheats.htm
+http://www.superclown.org/DNBF.htm
+http://www.supercrawler.com/Regional/Europe/United_Kingdom/Recreation_and_Sports/Home_and_Garden/Gardening/
+http://www.superfreshfood.com/consumer_updates.asp?action=archive
+http://www.superfuture.com/city/supertalk/index.cfm?page=userinfo&viewuserid=581
+http://www.superiorcoffeeshop.com/disclaimer.asp
+http://www.superiorpics.com/christina_aguilera/lyrics.html
+http://www.superkids.com/
+http://www.superkits.net/CoxOCullBarnettTOC-Summary.htm
+http://www.supermemo.com/articles/20rules.htm
+http://www.superperformance.com/timemgt.html
+http://www.supersa.sa.gov.au/html/supernews.html
+http://www.superseeds.com/general_supplies.htm
+http://www.superseeds.com/home.htm
+http://www.supersizeme.com/home.aspx?page=aboutmovie
+http://www.superslow.com/AM/AlligatorMachines.htm
+http://www.supertopo.com/climbingareas/southlaketahoe.html
+http://www.superwaba.com.br/en/inscricao.asp
+http://www.superwarehouse.com/Princeton_Graphics_lcd_monitors/b/213/c/1876
+http://www.supplychainseminars.com/
+http://www.supplyht.com/CDA/ArticleInformation/features/BNP__Features__Item/0,5333,137225,00.html
+http://www.support4learning.org.uk/careers/careers_calendar_college_HE.htm
+http://www.support4learning.org.uk/education/lstyles.htm
+http://www.support4learning.org.uk/money/loans.htm
+http://www.supremecourtus.gov/publicinfo/speeches/sp_04-04-03.html
+http://www.supremelearning.com/seminarexcerpts.html
+http://www.sure-quality.com/
+http://www.surfaceonline.org/americanfiction2.html
+http://www.surfaceonline.org/essayamerica6.htm
+http://www.surfaceonline.org/natureessay.htm
+http://www.surfacetransportationisac.org/news/CyberTerror.asp
+http://www.surfbirds.com/trip_report.php?id=552
+http://www.surfchem.kth.se/yki/web/research/mcs.html
+http://www.surfermag.com/features/oneworld/desalination/
+http://www.surfermag.com/features/pollpr/
+http://www.surferspath.com/47/
+http://www.surferspath.com/48/
+http://www.surfingvancouverisland.com/surf/tutorial.htm
+http://www.surfline.com/surfology/surfology_forecast_index.cfm
+http://www.surfmind.com/web/searchresult.cfm?criteria=(CF_CUSTOM1%20%3CCONTAINS%3E%20HCI)%20and%20interface%20and%20customization
+http://www.surfrider.org/stateofthebeach/01-bi/body.asp?sub=ba
+http://www.surfshop.net.ph/pba2/talkntext/profile.asp
+http://www.surftheisles.com/art.htm
+http://www.surgent.com/coursdsc/NTAB.htm
+http://www.surgeongeneral.gov/library/bonehealth/part_four.html
+http://www.surgeongeneral.gov/library/mentalhealth/chapter2/sec6.html
+http://www.surgeongeneral.gov/library/youthviolence/chapter3/sec1.html
+http://www.surgeongeneral.gov/news/speeches/alcohol_02122004.htm
+http://www.surgeons.org/about/publications/pol_rpm02_12.html
+http://www.surgical-tutor.org.uk/core/preop2/blood.htm
+http://www.surlalunefairytales.com/facetiousnights/night7_fable2.html
+http://www.surlybikes.com/spew2.html
+http://www.surplusmachinery.com/simgolf/Course_Lessons.htm
+http://www.surrenderedwife.com/surrendered_wife_books_surrendered_wife.html
+http://www.surrey.ac.uk/Dance/faq.html
+http://www.surreycc.gov.uk/sccwebsite/sccwspages.nsf/LookupWebPagesByTITLE_RTF/Stables+and+buildings+advice?opendocument
+http://www.surreycc.gov.uk/sccwebsite/sccwspages.nsf/LookupWebPagesByTITLE_TXT/Average+house+prices?opendocument
+http://www.surreycc.gov.uk/sccwebsite/sccwspages.nsf/LookupWebPagesByTITLE_TXT/Voluntary+organisations+for+children+with+medical+conditions+(A-H)?opendocument
+http://www.surreyheath.gov.uk/surreyheath/planning.nsf/webPages/Object.html
+http://www.surreyleague.co.uk/serrl/rules.htm
+http://www.surreypolice.org.uk/borough_nso.asp?nsoid=2617
+http://www.surveymonkey.com/DisplayDetail.asp?SID=608303&Pos=24&U=60830345901
+http://www.surveymonkey.com/Testimonials.asp
+http://www.surveytracker.com/htm/software/plusmail.htm
+http://www.survival-center.com/guide/bugout.htm
+http://www.survival-center.com/nuclear/nwss/s60p780.htm
+http://www.survival-center.com/shopsite_sc/store/html/rain.html
+http://www.survival.com/bookch1a.htm
+http://www.survivalafterdeath.org/articles/keen/scole.htm
+http://www.survivalafterdeath.org/books/barrett/dbv/chapter6.htm
+http://www.survivalafterdeath.org/books/lodge/raymond/7.htm
+http://www.survivalafterdeath.org/experiments/automatic/identity.htm
+http://www.survive-divorce.com/dons_story.htm
+http://www.survivorsswindon.com/effects.htm
+http://www.survivorstvseries.com/Tom.htm
+http://www.susanblackmore.co.uk/Articles/cf95.html
+http://www.susangregg.com/private_sessions.htm
+http://www.susanhartlindquist.com/blade.htm
+http://www.susanhartlindquist.com/physicsr.htm
+http://www.susannacarr.com/books/101/sixweeks.htm
+http://www.susanstevenscrummel.com/teachertipsdish.htm
+http://www.susla.edu/studentactivities/calendar.html
+http://www.suslik.org/Humour/Computer/Microsoft/gates.html
+http://www.susmangodfrey.com/HandleCases.html
+http://www.suspectthoughts.com/underground1.htm
+http://www.suspense-movies.com/articles/war/
+http://www.suspro.org/Food-project/sustainable-living-overview.htm
+http://www.susps.org/
+http://www.susqu.edu/webcentral/javascript/js10.cfm
+http://www.sussex.ac.uk/International/sussex/return.shtml
+http://www.sussex.ac.uk/USIS/news/rss/?refer=4815
+http://www.sussex.ac.uk/USIS/news/rss/?refer=4838
+http://www.sussex.ac.uk/USIS/news/rss/?refer=4847
+http://www.sussex.ac.uk/Units/alumni/notable_alumni/peterhain.html
+http://www.sussex.ac.uk/Units/cgjs/macourse.html
+http://www.sussex.ac.uk/Units/publications/sabroad2005/europeanstudies.html
+http://www.sussex.ac.uk/Units/publications/ugrad2005/english_details.html
+http://www.sussex.ac.uk/Units/publications/ugrad2005/europeanlanguages_details.html
+http://www.sussex.ac.uk/Units/publications/ugrad2005/filmstudies_details.html
+http://www.sussex.ac.uk/Units/publications/ugrad2005/sociology_details.html
+http://www.sussex.ac.uk/cdec/language_schools.php
+http://www.sussex.ac.uk/history/1-2-4-7.html
+http://www.sussex.ac.uk/langc/skills/argument.html
+http://www.sussex.ac.uk/records/1-2-8-9.html
+http://www.sussex.ac.uk/sei/1-4-9-2.html
+http://www.sussex.ac.uk/sociology/1-2-3-4.html
+http://www.sussexarts.co.uk/listings.asp?pid=listings
+http://www.sussexcarz.com/MainPages/Membership.htm
+http://www.sussexcricket.co.uk/season/professionals/r_montgomerie/
+http://www.susta.org/export/packingetc.html
+http://www.sustain-online.org/plugins/DocSearch/details.asp?MenuId=1&ClickMenu=&doOpen=1&type=DocDet&ObjectId=MTUzNTA
+http://www.sustainability.com/insight/issue-brief.asp?id=67
+http://www.sustainable-design.ie/fire/appendixd.htm
+http://www.sustainable-development.gov.uk/taking-it-on/finalsummary/02.htm
+http://www.sustainable-euroregions.net/wales.php
+http://www.sustainable.ie/resources/community/art04.htm
+http://www.sustainable.ie/resources/community/art05.htm
+http://www.sustainable.wellington.net.nz/Campaigns/Chaffers_Park/
+http://www.sustainabletable.org/issues/biodiversity/
+http://www.sustainweb.org/chain_proc_detail.asp?id=12
+http://www.sustland.umn.edu/implement/amending_soils.html
+http://www.sustland.umn.edu/maint/evergreen.html
+http://www.sutti.com/2b.htm
+http://www.sutton.gov.uk/Sutton/Relaxing+and+Leisure/Heritage/Village+Hall+Beddington.htm
+http://www.suv.com.au/html/student_living/rules.htm
+http://www.suzannegold.com/chapterone.html
+http://www.svama.org/events/020905.asp
+http://www.svase.org/site/News/20021003
+http://www.svce.ac.in/~esgopi/eshare.html
+http://www.svcn.com/archives/lgwt/12.27.00/hillbrook-0052.html
+http://www.svcn.com/archives/saratoganews/05.03.00/choir-0018.html
+http://www.svconline.com/mag/avinstall_equip_yourself/
+http://www.sveiby.com/articles/Knowledgetheoryoffirm.htm
+http://www.sveiby.com/articles/Polanyi.html
+http://www.svendtofte.com/code/opera_open_the_web/
+http://www.svengrahn.pp.se/trackind/jodrell/jodrole1.htm
+http://www.svgames.com/rpg-mysteyegm.html
+http://www.svgopen.org/2002/papers/cecconi_galanda__adaptive_zooming/
+http://www.svgopen.org/2003/papers/GivingAnotherLook/
+http://www.svn.org/Initiatives/spring-2003/spring2003_agenda.htm
+http://www.svrc.vic.edu.au/VCE.html
+http://www.svrecords.com/articles/art-0004.html
+http://www.svshs.wa.edu.au/library/pages/VirtLib/curric/society.htm
+http://www.svt.ntnu.no/adm/eng/stud/fagbeskrivelser/samfunnsokonomi/masterfinec.htm
+http://www.svt.ntnu.no/adm/eng/stud/fagbeskrivelser/samfunnsokonomi/masterfinec.htm?skr=ja
+http://www.sw.com.sg/en/products/plesk6/new/
+http://www.swac.org/03-04/football/0304index.htm
+http://www.swac.org/03-04/football/fballindex.htm
+http://www.swami-center.org/en/text/Life.html
+http://www.swami-krishnananda.org/self/self_4.html
+http://www.swaminarayan.org/festivals/yogijayanti/
+http://www.swan.ac.uk/statistics/das/direct4.htm
+http://www.swan4h.org/under_one_sky_purpose.htm
+http://www.swanlabs.com/news/press/releases/03_08_05.aspx
+http://www.swanngroup.com.au/4674,01,1-0-Defence%20and%20Aerospace.html
+http://www.swans.com/library/art11/gsmith39.html
+http://www.swansea-gower.co.uk/broughtonbay.htm
+http://www.swansea-gower.co.uk/climate.htm
+http://www.swansea-gower.co.uk/cycling.htm
+http://www.swansea-gower.co.uk/swanseapolicestation.htm
+http://www.swansea.gov.uk/index.cfm?articleid=5686
+http://www.swap.ac.uk/about/miniproject7.asp
+http://www.swap.ac.uk/about/miniproject7.asp?version=text
+http://www.swap.ac.uk/about/miniproject7.asp?version=textprint
+http://www.swaphandmedowns.com/generic56.html
+http://www.swaraj.org/shikshantar/timrebeccastory.html
+http://www.swarb.co.uk/lawb/cpuTerrorAct2000.shtml
+http://www.swarthmore.edu/Admin/ofs/departure/health_safety.html
+http://www.swarthmore.edu/Admin/prelaw/guide_for_applying_to_law.html
+http://www.swarthmore.edu/SocSci/tburke1/
+http://www.swarthmore.edu/SocSci/tburke1/perma30305.html
+http://www.swarthmore.edu/alumni/reunion/1955/
+http://www.swarthmore.edu/socsci/tburke1/artsoc.html
+http://www.swatweb.net/using_swat.html
+http://www.swbike.com/articles/8466%20Miles/Week%20Five/
+http://www.swc-cfc.gc.ca/pubs/066261951X/199508_066261951X_10_e.html
+http://www.swc.utexas.edu/highschool/hsgoalsaims.shtml
+http://www.swcivilwar.com/cw_causes.html
+http://www.swcivilwar.com/sherman.html
+http://www.swco.ttu.edu/Manuscripts/uRanch22.asp?description=b
+http://www.swcollege.com/vircomm/gita/gita_int/completed_contract_method.html
+http://www.swcoloradohome.com/articles/gardening/greenthumb23.asp
+http://www.swdentalconf.org/conf2005/program-thursday.htm
+http://www.swe.org/SWE/StudentServices/SAC/2003%20SME%20BOWL_RulesGuidelines.htm
+http://www.sweatshopwatch.org/swatch/marianas/lawsuit.html
+http://www.sweatshopwatch.org/swatch/marianas/links.html
+http://www.swedauk.org/disorders/disorders.htm
+http://www.swedauk.org/siteinfo/disclaimer.htm
+http://www.sweden.gov.se/sb/d/2907/a/16638
+http://www.sweden.gov.se/sb/d/2907/nocache/true/a/16638/dictionary/true
+http://www.sweden.gov.se/sb/d/5189/a/45079
+http://www.sweden.gov.se/sb/d/5189/a/45079/m/wai
+http://www.swedenborg.ca/swedenborg_worldwide/united_states_2.htm
+http://www.swedetrack.com/e46struc.htm
+http://www.swedish.org/13732.cfm
+http://www.swedish.org/16181.cfm
+http://www.swedish.org/16599.cfm
+http://www.swedish.org/18974.cfm
+http://www.swedishbookreview.com/article-2004-2-potts.asp
+http://www.swedishenglishtranslation.com/blankand.htm
+http://www.sweepsadvantage.com/browsenew.php?pg_which=12&cat=3&sort_by=bid&sort_order=DESC&curpage=&only_fav=
+http://www.sweet-itch.com/boett.html
+http://www.sweetblueonion.com/musicreviews.html
+http://www.sweetecstacy.com/tutorial/birthcontrol1.htm
+http://www.sweetliberty.org/cos5.htm
+http://www.sweetliberty.org/cos8.htm
+http://www.sweetliberty.org/issues/hoax/unt.htm
+http://www.sweetliberty.org/issues/staterights/devious.htm
+http://www.sweetmarias.com/Brazil2004/Page5.html
+http://www.sweetpeachesbedding.com/baby-nursery-decor.htm
+http://www.sweetpeachesbedding.com/children's-wall-art.htm
+http://www.sweetpeachesbedding.com/teen-girl-bedding.htm
+http://www.swepa.com/public/984.cfm
+http://www.swig.org/papers/Py97/beazley.html
+http://www.swiminfo.com/
+http://www.swin.edu.au/stuserv/housing/home.html
+http://www.swinefile.com/Fat.htm
+http://www.swingingheaven.co.uk/stories/story-1299.html
+http://www.swingline.com/support/tips.aspx?t=1
+http://www.swingstateproject.com/2005/04/index.php
+http://www.swingstateproject.com/international/
+http://www.swingthis.net/LF3/
+http://www.swinney.org/journals/article.phtml?id=3536
+http://www.swintech.com/what_to_do_in_an_armed_hold_up.htm
+http://www.swiss.com/web/trip-planner/id-tp-ba-dangerous-goods.htm
+http://www.swissre.com/INTERNET/pwswpspr.nsf/alldocbyidkeylu/MBAR-4UULCJ?OpenDocument
+http://www.switchboard.com/Florists/York/PA/20/Yellowpages_Results.html
+http://www.switchboard.com/Sporting_Goods/Green%20Cove%20Springs/FL/39/Yellowpages_Results.html
+http://www.switchboard.com/Sporting_Goods/Green%20Valley/AZ/39/Yellowpages_Results.html
+http://www.swlearning.com/economics/econ_news/econ_news_monopoly.html
+http://www.swlg.org.uk/LRBr1.htm
+http://www.swlg.org.uk/WLN59b.htm
+http://www.swlocalization.com/humbugs.htm
+http://www.swnyc.com/users/mepa/fanfiction/song_parodies.html
+http://www.swopnet.com/engr/Septic_Tanks/Gayman_Soil_Failure.html
+http://www.swordfight.org/000280.html
+http://www.swp-berlin.org/common/get_document.php?id=1059
+http://www.swp.ie/resources/The%20permanent%20arms%20economy_files/permarms.htm
+http://www.swrb.com/Puritan/1-2000.htm
+http://www.swri.edu/3pubs/ttoday/fall01/navigate.htm
+http://www.swri.edu/3pubs/ttoday/spring02/technics.htm
+http://www.sws.org.ph/pr042004.htm
+http://www.sws.uiuc.edu/hilites/confinfo/energy/abs/DRUCKER.htm
+http://www.sws.uiuc.edu/wss/lakes.asp
+http://www.swsahs.nsw.gov.au/cancer/chemo.asp
+http://www.swtimes.com/archive/2005/January/16/opinion/16_letters.html
+http://www.swtourism.co.uk/html/national_quality_assurance_schemes_nqas1.asp
+http://www.swydm.com/blog.php?u=kingpin2003&aw=4&am=12&ay=04
+http://www.sxe.com/forums/archive/index.php/t-1117.html
+http://www.syasoccer.org/
+http://www.sybase.com/detail/printthis/1,6907,1002275,00.html
+http://www.sybase.com/detail?id=1018387
+http://www.sybase.com/detail?id=1029960
+http://www.sybase.com/detail?id=1033800
+http://www.sybase.com/detail?id=1034858
+http://www.sybervision.com/marriage/
+http://www.syd.kth.se/forskning_eng/dash/default.asp
+http://www.sydneycichlid.com/old_scp/apisto1.html
+http://www.sydneygrammar.nsw.edu.au/CollegeSt/Archives/newsletter02-10-23.html
+http://www.sydneygrammar.nsw.edu.au/CollegeSt/Archives/newsletter03-10-29.html
+http://www.sydneyscloset.com/happycustomers.html
+http://www.syha.org.uk/syha/web/site/JoinUs/Discounts/discountslocal.asp?MenuLinkID=90&MenuID=4
+http://www.syha.org.uk/syha/web/site/JoinUs/Discounts/txt_discountslocal.asp?MenuLinkID=90&MenuID=4
+http://www.sykeyskills.co.uk/faqsonks.shtml
+http://www.sylvandale.com/inch.html
+http://www.sylvantech.com/~talin/determinism.html
+http://www.sylviaengdahl.com/space/myth01.htm
+http://www.sylviaplath.de/plath/perloff.html
+http://www.symantec.com/press/2004/n041216.html
+http://www.symbiosis-travel.com/adventure/cambodia/mithsamlanh.htm
+http://www.symbol.com/solutions/manufacturing/manufacturing_case_studies_lib.html
+http://www.symbols.com/encyclopedia/49/4913.html
+http://www.synapsis.co.nz/herald/Herald_2004/BizHerald_Greens_04Jun15.htm
+http://www.synaptic.bc.ca/Contact/viewtopic.php?p=1075
+http://www.synaptic.bc.ca/ejournal/lifegets.htm
+http://www.syncardia.com/patients3.php
+http://www.syndicatebank.com/asp/0100text.asp?pageID=83
+http://www.syndistar.com/media/posters/character
+http://www.synergycreations.com/tech/art003.html
+http://www.syngentafoundation.com/genetic_engineering_biotechnology.htm
+http://www.synopsys.com/partners/systemverilog/systemverilog_quotes.html
+http://www.synthetic-motor-oil-change-and-filters.com/amsoil_articles/the-brain-washing-of-consumers/
+http://www.synthetic-motor-oil-change-and-filters.com/amsoil_testimonies/satisfied_customers_trucks/amsoil-diesel-oil-going-409000-miles-without-oil-change.php
+http://www.synthstuff.com/mt/
+http://www.syntonyquest.org/thePath/Vol1No1Apr01.html
+http://www.syracusecentral.com/business_resources/financial_incentives.htm
+http://www.syriatourism.org/Destinations/ugarit.htm
+http://www.sysmex.co.uk/library/sysmexreviews.htm
+http://www.sysmod.com/eurofaq.htm
+http://www.sysopt.com/articles/DDR2/
+http://www.sysopt.com/reviews/opusmt200/
+http://www.systat.com/products/AutoSignal/?sec=1037
+http://www.systemreferencedocuments.org/35/sovelior_sage/spellsC.html
+http://www.systemreferencedocuments.org/35/sovelior_sage/spellsHtoL.html
+http://www.systems-thinking.org/mom/
+http://www.systemssalessupport.com/cases.html
+http://www.systemweave.com/beaufortpoloclub/events.php
+http://www.syunikedu.am/eng/gum.htm
+http://www.t-f-i.com/
+http://www.t-m.org.uk/research.shtml
+http://www.t-online.net/c/28/91/83/2891836.html
+http://www.t-shirtking.com/
+http://www.tabaret.ca/article_e_234.html
+http://www.tablesoccer.com/ts_html/foos-tip.htm
+http://www.tabletnewspaper.com/old%20tablet/vol1iss3/gongyaru.htm
+http://www.tabula-rasa.info/StephenKing/SalemsLot.html
+http://www.tabulas.com/~bibay/287528.html
+http://www.tabunka.org/special/complaint-box.html
+http://www.tacitus.org/comments/2004/5/2/11573/30027/17
+http://www.tackleafrica.org/Tour%20Route.htm
+http://www.tackleit.biz/customrods.html
+http://www.tackletime.net/reports.html
+http://www.tacoma.washington.edu/research/services/events.cfm
+http://www.tacomapjh.org/minutes020803.htm
+http://www.tacticaltech.org/africasource
+http://www.tacticsone.com/arts.html
+http://www.tacticsone.com/shopping.html
+http://www.tactileint.com/seasia/singapore/
+http://www.taddlecreekmag.com/the_code.shtml
+http://www.taekwondobible.com/tkdbible/maintext/tkdphe12.htm
+http://www.taemag.com/issues/articleID.18401/article_detail.asp
+http://www.taemag.com/issues/articleid.18075/article_detail.asp
+http://www.taemag.com/issues/articleid.18081/article_detail.asp
+http://www.taemag.com/issues/articleid.18348/article_detail.asp
+http://www.taemag.com/issues/articleid.18401/article_detail.asp
+http://www.taf.org/
+http://www.taforum.org/
+http://www.taforum.org/index.pl
+http://www.taft.cc.ca.us/lrc/class/assignments/actlisten.html
+http://www.tagasafaris.co.za/lion-sands-game-lodge.htm
+http://www.tagg.org/others/nestiev81.html
+http://www.tagliners.org/archive/001166.html
+http://www.tagnet.org/llt/jim_arrabito.shtml
+http://www.tagorda.com/archives/003510.php
+http://www.tahc.state.tx.us/animal_health/diseases/fmd/fmd_faq.shtml
+http://www.tahoecountry.com/oldtimetahoe/tallac.html
+http://www.tai-gear.com/skills.htm
+http://www.taibros.net/archives/2004/06/18/the-free-falling-ant/
+http://www.taijiworld.com/Articles/FirstYang.htm
+http://www.taijiworld.com/Articles/baguazhang_hidden.htm
+http://www.taijiworld.com/Articles/subtle.htm
+http://www.taijiworld.com/WTBA/grading.htm
+http://www.tailhook.org/ChairFa02.htm
+http://www.taima.org/en/ya991003.htm
+http://www.taino-tribe.org/page3.html
+http://www.taiohi.co.nz/index.php/pi_pageid/5114
+http://www.taipei.org/teco/cicc/currents/3-498/3-498.htm
+http://www.taipeitimes.com/News/edit/archives/2005/03/29/2003248247
+http://www.taipeitimes.com/News/edit/archives/2005/05/21/2003256038
+http://www.taipeitimes.com/News/front/archives/2005/02/17/2003223351
+http://www.taipeitimes.com/News/sport/archives/2005/01/13/2003219277
+http://www.taipeitimes.com/News/sport/archives/2005/04/15/2003250634
+http://www.taipeitimes.com/News/supplement/archives/2004/06/15/2003175206
+http://www.taipeitimes.com/News/taiwan/archives/2003/10/11/2003071252
+http://www.taipeitimes.com/News/taiwan/archives/2004/09/22/2003203860
+http://www.taipeitimes.com/News/world/archives/2004/10/07/2003205889
+http://www.taipeitimes.com/News/world/archives/2005/03/23/2003247430
+http://www.taipeitimes.com/News/world/archives/2005/06/26/2003260821
+http://www.taipeitimes.com/News/world?pubdate=2005-05-08
+http://www.taipeitimes.com/news/2002/03/26/story/0000129274
+http://www.taiwandc.org/history.htm
+http://www.tajhotels.com/Luxury/TAJ%20%20PALACE%20HOTEL,NEW%20DELHI/rooms.asp
+http://www.tajik-gateway.org/index.phtml?lang=en&id=512
+http://www.takafulweb.com/easy_steps.html
+http://www.takeabreak.com.au/servicemattersmost.htm
+http://www.takeittothepeople.org/newsletter_1999.htm
+http://www.takeninhand.com/node/36
+http://www.takeourword.com/Issue051.html
+http://www.takeourword.com/Issue097.html
+http://www.takeourword.com/TOW184/page4.html
+http://www.takeovers.gov.au/display.asp?ContentID=125
+http://www.takeovers.gov.au/display.asp?ContentID=789
+http://www.takeovers.govt.nz/exemptions/en-beauty-direct.htm
+http://www.takesat.com/display.php?testid=E001
+http://www.takethepursuit.com/learning/weekly/weekly04.html
+http://www.takingfive.com/Spending_political_capital.htm
+http://www.takingitglobal.org/opps/event.html?eventid=5628
+http://www.takingitglobal.org/themes/hr/
+http://www.takingthelead.co.uk/3/BehAdv/walking_on_the_lead.htm
+http://www.takver.com/history/elections/election2001.htm
+http://www.takver.com/history/hunterlabour.htm
+http://www.takver.com/history/secsoc02.htm
+http://www.talaris.org/spotlight_empathy.htm
+http://www.taldon.org/DNov03.html
+http://www.talent2.com.au/TALENT2CORPORATE/Home/Content.aspx?PageID=NominationCommitteeCharter
+http://www.talent2.com.au/TALENT2CORPORATE/Home/Content.aspx?PageID=RemunerationCommitteeCharter
+http://www.talentbox.com/articles/acting/cb/realityoftheindustry/index2.htm
+http://www.talentmatch.com/deejaymodel
+http://www.talesofeloise.com/keenan.html
+http://www.talesoftheslayer.com/warandpeace72.htm
+http://www.talewins.com/hoots.htm
+http://www.talkaboutcomics.com/phpBB2/posting.php?mode=quote&p=48288
+http://www.talkaboutculture.com/group/soc.culture.berber/messages/25312.html
+http://www.talkaboutgovernment.com/group/alt.politics.socialism/messages/130244.html
+http://www.talkaboutmac.com/group/comp.infosystems.www.browsers.mac/messages/32968.html
+http://www.talkaboutsleep.com/sleepdisorders/Snoring_apnea_overnight.htm
+http://www.talkaboutsupport.com/group/alt.support.jaw-disorders/messages/9896.html
+http://www.talkabouttheworld.com/kidsqa.php3
+http://www.talkgold.com/forum/index.php?showtopic=20092
+http://www.talkgold.com/forum/index.php?showtopic=20092&st=0
+http://www.talkingafrica.org/
+http://www.talkinganimals.net/archives_synopses2.html
+http://www.talkingballs.co.uk/bb/viewtopic.php?p=175042
+http://www.talkingballs.co.uk/bb/viewtopic.php?t=10524&start=40
+http://www.talkingcities.co.uk/budapest_pages/sights_museums1.htm
+http://www.talkingdesktop.com/mary.htm
+http://www.talkingeconomics.co.uk/mailings.html
+http://www.talkingleaves.org/s03council.htm
+http://www.talkingpix.co.uk/Article_Metropolis.html
+http://www.talkingpointsmemo.com/archives/001996.php
+http://www.talkingpointsmemo.com/archives/003452.php
+http://www.talkingpointsmemo.com/archives/004099.php
+http://www.talkingpointsmemo.com/archives/week_2001_04_08.php
+http://www.talkingpointsmemo.com/archives/week_2001_07_01.php
+http://www.talkingpointsmemo.com/archives/week_2001_10_14.php
+http://www.talkingpointsmemo.com/archives/week_2001_12_02.php
+http://www.talkingpointsmemo.com/archives/week_2002_11_03.php
+http://www.talkingpointsmemo.com/archives/week_2003_07_06.php
+http://www.talkingpointsmemo.com/archives/week_2003_07_13.php
+http://www.talkingpointsmemo.com/archives/week_2003_08_10.php
+http://www.talkingpointsmemo.com/archives/week_2003_11_16.php
+http://www.talkingpointsmemo.com/archives/week_2003_12_28.php
+http://www.talkingpointsmemo.com/archives/week_2004_01_04.php
+http://www.talkingpointsmemo.com/archives/week_2004_01_11.php
+http://www.talkingpointsmemo.com/archives/week_2004_02_01.php
+http://www.talkingpointsmemo.com/archives/week_2004_02_22.php
+http://www.talkingpointsmemo.com/archives/week_2004_03_21.html
+http://www.talkingpointsmemo.com/archives/week_2004_03_21.php
+http://www.talkingpointsmemo.com/archives/week_2004_03_28.php
+http://www.talkingpointsmemo.com/archives/week_2004_04_04.php
+http://www.talkingpointsmemo.com/archives/week_2004_04_11.php
+http://www.talkingpointsmemo.com/archives/week_2004_04_18.php
+http://www.talkingpointsmemo.com/archives/week_2004_07_04.php
+http://www.talkingpointsmemo.com/archives/week_2004_07_18.php
+http://www.talkingpointsmemo.com/archives/week_2004_08_01.php
+http://www.talkingpointsmemo.com/archives/week_2004_08_08.php
+http://www.talkingpointsmemo.com/archives/week_2004_09_19.php
+http://www.talkingpointsmemo.com/archives/week_2004_12_05.php
+http://www.talkingpointsmemo.com/archives/week_2005_03_20.php
+http://www.talkingpointsmemo.com/archives/week_2005_05_22.php
+http://www.talkingpointsmemo.com/archives/week_2005_06_26.php
+http://www.talkingproud.us/Eagle052004.html
+http://www.talkingwithkids.org/alcohol.html
+http://www.talkingwithkids.org/television.html
+http://www.talkingwithkids.org/television/tv-as-a-tool.html
+http://www.talkmagic.co.uk/ftopic4240.php&sid=efa962596ec842f1eb29345167aaec6b
+http://www.talkmagic.co.uk/sutra28868.php&sid=efa962596ec842f1eb29345167aaec6b
+http://www.talkorigins.org/faqs/bombardier.html
+http://www.talkorigins.org/faqs/comdesc/camp.html
+http://www.talkorigins.org/faqs/credentials.html
+http://www.talkorigins.org/faqs/dating.html
+http://www.talkorigins.org/faqs/faq-misconceptions.html
+http://www.talkorigins.org/faqs/flatearth.html
+http://www.talkorigins.org/faqs/geohist.html
+http://www.talkorigins.org/faqs/homs/mitoeve.html
+http://www.talkorigins.org/faqs/speciation.html
+http://www.talkorigins.org/faqs/trueorigin/fernandez.html
+http://www.talkorigins.org/origins/feedback/aug00.html
+http://www.talkorigins.org/origins/feedback/feb05.html
+http://www.talkreason.org/articles/fixing1.cfm
+http://www.talktotom.com/
+http://www.talktotom.com/index.asp
+http://www.talktotom.com/r_mortgage-calculator_taxes.asp
+http://www.tallarmeniantale.com/MidExp-academic.htm
+http://www.tallarmeniantale.com/kurd.htm
+http://www.tallent.us/blog/default.aspx?date=2004-07-31
+http://www.tallpaul.com/music/fast-beneath-my-feet-lyrics.html
+http://www.tallwoods.com.au/1_html/r_overview.html
+http://www.tamarindwoodturning.com/tipstricks.htm
+http://www.tamba.co.uk/business-development-manager.htm
+http://www.tameyourbrain.com/weight/index1.htm
+http://www.tamhsc.edu/news/archives/cat_public_health.php
+http://www.tamilislam.com/ENGLISH/human_rights/THE%20MUSLIM%20WOMAN%20AND%20HER%20HUSBAND.htm
+http://www.tamilmatrimony.com/success/success.shtml
+http://www.tamilnet.com/art.html?catid=13&artid=489
+http://www.tamilnet.com/art.html?catid=13&artid=6326
+http://www.tamilnet.com/print.html?artid=489&catid=13
+http://www.tamingthebeast.net/articles5/email-open-rates.htm
+http://www.tamingthebeast.net/tools/autoresponder-software.htm
+http://www.tamiyausa.com/articles/feature.php?article-id=11
+http://www.tampagov.net/dept_Mayor/
+http://www.tampagov.net/dept_Recreation/Gym_and_Dance/Recruiting/Maalika/Maalika.asp
+http://www.tampagov.net/msg?ID=386
+http://www.tampareads.com/order/totalpackage/selectall.htm
+http://www.tampareads.com/testimonials/
+http://www.tampatrib.com/Features/MGBFDQMLF2E.html
+http://www.tampatrib.com/FloridaMetro/MGBUP8EC23E.html
+http://www.tampaymca.org/interbayfacility.html
+http://www.tampereclub.org/forum/vbb/index.php?target=viewmesg&select=1
+http://www.tampicohistoricalsociety.citymax.com/board/board_topic/23882/58994.htm
+http://www.tamu.edu/admissions/Undergrad/ubook01/i_chart.html
+http://www.tamu.edu/ccbn/dewitt/badam2.htm
+http://www.tamu.edu/ccbn/dewitt/davidburket3.htm
+http://www.tamu.edu/ccbn/dewitt/gonzalesrangersa-e.htm
+http://www.tamu.edu/shpe/constitution.php
+http://www.tamu.edu/univrel/aggiedaily/news/stories/03/061203-2.html
+http://www.tamucc.edu/provost/university_rules/safety/340199C101.html
+http://www.tamug.edu/hrd/Section4.htm
+http://www.tamug.edu/sail/fitness.htm
+http://www.tamuk.edu/csc/SS/senior.asp
+http://www.tananachiefs.org/jobs/dbjobsSP.asp
+http://www.tanbooks.com/doct/husband_wife.htm
+http://www.tandf.co.uk/journals/authors/cjgsauth.asp
+http://www.tandf.co.uk/journals/authors/ptarauth.asp
+http://www.tandf.co.uk/journals/authors/rctcauth.asp
+http://www.tandf.co.uk/journals/authors/rftsauth.asp
+http://www.tandf.co.uk/journals/authors/tcusauth.asp
+http://www.tandf.co.uk/journals/authors/tedlauth.asp
+http://www.tandf.co.uk/journals/authors/tqseauth.asp
+http://www.tandf.co.uk/journals/authors/tsrmauth.asp
+http://www.tandf.co.uk/journals/authors/umhnauth.asp
+http://www.tandl.leon.k12.fl.us/science/Elementary%20Science%20Curriculum%20Guides/Kindergarten%20Unit%20Summaries/final%20kA.html
+http://www.tango.org/mem04.html
+http://www.tango.org/mem05.html
+http://www.tangoseattle.com/id35.html
+http://www.tantalon.com/pete/cdgolf.htm
+http://www.tantraattahoe.com/news/03272003.htm
+http://www.tantrumtrainers.com/openingintrononmemebers/STRICTWOMEN%20FREE.htm
+http://www.taoism.net/theway/suffer.htm
+http://www.taonline.com/tappages/tappage.asp?TAPID=23
+http://www.taoofdemocracy.com/sample.html
+http://www.taos.com/resumetips.html
+http://www.taosinstitute.net/upcoming/workshopsSCP.html
+http://www.tappi.org/index.asp?pid=18653&ch=1
+http://www.tappi.org/paperu/hot_topics/
+http://www.tappin.me.uk/Linux/audio.html
+http://www.tappingmyownphone.com/FTRVegDM01.html
+http://www.tapr.org/conf_dcc2004.html
+http://www.taquitos.net/snacks.php?page_code=21
+http://www.taquitos.net/snacks.php?page_code=71
+http://www.taquitos.net/snacks.php?snack_code=529
+http://www.tard-blog.com/riti29.html
+http://www.tardsite.com/rules.htm
+http://www.targit.com/newsletter_9.thtml
+http://www.tarksheel.com/great.htm
+http://www.tarotbyjeanne.com/yourstories.htm
+http://www.tarotcardreadingsbypsychicrose.com/
+http://www.tarotforum.net/showthread.php?t=36250&page=3
+http://www.tarotplanet.com/love/default.asp
+http://www.tarottools.com/tttth/
+http://www.tarpaulinsky.com/Spring03/PTRealm.htm
+http://www.tarpley.net/bush1.htm
+http://www.tarpley.net/bush17.htm
+http://www.tartans.com/modules.php.srl.op+modload,name+EZCMS,file+index,menu+1,page_id+41.html
+http://www.tartu.ee/?lang_id=2&menu_id=13&page_id=493
+http://www.tartu.ee/print.php?lang_id=2&menu_id=13&page_id=493
+http://www.tas-arts.com/tasmania/Creative_Tasmanians_Painters.shtml
+http://www.tasa.com/tasa/pages/tasanews/pr030904.htm
+http://www.tascq.ie/sh765x4869.html
+http://www.tashian.com/carl/
+http://www.tashian.com/carl/archives/2004/09/
+http://www.tashian.com/carl/archives/2005/01/
+http://www.tashian.com/carl/archives/2005/01/nyc.html
+http://www.tashian.com/htmlguide/browser-windows.html
+http://www.tasi.ac.uk/advice/creating/colour.html
+http://www.tasi.ac.uk/advice/creating/selecpro.html
+http://www.tasi.ac.uk/advice/using/finding.html
+http://www.tasmaniatogether.tas.gov.au/board/quarterly_report_03_07_09.html
+http://www.tassos-oak.com/online/10happiness.html
+http://www.tastyjob.co.uk/frame_graduates.html
+http://www.tata.com/tata_tea/media/20020414.htm
+http://www.tata.com/tata_teleservices/media/20030818.htm
+http://www.tate.org.uk/britain/exhibitions/christmastree2004/
+http://www.tate.org.uk/modern/information.htm
+http://www.tau.ac.il/jcss/events01.html
+http://www.taubman.org.uk/family/phpgedview/individual.php?pid=I183
+http://www.taubman.org.uk/family/phpgedview/individual.php?pid=I208
+http://www.taubman.org.uk/family/phpgedview/individual.php?pid=I80
+http://www.taubman.org.uk/family/phpgedview/individual.php?pid=I81
+http://www.taubman.org.uk/family/phpgedview/individual.php?pid=I93
+http://www.taunton.com/finegardening/index.asp
+http://www.taunton.com/finegardening/pages/g00041.asp
+http://www.taunton.com/finewoodworking/pages/bw0002.asp
+http://www.tauntonschool.co.uk/home/tisc/academic/prizegiving.html
+http://www.tawawa.org/en/archives/2004_03.html
+http://www.taxanalysts.com/www/econpers.nsf/0/4a566cb166104ee9852566da006d14ea?OpenDocument
+http://www.taxanalysts.com/www/econpers.nsf/0/93b582b60925c91d85256c210076f394?OpenDocument
+http://www.taxanalysts.com/www/econpers.nsf/0/c3973ccbb8c47bea85256dba006b3b39?OpenDocument
+http://www.taxassistance.org/community_services/tax_site_locations.cfm
+http://www.taxbar.com/tr/jaggers.htm
+http://www.taxboard.gov.au/content/Charity_consultation/Appendix_7.asp
+http://www.taxcafe.co.uk/stock-market.html
+http://www.taxcut.com/taxtips/tax_changes/xfnew03.html
+http://www.taxfoundation.org/blog/
+http://www.taxfoundation.org/reincorporation.html
+http://www.taxfoundation.org/taxfreedomday/
+http://www.taxgaga.com/pages/c-taxhaha/dir-humor.html
+http://www.taxhelpattorney.com/
+http://www.taxhistory.org/Civilization/Documents/Sales/HST29008/hst29008.htm
+http://www.taxhistory.org/thp/taxingfed.nsf/0/A7EE0A7288ABFBB985256E41006CCA49?OpenDocument
+http://www.taxhistory.org/thp/thpwebsite.nsf/Web/PresidentialTaxReturns?OpenDocument
+http://www.taxhoncho.com/immigration.htm
+http://www.taxi.com/faq/ar/steaman.html
+http://www.taxi1010.com/stargate02.htm
+http://www.taxibus.org.uk/environment.html
+http://www.taximiles.com/news/display20050321.php
+http://www.taxonomywarehouse.com/resultsbypub.asp?vPubUID=40
+http://www.taxopedia.com/articles/nasd/529plans.asp
+http://www.taxotere.com/professional/oncology_resources/index.do
+http://www.taxpolicycenter.org/publications/template.cfm?PubID=900581
+http://www.taxprophet.com/faq/980111.htm
+http://www.taylor.edu/community/news/open_letter12-04-04.htm
+http://www.taylormadeshoes.co.uk/Links/
+http://www.taylormadetreasures.wahmbiz.com/instructions.htm
+http://www.taynet.co.uk/users/crisp/qc_on_qc.html
+http://www.tbca.com/boxoffice.htm
+http://www.tbcc.cc.or.us/0405ptp_aas.html
+http://www.tbcollaborative.com/Description.asp
+http://www.tbf.org/fund/fund-L2.asp?id=1468
+http://www.tbn.org/about/newsletter/index.php/169.html
+http://www.tbp.org/Chapters/Resources/PresidentsBook/PBC/PBCI.cfm
+http://www.tbray.org/ongoing/When/200x/2003/05/07/MacYear
+http://www.tbray.org/ongoing/When/200x/2003/05/08/FutureLanguage
+http://www.tbs-sct.gc.ca/Pubs_pol/dcgpubs/TBM_142/2-11-1-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/Pubs_pol/dcgpubs/TBM_142/2-11-1_e.asp
+http://www.tbs-sct.gc.ca/cmo_mfc/resources2/research/rr03_e.asp
+http://www.tbs-sct.gc.ca/gos-sog/atip-aiprp/in-ai/in-ai2005/2005-05_e.asp
+http://www.tbs-sct.gc.ca/pubs_pol/ciopubs/tb_oimp/sdimit-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/pubs_pol/ciopubs/tb_oimp/sdimit1_e.asp
+http://www.tbs-sct.gc.ca/pubs_pol/dcgpubs/ContPolNotices/cpn-apm-03-01_e.asp
+http://www.tbs-sct.gc.ca/pubs_pol/dcgpubs/TBM_142/srsap-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/pubs_pol/hrpubs/TB_8332/polfsd-avdse-010601-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/pubs_pol/hrpubs/coll_agre/ase1_lc_e.asp
+http://www.tbs-sct.gc.ca/pubs_pol/hrpubs/tb_853/tele_work-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/pubs_pol/hrpubs/tbm_11b/AAL11-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/pubs_pol/hrpubs/tbm_11b/aal11-2_e.asp
+http://www.tbs-sct.gc.ca/rma/dpr/00-01/CAPPRT00dpr/CAPPRT00dpr-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/rma/dpr/00-01/CAPPRT00dpr/CAPPRT00dpr01_e.asp
+http://www.tbs-sct.gc.ca/rma/dpr/01-02/CAPPRT/capprt0102dpr02_e.asp
+http://www.tbs-sct.gc.ca/rma/dpr/02-03/CAPPRT-TCRPAP/CAPPRT-TCRPAP03D-PR_e.asp?printable=True
+http://www.tbs-sct.gc.ca/rma/dpr/02-03/CAPPRT-TCRPAP/CAPPRT-TCRPAP03D01_e.asp
+http://www.tbs-sct.gc.ca/scripts/contracts-contrats/reports-rapports_e.asp?r=l&yr=2004&q=1
+http://www.tbs-sct.gc.ca/scripts/contracts-contrats/reports-rapports_e.asp?r=l&yr=2004&q=2
+http://www.tbs-sct.gc.ca/scripts/contracts-contrats/reports-rapports_e.asp?r=l&yr=2004&q=3
+http://www.tbsjournal.com/Archives/Fall01/fall01.html
+http://www.tc-cancer.com/forum/archive/index.php/t-1170.html
+http://www.tc.columbia.edu/academic/anthro/courses.asp
+http://www.tc.columbia.edu/international/employ/gentax.html
+http://www.tc.columbia.edu/news/article.htm?id=2672&tid=7
+http://www.tc.columbia.edu/news/article.htm?id=2808&tid=19
+http://www.tc.edu/o&l/ed-leadership/concentrations.asp?id=174
+http://www.tc.gc.ca/CivilAviation/commerce/CabinSafety/DVT.htm
+http://www.tc.gc.ca/CivilAviation/general/recavi/Instructions/Airshow/Section3.htm
+http://www.tc.gc.ca/MarineSafety/TP/mou/menu.htm
+http://www.tc.gc.ca/marinesafety%5CTP%5CTp11343%5Crecommendations-and-factors.htm
+http://www.tc.gc.ca/mediaroom/releases/nat/2004/04-gc004ae.htm
+http://www.tc.gc.ca/ship/faq/menu.htm
+http://www.tc.gc.ca/tdg/clear/part3.htm
+http://www.tc.gc.ca/tdg/clear/part7.htm
+http://www.tc.gc.ca/tdg/consult/actreview/menu.htm
+http://www.tc.umn.edu/~peikx001/Lisbon%20Conference.htm
+http://www.tc.umn.edu/~rkrueger/story_eaas.html
+http://www.tcbsitemaker.com/newcaleta/gibraltar-weddings.asp
+http://www.tcc-cci.gc.ca/rules/gen/gen_pro_1_e.htm
+http://www.tccandler.com/critical_mass_TITANIC.htm
+http://www.tcci.org/gpvids.htm
+http://www.tccsa.tc/
+http://www.tcdancers.org/aboutcontra.html
+http://www.tceponline.org/topics/self_determination.htm
+http://www.tcfb.co.uk/
+http://www.tcfp.state.tx.us/
+http://www.tcfp.state.tx.us/index.asp
+http://www.tcfp.state.tx.us/standards/standards_manual/standards_manual.asp?rule=429.211
+http://www.tcfp.state.tx.us/standards/standards_manual/standards_manual.asp?rule=439.5
+http://www.tchain.com/otoneurology/disorders/unilat/fistula.html
+http://www.tchra.org/programs/programs_main.asp?prog_id=134
+http://www.tcl.tk/cgi-bin/tct/tip/105.html
+http://www.tcl.tk/scripting/netserver.html
+http://www.tcl.tk/scripting/netserver.tml?sc_format=wider
+http://www.tcm-mec.gc.ca/tc2002/menu-en.asp
+http://www.tcm.phy.cam.ac.uk/~bdj10/
+http://www.tcmagazine.info/forums/index.php?showtopic=656&view=getnewpost
+http://www.tcmtreatment.com/images/diseases/chronic-rhinitis.htm
+http://www.tcnj.edu/~hofmann/Granby/Granby.htm
+http://www.tcoletribalrugs.com/article32RubruckTrvl.html
+http://www.tcoyf.com/library/primer006.asp
+http://www.tcpalm.com/tcp/50_martin_news/article/0,2540,TCP_1247_3313516,00.html
+http://www.tcpc.org/resources/articles/what_about.htm
+http://www.tcpc.org/resources/reviews/dishonest_church.htm
+http://www.tcpipguide.com/free/t_IPv6NDFunctionsComparedtoEquivalentIPv4Functions.htm
+http://www.tcsg.org/sfelp/kline.htm
+http://www.td.com/community/index.jsp
+http://www.td.com/fef/overview.jsp
+http://www.tdan.com/i004fe01.htm
+http://www.tdan.com/i016hy01.htm
+http://www.tdan.com/i032ht02.htm
+http://www.tdan.com/nwt_issue25.htm
+http://www.tdctrade.com/imn/03121803/architecture002.htm
+http://www.tdctrade.com/prodmag/footwear/foo200002pf.htm
+http://www.tdctrade.com/report/indprof/indprof_20703.htm
+http://www.tdh.state.tx.us/ideas/antibiotic_resistance/mrsa/athletics/departments/
+http://www.tdh.state.tx.us/newborn/hand_cah.htm
+http://www.tdhs.org/news_and_events.html
+http://www.tdi.state.tx.us/company/roc/1-2.html
+http://www.tdi.state.tx.us/company/rspcref2.html
+http://www.tdi.state.tx.us/company/wind/prod/ec/ec-01.HTML
+http://www.tdn.com/professional/view.php?id=freds_tile_n_more
+http://www.tdogs.org/girls/patches1.htm
+http://www.tdprs.state.tx.us/Adoption_and_Foster_Care/Helpful_Resources/faqadoption.asp
+http://www.tdsautomotive.com/07NewsPress/01.php?cid=51
+http://www.tdwg.org/poss_standard.html
+http://www.tea.state.tx.us/drive/defaq_teen1.html
+http://www.tea.state.tx.us/drive/orrfaq.html
+http://www.tea.state.tx.us/safedriver/faqs.html
+http://www.tea.state.tx.us/sboe/minutes/committees/2003/whole/041003.html
+http://www.tea.state.tx.us/sboe/minutes/committees/2003/whole/070903.html
+http://www.tea.state.tx.us/student.assessment/resources/online/2001/exit/writing.htm
+http://www.tea.state.tx.us/tea/statement.html
+http://www.teaandcoffee.net/0201/trade.htm
+http://www.teaandcoffee.net/0400/tea.htm
+http://www.teaandcoffee.net/0403/tea.htm
+http://www.teaandcoffee.net/0901/tea.htm
+http://www.teac.org/accreditation/audit/guidelinesforauditstrategy.asp
+http://www.teacch.com/assess.htm
+http://www.teach-nology.com/teachers/subject_matter/health/nut/
+http://www.teach-nology.com/worksheets/
+http://www.teach-scheme.org/Notes/scheme-faq.html
+http://www.teachability.strath.ac.uk/original/Resources/InductionOfStudents.html
+http://www.teachablemoment.org/high/warlanguage.html
+http://www.teachercreated.com/lessons/011221ct.shtml
+http://www.teachereducation.com/course_outlines/graduate_classroom/tp_win_sup_gradclass_outline.htm
+http://www.teachereducation.com/course_outlines/graduate_online/tp_win_sup_gradon_outline.htm
+http://www.teachereducation.com/courses.html
+http://www.teacherfiles.com/clip_art.htm
+http://www.teacherformation.org/html/rr/rejoining.cfm
+http://www.teachernet.gov.uk/educationoverview/briefing/currentstrategy/newrelationship/personalisedlearning/
+http://www.teachernet.gov.uk/management/atoz/b/
+http://www.teachernet.gov.uk/teachingandlearning/assemblies/index.cfm?mode=searchdisplay&id=32&history=keyword
+http://www.teachernet.gov.uk/teachingandlearning/library/
+http://www.teachernet.gov.uk/teachingandlearning/library/ICT/elcsandcurriculumonline/
+http://www.teachernet.gov.uk/teachingandlearning/subjects/pe/peusefullinks/
+http://www.teachernet.gov.uk/wholeschool/familyandcommunity/childprotection/usefulinformation/abuseoftrust/
+http://www.teachers.ash.org.au/aussieed/ihavetomove.htm
+http://www.teachers.ash.org.au/dnutting/germanaustralia/e/students.htm
+http://www.teachers.ash.org.au/teachereduc/PrevMoments.html
+http://www.teachers.net/gazette/AUG02/page.html
+http://www.teachers.net/gazette/JUN03/moore.html
+http://www.teachers.net/jobs/jobboard/abroad/11.25.04.20.14.55.html
+http://www.teachers.net/lessons/posts/3185.html
+http://www.teachers.org.uk/showwirearchive.php?id=1988699
+http://www.teachers.org.uk/story.php?id=3031
+http://www.teachers.org.uk/topichome.php?id=48
+http://www.teachers.tv/subjectBlockResources.do?transmissionBlockId=111405&zoneId=2&transmissionProgrammeId=114828
+http://www.teachers.work.co.nz/archive_Nov_2004.htm
+http://www.teachersandfamilies.com/sped/gt/415590-gt-legal.html
+http://www.teachersdomain.org/3-5/sci/phys/mfe/bbforces/
+http://www.teachersdomain.org/6-8/sci/life/stru/singlecell/
+http://www.teachersdomain.org/9-12/sci/life/cell/singlecell/
+http://www.teachersdomain.org/K-2/sci/phys/descwrld/house/
+http://www.teachersfirst.com/hangups.html
+http://www.teachersfirst.com/sped/gt/415590-gt-legal.html
+http://www.teachersfirst.com/tutorial/webintro.htm
+http://www.teachersnetwork.org/teachnetnyc/flammia/moving.htm
+http://www.teachest.com/terms.html
+http://www.teachfitness.com/asppages/whatsnew.asp
+http://www.teachhealth.com/
+http://www.teachingcitizenship.org.uk/page.php?title=News&section=news&section2=conf&page=_misc_docs/conf_04_info
+http://www.teachingenglish.org.uk/think/methodology/intercultural1.shtml
+http://www.teachingenglish.org.uk/think/write/process_write.shtml
+http://www.teachingenglish.org.uk/try/prontry/pron_activites.shtml
+http://www.teachingenglish.org.uk/try/resourcetry/resource_activities.shtml
+http://www.teachingenglish.org.uk/try/speaktry/speaking_activities.shtml
+http://www.teachingheart.net/gingerbreadman.html
+http://www.teachingheart.net/moosebooks.html
+http://www.teachingideas.co.uk/pe/contents.htm
+http://www.teachingonline.org/languageartsindex.html
+http://www.teachingprofessor.com/conference/sundaypaper.html
+http://www.teachingtennis.com/site/body1.htm
+http://www.teachingtochangelives.com/questions.html
+http://www.teachnet.com/how-to/organization/orgrec.html
+http://www.teachnet.com/lesson/langarts/charlotte061799.html
+http://www.teachnet.com/powertools/take5/
+http://www.teachnet.ie/mhickey/2004/aims.html
+http://www.teachopolis.org/arcade/director_game_dev.htm
+http://www.teachpoetry.com/poems.html
+http://www.teaconnexions.com/news_2.html
+http://www.teagasc.ie/research/journalarchives/vol41no12002abstracts.htm
+http://www.teako170.com/glossary2.html
+http://www.tealart.com/2003/04/
+http://www.tealiciousteacompany.com/Tea+Articles/
+http://www.tealit.com/agents.htm
+http://www.team-penning.com/sitting_the_horse.htm
+http://www.teamamericapac.org/0-ta-ad-news-campaignsandelections.shtml
+http://www.teamap.com/tearooms/russian_tea_time_211.html
+http://www.teamap.com/tearooms/tea___tiques_1188.html
+http://www.teamap.com/tearooms/tea_upon_chatsworth_1412.html
+http://www.teamap.com/tearooms/thyme_for_tea_870.html
+http://www.teamarete.com/passing.html
+http://www.teambath.com/news/index.cfm
+http://www.teambuildingthatworks.com/clients.htm
+http://www.teamcuisine.com/
+http://www.teamethno-online.org/Issue1/OrgFail.html
+http://www.teamflow.com/tutl108.html
+http://www.teamhealthnet.com/news/2004/southland.htm
+http://www.teamonetickets.com/concerts/concerts/no-doubt-tickets.html
+http://www.teamorion.com/live/results-cars.asp?id=136
+http://www.teamorion.com/live/results-cars.asp?id=137
+http://www.teamorion.com/live/results-cars.asp?id=140
+http://www.teamorion.com/live/results-cars.asp?id=141
+http://www.teamspirit.org.uk/wh__peak.htm
+http://www.teamsportsuniforms.com/uniform_screen_printing.htm
+http://www.teamster.org/divisions/Port/testimony.htm
+http://www.teamtalkmag.com/2002/club/tyrone_sfc/clannangael-loughmacrory.htm
+http://www.teamterrier.com/BLabonte.html
+http://www.teamuse.com/article_010502.html
+http://www.teamuse.com/article_030601.html
+http://www.teamwarfare.com/
+http://www.teara.govt.nz/1966/W/WardSirJosephGeorgePcGcmgBart/WardSirJosephGeorgePcGcmgBart/en
+http://www.tearfund.org/News/Latest+news/Supporters+urged+to+bring+more+pressure+in+wake+of+debt+decision.htm
+http://www.tearfund.org/News/Press+release+archive/November+2003/Hungry+for+more+than+just+food.htm
+http://www.tearsofacop.com/police/articles/constant.html
+http://www.teathers.com/page.cfm?pageName=tax_eff_eis
+http://www.teatrocalamari.com/past1.html
+http://www.tech-expo.com.ua/eng/press.htm
+http://www.tech-forums.net/computer/topic/42385.html
+http://www.tech-sol.net/humor/marriage.htm
+http://www.tech.plym.ac.uk/soc/research/hcsd/hcsd2.htm
+http://www.tech.plymouth.ac.uk/soc/research/mabs/jbradford/octopush/rules.htm
+http://www.techbuilder.org/views/showArticle.jhtml?articleId=164901072&printableArticle=true
+http://www.techcentralstation.com/010405A.html
+http://www.techcentralstation.com/011805A.html
+http://www.techcentralstation.com/012605E.html
+http://www.techcentralstation.com/020305D.html
+http://www.techcentralstation.com/021704F.html
+http://www.techcentralstation.com/030305.html
+http://www.techcentralstation.com/030703A.html
+http://www.techcentralstation.com/060205C.html
+http://www.techcentralstation.com/082003A.html
+http://www.techcentralstation.com/090804D.html
+http://www.techcentralstation.com/102904N.html
+http://www.techcentralstation.com/110204C.html
+http://www.techcentralstation.com/112904A.html
+http://www.techcentralstation.com/121002E.html
+http://www.techcentralstation.com/121704E.html
+http://www.techcentralstation.com/122203C.html
+http://www.techcu.com/Resources/Learning/Retirement/earlystart.html
+http://www.techdenver.com/modules.php?name=News&file=article&sid=165&mode=nested
+http://www.techdirt.com/articles/20040903/0053246.shtml
+http://www.techdirt.com/articles/20041124/1126205.shtml
+http://www.techfak.uni-bielefeld.de/bcd/Lectures/steffensk.html
+http://www.techfak.uni-kiel.de/matwis/amat/def_en/kap_2/advanced/t2_4_1.html
+http://www.techgnosis.com/neopaganism.html
+http://www.techimo.com/forum/t133012.html
+http://www.techinfocenter.com/members/research/news/_004309/
+http://www.techlawjournal.com/home/newsbriefs/2001/12c.asp
+http://www.techlawjournal.com/telecom/80411fcc.htm
+http://www.techlawjournal.com/topstories/2004/20041120.asp
+http://www.techlearning.com/outlook/columns/profdev.jhtml
+http://www.techlearning.com/showArticle.jhtml?articleID=17301675
+http://www.techlearning.com/story/showArticle.jhtml?articleID=10810516
+http://www.techlearning.com/story/showArticle.jhtml?articleID=12800472
+http://www.techlearning.com/story/showArticle.jhtml?articleID=164300806
+http://www.techlearning.com/story/showArticle.jhtml?articleID=17701367
+http://www.techmind.org/lcd/
+http://www.technet.org/news/dc/
+http://www.technewsworld.com/story/33670.html
+http://www.technewsworld.com/story/33907.html
+http://www.technewsworld.com/story/34097.html
+http://www.technewsworld.com/story/34571.html
+http://www.technewsworld.com/story/36627.html
+http://www.technewsworld.com/story/37269.html
+http://www.technewsworld.com/story/42752.html
+http://www.technewsworld.com/story/43506.html
+http://www.technewsworld.com/story/43627.html
+http://www.technewsworld.com/story/43702.html
+http://www.technicianonline.com/story.php?id=010028
+http://www.technn.com/archives/months/july/July7.html
+http://www.technofile.com/cars/racing_course.html
+http://www.technogypsy.net/March2005.htm
+http://www.technology-research.com/oss.htm
+http://www.technology-schools.com/privacy-policy.php
+http://www.technologydecisions.com/backissue/0100/01.asp
+http://www.technologydecisions.com/backissue/0101/2_1_01_32.asp
+http://www.technologydecisions.com/backissue/0403/issue/4_14_03_88.asp
+http://www.technologydecisions.com/backissue/0899/05.asp
+http://www.technologydecisions.com/backissue/1202/12_17_02_23.asp
+http://www.technologyexecutivesclub.com/02172005bios.htm
+http://www.technologyforums.com/ngb/breakouts.asp
+http://www.technologyreview.com/articles/02/03/wo_jenkins032902.asp?p=0
+http://www.technologyreview.com/articles/02/03/wo_jenkins032902.asp?p=1
+http://www.technologyreview.com/articles/02/06/qa0602.asp?p=1
+http://www.technologyreview.com/articles/04/10/frauenfelder1004.asp?p=1
+http://www.technologyreview.com/articles/05/01/ap/ap_2010205.asp?p=1
+http://www.technologyreview.com/articles/05/01/issue/cohen0105.asp?p=1
+http://www.technologyreview.com/articles/05/06/ap/ap_061505.asp
+http://www.technologyreview.com/articles/05/06/issue/feature_creators.asp?p=0
+http://www.technologyreview.com/index.asp
+http://www.technologyvault.co.uk/news/Archives/1/2-2003.shtml
+http://www.technorati.com/
+http://www.technorati.com/tag/Love+Poems
+http://www.technorati.com/tags/cars
+http://www.technos.net/tq_06/1cetron.htm
+http://www.technos.net/tq_10/1koch.htm
+http://www.technos.net/tq_11/2emmans.htm
+http://www.technovelgy.com/ct/Science-Fiction-News.asp?NewsNum=311
+http://www.techography.com/article.php?story=20041218120817883
+http://www.techonline.com/community/ed_resource/feature_article/20324
+http://www.techonline.com/community/ed_resource/feature_article/20324?print
+http://www.techonline.com/community/ed_resource/feature_article/5430
+http://www.techonline.com/community/home/37904
+http://www.techpolicybank.org/candidateanalysis.html
+http://www.techreview.com/articles/03/11/garber1103.asp
+http://www.techschooldirectory.com/states/oregon-schools.htm
+http://www.techsoup.org/news/sub_btcdetails.cfm?btcissueid=57
+http://www.techspot.com/
+http://www.techspot.com/vb/all/windows/t-15735-Microsoft-ready-to-comply-if-appeal-is-lost.html
+http://www.techspot.com/vb/archive/index/t-105.html
+http://www.techspot.com/vb/archive/index/t-933.html
+http://www.techspot.com/vb/showthread.php?goto=lastpost&t=377
+http://www.techspot.com/vb/topic14261.html
+http://www.techspot.com/vb/topic23365.html
+http://www.techspot.com/vb/topic4438.html
+http://www.techspot.com/vb/topic933.html
+http://www.techsupportalert.com/best_paid_tech_support_sites.htm
+http://www.techsupportforum.com/
+http://www.techsupportforums.com/showthread.php?t=33082
+http://www.techsupportforums.com/showthread.php?t=33082&page=1
+http://www.techtransfer.harvard.edu/Entrepreneurs.html
+http://www.techtree.com/techtree/jsp/article.jsp?article_id=51404&cat_id=533
+http://www.techtree.com/techtree/jsp/index.jsp?file=forum/viewtopic.jsp&section=forum&subsection=Hardware&topic_id=2184&forum_id=1332
+http://www.techtree.com/techtree/jsp/showstory.jsp?storyid=56973
+http://www.techtree.com/techtree/jsp/showstory.jsp?storyid=57073
+http://www.techwarelabs.com/community/viewtopic.php?t=11570
+http://www.techweb.com/showPressRelease.jhtml?articleID=X339781&CompanyId=3
+http://www.techweb.com/tech/ebiz/46802719
+http://www.techworld.com/networking/features/index.cfm?featureid=681&Page=1&pagePos=19
+http://www.techzonez.com/forums/printthread.php?t=13906
+http://www.techzonez.com/forums/showthread.php?t=13906&page=4&pp=15
+http://www.teckcominco.com/careers/05-01-trail.htm
+http://www.tecnomen.com/tecnomessage/mar2003/ready?Parent=tmo&Page=mar2003&L2=mar2003200
+http://www.tecnu.net/electroplating_equipment_products.htm
+http://www.tecom.ae/law/law_18.htm
+http://www.tecsys.com/company/management.shtml
+http://www.tedcomo.com/html/Autobiography/chap7/chap25/chap25.html
+http://www.tedi.uq.edu.au/TEN/TEN_previous/TEN4_99/ten4_cody.html
+http://www.tedi.uq.edu.au/teaching/GradAttributes/phase2.html
+http://www.tedndt.com/usedequipment.html
+http://www.teechart.net/support/modules.php?name=News&file=article&sid=7
+http://www.teem.org.uk/findresource/element/classroom/printer_friendly?element_id=1718&content_id=2208
+http://www.teem.org.uk/findresource/element/classroom/printer_friendly?element_id=1718&content_id=2208&session_id=&topic_id=
+http://www.teem.org.uk/findresource/element/classroom?element_id=1528&session_id=&topic_id=
+http://www.teem.org.uk/findresource/element/classroom?element_id=1718&session_id=&topic_id=
+http://www.teem.org.uk/findresource/element/classroom?element_id=1718&session_id=s_14&topic_id=
+http://www.teem.org.uk/findresource/element/classroom?element_id=917&session_id=&topic_id=
+http://www.teem.org.uk/findresource/topic/element/classroom?element_id=1718&content_id=2208&session_id=&topic_id=
+http://www.teem.org.uk/findresource/topic/element/classroom?element_id=1718&session_id=&topic_id=
+http://www.teenadviceonline.org/archive/186.html
+http://www.teenagechickensoup.com/IA4T_News.php?ID=20
+http://www.teenanalyst.com/business/findcapital.html
+http://www.teenfad.ph/library/fadsource/winbattlewithin.htm
+http://www.teenhealthcentre.com/articles/publish/article_90.shtml
+http://www.teenhealthcentre.com/skills/main.htm
+http://www.teenink.com/Past/2004/February/17456.html
+http://www.teenink.com/Past/2004/September/18101.html
+http://www.teenink.com/Past/2005/January/18548.html
+http://www.teenlink.org/All-Hotels-Cities-TX-Dallas-129965-1-1.htm
+http://www.teenlink.org/All-Hotels-Cities-WA-Seattle-150213-1-1.htm
+http://www.teenpregnancy.org/resources/reading/tips/tips.asp
+http://www.teenreads.com/community/question/q010718.asp
+http://www.teenreads.com/reviews/038532748X-excerpt.asp
+http://www.teenreads.com/reviews/0440241413-excerpt.asp
+http://www.teens4hire.org/parents.asp
+http://www.teensarenotadisease.com/0,2669,SAV-0103040522,FF.html
+http://www.teenwire.com/ask/2003/as_20030625p593_boner.asp
+http://www.teenwire.com/infocus/2005/if_20050218p344_pressure.asp
+http://www.teenwire.com/infocus/articles/if_20010810p115.asp
+http://www.teething-teeth.com/Ear_Infection.html
+http://www.teetimegirl.com/pages/4/page4.html?refresh=1119547067657
+http://www.teevee.org/archive/1997/09/09/
+http://www.tefvater.org/html/cody.html
+http://www.tehelka.com/home/20041009/operation/investigation25.htm
+http://www.tek-tips.com/faqs.cfm?fid=2806
+http://www.tek-tips.com/links.cfm?pid=602
+http://www.tek-tips.com/userthreads.cfm?handle=torturedmind
+http://www.tek-tips.com/userthreads.cfm?handle=ylan
+http://www.tek-tips.com/viewthread.cfm?qid=1007828&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=253687
+http://www.tek-tips.com/viewthread.cfm?qid=253687&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=338717&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=401497&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=428302&page=6
+http://www.tek-tips.com/viewthread.cfm?qid=873974&page=4
+http://www.tek-tips.com/viewthread.cfm?qid=915172&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=943154&page=9
+http://www.tek-tips.com/viewthread.cfm?qid=969373&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=969649&page=7
+http://www.tek-tips.com/viewthread.cfm?qid=976400&page=1
+http://www.tek-tips.com/viewthread.cfm?qid=980658&page=10
+http://www.tek-tips.com/viewthread.cfm?qid=984347&page=2
+http://www.tek-tips.com/viewthread.cfm?qid=984347&page=3
+http://www.tek-tips.com/viewthread.cfm?qid=986597
+http://www.tek-tips.com/viewthread.cfm?qid=991570&page=1
+http://www.tekno.dk/subpage.php3?article=889&toppic=kategori12&language=uk
+http://www.tekotago.ac.nz/InternationalCentre/Accommodation_1.cfm
+http://www.tektonics.org/af/cocmusic.html
+http://www.tektonics.org/davincicrude.htm
+http://www.tektonics.org/guest/fallacies.html
+http://www.tekumel.com/game_advent.TCP.html
+http://www.tele-pro.co.uk/shop/howto.htm
+http://www.telecharge.com/tickets_Mamma_Mia_NY_City_Cadillac_Winter_Garden_all.aspx
+http://www.telecomsadvice.org.uk/glossary/t.html
+http://www.telecomweb.com/reports/lucent/news14.htm
+http://www.telecost.co.uk/Products/callog_manage3.htm
+http://www.telediscount.co.uk/index2.php
+http://www.telefonica.es/textolegal/textolegal_ingles.html
+http://www.telegoons.org/history_4_running_jumping.htm
+http://www.telegraph.co.uk/arts/main.jhtml?xml=/arts/2004/07/24/baoly24.xml&sSheet=/arts/2004/07/24/ixartright.html
+http://www.telegraph.co.uk/arts/main.jhtml?xml=/arts/2004/11/29/btchas27.xml&sSheet=/arts/2004/11/29/ixartleft.html
+http://www.telegraph.co.uk/arts/main.jhtml?xml=/arts/2004/12/31/ftspend31.xml&sSheet=/arts/2005/01/01/ixartleft.html
+http://www.telegraph.co.uk/arts/main.jhtml?xml=/arts/2005/03/10/bajapan09.xml
+http://www.telegraph.co.uk/money/main.jhtml?xml=/money/2004/12/05/ccuni05.xml&menuId=242&sSheet=/money/2004/12/05/ixcoms.html
+http://www.telegraph.co.uk/money/main.jhtml?xml=/money/2005/02/06/ccout06.xml&sSheet=/money/2005/02/06/ixcoms.html
+http://www.telegraph.co.uk/news/main.jhtml?xml=%2Fnews%2F2002%2F07%2F29%2Fnsquad29.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2003/05/19/wirq19.xml/
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/06/05/wcia05.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/06/13/wguan13.xml&sSheet=/news/2004/06/13/ixworld.html
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/07/07/nwmd07.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/07/18/nbut118.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/08/03/uviewspeed.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/10/04/utory.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2005/01/30/wirq30.xml&sSheet=/portal/2005/01/30/ixportaltop.html
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2005/03/19/nblair19.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2005/06/30/nrail30.xml
+http://www.telegraph.co.uk/news/main.jhtml?xml=/news/2005/06/30/nrail30.xml&sSheet=/portal/2005/06/30/ixportaltop.html
+http://www.telegraph.co.uk/opinion/main.jhtml?xml=/opinion/2004/04/24/dp2401.xml
+http://www.telegraph.co.uk/property/main.jhtml?xml=/property/2005/02/15/prat15.xml
+http://www.telegraph.co.uk/sport/main.jhtml?view=DETAILS&grid=&xml=%2Fsport%2F2004%2F04%2F12%2Fsoathl12.xml
+http://www.telegraph.co.uk/travel/main.jhtml?xml=/travel/2005/04/02/etfsrilanka02.xml&sSheet=/travel/2005/04/02/ixtrvhome.html
+http://www.telegraphindia.com/1050424/asp/look/story_4639621.asp
+http://www.telegraphindia.com/1050506/asp/bengal/story_4703681.asp
+http://www.telenor.com/about/history/chronology/
+http://www.teleologic.com/crghome/b5sea3.html
+http://www.telephoneroad.com/GuideUSA.html
+http://www.telepocalypse.net/archives/000335.html
+http://www.telepocalypse.net/archives/000337.html
+http://www.teleport-city.com/departures/scotland.html
+http://www.teleread.org/computerworld.htm
+http://www.telespan.com/buyersguide/glossb.html
+http://www.teletoon.com/static/en/copyright.php
+http://www.televisionheaven.co.uk/hisaskey.htm
+http://www.televisionheaven.co.uk/history4.htm
+http://www.televisionheaven.co.uk/overview5.htm
+http://www.televisionpersonalities.co.uk/covers.htm
+http://www.televisionwithoutpity.com/story.cgi?show=151&story=8065&limit=&sort=
+http://www.telford.gov.uk/Living/RegisterOffice/WeddingsWithinTelford.htm
+http://www.telhost.net/realestate-online/lakechelanvacationrentals/listings/details.asp?id=7
+http://www.telhost.net/realestate-online/lakechelanvacationrentals/listings/details.asp?id=90
+http://www.telhost.net/realestate-online/lakechelanvacationrentals/listings/details.asp?id=91
+http://www.tellingnicholas.com/email_1.html
+http://www.tellmehowto.net/article25.html
+http://www.tellmewhereonearth.com/Web%20Pages/Weirdest/Weirdest_Page_1.htm
+http://www.telluride360.com/weblog/2004/11/
+http://www.telos-systems.com/techtalk/gldefs.htm
+http://www.telstate.com/direct-XML-feed.html
+http://www.teluguone.com/health/index.jsp?filename=healthychild/inteligence.htm
+http://www.tem.dtu.dk/en/mmt/structure/
+http://www.tempe.gov/citymgr/weekly/06012003.htm
+http://www.tempe.gov/water/faqs.htm
+http://www.tempesttea.com/menus/january2005.htm
+http://www.temple.com/engineeredwood/sidingwarranty.html
+http://www.temple.edu/bulletin/ugradbulletin/ucd/ucd_americanstudies.html
+http://www.temple.edu/temple_times/97/3/6/state.html
+http://www.temple.edu/upe/constbylaws.htm
+http://www.templehealth.org/capsule/jan_14_05/jan1405_nycu.htm
+http://www.templekickbox.freeserve.co.uk/
+http://www.templemountfaithful.org/News/20020409.htm
+http://www.templeofdreams.com/center6.html
+http://www.templeton.org/science_and_religion/conferences.asp
+http://www.templeton.org/science_and_religion/hai_conferences.asp
+http://www.templeton.org/sir_john_templeton/szmag.asp
+http://www.templetonpress.org/book.asp?book_id=58
+http://www.templetonpress.org/recentreviews_detail.asp?book_id=34
+http://www.tempointeraktif.com/majalah/jap/cov-1.html
+http://www.ten-ten.org/rules.html
+http://www.ten3.co.nz/ent/modules.php?name=News&file=article&sid=39
+http://www.tenant.net/Court/Hcourt/
+http://www.tenbyartsfest.co.uk/tenby_arts_festival_programme.asp
+http://www.tenc.net/articles/pumphrey/Srebrenica.html
+http://www.tendonitis.net/
+http://www.tennessean.com/education/archives/05/01/65333727.shtml
+http://www.tennessean.com/education/archives/05/01/65868802.shtml/
+http://www.tennessean.com/features/living/archives/04/01/44627515.shtml
+http://www.tennessean.com/local/archives/04/11/62170538.shtml
+http://www.tennessean.com/sii/00/11/23/labontes23.shtml
+http://www.tennessean.com/sii/00/11/29/coe29.shtml
+http://www.tennesseeallianceforprogress.org/
+http://www.tennis-warehouse.com/feedback.html?pcode=CRT
+http://www.tennis.info/ITCSemi.asp
+http://www.tennisexpress.com/Tennis-Clothesi.html
+http://www.tennisinternet.com/indianatp.htm
+http://www.tennisresortsonline.com/trofiles/SeaColony.cfm
+http://www.tensiletest.com/prod08.htm
+http://www.tentmaker.org/articles/TrueBasisOfRedemption-APAdams.html
+http://www.teosofia.com/Mumbai/7204speech.html
+http://www.tera.org/peer/TCEQ/TCEQPanel.htm
+http://www.terasen.com/Inc/_Global/PrivacyPolicy.htm
+http://www.terasengas.com/_Global/PrivacyPolicy.htm
+http://www.terc.edu/handsonIssues/f94/math.sci.curr.html
+http://www.terebess.hu/english/okakura.html
+http://www.teriin.org/division/bbdiv/mb/mb_o.htm
+http://www.teriin.org/division/eetdiv/cres/cres.htm
+http://www.teriin.org/features/art180.htm
+http://www.teriin.org/terragreen/issue48/essay.htm
+http://www.teriin.org/urban/urban.htm
+http://www.term-life-insurance.name/
+http://www.termpapers-on-file.com/
+http://www.terra.edu/about/helpfulinks/bgrimmettsuccess.asp
+http://www.terracetalkireland.com/profiles/jack_doyle.htm
+http://www.terracon.com/np_newsl_Fall03.htm
+http://www.terraditoscana.com/default.aspx?lpg=travelog_storie&obj=petrelli_calciocostume
+http://www.terragame.com/operation.html
+http://www.terramedia.co.uk/Chronomedia/years/1929.htm
+http://www.terranature.org/deepsea_coral.htm
+http://www.terranature.org/trawlingScientists_ban.htm
+http://www.terrapinn.com/2005/mfe/Custom_4963.stm
+http://www.terrascope.org/helps.html
+http://www.terrestrialball.com/offerings/2004/09/
+http://www.terrificpets.com/forum/14428.asp
+http://www.terrificpets.com/forum/14814_2.asp
+http://www.terroranalysis.com/story/108132.html
+http://www.terry.uga.edu/~dawndba/4500FailingBlkBoys.html
+http://www.terrylove.com/forums/archive/index.php/t-700.html
+http://www.terrylove.com/forums/showthread.php?goto=lastpost&t=700
+http://www.terrylove.com/forums/showthread.php?t=700
+http://www.terrylove.com/wwwboard/messages2/41747.html
+http://www.terrypepper.com/lights/michigan/michcityold/
+http://www.terrypepper.com/lights/michigan/pentwater/
+http://www.terrypepper.com/lights/superior/duluth-s-rear/
+http://www.terrysouthern.com/texts/t_strange.htm
+http://www.tertullian.org/rpearse/lucian/peregrinus.htm
+http://www.tertullian.org/rpearse/scanned/strauss.htm
+http://www.tes.co.uk/Caption_competition/
+http://www.tes.co.uk/caption+competition
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1664685&path=/scotland/scotland+-+opinion/&threadPage=6
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1664685&path=/scotland/scotland+-+opinion/&threadPage=6&messagePage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1719685&path=/New+teachers/&threadPage=74
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1719685&path=/New+teachers/&threadPage=76
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1719685&path=/new+teachers/&threadPage=73&messagePage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1719685&path=/new+teachers/&threadPage=74&messagePage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=1903313&path=/geography/&threadPage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2041852&path=/scotland/scotland+-+opinion/&threadPage=6&messagePage=4
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2041852&path=/scotland/scotland+-+opinion/&threadPage=7&messagePage=4
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2047252&path=/prospective+student+teachers/&threadPage=&messagePage=3
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2063174&path=/Opinion/&threadPage=6&messagePage=2
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2064370&path=/new+teachers/&threadPage=&messagePage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2089476&path=/sen/&threadPage=6
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2104391&path=/scotland/scotland+-+opinion/&threadPage=&messagePage=1
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2110396&path=/prospective+student+teachers/&threadPage=&messagePage=2
+http://www.tes.co.uk/section/staffroom/thread.aspx?story_id=2110396&path=/prospective+student+teachers/&threadPage=1&messagePage=2
+http://www.tes.co.uk/teacher/write_away_2005/
+http://www.tescodvdrental.com/visitor/product_detail.html?product_id=1428
+http://www.tescolegalstore.com/buy_to_let_kit.asp
+http://www.teslasociety.com/
+http://www.tesm.edu/faculty/pubs/writings/standingfirm
+http://www.tess.dk/euroread/combatingfailure.htm
+http://www.tess.dk/socraodl/course98/odl/m5-kt1r.htm
+http://www.test.org.uk/archives/000612.html
+http://www.testcafe.com/lov/
+http://www.testicle.com/reo.htm
+http://www.testing.com/writings/status/status.html
+http://www.testinginstitute.com/display.php?id=e_t_d_MH
+http://www.testmagic.com/forum/topic.asp?TOPIC_ID=1409
+http://www.testprepresearch.com/sat/
+http://www.tethys.org/activity_con.htm
+http://www.tetrapakusa.com/pilot_plant.html
+http://www.texansforpeace.org/
+http://www.texasart.com/store/browse/005/cat_id/280/Kid-s-Korner-Browse-by-Activity-Cool-Accessories.htm
+http://www.texasbeyondhistory.net/harrell/discovering.html
+http://www.texasbeyondhistory.net/kids/ask3.html
+http://www.texasdavid.com/south-austin-rent-list.html
+http://www.texasfairtrade.org/article.php?story=20041110103457173&mode=print
+http://www.texasfreeway.com/Dallas/new_freeway/161/161_dmn.shtml
+http://www.texashealth.org/main.asp-level-2-id-C6750B719383429889B6C18AE0C4E023
+http://www.texashousing.org/txlihis/discussit/phforum/Messages/aboutthesection8waitingli.html
+http://www.texashousingcounselor.org/txlihis/siterebuild/homeless/legislation.lasso
+http://www.texasinsider.org/Articles/596/1/Out_with_the_IRS%E2%80%A6Re-thinking_Taxes_in_America.aspx
+http://www.texasisd.com/
+http://www.texasmedicalrangers.com/faq.html
+http://www.texasmonthly.com/clickngo/B
+http://www.texasmonthly.com/mag/issues/1981-09-01/countrynotes.php
+http://www.texasmonthly.com/mag/issues/1992-10-01/feature3.php
+http://www.texasmonthly.com/mag/issues/1997-10-01/btl.php
+http://www.texasmonthly.com/mag/issues/2000-03-01/feature4.php
+http://www.texasmonthly.com/mag/issues/2001-11-01/feature.php
+http://www.texasmonthly.com/mag/issues/authors/evansmith.php
+http://www.texasobserver.org/showArticle.asp?ArticleID=1748
+http://www.texasrugbyunion.com/template.php
+http://www.texasrugbyunion.com/template.php?sid=11
+http://www.texasscottishfestival.com/athletics.htm
+http://www.texomaland.com/articles.asp?cat=25&id=1157
+http://www.textbookleague.org/103feyn.htm
+http://www.textbookleague.org/26flat.htm
+http://www.textbookleague.org/44smlpx.htm
+http://www.textfiles.com/sex/aaden.txt
+http://www.textile-art.com/mf.html
+http://www.textiles.com/s/textiles/tsindex.html
+http://www.textlinkbrokerage.com/overview.html
+http://www.textravaganza.com/phpBB2/viewtopic.php?start=0&t=1752
+http://www.textualcreations.ca/Book%20Page.htm
+http://www.tf.org/tf/violence/firearms/Intl/unlong2.shtml
+http://www.tfaoi.com/aa/3aa/3aa311.htm
+http://www.tfaoi.com/aa/4aa/4aa216.htm
+http://www.tfaoi.com/newsm1/n1m509.htm
+http://www.tfgtransfer.com/home.html
+http://www.tfhrc.gov/pavement/ltpp/reports/03066/
+http://www.tfhrc.gov/pubrds/04mar/02.htm
+http://www.tfhrc.gov/pubrds/janpr/cost.htm
+http://www.tfhrc.gov/pubrds/summer94/p94su26.htm
+http://www.tfhrc.gov/safety/hsis/pubs/04082/
+http://www.tfhrc.gov/safety/pedbike/articles/wayolife.htm
+http://www.tfn.org/issues/boardofed/dmnpac.htm
+http://www.tformers.com/reviews.php?op=showcontent&id=569
+http://www.tfp.org/TFPForum/TFPCommentary/looking_upon_a_nation_divided.html
+http://www.tga.gov.au/devices/devendtrans.htm
+http://www.tga.gov.au/devices/fs_class1.htm
+http://www.tga.gov.au/docs/html/dentalreg.htm
+http://www.tga.gov.au/docs/html/pmcris.htm
+http://www.tga.gov.au/docs/html/tga/tgal.htm
+http://www.tga.gov.au/docs/html/tganews/news36/iris.htm
+http://www.tga.gov.au/docs/html/tgo/tgo2_2004.htm
+http://www.tga.gov.au/gene/gtreview.htm
+http://www.tgarden.demon.co.uk/writings/articles/2004/041109demos.html
+http://www.tgci.com/magazine/00winter/egiving.asp
+http://www.tgci.com/magazine/03summer/read1.asp
+http://www.tgci.com/magazine/95fall/standard1.asp
+http://www.tgci.com/magazine/98winter/credit3.asp
+http://www.tgcrossroads.org/news/archive.asp?aid=342
+http://www.tgeller.com/speaking/
+http://www.tgnp.org/0gbi_refuting.htm
+http://www.tgorski.com/Prevention/Heavy_Drinking_During_Pregnancy_Remains_Unchanged.htm
+http://www.tgwu.org.uk/Templates/News.asp?NodeID=89629&int1stParentNodeID=42438&int2ndParentNodeID=89397&Action=Display
+http://www.tgwu.org.uk/Templates/News.asp?NodeID=89629&int1stParentNodeID=89397&int2ndParentNodeID=89397&Action=Display
+http://www.tha.nsw.gov.au/formsonline/agreement.html
+http://www.thai-language.com/dict/
+http://www.thaiairways.com/Bookings_Schedules/Terms_Conditions/1atermcon.htm
+http://www.thailand-travel.net/index.cfm?menuid=54
+http://www.thailand-travel.net/index.cfm?menuid=77
+http://www.thailander.com/entertainment/soundtracks/index1.html
+http://www.thailandguidebook.com/provinces/i_northeast.html
+http://www.thailasikcenter.com/english/eyes1.htm
+http://www.thailasikcenter.com/english/eyes2.htm
+http://www.thaipro.com/shop/2u-thomas%20tank%20vehicle-B000065CML.htm
+http://www.thaismile.co.uk/index.php?page=244&mode=view&id=74
+http://www.thaiwave.com/benjarong/phuket-property/
+http://www.thaiworldview.com/thaiwife.htm
+http://www.thanasis.com/demeter.htm
+http://www.thanksdarling.com/
+http://www.thanksgiving.org/2us.html
+http://www.thankyoutony.com/messages12.html
+http://www.thankyouviggo.com/write/being.php
+http://www.tharpa.com/background/dealing-with-fear.htm
+http://www.thatliberalmedia.com/archives/003273.html
+http://www.thatliberalmedia.com/archives/cat_new_york_times.html
+http://www.thatqueergeorgiaboy.com/wordpress/
+http://www.thatsracin.com/mld/thatsracin/10970832.htm
+http://www.thatsracin.com/mld/thatsracin/archives/3421901.htm
+http://www.thatsracin.com/mld/thatsracin/archives/3421901.htm?template=contentModules/printstory.jsp
+http://www.the-aps.org/education/k-12misc/k-12link.htm
+http://www.the-aps.org/pa/action/letter.htm
+http://www.the-aps.org/sections/compar/spring03.htm
+http://www.the-catbird-seat.net/CarlyleGroup.htm
+http://www.the-catbird-seat.net/NASA.htm
+http://www.the-dma.org/cgi/dispnewsstand?article=2859+++++
+http://www.the-dma.org/cgi/dispnewsstand?article=3254+++++
+http://www.the-dma.org/guidelines/ftctelemarketing.shtml
+http://www.the-eggman.com/iotw.html
+http://www.the-eggman.com/writings/keystep1.html
+http://www.the-equinox.org/vol1/no9/eqi09005.html
+http://www.the-exiles.org/shop.htm
+http://www.the-federalist-society.org/Documents/Anti-Federalist/AntiFed-47.htm
+http://www.the-gadgeteer.com/treo650-usage-article.html
+http://www.the-gadgeteer.com/vbbs/showthread.php?threadid=426
+http://www.the-hit-parade.co.uk/jsh.html
+http://www.the-improvisor.com/web%20ARTICLES/Stringboards.html
+http://www.the-infoshop.com/study/pf23000_food_allergy_toc.html
+http://www.the-kennel-club.org.uk/discoverdogs/utility/u954.htm
+http://www.the-kingdom.ie/news/story.asp?j=16785
+http://www.the-leader.com/about_us/
+http://www.the-leader.com/articles/2004/08/14/sports/sports03.txt
+http://www.the-leaky-cauldron.org/MTarchives/007138.php
+http://www.the-lighted-garden.com/id42.html
+http://www.the-magicbox.com/forums/archive/index.php/t-2398.html
+http://www.the-modeling-agency.com/training/wm.htm
+http://www.the-newsroom.com/june2004.htm
+http://www.the-office.com/learningstation/index2.htm
+http://www.the-office.com/office/exec2.htm
+http://www.the-office.com/womens-network/differnt.htm
+http://www.the-old-sea-dog.net/d7.html
+http://www.the-op.com/cast/George%252C+Sr.
+http://www.the-orb.net/encyclop/culture/towns/york1.html
+http://www.the-piedpiper.co.uk/th14(c).htm
+http://www.the-rc-zone.com/forums/showthread.php?t=3234
+http://www.the-saudi.net/saudi-arabia/saudi-constitution.htm
+http://www.the-shadow-lord.freeola.com/CHAPT10.htm
+http://www.the-signal.com/News/ViewStory.asp?storyID=6217
+http://www.the-sot.com/newsdesk.html
+http://www.the-spoiler.com/ACTION/Lucas.arts/the.phantom.menace.1/otoh.htm
+http://www.the-spoiler.com/Sinjin/ADARK4/ad4text.htm
+http://www.the-testament-of-truth.com/
+http://www.the-tidings.com/2005/0204/mterolink.htm
+http://www.the-underdogs.org/games/p/paradroid/files/paradroid.txt
+http://www.the-week.com/25jun12/currentevents_article10.htm
+http://www.the-zodiac.co.uk/aut/cosbiography.htm
+http://www.the519.org/programs/trans/access_project/scenarios.shtml
+http://www.the7thfire.com/Politics%20and%20History/sheeple_analyst/lying_little_laura_demonstrates_stepford_lies.htm
+http://www.theabsolute.net/minefield/kraus.html
+http://www.theacagroup.com/customerservice.htm
+http://www.theactivenetwork.com/story.cfm?story_id=10365&sidebar=459&category=press_innews
+http://www.theadultcollege.org/holder.asp?title=Open%20College%20Access%20Courses&content=oc_access.html
+http://www.theadventuresofchester.com/archives/2004/11/changes_to_army.html
+http://www.theadventuresofchester.com/archives/military_history/
+http://www.theadvocates.org/freeman/920706.html
+http://www.theadvocates.org/freeman/920806.html
+http://www.theadvocates.org/liberator/vol-05-num-14.htm
+http://www.theafa.org/faqs/afa_workingwithyourivfcenter.html
+http://www.theage.com.au/articles/2002/09/18/1032054865036.html
+http://www.theage.com.au/articles/2003/04/16/1050172643920.html
+http://www.theage.com.au/articles/2003/06/03/1054406187366.html
+http://www.theage.com.au/articles/2003/06/28/1056683948069.html
+http://www.theage.com.au/articles/2003/08/17/1061059722677.html
+http://www.theage.com.au/articles/2003/08/30/1062194751122.html
+http://www.theage.com.au/articles/2004/01/29/1075340772236.html?from=storyrhs
+http://www.theage.com.au/articles/2004/04/08/1081326875258.html?from=storyrhs
+http://www.theage.com.au/articles/2004/06/17/1087245046213.html?from=storylhs
+http://www.theage.com.au/articles/2004/06/26/1088145012286.html?from=storylhs
+http://www.theage.com.au/articles/2004/08/03/1091476492295.html?from=storylhs
+http://www.theage.com.au/articles/2004/08/15/1092508264793.html?from=storyrhs
+http://www.theage.com.au/articles/2004/10/02/1096527990641.html?from=storylhs
+http://www.theage.com.au/articles/2004/10/09/1097261840888.html?from=storylhs
+http://www.theage.com.au/articles/2004/10/10/1097406426302.html
+http://www.theage.com.au/articles/2004/10/15/1097784037970.html
+http://www.theage.com.au/articles/2004/11/01/1099262786331.html?from=storylhs
+http://www.theage.com.au/articles/2004/11/10/1100021878926.html?from=storylhs
+http://www.theage.com.au/articles/2005/01/14/1105582695875.html?from=top5
+http://www.theage.com.au/articles/2005/01/17/1105810836703.html
+http://www.theage.com.au/news/Asia-tsunami/Mother-storms-ward-to-seize-Baby-81/2005/02/02/1107228768552.html
+http://www.theage.com.au/news/Cricket/Submission-does-little-to-enhance-Pakistanis-lot/2004/12/29/1103996611829.html
+http://www.theage.com.au/news/Cricket/Warne-hits-back-at-former-teammates-criticism/2005/06/08/1118123897077.html
+http://www.theage.com.au/news/Editorial/The-most-agonising-choice-of-all/2004/07/31/1091080482636.html
+http://www.theage.com.au/news/Education-News/Crossing-the-line/2005/06/03/1117568376016.html
+http://www.theage.com.au/news/Election-2004/Latham-ALP-knows-what-it-stands-for/2004/10/20/1097951769299.html
+http://www.theage.com.au/news/Leon-Gettler/Race-to-part-newage-codgers-from-oldage-cash/2004/06/08/1086460291404.html
+http://www.theage.com.au/news/Music/Such-a-nice-boy/2005/06/02/1117568311975.html
+http://www.theage.com.au/news/Music/The-ones-that-got-away/2004/12/15/1102787131445.html
+http://www.theage.com.au/news/National/Live-WWII-bomb-found-in-shop/2005/04/29/1114635735210.html
+http://www.theage.com.au/news/National/Only-a-few-thousand-will-feel-land-tax-rise-Brumby/2004/12/12/1102786954561.html
+http://www.theage.com.au/news/National/Spurned-bushies-spur-mates-to-town/2005/06/08/1118123897742.html
+http://www.theage.com.au/news/National/Station-fiasco-heading-to-court/2004/07/14/1089694424491.html
+http://www.theage.com.au/news/Opinion/Few-take-Iraq-elections-seriously/2005/01/20/1106110872378.html
+http://www.theage.com.au/news/Opinion/Why-opposition-to-GE-crops-is-based-on-sound-science/2004/02/22/1077384634002.html
+http://www.theage.com.au/news/Pamela-Bone/Attention-all-pollies-leave-God-out-of-it/2005/05/22/1116700590321.html
+http://www.theage.com.au/news/Science/Cutting-it-fine/2004/07/31/1091080451054.html
+http://www.theage.com.au/news/World/Charles-the-love-story/2005/03/25/1111692623170.html
+http://www.theage.com.au/news/World/Opposition-rejects-talks-over-rigged-poll/2004/11/24/1101219619190.html?from=storylhs
+http://www.theage.com.au/news/World/Voters-queue-for-election-cliffhanger/2004/11/03/1099362175688.html
+http://www.theage.com.au/news/corby-case/corby-sacks-indonesian-legal-team/2005/06/24/1119321901856.html
+http://www.theage.com.au/text/articles/2005/02/02/1107228764474.html
+http://www.theage.com.au/yoursay1/2004/01/14/
+http://www.theage.com.au/yoursay1/2004/01/14/index9.html
+http://www.theagitator.com/archives/022103.php
+http://www.thealamofilm.com/article_28.shtml
+http://www.thealamofilm.com/artman/publish/article_28.shtml
+http://www.thealarmclock.com/mt/archives/2005/05/live_longer_a_f.html
+http://www.thealders.net/blogs/archive/001600.html
+http://www.thealestle.com/news/2003/10/14/Lifestyles/Learning.A.Language.Involves.Students.Spending.Time.Outside.The.Classroom-528027.shtml
+http://www.theallineed.com/ad-business-5/business-005.htm
+http://www.theallineed.com/ad-business-6/business-016.htm
+http://www.theallineed.com/ad-business-6/business-027.htm
+http://www.theallineed.com/ad-business-7/business-003.htm
+http://www.theallineed.com/ad-health-1/health-016.htm
+http://www.theallineed.com/ad-marketing-3/marketing-014.htm
+http://www.theallineed.com/ad-self-help-1/self-help-026.htm
+http://www.theallineed.com/ad-self-help-4/self-help-004.htm
+http://www.theallineed.com/ad-self-help-7/self-help-023.htm
+http://www.theallineed.com/health/05010203.htm
+http://www.theallineed.com/news/0409/283570.htm
+http://www.theallineed.com/news/0409/283668.htm
+http://www.theallineed.com/news/0410/134735.htm
+http://www.theallineed.com/news/0410/193206.htm
+http://www.theallineed.com/news/0411/028090.htm
+http://www.theallineed.com/news/0411/059869.htm
+http://www.theallineed.com/news/0412/083317.htm
+http://www.theallineed.com/news/0412/291431.htm
+http://www.theallineed.com/news/0412/301984.htm
+http://www.theallineed.com/news/0412/309529.htm
+http://www.theallineed.com/news/0501/012176.htm
+http://www.theallineed.com/news/0501/013439.htm
+http://www.theallineed.com/news/0501/017574.htm
+http://www.theallineed.com/news/0501/073140.htm
+http://www.theallineed.com/news/0501/076221.htm
+http://www.theallineed.com/news/0501/077261.htm
+http://www.theallineed.com/news/0501/078182.htm
+http://www.theallineed.com/news/0501/287204.htm
+http://www.thealternativebookshop.com/featuredspecials.html
+http://www.thealtitudenews.com/SnowSculpture.html
+http://www.theamericanoutdoorsman.com/deep-sea-fishing-tips.htm
+http://www.theangryliberal.com/06-03-02.htm
+http://www.theanswerbank.co.uk/Article225.html
+http://www.theanswerbank.co.uk/Body_and_Soul/Question116818.html
+http://www.theanswerbank.co.uk/Body_and_Soul/Question119854.html
+http://www.theanswerbank.co.uk/Film_and_TV/
+http://www.theanswerbank.co.uk/Info/TermsOfUse.asp
+http://www.theanswerbank.co.uk/Parenting/Question119386.html
+http://www.thearclink.org/forlibrarians/Arc%20Module%201%20transcript.htm
+http://www.thearcofco.org/waitinglist.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES1.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES211.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES225.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES235.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES236.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES57.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES6.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES62.html
+http://www.theargus.co.uk/the_argus/body__soul/HEALTH_FEATURES84.html
+http://www.thearmedcitizen.com/gunpages/glock27.htm
+http://www.theartconnection.org/
+http://www.theartgallery.com.au/Cezanne.html
+http://www.theartnewspaper.com/artlaw/artlaw.asp
+http://www.theasa.org/asa03/panels/saunders.htm
+http://www.theasc.com/magazine/dec97/titanic/chs/pg2.htm
+http://www.theassetmanager.com/seg.shtml
+http://www.theaterpro.com/chekhov.html
+http://www.theatlantic.com/doc/200104/brooks
+http://www.theatlantic.com/doc/200310/bowden
+http://www.theatlantic.com/doc/200401/fallows
+http://www.theatlantic.com/doc/200405u/int2004-05-25
+http://www.theatlantic.com/doc/200407/fallows
+http://www.theatlantic.com/doc/200409/schwarz
+http://www.theatlantic.com/doc/200409u/int2004-09-07
+http://www.theatlantic.com/doc/200410/schwarz
+http://www.theatlantic.com/doc/200411/langewiesche
+http://www.theatlantic.com/doc/200501/powers
+http://www.theatlantic.com/doc/200503u/nj_powers_2005-03-08
+http://www.theatlantic.com/doc/200503u/nj_schneider_2005-03-01
+http://www.theatlantic.com/doc/200503u/nj_taylor_2005-03-08
+http://www.theatlantic.com/doc/200505/henry
+http://www.theatlantic.com/doc/200507/carson
+http://www.theatlantic.com/doc/prem/200501/powers
+http://www.theatlantic.com/foreign/unwire/crossette2004-05-10.htm
+http://www.theatlantic.com/issues/2001/02/letters.htm
+http://www.theatlantic.com/issues/2001/09/fallows.htm
+http://www.theatlantic.com/issues/2002/02/beatty.htm
+http://www.theatlantic.com/issues/2002/02/epstein.htm
+http://www.theatlantic.com/issues/2002/04/hitchens.htm
+http://www.theatlantic.com/issues/2002/05/bowden.htm
+http://www.theatlantic.com/issues/2002/09/mann.htm
+http://www.theatlantic.com/issues/2003/01/flanagan.htm
+http://www.theatlantic.com/issues/2003/01/sotu-address.htm
+http://www.theatlantic.com/issues/2003/05/lewis.htm
+http://www.theatlantic.com/issues/2003/06/hitchens.htm
+http://www.theatlantic.com/issues/2003/07/rubin.htm
+http://www.theatlantic.com/issues/2004/03/fallows.htm
+http://www.theatlantic.com/issues/2004/03/flanagan.htm
+http://www.theatlantic.com/issues/2004/04/buckley.htm
+http://www.theatlantic.com/issues/38may/desales.htm
+http://www.theatlantic.com/issues/40jun/alger.htm
+http://www.theatlantic.com/issues/65dec/medicine.htm
+http://www.theatlantic.com/issues/86jun/beatty.htm
+http://www.theatlantic.com/issues/95sep/abortion/abortion.htm
+http://www.theatlantic.com/issues/96dec/cote/cote.htm
+http://www.theatlantic.com/issues/96feb/media/media.htm
+http://www.theatlantic.com/issues/96may/nitrous/nitrous.htm
+http://www.theatlantic.com/issues/97dec/rails.htm
+http://www.theatlantic.com/issues/97jul/computer.htm
+http://www.theatlantic.com/issues/98apr/dutta2.htm
+http://www.theatlantic.com/issues/98may/photo.htm
+http://www.theatlantic.com/issues/99jul/9907sudanslaves2.htm
+http://www.theatlantic.com/issues/99oct/9910drucker.htm
+http://www.theatlantic.com/politics/crime/wilson.htm
+http://www.theatlantic.com/politics/decision/gap2.htm
+http://www.theatlantic.com/politics/defense/moskos.htm
+http://www.theatlantic.com/politics/foreign/anarchy.htm
+http://www.theatlantic.com/politics/foreign/mearsh.htm
+http://www.theatlantic.com/politics/immigrat/kennf.htm
+http://www.theatlantic.com/politics/immigrat/miles2f.htm
+http://www.theatlantic.com/politics/race/fish.htm
+http://www.theatlantic.com/politics/race/steele.htm
+http://www.theatlantic.com/unbound/flashbks/blacked/washaw.htm
+http://www.theatlantic.com/unbound/interviews/int2002-09-05.htm
+http://www.theatlantic.com/unbound/poetry/soundings/jonson.htm
+http://www.theatrefx.com/
+http://www.theatrehistory.com/british/shakespeare003.html
+http://www.theatrehistory.com/irish/sheridan001.html
+http://www.theatremonkey.com/HAMMERSMITHbooking.htm
+http://www.theatremonkey.com/OPENAIRbooking.htm
+http://www.theaustralian.news.com.au/common/story_page/0,5744,12001739%255E16941,00.html
+http://www.theaustralian.news.com.au/sectionindex1/0,5745,au_weird%255E%255ETEXT,00.html
+http://www.theauthorsstudio.org/belgrave/
+http://www.theava.com/04/0407-iraq.html
+http://www.theaviary.com/s1295-30.shtml
+http://www.thebackpacker.com/articles/tipsandhow/art8.php
+http://www.thebakken.org/education/SciMathMN/time-space/time-space.htm
+http://www.thebalrogslair.com/coverage/104883324.shtml
+http://www.thebandblady.com/article12-b-and-b-inspections.html
+http://www.thebandfar.com/
+http://www.thebanker.com/
+http://www.thebanker.com/news/fullstory.php/aid/1653/Finding_business_opportunity,_whatever_the_setting.html
+http://www.thebanker.com/news/fullstory.php/aid/1719/Ready_for_stage_two_reforms.html
+http://www.thebanker.com/news/fullstory.php/aid/2110/Whatever_happened_to_joined-up_banking_.html
+http://www.thebaptistpage.com/Nquite/NQ_reading/Tozer_Pursuit/pursuit_06.htm
+http://www.thebatt.com/news/2003/04/28/FrontPage/Coalition.Arrests.Key.Players.In.Continued.Attempt.To.Govern-513721.shtml
+http://www.thebatt.com/news/2004/03/26/News/Students.Express.Concerns.Over.Proposed.Tuition.Hike-642435.shtml
+http://www.thebci.org/BCAWR1.htm
+http://www.thebeatlesarecoming.com/blog.html
+http://www.thebeautifulgame.co.uk/viewarticle.php?id=1369&type=15
+http://www.thebenefitnetwork.com/sample.htm
+http://www.thebestcasescenario.com/
+http://www.thebestoil.com/fastlube.htm
+http://www.thebirdfoodshop.co.uk/seedfeeders.html
+http://www.thebirdman.org/Index/Lbtn/Lbtn-LNeilSmithLtr.html
+http://www.thebirdman.org/Index/Relig/Relig-IsBirdmanTheAntichrist.html
+http://www.thebitchgirls.us/archives/2005_06.html
+http://www.theblackdog.net/linuspauling.htm
+http://www.theblackrepublican.net/
+http://www.thebluelizardmovie.com/services.html
+http://www.thebluestate.com/article05-08-04pentagon.htm
+http://www.thebmc.co.uk/indoor/comps/rules.htm
+http://www.thebody.com/Forums/AIDS/Couples/Archive/Practicing/Q142042.html
+http://www.thebody.com/Forums/AIDS/SafeSex/Archive/PreventionSexual/Q157441.html
+http://www.thebody.com/Forums/AIDS/Treatment/Current/Q24832.html
+http://www.thebody.com/encyclo/science_overview.html
+http://www.thebody.com/iapac/feb03/sustainable.html
+http://www.thebody.com/kaiser/2004/jul14_04/johns_hiv.html
+http://www.thebody.com/markking/richard.html
+http://www.thebody.com/pieters/strength.html
+http://www.thebody.com/pinf/wise_words/mar05/personal.html
+http://www.thebody.com/shernoff/article1.html
+http://www.thebody.com/shernoff/chemical.html
+http://www.thebody.com/shernoff/neuro.html
+http://www.thebody.com/tpan/septoct_03/positive_father.html
+http://www.thebodypositive.org/
+http://www.thebodyworker.com/oils.htm
+http://www.thebookcellar.com/main/keyword/?searchStr=Biology
+http://www.thebookplace.co.uk/
+http://www.thebookplace.com/
+http://www.thebostonchannel.com/employmentadvice/4549388/detail.html
+http://www.thebostonchannel.com/newscenter5/4612105/detail.html
+http://www.thebrainstrust.co.uk/pretzel.php
+http://www.thebreastcaresite.com/EEndCom/USAmoena/Homepage.nsf/0/fc43b96d3118c09005256ac200013e3f?OpenDocument
+http://www.thebreeze.org/supplements/Sports03/sports4.shtml
+http://www.thebritishmuseum.ac.uk/education/africa/further.html
+http://www.thebritishmuseum.ac.uk/gr/debate.html
+http://www.thebulletin.org/article.php?art_ofn=jf00panofsky
+http://www.thebulletin.org/article.php?art_ofn=jf99renner
+http://www.thebulletin.org/article.php?art_ofn=ma03stober
+http://www.thebulletin.org/article.php?art_ofn=ma99wright
+http://www.thebulletin.org/article.php?art_ofn=mj03prados
+http://www.thebulletin.org/article.php?art_ofn=nd01mueller
+http://www.thebulletin.org/article.php?art_ofn=nd03richelson
+http://www.thebulletin.org/article.php?art_ofn=sep90louria
+http://www.thebulletin.org/article.php?art_ofn=so99cumings
+http://www.thecall.co.uk/Scarborough.htm
+http://www.thecanadianencyclopedia.com/index.cfm?PgNm=TCE&ArticleId=A0003112
+http://www.thecanadianencyclopedia.com/index.cfm?PgNm=TCE&Params=M1ARTM0010408
+http://www.thecanadianencyclopedia.com/index.cfm?PgNm=TCE&Params=M1ARTM0012589
+http://www.thecanadianencyclopedia.com/index.cfm?PgNm=TCE&Params=M2ARTM0012699
+http://www.thecanadianencyclopedia.com/index.cfm?PgNm=TCE&Params=U1ARTU0001258
+http://www.thecannon.ca/viewpoint_details.php?id=591
+http://www.thecanteen.com/night2.html
+http://www.thecarbontrust.co.uk/energy/pages/events.asp
+http://www.thecarolinachannel.com/
+http://www.thecarpetbaggerreport.com/
+http://www.thecarpetbaggerreport.com/archives/4379.html
+http://www.thecarpetbaggerreport.com/archives/4428.html
+http://www.thecarpetbaggerreport.com/archives/4479.html
+http://www.thecatholicspirit.com/archives.php?article=574
+http://www.thecaveonline.com/APEH/thirtyyearswar.html
+http://www.thecbc.org/redesigned/research_display.php?id=58
+http://www.thecenter.ucla.edu/harassmid.html
+http://www.thechannelinsider.com/article2/0,1759,1676355,00.asp
+http://www.thechannelinsider.com/article2/0,1759,1676608,00.asp
+http://www.thecheers.org/article_720_Office_Space_and_the_Occasional_Well-Placed_Object_Lesson.html
+http://www.thechestore.com/site-original/CheWebSite7A/CheText/MayDaySpeech.html
+http://www.thechildrenstrust.org.uk/fundraising/events.html
+http://www.thechilli.com/articles/profiles/people/014_richardFarleigh.asp
+http://www.thechristianexpositor.org/page83.html
+http://www.thecitizennews.com/finding%20your%20folks/fyf2004/fyf040227.html
+http://www.thecitizennews.com/main/archive-000206/fp-04.html
+http://www.thecitymission.org/ministries.html
+http://www.thecitymission.org/youth.html
+http://www.theclaycenter.org/education/accessfund.asp?mode=text
+http://www.theclimategroup.org/index.php?pid=568
+http://www.thecoast.ca/letters.html
+http://www.thecoffeecritic.com/fusion3/html/getting_to_know_us.htm
+http://www.thecoh.org/christian_ed.htm
+http://www.thecollegetrack.com/stayingin/paying.html
+http://www.thecommonwealth.org/Templates/Internal.asp?NodeID=141330
+http://www.thecommunicationsbusiness.com/about.html
+http://www.thecornerhouse.org.uk/item.shtml?x=51967
+http://www.thecornerhouse.org.uk/item.shtml?x=52016
+http://www.thecosmicconnections.com/ChurchoftheCreator.html
+http://www.thecoughlincompany.com/clients.html
+http://www.thecouriermail.news.com.au/breakingnews/
+http://www.thecouriermail.news.com.au/businessowner/story/0,9998,11314119-36437,00.html
+http://www.thecouriermail.news.com.au/common/story_page/0,5936,12116693%255E3102,00.html
+http://www.thecowl.com/news/2002/10/10/WinterSportsPreview/Mens-Basketball.Basketball.Looks.To.Bounce.Back-295035.shtml
+http://www.thecreativeinvestor.com/
+http://www.thecreativeinvestor.com/ViewTopic39816-21.html
+http://www.thecrystalcityshops.com/docs/dining.html
+http://www.thecurrentonline.com/news/2002/11/04/ArtsAndEntertainment/The-Village.Idiots-314095.shtml
+http://www.thedailystar.com/news/stories/2002/10/14/crop.html
+http://www.thedailystar.com/news/stories/2002/11/15/grass.html
+http://www.thedailystar.com/news/stories/2004/01/21/bud.html
+http://www.thedailystar.com/news/stories/2004/10/07/board.html
+http://www.thedailystar.com/opinion/columns/2004/11/20/ems.html
+http://www.thedailystar.com/opinion/columns/simonson/
+http://www.thedailystar.com/sports/2001/08/21/spheat.html
+http://www.thedailystar.net/
+http://www.thedailystar.net/2004/04/03/
+http://www.thedailystar.net/law/200311/02/
+http://www.thedailystar.net/law/2004/04/02/queriess.htm
+http://www.thedailystar.net/law/2004/08/03/campaign.htm
+http://www.thedailystar.net/law/2004/10/01/queries.htm
+http://www.thedailystar.net/lifestyle/2004/09/03/centre.htm
+http://www.thedanteclub.com/canto.html
+http://www.thedatafarm.com/blog/default.aspx?date=2003-12-14
+http://www.theddt.com/viewnews.cgi?category=1&id=1104821640
+http://www.theddt.com/viewnews.cgi?category=1&id=1105925987
+http://www.thedeakins.com/Sellers.html
+http://www.thedebate.org/thedebate/headlines.asp
+http://www.thedenverchannel.com/employment/746355/detail.html
+http://www.thedenverchannel.com/news/3324715/detail.html
+http://www.thediabetesblog.com/
+http://www.thediabetesblog.com/bloggers/paul_chaney/
+http://www.thedigitalbits.com/articles/robertharris/harris070102.html
+http://www.thedigitalbits.com/articles/robertharris/harris102504.html
+http://www.thedigitalbits.com/editorial/bz100298.html
+http://www.thedigitalhub.com/property/developer.asp
+http://www.thedinkum.com/issues/dink49s.htm
+http://www.thedispensingoptician.com/OpticalConditions.htm
+http://www.thedissidentfrogman.com/dacha/001572.html
+http://www.thedmonline.com/vnews/display.v/ART/2004/12/02/41af19c2b2558
+http://www.thedmonline.com/vnews/display.v/ART/2005/01/25/41f649455d3f6
+http://www.thedmonline.com/vnews/display.v/ART/2005/03/08/422dc52086ba7
+http://www.thedmonline.com/vnews/display.v/ART/2005/06/16/42b19a338b5bd
+http://www.thedmonline.com/vnews/display.v/ART/2005/06/16/42b19a338b5bd?template=pda
+http://www.thedoctors.com/reference/1996-2002/hmolawsuits.asp
+http://www.thedoctors.com/risk/specialty/pathology/J3226.asp
+http://www.thedoctorsdoctor.com/diseases/carney_complex.htm
+http://www.thedoctorslounge.net/forums/backup/topic-849.html
+http://www.thedoctorwillseeyounow.com/articles/bioethics/medrecords_4/
+http://www.thedoctorwillseeyounow.com/articles/nutrition/coloncan_11/
+http://www.thedogwhisperer.co.uk/rachaels.htm
+http://www.thedonovan.com/
+http://www.thedonovan.com/archives/004119.html
+http://www.thedonovan.com/archives/004134.html
+http://www.thedonovan.com/archives/004148.html
+http://www.thedonovan.com/archives/week_2004_07_11.html
+http://www.thedrawingstudio.org/Faculty/Rush_essays/fall03.htm
+http://www.theduffhouseroyalgolfclub.co.uk/golf-scotland/course.php
+http://www.theeagle.com/businesstechnology/012305ponzi.php
+http://www.theeagle.com/faithvalues/columnists/012905chabot.php
+http://www.theeagle.com/health/021705hospice.php
+http://www.theeagle.com/spotlight/music/2004articles/040804sethjames.htm
+http://www.theeaglesview.org/church/ecceden.html
+http://www.theecologist.org/archive_detail.asp?content_id=316
+http://www.theecologist.org/article.html?article=484
+http://www.theeditors.com/pricing-info.htm
+http://www.theenglandproject.net/mt/archives/000897.html
+http://www.theenvironmentsite.org/Eco_Blog/
+http://www.theenvironmentsite.org/Eco_Blog/index.php?view=10
+http://www.theepochtimes.com/news/5-1-20/25881.html
+http://www.theexecutivescloset.com/Jazzed_Up_Business_Casual.htm
+http://www.theexplorersguild.com/
+http://www.thefabricator.com/Articles/Fabricating_Exclusive.cfm?ID=359
+http://www.thefabricator.com/Articles/Tube_and_Pipe_Article.cfm?ID=23
+http://www.thefarmer.co.zw/headlines_18_march_2002.htm
+http://www.thefeature.com/article?articleid=100109
+http://www.thefeature.com/article?articleid=101703
+http://www.thefellowship.info/News/040614Prayer.icm
+http://www.theferrett.com/showarticle.php?Rant=39
+http://www.thefigtree.org/summer05images/CheneyUMCmission.html
+http://www.thefinancials.com/bookglossary.html
+http://www.thefineline.org/wtc/
+http://www.thefire.org/index.php/article/5248.html
+http://www.thefire.org/index.php/article/5382.html
+http://www.thefire.org/index.php/article/5461.html
+http://www.thefire.org/index.php/article/5632.html
+http://www.thefire.org/index.php/article/5819.html
+http://www.thefire.org/index.php/case/647.html
+http://www.thefire.org/index.php/torch/
+http://www.thefiringline.com/Misc/library/kates.html
+http://www.thefishbowl.com/fishbowl/realdata/wickedly-perfect-012005.php
+http://www.theflashgames.com/Fighting_Games.html
+http://www.theflourishingcompany.com/pages/vineLISTENING.htm
+http://www.thefoodbank.ca/2004_thanksgiving_fooddrive.shtml
+http://www.thefoodemporiumshoponline.com/termsAndConditions.aspx
+http://www.thefoodsection.com/foodsection/dining_out/
+http://www.thefootballforum.net/forums/lofiversion/index.php?t39949.html
+http://www.theforce.net/books/bookcovers/
+http://www.thefourthrail.com/reviews/critiques/060605/quickcritiques.shtml
+http://www.thefourthrail.com/reviews/critiques/071502/sidekicksthesubstitute.shtml
+http://www.thefreecountry.com/utilities/partitioneditors.shtml
+http://www.thefreedictionary.com/
+http://www.thefreedictionary.com/affinity
+http://www.thefreedictionary.com/colour
+http://www.thefreedictionary.com/economic
+http://www.thefridayproject.co.uk/talk/archive/index.php/t-1419.html
+http://www.thefrontlines-hlg.com/
+http://www.thefullercv.com/careers/redundancy.asp
+http://www.thefurrymonkey.co.uk/jokes_cancer.htm
+http://www.thefurrymonkey.co.uk/month_april04.htm
+http://www.thefurrymonkey.co.uk/picc.htm
+http://www.thefurtrapper.com/astorians.htm
+http://www.thefutoncritic.com/cgi/gofuton.cgi?action=showatch&id=crossing_over
+http://www.thefutoncritic.com/cgi/pr.cgi?id=20050616cbs01
+http://www.thefword.org.uk/features/2002/04/fighting_back_self_defence_for_women_girls
+http://www.thegaltherald.com/sport64.shtml
+http://www.thegamehunter.co.uk/casino-review/all-uk-casino-reviews.html
+http://www.thegardenhelper.com/terrarium.html
+http://www.thegateway.org/browse/makesearch?past=keywords%7CNASA%7C%7Cyes%7CNASA%7C*keywords%7CScale%7C%7Cyes%7CScale%7C*
+http://www.thegeezerbrigade.com/
+http://www.thegenealogytree.com/howard-cuzzins/earliest-knowns.htm
+http://www.thegibraltarmagazine.com/article_detail2.asp?id=13
+http://www.thegibraltarmagazine.com/gibconnect.asp
+http://www.thegillerprize.ca/newsroom.htm
+http://www.theglasgowstory.com/storyf.php
+http://www.theglassceiling.com/looking2/lo1_36.htm
+http://www.theglasslab.com/
+http://www.theglazine.com/
+http://www.theglimpse.com/newsite/viewarticle2.asp?articleid=3
+http://www.theglitteringeye.com/archives/000509.html
+http://www.theglobalfund.org/en/about/board/fifth/openingspeechfeachem/
+http://www.theglobalfund.org/en/about/board/fourth/openingspeechfeachem/
+http://www.theglobalfund.org/en/about/road/history/default.asp
+http://www.theglobalist.com/DBWeb/StoryId.aspx?StoryId=2955
+http://www.theglobalist.com/DBWeb/StoryId.aspx?StoryId=3166
+http://www.theglobalist.com/DBWeb/StoryId.aspx?StoryId=3805
+http://www.theglobalist.com/DBWeb/StoryId.aspx?StoryId=3954
+http://www.theglobalist.com/DBWeb/StoryId.aspx?StoryId=4270
+http://www.theglobalsite.ac.uk/justpeace/110shaw.htm
+http://www.theglobeandmail.com/series/primeministers/
+http://www.theglobeandmail.com/servlet/ArticleNews/TPStory/LAC/20010308/BTECON/TPTravel/
+http://www.theglobeandmail.com/servlet/ArticleNews/TPStory/LAC/20050618/ROMANTIC18/TPTravel/?pageRequested=all
+http://www.theglobeandmail.com/servlet/ArticleNews/freeheadlines/LAC/20050616/CFL16/sports/Sports
+http://www.theglobeandmail.com/servlet/story/LAC.20050616.CFL16/TPStory/TPSports/
+http://www.theglobeandmail.com/servlet/story/RTGAM.20050209.wxsrrrspsmall09/BNStory/specialSmallBusiness/
+http://www.theglobeandmail.com/servlet/story/RTGAM.20050518.wcomment0519/BNStory/National/
+http://www.theglobeandmail.com/servlet/story/RTGAM.20050613.wjackson0613/BNStory/International/
+http://www.theglobeandmail.com/servlet/story/RTGAM.20050615.wxwillis15/BNStory/Entertainment
+http://www.theglobeandmail.com/servlet/story/RTGAM.20050617.wxkids0618/BNStory/specialTravel/?pageRequested=all
+http://www.thegoodsleepstore.com/insomnia_cure_natural_sleep_aid_product_info.htm
+http://www.thegoodsteward.com/article.php3?articleID=885
+http://www.thegreatstory.org/Bigpicture1.html
+http://www.thegreenbutton.com/default.aspx
+http://www.thegsba.org/
+http://www.theguardians.com/space/untreaties.htm
+http://www.thegunzone.com/fff.html
+http://www.thegunzone.com/rec.guns-charter.html
+http://www.thegunzone.com/sob_is_bad.html
+http://www.thehaca.com/Manuals/FullPSoDtext.htm
+http://www.thehackworths.com/archives/category/preggo-land/
+http://www.theharrowgroup.com/articles/20030616/20030616.htm
+http://www.theharrowgroup.com/articles/20030915/20030915.htm
+http://www.theharrowgroup.com/articles/20031027/20031027.htm
+http://www.thehearingaide.com/reviews/comic_reviews/s/supermanredson/174.php
+http://www.thehelper.net/forums/forumdisplay.php?s=&forumid=16
+http://www.thehelper.net/forums/showthread.php?goto=lastpost&t=13465
+http://www.thehelper.net/forums/showthread.php?p=88544
+http://www.thehelper.net/forums/showthread.php?p=88544&mode=linear
+http://www.thehelper.net/forums/showthread.php?p=88544&mode=threaded
+http://www.thehelper.net/forums/showthread.php?s=&threadid=13465
+http://www.thehelper.net/forums/showthread.php?t=12567&goto=nextnewest
+http://www.thehelper.net/forums/showthread.php?t=13465
+http://www.thehelpgroup.org/training.htm
+http://www.thehighroad.org/library/acron.html
+http://www.thehighsign.net/archives/review/city_of_god.html
+http://www.thehindubusinessline.com/2005/02/05/07hdline.htm
+http://www.thehindubusinessline.com/businessline/blbby/stories/2004042700070400.htm
+http://www.thehindubusinessline.com/businessline/iw/2001/07/22/stories/0222b101.htm
+http://www.thehindubusinessline.com/iw/2003/10/12/stories/2003101200431400.htm
+http://www.thehindubusinessline.com/mentor/2005/01/10/stories/2005011000401100.htm
+http://www.thehindubusinessline.com/praxis/pr0202/02020740.htm
+http://www.thehistorynet.com/acw/bl_camp_wlliam_Penn/
+http://www.thehistorynet.com/vn/blmontagnardstories/
+http://www.thehistorynet.com/we/blruffian/
+http://www.thehollywoodnews.com/dvd/090503.php
+http://www.thehorsehospital.com/
+http://www.thehottestcoed.com/boygirl.php
+http://www.thehoya.com/sports/120704/sports5.cfm
+http://www.thehtd.org/travel/destination.asp?DocID=28
+http://www.thehumanist.org/humanist/articles/dawkins.html
+http://www.theind.com/news2.asp?CID=-951056581
+http://www.theindependent.com/warm/chap2.shtml
+http://www.theinquirer.net/?article=20782
+http://www.theinquirer.net/Default.aspx?article=20782
+http://www.theinquirer.net/default.aspx?article=20782
+http://www.theinstitute.ieee.org/inst_art2.jsp?isno=08991&section=20
+http://www.theinstitute.ieee.org/inst_art2.jsp?isno=09991&section=20
+http://www.theinterim.com/2002/april/bloedow.html
+http://www.theinternetparty.org/comments/index.php?cid=pol20040329000
+http://www.theintrovertzcoach.com/how_i_healed_myself.html
+http://www.theiob.org.uk/press/speeches/role.html
+http://www.theirc.org/index.cfm/wwwID/2130
+http://www.thejacastaproject.co.uk/
+http://www.thejackcat.com/AC/Culture/Dereth/Wardiel.htm
+http://www.thejaggythistle.co.uk/oldnews2001.htm
+http://www.thejakartapost.com/detailheadlines.asp?fileid=20050623.A07&irec=6
+http://www.thejournalnews.com/turf/
+http://www.thejoyofshards.co.uk/tips.shtml
+http://www.thekastle.com.au/storiesheadmist.html
+http://www.thekeep.org/~kunoichi/kunoichi/themestream/camroadtrip.html
+http://www.theknot.com/ch_article.html?Object=AI91022171357&keyword=GUESTS%20%26%20INVITATIONS&channel=planning
+http://www.thelaboroflove.com/forum/loss/bereavedmoms.html
+http://www.thelaboroflove.com/pregnancy/journals/Forum340/HTML/000038.html
+http://www.thelantern.com/news/2004/04/07/Sports/Womens.Golf.Looks.To.Big.Ten.Tourny.After.Long.Season-653681.shtml
+http://www.thelarper.org/issue_autumn_2002/lightscamera.htm
+http://www.thelastdance.org/
+http://www.thelastdance.org/comments.html
+http://www.thelearningyard.com/TheSwing.html
+http://www.theledger.com/apps/pbcs.dll/article?AID=/20041022/MAGAZINE/41020001/1249
+http://www.theledger.com/apps/pbcs.dll/article?AID=/20050126/NEWS/501260390/1178
+http://www.theledger.com/apps/pbcs.dll/article?Date=20050613&Category=ZNYT02&ArtNo=506130386&SectionCat=&Template=printart
+http://www.theleftcoaster.com/
+http://www.theleftcoaster.com/archives/000054.html
+http://www.theleftcoaster.com/archives/000347.php
+http://www.theleftcoaster.com/archives/000440.php
+http://www.theleftcoaster.com/archives/001091.php
+http://www.theleftcoaster.com/archives/002162.php
+http://www.theleftcoaster.com/archives/002261.html
+http://www.theleftcoaster.com/archives/002793.php
+http://www.theleftcoaster.com/archives/003757.html
+http://www.theleftcoaster.com/archives/004597.php
+http://www.theleftcoaster.com/archives/004609.php
+http://www.theleftcoaster.com/mt/mt-comments.cgi?entry_id=2019
+http://www.thelighthouseforeducation.co.uk/teacherrecruitment/directorateoflcc.htm
+http://www.thelinco.com/ThelinFAQ.htm
+http://www.thelinkup.org/integrity16.html
+http://www.thelisteningear.net/History.shtml
+http://www.thelivingwordtbc.com/1cor12.htm
+http://www.thelordmayorsappeal.org/html/events_all.html
+http://www.thelostys.com/immigrants_who_returned_home.html
+http://www.thelowryhotel.com/checkin.shtml
+http://www.theludwigs.com/Halloween/halloween.html
+http://www.thelutheran.org/0502/page42.html
+http://www.thelwordonline.com/gay_lesbian_hit_TV.shtml
+http://www.thelynnfund.org/art1.html
+http://www.themacobserver.com/article/2005/01/28.3.shtml
+http://www.themacobserver.com/comments/commentindivdisplay.shtml?id=27740
+http://www.themacobserver.com/stockwatch/2000/09/01.1.shtml
+http://www.themaninblue.com/writing/perspective/2004/09/
+http://www.themanufacturer.com/us/detail.html?contents_id=2904
+http://www.themanufacturer.com/us/detail.html?contents_id=3421
+http://www.themanwhofellasleep.com/gossip.html
+http://www.themarketvushow.com/forum/
+http://www.themasterspen.com/archives/000313.html
+http://www.themathlab.com/dictionary/nwords/nwords.htm
+http://www.themediadrop.com/archives/001546.php
+http://www.themedicinewheel.net/shorts/5pounds.html
+http://www.themediweb.net/orthopaedics/infosheets_html/inpatients/Hip%20fracture%20-%20Hemiarthroplasty.htm
+http://www.themeetingplace.com.au/articles/relationship/moving-on-after-an-abusive-relationship.asp
+http://www.thememoryhole.org/911/bush-911.htm
+http://www.thememoryhole.org/mil/pilot-speed.htm
+http://www.themepartiesnmore.com/generic330.html
+http://www.themercury.co.za/index.php?fArticleId=2362071&fSectionId=336&fSetId=515
+http://www.themercury.co.za/index.php?fSectionId=336&fArticleId=2362071
+http://www.themercury.com.au/
+http://www.themiamiproject.org/x558.xml
+http://www.themightygeek.com/mtarchives/000147.php
+http://www.themightygeek.com/mtarchives/2002_11.php
+http://www.themightymjd.com/articles/sundays20042005/championshipsunday.htm
+http://www.themightyorgan.com/features_geese.html
+http://www.themightyorgan.com/view_wootton.html
+http://www.themilkfactory.co.uk/interviews/nicoletteiw.htm
+http://www.themilkyway.co.uk/
+http://www.themilpitaspost.com/Stories/0,1413,93~3416~2912751,00.html
+http://www.themilwaukeechannel.com/
+http://www.theministryoffitness.com/mof/library/articles/article20.htm
+http://www.theminnesotareview.org/ns45/leslie.htm
+http://www.themissingpiece.com/
+http://www.themmob.com/letterseditors.html
+http://www.themode.com/listings/a203/cat1
+http://www.themode.com/listings/a561/cat1
+http://www.themoderatevoice.com/posts/1111644812.shtml
+http://www.themoderatevoice.com/posts/1117438632.shtml
+http://www.themoderatevoice.com/posts/1118866005.shtml
+http://www.themodernreligion.com/comparative/christ/christianity_santa.htm
+http://www.themodernword.com/beckett/beckett_quotes.html
+http://www.themodernword.com/mulholland_drive.html
+http://www.themoneybag.com/vb/archive/index.php/t-3744.html
+http://www.themoneybag.com/vb/showthread.php?t=3744&page=29&pp=15
+http://www.themoneybag.com/vb/showthread.php?t=3744&page=3
+http://www.themoneybag.com/vb/showthread.php?t=3744&page=3&pp=15
+http://www.themoorings.org/life/basics/giving.html
+http://www.themorningnews.org/archives/how_to/how_to_write_a_thankyou_note.php
+http://www.themorningnews.org/archives/new_york_new_york/new_york_diary_dean_kowalski.php
+http://www.themorningnews.org/archives/new_york_new_york/the_letters_of_gary_benchley_rock_star_working_the_demo.php
+http://www.themorningnews.org/archives/personalities/letters_from_london_royal_memories.php
+http://www.themorningnews.org/archives/personalities/my_father_speaks_another_language.php
+http://www.themorningnews.org/archives/personalities/to_the_teen_beat_of_his_own_drummer.php
+http://www.themorningnews.org/tob/
+http://www.themoscowtimes.com/stories/2005/01/14/012.html
+http://www.themoscowtimes.com/stories/2005/01/21/007.html
+http://www.themoscowtimes.com/stories/2005/01/28/007.html
+http://www.themovieblog.com/archives/2005/01/hey_chris_rock_shut_your_mouth.html
+http://www.themoviespoiler.com/Spoilers/sugarandspice.html
+http://www.themoviespoiler.com/Spoilers/swordfish.html
+http://www.themovingwall.org/sites/Kennett/front.html
+http://www.themusicbox.co.uk/xmas.html
+http://www.themusicedge.com/moxie/news/featartist/walking-concert-walter-sc.shtml
+http://www.themuslimmatrimonial.co.uk/
+http://www.thenakedscientists.com/forum/topic.asp?TOPIC_ID=1209&whichpage=3
+http://www.thenakedscientists.com/forum/topic.asp?TOPIC_ID=1209&whichpage=4
+http://www.thenassauguardian.com/social_community/310580572590409.php
+http://www.thenation.com/blogs/edcut?bid=7&pid=3152
+http://www.thenation.com/capitalgames/index.mhtml?bid=3&pid=1336
+http://www.thenation.com/capitalgames/index.mhtml?bid=3&pid=2066
+http://www.thenation.com/doc.mhtml%3Fi=19991122&s=alterman2
+http://www.thenation.com/doc.mhtml%3Fi=20000214&s=exchange
+http://www.thenation.com/doc.mhtml%3Fi=20010305&s=kim
+http://www.thenation.com/doc.mhtml%3Fi=20020204&s=glass20020124
+http://www.thenation.com/doc.mhtml%3Fi=20020225&s=cooper20020211
+http://www.thenation.com/doc.mhtml%3Fi=20041011&s=leaver
+http://www.thenation.com/doc.mhtml%3Fi=20041108&s=editors
+http://www.thenation.com/doc.mhtml%3Fi=20041213&s=schuman
+http://www.thenation.com/doc.mhtml%3Fi=20050418&s=pollitt
+http://www.thenation.com/doc.mhtml%3Fi=20050613&s=scahill
+http://www.thenation.com/doc.mhtml%3Fi=20050711&s=moberg
+http://www.thenation.com/doc.mhtml?i=20000214&s=lynas
+http://www.thenation.com/doc.mhtml?i=20021223&s=ehrenreich
+http://www.thenation.com/doc.mhtml?i=20040927&s=baker
+http://www.thenation.com/doc.mhtml?i=20050613&s=scahill
+http://www.thenation.com/docprint.mhtml?i=20041122&s=sifry
+http://www.thenation.com/failsafe/index.mhtml?bid=2&pid=163
+http://www.thenational.com.pg/0204/column6.htm
+http://www.thenational.com.pg/0204/letter7.htm
+http://www.thenational.com.pg/0506/nation12.htm
+http://www.thenationalanthemproject.org/messages/141.html
+http://www.thenationalanthemproject.org/messages/247.html
+http://www.thenationalanthemproject.org/messages/58.html
+http://www.thenationaldebate.com/blog/
+http://www.thenationaldebate.com/blog/archives/2005/01/faith_without_w.html
+http://www.thenaturalhistory.com/
+http://www.thenaturalhome.com/compost.html
+http://www.thenetride.com.au/tsdp/site_equip.asp
+http://www.thenetworkadministrator.com/EuropeanParliament.htm
+http://www.theneutrinoeffect.com/
+http://www.thenew971.com/view.php?pid=227
+http://www.thenewagesite.com/jjdewey/initiation/9.php
+http://www.thenewagesite.com/jjdewey/molecular/chapter26.php
+http://www.thenewamerican.com/tna/1997/vo13no07/vo13no07_justice.htm
+http://www.thenewamerican.com/tna/2000/01-31-2000/vo16no03_cider_house.htm
+http://www.thenewatlantis.com/
+http://www.thenewatlantis.com/archive/7/soa/voting.htm
+http://www.thenewparentsguide.com/
+http://www.thenewstribune.com/sports/story/4626960p-4295963c.html
+http://www.thenhf.com/eu_issues_21.html
+http://www.theninemuses.net/stuff/diary-nobby5e.html
+http://www.thenocturnes.com/resources/tipstricks5.html
+http://www.thenorm.com/privacy/
+http://www.thenutfarm.com.au/farmwalk.htm
+http://www.theoaklandpress.com/stories/041805/pro_20050418022.shtml
+http://www.theobleckmann.com/performance.html
+http://www.theocracywatch.org/campaigns_elections_study.htm
+http://www.theocracywatch.org/faith_base.htm
+http://www.theocracywatch.org/rel_inst_methodist_bishop.htm
+http://www.theocracywatch.org/schools2.htm
+http://www.theocracywatch.org/separation_church_state2.htm
+http://www.theodora.com/flags.html
+http://www.theodora.com/flags/
+http://www.theodoreroosevelt.org/life/TRandNavy.htm
+http://www.theodoreroosevelt.org/life/biopictures.htm
+http://www.theodoreroosevelt.org/life/conservation.htm
+http://www.theoldtimes.com/review0803.html
+http://www.theologos.net/e-books/how2receive.html
+http://www.theolympian.com/apps/pbcs.dll/article?AID=/20050507/OPINION01/505070315/1045/OPINION
+http://www.theolympian.com/home/specialsections/NotesfromtheER/20040531/64031.shtml
+http://www.theonering.com/docs/18895.html
+http://www.theonering.net/ringers/oldsite/news_archive_dec.html
+http://www.theonionavclub.com/feature/index.php?issue=3417&f=1
+http://www.theopenroad.co.uk/
+http://www.theorator.com/bills109/hr55.html
+http://www.theory.caltech.edu/people/preskill/ph229/
+http://www.theory.org.uk/but-int1.htm
+http://www.theory.org.uk/ctb-x1.htm
+http://www.theory.org.uk/effects.htm
+http://www.theosophy-nw.org/theosnw/books/archaic/archaic1.htm
+http://www.theosophy-nw.org/theosnw/science/prat-bra.htm
+http://www.theosophy-nw.org/theosnw/world/asia/as-elo3.htm
+http://www.theotherpages.org/poems/crane02.html
+http://www.theotherpages.org/poems/faq.html
+http://www.theotherpages.org/poems/olney03.html
+http://www.theotherpages.org/poems/swine01.html
+http://www.theotherpages.org/quote-02a.html
+http://www.theoutdoorquest.com/Articles/new_page_5.htm
+http://www.theoxbow.com/oxbow_content/d02_04.htm
+http://www.theozfiles.com/air_marshall_george_jones.html
+http://www.theparisreview.com/viewmedia.php/prmMID/5440
+http://www.thepatientsvoice.com/press%20releases/Project%20GHB%20Award.htm
+http://www.thepaulfoundation.org/scholarships.htm
+http://www.thepennineway.co.uk/
+http://www.thepensionservice.gov.uk/
+http://www.thepensionservice.gov.uk/atoz/atozdetailed/spdeferral.asp
+http://www.thepeoplealliance.co.uk/media.htm
+http://www.thepercy.com/history.html
+http://www.theperlreview.com/Interviews/mjd-hop-20050407.html
+http://www.thepersecution.org/nr/2000/oct2000.html
+http://www.thepetcenter.com/gen/dental.html
+http://www.thepetcenter.com/gen/hw.html
+http://www.thepetcenter.com/imtop/stone.html
+http://www.thepetcenter.com/pha/srh.html
+http://www.thepetcenter.com/wai/poi_Be_Prepared.html
+http://www.thepetitionsite.com/takeaction/841589646
+http://www.thepetitionsite.com/takeaction/941996369
+http://www.thepetpress-la.com/articles/burtward.htm
+http://www.thepinkspiders.com/lyrics.php
+http://www.thepipingcentre.co.uk/magazine/news-jan99-townpipers.html
+http://www.thepokerforum.com/rakeandtime.htm
+http://www.thepollenshop.co.uk/who_we_are/access_statement.asp
+http://www.thepollenshop.co.uk/who_we_are/policies/access_policy.asp
+http://www.thepoorman.net/archives/003653.html
+http://www.theppsc.org/Archives/NightShift.Survival/Tired_Cops.htm
+http://www.thepracticalgardener.com/quicktips.asp
+http://www.thepressdesk.com/britishlegion/pressrelease.php?releaseid=3216&tabid=2465
+http://www.thepriceofliberty.org/04/03/25/ladylib.htm
+http://www.thepriceofliberty.org/04/03/26/henry.htm
+http://www.thepriceofliberty.org/04/04/26/ladylib.htm
+http://www.thepriceofliberty.org/04/10/22/henry.htm
+http://www.theprimeone.com/archives/2003/10/
+http://www.theprizewinner.com/holt_236.html
+http://www.theprofileonline.com/news/2004/10/29/Opinion/Setting.The.Record.Straight-785975.shtml
+http://www.theprogram.net.au/featuresSub.asp?id=1783&state=1
+http://www.thepublicinterest.com/archives/2001summer/article2.html
+http://www.theranger.co.uk/bsp/10130/ews.asp?DBID=103-281-013-010&iPage=1&id=1923
+http://www.therant.us/staff/lewis/billy_we_hardly_knew_ye.htm
+http://www.therapies.com/testimonials.htm
+http://www.therapistlocator.net/
+http://www.there.com/pressDigitalGirl_060103.html
+http://www.theredmill.net/red-mill-monthly-specials.html
+http://www.therefinersfire.org/charles_testimony.htm
+http://www.theregenttheatre.org/cinefest/shorts04.html
+http://www.theregister.co.uk/2001/11/30/ir35_defence_strategies_keeping/
+http://www.theregister.co.uk/2003/11/07/open_source_not_ready/
+http://www.theregister.co.uk/2004/12/27/us_invetigates_airglitch/
+http://www.theregister.co.uk/2005/01/19/browne_biometric_passports/
+http://www.theregister.co.uk/2005/01/21/unintended_consequences/
+http://www.theregister.co.uk/2005/01/26/microsoft_pirate/
+http://www.theregister.com/2003/11/20/domain_owner_seeks_to_revolutionise/
+http://www.theregister.com/2004/12/27/us_invetigates_airglitch/
+http://www.thereminworld.com/forum.asp?cmd=p&T=107&F=1
+http://www.therestofus.org/factsheets/kenlay.html
+http://www.therevealer.org/index.php
+http://www.therevival.co.uk/articles/why_britishwomen_turnto_islam.htm
+http://www.therhondda.co.uk/general/language.html
+http://www.therhondda.co.uk/riots/next_step.html
+http://www.therightchristians.org/?q=node/view/182
+http://www.theromanceclub.com/shortstories/short1.htm
+http://www.theross.org/gpff_entry.php?gid=8
+http://www.thersa.org/rsa/disclaimer.asp
+http://www.thesakeofargument.com/
+http://www.thesavagefiles.com/tripjournal%5C11-04.htm
+http://www.thesavvytraveller.com/happening/reading_group/previous_books.htm
+http://www.theschepens.org/faculty/damore/general_info.htm
+http://www.theschepens.org/protein_in_eye_112702.htm
+http://www.thescienceconnection.net/New_SciConnection/shockingtruth.htm
+http://www.thesciencefair.com/guidelines.html
+http://www.thescreamonline.com/technology/imageframe/imageframe.html
+http://www.thescuderia.net/News/October2004/1.shtml
+http://www.theserverside.com/articles/article.tss?l=AdventnetJMX
+http://www.theserverside.com/articles/article.tss?l=Prepared-Statments
+http://www.theserverside.com/articles/article.tss?l=RedirectAfterPost
+http://www.theserverside.com/tss?service=direct/0/NewsThread/threadViewer.toggleShowNoisy2&sp=l22357&sp=T
+http://www.theserverside.net/news/thread.tss?thread_id=23319
+http://www.theserverside.net/news/thread.tss?thread_id=27994
+http://www.thesession.org/discussions/display.php/2189
+http://www.thesession.org/discussions/display.php/5171
+http://www.theseverts.net/German.htm
+http://www.thesextantgroup.com/truenorth/v2i3.htm
+http://www.thesharks.co.za/shark_of_past/johnallan.htm
+http://www.theshiftedlibrarian.com/
+http://www.theshiftedlibrarian.com/2003/01/26.html
+http://www.thesimon.com/magazine/articles/telling_stories/0771_poker_night_american_virtue_takes_agreeable_amount_vice.html
+http://www.thesite.org/healthandwellbeing/fitnessanddiet/fitness/staymotivated
+http://www.thesite.org/homelawandmoney/askthesiteqandas/housingqandas/hopingforahome
+http://www.thesite.org/sexandrelationships/couples/lifeasacouple/leavingacontrollingpartner
+http://www.thesite.org/sexandrelationships/familyandfriends/family/turningintoyourparents
+http://www.thesite.org/workandstudy/gettingajob/applications/bodylanguageforinterviews
+http://www.thesleepcentre.co.uk/news.htm
+http://www.thesmallholdingcentre.co.uk/Ffos%20Ddu%205217/Ffos%20Ddu%205217.html
+http://www.thesmartmanager.com/smartcase/SmartICase2/champion2.html
+http://www.thesoundbroker.com/buttkicker.htm
+http://www.thesoutherncross.co.za/features/sex_trade.htm
+http://www.thespaceplace.com/shuttle/missions/sts-99.html
+http://www.thespacereview.com/
+http://www.thespacereview.com/article/274/1
+http://www.thespacereview.com/article/293/1
+http://www.thespacereview.com/article/309/1
+http://www.thespacereview.com/article/365/1
+http://www.thespacereview.com/article/366/1
+http://www.thespacereview.com/article/376/1
+http://www.thespacereview.com/article/379/1
+http://www.thespacereview.com/article/394/1
+http://www.thespacereview.com/article/84/1
+http://www.thespankingcorner.com/stories/diane/family_matters_08.html
+http://www.thespinningimage.co.uk/article/displayarticle.asp?articleid=52
+http://www.thespoke.net/MyBlog/AlfredTwo/MyBlog.aspx
+http://www.thesportjournal.org/2002Journal/Vol5-No3/Special_Edition/drop.asp
+http://www.thesportjournal.org/2003Journal/Vol6-No2/nasp.asp
+http://www.thesportjournal.org/2004Journal/Vol7-No1/graham.asp
+http://www.thesprout.net/001/graft/graft08.htm
+http://www.thesprout.net/003/newsinbrief/newsinbrief01.htm
+http://www.thesrt.org.uk/forum/messages/1244/15655.html?0
+http://www.thestaffordhotel.co.uk/other/biography.html
+http://www.thestage.co.uk/connect/howto/parent.php
+http://www.thestandard.com.hk/..%5Ccolumn_detail_frame_col_wkend.cfm?colid=1&articleid=359
+http://www.thestandard.com.hk/column_detail_frame_col.cfm?colid=1&articleid=359
+http://www.thestandard.com.hk/news_detail_frame.cfm?articleid=45675&intcatid=1
+http://www.thestandard.com.hk/news_detail_frame.cfm?articleid=46127&intcatid=1
+http://www.thestar.co.za/index.php?fArticleId=2394759&fSectionId=233&fSetId=505
+http://www.thestarhouse.org/SSBeacher.html
+http://www.thestate.com/mld/thestate/business/9558535.htm
+http://www.thestate.com/mld/thestate/living/11525948.htm
+http://www.thestate.com/mld/thestate/news/special_packages/growth/11722067.htm
+http://www.thestatus.com/index.cfm?fa=faq&sid=0
+http://www.thestreet.com/_yahoo/mutualfundmonday/mutualfundmondaygg/10229583.html?cm_ven=YAHOO&cm_cat=FREE&cm_ite=NA
+http://www.thestreet.com/mutualfundmonday/mutualfundmondaygg/10229583.html
+http://www.thestudentroom.co.uk/search.php?do=finduser&u=26229
+http://www.thestudentroom.co.uk/showthread.php?goto=lastpost&t=86232
+http://www.thestudentroom.co.uk/t86232.html
+http://www.thesuccessfulinvestor.com/
+http://www.thesuccessfulparent.com/articles/adolescence.htm
+http://www.thesun.co.uk/article/0,,2002390000-2005081656,00.html
+http://www.thesundaymail.news.com.au/sectionindex1/0,5934,Sunday+Extra%5E%5ETEXT%5Ethesundaymail,00.html
+http://www.thesupernaturalworld.co.uk/forum/index.php?showtopic=6425&mode=linearplus
+http://www.thesupportnetwork.com/programs_and_services/211Facts.htm
+http://www.thetablet.co.uk/cgi-bin/register.cgi/citw-past-00234
+http://www.thetablet.co.uk/cgi-bin/register.cgi/tablet-00078
+http://www.thetablet.co.uk/cgi-bin/register.cgi/tablet-00107
+http://www.thetablet.co.uk/cgi-bin/register.cgi/tablet-00376
+http://www.thetablet.co.uk/cgi-bin/register.cgi/tablet-00659
+http://www.thetalentshow.org/
+http://www.thetalentshow.org/archives/000972.html
+http://www.thetalentshow.org/archives/001471.html
+http://www.thetalentshow.org/archives/001841.html
+http://www.thetalentshow.org/archives/001842.html
+http://www.thetalkingdrum.com/prison.html
+http://www.theteacherscorner.net/calendars/marchideas.htm
+http://www.theteachersguide.com/ChristmasThemes.htm
+http://www.thetearsofthings.net/archives/000319.html
+http://www.theteatable.com/Merchant2/merchant.mvc?Screen=links
+http://www.thetechlounge.com/article.php?directory=beyond_megapixels_part_2
+http://www.thetelegram.com/history.aspx
+http://www.thetentacle.com/author.cfm?MyAuthor=23
+http://www.thetforduk.co.uk/bidwell.htm
+http://www.thetherapist.com/DrNotes_060598.html
+http://www.thetherapist.com/DrNotes_071897.html
+http://www.thetherapist.com/DrNotes_080798.html
+http://www.thetherapist.com/DrNotes_092598.html
+http://www.thetherapist.com/DrNotes_111398.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_011797.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_021497.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_022897.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_031497.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_071996.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_072696.html
+http://www.thetherapist.com/TCTSeason1/DrNotes_102596.html
+http://www.thethousand.net/archives/2004_06.php
+http://www.thetimes100.co.uk/case_study.php?cID=11&csID=70
+http://www.thetimes100.co.uk/case_study.php?cID=11&csID=70&pID=7
+http://www.thetimes100.co.uk/case_study.php?cID=11&csID=70&pID=9
+http://www.thetimes100.co.uk/theory/theory.php?tID=243
+http://www.thetimes100.co.uk/theory/theory.php?tID=344
+http://www.thetimesherald.com/news/stories/20050206/localnews/1960551.html
+http://www.thetransformers.net/member.asp?MID=147
+http://www.thetravelinsider.info/2002/0802.htm
+http://www.thetravelzine.com/40-40-avignon.htm
+http://www.thetriangle.org/news/2004/10/22/Sports/Eagles.Must.Stay.Hungry.Throughout.Season.And.Into.Playoffs-777296.shtml
+http://www.thetrumpet.com/index.php?page=article&id=269
+http://www.thetruthaboutgeorge.com/lists/truth-updates/msg00051.html
+http://www.thetruthseeker.co.uk/article.asp?ID=2
+http://www.thetruthseeker.co.uk/article.asp?ID=2542
+http://www.thetruthseeker.co.uk/article.asp?ID=2552
+http://www.thetruthseeker.co.uk/article.asp?ID=2711
+http://www.thetruthseeker.co.uk/print.asp?ID=2542
+http://www.thetruthseeker.co.uk/print.asp?ID=2552
+http://www.thetwocaptains.com/wedding.htm
+http://www.thetyee.ca/Life/current/MagnetsforMemory.htm
+http://www.thetyee.ca/News/2004/08/06/PrivSeatoSkyAttack/
+http://www.thetyee.ca/News/2005/05/02/ElectionMarket/
+http://www.thetyee.ca/News/2005/05/11/AlcanPowerIssues/
+http://www.thetyee.ca/News/2005/05/31/PrefabHome/
+http://www.thetyee.ca/Views/2005/06/08/MarijuanaIdeas/
+http://www.theukwebdesigncompany.com/article.php?id=1049
+http://www.theunion.com/section/THEMES08
+http://www.theunionleader.com/
+http://www.theunionleader.com/Articles_show.html?article=13569
+http://www.theunionleader.com/articles_showa.html?article=34093
+http://www.theunionleader.com/articles_showa.html?article=39186
+http://www.theunionleader.com/articles_showa.html?article=40746
+http://www.theuniversityconcourse.com/I,7,5-7-1996/vanSchaijik.htm
+http://www.theunmutual.co.uk/
+http://www.theus50.com/alabama/history.shtml
+http://www.theus50.com/tennessee/outdoors.shtml
+http://www.theus50.com/virginia/history.shtml
+http://www.theusabilitycompany.com/news/media_coverage/archive/nma_130901.html
+http://www.theusbroker.com/newsletters/
+http://www.thevalkyrie.com/stories/femgrowth/sakura.htm
+http://www.thevalkyrie.com/stories/html/morphenomenal/morph3b.htm
+http://www.thevalkyrie.com/stories/mole/muscle01.htm
+http://www.thevalkyrie.com/stories/mole/supergirl.htm
+http://www.thevarsity.ca/news/2004/09/16/Science/A.Close.Shave.With.Big.Brother-720263.shtml
+http://www.thevictoriaadvocate.com/local/local/story/2484983p-2879374c.html
+http://www.thevictoriaadvocate.com/local/local/story/2520187p-2920205c.html
+http://www.theviewnewspapers.com/article.asp?article=1258&paper=1&cat=198
+http://www.theviewnewspapers.com/article.asp?article=1321&paper=1&cat=198
+http://www.thevillage.ie/index.php?option=com_content&task=category&sectionid=21&id=114&Itemid=158
+http://www.thevillagenews.com/health/index.asp?story_ID=3550
+http://www.thevillager.com/villager_11/friendscallpier40.html
+http://www.thevillager.com/villager_111/sushisambarooftop.html
+http://www.thevirginiacompany.com/civil-war.html
+http://www.thevirtualvine.com/May-Summer.html
+http://www.thevoter.org/glossary.php?letter=p
+http://www.thevoyagers.com/royaltragedy.htm
+http://www.thewashingtonnote.com/archives/000052.html
+http://www.thewashingtonnote.com/archives/000188.html
+http://www.thewashingtonnote.com/archives/000382.html
+http://www.thewashingtonnote.com/mt/mt-comments.cgi?entry_id=52
+http://www.thewatchmaker.com/watch-clock-repair.html
+http://www.thewatchstore.com/store/new.html
+http://www.thewaterpage.com/threshld.htm
+http://www.thewaytotruth.org/pearls/tongue.html
+http://www.thewaytotruth.org/science/existence.html
+http://www.theweatheroutlook.com/othyourquestions.asp
+http://www.thewebnewsroom.com/
+http://www.thewelfarestatewerein.com/archives/behaviour_crime/index.php
+http://www.thewelfarestatewerein.com/archives/tax_and_growth/index.php
+http://www.thewellspring.com/TWO/4birthManaged.html
+http://www.thewestonmercury.co.uk/archived_material/2005/week_02/features/asp/05-01-14Luhimba.asp
+http://www.thewestonmercury.co.uk/archived_material/2005/week_02/news/asp/05-01-19AppealSuccess.asp
+http://www.thewildlifeexperience.org/our_sponsors/
+http://www.thewildones.org/Curric/winterTrip.html
+http://www.thewinds.org/1999/01/family_planning.html
+http://www.thewinedoctor.com/advisory/buyconsumers.shtml
+http://www.thewinnerlist.com/cybercash.html
+http://www.thewisemarketer.com/features/read.asp?id=45
+http://www.thewisemarketer.com/news/read.asp?lc=a3311dx1275zz
+http://www.thewolfeclinic.com/gardenpower/gardenpower.html
+http://www.thewolfeclinic.com/newsletter/newletter-testimonials.html
+http://www.thewolfeclinic.com/super_foods.html
+http://www.thewonderwall.com/badly_drawn_boy/
+http://www.thewordonthestreet.ca/
+http://www.theworkshop.org/actors/women-1.html
+http://www.theworldjournal.com/special/nettech/news/updateoff.htm
+http://www.theworldlink.com/football/tigers.html
+http://www.theworldlink.com/stayplay/ophir.html
+http://www.theworldofstuff.com/
+http://www.theworldwidegourmet.com/fruits/berries/strawberry.htm
+http://www.thewriterslife.homestead.com/payingmarkets.html
+http://www.thewriterslife.homestead.com/thedogwithnoname.html
+http://www.thewritingsonthestall.com/
+http://www.thewwwsite.com/usa01.htm
+http://www.thex-bar.net/
+http://www.thex.com/rd/
+http://www.theyogastudio.com/teacherstraining.html
+http://www.theywillrockyou.com/Dailypage/blogs/missyblog.html
+http://www.theyworkforyou.com/debate/?id=2004-11-09.769.3
+http://www.theyworkforyou.com/debates/?id=2002-03-06.322.2
+http://www.theyworkforyou.com/debates/?id=2004-10-20.882.2&m=1293
+http://www.theyworkforyou.com/debates/?id=2004-12-21.2077.0&m=687
+http://www.theyworkforyou.com/debates/?id=2005-02-02.830.3
+http://www.theyworkforyou.com/mp/recent/?pid=10644
+http://www.theyworkforyou.com/whall/?id=2004-09-15.486.2
+http://www.theyworkforyou.com/whall/?id=2005-03-09.510.0&m=1135
+http://www.thezambian.com/women/
+http://www.thezencenter.org/info_2.html
+http://www.thezeroboss.com/archives/000086.html
+http://www.thezeroboss.com/archives/004903.html
+http://www.thezone.net/wapa/known.htm
+http://www.thff.org/bio.htm
+http://www.thiaoouba.com/see_aura_color.htm
+http://www.thibodaux.com/report.html
+http://www.thief-thecircle.com/showarchive.asp?month=4&year=2003
+http://www.thinfilmmfg.com/subscribers/Subscriber01/qcintro11Sept01.htm
+http://www.thing.net/~grist/l&d/rodtarn/ljr-nt2.htm
+http://www.thingsasian.com/browse/article/related/goto_article/article.2050.html
+http://www.thingsofjoy.com/news.html
+http://www.thingstodo-london.com/brochure/product_show.jsp?ID=1010&PRODUCTID=1016&CODE=3858EE042
+http://www.think.i12.com/fallacies.html
+http://www.thinkage.ca/~jim/prose/names.htm
+http://www.thinkcentre.org/article.cfm?ArticleID=2518
+http://www.thinkcentre.org/article.cfm?ArticleID=908
+http://www.thinkenergy.com/web/webpage.html
+http://www.thinkenergygroup.com/think.nsf/3c782b90d71cf63085256d55005670b4?OpenForm&ParentUNID=8B96B4C0C9067F9585256F8D00796673
+http://www.thinkenergygroup.com/think.nsf/3c782b90d71cf63085256d55005670b4?OpenForm&ParentUNID=D222F8B68F60F27985256F69006DD4F1
+http://www.thinkenergygroup.com/think.nsf/3c782b90d71cf63085256d55005670b4?OpenForm&ParentUNID=DB751FF19A6166DA85256F720077C229
+http://www.thinkequity.com/mt-archive/market_view/economy/
+http://www.thinking.net/Cognition/cognition.html
+http://www.thinkinganglicans.org.uk/archives/000534.html
+http://www.thinkinganglicans.org.uk/archives/000991.html
+http://www.thinkinghistory.co.uk/resources/henry_bonds.htm
+http://www.thinkinghistory.co.uk/resources/whowillhang.htm
+http://www.thinkingmanagers.com/management/management-selling.php
+http://www.thinkingmaps.com/htthinkmap.php3
+http://www.thinkingmonkey.com/2004_12_19_archive.shtml
+http://www.thinkingpeace.com/Lib/lib011.html
+http://www.thinkingpeace.com/Lib/lib013.html
+http://www.thinkingpeace.com/Lib/lib028.html
+http://www.thinkingpeace.com/Lib/lib055.html
+http://www.thinkingpeace.com/Lib/lib094.html
+http://www.thinkingpeace.com/pages/Articles/Archive1/arts025.html
+http://www.thinkingpeace.com/pages/Articles/Archive1/arts073.html
+http://www.thinkingpeace.com/pages/arts2/arts261.html
+http://www.thinkingpeace.com/pages/arts2/arts340.html
+http://www.thinkingpeace.com/skyblog/
+http://www.thinklikeadog.com/tp/fromourcustomers.html
+http://www.thinkofit.com/webconf/
+http://www.thinkofit.com/webconf/forumsoft.htm
+http://www.thinkofit.com/webconf/wcchoice.htm
+http://www.thinkquest.org/library/cat_show.html?cat_id=70
+http://www.thinkspain.com/spain-news-page/6
+http://www.thinprep.com/corporate/terms.shtml
+http://www.thirdmil.org/media/opeds/000925_surpluslottery.html
+http://www.thirdspace.ca/chora/pr_12stepessay.htm
+http://www.thirdworldtraveler.com/Drug_War/Adios_FailedStrategies.html
+http://www.thirdworldtraveler.com/Energy/Fighting_Energy_Indep.html
+http://www.thirdworldtraveler.com/Fascism/Brunner_B_CS.html
+http://www.thirdworldtraveler.com/Life_Death_ThirdWorld/CallousedConsciences.html
+http://www.thirdworldtraveler.com/McChesney/GlobalMedia_Neoliberalism.html
+http://www.thirdworldtraveler.com/Media/CorpMedia_McChesney.html
+http://www.thirdworldtraveler.com/Political_Reform/Majority_Fooled_FE.html
+http://www.thirdworldtraveler.com/Responsible_Travel/respon_travel.html
+http://www.thirdworldtraveler.com/Zinn/FreeSpeech_DI.html
+http://www.thirteen.org/edonline/ntti/resources/lessons/radioactive/
+http://www.thirteen.org/homepage/promos/nat_palemale.html
+http://www.thirtythousandfeet.com/clubs.htm
+http://www.thisfish.com/
+http://www.thisisali.com/weblog/
+http://www.thisisawar.com/HealthSleep.htm
+http://www.thisisawar.com/IllnessCancer.htm
+http://www.thisisbroken.com/
+http://www.thisisgwent.co.uk/advertising_features/special_feature_c/
+http://www.thisishertfordshire.co.uk/display.var.560811.0.schools_spearhead_aid_appeal.php
+http://www.thisishertfordshire.co.uk/news/stalbans/display.var.560811.0.schools_spearhead_aid_appeal.php
+http://www.thisislondon.com/news/articles/19328071?source=Evening%20Standard&ct=5
+http://www.thisisoxfordshire.co.uk/oxfordshire/archive/2003/04/23/TOPSPORT0ZM.html
+http://www.thisisoxfordshire.co.uk/oxfordshire/news/NEWS5.html
+http://www.thisispembrokeshire.net/pembrokeshire/features/FEATURES5.html
+http://www.thisisrumorcontrol.org/node/view/2282
+http://www.thisisrumorcontrol.org/node?from=80
+http://www.thisisryedale.co.uk/ryedale/vibe/bands/dustbowlcentral/
+http://www.thisisstfc.co.uk/columns_igoe_Story.asp?NewsID=18
+http://www.thisisstfc.co.uk/news_headlines_Story.asp?NewsID=2915
+http://www.thisisstfc.co.uk/news_headlines_Story.asp?NewsID=3369
+http://www.thisisthenortheast.co.uk/food/reviews/140605.html
+http://www.thisisthenortheast.co.uk/healthspectrum/features/0802/bigboozers.html
+http://www.thisisthenortheast.co.uk/the_north_east/history/echomemories/durham/403/101003.html
+http://www.thisisthenortheast.co.uk/the_north_east/leisure/tracer/success.html
+http://www.thisisthenortheast.co.uk/the_north_east/news/manfield/0108_1.html
+http://www.thisistrue.com/skeptics98.html
+http://www.thisistrue.com/zt.html
+http://www.thisiswiltshire.co.uk/wiltshire/archive/2004/03/15/business_news1ZM.html
+http://www.thisisyork.co.uk/york/classified/cliftonmoor.html
+http://www.thisisyork.co.uk/york/leisure/YORK_LEISURE_REVIEW_RESTAURANTS20.html
+http://www.thisisyork.co.uk/york/leisure/YORK_LEISURE_REVIEW_RESTAURANTS3.html
+http://www.thisisyork.co.uk/york/leisure/country_walks/walks_archive.html
+http://www.thisisyork.co.uk/york/news/letters.html
+http://www.thismodernworld.com/
+http://www.thismodernworld.com/weblog/archive/2002_02_10_bloggera.html
+http://www.thismodernworld.com/weblog/archive/2002_03_03_bloggera.html
+http://www.thismodernworld.com/weblog/archive/2002_07_14_bloggera.html
+http://www.thismodernworld.com/weblog/mtarchives/week_2003_10_12.html
+http://www.thismodernworld.com/weblog/mtarchives/week_2003_11_09.html
+http://www.thismodernworld.com/weblog/mtarchives/week_2005_04_17.html
+http://www.thismodernworld.com/weblog/mtarchives/week_2005_06_19.html
+http://www.thisnation.com/campaign.html
+http://www.thisoldhouse.com/toh/html/insidetoh/insidetoh_desc.html
+http://www.thisoldhouse.com/toh/knowhow/adding/article/0,16417,199843,00.html
+http://www.thisoldhouse.com/toh/print/0,17071,629176,00.html
+http://www.thisweek.ca/
+http://www.thisweek.ca/hamilton_weblog_strategy_/2004/12/
+http://www.thisweek.ca/hamilton_weblog_strategy_/2004/12/december_10_200.html
+http://www.thjournal.com/
+http://www.thocp.net/companies/commodore/commodore_company.htm
+http://www.thocp.net/reference/museum/museums.htm
+http://www.thocp.net/timeline/1947.htm
+http://www.thocp.net/timeline/1993.htm
+http://www.thocp.net/timeline/1994.htm
+http://www.thoemmes.com/american/martineau_intro.htm
+http://www.thoemmes.com/american/royce/2lecture2.htm
+http://www.thoemmes.com/classics/jebb_lecture.htm
+http://www.thoemmes.com/psych/james.htm
+http://www.thoemmes.com/terms_conditions.htm
+http://www.thomas-hobbes.com/works/liberty/14.html
+http://www.thomasgenweb.com/benjamin_hughes.html
+http://www.thomasgenweb.com/brynmawr_history.html
+http://www.thomasgenweb.com/david_davies.html
+http://www.thomasgenweb.com/nantyglo_round_towers.html
+http://www.thomasgolf.com/505ladiesW.shtml
+http://www.thomasmichaelcorcoran.com/2004_03_21_archive.html
+http://www.thomaspmbarnett.com/delscenes/scene22.htm
+http://www.thomaspmbarnett.com/dircommentary/newrulesets.htm
+http://www.thomaspmbarnett.com/pnm/glossary.htm
+http://www.thomaspmbarnett.com/weblog/
+http://www.thomaspmbarnett.com/weblog/archives2/001039.html
+http://www.thomhartmann.com/TPW_chapter_1.shtml
+http://www.thomhartmann.com/democracyfailed.shtml
+http://www.thompson.com/libraries/cable/tube/special_reports/tube_expert/tubeexpert600.html
+http://www.thomsoncareercenter.com/search/view_job.asp?jobID=999999006257
+http://www.thomsoneducationdirect.com.au/index.cfm?id=177
+http://www.thomsonlearning.com.au/primary/supps/
+http://www.thomsonmedia.com/careers.html
+http://www.thoracic.org/assemblies/pc/journal/june03.asp
+http://www.thoracic.org/ic/ic2005/2005pgcourses.asp
+http://www.thoracic.org/news/prapr99.asp
+http://www.thoroughbrednews.co.nz/international/default.asp?id=16462&page_no=0&trainer_id=0&stud_id=0
+http://www.thoroughbrednews.co.nz/nz/newsletter3.asp?id=245
+http://www.thortech.com/about/about_board.asp
+http://www.thoseoldrecords.com/faq.html
+http://www.thottbot.com/?t=First%20Aid
+http://www.thottbot.com/beta.cgi?t=First%20Aid
+http://www.thottbot.com/index.cgi?t=First%20Aid
+http://www.thoughtpeach.com/
+http://www.thoughtware.com.au/philosophy/debate/pb0795.html
+http://www.thousandoaksproperty.com/l_economy-thousand-oaks-westlake-village-california-real-estate.asp
+http://www.thousandreasons.org/opinion.php
+http://www.thousandreasons.org/readers.html
+http://www.thrale.com/my_family/travelog/travelog_1.php
+http://www.thrall.orcon.net.nz/17glimpses.html
+http://www.thrasherswheat.org/tnfy/funhouse.htm
+http://www.threadless.com/submission/6838/Free
+http://www.threadwatch.org/node/119
+http://www.thredgold.com/html/out.html
+http://www.threemenandatenor.com/GermanyRecap.htm
+http://www.threeminutetherapy.com/self-esteem.html
+http://www.threemonkeysonline.com/threemon_articleThe%20Anglo-Irish%20treaty%20and%20Civil%20War.htm
+http://www.threeweirdsisters.com/pangaia.htm
+http://www.threeworldwars.com/world-war-3/ww3-11.htm
+http://www.threeyearsofhell.com/
+http://www.threeyearsofhell.com/archive/000788.php
+http://www.threeyearsofhell.com/archive/2004_06.php
+http://www.thriftyfun.com/Crafts/tf475077_cra.html
+http://www.thriftyfun.com/happygarden/tf568913_gar.html
+http://www.thriftyfun.com/happypets/tf420703_pet.html
+http://www.thriftyfun.com/tf129688.tip.html
+http://www.thriftyfun.com/tf392697.tip.html
+http://www.thriftyfun.com/tf475077.tip.html
+http://www.thriftyfun.com/tf568913.tip.html
+http://www.thriftyfun.com/tf764097.tip.html
+http://www.thrillingdetective.com/eyes/grayson.html
+http://www.thrivent.com/planning/tools/dinkytown/SpendLess.html
+http://www.throneworld.com/personal/gaming/micea/micea_rules.html
+http://www.thuglifearmy.com/StaticPages/20/
+http://www.thuglifearmy.com/StaticPages/30/
+http://www.thulika.net/Mar2003/janata.html
+http://www.thunderboats.org/history/farley006.html
+http://www.thunderonline.com/thunder/wit/archive/280502.html
+http://www.thuntek.net/hardmag/v3.htm
+http://www.thuringowa.qld.gov.au/resident/animalRegistration.htm
+http://www.thurrock.gov.uk/housing/tenants/content.php?page=moving_home
+http://www.thurrock.gov.uk/socialcare/adults/content.php?page=learning_disabilities
+http://www.thursoeyecare.co.uk/Eye%20on%20the%20News.htm
+http://www.thus.net/channel/newsletter/thus_0804.htm
+http://www.thyroid-info.com/autoimmunebook.htm
+http://www.thyroid.org/professionals/publications/statements/ki/02_04_09_ki_qa.html
+http://www.ti.com/corp/docs/company/history/lifeintheoilpatch.shtml
+http://www.ti.com/sc/docs/stdterms.htm
+http://www.ti.ubc.ca/pages/letter39.htm
+http://www.tiaa-cref.org/pubs/html/governance_policy/social_responsibility.html
+http://www.tian.cc/2004/10/hello-vs-ni-hao.html
+http://www.tian.cc/2005/02/baby-got-book-by-sir-reads-lot.html
+http://www.tiaonline.org/media/pulse/1998/pulse0498-4.cfm
+http://www.tiaxllc.com/aboutus/abo_newsviews_byind.php?ind=GOV
+http://www.tibet-china.org/newbook/englishhtml/sciencee.html
+http://www.tibet.net/tibbul/0101/nakhe.html
+http://www.tibetankungfu.com/chon_the_principle_of_destruction.htm
+http://www.tibetanmastiffdogs.com/dogworld.htm
+http://www.tibetsociety.com/campaigns.asp
+http://www.ticam.utexas.edu/~mciarleg/MCresume3.htm
+http://www.ticketone.com.cn/shangpin.asp?no=22347;8
+http://www.ticketswitch.com/common/layout.shtml?Affiliates
+http://www.tid.org/News/
+http://www.tiddlywinks.org/how_to_play/rules/english/alleghany/parent_game.html
+http://www.tieasia.org/TEXT/text_Gina.htm
+http://www.tiedtothetracks.com/storytelling/archives/fiction_matters_in_general/
+http://www.tiempocyberclimate.org/newswatch/feature050204.htm
+http://www.tietoenator.com/default.asp?path=1,96,274,6503
+http://www.tietoenator.com/default.asp?path=1,96,274,6506
+http://www.tif.ne.jp/eng/details.do?code=6&areaID=1&categoryID=9&subCategoryID=36
+http://www.tiffinbox.org/
+http://www.tig.com/financial.asp
+http://www.tigerleasing.com/employment.shtml
+http://www.tigernt.com/onlineDoc/tij1/Chapter12.html
+http://www.tigersincrisis.com/problems_4.htm
+http://www.tigeru.com/ftopict-3572.html
+http://www.tigerweekly.com/article2142.html
+http://www.tight-science.com/old/danclowes.html
+http://www.tightlinecharters.ca/tightlinecharters/species_notes.html
+http://www.tigrai.org/TNTourism.html
+http://www.tikkun.org/Tikkunmail/index.cfm/action/current_issue.html
+http://www.tikkun.org/magazine/index.cfm/action/tikkun/issue/tik0005/article/000513b.html
+http://www.tile.net/webdev/?Warning:-The-Truth-About-Having-a-Web-Site!&id=37101
+http://www.tim-roth.com/articles/vanitysep95.html
+http://www.tim-thompson.com/petrosian.html
+http://www.timberpress.com/books/excerpt/0-88192-726-0
+http://www.time-to-run.com/beginners/projects/tracyw/report-back/230603.htm
+http://www.time.com/time/archive/preview/0,10987,818744,00.html
+http://www.time.com/time/archive/preview/0,10987,920692,00.html
+http://www.time.com/time/archive/preview/0,10987,994929,00.html
+http://www.time.com/time/arts/article/0,8599,1061415,00.html
+http://www.time.com/time/asia/covers/501040531/essay.html
+http://www.time.com/time/asia/features/sex/sexopener.html
+http://www.time.com/time/asia/magazine/article/0,13673,501040621-650755,00.html
+http://www.time.com/time/asia/magazine/article/0,13673,501041129-785412,00.html
+http://www.time.com/time/asia/mediakit/home/article/0,17540,1069513,00.html
+http://www.time.com/time/columnist/arnold/article/0,9565,232659,00.html
+http://www.time.com/time/columnist/arnold/article/0,9565,547796,00.html
+http://www.time.com/time/columnist/corliss/article/0,9565,1043267,00.html
+http://www.time.com/time/columnist/corliss/article/0,9565,411371-2,00.html
+http://www.time.com/time/columnist/corliss/article/0,9565,597240,00.html
+http://www.time.com/time/columnist/klein/article/0,9565,1053588,00.html
+http://www.time.com/time/columnist/krauthammer/article/0,9565,1035052,00.html
+http://www.time.com/time/columnist/krauthammer/article/0,9565,557749,00.html
+http://www.time.com/time/election2004/columnist/klein/article/0,18471,600843,00.html
+http://www.time.com/time/europe/
+http://www.time.com/time/europe/digital/magazine/0,13716,268264,00.html
+http://www.time.com/time/europe/magazine/2002/1104/turkey/cyprus.html
+http://www.time.com/time/europe/magazine/article/0,13005,901030217-420981,00.html
+http://www.time.com/time/europe/magazine/article/0,13005,901040816-678570,00.html
+http://www.time.com/time/globalbusiness/article/0,9171,1050297-1,00.html
+http://www.time.com/time/magazine/article/0,9171,1074105,00.html
+http://www.time.com/time/nation/article/0,8599,1071185,00.html
+http://www.time.com/time/personoftheyear/2004/story.html
+http://www.time.com/time/press_releases/article/0,8599,1071230,00.html
+http://www.time.com/time/reports/planet/nature2.html
+http://www.time.com/time/sampler/article/0,8599,173494,00.html
+http://www.time4me.com/theme/write/ebook/5.htm
+http://www.timebank.org.uk/campaigns/changing_streets/changingstreets_community_resources.htm
+http://www.timebank.org.uk/stories/pages/benenden_flat.htm
+http://www.timegate.com/forum/showthread.php?goto=lastpost&t=9954
+http://www.timegate.com/forum/showthread.php?t=9954
+http://www.timegoesby.net/2004/12/social_security_1.html
+http://www.timelord.co.uk/fiction/dr7/prime.htm
+http://www.timelord.co.uk/rf/01-15/1_2.htm
+http://www.timeout.com/film/81407.html
+http://www.times.co.zm/news/archives.cgi?category=12&view=10.20.03-10.29.03
+http://www.times10.org/lorne_1.htm
+http://www.timesbeacon.com/story/0,21731,1025160,00.html
+http://www.timescommunity.com/site/tab5.cfm?newsid=13422573&BRD=2553&PAG=461&dept_id=511693&rfi=6
+http://www.timeshare.org.uk/holicon.html
+http://www.timesharesaver.com/visitor-agreement.php
+http://www.timesheetsmts.com/spechome/
+http://www.timesleader.com/mld/timesleader/10544875.htm?template=contentModules/printstory.jsp
+http://www.timesleader.com/mld/timesleader/business/technology/9650595.htm?template=contentModules/printstory.jsp
+http://www.timesleader.com/mld/timesleader/news/7795256.htm
+http://www.timesofmalta.com/core/article.php?id=190225
+http://www.timesofmalta.com/core/headlines.php?section=news&date=20050607
+http://www.timesonline.co.uk/
+http://www.timesonline.co.uk/TGD/tgdBreakingNewsDisplay/0,,3,00.html
+http://www.timesonline.co.uk/article/0,,1059-1586733,00.html
+http://www.timesonline.co.uk/article/0,,1068-1480421,00.html
+http://www.timesonline.co.uk/article/0,,1072-1665233,00.html
+http://www.timesonline.co.uk/article/0,,12771-1081922,00.html
+http://www.timesonline.co.uk/article/0,,15994-686741,00.html
+http://www.timesonline.co.uk/article/0,,16949-1260975,00.html
+http://www.timesonline.co.uk/article/0,,2-1436909,00.html
+http://www.timesonline.co.uk/article/0,,2087-1302525,00.html
+http://www.timesonline.co.uk/article/0,,2087-1431598,00.html
+http://www.timesonline.co.uk/article/0,,2087-1650822,00.html
+http://www.timesonline.co.uk/article/0,,2088-1462071,00.html
+http://www.timesonline.co.uk/article/0,,2088-1641358,00.html
+http://www.timesonline.co.uk/article/0,,2095-1431025,00.html
+http://www.timesonline.co.uk/article/0,,2095-1441641,00.html
+http://www.timesonline.co.uk/article/0,,2102-1465935,00.html
+http://www.timesonline.co.uk/article/0,,22649-1641358,00.html
+http://www.timesonline.co.uk/article/0,,251-268735,00.html
+http://www.timesonline.co.uk/article/0,,291-1296910,00.html
+http://www.timesonline.co.uk/article/0,,2941-591,00.html
+http://www.timesonline.co.uk/article/0,,3-1365782,00.html
+http://www.timesonline.co.uk/article/0,,3-1390265,00.html
+http://www.timesonline.co.uk/article/0,,3-1410968,00.html
+http://www.timesonline.co.uk/article/0,,3-1616578,00.html
+http://www.timesonline.co.uk/article/0,,378-1593794,00.html
+http://www.timesonline.co.uk/article/0,,3933-1480187,00.html
+http://www.timesonline.co.uk/article/0,,4003-1621287,00.html
+http://www.timesonline.co.uk/article/0,,4041-1618118,00.html
+http://www.timesonline.co.uk/article/0,,60-1455157,00.html
+http://www.timesonline.co.uk/article/0,,630-1646674,00.html
+http://www.timesonline.co.uk/article/0,,630-576725,00.html
+http://www.timesonline.co.uk/article/0,,632-1419553,00.html
+http://www.timesonline.co.uk/article/0,,716-1113722,00.html
+http://www.timesonline.co.uk/article/0,,7813-983180,00.html
+http://www.timesonline.co.uk/article/0,,7994-969445,00.html
+http://www.timesonline.co.uk/article/0,,8164-1453877,00.html
+http://www.timesonline.co.uk/article/0,,8213-1460550,00.html
+http://www.timesonline.co.uk/section/0,,175,00.html
+http://www.timesonline.co.uk/section/0,,176,00.html
+http://www.timespicayune.com/pages/circulation/nieactvt.html
+http://www.timesunion.com/promo/Image/WhiteTeeth.htm
+http://www.timeswatch.org/articles/2004/1011.asp
+http://www.timetrade.com/testimonials.asp
+http://www.timex.com/html/watch_instr_comp.html
+http://www.timezone.com/article.aspx?id=wwatchfaq&articleId=wwatchfaq631668591017665598
+http://www.timj.co.uk/digiculture/patents/2003-08-18_Tim-vanOrden.php
+http://www.timkevan.com/articles/sports%20injury%20article%2015-10-03.html
+http://www.timorseajustice.org/
+http://www.timothyjpmason.com/WebPages/LangTeach/Licence/CM/OldLectures/L7_Interlanguage.htm
+http://www.timothyslaw.org/
+http://www.timparks.co.uk/17.html
+http://www.timslaw.com/copyright.htm
+http://www.timslaw.com/workers-comp-retaliation.htm
+http://www.tinceiling.com/comments/ccomments_1.htm
+http://www.tinhat.com/usability/colour.html
+http://www.tinman.org/Frontiers/FirstFrontiersOutline.html
+http://www.tintdude.com/faqtint.html
+http://www.tintdude.com/forum/lofiversion/index.php/t12837.html
+http://www.tinyminds.org/
+http://www.tinyninjatheater.com/reviews/stagedirectionsarticle.shtml
+http://www.tinyrevolution.com/mt/archives/000172.html
+http://www.tinyvital.com/BlogArchives/000091.html
+http://www.tinyvital.com/BlogArchives/000266.html
+http://www.tinyvital.com/BlogArchives/2005_01.html
+http://www.tipiglen.dircon.co.uk/village.html
+http://www.tipitaka.net/pali/study/pageload.php?book=001&page=10
+http://www.tipro.org/stormwater12803.html
+http://www.tips.org.za/events/forum2001.asp
+http://www.tips.org.za/events/forum2004/papers.asp
+http://www.tipthepizzaguy.com/ad/
+http://www.tirerack.com/tires/tiretech/competition/ku_v700_care.jsp
+http://www.tirerack.com/tires/tiretech/general/naload_psimarkings.jsp
+http://www.tiresias.org/equipment/eb12.htm
+http://www.tiresias.org/guidelines/operation.htm
+http://www.tiresias.org/phoneability/anyone_answer/8.htm
+http://www.tiscali.co.uk/entertainment/film/biographies/bill_murray_biog.html
+http://www.tiscali.co.uk/entertainment/film/biographies/john_travolta_biog.html
+http://www.tiscali.co.uk/lifestyle/healthfitness/health_advice/netdoctor/000277.html
+http://www.tiscali.co.uk/money/guardian/news/2004/09/16/hbosgivesupabbeychase.html
+http://www.tiscali.co.uk/motoring/crashnet/2004/10/22/news/formulaone/101766.html
+http://www.tiscali.co.uk/motoring/crashnet/2005/01/23/news/worldrally/104588.html
+http://www.tiscali.co.uk/property/jargon_buster/?country=Agreement+in+principle
+http://www.tiscali.co.uk/property/jargon_buster/?country=Collision+damage+waiver
+http://www.tiscali.co.uk/property/jargon_buster/?country=Principle
+http://www.tiscali.co.uk/reference/encyclopaedia/countryfacts/chad.html
+http://www.tiscali.co.uk/reference/encyclopaedia/countryfacts/germany.html
+http://www.tiscali.co.uk/reference/encyclopaedia/countryfacts/southkorea.html
+http://www.tiscali.co.uk/reference/encyclopaedia/hutchinson/m0003691.html
+http://www.tiscali.co.uk/reference/encyclopaedia/hutchinson/m0006759.html
+http://www.tiscali.co.uk/reference/encyclopaedia/hutchinson/m0019881.html
+http://www.titanic1.org/
+http://www.titanicinquiry.org/BOTInq/BOTInq22Howell03.html
+http://www.titanicinquiry.org/usinq/usreport/AmInqRep06.html
+http://www.titanlabs.net/oilflo.htm
+http://www.titech.ac.jp/news/e/idc2004.html
+http://www.titus2.com/corners/12-01-d.htm
+http://www.tiu.edu/studentaffairs/career/cover_letter.htm
+http://www.tivocommunity.com/tivo-vb/archive/index.php/t-190285.html
+http://www.tjacobi.com/archives/venture_capital.php
+http://www.tjc.edu/emergency/index.asp
+http://www.tjcenter.org/muzzles.html
+http://www.tjeffschool.org/lschool.htm
+http://www.tjhealth.com/patient/patient_bill_of_rights.html
+http://www.tjmonkeys.com/thought.php?theid=921
+http://www.tjurunga.com/thinking/guide.html
+http://www.tk-designs.com/african/ghana-marraige.htm
+http://www.tkb.org/NewsStory.jsp?storyID=53666
+http://www.tke.org/resources/financial/financial_potpourri.htm
+http://www.tki.org.nz/e/community/language/nzsl/
+http://www.tkline.freeserve.co.uk/Metamorph11.htm
+http://www.tklovers.com/StoriesF/Ticklish%20Secretaries.htm
+http://www.tkstoystand.com/PAGES/GAMES/bg_main_2.html
+http://www.tlainc.com/ifalcrev2.htm
+http://www.tlchm.bris.ac.uk/safety/glass.htm
+http://www.tlcwa.org.au/
+http://www.tli.gatech.edu/education/lps/2005/lpcv/
+http://www.tli.gatech.edu/education/lps/2005/mhsc/
+http://www.tlio.org.uk/history/histladd.html
+http://www.tlirr.com/htm/stories.htm
+http://www.tlt.com/mambo/index.php?option=com_content&task=view&id=58&Itemid=49
+http://www.tltgroup.org/Seven/2_Stu-Stu_Cooperation.htm
+http://www.tltgroup.org/programs/seven.html
+http://www.tltgroup.org/resources/Flashlight/Scholarship_What-2.html
+http://www.tlucretius.net/Sophie/Castle/Round.html
+http://www.tmc.edu/thi/sirjames.html
+http://www.tmcnet.com/comsol/0401/0401lab1.htm
+http://www.tmcnet.com/tmcnet/articles/071502ni.htm
+http://www.tmcnet.com/usubmit/-motorola-city-chicago-kick-off-technology-innovation-week-/2005/jun/1156331.htm
+http://www.tmcnet.com/usubmit/2004/Jun/1051603.htm
+http://www.tmcnet.com/usubmit/2005/Jan/1107416.htm
+http://www.tmcnet.com/usubmit/2005/Jun/1156331.htm
+http://www.tmfhs.org/bariatric_center_surgery_options.php
+http://www.tmgnow.com/repository/planetary/sweep.html
+http://www.tmh2o.com/customer_services/waterrates/business_service_fees/
+http://www.tmhdesign.com/miscellaneous%20pages/faq.htm
+http://www.tmj.org/donation.asp
+http://www.tml.hut.fi/Studies/T-110.551/2002/May/carryout.html
+http://www.tml.hut.fi/Studies/T-110.551/2005/carryout.html
+http://www.tmra2.org/webblog/2004_07_01_arc.html
+http://www.tms.org/pubs/journals/JOM/0301/Giurgiutiu/Giurgiutiu-0301.html
+http://www.tms.org/pubs/journals/JOM/9507/Manthey-9507.html
+http://www.tmsquared.com/R66KC_Kite_Fields.htm
+http://www.tmtm.com/nothing/archives/001982.html
+http://www.tn-humanities.org/douglass.htm
+http://www.tn.regentsdegrees.org/courses/syllabi/pc3250.htm
+http://www.tn.regentsdegrees.org/msn/default.htm
+http://www.tnau.ac.in/chennai/chennai.html
+http://www.tnellen.com/ted/tc/schein.html
+http://www.tnema.org/newsletterwork/ematmain.htm
+http://www.tngenweb.org/campbell/hist-bogan/WilliamLay.html
+http://www.tni.org/acts/mdforum.htm
+http://www.tni.org/asem-seoul/004broek.htm
+http://www.tnl.net/who/bibliography/what_is_RSS?/
+http://www.tnmb.uscourts.gov/
+http://www.tnpharm.org/
+http://www.tnr.com/051500/easterbrook051500.html
+http://www.tnr.com/091701/reich091701.html
+http://www.tnr.com/101501/3franklin101501.html
+http://www.tnr.com/arch/hs/
+http://www.tnt-audio.com/ampli/majike.html
+http://www.tnt-audio.com/casse/norh9_e.html
+http://www.tnt-audio.com/clinica/spkcbl_e.html
+http://www.tnt-audio.com/guide/sources_e.html
+http://www.tnt-audio.com/shows/triode98.html
+http://www.tntdiventures.com/israel.html
+http://www.tntech.edu/reslife/gsl/gsl_section2.htm
+http://www.tnty.com/newsletter/futures/archive/v01-05technology.html
+http://www.toa.com/shnn?asked09
+http://www.toadhollowstudio.com/fvhowto.html
+http://www.toastmasters.bc.ca/benefits.php
+http://www.tobacco.org/Resources/culture.html
+http://www.tobacco.org/articles/category/fires/
+http://www.tobacco.org/articles/country/palestine/
+http://www.tobacco.org/news/147226.html
+http://www.tobacco.org/news/197353.html
+http://www.tobacco.org/resources/rendezvous/biener.html
+http://www.tobaccobowl.com/tea_glossary.htm
+http://www.tobaccofreeca.com/staying_in_control.html
+http://www.tobaccojournal.com/
+http://www.tobe.net/papers/beyond.html
+http://www.tobunken.go.jp/~kokusen/ENGLISH/MEETING/CONFSYS/confsys.html
+http://www.today.ucla.edu/2004/040413briefs_namesfaces.html
+http://www.today.wisc.edu/index.php?date=2005-06-02&month_cal=2005-06-01
+http://www.today.wisc.edu/index.php?date=2005-06-23&month_cal=2005-06-01
+http://www.today.wisc.edu/index.php?date=2005-06-30&month_cal=2005-06-01
+http://www.todayinsci.com/1/1_17.htm
+http://www.todayinsci.com/2/2_28.htm
+http://www.todayinsci.com/3/3_03.htm
+http://www.todayinsci.com/6/6_11.htm
+http://www.todaysengineer.org/2005/Jan/x-prize.asp
+http://www.todaysmilitary.com/faq/t2_faq_findanadvisor.php
+http://www.todaysparent.com/education/general/article.jsp?content=20040302_142638_3872&page=1
+http://www.todaysparent.com/pregnancybirth/labour/article.jsp?content=20041210_162742_5956&page=1
+http://www.todaysparent.com/preteen/education/article.jsp?content=20040302_142638_3872&page=1
+http://www.todaysparent.com/preteen/education/article.jsp?content=892&page=1
+http://www.todaysparent.com/schoolage/education/article.jsp?content=20040302_142638_3872&page=1
+http://www.toddlertime.com/borderline/covering-the-pain.htm
+http://www.toddmessegeephoto.com/About%20the%20Artist.html
+http://www.todsmurray.com/accessible/industry/capital/capital-article1.html
+http://www.tohm.ie/publications/annualreports/20010627170805.html
+http://www.tohokingdom.com/web_pages/dvd/ran_wellspring.htm
+http://www.tolatsga.org/iro.html
+http://www.tolc.org/living.htm
+http://www.tolc.org/nash.htm
+http://www.toldyouso.net/search/details.cfm?tblDVDReview.RMovieName=All%20About%20Eve%2C%20Studio%20Classics
+http://www.toledoblade.com/apps/pbcs.dll/article?AID=/20050608/NEWS24/50608003
+http://www.toledoblade.com/apps/pbcs.dll/article?AID=/20050617/NEWS24/50617015
+http://www.toledoblade.com/apps/pbcs.dll/article?AID=/20050617/SRRARECOINS/506170449
+http://www.toledozoo.org/cateringrentals/cater_rentals.html
+http://www.tolerance.org/teens/printar.jsp?p=0&ar=6&pi=te
+http://www.tolkiencollector.com/oxford.html
+http://www.tolkiensociety.org/ed/
+http://www.toltecspirit.com/
+http://www.tolueislam.com/Parwez/tkn/TK_13.htm
+http://www.tomatonation.com/vi061605.shtml
+http://www.tombola.ac.uk/about.shtml
+http://www.tombrazaitis.com/PD10.htm
+http://www.tomchance.org.uk/writing/phil-oss-fs
+http://www.tomdispatch.com/index.mhtml
+http://www.tomdispatch.com/index.mhtml?emx=x&pid=1551
+http://www.tomdispatch.com/index.mhtml?pid=1509
+http://www.tomdispatch.com/index.mhtml?pid=1744
+http://www.tomdispatch.com/index.mhtml?pid=1824
+http://www.tomdispatch.com/index.mhtml?pid=2486
+http://www.tomdispatch.com/index.mhtml?pid=2837
+http://www.tomleonard.co.uk/other_publications/mass_bombing-catechism.shtml
+http://www.tommy.com/info/letter-norway.jsp
+http://www.tomoye.com/ourproducts/41_releasenotes.htm
+http://www.tompaine.com/articles/kerry_won_.php
+http://www.tompaine.com/feature.cfm/ID/5747
+http://www.tompkins-co.org/health/westnile.htm
+http://www.tompkins-co.org/legislature/highlights/20031021.html
+http://www.tomreillytraining.com/tt_article_9.htm
+http://www.tomshardware.com/archive/9908.html
+http://www.tomshardware.com/business/20040811/amd-02.html
+http://www.tomshardware.com/mobile/20040225/
+http://www.tongatapu.net.to/tonga/convictions/schools/tbu/piula/piula.htm
+http://www.tonsoflyrics.com/feet_fetish_videos.htm
+http://www.tonsoflyrics.com/feet_sole_fetish.htm
+http://www.tonsoflyrics.com/female_camel_toe_pictures.htm
+http://www.tonsoflyrics.com/hot_thong_bikini.htm
+http://www.tonykline.co.uk/Browsepages/French/Rimbaud3.htm
+http://www.tonykline.co.uk/Browsepages/Spanish/FiveintheafternoonLorca.htm
+http://www.tonylevin.com/
+http://www.tonymartin.ca/community/meetingnotes/meetingnotesmay27
+http://www.tonypierce.com/blog/bloggy.htm
+http://www.tonywright.labour.co.uk/ViewPage.cfm?Page=5964
+http://www.toolbase.org/tertiaryT.asp?DocumentID=2957&CategoryID=1496
+http://www.toolbase.org/tertiaryT.asp?TrackID=&CategoryID=1864&DocumentID=2268
+http://www.toolkit.cch.com/text/P01_0510.asp
+http://www.toolsgroup.com/images_us/amr_redefining.pdf?spid=30410106&cid=1413
+http://www.toolshed.com/blog/
+http://www.toolsofthetrade.net/
+http://www.toolsofthetrade.net/articles/showarticle.asp?articleID=2264&position=0&type=article
+http://www.tooltimer.com/Rules.htm
+http://www.toomanychefs.net/archives/001068.php
+http://www.toomanychefs.net/archives/001274.php
+http://www.toomuchsexy.org/index/weblog/comments/philosophical_thoughts_kripkes_argument/
+http://www.toomuchsexy.org/index/weblog/comments/sick_of_it/item.name
+http://www.toomuchsexy.org/index/weblog/comments/so_sad_that_i_cry/
+http://www.toonsonice.com/slapshotgolftournament.html
+http://www.tooter4kids.com/poetry_pals_club_2002.htm
+http://www.toowrite.com/toowrite_story.asp?sid=1572
+http://www.toowrite.com/toowrite_story.asp?sid=5980
+http://www.top-consultant.com/Canada/news%5Cnewsletter291003.htm
+http://www.top-consultant.com/index.asp?Start=1
+http://www.top-consultant.com/index.asp?Start=121
+http://www.top-consultant.com/index.asp?Start=241
+http://www.top-consultant.com/index.asp?Start=301
+http://www.top-consultant.com/index.asp?Start=31
+http://www.top-consultant.com/index.asp?Start=451
+http://www.top-consultant.com/index.asp?Start=601
+http://www.top-consultant.com/index.asp?Start=61
+http://www.top-consultant.com/index.asp?Start=841
+http://www.top-consultant.com/index.asp?Start=91
+http://www.top100webshops.com/department-stores6.html
+http://www.top300.co.za/National/Awards/TopBusinessmenoftheYear.htm
+http://www.top48hours.com/autorankphp/amazon-buy-B0002XVQSU.html
+http://www.top500.org/ORSC/2004/glossary.html
+http://www.top500.org/main/Books/
+http://www.topfloortech.com/search.htm
+http://www.topgear.com/content/news/cars_coming_soon/28/
+http://www.topicalinfo.org/Alternative.htm
+http://www.topix.net/city/oxford-md
+http://www.topix.net/hobbies/model-railroading
+http://www.topix.net/tech
+http://www.topladder.com.au/totld/01_webdesign/webdes_database.html
+http://www.topmudsites.com/article14.shtml
+http://www.topology.org/philo/sayings.html
+http://www.toppan.co.jp/english/ir/04/03_2.html
+http://www.topplebush.com/article138_recpres.shtml
+http://www.tops-vet-rehab.com/modalities.html
+http://www.topsecretrecipes.com/sleuth/sleuth2.htm
+http://www.topsitelists.com/start/carolina/topsites.html
+http://www.topsitelists.com/topsites.cgi?ID=156&user=kustomtopsites&area=street
+http://www.toptable.co.uk/feature.cfm?fID=10
+http://www.topy.net/you_could_be_dead.html
+http://www.tor.com/eschbach/interview.html
+http://www.tor.com/hunting.html
+http://www.torahcodes.co.il/
+http://www.torbay.gov.uk/index/living/facts-figures/viewpoint/viewpoint-two.htm
+http://www.torchmate.com/qa.htm
+http://www.torcon3.on.ca/faq/currencyexch.html
+http://www.tornio.fi/tuli/matkailu/en/sights.html
+http://www.toronto.com/feature/12807/11.html
+http://www.toronto.servpro.ca/testlist.php?city=Greater%20Toronto%20Area&letter=L&sub=30593&compType=Garden%20Centres
+http://www.torontoist.com/archives/arts_and_events/
+http://www.torontosun.com/Anniversary/thewall.html
+http://www.torpedowatch.com/page/tpo/aboutus/philosophy.html
+http://www.tortoisetrust.org/articles/hospital.htm
+http://www.tortolita.com/times.html
+http://www.torymagoo.org/lurklev.htm
+http://www.torytrouble.org.uk/weblog/
+http://www.tostan.org/news-mollym.htm
+http://www.total-tickets.com/
+http://www.totalaccess.co.uk/~sa_webapp/run.asp?page=663
+http://www.totalbarcode.com/information.asp
+http://www.totalbedroom.com/beds-urbana.html
+http://www.totalchoicehosting.com/help/faqs.html
+http://www.totalimmersion.net/happylaps-workshop.html
+http://www.totaljobs.com/editorial/getadvice_applyjobs/your_cv.shtm
+http://www.totaljobs.com/editorial/getadvice_survivingatwork/head_hunted.shtm
+http://www.totaljobs.com/editorial/getadvice_survivingjobhunt/head_hunted.shtm
+http://www.totallybritney.com/style/
+http://www.totallyjewish.com/news/stories/?disp_type=0&disp_story=jAh3GH
+http://www.totallykate.com/london03/londonpr.html
+http://www.totallysecuresolutions.com/
+http://www.totalselling.com/keynote.cfm
+http://www.totalwar.com/community/medieval1.htm
+http://www.tothepointwriting.net/merlynproductions/zencuppa/archives/2003_04_01_zencuppa_archive.html
+http://www.tothesource.org/2_12_2003/2_12_2003.htm
+http://www.totse.com/en/bad_ideas/scams_and_rip_offs/m-tfraud.html
+http://www.totse.com/en/ego/literary_genius/banboox.html
+http://www.totse.com/en/fringe/dreams_auras_astral_projection/obe.html
+http://www.totse.com/en/politics/political_documents/meech.html
+http://www.totse.com/en/politics/us_military/gulf.html
+http://www.totse.com/en/technology/telecommunications/rs232.html
+http://www.touchmind.com/live-help-return-on-investment.html
+http://www.touchstonemag.com/archives/article.php?id=17-02-032-f
+http://www.touchstonemag.com/docs/issues/16.7docs/16-7pg22.html
+http://www.touchstonemag.com/docs/issues/17.2docs/17-02-032.html
+http://www.tourbus.com/television-news.html
+http://www.tourbus.com/vp101.htm
+http://www.tourcarmel.com/company/customer_comments.html
+http://www.touregypt.net/ebph5.htm
+http://www.touregypt.net/featurestories/amunher.htm
+http://www.touregypt.net/featurestories/dsteppyramid5.htm
+http://www.touregypt.net/historicalessays/nefertari.htm
+http://www.touregypt.net/magazine/ancientegyptwriting.htm
+http://www.touregypt.net/taleoftwobrothers.htm
+http://www.tourhosts.com.au/isi2005/programs_shcourses.asp
+http://www.tourism.australia.com/NewsCentre.asp?lang=EN&sub=0360&al=312
+http://www.tourismcambodia.com/tourop/Vietnam/tourist_sites.htm
+http://www.tourismresources.ie/cht/tours/antiques.htm
+http://www.tourismturkey.org/regions/marmara/mosques.html
+http://www.touristnetuk.com/ne/durham/towns/sedgefield.htm
+http://www.touristnetuk.com/ne/york/attractions/
+http://www.tournamentofroses.com/current/parade.htm
+http://www.tourolaw.edu/student_services/honor_societies/law_review/vol13n3/pg587.html
+http://www.tourroundchina.com/
+http://www.tours2greece.info/greece-travel/twelfth_feat.php
+http://www.tourspain.co.uk/News/MonthlyNewsFeb04.htm
+http://www.tourtexas.com/dallas/dallas50free.html
+http://www.touruk.co.uk/nyorks/nyorks_york.htm
+http://www.touryosemite.com/company/customer_comments.html
+http://www.tow.com/2002/06/
+http://www.tow.com/interests/dancing_reviews.shtml
+http://www.towardtradition.org/Printer_Truth_Religion_Homophobia.htm
+http://www.towardtradition.org/article_Truth_Religion_Homophobia.htm
+http://www.towerbank.net/news/2004/052504-R4.html
+http://www.towerbuilding.com/towerb_w/files/nr_WBJ05122003.htm
+http://www.towerhamlets.gov.uk/data/caring-for-you/data/getting-married/index.cfm
+http://www.towerhobbies.com/jobs.html
+http://www.towerofbabel.com/features/textgenderenglish/
+http://www.towerofbabel.com/map/index.pl?issue=20041214&mode=
+http://www.towerpub.com/ourdata/lists.html
+http://www.towersperrin.com/hrservices/webcache/towers/jsp/service_offering/serv_off.jsp?region=us&so=us_comm&tab=0
+http://www.town.arlington.ma.us/Public_Documents/ArlingtonMA_Schools/Fiscal/S00134AE6
+http://www.town.cornwall.pe.ca/residents/services.cfm
+http://www.town.okotoks.ab.ca/devapp.html
+http://www.town.olds.ab.ca/boards.html
+http://www.town.shiwa.iwate.jp/miraieng/1.html
+http://www.town.shiwa.iwate.jp/miraieng/4.html
+http://www.townhall.com/columnists/GuestColumns/Enlow20050202.shtml
+http://www.townhall.com/columnists/GuestColumns/Grossman20031001.shtml
+http://www.townhall.com/columnists/GuestColumns/printGrossman20031001.shtml
+http://www.townhall.com/columnists/alanreynolds/ar20030807.shtml
+http://www.townhall.com/columnists/larrykudlow/lk20050607.shtml
+http://www.townhall.com/columnists/larrykudlow/welcome.shtml
+http://www.townhall.com/columnists/paulgreenberg/pg20010622.shtml
+http://www.townhall.com/columnists/tonyblankley/tb20050622.shtml
+http://www.townhall.com/columnists/walterwilliams/ww20031029.shtml
+http://www.townofbraintreegov.org/blood.html
+http://www.townofbreckenridge.com/index.cfm?d=history
+http://www.townoffranklin.com/loonlake.html
+http://www.townonline.com/parentsandkids/opinion/view.bg?articleid=165225
+http://www.townsend.com/attorneys/bioDetails.asp?o=7272
+http://www.towntopics.com/jun0805/obits.html
+http://www.towntopics.com/jun1505/obits.html
+http://www.toy-tia.org/Content/NavigationMenu/Toy_Industy_Foundation/Press_Center/TIF_E-Update/November_2004/November_2004.htm
+http://www.toydirectory.com/monthly/June2003/Arts_Paper.asp
+http://www.toymania.com/columns/spotlight/spikedarla.shtml
+http://www.toymania.com/columns/spotlight/supshowgame.shtml
+http://www.toyotaatlantic.com/News.asp?ID=534
+http://www.toypost.co.uk/pages/loan.html
+http://www.toysafari.com/playmobl2004.html
+http://www.toytownmunich.com/
+http://www.toytownmunich.com/archive/001120.html
+http://www.toyvault.com/news.html
+http://www.toywebb.net/category39_1.htm
+http://www.tparents.org/Moon-Books/sav/Sav-09.htm
+http://www.tpe.com/~altarboy/garage.htm
+http://www.tpe.com/~altarboy/nt040111.htm
+http://www.tpi.org/about/jobs.htm
+http://www.tpi.org/about/staff.htm
+http://www.tpigroup.com/mesa/MSW2.html
+http://www.tpl.org/tier3_cd.cfm?content_item_id=15476&folder_id=588
+http://www.tpl.org/tier3_cdl.cfm?content_item_id=1103&folder_id=726
+http://www.tpl.org/tier3_cdl.cfm?content_item_id=1137&folder_id=827
+http://www.tpl.org/tier3_cdl.cfm?content_item_id=9607&folder_id=2045
+http://www.tpl.org/tier3_print.cfm?folder_id=2045&content_item_id=9607&mod_type=1
+http://www.tpl.org/tier3_print.cfm?folder_id=588&content_item_id=15476&mod_type=1
+http://www.tppalestine.com/imp&exp/customs.html
+http://www.tpwd.state.tx.us/adv/birding/beginbird/beginbird.htm
+http://www.tpwd.state.tx.us/fish/specinfo/blkdrum/blackdrum.phtml
+http://www.tpwd.state.tx.us/news/news/040503a.phtml
+http://www.tpwd.state.tx.us/park/pedernal/pedernal.htm
+http://www.tqnyc.org/NYC040791/major_players.html
+http://www.tr-teach.org/
+http://www.trac.sun.ac.za/careers_chemical1_frame.htm
+http://www.traceit.com/hon/faq.htm
+http://www.traces-cl.com/archive/2000/novembre/luca.htm
+http://www.traces.org/maria.html
+http://www.traceysolicitors.ie/drink-driving-law.html
+http://www.tracheostomy.com/trachkids/kids8/noah.htm
+http://www.trackandfieldnews.com/tfn/displayArticle.jsp?id=456
+http://www.trackattack.co.uk/content.php?categoryId=151
+http://www.trackingterrorism.com/default.asp?dismode=article&artid=1453
+http://www.trackoff.org/railshow.htm
+http://www.tracycrocker.com/p17.htm
+http://www.tracyonthego.com/tracy/020605/3.html
+http://www.tradboats.com/others.html
+http://www.trade10.com/Congestion.html
+http://www.tradeforum.org/news/fullstory.php/aid/609/Business_Reacts_to_Canc%FAn.html
+http://www.trademe.co.nz/listings-feature/0005-0383-0603-/auction-21973468.htm
+http://www.trademe.co.nz/structure/show_member_listings.asp?member=415998
+http://www.trademinister.gov.au/transcripts/2004/041119_apec.html
+http://www.trademinister.gov.au/transcripts/2005/050307_ds.html
+http://www.tradeport.org/affiliates/
+http://www.tradeport.org/tutorial/starting/
+http://www.traderlist.com/RobynGriggs-RaySchwartz.html
+http://www.tradersnation.com/radio.shtml
+http://www.tradersworld.com/Merchant2/merchant.mvc?Screen=PROD&Store_Code=TW&Product_Code=096723803X
+http://www.tradesignals.com/glossary/Futures_contract
+http://www.tradestation.com/aboutus/03012004c.shtm
+http://www.tradgames.org.uk/games/Quoits.htm
+http://www.tradgames.org.uk/games/ShovelBoard.htm
+http://www.tradgirl.com/climbing_faq/starting.htm
+http://www.tradingacademy.com/lessons/lessons20050201.shtm
+http://www.tradingmarkets.com/gall_iag.site/main/daytrading/
+http://www.tradingmarkets.com/gall_iag.site/main/daytrading/?int=index_page&full=1&id=6014
+http://www.tradingmarkets.com/gall_iag.site/main/stocks/?int=index_page&full=1&id=6014
+http://www.tradingmarkets.com/gall_tlp.site/courses/main/?full=1&id=6068&fwww=1
+http://www.tradingmarkets.com/index.cfm/termsuse/
+http://www.tradingstandards.net/pages/consumer.htm
+http://www.traditionalvalues.org/
+http://www.traditionalvalues.org/index.php
+http://www.traditioninaction.org/HotTopics/b005ht.htm
+http://www.traditioninaction.org/bev/bev11-30-2001.htm
+http://www.trafficfile.com/termsofservice.htm
+http://www.trafford.com/4dcgi/view-item?item=4275&30185906-10058aaa
+http://www.traidcraft.co.uk/template2.asp?pageID=1606&fromID=1276
+http://www.traildatabase.org/pyr99/
+http://www.trailend.org/wed-expectations.htm
+http://www.trailerlife.com/cforum/index.cfm/fuseaction/thread/tid/14962789/gotomsg/14973880.cfm
+http://www.training-classes.com/course_hierarchy/companies/239_Consulting_Skills_USA.php
+http://www.training-classes.com/course_hierarchy/courses/2774_Role_Play_Delivery.php
+http://www.training-classes.com/course_hierarchy/keyword_index/brought.html
+http://www.training-classes.com/course_hierarchy/keyword_index/facing.html
+http://www.training-classes.com/course_hierarchy/keyword_index/sales_training.html
+http://www.training-classes.com/course_hierarchy/keyword_index/telephone.html
+http://www.training.nih.gov/onlineapps/trainingprograms/applications/CLITD_AdList.aspx?AdID=TD-67
+http://www.trainingcafe.com/privacy.cfm
+http://www.trainingexpert.com/mtip.htm
+http://www.trainingexpert.com/negtips.htm
+http://www.traininginstitute.co.uk/itoljournal.htm
+http://www.trainingjournal.com/b2btermsandconditions.jsp
+http://www.trainingjournal.com/news/index.jsp
+http://www.trainingpressreleases.com/
+http://www.trainingpressreleases.com/index.asp
+http://www.trainingschool.bham.org.uk/reviews/Yr%207%20mc%20lesson%20review%20mc%20birm.htm
+http://www.trains.com/Content/Dynamic/Articles/000/000/001/001oetky.asp
+http://www.trains.com/community/forum/topic.asp?TOPIC_ID=12119&page=3
+http://www.trains.com/community/forum/topic.asp?page=3&TOPIC_ID=12119
+http://www.tralac.org/scripts/content.php?id=3618
+http://www.tranquilspace.com/newsletter/jan_05.html
+http://www.trans-man.org/messages.html
+http://www.trans4mind.com/counterpoint/harris1.shtml
+http://www.trans4mind.com/counterpoint/rosen.shtml
+http://www.trans4mind.com/counterpoint/stockamp.shtml
+http://www.trans4mind.com/counterpoint/werner.shtml
+http://www.trans4mind.com/healing/question234.html
+http://www.trans4mind.com/healing/question402.html
+http://www.trans4mind.com/positive/positive8.shtml
+http://www.trans4mind.com/sedona.html
+http://www.transaction-one.com/en/yabasoft.jsp
+http://www.transaction.net/web/tutor/text/orwell.html
+http://www.transalt.org/campaigns/brooklyn/bridges1.html
+http://www.transalt.org/campaigns/reclaiming/
+http://www.transcendentalists.com/walden_the_village.htm
+http://www.transcoalition.org/c/sus_msrc/msrc_final.html
+http://www.transcoalition.org/cal/Summit/03sum_recap_tea3.html
+http://www.transcom.mil/organization.cfm
+http://www.transcomm.ox.ac.uk/traces/iss7pg1.htm
+http://www.transdiffusion.org/intertel/features/paying/
+http://www.transformationafrica.com/history%20africa_2005.htm
+http://www.transformcolumbusday.org/legal/
+http://www.transformyourlife.com/capra/caprazyme.htm
+http://www.transgenderzone.com/features/husband.htm
+http://www.transgenderzone.com/research/hrt.htm
+http://www.transitionsabroad.com/information/media/mentions.shtml
+http://www.translational-medicine.com/content/3/1/3
+http://www.translink.co.uk/safetyresponse.asp
+http://www.translocal.net/susanna/cf.html
+http://www.transom.org/tools/editing_mixing/200212.mbox.towne.html
+http://www.transparency.org/pressreleases_archive/2004/2004.07.17.i.a._shortlist_2004.html
+http://www.transpect.com/japan_diary/
+http://www.transport.tas.gov.au/licence_information/learner_supervisory_guidelines.html
+http://www.transport2000.org.uk/news/maintainNewsArticles.asp?NewsArticleID=226
+http://www.transport2000.org.uk/news/maintainNewsArticles.asp?NewsArticleID=73
+http://www.transview.org/news/index.cfm?prID=761
+http://www.transwareplc.com/company/management.html
+http://www.trappist.net/newweb/enews_06_28_04.html
+http://www.trashcity.org/STRIP/VENUES/WAGGON.HTM
+http://www.trauma.org/resus/massive.html
+http://www.traumaresources.org/emotional_trauma_online_video.htm
+http://www.travel-around.com/about/default.asp
+http://www.travel-net.com/~retap/smctest.htm
+http://www.travelblog.org/Africa/Tanzania/blog-3926.html
+http://www.travelblog.org/World/gy-gov.html
+http://www.travelbrochuregraphics.com/extra/five_regiems.htm
+http://www.travelchinaguide.com/attraction/shanxi/pingyao/street.htm
+http://www.travelchinaguide.com/intro/cuisine_drink/cuisine/minority.htm
+http://www.traveldoctor.co.uk/flights.htm
+http://www.travelgolf.com/blogs/rebel.blogger/2005/05/31/can_t_be_a_pga_professional_hang_out_and
+http://www.travelin-tigers.com/zdave/baby5.htm
+http://www.travelinginspain.com/culture.html
+http://www.travelinsure.com/faq/susa.htm
+http://www.travelintelligence.com/wsd/articles/art_847.html
+http://www.travelintelligence.net/wsd/hotels/htls_3833_Les_Suites_TaipeiChingCheng_Taipei_review.html
+http://www.travellady.com/Issues/Issue54/kohtao.htm
+http://www.travellers-autobarn.com/new-design2/sales-terms.shtml
+http://www.travellerspoint.com/forum.cfm?thread=1605
+http://www.travellersrestplantation.org/Educational%20Programs.htm
+http://www.travelmate.com.au/Places/Featured_Regions.asp?RegionId=14
+http://www.travelretailworld.com/default.asp?page=13&PID=121&ISS=9026
+http://www.travelscene.co.uk/bookcond.htm
+http://www.travelscope.co.uk/Default.aspx.LocID-0g8new00f.RefLocID-0g800a002.Lang-EN.htm
+http://www.travelstay.com/pages/StChristophers-ShepherdsBush.htm
+http://www.traveltrade.com/generic_page.jsp?articleID=27
+http://www.travelweekly.co.uk/Article1538.htm
+http://www.travelweekly.co.uk/Company87.htm
+http://www.travelwithcare.com/browse.asp?catID=743
+http://www.travis.org/PDFs/index.cfm?action=view&pdfid=72
+http://www.travis.org/PDFs/index.cfm?action=view&pdfid=73
+http://www.travis.org/PDFs/index.cfm?action=view&pdfid=74
+http://www.travisa.com/
+http://www.trawden.lancsngfl.ac.uk/2001diarypg.html
+http://www.trcresearch.org.za/prog.htm
+http://www.treadwayelem.com/PTA.html
+http://www.treas.gov/press/releases/js1533.htm
+http://www.treas.gov/press/releases/js2466.htm
+http://www.treas.gov/press/releases/js919.htm
+http://www.treas.gov/press/releases/po34.htm
+http://www.treas.gov/press/releases/rr1050.htm
+http://www.treasuredmemoriesca.com/july2005.html
+http://www.treasurer.gov.au/tsr/content/transcripts/2005/013.asp
+http://www.treasuresofbritain.org/ThreaveGarden.htm
+http://www.treasury.gov.au/documents/965/HTML/docshell.asp?URL=09_appendix_B.asp
+http://www.treasury.govt.nz/forecasts/prefu/1999/summary.asp
+http://www.treatment-options.com/article.cfm?PubID=CM06-6-1-06&Type=Article&KeyWords=
+http://www.treatment-options.com/article.cfm?PubID=ON06-1-2-04&Type=Article&KeyWords=
+http://www.trec.state.tx.us/inspector/professional_inspector_app.asp
+http://www.tree2mydoor.com/plantcare.asp
+http://www.treecareindustry.org/content/pubs/November%202002%20TCI%20-%20Bird%20and%20insect%20damage%20to%20trees.htm
+http://www.treecouncil.org.uk/projects/WhyPayTwice.htm
+http://www.treehouse.com/sedit.shtml
+http://www.treelink.org/books/simpleact/chapter3.htm
+http://www.treemedia.com/cfrlibrary/library/background/olcott.html
+http://www.treepeople.org/vfp.dll?OakTree~getPage~&PNPK=84
+http://www.treesaregood.com/treecare/tree_selection.asp
+http://www.treesfortomorrow.com/teachers.htm
+http://www.treesnakes.com/
+http://www.treklite.com/products/
+http://www.trekweb.com/tng/crew/worf.html
+http://www.tremariepersians.fsnet.co.uk/tremarie_kitten-advice.htm
+http://www.trenchtownreadingcentre.com/bookwishlist.html
+http://www.trenterprises.com/tre_pages/newprods.htm
+http://www.trentu.ca/education/concurrent/profile.htm
+http://www.trentu.ca/humanresources/humanrights.html
+http://www.tri-cityherald.com/news/2002/0505/story5.html
+http://www.triangle.co.uk/pdf/validate.asp?j=bji&vol=26&issue=3&year=2000&article=Johnson_JISE_26_3
+http://www.triangle.co.uk/pdf/validate.asp?j=eda&vol=17&issue=2&year=2002&article=5_Donicht-Fluck_EDAG_17_2_3_web
+http://www.triangle.co.uk/pdf/validate.asp?j=jit&vol=9&issue=1&year=2000&article=Fisher_JITT_9_1
+http://www.triangle.co.uk/pdf/validate.asp?j=jit&vol=9&issue=2&year=2000&article=Crawford_JITT_9_2
+http://www.triangle.co.uk/pdf/validate.asp?j=whr&vol=5&issue=3&year=1996&article=5-3-PS
+http://www.triangle.co.uk/pdf/validate.asp?j=wow&vol=4&issue=1&year=1997&article=04-1-ek
+http://www.triangle.co.uk/pdf/viewpdf.asp?j=for&vol=43&issue=2&year=2001&article=Forum_43_2_CoreContent&id=69.3.161.75
+http://www.triangle.com/marketplace/display/farm/625/
+http://www.triangle.org/resources/leadership/lead-charge/index.cfm
+http://www.trianglefreepress.org/
+http://www.tribalbellydance.com/classes.php
+http://www.tribaltextiles.info/articles/change_revival_Mai_Chau.htm
+http://www.tribes.com/abstract_transform_environments.htm
+http://www.tribstar.com/articles/2005/06/18/features/history/history03.txt
+http://www.tribtown.com/main.asp?sectionid=1&subsectionid=1&articleid=9080
+http://www.tribuneindia.com/1998/98dec07/edu.htm
+http://www.tribuneindia.com/1998/98nov14/biz.htm
+http://www.tribuneindia.com/2000/20001017/world.htm
+http://www.tribuneindia.com/2001/20010304/cth3.htm
+http://www.tribuneindia.com/2001/20010310/ldh1.htm
+http://www.tribuneindia.com/2001/20010320/biz.htm
+http://www.tribuneindia.com/2001/20010511/biz.htm
+http://www.tribuneindia.com/2001/20010520/world.htm
+http://www.tribuneindia.com/2001/20010521/sports.htm
+http://www.tribuneindia.com/2001/20010818/windows/above.htm
+http://www.tribuneindia.com/2001/20010903/login/main1.htm
+http://www.tribuneindia.com/2001/20011122/ncr1.htm
+http://www.tribuneindia.com/2001/20011130/cth1.htm
+http://www.tribuneindia.com/2001/20011214/ldh1.htm
+http://www.tribuneindia.com/2002/20020101/ldh1.htm
+http://www.tribuneindia.com/2002/20020103/haryana.htm
+http://www.tribuneindia.com/2002/20020106/ldh1.htm
+http://www.tribuneindia.com/2002/20020120/biz.htm
+http://www.tribuneindia.com/2002/20020209/edit.htm
+http://www.tribuneindia.com/2002/20020225/biz.htm
+http://www.tribuneindia.com/2002/20020226/ncr1.htm
+http://www.tribuneindia.com/2002/20020402/ldh.htm
+http://www.tribuneindia.com/2002/20020427/spr-trib.htm
+http://www.tribuneindia.com/2002/20020621/main3.htm
+http://www.tribuneindia.com/2002/20020717/haryana.htm
+http://www.tribuneindia.com/2002/20020803/biz.htm
+http://www.tribuneindia.com/2002/20020808/cth1.htm
+http://www.tribuneindia.com/2002/20020831/nation.htm
+http://www.tribuneindia.com/2002/20020928/nation.htm
+http://www.tribuneindia.com/2002/20021005/ldh1.htm
+http://www.tribuneindia.com/2002/20021007/nation.htm
+http://www.tribuneindia.com/2002/20021129/ncr1.htm
+http://www.tribuneindia.com/2002/20021212/cth1.htm
+http://www.tribuneindia.com/2003/20030122/sports.htm
+http://www.tribuneindia.com/2003/20030210/ncr1.htm
+http://www.tribuneindia.com/2003/20030213/ldh1.htm
+http://www.tribuneindia.com/2003/20030216/nation.htm
+http://www.tribuneindia.com/2003/20030316/spectrum/nature.htm
+http://www.tribuneindia.com/2003/20030401/ldh1.htm
+http://www.tribuneindia.com/2003/20030401/nation.htm
+http://www.tribuneindia.com/2003/20030420/cth1.htm
+http://www.tribuneindia.com/2003/20030608/class-f.htm
+http://www.tribuneindia.com/2003/20030616/edit.htm
+http://www.tribuneindia.com/2003/20030717/biz.htm
+http://www.tribuneindia.com/2003/20030829/cth1.htm
+http://www.tribuneindia.com/2003/20030830/windows/above.htm
+http://www.tribuneindia.com/2003/20030909/edu.htm
+http://www.tribuneindia.com/2003/20030930/biz.htm
+http://www.tribuneindia.com/2003/20031129/ncr1.htm
+http://www.tribuneindia.com/2003/20031229/edit.htm
+http://www.tribuneindia.com/2004/20040102/j&k.htm
+http://www.tribuneindia.com/2004/20040111/ncr1.htm
+http://www.tribuneindia.com/2004/20040116/himachal.htm
+http://www.tribuneindia.com/2004/20040129/ncr1.htm
+http://www.tribuneindia.com/2004/20040211/edit.htm
+http://www.tribuneindia.com/2004/20040329/edit.htm
+http://www.tribuneindia.com/2004/20040427/sports.htm
+http://www.tribuneindia.com/2004/20040613/delhi.htm
+http://www.tribuneindia.com/2004/20040702/chd.htm
+http://www.tribuneindia.com/2004/20040713/himachal.htm
+http://www.tribuneindia.com/2004/20040719/delhi.htm
+http://www.tribuneindia.com/2004/20040730/sports.htm
+http://www.tribuneindia.com/2004/20040829/ldh1.htm
+http://www.tribuneindia.com/2004/20040904/edit.htm
+http://www.tribuneindia.com/2004/20040907/delhi.htm
+http://www.tribuneindia.com/2004/20040915/edit.htm
+http://www.tribuneindia.com/2004/20040916/ldh.htm
+http://www.tribuneindia.com/2004/20040922/biz.htm
+http://www.tribuneindia.com/2004/20041024/edit.htm
+http://www.tribuneindia.com/2004/20041027/cth1.htm
+http://www.tribuneindia.com/2004/20041101/delhi.htm
+http://www.tribuneindia.com/2004/20041129/ldh1.htm
+http://www.tribuneindia.com/2005/20050124/ldh1.htm
+http://www.tribuneindia.com/2005/20050203/nation.htm
+http://www.tribuneindia.com/2005/20050215/cth1.htm
+http://www.tribuneindia.com/2005/20050224/aplus.htm
+http://www.tribuneindia.com/2005/20050308/delhi.htm
+http://www.tribuneindia.com/2005/20050313/haryana.htm
+http://www.tribuneindia.com/2005/20050316/haryana.htm
+http://www.tribuneindia.com/2005/20050403/world.htm
+http://www.tribuneindia.com/2005/20050404/nation.htm
+http://www.tribuneindia.com/2005/20050408/himachal.htm
+http://www.tribuneindia.com/2005/20050414/cth1.htm
+http://www.tribuneindia.com/2005/20050423/himachal.htm
+http://www.tribuneindia.com/2005/20050514/cth1.htm
+http://www.tribuneindia.com/2005/20050526/edit.htm
+http://www.tribuneindia.com/2005/20050529/world.htm
+http://www.tribuneindia.com/2005/20050531/cth1.htm
+http://www.tribuneindia.com/2005/20050603/cth1.htm
+http://www.tribuneindia.com/2005/20050615/ldh1.htm
+http://www.tribuneindia.com/2005/20050616/punjab1.htm
+http://www.tribuneindia.com/2005/20050622/j&k.htm
+http://www.tribweb.co.uk/michaelfoot/press/hagerty18032002.htm
+http://www.tricare.osd.mil/
+http://www.tricitymed.org/
+http://www.triggerfinger.org/weblog/most_popular.jsp
+http://www.trilateral.org/projwork/tfrsums/tfr08.htm
+http://www.trilion.com/An.ARGUS%20Forming.htm
+http://www.trilliumfoundation.org/OTF-English/html/how_to_apply/hta-tools_tips_results_activities.shtml
+http://www.trilobites.info/triloclass.htm
+http://www.trimedica.com/press.html
+http://www.trincoll.edu/depts/phil/philo/phils/muslim/ghazali.html
+http://www.trindersfinetools.co.uk/bfurn.htm
+http://www.trinet.com/HR_resources/HR_Library/content_pages/iacorporate.htm
+http://www.trinicenter.com/Raffique/2005/Jan/302005.htm
+http://www.trinicenter.com/modules.php?name=News&file=article&sid=231
+http://www.trinicenter.com/oops/lockerbie.html
+http://www.trinicenter.com/world/venez/lessons9.shtml
+http://www.trinidiary.com/archives/volume02/october/02oct01index.htm
+http://www.trinity-electronics.com/miningproducts.htm
+http://www.trinity.unimelb.edu.au/summerschool/science/generalinfo.shtml
+http://www.trinityminerals.com/ms2002/misc.shtml
+http://www.trinitymirror.com/ir/results/2004prelims/tm_objectid=15241520&method=full&siteid=111046&headline=progress-on-key-projects-name_page.html
+http://www.trinityslash.com/emrin_annie/Evolution.html
+http://www.trinitywallstreet.org/congregation/pursue.shtml
+http://www.trinp.org/MNI/BoF/4/3/4.HTM
+http://www.trinstitute.org/ojpcr/5_1finley.htm
+http://www.tripadvisor.com/AllReviews-g194863-Positano_Amalfi_Coast_Campania.html
+http://www.tripadvisor.com/Attraction_Review-g30890-d270584-Reviews-Ivy_Green-Tuscumbia_Alabama.html
+http://www.tripadvisor.com/Attractions-g187371-Activities-Cologne_North_Rhine_Westphalia.html
+http://www.tripadvisor.com/Attractions-g187371-Cologne_North_Rhine_Westphalia-Activities.html
+http://www.tripadvisor.com/Flights-g186346-York_North_Yorkshire_England-Cheap_Discount_Airfares.html
+http://www.tripadvisor.com/Hotel_Review-g147270-d500686-Reviews-Gran_Club_Santa_Lucia-Cuba.html
+http://www.tripadvisor.com/Hotel_Review-g147275-d151573-Reviews-Hotel_Club_Kawama-Varadero_Beach_Cuba.html
+http://www.tripadvisor.com/Hotel_Review-g147275-d263109-Reviews-Coralia_Club_Playa_de_Oro_Varadero-Varadero_Beach_Cuba.html
+http://www.tripadvisor.com/Hotel_Review-g147296-d150927-Reviews-Coyaba_Beach_Resort-St_George_s_Grenada.html
+http://www.tripadvisor.com/Hotel_Review-g186346-d210390-Reviews-One3Two-York_North_Yorkshire_England.html
+http://www.tripadvisor.com/Hotel_Review-g186515-d501644-Reviews-The_Gables_Hotel-Gretna_Green_Dumfries_and_Galloway_Scotland.html
+http://www.tripadvisor.com/Hotel_Review-g187234-d197221-Reviews-Comfort_Hotel_Roosevelt-Nice_French_Riviera_Cote_d_Azur_Provence.html
+http://www.tripadvisor.com/Hotel_Review-g187234-d259225-Reviews-Armenonville_Hotel-Nice_French_Riviera_Cote_d_Azur_Provence.html
+http://www.tripadvisor.com/Hotel_Review-g187785-d202913-Reviews-Britannique_Hotel-Naples_Campania.html
+http://www.tripadvisor.com/Hotel_Review-g187905-d231245-Reviews-Carpediem_Assisi_Living_Club-Assisi_Umbria.html
+http://www.tripadvisor.com/Hotel_Review-g59929-d100853-Reviews-Radisson_Hotel_Conference_Center_Green_Bay-Green_Bay_Wisconsin.html
+http://www.tripadvisor.com/Hotel_Review-g60013-d100871-Reviews-The_American_Club-Kohler_Wisconsin.html
+http://www.tripadvisor.com/Hotel_Review-g60616-d101363-Reviews-or10-Kauai_Sands_Hotel-Kapaa_Kauai_Hawaii.html
+http://www.tripadvisor.com/Hotel_Review-g60634-d114075-Reviews-or10-Sheraton_Maui_Hotel-Lahaina_Maui_Hawaii.html
+http://www.tripadvisor.com/Hotel_Review-g60956-d99535-Reviews-or10-Westin_Riverwalk-San_Antonio_Texas.html
+http://www.tripadvisor.com/Restaurants-g54046-York_Pennsylvania.html
+http://www.tripadvisor.com/ShowUrl-g147395-a_nw.true-r1481762-e
+http://www.tripadvisor.com/ShowUserReviews-g155019-d186891-r3210372-Courtyard_Toronto_Downtown-Toronto_Ontario.html
+http://www.tripadvisor.com/ShowUserReviews-g186338-d199846-r2584503-Radisson_Edwardian_Berkshire_Hotel-London_England.html
+http://www.tripadvisor.com/ShowUserReviews-g186338-d214658-r2847246-The_Sanctuary_House_Hotel-London_England.html
+http://www.tripadvisor.com/ShowUserReviews-g187147-d198085-r3007042-Terrass_Hotel-Paris_Ile_de_France.html
+http://www.tripadvisor.com/ShowUserReviews-g187870-d235821-r2877497-Pensione_Accademia_Villa_Maravege-Venice_Veneto.html
+http://www.tripadvisor.com/ShowUserReviews-g274707-d276529-r2846360-Cloister_Inn_Hotel-Prague_Bohemia.html
+http://www.tripadvisor.com/ShowUserReviews-g274707-d276529-r2886562-Cloister_Inn_Hotel-Prague_Bohemia.html
+http://www.tripadvisor.com/ShowUserReviews-g31350-d302329-r2221951-Westin_Kierland_Villas-Scottsdale_Arizona.html
+http://www.tripadvisor.com/ShowUserReviews-g32171-d119757-r1440509-Hilton_Garden_Inn_Carlsbad_Beach-Carlsbad_California.html
+http://www.tripadvisor.com/ShowUserReviews-g34227-d84467-r2490993-Lago_Mar_Resort_and_Club-Fort_Lauderdale_Florida.html
+http://www.tripadvisor.com/ShowUserReviews-g34227-d84467-r2698935-Lago_Mar_Resort_and_Club-Fort_Lauderdale_Florida.html
+http://www.tripadvisor.com/ShowUserReviews-g34227-d84467-r2698940-Lago_Mar_Resort_and_Club-Fort_Lauderdale_Florida.html
+http://www.tripadvisor.com/ShowUserReviews-g34467-d85224-r3527119-Park_Shore_Resort-Naples_Florida.html
+http://www.tripadvisor.com/ShowUserReviews-g43552-d78647-r1990783-William_Sauntry_Mansion-Stillwater_Minnesota.html
+http://www.tripadvisor.com/ShowUserReviews-g43552-d78647-r2081493-William_Sauntry_Mansion-Stillwater_Minnesota.html
+http://www.tripadvisor.com/ShowUserReviews-g60632-d87280-r2206460-Kauhale_Makai_Village_by_the_Sea-Kihei_Maui_Hawaii.html
+http://www.tripadvisor.com/ShowUserReviews-g60864-d143295-r1758574-Bourbon_Street-New_Orleans_Louisiana.html
+http://www.tripadvisor.com/ShowUserReviews-g60864-d143295-r1885311-Bourbon_Street-New_Orleans_Louisiana.html
+http://www.tripadvisor.com/ShowUserReviews-g60898-d86233-r3515163-Omni_Hotel_at_CNN_Center-Atlanta_Georgia.html
+http://www.tripcheck.com/RoadCond/izone1.htm
+http://www.tripcheck.com/RoadCond/izone2.htm
+http://www.tripcheck.com/RoadCond/izone4.htm
+http://www.tripmongolia.com/2/tour11.htm
+http://www.tripnet.org/state/Maine081303.htm
+http://www.tripso.com/archives/2004/10/whos_next_a_cha.html
+http://www.tripso.com/archives/2005/02/5_reasons_to_fi.html
+http://www.triscene.com/Archive15.htm
+http://www.trishsteas.com/glossary/general_terms.php
+http://www.tristatebassets.org/apply.html
+http://www.tristatebassets.org/fosterapp.html
+http://www.tritech.co.uk/Support/KB/Seanet/Support-KB-Seanet.htm
+http://www.triz-journal.com/archives/1999/09/e/
+http://www.triz-journal.com/archives/2000/04/a/
+http://www.triz-journal.com/archives/2002/06/f/
+http://www.trlabs.ca/new/press_releases/communitydinnerspeech2005.html
+http://www.trmagonline.com/Winter04/winter04ammotacop.htm
+http://www.trmca.org/education/scholarshiprules.htm
+http://www.trocadero.com/directory/Fine_Art:Paintings:Miniatures30.html
+http://www.trocadero.com/directory/Vintage_Arts:Regional_Art:Asian:Chinese:Pottery.html
+http://www.trojanhorseantiques.com/glass_page_3.htm
+http://www.trollopestoryprize.org/business_of_marriage.htm
+http://www.troma.com/
+http://www.tronia.com/aspintro.html
+http://www.tronixweb.com/shopsite_sc/store/html/xboxsoftwarea-h.html
+http://www.troop97.net/bsahist3.htm
+http://www.troop97.net/bshb_1.htm
+http://www.tropicstar.com/04News09.html
+http://www.tropsoft.com/pcsecurity/pressrel.htm
+http://www.trosch.org/chu/authorit.htm
+http://www.troubledwith.com/Web/groups/public/@fotf_troubledwith/documents/articles/twi_topic_008625.cfm
+http://www.troubledwith.com/stellent/groups/public/%5C@fotf_troubledwith/documents/articles/twi_013895.cfm?channel=Parenting%20Teens&topic=Dating&sssct=Stories
+http://www.troubledwith.com/stellent/groups/public/%5C@fotf_troubledwith/documents/articles/twi_029843.cfm?channel=Life%20Pressures&topic=Self-Image&sssct=Stories
+http://www.troublesells.com/archives/storylines/the_blue_girl/
+http://www.troubleshooters.com/codecorn/littperl/perlreg.htm
+http://www.troubleshooters.com/tpromag/200003/200003.htm
+http://www.troubleshooters.com/tpromag/200008/200008.htm
+http://www.troubleshooters.com/tpromag/200011/200011.htm
+http://www.troutnovascotia.ca/issues.htm
+http://www.troynovant.com/Franson/Essays/Postage-Stamp-Countries.html
+http://www.trsco.com/cgi-bin/wsmbb/wsmbb.cgi?RT+ZZQFXTMTXD/SIFHRSTMFS+234+0+Blues+2.2890
+http://www.trsiyengar.com/id21.html
+http://www.truceteachers.org/press.html
+http://www.truckflix.com/company.php?compid=220
+http://www.truckingsolutions.com/fairuse.html
+http://www.truckmiles.com/permits.asp
+http://www.trucknet.co.nz/
+http://www.truckstuffusa.com/350seriesdeluxereadyfitvehiclecoverbycovercraft.html
+http://www.trucktraderonline.com/
+http://www.trucktraderonline.com/contact.html
+http://www.trud.org/english/14_09_2000+.htm
+http://www.truecolorscareer.com/
+http://www.truepoker.com/affiliate_agreement.html
+http://www.truepoker.com/news_promos.html
+http://www.truetest.com/physician/econ.htm
+http://www.trufax.org/avoid/nazi.html
+http://www.trulyhuge.com/SupplementSecrets/
+http://www.trulyhuge.com/strengthtrainingprograms.htm
+http://www.truman.gov/advice/advice_show.htm?doc_id=247287
+http://www.trumanlibrary.org/hstpaper/dennisonhst.htm
+http://www.trumanlibrary.org/publicpapers/index.php?pid=1821&st=&st1=
+http://www.trumanlibrary.org/speaks.htm
+http://www.trumanlibrary.org/whistlestop/locpol.htm
+http://www.trumanlibrary.org/whistlestop/study_collections/korea/large/korea829_94.htm
+http://www.trumanlibrary.org/whistlestop/trumanfile/locpol.htm
+http://www.trump.net.au/~greenhou/
+http://www.trumpetguild.org/itgyouth/masterclass/Vizzutti.htm
+http://www.trussel.com/hf/tito6.htm
+http://www.trussel.com/kir/dic/find_t.htm
+http://www.trust-film.dk/off_vis_film.asp?id=10
+http://www.trust-film.dk/off_vis_film.asp?id=150
+http://www.trust-film.dk/off_vis_film.asp?id=52
+http://www.trust-film.dk/off_vis_film.asp?id=63
+http://www.trust-uk.demon.co.uk/archives6.htm
+http://www.trustees.org/DenaliNationalParkArticles.htm
+http://www.trustmymechanic.com/45.html
+http://www.trustsandestates.com/ar/estate_grammleachbliley_deadlines_draw/
+http://www.truth.com/TechnicalSupport/TechNote7.cfm?menu=contractor
+http://www.truthabouttrade.org/article.asp?id=1221
+http://www.truthabouttrade.org/article.asp?id=3350
+http://www.truthandpolitics.org/proposal.php
+http://www.truthbecomeslies.com/
+http://www.truthbeknown.com/holding.htm
+http://www.truthfulnews.com/phpBB2/about573.html
+http://www.truthfulnews.com/phpBB2/ntopic594.html
+http://www.truthfulnews.com/phpBB2/post-1287.html
+http://www.truthinjustice.org/dorotik.htm
+http://www.truthinjustice.org/laughman.htm
+http://www.truthinjustice.org/montana-lab.htm
+http://www.truthnet.org/islam/Qurangil5.html
+http://www.truthorfiction.com/rumors/c/canolaoil.htm
+http://www.truthorfiction.com/rumors/f/foreignbeef.htm
+http://www.truthorfiction.com/rumors/i/iams.htm
+http://www.truthorfiction.com/rumors/k/kerry-swiftboats.htm
+http://www.truthorfiction.com/rumors/m/michaelhingson.htm
+http://www.truthorfiction.com/rumors/n/notaboutsex.htm
+http://www.truthorfiction.com/rumors/s/survivor8.htm
+http://www.truthorfiction.com/rumors/z/zimbabwepetition.htm
+http://www.truthout.org/docs_01/01.11F.Arms.Carlyle.htm
+http://www.truthout.org/docs_01/02.01E.Cheney.Hussein.htm
+http://www.truthout.org/docs_04/083004A.shtml
+http://www.truthout.org/docs_04/110504A.shtml
+http://www.truthout.org/docs_04/120504G.shtml
+http://www.truthout.org/docs_04/121504L.shtml
+http://www.truthout.org/docs_04/121704X.shtml
+http://www.truthout.org/docs_04/printer_083004A.shtml
+http://www.truthout.org/docs_05/010605G.shtml
+http://www.truthout.org/docs_05/010805G.shtml
+http://www.truthout.org/docs_05/011405Y.shtml
+http://www.truthout.org/docs_05/011905Y.shtml
+http://www.truthout.org/docs_05/printer_010805G.shtml
+http://www.truthout.org/docs_05/printer_011405Y.shtml
+http://www.truthout.org/docs_2005/020805Z.shtml
+http://www.truthout.org/docs_2005/052405Y.shtml
+http://www.truthout.org/docs_2005/060805Y.shtml
+http://www.truthout.org/docs_2005/061205Z.shtml
+http://www.truthout.org/docs_2005/062305Z.shtml
+http://www.truthout.org/docs_2005/L020105A.shtml
+http://www.truthout.org/docs_2005/printer_031605J.shtml
+http://www.truthout.org/docs_2005/printer_L020105A.shtml
+http://www.truthout.org/issues_05/060105LA.shtml
+http://www.truthout.org/issues_05/061605HB.shtml
+http://www.truthtree.com/Politics/posts/335000.html
+http://www.truthtree.com/Politics/posts/335003.html
+http://www.truthusa.org/articles/irs/jury.htm
+http://www.trytel.com/~tristan/towns/york1.html
+http://www.ts-cyberia.net/reflections/200010.html
+http://www.ts-cyberia.net/reflections/200012.html
+http://www.ts.wyjs.org.uk/cfaqs.htm
+http://www.ts.wyjs.org.uk/schoolsfaqs.htm
+http://www.tsa.gov/public/display?theme=47&content=0900051980063cdd
+http://www.tsa.gov/public/display?theme=47&content=09000519800a612f
+http://www.tsa.gov/public/display?theme=47&content=09000519800a612f&print=yes
+http://www.tsa.org.uk/you_magazine__the_mail_on_sund.asp
+http://www.tsachoice.com/comp_equip.html
+http://www.tsachoice.com/neg_serviceagree.html
+http://www.tsachoice.com/service_repair.html
+http://www.tsaweb.org/competitive_events/national/hs.html
+http://www.tsbp.state.tx.us/newsletter/ArchCompRemind.htm
+http://www.tsbvi.edu/Outreach/seehear/fall98/hand.htm
+http://www.tsbvi.edu/textbooks/afb/mm-factsheet.htm
+http://www.tsc.berkeley.edu/html/newsletter/Fall03/left_behind.html
+http://www.tsc.berkeley.edu/html/newsletter/Spring04/macdonald.html
+http://www.tscm.com/outsideplant.html
+http://www.tscpulpitseries.org/english/1990s/ts940926.html
+http://www.tscpulpitseries.org/english/1990s/ts990802.html
+http://www.tscpulpitseries.org/english/2000s/ts000228.html
+http://www.tsea.org/page_696.php
+http://www.tsgs.unt.edu/mcnair_graduate_fellowships.htm
+http://www.tsh.org/disorders/hyperthyroidism/overactive.html
+http://www.tsha.utexas.edu/handbook/online/articles/print/GG/kbg13.html
+http://www.tsleads.com/channelpartners.htm
+http://www.tsn.ca/canadian_hockey/your_call.asp?messageId=568538&hubname=canadian_hockey
+http://www.tsn.ca/cfl/your_call.asp?messageId=492409&hubname=cfl
+http://www.tsn.ca/classic/your_call.asp?messageId=375750&hubname=espn_classic
+http://www.tsn.ca/news_story.asp?ID=98894&hubName=nhl-sens
+http://www.tsn.ca/nhl/your_call.asp?messageId=518480&hubname=nhl
+http://www.tsn.ca/nhl/your_call.asp?messageId=603900&hubname=nhl
+http://www.tsn.org.uk/TSNnewsite/TSN%20stuff/Activity/blythjex.html
+http://www.tsnhorse.com/cgi-bin/editorial/article.cgi?id=742
+http://www.tsnn.com/
+http://www.tso.co.uk/bookshop/bookstore.asp?FO=38793
+http://www.tsp.gov/curinfo/loanprogram.html
+http://www.tsp.gov/faq/faq7.html
+http://www.tsra.com/Lott109.htm
+http://www.tsra.com/Lott94.htm
+http://www.tsra.org/CEP.htm
+http://www.tsroadmap.com/physical/hair/zapcost.html
+http://www.tss.oregonstate.edu/cn/policy/2004/?page=services&type=normal
+http://www.tssaa.org/Classifications/20002005classification.htm
+http://www.tsta.org/
+http://www.tsuccess.dircon.co.uk/timemanagementtips.htm
+http://www.tsunyotakohet.com/umdaetb.htm
+http://www.tta.gov.uk/php/read.php?resourceid=1858
+http://www.tta.gov.uk/php/read.php?resourceid=2445
+http://www.tta.gov.uk/php/read.php?resourceid=4353
+http://www.tta.gov.uk/php/read.php?resourceid=4354
+http://www.ttctraining.co.uk/eventsday.html
+http://www.ttgconsultants.com/articles/Variety_Panels_Pump_Praisers.html
+http://www.tti-corp.com/english/customers/successstories.php
+http://www.ttinteractive.com/TTI/Pages/flights/airline-flights.asp
+http://www.ttinteractive.com/TTI/Pages/management-system/airlines-management-system.asp
+http://www.ttinteractive.com/TTI/Pages/seating/airline-seating.asp
+http://www.ttlc.org/high_school_camp.htm
+http://www.ttsd.k12.or.us/schools/mww/garden/woodwardgardens.htm
+http://www.ttuhsc.edu/Communications/nr3-nov2003.html
+http://www.ttuhsc.edu/libraries/databases/db_a-h.aspx
+http://www.tu-harburg.de/rzt/rzt/it/QM/cat.html
+http://www.tuaw.com/2005/04/15/trent-reznor-rules/
+http://www.tuaw.com/2005/06/07/lifedrive-hands-on-first-impressions/
+http://www.tubeweld.com/index1.html
+http://www.tubeworld.com/6SN7.html
+http://www.tuc.org.uk/changingtimes/tucprocess_ideas.htm
+http://www.tuc.org.uk/congress/tuc-2633-f26.cfm
+http://www.tuc.org.uk/congress/tuc-4793-f4.cfm
+http://www.tuc.org.uk/economy/tuc-7732-f0.cfm
+http://www.tuc.org.uk/economy/tuc-9006-f0.cfm
+http://www.tuc.org.uk/equality/tuc-2443-f0.cfm
+http://www.tuc.org.uk/h_and_s/tuc-4474-f0.cfm
+http://www.tuc.org.uk/h_and_s/tuc-6819-f0.cfm
+http://www.tuc.org.uk/h_and_s/tuc-9287-f0.cfm
+http://www.tuc.org.uk/h_and_s/tuc-9504-f0.cfm
+http://www.tuc.org.uk/learning/tuc-9551-f0.cfm
+http://www.tuc.org.uk/skills/tuc-9278-f0.cfm
+http://www.tuc.org.uk/tuc/rights_student.cfm
+http://www.tuc.org.uk/work_life/index.cfm
+http://www.tucantravel.com/tours/south_central_america_tour/CUH
+http://www.tuckborough.net/battles.html
+http://www.tuckborough.net/hills.html
+http://www.tucows.com/
+http://www.tucsoncitizen.com/index.php?page=business&story_id=013105d1_coffee
+http://www.tucsongardener.com/FAQ_Glossary/faq.htm
+http://www.tucsonshowguide.com/fsg/tucson/dining.cfm
+http://www.tucsonshowguide.com/stories/may05/cosmetics.cfm
+http://www.tucsonweekly.com/gbase/cinema/Content?oid=oid:63689
+http://www.tude.com/prn/prn04q1/p040216NeosLosing.htm
+http://www.tufts.edu/dental/patient/rights/mass.html
+http://www.tufts.edu/hr/tips/meeting.html
+http://www.tufts.edu/tuftsrecycles/more/computers.html
+http://www.tufts.edu/vet/admissions/faqs.html
+http://www.tufts.edu/vet/ccm/ggmins100804.htm
+http://www.tuftshillel.org/jl-rab04-time3.html
+http://www.tug.org/tex-archive/info/beginlatex/html/chapter7.html
+http://www.tug1.net/tugbbs1/Forum2/HTML/008594-2.html
+http://www.tug1.net/tugbbs1/Forum2/HTML/008594.html
+http://www.tug2.net/advice/images.htm
+http://www.tui.edu/ASN/praxis/default.asp
+http://www.tui.ie/Education%20Issues/Guidelines.html
+http://www.tulane.edu/~asb/documents/procedure.html
+http://www.tulane.edu/~hr/HRalert_July.shtml
+http://www.tulane.edu/~latner/HomePage/SyllabusF2002.html
+http://www.tulane.edu/~swacsa/papers/12.htm
+http://www.tulipsandbears.com/short.htm
+http://www.tuliptreepress.com/tstmnals.htm
+http://www.tullistrees.org/
+http://www.tulsakids.com/july-1.html
+http://www.tulsaschools.org/index.shtm
+http://www.tumbleweed.com/company/press_releases/2004/2004-04-16.html
+http://www.tupbiosystems.com/articles/it_is_xp.html
+http://www.tuppenceworth.ie/Politics/geary.htm
+http://www.tuppenceworth.ie/Politics/nonice.htm
+http://www.turbomagazine.com/features/0203tur_darkstar/
+http://www.turbotax.com/
+http://www.turbotax.com/articles/BusinessExpensesforTeachers.html
+http://www.turbotax.com/articles/SummaryofTaxLawChanges.html
+http://www.turing.org.uk/publications/physics.html
+http://www.turismoinlanga.it/Text_INGLESE/tour_7g.htm
+http://www.turizm.net/economy/exports.html
+http://www.turizm.net/turkey/tips/storyfood.html
+http://www.turkishtime.org/sector_6/92.asp
+http://www.turkishtime.org/subat/134_en_1.htm
+http://www.turkishweekly.net/articles.php?id=79
+http://www.turkishweekly.net/articles.php?id=82
+http://www.turkotek.com/mini_salon_00003/ms3t12.htm
+http://www.turksandcaicos.tc/MiddleCaicos/
+http://www.turnerlearning.com/turnersouth/storytelling/varieties.html
+http://www.turnerporter.ca/etiquet.htm
+http://www.turning-point.co.uk/About+Us/New+Business/
+http://www.turningpointnow.com/
+http://www.turningpointscotland.com/services/drugServices/leith.htm
+http://www.turningpts.org/Henry%20Lord%20MS%20in%20News.htm
+http://www.turningtooneanother.net/
+http://www.turningtooneanother.net/aboutthebook.html
+http://www.turningtooneanother.net/howtostart.html
+http://www.turnkey.com.au/tksweb/products/xice.html
+http://www.turntablebasics.com/
+http://www.turriffshow.org/Trade/
+http://www.turtlehomes.com/models.html
+http://www.turtlesoft.com/GSManual/customer.htm
+http://www.turtlesoft.com/GSManual/estimate.htm
+http://www.turtlesoft.com/GSStartManual/lesson9.htm
+http://www.turtletrack.org/Issues02/Co08242002/CO_08242002_Thisdate.htm
+http://www.turtletrader.com/critical-thinking.html
+http://www.turtletrader.com/tsta2.html
+http://www.tuscl.com/NewbieFAQ.asp
+http://www.tuscl.com/newbiefaq.asp
+http://www.tutor2u.net/economics/content/topics/introduction/factor.htm
+http://www.tutti.co.uk/shop/CDs/Orchestral/KHOKE-SOM234-R65/details.html
+http://www.tuv.org.au/Abangood.htm
+http://www.tuv.org.au/abangood.htm
+http://www.tuxmagazine.com/
+http://www.tv-ark.org.uk/itvsouthwest/westcountrymain.html
+http://www.tv.cbc.ca/newsinreview/feb98/asia/waiting.htm
+http://www.tv.com/epid/show/24641/episode_guide.html
+http://www.tvbarn.com/ticker2004/archives/028133.shtml
+http://www.tvcameramen.com/studio/chiropractic.htm
+http://www.tvcc.cc.or.us/BusinessEd/Degrees/MedTransAAS.htm
+http://www.tvcentury21.com/content/view/45/41/
+http://www.tvcentury21.com/index.php?option=content&task=view&id=45
+http://www.tvgameshows.net/bbplayers.htm
+http://www.tvgasm.com/archives/big_brother/000901.php
+http://www.tvgasm.com/archives/miscellaneous_tv/000829.php
+http://www.tvhandbook.com/History/History_TV.htm
+http://www.tvhandbook.com/History/History_timeline.htm
+http://www.tvia.com/index.cfm?page=body&crid=17
+http://www.tvo.fi/432.htm
+http://www.tvradioworld.com/contact/suggest.asp
+http://www.tvshowsondvd.com/articles/seth.cfm
+http://www.tvshowsondvd.com/releaseinfo.cfm?ReleaseID=1314
+http://www.tvshowsondvd.com/reviewlist.cfm?ShowID=622
+http://www.tvtattle.com/
+http://www.tvtechnology.com/features/Focus-on-editing/f_JA_Focus_on_Editing.shtml
+http://www.tvtechnology.com/features/Inside-Audio/f-dm-wtc.shtml
+http://www.tvtechnology.com/features/inside-production/f_WS_Gimme_that_Ole.shtml
+http://www.tvtome.com/BeyondBelief/season1.html
+http://www.tvtome.com/ER/season10.html
+http://www.tvtome.com/ER/season6.html
+http://www.tvtome.com/FalconCrest/
+http://www.tvtome.com/FullHouse/
+http://www.tvtome.com/PortCharles/
+http://www.tvtome.com/tvtome/servlet/EpisodeGuideSummary/showid-1265/season-3
+http://www.tvtome.com/tvtome/servlet/EpisodeGuideSummary/showid-1576/Big_Apple/
+http://www.tvtome.com/tvtome/servlet/EpisodeGuideSummary/showid-16989/Cold_Case/
+http://www.tvtome.com/tvtome/servlet/EpisodeGuideSummary/showid-3173/Max_Headroom/
+http://www.tvtome.com/tvtome/servlet/EpisodeGuideSummary/showid-4903/Off_Centre/
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-146/epid-1286
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-146/epid-1410
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-146/epid-1410/
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-28101/epid-354583/
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-344/epid-63618/
+http://www.tvtome.com/tvtome/servlet/GuidePageServlet/showid-344/epid-65854
+http://www.tvtome.com/tvtome/servlet/PersonDetail/personid-181277/
+http://www.tvtome.com/tvtome/servlet/ShowForumPage/showid-111/threadid-174858/
+http://www.tvtome.com/tvtome/servlet/ShowMainServlet/showid-546/Falcon_Crest/
+http://www.twacomm.com/Catalog/Dept_ID_734.htm
+http://www.twbookmark.com/books/63/0316779849/chapter_excerpt17620.html
+http://www.twbookmark.com/books/70/0316121568/reading_guide14091.html
+http://www.twbookmark.com/books/8/0316558524/chapter_excerpt428.html
+http://www.twbookmark.com/books/91/0316558362/chapter_excerpt9373.html
+http://www.twbooks.co.uk/authors/katecharles.html
+http://www.twbooks.co.uk/authors/russelli.html
+http://www.twc.state.tx.us/news/tjhg/s4appl.html
+http://www.twc.state.tx.us/svcs/childcare/ccattendhelp.html
+http://www.twcc.state.tx.us/information/events/macmin01-21-00.html
+http://www.twcc.state.tx.us/information/events/macmin7-16-99.html
+http://www.twcc.state.tx.us/information/events/min5-21-99.html
+http://www.tweakguides.com/Doom3_5.html
+http://www.tweakheadz.com/plugins_for_audio.html
+http://www.tweakheadz.com/studio_monitors.htm
+http://www.tweakxp.com/displaySoft.aspx?id=14239
+http://www.tweakxp.com/tweak123810.aspx
+http://www.tweed.nsw.gov.au/events/citizen.htm
+http://www.tweeter.com/sm-flat-panel-and--bg-1285287.html
+http://www.twgga.org/dynpage2.php?pgid=McKinney
+http://www.twice.com/article/CA492436.html?verticalid=820&industry=Business+News&industryid=23097&pubdate=01/06/2005
+http://www.twickenham-museum.org.uk/detail.asp?ContentID=119
+http://www.twilightplayers.com/private/halloffame.htm
+http://www.twingroves.district96.k12.il.us/Renaissance/TowerofLondon/AnneBoleyn.html
+http://www.twinmountain.com/hiking_mt_wash_tale.php
+http://www.twinsclub.co.uk/
+http://www.twinslist.org/toddler.htm
+http://www.twinsworld.com/stats.html
+http://www.twistandshoutcomics.com/features/columns/rrevs0699.html
+http://www.twistermc.com/blog/
+http://www.twistngo.com/rapid.htm
+http://www.twitchfilm.net/
+http://www.twitchfilm.net/archives/002085.html
+http://www.twiztv.com/scripts/attic/allymcbeal202.htm
+http://www.twiztv.com/scripts/southpark/season7/southpark-715.htm
+http://www.twmacinta.com/resume/
+http://www.twmlaw.com/new/news5_20_02.html
+http://www.twmlaw.com/site/new/news5_20_02.html
+http://www.twnonline.org/Archive_TWN/050113/050113_local_news_groups_address_important_concerns_of_gay_seniors.html
+http://www.twnonline.org/archive_twn/041104/041104_national_news_the_science_of_sex_and_god.html
+http://www.twnside.org.sg/title/belied.htm
+http://www.twnside.org.sg/title/bus.htm
+http://www.twnside.org.sg/title/das5.htm
+http://www.twnside.org.sg/title/das6.htm
+http://www.twnside.org.sg/title/info9.htm
+http://www.twnside.org.sg/title/invasion.htm
+http://www.twnside.org.sg/title/mk10.htm
+http://www.twnside.org.sg/title/ravage-cn.htm
+http://www.twnside.org.sg/title/sea-cn.htm
+http://www.twnside.org.sg/title/shot.htm
+http://www.twnside.org.sg/title/twr137b.htm
+http://www.twnside.org.sg/title/unions.htm
+http://www.twnside.org.sg/title/urged.htm
+http://www.twnside.org.sg/title2/twr171d.htm
+http://www.twobirds.com/english/publications/articles/French_ADSL_Market.cfm
+http://www.twofrog.com/rezsch.html
+http://www.twolassesglassclasses.com/web-content/lassletter.html
+http://www.twoscompany.co.uk/11/112/18/55/MID%20GLAMORGAN/
+http://www.twoscompany.co.uk/12/111/18/55/BERKSHIRE/
+http://www.twrc.rowing.org.uk/slug/oldslime60.htm
+http://www.twst.com/ceos/caop.html
+http://www.twurl.com/onr_report/patterns.htm
+http://www.txarch.org/activities/fschool/2003.html
+http://www.txarch.org/activities/fschool/Presidio.htm
+http://www.txdps.state.tx.us/director_staff/texas_rangers/
+http://www.txdps.state.tx.us/psb/faq.aspx
+http://www.txla.org/html/docs/howto.html
+http://www.txstate.edu/slac/jobs/Erefform.htm
+http://www.txt-mgmt.com/spider.htm
+http://www.tybornehill.com/generic31.html
+http://www.tyc.state.tx.us/about/tycminutes.html
+http://www.tycoelectronics.com/prodnews.asp?id=509
+http://www.tygh.co.uk/students/menu.swf
+http://www.tylerpaper.com/site/news.cfm?brd=1994&pag=460&dept_ID=529888
+http://www.tylwythteg.com/enemies/scaife.html
+http://www.tynant.com/tytimes.htm
+http://www.tyndall.ac.uk/publications/fact_sheets/t2_41.shtml
+http://www.type2.com/library/electrip/timex.htm
+http://www.typotheque.com/articles/EK_PhD_historiography2.html
+http://www.typotheque.com/site/article.php?id=24
+http://www.tysknews.com/Depts/Metrication/trouble_with_the_metric_system.htm
+http://www.tyssen.hackney.sch.uk/page3.html
+http://www.u-s-history.com/pages/h1093.html
+http://www.u-s-history.com/pages/h1096.html
+http://www.u-s-history.com/pages/h1175.html
+http://www.u-s-history.com/pages/h826.html
+http://www.u-s-history.com/pages/h893.html
+http://www.u-s-history.com/pages/h949.html
+http://www.u.arizona.edu/ic/anth307/description.html
+http://www.u.arizona.edu/ic/srl/management.html
+http://www.u3a.org.uk/natoffice/news_and_publications/sources/sources_12.htm
+http://www.uab.edu/english/hone/etexts/edb/day-pages/007-january07.html
+http://www.uaces.org/SCHES.htm
+http://www.uaelderlaw.org/links.html
+http://www.uaelinks.com/dir/category.asp?cat=10320060000
+http://www.uaf.edu/catalog/current/programs/music.html
+http://www.uafortsmith.edu/Health/LicensedPracticalNursing
+http://www.uafortsmith.edu/Health/LicensedPracticalNursing?skin=text
+http://www.uah.edu/facsen/Faculty%20Handbook/APPENDA.htm
+http://www.ualberta.ca/CNS/RESEARCH/MACI/
+http://www.ualberta.ca/dept/health/public_html/healthinfo/stress.htm
+http://www.ualberta.ca/~johnnewm/NZEnglish/choice.html
+http://www.ualberta.ca/~rpm1/stonewander/legacy_stories/knight/deception.html
+http://www.ualr.edu/hsci/h_e_degree.html
+http://www.ualr.edu/~philosophy/payoff.htm
+http://www.uapd.com/
+http://www.uapress.arizona.edu/onlinebks/hohokam/chap2.htm
+http://www.uark.edu/depts/comminfo/ss/freespeech.html
+http://www.uat.edu/insideTheTechnology/subpages/projects/subPages/gameProjects/
+http://www.uaw2865.org/campuspages/berkeley/BerkeleyBUpdates.htm
+http://www.uaw2865.org/campuspages/davis/DavisBUpdates.htm
+http://www.uaw2865.org/campuspages/irvine/IrvineBUpdates.htm
+http://www.uaw2865.org/campuspages/santabarbara/SantaBarbaraBUpdates.htm
+http://www.uawcd.com/FAQ.htm
+http://www.ub-careers.buffalo.edu/cdo/cartcare.htm
+http://www.ub.org/AboutUs/UBDisc2001/08FamilyStandards.shtml
+http://www.ubalt.edu/careercenter/careerlink/99_spring/major_psychology.html
+http://www.ubalt.edu/dapqm/grad.htm
+http://www.ubc.net/today/25012002.html
+http://www.ubca.org/financial.html
+http://www.uberdose.com/journal/
+http://www.ubermorgen.com/ATTACK_ON_DEMOCRAZY/
+http://www.ubersite.com/m/28131
+http://www.uboc.com/about/main/0,,2485_2877,00.html
+http://www.ubu.com/outsiders/365/01-1.html
+http://www.ubu.org.uk/bulletin/YaBB.cgi?board=rant;action=print;num=1076081417
+http://www.uc.edu/profiles/lieberman.htm
+http://www.uc.edu/profiles/profile.asp?id=1032
+http://www.uc.wisc.edu/forward/news.php?regionId=4&storyId=11157
+http://www.uca.edu/divisions/academic/honors/pub/vino/0203/vino21_1/lotAboutNothing.htm
+http://www.ucalgary.ca/UofC/departments/IC/community/PIAAawardwinners2003.html
+http://www.ucalgary.ca/UofC/research/KFS/researc2.htm
+http://www.ucalgary.ca/cted/confer2001/pres_summary.html
+http://www.ucalgary.ca/it/support_services/proglib/aix/glim.html
+http://www.ucalgary.ca/library/SpecColl/mitchell/biocrit.htm
+http://www.ucalgary.ca/mp2003/logo/install.html
+http://www.ucalgary.ca/mp2003/logo/mac_install.html
+http://www.ucalgary.ca/mp2003/logo/upgrade.html
+http://www.ucalgary.ca/oncampus/weekly/nov5-04/hot-topic.html
+http://www.ucalgary.ca/~dmjacobs/phd/diss/
+http://www.ucalgary.ca/~iejll/volume6/leonard.html
+http://www.ucalgary.ca/~rzach/logblog/
+http://www.ucalgary.ca/~shcs/hcac.html
+http://www.ucan.org/law_policy/energydocs/mfmerg.html
+http://www.ucar.edu/learn/1_2_1.htm
+http://www.ucar.edu/news/record/
+http://www.ucas.ac.uk/candq/ukquals/scot/quals.html
+http://www.ucas.ac.uk/candq/ukquals/scot/routes.html
+http://www.ucas.ac.uk/parents/faq.html
+http://www.ucas.ac.uk/parents/money.html
+http://www.ucc.ie/law/irlii/statutes/2003-41.php
+http://www.ucc.ie/ucc/depts/apsych/first_year_handout_2004.html
+http://www.ucc.org/ocinc/062402.htm
+http://www.ucc.org/ocinc/parker/copps.htm
+http://www.ucc.vt.edu/stdysk/motivate.html
+http://www.ucc.vt.edu/stdysk/suggest.html
+http://www.uccs.edu/psych/pages/faq.htm
+http://www.uccs.edu/~psych/pages/faq.htm
+http://www.uccs.edu/~ur/media/mediawatch/view_article.php?y=mediawatch_articles&article_id=12952
+http://www.uccstheatreworks.com/currentseason.htm
+http://www.ucd.ie/ascience/html/pages/teaching.html
+http://www.ucd.ie/computing/support/spssfaq.html
+http://www.ucd.ie/horizons/faq.htm
+http://www.ucd.ie/ucdnews/jan02/chemistry.htm
+http://www.ucdmc.ucdavis.edu/mindinstitute/aboutus/faq.html
+http://www.ucdsu.net/newswire.php?story_id=326&media_type=IMAGE
+http://www.ucfv.ca/hrcro/
+http://www.uchastings.edu/?pid=1522
+http://www.ucihealth.com/NewHospital/KeyResource.htm
+http://www.ucis.pitt.edu/asc/academics/coursesbydept.html
+http://www.ucis.pitt.edu/pehsc/index_files/fpframe_files/Lessons03/psu_lesson1.html
+http://www.ucisa.ac.uk/resources/docs/library/lrittreport
+http://www.ucl.ac.uk/Pharmacology/dc.html
+http://www.ucl.ac.uk/constitution-unit/nations/11.php
+http://www.ucl.ac.uk/hr/docs/crs_career_mment_schme.php
+http://www.ucl.ac.uk/hr/docs/flexible_working.php
+http://www.ucl.ac.uk/hr/docs/grievance_ar.php
+http://www.ucl.ac.uk/hr/docs/maternity_policy_6_april.php
+http://www.ucl.ac.uk/hr/docs/maternity_policy_6_april.php?section=printable
+http://www.ucl.ac.uk/internet-grammar/adverbs/xadvb1.htm
+http://www.ucl.ac.uk/ioo/research/luthert.htm
+http://www.ucl.ac.uk/prehistoric/reviews/04_07_mcomish.htm
+http://www.ucl.ac.uk/support-pages/advice-pages/coping-with-exams/index.shtml
+http://www.ucl.ac.uk/unions/AUT/crs_agreements.htm
+http://www.ucl.ac.uk/~uctytho/thirdway.htm
+http://www.uclan.ac.uk/facs/science/biology/bru/nm.htm
+http://www.ucmds.com/career6.htm
+http://www.ucmp.berkeley.edu/cambrian/burgess.html
+http://www.ucmp.berkeley.edu/diapsids/avians.html
+http://www.ucmp.berkeley.edu/echinodermata/echinoidea.html
+http://www.ucmp.berkeley.edu/glossary/gloss5/biome/deserts.html
+http://www.ucmp.berkeley.edu/history/owen.html
+http://www.ucmp.berkeley.edu/plants/bryophyta/sphagnomm.html
+http://www.ucolick.org/~bouwens/personal/beautygirl.html
+http://www.ucollege.edu/ucscripts/public/template/default.asp?DivID=7&PgID=52
+http://www.ucom-ism.com/ieconomy.htm
+http://www.ucop.edu/facil/fmc/facilman/volume5/ch4.html
+http://www.ucop.edu/pres/reports/prjul95.html
+http://www.ucop.edu/pres/reports/prmar00.html
+http://www.ucop.edu/raohome/certs/certguic.html
+http://www.ucop.edu/raohome/cgmanual/chap09.html
+http://www.ucop.edu/ucophome/policies/support/suppguide.html
+http://www.ucora.com/0241.htm
+http://www.ucp.org/document.cfm/4536/1/63
+http://www.ucpress.edu/books/pages/10139/10139.ch07.html
+http://www.ucpress.edu/books/pages/10323.html
+http://www.ucpress.edu/books/pages/1495001.html
+http://www.ucpress.edu/books/pages/5735/5735.ch01.html
+http://www.ucpress.edu/books/pages/6615.html
+http://www.ucpress.edu/books/pages/6853.html
+http://www.ucpress.edu/books/pages/8707.html
+http://www.ucpress.edu/books/pages/8819/8819.ch01.html
+http://www.ucpress.edu/books/pages/9172.html
+http://www.ucpress.edu/books/pages/9251/9251.ch01.html
+http://www.ucpress.edu/books/pages/9519/9519.ch01.html
+http://www.ucpress.edu/books/pages/9586/9586.ch01.html
+http://www.ucpress.edu/books/pages/9680.html
+http://www.ucpress.edu/books/pages/9889.html
+http://www.ucs.mun.ca/~tmarshal/gamesbeg.htm
+http://www.ucs.mun.ca/~wbarker/fairies/grimm/050.html
+http://www.ucs.mun.ca/~wbarker/fairies/grimm/g089.html
+http://www.ucsbdailynexus.com/news/2003/4314.html
+http://www.ucsbdailynexus.com/print_article.php?a=6746
+http://www.ucsc.edu/finaff/cc/tips/control.htm
+http://www.ucsc.edu/ppmanual/html/acg0012.htm
+http://www.ucsdguardian.org/cgi-bin/features?art=2005_05_31_01
+http://www.ucsf.edu/sorehand/
+http://www.ucsfhealth.org/childrens/medical_services/heart_center/arrhythmia/electrophysiology.html
+http://www.ucsfhealth.org/childrens/special/b/43082.html
+http://www.ucsusa.org/clean_energy/renewable_energy/page.cfm?pageID=126
+http://www.ucsusa.org/food_and_environment/antibiotic_resistance/page.cfm?pageID=248
+http://www.ucsusa.org/food_and_environment/biotechnology/page.cfm?pageID=1561
+http://www.ucsusa.org/global_environment/archive/page.cfm?pageID=1030
+http://www.ucsusa.org/global_environment/archive/page.cfm?pageID=520
+http://www.ucsusa.org/global_security/archive/page.cfm?pageID=628
+http://www.ucsusa.org/global_security/missile_defense/page.cfm?pageID=604
+http://www.ucsusa.org/news/press_release.cfm?newsID=393
+http://www.ucsusa.org/ucs/about/index.cfm
+http://www.uctshiplaw.com/hamburg.htm
+http://www.uda.ural.ru/
+http://www.uda.ural.ru/legal.html
+http://www.uda.ural.ru/market.html
+http://www.uda.ural.ru/recruit.html
+http://www.udayton.edu/mary/resources/flhm01.html
+http://www.udayton.edu/~itc/Exercises.html
+http://www.udeducation.org/teach/course_mods/sandhu/index.asp
+http://www.udel.edu/ETL/RWN/POP.html
+http://www.udel.edu/ExecVP/polprod/1-02.html
+http://www.udel.edu/PR/UDaily/2005/dec/personnel020105.html
+http://www.udel.edu/PR/UDaily/2005/oct/DCCA101204.html
+http://www.udel.edu/fllt/faculty/braun/closedin.html
+http://www.udiontario.com/issupd/upd040510.htm
+http://www.udpsoft.com/eye/doc.html
+http://www.uea.ac.uk/care/nasc/Rewards_and_Sanctions/R&S_Page10.html
+http://www.uea.ac.uk/eas/teaching/pgunits/deconstructinggender04.shtml
+http://www.uea.ac.uk/his/webcours/russia/documents/10-let-sssr.shtml
+http://www.uea.ac.uk/his/webcours/russia/documents/srs-7-19.shtml
+http://www.uefa.com/Competitions/WOCO/FixturesResults/Round=2197/match=81146/
+http://www.uefa.com/competitions/WOCO/FixturesResults/Round=1929/Match=80075/
+http://www.uefa.com/competitions/WOCO/FixturesResults/Round=2197/Match=81146/
+http://www.uefa.com/competitions/WOCO/fixturesresults/round=1929/match=80075/Report=RP.html
+http://www.uefap.co.uk/materials/speak/matspeak.htm
+http://www.uefap.co.uk/reading/underst/meaning/meaning.htm
+http://www.uel.ac.uk/programmes/business/postgraduate/generalmanagement.htm
+http://www.uen.org/Lessonplan/preview.cgi?LPid=9047
+http://www.uen.org/Lessonplan/preview?LPid=193
+http://www.uensd.org/USOE_Pages/Char_ed/focus.htm
+http://www.uet.edu.pk/Departments/Chemistry/chemistry_courses.htm
+http://www.uexpress.com/richardreeves/?uc_full_date=20050422
+http://www.ufalocal94.org/news_stories/chiefleader/cl_02_02_05.html
+http://www.ufalocal94.org/pages/ufaprez_past_present.html
+http://www.ufanyc.org/news_stories/chiefleader/cl_02_02_05.html
+http://www.ufcu.org/browse.php?content_name=parent_toysafety
+http://www.ufcw.net/articles/Toolkit/grievances-04.html
+http://www.ufcw.net/articles/UFCW_1000a/on_managing_slaves.php?s=2&p=8
+http://www.ufcw.net/articles/docs/2005-03-23_mts_centre.html
+http://www.ufcw.net/articles/docs/the_haunted_houses_of_labour.html
+http://www.ufcw.net/news/archive/news-archive-5-2003.html
+http://www.ufcw99.com/market_share_2.htm
+http://www.uflysmart.com/en/efil_terms.html
+http://www.ufoarea.com/keyhoe_follow_the_bouncing_ball.html
+http://www.uforth.com/classic.htm
+http://www.ufoseek.com/Project_Bluebook/
+http://www.ufs.ph/tinig/mayjun03/05060320.html
+http://www.ufs.ph/tinig/novdec04/11120426.html
+http://www.uga.edu/bahai/glossary.html
+http://www.uga.edu/garev/fall02/vivian.htm
+http://www.uga.edu/islam/shariah.html
+http://www.uga.edu/news/artman/publish/advisories.shtml
+http://www.uga.edu/ruskcenter/llm.html
+http://www.uga.edu/spc/People/panetta.html
+http://www.uga.edu/srel/Fact_Sheets/nerp.htm
+http://www.uga.edu/srel/ecoview9-2-02.htm
+http://www.uga.edu/ucns/calendar/aboutcc.html
+http://www.ugandanetwork.org.uk/network/phone.htm
+http://www.ugly-things.com/phil-1.html
+http://www.uglyotter.com/Brace5r.htm
+http://www.ugrad.math.ubc.ca/coursedoc/math100/notes/mordifeqs/hiv.html
+http://www.ugresearch.umd.edu/URAP/bsos03.htm
+http://www.ugs.com/about_us/success/royal_navy.shtml
+http://www.uh.edu/ednews/2004/bglobe/200411/20041117finances.html
+http://www.uh.edu/hti/cu/2001/v05/06.htm
+http://www.uh.edu/~jbutler/physical/chapter14notes.html
+http://www.uh.edu/~jbutler/physical/chapter19notes.html
+http://www.uhc-collective.org.uk/knowledge/toolbox/defence/guide_to_public_order.htm
+http://www.uhc-collective.org.uk/knowledge/toolbox/meetings_and_organisation/antimass_organising.htm
+http://www.uhd.edu/computing/acl/rules.htm
+http://www.uhd.edu/prospective/continuinged/eli/abouteli.htm
+http://www.uheaa.org/faqs.htm
+http://www.uhfnyc.org/press_release3159/press_release_show.htm?doc_id=100181
+http://www.uhi.ac.uk/ceandsec/policies/policy_VIII.htm
+http://www.uhl-tr.nhs.uk/services/clinical/anaesthetics_criticalcare_pain/anaesthetics.html
+http://www.uhn.ca/research/clinical_trials/definition.asp?nav=2;2
+http://www.uhs.berkeley.edu/facstaff/ergonomics/computer/pointing.shtml
+http://www.uhs.berkeley.edu/facstaff/healthmatters/healthyoffice/back.shtml
+http://www.uhs.berkeley.edu/students/medical/sexualassault.shtml
+http://www.uhseast.com/114269.cfm
+http://www.uhv.edu/catalog02-03/financial_aid.htm
+http://www.uhv.edu/catalog03-04/Financial_Aid.htm
+http://www.uhv.edu/catalog04-05/Financial_Aid.htm
+http://www.uhv.edu/catalog04-05/printer_friendly/financial_aid_pf.html
+http://www.uhv.edu/student_org/gbp/bylaws.htm
+http://www.uia.be/encyclopedia/encycom_bodies.php?kap=16
+http://www.uia.org/legal/app47.php
+http://www.uiaa.org/urbana/illinoisalumni/utxt0405f.html
+http://www.uiarmory.com/
+http://www.uib.no/guide/html/information.html
+http://www.uib.no/info/english/PhD.html
+http://www.uic.com.au/nip48.htm
+http://www.uic.edu/classes/dme/gme/CourseDescriptions.html
+http://www.uic.edu/com/eye/LearningAboutVision/EyeFacts/CollagenCornealShields.shtml
+http://www.uic.edu/depts/accc/newsletter/adn27/broadband.html
+http://www.uic.edu/depts/accc/pclabs/roomres.html
+http://www.uic.edu/depts/avcad/parking/faq.html
+http://www.uic.edu/~cmsmcq/trips/ceth9505.html
+http://www.uic.edu/~cmsmcq/trips/ceth9505.tei
+http://www.uic.edu/~dbhale/hesgone.html
+http://www.uic.edu/~pbhales/Levittown.html
+http://www.uidaho.edu/eo/dist8.html
+http://www.uidaho.edu/transferguides/AG4617.html
+http://www.uiecu.org/navstuff/contact.htm
+http://www.uihealthcare.com/depts/med/neurology/patients/aboutbdclinic.html
+http://www.uihealthcare.com/news/news/2005/01/31balance.html
+http://www.uil.utexas.edu/aca/hsrule/920.html
+http://www.uil.utexas.edu/aca/hsrule/926.html
+http://www.uimn.org/ui/download.htm
+http://www.uintacounty.com/documents/2003%20Commission%20Minutes/june_17_2003.htm
+http://www.uiowa.edu/~c030141/
+http://www.uiowa.edu/~clrc/html-pages/faq.html
+http://www.uiowa.edu/~commstud/resources/GenderMedia/african_txt.html
+http://www.uiowa.edu/~cyberlaw/rcntpubl/njh10mma.html
+http://www.uiowa.edu/~humiowa/chickensunday4.html
+http://www.uiowa.edu/~incinema/Bhumika.html
+http://www.uiowa.edu/~quill-sc/Contests/yearbook-contest.html
+http://www.uiowa.edu/~theatre/alumni/alumninews.htm
+http://www.uiowa.edu/~vpss/policies/i/i.shtml
+http://www.uis.edu/mediaguides/style/
+http://www.ujafedny.org/site/DocServer/Perspectives_Newsletter_Fall_1998_front_cover.pdf?docID=1001
+http://www.ujc.org/content_display.html?ArticleID=144687
+http://www.ujc.org/content_display.html?ArticleID=37119
+http://www.uk-concert-tickets.co.uk/g-tickets.htm
+http://www.uk-yankee.com/moving/
+http://www.uk.emb-japan.go.jp/en/japanUK/governmental/040304_jjccst.html
+http://www.uk.research.att.com/spirit/
+http://www.uk.thebodyshop.com/web/tbsuk/athome_events.jsp
+http://www.ukabc.org/nopaten2.htm
+http://www.ukabc.org/tsunamis.htm
+http://www.ukalumni.net/distinguishedalums/woodsonWT.htm
+http://www.ukar.org/martin/martin17.html
+http://www.ukar.org/temp/klausn03.html
+http://www.ukbap.org.uk/2002OnlineReport/ProgressObstacles.htm
+http://www.ukcampsite.co.uk/articles/view.asp?id=38
+http://www.ukcampsite.co.uk/rally/index.asp
+http://www.ukcdogs.com/breeds/herdingdogs/bouvierdesflandres.std.shtml
+http://www.ukcdogs.com/pt/rules/t-3.shtml
+http://www.ukcertificates.com/
+http://www.ukchatterbox.co.uk/msg/54329
+http://www.ukcia.org/research/CannabisSocialControlAndExclusion.html
+http://www.ukcle.ac.uk/lili/2002/nollent.html
+http://www.ukcorporatesolutions.com/services/county/Huntingdonshire.htm
+http://www.ukcosa.org.uk/pages/advice.htm
+http://www.ukdyslexialive.co.uk/teachers/access/legal_position.html
+http://www.ukfilmcouncil.org.uk/funding/distributionandexhibition/cap/capequip/
+http://www.ukfilmcouncil.org.uk/news/?p=1049992991714&skip=150
+http://www.ukgardening.co.uk/design_survey.asp
+http://www.ukhealthcare.uky.edu/generalinfo/generalinfo.htm
+http://www.ukhotelnet.com/cambridge/hotels.htm
+http://www.ukhotelnet.com/inverness/hotels.htm
+http://www.ukia.co.uk/diamond/diaguide.htm
+http://www.ukia.co.uk/diamond/ped_eth.htm
+http://www.ukia.co.uk/road.htm
+http://www.ukincorp.co.uk/
+http://www.ukincorp.co.uk/s-29-company-incorporation-prices.html
+http://www.ukincorp.co.uk/s-2G
+http://www.ukincorp.co.uk/s-2G-uk-company-chairman-guide.html
+http://www.ukincorp.co.uk/s-4J-company-formations-uk-prices.html
+http://www.ukincorp.co.uk/s-AE-setting-uk-company-fees.html
+http://www.ukinindia.com/magazines/britaintoday/InnerpageAgent.asp?IssueId=79&magzineId=3&SectionId=613
+http://www.uklanddirectory.org.uk/Land-sales-news.htm
+http://www.uklgig.org.uk/Outside%20UK.htm
+http://www.ukmarinesac.org.uk/communities/zostera/z6_2.htm
+http://www.ukmix.net/reviews/2001/0604.html
+http://www.ukmodelshops.co.uk/
+http://www.uknetguide.co.uk/Lifestyle_and_Leisure/Article252.html
+http://www.ukpa.gov.uk/_2_howtoapply/2_completing.asp
+http://www.ukpa.gov.uk/textonly/english/t_completing_the_application_form.asp
+http://www.ukpaintballgames.com/team-building-buyersguide.html
+http://www.ukpets.co.uk/?section=Home&sub=News&method=fetch&item=480
+http://www.ukphilately.org.uk/abps/org/organise.htm
+http://www.ukphilately.org.uk/nps/aucsell/aucsell.htm
+http://www.ukpropertyshop.co.uk/s/Yorkshire/estate_agents_Acomb.shtml
+http://www.ukpropertyshop.co.uk/s/Yorkshire/estate_agents_Boroughbridge.shtml
+http://www.ukpropertyshop.co.uk/s/Yorkshire/estate_agents_York.shtml
+http://www.ukpropertyshop.co.uk/s/Yorkshire/letting_agents_Acomb.shtml
+http://www.ukpropertyshop.co.uk/s/Yorkshire/letting_agents_York.shtml
+http://www.ukpropertyshop.co.uk/s/Yorkshire/students_agents_York.shtml
+http://www.ukpropertyshop.com/s/Yorkshire/letting_agents_York.shtml
+http://www.ukpropertyshop.com/s/Yorkshire/students_agents_York.shtml
+http://www.ukradioamateur.org/extra/morse/html/c09a.htm
+http://www.ukrainiansoccer.net/diary/Euro2000/sloukr.htm
+http://www.ukrainiansoccer.net/upload/jj/euro2000_ukraine-france_reviews.html
+http://www.ukrainianweb.com/shopping_business_canada_usa.htm
+http://www.ukresilience.info/ccbill/
+http://www.ukresistance.co.uk/2005/04/visiting-gizmondo-shop.html
+http://www.ukresults.net/linkcharity.html
+http://www.ukrocketry.co.uk/forum/lofiversion/index.php/t549.html
+http://www.uksa.org/prices.html
+http://www.uksa.org/terms.html
+http://www.uksponsorship.com/film1.htm
+http://www.uksport.gov.uk/generic_template.asp?id=12267
+http://www.ukstudentlife.com/Ideas/Album/TroopingTheColour.htm
+http://www.ukstudentlife.com/Work/Job/Nurse.htm
+http://www.ukterrorist.com/articles/racism/
+http://www.ukterrorist.com/columns/5444/
+http://www.ukterrorist.com/news/bwcsl_season6_report/
+http://www.uktvfood.co.uk/?uktvFoodPreview=Recipes.Index
+http://www.uktvfood.co.uk/index.cfm/uktvFoodPreview/Recipes.Index.shtml
+http://www.uktvstyle.co.uk/index.cfm/uktvstyle/standardItem.index/aid/2535.shtml
+http://www.ukultimate.com/uniultimate/eligibility.aspx
+http://www.ukvisas.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1034876586657
+http://www.ukvisas.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1035898657472
+http://www.ukvisas.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1036679107538
+http://www.ukvisas.gov.uk/servlet/Front?pagename=OpenMarket/Xcelerate/ShowPage&c=Page&cid=1039013777339
+http://www.uky.edu/ArtsSciences/Classics/rhetoric.html
+http://www.uky.edu/BusinessEconomics/dssakba/Handbook%20of%20KM.htm
+http://www.uky.edu/CareerCenter/mailinglist.html
+http://www.uky.edu/CareerCenter/virtualhowto.html
+http://www.uky.edu/Design/architecture.htm
+http://www.uky.edu/KGS/announce/cobbtestimony.htm
+http://www.uky.edu/KGS/education/trex.html
+http://www.uky.edu/Law/exams/Content/gold6.htm
+http://www.uky.edu/Law/exams/Content/gold7.htm
+http://www.uky.edu/PR/News/Archives/2002/April2002/430BOARD.HTM
+http://www.uky.edu/PR/UK_News/people22800.html
+http://www.uky.edu/Registrar/bull0203/colleges/a&s/russ.html
+http://www.uky.edu/StudentOrgs/BWW/hottub.html
+http://www.uky.edu/StudentOrgs/HKSDC/Shoes,Clothes.html
+http://www.uky.edu/Subject/countries.html
+http://www.uky.edu/Subject/us-states.html
+http://www.uky.edu/~rosdatte/phi120/lesson5a.htm
+http://www.ul.ie/sociology/eoin.devereux.html
+http://www.ul.ie/~lcs/faculty.html
+http://www.ulfsbo.nu/kgb/kgb_10.html
+http://www.ulfsbo.nu/ussr/hunger.html
+http://www.ulfsbo.nu/ussr/unexim.html
+http://www.uli.org/Content/NavigationMenu/DiscoverULI/Jobs/JobsatULI/Jobs_at_ULI1.htm
+http://www.ulib.csuohio.edu/tips/netlibfaq.shtml
+http://www.ulib.iupui.edu/kade/unit10/unit10.html
+http://www.ulsternet-ni.co.uk/ncon/pages/cconnews.html
+http://www.ulsterscotsagency.com/royalpipebands.asp
+http://www.ultimate-exercise.com/pb5.html
+http://www.ultimate-guitar.com/lessons/guitar_techniques/how_to_play_fast_-_hyper_speed_picking.html
+http://www.ultimate-guitar.com/tabs/j/johnson_jack/sitting_waiting_wishing_crd.htm
+http://www.ultimate-guitar.com/tabs/j/johnson_jack/sitting_waiting_wishing_ver2_crd.htm
+http://www.ultimate-lyrics.de/texte/bandalbums/albums_z/zed_silencer.htm
+http://www.ultimatebet.com/learn-poker/article.html?articleID=5
+http://www.ultimatecarpage.com/forum/showthread.php?t=11470
+http://www.ultimatehallucination.com/405f2.htm
+http://www.ultimatekeychains.com/browseproducts/Trouble-Keychain.html
+http://www.ultimatequeen.co.uk/Videos/fmtribute.htm
+http://www.ultra-fitmagazine.com/home_gyms/18_home_gyms.htm
+http://www.ultraapps.com/IssueManager/files/license.html
+http://www.ultracycling.com/standings/records_guide2.html
+http://www.ultralighthomepage.com/AC103-7/ac103-7.html
+http://www.ultramega.com/browse/1651494/24__Season_Three.jsp
+http://www.ultrarunners.info/fr5010report.html
+http://www.ultrasoft.hostinguk.com/swfa/Rules.htm
+http://www.ultratech.com/hr/jobs.shtml
+http://www.ultravox.org.uk/cgi-bin/ImageFolio31/imageFolio.cgi?action=view&link=Band_Aid/Band_Aid_20_press&image=Pops-Global-Mission.pdf&url=1
+http://www.ultrunr.com/walking.html
+http://www.ulwaf.com/LA-1900s/01.09.html
+http://www.ulwaf.com/LA-1900s/04.11.html
+http://www.um.dk/Publikationer/UM/English/AChangingWorld/html/chapter04.htm
+http://www.um.dk/Publikationer/UM/English/Denmark/kap4/4-4-10.asp
+http://www.umaine.edu/umext/york/MG/mgbrochure.htm
+http://www.umakrishnaswami.com/peace.html
+http://www.umanitoba.ca/about/mission.php
+http://www.umanitoba.ca/centres/ethics/articles/article3.html
+http://www.umanitoba.ca/centres/mchp/reports/reports_01/mis2.htm
+http://www.umanitoba.ca/cranial_nerves/info/disclaimer.html
+http://www.umanitoba.ca/faculties/afs/plant_science/courses/39_769/lec08/lec08.3.html
+http://www.umanitoba.ca/linguistics/russell/redup-corpus.html
+http://www.umanitoba.ca/student/counselling/cnews/cnews299.html
+http://www.umass.edu/fambiz/marketing_family_business.htm
+http://www.umass.edu/peri/sasl/petition.htm
+http://www.umass.edu/wost/articles/postwhiteness.htm
+http://www.umassmed.edu/diabeteshandbook/chap02.htm
+http://www.umassmed.edu/healinghandbook/chapter2/
+http://www.umassp.edu/cgi-bin/cgilib/jump.cfm?dest=/trustees/af/1.27.99afminutes.html
+http://www.umax.com/company/terms.jsp
+http://www.umbar.com/MacTADS/
+http://www.umbc.edu/NewsEvents/releases/article.phtml?news_id=920
+http://www.umbc.edu/oit/article.html?news_id=98
+http://www.umc.org/interior.asp?ptid=1&mid=4292
+http://www.umc.pitt.edu/media/pcc020318/nowandthen.html
+http://www.umc.pitt.edu/pittmag/sep95/s95classesh.html
+http://www.umchohio.org/0204web/Resources/Lying.html
+http://www.umdnj.edu/genesatwork/topics/pediatrics/05_pediatrics.htm
+http://www.umesc.usgs.gov/habitat_needs_assessment/pit_meeting.html
+http://www.umext.maine.edu/onlinepubs/htmpubs/7009.htm
+http://www.umiacs.umd.edu/users/sawweb/sawnet/news.html
+http://www.umiacs.umd.edu/users/sawweb/sawnet/wedding.html
+http://www.umich.edu/~bcalab/Meyer_Biography.html
+http://www.umich.edu/~ece/student_projects/bonifield/pardons.html
+http://www.umich.edu/~eng499/women/themes.html
+http://www.umich.edu/~gpcc/pa/hostconfig.html
+http://www.umich.edu/~hraa/class/faq.html
+http://www.umich.edu/~hraa/voices/moredetails.html
+http://www.umich.edu/~iinet/csst/working_papers.html
+http://www.umich.edu/~iinet/journal/vol2no3/ozdemir.html
+http://www.umich.edu/~iinet/lacs/acadprog/thesisguide.htm
+http://www.umich.edu/~miwh/BorerFinal.html
+http://www.umich.edu/~nes/studyres/datainfo/tsinfo.htm
+http://www.umich.edu/~newsinfo/MT/98/Spr98/mt10s98.html
+http://www.umich.edu/~pharmacy/students/courses_pharmacy.html
+http://www.umich.edu/~radinfo/introduction/terms.htm
+http://www.umich.edu/~urecord/0304/July06_04/18.shtml
+http://www.umich.edu/~urecord/0304/Nov03_03/19.shtml
+http://www.umist.ac.uk/departments/civil/undergraduate/man/coman&qsbsc.htm
+http://www.umist.ac.uk/prospectivestudents/undergraduate/courseinfo/fulldetails/2004/04000126.htm
+http://www.umkc.edu/dentistry/about/faq.htm
+http://www.umkc.edu/dirt/dd101795.htm
+http://www.umkc.edu/imc/tips4.htm
+http://www.uml.edu/Dept/WE/COHP/Documents/techreports/T19.htm
+http://www.uml.edu/centers/FTC/seymour.html
+http://www.umm.edu/altmed/ConsHerbs/Licoricech.html
+http://www.umm.edu/altmed/ConsSupplements/Interactions/Calciumcs.html
+http://www.umm.edu/otolaryngology/acoustic_neuromas.html
+http://www.umm.edu/patiented/articles/can_cataracts_be_prevented_000026_6.htm
+http://www.ummah.com/forum/archive/index.php/t-4742.html
+http://www.ummahnews.com/print.php?sid=1471
+http://www.ummahnews.com/viewarticle.php?sid=1471
+http://www.ummun.org/pages/committees.php
+http://www.umpm.nl/news.html
+http://www.umpquabank.com/default.asp?pageid=personal_cruise
+http://www.umsl.edu/services/govdocs/ooh20002001/183.htm
+http://www.umsl.edu/services/govdocs/ooh20002001/208.htm
+http://www.umsl.edu/services/govdocs/ooh9697/157.htm
+http://www.umsl.edu/services/govdocs/ooh9899/10.htm
+http://www.umsl.edu/services/govdocs/ooh9899/40.htm
+http://www.umsl.edu/services/govdocs/wofact99/76.htm
+http://www.umsl.edu/services/intelstu/handbook/stayinghealthy.html
+http://www.umsl.edu/~chemist/books/halspicks/hal2000.html
+http://www.umsl.edu/~conted/outreach/jefferson/
+http://www.umsl.edu/~conted/outreach/southcounty/
+http://www.umsu.de/wo/archive/2003/04
+http://www.umsu.de/wo/archive/2003/06
+http://www.umsu.de/wo/archive/2004/04
+http://www.umsu.de/wo/archive/2005/04
+http://www.umsu.de/wo/archive/2005/04/04/Mistaken_Intuitions
+http://www.umt.edu/SA/CREC/index.cfm/page/1379
+http://www.umw.edu/policies/network/devices/default.php
+http://www.umwelt-schweiz.ch/buwal/eng/medien/umweltbericht/genutzte/
+http://www.umweltbundesamt.de/whocc/nl25/hia.htm
+http://www.un.int/bangladesh/images/sc/st/000525timor.htm
+http://www.un.int/france/documents_anglais/050505_tnp_debat_general_f_rivasseau.htm
+http://www.un.int/usa/00hol0905.htm
+http://www.un.int/usa/02_169.htm
+http://www.un.int/usa/03_204.htm
+http://www.un.int/usa/03clp0214.htm
+http://www.un.int/usa/03print_204.htm
+http://www.un.int/usa/03ss0110.htm
+http://www.un.int/usa/04_045.htm
+http://www.un.int/usa/04_115.htm
+http://www.un.int/usa/04_244.htm
+http://www.un.int/usa/04hs0618.htm
+http://www.un.int/usa/04print_252.htm
+http://www.un.int/usa/04print_hs0618.htm
+http://www.un.int/usa/05_045.htm
+http://www.un.int/usa/98_47.htm
+http://www.un.int/usa/99hol624.htm
+http://www.un.kiev.ua/bc/jobs/113/
+http://www.un.org/Depts/dpa/prev_dip/africa/office_for_srsg/cnmc/speeches/spchfour.htm
+http://www.un.org/Depts/dpa/prev_dip/africa/office_for_srsg/cnmc/speeches/spchone.htm
+http://www.un.org/Depts/dpko/dpko/articles/sg_article181004.htm
+http://www.un.org/Depts/los/TechAsst.htm
+http://www.un.org/Depts/los/convention_agreements/texts/unclos/part2.htm
+http://www.un.org/Depts/rcnyo/newsletter/NL12/Activities%20-%20ESCWA.htm
+http://www.un.org/Depts/rcnyo/newsletter/nl10/actescwa.htm
+http://www.un.org/Depts/rcnyo/no61999/ECEactivities.htm
+http://www.un.org/Depts/unscom/s98-529.htm
+http://www.un.org/News/
+http://www.un.org/News/Press/docs/1996/19960214.sgsm5895.html
+http://www.un.org/News/Press/docs/1999/19990129.wom1090.html
+http://www.un.org/News/Press/docs/2000/20000403.dsgsm91.doc.html
+http://www.un.org/News/Press/docs/2000/20000626.sgsm7464.doc.html
+http://www.un.org/News/Press/docs/2001/dc2736.doc.htm
+http://www.un.org/News/Press/docs/2001/dc2747.doc.htm
+http://www.un.org/News/Press/docs/2001/dc2768.doc.htm
+http://www.un.org/News/Press/docs/2001/sc7001.doc.htm
+http://www.un.org/News/Press/docs/2002/GAEF2998.doc.htm
+http://www.un.org/News/Press/docs/2002/SC7348.doc.htm
+http://www.un.org/News/Press/docs/2002/sc7623.doc.htm
+http://www.un.org/News/Press/docs/2003/gaef3066.doc.htm
+http://www.un.org/News/Press/docs/2003/gal3240.doc.htm
+http://www.un.org/News/Press/docs/2003/sc7908.doc.htm
+http://www.un.org/News/Press/docs/2004/ga10299.doc.htm
+http://www.un.org/News/Press/docs/2004/hrct651.doc.htm
+http://www.un.org/News/Press/docs/2004/sc7985.doc.htm
+http://www.un.org/News/Press/docs/2005/dev2523.doc.htm
+http://www.un.org/News/ossg/sg/
+http://www.un.org/Pubs/chronicle/2004/webArticles/062104_sg_remarks2.asp
+http://www.un.org/ageing/coverage/czechE.htm
+http://www.un.org/apps/news/infocusnews.asp?NewsID=19&sID=1
+http://www.un.org/apps/news/infocusnews.asp?NewsID=661&sID=1
+http://www.un.org/apps/news/infocusnewsiraq1.asp?NewsID=767&sID=19
+http://www.un.org/apps/sg/offthecuff.asp?nid=600
+http://www.un.org/cyberschoolbus/earthday/peacebell2004_europe.asp
+http://www.un.org/documents/ecosoc/docs/1996/e1996-l16.htm
+http://www.un.org/documents/ecosoc/docs/1997/e1997-l15.htm
+http://www.un.org/ecosocdev/geninfo/afrec/vol17no1/171watch.htm
+http://www.un.org/esa/ffd/dc-4.htm
+http://www.un.org/esa/ffd/themes/dc-4.htm
+http://www.un.org/esa/forests/session-majorgroups-passes.html
+http://www.un.org/esa/socdev/ageing/waa/02tcmeet2.htm
+http://www.un.org/esa/socdev/enable/rights/ahc3nhricomments.htm
+http://www.un.org/esa/socdev/enable/rights/ares59_198e.htm
+http://www.un.org/events/SmallArms/docs/4048_can.htm
+http://www.un.org/events/youth98/infopart/infopart.htm
+http://www.un.org/events/youth98/speeches/118iraq.htm
+http://www.un.org/ga/president/58/speeches/031020-2.htm
+http://www.un.org/geninfo/faq/briefingpapers/briefing1a.htm
+http://www.un.org/icty/transe16/000517SC.htm
+http://www.un.org/icty/transe61/030226SC.htm
+http://www.un.org/reform/mallochbrown.htm
+http://www.un.org/special-rep/ohrlls/ohrlls/HR%20Statement%2029%20June%2004%20at%20the%20ECOSOC%20HLS-agenda%20item2.htm
+http://www.un.org/womenwatch/forums/review/health/
+http://www.unac.org/en/projects/peace/values.asp
+http://www.unansweredquestions.org/top_11.html
+http://www.unassistedchildbirth.com/birtherotica.htm
+http://www.unausa.org/education/modelun/resolution.asp
+http://www.unav.es/cdb/ccoerec93-4.html
+http://www.unbc.ca/cts/computer_labs/faq.html
+http://www.unbrokenglass.com/archives/000372.html
+http://www.unbsj.ca/arts/english/jones/mt/
+http://www.unc.edu/campus/policies/coi.html
+http://www.unc.edu/chan/intclim/chapV.htm
+http://www.unc.edu/courses/2003fall/geog/144/001/www/
+http://www.unc.edu/courses/rometech/public/content/arts_and_crafts/Susan_Hampton/Roman_Glass.html
+http://www.unc.edu/depts/diplomat/AD_Issues/amdipl_15/crigler_15.html
+http://www.unc.edu/depts/diplomat/AD_Issues/amdipl_17/articles/deatkine_arabs1.html
+http://www.unc.edu/depts/diplomat/AD_Issues/amdipl_17/letters/nigerltr1.html
+http://www.unc.edu/depts/diplomat/archives_roll/2003_10-12/schaffer_bunker/schaffer_bunker.html
+http://www.unc.edu/depts/europe/docs/german97-2.html
+http://www.unc.edu/depts/pubserv/produce.html
+http://www.unc.edu/depts/wcweb/handouts/argument.html
+http://www.unc.edu/depts/wcweb/handouts/fragments.html
+http://www.unc.edu/depts/wcweb/handouts/lab_report_complete.html
+http://www.unc.edu/depts/wcweb/handouts/style.html
+http://www.unc.edu/~cssmith/books2000.html
+http://www.unc.edu/~hbs/01art.htm
+http://www.unc.edu/~rowlett/units/dictH.html
+http://www.unc.edu/~rowlett/units/dictK.html
+http://www.unc.edu/~sfox/alice.html
+http://www.uncarved.org/jetexts/ycbdt.html
+http://www.uncarved.org/music/apunk/christ.html
+http://www.uncarved.org/turb/articles/ssd.html
+http://www.uncc.edu/jmarks/interests/PSYCH.html
+http://www.uncc.edu/wcgay/pubnonsexist.htm
+http://www.uncdf.org/english/evaluations/les87co1_final.php
+http://www.uncg.edu/bcn/GraduateInfo.html
+http://www.unclaw.com/chin/scholarship/fishermen.htm
+http://www.unclefed.com/AuthorsRow/GretaHicks/flexi962.html
+http://www.unclefed.com/Tax-Help/HTML/p3/ix01.html
+http://www.unclefed.com/Tax-News/1989/
+http://www.uncobgyn.com/
+http://www.uncommonforum.com/viewtopic.php?p=17636
+http://www.uncommonforum.com/viewtopic.php?p=19303
+http://www.uncommonforum.com/viewtopic.php?p=19970
+http://www.uncommonforum.com/viewtopic.php?p=20830
+http://www.uncommonforum.com/viewtopic.php?p=22590
+http://www.uncommonforum.com/viewtopic.php?t=3468
+http://www.uncommonforum.com/viewtopic.php?t=3468&start=0
+http://www.uncommonknowledge.org/00fall/510.html
+http://www.uncommonknowledge.org/00fall/default.htm
+http://www.uncommonknowledge.org/700/712.html
+http://www.uncommonknowledge.org/700/default.htm
+http://www.uncommonknowledge.org/800/839.html
+http://www.uncommonknowledge.org/winter00/412.html
+http://www.uncommonknowledge.org/winter98/204.html
+http://www.unconditionalcompassion.com/sub/COEProposal.htm
+http://www.unctad.org/Templates/Download.asp?docID=2805&intItemID=1634&lang=1
+http://www.unctad.org/Templates/Download.asp?docid=1925&lang=1&intItemID=2103
+http://www.unctad.org/Templates/webflyer.asp?docid=2805&intItemID=2079&lang=1
+http://www.uncwil.edu/stuaff/career/Majors/education.htm
+http://www.und.edu/dept/csl/section-1.htm
+http://www.und.edu/dept/csl/section-5.htm
+http://www.und.edu/dept/itss/train/itss-course_summaries_2002.htm
+http://www.und.nodak.edu/org/hr/professnl.htm
+http://www.und.nodak.edu/org/ndwild/oldtree.html
+http://www.underconsideration.com/mt-static/mt-comments.cgi?entry_id=1810
+http://www.underconsideration.com/mt-static/mt-comments.cgi?entry_id=2182
+http://www.underconsideration.com/mt-static/mt-comments.cgi?entry_id=2196
+http://www.underconsideration.com/speakup/archives/002014.html
+http://www.underdogma.com/default.asp?ntype_id=52
+http://www.underdown.org/cig_2e_ch16.htm
+http://www.undergroundgardener.com/silverlake_roots.htm
+http://www.undergroundnews.com/ubb/ultimatebb.php/topic/2/4/9.html
+http://www.underlevel.net/philclub/archives/000046.html
+http://www.underreported.com/modules.php?op=modload&name=News&file=index&catid=&topic=22&allstories=1
+http://www.underthesamesun.org/content/2005/05/
+http://www.underthesun.cc/Classics/Andersen/danish/
+http://www.underthesun.cc/Classics/Sheridan/SchoolForScandal/SchoolForScandal7.html
+http://www.underthesun.cc/Classics/Verne/Interior/Interior12.html
+http://www.undiscoveredscotland.co.uk/abington/abington/
+http://www.undp.org.in/Programme/Environment/glass/ggc.htm
+http://www.undp.org.vn/mlist/envirovlc/042005/post68.htm
+http://www.undp.org.vn/undp/docs/1998/migration/
+http://www.undp.org/hiv/publications/issues/english/issue11e.htm
+http://www.undp.org/povertyreport/chapters/chap8.html
+http://www.undueinfluence.com/foundation_for_deep_ecology.htm
+http://www.undueinfluence.com/peta.htm
+http://www.une.edu/ur/relations/summit.html
+http://www.unearthingtrex.com/pages/rex_anatomy.html
+http://www.uneca.org/cfm/2004/ministerial_statement.htm
+http://www.uneca.org/eca_resources/Publications/ESPD/economic_report_1999.htm
+http://www.uneca.org/eca_resources/Speeches/2005_speeches/060805_speech_hakim.htm
+http://www.uneca.org/eca_resources/Speeches/amoako/96_97/sadc-wp.htm
+http://www.unece.org/env/eia/eiaresources.html
+http://www.unece.org/spot/s062.htm
+http://www.uned.es/webuned/areasgen/info/english5.htm
+http://www.unep-unctad.org/cbtf/activities.htm
+http://www.unep-unctad.org/cbtf/cbtf2/projectsactivity.htm
+http://www.unep.org/Documents.Multilingual/Default.asp?DocumentID=434&ArticleID=4806&l=en
+http://www.unep.org/children_youth/gyr2003/gyr-news-update.htm
+http://www.unep.org/geo2000/english/0046.htm
+http://www.uneptie.org/pc/cp/understanding_cp/cp_policies.htm
+http://www.uneptie.org/sitemap-subject.htm
+http://www.unescap.org/esid/psis/population/database/poplaws/law_viet/vi_011.htm
+http://www.unesco.or.id/activities/social/146.php
+http://www.unesco.org/culture/copy/copyright/bangladesh/page3.html
+http://www.unesco.org/culture/copy/copyright/pakistan/page3.html
+http://www.unesco.org/dialogue2001/en/conferences.html
+http://www.unesco.org/education/efa/know_sharing/grassroots_stories/index.shtml
+http://www.unesco.org/education/efa/know_sharing/grassroots_stories/kenya_3.shtml
+http://www.unesco.org/education/studyingabroad/tools/conventions_eur_cover.shtml
+http://www.unesco.org/education/studyingabroad/tools/conventions_med_cover.shtml
+http://www.unesco.org/most/apmrnw12.htm
+http://www.unesco.org/most/tromso.htm
+http://www.unesco.org/most/usa3.htm
+http://www.unesco.org/science/
+http://www.unesco.org/science/wcs/eng/framework.htm
+http://www.unesco.org/webworld/ramp/html/r8722e/r8722e0d.htm
+http://www.unesco.org/webworld/ramp/html/r8722e/r8722e10.htm
+http://www.unesco.org/webworld/ramp/html/r8722e/r8722e12.htm
+http://www.unesco.org/webworld/ramp/html/r8809e/r8809e09.htm
+http://www.unesco.org/webworld/ramp/html/r8815e/r8815e06.htm
+http://www.unescobkk.org/culture/underwater/detail.asp?id=9
+http://www.unescobkk.org/education/ict/v2/info.asp?id=10967
+http://www.unescobkk.org/ips/arh-web/demographics/cambodia.cfm
+http://www.unf.edu/classes/medieval/film/thinkingabouthistoricalfilm.htm
+http://www.unfitforsociety.net/musesfool/caughtwithpantsdown.htm
+http://www.unfogged.com/archives/week_2003_08_03.html
+http://www.unfogged.com/archives/week_2003_09_07.html
+http://www.unfogged.com/archives/week_2003_09_28.html
+http://www.unfogged.com/archives/week_2003_10_05.html
+http://www.unfogged.com/archives/week_2003_11_09.html
+http://www.unfogged.com/archives/week_2004_02_22.html
+http://www.unfogged.com/archives/week_2004_04_18.html
+http://www.unfogged.com/archives/week_2004_05_30.html
+http://www.unfogged.com/archives/week_2004_10_17.html
+http://www.unfogged.com/archives/week_2004_10_31.html
+http://www.unfogged.com/archives/week_2004_12_05.html
+http://www.unfogged.com/archives/week_2005_06_05.html
+http://www.unforgettablelanguages.com/sat.html
+http://www.unfpa.org/icpd/icpd_poa.htm
+http://www.unfpa.org/icpd5/bulletins/bulletn14.htm
+http://www.unfpa.org/icpd5/bulletins/bulletn5.htm
+http://www.unfpa.org/intercenter/reprights/sexual-2.htm
+http://www.unfpa.org/swp/2000/english/ch01.html
+http://www.ungerware.net/classtemp.htm
+http://www.unh.edu/esci/mapexplan.html
+http://www.unh.edu/p2/biodiesel/article_alge.html
+http://www.unh.edu/rcm/reviewcommstructure.html
+http://www.unhchr.ch/data.htm
+http://www.unhchr.ch/huricane/huricane.nsf/0/088D61297F01FE378025676D00318ACD?opendocument
+http://www.unhcr.bg/press/sega_10042002_en.htm
+http://www.unhooked.com/sep/match2.htm
+http://www.unhooked.com/trxpro/howgroupswork.htm
+http://www.uni-bamberg.de/sowi/soziologie-i/publications/abs_blossfeld08.html
+http://www.uni-bielefeld.de/International/
+http://www.uni-hohenheim.de/~schaefer/afs/info-afs/0491.html
+http://www.uni-koeln.de/~al001/basp5.html
+http://www.uni-saarland.de/fak5/ronald/Perspsy/mood/mood.htm
+http://www.uni-tuebingen.de/connotations/GIBBON61.HTM
+http://www.uni-ulm.de/uni/fak/natwis/orgchem/AKSiehl/Bruker_WWW/docucntr/doc013/document.htm
+http://www.uni.edu/playground/tips/SAFE/equipment_guidelines.html
+http://www.uni.uiuc.edu/admissions/WaitlistFAQ.htm
+http://www.unicef.org/girlseducation/index_25073.html
+http://www.unicef.org/media/media_10492.html
+http://www.unicef.org/media/media_11952.html
+http://www.unicef.org/media/media_18857.html
+http://www.unicef.org/media/media_21881.html
+http://www.unicef.org/media/media_23048.html
+http://www.unicef.org/media/media_24771.html
+http://www.unicef.org/media/media_speeches2003.html
+http://www.unicef.org/teachers/protection/participate.htm
+http://www.unicefusa.org/site/apps/nl/content3.asp?c=duLRI8O0H&b=46973&ct=127260
+http://www.unicnairobi.org/display.asp?section_id=30&storynr=65
+http://www.unico.edu.sv/english/proysocial/ide/proy.html
+http://www.unicorn-enterprises.com/uxps_overview.html
+http://www.unicttaskforce.org/sixthmeeting/docs.html
+http://www.unicycling.org/iuf/rulebook/iufrules/1general.html
+http://www.unido.org/doc/4107
+http://www.unido.org/en/doc/3327
+http://www.unifi.org.uk/scotlandandireland/adviceonline/rsibeat.htm
+http://www.unification.org/ucbooks/SAV/Sav-09.htm
+http://www.uniformguidelines.com/qandaprint.html
+http://www.unifr.ch/biol/ecology/hamilton/hamilton/bozzi2.html
+http://www.unihealth.usyd.edu.au/While%20you're%20away.htm
+http://www.unilever.com/environmentsociety/socialcasestudies/education/Brazil_Investing_in_people.asp
+http://www.unimelb.edu.au/alumni/Careers/Careers12July.htm
+http://www.unimelb.edu.au/ppp/docs/1.html
+http://www.unimelb.edu.au/ppp/docs/9.html
+http://www.union-bulletin.com/main.asp?FromHome=1&TypeID=1&ArticleID=21262&SectionID=1&SubSectionID=1
+http://www.union-bulletin.com/main.asp?FromHome=1&TypeID=1&ArticleID=25200&SectionID=17&SubSectionID=30
+http://www.union-bulletin.com/main.asp?Search=1&ArticleID=22930&SectionID=1&SubSectionID=&S=1
+http://www.union-bulletin.com/main.asp?SectionID=1&SubSectionID=1&ArticleID=25174
+http://www.union-network.org/UNIsite/Sectors/Commerce/
+http://www.union-network.org/UNIsite/Sectors/Commerce/index_multinationals_Lidl.htm
+http://www.union-tribune.com/news/science/20020527-1423-bioreactorshortage.html
+http://www.union.edu/Admissions/PerfectSchool/ParentsGuide.php
+http://www.union.edu/Athletics/s.php?s=5015
+http://www.union.edu/N/DS/s.php?s=1852
+http://www.union.edu/N/DS/s.php?s=2604
+http://www.union.edu/N/DS/s.php?s=3192
+http://www.union.edu/PUBLIC/SCHOLARS/faq.htm
+http://www.unionbrae.com/Services.htm
+http://www.unionchurch.com/archive/013199.html
+http://www.unioncityvillage.homestead.com/
+http://www.uniondemocracy.com/Legal/yourjobyourrights.htm
+http://www.uniondemocracy.com/UDR/55-website%20contest%20results.htm
+http://www.unionlearningfund.org.uk/casestudies.htm
+http://www.unionplus.org/benefits/unique/
+http://www.unionrecord.com/arts/display.php?ID=1537
+http://www.unionrecord.com/final/display.php?ID=1941
+http://www.unionrecord.com/opinion/display.php?ID=561
+http://www.unionshop.org.au/us_aus/eupdtfeb03.html
+http://www.unionsquaremusic.co.uk/titlev4.php?ALBUM_ID=567&LABEL_ID=3
+http://www.unionvoice.org/campaign/RalphsGalloMD
+http://www.unionvoice.org/campaign/stand2003_clone
+http://www.unionvoice.org/campaign/takethepledge
+http://www.unionyes.org/labor_leader.htm
+http://www.unipv.it/webphilos_lab/courses/papers/action_based.htm
+http://www.uniquetravelstories.com/NY/marathon.htm
+http://www.unis.unvienna.org/unis/pressrels/2000/ga1739.html
+http://www.unis.unvienna.org/unis/pressrels/2001/gadis3213.html
+http://www.unis.unvienna.org/unis/pressrels/2005/pop920.html
+http://www.unisa.edu.au/study/
+http://www.unisanet.unisa.edu.au/BUGE/DisplayBUGE.asp?Division=HSC
+http://www.unisanet.unisa.edu.au/BUGE/DisplayBUGE.asp?Division=IEE
+http://www.unisdirect.com/projects/apel-test/section4/4-ex-9b.htm
+http://www.uniserve.com/?page=home/netnews&item=0412
+http://www.unison-scotland.org.uk/conf2004/wed5.html
+http://www.unison-scotland.org.uk/volsec/voiceatwork/12.html
+http://www.unison.ie/features/specialolympics2003/leinster/
+http://www.unison.ie/html/homehelp/safety.shtml
+http://www.unison.ie/irish_independent/index.php3?ca=35&issue_id=3433
+http://www.unison.ie/irish_independent/index.php3?ca=45&issue_id=5481
+http://www.unison.ie/irish_independent/index.php3?ca=45&issue_id=5793
+http://www.unison.ie/irish_independent/index.php3?ca=45&issue_id=8173
+http://www.unison.ie/irish_independent/index.php3?issue_id=10397
+http://www.unison.ie/irish_independent/index.php3?issue_id=11122
+http://www.unison.ie/irish_independent/index.php3?issue_id=3211
+http://www.unison.ie/irish_independent/index.php3?issue_id=5455
+http://www.unison.ie/irish_independent/index.php3?issue_id=6009
+http://www.unison.ie/irish_independent/index.php3?issue_id=6280
+http://www.unison.ie/irish_independent/index.php3?issue_id=6600
+http://www.unison.ie/irish_independent/index.php3?issue_id=7659
+http://www.unison.ie/irish_independent/index.php3?issue_id=8810
+http://www.unison.ie/irish_independent/index.php3?issue_id=9077
+http://www.unison.ie/polls/index.php3?ident=Irish%20Independent&mypollid=1527
+http://www.unison.org.uk/activists/pages_view.asp?did=1443
+http://www.unison.org.uk/news/index.asp?k=higher%20education
+http://www.unison.org.uk/resources/doc_view.asp?did=1120
+http://www.unison.org.uk/worklifebalance/differentways.asp
+http://www.unison.org.uk/worklifebalance/thingstoknow.asp
+http://www.unisys.com/about__unisys/news_a_events/06088547.htm
+http://www.unisys.com/communications/insights/articles/articles.htm?insightsID=108241
+http://www.united-church.ca/pb/eap/
+http://www.united-church.ca/residentialschools/2005/04.shtm
+http://www.united-church.ca/worshipmatters/2004/
+http://www.united.com/press/detail/0,6862,52685-1,00.html
+http://www.unitedagainstinjustice.org.uk/advice/CCRC%20applications%20guide.html
+http://www.unitedbankofindia.com/loan.htm
+http://www.unitedbloodservices.org/llcover.html
+http://www.unitedchurchhomes.org/cgi-bin/start.exe/ema_default.html
+http://www.uniteddesign.com/idea_workshop1_97.html
+http://www.unitedfeatures.com/ufsapp/viewFeature.do?id=174
+http://www.unitedforjustice.com/peoplevsjames.htm
+http://www.unitedforpeace.org/article.php?id=1879
+http://www.unitedforpeace.org/article.php?id=1971
+http://www.unitedforpeace.org/article.php?id=2151
+http://www.unitedforpeace.org/article.php?id=2151&printsafe=1
+http://www.unitedforpeace.org/article.php?id=2786
+http://www.unitedforpeace.org/article.php?id=408
+http://www.unitedforpeace.org/article.php?id=408&printsafe=1
+http://www.unitedhealthfoundation.org/shr2002/components/risks/RiskFactors.html
+http://www.unitedhealthfoundation.org/shr2004/commentary/infant.html
+http://www.unitedleaders.org/
+http://www.unitedpokerforum.com/archive/2003-10/10/32428/
+http://www.unitedscripters.com/phps/print2.html
+http://www.unitedspinal.org/pages.php?catid=7&pageid=472&subtitle=A%20Final%20Word&anchor
+http://www.unitedthisistheway.com/
+http://www.unitedthisistheway.com/successby6.htm
+http://www.unitedvisual.com/2tips/2tvcf101.asp
+http://www.unitedvna.org/faq.asp
+http://www.unitedway-columbia.org/member_agencies.php?ID=1
+http://www.unitof1.com/amazon-buy-0684856360.html
+http://www.unitstudy.com/articles/Giving%20Thanks.htm
+http://www.unityunitarian.org/grade78.html
+http://www.universalalliance.org.uk/other_services_enchanting_sea_dragon_healing_sanctuary.htm
+http://www.universalistchurch.net/boyinthebands/
+http://www.universalservice.org/board/minutes/sl/102197.asp
+http://www.universalteacher.org.uk/gcse/xmascarol.htm
+http://www.universalteacher.org.uk/gcsemedia/media.htm
+http://www.universalteacher.org.uk/prose/achristmascarol.htm
+http://www.universaltreasures.com/mammoth.htm
+http://www.universalunderwriters.com/uug/maintenance.nsf/0/E780A10D3AD097ED85256F2A006FAC10?opendocument&changemenu=no
+http://www.universidadabierta.edu.mx/SerEst/MAP/METODOS%20CUANTITATIVOS/Business%20Statistics.htm
+http://www.universities.com/Search/Degrees/Doctors_degree/
+http://www.university-technology.com/legal.php
+http://www.universityaffairs.ca/issues/2004/apr/print/good.html
+http://www.universitybusiness.com/page.cfm?p=617
+http://www.universitybusiness.com/page.cfm?p=791
+http://www.universityindia.edu/policy.htm
+http://www.universitysport.ca/e/story_detail.cfm?id=3538
+http://www.univie.ac.at/Wissenschaftstheorie/srb/srb/probing.html
+http://www.univie.ac.at/dcedoc/A3U2Q/A3U2QM03.HTM
+http://www.unixl.com/dir/humanities/psychology/psychology_degrees/
+http://www.uniya.org/talks/brennan_20may04.html
+http://www.unjlc.org/content/index.phtml/itemId/18974
+http://www.unjspf.org/eng/archives/annex3-97.html
+http://www.unknownnews.net/apocalypsenow.html
+http://www.unknownnews.net/madcow.html
+http://www.unl.edu/barkley/spath/faqs.shtml
+http://www.unl.edu/philosop/undergrad/undgrad.html
+http://www.unl.edu/scarlet/v10n30/v10n30nibs.html
+http://www.unl.edu/scarlet/v12n02/v12n02features.html
+http://www.unlimited.co.nz/unlimited.nsf/0/E71409A1DAE3EA24CC256EEC0010D618?OpenDocument
+http://www.unlimitedmom.com/articles%202004/dealing-with-lying.php
+http://www.unlimitedrealestate.net/showmgr/showingdetailreportoverview.htm
+http://www.unlockme.co.uk/blacklist.html
+http://www.unm.edu/cirt/introductions/aix_xlfortran/xlflrm.htm
+http://www.unm.edu/~abqteach/ArchiCUs/99-02-09.htm
+http://www.unm.edu/~abqteach/archeology_cus/02-01-11.htm
+http://www.unm.edu/~abqteach/gods_cus/01-02-04.htm
+http://www.unm.edu/~abqteach/math2002/02-02-06.htm
+http://www.unm.edu/~finearts/about/publications/cfafall.htm
+http://www.unm.edu/~pre/law/articles_advise/religious.html
+http://www.unm.edu/~psych/faculty/music.htm
+http://www.unm.edu/~ubppm/ubppmanual/2020.htm
+http://www.unmalumni.com/chapel/usage.htm
+http://www.unmarriedamerica.org/News-About-Us/living_single_seeing_double.htm
+http://www.unmc.edu/Community/ruralmeded/admission_timeline.htm
+http://www.unmc.edu/Community/ruralmeded/fedstloc/by_the_numbers.htm
+http://www.unmc.edu/Community/ruralmeded/generalism.htm
+http://www.unmc.edu/Community/ruralmeded/model/medical_schools_reforms.htm
+http://www.unmc.edu/durham/unique.htm
+http://www.unmsub.com/employment.htm
+http://www.unmuseum.org/lostw.htm
+http://www.unmuseum.org/tsunami.htm
+http://www.uno.edu/~acaf/ap/20.4.htm
+http://www.unocal.com/uclnews/2005news/020105b.htm
+http://www.unodc.org/unodc/en/speech_2000-11-28_1.html
+http://www.unodc.org/unodc/en/speech_2003-03-20_2.html
+http://www.unodc.org/unodc/en/speech_2003-10-16_1.html
+http://www.unodc.org/unodc/unlinks.html
+http://www.unoy.org/YOUTH%20FORUM%20FOR%20PEACE%20AND%20JUSTICE.htm
+http://www.unpa.net/about/annual.htm
+http://www.unr.edu/gerontology/Fnews04.htm
+http://www.unr.edu/vpaf/hr/benefits/supplemental.html
+http://www.unreasonableman.net/2004/04/benefits_of_fut.html
+http://www.unreasonableman.net/2004/06/the_benefits_of.html
+http://www.unrisd.org/unrisd/website/document.nsf/0/A3189A1A4EA2794280256B67005B712E?OpenDocument
+http://www.unrv.com/early-empire/imperial-dynasty.php
+http://www.unrv.com/emperors/constantine-II.php
+http://www.unshod.org/pfbc/pfrevlinks.htm
+http://www.unshod.org/pfbc/pfrossi2.htm
+http://www.unswlawsoc.org/careersguide/hdy.php
+http://www.unt.edu/dcsmt/mtg001103.htm
+http://www.unt.edu/hr/records/faq.htm
+http://www.unt.edu/jewishstudies/courses/courses.htm
+http://www.unt.edu/northtexan/archives/p01/untnews.htm
+http://www.unt.edu/northtexan/archives/p02/studentfocus.htm
+http://www.unt.edu/northtexan/archives/s01/alumniawardswinners.htm
+http://www.unt.edu/pais/insert/ubiol.htm
+http://www.unt.edu/pais/insert/ucyto.htm
+http://www.unt.edu/pais/insert/umdth.htm
+http://www.unt.edu/pais/insert/uphil.htm
+http://www.unt.edu/policy/UNT_Policy/volume1/1_5_1.html
+http://www.unt.edu/policy/UNT_Policy/volume1/1_7_6.html
+http://www.unt.edu/urcmmediaguide/media.htm
+http://www.untimely-thoughts.com/?cat=3&type=3&art=896
+http://www.unu.edu/unupress/food/8F074e/8F074E01.htm
+http://www.unu.edu/unupress/food/8F103e/8F103E04.htm
+http://www.unu.edu/unupress/food/8F134e/8F134E03.htm
+http://www.unu.edu/unupress/food/V183e/ch06.htm
+http://www.unu.edu/unupress/unupbooks/80362e/80362E02.htm
+http://www.unu.edu/unupress/unupbooks/80364e/80364E08.htm
+http://www.unu.edu/unupress/unupbooks/80632e/80632E0g.htm
+http://www.unu.edu/unupress/unupbooks/80635e/80635E0n.htm
+http://www.unu.edu/unupress/unupbooks/80653e/80653E0d.htm
+http://www.unu.edu/unupress/unupbooks/80697e/80697E02.htm
+http://www.unu.edu/unupress/unupbooks/80774e/80774E0a.htm
+http://www.unu.edu/unupress/unupbooks/uu07ee/uu07ee07.htm
+http://www.unu.edu/unupress/unupbooks/uu08ie/uu08ie0o.htm
+http://www.unu.edu/unupress/unupbooks/uu11ee/uu11ee0a.htm
+http://www.unu.edu/unupress/unupbooks/uu21le/uu21le04.htm
+http://www.unu.edu/unupress/unupbooks/uu32me/uu32me09.htm
+http://www.unu.edu/unupress/unupbooks/uu35ie/uu35ie0c.htm
+http://www.unv.org/infobase/unv_news/2000/88/00_06_88IND_women.htm
+http://www.unwire.org/UNWire/20040423/449_23144.asp
+http://www.unzco.com/basicguide/c4.html
+http://www.unzco.com/basicguide/c6.html
+http://www.uoa.org/ostomy_travel.htm
+http://www.uoguelph.ca/~antoon/gadgets/pll/pll.html
+http://www.uoguelph.ca/~rmckitri/research/fallupdate04/update.fall04.html
+http://www.uoit.ca/EN/main/11259/11264/pol_res.html
+http://www.uoregon.edu/~delancey/courses/211/211links.html
+http://www.uoregon.edu/~uopubs/bulletin/geography.shtml
+http://www.uow.edu.au/arts/sts/bmartin/dissent/documents/health/healthsouth_care.html
+http://www.uow.edu.au/eng/bmh/masters.html
+http://www.uow.edu.au/prospective/postgrad.html
+http://www.uow.edu.au/prospective/recent.html
+http://www.up200.org/v2/JP30/JP30rules.htm
+http://www.upa.org/ultimate/rules/rules.shtml
+http://www.upa.pdx.edu/baby-boom/
+http://www.upakweship.co.uk/
+http://www.upassoc.org/upa_publications/upa_voice/volumes/2005/june/winning_tagline.html
+http://www.upbustleandout.co.uk/zahara/walking/walking.htm
+http://www.upc.edu/tercercicle/faq.php?id=3
+http://www.upd.oas.org/update/ebulletin.html
+http://www.upe.ac.za/labour/honours_treatises_1.htm
+http://www.upeace.org/news/index.cfm?id_activity=234&actual=2004
+http://www.upeace.org/programmes/GPB.cfm
+http://www.upei.ca/irr/visa.html
+http://www.upei.ca/irr/weather.html
+http://www.upenn.edu/assoc-provost/handbook/ii_b_3.html
+http://www.upenn.edu/oip/iss/tax/studgtis.html
+http://www.upenn.edu/researchatpenn/article.php?948&tch
+http://www.upf.com/book.asp?id=ALTERF93
+http://www.uphs.upenn.edu/ebdc/components/component_2/PSVI/
+http://www.upi.com/view.cfm?StoryID=15022002-015414-4119r
+http://www.upi.com/view.cfm?StoryID=20020722-015757-3713r
+http://www.upi.com/view.cfm?StoryID=20020917-050010-1363r
+http://www.upi.com/view.cfm?StoryID=20030714-073510-5671r
+http://www.upi.com/view.cfm?StoryID=20040309-122413-8660r
+http://www.upi.com/view.cfm?storyID=20041102-105724-9976r
+http://www.upliftprogram.com/h_ethics.html
+http://www.upmc-biosecurity.org/pages/events/2nd_symposia/transcripts/trans_layt.html
+http://www.upmj.co.uk/Jan%2011%202005.php4
+http://www.upmrc.org/content/activities/activities_i.html
+http://www.upmtg.com/ilr-training.htm
+http://www.upmystreet.com/overview/?l1=Port%20William
+http://www.upnaway.com/~poliowa/Facing%20Surgery.html
+http://www.upnorthpub.com/lk.htm
+http://www.upperside.fr/wifivoice04/wifivoice04program.htm
+http://www.uppity-disability.net/bio2000.html
+http://www.upress.virginia.edu/authorinfo/msprep3.html
+http://www.ups.edu/bulletin/ipe/
+http://www.ups.edu/physics/faculty/donev/Bat%20Sonar
+http://www.upsidedownworld.org/ReingoldOil.htm
+http://www.upte.org/hxcontract/compensation.html
+http://www.uptick.com/forecast/forecast_1.php?pgid=171&parentid=2&seqno=9
+http://www.uptimesoftware.com/screenshots.html
+http://www.uptownrealty.com/our-agents/why-choose-us.html
+http://www.uq.edu.au/~e2hchans/mel_culv.html
+http://www.uq.edu.au/~mlwham/banjo/three_elephant_power/sitting_in_judgment.html
+http://www.uq.edu.au/~uqdcox/Agent-Based%20Theories%20of%20Right%20Action.htm
+http://www.uq.net.au/~zzdonsi/cost.html
+http://www.uqu.uq.edu.au/regulations/part03
+http://www.uqu.uq.edu.au/regulations/part03/base_view
+http://www.urantia.org/papers/paper82.html
+http://www.urantiabook.org/centering_prayer.htm
+http://www.urban.org/Template.cfm?NavMenuID=24&template=/TaggedContent/ViewPublication.cfm&PublicationID=8583
+http://www.urban.org/Template.cfm?Section=ByTopic&NavMenuID=62&TopicID=169&TopicName=Employment%20and%20Education
+http://www.urban.org/Template.cfm?Section=ByTopic&NavMenuID=62&TopicID=28&TopicName=Family%20Structure%20
+http://www.urban.org/content/Research/NewFederalism/NSAF/Snapshots/1997Results/MediaRelease/Media.htm
+http://www.urban.org/content/Research/NewFederalism/NSAF/Snapshots/1999Results/FamilyEconomicWellBeing/FamilyEcon.htm
+http://www.urban.org/url.cfm?ID=310861
+http://www.urban.org/url.cfm?ID=410934
+http://www.urban.org/url.cfm?ID=411050
+http://www.urban.org/urlprint.cfm?ID=7762
+http://www.urban.org/urlprint.cfm?ID=8968
+http://www.urban75.com/Action/dsei.html
+http://www.urban75.com/Action/reclaim10.html
+http://www.urban75.com/Drugs/alcohol.html
+http://www.urban75.com/Rave/party.html
+http://www.urban75.net/vbulletin/archive/index.php/t-93938.html
+http://www.urban75.org/football/rights.html
+http://www.urban75.org/glastonbury/glasto05.html
+http://www.urban75.org/london/chislehurst.html
+http://www.urbana.org/ns.ms.agency.overview.cfm?RecordId=440
+http://www.urbandharma.org/bcdialog/bcd2/feminization.html
+http://www.urbandharma.org/images/Monastic2003/
+http://www.urbandharma.org/udharma2/anger.html
+http://www.urbandictionary.com/define.php?term=ain't&r=d
+http://www.urbanecology.org.au/ecocity2/ecologicalrestructuring.html
+http://www.urbanexpose.com/story.ue?n=32
+http://www.urbanext.uiuc.edu/apples/appleorchards.cfm?state=IL&sort=farmname
+http://www.urbanext.uiuc.edu/apples_sp/orchards.html
+http://www.urbanext.uiuc.edu/eggs/res19-opincubator.html
+http://www.urbanext.uiuc.edu/gpe_sp/tg/c2-background.html
+http://www.urbanext.uiuc.edu/greenline/99v1/gl9901.02.html
+http://www.urbanext.uiuc.edu/nibbles/getalong-leading.html
+http://www.urbanext.uiuc.edu/veggies/tomato1.html
+http://www.urbanfox.tv/articles/formats/fm1hdand24p.html
+http://www.urbangeek.net/writings/academic/guernica.html
+http://www.urbanharvest.org/gardening/basics/raised_beds.html
+http://www.urbanhonking.com/regarding/archives/2004/10/
+http://www.urbaninsite.com/asp/surveyResults.asp?questionID=179
+http://www.urbaninsite.com/asp/surveyResults.asp?questionID=181
+http://www.urbaninsite.com/asp/surveyResults.asp?questionID=194
+http://www.urbanvancouver.com/aggregator/sources/53?from=120
+http://www.urbanwildlifesociety.org/UWS/HtLkIntrview.html
+http://www.urc.org.uk/our_work/committees/ministries/Statutory_Employment_Rights.htm
+http://www.urc.org.uk/reform_magazine/articles/whos_afraid_of_theology/
+http://www.ureg.ohio-state.edu/courses/Autumn/book3/B335.htm
+http://www.urfig.org/news-eng-doha-qatar-declaration-jennar-pt.htm
+http://www.urhobo.kinsfolk.com/Conferences/FirstAnnualConference/ConferenceMatters/KeynoteAddress.html
+http://www.uri-geller.com/em1.htm
+http://www.uri-geller.com/nscientist.htm
+http://www.uri.edu/artsci/bio/plant_anatomy/glossary.html
+http://www.uri.edu/artsci/lsc/actstu.html
+http://www.uri.edu/univcol/acadadv/cai/major.htm
+http://www.urielw.com/refs/041129.htm
+http://www.urinary-incontinence-sexual-dysfunction-help.com/kegelmaster_testim.html
+http://www.urj.org/_kd/go.cfm?destination=ViewItem&Item_ID=6921
+http://www.urlniche.com/free_help_with_names.htm
+http://www.urmc.rochester.edu/SMD/about/newsletterArchive/newsletter12172004.cfm
+http://www.urmc.rochester.edu/smd/about/newsletterArchive/newsletter12172004.cfm
+http://www.urop.uci.edu/id-sure/faq.html
+http://www.urop.uci.edu/opportunities/researcher_of_month/researcher_december01.html
+http://www.urotoday.org/prod/contents/confreport/article.asp?cat=confReport&sid=184&tid=397&aid=2507
+http://www.ursulakleguin.com/Telling_Excerpt.html
+http://www.us-asean.org/UABR/UABR202.htm
+http://www.us-green-card-lottery.org/
+http://www.us-israel.org/jsource/Society_&_Culture/IDF_ethics.html
+http://www.us-mission.ch/press2004/0713Zoellick.htm
+http://www.us-saudi-business.org/Speeches/Abraham%20speech.htm
+http://www.us.hsbc.com/securitysite/ourresponsibility.html
+http://www.us.ilo.org/archive/news/2001/ilowatch_0112.cfm
+http://www.us.imdb.com/rg/title-tease/usercomments/title/tt0038988/usercomments
+http://www.us.maynepharma.com/news/GermManuf_3May04.html
+http://www.us.oup.com/us/catalog/general/subject/Economics/Political/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk5MjY5NTNY?view=usa&ci=0199269548
+http://www.us.oup.com/us/catalog/general/subject/Economics/Political/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk5MjY5NTQ4?view=usa&sf=toc&ci=0199269548
+http://www.us.oup.com/us/catalog/general/subject/Sociology/LawSociety/~~/cHI9MTAmcGY9MCZzcz1wdWJkYXRlLmRlc2Mmc2Y9bmV3cmVjZW50JnNkPWFzYyZ2aWV3PXVzYSZjaT0wMTk1MTc2NTg4
+http://www.usa-canada.les.org/chapters/sandiego/
+http://www.usa-gymnastics.org/publications/usa-gymnastics/1999/3/deal-fear.html
+http://www.usa-patriotism.com/tribute/moh/kc1871.htm
+http://www.usaaf.net/ww2/medical/mspg8.htm
+http://www.usaba.org/pages/sportsAdaptSwim.html
+http://www.usabecker.com/archives/2004/07/
+http://www.usability.gov/methods/usability_testing.html
+http://www.usabilityprofessionals.org/upa_publications/upa_voice/volumes/2005/june/winning_tagline.html
+http://www.usacitiesonline.com/usafactfile.htm
+http://www.usack.org/membership/faqs.asp
+http://www.usacubatravel.com/lodging.htm
+http://www.usafa.af.mil/dfpfa/CVs/Bertha/Sco.html
+http://www.usafa.af.mil/jscope/JSCOPE00/Wheeler00.html
+http://www.usafa.af.mil/jscope/JSCOPE97/osbrne97.htm
+http://www.usafe.af.mil/news/news03/uns03671.htm
+http://www.usafootball.com/features/fastFundraise.html
+http://www.usafreedomcorps.gov/content/about_usafc/newsroom/speeches_dynamic.asp?ID=843
+http://www.usafreedomcorps.gov/dynamic_shared/includes/printable/dynamic_speeches.asp?ID=843
+http://www.usafriendsearch.com/
+http://www.usaid.gov/gn/nrm/news/010704_rakyteinture/
+http://www.usaid.gov/id/media/press/press25may05.html
+http://www.usaid.gov/locations/europe_eurasia/press/reach/aid_bh.html
+http://www.usaid.gov/our_work/cross-cutting_programs/private_voluntary_cooperation/pvoconf_agenda05.html
+http://www.usaid.gov/press/speeches/2003/sp030330.html
+http://www.usaid.gov/press/speeches/2004/sp041229.html
+http://www.usaid.gov/procurement_bus_opp/procurement/annual_pstatements/nepalaps.html
+http://www.usaid.gov/stories/ethiopia/cs_ethiopia_health.html
+http://www.usaid.gov/stories/southafrica/ss_southafrica_jabavuclinic.html
+http://www.usajobs.opm.gov/EI60.asp
+http://www.usajobs.opm.gov/homeland.asp
+http://www.usamnesia.com/2004_01_01_archive.html
+http://www.usanetwork.com/sports/usopen2004/ontheair/production/production.html
+http://www.usanews.net/
+http://www.usanews.net/default.htm
+http://www.usankf.org/f56/f6/f6b/f6b_6_ATHLETES/f6b_6_7_Juniors/f6b_6_7_2_ArticleStrength.htm
+http://www.usarj.army.mil/cmdstaffs/dcslog.htm
+http://www.usask.ca/economics/SABE/conferences/sabe2001.html
+http://www.usask.ca/education/coursework/802papers/machnaik/
+http://www.usask.ca/education/program/bed/homec.htm
+http://www.usask.ca/psychiatry/forensic.html
+http://www.usask.ca/wcvm/herdmed/applied-ethology/articles/maternal.html
+http://www.usastudyguide.com/WesternWash2.htm
+http://www.usatechguide.org/itemreview.php?itemid=1124
+http://www.usatf.org/events/2004/USATFClubXCChampionships/results/om.asp
+http://www.usatoday.com/educate/college/education/articles/20040215.htm
+http://www.usatoday.com/life/books/excerpts/2003-07-25-south-beach-diet_x.htm
+http://www.usatoday.com/life/books/excerpts/2003-09-05-cold-mountain_x.htm
+http://www.usatoday.com/life/columnist/popcandy/2002-09-11-candy.htm
+http://www.usatoday.com/life/music/news/2004-03-29-classic-rock-kids_x.htm
+http://www.usatoday.com/life/people/2004-04-12-matt-daniels_x.htm
+http://www.usatoday.com/life/television/news/2003-07-23-gay_x.htm
+http://www.usatoday.com/money/companies/2004-07-14-harrahs-caesars_x.htm
+http://www.usatoday.com/money/economy/2005-01-13-retail-jobless_x.htm
+http://www.usatoday.com/money/economy/employment/2003-10-01-unemployment_x.htm
+http://www.usatoday.com/money/industries/energy/2004-03-05-gas-prices_x.htm
+http://www.usatoday.com/money/industries/energy/2005-01-30-opec-meeting_x.htm?csp=34%5C'
+http://www.usatoday.com/money/perfi/funds/2003-12-09-whistleblow_x.htm
+http://www.usatoday.com/money/perfi/general/2004-12-09-mym_x.htm
+http://www.usatoday.com/news/healthscience/science/2002-06-07-dog-usat.htm
+http://www.usatoday.com/news/nation/census/2003-08-06-census-lede_x.htm
+http://www.usatoday.com/news/opinion/2005-01-10-broadband-bellsouth-our_x.htm
+http://www.usatoday.com/news/politicselections/nation/president/2004-10-04-vp-debate_x.htm
+http://www.usatoday.com/news/washington/2003-11-04-bush-poll_x.htm
+http://www.usatoday.com/news/washington/2004-02-12-wmd-hunt_x.htm
+http://www.usatoday.com/news/world/2001/09/09/belarus.htm
+http://www.usatoday.com/news/world/2004-12-26-ukraine-election_x.htm
+http://www.usatoday.com/sports/columnist/lopresti/2002-09-23-lopresti_x.htm
+http://www.usatoday.com/tech/news/2004-05-11-nintendo-ds_x.htm
+http://www.usatoday.com/tech/news/techinnovations/2004-11-03-innovators_x.htm
+http://www.usatoday.com/weather/news/2004-03-18-winter0304_x.htm
+http://www.usatoday.com/weather/resources/coldscience/aice0.htm
+http://www.usaverageadjusters.org/websiteuseragreement.htm
+http://www.usavisacounsel.com/article-89.htm
+http://www.usavolleyball.org/VolleyballNews/news.asp?id=768
+http://www.usaweekend.com/01_issues/010318/010318senior_athletes.html
+http://www.usaweekend.com/03_issues/030629/030629rights.html
+http://www.usaweekend.com/03_issues/030831/030831nurses.html
+http://www.usaweekend.com/classroom/fiction_00/fiction_win2000_maloney.html
+http://www.usaweekend.com/diffday/2000_articles/000924diffday.html
+http://www.usaweekend.com/food/carper_archive/950813eat_smart_tomatoes.html
+http://www.usawoa.org/woheritage/Hist_Avn_WO.htm
+http://www.usbr.gov/newsroom/speech/detail.cfm?RecordID=121
+http://www.usc.cuhk.edu.hk/wk_wzdetails.asp?id=957
+http://www.usc.edu/dept/MSA/humanrelations/womeninislam/idealmuslimah/chapter4.html
+http://www.usc.edu/dept/MSA/introduction/woi_knowledge.html
+http://www.usc.edu/dept/annenberg/papers/webart.html
+http://www.usc.edu/dept/gero/AgeWorks/ltc/courses/500.shtml
+http://www.usc.edu/dept/gero/AgeWorks/online-education/courses/500.shtml
+http://www.usc.edu/dept/publications/SCAMPUS/gov/gov15.html
+http://www.usc.edu/dept/publications/cat2004/schools/college/posc/graduate.html
+http://www.usc.edu/dept/publications/cat2004/schools/communication/comm_undergraduate/undergrad_minors.html
+http://www.usc.edu/dept/publications/cat2004/schools/education/graduate/masters.html
+http://www.usc.edu/dept/pubrel/trojan_family/autumn98/mailbag/mailbag.html
+http://www.usc.edu/dept/pubrel/trojan_family/summer00/32ndSt/32.html
+http://www.usc.edu/uscnews/story.php?id=1771
+http://www.uscampaignforburma.org/assk/biography.html
+http://www.uscampus.com/study_live/studylive_banking.htm
+http://www.uscatholic.org/2004/10/featb0410.htm
+http://www.uscatholic.org/cstline/tline2.html
+http://www.uscc.gov/textonly/transcriptstx/tesnic.htm
+http://www.uscc.gov/textonly/transcriptstx/txtesnic.htm
+http://www.usccr.gov/pubs/sac/ca0500/ch4.htm
+http://www.uscg.mil/stcw/s-handbk12.htm
+http://www.uscgauxcharleston.org/training.htm
+http://www.uschamber.com/
+http://www.uscharterschools.org/pub/uscs_docs/r/mission.htm
+http://www.usconstitution.com/InagAddrRichardNixon2nd.htm
+http://www.usconstitution.net/consttop_elec.html
+http://www.usconstitution.net/eman.html
+http://www.usconsulate.org.hk/cg/2000/0331.htm
+http://www.usconsulate.org.hk/ushk/others/2004/042202.htm
+http://www.uscourts.gov/faq.html
+http://www.uscourts.gov/library/annual_congress.html
+http://www.uscourts.gov/newsroom/letter_text.htm
+http://www.uscsi.org/publications/papers/05-17-05.htm
+http://www.usd.edu/~tgannon/jungbio.html
+http://www.usd434.org/curriculum/Social%20Studies%20Curriculum/grade5.htm
+http://www.usda-ethics.net/rules/rule16.htm
+http://www.usda-ethics.net/rules/rule23.htm
+http://www.usda.gov/wps/portal/!ut/p/_s.7_0_A/7_0_1OB?contentidonly=true&contentid=2005/05/0188.xml
+http://www.usdat.us/archives/10_21_04_event.html
+http://www.usdaw.org.uk/arena_journal/10/littlewoods_pools.html
+http://www.usdaw.org.uk/campaigns/freedom_from_fear/
+http://www.usdaw.org.uk/getactive/news/index_bydate.html
+http://www.usdoj.gov/atr/cases/f2100/2119.htm
+http://www.usdoj.gov/atr/cases/f2200/2238.htm
+http://www.usdoj.gov/atr/public/health_care/204694.htm
+http://www.usdoj.gov/civil/ocl/odometer/toc.htm
+http://www.usdoj.gov/criminal/cybercrime/1030_anal.html
+http://www.usdoj.gov/criminal/cybercrime/PatriotAct.htm
+http://www.usdoj.gov/criminal/cybercrime/swartzTestimony061704.htm
+http://www.usdoj.gov/crt/voting/sec_5/ltr/l_022604.html
+http://www.usdoj.gov/dea/pubs/intel/01026/
+http://www.usdoj.gov/eoir/press/98/nrcapsus.htm
+http://www.usdoj.gov/ndic/pubs07/998/meth.htm
+http://www.usdoj.gov/oig/special/0405/glossary.htm
+http://www.usdoj.gov/oig/special/9606/testimony.htm
+http://www.usdoj.gov/oig/testimony/0408/
+http://www.usdoj.gov/opa/pr/2003/May/03_crm_283.htm
+http://www.usdoj.gov/opa/pr/2003/November/03_opa_606.htm
+http://www.usdoj.gov/opa/pr/2003/November/03_opa_611.htm
+http://www.usdoj.gov/opa/pr/2004/February/04_opa_085.htm
+http://www.usdoj.gov/osg/briefs/2001/0responses/2001-0837.resp.html
+http://www.usdoj.gov/osg/briefs/2003/0responses/2003-0867.resp.html
+http://www.usdoj.gov/tax/readingroom/criminal/taxc01.htm
+http://www.usdoj.gov/usao/eousa/foia_reading_room/usam/title2/3mapp.htm
+http://www.usdoj.gov/usao/eousa/foia_reading_room/usam/title4/civ00012.htm
+http://www.usdoj.gov/usao/eousa/foia_reading_room/usam/title4/civ00145.htm
+http://www.usdoj.gov/usao/eousa/foia_reading_room/usam/title6/4mtax.htm
+http://www.usdoj.gov/usao/eousa/foia_reading_room/usam/title9/crm01968.htm
+http://www.usdoj.gov/usao/nyn/NewsReleases/NewsReleases.htm
+http://www.usdoj.gov/usao/ohs/Press/12-03-04-Col.htm
+http://www.usdoj.gov/ust/press/articles/abi_1203/abi_1203.html
+http://www.usea.org/aboutUSEA.htm
+http://www.usedbookcentral.com/texis/ubc/searchbooks,keywords,biography+military+leaders.html
+http://www.usedwigs.com/listenup.html
+http://www.usefilm.com/image/304187.html
+http://www.usefulandagreeable.com/united.html
+http://www.usefulwork.com/shark/arafatbombs.html
+http://www.useit.com/alertbox/
+http://www.useit.com/alertbox/20030421.html
+http://www.useit.com/alertbox/20030616.html
+http://www.useit.com/alertbox/20030630.html
+http://www.useit.com/alertbox/20030818.html
+http://www.useit.com/alertbox/20050314.html
+http://www.useit.com/alertbox/20050601.html
+http://www.usemb.gov.do/Ambassador/Speeches/08_dec_01.htm
+http://www.usemb.se/usis/history/chapter5.html
+http://www.usembassy-china.org.cn/chengdu/cons/faq.html
+http://www.usembassy-china.org.cn/press/release/2000/summers53.html
+http://www.usembassy-china.org.cn/press/release/2004/111804way.html
+http://www.usembassy-china.org.cn/sandt/CostofPollution-web.html
+http://www.usembassy-china.org.cn/sandt/chongqingbloodplasma.html
+http://www.usembassy-china.org.cn/sandt/estnews032103.htm
+http://www.usembassy-china.org.cn/sandt/estnews083002.htm
+http://www.usembassy-china.org.cn/sandt/ptr/estnews083002-prt.htm
+http://www.usembassy-dhaka.org/state/StatePD/pre1jan12_05.html
+http://www.usembassy.at/en/embassy/cons/residence.htm
+http://www.usembassy.de/germany/firstlady_interview.html
+http://www.usembassy.de/germany/greencard/
+http://www.usembassy.de/germany/irs.html
+http://www.usembassy.it/file2005_04/alia/a5042010.htm
+http://www.usembassy.it/file2005_05/alia/a5051801.htm
+http://www.usembassy.it/file2005_06/alia/a5062102.htm
+http://www.usembassy.org.uk/eande087.html
+http://www.usembassy.org.uk/fas/london_calling_july03.htm
+http://www.usembassy.org.uk/iraq98.html
+http://www.usembassy.ro/WF/200/eur203.htm
+http://www.usembassybanjul.gm/DHRF%20Info%20Sheet.htm
+http://www.usembassyjakarta.org/press_rel/bush-pressconf04.html
+http://www.usembkigali.net/rwanda/investment_climate.htm
+http://www.user-groups.net/showker/fire.html
+http://www.user.dccnet.com/s.brown/documents/1863-will-Donaldson-barbara.htm
+http://www.user.dccnet.com/welcomewoods/Friends_of_Caren/
+http://www.user.shentel.net/rbowman/files/studskil.htm
+http://www.useractive.com/oreilly/certificate/details.php3?partnerid=18
+http://www.userfocus.co.uk/articles/drc_report.html
+http://www.userfocus.co.uk/articles/focuspocus.html
+http://www.userfriendly.org/bts/
+http://www.userfriendly.org/community/iambe/daily.html
+http://www.users.bigpond.com/rjeb/tanks.html
+http://www.users.bigpond.net.au/asl-victoria/
+http://www.users.cloud9.net/~bradmcc/WhatIsSGML.html
+http://www.users.cloud9.net/~bradmcc/computerAphorisms.html
+http://www.users.globalnet.co.uk/~aair/latex.htm
+http://www.users.globalnet.co.uk/~aair/mites_BMJ.htm
+http://www.users.globalnet.co.uk/~qtls/calcite.htm
+http://www.users.globalnet.co.uk/~rxv/sebpc/pattcat.htm
+http://www.users.globalnet.co.uk/~semp/lordgrey.htm
+http://www.users.globalnet.co.uk/~wausie/Sea.html
+http://www.users.ms11.net/~habitat/bat/bathome.htm
+http://www.users.muohio.edu/kelleycs/mediablog.html
+http://www.users.nac.net/challoran/apbio.htm
+http://www.users.on.net/~arachne/deepeco.html
+http://www.users.onaustralia.com.au/drdavid/cat.htm
+http://www.users.totalise.co.uk/~leiafee/Blakes7/fiction/defector.htm
+http://www.useu.be/Categories/Tax%20and%20Finances/Jan2904SobelFSAP.html
+http://www.useu.be/TransAtlantic/May0703PowellUSEurope.html
+http://www.usfa.fema.gov/about/administrator/04-after-a-serious-fire.shtm
+http://www.usfa.fema.gov/about/administrator/04-everyone-goes-home.shtm
+http://www.usfca.edu/150years/vignette/vign8.html
+http://www.usfca.edu/pj/articles/Ultima.htm
+http://www.usfieldhockey.com/programs/coach/articles/jagday_receiving.htm
+http://www.usfigureskating.org/Shell.asp?sid=20627
+http://www.usforacle.com/vnews/display.v/ART/2004/10/15/416fc1b423885
+http://www.usfreeads.com/100418-cls.html
+http://www.usfreeads.com/311090-cls.html
+http://www.usfreeads.com/62515-cls.html
+http://www.usfreeads.com/94032-cls.html
+http://www.usga.org/news/2005/February/carey.html
+http://www.usga.org/turf/articles/management/irrigation/less_water.html
+http://www.usga.org/turf/green_section_record/2004/july_aug/turf_twisters.html
+http://www.usga.org/turf/green_section_record/2004/may_june/turf_twisters.html
+http://www.usgbc.org/News/usgbcinthenews_details.asp?ID=1431&CMSPageID=159
+http://www.usgbc.org/News/usgbcinthenews_details.asp?ID=1435&CMSPageID=159
+http://www.usgbc.org/News/usgbcinthenews_details.asp?ID=819
+http://www.usgbc.org/News/usgbcinthenews_details.asp?ID=819&CMSPageID=159
+http://www.usgbc.org/News/usgbcinthenews_details.asp?ID=852
+http://www.usgbc.org/chapters/cascadia/newsletter_archives.asp
+http://www.usgcrp.gov/usgcrp/nacc/health/outline.html
+http://www.usgennet.org/usa/ia/county/jasper1/history/metz/school/
+http://www.usgennet.org/usa/topic/colonial/book/chap9_5.html
+http://www.usgennet.org/usgnhome/business/tm.html
+http://www.usgo.org/congress/index.asp
+http://www.usgyms.net/exercise_equipment_midwest.htm
+http://www.ushandball.org/health/steam.html
+http://www.ushartford.com/news-jan-05.html
+http://www.ushistoricalarchive.com/cds/state-sc.html
+http://www.ushistoricalarchive.com/statemaps/nc/
+http://www.ushistory.org/paine/reason/reason34.htm
+http://www.ushistory.org/paine/rights/c2-041.htm
+http://www.ushistory.org/paine/rights/c2-055.htm
+http://www.ushistory.org/valleyforge/served/arnold.html
+http://www.ushistory.org/valleyforge/washington/george2.html
+http://www.ushli.com/abouttheconf05.asp
+http://www.usic.com/jobs/actuary.htm
+http://www.usig.org/tsunami.asp
+http://www.usindo.org/Briefs/2005/Joint%20Statement%20US-Indonesia%202005.htm
+http://www.usingenglish.com/reference/idioms/
+http://www.usingrfid.com/news/read.asp?lc=k15611tx414zw
+http://www.usingz.com/text/intro/
+http://www.usip.org/pubs/peaceworks/state10/conclu10.html
+http://www.usip.org/pubs/specialreports/early/dayton_imp/train_equip.html
+http://www.usip.org/pubs/specialreports/sr75.html
+http://www.usip.org/religionpeace/events.html
+http://www.usip.org/religionpeace/previous.html
+http://www.usip.org/religionpeace/rehr/eastwest.html
+http://www.usj.com.my/bulletin/upload/archive/index.php/t-3185.html
+http://www.uskbtc.com/article.php/181
+http://www.uslaboragainstwar.org/article.php?id=3702
+http://www.usm.maine.edu/~eng/100syllabusf03.htm
+http://www.usm.maine.edu/~maps/columbus/translation.html
+http://www.usm.maine.edu/~maps/exhibit2/sec5.htm
+http://www.usmd.edu/Leadership/BoardOfRegents/Bylaws/SectionVII/VII800.html
+http://www.usmd.edu/Leadership/Chancellor/SpecialDocs/Why_A_System.html
+http://www.usmemorialday.org/backgrnd.html
+http://www.usmint.gov/kids/index.cfm?fileContents=coinNews/cotm/2003/10.cfm
+http://www.usmission.mg/consinfo.html
+http://www.usmleworld.com/terms.asp
+http://www.usmm.net/honolulu.html
+http://www.usmra.com/groupsummary/summary2.asp?country=USA
+http://www.usna.usda.gov/Research/Herbarium/Lagerstroemia/Checklist_V.html
+http://www.usna.usda.gov/Research/Herbarium/Lagerstroemia/Checklist_W.html
+http://www.usnews.com/usnews/biztech/articles/010604/retire_4.htm
+http://www.usnews.com/usnews/culture/articles/030602/2lett.htm
+http://www.usnews.com/usnews/edu/articles/050606/6scholar.htm
+http://www.usnews.com/usnews/health/briefs/other/hb041203b.htm
+http://www.usnews.com/usnews/issue/050228/usnews/28rozelle.peo.htm
+http://www.usnewsclassroom.com/resources/activities/act021021.html
+http://www.usni.org/navalhistory/Articles99/Nhrodgaard.htm
+http://www.usoc.org/11499_18780.htm
+http://www.usoc.org/11506_13666.htm
+http://www.usoc.org/11671_26670.htm
+http://www.usoc.org/27555_12341.htm
+http://www.usoc.org/27555_12353.htm
+http://www.usoc.org/73_23385.htm
+http://www.usoc.org/73_26670.htm
+http://www.usoe.k12.ut.us/ate/newate.htm
+http://www.usoe.k12.ut.us/curr/char_ed/focus.htm
+http://www.usoe.k12.ut.us/curr/science/core/plans/int/rocks.html
+http://www.usoge.gov/pages/advisory_opinions/advop_files/1998/98x4.html
+http://www.usolympicteam.com/11506_29271.htm
+http://www.usopen.com/news/interviews/garcia_fri_flash.html
+http://www.usopen.com/news/interviews/goosen_sat.html
+http://www.usopen.com/news/interviews/mediaday-goosen.html
+http://www.usopen.com/news/interviews/woods_fri_flash.html
+http://www.usoperaweb.com/2001/may/littlewomen_part1.html
+http://www.usoperaweb.com/2002/june/peil.htm
+http://www.uspeacegovernment.org/news/2003_10_24.html
+http://www.uspharmacist.com/oldformat.asp?url=newlook/files/Cons/ACF16C4.cfm&pub_id=8&article_id=393
+http://www.uspharmacist.com/oldformat.asp?url=newlook/files/Cons/ACF2F13.cfm&pub_id=8&article_id=47
+http://www.uspharmacist.com/oldformat.asp?url=newlook/files/Feat/HIPAA.htm&pub_id=8&article_id=912
+http://www.uspharmacist.com/oldformat.asp?url=newlook/files/Phar/may00law.cfm&pub_id=8&article_id=528
+http://www.uspharmacist.com/oldformat.asp?url=newlook/files/Tren/herbal.cfm&pub_id=8&article_id=169
+http://www.uspolicy.be/mobile/europe/13.htm
+http://www.usps.com/mailerscompanion/febmar2001/article2pg3.htm
+http://www.usps.com/mailerscompanion/janfeb2004/mc0204art5.htm
+http://www.usps.com/mailerscompanion/julyaug2004/mc0804art7.htm
+http://www.usps.com/memotomailers/aug2003.htm
+http://www.usps.com/news/2002/press/pr02_058.htm
+http://www.uspto.gov/main/patents.htm
+http://www.uspto.gov/main/trademarks.htm
+http://www.uspto.gov/patft/
+http://www.uspto.gov/web/offices/ac/qs/ope/fees.htm
+http://www.uspto.gov/web/offices/com/sol/notices/staltfeestr.html
+http://www.uspto.gov/web/offices/com/sol/og/2000/week43/pataltr.htm
+http://www.uspto.gov/web/offices/com/sol/og/2003/week52/patrev2.htm
+http://www.uspto.gov/web/offices/com/speeches/openingst121902.htm
+http://www.uspto.gov/web/offices/com/speeches/stratplan2003apr03.htm
+http://www.uspto.gov/web/offices/pac/dapp/sir/co/examhbk/six.htm
+http://www.uspto.gov/web/offices/pac/mpep/
+http://www.uspto.gov/web/offices/pac/mpep/documents/appxr_1_84.htm
+http://www.usrbin.ca/damon/plants.html
+http://www.usregulars.com/gibbons/gibbons_chapter_xii_b.htm
+http://www.usroads.com/journals/aruj/9704/ru970401.htm
+http://www.usrom.com/Countries/iran.htm
+http://www.ussartf.org/blizzards.htm
+http://www.ussartf.org/topo_map_basics.htm
+http://www.ussc.gov/FEDREG/fedr0103b.htm
+http://www.ussc.gov/research.htm
+http://www.ussnicholas.org/wing17.html
+http://www.ussrenshawmysterytarget.com/soviet.html
+http://www.usswashington.com/23may42.htm
+http://www.usta.com/officials/
+http://www.ustrek.org/odyssey/semester2/040401/040401nickdraft.html
+http://www.usu.edu/honors/CoursesS05.htm
+http://www.usuhs.mil/ogc/faq.htm
+http://www.usuireiki.fsnet.co.uk/Japanesearticle.html
+http://www.usunnewyork.usmission.gov/05_119.htm
+http://www.usvetdsp.com/atrocities_iraq.htm
+http://www.usvisanews.com/articles/memo1532.shtml
+http://www.uswa.org/uswa/program/content/436.php
+http://www.uswings.com/military.asp
+http://www.uswitch.com/Energy/help/news/january-2005.asp
+http://www.usyd.edu.au/io/admission/ugform.html
+http://www.usyd.edu.au/su/personnel/ir/awards/acad_staff/section9.html
+http://www.uta.edu/pols/moore/indigent/standards.htm
+http://www.uta.fi/FAST/US1/REF/usgbdiff.html
+http://www.uta.fi/studies/introduction/living_in_tampere/
+http://www.utaaup.com/pub5.htm
+http://www.utahbirds.org/newsletters/2002-3/2003_09.html
+http://www.utahehs.org/index.php?tier=5&id=115
+http://www.utahehs.org/index.php?tier=5&id=90
+http://www.utahredrocks.com/lwh.htm
+http://www.utahstatesman.com/news/2003/02/05/Sports/Aggie.Women.Netters.Seeking.Winning.Record.Take.On.Isu-360715.shtml
+http://www.utas.edu.au/docs/jane_franklin_hall/summerschool.htm
+http://www.utc.edu/Administration/UniversityRelations/u_style.php
+http://www.utdallas.edu/dept/ta/taappcomp.htm
+http://www.utdallas.edu/~allie/stories.htm
+http://www.utdallas.edu/~pujana/oceans/why.html
+http://www.utea.org/
+http://www.uterinefibroids.com/j_99_06.htm
+http://www.utexas.edu/cc/newsletter/jul2000/virus.html
+http://www.utexas.edu/cee/odyssey/course2.shtml
+http://www.utexas.edu/coc/rtf/news-events/archive/04mar1-5.html
+http://www.utexas.edu/cofa/theatre/newworksindex.html
+http://www.utexas.edu/cola/cmes/publications/goto/publications/litintrans/
+http://www.utexas.edu/cola/depts/geography/facilities/goto/facilities/eislab/
+http://www.utexas.edu/cola/depts/lrc/iedocctr/ie-docs/lehmann/reader/Chapter8.html
+http://www.utexas.edu/cons/student_v3/graduation/shewbart.html
+http://www.utexas.edu/courses/classicalarch/readings/scribes.html
+http://www.utexas.edu/education/kinesiology/movesci/PhDprogram.html
+http://www.utexas.edu/eos/pres.html
+http://www.utexas.edu/faculty/council/1999-2000/legislation_99-00.html
+http://www.utexas.edu/faculty/council/2004-2005/sec_rpts/sec102004.html
+http://www.utexas.edu/international/com/bank.html
+http://www.utexas.edu/its/rc/tutorials/stat/spss/spss3/
+http://www.utexas.edu/its/sds/faq/msca_elg.html
+http://www.utexas.edu/law/academics/curriculum/studyabroad/eap.html
+http://www.utexas.edu/lbj/news/spring2005/volunteerism.html
+http://www.utexas.edu/opa/news/2005/06/music15.html
+http://www.utexas.edu/research/cswr/survey/bestpractices/bptrec.htm
+http://www.utexas.edu/spotlight/roundup030521.html
+http://www.utexas.edu/staff/council/minutes/2005_01_20.html
+http://www.utexas.edu/student/cmhc/booklets/assert/assertive.html
+http://www.utexas.edu/student/cmhc/booklets/fighting/fighting.html
+http://www.utexas.edu/student/cmhc/booklets/panic/panic.html
+http://www.utexas.edu/student/cmhc/booklets/sleep/sleep.html
+http://www.utexas.edu/student/housing/staff/view_reports.php
+http://www.utexas.edu/student/registrar/catalogs/gi02-03/app/appc09.html
+http://www.utexas.edu/student/registrar/catalogs/gi03-04/app/appc09.html
+http://www.utexas.edu/student/registrar/catalogs/gi04-05/app/appc09.html
+http://www.utexas.edu/student/registrar/catalogs/grad01-03/ch4/inter/cam.crs.html
+http://www.utexas.edu/student/registrar/catalogs/grad03-05/ch4/inter/cam.crs.html
+http://www.utexas.edu/student/utlc/handouts/1234.html
+http://www.utfa.org/committees/salary/nov272002arb2/
+http://www.uth.tmc.edu/scriptorium/textbook/develop.html
+http://www.utilitarian.org/criticisms.html
+http://www.utilityjobsearch.com/js/se/jobs/electrical.do
+http://www.utlc.org.au/
+http://www.utlm.org/onlinebooks/changech9c.htm
+http://www.utm.edu/research/iep/d/descarte.htm
+http://www.utm.utoronto.ca/~dwhite/222/221.htm
+http://www.utmem.edu/univheal/OC_Immunizations.html
+http://www.utmsi.utexas.edu/people/staff/fuiman/past_graduate_students.htm
+http://www.utne.com/pub/1999_74/
+http://www.utopia-net.org/lee-eng/eileen61.html
+http://www.utopianhell.com/
+http://www.utoronto.ca/govcncl/pap/policies/conacad.html
+http://www.utoronto.ca/hswriting/lit-review.htm
+http://www.utoronto.ca/innis/ProgramHighlights/finearthistory/ah_interview.html
+http://www.utoronto.ca/iwsgs/WSU/wssu.html
+http://www.utoronto.ca/jpolanyi/public_affairs/public_affairs4n.html
+http://www.utoronto.ca/ois/myweb9/Participation.htm
+http://www.utoronto.ca/physical/Leadership/internalOpportunities/internal.html
+http://www.utoronto.ca/tsq/10/tyurina10.shtml
+http://www.utoronto.ca/writing/critrdg.html
+http://www.utpjournals.com/product/ctr/117/117_Grant3.html
+http://www.utsa.edu/cfac/Old%20Site%20summer%2005/CFAC_Staff.html
+http://www.utsa.edu/cosuac/general/faqs.html
+http://www.utsa.edu/oep/plan_ch2.htm
+http://www.utsc.utoronto.ca/~career/events.htm
+http://www.utsha.com/worldview/brief.html
+http://www.utsystem.edu/OGC/IntellectualProperty/admin.htm
+http://www.utsystem.edu/cha/Leadership11-5-02.htm
+http://www.utsystem.edu/news/tuition/FAQ.htm
+http://www.utsystem.edu/ogc/intellectualproperty/2xii.htm
+http://www.utsystem.edu/ogc/intellectualproperty/admin2.htm
+http://www.utsystem.edu/ogc/intellectualproperty/confu.htm
+http://www.utsystem.edu/ogc/intellectualproperty/contract/attb.htm
+http://www.utsystem.edu/ogc/intellectualproperty/contract/jtiplong.htm
+http://www.utsystem.edu/ogc/intellectualproperty/contract/jtowners.htm
+http://www.utsystem.edu/ogc/intellectualproperty/contract/royaltyshare-general.htm
+http://www.utsystem.edu/ogc/intellectualproperty/contract/teclic.htm
+http://www.utsystem.edu/ogc/intellectualproperty/copypol2.htm
+http://www.utsystem.edu/ogc/intellectualproperty/digsigtf.htm
+http://www.utsystem.edu/ogc/intellectualproperty/jstsnout.htm
+http://www.utsystem.edu/ogc/intellectualproperty/l-cntrct.htm
+http://www.utsystem.edu/ogc/intellectualproperty/l-fu.htm
+http://www.utsystem.edu/ogc/intellectualproperty/l-resgen.htm
+http://www.utsystem.edu/ogc/intellectualproperty/teachact.htm
+http://www.uttlesford.gov.uk/news/the+environment/celebrity+chef+launches+christmas+recycling+campaign.htm
+http://www.uttyler.edu/meidenmuller/commtheory/StudentWork/shannonmilner.htm
+http://www.utubc.com/fatigue.htm
+http://www.utulsa.edu/recreation/intramurals/policies.shtml
+http://www.uua.org/
+http://www.uua.org/CONG/woonsocket.html
+http://www.uua.org/ga/ga03/3110.html
+http://www.uua.org/interconnections/qa/vol8-3-qa.html
+http://www.uua.org/news/010319.html
+http://www.uua.org/news/2002/020612christian_century.html
+http://www.uua.org/news/2003/iraq/childrenresources.html
+http://www.uua.org/news/2004/
+http://www.uua.org/programs/forums/index.php?action=vthread&forum=3&topic=154
+http://www.uua.org/re/faithworks/fall04/sj_trauma.html
+http://www.uua.org/re/other/needs_jan00.html
+http://www.uua.org/re/reach/fall00/adult/poisonwood_bible.html
+http://www.uua.org/uuhs/duub/articles/johnhaynesholmes.html
+http://www.uua.org/uuhs/duub/articles/michaelservetus.html
+http://www.uucb.org/sermons/2004103101
+http://www.uugiftstore.com/index.php?cPath=147&language=en
+http://www.uunhf.org/sunday/sermons/bydate/
+http://www.uuottawa.com/pledgecampaign2005index.htm
+http://www.uushenandoah.org/sermons/031005.htm
+http://www.uuworld.org/2004/03/newsuua3.html
+http://www.uvic.ca/adms/website/faq/faq.html
+http://www.uvl.ca/faq.htm
+http://www.uvm.edu/~biology/Classes/101/
+http://www.uvm.edu/~histpres/HPJ/NR/orwell/Orwellhist.html
+http://www.uvm.edu/~pass/perry/oh4roses.html
+http://www.uvm.edu/~provost/accreditation/Documents/Ramaley2-22-98/Academic-Virtues.html
+http://www.uvm.edu/~tstreete/newfable.htm
+http://www.uvmapper.com/help/preferences.html
+http://www.uwde.org/fullmembers.asp
+http://www.uwe.ac.uk/widen/michellereport.htm
+http://www.uwec.edu/counsel/pubs/sweetDreams.htm
+http://www.uwec.edu/philrel/shimbutsudo/ho-wori_toyo-tama.html
+http://www.uwex.edu/ces/nacaa2003/spouses.html
+http://www.uwf.edu/tprewitt/debatenotes1.htm
+http://www.uwgb.edu/dutchs/CosmosNotes/cosmos9.htm
+http://www.uwgb.edu/dutchs/pseudosc/badmodl.htm
+http://www.uwgb.edu/univcomm/campus/univlife.htm
+http://www.uwic.ac.uk/ICRC/issue003/jdahn.htm
+http://www.uwic.ac.uk/Purchasing/aboutus/How%20to%20supply%20to%20us/index.asp
+http://www.uwic.ac.uk/new/courses/health/Speech_Language_Therapy.asp?subsection=undergrad
+http://www.uwinnipeg.ca/current/services/PLAR_WEB/faq.html
+http://www.uwiseismic.com/
+http://www.uwkc.org/ida/english/part_agencies.asp
+http://www.uwlax.edu/faculty/cerbin/ls/PSY%20Research%20Lesson%20Example%20of%20Post-test.htm
+http://www.uwm.edu/People/wash/romFilmjfa.htm
+http://www.uwm.edu/~gjay/Whiteness/Whitenesstalk.html
+http://www.uwmc.uwc.edu/forum/content/2005/5/Opinion/Danabarrybon.htm
+http://www.uwmedicine.org/Facilities/Harborview/ClinicsAndServices/Neuro/StrokeCenter/terms.htm
+http://www.uwnews.org/article.asp?articleID=1873
+http://www.uwo.ca/earth/grad/opportunities.htm
+http://www.uwo.ca/pridelib/firstreadings.htm
+http://www.uwo.ca/researchpark/tenants/camh.htm
+http://www.uwplatt.edu/clume/survey/respo19.htm
+http://www.uwplatt.edu/web/wtc/div/
+http://www.uwrf.edu/dos/staff.php3
+http://www.uwrf.edu/student-voice/041105/abroad.htm
+http://www.uwsa.com/books/uws_7_Leads.html
+http://www.uwsp.edu/business/economicswisconsin/e_lecture/pop_sum.htm
+http://www.uwsp.edu/cnr/cwes/forestree/issues/skiarea.htm
+http://www.uwsp.edu/cnr/wcee/keep/Resources/Publications/BaselineStudy/baseline.htm
+http://www.uwsp.edu/education/Wkirby/ntrprsnl/negot.htm
+http://www.uwsp.edu/education/lkirby/Interpersonal/00Requirements.htm
+http://www.uwsp.edu/psych/apa4b.htm
+http://www.uwsp.edu/wildlife/elk/projup14.htm
+http://www.uww.edu/stdRsces/SART/facts.htm
+http://www.uwwrc.net/web/wetlandsrc/cat/case_studies/case_studies-1035574235306
+http://www.uz.ac.zw/library/lib_resources.htm
+http://www.v-2.org/
+http://www.v-2.org/displayArticle.php?article_num=44
+http://www.v-2.org/displayArticle.php?article_num=531
+http://www.v-methods.com/ji/
+http://www.v6supercharged.com.au/prods.asp
+http://www.va-interactive.com/inbusiness/editorial/bizdev/ibt/pricing_.html
+http://www.va-interactive.com/inbusiness/editorial/finance/ibt/cash_flow.html
+http://www.va-interactive.com/inbusiness/editorial/finance/ibt/ratio_analysis.html
+http://www.va-interactive.com/inbusiness/editorial/finance/intemp/income.html
+http://www.va-interactive.com/inbusiness/editorial/sales/ibt/market_analysis.html
+http://www.va.gov/OCA/testimony/doherty108.htm
+http://www.vab.org/jobs_page.html
+http://www.vac-acc.gc.ca/general/sub.cfm?source=department/reports/scondva_response
+http://www.vacantisw.com/foildesign.htm
+http://www.vacationrentalsdirectory.net/article.php/901721.htm
+http://www.vacationresellers.com/timeshareinfo.html
+http://www.vacations-paris.com/info/history.html
+http://www.vacationtechnician.com/x/ADDO%20ELEPHANTS.htm
+http://www.vacationtechnician.com/x/Behind%20the%20Postcards%20Namaqualand.htm
+http://www.vachss.com/guest_dispatches/take_back.html
+http://www.vadino.com/?q=rose
+http://www.vadino.com/windows/development-tools/setup/autoplay-media-studio.html
+http://www.vaginaverite.com/lookma.html
+http://www.vagrant.com/vagrant/bands/bands.jsp?album_name=Sorry%20About%20Tomorrow
+http://www.vagrant.com/vagrant/bands/bands.jsp?rec_num=10&release_id=46
+http://www.vaguelyspecific.com/archives/cat_places.html
+http://www.vahistorical.org/lva/mapsico.htm
+http://www.vaidya4u.com/m_pop.html
+http://www.vailvalleyinstitute.org/immigration.html
+http://www.vaio.net/sonyvaio547.html
+http://www.valdosta.edu/~iheath/assignments.html
+http://www.valenciatrader.com/
+http://www.valeofglamorgan.gov.uk/Our%20Community/Young%20People/Staying%20Safe.aspx
+http://www.valeofglamorgan.gov.uk/Our%20Council/Legal%20Notices/Legal%20Notices%20-%20Pages/A422%20Aberthin%20Road,%20Cowbridge%20(Part)%20Prohibition%20of%20Waiting%20.aspx
+http://www.valhallatravel.com/spotlight.html
+http://www.valiant.org/history.html
+http://www.valightning.com/
+http://www.valley-entertainment.com/Artists/Bill_Douglas/
+http://www.valley1st.org/Other_Services.htm
+http://www.valleyskeptic.com/tax~1.htm
+http://www.valleywild.org/veracruz.htm
+http://www.valmikiramayan.net/ayodhya/sarga79/ayodhyaitrans79.htm
+http://www.valmikiramayan.net/ayodhya/sarga79/ayodhyaroman79.htm
+http://www.valottery.com/news/press_details.asp
+http://www.valparaiso.com/fsbo/fsbo_terms.html
+http://www.valtioneuvosto.fi/vn/liston/base.lsp?r=90868&k=en&old=93521
+http://www.valtioneuvosto.fi/vn/liston/base.lsp?r=90868&k=en&old=94180
+http://www.valtioneuvosto.fi/vn/liston/print.lsp?r=90868&l=en&page=0
+http://www.valtioneuvosto.fi/vn/liston/text.lsp?r=90868&k=en&old=376
+http://www.valuationinformation.com/searchresults.cfm?fkeyword=Going%20Concern&fsiccode=&faction=&fcourt=&fnaiccode=
+http://www.valueaddedpartners.org/industry_articles.asp
+http://www.valuebasedmanagement.net/methods_bono_six_thinking_hats.html
+http://www.valuejudgment.org/
+http://www.valuemd.com/ftopic29166.html
+http://www.valuemd.com/medicine-156121.html
+http://www.valuescale.com/
+http://www.valuescale.com/digiweigh_scales.htm
+http://www.valuescale.com/kitchenscales.htm
+http://www.valuescale.com/monthlyspecials.htm
+http://www.valuescale.com/secamedicalscales.htm
+http://www.valuescale.com/specials.htm
+http://www.valuesrealization.org/trainers.html
+http://www.valuevacationrentals.com/property/index.cfm?mid=0
+http://www.valuevillage.com/charity/success_stories.php
+http://www.valuevillage.com/whoweare/history.php
+http://www.vamp.org/Gothic/Text/xd-history-valor.html
+http://www.vamp.org/Gothic/clublist.html
+http://www.vanaturally.com/bayandcoast.html
+http://www.vanaturally.com/water.html
+http://www.vanaturally.com/waystohelp.html
+http://www.vancourier.com/issues04/091204/news/091204nn1.html
+http://www.vancouver-chinatown.com/ctbia_dir_b.html
+http://www.vancouver.boardoftrade.com/vbot_page.asp?pageID=1312
+http://www.vancouver.ca.emb-japan.go.jp/consul_speeches/thinking_about_japan_burnaby.htm
+http://www.vancouver.hm/money.html
+http://www.vancouver.wsu.edu/amsrev/theory/palan10-01.html
+http://www.vancouver.wsu.edu/fac/peabody/game-book/Chapter6.html
+http://www.vancouverheritagefoundation.org/faq.html
+http://www.vancouvermassage.ca/articles.php
+http://www.vandelay.com/2004/08/suddenly-hawkish-after-35-years-kerry.html
+http://www.vanderbilt.edu/AEA/mbrfaq.htm
+http://www.vanderbilt.edu/AnS/religious_studies/SBL2002/Malagasy.htm
+http://www.vanderbilt.edu/HRS/policies/univcentralrif.htm
+http://www.vanderbilt.edu/HRS/wellness/ohcimm.htm
+http://www.vanderbilt.edu/cft/resources/newsletters/vol3-1/rakestraw.htm
+http://www.vanderbilt.edu/facman/statemnt.htm
+http://www.vanderbilt.edu/fis/Documents/eDog/eDog_reports_descr.htm
+http://www.vanderbilt.edu/rpw_center/lf04h.htm
+http://www.vanderbilt.edu/~postjf/comjb.htm
+http://www.vanderbilt.edu/~postjf/fech4int.htm
+http://www.vanderwal.net/random/category.php?cat=149
+http://www.vandycks.com/reallivegardenrules.phtml
+http://www.vandyke.com/customers/success/gma.html
+http://www.vangoghgallery.com/misc/archives/sermon.htm
+http://www.vangoghgallery.com/misc/sermon.htm
+http://www.vanguard.com/bogle_site/sp20030312c.html
+http://www.vanguard.edu/exss/index.cfm?doc_id=1748
+http://www.vanguardnews.com/school/stories2004/041314duty.htm
+http://www.vanguardnewsnetwork.com/books13.htm
+http://www.vanguardngr.com/articles/2002/business/june05/13062005/b113062005.html
+http://www.vanguardngr.com/articles/2002/features/technology/tec822062005.html
+http://www.vanityfair.com/commentary/content/articles/050530roco02
+http://www.vanlines.com/storage_guide/contract_costs.html
+http://www.vanlines.com/storage_guide/removals.html
+http://www.vanuatu.usp.ac.fj/paclawmat/Kiribati_cases/A-M/Mataroa_v_Republic.html
+http://www.vanuatutourism.com/vanuatu/export/sites/VTO/en/newsletter/NewsLetter_Apr_2005_015.html
+http://www.varbusiness.com/article/showArticle.jhtml?articleId=18830400
+http://www.varbusiness.com/sections/governmentvar/govt.asp?ArticleID=42884
+http://www.varbusiness.com/sections/news/breakingnews.jhtml?articleId=18815128
+http://www.varchive.org/obs/480507.htm
+http://www.vard.org/jour/00/37/4/wilson.htm
+http://www.vard.org/jour/00/37/6/gsted376.htm
+http://www.vard.org/jour/01/38/5/wibow385.htm
+http://www.vard.org/jour/01/38/6/davis386.htm
+http://www.vard.org/jour/98/35/4/TERI.htm
+http://www.vard.org/new/tip39-6.htm
+http://www.vardaman.com/frid/fridrep121704.php
+http://www.variant.randomstate.org/7texts/Robin_Ramsay.html
+http://www.variety.com/VE1117927015.html
+http://www.variety.com/article/VR1117912449?categoryid=13&cs=1
+http://www.variety.com/article/VR1117916815
+http://www.variety.com/index.asp?layout=cannes2004&content=preview&articleid=VR1117904416
+http://www.variety.com/index.asp?layout=filmfest2002&nav=guide&content=article&articleID=VR1117871743
+http://www.variety.com/index.asp?layout=tunein2004&content=jump&jump=article&head=midseason&articleID=VR1117916201
+http://www.variety.com/review/VE1117927015?categoryid=31
+http://www.varsity.co.uk/mambo/index.php?option=com_content&task=view&id=7796&Itemid=72
+http://www.vascularweb.org/_CONTRIBUTION_PAGES/Patient_Information/NorthPoint/Thrombolytic_Therapy.html
+http://www.vaselineglass.org/
+http://www.vasta.org/newsletter/01/winter06.html
+http://www.vatican.va/archive/catechism/p3s1c1a3.htm
+http://www.vatican.va/archive/catechism/p3s2c2a6.htm
+http://www.vatican.va/archive/ccc_css/archive/catechism/p3s1c1a3.htm
+http://www.vatican.va/archive/ccc_css/archive/catechism/p3s2c2a5.htm
+http://www.vatican.va/archive/ccc_css/archive/catechism/p3s2c2a6.htm
+http://www.vatican.va/holy_father/john_paul_ii/audiences/alpha/data/aud19850605en.html
+http://www.vatican.va/news_services/liturgy/saints/ns_lit_doc_20030427_alberione_en.html
+http://www.vatican.va/roman_curia/congregations/ccdds/documents/rc_con_ccdds_doc_20020513_vers-direttorio_en.html
+http://www.vault.com/career/Vault_Career_Guide_to_Marketing___Brand_Management.html
+http://www.vault.com/messages/Capgemini/Capgemini1340747.html
+http://www.vault.com/nr/newsmain.jsp?nr_page=3&ch_id=401&article_id=1253263&cat_id=1521
+http://www.vault.com/nr/newsmain.jsp?nr_page=3&ch_id=409&article_id=18609&cat_id=1424
+http://www.vault.com/static/newsletters/html/2_11289.html
+http://www.vavatch.co.uk/books/banks/cultnote.htm
+http://www.vba.org/jun99.htm
+http://www.vba.va.gov/ro/west/albuq/docs/Geninfo.htm
+http://www.vbaccelerator.com/codelib/comctl/imglist.htm
+http://www.vbaccelerator.com/codelib/odcbolst/article.htm
+http://www.vbaccelerator.com/codelib/sgrid/sgrid.htm
+http://www.vbforums.com/showthread.php?t=322983
+http://www.vbschools.com/policies/5-36_1r.html
+http://www.vbthunder.com/
+http://www.vbulletin.com/forum/archive/index.php/t-71982.html
+http://www.vc.ehu.es/campus/centros/farmacia/deptos-f/depqf/DYNAMICS.html
+http://www.vca.unimelb.edu.au/admin/info/booking/faqs.html
+http://www.vca.unimelb.edu.au/production/staff.html
+http://www.vcc.ca/aboutus/contact.cfm
+http://www.vcccd.net/newsandevents.nsf/0/1E8528DC528CAF5088256FF9000817F6?OpenDocument&local
+http://www.vcds.forces.gc.ca/dgsp/pubs/rep-pub/dda/cosstrat/isrm/doce_e.asp
+http://www.vceart.com/explore/ideas/page.2.html
+http://www.vcinstitute.org/materials/deathtraps.html
+http://www.vcn.bc.ca/citizens-handbook/give_volunteer.html
+http://www.vcrlter.virginia.edu/data/submission.html
+http://www.vcu.edu/engweb/transcendentalism/authors/emerson/essays/politics.html
+http://www.vcu.edu/engweb/transcendentalism/ideas/club.html
+http://www.vdare.com/francis/bush_amnesty.htm
+http://www.vdare.com/francis/culture_of_poverty.htm
+http://www.vdare.com/guzzardi/propaganda.htm
+http://www.vdare.com/misc/rushton_iq.htm
+http://www.vdare.com/pb/invisible_economy.htm
+http://www.vdare.com/sailer/041121_ca.htm
+http://www.vdem.state.va.us/jobs/
+http://www.vdem.state.va.us/jobs/index.cfm
+http://www.veaweteach.org/resources_training_detail.asp?ContentID=498
+http://www.veazeys.com/archives/000018.html
+http://www.vec.virginia.gov/vecportal/field/field_offices.cfm
+http://www.vecteurotrain.org/program_evry2004.asp
+http://www.veer.com/help/license.aspx?eula=CYP
+http://www.veeru.reading.ac.uk/organic/proc/vanP.htm
+http://www.vefuk.com/
+http://www.vegan.org.nz/nuts.php
+http://www.vegetablegardening.us/home-vegetable-gardening-12-best-varieties-of-the-garden-vegetables.html
+http://www.vegetarian-nutrition.info/vn/essential_fatty_acids.htm
+http://www.vegetariannutrition.net/vn_articles/essential_fatty_acids.htm
+http://www.vegetariantimes.com/document_display.cfm?document_id=44
+http://www.vegetariantimes.com/print_doc.cfm?doc_id=44
+http://www.veggies.org.uk/news/bullet01.htm
+http://www.vegparadise.com/highestperch45.html
+http://www.vegsoc.org.au/forum_messages.asp?Thread_ID=1116&Topic_ID=8
+http://www.vegsoc.org/info/goingveg.html
+http://www.vegsoc.org/theguild/fandd-england-nw.html
+http://www.vehicle-wiring-products.co.uk/VWPweb2000/homepage/home.html
+http://www.velocityglobal.com/faq.html
+http://www.velociworld.com/
+http://www.velogirls.com/links.html
+http://www.velonews.com/news/fea/7887.0.html
+http://www.velonews.com/news/fea/7989.0.html
+http://www.velonews.com/train/articles/7347.0.html
+http://www.velonews.com/train/articles/7545.0.html
+http://www.veluxblindsdirect.co.uk/blinds-shades/window-treatment-ideas.htm
+http://www.velvetlist.com/profiles.php3
+http://www.venable.com/publication.cfm?publication_type_ID=2&publication_ID=463
+http://www.venable.com/publication.cfm?publication_type_ID=2&publication_ID=872
+http://www.venables.co.uk/n0307portal.htm
+http://www.vendeeglobe.org/uk/magazine/1481.html
+http://www.vendeeglobe.org/uk/magazine/1975.html
+http://www.vendian.org/envelope/dir0/young.html
+http://www.venerableproperties.com/mpv-oregonian-june04.htm
+http://www.venezuelanalysis.com/articles.php?artno=1221
+http://www.venezuelanalysis.com/articles.php?artno=1403
+http://www.venezuelanalysis.com/news.php?newsno=1439
+http://www.venice.coe.int/docs/2002/CDL(2002)111-e.asp
+http://www.venice.coe.int/docs/2002/CDL-AD(2002)009-e.asp
+http://www.venice.coe.int/docs/2002/CDL-AD(2002)030-e.asp
+http://www.venice.coe.int/docs/2003/CDL(2003)029-e.asp
+http://www.venice.coe.int/docs/2003/CDL-AD(2003)009-e.asp
+http://www.venomousreptiles.org/articles/117
+http://www.ventasreit.com/news/2004/pr20041203.asp
+http://www.venturea.com/leadingtc.htm
+http://www.ventureblog.com/
+http://www.ventureblog.com/articles/indiv/2004/000556.html
+http://www.venturedirect.com/html/lsg_testimonials.htm
+http://www.ventureeconomics.com/evcj/protected/sectorreps/industry/1031550673741.html
+http://www.ventureservepublishing.com/perhaps.htm
+http://www.venue.co.uk/festo/festo_ashton.html
+http://www.venue.co.uk/romance/men_women.html
+http://www.venue.co.uk/romance/women_men.html
+http://www.venusproject.com/books_authors/chalmers_johnson.html
+http://www.venuszine.com/stories/arts_featured_artist/1155
+http://www.verari.com/salesTerms.asp
+http://www.veratexinc.com/The-Veratex-Story.htm
+http://www.verifiedsoftware.com/goodturns/
+http://www.verifiedvoting.org/drefaq.asp
+http://www.verisign.co.uk/products-services/security-services/managed-security-services/vulnerability-protection/
+http://www.verisign.com/products-services/security-services/managed-security-services/vulnerability-protection/
+http://www.verisign.com/verisign-inc/news-and-events/news-archive/us-news-2001/page_200312171648589.html
+http://www.verisign.com/verisign-inc/news-and-events/news-archive/us-news-2003/page_200312181053403.html
+http://www.vermeer.com/vcom/TrenchlessEquipment/Index.jsp
+http://www.vermeerscamera.co.uk/review1.htm
+http://www.vermeersriddlerevealed.com/the_little_street.shtml
+http://www.vermicon.com/public.php
+http://www.verminary.com/rebellion/species.html
+http://www.verminary.com/rebellion/species_print.html
+http://www.vermontgreens.org/spoil.html
+http://www.vermontguardian.com/global/global.shtml
+http://www.vermontsoap.com/manual.shtml
+http://www.vermontstylemagazine.com/magazine/special/December/2004/9/Vermont+Kitchen+Supply/
+http://www.vermontstylemagazine.com/magazine/special/October/2004/8/Vermont+Kitchen+Supply/
+http://www.verostko.com/archive/writings/epigen-art-revisited.html
+http://www.versabet.com/links.html
+http://www.versiontracker.com/dyn/moreinfo/macosx/16382&page=3
+http://www.versiontracker.com/dyn/moreinfo/macosx/22072&mode=feedback
+http://www.versiontracker.com/dyn/moreinfo/macosx/22072&mode=feedback&vid=All
+http://www.versiontracker.com/dyn/moreinfo/macosx/24928&mode=feedback&vid=All
+http://www.verticalresponse.com/about/bios.html
+http://www.vertigoalley.com/praise/
+http://www.verveonline.com/27/life/ny/ny.shtml
+http://www.vestavia.k12.al.us/lp/old/curriculum%20maps/K%20Social%20Studies.htm
+http://www.vesteglass.com/
+http://www.vet.cam.ac.uk/hospital/staffcvs.html
+http://www.vet.ksu.edu/index/hotdogs.htm
+http://www.veteransforpeace.org/WardReillyStory.htm
+http://www.vetinfo.com/cmove.html
+http://www.vetinfo.com/dblood.html
+http://www.vetinfo.com/dinfdis.html
+http://www.vetinfo4dogs.com/dbehave.html
+http://www.vetinfo4dogs.com/dfemale.html
+http://www.vetinfo4dogs.com/dinfdis.html
+http://www.vetinfo4dogs.com/dogrepro.html
+http://www.vetmed.iastate.edu/animals/petloss/memorials.html
+http://www.vetmed.ucdavis.edu/Animals_in_Society/aboutthecenter.htm
+http://www.vetmed.ufl.edu/clubs/scasv/page4.html
+http://www.vetscite.org/publish/articles/000039/article.html
+http://www.vexen.co.uk/books/james_varieties.html
+http://www.vexen.co.uk/human/culture.html
+http://www.vexen.co.uk/religion/rr.html
+http://www.vgg.com/proveuswrong/wrong26.html
+http://www.vgib.com/faq.html
+http://www.vgt2004.org/a-detnews/candidate-detail.go?id=1330235
+http://www.vgt2004.org/a-heraldtribune-public/candidate-detail.go?id=1283966
+http://www.vgt2004.org/a-rgj2004/candidate-detail.go?id=1212627
+http://www.vh.org/adult/patient/anesthesia/chronicpain/
+http://www.vh.org/adult/patient/cancercenter/wordlisttests/
+http://www.vh.org/adult/patient/dermatology/faq/skinandarthritis.html
+http://www.vh.org/adult/patient/dietary/prose/cholesterol.html
+http://www.vh.org/adult/patient/internalmedicine/aba30/2000/scopes.html
+http://www.vh.org/adult/patient/internalmedicine/irritablebowelsyndrome/chap2.html
+http://www.vh.org/adult/patient/neurology/stroke/
+http://www.vh.org/adult/patient/ophthalmology/faq/eyedonor.html
+http://www.vh.org/adult/patient/otolaryngology/prose/hearing.html
+http://www.vh.org/adult/patient/psychiatry/faq/fearofflying.html
+http://www.vh.org/adult/patient/surgery/faq/hairtransplant.html
+http://www.vh.org/adult/provider/internalmedicine/BedsideLogic/ch1.html
+http://www.vh.org/pediatric/patient/pediatrics/cqqa/chronicabpain.html
+http://www.vh.org/pediatric/patient/pediatrics/cqqa/infantsafetytips.html
+http://www.vh.org/pediatric/patient/pediatrics/cqqa/interactingwithnewborn.html
+http://www.vh.org/pediatric/patient/pediatrics/cqqa/psychosis.html
+http://www.vh.org/pediatric/patient/pediatrics/cqqa/stitches.html
+http://www.vh.org/welcome/newsletter/2001/
+http://www.vh1.com/artists/az/ashcroft_richard/artist.jhtml
+http://www.vh1.com/artists/az/jackson_michael/bio.jhtml
+http://www.vh1.com/artists/az/wilson_jackie/bio.jhtml
+http://www.vh1.com/artists/news/1495046/12172004/cam_ron.jhtml
+http://www.vheadline.com/readnews.asp?id=6250
+http://www.vhi.ie/hfiles/hf-025.jsp
+http://www.vhi.ie/hfiles/hf-144.jsp
+http://www.viaarena.com/?PageID=271
+http://www.viacorp.com/pointers.html
+http://www.vianetworks.co.uk/news/2004-01-20.asp
+http://www.vianetworks.net/t_and_c.aspx
+http://www.viarail.ca/corporate/en_bkgdr_20001215_newtrains_doc1.html
+http://www.viarail.ca/corporate/en_entr_viar_allo_19990618.html
+http://www.viaventure.com/Itinerary_Discover_Guatemala.htm
+http://www.vibertfamily.com/captn-a-bibber.htm
+http://www.vic-info.org/InternationalOrganizations/IO-OIC.htm
+http://www.vic-link.co.nz/Occasional%20Papers/abstracts_index.htm
+http://www.vicepresidents.com/new_page_4.htm
+http://www.vickirene.net/sigssg047.htm
+http://www.vicks.com/sleep_better/7_sleeping_habits.shtml
+http://www.vicster.net/blog/archive/2004_09_01_archive.html
+http://www.victims.org.uk/
+http://www.victor-victrola.com/RARITY.htm
+http://www.victorhanson.com/articles/Private%20Papers/Question%20Log/April2005.html
+http://www.victorhanson.com/articles/hanson031105.html
+http://www.victorhanson.com/articles/hanson042305.html
+http://www.victorhanson.com/articles/hanson071604.htm
+http://www.victoria-adventure.org/more_than_links/walter_blue_beauty.html
+http://www.victoria-adventure.org/water_gardening/green_water_blues/page1.html
+http://www.victoria-climbie-inquiry.org.uk/finreport/2brent_analysis.htm
+http://www.victoria-climbie-inquiry.org.uk/finreport/2enfield_analysis.htm
+http://www.victoriachamber.ca/advocacy_tc.php?pid=97
+http://www.victorianmarketplace.com/lights.html
+http://www.victorianstation.com/timelinefull.htm
+http://www.victorianvid.com/app.html
+http://www.victorianweb.org/art/crisis/crisis2g.html
+http://www.victorianweb.org/authors/dickens/ge/loyalty.html
+http://www.victorianweb.org/authors/dickens/pva/pva250.html
+http://www.victorianweb.org/authors/mb/rouge.html
+http://www.victorianweb.org/history/crimea/chargelb.html
+http://www.victorianweb.org/history/letters/harker.html
+http://www.victorianweb.org/history/poorlaw/eligible.html
+http://www.victorianweb.org/painting/whh/whhpoetry.html
+http://www.victorious.org/unprayer.htm
+http://www.victorshepherd.on.ca/Wesley/The%20Duty%20of%20Constant%20Communion.htm
+http://www.victorymotorsports.com/sales_policy.htm
+http://www.victorzammit.com/articles/terrorism.html
+http://www.victorzammit.com/book/chapter07.html
+http://www.video-conference-center.co.uk/
+http://www.video-direct.com/panasonic/lcdtv/compare.html
+http://www.videogamecritic.net/2600hl.htm
+http://www.videoguys.com/sima.htm
+http://www.videohelp.com/forum/archive/t252082.html
+http://www.videovista.net/articles/jupitermoon.html
+http://www.vienna.cc/networld/money_budget/independent_parental_consent.htm
+http://www.vienna.cc/networld/report_staying_independent.htm
+http://www.vietnam-war.info/battles/tet_offensive.php
+http://www.vietnam.ttu.edu/vietnamcenter/events/1996_Symposium/96papers/powmia.htm
+http://www.vietnamairlines.co.kr/english/tourinfo/tour06.asp
+http://www.vietscape.com/guestbook/guestbook_save/guestbook_091997.html
+http://www.vieux.montreal.qc.ca/inventaire/fiches/eng/stpaul_o_105.htm
+http://www.viewaskew.com/press/nyo.html
+http://www.viewlondon.co.uk/user_pubbar_review.asp?Venueid=4818
+http://www.viewnews.com/2002/VIEW-Feb-06-Wed-2002/East/17972690.html
+http://www.viewpoint.soton.ac.uk/Arts/sjs/
+http://www.viewswire.com/index.asp?layout=display_article&doc_id=198324619
+http://www.viewtier.com/products/parabuild.htm
+http://www.viewzone.com/oklahoma.southend.html
+http://www.vifm.org/identification_gov.html
+http://www.vifm.org/identification_gov.phtml
+http://www.vifprogram.com/learn/us/faq.html
+http://www.vignette.com/vignettevillage/us/speakers/1,10906,7,00.html
+http://www.vigyanprasar.com/comcom/develop64.htm
+http://www.viha.ca/jobs/maint_wkr4_10945na.htm
+http://www.viking-z.org/
+http://www.vikingrange.com/about/terms_of_use.html
+http://www.village.bayside.wi.us/Agendas%20&%20Minutes/Committee%20of%20the%20Whole/2001COW/1220COW_1.htm
+http://www.villagecoffee.com/fair-trade-pr.html
+http://www.villagecycle.com/bikes.asp
+http://www.villageforchildren.org/programs/placement.html
+http://www.villagehampden.co.uk/
+http://www.villagehatshop.com/vhs_designed_caps_visors.html
+http://www.villagenews.com/
+http://www.villagesewing.com/classes/creat%20class.htm
+http://www.villagesweetshop.com/cgi-bin/trolleyed_public.cgi?action=show_terms
+http://www.villagevignettes.com/faq.jsp
+http://www.villagevoice.com/blogs/bushbeat/archive/000743.php
+http://www.villagevoice.com/film/0414,maddin,52414,20.html
+http://www.villagevoice.com/film/0502,hope,59946,20.html
+http://www.villagevoice.com/issues/0414/maddin.php
+http://www.villainouscompany.com/vcblog/
+http://www.villamontalvo.org/eventsview.asp?EventCat=4&p=1
+http://www.ville-de-santenay.fr/anglais/ville/lesrues.htm
+http://www.villr.com/master.htm
+http://www.vindicatingthefounders.com/library/index.asp?document=78
+http://www.vineyardnw.org/planting/planting_a.html
+http://www.vinland.org/heathen/mt/wildhunt.html
+http://www.vinnies.org.au/youth/index.cfm?state=wa&section=progs
+http://www.vinnytsofboston.com/a_newsdetail.asp?ID=209&RetVal=a_news
+http://www.vintage-technology.info/Pages/Companies/Histfranco.htm
+http://www.vintagepens.com/FAQhistory/fine_firm.shtml
+http://www.vintagetub.com/asp/contact_us.asp
+http://www.vinyl-replacement-windows.com/vinyl-replacement-windows-quote-canada.html
+http://www.vinylbydesign.com/site/view.asp?TRACKID=&DID=241&CID=213
+http://www.vinylinfo.org/environment/success_stories.html
+http://www.vinylvulture.co.uk/pages/mullerb.htm
+http://www.viokef.com/docs/cafe.htm
+http://www.violetnet.org/mary/legalaid.htm
+http://www.violoncello.com/contact/commission.htm
+http://www.vioxxcentral.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=11
+http://www.vipassana.com/meditation/khema/allofus/dukkha_for_knowledge.php
+http://www.vipgrafx.com/hippy/archives/may_98.txt
+http://www.viralmoneymachine.com/
+http://www.virginblue.com.au/helpInfo/sponsorship/index.php
+http://www.virginblue.com.au/helpInfo/sponsorship/index.php?section=Online%20Application%20Form
+http://www.virginia.edu/insideuva/2000/03/handy.html
+http://www.virginia.edu/insideuva/2005/09/athlete.html
+http://www.virginia.edu/insideuva/athlete.html
+http://www.virginia.edu/president/spch/01/spch_alumnletterfall01.html
+http://www.virginia.edu/president/spch/98/spch_educ&commongood.html
+http://www.virginia.edu/provost/docs_policies/appointments.html
+http://www.virginia.edu/provost/docs_policies/genfac.html
+http://www.virginia.edu/riskmanagement/faq.html
+http://www.virginia.edu/uvadiversity/gratzletter.html
+http://www.virginiaapples.org/pick-your-own/amherst.html
+http://www.virginiaapples.org/pick-your-own/frederick.html
+http://www.virginiaapples.org/pick-your-own/nelson.html
+http://www.virginiahey.com/archives/my_life_in_taxis/index.php
+http://www.virginiaplaces.org/nativeamerican/paleoindians.html
+http://www.virginmegastores.co.uk/pws/Privacy.vms
+http://www.viridianrepository.com/aroma/
+http://www.virtual-boy.org/textonlyarticles.htm
+http://www.virtual-strategy.com/article/articleview/710/1/2/
+http://www.virtual-u.org/conferenceatmit.asp
+http://www.virtual-u.org/training/trainingwith.asp
+http://www.virtualbangladesh.com/history/overview.html
+http://www.virtualexplorer.com.au/2002/8/stampfli/paper1.html
+http://www.virtualistes.org/rtmarken.htm
+http://www.virtualjerusalem.com/food/recipes/
+http://www.virtualmuseum.ca/Exhibitions/Instruments/Anglais/cera_c_txt04_en.html
+http://www.virtualmuseum.ca/pm.php?id=story_line&lg=English&fl=&ex=00000168&sl=2783&pos=1
+http://www.virtualpet.com/vp/farm/pmonster/seizures/pmnews1.htm
+http://www.virtualrecordings.com/DMCAruling.htm
+http://www.virtualsalt.com/crebook1.htm
+http://www.virtualsalt.com/crebook5.htm
+http://www.virtualsalt.com/pp/ppch6.htm
+http://www.virtualsalt.com/think/introct.htm
+http://www.virtualsalt.com/wcsad.htm
+http://www.virtualseeds.com/bonsai-main.html
+http://www.virtualtea.com/vt/tales.html
+http://www.virtualtourist.com/m/361b/1cbfbb/4/
+http://www.virtualtourist.com/m/4b7c5/4f8/
+http://www.virtualtourist.com/m/tt/22b3e/
+http://www.virtualtourist.com/travel/Africa/South_Africa/Province_of_the_Western_Cape/Cape_Town-2225504/Packing_Lists-Cape_Town-BR-1.html
+http://www.virtualtourist.com/travel/Asia/China/Beijing_Shi/Beijing-1024960/Things_To_Do-Beijing-Great_Wall-BR-4.html
+http://www.virtualtourist.com/travel/Australia_and_Oceania/American_Samoa/Nightlife-American_Samoa-BR-1.html
+http://www.virtualtourist.com/travel/Europe/United_Kingdom/Scotland/General_Tips-Scotland-BR-1.html
+http://www.virtualtourist.com/travel/North_America/United_States_of_America/TravelGuide-United_States_of_America.html
+http://www.virtualtourist.com/travel/South_America/TravelGuide-South_America.html
+http://www.virtualtourist.com/vt/430de/7/7c3f/
+http://www.virtualtourist.com/vt/4c4af/6/eebe/
+http://www.virtualtourist.com/vt/4f8/a/
+http://www.virtualtourist.com/vt/b8708/5/a5a/
+http://www.virtualtourist.com/vt/c1f6c/4/1b7a/
+http://www.virtualtourist.com/vt/cd624/2/7e0e/
+http://www.virtualtourist.com/vt/cd624/2/fa22/
+http://www.visalaw.com/greencard.html
+http://www.visalaw.com/news/sfc5262003.htm
+http://www.visar.org/newsletters/archive/04dec.html
+http://www.vishalmangalwadi.com/NewAge/Ch06Ecology.htm
+http://www.vishvarupa.com/Fair-Is-Fair/Ex-Baba.com/Findings/bailey-references.html
+http://www.visi.com/juan/congress/cgi-bin/newmemberbio.cgi?member=SCJR&site=ctces
+http://www.visi.com/~susskins/dispatch/archives/2004_06.html
+http://www.visible-form.com/blog/000071.html
+http://www.visioform.com/uk/ebook-joy.htm
+http://www.vision2form.nl/accenten-uk.html
+http://www.visionarylead.org/spolitic.htm
+http://www.visioncareproducts.com/23/eye_hou.html
+http://www.visioncircle.org/archive/000350.html
+http://www.visionconnection.org/Content/ForProfessionals/PatientManagement/FunctionalVisualImpairment/LightingandtheAgingEye.htm
+http://www.visionmagazine.com/june03_earth_watch.htm
+http://www.visionofbritain.org.uk/Travellers/chap_page.jsp?t_id=Borrow&c_ID=22&cpub_ID=0
+http://www.visionofbritain.org.uk/Travellers/chap_page.jsp?t_id=Borrow&c_ID=6&cpub_ID=0
+http://www.visionpaper.com/speeches_papers/hppsjapan.html
+http://www.visionscience.com/mail/cvnet/1996/0190.html
+http://www.visionwebsites.co.uk/Contents/Text/Index.asp?SiteId=126&SiteExtra=2875842&TopNavId=299&NavSideId=2942
+http://www.visionwire.org/news31.htm
+http://www.visionworksusa.com/studies.asp
+http://www.visionww.org/drswindsor-stroke.htm
+http://www.visit-maine.com/current_category.438/companies_list.html
+http://www.visit.ie/Dublin/heritage/html/old_city/dts_to_ds.html
+http://www.visitasilomar.com/discover/historyarchitecture/warceckeatasilomar.html
+http://www.visitasilomar.com/discover/nature/air/landbirds.html
+http://www.visitationmonastery.org/stlouis/talk_mother's_love.htm
+http://www.visitbardstown.com/tourism/dining/dining.html
+http://www.visitbelgium.com/bxlwkend.htm
+http://www.visitbristol.co.uk/breaks/20020305_90717.shtml
+http://www.visitcambridge.org/traveltrade/eatinganddrinking.php?submit=t&keyword=&cat_id=16&loc_id=&start=101
+http://www.visitcambridge.org/traveltrade/eatinganddrinking.php?submit=t&keyword=&cat_id=16&loc_id=&start=41
+http://www.visitcambridge.org/traveltrade/eatinganddrinking.php?submit=true&cat_id=16
+http://www.visitdublin.com/directory/detail.asp?ID=83
+http://www.visitdunkeld.com/scottish-quotations.htm
+http://www.visitingarts.org.uk/features/v43qg.html
+http://www.visitlagrande.com/attractions.htm
+http://www.visitlex.com/quick/civilwar.html
+http://www.visitmaldives.com.mv/mu/latest/
+http://www.visitmaldives.com.mv/mu/latest/index.php
+http://www.visitmonmouth.com/publicinformation/duke_of_monmouth.htm
+http://www.visitmt.org/tripplanner/transportation/home.htm
+http://www.visitrannoch.com/highland-games.htm
+http://www.visitsantafe.com/
+http://www.visitscottishborders.com/whattoseeanddo/activities/walking/default.htm
+http://www.visitstcroix.com/
+http://www.visitstcroix.com/living-moving-here.html
+http://www.visitwinchester.co.uk/ForGroupsSubMenu_accommodationlist.shtml
+http://www.visn1.med.va.gov/freedom/faq.asp
+http://www.visn1.med.va.gov/news/wellness/winter01/
+http://www.visn1.med.va.gov/wrj/wrjweb1.html
+http://www.vispo.com/PRIME/ispalsitu.htm
+http://www.vistavideo.com/lite/extras.php
+http://www.visualexpert.com/Resources/pedestrian.html
+http://www.visualexpert.com/Resources/roadaccidents.html
+http://www.visualfea.com/preprocessing.htm
+http://www.visualprosthesis.com/javoice.htm
+http://www.visualwriter.com/HumanCond/meaning.htm
+http://www.visx.com/corporate/products_services/wavescan.php
+http://www.vitabasix.com/en/melachron_info.html
+http://www.vitamincfoundation.org/anthrax.htm
+http://www.vitaminexpress.com/news/energy.htm
+http://www.vitamins-nutrition.org/vitamins/manganese.html
+http://www.vitasvibe.com/esacalendar.html
+http://www.vittoe.com/0209a/right0209a.html
+http://www.viva.org.uk/books/ark/ch1.html
+http://www.viva.org.uk/books/ark/ch13.html
+http://www.viva.org.uk/books/goingveggie/ch06.html
+http://www.viva.org.uk/guides/murdershewrote.htm
+http://www.vivacricket.co.za/html/news1511.shtml
+http://www.vivelecanada.ca/article.php/20041112145038281
+http://www.vivelecanada.ca/article.php/20050527072637962
+http://www.viviancarlsonlaw.com/Divorce_Law.htm
+http://www.vividpieces.net/2002/07/index.shtml
+http://www.viviun.com/AD-12122/
+http://www.viviun.com/Real_Estate/Andorra/Single_Family_Homes/
+http://www.viviun.com/Real_Estate/Australia/Single_Family_Homes/
+http://www.vjolt.net/vol5/issue3/v5i3a11-Ravicher.html
+http://www.vjvauction.com/vjvold/pages/history.htm
+http://www.vkimball.com/weblog/2005/01/29.html
+http://www.vladars.net/en/min/meoi.html
+http://www.vlansing.org/040427pb.html
+http://www.vlsistandards.com/recertification/default.asp
+http://www.vm.ee/estonia/kat_174/pea_174/5236.html
+http://www.vmacgill.net/2ndbook.htm
+http://www.vmdb.org/june98.html
+http://www.vmpcares.com/employment.iml
+http://www.vmth.ucdavis.edu/home/beh/UCD_Behavior_research.html
+http://www.vmth.ucdavis.edu/vmth/clientinfo/info/clinlab/ni.html
+http://www.vmth.ucdavis.edu/vmth/clientinfo/info/opthal/orbitdis.html
+http://www.vnaa.org/vnaa/g/?h=html/wound_center_June
+http://www.vnh.org/NHB/NHBHome.html
+http://www.vnunet.com/features/1152861
+http://www.vnunet.com/features/1155902
+http://www.vnunet.com/features/1158213
+http://www.vnunet.com/features/1158809
+http://www.vnunet.com/news/1153739
+http://www.vnunet.com/news/1160555
+http://www.voa.gov.uk/business_rates/RLI/Glossary/glossary.htm
+http://www.voa.gov.uk/news/press04/man_board_meeting_23_09_04.htm
+http://www.voanews.com/english/2005-05-17-voa62.cfm
+http://www.voanews.com/english/NewsAnalysis/2004-12-03-voa69.cfm
+http://www.voanews.com/english/NewsAnalysis/2004-12-20-voa28.cfm
+http://www.voanews.com/specialenglish/2005-04-10-voa1.cfm
+http://www.voanews.com/specialenglish/2005-04-10-voa1.cfm?textmode=1
+http://www.voanews.com/specialenglish/Archive/a-2003-09-06-1-1.cfm
+http://www.vocalist.org.uk/band_agreements.html
+http://www.vocalist.org.uk/copyright_royalties.html
+http://www.vocalist.org/group/vocalist-temporary/message/3104.html
+http://www.vocalist.org/group/vocalist-temporary/message/3290.html
+http://www.voccoquan.com/birdie/balls.htm
+http://www.vodafone.ie/terms/onlinestore/index.jsp
+http://www.voelker.com/service/void_powerbookg4/powerbookg4.php
+http://www.vohuman.org/Article/Zarathushtra%20and%20the%20horse.htm
+http://www.voiceacting.com/demoprod/
+http://www.voiceacting.com/training/2-day/
+http://www.voiceforanimals.net/docs/ww_Minutes_101202.htm
+http://www.voiceofdance.com/Insights/insights.trans.col.cfm?LinkID=31500000000000149
+http://www.voiceofjesus.org/cb2chapter7.htm
+http://www.voices.netuxo.co.uk/corporate.html
+http://www.voicesofcivilrights.org/civil4_new3.html
+http://www.voicesofunreason.com/fiction/whatarefriendsfor
+http://www.voicesofunreason.com/fullThread$8784
+http://www.voicesofunreason.com/fullthread$8784
+http://www.voicesofunreason.com/poetry/sittinginthesuanawithsid
+http://www.voiceteachers.com/nj.html
+http://www.voicetraining.co.uk/about.htm
+http://www.voicexmlreview.org/Mar2001/features/recognition.html
+http://www.voiceyourself.com/article.php?section=3&more=1&id=778
+http://www.voidspace.org.uk/cyberpunk/burning_chrome.shtml
+http://www.voidspace.org.uk/cyberpunk/virtual_light.shtml
+http://www.volcanodiscovery.com/volcano-tours/tours/indonesia/java/krakatoa_yogya.html
+http://www.volconvo.com/forums/archive/index.php/t-900.html
+http://www.volpe.dot.gov/outreach/kslp.html
+http://www.volresource.org.uk/info/source.htm
+http://www.volunteer.org.nz/ltm/
+http://www.volunteers.com/programs/program.php?ProgramID=27
+http://www.volunteersolutions.org/vcri/org/223309.html
+http://www.volvoclub.org.uk/press/releases/hybrid_engines.htm
+http://www.volz.org/PublicWorksDept/general.asp
+http://www.vonage.com/corporate/press_news.php?PR=2003_12_12_4
+http://www.vonmag.com/columnists/isenberg.htm
+http://www.vonnegutweb.com/archives/arc_nice.html
+http://www.vortimac.com/
+http://www.vosperthornycroft.co.uk/newsandevents/newspage.asp
+http://www.votd.com/BURN.htm
+http://www.vote-smart.org/issue_rating_category.php?can_id=CNIP5917&type=category&category=Health%20Issues
+http://www.vote-smart.org/resource_govt101_08.php
+http://www.vote-smart.org/speech_detail.php?speech_id=31793
+http://www.votefraud.org/
+http://www.voterguide.ss.ca.gov/propositions/prop1a-analysis.htm
+http://www.voterinteractive.com/leach_site/voter/laura.html
+http://www.voterpunch.org/category.jsp?chamber=House&issue=H2&year=2004&num=158
+http://www.voterpunch.org/category.jsp?chamber=House&issue=S5&year=2004&num=158
+http://www.voteyeson27.com/quotes.htm
+http://www.votf.org/Survivor_Support/sipe.html
+http://www.voting.ukscientists.com/robank.html
+http://www.vov.org.vn/2005_06_12/english/kinhte1.htm
+http://www.voy.com/14657/
+http://www.voy.com/3703/1/764.html
+http://www.voyage.gc.ca/main/pubs/her_own_way-en.asp
+http://www.vpaa.villanova.edu/CATS/CATSGUIDE.html
+http://www.vpirg.org/energyplan.htm
+http://www.vpl.ca/branches/LibrarySquare/art/prosMusic.html
+http://www.vragent.com/rentals/US/Alabama/Gulf%20Shores/city/Sea%20Breeze
+http://www.vragent.com/rentals/US/Alabama/Gulf%20Shores/city/Sea%20Chase
+http://www.vragent.com/rentals/US/Alabama/Gulf%20Shores/city/Sea%20N%20Sun
+http://www.vragent.com/rentals/US/Alabama/Gulf%20Shores/city/Sea%20Oats
+http://www.vragent.com/rentals/US/Florida/location/Perdido%20Key/Sea%20Spray
+http://www.vragent.com/rentals/US/North%20Carolina/Outer%20Banks/Nags%20Head/Sea%20Pointe
+http://www.vragent.com/rentals/US/Texas/Galveston/city/Sea%20Isle
+http://www.vrbo.com/26479
+http://www.vrd2004.org/speakers/sp_post_conf.cfm
+http://www.vri.dhamma.org/newsletters/nl0302.html
+http://www.vrlab.uci.edu/dzmura/4D/default.htm
+http://www.vrlteam.org/home.asp?vrl=news&adv=281
+http://www.vrm-group.co.uk/terms&cond.htm
+http://www.vroma.org/~bmcmanus/roman_names.html
+http://www.vrp.com/art/1563.asp
+http://www.vrsource.org/
+http://www.vryork.com/pages/yorklinks.html
+http://www.vsarts.org/x1021.xml
+http://www.vsba.org/EducationUpdates/edupdate051203.htm
+http://www.vsi-isbc.ca/eng/relationship/phillips_text/doc17.cfm
+http://www.vsn-intl.com/genstat/gsprod_details.htm
+http://www.vsp.state.va.us/safety.htm
+http://www.vsr.cape.com/~powens/riverhistory.htm
+http://www.vta.org/jobs/VTA_Job_Application_ADA.txt
+http://www.vtb.uscourts.gov/opinions/ByCite.html
+http://www.vtb.uscourts.gov/opinions/published/116br398.html
+http://www.vtb.uscourts.gov/opinions/published/182br699.html
+http://www.vtcoop.com/library/map_rea_1942.html
+http://www.vtdemocrats.org/index.php?id=316
+http://www.vtdinc.com/portfolio.htm
+http://www.vterrain.org/Hawaii/bens_house/
+http://www.vthrc.uq.edu.au:16080/ecovis/DeepSea.html
+http://www.vtknowledgeworks.com/businessbldr/whatyouget/default.asp
+http://www.vtknowledgeworks.com/invent_research/whatyouget/default.asp
+http://www.vtmagazine.vt.edu/fall04/feature2.html
+http://www.vts.rdn.ac.uk/case_studies/cs_courses.html
+http://www.vts.rdn.ac.uk/tutorial/engstud?op=preview&manifestid=130&itemid=13199
+http://www.vts.rdn.ac.uk/tutorial/health?op=preview&manifestid=50&itemid=3694
+http://www.vts.rdn.ac.uk/tutorial/ict?op=preview&manifestid=48&itemid=3235
+http://www.vts.rdn.ac.uk/tutorial/media?op=preview&manifestid=44&itemid=2307
+http://www.vts.rdn.ac.uk/tutorial/numeracy?op=preview&manifestid=134&itemid=14115
+http://www.vts.rdn.ac.uk/tutorial/sport?op=preview&manifestid=46&itemid=2765
+http://www.vts.rdn.ac.uk/tutorial/travel?op=preview&manifestid=45&itemid=2531
+http://www.vttoth.com/probes/probes.asp
+http://www.vueweekly.com/articles/default.aspx?i=455
+http://www.vuletic.com/hume/atheology/12.html
+http://www.vusst.hr/ENCYCLOPAEDIA/humancapital.htm
+http://www.vuw.ac.nz/css/docs/reports/Preelection.html
+http://www.vuw.ac.nz/lals/programmes/english-prof/english-prof.aspx
+http://www.vuw.ac.nz/library/liaison/linguistics/internetresources.shtml
+http://www.vuw.ac.nz/~caplabtb/dprk/window14.htm
+http://www.vvdailypress.com/2001-2003/106017760673720.html
+http://www.vwdesigns.co.uk/ecommence.htm
+http://www.vwrl.com/NewsDocs/100years.htm
+http://www.vxm.com/Speed.quantum.html
+http://www.vxml.org/menu.htm
+http://www.vyfs.org/home/home_events.htm
+http://www.vysa.com/
+http://www.w-m-t.com/autodialer.asp
+http://www.w2knews.com/archive/w2knews-20010723.html
+http://www.w2knews.com/index.cfm?id=132
+http://www.w3.org/2000/xp/Group/4/05/05-minutes.html
+http://www.w3.org/2001/11/13-RDF-Query-Rules/terms
+http://www.w3.org/2001/tag/doc/whenToUseGet.html
+http://www.w3.org/2002/04/15-tag-summary
+http://www.w3.org/2002/p3p-ws/minutes/compact.html
+http://www.w3.org/2002/ws/chor/5/05/17-minutes.html
+http://www.w3.org/2003/05/27-pubrules
+http://www.w3.org/2003/08/allgroupoverview.html
+http://www.w3.org/2003/09/15-tag-summary.html
+http://www.w3.org/2003/09/xmlap/xml-common-proc.html
+http://www.w3.org/2004/02/Process-20040205/groups.html
+http://www.w3.org/2004/06/dbooth-cc/cc
+http://www.w3.org/Consortium/Offices/NewStaff.html
+http://www.w3.org/Consortium/Patent-Policy-20040205/
+http://www.w3.org/DesignIssues/Axioms.html
+http://www.w3.org/DesignIssues/Semantic.html
+http://www.w3.org/Graphics/SVG/
+http://www.w3.org/Guide/pubrules
+http://www.w3.org/MarkUp/2004/xmlevents-for-html-authors
+http://www.w3.org/MarkUp/Guide/
+http://www.w3.org/MarkUp/Guide/Style
+http://www.w3.org/P3P/details.html
+http://www.w3.org/QA/2002/03/01-f2f-minutes
+http://www.w3.org/Style/CSS/Speech/speech.html
+http://www.w3.org/TR/1999/WD-SVG-19990412/changes.html
+http://www.w3.org/TR/2001/WD-xforms-20010608/slice5.html
+http://www.w3.org/TR/2002/NOTE-patent-practice-20020124
+http://www.w3.org/TR/2002/WD-css3-box-20021024/
+http://www.w3.org/TR/2002/WD-qaframe-intro-20020515/
+http://www.w3.org/TR/2003/REC-xptr-framework-20030325/
+http://www.w3.org/TR/2004/WD-SVG12-20041027/progressiverendering.html
+http://www.w3.org/TR/2004/WD-sysenv-20040728/
+http://www.w3.org/TR/2005/WD-CSS21-20050613/generate.html
+http://www.w3.org/TR/2005/WD-CSS21-20050613/visudet.html
+http://www.w3.org/TR/CSS21/syndata.html
+http://www.w3.org/TR/CSS21/visudet.html
+http://www.w3.org/TR/DPF/
+http://www.w3.org/TR/REC-CSS2/generate.html
+http://www.w3.org/TR/REC-html32
+http://www.w3.org/TR/REC-html40/appendix/notes.html
+http://www.w3.org/TR/WAI-WEBCONTENT/
+http://www.w3.org/TR/WCAG20/
+http://www.w3.org/TR/WD-P3P-grammar.html
+http://www.w3.org/TR/WD-layout.html
+http://www.w3.org/TR/xbc-characterization/
+http://www.w3.org/TR/xml-stylesheet/
+http://www.w3.org/Voice/
+http://www.w3.org/WAI/AU/2002/minutes/minutes19sep2002.html
+http://www.w3.org/WAI/EO/2004/07/presentation.html
+http://www.w3.org/WAI/GL/WCAG20/
+http://www.w3.org/WAI/GL/changes.htm
+http://www.w3c.org/
+http://www.w3c.org/Voice/
+http://www.w3j.com/3/s3.smith.html
+http://www.w3schools.com/vbscript/func_isempty.asp
+http://www.w3schools.com/vbscript/func_isnull.asp
+http://www.w3schools.com/vbscript/func_isnumeric.asp
+http://www.w3schools.com/vbscript/func_split.asp
+http://www.w3schools.com/w3c/w3c_intro.asp
+http://www.w3schools.com/xforms/xforms_xpath.asp
+http://www.wa.gov.au/tiac/drivers/drivers-07.html
+http://www.wa.gov.au/tiac/opportunities/opportunities-05.htm
+http://www.wa.regence.com/needCoverage/individual/faq.html
+http://www.wabaptists.org/voto/voto2004-02-23.htm
+http://www.wabio.com/readlist/educ_readlist.htm
+http://www.wacc.org.uk/modules.php?name=News&file=article&sid=1597
+http://www.wacc.org.uk/modules.php?name=News&file=article&sid=574
+http://www.wacc.org.uk/modules.php?name=News&file=print&sid=1597
+http://www.wacc.org.uk/modules.php?name=News&file=print&sid=574
+http://www.wackyadvice.com/
+http://www.wackywillysweb.com/affiliate_program/free_affiliate_program.php
+http://www.wackywillysweb.com/help_faq/payment_methods.php
+http://www.wackywillysweb.com/signup/01_sign_up.php
+http://www.waco-texas.com/city_depts/waterutilities/lakewaco2.htm
+http://www.waco93.com/stlouispost.htm
+http://www.wadsworth.org/labcert/regaffairs/bloodbanks/
+http://www.wadsworth.org/labcert/regaffairs/clinical/title5.htm
+http://www.wagingpeace.org/articles/1997/05/06_menuhin_letter.htm
+http://www.wagingpeace.org/articles/2003/05/16_wells_iraq-water-oil.htm
+http://www.wagingpeace.org/menu/action/urgent-actions/jfk/speech.htm
+http://www.wagingpeace.org/menu/programs/youth-outreach/getting-started/see-for-yourself.htm
+http://www.wagnerandson.com/oj/bosco2.htm
+http://www.wagntrain.com/BodyLanguage.htm
+http://www.waikato.ac.nz/hrm/internal/health&safety/childrenpolicy.shtml
+http://www.waikato.ac.nz/hrm/internal/policy/leavepol.html
+http://www.waikato.ac.nz/library/learning/g_focus.shtml
+http://www.waikato.ac.nz/library/learning/g_using.shtml
+http://www.waimeagazette.com/May98_KahuaRanch.htm
+http://www.wainwrightbank.com/newsite/Article-AssistedLiving02-03.asp
+http://www.wainwrightbank.com/site/m3B3.asp
+http://www.waitakere.govt.nz/AbtCit/cp/emgncyserv2.asp
+http://www.waitakere.govt.nz/CnlSer/wtr/wtrsupply.asp?printable=true
+http://www.waitrose.com/food_drink/wfi/foodissues/children/0006072.asp
+http://www.waitrose.com/lifestyle/fitness/EatingforEnergy.asp
+http://www.wakeweekly.com/archives/2004/Oct28-4.html
+http://www.wal-mart.com/
+http://www.wales-consumer.org.uk/englishsite/press_pubs/publications/waste_not/summary.htm
+http://www.wales-consumer.org.uk/publications/38/summary.htm
+http://www.wales.gov.uk/organicabinet/content/resolutions/2001/february-e.htm
+http://www.wales.gov.uk/organipo/content/pgfa/proc-c10-e.htm
+http://www.wales.gov.uk/organipo/content/pgfa/proc-c15-e.htm
+http://www.wales.gov.uk/subicsu/content/keypubs/dare-estyn-evaluation-rpt290104-e.htm
+http://www.wales.gov.uk/subihealth/content/emmergency/winter/winter_e.html
+http://www.walesindex.co.uk/pages/126_637.html
+http://www.walesindex.co.uk/pages/244_637.html
+http://www.walesindex.co.uk/pages/249_629.html
+http://www.walesindex.co.uk/pages/263_629.html
+http://www.walesindex.co.uk/pages/372_637.html
+http://www.walesindex.co.uk/pages/374_637.html
+http://www.walesindex.co.uk/pages/525_637.html
+http://www.walesindex.co.uk/pages/538_637.html
+http://www.waleswatch.welshnet.co.uk/regulars/barking2000.htm
+http://www.waleswatch.welshnet.co.uk/regulars/quotes2001.htm
+http://www.walk.com.au/pedestriancouncil/Page.asp?PageID=318
+http://www.walk.com.au/pedestriancouncil/Page.asp?PageID=387
+http://www.walk.com.au/pedestriancouncil/Page.asp?PageID=775
+http://www.walkaboutmag.com/8gates.html
+http://www.walkerbooks.co.uk/Walking-Through-the-Jungle-Paperback-0744548934
+http://www.walkerscay.tv/flips_catches.html
+http://www.walkgps.com/Victoria%20Reservoir-Bickley%20Brook%20Walk.htm
+http://www.walking-horse.com/versatility/GensSirCharles-A.html
+http://www.walking.demon.co.uk/discover.htm
+http://www.walkingbarefoot.com/bkWB.htm
+http://www.walkingbarefoot.com/writings/
+http://www.walkingbarefoot.com/writings/GodsWordYourMouth.htm
+http://www.walkingbritain.co.uk/technical/index.shtml
+http://www.walkingconnection.com/Walking_Technique_Form.html
+http://www.walkingenglishman.com/ldp/dalesway.htm
+http://www.walkinginfo.org/de/curb1.cfm?codename=1imp&CM_maingroup=Implementation
+http://www.walkinginfo.org/pedsafe/casestudy.cfm?CS_NUM=30
+http://www.walkinginplace.org/converge/exchange.htm
+http://www.walkinginplace.org/converge/others.htm
+http://www.walkinginplace.org/iprh/
+http://www.walkingonacloud.com/
+http://www.walkingworld.com/home/index.asp?id=44
+http://www.walkradio.com/wbc/testing123.html
+http://www.walktoschool-usa.org/funding/index.cfm
+http://www.walkupright.com/privacy.htm
+http://www.walkworthypress.net/jackson_aManInspired.html
+http://www.wallacehigh.org/defaultnews.asp?cat=0&dismode=article&foobar=114&artid=87
+http://www.wallbuilders.com/resources/search/detail.php?ResourceID=21
+http://www.wallbuilders.com/resources/search/detail.php?ResourceID=22
+http://www.wallbuilders.com/resources/search/issues.php
+http://www.walleyecentral.com/articles/?a=975
+http://www.walleyehunter.com/articles/anderson53.html
+http://www.wallpaper.net.au/links.php
+http://www.wallstreetreporter.com/linked/AustralianCancerTechnology.html
+http://www.wallstreetreporter.com/linked/DemandManagement.html
+http://www.walmart.com/catalog/product.gsp?product_id=1025164&cat=118123&type=4&dept=4104&path=0%3A4104%3A4112%3A118123
+http://www.walmart.com/catalog/product.gsp?product_id=1527899&cat=14563&type=19&dept=3944&path=0%3A3944%3A3977%3A14563
+http://www.walmart.com/catalog/product.gsp?product_id=1527899&cat=178122&type=19&dept=3944&path=0%3A3944%3A178120%3A14563
+http://www.walmart.com/catalog/product.gsp?product_id=1527899&cat=178122&type=19&dept=3944&path=0%3A3944%3A178120%3A178122%3A178122&xsell=2636897
+http://www.walmart.com/catalog/product.gsp?product_id=1527899&cat=178122&type=19&dept=3944&path=0%3A3944%3A178120%3A178122%3A178122&xsell=2636900
+http://www.walmart.com/catalog/product.gsp?product_id=1527899&cat=57909&type=19&dept=3944&path=0%3A3944%3A178120%3A14563
+http://www.walmart.com/catalog/product.gsp?product_id=2597978&cat=20405&type=3&dept=3920&path=0%3A3920%3A61876%3A20405
+http://www.walmart.com/catalog/product.gsp?product_id=2597978&cat=22293&type=3&dept=3920&path=0%3A3920%3A61876%3A22293
+http://www.walmart.com/catalog/product.gsp?product_id=843142&cat=5079&type=4&dept=4104&path=0%3A4104%3A4112%3A5056%3A38519
+http://www.walmart.com/catalog/product.gsp?product_id=860025
+http://www.walmart.com/catalog/product.gsp?product_id=887990&cat=14563&type=19&dept=3944&path=0%3A3944%3A3977%3A14563
+http://www.walmart.com/catalog/product.gsp?product_id=887990&cat=178120&type=19&dept=3944&path=0%3A3944%3A178120%3A178120&xsell=2636900
+http://www.walmart.com/catalog/product.gsp?product_id=887990&cat=178122&type=19&dept=3944&path=0%3A3944%3A178120%3A178122%3A178122&xsell=2636900
+http://www.walsall.gov.uk/newsdocs/NewsArticle.asp?NewsId=2858
+http://www.waltermartin.org/science.html
+http://www.walterzorn.com/tooltip/tooltip_e.htm
+http://www.walthamchamber.com/npc/ways.shtml
+http://www.walthamforestguardian.co.uk/news/newsroundup/display.php?artid=560332&FROMPAPER=bucksfreepress.co.uk
+http://www.wam.umd.edu/~mlhall/MLHall.html
+http://www.wam.umd.edu/~south/2004_06_13_archives.html
+http://www.wanadoo.co.uk/money/bills/utilprices0105.htm?linkfrom=Today&link=fsPersonalFinance1_link4&article=TODpf_no_more_cards_280105
+http://www.wanadoo.co.uk/money/bills/utilprices0105.htm?linkfrom=money__mon_home&link=fsHH_2_2Link2&article=MON_testpage_ed2
+http://www.wandea.org.pl/lumen-gentium.htm
+http://www.wandsworth-pct.nhs.uk/work/ppi/Copyingletters.asp
+http://www.wannabebig.com/article.php?articleid=145
+http://www.wannalearn.com/Crafts_and_Hobbies/Crochet/
+http://www.wannalearn.com/Fine_Arts/Visual_Art/Drawing_and_Sketching/
+http://www.wannalearn.com/Personal_Enrichment/Public_Speaking/
+http://www.wannalearn.com/Personal_Enrichment/Speed_Reading/
+http://www.wanogakkou.com/culture/050000/050400_e.html
+http://www.wanttoknow.info/010914wsj
+http://www.wanttoknow.info/9-11cover-up
+http://www.wanttoknow.info/9-11cover-up10pg
+http://www.wanttoknow.info/911coverup10pg
+http://www.wanttoknow.info/911timeline2pg
+http://www.wanttoknow.info/tsunamistory
+http://www.wap.org/journal/ibookiraq/default.html
+http://www.wapiti.net/news/default2.cfm?articleID=75
+http://www.war-experience.org/collections/civilians/alliedbrit/hall/
+http://www.war-experience.org/history/keyaspects/atlantic/
+http://www.war-experience.org/history/keyaspects/loveletters/
+http://www.war-ofthe-worlds.co.uk/hg.htm
+http://www.war-times.org/
+http://www.waragainsttheweak.com/offSiteArchive/charleston.net/
+http://www.waragainsttheweak.com/offSiteArchive/hnn.us/
+http://www.warandpiece.com/
+http://www.warandpiece.com/blogdirs/001133.html
+http://www.warandpiece.com/blogdirs/001159.html
+http://www.warboards.org/showthread.php?t=7303
+http://www.warchronicle.com/staffsyeo/historiantales_wwii/northafricareg.htm
+http://www.wardell.org/conference/pr/reserve.htm
+http://www.wardenpark.co.uk/extra_curricula/india_bracelets04.htm
+http://www.wardsystems.com/products.asp?p=engine
+http://www.warekay.co.uk/ytb.htm
+http://www.warflag.com/shadow/history/spainmorocco.html
+http://www.warforum.net/
+http://www.warfoto.com/3rdiv.htm
+http://www.wargameacademy.org/FLT/FLT_FAQ.html
+http://www.warhogsaudioshop.com/index.asp?PageAction=Custom&ID=3
+http://www.warincontext.org/
+http://www.warletters.com/book/toc.html
+http://www.warlords.org.nz/article_nancy.htm
+http://www.warmcards.com/ontv.html
+http://www.warmfusion.com/nigerian/mpenza2.htm
+http://www.warmglass.com/Whats_New.htm
+http://www.warmingtrendsstoves.com/prairie_gs.html
+http://www.warmus.com/Steuben_Forever.htm
+http://www.warmus.com/The%20Value%20of%20Glass.htm
+http://www.warmus.com/newpage21.htm
+http://www.warnbro.org.au/blog/
+http://www.warofthering.net/articles/article_8489.php
+http://www.waronchoice.com/message_040609_shirt.asp
+http://www.warpig.com/forums/fields/index/pg_Kentucky.shtml
+http://www.warpig.com/forums/stores/index/pg_Kentucky.shtml
+http://www.warr.org/csny.html
+http://www.warr.org/living.html
+http://www.warrantyweek.com/archive/ww20031215.html
+http://www.warrantyweek.com/archive/ww20040112.html
+http://www.warrenshepell.com/articles/sayinggoodbye.asp
+http://www.warrenshepell.com/wsi/mindbodybalance/art-worklife.asp
+http://www.warrenville.il.us/032003pcmin.htm
+http://www.warrenville.il.us/042403pcmin.htm
+http://www.warrug.com/index.php?idg=3
+http://www.warsailors.com/freefleet/swedenships.html
+http://www.warsailors.com/shetlandbus/boatsf.html
+http://www.warsashcentre.co.uk/
+http://www.warsaw-apartments.net/faq.htm
+http://www.warsawcdc.org/loans.htm
+http://www.warsawuprising.com/witness/atrocities9.htm
+http://www.warsawuprising.com/witness/atrocities_print9.htm
+http://www.warwick.ac.uk/res2003/media/collier.html
+http://www.warwickonline.com/primetime/searchnews.asp?ID=695
+http://www.warwickshire.gov.uk/corporate/committe.nsf/0/76e42f941aa740f180256f86002b3ed5?OpenDocument
+http://www.warwickshire.gov.uk/corporate/committe.nsf/0/94058f27841b469480256b100054fb1c?OpenDocument
+http://www.warwickshire.police.uk/policingwarwickshire/northernarea/northmanagementteam
+http://www.warwickshire.police.uk/policingwarwickshire/southernarea/ManagementTeam_SA
+http://www.warwyn.tas.gov.au/site/page.cfm?u=291
+http://www.wasab.dk/morten/blog/archives/2005/03/
+http://www.wasatchaudubon.org/mapn_trips_26_30.htm
+http://www.washblade.com/2005/1-7/arts/theater/legend.cfm
+http://www.washburn.edu/sas/olt/legal-assist/
+http://www.washdiplomat.com/02-09/a9_02_09.html
+http://www.washear.org/restoration_act.htm
+http://www.washhumane.org/adopt/adoptdog.htm
+http://www.washhumane.org/pettips/YourNewBestFriendII.htm
+http://www.washington-report.org/backissues/0789/8907015.htm
+http://www.washington.edu/admin/hr/benefits/veba.html
+http://www.washington.edu/admin/hr/laborrel/contracts/uaw/contract/a16.html
+http://www.washington.edu/admin/hr/ocpsp/flsa/exempt_crit.html
+http://www.washington.edu/admin/hr/pol.proc/employment.trial.html
+http://www.washington.edu/admin/hr/pol.proc/prostaff/ps.part5.html
+http://www.washington.edu/admin/hr/worklife/lactationsvc.html
+http://www.washington.edu/alumni/mbshipbenefits.html
+http://www.washington.edu/computing/security/servers.html
+http://www.washington.edu/doit/Brochures/Technology/comp.access.html
+http://www.washington.edu/doit/Faculty/Strategies/Academic/Groupwork/
+http://www.washington.edu/faculty/facsenate/councils/fceo/FCEO-minutes/00-01/mn120500.htm
+http://www.washington.edu/faculty/facsenate/handbook/01-03-01.html
+http://www.washington.edu/research/osp/gim/gim18a2.html
+http://www.washington.edu/user/steering/reports/sc0404_report.html
+http://www.washington.org/bluesanddreams/VisualArts.html
+http://www.washingtonfreepress.org/14/Light_Rail.html
+http://www.washingtonfreepress.org/28/First.html
+http://www.washingtonfreepress.org/68/iAlmostKilled.htm
+http://www.washingtonfreepress.org/72/mercuryOnTheMind.htm
+http://www.washingtonhistory.org/wshs/columbia/articles/0103-a2.htm
+http://www.washingtonian.com/chats/jaffe/0310landon.html
+http://www.washingtonian.com/etc/business/great_places_to_work/wish.html
+http://www.washingtonian.com/etc/business/love_money/lm10.html
+http://www.washingtonian.com/health/internetadultery.html
+http://www.washingtonian.com/people/ALS.html
+http://www.washingtonian.com/people/deepthroat.html
+http://www.washingtonian.com/people/jared.html
+http://www.washingtonmonthly.com/archives/individual/2004_05/003829.php
+http://www.washingtonmonthly.com/archives/individual/2004_12/005266.php
+http://www.washingtonmonthly.com/archives/individual/2004_12/005316.php
+http://www.washingtonmonthly.com/archives/individual/2005_03/005900.php
+http://www.washingtonmonthly.com/archives/individual/2005_04/006092.php
+http://www.washingtonmonthly.com/archives/individual/2005_06/006421.php
+http://www.washingtonmonthly.com/archives/individual/2005_06/006447.php
+http://www.washingtonmonthly.com/archives/individual/2005_06/006583.php
+http://www.washingtonmonthly.com/features/2001/0104.mencimer.html
+http://www.washingtonmonthly.com/features/2001/0207.green.html
+http://www.washingtonmonthly.com/features/2001/0209.clark.html
+http://www.washingtonmonthly.com/features/2001/0301.marshall.html
+http://www.washingtonmonthly.com/features/2003/0307.confessore.html
+http://www.washingtonmonthly.com/features/2003/0312.confessore.html
+http://www.washingtonmonthly.com/features/2004/0407.schorr.html
+http://www.washingtonmonthly.com/features/2004/0407.turner.html
+http://www.washingtonmonthly.com/features/2004/0411.hirsh.html
+http://www.washingtonmonthly.com/mt/mt-comments.cgi?entry_id=3010
+http://www.washingtonmonthly.com/mt/mt-comments.cgi?entry_id=5609
+http://www.washingtonparish.org/
+http://www.washingtonpost.com/ac2/wp-dyn/A13603-2004Nov25?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A15004-2004Aug19?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A26054-2004Dec25?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A32738-2004Nov7?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A56479-2000Dec27
+http://www.washingtonpost.com/ac2/wp-dyn/A57960-2004Dec11?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A60363-2003Dec12?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn/A61559-2002Sep24
+http://www.washingtonpost.com/ac2/wp-dyn/A64481-2004Aug14?language=printer
+http://www.washingtonpost.com/ac2/wp-dyn?node=entertainment/profile&id=791895
+http://www.washingtonpost.com/ac2/wp-dyn?node=entertainment/profile&id=791895&et=all
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&contentId=A22637-2004Apr18&notFound=true
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A22151-2000Apr6
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A30099-2001Apr17&notFound=true
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A32319-2001Sep26&notFound=true
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A41403-2003Jan25&notFound=true
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A54423-2002Jun14&notFound=true
+http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&node=&contentId=A64630-2004Jan30&notFound=true
+http://www.washingtonpost.com/wl/jobs/Content?Content=/help/searchtips.html
+http://www.washingtonpost.com/wp-dyn/articles/A10405-2004Sep9.html
+http://www.washingtonpost.com/wp-dyn/articles/A12297-2004Jul24.html
+http://www.washingtonpost.com/wp-dyn/articles/A1638-2004Dec15.html
+http://www.washingtonpost.com/wp-dyn/articles/A16977-2004Oct8.html
+http://www.washingtonpost.com/wp-dyn/articles/A18973-2004Mar23.html
+http://www.washingtonpost.com/wp-dyn/articles/A19763-2004Nov2.html
+http://www.washingtonpost.com/wp-dyn/articles/A20382-2004Aug20.html
+http://www.washingtonpost.com/wp-dyn/articles/A20471-2004Nov3.html
+http://www.washingtonpost.com/wp-dyn/articles/A20889-2004Oct9_2.html
+http://www.washingtonpost.com/wp-dyn/articles/A22300-2004May12.html
+http://www.washingtonpost.com/wp-dyn/articles/A23474-2003Nov10.html
+http://www.washingtonpost.com/wp-dyn/articles/A2477-2004Nov21.html
+http://www.washingtonpost.com/wp-dyn/articles/A25279-2005Jan20.html
+http://www.washingtonpost.com/wp-dyn/articles/A27948-2004Nov5.html
+http://www.washingtonpost.com/wp-dyn/articles/A2925-2004Oct2.html
+http://www.washingtonpost.com/wp-dyn/articles/A29862-2004Aug24.html?nav=rss_politics
+http://www.washingtonpost.com/wp-dyn/articles/A31462-2005Jan23_3.html
+http://www.washingtonpost.com/wp-dyn/articles/A3185-2004Dec15.html
+http://www.washingtonpost.com/wp-dyn/articles/A31904-2004May16.html
+http://www.washingtonpost.com/wp-dyn/articles/A33255-2004Dec29.html
+http://www.washingtonpost.com/wp-dyn/articles/A3326-2005Feb6.html
+http://www.washingtonpost.com/wp-dyn/articles/A34784-2004Dec4.html
+http://www.washingtonpost.com/wp-dyn/articles/A35224-2004Nov8.html
+http://www.washingtonpost.com/wp-dyn/articles/A36080-2004Dec30.html
+http://www.washingtonpost.com/wp-dyn/articles/A36557-2005Jan25.html
+http://www.washingtonpost.com/wp-dyn/articles/A36557-2005Jan25.html?nav=rss_topnews
+http://www.washingtonpost.com/wp-dyn/articles/A38097-2004Nov9.html
+http://www.washingtonpost.com/wp-dyn/articles/A38278-2004Nov9.html
+http://www.washingtonpost.com/wp-dyn/articles/A38446-2005Feb19.html
+http://www.washingtonpost.com/wp-dyn/articles/A38446-2005Feb19.html?nav=rss_world
+http://www.washingtonpost.com/wp-dyn/articles/A38873-2004Oct16.html
+http://www.washingtonpost.com/wp-dyn/articles/A39874-2004Sep21.html
+http://www.washingtonpost.com/wp-dyn/articles/A4005-2004Jul21.html
+http://www.washingtonpost.com/wp-dyn/articles/A40142-2004Aug27.html
+http://www.washingtonpost.com/wp-dyn/articles/A43777-2004Nov11.html
+http://www.washingtonpost.com/wp-dyn/articles/A45588-2005Jan28.html
+http://www.washingtonpost.com/wp-dyn/articles/A4563-2005Feb7.html
+http://www.washingtonpost.com/wp-dyn/articles/A45987-2005Jan3.html
+http://www.washingtonpost.com/wp-dyn/articles/A50937-2005Jan31.html
+http://www.washingtonpost.com/wp-dyn/articles/A51424-2004Nov15_2.html
+http://www.washingtonpost.com/wp-dyn/articles/A53675-2004Nov16.html
+http://www.washingtonpost.com/wp-dyn/articles/A54966-2004Nov16.html
+http://www.washingtonpost.com/wp-dyn/articles/A55666-2005Feb1.html
+http://www.washingtonpost.com/wp-dyn/articles/A57894-2004Sep2.html
+http://www.washingtonpost.com/wp-dyn/articles/A58043-2004Sep28.html
+http://www.washingtonpost.com/wp-dyn/articles/A58117-2004Sep28.html
+http://www.washingtonpost.com/wp-dyn/articles/A59332-2005Feb3.html
+http://www.washingtonpost.com/wp-dyn/articles/A59587-2005Jan8.html
+http://www.washingtonpost.com/wp-dyn/articles/A59615-2004Sep3.html
+http://www.washingtonpost.com/wp-dyn/articles/A60133-2004Oct24.html
+http://www.washingtonpost.com/wp-dyn/articles/A60832-2004Sep29.html
+http://www.washingtonpost.com/wp-dyn/articles/A62646-2004Oct25.html
+http://www.washingtonpost.com/wp-dyn/articles/A63329-2004Sep30.html
+http://www.washingtonpost.com/wp-dyn/articles/A63755-2004Sep30.html
+http://www.washingtonpost.com/wp-dyn/articles/A6382-2004Aug16.html
+http://www.washingtonpost.com/wp-dyn/articles/A6404-2004Aug16.html
+http://www.washingtonpost.com/wp-dyn/articles/A64481-2004Aug14.html
+http://www.washingtonpost.com/wp-dyn/articles/A64483-2004Aug14.html
+http://www.washingtonpost.com/wp-dyn/articles/A6921-2005Jan13.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/03/25/AR2005032502637.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/02/AR2005050201321.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/04/AR2005050402050.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/05/AR2005050500811_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/12/AR2005051200077_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/14/AR2005051400515_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/15/AR2005051500605.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/15/AR2005051500646.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/25/AR2005052501811.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/05/31/AR2005053101825_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/01/AR2005060102124.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/02/AR2005060201593_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/02/AR2005060201944.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/03/AR2005060301655.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/09/AR2005060902245_pf.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/10/AR2005061002110.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/11/AR2005061100381.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/11/AR2005061100381_3.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/13/AR2005061301418.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/14/AR2005061400563.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/14/AR2005061401343.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/15/AR2005061502252.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/15/AR2005061502300.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/16/AR2005061601364.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/19/AR2005061900697.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/22/AR2005062200598.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/22/AR2005062202100.html
+http://www.washingtonpost.com/wp-dyn/content/article/2005/06/22/AR2005062202100_pf.html
+http://www.washingtonpost.com/wp-dyn/content/discussion/2004/04/26/DI2005040307109.html
+http://www.washingtonpost.com/wp-dyn/content/discussion/2004/10/24/DI2005033110319.html
+http://www.washingtonpost.com/wp-dyn/content/discussion/2005/03/04/DI2005040701467.html
+http://www.washingtonpost.com/wp-dyn/content/discussion/2005/06/16/DI2005061601172.html
+http://www.washingtonpost.com/wp-dyn/content/discussion/2005/06/21/DI2005062101260.html
+http://www.washingtonpost.com/wp-dyn/content/linkset/2005/04/11/LI2005041100587.html?nav=pq
+http://www.washingtonpost.com/wp-dyn/metro/va/elections/governor/
+http://www.washingtonpost.com/wp-dyn/print/community/annearundel/
+http://www.washingtonpost.com/wp-srv/metro/usersguides/loudoun/CommEvnts.html
+http://www.washingtonpost.com/wp-srv/politics/debatereferee/debate_1008.html
+http://www.washingtonpost.com/wp-srv/realestate/hpr/help.htm
+http://www.washingtonpost.com/wp-srv/style/longterm/books/chap1/emperor.htm
+http://www.washingtonpost.com/wp-srv/style/longterm/books/chap1/manwhomadearevolution.htm
+http://www.washingtonpost.com/wp-srv/style/longterm/books/chap1/truthandbeauty.htm
+http://www.washingtontechnology.com/news/14_8/tech_features/639-1.html
+http://www.washingtontechnology.com/news/18_4/datastream/20787-1.html
+http://www.washingtontechnology.com/news/1_1/daily_news/26370-1.html
+http://www.washingtontimes.com/commentary/20050507-111851-8037r.htm
+http://www.washingtontimes.com/national/20040705-013501-7302r.htm
+http://www.washingtontimes.com/upi/20050622-010040-2412r.htm
+http://www.washingtontimes.com/world/20050613-121304-4030r.htm
+http://www.washjeff.edu/handbook/reslife3.html
+http://www.washoe.lib.nv.us/mod.php?mod=newsletter&op=read&lid=1&nlid=33
+http://www.washtimes.com/national/20050222-115008-9802r.htm
+http://www.washtimes.com/national/20050331-010415-6150r.htm
+http://www.washtimes.com/upi-breaking/20050504-034910-3467r.htm
+http://www.washtimes.com/world/20050203-105651-3055r.htm
+http://www.washwriter.org/writnews.html
+http://www.waspacegrant.org/efaut99.html
+http://www.waste2profits.com/SelectDisgner.htm
+http://www.wasteage.com/mag/waste_banned_boston_few/
+http://www.wasteonline.org.uk/resources/Wasteguide/mn_wastetypes_textiles.html
+http://www.wasylik.net/baby/blog/arc/2003/March.php
+http://www.watchblog.com/republicans/archives/002326.html
+http://www.watchblog.com/republicans/archives/002340.html
+http://www.watchblog.com/thirdparty/archives/002174.html
+http://www.watchguard.com/about/corpoff.asp
+http://www.watchguard.com/events/speakers.asp
+http://www.watchic.net/pottery/trouble.htm
+http://www.watchman.org/lds/mackert.htm
+http://www.watchman.org/profile/unipro.htm
+http://www.watchman.org/profile/wordpro.htm
+http://www.watchparts.org/netspecials.html
+http://www.watchtower.org/bible/jas/chapter_001.htm
+http://www.watchtower.org/library/g/1999/3/8/article_01.htm
+http://www.watchtower.org/library/g/2001/9/22/article_02.htm
+http://www.watchtower.org/library/g/2003/12/8/article_01.htm
+http://www.watchtowerinformationservice.org/osamuJME.htm
+http://www.watchwomen.com/women_and_the_episcopacy.htm
+http://www.water-ed.org/septoct01.asp
+http://www.water-technology.net/projects/barbados/
+http://www.water-technology.net/projects/copper/
+http://www.water.az.gov/WaterManagement/Content/WaterRights/surface_water_faqs.htm
+http://www.water.org.uk/home/news/press-releases/water-pricing
+http://www.waterandwastewater.com/www_services/ask_tom_archive/grinders_and_comminutors_an_evolving_technology.htm
+http://www.waterboards.ca.gov/coloradoriver/documents/eo_reports/eo010627.htm
+http://www.waterboards.ca.gov/lahontan/EO_Reports/2000/eor1100.htm
+http://www.watercommissioner.co.uk/PerformanceMonitoring/CustomerService/default.asp
+http://www.waterconserve.info/articles/reader.asp?linkid=22326
+http://www.waterconserve.info/articles/reader.asp?linkid=31817
+http://www.watercoolergames.org/archives/000263.shtml
+http://www.watercoolergames.org/archives/000314.shtml
+http://www.watercoolergames.org/archives/000324.shtml
+http://www.watercraftnews.com/output.cfm?id=778303
+http://www.waterford-news.com/news/story.asp?j=18484
+http://www.watergirlsatplay.com/gap/
+http://www.waterhousegroup.com/
+http://www.waterloohydrogeologic.com/software/remediation_toolkit/remediation_toolkit_biotrend_details.htm
+http://www.watermattersaustralia.org/campaign-news/update-0302.htm
+http://www.wateronline.com/
+http://www.waterquality.crc.org.au/HS/hs4web.htm
+http://www.waterquality.utah.gov/KIRANS2.HTM
+http://www.watertechonline.com/article.asp?IndexID=6631961
+http://www.watertechonline.com/news.asp?mode=4&N_ID=52657
+http://www.watertownlib.org/annual.htm
+http://www.waterville.com/info/winter/snowsports.jr.seasonal.asp
+http://www.waterwebster.com/BottledWater.htm
+http://www.waterwire.net/Resources/releases.cfm
+http://www.wats.ca/articles/firefoxandjaws/71
+http://www.wats.ca/articles/hiddeninformation/63
+http://www.watson.org/~leigh/celts.html
+http://www.watsoniapublishing.com/policies.php
+http://www.watsonwyatt.com/europe/pubs/healthcare/articles/render_june.asp?ID=10096
+http://www.watsonwyatt.com/us/pubs/insider/showarticle.asp?ArticleID=14382&Component=The+Insider
+http://www.watt-evans.com/soyouwanttobeawriter7.html
+http://www.wausaudailyherald.com/wdhlocal/294057820857405.shtml
+http://www.wave.net/immigration/lawyer/tax_avoid.html
+http://www.wave.net/upg/immigration/dot_t2.html
+http://www.waveflux.net/archives/cat_hard_news.php
+http://www.wavelet.org/phpBB2/viewtopic.php?t=2086
+http://www.wavescape.co.za/top_bar/tidings/Sharks/debate_april04.html
+http://www.waxy.org/archive/2003/05/29/ghyslain.shtml
+http://www.waxy.org/archive/2003/12/30/clear_ch.shtml
+http://www.waxy.org/archive/2004/07/01/amazonco.shtml
+http://www.wayeh.com/sleddogrescue/sources.htm
+http://www.wayland.ma.us/waytow/cable_history.htm
+http://www.wayne-dalton.com/aboutUs_GreatIdeas.asp
+http://www.waynegreen.com/video/makeup.html
+http://www.wayoutback.com.au/comments.php
+http://www.waypath.com/news/news_6_71480.html
+http://www.waypath.com/topic/gaming_counterstrikesource.html
+http://www.waysys.com/ws_content_al_ibe.html
+http://www.waytoopersonal.com/comp/onetrue.shtml
+http://www.wazika.net/2004/2002_04_01_archive.html
+http://www.wazika.net/2004/2004_04_01_archive.html
+http://www.wbdg.org/design/parking.php
+http://www.wbdg.org/design/provide_security.php
+http://www.wbdg.org/design/use_analysis.php
+http://www.wbenc.org/opportunities/resources.html
+http://www.wbf.org/displayconvention.cfm
+http://www.wbhm.org/Community_Center/Air_Quality_Primer.html
+http://www.wboc.com/Global/story.asp?S=2315918
+http://www.wbucapetown2004.org.za/programme_event_draft.html
+http://www.wburg.com/0101/context/mushrooms.html
+http://www.wc3sear.ch/rules.php
+http://www.wca-infonet.org/cds_static/guidelines_designing_evaluating_surface_systems__1261_1398.html
+http://www.wcape.school.za/subject/CS/PHS/exceldistr/getgoing.htm
+http://www.wcc-coe.org/wcc/assembly/fprc2b-e.html
+http://www.wcc-coe.org/wcc/what/jpc/echoes-16-06.html
+http://www.wcer.wisc.edu/nise/cl1/ilt/resource/assessment/proof_activities.htm
+http://www.wcet.info/projects/laap/guidelines/case_ksu.asp
+http://www.wcet.info/projects/laap/guidelines/case_regis.asp
+http://www.wcfriends.org/HeadLtt.htm
+http://www.wcg.org/lit/jesus/davis.htm
+http://www.wch.ca/CFcontent.asp?view=CH-20301
+http://www.wch.ca/CFcontent.asp?view=CH-21171
+http://www.wch04.com/generated/fAv1wOqGMW.html
+http://www.wchob.org/Art/
+http://www.wcl.govt.nz/popular/senior.html
+http://www.wcml.org.uk/people/em/theuni.htm
+http://www.wcoh.ac.uk/sa_spt.htm
+http://www.wcoomd.org/ie/En/FAQ/body_faq.html
+http://www.wcoomd.org/ie/en/Topics_Issues/HarmonizedSystem/HS%20dispute%20settlement.html
+http://www.wcpn.org/specials/7th_generation/christmas_birds.html
+http://www.wcpo.com/news/2002/local/07/09/bell.html
+http://www.wcpss.net/Board/agendas_schedules/5_20_2003-agenda.html
+http://www.wcpss.net/news/
+http://www.wcpss.net/parents_students.html
+http://www.wcremembered.co.uk/fandf.html
+http://www.wcrp.org/RforP/PEACEED_CONTENT.html
+http://www.wcschools.com/mjhs/tlcf/bestpractices/wilson/
+http://www.wcsh6.com/weddingguide/Wedding-Planning/Invitations-And-Etiquette/Invitation-Wording-And-Enclosures.htm
+http://www.wcu.edu/chancellor/BOTMinutes/2000-3os.htm
+http://www.wcu.edu/sotl/summerinstitute04.html
+http://www.wcubed.net/health/cancer.php
+http://www.wculife.com/stories.htm
+http://www.wcupa.edu/_information/official.documents/GRADUATE.CATALOG/MusAppld.htm
+http://www.wcuweb.com/Documents/PRESSRELEASES&ARTICLES&LETTERS/2002,6-17%20Please%20send%20the%20SWAT%20team%20again!.htm
+http://www.wcva.org.uk/content/jobs/index.cfm
+http://www.wcwonline.org/keypeople/robeson.html
+http://www.wd.gc.ca/mediacentre/2004/nov09-01a_e.asp
+http://www.wd.gc.ca/rpts/audit/wdp/5_e.asp
+http://www.wdfi.org/wca/faq.htm
+http://www.wdiyc.org/wdiyc/diybooks.html
+http://www.wdln.tv/conference.htm
+http://www.we-make-money-not-art.com/archives/004283.php
+http://www.we-make-money-not-art.com/archives/cat_gadgets.php?page=5
+http://www.we-make-money-not-art.com/archives/cat_rfid.php
+http://www.we-make-money-not-art.com/index.php?page=4
+http://www.weac.org/Capitol/2003-04/july04/tabor_wrap.htm
+http://www.weac.org/GreatSchools/Issuepapers/schoolsize.htm
+http://www.weac.org/Resource/2001-02/mentor.htm
+http://www.weac.org/greatschools/Issuepapers/schoolsize.htm
+http://www.weaintcool.com/Reviews/socom.html
+http://www.wealth4freedom.com/WORLDNEWSSTAND/1/churchstate.htm
+http://www.wealth4freedom.com/brainwash.htm
+http://www.wealth4freedom.com/truth/2/rockefeller.htm
+http://www.wealth4freedom.com/truth/3/skullandbones.htm
+http://www.wealth4freedom.com/truth/8/statebody.htm
+http://www.wealth4freedom.com/truth/news/witchcraft.htm
+http://www.wealthytheatre.org/policy.php
+http://www.wealwaysswing.org/
+http://www.wearescientists.com/frontpagearchive/2003_04_29_frontpage.html
+http://www.weasner.com/etx/archive/feedbackAug01/autostar.html
+http://www.weasner.com/etx/eyepieces.html
+http://www.weather-forecast.com/locations/Rochester1.forecast.shtml
+http://www.weather.nps.navy.mil/renard_wx/dec98wx.html
+http://www.weatherhead.cwru.edu/cslc/alumni/best.htm
+http://www.web-and-flow.com/members/polson/webquest/webquest.htm
+http://www.web-and-flow.com/members/shursey/separatepeace/webquest.htm
+http://www.web-cite.com/search_marketing/000100.html
+http://www.web-enable.com/industry/food_and_beverages.asp
+http://www.web-merchant.co.uk/ecommercebuilder.asp
+http://www.web-techniques.com/topics/cpp/compilers/
+http://www.web.amnesty.org/ai.nsf/index/AFR540012000
+http://www.web.net/~crash/about.html
+http://www.web.net/~wia/wiam_Film032.html
+http://www.webactivemagazine.co.uk/analysis/1130414
+http://www.webactivemagazine.co.uk/features/1156647
+http://www.webaim.org/coordination/law/eu/
+http://www.webaim.org/products/cd/pre_order.php
+http://www.webaim.org/products/training/termsofuse.php
+http://www.webaim.org/techniques/flash/
+http://www.webapps.ccs.uoguelph.ca/lc/AcademicIntegrity/plagiarism_quiz.cfm
+http://www.webball.com/bullpen/essay_n.html
+http://www.webcam-list.com/getrated.php
+http://www.webcom.com/haahr/welcome.html
+http://www.webcom.com/ncecd/taleoftwomarkets.html
+http://www.webcom.com/~paf/ereignis.html
+http://www.webcomics.com/top/index.php/Arts/Graphic_Design/Typography/
+http://www.webcomlink.com/product/dir.htm
+http://www.webcredible.co.uk/user-friendly-resources/css/css-round-corners-boxes.shtml
+http://www.webcredible.co.uk/user-friendly-resources/web-credibility/visit-website.shtml
+http://www.webcurrent.com/rushdie.html
+http://www.webdelsol.com/NorthAmReview/NAR/HTMLpages/n-su97sf.htm
+http://www.webdesignfromscratch.com/effective_text.cfm
+http://www.webdeveloper.com/forum/showthread.php?goto=lastpost&t=68236
+http://www.webdeveloper.com/forum/showthread.php?goto=lastpost&t=70160
+http://www.webdeveloper.com/forum/showthread.php?goto=lastpost&t=70339
+http://www.webdeveloper.com/forum/showthread.php?t=68236
+http://www.webdeveloper.com/forum/showthread.php?t=70339
+http://www.webdevelopersjournal.com/articles/wap_java.html
+http://www.webdevelopersjournal.com/columns/analysis.html
+http://www.webdevelopersjournal.com/columns/writerfp.html
+http://www.webdirectwarranty.com/warranty_coverage.htm
+http://www.webedelic.com/church/lindex.html
+http://www.webexpectations.com/newsarchive.php
+http://www.webfactory.ie/htm/clients/cashs.htm
+http://www.webfeetguides.com/howto_load_wf_marc.html
+http://www.webflyer.com/programs/accounts_online/
+http://www.webflyer.com/programs/accounts_online/?WF_show_printable=1
+http://www.webfoot.com/advice/WebDarkSide.html
+http://www.webfoot.com/advice/oralLiterate.html
+http://www.webgeordie.co.uk/borat/howardstern.htm
+http://www.webheights.net/10newsongs/press/elmunmag.htm
+http://www.webindia123.com/history/MEDIEVAL/mughal%20period/mughal1.htm
+http://www.webjones.org/wordpress/wp-rss2.php
+http://www.weblogkitchen.com/wiki.cgi?KmDiscussion
+http://www.webmastersink.com/webman/promos/paylinks/health.htm
+http://www.webmastersink.com/webman/promos/paylinks/personal.htm
+http://www.webmasterworld.com/forum1/2483-2-10.htm
+http://www.webmasterworld.com/forum12/1875.htm
+http://www.webmasterworld.com/forum19/2706.htm
+http://www.webmasterworld.com/forum25/1955-4-10.htm
+http://www.webmasterworld.com/forum3/14973-7-10.htm
+http://www.webmasterworld.com/forum30/29814.htm
+http://www.webmasterworld.com/forum31/1114-2-10.htm
+http://www.webmasterworld.com/forum31/1495-3-10.htm
+http://www.webmasterworld.com/forum33/1480-10-10.htm
+http://www.webmasterworld.com/forum39/2519.htm
+http://www.webmasterworld.com/forum81/1043.htm
+http://www.webmasterworld.com/forum81/2285-4-10.htm
+http://www.webmasterworld.com/forum81/3940-8-10.htm
+http://www.webmasterworld.com/forum81/4204-2-10.htm
+http://www.webmasterworld.com/forum86/402.htm
+http://www.webmasterworld.com/forum89/5563-7-10.htm
+http://www.webmasterworld.com/forum9/8382-7-10.htm
+http://www.webmatters.net/france/ww1_haudroy.htm
+http://www.webmed.com/
+http://www.webmerch.com/svc/franchise.html
+http://www.webmovie.com/North_Carolina_Production_Guide/
+http://www.webpages.uidaho.edu/~mbolin/diotalevi.html
+http://www.webpanda.com/WP_cemeteries/elycem_f.htm
+http://www.webpicturecreator.com/
+http://www.webplan.com/company/news/release_view.dbm?id=45
+http://www.webpresencegroup.net/
+http://www.webpronews.com/2005/0118.html
+http://www.webpronews.com/news/ebusinessnews/wpn-45-20050109PuttingtheMacAsidein2005.html
+http://www.webreseller.net/policy.htm
+http://www.webroot.com/products/windowwasher
+http://www.webs.uidaho.edu/core_critical_thinking/lessons/lesson3/3_7_recon_summary.htm
+http://www.websciences.org/sltbr/sadfaq.htm
+http://www.webservertalk.com/message868715-1.html
+http://www.webservertalk.com/message868715-2.html
+http://www.webservertalk.com/message868715.html
+http://www.webservertalk.com/message870952.html
+http://www.webservices.org/index.php/ws/content/view/full/41476
+http://www.webservices.org/index.php/ws/content/view/full/42433
+http://www.webservices.org/index.php/ws/content/view/full/48340
+http://www.webshells.com/cgi-bin/laborinfo/affa/affa.pl
+http://www.webshowcase.net/nealefamily/screen3_14.html
+http://www.website-promotion-ranking-services.com/guarantee.htm
+http://www.website-promotion-ranking-services.com/tutorials/11.htm
+http://www.website101.com/Search_Engine_Positioning/Paid_inclusion_search.html
+http://www.websiteoftheday.info/2005/02/
+http://www.websites.net.au/oecd/context.htm
+http://www.websitetoolbox.com/tool/post/jlee/vpost?id=441188
+http://www.websitetoolbox.com/tool/post/whosarat/vpost?id=163286&goto=nextoldest
+http://www.websitetoolbox.com/tool/post/whosarat/vpost?id=176181
+http://www.websitetoolbox.com/tool/post/whosarat/vpost?id=176181&trail=
+http://www.webspawner.com/users/PRASHAN/
+http://www.webspawner.com/users/nascarracing/commentary.html
+http://www.webspawner.com/users/popemenachery/
+http://www.webstandards.org/act/campaign/buc/
+http://www.webstandards.org/buzz/archive/2003_08.html
+http://www.webstandards.org/buzz/archive/2005_01.html
+http://www.webstandards.org/buzz/archive/2005_04.html
+http://www.webstar.co.uk/~ubugaje/debt4.html
+http://www.webster.edu/gradcatalog/accredit.html
+http://www.webster.edu/~corbetre/philosophy/education/illich/schooling.html
+http://www.websterschools.org/curriculum.cfm?subpage=1073
+http://www.websyte.com/unity/MATS15.HTM
+http://www.webtechgeek.com/IndexWTG.htm
+http://www.webtennis.net/
+http://www.webterrace.com/allergy/remedies.htm
+http://www.webterrace.com/fengshui/fengrules.htm
+http://www.webthang.co.uk/tuts/tuts_fmx/gfmx2/gfmx2_1.asp
+http://www.webthang.co.uk/tuts/tuts_fmx/gfmx2/gfmx2_2.asp
+http://www.webtourist.net/touristinformation/about-johnsburg-il_usa.html
+http://www.webuser.co.uk/cgi-bin/forums/showflat.pl?Cat=&Board=ISP&Number=116827&page=0&view=collapsed&sb=5&o=93&part=
+http://www.webuser.co.uk/cgi-bin/forums/showflat.pl?Cat=&Board=design&Number=153938&page=0&view=collapsed&sb=5&o=93&part=
+http://www.webuser.co.uk/cgi-bin/forums/showflat.pl?Cat=&Board=openforum&Number=64416&page=0&view=collapsed&sb=5&o=93&part=4
+http://www.webwasp.co.uk/tutorials/b13-slider/colour-slider.php
+http://www.webwombat.com/motoring/news_reports/xrt_xr6t.htm
+http://www.webworkshop.net/florida-update.html
+http://www.wecdsb.on.ca/oyap/works.html
+http://www.wecitefl.com/tefl-tesol-jobs-hua-hin.php
+http://www.weddingbells.ca/wb/Cms/Bride/Page.aspx?PageId=22
+http://www.weddingchannel.com/ui/buildArticle.action?frmSection=articles&assetPath=%2Ftemplates%2FArticles%2FSite%2FTravel%2Farticle_1325.html
+http://www.weddingdetails.com/lore/protestant.cfm
+http://www.weddingshowergifts.com/resources/bachelor_parties.php
+http://www.weddingsolutions.com/Wedding_Videographers.htm
+http://www.weddingvendors.com/baby-names/origin/armenian/
+http://www.weddingvendors.com/baby-names/origin/norse/
+http://www.wedgewoodhotel.com/inter/aug3-01.html
+http://www.weeklystandard.com/Content/Public/Articles/000/000/003/408utwyh.asp
+http://www.weeklystandard.com/Content/Public/Articles/000/000/004/878ropxb.asp
+http://www.weeklystandards.com/archives/cat_business.php
+http://www.wef.org/TechInfoCtr/CurrentActivities/webcom2.jhtml
+http://www.weforum.org/site/homepublic.nsf/Content/Africa+Economic+Summit+2005%5CAfrica+Economic+Summit+2004
+http://www.weforum.org/site/knowledgenavigator.nsf/Content/_S10317?open&event_id=
+http://www.weforum.org/site/knowledgenavigator.nsf/Content/_S12190?open&event_id=
+http://www.wefound.org/texts/Ideal_Muslims_files/herhusband.htm
+http://www.wegener.com/pressrel2004/070904.html
+http://www.wehdorn.co.at/home_d/deut/Akt_d/Akt_Aeth_d/akt_aeth_d.html
+http://www.wehrmacht-awards.com/campaign_awards/shields/krim_campaign.htm
+http://www.weiady.org/outlines/religions_in_history.htm
+http://www.weibfm.com/heroines.htm
+http://www.weight-loss-diet-i.com/weight-loss-tips.htm
+http://www.weightlossguide.com/
+http://www.weightlossguide.com/testi-weightloss-system.html
+http://www.weightlosslab.com/special4.htm
+http://www.weightlossresources.co.uk/logout/info/press.htm
+http://www.weightlossresources.co.uk/weight_loss/advice/underactive_thyroid.htm
+http://www.weightthinkers.com/
+http://www.weightwatchers.ca/util/qzs/questions.aspx?quiz_id=13&tabnum=4&tabsub=asm
+http://www.weightwatchers.co.uk/shop/hom/index.aspx
+http://www.weightwatchers.co.uk/shop/ord/index.aspx
+http://www.weightwatchers.co.uk/success/art/index.aspx?SuccessStoryId=4111&sc=17
+http://www.weightwatchers.co.uk/success/art/index.aspx?sc=17&SuccessStoryID=4141
+http://www.weightwatchers.co.uk/success/art/index.aspx?sc=600&SuccessStoryID=3961
+http://www.weightwatchers.co.uk/util/qzs/questions.aspx?quiz_id=13&tabnum=4&tabsub=asm
+http://www.weightwatchers.com/about/prs/wwi_template.aspx?GCMSID=1003241
+http://www.weightwatchers.com/util/qzs/questions.aspx?quiz_id=13&tabnum=4&tabsub=asm
+http://www.weimrescuetexas.org/spayneut.html
+http://www.weinigusa.com/used/forsalebyothers.htm
+http://www.weinwaysports.com/catalogue.htm
+http://www.weird-wi.com/ghostwatch/apr2001.htm
+http://www.weird-wi.com/occult/hospital.htm
+http://www.weirdlist.com/recent.html
+http://www.weirdness-central.co.uk/forum/topic.asp?TOPIC_ID=9
+http://www.weizmann.ac.il/safety/reg6.html
+http://www.wejustloveit.com/norfolk.htm
+http://www.welchco.com/03/00050/61/99/08/1601.HTM
+http://www.welchwrite.com/dewelch/ce/ce9811.asp
+http://www.welcome-2-europe.com/
+http://www.welcome-2-europe.com/Albania_Science_and_Environment.html
+http://www.welcome-2-europe.com/Czech_Republic_Maps_and_Views.html
+http://www.welcome-2-europe.com/Finland_Business_and_Economy.html
+http://www.welcome-2-europe.com/Ireland_Dublin_Science_and_Environment.html
+http://www.welcome-2-europe.com/Malta_Gozo_Xewkija.html
+http://www.welcome-2-europe.com/Recreation_and_Sports_Boating.html
+http://www.welcome-2-europe.com/United_Kingdom_Health_Organisations.html
+http://www.welcome-2-europe.com/United_Kingdom_Wales.html
+http://www.welcome-2-europe.com/United_Kingdom_Wales_Government.html
+http://www.welcome-2-europe.com/United_Kingdom_Wales_Travel_and_Tourism.html
+http://www.welcome-moldova.com/articles/custom.shtml
+http://www.welcomebusiness.com/articlesDisplay.asp?articleID=33&deptID=4
+http://www.welcomecottages.com/welu?action=xsl&view=xsl&xsltId=allabout
+http://www.welcomemagazine.com/golf_index.htm
+http://www.welcometosalmonarm.com/1_local_sports.shtml
+http://www.welcomeurope.com/default.asp?id=1200
+http://www.welcomeurope.com/default.asp?id=1300
+http://www.welcomewagon.com/HouseHome/Article.aspx?wwpg=frontyard
+http://www.welcomewagon.com/HouseHome/Print.aspx?wwpg=frontyard
+http://www.weldon.org/issues.html
+http://www.welfare.ie/foi/btw_all.html
+http://www.welfarelaw.org/webbul/99feb.htm
+http://www.welfarewatch.toronto.on.ca/promises/paperstories.htm
+http://www.well.com/conf/grapevine.pri/
+http://www.well.com/confteam/hostmanual/section1.html
+http://www.well.com/user/davidu/leakey.html
+http://www.well.com/user/davidu/raven.html
+http://www.well.com/user/neal/
+http://www.well.com/user/sjroby/lostbooks.html
+http://www.well.com/user/smalin/typinwhy.htm
+http://www.well.com/~ajmilne/black_smoker/metabolism.html
+http://www.wellesley.edu/Admission/SAR/programs/manuals/ethics.html
+http://www.wellesley.edu/Courses/english.html
+http://www.wellesley.edu/Courses/russian.html
+http://www.wellesley.edu/Courses/writing.html
+http://www.wellesley.edu/OIS/psa/pfatc.html
+http://www.wellesley.edu/PNE/Events/AIDSConference/AIDSinSAfrica.html
+http://www.wellesley.edu/Polisci/wj/vietlink.html
+http://www.wellesley.edu/PublicAffairs/Commencement/2004/DCWcharge.html
+http://www.wellfleetma.org/Public_Documents/WellfleetMA_BBoard/S006093A4-006093E7
+http://www.wellington-college.berks.sch.uk/intranets/art/aims.htm
+http://www.wellingtonadvertiser.com/
+http://www.wellmark.com/e_business/group/tricare.htm
+http://www.wellness.gatech.edu/information/1_nutrition/8_weight.php
+http://www.wellowner.org/aother/heating.shtml
+http://www.wellsfargo.com/about/history/faqs.jhtml
+http://www.wellsfargo.com/investing/glossary/glossary3.jhtml
+http://www.wellspent.org/Product?p=181014
+http://www.wellspent.org/Product?p=203449
+http://www.wellspringmethodist.org/
+http://www.wellsregister.com/B4Site/conference_track1.asp
+http://www.welltrainedmind.com/sotw3/chapter32.html
+http://www.welovetheiraqiinformationminister.com/
+http://www.welshkatz.com/features/pubdetail.asp?intPubID=152559962000
+http://www.welshleagueofarizona.org/poetry.html
+http://www.welton.net/nana/chicken.html
+http://www.wem.mb.ca/ES17.htm
+http://www.wemaonline.org/ev.mediafair.cfm
+http://www.wemaonline.org/ev.mediafair.cfm?clear
+http://www.wemjournal.org/wmsonline/?request=get-document&issn=1080-6032&volume=012&issue=04&page=0244
+http://www.wemove.org/rett/rett_sym.html
+http://www.wemsi.org/depth.html
+http://www.wen.org.uk/nappies/campaign.htm
+http://www.wendycarlos.com/+wcco.html
+http://www.wendyweiss.com/sales_training_workshops.html
+http://www.wenlin.com/peace.htm
+http://www.weputthecommercein.com/
+http://www.werc.usgs.gov/invasivespecies/pepperweed.html
+http://www.werc.usgs.gov/redwood/restoration.htm
+http://www.wereallneighbours.co.uk/idlechat/message.php?id=1266
+http://www.werkradio.com/featured-artist.php
+http://www.wes-state.com/home_employment.html
+http://www.wes.org/ewenr/01march/feature.htm
+http://www.wes.org/ewenr/01may/practical.htm
+http://www.wes.org/ewenr/02may/Practical.htm
+http://www.wes.org/ewenr/04Jan/CzechRepublic.htm
+http://www.wes.org/ewenr/04March/Feature.htm
+http://www.wes.org/ewenr/05jan/feature.htm
+http://www.wes.org/ewenr/PF/04Jul/PFFeature.htm
+http://www.wesh.com/gardenrebel/2238691/detail.html
+http://www.wesjones.com/pollan2.htm
+http://www.wesleyan.edu/athletics/intramurals/softball_rules.htt
+http://www.wesleyan.edu/writing/workshop-old/departments/sisp.html
+http://www.wesleymission.org.au/publications/impact/
+http://www.wessexwater.co.uk/wsoperationclearflow/index.aspx
+http://www.wessexwater.co.uk/wsoperationclearflow/sub_ocf.aspx?id=205
+http://www.wessexwater.co.uk/wsoperationclearflow/sub_ocf.aspx?id=206
+http://www.wessexwater.co.uk/wsoperationclearflow/sub_ocf.aspx?id=208
+http://www.wessexwater.co.uk/wsoperationclearflow/sub_ocf.aspx?id=210
+http://www.west-ext.com/deathwatch_beetle.html
+http://www.west-linton.org.uk/cycle_routes/
+http://www.west-wind.com/
+http://www.west-wind.com/WebConnection.asp
+http://www.west-wind.com/webconnection.asp
+http://www.west-wind.com/webconnection/
+http://www.west-wind.com/webconnection/default.asp
+http://www.west.asu.edu/academic/acdw/ACDW705.html
+http://www.west.com/customer_contact/dir_response.asp
+http://www.west.com/customer_contact/index.asp
+http://www.west.net/~wwmr/ghstwrit.htm
+http://www.westafricareview.com/vol2.1/mosadomi.html
+http://www.westair-reproductions.com/mappage/hereford.htm
+http://www.westarkchurchofchrist.org/chadwell/church/teaching/y2004q1l5.htm
+http://www.westbradford.org/htmls/Codes/specific_regs.htm
+http://www.westchestermagazine.com/issues/2005_01/coverstory_p02.htm
+http://www.westciv.com/courses/
+http://www.westciv.com/style_master/hands_on_tutorial_sm/09.laying_out.html
+http://www.westciv.com/style_master/hands_on_tutorial_sm_mac/09.laying_out.html
+http://www.westciv.com/style_master/house/tutorials/quick/floated_layout/
+http://www.westcoastaquatic.ca/article_fishfarm_debate1204.htm
+http://www.westcoastassist.com.au/partner-facing_applications.htm
+http://www.westcoastragtime.com/
+http://www.westcoastsearch.com/intervie.htm
+http://www.westcore.com/InvestWithWestcore/invest.jsp
+http://www.westcountrycottages.co.uk/properties/theoldbarn.htm
+http://www.westcountrylinks.co.uk/forsale/caravans.htm
+http://www.wested.org/nhcssp/nhcss01.htm
+http://www.wested.org/pub/docs/625
+http://www.wested.org/stratlit/prodevel/happens.shtml
+http://www.wested.org/techpolicy/refind.html
+http://www.wested.org/wested/pubs/online/PDawards/04descriptions.shtml
+http://www.western-people.com/news/story.asp?j=22186
+http://www.western-saddle-horse-tack-for-sale.com/horse-training-horseshoeing.html
+http://www.westernfirearms.com/
+http://www.westernfront.co.uk/thegreatwar/articles/education/quiz.htm
+http://www.westernfrontonline.com/vnews/display.v/ART/2005/02/01/42002f53c5f2c?template=pda
+http://www.westerngeco.com/content/resources/articles/next_step_tech.asp
+http://www.westernmine.com/westernmine/sherpa2.htm
+http://www.westernpeople.ie/news/story.asp?j=23333
+http://www.westernunion.com/info/aboutUsAffiliate.asp?country=U1
+http://www.westga.edu/~bquest/1997/costof.html
+http://www.westga.edu/~distance/ojdla/fall73/rice73.html
+http://www.westga.edu/~distance/ojdla/summer72/porto72.html
+http://www.westga.edu/~wmaples/daniel.html
+http://www.westga.edu/~wmaples/morris.html
+http://www.westga.edu/~wmaples/rytel_joanna.html
+http://www.westgatehouse.com/rchap17.html
+http://www.westgatehouse.com/rchap7.html
+http://www.westgov.org/wga/initiatives/tpl/sec17.htm
+http://www.westhavenuniv.edu/whu/notices/policy/index.shtml
+http://www.westieclubamerica.com/behavior/alpha.html
+http://www.westinghouse-home.com/support.htm
+http://www.westmarsun.info/Business/014.Business.Sept.2004A.html
+http://www.westmarsun.info/Mailbox/006.Let.April.2004.html
+http://www.westmarsun.info/News/MV.017.Oct.2004B.html
+http://www.westminster-abbey.org/event/lecture/archives/020610_wolffe.htm
+http://www.westminster.gov.uk/communityandliving/registrar/marriage/
+http://www.westminster.gov.uk/transportandstreets/parking/masterpark/electric.cfm
+http://www.westminstercollege.edu/communication_office/index.cfm?parent=1757&content=2652
+http://www.westmont.edu/_prospective_students/pages/financial_aid/applicationProcess.html
+http://www.westmountainradio.com/supportrr.htm
+http://www.westofenglandcockerclub.co.uk/history.htm
+http://www.westol.com/~paufo/bigfoot1.htm
+http://www.westonaprice.org/foodfeatures/honey.html
+http://www.westonaprice.org/traditional_diets/australian_aborigines.html
+http://www.westonlandmark.com/history.htm
+http://www.westonshealth.co.uk/acatalog/
+http://www.westpac.co.nz/olcontent/olcontent.nsf/Content/Online+Banking+Terms+and+Conditions
+http://www.westpalmbeachchurchofchrist.com/
+http://www.westporthistory.com/
+http://www.westseneca.net/bdmin03/mi030310.html
+http://www.westsidegardener.com/guides/pest_management.html
+http://www.westsidegardener.com/quick/timetable.html
+http://www.westunewcomers.org/
+http://www.westvalley.edu/wvc/dl/dl_survey.html
+http://www.westvancouver.com/webcams/beachhousecam/
+http://www.westville.org/
+http://www.westwinddogtraining.com/BSL/bsl.html
+http://www.westwindmassageacademy.com/
+http://www.westword.com/issues/1999-12-23/calhoun.html
+http://www.wetcanvas.com/forums/showthread.php?goto=newpost&t=274768
+http://www.wetdryfilter.com/special_requests.htm
+http://www.wetfeet.com/advice/weblog/archive.asp
+http://www.wethepeoplemedia.org/RJ_Dec01.html
+http://www.wethersfieldct.com/TC/2005jan04r.html
+http://www.wetsand.com/resource.asp?ResourceID=2151
+http://www.wetsuweten.com/wet/gov.htm
+http://www.wetwebmedia.com/ca/cav1i2/by_spencer_glass.htm
+http://www.wetwebmedia.com/crnstrfa.htm
+http://www.wetwebmedia.com/seastarfaq2.htm
+http://www.wetzoollamb.net/jfpp/maria/stories/dustn.html
+http://www.wevh.org.uk/
+http://www.wf-f.org/Sum2K-Anderson.html
+http://www.wfa.org/newsletter/archive/2003/0304_030124/0304_030124.html
+http://www.wfac.org.uk/information/working_in_the_voluntary_sector.shtml
+http://www.wfdesign.com/tc/rtc.htm
+http://www.wfmy.com/news/local_state/local_article.aspx?storyid=35379
+http://www.wfmynews2.com/news/health/health_article.aspx?storyid=42732
+http://www.wfmynews2.com/sports/sports_article.aspx?storyid=35546
+http://www.wfn.org/2002/09/msg00156.html
+http://www.wfo-cbrc.org/cbrc/counties.html
+http://www.wfp.org/newsroom/in_depth/africa/malawi_0209.htm
+http://www.wfs.org/fsrvjan04.htm
+http://www.wfs.org/futupap00.htm
+http://www.wfu.edu/users/barbmj1/pool/
+http://www.wfu.edu/~rollins/piston/offset/
+http://www.wfu.edu/~tacketst/afm.html
+http://www.wfu.org.uk/
+http://www.wga.org/WrittenBy/0900/business.html
+http://www.wga.org/craft/gravlax.html
+http://www.wga.org/negotiations/quotes04.html
+http://www.wgby.org/edu/source/teacher_guide/lessons/impact_valuetime_money.html
+http://www.wgm.org/cms/story/Story.asp?tid=3&did=579
+http://www.wgma.org.uk/articles/west_gallery_music.html
+http://www.wgquirk.com/chap4.html
+http://www.wgresident.com/wg-cover.shtml
+http://www.whale.to/vaccine/wallace/4.html
+http://www.whalingmuseum.org/kendall/fakeshaw/body.html
+http://www.wharram.com/message.shtml
+http://www.wharton.upenn.edu/huntsmanhall/timeline/1965.html
+http://www.whartonjournal.com/news/2002/04/08/News/Career.Services.Top.Concern.In.First.Year.Survey-230061.shtml
+http://www.whatdoiknow.org/
+http://www.whateverhq.com/
+http://www.whateverpictures.com/shorts/orgasm.html
+http://www.whateverremains.com/
+http://www.whatissubud.net/whatissubud/about_bapak.html
+http://www.whatissubud.net/whatissubud/organisation.html
+http://www.whatisthis.com/archives/2005/05/index.php
+http://www.whatnextjournal.co.uk/Pages/History/Gibbons.html
+http://www.whatreallyhappened.com/ARTICLE1/overlooked.html
+http://www.whatreallyhappened.com/ARTICLE2/doodoo.html
+http://www.whatreallyhappened.com/ARTICLE5/
+http://www.whatreallyhappened.com/McCollum/
+http://www.whatreallyhappened.com/hundreds.html
+http://www.whatreallyhappened.com/iwasthere.html
+http://www.whatreallyhappened.com/paypal.html
+http://www.whatsup.com/experiment/
+http://www.whcoa.gov/about/whcoa_events.asp
+http://www.whcoa.gov/about/whcoa_events_pf.asp
+http://www.wheatlandfirerescue.com/index_files/Page1457.html
+http://www.wheelchairnet.org/WCN_Living/Docs/idea.html
+http://www.wheelchairnet.org/WCN_ProdServ/Products/adldev.html
+http://www.wheels24.co.za/Wheels24/NewModels/0,,1369-1374_1585663,00.html
+http://www.wheels24.co.za/Wheels24/Stay_alive/0,7427,1369-1617_1629457,00.html
+http://www.where-to-stay.co.uk/hotels/ah/birmingham-thistle-hotel-birmingham-city.html
+http://www.where-to-stay.co.uk/hotels/ah/brighton-sea-spray.html
+http://www.where-to-stay.co.uk/hotels/ah/cork-quality-hotel-&-leisure-centre-cork.html
+http://www.where-to-stay.co.uk/hotels/ah/glasgow-%5Bcity-south%5D-corus-hotel-glasgow.html
+http://www.where-to-stay.co.uk/hotels/ah/glasgow-%5Bcity-south%5D-quality-hotel-glasgow.html
+http://www.where-to-stay.co.uk/hotels/ah/great-barr-quality-hotel-birmingham-great-barr.html
+http://www.where-to-stay.co.uk/hotels/ah/horwich-de-vere-whites-hotel.html
+http://www.where-to-stay.co.uk/hotels/ah/pearse-street-trinity-capital-hotel.html
+http://www.where-to-stay.co.uk/hotels/ah/perth-new-county-hotel.html
+http://www.where-to-stay.co.uk/hotels/ah/rusholme-victoria-park-hotel.html
+http://www.where-to-stay.co.uk/hotels/ah/temple-bar-temple-bar-hotel.html
+http://www.where.ca/CanadianRockies/category_hottip.cfm?category_id=6
+http://www.where.ca/canadianrockies/category_hottip.cfm?category_id=6
+http://www.whereedmonton.com/DrivingTours/8-91.html
+http://www.whfoods.com/genpage.php?pfriendly=1&tname=diet&dbid=11
+http://www.whfoods.com/genpage.php?tname=diet&dbid=11
+http://www.whfoods.com/genpage.php?tname=diet&dbid=3
+http://www.whfoods.com/genpage.php?tname=diet&dbid=7
+http://www.whfoods.com/genpage.php?tname=george&dbid=59
+http://www.whfoods.com/genpage.php?tname=george&dbid=66
+http://www.whfreeman.com/generalreaders/book.asp?disc=&id_product=1149000075&compType=EXCER
+http://www.whhs.com/services/joint/Minimally+Invasive+Total+Knee+Replacement+Surgery.htm
+http://www.whhs.com/services/joint/replacement.htm
+http://www.whidbeygen.com/employ/servsupjobs.htm
+http://www.whileheavenwept.net/tour.htm
+http://www.whiotv.com/station/1916472/detail.html
+http://www.whiskeycreekpress.com/chapters/BrokenPromises_NancyAnnRose.shtml
+http://www.whiskeycreekpress.com/chapters/NothingLessThanLove_JanetMills.shtml
+http://www.whistling.com/about.html
+http://www.whitaker.org/sanders.html
+http://www.whitbyhs.cheshire.sch.uk/expupils/1960s.htm
+http://www.whitchurchcardiff.co.uk/discussHistory.htm
+http://www.whitedot.org/issue/iss_story.asp?slug=privacyattheyaleclub
+http://www.whiteestate.org/issues/last4books_2.html
+http://www.whitehorse.vic.gov.au/roadsafety.asp
+http://www.whitehouse.gov/OMB/legislative/sap/106-2/S2796-s.html
+http://www.whitehouse.gov/news/releases/2003/02/20030207-10.html
+http://www.whitehouse.gov/news/releases/2003/09/20030904-4.html
+http://www.whitehouse.gov/news/releases/2004/02/20040204-9.html
+http://www.whitehouse.gov/news/releases/2004/08/20040806-15.html
+http://www.whitehouse.gov/news/releases/2004/12/20041226.html
+http://www.whitehouse.gov/omb/budget/fy2004/defense.html
+http://www.whitehouse.gov/omb/circulars/a076/fair2000guide.html
+http://www.whitehouse.gov/omb/circulars/a131/a131.html
+http://www.whitehouse.gov/results/leadership/bush-card-200401-transcript.html
+http://www.whitehouse.gov/stateoftheunion/2005/
+http://www.whitehouse.org/firstlady/enron-crafts.asp
+http://www.whitehousedrugpolicy.gov/national_assembly/conference_proceed/session3.html
+http://www.whitehousehistory.org/04/subs/04_feature_b.html
+http://www.whitehousehistory.org/04/subs/activities_03/c02_13.html
+http://www.whitehousehistory.org/05/subs/05_b06.html
+http://www.whitemark.com/services.php
+http://www.whitemoving.com/access.htm
+http://www.whiteninjacomics.com/archive-news.shtml
+http://www.whitepinepictures.com/seeds/iii/32/history2.html
+http://www.whiterose.org/pete/blog/archives/004477.html
+http://www.whitestag.org/follow/sb102.htm
+http://www.whitetails.com/story39.html
+http://www.whiteville.tec.tn.us/financia.htm
+http://www.whitewms.com/FSL5CS/our%20offices/our%20offices13.asp
+http://www.whitfieldassembly.org/standing_for_truth.htm
+http://www.whitlam.org/its_time/2/Weary.html
+http://www.whitlam.org/its_time/20/volunteering.html
+http://www.whitlam.org/its_time/23/markham.html
+http://www.whitnall.com/district/employment.htm
+http://www.whitneybank.com/about/specials.check21.asp
+http://www.whittingtonpress.com/
+http://www.who.int/csr/disease/avian_influenza/avian_faqs/en/
+http://www.who.int/csr/sars/2003_03_25/en/
+http://www.who.int/csr/sars/archive/2003_05_19/en/
+http://www.who.int/dg/lee/speeches/2005/eb115_speech/en/
+http://www.who.int/entity/3by5/mediacentre/audio/en/
+http://www.who.int/entity/csr/disease/avian_influenza/avian_faqs/en/
+http://www.who.int/entity/hac/crises/idn/sitreps/2005/earthquake_08/en/
+http://www.who.int/entity/hac/events/tsunamiconf/final_presentation/en/
+http://www.who.int/entity/mediacentre/factsheets/fs225/en/
+http://www.who.int/entity/mediacentre/news/releases/2005/pr08/en/
+http://www.who.int/entity/mediacentre/news/releases/2005/pr25/en/
+http://www.who.int/foodsafety/publications/biotech/20questions/en/
+http://www.who.int/hpr/gs.press.release.shtml
+http://www.who.int/malaria
+http://www.who.int/mediacentre/news/releases/2004/pr74/en/
+http://www.who.int/mediacentre/news/releases/2004/pr83/en/
+http://www.who.int/mediacentre/releases/2003/pr20/en/
+http://www.who.int/mediacentre/releases/2003/pr27/en/
+http://www.who.int/medicines/organization/par/edl/trs/trs895.shtml
+http://www.who.int/ncd/vision2020_actionplan/documents/irc.htm
+http://www.who.int/reproductive-health/adolescent/annotated_bibliography/
+http://www.who.int/reproductive-health/hrp/SERG_TOR.en.html
+http://www.who.int/reproductive-health/impac/Clinical_Principles/Clinical_use_blood_C23_C33.html
+http://www.who.int/reproductive-health/publications/RHR_01_22/RHR_01_22_chap2.en.html
+http://www.who.int/reproductive-health/publications/msm_94_2/msm_94_2_5.html
+http://www.who.int/water_sanitation_health/hygiene/envsan/sanitchallenge/en/index2.html
+http://www.who.int/whr/2003/chapter7/en/index7.html
+http://www.whoi.edu/administration/dirres/funding/whoi_funding/Indep_Inter/ind_award_2002.html
+http://www.whoi.edu/science/PO/people/jprice/
+http://www.wholefoods.com/company/pr_02-01-05.html
+http://www.wholefoods.com/healthinfo/healthyheart.html
+http://www.wholehealtheducation.com/clinical/study.shtml
+http://www.wholehealthmd.com/print/view/1,1560,SU_10152,00.html
+http://www.wholehealthmd.com/refshelf/substances_view/1,1525,10152,00.html
+http://www.wholeheart.org/privacy.asp
+http://www.wholenote.com/fretbuzz/fbmsg.asp?i=326116&n=Instructional&t=5&th=326116
+http://www.wholesomewords.org/biography/bbunyan5.html
+http://www.wholesomewords.org/biography/bsundayma.html
+http://www.wholewheatradio.org/jbb/weblog.php?id=C0_2_1
+http://www.wholistichealingresearch.com/Articles/EnergyMed4Internist.htm
+http://www.whom.co.uk/jgf/jgf09.htm
+http://www.whonamedit.com/doctor.cfm/442.html
+http://www.whonamedit.com/doctor.cfm/871.html
+http://www.whoslying.org/index.php?option=content&task=view&id=176&Itemid=2
+http://www.whoslying.org/index.php?option=content&task=view&id=587
+http://www.whoslying.org/index2.php?option=content&task=view&id=587&pop=1&page=0
+http://www.whosoever.org/v3i1/piazza.html
+http://www.whowritesit.com/search/results.asp?qt=carrier&t=annuities&c=ImmediateAnn
+http://www.whptv.com/guides/parenting/story.aspx?content_id=DB6B88ED-2632-434F-8B4F-4838AF92F552
+http://www.whptv.com/sports/nfl/story.aspx?content_id=2F2B3CEA-0487-4A96-AC20-90EA6319F688
+http://www.whrc.org/carbon/
+http://www.whsc.on.ca/hazardmodules/heat&coldstress.html
+http://www.why-war.com/news/2004/10/04/ublsbiog.html
+http://www.whyaretheydead.net/krasel/aff_kates.html
+http://www.whyaretheydead.net/krasel/books/evans/sea.html
+http://www.whybiotech.com/index.asp?id=3638
+http://www.whycycle.co.uk/bbs/read.php?f=1&i=1951&t=1947
+http://www.whyy.org/91FM/ybyg/birds.html
+http://www.whyy.org/91FM/ybyg/soiltests2.html
+http://www.wi-fi.bz/wisp-providers.html
+http://www.wi-fiplanet.com/columns/article.php/1013361
+http://www.wi-fiplanet.com/news/article.php/3411061
+http://www.wi.mit.edu/news/archives/2005/cpa_0622.html
+http://www.wiannosenior.org/scudder.htm
+http://www.wic.org/misc/history.htm
+http://www.wiccauk.com/book-0007117868.php
+http://www.wiccauk.com/forums/showthread.php?t=12931
+http://www.wiccauk.com/forums/showthread.php?t=12931&page=1
+http://www.wiche.edu/MentalHealth/northland/topics.asp
+http://www.wichergardeninn.com/room-pics.html
+http://www.wichitagov.org/CityOffices/MunicipalCourt/Rules/Rule11.htm
+http://www.wickedtalent.com/menu.php?page=start
+http://www.wide-formatimaging.com/pages/issues/1998/97-06/cover.html
+http://www.widecombe-in-the-moor.com/wid_fair/widecombe_fair.htm
+http://www.wideeyedlearning.com/faqs.html
+http://www.widemouthmason.com/
+http://www.widerquist.com/karl/AIS.htm
+http://www.widowsrights.org/ctuespm.htm
+http://www.wifizonenews.com/publications/page207-1348229.asp
+http://www.wiganlatics.premiumtv.co.uk/page/UsefulInformation/0,,10429,00.html
+http://www.wiganmbc.gov.uk/pub/partnership/township/terms-of-ref.htm
+http://www.wiggin.com/pubs/alerts_template.asp?ID=737167212000
+http://www.wiggin.com/pubs/scupdate_template.asp?ID=11927712003
+http://www.wigglesntunes.com/ab_testimonials.html
+http://www.wigrum.com/15_pass_vans.html
+http://www.wigs4you.com/wig_advice.htm
+http://www.wiko-berlin.de/kolleg/wiko/wikostruktur/satzwisskolleg?hpl=2
+http://www.wilayah.ir/en/istifta/new.php
+http://www.wilbers.com/grants.htm
+http://www.wild-max.com/datingwild/howtoprofile.php
+http://www.wildaboutcats.org/regs.htm
+http://www.wildbell.com/0306.html
+http://www.wildbell.com/0528.html
+http://www.wildcalifornia.org/pages/page-171
+http://www.wildcalifornia.org/pages/page-51
+http://www.wildcat-www.de/en/zirkular/48/z48e_35h.htm
+http://www.wildcru.org/links/hwangelions/hwange_files/Page1364.htm
+http://www.wildeones.com/
+http://www.wilderdom.com/games/EnvironmentalActivities.html
+http://www.wildernessclassroom.com/www/jiime/index.shtm
+http://www.wildernessrhythms.com/article.html
+http://www.wildernessstudio.com/PortraitureInfo.html
+http://www.wildernesswatch.org/what%20is/steward.html
+http://www.wildfirenews.com/
+http://www.wildfirenews.com/fire/articles/fwx.html
+http://www.wildflowerwalks.co.nz/wildflowerwalks/oldmanrange.html
+http://www.wildfrontier.org/authority.htm
+http://www.wildideabuffalo.com/testimonials.html
+http://www.wildlandfire.com/docs/wlfterms.htm
+http://www.wildlandssouth.com/skills/seer.html
+http://www.wildlife-gardening.org.uk/default.asp?ftr=Features%5Czza%20principles.xml&full=true
+http://www.wildlife.state.nh.us/Hunting/Hunt_species/hunt_deer.htm
+http://www.wildlife.state.nh.us/Hunting/Hunt_species/turkey_hunt_survey_2002.htm
+http://www.wildlife.state.nh.us/Newsroom/newsroom.htm
+http://www.wildlife.utah.gov/uplandgame/walk-in_minutes/mins030701.htm
+http://www.wildlife.utah.gov/uplandgame/walk-in_minutes/mins501.htm
+http://www.wildlifebcnp.org/northants-bap/Open%20Standing%20Water.htm
+http://www.wildlifecrossings.info/glossaryg-l.htm
+http://www.wildlifedamagecontrol.com/used/videos.htm
+http://www.wildlifeinformation.org/Subdirectories_for_Search2/SampleTechs/FMDCarcass_Bury_Technique.htm
+http://www.wildlifeinformation.org/Subdirectories_for_Search2/sampleel/standards_of_zoo_practice/Appendix10.htm
+http://www.wildmanharrold.com/labor_library/FMLA.htm
+http://www.wildmed.com/international/georgia_villaflor.html
+http://www.wildnj.com/ld14.htm
+http://www.wildrockiesalliance.org/issues/wolves/articles/neverenough.html
+http://www.wildroots.org/
+http://www.wildsalmon.org/library/lib-detail.cfm?docID=54
+http://www.wildtracks.cihost.com/homewire/wg_ideas.html
+http://www.wildweather.com/news/news-archive-august.htm
+http://www.wildwoodmaples.com/pages/bark.html
+http://www.wiley.com/WileyCDA/WileyTitle/productCd-0471460613,descCd-description.html?print=true
+http://www.wiley.com/WileyCDA/WileyTitle/productCd-0471460613.html
+http://www.wilkie-collins.com/man-and-wife/book-page-53.asp
+http://www.willamette.edu/mat/students/handbook/
+http://www.willamette.edu/~oic/mexico.html
+http://www.willapadawn.org/bizlinks.htm
+http://www.willard.k12.mo.us/co/tech/new.htm
+http://www.willco.com/customers/
+http://www.willcountyillinois.com/human/eeostatement.htm
+http://www.william-shakespeare.info/william-shakespeare-biography-childhood-and-education.htm
+http://www.williamandrew.com/books.asp?id=89112121
+http://www.williambowles.info/ini/ini-0294.html
+http://www.williambowles.info/poems/writing/peonies_8.html
+http://www.williamgibsonbooks.com/blog/2004_10_01_archive.asp
+http://www.williamjames.com/Folklore/FIREWALK.htm
+http://www.williamkent.com/
+http://www.williamlashner.com/pulp/frisco_ho.asp
+http://www.williamluse.com/apologia/
+http://www.williammichaelian.com/book1/chapter1.html
+http://www.williammichaelian.com/book1/chapter2.html
+http://www.williammichaelian.com/book1/chapter3.html
+http://www.williammichaelian.com/stories/story12.html
+http://www.williampolley.com/blog/archives/2005/05/
+http://www.williamradice.com/Notes/foreword_to_paul_fleischman.htm
+http://www.williamrice.com/content/view/17/32
+http://www.williamrice.com/content/view/17/32/
+http://www.williams.edu/dean/oxford/academics-frame.htm
+http://www.williams.edu/wpehe/abstracts.html
+http://www.williamscottproperties.com/founder.html
+http://www.williamsmith.org/bonanzadeathwalked.html
+http://www.williamsutton.org.uk/energy.asp
+http://www.williecrawford.com/
+http://www.willisms.com/archives/2005/05/reform_thursday_16.html
+http://www.willitsell.com/mfgcost.htm
+http://www.willkeim.com/odyssey.html
+http://www.willseye.org/eye_diseases/symptoms_def.html
+http://www.willthomas.net/Convergence/Weekly/Leaving_America.htm
+http://www.wilmingtonblues.com/num_19/41_pssaturday.html
+http://www.wilmott.com/messageview.cfm?catid=10&threadid=28559&STARTPAGE=5
+http://www.wilmott.com/messageview.cfm?catid=11&threadid=7878
+http://www.wilson-nesbitt.co.uk/business5.htm
+http://www.wilson.edu/president/spc_all/spc_covenant.htm
+http://www.wilsonjo.demon.co.uk/haggis.htm
+http://www.wilsonmar.com/1projx.htm
+http://www.wilstea.com/ceylon.htm
+http://www.wilstea.com/stats.htm
+http://www.wilstea.com/teamanufacture.htm
+http://www.wilwheaton.net/index.php
+http://www.wilwheaton.net/mt/archives/000794.php
+http://www.wilwheaton.net/mt/archives/001550.php
+http://www.wilwheaton.net/mt/archives/001572.php
+http://www.wilwheaton.net/mt/archives/2003_09.php
+http://www.wimaxforum.org/tech
+http://www.wimbish.org.uk/business-listing.htm
+http://www.wimbledon.org/en_GB/news/interviews/2005-06-21/200506211119379747376.html
+http://www.wimra.org/cronin.htm
+http://www.win-magazine.com/active/archives/v11i8%20stuff/ABBOTT%20COL.html
+http://www.win-with-lynne.co.uk/
+http://www.win.tue.nl/cs/fm/engels/frc/
+http://www.win2000mag.com/Articles/Index.cfm?ArticleID=15722
+http://www.win4lin.com/phpBB2/viewtopic.php?p=9612&
+http://www.wincom.net/trog/diary/2003_profinale.html
+http://www.wind-works.org/articles/Overview.html
+http://www.wind-works.org/articles/USW01.html
+http://www.windbercare.com/planetree.html
+http://www.windermere.com/index.cfm?fuseaction=about.ContentFile&pg=WREAgentRepresentwyoming
+http://www.windfallrafting.com/experience/vacation-profiles.php
+http://www.windley.com/archives/2005/01/index.shtml
+http://www.windley.com/archives/2005/06/dont_send_word.shtml
+http://www.windmill.co.uk/monitor33.html
+http://www.windmillworld.com/windmills/industrial.htm
+http://www.windom-mn.com/newslettermarch2002.html
+http://www.window.state.tx.us/comptrol/fnotes/fn0106/fna.html
+http://www.window.state.tx.us/comptrol/fnotes/fn0111/keeping.html
+http://www.window.state.tx.us/etexas2001/recommend/ch00/intro.html
+http://www.window.state.tx.us/specialrpt/ctrma05/chptr4.html
+http://www.window.state.tx.us/specialrpt/hcc2003/section3/3study.html
+http://www.window.state.tx.us/specialrpt/homeeqty03/
+http://www.window.state.tx.us/taxinfo/audit/salestax/1e.htm
+http://www.window.state.tx.us/taxinfo/proptax/stmt/stmt0407/stmt0407_6.html
+http://www.window.state.tx.us/tspr/glenrose/ch04a.htm
+http://www.window.state.tx.us/tspr/sanangelo/ch07a.htm
+http://www.windows-experience.com/wip/articles/data/9311110192004.htm
+http://www.windowsdevcenter.com/pub/a/windows/2005/03/15/podcasting_pc.html
+http://www.windowsecurity.com/articles/Authorization-Manager-Role-Based-Administration-Windows-Server-2003-Part2.html
+http://www.windowsecurity.com/articles/What_You_Need_to_Know_About_Intrusion_Detection_Systems.html
+http://www.windowsecurity.com/articles/Why_is_a_firewall_alone_not_enough_What_are_IDSes_and_why_are_they_worth_having.html
+http://www.windowsitlibrary.com/Content/852/03/1.html
+http://www.windowsitpro.com/Windows/Article/ArticleID/21521/21521.html
+http://www.windowsitpro.com/Windows/Article/ArticleID/2859/2859.html
+http://www.windowsitpro.com/Windows/Article/ArticleID/4875/4875.html
+http://www.windowsitpro.com/Windows/Article/ArticleID/7077/7077.html
+http://www.windowsitpro.com/windowspaulthurrott/Article/ArticleID/46477/windowspaulthurrott_46477.html
+http://www.windowsmarketplace.com/prices.aspx?ItemId=2947
+http://www.windowsmarketplace.com/results.aspx?bcatid=271&minPrice=90&maxPrice=139
+http://www.windowsmarketplace.com/track/TrackResultClick.aspx?u=prices.aspx&p=0:0:4:515:779524:S:567:560:3:66:560:-1:-1:100:-1:1:7:-1:-1&stext=
+http://www.windowsnetworking.com/articles_tutorials/Beating-Summer-Heat.html
+http://www.windowsnetworking.com/articles_tutorials/Introduction-Wireless-Networking-Part3.html
+http://www.windowworldinc.com/products/energy_saving.shtml
+http://www.windpower-monthly.com/dec99/leader.htm
+http://www.windpower-monthly.com/feb03/abs.htm
+http://www.windridgeinternational.com/Assessment.htm
+http://www.windsofchange.net/archives/003071.php
+http://www.windsofchange.net/archives/005250.php
+http://www.windsofchange.net/archives/006694.php
+http://www.windsofchange.net/archives/006986.php
+http://www.windsofchange.net/archives/007004.php
+http://www.windsofchange.net/archives/007034.php
+http://www.windsofchange.net/archives/2002_04_14_woc.html
+http://www.windspeed.co.uk/ws/index.php/option=displaypage/Itemid=81/op=page/SubMenu=
+http://www.windspeed.co.uk/ws/index.php/option=displaypage/op=page/Itemid=81
+http://www.windsurfingsports.com/lessons.html
+http://www.windustry.com/basics/01-introduction.htm
+http://www.windweaver.com/nospam.htm
+http://www.windweaver.com/w95man3c.htm
+http://www.windycitymediagroup.com/gay/lesbian/news/ARTICLE.php?AID=6480
+http://www.windycitymediagroup.com/gay/lesbian/news/ARTICLE.php?AID=8665
+http://www.wine.telegraph.co.uk/wine/main.jhtml?xml=/wine/2005/02/05/edready03.xml&sSheet=/wine/2005/02/05/ixedfeatures.html
+http://www.winebusiness.com/specialsection/2005/top30uswinecompanies.cfm
+http://www.wineinstitute.org/communications/statistics/harvest2004.htm
+http://www.wineloverspage.com/natdecants/cider.phtml
+http://www.winemonthclub.com/newsletters/vol2no3.htm
+http://www.winemonthclub.com/testimonialswine.htm
+http://www.winentrance.com/cds2005.htm
+http://www.wineofthemonth.co.za/pages/best_value.jsp
+http://www.winepage.de/vintages.html
+http://www.winesenz.co.nz/archive.php3?grape_type=20
+http://www.wingchun.com.au/diploma.shtml
+http://www.wingkong.net/stories/story10.htm
+http://www.wingspress.com/Titles/hook.html
+http://www.wininsider.com/news/?6663
+http://www.wininsider.com/news/?7713
+http://www.wink.ssxh.net/archives/000160.html
+http://www.winktv.com/x11558.xml
+http://www.winmill.com/Principles.cfm
+http://www.winnersedgeonline.com/shawn-york.html
+http://www.winnetmag.com/Article/ArticleID/24208/24208.html
+http://www.winnetmag.com/Article/ArticleID/25194/25194.html
+http://www.winnetmag.com/Article/ArticleID/26472/26472.html
+http://www.winnetmag.com/Articles/Print.cfm?ArticleID=42787
+http://www.winnetmag.com/Windows/Article/ArticleID/22487/22487.html
+http://www.winnetmag.com/Windows/Article/ArticleID/26472/26472.html
+http://www.winnetmag.com/WindowsSecurity/Article/ArticleID/26472/WindowsSecurity_26472.html
+http://www.winnfelinehealth.org/health/rhinotracheitis.html
+http://www.winning-moves.com/affiliates/
+http://www.winning-resumes.com/winning_resume.htm
+http://www.winningwriters.com/warningsigns.htm
+http://www.winnipegfreepress.com/westview/story/2610442p-3026695c.html
+http://www.winonadailynews.com/articles/2005/06/05/news/00lead.txt
+http://www.winplanet.com/article/1640-3540.htm
+http://www.winplanet.com/article/2497-.htm
+http://www.winrosevet.com/Pet_Loss_PetGrief1.htm
+http://www.wins-news.com/zoning_watch/
+http://www.winsportinggoods.com/rules.php3
+http://www.winstonbrill.com/bril001/html/article_index/articles/351-400/article356_body.html
+http://www.winstonbrill.com/bril001/html/article_index/articles/401-450/article414_body.html
+http://www.winstonbrill.com/bril001/html/article_index/articles/501-550/article532_body.html
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=146
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=168
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=364
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=53
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=611
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=635
+http://www.winstonchurchill.org/i4a/pages/index.cfm?pageid=678
+http://www.winstonchurchilltennis.ca/teams.htm
+http://www.winstructor.com/videos/server2003/creating_user_accounts_automation.htm
+http://www.winsupersite.com/reviews/longhorn_4051_01_intro.asp
+http://www.winsupersite.com/reviews/longhorn_4051_04_ue.asp
+http://www.winsupersite.com/showcase/ie_no_more2.asp
+http://www.winterwar.com/Battles/Suomussalmi2.htm
+http://www.winthrop.edu/wcenter/handoutsandlinks/rogerian.htm
+http://www.winticket.com/newsletters/101803_news.htm
+http://www.winxpnews.com/index.cfm?id=158
+http://www.wipo.org/about-ip/en/studies/publications/genetic_resources.htm
+http://www.wipo.org/academy/en/courses/professional_training/
+http://www.wipo.org/documents/en/document/govbody/wo_gb_cc/cc45_1.htm
+http://www.wipo.org/treaties/en/classification/nice/trtdocs_wo019.html
+http://www.wipo.org/wilma/pressinfo-en/200405/msg00008.html
+http://www.wipphone.com/terms.aspx
+http://www.wiprogram.org/journals01/sloan01/shell.html
+http://www.wired.com/news/conflict/0,2100,58346,00.html
+http://www.wired.com/news/culture/0,1284,55446,00.html
+http://www.wired.com/news/culture/0,1284,62808,00.html?tw=wn_story_related
+http://www.wired.com/news/culture/0,1284,63733,00.html
+http://www.wired.com/news/culture/0,1284,63733,00.html?tw=newsletter_topstories_html
+http://www.wired.com/news/culture/0,1284,65365,00.html
+http://www.wired.com/news/culture/0,1284,65688,00.html
+http://www.wired.com/news/culture/0,1284,67869,00.html
+http://www.wired.com/news/digiwood/0,1412,44183,00.html?tw=wn_story_related
+http://www.wired.com/news/evote/0,2645,65535,00.html
+http://www.wired.com/news/games/0,2101,63415,00.html
+http://www.wired.com/news/games/0,2101,63415,00.html?tw=wn_story_related
+http://www.wired.com/news/games/0,2101,65052,00.html?tw=wn_tophead_3
+http://www.wired.com/news/gizmos/0,1452,62810,00.html
+http://www.wired.com/news/infostructure/0,1377,57753,00.html
+http://www.wired.com/news/infostructure/0,1377,61257,00.html
+http://www.wired.com/news/infostructure/0,1377,62251,00.html
+http://www.wired.com/news/infostructure/0,1377,64075,00.html
+http://www.wired.com/news/mac/0,2125,64614,00.html
+http://www.wired.com/news/mac/0,2125,64614,00.html?tw=wn_story_page_prev2
+http://www.wired.com/news/medtech/0,1286,61342,00.html?tw=wn_story_related
+http://www.wired.com/news/planet/0,2782,67075,00.html
+http://www.wired.com/news/print/0,1294,64492,00.html
+http://www.wired.com/news/print/0,1294,66259,00.html
+http://www.wired.com/news/print/0,1294,67988,00.html
+http://www.wired.com/news/privacy/0,1848,57404,00.html
+http://www.wired.com/news/technology/0,1282,12425,00.html
+http://www.wired.com/news/technology/0,1282,52851,00.html?tw=wn_story_related
+http://www.wired.com/news/technology/0,1282,59093,00.html
+http://www.wired.com/news/technology/0,1282,59093,00.html?tw=wn_story_related
+http://www.wired.com/news/technology/0,1282,59873,00.html
+http://www.wired.com/news/technology/0,1282,63066,00.html?tw=wn_story_related
+http://www.wired.com/news/technology/0,1282,63613,00.html?tw=wn_story_related
+http://www.wired.com/news/technology/0,1282,64194,00.html
+http://www.wired.com/news/technology/0,1282,65668,00.html
+http://www.wired.com/news/wireless/0,1382,58011,00.html
+http://www.wired.com/wired/archive/10.07/nixon.html
+http://www.wired.com/wired/archive/10.09/vision_pr.html
+http://www.wired.com/wired/archive/10.10/kidporn.html
+http://www.wired.com/wired/archive/10.10/wireless.html
+http://www.wired.com/wired/archive/10.10/wireless.html?pg=1
+http://www.wired.com/wired/archive/10.12/holytech.html
+http://www.wired.com/wired/archive/11.04/hydrogen.html
+http://www.wired.com/wired/archive/11.08/pwr_antigravity.html
+http://www.wired.com/wired/archive/12.06/view_pr.html
+http://www.wired.com/wired/archive/12.09/warroom.html
+http://www.wired.com/wired/archive/12.10/tail_pr.html
+http://www.wired.com/wired/archive/2.08/streetcred.html?pg=10
+http://www.wired.com/wired/archive/2.12/linklater.html
+http://www.wired.com/wired/archive/3.04/pear.html
+http://www.wired.com/wired/archive/3.10/updata.html
+http://www.wired.com/wired/archive/6.10/tesla.html
+http://www.wired.com/wired/archive/6.11/coldfusion.html
+http://www.wired.com/wired/archive/7.12/struve.html
+http://www.wired.com/wired/archive/8.01/solar.html
+http://www.wired.com/wired/archive/8.01/teleport.html?pg=3
+http://www.wired.com/wired/archive/8.04/joy.html
+http://www.wired.com/wired/archive/8.06/newmoney.html
+http://www.wired.com/wired/archive/8.08/mustread.html?pg=7
+http://www.wired.com/wired/archive/9.07/moon.html
+http://www.wired.com/wired/archive/9.08/mustread.html?pg=7
+http://www.wired.com/wired/archive/9.10/google.html
+http://www.wiredguide.com/justforfun.htm
+http://www.wiredmoon.com/casestudies_sw/
+http://www.wirednewyork.com/forum/archive/index.php?t-3625.html
+http://www.wireless--lan.com/jobs_and_employment.html
+http://www.wireless-doc.com/BKMDblog/2003_12_27_bkmd_archive.html
+http://www.wirelessadvisor.com/waforums/messageview.cfm?catid=21&threadid=38705
+http://www.wirelessadvisor.com/waforums/messageview.cfm?catid=21&threadid=38705&STARTPAGE=1
+http://www.wirelessgeneva.com/pages/display.asp?article_section=mobiledata&file_name=Feat_10.XML
+http://www.wirelessweek.com/article/CA510490.html?text=lowenstein&stt=001
+http://www.wireviews.com/lyrics/one_of_our_girls.html
+http://www.wiringfordcc.com/garden.htm
+http://www.wirral.gov.uk/ed/youth_service.htm
+http://www.wirz.de/music/booker.htm
+http://www.wisa.org.uk/cgi/l/articles/index.cgi?action=show&id=444
+http://www.wisbech-standard.co.uk/
+http://www.wisc.edu/chicanastudies/course-list.html
+http://www.wisc.edu/uwcc/info/iowa.html
+http://www.wischik.com/lu/massage/ljwinstruct.html
+http://www.wischik.com/marcus/essay/med2.html
+http://www.wisconline.com/cgi-bin/find.pl?t=dat&date=2005-03-21
+http://www.wisconsin-mortgage-loan.net/
+http://www.wisconsinhistory.org/genealogy/ogrs/terms.asp
+http://www.wisconsinhistory.org/teachers/lessons/secondary/abolitionist.asp
+http://www.wisconsinhistory.org/wmh/articles/carstensen.asp
+http://www.wisconsinhistory.org/wmh/articles/cartensen.asp
+http://www.wisconsinite.net/dairyconspiracyarchives/000378.html
+http://www.wisconsinpublicservice.com/business/bsa_01.asp
+http://www.wisctowns.com/what_is_a_town.html
+http://www.wisd.us/departments/districtlibraryservices/isl.html
+http://www.wisdomquotes.com/cat_winning.html
+http://www.wise-women.org/features/nathalie_lachance/
+http://www.wise.com/press.asp?PressID=70
+http://www.wisemans.com.au/index.cfm/p/packages
+http://www.wisemenpromotions.com/News%20and%20updates/weapons.htm
+http://www.wisha.org/conf_workshop.php
+http://www.wishard.edu/internet/polyheme.htm
+http://www.wishduck.com/releases/infintyplus.html
+http://www.wisinfo.com/elections/ele_14576155.shtml
+http://www.wisn.com/
+http://www.wistv.com/Global/story.asp?S=2714032&nav=0RaSFtgC
+http://www.witchvox.com/
+http://www.witchvox.com/passages/farrar02.html
+http://www.witchvox.com/qotw/qwp_detail.html?id=42
+http://www.witchvox.com/qotw/qwp_detail.html?offset=0&id=42
+http://www.witchvox.com/white/w_ccl_federal.html
+http://www.withknobson.com/acatalog/Prime_beech_worktops.html
+http://www.witi.com/center/regionalchapter/
+http://www.wiu.edu/users/mfb100/evolution.htm
+http://www.wizardofodds.com/baccarat
+http://www.wizardofodds.com/baccarat/
+http://www.wizards.com/default.asp?x=ah/article/ah20040428a
+http://www.wizards.com/default.asp?x=books/dl/riseistar
+http://www.wizards.com/default.asp?x=d20modern/article/20020723a
+http://www.wizards.com/default.asp?x=dnd/ebug/20050110a
+http://www.wizards.com/default.asp?x=gijoetcg/article/decksbudget1
+http://www.wizards.com/default.asp?x=judge/article/20050330a
+http://www.wizards.com/default.asp?x=magic/magiconline/playcheap02
+http://www.wizards.com/default.asp?x=mtgcom/daily/as30
+http://www.wizards.com/default.asp?x=mtgcom/daily/rh71
+http://www.wizards.com/default.asp?x=mtgcom/daily/rh71,,de
+http://www.wizards.com/default.asp?x=mtgcom/daily/rh71,,fr
+http://www.wizards.com/default.asp?x=mtgcom/daily/sw18
+http://www.wizards.com/default.asp?x=mtgcom/daily/sw2
+http://www.wizards.com/default.asp?x=mtgcom/daily/sw36
+http://www.wizards.com/default.asp?x=mtgcom/daily/sw69
+http://www.wizards.com/default.asp?x=mtgcom/feature/233
+http://www.wizards.com/default.asp?x=mtgcom/feature/249
+http://www.wizards.com/default.asp?x=starwars/article/sw20040916counseling
+http://www.wizards.com/default.asp?x=starwars/article/sw20050407a
+http://www.wjinst.com/management.htm
+http://www.wkbt.com/Global/story.asp?S=1788890
+http://www.wkrn.com/Global/story.asp?S=2768967&nav=1ugQUrFF
+http://www.wksu.org/news/story/18206
+http://www.wku.edu/geoweb/info/geogram99.htm
+http://www.wku.edu/~jan.garrett/philvws.htm
+http://www.wku.edu/~smithch/wallace/FAQ.htm
+http://www.wku.edu/~smithch/wallace/S306.htm
+http://www.wku.edu/~smithch/wallace/S724CH15.htm
+http://www.wldcup.com/arch11112001Jun.html
+http://www.wls.wels.net/Publications/Theologia/vol3no3/DayloPostmodern/DayloPostmodern.htm
+http://www.wlshistory.com/WLS20/
+http://www.wm-e-shop.com/articles.php/tPath/5
+http://www.wm.edu/oieahc/uncommon/118/adventures.htm
+http://www.wm.edu/so/yogaclub/helenemails.html
+http://www.wm.edu/ttac/articles/challenging/response.html
+http://www.wmata.com/about/MET_NEWS/PressReleaseDetail.cfm?ReleaseID=555
+http://www.wmata.com/metrorail/Stations/station.cfm?station=25
+http://www.wmata.com/metrorail/Stations/station.cfm?station=80
+http://www.wmblair.com/Pages/spotlight_payoff.asp?uid=763
+http://www.wmblair.com/pages/spotlight_payoff.asp?uid=763
+http://www.wmcarey.edu/carey/wmward/Main%20html/seram07.html
+http://www.wmcstations.com/Global/story.asp?S=1065211
+http://www.wmi.org/bassfish/articles/T176.htm
+http://www.wmich.edu/ethics/ESC/lesson12.html
+http://www.wmich.edu/hhs/Newslettersjournals/jssw/31-4.html
+http://www.wmich.edu/medieval/mip/books/docprac.htm
+http://www.wmich.edu/teachlearn/new/self_eval_tch.htm
+http://www.wmin.ac.uk/mad/page-622
+http://www.wmld.com/tech/wierdg3.html
+http://www.wmm.com/_reslinks/links.htm
+http://www.wmo.ch/web/homs/documents/english/icwedece.html
+http://www.wmo.ch/web/homs/projects/whycos.html
+http://www.wmo.ch/wmo50/e/wmo/today_pages/edu_and_train_e.html
+http://www.wmrc.uiuc.edu/main_sections/info_services/library_docs/manuals/finishing/design.htm
+http://www.wmrls.org/services/colldev/weed_it.html
+http://www.wmueller.com/precalculus/functions/3_7.html
+http://www.wn.com/p/e5/d5a27d9658e60f.html
+http://www.wnba.com/draft2005/whogoesfirst.html
+http://www.wnba.com/news/east_coaches_teleconference_0505.html
+http://www.wnbc.com/
+http://www.wnc-village.com/arts/application.htm
+http://www.wnd.com/news/archives.asp?AUTHOR_ID=134&PAGE=50
+http://www.wnd.com/news/article.asp?ARTICLE_ID=25730
+http://www.wnd.com/news/article.asp?ARTICLE_ID=28435
+http://www.wndu.com/news/062005/news_43113.php
+http://www.wnmu.edu/admin/studentaff/newpages/HealthMASA/faq.htm
+http://www.wnrmag.com/stories/1997/dec97/xtree.htm
+http://www.wnyc.org/about/c_a_b_min_03-2003.html
+http://www.wnyc.org/books/1324
+http://www.wnyc.org/books/29529
+http://www.wnyc.org/books/3502
+http://www.wnyc.org/books/5158
+http://www.wnyc.org/news/articles/36947
+http://www.wnyc.org/news/articles/47023
+http://www.wnyc.org/shows/lopate/archive.html?month=200310
+http://www.wnyc.org/shows/soundcheck/archive.html?month=200307
+http://www.woai.com/troubleshooters/story.aspx?content_id=7FED3931-859B-45FA-BBC0-23E2587D0ED1
+http://www.woatusa.org/CAT/catreport/arms.html
+http://www.wockhardthospitals.com/eye_diseases.html
+http://www.wodc.org/files/tt1998/Chapter%203.htm
+http://www.wodfriends.org/
+http://www.wofs.com/fsw.php?c=aunt_agga
+http://www.wofs.com/fsw.php?load=arcview&article=598&c=landscape_feng_shui
+http://www.wogameandfish.com/hunting/wo_aa125603a/
+http://www.wohl.com/wa0018.htm
+http://www.wohlersassociates.com/Interesting-and-Helpful-Places.html
+http://www.wohlforth.net/discus/messages/6/178.html?1106679086
+http://www.woking.gov.uk/environment/tips
+http://www.wolfandco.com/media/articles/nowtime.htm
+http://www.wolfarmouries.co.uk/airsoft/bb/gun.asp?page=faq
+http://www.wolfdogs.org/humane.htm
+http://www.wolfmoonpress.com/Essays/perspectives2.htm
+http://www.wolfpark.org/memoriam_Ursa.html
+http://www.wolfram.demon.co.uk/rp_ch_lo_no_4_07.html
+http://www.wolfruning.com/storytel.htm
+http://www.wolfson.ox.ac.uk/college/arms/
+http://www.wolvescivic.co.uk/gigs/inme.htm
+http://www.wombatfile.com/archives/356.html
+http://www.wombatnation.com/
+http://www.womcom.org/chapterinfo/Leadership.html
+http://www.women.tas.gov.au/significantwomen/search/harriett_margaret_james.html
+http://www.women24.com/W24/Experts/W24Experts/0,10652,,00.html
+http://www.women24.com/Women24/Glamour/Beauty/Article/0,7173,1-6-7-48_6051,00.html
+http://www.womenandinfants.com/body.cfm?id=376
+http://www.womenatwork.co.za/home-business-articles/how-a-change-in-perspective-can-help-you-make-more-holida.html
+http://www.womenatworknetwork.com/kudos.html
+http://www.womenhunters.com/right-direction-claudia.html
+http://www.womeninblack.org.uk/London.htm
+http://www.womeningreen.org/
+http://www.womeninphotography.org/archive09-Jan02/gallery/f2/marketing.html
+http://www.womenmatter.com/health_whatstheproblem.htm
+http://www.womenof.com/Articles/fc021698.asp
+http://www.womenoftheelca.org/cafe/issue0202/printpage.html
+http://www.womenrussia.com/american.htm
+http://www.womenrussia.com/antiscam.htm
+http://www.womenrussia.com/blackpage132.htm
+http://www.womenrussia.com/contest4.htm
+http://www.womenrussia.com/extopfaq3.htm
+http://www.womenrussia.com/mail_order_brides/russian.htm
+http://www.womenrussia.com/russianwomen/escape.htm
+http://www.womens-health-concern.org/
+http://www.womens-health.co.uk/pain.asp
+http://www.womens-health.org.nz/publications/books/ART.htm
+http://www.womensaid.org.uk/policy&consultations/briefings/immigration/immigration.htm
+http://www.womensbaseball.com/annies-story.htm
+http://www.womenscenter.gatech.edu/archives/9-1-04.htm
+http://www.womensedge.org/pages/referencematerials/reference_material.jsp?id=121
+http://www.womensenews.org/article.cfm/dyn/aid/2125/context/archive
+http://www.womensenews.org/article.cfm?aid=399&mode=today
+http://www.womenshealthtoday.org/dvtopic.asp
+http://www.womensheartfoundation.org/content/HeartDisease/alcohol_and_heart_disease.asp
+http://www.womenslegalnsw.asn.au/W&FL%201%20General%20information.htm
+http://www.womensmemorial.org/historyandcollections/oralhistory/ohfinnicum.html
+http://www.womensoaring.org/elections.html
+http://www.womensrefuge.org.nz/need_help01.asp
+http://www.womensrogaine.com/happening.asp
+http://www.womentodaymagazine.com/beauty/plus_size.html
+http://www.womentowomen.com/LIBholidaypresence.asp
+http://www.womentowomen.com/womensstories.asp
+http://www.womenwarpeace.org/iraq/iraq2.htm
+http://www.womenwritersblock.com/katecc7.htm
+http://www.wonderfuldreams.me.uk/oxfordtt98
+http://www.wonderlane.com/onetrickbusiness.html
+http://www.wonderpuppy.net/canwehelp/chickendog.htm
+http://www.wondertouch.com/tutorials/sparkles_from_scratch/sparkles.htm
+http://www.wondertrail.com/Merchant2/merchant.mvc?page=W/CTGY/Megatech_Parts
+http://www.wondertrail.com/RC_Models/Megatech_Parts/index.shtml
+http://www.wondertrail.com/RC_Models/RC_Model_Batteries/index.shtml
+http://www.wonkette.com/politics/culture-war/index.php
+http://www.wonkette.com/politics/dc/index.php
+http://www.wonkette.com/politics/hill/index.php
+http://www.wonkette.com/politics/patriotism/index.php
+http://www.wonkette.com/politics/personalities/index.php
+http://www.wonuc.org/
+http://www.woodbinehoteltexas.com/history.html
+http://www.woodbinehouse.com/whatsnew.asp
+http://www.woodcentral.com/
+http://www.woodenski.com/2neat/journals/gsabulletin.htm
+http://www.woodfloordoctor.com/_product_reviews/articles/primatech.shtml
+http://www.woodfloorsonline.com/techtalk/techline2.html
+http://www.woodfloorsonline.com/techtalk/woodctgrd.html
+http://www.woodfloorsonline.com/techtalk/woodfloor_grades_cuts.html
+http://www.woodlander.co.uk/woodland/dcfquest.htm
+http://www.woodlandvillagehomes.com/planning.details.html
+http://www.woodmac.com/news.htm
+http://www.woodrow.org/teachers/bi/1998/presentations/geisler/
+http://www.woodrow.org/teachers/chemistry/institutes/1992/Dalton.html
+http://www.woods.co.uk/faqs.asp
+http://www.woodsonlodge.com/faq.htm
+http://www.woodsounds.net/flutepagetext.html
+http://www.woodweb.com/knowledge_base/Compressed_air_delivery_system.html
+http://www.woodweb.com/knowledge_base/Moving_to_Metric.html
+http://www.woodweb.com/knowledge_base/Raised_panel_wainscot.html
+http://www.woodweb.com/knowledge_base/Solar_kilns__putting_it_all_together.html
+http://www.woodworkersauction.com/Christmas/giftskids6.htm
+http://www.woodworkersjournal.com/ezine/archive/73/qanda.cfm
+http://www.woodworkersworkshop.com/resources/index.php?cat=412
+http://www.woodyguthrie.org/foundation/archivesactivities.htm
+http://www.woodyswatch.com/office/archtemplate.asp?v4-n03
+http://www.woodyswatch.com/office/archtemplate.asp?v6-n17
+http://www.woohu.com/~onceagainistandalone/back/30/
+http://www.woohu.com/~onceagainistandalone/friends/back/15/
+http://www.woolpert.com/asp/articles/FirmUpFloodMaps.asp
+http://www.woomb.org/bom/lit/teach/indicators.shtml
+http://www.wooster.edu/artfuldodge/interviews/laughlin.htm
+http://www.wooster.edu/jsaf/
+http://www.worcestershire.gov.uk/home/cs-social-childrenandfamilies/cs-social-cf-adoption/cs-social-cf-adoption-letterbox.htm
+http://www.worcestershire.gov.uk/home/text/cs-social-childrenandfamilies/cs-social-cf-adoption/cs-social-cf-adoption-letterbox.htm
+http://www.word-detective.com/032602.html
+http://www.word-detective.com/060704.html
+http://www.word-detective.com/091801.html
+http://www.word-detective.com/092403.html
+http://www.word-detective.com/121603.html
+http://www.word-detective.com/back-l2.html
+http://www.word-for-word.co.uk/
+http://www.word-for-word.co.uk/pages/faqs.html
+http://www.wordboosters.com/more/
+http://www.wordos.com/bruce.htm
+http://www.wordpower.ws/grammar/gramex11.html
+http://www.words-worth.de/robin/2003_10_01_archive.php
+http://www.wordswithoutborders.org/article.php?lab=Friends
+http://www.wordswithoutborders.org/article.php?lab=TrueCalling
+http://www.wordswithoutborders.org/article.php?lab=Vargas
+http://www.wordsworth2.net/projects/forces/ceiling.htm
+http://www.wordtravels.com/Cities/Louisiana/New+Orleans/Attractions
+http://www.wordtravels.com/Resorts/Austria/The+Alps/Saalbach
+http://www.wordtravels.com/Resorts/Austria/The+Alps/St+Anton
+http://www.wordtravels.com/Ski-Resorts/Austria/The+Alps/St+Anton
+http://www.work-at-home-index.net/featurearticle1286.html
+http://www.work-at-home-index.net/featurearticle188.html
+http://www.work-at-home-net-guides.com/articles/2004-record-online-holiday-shopping-season.html
+http://www.work-at-home-net-guides.com/work-from-home.html
+http://www.work-at-home-parents.com/Article60.html
+http://www.work-at-home-parents.com/Category10-All.html
+http://www.work-at-home-parents.com/Category10.html
+http://www.workaholics4hire.com/report.htm
+http://www.workdayminnesota.org/
+http://www.workdayminnesota.org/permanent/working_life/history/advocate_series/james2.php
+http://www.workersadvicecenter.org/With-Gazan-workers.htm
+http://www.workersforjesus.com/f25-14.htm
+http://www.workersliberty.org/comment/reply/1305
+http://www.workersliberty.org/node/view/4232
+http://www.workersliberty.org/node/view/953
+http://www.workersolidarity.org/union3.html
+http://www.workersolidarity.org/unionshop.htm
+http://www.workfirst.wa.gov/eitc/worker.htm
+http://www.workforce.com/archive/feature/22/17/10/223931.php
+http://www.workforce.com/section/11/feature/23/71/79/
+http://www.workforceatm.org/articles/template.cfm?results_art_filename=tx_newyears.htm
+http://www.workgateways.com/working-uk-visas.html
+http://www.workindex.com/editorial/hre/hre0105-13.asp
+http://www.workindex.com/editorial/train/trn0208-02.asp
+http://www.workinfo.com/EconHist/ireland.htm
+http://www.workinfo.com/free/Downloads/294.htm
+http://www.workinfo.com/free/Sub_for_legres/Data/991012apclabour.htm
+http://www.workinfo.com/free/Sub_for_legres/Data/991012pclabour.htm
+http://www.working-minds.com/WM2003b.htm
+http://www.workingamerica.org/privacypolicy.cfm
+http://www.workingartist.com/Q1011.html
+http://www.workingdogs.com/links.htm
+http://www.workingdogweb.com/RSH-Home.htm
+http://www.workingforchange.com/article.cfm?ItemID=11432
+http://www.workingforchange.com/article.cfm?ItemID=12607
+http://www.workingforchange.com/article.cfm?ItemID=13014
+http://www.workingforchange.com/article.cfm?ItemID=15250
+http://www.workingforchange.com/article.cfm?ItemID=16326
+http://www.workingforchange.com/article.cfm?ItemID=18048
+http://www.workingfortheman.com/train2.html
+http://www.workingin-newzealand.com/occupations/1095
+http://www.workingmother.com/mar05_mainstory.html
+http://www.workingpitbull.com/dogfighting.htm
+http://www.workingpsychology.com/cultdef.html
+http://www.workoninternet.com/article_432.html
+http://www.workoninternet.com/topic_1.html
+http://www.workoninternet.com/topic_4.html
+http://www.workonwords.com/alintentions.html
+http://www.workoptions.com/ask.htm
+http://www.workoptions.com/maternityleave-flexsucc.htm
+http://www.workoutsforwomen.com/pressr_fitness_makeover.asp
+http://www.workpace.com/NEWS_18_11_2004_EN
+http://www.workpermit.com/us/employer_h-1b.htm
+http://www.workplace-gsc.com/workplace2-1/forum.html
+http://www.workplacefairness.org/pblog.php
+http://www.workplacelaw.net/forum/thread.php?thread_id=670
+http://www.workplacespirituality.info/article1029.html
+http://www.workrights.ca/NR/exeres/CA2C1D9A-48C0-4BA6-A514-0F098BD078D3,82BDBE6F-284F-468B-842E-82E8742B94BF,frameless.htm
+http://www.workrights.ca/Work+Time/juris/Weekly+Hours+and+overtime_BC.htm
+http://www.workrightspress.com/workerscompch1.html
+http://www.worksafesask.ca/files/ont_wsib/certmanual/ch_16.html
+http://www.worksmartontario.gov.on.ca/scripts/default.asp?contentID=7-1-2&mcategory=health
+http://www.worksourcefl.com/job_seekers/JobSearchTips.asp?News=134
+http://www.worktrauma.org/change/definitions.htm
+http://www.workwithus.org/
+http://www.world-action.co.uk/radar.html
+http://www.world-famous.com/DavidHamelStuff/Hamel-Pauls.html
+http://www.world-heavyweight-boxing.com/
+http://www.world-nuclear.org/dgspeeches/eef2003.htm
+http://www.world-nuclear.org/info/chernobyl/inf07.htm
+http://www.world-nuclear.org/info/inf12.htm
+http://www.world-nuclear.org/opinion/domenici.htm
+http://www.world-nuclear.org/opinion/eef-ritch.htm
+http://www.world-nuclear.org/opinion/eia_reactors.htm
+http://www.world-nuclear.org/opinion/ingham_040604.htm
+http://www.world-nuclear.org/sym/2004/forsstrom.htm
+http://www.world-nuclear.org/waste/report99/chapter2.htm
+http://www.world-productions.com/outlaws/pages/behind_the_scenes/writers_room/the_brave_new_3.htm
+http://www.world-wide-art.com/art/shpg1020050119172632ctvasku20041112160343/artworkResults.html
+http://www.world-wide-art.com/art/shpg1020050119174349ctvasku20041112160343/artworkResults.html
+http://www.world-wide-art.com/art/shpg1020050204013107ctvasku20041112160343/artworkResults.html
+http://www.world-wide-art.com/art/shpg1107491397476928ctvasku20040314150230/artworkResults.html
+http://www.world-wide-art.com/art/shpg1107491397476928ctvasku20040924165138/artworkResults.html
+http://www.world-wide-art.com/art/shpg1107491397476928ctvasku20040924165428/artworkResults.html
+http://www.world-wide-art.com/art/shpg1107491397476928ctvasku20040924165502/artworkResults.html
+http://www.world-wide-art.com/art/shpg322913197978190ctvasku20041112160343/artworkResults.html
+http://www.worldaffairspittsburgh.org/CalendarMain.html
+http://www.worldalmanac.com/200305WAE-Newsletter.html
+http://www.worldandi.com/newhome/public/2003/august/nspub2.asp
+http://www.worldandi.com/public/1988/september/mt6.cfm
+http://www.worldatlas.com/webimage/countrys/asia/ir.htm
+http://www.worldatlas.com/webimage/countrys/namerica/us.htm
+http://www.worldatlas.com/webimage/countrys/namerica/usstates/hi.htm
+http://www.worldatlas.com/webimage/flags/countrys/assorted/xmasisl.htm
+http://www.worldbank.org/data/wdi2005/wditext/Section3_1.htm
+http://www.worldbank.org/depweb/english/beyond/global/chapter14.html
+http://www.worldbank.org/depweb/english/modules/economic/gnp/texta.html
+http://www.worldbank.org/depweb/english/modules/glossary.html
+http://www.worldbank.org/depweb/english/teach/pgr.html
+http://www.worldbank.org/html/fpd/energy/geothermal/
+http://www.worldbank.org/lsms/research/country4.html
+http://www.worldbank.org/lsms/tools/povcal/
+http://www.worldbank.org/nipr/onthenet.htm
+http://www.worldbank.org/nipr/polmod.htm
+http://www.worldbank.org/nipr/work_paper/nipr2/
+http://www.worldbank.org/nipr/work_paper/toxic/
+http://www.worldbank.org/research/peg/wps14/indexp4.htm
+http://www.worldbank.org/research/trade/majoract.htm
+http://www.worldbank.org/watsan/
+http://www.worldbank.org/wbi/cases/consult.html
+http://www.worldbankpresident.org/
+http://www.worldbankpresident.org/archives/2005_01.php
+http://www.worldbasesuppliers.com/technical-support-vision-20-20-plus.html
+http://www.worldbasesuppliers.com/technical-support-vm-4000-plus.html
+http://www.worldblues.com/bbking/prairie/singles.html
+http://www.worldcarfree.net/conference/manual.php
+http://www.worldcargoalliance.com/Library/globaldata/Acronyms/s.htm
+http://www.worldchanging.com/
+http://www.worldchanging.com/archives/000151.html
+http://www.worldchanging.com/archives/000189.html
+http://www.worldchanging.com/archives/000509.html
+http://www.worldchanging.com/archives/000675.html
+http://www.worldchanging.com/archives/000818.html
+http://www.worldchanging.com/archives/001246.html
+http://www.worldchanging.com/archives/001387.html
+http://www.worldchanging.com/archives/001967.html
+http://www.worldchanging.com/archives/002638.html
+http://www.worldchanging.com/archives/002951.html
+http://www.worldchiropracticalliance.org/tcj/2000/apr/apr2000m.htm
+http://www.worldchiropracticalliance.org/tcj/2003/feb/feb2003mertz.htm
+http://www.worldcongress.org/wcf2_spkrs/wcf2_tadad.htm
+http://www.worldcourts.com/echr/eng/decisions/2002.04.23_Zhelezov_eng.htm
+http://www.worldcupofboxing.com/news/05010503.html
+http://www.worlddreamspeacebridge.org/updatesarchieves/june2004.htm
+http://www.worlded.org/us/health/heal/teacherinterview.htm
+http://www.worldenable.net/standardrules/part1.htm
+http://www.worldenergy.org/wec-geis/edc/countries/Italy.asp
+http://www.worldenergy.org/wec-geis/publications/default/tech_papers/17th_congress/1_1_17.asp
+http://www.worldenergy.org/wec-geis/publications/reports/coal/context/context.asp
+http://www.worldenergy.org/wec-geis/publications/reports/ser/ocean/ocean.asp
+http://www.worldenergy.org/wec-geis/publications/reports/ser/overview.asp
+http://www.worldenergy.org/wec-geis/publications/reports/ser/shale/shale.asp
+http://www.worldenergy.org/wec-geis/publications/reports/ser/wood/wood.asp
+http://www.worldenergy.org/wec-geis/publications/statements/stat2004.asp
+http://www.worldevangelical.org/news_africa1_mar04.html
+http://www.worldexecutive.com/directory/england/london/hotels/txl-ki-hyklonk2.html
+http://www.worldfoodscience.org/cms/?pid=1000863
+http://www.worldfurnitureonline.com/dbsys/furniture/1304.html
+http://www.worldgolf.com/courses/indiagcs.html
+http://www.worldgolf.com/features/wales-travel-alternatives-926.htm
+http://www.worldhealth.net/p/1003.html
+http://www.worldhunger.org/articles/africa/melber.htm
+http://www.worldinfozone.com/features.php?section=PartnersDiscussion2
+http://www.worldinvisible.com/library/jessiepenn-lewis/8791/879103.htm
+http://www.worldjewishcongress.org/publications/dispatches/dispatch57.cfm
+http://www.worldlanguage.com/ChineseTraditional/Countries/CookIslands.htm
+http://www.worldlanguage.com/ChineseTraditional/Countries/Jersey.htm
+http://www.worldlanguage.com/Vietnamese/Countries/GazaStrip.htm
+http://www.worldlanguage.com/Vietnamese/Countries/WestBank.htm
+http://www.worldleisure.org/about/interest_groups/education.html
+http://www.worldmag.com/subscriber/displayarticle.cfm?id=9987
+http://www.worldmarketsanalysis.com/wma_sample_pages/site_pages/WMASampArticle.htm
+http://www.worldmoviemag.com/index.php?request=News&key=194
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=13201
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=21048
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=25008
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=26401
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=38398
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=42462
+http://www.worldnetdaily.com/news/article.asp?ARTICLE_ID=42698
+http://www.worldofcards.biz/2005/ptt_AU/
+http://www.worldofpower.co.uk/safety/
+http://www.worldofpower.co.uk/safety/chainsaw_safety.html
+http://www.worldofquotes.com/topic/Listening/1/
+http://www.worldofschmitt.com/writings/smith/beastofaveroigne.html
+http://www.worldofwarcraft.com/info/basics/glossary.html
+http://www.worldonwheelz.com/Travel%20Reviews/new%20york%20city%202002.htm
+http://www.worldpeace.org.au/diary.asp
+http://www.worldpeacefoundation.org/completedprojects.html
+http://www.worldpolicy.org/projects/arms/reports.html
+http://www.worldpolicy.org/projects/arms/reports/congo.htm
+http://www.worldpolicy.org/projects/arms/reports/reportaboutface.html
+http://www.worldpolicy.org/projects/arms/updates/051603.html
+http://www.worldpolicy.org/projects/arms/updates/091103.html
+http://www.worldpolicy.org/projects/arms/updates/091901.html
+http://www.worldprayer.org.uk/pagesys.cfm?pID=41
+http://www.worldprayer.org.uk/pagesys.cfm?pID=44
+http://www.worldpress.org/Americas/2044.cfm
+http://www.worldpress.org/Europe/1684.cfm
+http://www.worldpress.org/Europe/2042.cfm
+http://www.worldpress.org/Mideast/1200.cfm
+http://www.worldpress.org/Mideast/2067.cfm
+http://www.worldpressinstitute.org/nevin.htm
+http://www.worldrecordgolf.com/guidelines.htm
+http://www.worldsapartreview.com/mexican.htm
+http://www.worldsbestbars.com/city/fukuoka/the-happy-cock-fukuoka.htm
+http://www.worldscibooks.com/physics/4657.html
+http://www.worldscientist.com/
+http://www.worldscinet.com/ijtaf/mkt/editorial.shtml
+http://www.worldscreen.com/print.php?filename=0604agents
+http://www.worldseafishing.com/ireland/culdaff.shtml
+http://www.worldsecurity-index.com/details.php?id=207
+http://www.worldsexguide.org/buenos-aires.txt.html
+http://www.worldsexguide.org/chicago_faq.txt.html
+http://www.worldshipny.com/lwrmantr.htm
+http://www.worldshops.org/worldshops/Guidelines.html
+http://www.worldsoccershop.com/testimonials.html
+http://www.worldsocialism.org/spgb/nov03/leftie.html
+http://www.worldstart.com/tips/tips-eml.php/702
+http://www.worldstart.com/tips/tips.php/702
+http://www.worldstatesmen.org/France_prov.html
+http://www.worldsteel.org/lci_policy.php
+http://www.worldtennisratings.com/wtr_magazine_story_4_dwakiji_mentalprep.html
+http://www.worldvacationrentals.net/detailed/2400.html
+http://www.worldvillage.org/gy/gyold/13007.html
+http://www.worldvision.com.au/onebigvillage/content.asp?topicID=28
+http://www.worldvision.com.au/seekjustice/getinvolved.asp
+http://www.worldwander.com/namibia/textetosha.htm
+http://www.worldwar1.com/tgws/rel007.htm
+http://www.worldwatch.org/features/climate/activities/
+http://www.worldwatch.org/live/discussion/100/
+http://www.worldwatch.org/press/news/1998/07/02/
+http://www.worldwatch.org/press/news/2003/07/24/
+http://www.worldwaterday.org/2001/thematic/pollution.html
+http://www.worldwidecommerce.com/carter/files/html/D0008/G0000074.html
+http://www.worldwidelearn.com/business-course/home-business-idea.htm
+http://www.worldwidelearn.com/online-education-guide/engineering/systems-engineering-major.htm
+http://www.worldwideschool.org/library/books/hst/english/WildWales/chap65.html
+http://www.worldwideschool.org/library/books/hst/northamerican/UnitedStatesPresidentsInauguralSpeeches/chap48.html
+http://www.worldwideschool.org/library/books/lit/charlesdickens/ShortStoriesbyCharlesDickens/chap11.html
+http://www.worldwideschool.org/library/books/lit/detective/TheBreakingPoint/chap26.html
+http://www.worldwideschool.org/library/books/lit/drama/Finished/chap23.html
+http://www.worldwideschool.org/library/books/lit/historical/Oxford/chap6.html
+http://www.worldwideschool.org/library/books/lit/historical/Oxford/chap8.html
+http://www.worldwideschool.org/library/books/lit/romance/APairofBlueEyes/chap18.html
+http://www.worldwideschool.org/library/books/relg/socialeccltheology/MemoirsofPopularDelusionsV1/chap3.html
+http://www.worldwideschool.org/library/books/socl/customsetiquettefolklore/TheChineseBoyAndGirl/chap3.html
+http://www.worldwideschool.org/library/books/youth/anneofgreengables/AnneofAvonlea/chap27.html
+http://www.worldwidewords.org/weirdwords/ww-pic1.htm
+http://www.worldwildlife.org/bsp/publications/africa/145/Rwanda-English.htm
+http://www.worldwildlife.org/wildworld/profiles/terrestrial/nt/nt0138_full.html
+http://www.worriedneed2talk.org.uk/directory.htm
+http://www.worship.ca/docs/p_41_tm.html
+http://www.worship.ca/docs/ww_42.html
+http://www.worshipguitars.org/silkworm/
+http://www.worth1000.com/cache/contest/contestcache.asp?contest_id=4633&start=1&end=10&display=text
+http://www.worthethic.com/consultants.html
+http://www.worthethic.com/team.html
+http://www.worthplaying.com/
+http://www.worthplaying.com/article.php?sid=16802
+http://www.worthplaying.com/article.php?sid=25610
+http://www.worxbest.com/us/products/organocrete.html
+http://www.wosa.co.za/News.aspx?NEWSID=7026
+http://www.wosa.co.za/SOILS_terroirs.ASP
+http://www.wotif.co.nz/Hotel.jsp?hotel=2005&refId=13792
+http://www.wotif.com/Executive-Royal-Inn-West-Edmonton.html
+http://www.wotif.com/Hotel.jsp?hotel=6897
+http://www.wotif.com/Rydges-on-Bell-Preston---Sleep-&-Go.html
+http://www.wotif.com/Wombats-Bed-&-Breakfast.html
+http://www.wotif.com/Xenia-Central-Studio-Accommodation.html
+http://www.wotw.org.uk/northsouth/bulletin/spring2001.html
+http://www.wowwebdesigns.com/power_guides/music_off.php
+http://www.woxy.com/boards/showthread.php?t=28164
+http://www.woz.org/letters/general/109.html
+http://www.wp.org.sg/news/news_articles/20050126_qa_ltk.htm
+http://www.wp21.com/at/dayone.htm
+http://www.wpafb.af.mil/museum/history/preww1/cof8.htm
+http://www.wpahumane.org/PetsWithAPast%5B1%5D.html
+http://www.wpbfnews.com/employment/962683/detail.html
+http://www.wpcusrgrp.org/~blowe/merp108.html
+http://www.wpcusrgrp.org/~blowe/merp209.html
+http://www.wpcusrgrp.org/~blowe/merp221.html
+http://www.wpda.org/news.php?n=578
+http://www.wpda.org/news.php?n=778
+http://www.wpdfd.com/editorial/wpd0104news.htm
+http://www.wpdfd.com/editorial/wpd0601.htm
+http://www.wpdfd.com/editorial/wpd0602.htm
+http://www.wpdfd.com/editorial/wpd0704news.htm
+http://www.wpdfd.com/wpdtypo.htm
+http://www.wpg.cc/stl/CDA/articleDetail/1,1001,33-122,00.html
+http://www.wpg.cc/stl/CDA/library/1,1007,617-241,00.html
+http://www.wpghome.com/LocalServices.asp
+http://www.wphm.net/wphm/meetdj.shtml
+http://www.wphospital.org/2002DCTCARep/APositiveImpactOnPatientCare.htm
+http://www.wpi.edu/Academics/Depts/Chemistry/Courses/CH215X/coldfusion.html
+http://www.wpi.edu/Admin/HR/BenMan/te.html
+http://www.wpi.edu/Admin/HR/BenMan/tuitionexchange.html
+http://www.wpi.edu/News/TechNews/article.php?id=977
+http://www.wpi.edu/News/Transformations/2004Winter/prevention.html
+http://www.wpi.edu/Pubs/Catalogs/Ugrad/Current/admission.html
+http://www.wpi.edu/Pubs/Policies/Judicial/sect5.html
+http://www.wpi.edu/~trek/aspergers.html
+http://www.wpibriefing.com/37InternationalOffice.htm
+http://www.wpic.org/Library/Synoposis/Synopsis_1Page13.html
+http://www.wpic.pitt.edu/STANLEY/5thbipconf/Abstracts/txalliance.htm
+http://www.wpra.com/Membership.htm
+http://www.wpro.who.int/public/speeches/speech_view.asp?id=359
+http://www.wpsw.co.uk/michellereport.htm
+http://www.wpt.org/food_fight/index.cfm?body=video_clip4&movie=yes
+http://www.wptn.com/tmrk_019_sep01.htm
+http://www.wpunj.edu/~newpol/issue25/hill25.htm
+http://www.wpunj.edu/~newpol/issue32/hill32.htm
+http://www.wpxi.com/health/3020074/detail.html
+http://www.wpxi.com/target11/4181291/detail.html
+http://www.wqad.com/Global/story.asp?S=2858686
+http://www.wqad.com/global/story.asp?s=2858686&ClientType=Print
+http://www.wqln.org/education/families/
+http://www.wra.org/Government/Land_Use/annexation/default.htm
+http://www.wra.org/Resources/resource_pages/Mold_resources.htm
+http://www.wraeththu.wox.org/storm/uk/faq.htm
+http://www.wrap.org.uk/document.rm?id=357
+http://www.wrap.org.uk/document.rm?id=432
+http://www.wrap.org.uk/news/going_green.html
+http://www.wrap.org.uk/waste_minimisation/retailer_initiative_innovation_fund/news_events/news/two_new.html
+http://www.wrc.wa.gov.au/swanavon/pages/events.html
+http://www.wrestlingnewsworld.com/columns/104883314.shtml
+http://www.wrexham.gov.uk/english/planning_portal/lpg_notes/lpg14.htm
+http://www.wrexham.gov.uk/english/planning_portal/lpg_notes/lpg19.htm
+http://www.wrf.com/publications/publication.asp?id=1555241072003
+http://www.wrh.noaa.gov/pqr/info/beaufort.php
+http://www.wrh.noaa.gov/slc/projects/gap_winds/gap_public/Cases.html
+http://www.wrh.noaa.gov/wrh/LITETAs/TALITE9706/tal9706.html
+http://www.wri-irg.org/co/cases/etzion-en.htm
+http://www.wri-irg.org/co/rtba/russia.htm
+http://www.wrightforyou.com/titlewomen.html
+http://www.wrightinwisconsin.org/HomeMessageBoard.asp
+http://www.wrighttimes.com/article.php?id=126
+http://www.write101.com/W.Tips176.htm
+http://www.write101.com/W.Tips261.htm
+http://www.write101.com/W.Tips81.htm
+http://www.write4kids.com/aboutcbi.html
+http://www.writeaway.com/help/default.asp
+http://www.writedirection.com/rprt300e.htm
+http://www.writedog.com/fire.html
+http://www.writeedge.com/articles/PreparingforWorst.asp
+http://www.writeexpress.com/refusal-letter.html
+http://www.writefromhome.com/writingtradearticles/443.htm
+http://www.writefromhome.com/wwc/169.htm
+http://www.writefromhome.com/wwc/188.htm
+http://www.writejourney.com/synopsis.htm
+http://www.writelink.co.uk/Jobs/jobs.html
+http://www.writelinux.com/glade/
+http://www.writeonwhidbey.org/Contest_Scholarships/Student_Celebrate_Writing%20Contest.htm
+http://www.writer-tech.com/pages/articles/ff-fatalities.htm
+http://www.writeradvice.com/
+http://www.writergazette.com/articles/article73.shtml
+http://www.writergirlscorner.com/holidays/christmas/world/
+http://www.writermag.com/wrt/default.aspx?c=a&id=402
+http://www.writers.com/newsletter0401.html
+http://www.writersbbs.com/cgi-bin/forum.cgi?action=read&forum=playwriting&message=4526-4525
+http://www.writersdigest.com/articles/waiting_for_dollar$.asp
+http://www.writershome.com/humor/animal-farm.htm
+http://www.writersstore.com/article.php?articles_id=485
+http://www.writerstudio.com/news-summer00.shtml
+http://www.writerstudio.com/news-summer98.html
+http://www.writerstudio.com/news-winter99.html
+http://www.writersuniversity.com/course.php?courses_id=17
+http://www.writersunlimited.com/
+http://www.writersunlimited.com/authors/authorpages.html
+http://www.writersweekly.com/this_weeks_article/002264_12152004.html
+http://www.writersworld.co.uk/twenty.html
+http://www.writerswrite.com/classads/writingresources/
+http://www.writewhatyouknow.com/teleclasses.php
+http://www.writewords.org.uk/archive/3840.asp
+http://www.writewords.org.uk/archive/6293.asp?rr=1
+http://www.writewords.org.uk/directory/detail_page.asp?subtypeid2=41&directory_id=5172
+http://www.writewords.org.uk/forum/49_26874.asp
+http://www.writewords.org.uk/forum/51_11472.asp?spage=2
+http://www.writing-business-letters.com/
+http://www.writing-resources.com/fairy_tales/the_story_of_a_mother.html
+http://www.writing-resources.com/fairy_tales/the_swineherd.html
+http://www.writing-world.com/romance/sweet.shtml
+http://www.writing-world.com/tech/lawler.shtml
+http://www.writing.com/main/campfires/item_id/770989
+http://www.writing.com/main/campfires/item_id/962055
+http://www.writing.com/main/view_item/item_id/525556
+http://www.writing.com/main/view_item/item_id/539471
+http://www.writing.com/main/view_item/item_id/898050
+http://www.writing.com/main/view_item/item_id/931430
+http://www.writing.upenn.edu/~afilreis/50s/macdonald-great-books.html
+http://www.writing.upenn.edu/~afilreis/88/cage-quotes.html
+http://www.writing.upenn.edu/~afilreis/Holocaust/buchenwald.html
+http://www.writingco.com/c/@u94NeW3bEE6V6/Pages/search.html?Record_Type=Products&Keyword=Concentration%20Camps
+http://www.writingco.com/c/@w.kXdSS61yiH6/Pages/search.html?Record_Type=Products&Keyword=Concentration%20Camps
+http://www.writinginstructor.com/essays/berzsenyi4.html
+http://www.writinginstructor.com/essays/gleason2.html
+http://www.writingproject.org/pub/nwpr/voice/2002no2/parsons.html
+http://www.writingproject.org/pub/nwpr/voice/2003no3/bauman.html
+http://www.writtenroad.com/archives/000867.shtml
+http://www.writtenroad.com/archives/002147.shtml
+http://www.wrm.org.uy/actors/WB/IPreport.html
+http://www.wrmea.com/html/us_aid_to_israel.htm
+http://www.wrongdiagnosis.com/mistakes/common.htm
+http://www.wrongdiagnosis.com/risk/heart_disease.htm
+http://www.wrq.com/customers/casestudies/0879.html
+http://www.wrq.com/products/whitepapers/0757.html
+http://www.wru.co.uk/111_903.php
+http://www.wru.co.uk/114_1999.php
+http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html
+http://www.wsa.org/resources/publications/salarysurvey_faq.asp
+http://www.wsab.com.au/news1.htm
+http://www.wsanchez.net/blog/archives/2005_04.html
+http://www.wsanchez.net/papers/FREENIX_1999/
+http://www.wsanford.com/~wsanford/exo/site_visits.html
+http://www.wsc.edu/advising/program/career/personality/entj.html
+http://www.wschiro.edu/academics/bsprogram/ac_bs_coursereq.html
+http://www.wscpg.org/h/APcomparin.htm
+http://www.wscu.com/
+http://www.wsdot.wa.gov/TNBhistory/Connections/connections3.htm
+http://www.wsdot.wa.gov/eesc/CAE/MicroStation/TechNotes/V8TechNotes/Scaling_basemaps.htm
+http://www.wsdot.wa.gov/environment/biology/usfw-list/Leatherback.htm
+http://www.wsdot.wa.gov/fasc/EngineeringPublications/epubs_related.html
+http://www.wsfa.org/journal/j93/2/
+http://www.wsib.on.ca/wsib/wsibsite.nsf/public/BenefitsNEL
+http://www.wsjclassroomedition.com/archive/02dec/COLG_DEC.htm
+http://www.wsjclassroomedition.com/archive/03dec/colg_caitlindec.htm
+http://www.wsjclassroomedition.com/archive/03sep/colg_caitlinsep.htm
+http://www.wsjclassroomedition.com/archive/04apr/colg_caitlinapr.htm
+http://www.wsma.org/career_center/
+http://www.wsn-mn.com/news_inSites.php
+http://www.wsn.org/crandon/sierracomments.html
+http://www.wsparx.org/resources/5-3-3.asp
+http://www.wstonline.com/opinions/kerrymassaro/showArticle.jhtml?articleID=56900546
+http://www.wstonline.com/rc/et/showArticle.jhtml?articleID=164901466
+http://www.wstonline.com/rc/md/showArticle.jhtml?articleID=164901466
+http://www.wsu.edu/~amerstu/tm/513syl2002.html
+http://www.wsu.edu/~pchilson/Disturbance.html
+http://www.wsu.edu:8080/~brians/hum_303/romanticism.html
+http://www.wsu.edu:8080/~taflinge/esteem.html
+http://www.wsws.org/articles/1999/dec1999/mine-d02.shtml
+http://www.wsws.org/articles/1999/dec1999/mine-d02_prn.shtml
+http://www.wsws.org/articles/1999/jul1999/que-j21_prn.shtml
+http://www.wsws.org/articles/1999/may1999/cost-m13.shtml
+http://www.wsws.org/articles/1999/nov1999/anim-n12.shtml
+http://www.wsws.org/articles/2000/apr2000/educ-a13.shtml
+http://www.wsws.org/articles/2000/mar2000/norw-m15.shtml
+http://www.wsws.org/articles/2000/oct2000/bloo-o10.shtml
+http://www.wsws.org/articles/2000/oct2000/la-o19.shtml
+http://www.wsws.org/articles/2000/sep2000/newt-s26.shtml
+http://www.wsws.org/articles/2000/sep2000/newt-s26_prn.shtml
+http://www.wsws.org/articles/2001/aug2001/sri-a24_prn.shtml
+http://www.wsws.org/articles/2001/jun2001/vote-j14.shtml
+http://www.wsws.org/articles/2001/sep2001/war-s14.shtml
+http://www.wsws.org/articles/2002/apr2002/jobs-a13.shtml
+http://www.wsws.org/articles/2002/feb2002/blai-f08.shtml
+http://www.wsws.org/articles/2002/nov2002/vote-n12.shtml
+http://www.wsws.org/articles/2003/apr2003/isra-a16.shtml
+http://www.wsws.org/articles/2003/feb2003/cbc-f07.shtml
+http://www.wsws.org/articles/2003/nov2003/euro-n11.shtml
+http://www.wsws.org/articles/2003/sep2003/cali-s06.shtml
+http://www.wsws.org/articles/2004/jan2004/immi-j09.shtml
+http://www.wsws.org/articles/2004/jul2004/hear-j07.shtml
+http://www.wsws.org/articles/2004/jun2004/tort-j10.shtml
+http://www.wsws.org/articles/2004/oct2004/iaea-o19.shtml
+http://www.wsws.org/articles/2005/jan2005/chin-j18_prn.shtml
+http://www.wsws.org/articles/2005/jan2005/iraq-j12.shtml
+http://www.wsws.org/arts/1998/aug1998/land-96.shtml
+http://www.wsws.org/arts/1998/dec1998/tv-d05.shtml
+http://www.wsws.org/arts/1998/nov1998/tv-n28.shtml
+http://www.wsws.org/news/1998/july1998/lab1-j10.shtml
+http://www.wsws.org/news/1998/oct1998/ic-o24.shtml
+http://www.wtamu.edu/academic/anns/mps/math/mathlab/int_algebra/int_alg_tut1_study.htm
+http://www.wtec.org/loyola/dsply_jp/c4_s7.htm
+http://www.wtec.org/loyola/kb/c1_s1.htm
+http://www.wtec.org/loyola/kei/welcome.htm
+http://www.wtgrantfoundation.org/info-url_nocat4030/info-url_nocat.htm?attrib_id=9485
+http://www.wtgrantfoundation.org/information3044/information.htm
+http://www.wthr.com/Global/story.asp?S=372913
+http://www.wtmelon.com/3AppleIsland.html
+http://www.wtmlib.com/2nd_cent.htm
+http://www.wtmx.com/listenlive.php
+http://www.wtn.org.uk/training.htm
+http://www.wto.org/english/docs_e/legal_e/26-gats_02_e.htm
+http://www.wto.org/english/docs_e/legal_e/legal_e.htm
+http://www.wto.org/english/news_e/spmm_e/spmm79_e.htm
+http://www.wto.org/english/news_e/spmm_e/spmm83_e.htm
+http://www.wto.org/english/news_e/spmm_e/spmm86_e.htm
+http://www.wto.org/english/res_e/booksp_e/analytic_index_e/dsu_01_e.htm
+http://www.wto.org/english/res_e/booksp_e/analytic_index_e/wto_agree_02_e.htm
+http://www.wto.org/english/thewto_e/minist_e/min01_e/brief_e/brief01_e.htm
+http://www.wto.org/english/thewto_e/whatis_e/tif_e/agrm6_e.htm
+http://www.wto.org/english/thewto_e/whatis_e/tif_e/fact3_e.htm
+http://www.wto.org/english/thewto_e/whatis_e/tif_e/org1_e.htm
+http://www.wto.org/english/tratop_e/dda_e/draft_text_gc_dg_19july04_e.htm
+http://www.wto.org/english/tratop_e/envir_e/stud99_e.htm
+http://www.wto.org/english/tratop_e/safeg_e/safeint.htm
+http://www.wto.org/english/tratop_e/serv_e/10-anfin_e.htm
+http://www.wto.org/english/tratop_e/tbt_e/event_oct03_e/labelling_oct03_prog_e.htm
+http://www.wto.org/english/tratop_e/tpr_e/tp172_e.htm
+http://www.wto.org/english/tratop_e/tpr_e/tp55_e.htm
+http://www.wto.org/english/tratop_e/trips_e/art27_3b_background_e.htm
+http://www.wto.org/english/tratop_e/trips_e/art27_3b_e.htm
+http://www.wto.org/french/news_f/news00_f/traine_f.htm
+http://www.wtrg.com/daily/crudeoilprice.html
+http://www.wtrg.com/daily/heatingoilprice.html
+http://www.wtsmith.com/rt/ethics.html
+http://www.wtstravel.com/corporate.html
+http://www.wu-wien.ac.at/usr/h96b/h9650297/cap-basics.html
+http://www.wujs.org.il/activist/leadership/manual/self_management/time_management.shtml
+http://www.wumarkus.com/index.php?p=706
+http://www.wumcmckinney.org/history%20unabridged.htm
+http://www.wumingfoundation.com/english/giap/giapdigest11.html
+http://www.wun.ac.uk/news/article.php?id=9
+http://www.wunderland.com/WTS/Andy/EmptyCity/chapter35.html
+http://www.wunderland.com/WTS/Ginohn/games/HappyFunDie.html
+http://www.wunderland.com/WhatsOld/2005/WN.01.20.05.html
+http://www.wusc.ca/campuses/lc/deved/2003_04/chap4.asp
+http://www.wustl.edu/policies/infosecurity.html
+http://www.wutc.wa.gov/webdocs.nsf/0/5ffbcf2a1d8b3a638825680a007c30ba?OpenDocument
+http://www.wutka.com/hackingjava/ch20.htm
+http://www.wutka.com/hackingjava/ch40.htm
+http://www.wutsamada.com/alma/phlsci/ohear9.htm
+http://www.wvdep.org/Item.cfm?ssid=8&SS1ID=699
+http://www.wvdot.com/6_motorists/dmv/6g1e_practice.htm
+http://www.wvhdf.com/programs/homebuying.cfm
+http://www.wvi.org/wvi/asia_tsunami/asia_tsunami.htm
+http://www.wvinsurance.gov/agent/continuing_education_faqs.htm
+http://www.wvnps.org/earthworms.html
+http://www.wvrafting.com/rafting.cfm
+http://www.wvu.edu/~agexten/forestry/silvics.htm
+http://www.wvu.edu/~agexten/hortcult/fruits/grograps.htm
+http://www.wvu.edu/~agexten/hortcult/greenhou/ghprodct.htm
+http://www.wvu.edu/~lawfac/jelkins/imagine/failure_comment.html
+http://www.wvu.edu/~socjust/president.htm
+http://www.wvwc.edu/alu/makeagift.asp
+http://www.ww2bw.org/eforums
+http://www.ww2bw.org/professor%20advice
+http://www.ww2bw.org/themes
+http://www.wwar.com/categories/Academic/Film/
+http://www.wwar.com/categories/Commercial/Alphabetized/P/index9.html
+http://www.wwar.com/categories/Commercial/Art_Supplies/Easels/
+http://www.wwc.org.au/faq.html
+http://www.wwda.org.au/employsub.htm
+http://www.wwdemocracy.nildram.co.uk/democracy_today/german_greens.htm
+http://www.wweek.com/story.php?story=3904
+http://www.wweek.com/story.php?story=5716
+http://www.wwf.org.uk/news/scotland/n_0000001354.asp
+http://www.wwf.org.uk/researcher/issues/climatechange/0000000006.asp
+http://www.wwfpacific.org.fj/press_releases_pngwhales.htm
+http://www.wwlaw.com/trust.htm
+http://www.wwnorton.com/nael/20century/topic_3/welcome.htm
+http://www.wwnorton.com/rgguides/honeywallrgg.htm
+http://www.wwnytv.net/72k/full-story.asp?uid=6232&area=inside+wwny
+http://www.wwoof.org/prepare.asp
+http://www.wwp.brown.edu/texts/textlist.title.html
+http://www.wwpsa.com/
+http://www.wws.princeton.edu/~kling/mto/background.htm
+http://www.www-wholesale.com/
+http://www.wwwaif.net/scn/scn_GO_1.php
+http://www.wwwcoder.com/main/parentid/262/site/4129/68/Default.aspx
+http://www.wwwcoder.com/main/parentid/262/site/4129/68/default.aspx
+http://www.wyandot.org/saints.htm
+http://www.wyca.com/complnts/qmdc-com.htm
+http://www.wymaninstitute.org/
+http://www.wymaninstitute.org/articles/2004-01-fdrbook.php
+http://www.wyndhamvacationownership.com/careers.htm
+http://www.wynnster.co.uk/Review4.asp
+http://www.wyoea.org/nea%20programs/memberbenefits03.asp
+http://www.wyp2005.org/activities.html
+http://www.wyrdsmiths.com/index.php?fid=anappturn
+http://www.wz-berlin.de/ars/ab/previous.en.htm
+http://www.wz2k.co.uk/forum/index.php?showtopic=1426
+http://www.wzlet.org/marapril04.htm
+http://www.wzo.org.il/en/resources/view.asp?id=1378
+http://www.wzo.org.il/en/resources/view.asp?id=1461
+http://www.wzo.org.il/en/resources/view.asp?id=1472
+http://www.wzo.org.il/en/resources/view.asp?id=1472&subject=50
+http://www.wzo.org.il/en/resources/view.asp?id=306
+http://www.x-entertainment.com/messages/484.html
+http://www.x-plane.com/
+http://www.x10.com/products/firecracker_sitting2_br1ab.htm
+http://www.x10.com/security/x10_ds10a.htm
+http://www.xaac.com/paradise/VillasIguansaRanas.html
+http://www.xahlee.org/UnixResource_dir/writ/responsible_license.html
+http://www.xahlee.org/p/um/um-s15.html
+http://www.xahlee.org/p/um/um-s20.html
+http://www.xak.com/main/newsshow.asp?id=40869
+http://www.xalt.co.uk/exalt/communication/forum/topic.asp?whichpage=2&ARCHIVEVIEW=&TOPIC_ID=2561
+http://www.xanatos.com/FAQ.html
+http://www.xanga.com/groups/rnp.aspx?d=n&user=merlie16&id=196698
+http://www.xanga.com/home.aspx?user=Suicide_meadow
+http://www.xanga.com/home.aspx?user=rokorbust
+http://www.xanga.com/home.aspx?user=sdh25
+http://www.xaraya.com/documentation/phpxref/_variables/
+http://www.xbitlabs.com/articles/cpu/display/athlon64-fx57.html
+http://www.xbox365.com/news/news.cgi/article/EpVFuApVkEfccZcvbc0521
+http://www.xchangemag.com/articles/022feat4.html
+http://www.xciv.org/~meta/Journal/2004/04/
+http://www.xcountryab.net/ayd/developmentmodel.htm
+http://www.xeaglex.com/Page430.ProjectManagement.htm
+http://www.xefer.com/rebel/
+http://www.xenex.co.uk/default.aspx?WCI=Product&WCE=&id=20815
+http://www.xeni.net/images/boingboing/barlowfriendz_88_pox_americana.htm
+http://www.xenoclast.org/free-sklyarov-uk/2002-May/002175.html
+http://www.xenongames.com/ironclaw.htm
+http://www.xenophilia.com/zb/zb0012d.htm
+http://www.xenos.org/classes/leadership/planting.html
+http://www.xenos.org/ct_outln/accept1another.htm
+http://www.xenos.org/essays/innernt.htm
+http://www.xenotypetech.com/
+http://www.xensei.com/users/gamblet/RestructuringIII.htm
+http://www.xentrik.net/home/
+http://www.xentrik.net/scripts/
+http://www.xenu.net/archive/go/media/la290878.htm
+http://www.xenu.net/archive/thesis/cisar-findings.html
+http://www.xerocreative.com/yugioh/index.php?goto=readpost&f=83&t=118667
+http://www.xeromag.com/fvbdsm_scenarios.html
+http://www.xfcu.org/faqs_frequent.asp
+http://www.xiangtan.co.uk/england.htm
+http://www.ximeddoctors.com/specialist/senior.htm
+http://www.xlife.com.my/AMXT_CNTCounter.jsp?catid=C002&subcatid=S007&section=1&pagename=AMXT_CNTWC1978.jsp
+http://www.xlink2.com/REPLICA/clusterdescription.htm
+http://www.xmailserver.org/linux-patches/lnxsched.html
+http://www.xmfan.com/viewtopic.php?t=10330
+http://www.xmfan.com/viewtopic.php?t=31925&postdays=0&postorder=asc&start=75
+http://www.xmission.com/~country/chngwrld/chap9c.htm
+http://www.xmission.com/~emailbox/whycat.htm
+http://www.xmission.com/~spl_efx/
+http://www.xml.com/cs/user/view/cs_msg/1980
+http://www.xml.com/lpt/a/2001/02/07/schemarama.html
+http://www.xml.com/lpt/a/2002/03/27/qanda.html
+http://www.xml.com/lpt/a/2002/11/06/ontologies.html
+http://www.xml.com/lpt/a/2005/02/16/rest-report.html?x-t=tag.view
+http://www.xml.com/pub/2000/02/16/style/?wwwrrr_20000216.ptxt
+http://www.xml.com/pub/a/2000/01/10/perlwebtools.html
+http://www.xml.com/pub/a/2000/02/16/style/
+http://www.xml.com/pub/a/2000/06/21/deviant/
+http://www.xml.com/pub/a/2001/08/15/architecturalstyle.html
+http://www.xml.com/pub/a/2001/11/14/dom-sax.html
+http://www.xml.com/pub/a/2002/01/02/taglines.html
+http://www.xml.com/pub/a/2003/01/22/dive-into-xml.html
+http://www.xml.com/pub/a/2003/10/23/iswc.html
+http://www.xml.com/pub/a/2004/06/09/deviant.html
+http://www.xml.com/pub/a/2004/12/01/tr.html
+http://www.xml.com/pub/a/2005/01/26/hacking-ooo.html
+http://www.xml.com/pub/a/2005/02/16/rest-report.html
+http://www.xml.com/pub/a/2005/02/16/rest-report.html?page=last
+http://www.xmleurope.com/2002/bios/pz.asp
+http://www.xmlpitstop.com/xmlpitstop/cs/blogs/davidsilverlight/archive/2005/02.aspx
+http://www.xmpp.org/ietf-logs/marid@ietf.xmpp.org/2004-08-09.html
+http://www.xnewmedia.com/aboutus/faq.html
+http://www.xof1.com/aboututteambody.html
+http://www.xoltar.org/misc/static_typing_eckel.html
+http://www.xombified.com/general.html
+http://www.xoverboard.com/blogarchive/week_2005_05_15.html
+http://www.xp2004.de/xp2004/papersessions.htm
+http://www.xpats.com/clads/clads_display.php?Action=view&categorie=12&start=140
+http://www.xpats.com/clads/clads_display.php?Action=view&categorie=12&start=160
+http://www.xplanazine.com/archives/military_tech/index.php
+http://www.xposed.com/work_and_money/your_money/plenty_of_useful_information_on_pay_stubs.aspx
+http://www.xprizenews.org/index.php?p=654
+http://www.xps.org/xp-uvlinks.htm
+http://www.xray.ncsu.edu/GrowXtal.html
+http://www.xs4all.nl/~ahein/f00.html
+http://www.xs4all.nl/~jcdverha/scijokes/10.html
+http://www.xs4all.nl/~jcdverha/scijokes/1_4.html
+http://www.xs4all.nl/~jcdverha/scijokes/9.html
+http://www.xs4all.nl/~johanw/ds9-4.html
+http://www.xs4all.nl/~joz/swswspt.html
+http://www.xs4all.nl/~kspaink/cos/arspost/951115b.html
+http://www.xs4all.nl/~lploeger/TreeComp3.htm
+http://www.xs4all.nl/~oracle/mgarde/panous.txt
+http://www.xs4all.nl/~pwessel/
+http://www.xs4all.nl/~rabruil/tonearm.html
+http://www.xs4all.nl/~stgvisie/VISIE/du-briefing-15-3-2003.html
+http://www.xs4all.nl/~tank/spg/mumia-eu/countr/00-06-07-poli.htm
+http://www.xs4all.nl/~wichm/precepts.html
+http://www.xsorbit1.com/users/davec/index.cgi?board=8&action=display&num=1106755762
+http://www.xstreamsoftware.com/news_brandon-hall_elearning_award_silver.htm
+http://www.xtracycle.com/html/shopproduct_info.php?cPath=1&products_id=73
+http://www.xtracycle.com/html/shopproduct_info.php?cPath=4&products_id=73
+http://www.xtracycle.com/html/shopproduct_info.php?products_id=73
+http://www.xtreeme.com/forum/archive/o_t__t_198__lost-settings.html
+http://www.xtreme-profits.com/targets/BanXReg.asp
+http://www.xtrememass.com/forum/printthread.php?t=4766
+http://www.xtrememind.com/Subliminal_Matrix.htm
+http://www.xtremerecruiting.org/blog/archives/ss/000434.html
+http://www.xtvworld.com/tv/understandingtv/satellite_imports-better.htm
+http://www.xula.edu/facility/srappa/
+http://www.xula.edu/herald/issues/20050303/living.html
+http://www.xula.edu/uc/UC-MUSIC.html
+http://www.xulplanet.com/ndeakin/archive/2004/6/
+http://www.xulplanet.com/ndeakin/archive/2005/6/9/
+http://www.xulplanet.com/ndeakin/article/307?show=c
+http://www.xvsxp.com/fonts/
+http://www.xxxglass.com/testimonials.html
+http://www.xyonline.net/ColourP.shtml
+http://www.y-axis.com/doctors/news.shtml
+http://www.yachtcoronet.org/history.htm
+http://www.yachtsurvey.com/
+http://www.yaelf.com/history.shtml
+http://www.yaelf.com/questions.shtml
+http://www.yaffa.com.au/defence/current/8-100.htm
+http://www.yahind.com/regional/ksa/economic.shtml
+http://www.yahoo.com/picks/971110.html
+http://www.yahoo.com/s/38862
+http://www.yakface.com/yaknews/arc2-2002.shtml
+http://www.yale.edu/chess/imchess.html
+http://www.yale.edu/cral/dissem4.html
+http://www.yale.edu/drama/academics/acting/plan.html
+http://www.yale.edu/drama/academics/design/
+http://www.yale.edu/equalopportunity/policies/
+http://www.yale.edu/fescareers/interview_questions.htm
+http://www.yale.edu/filmstudiesprogram/undergrad.html
+http://www.yale.edu/forestry/handbook/03resources.html
+http://www.yale.edu/forestry/popup/student_orgs/list.html
+http://www.yale.edu/glc/archive/927.htm
+http://www.yale.edu/history/gradstudents/working-groups.html
+http://www.yale.edu/hronline/compclas/c&tquest.htm
+http://www.yale.edu/iefp/studyabroad/returned.html?mm=1
+http://www.yale.edu/lawweb/avalon/nato.htm
+http://www.yale.edu/lawweb/avalon/wwii/yalta.htm
+http://www.yale.edu/opa/president/speeches/20011012.html
+http://www.yale.edu/provost/handbook/handbook_xi__other_university_policies_a.html
+http://www.yale.edu/rjsternberg/
+http://www.yale.edu/sfas/registrar/
+http://www.yale.edu/support/dsp/dsp_sla.htm
+http://www.yale.edu/yalecollege/publications/ycps/chapter_iii/other.html
+http://www.yale.edu/yalecollege/publications/ycps/chapter_iv/applied_mathematics.html
+http://www.yale.edu/yalecollege/publications/ycps/chapter_iv/film.html
+http://www.yale.edu/ycias/pier/resources/lessons/eu.htm
+http://www.yale.edu/ynhti/curriculum/indexes/
+http://www.yale.edu/ynhti/curriculum/units/1980/1/80.01.08.x.html
+http://www.yale.edu/ynhti/curriculum/units/1984/5/84.05.03.x.html
+http://www.yale.edu/ynhti/curriculum/units/1989/7/89.07.05.x.html
+http://www.yale.edu/ynhti/curriculum/units/1991/4/91.04.08.x.html
+http://www.yale.edu/ynhti/curriculum/units/1996/2/96.02.03.x.html
+http://www.yale.edu/ynhti/curriculum/units/1998/7/98.07.05.x.html
+http://www.yalealumnimagazine.com/issues/93_11/new_haven.html
+http://www.yalealumnimagazine.com/issues/96_10/teaching.html
+http://www.yalealumnimagazine.com/issues/98_10/couples.html
+http://www.yaledailynews.com/article.asp?AID=11064
+http://www.yaledailynews.com/article.asp?AID=26135
+http://www.yaleherald.com/archive/xxix/2000.03.24/ae/p11skulls.html
+http://www.yaleherald.com/archive/xxvii/1999.02.05/sports/p26hockey.html
+http://www.yaleherald.com/archive/xxviii/1999.09.17/opinion/p09yorksquare.html
+http://www.yaleherald.com/article-p.php?Article=1162
+http://www.yaleherald.com/article-p.php?Article=4001
+http://www.yaleherald.com/article-p.php?Article=4172
+http://www.yaleherald.com/article.php?Article=1162
+http://www.yaleherald.com/article.php?Article=2252
+http://www.yaleherald.com/article.php?Article=4001
+http://www.yaleherald.com/article.php?Article=4147
+http://www.yamaha-europe.com/yamaha_europe/uk/service/010_artist/artists_guitars/mike_stern/
+http://www.yana.org/aboutbld.htm
+http://www.yandina.com/TeakDeck.htm
+http://www.yangonow.com/eng/magazine/from_myanmar/200210.html
+http://www.yankeepotroast.org/
+http://www.yap-cfd.de/workcamps/1tschechien.html
+http://www.yapartstudioandgallery.com/_about-yap.htm
+http://www.yaridanjo.warmkessel.com/yaridanjo/fear.html
+http://www.yarnivore.com/runblog/
+http://www.yarrahealing.melb.catholic.edu.au/kulin/w_story.html
+http://www.yasoo.com/yourantioxstatus.htm
+http://www.ybam.org.my/english/public/edhamma/basic5.htm
+http://www.ybe2004.nsw.gov.au/ybe2004debate.html
+http://www.ybonline.co.uk/0,,52494.html
+http://www.ybw.com/
+http://www.ybw.com/auto/newsdesk/20041101132742mbynews.html
+http://www.ybw.com/ym/roundtheisland05/hints_and_tips.html
+http://www.ycare.org.uk/?lid=769
+http://www.ycsi.net/users/gunsmith/about.htm
+http://www.ycyhealth.com/products/exerciser/ElectricCardioExercise/eletriccardioexercise.shtml
+http://www.ydr.com/page/history/articles/
+http://www.ydr.com/page/ninemonths/articles/
+http://www.ydrf.com/makingit/
+http://www.yeahbutisitart.com/
+http://www.yearoflanguages.org/
+http://www.yearoutgroup.org/organisations.htm
+http://www.yedaplus.co.il/faq.asp
+http://www.yellow-turtle.com/store/?action=browse&CategoryNum=3074234888191822
+http://www.yellow.co.nz/site/cruickshankpryde/
+http://www.yellowjacketsystems.com/jimball/scale-data/scale.htm
+http://www.yellowpages.co.id/useful/partner.asp?page=11&ID1=
+http://www.yellowpages.co.nz/
+http://www.yellowstoneflyfishing.com/nw.htm
+http://www.yelobk.com/ybnews_online/ybarticle.cgi?id=916
+http://www.yemenembassy.org/economic/IMFInYemen.htm
+http://www.yementimes.com/article.shtml?i=750&p=front&a=1
+http://www.yeoviltownfc.net/matchreport_detail.php?fixture_id=36
+http://www.yes-minister.com/places.htm
+http://www.yes-minister.com/ymseas3a.htm
+http://www.yesmagazine.com/article.asp?ID=939
+http://www.yesmagazine.org/27government/sifry.htm
+http://www.yesmail.com/downloads/solutions_Enterprise.html
+http://www.yesnetwork.com/announcers/article.asp?article_id=390
+http://www.yesterland.com/canoes.html
+http://www.yesweb.org/gkr/project_factsheet.html?pid=655
+http://www.yesweb.org/gkr/project_factsheet.html?pid=756
+http://www.yesweb.org/gkr/project_factsheet.html?pid=84
+http://www.yesweb.org/gkr/project_factsheet.html?pid=881
+http://www.yesweb.org/gkr/project_factsheet.html?pid=961
+http://www.yesweb.org/gkr/searchresults.html?focus=11
+http://www.yesweb.org/gkr_project_factsheet.html?pid=744
+http://www.yesweb.org/gkr_project_factsheet.html?pid=829
+http://www.yewknee.com/
+http://www.yfccanada.com/Newsroom/DirectorLetters/default.asp?letter_id=10
+http://www.yfnta.org/community/Profile.asp?First_Nation=3
+http://www.yforum.com/best020600.html
+http://www.yha.org.uk/hostel/hostelpages/240.html
+http://www.yhchambers.org/iframes/about_region.htm
+http://www.yhgfl.net/Moving_Here.395.0.html
+http://www.yieldwerx.com/reportsoverview.htm
+http://www.yin-yang-colonics.com/archivesANDnewsletters/NL_Nov_Dec_03.htm
+http://www.yk.psu.edu/currentstudents/studentservices/studentlife/morethanacademics/clubs/index.shtml
+http://www.yk.psu.edu/news.php
+http://www.ykhc.org/501.cfm
+http://www.yknotsailing.org/regatta/nor.php
+http://www.yle.fi/export/synop_fic.htm
+http://www.ymca.org.uk/pooled/articles/BF_NEWSART/view.asp?Q=BF_NEWSART_130270
+http://www.ynot.motime.com/
+http://www.ynpn.org/banjo/ol_book/chp1.htm
+http://www.ynypu.org.uk/erdp/overview.stm
+http://www.yodajeff.com/scripts/episode1/
+http://www.yodaslair.com/dumboozle/eurojazz/eurodex.html
+http://www.yoell.fsnet.co.uk/HotPotatoes.htm
+http://www.yogaatwork.co.uk/meditation.htm
+http://www.yogajournal.com/newtoyoga/151.cfm
+http://www.yogajournal.com/newtoyoga/819_4.cfm
+http://www.yogajournal.com/views/1317_1.cfm
+http://www.yogamoves.nl/classes/schedulesummer05.html
+http://www.yogitea.com/FAQ/FAQ.html
+http://www.york-tourism.co.uk/Visitors/showall.cfm?showtype=attraction&section=Visitors
+http://www.york-tourism.co.uk/media/Newsletter.cfm?NewsLetterID=1
+http://www.york-tourism.co.uk/partnership/Newsletter.cfm?NewsLetterID=3
+http://www.york-tourism.co.uk/residents/questionnaire.cfm
+http://www.york-united-kingdom.co.uk/alternative/gay/
+http://www.york.ac.uk/admin/intnat/current/yas.html
+http://www.york.ac.uk/admin/intnat/prospective/countries/india.htm
+http://www.york.ac.uk/admin/intnat/prospective/sources_advice.html
+http://www.york.ac.uk/admin/intnat/visiting/dept/music.html
+http://www.york.ac.uk/admin/persnl/promotion/admin/adm_analytic.htm
+http://www.york.ac.uk/admin/presspr/pressreleases/oilseed.htm
+http://www.york.ac.uk/careers/events/termprog.htm
+http://www.york.ac.uk/commercialservices/environmental.html
+http://www.york.ac.uk/depts/hist/graduate/ma_dipl.shtml
+http://www.york.ac.uk/depts/hist/heritage/anglia.htm
+http://www.york.ac.uk/depts/hist/heritage/ports.htm
+http://www.york.ac.uk/healthsciences/centres/trials/abouttheunit.htm
+http://www.york.ac.uk/inst/cms/Staff/directory.htm
+http://www.york.ac.uk/inst/cms/gsp/ma-new.htm
+http://www.york.ac.uk/inst/cms/gsp/modules.htm
+http://www.york.ac.uk/inst/cms/research/imb.htm
+http://www.york.ac.uk/inst/cms/resources/manuscripts/darold.htm
+http://www.york.ac.uk/inst/crd/fluorid4b.htm
+http://www.york.ac.uk/inst/crd/listnotpub.htm
+http://www.york.ac.uk/inst/eau/forum98.htm
+http://www.york.ac.uk/inst/eau/forum99.htm
+http://www.york.ac.uk/newstudent/pgreturn.htm
+http://www.york.ac.uk/org/ciec/CCI_Autumn_2002_News.htm
+http://www.york.ac.uk/org/ciec/CCI_Spring_2004_News.htm
+http://www.york.ac.uk/org/ciec/CCIlAutumn2002/CCINewslettter2002.htm
+http://www.york.ac.uk/org/ciec/secondary_publications.htm
+http://www.york.ac.uk/org/cnap/06_news/06n_article13/06n_article13.htm
+http://www.york.ac.uk/recordsmanagement/dpa/dppolicy2002.htm
+http://www.york.ac.uk/recordsmanagement/foia/intro.htm
+http://www.york.ac.uk/services/careers/current/inforoom/handouts/applications.htm
+http://www.york.ac.uk/services/library/subjects/econint.htm
+http://www.york.ac.uk/univ/org/learntech/olsig/03-sep30.htm
+http://www.york.ac.uk/univ/unions/msf/
+http://www.york.com/invest/NewsItem.asp?cid=214
+http://www.york.com/invest/NewsItem.asp?cid=242
+http://www.york.curlingclub.ca/events.htm
+http://www.york.gov.uk/cgi-bin/wn_document.pl?type=5330
+http://www.york.gov.uk/cgi-bin/wn_document.pl?type=5337
+http://www.york.gov.uk/housing/groups/kingsway.html
+http://www.york.gov.uk/housing/rentarrears.html
+http://www.york.gov.uk/parking/pcn/paying.html
+http://www.york.gov.uk/parking/stleonards.html
+http://www.york.townplan.org/right/beacon/beacon.htm
+http://www.yorkagainstthewar.org.uk/
+http://www.yorkartgallery.org.uk/news.php
+http://www.yorkcastle.com/pages/news2001.html
+http://www.yorkcity.org/
+http://www.yorkcity.org/cityservices/hr/jobopp.htm
+http://www.yorkcounty.gov/econdev/demographics/population.htm
+http://www.yorkcountygov.com/fireprev/investigation.asp
+http://www.yorkcvs.org.uk/advice.htm
+http://www.yorkcvs.org.uk/priory.htm
+http://www.yorkcvs.org.uk/voluntaryvoice.htm
+http://www.yorkdataservices.com/index.asp?modeID=Content&uID=313
+http://www.yorkemc.co.uk/conferences/railway/agrri-qa.html
+http://www.yorkfair.org/history.htm
+http://www.yorkharborinn.com/About%20Us/directions.htm
+http://www.yorklandtrust.org/news_08.15.03_portsherald.html
+http://www.yorkmaine.org/
+http://www.yorkminster.org/history8.shtml
+http://www.yorknewstimes.com/leadership2003/profiles/pro_RodDebuhr.shtml
+http://www.yorknewstimes.com/stories/061505/editorial_sales16.shtml
+http://www.yorkopenhouse.com/
+http://www.yorkopenhouse.com/privacy_policy.asp
+http://www.yorkpete.co.uk/blog/
+http://www.yorkphoto.com/default/jsp/popups/popup_privacy.jsp
+http://www.yorkphoto.com/privacy/t_=0
+http://www.yorkracecourse.co.uk/morenews.asp?id=50
+http://www.yorkracecourse.co.uk/tncs.asp
+http://www.yorkregion.com/yr/carrier/
+http://www.yorkregion.com/yr/classads/communitynotices/deaths/
+http://www.yorkregion.com/yr/classads/communitynotices/inmemoriam/
+http://www.yorkregiontransit.com/default.asp
+http://www.yorkregiontransit.com/faq.asp
+http://www.yorkregiontransit.com/specialized.asp
+http://www.yorkschools.org/policy/policy.htm
+http://www.yorkshire-evening-post.co.uk/ViewArticle2.aspx?SectionID=55&ArticleID=916895
+http://www.yorkshire-forward.com/
+http://www.yorkshiretoday.co.uk/ViewArticle2.aspx?SectionID=105&ArticleID=920931
+http://www.yorkshiretoday.co.uk/ViewArticle2.aspx?SectionID=55&ArticleID=1014911
+http://www.yorkshiretoday.co.uk/ViewArticle2.aspx?SectionID=55&ArticleID=916895
+http://www.yorkshirevisitor.com/exec/118288/4438/
+http://www.yorkshirevisitor.com/exec/118288/4438/-/-/NDpVS19VS1dFQjIxNTc1MzA5OlVLX1VLV0VCMTExODA1MTM6RU5HTElTSDpVUzoxMTA3NTcxMTg3OjExMDc1NzQzOTI6Ojo=
+http://www.yorkshirevisitor.com/exec/118288/4438/PROFILE=
+http://www.yorkshirevisitor.com/exec/122476/10557/PROFILE=NDpVS19VS1dFQjE5ODI5MTEyOlVLX1VLV0VCMTA0MzE3Njc6RU5HTElTSDpVUzoxMTA2MTc2OTI2OjExMDYxODAwMzU6Ojo=
+http://www.yorkshirevisitor.com/exec/122514/6390/pcode=GBYTB1130H,database=twn_p_ytb
+http://www.yorkshirevisitor.com/exec/122514/6390/pcode=GBYTB3554H,database=twn_p_ytb
+http://www.yorku.ca/admissio/newsletter/
+http://www.yorku.ca/careers/resources/workopolisCampus.htm
+http://www.yorku.ca/careers/tbc/archive/participating_fes_04.htm
+http://www.yorku.ca/cdc/lsp/eponline/exam4.htm
+http://www.yorku.ca/cerlac/deep-integration.html
+http://www.yorku.ca/crws/network/english/announce.htm
+http://www.yorku.ca/cst/core/vol13no2/uskul.html
+http://www.yorku.ca/cst/core/vol13no3/runte.html
+http://www.yorku.ca/cst/ideas/resources/41ways.html
+http://www.yorku.ca/daycare/october2.htm
+http://www.yorku.ca/dohs/ergonomics/sitting.htm
+http://www.yorku.ca/foundation/arts_giving_opps.html
+http://www.yorku.ca/igreene/halpern.html
+http://www.yorku.ca/igreene/theoretical2.html
+http://www.yorku.ca/mack/nordichi2002-shortpaper.html
+http://www.yorku.ca/mediar/releases_1996_2000/archive/pmr1998a.htm
+http://www.yorku.ca/secretariat/documents/2020Vision.htm
+http://www.yorku.ca/secretariat/senate/committees/scotl/bulletin2.htm
+http://www.yorku.ca/secretariat/senate/minutes/1997-1998/980226.html
+http://www.yorku.ca/secretariat/senate/minutes/2002-2003/021212.htm
+http://www.yorku.ca/web/about_yorku/privacy.html
+http://www.yorku.ca/web/futurestudents/newsletter/2004jun.htm
+http://www.yorku.ca/ycom/gazette/past/archive/040798.htm
+http://www.yorku.ca/ycom/gazette/past/archive/110399/issue.htm
+http://www.yorku.ca/ycom/gazette/past/archive/2001/031401/issue.htm
+http://www.yorku.ca/yfile/archive/index.asp?IssueDate=10/1/2004&section=Today@York
+http://www.yorku.ca/yorkisu/web/People/directorspecial.asp
+http://www.yosemite.ca.us/history/the_yosemite_book/chapter_5.html
+http://www.yosemite.ca.us/john_muir_writings/the_yosemite/chapter_6.html
+http://www.yoshinoantiques.com/Interior-article.html
+http://www.yoshkar-ola.com/e/personal/goodbye.shtml
+http://www.youcanbefit.com/runstr.html
+http://www.youdebate.com/DEBATES/clinton_home_loan.HTM
+http://www.yougov.com/yougov_website/asp_besPollContent/bes_polMain.asp?aId=636&sID=4&pID=1&wId=0&UID=
+http://www.youhaventlived.com/isif/isif65.htm
+http://www.youmeworks.com/negativebias.html
+http://www.youmustact.com/acqnice.html
+http://www.youneedabudget.com/
+http://www.youngagain2000.com/lipitor.html
+http://www.youngbiz.com/Volunteerz/GivingBack/TraceesJobs.htm
+http://www.youngbiz.com/yb_mag_news/2001youngbiz100/html/practical.htm
+http://www.younglaborleft.org/node/229
+http://www.youngmath.net/archive/V03/vol3.34
+http://www.youngminds.org.uk/magazine/56/
+http://www.youngminds.org.uk/whosecrisis/2/policy.php
+http://www.youngwomenshealth.org/collegehealth5.html
+http://www.youns.com/memoriam/qbert.asp
+http://www.yourcareertraining.com/hotel-restaurant-management-colleges.htm
+http://www.yourcatholicvoice.org/index.php?id=6
+http://www.yourcatholicvoice.org/index.php?id=article&article=1620
+http://www.yourcatholicvoice.org/index.php?id=article&article=840
+http://www.yourcropshop.com/descriptions.htm
+http://www.yourdiseaserisk.harvard.edu/hccpquiz.pl?lang=english&func=show&page=glossary
+http://www.yourdoctorinthefamily.com/grandtheory/section4_2.htm
+http://www.yourestate.com.au/realestate/queensland/commercial/sale/properties_4_QLD_3.php
+http://www.yourfamilyshealth.com/cardiology/fear/
+http://www.yourfamilyshealth.com/kids_health/latch_key_kids/
+http://www.yourhorseshealth.com/health_care/dental_care.html
+http://www.yourhtmlsource.com/myfirstsite/basicformatting.html
+http://www.yourmortgage.co.uk/news.htm
+http://www.yourneighborhoodnews.com/archives/2004/bowarc072904.html
+http://www.yourparty.org/aboutus/qanda.jsp
+http://www.yourrights.org.uk/about-this-site/contact/index.shtml
+http://www.yourselffitness.com/forum/rssfeed.aspx?id=13&Task=ForumRSS
+http://www.yourvirtualresource.com/onlinepresence.htm
+http://www.youth.net/memories/hypermail/0617.html
+http://www.youth.net/nsrc/sci/sci051.html
+http://www.youthartsonline.org/filmandvideo/interviews/details/18
+http://www.youthlearn.org/learning/teaching/questions.asp
+http://www.youthlinks.org/article.do?articleID=1732
+http://www.youthmusic.org.uk/about_us.jsp
+http://www.youthoptions.ca/view_article.cfm?RecordID=54
+http://www.youthpastor.com/lessons/index.cfm/Evangelism-Methods_of_Evangelistic_Contact_10.htm
+http://www.youthradio.org/health/010702_doubleeyelid.shtml
+http://www.youthrights.org/forums/showpost.php?p=36726&postcount=15
+http://www.youthrights.org/forums/showthread.php?goto=lastpost&t=134
+http://www.youthrights.org/forums/showthread.php?t=1198&page=3&pp=20
+http://www.youthrights.org/forums/showthread.php?t=2594
+http://www.youthrights.org/forums/showthread.php?t=2900
+http://www.youthspecialties.com/articles/topics/campus_ministry/confessions.php
+http://www.youthspecialties.com/articles/topics/power/tipping.php
+http://www.youthspecialties.com/articles/topics/theology/identity.php
+http://www.ypn.co.uk/ViewArticle2.aspx?SectionID=55&ArticleID=1054117
+http://www.yrtk.org/
+http://www.ysearchblog.com/archives/000074.html
+http://www.ysiste.com/index.php?option=content&task=view&id=33
+http://www.ysrnry.co.uk/articles/wheretimestoodstill.htm
+http://www.ysu.edu/cisp/international/information.shtml
+http://www.ytedk.com/chapter4.htm
+http://www.yubasutterchamber.com/directory/cw_mvvv.htm
+http://www.yudkin.com/majormagazines.htm
+http://www.yudkin.com/slfaq.htm
+http://www.yukia.ca/libraries20/SpLib24/help/sinstr4.cfm
+http://www.yukia.yk.net/libraries20/SpLib24/help/sinstr4.cfm
+http://www.yukoncurling.ca/rules.html
+http://www.yukoner.com/service.htm
+http://www.yukos.com/RM/Plans_and_Projects.asp
+http://www.yummynuggets.com/index.php?m=200311
+http://www.yurasko.net/wfy/
+http://www.yusu.org/
+http://www.yusu.org/societies/all-new.jsp
+http://www.yusu.org/societies/hoby-new.jsp
+http://www.yworks.com/en/company_legal_licenseterms.htm
+http://www.z-golf.com/pages/reviews.htm
+http://www.z57.net/realtor_info/tips/buyingtips.html
+http://www.z90.com/
+http://www.zacksadvisor.com/
+http://www.zafu.net/whatswrong.html
+http://www.zakkacorp.com/store.php
+http://www.zamandayolculuk.com/cetinbal/TimeTravelWarpDrive.htm
+http://www.zamfaraonline.com/sharia/chapter02.html
+http://www.zangband.org/Docs/Attack.aspx
+http://www.zanthan.com/japan/nihongo/
+http://www.zap2it.com/movies/go?path=/movies/boxoffice/story&general_id=11234
+http://www.zapthink.com/report.html?id=ZAPFLASH-10132004
+http://www.zarcrom.com/users/alzheimers/t-07.html
+http://www.zardoz.net/people/rmacd/rare/text/ch02.htm
+http://www.zardoz.net/people/rmacd/rare/text/ch03.htm
+http://www.zchor.org/poniatowa/poniatowa.htm
+http://www.zdnet.com.au/reviews/coolgear/audio/0,39023372,39116187,00.htm
+http://www.zdnetasia.com/insight/specialreports/0,39044853,39209632-6,00.htm
+http://www.zdnetindia.com/supercentre/mobiles/expresssearchresults.html?submit=submit
+http://www.zealllc.com/2004/eurogold.htm
+http://www.zealllc.com/2004/goldoil3.htm
+http://www.zealllc.com/2004/huilev.htm
+http://www.zealllc.com/2004/rdollar2.htm
+http://www.zealllc.com/2004/rdollar3.htm
+http://www.zealllc.com/2005/nofear2.htm
+http://www.zebrafinch-society.org/candler.htm
+http://www.zefrank.com/orchidectomy/
+http://www.zeldacentral.net/shistory.shtml
+http://www.zeldman.com/
+http://www.zen-deshimaru.com/questions/afficher.php?langue=en&no=178
+http://www.zenarchery.com/index.php?cat=9
+http://www.zend.com/zend/trick/tricks-sept-2001.php?article=tricks-sept-2001&kind=tr&id=333&open=1&anc=0&view=1
+http://www.zend.com/zend/tut/calendar-ver7f.php
+http://www.zend.com/zend/tut/tutorial-johnson2.php?article=tutorial-johnson2&kind=t&id=1902&open=1&anc=0&view=1
+http://www.zenhex.com/quiz.php?id=2311
+http://www.zenith-healing.com/essential_oils.htm
+http://www.zenith-watches.com/scripts/getpage.asp?pageid=2&LangID=0&newsid=8
+http://www.zerge.com/stars/
+http://www.zerobeat.net/tasrt/c12.htm
+http://www.zerocut.com/tech/vid_film.html
+http://www.zerointelligence.net/archives/000591.php
+http://www.zeromillion.com/business/international/exporting-business-plan.html
+http://www.zeromillion.com/business/standing-out.html
+http://www.zeropaid.com/news/articles/auto/01172005d.php
+http://www.zeropoint.ca/microcosm_4-7bleonmaurer.htm
+http://www.zerotosixfigures.com/
+http://www.zerotothree.org/brainwonders/parents-birth2.html
+http://www.zerotothree.org/peer.html
+http://www.zerotothree.org/tips/RELATE.HTM
+http://www.zerowasteamerica.org/Landfills.htm
+http://www.zetaminor.com/cult/when_boat/when_boat_s1_v3.htm
+http://www.zetatalk.com/index/psdate2.htm
+http://www.zeus-publications.com/black_sunrise.htm
+http://www.zeus-publications.com/invisible_opponent.htm
+http://www.zevgroup.com/email.html
+http://www.zfm.ethz.ch/e/res/bio/
+http://www.zhealthinfo.com/bees-oils.htm
+http://www.zhong-ding.com/eventsuk.htm
+http://www.zhuo.org/htmlarea/?nid=526
+http://www.zieringmedical.com/abdrziering.html
+http://www.ziggy.com.au/news.htm
+http://www.zigzagdesign.co.uk/web_design.htm
+http://www.zilkha.com/jobs.asp
+http://www.zillions-of-games.com/
+http://www.zim.mpg.de/openaccess-berlin/pressstatement.html
+http://www.zimbel.com/cat-choral.html
+http://www.zimfest.org/2005/workshops/index.php?key=category&value=marimba&cmenu=1&smenu=0&tmenu=0
+http://www.zimmer.com/ctl?op=global&action=1&template=CP&id=2927
+http://www.zimrelief.info/
+http://www.zionsbank.com/internet_access_agreement.jsp?leftNav=&topNav=
+http://www.zisman.ca/Articles/2004/biv790.html
+http://www.zlatan.net/main.htm
+http://www.zli.bus.umich.edu/events_programs/busplan_competition.asp
+http://www.zmag.org/0018.htm
+http://www.zmag.org/Commentaries/why_do_we.htm
+http://www.zmag.org/ZMag/articles/albert3.htm
+http://www.zmag.org/ZMag/articles/february02vandepitte.htm
+http://www.zmag.org/ZMag/articles/jan01giroux.htm
+http://www.zmag.org/ZMag/articles/july00barsamian.htm
+http://www.zmag.org/ZMag/articles/oct1999chomsky.htm
+http://www.zmag.org/ZSustainers/ZDaily/2000-04/02albert.htm
+http://www.zmag.org/albertpa.htm
+http://www.zmag.org/blackcongsucc.htm
+http://www.zmag.org/content/MainstreamMedia/edwards_buryingbusiness.cfm
+http://www.zmag.org/content/Race/wise_mlk.cfm
+http://www.zmag.org/content/TerrorWar/glass_campxray.cfm
+http://www.zmag.org/content/TerrorWar/nass_anthrax-vaccine.cfm
+http://www.zmag.org/content/VisionStrategy/StarhawkWEF.cfm
+http://www.zmag.org/content/VisionStrategy/open_letter_.cfm
+http://www.zmag.org/content/print_article.cfm?itemID=4000&sectionID=44
+http://www.zmag.org/content/print_article.cfm?itemID=7996&sectionID=72
+http://www.zmag.org/content/showarticle.cfm?ItemID=3142
+http://www.zmag.org/content/showarticle.cfm?ItemID=3952
+http://www.zmag.org/content/showarticle.cfm?ItemID=5368
+http://www.zmag.org/content/showarticle.cfm?ItemID=7210
+http://www.zmag.org/content/showarticle.cfm?SectionID=&ItemID=6082
+http://www.zmag.org/content/showarticle.cfm?SectionID=1&ItemID=2758
+http://www.zmag.org/content/showarticle.cfm?SectionID=1&ItemID=6957
+http://www.zmag.org/content/showarticle.cfm?SectionID=11&ItemID=5165
+http://www.zmag.org/content/showarticle.cfm?SectionID=15&ItemID=8098
+http://www.zmag.org/content/showarticle.cfm?SectionID=22&ItemID=2547
+http://www.zmag.org/content/showarticle.cfm?SectionID=26&ItemID=6663
+http://www.zmag.org/content/showarticle.cfm?SectionID=30&ItemID=3100
+http://www.zmag.org/content/showarticle.cfm?SectionID=30&ItemID=5556
+http://www.zmag.org/content/showarticle.cfm?SectionID=32&ItemID=5779
+http://www.zmag.org/content/showarticle.cfm?SectionID=41&ItemID=4758
+http://www.zmag.org/content/showarticle.cfm?SectionID=41&ItemID=8158
+http://www.zmag.org/content/showarticle.cfm?SectionID=44&ItemID=3492
+http://www.zmag.org/content/showarticle.cfm?SectionID=44&ItemID=4000
+http://www.zmag.org/content/showarticle.cfm?SectionID=5&ItemID=1389
+http://www.zmag.org/content/showarticle.cfm?SectionID=67&ItemID=6783
+http://www.zmag.org/content/showarticle.cfm?SectionID=74&ItemID=7963
+http://www.zmag.org/content/showarticle.cfm?SectionID=87&ItemID=6151
+http://www.zmag.org/content/showarticle.cfm?itemid=7963
+http://www.zmag.org/crisescurevts/milosevic_indictment.htm
+http://www.zmag.org/dominickcalam.htm
+http://www.zmag.org/econboost.htm
+http://www.zmag.org/loriberenson.htm
+http://www.zmag.org/parecon/writings/albert_ship.htm
+http://www.zmag.org/zmag/articles/barsaid.htm
+http://www.zmag.org/zmag/articles/catch22.htm
+http://www.znclaw.com/6%20Library%20Pages/6pr2.html
+http://www.zogby.com/news/051004.html
+http://www.zok.com/products/whywash.htm
+http://www.zoladex.com/professional/rec/
+http://www.zompist.com/amercult.html
+http://www.zompist.com/canada.html
+http://www.zompist.com/dutchcult.html
+http://www.zompist.com/excess.html
+http://www.zona-pellucida.com/importance2.html
+http://www.zonaeuropa.com/20050617_2.htm
+http://www.zondervanchurchsource.com/CLIP/
+http://www.zonezero.com/magazine/articles/hernandez/hernande3.html
+http://www.zonezero.com/magazine/dcorner/texto5.html
+http://www.zoo.co.uk/~z0001039/PracGuides/pg_classes.htm
+http://www.zoo.ox.ac.uk/newsite/groups/mathbiol/may-bio.html
+http://www.zoo.ufl.edu/hjb/
+http://www.zoo.utoronto.ca/able/news/fall2003/budd-gps-article-f03.htm
+http://www.zoo.utoronto.ca/able/volumes/vol-19/mini/10-frame/10-frame.htm
+http://www.zoolex.org/publication/lozano/thesis/sect4.html
+http://www.zoology.ubc.ca/bpg/Advising/plagiarism.htm
+http://www.zoology.ubc.ca/bpg/Plagiarism.htm
+http://www.zoology.ubc.ca/~lacombe/biomania/biol353/lab353/howto/mthds/vo2rsp/smlvrt.htm
+http://www.zoom.com/techsupport/warranty_limited_broadband.html
+http://www.zoomandgo.com/learnhowto/videos_equipment.asp
+http://www.zoomjobs.com/site.pages/lib-age_employment.html
+http://www.zoomwhales.com/subjects/dinosaurs/dinos/Allosaurus.shtml
+http://www.zoomwhales.com/subjects/dinosaurs/dinos/Spinosaurus.shtml
+http://www.zoophile.net/gardengoats.php
+http://www.zoophile.net/howto-k9-sex-04.php
+http://www.zooscape.com/cgi-bin/maitred/WhitePulp/isbn0393322548
+http://www.zoroastrian.org/GathaSongs/song14.htm
+http://www.zorrapredictions.com/fshui/fs_face/face08.htm
+http://www.zpenergy.com/modules.php?name=News&file=article&sid=1013
+http://www.zpinaddict.com/parishtm/enwal98.htm
+http://www.zpub.com/sf/history/sfh-3.html
+http://www.zpub.com/sf50/sf/hbtbc10.htm
+http://www.zpub.com/sf50/sf/hbtbc6.htm
+http://www.zsa.ca/En/Articles/article.php?aid=1254
+http://www.zulenet.com/VladimirDimitrov/pages/LearnEcologyHuman.html
+http://www.zv.uni-wuerzburg.de/forschungsbericht/FOBE-akt/swe-t.htm
+http://www.zvis.com/dep/depspecs.shtml
+http://www.zvon.org/xxl/XSLTreference/Output/xslt_otherwise.html
+http://www.zwire.com/site/myzwire.cfm?BRD=1091&dept_id=343157&newsid=14586844&PAG=461&rfi=9
+http://www.zyen.com/Knowledge/Articles/looking_dapr.htm
+http://www.zygmuntfrankel.com/zf201.html
+http://www.zygmuntfrankel.com/zf521.html
+http://www.zyra.org.uk/butlins.htm
+http://www.zyvex.com/nano/
+http://www.zyvex.com/nanotech/selfRepJBIS.html
+http://www.zyworld.com/MFedin/RR/Nov14.htm
+http://www0.gsb.columbia.edu/students/organizations/ddsa/taskforce.htm
+http://www0.un.org/cyberschoolbus/peacekeeping/unit2s.html
+http://www1.agric.gov.ab.ca/$department/newslett.nsf/all/cc3961
+http://www1.agric.gov.ab.ca/$department/newslett.nsf/all/stan816
+http://www1.ap.dell.com/content/default.aspx?c=au&l=en&s=dhs
+http://www1.boc.com/conduct/responsibilities/employees/gifts.asp
+http://www1.chapman.edu/wilkinson/socsci/sociology/Faculty/Babbie/idlethoughts/habitsetc.html
+http://www1.cricket.indiatimes.com/articleshow/10165229.cms
+http://www1.cs.columbia.edu/~ip71/
+http://www1.divorcenet.com/bbs/showflat.php?Cat=&Number=101073&Main=101016
+http://www1.divorcenet.com/bbs/showthreaded.php?Cat=&Number=101016&page=&view=&sb=5&o=&vc=1
+http://www1.divorcenet.com/bbs/showthreaded.php?Cat=&Number=101059&page=&view=&sb=5&o=&vc=1
+http://www1.divorcenet.com/bbs/showthreaded.php?Cat=&Number=101073&page=&view=&sb=5&o=&vc=1
+http://www1.divorcenet.com/relations/otc-16.html
+http://www1.dshs.wa.gov/geninfo/corKIRO021704.html
+http://www1.dupont.com/NASApp/dupontglobal/corp/index.jsp?page=/content/US/en_US/news/speeches/kim_11_06_00.html
+http://www1.hmv.co.uk/hmvweb/displayProductDetails.do?ctx=-1;4;33;-1&sku=749167
+http://www1.iwon.com/travel/travelguide/information/0,20310,south_america-375-1,00.html
+http://www1.law.ucla.edu/~sportslaw/
+http://www1.law.ucla.edu/~volokh/2amteach/sources.htm
+http://www1.law.ucla.edu/~volokh/copyrev.htm
+http://www1.law.ucla.edu/~volokh/shield.htm
+http://www1.ncaa.org/membership/enforcement/amateurism/ice_hockey_memo_4_16_03.rtf.doc?ObjectID=15955&ViewMode=0&PreviewState=0
+http://www1.neweb.ne.jp/wb/fukud/safety%20english.htm
+http://www1.od.nih.gov/oma/manualchapters/intramural/3044-2/main.html
+http://www1.od.nih.gov/oma/manualchapters/management/1500/06.html
+http://www1.oecd.org/media/release/conclusionsrotterdam3November2000.htm
+http://www1.oecd.org/media/release/nw00-28a.htm
+http://www1.on.hrdc-drhc.gc.ca/ojf/ojf.jsp?lang=e&section=Profile&noc=5124
+http://www1.salvationarmy.org/ihq%5Cwww_sa.nsf/0/5A321A5865A6EB1E80256F460045172E?opendocument
+http://www1.salvationarmy.org/ihq/www_sa.nsf/0/A89BD861C7B941AD802570120047ED0F?openDocument
+http://www1.sheridaninstitute.ca/acad/academicawards2003.html
+http://www1.timesofindia.indiatimes.com/articleshow/997173.cms
+http://www1.umn.edu/humanrts/instree/euroconpart1c.html
+http://www1.umn.edu/humanrts/instree/oasdiplomaticasylum.html
+http://www1.umn.edu/humanrts/instree/oasterritorialasylum.html
+http://www1.umn.edu/mnwomen/nov_mins.html
+http://www1.umn.edu/oit/newsletter/0197-itn/internet_acct_changes.html
+http://www1.umn.edu/phrm/bio/bios.html
+http://www1.umn.edu/ships/modules/dyes1.htm
+http://www1.umn.edu/ships/modules/time.htm
+http://www1.umn.edu/urelate/style/capitalization.html
+http://www1.us.dell.com/content/products/features.aspx/ric_road?c=us&cs=04&l=en&s=bsd
+http://www1.us.dell.com/content/topics/global.aspx/policy/en/policy?c=us&l=en&s=corp&~f=lg&~section=013
+http://www1.us.dell.com/content/topics/global.aspx/policy/en/policy?c=us&l=en&s=corp&~section=013
+http://www1.us.dell.com/content/topics/segtopic.aspx/policy_warranties_popup?c=us&cs=19&l=en&s=dhs&~f=&~lt=popup
+http://www1.us.dell.com/content/topics/segtopic.aspx/policy_warranties_popup?c=us&cs=19&l=en&s=dhs&~f=lg&~lt=print
+http://www1.us.dell.com/content/topics/segtopic.aspx/policy_warranties_popup?c=us&cs=19&l=en&s=dhs&~lt=popup
+http://www1.us.dell.com/content/topics/segtopic.aspx/policy_warranties_popup?c=us&cs=19&l=en&s=dhs&~lt=print
+http://www1.villagevoice.com/film/0443,holcomb2,57864,20.html
+http://www1.wfubmc.edu/articles/Genomics
+http://www1.worldbank.org/devoutreach/article.asp?id=287
+http://www1.worldbank.org/devoutreach/article.asp?id=299
+http://www1.worldbank.org/devoutreach/july03/article.asp?id=209
+http://www1.worldbank.org/devoutreach/march03/article.asp?id=193
+http://www1.worldbank.org/devoutreach/summer99/article.asp?id=3
+http://www1.worldbank.org/devoutreach/summer99/textonly.asp?id=3
+http://www1.worldbank.org/devoutreach/textonly.asp?id=263
+http://www1.worldbank.org/devoutreach/textonly.asp?id=271
+http://www1.worldbank.org/devoutreach/winter02/article.asp?id=142
+http://www1.worldbank.org/publicsector/anticorrupt/coraid.htm
+http://www10.aeccafe.com/nbc/articles/view_article.php?section=CorpNews&articleid=122257
+http://www10.americanexpress.com/sif/cda/page/0,1641,13394,00.asp
+http://www10.americanexpress.com/sif/cda/page/0,1641,13394,00.asp?canada_nav=newhomepage
+http://www10.americanexpress.com/sif/cda/page/0,1641,21253,00.asp
+http://www10.antenna.nl/wise/576/5455.html
+http://www11.hrdc-drhc.gc.ca/pls/edd/FEDLABSTAN.lhtml
+http://www11.hrdc-drhc.gc.ca/pls/edd/edd_brief.document?p_site=EDD&cat=LLS&sub=OWAP
+http://www11.hrsdc.gc.ca/en/cs/sp/hrsdc/edd/brief/2000-000598/sarlm.shtml
+http://www11.hrsdc.gc.ca/en/cs/sp/hrsdc/edd/brief/9999-000560/seap.shtml
+http://www11.hrsdc.gc.ca/en/cs/sp/hrsdc/edd/reports/1999-000414/page04.shtml
+http://www11.hrsdc.gc.ca/en/cs/sp/hrsdc/edd/reports/1999-000416/page11.shtml
+http://www11.hrsdc.gc.ca/en/cs/sp/hrsdc/edd/reports/2001-000451/page05.shtml
+http://www11.sdc.gc.ca/en/cs/sp/edd/reports/1997-000336/page08.shtml
+http://www11.sdc.gc.ca/en/cs/sp/edd/reports/1999-000416/page11.shtml
+http://www11.sdc.gc.ca/en/cs/sp/edd/reports/1999-000448/page09.shtml
+http://www11.sdc.gc.ca/en/cs/sp/edd/reports/2000-000432/page03.shtml
+http://www11.sdc.gc.ca/en/cs/sp/sdc/edd/reports/2001-000459/page03.shtml
+http://www11.sdc.gc.ca/sl-ca/doc/section2_e.shtml
+http://www110.hrdc-drhc.gc.ca/sfmc_fmcs/apropos_about/lmpp/index.cfm/doc/english
+http://www12.statcan.ca/english/census01/Info/reasons.cfm
+http://www125.americanexpress.com/merchant/oam/ns/USEng/FrontServlet?request_type=navigate&page=acceptCardIndex
+http://www125.americanexpress.com/merchant/oam/ns/USEng/FrontServlet?request_type=navigate&page=industrySpecificBenefits
+http://www15.hrdc-drhc.gc.ca/English/general/readers_guide.asp?section_number=43
+http://www2.acc.af.mil/accnews/Sep03/03299.html
+http://www2.acc.af.mil/accnews/mar03/03076.html
+http://www2.acnielsen.com/news/20041102_no.shtml
+http://www2.agriculture.purdue.edu/impact/search_list.asp?ql=Economics&topicID=2
+http://www2.agsm.edu.au/agsm/web.nsf/Content/AGSMMagazine-WhyCulltureMatters
+http://www2.arnes.si/~osljlag1s/FAMILY.htm
+http://www2.asuk.com/leased.php
+http://www2.aya.yale.edu/clubs/israel/let_3.htm
+http://www2.bc.edu/~plater/CumulativeTUP/HTML/chap23.html
+http://www2.bren.ucsb.edu/~buildgreen/homework.htm
+http://www2.brevard.edu/chapin/annewebpage/AH_350_Syllabus.htm
+http://www2.bus.orst.edu/faculty/brownc/lectures/db_tutor/Conceptual_Modeling.htm
+http://www2.cali.org/cat-evd.html
+http://www2.cddc.vt.edu/www.eff.org/jobs/
+http://www2.chass.ncsu.edu/garson/pa765/focusgroups.htm
+http://www2.chass.ncsu.edu/garson/pa765/ttest.htm
+http://www2.chch.ox.ac.uk/library/music/page.html?page=news
+http://www2.chinadaily.com.cn/english/doc/2004-06/24/content_342106.htm
+http://www2.chinadaily.com.cn/english/doc/2004-08/16/content_365785.htm
+http://www2.chinadaily.com.cn/english/doc/2005-05/30/content_446811.htm
+http://www2.clarke.k12.ga.us/cen/Morning%20Announcements.htm
+http://www2.corvallis.k12.or.us/chs/staff/curtise/Eating_Customs.htm
+http://www2.cs.uh.edu/~clifton/pickett.micro.html
+http://www2.csoonline.com/info/release.html?CID=535
+http://www2.cstudies.ubc.ca/~mullen/PMA6FHPT.html
+http://www2.cvmailuk.com/reedsmith/terms.cfm
+http://www2.eckerd.com/OnCallMag/guide_display.asp?mzfile=q4_2004_colds
+http://www2.edc.org/CCT/publications_report_summary.asp?numPubId=189
+http://www2.eli.org/pressdetail.cfm?ID=24
+http://www2.epp-online.de/epp/live/de/fachartikelarchiv/ha_artikel/detail/30458791.html
+http://www2.foxgold.net.au/~glennbswift59/westnew.html
+http://www2.fpm.wisc.edu/occhealth/ergonomics.html
+http://www2.glos.ac.uk/gdn/discuss/kolb2.htm
+http://www2.glos.ac.uk/gdn/gold/ch4.htm
+http://www2.glos.ac.uk/gdn/jghe/16_1.htm
+http://www2.glos.ac.uk/gdn/ward/yardley.htm
+http://www2.gol.com/users/quakers/QOS_11.htm
+http://www2.gsu.edu/~mstswh/courses/it7000/papers/computer.htm
+http://www2.gwu.edu/~bygeorge/060804/mongolia.html
+http://www2.gwu.edu/~nsarchiv/NSAEBB/NSAEBB139/
+http://www2.gwu.edu/~nsarchiv/NSAEBB/NSAEBB147/
+http://www2.gwu.edu/~spi/analysis.htm
+http://www2.haverford.edu/acc/docs/policies/dorm_support.html
+http://www2.hawaii.edu/~fredr/beyond.htm
+http://www2.hawaii.edu/~lieberma/spsp/html/speakers.htm
+http://www2.hawaii.edu/~turner/hikes/haleaka4.htm
+http://www2.healthcare.ucla.edu/international/newsletter/Past%20Issues/English/Mar2004English.htm
+http://www2.helsinginsanomat.fi/english/archive/news.asp?id=20010522IE3
+http://www2.hunterlink.net.au/~ddhrg/econ/honours/demand3.html
+http://www2.hursley.ibm.com/decimal/damodel.html
+http://www2.hursley.ibm.com/decimal/dncont.html
+http://www2.irc.nl/manage/manuals/cases/batcham.html
+http://www2.jaring.my/pcdom/infant.htm
+http://www2.jobtrak.com/help_manuals/jobmanual/
+http://www2.jpl.nasa.gov/basics/bsf7-2.html
+http://www2.jpl.nasa.gov/galileo/today990703.html
+http://www2.keck.hawaii.edu/inst/nirspec/eng/SlewTrouble.html
+http://www2.lib.udel.edu/subj/anth/db.htm
+http://www2.ljworld.com/news/2005/jun/12/privatepublic/
+http://www2.ljworld.com/section/schools/story/197829
+http://www2.math.uic.edu/~baughman/howtocount/HowToCount.htm
+http://www2.montana.edu/policy/business_manual/bus100.html
+http://www2.myhome.ie/members/members_register.asp
+http://www2.nature.nps.gov/geology/parks/yell/
+http://www2.ncaa.org/media_and_events/association_news/association_updates/2005/january/0114_task_force.html
+http://www2.ncaa.org/media_and_events/association_news/ncaa_news_online/2005/06_06_05/front_page_news/4212n03.html
+http://www2.nrcan.gc.ca/es/ener2000/online/html/chap3b_e.cfm
+http://www2.ntu.ac.uk/llr/int.asp
+http://www2.oakland.edu/erd/monthall.cfm
+http://www2.oanda.com/cgi-bin/msgboard/ultimatebb.cgi?ubb=get_topic;f=15;t=003293
+http://www2.oanda.com/cgi-bin/msgboard/ultimatebb.cgi?ubb=print_topic;f=15;t=003293
+http://www2.oanda.com/cgi-bin/msgboard/ultimatebb.cgi?ubb=print_topic;f=17;t=001452
+http://www2.oecd.org/guidingprinciples/document/pg016.asp
+http://www2.ohlone.edu/instr/theater/EDT/classes.html
+http://www2.parc.com/ops/members/brown/papers/orglearning.html
+http://www2.parsons.edu/architecture/programs.htm
+http://www2.peterboroughtoday.co.uk/pages/guide/howto/woodturning.asp
+http://www2.pfeiffer.edu/~lridener/DSS/DuBois/sbf4.htm
+http://www2.pfeiffer.edu/~lridener/DSS/Martineau/v1p2ec7.html
+http://www2.pfeiffer.edu/~lridener/DSS/goodbad.html
+http://www2.pfeiffer.edu/~lridener/courses/DAHREND1.HTML
+http://www2.pfeiffer.edu/~lridener/courses/MICHELSR.HTML
+http://www2.psci.net/preview/perrycountyindiana/tours/walkingtour.cfm
+http://www2.rgu.ac.uk/library/sites/gdee.htm
+http://www2.riverdance.com/showflat.php?Cat=&Board=IEGEN&Number=5525&page=0&view=collapsed&sb=5&o=&fpart=35
+http://www2.rwe.geber.at/gb2003/en/reviewofoperations/salesandincome/valueadded
+http://www2.sbs.com.au/home/index.php3?id=54187
+http://www2.scarboroughtoday.co.uk/tourism/at%20a%20glance.asp
+http://www2.scc.rutgers.edu/ead/uarchives/peithob.html
+http://www2.sec.state.ri.us/faststart/
+http://www2.sis.pitt.edu/~peterb/research.html
+http://www2.slac.stanford.edu/comp/winnt/conference-computing/conference-computing-checklist.html
+http://www2.slac.stanford.edu/computing/helpdesk/visitor/confchecklist.asp
+http://www2.slac.stanford.edu/tip/2004/mar05/writing.htm
+http://www2.sn.apc.org/africa/countdet.CFM?countries__ISO_Code=SC
+http://www2.state.id.us/ag/about/overview.htm
+http://www2.state.id.us/bta/decisions/2001/2001/Linscott.bon.htm
+http://www2.state.id.us/ope/JLOCMinutes/000301.htm
+http://www2.stats.govt.nz/domino/external/pasfull/pasfull.nsf/0/4c2567ef00247c6acc256b6d000301b5?OpenDocument
+http://www2.taconic.net/rmcbride/samples.html
+http://www2.theclarionnews.com/General_News/36786.shtml
+http://www2.thefabricator.com/Articles/Tube_and_Pipe_Exclusive.cfm?ID=698
+http://www2.toad.net/
+http://www2.townonline.com/lynnfield/
+http://www2.townonline.com/marblehead/localRegional/view.bg?articleid=273688&format=text
+http://www2.townonline.com/medford/localRegional/view.bg?articleid=262128&format=text
+http://www2.trainingvillage.gr/etv/vetsystems/report/de0699_en.asp
+http://www2.tranceaddict.com/forums/archive/topic/131882-1.html
+http://www2.ucsc.edu/healthcenter/form/index.shtml
+http://www2.umdnj.edu/eohssweb/aiha/accidents/chemicalexposure.htm
+http://www2.umist.ac.uk/optometry/neuro_new/nsc_appl.htm
+http://www2.umist.ac.uk/student/pgfaq.htm
+http://www2.una.edu/athletics/Lion%20Volleyball/
+http://www2.una.edu/universityrelations/UNApeoplenotes.htm
+http://www2.unesco.org/wef/countryreports/nigeria/rapport_3_1.html
+http://www2.unesco.org/wef/countryreports/romania/rapport_2_2.html
+http://www2.unesco.org/wef/en-news/Presentation%2011_Education%20International.shtm
+http://www2.univ-reunion.fr/~ageof/text/74c21e88-271.html
+http://www2.ups.edu/arches/2001Fall/zeit_space_test.htm
+http://www2.ups.edu/faculty/mwarning/research_tenure.htm
+http://www2.uwindsor.ca/~hlynka/qfaq.html
+http://www2.vcn.bc.ca/minutes?wid=387&func=viewSubmission&sid=92
+http://www2.ville.montreal.qc.ca/economtl/97t3/bul97q3.htm
+http://www2.warwick.ac.uk/fac/soc/law/elj/jilt/1997_2/noortwijk/
+http://www2.warwick.ac.uk/services/its/elab/services/webtools/sitebuilder/faqs/neweditor/
+http://www2.warwick.ac.uk/study/undergraduate/arts/history/
+http://www2.wcc-coe.org/ccdocuments.nsf/index/plen-4.3-en.html?OpenDocument&Click=
+http://www20.tomshardware.com/game/20041110/
+http://www2002.stoke.gov.uk/corporateresources/PublicServ/Customer_services.html
+http://www2003.org/cdrom/papers/refereed/p007/p7-abiteboul.html
+http://www2003.org/posters.htm
+http://www22.brinkster.com/horizon5/horizon5/new_default.files/lirit/lirit3.htm
+http://www28.iwebcenters.com/culturedcup4/teaterms.ivnu
+http://www3.azwestern.edu/psy/dgershaw/lol/MothersSingle.html
+http://www3.baylor.edu/Philosophy/events/SCP_sch.html
+http://www3.ccps.virginia.edu/career_prospects/briefs/P-S/SummaryForensics.html
+http://www3.che.wisc.edu/mdg/research.shtml
+http://www3.ci.boulder.co.us/finance/sales_tax/regs/reg20.htm
+http://www3.csc.noaa.gov/beachnourishment/html/human/case.htm
+http://www3.fertilethoughts.com/forums/view.php?pg=about_us
+http://www3.gov.ab.ca/env/waste/xmas/gift.html
+http://www3.gov.ab.ca/foip/commissioners_orders/other_decisions/Section55_TownofPonoka_Apr23,2002.cfm
+http://www3.ietf.org/proceedings/05mar/forces.html
+http://www3.open.ac.uk/courses/bin/p12.dll?C01B200_4_0
+http://www3.open.ac.uk/courses/bin/p12.dll?C01L314
+http://www3.open.ac.uk/oubs/bin/oubs.dll?CB200
+http://www3.sdstate.edu/StudentLife/DiningServices/RenovationFAQs/Index.cfm
+http://www3.state.ia.us/irgc/code99d.htm
+http://www3.state.ia.us/irgc/moratorium.htm
+http://www3.sympatico.ca/kelly90/C304613866/E1229961722/
+http://www3.sympatico.ca/mapleridge/canadienhorsebreeders.html
+http://www3.sympatico.ca/shelaghmrl/page10.html
+http://www3.telus.net/linguisticsissues/delta.htm
+http://www3.telus.net/linguisticsissues/internationalintelligibility.html
+http://www3.telus.net/public/drelika/MRZC/zoketsu_03.html
+http://www3.tky.3web.ne.jp/~jafarr/SLANG.html
+http://www3.uta.edu/policy/HOP/HOP2_2.htm
+http://www3.visitbritain.com/corporate/march17.htm
+http://www33.ocn.ne.jp/~actakada/pmke.smeo.html
+http://www4.alternativenews.org/factsheets/negev/
+http://www4.alternativenews.org/occupationwatch/display.php?id=3903
+http://www4.army.mil/USAR/organization/structure.php
+http://www4.bmo.com/personal/0,4344,35649_36613,00.html?pChannelId=36613
+http://www4.bmo.com/personal/0,4344,35649_36814,00.html?pChannelId=36814
+http://www4.bmo.com/personal/0,4344,35649_36832,00.html?pChannelId=36832
+http://www4.colgate.edu/scene/nov2002/reviews.html
+http://www4.compasspoint.org/p.asp?WebPage_ID=443&Profile_ID=111360
+http://www4.dr-rath-foundation.org/PHARMACEUTICAL_BUSINESS/HSA/
+http://www4.dr-rath-foundation.org/The_Hague/complaint/complaint04.htm
+http://www4.law.cornell.edu/cfr/5p532.htm
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/ARLT-L-02-90-E?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/BICE-J-98-05-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/BMSX-L-98-02-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/BRWM-U-99-90-B?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/NIST-L-01-90-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/SSBX-L-98-04-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/WSTB-U-02-01-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/WSTB-U-97-04-A?OpenDocument
+http://www4.nas.edu/webcr.nsf/CommitteeDisplay/WSTB-U-99-03-A?OpenDocument
+http://www4.nationalacademies.org/iap/iaphome.nsf/weblinks/SAIN-4XVKHY?OpenDocument
+http://www4.nationalacademies.org/nas/nashome.nsf/urllinks/NAS-59MUXF?OpenDocument
+http://www4.nationalacademies.org/nas/nashome.nsf/urllinks/NAS-5LWKA9
+http://www4.nationalacademies.org/news.nsf/isbn/0309061806?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309067774?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309068371?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309069300?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309069882?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309074843?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/030908458X?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309084865?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/030908928X?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/0309092973?OpenDocument
+http://www4.nationalacademies.org/news.nsf/isbn/s0309092647?OpenDocument
+http://www4.nationalacademies.org/onpi/webextra.nsf/web/web_extra_index?OpenDocument
+http://www4.nationalacademies.org/trb/crp.nsf/All+Projects/NCHRP+25-25
+http://www4.sbs.com.au/home/index.php3?id=54334
+http://www4.semo.edu/polisci/smentkowski/forum3paper.htm
+http://www4.tomshardware.com/game/20041109/burn_out-07.html
+http://www4.tomshardware.com/game/20050108/
+http://www4.trb.org/trb/crp.nsf/0/ba633c965c77eb9585256b9900453dd0?OpenDocument
+http://www4.trb.org/trb/crp.nsf/All+Projects/NCHRP+25-25
+http://www4.vjc.edu/JudyLombardi/discuss/msgReader$32
+http://www4.vjc.edu/JudyLombardi/stories/storyReader$32
+http://www4.wave.co.nz/~jollyroger/GM2/news/archive.htm
+http://www5.kryptonsite.com/forums/
+http://www6.head-fi.org/forums/archive/index.php/t-3026.html
+http://www6.head-fi.org/forums/archive/index.php/t-309.html
+http://www6.lexisnexis.com/publisher/EndUser?Action=UserDisplayCiteList&orgId=574&topicId=25132
+http://www6.tomshardware.com/howto/20011205/
+http://www7.nationalacademies.org/core/Remarks%20by%20Claudia%20Buchmann.html
+http://www7.nationalacademies.org/deps/defense_reports.html
+http://www7.nationalacademies.org/humanrights/1Case_Information_Ibrahim.html
+http://www7.nationalacademies.org/nsb/Board_Members.html
+http://www7.nationalacademies.org/step/STEP_Newsletter_May_1996.html
+http://www8.utsouthwestern.edu/utsw/cda/dept16498/files/201268.html
+http://www8.utsouthwestern.edu/utsw/cda/dept29520/files/165699.html
+http://www8.utsouthwestern.edu/utsw/cda/dept37417/files/148270.html
+http://www85.homepage.villanova.edu/joanna.rotte/2002%20Comments/commentsJan2002.htm
+http://www85.homepage.villanova.edu/joanna.rotte/2002%20Comments/commentsSpring2003.htm
+http://www9.todaysbride.com/wisdom/wedding_wisdom.asp?Topic=Beauty
+http://wwwa.accuweather.com/adcbin/public/promotional_redesign_blog.asp?webcaster=REDESIGN&date=2005-06-03_2156
+http://wwwa.accuweather.com/news-column.asp?partner=accuweather&myadc=0&webcaster=bastardi
+http://wwwa.house.gov/international_relations/108/kun050504.htm
+http://wwwau.kodak.com/US/en/motion/students/onCampus/cannes2002/indexP.shtml
+http://wwwc.house.gov/international_relations/108/bla040104.htm
+http://wwwc.house.gov/international_relations/108/rod092304.htm
+http://wwwcdf.pd.infn.it/~loreti/science.html
+http://wwwdb.europarl.eu.int/oeil/oeil_viewdnl.ProcedureView?lang=2&procid=1942
+http://wwwdb.europarl.eu.int/oeil/oeil_viewdnl.ProcedureView?lang=2&procid=2251
+http://wwwedu.oulu.fi/homepage/ejeronen/eco/students/sheffld/group_4/rivers.htm
+http://wwwjackbenimble.blogspot.com/2005/01/love-that-takes-your-breath-away.html
+http://wwwkms.bham.wednet.edu/Thursnote.htm
+http://wwwlibrary.csustan.edu/bsantos/army.html
+http://wwwmcc.murdoch.edu.au/ReadingRoom/film/dbase/2004/lantana.htm
+http://wwwnew.towson.edu/ess/faculty_research_interests.htm
+http://wwwsearch.sourceforge.net/DOMForm/
+http://wwwshs1.bham.wednet.edu/curric/socst/wa/tdhist.htm
+http://wwwsoc.nii.ac.jp/jbiochem/jb/131-5/5fbayltx.htm
+http://wwwsshe.murdoch.edu.au/intersections/issue7/raddeker.html
+http://wwwvis.informatik.uni-stuttgart.de/eng/teaching/lecture/fachprakt/einfuehrung_ss02-eng.html
+http://wwwvis.informatik.uni-stuttgart.de/eng/teaching/lecture/fachprakt/einfuehrung_ws02-03-eng.html
+http://wx.toronto.ca/inter/it/newsrel.nsf/0/eee651417113787185256df60045ca18?OpenDocument
+http://wycombelibdems.org.uk/news.html
+http://wyoung.net/twins/index.php?p=93
+http://x220.minasi.com/forum/topic.asp?whichpage=-1&TOPIC_ID=13080&REPLY_ID=53754
+http://xavier.bangor.ac.uk/xavier/spManual/content.html
+http://xbox.gamezone.com/gzreviews/r24055.htm
+http://xbox.ign.com/articles/582/582566p1.html
+http://xboxgamer.blogspot.com/2004_06_01_xboxgamer_archive.html
+http://xcski.com/blogs/pt/category/activities/photography-and-other-art/
+http://xenia.media.mit.edu/~mt/thesis/mt-thesis-5.5.html
+http://xeno.ipaustralia.gov.au/D:/Exmanual/pt30_39/part30.htm
+http://xeno.ipaustralia.gov.au/D:/Exmanual/pt46_55/part51.htm
+http://xml.coverpages.org/
+http://xml.coverpages.org/appSecurity.html
+http://xml.coverpages.org/bcml.html
+http://xml.coverpages.org/dtb.html
+http://xml.coverpages.org/matML.html
+http://xml.coverpages.org/ni2003-09-20-a.html
+http://xml.coverpages.org/ni2004-07-20-a.html
+http://xml.coverpages.org/stepml.html
+http://xml.silmaril.ie/
+http://xml.silmaril.ie/answers.html
+http://xml.sys-con.com/read/48910.htm
+http://xmlns.com/foaf/0.1/
+http://xnet.kp.org/permanentejournal/Fall00/BreastCancer.html
+http://xnet.kp.org/permanentejournal/fall03/winning.html
+http://xnet.kp.org/permanentejournal/spring02/reporting.html
+http://xoomer.virgilio.it/vvolpi/cap7.html
+http://xplore.com/xplore500/medium/sod.12.96.html
+http://xrlq.com/archives/2004/07/09/
+http://xroads.virginia.edu/~1930s/DISPLAY/39wf/legacy.htm
+http://xroads.virginia.edu/~CAP/gw/chap2.html
+http://xroads.virginia.edu/~DRBR/caldwell.html
+http://xroads.virginia.edu/~DRBR/goodman.html
+http://xroads.virginia.edu/~HYPER/WJAMES/ch02.html
+http://xroads.virginia.edu/~Hyper/Parrington/vol1/contents.html
+http://xroads.virginia.edu/~MA01/Grand-Jean/Hurston/Chapters/siteintroduction.html
+http://xroads.virginia.edu/~MA04/wood/mot/html/germany.htm
+http://xtremods.com/vbulletin/showthread.php?t=5797
+http://yahoo.businessweek.com/magazine/content/04_36/b3898055_mz010.htm
+http://yahoo.pcworld.com/yahoo/article/0,aid,120838,00.asp
+http://yahoo.reuters.com/financeQuoteCompanyNewsArticle.jhtml?duid=mtfh10137_2005-01-14_14-55-09_n14610178_newsml
+http://yahoo.reuters.com/financeQuoteCompanyNewsArticle.jhtml?duid=mtfh22597_2005-06-17_18-53-02_n16710320_newsml
+http://yahoo.shaadi.com/india-matrimony/films.php
+http://yahoocareers.seek.com.au/general_ID_items/content/ClassFAQs.ascx
+http://yale.tabroom.com/events.shtml
+http://yalebulldogs.collegesports.com/
+http://yaleglobal.yale.edu/about/rising.jsp
+http://yaleglobal.yale.edu/display.article?id=1213
+http://yaleglobal.yale.edu/display.article?id=4399
+http://yaleglobal.yale.edu/display.article?id=5042
+http://yaleglobal.yale.edu/display.article?id=5254
+http://yaleglobal.yale.edu/display.article?id=5529
+http://yalenewhavenhealth.org/library/healthguide/en-us/drugguide/topic.asp?hwid=d04877a1
+http://yalenewhavenhealth.org/library/healthguide/en-us/illnessconditions/topic.asp?hwid=nord976
+http://yalepress.yale.edu/YupBooks/viewbook.asp?isbn=0300069340
+http://yaohush.america.net/exclusive8.html
+http://yarmouthfc.tripod.com/id45.html
+http://yas.nic.in/yasroot/schemes/nsvs.htm
+http://ybmecc.co.kr/index.asp?sub1=employee
+http://ydelta.free.fr/job.htm
+http://ydr.com/about/history/11796A.shtml
+http://ydr.com/about/history/1comm5.shtml
+http://ydr.com/local/meetings.shtml
+http://ydr.com/story/justice/575/
+http://ydr.com/story/living/55369/
+http://ydr.com/story/op-ed/75359/
+http://ye.entreworld.org/5-2000/leadersg.cfm
+http://yellowbluegreen.proboards3.com/index.cgi?action=display&board=poster&num=1094910906&start=15
+http://yellowbrickro.campuskiss.com/
+http://yeoldeconsciousnessshoppe.com/art183.html
+http://yglesias.typepad.com/matthew/2005/04/how_to_do_thing.html
+http://yglesias.typepad.com/matthew/2005/05/its_the_end_of_.html
+http://ylighting.com/
+http://yod.com/books/
+http://yosemite.epa.gov/OAR%5Cglobalwarming.nsf/content/ClimateTrendsSeaLevel.html
+http://yosemite.epa.gov/OAR/globalwarming.nsf/content/ClimateTrendsSeaLevel.html
+http://yosemite.epa.gov/OAR/globalwarming.nsf/content/ResourceCenterPublicationsSLRCost_of_Holding.html
+http://yosemite.epa.gov/OAR/globalwarming.nsf/content/ResourceCenterPublicationsSeaLevelRiseIndex.html
+http://yosemite.epa.gov/administrator/speeches.nsf/0/137d40fb1715115d85256e1600656e30?OpenDocument
+http://yosemite.epa.gov/administrator/speeches.nsf/0/5aceb51fdb2ad787852564f0006ea17c?OpenDocument
+http://yosemite.epa.gov/administrator/speeches.nsf/0/a98d87d33ca61b3185256729005a813d?OpenDocument
+http://yosemite.epa.gov/administrator/speeches.nsf/0/c0aaebbc1d28dd0885256caf0074faa4?OpenDocument
+http://yosemite.epa.gov/administrator/speeches.nsf/0/e3f253a72960c15c85256628006249f6?OpenDocument
+http://yosemite.epa.gov/oar%5Cglobalwarming.nsf/content/ClimateTrendsSeaLevel.html
+http://yosemite.epa.gov/oar/globalwarming.nsf/content/ClimateTrendsSeaLevel.html
+http://yosemite.epa.gov/oar/globalwarming.nsf/content/ResourceCenterPublicationsSeaLevelRiseIndex.html
+http://youngpup.net/journal/2004/09
+http://yourmedicalsource.com/library/Parkinsons-Disease/PD_living.html
+http://yourmedicalsource.com/library/acltears/ACL_rehab.html
+http://yourmedicalsource.com/library/diabpreg/DPG_insulin.html
+http://youthcurry.blogspot.com/2005/05/ladkiyan-na-jaane-kyun.html
+http://youwillanyway.blogspot.com/
+http://youworkforthem.com/product.php?sku=P0145
+http://yp.yahoo.com/yp/Prairie_Rose_ND/category.html
+http://yp.yahoo.com/yp/Rose_City_TX/category.html
+http://yp.yahoo.com/yp/Rose_Hill_KS/category.html
+http://yp.yahoo.com/yp/St._Rose_LA/category.html
+http://yucky.kids.discovery.com/noflash/fun_n_games/activities/experiments/experiment_eyeball.html
+http://yvm.net/vme/democrats/min020212.htm
+http://zambia.usembassy.gov/zambia/Democracy_and_Human_Rights_Fund.html
+http://zane.typepad.com/ccuceo/2005/01/hope_dies_last_1.html
+http://zap.intergate.ca/speech.htm
+http://zap.intergate.ca/speech.html
+http://zappa.redsectorart.com/info/bio.htm
+http://zebrameat.com/z2/features/amster_privacy_ii.html
+http://zebu.uoregon.edu/~imamura/209/may10/baryon.html
+http://zebu.uoregon.edu/~js/21st_century_science/lectures/lec07.html
+http://zebu.uoregon.edu/~js/21st_century_science/lectures/lec14.html
+http://zebu.uoregon.edu/~js/21st_century_science/lectures/lec16.html
+http://zebu.uoregon.edu/~js/ast123/lectures/lec16.html
+http://zebu.uoregon.edu/~js/space/lectures/lec08.html
+http://zed1.com/journalized/archives/2004/04/
+http://zena.secureforum.com/Znet/zmag/articles/chomskymay98.htm
+http://zena.secureforum.com/Znet/zmag/articles/oct96winders.htm
+http://zenii.linux.org.uk/~telsa/Trips/Talks/ols-davems-keynote.html
+http://zerointelligence.net/archives/000255.php
+http://zerointelligence.net/archives/2004_08.php
+http://zerointelligence.net/archives/cat_kentucky.php
+http://zerolives.org/
+http://zerotwofan.com/rapture/contest3B/meantforme.html
+http://ziggurat.org/soap/infobase/oiluses.shtml
+http://zine.dal.net/previousissues/issue23/messages4.php
+http://zine.dal.net/previousissues/issue25/realitytv.php
+http://zines.webvalence.com/sites/CircleofBeauty/Broadcast.D20041216.html
+http://zmagsite.zmag.org/Jun2004/sargent0604.html
+http://zone.artizans.com/lite/browse.htm?subject=54249
+http://zork.net/motd/nick/scheme
+http://zygote.swarthmore.edu/fert11a1.html
+http://zzyx.ucsc.edu/casfs/issuepapers/issuepaper1.html
diff --git a/PerformanceTests/Parser/resources/runner.js b/PerformanceTests/Parser/resources/runner.js
index 4baa497..3fc0b4f 100644
--- a/PerformanceTests/Parser/resources/runner.js
+++ b/PerformanceTests/Parser/resources/runner.js
@@ -1,6 +1,6 @@
function log(text) {
- document.getElementById("log").innerText += text + "\n";
- window.scrollTo(document.body.height);
+ document.getElementById("log").innerHTML += text + "\n";
+ window.scrollTo(0, document.body.height);
}
function loadFile(path) {
diff --git a/PerformanceTests/Parser/simple-url.html b/PerformanceTests/Parser/simple-url.html
new file mode 100644
index 0000000..0469383
--- /dev/null
+++ b/PerformanceTests/Parser/simple-url.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<body>
+<pre id="log"></pre>
+<script src="resources/runner.js"></script>
+<script>
+var anchor = document.createElement("a");
+start(20, function() {
+ for (var x = 0; x < 200000; x++) {
+ anchor.href = "http://www.apple.com/"
+ }
+});
+</script>
+</body>
diff --git a/PerformanceTests/Parser/tiny-innerHTML.html b/PerformanceTests/Parser/tiny-innerHTML.html
new file mode 100644
index 0000000..b357cf1
--- /dev/null
+++ b/PerformanceTests/Parser/tiny-innerHTML.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<body>
+<pre id="log"></pre>
+<script src="resources/runner.js"></script>
+<script>
+start(20, function() {
+ var testDiv = document.createElement("div");
+ testDiv.style.display = "none";
+ document.body.appendChild(testDiv);
+ for (var x = 0; x < 100000; x++) {
+ testDiv.innerHTML = "This is a tiny HTML document";
+ }
+ document.body.removeChild(testDiv);
+});
+</script>
+</body>
diff --git a/PerformanceTests/Parser/url-parser.html b/PerformanceTests/Parser/url-parser.html
new file mode 100644
index 0000000..bd54e0c
--- /dev/null
+++ b/PerformanceTests/Parser/url-parser.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<body>
+<pre id="log"></pre>
+<script src="resources/runner.js"></script>
+<script>
+var urls = loadFile("resources/final-url-en").split("\n");
+var anchor = document.createElement("a");
+
+start(20, function() {
+ for (var x = 0; x < urls.length; x++) {
+ anchor.href = urls[x];
+ }
+});
+</script>
+</body>
diff --git a/PerformanceTests/XSSFilter/large-post-many-events.html b/PerformanceTests/XSSFilter/large-post-many-events.html
new file mode 100644
index 0000000..c26181f
--- /dev/null
+++ b/PerformanceTests/XSSFilter/large-post-many-events.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+<title>WebKit test - use for detect speed differences when submitting the form</title>
+<style type="text/css">
+BODY { background-color: #F0F0F0 }
+
+BODY, TABLE, TD {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+}
+.funcDesc { background-color:#9F8E1C; color:#000000; /* background-color:#ffffbb; */ }
+.t { font-family:courier; }
+.tro { font-family:courier; background-color: #EBEBE4; }
+.ro { background-color: #EBEBE4; }
+#tableHeaders th { background-color:#F0F0F0; }
+#tableRowstd { background-color:#F0F0F0; }
+</style>
+<script>
+window.onload = function() {
+ document.getElementById("score").textContent = window.performance.timing.domContentLoadedEventStart - window.performance.timing.responseStart;
+}
+</script>
+</head>
+<body>
+
+<form id="frmName" name="frmName" method="post" action="large-post-many-events.html">
+
+<div style="margin:0 auto; width:600px; background-color:#bbb; padding:20px;">
+Score (smaller is better): <span id="score">Running...</span>
+</div>
+
+<input type="submit" value="Request Page Again">
+<br><br>
+
+
+<div id="divMainTable" style="padding:0; border:0; overflow:auto; height:450px;">
+<table id="tableRows" border="0" cellpadding="3" cellspacing="1" style="background-color:black; width:;">
+
+
+<script>
+for (var i=0; i < 400; ++i) {
+ document.write("<tr><td><a href=\"changed-name.php?ID=" + i + "\" target=\"_blank\">ChangedName, ChangedName</a></td> <td width=\"80px\">22331133</td> <td>06.02.2010</td> <td ondblclick=\"tR('" + i + "_1865_5721','')\">&nbsp;&nbsp;22:15&nbsp;&nbsp;</td> <td><input type=\"text\" name=\"frmI1_" + i + "_1865_5721\" onblur=\"chkT(this);\" size=\"5\" class=\"t\" value=\"00:00\"></td> <td><input type=\"text\" name=\"frmU1_" + i + "_1865_5721\" onblur=\"chkT(this);\" size=\"5\" class=\"t\" value=\"00:00\"></td> <td><input type=\"text\" name=\"frmI2_" + i + "_1865_5721\" onblur=\"chkT(this);\" size=\"5\" class=\"t\" value=\"00:00\"></td> <td><input type=\"text\" name=\"frmU2_" + i + "_1865_5721\" onblur=\"chkT(this);\" size=\"5\" class=\"t\" value=\"00:00\"></td> <td><input type=\"text\" name=\"frmLU_" + i + "_1865_5721\" onblur=\"chkT(this);\" size=\"5\" class=\"t\" value=\"00:00\"></td> <td> <select name=\"frmOK_" + i + "_1865_5721\" onblur=\"checkFlag(this)\" onchange=\"tOK(this)\" > <option value=\"0\" selected=\"selected\">Nei</option> <option value=\"1\">Ja</option></td> </select> <td><a href=\"changed-another-name.php?ID=1865\">Changed name</a></td> <td>Changed name</td> <td>&nbsp;&nbsp;&nbsp;BLS&nbsp;&nbsp;&nbsp;</td> <td align=\"center\">&nbsp;&nbsp;&nbsp;201&nbsp;&nbsp;&nbsp;</td> <td><div style=\"display:none;\"><input type=\"checkbox\" id=\"funcFlag_" + i + "_1865_5721\" value=\"\" name=\"funcFlag[]\"></div> <select name=\"frmUarr_" + i + "_1865_5721\" onchange=\"chkVFunc(this)\" style=\"background-color:#FFFFFF;\"> <option value=\"5719\" style=\"background-color:#FFFFFF;\">Changed1 (22:15 - 05:00)</option> <option value=\"5720\" style=\"background-color:#FFFFFF;\">Changed2 (22:15 - 05:00)</option> <option value=\"5721\" selected=\"selected\" style=\"background-color:#FFFFFF;\">Changed3 (22:15 - 05:00)</option> <option value=\"5787\" style=\"background-color:#FF8800\">Changed4 (22:15 - 22:30)</option> <option class=\"funcDesc\" value=\"0\" disabled=\"disabled\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Changed text here as well</option> <option class=\"funcDesc\" value=\"0\" disabled=\"disabled\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Changed text here also</option> </select><input type=\"hidden\" id=\"frmUarr_" + i + "_1865_5721_h\" value=\"5721\"></td> <td align=\"center\" > <select name=\"frmJobb_" + i + "_1865_5721\" title=\"JA\" onchange=\"checkFlag(this)\"> <option value=\"1\">Chan</option> <option value=\"2\" disabled=\"disabled\">Chan</option> <option value=\"3\" selected=\"selected\">Chan</option> </select></td> <td><input class=\"ro\" type=\"text\" readonly=\"readonly\" onblur=\"checkFlag(this)\" name=\"frmKommArb_" + i + "_1865_5721\" value=\"\" size=\"20\"></td> <td><input class=\"ro\" type=\"text\" readonly=\"readonly\" onblur=\"checkFlag(this)\" name=\"frmKommKru_" + i + "_1865_5721\" value=\"\" size=\"20\"></td> <td><input type=\"text\" onblur=\"checkFlag(this)\" name=\"frmKomm_" + i + "_1865_5721\" value=\"\" size=\"20\"></td> <td align=\"center\" style=\"\"><input type=\"checkbox\" onclick=\"checkUncheckOpptatt(this,this.value)\" id=\"O_" + i + "_1\" name=\"frmAnsOppt[]\" value=\"" + i + "_2010-02-06\" style=\"margin-left:20px; margin-right:20px;\"></td> </tr>");
+}
+</script>
+</table>
+</form>
+</div>
+</body>
+</html>
diff --git a/PerformanceTests/XSSFilter/large-post-many-inline-scripts-and-events.html b/PerformanceTests/XSSFilter/large-post-many-inline-scripts-and-events.html
new file mode 100644
index 0000000..9eaa93f
--- /dev/null
+++ b/PerformanceTests/XSSFilter/large-post-many-inline-scripts-and-events.html
@@ -0,0 +1,10 @@
+<form action="resources/target-for-large-post-many-inline-scripts-and-events.html" method=POST>
+<input name="a" type="hidden">
+<input type=submit>
+</form>
+<script>
+var val = "";
+for (i = 0; i < 200000; ++i)
+ val += Math.random();
+document.getElementsByName("a")[0].value = val;
+</script>
diff --git a/PerformanceTests/XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html b/PerformanceTests/XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html
new file mode 100644
index 0000000..37ada23
--- /dev/null
+++ b/PerformanceTests/XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html
@@ -0,0 +1,1287 @@
+<script>
+window.onload = function() {
+ document.getElementById("score").textContent = window.performance.timing.domContentLoadedEventStart - window.performance.timing.responseStart;
+}
+</script>
+Score (smaller is better): <span id="score"></span><br>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<a href="javascript:return '0'"></a>
+.<img onclick="alert('0')">
+<script src="data:text/plain,'%30'"></script>
+<script>\x30</script>
+<br>Done.
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
new file mode 100644
index 0000000..13ea13c
--- /dev/null
+++ b/Source/CMakeLists.txt
@@ -0,0 +1,132 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+PROJECT(WebKit)
+
+# Set a default build type if and only if user did not define one as command
+# line options and he did not give custom CFLAGS or CXXFLAGS. Otherwise, flags
+# from default build type would overwrite user-defined ones.
+IF (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_C_FLAGS AND NOT CMAKE_CXX_FLAGS)
+ SET(CMAKE_BUILD_TYPE Release)
+ENDIF ()
+SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+
+SET(JAVASCRIPTCORE_DIR "${CMAKE_SOURCE_DIR}/JavaScriptCore")
+SET(WEBCORE_DIR "${CMAKE_SOURCE_DIR}/WebCore")
+SET(WEBKIT_DIR "${CMAKE_SOURCE_DIR}/WebKit")
+SET(TOOLS_DIR "${CMAKE_SOURCE_DIR}/../Tools")
+SET(DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources")
+
+INCLUDE(WebKitMacros)
+INCLUDE(WebKitFS)
+INCLUDE(WebKitHelpers)
+INCLUDE(WebKitFeatures)
+
+# -----------------------------------------------------------------------------
+# Determine which port will be built
+# -----------------------------------------------------------------------------
+SET(ALL_PORTS Efl)
+OPTION(PORT "choose which WebKit port to build (one of ${ALL_PORTS})" "NOPORT")
+
+# -----------------------------------------------------------------------------
+# Find common packages (used by all ports)
+# -----------------------------------------------------------------------------
+FIND_PACKAGE(BISON REQUIRED)
+FIND_PACKAGE(FLEX REQUIRED)
+FIND_PACKAGE(Gperf REQUIRED)
+FIND_PACKAGE(Perl REQUIRED)
+FIND_PACKAGE(PythonInterp REQUIRED)
+
+# -----------------------------------------------------------------------------
+# Determine the target processor
+# -----------------------------------------------------------------------------
+STRING(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR)
+IF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+ SET(WTF_CPU_ARM 1)
+ELSEIF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)")
+ SET(WTF_CPU_X86_64 1)
+ELSEIF (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)")
+ SET(WTF_CPU_X86 1)
+ELSE ()
+ MESSAGE(FATAL_ERROR "Unknown CPU '${CMAKE_SYSTEM_PROCESSOR}'")
+ENDIF ()
+
+# -----------------------------------------------------------------------------
+# Determine the operating system
+# -----------------------------------------------------------------------------
+IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ SET(WTF_OS_UNIX 1)
+
+ IF (APPLE)
+ SET(WTF_OS_MAC_OS_X 1)
+ ENDIF ()
+ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
+ SET(WTF_OS_WINDOWS 1)
+ELSE ()
+ MESSAGE(FATAL_ERROR "Unknown OS '${CMAKE_SYSTEM_NAME}'")
+ENDIF ()
+
+# -----------------------------------------------------------------------------
+# Default target names (can be overrriden in Options${PORT}.cmake file)
+# -----------------------------------------------------------------------------
+SET(JSC_EXECUTABLE_NAME JSC)
+SET(WTF_LIBRARY_NAME WTF)
+SET(JavaScriptCore_LIBRARY_NAME JavaScriptCore)
+SET(WebCore_LIBRARY_NAME WebCore)
+SET(WebKit_LIBRARY_NAME WebKit)
+
+# -----------------------------------------------------------------------------
+# Default library types
+# -----------------------------------------------------------------------------
+OPTION(SHARED_CORE "build WTF, JavaScriptCore and WebCore as shared libraries")
+
+IF (SHARED_CORE)
+ SET(WTF_LIBRARY_TYPE SHARED)
+ SET(JavaScriptCore_LIBRARY_TYPE SHARED)
+ SET(WebCore_LIBRARY_TYPE SHARED)
+ELSE ()
+ SET(WTF_LIBRARY_TYPE STATIC)
+ SET(JavaScriptCore_LIBRARY_TYPE STATIC)
+ SET(WebCore_LIBRARY_TYPE STATIC)
+ENDIF ()
+
+SET(WebKit_LIBRARY_TYPE SHARED)
+
+# -----------------------------------------------------------------------------
+# Port-specific options
+# -----------------------------------------------------------------------------
+INCLUDE(OptionsCommon)
+INCLUDE(Options${PORT})
+
+# -----------------------------------------------------------------------------
+# Define packaging
+# -----------------------------------------------------------------------------
+INCLUDE(WebKitPackaging)
+
+# -----------------------------------------------------------------------------
+# Add module directories
+# -----------------------------------------------------------------------------
+ADD_SUBDIRECTORY(JavaScriptCore)
+ADD_SUBDIRECTORY(WebCore)
+ADD_SUBDIRECTORY(WebKit)
+
+# -----------------------------------------------------------------------------
+# Add test browser if exists
+# -----------------------------------------------------------------------------
+INCLUDE_IF_EXISTS(${TOOLS_DIR}/CMakeLists${PORT}.txt)
+
+# -----------------------------------------------------------------------------
+# Set compiler flags for all targets
+# -----------------------------------------------------------------------------
+WEBKIT_SET_EXTRA_COMPILER_FLAGS(${WTF_LIBRARY_NAME})
+WEBKIT_SET_EXTRA_COMPILER_FLAGS(${JavaScriptCore_LIBRARY_NAME})
+WEBKIT_SET_EXTRA_COMPILER_FLAGS(${WebCore_LIBRARY_NAME})
+WEBKIT_SET_EXTRA_COMPILER_FLAGS(${WebKit_LIBRARY_NAME})
+
+# -----------------------------------------------------------------------------
+# Create the configuration file
+# -----------------------------------------------------------------------------
+CONFIGURE_FILE(cmakeconfig.h.cmake ${CMAKE_BINARY_DIR}/cmakeconfig.h @ONLY)
+
+# -----------------------------------------------------------------------------
+# Prints a summary of all enabled/disabled features
+# -----------------------------------------------------------------------------
+WEBKIT_PRINT_FEATURES()
diff --git a/Source/DerivedSources.pro b/Source/DerivedSources.pro
new file mode 100644
index 0000000..41c6fd2
--- /dev/null
+++ b/Source/DerivedSources.pro
@@ -0,0 +1,20 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+SUBDIRS += \
+ JavaScriptCore/DerivedSources.pro \
+ WebCore/DerivedSources.pro \
+ WebKit/qt/Api/DerivedSources.pro
+
+webkit2: SUBDIRS += WebKit2/DerivedSources.pro
+
+for(subpro, SUBDIRS) {
+ subdir = $${dirname(subpro)}
+ subtarget = $$replace(subpro, [^a-zA-Z0-9_], -)
+ eval($${subtarget}.makefile = "Makefile.DerivedSources")
+ eval(generated_files-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f Makefile.DerivedSources generated_files))
+ QMAKE_EXTRA_TARGETS += generated_files-$${subtarget}
+ generated_files.depends += generated_files-$${subtarget}
+}
+
+QMAKE_EXTRA_TARGETS += generated_files
diff --git a/Source/JavaScriptCore/API/JSCallbackObject.h b/Source/JavaScriptCore/API/JSCallbackObject.h
index 83442b2..f47d0b1 100644
--- a/Source/JavaScriptCore/API/JSCallbackObject.h
+++ b/Source/JavaScriptCore/API/JSCallbackObject.h
@@ -54,11 +54,11 @@ struct JSCallbackObjectData {
return m_privateProperties->getPrivateProperty(propertyName);
}
- void setPrivateProperty(const Identifier& propertyName, JSValue value)
+ void setPrivateProperty(JSGlobalData& globalData, JSCell* owner, const Identifier& propertyName, JSValue value)
{
if (!m_privateProperties)
m_privateProperties = adoptPtr(new JSPrivatePropertyMap);
- m_privateProperties->setPrivateProperty(propertyName, value);
+ m_privateProperties->setPrivateProperty(globalData, owner, propertyName, value);
}
void deletePrivateProperty(const Identifier& propertyName)
@@ -83,12 +83,13 @@ struct JSCallbackObjectData {
PrivatePropertyMap::const_iterator location = m_propertyMap.find(propertyName.impl());
if (location == m_propertyMap.end())
return JSValue();
- return location->second;
+ return location->second.get();
}
- void setPrivateProperty(const Identifier& propertyName, JSValue value)
+ void setPrivateProperty(JSGlobalData& globalData, JSCell* owner, const Identifier& propertyName, JSValue value)
{
- m_propertyMap.set(propertyName.impl(), value);
+ WriteBarrier<Unknown> empty;
+ m_propertyMap.add(propertyName.impl(), empty).first->second.set(globalData, owner, value);
}
void deletePrivateProperty(const Identifier& propertyName)
@@ -100,12 +101,12 @@ struct JSCallbackObjectData {
{
for (PrivatePropertyMap::iterator ptr = m_propertyMap.begin(); ptr != m_propertyMap.end(); ++ptr) {
if (ptr->second)
- markStack.append(ptr->second);
+ markStack.append(&ptr->second);
}
}
private:
- typedef HashMap<RefPtr<StringImpl>, JSValue, IdentifierRepHash> PrivatePropertyMap;
+ typedef HashMap<RefPtr<StringImpl>, WriteBarrier<Unknown>, IdentifierRepHash> PrivatePropertyMap;
PrivatePropertyMap m_propertyMap;
};
OwnPtr<JSPrivatePropertyMap> m_privateProperties;
@@ -137,9 +138,9 @@ public:
return m_callbackObjectData->getPrivateProperty(propertyName);
}
- void setPrivateProperty(const Identifier& propertyName, JSValue value)
+ void setPrivateProperty(JSGlobalData& globalData, const Identifier& propertyName, JSValue value)
{
- m_callbackObjectData->setPrivateProperty(propertyName, value);
+ m_callbackObjectData->setPrivateProperty(globalData, this, propertyName, value);
}
void deletePrivateProperty(const Identifier& propertyName)
@@ -154,7 +155,6 @@ private:
virtual UString className() const;
virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertySlot(ExecState*, unsigned, PropertySlot&);
virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
virtual void put(ExecState*, const Identifier&, JSValue, PutPropertySlot&);
diff --git a/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h b/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h
index de5d842..59373ec 100644
--- a/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h
+++ b/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h
@@ -164,12 +164,6 @@ bool JSCallbackObject<Base>::getOwnPropertySlot(ExecState* exec, const Identifie
}
template <class Base>
-bool JSCallbackObject<Base>::getOwnPropertySlot(ExecState* exec, unsigned propertyName, PropertySlot& slot)
-{
- return getOwnPropertySlot(exec, Identifier::from(exec, propertyName), slot);
-}
-
-template <class Base>
bool JSCallbackObject<Base>::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
{
PropertySlot slot;
@@ -238,7 +232,7 @@ void JSCallbackObject<Base>::put(ExecState* exec, const Identifier& propertyName
if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.impl())) {
if (entry->attributes & kJSPropertyAttributeReadOnly)
return;
- JSCallbackObject<Base>::putDirect(propertyName, value); // put as override property
+ JSCallbackObject<Base>::putDirect(exec->globalData(), propertyName, value); // put as override property
return;
}
}
@@ -565,7 +559,7 @@ JSValue JSCallbackObject<Base>::staticFunctionGetter(ExecState* exec, JSValue sl
if (JSObjectCallAsFunctionCallback callAsFunction = entry->callAsFunction) {
JSObject* o = new (exec) JSCallbackFunction(exec, asGlobalObject(thisObj->getAnonymousValue(0)), callAsFunction, propertyName);
- thisObj->putDirect(propertyName, o, entry->attributes);
+ thisObj->putDirect(exec->globalData(), propertyName, o, entry->attributes);
return o;
}
}
diff --git a/Source/JavaScriptCore/API/JSObjectRef.cpp b/Source/JavaScriptCore/API/JSObjectRef.cpp
index d6de426..d3c1993 100644
--- a/Source/JavaScriptCore/API/JSObjectRef.cpp
+++ b/Source/JavaScriptCore/API/JSObjectRef.cpp
@@ -108,7 +108,7 @@ JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObje
jsPrototype = exec->lexicalGlobalObject()->objectPrototype();
JSCallbackConstructor* constructor = new (exec) JSCallbackConstructor(exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->callbackConstructorStructure(), jsClass, callAsConstructor);
- constructor->putDirect(exec->propertyNames().prototype, jsPrototype, DontEnum | DontDelete | ReadOnly);
+ constructor->putDirect(exec->globalData(), exec->propertyNames().prototype, jsPrototype, DontEnum | DontDelete | ReadOnly);
return toRef(constructor);
}
@@ -385,11 +385,11 @@ bool JSObjectSetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRe
JSValue jsValue = value ? toJS(exec, value) : JSValue();
Identifier name(propertyName->identifier(&exec->globalData()));
if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) {
- static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivateProperty(name, jsValue);
+ static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivateProperty(exec->globalData(), name, jsValue);
return true;
}
if (jsObject->inherits(&JSCallbackObject<JSObjectWithGlobalObject>::info)) {
- static_cast<JSCallbackObject<JSObjectWithGlobalObject>*>(jsObject)->setPrivateProperty(name, jsValue);
+ static_cast<JSCallbackObject<JSObjectWithGlobalObject>*>(jsObject)->setPrivateProperty(exec->globalData(), name, jsValue);
return true;
}
return false;
diff --git a/Source/JavaScriptCore/API/JSStringRefCF.cpp b/Source/JavaScriptCore/API/JSStringRefCF.cpp
index e0961d0..0877a13 100644
--- a/Source/JavaScriptCore/API/JSStringRefCF.cpp
+++ b/Source/JavaScriptCore/API/JSStringRefCF.cpp
@@ -42,7 +42,7 @@ JSStringRef JSStringCreateWithCFString(CFStringRef string)
// it can hold. (<rdar://problem/6806478>)
size_t length = CFStringGetLength(string);
if (length) {
- OwnArrayPtr<UniChar> buffer(new UniChar[length]);
+ OwnArrayPtr<UniChar> buffer = adoptArrayPtr(new UniChar[length]);
CFStringGetCharacters(string, CFRangeMake(0, length), buffer.get());
COMPILE_ASSERT(sizeof(UniChar) == sizeof(UChar), unichar_and_uchar_must_be_same_size);
return OpaqueJSString::create(reinterpret_cast<UChar*>(buffer.get()), length).leakRef();
diff --git a/Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h b/Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h
index 64e1f4d..f7b91da 100644
--- a/Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h
+++ b/Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h
@@ -37,7 +37,7 @@ class JSObject;
typedef void (*JSWeakMapDestroyedCallback)(struct OpaqueJSWeakObjectMap*, void*);
-typedef JSC::WeakGCMap<void*, JSC::JSObject*> WeakMapType;
+typedef JSC::WeakGCMap<void*, JSC::JSObject> WeakMapType;
struct OpaqueJSWeakObjectMap : public RefCounted<OpaqueJSWeakObjectMap> {
public:
diff --git a/Source/JavaScriptCore/Android.mk b/Source/JavaScriptCore/Android.mk
index 052af2c..31d6fde 100644
--- a/Source/JavaScriptCore/Android.mk
+++ b/Source/JavaScriptCore/Android.mk
@@ -64,12 +64,7 @@ LOCAL_SRC_FILES := \
parser/Nodes.cpp \
parser/Parser.cpp \
parser/ParserArena.cpp \
- \
- pcre/pcre_compile.cpp \
- pcre/pcre_exec.cpp \
- pcre/pcre_tables.cpp \
- pcre/pcre_ucp_searchfuncs.cpp \
- pcre/pcre_xclass.cpp \
+ parser/SourceProviderCache.cpp \
\
profiler/Profile.cpp \
profiler/ProfileGenerator.cpp \
@@ -84,6 +79,7 @@ LOCAL_SRC_FILES := \
runtime/BooleanObject.cpp \
runtime/BooleanPrototype.cpp \
runtime/CallData.cpp \
+ runtime/MarkedBlock.cpp \
runtime/MarkedSpace.cpp \
runtime/Heap.cpp \
runtime/CommonIdentifiers.cpp \
@@ -133,6 +129,7 @@ LOCAL_SRC_FILES := \
runtime/LiteralParser.cpp \
runtime/Lookup.cpp \
runtime/MachineStackMarker.cpp \
+ runtime/ConservativeSet.cpp \
runtime/MarkStack.cpp \
runtime/MarkStackPosix.cpp \
runtime/MathObject.cpp \
@@ -168,6 +165,7 @@ LOCAL_SRC_FILES := \
\
wtf/Assertions.cpp \
wtf/ByteArray.cpp \
+ wtf/CryptographicallyRandomNumber.cpp \
wtf/CurrentTime.cpp \
wtf/DateMath.cpp \
wtf/DecimalNumber.cpp \
@@ -176,6 +174,7 @@ LOCAL_SRC_FILES := \
wtf/MD5.cpp \
wtf/MainThread.cpp \
wtf/OSAllocatorPosix.cpp \
+ wtf/OSRandomSource.cpp \
wtf/PageAllocationAligned.cpp\
wtf/PageBlock.cpp\
wtf/RandomNumber.cpp \
@@ -237,17 +236,10 @@ $(LEXER_HEADER): $(LOCAL_PATH)/create_hash_table
$(LEXER_HEADER): $(intermediates)/%.lut.h : $(LOCAL_PATH)/parser/Keywords.table
$(transform-generated-source)
-CHARTABLES := $(intermediates)/chartables.c
-$(CHARTABLES): PRIVATE_PATH := $(LOCAL_PATH)
-$(CHARTABLES): PRIVATE_CUSTOM_TOOL = perl $(PRIVATE_PATH)/pcre/dftables $@
-$(CHARTABLES): $(LOCAL_PATH)/pcre/dftables
-$(CHARTABLES): $(LOCAL_PATH)/pcre/pcre_internal.h
- $(transform-generated-source)
-
REGEXP_JIT_TABLES := $(intermediates)/RegExpJitTables.h
$(REGEXP_JIT_TABLES): PRIVATE_PATH := $(LOCAL_PATH)
$(REGEXP_JIT_TABLES): PRIVATE_CUSTOM_TOOL = python $(PRIVATE_PATH)/create_regex_tables > $@
$(REGEXP_JIT_TABLES): $(LOCAL_PATH)/create_regex_tables
$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(JSC_OBJECTS) $(LEXER_HEADER) $(CHARTABLES) $(REGEXP_JIT_TABLES)
+LOCAL_GENERATED_SOURCES += $(JSC_OBJECTS) $(LEXER_HEADER) $(REGEXP_JIT_TABLES)
diff --git a/Source/JavaScriptCore/Android.v8.wtf.mk b/Source/JavaScriptCore/Android.v8.wtf.mk
index 340ed90..603c454 100644
--- a/Source/JavaScriptCore/Android.v8.wtf.mk
+++ b/Source/JavaScriptCore/Android.v8.wtf.mk
@@ -26,14 +26,9 @@
# wtf source files
LOCAL_SRC_FILES := \
- pcre/pcre_compile.cpp \
- pcre/pcre_exec.cpp \
- pcre/pcre_tables.cpp \
- pcre/pcre_ucp_searchfuncs.cpp \
- pcre/pcre_xclass.cpp \
- \
wtf/Assertions.cpp \
wtf/ByteArray.cpp \
+ wtf/CryptographicallyRandomNumber.cpp \
wtf/CurrentTime.cpp \
wtf/DateMath.cpp \
wtf/DecimalNumber.cpp \
@@ -42,6 +37,7 @@ LOCAL_SRC_FILES := \
wtf/MD5.cpp \
wtf/MainThread.cpp \
wtf/OSAllocatorPosix.cpp \
+ wtf/OSRandomSource.cpp \
wtf/PageAllocationAligned.cpp \
wtf/PageBlock.cpp \
wtf/RandomNumber.cpp \
@@ -72,16 +68,15 @@ LOCAL_SRC_FILES := \
\
wtf/url/src/URLCharacterTypes.cpp \
wtf/url/src/URLEscape.cpp \
- wtf/url/src/URLSegments.cpp
+ wtf/url/src/URLSegments.cpp \
+ \
+ yarr/YarrInterpreter.cpp \
+ yarr/YarrPattern.cpp
-CHARTABLES := $(intermediates)/chartables.c
-$(CHARTABLES): PRIVATE_PATH := $(LOCAL_PATH)
-$(CHARTABLES): PRIVATE_CUSTOM_TOOL = perl $(PRIVATE_PATH)/pcre/dftables $@
-$(CHARTABLES): $(LOCAL_PATH)/pcre/dftables
-$(CHARTABLES): $(LOCAL_PATH)/pcre/pcre_internal.h
+REGEXP_JIT_TABLES := $(intermediates)/RegExpJitTables.h
+$(REGEXP_JIT_TABLES): PRIVATE_PATH := $(LOCAL_PATH)
+$(REGEXP_JIT_TABLES): PRIVATE_CUSTOM_TOOL = python $(PRIVATE_PATH)/create_regex_tables > $@
+$(REGEXP_JIT_TABLES): $(LOCAL_PATH)/create_regex_tables
$(transform-generated-source)
-$(intermediates)/pcre/pcre_tables.o : $(CHARTABLES)
-
-# We do not add $(CHARTABLES) to LOCAL_GENERATED_SOURCES because the chartables.c file
-# is explicitly #included in pcre_tables.cpp.
+LOCAL_GENERATED_SOURCES += $(REGEXP_JIT_TABLES)
diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
index 674d272..f18826e 100644
--- a/Source/JavaScriptCore/CMakeLists.txt
+++ b/Source/JavaScriptCore/CMakeLists.txt
@@ -10,7 +10,6 @@ SET(JavaScriptCore_INCLUDE_DIRECTORIES
"${JAVASCRIPTCORE_DIR}/interpreter"
"${JAVASCRIPTCORE_DIR}/jit"
"${JAVASCRIPTCORE_DIR}/parser"
- "${JAVASCRIPTCORE_DIR}/pcre"
"${JAVASCRIPTCORE_DIR}/profiler"
"${JAVASCRIPTCORE_DIR}/runtime"
"${JAVASCRIPTCORE_DIR}/yarr"
@@ -67,12 +66,7 @@ SET(JavaScriptCore_SOURCES
parser/Nodes.cpp
parser/Parser.cpp
parser/ParserArena.cpp
-
- pcre/pcre_compile.cpp
- pcre/pcre_exec.cpp
- pcre/pcre_tables.cpp
- pcre/pcre_ucp_searchfuncs.cpp
- pcre/pcre_xclass.cpp
+ parser/SourceProviderCache.cpp
profiler/Profile.cpp
profiler/ProfileGenerator.cpp
@@ -87,6 +81,7 @@ SET(JavaScriptCore_SOURCES
runtime/BooleanObject.cpp
runtime/BooleanPrototype.cpp
runtime/CallData.cpp
+ runtime/MarkedBlock.cpp
runtime/MarkedSpace.cpp
runtime/Heap.cpp
runtime/CommonIdentifiers.cpp
@@ -137,6 +132,7 @@ SET(JavaScriptCore_SOURCES
runtime/LiteralParser.cpp
runtime/Lookup.cpp
runtime/MachineStackMarker.cpp
+ runtime/ConservativeSet.cpp
runtime/MarkStack.cpp
runtime/MathObject.cpp
runtime/NativeErrorConstructor.cpp
@@ -208,15 +204,6 @@ ENDFOREACH ()
GENERATE_HASH_LUT(${JAVASCRIPTCORE_DIR}/parser/Keywords.table ${DERIVED_SOURCES_DIR}/Lexer.lut.h MAIN_DEPENDENCY)
LIST(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_DIR}/Lexer.lut.h)
-# GENERATOR: "chartables.c": compile and execute the chartables generator (and add it to sources)
-ADD_CUSTOM_COMMAND(
- OUTPUT ${DERIVED_SOURCES_DIR}/chartables.c
- MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/pcre/dftables
- COMMAND ${PERL_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/pcre/dftables --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${DERIVED_SOURCES_DIR}/chartables.c
- VERBATIM)
-ADD_SOURCE_DEPENDENCIES(${JAVASCRIPTCORE_DIR}/pcre/pcre_tables.cpp ${DERIVED_SOURCES_DIR}/chartables.c)
-
-
#GENERATOR: "RegExpJitTables.h": tables used by Yarr
ADD_CUSTOM_COMMAND(
OUTPUT ${DERIVED_SOURCES_DIR}/RegExpJitTables.h
diff --git a/Source/JavaScriptCore/CMakeListsWinCE.txt b/Source/JavaScriptCore/CMakeListsWinCE.txt
index 666b1c7..58a535e 100644
--- a/Source/JavaScriptCore/CMakeListsWinCE.txt
+++ b/Source/JavaScriptCore/CMakeListsWinCE.txt
@@ -3,3 +3,20 @@ LIST(APPEND JavaScriptCore_SOURCES
runtime/MarkStackWin.cpp
)
+
+IF (ENABLE_JIT AND WTF_CPU_ARM)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.asm
+ MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/create_jit_stubs
+ DEPENDS ${JAVASCRIPTCORE_DIR}/jit/JITStubs.cpp
+ COMMAND ${PERL_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/create_jit_stubs --prefix=MSVC ${JAVASCRIPTCORE_DIR}/jit/JITStubs.cpp > ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.asm
+ VERBATIM)
+
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.obj
+ MAIN_DEPENDENCY ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.asm
+ COMMAND armasm -nologo ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.asm ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.obj
+ VERBATIM)
+
+ LIST (APPEND JavaScriptCore_SOURCES ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.obj)
+ENDIF ()
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index a5391bf..12e0cfd 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,4130 @@
+2011-02-13 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Add a compile-time option to completely disable WebArchive support.
+ https://bugs.webkit.org/show_bug.cgi?id=52712
+
+ Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.
+ Ports Affected:
+ WebArchive support is currently enabled for all ports that define PLATFORM(CF) apart from Qt.
+ This patch preserves this behavior except that it also disables support in the Chromium port.
+
+ * wtf/Platform.h: Add ENABLE_WEB_ARCHIVE definition and turn it off explicitly for Qt & Chromium ports.
+
+2011-02-13 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Bug 53760 - JSC fails to build with TOT Clang
+ https://bugs.webkit.org/show_bug.cgi?id=53760
+
+ Fix -Woverloaded-virtual warnings. This is also a 6% speedup on the v8 raytrace
+ benchmark; it is nothing-to-noise on everything else.
+
+ * API/JSCallbackObject.h: Remove pointlessly overloaded method.
+ * API/JSCallbackObjectFunctions.h: Ditto.
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::put): Change signature to match the base class. This implementation
+ was no longer being called by anyone. This wasn't noticed because it is merely an
+ optimization of the base class' implementation.
+ * runtime/Arguments.h: Ditto.
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Use /dev/urandom as the OSRandomSource on OS(DARWIN)
+ https://bugs.webkit.org/show_bug.cgi?id=54279
+
+ I'm not sure it makes much of a difference whether we use arc4random or
+ /dev/urandom on Mac. However, there's some aesthetic benefit to using
+ the same underlying API on as many platforms as reasonable.
+
+ * config.h:
+ * wtf/OSRandomSource.cpp:
+ (WTF::cryptographicallyRandomValuesFromOS):
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Kenneth Russell.
+
+ Enable ArrayBuffers by default
+ https://bugs.webkit.org/show_bug.cgi?id=54310
+
+ Export the required functions.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2011-02-11 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove explicit disable ENABLE_ASSEMBLER_WX_EXCLUSIVE on non-iOS ports
+ https://bugs.webkit.org/show_bug.cgi?id=54107
+
+ It is unnecessary to explicitly disable ENABLE_ASSEMBLER_WX_EXCLUSIVE
+ by the definition of ENABLE().
+
+ * wtf/Platform.h:
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Randomly touch some build files in the hopes of fixing the Qt build.
+
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Garbage collection timer cycles forever, even when nothing is happening
+ https://bugs.webkit.org/show_bug.cgi?id=54320
+
+ (Rolling back in r78386 with the build fixed.)
+
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallbackPlatformData::trigger): Be sure to make
+ our timer inert after forcing a GC, to avoid GC'ing repeatedly.
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Used svn merge -r78386:78385 to roll out r78386 because it broke the build.
+
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallbackPlatformData::trigger):
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Garbage collection timer cycles forever, even when nothing is happening
+ https://bugs.webkit.org/show_bug.cgi?id=54320
+
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallbackPlatformData::trigger): Be sure to make
+ our timer inert after forcing a GC, to avoid GC'ing repeatedly.
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Windows build: added an exported symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A little more encapsulation for the heap: Removed CollectorHeapIterator
+ https://bugs.webkit.org/show_bug.cgi?id=54298
+
+ CollectorHeapIterator is a God object that knows the internals of each
+ of the pieces of the heap. This undermines the encapsulation I'm trying
+ to achieve by splitting concepts into different classes.
+
+ As an alternative, I've given each class a forEach iteration function,
+ which takes a functor as an argument. Now, each class just needs to
+ know how to iterate the things it knows about.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed CollectorHeapIterator.
+
+ * debugger/Debugger.cpp:
+ (JSC::Recompiler::Recompiler):
+ (JSC::Recompiler::~Recompiler):
+ (JSC::Recompiler::operator()):
+ (JSC::Debugger::recompileAllJSFunctions): Updated to use forEach interface
+ instead of an iterator.
+
+ * runtime/CollectorHeapIterator.h: Removed.
+
+ * runtime/Heap.cpp:
+ (JSC::TypeCounter::TypeCounter):
+ (JSC::TypeCounter::typeName):
+ (JSC::TypeCounter::operator()):
+ (JSC::TypeCounter::take):
+ (JSC::Heap::protectedObjectTypeCounts):
+ (JSC::Heap::objectTypeCounts): Added forEach and removed iterator.
+
+ * runtime/Heap.h:
+ (JSC::Heap::forEach):
+ * runtime/JSGlobalData.cpp:
+ (JSC::Recompiler::operator()):
+ (JSC::JSGlobalData::recompileAllJSFunctions):
+
+ * runtime/MarkedBlock.h:
+ (JSC::MarkedBlock::forEach): Added forEach. Removed friend declaration
+ for CollectorHeapIterator. Now, we can make all our data private and
+ change it without breaking any other classes.
+
+ * runtime/MarkedSpace.cpp:
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::forEach): Added forEach and removed iterator.
+
+2011-02-11 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ CryptographicRandomNumber has its threading ifdefs backwards
+ https://bugs.webkit.org/show_bug.cgi?id=54280
+
+ Turns out we want the mutex when thread is enabled. :)
+
+ * wtf/CryptographicallyRandomNumber.cpp:
+ (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
+ (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
+
+2011-02-10 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ WebKit should have a cryptographic RNG
+ https://bugs.webkit.org/show_bug.cgi?id=22049
+
+ Teach JavaScriptCore how to export this function.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2011-02-10 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A little more encapsulation for MarkedBlock: Made all constants private
+ so clients don't know whether allocations are fixed-sized or not
+ https://bugs.webkit.org/show_bug.cgi?id=54270
+
+ SunSpider reports no change.
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::CollectorHeapIterator::advance): Updated for removal of HeapConstants.
+
+ * runtime/Error.cpp: Switched to using ASSERT_CLASS_FITS_IN_CELL, like
+ all other classes.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::allocate): Updated for removal of HeapConstants.
+ (JSC::Heap::reset): Updated to use size(), instead of calculating size
+ on our own.
+
+ * runtime/Heap.h: Moved the ASSERT here to MarkedBlock, since it enforces
+ on special knowledge of fixed-sizery, which only MarkedBlock is supposed
+ to know about.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkedBlock::allocate): Updated for removal of HeapConstants.
+ Also changed to reset nextCell to 0 at the end of a block, since that
+ seems more consistent.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::storeVPtrs): Changed to use a fixed array of char.
+ This hard-coded size is a little wonky, but the compiler will tell us
+ if it's ever wrong, so I think it's OK.
+
+ * runtime/MarkedBlock.cpp:
+ (JSC::MarkedBlock::destroy):
+ (JSC::MarkedBlock::MarkedBlock):
+ (JSC::MarkedBlock::sweep): Updated for removal of HeapConstants.
+
+ * runtime/MarkedBlock.h:
+ (JSC::MarkedBlock::isEmpty):
+ (JSC::MarkedBlock::clearMarks):
+ (JSC::MarkedBlock::size):
+ (JSC::MarkedBlock::capacity): Made constants private to this class.
+ Removed HeapConstants. Added size() and capacity() functions.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::objectCount):
+ (JSC::MarkedSpace::size):
+ (JSC::MarkedSpace::capacity):
+ * runtime/MarkedSpace.h: Use MarkedBlock helper functions instead of
+ direct knowledge of MarkedBlock internals.
+
+2011-02-10 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A little more encapsulation for MarkedBlock: Made mark bits private
+ https://bugs.webkit.org/show_bug.cgi?id=54264
+
+ SunSpider reports no change.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::markRoots):
+ (JSC::Heap::reset): Renamed clearMarkBits => clearMarks, since clients
+ don't need to know that marks are represented as bits. Renamed
+ markedCells => markCount, since clients don't need to know that blocks
+ are split into cells.
+
+ * runtime/MarkedBlock.h:
+ (JSC::MarkedBlock::isEmpty):
+ (JSC::MarkedBlock::clearMarks):
+ (JSC::MarkedBlock::markCount): New helper functions for encapsulating
+ the information clients actually need.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::destroy):
+ (JSC::MarkedSpace::shrink):
+ (JSC::MarkedSpace::clearMarks):
+ (JSC::MarkedSpace::markCount):
+ (JSC::MarkedSpace::objectCount):
+ * runtime/MarkedSpace.h: Use new helper functions instead of accessing
+ MarkedBlock data directly.
+
+2011-02-10 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Cached JavaScript Parser Data Being Left in Memory Cache
+ https://bugs.webkit.org/show_bug.cgi?id=54245
+
+ Added clear method which removes SourceProviderCache items.
+ Cleaned up extraneous whitespace.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * parser/SourceProviderCache.cpp:
+ (JSC::SourceProviderCache::~SourceProviderCache):
+ (JSC::SourceProviderCache::clear):
+ (JSC::SourceProviderCache::byteSize):
+ (JSC::SourceProviderCache::add):
+ * parser/SourceProviderCache.h:
+
+2011-02-10 Joseph Pecoraro <joepeck@webkit.org>
+
+ Follow-up fix to r78291. I should pass (int) 0, not '0' to memset.
+
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallback::commonConstructor): fix mistaken post-review change.
+
+2011-02-10 Joseph Pecoraro <joepeck@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Make DefaultGCActivityCallback for PLATFORM(CF) Easier to Subclass
+ https://bugs.webkit.org/show_bug.cgi?id=54257
+
+ A subclass may want to specify the CFRunLoop that the Garbage Collection
+ will happen on. It was difficult to manipulate this in a subclass because
+ the current DefaultGCActivityCallback class does this in its constructor.
+ This patch generalizes things a bit more so that a specific run loop can
+ be passed in to the constructor. This makes it so all run loop management
+ can stay in DefaultGCActivityCallback and a subclass can specify any runloop.
+
+ * runtime/GCActivityCallback.h: expose a PLATFORM(CF) constructor that can
+ specify the runloop GC can be scheduled on.
+ * runtime/GCActivityCallbackCF.cpp:
+ (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback): two constructors,
+ one that specifies the run loop and passes that on to commonConstructor and
+ the old constructor defaults to the current run loop.
+ (JSC::DefaultGCActivityCallback::commonConstructor): do normal construction,
+ adding the timer to the given runloop.
+
+2011-02-10 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A little more encapsulation for MarkedBlock: Moved allocate() and sweep() into MarkedBlock
+ https://bugs.webkit.org/show_bug.cgi?id=54253
+
+ SunSpider reports no change.
+
+ * runtime/CollectorHeapIterator.h: Removed DeadObjectIterator, since it
+ is now unused.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::reset): Moved the call to shrink() here, since it seems a
+ little more clear for MarkedSpace's client to tell it explicitly when to
+ shrink.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkedBlock::allocate): Split out from MarkedSpace::allocate.
+
+ * runtime/MarkedBlock.cpp:
+ (JSC::MarkedBlock::sweep): Split out from MarkedSpace::sweep, and
+ converted to more directly iterate a MarkedBlock based on knowing its
+ internal structure.
+
+ * runtime/MarkedBlock.h:
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::sweep):
+ * runtime/MarkedSpace.h: Split out the code mentioned above.
+
+2011-02-10 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Fix compilation error on OpenBSD
+ https://bugs.webkit.org/show_bug.cgi?id=53766
+
+ Add a HAVE_STRNSTR in Platform.h and define it only on Darwin and FreeBSD.
+
+ * wtf/Platform.h:
+ * wtf/StringExtras.h: Use HAVE(STRNSTR) now.
+
+2011-02-10 Adam Roben <aroben@apple.com>
+
+ Print locations of assertions and logs in a way that Visual Studio understands
+
+ With this change, double-clicking one of these locations in Visual Studio's Output Window
+ will focus that line of code in the editor.
+
+ Fixes <http://webkit.org/b/54208> Double-clicking locations of assertions/logs in Visual
+ Studio's Output Window does nothing
+
+ Reviewed by Alexey Proskuryakov.
+
+ * wtf/Assertions.cpp:
+ (printCallSite): Use OS(WINDOWS) instead of the meaningless OS(WIN). When we aren't using
+ the debug CRT (and thus can't call _CrtDbgReport), print the file and line number using the
+ same format that cl.exe uses when it prints compiler errors.
+
+2011-02-10 Dan Bernstein <mitz@apple.com>
+
+ LLVM Compiler build fix.
+
+ * runtime/MarkedBlock.cpp:
+ (JSC::MarkedBlock::create):
+
+2011-02-10 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Remove PCRE source from trunk
+ https://bugs.webkit.org/show_bug.cgi?id=54188
+
+ * Android.mk:
+ * Android.v8.wtf.mk:
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * DerivedSources.pro:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.order:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * pcre/AUTHORS: Removed.
+ * pcre/COPYING: Removed.
+ * pcre/dftables: Removed.
+ * pcre/pcre.h: Removed.
+ * pcre/pcre.pri: Removed.
+ * pcre/pcre_compile.cpp: Removed.
+ * pcre/pcre_exec.cpp: Removed.
+ * pcre/pcre_internal.h: Removed.
+ * pcre/pcre_tables.cpp: Removed.
+ * pcre/pcre_ucp_searchfuncs.cpp: Removed.
+ * pcre/pcre_xclass.cpp: Removed.
+ * pcre/ucpinternal.h: Removed.
+ * pcre/ucptable.cpp: Removed.
+ * wscript:
+
+2011-02-10 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add randomValuesFromOS for OS(WINDOWS)
+ https://bugs.webkit.org/show_bug.cgi?id=54155
+
+ Use CryptGenRandom for generating cryptographically secure random numbers.
+ This will work on WinCE and MinGW too.
+
+ * config.h:
+ * wtf/OSRandomSource.cpp:
+ (WTF::randomValuesFromOS):
+
+2011-02-10 Jarred Nicholls <jarred@sencha.com>
+
+ Reviewed by Adam Barth.
+
+ REGRESSION(r78149): Return value of read() shouldn't be ignored.
+ https://bugs.webkit.org/show_bug.cgi?id=54167
+
+ stdio read should have its return value handled. Build error in gcc 4.4.5.
+
+ * wtf/OSRandomSource.cpp:
+ (WTF::randomValuesFromOS):
+
+2011-02-10 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Rename randomValuesFromOS to cryptographicallyRandomValuesFromOS
+ https://bugs.webkit.org/show_bug.cgi?id=54156
+
+ randomValuesFromOS generates random numbers of cryptographic quality.
+ Make this clear by adding "cryptographically" to the function name.
+
+ * wtf/CryptographicallyRandomNumber.cpp:
+ (WTF::ARC4Stream::ARC4RandomNumberGenerator::stir):
+ * wtf/OSRandomSource.cpp:
+ (WTF::cryptographicallyRandomValuesFromOS):
+ * wtf/OSRandomSource.h:
+
+2011-02-09 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/8805364> Malloc zone enumeration code should be safe in the face of errors from the memory reader.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::PageHeapAllocator::recordAdministrativeRegions): Use the new helper function to walk the linked list safely.
+ (WTF::TCMalloc_ThreadCache_FreeList::enumerateFreeObjects): Ditto.
+ (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Ditto.
+ (WTF::TCMallocStats::PageMapFreeObjectFinder::visit): Bail out if the span could not be read.
+ (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): Ditto.
+ * wtf/MallocZoneSupport.h:
+ (WTF::RemoteMemoryReader::operator()): Remove an assert that is not valid.
+ (WTF::RemoteMemoryReader::nextEntryInLinkedList): Add a helper function for retrieving the next entry in
+ a linked list. It maps a failed read of the remote memory in to a null pointer, which all callers can
+ handle gracefully.
+
+2011-02-09 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 54164 - Optimize global_var accesses on JSVALUE64
+
+ Directly embed the pointer to d->registers, optimize out the load
+ from the variable object, as we do already in JSVALUE32_64.
+
+ This is a ~1.5% win on sunspidey.
+
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+
+2011-02-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A little more encapsulation for MarkedBlock: Made MarkedBlock responsible
+ for its own initialization and destruction
+ https://bugs.webkit.org/show_bug.cgi?id=54137
+
+ * runtime/CollectorHeapIterator.h: Removed ObjectIterator since it is
+ now unused.
+
+ * runtime/JSCell.h: Maded MarkedBlock a friend so it can construct and
+ destruct JSCells.
+
+ * runtime/MarkedBlock.cpp:
+ (JSC::MarkedBlock::create):
+ (JSC::MarkedBlock::destroy):
+ (JSC::MarkedBlock::MarkedBlock): Migrated initialization and destruction
+ code from MarkedSpace, updating it not to use ObjectIterator. We don't
+ want to use an abstract iterator since iteration will be unique to each
+ block in the future.
+
+ * runtime/MarkedBlock.h: Made the consructor private and moved it into
+ the .cpp file because it's big now.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocateBlock):
+ (JSC::MarkedSpace::freeBlock): Migrated code.
+
+ * runtime/MarkedSpace.h:
+ (JSC::CollectorHeap::collectorBlock): Keep a vector of MarkedBlock
+ pointers instead of aligned allocations -- how MarkedBlocks are allocated
+ is now an implementation detail of MarkedBlock.
+
+2011-02-09 Adam Barth <abarth@webkit.org>
+
+ Another attempt to fix the Qt Windows build.
+
+ * config.h:
+ * wtf/OSRandomSource.cpp:
+ (WTF::randomValuesFromOS):
+
+2011-02-09 Adam Barth <abarth@webkit.org>
+
+ Attempt to fix the Qt Windows build.
+
+ * wtf/OSRandomSource.cpp:
+ (WTF::randomValuesFromOS):
+
+2011-02-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add WTF::cryptographicallyRandomNumber
+ https://bugs.webkit.org/show_bug.cgi?id=54083
+
+ Introduce a cryptographically strong random number generator to WTF.
+ The random number generator is based on arc4random as found in:
+
+ http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/arc4random.c?rev=1.22
+
+ I've changed to source to WebKit style and abstracted the operating
+ system interaction to OSRandomSource. We'll use this functionality to
+ expose a cryptographically strong random number generator to
+ JavaScript.
+
+ * Android.mk:
+ * Android.v8.wtf.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * config.h:
+ * wtf/CMakeLists.txt:
+ * wtf/CryptographicallyRandomNumber.cpp: Added.
+ (WTF::initMutexIfNeeded):
+ (WTF::init):
+ (WTF::addRandomData):
+ (WTF::stir):
+ (WTF::stirIfNeeded):
+ (WTF::getByte):
+ (WTF::getWord):
+ (WTF::cryptographicallyRandomNumber):
+ (WTF::cryptographicallyRandomValues):
+ * wtf/CryptographicallyRandomNumber.h: Added.
+ * wtf/OSRandomSource.cpp: Added.
+ (WTF::randomValuesFromOS):
+ * wtf/OSRandomSource.h: Added.
+ * wtf/wtf.pri:
+
+2011-02-09 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the build.
+
+ * wtf/Bitmap.h: Include string.h for memset. Not sure why this started
+ failing now.
+
+2011-02-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A tiny bit of encapsulation for MarkedBlock: made its heap data member private
+ https://bugs.webkit.org/show_bug.cgi?id=54129
+
+ * runtime/MarkedBlock.h:
+ (JSC::MarkedBlock::isCellAligned):
+ (JSC::MarkedBlock::MarkedBlock):
+ (JSC::MarkedBlock::heap): Made the heap data member private, and provided
+ a constructor and an accessor.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocateBlock):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::heap): Use the constructor and accessor.
+
+2011-02-09 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Replace PCRE with Yarr in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53496
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * create_regex_tables:
+ * runtime/RegExp.cpp:
+ * wtf/Platform.h:
+ * yarr/Yarr.h:
+ * yarr/YarrJIT.cpp:
+ * yarr/YarrJIT.h:
+ * yarr/YarrParser.h:
+ * yarr/YarrPattern.h:
+ * yarr/YarrSyntaxChecker.h:
+ * yarr/yarr.pri: Added.
+
+2011-02-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed some dead code from Heap
+ https://bugs.webkit.org/show_bug.cgi?id=54064
+
+ * runtime/MarkedSpace.cpp: Removed some now-unused constants and
+ declarations.
+
+ (JSC::MarkedSpace::allocate): Removed some ASSERTs that are also ASSERTed
+ by our caller. Removed redundant typedefs.
+
+2011-02-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Use a vector to track blocks in the Heap, instead of hand-rolled vector-like code
+ https://bugs.webkit.org/show_bug.cgi?id=54062
+
+ SunSpider reports no change.
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::CollectorHeapIterator::isValid):
+ (JSC::CollectorHeapIterator::isLive): Updated for new mark invariant: To
+ know if an object is live, you just need to test its mark bit.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::MarkedSpace): Moved waterMark and highWaterMark from
+ CollectorHeap into MarkedSpace, since they're global state. Removed call
+ to memset since CollectorHeap is a true class with its own constructor now.
+
+ (JSC::MarkedSpace::destroy): Change uses of m_heap.usedBlocks to
+ m_heap.blocks.size(), and m_heap.numBlocks to m_heap.blocks.capacity().
+
+ (JSC::MarkedSpace::allocateBlock):
+ (JSC::MarkedSpace::freeBlock): No need to manage our vector manually anymore.
+
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::shrink):
+ (JSC::MarkedSpace::clearMarkBits):
+ (JSC::MarkedSpace::markedCells):
+ (JSC::MarkedSpace::sweep):
+ (JSC::MarkedSpace::objectCount):
+ (JSC::MarkedSpace::capacity):
+ (JSC::MarkedSpace::reset):
+ (JSC::MarkedSpace::primaryHeapEnd):
+ * runtime/MarkedSpace.h:
+ (JSC::CollectorHeap::CollectorHeap):
+ (JSC::MarkedSpace::highWaterMark):
+ (JSC::MarkedSpace::setHighWaterMark):
+ (JSC::MarkedSpace::contains): Same as above.
+
+2011-02-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Give each MarkedBlock enough mark bits to cover the whole block
+ https://bugs.webkit.org/show_bug.cgi?id=54029
+
+ SunSpider reports no change.
+
+ This simplifies access to mark bits, since any cell-aligned pointer
+ into a block now has a valid mark bit to test.
+
+ * runtime/MarkedBlock.h: Changed CELLS_PER_BLOCK to account for the extra
+ mark bits. This happens not to change its actual value.
+ (JSC::MarkedBlock::cellNumber):
+ (JSC::MarkedBlock::isMarked):
+ (JSC::MarkedBlock::testAndSetMarked):
+ (JSC::MarkedBlock::setMarked): Changed const JSCell* to const void* to
+ remove a cast from our caller, and to more accurately reflect the fact
+ that MarkedBlock is agnostic about the types pointed to by the pointers
+ you pass to it.
+
+ (JSC::MarkedBlock::isPossibleCell): Removed a null check. We now consider
+ the null pointer to be a possible cell with a 0 (impossible) block. This
+ removes a null check from marking.
+
+ * runtime/MarkedSpace.cpp:
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::contains): Simplified the contains check, and inlined
+ the whole thing, now that it's so simple.
+
+2011-02-08 Daniel Bates <dbates@rim.com>
+
+ Rubber-stamped by Martin Robinson.
+
+ Rename enum ProtectionSeting [sic] to ProtectionSetting.
+
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::reprotectRegion):
+ * jit/ExecutableAllocator.h:
+
+2011-02-08 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Should not always define USE_SYSTEM_MALLOC
+ https://bugs.webkit.org/show_bug.cgi?id=54007
+
+ * wtf/Platform.h:
+
+2011-02-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ LLVM Compiler build fix.
+
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrier::WriteBarrier):
+
+2011-02-07 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ JSVariableObject::setRegisters should take PassOwnArrayPtr for registersArray.
+ https://bugs.webkit.org/show_bug.cgi?id=53902
+
+ * runtime/Arguments.h:
+ (JSC::JSActivation::copyRegisters): Uses OwnArrayPtr<Register> instead of Register*.
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::copyGlobalsFrom): Ditto.
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::setRegisters): Takes PassOwnArrayPtr<Register> instead of Register*
+ for registerArray.
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::copyRegisterArray): Returns PassOwnArrayPtr<Register> instead of Register*.
+ (JSC::JSVariableObject::setRegisters): Takes PassOwnArrayPtr<Register> instead of Register*
+ for registerArray.
+
+2011-02-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed some dead code from Heap
+ https://bugs.webkit.org/show_bug.cgi?id=53969
+
+ SunSpider reports no change.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::shrink):
+ (JSC::MarkedSpace::sweep):
+ * runtime/MarkedSpace.h: Removed resizeBlocks and growBlocks, and
+ renamed shrinkBlocks to shrink, making it unconditionally shrink as
+ much as possible.
+
+2011-02-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Simplified the marked space's mark invariant
+ https://bugs.webkit.org/show_bug.cgi?id=53968
+
+ SunSpider reports no change.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate): Mark objects when allocating them. This
+ means that, at all times other than the mark phase, an object is live
+ if and only if it is marked.
+
+ (JSC::MarkedSpace::containsSlowCase): Use the new mark invariant to
+ simplify testing whether an object is live.
+
+2011-02-07 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=53950
+ USE_WK_SCROLLBAR_PAINTER in ScrollbarThemeMac should be in
+ Platform.h instead
+
+ * wtf/Platform.h:
+
+2011-02-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Add built-in decoder for UTF-8 for improved performance
+ https://bugs.webkit.org/show_bug.cgi?id=53898
+
+ * wtf/unicode/UnicodeMacrosFromICU.h: Added U8_MAX_LENGTH and
+ U8_APPEND_UNSAFE. Also fixed header.
+
+2011-02-07 Adam Roben <aroben@apple.com>
+
+ Delete precompiled headers whenever any .vsprops file changes
+
+ Precompiled headers need to be rebuilt if, e.g., an ENABLE_* macro is changed in one of our
+ .vsprops files. Unfortunately, Visual Studio isn't smart enough to figure this out, so we
+ give it some assistance by deleting the precompiled headers whenever any .vsprops file
+ changes.
+
+ I also made some drive-by fixes while I was in the area.
+
+ Fixes <http://webkit.org/b/53826> react-to-vsprops-changes.py doesn't force precompiled
+ headers to be rebuilt, but should
+
+ Reviewed by David Kilzer.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Stop ignoring the
+ return code from react-to-vsprops-changes.py so we will notice when errors are introduced.
+ But skip the script entirely in production builds, where it is both unnecessary and can't
+ function correctly (due to not having the entire source tree available to it).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
+ (main): Removed an extra '*' in the glob for finding manifest files. The extra '*' was
+ leftover from before we rearranged WebKitBuild in r75138. Moved code to delete an old file
+ to the new delete_if_older_than function. Added code to delete any precompiled headers older
+ than the newest .vsprops file.
+ (delete_if_older_than): Added. Code came from main.
+
+2011-02-07 Antti Koivisto <antti@apple.com>
+
+ Not reviewed.
+
+ ASSERTS_DISABLED -> ASSERT_DISABLED
+
+ * wtf/BloomFilter.h:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed; speculative Qt build fix.
+
+ * JavaScriptCore.pro:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ Removed LOOSE_OWN_ARRAY_PTR and OwnArrayPtr<T>::set. Replaced all calls to OwnArrayPtr::set
+ and loose instantiation of OwnArrayPtr by calls to operator= and adoptArrayPtr. Also removed
+ OwnArrayPtrCommon.h since PassOwnArrayPtr.h needs to include OwnArrayPtr.h and there is
+ no point in putting deleteOwnedArrayPtr into a separate header.
+
+ Note: if this patch breaks build, the code is either instiantiating OwnArrayPtr
+ without calling adoptArrayPtr or calling set on ArrayOwnPtr instead of operator=.
+
+ No tests are added since this is a refactoring.
+
+ * API/JSStringRefCF.cpp:
+ (JSStringCreateWithCFString): Calls adoptArrayPtr.
+ * GNUmakefile.am: Removed OwnArrayPtrCommon.h
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::deleteProperty): Calls adoptArrayPtr.
+ * runtime/Arguments.h:
+ (JSC::Arguments::copyRegisters): Ditto.
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator): Ditto.
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::setRegisters): Calls operator= instead of set.
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::StructureChain): Ditto.
+ * wtf/CMakeLists.txt:
+ * wtf/DateMath.h:
+ (JSC::GregorianDateTime::GregorianDateTime): No longer instnatiates OwnArrayPtr
+ with a null pointer.
+ * wtf/OwnArrayPtr.h:
+ * wtf/OwnArrayPtrCommon.h: Removed.
+ * wtf/PassOwnArrayPtr.h: No longer includes OwnArrayCommon.h
+ (WTF::deleteOwnedArrayPtr): Moved from OwnArrayPtrCommon.h
+
+2011-02-06 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Use bloom filter for descendant selector filtering
+ https://bugs.webkit.org/show_bug.cgi?id=53880
+
+ Implement a bloom filter with k=2 and 8 bit counting.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/BloomFilter.h: Added.
+ (WTF::BloomFilter::maximumCount):
+ (WTF::BloomFilter::BloomFilter):
+ (WTF::BloomFilter::mayContain):
+ (WTF::BloomFilter::add):
+ (WTF::BloomFilter::remove):
+ (WTF::BloomFilter::firstSlot):
+ (WTF::BloomFilter::secondSlot):
+ (WTF::::add):
+ (WTF::::remove):
+ (WTF::::clear):
+ (WTF::::likelyEmpty):
+ (WTF::::isClear):
+
+2011-02-04 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Rolled back in r77612 with ASSERT/crash fixed.
+ https://bugs.webkit.org/show_bug.cgi?id=53759
+
+ Don't shrink the heap to 0 unconditionally. Instead, shrink to 1 if
+ necessary. For now, the heap assumes that it always has at least one
+ block live.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::reset):
+ * runtime/Heap.h:
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::shrinkBlocks):
+ (JSC::MarkedSpace::sweep):
+ (JSC::MarkedSpace::reset):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::highWaterMark):
+ (JSC::MarkedSpace::setHighWaterMark):
+
+2011-02-04 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX: REALLY remove the last vestiges of JSVALUE32!
+
+ <rdar://problem/8957409> Remove last vestiges of JSVALUE32
+ <http://webkit.org/b/53779>
+
+ * DerivedSources.make: Removed dependency on
+ JavaScriptCore.JSVALUE32.exp.
+
+2011-02-04 David Kilzer <ddkilzer@apple.com>
+
+ <rdar://problem/8957409> Remove last vestiges of JSVALUE32
+ <http://webkit.org/b/53779>
+
+ Reviewed by Darin Adler.
+
+ Support for JSVALUE32 was originaly removed in r70111.
+
+ * Configurations/JavaScriptCore.xcconfig: Changed armv6 to use
+ JavaScriptCore.JSVALUE32_64.exp and ppc64 to use
+ JavaScriptCore.JSVALUE64.exp to match Platform.h.
+ * DerivedSources.make: Removed rule for
+ JavaScriptCore.JSVALUE32.exp.
+ * JavaScriptCore.JSVALUE32only.exp: Removed.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Removed references
+ to JavaScriptCore.JSVALUE32only.exp.
+
+2011-02-04 David Kilzer <ddkilzer@apple.com>
+
+ Use static_cast and other style cleanup in YarrInterpreter.cpp
+ <http://webkit.org/b/53772>
+
+ Reviewed by John Sullivan.
+
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::Interpreter::InputStream::readChecked): Use
+ static_cast.
+ (JSC::Yarr::Interpreter::InputStream::checkInput): Remove
+ unnecessary else block.
+ (JSC::Yarr::Interpreter::matchAssertionEOL): Ditto.
+ (JSC::Yarr::Interpreter::backtrackBackReference): Ditto.
+ (JSC::Yarr::ByteCompiler::emitDisjunction): Use static_cast.
+
+2011-02-04 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77625 and r77626.
+ http://trac.webkit.org/changeset/77625
+ http://trac.webkit.org/changeset/77626
+ https://bugs.webkit.org/show_bug.cgi?id=53765
+
+ It broke Windows builds (Requested by Ossy_ on #webkit).
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * create_regex_tables:
+ * runtime/RegExp.cpp:
+ * wtf/Platform.h:
+ * yarr/Yarr.h:
+ * yarr/YarrJIT.cpp:
+ * yarr/YarrJIT.h:
+ * yarr/YarrParser.h:
+ * yarr/YarrPattern.h:
+ * yarr/YarrSyntaxChecker.h:
+ * yarr/yarr.pri: Removed.
+
+2011-02-04 Jessie Berlin <jberlin@apple.com>
+
+ Windows build fix. Unreviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2011-02-04 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Replace PCRE with Yarr in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53496
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * create_regex_tables:
+ * runtime/RegExp.cpp:
+ * wtf/Platform.h:
+ * yarr/Yarr.h:
+ * yarr/YarrJIT.cpp:
+ * yarr/YarrJIT.h:
+ * yarr/YarrParser.h:
+ * yarr/YarrPattern.h:
+ * yarr/YarrSyntaxChecker.h:
+ * yarr/yarr.pri: Added.
+
+2011-02-04 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed rollout two patches r77614 and r77612.
+
+ REGRESSION: Snow Leopard Intel Release anumber of failing tests.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::reset):
+ * runtime/Heap.h:
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::sweep):
+ (JSC::MarkedSpace::reset):
+ * runtime/MarkedSpace.h:
+
+2011-02-04 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix 32bit build.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::reset): Use an explicit cast to avoid shortening warnings,
+ since 1.5 is double (64bit), and the result is size_t (32bit).
+
+2011-02-03 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ Changed MarkedSpace to delegate grow/shrink decisions to Heap
+ https://bugs.webkit.org/show_bug.cgi?id=53759
+
+ SunSpider reports no change.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::reset):
+ * runtime/Heap.h: Reorganized a few data members for better cache locality.
+ Added a grow policy.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate):
+ (JSC::MarkedSpace::sweep):
+ (JSC::MarkedSpace::reset): Don't shrink automatically. Instead, wait for
+ the heap to make an explicit sweep call.
+
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::highWaterMark):
+ (JSC::MarkedSpace::setHighWaterMark): Use a watermark to determine how
+ many bytes to allocate before failing and giving the heap an opportunity
+ to collect garbage. This also means that we allocate blocks on demand,
+ instead of ahead of time.
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-03 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Not all blocks are freed when the heap is freed (counting is hard!)
+ https://bugs.webkit.org/show_bug.cgi?id=53732
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::destroy): Freeing a block compacts the list, so just
+ keep freeing block 0 until there are no blocks left.
+
+2011-02-03 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Mac build.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: The new MarkedBlock.h header
+ needs to be private, not project, so other projects can include headers
+ that depend on it.
+
+2011-02-03 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Start using MarkedBlock instead of CollectorBlock
+ https://bugs.webkit.org/show_bug.cgi?id=53693
+
+ SunSpider reports no change.
+
+ * runtime/MarkedBlock.h:
+ (JSC::MarkedBlock::blockFor):
+ (JSC::MarkedBlock::setMarked):
+ (JSC::MarkedBlock::isCellAligned):
+ (JSC::MarkedBlock::isPossibleCell): Updated for const-ness.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocateBlock):
+ (JSC::MarkedSpace::containsSlowCase):
+ (JSC::MarkedSpace::clearMarkBits): Updated for const-ness.
+
+ * runtime/MarkedSpace.h:
+ (JSC::CollectorHeap::collectorBlock):
+ (JSC::MarkedSpace::heap):
+ (JSC::MarkedSpace::isMarked):
+ (JSC::MarkedSpace::testAndSetMarked):
+ (JSC::MarkedSpace::setMarked):
+ (JSC::MarkedSpace::contains): Switched from CollectorBlock to MarkedBlock,
+ and deleted dead CollectorBlock-related code.
+
+2011-02-03 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Avoid strlen() in AtomicString::fromUTF8
+ https://bugs.webkit.org/show_bug.cgi?id=50516
+
+ Add an overload to calculateStringHashFromUTF8 to get
+ strlen() of the input data with only one call.
+
+ This change shows about 3% performance win on the xml-parser benchmark.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/text/AtomicString.cpp:
+ (WTF::AtomicString::fromUTF8):
+ * wtf/unicode/UTF8.cpp:
+ (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):
+ (WTF::Unicode::calculateStringHashFromUTF8):
+ (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
+ * wtf/unicode/UTF8.h:
+
+2011-02-02 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2011-02-02 Gavin Barraclough <barraclough@apple.com>
+
+ oops, build fix!
+
+ * wtf/Assertions.cpp:
+
+2011-02-02 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 53650 - Add a BACKTRACE macro to Assertions.h
+
+ Add a BACKTRACE macro to Assertions.h, which will print a backtrace on
+ debug Mac builds, make CRASH (and thus ASSERT) automatically call this.
+
+ * JavaScriptCore.exp:
+ * wtf/Assertions.cpp:
+ * wtf/Assertions.h:
+
+2011-02-02 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Improper backtrack of nested non-capturing greedy paren to prior paren
+ https://bugs.webkit.org/show_bug.cgi?id=53261
+
+ A paren that follows a non-capturing greedy paren nested within a
+ non-capturing fixed paren was back tracking to the last paren
+ processed instead of the immediately prior paren.
+ Refactored default backtracking of parens to prior paren to work for
+ both nested (within) and immediately prior (after) parens.
+
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail):
+ (JSC::Yarr::YarrGenerator::TermGenerationState::TermGenerationState):
+ (JSC::Yarr::YarrGenerator::TermGenerationState::setJumpListToPriorParen):
+ (JSC::Yarr::YarrGenerator::TermGenerationState::getJumpListToPriorParen):
+ (JSC::Yarr::YarrGenerator::ParenthesesTail::ParenthesesTail):
+ (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode):
+ (JSC::Yarr::YarrGenerator::generateParenthesesDisjunction):
+ (JSC::Yarr::YarrGenerator::generateParenthesesSingle):
+ (JSC::Yarr::YarrGenerator::generateDisjunction):
+
+2011-02-02 Jeff Miller <jeffm@apple.com>
+
+ Reviewed by Darin Adler and Steve Falkenburg.
+
+ Add DerivedSources.make to some Visual Studio projects
+ https://bugs.webkit.org/show_bug.cgi?id=53607
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Add DerivedSources.make.
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fixes for wxWebKit.
+
+ * wtf/wx/StringWx.cpp:
+ (WTF::String::String):
+
+2011-02-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A little more Heap refactoring
+ https://bugs.webkit.org/show_bug.cgi?id=53577
+
+ SunSpider reports no change.
+
+ Split out MarkedBlock into its own file / class.
+
+ Did the following renames:
+ isCellMarked => isMarked
+ checkMarkCell => testAndSetMarked
+ markCell => setMarked
+ cellOffset => cellNumber
+ collectorBlock => blockFor
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Heap.cpp:
+ (JSC::WeakGCHandlePool::update):
+ * runtime/Heap.h:
+ (JSC::Heap::isMarked):
+ (JSC::Heap::testAndSetMarked):
+ (JSC::Heap::setMarked):
+ * runtime/JSArray.h:
+ (JSC::MarkStack::markChildren):
+ (JSC::MarkStack::drain):
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkStack::internalAppend):
+ * runtime/MarkedBlock.cpp: Added.
+ * runtime/MarkedBlock.h: Added.
+ (JSC::MarkedBlock::blockFor):
+ (JSC::MarkedBlock::cellNumber):
+ (JSC::MarkedBlock::isMarked):
+ (JSC::MarkedBlock::testAndSetMarked):
+ (JSC::MarkedBlock::setMarked):
+ (JSC::MarkedBlock::isCellAligned):
+ (JSC::MarkedBlock::isPossibleCell):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::isMarked):
+ (JSC::MarkedSpace::testAndSetMarked):
+ (JSC::MarkedSpace::setMarked):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::isValid):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Fix windows clean build.
+
+ * DerivedSources.make:
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Fix dist compilation
+ https://bugs.webkit.org/show_bug.cgi?id=53579
+
+ * GNUmakefile.am: Added WriteBarrier.h to the sources, it was
+ added in r77151
+
+2011-02-01 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77297.
+ http://trac.webkit.org/changeset/77297
+ https://bugs.webkit.org/show_bug.cgi?id=53538
+
+ caused leopard crashes (Requested by paroga on #webkit).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/text/AtomicString.cpp:
+ (WTF::AtomicString::fromUTF8):
+ * wtf/unicode/UTF8.cpp:
+ (WTF::Unicode::calculateStringHashFromUTF8):
+ * wtf/unicode/UTF8.h:
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Fix Mac production builds.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Try to fix the windows build.
+
+ * DerivedSources.make:
+
+2011-02-01 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Avoid strlen() in AtomicString::fromUTF8
+ https://bugs.webkit.org/show_bug.cgi?id=50516
+
+ Add an overload to calculateStringHashFromUTF8 to get
+ strlen() of the input data with only one call.
+
+ This change shows about 3% performance win on the xml-parser benchmark.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/text/AtomicString.cpp:
+ (WTF::AtomicString::fromUTF8):
+ * wtf/unicode/UTF8.cpp:
+ (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):
+ (WTF::Unicode::calculateStringHashFromUTF8):
+ (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
+ * wtf/unicode/UTF8.h:
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Part 2 for <rdar://problem/8492788>
+ Adopt WKScrollbarPainterController
+
+ Use header detection to define scrollbar painting controller #define.
+
+ * DerivedSources.make:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2011-02-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Refactor JSGlobalObject-related tear-down
+ https://bugs.webkit.org/show_bug.cgi?id=53478
+
+ While investigating crashes caused by r77082, I noticed some strange
+ destructor-time behaviors. This patch makes them less strange.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ (JSC::GlobalCodeBlock::~GlobalCodeBlock): Store the set of global code
+ blocks on the Heap, instead of on independent global objects. The heap
+ is guaranteed to outlast any GC-owned data structure. The heap is also
+ a natural place to store objects that needs out-of-band marking, since
+ the heap is responsible for marking all roots.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::markRoots):
+ (JSC::Heap::globalObjectCount):
+ (JSC::Heap::protectedGlobalObjectCount):
+ * runtime/Heap.h:
+ (JSC::Heap::codeBlocks):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::~JSGlobalObject):
+ (JSC::JSGlobalObject::init):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ * runtime/MarkedSpace.cpp: Store the set of global objects in a weak map
+ owned by JSGlobalData, instead of an instrusive circular linked list.
+ This is simpler, and it avoids destructor-time access between garbage
+ collected objects, which is hard to get right.
+
+ (JSC::MarkedSpace::destroy): Make sure to clear mark bits before tearing
+ everything down. Otherwise, weak data structures will incorrectly report
+ that objects pending destruction are still alive.
+
+2011-02-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESSION(77082): GC-related crashes seen: on WebKit2 bot; on GTK 32bit
+ bot; loading trac pages; typing in search field
+ https://bugs.webkit.org/show_bug.cgi?id=53519
+
+ The crashes were all caused by failure to run an object's destructor.
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::ObjectIterator::ObjectIterator): Don't skip forward upon
+ construction. The iterator class used to do that when it was designed
+ for prior-to-beginning initialization. I forgot to remove this line
+ of code when I changed the iterator to normal initialization.
+
+ Skipping forward upon construction was causing the heap to skip running
+ the destructor for the very first object in a block when destroying the
+ block. This usually did not crash, since block destruction is rare and
+ most objects have pretty trivial destructors. However, in the rare case
+ when the heap would destroy a block whose first object was a global
+ object or a DOM node, BOOM.
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Update JSObject storage for new marking API
+ https://bugs.webkit.org/show_bug.cgi?id=53467
+
+ JSObject no longer uses EncodedJSValue for its property storage.
+ This produces a stream of mechanical changes to PropertySlot and
+ anonymous storage APIs.
+
+ * JavaScriptCore.exp:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::ArrayPrototype):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanObject.cpp:
+ (JSC::BooleanObject::BooleanObject):
+ * runtime/BooleanObject.h:
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::DatePrototype):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::getOwnPropertySlot):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::getOwnPropertySlot):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObject):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::fillGetterPropertySlot):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirectLocation):
+ (JSC::JSObject::offsetForLocation):
+ (JSC::JSObject::putAnonymousValue):
+ (JSC::JSObject::clearAnonymousValue):
+ (JSC::JSObject::getAnonymousValue):
+ (JSC::JSObject::putThisToAnonymousValue):
+ (JSC::JSObject::locationForOffset):
+ (JSC::JSObject::inlineGetOwnPropertySlot):
+ * runtime/JSObjectWithGlobalObject.cpp:
+ (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::JSWrapperObject):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/NumberConstructor.cpp:
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::NumberObject::NumberObject):
+ (JSC::constructNumber):
+ * runtime/NumberObject.h:
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::getValue):
+ (JSC::PropertySlot::setValue):
+ (JSC::PropertySlot::setRegisterSlot):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::setWithoutWriteBarrier):
+
+2011-02-01 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Antonio Gomes.
+
+ Modify RandomNumberSeed.h to use USE(MERSENNE_TWISTER_19937)
+ https://bugs.webkit.org/show_bug.cgi?id=53506
+
+ Currently, use of the Mersenne Twister pseudorandom number generator
+ is hardcoded to the Windows CE port. With the passing of bug #53253,
+ we can generalize support for this PRNG to all ports that use srand(3)
+ and rand(3), including Windows CE.
+
+ * wtf/RandomNumberSeed.h:
+ (WTF::initializeRandomNumberGenerator):
+
+2011-02-01 Dave Tapuska <dtapuska@rim.com>
+
+ Reviewed by Gavin Barraclough.
+
+ MacroAssemblerARM would generate code that did 32bit loads
+ on addresses that were not aligned. More specifically it would
+ generate a ldr r8,[r1, #7] which isn't valid on ARMv5 and lower.
+ The intended instruction really is ldrb r8,[r1, #7]; ensure we
+ call load8 instead of load32.
+
+ https://bugs.webkit.org/show_bug.cgi?id=46095
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::set32Test32):
+ (JSC::MacroAssemblerARM::set32Test8):
+
+2011-02-01 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Fix some Visual Studio compiler warnings.
+ https://bugs.webkit.org/show_bug.cgi?id=53476
+
+ * wtf/MathExtras.h:
+ (clampToInteger):
+ (clampToPositiveInteger):
+ * wtf/ThreadingWin.cpp:
+ (WTF::absoluteTimeToWaitTimeoutInterval):
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bogus callframe during stack unwinding
+ https://bugs.webkit.org/show_bug.cgi?id=53454
+
+ Trying to access a callframe's globalData after destroying its
+ ScopeChain is not a good thing. While we could access the
+ globalData directly through the (known valid) scopechain we're
+ holding on to, it feels fragile. Instead we push the valid
+ ScopeChain onto the callframe again to ensure that the callframe
+ itself remains valid.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+
+2011-01-31 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Reapplying this change again.
+ Changed isValid() to use .get() as a result of change r77151.
+
+ Added new isValid() methods to check if a contained object in
+ a WeakGCMap is valid when using an unchecked iterator.
+
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::isValid):
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77098, r77099, r77100, r77109, and
+ r77111 back in, along with a few more Qt fix attempts.
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ (JSObjectSetPrivateProperty):
+ * API/JSWeakObjectMapRefInternal.h:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::exception):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/ArgList.cpp:
+ (JSC::MarkedArgumentBuffer::markLists):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::put):
+ * runtime/Arguments.h:
+ (JSC::Arguments::setActivation):
+ (JSC::Arguments::Arguments):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/ConservativeSet.cpp:
+ (JSC::ConservativeSet::grow):
+ * runtime/ConservativeSet.h:
+ (JSC::ConservativeSet::~ConservativeSet):
+ (JSC::ConservativeSet::mark):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::getter):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setter):
+ (JSC::GetterSetter::setSetter):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::cachedGlobalObject):
+ * runtime/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+ (JSC::JSActivation::put):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::getIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::uncheckedSetIndex):
+ (JSC::JSArray::markChildrenDirect):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkStack::append):
+ (JSC::JSCell::MarkStack::internalAppend):
+ (JSC::JSCell::MarkStack::deprecatedAppend):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::regExpConstructor):
+ (JSC::JSGlobalObject::errorConstructor):
+ (JSC::JSGlobalObject::evalErrorConstructor):
+ (JSC::JSGlobalObject::rangeErrorConstructor):
+ (JSC::JSGlobalObject::referenceErrorConstructor):
+ (JSC::JSGlobalObject::syntaxErrorConstructor):
+ (JSC::JSGlobalObject::typeErrorConstructor):
+ (JSC::JSGlobalObject::URIErrorConstructor):
+ (JSC::JSGlobalObject::evalFunction):
+ (JSC::JSGlobalObject::objectPrototype):
+ (JSC::JSGlobalObject::functionPrototype):
+ (JSC::JSGlobalObject::arrayPrototype):
+ (JSC::JSGlobalObject::booleanPrototype):
+ (JSC::JSGlobalObject::stringPrototype):
+ (JSC::JSGlobalObject::numberPrototype):
+ (JSC::JSGlobalObject::datePrototype):
+ (JSC::JSGlobalObject::regExpPrototype):
+ (JSC::JSGlobalObject::methodCallDummy):
+ (JSC::Structure::prototypeForLookup):
+ (JSC::constructArray):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::object):
+ (JSC::Stringifier::Holder::objectSlot):
+ (JSC::Stringifier::markAggregate):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirectOffset):
+ (JSC::JSObject::putDirectOffset):
+ (JSC::JSObject::putUndefinedAtDirectOffset):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSValue::putDirect):
+ (JSC::JSObject::allocatePropertyStorageInline):
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSPropertyNameIterator.h:
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSString.cpp:
+ (JSC::StringObject::create):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::internalValue):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::lookupPut):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStack):
+ (JSC::MarkStack::deprecatedAppendValues):
+ (JSC::MarkStack::appendValues):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::constructNumber):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ (JSC::resolveBase):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PutPropertySlot.h:
+ (JSC::PutPropertySlot::setExistingProperty):
+ (JSC::PutPropertySlot::setNewProperty):
+ (JSC::PutPropertySlot::base):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainIterator::operator*):
+ (JSC::ScopeChainIterator::operator->):
+ (JSC::ScopeChain::top):
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren):
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::emptyString):
+ (JSC::SmallStrings::singleCharacterString):
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::storedPrototype):
+ (JSC::Structure::storedPrototypeSlot):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::uncheckedGetSlot):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove):
+ * runtime/WriteBarrier.h: Added.
+ (JSC::DeprecatedPtr::DeprecatedPtr):
+ (JSC::DeprecatedPtr::get):
+ (JSC::DeprecatedPtr::operator*):
+ (JSC::DeprecatedPtr::operator->):
+ (JSC::DeprecatedPtr::slot):
+ (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
+ (JSC::DeprecatedPtr::operator!):
+ (JSC::WriteBarrierBase::set):
+ (JSC::WriteBarrierBase::get):
+ (JSC::WriteBarrierBase::operator*):
+ (JSC::WriteBarrierBase::operator->):
+ (JSC::WriteBarrierBase::clear):
+ (JSC::WriteBarrierBase::slot):
+ (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
+ (JSC::WriteBarrierBase::operator!):
+ (JSC::WriteBarrier::WriteBarrier):
+ (JSC::operator==):
+
+2011-01-31 Dan Winship <danw@gnome.org>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ wss (websockets ssl) support for gtk via new gio TLS support
+ https://bugs.webkit.org/show_bug.cgi?id=50344
+
+ Add a GPollableOutputStream typedef for TLS WebSockets support
+
+ * wtf/gobject/GTypedefs.h:
+
+2011-01-31 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53352
+ Heavy external fragmentation in FixedVMPoolAllocator can lead to a CRASH().
+
+ The FixedVMPoolAllocator currently uses a best fix policy -
+ switch to first fit, this is less prone to external fragmentation.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::AllocationTableSizeClass::AllocationTableSizeClass):
+ (JSC::AllocationTableSizeClass::blockSize):
+ (JSC::AllocationTableSizeClass::blockCount):
+ (JSC::AllocationTableSizeClass::blockAlignment):
+ (JSC::AllocationTableSizeClass::size):
+ (JSC::AllocationTableLeaf::AllocationTableLeaf):
+ (JSC::AllocationTableLeaf::~AllocationTableLeaf):
+ (JSC::AllocationTableLeaf::allocate):
+ (JSC::AllocationTableLeaf::free):
+ (JSC::AllocationTableLeaf::isEmpty):
+ (JSC::AllocationTableLeaf::isFull):
+ (JSC::AllocationTableLeaf::size):
+ (JSC::AllocationTableLeaf::classForSize):
+ (JSC::AllocationTableLeaf::dump):
+ (JSC::LazyAllocationTable::LazyAllocationTable):
+ (JSC::LazyAllocationTable::~LazyAllocationTable):
+ (JSC::LazyAllocationTable::allocate):
+ (JSC::LazyAllocationTable::free):
+ (JSC::LazyAllocationTable::isEmpty):
+ (JSC::LazyAllocationTable::isFull):
+ (JSC::LazyAllocationTable::size):
+ (JSC::LazyAllocationTable::dump):
+ (JSC::LazyAllocationTable::classForSize):
+ (JSC::AllocationTableDirectory::AllocationTableDirectory):
+ (JSC::AllocationTableDirectory::~AllocationTableDirectory):
+ (JSC::AllocationTableDirectory::allocate):
+ (JSC::AllocationTableDirectory::free):
+ (JSC::AllocationTableDirectory::isEmpty):
+ (JSC::AllocationTableDirectory::isFull):
+ (JSC::AllocationTableDirectory::size):
+ (JSC::AllocationTableDirectory::classForSize):
+ (JSC::AllocationTableDirectory::dump):
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::alloc):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::FixedVMPoolAllocator::allocated):
+ (JSC::FixedVMPoolAllocator::isValid):
+ (JSC::FixedVMPoolAllocator::classForSize):
+ (JSC::FixedVMPoolAllocator::offsetToPointer):
+ (JSC::FixedVMPoolAllocator::pointerToOffset):
+ (JSC::ExecutableAllocator::committedByteCount):
+ (JSC::ExecutableAllocator::isValid):
+ (JSC::ExecutableAllocator::underMemoryPressure):
+ (JSC::ExecutablePool::systemAlloc):
+ (JSC::ExecutablePool::systemRelease):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::PageReservation):
+ (WTF::PageReservation::commit):
+ (WTF::PageReservation::decommit):
+ (WTF::PageReservation::committed):
+
+2011-01-31 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76969.
+ http://trac.webkit.org/changeset/76969
+ https://bugs.webkit.org/show_bug.cgi?id=53418
+
+ "It is causing crashes in GTK+ and Leopard bots" (Requested by
+ alexg__ on #webkit).
+
+ * runtime/WeakGCMap.h:
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed, rolling out r77098, r77099, r77100, r77109, and
+ r77111.
+ http://trac.webkit.org/changeset/77098
+ http://trac.webkit.org/changeset/77099
+ http://trac.webkit.org/changeset/77100
+ http://trac.webkit.org/changeset/77109
+ http://trac.webkit.org/changeset/77111
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Qt build is broken
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ (JSObjectSetPrivateProperty):
+ * API/JSWeakObjectMapRefInternal.h:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::exception):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/ArgList.cpp:
+ (JSC::MarkedArgumentBuffer::markLists):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::put):
+ * runtime/Arguments.h:
+ (JSC::Arguments::setActivation):
+ (JSC::Arguments::Arguments):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/ConservativeSet.cpp:
+ (JSC::ConservativeSet::grow):
+ * runtime/ConservativeSet.h:
+ (JSC::ConservativeSet::~ConservativeSet):
+ (JSC::ConservativeSet::mark):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::getter):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setter):
+ (JSC::GetterSetter::setSetter):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::cachedGlobalObject):
+ * runtime/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+ (JSC::JSActivation::put):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::getIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::uncheckedSetIndex):
+ (JSC::JSArray::markChildrenDirect):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSCell.h:
+ (JSC::JSCell::JSValue::toThisObject):
+ (JSC::JSCell::MarkStack::append):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::regExpConstructor):
+ (JSC::JSGlobalObject::errorConstructor):
+ (JSC::JSGlobalObject::evalErrorConstructor):
+ (JSC::JSGlobalObject::rangeErrorConstructor):
+ (JSC::JSGlobalObject::referenceErrorConstructor):
+ (JSC::JSGlobalObject::syntaxErrorConstructor):
+ (JSC::JSGlobalObject::typeErrorConstructor):
+ (JSC::JSGlobalObject::URIErrorConstructor):
+ (JSC::JSGlobalObject::evalFunction):
+ (JSC::JSGlobalObject::objectPrototype):
+ (JSC::JSGlobalObject::functionPrototype):
+ (JSC::JSGlobalObject::arrayPrototype):
+ (JSC::JSGlobalObject::booleanPrototype):
+ (JSC::JSGlobalObject::stringPrototype):
+ (JSC::JSGlobalObject::numberPrototype):
+ (JSC::JSGlobalObject::datePrototype):
+ (JSC::JSGlobalObject::regExpPrototype):
+ (JSC::JSGlobalObject::methodCallDummy):
+ (JSC::Structure::prototypeForLookup):
+ (JSC::constructArray):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::object):
+ (JSC::Stringifier::markAggregate):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirectOffset):
+ (JSC::JSObject::putDirectOffset):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSValue::putDirect):
+ (JSC::JSObject::allocatePropertyStorageInline):
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSPropertyNameIterator.h:
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSString.cpp:
+ (JSC::StringObject::create):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::internalValue):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::lookupPut):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::appendValues):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::constructNumber):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ (JSC::resolveBase):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PutPropertySlot.h:
+ (JSC::PutPropertySlot::setExistingProperty):
+ (JSC::PutPropertySlot::setNewProperty):
+ (JSC::PutPropertySlot::base):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainIterator::operator*):
+ (JSC::ScopeChainIterator::operator->):
+ (JSC::ScopeChain::top):
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren):
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::emptyString):
+ (JSC::SmallStrings::singleCharacterString):
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::storedPrototype):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::isValid):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove):
+ * runtime/WriteBarrier.h: Removed.
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Build fix the build fix. I assume Oliver meant m_cell, not m_value.
+
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::clear):
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ More Qt build fixes
+
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::clear):
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77006 and r77020 back in.
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ (JSObjectSetPrivateProperty):
+ * API/JSWeakObjectMapRefInternal.h:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::exception):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/ArgList.cpp:
+ (JSC::MarkedArgumentBuffer::markLists):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::put):
+ * runtime/Arguments.h:
+ (JSC::Arguments::setActivation):
+ (JSC::Arguments::Arguments):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/ConservativeSet.cpp:
+ (JSC::ConservativeSet::grow):
+ * runtime/ConservativeSet.h:
+ (JSC::ConservativeSet::~ConservativeSet):
+ (JSC::ConservativeSet::mark):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::getter):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setter):
+ (JSC::GetterSetter::setSetter):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::cachedGlobalObject):
+ * runtime/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+ (JSC::JSActivation::put):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::getIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::uncheckedSetIndex):
+ (JSC::JSArray::markChildrenDirect):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkStack::append):
+ (JSC::JSCell::MarkStack::internalAppend):
+ (JSC::JSCell::MarkStack::deprecatedAppend):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::regExpConstructor):
+ (JSC::JSGlobalObject::errorConstructor):
+ (JSC::JSGlobalObject::evalErrorConstructor):
+ (JSC::JSGlobalObject::rangeErrorConstructor):
+ (JSC::JSGlobalObject::referenceErrorConstructor):
+ (JSC::JSGlobalObject::syntaxErrorConstructor):
+ (JSC::JSGlobalObject::typeErrorConstructor):
+ (JSC::JSGlobalObject::URIErrorConstructor):
+ (JSC::JSGlobalObject::evalFunction):
+ (JSC::JSGlobalObject::objectPrototype):
+ (JSC::JSGlobalObject::functionPrototype):
+ (JSC::JSGlobalObject::arrayPrototype):
+ (JSC::JSGlobalObject::booleanPrototype):
+ (JSC::JSGlobalObject::stringPrototype):
+ (JSC::JSGlobalObject::numberPrototype):
+ (JSC::JSGlobalObject::datePrototype):
+ (JSC::JSGlobalObject::regExpPrototype):
+ (JSC::JSGlobalObject::methodCallDummy):
+ (JSC::Structure::prototypeForLookup):
+ (JSC::constructArray):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::object):
+ (JSC::Stringifier::Holder::objectSlot):
+ (JSC::Stringifier::markAggregate):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirectOffset):
+ (JSC::JSObject::putDirectOffset):
+ (JSC::JSObject::putUndefinedAtDirectOffset):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSValue::putDirect):
+ (JSC::JSObject::allocatePropertyStorageInline):
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSPropertyNameIterator.h:
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSString.cpp:
+ (JSC::StringObject::create):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::internalValue):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::lookupPut):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStack):
+ (JSC::MarkStack::deprecatedAppendValues):
+ (JSC::MarkStack::appendValues):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::constructNumber):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ (JSC::resolveBase):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PutPropertySlot.h:
+ (JSC::PutPropertySlot::setExistingProperty):
+ (JSC::PutPropertySlot::setNewProperty):
+ (JSC::PutPropertySlot::base):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainIterator::operator*):
+ (JSC::ScopeChainIterator::operator->):
+ (JSC::ScopeChain::top):
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren):
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::emptyString):
+ (JSC::SmallStrings::singleCharacterString):
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::storedPrototype):
+ (JSC::Structure::storedPrototypeSlot):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::uncheckedGetSlot):
+ (JSC::WeakGCMap::isValid):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove):
+ * runtime/WriteBarrier.h: Added.
+ (JSC::DeprecatedPtr::DeprecatedPtr):
+ (JSC::DeprecatedPtr::get):
+ (JSC::DeprecatedPtr::operator*):
+ (JSC::DeprecatedPtr::operator->):
+ (JSC::DeprecatedPtr::slot):
+ (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
+ (JSC::DeprecatedPtr::operator!):
+ (JSC::WriteBarrierBase::set):
+ (JSC::WriteBarrierBase::get):
+ (JSC::WriteBarrierBase::operator*):
+ (JSC::WriteBarrierBase::operator->):
+ (JSC::WriteBarrierBase::slot):
+ (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
+ (JSC::WriteBarrierBase::operator!):
+ (JSC::WriteBarrier::WriteBarrier):
+ (JSC::operator==):
+
+2011-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Filter all Heap collection through a common reset function, in
+ preparation for adding features triggered by collection.
+ https://bugs.webkit.org/show_bug.cgi?id=53396
+
+ SunSpider reports no change.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::reportExtraMemoryCostSlowCase): When we're over the extraCost
+ limit, just call collectAllGarbage() instead of rolling our own special
+ way of resetting the heap. In theory, this may be slower in some cases,
+ but it also fixes cases of pathological heap growth that we've seen,
+ where the only objects being allocated are temporary and huge
+ (<rdar://problem/8885843>).
+
+ (JSC::Heap::allocate):
+ (JSC::Heap::collectAllGarbage): Use the shared reset function.
+
+ (JSC::Heap::reset):
+ * runtime/Heap.h: Carved a new shared reset function out of the old
+ collectAllGarbage.
+
+2011-01-30 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77025.
+ http://trac.webkit.org/changeset/77025
+ https://bugs.webkit.org/show_bug.cgi?id=53401
+
+ It made js1_5/Regress/regress-159334.js fail on 64 bit Linux
+ (Requested by Ossy on #webkit).
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FreeListEntry::FreeListEntry):
+ (JSC::AVLTreeAbstractorForFreeList::get_less):
+ (JSC::AVLTreeAbstractorForFreeList::set_less):
+ (JSC::AVLTreeAbstractorForFreeList::get_greater):
+ (JSC::AVLTreeAbstractorForFreeList::set_greater):
+ (JSC::AVLTreeAbstractorForFreeList::get_balance_factor):
+ (JSC::AVLTreeAbstractorForFreeList::set_balance_factor):
+ (JSC::AVLTreeAbstractorForFreeList::null):
+ (JSC::AVLTreeAbstractorForFreeList::compare_key_key):
+ (JSC::AVLTreeAbstractorForFreeList::compare_key_node):
+ (JSC::AVLTreeAbstractorForFreeList::compare_node_node):
+ (JSC::reverseSortFreeListEntriesByPointer):
+ (JSC::reverseSortCommonSizedAllocations):
+ (JSC::FixedVMPoolAllocator::release):
+ (JSC::FixedVMPoolAllocator::reuse):
+ (JSC::FixedVMPoolAllocator::addToFreeList):
+ (JSC::FixedVMPoolAllocator::coalesceFreeSpace):
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::alloc):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::FixedVMPoolAllocator::isValid):
+ (JSC::FixedVMPoolAllocator::allocInternal):
+ (JSC::FixedVMPoolAllocator::isWithinVMPool):
+ (JSC::FixedVMPoolAllocator::addToCommittedByteCount):
+ (JSC::ExecutableAllocator::committedByteCount):
+ (JSC::maybeModifyVMPoolSize):
+ (JSC::ExecutableAllocator::isValid):
+ (JSC::ExecutableAllocator::underMemoryPressure):
+ (JSC::ExecutablePool::systemAlloc):
+ (JSC::ExecutablePool::systemRelease):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::PageReservation):
+ (WTF::PageReservation::commit):
+ (WTF::PageReservation::decommit):
+
+2011-01-30 Leo Yang <leo.yang@torchmobile.com.cn>
+
+ Reviewed by Daniel Bates.
+
+ Code style issue in JavaScriptCore/wtf/CurrentTime.h
+ https://bugs.webkit.org/show_bug.cgi?id=53394
+
+ According to rule #3 at http://webkit.org/coding/coding-style.html,
+ This patch fix style issue in CurrentTime.h.
+
+ No functionality change, no new tests.
+
+ * wtf/CurrentTime.h:
+ (WTF::currentTimeMS):
+ (WTF::getLocalTime):
+
+2011-01-30 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] JavaScriptCore does not link on Mac if building WebKit 2
+ https://bugs.webkit.org/show_bug.cgi?id=53377
+
+ The option "-whole-archive" is not availabe with the libtool of Mac OS X,
+ instead, we can use "-all_load" on Mac.
+
+ * JavaScriptCore.pri:
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Sorry Leopard bot -- I committed a change by accident.
+
+ * JavaScriptCore.exp: You may have your symbols back now.
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ Simplified Heap iteration
+ https://bugs.webkit.org/show_bug.cgi?id=53393
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::CollectorHeapIterator::isValid):
+ (JSC::CollectorHeapIterator::isLive):
+ (JSC::CollectorHeapIterator::advance): Removed "max" argument to
+ advance because it's a constant.
+ (JSC::LiveObjectIterator::LiveObjectIterator):
+ (JSC::LiveObjectIterator::operator++):
+ (JSC::DeadObjectIterator::DeadObjectIterator):
+ (JSC::DeadObjectIterator::operator++):
+ (JSC::ObjectIterator::ObjectIterator):
+ (JSC::ObjectIterator::operator++): Factored out common checks into
+ two helper functions -- isValid() for "Am I past the end?" and isLive()
+ for "Is the cell I'm pointing to live?".
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::freeBlock):
+ (JSC::MarkedSpace::sweep): Always sweep from the beginning of the heap
+ to the end, to avoid making sweep subtly reliant on internal Heap state.
+ (JSC::MarkedSpace::primaryHeapBegin):
+ (JSC::MarkedSpace::primaryHeapEnd): Always be explicit about where
+ iteration begins.
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ Simplified heap destruction
+ https://bugs.webkit.org/show_bug.cgi?id=53392
+
+ * JavaScriptCore.exp:
+ * runtime/Heap.cpp:
+ (JSC::Heap::destroy):
+ * runtime/Heap.h:
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::destroy):
+ * runtime/MarkedSpace.h: Don't go out of our way to destroy GC-protected
+ cells last -- the difficult contortions required to do so just don't seem
+ justified. We make no guarantees about GC protection after the client
+ throws away JSGlobalData, and it doesn't seem like any meaningful
+ guarantee is even possible.
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Switched heap to use the Bitmap class and removed CollectorBitmap
+ https://bugs.webkit.org/show_bug.cgi?id=53391
+
+ SunSpider says 1.005x as fast. Seems like a fluke.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::allocate): Updated for rename and returning a value
+ rather than taking a value by reference.
+
+ * runtime/MarkedSpace.h: Code reuse is good.
+
+ * wtf/Bitmap.h:
+ (WTF::::testAndSet): Added, since this is the one thing Bitmap was missing
+ which CollectorBitmap had. (Renamed from the less conventional "getset".)
+
+ (WTF::::nextPossiblyUnset): Renamed and changed to return a value for
+ clarity. It's all the same with inlining.
+
+2011-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Some more Heap cleanup.
+ https://bugs.webkit.org/show_bug.cgi?id=53357
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated exported symbols.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::reportExtraMemoryCostSlowCase): Renamed recordExtraCost to
+ reportExtraMemoryCostSlowCase to match our naming conventions.
+
+ (JSC::Heap::capacity): Renamed size to capacity because this function
+ returns the capacity of the heap, including unused portions.
+
+ * runtime/Heap.h:
+ (JSC::Heap::globalData):
+ (JSC::Heap::markedSpace):
+ (JSC::Heap::machineStackMarker):
+ (JSC::Heap::reportExtraMemoryCost): Moved statics to the top of the file.
+ Moved ctor and dtor to the beginning of the class definition. Grouped
+ functions by purpose.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::capacity): Renamed size to capacity because this
+ function returns the capacity of the heap, including unused portions.
+
+ * runtime/MarkedSpace.h: Removed statistics and the Statistics class because
+ the same information can be gotten just by calling size() and capacity().
+
+ * runtime/MemoryStatistics.cpp:
+ * runtime/MemoryStatistics.h: Ditto.
+
+2011-01-29 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Eric Seidel.
+
+ Move wince/mt19937ar.c to ThirdParty and make it a policy choice
+ https://bugs.webkit.org/show_bug.cgi?id=53253
+
+ Make inclusion of MT19937 a policy decision.
+
+ Currently, we hardcoded to use MT19937 when building for
+ Windows CE. Instead, we should make this a policy decision
+ with the Windows CE port using this by default.
+
+ * JavaScriptCore.pri: Append Source/ThirdParty to the end
+ of the list include directories.
+ * wtf/CMakeLists.txt: Ditto.
+ * wtf/Platform.h: Defined WTF_USE_MERSENNE_TWISTER_19937 when
+ building for Windows CE.
+ * wtf/RandomNumber.cpp:
+ (WTF::randomNumber): Substituted USE(MERSENNE_TWISTER_19937) for OS(WINCE).
+
+2011-01-29 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by David Kilzer.
+
+ Bug 53374 - Remove uses of unsafe string functions in debugging code
+ https://bugs.webkit.org/show_bug.cgi?id=53374
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::printTraceData):
+
+2011-01-29 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ JavaScriptCoreUseJIT environment variable broken
+ https://bugs.webkit.org/show_bug.cgi?id=53372
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData): Check the actual value in the string returned
+ by getenv() rather than just doing a NULL check on the return value.
+
+2011-01-29 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Move CharacterNames.h into WTF directory
+ https://bugs.webkit.org/show_bug.cgi?id=49618
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/CMakeLists.txt:
+ * wtf/unicode/CharacterNames.h: Renamed from WebCore/platform/text/CharacterNames.h.
+ * wtf/unicode/UTF8.cpp:
+
+2011-01-28 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add various clampToInt() methods to MathExtras.h
+ https://bugs.webkit.org/show_bug.cgi?id=52910
+
+ Add functions for clamping doubles and floats to valid int
+ ranges, for signed and positive integers.
+
+ * wtf/MathExtras.h:
+ (clampToInteger):
+ (clampToPositiveInteger):
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77006 and r77020.
+ http://trac.webkit.org/changeset/77006
+ http://trac.webkit.org/changeset/77020
+ https://bugs.webkit.org/show_bug.cgi?id=53360
+
+ "Broke Windows tests" (Requested by rniwa on #webkit).
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ (JSObjectSetPrivateProperty):
+ * API/JSWeakObjectMapRefInternal.h:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::exception):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/ArgList.cpp:
+ (JSC::MarkedArgumentBuffer::markLists):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::put):
+ * runtime/Arguments.h:
+ (JSC::Arguments::setActivation):
+ (JSC::Arguments::Arguments):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/ConservativeSet.cpp:
+ (JSC::ConservativeSet::grow):
+ * runtime/ConservativeSet.h:
+ (JSC::ConservativeSet::~ConservativeSet):
+ (JSC::ConservativeSet::mark):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::getter):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setter):
+ (JSC::GetterSetter::setSetter):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::cachedGlobalObject):
+ * runtime/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+ (JSC::JSActivation::put):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::getIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::uncheckedSetIndex):
+ (JSC::JSArray::markChildrenDirect):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSCell.h:
+ (JSC::JSCell::JSValue::toThisObject):
+ (JSC::JSCell::MarkStack::append):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::regExpConstructor):
+ (JSC::JSGlobalObject::errorConstructor):
+ (JSC::JSGlobalObject::evalErrorConstructor):
+ (JSC::JSGlobalObject::rangeErrorConstructor):
+ (JSC::JSGlobalObject::referenceErrorConstructor):
+ (JSC::JSGlobalObject::syntaxErrorConstructor):
+ (JSC::JSGlobalObject::typeErrorConstructor):
+ (JSC::JSGlobalObject::URIErrorConstructor):
+ (JSC::JSGlobalObject::evalFunction):
+ (JSC::JSGlobalObject::objectPrototype):
+ (JSC::JSGlobalObject::functionPrototype):
+ (JSC::JSGlobalObject::arrayPrototype):
+ (JSC::JSGlobalObject::booleanPrototype):
+ (JSC::JSGlobalObject::stringPrototype):
+ (JSC::JSGlobalObject::numberPrototype):
+ (JSC::JSGlobalObject::datePrototype):
+ (JSC::JSGlobalObject::regExpPrototype):
+ (JSC::JSGlobalObject::methodCallDummy):
+ (JSC::Structure::prototypeForLookup):
+ (JSC::constructArray):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::object):
+ (JSC::Stringifier::markAggregate):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirectOffset):
+ (JSC::JSObject::putDirectOffset):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSValue::putDirect):
+ (JSC::JSObject::allocatePropertyStorageInline):
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSPropertyNameIterator.h:
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSString.cpp:
+ (JSC::StringObject::create):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::internalValue):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::lookupPut):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::appendValues):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::constructNumber):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ (JSC::resolveBase):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PutPropertySlot.h:
+ (JSC::PutPropertySlot::setExistingProperty):
+ (JSC::PutPropertySlot::setNewProperty):
+ (JSC::PutPropertySlot::base):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainIterator::operator*):
+ (JSC::ScopeChainIterator::operator->):
+ (JSC::ScopeChain::top):
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren):
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::emptyString):
+ (JSC::SmallStrings::singleCharacterString):
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::storedPrototype):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::isValid):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove):
+ * runtime/WriteBarrier.h: Removed.
+
+2011-01-28 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53352
+ Heavy external fragmentation in FixedVMPoolAllocator can lead to a CRASH().
+
+ The FixedVMPoolAllocator currently uses a best fix policy -
+ switch to first fit, this is less prone to external fragmentation.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::AllocationTableSizeClass::AllocationTableSizeClass):
+ (JSC::AllocationTableSizeClass::blockSize):
+ (JSC::AllocationTableSizeClass::blockCount):
+ (JSC::AllocationTableSizeClass::blockAlignment):
+ (JSC::AllocationTableSizeClass::size):
+ (JSC::AllocationTableLeaf::AllocationTableLeaf):
+ (JSC::AllocationTableLeaf::~AllocationTableLeaf):
+ (JSC::AllocationTableLeaf::allocate):
+ (JSC::AllocationTableLeaf::free):
+ (JSC::AllocationTableLeaf::isEmpty):
+ (JSC::AllocationTableLeaf::isFull):
+ (JSC::AllocationTableLeaf::size):
+ (JSC::AllocationTableLeaf::classForSize):
+ (JSC::AllocationTableLeaf::dump):
+ (JSC::LazyAllocationTable::LazyAllocationTable):
+ (JSC::LazyAllocationTable::~LazyAllocationTable):
+ (JSC::LazyAllocationTable::allocate):
+ (JSC::LazyAllocationTable::free):
+ (JSC::LazyAllocationTable::isEmpty):
+ (JSC::LazyAllocationTable::isFull):
+ (JSC::LazyAllocationTable::size):
+ (JSC::LazyAllocationTable::dump):
+ (JSC::LazyAllocationTable::classForSize):
+ (JSC::AllocationTableDirectory::AllocationTableDirectory):
+ (JSC::AllocationTableDirectory::~AllocationTableDirectory):
+ (JSC::AllocationTableDirectory::allocate):
+ (JSC::AllocationTableDirectory::free):
+ (JSC::AllocationTableDirectory::isEmpty):
+ (JSC::AllocationTableDirectory::isFull):
+ (JSC::AllocationTableDirectory::size):
+ (JSC::AllocationTableDirectory::classForSize):
+ (JSC::AllocationTableDirectory::dump):
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::alloc):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::FixedVMPoolAllocator::allocated):
+ (JSC::FixedVMPoolAllocator::isValid):
+ (JSC::FixedVMPoolAllocator::classForSize):
+ (JSC::FixedVMPoolAllocator::offsetToPointer):
+ (JSC::FixedVMPoolAllocator::pointerToOffset):
+ (JSC::ExecutableAllocator::committedByteCount):
+ (JSC::ExecutableAllocator::isValid):
+ (JSC::ExecutableAllocator::underMemoryPressure):
+ (JSC::ExecutablePool::systemAlloc):
+ (JSC::ExecutablePool::systemRelease):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::PageReservation):
+ (WTF::PageReservation::commit):
+ (WTF::PageReservation::decommit):
+ (WTF::PageReservation::committed):
+
+2011-01-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Move the MarkStack over to a slot based marking API.
+
+ In order to avoiding aliasing concerns there are two new types
+ that need to be used when holding on to JSValues and JSCell that
+ need to be marked: WriteBarrier and DeprecatedPtr. WriteBarrier
+ is expected to be used for any JSValue or Cell that's lifetime and
+ marking is controlled by another GC object. DeprecatedPtr is used
+ for any value that we need to rework ownership for.
+
+ The change over to this model has produced a large amount of
+ code changes, but they are mostly mechanical (forwarding JSGlobalData,
+ etc).
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeConstructor):
+ (JSObjectSetPrivateProperty):
+ * API/JSWeakObjectMapRefInternal.h:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::globalObject):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Register.h:
+ (JSC::Register::jsValueSlot):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::put):
+ * runtime/Arguments.h:
+ (JSC::Arguments::setActivation):
+ (JSC::Arguments::Arguments):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/ConservativeSet.h:
+ (JSC::ConservativeSet::mark):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::getter):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setter):
+ (JSC::GetterSetter::setSetter):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::cachedGlobalObject):
+ * runtime/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::markTempSortVectors):
+ (JSC::Heap::markRoots):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::put):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::getIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::uncheckedSetIndex):
+ (JSC::JSArray::markChildrenDirect):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSCell.h:
+ (JSC::JSCell::MarkStack::append):
+ (JSC::JSCell::MarkStack::appendCell):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::regExpConstructor):
+ (JSC::JSGlobalObject::errorConstructor):
+ (JSC::JSGlobalObject::evalErrorConstructor):
+ (JSC::JSGlobalObject::rangeErrorConstructor):
+ (JSC::JSGlobalObject::referenceErrorConstructor):
+ (JSC::JSGlobalObject::syntaxErrorConstructor):
+ (JSC::JSGlobalObject::typeErrorConstructor):
+ (JSC::JSGlobalObject::URIErrorConstructor):
+ (JSC::JSGlobalObject::evalFunction):
+ (JSC::JSGlobalObject::objectPrototype):
+ (JSC::JSGlobalObject::functionPrototype):
+ (JSC::JSGlobalObject::arrayPrototype):
+ (JSC::JSGlobalObject::booleanPrototype):
+ (JSC::JSGlobalObject::stringPrototype):
+ (JSC::JSGlobalObject::numberPrototype):
+ (JSC::JSGlobalObject::datePrototype):
+ (JSC::JSGlobalObject::regExpPrototype):
+ (JSC::JSGlobalObject::methodCallDummy):
+ (JSC::constructArray):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::object):
+ (JSC::Stringifier::Holder::objectSlot):
+ (JSC::Stringifier::markAggregate):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirectOffset):
+ (JSC::JSObject::putUndefinedAtDirectOffset):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSValue::putDirect):
+ (JSC::JSObject::allocatePropertyStorageInline):
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSString.cpp:
+ (JSC::StringObject::create):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::internalValue):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::lookupPut):
+ * runtime/MarkStack.h:
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberObject.cpp:
+ (JSC::constructNumber):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ (JSC::resolveBase):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PutPropertySlot.h:
+ (JSC::PutPropertySlot::setExistingProperty):
+ (JSC::PutPropertySlot::setNewProperty):
+ (JSC::PutPropertySlot::base):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainIterator::operator*):
+ (JSC::ScopeChainIterator::operator->):
+ (JSC::ScopeChain::top):
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren):
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::emptyString):
+ (JSC::SmallStrings::singleCharacterString):
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/Structure.cpp:
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::storedPrototypeSlot):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::uncheckedGetSlot):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove):
+ * runtime/WriteBarrier.h: Added.
+ (JSC::DeprecatedPtr::DeprecatedPtr):
+ (JSC::DeprecatedPtr::get):
+ (JSC::DeprecatedPtr::operator*):
+ (JSC::DeprecatedPtr::operator->):
+ (JSC::DeprecatedPtr::slot):
+ (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
+ (JSC::DeprecatedPtr::operator!):
+ (JSC::WriteBarrierBase::set):
+ (JSC::WriteBarrierBase::get):
+ (JSC::WriteBarrierBase::operator*):
+ (JSC::WriteBarrierBase::operator->):
+ (JSC::WriteBarrierBase::slot):
+ (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
+ (JSC::WriteBarrierBase::operator!):
+ (JSC::WriteBarrier::WriteBarrier):
+ (JSC::operator==):
+
+2011-01-28 Adam Roben <aroben@apple.com>
+
+ Chromium build fix after r76967
+
+ * wtf/ThreadingPrimitives.h: Use OS(WINDOWS) instead of PLATFORM(WIN), to match other
+ similar macros in this file.
+
+2011-01-28 Michael Saboff <msaboff@apple.com>
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Reapplying this this change. No change from prior patch in
+ JavaScriptCore.
+
+ Added new isValid() methods to check if a contained object in
+ a WeakGCMap is valid when using an unchecked iterator.
+
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::isValid):
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Extract code to convert a WTF absolute time to a Win32 wait interval into a separate
+ function
+
+ Fixes <http://webkit.org/b/53208> <rdar://problem/8922490> BinarySemaphore should wrap a
+ Win32 event
+
+ Reviewed by Dave Hyatt.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export the new function.
+
+ * wtf/ThreadingPrimitives.h: Declare the new function.
+
+ * wtf/ThreadingWin.cpp:
+ (WTF::ThreadCondition::timedWait): Moved code to convert the absolute time to a wait
+ interval from here...
+ (WTF::absoluteTimeToWaitTimeoutInterval): ...to here.
+
+2011-01-28 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add basic rubber banding support
+ <rdar://problem/8219429>
+ https://bugs.webkit.org/show_bug.cgi?id=53277
+
+ * wtf/Platform.h: Add ENABLE for rubber banding.
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76893.
+ http://trac.webkit.org/changeset/76893
+ https://bugs.webkit.org/show_bug.cgi?id=53287
+
+ It made some tests crash on GTK and Qt debug bots (Requested
+ by Ossy on #webkit).
+
+ * runtime/WeakGCMap.h:
+
+2011-01-27 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add WTFString method to compare equality with Vector<UChar>
+ https://bugs.webkit.org/show_bug.cgi?id=53266
+
+ I'm planning to use this method in the new XSS filter implementation,
+ but it seems generally useful.
+
+ * wtf/text/StringImpl.h:
+ (WTF::equalIgnoringNullity):
+ * wtf/text/WTFString.h:
+ (WTF::equalIgnoringNullity):
+
+2011-01-27 Michael Saboff <msaboff@apple.com>
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Added new isValid() methods to check if a contained object in
+ a WeakGCMap is valid when using an unchecked iterator.
+
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::isValid):
+
+2011-01-26 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add events to represent the start/end of a gesture scroll
+ https://bugs.webkit.org/show_bug.cgi?id=53215
+
+ * wtf/Platform.h: Add ENABLE for gesture events.
+
+2011-01-26 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt][Symbian] Fix --minimal build
+ https://bugs.webkit.org/show_bug.cgi?id=52839
+
+ Move definition of USE_SYSTEM_MALLOC out of pri file.
+ Put it in platform.h instead.
+
+ * wtf/Platform.h:
+ * wtf/TCSystemAlloc.cpp:
+ * wtf/wtf.pri:
+
+2011-01-26 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [WINCE] Add JIT support to build system
+ https://bugs.webkit.org/show_bug.cgi?id=53079
+
+ * CMakeListsWinCE.txt:
+
+2011-01-25 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ Reviewed by Steve Falkenburg.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make: Set BUILDSTYLE to Release_PGO at the very start
+ of the file so that ConfigurationBuildDir takes that into account. Also set it the right way
+ (by redefining the macro) rather than the wrong way (by modifying the environment variable).
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber-stamped by Adam Roben.
+
+ Windows production build fix.
+ Use correct environment variable escaping
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2011-01-25 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ JSON.stringify processing time exponentially grows with size of object
+ https://bugs.webkit.org/show_bug.cgi?id=51922
+
+ Remove last use of reserveCapacity from JSON stringification, as it results
+ in appalling append behaviour when there are a large number of property names
+ and nothing else.
+
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::appendQuotedString):
+
+2011-01-25 Antti Koivisto <antti@apple.com>
+
+ Not reviewed.
+
+ Try to fix windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2011-01-25 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESSION: Leak in JSParser::Scope::copyCapturedVariablesToVector()
+ https://bugs.webkit.org/show_bug.cgi?id=53061
+
+ Cache did not know about the subclass so failed to fully delete the items.
+ Got rid of the subclass and moved the classes to separate files.
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * parser/JSParser.cpp:
+ (JSC::JSParser::Scope::saveFunctionInfo):
+ (JSC::JSParser::Scope::restoreFunctionInfo):
+ (JSC::JSParser::findCachedFunctionInfo):
+ (JSC::JSParser::parseFunctionInfo):
+ * parser/SourceProvider.h:
+ * parser/SourceProviderCache.cpp: Added.
+ (JSC::SourceProviderCache::~SourceProviderCache):
+ (JSC::SourceProviderCache::byteSize):
+ * parser/SourceProviderCache.h: Added.
+ (JSC::SourceProviderCache::SourceProviderCache):
+ (JSC::SourceProviderCache::add):
+ (JSC::SourceProviderCache::get):
+ * parser/SourceProviderCacheItem.h: Added.
+ (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
+ (JSC::SourceProviderCacheItem::approximateByteSize):
+ (JSC::SourceProviderCacheItem::closeBraceToken):
+
+2011-01-25 Marcilio Mendonca <mamendonca@rim.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 53087: Refactoring: replaced a hanging "else" with a "return"
+ statement
+ https://bugs.webkit.org/show_bug.cgi?id=53087.
+
+ Refactoring work: Replaced a hanging "else" within an #if PLATFORM(M
+ with a "return" so that the code is more readable and less error pro
+ (e.g., "else" doesn't use braces so adding extra lines to the else
+ block won't have any effect; even worse, code still compiles
+ successfully.
+
+ * wtf/Assertions.cpp:
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-01-25 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make: Added a missing "set".
+
+2011-01-25 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add missing defines for COMPILER(RVCT) && CPU(ARM_THUMB2)
+ https://bugs.webkit.org/show_bug.cgi?id=52949
+
+ * jit/JITStubs.cpp:
+
+2011-01-24 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make: Update for move of JavaScriptCore into Source.
+
+2011-01-24 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Optimize regex patterns which contain empty alternatives
+ https://bugs.webkit.org/show_bug.cgi?id=51395
+
+ Eliminate the empty alternatives from the regex pattern and convert it to do
+ the matching in an easier way.
+
+ * yarr/YarrPattern.cpp:
+ (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+ * jsc.pro:
+
+2011-01-23 Mark Rowe <mrowe@apple.com>
+
+ Follow-up to r76477.
+
+ Fix the scripts that detect problematic code such as static initializers
+ and destructors, weak vtables, inappropriate files in the framework wrappers,
+ and public headers including private headers. These had all been broken
+ since the projects were moved in to the Source directory as the paths to the
+ scripts were not updated at that time.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Use WTF::StringHasher in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=52934
+
+ Add an additional function to calculate the hash
+ of data with a runtimedependent size.
+
+ * wtf/StringHasher.h:
+ (WTF::StringHasher::createBlobHash):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Fix comment in String::ascii()
+ https://bugs.webkit.org/show_bug.cgi?id=52980
+
+ * wtf/text/WTFString.cpp:
+ (WTF::String::ascii):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Add String::containsOnlyLatin1()
+ https://bugs.webkit.org/show_bug.cgi?id=52979
+
+ * wtf/text/WTFString.h:
+ (WTF::String::containsOnlyLatin1):
+ (WTF::charactersAreAllLatin1):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Remove obsolete JSVALUE32 code
+ https://bugs.webkit.org/show_bug.cgi?id=52948
+
+ r70111 removed support for JSVALUE32.
+ ARM, MIPS and X86 support JSVALUE32_64 only.
+
+ * jit/JITStubs.cpp:
+
+2011-01-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ ASSERT running run-webkit-tests --threaded.
+ https://bugs.webkit.org/show_bug.cgi?id=52971
+
+ SunSpider and v8 report no change.
+
+ * runtime/ConservativeSet.cpp:
+ (JSC::ConservativeSet::grow):
+ (JSC::ConservativeSet::add):
+ * runtime/ConservativeSet.h: Tweaked the inline capacity to 128, and
+ the growth policy to 2X, to make SunSpider and v8 happy.
+ (JSC::ConservativeSet::ConservativeSet):
+ (JSC::ConservativeSet::~ConservativeSet):
+ (JSC::ConservativeSet::mark): Use OSAllocator directly, instead of malloc.
+ Malloc is forbidden during a multi-threaded mark phase because it can
+ cause deadlock.
+
+2011-01-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Rubber-stamped by Maciej Stachowiak.
+
+ A few of Maciej's review suggestions for my last patch.
+ https://bugs.webkit.org/show_bug.cgi?id=52946
+
+ SunSpider reports no change.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Updated build systems.
+
+ * runtime/ConservativeSet.cpp: Added.
+ (JSC::isPointerAligned):
+ (JSC::ConservativeSet::add):
+ * runtime/ConservativeSet.h: Added.
+ (JSC::ConservativeSet::ConservativeSet):
+ (JSC::ConservativeSet::mark): Split ConservativeSet out into its own
+ file, and moved the conservative check into ConservativeSet::add, making
+ ConservativeSet's responsibility clearer.
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::markRoots):
+ * runtime/MachineStackMarker.cpp:
+ (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
+ (JSC::MachineStackMarker::markOtherThreadConservatively):
+ * runtime/MachineStackMarker.h:
+ * runtime/MarkStack.h: Updated for changes above.
+
+2011-01-22 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r76430.
+
+ * runtime/MachineStackMarker.cpp:
+ (JSC::swapIfBackwards):
+
+2011-01-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Reorganized MarkedSpace, making many of its functions private.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::Heap::heap):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::globalData):
+ (JSC::MarkedSpace::heap):
+
+2011-01-21 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix build: moved helper function out of #ifdef.
+
+ * runtime/MachineStackMarker.cpp:
+ (JSC::swapIfBackwards):
+
+2011-01-21 Geoffrey Garen <ggaren@apple.com>
+
+ Rubber-stamped by Maciej Stachowiak.
+
+ A few of Maciej's review suggestions for my last patch.
+ https://bugs.webkit.org/show_bug.cgi?id=52946
+
+ SunSpider reports no change.
+
+ * runtime/MachineStackMarker.cpp:
+ (JSC::swapIfBackwards): Added a helper function for handling platforms
+ where the stack can grow in any direction.
+
+ (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
+ (JSC::MachineStackMarker::markOtherThreadConservatively): Use the helper
+ function.
+
+ (JSC::isPointerAligned): Use "!" instead of "==0" because a robot told me to.
+
+ (JSC::MachineStackMarker::markConservatively): Changed to use a more
+ standard looping idiom, and to use the helper function above.
+
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::isCellAligned): Use "!" instead of "==0" because a robot told me to.
+
+2011-01-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Cleaned up some conservative marking code.
+ https://bugs.webkit.org/show_bug.cgi?id=52946
+
+ SunSpider reports no change.
+
+ * interpreter/RegisterFile.h: No need for a special marking function,
+ since we already expose a start() and end().
+
+ * runtime/Heap.cpp:
+ (JSC::Heap::registerFile):
+ (JSC::Heap::markRoots):
+ * runtime/Heap.h:
+ (JSC::Heap::contains): Migrated markConservatively() to the machine stack
+ marker class. Now, Heap just provides a contains() function, which the
+ machine stack marker uses for checking whether a pointer points into the heap.
+
+ * runtime/MachineStackMarker.cpp:
+ (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
+ (JSC::MachineStackMarker::markOtherThreadConservatively):
+ (JSC::isPointerAligned):
+ (JSC::MachineStackMarker::markConservatively):
+ * runtime/MachineStackMarker.h: Move the conservative marking code here.
+
+ * runtime/MarkStack.h:
+ (JSC::ConservativeSet::add):
+ (JSC::ConservativeSet::mark): Changed to using a vector instead of hash
+ set. Vector seems to be a bit faster, and it generates smaller code.
+
+ * runtime/MarkedSpace.cpp:
+ (JSC::MarkedSpace::containsSlowCase):
+ * runtime/MarkedSpace.h:
+ (JSC::MarkedSpace::isCellAligned):
+ (JSC::MarkedSpace::isPossibleCell):
+ (JSC::MarkedSpace::contains): Kept the code for determining whether a
+ pointer pointed into marked space, and moved the code for marking
+ a set of conservative pointers into the machine stack marker.
+
+ * wtf/HashSet.h:
+ (WTF::::add): Added two missing inlines that I noticed while testing
+ vector vs hash set.
+
+2011-01-21 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Work around a Clang bug <rdar://problem/8876150> that leads to it incorrectly emitting an access
+ control warning when a client tries to use operator bool exposed above via "using PageBlock::operator bool".
+
+ * wtf/PageAllocation.h:
+ (WTF::PageAllocation::operator bool):
+ * wtf/PageReservation.h:
+ (WTF::PageReservation::operator bool):
+
2011-01-21 Michael Saboff <msaboff@apple.com>
Reviewed by Oliver Hunt.
diff --git a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig
index 46d5de4..3971037 100644
--- a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig
+++ b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig
@@ -38,10 +38,10 @@ ENABLE_ACCELERATED_2D_CANVAS_macosx = $(ENABLE_ACCELERATED_2D_CANVAS_macosx_$(TA
ENABLE_ACCELERATED_2D_CANVAS_macosx_1060 = ;
ENABLE_ACCELERATED_2D_CANVAS_macosx_1070 = ;
-ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(REAL_PLATFORM_NAME));
-ENABLE_3D_CANVAS_macosx = $(ENABLE_3D_CANVAS_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
-ENABLE_3D_CANVAS_macosx_1060 = ENABLE_3D_CANVAS;
-ENABLE_3D_CANVAS_macosx_1070 = ENABLE_3D_CANVAS;
+ENABLE_WEBGL = $(ENABLE_WEBGL_$(REAL_PLATFORM_NAME));
+ENABLE_WEBGL_macosx = $(ENABLE_WEBGL_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+ENABLE_WEBGL_macosx_1060 = ENABLE_WEBGL;
+ENABLE_WEBGL_macosx_1070 = ENABLE_WEBGL;
ENABLE_3D_RENDERING = $(ENABLE_3D_RENDERING_$(REAL_PLATFORM_NAME));
ENABLE_3D_RENDERING_iphoneos = ENABLE_3D_RENDERING;
@@ -91,6 +91,8 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
+ENABLE_REGISTER_PROTOCOL_HANDLER = ;
+
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -106,6 +108,8 @@ ENABLE_SVG_FOREIGN_OBJECT = ENABLE_SVG_FOREIGN_OBJECT;
ENABLE_SVG_USE = ENABLE_SVG_USE;
ENABLE_VIDEO = ENABLE_VIDEO;
+ENABLE_MEDIA_STATISTICS = ;
+
ENABLE_WEB_AUDIO = ;
ENABLE_WEB_SOCKETS = $(ENABLE_WEB_SOCKETS_$(REAL_PLATFORM_NAME));
@@ -121,4 +125,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig b/Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
index 69b2491..adf594e 100644
--- a/Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
+++ b/Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
@@ -26,11 +26,11 @@
JSVALUE_MODEL = $(JSVALUE_MODEL_$(CURRENT_ARCH));
JSVALUE_MODEL_ = UNKNOWN_JSVALUE_MODEL;
-JSVALUE_MODEL_armv6 = 32;
+JSVALUE_MODEL_armv6 = 32_64;
JSVALUE_MODEL_armv7 = 32_64;
JSVALUE_MODEL_i386 = 32_64;
JSVALUE_MODEL_ppc = 32_64;
-JSVALUE_MODEL_ppc64 = 32;
+JSVALUE_MODEL_ppc64 = 64;
JSVALUE_MODEL_x86_64 = 64;
EXPORTED_SYMBOLS_FILE = $(BUILT_PRODUCTS_DIR)/DerivedSources/JavaScriptCore/JavaScriptCore.JSVALUE$(JSVALUE_MODEL).exp;
diff --git a/Source/JavaScriptCore/Configurations/Version.xcconfig b/Source/JavaScriptCore/Configurations/Version.xcconfig
index 4b884e2..cee5010 100644
--- a/Source/JavaScriptCore/Configurations/Version.xcconfig
+++ b/Source/JavaScriptCore/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 16;
+MINOR_VERSION = 20;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/Source/JavaScriptCore/DerivedSources.make b/Source/JavaScriptCore/DerivedSources.make
index 748e254..0ff9cdf 100644
--- a/Source/JavaScriptCore/DerivedSources.make
+++ b/Source/JavaScriptCore/DerivedSources.make
@@ -27,7 +27,6 @@
VPATH = \
$(JavaScriptCore) \
$(JavaScriptCore)/parser \
- $(JavaScriptCore)/pcre \
$(JavaScriptCore)/docs \
$(JavaScriptCore)/runtime \
$(JavaScriptCore)/interpreter \
@@ -40,7 +39,6 @@ all : \
DatePrototype.lut.h \
HeaderDetection.h \
JSONObject.lut.h \
- JavaScriptCore.JSVALUE32.exp \
JavaScriptCore.JSVALUE32_64.exp \
JavaScriptCore.JSVALUE64.exp \
Lexer.lut.h \
@@ -50,7 +48,6 @@ all : \
RegExpJitTables.h \
RegExpObject.lut.h \
StringPrototype.lut.h \
- chartables.c \
docs/bytecode.html \
#
@@ -61,11 +58,6 @@ all : \
Lexer.lut.h: create_hash_table Keywords.table
$^ > $@
-# character tables for PCRE
-
-chartables.c : dftables
- $^ $@
-
docs/bytecode.html: make-bytecode-docs.pl Interpreter.cpp
perl $^ $@
@@ -76,16 +68,26 @@ RegExpJitTables.h: create_regex_tables
# export files
-JavaScriptCore.JSVALUE32.exp: JavaScriptCore.exp JavaScriptCore.JSVALUE32only.exp
- cat $^ > $@
-
JavaScriptCore.JSVALUE32_64.exp: JavaScriptCore.exp JavaScriptCore.JSVALUE32_64only.exp
cat $^ > $@
JavaScriptCore.JSVALUE64.exp: JavaScriptCore.exp JavaScriptCore.JSVALUE64only.exp
cat $^ > $@
+
# header detection
-HeaderDetection.h : DerivedSources.make
- if [ -f $(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/pthread_machdep.h ]; then echo "#define HAVE_PTHREAD_MACHDEP_H 1" > $@; else echo > $@; fi
+ifeq ($(OS),MACOS)
+
+HeaderDetection.h : DerivedSources.make /System/Library/CoreServices/SystemVersion.plist
+ rm -f $@
+ echo "/* This is a generated file. Do not edit. */" > $@
+ if [ -f $(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/pthread_machdep.h ]; then echo "#define HAVE_PTHREAD_MACHDEP_H 1" >> $@; else echo >> $@; fi
+ if [ -f $(SDKROOT)/System/Library/Frameworks/AppKit.framework/PrivateHeaders/NSScrollerImpPair_Private.h ]; then echo "#define USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER 1" >> $@; else echo >> $@; fi
+
+else
+
+HeaderDetection.h :
+ echo > $@
+
+endif
diff --git a/Source/JavaScriptCore/DerivedSources.pro b/Source/JavaScriptCore/DerivedSources.pro
index 4d724be..eac4dd9 100644
--- a/Source/JavaScriptCore/DerivedSources.pro
+++ b/Source/JavaScriptCore/DerivedSources.pro
@@ -83,15 +83,6 @@ msvcstubs.input = JIT_STUB_FILES
msvcstubs.CONFIG += no_link
addExtraCompiler(msvcstubs)
-# GENERATOR: "chartables.c": compile and execute the chartables generator (and add it to sources)
-win32-msvc*|wince*: PREPROCESSOR = "--preprocessor=\"$$QMAKE_CC /E\""
-ctgen.output = $$JSC_GENERATED_SOURCES_DIR/chartables.c
-ctgen.wkScript = $$PWD/pcre/dftables
-ctgen.input = ctgen.wkScript
-ctgen.commands = perl $$ctgen.wkScript ${QMAKE_FILE_OUT} $$PREPROCESSOR
-ctgen.clean = ${QMAKE_FILE_OUT} ${QMAKE_VAR_JSC_GENERATED_SOURCES_DIR}${QMAKE_FILE_BASE}
-addExtraCompiler(ctgen)
-
#GENERATOR: "RegExpJitTables.h": tables used by Yarr
retgen.output = $$JSC_GENERATED_SOURCES_DIR/RegExpJitTables.h
retgen.wkScript = $$PWD/create_regex_tables
diff --git a/Source/JavaScriptCore/GNUmakefile.am b/Source/JavaScriptCore/GNUmakefile.am
index 7272471..e6ccf2e 100644
--- a/Source/JavaScriptCore/GNUmakefile.am
+++ b/Source/JavaScriptCore/GNUmakefile.am
@@ -11,7 +11,6 @@ javascriptcore_cppflags += \
-I$(srcdir)/Source/JavaScriptCore/jit \
-I$(srcdir)/Source/JavaScriptCore/jit \
-I$(srcdir)/Source/JavaScriptCore/parser \
- -I$(srcdir)/Source/JavaScriptCore/pcre \
-I$(srcdir)/Source/JavaScriptCore/profiler \
-I$(srcdir)/Source/JavaScriptCore/runtime \
-I$(srcdir)/Source/JavaScriptCore/wtf \
@@ -23,7 +22,6 @@ javascriptcore_cppflags += \
-I$(srcdir)/Source/JavaScriptCore/yarr \
-I$(top_builddir)/Source/JavaScriptCore \
-I$(top_builddir)/Source/JavaScriptCore/parser \
- -I$(top_builddir)/Source/JavaScriptCore/pcre \
-I$(top_builddir)/Source/JavaScriptCore/runtime
javascriptcore_h_api += \
@@ -48,8 +46,7 @@ javascriptcore_built_nosources += \
Source/JavaScriptCore/runtime/NumberConstructor.lut.h \
Source/JavaScriptCore/runtime/RegExpConstructor.lut.h \
Source/JavaScriptCore/runtime/RegExpObject.lut.h \
- Source/JavaScriptCore/runtime/StringPrototype.lut.h \
- Source/JavaScriptCore/pcre/chartables.c
+ Source/JavaScriptCore/runtime/StringPrototype.lut.h
javascriptcore_sources += \
Source/JavaScriptCore/API/APICast.h \
@@ -202,15 +199,10 @@ javascriptcore_sources += \
Source/JavaScriptCore/parser/ResultType.h \
Source/JavaScriptCore/parser/SourceCode.h \
Source/JavaScriptCore/parser/SourceProvider.h \
+ Source/JavaScriptCore/parser/SourceProviderCache.cpp \
+ Source/JavaScriptCore/parser/SourceProviderCache.h \
+ Source/JavaScriptCore/parser/SourceProviderCacheItem.h \
Source/JavaScriptCore/parser/SyntaxChecker.h \
- Source/JavaScriptCore/pcre/pcre_compile.cpp \
- Source/JavaScriptCore/pcre/pcre_exec.cpp \
- Source/JavaScriptCore/pcre/pcre.h \
- Source/JavaScriptCore/pcre/pcre_internal.h \
- Source/JavaScriptCore/pcre/pcre_tables.cpp \
- Source/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp \
- Source/JavaScriptCore/pcre/pcre_xclass.cpp \
- Source/JavaScriptCore/pcre/ucpinternal.h \
Source/JavaScriptCore/profiler/CallIdentifier.h \
Source/JavaScriptCore/profiler/Profile.cpp \
Source/JavaScriptCore/profiler/ProfileGenerator.cpp \
@@ -239,11 +231,12 @@ javascriptcore_sources += \
Source/JavaScriptCore/runtime/CallData.cpp \
Source/JavaScriptCore/runtime/CallData.h \
Source/JavaScriptCore/runtime/ClassInfo.h \
+ Source/JavaScriptCore/runtime/MarkedBlock.cpp \
+ Source/JavaScriptCore/runtime/MarkedBlock.h \
Source/JavaScriptCore/runtime/MarkedSpace.cpp \
Source/JavaScriptCore/runtime/MarkedSpace.h \
Source/JavaScriptCore/runtime/Heap.cpp \
Source/JavaScriptCore/runtime/Heap.h \
- Source/JavaScriptCore/runtime/CollectorHeapIterator.h \
Source/JavaScriptCore/runtime/CommonIdentifiers.cpp \
Source/JavaScriptCore/runtime/CommonIdentifiers.h \
Source/JavaScriptCore/runtime/Completion.cpp \
@@ -343,6 +336,8 @@ javascriptcore_sources += \
Source/JavaScriptCore/runtime/Lookup.h \
Source/JavaScriptCore/runtime/MachineStackMarker.cpp \
Source/JavaScriptCore/runtime/MachineStackMarker.h \
+ Source/JavaScriptCore/runtime/ConservativeSet.cpp \
+ Source/JavaScriptCore/runtime/ConservativeSet.h \
Source/JavaScriptCore/runtime/MarkStack.cpp \
Source/JavaScriptCore/runtime/MarkStack.h \
Source/JavaScriptCore/runtime/MathObject.cpp \
@@ -423,6 +418,7 @@ javascriptcore_sources += \
Source/JavaScriptCore/runtime/WeakGCMap.h \
Source/JavaScriptCore/runtime/WeakGCPtr.h \
Source/JavaScriptCore/runtime/WeakRandom.h \
+ Source/JavaScriptCore/runtime/WriteBarrier.h \
Source/JavaScriptCore/wtf/AlwaysInline.h \
Source/JavaScriptCore/wtf/ASCIICType.h \
Source/JavaScriptCore/wtf/Assertions.cpp \
@@ -430,10 +426,13 @@ javascriptcore_sources += \
Source/JavaScriptCore/wtf/Atomics.h \
Source/JavaScriptCore/wtf/AVLTree.h \
Source/JavaScriptCore/wtf/Bitmap.h \
+ Source/JavaScriptCore/wtf/BloomFilter.h \
Source/JavaScriptCore/wtf/BumpPointerAllocator.h \
Source/JavaScriptCore/wtf/ByteArray.cpp \
Source/JavaScriptCore/wtf/ByteArray.h \
Source/JavaScriptCore/wtf/CrossThreadRefCounted.h \
+ Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp \
+ Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h \
Source/JavaScriptCore/wtf/CurrentTime.cpp \
Source/JavaScriptCore/wtf/CurrentTime.h \
Source/JavaScriptCore/wtf/DateMath.cpp \
@@ -482,9 +481,10 @@ javascriptcore_sources += \
Source/JavaScriptCore/wtf/NotFound.h \
Source/JavaScriptCore/wtf/NullPtr.h \
Source/JavaScriptCore/wtf/OSAllocator.h \
+ Source/JavaScriptCore/wtf/OSRandomSource.cpp \
+ Source/JavaScriptCore/wtf/OSRandomSource.h \
Source/JavaScriptCore/wtf/OwnArrayPtr.h \
Source/JavaScriptCore/wtf/OwnFastMallocPtr.h \
- Source/JavaScriptCore/wtf/OwnArrayPtrCommon.h \
Source/JavaScriptCore/wtf/OwnPtrCommon.h \
Source/JavaScriptCore/wtf/OwnPtr.h \
Source/JavaScriptCore/wtf/PageAllocation.h \
@@ -547,6 +547,7 @@ javascriptcore_sources += \
Source/JavaScriptCore/wtf/ThreadSpecific.h \
Source/JavaScriptCore/wtf/TypeTraits.cpp \
Source/JavaScriptCore/wtf/TypeTraits.h \
+ Source/JavaScriptCore/wtf/unicode/CharacterNames.h \
Source/JavaScriptCore/wtf/unicode/CollatorDefault.cpp \
Source/JavaScriptCore/wtf/unicode/Collator.h \
Source/JavaScriptCore/wtf/unicode/Unicode.h \
@@ -609,9 +610,6 @@ Source/JavaScriptCore/%.lut.h: $(srcdir)/Source/JavaScriptCore/create_hash_table
Source/JavaScriptCore/RegExpJitTables.h: $(srcdir)/Source/JavaScriptCore/create_regex_tables
$(AM_V_GEN)$(PYTHON) $^ > $@
-Source/JavaScriptCore/pcre/chartables.c: $(srcdir)/Source/JavaScriptCore/pcre/dftables
- $(AM_V_GEN)$(PERL) $^ $@
-
jsc: $(javascriptcore_built_nosources) Programs/jsc-@WEBKITGTK_API_MAJOR_VERSION@$(EXEEXT);
bin_PROGRAMS += \
@@ -686,10 +684,6 @@ EXTRA_DIST += \
Source/JavaScriptCore/icu/LICENSE \
Source/JavaScriptCore/icu/README \
Source/JavaScriptCore/parser/Keywords.table \
- Source/JavaScriptCore/pcre/AUTHORS \
- Source/JavaScriptCore/pcre/COPYING \
- Source/JavaScriptCore/pcre/dftables \
- Source/JavaScriptCore/pcre/ucptable.cpp \
Source/JavaScriptCore/THANKS
# Clean rules for JavaScriptCore
@@ -702,7 +696,6 @@ CLEANFILES += \
Source/JavaScriptCore/runtime/RegExpConstructor.lut.h \
Source/JavaScriptCore/runtime/RegExpObject.lut.h \
Source/JavaScriptCore/runtime/StringPrototype.lut.h \
- Source/JavaScriptCore/pcre/chartables.c \
Programs/jsc \
Programs/jsc-@WEBKITGTK_API_MAJOR_VERSION@ \
Programs/minidom
diff --git a/Source/JavaScriptCore/JavaScriptCore.JSVALUE32only.exp b/Source/JavaScriptCore/JavaScriptCore.JSVALUE32only.exp
deleted file mode 100644
index 73efb9d..0000000
--- a/Source/JavaScriptCore/JavaScriptCore.JSVALUE32only.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-__ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFPvS2_E
-__ZN3JSC17PrototypeFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFPvS2_E
diff --git a/Source/JavaScriptCore/JavaScriptCore.exp b/Source/JavaScriptCore/JavaScriptCore.exp
index 2e999ef..564d7db 100644
--- a/Source/JavaScriptCore/JavaScriptCore.exp
+++ b/Source/JavaScriptCore/JavaScriptCore.exp
@@ -93,11 +93,9 @@ _WTFLogVerbose
_WTFReportArgumentAssertionFailure
_WTFReportAssertionFailure
_WTFReportAssertionFailureWithMessage
+_WTFReportBacktrace
_WTFReportError
_WTFReportFatalError
-__Z12jsRegExpFreeP8JSRegExp
-__Z15jsRegExpCompilePKti24JSRegExpIgnoreCaseOption23JSRegExpMultilineOptionPjPPKc
-__Z15jsRegExpExecutePK8JSRegExpPKtiiPii
__ZN14OpaqueJSString6createERKN3JSC7UStringE
__ZN3JSC10Identifier11addSlowCaseEPNS_12JSGlobalDataEPN3WTF10StringImplE
__ZN3JSC10Identifier11addSlowCaseEPNS_9ExecStateEPN3WTF10StringImplE
@@ -166,7 +164,6 @@ __ZN3JSC14SamplingThread4stopEv
__ZN3JSC14SamplingThread5startEj
__ZN3JSC14TimeoutChecker10didTimeOutEPNS_9ExecStateE
__ZN3JSC14TimeoutChecker5resetEv
-__ZN3JSC14heapStatisticsEPNS_12JSGlobalDataE
__ZN3JSC14throwTypeErrorEPNS_9ExecStateE
__ZN3JSC15JSWrapperObject12markChildrenERNS_9MarkStackE
__ZN3JSC15createTypeErrorEPNS_9ExecStateERKNS_7UStringE
@@ -183,7 +180,7 @@ __ZN3JSC17BytecodeGenerator21setDumpsGeneratedCodeEb
__ZN3JSC17PropertyNameArray3addEPN3WTF10StringImplE
__ZN3JSC17constructFunctionEPNS_9ExecStateERKNS_7ArgListERKNS_10IdentifierERKNS_7UStringEi
__ZN3JSC17createSyntaxErrorEPNS_9ExecStateERKNS_7UStringE
-__ZN3JSC18DebuggerActivationC1EPNS_8JSObjectE
+__ZN3JSC18DebuggerActivationC1ERNS_12JSGlobalDataEPNS_8JSObjectE
__ZN3JSC18PropertyDescriptor11setWritableEb
__ZN3JSC18PropertyDescriptor12setUndefinedEv
__ZN3JSC18PropertyDescriptor13setDescriptorENS_7JSValueEj
@@ -193,6 +190,8 @@ __ZN3JSC18PropertyDescriptor17defaultAttributesE
__ZN3JSC18PropertyDescriptor21setAccessorDescriptorENS_7JSValueES1_j
__ZN3JSC18PropertyDescriptor9setGetterENS_7JSValueE
__ZN3JSC18PropertyDescriptor9setSetterENS_7JSValueE
+__ZN3JSC19SourceProviderCache5clearEv
+__ZN3JSC19SourceProviderCacheD1Ev
__ZN3JSC19initializeThreadingEv
__ZN3JSC20MarkedArgumentBuffer10slowAppendENS_7JSValueE
__ZN3JSC20createReferenceErrorEPNS_9ExecStateERKNS_7UStringE
@@ -207,23 +206,24 @@ __ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
__ZN3JSC25evaluateInGlobalCallFrameERKNS_7UStringERNS_7JSValueEPNS_14JSGlobalObjectE
__ZN3JSC35createInterruptedExecutionExceptionEPNS_12JSGlobalDataE
__ZN3JSC3NaNE
-__ZN3JSC4Heap14primaryHeapEndEv
__ZN3JSC4Heap15addWeakGCHandleEPNS_6JSCellE
-__ZN3JSC4Heap15recordExtraCostEm
__ZN3JSC4Heap16objectTypeCountsEv
-__ZN3JSC4Heap16primaryHeapBeginEv
__ZN3JSC4Heap17collectAllGarbageEv
__ZN3JSC4Heap17globalObjectCountEv
__ZN3JSC4Heap19setActivityCallbackEN3WTF10PassOwnPtrINS_18GCActivityCallbackEEE
__ZN3JSC4Heap20protectedObjectCountEv
__ZN3JSC4Heap25protectedObjectTypeCountsEv
__ZN3JSC4Heap26protectedGlobalObjectCountEv
+__ZN3JSC4Heap29reportExtraMemoryCostSlowCaseEm
__ZN3JSC4Heap6isBusyEv
__ZN3JSC4Heap7destroyEv
__ZN3JSC4Heap7protectENS_7JSValueE
__ZN3JSC4Heap8allocateEm
__ZN3JSC4Heap9unprotectENS_7JSValueE
__ZN3JSC4callEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataES2_RKNS_7ArgListE
+__ZN3JSC4Yarr11YarrPatternC1ERKNS_7UStringEbbPPKc
+__ZN3JSC4Yarr11byteCompileERNS0_11YarrPatternEPN3WTF20BumpPointerAllocatorE
+__ZN3JSC4Yarr9interpretEPNS0_15BytecodePatternEPKtjjPi
__ZN3JSC6JSCell11getCallDataERNS_8CallDataE
__ZN3JSC6JSCell11getJSNumberEv
__ZN3JSC6JSCell14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
@@ -250,7 +250,7 @@ __ZN3JSC7JSArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
__ZN3JSC7JSArray4infoE
__ZN3JSC7JSArray9setLengthEj
__ZN3JSC7JSArrayC1EN3WTF17NonNullPassRefPtrINS_9StructureEEE
-__ZN3JSC7JSArrayC1EN3WTF17NonNullPassRefPtrINS_9StructureEEERKNS_7ArgListE
+__ZN3JSC7JSArrayC1ERNS_12JSGlobalDataEN3WTF17NonNullPassRefPtrINS_9StructureEEERKNS_7ArgListE
__ZN3JSC7JSArrayC2EN3WTF17NonNullPassRefPtrINS_9StructureEEE
__ZN3JSC7JSArrayD2Ev
__ZN3JSC7JSValue13isValidCalleeEv
@@ -295,7 +295,7 @@ __ZN3JSC8JSObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
__ZN3JSC8JSObject18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE
__ZN3JSC8JSObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE
__ZN3JSC8JSObject21getPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
-__ZN3JSC8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPNS_7JSValueE
+__ZN3JSC8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPNS_16WriteBarrierBaseINS_7UnknownEEE
__ZN3JSC8JSObject23allocatePropertyStorageEmm
__ZN3JSC8JSObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
__ZN3JSC8JSObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE
@@ -431,6 +431,7 @@ __ZN3WTF23dayInMonthFromDayInYearEib
__ZN3WTF23waitForThreadCompletionEjPPv
__ZN3WTF27releaseFastMallocFreeMemoryEv
__ZN3WTF28setMainThreadCallbacksPausedEb
+__ZN3WTF29cryptographicallyRandomValuesEPvm
__ZN3WTF36lockAtomicallyInitializedStaticMutexEv
__ZN3WTF37parseDateFromNullTerminatedCharactersEPKc
__ZN3WTF38unlockAtomicallyInitializedStaticMutexEv
@@ -516,10 +517,11 @@ __ZNK3JSC18PropertyDescriptor20isAccessorDescriptorEv
__ZNK3JSC18PropertyDescriptor6getterEv
__ZNK3JSC18PropertyDescriptor6setterEv
__ZNK3JSC18PropertyDescriptor8writableEv
+__ZNK3JSC19SourceProviderCache8byteSizeEv
__ZNK3JSC24JSObjectWithGlobalObject12globalObjectEv
-__ZNK3JSC4Heap10statisticsEv
__ZNK3JSC4Heap11objectCountEv
__ZNK3JSC4Heap4sizeEv
+__ZNK3JSC4Heap8capacityEv
__ZNK3JSC6JSCell11toPrimitiveEPNS_9ExecStateENS_22PreferredPrimitiveTypeE
__ZNK3JSC6JSCell12toThisObjectEPNS_9ExecStateE
__ZNK3JSC6JSCell14isGetterSetterEv
diff --git a/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp b/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
index 56304fa..08e590b 100644
--- a/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
+++ b/Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp
@@ -170,7 +170,7 @@
],
},
{
- 'target_name': 'pcre',
+ 'target_name': 'yarr',
'type': '<(library)',
'dependencies': [
'wtf',
@@ -183,18 +183,19 @@
'msvs_guid': '49909552-0B0C-4C14-8CF6-DB8A2ADE0934',
'actions': [
{
- 'action_name': 'dftables',
+ 'action_name': 'retgen',
'inputs': [
- '../pcre/dftables',
+ '../create_regex_tables',
],
'outputs': [
- '<(INTERMEDIATE_DIR)/chartables.c',
+ '<(INTERMEDIATE_DIR)/RegExpJitTables.h',
],
- 'action': ['perl', '-w', '<@(_inputs)', '<@(_outputs)'],
+ 'action': ['python', '<@(_inputs)', '<@(_outputs)'],
},
],
'include_dirs': [
'<(INTERMEDIATE_DIR)',
+ '../runtime',
],
'sources': [
'<@(javascriptcore_files)',
@@ -203,10 +204,9 @@
# First exclude everything ...
['exclude', '../'],
# ... Then include what we want.
- ['include', '../pcre/'],
- # ucptable.cpp is #included by pcre_ucp_searchfunchs.cpp and is not
- # intended to be compiled directly.
- ['exclude', '../pcre/ucptable.cpp$'],
+ ['include', '../yarr/'],
+ # The Yarr JIT isn't used in WebCore.
+ ['exclude', '../yarr/YarrJIT\\.(h|cpp)$'],
],
'export_dependent_settings': [
'wtf',
diff --git a/Source/JavaScriptCore/JavaScriptCore.gypi b/Source/JavaScriptCore/JavaScriptCore.gypi
index 6ca18a0..754fd2b 100644
--- a/Source/JavaScriptCore/JavaScriptCore.gypi
+++ b/Source/JavaScriptCore/JavaScriptCore.gypi
@@ -144,16 +144,10 @@
'parser/ResultType.h',
'parser/SourceCode.h',
'parser/SourceProvider.h',
+ 'parser/SourceProviderCache.cpp',
+ 'parser/SourceProviderCache.h',
+ 'parser/SourceProviderCacheItem.h',
'parser/SyntaxChecker.h',
- 'pcre/pcre.h',
- 'pcre/pcre_compile.cpp',
- 'pcre/pcre_exec.cpp',
- 'pcre/pcre_internal.h',
- 'pcre/pcre_tables.cpp',
- 'pcre/pcre_ucp_searchfuncs.cpp',
- 'pcre/pcre_xclass.cpp',
- 'pcre/ucpinternal.h',
- 'pcre/ucptable.cpp',
'profiler/CallIdentifier.h',
'profiler/Profile.cpp',
'profiler/Profile.h',
@@ -182,11 +176,12 @@
'runtime/CallData.cpp',
'runtime/CallData.h',
'runtime/ClassInfo.h',
+ 'runtime/MarkedBlock.cpp',
+ 'runtime/MarkedBlock.h',
'runtime/MarkedSpace.cpp',
'runtime/MarkedSpace.h',
'runtime/Heap.cpp',
'runtime/Heap.h',
- 'runtime/CollectorHeapIterator.h',
'runtime/CommonIdentifiers.cpp',
'runtime/CommonIdentifiers.h',
'runtime/Completion.cpp',
@@ -280,6 +275,8 @@
'runtime/Lookup.h',
'runtime/MachineStackMarker.cpp',
'runtime/MachineStackMarker.h',
+ 'runtime/ConservativeSet.cpp',
+ 'runtime/ConservativeSet.h',
'runtime/MarkStack.cpp',
'runtime/MarkStack.h',
'runtime/MarkStackWin.cpp',
@@ -361,11 +358,14 @@
'wtf/Atomics.h',
'wtf/AVLTree.h',
'wtf/Bitmap.h',
+ 'wtf/BloomFilter.h',
'wtf/ByteArray.cpp',
'wtf/ByteArray.h',
'wtf/chromium/ChromiumThreading.h',
'wtf/chromium/MainThreadChromium.cpp',
'wtf/CrossThreadRefCounted.h',
+ 'wtf/CryptographicallyRandomNumber.cpp',
+ 'wtf/CryptographicallyRandomNumber.h',
'wtf/CurrentTime.cpp',
'wtf/CurrentTime.h',
'wtf/DateMath.cpp',
@@ -408,6 +408,8 @@
'wtf/OSAllocatorPosix.cpp',
'wtf/OSAllocatorWin.cpp',
'wtf/OSAllocator.h',
+ 'wtf/OSRandomSource.cpp',
+ 'wtf/OSRandomSource.h',
'wtf/OwnArrayPtr.h',
'wtf/OwnFastMallocPtr.h',
'wtf/OwnPtr.h',
@@ -477,6 +479,7 @@
'wtf/text/TextPosition.h',
'wtf/text/WTFString.cpp',
'wtf/text/WTFString.h',
+ 'wtf/unicode/CharacterNames.h',
'wtf/unicode/Collator.h',
'wtf/unicode/CollatorDefault.cpp',
'wtf/unicode/glib/UnicodeGLib.cpp',
@@ -498,7 +501,7 @@
'wtf/win/MainThreadWin.cpp',
'wtf/win/OwnPtrWin.cpp',
'wtf/wx/MainThreadWx.cpp',
- 'yarr/Yarr.h'
+ 'yarr/Yarr.h',
'yarr/YarrInterpreter.cpp',
'yarr/YarrInterpreter.h',
'yarr/YarrJIT.cpp',
@@ -511,3 +514,4 @@
]
}
}
+
diff --git a/Source/JavaScriptCore/JavaScriptCore.order b/Source/JavaScriptCore/JavaScriptCore.order
index 3cb3d1d..9e4004f 100644
--- a/Source/JavaScriptCore/JavaScriptCore.order
+++ b/Source/JavaScriptCore/JavaScriptCore.order
@@ -185,11 +185,9 @@ __ZN3WTF31clearPthreadHandleForIdentifierEj
__ZN3WTF12detachThreadEj
__ZN3WTFL26pthreadHandleForIdentifierEj
__ZN7WebCore6StringC1EPKtj
-__Z15jsRegExpCompilePKti24JSRegExpIgnoreCaseOption23JSRegExpMultilineOptionPjPPKc
__ZL30calculateCompiledPatternLengthPKti24JSRegExpIgnoreCaseOptionR11CompileDataR9ErrorCode
__ZL11checkEscapePPKtS0_P9ErrorCodeib
__ZL13compileBranchiPiPPhPPKtS3_P9ErrorCodeS_S_R11CompileData
-__Z15jsRegExpExecutePK8JSRegExpPKtiiPii
__ZL5matchPKtPKhiR9MatchData
__ZN7WebCore6String6formatEPKcz
__ZNK7WebCore6String19characterStartingAtEj
@@ -1534,7 +1532,6 @@ __ZN3WTF6VectorItLm0EE6appendItEEvPKT_m
_cti_op_to_primitive
__ZN3JSC15constructNumberEPNS_9ExecStateENS_7JSValueE
__ZNK3JSC12NumberObject9classInfoEv
-__Z12jsRegExpFreeP8JSRegExp
__ZN3JSC13BooleanObjectD1Ev
__ZN3JSCL18stringFromCharCodeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
__ZN3JSC10makeStringIPKcNS_7UStringES2_EES3_T_T0_T1_
@@ -1545,7 +1542,6 @@ __ZN3JSC8JSObject18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE
__ZN3JSCL24dateProtoFuncGetFullYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
__ZN3JSC12RegExpObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE
__ZN3JSCL24setRegExpObjectLastIndexEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueE
-__Z15jsc_pcre_xclassiPKh
__ZN3JSCL28regExpConstructorLeftContextEPNS_9ExecStateENS_7JSValueERKNS_10IdentifierE
__ZNK3JSC17RegExpConstructor14getLeftContextEPNS_9ExecStateE
_cti_to_object
@@ -1790,7 +1786,6 @@ __ZN3JSCL28dateProtoFuncGetMilliSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValue
__ZN3JSC10makeStringINS_7UStringES1_EES1_T_T0_
__ZN3JSC13tryMakeStringINS_7UStringES1_EEN3WTF10PassRefPtrIN7WebCore10StringImplEEET_T0_
__ZN3JSC23MacroAssemblerX86Common8branch16ENS0_9ConditionENS_22AbstractMacroAssemblerINS_12X86AssemblerEE9BaseIndexENS4_5Imm32E
-__Z22jsc_pcre_ucp_othercasej
__ZN3JSC8JSString18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
__ZN3JSCL24dateProtoFuncSetUTCHoursEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
__ZN3JSCL26dateProtoFuncSetUTCMinutesEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
diff --git a/Source/JavaScriptCore/JavaScriptCore.pri b/Source/JavaScriptCore/JavaScriptCore.pri
index a816c97..c1de599 100644
--- a/Source/JavaScriptCore/JavaScriptCore.pri
+++ b/Source/JavaScriptCore/JavaScriptCore.pri
@@ -1,6 +1,6 @@
# JavaScriptCore - Qt4 build info
-include(../../common.pri)
+include(../common.pri)
VPATH += $$PWD
@@ -23,6 +23,7 @@ CONFIG(standalone_package): DEFINES *= NDEBUG
JAVASCRIPTCORE_INCLUDEPATH = \
$$PWD \
$$PWD/.. \
+ $$PWD/../ThirdParty \
$$PWD/assembler \
$$PWD/bytecode \
$$PWD/bytecompiler \
@@ -30,7 +31,6 @@ JAVASCRIPTCORE_INCLUDEPATH = \
$$PWD/interpreter \
$$PWD/jit \
$$PWD/parser \
- $$PWD/pcre \
$$PWD/profiler \
$$PWD/runtime \
$$PWD/wtf \
@@ -90,7 +90,8 @@ defineTest(addJavaScriptCoreLib) {
QMAKE_LIBDIR = $$pathToJavaScriptCoreOutput $$QMAKE_LIBDIR
webkit2 {
# FIXME Workaround for undefined reference linking issues until the build system gets redesigned
- LIBS += -Wl,-whole-archive -l$$JAVASCRIPTCORE_TARGET -Wl,-no-whole-archive
+ mac: LIBS += -Wl,-all_load -l$$JAVASCRIPTCORE_TARGET -WL,-noall_load
+ else: LIBS += -Wl,-whole-archive -l$$JAVASCRIPTCORE_TARGET -Wl,-no-whole-archive
} else {
LIBS += -l$$JAVASCRIPTCORE_TARGET
}
@@ -113,3 +114,4 @@ defineTest(addJavaScriptCoreLib) {
return(true)
}
+
diff --git a/Source/JavaScriptCore/JavaScriptCore.pro b/Source/JavaScriptCore/JavaScriptCore.pro
index 9d254b7..1b5e28a 100644
--- a/Source/JavaScriptCore/JavaScriptCore.pro
+++ b/Source/JavaScriptCore/JavaScriptCore.pro
@@ -1,6 +1,6 @@
# JavaScriptCore - qmake build info
CONFIG += building-libs
-include($$PWD/../../WebKit.pri)
+include($$PWD/../WebKit.pri)
include(JavaScriptCore.pri)
TEMPLATE = lib
@@ -65,7 +65,7 @@ wince* {
SOURCES += $$QT_SOURCE_TREE/src/3rdparty/ce-compat/ce_time.c
}
-include(pcre/pcre.pri)
+include(yarr/yarr.pri)
include(wtf/wtf.pri)
INSTALLDEPS += all
@@ -115,6 +115,7 @@ SOURCES += \
parser/Nodes.cpp \
parser/ParserArena.cpp \
parser/Parser.cpp \
+ parser/SourceProviderCache.cpp \
profiler/Profile.cpp \
profiler/ProfileGenerator.cpp \
profiler/ProfileNode.cpp \
@@ -127,6 +128,7 @@ SOURCES += \
runtime/BooleanObject.cpp \
runtime/BooleanPrototype.cpp \
runtime/CallData.cpp \
+ runtime/MarkedBlock.cpp \
runtime/MarkedSpace.cpp \
runtime/Heap.cpp \
runtime/CommonIdentifiers.cpp \
@@ -179,6 +181,7 @@ SOURCES += \
runtime/MarkStackPosix.cpp \
runtime/MarkStackSymbian.cpp \
runtime/MarkStackWin.cpp \
+ runtime/ConservativeSet.cpp \
runtime/MarkStack.cpp \
runtime/MathObject.cpp \
runtime/NativeErrorConstructor.cpp \
@@ -210,10 +213,7 @@ SOURCES += \
runtime/Structure.cpp \
runtime/TimeoutChecker.cpp \
runtime/UString.cpp \
- yarr/YarrPattern.cpp \
- yarr/YarrInterpreter.cpp \
yarr/YarrJIT.cpp \
- yarr/YarrSyntaxChecker.cpp
# Generated files, simply list them for JavaScriptCore
@@ -226,5 +226,7 @@ symbian: {
}
QMAKE_CXXFLAGS.ARMCC += -OTime -O3
}
+
# Disable C++0x mode in JSC for those who enabled it in their Qt's mkspec
*-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
+
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
index 1f83397..68075f9 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore.make
@@ -1,7 +1,7 @@
-!IF !defined(BUILDSTYLE)
-BUILDSTYLE=Release
-!ELSEIF "$(BUILDSTYLE)"=="DEBUG"
+!IF defined(BUILDSTYLE) && "$(BUILDSTYLE)"=="DEBUG"
BUILDSTYLE=Debug_All
+!ELSE
+BUILDSTYLE=Release_PGO
!ENDIF
install:
@@ -9,30 +9,29 @@ install:
set WebKitLibrariesDir=$(SRCROOT)\AppleInternal
set WebKitOutputDir=$(OBJROOT)
set ConfigurationBuildDir=$(OBJROOT)\$(BUILDSTYLE)
- set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
-!IF "$(BUILDSTYLE)"=="Release"
- BUILDSTYLE=Release_PGO
+ set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\4\
+!IF "$(BUILDSTYLE)"=="Release_PGO"
devenv "JavaScriptCoreSubmit.sln" /rebuild $(BUILDSTYLE)
set PATH=$(SYSTEMDRIVE)\cygwin\bin;$(PATH)
- xcopy "$(SRCROOT)\AppleInternal\tests\SunSpider\*" "$(ConfigurationBuildDir)\tests\SunSpider" /e/v/i/h/y
- cd "$(ConfigurationBuildDir)\tests\SunSpider"
+ xcopy "$(SRCROOT)\AppleInternal\tests\SunSpider\*" "%ConfigurationBuildDir%\tests\SunSpider" /e/v/i/h/y
+ cd "%ConfigurationBuildDir%\tests\SunSpider"
perl sunspider --shell ../../bin/jsc.exe --runs 3
- del "$(ConfigurationBuildDir)\bin\JavaScriptCore.dll"
+ del "%ConfigurationBuildDir%\bin\JavaScriptCore.dll"
cd "$(SRCROOT)\JavaScriptCore.vcproj"
devenv "JavaScriptCoreSubmit.sln" /build Release_PGO_Optimize
!ELSE
devenv "JavaScriptCoreSubmit.sln" /rebuild $(BUILDSTYLE)
!ENDIF
- -xcopy "$(ConfigurationBuildDir)\bin\JavaScriptCore.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\JavaScriptCore_debug.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\JavaScriptCore.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\JavaScriptCore_debug.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\jsc.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\jsc_debug.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\jsc.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\jsc_debug.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\JavaScriptCore.resources\*" "$(DSTROOT)\AppleInternal\bin\JavaScriptCore.resources" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\JavaScriptCore.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\JavaScriptCore_debug.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\JavaScriptCore.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\JavaScriptCore_debug.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\jsc.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\jsc_debug.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\jsc.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\jsc_debug.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\JavaScriptCore.resources\*" "$(DSTROOT)\AppleInternal\bin\JavaScriptCore.resources" /e/v/i/h/y
-mkdir "$(DSTROOT)\AppleInternal\Sources\JavaScriptCore"
- xcopy "$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\JavaScriptCore" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\obj\JavaScriptCore\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\JavaScriptCore" /e/v/i/h/y
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
index 4ddad24..010db39 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
@@ -9,8 +9,8 @@ EXPORTS
??0DropAllLocks@JSLock@JSC@@QAE@W4JSLockBehavior@2@@Z
??0DynamicGlobalObjectScope@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@@Z
??0InternalFunction@JSC@@IAE@PAVJSGlobalData@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVIdentifier@1@@Z
+ ??0JSArray@JSC@@QAE@AAVJSGlobalData@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVArgList@1@@Z
??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@@Z
- ??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVArgList@1@@Z
??0JSByteArray@JSC@@QAE@PAVExecState@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@PAVByteArray@4@PBUClassInfo@1@@Z
??0JSFunction@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@HABVIdentifier@1@P6I_J0@Z@Z
??0JSObjectWithGlobalObject@JSC@@IAE@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@@Z
@@ -26,6 +26,7 @@ EXPORTS
??0UString@JSC@@QAE@PBDI@Z
??0UString@JSC@@QAE@PB_WI@Z
??0WTFThreadData@WTF@@QAE@XZ
+ ??0YarrPattern@Yarr@JSC@@QAE@ABVUString@2@_N1PAPBD@Z
??1ClientData@JSGlobalData@JSC@@UAE@XZ
??1Collator@WTF@@QAE@XZ
??1Debugger@JSC@@UAE@XZ
@@ -35,6 +36,7 @@ EXPORTS
??1Mutex@WTF@@QAE@XZ
??1RefCountedLeakCounter@WTF@@QAE@XZ
??1RegExp@JSC@@QAE@XZ
+ ??1SourceProviderCache@JSC@@QAE@XZ
??1Structure@JSC@@QAE@XZ
??1ThreadCondition@WTF@@QAE@XZ
??1WTFThreadData@WTF@@QAE@XZ
@@ -42,6 +44,7 @@ EXPORTS
??8JSC@@YA_NABVUString@0@0@Z
??8WTF@@YA_NABVCString@0@0@Z
?NaN@JSC@@3NB
+ ?absoluteTimeToWaitTimeoutInterval@WTF@@YAKN@Z
?add@Identifier@JSC@@SA?AV?$PassRefPtr@VStringImpl@WTF@@@WTF@@PAVExecState@2@PBD@Z
?add@PropertyNameArray@JSC@@QAEXPAVStringImpl@WTF@@@Z
?addBytes@MD5@WTF@@QAEXPBEI@Z
@@ -59,7 +62,10 @@ EXPORTS
?attach@Debugger@JSC@@QAEXPAVJSGlobalObject@2@@Z
?broadcast@ThreadCondition@WTF@@QAEXXZ
?bufferLengthForStringDecimal@DecimalNumber@WTF@@QBEIXZ
+ ?byteCompile@Yarr@JSC@@YA?AV?$PassOwnPtr@UBytecodePattern@Yarr@JSC@@@WTF@@AAUYarrPattern@12@PAVBumpPointerAllocator@4@@Z
+ ?byteSize@SourceProviderCache@JSC@@QBEIXZ
?calculateDSTOffset@WTF@@YANNN@Z
+ ?calculateStringHashAndLengthFromUTF8@Unicode@WTF@@YAIPBDAAI1@Z
?calculateStringHashFromUTF8@Unicode@WTF@@YAIPBD0AAI@Z
?calculateUTCOffset@WTF@@YAHXZ
?calculatedFunctionName@DebuggerCallFrame@JSC@@QBE?AVUString@2@XZ
@@ -67,6 +73,7 @@ EXPORTS
?callOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
?callOnMainThreadAndWait@WTF@@YAXP6AXPAX@Z0@Z
?cancelCallOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
+ ?capacity@Heap@JSC@@QBEIXZ
?changePrototypeTransition@Structure@JSC@@SA?AV?$PassRefPtr@VStructure@JSC@@@WTF@@PAV12@VJSValue@2@@Z
?checkCurrentIdentifierTable@Identifier@JSC@@CAXPAVExecState@2@@Z
?checkCurrentIdentifierTable@Identifier@JSC@@CAXPAVJSGlobalData@2@@Z
@@ -75,6 +82,7 @@ EXPORTS
?classInfo@InternalFunction@JSC@@UBEPBUClassInfo@2@XZ
?classInfo@JSCell@JSC@@UBEPBUClassInfo@2@XZ
?className@JSObject@JSC@@UBE?AVUString@2@XZ
+ ?clear@SourceProviderCache@JSC@@QAEXXZ
?collate@Collator@WTF@@QBE?AW4Result@12@PB_WI0I@Z
?collectAllGarbage@Heap@JSC@@QAEXXZ
?configurable@PropertyDescriptor@JSC@@QBE_NXZ
@@ -94,6 +102,7 @@ EXPORTS
?createInheritorID@JSObject@JSC@@AAEPAVStructure@2@XZ
?createInterruptedExecutionException@JSC@@YAPAVJSObject@1@PAVJSGlobalData@1@@Z
?createLeaked@JSGlobalData@JSC@@SA?AV?$PassRefPtr@VJSGlobalData@JSC@@@WTF@@W4ThreadStackType@2@@Z
+ ?createRangeError@JSC@@YAPAVJSObject@1@PAVExecState@1@ABVUString@1@@Z
?createReferenceError@JSC@@YAPAVJSObject@1@PAVExecState@1@ABVUString@1@@Z
?createSingleCharacterString@SmallStrings@JSC@@AAEXPAVJSGlobalData@2@E@Z
?createStackOverflowError@JSC@@YAPAVJSObject@1@PAVExecState@1@@Z
@@ -103,6 +112,7 @@ EXPORTS
?createThread@WTF@@YAIP6APAXPAX@Z0@Z
?createThread@WTF@@YAIP6APAXPAX@Z0PBD@Z
?createTypeError@JSC@@YAPAVJSObject@1@PAVExecState@1@ABVUString@1@@Z
+ ?cryptographicallyRandomValues@WTF@@YAXPAXI@Z
?currentThread@WTF@@YAIXZ
?currentTime@WTF@@YANXZ
?data@CString@WTF@@QBEPBDXZ
@@ -152,7 +162,7 @@ EXPORTS
?fastRealloc@WTF@@YAPAXPAXI@Z
?fastStrDup@WTF@@YAPADPBD@Z
?fastZeroedMalloc@WTF@@YAPAXI@Z
- ?fillGetterPropertySlot@JSObject@JSC@@QAEXAAVPropertySlot@2@PAVJSValue@2@@Z
+ ?fillGetterPropertySlot@JSObject@JSC@@QAEXAAVPropertySlot@2@PAV?$WriteBarrierBase@W4Unknown@JSC@@@2@@Z
?focus@Profile@JSC@@QAEXPBVProfileNode@2@@Z
?free@WeakGCHandlePool@JSC@@QAEXPAVWeakGCHandle@2@@Z
?from@Identifier@JSC@@SA?AV12@PAVExecState@2@H@Z
@@ -202,6 +212,7 @@ EXPORTS
?initializeMainThread@WTF@@YAXXZ
?initializeThreading@JSC@@YAXXZ
?initializeThreading@WTF@@YAXXZ
+ ?interpret@Yarr@JSC@@YAHPAUBytecodePattern@12@PB_WIIPAH@Z
?isAccessorDescriptor@PropertyDescriptor@JSC@@QBE_NXZ
?isBusy@Heap@JSC@@QAE_NXZ
?isDataDescriptor@PropertyDescriptor@JSC@@QBE_NXZ
@@ -213,9 +224,6 @@ EXPORTS
?isVariableObject@JSVariableObject@JSC@@UBE_NXZ
?jsNumberCell@JSC@@YA?AVJSValue@1@PAVExecState@1@N@Z
?jsOwnedString@JSC@@YAPAVJSString@1@PAVJSGlobalData@1@ABVUString@1@@Z
- ?jsRegExpCompile@@YAPAUJSRegExp@@PB_WHW4JSRegExpIgnoreCaseOption@@W4JSRegExpMultilineOption@@PAIPAPBD@Z
- ?jsRegExpExecute@@YAHPBUJSRegExp@@PB_WHHPAHH@Z
- ?jsRegExpFree@@YAXPAUJSRegExp@@@Z
?jsString@JSC@@YAPAVJSString@1@PAVJSGlobalData@1@ABVUString@1@@Z
?length@CString@WTF@@QBEIXZ
?lock@JSLock@JSC@@SAXW4JSLockBehavior@2@@Z
@@ -246,7 +254,7 @@ EXPORTS
?protect@Heap@JSC@@QAEXVJSValue@2@@Z
?protectedGlobalObjectCount@Heap@JSC@@QAEIXZ
?protectedObjectCount@Heap@JSC@@QAEIXZ
- ?protectedObjectTypeCounts@Heap@JSC@@QAEPAV?$HashCountedSet@PBDU?$PtrHash@PBD@WTF@@U?$HashTraits@PBD@2@@WTF@@XZ
+ ?protectedObjectTypeCounts@Heap@JSC@@QAE?AV?$PassOwnPtr@V?$HashCountedSet@PBDU?$PtrHash@PBD@WTF@@U?$HashTraits@PBD@2@@WTF@@@WTF@@XZ
?put@JSCell@JSC@@UAEXPAVExecState@2@ABVIdentifier@2@VJSValue@2@AAVPutPropertySlot@2@@Z
?put@JSCell@JSC@@UAEXPAVExecState@2@IVJSValue@2@@Z
?put@JSGlobalObject@JSC@@UAEXPAVExecState@2@ABVIdentifier@2@VJSValue@2@AAVPutPropertySlot@2@@Z
@@ -264,10 +272,10 @@ EXPORTS
?putWithAttributes@JSObject@JSC@@UAEXPAVJSGlobalData@2@IVJSValue@2@I@Z
?randomNumber@WTF@@YANXZ
?recompileAllJSFunctions@Debugger@JSC@@QAEXPAVJSGlobalData@2@@Z
- ?recordExtraCost@Heap@JSC@@AAEXI@Z
?reifyString@StringBuilder@WTF@@AAEXXZ
?releaseDecommitted@OSAllocator@WTF@@SAXPAXI@Z
?releaseStack@MarkStack@JSC@@CAXPAXI@Z
+ ?reportExtraMemoryCostSlowCase@Heap@JSC@@AAEXI@Z
?reserveAndCommit@OSAllocator@WTF@@SAPAXIW4Usage@12@_N1@Z
?reset@ParserArena@JSC@@QAEXXZ
?reset@TimeoutChecker@JSC@@QAEXXZ
@@ -358,4 +366,5 @@ EXPORTS
WTFReportArgumentAssertionFailure
WTFReportAssertionFailure
WTFReportAssertionFailureWithMessage
+ WTFReportBacktrace
WTFReportError
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
index 12310d8..260779e 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
@@ -594,15 +594,19 @@
>
</File>
<File
- RelativePath="..\..\runtime\MarkedSpace.cpp"
+ RelativePath="..\..\runtime\MarkedBlock.cpp"
>
</File>
<File
- RelativePath="..\..\runtime\MarkedSpace.h"
+ RelativePath="..\..\runtime\MarkedBlock.h"
>
</File>
<File
- RelativePath="..\..\runtime\CollectorHeapIntrospector.h"
+ RelativePath="..\..\runtime\MarkedSpace.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\MarkedSpace.h"
>
</File>
<File
@@ -1002,6 +1006,14 @@
>
</File>
<File
+ RelativePath="..\..\runtime\ConservativeSet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\runtime\ConservativeSet.h"
+ >
+ </File>
+ <File
RelativePath="..\..\runtime\MarkStack.cpp"
>
</File>
@@ -1323,42 +1335,6 @@
</File>
</Filter>
<Filter
- Name="pcre"
- >
- <File
- RelativePath="..\..\pcre\pcre.h"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_compile.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_exec.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_internal.h"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_tables.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_ucp_searchfuncs.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\pcre_xclass.cpp"
- >
- </File>
- <File
- RelativePath="..\..\pcre\ucpinternal.h"
- >
- </File>
- </Filter>
- <Filter
Name="API"
>
<File
@@ -1946,6 +1922,18 @@
>
</File>
<File
+ RelativePath="..\..\parser\SourceProviderCache.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\SourceProviderCache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\parser\SourceProviderCacheItem.h"
+ >
+ </File>
+ <File
RelativePath="..\..\parser\SyntaxChecker.h"
>
</File>
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
index 2a85beb..4a7f4d3 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
@@ -6,7 +6,7 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../parser/;../../bytecompiler/;../../jit/;../../runtime/;../../bytecode/;../../interpreter/;../../wtf/;../../profiler;../../assembler/;../../debugger/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
+ AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../parser/;../../bytecompiler/;../../jit/;../../runtime/;../../bytecode/;../../interpreter/;../../wtf/;../../profiler;../../assembler/;../../debugger/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
PreprocessorDefinitions="__STD_C"
ForcedIncludeFiles="ICUVersion.h"
/>
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
index 65e3215..314a794 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make
@@ -1,58 +1,60 @@
all:
- touch "$(CONFIGURATIONBUILDDIR)\buildfailed"
- bash build-generated-files.sh "$(CONFIGURATIONBUILDDIR)" "$(WEBKITLIBRARIESDIR)"
- -bash -c "python react-to-vsprops-changes.py"
- -mkdir 2>NUL "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\APICast.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JavaScript.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSBase.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSContextRef.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSContextRefPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSObjectRef.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSObjectRefPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSStringRef.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSStringRefCF.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSStringRefBSTR.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSValueRef.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JavaScriptCore.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSRetainPtr.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSWeakObjectMapRefInternal.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSWeakObjectMapRefPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\JSRetainPtr.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\OpaqueJSString.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
- xcopy /y /d "..\..\API\WebKitAvailability.h" "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore"
+ touch "%ConfigurationBuildDir%\buildfailed"
+ bash build-generated-files.sh "%ConfigurationBuildDir%" "$(WEBKITLIBRARIESDIR)"
+!IF "$(PRODUCTION)"!="1"
+ bash -c "python react-to-vsprops-changes.py"
+!ENDIF
+ -mkdir 2>NUL "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\APICast.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JavaScript.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSBase.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSContextRef.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSContextRefPrivate.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSObjectRef.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSObjectRefPrivate.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSStringRef.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSStringRefCF.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSStringRefBSTR.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSValueRef.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JavaScriptCore.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSRetainPtr.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSWeakObjectMapRefInternal.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSWeakObjectMapRefPrivate.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\JSRetainPtr.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\OpaqueJSString.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
+ xcopy /y /d "..\..\API\WebKitAvailability.h" "%ConfigurationBuildDir%\include\JavaScriptCore"
- -mkdir 2>NUL "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
+ -mkdir 2>NUL "%ConfigurationBuildDir%\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\text\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\unicode\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\unicode\icu\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\parser\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\runtime\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\bytecode\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\interpreter\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\assembler\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\jit\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\debugger\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\profiler\*.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\create_hash_table" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\pcre\pcre.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\text\AtomicString.cpp" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\text\StringBuilder.cpp" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\text\StringImpl.cpp" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- xcopy /y /d "..\..\wtf\text\WTFString.cpp" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\text\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\unicode\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\unicode\icu\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\parser\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\runtime\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\bytecode\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\interpreter\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\assembler\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\jit\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\debugger\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\profiler\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\create_hash_table" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\text\AtomicString.cpp" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\text\StringBuilder.cpp" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\text\StringImpl.cpp" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\wtf\text\WTFString.cpp" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy /y /d "..\..\yarr\*.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore"
- -mkdir 2>NUL "$(CONFIGURATIONBUILDDIR)\bin\JavaScriptCore.resources"
- xcopy /y /d "..\JavaScriptCore.resources\*" "$(CONFIGURATIONBUILDDIR)\bin\JavaScriptCore.resources"
+ -mkdir 2>NUL "%ConfigurationBuildDir%\bin\JavaScriptCore.resources"
+ xcopy /y /d "..\JavaScriptCore.resources\*" "%ConfigurationBuildDir%\bin\JavaScriptCore.resources"
- -del "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore\stdbool.h" "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore\stdint.h"
- -del "$(CONFIGURATIONBUILDDIR)\buildfailed"
+ -del "%ConfigurationBuildDir%\include\private\JavaScriptCore\stdbool.h" "%ConfigurationBuildDir%\include\private\JavaScriptCore\stdint.h"
+ -del "%ConfigurationBuildDir%\buildfailed"
clean:
- -del "$(CONFIGURATIONBUILDDIR)\buildfailed"
- -del /s /q "$(CONFIGURATIONBUILDDIR)\include\JavaScriptCore\JavaScriptCore"
- -del /s /q "$(CONFIGURATIONBUILDDIR)\obj\JavaScriptCore\DerivedSources"
- -del /s /q "$(CONFIGURATIONBUILDDIR)\include\private\JavaScriptCore"
- -del /s /q "$(CONFIGURATIONBUILDDIR)\bin\JavaScriptCore.resources"
+ -del "%ConfigurationBuildDir%\buildfailed"
+ -del /s /q "%ConfigurationBuildDir%\include\JavaScriptCore\JavaScriptCore"
+ -del /s /q "%ConfigurationBuildDir%\obj\JavaScriptCore\DerivedSources"
+ -del /s /q "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ -del /s /q "%ConfigurationBuildDir%\bin\JavaScriptCore.resources"
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
index b8383c4..2437071 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj
@@ -87,6 +87,10 @@
>
</File>
<File
+ RelativePath="..\..\DerivedSources.make"
+ >
+ </File>
+ <File
RelativePath=".\JavaScriptCoreGenerated.make"
>
</File>
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
index ab1df83..e12840f 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py
@@ -19,11 +19,14 @@ def main():
# Delete any manifest-related files because Visual Studio isn't smart
# enough to figure out that it might need to rebuild them.
obj_directory = os.path.join(os.environ['CONFIGURATIONBUILDDIR'], 'obj')
- for manifest_file in glob.iglob(os.path.join(obj_directory, '*', '*', '*.manifest*')):
- manifest_time = os.path.getmtime(manifest_file)
- if manifest_time < newest_vsprops_time:
- print 'Deleting %s' % manifest_file
- os.remove(manifest_file)
+ for manifest_file in glob.iglob(os.path.join(obj_directory, '*', '*.manifest*')):
+ delete_if_older_than(manifest_file, newest_vsprops_time)
+
+ # Delete any precompiled headers because Visual Studio isn't smart enough
+ # to figure out that it might need to rebuild them, even if we touch
+ # wtf/Platform.h below.
+ for precompiled_header in glob.iglob(os.path.join(obj_directory, '*', '*.pch')):
+ delete_if_older_than(precompiled_header, newest_vsprops_time)
# Touch wtf/Platform.h so all files will be recompiled. This is necessary
# to pick up changes to preprocessor macros (e.g., ENABLE_*).
@@ -33,5 +36,11 @@ def main():
os.utime(wtf_platform_h, None)
+def delete_if_older_than(path, reference_time):
+ if os.path.getmtime(path) < reference_time:
+ print 'Deleting %s' % path
+ os.remove(path)
+
+
if __name__ == '__main__':
sys.exit(main())
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj b/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
index 457392d..55371f3 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
@@ -400,6 +400,10 @@
Name="unicode"
>
<File
+ RelativePath="..\..\wtf\unicode\CharacterNames.h"
+ >
+ </File>
+ <File
RelativePath="..\..\wtf\unicode\Collator.h"
>
</File>
@@ -533,6 +537,10 @@
>
</File>
<File
+ RelativePath="..\..\wtf\BloomFilter.h"
+ >
+ </File>
+ <File
RelativePath="..\..\wtf\BumpPointerAllocator.h"
>
</File>
@@ -553,6 +561,14 @@
>
</File>
<File
+ RelativePath="..\..\wtf\CryptographicallyRandomNumber.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\CryptographicallyRandomNumber.h"
+ >
+ </File>
+ <File
RelativePath="..\..\wtf\CurrentTime.cpp"
>
</File>
@@ -745,11 +761,15 @@
>
</File>
<File
- RelativePath="..\..\wtf\OwnArrayPtr.h"
+ RelativePath="..\..\wtf\OSRandomSource.cpp"
>
</File>
<File
- RelativePath="..\..\wtf\OwnArrayPtrCommon.h"
+ RelativePath="..\..\wtf\OSRandomSource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\wtf\OwnArrayPtr.h"
>
</File>
<File
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops b/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
index b74b939..6e2321f 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops
@@ -7,7 +7,7 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../parser/;../../wtf/;../../wtf/unicode/;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;../../../icu/include;../../bindings;../../bindings/c;../../bindings/jni;&quot;$(ConfigurationBuildDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
+ AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../parser/;../../wtf/;../../wtf/unicode/;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;../../../icu/include;../../bindings;../../bindings/c;../../bindings/jni;&quot;$(ConfigurationBuildDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;"
PreprocessorDefinitions="__STD_C"
ForcedIncludeFiles="ICUVersion.h"
ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops b/Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
index d1c3638..3e329c3 100644
--- a/Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
+++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscCommon.vsprops
@@ -6,7 +6,7 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../pcre/;../../assembler/;../../API/;../../parser/;../../runtime/;../../VM/;../../bytecode/;../../interpreter/;../../wtf/;../../debugger/;../../bytecompiler/;../../profiler;../../jit/;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
+ AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(ConfigurationBuildDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;&quot;../../os-win32/&quot;;../../assembler/;../../API/;../../parser/;../../runtime/;../../VM/;../../bytecode/;../../interpreter/;../../wtf/;../../debugger/;../../bytecompiler/;../../profiler;../../jit/;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
PreprocessorDefinitions="__STD_C"
ForcedIncludeFiles="ICUVersion.h"
ForcedUsingFiles=""
diff --git a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
index 358e38c..74e3b43 100644
--- a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+++ b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
@@ -122,6 +122,7 @@
14469DED107EC7E700650446 /* StringPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C50E16EE3300B34460 /* StringPrototype.cpp */; };
14469DEE107EC7E700650446 /* UString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A8850255597D01FF60F7 /* UString.cpp */; };
146AAB380B66A94400E55F16 /* JSStringRefCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146AAB370B66A94400E55F16 /* JSStringRefCF.cpp */; };
+ 146B16D812EB5B59001BEC1B /* ConservativeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */; };
146FE51211A710430087AE66 /* JITCall32_64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 146FE51111A710430087AE66 /* JITCall32_64.cpp */; };
147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B83AA0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h */; };
147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B84620E6DE6B1004775A4 /* PutPropertySlot.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -175,8 +176,9 @@
14BD5A320A3E91F600BAF59C /* JSValueRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BD5A2B0A3E91F600BAF59C /* JSValueRef.cpp */; };
14BFCE6910CDB1FC00364CCE /* WeakGCMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
14C5242B0F5355E900BA3D04 /* JITStubs.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A6581A0F4E36F4000150FD /* JITStubs.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 14C824AB12F7C77E008F35E0 /* MarkedBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */; };
+ 14C824AD12F7C785008F35E0 /* MarkedBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C824AC12F7C785008F35E0 /* MarkedBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
14E9D17B107EC469004DDA21 /* JSGlobalObjectFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */; };
- 14F3488F0E95EF8A003648BC /* CollectorHeapIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F3488E0E95EF8A003648BC /* CollectorHeapIterator.h */; settings = {ATTRIBUTES = (); }; };
14F8BA3E107EC886009892DC /* FastMalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65E217B908E7EECC0023E5F6 /* FastMalloc.cpp */; };
14F8BA43107EC88C009892DC /* TCSystemAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6541BD7008E80A17002CBEE7 /* TCSystemAlloc.cpp */; };
14FFF98C12BFFF7500795BB8 /* PageAllocationAligned.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14FFF98A12BFFF7500795BB8 /* PageAllocationAligned.cpp */; };
@@ -187,12 +189,13 @@
18BAB55410DAE066000D945B /* ThreadIdentifierDataPthreads.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BAB52810DADFCD000D945B /* ThreadIdentifierDataPthreads.h */; };
1C61516C0EBAC7A00031376F /* ProfilerServer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C61516A0EBAC7A00031376F /* ProfilerServer.mm */; settings = {COMPILER_FLAGS = "-fno-strict-aliasing"; }; };
1C61516D0EBAC7A00031376F /* ProfilerServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C61516B0EBAC7A00031376F /* ProfilerServer.h */; };
+ 2CFC5D1E12F45B48004914E2 /* CharacterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CFC5B7A12F44714004914E2 /* CharacterNames.h */; settings = {ATTRIBUTES = (Private, ); }; };
41359CF30FDD89AD00206180 /* DateConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = D21202290AD4310C00ED79B6 /* DateConversion.h */; };
41359CF60FDD89CB00206180 /* DateMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41359CF40FDD89CB00206180 /* DateMath.cpp */; };
41359CF70FDD89CB00206180 /* DateMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 41359CF50FDD89CB00206180 /* DateMath.h */; settings = {ATTRIBUTES = (Private, ); }; };
4409D8470FAF80A200523B87 /* OwnPtrCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 440B7AED0FAF7FCB0073323E /* OwnPtrCommon.h */; settings = {ATTRIBUTES = (Private, ); }; };
44DD48530FAEA85000D6B4EB /* PassOwnPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 44DD48520FAEA85000D6B4EB /* PassOwnPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 451539B912DC994500EF7AC4 /* Yarr.h in Headers */ = {isa = PBXBuildFile; fileRef = 451539B812DC994500EF7AC4 /* Yarr.h */; };
+ 451539B912DC994500EF7AC4 /* Yarr.h in Headers */ = {isa = PBXBuildFile; fileRef = 451539B812DC994500EF7AC4 /* Yarr.h */; settings = {ATTRIBUTES = (Private, ); }; };
511FC4C9117EE28700425272 /* MD5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511FC4C7117EE23D00425272 /* MD5.cpp */; };
511FC4CB117EE2A800425272 /* MD5.h in Headers */ = {isa = PBXBuildFile; fileRef = 511FC4CA117EE2A800425272 /* MD5.h */; settings = {ATTRIBUTES = (Private, ); }; };
5135FAF212D26ACE003C083B /* Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5135FAD512D26856003C083B /* Decoder.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -228,12 +231,12 @@
86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86704B4012DB8A8100A9FE7B /* YarrSyntaxChecker.cpp */; };
86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B4112DB8A8100A9FE7B /* YarrSyntaxChecker.h */; };
86704B8412DBA33700A9FE7B /* YarrInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86704B7D12DBA33700A9FE7B /* YarrInterpreter.cpp */; };
- 86704B8512DBA33700A9FE7B /* YarrInterpreter.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B7E12DBA33700A9FE7B /* YarrInterpreter.h */; };
+ 86704B8512DBA33700A9FE7B /* YarrInterpreter.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B7E12DBA33700A9FE7B /* YarrInterpreter.h */; settings = {ATTRIBUTES = (Private, ); }; };
86704B8612DBA33700A9FE7B /* YarrJIT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86704B7F12DBA33700A9FE7B /* YarrJIT.cpp */; };
- 86704B8712DBA33700A9FE7B /* YarrJIT.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8012DBA33700A9FE7B /* YarrJIT.h */; };
- 86704B8812DBA33700A9FE7B /* YarrParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8112DBA33700A9FE7B /* YarrParser.h */; };
+ 86704B8712DBA33700A9FE7B /* YarrJIT.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8012DBA33700A9FE7B /* YarrJIT.h */; settings = {ATTRIBUTES = (); }; };
+ 86704B8812DBA33700A9FE7B /* YarrParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8112DBA33700A9FE7B /* YarrParser.h */; settings = {ATTRIBUTES = (); }; };
86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86704B8212DBA33700A9FE7B /* YarrPattern.cpp */; };
- 86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8312DBA33700A9FE7B /* YarrPattern.h */; };
+ 86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 86704B8312DBA33700A9FE7B /* YarrPattern.h */; settings = {ATTRIBUTES = (Private, ); }; };
868BFA08117CEFD100B908B1 /* AtomicString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 868BFA00117CEFD100B908B1 /* AtomicString.cpp */; };
868BFA09117CEFD100B908B1 /* AtomicString.h in Headers */ = {isa = PBXBuildFile; fileRef = 868BFA01117CEFD100B908B1 /* AtomicString.h */; settings = {ATTRIBUTES = (Private, ); }; };
868BFA0A117CEFD100B908B1 /* AtomicStringImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 868BFA02117CEFD100B908B1 /* AtomicStringImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -283,9 +286,6 @@
90D3469C0E285280009492EE /* RefCountedLeakCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 90D3469B0E285280009492EE /* RefCountedLeakCounter.h */; settings = {ATTRIBUTES = (Private, ); }; };
93052C340FB792190048FDC3 /* ParserArena.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93052C320FB792190048FDC3 /* ParserArena.cpp */; };
93052C350FB792190048FDC3 /* ParserArena.h in Headers */ = {isa = PBXBuildFile; fileRef = 93052C330FB792190048FDC3 /* ParserArena.h */; settings = {ATTRIBUTES = (); }; };
- 930754C108B0F68000AB3056 /* pcre_compile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 930754BF08B0F68000AB3056 /* pcre_compile.cpp */; };
- 930754D008B0F74600AB3056 /* pcre_tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 930754CE08B0F74500AB3056 /* pcre_tables.cpp */; };
- 930754EB08B0F78500AB3056 /* pcre_exec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 930754E908B0F78500AB3056 /* pcre_exec.cpp */; settings = {COMPILER_FLAGS = "-fno-move-loop-invariants"; }; };
932F5BD30822A1C700736975 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6560A4CF04B3B3E7008AE952 /* CoreFoundation.framework */; };
932F5BD50822A1C700736975 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F0EB6105C86C6B00E6DF1B /* Foundation.framework */; };
932F5BD60822A1C700736975 /* libobjc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F0EC0705C86C9A00E6DF1B /* libobjc.dylib */; };
@@ -296,9 +296,7 @@
9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93303FE80E6A72B500786E6A /* SmallStrings.cpp */; };
9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93345A8712D838C400302BE3 /* StringRecursionChecker.cpp */; };
933F5CDC1269229B0049191E /* NullPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 933F5CDB126922690049191E /* NullPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 937013480CA97E0E00FA14D3 /* pcre_ucp_searchfuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 937013470CA97E0E00FA14D3 /* pcre_ucp_searchfuncs.cpp */; settings = {COMPILER_FLAGS = "-Wno-sign-compare"; }; };
93854A9A12C93D3B00DAAF77 /* NullPtr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93854A9912C93D3B00DAAF77 /* NullPtr.cpp */; };
- 93E26BD408B1514100F85226 /* pcre_xclass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E26BD308B1514100F85226 /* pcre_xclass.cpp */; };
9534AAFB0E5B7A9600B8A45B /* JSProfilerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 952C63AC0E4777D600C13936 /* JSProfilerPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
95742F650DD11F5A000917FB /* Profile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95742F630DD11F5A000917FB /* Profile.cpp */; };
95AB83420DA4322500BC83F3 /* Profiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95AB832E0DA42CAD00BC83F3 /* Profiler.cpp */; };
@@ -334,6 +332,10 @@
971EDEA61169E0D3005E4262 /* Terminator.h in Headers */ = {isa = PBXBuildFile; fileRef = 97F6903A1169DF7F00A6BB46 /* Terminator.h */; settings = {ATTRIBUTES = (Private, ); }; };
972A485F12661E0800F4514F /* URLCharacterTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 972A485D12661E0800F4514F /* URLCharacterTypes.cpp */; };
972A48771266256F00F4514F /* URLEscape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 972A48741266256F00F4514F /* URLEscape.cpp */; };
+ 97941A5713029AAB004A3447 /* OSRandomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97941A3F130299DB004A3447 /* OSRandomSource.cpp */; };
+ 97941A5A13029ACC004A3447 /* OSRandomSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 97941A40130299DB004A3447 /* OSRandomSource.h */; };
+ 97941A7E1302A098004A3447 /* CryptographicallyRandomNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97941A7C1302A098004A3447 /* CryptographicallyRandomNumber.cpp */; };
+ 97941A7F1302A098004A3447 /* CryptographicallyRandomNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 97941A7D1302A098004A3447 /* CryptographicallyRandomNumber.h */; settings = {ATTRIBUTES = (Private, ); }; };
A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1712B3A11C7B212007A5315 /* RegExpCache.cpp */; };
A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B3E11C7B228007A5315 /* RegExpCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
A1712B4111C7B235007A5315 /* RegExpKey.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B4011C7B235007A5315 /* RegExpKey.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -371,6 +373,7 @@
A7C1E8E4112E72EF00A37F98 /* JITPropertyAccess32_64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */; };
A7C530E4102A3813005BC741 /* MarkStackPosix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7C530E3102A3813005BC741 /* MarkStackPosix.cpp */; };
A7D649AA1015224E009B2E1B /* PossiblyNull.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D649A91015224E009B2E1B /* PossiblyNull.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ A7DCB97312E5193F00911940 /* WriteBarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DCB77912E3D90500911940 /* WriteBarrier.h */; settings = {ATTRIBUTES = (Private, ); }; };
A7E2EA6B0FB460CF00601F06 /* LiteralParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E2EA690FB460CF00601F06 /* LiteralParser.h */; };
A7E2EA6C0FB460CF00601F06 /* LiteralParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7E2EA6A0FB460CF00601F06 /* LiteralParser.cpp */; };
A7F19ECE11DD490900931E70 /* FixedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F19ECD11DD490900931E70 /* FixedArray.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -473,8 +476,6 @@
BC18C44A0E16F5CD00B34460 /* OwnPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9303F567099118FA00AD71B8 /* OwnPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C44B0E16F5CD00B34460 /* Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F0B3AA09BB4DC00068FCE3 /* Parser.h */; settings = {ATTRIBUTES = (); }; };
BC18C44C0E16F5CD00B34460 /* PassRefPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 6580F795094070560082C219 /* PassRefPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
- BC18C44D0E16F5CD00B34460 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = 6541720F039E08B90058BFEB /* pcre.h */; settings = {ATTRIBUTES = (Private, ); }; };
- BC18C44E0E16F5CD00B34460 /* pcre_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E26BE508B1517100F85226 /* pcre_internal.h */; };
BC18C44F0E16F5CD00B34460 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D6D87E09B5A32E0002E4D7 /* Platform.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C4500E16F5CD00B34460 /* Profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 95742F640DD11F5A000917FB /* Profile.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C4510E16F5CD00B34460 /* ProfileNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 95AB83550DA43B4400BC83F3 /* ProfileNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -505,7 +506,6 @@
BC18C46F0E16F5CD00B34460 /* TCSystemAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 6541BD7108E80A17002CBEE7 /* TCSystemAlloc.h */; };
BC18C4700E16F5CD00B34460 /* Threading.h in Headers */ = {isa = PBXBuildFile; fileRef = E1EE79220D6C95CD00FEA3BA /* Threading.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C4710E16F5CD00B34460 /* ThreadSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = E1B7C8BD0DA3A3360074B0DC /* ThreadSpecific.h */; settings = {ATTRIBUTES = (Private, ); }; };
- BC18C4720E16F5CD00B34460 /* ucpinternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E26BFC08B151D400F85226 /* ucpinternal.h */; };
BC18C4730E16F5CD00B34460 /* Unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = E195679409E7CF1200B89D13 /* Unicode.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C4740E16F5CD00B34460 /* UnicodeIcu.h in Headers */ = {isa = PBXBuildFile; fileRef = E195678F09E7CF1200B89D13 /* UnicodeIcu.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC18C4750E16F5CD00B34460 /* UnusedParam.h in Headers */ = {isa = PBXBuildFile; fileRef = 935AF46B09E9D9DB00ACD1D8 /* UnusedParam.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -547,7 +547,6 @@
BCDE3B430E6C832D001453A7 /* Structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCDE3AB00E6C82CF001453A7 /* Structure.cpp */; };
BCF605140E203EF800B9A64D /* ArgList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF605120E203EF800B9A64D /* ArgList.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCFBE696122560E800309E9D /* PassOwnArrayPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFBE695122560E800309E9D /* PassOwnArrayPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
- BCFBE698122561D200309E9D /* OwnArrayPtrCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFBE697122561D200309E9D /* OwnArrayPtrCommon.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCFD8C920EEB2EE700283848 /* JumpTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCFD8C900EEB2EE700283848 /* JumpTable.cpp */; };
BCFD8C930EEB2EE700283848 /* JumpTable.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFD8C910EEB2EE700283848 /* JumpTable.h */; };
C0A272630E50A06300E96E15 /* NotFound.h in Headers */ = {isa = PBXBuildFile; fileRef = C0A2723F0E509F1E00E96E15 /* NotFound.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -570,6 +569,10 @@
E1EE793D0D6C9B9200FEA3BA /* ThreadingPthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EE793C0D6C9B9200FEA3BA /* ThreadingPthreads.cpp */; };
E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EF79A80CE97BA60088D500 /* UTF8.cpp */; };
E48E0F2D0F82151700A8CA37 /* FastAllocBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49DC15512EF277200184A1F /* SourceProviderCache.cpp */; };
+ E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */; };
+ E4D8CEFB12FC439600BC9F5A /* BloomFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D8CE9B12FC42E100BC9F5A /* BloomFilter.h */; settings = {ATTRIBUTES = (Private, ); }; };
F3BD31ED126735770065467F /* TextPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = F3BD31D0126730180065467F /* TextPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
FDA15C1E12B0305C003A583A /* Complex.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA15C1612B03028003A583A /* Complex.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -708,6 +711,7 @@
145C507F0D9DF63B0088F6B9 /* CallData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallData.h; sourceTree = "<group>"; };
146AAB2A0B66A84900E55F16 /* JSStringRefCF.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSStringRefCF.h; sourceTree = "<group>"; };
146AAB370B66A94400E55F16 /* JSStringRefCF.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSStringRefCF.cpp; sourceTree = "<group>"; };
+ 146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConservativeSet.cpp; sourceTree = "<group>"; };
146FE51111A710430087AE66 /* JITCall32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITCall32_64.cpp; sourceTree = "<group>"; };
14760863099C633800437128 /* JSImmediate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSImmediate.cpp; sourceTree = "<group>"; };
147B83AA0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BatchedTransitionOptimizer.h; sourceTree = "<group>"; };
@@ -725,6 +729,7 @@
148CD1D7108CF902008163C6 /* JSContextRefPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSContextRefPrivate.h; sourceTree = "<group>"; };
149559ED0DDCDDF700648087 /* DebuggerCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebuggerCallFrame.cpp; sourceTree = "<group>"; };
149B24FF0D8AF6D1009CB8C7 /* Register.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Register.h; sourceTree = "<group>"; };
+ 149DAAF212EB559D0083B12B /* ConservativeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConservativeSet.h; sourceTree = "<group>"; };
14A1563010966365006FA260 /* DateInstanceCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateInstanceCache.h; sourceTree = "<group>"; };
14A23D6C0F4E19CE0023CDAD /* JITStubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITStubs.cpp; sourceTree = "<group>"; };
14A396A60CD2933100B5B4FF /* SymbolTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTable.h; sourceTree = "<group>"; };
@@ -746,13 +751,14 @@
14BD5A2B0A3E91F600BAF59C /* JSValueRef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSValueRef.cpp; sourceTree = "<group>"; };
14BD5A2D0A3E91F600BAF59C /* testapi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = testapi.c; path = API/tests/testapi.c; sourceTree = "<group>"; };
14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakGCMap.h; sourceTree = "<group>"; };
+ 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedBlock.cpp; sourceTree = "<group>"; };
+ 14C824AC12F7C785008F35E0 /* MarkedBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedBlock.h; sourceTree = "<group>"; };
14D792640DAA03FB001A9F05 /* RegisterFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterFile.h; sourceTree = "<group>"; };
14D857740A4696C80032146C /* testapi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = testapi.js; path = API/tests/testapi.js; sourceTree = "<group>"; };
14DA818E0D99FD2000B0A4FB /* JSActivation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSActivation.h; sourceTree = "<group>"; };
14DA818F0D99FD2000B0A4FB /* JSActivation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSActivation.cpp; sourceTree = "<group>"; };
14DE0D680D02431400AACCA2 /* JSGlobalObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSGlobalObject.cpp; sourceTree = "<group>"; };
14F252560D08DD8D004ECFFF /* JSVariableObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSVariableObject.h; sourceTree = "<group>"; };
- 14F3488E0E95EF8A003648BC /* CollectorHeapIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectorHeapIterator.h; sourceTree = "<group>"; };
14FFF98A12BFFF7500795BB8 /* PageAllocationAligned.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageAllocationAligned.cpp; sourceTree = "<group>"; };
14FFF98B12BFFF7500795BB8 /* PageAllocationAligned.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageAllocationAligned.h; sourceTree = "<group>"; };
180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CurrentTime.cpp; sourceTree = "<group>"; };
@@ -767,6 +773,7 @@
1C9051450BA9E8A70081E9D0 /* Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Base.xcconfig; sourceTree = "<group>"; };
1CAA8B4A0D32C39A0041BCFF /* JavaScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JavaScript.h; sourceTree = "<group>"; };
1CAA8B4B0D32C39A0041BCFF /* JavaScriptCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCore.h; sourceTree = "<group>"; };
+ 2CFC5B7A12F44714004914E2 /* CharacterNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CharacterNames.h; sourceTree = "<group>"; };
41359CF40FDD89CB00206180 /* DateMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DateMath.cpp; sourceTree = "<group>"; };
41359CF50FDD89CB00206180 /* DateMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateMath.h; sourceTree = "<group>"; };
440B7AED0FAF7FCB0073323E /* OwnPtrCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OwnPtrCommon.h; sourceTree = "<group>"; };
@@ -797,7 +804,6 @@
652246A40C8D7A0E007BDAF7 /* HashIterators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashIterators.h; sourceTree = "<group>"; };
65400C0F0A69BAF200509887 /* PropertyNameArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PropertyNameArray.cpp; sourceTree = "<group>"; };
65400C100A69BAF200509887 /* PropertyNameArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PropertyNameArray.h; sourceTree = "<group>"; };
- 6541720F039E08B90058BFEB /* pcre.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = pcre.h; sourceTree = "<group>"; tabWidth = 8; };
6541BD6E08E80A17002CBEE7 /* TCPageMap.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = TCPageMap.h; sourceTree = "<group>"; tabWidth = 8; };
6541BD6F08E80A17002CBEE7 /* TCSpinLock.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = TCSpinLock.h; sourceTree = "<group>"; tabWidth = 8; };
6541BD7008E80A17002CBEE7 /* TCSystemAlloc.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TCSystemAlloc.cpp; sourceTree = "<group>"; tabWidth = 8; };
@@ -811,7 +817,6 @@
6580F795094070560082C219 /* PassRefPtr.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = PassRefPtr.h; sourceTree = "<group>"; tabWidth = 8; };
6592C316098B7DE10003D4F6 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = "<group>"; };
6592C317098B7DE10003D4F6 /* VectorTraits.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VectorTraits.h; sourceTree = "<group>"; };
- 65B174BE09D1000200820339 /* chartables.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; path = chartables.c; sourceTree = "<group>"; };
65C02FBB0637462A003E7EE6 /* Protect.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Protect.h; sourceTree = "<group>"; tabWidth = 8; };
65C647B3093EF8D60022C380 /* RefPtr.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = RefPtr.h; sourceTree = "<group>"; tabWidth = 8; };
65C7A1710A8EAACB00FA37EA /* JSWrapperObject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSWrapperObject.cpp; sourceTree = "<group>"; };
@@ -862,7 +867,6 @@
86704B8212DBA33700A9FE7B /* YarrPattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YarrPattern.cpp; path = yarr/YarrPattern.cpp; sourceTree = "<group>"; };
86704B8312DBA33700A9FE7B /* YarrPattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YarrPattern.h; path = yarr/YarrPattern.h; sourceTree = "<group>"; };
867FC35F11B763950025105E /* JavaScriptCore.JSVALUE32_64only.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = JavaScriptCore.JSVALUE32_64only.exp; sourceTree = "<group>"; };
- 867FC36011B763950025105E /* JavaScriptCore.JSVALUE32only.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = JavaScriptCore.JSVALUE32only.exp; sourceTree = "<group>"; };
867FC36111B763950025105E /* JavaScriptCore.JSVALUE64only.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = JavaScriptCore.JSVALUE64only.exp; sourceTree = "<group>"; };
868BFA00117CEFD100B908B1 /* AtomicString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AtomicString.cpp; path = text/AtomicString.cpp; sourceTree = "<group>"; };
868BFA01117CEFD100B908B1 /* AtomicString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtomicString.h; path = text/AtomicString.h; sourceTree = "<group>"; };
@@ -916,9 +920,6 @@
9303F5A409911A5800AD71B8 /* OwnArrayPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OwnArrayPtr.h; sourceTree = "<group>"; };
93052C320FB792190048FDC3 /* ParserArena.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParserArena.cpp; sourceTree = "<group>"; };
93052C330FB792190048FDC3 /* ParserArena.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParserArena.h; sourceTree = "<group>"; };
- 930754BF08B0F68000AB3056 /* pcre_compile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcre_compile.cpp; sourceTree = "<group>"; tabWidth = 8; };
- 930754CE08B0F74500AB3056 /* pcre_tables.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcre_tables.cpp; sourceTree = "<group>"; tabWidth = 8; };
- 930754E908B0F78500AB3056 /* pcre_exec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcre_exec.cpp; sourceTree = "<group>"; tabWidth = 8; };
930DAD030FB1EB1A0082D205 /* NodeConstructors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeConstructors.h; sourceTree = "<group>"; };
9322A00306C341D3009067BB /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = /usr/lib/libicucore.dylib; sourceTree = "<absolute>"; };
932F5BD80822A1C700736975 /* Info.plist */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; tabWidth = 8; usesTabs = 1; };
@@ -933,7 +934,6 @@
933F5CDB126922690049191E /* NullPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NullPtr.h; sourceTree = "<group>"; };
935AF46909E9D9DB00ACD1D8 /* Forward.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Forward.h; sourceTree = "<group>"; };
935AF46B09E9D9DB00ACD1D8 /* UnusedParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnusedParam.h; sourceTree = "<group>"; };
- 937013470CA97E0E00FA14D3 /* pcre_ucp_searchfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcre_ucp_searchfuncs.cpp; sourceTree = "<group>"; };
9374D3A7038D9D74008635CE /* ScopeChain.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = ScopeChain.h; sourceTree = "<group>"; tabWidth = 8; };
9374D3A8038D9D74008635CE /* ScopeChain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScopeChain.cpp; sourceTree = "<group>"; tabWidth = 8; };
937B63CC09E766D200A671DD /* DerivedSources.make */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = DerivedSources.make; sourceTree = "<group>"; usesTabs = 1; };
@@ -945,9 +945,6 @@
93ADFCE60CCBD7AC00D30B08 /* JSArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSArray.cpp; sourceTree = "<group>"; };
93B6A0DE0AA64DA40076DE27 /* GetPtr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GetPtr.h; sourceTree = "<group>"; };
93CEDDFB0EA91EE600258EBE /* RegExpMatchesArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpMatchesArray.h; sourceTree = "<group>"; };
- 93E26BD308B1514100F85226 /* pcre_xclass.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pcre_xclass.cpp; sourceTree = "<group>"; tabWidth = 8; };
- 93E26BE508B1517100F85226 /* pcre_internal.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = pcre_internal.h; sourceTree = "<group>"; tabWidth = 8; };
- 93E26BFC08B151D400F85226 /* ucpinternal.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = ucpinternal.h; sourceTree = "<group>"; tabWidth = 8; };
93F0B3A909BB4DC00068FCE3 /* Parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Parser.cpp; sourceTree = "<group>"; };
93F0B3AA09BB4DC00068FCE3 /* Parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Parser.h; sourceTree = "<group>"; };
93F1981A08245AAE001E9ABC /* Keywords.table */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = text; path = Keywords.table; sourceTree = "<group>"; tabWidth = 8; };
@@ -994,6 +991,10 @@
972A48741266256F00F4514F /* URLEscape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = URLEscape.cpp; path = url/src/URLEscape.cpp; sourceTree = "<group>"; };
972A48751266256F00F4514F /* URLEscape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = URLEscape.h; path = url/src/URLEscape.h; sourceTree = "<group>"; };
972A48761266256F00F4514F /* URLQueryCanonicalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = URLQueryCanonicalizer.h; path = url/src/URLQueryCanonicalizer.h; sourceTree = "<group>"; };
+ 97941A3F130299DB004A3447 /* OSRandomSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OSRandomSource.cpp; sourceTree = "<group>"; };
+ 97941A40130299DB004A3447 /* OSRandomSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSRandomSource.h; sourceTree = "<group>"; };
+ 97941A7C1302A098004A3447 /* CryptographicallyRandomNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptographicallyRandomNumber.cpp; sourceTree = "<group>"; };
+ 97941A7D1302A098004A3447 /* CryptographicallyRandomNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptographicallyRandomNumber.h; sourceTree = "<group>"; };
97F6903A1169DF7F00A6BB46 /* Terminator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terminator.h; sourceTree = "<group>"; };
A1712B3A11C7B212007A5315 /* RegExpCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpCache.cpp; sourceTree = "<group>"; };
A1712B3E11C7B228007A5315 /* RegExpCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpCache.h; sourceTree = "<group>"; };
@@ -1036,6 +1037,7 @@
A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITPropertyAccess32_64.cpp; sourceTree = "<group>"; };
A7C530E3102A3813005BC741 /* MarkStackPosix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkStackPosix.cpp; sourceTree = "<group>"; };
A7D649A91015224E009B2E1B /* PossiblyNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PossiblyNull.h; sourceTree = "<group>"; };
+ A7DCB77912E3D90500911940 /* WriteBarrier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WriteBarrier.h; sourceTree = "<group>"; };
A7E2EA690FB460CF00601F06 /* LiteralParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiteralParser.h; sourceTree = "<group>"; };
A7E2EA6A0FB460CF00601F06 /* LiteralParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LiteralParser.cpp; sourceTree = "<group>"; };
A7E42C180E3938830065A544 /* JSStaticScopeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStaticScopeObject.h; sourceTree = "<group>"; };
@@ -1121,6 +1123,7 @@
BC7952350E15EB5600A898AB /* BooleanPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BooleanPrototype.h; sourceTree = "<group>"; };
BC7F8FB80E19D1C3008632C0 /* JSNumberCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNumberCell.h; sourceTree = "<group>"; };
BC7F8FBA0E19D1EF008632C0 /* JSCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCell.cpp; sourceTree = "<group>"; };
+ BC8149AF12F89F53007B2C32 /* HeaderDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeaderDetection.h; sourceTree = "<group>"; };
BC87CDB810712ACA000614CF /* JSONObject.lut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONObject.lut.h; sourceTree = "<group>"; };
BC8F3CCF0DAF17BA00577A80 /* ConstructData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConstructData.h; sourceTree = "<group>"; };
BC9041470EB9250900FE26FA /* StructureTransitionTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureTransitionTable.h; sourceTree = "<group>"; };
@@ -1147,7 +1150,6 @@
BCF605120E203EF800B9A64D /* ArgList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArgList.h; sourceTree = "<group>"; };
BCF6553B0A2048DE0038A194 /* MathExtras.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MathExtras.h; sourceTree = "<group>"; };
BCFBE695122560E800309E9D /* PassOwnArrayPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PassOwnArrayPtr.h; sourceTree = "<group>"; };
- BCFBE697122561D200309E9D /* OwnArrayPtrCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OwnArrayPtrCommon.h; sourceTree = "<group>"; };
BCFD8C900EEB2EE700283848 /* JumpTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JumpTable.cpp; sourceTree = "<group>"; };
BCFD8C910EEB2EE700283848 /* JumpTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JumpTable.h; sourceTree = "<group>"; };
C0A2723F0E509F1E00E96E15 /* NotFound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotFound.h; sourceTree = "<group>"; };
@@ -1180,6 +1182,10 @@
E1EF79A80CE97BA60088D500 /* UTF8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UTF8.cpp; sourceTree = "<group>"; };
E1EF79A90CE97BA60088D500 /* UTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTF8.h; sourceTree = "<group>"; };
E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastAllocBase.h; sourceTree = "<group>"; };
+ E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceProviderCacheItem.h; sourceTree = "<group>"; };
+ E49DC15112EF272200184A1F /* SourceProviderCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceProviderCache.h; sourceTree = "<group>"; };
+ E49DC15512EF277200184A1F /* SourceProviderCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceProviderCache.cpp; sourceTree = "<group>"; };
+ E4D8CE9B12FC42E100BC9F5A /* BloomFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloomFilter.h; sourceTree = "<group>"; };
F3BD31D0126730180065467F /* TextPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextPosition.h; path = text/TextPosition.h; sourceTree = "<group>"; };
F5BB2BC5030F772101FCFE1D /* Completion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Completion.h; sourceTree = "<group>"; tabWidth = 8; };
F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCorePrefix.h; sourceTree = "<group>"; tabWidth = 8; };
@@ -1288,7 +1294,6 @@
937B63CC09E766D200A671DD /* DerivedSources.make */,
F692A8540255597D01FF60F7 /* create_hash_table */,
14B8ECA60A5653980062BE54 /* JavaScriptCore.exp */,
- 867FC36011B763950025105E /* JavaScriptCore.JSVALUE32only.exp */,
867FC35F11B763950025105E /* JavaScriptCore.JSVALUE32_64only.exp */,
867FC36111B763950025105E /* JavaScriptCore.JSVALUE64only.exp */,
F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */,
@@ -1302,7 +1307,6 @@
1429D77A0ED20D7300B89619 /* interpreter */,
1429D92C0ED22D7000B89619 /* jit */,
7E39D8370EC3A388003AF11A /* parser */,
- 65417203039E01F90058BFEB /* pcre */,
95AB831A0DA42C6900BC83F3 /* profiler */,
7EF6E0BB0EB7A1EC0079AFAF /* runtime */,
141211000A48772600480255 /* tests */,
@@ -1485,8 +1489,8 @@
isa = PBXGroup;
children = (
BC18C5230E16FC8A00B34460 /* ArrayPrototype.lut.h */,
- 65B174BE09D1000200820339 /* chartables.c */,
BCD203E70E1718F4002C7E82 /* DatePrototype.lut.h */,
+ BC8149AF12F89F53007B2C32 /* HeaderDetection.h */,
BC87CDB810712ACA000614CF /* JSONObject.lut.h */,
BC18C52D0E16FCE100B34460 /* Lexer.lut.h */,
BC18C5290E16FCC200B34460 /* MathObject.lut.h */,
@@ -1520,6 +1524,8 @@
A7A1F7AB0F252B3C00E184E2 /* ByteArray.h */,
FDA15C1612B03028003A583A /* Complex.h */,
0BDFFAD40FC6171000D69EF4 /* CrossThreadRefCounted.h */,
+ 97941A7C1302A098004A3447 /* CryptographicallyRandomNumber.cpp */,
+ 97941A7D1302A098004A3447 /* CryptographicallyRandomNumber.h */,
180B9AEF0F16C569009BDBC5 /* CurrentTime.cpp */,
180B9AF00F16C569009BDBC5 /* CurrentTime.h */,
41359CF40FDD89CB00206180 /* DateMath.cpp */,
@@ -1562,8 +1568,9 @@
933F5CDB126922690049191E /* NullPtr.h */,
1400067612A6F7830064D123 /* OSAllocator.h */,
1400069212A6F9E10064D123 /* OSAllocatorPosix.cpp */,
+ 97941A3F130299DB004A3447 /* OSRandomSource.cpp */,
+ 97941A40130299DB004A3447 /* OSRandomSource.h */,
9303F5A409911A5800AD71B8 /* OwnArrayPtr.h */,
- BCFBE697122561D200309E9D /* OwnArrayPtrCommon.h */,
0BDFFAD10FC616EC00D69EF4 /* OwnFastMallocPtr.h */,
9303F567099118FA00AD71B8 /* OwnPtr.h */,
440B7AED0FAF7FCB0073323E /* OwnPtrCommon.h */,
@@ -1578,6 +1585,7 @@
6580F795094070560082C219 /* PassRefPtr.h */,
65D6D87E09B5A32E0002E4D7 /* Platform.h */,
A7D649A91015224E009B2E1B /* PossiblyNull.h */,
+ E4D8CE9B12FC42E100BC9F5A /* BloomFilter.h */,
088FA5B90EF76D4300578E6F /* RandomNumber.cpp */,
088FA5BA0EF76D4300578E6F /* RandomNumber.h */,
08E279E80EF83B10007DB523 /* RandomNumberSeed.h */,
@@ -1626,23 +1634,6 @@
tabWidth = 4;
usesTabs = 0;
};
- 65417203039E01F90058BFEB /* pcre */ = {
- isa = PBXGroup;
- children = (
- 6541720F039E08B90058BFEB /* pcre.h */,
- 930754BF08B0F68000AB3056 /* pcre_compile.cpp */,
- 930754E908B0F78500AB3056 /* pcre_exec.cpp */,
- 93E26BE508B1517100F85226 /* pcre_internal.h */,
- 930754CE08B0F74500AB3056 /* pcre_tables.cpp */,
- 937013470CA97E0E00FA14D3 /* pcre_ucp_searchfuncs.cpp */,
- 93E26BD308B1514100F85226 /* pcre_xclass.cpp */,
- 93E26BFC08B151D400F85226 /* ucpinternal.h */,
- );
- path = pcre;
- sourceTree = "<group>";
- tabWidth = 4;
- usesTabs = 0;
- };
7E39D81D0EC38EFA003AF11A /* bytecompiler */ = {
isa = PBXGroup;
children = (
@@ -1675,6 +1666,9 @@
93052C330FB792190048FDC3 /* ParserArena.h */,
869EBCB60E8C6D4A008722CC /* ResultType.h */,
65E866EE0DD59AFA00A2B2A1 /* SourceCode.h */,
+ E49DC15512EF277200184A1F /* SourceProviderCache.cpp */,
+ E49DC15112EF272200184A1F /* SourceProviderCache.h */,
+ E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */,
65E866ED0DD59AFA00A2B2A1 /* SourceProvider.h */,
A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */,
);
@@ -1703,11 +1697,12 @@
BCA62DFE0E2826230004F30D /* CallData.cpp */,
145C507F0D9DF63B0088F6B9 /* CallData.h */,
BC6AAAE40E1F426500AD87D8 /* ClassInfo.h */,
- 14F3488E0E95EF8A003648BC /* CollectorHeapIterator.h */,
65EA73620BAE35D1001BB560 /* CommonIdentifiers.cpp */,
65EA73630BAE35D1001BB560 /* CommonIdentifiers.h */,
969A09220ED1E09C00F1F681 /* Completion.cpp */,
F5BB2BC5030F772101FCFE1D /* Completion.h */,
+ 146B14DB12EB5B12001BEC1B /* ConservativeSet.cpp */,
+ 149DAAF212EB559D0083B12B /* ConservativeSet.h */,
BCA62DFF0E2826310004F30D /* ConstructData.cpp */,
BC8F3CCF0DAF17BA00577A80 /* ConstructData.h */,
BCD203450E17135E002C7E82 /* DateConstructor.cpp */,
@@ -1804,6 +1799,8 @@
F692A8690255597D01FF60F7 /* Lookup.h */,
14B7233F12D7D0DA003BD5ED /* MachineStackMarker.cpp */,
14B7234012D7D0DA003BD5ED /* MachineStackMarker.h */,
+ 14C824AA12F7C77E008F35E0 /* MarkedBlock.cpp */,
+ 14C824AC12F7C785008F35E0 /* MarkedBlock.h */,
140CDC7612DBEA330013CFC5 /* MarkedSpace.cpp */,
140CDC7712DBEA330013CFC5 /* MarkedSpace.h */,
A74B3498102A5F8E0032AB98 /* MarkStack.cpp */,
@@ -1890,6 +1887,7 @@
14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */,
14035DB010DBFB2A00FFFFE7 /* WeakGCPtr.h */,
1420BE7A10AA6DDB00F455D2 /* WeakRandom.h */,
+ A7DCB77912E3D90500911940 /* WriteBarrier.h */,
);
path = runtime;
sourceTree = "<group>";
@@ -2053,6 +2051,7 @@
isa = PBXGroup;
children = (
E195678E09E7CF1200B89D13 /* icu */,
+ 2CFC5B7A12F44714004914E2 /* CharacterNames.h */,
E1A862AA0D7EBB7D001EC6AA /* Collator.h */,
E1A862D50D7F2B5C001EC6AA /* CollatorDefault.cpp */,
E195679409E7CF1200B89D13 /* Unicode.h */,
@@ -2122,11 +2121,11 @@
BC18C3ED0E16F5CD00B34460 /* CallData.h in Headers */,
1429D8DE0ED2205B00B89619 /* CallFrame.h in Headers */,
95E3BC050E1AE68200B2D1C1 /* CallIdentifier.h in Headers */,
+ 2CFC5D1E12F45B48004914E2 /* CharacterNames.h in Headers */,
BC6AAAE50E1F426500AD87D8 /* ClassInfo.h in Headers */,
969A07970ED1D3AE00F1F681 /* CodeBlock.h in Headers */,
86E116B10FE75AC800B512BC /* CodeLocation.h in Headers */,
BC18C3F00E16F5CD00B34460 /* Collator.h in Headers */,
- 14F3488F0E95EF8A003648BC /* CollectorHeapIterator.h in Headers */,
BC18C3F30E16F5CD00B34460 /* CommonIdentifiers.h in Headers */,
BC18C3F40E16F5CD00B34460 /* Completion.h in Headers */,
FDA15C1E12B0305C003A583A /* Complex.h in Headers */,
@@ -2286,7 +2285,6 @@
BC18C4480E16F5CD00B34460 /* Operations.h in Headers */,
1400067712A6F7830064D123 /* OSAllocator.h in Headers */,
BC18C4490E16F5CD00B34460 /* OwnArrayPtr.h in Headers */,
- BCFBE698122561D200309E9D /* OwnArrayPtrCommon.h in Headers */,
0BDFFAE10FC6193100D69EF4 /* OwnFastMallocPtr.h in Headers */,
BC18C44A0E16F5CD00B34460 /* OwnPtr.h in Headers */,
4409D8470FAF80A200523B87 /* OwnPtrCommon.h in Headers */,
@@ -2300,8 +2298,6 @@
BCFBE696122560E800309E9D /* PassOwnArrayPtr.h in Headers */,
44DD48530FAEA85000D6B4EB /* PassOwnPtr.h in Headers */,
BC18C44C0E16F5CD00B34460 /* PassRefPtr.h in Headers */,
- BC18C44D0E16F5CD00B34460 /* pcre.h in Headers */,
- BC18C44E0E16F5CD00B34460 /* pcre_internal.h in Headers */,
BC18C44F0E16F5CD00B34460 /* Platform.h in Headers */,
A7D649AA1015224E009B2E1B /* PossiblyNull.h in Headers */,
BC18C4500E16F5CD00B34460 /* Profile.h in Headers */,
@@ -2383,7 +2379,6 @@
14A42E400F4F60EE00599099 /* TimeoutChecker.h in Headers */,
5D53726F0E1C54880021E549 /* Tracing.h in Headers */,
0B4D7E630F319AC800AD7E58 /* TypeTraits.h in Headers */,
- BC18C4720E16F5CD00B34460 /* ucpinternal.h in Headers */,
BC18C4730E16F5CD00B34460 /* Unicode.h in Headers */,
BC18C4740E16F5CD00B34460 /* UnicodeIcu.h in Headers */,
BC18C4750E16F5CD00B34460 /* UnusedParam.h in Headers */,
@@ -2413,6 +2408,13 @@
86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */,
5DE6E5B30E1728EC00180407 /* create_hash_table in Headers */,
451539B912DC994500EF7AC4 /* Yarr.h in Headers */,
+ A7DCB97312E5193F00911940 /* WriteBarrier.h in Headers */,
+ E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */,
+ E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */,
+ 14C824AD12F7C785008F35E0 /* MarkedBlock.h in Headers */,
+ E4D8CEFB12FC439600BC9F5A /* BloomFilter.h in Headers */,
+ 97941A5A13029ACC004A3447 /* OSRandomSource.h in Headers */,
+ 97941A7F1302A098004A3447 /* CryptographicallyRandomNumber.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2569,7 +2571,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "if [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
5D2F7CF90C6875BB00B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
@@ -2645,7 +2647,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../Tools/Scripts/check-for-global-initializers ]; then\n ../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
+ shellScript = "if [ -f ../../Tools/Scripts/check-for-global-initializers ]; then\n ../../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
};
933457200EBFDC3F00B80894 /* Check For Exit Time Destructors */ = {
isa = PBXShellScriptBuildPhase;
@@ -2660,7 +2662,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
+ shellScript = "if [ -f ../../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
};
/* End PBXShellScriptBuildPhase section */
@@ -2711,6 +2713,7 @@
E1A862A90D7EBB76001EC6AA /* CollatorICU.cpp in Sources */,
147F39C1107EC37600427A48 /* CommonIdentifiers.cpp in Sources */,
147F39C2107EC37600427A48 /* Completion.cpp in Sources */,
+ 146B16D812EB5B59001BEC1B /* ConservativeSet.cpp in Sources */,
1428082E107EC0570013E7B2 /* ConstructData.cpp in Sources */,
86565742115BE3DA00291F40 /* CString.cpp in Sources */,
180B9BFE0F16E94D009BDBC5 /* CurrentTime.cpp in Sources */,
@@ -2824,11 +2827,6 @@
9714AF5E122F32070092D9F5 /* ParsedURL.cpp in Sources */,
148F21BC107EC54D0042EC2C /* Parser.cpp in Sources */,
93052C340FB792190048FDC3 /* ParserArena.cpp in Sources */,
- 930754C108B0F68000AB3056 /* pcre_compile.cpp in Sources */,
- 930754EB08B0F78500AB3056 /* pcre_exec.cpp in Sources */,
- 930754D008B0F74600AB3056 /* pcre_tables.cpp in Sources */,
- 937013480CA97E0E00FA14D3 /* pcre_ucp_searchfuncs.cpp in Sources */,
- 93E26BD408B1514100F85226 /* pcre_xclass.cpp in Sources */,
95742F650DD11F5A000917FB /* Profile.cpp in Sources */,
95CD45760E1C4FDD0085358E /* ProfileGenerator.cpp in Sources */,
95AB83560DA43C3000BC83F3 /* ProfileNode.cpp in Sources */,
@@ -2858,6 +2856,7 @@
868BFA0E117CEFD100B908B1 /* StringImpl.cpp in Sources */,
14469DEC107EC7E700650446 /* StringObject.cpp in Sources */,
14469DED107EC7E700650446 /* StringPrototype.cpp in Sources */,
+ 9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */,
8626BECF11928E3900782FAB /* StringStatics.cpp in Sources */,
BCDE3B430E6C832D001453A7 /* Structure.cpp in Sources */,
7E4EE70F0EBB7A5B005934AA /* StructureChain.cpp in Sources */,
@@ -2878,7 +2877,10 @@
86704B8612DBA33700A9FE7B /* YarrJIT.cpp in Sources */,
86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */,
86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */,
- 9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */,
+ E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */,
+ 14C824AB12F7C77E008F35E0 /* MarkedBlock.cpp in Sources */,
+ 97941A5713029AAB004A3447 /* OSRandomSource.cpp in Sources */,
+ 97941A7E1302A098004A3447 /* CryptographicallyRandomNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
index aa85c88..3fcfec8 100644
--- a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
+++ b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
@@ -661,21 +661,26 @@ public:
set32Compare32(cond, left, right, dest);
}
- void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ void set32Test32(Condition cond, RegisterID reg, Imm32 mask, RegisterID dest)
{
- load32(address, ARMRegisters::S1);
if (mask.m_value == -1)
- m_assembler.cmp_r(0, ARMRegisters::S1);
+ m_assembler.cmp_r(0, reg);
else
- m_assembler.tst_r(ARMRegisters::S1, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
+ m_assembler.tst_r(reg, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
}
+ void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
+ {
+ load32(address, ARMRegisters::S1);
+ set32Test32(cond, ARMRegisters::S1, mask, dest);
+ }
+
void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
{
- // ARM doesn't have byte registers
- set32Test32(cond, address, mask, dest);
+ load8(address, ARMRegisters::S1);
+ set32Test32(cond, ARMRegisters::S1, mask, dest);
}
void add32(Imm32 imm, RegisterID src, RegisterID dest)
diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.cpp b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
index f3f5f27..5fba8bb 100644
--- a/Source/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -1361,6 +1361,7 @@ void CodeBlock::dumpStatistics()
CodeBlock::CodeBlock(ScriptExecutable* ownerExecutable, CodeType codeType, JSGlobalObject *globalObject, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset, SymbolTable* symTab, bool isConstructor)
: m_globalObject(globalObject)
+ , m_heap(&m_globalObject->globalData().heap)
, m_numCalleeRegisters(0)
, m_numVars(0)
, m_numParameters(0)
@@ -1529,12 +1530,11 @@ void CodeBlock::refStructures(Instruction* vPC) const
void CodeBlock::markAggregate(MarkStack& markStack)
{
for (size_t i = 0; i < m_constantRegisters.size(); ++i)
- markStack.append(m_constantRegisters[i].jsValue());
+ markStack.deprecatedAppend(&m_constantRegisters[i]);
for (size_t i = 0; i < m_functionExprs.size(); ++i)
m_functionExprs[i]->markAggregate(markStack);
for (size_t i = 0; i < m_functionDecls.size(); ++i)
m_functionDecls[i]->markAggregate(markStack);
- markStack.append(m_globalObject);
}
HandlerInfo* CodeBlock::handlerForBytecodeOffset(unsigned bytecodeOffset)
diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.h b/Source/JavaScriptCore/bytecode/CodeBlock.h
index 1cd0863..f8498b4 100644
--- a/Source/JavaScriptCore/bytecode/CodeBlock.h
+++ b/Source/JavaScriptCore/bytecode/CodeBlock.h
@@ -248,7 +248,8 @@ namespace JSC {
protected:
CodeBlock(ScriptExecutable* ownerExecutable, CodeType, JSGlobalObject*, PassRefPtr<SourceProvider>, unsigned sourceOffset, SymbolTable* symbolTable, bool isConstructor);
- JSGlobalObject* m_globalObject;
+ DeprecatedPtr<JSGlobalObject> m_globalObject;
+ Heap* m_heap;
public:
virtual ~CodeBlock();
@@ -485,7 +486,7 @@ namespace JSC {
unsigned addRegExp(RegExp* r) { createRareDataIfNecessary(); unsigned size = m_rareData->m_regexps.size(); m_rareData->m_regexps.append(r); return size; }
RegExp* regexp(int index) const { ASSERT(m_rareData); return m_rareData->m_regexps[index].get(); }
- JSGlobalObject* globalObject() { return m_globalObject; }
+ JSGlobalObject* globalObject() { return m_globalObject.get(); }
// Jump Tables
@@ -616,17 +617,14 @@ namespace JSC {
GlobalCodeBlock(ScriptExecutable* ownerExecutable, CodeType codeType, JSGlobalObject* globalObject, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset)
: CodeBlock(ownerExecutable, codeType, globalObject, sourceProvider, sourceOffset, &m_unsharedSymbolTable, false)
{
- m_globalObject->codeBlocks().add(this);
+ m_heap->codeBlocks().add(this);
}
~GlobalCodeBlock()
{
- if (m_globalObject)
- m_globalObject->codeBlocks().remove(this);
+ m_heap->codeBlocks().remove(this);
}
- void clearGlobalObject() { m_globalObject = 0; }
-
private:
SymbolTable m_unsharedSymbolTable;
};
diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 78c373a..0964344 100644
--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -251,7 +251,7 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const ScopeChain&
for (SymbolTable::iterator it = symbolTable->begin(); it != end; ++it)
registerFor(it->second.getIndex()).setIndex(it->second.getIndex() + m_globalVarStorageOffset);
- BatchedTransitionOptimizer optimizer(globalObject);
+ BatchedTransitionOptimizer optimizer(*m_globalData, globalObject);
const VarStack& varStack = programNode->varStack();
const FunctionStack& functionStack = programNode->functionStack();
@@ -903,7 +903,7 @@ PassRefPtr<Label> BytecodeGenerator::emitJumpIfNotFunctionCall(RegisterID* cond,
emitOpcode(op_jneq_ptr);
instructions().append(cond->index());
- instructions().append(m_scopeChain->globalObject()->d()->callFunction);
+ instructions().append(m_scopeChain->globalObject()->d()->callFunction.get());
instructions().append(target->bind(begin, instructions().size()));
return target;
}
@@ -914,7 +914,7 @@ PassRefPtr<Label> BytecodeGenerator::emitJumpIfNotFunctionApply(RegisterID* cond
emitOpcode(op_jneq_ptr);
instructions().append(cond->index());
- instructions().append(m_scopeChain->globalObject()->d()->applyFunction);
+ instructions().append(m_scopeChain->globalObject()->d()->applyFunction.get());
instructions().append(target->bind(begin, instructions().size()));
return target;
}
@@ -1117,7 +1117,7 @@ bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& inde
if (shouldOptimizeLocals() && m_codeType == GlobalCode) {
ScopeChainIterator iter = m_scopeChain->begin();
- globalObject = *iter;
+ globalObject = iter->get();
ASSERT((++iter) == m_scopeChain->end());
}
return false;
@@ -1128,7 +1128,7 @@ bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& inde
ScopeChainIterator iter = m_scopeChain->begin();
ScopeChainIterator end = m_scopeChain->end();
for (; iter != end; ++iter, ++depth) {
- JSObject* currentScope = *iter;
+ JSObject* currentScope = iter->get();
if (!currentScope->isVariableObject())
break;
JSVariableObject* currentVariableObject = static_cast<JSVariableObject*>(currentScope);
@@ -1157,7 +1157,7 @@ bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& inde
// Can't locate the property but we're able to avoid a few lookups.
stackDepth = depth + m_codeBlock->needsFullScopeChain();
index = missingSymbolMarker();
- JSObject* scope = *iter;
+ JSObject* scope = iter->get();
if (++iter == end)
globalObject = scope;
return true;
diff --git a/Source/JavaScriptCore/config.h b/Source/JavaScriptCore/config.h
index a2b6285..1c14917 100644
--- a/Source/JavaScriptCore/config.h
+++ b/Source/JavaScriptCore/config.h
@@ -57,6 +57,10 @@
#endif
+#if OS(UNIX) || OS(WINDOWS)
+#define WTF_USE_OS_RANDOMNESS 1
+#endif
+
#if OS(FREEBSD) || OS(OPENBSD)
#define HAVE_PTHREAD_NP_H 1
#endif
diff --git a/Source/JavaScriptCore/create_regex_tables b/Source/JavaScriptCore/create_regex_tables
index d1cc1c2..c6ce995 100644
--- a/Source/JavaScriptCore/create_regex_tables
+++ b/Source/JavaScriptCore/create_regex_tables
@@ -21,6 +21,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import sys
+
types = {
"wordchar": { "UseTable" : True, "data": ['_', ('0','9'), ('A', 'Z'), ('a','z')]},
"nonwordchar": { "UseTable" : True, "Inverse": "wordchar", "data": ['`', (0, ord('0') - 1), (ord('9') + 1, ord('A') - 1), (ord('Z') + 1, ord('_') - 1), (ord('z') + 1, 0xffff)]},
@@ -107,6 +109,12 @@ for name, classes in types.items():
function += ("}\n\n")
functions += function
-print(arrays)
-print(functions)
+if (len(sys.argv) > 1):
+ f = open(sys.argv[-1], "w")
+ f.write(arrays)
+ f.write(functions)
+ f.close()
+else:
+ print(arrays)
+ print(functions)
diff --git a/Source/JavaScriptCore/debugger/Debugger.cpp b/Source/JavaScriptCore/debugger/Debugger.cpp
index 23b9361..20a8485 100644
--- a/Source/JavaScriptCore/debugger/Debugger.cpp
+++ b/Source/JavaScriptCore/debugger/Debugger.cpp
@@ -22,7 +22,6 @@
#include "config.h"
#include "Debugger.h"
-#include "CollectorHeapIterator.h"
#include "Error.h"
#include "Interpreter.h"
#include "JSFunction.h"
@@ -32,6 +31,57 @@
namespace JSC {
+class Recompiler {
+public:
+ Recompiler(Debugger*);
+ ~Recompiler();
+ void operator()(JSCell*);
+
+private:
+ typedef HashSet<FunctionExecutable*> FunctionExecutableSet;
+ typedef HashMap<SourceProvider*, ExecState*> SourceProviderMap;
+
+ Debugger* m_debugger;
+ FunctionExecutableSet m_functionExecutables;
+ SourceProviderMap m_sourceProviders;
+};
+
+inline Recompiler::Recompiler(Debugger* debugger)
+ : m_debugger(debugger)
+{
+}
+
+inline Recompiler::~Recompiler()
+{
+ // Call sourceParsed() after reparsing all functions because it will execute
+ // JavaScript in the inspector.
+ SourceProviderMap::const_iterator end = m_sourceProviders.end();
+ for (SourceProviderMap::const_iterator iter = m_sourceProviders.begin(); iter != end; ++iter)
+ m_debugger->sourceParsed(iter->second, iter->first, -1, UString());
+}
+
+inline void Recompiler::operator()(JSCell* cell)
+{
+ if (!cell->inherits(&JSFunction::info))
+ return;
+
+ JSFunction* function = asFunction(cell);
+ if (function->executable()->isHostFunction())
+ return;
+
+ FunctionExecutable* executable = function->jsExecutable();
+
+ // Check if the function is already in the set - if so,
+ // we've already retranslated it, nothing to do here.
+ if (!m_functionExecutables.add(executable).second)
+ return;
+
+ ExecState* exec = function->scope().globalObject()->JSGlobalObject::globalExec();
+ executable->discardCode();
+ if (m_debugger == function->scope().globalObject()->debugger())
+ m_sourceProviders.add(executable->source().provider(), exec);
+}
+
Debugger::~Debugger()
{
HashSet<JSGlobalObject*>::iterator end = m_globalObjects.end();
@@ -61,40 +111,8 @@ void Debugger::recompileAllJSFunctions(JSGlobalData* globalData)
if (globalData->dynamicGlobalObject)
return;
- typedef HashSet<FunctionExecutable*> FunctionExecutableSet;
- typedef HashMap<SourceProvider*, ExecState*> SourceProviderMap;
-
- FunctionExecutableSet functionExecutables;
- SourceProviderMap sourceProviders;
-
- LiveObjectIterator it = globalData->heap.primaryHeapBegin();
- LiveObjectIterator heapEnd = globalData->heap.primaryHeapEnd();
- for ( ; it != heapEnd; ++it) {
- if (!(*it)->inherits(&JSFunction::info))
- continue;
-
- JSFunction* function = asFunction(*it);
- if (function->executable()->isHostFunction())
- continue;
-
- FunctionExecutable* executable = function->jsExecutable();
-
- // Check if the function is already in the set - if so,
- // we've already retranslated it, nothing to do here.
- if (!functionExecutables.add(executable).second)
- continue;
-
- ExecState* exec = function->scope().globalObject()->JSGlobalObject::globalExec();
- executable->discardCode();
- if (function->scope().globalObject()->debugger() == this)
- sourceProviders.add(executable->source().provider(), exec);
- }
-
- // Call sourceParsed() after reparsing all functions because it will execute
- // JavaScript in the inspector.
- SourceProviderMap::const_iterator end = sourceProviders.end();
- for (SourceProviderMap::const_iterator iter = sourceProviders.begin(); iter != end; ++iter)
- sourceParsed(iter->second, iter->first, -1, UString());
+ Recompiler recompiler(this);
+ globalData->heap.forEach(recompiler);
}
JSValue evaluateInGlobalCallFrame(const UString& script, JSValue& exception, JSGlobalObject* globalObject)
@@ -109,7 +127,7 @@ JSValue evaluateInGlobalCallFrame(const UString& script, JSValue& exception, JSG
JSGlobalData& globalData = globalObject->globalData();
JSValue result = globalData.interpreter->execute(eval.get(), globalCallFrame, globalObject, globalCallFrame->scopeChain());
if (globalData.exception) {
- exception = globalData.exception;
+ exception = globalData.exception.get();
globalData.exception = JSValue();
}
ASSERT(result);
diff --git a/Source/JavaScriptCore/debugger/DebuggerActivation.cpp b/Source/JavaScriptCore/debugger/DebuggerActivation.cpp
index 0444d23..fcd257c 100644
--- a/Source/JavaScriptCore/debugger/DebuggerActivation.cpp
+++ b/Source/JavaScriptCore/debugger/DebuggerActivation.cpp
@@ -30,12 +30,12 @@
namespace JSC {
-DebuggerActivation::DebuggerActivation(JSObject* activation)
+DebuggerActivation::DebuggerActivation(JSGlobalData& globalData, JSObject* activation)
: JSObject(DebuggerActivation::createStructure(jsNull()))
{
ASSERT(activation);
ASSERT(activation->isActivationObject());
- m_activation = static_cast<JSActivation*>(activation);
+ m_activation.set(globalData, this, static_cast<JSActivation*>(activation));
}
void DebuggerActivation::markChildren(MarkStack& markStack)
@@ -43,7 +43,7 @@ void DebuggerActivation::markChildren(MarkStack& markStack)
JSObject::markChildren(markStack);
if (m_activation)
- markStack.append(m_activation);
+ markStack.append(&m_activation);
}
UString DebuggerActivation::className() const
diff --git a/Source/JavaScriptCore/debugger/DebuggerActivation.h b/Source/JavaScriptCore/debugger/DebuggerActivation.h
index 3927017..b64060d 100644
--- a/Source/JavaScriptCore/debugger/DebuggerActivation.h
+++ b/Source/JavaScriptCore/debugger/DebuggerActivation.h
@@ -34,7 +34,7 @@ namespace JSC {
class DebuggerActivation : public JSObject {
public:
- DebuggerActivation(JSObject*);
+ DebuggerActivation(JSGlobalData&, JSObject*);
virtual void markChildren(MarkStack&);
virtual UString className() const;
@@ -58,7 +58,7 @@ namespace JSC {
static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesMarkChildren | JSObject::StructureFlags;
private:
- JSActivation* m_activation;
+ WriteBarrier<JSActivation> m_activation;
};
} // namespace JSC
diff --git a/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp b/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
index ed673cb..cb4592c 100644
--- a/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
+++ b/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
@@ -96,7 +96,7 @@ JSValue DebuggerCallFrame::evaluate(const UString& script, JSValue& exception) c
JSGlobalData& globalData = m_callFrame->globalData();
JSValue result = globalData.interpreter->execute(eval.get(), m_callFrame, thisObject(), m_callFrame->scopeChain());
if (globalData.exception) {
- exception = globalData.exception;
+ exception = globalData.exception.get();
globalData.exception = JSValue();
}
ASSERT(result);
diff --git a/Source/JavaScriptCore/interpreter/CallFrame.h b/Source/JavaScriptCore/interpreter/CallFrame.h
index 2797ef3..190a7c1 100644
--- a/Source/JavaScriptCore/interpreter/CallFrame.h
+++ b/Source/JavaScriptCore/interpreter/CallFrame.h
@@ -75,7 +75,7 @@ namespace JSC {
// But they're used in many places in legacy code, so they're not going away any time soon.
void clearException() { globalData().exception = JSValue(); }
- JSValue exception() const { return globalData().exception; }
+ JSValue exception() const { return globalData().exception.get(); }
bool hadException() const { return globalData().exception; }
const CommonIdentifiers& propertyNames() const { return *globalData().propertyNames; }
diff --git a/Source/JavaScriptCore/interpreter/Interpreter.cpp b/Source/JavaScriptCore/interpreter/Interpreter.cpp
index 392e8b8..c2612ac 100644
--- a/Source/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/Source/JavaScriptCore/interpreter/Interpreter.cpp
@@ -103,11 +103,11 @@ NEVER_INLINE bool Interpreter::resolve(CallFrame* callFrame, Instruction* vPC, J
CodeBlock* codeBlock = callFrame->codeBlock();
Identifier& ident = codeBlock->identifier(property);
do {
- JSObject* o = *iter;
+ JSObject* o = iter->get();
PropertySlot slot(o);
if (o->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
callFrame->uncheckedR(dst) = JSValue(result);
@@ -142,11 +142,11 @@ NEVER_INLINE bool Interpreter::resolveSkip(CallFrame* callFrame, Instruction* vP
}
Identifier& ident = codeBlock->identifier(property);
do {
- JSObject* o = *iter;
+ JSObject* o = iter->get();
PropertySlot slot(o);
if (o->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
ASSERT(result);
@@ -187,7 +187,7 @@ NEVER_INLINE bool Interpreter::resolveGlobal(CallFrame* callFrame, Instruction*
return true;
}
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
callFrame->uncheckedR(dst) = JSValue(result);
@@ -220,14 +220,14 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
++iter;
}
while (skip--) {
- JSObject* o = *iter;
+ JSObject* o = iter->get();
if (o->hasCustomProperties()) {
Identifier& ident = codeBlock->identifier(property);
do {
PropertySlot slot(o);
if (o->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
ASSERT(result);
@@ -236,7 +236,7 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
}
if (iter == end)
break;
- o = *iter;
+ o = iter->get();
++iter;
} while (true);
exceptionValue = createUndefinedVariableError(callFrame, ident);
@@ -266,7 +266,7 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
return true;
}
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
ASSERT(result);
@@ -310,11 +310,11 @@ NEVER_INLINE bool Interpreter::resolveBaseAndProperty(CallFrame* callFrame, Inst
Identifier& ident = codeBlock->identifier(property);
JSObject* base;
do {
- base = *iter;
+ base = iter->get();
PropertySlot slot(base);
if (base->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
- exceptionValue = callFrame->globalData().exception;
+ exceptionValue = callFrame->globalData().exception.get();
if (exceptionValue)
return false;
callFrame->uncheckedR(propDst) = JSValue(result);
@@ -566,11 +566,13 @@ NEVER_INLINE bool Interpreter::unwindCallFrame(CallFrame*& callFrame, JSValue ex
}
while (!scopeChain->object->inherits(&JSActivation::info))
scopeChain = scopeChain->pop();
- JSActivation* activation = asActivation(scopeChain->object);
+
+ callFrame->setScopeChain(scopeChain);
+ JSActivation* activation = asActivation(scopeChain->object.get());
activation->copyRegisters();
if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue()) {
if (!oldCodeBlock->isStrictMode())
- asArguments(arguments)->setActivation(activation);
+ asArguments(arguments)->setActivation(callFrame->globalData(), activation);
}
} else if (oldCodeBlock->usesArguments() && !oldCodeBlock->isStrictMode()) {
if (JSValue arguments = callFrame->uncheckedR(unmodifiedArgumentsRegister(oldCodeBlock->argumentsRegister())).jsValue())
@@ -648,7 +650,7 @@ static void appendSourceToError(CallFrame* callFrame, ErrorInstance* exception,
message = makeUString(message, " (near '...", codeBlock->source()->getRange(start, stop), "...')");
}
- exception->putDirect(globalData->propertyNames->message, jsString(globalData, message));
+ exception->putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, message));
}
NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSValue& exceptionValue, unsigned bytecodeOffset)
@@ -1085,7 +1087,7 @@ JSValue Interpreter::execute(EvalExecutable* eval, CallFrame* callFrame, JSObjec
for (ScopeChainNode* node = scopeChain; ; node = node->next) {
ASSERT(node);
if (node->object->isVariableObject()) {
- variableObject = static_cast<JSVariableObject*>(node->object);
+ variableObject = static_cast<JSVariableObject*>(node->object.get());
break;
}
}
@@ -1100,7 +1102,7 @@ JSValue Interpreter::execute(EvalExecutable* eval, CallFrame* callFrame, JSObjec
pushedScope = true;
}
// Scope for BatchedTransitionOptimizer
- BatchedTransitionOptimizer optimizer(variableObject);
+ BatchedTransitionOptimizer optimizer(callFrame->globalData(), variableObject);
for (unsigned i = 0; i < numVariables; ++i) {
const Identifier& ident = codeBlock->variable(i);
@@ -1371,7 +1373,7 @@ NEVER_INLINE void Interpreter::tryCacheGetByID(CallFrame* callFrame, CodeBlock*
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (baseObject->structure()->isDictionary()) {
- baseObject->flattenDictionaryObject();
+ baseObject->flattenDictionaryObject(callFrame->globalData());
offset = baseObject->structure()->get(propertyName);
}
@@ -1475,8 +1477,8 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
#define CHECK_FOR_EXCEPTION() \
do { \
- if (UNLIKELY(globalData->exception != JSValue())) { \
- exceptionValue = globalData->exception; \
+ if (UNLIKELY(globalData->exception.get() != JSValue())) { \
+ exceptionValue = globalData->exception.get(); \
goto vm_throw; \
} \
} while (0)
@@ -2408,7 +2410,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
ASSERT(iter != end);
}
ASSERT((*iter)->isVariableObject());
- JSVariableObject* scope = static_cast<JSVariableObject*>(*iter);
+ JSVariableObject* scope = static_cast<JSVariableObject*>(iter->get());
callFrame->uncheckedR(dst) = scope->registerAt(index);
ASSERT(callFrame->r(dst).jsValue());
vPC += OPCODE_LENGTH(op_get_scoped_var);
@@ -2439,7 +2441,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
}
ASSERT((*iter)->isVariableObject());
- JSVariableObject* scope = static_cast<JSVariableObject*>(*iter);
+ JSVariableObject* scope = static_cast<JSVariableObject*>(iter->get());
ASSERT(callFrame->r(value).jsValue());
scope->registerAt(index) = JSValue(callFrame->r(value).jsValue());
vPC += OPCODE_LENGTH(op_put_scoped_var);
@@ -3080,7 +3082,7 @@ skip_id_custom_self:
int value = vPC[3].u.operand;
unsigned offset = vPC[7].u.operand;
ASSERT(baseObject->offsetForLocation(baseObject->getDirectLocation(codeBlock->identifier(vPC[2].u.operand))) == offset);
- baseObject->putDirectOffset(offset, callFrame->r(value).jsValue());
+ baseObject->putDirectOffset(callFrame->globalData(), offset, callFrame->r(value).jsValue());
vPC += OPCODE_LENGTH(op_put_by_id_transition);
NEXT_INSTRUCTION();
@@ -3115,7 +3117,7 @@ skip_id_custom_self:
unsigned offset = vPC[5].u.operand;
ASSERT(baseObject->offsetForLocation(baseObject->getDirectLocation(codeBlock->identifier(vPC[2].u.operand))) == offset);
- baseObject->putDirectOffset(offset, callFrame->r(value).jsValue());
+ baseObject->putDirectOffset(callFrame->globalData(), offset, callFrame->r(value).jsValue());
vPC += OPCODE_LENGTH(op_put_by_id_replace);
NEXT_INSTRUCTION();
@@ -3309,7 +3311,7 @@ skip_id_custom_self:
if (isJSArray(globalData, baseValue)) {
JSArray* jsArray = asArray(baseValue);
if (jsArray->canSetIndex(i))
- jsArray->setIndex(i, callFrame->r(value).jsValue());
+ jsArray->setIndex(*globalData, i, callFrame->r(value).jsValue());
else
jsArray->JSArray::put(callFrame, i, callFrame->r(value).jsValue());
} else if (isJSByteArray(globalData, baseValue) && asByteArray(baseValue)->canAccessIndex(i)) {
@@ -3835,7 +3837,7 @@ skip_id_custom_self:
if (thisValue == globalObject && funcVal == globalObject->evalFunction()) {
JSValue result = callEval(callFrame, registerFile, argv, argCount, registerOffset);
- if ((exceptionValue = globalData->exception))
+ if ((exceptionValue = globalData->exception.get()))
goto vm_throw;
functionReturnValue = result;
@@ -4103,7 +4105,7 @@ skip_id_custom_self:
if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) {
if (!codeBlock->isStrictMode())
- asArguments(argumentsValue)->setActivation(asActivation(activationValue));
+ asArguments(argumentsValue)->setActivation(*globalData, asActivation(activationValue));
}
} else if (JSValue argumentsValue = callFrame->r(unmodifiedArgumentsRegister(arguments)).jsValue()) {
if (!codeBlock->isStrictMode())
diff --git a/Source/JavaScriptCore/interpreter/RegisterFile.h b/Source/JavaScriptCore/interpreter/RegisterFile.h
index 9dfc432..e9c6df1 100644
--- a/Source/JavaScriptCore/interpreter/RegisterFile.h
+++ b/Source/JavaScriptCore/interpreter/RegisterFile.h
@@ -132,8 +132,6 @@ namespace JSC {
Register* lastGlobal() const { return m_start - m_numGlobals; }
- void markCallFrames(ConservativeSet& conservativeSet, Heap* heap) { heap->markConservatively(conservativeSet, m_start, m_end); }
-
static size_t committedByteCount();
static void initializeThreading();
diff --git a/Source/JavaScriptCore/jit/ExecutableAllocator.cpp b/Source/JavaScriptCore/jit/ExecutableAllocator.cpp
index fa6db83..35531d9 100644
--- a/Source/JavaScriptCore/jit/ExecutableAllocator.cpp
+++ b/Source/JavaScriptCore/jit/ExecutableAllocator.cpp
@@ -85,7 +85,7 @@ size_t ExecutableAllocator::committedByteCount()
#error "ASSEMBLER_WX_EXCLUSIVE not yet suported on this platform."
#endif
-void ExecutableAllocator::reprotectRegion(void* start, size_t size, ProtectionSeting setting)
+void ExecutableAllocator::reprotectRegion(void* start, size_t size, ProtectionSetting setting)
{
if (!pageSize)
intializePageSize();
diff --git a/Source/JavaScriptCore/jit/ExecutableAllocator.h b/Source/JavaScriptCore/jit/ExecutableAllocator.h
index 3233412..57ee054 100644
--- a/Source/JavaScriptCore/jit/ExecutableAllocator.h
+++ b/Source/JavaScriptCore/jit/ExecutableAllocator.h
@@ -167,7 +167,7 @@ private:
};
class ExecutableAllocator {
- enum ProtectionSeting { Writable, Executable };
+ enum ProtectionSetting { Writable, Executable };
public:
static size_t pageSize;
@@ -318,7 +318,7 @@ public:
private:
#if ENABLE(ASSEMBLER_WX_EXCLUSIVE)
- static void reprotectRegion(void*, size_t, ProtectionSeting);
+ static void reprotectRegion(void*, size_t, ProtectionSetting);
#endif
RefPtr<ExecutablePool> m_smallAllocationPool;
diff --git a/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp b/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
index 9fc889e..6a945b0 100644
--- a/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
+++ b/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
@@ -42,407 +42,453 @@
#include <stdio.h>
#endif
-static const unsigned vmPoolSizeOvercommit = 2u * 1024u * 1024u * 1024u; // 2Gb
-static const unsigned coalesceLimitOvercommit = 16u * 1024u * 1024u; // 16Mb
-
-static const unsigned vmPoolSizeNoOvercommit = 32u * 1024u * 1024u; // 32Mb
-static const unsigned coalesceLimitNoOvercommit = 4u * 1024u * 1024u; // 4Mb
-
-static const unsigned vmPoolSizeEmbedded = 16u * 1024u * 1024u; // 16Mb
-static const unsigned coalesceLimitEmbedded = 4u * 1024u * 1024u; // 4Mb
-
-#if CPU(X86_64) && !OS(LINUX)
-// These limits suitable on 64-bit platforms (particularly x86-64,
-// where we require all jumps to have a 2Gb max range). We don't
-// enable this by default on Linux, since it needs overcommit and
-// distros commonly disable that feature. We'll check the value
-// for the overcommit feature at runtime and re-assign the Generic
-// values if it's enabled.
-static unsigned vmPoolSize = vmPoolSizeOvercommit;
-static unsigned coalesceLimit = coalesceLimitOvercommit;
-#elif CPU(ARM)
-static unsigned vmPoolSize = vmPoolSizeEmbedded;
-static unsigned coalesceLimit = coalesceLimitEmbedded;
-#else
-static unsigned vmPoolSize = vmPoolSizeNoOvercommit;
-static unsigned coalesceLimit = coalesceLimitNoOvercommit;
-#endif
-
using namespace WTF;
namespace JSC {
-static size_t committedBytesCount = 0;
-static SpinLock spinlock = SPINLOCK_INITIALIZER;
+#define TwoPow(n) (1ull << n)
+
+class AllocationTableSizeClass {
+public:
+ AllocationTableSizeClass(size_t size, size_t blockSize, unsigned log2BlockSize)
+ : m_blockSize(blockSize)
+ {
+ ASSERT(blockSize == TwoPow(log2BlockSize));
+
+ // Calculate the number of blocks needed to hold size.
+ size_t blockMask = blockSize - 1;
+ m_blockCount = (size + blockMask) >> log2BlockSize;
+
+ // Align to the smallest power of two >= m_blockCount.
+ m_blockAlignment = 1;
+ while (m_blockAlignment < m_blockCount)
+ m_blockAlignment += m_blockAlignment;
+ }
+
+ size_t blockSize() const { return m_blockSize; }
+ size_t blockCount() const { return m_blockCount; }
+ size_t blockAlignment() const { return m_blockAlignment; }
-// FreeListEntry describes a free chunk of memory, stored in the freeList.
-struct FreeListEntry {
- FreeListEntry(void* pointer, size_t size)
- : pointer(pointer)
- , size(size)
- , nextEntry(0)
- , less(0)
- , greater(0)
- , balanceFactor(0)
- {
- }
-
- // All entries of the same size share a single entry
- // in the AVLTree, and are linked together in a linked
- // list, using nextEntry.
- void* pointer;
- size_t size;
- FreeListEntry* nextEntry;
-
- // These fields are used by AVLTree.
- FreeListEntry* less;
- FreeListEntry* greater;
- int balanceFactor;
+ size_t size()
+ {
+ return m_blockSize * m_blockCount;
+ }
+
+private:
+ size_t m_blockSize;
+ size_t m_blockCount;
+ size_t m_blockAlignment;
};
-// Abstractor class for use in AVLTree.
-// Nodes in the AVLTree are of type FreeListEntry, keyed on
-// (and thus sorted by) their size.
-struct AVLTreeAbstractorForFreeList {
- typedef FreeListEntry* handle;
- typedef int32_t size;
- typedef size_t key;
-
- handle get_less(handle h) { return h->less; }
- void set_less(handle h, handle lh) { h->less = lh; }
- handle get_greater(handle h) { return h->greater; }
- void set_greater(handle h, handle gh) { h->greater = gh; }
- int get_balance_factor(handle h) { return h->balanceFactor; }
- void set_balance_factor(handle h, int bf) { h->balanceFactor = bf; }
-
- static handle null() { return 0; }
-
- int compare_key_key(key va, key vb) { return va - vb; }
- int compare_key_node(key k, handle h) { return compare_key_key(k, h->size); }
- int compare_node_node(handle h1, handle h2) { return compare_key_key(h1->size, h2->size); }
+template<unsigned log2Entries>
+class AllocationTableLeaf {
+ typedef uint64_t BitField;
+
+public:
+ static const unsigned log2SubregionSize = 12; // 2^12 == pagesize
+ static const unsigned log2RegionSize = log2SubregionSize + log2Entries;
+
+ static const size_t subregionSize = TwoPow(log2SubregionSize);
+ static const size_t regionSize = TwoPow(log2RegionSize);
+ static const unsigned entries = TwoPow(log2Entries);
+ COMPILE_ASSERT(entries <= (sizeof(BitField) * 8), AllocationTableLeaf_entries_fit_in_BitField);
+
+ AllocationTableLeaf()
+ : m_allocated(0)
+ {
+ }
+
+ ~AllocationTableLeaf()
+ {
+ ASSERT(isEmpty());
+ }
+
+ size_t allocate(AllocationTableSizeClass& sizeClass)
+ {
+ ASSERT(sizeClass.blockSize() == subregionSize);
+ ASSERT(!isFull());
+
+ size_t alignment = sizeClass.blockAlignment();
+ size_t count = sizeClass.blockCount();
+ // Use this mask to check for spans of free blocks.
+ BitField mask = ((1ull << count) - 1) << (alignment - count);
+
+ // Step in units of alignment size.
+ for (unsigned i = 0; i < entries; i += alignment) {
+ if (!(m_allocated & mask)) {
+ m_allocated |= mask;
+ return (i + (alignment - count)) << log2SubregionSize;
+ }
+ mask <<= alignment;
+ }
+ return notFound;
+ }
+
+ void free(size_t location, AllocationTableSizeClass& sizeClass)
+ {
+ ASSERT(sizeClass.blockSize() == subregionSize);
+
+ size_t entry = location >> log2SubregionSize;
+ size_t count = sizeClass.blockCount();
+ BitField mask = ((1ull << count) - 1) << entry;
+
+ ASSERT((m_allocated & mask) == mask);
+ m_allocated &= ~mask;
+ }
+
+ bool isEmpty()
+ {
+ return !m_allocated;
+ }
+
+ bool isFull()
+ {
+ return !~m_allocated;
+ }
+
+ static size_t size()
+ {
+ return regionSize;
+ }
+
+ static AllocationTableSizeClass classForSize(size_t size)
+ {
+ return AllocationTableSizeClass(size, subregionSize, log2SubregionSize);
+ }
+
+#ifndef NDEBUG
+ void dump(size_t parentOffset = 0, unsigned indent = 0)
+ {
+ for (unsigned i = 0; i < indent; ++i)
+ fprintf(stderr, " ");
+ fprintf(stderr, "%08x: [%016llx]\n", (int)parentOffset, m_allocated);
+ }
+#endif
+
+private:
+ BitField m_allocated;
};
-// Used to reverse sort an array of FreeListEntry pointers.
-static int reverseSortFreeListEntriesByPointer(const void* leftPtr, const void* rightPtr)
-{
- FreeListEntry* left = *(FreeListEntry**)leftPtr;
- FreeListEntry* right = *(FreeListEntry**)rightPtr;
- return (intptr_t)(right->pointer) - (intptr_t)(left->pointer);
-}
+template<class NextLevel>
+class LazyAllocationTable {
+public:
+ static const unsigned log2RegionSize = NextLevel::log2RegionSize;
+ static const unsigned entries = NextLevel::entries;
-// Used to reverse sort an array of pointers.
-static int reverseSortCommonSizedAllocations(const void* leftPtr, const void* rightPtr)
-{
- void* left = *(void**)leftPtr;
- void* right = *(void**)rightPtr;
+ LazyAllocationTable()
+ : m_ptr(0)
+ {
+ }
- return (intptr_t)right - (intptr_t)left;
-}
+ ~LazyAllocationTable()
+ {
+ ASSERT(isEmpty());
+ }
-class FixedVMPoolAllocator
-{
- // The free list is stored in a sorted tree.
- typedef AVLTree<AVLTreeAbstractorForFreeList, 40> SizeSortedFreeTree;
-
- void release(void* position, size_t size)
- {
- m_allocation.decommit(position, size);
- addToCommittedByteCount(-static_cast<long>(size));
- }
-
- void reuse(void* position, size_t size)
- {
- m_allocation.commit(position, size);
- addToCommittedByteCount(static_cast<long>(size));
- }
-
- // All addition to the free list should go through this method, rather than
- // calling insert directly, to avoid multiple entries being added with the
- // same key. All nodes being added should be singletons, they should not
- // already be a part of a chain.
- void addToFreeList(FreeListEntry* entry)
- {
- ASSERT(!entry->nextEntry);
-
- if (entry->size == m_commonSize) {
- m_commonSizedAllocations.append(entry->pointer);
- delete entry;
- } else if (FreeListEntry* entryInFreeList = m_freeList.search(entry->size, m_freeList.EQUAL)) {
- // m_freeList already contain an entry for this size - insert this node into the chain.
- entry->nextEntry = entryInFreeList->nextEntry;
- entryInFreeList->nextEntry = entry;
- } else
- m_freeList.insert(entry);
- }
-
- // We do not attempt to coalesce addition, which may lead to fragmentation;
- // instead we periodically perform a sweep to try to coalesce neighboring
- // entries in m_freeList. Presently this is triggered at the point 16MB
- // of memory has been released.
- void coalesceFreeSpace()
- {
- Vector<FreeListEntry*> freeListEntries;
- SizeSortedFreeTree::Iterator iter;
- iter.start_iter_least(m_freeList);
-
- // Empty m_freeList into a Vector.
- for (FreeListEntry* entry; (entry = *iter); ++iter) {
- // Each entry in m_freeList might correspond to multiple
- // free chunks of memory (of the same size). Walk the chain
- // (this is likely of course only be one entry long!) adding
- // each entry to the Vector (at reseting the next in chain
- // pointer to separate each node out).
- FreeListEntry* next;
- do {
- next = entry->nextEntry;
- entry->nextEntry = 0;
- freeListEntries.append(entry);
- } while ((entry = next));
+ size_t allocate(AllocationTableSizeClass& sizeClass)
+ {
+ if (!m_ptr)
+ m_ptr = new NextLevel();
+ return m_ptr->allocate(sizeClass);
+ }
+
+ void free(size_t location, AllocationTableSizeClass& sizeClass)
+ {
+ ASSERT(m_ptr);
+ m_ptr->free(location, sizeClass);
+ if (m_ptr->isEmpty()) {
+ delete m_ptr;
+ m_ptr = 0;
}
- // All entries are now in the Vector; purge the tree.
- m_freeList.purge();
-
- // Reverse-sort the freeListEntries and m_commonSizedAllocations Vectors.
- // We reverse-sort so that we can logically work forwards through memory,
- // whilst popping items off the end of the Vectors using last() and removeLast().
- qsort(freeListEntries.begin(), freeListEntries.size(), sizeof(FreeListEntry*), reverseSortFreeListEntriesByPointer);
- qsort(m_commonSizedAllocations.begin(), m_commonSizedAllocations.size(), sizeof(void*), reverseSortCommonSizedAllocations);
-
- // The entries from m_commonSizedAllocations that cannot be
- // coalesced into larger chunks will be temporarily stored here.
- Vector<void*> newCommonSizedAllocations;
-
- // Keep processing so long as entries remain in either of the vectors.
- while (freeListEntries.size() || m_commonSizedAllocations.size()) {
- // We're going to try to find a FreeListEntry node that we can coalesce onto.
- FreeListEntry* coalescionEntry = 0;
-
- // Is the lowest addressed chunk of free memory of common-size, or is it in the free list?
- if (m_commonSizedAllocations.size() && (!freeListEntries.size() || (m_commonSizedAllocations.last() < freeListEntries.last()->pointer))) {
- // Pop an item from the m_commonSizedAllocations vector - this is the lowest
- // addressed free chunk. Find out the begin and end addresses of the memory chunk.
- void* begin = m_commonSizedAllocations.last();
- void* end = (void*)((intptr_t)begin + m_commonSize);
- m_commonSizedAllocations.removeLast();
-
- // Try to find another free chunk abutting onto the end of the one we have already found.
- if (freeListEntries.size() && (freeListEntries.last()->pointer == end)) {
- // There is an existing FreeListEntry for the next chunk of memory!
- // we can reuse this. Pop it off the end of m_freeList.
- coalescionEntry = freeListEntries.last();
- freeListEntries.removeLast();
- // Update the existing node to include the common-sized chunk that we also found.
- coalescionEntry->pointer = (void*)((intptr_t)coalescionEntry->pointer - m_commonSize);
- coalescionEntry->size += m_commonSize;
- } else if (m_commonSizedAllocations.size() && (m_commonSizedAllocations.last() == end)) {
- // There is a second common-sized chunk that can be coalesced.
- // Allocate a new node.
- m_commonSizedAllocations.removeLast();
- coalescionEntry = new FreeListEntry(begin, 2 * m_commonSize);
- } else {
- // Nope - this poor little guy is all on his own. :-(
- // Add him into the newCommonSizedAllocations vector for now, we're
- // going to end up adding him back into the m_commonSizedAllocations
- // list when we're done.
- newCommonSizedAllocations.append(begin);
+ }
+
+ bool isEmpty()
+ {
+ return !m_ptr;
+ }
+
+ bool isFull()
+ {
+ return m_ptr && m_ptr->isFull();
+ }
+
+ static size_t size()
+ {
+ return NextLevel::size();
+ }
+
+#ifndef NDEBUG
+ void dump(size_t parentOffset = 0, unsigned indent = 0)
+ {
+ ASSERT(m_ptr);
+ m_ptr->dump(parentOffset, indent);
+ }
+#endif
+
+ static AllocationTableSizeClass classForSize(size_t size)
+ {
+ return NextLevel::classForSize(size);
+ }
+
+private:
+ NextLevel* m_ptr;
+};
+
+template<class NextLevel, unsigned log2Entries>
+class AllocationTableDirectory {
+ typedef uint64_t BitField;
+
+public:
+ static const unsigned log2SubregionSize = NextLevel::log2RegionSize;
+ static const unsigned log2RegionSize = log2SubregionSize + log2Entries;
+
+ static const size_t subregionSize = TwoPow(log2SubregionSize);
+ static const size_t regionSize = TwoPow(log2RegionSize);
+ static const unsigned entries = TwoPow(log2Entries);
+ COMPILE_ASSERT(entries <= (sizeof(BitField) * 8), AllocationTableDirectory_entries_fit_in_BitField);
+
+ AllocationTableDirectory()
+ : m_full(0)
+ , m_hasSuballocation(0)
+ {
+ }
+
+ ~AllocationTableDirectory()
+ {
+ ASSERT(isEmpty());
+ }
+
+ size_t allocate(AllocationTableSizeClass& sizeClass)
+ {
+ ASSERT(sizeClass.blockSize() <= subregionSize);
+ ASSERT(!isFull());
+
+ if (sizeClass.blockSize() < subregionSize) {
+ BitField bit = 1;
+ for (unsigned i = 0; i < entries; ++i, bit += bit) {
+ if (m_full & bit)
continue;
+ size_t location = m_suballocations[i].allocate(sizeClass);
+ if (location != notFound) {
+ // If this didn't already have a subregion, it does now!
+ m_hasSuballocation |= bit;
+ // Mirror the suballocation's full bit.
+ if (m_suballocations[i].isFull())
+ m_full |= bit;
+ return (i * subregionSize) | location;
}
- } else {
- ASSERT(freeListEntries.size());
- ASSERT(!m_commonSizedAllocations.size() || (freeListEntries.last()->pointer < m_commonSizedAllocations.last()));
- // The lowest addressed item is from m_freeList; pop it from the Vector.
- coalescionEntry = freeListEntries.last();
- freeListEntries.removeLast();
}
-
- // Right, we have a FreeListEntry, we just need check if there is anything else
- // to coalesce onto the end.
- ASSERT(coalescionEntry);
- while (true) {
- // Calculate the end address of the chunk we have found so far.
- void* end = (void*)((intptr_t)coalescionEntry->pointer - coalescionEntry->size);
-
- // Is there another chunk adjacent to the one we already have?
- if (freeListEntries.size() && (freeListEntries.last()->pointer == end)) {
- // Yes - another FreeListEntry -pop it from the list.
- FreeListEntry* coalescee = freeListEntries.last();
- freeListEntries.removeLast();
- // Add it's size onto our existing node.
- coalescionEntry->size += coalescee->size;
- delete coalescee;
- } else if (m_commonSizedAllocations.size() && (m_commonSizedAllocations.last() == end)) {
- // We can coalesce the next common-sized chunk.
- m_commonSizedAllocations.removeLast();
- coalescionEntry->size += m_commonSize;
- } else
- break; // Nope, nothing to be added - stop here.
+ return notFound;
+ }
+
+ // A block is allocated if either it is fully allocated or contains suballocations.
+ BitField allocated = m_full | m_hasSuballocation;
+
+ size_t alignment = sizeClass.blockAlignment();
+ size_t count = sizeClass.blockCount();
+ // Use this mask to check for spans of free blocks.
+ BitField mask = ((1ull << count) - 1) << (alignment - count);
+
+ // Step in units of alignment size.
+ for (unsigned i = 0; i < entries; i += alignment) {
+ if (!(allocated & mask)) {
+ m_full |= mask;
+ return (i + (alignment - count)) << log2SubregionSize;
}
+ mask <<= alignment;
+ }
+ return notFound;
+ }
- // We've coalesced everything we can onto the current chunk.
- // Add it back into m_freeList.
- addToFreeList(coalescionEntry);
+ void free(size_t location, AllocationTableSizeClass& sizeClass)
+ {
+ ASSERT(sizeClass.blockSize() <= subregionSize);
+
+ size_t entry = location >> log2SubregionSize;
+
+ if (sizeClass.blockSize() < subregionSize) {
+ BitField bit = 1ull << entry;
+ m_suballocations[entry].free(location & (subregionSize - 1), sizeClass);
+ // Check if the suballocation is now empty.
+ if (m_suballocations[entry].isEmpty())
+ m_hasSuballocation &= ~bit;
+ // No need to check, it clearly isn't full any more!
+ m_full &= ~bit;
+ } else {
+ size_t count = sizeClass.blockCount();
+ BitField mask = ((1ull << count) - 1) << entry;
+ ASSERT((m_full & mask) == mask);
+ ASSERT(!(m_hasSuballocation & mask));
+ m_full &= ~mask;
}
+ }
- // All chunks of free memory larger than m_commonSize should be
- // back in m_freeList by now. All that remains to be done is to
- // copy the contents on the newCommonSizedAllocations back into
- // the m_commonSizedAllocations Vector.
- ASSERT(m_commonSizedAllocations.size() == 0);
- m_commonSizedAllocations.append(newCommonSizedAllocations);
+ bool isEmpty()
+ {
+ return !(m_full | m_hasSuballocation);
}
-public:
+ bool isFull()
+ {
+ return !~m_full;
+ }
+
+ static size_t size()
+ {
+ return regionSize;
+ }
+
+ static AllocationTableSizeClass classForSize(size_t size)
+ {
+ if (size < subregionSize) {
+ AllocationTableSizeClass sizeClass = NextLevel::classForSize(size);
+ if (sizeClass.size() < NextLevel::size())
+ return sizeClass;
+ }
+ return AllocationTableSizeClass(size, subregionSize, log2SubregionSize);
+ }
+
+#ifndef NDEBUG
+ void dump(size_t parentOffset = 0, unsigned indent = 0)
+ {
+ for (unsigned i = 0; i < indent; ++i)
+ fprintf(stderr, " ");
+ fprintf(stderr, "%08x: [", (int)parentOffset);
+ for (unsigned i = 0; i < entries; ++i) {
+ BitField bit = 1ull << i;
+ char c = m_hasSuballocation & bit
+ ? (m_full & bit ? 'N' : 'n')
+ : (m_full & bit ? 'F' : '-');
+ fprintf(stderr, "%c", c);
+ }
+ fprintf(stderr, "]\n");
+
+ for (unsigned i = 0; i < entries; ++i) {
+ BitField bit = 1ull << i;
+ size_t offset = parentOffset | (subregionSize * i);
+ if (m_hasSuballocation & bit)
+ m_suballocations[i].dump(offset, indent + 1);
+ }
+ }
+#endif
+
+private:
+ NextLevel m_suballocations[entries];
+ // Subregions exist in one of four states:
+ // (1) empty (both bits clear)
+ // (2) fully allocated as a single allocation (m_full set)
+ // (3) partially allocated through suballocations (m_hasSuballocation set)
+ // (4) fully allocated through suballocations (both bits set)
+ BitField m_full;
+ BitField m_hasSuballocation;
+};
+
+
+typedef AllocationTableLeaf<6> PageTables256KB;
+typedef AllocationTableDirectory<PageTables256KB, 6> PageTables16MB;
+typedef AllocationTableDirectory<LazyAllocationTable<PageTables16MB>, 1> PageTables32MB;
+typedef AllocationTableDirectory<LazyAllocationTable<PageTables16MB>, 6> PageTables1GB;
+
+#if CPU(ARM)
+typedef PageTables16MB FixedVMPoolPageTables;
+#elif CPU(X86_64)
+typedef PageTables1GB FixedVMPoolPageTables;
+#else
+typedef PageTables32MB FixedVMPoolPageTables;
+#endif
+
- FixedVMPoolAllocator(size_t commonSize, size_t totalHeapSize)
- : m_commonSize(commonSize)
- , m_countFreedSinceLastCoalesce(0)
+class FixedVMPoolAllocator
+{
+public:
+ FixedVMPoolAllocator()
{
- m_allocation = PageReservation::reserve(totalHeapSize, OSAllocator::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
+ ASSERT(PageTables256KB::size() == 256 * 1024);
+ ASSERT(PageTables16MB::size() == 16 * 1024 * 1024);
+ ASSERT(PageTables32MB::size() == 32 * 1024 * 1024);
+ ASSERT(PageTables1GB::size() == 1024 * 1024 * 1024);
- if (!!m_allocation)
- m_freeList.insert(new FreeListEntry(m_allocation.base(), m_allocation.size()));
+ m_reservation = PageReservation::reserve(FixedVMPoolPageTables::size(), OSAllocator::JSJITCodePages, EXECUTABLE_POOL_WRITABLE, true);
#if !ENABLE(INTERPRETER)
- else
+ if (!isValid())
CRASH();
#endif
}
-
- ExecutablePool::Allocation alloc(size_t size)
+
+ ExecutablePool::Allocation alloc(size_t requestedSize)
{
- return ExecutablePool::Allocation(allocInternal(size), size);
+ ASSERT(requestedSize);
+ AllocationTableSizeClass sizeClass = classForSize(requestedSize);
+ size_t size = sizeClass.size();
+ ASSERT(size);
+
+ if (size >= FixedVMPoolPageTables::size())
+ CRASH();
+ if (m_pages.isFull())
+ CRASH();
+
+ size_t offset = m_pages.allocate(sizeClass);
+ if (offset == notFound)
+ CRASH();
+
+ void* pointer = offsetToPointer(offset);
+ m_reservation.commit(pointer, size);
+ return ExecutablePool::Allocation(pointer, size);
}
void free(ExecutablePool::Allocation allocation)
{
void* pointer = allocation.base();
size_t size = allocation.size();
+ ASSERT(size);
- ASSERT(!!m_allocation);
- // Call release to report to the operating system that this
- // memory is no longer in use, and need not be paged out.
- ASSERT(isWithinVMPool(pointer, size));
- release(pointer, size);
-
- // Common-sized allocations are stored in the m_commonSizedAllocations
- // vector; all other freed chunks are added to m_freeList.
- if (size == m_commonSize)
- m_commonSizedAllocations.append(pointer);
- else
- addToFreeList(new FreeListEntry(pointer, size));
-
- // Do some housekeeping. Every time we reach a point that
- // 16MB of allocations have been freed, sweep m_freeList
- // coalescing any neighboring fragments.
- m_countFreedSinceLastCoalesce += size;
- if (m_countFreedSinceLastCoalesce >= coalesceLimit) {
- m_countFreedSinceLastCoalesce = 0;
- coalesceFreeSpace();
- }
+ m_reservation.decommit(pointer, size);
+
+ AllocationTableSizeClass sizeClass = classForSize(size);
+ ASSERT(sizeClass.size() == size);
+ m_pages.free(pointerToOffset(pointer), sizeClass);
}
- bool isValid() const { return !!m_allocation; }
+ size_t allocated()
+ {
+ return m_reservation.committed();
+ }
-private:
- void* allocInternal(size_t size)
+ bool isValid() const
{
-#if ENABLE(INTERPRETER)
- if (!m_allocation)
- return 0;
-#else
- ASSERT(!!m_allocation);
-#endif
- void* result;
-
- // Freed allocations of the common size are not stored back into the main
- // m_freeList, but are instead stored in a separate vector. If the request
- // is for a common sized allocation, check this list.
- if ((size == m_commonSize) && m_commonSizedAllocations.size()) {
- result = m_commonSizedAllocations.last();
- m_commonSizedAllocations.removeLast();
- } else {
- // Search m_freeList for a suitable sized chunk to allocate memory from.
- FreeListEntry* entry = m_freeList.search(size, m_freeList.GREATER_EQUAL);
-
- // This would be bad news.
- if (!entry) {
- // Errk! Lets take a last-ditch desperation attempt at defragmentation...
- coalesceFreeSpace();
- // Did that free up a large enough chunk?
- entry = m_freeList.search(size, m_freeList.GREATER_EQUAL);
- // No?... *BOOM!*
- if (!entry)
- CRASH();
- }
- ASSERT(entry->size != m_commonSize);
-
- // Remove the entry from m_freeList. But! -
- // Each entry in the tree may represent a chain of multiple chunks of the
- // same size, and we only want to remove one on them. So, if this entry
- // does have a chain, just remove the first-but-one item from the chain.
- if (FreeListEntry* next = entry->nextEntry) {
- // We're going to leave 'entry' in the tree; remove 'next' from its chain.
- entry->nextEntry = next->nextEntry;
- next->nextEntry = 0;
- entry = next;
- } else
- m_freeList.remove(entry->size);
-
- // Whoo!, we have a result!
- ASSERT(entry->size >= size);
- result = entry->pointer;
-
- // If the allocation exactly fits the chunk we found in the,
- // m_freeList then the FreeListEntry node is no longer needed.
- if (entry->size == size)
- delete entry;
- else {
- // There is memory left over, and it is not of the common size.
- // We can reuse the existing FreeListEntry node to add this back
- // into m_freeList.
- entry->pointer = (void*)((intptr_t)entry->pointer + size);
- entry->size -= size;
- addToFreeList(entry);
- }
- }
+ return !!m_reservation;
+ }
- // Call reuse to report to the operating system that this memory is in use.
- ASSERT(isWithinVMPool(result, size));
- reuse(result, size);
- return result;
+private:
+ AllocationTableSizeClass classForSize(size_t size)
+ {
+ return FixedVMPoolPageTables::classForSize(size);
}
-#ifndef NDEBUG
- bool isWithinVMPool(void* pointer, size_t size)
+ void* offsetToPointer(size_t offset)
{
- return pointer >= m_allocation.base() && (reinterpret_cast<char*>(pointer) + size <= reinterpret_cast<char*>(m_allocation.base()) + m_allocation.size());
+ return reinterpret_cast<void*>(reinterpret_cast<intptr_t>(m_reservation.base()) + offset);
}
-#endif
- void addToCommittedByteCount(long byteCount)
+ size_t pointerToOffset(void* pointer)
{
- ASSERT(spinlock.IsHeld());
- ASSERT(static_cast<long>(committedBytesCount) + byteCount > -1);
- committedBytesCount += byteCount;
+ return reinterpret_cast<intptr_t>(pointer) - reinterpret_cast<intptr_t>(m_reservation.base());
}
- // Freed space from the most common sized allocations will be held in this list, ...
- const size_t m_commonSize;
- Vector<void*> m_commonSizedAllocations;
+ PageReservation m_reservation;
+ FixedVMPoolPageTables m_pages;
+};
- // ... and all other freed allocations are held in m_freeList.
- SizeSortedFreeTree m_freeList;
- // This is used for housekeeping, to trigger defragmentation of the freed lists.
- size_t m_countFreedSinceLastCoalesce;
+static SpinLock spinlock = SPINLOCK_INITIALIZER;
+static FixedVMPoolAllocator* allocator = 0;
- PageReservation m_allocation;
-};
size_t ExecutableAllocator::committedByteCount()
{
SpinLockHolder lockHolder(&spinlock);
- return committedBytesCount;
+ return allocator ? allocator->allocated() : 0;
}
void ExecutableAllocator::intializePageSize()
@@ -450,37 +496,11 @@ void ExecutableAllocator::intializePageSize()
ExecutableAllocator::pageSize = getpagesize();
}
-static FixedVMPoolAllocator* allocator = 0;
-static size_t allocatedCount = 0;
-
-#if OS(LINUX)
-static void maybeModifyVMPoolSize()
-{
- FILE* fp = fopen("/proc/sys/vm/overcommit_memory", "r");
- if (!fp)
- return;
-
- unsigned overcommit = 0;
- if (fscanf(fp, "%u", &overcommit) == 1) {
- if (overcommit == 1) {
- vmPoolSize = vmPoolSizeOvercommit;
- coalesceLimit = coalesceLimitOvercommit;
- }
- }
-
- fclose(fp);
-}
-#endif
-
bool ExecutableAllocator::isValid() const
{
SpinLockHolder lock_holder(&spinlock);
- if (!allocator) {
-#if OS(LINUX)
- maybeModifyVMPoolSize();
-#endif
- allocator = new FixedVMPoolAllocator(JIT_ALLOCATOR_LARGE_ALLOC_SIZE, vmPoolSize);
- }
+ if (!allocator)
+ allocator = new FixedVMPoolAllocator();
return allocator->isValid();
}
@@ -488,14 +508,13 @@ bool ExecutableAllocator::underMemoryPressure()
{
// Technically we should take the spin lock here, but we don't care if we get stale data.
// This is only really a heuristic anyway.
- return allocatedCount > (vmPoolSize / 2);
+ return allocator && (allocator->allocated() > (FixedVMPoolPageTables::size() / 2));
}
ExecutablePool::Allocation ExecutablePool::systemAlloc(size_t size)
{
SpinLockHolder lock_holder(&spinlock);
ASSERT(allocator);
- allocatedCount += size;
return allocator->alloc(size);
}
@@ -503,7 +522,6 @@ void ExecutablePool::systemRelease(ExecutablePool::Allocation& allocation)
{
SpinLockHolder lock_holder(&spinlock);
ASSERT(allocator);
- allocatedCount -= allocation.size();
allocator->free(allocation);
}
diff --git a/Source/JavaScriptCore/jit/JIT.cpp b/Source/JavaScriptCore/jit/JIT.cpp
index b8bd718..29e3778 100644
--- a/Source/JavaScriptCore/jit/JIT.cpp
+++ b/Source/JavaScriptCore/jit/JIT.cpp
@@ -587,22 +587,6 @@ JITCode JIT::privateCompile(CodePtr* functionEntryArityCheck)
return patchBuffer.finalizeCode();
}
-#if USE(JSVALUE64)
-void JIT::emitGetVariableObjectRegister(RegisterID variableObject, int index, RegisterID dst)
-{
- loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject, d)), dst);
- loadPtr(Address(dst, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), dst);
- loadPtr(Address(dst, index * sizeof(Register)), dst);
-}
-
-void JIT::emitPutVariableObjectRegister(RegisterID src, RegisterID variableObject, int index)
-{
- loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject, d)), variableObject);
- loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), variableObject);
- storePtr(src, Address(variableObject, index * sizeof(Register)));
-}
-#endif
-
#if ENABLE(JIT_OPTIMIZE_CALL)
void JIT::unlinkCallOrConstruct(CallLinkInfo* callLinkInfo)
{
diff --git a/Source/JavaScriptCore/jit/JIT.h b/Source/JavaScriptCore/jit/JIT.h
index 45ed436..dc1650d 100644
--- a/Source/JavaScriptCore/jit/JIT.h
+++ b/Source/JavaScriptCore/jit/JIT.h
@@ -505,9 +505,6 @@ namespace JSC {
int32_t getConstantOperandImmediateInt(unsigned src);
- void emitGetVariableObjectRegister(RegisterID variableObject, int index, RegisterID dst);
- void emitPutVariableObjectRegister(RegisterID src, RegisterID variableObject, int index);
-
void killLastResultRegister();
Jump emitJumpIfJSCell(RegisterID);
diff --git a/Source/JavaScriptCore/jit/JITOpcodes.cpp b/Source/JavaScriptCore/jit/JITOpcodes.cpp
index 98cb2f3..f458ea2 100644
--- a/Source/JavaScriptCore/jit/JITOpcodes.cpp
+++ b/Source/JavaScriptCore/jit/JITOpcodes.cpp
@@ -455,8 +455,8 @@ void JIT::emit_op_construct(Instruction* currentInstruction)
void JIT::emit_op_get_global_var(Instruction* currentInstruction)
{
JSVariableObject* globalObject = m_codeBlock->globalObject();
- move(ImmPtr(globalObject), regT0);
- emitGetVariableObjectRegister(regT0, currentInstruction[2].u.operand, regT0);
+ loadPtr(&globalObject->d->registers, regT0);
+ loadPtr(Address(regT0, currentInstruction[2].u.operand * sizeof(Register)), regT0);
emitPutVirtualRegister(currentInstruction[1].u.operand);
}
@@ -464,8 +464,8 @@ void JIT::emit_op_put_global_var(Instruction* currentInstruction)
{
emitGetVirtualRegister(currentInstruction[2].u.operand, regT1);
JSVariableObject* globalObject = m_codeBlock->globalObject();
- move(ImmPtr(globalObject), regT0);
- emitPutVariableObjectRegister(regT1, regT0, currentInstruction[1].u.operand);
+ loadPtr(&globalObject->d->registers, regT0);
+ storePtr(regT1, Address(regT0, currentInstruction[1].u.operand * sizeof(Register)));
}
void JIT::emit_op_get_scoped_var(Instruction* currentInstruction)
@@ -486,7 +486,9 @@ void JIT::emit_op_get_scoped_var(Instruction* currentInstruction)
loadPtr(Address(regT0, OBJECT_OFFSETOF(ScopeChainNode, next)), regT0);
loadPtr(Address(regT0, OBJECT_OFFSETOF(ScopeChainNode, object)), regT0);
- emitGetVariableObjectRegister(regT0, currentInstruction[2].u.operand, regT0);
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSVariableObject, d)), regT0);
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), regT0);
+ loadPtr(Address(regT0, currentInstruction[2].u.operand * sizeof(Register)), regT0);
emitPutVirtualRegister(currentInstruction[1].u.operand);
}
@@ -509,7 +511,9 @@ void JIT::emit_op_put_scoped_var(Instruction* currentInstruction)
loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, next)), regT1);
loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, object)), regT1);
- emitPutVariableObjectRegister(regT0, regT1, currentInstruction[1].u.operand);
+ loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject, d)), regT1);
+ loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), regT1);
+ storePtr(regT0, Address(regT1, currentInstruction[1].u.operand * sizeof(Register)));
}
void JIT::emit_op_tear_off_activation(Instruction* currentInstruction)
diff --git a/Source/JavaScriptCore/jit/JITStubs.cpp b/Source/JavaScriptCore/jit/JITStubs.cpp
index 9126ea7..74f505f 100644
--- a/Source/JavaScriptCore/jit/JITStubs.cpp
+++ b/Source/JavaScriptCore/jit/JITStubs.cpp
@@ -221,7 +221,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
"ret" "\n"
);
-#elif COMPILER(GCC) && CPU(ARM_THUMB2)
+#elif (COMPILER(GCC) || COMPILER(RVCT)) && CPU(ARM_THUMB2)
#define THUNK_RETURN_ADDRESS_OFFSET 0x38
#define PRESERVED_RETURN_ADDRESS_OFFSET 0x3C
@@ -321,58 +321,7 @@ extern "C" {
#else // USE(JSVALUE32_64)
-#if COMPILER(GCC) && CPU(X86)
-
-// These ASSERTs remind you that, if you change the layout of JITStackFrame, you
-// need to change the assembly trampolines below to match.
-COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x38, JITStackFrame_callFrame_offset_matches_ctiTrampoline);
-COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x30, JITStackFrame_code_offset_matches_ctiTrampoline);
-COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x1c, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
-
-asm (
-".text\n"
-".globl " SYMBOL_STRING(ctiTrampoline) "\n"
-HIDE_SYMBOL(ctiTrampoline) "\n"
-SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "pushl %ebp" "\n"
- "movl %esp, %ebp" "\n"
- "pushl %esi" "\n"
- "pushl %edi" "\n"
- "pushl %ebx" "\n"
- "subl $0x1c, %esp" "\n"
- "movl $512, %esi" "\n"
- "movl 0x38(%esp), %edi" "\n"
- "call *0x30(%esp)" "\n"
- "addl $0x1c, %esp" "\n"
- "popl %ebx" "\n"
- "popl %edi" "\n"
- "popl %esi" "\n"
- "popl %ebp" "\n"
- "ret" "\n"
-);
-
-asm (
-".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
-HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
-SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "movl %esp, %ecx" "\n"
- "call " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n"
- "int3" "\n"
-);
-
-asm (
-".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
-HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
-SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
- "addl $0x1c, %esp" "\n"
- "popl %ebx" "\n"
- "popl %edi" "\n"
- "popl %esi" "\n"
- "popl %ebp" "\n"
- "ret" "\n"
-);
-
-#elif COMPILER(GCC) && CPU(X86_64)
+#if COMPILER(GCC) && CPU(X86_64)
// These ASSERTs remind you that, if you change the layout of JITStackFrame, you
// need to change the assembly trampolines below to match.
@@ -438,97 +387,6 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
"ret" "\n"
);
-#elif COMPILER(GCC) && CPU(ARM_THUMB2)
-
-#define THUNK_RETURN_ADDRESS_OFFSET 0x20
-#define PRESERVED_RETURN_ADDRESS_OFFSET 0x24
-#define PRESERVED_R4_OFFSET 0x28
-#define PRESERVED_R5_OFFSET 0x2C
-#define PRESERVED_R6_OFFSET 0x30
-#define REGISTER_FILE_OFFSET 0x34
-#define CALLFRAME_OFFSET 0x38
-#define EXCEPTION_OFFSET 0x3C
-#define ENABLE_PROFILER_REFERENCE_OFFSET 0x40
-
-#elif (COMPILER(GCC) || COMPILER(RVCT)) && CPU(ARM_TRADITIONAL)
-
-#define THUNK_RETURN_ADDRESS_OFFSET 32
-#define PRESERVEDR4_OFFSET 36
-
-#elif CPU(MIPS)
-
-#define PRESERVED_GP_OFFSET 28
-#define PRESERVED_S0_OFFSET 32
-#define PRESERVED_S1_OFFSET 36
-#define PRESERVED_S2_OFFSET 40
-#define PRESERVED_RETURN_ADDRESS_OFFSET 44
-#define THUNK_RETURN_ADDRESS_OFFSET 48
-#define REGISTER_FILE_OFFSET 52
-#define CALLFRAME_OFFSET 56
-#define EXCEPTION_OFFSET 60
-#define ENABLE_PROFILER_REFERENCE_OFFSET 64
-#define GLOBAL_DATA_OFFSET 68
-#define STACK_LENGTH 72
-
-#elif COMPILER(MSVC) && CPU(X86)
-
-// These ASSERTs remind you that, if you change the layout of JITStackFrame, you
-// need to change the assembly trampolines below to match.
-COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x38, JITStackFrame_callFrame_offset_matches_ctiTrampoline);
-COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x30, JITStackFrame_code_offset_matches_ctiTrampoline);
-COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x1c, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
-
-extern "C" {
-
- __declspec(naked) EncodedJSValue ctiTrampoline(void* code, RegisterFile*, CallFrame*, void* /*unused1*/, Profiler**, JSGlobalData*)
- {
- __asm {
- push ebp;
- mov ebp, esp;
- push esi;
- push edi;
- push ebx;
- sub esp, 0x1c;
- mov esi, 512;
- mov ecx, esp;
- mov edi, [esp + 0x38];
- call [esp + 0x30];
- add esp, 0x1c;
- pop ebx;
- pop edi;
- pop esi;
- pop ebp;
- ret;
- }
- }
-
- __declspec(naked) void ctiVMThrowTrampoline()
- {
- __asm {
- mov ecx, esp;
- call cti_vm_throw;
- add esp, 0x1c;
- pop ebx;
- pop edi;
- pop esi;
- pop ebp;
- ret;
- }
- }
-
- __declspec(naked) void ctiOpThrowNotCaught()
- {
- __asm {
- add esp, 0x1c;
- pop ebx;
- pop edi;
- pop esi;
- pop ebp;
- ret;
- }
- }
-}
-
#else
#error "JIT not supported on this platform."
#endif
@@ -987,7 +845,7 @@ NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* co
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (slotBaseObject->structure()->isDictionary()) {
- slotBaseObject->flattenDictionaryObject();
+ slotBaseObject->flattenDictionaryObject(callFrame->globalData());
offset = slotBaseObject->structure()->get(propertyName);
}
@@ -1084,17 +942,17 @@ static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalD
#define CHECK_FOR_EXCEPTION() \
do { \
- if (UNLIKELY(stackFrame.globalData->exception)) \
+ if (UNLIKELY(stackFrame.globalData->exception.get())) \
VM_THROW_EXCEPTION(); \
} while (0)
#define CHECK_FOR_EXCEPTION_AT_END() \
do { \
- if (UNLIKELY(stackFrame.globalData->exception)) \
+ if (UNLIKELY(stackFrame.globalData->exception.get())) \
VM_THROW_EXCEPTION_AT_END(); \
} while (0)
#define CHECK_FOR_EXCEPTION_VOID() \
do { \
- if (UNLIKELY(stackFrame.globalData->exception)) { \
+ if (UNLIKELY(stackFrame.globalData->exception.get())) { \
VM_THROW_EXCEPTION_AT_END(); \
return; \
} \
@@ -1608,7 +1466,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_method_check)
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (slotBaseObject->structure()->isDictionary())
- slotBaseObject->flattenDictionaryObject();
+ slotBaseObject->flattenDictionaryObject(callFrame->globalData());
// The result fetched should always be the callee!
ASSERT(result == JSValue(callee));
@@ -1798,7 +1656,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_proto_list)
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (slotBaseObject->structure()->isDictionary()) {
- slotBaseObject->flattenDictionaryObject();
+ slotBaseObject->flattenDictionaryObject(callFrame->globalData());
offset = slotBaseObject->structure()->get(propertyName);
}
@@ -2289,7 +2147,7 @@ DEFINE_STUB_FUNCTION(void, op_tear_off_activation)
activation->copyRegisters();
if (JSValue v = stackFrame.args[1].jsValue()) {
if (!stackFrame.callFrame->codeBlock()->isStrictMode())
- asArguments(v)->setActivation(activation);
+ asArguments(v)->setActivation(*stackFrame.globalData, activation);
}
}
@@ -2346,7 +2204,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve)
Identifier& ident = stackFrame.args[0].identifier();
do {
- JSObject* o = *iter;
+ JSObject* o = iter->get();
PropertySlot slot(o);
if (o->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
@@ -2539,7 +2397,7 @@ DEFINE_STUB_FUNCTION(void, op_put_by_val)
if (isJSArray(globalData, baseValue)) {
JSArray* jsArray = asArray(baseValue);
if (jsArray->canSetIndex(i))
- jsArray->setIndex(i, value);
+ jsArray->setIndex(*globalData, i, value);
else
jsArray->JSArray::put(callFrame, i, value);
} else if (isJSByteArray(globalData, baseValue) && asByteArray(baseValue)->canAccessIndex(i)) {
@@ -2787,7 +2645,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve_skip)
}
Identifier& ident = stackFrame.args[0].identifier();
do {
- JSObject* o = *iter;
+ JSObject* o = iter->get();
PropertySlot slot(o);
if (o->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
@@ -3116,7 +2974,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve_with_base)
Identifier& ident = stackFrame.args[0].identifier();
JSObject* base;
do {
- base = *iter;
+ base = iter->get();
PropertySlot slot(base);
if (base->getPropertySlot(callFrame, ident, slot)) {
JSValue result = slot.getValue(callFrame, ident);
@@ -3622,7 +3480,7 @@ DEFINE_STUB_FUNCTION(void*, vm_throw)
{
STUB_INIT_STACK_FRAME(stackFrame);
JSGlobalData* globalData = stackFrame.globalData;
- ExceptionHandler handler = jitThrow(globalData, stackFrame.callFrame, globalData->exception, globalData->exceptionLocation);
+ ExceptionHandler handler = jitThrow(globalData, stackFrame.callFrame, globalData->exception.get(), globalData->exceptionLocation);
STUB_SET_RETURN_ADDRESS(handler.catchRoutine);
return handler.callFrame;
}
diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp
index dd4b677..912b51a 100644
--- a/Source/JavaScriptCore/jsc.cpp
+++ b/Source/JavaScriptCore/jsc.cpp
@@ -169,7 +169,7 @@ GlobalObject::GlobalObject(const Vector<UString>& arguments)
JSObject* array = constructEmptyArray(globalExec());
for (size_t i = 0; i < arguments.size(); ++i)
array->put(globalExec(), i, jsString(globalExec(), arguments[i]));
- putDirect(Identifier(globalExec(), "arguments"), array);
+ putDirect(globalExec()->globalData(), Identifier(globalExec(), "arguments"), array);
}
EncodedJSValue JSC_HOST_CALL functionPrint(ExecState* exec)
diff --git a/Source/JavaScriptCore/jsc.pro b/Source/JavaScriptCore/jsc.pro
index 7c90f37..b4db812 100644
--- a/Source/JavaScriptCore/jsc.pro
+++ b/Source/JavaScriptCore/jsc.pro
@@ -9,7 +9,7 @@ win32-*: CONFIG += console
win32-msvc*: CONFIG += exceptions_off stl_off
isEmpty(OUTPUT_DIR): OUTPUT_DIR= ..
-include($$PWD/../../WebKit.pri)
+include($$PWD/../WebKit.pri)
unix:!mac:!symbian:CONFIG += link_pkgconfig
diff --git a/Source/JavaScriptCore/parser/JSParser.cpp b/Source/JavaScriptCore/parser/JSParser.cpp
index cb59f93..993dd66 100644
--- a/Source/JavaScriptCore/parser/JSParser.cpp
+++ b/Source/JavaScriptCore/parser/JSParser.cpp
@@ -34,6 +34,7 @@ using namespace JSC;
#include "NodeInfo.h"
#include "ASTBuilder.h"
#include "SourceProvider.h"
+#include "SourceProviderCacheItem.h"
#include <wtf/HashFunctions.h>
#include <wtf/WTFThreadData.h>
#include <utility>
@@ -96,39 +97,6 @@ private:
bool m_isLoop;
};
- struct CachedFunctionInfo : public SourceProviderCache::Item {
- CachedFunctionInfo(int closeBraceLine, int closeBracePos)
- : closeBraceLine(closeBraceLine)
- , closeBracePos(closeBracePos)
- {
- }
- unsigned approximateByteSize() const
- {
- // The identifiers are uniqued strings so most likely there are few names that actually use any additional memory.
- static const unsigned assummedAverageIdentifierSize = sizeof(RefPtr<StringImpl>) + 2;
- unsigned size = sizeof(*this);
- size += usedVariables.size() * assummedAverageIdentifierSize;
- size += writtenVariables.size() * assummedAverageIdentifierSize;
- return size;
- }
- JSToken closeBraceToken() const
- {
- JSToken token;
- token.m_type = CLOSEBRACE;
- token.m_data.intValue = closeBracePos;
- token.m_info.startOffset = closeBracePos;
- token.m_info.endOffset = closeBracePos + 1;
- token.m_info.line = closeBraceLine;
- return token;
- }
-
- int closeBraceLine;
- int closeBracePos;
- bool usesEval;
- Vector<RefPtr<StringImpl> > usedVariables;
- Vector<RefPtr<StringImpl> > writtenVariables;
- };
-
void next(Lexer::LexType lexType = Lexer::IdentifyReservedWords)
{
m_lastLine = m_token.m_info.line;
@@ -463,7 +431,7 @@ private:
vector.shrinkToFit();
}
- void saveFunctionInfo(CachedFunctionInfo* info)
+ void saveFunctionInfo(SourceProviderCacheItem* info)
{
ASSERT(m_isFunction);
info->usesEval = m_usesEval;
@@ -471,7 +439,7 @@ private:
copyCapturedVariablesToVector(m_usedVariables, info->usedVariables);
}
- void restoreFunctionInfo(const CachedFunctionInfo* info)
+ void restoreFunctionInfo(const SourceProviderCacheItem* info)
{
ASSERT(m_isFunction);
m_usesEval = info->usesEval;
@@ -609,9 +577,9 @@ private:
ScopeStack m_scopeStack;
- const CachedFunctionInfo* findCachedFunctionInfo(int openBracePos)
+ const SourceProviderCacheItem* findCachedFunctionInfo(int openBracePos)
{
- return m_functionCache ? static_cast<const CachedFunctionInfo*>(m_functionCache->get(openBracePos)) : 0;
+ return m_functionCache ? m_functionCache->get(openBracePos) : 0;
}
SourceProviderCache* m_functionCache;
@@ -1318,7 +1286,7 @@ template <JSParser::FunctionRequirements requirements, bool nameIsInContainingSc
openBracePos = m_token.m_data.intValue;
bodyStartLine = tokenLine();
- if (const CachedFunctionInfo* cachedInfo = TreeBuilder::CanUseFunctionCache ? findCachedFunctionInfo(openBracePos) : 0) {
+ if (const SourceProviderCacheItem* cachedInfo = TreeBuilder::CanUseFunctionCache ? findCachedFunctionInfo(openBracePos) : 0) {
// If we know about this function already, we can use the cached info and skip the parser to the end of the function.
body = context.createFunctionBody(strictMode());
@@ -1347,10 +1315,10 @@ template <JSParser::FunctionRequirements requirements, bool nameIsInContainingSc
// Cache the tokenizer state and the function scope the first time the function is parsed.
// Any future reparsing can then skip the function.
static const int minimumFunctionLengthToCache = 64;
- OwnPtr<CachedFunctionInfo> newInfo;
+ OwnPtr<SourceProviderCacheItem> newInfo;
int functionLength = closeBracePos - openBracePos;
if (TreeBuilder::CanUseFunctionCache && m_functionCache && functionLength > minimumFunctionLengthToCache) {
- newInfo = adoptPtr(new CachedFunctionInfo(m_token.m_info.line, closeBracePos));
+ newInfo = adoptPtr(new SourceProviderCacheItem(m_token.m_info.line, closeBracePos));
functionScope->saveFunctionInfo(newInfo.get());
}
diff --git a/Source/JavaScriptCore/parser/SourceProvider.h b/Source/JavaScriptCore/parser/SourceProvider.h
index bcc445b..e9b6b56 100644
--- a/Source/JavaScriptCore/parser/SourceProvider.h
+++ b/Source/JavaScriptCore/parser/SourceProvider.h
@@ -29,32 +29,15 @@
#ifndef SourceProvider_h
#define SourceProvider_h
+#include "SourceProviderCache.h"
#include "UString.h"
-#include <wtf/HashMap.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/UnusedParam.h>
#include <wtf/text/TextPosition.h>
-
namespace JSC {
- class SourceProviderCache {
- public:
- struct Item {};
-
- SourceProviderCache() : m_contentByteSize(0) {}
- ~SourceProviderCache() { deleteAllValues(m_map); }
-
- unsigned byteSize() const { return m_contentByteSize + sizeof(*this) + m_map.capacity() * sizeof(Item*); }
- void add(int sourcePosition, PassOwnPtr<Item> item, unsigned size) { m_map.add(sourcePosition, item.leakPtr()); m_contentByteSize += size; }
- const Item* get(int sourcePosition) const { return m_map.get(sourcePosition); }
-
- private:
- HashMap<int, Item*> m_map;
- unsigned m_contentByteSize;
- };
-
class SourceProvider : public RefCounted<SourceProvider> {
public:
SourceProvider(const UString& url, SourceProviderCache* cache = 0)
diff --git a/Source/JavaScriptCore/parser/SourceProviderCache.cpp b/Source/JavaScriptCore/parser/SourceProviderCache.cpp
new file mode 100644
index 0000000..afeec52
--- /dev/null
+++ b/Source/JavaScriptCore/parser/SourceProviderCache.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "SourceProviderCache.h"
+
+#include "SourceProviderCacheItem.h"
+
+namespace JSC {
+
+SourceProviderCache::~SourceProviderCache()
+{
+ clear();
+}
+
+void SourceProviderCache::clear()
+{
+ deleteAllValues(m_map);
+ m_map.clear();
+ m_contentByteSize = 0;
+}
+
+unsigned SourceProviderCache::byteSize() const
+{
+ return m_contentByteSize + sizeof(*this) + m_map.capacity() * sizeof(SourceProviderCacheItem*);
+}
+
+void SourceProviderCache::add(int sourcePosition, PassOwnPtr<SourceProviderCacheItem> item, unsigned size)
+{
+ m_map.add(sourcePosition, item.leakPtr());
+ m_contentByteSize += size;
+}
+
+}
diff --git a/Source/JavaScriptCore/parser/SourceProviderCache.h b/Source/JavaScriptCore/parser/SourceProviderCache.h
new file mode 100644
index 0000000..4df46f7
--- /dev/null
+++ b/Source/JavaScriptCore/parser/SourceProviderCache.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <wtf/HashMap.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace JSC {
+
+class SourceProviderCacheItem;
+
+class SourceProviderCache {
+public:
+ SourceProviderCache() : m_contentByteSize(0) {}
+ ~SourceProviderCache();
+
+ void clear();
+ unsigned byteSize() const;
+ void add(int sourcePosition, PassOwnPtr<SourceProviderCacheItem>, unsigned size);
+ const SourceProviderCacheItem* get(int sourcePosition) const { return m_map.get(sourcePosition); }
+
+private:
+ HashMap<int, SourceProviderCacheItem*> m_map;
+ unsigned m_contentByteSize;
+};
+
+}
diff --git a/Source/JavaScriptCore/parser/SourceProviderCacheItem.h b/Source/JavaScriptCore/parser/SourceProviderCacheItem.h
new file mode 100644
index 0000000..b9ab225
--- /dev/null
+++ b/Source/JavaScriptCore/parser/SourceProviderCacheItem.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "JSParser.h"
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
+
+namespace JSC {
+
+class SourceProviderCacheItem {
+public:
+ SourceProviderCacheItem(int closeBraceLine, int closeBracePos)
+ : closeBraceLine(closeBraceLine)
+ , closeBracePos(closeBracePos)
+ {
+ }
+ unsigned approximateByteSize() const
+ {
+ // The identifiers are uniqued strings so most likely there are few names that actually use any additional memory.
+ static const unsigned assummedAverageIdentifierSize = sizeof(RefPtr<StringImpl>) + 2;
+ unsigned size = sizeof(*this);
+ size += usedVariables.size() * assummedAverageIdentifierSize;
+ size += writtenVariables.size() * assummedAverageIdentifierSize;
+ return size;
+ }
+ JSToken closeBraceToken() const
+ {
+ JSToken token;
+ token.m_type = CLOSEBRACE;
+ token.m_data.intValue = closeBracePos;
+ token.m_info.startOffset = closeBracePos;
+ token.m_info.endOffset = closeBracePos + 1;
+ token.m_info.line = closeBraceLine;
+ return token;
+ }
+
+ int closeBraceLine;
+ int closeBracePos;
+ bool usesEval;
+ Vector<RefPtr<StringImpl> > usedVariables;
+ Vector<RefPtr<StringImpl> > writtenVariables;
+};
+
+}
diff --git a/Source/JavaScriptCore/pcre/AUTHORS b/Source/JavaScriptCore/pcre/AUTHORS
deleted file mode 100644
index dbac2a5..0000000
--- a/Source/JavaScriptCore/pcre/AUTHORS
+++ /dev/null
@@ -1,12 +0,0 @@
-Originally written by: Philip Hazel
-Email local part: ph10
-Email domain: cam.ac.uk
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
-
-Adapted for JavaScriptCore and WebKit by Apple Inc.
-
-Copyright (c) 2005, 2006, 2007 Apple Inc. All rights reserved.
diff --git a/Source/JavaScriptCore/pcre/COPYING b/Source/JavaScriptCore/pcre/COPYING
deleted file mode 100644
index 6ffdc24..0000000
--- a/Source/JavaScriptCore/pcre/COPYING
+++ /dev/null
@@ -1,35 +0,0 @@
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed.
-
-Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the name of Apple
- Inc. nor the names of their contributors may be used to endorse or
- promote products derived from this software without specific prior
- written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/Source/JavaScriptCore/pcre/dftables b/Source/JavaScriptCore/pcre/dftables
deleted file mode 100755
index 669b948..0000000
--- a/Source/JavaScriptCore/pcre/dftables
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/perl -w
-#
-# This is JavaScriptCore's variant of the PCRE library. While this library
-# started out as a copy of PCRE, many of the features of PCRE have been
-# removed. This library now supports only the regular expression features
-# required by the JavaScript language specification, and has only the functions
-# needed by JavaScriptCore and the rest of WebKit.
-#
-# Originally written by Philip Hazel
-# Copyright (c) 1997-2006 University of Cambridge
-# Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-#
-# -----------------------------------------------------------------------------
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# * Neither the name of the University of Cambridge nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-# -----------------------------------------------------------------------------
-
-# This is a freestanding support program to generate a file containing
-# character tables. The tables are built according to the default C
-# locale.
-
-use strict;
-
-use File::Basename;
-use File::Spec;
-use File::Temp qw(tempfile);
-use Getopt::Long;
-
-sub readHeaderValues();
-
-my %pcre_internal;
-
-if (scalar(@ARGV) < 1) {
- print STDERR "Usage: ", basename($0), " [--preprocessor=program] output-file\n";
- exit 1;
-}
-
-my $outputFile;
-my $preprocessor;
-GetOptions('preprocessor=s' => \$preprocessor);
-if (not $preprocessor) {
- $preprocessor = "cpp";
-}
-
-$outputFile = $ARGV[0];
-die('Must specify output file.') unless defined($outputFile);
-
-readHeaderValues();
-
-open(OUT, ">", $outputFile) or die "$!";
-binmode(OUT);
-
-printf(OUT
- "/*************************************************\n" .
- "* Perl-Compatible Regular Expressions *\n" .
- "*************************************************/\n\n" .
- "/* This file is automatically written by the dftables auxiliary \n" .
- "program. If you edit it by hand, you might like to edit the Makefile to \n" .
- "prevent its ever being regenerated.\n\n");
-printf(OUT
- "This file contains the default tables for characters with codes less than\n" .
- "128 (ASCII characters). These tables are used when no external tables are\n" .
- "passed to PCRE. */\n\n" .
- "const unsigned char jsc_pcre_default_tables[%d] = {\n\n" .
- "/* This table is a lower casing table. */\n\n", $pcre_internal{tables_length});
-
-if ($pcre_internal{lcc_offset} != 0) {
- die "lcc_offset != 0";
-}
-
-printf(OUT " ");
-for (my $i = 0; $i < 128; $i++) {
- if (($i & 7) == 0 && $i != 0) {
- printf(OUT "\n ");
- }
- printf(OUT "0x%02X", ord(lc(chr($i))));
- if ($i != 127) {
- printf(OUT ", ");
- }
-}
-printf(OUT ",\n\n");
-
-printf(OUT "/* This table is a case flipping table. */\n\n");
-
-if ($pcre_internal{fcc_offset} != 128) {
- die "fcc_offset != 128";
-}
-
-printf(OUT " ");
-for (my $i = 0; $i < 128; $i++) {
- if (($i & 7) == 0 && $i != 0) {
- printf(OUT "\n ");
- }
- my $c = chr($i);
- printf(OUT "0x%02X", $c =~ /[[:lower:]]/ ? ord(uc($c)) : ord(lc($c)));
- if ($i != 127) {
- printf(OUT ", ");
- }
-}
-printf(OUT ",\n\n");
-
-printf(OUT
- "/* This table contains bit maps for various character classes.\n" .
- "Each map is 32 bytes long and the bits run from the least\n" .
- "significant end of each byte. The classes are: space, digit, word. */\n\n");
-
-if ($pcre_internal{cbits_offset} != $pcre_internal{fcc_offset} + 128) {
- die "cbits_offset != fcc_offset + 128";
-}
-
-my @cbit_table = (0) x $pcre_internal{cbit_length};
-for (my $i = ord('0'); $i <= ord('9'); $i++) {
- $cbit_table[$pcre_internal{cbit_digit} + $i / 8] |= 1 << ($i & 7);
-}
-$cbit_table[$pcre_internal{cbit_word} + ord('_') / 8] |= 1 << (ord('_') & 7);
-for (my $i = 0; $i < 128; $i++) {
- my $c = chr($i);
- if ($c =~ /[[:alnum:]]/) {
- $cbit_table[$pcre_internal{cbit_word} + $i / 8] |= 1 << ($i & 7);
- }
- if ($c =~ /[[:space:]]/) {
- $cbit_table[$pcre_internal{cbit_space} + $i / 8] |= 1 << ($i & 7);
- }
-}
-
-printf(OUT " ");
-for (my $i = 0; $i < $pcre_internal{cbit_length}; $i++) {
- if (($i & 7) == 0 && $i != 0) {
- if (($i & 31) == 0) {
- printf(OUT "\n");
- }
- printf(OUT "\n ");
- }
- printf(OUT "0x%02X", $cbit_table[$i]);
- if ($i != $pcre_internal{cbit_length} - 1) {
- printf(OUT ", ");
- }
-}
-printf(OUT ",\n\n");
-
-printf(OUT
- "/* This table identifies various classes of character by individual bits:\n" .
- " 0x%02x white space character\n" .
- " 0x%02x hexadecimal digit\n" .
- " 0x%02x alphanumeric or '_'\n*/\n\n",
- $pcre_internal{ctype_space}, $pcre_internal{ctype_xdigit}, $pcre_internal{ctype_word});
-
-if ($pcre_internal{ctypes_offset} != $pcre_internal{cbits_offset} + $pcre_internal{cbit_length}) {
- die "ctypes_offset != cbits_offset + cbit_length";
-}
-
-printf(OUT " ");
-for (my $i = 0; $i < 128; $i++) {
- my $x = 0;
- my $c = chr($i);
- if ($c =~ /[[:space:]]/) {
- $x += $pcre_internal{ctype_space};
- }
- if ($c =~ /[[:xdigit:]]/) {
- $x += $pcre_internal{ctype_xdigit};
- }
- if ($c =~ /[[:alnum:]_]/) {
- $x += $pcre_internal{ctype_word};
- }
- printf(OUT "0x%02X", $x);
- if ($i != 127) {
- printf(OUT ", ");
- } else {
- printf(OUT "};");
- }
- if (($i & 7) == 7) {
- printf(OUT " /* ");
- my $d = chr($i - 7);
- if ($d =~ /[[:print:]]/) {
- printf(OUT " %c -", $i - 7);
- } else {
- printf(OUT "%3d-", $i - 7);
- }
- if ($c =~ m/[[:print:]]/) {
- printf(OUT " %c ", $i);
- } else {
- printf(OUT "%3d", $i);
- }
- printf(OUT " */\n");
- if ($i != 127) {
- printf(OUT " ");
- }
- }
-}
-
-if ($pcre_internal{tables_length} != $pcre_internal{ctypes_offset} + 128) {
- die "tables_length != ctypes_offset + 128";
-}
-
-printf(OUT "\n\n/* End of chartables.c */\n");
-
-close(OUT);
-
-exit 0;
-
-sub readHeaderValues()
-{
- my @variables = qw(
- cbit_digit
- cbit_length
- cbit_space
- cbit_word
- cbits_offset
- ctype_space
- ctype_word
- ctype_xdigit
- ctypes_offset
- fcc_offset
- lcc_offset
- tables_length
- );
-
- local $/ = undef;
-
- my $headerPath = File::Spec->catfile(dirname($0), "pcre_internal.h");
-
- my ($fh, $tempFile) = tempfile(
- basename($0) . "-XXXXXXXX",
- DIR => File::Spec->tmpdir(),
- SUFFIX => ".in",
- UNLINK => 0,
- );
-
- print $fh "#define DFTABLES\n\n";
-
- open(HEADER, "<", $headerPath) or die "$!";
- print $fh <HEADER>;
- close(HEADER);
-
- print $fh "\n\n";
-
- for my $v (@variables) {
- print $fh "\$pcre_internal{\"$v\"} = $v;\n";
- }
-
- close($fh);
-
- open(CPP, "$preprocessor \"$tempFile\" |") or die "$!";
- my $content = <CPP>;
- close(CPP);
-
- eval $content;
- die "$@" if $@;
- unlink $tempFile;
-}
diff --git a/Source/JavaScriptCore/pcre/pcre.h b/Source/JavaScriptCore/pcre/pcre.h
deleted file mode 100644
index 55044fd..0000000
--- a/Source/JavaScriptCore/pcre/pcre.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* This is the public header file for JavaScriptCore's variant of the PCRE
-library. While this library started out as a copy of PCRE, many of the
-features of PCRE have been removed. This library now supports only the
-regular expression features required by the JavaScript language
-specification, and has only the functions needed by JavaScriptCore and the
-rest of WebKit.
-
- Copyright (c) 1997-2005 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-// FIXME: This file needs to be renamed to JSRegExp.h; it's no longer PCRE.
-
-#ifndef JSRegExp_h
-#define JSRegExp_h
-
-#include <wtf/unicode/Unicode.h>
-
-struct JSRegExp;
-
-enum JSRegExpIgnoreCaseOption { JSRegExpDoNotIgnoreCase, JSRegExpIgnoreCase };
-enum JSRegExpMultilineOption { JSRegExpSingleLine, JSRegExpMultiline };
-
-/* jsRegExpExecute error codes */
-const int JSRegExpErrorNoMatch = -1;
-const int JSRegExpErrorHitLimit = -2;
-const int JSRegExpErrorNoMemory = -3;
-const int JSRegExpErrorInternal = -4;
-
-JSRegExp* jsRegExpCompile(const UChar* pattern, int patternLength,
- JSRegExpIgnoreCaseOption, JSRegExpMultilineOption,
- unsigned* numSubpatterns, const char** errorMessage);
-
-int jsRegExpExecute(const JSRegExp*,
- const UChar* subject, int subjectLength, int startOffset,
- int* offsetsVector, int offsetsVectorLength);
-
-void jsRegExpFree(JSRegExp*);
-
-#endif
diff --git a/Source/JavaScriptCore/pcre/pcre.pri b/Source/JavaScriptCore/pcre/pcre.pri
deleted file mode 100644
index 3652d95..0000000
--- a/Source/JavaScriptCore/pcre/pcre.pri
+++ /dev/null
@@ -1,12 +0,0 @@
-# Perl Compatible Regular Expressions - Qt4 build info
-VPATH += $$PWD
-INCLUDEPATH += $$PWD $$OUTPUT_DIR/Source/JavaScriptCore/generated
-DEPENDPATH += $$PWD
-
-SOURCES += \
- pcre_compile.cpp \
- pcre_exec.cpp \
- pcre_tables.cpp \
- pcre_ucp_searchfuncs.cpp \
- pcre_xclass.cpp
-
diff --git a/Source/JavaScriptCore/pcre/pcre_compile.cpp b/Source/JavaScriptCore/pcre/pcre_compile.cpp
deleted file mode 100644
index 9d472d8..0000000
--- a/Source/JavaScriptCore/pcre/pcre_compile.cpp
+++ /dev/null
@@ -1,2708 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains the external function jsRegExpExecute(), along with
-supporting internal functions that are not used by other modules. */
-
-#include "config.h"
-
-#include "pcre_internal.h"
-
-#include <string.h>
-#include <wtf/ASCIICType.h>
-#include <wtf/FastMalloc.h>
-#include <wtf/FixedArray.h>
-#include <wtf/StdLibExtras.h>
-
-using namespace WTF;
-
-/* Negative values for the firstchar and reqchar variables */
-
-#define REQ_UNSET (-2)
-#define REQ_NONE (-1)
-
-/*************************************************
-* Code parameters and static tables *
-*************************************************/
-
-/* Maximum number of items on the nested bracket stacks at compile time. This
-applies to the nesting of all kinds of parentheses. It does not limit
-un-nested, non-capturing parentheses. This number can be made bigger if
-necessary - it is used to dimension one int and one unsigned char vector at
-compile time. */
-
-#define BRASTACK_SIZE 200
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-static const short escapes[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */
- 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */
- '@', 0, -ESC_B, 0, -ESC_D, 0, 0, 0, /* @ - G */
- 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
- 0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */
- 0, 0, 0, '[', '\\', ']', '^', '_', /* X - _ */
- '`', 7, -ESC_b, 0, -ESC_d, 0, '\f', 0, /* ` - g */
- 0, 0, 0, 0, 0, 0, '\n', 0, /* h - o */
- 0, 0, '\r', -ESC_s, '\t', 0, '\v', -ESC_w, /* p - w */
- 0, 0, 0 /* x - z */
-};
-
-/* Error code numbers. They are given names so that they can more easily be
-tracked. */
-
-enum ErrorCode {
- ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9,
- ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17
-};
-
-/* The texts of compile-time error messages. These are "char *" because they
-are passed to the outside world. */
-
-static const char* errorText(ErrorCode code)
-{
- static const char errorTexts[] =
- /* 1 */
- "\\ at end of pattern\0"
- "\\c at end of pattern\0"
- "character value in \\x{...} sequence is too large\0"
- "numbers out of order in {} quantifier\0"
- /* 5 */
- "number too big in {} quantifier\0"
- "missing terminating ] for character class\0"
- "internal error: code overflow\0"
- "range out of order in character class\0"
- "nothing to repeat\0"
- /* 10 */
- "unmatched parentheses\0"
- "internal error: unexpected repeat\0"
- "unrecognized character after (?\0"
- "failed to get memory\0"
- "missing )\0"
- /* 15 */
- "reference to non-existent subpattern\0"
- "regular expression too large\0"
- "parentheses nested too deeply"
- ;
-
- int i = code;
- const char* text = errorTexts;
- while (i > 1)
- i -= !*text++;
- return text;
-}
-
-/* Structure for passing "static" information around between the functions
-doing the compiling. */
-
-struct CompileData {
- CompileData() {
- topBackref = 0;
- backrefMap = 0;
- reqVaryOpt = 0;
- needOuterBracket = false;
- numCapturingBrackets = 0;
- }
- int topBackref; /* Maximum back reference */
- unsigned backrefMap; /* Bitmap of low back refs */
- int reqVaryOpt; /* "After variable item" flag for reqByte */
- bool needOuterBracket;
- int numCapturingBrackets;
-};
-
-/* Definitions to allow mutual recursion */
-
-static bool compileBracket(int, int*, unsigned char**, const UChar**, const UChar*, ErrorCode*, int, int*, int*, CompileData&);
-static bool bracketIsAnchored(const unsigned char* code);
-static bool bracketNeedsLineStart(const unsigned char* code, unsigned captureMap, unsigned backrefMap);
-static int bracketFindFirstAssertedCharacter(const unsigned char* code, bool inassert);
-
-/*************************************************
-* Handle escapes *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. When UTF-8 is enabled,
-a positive value greater than 255 may be returned. On entry, ptr is pointing at
-the \. On exit, it is on the final character of the escape sequence.
-
-Arguments:
- ptrPtr points to the pattern position pointer
- errorCodePtr points to the errorcode variable
- bracount number of previous extracting brackets
- options the options bits
- isClass true if inside a character class
-
-Returns: zero or positive => a data character
- negative => a special escape sequence
- on error, errorPtr is set
-*/
-
-static int checkEscape(const UChar** ptrPtr, const UChar* patternEnd, ErrorCode* errorCodePtr, int bracount, bool isClass)
-{
- const UChar* ptr = *ptrPtr + 1;
-
- /* If backslash is at the end of the pattern, it's an error. */
- if (ptr == patternEnd) {
- *errorCodePtr = ERR1;
- *ptrPtr = ptr;
- return 0;
- }
-
- int c = *ptr;
-
- /* Non-alphamerics are literals. For digits or letters, do an initial lookup in
- a table. A non-zero result is something that can be returned immediately.
- Otherwise further processing may be required. */
-
- if (c < '0' || c > 'z') { /* Not alphameric */
- } else if (int escapeValue = escapes[c - '0']) {
- c = escapeValue;
- if (isClass) {
- if (-c == ESC_b)
- c = '\b'; /* \b is backslash in a class */
- else if (-c == ESC_B)
- c = 'B'; /* and \B is a capital B in a class (in browsers event though ECMAScript 15.10.2.19 says it raises an error) */
- }
- /* Escapes that need further processing, or are illegal. */
-
- } else {
- switch (c) {
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- /* Escape sequences starting with a non-zero digit are backreferences,
- unless there are insufficient brackets, in which case they are octal
- escape sequences. Those sequences end on the first non-octal character
- or when we overflow 0-255, whichever comes first. */
-
- if (!isClass) {
- const UChar* oldptr = ptr;
- c -= '0';
- while ((ptr + 1 < patternEnd) && isASCIIDigit(ptr[1]) && c <= bracount)
- c = c * 10 + *(++ptr) - '0';
- if (c <= bracount) {
- c = -(ESC_REF + c);
- break;
- }
- ptr = oldptr; /* Put the pointer back and fall through */
- }
-
- /* Handle an octal number following \. If the first digit is 8 or 9,
- this is not octal. */
-
- if ((c = *ptr) >= '8') {
- c = '\\';
- ptr -= 1;
- break;
- }
-
- /* \0 always starts an octal number, but we may drop through to here with a
- larger first octal digit. */
-
- case '0': {
- c -= '0';
- int i;
- for (i = 1; i <= 2; ++i) {
- if (ptr + i >= patternEnd || ptr[i] < '0' || ptr[i] > '7')
- break;
- int cc = c * 8 + ptr[i] - '0';
- if (cc > 255)
- break;
- c = cc;
- }
- ptr += i - 1;
- break;
- }
-
- case 'x': {
- c = 0;
- int i;
- for (i = 1; i <= 2; ++i) {
- if (ptr + i >= patternEnd || !isASCIIHexDigit(ptr[i])) {
- c = 'x';
- i = 1;
- break;
- }
- int cc = ptr[i];
- if (cc >= 'a')
- cc -= 32; /* Convert to upper case */
- c = c * 16 + cc - ((cc < 'A') ? '0' : ('A' - 10));
- }
- ptr += i - 1;
- break;
- }
-
- case 'u': {
- c = 0;
- int i;
- for (i = 1; i <= 4; ++i) {
- if (ptr + i >= patternEnd || !isASCIIHexDigit(ptr[i])) {
- c = 'u';
- i = 1;
- break;
- }
- int cc = ptr[i];
- if (cc >= 'a')
- cc -= 32; /* Convert to upper case */
- c = c * 16 + cc - ((cc < 'A') ? '0' : ('A' - 10));
- }
- ptr += i - 1;
- break;
- }
-
- case 'c':
- if (++ptr == patternEnd) {
- *errorCodePtr = ERR2;
- return 0;
- }
-
- c = *ptr;
-
- /* To match Firefox, inside a character class, we also accept
- numbers and '_' as control characters */
- if ((!isClass && !isASCIIAlpha(c)) || (!isASCIIAlphanumeric(c) && c != '_')) {
- c = '\\';
- ptr -= 2;
- break;
- }
-
- /* A letter is upper-cased; then the 0x40 bit is flipped. This coding
- is ASCII-specific, but then the whole concept of \cx is ASCII-specific. */
- c = toASCIIUpper(c) ^ 0x40;
- break;
- }
- }
-
- *ptrPtr = ptr;
- return c;
-}
-
-/*************************************************
-* Check for counted repeat *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
- p pointer to the first char after '{'
-
-Returns: true or false
-*/
-
-static bool isCountedRepeat(const UChar* p, const UChar* patternEnd)
-{
- if (p >= patternEnd || !isASCIIDigit(*p))
- return false;
- p++;
- while (p < patternEnd && isASCIIDigit(*p))
- p++;
- if (p < patternEnd && *p == '}')
- return true;
-
- if (p >= patternEnd || *p++ != ',')
- return false;
- if (p < patternEnd && *p == '}')
- return true;
-
- if (p >= patternEnd || !isASCIIDigit(*p))
- return false;
- p++;
- while (p < patternEnd && isASCIIDigit(*p))
- p++;
-
- return (p < patternEnd && *p == '}');
-}
-
-/*************************************************
-* Read repeat counts *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after isCountedRepeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
- p pointer to first char after '{'
- minp pointer to int for min
- maxp pointer to int for max
- returned as -1 if no max
- errorCodePtr points to error code variable
-
-Returns: pointer to '}' on success;
- current ptr on error, with errorCodePtr set non-zero
-*/
-
-static const UChar* readRepeatCounts(const UChar* p, int* minp, int* maxp, ErrorCode* errorCodePtr)
-{
- int min = 0;
- int max = -1;
-
- /* Read the minimum value and do a paranoid check: a negative value indicates
- an integer overflow. */
-
- while (isASCIIDigit(*p))
- min = min * 10 + *p++ - '0';
- if (min < 0 || min > 65535) {
- *errorCodePtr = ERR5;
- return p;
- }
-
- /* Read the maximum value if there is one, and again do a paranoid on its size.
- Also, max must not be less than min. */
-
- if (*p == '}')
- max = min;
- else {
- if (*(++p) != '}') {
- max = 0;
- while (isASCIIDigit(*p))
- max = max * 10 + *p++ - '0';
- if (max < 0 || max > 65535) {
- *errorCodePtr = ERR5;
- return p;
- }
- if (max < min) {
- *errorCodePtr = ERR4;
- return p;
- }
- }
- }
-
- /* Fill in the required variables, and pass back the pointer to the terminating
- '}'. */
-
- *minp = min;
- *maxp = max;
- return p;
-}
-
-/*************************************************
-* Find first significant op code *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this.
-
-Arguments:
- code pointer to the start of the group
-Returns: pointer to the first significant opcode
-*/
-
-static const unsigned char* firstSignificantOpcode(const unsigned char* code)
-{
- while (*code == OP_BRANUMBER)
- code += 3;
- return code;
-}
-
-static const unsigned char* firstSignificantOpcodeSkippingAssertions(const unsigned char* code)
-{
- while (true) {
- switch (*code) {
- case OP_ASSERT_NOT:
- advanceToEndOfBracket(code);
- code += 1 + LINK_SIZE;
- break;
- case OP_WORD_BOUNDARY:
- case OP_NOT_WORD_BOUNDARY:
- ++code;
- break;
- case OP_BRANUMBER:
- code += 3;
- break;
- default:
- return code;
- }
- }
-}
-
-/*************************************************
-* Get othercase range *
-*************************************************/
-
-/* This function is passed the start and end of a class range, in UTF-8 mode
-with UCP support. It searches up the characters, looking for internal ranges of
-characters in the "other" case. Each call returns the next one, updating the
-start address.
-
-Arguments:
- cptr points to starting character value; updated
- d end value
- ocptr where to put start of othercase range
- odptr where to put end of othercase range
-
-Yield: true when range returned; false when no more
-*/
-
-static bool getOthercaseRange(int* cptr, int d, int* ocptr, int* odptr)
-{
- int c, othercase = 0;
-
- for (c = *cptr; c <= d; c++) {
- if ((othercase = jsc_pcre_ucp_othercase(c)) >= 0)
- break;
- }
-
- if (c > d)
- return false;
-
- *ocptr = othercase;
- int next = othercase + 1;
-
- for (++c; c <= d; c++) {
- if (jsc_pcre_ucp_othercase(c) != next)
- break;
- next++;
- }
-
- *odptr = next - 1;
- *cptr = c;
-
- return true;
-}
-
-/*************************************************
- * Convert character value to UTF-8 *
- *************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
- and encodes it as a UTF-8 character in 0 to 6 bytes.
-
- Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
- Returns: number of characters placed in the buffer
- */
-
-static int encodeUTF8(int cvalue, unsigned char *buffer)
-{
- int i;
- for (i = 0; i < jsc_pcre_utf8_table1_size; i++)
- if (cvalue <= jsc_pcre_utf8_table1[i])
- break;
- buffer += i;
- for (int j = i; j > 0; j--) {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
- *buffer = jsc_pcre_utf8_table2[i] | cvalue;
- return i + 1;
-}
-
-/*************************************************
-* Compile one branch *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector.
-
-Arguments:
- options the option bits
- brackets points to number of extracting brackets used
- codePtr points to the pointer to the current code point
- ptrPtr points to the current pattern pointer
- errorCodePtr points to error code variable
- firstbyteptr set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
- reqbyteptr set to the last literal character required, else < 0
- cd contains pointers to tables etc.
-
-Returns: true on success
- false, with *errorCodePtr set non-zero on error
-*/
-
-static inline bool safelyCheckNextChar(const UChar* ptr, const UChar* patternEnd, UChar expected)
-{
- return ((ptr + 1 < patternEnd) && ptr[1] == expected);
-}
-
-static bool
-compileBranch(int options, int* brackets, unsigned char** codePtr,
- const UChar** ptrPtr, const UChar* patternEnd, ErrorCode* errorCodePtr, int *firstbyteptr,
- int* reqbyteptr, CompileData& cd)
-{
- int repeatType, opType;
- int repeatMin = 0, repeat_max = 0; /* To please picky compilers */
- int bravalue = 0;
- int reqvary, tempreqvary;
- int c;
- unsigned char* code = *codePtr;
- unsigned char* tempcode;
- bool didGroupSetFirstByte = false;
- const UChar* ptr = *ptrPtr;
- const UChar* tempptr;
- unsigned char* previous = NULL;
- unsigned char classbits[32];
-
- bool class_utf8;
- unsigned char* class_utf8data;
- unsigned char utf8_char[6];
-
- /* Initialize no first byte, no required byte. REQ_UNSET means "no char
- matching encountered yet". It gets changed to REQ_NONE if we hit something that
- matches a non-fixed char first char; reqByte just remains unset if we never
- find one.
-
- When we hit a repeat whose minimum is zero, we may have to adjust these values
- to take the zero repeat into account. This is implemented by setting them to
- zeroFirstByte and zeroReqByte when such a repeat is encountered. The individual
- item types that can be repeated set these backoff variables appropriately. */
-
- int firstByte = REQ_UNSET;
- int reqByte = REQ_UNSET;
- int zeroReqByte = REQ_UNSET;
- int zeroFirstByte = REQ_UNSET;
-
- /* The variable reqCaseOpt contains either the REQ_IGNORE_CASE value or zero,
- according to the current setting of the ignores-case flag. REQ_IGNORE_CASE is a bit
- value > 255. It is added into the firstByte or reqByte variables to record the
- case status of the value. This is used only for ASCII characters. */
-
- int reqCaseOpt = (options & IgnoreCaseOption) ? REQ_IGNORE_CASE : 0;
-
- /* Switch on next character until the end of the branch */
-
- for (;; ptr++) {
- bool negateClass;
- bool shouldFlipNegation; /* If a negative special such as \S is used, we should negate the whole class to properly support Unicode. */
- int classCharCount;
- int classLastChar;
- int skipBytes;
- int subReqByte;
- int subFirstByte;
- int mcLength;
- unsigned char mcbuffer[8];
-
- /* Next byte in the pattern */
-
- c = ptr < patternEnd ? *ptr : 0;
-
- /* Fill in length of a previous callout, except when the next thing is
- a quantifier. */
-
- bool isQuantifier = c == '*' || c == '+' || c == '?' || (c == '{' && isCountedRepeat(ptr + 1, patternEnd));
-
- switch (c) {
- /* The branch terminates at end of string, |, or ). */
-
- case 0:
- if (ptr < patternEnd)
- goto NORMAL_CHAR;
- // End of string; fall through
- case '|':
- case ')':
- *firstbyteptr = firstByte;
- *reqbyteptr = reqByte;
- *codePtr = code;
- *ptrPtr = ptr;
- return true;
-
- /* Handle single-character metacharacters. In multiline mode, ^ disables
- the setting of any following char as a first character. */
-
- case '^':
- if (options & MatchAcrossMultipleLinesOption) {
- if (firstByte == REQ_UNSET)
- firstByte = REQ_NONE;
- *code++ = OP_BOL;
- } else
- *code++ = OP_CIRC;
- previous = NULL;
- break;
-
- case '$':
- previous = NULL;
- if (options & MatchAcrossMultipleLinesOption)
- *code++ = OP_EOL;
- else
- *code++ = OP_DOLL;
- break;
-
- /* There can never be a first char if '.' is first, whatever happens about
- repeats. The value of reqByte doesn't change either. */
-
- case '.':
- if (firstByte == REQ_UNSET)
- firstByte = REQ_NONE;
- zeroFirstByte = firstByte;
- zeroReqByte = reqByte;
- previous = code;
- *code++ = OP_NOT_NEWLINE;
- break;
-
- /* Character classes. If the included characters are all < 256, we build a
- 32-byte bitmap of the permitted characters, except in the special case
- where there is only one such character. For negated classes, we build the
- map as usual, then invert it at the end. However, we use a different opcode
- so that data characters > 255 can be handled correctly.
-
- If the class contains characters outside the 0-255 range, a different
- opcode is compiled. It may optionally have a bit map for characters < 256,
- but those above are are explicitly listed afterwards. A flag byte tells
- whether the bitmap is present, and whether this is a negated class or not.
- */
-
- case '[': {
- previous = code;
- shouldFlipNegation = false;
-
- /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
- they are encountered at the top level, so we'll do that too. */
-
- /* If the first character is '^', set the negation flag and skip it. */
-
- if (ptr + 1 >= patternEnd) {
- *errorCodePtr = ERR6;
- return false;
- }
-
- if (ptr[1] == '^') {
- negateClass = true;
- ++ptr;
- } else
- negateClass = false;
-
- /* Keep a count of chars with values < 256 so that we can optimize the case
- of just a single character (as long as it's < 256). For higher valued UTF-8
- characters, we don't yet do any optimization. */
-
- classCharCount = 0;
- classLastChar = -1;
-
- class_utf8 = false; /* No chars >= 256 */
- class_utf8data = code + LINK_SIZE + 34; /* For UTF-8 items */
-
- /* Initialize the 32-char bit map to all zeros. We have to build the
- map in a temporary bit of store, in case the class contains only 1
- character (< 256), because in that case the compiled code doesn't use the
- bit map. */
-
- memset(classbits, 0, 32 * sizeof(unsigned char));
-
- /* Process characters until ] is reached. The first pass
- through the regex checked the overall syntax, so we don't need to be very
- strict here. At the start of the loop, c contains the first byte of the
- character. */
-
- while ((++ptr < patternEnd) && (c = *ptr) != ']') {
- /* Backslash may introduce a single character, or it may introduce one
- of the specials, which just set a flag. Escaped items are checked for
- validity in the pre-compiling pass. The sequence \b is a special case.
- Inside a class (and only there) it is treated as backspace. Elsewhere
- it marks a word boundary. Other escapes have preset maps ready to
- or into the one we are building. We assume they have more than one
- character in them, so set classCharCount bigger than one. */
-
- if (c == '\\') {
- c = checkEscape(&ptr, patternEnd, errorCodePtr, cd.numCapturingBrackets, true);
- if (c < 0) {
- classCharCount += 2; /* Greater than 1 is what matters */
- switch (-c) {
- case ESC_d:
- for (c = 0; c < 32; c++)
- classbits[c] |= classBitmapForChar(c + cbit_digit);
- continue;
-
- case ESC_D:
- shouldFlipNegation = true;
- for (c = 0; c < 32; c++)
- classbits[c] |= ~classBitmapForChar(c + cbit_digit);
- continue;
-
- case ESC_w:
- for (c = 0; c < 32; c++)
- classbits[c] |= classBitmapForChar(c + cbit_word);
- continue;
-
- case ESC_W:
- shouldFlipNegation = true;
- for (c = 0; c < 32; c++)
- classbits[c] |= ~classBitmapForChar(c + cbit_word);
- continue;
-
- case ESC_s:
- for (c = 0; c < 32; c++)
- classbits[c] |= classBitmapForChar(c + cbit_space);
- continue;
-
- case ESC_S:
- shouldFlipNegation = true;
- for (c = 0; c < 32; c++)
- classbits[c] |= ~classBitmapForChar(c + cbit_space);
- continue;
-
- /* Unrecognized escapes are faulted if PCRE is running in its
- strict mode. By default, for compatibility with Perl, they are
- treated as literals. */
-
- default:
- c = *ptr; /* The final character */
- classCharCount -= 2; /* Undo the default count from above */
- }
- }
-
- /* Fall through if we have a single character (c >= 0). This may be
- > 256 in UTF-8 mode. */
-
- } /* End of backslash handling */
-
- /* A single character may be followed by '-' to form a range. However,
- Perl does not permit ']' to be the end of the range. A '-' character
- here is treated as a literal. */
-
- if ((ptr + 2 < patternEnd) && ptr[1] == '-' && ptr[2] != ']') {
- ptr += 2;
-
- int d = *ptr;
-
- /* The second part of a range can be a single-character escape, but
- not any of the other escapes. Perl 5.6 treats a hyphen as a literal
- in such circumstances. */
-
- if (d == '\\') {
- const UChar* oldptr = ptr;
- d = checkEscape(&ptr, patternEnd, errorCodePtr, cd.numCapturingBrackets, true);
-
- /* \X is literal X; any other special means the '-' was literal */
- if (d < 0) {
- ptr = oldptr - 2;
- goto LONE_SINGLE_CHARACTER; /* A few lines below */
- }
- }
-
- /* The check that the two values are in the correct order happens in
- the pre-pass. Optimize one-character ranges */
-
- if (d == c)
- goto LONE_SINGLE_CHARACTER; /* A few lines below */
-
- /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
- matching, we have to use an XCLASS with extra data items. Caseless
- matching for characters > 127 is available only if UCP support is
- available. */
-
- if ((d > 255 || ((options & IgnoreCaseOption) && d > 127))) {
- class_utf8 = true;
-
- /* With UCP support, we can find the other case equivalents of
- the relevant characters. There may be several ranges. Optimize how
- they fit with the basic range. */
-
- if (options & IgnoreCaseOption) {
- int occ, ocd;
- int cc = c;
- int origd = d;
- while (getOthercaseRange(&cc, origd, &occ, &ocd)) {
- if (occ >= c && ocd <= d)
- continue; /* Skip embedded ranges */
-
- if (occ < c && ocd >= c - 1) /* Extend the basic range */
- { /* if there is overlap, */
- c = occ; /* noting that if occ < c */
- continue; /* we can't have ocd > d */
- } /* because a subrange is */
- if (ocd > d && occ <= d + 1) /* always shorter than */
- { /* the basic range. */
- d = ocd;
- continue;
- }
-
- if (occ == ocd)
- *class_utf8data++ = XCL_SINGLE;
- else {
- *class_utf8data++ = XCL_RANGE;
- class_utf8data += encodeUTF8(occ, class_utf8data);
- }
- class_utf8data += encodeUTF8(ocd, class_utf8data);
- }
- }
-
- /* Now record the original range, possibly modified for UCP caseless
- overlapping ranges. */
-
- *class_utf8data++ = XCL_RANGE;
- class_utf8data += encodeUTF8(c, class_utf8data);
- class_utf8data += encodeUTF8(d, class_utf8data);
-
- /* With UCP support, we are done. Without UCP support, there is no
- caseless matching for UTF-8 characters > 127; we can use the bit map
- for the smaller ones. */
-
- continue; /* With next character in the class */
- }
-
- /* We use the bit map for all cases when not in UTF-8 mode; else
- ranges that lie entirely within 0-127 when there is UCP support; else
- for partial ranges without UCP support. */
-
- for (; c <= d; c++) {
- classbits[c/8] |= (1 << (c&7));
- if (options & IgnoreCaseOption) {
- int uc = flipCase(c);
- classbits[uc/8] |= (1 << (uc&7));
- }
- classCharCount++; /* in case a one-char range */
- classLastChar = c;
- }
-
- continue; /* Go get the next char in the class */
- }
-
- /* Handle a lone single character - we can get here for a normal
- non-escape char, or after \ that introduces a single character or for an
- apparent range that isn't. */
-
- LONE_SINGLE_CHARACTER:
-
- /* Handle a character that cannot go in the bit map */
-
- if ((c > 255 || ((options & IgnoreCaseOption) && c > 127))) {
- class_utf8 = true;
- *class_utf8data++ = XCL_SINGLE;
- class_utf8data += encodeUTF8(c, class_utf8data);
-
- if (options & IgnoreCaseOption) {
- int othercase;
- if ((othercase = jsc_pcre_ucp_othercase(c)) >= 0) {
- *class_utf8data++ = XCL_SINGLE;
- class_utf8data += encodeUTF8(othercase, class_utf8data);
- }
- }
- } else {
- /* Handle a single-byte character */
- classbits[c/8] |= (1 << (c&7));
- if (options & IgnoreCaseOption) {
- c = flipCase(c);
- classbits[c/8] |= (1 << (c&7));
- }
- classCharCount++;
- classLastChar = c;
- }
- }
-
- /* If classCharCount is 1, we saw precisely one character whose value is
- less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we
- can optimize the negative case only if there were no characters >= 128
- because OP_NOT and the related opcodes like OP_NOTSTAR operate on
- single-bytes only. This is an historical hangover. Maybe one day we can
- tidy these opcodes to handle multi-byte characters.
-
- The optimization throws away the bit map. We turn the item into a
- 1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
- that OP_NOT does not support multibyte characters. In the positive case, it
- can cause firstByte to be set. Otherwise, there can be no first char if
- this item is first, whatever repeat count may follow. In the case of
- reqByte, save the previous value for reinstating. */
-
- if (classCharCount == 1 && (!class_utf8 && (!negateClass || classLastChar < 128))) {
- zeroReqByte = reqByte;
-
- /* The OP_NOT opcode works on one-byte characters only. */
-
- if (negateClass) {
- if (firstByte == REQ_UNSET)
- firstByte = REQ_NONE;
- zeroFirstByte = firstByte;
- *code++ = OP_NOT;
- *code++ = classLastChar;
- break;
- }
-
- /* For a single, positive character, get the value into c, and
- then we can handle this with the normal one-character code. */
-
- c = classLastChar;
- goto NORMAL_CHAR;
- } /* End of 1-char optimization */
-
- /* The general case - not the one-char optimization. If this is the first
- thing in the branch, there can be no first char setting, whatever the
- repeat count. Any reqByte setting must remain unchanged after any kind of
- repeat. */
-
- if (firstByte == REQ_UNSET) firstByte = REQ_NONE;
- zeroFirstByte = firstByte;
- zeroReqByte = reqByte;
-
- /* If there are characters with values > 255, we have to compile an
- extended class, with its own opcode. If there are no characters < 256,
- we can omit the bitmap. */
-
- if (class_utf8 && !shouldFlipNegation) {
- *class_utf8data++ = XCL_END; /* Marks the end of extra data */
- *code++ = OP_XCLASS;
- code += LINK_SIZE;
- *code = negateClass? XCL_NOT : 0;
-
- /* If the map is required, install it, and move on to the end of
- the extra data */
-
- if (classCharCount > 0) {
- *code++ |= XCL_MAP;
- memcpy(code, classbits, 32);
- code = class_utf8data;
- }
-
- /* If the map is not required, slide down the extra data. */
-
- else {
- int len = class_utf8data - (code + 33);
- memmove(code + 1, code + 33, len);
- code += len + 1;
- }
-
- /* Now fill in the complete length of the item */
-
- putLinkValue(previous + 1, code - previous);
- break; /* End of class handling */
- }
-
- /* If there are no characters > 255, negate the 32-byte map if necessary,
- and copy it into the code vector. If this is the first thing in the branch,
- there can be no first char setting, whatever the repeat count. Any reqByte
- setting must remain unchanged after any kind of repeat. */
-
- *code++ = (negateClass == shouldFlipNegation) ? OP_CLASS : OP_NCLASS;
- if (negateClass)
- for (c = 0; c < 32; c++)
- code[c] = ~classbits[c];
- else
- memcpy(code, classbits, 32);
- code += 32;
- break;
- }
-
- /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
- has been tested above. */
-
- case '{':
- if (!isQuantifier)
- goto NORMAL_CHAR;
- ptr = readRepeatCounts(ptr + 1, &repeatMin, &repeat_max, errorCodePtr);
- if (*errorCodePtr)
- goto FAILED;
- goto REPEAT;
-
- case '*':
- repeatMin = 0;
- repeat_max = -1;
- goto REPEAT;
-
- case '+':
- repeatMin = 1;
- repeat_max = -1;
- goto REPEAT;
-
- case '?':
- repeatMin = 0;
- repeat_max = 1;
-
- REPEAT:
- if (!previous) {
- *errorCodePtr = ERR9;
- goto FAILED;
- }
-
- if (repeatMin == 0) {
- firstByte = zeroFirstByte; /* Adjust for zero repeat */
- reqByte = zeroReqByte; /* Ditto */
- }
-
- /* Remember whether this is a variable length repeat */
-
- reqvary = (repeatMin == repeat_max) ? 0 : REQ_VARY;
-
- opType = 0; /* Default single-char op codes */
-
- /* Save start of previous item, in case we have to move it up to make space
- for an inserted OP_ONCE for the additional '+' extension. */
- /* FIXME: Probably don't need this because we don't use OP_ONCE. */
-
- tempcode = previous;
-
- /* If the next character is '+', we have a possessive quantifier. This
- implies greediness, whatever the setting of the PCRE_UNGREEDY option.
- If the next character is '?' this is a minimizing repeat, by default,
- but if PCRE_UNGREEDY is set, it works the other way round. We change the
- repeat type to the non-default. */
-
- if (safelyCheckNextChar(ptr, patternEnd, '?')) {
- repeatType = 1;
- ptr++;
- } else
- repeatType = 0;
-
- /* If previous was a character match, abolish the item and generate a
- repeat item instead. If a char item has a minumum of more than one, ensure
- that it is set in reqByte - it might not be if a sequence such as x{3} is
- the first thing in a branch because the x will have gone into firstByte
- instead. */
-
- if (*previous == OP_CHAR || *previous == OP_CHAR_IGNORING_CASE) {
- /* Deal with UTF-8 characters that take up more than one byte. It's
- easier to write this out separately than try to macrify it. Use c to
- hold the length of the character in bytes, plus 0x80 to flag that it's a
- length rather than a small character. */
-
- if (code[-1] & 0x80) {
- unsigned char *lastchar = code - 1;
- while((*lastchar & 0xc0) == 0x80)
- lastchar--;
- c = code - lastchar; /* Length of UTF-8 character */
- memcpy(utf8_char, lastchar, c); /* Save the char */
- c |= 0x80; /* Flag c as a length */
- }
- else {
- c = code[-1];
- if (repeatMin > 1)
- reqByte = c | reqCaseOpt | cd.reqVaryOpt;
- }
-
- goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */
- }
-
- else if (*previous == OP_ASCII_CHAR || *previous == OP_ASCII_LETTER_IGNORING_CASE) {
- c = previous[1];
- if (repeatMin > 1)
- reqByte = c | reqCaseOpt | cd.reqVaryOpt;
- goto OUTPUT_SINGLE_REPEAT;
- }
-
- /* If previous was a single negated character ([^a] or similar), we use
- one of the special opcodes, replacing it. The code is shared with single-
- character repeats by setting opt_type to add a suitable offset into
- repeatType. OP_NOT is currently used only for single-byte chars. */
-
- else if (*previous == OP_NOT) {
- opType = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */
- c = previous[1];
- goto OUTPUT_SINGLE_REPEAT;
- }
-
- /* If previous was a character type match (\d or similar), abolish it and
- create a suitable repeat item. The code is shared with single-character
- repeats by setting opType to add a suitable offset into repeatType. */
-
- else if (*previous <= OP_NOT_NEWLINE) {
- opType = OP_TYPESTAR - OP_STAR; /* Use type opcodes */
- c = *previous;
-
- OUTPUT_SINGLE_REPEAT:
- int prop_type = -1;
- int prop_value = -1;
-
- unsigned char* oldcode = code;
- code = previous; /* Usually overwrite previous item */
-
- /* If the maximum is zero then the minimum must also be zero; Perl allows
- this case, so we do too - by simply omitting the item altogether. */
-
- if (repeat_max == 0)
- goto END_REPEAT;
-
- /* Combine the opType with the repeatType */
-
- repeatType += opType;
-
- /* A minimum of zero is handled either as the special case * or ?, or as
- an UPTO, with the maximum given. */
-
- if (repeatMin == 0) {
- if (repeat_max == -1)
- *code++ = OP_STAR + repeatType;
- else if (repeat_max == 1)
- *code++ = OP_QUERY + repeatType;
- else {
- *code++ = OP_UPTO + repeatType;
- put2ByteValueAndAdvance(code, repeat_max);
- }
- }
-
- /* A repeat minimum of 1 is optimized into some special cases. If the
- maximum is unlimited, we use OP_PLUS. Otherwise, the original item it
- left in place and, if the maximum is greater than 1, we use OP_UPTO with
- one less than the maximum. */
-
- else if (repeatMin == 1) {
- if (repeat_max == -1)
- *code++ = OP_PLUS + repeatType;
- else {
- code = oldcode; /* leave previous item in place */
- if (repeat_max == 1)
- goto END_REPEAT;
- *code++ = OP_UPTO + repeatType;
- put2ByteValueAndAdvance(code, repeat_max - 1);
- }
- }
-
- /* The case {n,n} is just an EXACT, while the general case {n,m} is
- handled as an EXACT followed by an UPTO. */
-
- else {
- *code++ = OP_EXACT + opType; /* NB EXACT doesn't have repeatType */
- put2ByteValueAndAdvance(code, repeatMin);
-
- /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
- we have to insert the character for the previous code. For a repeated
- Unicode property match, there are two extra bytes that define the
- required property. In UTF-8 mode, long characters have their length in
- c, with the 0x80 bit as a flag. */
-
- if (repeat_max < 0) {
- if (c >= 128) {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- } else {
- *code++ = c;
- if (prop_type >= 0) {
- *code++ = prop_type;
- *code++ = prop_value;
- }
- }
- *code++ = OP_STAR + repeatType;
- }
-
- /* Else insert an UPTO if the max is greater than the min, again
- preceded by the character, for the previously inserted code. */
-
- else if (repeat_max != repeatMin) {
- if (c >= 128) {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- } else
- *code++ = c;
- if (prop_type >= 0) {
- *code++ = prop_type;
- *code++ = prop_value;
- }
- repeat_max -= repeatMin;
- *code++ = OP_UPTO + repeatType;
- put2ByteValueAndAdvance(code, repeat_max);
- }
- }
-
- /* The character or character type itself comes last in all cases. */
-
- if (c >= 128) {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- } else
- *code++ = c;
-
- /* For a repeated Unicode property match, there are two extra bytes that
- define the required property. */
-
- if (prop_type >= 0) {
- *code++ = prop_type;
- *code++ = prop_value;
- }
- }
-
- /* If previous was a character class or a back reference, we put the repeat
- stuff after it, but just skip the item if the repeat was {0,0}. */
-
- else if (*previous == OP_CLASS ||
- *previous == OP_NCLASS ||
- *previous == OP_XCLASS ||
- *previous == OP_REF)
- {
- if (repeat_max == 0) {
- code = previous;
- goto END_REPEAT;
- }
-
- if (repeatMin == 0 && repeat_max == -1)
- *code++ = OP_CRSTAR + repeatType;
- else if (repeatMin == 1 && repeat_max == -1)
- *code++ = OP_CRPLUS + repeatType;
- else if (repeatMin == 0 && repeat_max == 1)
- *code++ = OP_CRQUERY + repeatType;
- else {
- *code++ = OP_CRRANGE + repeatType;
- put2ByteValueAndAdvance(code, repeatMin);
- if (repeat_max == -1)
- repeat_max = 0; /* 2-byte encoding for max */
- put2ByteValueAndAdvance(code, repeat_max);
- }
- }
-
- /* If previous was a bracket group, we may have to replicate it in certain
- cases. */
-
- else if (*previous >= OP_BRA) {
- int ketoffset = 0;
- int len = code - previous;
- unsigned char* bralink = NULL;
-
- /* If the maximum repeat count is unlimited, find the end of the bracket
- by scanning through from the start, and compute the offset back to it
- from the current code pointer. There may be an OP_OPT setting following
- the final KET, so we can't find the end just by going back from the code
- pointer. */
-
- if (repeat_max == -1) {
- const unsigned char* ket = previous;
- advanceToEndOfBracket(ket);
- ketoffset = code - ket;
- }
-
- /* The case of a zero minimum is special because of the need to stick
- OP_BRAZERO in front of it, and because the group appears once in the
- data, whereas in other cases it appears the minimum number of times. For
- this reason, it is simplest to treat this case separately, as otherwise
- the code gets far too messy. There are several special subcases when the
- minimum is zero. */
-
- if (repeatMin == 0) {
- /* If the maximum is also zero, we just omit the group from the output
- altogether. */
-
- if (repeat_max == 0) {
- code = previous;
- goto END_REPEAT;
- }
-
- /* If the maximum is 1 or unlimited, we just have to stick in the
- BRAZERO and do no more at this point. However, we do need to adjust
- any OP_RECURSE calls inside the group that refer to the group itself or
- any internal group, because the offset is from the start of the whole
- regex. Temporarily terminate the pattern while doing this. */
-
- if (repeat_max <= 1) {
- *code = OP_END;
- memmove(previous+1, previous, len);
- code++;
- *previous++ = OP_BRAZERO + repeatType;
- }
-
- /* If the maximum is greater than 1 and limited, we have to replicate
- in a nested fashion, sticking OP_BRAZERO before each set of brackets.
- The first one has to be handled carefully because it's the original
- copy, which has to be moved up. The remainder can be handled by code
- that is common with the non-zero minimum case below. We have to
- adjust the value of repeat_max, since one less copy is required. */
-
- else {
- *code = OP_END;
- memmove(previous + 2 + LINK_SIZE, previous, len);
- code += 2 + LINK_SIZE;
- *previous++ = OP_BRAZERO + repeatType;
- *previous++ = OP_BRA;
-
- /* We chain together the bracket offset fields that have to be
- filled in later when the ends of the brackets are reached. */
-
- int offset = (!bralink) ? 0 : previous - bralink;
- bralink = previous;
- putLinkValueAllowZeroAndAdvance(previous, offset);
- }
-
- repeat_max--;
- }
-
- /* If the minimum is greater than zero, replicate the group as many
- times as necessary, and adjust the maximum to the number of subsequent
- copies that we need. If we set a first char from the group, and didn't
- set a required char, copy the latter from the former. */
-
- else {
- if (repeatMin > 1) {
- if (didGroupSetFirstByte && reqByte < 0)
- reqByte = firstByte;
- for (int i = 1; i < repeatMin; i++) {
- memcpy(code, previous, len);
- code += len;
- }
- }
- if (repeat_max > 0)
- repeat_max -= repeatMin;
- }
-
- /* This code is common to both the zero and non-zero minimum cases. If
- the maximum is limited, it replicates the group in a nested fashion,
- remembering the bracket starts on a stack. In the case of a zero minimum,
- the first one was set up above. In all cases the repeat_max now specifies
- the number of additional copies needed. */
-
- if (repeat_max >= 0) {
- for (int i = repeat_max - 1; i >= 0; i--) {
- *code++ = OP_BRAZERO + repeatType;
-
- /* All but the final copy start a new nesting, maintaining the
- chain of brackets outstanding. */
-
- if (i != 0) {
- *code++ = OP_BRA;
- int offset = (!bralink) ? 0 : code - bralink;
- bralink = code;
- putLinkValueAllowZeroAndAdvance(code, offset);
- }
-
- memcpy(code, previous, len);
- code += len;
- }
-
- /* Now chain through the pending brackets, and fill in their length
- fields (which are holding the chain links pro tem). */
-
- while (bralink) {
- int offset = code - bralink + 1;
- unsigned char* bra = code - offset;
- int oldlinkoffset = getLinkValueAllowZero(bra + 1);
- bralink = (!oldlinkoffset) ? 0 : bralink - oldlinkoffset;
- *code++ = OP_KET;
- putLinkValueAndAdvance(code, offset);
- putLinkValue(bra + 1, offset);
- }
- }
-
- /* If the maximum is unlimited, set a repeater in the final copy. We
- can't just offset backwards from the current code point, because we
- don't know if there's been an options resetting after the ket. The
- correct offset was computed above. */
-
- else
- code[-ketoffset] = OP_KETRMAX + repeatType;
- }
-
- // A quantifier after an assertion is mostly meaningless, but it
- // can nullify the assertion if it has a 0 minimum.
- else if (*previous == OP_ASSERT || *previous == OP_ASSERT_NOT) {
- if (repeatMin == 0) {
- code = previous;
- goto END_REPEAT;
- }
- }
-
- /* Else there's some kind of shambles */
-
- else {
- *errorCodePtr = ERR11;
- goto FAILED;
- }
-
- /* In all case we no longer have a previous item. We also set the
- "follows varying string" flag for subsequently encountered reqbytes if
- it isn't already set and we have just passed a varying length item. */
-
- END_REPEAT:
- previous = NULL;
- cd.reqVaryOpt |= reqvary;
- break;
-
- /* Start of nested bracket sub-expression, or comment or lookahead or
- lookbehind or option setting or condition. First deal with special things
- that can come after a bracket; all are introduced by ?, and the appearance
- of any of them means that this is not a referencing group. They were
- checked for validity in the first pass over the string, so we don't have to
- check for syntax errors here. */
-
- case '(':
- skipBytes = 0;
-
- if (*(++ptr) == '?') {
- switch (*(++ptr)) {
- case ':': /* Non-extracting bracket */
- bravalue = OP_BRA;
- ptr++;
- break;
-
- case '=': /* Positive lookahead */
- bravalue = OP_ASSERT;
- ptr++;
- break;
-
- case '!': /* Negative lookahead */
- bravalue = OP_ASSERT_NOT;
- ptr++;
- break;
-
- /* Character after (? not specially recognized */
-
- default:
- *errorCodePtr = ERR12;
- goto FAILED;
- }
- }
-
- /* Else we have a referencing group; adjust the opcode. If the bracket
- number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
- arrange for the true number to follow later, in an OP_BRANUMBER item. */
-
- else {
- if (++(*brackets) > EXTRACT_BASIC_MAX) {
- bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
- code[1 + LINK_SIZE] = OP_BRANUMBER;
- put2ByteValue(code + 2 + LINK_SIZE, *brackets);
- skipBytes = 3;
- }
- else
- bravalue = OP_BRA + *brackets;
- }
-
- /* Process nested bracketed re. We copy code into a non-variable
- in order to be able to pass its address because some compilers
- complain otherwise. Pass in a new setting for the ims options
- if they have changed. */
-
- previous = code;
- *code = bravalue;
- tempcode = code;
- tempreqvary = cd.reqVaryOpt; /* Save value before bracket */
-
- if (!compileBracket(
- options,
- brackets, /* Extracting bracket count */
- &tempcode, /* Where to put code (updated) */
- &ptr, /* Input pointer (updated) */
- patternEnd,
- errorCodePtr, /* Where to put an error message */
- skipBytes, /* Skip over OP_BRANUMBER */
- &subFirstByte, /* For possible first char */
- &subReqByte, /* For possible last char */
- cd)) /* Tables block */
- goto FAILED;
-
- /* At the end of compiling, code is still pointing to the start of the
- group, while tempcode has been updated to point past the end of the group
- and any option resetting that may follow it. The pattern pointer (ptr)
- is on the bracket. */
-
- /* Handle updating of the required and first characters. Update for normal
- brackets of all kinds, and conditions with two branches (see code above).
- If the bracket is followed by a quantifier with zero repeat, we have to
- back off. Hence the definition of zeroReqByte and zeroFirstByte outside the
- main loop so that they can be accessed for the back off. */
-
- zeroReqByte = reqByte;
- zeroFirstByte = firstByte;
- didGroupSetFirstByte = false;
-
- if (bravalue >= OP_BRA) {
- /* If we have not yet set a firstByte in this branch, take it from the
- subpattern, remembering that it was set here so that a repeat of more
- than one can replicate it as reqByte if necessary. If the subpattern has
- no firstByte, set "none" for the whole branch. In both cases, a zero
- repeat forces firstByte to "none". */
-
- if (firstByte == REQ_UNSET) {
- if (subFirstByte >= 0) {
- firstByte = subFirstByte;
- didGroupSetFirstByte = true;
- }
- else
- firstByte = REQ_NONE;
- zeroFirstByte = REQ_NONE;
- }
-
- /* If firstByte was previously set, convert the subpattern's firstByte
- into reqByte if there wasn't one, using the vary flag that was in
- existence beforehand. */
-
- else if (subFirstByte >= 0 && subReqByte < 0)
- subReqByte = subFirstByte | tempreqvary;
-
- /* If the subpattern set a required byte (or set a first byte that isn't
- really the first byte - see above), set it. */
-
- if (subReqByte >= 0)
- reqByte = subReqByte;
- }
-
- /* For a forward assertion, we take the reqByte, if set. This can be
- helpful if the pattern that follows the assertion doesn't set a different
- char. For example, it's useful for /(?=abcde).+/. We can't set firstByte
- for an assertion, however because it leads to incorrect effect for patterns
- such as /(?=a)a.+/ when the "real" "a" would then become a reqByte instead
- of a firstByte. This is overcome by a scan at the end if there's no
- firstByte, looking for an asserted first char. */
-
- else if (bravalue == OP_ASSERT && subReqByte >= 0)
- reqByte = subReqByte;
-
- /* Now update the main code pointer to the end of the group. */
-
- code = tempcode;
-
- /* Error if hit end of pattern */
-
- if (ptr >= patternEnd || *ptr != ')') {
- *errorCodePtr = ERR14;
- goto FAILED;
- }
- break;
-
- /* Check \ for being a real metacharacter; if not, fall through and handle
- it as a data character at the start of a string. Escape items are checked
- for validity in the pre-compiling pass. */
-
- case '\\':
- tempptr = ptr;
- c = checkEscape(&ptr, patternEnd, errorCodePtr, cd.numCapturingBrackets, false);
-
- /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
- are arranged to be the negation of the corresponding OP_values. For the
- back references, the values are ESC_REF plus the reference number. Only
- back references and those types that consume a character may be repeated.
- We can test for values between ESC_b and ESC_w for the latter; this may
- have to change if any new ones are ever created. */
-
- if (c < 0) {
- /* For metasequences that actually match a character, we disable the
- setting of a first character if it hasn't already been set. */
-
- if (firstByte == REQ_UNSET && -c > ESC_b && -c <= ESC_w)
- firstByte = REQ_NONE;
-
- /* Set values to reset to if this is followed by a zero repeat. */
-
- zeroFirstByte = firstByte;
- zeroReqByte = reqByte;
-
- /* Back references are handled specially */
-
- if (-c >= ESC_REF) {
- int number = -c - ESC_REF;
- previous = code;
- *code++ = OP_REF;
- put2ByteValueAndAdvance(code, number);
- }
-
- /* For the rest, we can obtain the OP value by negating the escape
- value */
-
- else {
- previous = (-c > ESC_b && -c <= ESC_w) ? code : NULL;
- *code++ = -c;
- }
- continue;
- }
-
- /* Fall through. */
-
- /* Handle a literal character. It is guaranteed not to be whitespace or #
- when the extended flag is set. If we are in UTF-8 mode, it may be a
- multi-byte literal character. */
-
- default:
- NORMAL_CHAR:
-
- previous = code;
-
- if (c < 128) {
- mcLength = 1;
- mcbuffer[0] = c;
-
- if ((options & IgnoreCaseOption) && (c | 0x20) >= 'a' && (c | 0x20) <= 'z') {
- *code++ = OP_ASCII_LETTER_IGNORING_CASE;
- *code++ = c | 0x20;
- } else {
- *code++ = OP_ASCII_CHAR;
- *code++ = c;
- }
- } else {
- mcLength = encodeUTF8(c, mcbuffer);
-
- *code++ = (options & IgnoreCaseOption) ? OP_CHAR_IGNORING_CASE : OP_CHAR;
- for (c = 0; c < mcLength; c++)
- *code++ = mcbuffer[c];
- }
-
- /* Set the first and required bytes appropriately. If no previous first
- byte, set it from this character, but revert to none on a zero repeat.
- Otherwise, leave the firstByte value alone, and don't change it on a zero
- repeat. */
-
- if (firstByte == REQ_UNSET) {
- zeroFirstByte = REQ_NONE;
- zeroReqByte = reqByte;
-
- /* If the character is more than one byte long, we can set firstByte
- only if it is not to be matched caselessly. */
-
- if (mcLength == 1 || reqCaseOpt == 0) {
- firstByte = mcbuffer[0] | reqCaseOpt;
- if (mcLength != 1)
- reqByte = code[-1] | cd.reqVaryOpt;
- }
- else
- firstByte = reqByte = REQ_NONE;
- }
-
- /* firstByte was previously set; we can set reqByte only the length is
- 1 or the matching is caseful. */
-
- else {
- zeroFirstByte = firstByte;
- zeroReqByte = reqByte;
- if (mcLength == 1 || reqCaseOpt == 0)
- reqByte = code[-1] | reqCaseOpt | cd.reqVaryOpt;
- }
-
- break; /* End of literal character handling */
- }
- } /* end of big loop */
-
- /* Control never reaches here by falling through, only by a goto for all the
- error states. Pass back the position in the pattern so that it can be displayed
- to the user for diagnosing the error. */
-
-FAILED:
- *ptrPtr = ptr;
- return false;
-}
-
-/*************************************************
-* Compile sequence of alternatives *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
- options option bits, including any changes for this subpattern
- brackets -> int containing the number of extracting brackets used
- codePtr -> the address of the current code pointer
- ptrPtr -> the address of the current pattern pointer
- errorCodePtr -> pointer to error code variable
- skipBytes skip this many bytes at start (for OP_BRANUMBER)
- firstbyteptr place to put the first required character, or a negative number
- reqbyteptr place to put the last required character, or a negative number
- cd points to the data block with tables pointers etc.
-
-Returns: true on success
-*/
-
-static bool
-compileBracket(int options, int* brackets, unsigned char** codePtr,
- const UChar** ptrPtr, const UChar* patternEnd, ErrorCode* errorCodePtr, int skipBytes,
- int* firstbyteptr, int* reqbyteptr, CompileData& cd)
-{
- const UChar* ptr = *ptrPtr;
- unsigned char* code = *codePtr;
- unsigned char* lastBranch = code;
- unsigned char* start_bracket = code;
- int firstByte = REQ_UNSET;
- int reqByte = REQ_UNSET;
-
- /* Offset is set zero to mark that this bracket is still open */
-
- putLinkValueAllowZero(code + 1, 0);
- code += 1 + LINK_SIZE + skipBytes;
-
- /* Loop for each alternative branch */
-
- while (true) {
- /* Now compile the branch */
-
- int branchFirstByte;
- int branchReqByte;
- if (!compileBranch(options, brackets, &code, &ptr, patternEnd, errorCodePtr,
- &branchFirstByte, &branchReqByte, cd)) {
- *ptrPtr = ptr;
- return false;
- }
-
- /* If this is the first branch, the firstByte and reqByte values for the
- branch become the values for the regex. */
-
- if (*lastBranch != OP_ALT) {
- firstByte = branchFirstByte;
- reqByte = branchReqByte;
- }
-
- /* If this is not the first branch, the first char and reqByte have to
- match the values from all the previous branches, except that if the previous
- value for reqByte didn't have REQ_VARY set, it can still match, and we set
- REQ_VARY for the regex. */
-
- else {
- /* If we previously had a firstByte, but it doesn't match the new branch,
- we have to abandon the firstByte for the regex, but if there was previously
- no reqByte, it takes on the value of the old firstByte. */
-
- if (firstByte >= 0 && firstByte != branchFirstByte) {
- if (reqByte < 0)
- reqByte = firstByte;
- firstByte = REQ_NONE;
- }
-
- /* If we (now or from before) have no firstByte, a firstByte from the
- branch becomes a reqByte if there isn't a branch reqByte. */
-
- if (firstByte < 0 && branchFirstByte >= 0 && branchReqByte < 0)
- branchReqByte = branchFirstByte;
-
- /* Now ensure that the reqbytes match */
-
- if ((reqByte & ~REQ_VARY) != (branchReqByte & ~REQ_VARY))
- reqByte = REQ_NONE;
- else
- reqByte |= branchReqByte; /* To "or" REQ_VARY */
- }
-
- /* Reached end of expression, either ')' or end of pattern. Go back through
- the alternative branches and reverse the chain of offsets, with the field in
- the BRA item now becoming an offset to the first alternative. If there are
- no alternatives, it points to the end of the group. The length in the
- terminating ket is always the length of the whole bracketed item. If any of
- the ims options were changed inside the group, compile a resetting op-code
- following, except at the very end of the pattern. Return leaving the pointer
- at the terminating char. */
-
- if (ptr >= patternEnd || *ptr != '|') {
- int length = code - lastBranch;
- do {
- int prevLength = getLinkValueAllowZero(lastBranch + 1);
- putLinkValue(lastBranch + 1, length);
- length = prevLength;
- lastBranch -= length;
- } while (length > 0);
-
- /* Fill in the ket */
-
- *code = OP_KET;
- putLinkValue(code + 1, code - start_bracket);
- code += 1 + LINK_SIZE;
-
- /* Set values to pass back */
-
- *codePtr = code;
- *ptrPtr = ptr;
- *firstbyteptr = firstByte;
- *reqbyteptr = reqByte;
- return true;
- }
-
- /* Another branch follows; insert an "or" node. Its length field points back
- to the previous branch while the bracket remains open. At the end the chain
- is reversed. It's done like this so that the start of the bracket has a
- zero offset until it is closed, making it possible to detect recursion. */
-
- *code = OP_ALT;
- putLinkValue(code + 1, code - lastBranch);
- lastBranch = code;
- code += 1 + LINK_SIZE;
- ptr++;
- }
- ASSERT_NOT_REACHED();
-}
-
-/*************************************************
-* Check for anchored expression *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start OP_CIRC, or with a bracket
-all of whose alternatives start OP_CIRC (recurse ad lib), then
-it's anchored.
-
-Arguments:
- code points to start of expression (the bracket)
- captureMap a bitmap of which brackets we are inside while testing; this
- handles up to substring 31; all brackets after that share
- the zero bit
- backrefMap the back reference bitmap
-*/
-
-static bool branchIsAnchored(const unsigned char* code)
-{
- const unsigned char* scode = firstSignificantOpcode(code);
- int op = *scode;
-
- /* Brackets */
- if (op >= OP_BRA || op == OP_ASSERT)
- return bracketIsAnchored(scode);
-
- /* Check for explicit anchoring */
- return op == OP_CIRC;
-}
-
-static bool bracketIsAnchored(const unsigned char* code)
-{
- do {
- if (!branchIsAnchored(code + 1 + LINK_SIZE))
- return false;
- code += getLinkValue(code + 1);
- } while (*code == OP_ALT); /* Loop for each alternative */
- return true;
-}
-
-/*************************************************
-* Check for starting with ^ or .* *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n)
-
-Except when the .* appears inside capturing parentheses, and there is a
-subsequent back reference to those parentheses. By keeping a bitmap of the
-first 31 back references, we can catch some of the more common cases more
-precisely; all the greater back references share a single bit.
-
-Arguments:
- code points to start of expression (the bracket)
- captureMap a bitmap of which brackets we are inside while testing; this
- handles up to substring 31; all brackets after that share
- the zero bit
- backrefMap the back reference bitmap
-*/
-
-static bool branchNeedsLineStart(const unsigned char* code, unsigned captureMap, unsigned backrefMap)
-{
- const unsigned char* scode = firstSignificantOpcode(code);
- int op = *scode;
-
- /* Capturing brackets */
- if (op > OP_BRA) {
- int captureNum = op - OP_BRA;
- if (captureNum > EXTRACT_BASIC_MAX)
- captureNum = get2ByteValue(scode + 2 + LINK_SIZE);
- int bracketMask = (captureNum < 32) ? (1 << captureNum) : 1;
- return bracketNeedsLineStart(scode, captureMap | bracketMask, backrefMap);
- }
-
- /* Other brackets */
- if (op == OP_BRA || op == OP_ASSERT)
- return bracketNeedsLineStart(scode, captureMap, backrefMap);
-
- /* .* means "start at start or after \n" if it isn't in brackets that
- may be referenced. */
-
- if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
- return scode[1] == OP_NOT_NEWLINE && !(captureMap & backrefMap);
-
- /* Explicit ^ */
- return op == OP_CIRC || op == OP_BOL;
-}
-
-static bool bracketNeedsLineStart(const unsigned char* code, unsigned captureMap, unsigned backrefMap)
-{
- do {
- if (!branchNeedsLineStart(code + 1 + LINK_SIZE, captureMap, backrefMap))
- return false;
- code += getLinkValue(code + 1);
- } while (*code == OP_ALT); /* Loop for each alternative */
- return true;
-}
-
-/*************************************************
-* Check for asserted fixed first char *
-*************************************************/
-
-/* During compilation, the "first char" settings from forward assertions are
-discarded, because they can cause conflicts with actual literals that follow.
-However, if we end up without a first char setting for an unanchored pattern,
-it is worth scanning the regex to see if there is an initial asserted first
-char. If all branches start with the same asserted char, or with a bracket all
-of whose alternatives start with the same asserted char (recurse ad lib), then
-we return that char, otherwise -1.
-
-Arguments:
- code points to start of expression (the bracket)
- options pointer to the options (used to check casing changes)
- inassert true if in an assertion
-
-Returns: -1 or the fixed first char
-*/
-
-static int branchFindFirstAssertedCharacter(const unsigned char* code, bool inassert)
-{
- const unsigned char* scode = firstSignificantOpcodeSkippingAssertions(code);
- int op = *scode;
-
- if (op >= OP_BRA)
- op = OP_BRA;
-
- switch (op) {
- default:
- return -1;
-
- case OP_BRA:
- case OP_ASSERT:
- return bracketFindFirstAssertedCharacter(scode, op == OP_ASSERT);
-
- case OP_EXACT:
- scode += 2;
- /* Fall through */
-
- case OP_CHAR:
- case OP_CHAR_IGNORING_CASE:
- case OP_ASCII_CHAR:
- case OP_ASCII_LETTER_IGNORING_CASE:
- case OP_PLUS:
- case OP_MINPLUS:
- if (!inassert)
- return -1;
- return scode[1];
- }
-}
-
-static int bracketFindFirstAssertedCharacter(const unsigned char* code, bool inassert)
-{
- int c = -1;
- do {
- int d = branchFindFirstAssertedCharacter(code + 1 + LINK_SIZE, inassert);
- if (d < 0)
- return -1;
- if (c < 0)
- c = d;
- else if (c != d)
- return -1;
- code += getLinkValue(code + 1);
- } while (*code == OP_ALT);
- return c;
-}
-
-static inline int multiplyWithOverflowCheck(int a, int b)
-{
- if (!a || !b)
- return 0;
- if (a > MAX_PATTERN_SIZE / b)
- return -1;
- return a * b;
-}
-
-static int calculateCompiledPatternLength(const UChar* pattern, int patternLength, JSRegExpIgnoreCaseOption ignoreCase,
- CompileData& cd, ErrorCode& errorcode)
-{
- /* Make a pass over the pattern to compute the
- amount of store required to hold the compiled code. This does not have to be
- perfect as long as errors are overestimates. */
-
- if (patternLength > MAX_PATTERN_SIZE) {
- errorcode = ERR16;
- return -1;
- }
-
- int length = 1 + LINK_SIZE; /* For initial BRA plus length */
- int branch_extra = 0;
- int lastitemlength = 0;
- unsigned brastackptr = 0;
- FixedArray<int, BRASTACK_SIZE> brastack;
- FixedArray<unsigned char, BRASTACK_SIZE> bralenstack;
- int bracount = 0;
-
- const UChar* ptr = (const UChar*)(pattern - 1);
- const UChar* patternEnd = (const UChar*)(pattern + patternLength);
-
- while (++ptr < patternEnd) {
- int minRepeats = 0, maxRepeats = 0;
- int c = *ptr;
-
- switch (c) {
- /* A backslashed item may be an escaped data character or it may be a
- character type. */
-
- case '\\':
- c = checkEscape(&ptr, patternEnd, &errorcode, cd.numCapturingBrackets, false);
- if (errorcode != 0)
- return -1;
-
- lastitemlength = 1; /* Default length of last item for repeats */
-
- if (c >= 0) { /* Data character */
- length += 2; /* For a one-byte character */
-
- if (c > 127) {
- int i;
- for (i = 0; i < jsc_pcre_utf8_table1_size; i++)
- if (c <= jsc_pcre_utf8_table1[i]) break;
- length += i;
- lastitemlength += i;
- }
-
- continue;
- }
-
- /* Other escapes need one byte */
-
- length++;
-
- /* A back reference needs an additional 2 bytes, plus either one or 5
- bytes for a repeat. We also need to keep the value of the highest
- back reference. */
-
- if (c <= -ESC_REF) {
- int refnum = -c - ESC_REF;
- cd.backrefMap |= (refnum < 32) ? (1 << refnum) : 1;
- if (refnum > cd.topBackref)
- cd.topBackref = refnum;
- length += 2; /* For single back reference */
- if (safelyCheckNextChar(ptr, patternEnd, '{') && isCountedRepeat(ptr + 2, patternEnd)) {
- ptr = readRepeatCounts(ptr + 2, &minRepeats, &maxRepeats, &errorcode);
- if (errorcode)
- return -1;
- if ((minRepeats == 0 && (maxRepeats == 1 || maxRepeats == -1)) ||
- (minRepeats == 1 && maxRepeats == -1))
- length++;
- else
- length += 5;
- if (safelyCheckNextChar(ptr, patternEnd, '?'))
- ptr++;
- }
- }
- continue;
-
- case '^': /* Single-byte metacharacters */
- case '.':
- case '$':
- length++;
- lastitemlength = 1;
- continue;
-
- case '*': /* These repeats won't be after brackets; */
- case '+': /* those are handled separately */
- case '?':
- length++;
- goto POSSESSIVE;
-
- /* This covers the cases of braced repeats after a single char, metachar,
- class, or back reference. */
-
- case '{':
- if (!isCountedRepeat(ptr + 1, patternEnd))
- goto NORMAL_CHAR;
- ptr = readRepeatCounts(ptr + 1, &minRepeats, &maxRepeats, &errorcode);
- if (errorcode != 0)
- return -1;
-
- /* These special cases just insert one extra opcode */
-
- if ((minRepeats == 0 && (maxRepeats == 1 || maxRepeats == -1)) ||
- (minRepeats == 1 && maxRepeats == -1))
- length++;
-
- /* These cases might insert additional copies of a preceding character. */
-
- else {
- if (minRepeats != 1) {
- length -= lastitemlength; /* Uncount the original char or metachar */
- if (minRepeats > 0)
- length += 3 + lastitemlength;
- }
- length += lastitemlength + ((maxRepeats > 0) ? 3 : 1);
- }
-
- if (safelyCheckNextChar(ptr, patternEnd, '?'))
- ptr++; /* Needs no extra length */
-
- POSSESSIVE: /* Test for possessive quantifier */
- if (safelyCheckNextChar(ptr, patternEnd, '+')) {
- ptr++;
- length += 2 + 2 * LINK_SIZE; /* Allow for atomic brackets */
- }
- continue;
-
- /* An alternation contains an offset to the next branch or ket. If any ims
- options changed in the previous branch(es), and/or if we are in a
- lookbehind assertion, extra space will be needed at the start of the
- branch. This is handled by branch_extra. */
-
- case '|':
- if (brastackptr == 0)
- cd.needOuterBracket = true;
- length += 1 + LINK_SIZE + branch_extra;
- continue;
-
- /* A character class uses 33 characters provided that all the character
- values are less than 256. Otherwise, it uses a bit map for low valued
- characters, and individual items for others. Don't worry about character
- types that aren't allowed in classes - they'll get picked up during the
- compile. A character class that contains only one single-byte character
- uses 2 or 3 bytes, depending on whether it is negated or not. Notice this
- where we can. (In UTF-8 mode we can do this only for chars < 128.) */
-
- case '[': {
- int class_optcount;
- if (*(++ptr) == '^') {
- class_optcount = 10; /* Greater than one */
- ptr++;
- }
- else
- class_optcount = 0;
-
- bool class_utf8 = false;
-
- for (; ptr < patternEnd && *ptr != ']'; ++ptr) {
- /* Check for escapes */
-
- if (*ptr == '\\') {
- c = checkEscape(&ptr, patternEnd, &errorcode, cd.numCapturingBrackets, true);
- if (errorcode != 0)
- return -1;
-
- /* Handle escapes that turn into characters */
-
- if (c >= 0)
- goto NON_SPECIAL_CHARACTER;
-
- /* Escapes that are meta-things. The normal ones just affect the
- bit map, but Unicode properties require an XCLASS extended item. */
-
- else
- class_optcount = 10; /* \d, \s etc; make sure > 1 */
- }
-
- /* Anything else increments the possible optimization count. We have to
- detect ranges here so that we can compute the number of extra ranges for
- caseless wide characters when UCP support is available. If there are wide
- characters, we are going to have to use an XCLASS, even for single
- characters. */
-
- else {
- c = *ptr;
-
- /* Come here from handling \ above when it escapes to a char value */
-
- NON_SPECIAL_CHARACTER:
- class_optcount++;
-
- int d = -1;
- if (safelyCheckNextChar(ptr, patternEnd, '-')) {
- const UChar* hyptr = ptr++;
- if (safelyCheckNextChar(ptr, patternEnd, '\\')) {
- ptr++;
- d = checkEscape(&ptr, patternEnd, &errorcode, cd.numCapturingBrackets, true);
- if (errorcode != 0)
- return -1;
- }
- else if ((ptr + 1 < patternEnd) && ptr[1] != ']')
- d = *++ptr;
- if (d < 0)
- ptr = hyptr; /* go back to hyphen as data */
- }
-
- /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or >
- 127 for caseless matching, we will need to use an XCLASS. */
-
- if (d >= 0) {
- class_optcount = 10; /* Ensure > 1 */
- if (d < c) {
- errorcode = ERR8;
- return -1;
- }
-
- if ((d > 255 || (ignoreCase && d > 127))) {
- unsigned char buffer[6];
- if (!class_utf8) /* Allow for XCLASS overhead */
- {
- class_utf8 = true;
- length += LINK_SIZE + 2;
- }
-
- /* If we have UCP support, find out how many extra ranges are
- needed to map the other case of characters within this range. We
- have to mimic the range optimization here, because extending the
- range upwards might push d over a boundary that makes it use
- another byte in the UTF-8 representation. */
-
- if (ignoreCase) {
- int occ, ocd;
- int cc = c;
- int origd = d;
- while (getOthercaseRange(&cc, origd, &occ, &ocd)) {
- if (occ >= c && ocd <= d)
- continue; /* Skip embedded */
-
- if (occ < c && ocd >= c - 1) /* Extend the basic range */
- { /* if there is overlap, */
- c = occ; /* noting that if occ < c */
- continue; /* we can't have ocd > d */
- } /* because a subrange is */
- if (ocd > d && occ <= d + 1) /* always shorter than */
- { /* the basic range. */
- d = ocd;
- continue;
- }
-
- /* An extra item is needed */
-
- length += 1 + encodeUTF8(occ, buffer) +
- ((occ == ocd) ? 0 : encodeUTF8(ocd, buffer));
- }
- }
-
- /* The length of the (possibly extended) range */
-
- length += 1 + encodeUTF8(c, buffer) + encodeUTF8(d, buffer);
- }
-
- }
-
- /* We have a single character. There is nothing to be done unless we
- are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must
- allow for an XCL_SINGLE item, doubled for caselessness if there is UCP
- support. */
-
- else {
- if ((c > 255 || (ignoreCase && c > 127))) {
- unsigned char buffer[6];
- class_optcount = 10; /* Ensure > 1 */
- if (!class_utf8) /* Allow for XCLASS overhead */
- {
- class_utf8 = true;
- length += LINK_SIZE + 2;
- }
- length += (ignoreCase ? 2 : 1) * (1 + encodeUTF8(c, buffer));
- }
- }
- }
- }
-
- if (ptr >= patternEnd) { /* Missing terminating ']' */
- errorcode = ERR6;
- return -1;
- }
-
- /* We can optimize when there was only one optimizable character.
- Note that this does not detect the case of a negated single character.
- In that case we do an incorrect length computation, but it's not a serious
- problem because the computed length is too large rather than too small. */
-
- if (class_optcount == 1)
- goto NORMAL_CHAR;
-
- /* Here, we handle repeats for the class opcodes. */
- {
- length += 33;
-
- /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier,
- we also need extra for wrapping the whole thing in a sub-pattern. */
-
- if (safelyCheckNextChar(ptr, patternEnd, '{') && isCountedRepeat(ptr + 2, patternEnd)) {
- ptr = readRepeatCounts(ptr + 2, &minRepeats, &maxRepeats, &errorcode);
- if (errorcode != 0)
- return -1;
- if ((minRepeats == 0 && (maxRepeats == 1 || maxRepeats == -1)) ||
- (minRepeats == 1 && maxRepeats == -1))
- length++;
- else
- length += 5;
- if (safelyCheckNextChar(ptr, patternEnd, '+')) {
- ptr++;
- length += 2 + 2 * LINK_SIZE;
- } else if (safelyCheckNextChar(ptr, patternEnd, '?'))
- ptr++;
- }
- }
- continue;
- }
-
- /* Brackets may be genuine groups or special things */
-
- case '(': {
- int branch_newextra = 0;
- int bracket_length = 1 + LINK_SIZE;
- bool capturing = false;
-
- /* Handle special forms of bracket, which all start (? */
-
- if (safelyCheckNextChar(ptr, patternEnd, '?')) {
- switch (c = (ptr + 2 < patternEnd ? ptr[2] : 0)) {
- /* Non-referencing groups and lookaheads just move the pointer on, and
- then behave like a non-special bracket, except that they don't increment
- the count of extracting brackets. Ditto for the "once only" bracket,
- which is in Perl from version 5.005. */
-
- case ':':
- case '=':
- case '!':
- ptr += 2;
- break;
-
- /* Else loop checking valid options until ) is met. Anything else is an
- error. If we are without any brackets, i.e. at top level, the settings
- act as if specified in the options, so massage the options immediately.
- This is for backward compatibility with Perl 5.004. */
-
- default:
- errorcode = ERR12;
- return -1;
- }
- } else
- capturing = 1;
-
- /* Capturing brackets must be counted so we can process escapes in a
- Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to need
- an additional 3 bytes of memory per capturing bracket. */
-
- if (capturing) {
- bracount++;
- if (bracount > EXTRACT_BASIC_MAX)
- bracket_length += 3;
- }
-
- /* Save length for computing whole length at end if there's a repeat that
- requires duplication of the group. Also save the current value of
- branch_extra, and start the new group with the new value. If non-zero, this
- will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
-
- if (brastackptr >= sizeof(brastack)/sizeof(int)) {
- errorcode = ERR17;
- return -1;
- }
-
- bralenstack[brastackptr] = branch_extra;
- branch_extra = branch_newextra;
-
- brastack[brastackptr++] = length;
- length += bracket_length;
- continue;
- }
-
- /* Handle ket. Look for subsequent maxRepeats/minRepeats; for certain sets of values we
- have to replicate this bracket up to that many times. If brastackptr is
- 0 this is an unmatched bracket which will generate an error, but take care
- not to try to access brastack[-1] when computing the length and restoring
- the branch_extra value. */
-
- case ')': {
- int duplength;
- length += 1 + LINK_SIZE;
- if (brastackptr > 0) {
- duplength = length - brastack[--brastackptr];
- branch_extra = bralenstack[brastackptr];
- }
- else
- duplength = 0;
-
- /* Leave ptr at the final char; for readRepeatCounts this happens
- automatically; for the others we need an increment. */
-
- if ((ptr + 1 < patternEnd) && (c = ptr[1]) == '{' && isCountedRepeat(ptr + 2, patternEnd)) {
- ptr = readRepeatCounts(ptr + 2, &minRepeats, &maxRepeats, &errorcode);
- if (errorcode)
- return -1;
- } else if (c == '*') {
- minRepeats = 0;
- maxRepeats = -1;
- ptr++;
- } else if (c == '+') {
- minRepeats = 1;
- maxRepeats = -1;
- ptr++;
- } else if (c == '?') {
- minRepeats = 0;
- maxRepeats = 1;
- ptr++;
- } else {
- minRepeats = 1;
- maxRepeats = 1;
- }
-
- /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
- group, and if the maximum is greater than zero, we have to replicate
- maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
- bracket set. */
-
- int repeatsLength;
- if (minRepeats == 0) {
- length++;
- if (maxRepeats > 0) {
- repeatsLength = multiplyWithOverflowCheck(maxRepeats - 1, duplength + 3 + 2 * LINK_SIZE);
- if (repeatsLength < 0) {
- errorcode = ERR16;
- return -1;
- }
- length += repeatsLength;
- if (length > MAX_PATTERN_SIZE) {
- errorcode = ERR16;
- return -1;
- }
- }
- }
-
- /* When the minimum is greater than zero, we have to replicate up to
- minval-1 times, with no additions required in the copies. Then, if there
- is a limited maximum we have to replicate up to maxval-1 times allowing
- for a BRAZERO item before each optional copy and nesting brackets for all
- but one of the optional copies. */
-
- else {
- repeatsLength = multiplyWithOverflowCheck(minRepeats - 1, duplength);
- if (repeatsLength < 0) {
- errorcode = ERR16;
- return -1;
- }
- length += repeatsLength;
- if (maxRepeats > minRepeats) { /* Need this test as maxRepeats=-1 means no limit */
- repeatsLength = multiplyWithOverflowCheck(maxRepeats - minRepeats, duplength + 3 + 2 * LINK_SIZE);
- if (repeatsLength < 0) {
- errorcode = ERR16;
- return -1;
- }
- length += repeatsLength - (2 + 2 * LINK_SIZE);
- }
- if (length > MAX_PATTERN_SIZE) {
- errorcode = ERR16;
- return -1;
- }
- }
-
- /* Allow space for once brackets for "possessive quantifier" */
-
- if (safelyCheckNextChar(ptr, patternEnd, '+')) {
- ptr++;
- length += 2 + 2 * LINK_SIZE;
- }
- continue;
- }
-
- /* Non-special character. It won't be space or # in extended mode, so it is
- always a genuine character. If we are in a \Q...\E sequence, check for the
- end; if not, we have a literal. */
-
- default:
- NORMAL_CHAR:
- length += 2; /* For a one-byte character */
- lastitemlength = 1; /* Default length of last item for repeats */
-
- if (c > 127) {
- int i;
- for (i = 0; i < jsc_pcre_utf8_table1_size; i++)
- if (c <= jsc_pcre_utf8_table1[i])
- break;
- length += i;
- lastitemlength += i;
- }
-
- continue;
- }
- }
-
- length += 2 + LINK_SIZE; /* For final KET and END */
-
- cd.numCapturingBrackets = bracount;
- return length;
-}
-
-/*************************************************
-* Compile a Regular Expression *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression. The original API for this
-function had no error code return variable; it is retained for backwards
-compatibility. The new function is given a new name.
-
-Arguments:
- pattern the regular expression
- options various option bits
- errorCodePtr pointer to error code variable (pcre_compile2() only)
- can be NULL if you don't want a code value
- errorPtr pointer to pointer to error text
- erroroffset ptr offset in pattern where error was detected
- tables pointer to character tables or NULL
-
-Returns: pointer to compiled data block, or NULL on error,
- with errorPtr and erroroffset set
-*/
-
-static inline JSRegExp* returnError(ErrorCode errorcode, const char** errorPtr)
-{
- *errorPtr = errorText(errorcode);
- return 0;
-}
-
-JSRegExp* jsRegExpCompile(const UChar* pattern, int patternLength,
- JSRegExpIgnoreCaseOption ignoreCase, JSRegExpMultilineOption multiline,
- unsigned* numSubpatterns, const char** errorPtr)
-{
- /* We can't pass back an error message if errorPtr is NULL; I guess the best we
- can do is just return NULL, but we can set a code value if there is a code pointer. */
- if (!errorPtr)
- return 0;
- *errorPtr = NULL;
-
- CompileData cd;
-
- ErrorCode errorcode = ERR0;
- /* Call this once just to count the brackets. */
- calculateCompiledPatternLength(pattern, patternLength, ignoreCase, cd, errorcode);
- /* Call it again to compute the length. */
- int length = calculateCompiledPatternLength(pattern, patternLength, ignoreCase, cd, errorcode);
- if (errorcode)
- return returnError(errorcode, errorPtr);
-
- if (length > MAX_PATTERN_SIZE)
- return returnError(ERR16, errorPtr);
-
- size_t size = length + sizeof(JSRegExp);
-#if REGEXP_HISTOGRAM
- size_t stringOffset = (size + sizeof(UChar) - 1) / sizeof(UChar) * sizeof(UChar);
- size = stringOffset + patternLength * sizeof(UChar);
-#endif
- JSRegExp* re = reinterpret_cast_ptr<JSRegExp*>(new char[size]);
-
- if (!re)
- return returnError(ERR13, errorPtr);
-
- re->options = (ignoreCase ? IgnoreCaseOption : 0) | (multiline ? MatchAcrossMultipleLinesOption : 0);
-
- /* The starting points of the name/number translation table and of the code are
- passed around in the compile data block. */
-
- const unsigned char* codeStart = (const unsigned char*)(re + 1);
-
- /* Set up a starting, non-extracting bracket, then compile the expression. On
- error, errorcode will be set non-zero, so we don't need to look at the result
- of the function here. */
-
- const UChar* ptr = (const UChar*)pattern;
- const UChar* patternEnd = pattern + patternLength;
- unsigned char* code = const_cast<unsigned char*>(codeStart);
- int firstByte, reqByte;
- int bracketCount = 0;
- if (!cd.needOuterBracket)
- compileBranch(re->options, &bracketCount, &code, &ptr, patternEnd, &errorcode, &firstByte, &reqByte, cd);
- else {
- *code = OP_BRA;
- compileBracket(re->options, &bracketCount, &code, &ptr, patternEnd, &errorcode, 0, &firstByte, &reqByte, cd);
- }
- re->topBracket = bracketCount;
- re->topBackref = cd.topBackref;
-
- /* If not reached end of pattern on success, there's an excess bracket. */
-
- if (errorcode == 0 && ptr < patternEnd)
- errorcode = ERR10;
-
- /* Fill in the terminating state and check for disastrous overflow, but
- if debugging, leave the test till after things are printed out. */
-
- *code++ = OP_END;
-
- ASSERT(code - codeStart <= length);
- if (code - codeStart > length)
- errorcode = ERR7;
-
- /* Give an error if there's back reference to a non-existent capturing
- subpattern. */
-
- if (re->topBackref > re->topBracket)
- errorcode = ERR15;
-
- /* Failed to compile, or error while post-processing */
-
- if (errorcode != ERR0) {
- delete [] reinterpret_cast<char*>(re);
- return returnError(errorcode, errorPtr);
- }
-
- /* If the anchored option was not passed, set the flag if we can determine that
- the pattern is anchored by virtue of ^ characters or \A or anything else (such
- as starting with .* when DOTALL is set).
-
- Otherwise, if we know what the first character has to be, save it, because that
- speeds up unanchored matches no end. If not, see if we can set the
- UseMultiLineFirstByteOptimizationOption flag. This is helpful for multiline matches when all branches
- start with ^. and also when all branches start with .* for non-DOTALL matches.
- */
-
- if (cd.needOuterBracket ? bracketIsAnchored(codeStart) : branchIsAnchored(codeStart))
- re->options |= IsAnchoredOption;
- else {
- if (firstByte < 0) {
- firstByte = (cd.needOuterBracket
- ? bracketFindFirstAssertedCharacter(codeStart, false)
- : branchFindFirstAssertedCharacter(codeStart, false))
- | ((re->options & IgnoreCaseOption) ? REQ_IGNORE_CASE : 0);
- }
- if (firstByte >= 0) {
- int ch = firstByte & 255;
- if (ch < 127) {
- re->firstByte = ((firstByte & REQ_IGNORE_CASE) && flipCase(ch) == ch) ? ch : firstByte;
- re->options |= UseFirstByteOptimizationOption;
- }
- } else {
- if (cd.needOuterBracket ? bracketNeedsLineStart(codeStart, 0, cd.backrefMap) : branchNeedsLineStart(codeStart, 0, cd.backrefMap))
- re->options |= UseMultiLineFirstByteOptimizationOption;
- }
- }
-
- /* For an anchored pattern, we use the "required byte" only if it follows a
- variable length item in the regex. Remove the caseless flag for non-caseable
- bytes. */
-
- if (reqByte >= 0 && (!(re->options & IsAnchoredOption) || (reqByte & REQ_VARY))) {
- int ch = reqByte & 255;
- if (ch < 127) {
- re->reqByte = ((reqByte & REQ_IGNORE_CASE) && flipCase(ch) == ch) ? (reqByte & ~REQ_IGNORE_CASE) : reqByte;
- re->options |= UseRequiredByteOptimizationOption;
- }
- }
-
-#if REGEXP_HISTOGRAM
- re->stringOffset = stringOffset;
- re->stringLength = patternLength;
- memcpy(reinterpret_cast<char*>(re) + stringOffset, pattern, patternLength * 2);
-#endif
-
- if (numSubpatterns)
- *numSubpatterns = re->topBracket;
- return re;
-}
-
-void jsRegExpFree(JSRegExp* re)
-{
- delete [] reinterpret_cast<char*>(re);
-}
diff --git a/Source/JavaScriptCore/pcre/pcre_exec.cpp b/Source/JavaScriptCore/pcre/pcre_exec.cpp
deleted file mode 100644
index b7018aa..0000000
--- a/Source/JavaScriptCore/pcre/pcre_exec.cpp
+++ /dev/null
@@ -1,2179 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains jsRegExpExecute(), the externally visible function
-that does pattern matching using an NFA algorithm, following the rules from
-the JavaScript specification. There are also some supporting functions. */
-
-#include "config.h"
-#include "pcre_internal.h"
-
-#include <limits.h>
-#include <wtf/ASCIICType.h>
-#include <wtf/Vector.h>
-
-#if REGEXP_HISTOGRAM
-#include <wtf/DateMath.h>
-#include <runtime/UString.h>
-#endif
-
-using namespace WTF;
-
-#if HAVE(COMPUTED_GOTO)
-#define USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
-//#define USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
-#endif
-
-/* Avoid warnings on Windows. */
-#undef min
-#undef max
-
-#ifndef USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
-typedef int ReturnLocation;
-#else
-typedef void* ReturnLocation;
-#endif
-
-#if !REGEXP_HISTOGRAM
-
-class HistogramTimeLogger {
-public:
- HistogramTimeLogger(const JSRegExp*) { }
-};
-
-#else
-
-using namespace JSC;
-
-class Histogram {
-public:
- ~Histogram();
- void add(const JSRegExp*, double);
-
-private:
- typedef HashMap<RefPtr<StringImpl>, double> Map;
- Map times;
-};
-
-class HistogramTimeLogger {
-public:
- HistogramTimeLogger(const JSRegExp*);
- ~HistogramTimeLogger();
-
-private:
- const JSRegExp* m_re;
- double m_startTime;
-};
-
-#endif
-
-/* Structure for building a chain of data for holding the values of
-the subject pointer at the start of each bracket, used to detect when
-an empty string has been matched by a bracket to break infinite loops. */
-struct BracketChainNode {
- BracketChainNode* previousBracket;
- const UChar* bracketStart;
-};
-
-struct MatchFrame {
- WTF_MAKE_FAST_ALLOCATED;
-public:
- ReturnLocation returnLocation;
- struct MatchFrame* previousFrame;
-
- /* Function arguments that may change */
- struct {
- const UChar* subjectPtr;
- const unsigned char* instructionPtr;
- int offsetTop;
- BracketChainNode* bracketChain;
- } args;
-
-
- /* PCRE uses "fake" recursion built off of gotos, thus
- stack-based local variables are not safe to use. Instead we have to
- store local variables on the current MatchFrame. */
- struct {
- const unsigned char* data;
- const unsigned char* startOfRepeatingBracket;
- const UChar* subjectPtrAtStartOfInstruction; // Several instrutions stash away a subjectPtr here for later compare
- const unsigned char* instructionPtrAtStartOfOnce;
-
- int repeatOthercase;
-
- int ctype;
- int fc;
- int fi;
- int length;
- int max;
- int number;
- int offset;
- int saveOffset1;
- int saveOffset2;
- int saveOffset3;
-
- BracketChainNode bracketChainNode;
- } locals;
-};
-
-/* Structure for passing "static" information around between the functions
-doing traditional NFA matching, so that they are thread-safe. */
-
-struct MatchData {
- int* offsetVector; /* Offset vector */
- int offsetEnd; /* One past the end */
- int offsetMax; /* The maximum usable for return data */
- bool offsetOverflow; /* Set if too many extractions */
- const UChar* startSubject; /* Start of the subject string */
- const UChar* endSubject; /* End of the subject string */
- const UChar* endMatchPtr; /* Subject position at end match */
- int endOffsetTop; /* Highwater mark at end of match */
- bool multiline;
- bool ignoreCase;
-};
-
-/* The maximum remaining length of subject we are prepared to search for a
-reqByte match. */
-
-#define REQ_BYTE_MAX 1000
-
-/* The below limit restricts the number of "recursive" match calls in order to
-avoid spending exponential time on complex regular expressions. */
-
-static const unsigned matchLimit = 1000000;
-
-#ifdef DEBUG
-/*************************************************
-* Debugging function to print chars *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
- p points to characters
- length number to print
- isSubject true if printing from within md.startSubject
- md pointer to matching data block, if isSubject is true
-*/
-
-static void pchars(const UChar* p, int length, bool isSubject, const MatchData& md)
-{
- if (isSubject && length > md.endSubject - p)
- length = md.endSubject - p;
- while (length-- > 0) {
- int c;
- if (isASCIIPrintable(c = *(p++)))
- printf("%c", c);
- else if (c < 256)
- printf("\\x%02x", c);
- else
- printf("\\x{%x}", c);
- }
-}
-#endif
-
-/*************************************************
-* Match a back-reference *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
- offset index into the offset vector
- subjectPtr points into the subject
- length length to be matched
- md points to match data block
-
-Returns: true if matched
-*/
-
-static bool matchRef(int offset, const UChar* subjectPtr, int length, const MatchData& md)
-{
- const UChar* p = md.startSubject + md.offsetVector[offset];
-
-#ifdef DEBUG
- if (subjectPtr >= md.endSubject)
- printf("matching subject <null>");
- else {
- printf("matching subject ");
- pchars(subjectPtr, length, true, md);
- }
- printf(" against backref ");
- pchars(p, length, false, md);
- printf("\n");
-#endif
-
- /* Always fail if not enough characters left */
-
- if (length > md.endSubject - subjectPtr)
- return false;
-
- /* Separate the caselesss case for speed */
-
- if (md.ignoreCase) {
- while (length-- > 0) {
- UChar c = *p++;
- int othercase = jsc_pcre_ucp_othercase(c);
- UChar d = *subjectPtr++;
- if (c != d && othercase != d)
- return false;
- }
- }
- else {
- while (length-- > 0)
- if (*p++ != *subjectPtr++)
- return false;
- }
-
- return true;
-}
-
-#ifndef USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
-
-/* Use numbered labels and switch statement at the bottom of the match function. */
-
-#define RMATCH_WHERE(num) num
-#define RRETURN_LABEL RRETURN_SWITCH
-
-#else
-
-/* Use GCC's computed goto extension. */
-
-/* For one test case this is more than 40% faster than the switch statement.
-We could avoid the use of the num argument entirely by using local labels,
-but using it for the GCC case as well as the non-GCC case allows us to share
-a bit more code and notice if we use conflicting numbers.*/
-
-#define RMATCH_WHERE(num) &&RRETURN_##num
-#define RRETURN_LABEL *stack.currentFrame->returnLocation
-
-#endif
-
-#define RECURSIVE_MATCH_COMMON(num) \
- goto RECURSE;\
- RRETURN_##num: \
- stack.popCurrentFrame();
-
-#define RECURSIVE_MATCH(num, ra, rb) \
- do { \
- stack.pushNewFrame((ra), (rb), RMATCH_WHERE(num)); \
- RECURSIVE_MATCH_COMMON(num) \
- } while (0)
-
-#define RECURSIVE_MATCH_NEW_GROUP(num, ra, rb) \
- do { \
- stack.pushNewFrame((ra), (rb), RMATCH_WHERE(num)); \
- startNewGroup(stack.currentFrame); \
- RECURSIVE_MATCH_COMMON(num) \
- } while (0)
-
-#define RRETURN goto RRETURN_LABEL
-
-#define RRETURN_NO_MATCH do { isMatch = false; RRETURN; } while (0)
-
-/*************************************************
-* Match from current position *
-*************************************************/
-
-/* On entry instructionPtr points to the first opcode, and subjectPtr to the first character
-in the subject string, while substringStart holds the value of subjectPtr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings. This function is called recursively in many circumstances. Whenever it
-returns a negative (error) response, the outer match() call must also return the
-same response.
-
-Arguments:
- subjectPtr pointer in subject
- instructionPtr position in code
- offsetTop current top pointer
- md pointer to "static" info for the match
-
-Returns: 1 if matched ) these values are >= 0
- 0 if failed to match )
- a negative error value if aborted by an error condition
- (e.g. stopped by repeated call or recursion limit)
-*/
-
-static const unsigned numFramesOnStack = 16;
-
-struct MatchStack {
- MatchStack()
- : framesEnd(frames + numFramesOnStack)
- , currentFrame(frames)
- , size(1) // match() creates accesses the first frame w/o calling pushNewFrame
- {
- ASSERT((sizeof(frames) / sizeof(frames[0])) == numFramesOnStack);
- }
-
- MatchFrame frames[numFramesOnStack];
- MatchFrame* framesEnd;
- MatchFrame* currentFrame;
- unsigned size;
-
- inline bool canUseStackBufferForNextFrame()
- {
- return size < numFramesOnStack;
- }
-
- inline MatchFrame* allocateNextFrame()
- {
- if (canUseStackBufferForNextFrame())
- return currentFrame + 1;
- return new MatchFrame;
- }
-
- inline void pushNewFrame(const unsigned char* instructionPtr, BracketChainNode* bracketChain, ReturnLocation returnLocation)
- {
- MatchFrame* newframe = allocateNextFrame();
- newframe->previousFrame = currentFrame;
-
- newframe->args.subjectPtr = currentFrame->args.subjectPtr;
- newframe->args.offsetTop = currentFrame->args.offsetTop;
- newframe->args.instructionPtr = instructionPtr;
- newframe->args.bracketChain = bracketChain;
- newframe->returnLocation = returnLocation;
- size++;
-
- currentFrame = newframe;
- }
-
- inline void popCurrentFrame()
- {
- MatchFrame* oldFrame = currentFrame;
- currentFrame = currentFrame->previousFrame;
- if (size > numFramesOnStack)
- delete oldFrame;
- size--;
- }
-
- void popAllFrames()
- {
- while (size)
- popCurrentFrame();
- }
-};
-
-static int matchError(int errorCode, MatchStack& stack)
-{
- stack.popAllFrames();
- return errorCode;
-}
-
-/* Get the next UTF-8 character, not advancing the pointer, incrementing length
- if there are extra bytes. This is called when we know we are in UTF-8 mode. */
-
-static inline void getUTF8CharAndIncrementLength(int& c, const unsigned char* subjectPtr, int& len)
-{
- c = *subjectPtr;
- if ((c & 0xc0) == 0xc0) {
- int gcaa = jsc_pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */
- int gcss = 6 * gcaa;
- c = (c & jsc_pcre_utf8_table3[gcaa]) << gcss;
- for (int gcii = 1; gcii <= gcaa; gcii++) {
- gcss -= 6;
- c |= (subjectPtr[gcii] & 0x3f) << gcss;
- }
- len += gcaa;
- }
-}
-
-static inline void startNewGroup(MatchFrame* currentFrame)
-{
- /* At the start of a bracketed group, add the current subject pointer to the
- stack of such pointers, to be re-instated at the end of the group when we hit
- the closing ket. When match() is called in other circumstances, we don't add to
- this stack. */
-
- currentFrame->locals.bracketChainNode.previousBracket = currentFrame->args.bracketChain;
- currentFrame->locals.bracketChainNode.bracketStart = currentFrame->args.subjectPtr;
- currentFrame->args.bracketChain = &currentFrame->locals.bracketChainNode;
-}
-
-// FIXME: "minimize" means "not greedy", we should invert the callers to ask for "greedy" to be less confusing
-static inline void repeatInformationFromInstructionOffset(int instructionOffset, bool& minimize, int& minimumRepeats, int& maximumRepeats)
-{
- // Instruction offsets are based off of OP_CRSTAR, OP_STAR, OP_TYPESTAR, OP_NOTSTAR
- static const char minimumRepeatsFromInstructionOffset[] = { 0, 0, 1, 1, 0, 0 };
- static const int maximumRepeatsFromInstructionOffset[] = { INT_MAX, INT_MAX, INT_MAX, INT_MAX, 1, 1 };
-
- ASSERT(instructionOffset >= 0);
- ASSERT(instructionOffset <= (OP_CRMINQUERY - OP_CRSTAR));
-
- minimize = (instructionOffset & 1); // this assumes ordering: Instruction, MinimizeInstruction, Instruction2, MinimizeInstruction2
- minimumRepeats = minimumRepeatsFromInstructionOffset[instructionOffset];
- maximumRepeats = maximumRepeatsFromInstructionOffset[instructionOffset];
-}
-
-static int match(const UChar* subjectPtr, const unsigned char* instructionPtr, int offsetTop, MatchData& md)
-{
- bool isMatch = false;
- int min;
- bool minimize = false; /* Initialization not really needed, but some compilers think so. */
- unsigned remainingMatchCount = matchLimit;
- int othercase; /* Declare here to avoid errors during jumps */
-
- MatchStack stack;
-
- /* The opcode jump table. */
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
-#define EMIT_JUMP_TABLE_ENTRY(opcode) &&LABEL_OP_##opcode,
- static void* opcodeJumpTable[256] = { FOR_EACH_OPCODE(EMIT_JUMP_TABLE_ENTRY) };
-#undef EMIT_JUMP_TABLE_ENTRY
-#endif
-
- /* One-time setup of the opcode jump table. */
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
- for (int i = 255; !opcodeJumpTable[i]; i--)
- opcodeJumpTable[i] = &&CAPTURING_BRACKET;
-#endif
-
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
- // Shark shows this as a hot line
- // Using a static const here makes this line disappear, but makes later access hotter (not sure why)
- stack.currentFrame->returnLocation = &&RETURN;
-#else
- stack.currentFrame->returnLocation = 0;
-#endif
- stack.currentFrame->args.subjectPtr = subjectPtr;
- stack.currentFrame->args.instructionPtr = instructionPtr;
- stack.currentFrame->args.offsetTop = offsetTop;
- stack.currentFrame->args.bracketChain = 0;
- startNewGroup(stack.currentFrame);
-
- /* This is where control jumps back to to effect "recursion" */
-
-RECURSE:
- if (!--remainingMatchCount)
- return matchError(JSRegExpErrorHitLimit, stack);
-
- /* Now start processing the operations. */
-
-#ifndef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
- while (true)
-#endif
- {
-
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
-#define BEGIN_OPCODE(opcode) LABEL_OP_##opcode
-#define NEXT_OPCODE goto *opcodeJumpTable[*stack.currentFrame->args.instructionPtr]
-#else
-#define BEGIN_OPCODE(opcode) case OP_##opcode
-#define NEXT_OPCODE continue
-#endif
-
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
- NEXT_OPCODE;
-#else
- switch (*stack.currentFrame->args.instructionPtr)
-#endif
- {
- /* Non-capturing bracket: optimized */
-
- BEGIN_OPCODE(BRA):
- NON_CAPTURING_BRACKET:
- DPRINTF(("start bracket 0\n"));
- do {
- RECURSIVE_MATCH_NEW_GROUP(2, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- stack.currentFrame->args.instructionPtr += getLinkValue(stack.currentFrame->args.instructionPtr + 1);
- } while (*stack.currentFrame->args.instructionPtr == OP_ALT);
- DPRINTF(("bracket 0 failed\n"));
- RRETURN;
-
- /* Skip over large extraction number data if encountered. */
-
- BEGIN_OPCODE(BRANUMBER):
- stack.currentFrame->args.instructionPtr += 3;
- NEXT_OPCODE;
-
- /* End of the pattern. */
-
- BEGIN_OPCODE(END):
- md.endMatchPtr = stack.currentFrame->args.subjectPtr; /* Record where we ended */
- md.endOffsetTop = stack.currentFrame->args.offsetTop; /* and how many extracts were taken */
- isMatch = true;
- RRETURN;
-
- /* Assertion brackets. Check the alternative branches in turn - the
- matching won't pass the KET for an assertion. If any one branch matches,
- the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
- start of each branch to move the current point backwards, so the code at
- this level is identical to the lookahead case. */
-
- BEGIN_OPCODE(ASSERT):
- do {
- RECURSIVE_MATCH_NEW_GROUP(6, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, NULL);
- if (isMatch)
- break;
- stack.currentFrame->args.instructionPtr += getLinkValue(stack.currentFrame->args.instructionPtr + 1);
- } while (*stack.currentFrame->args.instructionPtr == OP_ALT);
- if (*stack.currentFrame->args.instructionPtr == OP_KET)
- RRETURN_NO_MATCH;
-
- /* Continue from after the assertion, updating the offsets high water
- mark, since extracts may have been taken during the assertion. */
-
- advanceToEndOfBracket(stack.currentFrame->args.instructionPtr);
- stack.currentFrame->args.instructionPtr += 1 + LINK_SIZE;
- stack.currentFrame->args.offsetTop = md.endOffsetTop;
- NEXT_OPCODE;
-
- /* Negative assertion: all branches must fail to match */
-
- BEGIN_OPCODE(ASSERT_NOT):
- do {
- RECURSIVE_MATCH_NEW_GROUP(7, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, NULL);
- if (isMatch)
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr += getLinkValue(stack.currentFrame->args.instructionPtr + 1);
- } while (*stack.currentFrame->args.instructionPtr == OP_ALT);
-
- stack.currentFrame->args.instructionPtr += 1 + LINK_SIZE;
- NEXT_OPCODE;
-
- /* An alternation is the end of a branch; scan along to find the end of the
- bracketed group and go to there. */
-
- BEGIN_OPCODE(ALT):
- advanceToEndOfBracket(stack.currentFrame->args.instructionPtr);
- NEXT_OPCODE;
-
- /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
- that it may occur zero times. It may repeat infinitely, or not at all -
- i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
- repeat limits are compiled as a number of copies, with the optional ones
- preceded by BRAZERO or BRAMINZERO. */
-
- BEGIN_OPCODE(BRAZERO): {
- stack.currentFrame->locals.startOfRepeatingBracket = stack.currentFrame->args.instructionPtr + 1;
- RECURSIVE_MATCH_NEW_GROUP(14, stack.currentFrame->locals.startOfRepeatingBracket, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- advanceToEndOfBracket(stack.currentFrame->locals.startOfRepeatingBracket);
- stack.currentFrame->args.instructionPtr = stack.currentFrame->locals.startOfRepeatingBracket + 1 + LINK_SIZE;
- NEXT_OPCODE;
- }
-
- BEGIN_OPCODE(BRAMINZERO): {
- stack.currentFrame->locals.startOfRepeatingBracket = stack.currentFrame->args.instructionPtr + 1;
- advanceToEndOfBracket(stack.currentFrame->locals.startOfRepeatingBracket);
- RECURSIVE_MATCH_NEW_GROUP(15, stack.currentFrame->locals.startOfRepeatingBracket + 1 + LINK_SIZE, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
- }
-
- /* End of a group, repeated or non-repeating. If we are at the end of
- an assertion "group", stop matching and return 1, but record the
- current high water mark for use by positive assertions. Do this also
- for the "once" (not-backup up) groups. */
-
- BEGIN_OPCODE(KET):
- BEGIN_OPCODE(KETRMIN):
- BEGIN_OPCODE(KETRMAX):
- stack.currentFrame->locals.instructionPtrAtStartOfOnce = stack.currentFrame->args.instructionPtr - getLinkValue(stack.currentFrame->args.instructionPtr + 1);
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.bracketChain->bracketStart;
-
- /* Back up the stack of bracket start pointers. */
-
- stack.currentFrame->args.bracketChain = stack.currentFrame->args.bracketChain->previousBracket;
-
- if (*stack.currentFrame->locals.instructionPtrAtStartOfOnce == OP_ASSERT || *stack.currentFrame->locals.instructionPtrAtStartOfOnce == OP_ASSERT_NOT) {
- md.endOffsetTop = stack.currentFrame->args.offsetTop;
- isMatch = true;
- RRETURN;
- }
-
- /* In all other cases except a conditional group we have to check the
- group number back at the start and if necessary complete handling an
- extraction by setting the offsets and bumping the high water mark. */
-
- stack.currentFrame->locals.number = *stack.currentFrame->locals.instructionPtrAtStartOfOnce - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out
- the number from a dummy opcode at the start. */
-
- if (stack.currentFrame->locals.number > EXTRACT_BASIC_MAX)
- stack.currentFrame->locals.number = get2ByteValue(stack.currentFrame->locals.instructionPtrAtStartOfOnce + 2 + LINK_SIZE);
- stack.currentFrame->locals.offset = stack.currentFrame->locals.number << 1;
-
-#ifdef DEBUG
- printf("end bracket %d", stack.currentFrame->locals.number);
- printf("\n");
-#endif
-
- /* Test for a numbered group. This includes groups called as a result
- of recursion. Note that whole-pattern recursion is coded as a recurse
- into group 0, so it won't be picked up here. Instead, we catch it when
- the OP_END is reached. */
-
- if (stack.currentFrame->locals.number > 0) {
- if (stack.currentFrame->locals.offset >= md.offsetMax)
- md.offsetOverflow = true;
- else {
- md.offsetVector[stack.currentFrame->locals.offset] =
- md.offsetVector[md.offsetEnd - stack.currentFrame->locals.number];
- md.offsetVector[stack.currentFrame->locals.offset+1] = stack.currentFrame->args.subjectPtr - md.startSubject;
- if (stack.currentFrame->args.offsetTop <= stack.currentFrame->locals.offset)
- stack.currentFrame->args.offsetTop = stack.currentFrame->locals.offset + 2;
- }
- }
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*stack.currentFrame->args.instructionPtr == OP_KET || stack.currentFrame->args.subjectPtr == stack.currentFrame->locals.subjectPtrAtStartOfInstruction) {
- stack.currentFrame->args.instructionPtr += 1 + LINK_SIZE;
- NEXT_OPCODE;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. */
-
- if (*stack.currentFrame->args.instructionPtr == OP_KETRMIN) {
- RECURSIVE_MATCH(16, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- RECURSIVE_MATCH_NEW_GROUP(17, stack.currentFrame->locals.instructionPtrAtStartOfOnce, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- } else { /* OP_KETRMAX */
- RECURSIVE_MATCH_NEW_GROUP(18, stack.currentFrame->locals.instructionPtrAtStartOfOnce, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- RECURSIVE_MATCH(19, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- }
- RRETURN;
-
- /* Start of subject. */
-
- BEGIN_OPCODE(CIRC):
- if (stack.currentFrame->args.subjectPtr != md.startSubject)
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- /* After internal newline if multiline. */
-
- BEGIN_OPCODE(BOL):
- if (stack.currentFrame->args.subjectPtr != md.startSubject && !isNewline(stack.currentFrame->args.subjectPtr[-1]))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- /* End of subject. */
-
- BEGIN_OPCODE(DOLL):
- if (stack.currentFrame->args.subjectPtr < md.endSubject)
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- /* Before internal newline if multiline. */
-
- BEGIN_OPCODE(EOL):
- if (stack.currentFrame->args.subjectPtr < md.endSubject && !isNewline(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- /* Word boundary assertions */
-
- BEGIN_OPCODE(NOT_WORD_BOUNDARY):
- BEGIN_OPCODE(WORD_BOUNDARY): {
- bool currentCharIsWordChar = false;
- bool previousCharIsWordChar = false;
-
- if (stack.currentFrame->args.subjectPtr > md.startSubject)
- previousCharIsWordChar = isWordChar(stack.currentFrame->args.subjectPtr[-1]);
- if (stack.currentFrame->args.subjectPtr < md.endSubject)
- currentCharIsWordChar = isWordChar(*stack.currentFrame->args.subjectPtr);
-
- /* Now see if the situation is what we want */
- bool wordBoundaryDesired = (*stack.currentFrame->args.instructionPtr++ == OP_WORD_BOUNDARY);
- if (wordBoundaryDesired ? currentCharIsWordChar == previousCharIsWordChar : currentCharIsWordChar != previousCharIsWordChar)
- RRETURN_NO_MATCH;
- NEXT_OPCODE;
- }
-
- /* Match a single character type; inline for speed */
-
- BEGIN_OPCODE(NOT_NEWLINE):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (isNewline(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(NOT_DIGIT):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (isASCIIDigit(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(DIGIT):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (!isASCIIDigit(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(NOT_WHITESPACE):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (isSpaceChar(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(WHITESPACE):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (!isSpaceChar(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(NOT_WORDCHAR):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (isWordChar(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- BEGIN_OPCODE(WORDCHAR):
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (!isWordChar(*stack.currentFrame->args.subjectPtr++))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr++;
- NEXT_OPCODE;
-
- /* Match a back reference, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. The code is similar
- to that for character classes, but repeated for efficiency. Then obey
- similar code to character type repeats - written out again for speed.
- However, if the referenced string is the empty string, always treat
- it as matched, any number of times (otherwise there could be infinite
- loops). */
-
- BEGIN_OPCODE(REF):
- stack.currentFrame->locals.offset = get2ByteValue(stack.currentFrame->args.instructionPtr + 1) << 1; /* Doubled ref number */
- stack.currentFrame->args.instructionPtr += 3; /* Advance past item */
-
- /* If the reference is unset, set the length to be longer than the amount
- of subject left; this ensures that every attempt at a match fails. We
- can't just fail here, because of the possibility of quantifiers with zero
- minima. */
-
- if (stack.currentFrame->locals.offset >= stack.currentFrame->args.offsetTop || md.offsetVector[stack.currentFrame->locals.offset] < 0)
- stack.currentFrame->locals.length = 0;
- else
- stack.currentFrame->locals.length = md.offsetVector[stack.currentFrame->locals.offset+1] - md.offsetVector[stack.currentFrame->locals.offset];
-
- /* Set up for repetition, or handle the non-repeated case */
-
- switch (*stack.currentFrame->args.instructionPtr) {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_CRSTAR, minimize, min, stack.currentFrame->locals.max);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*stack.currentFrame->args.instructionPtr == OP_CRMINRANGE);
- min = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 3);
- if (stack.currentFrame->locals.max == 0)
- stack.currentFrame->locals.max = INT_MAX;
- stack.currentFrame->args.instructionPtr += 5;
- break;
-
- default: /* No repeat follows */
- if (!matchRef(stack.currentFrame->locals.offset, stack.currentFrame->args.subjectPtr, stack.currentFrame->locals.length, md))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.subjectPtr += stack.currentFrame->locals.length;
- NEXT_OPCODE;
- }
-
- /* If the length of the reference is zero, just continue with the
- main loop. */
-
- if (stack.currentFrame->locals.length == 0)
- NEXT_OPCODE;
-
- /* First, ensure the minimum number of matches are present. */
-
- for (int i = 1; i <= min; i++) {
- if (!matchRef(stack.currentFrame->locals.offset, stack.currentFrame->args.subjectPtr, stack.currentFrame->locals.length, md))
- RRETURN_NO_MATCH;
- stack.currentFrame->args.subjectPtr += stack.currentFrame->locals.length;
- }
-
- /* If min = max, continue at the same level without recursion.
- They are not both allowed to be zero. */
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- /* If minimizing, keep trying and advancing the pointer */
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(20, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || !matchRef(stack.currentFrame->locals.offset, stack.currentFrame->args.subjectPtr, stack.currentFrame->locals.length, md))
- RRETURN;
- stack.currentFrame->args.subjectPtr += stack.currentFrame->locals.length;
- }
- /* Control never reaches here */
- }
-
- /* If maximizing, find the longest string and work backwards */
-
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (!matchRef(stack.currentFrame->locals.offset, stack.currentFrame->args.subjectPtr, stack.currentFrame->locals.length, md))
- break;
- stack.currentFrame->args.subjectPtr += stack.currentFrame->locals.length;
- }
- while (stack.currentFrame->args.subjectPtr >= stack.currentFrame->locals.subjectPtrAtStartOfInstruction) {
- RECURSIVE_MATCH(21, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- stack.currentFrame->args.subjectPtr -= stack.currentFrame->locals.length;
- }
- RRETURN_NO_MATCH;
- }
- /* Control never reaches here */
-
- /* Match a bit-mapped character class, possibly repeatedly. This op code is
- used when all the characters in the class have values in the range 0-255,
- and either the matching is caseful, or the characters are in the range
- 0-127 when UTF-8 processing is enabled. The only difference between
- OP_CLASS and OP_NCLASS occurs when a data character outside the range is
- encountered.
-
- First, look past the end of the item to see if there is repeat information
- following. Then obey similar code to character type repeats - written out
- again for speed. */
-
- BEGIN_OPCODE(NCLASS):
- BEGIN_OPCODE(CLASS):
- stack.currentFrame->locals.data = stack.currentFrame->args.instructionPtr + 1; /* Save for matching */
- stack.currentFrame->args.instructionPtr += 33; /* Advance past the item */
-
- switch (*stack.currentFrame->args.instructionPtr) {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_CRSTAR, minimize, min, stack.currentFrame->locals.max);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*stack.currentFrame->args.instructionPtr == OP_CRMINRANGE);
- min = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 3);
- if (stack.currentFrame->locals.max == 0)
- stack.currentFrame->locals.max = INT_MAX;
- stack.currentFrame->args.instructionPtr += 5;
- break;
-
- default: /* No repeat follows */
- min = stack.currentFrame->locals.max = 1;
- break;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
- for (int i = 1; i <= min; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- int c = *stack.currentFrame->args.subjectPtr++;
- if (c > 255) {
- if (stack.currentFrame->locals.data[-1] == OP_CLASS)
- RRETURN_NO_MATCH;
- } else {
- if (!(stack.currentFrame->locals.data[c / 8] & (1 << (c & 7))))
- RRETURN_NO_MATCH;
- }
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(22, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN;
- int c = *stack.currentFrame->args.subjectPtr++;
- if (c > 255) {
- if (stack.currentFrame->locals.data[-1] == OP_CLASS)
- RRETURN;
- } else {
- if ((stack.currentFrame->locals.data[c/8] & (1 << (c&7))) == 0)
- RRETURN;
- }
- }
- /* Control never reaches here */
- }
- /* If maximizing, find the longest possible run, then work backwards. */
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
-
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (c > 255) {
- if (stack.currentFrame->locals.data[-1] == OP_CLASS)
- break;
- } else {
- if (!(stack.currentFrame->locals.data[c / 8] & (1 << (c & 7))))
- break;
- }
- ++stack.currentFrame->args.subjectPtr;
- }
- for (;;) {
- RECURSIVE_MATCH(24, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->args.subjectPtr-- == stack.currentFrame->locals.subjectPtrAtStartOfInstruction)
- break; /* Stop if tried at original pos */
- }
-
- RRETURN;
- }
- /* Control never reaches here */
-
- /* Match an extended character class. */
-
- BEGIN_OPCODE(XCLASS):
- stack.currentFrame->locals.data = stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE; /* Save for matching */
- stack.currentFrame->args.instructionPtr += getLinkValue(stack.currentFrame->args.instructionPtr + 1); /* Advance past the item */
-
- switch (*stack.currentFrame->args.instructionPtr) {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_CRSTAR, minimize, min, stack.currentFrame->locals.max);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*stack.currentFrame->args.instructionPtr == OP_CRMINRANGE);
- min = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 3);
- if (stack.currentFrame->locals.max == 0)
- stack.currentFrame->locals.max = INT_MAX;
- stack.currentFrame->args.instructionPtr += 5;
- break;
-
- default: /* No repeat follows */
- min = stack.currentFrame->locals.max = 1;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
- for (int i = 1; i <= min; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- int c = *stack.currentFrame->args.subjectPtr++;
- if (!jsc_pcre_xclass(c, stack.currentFrame->locals.data))
- RRETURN_NO_MATCH;
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(26, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN;
- int c = *stack.currentFrame->args.subjectPtr++;
- if (!jsc_pcre_xclass(c, stack.currentFrame->locals.data))
- RRETURN;
- }
- /* Control never reaches here */
- }
-
- /* If maximizing, find the longest possible run, then work backwards. */
-
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (!jsc_pcre_xclass(c, stack.currentFrame->locals.data))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- for(;;) {
- RECURSIVE_MATCH(27, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->args.subjectPtr-- == stack.currentFrame->locals.subjectPtrAtStartOfInstruction)
- break; /* Stop if tried at original pos */
- }
- RRETURN;
- }
-
- /* Control never reaches here */
-
- /* Match a single character, casefully */
-
- BEGIN_OPCODE(CHAR):
- stack.currentFrame->locals.length = 1;
- stack.currentFrame->args.instructionPtr++;
- getUTF8CharAndIncrementLength(stack.currentFrame->locals.fc, stack.currentFrame->args.instructionPtr, stack.currentFrame->locals.length);
- stack.currentFrame->args.instructionPtr += stack.currentFrame->locals.length;
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- if (stack.currentFrame->locals.fc != *stack.currentFrame->args.subjectPtr++)
- RRETURN_NO_MATCH;
- NEXT_OPCODE;
-
- /* Match a single character, caselessly */
-
- BEGIN_OPCODE(CHAR_IGNORING_CASE): {
- stack.currentFrame->locals.length = 1;
- stack.currentFrame->args.instructionPtr++;
- getUTF8CharAndIncrementLength(stack.currentFrame->locals.fc, stack.currentFrame->args.instructionPtr, stack.currentFrame->locals.length);
- stack.currentFrame->args.instructionPtr += stack.currentFrame->locals.length;
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- int dc = *stack.currentFrame->args.subjectPtr++;
- if (stack.currentFrame->locals.fc != dc && jsc_pcre_ucp_othercase(stack.currentFrame->locals.fc) != dc)
- RRETURN_NO_MATCH;
- NEXT_OPCODE;
- }
-
- /* Match a single ASCII character. */
-
- BEGIN_OPCODE(ASCII_CHAR):
- if (md.endSubject == stack.currentFrame->args.subjectPtr)
- RRETURN_NO_MATCH;
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->args.instructionPtr[1])
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- stack.currentFrame->args.instructionPtr += 2;
- NEXT_OPCODE;
-
- /* Match one of two cases of an ASCII letter. */
-
- BEGIN_OPCODE(ASCII_LETTER_IGNORING_CASE):
- if (md.endSubject == stack.currentFrame->args.subjectPtr)
- RRETURN_NO_MATCH;
- if ((*stack.currentFrame->args.subjectPtr | 0x20) != stack.currentFrame->args.instructionPtr[1])
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- stack.currentFrame->args.instructionPtr += 2;
- NEXT_OPCODE;
-
- /* Match a single character repeatedly; different opcodes share code. */
-
- BEGIN_OPCODE(EXACT):
- min = stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = false;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATCHAR;
-
- BEGIN_OPCODE(UPTO):
- BEGIN_OPCODE(MINUPTO):
- min = 0;
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = *stack.currentFrame->args.instructionPtr == OP_MINUPTO;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATCHAR;
-
- BEGIN_OPCODE(STAR):
- BEGIN_OPCODE(MINSTAR):
- BEGIN_OPCODE(PLUS):
- BEGIN_OPCODE(MINPLUS):
- BEGIN_OPCODE(QUERY):
- BEGIN_OPCODE(MINQUERY):
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_STAR, minimize, min, stack.currentFrame->locals.max);
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATCHAR:
-
- stack.currentFrame->locals.length = 1;
- getUTF8CharAndIncrementLength(stack.currentFrame->locals.fc, stack.currentFrame->args.instructionPtr, stack.currentFrame->locals.length);
- if (min * (stack.currentFrame->locals.fc > 0xFFFF ? 2 : 1) > md.endSubject - stack.currentFrame->args.subjectPtr)
- RRETURN_NO_MATCH;
- stack.currentFrame->args.instructionPtr += stack.currentFrame->locals.length;
-
- if (stack.currentFrame->locals.fc <= 0xFFFF) {
- othercase = md.ignoreCase ? jsc_pcre_ucp_othercase(stack.currentFrame->locals.fc) : -1;
-
- for (int i = 1; i <= min; i++) {
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc && *stack.currentFrame->args.subjectPtr != othercase)
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- if (minimize) {
- stack.currentFrame->locals.repeatOthercase = othercase;
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(28, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN;
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc && *stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.repeatOthercase)
- RRETURN;
- ++stack.currentFrame->args.subjectPtr;
- }
- /* Control never reaches here */
- } else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc && *stack.currentFrame->args.subjectPtr != othercase)
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- while (stack.currentFrame->args.subjectPtr >= stack.currentFrame->locals.subjectPtrAtStartOfInstruction) {
- RECURSIVE_MATCH(29, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- --stack.currentFrame->args.subjectPtr;
- }
- RRETURN_NO_MATCH;
- }
- /* Control never reaches here */
- } else {
- /* No case on surrogate pairs, so no need to bother with "othercase". */
-
- for (int i = 1; i <= min; i++) {
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc)
- RRETURN_NO_MATCH;
- stack.currentFrame->args.subjectPtr += 2;
- }
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(30, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN;
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc)
- RRETURN;
- stack.currentFrame->args.subjectPtr += 2;
- }
- /* Control never reaches here */
- } else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr > md.endSubject - 2)
- break;
- if (*stack.currentFrame->args.subjectPtr != stack.currentFrame->locals.fc)
- break;
- stack.currentFrame->args.subjectPtr += 2;
- }
- while (stack.currentFrame->args.subjectPtr >= stack.currentFrame->locals.subjectPtrAtStartOfInstruction) {
- RECURSIVE_MATCH(31, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- stack.currentFrame->args.subjectPtr -= 2;
- }
- RRETURN_NO_MATCH;
- }
- /* Control never reaches here */
- }
- /* Control never reaches here */
-
- /* Match a negated single one-byte character. */
-
- BEGIN_OPCODE(NOT): {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN_NO_MATCH;
- int b = stack.currentFrame->args.instructionPtr[1];
- int c = *stack.currentFrame->args.subjectPtr++;
- stack.currentFrame->args.instructionPtr += 2;
- if (md.ignoreCase) {
- if (c < 128)
- c = toLowerCase(c);
- if (toLowerCase(b) == c)
- RRETURN_NO_MATCH;
- } else {
- if (b == c)
- RRETURN_NO_MATCH;
- }
- NEXT_OPCODE;
- }
-
- /* Match a negated single one-byte character repeatedly. This is almost a
- repeat of the code for a repeated single character, but I haven't found a
- nice way of commoning these up that doesn't require a test of the
- positive/negative option for each character match. Maybe that wouldn't add
- very much to the time taken, but character matching *is* what this is all
- about... */
-
- BEGIN_OPCODE(NOTEXACT):
- min = stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = false;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATNOTCHAR;
-
- BEGIN_OPCODE(NOTUPTO):
- BEGIN_OPCODE(NOTMINUPTO):
- min = 0;
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = *stack.currentFrame->args.instructionPtr == OP_NOTMINUPTO;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATNOTCHAR;
-
- BEGIN_OPCODE(NOTSTAR):
- BEGIN_OPCODE(NOTMINSTAR):
- BEGIN_OPCODE(NOTPLUS):
- BEGIN_OPCODE(NOTMINPLUS):
- BEGIN_OPCODE(NOTQUERY):
- BEGIN_OPCODE(NOTMINQUERY):
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_NOTSTAR, minimize, min, stack.currentFrame->locals.max);
-
- /* Common code for all repeated single-byte matches. We can give up quickly
- if there are fewer than the minimum number of bytes left in the
- subject. */
-
- REPEATNOTCHAR:
- if (min > md.endSubject - stack.currentFrame->args.subjectPtr)
- RRETURN_NO_MATCH;
- stack.currentFrame->locals.fc = *stack.currentFrame->args.instructionPtr++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("negative matching %c{%d,%d}\n", stack.currentFrame->locals.fc, min, stack.currentFrame->locals.max));
-
- if (md.ignoreCase) {
- if (stack.currentFrame->locals.fc < 128)
- stack.currentFrame->locals.fc = toLowerCase(stack.currentFrame->locals.fc);
-
- for (int i = 1; i <= min; i++) {
- int d = *stack.currentFrame->args.subjectPtr++;
- if (d < 128)
- d = toLowerCase(d);
- if (stack.currentFrame->locals.fc == d)
- RRETURN_NO_MATCH;
- }
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(38, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- int d = *stack.currentFrame->args.subjectPtr++;
- if (d < 128)
- d = toLowerCase(d);
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject || stack.currentFrame->locals.fc == d)
- RRETURN;
- }
- /* Control never reaches here */
- }
-
- /* Maximize case */
-
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
-
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int d = *stack.currentFrame->args.subjectPtr;
- if (d < 128)
- d = toLowerCase(d);
- if (stack.currentFrame->locals.fc == d)
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- for (;;) {
- RECURSIVE_MATCH(40, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->args.subjectPtr-- == stack.currentFrame->locals.subjectPtrAtStartOfInstruction)
- break; /* Stop if tried at original pos */
- }
-
- RRETURN;
- }
- /* Control never reaches here */
- }
-
- /* Caseful comparisons */
-
- else {
- for (int i = 1; i <= min; i++) {
- int d = *stack.currentFrame->args.subjectPtr++;
- if (stack.currentFrame->locals.fc == d)
- RRETURN_NO_MATCH;
- }
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(42, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- int d = *stack.currentFrame->args.subjectPtr++;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject || stack.currentFrame->locals.fc == d)
- RRETURN;
- }
- /* Control never reaches here */
- }
-
- /* Maximize case */
-
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr;
-
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int d = *stack.currentFrame->args.subjectPtr;
- if (stack.currentFrame->locals.fc == d)
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- for (;;) {
- RECURSIVE_MATCH(44, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->args.subjectPtr-- == stack.currentFrame->locals.subjectPtrAtStartOfInstruction)
- break; /* Stop if tried at original pos */
- }
-
- RRETURN;
- }
- }
- /* Control never reaches here */
-
- /* Match a single character type repeatedly; several different opcodes
- share code. This is very similar to the code for single characters, but we
- repeat it in the interests of efficiency. */
-
- BEGIN_OPCODE(TYPEEXACT):
- min = stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = true;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATTYPE;
-
- BEGIN_OPCODE(TYPEUPTO):
- BEGIN_OPCODE(TYPEMINUPTO):
- min = 0;
- stack.currentFrame->locals.max = get2ByteValue(stack.currentFrame->args.instructionPtr + 1);
- minimize = *stack.currentFrame->args.instructionPtr == OP_TYPEMINUPTO;
- stack.currentFrame->args.instructionPtr += 3;
- goto REPEATTYPE;
-
- BEGIN_OPCODE(TYPESTAR):
- BEGIN_OPCODE(TYPEMINSTAR):
- BEGIN_OPCODE(TYPEPLUS):
- BEGIN_OPCODE(TYPEMINPLUS):
- BEGIN_OPCODE(TYPEQUERY):
- BEGIN_OPCODE(TYPEMINQUERY):
- repeatInformationFromInstructionOffset(*stack.currentFrame->args.instructionPtr++ - OP_TYPESTAR, minimize, min, stack.currentFrame->locals.max);
-
- /* Common code for all repeated single character type matches. Note that
- in UTF-8 mode, '.' matches a character of any length, but for the other
- character types, the valid characters are all one-byte long. */
-
- REPEATTYPE:
- stack.currentFrame->locals.ctype = *stack.currentFrame->args.instructionPtr++; /* Code for the character type */
-
- /* First, ensure the minimum number of matches are present. Use inline
- code for maximizing the speed, and do the type test once at the start
- (i.e. keep it out of the loop). Also we can test that there are at least
- the minimum number of characters before we start. */
-
- if (min > md.endSubject - stack.currentFrame->args.subjectPtr)
- RRETURN_NO_MATCH;
- if (min > 0) {
- switch (stack.currentFrame->locals.ctype) {
- case OP_NOT_NEWLINE:
- for (int i = 1; i <= min; i++) {
- if (isNewline(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_NOT_DIGIT:
- for (int i = 1; i <= min; i++) {
- if (isASCIIDigit(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_DIGIT:
- for (int i = 1; i <= min; i++) {
- if (!isASCIIDigit(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (int i = 1; i <= min; i++) {
- if (isSpaceChar(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_WHITESPACE:
- for (int i = 1; i <= min; i++) {
- if (!isSpaceChar(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (int i = 1; i <= min; i++) {
- if (isWordChar(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_WORDCHAR:
- for (int i = 1; i <= min; i++) {
- if (!isWordChar(*stack.currentFrame->args.subjectPtr))
- RRETURN_NO_MATCH;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- default:
- ASSERT_NOT_REACHED();
- return matchError(JSRegExpErrorInternal, stack);
- } /* End switch(stack.currentFrame->locals.ctype) */
- }
-
- /* If min = max, continue at the same level without recursing */
-
- if (min == stack.currentFrame->locals.max)
- NEXT_OPCODE;
-
- /* If minimizing, we have to test the rest of the pattern before each
- subsequent match. */
-
- if (minimize) {
- for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
- RECURSIVE_MATCH(48, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->locals.fi >= stack.currentFrame->locals.max || stack.currentFrame->args.subjectPtr >= md.endSubject)
- RRETURN;
-
- int c = *stack.currentFrame->args.subjectPtr++;
- switch (stack.currentFrame->locals.ctype) {
- case OP_NOT_NEWLINE:
- if (isNewline(c))
- RRETURN;
- break;
-
- case OP_NOT_DIGIT:
- if (isASCIIDigit(c))
- RRETURN;
- break;
-
- case OP_DIGIT:
- if (!isASCIIDigit(c))
- RRETURN;
- break;
-
- case OP_NOT_WHITESPACE:
- if (isSpaceChar(c))
- RRETURN;
- break;
-
- case OP_WHITESPACE:
- if (!isSpaceChar(c))
- RRETURN;
- break;
-
- case OP_NOT_WORDCHAR:
- if (isWordChar(c))
- RRETURN;
- break;
-
- case OP_WORDCHAR:
- if (!isWordChar(c))
- RRETURN;
- break;
-
- default:
- ASSERT_NOT_REACHED();
- return matchError(JSRegExpErrorInternal, stack);
- }
- }
- /* Control never reaches here */
- }
-
- /* If maximizing it is worth using inline code for speed, doing the type
- test once at the start (i.e. keep it out of the loop). */
-
- else {
- stack.currentFrame->locals.subjectPtrAtStartOfInstruction = stack.currentFrame->args.subjectPtr; /* Remember where we started */
-
- switch (stack.currentFrame->locals.ctype) {
- case OP_NOT_NEWLINE:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject || isNewline(*stack.currentFrame->args.subjectPtr))
- break;
- stack.currentFrame->args.subjectPtr++;
- }
- break;
-
- case OP_NOT_DIGIT:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (isASCIIDigit(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_DIGIT:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (!isASCIIDigit(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (isSpaceChar(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_WHITESPACE:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (!isSpaceChar(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (isWordChar(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- case OP_WORDCHAR:
- for (int i = min; i < stack.currentFrame->locals.max; i++) {
- if (stack.currentFrame->args.subjectPtr >= md.endSubject)
- break;
- int c = *stack.currentFrame->args.subjectPtr;
- if (!isWordChar(c))
- break;
- ++stack.currentFrame->args.subjectPtr;
- }
- break;
-
- default:
- ASSERT_NOT_REACHED();
- return matchError(JSRegExpErrorInternal, stack);
- }
-
- /* stack.currentFrame->args.subjectPtr is now past the end of the maximum run */
-
- for (;;) {
- RECURSIVE_MATCH(52, stack.currentFrame->args.instructionPtr, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- if (stack.currentFrame->args.subjectPtr-- == stack.currentFrame->locals.subjectPtrAtStartOfInstruction)
- break; /* Stop if tried at original pos */
- }
-
- /* Get here if we can't make it match with any permitted repetitions */
-
- RRETURN;
- }
- /* Control never reaches here */
-
- BEGIN_OPCODE(CRMINPLUS):
- BEGIN_OPCODE(CRMINQUERY):
- BEGIN_OPCODE(CRMINRANGE):
- BEGIN_OPCODE(CRMINSTAR):
- BEGIN_OPCODE(CRPLUS):
- BEGIN_OPCODE(CRQUERY):
- BEGIN_OPCODE(CRRANGE):
- BEGIN_OPCODE(CRSTAR):
- ASSERT_NOT_REACHED();
- return matchError(JSRegExpErrorInternal, stack);
-
-#ifdef USE_COMPUTED_GOTO_FOR_MATCH_OPCODE_LOOP
- CAPTURING_BRACKET:
-#else
- default:
-#endif
- /* Opening capturing bracket. If there is space in the offset vector, save
- the current subject position in the working slot at the top of the vector. We
- mustn't change the current values of the data slot, because they may be set
- from a previous iteration of this group, and be referred to by a reference
- inside the group.
-
- If the bracket fails to match, we need to restore this value and also the
- values of the final offsets, in case they were set by a previous iteration of
- the same bracket.
-
- If there isn't enough space in the offset vector, treat this as if it were a
- non-capturing bracket. Don't worry about setting the flag for the error case
- here; that is handled in the code for KET. */
-
- ASSERT(*stack.currentFrame->args.instructionPtr > OP_BRA);
-
- stack.currentFrame->locals.number = *stack.currentFrame->args.instructionPtr - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out the
- number from a dummy opcode at the start. */
-
- if (stack.currentFrame->locals.number > EXTRACT_BASIC_MAX)
- stack.currentFrame->locals.number = get2ByteValue(stack.currentFrame->args.instructionPtr + 2 + LINK_SIZE);
- stack.currentFrame->locals.offset = stack.currentFrame->locals.number << 1;
-
-#ifdef DEBUG
- printf("start bracket %d subject=", stack.currentFrame->locals.number);
- pchars(stack.currentFrame->args.subjectPtr, 16, true, md);
- printf("\n");
-#endif
-
- if (stack.currentFrame->locals.offset < md.offsetMax) {
- stack.currentFrame->locals.saveOffset1 = md.offsetVector[stack.currentFrame->locals.offset];
- stack.currentFrame->locals.saveOffset2 = md.offsetVector[stack.currentFrame->locals.offset + 1];
- stack.currentFrame->locals.saveOffset3 = md.offsetVector[md.offsetEnd - stack.currentFrame->locals.number];
-
- DPRINTF(("saving %d %d %d\n", stack.currentFrame->locals.saveOffset1, stack.currentFrame->locals.saveOffset2, stack.currentFrame->locals.saveOffset3));
- md.offsetVector[md.offsetEnd - stack.currentFrame->locals.number] = stack.currentFrame->args.subjectPtr - md.startSubject;
-
- do {
- RECURSIVE_MATCH_NEW_GROUP(1, stack.currentFrame->args.instructionPtr + 1 + LINK_SIZE, stack.currentFrame->args.bracketChain);
- if (isMatch)
- RRETURN;
- stack.currentFrame->args.instructionPtr += getLinkValue(stack.currentFrame->args.instructionPtr + 1);
- } while (*stack.currentFrame->args.instructionPtr == OP_ALT);
-
- DPRINTF(("bracket %d failed\n", stack.currentFrame->locals.number));
-
- md.offsetVector[stack.currentFrame->locals.offset] = stack.currentFrame->locals.saveOffset1;
- md.offsetVector[stack.currentFrame->locals.offset + 1] = stack.currentFrame->locals.saveOffset2;
- md.offsetVector[md.offsetEnd - stack.currentFrame->locals.number] = stack.currentFrame->locals.saveOffset3;
-
- RRETURN;
- }
-
- /* Insufficient room for saving captured contents */
-
- goto NON_CAPTURING_BRACKET;
- }
-
- /* Do not stick any code in here without much thought; it is assumed
- that "continue" in the code above comes out to here to repeat the main
- loop. */
-
- } /* End of main loop */
-
- ASSERT_NOT_REACHED();
-
-#ifndef USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
-
-RRETURN_SWITCH:
- switch (stack.currentFrame->returnLocation) {
- case 0: goto RETURN;
- case 1: goto RRETURN_1;
- case 2: goto RRETURN_2;
- case 6: goto RRETURN_6;
- case 7: goto RRETURN_7;
- case 14: goto RRETURN_14;
- case 15: goto RRETURN_15;
- case 16: goto RRETURN_16;
- case 17: goto RRETURN_17;
- case 18: goto RRETURN_18;
- case 19: goto RRETURN_19;
- case 20: goto RRETURN_20;
- case 21: goto RRETURN_21;
- case 22: goto RRETURN_22;
- case 24: goto RRETURN_24;
- case 26: goto RRETURN_26;
- case 27: goto RRETURN_27;
- case 28: goto RRETURN_28;
- case 29: goto RRETURN_29;
- case 30: goto RRETURN_30;
- case 31: goto RRETURN_31;
- case 38: goto RRETURN_38;
- case 40: goto RRETURN_40;
- case 42: goto RRETURN_42;
- case 44: goto RRETURN_44;
- case 48: goto RRETURN_48;
- case 52: goto RRETURN_52;
- }
-
- ASSERT_NOT_REACHED();
- return matchError(JSRegExpErrorInternal, stack);
-
-#endif
-
-RETURN:
- return isMatch;
-}
-
-
-/*************************************************
-* Execute a Regular Expression *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
- re points to the compiled expression
- extra_data points to extra data or is NULL
- subject points to the subject string
- length length of subject string (may contain binary zeros)
- start_offset where to start in the subject string
- options option bits
- offsets points to a vector of ints to be filled in with offsets
- offsetCount the number of elements in the vector
-
-Returns: > 0 => success; value is the number of elements filled in
- = 0 => success, but offsets is not big enough
- -1 => failed to match
- < -1 => some kind of unexpected problem
-*/
-
-static void tryFirstByteOptimization(const UChar*& subjectPtr, const UChar* endSubject, int firstByte, bool firstByteIsCaseless, bool useMultiLineFirstCharOptimization, const UChar* originalSubjectStart)
-{
- // If firstByte is set, try scanning to the first instance of that byte
- // no need to try and match against any earlier part of the subject string.
- if (firstByte >= 0) {
- UChar firstChar = firstByte;
- if (firstByteIsCaseless)
- while (subjectPtr < endSubject) {
- int c = *subjectPtr;
- if (c > 127)
- break;
- if (toLowerCase(c) == firstChar)
- break;
- subjectPtr++;
- }
- else {
- while (subjectPtr < endSubject && *subjectPtr != firstChar)
- subjectPtr++;
- }
- } else if (useMultiLineFirstCharOptimization) {
- /* Or to just after \n for a multiline match if possible */
- // I'm not sure why this != originalSubjectStart check is necessary -- ecs 11/18/07
- if (subjectPtr > originalSubjectStart) {
- while (subjectPtr < endSubject && !isNewline(subjectPtr[-1]))
- subjectPtr++;
- }
- }
-}
-
-static bool tryRequiredByteOptimization(const UChar*& subjectPtr, const UChar* endSubject, int reqByte, int reqByte2, bool reqByteIsCaseless, bool hasFirstByte, const UChar*& reqBytePtr)
-{
- /* If reqByte is set, we know that that character must appear in the subject
- for the match to succeed. If the first character is set, reqByte must be
- later in the subject; otherwise the test starts at the match point. This
- optimization can save a huge amount of backtracking in patterns with nested
- unlimited repeats that aren't going to match. Writing separate code for
- cased/caseless versions makes it go faster, as does using an autoincrement
- and backing off on a match.
-
- HOWEVER: when the subject string is very, very long, searching to its end can
- take a long time, and give bad performance on quite ordinary patterns. This
- showed up when somebody was matching /^C/ on a 32-megabyte string... so we
- don't do this when the string is sufficiently long.
- */
-
- if (reqByte >= 0 && endSubject - subjectPtr < REQ_BYTE_MAX) {
- const UChar* p = subjectPtr + (hasFirstByte ? 1 : 0);
-
- /* We don't need to repeat the search if we haven't yet reached the
- place we found it at last time. */
-
- if (p > reqBytePtr) {
- if (reqByteIsCaseless) {
- while (p < endSubject) {
- int pp = *p++;
- if (pp == reqByte || pp == reqByte2) {
- p--;
- break;
- }
- }
- } else {
- while (p < endSubject) {
- if (*p++ == reqByte) {
- p--;
- break;
- }
- }
- }
-
- /* If we can't find the required character, break the matching loop */
-
- if (p >= endSubject)
- return true;
-
- /* If we have found the required character, save the point where we
- found it, so that we don't search again next time round the loop if
- the start hasn't passed this character yet. */
-
- reqBytePtr = p;
- }
- }
- return false;
-}
-
-int jsRegExpExecute(const JSRegExp* re,
- const UChar* subject, int length, int start_offset, int* offsets,
- int offsetCount)
-{
- ASSERT(re);
- ASSERT(subject || !length);
- ASSERT(offsetCount >= 0);
- ASSERT(offsets || offsetCount == 0);
-
- HistogramTimeLogger logger(re);
-
- MatchData matchBlock;
- matchBlock.startSubject = subject;
- matchBlock.endSubject = matchBlock.startSubject + length;
- const UChar* endSubject = matchBlock.endSubject;
-
- matchBlock.multiline = (re->options & MatchAcrossMultipleLinesOption);
- matchBlock.ignoreCase = (re->options & IgnoreCaseOption);
-
- /* If the expression has got more back references than the offsets supplied can
- hold, we get a temporary chunk of working store to use during the matching.
- Otherwise, we can use the vector supplied, rounding down its size to a multiple
- of 3. */
-
- int ocount = offsetCount - (offsetCount % 3);
-
- // FIXME: This is lame that we have to second-guess our caller here.
- // The API should change to either fail-hard when we don't have enough offset space
- // or that we shouldn't ask our callers to pre-allocate in the first place.
- bool usingTemporaryOffsets = false;
- if (re->topBackref > 0 && re->topBackref >= ocount/3) {
- ocount = re->topBackref * 3 + 3;
- matchBlock.offsetVector = new int[ocount];
- if (!matchBlock.offsetVector)
- return JSRegExpErrorNoMemory;
- usingTemporaryOffsets = true;
- } else
- matchBlock.offsetVector = offsets;
-
- matchBlock.offsetEnd = ocount;
- matchBlock.offsetMax = (2*ocount)/3;
- matchBlock.offsetOverflow = false;
-
- /* Compute the minimum number of offsets that we need to reset each time. Doing
- this makes a huge difference to execution time when there aren't many brackets
- in the pattern. */
-
- int resetCount = 2 + re->topBracket * 2;
- if (resetCount > offsetCount)
- resetCount = ocount;
-
- /* Reset the working variable associated with each extraction. These should
- never be used unless previously set, but they get saved and restored, and so we
- initialize them to avoid reading uninitialized locations. */
-
- if (matchBlock.offsetVector) {
- int* iptr = matchBlock.offsetVector + ocount;
- int* iend = iptr - resetCount/2 + 1;
- while (--iptr >= iend)
- *iptr = -1;
- }
-
- /* Set up the first character to match, if available. The firstByte value is
- never set for an anchored regular expression, but the anchoring may be forced
- at run time, so we have to test for anchoring. The first char may be unset for
- an unanchored pattern, of course. If there's no first char and the pattern was
- studied, there may be a bitmap of possible first characters. */
-
- bool firstByteIsCaseless = false;
- int firstByte = -1;
- if (re->options & UseFirstByteOptimizationOption) {
- firstByte = re->firstByte & 255;
- if ((firstByteIsCaseless = (re->firstByte & REQ_IGNORE_CASE)))
- firstByte = toLowerCase(firstByte);
- }
-
- /* For anchored or unanchored matches, there may be a "last known required
- character" set. */
-
- bool reqByteIsCaseless = false;
- int reqByte = -1;
- int reqByte2 = -1;
- if (re->options & UseRequiredByteOptimizationOption) {
- reqByte = re->reqByte & 255; // FIXME: This optimization could be made to work for UTF16 chars as well...
- reqByteIsCaseless = (re->reqByte & REQ_IGNORE_CASE);
- reqByte2 = flipCase(reqByte);
- }
-
- /* Loop for handling unanchored repeated matching attempts; for anchored regexs
- the loop runs just once. */
-
- const UChar* startMatch = subject + start_offset;
- const UChar* reqBytePtr = startMatch - 1;
- bool useMultiLineFirstCharOptimization = re->options & UseMultiLineFirstByteOptimizationOption;
-
- do {
- /* Reset the maximum number of extractions we might see. */
- if (matchBlock.offsetVector) {
- int* iptr = matchBlock.offsetVector;
- int* iend = iptr + resetCount;
- while (iptr < iend)
- *iptr++ = -1;
- }
-
- tryFirstByteOptimization(startMatch, endSubject, firstByte, firstByteIsCaseless, useMultiLineFirstCharOptimization, matchBlock.startSubject + start_offset);
- if (tryRequiredByteOptimization(startMatch, endSubject, reqByte, reqByte2, reqByteIsCaseless, firstByte >= 0, reqBytePtr))
- break;
-
- /* When a match occurs, substrings will be set for all internal extractions;
- we just need to set up the whole thing as substring 0 before returning. If
- there were too many extractions, set the return code to zero. In the case
- where we had to get some local store to hold offsets for backreferences, copy
- those back references that we can. In this case there need not be overflow
- if certain parts of the pattern were not used. */
-
- /* The code starts after the JSRegExp block and the capture name table. */
- const unsigned char* start_code = (const unsigned char*)(re + 1);
-
- int returnCode = match(startMatch, start_code, 2, matchBlock);
-
- /* When the result is no match, advance the pointer to the next character
- and continue. */
- if (returnCode == 0) {
- startMatch++;
- continue;
- }
-
- if (returnCode != 1) {
- ASSERT(returnCode == JSRegExpErrorHitLimit || returnCode == JSRegExpErrorNoMemory);
- DPRINTF((">>>> error: returning %d\n", returnCode));
- return returnCode;
- }
-
- /* We have a match! Copy the offset information from temporary store if
- necessary */
-
- if (usingTemporaryOffsets) {
- if (offsetCount >= 4) {
- memcpy(offsets + 2, matchBlock.offsetVector + 2, (offsetCount - 2) * sizeof(int));
- DPRINTF(("Copied offsets from temporary memory\n"));
- }
- if (matchBlock.endOffsetTop > offsetCount)
- matchBlock.offsetOverflow = true;
-
- DPRINTF(("Freeing temporary memory\n"));
- delete [] matchBlock.offsetVector;
- }
-
- returnCode = matchBlock.offsetOverflow ? 0 : matchBlock.endOffsetTop / 2;
-
- if (offsetCount < 2)
- returnCode = 0;
- else {
- offsets[0] = startMatch - matchBlock.startSubject;
- offsets[1] = matchBlock.endMatchPtr - matchBlock.startSubject;
- }
-
- DPRINTF((">>>> returning %d\n", returnCode));
- return returnCode;
- } while (!(re->options & IsAnchoredOption) && startMatch <= endSubject);
-
- if (usingTemporaryOffsets) {
- DPRINTF(("Freeing temporary memory\n"));
- delete [] matchBlock.offsetVector;
- }
-
- DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
- return JSRegExpErrorNoMatch;
-}
-
-#if REGEXP_HISTOGRAM
-
-class CompareHistogramEntries {
-public:
- bool operator()(const pair<UString, double>& a, const pair<UString, double>& b)
- {
- if (a.second == b.second)
- return a.first < b.first;
- return a.second < b.second;
- }
-};
-
-Histogram::~Histogram()
-{
- Vector<pair<UString, double> > values;
- Map::iterator end = times.end();
- for (Map::iterator it = times.begin(); it != end; ++it)
- values.append(*it);
- sort(values.begin(), values.end(), CompareHistogramEntries());
- size_t size = values.size();
- printf("Regular Expressions, sorted by time spent evaluating them:\n");
- for (size_t i = 0; i < size; ++i)
- printf(" %f - %s\n", values[size - i - 1].second, values[size - i - 1].first.utf8().c_str());
-}
-
-void Histogram::add(const JSRegExp* re, double elapsedTime)
-{
- UString string(reinterpret_cast<const UChar*>(reinterpret_cast<const char*>(re) + re->stringOffset), re->stringLength);
- if (re->options & IgnoreCaseOption && re->options & MatchAcrossMultipleLinesOption)
- string += " (multi-line, ignore case)";
- else {
- if (re->options & IgnoreCaseOption)
- string += " (ignore case)";
- if (re->options & MatchAcrossMultipleLinesOption)
- string += " (multi-line)";
- }
- pair<Map::iterator, bool> result = times.add(string.impl(), elapsedTime);
- if (!result.second)
- result.first->second += elapsedTime;
-}
-
-HistogramTimeLogger::HistogramTimeLogger(const JSRegExp* re)
- : m_re(re)
- , m_startTime(currentTimeMS())
-{
-}
-
-HistogramTimeLogger::~HistogramTimeLogger()
-{
- static Histogram histogram;
- histogram.add(m_re, currentTimeMS() - m_startTime);
-}
-
-#endif
diff --git a/Source/JavaScriptCore/pcre/pcre_internal.h b/Source/JavaScriptCore/pcre/pcre_internal.h
deleted file mode 100644
index 0016bb5..0000000
--- a/Source/JavaScriptCore/pcre/pcre_internal.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the exported API. This includes some
-functions whose names all begin with "_pcre_". */
-
-#ifndef PCRE_INTERNAL_H
-#define PCRE_INTERNAL_H
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space 0x01
-#define ctype_xdigit 0x08
-#define ctype_word 0x10 /* alphameric or '_' */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space 0 /* \s */
-#define cbit_digit 32 /* \d */
-#define cbit_word 64 /* \w */
-#define cbit_length 96 /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset 0
-#define fcc_offset 128
-#define cbits_offset 256
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 128)
-
-#ifndef DFTABLES
-
-// Change the following to 1 to dump used regular expressions at process exit time.
-#define REGEXP_HISTOGRAM 0
-
-#include "Assertions.h"
-
-#if COMPILER(MSVC)
-#pragma warning(disable: 4232)
-#pragma warning(disable: 4244)
-#endif
-
-#include "pcre.h"
-
-/* The value of LINK_SIZE determines the number of bytes used to store links as
-offsets within the compiled regex. The default is 2, which allows for compiled
-patterns up to 64K long. */
-
-#define LINK_SIZE 3
-
-/* Define DEBUG to get debugging output on stdout. */
-
-#if 0
-#define DEBUG
-#endif
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements, or at least there were when I first wrote this. After
-all, it had only been about 10 years then... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
-in big-endian order) by default. These are used, for example, to link from the
-start of a subpattern to its alternatives and its end. The use of 2 bytes per
-offset limits the size of the compiled regex to around 64K, which is big enough
-for almost everybody. However, I received a request for an even bigger limit.
-For this reason, and also to make the code easier to maintain, the storing and
-loading of offsets from the byte string is now handled by the functions that are
-defined here. */
-
-/* PCRE uses some other 2-byte quantities that do not change when the size of
-offsets changes. There are used for repeat counts and for other things such as
-capturing parenthesis numbers in back references. */
-
-static inline void put2ByteValue(unsigned char* opcodePtr, int value)
-{
- ASSERT(value >= 0 && value <= 0xFFFF);
- opcodePtr[0] = value >> 8;
- opcodePtr[1] = value;
-}
-
-static inline void put3ByteValue(unsigned char* opcodePtr, int value)
-{
- ASSERT(value >= 0 && value <= 0xFFFFFF);
- opcodePtr[0] = value >> 16;
- opcodePtr[1] = value >> 8;
- opcodePtr[2] = value;
-}
-
-static inline int get2ByteValue(const unsigned char* opcodePtr)
-{
- return (opcodePtr[0] << 8) | opcodePtr[1];
-}
-
-static inline int get3ByteValue(const unsigned char* opcodePtr)
-{
- return (opcodePtr[0] << 16) | (opcodePtr[1] << 8) | opcodePtr[2];
-}
-
-static inline void put2ByteValueAndAdvance(unsigned char*& opcodePtr, int value)
-{
- put2ByteValue(opcodePtr, value);
- opcodePtr += 2;
-}
-
-static inline void put3ByteValueAndAdvance(unsigned char*& opcodePtr, int value)
-{
- put3ByteValue(opcodePtr, value);
- opcodePtr += 3;
-}
-
-static inline void putLinkValueAllowZero(unsigned char* opcodePtr, int value)
-{
-#if LINK_SIZE == 3
- put3ByteValue(opcodePtr, value);
-#elif LINK_SIZE == 2
- put2ByteValue(opcodePtr, value);
-#else
-# error LINK_SIZE not supported.
-#endif
-}
-
-static inline int getLinkValueAllowZero(const unsigned char* opcodePtr)
-{
-#if LINK_SIZE == 3
- return get3ByteValue(opcodePtr);
-#elif LINK_SIZE == 2
- return get2ByteValue(opcodePtr);
-#else
-# error LINK_SIZE not supported.
-#endif
-}
-
-#define MAX_PATTERN_SIZE 1024 * 1024 // Derived by empirical testing of compile time in PCRE and WREC.
-COMPILE_ASSERT(MAX_PATTERN_SIZE < (1 << (8 * LINK_SIZE)), pcre_max_pattern_fits_in_bytecode);
-
-static inline void putLinkValue(unsigned char* opcodePtr, int value)
-{
- ASSERT(value);
- putLinkValueAllowZero(opcodePtr, value);
-}
-
-static inline int getLinkValue(const unsigned char* opcodePtr)
-{
- int value = getLinkValueAllowZero(opcodePtr);
- ASSERT(value);
- return value;
-}
-
-static inline void putLinkValueAndAdvance(unsigned char*& opcodePtr, int value)
-{
- putLinkValue(opcodePtr, value);
- opcodePtr += LINK_SIZE;
-}
-
-static inline void putLinkValueAllowZeroAndAdvance(unsigned char*& opcodePtr, int value)
-{
- putLinkValueAllowZero(opcodePtr, value);
- opcodePtr += LINK_SIZE;
-}
-
-// FIXME: These are really more of a "compiled regexp state" than "regexp options"
-enum RegExpOptions {
- UseFirstByteOptimizationOption = 0x40000000, /* firstByte is set */
- UseRequiredByteOptimizationOption = 0x20000000, /* reqByte is set */
- UseMultiLineFirstByteOptimizationOption = 0x10000000, /* start after \n for multiline */
- IsAnchoredOption = 0x02000000, /* can't use partial with this regex */
- IgnoreCaseOption = 0x00000001,
- MatchAcrossMultipleLinesOption = 0x00000002
-};
-
-/* Flags added to firstByte or reqByte; a "non-literal" item is either a
-variable-length repeat, or a anything other than literal characters. */
-
-#define REQ_IGNORE_CASE 0x0100 /* indicates should ignore case */
-#define REQ_VARY 0x0200 /* reqByte followed non-literal item */
-
-/* Miscellaneous definitions */
-
-/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
-contain UTF-8 characters with values greater than 255. */
-
-#define XCL_NOT 0x01 /* Flag: this is a negative class */
-#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */
-
-#define XCL_END 0 /* Marks end of individual items */
-#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */
-#define XCL_RANGE 2 /* A range (two multibyte chars) follows */
-
-/* These are escaped items that aren't just an encoding of a particular data
-value such as \n. They must have non-zero values, as check_escape() returns
-their negation. Also, they must appear in the same order as in the opcode
-definitions below, up to ESC_w. The final one must be
-ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two
-tests in the code for an escape > ESC_b and <= ESC_w to
-detect the types that may be repeated. These are the types that consume
-characters. If any new escapes are put in between that don't consume a
-character, that code will have to change. */
-
-enum { ESC_B = 1, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w, ESC_REF };
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above.
-Note that whenever this list is updated, the two macro definitions that follow
-must also be updated to match. */
-
-#define FOR_EACH_OPCODE(macro) \
- macro(END) \
- \
- macro(NOT_WORD_BOUNDARY) \
- macro(WORD_BOUNDARY) \
- macro(NOT_DIGIT) \
- macro(DIGIT) \
- macro(NOT_WHITESPACE) \
- macro(WHITESPACE) \
- macro(NOT_WORDCHAR) \
- macro(WORDCHAR) \
- \
- macro(NOT_NEWLINE) \
- \
- macro(CIRC) \
- macro(DOLL) \
- macro(BOL) \
- macro(EOL) \
- macro(CHAR) \
- macro(CHAR_IGNORING_CASE) \
- macro(ASCII_CHAR) \
- macro(ASCII_LETTER_IGNORING_CASE) \
- macro(NOT) \
- \
- macro(STAR) \
- macro(MINSTAR) \
- macro(PLUS) \
- macro(MINPLUS) \
- macro(QUERY) \
- macro(MINQUERY) \
- macro(UPTO) \
- macro(MINUPTO) \
- macro(EXACT) \
- \
- macro(NOTSTAR) \
- macro(NOTMINSTAR) \
- macro(NOTPLUS) \
- macro(NOTMINPLUS) \
- macro(NOTQUERY) \
- macro(NOTMINQUERY) \
- macro(NOTUPTO) \
- macro(NOTMINUPTO) \
- macro(NOTEXACT) \
- \
- macro(TYPESTAR) \
- macro(TYPEMINSTAR) \
- macro(TYPEPLUS) \
- macro(TYPEMINPLUS) \
- macro(TYPEQUERY) \
- macro(TYPEMINQUERY) \
- macro(TYPEUPTO) \
- macro(TYPEMINUPTO) \
- macro(TYPEEXACT) \
- \
- macro(CRSTAR) \
- macro(CRMINSTAR) \
- macro(CRPLUS) \
- macro(CRMINPLUS) \
- macro(CRQUERY) \
- macro(CRMINQUERY) \
- macro(CRRANGE) \
- macro(CRMINRANGE) \
- \
- macro(CLASS) \
- macro(NCLASS) \
- macro(XCLASS) \
- \
- macro(REF) \
- \
- macro(ALT) \
- macro(KET) \
- macro(KETRMAX) \
- macro(KETRMIN) \
- \
- macro(ASSERT) \
- macro(ASSERT_NOT) \
- \
- macro(BRAZERO) \
- macro(BRAMINZERO) \
- macro(BRANUMBER) \
- macro(BRA)
-
-#define OPCODE_ENUM_VALUE(opcode) OP_##opcode,
-enum { FOR_EACH_OPCODE(OPCODE_ENUM_VALUE) };
-
-/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and
-study.c that all opcodes are less than 128 in value. This makes handling UTF-8
-character sequences easier. */
-
-/* The highest extraction number before we have to start using additional
-bytes. (Originally PCRE didn't have support for extraction counts higher than
-this number.) The value is limited by the number of opcodes left after OP_BRA,
-i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
-opcodes. */
-
-/* FIXME: Note that OP_BRA + 100 is > 128, so the two comments above
-are in conflict! */
-
-#define EXTRACT_BASIC_MAX 100
-
-/* The code vector runs on as long as necessary after the end. */
-
-struct JSRegExp {
- unsigned options;
-
- unsigned short topBracket;
- unsigned short topBackref;
-
- unsigned short firstByte;
- unsigned short reqByte;
-
-#if REGEXP_HISTOGRAM
- size_t stringOffset;
- size_t stringLength;
-#endif
-};
-
-/* Internal shared data tables. These are tables that are used by more than one
- of the exported public functions. They have to be "external" in the C sense,
- but are not part of the PCRE public API. The data for these tables is in the
- pcre_tables.c module. */
-
-#define jsc_pcre_utf8_table1_size 6
-
-extern const int jsc_pcre_utf8_table1[6];
-extern const int jsc_pcre_utf8_table2[6];
-extern const int jsc_pcre_utf8_table3[6];
-extern const unsigned char jsc_pcre_utf8_table4[0x40];
-
-extern const unsigned char jsc_pcre_default_tables[tables_length];
-
-static inline unsigned char toLowerCase(unsigned char c)
-{
- static const unsigned char* lowerCaseChars = jsc_pcre_default_tables + lcc_offset;
- return lowerCaseChars[c];
-}
-
-static inline unsigned char flipCase(unsigned char c)
-{
- static const unsigned char* flippedCaseChars = jsc_pcre_default_tables + fcc_offset;
- return flippedCaseChars[c];
-}
-
-static inline unsigned char classBitmapForChar(unsigned char c)
-{
- static const unsigned char* charClassBitmaps = jsc_pcre_default_tables + cbits_offset;
- return charClassBitmaps[c];
-}
-
-static inline unsigned char charTypeForChar(unsigned char c)
-{
- const unsigned char* charTypeMap = jsc_pcre_default_tables + ctypes_offset;
- return charTypeMap[c];
-}
-
-static inline bool isWordChar(UChar c)
-{
- return c < 128 && (charTypeForChar(c) & ctype_word);
-}
-
-static inline bool isSpaceChar(UChar c)
-{
- return (c < 128 && (charTypeForChar(c) & ctype_space)) || c == 0x00A0;
-}
-
-static inline bool isNewline(UChar nl)
-{
- return (nl == 0xA || nl == 0xD || nl == 0x2028 || nl == 0x2029);
-}
-
-static inline bool isBracketStartOpcode(unsigned char opcode)
-{
- if (opcode >= OP_BRA)
- return true;
- switch (opcode) {
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- return true;
- default:
- return false;
- }
-}
-
-static inline void advanceToEndOfBracket(const unsigned char*& opcodePtr)
-{
- ASSERT(isBracketStartOpcode(*opcodePtr) || *opcodePtr == OP_ALT);
- do
- opcodePtr += getLinkValue(opcodePtr + 1);
- while (*opcodePtr == OP_ALT);
-}
-
-/* Internal shared functions. These are functions that are used in more
-that one of the source files. They have to have external linkage, but
-but are not part of the public API and so not exported from the library. */
-
-extern int jsc_pcre_ucp_othercase(unsigned);
-extern bool jsc_pcre_xclass(int, const unsigned char*);
-
-#endif
-
-#endif
-
-/* End of pcre_internal.h */
diff --git a/Source/JavaScriptCore/pcre/pcre_tables.cpp b/Source/JavaScriptCore/pcre/pcre_tables.cpp
deleted file mode 100644
index 8696879..0000000
--- a/Source/JavaScriptCore/pcre/pcre_tables.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some fixed tables that are used by more than one of the
-PCRE code modules. */
-
-#include "config.h"
-#include "pcre_internal.h"
-
-/*************************************************
-* Tables for UTF-8 support *
-*************************************************/
-
-/* These are the breakpoints for different numbers of bytes in a UTF-8
-character. */
-
-const int jsc_pcre_utf8_table1[6] =
- { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
-
-/* These are the indicator bits and the mask for the data bits to set in the
-first byte of a character, indexed by the number of additional bytes. */
-
-const int jsc_pcre_utf8_table2[6] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-const int jsc_pcre_utf8_table3[6] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-/* Table of the number of extra characters, indexed by the first character
-masked with 0x3f. The highest number for a valid UTF-8 character is in fact
-0x3d. */
-
-const unsigned char jsc_pcre_utf8_table4[0x40] = {
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
-
-#include "chartables.c"
diff --git a/Source/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp b/Source/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp
deleted file mode 100644
index d2052b2..0000000
--- a/Source/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* This module contains code for searching the table of Unicode character
-properties. */
-
-#include "config.h"
-#include "pcre_internal.h"
-
-#include "ucpinternal.h" /* Internal table details */
-#include "ucptable.cpp" /* The table itself */
-
-/*************************************************
-* Search table and return other case *
-*************************************************/
-
-/* If the given character is a letter, and there is another case for the
-letter, return the other case. Otherwise, return -1.
-
-Arguments:
- c the character value
-
-Returns: the other case or -1 if none
-*/
-
-int jsc_pcre_ucp_othercase(unsigned c)
-{
- int bot = 0;
- int top = sizeof(ucp_table) / sizeof(cnode);
- int mid;
-
- /* The table is searched using a binary chop. You might think that using
- intermediate variables to hold some of the common expressions would speed
- things up, but tests with gcc 3.4.4 on Linux showed that, on the contrary, it
- makes things a lot slower. */
-
- for (;;) {
- if (top <= bot)
- return -1;
- mid = (bot + top) >> 1;
- if (c == (ucp_table[mid].f0 & f0_charmask))
- break;
- if (c < (ucp_table[mid].f0 & f0_charmask))
- top = mid;
- else {
- if ((ucp_table[mid].f0 & f0_rangeflag) && (c <= (ucp_table[mid].f0 & f0_charmask) + (ucp_table[mid].f1 & f1_rangemask)))
- break;
- bot = mid + 1;
- }
- }
-
- /* Found an entry in the table. Return -1 for a range entry. Otherwise return
- the other case if there is one, else -1. */
-
- if (ucp_table[mid].f0 & f0_rangeflag)
- return -1;
-
- int offset = ucp_table[mid].f1 & f1_casemask;
- if (offset & f1_caseneg)
- offset |= f1_caseneg;
- return !offset ? -1 : static_cast<int>(c + offset);
-}
diff --git a/Source/JavaScriptCore/pcre/pcre_xclass.cpp b/Source/JavaScriptCore/pcre/pcre_xclass.cpp
deleted file mode 100644
index a32edd4..0000000
--- a/Source/JavaScriptCore/pcre/pcre_xclass.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains an internal function that is used to match an extended
-class (one that contains characters whose values are > 255). */
-
-#include "config.h"
-#include "pcre_internal.h"
-
-/*************************************************
-* Match character against an XCLASS *
-*************************************************/
-
-/* This function is called to match a character against an extended class that
-might contain values > 255.
-
-Arguments:
- c the character
- data points to the flag byte of the XCLASS data
-
-Returns: true if character matches, else false
-*/
-
-/* Get the next UTF-8 character, advancing the pointer. This is called when we
- know we are in UTF-8 mode. */
-
-static inline void getUTF8CharAndAdvancePointer(int& c, const unsigned char*& subjectPtr)
-{
- c = *subjectPtr++;
- if ((c & 0xc0) == 0xc0) {
- int gcaa = jsc_pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */
- int gcss = 6 * gcaa;
- c = (c & jsc_pcre_utf8_table3[gcaa]) << gcss;
- while (gcaa-- > 0) {
- gcss -= 6;
- c |= (*subjectPtr++ & 0x3f) << gcss;
- }
- }
-}
-
-bool jsc_pcre_xclass(int c, const unsigned char* data)
-{
- bool negated = (*data & XCL_NOT);
-
- /* Character values < 256 are matched against a bitmap, if one is present. If
- not, we still carry on, because there may be ranges that start below 256 in the
- additional data. */
-
- if (c < 256) {
- if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
- return !negated; /* char found */
- }
-
- /* First skip the bit map if present. Then match against the list of Unicode
- properties or large chars or ranges that end with a large char. We won't ever
- encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
-
- if ((*data++ & XCL_MAP) != 0)
- data += 32;
-
- int t;
- while ((t = *data++) != XCL_END) {
- if (t == XCL_SINGLE) {
- int x;
- getUTF8CharAndAdvancePointer(x, data);
- if (c == x)
- return !negated;
- }
- else if (t == XCL_RANGE) {
- int x, y;
- getUTF8CharAndAdvancePointer(x, data);
- getUTF8CharAndAdvancePointer(y, data);
- if (c >= x && c <= y)
- return !negated;
- }
- }
-
- return negated; /* char did not match */
-}
diff --git a/Source/JavaScriptCore/pcre/ucpinternal.h b/Source/JavaScriptCore/pcre/ucpinternal.h
deleted file mode 100644
index c8bc4aa..0000000
--- a/Source/JavaScriptCore/pcre/ucpinternal.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* This is JavaScriptCore's variant of the PCRE library. While this library
-started out as a copy of PCRE, many of the features of PCRE have been
-removed. This library now supports only the regular expression features
-required by the JavaScript language specification, and has only the functions
-needed by JavaScriptCore and the rest of WebKit.
-
- Originally written by Philip Hazel
- Copyright (c) 1997-2006 University of Cambridge
- Copyright (C) 2002, 2004, 2006, 2007 Apple Inc. All rights reserved.
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/*************************************************
-* Unicode Property Table handler *
-*************************************************/
-
-/* Internal header file defining the layout of the bits in each pair of 32-bit
-words that form a data item in the table. */
-
-typedef struct cnode {
- unsigned f0;
- unsigned f1;
-} cnode;
-
-/* Things for the f0 field */
-
-#define f0_scriptmask 0xff000000 /* Mask for script field */
-#define f0_scriptshift 24 /* Shift for script value */
-#define f0_rangeflag 0x00f00000 /* Flag for a range item */
-#define f0_charmask 0x001fffff /* Mask for code point value */
-
-/* Things for the f1 field */
-
-#define f1_typemask 0xfc000000 /* Mask for char type field */
-#define f1_typeshift 26 /* Shift for the type field */
-#define f1_rangemask 0x0000ffff /* Mask for a range offset */
-#define f1_casemask 0x0000ffff /* Mask for a case offset */
-#define f1_caseneg 0xffff8000 /* Bits for negation */
-
-/* The data consists of a vector of structures of type cnode. The two unsigned
-32-bit integers are used as follows:
-
-(f0) (1) The most significant byte holds the script number. The numbers are
- defined by the enum in ucp.h.
-
- (2) The 0x00800000 bit is set if this entry defines a range of characters.
- It is not set if this entry defines a single character
-
- (3) The 0x00600000 bits are spare.
-
- (4) The 0x001fffff bits contain the code point. No Unicode code point will
- ever be greater than 0x0010ffff, so this should be OK for ever.
-
-(f1) (1) The 0xfc000000 bits contain the character type number. The numbers are
- defined by an enum in ucp.h.
-
- (2) The 0x03ff0000 bits are spare.
-
- (3) The 0x0000ffff bits contain EITHER the unsigned offset to the top of
- range if this entry defines a range, OR the *signed* offset to the
- character's "other case" partner if this entry defines a single
- character. There is no partner if the value is zero.
-
--------------------------------------------------------------------------------
-| script (8) |.|.|.| codepoint (21) || type (6) |.|.| spare (8) | offset (16) |
--------------------------------------------------------------------------------
- | | | | |
- | | |-> spare | |-> spare
- | | |
- | |-> spare |-> spare
- |
- |-> range flag
-
-The upper/lower casing information is set only for characters that come in
-pairs. The non-one-to-one mappings in the Unicode data are ignored.
-
-When searching the data, proceed as follows:
-
-(1) Set up for a binary chop search.
-
-(2) If the top is not greater than the bottom, the character is not in the
- table. Its type must therefore be "Cn" ("Undefined").
-
-(3) Find the middle vector element.
-
-(4) Extract the code point and compare. If equal, we are done.
-
-(5) If the test character is smaller, set the top to the current point, and
- goto (2).
-
-(6) If the current entry defines a range, compute the last character by adding
- the offset, and see if the test character is within the range. If it is,
- we are done.
-
-(7) Otherwise, set the bottom to one element past the current point and goto
- (2).
-*/
-
-/* End of ucpinternal.h */
diff --git a/Source/JavaScriptCore/pcre/ucptable.cpp b/Source/JavaScriptCore/pcre/ucptable.cpp
deleted file mode 100644
index 011f7f5..0000000
--- a/Source/JavaScriptCore/pcre/ucptable.cpp
+++ /dev/null
@@ -1,2968 +0,0 @@
-/* This source module is automatically generated from the Unicode
-property table. See ucpinternal.h for a description of the layout. */
-
-static const cnode ucp_table[] = {
- { 0x09800000, 0x0000001f },
- { 0x09000020, 0x74000000 },
- { 0x09800021, 0x54000002 },
- { 0x09000024, 0x5c000000 },
- { 0x09800025, 0x54000002 },
- { 0x09000028, 0x58000000 },
- { 0x09000029, 0x48000000 },
- { 0x0900002a, 0x54000000 },
- { 0x0900002b, 0x64000000 },
- { 0x0900002c, 0x54000000 },
- { 0x0900002d, 0x44000000 },
- { 0x0980002e, 0x54000001 },
- { 0x09800030, 0x34000009 },
- { 0x0980003a, 0x54000001 },
- { 0x0980003c, 0x64000002 },
- { 0x0980003f, 0x54000001 },
- { 0x21000041, 0x24000020 },
- { 0x21000042, 0x24000020 },
- { 0x21000043, 0x24000020 },
- { 0x21000044, 0x24000020 },
- { 0x21000045, 0x24000020 },
- { 0x21000046, 0x24000020 },
- { 0x21000047, 0x24000020 },
- { 0x21000048, 0x24000020 },
- { 0x21000049, 0x24000020 },
- { 0x2100004a, 0x24000020 },
- { 0x2100004b, 0x24000020 },
- { 0x2100004c, 0x24000020 },
- { 0x2100004d, 0x24000020 },
- { 0x2100004e, 0x24000020 },
- { 0x2100004f, 0x24000020 },
- { 0x21000050, 0x24000020 },
- { 0x21000051, 0x24000020 },
- { 0x21000052, 0x24000020 },
- { 0x21000053, 0x24000020 },
- { 0x21000054, 0x24000020 },
- { 0x21000055, 0x24000020 },
- { 0x21000056, 0x24000020 },
- { 0x21000057, 0x24000020 },
- { 0x21000058, 0x24000020 },
- { 0x21000059, 0x24000020 },
- { 0x2100005a, 0x24000020 },
- { 0x0900005b, 0x58000000 },
- { 0x0900005c, 0x54000000 },
- { 0x0900005d, 0x48000000 },
- { 0x0900005e, 0x60000000 },
- { 0x0900005f, 0x40000000 },
- { 0x09000060, 0x60000000 },
- { 0x21000061, 0x1400ffe0 },
- { 0x21000062, 0x1400ffe0 },
- { 0x21000063, 0x1400ffe0 },
- { 0x21000064, 0x1400ffe0 },
- { 0x21000065, 0x1400ffe0 },
- { 0x21000066, 0x1400ffe0 },
- { 0x21000067, 0x1400ffe0 },
- { 0x21000068, 0x1400ffe0 },
- { 0x21000069, 0x1400ffe0 },
- { 0x2100006a, 0x1400ffe0 },
- { 0x2100006b, 0x1400ffe0 },
- { 0x2100006c, 0x1400ffe0 },
- { 0x2100006d, 0x1400ffe0 },
- { 0x2100006e, 0x1400ffe0 },
- { 0x2100006f, 0x1400ffe0 },
- { 0x21000070, 0x1400ffe0 },
- { 0x21000071, 0x1400ffe0 },
- { 0x21000072, 0x1400ffe0 },
- { 0x21000073, 0x1400ffe0 },
- { 0x21000074, 0x1400ffe0 },
- { 0x21000075, 0x1400ffe0 },
- { 0x21000076, 0x1400ffe0 },
- { 0x21000077, 0x1400ffe0 },
- { 0x21000078, 0x1400ffe0 },
- { 0x21000079, 0x1400ffe0 },
- { 0x2100007a, 0x1400ffe0 },
- { 0x0900007b, 0x58000000 },
- { 0x0900007c, 0x64000000 },
- { 0x0900007d, 0x48000000 },
- { 0x0900007e, 0x64000000 },
- { 0x0980007f, 0x00000020 },
- { 0x090000a0, 0x74000000 },
- { 0x090000a1, 0x54000000 },
- { 0x098000a2, 0x5c000003 },
- { 0x098000a6, 0x68000001 },
- { 0x090000a8, 0x60000000 },
- { 0x090000a9, 0x68000000 },
- { 0x210000aa, 0x14000000 },
- { 0x090000ab, 0x50000000 },
- { 0x090000ac, 0x64000000 },
- { 0x090000ad, 0x04000000 },
- { 0x090000ae, 0x68000000 },
- { 0x090000af, 0x60000000 },
- { 0x090000b0, 0x68000000 },
- { 0x090000b1, 0x64000000 },
- { 0x098000b2, 0x3c000001 },
- { 0x090000b4, 0x60000000 },
- { 0x090000b5, 0x140002e7 },
- { 0x090000b6, 0x68000000 },
- { 0x090000b7, 0x54000000 },
- { 0x090000b8, 0x60000000 },
- { 0x090000b9, 0x3c000000 },
- { 0x210000ba, 0x14000000 },
- { 0x090000bb, 0x4c000000 },
- { 0x098000bc, 0x3c000002 },
- { 0x090000bf, 0x54000000 },
- { 0x210000c0, 0x24000020 },
- { 0x210000c1, 0x24000020 },
- { 0x210000c2, 0x24000020 },
- { 0x210000c3, 0x24000020 },
- { 0x210000c4, 0x24000020 },
- { 0x210000c5, 0x24000020 },
- { 0x210000c6, 0x24000020 },
- { 0x210000c7, 0x24000020 },
- { 0x210000c8, 0x24000020 },
- { 0x210000c9, 0x24000020 },
- { 0x210000ca, 0x24000020 },
- { 0x210000cb, 0x24000020 },
- { 0x210000cc, 0x24000020 },
- { 0x210000cd, 0x24000020 },
- { 0x210000ce, 0x24000020 },
- { 0x210000cf, 0x24000020 },
- { 0x210000d0, 0x24000020 },
- { 0x210000d1, 0x24000020 },
- { 0x210000d2, 0x24000020 },
- { 0x210000d3, 0x24000020 },
- { 0x210000d4, 0x24000020 },
- { 0x210000d5, 0x24000020 },
- { 0x210000d6, 0x24000020 },
- { 0x090000d7, 0x64000000 },
- { 0x210000d8, 0x24000020 },
- { 0x210000d9, 0x24000020 },
- { 0x210000da, 0x24000020 },
- { 0x210000db, 0x24000020 },
- { 0x210000dc, 0x24000020 },
- { 0x210000dd, 0x24000020 },
- { 0x210000de, 0x24000020 },
- { 0x210000df, 0x14000000 },
- { 0x210000e0, 0x1400ffe0 },
- { 0x210000e1, 0x1400ffe0 },
- { 0x210000e2, 0x1400ffe0 },
- { 0x210000e3, 0x1400ffe0 },
- { 0x210000e4, 0x1400ffe0 },
- { 0x210000e5, 0x1400ffe0 },
- { 0x210000e6, 0x1400ffe0 },
- { 0x210000e7, 0x1400ffe0 },
- { 0x210000e8, 0x1400ffe0 },
- { 0x210000e9, 0x1400ffe0 },
- { 0x210000ea, 0x1400ffe0 },
- { 0x210000eb, 0x1400ffe0 },
- { 0x210000ec, 0x1400ffe0 },
- { 0x210000ed, 0x1400ffe0 },
- { 0x210000ee, 0x1400ffe0 },
- { 0x210000ef, 0x1400ffe0 },
- { 0x210000f0, 0x1400ffe0 },
- { 0x210000f1, 0x1400ffe0 },
- { 0x210000f2, 0x1400ffe0 },
- { 0x210000f3, 0x1400ffe0 },
- { 0x210000f4, 0x1400ffe0 },
- { 0x210000f5, 0x1400ffe0 },
- { 0x210000f6, 0x1400ffe0 },
- { 0x090000f7, 0x64000000 },
- { 0x210000f8, 0x1400ffe0 },
- { 0x210000f9, 0x1400ffe0 },
- { 0x210000fa, 0x1400ffe0 },
- { 0x210000fb, 0x1400ffe0 },
- { 0x210000fc, 0x1400ffe0 },
- { 0x210000fd, 0x1400ffe0 },
- { 0x210000fe, 0x1400ffe0 },
- { 0x210000ff, 0x14000079 },
- { 0x21000100, 0x24000001 },
- { 0x21000101, 0x1400ffff },
- { 0x21000102, 0x24000001 },
- { 0x21000103, 0x1400ffff },
- { 0x21000104, 0x24000001 },
- { 0x21000105, 0x1400ffff },
- { 0x21000106, 0x24000001 },
- { 0x21000107, 0x1400ffff },
- { 0x21000108, 0x24000001 },
- { 0x21000109, 0x1400ffff },
- { 0x2100010a, 0x24000001 },
- { 0x2100010b, 0x1400ffff },
- { 0x2100010c, 0x24000001 },
- { 0x2100010d, 0x1400ffff },
- { 0x2100010e, 0x24000001 },
- { 0x2100010f, 0x1400ffff },
- { 0x21000110, 0x24000001 },
- { 0x21000111, 0x1400ffff },
- { 0x21000112, 0x24000001 },
- { 0x21000113, 0x1400ffff },
- { 0x21000114, 0x24000001 },
- { 0x21000115, 0x1400ffff },
- { 0x21000116, 0x24000001 },
- { 0x21000117, 0x1400ffff },
- { 0x21000118, 0x24000001 },
- { 0x21000119, 0x1400ffff },
- { 0x2100011a, 0x24000001 },
- { 0x2100011b, 0x1400ffff },
- { 0x2100011c, 0x24000001 },
- { 0x2100011d, 0x1400ffff },
- { 0x2100011e, 0x24000001 },
- { 0x2100011f, 0x1400ffff },
- { 0x21000120, 0x24000001 },
- { 0x21000121, 0x1400ffff },
- { 0x21000122, 0x24000001 },
- { 0x21000123, 0x1400ffff },
- { 0x21000124, 0x24000001 },
- { 0x21000125, 0x1400ffff },
- { 0x21000126, 0x24000001 },
- { 0x21000127, 0x1400ffff },
- { 0x21000128, 0x24000001 },
- { 0x21000129, 0x1400ffff },
- { 0x2100012a, 0x24000001 },
- { 0x2100012b, 0x1400ffff },
- { 0x2100012c, 0x24000001 },
- { 0x2100012d, 0x1400ffff },
- { 0x2100012e, 0x24000001 },
- { 0x2100012f, 0x1400ffff },
- { 0x21000130, 0x2400ff39 },
- { 0x21000131, 0x1400ff18 },
- { 0x21000132, 0x24000001 },
- { 0x21000133, 0x1400ffff },
- { 0x21000134, 0x24000001 },
- { 0x21000135, 0x1400ffff },
- { 0x21000136, 0x24000001 },
- { 0x21000137, 0x1400ffff },
- { 0x21000138, 0x14000000 },
- { 0x21000139, 0x24000001 },
- { 0x2100013a, 0x1400ffff },
- { 0x2100013b, 0x24000001 },
- { 0x2100013c, 0x1400ffff },
- { 0x2100013d, 0x24000001 },
- { 0x2100013e, 0x1400ffff },
- { 0x2100013f, 0x24000001 },
- { 0x21000140, 0x1400ffff },
- { 0x21000141, 0x24000001 },
- { 0x21000142, 0x1400ffff },
- { 0x21000143, 0x24000001 },
- { 0x21000144, 0x1400ffff },
- { 0x21000145, 0x24000001 },
- { 0x21000146, 0x1400ffff },
- { 0x21000147, 0x24000001 },
- { 0x21000148, 0x1400ffff },
- { 0x21000149, 0x14000000 },
- { 0x2100014a, 0x24000001 },
- { 0x2100014b, 0x1400ffff },
- { 0x2100014c, 0x24000001 },
- { 0x2100014d, 0x1400ffff },
- { 0x2100014e, 0x24000001 },
- { 0x2100014f, 0x1400ffff },
- { 0x21000150, 0x24000001 },
- { 0x21000151, 0x1400ffff },
- { 0x21000152, 0x24000001 },
- { 0x21000153, 0x1400ffff },
- { 0x21000154, 0x24000001 },
- { 0x21000155, 0x1400ffff },
- { 0x21000156, 0x24000001 },
- { 0x21000157, 0x1400ffff },
- { 0x21000158, 0x24000001 },
- { 0x21000159, 0x1400ffff },
- { 0x2100015a, 0x24000001 },
- { 0x2100015b, 0x1400ffff },
- { 0x2100015c, 0x24000001 },
- { 0x2100015d, 0x1400ffff },
- { 0x2100015e, 0x24000001 },
- { 0x2100015f, 0x1400ffff },
- { 0x21000160, 0x24000001 },
- { 0x21000161, 0x1400ffff },
- { 0x21000162, 0x24000001 },
- { 0x21000163, 0x1400ffff },
- { 0x21000164, 0x24000001 },
- { 0x21000165, 0x1400ffff },
- { 0x21000166, 0x24000001 },
- { 0x21000167, 0x1400ffff },
- { 0x21000168, 0x24000001 },
- { 0x21000169, 0x1400ffff },
- { 0x2100016a, 0x24000001 },
- { 0x2100016b, 0x1400ffff },
- { 0x2100016c, 0x24000001 },
- { 0x2100016d, 0x1400ffff },
- { 0x2100016e, 0x24000001 },
- { 0x2100016f, 0x1400ffff },
- { 0x21000170, 0x24000001 },
- { 0x21000171, 0x1400ffff },
- { 0x21000172, 0x24000001 },
- { 0x21000173, 0x1400ffff },
- { 0x21000174, 0x24000001 },
- { 0x21000175, 0x1400ffff },
- { 0x21000176, 0x24000001 },
- { 0x21000177, 0x1400ffff },
- { 0x21000178, 0x2400ff87 },
- { 0x21000179, 0x24000001 },
- { 0x2100017a, 0x1400ffff },
- { 0x2100017b, 0x24000001 },
- { 0x2100017c, 0x1400ffff },
- { 0x2100017d, 0x24000001 },
- { 0x2100017e, 0x1400ffff },
- { 0x2100017f, 0x1400fed4 },
- { 0x21000180, 0x14000000 },
- { 0x21000181, 0x240000d2 },
- { 0x21000182, 0x24000001 },
- { 0x21000183, 0x1400ffff },
- { 0x21000184, 0x24000001 },
- { 0x21000185, 0x1400ffff },
- { 0x21000186, 0x240000ce },
- { 0x21000187, 0x24000001 },
- { 0x21000188, 0x1400ffff },
- { 0x21000189, 0x240000cd },
- { 0x2100018a, 0x240000cd },
- { 0x2100018b, 0x24000001 },
- { 0x2100018c, 0x1400ffff },
- { 0x2100018d, 0x14000000 },
- { 0x2100018e, 0x2400004f },
- { 0x2100018f, 0x240000ca },
- { 0x21000190, 0x240000cb },
- { 0x21000191, 0x24000001 },
- { 0x21000192, 0x1400ffff },
- { 0x21000193, 0x240000cd },
- { 0x21000194, 0x240000cf },
- { 0x21000195, 0x14000061 },
- { 0x21000196, 0x240000d3 },
- { 0x21000197, 0x240000d1 },
- { 0x21000198, 0x24000001 },
- { 0x21000199, 0x1400ffff },
- { 0x2100019a, 0x140000a3 },
- { 0x2100019b, 0x14000000 },
- { 0x2100019c, 0x240000d3 },
- { 0x2100019d, 0x240000d5 },
- { 0x2100019e, 0x14000082 },
- { 0x2100019f, 0x240000d6 },
- { 0x210001a0, 0x24000001 },
- { 0x210001a1, 0x1400ffff },
- { 0x210001a2, 0x24000001 },
- { 0x210001a3, 0x1400ffff },
- { 0x210001a4, 0x24000001 },
- { 0x210001a5, 0x1400ffff },
- { 0x210001a6, 0x240000da },
- { 0x210001a7, 0x24000001 },
- { 0x210001a8, 0x1400ffff },
- { 0x210001a9, 0x240000da },
- { 0x218001aa, 0x14000001 },
- { 0x210001ac, 0x24000001 },
- { 0x210001ad, 0x1400ffff },
- { 0x210001ae, 0x240000da },
- { 0x210001af, 0x24000001 },
- { 0x210001b0, 0x1400ffff },
- { 0x210001b1, 0x240000d9 },
- { 0x210001b2, 0x240000d9 },
- { 0x210001b3, 0x24000001 },
- { 0x210001b4, 0x1400ffff },
- { 0x210001b5, 0x24000001 },
- { 0x210001b6, 0x1400ffff },
- { 0x210001b7, 0x240000db },
- { 0x210001b8, 0x24000001 },
- { 0x210001b9, 0x1400ffff },
- { 0x210001ba, 0x14000000 },
- { 0x210001bb, 0x1c000000 },
- { 0x210001bc, 0x24000001 },
- { 0x210001bd, 0x1400ffff },
- { 0x210001be, 0x14000000 },
- { 0x210001bf, 0x14000038 },
- { 0x218001c0, 0x1c000003 },
- { 0x210001c4, 0x24000002 },
- { 0x210001c5, 0x2000ffff },
- { 0x210001c6, 0x1400fffe },
- { 0x210001c7, 0x24000002 },
- { 0x210001c8, 0x2000ffff },
- { 0x210001c9, 0x1400fffe },
- { 0x210001ca, 0x24000002 },
- { 0x210001cb, 0x2000ffff },
- { 0x210001cc, 0x1400fffe },
- { 0x210001cd, 0x24000001 },
- { 0x210001ce, 0x1400ffff },
- { 0x210001cf, 0x24000001 },
- { 0x210001d0, 0x1400ffff },
- { 0x210001d1, 0x24000001 },
- { 0x210001d2, 0x1400ffff },
- { 0x210001d3, 0x24000001 },
- { 0x210001d4, 0x1400ffff },
- { 0x210001d5, 0x24000001 },
- { 0x210001d6, 0x1400ffff },
- { 0x210001d7, 0x24000001 },
- { 0x210001d8, 0x1400ffff },
- { 0x210001d9, 0x24000001 },
- { 0x210001da, 0x1400ffff },
- { 0x210001db, 0x24000001 },
- { 0x210001dc, 0x1400ffff },
- { 0x210001dd, 0x1400ffb1 },
- { 0x210001de, 0x24000001 },
- { 0x210001df, 0x1400ffff },
- { 0x210001e0, 0x24000001 },
- { 0x210001e1, 0x1400ffff },
- { 0x210001e2, 0x24000001 },
- { 0x210001e3, 0x1400ffff },
- { 0x210001e4, 0x24000001 },
- { 0x210001e5, 0x1400ffff },
- { 0x210001e6, 0x24000001 },
- { 0x210001e7, 0x1400ffff },
- { 0x210001e8, 0x24000001 },
- { 0x210001e9, 0x1400ffff },
- { 0x210001ea, 0x24000001 },
- { 0x210001eb, 0x1400ffff },
- { 0x210001ec, 0x24000001 },
- { 0x210001ed, 0x1400ffff },
- { 0x210001ee, 0x24000001 },
- { 0x210001ef, 0x1400ffff },
- { 0x210001f0, 0x14000000 },
- { 0x210001f1, 0x24000002 },
- { 0x210001f2, 0x2000ffff },
- { 0x210001f3, 0x1400fffe },
- { 0x210001f4, 0x24000001 },
- { 0x210001f5, 0x1400ffff },
- { 0x210001f6, 0x2400ff9f },
- { 0x210001f7, 0x2400ffc8 },
- { 0x210001f8, 0x24000001 },
- { 0x210001f9, 0x1400ffff },
- { 0x210001fa, 0x24000001 },
- { 0x210001fb, 0x1400ffff },
- { 0x210001fc, 0x24000001 },
- { 0x210001fd, 0x1400ffff },
- { 0x210001fe, 0x24000001 },
- { 0x210001ff, 0x1400ffff },
- { 0x21000200, 0x24000001 },
- { 0x21000201, 0x1400ffff },
- { 0x21000202, 0x24000001 },
- { 0x21000203, 0x1400ffff },
- { 0x21000204, 0x24000001 },
- { 0x21000205, 0x1400ffff },
- { 0x21000206, 0x24000001 },
- { 0x21000207, 0x1400ffff },
- { 0x21000208, 0x24000001 },
- { 0x21000209, 0x1400ffff },
- { 0x2100020a, 0x24000001 },
- { 0x2100020b, 0x1400ffff },
- { 0x2100020c, 0x24000001 },
- { 0x2100020d, 0x1400ffff },
- { 0x2100020e, 0x24000001 },
- { 0x2100020f, 0x1400ffff },
- { 0x21000210, 0x24000001 },
- { 0x21000211, 0x1400ffff },
- { 0x21000212, 0x24000001 },
- { 0x21000213, 0x1400ffff },
- { 0x21000214, 0x24000001 },
- { 0x21000215, 0x1400ffff },
- { 0x21000216, 0x24000001 },
- { 0x21000217, 0x1400ffff },
- { 0x21000218, 0x24000001 },
- { 0x21000219, 0x1400ffff },
- { 0x2100021a, 0x24000001 },
- { 0x2100021b, 0x1400ffff },
- { 0x2100021c, 0x24000001 },
- { 0x2100021d, 0x1400ffff },
- { 0x2100021e, 0x24000001 },
- { 0x2100021f, 0x1400ffff },
- { 0x21000220, 0x2400ff7e },
- { 0x21000221, 0x14000000 },
- { 0x21000222, 0x24000001 },
- { 0x21000223, 0x1400ffff },
- { 0x21000224, 0x24000001 },
- { 0x21000225, 0x1400ffff },
- { 0x21000226, 0x24000001 },
- { 0x21000227, 0x1400ffff },
- { 0x21000228, 0x24000001 },
- { 0x21000229, 0x1400ffff },
- { 0x2100022a, 0x24000001 },
- { 0x2100022b, 0x1400ffff },
- { 0x2100022c, 0x24000001 },
- { 0x2100022d, 0x1400ffff },
- { 0x2100022e, 0x24000001 },
- { 0x2100022f, 0x1400ffff },
- { 0x21000230, 0x24000001 },
- { 0x21000231, 0x1400ffff },
- { 0x21000232, 0x24000001 },
- { 0x21000233, 0x1400ffff },
- { 0x21800234, 0x14000005 },
- { 0x2100023a, 0x24000000 },
- { 0x2100023b, 0x24000001 },
- { 0x2100023c, 0x1400ffff },
- { 0x2100023d, 0x2400ff5d },
- { 0x2100023e, 0x24000000 },
- { 0x2180023f, 0x14000001 },
- { 0x21000241, 0x24000053 },
- { 0x21800250, 0x14000002 },
- { 0x21000253, 0x1400ff2e },
- { 0x21000254, 0x1400ff32 },
- { 0x21000255, 0x14000000 },
- { 0x21000256, 0x1400ff33 },
- { 0x21000257, 0x1400ff33 },
- { 0x21000258, 0x14000000 },
- { 0x21000259, 0x1400ff36 },
- { 0x2100025a, 0x14000000 },
- { 0x2100025b, 0x1400ff35 },
- { 0x2180025c, 0x14000003 },
- { 0x21000260, 0x1400ff33 },
- { 0x21800261, 0x14000001 },
- { 0x21000263, 0x1400ff31 },
- { 0x21800264, 0x14000003 },
- { 0x21000268, 0x1400ff2f },
- { 0x21000269, 0x1400ff2d },
- { 0x2180026a, 0x14000004 },
- { 0x2100026f, 0x1400ff2d },
- { 0x21800270, 0x14000001 },
- { 0x21000272, 0x1400ff2b },
- { 0x21800273, 0x14000001 },
- { 0x21000275, 0x1400ff2a },
- { 0x21800276, 0x14000009 },
- { 0x21000280, 0x1400ff26 },
- { 0x21800281, 0x14000001 },
- { 0x21000283, 0x1400ff26 },
- { 0x21800284, 0x14000003 },
- { 0x21000288, 0x1400ff26 },
- { 0x21000289, 0x14000000 },
- { 0x2100028a, 0x1400ff27 },
- { 0x2100028b, 0x1400ff27 },
- { 0x2180028c, 0x14000005 },
- { 0x21000292, 0x1400ff25 },
- { 0x21000293, 0x14000000 },
- { 0x21000294, 0x1400ffad },
- { 0x21800295, 0x1400001a },
- { 0x218002b0, 0x18000011 },
- { 0x098002c2, 0x60000003 },
- { 0x098002c6, 0x1800000b },
- { 0x098002d2, 0x6000000d },
- { 0x218002e0, 0x18000004 },
- { 0x098002e5, 0x60000008 },
- { 0x090002ee, 0x18000000 },
- { 0x098002ef, 0x60000010 },
- { 0x1b800300, 0x30000044 },
- { 0x1b000345, 0x30000054 },
- { 0x1b800346, 0x30000029 },
- { 0x13800374, 0x60000001 },
- { 0x1300037a, 0x18000000 },
- { 0x0900037e, 0x54000000 },
- { 0x13800384, 0x60000001 },
- { 0x13000386, 0x24000026 },
- { 0x09000387, 0x54000000 },
- { 0x13000388, 0x24000025 },
- { 0x13000389, 0x24000025 },
- { 0x1300038a, 0x24000025 },
- { 0x1300038c, 0x24000040 },
- { 0x1300038e, 0x2400003f },
- { 0x1300038f, 0x2400003f },
- { 0x13000390, 0x14000000 },
- { 0x13000391, 0x24000020 },
- { 0x13000392, 0x24000020 },
- { 0x13000393, 0x24000020 },
- { 0x13000394, 0x24000020 },
- { 0x13000395, 0x24000020 },
- { 0x13000396, 0x24000020 },
- { 0x13000397, 0x24000020 },
- { 0x13000398, 0x24000020 },
- { 0x13000399, 0x24000020 },
- { 0x1300039a, 0x24000020 },
- { 0x1300039b, 0x24000020 },
- { 0x1300039c, 0x24000020 },
- { 0x1300039d, 0x24000020 },
- { 0x1300039e, 0x24000020 },
- { 0x1300039f, 0x24000020 },
- { 0x130003a0, 0x24000020 },
- { 0x130003a1, 0x24000020 },
- { 0x130003a3, 0x24000020 },
- { 0x130003a4, 0x24000020 },
- { 0x130003a5, 0x24000020 },
- { 0x130003a6, 0x24000020 },
- { 0x130003a7, 0x24000020 },
- { 0x130003a8, 0x24000020 },
- { 0x130003a9, 0x24000020 },
- { 0x130003aa, 0x24000020 },
- { 0x130003ab, 0x24000020 },
- { 0x130003ac, 0x1400ffda },
- { 0x130003ad, 0x1400ffdb },
- { 0x130003ae, 0x1400ffdb },
- { 0x130003af, 0x1400ffdb },
- { 0x130003b0, 0x14000000 },
- { 0x130003b1, 0x1400ffe0 },
- { 0x130003b2, 0x1400ffe0 },
- { 0x130003b3, 0x1400ffe0 },
- { 0x130003b4, 0x1400ffe0 },
- { 0x130003b5, 0x1400ffe0 },
- { 0x130003b6, 0x1400ffe0 },
- { 0x130003b7, 0x1400ffe0 },
- { 0x130003b8, 0x1400ffe0 },
- { 0x130003b9, 0x1400ffe0 },
- { 0x130003ba, 0x1400ffe0 },
- { 0x130003bb, 0x1400ffe0 },
- { 0x130003bc, 0x1400ffe0 },
- { 0x130003bd, 0x1400ffe0 },
- { 0x130003be, 0x1400ffe0 },
- { 0x130003bf, 0x1400ffe0 },
- { 0x130003c0, 0x1400ffe0 },
- { 0x130003c1, 0x1400ffe0 },
- { 0x130003c2, 0x1400ffe1 },
- { 0x130003c3, 0x1400ffe0 },
- { 0x130003c4, 0x1400ffe0 },
- { 0x130003c5, 0x1400ffe0 },
- { 0x130003c6, 0x1400ffe0 },
- { 0x130003c7, 0x1400ffe0 },
- { 0x130003c8, 0x1400ffe0 },
- { 0x130003c9, 0x1400ffe0 },
- { 0x130003ca, 0x1400ffe0 },
- { 0x130003cb, 0x1400ffe0 },
- { 0x130003cc, 0x1400ffc0 },
- { 0x130003cd, 0x1400ffc1 },
- { 0x130003ce, 0x1400ffc1 },
- { 0x130003d0, 0x1400ffc2 },
- { 0x130003d1, 0x1400ffc7 },
- { 0x138003d2, 0x24000002 },
- { 0x130003d5, 0x1400ffd1 },
- { 0x130003d6, 0x1400ffca },
- { 0x130003d7, 0x14000000 },
- { 0x130003d8, 0x24000001 },
- { 0x130003d9, 0x1400ffff },
- { 0x130003da, 0x24000001 },
- { 0x130003db, 0x1400ffff },
- { 0x130003dc, 0x24000001 },
- { 0x130003dd, 0x1400ffff },
- { 0x130003de, 0x24000001 },
- { 0x130003df, 0x1400ffff },
- { 0x130003e0, 0x24000001 },
- { 0x130003e1, 0x1400ffff },
- { 0x0a0003e2, 0x24000001 },
- { 0x0a0003e3, 0x1400ffff },
- { 0x0a0003e4, 0x24000001 },
- { 0x0a0003e5, 0x1400ffff },
- { 0x0a0003e6, 0x24000001 },
- { 0x0a0003e7, 0x1400ffff },
- { 0x0a0003e8, 0x24000001 },
- { 0x0a0003e9, 0x1400ffff },
- { 0x0a0003ea, 0x24000001 },
- { 0x0a0003eb, 0x1400ffff },
- { 0x0a0003ec, 0x24000001 },
- { 0x0a0003ed, 0x1400ffff },
- { 0x0a0003ee, 0x24000001 },
- { 0x0a0003ef, 0x1400ffff },
- { 0x130003f0, 0x1400ffaa },
- { 0x130003f1, 0x1400ffb0 },
- { 0x130003f2, 0x14000007 },
- { 0x130003f3, 0x14000000 },
- { 0x130003f4, 0x2400ffc4 },
- { 0x130003f5, 0x1400ffa0 },
- { 0x130003f6, 0x64000000 },
- { 0x130003f7, 0x24000001 },
- { 0x130003f8, 0x1400ffff },
- { 0x130003f9, 0x2400fff9 },
- { 0x130003fa, 0x24000001 },
- { 0x130003fb, 0x1400ffff },
- { 0x130003fc, 0x14000000 },
- { 0x138003fd, 0x24000002 },
- { 0x0c000400, 0x24000050 },
- { 0x0c000401, 0x24000050 },
- { 0x0c000402, 0x24000050 },
- { 0x0c000403, 0x24000050 },
- { 0x0c000404, 0x24000050 },
- { 0x0c000405, 0x24000050 },
- { 0x0c000406, 0x24000050 },
- { 0x0c000407, 0x24000050 },
- { 0x0c000408, 0x24000050 },
- { 0x0c000409, 0x24000050 },
- { 0x0c00040a, 0x24000050 },
- { 0x0c00040b, 0x24000050 },
- { 0x0c00040c, 0x24000050 },
- { 0x0c00040d, 0x24000050 },
- { 0x0c00040e, 0x24000050 },
- { 0x0c00040f, 0x24000050 },
- { 0x0c000410, 0x24000020 },
- { 0x0c000411, 0x24000020 },
- { 0x0c000412, 0x24000020 },
- { 0x0c000413, 0x24000020 },
- { 0x0c000414, 0x24000020 },
- { 0x0c000415, 0x24000020 },
- { 0x0c000416, 0x24000020 },
- { 0x0c000417, 0x24000020 },
- { 0x0c000418, 0x24000020 },
- { 0x0c000419, 0x24000020 },
- { 0x0c00041a, 0x24000020 },
- { 0x0c00041b, 0x24000020 },
- { 0x0c00041c, 0x24000020 },
- { 0x0c00041d, 0x24000020 },
- { 0x0c00041e, 0x24000020 },
- { 0x0c00041f, 0x24000020 },
- { 0x0c000420, 0x24000020 },
- { 0x0c000421, 0x24000020 },
- { 0x0c000422, 0x24000020 },
- { 0x0c000423, 0x24000020 },
- { 0x0c000424, 0x24000020 },
- { 0x0c000425, 0x24000020 },
- { 0x0c000426, 0x24000020 },
- { 0x0c000427, 0x24000020 },
- { 0x0c000428, 0x24000020 },
- { 0x0c000429, 0x24000020 },
- { 0x0c00042a, 0x24000020 },
- { 0x0c00042b, 0x24000020 },
- { 0x0c00042c, 0x24000020 },
- { 0x0c00042d, 0x24000020 },
- { 0x0c00042e, 0x24000020 },
- { 0x0c00042f, 0x24000020 },
- { 0x0c000430, 0x1400ffe0 },
- { 0x0c000431, 0x1400ffe0 },
- { 0x0c000432, 0x1400ffe0 },
- { 0x0c000433, 0x1400ffe0 },
- { 0x0c000434, 0x1400ffe0 },
- { 0x0c000435, 0x1400ffe0 },
- { 0x0c000436, 0x1400ffe0 },
- { 0x0c000437, 0x1400ffe0 },
- { 0x0c000438, 0x1400ffe0 },
- { 0x0c000439, 0x1400ffe0 },
- { 0x0c00043a, 0x1400ffe0 },
- { 0x0c00043b, 0x1400ffe0 },
- { 0x0c00043c, 0x1400ffe0 },
- { 0x0c00043d, 0x1400ffe0 },
- { 0x0c00043e, 0x1400ffe0 },
- { 0x0c00043f, 0x1400ffe0 },
- { 0x0c000440, 0x1400ffe0 },
- { 0x0c000441, 0x1400ffe0 },
- { 0x0c000442, 0x1400ffe0 },
- { 0x0c000443, 0x1400ffe0 },
- { 0x0c000444, 0x1400ffe0 },
- { 0x0c000445, 0x1400ffe0 },
- { 0x0c000446, 0x1400ffe0 },
- { 0x0c000447, 0x1400ffe0 },
- { 0x0c000448, 0x1400ffe0 },
- { 0x0c000449, 0x1400ffe0 },
- { 0x0c00044a, 0x1400ffe0 },
- { 0x0c00044b, 0x1400ffe0 },
- { 0x0c00044c, 0x1400ffe0 },
- { 0x0c00044d, 0x1400ffe0 },
- { 0x0c00044e, 0x1400ffe0 },
- { 0x0c00044f, 0x1400ffe0 },
- { 0x0c000450, 0x1400ffb0 },
- { 0x0c000451, 0x1400ffb0 },
- { 0x0c000452, 0x1400ffb0 },
- { 0x0c000453, 0x1400ffb0 },
- { 0x0c000454, 0x1400ffb0 },
- { 0x0c000455, 0x1400ffb0 },
- { 0x0c000456, 0x1400ffb0 },
- { 0x0c000457, 0x1400ffb0 },
- { 0x0c000458, 0x1400ffb0 },
- { 0x0c000459, 0x1400ffb0 },
- { 0x0c00045a, 0x1400ffb0 },
- { 0x0c00045b, 0x1400ffb0 },
- { 0x0c00045c, 0x1400ffb0 },
- { 0x0c00045d, 0x1400ffb0 },
- { 0x0c00045e, 0x1400ffb0 },
- { 0x0c00045f, 0x1400ffb0 },
- { 0x0c000460, 0x24000001 },
- { 0x0c000461, 0x1400ffff },
- { 0x0c000462, 0x24000001 },
- { 0x0c000463, 0x1400ffff },
- { 0x0c000464, 0x24000001 },
- { 0x0c000465, 0x1400ffff },
- { 0x0c000466, 0x24000001 },
- { 0x0c000467, 0x1400ffff },
- { 0x0c000468, 0x24000001 },
- { 0x0c000469, 0x1400ffff },
- { 0x0c00046a, 0x24000001 },
- { 0x0c00046b, 0x1400ffff },
- { 0x0c00046c, 0x24000001 },
- { 0x0c00046d, 0x1400ffff },
- { 0x0c00046e, 0x24000001 },
- { 0x0c00046f, 0x1400ffff },
- { 0x0c000470, 0x24000001 },
- { 0x0c000471, 0x1400ffff },
- { 0x0c000472, 0x24000001 },
- { 0x0c000473, 0x1400ffff },
- { 0x0c000474, 0x24000001 },
- { 0x0c000475, 0x1400ffff },
- { 0x0c000476, 0x24000001 },
- { 0x0c000477, 0x1400ffff },
- { 0x0c000478, 0x24000001 },
- { 0x0c000479, 0x1400ffff },
- { 0x0c00047a, 0x24000001 },
- { 0x0c00047b, 0x1400ffff },
- { 0x0c00047c, 0x24000001 },
- { 0x0c00047d, 0x1400ffff },
- { 0x0c00047e, 0x24000001 },
- { 0x0c00047f, 0x1400ffff },
- { 0x0c000480, 0x24000001 },
- { 0x0c000481, 0x1400ffff },
- { 0x0c000482, 0x68000000 },
- { 0x0c800483, 0x30000003 },
- { 0x0c800488, 0x2c000001 },
- { 0x0c00048a, 0x24000001 },
- { 0x0c00048b, 0x1400ffff },
- { 0x0c00048c, 0x24000001 },
- { 0x0c00048d, 0x1400ffff },
- { 0x0c00048e, 0x24000001 },
- { 0x0c00048f, 0x1400ffff },
- { 0x0c000490, 0x24000001 },
- { 0x0c000491, 0x1400ffff },
- { 0x0c000492, 0x24000001 },
- { 0x0c000493, 0x1400ffff },
- { 0x0c000494, 0x24000001 },
- { 0x0c000495, 0x1400ffff },
- { 0x0c000496, 0x24000001 },
- { 0x0c000497, 0x1400ffff },
- { 0x0c000498, 0x24000001 },
- { 0x0c000499, 0x1400ffff },
- { 0x0c00049a, 0x24000001 },
- { 0x0c00049b, 0x1400ffff },
- { 0x0c00049c, 0x24000001 },
- { 0x0c00049d, 0x1400ffff },
- { 0x0c00049e, 0x24000001 },
- { 0x0c00049f, 0x1400ffff },
- { 0x0c0004a0, 0x24000001 },
- { 0x0c0004a1, 0x1400ffff },
- { 0x0c0004a2, 0x24000001 },
- { 0x0c0004a3, 0x1400ffff },
- { 0x0c0004a4, 0x24000001 },
- { 0x0c0004a5, 0x1400ffff },
- { 0x0c0004a6, 0x24000001 },
- { 0x0c0004a7, 0x1400ffff },
- { 0x0c0004a8, 0x24000001 },
- { 0x0c0004a9, 0x1400ffff },
- { 0x0c0004aa, 0x24000001 },
- { 0x0c0004ab, 0x1400ffff },
- { 0x0c0004ac, 0x24000001 },
- { 0x0c0004ad, 0x1400ffff },
- { 0x0c0004ae, 0x24000001 },
- { 0x0c0004af, 0x1400ffff },
- { 0x0c0004b0, 0x24000001 },
- { 0x0c0004b1, 0x1400ffff },
- { 0x0c0004b2, 0x24000001 },
- { 0x0c0004b3, 0x1400ffff },
- { 0x0c0004b4, 0x24000001 },
- { 0x0c0004b5, 0x1400ffff },
- { 0x0c0004b6, 0x24000001 },
- { 0x0c0004b7, 0x1400ffff },
- { 0x0c0004b8, 0x24000001 },
- { 0x0c0004b9, 0x1400ffff },
- { 0x0c0004ba, 0x24000001 },
- { 0x0c0004bb, 0x1400ffff },
- { 0x0c0004bc, 0x24000001 },
- { 0x0c0004bd, 0x1400ffff },
- { 0x0c0004be, 0x24000001 },
- { 0x0c0004bf, 0x1400ffff },
- { 0x0c0004c0, 0x24000000 },
- { 0x0c0004c1, 0x24000001 },
- { 0x0c0004c2, 0x1400ffff },
- { 0x0c0004c3, 0x24000001 },
- { 0x0c0004c4, 0x1400ffff },
- { 0x0c0004c5, 0x24000001 },
- { 0x0c0004c6, 0x1400ffff },
- { 0x0c0004c7, 0x24000001 },
- { 0x0c0004c8, 0x1400ffff },
- { 0x0c0004c9, 0x24000001 },
- { 0x0c0004ca, 0x1400ffff },
- { 0x0c0004cb, 0x24000001 },
- { 0x0c0004cc, 0x1400ffff },
- { 0x0c0004cd, 0x24000001 },
- { 0x0c0004ce, 0x1400ffff },
- { 0x0c0004d0, 0x24000001 },
- { 0x0c0004d1, 0x1400ffff },
- { 0x0c0004d2, 0x24000001 },
- { 0x0c0004d3, 0x1400ffff },
- { 0x0c0004d4, 0x24000001 },
- { 0x0c0004d5, 0x1400ffff },
- { 0x0c0004d6, 0x24000001 },
- { 0x0c0004d7, 0x1400ffff },
- { 0x0c0004d8, 0x24000001 },
- { 0x0c0004d9, 0x1400ffff },
- { 0x0c0004da, 0x24000001 },
- { 0x0c0004db, 0x1400ffff },
- { 0x0c0004dc, 0x24000001 },
- { 0x0c0004dd, 0x1400ffff },
- { 0x0c0004de, 0x24000001 },
- { 0x0c0004df, 0x1400ffff },
- { 0x0c0004e0, 0x24000001 },
- { 0x0c0004e1, 0x1400ffff },
- { 0x0c0004e2, 0x24000001 },
- { 0x0c0004e3, 0x1400ffff },
- { 0x0c0004e4, 0x24000001 },
- { 0x0c0004e5, 0x1400ffff },
- { 0x0c0004e6, 0x24000001 },
- { 0x0c0004e7, 0x1400ffff },
- { 0x0c0004e8, 0x24000001 },
- { 0x0c0004e9, 0x1400ffff },
- { 0x0c0004ea, 0x24000001 },
- { 0x0c0004eb, 0x1400ffff },
- { 0x0c0004ec, 0x24000001 },
- { 0x0c0004ed, 0x1400ffff },
- { 0x0c0004ee, 0x24000001 },
- { 0x0c0004ef, 0x1400ffff },
- { 0x0c0004f0, 0x24000001 },
- { 0x0c0004f1, 0x1400ffff },
- { 0x0c0004f2, 0x24000001 },
- { 0x0c0004f3, 0x1400ffff },
- { 0x0c0004f4, 0x24000001 },
- { 0x0c0004f5, 0x1400ffff },
- { 0x0c0004f6, 0x24000001 },
- { 0x0c0004f7, 0x1400ffff },
- { 0x0c0004f8, 0x24000001 },
- { 0x0c0004f9, 0x1400ffff },
- { 0x0c000500, 0x24000001 },
- { 0x0c000501, 0x1400ffff },
- { 0x0c000502, 0x24000001 },
- { 0x0c000503, 0x1400ffff },
- { 0x0c000504, 0x24000001 },
- { 0x0c000505, 0x1400ffff },
- { 0x0c000506, 0x24000001 },
- { 0x0c000507, 0x1400ffff },
- { 0x0c000508, 0x24000001 },
- { 0x0c000509, 0x1400ffff },
- { 0x0c00050a, 0x24000001 },
- { 0x0c00050b, 0x1400ffff },
- { 0x0c00050c, 0x24000001 },
- { 0x0c00050d, 0x1400ffff },
- { 0x0c00050e, 0x24000001 },
- { 0x0c00050f, 0x1400ffff },
- { 0x01000531, 0x24000030 },
- { 0x01000532, 0x24000030 },
- { 0x01000533, 0x24000030 },
- { 0x01000534, 0x24000030 },
- { 0x01000535, 0x24000030 },
- { 0x01000536, 0x24000030 },
- { 0x01000537, 0x24000030 },
- { 0x01000538, 0x24000030 },
- { 0x01000539, 0x24000030 },
- { 0x0100053a, 0x24000030 },
- { 0x0100053b, 0x24000030 },
- { 0x0100053c, 0x24000030 },
- { 0x0100053d, 0x24000030 },
- { 0x0100053e, 0x24000030 },
- { 0x0100053f, 0x24000030 },
- { 0x01000540, 0x24000030 },
- { 0x01000541, 0x24000030 },
- { 0x01000542, 0x24000030 },
- { 0x01000543, 0x24000030 },
- { 0x01000544, 0x24000030 },
- { 0x01000545, 0x24000030 },
- { 0x01000546, 0x24000030 },
- { 0x01000547, 0x24000030 },
- { 0x01000548, 0x24000030 },
- { 0x01000549, 0x24000030 },
- { 0x0100054a, 0x24000030 },
- { 0x0100054b, 0x24000030 },
- { 0x0100054c, 0x24000030 },
- { 0x0100054d, 0x24000030 },
- { 0x0100054e, 0x24000030 },
- { 0x0100054f, 0x24000030 },
- { 0x01000550, 0x24000030 },
- { 0x01000551, 0x24000030 },
- { 0x01000552, 0x24000030 },
- { 0x01000553, 0x24000030 },
- { 0x01000554, 0x24000030 },
- { 0x01000555, 0x24000030 },
- { 0x01000556, 0x24000030 },
- { 0x01000559, 0x18000000 },
- { 0x0180055a, 0x54000005 },
- { 0x01000561, 0x1400ffd0 },
- { 0x01000562, 0x1400ffd0 },
- { 0x01000563, 0x1400ffd0 },
- { 0x01000564, 0x1400ffd0 },
- { 0x01000565, 0x1400ffd0 },
- { 0x01000566, 0x1400ffd0 },
- { 0x01000567, 0x1400ffd0 },
- { 0x01000568, 0x1400ffd0 },
- { 0x01000569, 0x1400ffd0 },
- { 0x0100056a, 0x1400ffd0 },
- { 0x0100056b, 0x1400ffd0 },
- { 0x0100056c, 0x1400ffd0 },
- { 0x0100056d, 0x1400ffd0 },
- { 0x0100056e, 0x1400ffd0 },
- { 0x0100056f, 0x1400ffd0 },
- { 0x01000570, 0x1400ffd0 },
- { 0x01000571, 0x1400ffd0 },
- { 0x01000572, 0x1400ffd0 },
- { 0x01000573, 0x1400ffd0 },
- { 0x01000574, 0x1400ffd0 },
- { 0x01000575, 0x1400ffd0 },
- { 0x01000576, 0x1400ffd0 },
- { 0x01000577, 0x1400ffd0 },
- { 0x01000578, 0x1400ffd0 },
- { 0x01000579, 0x1400ffd0 },
- { 0x0100057a, 0x1400ffd0 },
- { 0x0100057b, 0x1400ffd0 },
- { 0x0100057c, 0x1400ffd0 },
- { 0x0100057d, 0x1400ffd0 },
- { 0x0100057e, 0x1400ffd0 },
- { 0x0100057f, 0x1400ffd0 },
- { 0x01000580, 0x1400ffd0 },
- { 0x01000581, 0x1400ffd0 },
- { 0x01000582, 0x1400ffd0 },
- { 0x01000583, 0x1400ffd0 },
- { 0x01000584, 0x1400ffd0 },
- { 0x01000585, 0x1400ffd0 },
- { 0x01000586, 0x1400ffd0 },
- { 0x01000587, 0x14000000 },
- { 0x09000589, 0x54000000 },
- { 0x0100058a, 0x44000000 },
- { 0x19800591, 0x30000028 },
- { 0x198005bb, 0x30000002 },
- { 0x190005be, 0x54000000 },
- { 0x190005bf, 0x30000000 },
- { 0x190005c0, 0x54000000 },
- { 0x198005c1, 0x30000001 },
- { 0x190005c3, 0x54000000 },
- { 0x198005c4, 0x30000001 },
- { 0x190005c6, 0x54000000 },
- { 0x190005c7, 0x30000000 },
- { 0x198005d0, 0x1c00001a },
- { 0x198005f0, 0x1c000002 },
- { 0x198005f3, 0x54000001 },
- { 0x09800600, 0x04000003 },
- { 0x0000060b, 0x5c000000 },
- { 0x0980060c, 0x54000001 },
- { 0x0080060e, 0x68000001 },
- { 0x00800610, 0x30000005 },
- { 0x0900061b, 0x54000000 },
- { 0x0080061e, 0x54000001 },
- { 0x00800621, 0x1c000019 },
- { 0x09000640, 0x18000000 },
- { 0x00800641, 0x1c000009 },
- { 0x1b80064b, 0x30000013 },
- { 0x09800660, 0x34000009 },
- { 0x0080066a, 0x54000003 },
- { 0x0080066e, 0x1c000001 },
- { 0x1b000670, 0x30000000 },
- { 0x00800671, 0x1c000062 },
- { 0x000006d4, 0x54000000 },
- { 0x000006d5, 0x1c000000 },
- { 0x008006d6, 0x30000006 },
- { 0x090006dd, 0x04000000 },
- { 0x000006de, 0x2c000000 },
- { 0x008006df, 0x30000005 },
- { 0x008006e5, 0x18000001 },
- { 0x008006e7, 0x30000001 },
- { 0x000006e9, 0x68000000 },
- { 0x008006ea, 0x30000003 },
- { 0x008006ee, 0x1c000001 },
- { 0x008006f0, 0x34000009 },
- { 0x008006fa, 0x1c000002 },
- { 0x008006fd, 0x68000001 },
- { 0x000006ff, 0x1c000000 },
- { 0x31800700, 0x5400000d },
- { 0x3100070f, 0x04000000 },
- { 0x31000710, 0x1c000000 },
- { 0x31000711, 0x30000000 },
- { 0x31800712, 0x1c00001d },
- { 0x31800730, 0x3000001a },
- { 0x3180074d, 0x1c000020 },
- { 0x37800780, 0x1c000025 },
- { 0x378007a6, 0x3000000a },
- { 0x370007b1, 0x1c000000 },
- { 0x0e800901, 0x30000001 },
- { 0x0e000903, 0x28000000 },
- { 0x0e800904, 0x1c000035 },
- { 0x0e00093c, 0x30000000 },
- { 0x0e00093d, 0x1c000000 },
- { 0x0e80093e, 0x28000002 },
- { 0x0e800941, 0x30000007 },
- { 0x0e800949, 0x28000003 },
- { 0x0e00094d, 0x30000000 },
- { 0x0e000950, 0x1c000000 },
- { 0x0e800951, 0x30000003 },
- { 0x0e800958, 0x1c000009 },
- { 0x0e800962, 0x30000001 },
- { 0x09800964, 0x54000001 },
- { 0x0e800966, 0x34000009 },
- { 0x09000970, 0x54000000 },
- { 0x0e00097d, 0x1c000000 },
- { 0x02000981, 0x30000000 },
- { 0x02800982, 0x28000001 },
- { 0x02800985, 0x1c000007 },
- { 0x0280098f, 0x1c000001 },
- { 0x02800993, 0x1c000015 },
- { 0x028009aa, 0x1c000006 },
- { 0x020009b2, 0x1c000000 },
- { 0x028009b6, 0x1c000003 },
- { 0x020009bc, 0x30000000 },
- { 0x020009bd, 0x1c000000 },
- { 0x028009be, 0x28000002 },
- { 0x028009c1, 0x30000003 },
- { 0x028009c7, 0x28000001 },
- { 0x028009cb, 0x28000001 },
- { 0x020009cd, 0x30000000 },
- { 0x020009ce, 0x1c000000 },
- { 0x020009d7, 0x28000000 },
- { 0x028009dc, 0x1c000001 },
- { 0x028009df, 0x1c000002 },
- { 0x028009e2, 0x30000001 },
- { 0x028009e6, 0x34000009 },
- { 0x028009f0, 0x1c000001 },
- { 0x028009f2, 0x5c000001 },
- { 0x028009f4, 0x3c000005 },
- { 0x020009fa, 0x68000000 },
- { 0x15800a01, 0x30000001 },
- { 0x15000a03, 0x28000000 },
- { 0x15800a05, 0x1c000005 },
- { 0x15800a0f, 0x1c000001 },
- { 0x15800a13, 0x1c000015 },
- { 0x15800a2a, 0x1c000006 },
- { 0x15800a32, 0x1c000001 },
- { 0x15800a35, 0x1c000001 },
- { 0x15800a38, 0x1c000001 },
- { 0x15000a3c, 0x30000000 },
- { 0x15800a3e, 0x28000002 },
- { 0x15800a41, 0x30000001 },
- { 0x15800a47, 0x30000001 },
- { 0x15800a4b, 0x30000002 },
- { 0x15800a59, 0x1c000003 },
- { 0x15000a5e, 0x1c000000 },
- { 0x15800a66, 0x34000009 },
- { 0x15800a70, 0x30000001 },
- { 0x15800a72, 0x1c000002 },
- { 0x14800a81, 0x30000001 },
- { 0x14000a83, 0x28000000 },
- { 0x14800a85, 0x1c000008 },
- { 0x14800a8f, 0x1c000002 },
- { 0x14800a93, 0x1c000015 },
- { 0x14800aaa, 0x1c000006 },
- { 0x14800ab2, 0x1c000001 },
- { 0x14800ab5, 0x1c000004 },
- { 0x14000abc, 0x30000000 },
- { 0x14000abd, 0x1c000000 },
- { 0x14800abe, 0x28000002 },
- { 0x14800ac1, 0x30000004 },
- { 0x14800ac7, 0x30000001 },
- { 0x14000ac9, 0x28000000 },
- { 0x14800acb, 0x28000001 },
- { 0x14000acd, 0x30000000 },
- { 0x14000ad0, 0x1c000000 },
- { 0x14800ae0, 0x1c000001 },
- { 0x14800ae2, 0x30000001 },
- { 0x14800ae6, 0x34000009 },
- { 0x14000af1, 0x5c000000 },
- { 0x2b000b01, 0x30000000 },
- { 0x2b800b02, 0x28000001 },
- { 0x2b800b05, 0x1c000007 },
- { 0x2b800b0f, 0x1c000001 },
- { 0x2b800b13, 0x1c000015 },
- { 0x2b800b2a, 0x1c000006 },
- { 0x2b800b32, 0x1c000001 },
- { 0x2b800b35, 0x1c000004 },
- { 0x2b000b3c, 0x30000000 },
- { 0x2b000b3d, 0x1c000000 },
- { 0x2b000b3e, 0x28000000 },
- { 0x2b000b3f, 0x30000000 },
- { 0x2b000b40, 0x28000000 },
- { 0x2b800b41, 0x30000002 },
- { 0x2b800b47, 0x28000001 },
- { 0x2b800b4b, 0x28000001 },
- { 0x2b000b4d, 0x30000000 },
- { 0x2b000b56, 0x30000000 },
- { 0x2b000b57, 0x28000000 },
- { 0x2b800b5c, 0x1c000001 },
- { 0x2b800b5f, 0x1c000002 },
- { 0x2b800b66, 0x34000009 },
- { 0x2b000b70, 0x68000000 },
- { 0x2b000b71, 0x1c000000 },
- { 0x35000b82, 0x30000000 },
- { 0x35000b83, 0x1c000000 },
- { 0x35800b85, 0x1c000005 },
- { 0x35800b8e, 0x1c000002 },
- { 0x35800b92, 0x1c000003 },
- { 0x35800b99, 0x1c000001 },
- { 0x35000b9c, 0x1c000000 },
- { 0x35800b9e, 0x1c000001 },
- { 0x35800ba3, 0x1c000001 },
- { 0x35800ba8, 0x1c000002 },
- { 0x35800bae, 0x1c00000b },
- { 0x35800bbe, 0x28000001 },
- { 0x35000bc0, 0x30000000 },
- { 0x35800bc1, 0x28000001 },
- { 0x35800bc6, 0x28000002 },
- { 0x35800bca, 0x28000002 },
- { 0x35000bcd, 0x30000000 },
- { 0x35000bd7, 0x28000000 },
- { 0x35800be6, 0x34000009 },
- { 0x35800bf0, 0x3c000002 },
- { 0x35800bf3, 0x68000005 },
- { 0x35000bf9, 0x5c000000 },
- { 0x35000bfa, 0x68000000 },
- { 0x36800c01, 0x28000002 },
- { 0x36800c05, 0x1c000007 },
- { 0x36800c0e, 0x1c000002 },
- { 0x36800c12, 0x1c000016 },
- { 0x36800c2a, 0x1c000009 },
- { 0x36800c35, 0x1c000004 },
- { 0x36800c3e, 0x30000002 },
- { 0x36800c41, 0x28000003 },
- { 0x36800c46, 0x30000002 },
- { 0x36800c4a, 0x30000003 },
- { 0x36800c55, 0x30000001 },
- { 0x36800c60, 0x1c000001 },
- { 0x36800c66, 0x34000009 },
- { 0x1c800c82, 0x28000001 },
- { 0x1c800c85, 0x1c000007 },
- { 0x1c800c8e, 0x1c000002 },
- { 0x1c800c92, 0x1c000016 },
- { 0x1c800caa, 0x1c000009 },
- { 0x1c800cb5, 0x1c000004 },
- { 0x1c000cbc, 0x30000000 },
- { 0x1c000cbd, 0x1c000000 },
- { 0x1c000cbe, 0x28000000 },
- { 0x1c000cbf, 0x30000000 },
- { 0x1c800cc0, 0x28000004 },
- { 0x1c000cc6, 0x30000000 },
- { 0x1c800cc7, 0x28000001 },
- { 0x1c800cca, 0x28000001 },
- { 0x1c800ccc, 0x30000001 },
- { 0x1c800cd5, 0x28000001 },
- { 0x1c000cde, 0x1c000000 },
- { 0x1c800ce0, 0x1c000001 },
- { 0x1c800ce6, 0x34000009 },
- { 0x24800d02, 0x28000001 },
- { 0x24800d05, 0x1c000007 },
- { 0x24800d0e, 0x1c000002 },
- { 0x24800d12, 0x1c000016 },
- { 0x24800d2a, 0x1c00000f },
- { 0x24800d3e, 0x28000002 },
- { 0x24800d41, 0x30000002 },
- { 0x24800d46, 0x28000002 },
- { 0x24800d4a, 0x28000002 },
- { 0x24000d4d, 0x30000000 },
- { 0x24000d57, 0x28000000 },
- { 0x24800d60, 0x1c000001 },
- { 0x24800d66, 0x34000009 },
- { 0x2f800d82, 0x28000001 },
- { 0x2f800d85, 0x1c000011 },
- { 0x2f800d9a, 0x1c000017 },
- { 0x2f800db3, 0x1c000008 },
- { 0x2f000dbd, 0x1c000000 },
- { 0x2f800dc0, 0x1c000006 },
- { 0x2f000dca, 0x30000000 },
- { 0x2f800dcf, 0x28000002 },
- { 0x2f800dd2, 0x30000002 },
- { 0x2f000dd6, 0x30000000 },
- { 0x2f800dd8, 0x28000007 },
- { 0x2f800df2, 0x28000001 },
- { 0x2f000df4, 0x54000000 },
- { 0x38800e01, 0x1c00002f },
- { 0x38000e31, 0x30000000 },
- { 0x38800e32, 0x1c000001 },
- { 0x38800e34, 0x30000006 },
- { 0x09000e3f, 0x5c000000 },
- { 0x38800e40, 0x1c000005 },
- { 0x38000e46, 0x18000000 },
- { 0x38800e47, 0x30000007 },
- { 0x38000e4f, 0x54000000 },
- { 0x38800e50, 0x34000009 },
- { 0x38800e5a, 0x54000001 },
- { 0x20800e81, 0x1c000001 },
- { 0x20000e84, 0x1c000000 },
- { 0x20800e87, 0x1c000001 },
- { 0x20000e8a, 0x1c000000 },
- { 0x20000e8d, 0x1c000000 },
- { 0x20800e94, 0x1c000003 },
- { 0x20800e99, 0x1c000006 },
- { 0x20800ea1, 0x1c000002 },
- { 0x20000ea5, 0x1c000000 },
- { 0x20000ea7, 0x1c000000 },
- { 0x20800eaa, 0x1c000001 },
- { 0x20800ead, 0x1c000003 },
- { 0x20000eb1, 0x30000000 },
- { 0x20800eb2, 0x1c000001 },
- { 0x20800eb4, 0x30000005 },
- { 0x20800ebb, 0x30000001 },
- { 0x20000ebd, 0x1c000000 },
- { 0x20800ec0, 0x1c000004 },
- { 0x20000ec6, 0x18000000 },
- { 0x20800ec8, 0x30000005 },
- { 0x20800ed0, 0x34000009 },
- { 0x20800edc, 0x1c000001 },
- { 0x39000f00, 0x1c000000 },
- { 0x39800f01, 0x68000002 },
- { 0x39800f04, 0x5400000e },
- { 0x39800f13, 0x68000004 },
- { 0x39800f18, 0x30000001 },
- { 0x39800f1a, 0x68000005 },
- { 0x39800f20, 0x34000009 },
- { 0x39800f2a, 0x3c000009 },
- { 0x39000f34, 0x68000000 },
- { 0x39000f35, 0x30000000 },
- { 0x39000f36, 0x68000000 },
- { 0x39000f37, 0x30000000 },
- { 0x39000f38, 0x68000000 },
- { 0x39000f39, 0x30000000 },
- { 0x39000f3a, 0x58000000 },
- { 0x39000f3b, 0x48000000 },
- { 0x39000f3c, 0x58000000 },
- { 0x39000f3d, 0x48000000 },
- { 0x39800f3e, 0x28000001 },
- { 0x39800f40, 0x1c000007 },
- { 0x39800f49, 0x1c000021 },
- { 0x39800f71, 0x3000000d },
- { 0x39000f7f, 0x28000000 },
- { 0x39800f80, 0x30000004 },
- { 0x39000f85, 0x54000000 },
- { 0x39800f86, 0x30000001 },
- { 0x39800f88, 0x1c000003 },
- { 0x39800f90, 0x30000007 },
- { 0x39800f99, 0x30000023 },
- { 0x39800fbe, 0x68000007 },
- { 0x39000fc6, 0x30000000 },
- { 0x39800fc7, 0x68000005 },
- { 0x39000fcf, 0x68000000 },
- { 0x39800fd0, 0x54000001 },
- { 0x26801000, 0x1c000021 },
- { 0x26801023, 0x1c000004 },
- { 0x26801029, 0x1c000001 },
- { 0x2600102c, 0x28000000 },
- { 0x2680102d, 0x30000003 },
- { 0x26001031, 0x28000000 },
- { 0x26001032, 0x30000000 },
- { 0x26801036, 0x30000001 },
- { 0x26001038, 0x28000000 },
- { 0x26001039, 0x30000000 },
- { 0x26801040, 0x34000009 },
- { 0x2680104a, 0x54000005 },
- { 0x26801050, 0x1c000005 },
- { 0x26801056, 0x28000001 },
- { 0x26801058, 0x30000001 },
- { 0x100010a0, 0x24001c60 },
- { 0x100010a1, 0x24001c60 },
- { 0x100010a2, 0x24001c60 },
- { 0x100010a3, 0x24001c60 },
- { 0x100010a4, 0x24001c60 },
- { 0x100010a5, 0x24001c60 },
- { 0x100010a6, 0x24001c60 },
- { 0x100010a7, 0x24001c60 },
- { 0x100010a8, 0x24001c60 },
- { 0x100010a9, 0x24001c60 },
- { 0x100010aa, 0x24001c60 },
- { 0x100010ab, 0x24001c60 },
- { 0x100010ac, 0x24001c60 },
- { 0x100010ad, 0x24001c60 },
- { 0x100010ae, 0x24001c60 },
- { 0x100010af, 0x24001c60 },
- { 0x100010b0, 0x24001c60 },
- { 0x100010b1, 0x24001c60 },
- { 0x100010b2, 0x24001c60 },
- { 0x100010b3, 0x24001c60 },
- { 0x100010b4, 0x24001c60 },
- { 0x100010b5, 0x24001c60 },
- { 0x100010b6, 0x24001c60 },
- { 0x100010b7, 0x24001c60 },
- { 0x100010b8, 0x24001c60 },
- { 0x100010b9, 0x24001c60 },
- { 0x100010ba, 0x24001c60 },
- { 0x100010bb, 0x24001c60 },
- { 0x100010bc, 0x24001c60 },
- { 0x100010bd, 0x24001c60 },
- { 0x100010be, 0x24001c60 },
- { 0x100010bf, 0x24001c60 },
- { 0x100010c0, 0x24001c60 },
- { 0x100010c1, 0x24001c60 },
- { 0x100010c2, 0x24001c60 },
- { 0x100010c3, 0x24001c60 },
- { 0x100010c4, 0x24001c60 },
- { 0x100010c5, 0x24001c60 },
- { 0x108010d0, 0x1c00002a },
- { 0x090010fb, 0x54000000 },
- { 0x100010fc, 0x18000000 },
- { 0x17801100, 0x1c000059 },
- { 0x1780115f, 0x1c000043 },
- { 0x178011a8, 0x1c000051 },
- { 0x0f801200, 0x1c000048 },
- { 0x0f80124a, 0x1c000003 },
- { 0x0f801250, 0x1c000006 },
- { 0x0f001258, 0x1c000000 },
- { 0x0f80125a, 0x1c000003 },
- { 0x0f801260, 0x1c000028 },
- { 0x0f80128a, 0x1c000003 },
- { 0x0f801290, 0x1c000020 },
- { 0x0f8012b2, 0x1c000003 },
- { 0x0f8012b8, 0x1c000006 },
- { 0x0f0012c0, 0x1c000000 },
- { 0x0f8012c2, 0x1c000003 },
- { 0x0f8012c8, 0x1c00000e },
- { 0x0f8012d8, 0x1c000038 },
- { 0x0f801312, 0x1c000003 },
- { 0x0f801318, 0x1c000042 },
- { 0x0f00135f, 0x30000000 },
- { 0x0f001360, 0x68000000 },
- { 0x0f801361, 0x54000007 },
- { 0x0f801369, 0x3c000013 },
- { 0x0f801380, 0x1c00000f },
- { 0x0f801390, 0x68000009 },
- { 0x088013a0, 0x1c000054 },
- { 0x07801401, 0x1c00026b },
- { 0x0780166d, 0x54000001 },
- { 0x0780166f, 0x1c000007 },
- { 0x28001680, 0x74000000 },
- { 0x28801681, 0x1c000019 },
- { 0x2800169b, 0x58000000 },
- { 0x2800169c, 0x48000000 },
- { 0x2d8016a0, 0x1c00004a },
- { 0x098016eb, 0x54000002 },
- { 0x2d8016ee, 0x38000002 },
- { 0x32801700, 0x1c00000c },
- { 0x3280170e, 0x1c000003 },
- { 0x32801712, 0x30000002 },
- { 0x18801720, 0x1c000011 },
- { 0x18801732, 0x30000002 },
- { 0x09801735, 0x54000001 },
- { 0x06801740, 0x1c000011 },
- { 0x06801752, 0x30000001 },
- { 0x33801760, 0x1c00000c },
- { 0x3380176e, 0x1c000002 },
- { 0x33801772, 0x30000001 },
- { 0x1f801780, 0x1c000033 },
- { 0x1f8017b4, 0x04000001 },
- { 0x1f0017b6, 0x28000000 },
- { 0x1f8017b7, 0x30000006 },
- { 0x1f8017be, 0x28000007 },
- { 0x1f0017c6, 0x30000000 },
- { 0x1f8017c7, 0x28000001 },
- { 0x1f8017c9, 0x3000000a },
- { 0x1f8017d4, 0x54000002 },
- { 0x1f0017d7, 0x18000000 },
- { 0x1f8017d8, 0x54000002 },
- { 0x1f0017db, 0x5c000000 },
- { 0x1f0017dc, 0x1c000000 },
- { 0x1f0017dd, 0x30000000 },
- { 0x1f8017e0, 0x34000009 },
- { 0x1f8017f0, 0x3c000009 },
- { 0x25801800, 0x54000005 },
- { 0x25001806, 0x44000000 },
- { 0x25801807, 0x54000003 },
- { 0x2580180b, 0x30000002 },
- { 0x2500180e, 0x74000000 },
- { 0x25801810, 0x34000009 },
- { 0x25801820, 0x1c000022 },
- { 0x25001843, 0x18000000 },
- { 0x25801844, 0x1c000033 },
- { 0x25801880, 0x1c000028 },
- { 0x250018a9, 0x30000000 },
- { 0x22801900, 0x1c00001c },
- { 0x22801920, 0x30000002 },
- { 0x22801923, 0x28000003 },
- { 0x22801927, 0x30000001 },
- { 0x22801929, 0x28000002 },
- { 0x22801930, 0x28000001 },
- { 0x22001932, 0x30000000 },
- { 0x22801933, 0x28000005 },
- { 0x22801939, 0x30000002 },
- { 0x22001940, 0x68000000 },
- { 0x22801944, 0x54000001 },
- { 0x22801946, 0x34000009 },
- { 0x34801950, 0x1c00001d },
- { 0x34801970, 0x1c000004 },
- { 0x27801980, 0x1c000029 },
- { 0x278019b0, 0x28000010 },
- { 0x278019c1, 0x1c000006 },
- { 0x278019c8, 0x28000001 },
- { 0x278019d0, 0x34000009 },
- { 0x278019de, 0x54000001 },
- { 0x1f8019e0, 0x6800001f },
- { 0x05801a00, 0x1c000016 },
- { 0x05801a17, 0x30000001 },
- { 0x05801a19, 0x28000002 },
- { 0x05801a1e, 0x54000001 },
- { 0x21801d00, 0x1400002b },
- { 0x21801d2c, 0x18000035 },
- { 0x21801d62, 0x14000015 },
- { 0x0c001d78, 0x18000000 },
- { 0x21801d79, 0x14000021 },
- { 0x21801d9b, 0x18000024 },
- { 0x1b801dc0, 0x30000003 },
- { 0x21001e00, 0x24000001 },
- { 0x21001e01, 0x1400ffff },
- { 0x21001e02, 0x24000001 },
- { 0x21001e03, 0x1400ffff },
- { 0x21001e04, 0x24000001 },
- { 0x21001e05, 0x1400ffff },
- { 0x21001e06, 0x24000001 },
- { 0x21001e07, 0x1400ffff },
- { 0x21001e08, 0x24000001 },
- { 0x21001e09, 0x1400ffff },
- { 0x21001e0a, 0x24000001 },
- { 0x21001e0b, 0x1400ffff },
- { 0x21001e0c, 0x24000001 },
- { 0x21001e0d, 0x1400ffff },
- { 0x21001e0e, 0x24000001 },
- { 0x21001e0f, 0x1400ffff },
- { 0x21001e10, 0x24000001 },
- { 0x21001e11, 0x1400ffff },
- { 0x21001e12, 0x24000001 },
- { 0x21001e13, 0x1400ffff },
- { 0x21001e14, 0x24000001 },
- { 0x21001e15, 0x1400ffff },
- { 0x21001e16, 0x24000001 },
- { 0x21001e17, 0x1400ffff },
- { 0x21001e18, 0x24000001 },
- { 0x21001e19, 0x1400ffff },
- { 0x21001e1a, 0x24000001 },
- { 0x21001e1b, 0x1400ffff },
- { 0x21001e1c, 0x24000001 },
- { 0x21001e1d, 0x1400ffff },
- { 0x21001e1e, 0x24000001 },
- { 0x21001e1f, 0x1400ffff },
- { 0x21001e20, 0x24000001 },
- { 0x21001e21, 0x1400ffff },
- { 0x21001e22, 0x24000001 },
- { 0x21001e23, 0x1400ffff },
- { 0x21001e24, 0x24000001 },
- { 0x21001e25, 0x1400ffff },
- { 0x21001e26, 0x24000001 },
- { 0x21001e27, 0x1400ffff },
- { 0x21001e28, 0x24000001 },
- { 0x21001e29, 0x1400ffff },
- { 0x21001e2a, 0x24000001 },
- { 0x21001e2b, 0x1400ffff },
- { 0x21001e2c, 0x24000001 },
- { 0x21001e2d, 0x1400ffff },
- { 0x21001e2e, 0x24000001 },
- { 0x21001e2f, 0x1400ffff },
- { 0x21001e30, 0x24000001 },
- { 0x21001e31, 0x1400ffff },
- { 0x21001e32, 0x24000001 },
- { 0x21001e33, 0x1400ffff },
- { 0x21001e34, 0x24000001 },
- { 0x21001e35, 0x1400ffff },
- { 0x21001e36, 0x24000001 },
- { 0x21001e37, 0x1400ffff },
- { 0x21001e38, 0x24000001 },
- { 0x21001e39, 0x1400ffff },
- { 0x21001e3a, 0x24000001 },
- { 0x21001e3b, 0x1400ffff },
- { 0x21001e3c, 0x24000001 },
- { 0x21001e3d, 0x1400ffff },
- { 0x21001e3e, 0x24000001 },
- { 0x21001e3f, 0x1400ffff },
- { 0x21001e40, 0x24000001 },
- { 0x21001e41, 0x1400ffff },
- { 0x21001e42, 0x24000001 },
- { 0x21001e43, 0x1400ffff },
- { 0x21001e44, 0x24000001 },
- { 0x21001e45, 0x1400ffff },
- { 0x21001e46, 0x24000001 },
- { 0x21001e47, 0x1400ffff },
- { 0x21001e48, 0x24000001 },
- { 0x21001e49, 0x1400ffff },
- { 0x21001e4a, 0x24000001 },
- { 0x21001e4b, 0x1400ffff },
- { 0x21001e4c, 0x24000001 },
- { 0x21001e4d, 0x1400ffff },
- { 0x21001e4e, 0x24000001 },
- { 0x21001e4f, 0x1400ffff },
- { 0x21001e50, 0x24000001 },
- { 0x21001e51, 0x1400ffff },
- { 0x21001e52, 0x24000001 },
- { 0x21001e53, 0x1400ffff },
- { 0x21001e54, 0x24000001 },
- { 0x21001e55, 0x1400ffff },
- { 0x21001e56, 0x24000001 },
- { 0x21001e57, 0x1400ffff },
- { 0x21001e58, 0x24000001 },
- { 0x21001e59, 0x1400ffff },
- { 0x21001e5a, 0x24000001 },
- { 0x21001e5b, 0x1400ffff },
- { 0x21001e5c, 0x24000001 },
- { 0x21001e5d, 0x1400ffff },
- { 0x21001e5e, 0x24000001 },
- { 0x21001e5f, 0x1400ffff },
- { 0x21001e60, 0x24000001 },
- { 0x21001e61, 0x1400ffff },
- { 0x21001e62, 0x24000001 },
- { 0x21001e63, 0x1400ffff },
- { 0x21001e64, 0x24000001 },
- { 0x21001e65, 0x1400ffff },
- { 0x21001e66, 0x24000001 },
- { 0x21001e67, 0x1400ffff },
- { 0x21001e68, 0x24000001 },
- { 0x21001e69, 0x1400ffff },
- { 0x21001e6a, 0x24000001 },
- { 0x21001e6b, 0x1400ffff },
- { 0x21001e6c, 0x24000001 },
- { 0x21001e6d, 0x1400ffff },
- { 0x21001e6e, 0x24000001 },
- { 0x21001e6f, 0x1400ffff },
- { 0x21001e70, 0x24000001 },
- { 0x21001e71, 0x1400ffff },
- { 0x21001e72, 0x24000001 },
- { 0x21001e73, 0x1400ffff },
- { 0x21001e74, 0x24000001 },
- { 0x21001e75, 0x1400ffff },
- { 0x21001e76, 0x24000001 },
- { 0x21001e77, 0x1400ffff },
- { 0x21001e78, 0x24000001 },
- { 0x21001e79, 0x1400ffff },
- { 0x21001e7a, 0x24000001 },
- { 0x21001e7b, 0x1400ffff },
- { 0x21001e7c, 0x24000001 },
- { 0x21001e7d, 0x1400ffff },
- { 0x21001e7e, 0x24000001 },
- { 0x21001e7f, 0x1400ffff },
- { 0x21001e80, 0x24000001 },
- { 0x21001e81, 0x1400ffff },
- { 0x21001e82, 0x24000001 },
- { 0x21001e83, 0x1400ffff },
- { 0x21001e84, 0x24000001 },
- { 0x21001e85, 0x1400ffff },
- { 0x21001e86, 0x24000001 },
- { 0x21001e87, 0x1400ffff },
- { 0x21001e88, 0x24000001 },
- { 0x21001e89, 0x1400ffff },
- { 0x21001e8a, 0x24000001 },
- { 0x21001e8b, 0x1400ffff },
- { 0x21001e8c, 0x24000001 },
- { 0x21001e8d, 0x1400ffff },
- { 0x21001e8e, 0x24000001 },
- { 0x21001e8f, 0x1400ffff },
- { 0x21001e90, 0x24000001 },
- { 0x21001e91, 0x1400ffff },
- { 0x21001e92, 0x24000001 },
- { 0x21001e93, 0x1400ffff },
- { 0x21001e94, 0x24000001 },
- { 0x21001e95, 0x1400ffff },
- { 0x21801e96, 0x14000004 },
- { 0x21001e9b, 0x1400ffc5 },
- { 0x21001ea0, 0x24000001 },
- { 0x21001ea1, 0x1400ffff },
- { 0x21001ea2, 0x24000001 },
- { 0x21001ea3, 0x1400ffff },
- { 0x21001ea4, 0x24000001 },
- { 0x21001ea5, 0x1400ffff },
- { 0x21001ea6, 0x24000001 },
- { 0x21001ea7, 0x1400ffff },
- { 0x21001ea8, 0x24000001 },
- { 0x21001ea9, 0x1400ffff },
- { 0x21001eaa, 0x24000001 },
- { 0x21001eab, 0x1400ffff },
- { 0x21001eac, 0x24000001 },
- { 0x21001ead, 0x1400ffff },
- { 0x21001eae, 0x24000001 },
- { 0x21001eaf, 0x1400ffff },
- { 0x21001eb0, 0x24000001 },
- { 0x21001eb1, 0x1400ffff },
- { 0x21001eb2, 0x24000001 },
- { 0x21001eb3, 0x1400ffff },
- { 0x21001eb4, 0x24000001 },
- { 0x21001eb5, 0x1400ffff },
- { 0x21001eb6, 0x24000001 },
- { 0x21001eb7, 0x1400ffff },
- { 0x21001eb8, 0x24000001 },
- { 0x21001eb9, 0x1400ffff },
- { 0x21001eba, 0x24000001 },
- { 0x21001ebb, 0x1400ffff },
- { 0x21001ebc, 0x24000001 },
- { 0x21001ebd, 0x1400ffff },
- { 0x21001ebe, 0x24000001 },
- { 0x21001ebf, 0x1400ffff },
- { 0x21001ec0, 0x24000001 },
- { 0x21001ec1, 0x1400ffff },
- { 0x21001ec2, 0x24000001 },
- { 0x21001ec3, 0x1400ffff },
- { 0x21001ec4, 0x24000001 },
- { 0x21001ec5, 0x1400ffff },
- { 0x21001ec6, 0x24000001 },
- { 0x21001ec7, 0x1400ffff },
- { 0x21001ec8, 0x24000001 },
- { 0x21001ec9, 0x1400ffff },
- { 0x21001eca, 0x24000001 },
- { 0x21001ecb, 0x1400ffff },
- { 0x21001ecc, 0x24000001 },
- { 0x21001ecd, 0x1400ffff },
- { 0x21001ece, 0x24000001 },
- { 0x21001ecf, 0x1400ffff },
- { 0x21001ed0, 0x24000001 },
- { 0x21001ed1, 0x1400ffff },
- { 0x21001ed2, 0x24000001 },
- { 0x21001ed3, 0x1400ffff },
- { 0x21001ed4, 0x24000001 },
- { 0x21001ed5, 0x1400ffff },
- { 0x21001ed6, 0x24000001 },
- { 0x21001ed7, 0x1400ffff },
- { 0x21001ed8, 0x24000001 },
- { 0x21001ed9, 0x1400ffff },
- { 0x21001eda, 0x24000001 },
- { 0x21001edb, 0x1400ffff },
- { 0x21001edc, 0x24000001 },
- { 0x21001edd, 0x1400ffff },
- { 0x21001ede, 0x24000001 },
- { 0x21001edf, 0x1400ffff },
- { 0x21001ee0, 0x24000001 },
- { 0x21001ee1, 0x1400ffff },
- { 0x21001ee2, 0x24000001 },
- { 0x21001ee3, 0x1400ffff },
- { 0x21001ee4, 0x24000001 },
- { 0x21001ee5, 0x1400ffff },
- { 0x21001ee6, 0x24000001 },
- { 0x21001ee7, 0x1400ffff },
- { 0x21001ee8, 0x24000001 },
- { 0x21001ee9, 0x1400ffff },
- { 0x21001eea, 0x24000001 },
- { 0x21001eeb, 0x1400ffff },
- { 0x21001eec, 0x24000001 },
- { 0x21001eed, 0x1400ffff },
- { 0x21001eee, 0x24000001 },
- { 0x21001eef, 0x1400ffff },
- { 0x21001ef0, 0x24000001 },
- { 0x21001ef1, 0x1400ffff },
- { 0x21001ef2, 0x24000001 },
- { 0x21001ef3, 0x1400ffff },
- { 0x21001ef4, 0x24000001 },
- { 0x21001ef5, 0x1400ffff },
- { 0x21001ef6, 0x24000001 },
- { 0x21001ef7, 0x1400ffff },
- { 0x21001ef8, 0x24000001 },
- { 0x21001ef9, 0x1400ffff },
- { 0x13001f00, 0x14000008 },
- { 0x13001f01, 0x14000008 },
- { 0x13001f02, 0x14000008 },
- { 0x13001f03, 0x14000008 },
- { 0x13001f04, 0x14000008 },
- { 0x13001f05, 0x14000008 },
- { 0x13001f06, 0x14000008 },
- { 0x13001f07, 0x14000008 },
- { 0x13001f08, 0x2400fff8 },
- { 0x13001f09, 0x2400fff8 },
- { 0x13001f0a, 0x2400fff8 },
- { 0x13001f0b, 0x2400fff8 },
- { 0x13001f0c, 0x2400fff8 },
- { 0x13001f0d, 0x2400fff8 },
- { 0x13001f0e, 0x2400fff8 },
- { 0x13001f0f, 0x2400fff8 },
- { 0x13001f10, 0x14000008 },
- { 0x13001f11, 0x14000008 },
- { 0x13001f12, 0x14000008 },
- { 0x13001f13, 0x14000008 },
- { 0x13001f14, 0x14000008 },
- { 0x13001f15, 0x14000008 },
- { 0x13001f18, 0x2400fff8 },
- { 0x13001f19, 0x2400fff8 },
- { 0x13001f1a, 0x2400fff8 },
- { 0x13001f1b, 0x2400fff8 },
- { 0x13001f1c, 0x2400fff8 },
- { 0x13001f1d, 0x2400fff8 },
- { 0x13001f20, 0x14000008 },
- { 0x13001f21, 0x14000008 },
- { 0x13001f22, 0x14000008 },
- { 0x13001f23, 0x14000008 },
- { 0x13001f24, 0x14000008 },
- { 0x13001f25, 0x14000008 },
- { 0x13001f26, 0x14000008 },
- { 0x13001f27, 0x14000008 },
- { 0x13001f28, 0x2400fff8 },
- { 0x13001f29, 0x2400fff8 },
- { 0x13001f2a, 0x2400fff8 },
- { 0x13001f2b, 0x2400fff8 },
- { 0x13001f2c, 0x2400fff8 },
- { 0x13001f2d, 0x2400fff8 },
- { 0x13001f2e, 0x2400fff8 },
- { 0x13001f2f, 0x2400fff8 },
- { 0x13001f30, 0x14000008 },
- { 0x13001f31, 0x14000008 },
- { 0x13001f32, 0x14000008 },
- { 0x13001f33, 0x14000008 },
- { 0x13001f34, 0x14000008 },
- { 0x13001f35, 0x14000008 },
- { 0x13001f36, 0x14000008 },
- { 0x13001f37, 0x14000008 },
- { 0x13001f38, 0x2400fff8 },
- { 0x13001f39, 0x2400fff8 },
- { 0x13001f3a, 0x2400fff8 },
- { 0x13001f3b, 0x2400fff8 },
- { 0x13001f3c, 0x2400fff8 },
- { 0x13001f3d, 0x2400fff8 },
- { 0x13001f3e, 0x2400fff8 },
- { 0x13001f3f, 0x2400fff8 },
- { 0x13001f40, 0x14000008 },
- { 0x13001f41, 0x14000008 },
- { 0x13001f42, 0x14000008 },
- { 0x13001f43, 0x14000008 },
- { 0x13001f44, 0x14000008 },
- { 0x13001f45, 0x14000008 },
- { 0x13001f48, 0x2400fff8 },
- { 0x13001f49, 0x2400fff8 },
- { 0x13001f4a, 0x2400fff8 },
- { 0x13001f4b, 0x2400fff8 },
- { 0x13001f4c, 0x2400fff8 },
- { 0x13001f4d, 0x2400fff8 },
- { 0x13001f50, 0x14000000 },
- { 0x13001f51, 0x14000008 },
- { 0x13001f52, 0x14000000 },
- { 0x13001f53, 0x14000008 },
- { 0x13001f54, 0x14000000 },
- { 0x13001f55, 0x14000008 },
- { 0x13001f56, 0x14000000 },
- { 0x13001f57, 0x14000008 },
- { 0x13001f59, 0x2400fff8 },
- { 0x13001f5b, 0x2400fff8 },
- { 0x13001f5d, 0x2400fff8 },
- { 0x13001f5f, 0x2400fff8 },
- { 0x13001f60, 0x14000008 },
- { 0x13001f61, 0x14000008 },
- { 0x13001f62, 0x14000008 },
- { 0x13001f63, 0x14000008 },
- { 0x13001f64, 0x14000008 },
- { 0x13001f65, 0x14000008 },
- { 0x13001f66, 0x14000008 },
- { 0x13001f67, 0x14000008 },
- { 0x13001f68, 0x2400fff8 },
- { 0x13001f69, 0x2400fff8 },
- { 0x13001f6a, 0x2400fff8 },
- { 0x13001f6b, 0x2400fff8 },
- { 0x13001f6c, 0x2400fff8 },
- { 0x13001f6d, 0x2400fff8 },
- { 0x13001f6e, 0x2400fff8 },
- { 0x13001f6f, 0x2400fff8 },
- { 0x13001f70, 0x1400004a },
- { 0x13001f71, 0x1400004a },
- { 0x13001f72, 0x14000056 },
- { 0x13001f73, 0x14000056 },
- { 0x13001f74, 0x14000056 },
- { 0x13001f75, 0x14000056 },
- { 0x13001f76, 0x14000064 },
- { 0x13001f77, 0x14000064 },
- { 0x13001f78, 0x14000080 },
- { 0x13001f79, 0x14000080 },
- { 0x13001f7a, 0x14000070 },
- { 0x13001f7b, 0x14000070 },
- { 0x13001f7c, 0x1400007e },
- { 0x13001f7d, 0x1400007e },
- { 0x13001f80, 0x14000008 },
- { 0x13001f81, 0x14000008 },
- { 0x13001f82, 0x14000008 },
- { 0x13001f83, 0x14000008 },
- { 0x13001f84, 0x14000008 },
- { 0x13001f85, 0x14000008 },
- { 0x13001f86, 0x14000008 },
- { 0x13001f87, 0x14000008 },
- { 0x13001f88, 0x2000fff8 },
- { 0x13001f89, 0x2000fff8 },
- { 0x13001f8a, 0x2000fff8 },
- { 0x13001f8b, 0x2000fff8 },
- { 0x13001f8c, 0x2000fff8 },
- { 0x13001f8d, 0x2000fff8 },
- { 0x13001f8e, 0x2000fff8 },
- { 0x13001f8f, 0x2000fff8 },
- { 0x13001f90, 0x14000008 },
- { 0x13001f91, 0x14000008 },
- { 0x13001f92, 0x14000008 },
- { 0x13001f93, 0x14000008 },
- { 0x13001f94, 0x14000008 },
- { 0x13001f95, 0x14000008 },
- { 0x13001f96, 0x14000008 },
- { 0x13001f97, 0x14000008 },
- { 0x13001f98, 0x2000fff8 },
- { 0x13001f99, 0x2000fff8 },
- { 0x13001f9a, 0x2000fff8 },
- { 0x13001f9b, 0x2000fff8 },
- { 0x13001f9c, 0x2000fff8 },
- { 0x13001f9d, 0x2000fff8 },
- { 0x13001f9e, 0x2000fff8 },
- { 0x13001f9f, 0x2000fff8 },
- { 0x13001fa0, 0x14000008 },
- { 0x13001fa1, 0x14000008 },
- { 0x13001fa2, 0x14000008 },
- { 0x13001fa3, 0x14000008 },
- { 0x13001fa4, 0x14000008 },
- { 0x13001fa5, 0x14000008 },
- { 0x13001fa6, 0x14000008 },
- { 0x13001fa7, 0x14000008 },
- { 0x13001fa8, 0x2000fff8 },
- { 0x13001fa9, 0x2000fff8 },
- { 0x13001faa, 0x2000fff8 },
- { 0x13001fab, 0x2000fff8 },
- { 0x13001fac, 0x2000fff8 },
- { 0x13001fad, 0x2000fff8 },
- { 0x13001fae, 0x2000fff8 },
- { 0x13001faf, 0x2000fff8 },
- { 0x13001fb0, 0x14000008 },
- { 0x13001fb1, 0x14000008 },
- { 0x13001fb2, 0x14000000 },
- { 0x13001fb3, 0x14000009 },
- { 0x13001fb4, 0x14000000 },
- { 0x13801fb6, 0x14000001 },
- { 0x13001fb8, 0x2400fff8 },
- { 0x13001fb9, 0x2400fff8 },
- { 0x13001fba, 0x2400ffb6 },
- { 0x13001fbb, 0x2400ffb6 },
- { 0x13001fbc, 0x2000fff7 },
- { 0x13001fbd, 0x60000000 },
- { 0x13001fbe, 0x1400e3db },
- { 0x13801fbf, 0x60000002 },
- { 0x13001fc2, 0x14000000 },
- { 0x13001fc3, 0x14000009 },
- { 0x13001fc4, 0x14000000 },
- { 0x13801fc6, 0x14000001 },
- { 0x13001fc8, 0x2400ffaa },
- { 0x13001fc9, 0x2400ffaa },
- { 0x13001fca, 0x2400ffaa },
- { 0x13001fcb, 0x2400ffaa },
- { 0x13001fcc, 0x2000fff7 },
- { 0x13801fcd, 0x60000002 },
- { 0x13001fd0, 0x14000008 },
- { 0x13001fd1, 0x14000008 },
- { 0x13801fd2, 0x14000001 },
- { 0x13801fd6, 0x14000001 },
- { 0x13001fd8, 0x2400fff8 },
- { 0x13001fd9, 0x2400fff8 },
- { 0x13001fda, 0x2400ff9c },
- { 0x13001fdb, 0x2400ff9c },
- { 0x13801fdd, 0x60000002 },
- { 0x13001fe0, 0x14000008 },
- { 0x13001fe1, 0x14000008 },
- { 0x13801fe2, 0x14000002 },
- { 0x13001fe5, 0x14000007 },
- { 0x13801fe6, 0x14000001 },
- { 0x13001fe8, 0x2400fff8 },
- { 0x13001fe9, 0x2400fff8 },
- { 0x13001fea, 0x2400ff90 },
- { 0x13001feb, 0x2400ff90 },
- { 0x13001fec, 0x2400fff9 },
- { 0x13801fed, 0x60000002 },
- { 0x13001ff2, 0x14000000 },
- { 0x13001ff3, 0x14000009 },
- { 0x13001ff4, 0x14000000 },
- { 0x13801ff6, 0x14000001 },
- { 0x13001ff8, 0x2400ff80 },
- { 0x13001ff9, 0x2400ff80 },
- { 0x13001ffa, 0x2400ff82 },
- { 0x13001ffb, 0x2400ff82 },
- { 0x13001ffc, 0x2000fff7 },
- { 0x13801ffd, 0x60000001 },
- { 0x09802000, 0x7400000a },
- { 0x0980200b, 0x04000004 },
- { 0x09802010, 0x44000005 },
- { 0x09802016, 0x54000001 },
- { 0x09002018, 0x50000000 },
- { 0x09002019, 0x4c000000 },
- { 0x0900201a, 0x58000000 },
- { 0x0980201b, 0x50000001 },
- { 0x0900201d, 0x4c000000 },
- { 0x0900201e, 0x58000000 },
- { 0x0900201f, 0x50000000 },
- { 0x09802020, 0x54000007 },
- { 0x09002028, 0x6c000000 },
- { 0x09002029, 0x70000000 },
- { 0x0980202a, 0x04000004 },
- { 0x0900202f, 0x74000000 },
- { 0x09802030, 0x54000008 },
- { 0x09002039, 0x50000000 },
- { 0x0900203a, 0x4c000000 },
- { 0x0980203b, 0x54000003 },
- { 0x0980203f, 0x40000001 },
- { 0x09802041, 0x54000002 },
- { 0x09002044, 0x64000000 },
- { 0x09002045, 0x58000000 },
- { 0x09002046, 0x48000000 },
- { 0x09802047, 0x5400000a },
- { 0x09002052, 0x64000000 },
- { 0x09002053, 0x54000000 },
- { 0x09002054, 0x40000000 },
- { 0x09802055, 0x54000009 },
- { 0x0900205f, 0x74000000 },
- { 0x09802060, 0x04000003 },
- { 0x0980206a, 0x04000005 },
- { 0x09002070, 0x3c000000 },
- { 0x21002071, 0x14000000 },
- { 0x09802074, 0x3c000005 },
- { 0x0980207a, 0x64000002 },
- { 0x0900207d, 0x58000000 },
- { 0x0900207e, 0x48000000 },
- { 0x2100207f, 0x14000000 },
- { 0x09802080, 0x3c000009 },
- { 0x0980208a, 0x64000002 },
- { 0x0900208d, 0x58000000 },
- { 0x0900208e, 0x48000000 },
- { 0x21802090, 0x18000004 },
- { 0x098020a0, 0x5c000015 },
- { 0x1b8020d0, 0x3000000c },
- { 0x1b8020dd, 0x2c000003 },
- { 0x1b0020e1, 0x30000000 },
- { 0x1b8020e2, 0x2c000002 },
- { 0x1b8020e5, 0x30000006 },
- { 0x09802100, 0x68000001 },
- { 0x09002102, 0x24000000 },
- { 0x09802103, 0x68000003 },
- { 0x09002107, 0x24000000 },
- { 0x09802108, 0x68000001 },
- { 0x0900210a, 0x14000000 },
- { 0x0980210b, 0x24000002 },
- { 0x0980210e, 0x14000001 },
- { 0x09802110, 0x24000002 },
- { 0x09002113, 0x14000000 },
- { 0x09002114, 0x68000000 },
- { 0x09002115, 0x24000000 },
- { 0x09802116, 0x68000002 },
- { 0x09802119, 0x24000004 },
- { 0x0980211e, 0x68000005 },
- { 0x09002124, 0x24000000 },
- { 0x09002125, 0x68000000 },
- { 0x13002126, 0x2400e2a3 },
- { 0x09002127, 0x68000000 },
- { 0x09002128, 0x24000000 },
- { 0x09002129, 0x68000000 },
- { 0x2100212a, 0x2400df41 },
- { 0x2100212b, 0x2400dfba },
- { 0x0980212c, 0x24000001 },
- { 0x0900212e, 0x68000000 },
- { 0x0900212f, 0x14000000 },
- { 0x09802130, 0x24000001 },
- { 0x09002132, 0x68000000 },
- { 0x09002133, 0x24000000 },
- { 0x09002134, 0x14000000 },
- { 0x09802135, 0x1c000003 },
- { 0x09002139, 0x14000000 },
- { 0x0980213a, 0x68000001 },
- { 0x0980213c, 0x14000001 },
- { 0x0980213e, 0x24000001 },
- { 0x09802140, 0x64000004 },
- { 0x09002145, 0x24000000 },
- { 0x09802146, 0x14000003 },
- { 0x0900214a, 0x68000000 },
- { 0x0900214b, 0x64000000 },
- { 0x0900214c, 0x68000000 },
- { 0x09802153, 0x3c00000c },
- { 0x09002160, 0x38000010 },
- { 0x09002161, 0x38000010 },
- { 0x09002162, 0x38000010 },
- { 0x09002163, 0x38000010 },
- { 0x09002164, 0x38000010 },
- { 0x09002165, 0x38000010 },
- { 0x09002166, 0x38000010 },
- { 0x09002167, 0x38000010 },
- { 0x09002168, 0x38000010 },
- { 0x09002169, 0x38000010 },
- { 0x0900216a, 0x38000010 },
- { 0x0900216b, 0x38000010 },
- { 0x0900216c, 0x38000010 },
- { 0x0900216d, 0x38000010 },
- { 0x0900216e, 0x38000010 },
- { 0x0900216f, 0x38000010 },
- { 0x09002170, 0x3800fff0 },
- { 0x09002171, 0x3800fff0 },
- { 0x09002172, 0x3800fff0 },
- { 0x09002173, 0x3800fff0 },
- { 0x09002174, 0x3800fff0 },
- { 0x09002175, 0x3800fff0 },
- { 0x09002176, 0x3800fff0 },
- { 0x09002177, 0x3800fff0 },
- { 0x09002178, 0x3800fff0 },
- { 0x09002179, 0x3800fff0 },
- { 0x0900217a, 0x3800fff0 },
- { 0x0900217b, 0x3800fff0 },
- { 0x0900217c, 0x3800fff0 },
- { 0x0900217d, 0x3800fff0 },
- { 0x0900217e, 0x3800fff0 },
- { 0x0900217f, 0x3800fff0 },
- { 0x09802180, 0x38000003 },
- { 0x09802190, 0x64000004 },
- { 0x09802195, 0x68000004 },
- { 0x0980219a, 0x64000001 },
- { 0x0980219c, 0x68000003 },
- { 0x090021a0, 0x64000000 },
- { 0x098021a1, 0x68000001 },
- { 0x090021a3, 0x64000000 },
- { 0x098021a4, 0x68000001 },
- { 0x090021a6, 0x64000000 },
- { 0x098021a7, 0x68000006 },
- { 0x090021ae, 0x64000000 },
- { 0x098021af, 0x6800001e },
- { 0x098021ce, 0x64000001 },
- { 0x098021d0, 0x68000001 },
- { 0x090021d2, 0x64000000 },
- { 0x090021d3, 0x68000000 },
- { 0x090021d4, 0x64000000 },
- { 0x098021d5, 0x6800001e },
- { 0x098021f4, 0x6400010b },
- { 0x09802300, 0x68000007 },
- { 0x09802308, 0x64000003 },
- { 0x0980230c, 0x68000013 },
- { 0x09802320, 0x64000001 },
- { 0x09802322, 0x68000006 },
- { 0x09002329, 0x58000000 },
- { 0x0900232a, 0x48000000 },
- { 0x0980232b, 0x68000050 },
- { 0x0900237c, 0x64000000 },
- { 0x0980237d, 0x6800001d },
- { 0x0980239b, 0x64000018 },
- { 0x090023b4, 0x58000000 },
- { 0x090023b5, 0x48000000 },
- { 0x090023b6, 0x54000000 },
- { 0x098023b7, 0x68000024 },
- { 0x09802400, 0x68000026 },
- { 0x09802440, 0x6800000a },
- { 0x09802460, 0x3c00003b },
- { 0x0980249c, 0x68000019 },
- { 0x090024b6, 0x6800001a },
- { 0x090024b7, 0x6800001a },
- { 0x090024b8, 0x6800001a },
- { 0x090024b9, 0x6800001a },
- { 0x090024ba, 0x6800001a },
- { 0x090024bb, 0x6800001a },
- { 0x090024bc, 0x6800001a },
- { 0x090024bd, 0x6800001a },
- { 0x090024be, 0x6800001a },
- { 0x090024bf, 0x6800001a },
- { 0x090024c0, 0x6800001a },
- { 0x090024c1, 0x6800001a },
- { 0x090024c2, 0x6800001a },
- { 0x090024c3, 0x6800001a },
- { 0x090024c4, 0x6800001a },
- { 0x090024c5, 0x6800001a },
- { 0x090024c6, 0x6800001a },
- { 0x090024c7, 0x6800001a },
- { 0x090024c8, 0x6800001a },
- { 0x090024c9, 0x6800001a },
- { 0x090024ca, 0x6800001a },
- { 0x090024cb, 0x6800001a },
- { 0x090024cc, 0x6800001a },
- { 0x090024cd, 0x6800001a },
- { 0x090024ce, 0x6800001a },
- { 0x090024cf, 0x6800001a },
- { 0x090024d0, 0x6800ffe6 },
- { 0x090024d1, 0x6800ffe6 },
- { 0x090024d2, 0x6800ffe6 },
- { 0x090024d3, 0x6800ffe6 },
- { 0x090024d4, 0x6800ffe6 },
- { 0x090024d5, 0x6800ffe6 },
- { 0x090024d6, 0x6800ffe6 },
- { 0x090024d7, 0x6800ffe6 },
- { 0x090024d8, 0x6800ffe6 },
- { 0x090024d9, 0x6800ffe6 },
- { 0x090024da, 0x6800ffe6 },
- { 0x090024db, 0x6800ffe6 },
- { 0x090024dc, 0x6800ffe6 },
- { 0x090024dd, 0x6800ffe6 },
- { 0x090024de, 0x6800ffe6 },
- { 0x090024df, 0x6800ffe6 },
- { 0x090024e0, 0x6800ffe6 },
- { 0x090024e1, 0x6800ffe6 },
- { 0x090024e2, 0x6800ffe6 },
- { 0x090024e3, 0x6800ffe6 },
- { 0x090024e4, 0x6800ffe6 },
- { 0x090024e5, 0x6800ffe6 },
- { 0x090024e6, 0x6800ffe6 },
- { 0x090024e7, 0x6800ffe6 },
- { 0x090024e8, 0x6800ffe6 },
- { 0x090024e9, 0x6800ffe6 },
- { 0x098024ea, 0x3c000015 },
- { 0x09802500, 0x680000b6 },
- { 0x090025b7, 0x64000000 },
- { 0x098025b8, 0x68000008 },
- { 0x090025c1, 0x64000000 },
- { 0x098025c2, 0x68000035 },
- { 0x098025f8, 0x64000007 },
- { 0x09802600, 0x6800006e },
- { 0x0900266f, 0x64000000 },
- { 0x09802670, 0x6800002c },
- { 0x098026a0, 0x68000011 },
- { 0x09802701, 0x68000003 },
- { 0x09802706, 0x68000003 },
- { 0x0980270c, 0x6800001b },
- { 0x09802729, 0x68000022 },
- { 0x0900274d, 0x68000000 },
- { 0x0980274f, 0x68000003 },
- { 0x09002756, 0x68000000 },
- { 0x09802758, 0x68000006 },
- { 0x09802761, 0x68000006 },
- { 0x09002768, 0x58000000 },
- { 0x09002769, 0x48000000 },
- { 0x0900276a, 0x58000000 },
- { 0x0900276b, 0x48000000 },
- { 0x0900276c, 0x58000000 },
- { 0x0900276d, 0x48000000 },
- { 0x0900276e, 0x58000000 },
- { 0x0900276f, 0x48000000 },
- { 0x09002770, 0x58000000 },
- { 0x09002771, 0x48000000 },
- { 0x09002772, 0x58000000 },
- { 0x09002773, 0x48000000 },
- { 0x09002774, 0x58000000 },
- { 0x09002775, 0x48000000 },
- { 0x09802776, 0x3c00001d },
- { 0x09002794, 0x68000000 },
- { 0x09802798, 0x68000017 },
- { 0x098027b1, 0x6800000d },
- { 0x098027c0, 0x64000004 },
- { 0x090027c5, 0x58000000 },
- { 0x090027c6, 0x48000000 },
- { 0x098027d0, 0x64000015 },
- { 0x090027e6, 0x58000000 },
- { 0x090027e7, 0x48000000 },
- { 0x090027e8, 0x58000000 },
- { 0x090027e9, 0x48000000 },
- { 0x090027ea, 0x58000000 },
- { 0x090027eb, 0x48000000 },
- { 0x098027f0, 0x6400000f },
- { 0x04802800, 0x680000ff },
- { 0x09802900, 0x64000082 },
- { 0x09002983, 0x58000000 },
- { 0x09002984, 0x48000000 },
- { 0x09002985, 0x58000000 },
- { 0x09002986, 0x48000000 },
- { 0x09002987, 0x58000000 },
- { 0x09002988, 0x48000000 },
- { 0x09002989, 0x58000000 },
- { 0x0900298a, 0x48000000 },
- { 0x0900298b, 0x58000000 },
- { 0x0900298c, 0x48000000 },
- { 0x0900298d, 0x58000000 },
- { 0x0900298e, 0x48000000 },
- { 0x0900298f, 0x58000000 },
- { 0x09002990, 0x48000000 },
- { 0x09002991, 0x58000000 },
- { 0x09002992, 0x48000000 },
- { 0x09002993, 0x58000000 },
- { 0x09002994, 0x48000000 },
- { 0x09002995, 0x58000000 },
- { 0x09002996, 0x48000000 },
- { 0x09002997, 0x58000000 },
- { 0x09002998, 0x48000000 },
- { 0x09802999, 0x6400003e },
- { 0x090029d8, 0x58000000 },
- { 0x090029d9, 0x48000000 },
- { 0x090029da, 0x58000000 },
- { 0x090029db, 0x48000000 },
- { 0x098029dc, 0x6400001f },
- { 0x090029fc, 0x58000000 },
- { 0x090029fd, 0x48000000 },
- { 0x098029fe, 0x64000101 },
- { 0x09802b00, 0x68000013 },
- { 0x11002c00, 0x24000030 },
- { 0x11002c01, 0x24000030 },
- { 0x11002c02, 0x24000030 },
- { 0x11002c03, 0x24000030 },
- { 0x11002c04, 0x24000030 },
- { 0x11002c05, 0x24000030 },
- { 0x11002c06, 0x24000030 },
- { 0x11002c07, 0x24000030 },
- { 0x11002c08, 0x24000030 },
- { 0x11002c09, 0x24000030 },
- { 0x11002c0a, 0x24000030 },
- { 0x11002c0b, 0x24000030 },
- { 0x11002c0c, 0x24000030 },
- { 0x11002c0d, 0x24000030 },
- { 0x11002c0e, 0x24000030 },
- { 0x11002c0f, 0x24000030 },
- { 0x11002c10, 0x24000030 },
- { 0x11002c11, 0x24000030 },
- { 0x11002c12, 0x24000030 },
- { 0x11002c13, 0x24000030 },
- { 0x11002c14, 0x24000030 },
- { 0x11002c15, 0x24000030 },
- { 0x11002c16, 0x24000030 },
- { 0x11002c17, 0x24000030 },
- { 0x11002c18, 0x24000030 },
- { 0x11002c19, 0x24000030 },
- { 0x11002c1a, 0x24000030 },
- { 0x11002c1b, 0x24000030 },
- { 0x11002c1c, 0x24000030 },
- { 0x11002c1d, 0x24000030 },
- { 0x11002c1e, 0x24000030 },
- { 0x11002c1f, 0x24000030 },
- { 0x11002c20, 0x24000030 },
- { 0x11002c21, 0x24000030 },
- { 0x11002c22, 0x24000030 },
- { 0x11002c23, 0x24000030 },
- { 0x11002c24, 0x24000030 },
- { 0x11002c25, 0x24000030 },
- { 0x11002c26, 0x24000030 },
- { 0x11002c27, 0x24000030 },
- { 0x11002c28, 0x24000030 },
- { 0x11002c29, 0x24000030 },
- { 0x11002c2a, 0x24000030 },
- { 0x11002c2b, 0x24000030 },
- { 0x11002c2c, 0x24000030 },
- { 0x11002c2d, 0x24000030 },
- { 0x11002c2e, 0x24000030 },
- { 0x11002c30, 0x1400ffd0 },
- { 0x11002c31, 0x1400ffd0 },
- { 0x11002c32, 0x1400ffd0 },
- { 0x11002c33, 0x1400ffd0 },
- { 0x11002c34, 0x1400ffd0 },
- { 0x11002c35, 0x1400ffd0 },
- { 0x11002c36, 0x1400ffd0 },
- { 0x11002c37, 0x1400ffd0 },
- { 0x11002c38, 0x1400ffd0 },
- { 0x11002c39, 0x1400ffd0 },
- { 0x11002c3a, 0x1400ffd0 },
- { 0x11002c3b, 0x1400ffd0 },
- { 0x11002c3c, 0x1400ffd0 },
- { 0x11002c3d, 0x1400ffd0 },
- { 0x11002c3e, 0x1400ffd0 },
- { 0x11002c3f, 0x1400ffd0 },
- { 0x11002c40, 0x1400ffd0 },
- { 0x11002c41, 0x1400ffd0 },
- { 0x11002c42, 0x1400ffd0 },
- { 0x11002c43, 0x1400ffd0 },
- { 0x11002c44, 0x1400ffd0 },
- { 0x11002c45, 0x1400ffd0 },
- { 0x11002c46, 0x1400ffd0 },
- { 0x11002c47, 0x1400ffd0 },
- { 0x11002c48, 0x1400ffd0 },
- { 0x11002c49, 0x1400ffd0 },
- { 0x11002c4a, 0x1400ffd0 },
- { 0x11002c4b, 0x1400ffd0 },
- { 0x11002c4c, 0x1400ffd0 },
- { 0x11002c4d, 0x1400ffd0 },
- { 0x11002c4e, 0x1400ffd0 },
- { 0x11002c4f, 0x1400ffd0 },
- { 0x11002c50, 0x1400ffd0 },
- { 0x11002c51, 0x1400ffd0 },
- { 0x11002c52, 0x1400ffd0 },
- { 0x11002c53, 0x1400ffd0 },
- { 0x11002c54, 0x1400ffd0 },
- { 0x11002c55, 0x1400ffd0 },
- { 0x11002c56, 0x1400ffd0 },
- { 0x11002c57, 0x1400ffd0 },
- { 0x11002c58, 0x1400ffd0 },
- { 0x11002c59, 0x1400ffd0 },
- { 0x11002c5a, 0x1400ffd0 },
- { 0x11002c5b, 0x1400ffd0 },
- { 0x11002c5c, 0x1400ffd0 },
- { 0x11002c5d, 0x1400ffd0 },
- { 0x11002c5e, 0x1400ffd0 },
- { 0x0a002c80, 0x24000001 },
- { 0x0a002c81, 0x1400ffff },
- { 0x0a002c82, 0x24000001 },
- { 0x0a002c83, 0x1400ffff },
- { 0x0a002c84, 0x24000001 },
- { 0x0a002c85, 0x1400ffff },
- { 0x0a002c86, 0x24000001 },
- { 0x0a002c87, 0x1400ffff },
- { 0x0a002c88, 0x24000001 },
- { 0x0a002c89, 0x1400ffff },
- { 0x0a002c8a, 0x24000001 },
- { 0x0a002c8b, 0x1400ffff },
- { 0x0a002c8c, 0x24000001 },
- { 0x0a002c8d, 0x1400ffff },
- { 0x0a002c8e, 0x24000001 },
- { 0x0a002c8f, 0x1400ffff },
- { 0x0a002c90, 0x24000001 },
- { 0x0a002c91, 0x1400ffff },
- { 0x0a002c92, 0x24000001 },
- { 0x0a002c93, 0x1400ffff },
- { 0x0a002c94, 0x24000001 },
- { 0x0a002c95, 0x1400ffff },
- { 0x0a002c96, 0x24000001 },
- { 0x0a002c97, 0x1400ffff },
- { 0x0a002c98, 0x24000001 },
- { 0x0a002c99, 0x1400ffff },
- { 0x0a002c9a, 0x24000001 },
- { 0x0a002c9b, 0x1400ffff },
- { 0x0a002c9c, 0x24000001 },
- { 0x0a002c9d, 0x1400ffff },
- { 0x0a002c9e, 0x24000001 },
- { 0x0a002c9f, 0x1400ffff },
- { 0x0a002ca0, 0x24000001 },
- { 0x0a002ca1, 0x1400ffff },
- { 0x0a002ca2, 0x24000001 },
- { 0x0a002ca3, 0x1400ffff },
- { 0x0a002ca4, 0x24000001 },
- { 0x0a002ca5, 0x1400ffff },
- { 0x0a002ca6, 0x24000001 },
- { 0x0a002ca7, 0x1400ffff },
- { 0x0a002ca8, 0x24000001 },
- { 0x0a002ca9, 0x1400ffff },
- { 0x0a002caa, 0x24000001 },
- { 0x0a002cab, 0x1400ffff },
- { 0x0a002cac, 0x24000001 },
- { 0x0a002cad, 0x1400ffff },
- { 0x0a002cae, 0x24000001 },
- { 0x0a002caf, 0x1400ffff },
- { 0x0a002cb0, 0x24000001 },
- { 0x0a002cb1, 0x1400ffff },
- { 0x0a002cb2, 0x24000001 },
- { 0x0a002cb3, 0x1400ffff },
- { 0x0a002cb4, 0x24000001 },
- { 0x0a002cb5, 0x1400ffff },
- { 0x0a002cb6, 0x24000001 },
- { 0x0a002cb7, 0x1400ffff },
- { 0x0a002cb8, 0x24000001 },
- { 0x0a002cb9, 0x1400ffff },
- { 0x0a002cba, 0x24000001 },
- { 0x0a002cbb, 0x1400ffff },
- { 0x0a002cbc, 0x24000001 },
- { 0x0a002cbd, 0x1400ffff },
- { 0x0a002cbe, 0x24000001 },
- { 0x0a002cbf, 0x1400ffff },
- { 0x0a002cc0, 0x24000001 },
- { 0x0a002cc1, 0x1400ffff },
- { 0x0a002cc2, 0x24000001 },
- { 0x0a002cc3, 0x1400ffff },
- { 0x0a002cc4, 0x24000001 },
- { 0x0a002cc5, 0x1400ffff },
- { 0x0a002cc6, 0x24000001 },
- { 0x0a002cc7, 0x1400ffff },
- { 0x0a002cc8, 0x24000001 },
- { 0x0a002cc9, 0x1400ffff },
- { 0x0a002cca, 0x24000001 },
- { 0x0a002ccb, 0x1400ffff },
- { 0x0a002ccc, 0x24000001 },
- { 0x0a002ccd, 0x1400ffff },
- { 0x0a002cce, 0x24000001 },
- { 0x0a002ccf, 0x1400ffff },
- { 0x0a002cd0, 0x24000001 },
- { 0x0a002cd1, 0x1400ffff },
- { 0x0a002cd2, 0x24000001 },
- { 0x0a002cd3, 0x1400ffff },
- { 0x0a002cd4, 0x24000001 },
- { 0x0a002cd5, 0x1400ffff },
- { 0x0a002cd6, 0x24000001 },
- { 0x0a002cd7, 0x1400ffff },
- { 0x0a002cd8, 0x24000001 },
- { 0x0a002cd9, 0x1400ffff },
- { 0x0a002cda, 0x24000001 },
- { 0x0a002cdb, 0x1400ffff },
- { 0x0a002cdc, 0x24000001 },
- { 0x0a002cdd, 0x1400ffff },
- { 0x0a002cde, 0x24000001 },
- { 0x0a002cdf, 0x1400ffff },
- { 0x0a002ce0, 0x24000001 },
- { 0x0a002ce1, 0x1400ffff },
- { 0x0a002ce2, 0x24000001 },
- { 0x0a002ce3, 0x1400ffff },
- { 0x0a002ce4, 0x14000000 },
- { 0x0a802ce5, 0x68000005 },
- { 0x0a802cf9, 0x54000003 },
- { 0x0a002cfd, 0x3c000000 },
- { 0x0a802cfe, 0x54000001 },
- { 0x10002d00, 0x1400e3a0 },
- { 0x10002d01, 0x1400e3a0 },
- { 0x10002d02, 0x1400e3a0 },
- { 0x10002d03, 0x1400e3a0 },
- { 0x10002d04, 0x1400e3a0 },
- { 0x10002d05, 0x1400e3a0 },
- { 0x10002d06, 0x1400e3a0 },
- { 0x10002d07, 0x1400e3a0 },
- { 0x10002d08, 0x1400e3a0 },
- { 0x10002d09, 0x1400e3a0 },
- { 0x10002d0a, 0x1400e3a0 },
- { 0x10002d0b, 0x1400e3a0 },
- { 0x10002d0c, 0x1400e3a0 },
- { 0x10002d0d, 0x1400e3a0 },
- { 0x10002d0e, 0x1400e3a0 },
- { 0x10002d0f, 0x1400e3a0 },
- { 0x10002d10, 0x1400e3a0 },
- { 0x10002d11, 0x1400e3a0 },
- { 0x10002d12, 0x1400e3a0 },
- { 0x10002d13, 0x1400e3a0 },
- { 0x10002d14, 0x1400e3a0 },
- { 0x10002d15, 0x1400e3a0 },
- { 0x10002d16, 0x1400e3a0 },
- { 0x10002d17, 0x1400e3a0 },
- { 0x10002d18, 0x1400e3a0 },
- { 0x10002d19, 0x1400e3a0 },
- { 0x10002d1a, 0x1400e3a0 },
- { 0x10002d1b, 0x1400e3a0 },
- { 0x10002d1c, 0x1400e3a0 },
- { 0x10002d1d, 0x1400e3a0 },
- { 0x10002d1e, 0x1400e3a0 },
- { 0x10002d1f, 0x1400e3a0 },
- { 0x10002d20, 0x1400e3a0 },
- { 0x10002d21, 0x1400e3a0 },
- { 0x10002d22, 0x1400e3a0 },
- { 0x10002d23, 0x1400e3a0 },
- { 0x10002d24, 0x1400e3a0 },
- { 0x10002d25, 0x1400e3a0 },
- { 0x3a802d30, 0x1c000035 },
- { 0x3a002d6f, 0x18000000 },
- { 0x0f802d80, 0x1c000016 },
- { 0x0f802da0, 0x1c000006 },
- { 0x0f802da8, 0x1c000006 },
- { 0x0f802db0, 0x1c000006 },
- { 0x0f802db8, 0x1c000006 },
- { 0x0f802dc0, 0x1c000006 },
- { 0x0f802dc8, 0x1c000006 },
- { 0x0f802dd0, 0x1c000006 },
- { 0x0f802dd8, 0x1c000006 },
- { 0x09802e00, 0x54000001 },
- { 0x09002e02, 0x50000000 },
- { 0x09002e03, 0x4c000000 },
- { 0x09002e04, 0x50000000 },
- { 0x09002e05, 0x4c000000 },
- { 0x09802e06, 0x54000002 },
- { 0x09002e09, 0x50000000 },
- { 0x09002e0a, 0x4c000000 },
- { 0x09002e0b, 0x54000000 },
- { 0x09002e0c, 0x50000000 },
- { 0x09002e0d, 0x4c000000 },
- { 0x09802e0e, 0x54000008 },
- { 0x09002e17, 0x44000000 },
- { 0x09002e1c, 0x50000000 },
- { 0x09002e1d, 0x4c000000 },
- { 0x16802e80, 0x68000019 },
- { 0x16802e9b, 0x68000058 },
- { 0x16802f00, 0x680000d5 },
- { 0x09802ff0, 0x6800000b },
- { 0x09003000, 0x74000000 },
- { 0x09803001, 0x54000002 },
- { 0x09003004, 0x68000000 },
- { 0x16003005, 0x18000000 },
- { 0x09003006, 0x1c000000 },
- { 0x16003007, 0x38000000 },
- { 0x09003008, 0x58000000 },
- { 0x09003009, 0x48000000 },
- { 0x0900300a, 0x58000000 },
- { 0x0900300b, 0x48000000 },
- { 0x0900300c, 0x58000000 },
- { 0x0900300d, 0x48000000 },
- { 0x0900300e, 0x58000000 },
- { 0x0900300f, 0x48000000 },
- { 0x09003010, 0x58000000 },
- { 0x09003011, 0x48000000 },
- { 0x09803012, 0x68000001 },
- { 0x09003014, 0x58000000 },
- { 0x09003015, 0x48000000 },
- { 0x09003016, 0x58000000 },
- { 0x09003017, 0x48000000 },
- { 0x09003018, 0x58000000 },
- { 0x09003019, 0x48000000 },
- { 0x0900301a, 0x58000000 },
- { 0x0900301b, 0x48000000 },
- { 0x0900301c, 0x44000000 },
- { 0x0900301d, 0x58000000 },
- { 0x0980301e, 0x48000001 },
- { 0x09003020, 0x68000000 },
- { 0x16803021, 0x38000008 },
- { 0x1b80302a, 0x30000005 },
- { 0x09003030, 0x44000000 },
- { 0x09803031, 0x18000004 },
- { 0x09803036, 0x68000001 },
- { 0x16803038, 0x38000002 },
- { 0x1600303b, 0x18000000 },
- { 0x0900303c, 0x1c000000 },
- { 0x0900303d, 0x54000000 },
- { 0x0980303e, 0x68000001 },
- { 0x1a803041, 0x1c000055 },
- { 0x1b803099, 0x30000001 },
- { 0x0980309b, 0x60000001 },
- { 0x1a80309d, 0x18000001 },
- { 0x1a00309f, 0x1c000000 },
- { 0x090030a0, 0x44000000 },
- { 0x1d8030a1, 0x1c000059 },
- { 0x090030fb, 0x54000000 },
- { 0x098030fc, 0x18000002 },
- { 0x1d0030ff, 0x1c000000 },
- { 0x03803105, 0x1c000027 },
- { 0x17803131, 0x1c00005d },
- { 0x09803190, 0x68000001 },
- { 0x09803192, 0x3c000003 },
- { 0x09803196, 0x68000009 },
- { 0x038031a0, 0x1c000017 },
- { 0x098031c0, 0x6800000f },
- { 0x1d8031f0, 0x1c00000f },
- { 0x17803200, 0x6800001e },
- { 0x09803220, 0x3c000009 },
- { 0x0980322a, 0x68000019 },
- { 0x09003250, 0x68000000 },
- { 0x09803251, 0x3c00000e },
- { 0x17803260, 0x6800001f },
- { 0x09803280, 0x3c000009 },
- { 0x0980328a, 0x68000026 },
- { 0x098032b1, 0x3c00000e },
- { 0x098032c0, 0x6800003e },
- { 0x09803300, 0x680000ff },
- { 0x16803400, 0x1c0019b5 },
- { 0x09804dc0, 0x6800003f },
- { 0x16804e00, 0x1c0051bb },
- { 0x3c80a000, 0x1c000014 },
- { 0x3c00a015, 0x18000000 },
- { 0x3c80a016, 0x1c000476 },
- { 0x3c80a490, 0x68000036 },
- { 0x0980a700, 0x60000016 },
- { 0x3080a800, 0x1c000001 },
- { 0x3000a802, 0x28000000 },
- { 0x3080a803, 0x1c000002 },
- { 0x3000a806, 0x30000000 },
- { 0x3080a807, 0x1c000003 },
- { 0x3000a80b, 0x30000000 },
- { 0x3080a80c, 0x1c000016 },
- { 0x3080a823, 0x28000001 },
- { 0x3080a825, 0x30000001 },
- { 0x3000a827, 0x28000000 },
- { 0x3080a828, 0x68000003 },
- { 0x1780ac00, 0x1c002ba3 },
- { 0x0980d800, 0x1000037f },
- { 0x0980db80, 0x1000007f },
- { 0x0980dc00, 0x100003ff },
- { 0x0980e000, 0x0c0018ff },
- { 0x1680f900, 0x1c00012d },
- { 0x1680fa30, 0x1c00003a },
- { 0x1680fa70, 0x1c000069 },
- { 0x2180fb00, 0x14000006 },
- { 0x0180fb13, 0x14000004 },
- { 0x1900fb1d, 0x1c000000 },
- { 0x1900fb1e, 0x30000000 },
- { 0x1980fb1f, 0x1c000009 },
- { 0x1900fb29, 0x64000000 },
- { 0x1980fb2a, 0x1c00000c },
- { 0x1980fb38, 0x1c000004 },
- { 0x1900fb3e, 0x1c000000 },
- { 0x1980fb40, 0x1c000001 },
- { 0x1980fb43, 0x1c000001 },
- { 0x1980fb46, 0x1c00006b },
- { 0x0080fbd3, 0x1c00016a },
- { 0x0900fd3e, 0x58000000 },
- { 0x0900fd3f, 0x48000000 },
- { 0x0080fd50, 0x1c00003f },
- { 0x0080fd92, 0x1c000035 },
- { 0x0080fdf0, 0x1c00000b },
- { 0x0000fdfc, 0x5c000000 },
- { 0x0900fdfd, 0x68000000 },
- { 0x1b80fe00, 0x3000000f },
- { 0x0980fe10, 0x54000006 },
- { 0x0900fe17, 0x58000000 },
- { 0x0900fe18, 0x48000000 },
- { 0x0900fe19, 0x54000000 },
- { 0x1b80fe20, 0x30000003 },
- { 0x0900fe30, 0x54000000 },
- { 0x0980fe31, 0x44000001 },
- { 0x0980fe33, 0x40000001 },
- { 0x0900fe35, 0x58000000 },
- { 0x0900fe36, 0x48000000 },
- { 0x0900fe37, 0x58000000 },
- { 0x0900fe38, 0x48000000 },
- { 0x0900fe39, 0x58000000 },
- { 0x0900fe3a, 0x48000000 },
- { 0x0900fe3b, 0x58000000 },
- { 0x0900fe3c, 0x48000000 },
- { 0x0900fe3d, 0x58000000 },
- { 0x0900fe3e, 0x48000000 },
- { 0x0900fe3f, 0x58000000 },
- { 0x0900fe40, 0x48000000 },
- { 0x0900fe41, 0x58000000 },
- { 0x0900fe42, 0x48000000 },
- { 0x0900fe43, 0x58000000 },
- { 0x0900fe44, 0x48000000 },
- { 0x0980fe45, 0x54000001 },
- { 0x0900fe47, 0x58000000 },
- { 0x0900fe48, 0x48000000 },
- { 0x0980fe49, 0x54000003 },
- { 0x0980fe4d, 0x40000002 },
- { 0x0980fe50, 0x54000002 },
- { 0x0980fe54, 0x54000003 },
- { 0x0900fe58, 0x44000000 },
- { 0x0900fe59, 0x58000000 },
- { 0x0900fe5a, 0x48000000 },
- { 0x0900fe5b, 0x58000000 },
- { 0x0900fe5c, 0x48000000 },
- { 0x0900fe5d, 0x58000000 },
- { 0x0900fe5e, 0x48000000 },
- { 0x0980fe5f, 0x54000002 },
- { 0x0900fe62, 0x64000000 },
- { 0x0900fe63, 0x44000000 },
- { 0x0980fe64, 0x64000002 },
- { 0x0900fe68, 0x54000000 },
- { 0x0900fe69, 0x5c000000 },
- { 0x0980fe6a, 0x54000001 },
- { 0x0080fe70, 0x1c000004 },
- { 0x0080fe76, 0x1c000086 },
- { 0x0900feff, 0x04000000 },
- { 0x0980ff01, 0x54000002 },
- { 0x0900ff04, 0x5c000000 },
- { 0x0980ff05, 0x54000002 },
- { 0x0900ff08, 0x58000000 },
- { 0x0900ff09, 0x48000000 },
- { 0x0900ff0a, 0x54000000 },
- { 0x0900ff0b, 0x64000000 },
- { 0x0900ff0c, 0x54000000 },
- { 0x0900ff0d, 0x44000000 },
- { 0x0980ff0e, 0x54000001 },
- { 0x0980ff10, 0x34000009 },
- { 0x0980ff1a, 0x54000001 },
- { 0x0980ff1c, 0x64000002 },
- { 0x0980ff1f, 0x54000001 },
- { 0x2100ff21, 0x24000020 },
- { 0x2100ff22, 0x24000020 },
- { 0x2100ff23, 0x24000020 },
- { 0x2100ff24, 0x24000020 },
- { 0x2100ff25, 0x24000020 },
- { 0x2100ff26, 0x24000020 },
- { 0x2100ff27, 0x24000020 },
- { 0x2100ff28, 0x24000020 },
- { 0x2100ff29, 0x24000020 },
- { 0x2100ff2a, 0x24000020 },
- { 0x2100ff2b, 0x24000020 },
- { 0x2100ff2c, 0x24000020 },
- { 0x2100ff2d, 0x24000020 },
- { 0x2100ff2e, 0x24000020 },
- { 0x2100ff2f, 0x24000020 },
- { 0x2100ff30, 0x24000020 },
- { 0x2100ff31, 0x24000020 },
- { 0x2100ff32, 0x24000020 },
- { 0x2100ff33, 0x24000020 },
- { 0x2100ff34, 0x24000020 },
- { 0x2100ff35, 0x24000020 },
- { 0x2100ff36, 0x24000020 },
- { 0x2100ff37, 0x24000020 },
- { 0x2100ff38, 0x24000020 },
- { 0x2100ff39, 0x24000020 },
- { 0x2100ff3a, 0x24000020 },
- { 0x0900ff3b, 0x58000000 },
- { 0x0900ff3c, 0x54000000 },
- { 0x0900ff3d, 0x48000000 },
- { 0x0900ff3e, 0x60000000 },
- { 0x0900ff3f, 0x40000000 },
- { 0x0900ff40, 0x60000000 },
- { 0x2100ff41, 0x1400ffe0 },
- { 0x2100ff42, 0x1400ffe0 },
- { 0x2100ff43, 0x1400ffe0 },
- { 0x2100ff44, 0x1400ffe0 },
- { 0x2100ff45, 0x1400ffe0 },
- { 0x2100ff46, 0x1400ffe0 },
- { 0x2100ff47, 0x1400ffe0 },
- { 0x2100ff48, 0x1400ffe0 },
- { 0x2100ff49, 0x1400ffe0 },
- { 0x2100ff4a, 0x1400ffe0 },
- { 0x2100ff4b, 0x1400ffe0 },
- { 0x2100ff4c, 0x1400ffe0 },
- { 0x2100ff4d, 0x1400ffe0 },
- { 0x2100ff4e, 0x1400ffe0 },
- { 0x2100ff4f, 0x1400ffe0 },
- { 0x2100ff50, 0x1400ffe0 },
- { 0x2100ff51, 0x1400ffe0 },
- { 0x2100ff52, 0x1400ffe0 },
- { 0x2100ff53, 0x1400ffe0 },
- { 0x2100ff54, 0x1400ffe0 },
- { 0x2100ff55, 0x1400ffe0 },
- { 0x2100ff56, 0x1400ffe0 },
- { 0x2100ff57, 0x1400ffe0 },
- { 0x2100ff58, 0x1400ffe0 },
- { 0x2100ff59, 0x1400ffe0 },
- { 0x2100ff5a, 0x1400ffe0 },
- { 0x0900ff5b, 0x58000000 },
- { 0x0900ff5c, 0x64000000 },
- { 0x0900ff5d, 0x48000000 },
- { 0x0900ff5e, 0x64000000 },
- { 0x0900ff5f, 0x58000000 },
- { 0x0900ff60, 0x48000000 },
- { 0x0900ff61, 0x54000000 },
- { 0x0900ff62, 0x58000000 },
- { 0x0900ff63, 0x48000000 },
- { 0x0980ff64, 0x54000001 },
- { 0x1d80ff66, 0x1c000009 },
- { 0x0900ff70, 0x18000000 },
- { 0x1d80ff71, 0x1c00002c },
- { 0x0980ff9e, 0x18000001 },
- { 0x1780ffa0, 0x1c00001e },
- { 0x1780ffc2, 0x1c000005 },
- { 0x1780ffca, 0x1c000005 },
- { 0x1780ffd2, 0x1c000005 },
- { 0x1780ffda, 0x1c000002 },
- { 0x0980ffe0, 0x5c000001 },
- { 0x0900ffe2, 0x64000000 },
- { 0x0900ffe3, 0x60000000 },
- { 0x0900ffe4, 0x68000000 },
- { 0x0980ffe5, 0x5c000001 },
- { 0x0900ffe8, 0x68000000 },
- { 0x0980ffe9, 0x64000003 },
- { 0x0980ffed, 0x68000001 },
- { 0x0980fff9, 0x04000002 },
- { 0x0980fffc, 0x68000001 },
- { 0x23810000, 0x1c00000b },
- { 0x2381000d, 0x1c000019 },
- { 0x23810028, 0x1c000012 },
- { 0x2381003c, 0x1c000001 },
- { 0x2381003f, 0x1c00000e },
- { 0x23810050, 0x1c00000d },
- { 0x23810080, 0x1c00007a },
- { 0x09810100, 0x54000001 },
- { 0x09010102, 0x68000000 },
- { 0x09810107, 0x3c00002c },
- { 0x09810137, 0x68000008 },
- { 0x13810140, 0x38000034 },
- { 0x13810175, 0x3c000003 },
- { 0x13810179, 0x68000010 },
- { 0x1301018a, 0x3c000000 },
- { 0x29810300, 0x1c00001e },
- { 0x29810320, 0x3c000003 },
- { 0x12810330, 0x1c000019 },
- { 0x1201034a, 0x38000000 },
- { 0x3b810380, 0x1c00001d },
- { 0x3b01039f, 0x54000000 },
- { 0x2a8103a0, 0x1c000023 },
- { 0x2a8103c8, 0x1c000007 },
- { 0x2a0103d0, 0x68000000 },
- { 0x2a8103d1, 0x38000004 },
- { 0x0d010400, 0x24000028 },
- { 0x0d010401, 0x24000028 },
- { 0x0d010402, 0x24000028 },
- { 0x0d010403, 0x24000028 },
- { 0x0d010404, 0x24000028 },
- { 0x0d010405, 0x24000028 },
- { 0x0d010406, 0x24000028 },
- { 0x0d010407, 0x24000028 },
- { 0x0d010408, 0x24000028 },
- { 0x0d010409, 0x24000028 },
- { 0x0d01040a, 0x24000028 },
- { 0x0d01040b, 0x24000028 },
- { 0x0d01040c, 0x24000028 },
- { 0x0d01040d, 0x24000028 },
- { 0x0d01040e, 0x24000028 },
- { 0x0d01040f, 0x24000028 },
- { 0x0d010410, 0x24000028 },
- { 0x0d010411, 0x24000028 },
- { 0x0d010412, 0x24000028 },
- { 0x0d010413, 0x24000028 },
- { 0x0d010414, 0x24000028 },
- { 0x0d010415, 0x24000028 },
- { 0x0d010416, 0x24000028 },
- { 0x0d010417, 0x24000028 },
- { 0x0d010418, 0x24000028 },
- { 0x0d010419, 0x24000028 },
- { 0x0d01041a, 0x24000028 },
- { 0x0d01041b, 0x24000028 },
- { 0x0d01041c, 0x24000028 },
- { 0x0d01041d, 0x24000028 },
- { 0x0d01041e, 0x24000028 },
- { 0x0d01041f, 0x24000028 },
- { 0x0d010420, 0x24000028 },
- { 0x0d010421, 0x24000028 },
- { 0x0d010422, 0x24000028 },
- { 0x0d010423, 0x24000028 },
- { 0x0d010424, 0x24000028 },
- { 0x0d010425, 0x24000028 },
- { 0x0d010426, 0x24000028 },
- { 0x0d010427, 0x24000028 },
- { 0x0d010428, 0x1400ffd8 },
- { 0x0d010429, 0x1400ffd8 },
- { 0x0d01042a, 0x1400ffd8 },
- { 0x0d01042b, 0x1400ffd8 },
- { 0x0d01042c, 0x1400ffd8 },
- { 0x0d01042d, 0x1400ffd8 },
- { 0x0d01042e, 0x1400ffd8 },
- { 0x0d01042f, 0x1400ffd8 },
- { 0x0d010430, 0x1400ffd8 },
- { 0x0d010431, 0x1400ffd8 },
- { 0x0d010432, 0x1400ffd8 },
- { 0x0d010433, 0x1400ffd8 },
- { 0x0d010434, 0x1400ffd8 },
- { 0x0d010435, 0x1400ffd8 },
- { 0x0d010436, 0x1400ffd8 },
- { 0x0d010437, 0x1400ffd8 },
- { 0x0d010438, 0x1400ffd8 },
- { 0x0d010439, 0x1400ffd8 },
- { 0x0d01043a, 0x1400ffd8 },
- { 0x0d01043b, 0x1400ffd8 },
- { 0x0d01043c, 0x1400ffd8 },
- { 0x0d01043d, 0x1400ffd8 },
- { 0x0d01043e, 0x1400ffd8 },
- { 0x0d01043f, 0x1400ffd8 },
- { 0x0d010440, 0x1400ffd8 },
- { 0x0d010441, 0x1400ffd8 },
- { 0x0d010442, 0x1400ffd8 },
- { 0x0d010443, 0x1400ffd8 },
- { 0x0d010444, 0x1400ffd8 },
- { 0x0d010445, 0x1400ffd8 },
- { 0x0d010446, 0x1400ffd8 },
- { 0x0d010447, 0x1400ffd8 },
- { 0x0d010448, 0x1400ffd8 },
- { 0x0d010449, 0x1400ffd8 },
- { 0x0d01044a, 0x1400ffd8 },
- { 0x0d01044b, 0x1400ffd8 },
- { 0x0d01044c, 0x1400ffd8 },
- { 0x0d01044d, 0x1400ffd8 },
- { 0x0d01044e, 0x1400ffd8 },
- { 0x0d01044f, 0x1400ffd8 },
- { 0x2e810450, 0x1c00004d },
- { 0x2c8104a0, 0x34000009 },
- { 0x0b810800, 0x1c000005 },
- { 0x0b010808, 0x1c000000 },
- { 0x0b81080a, 0x1c00002b },
- { 0x0b810837, 0x1c000001 },
- { 0x0b01083c, 0x1c000000 },
- { 0x0b01083f, 0x1c000000 },
- { 0x1e010a00, 0x1c000000 },
- { 0x1e810a01, 0x30000002 },
- { 0x1e810a05, 0x30000001 },
- { 0x1e810a0c, 0x30000003 },
- { 0x1e810a10, 0x1c000003 },
- { 0x1e810a15, 0x1c000002 },
- { 0x1e810a19, 0x1c00001a },
- { 0x1e810a38, 0x30000002 },
- { 0x1e010a3f, 0x30000000 },
- { 0x1e810a40, 0x3c000007 },
- { 0x1e810a50, 0x54000008 },
- { 0x0981d000, 0x680000f5 },
- { 0x0981d100, 0x68000026 },
- { 0x0981d12a, 0x6800003a },
- { 0x0981d165, 0x28000001 },
- { 0x1b81d167, 0x30000002 },
- { 0x0981d16a, 0x68000002 },
- { 0x0981d16d, 0x28000005 },
- { 0x0981d173, 0x04000007 },
- { 0x1b81d17b, 0x30000007 },
- { 0x0981d183, 0x68000001 },
- { 0x1b81d185, 0x30000006 },
- { 0x0981d18c, 0x6800001d },
- { 0x1b81d1aa, 0x30000003 },
- { 0x0981d1ae, 0x6800002f },
- { 0x1381d200, 0x68000041 },
- { 0x1381d242, 0x30000002 },
- { 0x1301d245, 0x68000000 },
- { 0x0981d300, 0x68000056 },
- { 0x0981d400, 0x24000019 },
- { 0x0981d41a, 0x14000019 },
- { 0x0981d434, 0x24000019 },
- { 0x0981d44e, 0x14000006 },
- { 0x0981d456, 0x14000011 },
- { 0x0981d468, 0x24000019 },
- { 0x0981d482, 0x14000019 },
- { 0x0901d49c, 0x24000000 },
- { 0x0981d49e, 0x24000001 },
- { 0x0901d4a2, 0x24000000 },
- { 0x0981d4a5, 0x24000001 },
- { 0x0981d4a9, 0x24000003 },
- { 0x0981d4ae, 0x24000007 },
- { 0x0981d4b6, 0x14000003 },
- { 0x0901d4bb, 0x14000000 },
- { 0x0981d4bd, 0x14000006 },
- { 0x0981d4c5, 0x1400000a },
- { 0x0981d4d0, 0x24000019 },
- { 0x0981d4ea, 0x14000019 },
- { 0x0981d504, 0x24000001 },
- { 0x0981d507, 0x24000003 },
- { 0x0981d50d, 0x24000007 },
- { 0x0981d516, 0x24000006 },
- { 0x0981d51e, 0x14000019 },
- { 0x0981d538, 0x24000001 },
- { 0x0981d53b, 0x24000003 },
- { 0x0981d540, 0x24000004 },
- { 0x0901d546, 0x24000000 },
- { 0x0981d54a, 0x24000006 },
- { 0x0981d552, 0x14000019 },
- { 0x0981d56c, 0x24000019 },
- { 0x0981d586, 0x14000019 },
- { 0x0981d5a0, 0x24000019 },
- { 0x0981d5ba, 0x14000019 },
- { 0x0981d5d4, 0x24000019 },
- { 0x0981d5ee, 0x14000019 },
- { 0x0981d608, 0x24000019 },
- { 0x0981d622, 0x14000019 },
- { 0x0981d63c, 0x24000019 },
- { 0x0981d656, 0x14000019 },
- { 0x0981d670, 0x24000019 },
- { 0x0981d68a, 0x1400001b },
- { 0x0981d6a8, 0x24000018 },
- { 0x0901d6c1, 0x64000000 },
- { 0x0981d6c2, 0x14000018 },
- { 0x0901d6db, 0x64000000 },
- { 0x0981d6dc, 0x14000005 },
- { 0x0981d6e2, 0x24000018 },
- { 0x0901d6fb, 0x64000000 },
- { 0x0981d6fc, 0x14000018 },
- { 0x0901d715, 0x64000000 },
- { 0x0981d716, 0x14000005 },
- { 0x0981d71c, 0x24000018 },
- { 0x0901d735, 0x64000000 },
- { 0x0981d736, 0x14000018 },
- { 0x0901d74f, 0x64000000 },
- { 0x0981d750, 0x14000005 },
- { 0x0981d756, 0x24000018 },
- { 0x0901d76f, 0x64000000 },
- { 0x0981d770, 0x14000018 },
- { 0x0901d789, 0x64000000 },
- { 0x0981d78a, 0x14000005 },
- { 0x0981d790, 0x24000018 },
- { 0x0901d7a9, 0x64000000 },
- { 0x0981d7aa, 0x14000018 },
- { 0x0901d7c3, 0x64000000 },
- { 0x0981d7c4, 0x14000005 },
- { 0x0981d7ce, 0x34000031 },
- { 0x16820000, 0x1c00a6d6 },
- { 0x1682f800, 0x1c00021d },
- { 0x090e0001, 0x04000000 },
- { 0x098e0020, 0x0400005f },
- { 0x1b8e0100, 0x300000ef },
- { 0x098f0000, 0x0c00fffd },
- { 0x09900000, 0x0c00fffd },
-};
diff --git a/Source/JavaScriptCore/runtime/ArgList.cpp b/Source/JavaScriptCore/runtime/ArgList.cpp
index ab2b5d7..a862ea0 100644
--- a/Source/JavaScriptCore/runtime/ArgList.cpp
+++ b/Source/JavaScriptCore/runtime/ArgList.cpp
@@ -42,7 +42,7 @@ void MarkedArgumentBuffer::markLists(MarkStack& markStack, ListSet& markSet)
ListSet::iterator end = markSet.end();
for (ListSet::iterator it = markSet.begin(); it != end; ++it) {
MarkedArgumentBuffer* list = *it;
- markStack.appendValues(reinterpret_cast<JSValue*>(list->m_buffer), list->m_size);
+ markStack.deprecatedAppendValues(list->m_buffer, list->m_size);
}
}
diff --git a/Source/JavaScriptCore/runtime/Arguments.cpp b/Source/JavaScriptCore/runtime/Arguments.cpp
index 39886a8..305b247 100644
--- a/Source/JavaScriptCore/runtime/Arguments.cpp
+++ b/Source/JavaScriptCore/runtime/Arguments.cpp
@@ -48,17 +48,17 @@ void Arguments::markChildren(MarkStack& markStack)
JSObject::markChildren(markStack);
if (d->registerArray)
- markStack.appendValues(reinterpret_cast<JSValue*>(d->registerArray.get()), d->numParameters);
+ markStack.deprecatedAppendValues(d->registerArray.get(), d->numParameters);
if (d->extraArguments) {
unsigned numExtraArguments = d->numArguments - d->numParameters;
- markStack.appendValues(reinterpret_cast<JSValue*>(d->extraArguments), numExtraArguments);
+ markStack.deprecatedAppendValues(d->extraArguments, numExtraArguments);
}
- markStack.append(d->callee);
+ markStack.append(&d->callee);
if (d->activation)
- markStack.append(d->activation);
+ markStack.append(&d->activation);
}
void Arguments::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize)
@@ -197,7 +197,7 @@ bool Arguments::getOwnPropertySlot(ExecState* exec, const Identifier& propertyNa
if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) {
if (!d->isStrictMode) {
- slot.setValue(d->callee);
+ slot.setValue(d->callee.get());
return true;
}
createStrictModeCalleeIfNecessary(exec);
@@ -228,7 +228,7 @@ bool Arguments::getOwnPropertyDescriptor(ExecState* exec, const Identifier& prop
if (propertyName == exec->propertyNames().callee && LIKELY(!d->overrodeCallee)) {
if (!d->isStrictMode) {
- descriptor.setDescriptor(d->callee, DontEnum);
+ descriptor.setDescriptor(d->callee.get(), DontEnum);
return true;
}
createStrictModeCalleeIfNecessary(exec);
@@ -253,7 +253,7 @@ void Arguments::getOwnPropertyNames(ExecState* exec, PropertyNameArray& property
JSObject::getOwnPropertyNames(exec, propertyNames, mode);
}
-void Arguments::put(ExecState* exec, unsigned i, JSValue value, PutPropertySlot& slot)
+void Arguments::put(ExecState* exec, unsigned i, JSValue value)
{
if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
if (i < d->numParameters)
@@ -263,6 +263,7 @@ void Arguments::put(ExecState* exec, unsigned i, JSValue value, PutPropertySlot&
return;
}
+ PutPropertySlot slot;
JSObject::put(exec, Identifier(exec, UString::number(i)), value, slot);
}
@@ -280,14 +281,14 @@ void Arguments::put(ExecState* exec, const Identifier& propertyName, JSValue val
if (propertyName == exec->propertyNames().length && !d->overrodeLength) {
d->overrodeLength = true;
- putDirect(propertyName, value, DontEnum);
+ putDirect(exec->globalData(), propertyName, value, DontEnum);
return;
}
if (propertyName == exec->propertyNames().callee && !d->overrodeCallee) {
if (!d->isStrictMode) {
d->overrodeCallee = true;
- putDirect(propertyName, value, DontEnum);
+ putDirect(exec->globalData(), propertyName, value, DontEnum);
return;
}
createStrictModeCalleeIfNecessary(exec);
@@ -303,7 +304,7 @@ bool Arguments::deleteProperty(ExecState* exec, unsigned i)
{
if (i < d->numArguments) {
if (!d->deletedArguments) {
- d->deletedArguments.set(new bool[d->numArguments]);
+ d->deletedArguments = adoptArrayPtr(new bool[d->numArguments]);
memset(d->deletedArguments.get(), 0, sizeof(bool) * d->numArguments);
}
if (!d->deletedArguments[i]) {
@@ -321,7 +322,7 @@ bool Arguments::deleteProperty(ExecState* exec, const Identifier& propertyName)
unsigned i = propertyName.toArrayIndex(isArrayIndex);
if (isArrayIndex && i < d->numArguments) {
if (!d->deletedArguments) {
- d->deletedArguments.set(new bool[d->numArguments]);
+ d->deletedArguments = adoptArrayPtr(new bool[d->numArguments]);
memset(d->deletedArguments.get(), 0, sizeof(bool) * d->numArguments);
}
if (!d->deletedArguments[i]) {
diff --git a/Source/JavaScriptCore/runtime/Arguments.h b/Source/JavaScriptCore/runtime/Arguments.h
index fe900a2..658538b 100644
--- a/Source/JavaScriptCore/runtime/Arguments.h
+++ b/Source/JavaScriptCore/runtime/Arguments.h
@@ -37,7 +37,7 @@ namespace JSC {
WTF_MAKE_NONCOPYABLE(ArgumentsData); WTF_MAKE_FAST_ALLOCATED;
public:
ArgumentsData() { }
- JSActivation* activation;
+ WriteBarrier<JSActivation> activation;
unsigned numParameters;
ptrdiff_t firstParameterIndex;
@@ -50,7 +50,7 @@ namespace JSC {
OwnArrayPtr<bool> deletedArguments;
Register extraArgumentsFixedBuffer[4];
- JSFunction* callee;
+ WriteBarrier<JSFunction> callee;
bool overrodeLength : 1;
bool overrodeCallee : 1;
bool overrodeCaller : 1;
@@ -86,9 +86,9 @@ namespace JSC {
void copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize);
void copyRegisters();
bool isTornOff() const { return d->registerArray; }
- void setActivation(JSActivation* activation)
+ void setActivation(JSGlobalData& globalData, JSActivation* activation)
{
- d->activation = activation;
+ d->activation.set(globalData, this, activation);
d->registers = &activation->registerAt(0);
}
@@ -107,7 +107,7 @@ namespace JSC {
virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
- virtual void put(ExecState*, unsigned propertyName, JSValue, PutPropertySlot&);
+ virtual void put(ExecState*, unsigned propertyName, JSValue);
virtual bool deleteProperty(ExecState*, const Identifier& propertyName);
virtual bool deleteProperty(ExecState*, unsigned propertyName);
void createStrictModeCallerIfNecessary(ExecState*);
@@ -158,7 +158,6 @@ namespace JSC {
d->firstParameterIndex = firstParameterIndex;
d->numArguments = numArguments;
- d->activation = 0;
d->registers = callFrame->registers();
Register* extraArguments;
@@ -176,7 +175,7 @@ namespace JSC {
d->extraArguments = extraArguments;
- d->callee = callee;
+ d->callee.set(callFrame->globalData(), this, callee);
d->overrodeLength = false;
d->overrodeCallee = false;
d->overrodeCaller = false;
@@ -195,7 +194,6 @@ namespace JSC {
d->numParameters = 0;
d->numArguments = numArguments;
- d->activation = 0;
Register* extraArguments;
if (numArguments > sizeof(d->extraArgumentsFixedBuffer) / sizeof(Register))
@@ -209,7 +207,7 @@ namespace JSC {
d->extraArguments = extraArguments;
- d->callee = asFunction(callFrame->callee());
+ d->callee.set(callFrame->globalData(), this, asFunction(callFrame->callee()));
d->overrodeLength = false;
d->overrodeCallee = false;
d->overrodeCaller = false;
@@ -228,10 +226,10 @@ namespace JSC {
int registerOffset = d->numParameters + RegisterFile::CallFrameHeaderSize;
size_t registerArraySize = d->numParameters;
- Register* registerArray = new Register[registerArraySize];
- memcpy(registerArray, d->registers - registerOffset, registerArraySize * sizeof(Register));
- d->registerArray.set(registerArray);
- d->registers = registerArray + registerOffset;
+ OwnArrayPtr<Register> registerArray = adoptArrayPtr(new Register[registerArraySize]);
+ memcpy(registerArray.get(), d->registers - registerOffset, registerArraySize * sizeof(Register));
+ d->registers = registerArray.get() + registerOffset;
+ d->registerArray = registerArray.release();
}
// This JSActivation function is defined here so it can get at Arguments::setRegisters.
@@ -249,8 +247,9 @@ namespace JSC {
int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize;
size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;
- Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);
- setRegisters(registerArray + registerOffset, registerArray);
+ OwnArrayPtr<Register> registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);
+ Register* registers = registerArray.get() + registerOffset;
+ setRegisters(registers, registerArray.release());
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/ArrayConstructor.cpp b/Source/JavaScriptCore/runtime/ArrayConstructor.cpp
index 632d466..5d0adbd 100644
--- a/Source/JavaScriptCore/runtime/ArrayConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/ArrayConstructor.cpp
@@ -42,10 +42,10 @@ ArrayConstructor::ArrayConstructor(ExecState* exec, JSGlobalObject* globalObject
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, arrayPrototype->classInfo()->className))
{
// ECMA 15.4.3.1 Array.prototype
- putDirectWithoutTransition(exec->propertyNames().prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, arrayPrototype, DontEnum | DontDelete | ReadOnly);
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
// ES5
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().isArray, arrayConstructorIsArray), DontEnum);
@@ -62,7 +62,7 @@ static inline JSObject* constructArrayWithSizeQuirk(ExecState* exec, const ArgLi
}
// otherwise the array is constructed with the arguments in it
- return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), args);
+ return new (exec) JSArray(exec->globalData(), exec->lexicalGlobalObject()->arrayStructure(), args);
}
static EncodedJSValue JSC_HOST_CALL constructWithArrayConstructor(ExecState* exec)
diff --git a/Source/JavaScriptCore/runtime/ArrayPrototype.cpp b/Source/JavaScriptCore/runtime/ArrayPrototype.cpp
index 7615ffc..70c0d06 100644
--- a/Source/JavaScriptCore/runtime/ArrayPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/ArrayPrototype.cpp
@@ -117,7 +117,7 @@ const ClassInfo ArrayPrototype::info = {"Array", &JSArray::info, 0, ExecState::a
ArrayPrototype::ArrayPrototype(JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure)
: JSArray(structure)
{
- putAnonymousValue(0, globalObject);
+ putAnonymousValue(globalObject->globalData(), 0, globalObject);
}
bool ArrayPrototype::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
@@ -545,9 +545,9 @@ EncodedJSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec)
JSArray* resObj = new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), deleteCount, CreateCompact);
JSValue result = resObj;
-
+ JSGlobalData& globalData = exec->globalData();
for (unsigned k = 0; k < deleteCount; k++)
- resObj->uncheckedSetIndex(k, getProperty(exec, thisObj, k + begin));
+ resObj->uncheckedSetIndex(globalData, k, getProperty(exec, thisObj, k + begin));
resObj->setLength(deleteCount);
diff --git a/Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h b/Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h
index db2d1d7..0f6a646 100644
--- a/Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h
+++ b/Source/JavaScriptCore/runtime/BatchedTransitionOptimizer.h
@@ -34,8 +34,9 @@ namespace JSC {
class BatchedTransitionOptimizer {
WTF_MAKE_NONCOPYABLE(BatchedTransitionOptimizer);
public:
- BatchedTransitionOptimizer(JSObject* object)
- : m_object(object)
+ BatchedTransitionOptimizer(JSGlobalData& globalData, JSObject* object)
+ : m_globalData(&globalData)
+ , m_object(object)
{
if (!m_object->structure()->isDictionary())
m_object->setStructure(Structure::toCacheableDictionaryTransition(m_object->structure()));
@@ -43,10 +44,11 @@ namespace JSC {
~BatchedTransitionOptimizer()
{
- m_object->flattenDictionaryObject();
+ m_object->flattenDictionaryObject(*m_globalData);
}
private:
+ JSGlobalData* m_globalData;
JSObject* m_object;
};
diff --git a/Source/JavaScriptCore/runtime/BooleanConstructor.cpp b/Source/JavaScriptCore/runtime/BooleanConstructor.cpp
index 0167e03..21ef5bb 100644
--- a/Source/JavaScriptCore/runtime/BooleanConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/BooleanConstructor.cpp
@@ -31,17 +31,17 @@ ASSERT_CLASS_FITS_IN_CELL(BooleanConstructor);
BooleanConstructor::BooleanConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, BooleanPrototype* booleanPrototype)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, booleanPrototype->classInfo()->className))
{
- putDirectWithoutTransition(exec->propertyNames().prototype, booleanPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, booleanPrototype, DontEnum | DontDelete | ReadOnly);
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
}
// ECMA 15.6.2
JSObject* constructBoolean(ExecState* exec, const ArgList& args)
{
- BooleanObject* obj = new (exec) BooleanObject(exec->lexicalGlobalObject()->booleanObjectStructure());
- obj->setInternalValue(jsBoolean(args.at(0).toBoolean(exec)));
+ BooleanObject* obj = new (exec) BooleanObject(exec->globalData(), exec->lexicalGlobalObject()->booleanObjectStructure());
+ obj->setInternalValue(exec->globalData(), jsBoolean(args.at(0).toBoolean(exec)));
return obj;
}
@@ -71,8 +71,8 @@ CallType BooleanConstructor::getCallData(CallData& callData)
JSObject* constructBooleanFromImmediateBoolean(ExecState* exec, JSValue immediateBooleanValue)
{
- BooleanObject* obj = new (exec) BooleanObject(exec->lexicalGlobalObject()->booleanObjectStructure());
- obj->setInternalValue(immediateBooleanValue);
+ BooleanObject* obj = new (exec) BooleanObject(exec->globalData(), exec->lexicalGlobalObject()->booleanObjectStructure());
+ obj->setInternalValue(exec->globalData(), immediateBooleanValue);
return obj;
}
diff --git a/Source/JavaScriptCore/runtime/BooleanObject.cpp b/Source/JavaScriptCore/runtime/BooleanObject.cpp
index c9b3846..71ff2d2 100644
--- a/Source/JavaScriptCore/runtime/BooleanObject.cpp
+++ b/Source/JavaScriptCore/runtime/BooleanObject.cpp
@@ -27,8 +27,8 @@ ASSERT_CLASS_FITS_IN_CELL(BooleanObject);
const ClassInfo BooleanObject::info = { "Boolean", 0, 0, 0 };
-BooleanObject::BooleanObject(NonNullPassRefPtr<Structure> structure)
- : JSWrapperObject(structure)
+BooleanObject::BooleanObject(JSGlobalData& globalData, NonNullPassRefPtr<Structure> structure)
+ : JSWrapperObject(globalData, structure)
{
}
diff --git a/Source/JavaScriptCore/runtime/BooleanObject.h b/Source/JavaScriptCore/runtime/BooleanObject.h
index 4b02acb..ff10ef6 100644
--- a/Source/JavaScriptCore/runtime/BooleanObject.h
+++ b/Source/JavaScriptCore/runtime/BooleanObject.h
@@ -27,7 +27,7 @@ namespace JSC {
class BooleanObject : public JSWrapperObject {
public:
- explicit BooleanObject(NonNullPassRefPtr<Structure>);
+ explicit BooleanObject(JSGlobalData& globalData, NonNullPassRefPtr<Structure>);
virtual const ClassInfo* classInfo() const { return &info; }
static const ClassInfo info;
diff --git a/Source/JavaScriptCore/runtime/BooleanPrototype.cpp b/Source/JavaScriptCore/runtime/BooleanPrototype.cpp
index 7ffd095..54d621c 100644
--- a/Source/JavaScriptCore/runtime/BooleanPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/BooleanPrototype.cpp
@@ -39,9 +39,9 @@ static EncodedJSValue JSC_HOST_CALL booleanProtoFuncValueOf(ExecState*);
// ECMA 15.6.4
BooleanPrototype::BooleanPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure)
- : BooleanObject(structure)
+ : BooleanObject(exec->globalData(), structure)
{
- setInternalValue(jsBoolean(false));
+ setInternalValue(exec->globalData(), jsBoolean(false));
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().toString, booleanProtoFuncToString), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().valueOf, booleanProtoFuncValueOf), DontEnum);
diff --git a/Source/JavaScriptCore/runtime/CollectorHeapIterator.h b/Source/JavaScriptCore/runtime/CollectorHeapIterator.h
deleted file mode 100644
index 7229d77..0000000
--- a/Source/JavaScriptCore/runtime/CollectorHeapIterator.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "Heap.h"
-
-#ifndef CollectorHeapIterator_h
-#define CollectorHeapIterator_h
-
-namespace JSC {
-
- class CollectorHeapIterator {
- public:
- bool operator!=(const CollectorHeapIterator& other);
- JSCell* operator*() const;
-
- protected:
- CollectorHeapIterator(CollectorHeap&, size_t startBlock, size_t startCell);
- void advance(size_t max);
-
- CollectorHeap& m_heap;
- size_t m_block;
- size_t m_cell;
- };
-
- class LiveObjectIterator : public CollectorHeapIterator {
- public:
- LiveObjectIterator(CollectorHeap&, size_t startBlock, size_t startCell = 0);
- LiveObjectIterator& operator++();
- };
-
- class DeadObjectIterator : public CollectorHeapIterator {
- public:
- DeadObjectIterator(CollectorHeap&, size_t startBlock, size_t startCell = 0);
- DeadObjectIterator& operator++();
- };
-
- class ObjectIterator : public CollectorHeapIterator {
- public:
- ObjectIterator(CollectorHeap&, size_t startBlock, size_t startCell = 0);
- ObjectIterator& operator++();
- };
-
- inline CollectorHeapIterator::CollectorHeapIterator(CollectorHeap& heap, size_t startBlock, size_t startCell)
- : m_heap(heap)
- , m_block(startBlock)
- , m_cell(startCell)
- {
- }
-
- inline bool CollectorHeapIterator::operator!=(const CollectorHeapIterator& other)
- {
- return m_block != other.m_block || m_cell != other.m_cell;
- }
-
- inline JSCell* CollectorHeapIterator::operator*() const
- {
- return reinterpret_cast<JSCell*>(&m_heap.collectorBlock(m_block)->cells[m_cell]);
- }
-
- // Iterators advance up to the next-to-last -- and not the last -- cell in a
- // block, since the last cell is a dummy sentinel.
- inline void CollectorHeapIterator::advance(size_t max)
- {
- ++m_cell;
- if (m_cell == max) {
- m_cell = 0;
- ++m_block;
- }
- }
-
- inline LiveObjectIterator::LiveObjectIterator(CollectorHeap& heap, size_t startBlock, size_t startCell)
- : CollectorHeapIterator(heap, startBlock, startCell - 1)
- {
- ++(*this);
- }
-
- inline LiveObjectIterator& LiveObjectIterator::operator++()
- {
- advance(HeapConstants::cellsPerBlock - 1);
- if (m_block < m_heap.nextBlock || (m_block == m_heap.nextBlock && m_cell < m_heap.nextCell))
- return *this;
-
- while (m_block < m_heap.usedBlocks && !m_heap.collectorBlock(m_block)->marked.get(m_cell))
- advance(HeapConstants::cellsPerBlock - 1);
- return *this;
- }
-
- inline DeadObjectIterator::DeadObjectIterator(CollectorHeap& heap, size_t startBlock, size_t startCell)
- : CollectorHeapIterator(heap, startBlock, startCell - 1)
- {
- ++(*this);
- }
-
- inline DeadObjectIterator& DeadObjectIterator::operator++()
- {
- do {
- advance(HeapConstants::cellsPerBlock - 1);
- ASSERT(m_block > m_heap.nextBlock || (m_block == m_heap.nextBlock && m_cell >= m_heap.nextCell));
- } while (m_block < m_heap.usedBlocks && m_heap.collectorBlock(m_block)->marked.get(m_cell));
- return *this;
- }
-
- inline ObjectIterator::ObjectIterator(CollectorHeap& heap, size_t startBlock, size_t startCell)
- : CollectorHeapIterator(heap, startBlock, startCell - 1)
- {
- ++(*this);
- }
-
- inline ObjectIterator& ObjectIterator::operator++()
- {
- advance(HeapConstants::cellsPerBlock - 1);
- return *this;
- }
-
-} // namespace JSC
-
-#endif // CollectorHeapIterator_h
diff --git a/Source/JavaScriptCore/runtime/ConservativeSet.cpp b/Source/JavaScriptCore/runtime/ConservativeSet.cpp
new file mode 100644
index 0000000..bc8bd6d
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/ConservativeSet.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ConservativeSet.h"
+
+namespace JSC {
+
+inline bool isPointerAligned(void* p)
+{
+ return !((intptr_t)(p) & (sizeof(char*) - 1));
+}
+
+void ConservativeSet::grow()
+{
+ size_t newCapacity = m_capacity == inlineCapacity ? nonInlineCapacity : m_capacity * 2;
+ DeprecatedPtr<JSCell>* newSet = static_cast<DeprecatedPtr<JSCell>*>(OSAllocator::reserveAndCommit(newCapacity * sizeof(JSCell*)));
+ memcpy(newSet, m_set, m_size * sizeof(JSCell*));
+ if (m_set != m_inlineSet)
+ OSAllocator::decommitAndRelease(m_set, m_capacity * sizeof(JSCell*));
+ m_capacity = newCapacity;
+ m_set = newSet;
+}
+
+void ConservativeSet::add(void* begin, void* end)
+{
+ ASSERT(begin <= end);
+ ASSERT((static_cast<char*>(end) - static_cast<char*>(begin)) < 0x1000000);
+ ASSERT(isPointerAligned(begin));
+ ASSERT(isPointerAligned(end));
+
+ for (char** it = static_cast<char**>(begin); it != static_cast<char**>(end); ++it) {
+ if (!m_heap->contains(*it))
+ continue;
+
+ if (m_size == m_capacity)
+ grow();
+
+ m_set[m_size++] = reinterpret_cast<JSCell*>(*it);
+ }
+}
+
+} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/ConservativeSet.h b/Source/JavaScriptCore/runtime/ConservativeSet.h
new file mode 100644
index 0000000..e7c2c4a
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/ConservativeSet.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ConservativeSet_h
+#define ConservativeSet_h
+
+#include "Heap.h"
+#include "MarkStack.h"
+#include <wtf/Vector.h>
+
+namespace JSC {
+
+class JSCell;
+
+class ConservativeSet {
+public:
+ ConservativeSet(Heap*);
+ ~ConservativeSet();
+
+ void add(void* begin, void* end);
+ void mark(MarkStack&);
+
+private:
+ static const size_t inlineCapacity = 128;
+ static const size_t nonInlineCapacity = 8192 / sizeof(JSCell*);
+
+ void grow();
+
+ Heap* m_heap;
+ DeprecatedPtr<JSCell>* m_set;
+ size_t m_size;
+ size_t m_capacity;
+ DeprecatedPtr<JSCell> m_inlineSet[inlineCapacity];
+};
+
+inline ConservativeSet::ConservativeSet(Heap* heap)
+ : m_heap(heap)
+ , m_set(m_inlineSet)
+ , m_size(0)
+ , m_capacity(inlineCapacity)
+{
+}
+
+inline ConservativeSet::~ConservativeSet()
+{
+ if (m_set != m_inlineSet)
+ OSAllocator::decommitAndRelease(m_set, m_capacity * sizeof(DeprecatedPtr<JSCell>*));
+}
+
+inline void ConservativeSet::mark(MarkStack& markStack)
+{
+ for (size_t i = 0; i < m_size; ++i)
+ markStack.append(&m_set[i]);
+}
+
+} // namespace JSC
+
+#endif // ConservativeSet_h
diff --git a/Source/JavaScriptCore/runtime/DateConstructor.cpp b/Source/JavaScriptCore/runtime/DateConstructor.cpp
index dcbe12d..f1f3956 100644
--- a/Source/JavaScriptCore/runtime/DateConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/DateConstructor.cpp
@@ -61,13 +61,13 @@ static EncodedJSValue JSC_HOST_CALL dateUTC(ExecState*);
DateConstructor::DateConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure, DatePrototype* datePrototype)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, datePrototype->classInfo()->className))
{
- putDirectWithoutTransition(exec->propertyNames().prototype, datePrototype, DontEnum|DontDelete|ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, datePrototype, DontEnum | DontDelete | ReadOnly);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().parse, dateParse), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 7, exec->propertyNames().UTC, dateUTC), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().now, dateNow), DontEnum);
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(7), ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(7), ReadOnly | DontEnum | DontDelete);
}
// ECMA 15.9.3
diff --git a/Source/JavaScriptCore/runtime/DateInstance.cpp b/Source/JavaScriptCore/runtime/DateInstance.cpp
index 8562e2d..44e8b7d 100644
--- a/Source/JavaScriptCore/runtime/DateInstance.cpp
+++ b/Source/JavaScriptCore/runtime/DateInstance.cpp
@@ -34,22 +34,22 @@ namespace JSC {
const ClassInfo DateInstance::info = {"Date", 0, 0, 0};
-DateInstance::DateInstance(ExecState*, NonNullPassRefPtr<Structure> structure)
- : JSWrapperObject(structure)
+DateInstance::DateInstance(ExecState* exec, NonNullPassRefPtr<Structure> structure)
+ : JSWrapperObject(exec->globalData(), structure)
{
- setInternalValue(jsNaN());
+ setInternalValue(exec->globalData(), jsNaN());
}
-DateInstance::DateInstance(ExecState*, NonNullPassRefPtr<Structure> structure, double time)
- : JSWrapperObject(structure)
+DateInstance::DateInstance(ExecState* exec, NonNullPassRefPtr<Structure> structure, double time)
+ : JSWrapperObject(exec->globalData(), structure)
{
- setInternalValue(jsNumber(timeClip(time)));
+ setInternalValue(exec->globalData(), jsNumber(timeClip(time)));
}
DateInstance::DateInstance(ExecState* exec, double time)
- : JSWrapperObject(exec->lexicalGlobalObject()->dateStructure())
+ : JSWrapperObject(exec->globalData(), exec->lexicalGlobalObject()->dateStructure())
{
- setInternalValue(jsNumber(timeClip(time)));
+ setInternalValue(exec->globalData(), jsNumber(timeClip(time)));
}
const GregorianDateTime* DateInstance::calculateGregorianDateTime(ExecState* exec) const
diff --git a/Source/JavaScriptCore/runtime/DatePrototype.cpp b/Source/JavaScriptCore/runtime/DatePrototype.cpp
index 085cb33..5838b60 100644
--- a/Source/JavaScriptCore/runtime/DatePrototype.cpp
+++ b/Source/JavaScriptCore/runtime/DatePrototype.cpp
@@ -433,7 +433,7 @@ DatePrototype::DatePrototype(ExecState* exec, JSGlobalObject* globalObject, NonN
: DateInstance(exec, structure)
{
// The constructor will be added later, after DateConstructor has been built.
- putAnonymousValue(0, globalObject);
+ putAnonymousValue(exec->globalData(), 0, globalObject);
}
bool DatePrototype::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
@@ -845,7 +845,7 @@ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState* exec)
double milli = timeClip(exec->argument(0).toNumber(exec));
JSValue result = jsNumber(milli);
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -860,7 +860,7 @@ static EncodedJSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse,
if (!exec->argumentCount() || isnan(milli)) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -877,12 +877,12 @@ static EncodedJSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse,
gregorianDateTime.copyFrom(*other);
if (!fillStructuresUsingTimeArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, inputIsUTC));
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -895,7 +895,7 @@ static EncodedJSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse,
DateInstance* thisDateObj = asDateInstance(thisValue);
if (!exec->argumentCount()) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -917,12 +917,12 @@ static EncodedJSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse,
if (!fillStructuresUsingDateArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, inputIsUTC));
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -1019,7 +1019,7 @@ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec)
DateInstance* thisDateObj = asDateInstance(thisValue);
if (!exec->argumentCount()) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
@@ -1041,13 +1041,13 @@ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec)
double year = exec->argument(0).toIntegerPreserveNaN(exec);
if (!isfinite(year)) {
JSValue result = jsNaN();
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
gregorianDateTime.year = toInt32((year > 99 || year < 0) ? year - 1900 : year);
JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, false));
- thisDateObj->setInternalValue(result);
+ thisDateObj->setInternalValue(exec->globalData(), result);
return JSValue::encode(result);
}
diff --git a/Source/JavaScriptCore/runtime/Error.cpp b/Source/JavaScriptCore/runtime/Error.cpp
index 227e9ec..b84f5ea 100644
--- a/Source/JavaScriptCore/runtime/Error.cpp
+++ b/Source/JavaScriptCore/runtime/Error.cpp
@@ -201,7 +201,7 @@ private:
UString m_message;
};
-COMPILE_ASSERT(sizeof(StrictModeTypeErrorFunction) <= sizeof(CollectorCell), sizeof_StrictModeTypeErrorFunction_must_be_less_than_CollectorCell);
+ASSERT_CLASS_FITS_IN_CELL(StrictModeTypeErrorFunction);
JSValue createTypeErrorFunction(ExecState* exec, const UString& message)
{
diff --git a/Source/JavaScriptCore/runtime/ErrorConstructor.cpp b/Source/JavaScriptCore/runtime/ErrorConstructor.cpp
index 4326a4d..2e53b95 100644
--- a/Source/JavaScriptCore/runtime/ErrorConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/ErrorConstructor.cpp
@@ -33,8 +33,8 @@ ErrorConstructor::ErrorConstructor(ExecState* exec, JSGlobalObject* globalObject
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, errorPrototype->classInfo()->className))
{
// ECMA 15.11.3.1 Error.prototype
- putDirectWithoutTransition(exec->propertyNames().prototype, errorPrototype, DontEnum | DontDelete | ReadOnly);
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, errorPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum);
}
// ECMA 15.9.3
diff --git a/Source/JavaScriptCore/runtime/ErrorInstance.cpp b/Source/JavaScriptCore/runtime/ErrorInstance.cpp
index 0f3153c..a6208d5 100644
--- a/Source/JavaScriptCore/runtime/ErrorInstance.cpp
+++ b/Source/JavaScriptCore/runtime/ErrorInstance.cpp
@@ -29,14 +29,14 @@ ErrorInstance::ErrorInstance(JSGlobalData* globalData, NonNullPassRefPtr<Structu
: JSObject(structure)
, m_appendSourceToMessage(false)
{
- putDirect(globalData->propertyNames->message, jsString(globalData, ""));
+ putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, ""));
}
ErrorInstance::ErrorInstance(JSGlobalData* globalData, NonNullPassRefPtr<Structure> structure, const UString& message)
: JSObject(structure)
, m_appendSourceToMessage(false)
{
- putDirect(globalData->propertyNames->message, jsString(globalData, message));
+ putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, message));
}
ErrorInstance* ErrorInstance::create(JSGlobalData* globalData, NonNullPassRefPtr<Structure> structure, const UString& message)
diff --git a/Source/JavaScriptCore/runtime/ErrorPrototype.cpp b/Source/JavaScriptCore/runtime/ErrorPrototype.cpp
index d8fc829..b4e0a7c 100644
--- a/Source/JavaScriptCore/runtime/ErrorPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/ErrorPrototype.cpp
@@ -41,7 +41,7 @@ ErrorPrototype::ErrorPrototype(ExecState* exec, JSGlobalObject* globalObject, No
{
// The constructor will be added later in ErrorConstructor's constructor
- putDirectWithoutTransition(exec->propertyNames().name, jsNontrivialString(exec, "Error"), DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().name, jsNontrivialString(exec, "Error"), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().toString, errorProtoFuncToString), DontEnum);
}
diff --git a/Source/JavaScriptCore/runtime/FunctionConstructor.cpp b/Source/JavaScriptCore/runtime/FunctionConstructor.cpp
index 45b4802..933b11f 100644
--- a/Source/JavaScriptCore/runtime/FunctionConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/FunctionConstructor.cpp
@@ -40,10 +40,10 @@ ASSERT_CLASS_FITS_IN_CELL(FunctionConstructor);
FunctionConstructor::FunctionConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, FunctionPrototype* functionPrototype)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, functionPrototype->classInfo()->className))
{
- putDirectWithoutTransition(exec->propertyNames().prototype, functionPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, functionPrototype, DontEnum | DontDelete | ReadOnly);
// Number of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
}
static EncodedJSValue JSC_HOST_CALL constructWithFunctionConstructor(ExecState* exec)
diff --git a/Source/JavaScriptCore/runtime/FunctionPrototype.cpp b/Source/JavaScriptCore/runtime/FunctionPrototype.cpp
index cd7739d..e651538 100644
--- a/Source/JavaScriptCore/runtime/FunctionPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/FunctionPrototype.cpp
@@ -41,7 +41,7 @@ static EncodedJSValue JSC_HOST_CALL functionProtoFuncCall(ExecState*);
FunctionPrototype::FunctionPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure)
: InternalFunction(&exec->globalData(), globalObject, structure, exec->propertyNames().nullIdentifier)
{
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);
}
void FunctionPrototype::addFunctionProperties(ExecState* exec, JSGlobalObject* globalObject, Structure* prototypeFunctionStructure, NativeFunctionWrapper** callFunction, NativeFunctionWrapper** applyFunction)
diff --git a/Source/JavaScriptCore/runtime/GCActivityCallback.h b/Source/JavaScriptCore/runtime/GCActivityCallback.h
index 862b4df..9b6ef04 100644
--- a/Source/JavaScriptCore/runtime/GCActivityCallback.h
+++ b/Source/JavaScriptCore/runtime/GCActivityCallback.h
@@ -32,6 +32,10 @@
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
+#if PLATFORM(CF)
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
namespace JSC {
class Heap;
@@ -58,6 +62,12 @@ public:
void operator()();
void synchronize();
+#if PLATFORM(CF)
+protected:
+ DefaultGCActivityCallback(Heap*, CFRunLoopRef);
+ void commonConstructor(Heap*, CFRunLoopRef);
+#endif
+
private:
OwnPtr<DefaultGCActivityCallbackPlatformData*> d;
};
diff --git a/Source/JavaScriptCore/runtime/GCActivityCallbackCF.cpp b/Source/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
index 414a0ad..211c423 100644
--- a/Source/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
+++ b/Source/JavaScriptCore/runtime/GCActivityCallbackCF.cpp
@@ -35,7 +35,6 @@
#include "JSLock.h"
#include <wtf/RetainPtr.h>
#include <wtf/WTFThreadData.h>
-#include <CoreFoundation/CoreFoundation.h>
#if !PLATFORM(CF)
#error "This file should only be used on CF platforms."
@@ -54,22 +53,22 @@ struct DefaultGCActivityCallbackPlatformData {
const CFTimeInterval decade = 60 * 60 * 24 * 365 * 10;
const CFTimeInterval triggerInterval = 2; // seconds
-void DefaultGCActivityCallbackPlatformData::trigger(CFRunLoopTimerRef, void *info)
+void DefaultGCActivityCallbackPlatformData::trigger(CFRunLoopTimerRef timer, void *info)
{
Heap* heap = static_cast<Heap*>(info);
APIEntryShim shim(heap->globalData());
heap->collectAllGarbage();
+ CFRunLoopTimerSetNextFireDate(timer, CFAbsoluteTimeGetCurrent() + decade);
}
DefaultGCActivityCallback::DefaultGCActivityCallback(Heap* heap)
{
- d = adoptPtr(new DefaultGCActivityCallbackPlatformData);
+ commonConstructor(heap, CFRunLoopGetCurrent());
+}
- memset(&d->context, '\0', sizeof(CFRunLoopTimerContext));
- d->context.info = heap;
- d->runLoop = CFRunLoopGetCurrent();
- d->timer.adoptCF(CFRunLoopTimerCreate(0, decade, decade, 0, 0, DefaultGCActivityCallbackPlatformData::trigger, &d->context));
- CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
+DefaultGCActivityCallback::DefaultGCActivityCallback(Heap* heap, CFRunLoopRef runLoop)
+{
+ commonConstructor(heap, runLoop);
}
DefaultGCActivityCallback::~DefaultGCActivityCallback()
@@ -81,6 +80,17 @@ DefaultGCActivityCallback::~DefaultGCActivityCallback()
d->timer = 0;
}
+void DefaultGCActivityCallback::commonConstructor(Heap* heap, CFRunLoopRef runLoop)
+{
+ d = adoptPtr(new DefaultGCActivityCallbackPlatformData);
+
+ memset(&d->context, 0, sizeof(CFRunLoopTimerContext));
+ d->context.info = heap;
+ d->runLoop = runLoop;
+ d->timer.adoptCF(CFRunLoopTimerCreate(0, decade, decade, 0, 0, DefaultGCActivityCallbackPlatformData::trigger, &d->context));
+ CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes);
+}
+
void DefaultGCActivityCallback::operator()()
{
CFRunLoopTimerSetNextFireDate(d->timer.get(), CFAbsoluteTimeGetCurrent() + triggerInterval);
diff --git a/Source/JavaScriptCore/runtime/GetterSetter.cpp b/Source/JavaScriptCore/runtime/GetterSetter.cpp
index 7e54053..2b9f444 100644
--- a/Source/JavaScriptCore/runtime/GetterSetter.cpp
+++ b/Source/JavaScriptCore/runtime/GetterSetter.cpp
@@ -33,9 +33,9 @@ void GetterSetter::markChildren(MarkStack& markStack)
JSCell::markChildren(markStack);
if (m_getter)
- markStack.append(m_getter);
+ markStack.append(&m_getter);
if (m_setter)
- markStack.append(m_setter);
+ markStack.append(&m_setter);
}
bool GetterSetter::isGetterSetter() const
diff --git a/Source/JavaScriptCore/runtime/GetterSetter.h b/Source/JavaScriptCore/runtime/GetterSetter.h
index e7b1938..ffab94d 100644
--- a/Source/JavaScriptCore/runtime/GetterSetter.h
+++ b/Source/JavaScriptCore/runtime/GetterSetter.h
@@ -38,17 +38,15 @@ namespace JSC {
public:
GetterSetter(ExecState* exec)
: JSCell(exec->globalData().getterSetterStructure.get())
- , m_getter(0)
- , m_setter(0)
{
}
virtual void markChildren(MarkStack&);
- JSObject* getter() const { return m_getter; }
- void setGetter(JSObject* getter) { m_getter = getter; }
- JSObject* setter() const { return m_setter; }
- void setSetter(JSObject* setter) { m_setter = setter; }
+ JSObject* getter() const { return m_getter.get(); }
+ void setGetter(JSGlobalData& globalData, JSObject* getter) { m_getter.set(globalData, this, getter); }
+ JSObject* setter() const { return m_setter.get(); }
+ void setSetter(JSGlobalData& globalData, JSObject* setter) { m_setter.set(globalData, this, setter); }
static PassRefPtr<Structure> createStructure(JSValue prototype)
{
return Structure::create(prototype, TypeInfo(GetterSetterType, OverridesMarkChildren), AnonymousSlotCount);
@@ -56,8 +54,8 @@ namespace JSC {
private:
virtual bool isGetterSetter() const;
- JSObject* m_getter;
- JSObject* m_setter;
+ WriteBarrier<JSObject> m_getter;
+ WriteBarrier<JSObject> m_setter;
};
GetterSetter* asGetterSetter(JSValue);
diff --git a/Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp b/Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp
index 3ad4644..27207e2 100644
--- a/Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp
+++ b/Source/JavaScriptCore/runtime/GlobalEvalFunction.cpp
@@ -34,7 +34,7 @@ ASSERT_CLASS_FITS_IN_CELL(GlobalEvalFunction);
GlobalEvalFunction::GlobalEvalFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, int len, const Identifier& name, NativeFunction function, JSGlobalObject* cachedGlobalObject)
: PrototypeFunction(exec, globalObject, structure, len, name, function)
- , m_cachedGlobalObject(cachedGlobalObject)
+ , m_cachedGlobalObject(exec->globalData(), this, cachedGlobalObject)
{
ASSERT_ARG(cachedGlobalObject, cachedGlobalObject);
}
@@ -42,7 +42,7 @@ GlobalEvalFunction::GlobalEvalFunction(ExecState* exec, JSGlobalObject* globalOb
void GlobalEvalFunction::markChildren(MarkStack& markStack)
{
PrototypeFunction::markChildren(markStack);
- markStack.append(m_cachedGlobalObject);
+ markStack.append(&m_cachedGlobalObject);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/GlobalEvalFunction.h b/Source/JavaScriptCore/runtime/GlobalEvalFunction.h
index b889ca9..13f0946 100644
--- a/Source/JavaScriptCore/runtime/GlobalEvalFunction.h
+++ b/Source/JavaScriptCore/runtime/GlobalEvalFunction.h
@@ -33,7 +33,7 @@ namespace JSC {
class GlobalEvalFunction : public PrototypeFunction {
public:
GlobalEvalFunction(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, int len, const Identifier&, NativeFunction, JSGlobalObject* expectedThisObject);
- JSGlobalObject* cachedGlobalObject() const { return m_cachedGlobalObject; }
+ JSGlobalObject* cachedGlobalObject() const { return m_cachedGlobalObject.get(); }
static PassRefPtr<Structure> createStructure(JSValue prototype)
{
@@ -46,7 +46,7 @@ namespace JSC {
private:
virtual void markChildren(MarkStack&);
- JSGlobalObject* m_cachedGlobalObject;
+ WriteBarrier<JSGlobalObject> m_cachedGlobalObject;
};
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/Heap.cpp b/Source/JavaScriptCore/runtime/Heap.cpp
index 3966324..c05233c 100644
--- a/Source/JavaScriptCore/runtime/Heap.cpp
+++ b/Source/JavaScriptCore/runtime/Heap.cpp
@@ -21,7 +21,8 @@
#include "config.h"
#include "Heap.h"
-#include "CollectorHeapIterator.h"
+#include "CodeBlock.h"
+#include "ConservativeSet.h"
#include "GCActivityCallback.h"
#include "GCHandle.h"
#include "Interpreter.h"
@@ -30,14 +31,19 @@
#include "JSLock.h"
#include "JSONObject.h"
#include "Tracing.h"
+#include <algorithm>
#define COLLECT_ON_EVERY_ALLOCATION 0
+using namespace std;
+
namespace JSC {
+const size_t minBytesPerCycle = 512 * 1024;
+
Heap::Heap(JSGlobalData* globalData)
- : m_markedSpace(globalData)
- , m_operationInProgress(NoOperation)
+ : m_operationInProgress(NoOperation)
+ , m_markedSpace(globalData)
, m_markListSet(0)
, m_activityCallback(DefaultGCActivityCallback::create(this))
, m_globalData(globalData)
@@ -71,14 +77,12 @@ void Heap::destroy()
delete m_markListSet;
m_markListSet = 0;
- ProtectCountSet protectedValuesCopy = m_protectedValues;
- m_markedSpace.destroy(protectedValuesCopy);
- ASSERT(!protectedObjectCount());
+ m_markedSpace.destroy();
m_globalData = 0;
}
-void Heap::recordExtraCost(size_t cost)
+void Heap::reportExtraMemoryCostSlowCase(size_t cost)
{
// Our frequency of garbage collection tries to balance memory use against speed
// by collecting based on the number of newly created values. However, for values
@@ -91,20 +95,8 @@ void Heap::recordExtraCost(size_t cost)
// if a large value survives one garbage collection, there is not much point to
// collecting more frequently as long as it stays alive.
- if (m_extraCost > maxExtraCost && m_extraCost > m_markedSpace.size() / 2) {
- JAVASCRIPTCORE_GC_BEGIN();
-
- markRoots();
-
- JAVASCRIPTCORE_GC_MARKED();
-
- m_markedSpace.reset();
- m_extraCost = 0;
-
- JAVASCRIPTCORE_GC_END();
-
- (*m_activityCallback)();
- }
+ if (m_extraCost > maxExtraCost && m_extraCost > m_markedSpace.capacity() / 2)
+ collectAllGarbage();
m_extraCost += cost;
}
@@ -113,7 +105,7 @@ void* Heap::allocate(size_t s)
ASSERT(globalData()->identifierTable == wtfThreadData().currentIdentifierTable());
ASSERT(JSLock::lockCount() > 0);
ASSERT(JSLock::currentThreadIsHoldingLock());
- ASSERT_UNUSED(s, s <= HeapConstants::cellSize);
+ ASSERT_UNUSED(s, s <= MarkedBlock::CELL_SIZE);
ASSERT(m_operationInProgress == NoOperation);
#if COLLECT_ON_EVERY_ALLOCATION
@@ -124,34 +116,18 @@ void* Heap::allocate(size_t s)
m_operationInProgress = Allocation;
void* result = m_markedSpace.allocate(s);
m_operationInProgress = NoOperation;
-
if (!result) {
- JAVASCRIPTCORE_GC_BEGIN();
-
- markRoots();
-
- JAVASCRIPTCORE_GC_MARKED();
-
- m_markedSpace.reset();
- m_extraCost = 0;
-
- JAVASCRIPTCORE_GC_END();
-
- (*m_activityCallback)();
+ reset(DoNotSweep);
m_operationInProgress = Allocation;
result = m_markedSpace.allocate(s);
m_operationInProgress = NoOperation;
}
+
ASSERT(result);
return result;
}
-void Heap::markConservatively(ConservativeSet& conservativeSet, void* start, void* end)
-{
- m_markedSpace.markConservatively(conservativeSet, start, end);
-}
-
void Heap::updateWeakGCHandles()
{
for (unsigned i = 0; i < m_weakGCHandlePools.size(); ++i)
@@ -163,7 +139,7 @@ void WeakGCHandlePool::update()
for (unsigned i = 1; i < WeakGCHandlePool::numPoolEntries; ++i) {
if (m_entries[i].isValidPtr()) {
JSCell* cell = m_entries[i].get();
- if (!cell || !Heap::isCellMarked(cell))
+ if (!cell || !Heap::isMarked(cell))
m_entries[i].invalidate();
}
}
@@ -208,7 +184,7 @@ void Heap::markProtectedObjects(MarkStack& markStack)
{
ProtectCountSet::iterator end = m_protectedValues.end();
for (ProtectCountSet::iterator it = m_protectedValues.begin(); it != end; ++it)
- markStack.append(it->first);
+ markStack.deprecatedAppend(&it->first);
}
void Heap::pushTempSortVector(Vector<ValueStringPair>* tempVector)
@@ -233,11 +209,16 @@ void Heap::markTempSortVectors(MarkStack& markStack)
Vector<ValueStringPair>::iterator vectorEnd = tempSortingVector->end();
for (Vector<ValueStringPair>::iterator vectorIt = tempSortingVector->begin(); vectorIt != vectorEnd; ++vectorIt) {
if (vectorIt->first)
- markStack.append(vectorIt->first);
+ markStack.deprecatedAppend(&vectorIt->first);
}
}
}
-
+
+inline RegisterFile& Heap::registerFile()
+{
+ return m_globalData->interpreter->registerFile();
+}
+
void Heap::markRoots()
{
#ifndef NDEBUG
@@ -256,12 +237,11 @@ void Heap::markRoots()
// We gather the conservative set before clearing mark bits, because
// conservative gathering uses the mark bits from our last mark pass to
// determine whether a reference is valid.
- ConservativeSet conservativeSet;
+ ConservativeSet conservativeSet(this);
m_machineStackMarker.markMachineStackConservatively(conservativeSet);
- m_globalData->interpreter->registerFile().markCallFrames(conservativeSet, this);
+ conservativeSet.add(registerFile().start(), registerFile().end());
- // Reset mark bits.
- m_markedSpace.clearMarkBits();
+ m_markedSpace.clearMarks();
MarkStack& markStack = m_markStack;
conservativeSet.mark(markStack);
@@ -274,12 +254,17 @@ void Heap::markRoots()
// Mark temporary vector for Array sorting
markTempSortVectors(markStack);
markStack.drain();
+
+ HashSet<GlobalCodeBlock*>::const_iterator end = m_codeBlocks.end();
+ for (HashSet<GlobalCodeBlock*>::const_iterator it = m_codeBlocks.begin(); it != end; ++it)
+ (*it)->markAggregate(markStack);
+ markStack.drain();
// Mark misc. other roots.
if (m_markListSet && m_markListSet->size())
MarkedArgumentBuffer::markLists(markStack, *m_markListSet);
if (m_globalData->exception)
- markStack.append(m_globalData->exception);
+ markStack.append(&m_globalData->exception);
if (m_globalData->firstStringifierToMark)
JSONObject::markStringifiers(markStack, m_globalData->firstStringifierToMark);
markStack.drain();
@@ -301,39 +286,30 @@ size_t Heap::objectCount() const
return m_markedSpace.objectCount();
}
-MarkedSpace::Statistics Heap::statistics() const
+size_t Heap::size() const
{
- return m_markedSpace.statistics();
+ return m_markedSpace.size();
}
-size_t Heap::size() const
+size_t Heap::capacity() const
{
- return m_markedSpace.size();
+ return m_markedSpace.capacity();
}
size_t Heap::globalObjectCount()
{
- size_t count = 0;
- if (JSGlobalObject* head = m_globalData->head) {
- JSGlobalObject* o = head;
- do {
- ++count;
- o = o->next();
- } while (o != head);
- }
- return count;
+ return m_globalData->globalObjects.uncheckedSize();
}
size_t Heap::protectedGlobalObjectCount()
{
size_t count = 0;
- if (JSGlobalObject* head = m_globalData->head) {
- JSGlobalObject* o = head;
- do {
- if (m_protectedValues.contains(o))
- ++count;
- o = o->next();
- } while (o != head);
+
+ GlobalObjectMap& map = m_globalData->globalObjects;
+ GlobalObjectMap::iterator end = map.uncheckedEnd();
+ for (GlobalObjectMap::iterator it = map.uncheckedBegin(); it != end; ++it) {
+ if (map.isValid(it) && m_protectedValues.contains(it->second.get()))
+ ++count;
}
return count;
@@ -344,7 +320,23 @@ size_t Heap::protectedObjectCount()
return m_protectedValues.size();
}
-static const char* typeName(JSCell* cell)
+class TypeCounter {
+public:
+ TypeCounter();
+ void operator()(JSCell*);
+ PassOwnPtr<TypeCountSet> take();
+
+private:
+ const char* typeName(JSCell*);
+ OwnPtr<TypeCountSet> m_typeCountSet;
+};
+
+inline TypeCounter::TypeCounter()
+ : m_typeCountSet(new TypeCountSet)
+{
+}
+
+inline const char* TypeCounter::typeName(JSCell* cell)
{
if (cell->isString())
return "string";
@@ -360,27 +352,32 @@ static const char* typeName(JSCell* cell)
return info ? info->className : "Object";
}
-HashCountedSet<const char*>* Heap::protectedObjectTypeCounts()
+inline void TypeCounter::operator()(JSCell* cell)
+{
+ m_typeCountSet->add(typeName(cell));
+}
+
+inline PassOwnPtr<TypeCountSet> TypeCounter::take()
+{
+ return m_typeCountSet.release();
+}
+
+PassOwnPtr<TypeCountSet> Heap::protectedObjectTypeCounts()
{
- HashCountedSet<const char*>* counts = new HashCountedSet<const char*>;
+ TypeCounter typeCounter;
ProtectCountSet::iterator end = m_protectedValues.end();
for (ProtectCountSet::iterator it = m_protectedValues.begin(); it != end; ++it)
- counts->add(typeName(it->first));
+ typeCounter(it->first);
- return counts;
+ return typeCounter.take();
}
-HashCountedSet<const char*>* Heap::objectTypeCounts()
+PassOwnPtr<TypeCountSet> Heap::objectTypeCounts()
{
- HashCountedSet<const char*>* counts = new HashCountedSet<const char*>;
-
- LiveObjectIterator it = primaryHeapBegin();
- LiveObjectIterator heapEnd = primaryHeapEnd();
- for ( ; it != heapEnd; ++it)
- counts->add(typeName(*it));
-
- return counts;
+ TypeCounter typeCounter;
+ forEach(typeCounter);
+ return typeCounter.take();
}
bool Heap::isBusy()
@@ -390,6 +387,11 @@ bool Heap::isBusy()
void Heap::collectAllGarbage()
{
+ reset(DoSweep);
+}
+
+void Heap::reset(SweepToggle sweepToggle)
+{
ASSERT(globalData()->identifierTable == wtfThreadData().currentIdentifierTable());
JAVASCRIPTCORE_GC_BEGIN();
@@ -398,22 +400,19 @@ void Heap::collectAllGarbage()
JAVASCRIPTCORE_GC_MARKED();
m_markedSpace.reset();
- m_markedSpace.sweep();
m_extraCost = 0;
- JAVASCRIPTCORE_GC_END();
+ if (sweepToggle == DoSweep) {
+ m_markedSpace.sweep();
+ m_markedSpace.shrink();
+ }
- (*m_activityCallback)();
-}
+ size_t proportionalBytes = static_cast<size_t>(1.5 * m_markedSpace.size());
+ m_markedSpace.setHighWaterMark(max(proportionalBytes, minBytesPerCycle));
-LiveObjectIterator Heap::primaryHeapBegin()
-{
- return m_markedSpace.primaryHeapBegin();
-}
+ JAVASCRIPTCORE_GC_END();
-LiveObjectIterator Heap::primaryHeapEnd()
-{
- return m_markedSpace.primaryHeapEnd();
+ (*m_activityCallback)();
}
void Heap::setActivityCallback(PassOwnPtr<GCActivityCallback> activityCallback)
diff --git a/Source/JavaScriptCore/runtime/Heap.h b/Source/JavaScriptCore/runtime/Heap.h
index f7f4deb..6591a5b 100644
--- a/Source/JavaScriptCore/runtime/Heap.h
+++ b/Source/JavaScriptCore/runtime/Heap.h
@@ -27,89 +27,86 @@
#include <wtf/Forward.h>
#include <wtf/HashSet.h>
-#define ASSERT_CLASS_FITS_IN_CELL(class) COMPILE_ASSERT(sizeof(class) <= CELL_SIZE, class_fits_in_cell)
-
namespace JSC {
- class JSValue;
- class UString;
class GCActivityCallback;
+ class GlobalCodeBlock;
class JSCell;
class JSGlobalData;
class JSValue;
+ class JSValue;
class LiveObjectIterator;
- class MarkedArgumentBuffer;
class MarkStack;
+ class MarkedArgumentBuffer;
+ class RegisterFile;
+ class UString;
class WeakGCHandlePool;
typedef std::pair<JSValue, UString> ValueStringPair;
+ typedef HashCountedSet<JSCell*> ProtectCountSet;
+ typedef HashCountedSet<const char*> TypeCountSet;
enum OperationInProgress { NoOperation, Allocation, Collection };
class Heap {
WTF_MAKE_NONCOPYABLE(Heap);
public:
- void destroy();
+ static Heap* heap(JSValue); // 0 for immediate values
+ static Heap* heap(JSCell*);
- void* allocate(size_t);
+ static bool isMarked(const JSCell*);
+ static bool testAndSetMarked(const JSCell*);
+ static void setMarked(JSCell*);
+
+ Heap(JSGlobalData*);
+ ~Heap();
+ void destroy(); // JSGlobalData must call destroy() before ~Heap().
- bool isBusy(); // true if an allocation or collection is in progress
- void collectAllGarbage();
+ JSGlobalData* globalData() const { return m_globalData; }
+ MarkedSpace& markedSpace() { return m_markedSpace; }
+ MachineStackMarker& machineStackMarker() { return m_machineStackMarker; }
GCActivityCallback* activityCallback();
void setActivityCallback(PassOwnPtr<GCActivityCallback>);
- static const size_t minExtraCost = 256;
- static const size_t maxExtraCost = 1024 * 1024;
+ bool isBusy(); // true if an allocation or collection is in progress
+ void* allocate(size_t);
+ void collectAllGarbage();
void reportExtraMemoryCost(size_t cost);
- size_t objectCount() const;
- MarkedSpace::Statistics statistics() const;
- size_t size() const;
-
void protect(JSValue);
- // Returns true if the value is no longer protected by any protect pointers
- // (though it may still be alive due to heap/stack references).
- bool unprotect(JSValue);
+ bool unprotect(JSValue); // True when the protect count drops to 0.
- static Heap* heap(JSValue); // 0 for immediate values
- static Heap* heap(JSCell*);
+ bool contains(void*);
+ size_t size() const;
+ size_t capacity() const;
+ size_t objectCount() const;
size_t globalObjectCount();
size_t protectedObjectCount();
size_t protectedGlobalObjectCount();
- HashCountedSet<const char*>* protectedObjectTypeCounts();
- HashCountedSet<const char*>* objectTypeCounts();
-
- static bool isCellMarked(const JSCell*);
- static bool checkMarkCell(const JSCell*);
- static void markCell(JSCell*);
+ PassOwnPtr<TypeCountSet> protectedObjectTypeCounts();
+ PassOwnPtr<TypeCountSet> objectTypeCounts();
WeakGCHandle* addWeakGCHandle(JSCell*);
- void markConservatively(ConservativeSet&, void* start, void* end);
-
- void pushTempSortVector(WTF::Vector<ValueStringPair>*);
- void popTempSortVector(WTF::Vector<ValueStringPair>*);
+ void pushTempSortVector(Vector<ValueStringPair>*);
+ void popTempSortVector(Vector<ValueStringPair>*);
+
+ HashSet<GlobalCodeBlock*>& codeBlocks() { return m_codeBlocks; }
HashSet<MarkedArgumentBuffer*>& markListSet() { if (!m_markListSet) m_markListSet = new HashSet<MarkedArgumentBuffer*>; return *m_markListSet; }
-
- JSGlobalData* globalData() const { return m_globalData; }
- LiveObjectIterator primaryHeapBegin();
- LiveObjectIterator primaryHeapEnd();
+ template <typename Functor> void forEach(Functor&);
- MachineStackMarker& machineStackMarker() { return m_machineStackMarker; }
-
- MarkedSpace& markedSpace() { return m_markedSpace; }
-
private:
friend class JSGlobalData;
- Heap(JSGlobalData*);
- ~Heap();
- void recordExtraCost(size_t);
+ static const size_t minExtraCost = 256;
+ static const size_t maxExtraCost = 1024 * 1024;
+
+ void reportExtraMemoryCostSlowCase(size_t);
void markRoots();
void markProtectedObjects(MarkStack&);
@@ -117,13 +114,19 @@ namespace JSC {
void updateWeakGCHandles();
WeakGCHandlePool* weakGCHandlePool(size_t index);
+
+ enum SweepToggle { DoNotSweep, DoSweep };
+ void reset(SweepToggle);
+
+ RegisterFile& registerFile();
- MarkedSpace m_markedSpace;
OperationInProgress m_operationInProgress;
+ MarkedSpace m_markedSpace;
ProtectCountSet m_protectedValues;
- WTF::Vector<PageAllocationAligned> m_weakGCHandlePools;
- WTF::Vector<WTF::Vector<ValueStringPair>* > m_tempSortingVectors;
+ Vector<PageAllocationAligned> m_weakGCHandlePools;
+ Vector<Vector<ValueStringPair>* > m_tempSortingVectors;
+ HashSet<GlobalCodeBlock*> m_codeBlocks;
HashSet<MarkedArgumentBuffer*>* m_markListSet;
@@ -137,25 +140,30 @@ namespace JSC {
size_t m_extraCost;
};
- inline bool Heap::isCellMarked(const JSCell* cell)
+ inline bool Heap::isMarked(const JSCell* cell)
{
- return MarkedSpace::isCellMarked(cell);
+ return MarkedSpace::isMarked(cell);
}
- inline bool Heap::checkMarkCell(const JSCell* cell)
+ inline bool Heap::testAndSetMarked(const JSCell* cell)
{
- return MarkedSpace::checkMarkCell(cell);
+ return MarkedSpace::testAndSetMarked(cell);
}
- inline void Heap::markCell(JSCell* cell)
+ inline void Heap::setMarked(JSCell* cell)
{
- MarkedSpace::markCell(cell);
+ MarkedSpace::setMarked(cell);
+ }
+
+ inline bool Heap::contains(void* p)
+ {
+ return m_markedSpace.contains(p);
}
inline void Heap::reportExtraMemoryCost(size_t cost)
{
if (cost > minExtraCost)
- recordExtraCost(cost);
+ reportExtraMemoryCostSlowCase(cost);
}
inline WeakGCHandlePool* Heap::weakGCHandlePool(size_t index)
@@ -163,6 +171,11 @@ namespace JSC {
return static_cast<WeakGCHandlePool*>(m_weakGCHandlePools[index].base());
}
+ template <typename Functor> inline void Heap::forEach(Functor& functor)
+ {
+ m_markedSpace.forEach(functor);
+ }
+
} // namespace JSC
#endif // Heap_h
diff --git a/Source/JavaScriptCore/runtime/InternalFunction.cpp b/Source/JavaScriptCore/runtime/InternalFunction.cpp
index 0a8d9de..f19ae0d 100644
--- a/Source/JavaScriptCore/runtime/InternalFunction.cpp
+++ b/Source/JavaScriptCore/runtime/InternalFunction.cpp
@@ -46,7 +46,7 @@ InternalFunction::InternalFunction(NonNullPassRefPtr<Structure> structure)
InternalFunction::InternalFunction(JSGlobalData* globalData, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, const Identifier& name)
: JSObjectWithGlobalObject(globalObject, structure)
{
- putDirect(globalData->propertyNames->name, jsString(globalData, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
+ putDirect(*globalData, globalData->propertyNames->name, jsString(globalData, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
}
const UString& InternalFunction::name(ExecState* exec)
diff --git a/Source/JavaScriptCore/runtime/JSAPIValueWrapper.h b/Source/JavaScriptCore/runtime/JSAPIValueWrapper.h
index 10ded4c..a113e91 100644
--- a/Source/JavaScriptCore/runtime/JSAPIValueWrapper.h
+++ b/Source/JavaScriptCore/runtime/JSAPIValueWrapper.h
@@ -31,7 +31,7 @@ namespace JSC {
class JSAPIValueWrapper : public JSCell {
friend JSValue jsAPIValueWrapper(ExecState*, JSValue);
public:
- JSValue value() const { return m_value; }
+ JSValue value() const { return m_value.get(); }
virtual bool isAPIValueWrapper() const { return true; }
@@ -44,12 +44,12 @@ namespace JSC {
private:
JSAPIValueWrapper(ExecState* exec, JSValue value)
: JSCell(exec->globalData().apiWrapperStructure.get())
- , m_value(value)
{
+ m_value.set(exec->globalData(), this, value);
ASSERT(!value.isCell());
}
- JSValue m_value;
+ WriteBarrier<Unknown> m_value;
};
inline JSValue jsAPIValueWrapper(ExecState* exec, JSValue value)
diff --git a/Source/JavaScriptCore/runtime/JSActivation.cpp b/Source/JavaScriptCore/runtime/JSActivation.cpp
index 428403d..6fb5ced 100644
--- a/Source/JavaScriptCore/runtime/JSActivation.cpp
+++ b/Source/JavaScriptCore/runtime/JSActivation.cpp
@@ -61,12 +61,12 @@ void JSActivation::markChildren(MarkStack& markStack)
size_t numParametersMinusThis = d()->functionExecutable->parameterCount();
size_t count = numParametersMinusThis;
- markStack.appendValues(registerArray, count);
+ markStack.deprecatedAppendValues(registerArray, count);
size_t numVars = d()->functionExecutable->capturedVariableCount();
// Skip the call frame, which sits between the parameters and vars.
- markStack.appendValues(registerArray + count + RegisterFile::CallFrameHeaderSize, numVars, MayContainNullValues);
+ markStack.deprecatedAppendValues(registerArray + count + RegisterFile::CallFrameHeaderSize, numVars, MayContainNullValues);
}
inline bool JSActivation::symbolTableGet(const Identifier& propertyName, PropertySlot& slot)
@@ -132,8 +132,8 @@ bool JSActivation::getOwnPropertySlot(ExecState* exec, const Identifier& propert
if (symbolTableGet(propertyName, slot))
return true;
- if (JSValue* location = getDirectLocation(propertyName)) {
- slot.setValueSlot(location);
+ if (WriteBarrierBase<Unknown>* location = getDirectLocation(propertyName)) {
+ slot.setValue(location->get());
return true;
}
@@ -144,7 +144,7 @@ bool JSActivation::getOwnPropertySlot(ExecState* exec, const Identifier& propert
return false;
}
-void JSActivation::put(ExecState*, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
+void JSActivation::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
{
ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
@@ -155,7 +155,7 @@ void JSActivation::put(ExecState*, const Identifier& propertyName, JSValue value
// properties are non-standard extensions that other implementations do not
// expose in the activation object.
ASSERT(!hasGetterSetterProperties());
- putDirect(propertyName, value, 0, true, slot);
+ putDirect(exec->globalData(), propertyName, value, 0, true, slot);
}
// FIXME: Make this function honor ReadOnly (const) and DontEnum
diff --git a/Source/JavaScriptCore/runtime/JSArray.cpp b/Source/JavaScriptCore/runtime/JSArray.cpp
index 556603b..ded6d87 100644
--- a/Source/JavaScriptCore/runtime/JSArray.cpp
+++ b/Source/JavaScriptCore/runtime/JSArray.cpp
@@ -188,9 +188,9 @@ JSArray::JSArray(NonNullPassRefPtr<Structure> structure, unsigned initialLength,
#endif
m_storage->m_length = initialLength;
m_storage->m_numValuesInVector = 0;
- JSValue* vector = m_storage->m_vector;
+ WriteBarrier<Unknown>* vector = m_storage->m_vector;
for (size_t i = 0; i < initialCapacity; ++i)
- vector[i] = JSValue();
+ vector[i].clear();
}
checkConsistency();
@@ -198,7 +198,7 @@ JSArray::JSArray(NonNullPassRefPtr<Structure> structure, unsigned initialLength,
Heap::heap(this)->reportExtraMemoryCost(storageSize(initialCapacity));
}
-JSArray::JSArray(NonNullPassRefPtr<Structure> structure, const ArgList& list)
+JSArray::JSArray(JSGlobalData& globalData, NonNullPassRefPtr<Structure> structure, const ArgList& list)
: JSObject(structure)
{
unsigned initialCapacity = list.size();
@@ -225,12 +225,12 @@ JSArray::JSArray(NonNullPassRefPtr<Structure> structure, const ArgList& list)
#endif
size_t i = 0;
- JSValue* vector = m_storage->m_vector;
+ WriteBarrier<Unknown>* vector = m_storage->m_vector;
ArgList::const_iterator end = list.end();
for (ArgList::const_iterator it = list.begin(); it != end; ++it, ++i)
- vector[i] = *it;
+ vector[i].set(globalData, this, *it);
for (; i < initialStorage; i++)
- vector[i] = JSValue();
+ vector[i].clear();
checkConsistency();
@@ -257,16 +257,16 @@ bool JSArray::getOwnPropertySlot(ExecState* exec, unsigned i, PropertySlot& slot
}
if (i < m_vectorLength) {
- JSValue& valueSlot = storage->m_vector[i];
- if (valueSlot) {
- slot.setValueSlot(&valueSlot);
+ JSValue value = storage->m_vector[i].get();
+ if (value) {
+ slot.setValue(value);
return true;
}
} else if (SparseArrayValueMap* map = storage->m_sparseValueMap) {
if (i >= MIN_SPARSE_ARRAY_INDEX) {
SparseArrayValueMap::iterator it = map->find(i);
if (it != map->end()) {
- slot.setValueSlot(&it->second);
+ slot.setValue(it->second.get());
return true;
}
}
@@ -305,16 +305,16 @@ bool JSArray::getOwnPropertyDescriptor(ExecState* exec, const Identifier& proper
if (i >= storage->m_length)
return false;
if (i < m_vectorLength) {
- JSValue& value = storage->m_vector[i];
+ WriteBarrier<Unknown>& value = storage->m_vector[i];
if (value) {
- descriptor.setDescriptor(value, 0);
+ descriptor.setDescriptor(value.get(), 0);
return true;
}
} else if (SparseArrayValueMap* map = storage->m_sparseValueMap) {
if (i >= MIN_SPARSE_ARRAY_INDEX) {
SparseArrayValueMap::iterator it = map->find(i);
if (it != map->end()) {
- descriptor.setDescriptor(it->second, 0);
+ descriptor.setDescriptor(it->second.get(), 0);
return true;
}
}
@@ -359,13 +359,13 @@ void JSArray::put(ExecState* exec, unsigned i, JSValue value)
}
if (i < m_vectorLength) {
- JSValue& valueSlot = storage->m_vector[i];
+ WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];
if (valueSlot) {
- valueSlot = value;
+ valueSlot.set(exec->globalData(), this, value);
checkConsistency();
return;
}
- valueSlot = value;
+ valueSlot.set(exec->globalData(), this, value);
++storage->m_numValuesInVector;
checkConsistency();
return;
@@ -395,11 +395,11 @@ NEVER_INLINE void JSArray::putSlowCase(ExecState* exec, unsigned i, JSValue valu
storage->m_sparseValueMap = map;
}
- pair<SparseArrayValueMap::iterator, bool> result = map->add(i, value);
- if (!result.second) { // pre-existing entry
- result.first->second = value;
+ WriteBarrier<Unknown> temp;
+ pair<SparseArrayValueMap::iterator, bool> result = map->add(i, temp);
+ result.first->second.set(exec->globalData(), this, value);
+ if (!result.second) // pre-existing entry
return;
- }
size_t capacity = map->capacity();
if (capacity != storage->reportedMapCapacity) {
@@ -415,7 +415,7 @@ NEVER_INLINE void JSArray::putSlowCase(ExecState* exec, unsigned i, JSValue valu
if (!map || map->isEmpty()) {
if (increaseVectorLength(i + 1)) {
storage = m_storage;
- storage->m_vector[i] = value;
+ storage->m_vector[i].set(exec->globalData(), this, value);
++storage->m_numValuesInVector;
checkConsistency();
} else
@@ -457,18 +457,19 @@ NEVER_INLINE void JSArray::putSlowCase(ExecState* exec, unsigned i, JSValue valu
storage = m_storage;
unsigned vectorLength = m_vectorLength;
- JSValue* vector = storage->m_vector;
+ WriteBarrier<Unknown>* vector = storage->m_vector;
if (newNumValuesInVector == storage->m_numValuesInVector + 1) {
for (unsigned j = vectorLength; j < newVectorLength; ++j)
- vector[j] = JSValue();
+ vector[j].clear();
if (i > MIN_SPARSE_ARRAY_INDEX)
map->remove(i);
} else {
for (unsigned j = vectorLength; j < max(vectorLength, MIN_SPARSE_ARRAY_INDEX); ++j)
- vector[j] = JSValue();
+ vector[j].clear();
+ JSGlobalData& globalData = exec->globalData();
for (unsigned j = max(vectorLength, MIN_SPARSE_ARRAY_INDEX); j < newVectorLength; ++j)
- vector[j] = map->take(j);
+ vector[j].set(globalData, this, map->take(j).get());
}
ASSERT(i < newVectorLength);
@@ -476,7 +477,7 @@ NEVER_INLINE void JSArray::putSlowCase(ExecState* exec, unsigned i, JSValue valu
m_vectorLength = newVectorLength;
storage->m_numValuesInVector = newNumValuesInVector;
- storage->m_vector[i] = value;
+ storage->m_vector[i].set(exec->globalData(), this, value);
checkConsistency();
@@ -503,12 +504,12 @@ bool JSArray::deleteProperty(ExecState* exec, unsigned i)
ArrayStorage* storage = m_storage;
if (i < m_vectorLength) {
- JSValue& valueSlot = storage->m_vector[i];
+ WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];
if (!valueSlot) {
checkConsistency();
return false;
}
- valueSlot = JSValue();
+ valueSlot.clear();
--storage->m_numValuesInVector;
checkConsistency();
return true;
@@ -605,9 +606,9 @@ bool JSArray::increaseVectorLength(unsigned newLength)
storage = m_storage = reinterpret_cast_ptr<ArrayStorage*>(static_cast<char*>(baseStorage) + m_indexBias * sizeof(JSValue));
m_storage->m_allocBase = baseStorage;
- JSValue* vector = storage->m_vector;
+ WriteBarrier<Unknown>* vector = storage->m_vector;
for (unsigned i = vectorLength; i < newVectorLength; ++i)
- vector[i] = JSValue();
+ vector[i].clear();
m_vectorLength = newVectorLength;
@@ -666,9 +667,9 @@ void JSArray::setLength(unsigned newLength)
if (newLength < length) {
unsigned usedVectorLength = min(length, m_vectorLength);
for (unsigned i = newLength; i < usedVectorLength; ++i) {
- JSValue& valueSlot = storage->m_vector[i];
+ WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];
bool hadValue = valueSlot;
- valueSlot = JSValue();
+ valueSlot.clear();
storage->m_numValuesInVector -= hadValue;
}
@@ -706,11 +707,11 @@ JSValue JSArray::pop()
JSValue result;
if (length < m_vectorLength) {
- JSValue& valueSlot = storage->m_vector[length];
+ WriteBarrier<Unknown>& valueSlot = storage->m_vector[length];
if (valueSlot) {
--storage->m_numValuesInVector;
- result = valueSlot;
- valueSlot = JSValue();
+ result = valueSlot.get();
+ valueSlot.clear();
} else
result = jsUndefined();
} else {
@@ -718,7 +719,7 @@ JSValue JSArray::pop()
if (SparseArrayValueMap* map = storage->m_sparseValueMap) {
SparseArrayValueMap::iterator it = map->find(length);
if (it != map->end()) {
- result = it->second;
+ result = it->second.get();
map->remove(it);
if (map->isEmpty()) {
delete map;
@@ -742,7 +743,7 @@ void JSArray::push(ExecState* exec, JSValue value)
ArrayStorage* storage = m_storage;
if (storage->m_length < m_vectorLength) {
- storage->m_vector[storage->m_length] = value;
+ storage->m_vector[storage->m_length].set(exec->globalData(), this, value);
++storage->m_numValuesInVector;
++storage->m_length;
checkConsistency();
@@ -754,7 +755,7 @@ void JSArray::push(ExecState* exec, JSValue value)
if (!map || map->isEmpty()) {
if (increaseVectorLength(storage->m_length + 1)) {
storage = m_storage;
- storage->m_vector[storage->m_length] = value;
+ storage->m_vector[storage->m_length].set(exec->globalData(), this, value);
++storage->m_numValuesInVector;
++storage->m_length;
checkConsistency();
@@ -857,9 +858,9 @@ void JSArray::unshiftCount(ExecState* exec, int count)
return;
}
- JSValue* vector = m_storage->m_vector;
+ WriteBarrier<Unknown>* vector = m_storage->m_vector;
for (int i = 0; i < count; i++)
- vector[i] = JSValue();
+ vector[i].clear();
}
void JSArray::markChildren(MarkStack& markStack)
@@ -941,7 +942,7 @@ void JSArray::sort(ExecState* exec)
Heap::heap(this)->pushTempSortVector(&values);
for (size_t i = 0; i < lengthNotIncludingUndefined; i++) {
- JSValue value = storage->m_vector[i];
+ JSValue value = storage->m_vector[i].get();
ASSERT(!value.isUndefined());
values[i].first = value;
}
@@ -974,9 +975,10 @@ void JSArray::sort(ExecState* exec)
increaseVectorLength(lengthNotIncludingUndefined);
if (storage->m_length < lengthNotIncludingUndefined)
storage->m_length = lengthNotIncludingUndefined;
-
+
+ JSGlobalData& globalData = exec->globalData();
for (size_t i = 0; i < lengthNotIncludingUndefined; i++)
- storage->m_vector[i] = values[i].first;
+ storage->m_vector[i].set(globalData, this, values[i].first);
Heap::heap(this)->popTempSortVector(&values);
@@ -1105,14 +1107,14 @@ void JSArray::sort(ExecState* exec, JSValue compareFunction, CallType callType,
// Iterate over the array, ignoring missing values, counting undefined ones, and inserting all other ones into the tree.
for (; numDefined < usedVectorLength; ++numDefined) {
- JSValue v = storage->m_vector[numDefined];
+ JSValue v = storage->m_vector[numDefined].get();
if (!v || v.isUndefined())
break;
tree.abstractor().m_nodes[numDefined].value = v;
tree.insert(numDefined);
}
for (unsigned i = numDefined; i < usedVectorLength; ++i) {
- JSValue v = storage->m_vector[i];
+ JSValue v = storage->m_vector[i].get();
if (v) {
if (v.isUndefined())
++numUndefined;
@@ -1140,7 +1142,7 @@ void JSArray::sort(ExecState* exec, JSValue compareFunction, CallType callType,
SparseArrayValueMap::iterator end = map->end();
for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) {
- tree.abstractor().m_nodes[numDefined].value = it->second;
+ tree.abstractor().m_nodes[numDefined].value = it->second.get();
tree.insert(numDefined);
++numDefined;
}
@@ -1157,18 +1159,19 @@ void JSArray::sort(ExecState* exec, JSValue compareFunction, CallType callType,
// Copy the values back into m_storage.
AVLTree<AVLTreeAbstractorForArrayCompare, 44>::Iterator iter;
iter.start_iter_least(tree);
+ JSGlobalData& globalData = exec->globalData();
for (unsigned i = 0; i < numDefined; ++i) {
- storage->m_vector[i] = tree.abstractor().m_nodes[*iter].value;
+ storage->m_vector[i].set(globalData, this, tree.abstractor().m_nodes[*iter].value);
++iter;
}
// Put undefined values back in.
for (unsigned i = numDefined; i < newUsedVectorLength; ++i)
- storage->m_vector[i] = jsUndefined();
+ storage->m_vector[i].setUndefined();
// Ensure that unused values in the vector are zeroed out.
for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i)
- storage->m_vector[i] = JSValue();
+ storage->m_vector[i].clear();
storage->m_numValuesInVector = newUsedVectorLength;
@@ -1179,14 +1182,14 @@ void JSArray::fillArgList(ExecState* exec, MarkedArgumentBuffer& args)
{
ArrayStorage* storage = m_storage;
- JSValue* vector = storage->m_vector;
+ WriteBarrier<Unknown>* vector = storage->m_vector;
unsigned vectorEnd = min(storage->m_length, m_vectorLength);
unsigned i = 0;
for (; i < vectorEnd; ++i) {
- JSValue& v = vector[i];
+ WriteBarrier<Unknown>& v = vector[i];
if (!v)
break;
- args.append(v);
+ args.append(v.get());
}
for (; i < storage->m_length; ++i)
@@ -1197,14 +1200,14 @@ void JSArray::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSiz
{
ASSERT(m_storage->m_length >= maxSize);
UNUSED_PARAM(maxSize);
- JSValue* vector = m_storage->m_vector;
+ WriteBarrier<Unknown>* vector = m_storage->m_vector;
unsigned vectorEnd = min(maxSize, m_vectorLength);
unsigned i = 0;
for (; i < vectorEnd; ++i) {
- JSValue& v = vector[i];
+ WriteBarrier<Unknown>& v = vector[i];
if (!v)
break;
- buffer[i] = v;
+ buffer[i] = v.get();
}
for (; i < maxSize; ++i)
@@ -1223,17 +1226,18 @@ unsigned JSArray::compactForSorting()
unsigned numUndefined = 0;
for (; numDefined < usedVectorLength; ++numDefined) {
- JSValue v = storage->m_vector[numDefined];
+ JSValue v = storage->m_vector[numDefined].get();
if (!v || v.isUndefined())
break;
}
+
for (unsigned i = numDefined; i < usedVectorLength; ++i) {
- JSValue v = storage->m_vector[i];
+ JSValue v = storage->m_vector[i].get();
if (v) {
if (v.isUndefined())
++numUndefined;
else
- storage->m_vector[numDefined++] = v;
+ storage->m_vector[numDefined++].setWithoutWriteBarrier(v);
}
}
@@ -1252,16 +1256,16 @@ unsigned JSArray::compactForSorting()
SparseArrayValueMap::iterator end = map->end();
for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it)
- storage->m_vector[numDefined++] = it->second;
+ storage->m_vector[numDefined++].setWithoutWriteBarrier(it->second.get());
delete map;
storage->m_sparseValueMap = 0;
}
for (unsigned i = numDefined; i < newUsedVectorLength; ++i)
- storage->m_vector[i] = jsUndefined();
+ storage->m_vector[i].setUndefined();
for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i)
- storage->m_vector[i] = JSValue();
+ storage->m_vector[i].clear();
storage->m_numValuesInVector = newUsedVectorLength;
diff --git a/Source/JavaScriptCore/runtime/JSArray.h b/Source/JavaScriptCore/runtime/JSArray.h
index de28b65..b5caa47 100644
--- a/Source/JavaScriptCore/runtime/JSArray.h
+++ b/Source/JavaScriptCore/runtime/JSArray.h
@@ -27,7 +27,7 @@
namespace JSC {
- typedef HashMap<unsigned, JSValue> SparseArrayValueMap;
+ typedef HashMap<unsigned, WriteBarrier<Unknown> > SparseArrayValueMap;
// This struct holds the actual data values of an array. A JSArray object points to it's contained ArrayStorage
// struct by pointing to m_vector. To access the contained ArrayStorage struct, use the getStorage() and
@@ -44,7 +44,7 @@ namespace JSC {
#if CHECK_ARRAY_CONSISTENCY
bool m_inCompactInitialization;
#endif
- JSValue m_vector[1];
+ WriteBarrier<Unknown> m_vector[1];
};
// The CreateCompact creation mode is used for fast construction of arrays
@@ -67,7 +67,7 @@ namespace JSC {
explicit JSArray(NonNullPassRefPtr<Structure>);
JSArray(NonNullPassRefPtr<Structure>, unsigned initialLength, ArrayCreationMode);
- JSArray(NonNullPassRefPtr<Structure>, const ArgList& initialValues);
+ JSArray(JSGlobalData&, NonNullPassRefPtr<Structure>, const ArgList& initialValues);
virtual ~JSArray();
virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
@@ -94,32 +94,32 @@ namespace JSC {
JSValue getIndex(unsigned i)
{
ASSERT(canGetIndex(i));
- return m_storage->m_vector[i];
+ return m_storage->m_vector[i].get();
}
bool canSetIndex(unsigned i) { return i < m_vectorLength; }
- void setIndex(unsigned i, JSValue v)
+ void setIndex(JSGlobalData& globalData, unsigned i, JSValue v)
{
ASSERT(canSetIndex(i));
- JSValue& x = m_storage->m_vector[i];
+ WriteBarrier<Unknown>& x = m_storage->m_vector[i];
if (!x) {
ArrayStorage *storage = m_storage;
++storage->m_numValuesInVector;
if (i >= storage->m_length)
storage->m_length = i + 1;
}
- x = v;
+ x.set(globalData, this, v);
}
- void uncheckedSetIndex(unsigned i, JSValue v)
+ void uncheckedSetIndex(JSGlobalData& globalData, unsigned i, JSValue v)
{
ASSERT(canSetIndex(i));
ArrayStorage *storage = m_storage;
#if CHECK_ARRAY_CONSISTENCY
ASSERT(storage->m_inCompactInitialization);
#endif
- storage->m_vector[i] = v;
+ storage->m_vector[i].set(globalData, this, v);
}
void fillArgList(ExecState*, MarkedArgumentBuffer&);
@@ -194,13 +194,13 @@ namespace JSC {
if (SparseArrayValueMap* map = storage->m_sparseValueMap) {
SparseArrayValueMap::iterator end = map->end();
for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it)
- markStack.append(it->second);
+ markStack.append(&it->second);
}
}
inline void MarkStack::markChildren(JSCell* cell)
{
- ASSERT(Heap::isCellMarked(cell));
+ ASSERT(Heap::isMarked(cell));
if (!cell->structure()->typeInfo().overridesMarkChildren()) {
#ifdef NDEBUG
asObject(cell)->markChildrenDirect(*this);
@@ -240,7 +240,7 @@ namespace JSC {
current.m_values++;
JSCell* cell;
- if (!value || !value.isCell() || Heap::checkMarkCell(cell = value.asCell())) {
+ if (!value || !value.isCell() || Heap::testAndSetMarked(cell = value.asCell())) {
if (current.m_values == end) {
m_markSets.removeLast();
continue;
diff --git a/Source/JavaScriptCore/runtime/JSByteArray.cpp b/Source/JavaScriptCore/runtime/JSByteArray.cpp
index 6af9d75..3f7d806 100644
--- a/Source/JavaScriptCore/runtime/JSByteArray.cpp
+++ b/Source/JavaScriptCore/runtime/JSByteArray.cpp
@@ -40,7 +40,7 @@ JSByteArray::JSByteArray(ExecState* exec, NonNullPassRefPtr<Structure> structure
, m_storage(storage)
, m_classInfo(classInfo)
{
- putDirect(exec->globalData().propertyNames->length, jsNumber(m_storage->length()), ReadOnly | DontDelete);
+ putDirect(exec->globalData(), exec->globalData().propertyNames->length, jsNumber(m_storage->length()), ReadOnly | DontDelete);
}
#if !ASSERT_DISABLED
diff --git a/Source/JavaScriptCore/runtime/JSCell.h b/Source/JavaScriptCore/runtime/JSCell.h
index 95f4efa..66f6197 100644
--- a/Source/JavaScriptCore/runtime/JSCell.h
+++ b/Source/JavaScriptCore/runtime/JSCell.h
@@ -64,6 +64,7 @@ namespace JSC {
friend class JSZombie;
friend class JSGlobalData;
friend class MarkedSpace;
+ friend class MarkedBlock;
private:
explicit JSCell(Structure*);
@@ -336,22 +337,50 @@ namespace JSC {
{
return isCell() ? asCell()->toThisObject(exec) : toThisObjectSlowCase(exec);
}
+
+ template <typename T> void MarkStack::append(DeprecatedPtr<T>* slot)
+ {
+ internalAppend(slot->get());
+ }
+
+ template <typename T> void MarkStack::append(WriteBarrierBase<T>* slot)
+ {
+ internalAppend(slot->get());
+ }
- ALWAYS_INLINE void MarkStack::append(JSCell* cell)
+ ALWAYS_INLINE void MarkStack::internalAppend(JSCell* cell)
{
ASSERT(!m_isCheckingForDefaultMarkViolation);
ASSERT(cell);
- if (Heap::checkMarkCell(cell))
+ if (Heap::testAndSetMarked(cell))
return;
if (cell->structure()->typeInfo().type() >= CompoundType)
m_values.append(cell);
}
- ALWAYS_INLINE void MarkStack::append(JSValue value)
+ ALWAYS_INLINE void MarkStack::deprecatedAppend(JSCell** value)
+ {
+ ASSERT(value);
+ internalAppend(*value);
+ }
+
+ ALWAYS_INLINE void MarkStack::deprecatedAppend(JSValue* value)
+ {
+ ASSERT(value);
+ internalAppend(*value);
+ }
+
+ ALWAYS_INLINE void MarkStack::deprecatedAppend(Register* value)
+ {
+ ASSERT(value);
+ internalAppend(value->jsValue());
+ }
+
+ ALWAYS_INLINE void MarkStack::internalAppend(JSValue value)
{
ASSERT(value);
if (value.isCell())
- append(value.asCell());
+ internalAppend(value.asCell());
}
inline Heap* Heap::heap(JSValue v)
@@ -363,7 +392,7 @@ namespace JSC {
inline Heap* Heap::heap(JSCell* c)
{
- return MarkedSpace::cellBlock(c)->heap;
+ return MarkedSpace::heap(c);
}
#if ENABLE(JSC_ZOMBIES)
@@ -372,6 +401,23 @@ namespace JSC {
return isCell() && asCell() && asCell()->isZombie();
}
#endif
+
+ inline void* MarkedBlock::allocate(size_t& nextCell)
+ {
+ do {
+ ASSERT(nextCell < CELLS_PER_BLOCK);
+ if (!marked.testAndSet(nextCell)) { // Always false for the last cell in the block
+ JSCell* cell = reinterpret_cast<JSCell*>(&cells[nextCell++]);
+ cell->~JSCell();
+ return cell;
+ }
+ nextCell = marked.nextPossiblyUnset(nextCell);
+ } while (nextCell != CELLS_PER_BLOCK);
+
+ nextCell = 0;
+ return 0;
+ }
+
} // namespace JSC
#endif // JSCell_h
diff --git a/Source/JavaScriptCore/runtime/JSFunction.cpp b/Source/JavaScriptCore/runtime/JSFunction.cpp
index 99f8e6f..c569722 100644
--- a/Source/JavaScriptCore/runtime/JSFunction.cpp
+++ b/Source/JavaScriptCore/runtime/JSFunction.cpp
@@ -71,8 +71,8 @@ JSFunction::JSFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPas
, m_executable(thunk)
, m_scopeChain(globalObject->globalScopeChain())
{
- putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
- putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
}
#endif
@@ -83,9 +83,9 @@ JSFunction::JSFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPas
#endif
, m_scopeChain(globalObject->globalScopeChain())
{
- putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
#if ENABLE(JIT)
- putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
#else
UNUSED_PARAM(length);
UNUSED_PARAM(func);
@@ -99,7 +99,7 @@ JSFunction::JSFunction(ExecState* exec, NonNullPassRefPtr<FunctionExecutable> ex
, m_scopeChain(scopeChainNode)
{
const Identifier& name = static_cast<FunctionExecutable*>(m_executable.get())->name();
- putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
}
JSFunction::~JSFunction()
@@ -203,16 +203,16 @@ bool JSFunction::getOwnPropertySlot(ExecState* exec, const Identifier& propertyN
return Base::getOwnPropertySlot(exec, propertyName, slot);
if (propertyName == exec->propertyNames().prototype) {
- JSValue* location = getDirectLocation(propertyName);
+ WriteBarrierBase<Unknown>* location = getDirectLocation(propertyName);
if (!location) {
JSObject* prototype = new (exec) JSObject(scope().globalObject()->emptyObjectStructure());
- prototype->putDirect(exec->propertyNames().constructor, this, DontEnum);
- putDirect(exec->propertyNames().prototype, prototype, DontDelete | DontEnum);
+ prototype->putDirect(exec->globalData(), exec->propertyNames().constructor, this, DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().prototype, prototype, DontDelete | DontEnum);
location = getDirectLocation(propertyName);
}
- slot.setValueSlot(this, location, offsetForLocation(location));
+ slot.setValue(this, location->get(), offsetForLocation(location));
}
if (propertyName == exec->propertyNames().arguments) {
diff --git a/Source/JavaScriptCore/runtime/JSGlobalData.cpp b/Source/JavaScriptCore/runtime/JSGlobalData.cpp
index 3928c82..ff88048 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalData.cpp
+++ b/Source/JavaScriptCore/runtime/JSGlobalData.cpp
@@ -31,7 +31,6 @@
#include "ArgList.h"
#include "Heap.h"
-#include "CollectorHeapIterator.h"
#include "CommonIdentifiers.h"
#include "FunctionConstructor.h"
#include "GetterSetter.h"
@@ -87,25 +86,26 @@ void* JSGlobalData::jsFunctionVPtr;
void JSGlobalData::storeVPtrs()
{
- CollectorCell cell;
- void* storage = &cell;
+ // Enough storage to fit a JSArray, JSByteArray, JSString, or JSFunction.
+ // COMPILE_ASSERTS below check that this is true.
+ char storage[64];
- COMPILE_ASSERT(sizeof(JSArray) <= sizeof(CollectorCell), sizeof_JSArray_must_be_less_than_CollectorCell);
+ COMPILE_ASSERT(sizeof(JSArray) <= sizeof(storage), sizeof_JSArray_must_be_less_than_storage);
JSCell* jsArray = new (storage) JSArray(JSArray::VPtrStealingHack);
JSGlobalData::jsArrayVPtr = jsArray->vptr();
jsArray->~JSCell();
- COMPILE_ASSERT(sizeof(JSByteArray) <= sizeof(CollectorCell), sizeof_JSByteArray_must_be_less_than_CollectorCell);
+ COMPILE_ASSERT(sizeof(JSByteArray) <= sizeof(storage), sizeof_JSByteArray_must_be_less_than_storage);
JSCell* jsByteArray = new (storage) JSByteArray(JSByteArray::VPtrStealingHack);
JSGlobalData::jsByteArrayVPtr = jsByteArray->vptr();
jsByteArray->~JSCell();
- COMPILE_ASSERT(sizeof(JSString) <= sizeof(CollectorCell), sizeof_JSString_must_be_less_than_CollectorCell);
+ COMPILE_ASSERT(sizeof(JSString) <= sizeof(storage), sizeof_JSString_must_be_less_than_storage);
JSCell* jsString = new (storage) JSString(JSString::VPtrStealingHack);
JSGlobalData::jsStringVPtr = jsString->vptr();
jsString->~JSCell();
- COMPILE_ASSERT(sizeof(JSFunction) <= sizeof(CollectorCell), sizeof_JSFunction_must_be_less_than_CollectorCell);
+ COMPILE_ASSERT(sizeof(JSFunction) <= sizeof(storage), sizeof_JSFunction_must_be_less_than_storage);
JSCell* jsFunction = new (storage) JSFunction(JSFunction::createStructure(jsNull()));
JSGlobalData::jsFunctionVPtr = jsFunction->vptr();
jsFunction->~JSCell();
@@ -140,7 +140,6 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
, parser(new Parser)
, interpreter(new Interpreter)
, heap(this)
- , head(0)
, dynamicGlobalObject(0)
, firstStringifierToMark(0)
, cachedUTCOffset(NaN)
@@ -166,11 +165,14 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
if (canUseJIT) {
m_canUseJIT = kCFBooleanTrue == canUseJIT;
CFRelease(canUseJIT);
- } else
- m_canUseJIT = !getenv("JavaScriptCoreUseJIT");
+ } else {
+ char* canUseJITString = getenv("JavaScriptCoreUseJIT");
+ m_canUseJIT = !canUseJITString || atoi(canUseJITString);
+ }
CFRelease(canUseJITKey);
#elif OS(UNIX)
- m_canUseJIT = !getenv("JavaScriptCoreUseJIT");
+ char* canUseJITString = getenv("JavaScriptCoreUseJIT");
+ m_canUseJIT = !canUseJITString || atoi(canUseJITString);
#else
m_canUseJIT = true;
#endif
@@ -311,21 +313,30 @@ void JSGlobalData::dumpSampleData(ExecState* exec)
interpreter->dumpSampleData(exec);
}
+class Recompiler {
+public:
+ void operator()(JSCell*);
+};
+
+inline void Recompiler::operator()(JSCell* cell)
+{
+ if (!cell->inherits(&JSFunction::info))
+ return;
+ JSFunction* function = asFunction(cell);
+ if (function->executable()->isHostFunction())
+ return;
+ function->jsExecutable()->discardCode();
+}
+
+
void JSGlobalData::recompileAllJSFunctions()
{
// If JavaScript is running, it's not safe to recompile, since we'll end
// up throwing away code that is live on the stack.
ASSERT(!dynamicGlobalObject);
-
- LiveObjectIterator it = heap.primaryHeapBegin();
- LiveObjectIterator heapEnd = heap.primaryHeapEnd();
- for ( ; it != heapEnd; ++it) {
- if ((*it)->inherits(&JSFunction::info)) {
- JSFunction* function = asFunction(*it);
- if (!function->executable()->isHostFunction())
- function->jsExecutable()->discardCode();
- }
- }
+
+ Recompiler recompiler;
+ heap.forEach(recompiler);
}
#if ENABLE(REGEXP_TRACING)
diff --git a/Source/JavaScriptCore/runtime/JSGlobalData.h b/Source/JavaScriptCore/runtime/JSGlobalData.h
index 31f41e9..7b69055 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalData.h
+++ b/Source/JavaScriptCore/runtime/JSGlobalData.h
@@ -39,6 +39,7 @@
#include "SmallStrings.h"
#include "Terminator.h"
#include "TimeoutChecker.h"
+#include "WeakGCMap.h"
#include "WeakRandom.h"
#include <wtf/BumpPointerAllocator.h>
#include <wtf/Forward.h>
@@ -72,7 +73,9 @@ namespace JSC {
#endif
struct HashTable;
- struct Instruction;
+ struct Instruction;
+
+ typedef WeakGCMap<JSGlobalObject*, JSGlobalObject> GlobalObjectMap; // FIXME: Would be nice to use a WeakGCSet here.
struct DSTOffsetCache {
DSTOffsetCache()
@@ -203,14 +206,14 @@ namespace JSC {
Terminator terminator;
Heap heap;
- JSValue exception;
+ DeprecatedPtr<Unknown> exception;
#if ENABLE(JIT)
ReturnAddressPtr exceptionLocation;
#endif
HashMap<OpaqueJSClass*, OpaqueJSClassContextData*> opaqueJSClassData;
- JSGlobalObject* head;
+ GlobalObjectMap globalObjects;
JSGlobalObject* dynamicGlobalObject;
HashSet<JSObject*> stringRecursionCheckVisitedObjects;
diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
index 9b67dbb..f303196 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
@@ -80,16 +80,16 @@ static const int initialTickCountThreshold = 255;
// Preferred number of milliseconds between each timeout check
static const int preferredScriptCheckTimeInterval = 1000;
-static inline void markIfNeeded(MarkStack& markStack, JSValue v)
+template <typename T> static inline void markIfNeeded(MarkStack& markStack, WriteBarrier<T>* v)
{
- if (v)
+ if (*v)
markStack.append(v);
}
static inline void markIfNeeded(MarkStack& markStack, const RefPtr<Structure>& s)
{
- if (s)
- markIfNeeded(markStack, s->storedPrototype());
+ if (s && s->storedPrototype())
+ markStack.append(s->storedPrototypeSlot());
}
JSGlobalObject::~JSGlobalObject()
@@ -104,18 +104,8 @@ JSGlobalObject::~JSGlobalObject()
(*profiler)->stopProfiling(globalExec(), UString());
}
- d()->next->d()->prev = d()->prev;
- d()->prev->d()->next = d()->next;
- JSGlobalObject*& headObject = head();
- if (headObject == this)
- headObject = d()->next;
- if (headObject == this)
- headObject = 0;
-
- HashSet<GlobalCodeBlock*>::const_iterator end = codeBlocks().end();
- for (HashSet<GlobalCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it)
- (*it)->clearGlobalObject();
-
+ d()->globalData->globalObjects.take(this);
+
RegisterFile& registerFile = globalData().interpreter->registerFile();
if (registerFile.clearGlobalObject(this))
registerFile.setNumGlobals(0);
@@ -125,22 +115,15 @@ JSGlobalObject::~JSGlobalObject()
void JSGlobalObject::init(JSObject* thisValue)
{
ASSERT(JSLock::currentThreadIsHoldingLock());
-
+
structure()->disableSpecificFunctionTracking();
d()->globalData = Heap::heap(this)->globalData();
+ d()->globalData->globalObjects.set(this, this);
d()->globalScopeChain = ScopeChain(this, d()->globalData.get(), this, thisValue);
JSGlobalObject::globalExec()->init(0, 0, d()->globalScopeChain.node(), CallFrame::noCaller(), 0, 0);
- if (JSGlobalObject*& headObject = head()) {
- d()->prev = headObject;
- d()->next = headObject->d()->next;
- headObject->d()->next->d()->prev = this;
- headObject->d()->next = this;
- } else
- headObject = d()->next = d()->prev = this;
-
d()->debugger = 0;
d()->profileGroup = 0;
@@ -202,117 +185,117 @@ void JSGlobalObject::reset(JSValue prototype)
// Prototypes
- d()->functionPrototype = new (exec) FunctionPrototype(exec, this, FunctionPrototype::createStructure(jsNull())); // The real prototype will be set once ObjectPrototype is created.
- d()->prototypeFunctionStructure = PrototypeFunction::createStructure(d()->functionPrototype);
- d()->internalFunctionStructure = InternalFunction::createStructure(d()->functionPrototype);
+ d()->functionPrototype.set(exec->globalData(), this, new (exec) FunctionPrototype(exec, this, FunctionPrototype::createStructure(jsNull()))); // The real prototype will be set once ObjectPrototype is created.
+ d()->prototypeFunctionStructure = PrototypeFunction::createStructure(d()->functionPrototype.get());
+ d()->internalFunctionStructure = InternalFunction::createStructure(d()->functionPrototype.get());
NativeFunctionWrapper* callFunction = 0;
NativeFunctionWrapper* applyFunction = 0;
d()->functionPrototype->addFunctionProperties(exec, this, d()->prototypeFunctionStructure.get(), &callFunction, &applyFunction);
- d()->callFunction = callFunction;
- d()->applyFunction = applyFunction;
- d()->objectPrototype = new (exec) ObjectPrototype(exec, this, ObjectPrototype::createStructure(jsNull()), d()->prototypeFunctionStructure.get());
- d()->functionPrototype->structure()->setPrototypeWithoutTransition(d()->objectPrototype);
+ d()->callFunction.set(exec->globalData(), this, callFunction);
+ d()->applyFunction.set(exec->globalData(), this, applyFunction);
+ d()->objectPrototype.set(exec->globalData(), this, new (exec) ObjectPrototype(exec, this, ObjectPrototype::createStructure(jsNull()), d()->prototypeFunctionStructure.get()));
+ d()->functionPrototype->structure()->setPrototypeWithoutTransition(d()->objectPrototype.get());
d()->emptyObjectStructure = d()->objectPrototype->inheritorID();
- d()->functionStructure = JSFunction::createStructure(d()->functionPrototype);
- d()->callbackFunctionStructure = JSCallbackFunction::createStructure(d()->functionPrototype);
- d()->argumentsStructure = Arguments::createStructure(d()->objectPrototype);
- d()->callbackConstructorStructure = JSCallbackConstructor::createStructure(d()->objectPrototype);
- d()->callbackObjectStructure = JSCallbackObject<JSObjectWithGlobalObject>::createStructure(d()->objectPrototype);
+ d()->functionStructure = JSFunction::createStructure(d()->functionPrototype.get());
+ d()->callbackFunctionStructure = JSCallbackFunction::createStructure(d()->functionPrototype.get());
+ d()->argumentsStructure = Arguments::createStructure(d()->objectPrototype.get());
+ d()->callbackConstructorStructure = JSCallbackConstructor::createStructure(d()->objectPrototype.get());
+ d()->callbackObjectStructure = JSCallbackObject<JSObjectWithGlobalObject>::createStructure(d()->objectPrototype.get());
- d()->arrayPrototype = new (exec) ArrayPrototype(this, ArrayPrototype::createStructure(d()->objectPrototype));
- d()->arrayStructure = JSArray::createStructure(d()->arrayPrototype);
- d()->regExpMatchesArrayStructure = RegExpMatchesArray::createStructure(d()->arrayPrototype);
+ d()->arrayPrototype.set(exec->globalData(), this, new (exec) ArrayPrototype(this, ArrayPrototype::createStructure(d()->objectPrototype.get())));
+ d()->arrayStructure = JSArray::createStructure(d()->arrayPrototype.get());
+ d()->regExpMatchesArrayStructure = RegExpMatchesArray::createStructure(d()->arrayPrototype.get());
- d()->stringPrototype = new (exec) StringPrototype(exec, this, StringPrototype::createStructure(d()->objectPrototype));
- d()->stringObjectStructure = StringObject::createStructure(d()->stringPrototype);
+ d()->stringPrototype.set(exec->globalData(), this, new (exec) StringPrototype(exec, this, StringPrototype::createStructure(d()->objectPrototype.get())));
+ d()->stringObjectStructure = StringObject::createStructure(d()->stringPrototype.get());
- d()->booleanPrototype = new (exec) BooleanPrototype(exec, this, BooleanPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get());
- d()->booleanObjectStructure = BooleanObject::createStructure(d()->booleanPrototype);
+ d()->booleanPrototype.set(exec->globalData(), this, new (exec) BooleanPrototype(exec, this, BooleanPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));
+ d()->booleanObjectStructure = BooleanObject::createStructure(d()->booleanPrototype.get());
- d()->numberPrototype = new (exec) NumberPrototype(exec, this, NumberPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get());
- d()->numberObjectStructure = NumberObject::createStructure(d()->numberPrototype);
+ d()->numberPrototype.set(exec->globalData(), this, new (exec) NumberPrototype(exec, this, NumberPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));
+ d()->numberObjectStructure = NumberObject::createStructure(d()->numberPrototype.get());
- d()->datePrototype = new (exec) DatePrototype(exec, this, DatePrototype::createStructure(d()->objectPrototype));
- d()->dateStructure = DateInstance::createStructure(d()->datePrototype);
+ d()->datePrototype.set(exec->globalData(), this, new (exec) DatePrototype(exec, this, DatePrototype::createStructure(d()->objectPrototype.get())));
+ d()->dateStructure = DateInstance::createStructure(d()->datePrototype.get());
- d()->regExpPrototype = new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get());
- d()->regExpStructure = RegExpObject::createStructure(d()->regExpPrototype);
+ d()->regExpPrototype.set(exec->globalData(), this, new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get()));
+ d()->regExpStructure = RegExpObject::createStructure(d()->regExpPrototype.get());
- d()->methodCallDummy = constructEmptyObject(exec);
+ d()->methodCallDummy.set(exec->globalData(), this, constructEmptyObject(exec));
- ErrorPrototype* errorPrototype = new (exec) ErrorPrototype(exec, this, ErrorPrototype::createStructure(d()->objectPrototype), d()->prototypeFunctionStructure.get());
+ ErrorPrototype* errorPrototype = new (exec) ErrorPrototype(exec, this, ErrorPrototype::createStructure(d()->objectPrototype.get()), d()->prototypeFunctionStructure.get());
d()->errorStructure = ErrorInstance::createStructure(errorPrototype);
// Constructors
- JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype), d()->objectPrototype, d()->prototypeFunctionStructure.get());
- JSCell* functionConstructor = new (exec) FunctionConstructor(exec, this, FunctionConstructor::createStructure(d()->functionPrototype), d()->functionPrototype);
- JSCell* arrayConstructor = new (exec) ArrayConstructor(exec, this, ArrayConstructor::createStructure(d()->functionPrototype), d()->arrayPrototype, d()->prototypeFunctionStructure.get());
- JSCell* stringConstructor = new (exec) StringConstructor(exec, this, StringConstructor::createStructure(d()->functionPrototype), d()->prototypeFunctionStructure.get(), d()->stringPrototype);
- JSCell* booleanConstructor = new (exec) BooleanConstructor(exec, this, BooleanConstructor::createStructure(d()->functionPrototype), d()->booleanPrototype);
- JSCell* numberConstructor = new (exec) NumberConstructor(exec, this, NumberConstructor::createStructure(d()->functionPrototype), d()->numberPrototype);
- JSCell* dateConstructor = new (exec) DateConstructor(exec, this, DateConstructor::createStructure(d()->functionPrototype), d()->prototypeFunctionStructure.get(), d()->datePrototype);
+ JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype.get()), d()->objectPrototype.get(), d()->prototypeFunctionStructure.get());
+ JSCell* functionConstructor = new (exec) FunctionConstructor(exec, this, FunctionConstructor::createStructure(d()->functionPrototype.get()), d()->functionPrototype.get());
+ JSCell* arrayConstructor = new (exec) ArrayConstructor(exec, this, ArrayConstructor::createStructure(d()->functionPrototype.get()), d()->arrayPrototype.get(), d()->prototypeFunctionStructure.get());
+ JSCell* stringConstructor = new (exec) StringConstructor(exec, this, StringConstructor::createStructure(d()->functionPrototype.get()), d()->prototypeFunctionStructure.get(), d()->stringPrototype.get());
+ JSCell* booleanConstructor = new (exec) BooleanConstructor(exec, this, BooleanConstructor::createStructure(d()->functionPrototype.get()), d()->booleanPrototype.get());
+ JSCell* numberConstructor = new (exec) NumberConstructor(exec, this, NumberConstructor::createStructure(d()->functionPrototype.get()), d()->numberPrototype.get());
+ JSCell* dateConstructor = new (exec) DateConstructor(exec, this, DateConstructor::createStructure(d()->functionPrototype.get()), d()->prototypeFunctionStructure.get(), d()->datePrototype.get());
- d()->regExpConstructor = new (exec) RegExpConstructor(exec, this, RegExpConstructor::createStructure(d()->functionPrototype), d()->regExpPrototype);
+ d()->regExpConstructor.set(exec->globalData(), this, new (exec) RegExpConstructor(exec, this, RegExpConstructor::createStructure(d()->functionPrototype.get()), d()->regExpPrototype.get()));
- d()->errorConstructor = new (exec) ErrorConstructor(exec, this, ErrorConstructor::createStructure(d()->functionPrototype), errorPrototype);
+ d()->errorConstructor.set(exec->globalData(), this, new (exec) ErrorConstructor(exec, this, ErrorConstructor::createStructure(d()->functionPrototype.get()), errorPrototype));
RefPtr<Structure> nativeErrorPrototypeStructure = NativeErrorPrototype::createStructure(errorPrototype);
- RefPtr<Structure> nativeErrorStructure = NativeErrorConstructor::createStructure(d()->functionPrototype);
- d()->evalErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "EvalError");
- d()->rangeErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "RangeError");
- d()->referenceErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "ReferenceError");
- d()->syntaxErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "SyntaxError");
- d()->typeErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "TypeError");
- d()->URIErrorConstructor = new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "URIError");
-
- d()->objectPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, objectConstructor, DontEnum);
- d()->functionPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, functionConstructor, DontEnum);
- d()->arrayPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, arrayConstructor, DontEnum);
- d()->booleanPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, booleanConstructor, DontEnum);
- d()->stringPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, stringConstructor, DontEnum);
- d()->numberPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, numberConstructor, DontEnum);
- d()->datePrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, dateConstructor, DontEnum);
- d()->regExpPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, d()->regExpConstructor, DontEnum);
- errorPrototype->putDirectFunctionWithoutTransition(exec->propertyNames().constructor, d()->errorConstructor, DontEnum);
+ RefPtr<Structure> nativeErrorStructure = NativeErrorConstructor::createStructure(d()->functionPrototype.get());
+ d()->evalErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "EvalError"));
+ d()->rangeErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "RangeError"));
+ d()->referenceErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "ReferenceError"));
+ d()->syntaxErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "SyntaxError"));
+ d()->typeErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "TypeError"));
+ d()->URIErrorConstructor.set(exec->globalData(), this, new (exec) NativeErrorConstructor(exec, this, nativeErrorStructure, nativeErrorPrototypeStructure, "URIError"));
+
+ d()->objectPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, objectConstructor, DontEnum);
+ d()->functionPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, functionConstructor, DontEnum);
+ d()->arrayPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, arrayConstructor, DontEnum);
+ d()->booleanPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, booleanConstructor, DontEnum);
+ d()->stringPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, stringConstructor, DontEnum);
+ d()->numberPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, numberConstructor, DontEnum);
+ d()->datePrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, dateConstructor, DontEnum);
+ d()->regExpPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, d()->regExpConstructor.get(), DontEnum);
+ errorPrototype->putDirectFunctionWithoutTransition(exec->globalData(), exec->propertyNames().constructor, d()->errorConstructor.get(), DontEnum);
// Set global constructors
// FIXME: These properties could be handled by a static hash table.
- putDirectFunctionWithoutTransition(Identifier(exec, "Object"), objectConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Function"), functionConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Array"), arrayConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Boolean"), booleanConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "String"), stringConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Number"), numberConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Date"), dateConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "RegExp"), d()->regExpConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "Error"), d()->errorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "EvalError"), d()->evalErrorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "RangeError"), d()->rangeErrorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "ReferenceError"), d()->referenceErrorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "SyntaxError"), d()->syntaxErrorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "TypeError"), d()->typeErrorConstructor, DontEnum);
- putDirectFunctionWithoutTransition(Identifier(exec, "URIError"), d()->URIErrorConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Object"), objectConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Function"), functionConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Array"), arrayConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Boolean"), booleanConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "String"), stringConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Number"), numberConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Date"), dateConstructor, DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "RegExp"), d()->regExpConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "Error"), d()->errorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "EvalError"), d()->evalErrorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "RangeError"), d()->rangeErrorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "ReferenceError"), d()->referenceErrorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "SyntaxError"), d()->syntaxErrorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "TypeError"), d()->typeErrorConstructor.get(), DontEnum);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, "URIError"), d()->URIErrorConstructor.get(), DontEnum);
// Set global values.
GlobalPropertyInfo staticGlobals[] = {
- GlobalPropertyInfo(Identifier(exec, "Math"), new (exec) MathObject(exec, this, MathObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete),
+ GlobalPropertyInfo(Identifier(exec, "Math"), new (exec) MathObject(exec, this, MathObject::createStructure(d()->objectPrototype.get())), DontEnum | DontDelete),
GlobalPropertyInfo(Identifier(exec, "NaN"), jsNaN(), DontEnum | DontDelete | ReadOnly),
GlobalPropertyInfo(Identifier(exec, "Infinity"), jsNumber(Inf), DontEnum | DontDelete | ReadOnly),
GlobalPropertyInfo(Identifier(exec, "undefined"), jsUndefined(), DontEnum | DontDelete | ReadOnly),
- GlobalPropertyInfo(Identifier(exec, "JSON"), new (exec) JSONObject(this, JSONObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete)
+ GlobalPropertyInfo(Identifier(exec, "JSON"), new (exec) JSONObject(this, JSONObject::createStructure(d()->objectPrototype.get())), DontEnum | DontDelete)
};
addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
// Set global functions.
- d()->evalFunction = new (exec) GlobalEvalFunction(exec, this, GlobalEvalFunction::createStructure(d()->functionPrototype), 1, exec->propertyNames().eval, globalFuncEval, this);
- putDirectFunctionWithoutTransition(exec, d()->evalFunction, DontEnum);
+ d()->evalFunction.set(exec->globalData(), this, new (exec) GlobalEvalFunction(exec, this, GlobalEvalFunction::createStructure(d()->functionPrototype.get()), 1, exec->propertyNames().eval, globalFuncEval, this));
+ putDirectFunctionWithoutTransition(exec, d()->evalFunction.get(), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, this, d()->prototypeFunctionStructure.get(), 2, Identifier(exec, "parseInt"), globalFuncParseInt), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, this, d()->prototypeFunctionStructure.get(), 1, Identifier(exec, "parseFloat"), globalFuncParseFloat), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, this, d()->prototypeFunctionStructure.get(), 1, Identifier(exec, "isNaN"), globalFuncIsNaN), DontEnum);
@@ -336,7 +319,7 @@ void JSGlobalObject::resetPrototype(JSValue prototype)
setPrototype(prototype);
JSObject* oldLastInPrototypeChain = lastInPrototypeChain(this);
- JSObject* objectPrototype = d()->objectPrototype;
+ JSObject* objectPrototype = d()->objectPrototype.get();
if (oldLastInPrototypeChain != objectPrototype)
oldLastInPrototypeChain->setPrototype(objectPrototype);
}
@@ -345,33 +328,29 @@ void JSGlobalObject::markChildren(MarkStack& markStack)
{
JSVariableObject::markChildren(markStack);
- HashSet<GlobalCodeBlock*>::const_iterator end = codeBlocks().end();
- for (HashSet<GlobalCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it)
- (*it)->markAggregate(markStack);
-
- markIfNeeded(markStack, d()->regExpConstructor);
- markIfNeeded(markStack, d()->errorConstructor);
- markIfNeeded(markStack, d()->evalErrorConstructor);
- markIfNeeded(markStack, d()->rangeErrorConstructor);
- markIfNeeded(markStack, d()->referenceErrorConstructor);
- markIfNeeded(markStack, d()->syntaxErrorConstructor);
- markIfNeeded(markStack, d()->typeErrorConstructor);
- markIfNeeded(markStack, d()->URIErrorConstructor);
-
- markIfNeeded(markStack, d()->evalFunction);
- markIfNeeded(markStack, d()->callFunction);
- markIfNeeded(markStack, d()->applyFunction);
-
- markIfNeeded(markStack, d()->objectPrototype);
- markIfNeeded(markStack, d()->functionPrototype);
- markIfNeeded(markStack, d()->arrayPrototype);
- markIfNeeded(markStack, d()->booleanPrototype);
- markIfNeeded(markStack, d()->stringPrototype);
- markIfNeeded(markStack, d()->numberPrototype);
- markIfNeeded(markStack, d()->datePrototype);
- markIfNeeded(markStack, d()->regExpPrototype);
-
- markIfNeeded(markStack, d()->methodCallDummy);
+ markIfNeeded(markStack, &d()->regExpConstructor);
+ markIfNeeded(markStack, &d()->errorConstructor);
+ markIfNeeded(markStack, &d()->evalErrorConstructor);
+ markIfNeeded(markStack, &d()->rangeErrorConstructor);
+ markIfNeeded(markStack, &d()->referenceErrorConstructor);
+ markIfNeeded(markStack, &d()->syntaxErrorConstructor);
+ markIfNeeded(markStack, &d()->typeErrorConstructor);
+ markIfNeeded(markStack, &d()->URIErrorConstructor);
+
+ markIfNeeded(markStack, &d()->evalFunction);
+ markIfNeeded(markStack, &d()->callFunction);
+ markIfNeeded(markStack, &d()->applyFunction);
+
+ markIfNeeded(markStack, &d()->objectPrototype);
+ markIfNeeded(markStack, &d()->functionPrototype);
+ markIfNeeded(markStack, &d()->arrayPrototype);
+ markIfNeeded(markStack, &d()->booleanPrototype);
+ markIfNeeded(markStack, &d()->stringPrototype);
+ markIfNeeded(markStack, &d()->numberPrototype);
+ markIfNeeded(markStack, &d()->datePrototype);
+ markIfNeeded(markStack, &d()->regExpPrototype);
+
+ markIfNeeded(markStack, &d()->methodCallDummy);
markIfNeeded(markStack, d()->errorStructure);
markIfNeeded(markStack, d()->argumentsStructure);
@@ -396,12 +375,12 @@ void JSGlobalObject::markChildren(MarkStack& markStack)
if (d()->registerArray) {
// Outside the execution of global code, when our variables are torn off,
// we can mark the torn-off array.
- markStack.appendValues(d()->registerArray.get(), d()->registerArraySize);
+ markStack.deprecatedAppendValues(d()->registerArray.get(), d()->registerArraySize);
} else if (d()->registers) {
// During execution of global code, when our variables are in the register file,
// the symbol table tells us how many variables there are, and registers
// points to where they end, and the registers used for execution begin.
- markStack.appendValues(d()->registers - symbolTable().size(), symbolTable().size());
+ markStack.deprecatedAppendValues(d()->registers - symbolTable().size(), symbolTable().size());
}
}
@@ -425,9 +404,10 @@ void JSGlobalObject::copyGlobalsFrom(RegisterFile& registerFile)
d()->registers = 0;
return;
}
-
- Register* registerArray = copyRegisterArray(registerFile.lastGlobal(), numGlobals);
- setRegisters(registerArray + numGlobals, registerArray, numGlobals);
+
+ OwnArrayPtr<Register> registerArray = copyRegisterArray(registerFile.lastGlobal(), numGlobals);
+ Register* registers = registerArray.get() + numGlobals;
+ setRegisters(registers, registerArray.release(), numGlobals);
}
void JSGlobalObject::copyGlobalsTo(RegisterFile& registerFile)
diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.h b/Source/JavaScriptCore/runtime/JSGlobalObject.h
index 24bc2f8..d13d2da 100644
--- a/Source/JavaScriptCore/runtime/JSGlobalObject.h
+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.h
@@ -73,26 +73,6 @@ namespace JSC {
, destructor(destructor)
, registerArraySize(0)
, globalScopeChain(NoScopeChain())
- , regExpConstructor(0)
- , errorConstructor(0)
- , evalErrorConstructor(0)
- , rangeErrorConstructor(0)
- , referenceErrorConstructor(0)
- , syntaxErrorConstructor(0)
- , typeErrorConstructor(0)
- , URIErrorConstructor(0)
- , evalFunction(0)
- , callFunction(0)
- , applyFunction(0)
- , objectPrototype(0)
- , functionPrototype(0)
- , arrayPrototype(0)
- , booleanPrototype(0)
- , stringPrototype(0)
- , numberPrototype(0)
- , datePrototype(0)
- , regExpPrototype(0)
- , methodCallDummy(0)
, weakRandom(static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0)))
{
}
@@ -109,29 +89,29 @@ namespace JSC {
ScopeChain globalScopeChain;
Register globalCallFrame[RegisterFile::CallFrameHeaderSize];
- RegExpConstructor* regExpConstructor;
- ErrorConstructor* errorConstructor;
- NativeErrorConstructor* evalErrorConstructor;
- NativeErrorConstructor* rangeErrorConstructor;
- NativeErrorConstructor* referenceErrorConstructor;
- NativeErrorConstructor* syntaxErrorConstructor;
- NativeErrorConstructor* typeErrorConstructor;
- NativeErrorConstructor* URIErrorConstructor;
-
- GlobalEvalFunction* evalFunction;
- NativeFunctionWrapper* callFunction;
- NativeFunctionWrapper* applyFunction;
-
- ObjectPrototype* objectPrototype;
- FunctionPrototype* functionPrototype;
- ArrayPrototype* arrayPrototype;
- BooleanPrototype* booleanPrototype;
- StringPrototype* stringPrototype;
- NumberPrototype* numberPrototype;
- DatePrototype* datePrototype;
- RegExpPrototype* regExpPrototype;
-
- JSObject* methodCallDummy;
+ WriteBarrier<RegExpConstructor> regExpConstructor;
+ WriteBarrier<ErrorConstructor> errorConstructor;
+ WriteBarrier<NativeErrorConstructor> evalErrorConstructor;
+ WriteBarrier<NativeErrorConstructor> rangeErrorConstructor;
+ WriteBarrier<NativeErrorConstructor> referenceErrorConstructor;
+ WriteBarrier<NativeErrorConstructor> syntaxErrorConstructor;
+ WriteBarrier<NativeErrorConstructor> typeErrorConstructor;
+ WriteBarrier<NativeErrorConstructor> URIErrorConstructor;
+
+ WriteBarrier<GlobalEvalFunction> evalFunction;
+ WriteBarrier<NativeFunctionWrapper> callFunction;
+ WriteBarrier<NativeFunctionWrapper> applyFunction;
+
+ WriteBarrier<ObjectPrototype> objectPrototype;
+ WriteBarrier<FunctionPrototype> functionPrototype;
+ WriteBarrier<ArrayPrototype> arrayPrototype;
+ WriteBarrier<BooleanPrototype> booleanPrototype;
+ WriteBarrier<StringPrototype> stringPrototype;
+ WriteBarrier<NumberPrototype> numberPrototype;
+ WriteBarrier<DatePrototype> datePrototype;
+ WriteBarrier<RegExpPrototype> regExpPrototype;
+
+ WriteBarrier<JSObject> methodCallDummy;
RefPtr<Structure> argumentsStructure;
RefPtr<Structure> arrayStructure;
@@ -155,7 +135,6 @@ namespace JSC {
RefPtr<JSGlobalData> globalData;
- HashSet<GlobalCodeBlock*> codeBlocks;
WeakMapSet weakMaps;
WeakRandom weakRandom;
};
@@ -167,7 +146,7 @@ namespace JSC {
: JSVariableObject(JSGlobalObject::createStructure(jsNull()), new JSGlobalObjectData(destroyJSGlobalObjectData))
{
COMPILE_ASSERT(JSGlobalObject::AnonymousSlotCount == 1, JSGlobalObject_has_only_a_single_slot);
- putAnonymousValue(0, this);
+ putThisToAnonymousValue(0);
init(this);
}
@@ -175,7 +154,7 @@ namespace JSC {
: JSVariableObject(structure, new JSGlobalObjectData(destroyJSGlobalObjectData))
{
COMPILE_ASSERT(JSGlobalObject::AnonymousSlotCount == 1, JSGlobalObject_has_only_a_single_slot);
- putAnonymousValue(0, this);
+ putThisToAnonymousValue(0);
init(this);
}
@@ -184,7 +163,7 @@ namespace JSC {
: JSVariableObject(structure, data)
{
COMPILE_ASSERT(JSGlobalObject::AnonymousSlotCount == 1, JSGlobalObject_has_only_a_single_slot);
- putAnonymousValue(0, this);
+ putThisToAnonymousValue(0);
init(thisValue);
}
@@ -202,35 +181,31 @@ namespace JSC {
virtual void defineGetter(ExecState*, const Identifier& propertyName, JSObject* getterFunc, unsigned attributes);
virtual void defineSetter(ExecState*, const Identifier& propertyName, JSObject* setterFunc, unsigned attributes);
- // Linked list of all global objects that use the same JSGlobalData.
- JSGlobalObject*& head() { return d()->globalData->head; }
- JSGlobalObject* next() { return d()->next; }
-
// The following accessors return pristine values, even if a script
// replaces the global object's associated property.
- RegExpConstructor* regExpConstructor() const { return d()->regExpConstructor; }
+ RegExpConstructor* regExpConstructor() const { return d()->regExpConstructor.get(); }
- ErrorConstructor* errorConstructor() const { return d()->errorConstructor; }
- NativeErrorConstructor* evalErrorConstructor() const { return d()->evalErrorConstructor; }
- NativeErrorConstructor* rangeErrorConstructor() const { return d()->rangeErrorConstructor; }
- NativeErrorConstructor* referenceErrorConstructor() const { return d()->referenceErrorConstructor; }
- NativeErrorConstructor* syntaxErrorConstructor() const { return d()->syntaxErrorConstructor; }
- NativeErrorConstructor* typeErrorConstructor() const { return d()->typeErrorConstructor; }
- NativeErrorConstructor* URIErrorConstructor() const { return d()->URIErrorConstructor; }
+ ErrorConstructor* errorConstructor() const { return d()->errorConstructor.get(); }
+ NativeErrorConstructor* evalErrorConstructor() const { return d()->evalErrorConstructor.get(); }
+ NativeErrorConstructor* rangeErrorConstructor() const { return d()->rangeErrorConstructor.get(); }
+ NativeErrorConstructor* referenceErrorConstructor() const { return d()->referenceErrorConstructor.get(); }
+ NativeErrorConstructor* syntaxErrorConstructor() const { return d()->syntaxErrorConstructor.get(); }
+ NativeErrorConstructor* typeErrorConstructor() const { return d()->typeErrorConstructor.get(); }
+ NativeErrorConstructor* URIErrorConstructor() const { return d()->URIErrorConstructor.get(); }
- GlobalEvalFunction* evalFunction() const { return d()->evalFunction; }
+ GlobalEvalFunction* evalFunction() const { return d()->evalFunction.get(); }
- ObjectPrototype* objectPrototype() const { return d()->objectPrototype; }
- FunctionPrototype* functionPrototype() const { return d()->functionPrototype; }
- ArrayPrototype* arrayPrototype() const { return d()->arrayPrototype; }
- BooleanPrototype* booleanPrototype() const { return d()->booleanPrototype; }
- StringPrototype* stringPrototype() const { return d()->stringPrototype; }
- NumberPrototype* numberPrototype() const { return d()->numberPrototype; }
- DatePrototype* datePrototype() const { return d()->datePrototype; }
- RegExpPrototype* regExpPrototype() const { return d()->regExpPrototype; }
+ ObjectPrototype* objectPrototype() const { return d()->objectPrototype.get(); }
+ FunctionPrototype* functionPrototype() const { return d()->functionPrototype.get(); }
+ ArrayPrototype* arrayPrototype() const { return d()->arrayPrototype.get(); }
+ BooleanPrototype* booleanPrototype() const { return d()->booleanPrototype.get(); }
+ StringPrototype* stringPrototype() const { return d()->stringPrototype.get(); }
+ NumberPrototype* numberPrototype() const { return d()->numberPrototype.get(); }
+ DatePrototype* datePrototype() const { return d()->datePrototype.get(); }
+ RegExpPrototype* regExpPrototype() const { return d()->regExpPrototype.get(); }
- JSObject* methodCallDummy() const { return d()->methodCallDummy; }
+ JSObject* methodCallDummy() const { return d()->methodCallDummy.get(); }
Structure* argumentsStructure() const { return d()->argumentsStructure.get(); }
Structure* arrayStructure() const { return d()->arrayStructure.get(); }
@@ -270,8 +245,6 @@ namespace JSC {
virtual bool isDynamicScope(bool& requiresDynamicChecks) const;
- HashSet<GlobalCodeBlock*>& codeBlocks() { return d()->codeBlocks; }
-
void copyGlobalsFrom(RegisterFile&);
void copyGlobalsTo(RegisterFile&);
@@ -322,7 +295,7 @@ namespace JSC {
void init(JSObject* thisValue);
void reset(JSValue prototype);
- void setRegisters(Register* registers, Register* registerArray, size_t count);
+ void setRegisters(Register* registers, PassOwnArrayPtr<Register> registerArray, size_t count);
void* operator new(size_t); // can only be allocated with JSGlobalData
};
@@ -335,7 +308,7 @@ namespace JSC {
return static_cast<JSGlobalObject*>(asObject(value));
}
- inline void JSGlobalObject::setRegisters(Register* registers, Register* registerArray, size_t count)
+ inline void JSGlobalObject::setRegisters(Register* registers, PassOwnArrayPtr<Register> registerArray, size_t count)
{
JSVariableObject::setRegisters(registers, registerArray);
d()->registerArraySize = count;
@@ -385,7 +358,7 @@ namespace JSC {
inline JSValue Structure::prototypeForLookup(ExecState* exec) const
{
if (typeInfo().type() == ObjectType)
- return m_prototype;
+ return m_prototype.get();
ASSERT(typeInfo().type() == StringType);
return exec->lexicalGlobalObject()->stringPrototype();
@@ -457,12 +430,12 @@ namespace JSC {
{
MarkedArgumentBuffer values;
values.append(singleItemValue);
- return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), values);
+ return new (exec) JSArray(exec->globalData(), exec->lexicalGlobalObject()->arrayStructure(), values);
}
inline JSArray* constructArray(ExecState* exec, const ArgList& values)
{
- return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), values);
+ return new (exec) JSArray(exec->globalData(), exec->lexicalGlobalObject()->arrayStructure(), values);
}
class DynamicGlobalObjectScope {
diff --git a/Source/JavaScriptCore/runtime/JSONObject.cpp b/Source/JavaScriptCore/runtime/JSONObject.cpp
index df4be52..0f7a576 100644
--- a/Source/JavaScriptCore/runtime/JSONObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSONObject.cpp
@@ -84,12 +84,13 @@ private:
public:
Holder(JSObject*);
- JSObject* object() const { return m_object; }
+ JSObject* object() const { return m_object.get(); }
+ DeprecatedPtr<JSObject>* objectSlot() { return &m_object; }
bool appendNextProperty(Stringifier&, UStringBuilder&);
private:
- JSObject* const m_object;
+ DeprecatedPtr<JSObject> m_object;
const bool m_isArray;
bool m_isJSArray;
unsigned m_index;
@@ -258,7 +259,7 @@ void Stringifier::markAggregate(MarkStack& markStack)
for (Stringifier* stringifier = this; stringifier; stringifier = stringifier->m_nextStringifierToMark) {
size_t size = m_holderStack.size();
for (size_t i = 0; i < size; ++i)
- markStack.append(m_holderStack[i].object());
+ markStack.append(m_holderStack[i].objectSlot());
}
}
@@ -269,7 +270,7 @@ JSValue Stringifier::stringify(JSValue value)
return jsNull();
PropertyNameForFunctionCall emptyPropertyName(m_exec->globalData().propertyNames->emptyIdentifier);
- object->putDirect(m_exec->globalData().propertyNames->emptyIdentifier, value);
+ object->putDirect(m_exec->globalData(), m_exec->globalData().propertyNames->emptyIdentifier, value);
UStringBuilder result;
if (appendStringifiedValue(result, value, object, emptyPropertyName) != StringifySucceeded)
@@ -284,9 +285,6 @@ void Stringifier::appendQuotedString(UStringBuilder& builder, const UString& val
{
int length = value.length();
- // String length plus 2 for quote marks plus 8 so we can accomodate a few escaped characters.
- builder.reserveCapacity(builder.length() + length + 2 + 8);
-
builder.append('"');
const UChar* data = value.characters();
@@ -502,7 +500,7 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, UStringBu
// First time through, initialize.
if (!m_index) {
if (m_isArray) {
- m_isJSArray = isJSArray(&exec->globalData(), m_object);
+ m_isJSArray = isJSArray(&exec->globalData(), m_object.get());
m_size = m_object->get(exec, exec->globalData().propertyNames->length).toUInt32(exec);
builder.append('[');
} else {
@@ -535,10 +533,10 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, UStringBu
if (m_isArray) {
// Get the value.
JSValue value;
- if (m_isJSArray && asArray(m_object)->canGetIndex(index))
- value = asArray(m_object)->getIndex(index);
+ if (m_isJSArray && asArray(m_object.get())->canGetIndex(index))
+ value = asArray(m_object.get())->getIndex(index);
else {
- PropertySlot slot(m_object);
+ PropertySlot slot(m_object.get());
if (!m_object->getOwnPropertySlot(exec, index, slot))
slot.setUndefined();
if (exec->hadException())
@@ -552,10 +550,10 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, UStringBu
stringifier.startNewLine(builder);
// Append the stringified value.
- stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, index);
+ stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object.get(), index);
} else {
// Get the value.
- PropertySlot slot(m_object);
+ PropertySlot slot(m_object.get());
Identifier& propertyName = m_propertyNames->propertyNameVector()[index];
if (!m_object->getOwnPropertySlot(exec, propertyName, slot))
return true;
@@ -577,7 +575,7 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, UStringBu
builder.append(' ');
// Append the stringified value.
- stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, propertyName);
+ stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object.get(), propertyName);
}
// From this point on, no access to the this pointer or to any members, because the
@@ -644,13 +642,13 @@ private:
{
JSValue args[] = { property, unfiltered };
ArgList argList(args, 2);
- return call(m_exec, m_function, m_callType, m_callData, thisObj, argList);
+ return call(m_exec, m_function.get(), m_callType, m_callData, thisObj, argList);
}
friend class Holder;
ExecState* m_exec;
- JSObject* m_function;
+ DeprecatedPtr<JSObject> m_function;
CallType m_callType;
CallData m_callData;
};
@@ -729,7 +727,7 @@ NEVER_INLINE JSValue Walker::walk(JSValue unfiltered)
array->deleteProperty(m_exec, indexStack.last());
else {
if (isJSArray(&m_exec->globalData(), array) && array->canSetIndex(indexStack.last()))
- array->setIndex(indexStack.last(), filteredValue);
+ array->setIndex(m_exec->globalData(), indexStack.last(), filteredValue);
else
array->put(m_exec, indexStack.last(), filteredValue);
}
diff --git a/Source/JavaScriptCore/runtime/JSObject.cpp b/Source/JavaScriptCore/runtime/JSObject.cpp
index 6ecc73f..277ffff 100644
--- a/Source/JavaScriptCore/runtime/JSObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSObject.cpp
@@ -312,7 +312,7 @@ void JSObject::defineGetter(ExecState* exec, const Identifier& propertyName, JSO
JSValue object = getDirect(propertyName);
if (object && object.isGetterSetter()) {
ASSERT(m_structure->hasGetterSetterProperties());
- asGetterSetter(object)->setGetter(getterFunction);
+ asGetterSetter(object)->setGetter(exec->globalData(), getterFunction);
return;
}
@@ -331,7 +331,7 @@ void JSObject::defineGetter(ExecState* exec, const Identifier& propertyName, JSO
}
m_structure->setHasGetterSetterProperties(true);
- getterSetter->setGetter(getterFunction);
+ getterSetter->setGetter(exec->globalData(), getterFunction);
}
void JSObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
@@ -339,7 +339,7 @@ void JSObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSO
JSValue object = getDirect(propertyName);
if (object && object.isGetterSetter()) {
ASSERT(m_structure->hasGetterSetterProperties());
- asGetterSetter(object)->setSetter(setterFunction);
+ asGetterSetter(object)->setSetter(exec->globalData(), setterFunction);
return;
}
@@ -358,7 +358,7 @@ void JSObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSO
}
m_structure->setHasGetterSetterProperties(true);
- getterSetter->setSetter(setterFunction);
+ getterSetter->setSetter(exec->globalData(), setterFunction);
}
JSValue JSObject::lookupGetter(ExecState*, const Identifier& propertyName)
@@ -512,39 +512,39 @@ void JSObject::removeDirect(const Identifier& propertyName)
if (m_structure->isUncacheableDictionary()) {
offset = m_structure->removePropertyWithoutTransition(propertyName);
if (offset != WTF::notFound)
- putDirectOffset(offset, jsUndefined());
+ putUndefinedAtDirectOffset(offset);
return;
}
RefPtr<Structure> structure = Structure::removePropertyTransition(m_structure, propertyName, offset);
setStructure(structure.release());
if (offset != WTF::notFound)
- putDirectOffset(offset, jsUndefined());
+ putUndefinedAtDirectOffset(offset);
}
void JSObject::putDirectFunction(ExecState* exec, InternalFunction* function, unsigned attr)
{
- putDirectFunction(Identifier(exec, function->name(exec)), function, attr);
+ putDirectFunction(exec->globalData(), Identifier(exec, function->name(exec)), function, attr);
}
void JSObject::putDirectFunction(ExecState* exec, JSFunction* function, unsigned attr)
{
- putDirectFunction(Identifier(exec, function->name(exec)), function, attr);
+ putDirectFunction(exec->globalData(), Identifier(exec, function->name(exec)), function, attr);
}
void JSObject::putDirectFunctionWithoutTransition(ExecState* exec, InternalFunction* function, unsigned attr)
{
- putDirectFunctionWithoutTransition(Identifier(exec, function->name(exec)), function, attr);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, function->name(exec)), function, attr);
}
void JSObject::putDirectFunctionWithoutTransition(ExecState* exec, JSFunction* function, unsigned attr)
{
- putDirectFunctionWithoutTransition(Identifier(exec, function->name(exec)), function, attr);
+ putDirectFunctionWithoutTransition(exec->globalData(), Identifier(exec, function->name(exec)), function, attr);
}
-NEVER_INLINE void JSObject::fillGetterPropertySlot(PropertySlot& slot, JSValue* location)
+NEVER_INLINE void JSObject::fillGetterPropertySlot(PropertySlot& slot, WriteBarrierBase<Unknown>* location)
{
- if (JSObject* getterFunction = asGetterSetter(*location)->getter()) {
+ if (JSObject* getterFunction = asGetterSetter(location->get())->getter()) {
if (!structure()->isDictionary())
slot.setCacheableGetterSlot(this, getterFunction, offsetForLocation(location));
else
@@ -595,11 +595,11 @@ static bool putDescriptor(ExecState* exec, JSObject* target, const Identifier& p
GetterSetter* accessor = new (exec) GetterSetter(exec);
if (oldDescriptor.getter()) {
attributes |= Getter;
- accessor->setGetter(asObject(oldDescriptor.getter()));
+ accessor->setGetter(exec->globalData(), asObject(oldDescriptor.getter()));
}
if (oldDescriptor.setter()) {
attributes |= Setter;
- accessor->setSetter(asObject(oldDescriptor.setter()));
+ accessor->setSetter(exec->globalData(), asObject(oldDescriptor.setter()));
}
target->putWithAttributes(exec, propertyName, accessor, attributes);
return true;
@@ -720,9 +720,9 @@ bool JSObject::defineOwnProperty(ExecState* exec, const Identifier& propertyName
GetterSetter* getterSetter = asGetterSetter(accessor);
if (current.attributesEqual(descriptor)) {
if (descriptor.setter())
- getterSetter->setSetter(asObject(descriptor.setter()));
+ getterSetter->setSetter(exec->globalData(), asObject(descriptor.setter()));
if (descriptor.getter())
- getterSetter->setGetter(asObject(descriptor.getter()));
+ getterSetter->setGetter(exec->globalData(), asObject(descriptor.getter()));
return true;
}
deleteProperty(exec, propertyName);
@@ -731,7 +731,7 @@ bool JSObject::defineOwnProperty(ExecState* exec, const Identifier& propertyName
attrs |= Setter;
if (descriptor.getter())
attrs |= Getter;
- putDirect(propertyName, getterSetter, attrs);
+ putDirect(exec->globalData(), propertyName, getterSetter, attrs);
return true;
}
diff --git a/Source/JavaScriptCore/runtime/JSObject.h b/Source/JavaScriptCore/runtime/JSObject.h
index 803abfd..b79249c 100644
--- a/Source/JavaScriptCore/runtime/JSObject.h
+++ b/Source/JavaScriptCore/runtime/JSObject.h
@@ -70,8 +70,8 @@ namespace JSC {
Setter = 1 << 6 // property is a setter
};
- typedef EncodedJSValue* PropertyStorage;
- typedef const EncodedJSValue* ConstPropertyStorage;
+ typedef WriteBarrierBase<Unknown>* PropertyStorage;
+ typedef const WriteBarrierBase<Unknown>* ConstPropertyStorage;
class JSObject : public JSCell {
friend class BatchedTransitionOptimizer;
@@ -155,22 +155,22 @@ namespace JSC {
return offset != WTF::notFound ? getDirectOffset(offset) : JSValue();
}
- JSValue* getDirectLocation(const Identifier& propertyName)
+ WriteBarrierBase<Unknown>* getDirectLocation(const Identifier& propertyName)
{
size_t offset = m_structure->get(propertyName);
return offset != WTF::notFound ? locationForOffset(offset) : 0;
}
- JSValue* getDirectLocation(const Identifier& propertyName, unsigned& attributes)
+ WriteBarrierBase<Unknown>* getDirectLocation(const Identifier& propertyName, unsigned& attributes)
{
JSCell* specificFunction;
size_t offset = m_structure->get(propertyName, attributes, specificFunction);
return offset != WTF::notFound ? locationForOffset(offset) : 0;
}
- size_t offsetForLocation(JSValue* location) const
+ size_t offsetForLocation(WriteBarrierBase<Unknown>* location) const
{
- return location - reinterpret_cast<const JSValue*>(propertyStorage());
+ return location - propertyStorage();
}
void transitionTo(Structure*);
@@ -179,25 +179,26 @@ namespace JSC {
bool hasCustomProperties() { return !m_structure->isEmpty(); }
bool hasGetterSetterProperties() { return m_structure->hasGetterSetterProperties(); }
- bool putDirect(const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
- void putDirect(const Identifier& propertyName, JSValue value, unsigned attr = 0);
- bool putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot&);
+ bool putDirect(JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr, bool checkReadOnly, PutPropertySlot&);
+ void putDirect(JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr = 0);
+ bool putDirect(JSGlobalData&, const Identifier& propertyName, JSValue, PutPropertySlot&);
- void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr = 0);
- void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
+ void putDirectFunction(JSGlobalData&, const Identifier& propertyName, JSCell*, unsigned attr = 0);
+ void putDirectFunction(JSGlobalData&, const Identifier& propertyName, JSCell*, unsigned attr, bool checkReadOnly, PutPropertySlot&);
void putDirectFunction(ExecState* exec, InternalFunction* function, unsigned attr = 0);
void putDirectFunction(ExecState* exec, JSFunction* function, unsigned attr = 0);
- void putDirectWithoutTransition(const Identifier& propertyName, JSValue value, unsigned attr = 0);
- void putDirectFunctionWithoutTransition(const Identifier& propertyName, JSCell* value, unsigned attr = 0);
+ void putDirectWithoutTransition(JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr = 0);
+ void putDirectFunctionWithoutTransition(JSGlobalData&, const Identifier& propertyName, JSCell* value, unsigned attr = 0);
void putDirectFunctionWithoutTransition(ExecState* exec, InternalFunction* function, unsigned attr = 0);
void putDirectFunctionWithoutTransition(ExecState* exec, JSFunction* function, unsigned attr = 0);
// Fast access to known property offsets.
- JSValue getDirectOffset(size_t offset) const { return JSValue::decode(propertyStorage()[offset]); }
- void putDirectOffset(size_t offset, JSValue value) { propertyStorage()[offset] = JSValue::encode(value); }
+ JSValue getDirectOffset(size_t offset) const { return propertyStorage()[offset].get(); }
+ void putDirectOffset(JSGlobalData& globalData, size_t offset, JSValue value) { propertyStorage()[offset].set(globalData, this, value); }
+ void putUndefinedAtDirectOffset(size_t offset) { propertyStorage()[offset].setUndefined(); }
- void fillGetterPropertySlot(PropertySlot&, JSValue* location);
+ void fillGetterPropertySlot(PropertySlot&, WriteBarrierBase<Unknown>* location);
virtual void defineGetter(ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes = 0);
virtual void defineSetter(ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes = 0);
@@ -225,25 +226,35 @@ namespace JSC {
return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
}
- void flattenDictionaryObject()
+ void flattenDictionaryObject(JSGlobalData& globalData)
{
- m_structure->flattenDictionaryStructure(this);
+ m_structure->flattenDictionaryStructure(globalData, this);
}
- void putAnonymousValue(unsigned index, JSValue value)
+ void putAnonymousValue(JSGlobalData& globalData, unsigned index, JSValue value)
{
ASSERT(index < m_structure->anonymousSlotCount());
- *locationForOffset(index) = value;
+ locationForOffset(index)->set(globalData, this, value);
+ }
+ void clearAnonymousValue(unsigned index)
+ {
+ ASSERT(index < m_structure->anonymousSlotCount());
+ locationForOffset(index)->clear();
}
JSValue getAnonymousValue(unsigned index) const
{
ASSERT(index < m_structure->anonymousSlotCount());
- return *locationForOffset(index);
+ return locationForOffset(index)->get();
}
protected:
static const unsigned StructureFlags = 0;
+ void putThisToAnonymousValue(unsigned index)
+ {
+ locationForOffset(index)->setWithoutWriteBarrier(this);
+ }
+
private:
// Nobody should ever ask any of these questions on something already known to be a JSObject.
using JSCell::isAPIValueWrapper;
@@ -253,22 +264,22 @@ namespace JSC {
void getString(ExecState* exec);
void isObject();
void isString();
-
+
ConstPropertyStorage propertyStorage() const { return (isUsingInlineStorage() ? m_inlineStorage : m_externalStorage); }
PropertyStorage propertyStorage() { return (isUsingInlineStorage() ? m_inlineStorage : m_externalStorage); }
- const JSValue* locationForOffset(size_t offset) const
+ const WriteBarrierBase<Unknown>* locationForOffset(size_t offset) const
{
- return reinterpret_cast<const JSValue*>(&propertyStorage()[offset]);
+ return &propertyStorage()[offset];
}
- JSValue* locationForOffset(size_t offset)
+ WriteBarrierBase<Unknown>* locationForOffset(size_t offset)
{
- return reinterpret_cast<JSValue*>(&propertyStorage()[offset]);
+ return &propertyStorage()[offset];
}
- bool putDirectInternal(const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot, JSCell*);
- bool putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
+ bool putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr, bool checkReadOnly, PutPropertySlot&, JSCell*);
+ bool putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue, unsigned attr, bool checkReadOnly, PutPropertySlot&);
void putDirectInternal(JSGlobalData&, const Identifier& propertyName, JSValue value, unsigned attr = 0);
bool inlineGetOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
@@ -278,7 +289,7 @@ namespace JSC {
union {
PropertyStorage m_externalStorage;
- EncodedJSValue m_inlineStorage[inlineStorageCapacity];
+ WriteBarrierBase<Unknown> m_inlineStorage[inlineStorageCapacity];
};
RefPtr<Structure> m_inheritorID;
@@ -372,11 +383,11 @@ inline bool JSValue::inherits(const ClassInfo* classInfo) const
ALWAYS_INLINE bool JSObject::inlineGetOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
{
- if (JSValue* location = getDirectLocation(propertyName)) {
- if (m_structure->hasGetterSetterProperties() && location[0].isGetterSetter())
+ if (WriteBarrierBase<Unknown>* location = getDirectLocation(propertyName)) {
+ if (m_structure->hasGetterSetterProperties() && location->isGetterSetter())
fillGetterPropertySlot(slot, location);
else
- slot.setValueSlot(this, location, offsetForLocation(location));
+ slot.setValue(this, location->get(), offsetForLocation(location));
return true;
}
@@ -450,7 +461,7 @@ inline JSValue JSObject::get(ExecState* exec, unsigned propertyName) const
return jsUndefined();
}
-inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot, JSCell* specificFunction)
+inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot, JSCell* specificFunction)
{
ASSERT(value);
ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
@@ -467,7 +478,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
if (checkReadOnly && currentAttributes & ReadOnly)
return false;
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
// At this point, the objects structure only has a specific value set if previously there
// had been one set, and if the new value being specified is the same (otherwise we would
// have despecified, above). So, if currentSpecificFunction is not set, or if the new
@@ -485,7 +496,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
allocatePropertyStorage(currentCapacity, m_structure->propertyStorageCapacity());
ASSERT(offset < m_structure->propertyStorageCapacity());
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
// See comment on setNewProperty call below.
if (!specificFunction)
slot.setNewProperty(this, offset);
@@ -500,7 +511,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
ASSERT(offset < structure->propertyStorageCapacity());
setStructure(structure.release());
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
// This is a new property; transitions with specific values are not currently cachable,
// so leave the slot in an uncachable state.
if (!specificFunction)
@@ -527,7 +538,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
if (currentSpecificFunction) {
// case (1) Do the put, then return leaving the slot uncachable.
if (specificFunction == currentSpecificFunction) {
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
return true;
}
// case (2) Despecify, fall through to (3).
@@ -536,7 +547,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
// case (3) set the slot, do the put, return.
slot.setExistingProperty(this, offset);
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
return true;
}
@@ -557,7 +568,7 @@ inline bool JSObject::putDirectInternal(const Identifier& propertyName, JSValue
ASSERT(offset < structure->propertyStorageCapacity());
setStructure(structure.release());
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
// This is a new property; transitions with specific values are not currently cachable,
// so leave the slot in an uncachable state.
if (!specificFunction)
@@ -570,61 +581,61 @@ inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifi
ASSERT(value);
ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
- return putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, getJSFunction(globalData, value));
+ return putDirectInternal(globalData, propertyName, value, attributes, checkReadOnly, slot, getJSFunction(globalData, value));
}
inline void JSObject::putDirectInternal(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, unsigned attributes)
{
PutPropertySlot slot;
- putDirectInternal(propertyName, value, attributes, false, slot, getJSFunction(globalData, value));
+ putDirectInternal(globalData, propertyName, value, attributes, false, slot, getJSFunction(globalData, value));
}
-inline bool JSObject::putDirect(const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)
+inline bool JSObject::putDirect(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)
{
ASSERT(value);
ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
- return putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, 0);
+ return putDirectInternal(globalData, propertyName, value, attributes, checkReadOnly, slot, 0);
}
-inline void JSObject::putDirect(const Identifier& propertyName, JSValue value, unsigned attributes)
+inline void JSObject::putDirect(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, unsigned attributes)
{
PutPropertySlot slot;
- putDirectInternal(propertyName, value, attributes, false, slot, 0);
+ putDirectInternal(globalData, propertyName, value, attributes, false, slot, 0);
}
-inline bool JSObject::putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
+inline bool JSObject::putDirect(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
{
- return putDirectInternal(propertyName, value, 0, false, slot, 0);
+ return putDirectInternal(globalData, propertyName, value, 0, false, slot, 0);
}
-inline void JSObject::putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)
+inline void JSObject::putDirectFunction(JSGlobalData& globalData, const Identifier& propertyName, JSCell* value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)
{
- putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, value);
+ putDirectInternal(globalData, propertyName, value, attributes, checkReadOnly, slot, value);
}
-inline void JSObject::putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr)
+inline void JSObject::putDirectFunction(JSGlobalData& globalData, const Identifier& propertyName, JSCell* value, unsigned attr)
{
PutPropertySlot slot;
- putDirectInternal(propertyName, value, attr, false, slot, value);
+ putDirectInternal(globalData, propertyName, value, attr, false, slot, value);
}
-inline void JSObject::putDirectWithoutTransition(const Identifier& propertyName, JSValue value, unsigned attributes)
+inline void JSObject::putDirectWithoutTransition(JSGlobalData& globalData, const Identifier& propertyName, JSValue value, unsigned attributes)
{
size_t currentCapacity = m_structure->propertyStorageCapacity();
size_t offset = m_structure->addPropertyWithoutTransition(propertyName, attributes, 0);
if (currentCapacity != m_structure->propertyStorageCapacity())
allocatePropertyStorage(currentCapacity, m_structure->propertyStorageCapacity());
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
}
-inline void JSObject::putDirectFunctionWithoutTransition(const Identifier& propertyName, JSCell* value, unsigned attributes)
+inline void JSObject::putDirectFunctionWithoutTransition(JSGlobalData& globalData, const Identifier& propertyName, JSCell* value, unsigned attributes)
{
size_t currentCapacity = m_structure->propertyStorageCapacity();
size_t offset = m_structure->addPropertyWithoutTransition(propertyName, attributes, value);
if (currentCapacity != m_structure->propertyStorageCapacity())
allocatePropertyStorage(currentCapacity, m_structure->propertyStorageCapacity());
- putDirectOffset(offset, value);
+ putDirectOffset(globalData, offset, value);
}
inline void JSObject::transitionTo(Structure* newStructure)
@@ -703,7 +714,7 @@ inline void JSValue::put(ExecState* exec, const Identifier& propertyName, JSValu
inline void JSValue::putDirect(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
{
ASSERT(isCell() && isObject());
- if (!asObject(asCell())->putDirect(propertyName, value, slot) && slot.isStrictMode())
+ if (!asObject(asCell())->putDirect(exec->globalData(), propertyName, value, slot) && slot.isStrictMode())
throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
}
@@ -725,7 +736,7 @@ ALWAYS_INLINE void JSObject::allocatePropertyStorageInline(size_t oldSize, size_
bool wasInline = (oldSize == JSObject::inlineStorageCapacity);
PropertyStorage oldPropertyStorage = (wasInline ? m_inlineStorage : m_externalStorage);
- PropertyStorage newPropertyStorage = new EncodedJSValue[newSize];
+ PropertyStorage newPropertyStorage = new WriteBarrierBase<Unknown>[newSize];
for (unsigned i = 0; i < oldSize; ++i)
newPropertyStorage[i] = oldPropertyStorage[i];
@@ -740,11 +751,10 @@ ALWAYS_INLINE void JSObject::markChildrenDirect(MarkStack& markStack)
{
JSCell::markChildren(markStack);
- markStack.append(prototype());
-
+ markStack.append(m_structure->storedPrototypeSlot());
PropertyStorage storage = propertyStorage();
size_t storageSize = m_structure->propertyStorageSize();
- markStack.appendValues(reinterpret_cast<JSValue*>(storage), storageSize);
+ markStack.appendValues(storage, storageSize);
}
// --- JSValue inlines ----------------------------
diff --git a/Source/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp
index e9d6c96..c16acb1 100644
--- a/Source/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp
@@ -35,7 +35,10 @@ JSObjectWithGlobalObject::JSObjectWithGlobalObject(JSGlobalObject* globalObject,
{
COMPILE_ASSERT(AnonymousSlotCount == 1, AnonymousSlotCount_must_be_one);
ASSERT(!globalObject || globalObject->isGlobalObject());
- putAnonymousValue(GlobalObjectSlot, globalObject);
+ if (!globalObject)
+ clearAnonymousValue(GlobalObjectSlot);
+ else
+ putAnonymousValue(globalObject->globalData(), GlobalObjectSlot, globalObject);
}
JSGlobalObject* JSObjectWithGlobalObject::globalObject() const
diff --git a/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp b/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp
index a5d4da0..6fd28e3 100644
--- a/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp
+++ b/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp
@@ -40,11 +40,11 @@ inline JSPropertyNameIterator::JSPropertyNameIterator(ExecState* exec, PropertyN
, m_cachedStructure(0)
, m_numCacheableSlots(numCacheableSlots)
, m_jsStringsSize(propertyNameArrayData->propertyNameVector().size())
- , m_jsStrings(new JSValue[m_jsStringsSize])
+ , m_jsStrings(adoptArrayPtr(new WriteBarrier<Unknown>[m_jsStringsSize]))
{
PropertyNameArrayData::PropertyNameVector& propertyNameVector = propertyNameArrayData->propertyNameVector();
for (size_t i = 0; i < m_jsStringsSize; ++i)
- m_jsStrings[i] = jsOwnedString(exec, propertyNameVector[i].ustring());
+ m_jsStrings[i].set(exec->globalData(), this, jsOwnedString(exec, propertyNameVector[i].ustring()));
}
JSPropertyNameIterator::~JSPropertyNameIterator()
@@ -91,7 +91,7 @@ JSPropertyNameIterator* JSPropertyNameIterator::create(ExecState* exec, JSObject
JSValue JSPropertyNameIterator::get(ExecState* exec, JSObject* base, size_t i)
{
- JSValue& identifier = m_jsStrings[i];
+ JSValue identifier = m_jsStrings[i].get();
if (m_cachedStructure == base->structure() && m_cachedPrototypeChain == base->structure()->prototypeChain(exec))
return identifier;
diff --git a/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h b/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h
index 01700ac..cd46243 100644
--- a/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h
+++ b/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h
@@ -85,7 +85,7 @@ namespace JSC {
RefPtr<StructureChain> m_cachedPrototypeChain;
uint32_t m_numCacheableSlots;
uint32_t m_jsStringsSize;
- OwnArrayPtr<JSValue> m_jsStrings;
+ OwnArrayPtr<WriteBarrier<Unknown> > m_jsStrings;
};
inline void Structure::setEnumerationCache(JSPropertyNameIterator* enumerationCache)
diff --git a/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp b/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp
index 7ab1d1c..80b048e 100644
--- a/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp
@@ -34,7 +34,7 @@ ASSERT_CLASS_FITS_IN_CELL(JSStaticScopeObject);
void JSStaticScopeObject::markChildren(MarkStack& markStack)
{
JSVariableObject::markChildren(markStack);
- markStack.append(d()->registerStore.jsValue());
+ markStack.deprecatedAppend(&d()->registerStore);
}
JSObject* JSStaticScopeObject::toThisObject(ExecState* exec) const
diff --git a/Source/JavaScriptCore/runtime/JSString.cpp b/Source/JavaScriptCore/runtime/JSString.cpp
index ba28139..848c431 100644
--- a/Source/JavaScriptCore/runtime/JSString.cpp
+++ b/Source/JavaScriptCore/runtime/JSString.cpp
@@ -255,7 +255,7 @@ UString JSString::toString(ExecState* exec) const
inline StringObject* StringObject::create(ExecState* exec, JSString* string)
{
- return new (exec) StringObject(exec->lexicalGlobalObject()->stringObjectStructure(), string);
+ return new (exec) StringObject(exec->globalData(), exec->lexicalGlobalObject()->stringObjectStructure(), string);
}
JSObject* JSString::toObject(ExecState* exec) const
diff --git a/Source/JavaScriptCore/runtime/JSValue.h b/Source/JavaScriptCore/runtime/JSValue.h
index cad9662..b2e7a51 100644
--- a/Source/JavaScriptCore/runtime/JSValue.h
+++ b/Source/JavaScriptCore/runtime/JSValue.h
@@ -47,6 +47,9 @@ namespace JSC {
struct ClassInfo;
struct Instruction;
+ template <class T> class DeprecatedPtr;
+ template <class T> class WriteBarrierBase;
+
enum PreferredPrimitiveType { NoPreference, PreferNumber, PreferString };
#if USE(JSVALUE32_64)
@@ -212,6 +215,9 @@ namespace JSC {
#endif
private:
+ template <class T> JSValue(DeprecatedPtr<T>);
+ template <class T> JSValue(WriteBarrierBase<T>);
+
enum HashTableDeletedValueTag { HashTableDeletedValue };
JSValue(HashTableDeletedValueTag);
diff --git a/Source/JavaScriptCore/runtime/JSVariableObject.h b/Source/JavaScriptCore/runtime/JSVariableObject.h
index 3f2e218..96a0ec4 100644
--- a/Source/JavaScriptCore/runtime/JSVariableObject.h
+++ b/Source/JavaScriptCore/runtime/JSVariableObject.h
@@ -89,8 +89,8 @@ namespace JSC {
{
}
- Register* copyRegisterArray(Register* src, size_t count);
- void setRegisters(Register* r, Register* registerArray);
+ PassOwnArrayPtr<Register> copyRegisterArray(Register* src, size_t count);
+ void setRegisters(Register* registers, PassOwnArrayPtr<Register> registerArray);
bool symbolTableGet(const Identifier&, PropertySlot&);
bool symbolTableGet(const Identifier&, PropertyDescriptor&);
@@ -149,18 +149,18 @@ namespace JSC {
return true;
}
- inline Register* JSVariableObject::copyRegisterArray(Register* src, size_t count)
+ inline PassOwnArrayPtr<Register> JSVariableObject::copyRegisterArray(Register* src, size_t count)
{
- Register* registerArray = new Register[count];
- memcpy(registerArray, src, count * sizeof(Register));
+ OwnArrayPtr<Register> registerArray = adoptArrayPtr(new Register[count]);
+ memcpy(registerArray.get(), src, count * sizeof(Register));
- return registerArray;
+ return registerArray.release();
}
- inline void JSVariableObject::setRegisters(Register* registers, Register* registerArray)
+ inline void JSVariableObject::setRegisters(Register* registers, PassOwnArrayPtr<Register> registerArray)
{
- ASSERT(registerArray != d->registerArray.get());
- d->registerArray.set(registerArray);
+ ASSERT(registerArray != d->registerArray);
+ d->registerArray = registerArray;
d->registers = registers;
}
diff --git a/Source/JavaScriptCore/runtime/JSWrapperObject.cpp b/Source/JavaScriptCore/runtime/JSWrapperObject.cpp
index 2c39f5c..6c73b2f 100644
--- a/Source/JavaScriptCore/runtime/JSWrapperObject.cpp
+++ b/Source/JavaScriptCore/runtime/JSWrapperObject.cpp
@@ -30,7 +30,7 @@ void JSWrapperObject::markChildren(MarkStack& markStack)
{
JSObject::markChildren(markStack);
if (m_internalValue)
- markStack.append(m_internalValue);
+ markStack.append(&m_internalValue);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/JSWrapperObject.h b/Source/JavaScriptCore/runtime/JSWrapperObject.h
index f19cd30..0b0d3fd 100644
--- a/Source/JavaScriptCore/runtime/JSWrapperObject.h
+++ b/Source/JavaScriptCore/runtime/JSWrapperObject.h
@@ -30,11 +30,11 @@ namespace JSC {
// Number, Boolean and Date which are wrappers for primitive types.
class JSWrapperObject : public JSObject {
protected:
- explicit JSWrapperObject(NonNullPassRefPtr<Structure>);
+ explicit JSWrapperObject(JSGlobalData&, NonNullPassRefPtr<Structure>);
public:
- JSValue internalValue() const { return m_internalValue; }
- void setInternalValue(JSValue);
+ JSValue internalValue() const { return m_internalValue.get(); }
+ void setInternalValue(JSGlobalData&, JSValue);
static PassRefPtr<Structure> createStructure(JSValue prototype)
{
@@ -47,21 +47,21 @@ namespace JSC {
private:
virtual void markChildren(MarkStack&);
- JSValue m_internalValue;
+ WriteBarrier<Unknown> m_internalValue;
};
- inline JSWrapperObject::JSWrapperObject(NonNullPassRefPtr<Structure> structure)
+ inline JSWrapperObject::JSWrapperObject(JSGlobalData& globalData, NonNullPassRefPtr<Structure> structure)
: JSObject(structure)
{
- putAnonymousValue(0, jsNull());
+ putAnonymousValue(globalData, 0, jsNull());
}
- inline void JSWrapperObject::setInternalValue(JSValue value)
+ inline void JSWrapperObject::setInternalValue(JSGlobalData& globalData, JSValue value)
{
ASSERT(value);
ASSERT(!value.isObject());
- m_internalValue = value;
- putAnonymousValue(0, value);
+ m_internalValue.set(globalData, this, value);
+ putAnonymousValue(globalData, 0, value);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/LiteralParser.cpp b/Source/JavaScriptCore/runtime/LiteralParser.cpp
index df87e7f..bc2e736 100644
--- a/Source/JavaScriptCore/runtime/LiteralParser.cpp
+++ b/Source/JavaScriptCore/runtime/LiteralParser.cpp
@@ -373,7 +373,7 @@ JSValue LiteralParser::parse(ParserState initialState)
}
case DoParseObjectEndExpression:
{
- asObject(objectStack.last())->putDirect(identifierStack.last(), lastValue);
+ asObject(objectStack.last())->putDirect(m_exec->globalData(), identifierStack.last(), lastValue);
identifierStack.removeLast();
if (m_lexer.currentToken().type == TokComma)
goto doParseObjectStartExpression;
diff --git a/Source/JavaScriptCore/runtime/Lookup.cpp b/Source/JavaScriptCore/runtime/Lookup.cpp
index dac1c94..3c7d4be 100644
--- a/Source/JavaScriptCore/runtime/Lookup.cpp
+++ b/Source/JavaScriptCore/runtime/Lookup.cpp
@@ -74,7 +74,7 @@ void setUpStaticFunctionSlot(ExecState* exec, const HashEntry* entry, JSObject*
ASSERT(thisObj->structure()->anonymousSlotCount() > 0);
ASSERT(thisObj->getAnonymousValue(0).isCell() && asObject(thisObj->getAnonymousValue(0).asCell())->isGlobalObject());
ASSERT(entry->attributes() & Function);
- JSValue* location = thisObj->getDirectLocation(propertyName);
+ WriteBarrierBase<Unknown>* location = thisObj->getDirectLocation(propertyName);
if (!location) {
NativeFunctionWrapper* function;
@@ -86,11 +86,11 @@ void setUpStaticFunctionSlot(ExecState* exec, const HashEntry* entry, JSObject*
#endif
function = new (exec) NativeFunctionWrapper(exec, globalObject, globalObject->prototypeFunctionStructure(), entry->functionLength(), propertyName, entry->function());
- thisObj->putDirectFunction(propertyName, function, entry->attributes());
+ thisObj->putDirectFunction(exec->globalData(), propertyName, function, entry->attributes());
location = thisObj->getDirectLocation(propertyName);
}
- slot.setValueSlot(thisObj, location, thisObj->offsetForLocation(location));
+ slot.setValue(thisObj, location->get(), thisObj->offsetForLocation(location));
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/Lookup.h b/Source/JavaScriptCore/runtime/Lookup.h
index 0d6d98f..43184e5 100644
--- a/Source/JavaScriptCore/runtime/Lookup.h
+++ b/Source/JavaScriptCore/runtime/Lookup.h
@@ -312,9 +312,9 @@ namespace JSC {
if (entry->attributes() & Function) { // function: put as override property
if (LIKELY(value.isCell()))
- thisObj->putDirectFunction(propertyName, value.asCell());
+ thisObj->putDirectFunction(exec->globalData(), propertyName, value.asCell());
else
- thisObj->putDirect(propertyName, value);
+ thisObj->putDirect(exec->globalData(), propertyName, value);
} else if (!(entry->attributes() & ReadOnly))
entry->propertyPutter()(exec, thisObj, value);
diff --git a/Source/JavaScriptCore/runtime/MachineStackMarker.cpp b/Source/JavaScriptCore/runtime/MachineStackMarker.cpp
index e52f402..4430947 100644
--- a/Source/JavaScriptCore/runtime/MachineStackMarker.cpp
+++ b/Source/JavaScriptCore/runtime/MachineStackMarker.cpp
@@ -21,6 +21,7 @@
#include "config.h"
#include "MachineStackMarker.h"
+#include "ConservativeSet.h"
#include "Heap.h"
#include "JSArray.h"
#include "JSGlobalData.h"
@@ -73,6 +74,18 @@
namespace JSC {
+static inline void swapIfBackwards(void*& begin, void*& end)
+{
+#if OS(WINCE)
+ if (begin <= end)
+ return;
+ std::swap(begin, end);
+#else
+UNUSED_PARAM(begin);
+UNUSED_PARAM(end);
+#endif
+}
+
#if ENABLE(JSC_MULTIPLE_THREADS)
#if OS(DARWIN)
@@ -196,7 +209,10 @@ void MachineStackMarker::unregisterThread()
void NEVER_INLINE MachineStackMarker::markCurrentThreadConservativelyInternal(ConservativeSet& conservativeSet)
{
- m_heap->markConservatively(conservativeSet, m_heap->globalData()->stack().current(), m_heap->globalData()->stack().origin());
+ void* begin = m_heap->globalData()->stack().current();
+ void* end = m_heap->globalData()->stack().origin();
+ swapIfBackwards(begin, end);
+ conservativeSet.add(begin, end);
}
#if COMPILER(GCC)
@@ -358,10 +374,12 @@ void MachineStackMarker::markOtherThreadConservatively(ConservativeSet& conserva
size_t regSize = getPlatformThreadRegisters(thread->platformThread, regs);
// mark the thread's registers
- m_heap->markConservatively(conservativeSet, static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
+ conservativeSet.add(static_cast<void*>(&regs), static_cast<void*>(reinterpret_cast<char*>(&regs) + regSize));
void* stackPointer = otherThreadStackPointer(regs);
- m_heap->markConservatively(conservativeSet, stackPointer, thread->stackBase);
+ void* stackBase = thread->stackBase;
+ swapIfBackwards(stackPointer, stackBase);
+ conservativeSet.add(stackPointer, stackBase);
resumeThread(thread->platformThread);
}
diff --git a/Source/JavaScriptCore/runtime/MarkStack.h b/Source/JavaScriptCore/runtime/MarkStack.h
index 7946e65..0b7941e 100644
--- a/Source/JavaScriptCore/runtime/MarkStack.h
+++ b/Source/JavaScriptCore/runtime/MarkStack.h
@@ -27,7 +27,8 @@
#define MarkStack_h
#include "JSValue.h"
-#include <wtf/HashSet.h>
+#include "WriteBarrier.h"
+#include <wtf/Vector.h>
#include <wtf/Noncopyable.h>
#include <wtf/OSAllocator.h>
@@ -49,17 +50,23 @@ namespace JSC {
#endif
{
}
-
- ALWAYS_INLINE void append(JSValue);
- void append(JSCell*);
- ALWAYS_INLINE void appendValues(Register* values, size_t count, MarkSetProperties properties = NoNullValues)
+ void deprecatedAppend(JSValue*);
+ void deprecatedAppend(JSCell**);
+ void deprecatedAppend(Register*);
+ template <typename T> void append(WriteBarrierBase<T>*);
+ template <typename T> void append(DeprecatedPtr<T>*);
+
+ ALWAYS_INLINE void deprecatedAppendValues(Register* registers, size_t count, MarkSetProperties properties = NoNullValues)
{
- appendValues(reinterpret_cast<JSValue*>(values), count, properties);
+ JSValue* values = reinterpret_cast<JSValue*>(registers);
+ if (count)
+ m_markSets.append(MarkSet(values, values + count, properties));
}
- ALWAYS_INLINE void appendValues(JSValue* values, size_t count, MarkSetProperties properties = NoNullValues)
+ void appendValues(WriteBarrierBase<Unknown>* barriers, size_t count, MarkSetProperties properties = NoNullValues)
{
+ JSValue* values = barriers->slot();
if (count)
m_markSets.append(MarkSet(values, values + count, properties));
}
@@ -74,6 +81,8 @@ namespace JSC {
}
private:
+ void internalAppend(JSCell*);
+ void internalAppend(JSValue);
void markChildren(JSCell*);
struct MarkSet {
@@ -188,19 +197,6 @@ namespace JSC {
#endif
};
- class ConservativeSet {
- public:
- void add(JSCell* cell) { m_set.add(cell); }
- void mark(MarkStack& markStack)
- {
- HashSet<JSCell*>::iterator end = m_set.end();
- for (HashSet<JSCell*>::iterator it = m_set.begin(); it != end; ++it)
- markStack.append(*it);
- }
-
- private:
- HashSet<JSCell*> m_set;
- };
}
#endif
diff --git a/Source/JavaScriptCore/runtime/MarkedBlock.cpp b/Source/JavaScriptCore/runtime/MarkedBlock.cpp
new file mode 100644
index 0000000..16053f2
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/MarkedBlock.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MarkedBlock.h"
+
+#include "JSCell.h"
+
+namespace JSC {
+
+MarkedBlock* MarkedBlock::create(JSGlobalData* globalData)
+{
+ PageAllocationAligned allocation = PageAllocationAligned::allocate(BLOCK_SIZE, BLOCK_SIZE, OSAllocator::JSGCHeapPages);
+ if (!static_cast<bool>(allocation))
+ CRASH();
+ return new (allocation.base()) MarkedBlock(allocation, globalData);
+}
+
+void MarkedBlock::destroy(MarkedBlock* block)
+{
+ for (size_t i = 0; i < CELLS_PER_BLOCK; ++i)
+ reinterpret_cast<JSCell*>(&block->cells[i])->~JSCell();
+ block->m_allocation.deallocate();
+}
+
+MarkedBlock::MarkedBlock(const PageAllocationAligned& allocation, JSGlobalData* globalData)
+ : m_allocation(allocation)
+ , m_heap(&globalData->heap)
+{
+ marked.set(CELLS_PER_BLOCK - 1);
+
+ Structure* dummyMarkableCellStructure = globalData->dummyMarkableCellStructure.get();
+ for (size_t i = 0; i < CELLS_PER_BLOCK; ++i)
+ new (&cells[i]) JSCell(dummyMarkableCellStructure);
+}
+
+void MarkedBlock::sweep()
+{
+#if !ENABLE(JSC_ZOMBIES)
+ Structure* dummyMarkableCellStructure = m_heap->globalData()->dummyMarkableCellStructure.get();
+#endif
+
+ for (size_t i = 0; i < CELLS_PER_BLOCK; ++i) {
+ if (marked.get(i))
+ continue;
+
+ JSCell* cell = reinterpret_cast<JSCell*>(&cells[i]);
+#if ENABLE(JSC_ZOMBIES)
+ if (!cell->isZombie()) {
+ const ClassInfo* info = cell->classInfo();
+ cell->~JSCell();
+ new (cell) JSZombie(info, JSZombie::leakedZombieStructure());
+ marked.set(i);
+ }
+#else
+ cell->~JSCell();
+ new (cell) JSCell(dummyMarkableCellStructure);
+#endif
+ }
+}
+
+} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/MarkedBlock.h b/Source/JavaScriptCore/runtime/MarkedBlock.h
new file mode 100644
index 0000000..f726c25
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/MarkedBlock.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
+ * Copyright (C) 2001 Peter Kelly (pmk@post.com)
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef MarkedBlock_h
+#define MarkedBlock_h
+
+#include <wtf/Bitmap.h>
+#include <wtf/FixedArray.h>
+#include <wtf/PageAllocationAligned.h>
+
+#define ASSERT_CLASS_FITS_IN_CELL(class) COMPILE_ASSERT(sizeof(class) <= MarkedBlock::CELL_SIZE, class_fits_in_cell)
+
+namespace JSC {
+
+ class Heap;
+ class JSCell;
+ class JSGlobalData;
+
+ class MarkedBlock {
+#if OS(WINCE) || OS(SYMBIAN) || PLATFORM(BREWMP)
+ static const size_t BLOCK_SIZE = 64 * 1024; // 64k
+#else
+ static const size_t BLOCK_SIZE = 256 * 1024; // 256k
+#endif
+
+ static const size_t BLOCK_OFFSET_MASK = BLOCK_SIZE - 1;
+ static const size_t BLOCK_MASK = ~BLOCK_OFFSET_MASK;
+ static const size_t MINIMUM_CELL_SIZE = 64;
+ static const size_t CELL_ARRAY_LENGTH = (MINIMUM_CELL_SIZE / sizeof(double)) + (MINIMUM_CELL_SIZE % sizeof(double) != 0 ? sizeof(double) : 0);
+ public:
+ // This is still public for now, for use in assertions.
+ static const size_t CELL_SIZE = CELL_ARRAY_LENGTH * sizeof(double);
+ private:
+ static const size_t SMALL_CELL_SIZE = CELL_SIZE / 2;
+ static const size_t CELL_MASK = CELL_SIZE - 1;
+ static const size_t CELL_ALIGN_MASK = ~CELL_MASK;
+ static const size_t BITS_PER_BLOCK = BLOCK_SIZE / CELL_SIZE;
+ static const size_t CELLS_PER_BLOCK = (BLOCK_SIZE - sizeof(Heap*) - sizeof(WTF::Bitmap<BITS_PER_BLOCK>)) / CELL_SIZE; // Division rounds down intentionally.
+
+ struct CollectorCell {
+ FixedArray<double, CELL_ARRAY_LENGTH> memory;
+ };
+
+ // Cell size needs to be a power of two for CELL_MASK to be valid.
+ COMPILE_ASSERT(!(sizeof(CollectorCell) % 2), Collector_cell_size_is_power_of_two);
+
+ public:
+ static MarkedBlock* create(JSGlobalData*);
+ static void destroy(MarkedBlock*);
+
+ static bool isCellAligned(const void*);
+ static MarkedBlock* blockFor(const void*);
+
+ Heap* heap() const;
+
+ void* allocate(size_t& nextCell);
+ void sweep();
+
+ bool isEmpty();
+
+ void clearMarks();
+ size_t markCount();
+ size_t size();
+ size_t capacity();
+
+ size_t cellNumber(const void*);
+ bool isMarked(const void*);
+ bool testAndSetMarked(const void*);
+ void setMarked(const void*);
+
+ template <typename Functor> void forEach(Functor&);
+
+ FixedArray<CollectorCell, CELLS_PER_BLOCK> cells;
+
+ private:
+ MarkedBlock(const PageAllocationAligned&, JSGlobalData*);
+
+ WTF::Bitmap<BITS_PER_BLOCK> marked;
+ PageAllocationAligned m_allocation;
+ Heap* m_heap;
+ };
+
+ inline bool MarkedBlock::isCellAligned(const void* p)
+ {
+ return !((intptr_t)(p) & CELL_MASK);
+ }
+
+ inline MarkedBlock* MarkedBlock::blockFor(const void* p)
+ {
+ return reinterpret_cast<MarkedBlock*>(reinterpret_cast<uintptr_t>(p) & BLOCK_MASK);
+ }
+
+ inline Heap* MarkedBlock::heap() const
+ {
+ return m_heap;
+ }
+
+ inline bool MarkedBlock::isEmpty()
+ {
+ marked.clear(CELLS_PER_BLOCK - 1); // Clear the always-set last bit to avoid confusing isEmpty().
+ bool result = marked.isEmpty();
+ marked.set(CELLS_PER_BLOCK - 1);
+ return result;
+ }
+
+ inline void MarkedBlock::clearMarks()
+ {
+ // allocate() assumes that the last mark bit is always set.
+ marked.clearAll();
+ marked.set(CELLS_PER_BLOCK - 1);
+ }
+
+ inline size_t MarkedBlock::markCount()
+ {
+ return marked.count() - 1; // The last mark bit is always set.
+ }
+
+ inline size_t MarkedBlock::size()
+ {
+ return markCount() * CELL_SIZE;
+ }
+
+ inline size_t MarkedBlock::capacity()
+ {
+ return BLOCK_SIZE;
+ }
+
+ inline size_t MarkedBlock::cellNumber(const void* cell)
+ {
+ return (reinterpret_cast<uintptr_t>(cell) & BLOCK_OFFSET_MASK) / CELL_SIZE;
+ }
+
+ inline bool MarkedBlock::isMarked(const void* cell)
+ {
+ return marked.get(cellNumber(cell));
+ }
+
+ inline bool MarkedBlock::testAndSetMarked(const void* cell)
+ {
+ return marked.testAndSet(cellNumber(cell));
+ }
+
+ inline void MarkedBlock::setMarked(const void* cell)
+ {
+ marked.set(cellNumber(cell));
+ }
+
+ template <typename Functor> inline void MarkedBlock::forEach(Functor& functor)
+ {
+ for (size_t i = 0; i < CELLS_PER_BLOCK - 1; ++i) { // The last cell is a dummy place-holder.
+ if (!marked.get(i))
+ continue;
+ functor(reinterpret_cast<JSCell*>(&cells[i]));
+ }
+ }
+
+} // namespace JSC
+
+#endif // MarkedSpace_h
diff --git a/Source/JavaScriptCore/runtime/MarkedSpace.cpp b/Source/JavaScriptCore/runtime/MarkedSpace.cpp
index 036c8f0..2f8075d 100644
--- a/Source/JavaScriptCore/runtime/MarkedSpace.cpp
+++ b/Source/JavaScriptCore/runtime/MarkedSpace.cpp
@@ -21,361 +21,118 @@
#include "config.h"
#include "MarkedSpace.h"
-#include "CollectorHeapIterator.h"
#include "JSCell.h"
#include "JSGlobalData.h"
#include "JSLock.h"
-using std::max;
-
namespace JSC {
class Structure;
-// tunable parameters
-
-const size_t GROWTH_FACTOR = 2;
-const size_t LOW_WATER_FACTOR = 4;
-const size_t ALLOCATIONS_PER_COLLECTION = 3600;
-// This value has to be a macro to be used in max() without introducing
-// a PIC branch in Mach-O binaries, see <rdar://problem/5971391>.
-#define MIN_ARRAY_SIZE (static_cast<size_t>(14))
-
MarkedSpace::MarkedSpace(JSGlobalData* globalData)
- : m_globalData(globalData)
+ : m_waterMark(0)
+ , m_highWaterMark(0)
+ , m_globalData(globalData)
{
- memset(&m_heap, 0, sizeof(CollectorHeap));
allocateBlock();
}
-void MarkedSpace::destroy(ProtectCountSet& protectedValuesCopy)
+void MarkedSpace::destroy()
{
- clearMarkBits();
- ProtectCountSet::iterator protectedValuesEnd = protectedValuesCopy.end();
- for (ProtectCountSet::iterator it = protectedValuesCopy.begin(); it != protectedValuesEnd; ++it)
- markCell(it->first);
-
- m_heap.nextCell = 0;
- m_heap.nextBlock = 0;
- DeadObjectIterator it(m_heap, m_heap.nextBlock, m_heap.nextCell);
- DeadObjectIterator end(m_heap, m_heap.usedBlocks);
- for ( ; it != end; ++it)
- (*it)->~JSCell();
+ clearMarks(); // Make sure weak pointers appear dead during destruction.
- protectedValuesEnd = protectedValuesCopy.end();
- for (ProtectCountSet::iterator it = protectedValuesCopy.begin(); it != protectedValuesEnd; ++it)
- it->first->~JSCell();
-
- for (size_t block = 0; block < m_heap.usedBlocks; ++block)
- m_heap.blocks[block].deallocate();
-
- fastFree(m_heap.blocks);
-
- memset(&m_heap, 0, sizeof(CollectorHeap));
+ while (m_heap.blocks.size())
+ freeBlock(0);
+ m_heap.blocks.clear();
}
-NEVER_INLINE CollectorBlock* MarkedSpace::allocateBlock()
+NEVER_INLINE MarkedBlock* MarkedSpace::allocateBlock()
{
- PageAllocationAligned allocation = PageAllocationAligned::allocate(BLOCK_SIZE, BLOCK_SIZE, OSAllocator::JSGCHeapPages);
- CollectorBlock* block = static_cast<CollectorBlock*>(allocation.base());
- if (!block)
- CRASH();
-
- // Initialize block.
-
- block->heap = &globalData()->heap;
- clearMarkBits(block);
-
- Structure* dummyMarkableCellStructure = globalData()->dummyMarkableCellStructure.get();
- for (size_t i = 0; i < HeapConstants::cellsPerBlock; ++i)
- new (&block->cells[i]) JSCell(dummyMarkableCellStructure);
-
- // Add block to blocks vector.
-
- size_t numBlocks = m_heap.numBlocks;
- if (m_heap.usedBlocks == numBlocks) {
- static const size_t maxNumBlocks = ULONG_MAX / sizeof(PageAllocationAligned) / GROWTH_FACTOR;
- if (numBlocks > maxNumBlocks)
- CRASH();
- numBlocks = max(MIN_ARRAY_SIZE, numBlocks * GROWTH_FACTOR);
- m_heap.numBlocks = numBlocks;
- m_heap.blocks = static_cast<PageAllocationAligned*>(fastRealloc(m_heap.blocks, numBlocks * sizeof(PageAllocationAligned)));
- }
- m_heap.blocks[m_heap.usedBlocks++] = allocation;
-
+ MarkedBlock* block = MarkedBlock::create(globalData());
+ m_heap.blocks.append(block);
return block;
}
NEVER_INLINE void MarkedSpace::freeBlock(size_t block)
{
- ObjectIterator it(m_heap, block);
- ObjectIterator end(m_heap, block + 1);
- for ( ; it != end; ++it)
- (*it)->~JSCell();
- m_heap.blocks[block].deallocate();
+ MarkedBlock::destroy(m_heap.blocks[block]);
// swap with the last block so we compact as we go
- m_heap.blocks[block] = m_heap.blocks[m_heap.usedBlocks - 1];
- m_heap.usedBlocks--;
-
- if (m_heap.numBlocks > MIN_ARRAY_SIZE && m_heap.usedBlocks < m_heap.numBlocks / LOW_WATER_FACTOR) {
- m_heap.numBlocks = m_heap.numBlocks / GROWTH_FACTOR;
- m_heap.blocks = static_cast<PageAllocationAligned*>(fastRealloc(m_heap.blocks, m_heap.numBlocks * sizeof(PageAllocationAligned)));
- }
+ m_heap.blocks[block] = m_heap.blocks.last();
+ m_heap.blocks.removeLast();
}
-void* MarkedSpace::allocate(size_t s)
+void* MarkedSpace::allocate(size_t)
{
- ASSERT(globalData()->identifierTable == wtfThreadData().currentIdentifierTable());
- typedef HeapConstants::Block Block;
- typedef HeapConstants::Cell Cell;
-
- ASSERT(JSLock::lockCount() > 0);
- ASSERT(JSLock::currentThreadIsHoldingLock());
- ASSERT_UNUSED(s, s <= HeapConstants::cellSize);
-
- // Fast case: find the next garbage cell and recycle it.
-
do {
- ASSERT(m_heap.nextBlock < m_heap.usedBlocks);
- Block* block = m_heap.collectorBlock(m_heap.nextBlock);
- do {
- ASSERT(m_heap.nextCell < HeapConstants::cellsPerBlock);
- if (!block->marked.get(m_heap.nextCell)) { // Always false for the last cell in the block
- Cell* cell = &block->cells[m_heap.nextCell];
+ ASSERT(m_heap.nextBlock < m_heap.blocks.size());
+ MarkedBlock* block = m_heap.collectorBlock(m_heap.nextBlock);
+ if (void* result = block->allocate(m_heap.nextCell))
+ return result;
- JSCell* imp = reinterpret_cast<JSCell*>(cell);
- imp->~JSCell();
+ m_waterMark += block->capacity();
+ } while (++m_heap.nextBlock != m_heap.blocks.size());
- ++m_heap.nextCell;
- return cell;
- }
- block->marked.advanceToNextPossibleFreeCell(m_heap.nextCell);
- } while (m_heap.nextCell != HeapConstants::cellsPerBlock);
- m_heap.nextCell = 0;
- } while (++m_heap.nextBlock != m_heap.usedBlocks);
-
- return 0;
-}
+ if (m_waterMark < m_highWaterMark)
+ return allocateBlock()->allocate(m_heap.nextCell);
-void MarkedSpace::resizeBlocks()
-{
- size_t usedCellCount = markedCells();
- size_t minCellCount = usedCellCount + max(ALLOCATIONS_PER_COLLECTION, usedCellCount);
- size_t minBlockCount = (minCellCount + HeapConstants::cellsPerBlock - 1) / HeapConstants::cellsPerBlock;
-
- size_t maxCellCount = 1.25f * minCellCount;
- size_t maxBlockCount = (maxCellCount + HeapConstants::cellsPerBlock - 1) / HeapConstants::cellsPerBlock;
-
- if (m_heap.usedBlocks < minBlockCount)
- growBlocks(minBlockCount);
- else if (m_heap.usedBlocks > maxBlockCount)
- shrinkBlocks(maxBlockCount);
-}
-
-void MarkedSpace::growBlocks(size_t neededBlocks)
-{
- ASSERT(m_heap.usedBlocks < neededBlocks);
- while (m_heap.usedBlocks < neededBlocks)
- allocateBlock();
+ return 0;
}
-void MarkedSpace::shrinkBlocks(size_t neededBlocks)
+void MarkedSpace::shrink()
{
- ASSERT(m_heap.usedBlocks > neededBlocks);
-
- // Clear the always-on last bit, so isEmpty() isn't fooled by it.
- for (size_t i = 0; i < m_heap.usedBlocks; ++i)
- m_heap.collectorBlock(i)->marked.clear(HeapConstants::cellsPerBlock - 1);
-
- for (size_t i = 0; i != m_heap.usedBlocks && m_heap.usedBlocks != neededBlocks; ) {
- if (m_heap.collectorBlock(i)->marked.isEmpty()) {
+ for (size_t i = 0; i != m_heap.blocks.size() && m_heap.blocks.size() > 1; ) { // We assume at least one block exists at all times.
+ if (m_heap.collectorBlock(i)->isEmpty()) {
freeBlock(i);
} else
++i;
}
-
- // Reset the always-on last bit.
- for (size_t i = 0; i < m_heap.usedBlocks; ++i)
- m_heap.collectorBlock(i)->marked.set(HeapConstants::cellsPerBlock - 1);
}
-inline bool isPointerAligned(void* p)
+void MarkedSpace::clearMarks()
{
- return (((intptr_t)(p) & (sizeof(char*) - 1)) == 0);
-}
-
-// Cell size needs to be a power of two for isPossibleCell to be valid.
-COMPILE_ASSERT(sizeof(CollectorCell) % 2 == 0, Collector_cell_size_is_power_of_two);
-
-static inline bool isCellAligned(void *p)
-{
- return (((intptr_t)(p) & CELL_MASK) == 0);
-}
-
-static inline bool isPossibleCell(void* p)
-{
- return isCellAligned(p) && p;
-}
-
-void MarkedSpace::markConservatively(ConservativeSet& conservativeSet, void* start, void* end)
-{
-#if OS(WINCE)
- if (start > end) {
- void* tmp = start;
- start = end;
- end = tmp;
- }
-#else
- ASSERT(start <= end);
-#endif
-
- ASSERT((static_cast<char*>(end) - static_cast<char*>(start)) < 0x1000000);
- ASSERT(isPointerAligned(start));
- ASSERT(isPointerAligned(end));
-
- char** p = static_cast<char**>(start);
- char** e = static_cast<char**>(end);
-
- while (p != e) {
- char* x = *p++;
- if (isPossibleCell(x)) {
- uintptr_t xAsBits = reinterpret_cast<uintptr_t>(x);
- xAsBits &= CELL_ALIGN_MASK;
-
- uintptr_t offset = xAsBits & BLOCK_OFFSET_MASK;
- const size_t lastCellOffset = sizeof(CollectorCell) * (CELLS_PER_BLOCK - 1);
- if (offset > lastCellOffset)
- continue;
-
- CollectorBlock* blockAddr = reinterpret_cast<CollectorBlock*>(xAsBits - offset);
- size_t usedBlocks = m_heap.usedBlocks;
- for (size_t block = 0; block < usedBlocks; block++) {
- if (m_heap.collectorBlock(block) != blockAddr)
- continue;
-
- // x is a pointer into the heap. Now, verify that the cell it
- // points to is live. (If the cell is dead, we must not mark it,
- // since that would revive it in a zombie state.)
- if (block < m_heap.nextBlock) {
- conservativeSet.add(reinterpret_cast<JSCell*>(xAsBits));
- break;
- }
-
- size_t cellOffset = offset / CELL_SIZE;
-
- if (block == m_heap.nextBlock && cellOffset < m_heap.nextCell) {
- conservativeSet.add(reinterpret_cast<JSCell*>(xAsBits));
- break;
- }
-
- if (blockAddr->marked.get(cellOffset)) {
- conservativeSet.add(reinterpret_cast<JSCell*>(xAsBits));
- break;
- }
- }
- }
- }
-}
-
-void MarkedSpace::clearMarkBits()
-{
- for (size_t i = 0; i < m_heap.usedBlocks; ++i)
- clearMarkBits(m_heap.collectorBlock(i));
-}
-
-void MarkedSpace::clearMarkBits(CollectorBlock* block)
-{
- // allocate assumes that the last cell in every block is marked.
- block->marked.clearAll();
- block->marked.set(HeapConstants::cellsPerBlock - 1);
-}
-
-size_t MarkedSpace::markedCells(size_t startBlock, size_t startCell) const
-{
- ASSERT(startBlock <= m_heap.usedBlocks);
- ASSERT(startCell < HeapConstants::cellsPerBlock);
-
- if (startBlock >= m_heap.usedBlocks)
- return 0;
-
- size_t result = 0;
- result += m_heap.collectorBlock(startBlock)->marked.count(startCell);
- for (size_t i = startBlock + 1; i < m_heap.usedBlocks; ++i)
- result += m_heap.collectorBlock(i)->marked.count();
-
- return result;
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ m_heap.collectorBlock(i)->clearMarks();
}
void MarkedSpace::sweep()
{
-#if !ENABLE(JSC_ZOMBIES)
- Structure* dummyMarkableCellStructure = globalData()->dummyMarkableCellStructure.get();
-#endif
-
- DeadObjectIterator it(m_heap, m_heap.nextBlock, m_heap.nextCell);
- DeadObjectIterator end(m_heap, m_heap.usedBlocks);
- for ( ; it != end; ++it) {
- JSCell* cell = *it;
-#if ENABLE(JSC_ZOMBIES)
- if (!cell->isZombie()) {
- const ClassInfo* info = cell->classInfo();
- cell->~JSCell();
- new (cell) JSZombie(info, JSZombie::leakedZombieStructure());
- Heap::markCell(cell);
- }
-#else
- cell->~JSCell();
- // Callers of sweep assume it's safe to mark any cell in the heap.
- new (cell) JSCell(dummyMarkableCellStructure);
-#endif
- }
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ m_heap.collectorBlock(i)->sweep();
}
size_t MarkedSpace::objectCount() const
{
- return m_heap.nextBlock * HeapConstants::cellsPerBlock // allocated full blocks
- + m_heap.nextCell // allocated cells in current block
- + markedCells(m_heap.nextBlock, m_heap.nextCell) // marked cells in remainder of m_heap
- - m_heap.usedBlocks; // 1 cell per block is a dummy sentinel
-}
-
-void MarkedSpace::addToStatistics(Statistics& statistics) const
-{
- statistics.size += m_heap.usedBlocks * BLOCK_SIZE;
- statistics.free += m_heap.usedBlocks * BLOCK_SIZE - (objectCount() * HeapConstants::cellSize);
+ size_t result = 0;
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ result += m_heap.collectorBlock(i)->markCount();
+ return result;
}
-MarkedSpace::Statistics MarkedSpace::statistics() const
+size_t MarkedSpace::size() const
{
- Statistics statistics = { 0, 0 };
- addToStatistics(statistics);
- return statistics;
+ size_t result = 0;
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ result += m_heap.collectorBlock(i)->size();
+ return result;
}
-size_t MarkedSpace::size() const
+size_t MarkedSpace::capacity() const
{
- return m_heap.usedBlocks * BLOCK_SIZE;
+ size_t result = 0;
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ result += m_heap.collectorBlock(i)->capacity();
+ return result;
}
void MarkedSpace::reset()
{
m_heap.nextCell = 0;
m_heap.nextBlock = 0;
+ m_waterMark = 0;
#if ENABLE(JSC_ZOMBIES)
sweep();
#endif
- resizeBlocks();
-}
-
-LiveObjectIterator MarkedSpace::primaryHeapBegin()
-{
- return LiveObjectIterator(m_heap, 0);
-}
-
-LiveObjectIterator MarkedSpace::primaryHeapEnd()
-{
- return LiveObjectIterator(m_heap, m_heap.usedBlocks);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/MarkedSpace.h b/Source/JavaScriptCore/runtime/MarkedSpace.h
index af312b5..fcb93b7 100644
--- a/Source/JavaScriptCore/runtime/MarkedSpace.h
+++ b/Source/JavaScriptCore/runtime/MarkedSpace.h
@@ -23,7 +23,9 @@
#define MarkedSpace_h
#include "MachineStackMarker.h"
+#include "MarkedBlock.h"
#include "PageAllocationAligned.h"
+#include <wtf/Bitmap.h>
#include <wtf/FixedArray.h>
#include <wtf/HashCountedSet.h>
#include <wtf/Noncopyable.h>
@@ -31,7 +33,6 @@
namespace JSC {
- class CollectorBlock;
class Heap;
class JSCell;
class JSGlobalData;
@@ -39,182 +40,115 @@ namespace JSC {
class MarkStack;
class WeakGCHandle;
-#if OS(WINCE) || OS(SYMBIAN) || PLATFORM(BREWMP)
- const size_t BLOCK_SIZE = 64 * 1024; // 64k
-#else
- const size_t BLOCK_SIZE = 256 * 1024; // 256k
-#endif
-
- typedef HashCountedSet<JSCell*> ProtectCountSet;
-
struct CollectorHeap {
- size_t nextBlock;
- size_t nextCell;
- PageAllocationAligned* blocks;
+ CollectorHeap()
+ : nextBlock(0)
+ , nextCell(0)
+ {
+ }
- size_t numBlocks;
- size_t usedBlocks;
-
- CollectorBlock* collectorBlock(size_t index) const
+ MarkedBlock* collectorBlock(size_t index) const
{
- return static_cast<CollectorBlock*>(blocks[index].base());
+ return blocks[index];
}
+
+ size_t nextBlock;
+ size_t nextCell;
+ Vector<MarkedBlock*> blocks;
};
class MarkedSpace {
WTF_MAKE_NONCOPYABLE(MarkedSpace);
public:
- MarkedSpace(JSGlobalData*);
- void destroy(ProtectCountSet&);
-
- void* allocate(size_t);
-
- size_t objectCount() const;
- struct Statistics {
- size_t size;
- size_t free;
- };
- Statistics statistics() const;
- size_t size() const;
-
static Heap* heap(JSCell*);
- static bool isCellMarked(const JSCell*);
- static bool checkMarkCell(const JSCell*);
- static void markCell(JSCell*);
-
- WeakGCHandle* addWeakGCHandle(JSCell*);
-
- void markConservatively(ConservativeSet&, void* start, void* end);
+ static bool isMarked(const JSCell*);
+ static bool testAndSetMarked(const JSCell*);
+ static void setMarked(const JSCell*);
- static bool isNumber(JSCell*);
-
- LiveObjectIterator primaryHeapBegin();
- LiveObjectIterator primaryHeapEnd();
+ MarkedSpace(JSGlobalData*);
+ void destroy();
JSGlobalData* globalData() { return m_globalData; }
- static CollectorBlock* cellBlock(const JSCell*);
- static size_t cellOffset(const JSCell*);
+ size_t highWaterMark() { return m_highWaterMark; }
+ void setHighWaterMark(size_t highWaterMark) { m_highWaterMark = highWaterMark; }
+
+ void* allocate(size_t);
+ void clearMarks();
+ void markRoots();
void reset();
void sweep();
+ void shrink();
- NEVER_INLINE CollectorBlock* allocateBlock();
- NEVER_INLINE void freeBlock(size_t);
- void resizeBlocks();
- void growBlocks(size_t neededBlocks);
- void shrinkBlocks(size_t neededBlocks);
- void clearMarkBits();
- void clearMarkBits(CollectorBlock*);
- size_t markedCells(size_t startBlock = 0, size_t startCell = 0) const;
+ size_t size() const;
+ size_t capacity() const;
+ size_t objectCount() const;
- void addToStatistics(Statistics&) const;
+ bool contains(const void*);
- void markRoots();
+ template<typename Functor> void forEach(Functor&);
private:
- CollectorHeap m_heap;
- JSGlobalData* m_globalData;
- };
+ NEVER_INLINE MarkedBlock* allocateBlock();
+ NEVER_INLINE void freeBlock(size_t);
- // tunable parameters
- // derived constants
- const size_t BLOCK_OFFSET_MASK = BLOCK_SIZE - 1;
- const size_t BLOCK_MASK = ~BLOCK_OFFSET_MASK;
- const size_t MINIMUM_CELL_SIZE = 64;
- const size_t CELL_ARRAY_LENGTH = (MINIMUM_CELL_SIZE / sizeof(double)) + (MINIMUM_CELL_SIZE % sizeof(double) != 0 ? sizeof(double) : 0);
- const size_t CELL_SIZE = CELL_ARRAY_LENGTH * sizeof(double);
- const size_t SMALL_CELL_SIZE = CELL_SIZE / 2;
- const size_t CELL_MASK = CELL_SIZE - 1;
- const size_t CELL_ALIGN_MASK = ~CELL_MASK;
- const size_t CELLS_PER_BLOCK = (BLOCK_SIZE - sizeof(MarkedSpace*)) * 8 * CELL_SIZE / (8 * CELL_SIZE + 1) / CELL_SIZE; // one bitmap byte can represent 8 cells.
-
- const size_t BITMAP_SIZE = (CELLS_PER_BLOCK + 7) / 8;
- const size_t BITMAP_WORDS = (BITMAP_SIZE + 3) / sizeof(uint32_t);
-
- struct CollectorBitmap {
- FixedArray<uint32_t, BITMAP_WORDS> bits;
- bool get(size_t n) const { return !!(bits[n >> 5] & (1 << (n & 0x1F))); }
- void set(size_t n) { bits[n >> 5] |= (1 << (n & 0x1F)); }
- bool getset(size_t n)
- {
- unsigned i = (1 << (n & 0x1F));
- uint32_t& b = bits[n >> 5];
- bool r = !!(b & i);
- b |= i;
- return r;
- }
- void clear(size_t n) { bits[n >> 5] &= ~(1 << (n & 0x1F)); }
- void clearAll() { memset(bits.data(), 0, sizeof(bits)); }
- ALWAYS_INLINE void advanceToNextPossibleFreeCell(size_t& startCell)
- {
- if (!~bits[startCell >> 5])
- startCell = (startCell & (~0x1F)) + 32;
- else
- ++startCell;
- }
- size_t count(size_t startCell = 0)
- {
- size_t result = 0;
- for ( ; (startCell & 0x1F) != 0; ++startCell) {
- if (get(startCell))
- ++result;
- }
- for (size_t i = startCell >> 5; i < BITMAP_WORDS; ++i)
- result += WTF::bitCount(bits[i]);
- return result;
- }
- size_t isEmpty() // Much more efficient than testing count() == 0.
- {
- for (size_t i = 0; i < BITMAP_WORDS; ++i)
- if (bits[i] != 0)
- return false;
- return true;
- }
- };
-
- struct CollectorCell {
- FixedArray<double, CELL_ARRAY_LENGTH> memory;
- };
+ void clearMarks(MarkedBlock*);
- class CollectorBlock {
- public:
- FixedArray<CollectorCell, CELLS_PER_BLOCK> cells;
- CollectorBitmap marked;
- Heap* heap;
+ CollectorHeap m_heap;
+ size_t m_waterMark;
+ size_t m_highWaterMark;
+ JSGlobalData* m_globalData;
};
- struct HeapConstants {
- static const size_t cellSize = CELL_SIZE;
- static const size_t cellsPerBlock = CELLS_PER_BLOCK;
- typedef CollectorCell Cell;
- typedef CollectorBlock Block;
- };
+ inline Heap* MarkedSpace::heap(JSCell* cell)
+ {
+ return MarkedBlock::blockFor(cell)->heap();
+ }
- inline CollectorBlock* MarkedSpace::cellBlock(const JSCell* cell)
+ inline bool MarkedSpace::isMarked(const JSCell* cell)
{
- return reinterpret_cast<CollectorBlock*>(reinterpret_cast<uintptr_t>(cell) & BLOCK_MASK);
+ return MarkedBlock::blockFor(cell)->isMarked(cell);
}
- inline size_t MarkedSpace::cellOffset(const JSCell* cell)
+ inline bool MarkedSpace::testAndSetMarked(const JSCell* cell)
{
- return (reinterpret_cast<uintptr_t>(cell) & BLOCK_OFFSET_MASK) / CELL_SIZE;
+ return MarkedBlock::blockFor(cell)->testAndSetMarked(cell);
}
- inline bool MarkedSpace::isCellMarked(const JSCell* cell)
+ inline void MarkedSpace::setMarked(const JSCell* cell)
{
- return cellBlock(cell)->marked.get(cellOffset(cell));
+ MarkedBlock::blockFor(cell)->setMarked(cell);
}
- inline bool MarkedSpace::checkMarkCell(const JSCell* cell)
+ inline bool MarkedSpace::contains(const void* x)
{
- return cellBlock(cell)->marked.getset(cellOffset(cell));
+ if (!MarkedBlock::isCellAligned(x))
+ return false;
+
+ MarkedBlock* block = MarkedBlock::blockFor(x);
+ if (!block)
+ return false;
+
+ size_t size = m_heap.blocks.size();
+ for (size_t i = 0; i < size; i++) {
+ if (block != m_heap.collectorBlock(i))
+ continue;
+
+ // x is a pointer into the heap. Now, verify that the cell it
+ // points to is live. (If the cell is dead, we must not mark it,
+ // since that would revive it in a zombie state.)
+ return block->isMarked(x);
+ }
+
+ return false;
}
- inline void MarkedSpace::markCell(JSCell* cell)
+ template <typename Functor> inline void MarkedSpace::forEach(Functor& functor)
{
- cellBlock(cell)->marked.set(cellOffset(cell));
+ for (size_t i = 0; i < m_heap.blocks.size(); ++i)
+ m_heap.collectorBlock(i)->forEach(functor);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/MathObject.cpp b/Source/JavaScriptCore/runtime/MathObject.cpp
index 080d7d2..c79316b 100644
--- a/Source/JavaScriptCore/runtime/MathObject.cpp
+++ b/Source/JavaScriptCore/runtime/MathObject.cpp
@@ -89,14 +89,14 @@ const ClassInfo MathObject::info = { "Math", 0, 0, ExecState::mathTable };
MathObject::MathObject(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure)
: JSObjectWithGlobalObject(globalObject, structure)
{
- putDirectWithoutTransition(Identifier(exec, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "LOG10E"), jsNumber(1.0 / log(10.0)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly);
- putDirectWithoutTransition(Identifier(exec, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "E"), jsNumber(exp(1.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "LN2"), jsNumber(log(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "LN10"), jsNumber(log(10.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "LOG2E"), jsNumber(1.0 / log(2.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "LOG10E"), jsNumber(1.0 / log(10.0)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "PI"), jsNumber(piDouble), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "SQRT1_2"), jsNumber(sqrt(0.5)), DontDelete | DontEnum | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), Identifier(exec, "SQRT2"), jsNumber(sqrt(2.0)), DontDelete | DontEnum | ReadOnly);
}
// ECMA 15.8
diff --git a/Source/JavaScriptCore/runtime/MemoryStatistics.cpp b/Source/JavaScriptCore/runtime/MemoryStatistics.cpp
index 06a319b..86101f5 100644
--- a/Source/JavaScriptCore/runtime/MemoryStatistics.cpp
+++ b/Source/JavaScriptCore/runtime/MemoryStatistics.cpp
@@ -32,11 +32,6 @@
namespace JSC {
-MarkedSpace::Statistics heapStatistics(JSGlobalData* commonGlobalData)
-{
- return commonGlobalData->heap.statistics();
-}
-
GlobalMemoryStatistics globalMemoryStatistics()
{
GlobalMemoryStatistics stats;
diff --git a/Source/JavaScriptCore/runtime/MemoryStatistics.h b/Source/JavaScriptCore/runtime/MemoryStatistics.h
index 2659702..d4b8b6f 100644
--- a/Source/JavaScriptCore/runtime/MemoryStatistics.h
+++ b/Source/JavaScriptCore/runtime/MemoryStatistics.h
@@ -37,7 +37,6 @@ struct GlobalMemoryStatistics {
size_t JITBytes;
};
-MarkedSpace::Statistics heapStatistics(JSGlobalData* commonGlobalData);
GlobalMemoryStatistics globalMemoryStatistics();
}
diff --git a/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp b/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
index eb508eb..421eecf 100644
--- a/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
@@ -37,8 +37,8 @@ NativeErrorConstructor::NativeErrorConstructor(ExecState* exec, JSGlobalObject*
{
NativeErrorPrototype* prototype = new (exec) NativeErrorPrototype(exec, globalObject, prototypeStructure, nameAndMessage, this);
- putDirect(exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5
- putDirect(exec->propertyNames().prototype, prototype, DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(1), DontDelete | ReadOnly | DontEnum); // ECMA 15.11.7.5
+ putDirect(exec->globalData(), exec->propertyNames().prototype, prototype, DontDelete | ReadOnly | DontEnum);
m_errorStructure = ErrorInstance::createStructure(prototype);
}
diff --git a/Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp b/Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp
index 540220a..4e10268 100644
--- a/Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp
@@ -34,9 +34,9 @@ ASSERT_CLASS_FITS_IN_CELL(NativeErrorPrototype);
NativeErrorPrototype::NativeErrorPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, const UString& nameAndMessage, NativeErrorConstructor* constructor)
: JSObjectWithGlobalObject(globalObject, structure)
{
- putDirect(exec->propertyNames().name, jsString(exec, nameAndMessage), 0);
- putDirect(exec->propertyNames().message, jsString(exec, nameAndMessage), 0);
- putDirect(exec->propertyNames().constructor, constructor, DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().name, jsString(exec, nameAndMessage), 0);
+ putDirect(exec->globalData(), exec->propertyNames().message, jsString(exec, nameAndMessage), 0);
+ putDirect(exec->globalData(), exec->propertyNames().constructor, constructor, DontEnum);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/NumberConstructor.cpp b/Source/JavaScriptCore/runtime/NumberConstructor.cpp
index 5369ca0..7cec875 100644
--- a/Source/JavaScriptCore/runtime/NumberConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/NumberConstructor.cpp
@@ -58,10 +58,10 @@ NumberConstructor::NumberConstructor(ExecState* exec, JSGlobalObject* globalObje
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, numberPrototype->info.className))
{
// Number.Prototype
- putDirectWithoutTransition(exec->propertyNames().prototype, numberPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, numberPrototype, DontEnum | DontDelete | ReadOnly);
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
}
bool NumberConstructor::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
@@ -102,9 +102,9 @@ static JSValue numberConstructorMinValue(ExecState*, JSValue, const Identifier&)
// ECMA 15.7.1
static EncodedJSValue JSC_HOST_CALL constructWithNumberConstructor(ExecState* exec)
{
- NumberObject* object = new (exec) NumberObject(exec->lexicalGlobalObject()->numberObjectStructure());
+ NumberObject* object = new (exec) NumberObject(exec->globalData(), exec->lexicalGlobalObject()->numberObjectStructure());
double n = exec->argumentCount() ? exec->argument(0).toNumber(exec) : 0;
- object->setInternalValue(jsNumber(n));
+ object->setInternalValue(exec->globalData(), jsNumber(n));
return JSValue::encode(object);
}
diff --git a/Source/JavaScriptCore/runtime/NumberObject.cpp b/Source/JavaScriptCore/runtime/NumberObject.cpp
index 1a7e44c..603c2f0 100644
--- a/Source/JavaScriptCore/runtime/NumberObject.cpp
+++ b/Source/JavaScriptCore/runtime/NumberObject.cpp
@@ -31,8 +31,8 @@ ASSERT_CLASS_FITS_IN_CELL(NumberObject);
const ClassInfo NumberObject::info = { "Number", 0, 0, 0 };
-NumberObject::NumberObject(NonNullPassRefPtr<Structure> structure)
- : JSWrapperObject(structure)
+NumberObject::NumberObject(JSGlobalData& globalData, NonNullPassRefPtr<Structure> structure)
+ : JSWrapperObject(globalData, structure)
{
}
@@ -43,8 +43,8 @@ JSValue NumberObject::getJSNumber()
NumberObject* constructNumber(ExecState* exec, JSValue number)
{
- NumberObject* object = new (exec) NumberObject(exec->lexicalGlobalObject()->numberObjectStructure());
- object->setInternalValue(number);
+ NumberObject* object = new (exec) NumberObject(exec->globalData(), exec->lexicalGlobalObject()->numberObjectStructure());
+ object->setInternalValue(exec->globalData(), number);
return object;
}
diff --git a/Source/JavaScriptCore/runtime/NumberObject.h b/Source/JavaScriptCore/runtime/NumberObject.h
index e82b593..044f490 100644
--- a/Source/JavaScriptCore/runtime/NumberObject.h
+++ b/Source/JavaScriptCore/runtime/NumberObject.h
@@ -27,7 +27,7 @@ namespace JSC {
class NumberObject : public JSWrapperObject {
public:
- explicit NumberObject(NonNullPassRefPtr<Structure>);
+ explicit NumberObject(JSGlobalData&, NonNullPassRefPtr<Structure>);
static const ClassInfo info;
diff --git a/Source/JavaScriptCore/runtime/NumberPrototype.cpp b/Source/JavaScriptCore/runtime/NumberPrototype.cpp
index 0b86c00..fbe6992 100644
--- a/Source/JavaScriptCore/runtime/NumberPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/NumberPrototype.cpp
@@ -47,9 +47,9 @@ static EncodedJSValue JSC_HOST_CALL numberProtoFuncToPrecision(ExecState*);
// ECMA 15.7.4
NumberPrototype::NumberPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure)
- : NumberObject(structure)
+ : NumberObject(exec->globalData(), structure)
{
- setInternalValue(jsNumber(0));
+ setInternalValue(exec->globalData(), jsNumber(0));
// The constructor will be added later, after NumberConstructor has been constructed
diff --git a/Source/JavaScriptCore/runtime/ObjectConstructor.cpp b/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
index ca3dcd7..f31da67 100644
--- a/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/ObjectConstructor.cpp
@@ -47,10 +47,10 @@ ObjectConstructor::ObjectConstructor(ExecState* exec, JSGlobalObject* globalObje
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, "Object"))
{
// ECMA 15.2.3.1
- putDirectWithoutTransition(exec->propertyNames().prototype, objectPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, objectPrototype, DontEnum | DontDelete | ReadOnly);
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().getPrototypeOf, objectConstructorGetPrototypeOf), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 2, exec->propertyNames().getOwnPropertyDescriptor, objectConstructorGetOwnPropertyDescriptor), DontEnum);
@@ -117,15 +117,15 @@ EncodedJSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState
JSObject* description = constructEmptyObject(exec);
if (!descriptor.isAccessorDescriptor()) {
- description->putDirect(exec->propertyNames().value, descriptor.value() ? descriptor.value() : jsUndefined(), 0);
- description->putDirect(exec->propertyNames().writable, jsBoolean(descriptor.writable()), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().value, descriptor.value() ? descriptor.value() : jsUndefined(), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().writable, jsBoolean(descriptor.writable()), 0);
} else {
- description->putDirect(exec->propertyNames().get, descriptor.getter() ? descriptor.getter() : jsUndefined(), 0);
- description->putDirect(exec->propertyNames().set, descriptor.setter() ? descriptor.setter() : jsUndefined(), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().get, descriptor.getter() ? descriptor.getter() : jsUndefined(), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().set, descriptor.setter() ? descriptor.setter() : jsUndefined(), 0);
}
- description->putDirect(exec->propertyNames().enumerable, jsBoolean(descriptor.enumerable()), 0);
- description->putDirect(exec->propertyNames().configurable, jsBoolean(descriptor.configurable()), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().enumerable, jsBoolean(descriptor.enumerable()), 0);
+ description->putDirect(exec->globalData(), exec->propertyNames().configurable, jsBoolean(descriptor.configurable()), 0);
return JSValue::encode(description);
}
diff --git a/Source/JavaScriptCore/runtime/Operations.h b/Source/JavaScriptCore/runtime/Operations.h
index 1252345..6e84123 100644
--- a/Source/JavaScriptCore/runtime/Operations.h
+++ b/Source/JavaScriptCore/runtime/Operations.h
@@ -429,7 +429,7 @@ namespace JSC {
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (cell->structure()->isDictionary()) {
- asObject(cell)->flattenDictionaryObject();
+ asObject(cell)->flattenDictionaryObject(callFrame->globalData());
if (slotBase == cell)
slotOffset = cell->structure()->get(propertyName);
}
@@ -454,7 +454,7 @@ namespace JSC {
// Since we're accessing a prototype in a loop, it's a good bet that it
// should not be treated as a dictionary.
if (base->structure()->isDictionary())
- asObject(base)->flattenDictionaryObject();
+ asObject(base)->flattenDictionaryObject(callFrame->globalData());
++count;
}
@@ -471,7 +471,7 @@ namespace JSC {
PropertySlot slot;
JSObject* base;
while (true) {
- base = *iter;
+ base = iter->get();
if (next == end)
return isStrictPut ? JSValue() : base;
if (base->getPropertySlot(callFrame, property, slot))
diff --git a/Source/JavaScriptCore/runtime/PropertySlot.h b/Source/JavaScriptCore/runtime/PropertySlot.h
index de9ddc9..cdda6ff 100644
--- a/Source/JavaScriptCore/runtime/PropertySlot.h
+++ b/Source/JavaScriptCore/runtime/PropertySlot.h
@@ -32,8 +32,7 @@ namespace JSC {
class ExecState;
class JSObject;
-#define JSC_VALUE_SLOT_MARKER 0
-#define JSC_REGISTER_SLOT_MARKER reinterpret_cast<GetValueFunc>(1)
+#define JSC_VALUE_MARKER 0
#define INDEX_GETTER_MARKER reinterpret_cast<GetValueFunc>(2)
#define GETTER_FUNCTION_MARKER reinterpret_cast<GetValueFunc>(3)
@@ -67,10 +66,8 @@ namespace JSC {
JSValue getValue(ExecState* exec, const Identifier& propertyName) const
{
- if (m_getValue == JSC_VALUE_SLOT_MARKER)
- return *m_data.valueSlot;
- if (m_getValue == JSC_REGISTER_SLOT_MARKER)
- return (*m_data.registerSlot).jsValue();
+ if (m_getValue == JSC_VALUE_MARKER)
+ return m_value;
if (m_getValue == INDEX_GETTER_MARKER)
return m_getIndexValue(exec, slotBase(), index());
if (m_getValue == GETTER_FUNCTION_MARKER)
@@ -80,10 +77,8 @@ namespace JSC {
JSValue getValue(ExecState* exec, unsigned propertyName) const
{
- if (m_getValue == JSC_VALUE_SLOT_MARKER)
- return *m_data.valueSlot;
- if (m_getValue == JSC_REGISTER_SLOT_MARKER)
- return (*m_data.registerSlot).jsValue();
+ if (m_getValue == JSC_VALUE_MARKER)
+ return m_value;
if (m_getValue == INDEX_GETTER_MARKER)
return m_getIndexValue(exec, m_slotBase, m_data.index);
if (m_getValue == GETTER_FUNCTION_MARKER)
@@ -100,41 +95,32 @@ namespace JSC {
return m_offset;
}
- void setValueSlot(JSValue* valueSlot)
+ void setValue(JSValue slotBase, JSValue value)
{
- ASSERT(valueSlot);
- clearBase();
+ ASSERT(value);
clearOffset();
- m_getValue = JSC_VALUE_SLOT_MARKER;
- m_data.valueSlot = valueSlot;
- }
-
- void setValueSlot(JSValue slotBase, JSValue* valueSlot)
- {
- ASSERT(valueSlot);
- m_getValue = JSC_VALUE_SLOT_MARKER;
+ m_getValue = JSC_VALUE_MARKER;
m_slotBase = slotBase;
- m_data.valueSlot = valueSlot;
+ m_value = value;
}
- void setValueSlot(JSValue slotBase, JSValue* valueSlot, size_t offset)
+ void setValue(JSValue slotBase, JSValue value, size_t offset)
{
- ASSERT(valueSlot);
- m_getValue = JSC_VALUE_SLOT_MARKER;
+ ASSERT(value);
+ m_getValue = JSC_VALUE_MARKER;
m_slotBase = slotBase;
- m_data.valueSlot = valueSlot;
+ m_value = value;
m_offset = offset;
m_cachedPropertyType = Value;
}
-
+
void setValue(JSValue value)
{
ASSERT(value);
clearBase();
clearOffset();
- m_getValue = JSC_VALUE_SLOT_MARKER;
+ m_getValue = JSC_VALUE_MARKER;
m_value = value;
- m_data.valueSlot = &m_value;
}
void setRegisterSlot(Register* registerSlot)
@@ -142,8 +128,8 @@ namespace JSC {
ASSERT(registerSlot);
clearBase();
clearOffset();
- m_getValue = JSC_REGISTER_SLOT_MARKER;
- m_data.registerSlot = registerSlot;
+ m_getValue = JSC_VALUE_MARKER;
+ m_value = registerSlot->jsValue();
}
void setCustom(JSValue slotBase, GetValueFunc getValue)
@@ -251,8 +237,6 @@ namespace JSC {
JSValue m_slotBase;
union {
JSObject* getterFunc;
- JSValue* valueSlot;
- Register* registerSlot;
unsigned index;
} m_data;
diff --git a/Source/JavaScriptCore/runtime/PrototypeFunction.cpp b/Source/JavaScriptCore/runtime/PrototypeFunction.cpp
index 3529080..95e1033 100644
--- a/Source/JavaScriptCore/runtime/PrototypeFunction.cpp
+++ b/Source/JavaScriptCore/runtime/PrototypeFunction.cpp
@@ -37,7 +37,7 @@ PrototypeFunction::PrototypeFunction(ExecState* exec, JSGlobalObject* globalObje
, m_function(function)
{
ASSERT_ARG(function, function);
- putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
}
PrototypeFunction::PrototypeFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> prototypeFunctionStructure, int length, const Identifier& name, NativeFunction function)
@@ -45,7 +45,7 @@ PrototypeFunction::PrototypeFunction(ExecState* exec, JSGlobalObject* globalObje
, m_function(function)
{
ASSERT_ARG(function, function);
- putDirect(exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
}
CallType PrototypeFunction::getCallData(CallData& callData)
diff --git a/Source/JavaScriptCore/runtime/PutPropertySlot.h b/Source/JavaScriptCore/runtime/PutPropertySlot.h
index 4b0b394..4c9e0e6 100644
--- a/Source/JavaScriptCore/runtime/PutPropertySlot.h
+++ b/Source/JavaScriptCore/runtime/PutPropertySlot.h
@@ -45,14 +45,14 @@ namespace JSC {
{
}
- void setExistingProperty(JSObject* base, size_t offset)
+ void setExistingProperty(DeprecatedPtr<JSObject> base, size_t offset)
{
m_type = ExistingProperty;
m_base = base;
m_offset = offset;
}
- void setNewProperty(JSObject* base, size_t offset)
+ void setNewProperty(DeprecatedPtr<JSObject> base, size_t offset)
{
m_type = NewProperty;
m_base = base;
@@ -60,7 +60,7 @@ namespace JSC {
}
Type type() const { return m_type; }
- JSObject* base() const { return m_base; }
+ JSObject* base() const { return m_base.get(); }
bool isStrictMode() const { return m_isStrictMode; }
bool isCacheable() const { return m_type != Uncachable; }
@@ -70,7 +70,7 @@ namespace JSC {
}
private:
Type m_type;
- JSObject* m_base;
+ DeprecatedPtr<JSObject> m_base;
size_t m_offset;
bool m_isStrictMode;
};
diff --git a/Source/JavaScriptCore/runtime/RegExp.cpp b/Source/JavaScriptCore/runtime/RegExp.cpp
index 31a1abe..95ce5e9 100644
--- a/Source/JavaScriptCore/runtime/RegExp.cpp
+++ b/Source/JavaScriptCore/runtime/RegExp.cpp
@@ -25,6 +25,7 @@
#include "Lexer.h"
#include "yarr/Yarr.h"
+#include "yarr/YarrJIT.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -230,11 +231,12 @@ void RegExp::matchCompareWithInterpreter(const UString& s, int startOffset, int*
#if ENABLE(YARR_JIT)
Yarr::YarrCodeBlock& codeBlock = m_representation->m_regExpJITCode;
- char jitAddr[20];
+ const size_t jitAddrSize = 20;
+ char jitAddr[jitAddrSize];
if (m_state == JITCode)
- sprintf(jitAddr, "fallback");
+ snprintf(jitAddr, jitAddrSize, "fallback");
else
- sprintf(jitAddr, "0x%014lx", reinterpret_cast<unsigned long int>(codeBlock.getAddr()));
+ snprintf(jitAddr, jitAddrSize, "0x%014lx", reinterpret_cast<unsigned long int>(codeBlock.getAddr()));
#else
const char* jitAddr = "JIT Off";
#endif
diff --git a/Source/JavaScriptCore/runtime/RegExpConstructor.cpp b/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
index 30d3eab..1b30514 100644
--- a/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/RegExpConstructor.cpp
@@ -100,10 +100,10 @@ RegExpConstructor::RegExpConstructor(ExecState* exec, JSGlobalObject* globalObje
, d(adoptPtr(new RegExpConstructorPrivate))
{
// ECMA 15.10.5.1 RegExp.prototype
- putDirectWithoutTransition(exec->propertyNames().prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly);
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
}
RegExpMatchesArray::RegExpMatchesArray(ExecState* exec, RegExpConstructorPrivate* data)
diff --git a/Source/JavaScriptCore/runtime/ScopeChain.cpp b/Source/JavaScriptCore/runtime/ScopeChain.cpp
index 54c5082..976cff6 100644
--- a/Source/JavaScriptCore/runtime/ScopeChain.cpp
+++ b/Source/JavaScriptCore/runtime/ScopeChain.cpp
@@ -35,12 +35,12 @@ void ScopeChainNode::print() const
{
ScopeChainIterator scopeEnd = end();
for (ScopeChainIterator scopeIter = begin(); scopeIter != scopeEnd; ++scopeIter) {
- JSObject* o = *scopeIter;
+ DeprecatedPtr<JSObject> o = *scopeIter;
PropertyNameArray propertyNames(globalObject->globalExec());
o->getPropertyNames(globalObject->globalExec(), propertyNames);
PropertyNameArray::const_iterator propEnd = propertyNames.end();
- fprintf(stderr, "----- [scope %p] -----\n", o);
+ fprintf(stderr, "----- [scope %p] -----\n", o.get());
for (PropertyNameArray::const_iterator propIter = propertyNames.begin(); propIter != propEnd; propIter++) {
Identifier name = *propIter;
fprintf(stderr, "%s, ", name.ustring().utf8().data());
diff --git a/Source/JavaScriptCore/runtime/ScopeChain.h b/Source/JavaScriptCore/runtime/ScopeChain.h
index b104e75..11f3692 100644
--- a/Source/JavaScriptCore/runtime/ScopeChain.h
+++ b/Source/JavaScriptCore/runtime/ScopeChain.h
@@ -21,6 +21,7 @@
#ifndef ScopeChain_h
#define ScopeChain_h
+#include "WriteBarrier.h"
#include <wtf/FastAllocBase.h>
namespace JSC {
@@ -52,7 +53,6 @@ namespace JSC {
~ScopeChainNode()
{
next = 0;
- object = 0;
globalData = 0;
globalObject = 0;
globalThis = 0;
@@ -60,7 +60,7 @@ namespace JSC {
#endif
ScopeChainNode* next;
- JSObject* object;
+ DeprecatedPtr<JSObject> object;
JSGlobalData* globalData;
JSGlobalObject* globalObject;
JSObject* globalThis;
@@ -131,8 +131,8 @@ namespace JSC {
{
}
- JSObject* const & operator*() const { return m_node->object; }
- JSObject* const * operator->() const { return &(operator*()); }
+ DeprecatedPtr<JSObject> const & operator*() const { return m_node->object; }
+ DeprecatedPtr<JSObject> const * operator->() const { return &(operator*()); }
ScopeChainIterator& operator++() { m_node = m_node->next; return *this; }
@@ -195,7 +195,7 @@ namespace JSC {
ScopeChainNode* node() const { return m_node; }
- JSObject* top() const { return m_node->object; }
+ JSObject* top() const { return m_node->object.get(); }
ScopeChainIterator begin() const { return m_node->begin(); }
ScopeChainIterator end() const { return m_node->end(); }
diff --git a/Source/JavaScriptCore/runtime/ScopeChainMark.h b/Source/JavaScriptCore/runtime/ScopeChainMark.h
index 984d101..faa4824 100644
--- a/Source/JavaScriptCore/runtime/ScopeChainMark.h
+++ b/Source/JavaScriptCore/runtime/ScopeChainMark.h
@@ -28,7 +28,7 @@ namespace JSC {
inline void ScopeChain::markAggregate(MarkStack& markStack) const
{
for (ScopeChainNode* n = m_node; n; n = n->next)
- markStack.append(n->object);
+ markStack.append(&n->object);
}
} // namespace JSC
diff --git a/Source/JavaScriptCore/runtime/SmallStrings.cpp b/Source/JavaScriptCore/runtime/SmallStrings.cpp
index 5614932..9b193f5 100644
--- a/Source/JavaScriptCore/runtime/SmallStrings.cpp
+++ b/Source/JavaScriptCore/runtime/SmallStrings.cpp
@@ -35,9 +35,9 @@ namespace JSC {
static const unsigned numCharactersToStore = 0x100;
-static inline bool isMarked(JSString* string)
+static inline bool isMarked(JSCell* string)
{
- return string && Heap::isCellMarked(string);
+ return string && Heap::isMarked(string);
}
class SmallStringsStorage {
@@ -83,9 +83,9 @@ void SmallStrings::markChildren(MarkStack& markStack)
so, it's probably reasonable to mark the rest. If not, we clear the cache.
*/
- bool isAnyStringMarked = isMarked(m_emptyString);
+ bool isAnyStringMarked = isMarked(m_emptyString.get());
for (unsigned i = 0; i < numCharactersToStore && !isAnyStringMarked; ++i)
- isAnyStringMarked = isMarked(m_singleCharacterStrings[i]);
+ isAnyStringMarked = isMarked(m_singleCharacterStrings[i].get());
if (!isAnyStringMarked) {
clear();
@@ -93,10 +93,10 @@ void SmallStrings::markChildren(MarkStack& markStack)
}
if (m_emptyString)
- markStack.append(m_emptyString);
+ markStack.append(&m_emptyString);
for (unsigned i = 0; i < numCharactersToStore; ++i) {
if (m_singleCharacterStrings[i])
- markStack.append(m_singleCharacterStrings[i]);
+ markStack.append(&m_singleCharacterStrings[i]);
}
}
diff --git a/Source/JavaScriptCore/runtime/SmallStrings.h b/Source/JavaScriptCore/runtime/SmallStrings.h
index ac84fe8..ee795b6 100644
--- a/Source/JavaScriptCore/runtime/SmallStrings.h
+++ b/Source/JavaScriptCore/runtime/SmallStrings.h
@@ -27,6 +27,7 @@
#define SmallStrings_h
#include "UString.h"
+#include "WriteBarrier.h"
#include <wtf/FixedArray.h>
#include <wtf/OwnPtr.h>
@@ -47,13 +48,13 @@ namespace JSC {
{
if (!m_emptyString)
createEmptyString(globalData);
- return m_emptyString;
+ return m_emptyString.get();
}
JSString* singleCharacterString(JSGlobalData* globalData, unsigned char character)
{
if (!m_singleCharacterStrings[character])
createSingleCharacterString(globalData, character);
- return m_singleCharacterStrings[character];
+ return m_singleCharacterStrings[character].get();
}
StringImpl* singleCharacterStringRep(unsigned char character);
@@ -63,14 +64,14 @@ namespace JSC {
unsigned count() const;
#if ENABLE(JIT)
- JSString** singleCharacterStrings() { return m_singleCharacterStrings.data(); }
+ JSCell** singleCharacterStrings() { return m_singleCharacterStrings[0].slot(); }
#endif
private:
void createEmptyString(JSGlobalData*);
void createSingleCharacterString(JSGlobalData*, unsigned char);
- JSString* m_emptyString;
- FixedArray<JSString*, 0x100> m_singleCharacterStrings;
+ DeprecatedPtr<JSString> m_emptyString;
+ FixedArray<DeprecatedPtr<JSString>, 0x100> m_singleCharacterStrings;
OwnPtr<SmallStringsStorage> m_storage;
};
diff --git a/Source/JavaScriptCore/runtime/StringConstructor.cpp b/Source/JavaScriptCore/runtime/StringConstructor.cpp
index 101650c..604473b 100644
--- a/Source/JavaScriptCore/runtime/StringConstructor.cpp
+++ b/Source/JavaScriptCore/runtime/StringConstructor.cpp
@@ -53,7 +53,7 @@ StringConstructor::StringConstructor(ExecState* exec, JSGlobalObject* globalObje
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, stringPrototype->classInfo()->className))
{
// ECMA 15.5.3.1 String.prototype
- putDirectWithoutTransition(exec->propertyNames().prototype, stringPrototype, ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, stringPrototype, ReadOnly | DontEnum | DontDelete);
// ECMA 15.5.3.2 fromCharCode()
#if ENABLE(JIT) && ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
@@ -62,7 +62,7 @@ StringConstructor::StringConstructor(ExecState* exec, JSGlobalObject* globalObje
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().fromCharCode, stringFromCharCode), DontEnum);
#endif
// no. of arguments for constructor
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
}
// ECMA 15.5.2
diff --git a/Source/JavaScriptCore/runtime/StringObject.cpp b/Source/JavaScriptCore/runtime/StringObject.cpp
index dc27618..eb9cfa3 100644
--- a/Source/JavaScriptCore/runtime/StringObject.cpp
+++ b/Source/JavaScriptCore/runtime/StringObject.cpp
@@ -30,21 +30,21 @@ ASSERT_CLASS_FITS_IN_CELL(StringObject);
const ClassInfo StringObject::info = { "String", 0, 0, 0 };
StringObject::StringObject(ExecState* exec, NonNullPassRefPtr<Structure> structure)
- : JSWrapperObject(structure)
+ : JSWrapperObject(exec->globalData(), structure)
{
- setInternalValue(jsEmptyString(exec));
+ setInternalValue(exec->globalData(), jsEmptyString(exec));
}
-StringObject::StringObject(NonNullPassRefPtr<Structure> structure, JSString* string)
- : JSWrapperObject(structure)
+StringObject::StringObject(JSGlobalData& globalData, NonNullPassRefPtr<Structure> structure, JSString* string)
+ : JSWrapperObject(globalData, structure)
{
- setInternalValue(string);
+ setInternalValue(globalData, string);
}
StringObject::StringObject(ExecState* exec, NonNullPassRefPtr<Structure> structure, const UString& string)
- : JSWrapperObject(structure)
+ : JSWrapperObject(exec->globalData(), structure)
{
- setInternalValue(jsString(exec, string));
+ setInternalValue(exec->globalData(), jsString(exec, string));
}
bool StringObject::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
diff --git a/Source/JavaScriptCore/runtime/StringObject.h b/Source/JavaScriptCore/runtime/StringObject.h
index e3add77..03488f5 100644
--- a/Source/JavaScriptCore/runtime/StringObject.h
+++ b/Source/JavaScriptCore/runtime/StringObject.h
@@ -53,7 +53,7 @@ namespace JSC {
protected:
static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesMarkChildren | OverridesGetPropertyNames | JSWrapperObject::StructureFlags;
- StringObject(NonNullPassRefPtr<Structure>, JSString*);
+ StringObject(JSGlobalData&, NonNullPassRefPtr<Structure>, JSString*);
};
StringObject* asStringObject(JSValue);
diff --git a/Source/JavaScriptCore/runtime/StringPrototype.cpp b/Source/JavaScriptCore/runtime/StringPrototype.cpp
index 8b3d056..545c93e 100644
--- a/Source/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/Source/JavaScriptCore/runtime/StringPrototype.cpp
@@ -134,9 +134,9 @@ const ClassInfo StringPrototype::info = { "String", &StringObject::info, 0, Exec
StringPrototype::StringPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure)
: StringObject(exec, structure)
{
- putAnonymousValue(0, globalObject);
+ putAnonymousValue(exec->globalData(), 0, globalObject);
// The constructor will be added later, after StringConstructor has been built
- putDirectWithoutTransition(exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);
+ putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(0), DontDelete | ReadOnly | DontEnum);
}
bool StringPrototype::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot &slot)
diff --git a/Source/JavaScriptCore/runtime/Structure.cpp b/Source/JavaScriptCore/runtime/Structure.cpp
index 0179eed..e8f5d7a 100644
--- a/Source/JavaScriptCore/runtime/Structure.cpp
+++ b/Source/JavaScriptCore/runtime/Structure.cpp
@@ -242,7 +242,7 @@ Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anony
m_transitions.m_singleTransition = 0;
ASSERT(m_prototype);
- ASSERT(m_prototype.isObject() || m_prototype.isNull());
+ ASSERT(m_prototype->isObject() || m_prototype->isNull());
#ifndef NDEBUG
#if ENABLE(JSC_MULTIPLE_THREADS)
@@ -476,7 +476,7 @@ PassRefPtr<Structure> Structure::addPropertyTransition(Structure* structure, con
return transition.release();
}
- RefPtr<Structure> transition = create(structure->m_prototype, structure->typeInfo(), structure->anonymousSlotCount());
+ RefPtr<Structure> transition = create(structure->m_prototype.get(), structure->typeInfo(), structure->anonymousSlotCount());
transition->m_cachedPrototypeChain = structure->m_cachedPrototypeChain;
transition->m_previous = structure;
@@ -595,7 +595,7 @@ PassRefPtr<Structure> Structure::toDictionaryTransition(Structure* structure, Di
{
ASSERT(!structure->isUncacheableDictionary());
- RefPtr<Structure> transition = create(structure->m_prototype, structure->typeInfo(), structure->anonymousSlotCount());
+ RefPtr<Structure> transition = create(structure->m_prototype.get(), structure->typeInfo(), structure->anonymousSlotCount());
transition->m_dictionaryKind = kind;
transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity;
transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties;
@@ -620,7 +620,7 @@ PassRefPtr<Structure> Structure::toUncacheableDictionaryTransition(Structure* st
return toDictionaryTransition(structure, UncachedDictionaryKind);
}
-PassRefPtr<Structure> Structure::flattenDictionaryStructure(JSObject* object)
+PassRefPtr<Structure> Structure::flattenDictionaryStructure(JSGlobalData& globalData, JSObject* object)
{
ASSERT(isDictionary());
if (isUncacheableDictionary()) {
@@ -651,7 +651,7 @@ PassRefPtr<Structure> Structure::flattenDictionaryStructure(JSObject* object)
// Copy the original property values into their final locations
for (unsigned i = 0; i < propertyCount; i++)
- object->putDirectOffset(anonymousSlotCount + i, values[i]);
+ object->putDirectOffset(globalData, anonymousSlotCount + i, values[i]);
if (m_propertyTable->deletedOffsets) {
delete m_propertyTable->deletedOffsets;
diff --git a/Source/JavaScriptCore/runtime/Structure.h b/Source/JavaScriptCore/runtime/Structure.h
index f480051..77724ac 100644
--- a/Source/JavaScriptCore/runtime/Structure.h
+++ b/Source/JavaScriptCore/runtime/Structure.h
@@ -80,7 +80,7 @@ namespace JSC {
static PassRefPtr<Structure> toCacheableDictionaryTransition(Structure*);
static PassRefPtr<Structure> toUncacheableDictionaryTransition(Structure*);
- PassRefPtr<Structure> flattenDictionaryStructure(JSObject*);
+ PassRefPtr<Structure> flattenDictionaryStructure(JSGlobalData&, JSObject*);
~Structure();
@@ -94,7 +94,8 @@ namespace JSC {
const TypeInfo& typeInfo() const { return m_typeInfo; }
- JSValue storedPrototype() const { return m_prototype; }
+ JSValue storedPrototype() const { return m_prototype.get(); }
+ DeprecatedPtr<Unknown>* storedPrototypeSlot() { return &m_prototype; }
JSValue prototypeForLookup(ExecState*) const;
StructureChain* prototypeChain(ExecState*) const;
@@ -206,7 +207,7 @@ namespace JSC {
TypeInfo m_typeInfo;
- JSValue m_prototype;
+ DeprecatedPtr<Unknown> m_prototype;
mutable RefPtr<StructureChain> m_cachedPrototypeChain;
RefPtr<Structure> m_previous;
diff --git a/Source/JavaScriptCore/runtime/StructureChain.cpp b/Source/JavaScriptCore/runtime/StructureChain.cpp
index 085876c..e4523c3 100644
--- a/Source/JavaScriptCore/runtime/StructureChain.cpp
+++ b/Source/JavaScriptCore/runtime/StructureChain.cpp
@@ -38,7 +38,7 @@ StructureChain::StructureChain(Structure* head)
for (Structure* current = head; current; current = current->storedPrototype().isNull() ? 0 : asObject(current->storedPrototype())->structure())
++size;
- m_vector.set(new RefPtr<Structure>[size + 1]);
+ m_vector = adoptArrayPtr(new RefPtr<Structure>[size + 1]);
size_t i = 0;
for (Structure* current = head; current; current = current->storedPrototype().isNull() ? 0 : asObject(current->storedPrototype())->structure())
diff --git a/Source/JavaScriptCore/runtime/WeakGCMap.h b/Source/JavaScriptCore/runtime/WeakGCMap.h
index 316794f..7bf4503 100644
--- a/Source/JavaScriptCore/runtime/WeakGCMap.h
+++ b/Source/JavaScriptCore/runtime/WeakGCMap.h
@@ -46,22 +46,31 @@ class WeakGCMap {
*/
public:
- typedef typename HashMap<KeyType, MappedType>::iterator iterator;
- typedef typename HashMap<KeyType, MappedType>::const_iterator const_iterator;
+ typedef typename HashMap<KeyType, DeprecatedPtr<MappedType> >::iterator iterator;
+ typedef typename HashMap<KeyType, DeprecatedPtr<MappedType> >::const_iterator const_iterator;
bool isEmpty() { return m_map.isEmpty(); }
void clear() { m_map.clear(); }
- MappedType get(const KeyType& key) const;
- pair<iterator, bool> set(const KeyType&, const MappedType&);
- MappedType take(const KeyType& key);
+ MappedType* get(const KeyType&) const;
+ pair<iterator, bool> set(const KeyType&, MappedType*);
+ MappedType* take(const KeyType&);
// These unchecked functions provide access to a value even if the value's
// mark bit is not set. This is used, among other things, to retrieve values
// during the GC mark phase, which begins by clearing all mark bits.
-
- MappedType uncheckedGet(const KeyType& key) const { return m_map.get(key); }
- bool uncheckedRemove(const KeyType&, const MappedType&);
+
+ size_t uncheckedSize() { return m_map.size(); }
+
+ MappedType* uncheckedGet(const KeyType& key) const { return m_map.get(key).get(); }
+ DeprecatedPtr<MappedType>* uncheckedGetSlot(const KeyType& key)
+ {
+ iterator iter = m_map.find(key);
+ if (iter == m_map.end())
+ return 0;
+ return &iter->second;
+ }
+ bool uncheckedRemove(const KeyType&, MappedType*);
iterator uncheckedBegin() { return m_map.begin(); }
iterator uncheckedEnd() { return m_map.end(); }
@@ -69,51 +78,54 @@ public:
const_iterator uncheckedBegin() const { return m_map.begin(); }
const_iterator uncheckedEnd() const { return m_map.end(); }
+ bool isValid(iterator it) const { return Heap::isMarked(it->second.get()); }
+ bool isValid(const_iterator it) const { return Heap::isMarked(it->second.get()); }
+
private:
- HashMap<KeyType, MappedType> m_map;
+ HashMap<KeyType, DeprecatedPtr<MappedType> > m_map;
};
template<typename KeyType, typename MappedType>
-inline MappedType WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const
+inline MappedType* WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const
{
- MappedType result = m_map.get(key);
- if (result == HashTraits<MappedType>::emptyValue())
+ MappedType* result = m_map.get(key).get();
+ if (result == HashTraits<MappedType*>::emptyValue())
return result;
- if (!Heap::isCellMarked(result))
- return HashTraits<MappedType>::emptyValue();
+ if (!Heap::isMarked(result))
+ return HashTraits<MappedType*>::emptyValue();
return result;
}
template<typename KeyType, typename MappedType>
-MappedType WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
+MappedType* WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
{
- MappedType result = m_map.take(key);
- if (result == HashTraits<MappedType>::emptyValue())
+ MappedType* result = m_map.take(key).get();
+ if (result == HashTraits<MappedType*>::emptyValue())
return result;
- if (!Heap::isCellMarked(result))
- return HashTraits<MappedType>::emptyValue();
+ if (!Heap::isMarked(result))
+ return HashTraits<MappedType*>::emptyValue();
return result;
}
template<typename KeyType, typename MappedType>
-pair<typename HashMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, const MappedType& value)
+pair<typename WeakGCMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, MappedType* value)
{
- Heap::markCell(value); // If value is newly allocated, it's not marked, so mark it now.
+ Heap::setMarked(value); // If value is newly allocated, it's not marked, so mark it now.
pair<iterator, bool> result = m_map.add(key, value);
if (!result.second) { // pre-existing entry
- result.second = !Heap::isCellMarked(result.first->second);
+ result.second = !Heap::isMarked(result.first->second.get());
result.first->second = value;
}
return result;
}
template<typename KeyType, typename MappedType>
-bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, const MappedType& value)
+bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, MappedType* value)
{
iterator it = m_map.find(key);
if (it == m_map.end())
return false;
- if (it->second != value)
+ if (it->second.get() != value)
return false;
m_map.remove(it);
return true;
diff --git a/Source/JavaScriptCore/runtime/WriteBarrier.h b/Source/JavaScriptCore/runtime/WriteBarrier.h
new file mode 100644
index 0000000..64150ed
--- /dev/null
+++ b/Source/JavaScriptCore/runtime/WriteBarrier.h
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WriteBarrier_h
+#define WriteBarrier_h
+
+#include "JSValue.h"
+
+namespace JSC {
+class JSCell;
+class JSGlobalData;
+
+typedef enum { } Unknown;
+
+template <class T> class DeprecatedPtr {
+public:
+ DeprecatedPtr() : m_cell(0) { }
+ DeprecatedPtr(T* cell) : m_cell(reinterpret_cast<JSCell*>(cell)) { }
+ T* get() const { return reinterpret_cast<T*>(m_cell); }
+ T* operator*() const { return static_cast<T*>(m_cell); }
+ T* operator->() const { return static_cast<T*>(m_cell); }
+
+ JSCell** slot() { return &m_cell; }
+
+ typedef T* (DeprecatedPtr::*UnspecifiedBoolType);
+ operator UnspecifiedBoolType*() const { return m_cell ? reinterpret_cast<UnspecifiedBoolType*>(1) : 0; }
+
+ bool operator!() const { return !m_cell; }
+
+protected:
+ JSCell* m_cell;
+};
+
+template <> class DeprecatedPtr<Unknown> {
+public:
+ DeprecatedPtr() { }
+ DeprecatedPtr(JSValue value) : m_value(value) { }
+ DeprecatedPtr(JSCell* value) : m_value(value) { }
+ const JSValue& get() const { return m_value; }
+ const JSValue* operator*() const { return &m_value; }
+ const JSValue* operator->() const { return &m_value; }
+
+ JSValue* slot() { return &m_value; }
+
+ typedef JSValue (DeprecatedPtr::*UnspecifiedBoolType);
+ operator UnspecifiedBoolType*() const { return m_value ? reinterpret_cast<UnspecifiedBoolType*>(1) : 0; }
+ bool operator!() const { return !m_value; }
+
+private:
+ JSValue m_value;
+};
+
+template <typename T> struct WriteBarrierCheck {
+ static const bool IsJSValue = false;
+};
+
+template <> struct WriteBarrierCheck<JSValue> {
+ static const bool IsJSValue = true;
+};
+
+template <typename T> class WriteBarrierBase {
+public:
+ COMPILE_ASSERT(!WriteBarrierCheck<T>::IsJSValue, WriteBarrier_JSValue_is_invalid__use_unknown);
+ void set(JSGlobalData&, const JSCell*, T* value) { this->m_cell = reinterpret_cast<JSCell*>(value); }
+
+ T* get() const { return reinterpret_cast<T*>(m_cell); }
+ T* operator*() const { return static_cast<T*>(m_cell); }
+ T* operator->() const { return static_cast<T*>(m_cell); }
+ void clear() { m_cell = 0; }
+
+ JSCell** slot() { return &m_cell; }
+
+ typedef T* (WriteBarrierBase::*UnspecifiedBoolType);
+ operator UnspecifiedBoolType*() const { return m_cell ? reinterpret_cast<UnspecifiedBoolType*>(1) : 0; }
+
+ bool operator!() const { return !m_cell; }
+
+ void setWithoutWriteBarrier(T* value) { this->m_cell = reinterpret_cast<JSCell*>(value); }
+
+protected:
+ JSCell* m_cell;
+};
+
+template <typename T> class WriteBarrier : public WriteBarrierBase<T> {
+public:
+ WriteBarrier() { this->m_cell = 0; }
+ WriteBarrier(JSGlobalData& globalData, const JSCell* owner, T* value)
+ {
+ this->set(globalData, owner, value);
+ }
+
+};
+
+template <> class WriteBarrierBase<Unknown> {
+public:
+ void set(JSGlobalData&, const JSCell*, JSValue value) { m_value = JSValue::encode(value); }
+ void setWithoutWriteBarrier(JSValue value) { m_value = JSValue::encode(value); }
+ JSValue get() const { return JSValue::decode(m_value); }
+ void clear() { m_value = JSValue::encode(JSValue()); }
+ void setUndefined() { m_value = JSValue::encode(jsUndefined()); }
+ bool isNumber() const { return get().isNumber(); }
+ bool isGetterSetter() const { return get().isGetterSetter(); }
+
+ JSValue* slot()
+ {
+ union {
+ EncodedJSValue* v;
+ JSValue* slot;
+ } u;
+ u.v = &m_value;
+ return u.slot;
+ }
+
+ typedef JSValue (WriteBarrierBase::*UnspecifiedBoolType);
+ operator UnspecifiedBoolType*() const { return get() ? reinterpret_cast<UnspecifiedBoolType*>(1) : 0; }
+ bool operator!() const { return !get(); }
+
+protected:
+ EncodedJSValue m_value;
+};
+
+template <> class WriteBarrier<Unknown> : public WriteBarrierBase<Unknown> {
+public:
+ WriteBarrier() { m_value = JSValue::encode(JSValue()); }
+ WriteBarrier(JSGlobalData& globalData, const JSCell* owner, JSValue value)
+ {
+ this->set(globalData, owner, value);
+ }
+};
+
+template <typename U, typename V> inline bool operator==(const DeprecatedPtr<U>& lhs, const DeprecatedPtr<V>& rhs)
+{
+ return lhs.get() == rhs.get();
+}
+
+template <typename U, typename V> inline bool operator==(const WriteBarrierBase<U>& lhs, const WriteBarrierBase<V>& rhs)
+{
+ return lhs.get() == rhs.get();
+}
+
+}
+
+#endif // WriteBarrier_h
diff --git a/Source/JavaScriptCore/wscript b/Source/JavaScriptCore/wscript
index 8d7f69c..8e27304 100644
--- a/Source/JavaScriptCore/wscript
+++ b/Source/JavaScriptCore/wscript
@@ -29,7 +29,7 @@ import commands
from settings import *
-jscore_excludes = ['chartables.c', 'jsc.cpp', 'ucptable.cpp','ProfilerServer.mm', 'ExecutableAllocatorPosix.cpp']
+jscore_excludes = ['jsc.cpp', 'ProfilerServer.mm', 'ExecutableAllocatorPosix.cpp']
jscore_excludes.extend(get_excludes(jscore_dir, ['*Brew.cpp', '*CF.cpp', '*Symbian.cpp']))
sources = []
diff --git a/Source/JavaScriptCore/wtf/Assertions.cpp b/Source/JavaScriptCore/wtf/Assertions.cpp
index 1841150..cdde180 100644
--- a/Source/JavaScriptCore/wtf/Assertions.cpp
+++ b/Source/JavaScriptCore/wtf/Assertions.cpp
@@ -54,6 +54,12 @@
#include <wtf/Vector.h>
#endif
+#if PLATFORM(MAC)
+#include <cxxabi.h>
+#include <dlfcn.h>
+#include <execinfo.h>
+#endif
+
extern "C" {
#if PLATFORM(BREWMP)
@@ -101,7 +107,8 @@ static void vprintf_stderr_common(const char* format, va_list args)
free(buffer);
CFRelease(str);
CFRelease(cfFormat);
- } else
+ return;
+ }
#elif PLATFORM(BREWMP)
// When str is 0, the return value is the number of bytes needed
// to accept the result including null termination.
@@ -164,10 +171,13 @@ static void printf_stderr_common(const char* format, ...)
static void printCallSite(const char* file, int line, const char* function)
{
-#if OS(WIN) && !OS(WINCE) && defined _DEBUG
+#if OS(WINDOWS) && !OS(WINCE) && defined(_DEBUG)
_CrtDbgReport(_CRT_WARN, file, line, NULL, "%s\n", function);
#else
- printf_stderr_common("(%s:%d %s)\n", file, line, function);
+ // By using this format, which matches the format used by MSVC for compiler errors, developers
+ // using Visual Studio can double-click the file/line number in the Output Window to have the
+ // editor navigate to that line of code. It seems fine for other developers, too.
+ printf_stderr_common("%s(%d) : %s\n", file, line, function);
#endif
}
@@ -197,6 +207,34 @@ void WTFReportArgumentAssertionFailure(const char* file, int line, const char* f
printCallSite(file, line, function);
}
+void WTFReportBacktrace()
+{
+#if PLATFORM(MAC) && !defined(NDEBUG)
+ static const int maxFrames = 32;
+ void* samples[maxFrames];
+ int frames = backtrace(samples, maxFrames);
+
+ for (int i = 1; i < frames; ++i) {
+ void* pointer = samples[i];
+
+ // Try to get a symbol name from the dynamic linker.
+ Dl_info info;
+ if (dladdr(pointer, &info) && info.dli_sname) {
+ const char* mangledName = info.dli_sname;
+
+ // Assume c++ & try to demangle the name.
+ char* demangledName = abi::__cxa_demangle(mangledName, 0, 0, 0);
+ if (demangledName) {
+ fprintf(stderr, " -> %s\n", demangledName);
+ free(demangledName);
+ } else
+ fprintf(stderr, " -> %s\n", mangledName);
+ } else
+ fprintf(stderr, " -> %p\n", pointer);
+ }
+#endif
+}
+
void WTFReportFatalError(const char* file, int line, const char* function, const char* format, ...)
{
printf_stderr_common("FATAL ERROR: ");
diff --git a/Source/JavaScriptCore/wtf/Assertions.h b/Source/JavaScriptCore/wtf/Assertions.h
index 3f3af72..13ece31 100644
--- a/Source/JavaScriptCore/wtf/Assertions.h
+++ b/Source/JavaScriptCore/wtf/Assertions.h
@@ -145,6 +145,7 @@ typedef struct {
void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion);
void WTFReportAssertionFailureWithMessage(const char* file, int line, const char* function, const char* assertion, const char* format, ...) WTF_ATTRIBUTE_PRINTF(5, 6);
void WTFReportArgumentAssertionFailure(const char* file, int line, const char* function, const char* argName, const char* assertion);
+void WTFReportBacktrace();
void WTFReportFatalError(const char* file, int line, const char* function, const char* format, ...) WTF_ATTRIBUTE_PRINTF(4, 5);
void WTFReportError(const char* file, int line, const char* function, const char* format, ...) WTF_ATTRIBUTE_PRINTF(4, 5);
void WTFLog(WTFLogChannel* channel, const char* format, ...) WTF_ATTRIBUTE_PRINTF(2, 3);
@@ -176,12 +177,23 @@ void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChann
} while(false)
#else
#define CRASH() do { \
+ WTFReportBacktrace(); \
*(int *)(uintptr_t)0xbbadbeef = 0; \
((void(*)())0)(); /* More reliable, but doesn't say BBADBEEF */ \
} while(false)
#endif
#endif
+/* BACKTRACE
+
+ Print a backtrace to the same location as ASSERT messages.
+*/
+#ifndef BACKTRACE
+#define BACKTRACE() do { \
+ WTFReportBacktrace(); \
+} while(false)
+#endif
+
/* ASSERT, ASSERT_NOT_REACHED, ASSERT_UNUSED
These macros are compiled out of release builds.
diff --git a/Source/JavaScriptCore/wtf/Bitmap.h b/Source/JavaScriptCore/wtf/Bitmap.h
index 4dd88f6..b046b61 100644
--- a/Source/JavaScriptCore/wtf/Bitmap.h
+++ b/Source/JavaScriptCore/wtf/Bitmap.h
@@ -21,8 +21,8 @@
#include "FixedArray.h"
#include "StdLibExtras.h"
-
#include <stdint.h>
+#include <string.h>
namespace WTF {
@@ -36,9 +36,10 @@ public:
bool get(size_t) const;
void set(size_t);
+ bool testAndSet(size_t);
+ size_t nextPossiblyUnset(size_t) const;
void clear(size_t);
void clearAll();
- void advanceToNextFreeBit(size_t&) const;
size_t count(size_t = 0) const;
size_t isEmpty() const;
size_t isFull() const;
@@ -76,6 +77,16 @@ inline void Bitmap<size>::set(size_t n)
}
template<size_t size>
+inline bool Bitmap<size>::testAndSet(size_t n)
+{
+ WordType mask = one << (n % wordSize);
+ size_t index = n / wordSize;
+ bool result = bits[index] & mask;
+ bits[index] |= mask;
+ return result;
+}
+
+template<size_t size>
inline void Bitmap<size>::clear(size_t n)
{
bits[n / wordSize] &= ~(one << (n % wordSize));
@@ -88,12 +99,11 @@ inline void Bitmap<size>::clearAll()
}
template<size_t size>
-inline void Bitmap<size>::advanceToNextFreeBit(size_t& start) const
+inline size_t Bitmap<size>::nextPossiblyUnset(size_t start) const
{
if (!~bits[start / wordSize])
- start = ((start / wordSize) + 1) * wordSize;
- else
- ++start;
+ return ((start / wordSize) + 1) * wordSize;
+ return start + 1;
}
template<size_t size>
diff --git a/Source/JavaScriptCore/wtf/BloomFilter.h b/Source/JavaScriptCore/wtf/BloomFilter.h
new file mode 100644
index 0000000..f81d83e
--- /dev/null
+++ b/Source/JavaScriptCore/wtf/BloomFilter.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BloomFilter_h
+#define BloomFilter_h
+
+#include <wtf/AlwaysInline.h>
+#include <wtf/text/AtomicString.h>
+
+namespace WTF {
+
+// Counting bloom filter with k=2 and 8 bit counters. Uses 2^keyBits bytes of memory.
+// False positive rate is approximately (1-e^(-2n/m))^2, where n is the number of unique
+// keys and m is the table size (==2^keyBits).
+template <unsigned keyBits>
+class BloomFilter {
+public:
+ COMPILE_ASSERT(keyBits <= 16, bloom_filter_key_size);
+
+ static const size_t tableSize = 1 << keyBits;
+ static const unsigned keyMask = (1 << keyBits) - 1;
+ static uint8_t maximumCount() { return std::numeric_limits<uint8_t>::max(); }
+
+ BloomFilter() { clear(); }
+
+ void add(unsigned hash);
+ void remove(unsigned hash);
+
+ // The filter may give false positives (claim it may contain a key it doesn't)
+ // but never false negatives (claim it doesn't contain a key it does).
+ bool mayContain(unsigned hash) const { return firstSlot(hash) && secondSlot(hash); }
+
+ // The filter must be cleared before reuse even if all keys are removed.
+ // Otherwise overflowed keys will stick around.
+ void clear();
+
+ void add(const AtomicString& string) { add(string.impl()->existingHash()); }
+ void add(const String& string) { add(string.impl()->hash()); }
+ void remove(const AtomicString& string) { remove(string.impl()->existingHash()); }
+ void remove(const String& string) { remove(string.impl()->hash()); }
+
+ bool mayContain(const AtomicString& string) const { return mayContain(string.impl()->existingHash()); }
+ bool mayContain(const String& string) const { return mayContain(string.impl()->hash()); }
+
+#if !ASSERT_DISABLED
+ // Slow.
+ bool likelyEmpty() const;
+ bool isClear() const;
+#endif
+
+private:
+ uint8_t& firstSlot(unsigned hash) { return m_table[hash & keyMask]; }
+ uint8_t& secondSlot(unsigned hash) { return m_table[(hash >> 16) & keyMask]; }
+ const uint8_t& firstSlot(unsigned hash) const { return m_table[hash & keyMask]; }
+ const uint8_t& secondSlot(unsigned hash) const { return m_table[(hash >> 16) & keyMask]; }
+
+ uint8_t m_table[tableSize];
+};
+
+template <unsigned keyBits>
+inline void BloomFilter<keyBits>::add(unsigned hash)
+{
+ uint8_t& first = firstSlot(hash);
+ uint8_t& second = secondSlot(hash);
+ if (LIKELY(first < maximumCount()))
+ ++first;
+ if (LIKELY(second < maximumCount()))
+ ++second;
+}
+
+template <unsigned keyBits>
+inline void BloomFilter<keyBits>::remove(unsigned hash)
+{
+ uint8_t& first = firstSlot(hash);
+ uint8_t& second = secondSlot(hash);
+ ASSERT(first);
+ ASSERT(second);
+ // In case of an overflow, the slot sticks in the table until clear().
+ if (LIKELY(first < maximumCount()))
+ --first;
+ if (LIKELY(second < maximumCount()))
+ --second;
+}
+
+template <unsigned keyBits>
+inline void BloomFilter<keyBits>::clear()
+{
+ memset(m_table, 0, tableSize);
+}
+
+#if !ASSERT_DISABLED
+template <unsigned keyBits>
+bool BloomFilter<keyBits>::likelyEmpty() const
+{
+ for (size_t n = 0; n < tableSize; ++n) {
+ if (m_table[n] && m_table[n] != maximumCount())
+ return false;
+ }
+ return true;
+}
+
+template <unsigned keyBits>
+bool BloomFilter<keyBits>::isClear() const
+{
+ for (size_t n = 0; n < tableSize; ++n) {
+ if (m_table[n])
+ return false;
+ }
+ return true;
+}
+#endif
+
+}
+
+using WTF::BloomFilter;
+
+#endif
diff --git a/Source/JavaScriptCore/wtf/CMakeLists.txt b/Source/JavaScriptCore/wtf/CMakeLists.txt
index b1931d7..f85bf02 100644
--- a/Source/JavaScriptCore/wtf/CMakeLists.txt
+++ b/Source/JavaScriptCore/wtf/CMakeLists.txt
@@ -9,6 +9,7 @@ SET(WTF_HEADERS
ByteArray.h
Complex.h
CrossThreadRefCounted.h
+ CryptographicallyRandomNumber.h
CurrentTime.h
DateMath.h
DecimalNumber.h
@@ -41,8 +42,8 @@ SET(WTF_HEADERS
NotFound.h
NullPtr.h
OSAllocator.h
+ OSRandomSource.h
OwnArrayPtr.h
- OwnArrayPtrCommon.h
OwnFastMallocPtr.h
OwnPtr.h
OwnPtrCommon.h
@@ -95,6 +96,7 @@ SET(WTF_HEADERS
text/StringImplBase.h
text/WTFString.h
+ unicode/CharacterNames.h
unicode/Collator.h
unicode/UTF8.h
unicode/Unicode.h
@@ -103,12 +105,14 @@ SET(WTF_HEADERS
SET(WTF_SOURCES
Assertions.cpp
ByteArray.cpp
+ CryptographicallyRandomNumber.cpp
CurrentTime.cpp
DecimalNumber.cpp
FastMalloc.cpp
HashTable.cpp
MainThread.cpp
MD5.cpp
+ OSRandomSource.cpp
RandomNumber.cpp
RefCountedLeakCounter.cpp
StackBounds.cpp
@@ -136,6 +140,7 @@ INCLUDE_IF_EXISTS(${JAVASCRIPTCORE_DIR}/wtf/CMakeLists${PORT}.txt)
LIST(APPEND WTF_INCLUDE_DIRECTORIES
"${CMAKE_BINARY_DIR}"
+ "${CMAKE_SOURCE_DIR}/ThirdParty"
)
WEBKIT_WRAP_SOURCELIST(${WTF_SOURCES})
diff --git a/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp b/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp
new file mode 100644
index 0000000..4c49873
--- /dev/null
+++ b/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 1996, David Mazieres <dm@uun.org>
+ * Copyright (c) 2008, Damien Miller <djm@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * Arc4 random number generator for OpenBSD.
+ *
+ * This code is derived from section 17.1 of Applied Cryptography,
+ * second edition, which describes a stream cipher allegedly
+ * compatible with RSA Labs "RC4" cipher (the actual description of
+ * which is a trade secret). The same algorithm is used as a stream
+ * cipher called "arcfour" in Tatu Ylonen's ssh package.
+ *
+ * RC4 is a registered trademark of RSA Laboratories.
+ */
+
+#include "config.h"
+#include "CryptographicallyRandomNumber.h"
+
+#include "MainThread.h"
+#include "OSRandomSource.h"
+#include "StdLibExtras.h"
+#include "ThreadingPrimitives.h"
+
+namespace WTF {
+
+#if USE(OS_RANDOMNESS)
+
+namespace {
+
+class ARC4Stream {
+public:
+ ARC4Stream();
+
+ uint8_t i;
+ uint8_t j;
+ uint8_t s[256];
+};
+
+class ARC4RandomNumberGenerator {
+public:
+ ARC4RandomNumberGenerator();
+
+ uint32_t randomNumber();
+ void randomValues(void* buffer, size_t length);
+
+private:
+ inline void addRandomData(unsigned char *data, int length);
+ void stir();
+ void stirIfNeeded();
+ inline uint8_t getByte();
+ inline uint32_t getWord();
+
+ ARC4Stream m_stream;
+ int m_count;
+#if ENABLE(JSC_MULTIPLE_THREADS)
+ Mutex m_mutex;
+#endif
+};
+
+ARC4Stream::ARC4Stream()
+{
+ for (int n = 0; n < 256; n++)
+ s[n] = n;
+ i = 0;
+ j = 0;
+}
+
+ARC4RandomNumberGenerator::ARC4RandomNumberGenerator()
+ : m_count(0)
+{
+}
+
+void ARC4RandomNumberGenerator::addRandomData(unsigned char* data, int length)
+{
+ m_stream.i--;
+ for (int n = 0; n < 256; n++) {
+ m_stream.i++;
+ uint8_t si = m_stream.s[m_stream.i];
+ m_stream.j += si + data[n % length];
+ m_stream.s[m_stream.i] = m_stream.s[m_stream.j];
+ m_stream.s[m_stream.j] = si;
+ }
+ m_stream.j = m_stream.i;
+}
+
+void ARC4RandomNumberGenerator::stir()
+{
+ unsigned char randomness[128];
+ size_t length = sizeof(randomness);
+ cryptographicallyRandomValuesFromOS(randomness, length);
+ addRandomData(randomness, length);
+
+ // Discard early keystream, as per recommendations in:
+ // http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps
+ for (int i = 0; i < 256; i++)
+ getByte();
+ m_count = 1600000;
+}
+
+void ARC4RandomNumberGenerator::stirIfNeeded()
+{
+ if (m_count <= 0)
+ stir();
+}
+
+uint8_t ARC4RandomNumberGenerator::getByte()
+{
+ m_stream.i++;
+ uint8_t si = m_stream.s[m_stream.i];
+ m_stream.j += si;
+ uint8_t sj = m_stream.s[m_stream.j];
+ m_stream.s[m_stream.i] = sj;
+ m_stream.s[m_stream.j] = si;
+ return (m_stream.s[(si + sj) & 0xff]);
+}
+
+uint32_t ARC4RandomNumberGenerator::getWord()
+{
+ uint32_t val;
+ val = getByte() << 24;
+ val |= getByte() << 16;
+ val |= getByte() << 8;
+ val |= getByte();
+ return val;
+}
+
+uint32_t ARC4RandomNumberGenerator::randomNumber()
+{
+#if ENABLE(JSC_MULTIPLE_THREADS)
+ MutexLocker locker(m_mutex);
+#else
+ ASSERT(isMainThread());
+#endif
+
+ m_count -= 4;
+ stirIfNeeded();
+ return getWord();
+}
+
+void ARC4RandomNumberGenerator::randomValues(void* buffer, size_t length)
+{
+#if ENABLE(JSC_MULTIPLE_THREADS)
+ MutexLocker locker(m_mutex);
+#else
+ ASSERT(isMainThread());
+#endif
+
+ unsigned char* result = reinterpret_cast<unsigned char*>(buffer);
+ stirIfNeeded();
+ while (length--) {
+ m_count--;
+ stirIfNeeded();
+ result[length] = getByte();
+ }
+}
+
+ARC4RandomNumberGenerator& sharedRandomNumberGenerator()
+{
+ DEFINE_STATIC_LOCAL(ARC4RandomNumberGenerator, randomNumberGenerator, ());
+ return randomNumberGenerator;
+}
+
+}
+
+uint32_t cryptographicallyRandomNumber()
+{
+ return sharedRandomNumberGenerator().randomNumber();
+}
+
+void cryptographicallyRandomValues(void* buffer, size_t length)
+{
+ sharedRandomNumberGenerator().randomValues(buffer, length);
+}
+
+#endif
+
+}
diff --git a/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h b/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h
new file mode 100644
index 0000000..348242e
--- /dev/null
+++ b/Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WTF_CryptographicallyRandomNumber_h
+#define WTF_CryptographicallyRandomNumber_h
+
+#include <stdint.h>
+
+namespace WTF {
+
+#if USE(OS_RANDOMNESS)
+uint32_t cryptographicallyRandomNumber();
+void cryptographicallyRandomValues(void* buffer, size_t length);
+#endif
+
+}
+
+#if USE(OS_RANDOMNESS)
+using WTF::cryptographicallyRandomNumber;
+using WTF::cryptographicallyRandomValues;
+#endif
+
+#endif
diff --git a/Source/JavaScriptCore/wtf/CurrentTime.h b/Source/JavaScriptCore/wtf/CurrentTime.h
index 7119656..5fcb63a 100644
--- a/Source/JavaScriptCore/wtf/CurrentTime.h
+++ b/Source/JavaScriptCore/wtf/CurrentTime.h
@@ -36,27 +36,27 @@
namespace WTF {
- // Returns the current UTC time in seconds, counted from January 1, 1970.
- // Precision varies depending on platform but is usually as good or better
- // than a millisecond.
- double currentTime();
+// Returns the current UTC time in seconds, counted from January 1, 1970.
+// Precision varies depending on platform but is usually as good or better
+// than a millisecond.
+double currentTime();
- // Same thing, in milliseconds.
- inline double currentTimeMS()
- {
- return currentTime() * 1000.0;
- }
+// Same thing, in milliseconds.
+inline double currentTimeMS()
+{
+ return currentTime() * 1000.0;
+}
- inline void getLocalTime(const time_t* localTime, struct tm* localTM)
- {
- #if COMPILER(MSVC7_OR_LOWER) || COMPILER(MINGW) || OS(WINCE)
- *localTM = *localtime(localTime);
- #elif COMPILER(MSVC)
- localtime_s(localTM, localTime);
- #else
- localtime_r(localTime, localTM);
- #endif
- }
+inline void getLocalTime(const time_t* localTime, struct tm* localTM)
+{
+#if COMPILER(MSVC7_OR_LOWER) || COMPILER(MINGW) || OS(WINCE)
+ *localTM = *localtime(localTime);
+#elif COMPILER(MSVC)
+ localtime_s(localTM, localTime);
+#else
+ localtime_r(localTime, localTM);
+#endif
+}
} // namespace WTF
diff --git a/Source/JavaScriptCore/wtf/DateMath.h b/Source/JavaScriptCore/wtf/DateMath.h
index 41bd4fa..2ac284e 100644
--- a/Source/JavaScriptCore/wtf/DateMath.h
+++ b/Source/JavaScriptCore/wtf/DateMath.h
@@ -135,7 +135,6 @@ public:
, year(0)
, isDST(0)
, utcOffset(0)
- , timeZone(0)
{
}
diff --git a/Source/JavaScriptCore/wtf/FastMalloc.cpp b/Source/JavaScriptCore/wtf/FastMalloc.cpp
index ae93c02..29e9a1a 100644
--- a/Source/JavaScriptCore/wtf/FastMalloc.cpp
+++ b/Source/JavaScriptCore/wtf/FastMalloc.cpp
@@ -1061,11 +1061,8 @@ class PageHeapAllocator {
template <class Recorder>
void recordAdministrativeRegions(Recorder& recorder, const RemoteMemoryReader& reader)
{
- vm_address_t adminAllocation = reinterpret_cast<vm_address_t>(allocated_regions_);
- while (adminAllocation) {
- recorder.recordRegion(adminAllocation, kAllocIncrement);
- adminAllocation = *reader(reinterpret_cast<vm_address_t*>(adminAllocation));
- }
+ for (void* adminAllocation = allocated_regions_; adminAllocation; adminAllocation = reader.nextEntryInLinkedList(reinterpret_cast<void**>(adminAllocation)))
+ recorder.recordRegion(reinterpret_cast<vm_address_t>(adminAllocation), kAllocIncrement);
}
#endif
};
@@ -2221,7 +2218,7 @@ class TCMalloc_ThreadCache_FreeList {
template <class Finder, class Reader>
void enumerateFreeObjects(Finder& finder, const Reader& reader)
{
- for (void* nextObject = list_; nextObject; nextObject = *reader(reinterpret_cast<void**>(nextObject)))
+ for (void* nextObject = list_; nextObject; nextObject = reader.nextEntryInLinkedList(reinterpret_cast<void**>(nextObject)))
finder.visit(nextObject);
}
#endif
@@ -2346,7 +2343,7 @@ class TCMalloc_Central_FreeList {
Span* remoteSpan = nonempty_.next;
for (Span* span = reader(remoteSpan); span && remoteSpan != remoteNonempty; remoteSpan = span->next, span = (span->next ? reader(span->next) : 0)) {
- for (void* nextObject = span->objects; nextObject; nextObject = *reader(reinterpret_cast<void**>(nextObject)))
+ for (void* nextObject = span->objects; nextObject; nextObject = reader.nextEntryInLinkedList(reinterpret_cast<void**>(nextObject)))
finder.visit(nextObject);
}
}
@@ -4341,12 +4338,15 @@ public:
return 1;
Span* span = m_reader(reinterpret_cast<Span*>(ptr));
+ if (!span)
+ return 1;
+
if (span->free) {
void* ptr = reinterpret_cast<void*>(span->start << kPageShift);
m_freeObjectFinder.visit(ptr);
} else if (span->sizeclass) {
// Walk the free list of the small-object span, keeping track of each object seen
- for (void* nextObject = span->objects; nextObject; nextObject = *m_reader(reinterpret_cast<void**>(nextObject)))
+ for (void* nextObject = span->objects; nextObject; nextObject = m_reader.nextEntryInLinkedList(reinterpret_cast<void**>(nextObject)))
m_freeObjectFinder.visit(nextObject);
}
return span->length;
@@ -4430,7 +4430,7 @@ public:
return 1;
Span* span = m_reader(reinterpret_cast<Span*>(ptr));
- if (!span->start)
+ if (!span || !span->start)
return 1;
if (m_seenPointers.contains(ptr))
diff --git a/Source/JavaScriptCore/wtf/HashSet.h b/Source/JavaScriptCore/wtf/HashSet.h
index be6b93d..82245f3 100644
--- a/Source/JavaScriptCore/wtf/HashSet.h
+++ b/Source/JavaScriptCore/wtf/HashSet.h
@@ -175,14 +175,14 @@ namespace WTF {
}
template<typename T, typename U, typename V>
- pair<typename HashSet<T, U, V>::iterator, bool> HashSet<T, U, V>::add(const ValueType& value)
+ inline pair<typename HashSet<T, U, V>::iterator, bool> HashSet<T, U, V>::add(const ValueType& value)
{
return m_impl.add(value);
}
template<typename Value, typename HashFunctions, typename Traits>
template<typename T, typename HashTranslator>
- pair<typename HashSet<Value, HashFunctions, Traits>::iterator, bool>
+ inline pair<typename HashSet<Value, HashFunctions, Traits>::iterator, bool>
HashSet<Value, HashFunctions, Traits>::add(const T& value)
{
typedef HashSetTranslatorAdapter<ValueType, ValueTraits, T, HashTranslator> Adapter;
diff --git a/Source/JavaScriptCore/wtf/MallocZoneSupport.h b/Source/JavaScriptCore/wtf/MallocZoneSupport.h
index 62df145..4332e40 100644
--- a/Source/JavaScriptCore/wtf/MallocZoneSupport.h
+++ b/Source/JavaScriptCore/wtf/MallocZoneSupport.h
@@ -47,7 +47,6 @@ public:
{
void* output;
kern_return_t err = (*m_reader)(m_task, address, size, static_cast<void**>(&output));
- ASSERT(!err);
if (err)
output = 0;
return output;
@@ -58,6 +57,15 @@ public:
{
return static_cast<T*>((*this)(reinterpret_cast<vm_address_t>(address), size));
}
+
+ template <typename T>
+ T* nextEntryInLinkedList(T** address) const
+ {
+ T** output = (*this)(address);
+ if (!output)
+ return 0;
+ return *output;
+ }
};
} // namespace WTF
diff --git a/Source/JavaScriptCore/wtf/MathExtras.h b/Source/JavaScriptCore/wtf/MathExtras.h
index 095549e..ec27f5f 100644
--- a/Source/JavaScriptCore/wtf/MathExtras.h
+++ b/Source/JavaScriptCore/wtf/MathExtras.h
@@ -26,8 +26,10 @@
#ifndef WTF_MathExtras_h
#define WTF_MathExtras_h
+#include <algorithm>
#include <cmath>
#include <float.h>
+#include <limits>
#include <stdlib.h>
#if OS(SOLARIS)
@@ -205,6 +207,32 @@ inline float deg2turn(float d) { return d / 360.0f; }
inline float rad2grad(float r) { return r * 200.0f / piFloat; }
inline float grad2rad(float g) { return g * piFloat / 200.0f; }
+inline int clampToInteger(double d)
+{
+ const double minIntAsDouble = std::numeric_limits<int>::min();
+ const double maxIntAsDouble = std::numeric_limits<int>::max();
+ return static_cast<int>(std::max(std::min(d, maxIntAsDouble), minIntAsDouble));
+}
+
+inline int clampToPositiveInteger(double d)
+{
+ const double maxIntAsDouble = std::numeric_limits<int>::max();
+ return static_cast<int>(std::max<double>(std::min(d, maxIntAsDouble), 0));
+}
+
+inline int clampToInteger(float d)
+{
+ const float minIntAsFloat = static_cast<float>(std::numeric_limits<int>::min());
+ const float maxIntAsFloat = static_cast<float>(std::numeric_limits<int>::max());
+ return static_cast<int>(std::max(std::min(d, maxIntAsFloat), minIntAsFloat));
+}
+
+inline int clampToPositiveInteger(float d)
+{
+ const float maxIntAsFloat = static_cast<float>(std::numeric_limits<int>::max());
+ return static_cast<int>(std::max<float>(std::min(d, maxIntAsFloat), 0));
+}
+
#if !COMPILER(MSVC) && !COMPILER(WINSCW) && !(COMPILER(RVCT) && (OS(SYMBIAN) || PLATFORM(BREWMP)))
using std::isfinite;
using std::isinf;
diff --git a/Source/JavaScriptCore/wtf/OSRandomSource.cpp b/Source/JavaScriptCore/wtf/OSRandomSource.cpp
new file mode 100644
index 0000000..0c1416a
--- /dev/null
+++ b/Source/JavaScriptCore/wtf/OSRandomSource.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "OSRandomSource.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#if OS(UNIX)
+#include <fcntl.h>
+#include <unistd.h>
+#endif
+
+#if OS(WINDOWS)
+#include <windows.h>
+#include <wincrypt.h> // windows.h must be included before wincrypt.h.
+#endif
+
+namespace WTF {
+
+#if USE(OS_RANDOMNESS)
+void cryptographicallyRandomValuesFromOS(unsigned char* buffer, size_t length)
+{
+#if OS(UNIX)
+ int fd = open("/dev/urandom", O_RDONLY, 0);
+ if (fd < 0)
+ CRASH(); // We need /dev/urandom for this API to work...
+
+ if (read(fd, buffer, length) != static_cast<ssize_t>(length))
+ CRASH();
+
+ close(fd);
+#elif OS(WINDOWS)
+ HCRYPTPROV hCryptProv = 0;
+ if (!CryptAcquireContext(&hCryptProv, 0, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
+ CRASH();
+ if (!CryptGenRandom(hCryptProv, length, buffer))
+ CRASH();
+ CryptReleaseContext(hCryptProv, 0);
+#else
+ #error "This configuration doesn't have a strong source of randomness."
+ // WARNING: When adding new sources of OS randomness, the randomness must
+ // be of cryptographic quality!
+#endif
+}
+#endif
+
+}
diff --git a/Source/JavaScriptCore/wtf/OSRandomSource.h b/Source/JavaScriptCore/wtf/OSRandomSource.h
new file mode 100644
index 0000000..214a954
--- /dev/null
+++ b/Source/JavaScriptCore/wtf/OSRandomSource.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) Google, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WTF_OSRandomSource_h
+#define WTF_OSRandomSource_h
+
+namespace WTF {
+
+#if USE(OS_RANDOMNESS)
+// This function attempts to fill buffer with randomness from the operating
+// system. If insufficient randomness is available, the buffer will be
+// partially filled. Rather than calling this function directly, consider
+// calling cryptographicallyRandomNumber or cryptographicallyRandomValues.
+void cryptographicallyRandomValuesFromOS(unsigned char* buffer, size_t length);
+#endif
+
+}
+
+#endif
diff --git a/Source/JavaScriptCore/wtf/OwnArrayPtr.h b/Source/JavaScriptCore/wtf/OwnArrayPtr.h
index f838a7e..6b7c8da 100644
--- a/Source/JavaScriptCore/wtf/OwnArrayPtr.h
+++ b/Source/JavaScriptCore/wtf/OwnArrayPtr.h
@@ -24,13 +24,9 @@
#include "Assertions.h"
#include "Noncopyable.h"
#include "NullPtr.h"
-#include "OwnPtrCommon.h"
-#include "OwnArrayPtrCommon.h"
+#include "PassOwnArrayPtr.h"
#include <algorithm>
-// Remove this once we make all WebKit code compatible with stricter rules about OwnArrayPtr.
-#define LOOSE_OWN_ARRAY_PTR
-
namespace WTF {
template<typename T> class PassOwnArrayPtr;
@@ -115,16 +111,6 @@ template<typename T> inline typename OwnArrayPtr<T>::PtrType OwnArrayPtr<T>::lea
return ptr;
}
-#ifdef LOOSE_OWN_ARRAY_PTR
-template<typename T> inline void OwnArrayPtr<T>::set(PtrType ptr)
-{
- ASSERT(!ptr || m_ptr != ptr);
- PtrType oldPtr = m_ptr;
- m_ptr = ptr;
- deleteOwnedPtr(oldPtr);
-}
-#endif
-
template<typename T> inline OwnArrayPtr<T>& OwnArrayPtr<T>::operator=(const PassOwnArrayPtr<T>& o)
{
PtrType ptr = m_ptr;
diff --git a/Source/JavaScriptCore/wtf/PageAllocation.h b/Source/JavaScriptCore/wtf/PageAllocation.h
index 232cd20..ad3d217 100644
--- a/Source/JavaScriptCore/wtf/PageAllocation.h
+++ b/Source/JavaScriptCore/wtf/PageAllocation.h
@@ -85,10 +85,17 @@ public:
{
}
- using PageBlock::operator bool;
using PageBlock::size;
using PageBlock::base;
+#ifndef __clang__
+ using PageBlock::operator bool;
+#else
+ // FIXME: This is a workaround for <rdar://problem/8876150>, wherein Clang incorrectly emits an access
+ // control warning when a client tries to use operator bool exposed above via "using PageBlock::operator bool".
+ operator bool() const { return PageBlock::operator bool(); }
+#endif
+
static PageAllocation allocate(size_t size, OSAllocator::Usage usage = OSAllocator::UnknownUsage, bool writable = true, bool executable = false)
{
ASSERT(isPageAligned(size));
diff --git a/Source/JavaScriptCore/wtf/PageReservation.h b/Source/JavaScriptCore/wtf/PageReservation.h
index 8c097a4..6dff700 100644
--- a/Source/JavaScriptCore/wtf/PageReservation.h
+++ b/Source/JavaScriptCore/wtf/PageReservation.h
@@ -57,18 +57,23 @@ namespace WTF {
class PageReservation : private PageBlock {
public:
PageReservation()
- : m_writable(false)
+ : m_committed(0)
+ , m_writable(false)
, m_executable(false)
-#ifndef NDEBUG
- , m_committed(0)
-#endif
{
}
-
- using PageBlock::operator bool;
+
using PageBlock::base;
using PageBlock::size;
+#ifndef __clang__
+ using PageBlock::operator bool;
+#else
+ // FIXME: This is a workaround for <rdar://problem/8876150>, wherein Clang incorrectly emits an access
+ // control warning when a client tries to use operator bool exposed above via "using PageBlock::operator bool".
+ operator bool() const { return PageBlock::operator bool(); }
+#endif
+
void commit(void* start, size_t size)
{
ASSERT(*this);
@@ -76,9 +81,7 @@ public:
ASSERT(isPageAligned(size));
ASSERT(contains(start, size));
-#ifndef NDEBUG
m_committed += size;
-#endif
OSAllocator::commit(start, size, m_writable, m_executable);
}
@@ -89,12 +92,15 @@ public:
ASSERT(isPageAligned(size));
ASSERT(contains(start, size));
-#ifndef NDEBUG
m_committed -= size;
-#endif
OSAllocator::decommit(start, size);
}
+ size_t committed()
+ {
+ return m_committed;
+ }
+
static PageReservation reserve(size_t size, OSAllocator::Usage usage = OSAllocator::UnknownUsage, bool writable = true, bool executable = false)
{
ASSERT(isPageAligned(size));
@@ -119,19 +125,15 @@ public:
private:
PageReservation(void* base, size_t size, bool writable, bool executable)
: PageBlock(base, size)
+ , m_committed(0)
, m_writable(writable)
, m_executable(executable)
-#ifndef NDEBUG
- , m_committed(0)
-#endif
{
}
+ size_t m_committed;
bool m_writable;
bool m_executable;
-#ifndef NDEBUG
- size_t m_committed;
-#endif
};
}
diff --git a/Source/JavaScriptCore/wtf/PassOwnArrayPtr.h b/Source/JavaScriptCore/wtf/PassOwnArrayPtr.h
index 499e850..e1aa61e 100644
--- a/Source/JavaScriptCore/wtf/PassOwnArrayPtr.h
+++ b/Source/JavaScriptCore/wtf/PassOwnArrayPtr.h
@@ -28,7 +28,6 @@
#include "Assertions.h"
#include "NullPtr.h"
-#include "OwnArrayPtrCommon.h"
#include "TypeTraits.h"
// Remove this once we make all WebKit code compatible with stricter rules about PassOwnArrayPtr.
@@ -39,6 +38,7 @@ namespace WTF {
template<typename T> class OwnArrayPtr;
template<typename T> class PassOwnArrayPtr;
template<typename T> PassOwnArrayPtr<T> adoptArrayPtr(T*);
+template<typename T> void deleteOwnedArrayPtr(T* ptr);
template<typename T> class PassOwnArrayPtr {
public:
@@ -194,6 +194,13 @@ template<typename T> inline PassOwnArrayPtr<T> adoptArrayPtr(T* ptr)
return PassOwnArrayPtr<T>(ptr);
}
+template<typename T> inline void deleteOwnedArrayPtr(T* ptr)
+{
+ typedef char known[sizeof(T) ? 1 : -1];
+ if (sizeof(known))
+ delete [] ptr;
+}
+
template<typename T, typename U> inline PassOwnArrayPtr<T> static_pointer_cast(const PassOwnArrayPtr<U>& p)
{
return adoptArrayPtr(static_cast<T*>(p.leakPtr()));
diff --git a/Source/JavaScriptCore/wtf/Platform.h b/Source/JavaScriptCore/wtf/Platform.h
index e3fec74..98eee7f 100644
--- a/Source/JavaScriptCore/wtf/Platform.h
+++ b/Source/JavaScriptCore/wtf/Platform.h
@@ -564,6 +564,7 @@
#if OS(WINCE)
#include <ce_time.h>
+#define WTF_USE_MERSENNE_TWISTER_19937 1
#endif
#if (PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && OS(DARWIN) && !ENABLE(SINGLE_THREADED))) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
@@ -600,22 +601,28 @@
#endif
#if PLATFORM(MAC) && !PLATFORM(IOS)
-#define WTF_PLATFORM_CF 1
-#define WTF_USE_PTHREADS 1
-#define HAVE_PTHREAD_RWLOCK 1
#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && CPU(X86_64)
#define WTF_USE_PLUGIN_HOST_PROCESS 1
#endif
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+#define ENABLE_GESTURE_EVENTS 1
+#define ENABLE_RUBBER_BANDING 1
+#define WTF_USE_WK_SCROLLBAR_PAINTER 1
+#endif
#if !defined(ENABLE_JAVA_BRIDGE)
#define ENABLE_JAVA_BRIDGE 1
#endif
#if !defined(ENABLE_DASHBOARD_SUPPORT)
#define ENABLE_DASHBOARD_SUPPORT 1
#endif
+#define WTF_PLATFORM_CF 1
+#define WTF_USE_PTHREADS 1
+#define HAVE_PTHREAD_RWLOCK 1
#define HAVE_READLINE 1
#define HAVE_RUNLOOP_TIMER 1
#define ENABLE_FULLSCREEN_API 1
#define ENABLE_SMOOTH_SCROLLING 1
+#define ENABLE_WEB_ARCHIVE 1
#endif /* PLATFORM(MAC) && !PLATFORM(IOS) */
#if PLATFORM(ANDROID)
@@ -660,6 +667,7 @@
#define WTF_PLATFORM_CF 1
#define WTF_USE_PTHREADS 1
#define HAVE_PTHREAD_RWLOCK 1
+#define ENABLE_WEB_ARCHIVE 1
#endif
#if PLATFORM(ANDROID)
@@ -676,6 +684,7 @@
#if !defined(ENABLE_JIT) && !ENABLE(ANDROID_JSC_JIT)
#define ENABLE_JIT 0
#endif
+#define ENABLE_WEB_ARCHIVE 1
#endif
#if PLATFORM(WIN) && !OS(WINCE)
@@ -683,6 +692,10 @@
#define WTF_USE_PTHREADS 0
#endif
+#if PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(CHROMIUM) && !PLATFORM(QT)
+#define ENABLE_WEB_ARCHIVE 1
+#endif
+
#if PLATFORM(WX)
#define ENABLE_ASSEMBLER 1
#define ENABLE_GLOBAL_FASTMALLOC_NEW 0
@@ -690,6 +703,7 @@
#define WTF_PLATFORM_CF 1
#ifndef BUILDING_ON_TIGER
#define WTF_USE_CORE_TEXT 1
+#define ENABLE_WEB_ARCHIVE 1
#else
#define WTF_USE_ATSUI 1
#endif
@@ -730,6 +744,12 @@
#define HAVE_SIGNAL_H 1
#endif
+#if !defined(HAVE_STRNSTR)
+#if OS(DARWIN) || OS(FREEBSD)
+#define HAVE_STRNSTR 1
+#endif
+#endif
+
#if !OS(WINDOWS) && !OS(SOLARIS) && !OS(QNX) \
&& !OS(SYMBIAN) && !OS(HAIKU) && !OS(RVCT) \
&& !OS(ANDROID) && !PLATFORM(BREWMP)
@@ -836,6 +856,9 @@
#if PLATFORM(QT)
/* We must not customize the global operator new and delete for the Qt port. */
#define ENABLE_GLOBAL_FASTMALLOC_NEW 0
+#if !OS(UNIX) || OS(SYMBIAN)
+#define USE_SYSTEM_MALLOC 1
+#endif
#endif
/* fastMalloc match validation allows for runtime verification that
@@ -940,13 +963,6 @@
#define ENABLE_COMPOSITED_FIXED_ELEMENTS 0
#endif
-// ENABLE_ARCHIVE is an Android addition. We need this default value to allow
-// us to build on Mac.
-// FIXME: Upstream to webkit.org.
-#if !defined(ENABLE_ARCHIVE)
-#define ENABLE_ARCHIVE 1
-#endif
-
#if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
#define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
#endif
@@ -1040,7 +1056,10 @@
#define ENABLE_REGEXP_TRACING 0
/* Yet Another Regex Runtime - turned on by default for JIT enabled ports. */
-#if ENABLE(JIT) && !defined(ENABLE_YARR_JIT)
+#if PLATFORM(CHROMIUM)
+#define ENABLE_YARR_JIT 0
+
+#elif ENABLE(JIT) && !defined(ENABLE_YARR_JIT)
#define ENABLE_YARR_JIT 1
/* Setting this flag compares JIT results with interpreter results. */
@@ -1054,8 +1073,6 @@
security but currectly comes at a significant performance cost. */
#if PLATFORM(IOS)
#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
-#else
-#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
#endif
/* Pick which allocator to use; we only need an executable allocator if the assembler is compiled in.
@@ -1076,6 +1093,10 @@
#define ENABLE_SMOOTH_SCROLLING 0
#endif
+#if !defined(ENABLE_WEB_ARCHIVE)
+#define ENABLE_WEB_ARCHIVE 0
+#endif
+
/* Use the QXmlStreamReader implementation for XMLDocumentParser */
/* Use the QXmlQuery implementation for XSLTProcessor */
#if PLATFORM(QT)
diff --git a/Source/JavaScriptCore/wtf/RandomNumber.cpp b/Source/JavaScriptCore/wtf/RandomNumber.cpp
index 0c45416..1574324 100644
--- a/Source/JavaScriptCore/wtf/RandomNumber.cpp
+++ b/Source/JavaScriptCore/wtf/RandomNumber.cpp
@@ -34,9 +34,9 @@
#include <stdint.h>
#include <stdlib.h>
-#if OS(WINCE)
+#if USE(MERSENNE_TWISTER_19937)
extern "C" {
-#include "wince/mt19937ar.c"
+#include "mt19937ar.c"
}
#endif
@@ -78,7 +78,7 @@ double randomNumber()
// Mask off the low 53bits
fullRandom &= (1LL << 53) - 1;
return static_cast<double>(fullRandom)/static_cast<double>(1LL << 53);
-#elif OS(WINCE)
+#elif USE(MERSENNE_TWISTER_19937)
return genrand_res53();
#elif OS(WINDOWS)
uint32_t part1 = rand() & (RAND_MAX - 1);
diff --git a/Source/JavaScriptCore/wtf/RandomNumberSeed.h b/Source/JavaScriptCore/wtf/RandomNumberSeed.h
index 9ea7c71..0703abf 100644
--- a/Source/JavaScriptCore/wtf/RandomNumberSeed.h
+++ b/Source/JavaScriptCore/wtf/RandomNumberSeed.h
@@ -38,7 +38,7 @@
#include <unistd.h>
#endif
-#if OS(WINCE)
+#if USE(MERSENNE_TWISTER_19937)
extern "C" {
void init_by_array(unsigned long init_key[],int key_length);
}
@@ -54,14 +54,6 @@ inline void initializeRandomNumberGenerator()
#elif OS(WINCE)
// initialize rand()
srand(GetTickCount());
-
- // use rand() to initialize the real RNG
- unsigned long initializationBuffer[4];
- initializationBuffer[0] = (rand() << 16) | rand();
- initializationBuffer[1] = (rand() << 16) | rand();
- initializationBuffer[2] = (rand() << 16) | rand();
- initializationBuffer[3] = (rand() << 16) | rand();
- init_by_array(initializationBuffer, 4);
#elif COMPILER(MSVC) && defined(_CRT_RAND_S)
// On Windows we use rand_s which initialises itself
#elif PLATFORM(BREWMP)
@@ -74,6 +66,16 @@ inline void initializeRandomNumberGenerator()
#else
srand(static_cast<unsigned>(time(0)));
#endif
+
+#if USE(MERSENNE_TWISTER_19937)
+ // use rand() to initialize the Mersenne Twister random number generator.
+ unsigned long initializationBuffer[4];
+ initializationBuffer[0] = (rand() << 16) | rand();
+ initializationBuffer[1] = (rand() << 16) | rand();
+ initializationBuffer[2] = (rand() << 16) | rand();
+ initializationBuffer[3] = (rand() << 16) | rand();
+ init_by_array(initializationBuffer, 4);
+#endif
}
}
diff --git a/Source/JavaScriptCore/wtf/StringExtras.h b/Source/JavaScriptCore/wtf/StringExtras.h
index 473bb22..371e33b 100644
--- a/Source/JavaScriptCore/wtf/StringExtras.h
+++ b/Source/JavaScriptCore/wtf/StringExtras.h
@@ -100,8 +100,7 @@ inline int strcasecmp(const char* s1, const char* s2)
#endif
-#if COMPILER(MSVC) || COMPILER(RVCT) || OS(WINDOWS) || OS(LINUX) || OS(SOLARIS)
-// FIXME: should check HAVE_STRNSTR
+#if !HAVE(STRNSTR)
inline char* strnstr(const char* buffer, const char* target, size_t bufferLength)
{
diff --git a/Source/JavaScriptCore/wtf/StringHasher.h b/Source/JavaScriptCore/wtf/StringHasher.h
index 63ce74f..a84b2c4 100644
--- a/Source/JavaScriptCore/wtf/StringHasher.h
+++ b/Source/JavaScriptCore/wtf/StringHasher.h
@@ -141,6 +141,12 @@ public:
return createHash<UChar>(static_cast<const UChar*>(data), length / sizeof(UChar));
}
+ static inline unsigned createBlobHash(const void* data, unsigned size)
+ {
+ ASSERT(!(size % 2));
+ return createHash<UChar>(static_cast<const UChar*>(data), size / sizeof(UChar));
+ }
+
private:
static inline UChar defaultCoverter(UChar ch)
{
diff --git a/Source/JavaScriptCore/wtf/TCSystemAlloc.cpp b/Source/JavaScriptCore/wtf/TCSystemAlloc.cpp
index 0b7ecc9..3cb59e8 100644
--- a/Source/JavaScriptCore/wtf/TCSystemAlloc.cpp
+++ b/Source/JavaScriptCore/wtf/TCSystemAlloc.cpp
@@ -31,6 +31,7 @@
// Author: Sanjay Ghemawat
#include "config.h"
+#if !(defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC)
#include "TCSystemAlloc.h"
#include <algorithm>
@@ -519,3 +520,6 @@ void TCMalloc_SystemCommit(void* start, size_t length)
// declared in TCSystemAlloc.h
#endif
+
+#endif // #if !(defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC)
+
diff --git a/Source/JavaScriptCore/wtf/ThreadingPrimitives.h b/Source/JavaScriptCore/wtf/ThreadingPrimitives.h
index 809c3e2..831a99e 100644
--- a/Source/JavaScriptCore/wtf/ThreadingPrimitives.h
+++ b/Source/JavaScriptCore/wtf/ThreadingPrimitives.h
@@ -150,10 +150,20 @@ private:
PlatformCondition m_condition;
};
+#if OS(WINDOWS)
+// The absoluteTime is in seconds, starting on January 1, 1970. The time is assumed to use the same time zone as WTF::currentTime().
+// Returns an interval in milliseconds suitable for passing to one of the Win32 wait functions (e.g., ::WaitForSingleObject).
+DWORD absoluteTimeToWaitTimeoutInterval(double absoluteTime);
+#endif
+
} // namespace WTF
using WTF::Mutex;
using WTF::MutexLocker;
using WTF::ThreadCondition;
+#if OS(WINDOWS)
+using WTF::absoluteTimeToWaitTimeoutInterval;
+#endif
+
#endif // ThreadingPrimitives_h
diff --git a/Source/JavaScriptCore/wtf/ThreadingWin.cpp b/Source/JavaScriptCore/wtf/ThreadingWin.cpp
index 00319a4..4ca290f 100644
--- a/Source/JavaScriptCore/wtf/ThreadingWin.cpp
+++ b/Source/JavaScriptCore/wtf/ThreadingWin.cpp
@@ -458,20 +458,15 @@ void ThreadCondition::wait(Mutex& mutex)
bool ThreadCondition::timedWait(Mutex& mutex, double absoluteTime)
{
- double currentTime = WTF::currentTime();
+ DWORD interval = absoluteTimeToWaitTimeoutInterval(absoluteTime);
- // Time is in the past - return immediately.
- if (absoluteTime < currentTime)
+ if (!interval) {
+ // Consider the wait to have timed out, even if our condition has already been signaled, to
+ // match the pthreads implementation.
return false;
-
- // Time is too far in the future (and would overflow unsigned long) - wait forever.
- if (absoluteTime - currentTime > static_cast<double>(INT_MAX) / 1000.0) {
- wait(mutex);
- return true;
}
- double intervalMilliseconds = (absoluteTime - currentTime) * 1000.0;
- return m_condition.timedWait(mutex.impl(), static_cast<unsigned long>(intervalMilliseconds));
+ return m_condition.timedWait(mutex.impl(), interval);
}
void ThreadCondition::signal()
@@ -484,4 +479,19 @@ void ThreadCondition::broadcast()
m_condition.signal(true); // Unblock all threads.
}
+DWORD absoluteTimeToWaitTimeoutInterval(double absoluteTime)
+{
+ double currentTime = WTF::currentTime();
+
+ // Time is in the past - return immediately.
+ if (absoluteTime < currentTime)
+ return 0;
+
+ // Time is too far in the future (and would overflow unsigned long) - wait forever.
+ if (absoluteTime - currentTime > static_cast<double>(INT_MAX) / 1000.0)
+ return INFINITE;
+
+ return static_cast<DWORD>((absoluteTime - currentTime) * 1000.0);
+}
+
} // namespace WTF
diff --git a/Source/JavaScriptCore/wtf/gobject/GTypedefs.h b/Source/JavaScriptCore/wtf/gobject/GTypedefs.h
index f9f8f2f..8061e8a 100644
--- a/Source/JavaScriptCore/wtf/gobject/GTypedefs.h
+++ b/Source/JavaScriptCore/wtf/gobject/GTypedefs.h
@@ -53,8 +53,8 @@ typedef struct _GHashTable GHashTable;
typedef struct _GInputStream GInputStream;
typedef struct _GList GList;
typedef struct _GMutex GMutex;
-typedef struct _GOutputStream GOutputStream;
typedef struct _GPatternSpec GPatternSpec;
+typedef struct _GPollableOutputStream GPollableOutputStream;
typedef struct _GSocketClient GSocketClient;
typedef struct _GSocketConnection GSocketConnection;
typedef struct _GSource GSource;
diff --git a/Source/JavaScriptCore/wtf/text/AtomicString.cpp b/Source/JavaScriptCore/wtf/text/AtomicString.cpp
index dd8d66c..e0a866d 100644
--- a/Source/JavaScriptCore/wtf/text/AtomicString.cpp
+++ b/Source/JavaScriptCore/wtf/text/AtomicString.cpp
@@ -376,7 +376,20 @@ AtomicString AtomicString::fromUTF8(const char* characters)
{
if (!characters)
return AtomicString();
- return fromUTF8(characters, strlen(characters));
+
+ if (!*characters)
+ return emptyAtom;
+
+ HashAndUTF8Characters buffer;
+ buffer.characters = characters;
+ buffer.hash = calculateStringHashAndLengthFromUTF8(characters, buffer.length, buffer.utf16Length);
+
+ if (!buffer.hash)
+ return AtomicString();
+
+ AtomicString atomicString;
+ atomicString.m_string = addToStringTable<HashAndUTF8Characters, HashAndUTF8CharactersTranslator>(buffer);
+ return atomicString;
}
} // namespace WTF
diff --git a/Source/JavaScriptCore/wtf/text/StringImpl.h b/Source/JavaScriptCore/wtf/text/StringImpl.h
index dc1dbb2..25411e1 100644
--- a/Source/JavaScriptCore/wtf/text/StringImpl.h
+++ b/Source/JavaScriptCore/wtf/text/StringImpl.h
@@ -354,6 +354,16 @@ inline bool equalIgnoringCase(const char* a, const UChar* b, unsigned length) {
bool equalIgnoringNullity(StringImpl*, StringImpl*);
+template<size_t inlineCapacity>
+bool equalIgnoringNullity(const Vector<UChar, inlineCapacity>& a, StringImpl* b)
+{
+ if (!b)
+ return !a.size();
+ if (a.size() != b->length())
+ return false;
+ return !memcmp(a.data(), b->characters(), b->length());
+}
+
int codePointCompare(const StringImpl*, const StringImpl*);
static inline bool isSpaceOrNewline(UChar c)
diff --git a/Source/JavaScriptCore/wtf/text/WTFString.cpp b/Source/JavaScriptCore/wtf/text/WTFString.cpp
index 4b6ff75..b9b4e74 100644
--- a/Source/JavaScriptCore/wtf/text/WTFString.cpp
+++ b/Source/JavaScriptCore/wtf/text/WTFString.cpp
@@ -637,7 +637,7 @@ void String::split(UChar separator, Vector<String>& result) const
CString String::ascii() const
{
- // Basic Latin1 (ISO) encoding - Unicode characters 0..255 are
+ // Printable ASCII characters 32..127 and the null character are
// preserved, characters outside of this range are converted to '?'.
unsigned length = this->length();
diff --git a/Source/JavaScriptCore/wtf/text/WTFString.h b/Source/JavaScriptCore/wtf/text/WTFString.h
index 4d853d2..0aee2ef 100644
--- a/Source/JavaScriptCore/wtf/text/WTFString.h
+++ b/Source/JavaScriptCore/wtf/text/WTFString.h
@@ -66,6 +66,7 @@ struct StringHash;
// Declarations of string operations
bool charactersAreAllASCII(const UChar*, size_t);
+bool charactersAreAllLatin1(const UChar*, size_t);
int charactersToIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10);
unsigned charactersToUIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10);
int64_t charactersToInt64Strict(const UChar*, size_t, bool* ok = 0, int base = 10);
@@ -328,6 +329,7 @@ public:
WTF::Unicode::Direction defaultWritingDirection() const { return m_impl ? m_impl->defaultWritingDirection() : WTF::Unicode::LeftToRight; }
bool containsOnlyASCII() const { return charactersAreAllASCII(characters(), length()); }
+ bool containsOnlyLatin1() const { return charactersAreAllLatin1(characters(), length()); }
// Hash table deleted values, which are only constructed and never copied or destroyed.
String(WTF::HashTableDeletedValueType) : m_impl(WTF::HashTableDeletedValue) { }
@@ -367,6 +369,9 @@ inline bool equalPossiblyIgnoringCase(const String& a, const String& b, bool ign
inline bool equalIgnoringNullity(const String& a, const String& b) { return equalIgnoringNullity(a.impl(), b.impl()); }
+template<size_t inlineCapacity>
+inline bool equalIgnoringNullity(const Vector<UChar, inlineCapacity>& a, const String& b) { return equalIgnoringNullity(a, b.impl()); }
+
inline bool operator!(const String& str) { return str.isNull(); }
inline void swap(String& a, String& b) { a.swap(b); }
@@ -388,6 +393,14 @@ inline bool charactersAreAllASCII(const UChar* characters, size_t length)
return !(ored & 0xFF80);
}
+inline bool charactersAreAllLatin1(const UChar* characters, size_t length)
+{
+ UChar ored = 0;
+ for (size_t i = 0; i < length; ++i)
+ ored |= characters[i];
+ return !(ored & 0xFF00);
+}
+
int codePointCompare(const String&, const String&);
inline size_t find(const UChar* characters, unsigned length, UChar matchCharacter, unsigned index = 0)
@@ -480,6 +493,7 @@ using WTF::String;
using WTF::append;
using WTF::appendNumber;
using WTF::charactersAreAllASCII;
+using WTF::charactersAreAllLatin1;
using WTF::charactersToIntStrict;
using WTF::charactersToUIntStrict;
using WTF::charactersToInt64Strict;
diff --git a/Source/WebCore/platform/text/CharacterNames.h b/Source/JavaScriptCore/wtf/unicode/CharacterNames.h
index c4b496e..3d093a6 100644
--- a/Source/WebCore/platform/text/CharacterNames.h
+++ b/Source/JavaScriptCore/wtf/unicode/CharacterNames.h
@@ -26,9 +26,10 @@
#ifndef CharacterNames_h
#define CharacterNames_h
-#include <wtf/unicode/Unicode.h>
+#include "Unicode.h"
-namespace WebCore {
+namespace WTF {
+namespace Unicode {
// Names here are taken from the Unicode standard.
@@ -85,6 +86,57 @@ const UChar zeroWidthJoiner = 0x200D;
const UChar zeroWidthNonJoiner = 0x200C;
const UChar zeroWidthSpace = 0x200B;
-}
+} // namespace Unicode
+} // namespace WTF
+
+using WTF::Unicode::aegeanWordSeparatorLine;
+using WTF::Unicode::aegeanWordSeparatorDot;
+using WTF::Unicode::blackCircle;
+using WTF::Unicode::blackSquare;
+using WTF::Unicode::blackUpPointingTriangle;
+using WTF::Unicode::bullet;
+using WTF::Unicode::bullseye;
+using WTF::Unicode::carriageReturn;
+using WTF::Unicode::ethiopicPrefaceColon;
+using WTF::Unicode::ethiopicWordspace;
+using WTF::Unicode::fisheye;
+using WTF::Unicode::hebrewPunctuationGeresh;
+using WTF::Unicode::hebrewPunctuationGershayim;
+using WTF::Unicode::horizontalEllipsis;
+using WTF::Unicode::hyphen;
+using WTF::Unicode::hyphenMinus;
+using WTF::Unicode::ideographicComma;
+using WTF::Unicode::ideographicFullStop;
+using WTF::Unicode::ideographicSpace;
+using WTF::Unicode::leftDoubleQuotationMark;
+using WTF::Unicode::leftSingleQuotationMark;
+using WTF::Unicode::leftToRightEmbed;
+using WTF::Unicode::leftToRightMark;
+using WTF::Unicode::leftToRightOverride;
+using WTF::Unicode::minusSign;
+using WTF::Unicode::newlineCharacter;
+using WTF::Unicode::noBreakSpace;
+using WTF::Unicode::objectReplacementCharacter;
+using WTF::Unicode::popDirectionalFormatting;
+using WTF::Unicode::replacementCharacter;
+using WTF::Unicode::rightDoubleQuotationMark;
+using WTF::Unicode::rightSingleQuotationMark;
+using WTF::Unicode::rightToLeftEmbed;
+using WTF::Unicode::rightToLeftMark;
+using WTF::Unicode::rightToLeftOverride;
+using WTF::Unicode::sesameDot;
+using WTF::Unicode::softHyphen;
+using WTF::Unicode::space;
+using WTF::Unicode::tibetanMarkIntersyllabicTsheg;
+using WTF::Unicode::tibetanMarkDelimiterTshegBstar;
+using WTF::Unicode::ugariticWordDivider;
+using WTF::Unicode::whiteBullet;
+using WTF::Unicode::whiteCircle;
+using WTF::Unicode::whiteSesameDot;
+using WTF::Unicode::whiteUpPointingTriangle;
+using WTF::Unicode::yenSign;
+using WTF::Unicode::zeroWidthJoiner;
+using WTF::Unicode::zeroWidthNonJoiner;
+using WTF::Unicode::zeroWidthSpace;
#endif // CharacterNames_h
diff --git a/Source/JavaScriptCore/wtf/unicode/UTF8.cpp b/Source/JavaScriptCore/wtf/unicode/UTF8.cpp
index dc24ed5..4c3738b 100644
--- a/Source/JavaScriptCore/wtf/unicode/UTF8.cpp
+++ b/Source/JavaScriptCore/wtf/unicode/UTF8.cpp
@@ -26,16 +26,14 @@
#include "config.h"
#include "UTF8.h"
-#include <wtf/StringHasher.h>
#include "ASCIICType.h"
+#include <wtf/StringHasher.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WTF {
namespace Unicode {
-// FIXME: Use definition from CharacterNames.h.
-static const UChar replacementCharacter = 0xFFFD;
-
inline int inlineUTF8SequenceLengthNonASCII(char b0)
{
if ((b0 & 0xC0) != 0xC0)
@@ -316,25 +314,33 @@ ConversionResult convertUTF8ToUTF16(
return result;
}
-unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length)
+static inline unsigned calculateStringHashAndLengthFromUTF8Internal(const char* data, const char* dataEnd, unsigned& dataLength, unsigned& utf16Length)
{
if (!data)
return 0;
WTF::StringHasher stringHasher;
+ dataLength = 0;
utf16Length = 0;
- while (data < dataEnd) {
+ while (data < dataEnd || (!dataEnd && *data)) {
if (isASCII(*data)) {
stringHasher.addCharacter(*data++);
+ dataLength++;
utf16Length++;
continue;
}
int utf8SequenceLength = inlineUTF8SequenceLengthNonASCII(*data);
+ dataLength += utf8SequenceLength;
- if (dataEnd - data < utf8SequenceLength)
- return false;
+ if (!dataEnd) {
+ for (int i = 1; i < utf8SequenceLength; ++i) {
+ if (!data[i])
+ return 0;
+ }
+ } else if (dataEnd - data < utf8SequenceLength)
+ return 0;
if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(data), utf8SequenceLength))
return 0;
@@ -359,6 +365,17 @@ unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsi
return stringHasher.hash();
}
+unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length)
+{
+ unsigned dataLength;
+ return calculateStringHashAndLengthFromUTF8Internal(data, dataEnd, dataLength, utf16Length);
+}
+
+unsigned calculateStringHashAndLengthFromUTF8(const char* data, unsigned& dataLength, unsigned& utf16Length)
+{
+ return calculateStringHashAndLengthFromUTF8Internal(data, 0, dataLength, utf16Length);
+}
+
bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd)
{
while (b < bEnd) {
diff --git a/Source/JavaScriptCore/wtf/unicode/UTF8.h b/Source/JavaScriptCore/wtf/unicode/UTF8.h
index 1f4baca..bbfaa84 100644
--- a/Source/JavaScriptCore/wtf/unicode/UTF8.h
+++ b/Source/JavaScriptCore/wtf/unicode/UTF8.h
@@ -71,6 +71,7 @@ namespace Unicode {
char** targetStart, char* targetEnd, bool strict = true);
unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length);
+ unsigned calculateStringHashAndLengthFromUTF8(const char* data, unsigned& dataLength, unsigned& utf16Length);
bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd);
diff --git a/Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h b/Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
index 8959912..09a7036 100644
--- a/Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
+++ b/Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h
@@ -1,25 +1,5 @@
/*
* Copyright (C) 1999-2004, International Business Machines Corporation and others. All Rights Reserved.
- * Copyright (C) 2006 George Staikos <staikos@kde.org>
- * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
- * Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
- * Copyright (C) 2008 Jürg Billeter <j@bitron.ch>
- * Copyright (C) 2008 Dominik Röttsches <dominik.roettsches@access-company.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
*
*/
@@ -97,4 +77,24 @@
#define U_MASK(x) ((uint32_t)1<<(x))
+#define U8_MAX_LENGTH 4
+
+#define U8_APPEND_UNSAFE(s, i, c) { \
+ if((uint32_t)(c)<=0x7f) { \
+ (s)[(i)++]=(uint8_t)(c); \
+ } else { \
+ if((uint32_t)(c)<=0x7ff) { \
+ (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \
+ } else { \
+ if((uint32_t)(c)<=0xffff) { \
+ (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
+ } else { \
+ (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \
+ (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \
+ } \
+ (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
+ } \
+ (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
+ } \
+}
#endif
diff --git a/Source/JavaScriptCore/wtf/wtf.pri b/Source/JavaScriptCore/wtf/wtf.pri
index 8535ef3..3be3b5f 100644
--- a/Source/JavaScriptCore/wtf/wtf.pri
+++ b/Source/JavaScriptCore/wtf/wtf.pri
@@ -3,6 +3,7 @@
SOURCES += \
wtf/Assertions.cpp \
wtf/ByteArray.cpp \
+ wtf/CryptographicallyRandomNumber.cpp \
wtf/CurrentTime.cpp \
wtf/DateMath.cpp \
wtf/dtoa.cpp \
@@ -14,6 +15,7 @@ SOURCES += \
wtf/MD5.cpp \
wtf/MainThread.cpp \
wtf/NullPtr.cpp \
+ wtf/OSRandomSource.cpp \
wtf/qt/MainThreadQt.cpp \
wtf/qt/StringQt.cpp \
wtf/qt/ThreadingQt.cpp \
@@ -22,6 +24,7 @@ SOURCES += \
wtf/RandomNumber.cpp \
wtf/RefCountedLeakCounter.cpp \
wtf/StackBounds.cpp \
+ wtf/TCSystemAlloc.cpp \
wtf/ThreadingNone.cpp \
wtf/Threading.cpp \
wtf/TypeTraits.cpp \
@@ -42,10 +45,6 @@ contains(DEFINES, USE_GSTREAMER=1) {
CONFIG += link_pkgconfig
}
-!contains(DEFINES, USE_SYSTEM_MALLOC=1) {
- SOURCES += wtf/TCSystemAlloc.cpp
-}
-
unix:!symbian: SOURCES += wtf/OSAllocatorPosix.cpp
symbian: SOURCES += wtf/OSAllocatorSymbian.cpp
win*|wince*: SOURCES += wtf/OSAllocatorWin.cpp
diff --git a/Source/JavaScriptCore/wtf/wx/StringWx.cpp b/Source/JavaScriptCore/wtf/wx/StringWx.cpp
index 59d500b..fe0fd89 100644
--- a/Source/JavaScriptCore/wtf/wx/StringWx.cpp
+++ b/Source/JavaScriptCore/wtf/wx/StringWx.cpp
@@ -24,10 +24,10 @@
*/
#include "config.h"
-#include "PlatformString.h"
-#include <unicode/ustring.h>
#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
+
#include <wx/defs.h>
#include <wx/string.h>
@@ -39,7 +39,7 @@ String::String(const wxString& wxstr)
#error "This code only works in Unicode build of wxWidgets"
#endif
-#if SIZEOF_WCHAR_T == sizeof(UChar)
+#if SIZEOF_WCHAR_T == U_SIZEOF_UCHAR
m_impl = StringImpl::create(wxstr.wc_str(), wxstr.length());
@@ -61,8 +61,8 @@ String::String(const wxString& wxstr)
UChar* data;
wxMBConvUTF16 conv;
unsigned utf16Length = conv.FromWChar(0, 0, wideString, wideLength);
- m_impl = StringImpl::createUninitialized(utf16Length, data)
- conv.FromWChar(data, utf16Length, wideString, wideLength);
+ m_impl = StringImpl::createUninitialized(utf16Length, data);
+ conv.FromWChar((char*)data, utf16Length, wideString, wideLength);
#endif // SIZEOF_WCHAR_T == 4
}
diff --git a/Source/JavaScriptCore/yarr/Yarr.h b/Source/JavaScriptCore/yarr/Yarr.h
index 57176bc..de64fdd 100644
--- a/Source/JavaScriptCore/yarr/Yarr.h
+++ b/Source/JavaScriptCore/yarr/Yarr.h
@@ -29,7 +29,6 @@
#define Yarr_h
#include "YarrInterpreter.h"
-#include "YarrJIT.h"
#include "YarrPattern.h"
namespace JSC { namespace Yarr {
@@ -61,11 +60,6 @@ enum JSRegExpResult {
PassOwnPtr<BytecodePattern> byteCompile(YarrPattern&, BumpPointerAllocator*);
int interpret(BytecodePattern*, const UChar* input, unsigned start, unsigned length, int* output);
-#if ENABLE(YARR_JIT)
-void jitCompile(YarrPattern&, JSGlobalData*, YarrCodeBlock& jitObject);
-int execute(YarrCodeBlock& jitObject, const UChar* input, unsigned start, unsigned length, int* output);
-#endif
-
} } // namespace JSC::Yarr
#endif // Yarr_h
diff --git a/Source/JavaScriptCore/yarr/YarrInterpreter.cpp b/Source/JavaScriptCore/yarr/YarrInterpreter.cpp
index d2dbf23..37d44f7 100644
--- a/Source/JavaScriptCore/yarr/YarrInterpreter.cpp
+++ b/Source/JavaScriptCore/yarr/YarrInterpreter.cpp
@@ -203,7 +203,7 @@ public:
int readChecked(int position)
{
ASSERT(position < 0);
- ASSERT((unsigned)-position <= pos);
+ ASSERT(static_cast<unsigned>(-position) <= pos);
unsigned p = pos + position;
ASSERT(p < length);
return input[p];
@@ -248,8 +248,8 @@ public:
if ((pos + count) <= length) {
pos += count;
return true;
- } else
- return false;
+ }
+ return false;
}
void uncheckInput(int count)
@@ -356,8 +356,8 @@ public:
{
if (term.inputPosition)
return (input.atEnd(term.inputPosition)) || (pattern->m_multiline && testCharacterClass(pattern->newlineCharacterClass, input.readChecked(term.inputPosition)));
- else
- return (input.atEnd()) || (pattern->m_multiline && testCharacterClass(pattern->newlineCharacterClass, input.read()));
+
+ return (input.atEnd()) || (pattern->m_multiline && testCharacterClass(pattern->newlineCharacterClass, input.read()));
}
bool matchAssertionWordBoundary(ByteTerm& term)
@@ -577,8 +577,8 @@ public:
if ((backTrack->matchAmount < term.atom.quantityCount) && tryConsumeBackReference(matchBegin, matchEnd, term.inputPosition)) {
++backTrack->matchAmount;
return true;
- } else
- input.setPos(backTrack->begin);
+ }
+ input.setPos(backTrack->begin);
break;
}
@@ -1412,7 +1412,7 @@ public:
}
private:
- BytecodePattern *pattern;
+ BytecodePattern* pattern;
int* output;
InputStream input;
BumpPointerPool* allocatorPool;
@@ -1847,7 +1847,7 @@ public:
case PatternTerm::TypeParentheticalAssertion: {
unsigned alternativeFrameLocation = term.frameLocation + YarrStackSpaceForBackTrackInfoParentheticalAssertion;
- ASSERT(currentCountAlreadyChecked >= (unsigned)term.inputPosition);
+ ASSERT(currentCountAlreadyChecked >= static_cast<unsigned>(term.inputPosition));
int positiveInputOffset = currentCountAlreadyChecked - term.inputPosition;
atomParentheticalAssertionBegin(term.parentheses.subpatternId, term.invert(), term.frameLocation, alternativeFrameLocation);
diff --git a/Source/JavaScriptCore/yarr/YarrJIT.cpp b/Source/JavaScriptCore/yarr/YarrJIT.cpp
index 9d13d45..e34e6f4 100644
--- a/Source/JavaScriptCore/yarr/YarrJIT.cpp
+++ b/Source/JavaScriptCore/yarr/YarrJIT.cpp
@@ -27,9 +27,7 @@
#include "YarrJIT.h"
#include "ASCIICType.h"
-#include "JSGlobalData.h"
#include "LinkBuffer.h"
-#include "MacroAssembler.h"
#include "Yarr.h"
#if ENABLE(YARR_JIT)
@@ -407,9 +405,9 @@ class YarrGenerator : private MacroAssembler {
--m_parenNestingLevel;
}
- ParenthesesTail* addParenthesesTail(PatternTerm& term, ParenthesesTail* nextOuterParenTail)
+ ParenthesesTail* addParenthesesTail(PatternTerm& term, JumpList* jumpListToPriorParen)
{
- ParenthesesTail* parenthesesTail = new ParenthesesTail(term, m_parenNestingLevel, nextOuterParenTail);
+ ParenthesesTail* parenthesesTail = new ParenthesesTail(term, m_parenNestingLevel, jumpListToPriorParen);
m_parenTails.append(parenthesesTail);
m_parenTailsForIteration.append(parenthesesTail);
@@ -815,7 +813,7 @@ class YarrGenerator : private MacroAssembler {
, checkedTotal(checkedTotal)
, m_subParenNum(0)
, m_linkedBacktrack(0)
- , m_parenthesesTail(0)
+ , m_jumpList(0)
{
}
@@ -876,14 +874,14 @@ class YarrGenerator : private MacroAssembler {
return !disjunction->m_parent;
}
- void setParenthesesTail(ParenthesesTail* parenthesesTail)
+ void setJumpListToPriorParen(JumpList* jumpList)
{
- m_parenthesesTail = parenthesesTail;
+ m_jumpList = jumpList;
}
- ParenthesesTail* getParenthesesTail()
+ JumpList* getJumpListToPriorParen()
{
- return m_parenthesesTail;
+ return m_jumpList;
}
PatternTerm& lookaheadTerm()
@@ -1018,15 +1016,15 @@ class YarrGenerator : private MacroAssembler {
unsigned m_subParenNum;
BacktrackDestination m_backtrack;
BacktrackDestination* m_linkedBacktrack;
- ParenthesesTail* m_parenthesesTail;
+ JumpList* m_jumpList;
};
struct ParenthesesTail {
- ParenthesesTail(PatternTerm& term, int nestingLevel, ParenthesesTail* nextOuterParenTail)
+ ParenthesesTail(PatternTerm& term, int nestingLevel, JumpList* jumpListToPriorParen)
: m_term(term)
, m_nestingLevel(nestingLevel)
, m_subParenIndex(0)
- , m_nextOuterParenTail(nextOuterParenTail)
+ , m_jumpListToPriorParen(jumpListToPriorParen)
{
}
@@ -1052,7 +1050,7 @@ class YarrGenerator : private MacroAssembler {
if (m_doDirectBacktrack)
state.propagateBacktrackingFrom(generator, m_parenBacktrack, false);
else {
- stateBacktrack.setBacktrackJumpList(&m_pattBacktrackJumps);
+ stateBacktrack.setBacktrackJumpList(&m_afterBacktrackJumps);
stateBacktrack.setBacktrackSourceLabel(&m_backtrackFromAfterParens);
}
}
@@ -1065,7 +1063,7 @@ class YarrGenerator : private MacroAssembler {
void addAfterParenJump(Jump jump)
{
- m_pattBacktrackJumps.append(jump);
+ m_afterBacktrackJumps.append(jump);
}
bool generateCode(YarrGenerator* generator, JumpList& jumpsToNext, bool priorBackTrackFallThrough, bool nextBacktrackFallThrough)
@@ -1091,12 +1089,9 @@ class YarrGenerator : private MacroAssembler {
if (m_backtrackToLabel.isSet()) {
m_backtrack.setLabel(m_backtrackToLabel);
nextBacktrackFallThrough = false;
- } else if (!m_subParenIndex && m_nextOuterParenTail) {
- // If we don't have a destination and we are the first term of a nested paren, go
- // back to the outer paren.
- // There is an optimization if the next outer paren is the next paren to be emitted.
- // In that case we really want the else clause.
- m_backtrack.setBacktrackJumpList(&m_nextOuterParenTail->m_withinBacktrackJumps);
+ } else if (m_jumpListToPriorParen) {
+ // If we don't have a destination, go back to either the prior paren or the next outer paren.
+ m_backtrack.setBacktrackJumpList(m_jumpListToPriorParen);
nextBacktrackFallThrough = false;
} else
m_backtrack.setBacktrackJumpList(&jumpsToNext);
@@ -1109,7 +1104,7 @@ class YarrGenerator : private MacroAssembler {
if (m_dataAfterLabelPtr.isSet())
generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(m_dataAfterLabelPtr, m_backtrackFromAfterParens));
- m_pattBacktrackJumps.link(generator);
+ m_afterBacktrackJumps.link(generator);
if (m_term.quantityType == QuantifierGreedy) {
// If this is -1 we have now tested with both with and without the parens.
@@ -1149,14 +1144,14 @@ class YarrGenerator : private MacroAssembler {
PatternTerm& m_term;
int m_nestingLevel;
unsigned m_subParenIndex;
- ParenthesesTail* m_nextOuterParenTail;
+ JumpList* m_jumpListToPriorParen;
Label m_nonGreedyTryParentheses;
Label m_fallThrough;
Label m_backtrackToLabel;
Label m_backtrackFromAfterParens;
DataLabelPtr m_dataAfterLabelPtr;
- JumpList m_pattBacktrackJumps;
JumpList m_withinBacktrackJumps;
+ JumpList m_afterBacktrackJumps;
BacktrackDestination m_parenBacktrack;
BacktrackDestination m_backtrack;
bool m_doDirectBacktrack;
@@ -1581,8 +1576,10 @@ class YarrGenerator : private MacroAssembler {
JumpList successes;
bool propogateBacktrack = false;
- for (state.resetAlternative(); state.alternativeValid(); state.nextAlternative()) {
+ // Save current state's paren jump list for use with each alternative
+ JumpList* outerJumpList = state.getJumpListToPriorParen();
+ for (state.resetAlternative(); state.alternativeValid(); state.nextAlternative(), state.setJumpListToPriorParen(outerJumpList)) {
PatternAlternative* alternative = state.alternative();
optimizeAlternative(alternative);
@@ -1649,9 +1646,9 @@ class YarrGenerator : private MacroAssembler {
m_expressionState.incrementParenNestingLevel();
TermGenerationState parenthesesState(disjunction, state.checkedTotal);
-
- // Use the current paren Tail to connect the nested parentheses.
- parenthesesState.setParenthesesTail(state.getParenthesesTail());
+
+ // Use the current state's jump list for the nested parentheses.
+ parenthesesState.setJumpListToPriorParen(state.getJumpListToPriorParen());
generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
// this expects that any backtracks back out of the parentheses will be in the
@@ -1663,6 +1660,8 @@ class YarrGenerator : private MacroAssembler {
state.propagateBacktrackingFrom(this, parenthesesBacktrack);
stateBacktrack.propagateBacktrackToLabel(parenthesesBacktrack);
+ state.setJumpListToPriorParen(parenthesesState.getJumpListToPriorParen());
+
m_expressionState.decrementParenNestingLevel();
} else {
Jump nonGreedySkipParentheses;
@@ -1687,14 +1686,14 @@ class YarrGenerator : private MacroAssembler {
store32(index, Address(output, (term.parentheses.subpatternId << 1) * sizeof(int)));
}
- ParenthesesTail* parenthesesTail = m_expressionState.addParenthesesTail(term, state.getParenthesesTail());
+ ParenthesesTail* parenthesesTail = m_expressionState.addParenthesesTail(term, state.getJumpListToPriorParen());
m_expressionState.incrementParenNestingLevel();
TermGenerationState parenthesesState(disjunction, state.checkedTotal);
// Save the parenthesesTail for backtracking from nested parens to this one.
- parenthesesState.setParenthesesTail(parenthesesTail);
+ parenthesesState.setJumpListToPriorParen(&parenthesesTail->m_withinBacktrackJumps);
// generate the body of the parentheses
generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation);
@@ -1718,6 +1717,8 @@ class YarrGenerator : private MacroAssembler {
parenthesesTail->processBacktracks(this, state, parenthesesState, nonGreedyTryParentheses, label());
+ state.setJumpListToPriorParen(&parenthesesTail->m_afterBacktrackJumps);
+
parenthesesState.getBacktrackDestination().clear();
if (term.quantityType == QuantifierNonGreedy)
@@ -1977,6 +1978,7 @@ class YarrGenerator : private MacroAssembler {
// if there are any more alternatives, plant the check for input before looping.
if (state.alternativeValid()) {
+ state.setJumpListToPriorParen(0);
PatternAlternative* nextAlternative = state.alternative();
if (!setRepeatAlternativeLabels && !nextAlternative->onceThrough()) {
// We have handled non-repeating alternatives, jump to next iteration
diff --git a/Source/JavaScriptCore/yarr/YarrJIT.h b/Source/JavaScriptCore/yarr/YarrJIT.h
index 414b575..91c5b85 100644
--- a/Source/JavaScriptCore/yarr/YarrJIT.h
+++ b/Source/JavaScriptCore/yarr/YarrJIT.h
@@ -28,8 +28,10 @@
#if ENABLE(YARR_JIT)
+#include "JSGlobalData.h"
#include "MacroAssembler.h"
#include "UString.h"
+#include "YarrPattern.h"
#if CPU(X86) && !COMPILER(MSVC)
#define YARR_CALL __attribute__ ((regparm (3)))
@@ -75,6 +77,9 @@ private:
bool m_needFallBack;
};
+void jitCompile(YarrPattern&, JSGlobalData*, YarrCodeBlock& jitObject);
+int execute(YarrCodeBlock& jitObject, const UChar* input, unsigned start, unsigned length, int* output);
+
} } // namespace JSC::Yarr
#endif
diff --git a/Source/JavaScriptCore/yarr/YarrParser.h b/Source/JavaScriptCore/yarr/YarrParser.h
index 8c5741a..c59310a 100644
--- a/Source/JavaScriptCore/yarr/YarrParser.h
+++ b/Source/JavaScriptCore/yarr/YarrParser.h
@@ -26,7 +26,7 @@
#ifndef YarrParser_h
#define YarrParser_h
-#include "UString.h"
+#include <runtime/UString.h>
#include "Yarr.h"
#include <wtf/ASCIICType.h>
#include <wtf/unicode/Unicode.h>
diff --git a/Source/JavaScriptCore/yarr/YarrPattern.cpp b/Source/JavaScriptCore/yarr/YarrPattern.cpp
index 112b65d..3d6dbd3 100644
--- a/Source/JavaScriptCore/yarr/YarrPattern.cpp
+++ b/Source/JavaScriptCore/yarr/YarrPattern.cpp
@@ -488,24 +488,56 @@ public:
m_alternative = m_alternative->m_parent->m_parent;
PatternTerm& lastTerm = m_alternative->lastTerm();
-
+
unsigned numParenAlternatives = parenthesesDisjunction->m_alternatives.size();
unsigned numBOLAnchoredAlts = 0;
- // Bubble up BOL flags
+ bool containsEmptyAlternative = false;
+
for (unsigned i = 0; i < numParenAlternatives; i++) {
+ if (!parenthesesDisjunction->m_alternatives[i]->m_terms.size() && numParenAlternatives > 1) {
+ parenthesesDisjunction->m_alternatives.remove(i);
+ --numParenAlternatives;
+
+ containsEmptyAlternative = true;
+ continue;
+ }
+
+ // Bubble up BOL flags
if (parenthesesDisjunction->m_alternatives[i]->m_startsWithBOL)
numBOLAnchoredAlts++;
}
-
+
if (numBOLAnchoredAlts) {
m_alternative->m_containsBOL = true;
// If all the alternatives in parens start with BOL, then so does this one
if (numBOLAnchoredAlts == numParenAlternatives)
m_alternative->m_startsWithBOL = true;
}
-
+
lastTerm.parentheses.lastSubpatternId = m_pattern.m_numSubpatterns;
m_invertParentheticalAssertion = false;
+
+ if (containsEmptyAlternative) {
+ // Backup and remove the current disjunction's alternatives.
+ Vector<PatternAlternative*> alternatives;
+ alternatives.append(parenthesesDisjunction->m_alternatives);
+ parenthesesDisjunction->m_alternatives.clear();
+ PatternAlternative* alternative = parenthesesDisjunction->addNewAlternative();
+
+ // Insert a new non-capturing parentheses.
+ unsigned subpatternId = m_pattern.m_numSubpatterns + 1;
+ PatternDisjunction* newDisjunction = new PatternDisjunction(alternative);
+ m_pattern.m_disjunctions.append(newDisjunction);
+ alternative->m_terms.append(PatternTerm(PatternTerm::TypeParenthesesSubpattern, subpatternId, newDisjunction, false, false));
+ newDisjunction->m_alternatives.append(alternatives);
+
+ // Set the quantifier of the new parentheses to '?' and set the inherited properties.
+ PatternTerm& disjunctionTerm = alternative->lastTerm();
+ disjunctionTerm.quantify(1, QuantifierGreedy);
+ disjunctionTerm.parentheses.lastSubpatternId = m_pattern.m_numSubpatterns;
+ alternative->m_containsBOL = m_alternative->m_containsBOL;
+ alternative->m_startsWithBOL = m_alternative->m_startsWithBOL;
+ }
}
void atomBackReference(unsigned subpatternId)
diff --git a/Source/JavaScriptCore/yarr/YarrPattern.h b/Source/JavaScriptCore/yarr/YarrPattern.h
index d80f692..cfe804f 100644
--- a/Source/JavaScriptCore/yarr/YarrPattern.h
+++ b/Source/JavaScriptCore/yarr/YarrPattern.h
@@ -27,11 +27,10 @@
#ifndef YarrPattern_h
#define YarrPattern_h
+#include <runtime/UString.h>
#include <wtf/Vector.h>
#include <wtf/unicode/Unicode.h>
-#include <UString.h>
-
namespace JSC { namespace Yarr {
struct PatternDisjunction;
diff --git a/Source/JavaScriptCore/yarr/YarrSyntaxChecker.h b/Source/JavaScriptCore/yarr/YarrSyntaxChecker.h
index e48cb9e..2013671 100644
--- a/Source/JavaScriptCore/yarr/YarrSyntaxChecker.h
+++ b/Source/JavaScriptCore/yarr/YarrSyntaxChecker.h
@@ -26,7 +26,7 @@
#ifndef YarrSyntaxChecker_h
#define YarrSyntaxChecker_h
-#include <UString.h>
+#include <runtime/UString.h>
namespace JSC { namespace Yarr {
diff --git a/Source/JavaScriptCore/yarr/yarr.pri b/Source/JavaScriptCore/yarr/yarr.pri
new file mode 100644
index 0000000..a7b1242
--- /dev/null
+++ b/Source/JavaScriptCore/yarr/yarr.pri
@@ -0,0 +1,7 @@
+# Yet Another Regex Runtime - Qt4 build info
+
+SOURCES += \
+ yarr/YarrInterpreter.cpp \
+ yarr/YarrPattern.cpp \
+ yarr/YarrSyntaxChecker.cpp
+
diff --git a/Source/JavaScriptGlue/ChangeLog b/Source/JavaScriptGlue/ChangeLog
index 3188ba7..cc13884 100644
--- a/Source/JavaScriptGlue/ChangeLog
+++ b/Source/JavaScriptGlue/ChangeLog
@@ -1,3 +1,100 @@
+2011-02-13 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Bug 53760 - JSC fails to build with TOT Clang
+ https://bugs.webkit.org/show_bug.cgi?id=53760
+
+ Fix -Woverloaded-virtual warnings.
+
+ * UserObjectImp.cpp:
+ (UserObjectImp::toPrimitive): Use PreferredPrimitiveType instead of JSType to
+ match the base class.
+ * UserObjectImp.h:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ * ForwardingHeaders/wtf/OwnArrayPtrCommon.h: Removed.
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77098, r77099, r77100, r77109, and
+ r77111 back in, along with a few more Qt fix attempts.
+
+ * JSValueWrapper.cpp:
+ (JSValueWrapper::JSObjectMark):
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed, rolling out r77098, r77099, r77100, r77109, and
+ r77111.
+ http://trac.webkit.org/changeset/77098
+ http://trac.webkit.org/changeset/77099
+ http://trac.webkit.org/changeset/77100
+ http://trac.webkit.org/changeset/77109
+ http://trac.webkit.org/changeset/77111
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Qt build is broken
+
+ * JSValueWrapper.cpp:
+ (JSValueWrapper::JSObjectMark):
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77006 and r77020 back in.
+
+ * JSValueWrapper.cpp:
+ (JSValueWrapper::JSObjectMark):
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77006 and r77020.
+ http://trac.webkit.org/changeset/77006
+ http://trac.webkit.org/changeset/77020
+ https://bugs.webkit.org/show_bug.cgi?id=53360
+
+ "Broke Windows tests" (Requested by rniwa on #webkit).
+
+ * JSValueWrapper.cpp:
+ (JSValueWrapper::JSObjectMark):
+
+2011-01-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ There's no reason to recurse here, the value we
+ were marking was protected.
+
+ * JSValueWrapper.cpp:
+ (JSValueWrapper::JSObjectMark):
+
+2011-01-23 Mark Rowe <mrowe@apple.com>
+
+ Follow-up to r76477.
+
+ Fix the scripts that detect problematic code such as static initializers
+ and destructors, weak vtables, inappropriate files in the framework wrappers,
+ and public headers including private headers. These had all been broken
+ since the projects were moved in to the Source directory as the paths to the
+ scripts were not updated at that time.
+
+ * JavaScriptGlue.xcodeproj/project.pbxproj:
+
2011-01-17 Dan Bernstein <mitz@apple.com>
Rubber-stamped by Mark Rowe.
diff --git a/Source/JavaScriptGlue/Configurations/Version.xcconfig b/Source/JavaScriptGlue/Configurations/Version.xcconfig
index 4b884e2..cee5010 100644
--- a/Source/JavaScriptGlue/Configurations/Version.xcconfig
+++ b/Source/JavaScriptGlue/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 16;
+MINOR_VERSION = 20;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/Source/JavaScriptGlue/ForwardingHeaders/wtf/OwnArrayPtrCommon.h b/Source/JavaScriptGlue/ForwardingHeaders/wtf/OwnArrayPtrCommon.h
deleted file mode 100644
index 0a226f0..0000000
--- a/Source/JavaScriptGlue/ForwardingHeaders/wtf/OwnArrayPtrCommon.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <JavaScriptCore/OwnArrayPtrCommon.h>
diff --git a/Source/JavaScriptGlue/JSValueWrapper.cpp b/Source/JavaScriptGlue/JSValueWrapper.cpp
index e0879a0..d9ac497 100644
--- a/Source/JavaScriptGlue/JSValueWrapper.cpp
+++ b/Source/JavaScriptGlue/JSValueWrapper.cpp
@@ -194,15 +194,4 @@ CFTypeRef JSValueWrapper::JSObjectCopyCFValue(void *data)
void JSValueWrapper::JSObjectMark(void *data)
{
- JSValueWrapper* ptr = (JSValueWrapper*)data;
- if (ptr)
- {
- // This results in recursive marking but will be otherwise safe and correct.
- // We claim the array vptr is 0 because we don't have access to it here, and
- // claiming 0 is functionally harmless -- it merely means that we can't
- // devirtualise marking of arrays when recursing from this point.
- MarkStack markStack(0);
- markStack.append(ptr->fValue.get());
- markStack.drain();
- }
}
diff --git a/Source/JavaScriptGlue/JavaScriptGlue.xcodeproj/project.pbxproj b/Source/JavaScriptGlue/JavaScriptGlue.xcodeproj/project.pbxproj
index 63cd4a9..05f9052 100644
--- a/Source/JavaScriptGlue/JavaScriptGlue.xcodeproj/project.pbxproj
+++ b/Source/JavaScriptGlue/JavaScriptGlue.xcodeproj/project.pbxproj
@@ -332,7 +332,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "if [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
5D2F7D0A0C6878E000B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
@@ -377,7 +377,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ -f ../Tools/Scripts/check-for-global-initializers ]; then\n ../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
+ shellScript = "if [ -f ../../Tools/Scripts/check-for-global-initializers ]; then\n ../../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
};
/* End PBXShellScriptBuildPhase section */
diff --git a/Source/JavaScriptGlue/UserObjectImp.cpp b/Source/JavaScriptGlue/UserObjectImp.cpp
index 1728a7e..340864b 100644
--- a/Source/JavaScriptGlue/UserObjectImp.cpp
+++ b/Source/JavaScriptGlue/UserObjectImp.cpp
@@ -169,7 +169,7 @@ JSUserObject* UserObjectImp::GetJSUserObject() const
return fJSUserObject;
}
-JSValue UserObjectImp::toPrimitive(ExecState *exec, JSType) const
+JSValue UserObjectImp::toPrimitive(ExecState *exec, PreferredPrimitiveType) const
{
JSValue result = jsUndefined();
JSUserObject* jsObjPtr = KJSValueToJSObject(toObject(exec), exec);
diff --git a/Source/JavaScriptGlue/UserObjectImp.h b/Source/JavaScriptGlue/UserObjectImp.h
index 8dbad98..dbd4faa 100644
--- a/Source/JavaScriptGlue/UserObjectImp.h
+++ b/Source/JavaScriptGlue/UserObjectImp.h
@@ -50,7 +50,7 @@ public:
virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
virtual void put(ExecState *exec, const Identifier &propertyName, JSValue value, PutPropertySlot&);
- JSValue toPrimitive(ExecState*, JSType preferredType = UnspecifiedType) const;
+ JSValue toPrimitive(ExecState*, PreferredPrimitiveType preferredType = NoPreference) const;
virtual bool toBoolean(ExecState *exec) const;
virtual double toNumber(ExecState *exec) const;
virtual UString toString(ExecState *exec) const;
diff --git a/Source/JavaScriptCore/wtf/wince/mt19937ar.c b/Source/ThirdParty/mt19937ar.c
index 4715958..4715958 100644
--- a/Source/JavaScriptCore/wtf/wince/mt19937ar.c
+++ b/Source/ThirdParty/mt19937ar.c
diff --git a/Source/WebCore/Android.derived.jscbindings.mk b/Source/WebCore/Android.derived.jscbindings.mk
index 002440a..dccbf05 100644
--- a/Source/WebCore/Android.derived.jscbindings.mk
+++ b/Source/WebCore/Android.derived.jscbindings.mk
@@ -361,6 +361,7 @@ GEN := \
$(intermediates)/page/JSConnection.h \
$(intermediates)/page/JSConsole.h \
$(intermediates)/page/JSCoordinates.h \
+ $(intermediates)/page/JSCrypto.h \
$(intermediates)/page/JSDOMSelection.h \
$(intermediates)/page/JSDOMWindow.h \
$(intermediates)/page/JSEventSource.h \
diff --git a/Source/WebCore/Android.derived.v8bindings.mk b/Source/WebCore/Android.derived.v8bindings.mk
index 70b6377..93f8548 100644
--- a/Source/WebCore/Android.derived.v8bindings.mk
+++ b/Source/WebCore/Android.derived.v8bindings.mk
@@ -347,6 +347,7 @@ GEN := \
$(intermediates)/bindings/V8Connection.h \
$(intermediates)/bindings/V8Console.h \
$(intermediates)/bindings/V8Coordinates.h \
+ $(intermediates)/bindings/V8Crypto.h \
$(intermediates)/bindings/V8DOMSelection.h \
$(intermediates)/bindings/V8DOMWindow.h \
$(intermediates)/bindings/V8EventSource.h \
diff --git a/Source/WebCore/Android.jscbindings.mk b/Source/WebCore/Android.jscbindings.mk
index bd5dfbd..4248b9f 100644
--- a/Source/WebCore/Android.jscbindings.mk
+++ b/Source/WebCore/Android.jscbindings.mk
@@ -40,10 +40,9 @@ BINDING_C_INCLUDES := \
$(JAVASCRIPTCORE_PATH)/parser \
$(JAVASCRIPTCORE_PATH)/jit \
$(JAVASCRIPTCORE_PATH)/interpreter \
- $(JAVASCRIPTCORE_PATH)/pcre \
$(JAVASCRIPTCORE_PATH)/profiler \
$(JAVASCRIPTCORE_PATH)/runtime \
- $(JAVASCRIPTCORE_PATH)/wrec \
+ $(JAVASCRIPTCORE_PATH)/yarr \
$(JAVASCRIPTCORE_PATH)/ForwardingHeaders \
\
$(WEBCORE_INTERMEDIATES_PATH)/bindings/js \
@@ -152,6 +151,7 @@ LOCAL_SRC_FILES += \
bindings/js/JSLazyEventListener.cpp \
bindings/js/JSLocationCustom.cpp \
bindings/js/JSMainThreadExecState.cpp \
+ bindings/js/JSMemoryInfoCustom.cpp \
bindings/js/JSMessageChannelCustom.cpp \
bindings/js/JSMessageEventCustom.cpp \
bindings/js/JSMessagePortCustom.cpp \
diff --git a/Source/WebCore/Android.mk b/Source/WebCore/Android.mk
index a222521..4529f83 100644
--- a/Source/WebCore/Android.mk
+++ b/Source/WebCore/Android.mk
@@ -131,6 +131,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
dom/DocumentFragment.cpp \
dom/DocumentMarkerController.cpp \
dom/DocumentParser.cpp \
+ dom/DocumentOrderedMap.cpp \
dom/DocumentType.cpp \
dom/DynamicNodeList.cpp \
dom/EditingText.cpp \
@@ -387,12 +388,15 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
html/parser/HTMLParserScheduler.cpp \
html/parser/HTMLPreloadScanner.cpp \
html/parser/HTMLScriptRunner.cpp \
+ html/parser/HTMLSourceTracker.cpp \
html/parser/HTMLTokenizer.cpp \
html/parser/HTMLTreeBuilder.cpp \
html/parser/HTMLViewSourceParser.cpp \
html/parser/TextDocumentParser.cpp \
html/parser/TextViewSourceParser.cpp \
+ html/parser/XSSFilter.cpp \
\
+ html/shadow/MediaControls.cpp \
html/shadow/SliderThumbElement.cpp \
\
inspector/ScriptArguments.cpp \
@@ -456,7 +460,9 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
page/Chrome.cpp \
page/Connection.cpp \
page/Console.cpp \
+ page/ContentSecurityPolicy.cpp \
page/ContextMenuController.cpp \
+ page/Crypto.cpp \
page/DOMSelection.cpp \
page/DOMTimer.cpp \
page/DOMWindow.cpp \
@@ -494,7 +500,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
page/UserContentURLPattern.cpp \
page/WindowFeatures.cpp \
page/WorkerNavigator.cpp \
- page/XSSAuditor.cpp \
\
page/android/DragControllerAndroid.cpp \
page/android/EventHandlerAndroid.cpp \
@@ -646,6 +651,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
ifeq ($(ENABLE_SVG), true)
LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
+ platform/graphics/filters/DistantLightSource.cpp \
platform/graphics/filters/FEBlend.cpp \
platform/graphics/filters/FEColorMatrix.cpp \
platform/graphics/filters/FEComponentTransfer.cpp \
@@ -660,7 +666,9 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
platform/graphics/filters/FESpecularLighting.cpp \
platform/graphics/filters/FETile.cpp \
platform/graphics/filters/FETurbulence.cpp \
- platform/graphics/filters/LightSource.cpp
+ platform/graphics/filters/LightSource.cpp \
+ platform/graphics/filters/PointLightSource.cpp \
+ platform/graphics/filters/SpotLightSource.cpp
endif
LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
@@ -732,7 +740,9 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
\
platform/text/Base64.cpp \
platform/text/BidiContext.cpp \
+ platform/text/Hyphenation.cpp \
platform/text/LineEnding.cpp \
+ platform/text/LocalizedNumberNone.cpp \
platform/text/RegularExpression.cpp \
platform/text/SegmentedString.cpp \
platform/text/String.cpp \
@@ -742,6 +752,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
platform/text/TextCodecICU.cpp \
platform/text/TextCodecLatin1.cpp \
platform/text/TextCodecUTF16.cpp \
+ platform/text/TextCodecUTF8.cpp \
platform/text/TextCodecUserDefined.cpp \
platform/text/TextEncoding.cpp \
platform/text/TextEncodingDetectorICU.cpp \
@@ -790,6 +801,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
rendering/RenderBox.cpp \
rendering/RenderBoxModelObject.cpp \
rendering/RenderButton.cpp \
+ rendering/RenderCombineText.cpp \
rendering/RenderCounter.cpp \
rendering/RenderDetails.cpp \
rendering/RenderDetailsMarker.cpp \
@@ -968,7 +980,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
storage/IDBRequest.cpp \
storage/IDBSQLiteDatabase.cpp \
storage/IDBSuccessEvent.cpp \
- storage/IDBTimeoutEvent.cpp \
storage/IDBTransaction.cpp \
storage/LocalStorageTask.cpp \
storage/LocalStorageThread.cpp \
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index 95d8790..2873d8a 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -73,14 +73,13 @@ SET(WebCore_INCLUDE_DIRECTORIES
"${JAVASCRIPTCORE_DIR}/interpreter"
"${JAVASCRIPTCORE_DIR}/jit"
"${JAVASCRIPTCORE_DIR}/parser"
- "${JAVASCRIPTCORE_DIR}/pcre"
"${JAVASCRIPTCORE_DIR}/profiler"
"${JAVASCRIPTCORE_DIR}/runtime"
"${JAVASCRIPTCORE_DIR}/wtf"
"${JAVASCRIPTCORE_DIR}/wtf/unicode"
+ "${JAVASCRIPTCORE_DIR}/yarr"
"${DERIVED_SOURCES_DIR}"
"${CMAKE_SOURCE_DIR}"
- "${CMAKE_SOURCE_DIR}/Source"
"${CMAKE_BINARY_DIR}"
)
@@ -320,6 +319,7 @@ SET(WebCore_IDL_FILES
page/BarInfo.idl
page/Console.idl
page/Coordinates.idl
+ page/Crypto.idl
page/DOMSelection.idl
page/DOMWindow.idl
page/EventSource.idl
@@ -422,146 +422,6 @@ SET(WebCore_IDL_FILES
xml/XSLTProcessor.idl
)
-IF (ENABLE_SVG)
- LIST(APPEND WebCore_IDL_FILES
- svg/SVGAElement.idl
- svg/SVGAltGlyphElement.idl
- svg/SVGAngle.idl
- svg/SVGAnimateColorElement.idl
- svg/SVGAnimateElement.idl
- svg/SVGAnimateTransformElement.idl
- svg/SVGAnimatedAngle.idl
- svg/SVGAnimatedBoolean.idl
- svg/SVGAnimatedEnumeration.idl
- svg/SVGAnimatedInteger.idl
- svg/SVGAnimatedLength.idl
- svg/SVGAnimatedLengthList.idl
- svg/SVGAnimatedNumber.idl
- svg/SVGAnimatedNumberList.idl
- svg/SVGAnimatedPreserveAspectRatio.idl
- svg/SVGAnimatedRect.idl
- svg/SVGAnimatedString.idl
- svg/SVGAnimatedTransformList.idl
- svg/SVGAnimationElement.idl
- svg/SVGCircleElement.idl
- svg/SVGClipPathElement.idl
- svg/SVGColor.idl
- svg/SVGComponentTransferFunctionElement.idl
- svg/SVGCursorElement.idl
- svg/SVGDefsElement.idl
- svg/SVGDescElement.idl
- svg/SVGDocument.idl
- svg/SVGElement.idl
- svg/SVGElementInstance.idl
- svg/SVGElementInstanceList.idl
- svg/SVGEllipseElement.idl
- svg/SVGException.idl
- svg/SVGFEBlendElement.idl
- svg/SVGFEColorMatrixElement.idl
- svg/SVGFEComponentTransferElement.idl
- svg/SVGFECompositeElement.idl
- svg/SVGFEConvolveMatrixElement.idl
- svg/SVGFEDiffuseLightingElement.idl
- svg/SVGFEDisplacementMapElement.idl
- svg/SVGFEDistantLightElement.idl
- svg/SVGFEFloodElement.idl
- svg/SVGFEFuncAElement.idl
- svg/SVGFEFuncBElement.idl
- svg/SVGFEFuncGElement.idl
- svg/SVGFEFuncRElement.idl
- svg/SVGFEGaussianBlurElement.idl
- svg/SVGFEImageElement.idl
- svg/SVGFEMergeElement.idl
- svg/SVGFEMergeNodeElement.idl
- svg/SVGFEMorphologyElement.idl
- svg/SVGFEOffsetElement.idl
- svg/SVGFEPointLightElement.idl
- svg/SVGFESpecularLightingElement.idl
- svg/SVGFESpotLightElement.idl
- svg/SVGFETileElement.idl
- svg/SVGFETurbulenceElement.idl
- svg/SVGFilterElement.idl
- svg/SVGFontElement.idl
- svg/SVGFontFaceElement.idl
- svg/SVGFontFaceFormatElement.idl
- svg/SVGFontFaceNameElement.idl
- svg/SVGFontFaceSrcElement.idl
- svg/SVGFontFaceUriElement.idl
- svg/SVGForeignObjectElement.idl
- svg/SVGGElement.idl
- svg/SVGGlyphElement.idl
- svg/SVGGradientElement.idl
- svg/SVGHKernElement.idl
- svg/SVGImageElement.idl
- svg/SVGLength.idl
- svg/SVGLengthList.idl
- svg/SVGLineElement.idl
- svg/SVGLinearGradientElement.idl
- svg/SVGMarkerElement.idl
- svg/SVGMaskElement.idl
- svg/SVGMatrix.idl
- svg/SVGMetadataElement.idl
- svg/SVGMissingGlyphElement.idl
- svg/SVGNumber.idl
- svg/SVGNumberList.idl
- svg/SVGPaint.idl
- svg/SVGPathElement.idl
- svg/SVGPathSeg.idl
- svg/SVGPathSegArcAbs.idl
- svg/SVGPathSegArcRel.idl
- svg/SVGPathSegClosePath.idl
- svg/SVGPathSegCurvetoCubicAbs.idl
- svg/SVGPathSegCurvetoCubicRel.idl
- svg/SVGPathSegCurvetoCubicSmoothAbs.idl
- svg/SVGPathSegCurvetoCubicSmoothRel.idl
- svg/SVGPathSegCurvetoQuadraticAbs.idl
- svg/SVGPathSegCurvetoQuadraticRel.idl
- svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
- svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
- svg/SVGPathSegLinetoAbs.idl
- svg/SVGPathSegLinetoHorizontalAbs.idl
- svg/SVGPathSegLinetoHorizontalRel.idl
- svg/SVGPathSegLinetoRel.idl
- svg/SVGPathSegLinetoVerticalAbs.idl
- svg/SVGPathSegLinetoVerticalRel.idl
- svg/SVGPathSegList.idl
- svg/SVGPathSegMovetoAbs.idl
- svg/SVGPathSegMovetoRel.idl
- svg/SVGPatternElement.idl
- svg/SVGPoint.idl
- svg/SVGPointList.idl
- svg/SVGPolygonElement.idl
- svg/SVGPolylineElement.idl
- svg/SVGPreserveAspectRatio.idl
- svg/SVGRadialGradientElement.idl
- svg/SVGRect.idl
- svg/SVGRectElement.idl
- svg/SVGRenderingIntent.idl
- svg/SVGSVGElement.idl
- svg/SVGScriptElement.idl
- svg/SVGSetElement.idl
- svg/SVGStopElement.idl
- svg/SVGStringList.idl
- svg/SVGStyleElement.idl
- svg/SVGSwitchElement.idl
- svg/SVGSymbolElement.idl
- svg/SVGTRefElement.idl
- svg/SVGTSpanElement.idl
- svg/SVGTextContentElement.idl
- svg/SVGTextElement.idl
- svg/SVGTextPathElement.idl
- svg/SVGTextPositioningElement.idl
- svg/SVGTitleElement.idl
- svg/SVGTransform.idl
- svg/SVGTransformList.idl
- svg/SVGUnitTypes.idl
- svg/SVGUseElement.idl
- svg/SVGViewElement.idl
- svg/SVGVKernElement.idl
- svg/SVGZoomEvent.idl
- )
-ENDIF()
-
SET(WebCore_SOURCES
${DERIVED_SOURCES_DIR}/JSWebSocket.cpp
@@ -598,6 +458,8 @@ SET(WebCore_SOURCES
bindings/js/GCController.cpp
bindings/js/IDBBindingUtilities.cpp
bindings/js/JSAttrCustom.cpp
+ bindings/js/JSArrayBufferCustom.cpp
+ bindings/js/JSDataViewCustom.cpp
bindings/js/JSCDATASectionCustom.cpp
bindings/js/JSCSSFontFaceRuleCustom.cpp
bindings/js/JSCSSImportRuleCustom.cpp
@@ -646,6 +508,7 @@ SET(WebCore_SOURCES
bindings/js/JSEventTarget.cpp
bindings/js/JSExceptionBase.cpp
bindings/js/JSFileReaderCustom.cpp
+ bindings/js/JSFloat32ArrayCustom.cpp
bindings/js/JSGeolocationCustom.cpp
bindings/js/JSHTMLAllCollectionCustom.cpp
bindings/js/JSHTMLAppletElementCustom.cpp
@@ -670,12 +533,16 @@ SET(WebCore_SOURCES
bindings/js/JSIDBKeyCustom.cpp
bindings/js/JSImageConstructor.cpp
bindings/js/JSImageDataCustom.cpp
+ bindings/js/JSInt16ArrayCustom.cpp
+ bindings/js/JSInt32ArrayCustom.cpp
+ bindings/js/JSInt8ArrayCustom.cpp
bindings/js/JSInjectedScriptHostCustom.cpp
bindings/js/JSInspectorFrontendHostCustom.cpp
bindings/js/JSJavaScriptCallFrameCustom.cpp
bindings/js/JSLazyEventListener.cpp
bindings/js/JSLocationCustom.cpp
bindings/js/JSMainThreadExecState.cpp
+ bindings/js/JSMemoryInfoCustom.cpp
bindings/js/JSMessageChannelCustom.cpp
bindings/js/JSMessageEventCustom.cpp
bindings/js/JSMessagePortCustom.cpp
@@ -701,6 +568,9 @@ SET(WebCore_SOURCES
bindings/js/JSTouchCustom.cpp
bindings/js/JSTouchListCustom.cpp
bindings/js/JSTreeWalkerCustom.cpp
+ bindings/js/JSUint16ArrayCustom.cpp
+ bindings/js/JSUint32ArrayCustom.cpp
+ bindings/js/JSUint8ArrayCustom.cpp
bindings/js/JSWebKitCSSKeyframeRuleCustom.cpp
bindings/js/JSWebKitCSSKeyframesRuleCustom.cpp
bindings/js/JSWebKitCSSMatrixCustom.cpp
@@ -839,6 +709,7 @@ SET(WebCore_SOURCES
dom/DocumentMarkerController.cpp
dom/DocumentFragment.cpp
dom/DocumentParser.cpp
+ dom/DocumentOrderedMap.cpp
dom/DocumentType.cpp
dom/DOMImplementation.cpp
dom/DOMStringList.cpp
@@ -1123,12 +994,22 @@ SET(WebCore_SOURCES
html/ValidityState.cpp
html/WeekInputType.cpp
+ html/canvas/ArrayBuffer.cpp
+ html/canvas/ArrayBufferView.cpp
html/canvas/CanvasGradient.cpp
html/canvas/CanvasPattern.cpp
html/canvas/CanvasPixelArray.cpp
html/canvas/CanvasRenderingContext.cpp
html/canvas/CanvasRenderingContext2D.cpp
html/canvas/CanvasStyle.cpp
+ html/canvas/DataView.cpp
+ html/canvas/Float32Array.cpp
+ html/canvas/Int16Array.cpp
+ html/canvas/Int32Array.cpp
+ html/canvas/Int8Array.cpp
+ html/canvas/Uint16Array.cpp
+ html/canvas/Uint32Array.cpp
+ html/canvas/Uint8Array.cpp
html/parser/CSSPreloadScanner.cpp
html/parser/HTMLConstructionSite.cpp
@@ -1142,17 +1023,21 @@ SET(WebCore_SOURCES
html/parser/HTMLMetaCharsetParser.cpp
html/parser/HTMLPreloadScanner.cpp
html/parser/HTMLScriptRunner.cpp
+ html/parser/HTMLSourceTracker.cpp
html/parser/HTMLTokenizer.cpp
html/parser/HTMLTreeBuilder.cpp
html/parser/HTMLViewSourceParser.cpp
html/parser/TextDocumentParser.cpp
html/parser/TextViewSourceParser.cpp
+ html/parser/XSSFilter.cpp
+ html/shadow/MediaControls.cpp
html/shadow/SliderThumbElement.cpp
inspector/ConsoleMessage.cpp
inspector/InjectedScript.cpp
inspector/InjectedScriptHost.cpp
+ inspector/InspectorAgent.cpp
inspector/InspectorApplicationCacheAgent.cpp
inspector/InspectorBrowserDebuggerAgent.cpp
inspector/InspectorCSSAgent.cpp
@@ -1165,20 +1050,17 @@ SET(WebCore_SOURCES
inspector/InspectorDatabaseAgent.cpp
inspector/InspectorDatabaseResource.cpp
inspector/InspectorDebuggerAgent.cpp
- inspector/InspectorFileSystemAgent.cpp
inspector/InspectorFrontendClientLocal.cpp
inspector/InspectorFrontendHost.cpp
inspector/InspectorInstrumentation.cpp
inspector/InspectorProfilerAgent.cpp
inspector/InspectorResourceAgent.cpp
inspector/InspectorRuntimeAgent.cpp
- inspector/InspectorSettings.cpp
inspector/InspectorState.cpp
inspector/InspectorStyleSheet.cpp
inspector/InspectorTimelineAgent.cpp
inspector/InspectorValues.cpp
inspector/ScriptArguments.cpp
- inspector/ScriptBreakpoint.cpp
inspector/ScriptCallFrame.cpp
inspector/ScriptCallStack.cpp
inspector/TimelineRecordFactory.cpp
@@ -1246,7 +1128,9 @@ SET(WebCore_SOURCES
page/BarInfo.cpp
page/Chrome.cpp
page/Console.cpp
+ page/ContentSecurityPolicy.cpp
page/ContextMenuController.cpp
+ page/Crypto.cpp
page/DOMSelection.cpp
page/DOMTimer.cpp
page/DOMWindow.cpp
@@ -1284,7 +1168,6 @@ SET(WebCore_SOURCES
page/UserContentURLPattern.cpp
page/WindowFeatures.cpp
page/WorkerNavigator.cpp
- page/XSSAuditor.cpp
page/animation/AnimationBase.cpp
page/animation/AnimationController.cpp
@@ -1359,6 +1242,7 @@ SET(WebCore_SOURCES
platform/graphics/StringTruncator.cpp
platform/graphics/WidthIterator.cpp
+ platform/graphics/filters/DistantLightSource.cpp
platform/graphics/filters/FEBlend.cpp
platform/graphics/filters/FEColorMatrix.cpp
platform/graphics/filters/FEComponentTransfer.cpp
@@ -1377,6 +1261,8 @@ SET(WebCore_SOURCES
platform/graphics/filters/FETurbulence.cpp
platform/graphics/filters/FilterEffect.cpp
platform/graphics/filters/LightSource.cpp
+ platform/graphics/filters/PointLightSource.cpp
+ platform/graphics/filters/SpotLightSource.cpp
platform/graphics/filters/SourceAlpha.cpp
platform/graphics/filters/SourceGraphic.cpp
@@ -1427,6 +1313,7 @@ SET(WebCore_SOURCES
platform/text/Base64.cpp
platform/text/BidiContext.cpp
platform/text/LineEnding.cpp
+ platform/text/LocalizedNumberNone.cpp
platform/text/Hyphenation.cpp
platform/text/RegularExpression.cpp
platform/text/SegmentedString.cpp
@@ -1435,6 +1322,7 @@ SET(WebCore_SOURCES
platform/text/TextCodec.cpp
platform/text/TextCodecLatin1.cpp
platform/text/TextCodecUTF16.cpp
+ platform/text/TextCodecUTF8.cpp
platform/text/TextCodecUserDefined.cpp
platform/text/TextEncoding.cpp
platform/text/TextEncodingRegistry.cpp
@@ -1468,6 +1356,7 @@ SET(WebCore_SOURCES
rendering/RenderBox.cpp
rendering/RenderBoxModelObject.cpp
rendering/RenderButton.cpp
+ rendering/RenderCombineText.cpp
rendering/RenderCounter.cpp
rendering/RenderDataGrid.cpp
rendering/RenderDetails.cpp
@@ -1992,6 +1881,144 @@ IF (ENABLE_SVG)
svg/properties/SVGPathSegListPropertyTearOff.cpp
)
+ LIST(APPEND WebCore_IDL_FILES
+ svg/SVGAElement.idl
+ svg/SVGAltGlyphElement.idl
+ svg/SVGAngle.idl
+ svg/SVGAnimateColorElement.idl
+ svg/SVGAnimateElement.idl
+ svg/SVGAnimateTransformElement.idl
+ svg/SVGAnimatedAngle.idl
+ svg/SVGAnimatedBoolean.idl
+ svg/SVGAnimatedEnumeration.idl
+ svg/SVGAnimatedInteger.idl
+ svg/SVGAnimatedLength.idl
+ svg/SVGAnimatedLengthList.idl
+ svg/SVGAnimatedNumber.idl
+ svg/SVGAnimatedNumberList.idl
+ svg/SVGAnimatedPreserveAspectRatio.idl
+ svg/SVGAnimatedRect.idl
+ svg/SVGAnimatedString.idl
+ svg/SVGAnimatedTransformList.idl
+ svg/SVGAnimationElement.idl
+ svg/SVGCircleElement.idl
+ svg/SVGClipPathElement.idl
+ svg/SVGColor.idl
+ svg/SVGComponentTransferFunctionElement.idl
+ svg/SVGCursorElement.idl
+ svg/SVGDefsElement.idl
+ svg/SVGDescElement.idl
+ svg/SVGDocument.idl
+ svg/SVGElement.idl
+ svg/SVGElementInstance.idl
+ svg/SVGElementInstanceList.idl
+ svg/SVGEllipseElement.idl
+ svg/SVGException.idl
+ svg/SVGFEBlendElement.idl
+ svg/SVGFEColorMatrixElement.idl
+ svg/SVGFEComponentTransferElement.idl
+ svg/SVGFECompositeElement.idl
+ svg/SVGFEConvolveMatrixElement.idl
+ svg/SVGFEDiffuseLightingElement.idl
+ svg/SVGFEDisplacementMapElement.idl
+ svg/SVGFEDistantLightElement.idl
+ svg/SVGFEFloodElement.idl
+ svg/SVGFEFuncAElement.idl
+ svg/SVGFEFuncBElement.idl
+ svg/SVGFEFuncGElement.idl
+ svg/SVGFEFuncRElement.idl
+ svg/SVGFEGaussianBlurElement.idl
+ svg/SVGFEImageElement.idl
+ svg/SVGFEMergeElement.idl
+ svg/SVGFEMergeNodeElement.idl
+ svg/SVGFEMorphologyElement.idl
+ svg/SVGFEOffsetElement.idl
+ svg/SVGFEPointLightElement.idl
+ svg/SVGFESpecularLightingElement.idl
+ svg/SVGFESpotLightElement.idl
+ svg/SVGFETileElement.idl
+ svg/SVGFETurbulenceElement.idl
+ svg/SVGFilterElement.idl
+ svg/SVGFontElement.idl
+ svg/SVGFontFaceElement.idl
+ svg/SVGFontFaceFormatElement.idl
+ svg/SVGFontFaceNameElement.idl
+ svg/SVGFontFaceSrcElement.idl
+ svg/SVGFontFaceUriElement.idl
+ svg/SVGForeignObjectElement.idl
+ svg/SVGGElement.idl
+ svg/SVGGlyphElement.idl
+ svg/SVGGradientElement.idl
+ svg/SVGHKernElement.idl
+ svg/SVGImageElement.idl
+ svg/SVGLength.idl
+ svg/SVGLengthList.idl
+ svg/SVGLineElement.idl
+ svg/SVGLinearGradientElement.idl
+ svg/SVGMarkerElement.idl
+ svg/SVGMaskElement.idl
+ svg/SVGMatrix.idl
+ svg/SVGMetadataElement.idl
+ svg/SVGMissingGlyphElement.idl
+ svg/SVGNumber.idl
+ svg/SVGNumberList.idl
+ svg/SVGPaint.idl
+ svg/SVGPathElement.idl
+ svg/SVGPathSeg.idl
+ svg/SVGPathSegArcAbs.idl
+ svg/SVGPathSegArcRel.idl
+ svg/SVGPathSegClosePath.idl
+ svg/SVGPathSegCurvetoCubicAbs.idl
+ svg/SVGPathSegCurvetoCubicRel.idl
+ svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+ svg/SVGPathSegCurvetoCubicSmoothRel.idl
+ svg/SVGPathSegCurvetoQuadraticAbs.idl
+ svg/SVGPathSegCurvetoQuadraticRel.idl
+ svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+ svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+ svg/SVGPathSegLinetoAbs.idl
+ svg/SVGPathSegLinetoHorizontalAbs.idl
+ svg/SVGPathSegLinetoHorizontalRel.idl
+ svg/SVGPathSegLinetoRel.idl
+ svg/SVGPathSegLinetoVerticalAbs.idl
+ svg/SVGPathSegLinetoVerticalRel.idl
+ svg/SVGPathSegList.idl
+ svg/SVGPathSegMovetoAbs.idl
+ svg/SVGPathSegMovetoRel.idl
+ svg/SVGPatternElement.idl
+ svg/SVGPoint.idl
+ svg/SVGPointList.idl
+ svg/SVGPolygonElement.idl
+ svg/SVGPolylineElement.idl
+ svg/SVGPreserveAspectRatio.idl
+ svg/SVGRadialGradientElement.idl
+ svg/SVGRect.idl
+ svg/SVGRectElement.idl
+ svg/SVGRenderingIntent.idl
+ svg/SVGSVGElement.idl
+ svg/SVGScriptElement.idl
+ svg/SVGSetElement.idl
+ svg/SVGStopElement.idl
+ svg/SVGStringList.idl
+ svg/SVGStyleElement.idl
+ svg/SVGSwitchElement.idl
+ svg/SVGSymbolElement.idl
+ svg/SVGTRefElement.idl
+ svg/SVGTSpanElement.idl
+ svg/SVGTextContentElement.idl
+ svg/SVGTextElement.idl
+ svg/SVGTextPathElement.idl
+ svg/SVGTextPositioningElement.idl
+ svg/SVGTitleElement.idl
+ svg/SVGTransform.idl
+ svg/SVGTransformList.idl
+ svg/SVGUnitTypes.idl
+ svg/SVGUseElement.idl
+ svg/SVGViewElement.idl
+ svg/SVGVKernElement.idl
+ svg/SVGZoomEvent.idl
+ )
+
LIST(APPEND WebCore_CSS_PROPERTY_NAMES
${WEBCORE_DIR}/css/SVGCSSPropertyNames.in
)
@@ -2091,7 +2118,7 @@ FOREACH (_file ${WebCore_IDL_FILES})
ADD_CUSTOM_COMMAND(
OUTPUT ${DERIVED_SOURCES_DIR}/JS${_name}.cpp ${DERIVED_SOURCES_DIR}/JS${_name}.h
MAIN_DEPENDENCY ${_file}
- DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${_file}
+ DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/bindings/scripts/CodeGeneratorJS.pm ${_file}
COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator JS ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${WEBCORE_DIR}/${_file}
VERBATIM)
LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_DIR}/JS${_name}.cpp)
@@ -2102,7 +2129,7 @@ ENDFOREACH ()
ADD_CUSTOM_COMMAND(
OUTPUT ${DERIVED_SOURCES_DIR}/InspectorBackendDispatcher.cpp ${DERIVED_SOURCES_DIR}/InspectorBackendDispatcher.h ${DERIVED_SOURCES_DIR}/InspectorFrontend.cpp ${DERIVED_SOURCES_DIR}/InspectorFrontend.h
MAIN_DEPENDENCY inspector/Inspector.idl
- DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} inspector/Inspector.idl
+ DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/inspector/CodeGeneratorInspector.pm inspector/Inspector.idl
COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts -I${WEBCORE_DIR}/inspector ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator Inspector ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${WEBCORE_DIR}/inspector/Inspector.idl
VERBATIM)
LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_DIR}/InspectorBackendDispatcher.cpp ${DERIVED_SOURCES_DIR}/InspectorFrontend.cpp)
@@ -2247,6 +2274,7 @@ WEBKIT_WRAP_SOURCELIST(${WebCore_IDL_FILES} ${WebCore_SOURCES})
ADD_DEFINITIONS(-DBUILDING_WebCore)
INCLUDE_DIRECTORIES(${WebCore_INCLUDE_DIRECTORIES})
ADD_LIBRARY(${WebCore_LIBRARY_NAME} ${WebCore_LIBRARY_TYPE} ${WebCore_SOURCES})
+ADD_DEPENDENCIES(${WebCore_LIBRARY_NAME} ${JavaScriptCore_LIBRARY_NAME})
TARGET_LINK_LIBRARIES(${WebCore_LIBRARY_NAME} ${WebCore_LIBRARIES})
IF (WebCore_LINK_FLAGS)
diff --git a/Source/WebCore/CMakeListsEfl.txt b/Source/WebCore/CMakeListsEfl.txt
index 2ff8c4e..d9b387e 100644
--- a/Source/WebCore/CMakeListsEfl.txt
+++ b/Source/WebCore/CMakeListsEfl.txt
@@ -131,16 +131,6 @@ IF (WTF_USE_SOUP)
platform/network/soup/ResourceResponseSoup.cpp
platform/network/soup/SocketStreamHandleSoup.cpp
platform/network/soup/SoupURIUtils.cpp
-
- platform/network/soup/cache/soup-directory-input-stream.c
- platform/network/soup/cache/soup-http-input-stream.c
- platform/network/soup/cache/soup-request-data.c
- platform/network/soup/cache/soup-request-file.c
- platform/network/soup/cache/soup-request-http.c
- platform/network/soup/cache/soup-request.c
- platform/network/soup/cache/soup-requester.c
-
- platform/network/soup/cache/webkit/soup-cache.c
)
ENDIF ()
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index d523cdb..8078751 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,17180 @@
+2011-02-13 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ <rdar://problem/8995490> WebCoreAuthenticationClientAsChallengeSender doesn't implement some necessary methods.
+
+ * platform/network/mac/AuthenticationMac.mm:
+ (-[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:]):
+ (-[WebCoreAuthenticationClientAsChallengeSender rejectProtectionSpaceAndContinueWithChallenge:]):
+
+2011-02-13 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Andreas Kling.
+
+ Repeating gradients drawn incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=53502
+
+ The 'forward-fill' logic for repeating gradients used the wrong
+ starting stop index (0 rather than the original first index), which
+ resulted in incorrect gradients if backwards-fill had already been
+ applied.
+
+ Test: fast/gradients/css3-repeating-end-fill.html
+
+ * css/CSSGradientValue.cpp:
+ (WebCore::CSSGradientValue::addStops):
+
+2011-02-13 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ Unused variable result in RenderBlock::addOverflowFromFloats()
+ https://bugs.webkit.org/show_bug.cgi?id=54363
+
+ Remove the unused variable.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::addOverflowFromFloats):
+
+2011-02-13 Cameron Zwarich <zwarich@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ WebCore fails to build with Clang's -Woverloaded-virtual
+ https://bugs.webkit.org/show_bug.cgi?id=54367
+
+ * loader/PingLoader.h:
+ (WebCore::PingLoader::didReceiveData): Change the method signature to match the signature
+ in the base class.
+
+2011-02-13 Nico Weber <thakis@chromium.org>
+
+ Reviewed by Anders Carlsson.
+
+ RenderBR::width() tries but fails to override RenderText::width()
+ https://bugs.webkit.org/show_bug.cgi?id=54301
+
+ The superclass method's signature changed, e.g. in
+ http://trac.webkit.org/changeset/57215, but the subclass was not
+ updated.
+
+ * rendering/RenderBR.h:
+ (WebCore::RenderBR::width):
+
+2011-02-13 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ Canvas: 2d.fillStyle.parse.system.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=39168
+
+ Based on previous work by Julien Chaffraix <jchaffraix@codeaurora.org>
+ and Jan Erik Hanssen <jhanssen@sencha.com>
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseColor): Changed the function to better match our
+ early return policy. Also we now return false when we don't parse the color.
+ This is needed for createFromString to fallback to using parseSystemColor.
+
+ (WebCore::CSSParser::parseSystemColor): Made use of the RenderTheme to get
+ the system colors.
+
+ * css/CSSParser.h: Added the new parseSystemColor method.
+
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::CanvasRenderingContext2D::setStrokeColor): Pass the document to createFromString.
+ (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.
+
+ * html/canvas/CanvasStyle.cpp:
+ (WebCore::parseColor):
+ (WebCore::parseColorOrCurrentColor):
+ (WebCore::CanvasStyle::createFromString): Try to parse the color using CSSParser::parseColor
+ and fall back to parseSystemColor if it did not work.
+
+ * html/canvas/CanvasStyle.h: Added the new Document* parameter to createFromString.
+
+2011-02-13 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Add a compile-time option to completely disable WebArchive support.
+ https://bugs.webkit.org/show_bug.cgi?id=52712
+
+ Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.
+
+ ArchiveResource and ArchiveResourceCollection are notably still compiled in. They are used
+ in Safari for functionality such as "Save Image As" and Image copy & paste independent of
+ WebArchive support.
+
+ Ports Affected:
+ WebArchive support is currently enabled for all ports that define PLATFORM(CF) apart from Qt.
+ This patch preserves this behavior except that it also disables support in the Chromium port.
+
+ No behavior changes so no new tests.
+
+ * WebCore.gyp/WebCore.gyp: Don't compile LegacyWebArchive.cpp and friends.
+ * WebCore.pro: Don't compile ArchiveFactory.cpp in Qt port.
+ * loader/DocumentLoader.cpp: Surround WebArchive code with #ifdef.
+ (WebCore::DocumentLoader::commitLoad):
+ (WebCore::DocumentLoader::setupForReplaceByMIMEType):
+ (WebCore::DocumentLoader::archiveResourceForURL):
+ * loader/DocumentLoader.h:
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::loadURLIntoChildFrame):
+ (WebCore::FrameLoader::stopAllLoaders):
+ (WebCore::FrameLoader::finishedLoadingDocument):
+ * loader/FrameLoader.h:
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::start):
+ * loader/archive/ArchiveFactory.cpp: Remove #ifdef since feature is now enabled/disabled wholesale.
+ (WebCore::archiveMIMETypes):
+ * page/Settings.cpp:
+ * page/Settings.h:
+ * platform/MIMETypeRegistry.cpp:
+ (WebCore::initializeSupportedNonImageMimeTypes):
+
+2011-02-13 Aparna Nandyal <aparna.nand@wipro.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] QtWebKit does not properly handle D&D of a percent-encoded URL.
+ https://bugs.webkit.org/show_bug.cgi?id=53320
+
+ The encoding that was done is corrected in the fix.
+ Replaced the KURL encoding function with QUrl API.
+
+ * platform/qt/DragDataQt.cpp:
+ (WebCore::DragData::asURL):
+
+2011-02-13 Leo Yang <leo.yang.c@gmail.com>
+
+ Reviewed by Andreas Kling.
+
+ Unnecessary call of containingBlock() in RenderBoxModelObject::relativePositionOffsetX()
+ https://bugs.webkit.org/show_bug.cgi?id=54351
+
+ We were calling containingBlock() twice if the left is not auto. We only need to call it
+ once because we can use 'cb' variable in the following line.
+
+ No functionality change, no new tests.
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::relativePositionOffsetX):
+
+2011-02-13 Jarred Nicholls <jarred@sencha.com>
+
+ Reviewed by Simon Fraser.
+
+ getComputedStyle returns wrong value for margin-right
+ https://bugs.webkit.org/show_bug.cgi?id=13343
+
+ Matching IE, Firefox, and Opera behavior by returning the computed margin
+ values as specified, rather than the used/auto values (calculated via RenderBox).
+ Also CSS 2.1+ compliant by returning margin percentage as specified, if applicable.
+ Note: Firefox and Opera return calculated fixed lengths for percentage margins, IE
+ returns the specified percentage.
+
+ Tests: fast/css/getComputedStyle/getComputedStyle-margin-auto.html
+ fast/css/getComputedStyle/getComputedStyle-margin-length.html
+ fast/css/getComputedStyle/getComputedStyle-margin-percentage.html
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+
+2011-02-13 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Sam Weinig.
+
+ crypto.getRandomValues should throw TYPE_MISMATCH_ERR
+ https://bugs.webkit.org/show_bug.cgi?id=54346
+
+ As requested by Sam.
+
+ * page/Crypto.cpp:
+ (WebCore::Crypto::getRandomValues):
+
+2011-02-13 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54349
+ Inline some accessors in PrintContext
+
+ No change in behavior, so no tests.
+
+ * WebCore.exp.in:
+ * page/PrintContext.cpp:
+ * page/PrintContext.h:
+ (WebCore::PrintContext::pageCount):
+ (WebCore::PrintContext::pageRect):
+ Inline pageCount() and pageRect() to match pageRects().
+
+2011-02-13 Sam Weinig <sam@webkit.org>
+
+ Roll r78424 [Extra scrolling required when scrolling with a scroll wheel (Mighty Mouse)] back
+ in with fixes to make it work with render layers.
+
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
+ (WebCore::ScrollAnimatorMac::adjustScrollXPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::adjustScrollYPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::RenderLayer):
+ (WebCore::RenderLayer::contentsSize):
+ (WebCore::RenderLayer::visibleHeight):
+ (WebCore::RenderLayer::visibleWidth):
+ (WebCore::RenderLayer::updateScrollInfoAfterLayout):
+ * rendering/RenderLayer.h:
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::visibleHeight):
+ (WebCore::RenderListBox::visibleWidth):
+ * rendering/RenderListBox.h:
+
+2011-02-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dan Bernstein.
+
+ Some Scrollbar functions assume an attached ScrollableArea but can be called without one
+ https://bugs.webkit.org/show_bug.cgi?id=54262
+
+ Make sure that all calls to the scrollable area are null checked.
+
+ * platform/Scrollbar.cpp:
+ (WebCore::Scrollbar::autoscrollPressedPart):
+ (WebCore::Scrollbar::moveThumb):
+ (WebCore::Scrollbar::mouseMoved):
+
+2011-02-13 Sam Weinig <sam@webkit.org>
+
+ Roll out r78424. It broke a bunch of tests.
+
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
+ (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
+ * rendering/RenderLayer.cpp:
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::contentsSize):
+ * rendering/RenderListBox.cpp:
+ * rendering/RenderListBox.h:
+
+2011-02-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dan Bernstein.
+
+ WK2: Extra scrolling required when scrolling with a scroll wheel (Mighty Mouse)
+ <rdar://problem/8984760>
+
+ When going down the smooth scroll path, constrained scrolls (such as those from a
+ Mighty Mouse) were being correctly constrained at the ScrollView level, but the
+ duplicate values being stored by the animator were not being constrained correctly.
+
+ In order to implement the constraint at this level, more of the ScrollableArea's API
+ needed to be filled in for RenderLayer and RenderListBox.
+
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation): Call immediateScrollToPoint to stay
+ consistent and get the desired behavior.
+
+ (WebCore::ScrollAnimatorMac::adjustScrollXPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::adjustScrollYPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
+ (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
+ Ensure that the scroll animators view of the current scroll position is the
+ same as the scrollable areas by correctly clamping the value.
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::contentsSize): Correct implementation
+ to use the scroll size, not the visible size.
+ (WebCore::RenderLayer::visibleHeight):
+ (WebCore::RenderLayer::visibleWidth):
+ * rendering/RenderLayer.h:
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::visibleHeight):
+ (WebCore::RenderListBox::visibleWidth):
+ * rendering/RenderListBox.h:
+ Add implementations for visibleHeight/visibleWidth.
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Sam Weinig.
+
+ crypto.getRandomValues should support all integer array types
+ https://bugs.webkit.org/show_bug.cgi?id=54342
+
+ As discussed on whatwg, we should support all the integer array types.
+
+ Test: security/crypto-random-values-types.html
+
+ * page/Crypto.cpp:
+ (WebCore::Crypto::getRandomValues):
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Use /dev/urandom as the OSRandomSource on OS(DARWIN)
+ https://bugs.webkit.org/show_bug.cgi?id=54279
+
+ Update the ifdef. OS(UNIX) includes OS(DARWIN), so this change is
+ should be a NOP.
+
+ * config.h:
+
+2011-02-11 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Allow turning off multisampling through web preference settings
+ https://bugs.webkit.org/show_bug.cgi?id=54321
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::create): Disable multisampling in WebGL if web reference says so.
+ * page/Settings.cpp: Add a flag for multisampling preference.
+ (WebCore::Settings::Settings):
+ (WebCore::Settings::setOpenGLMultisamplingEnabled):
+ * page/Settings.h: Ditto.
+ (WebCore::Settings::openGLMultisamplingEnabled):
+
+2011-02-12 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Tony Chang.
+
+ Deploy EditingStyle in applyBlockStyle and applyInlineStyle
+ https://bugs.webkit.org/show_bug.cgi?id=53911
+
+ Deployed EditingStyle in ApplyStyleCommand::applyBlockStyle and ApplyStyleCommand::applyInlineStyle.
+ Extracted EditingStyle::extractAndRemoveTextDirection from applyInlineStyle.
+ Also added propertiesToInclude to the argument list of EditingStyle's constructor that takes Node*
+ so that splitAncestorsWithUnicodeBidi can call EditingStyle::textDirection to obtain the text direction.
+
+ No new tests are added since this is a refactoring.
+
+ * editing/ApplyStyleCommand.cpp:
+ (WebCore::ApplyStyleCommand::doApply): Passes EditingStyle* to applyBlockStyle and applyInlineStyle.
+ (WebCore::ApplyStyleCommand::applyBlockStyle): Takes EditingStyle*.
+ (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Changed the type of allowedDirection
+ from int to WritingDirection. Uses EditingStyle's textDirection to obtain the writing direction.
+ (WebCore::ApplyStyleCommand::applyInlineStyle): Takes EditingStyle*.
+ (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Allows style to be null; exit early instead.
+ (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Asserts that style is not null.
+ (WebCore::ApplyStyleCommand::removeInlineStyle): Allows style to be null.
+ * editing/ApplyStyleCommand.h: Includes WritingDirection.h; prototype changes.
+ * editing/EditingStyle.cpp:
+ (WebCore::EditingStyle::EditingStyle): Added PropertiesToInclude to the argument.
+ (WebCore::EditingStyle::init): Supports PropertiesToInclude.
+ (WebCore::EditingStyle::extractAndRemoveTextDirection): Extracted from applyInlineStyle.
+ * editing/EditingStyle.h:
+ (WebCore::EditingStyle::create): Supports PropertiesToInclude.
+
+2011-02-12 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Implement IDBObjectStore::clear
+ https://bugs.webkit.org/show_bug.cgi?id=54193
+
+ Test: storage/indexeddb/objectstore-clear.html
+
+ * storage/IDBObjectStore.cpp:
+ (WebCore::IDBObjectStore::clear):
+ * storage/IDBObjectStore.h:
+ * storage/IDBObjectStore.idl:
+ * storage/IDBObjectStoreBackendImpl.cpp:
+ (WebCore::IDBObjectStoreBackendImpl::clear):
+ (WebCore::doDelete):
+ (WebCore::IDBObjectStoreBackendImpl::clearInternal):
+ * storage/IDBObjectStoreBackendImpl.h:
+ * storage/IDBObjectStoreBackendInterface.h:
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Another attempt to fix the EFL build. Looks like we're missing one
+ more file.
+
+ * CMakeLists.txt:
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Attempt to fix the EFL build. Apparently the CMake build had no
+ concept of ArrayBuffers.
+
+ * CMakeLists.txt:
+
+2011-02-12 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed build fix.
+
+ * dom/Range.cpp:
+ (WebCore::lengthOfContentsInNode): Replaced static const unsigned LengthOfContentsInNode.
+ (WebCore::Range::processContents):
+ (WebCore::Range::processContentsBetweenOffsets):
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ CPP files belong in SOURCES not in HEADERS. There are more errors like
+ this for other disabled features, but I'm not fixing them in this
+ patch.
+
+ * WebCore.pro:
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Apparently lines in .pro files need to be \-terminated.
+
+ * WebCore.pro:
+
+2011-02-11 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Extract a function to process contents for one node from Range::processContents
+ https://bugs.webkit.org/show_bug.cgi?id=54282
+
+ Extracted Range::processContentsBetweenOffsets, which process contents of a node
+ between two offsets. This function is used for the simple case where the start
+ and the end containers are of the same node, and to process start and end containers
+ in the complex case.
+
+ When the function takes a non-null fragment (simple case), it appends the processed
+ contents to the fragment; character data and processing instruction's contents are copied
+ between the offsets, and descendants are copied for node of other types (not node itself).
+
+ When the fragment is null (complex case), the function copies contents of character data,
+ processing instruction, and node of other types (including node itself).
+
+ No new tests are added since this is a refactoring.
+
+ * dom/Range.cpp:
+ (WebCore::highestAncestorUnderCommonRoot): Added.
+ (WebCore::Range::processContents): Calls highestAncestorUnderCommonRoot and
+ processContentsBetweenOffsets.
+ (WebCore::Range::processContentsBetweenOffsets): Added.
+ * dom/Range.h:
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Attempt to fix the Qt Windows build.
+
+ * WebCore.pro:
+
+2011-02-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Kenneth Russell.
+
+ Enable ArrayBuffers by default
+ https://bugs.webkit.org/show_bug.cgi?id=54310
+
+ As discussed on webkit-dev, ArrayBuffers are used by a bunch of
+ different APIs, implemented by Firefox, and appear to be stable.
+ Keeping them conditional is a large mantainance burden than it's worth.
+
+ * DerivedSources.cpp:
+ * WebCore.vcproj/WebCore.vcproj:
+ * bindings/generic/RuntimeEnabledFeatures.h:
+ (WebCore::RuntimeEnabledFeatures::setWebGLEnabled):
+ * bindings/js/JSArrayBufferCustom.cpp:
+ * bindings/js/JSBindingsAllInOne.cpp:
+ * bindings/js/JSDOMWindowCustom.cpp:
+ * bindings/js/JSDataViewCustom.cpp:
+ * bindings/js/JSFloat32ArrayCustom.cpp:
+ * bindings/js/JSInt16ArrayCustom.cpp:
+ * bindings/js/JSInt32ArrayCustom.cpp:
+ * bindings/js/JSInt8ArrayCustom.cpp:
+ * bindings/js/JSUint16ArrayCustom.cpp:
+ * bindings/js/JSUint32ArrayCustom.cpp:
+ * bindings/js/JSUint8ArrayCustom.cpp:
+ * bindings/v8/custom/V8ArrayBufferCustom.cpp:
+ * bindings/v8/custom/V8ArrayBufferViewCustom.h:
+ * bindings/v8/custom/V8DataViewCustom.cpp:
+ * bindings/v8/custom/V8Float32ArrayCustom.cpp:
+ * bindings/v8/custom/V8Int16ArrayCustom.cpp:
+ * bindings/v8/custom/V8Int32ArrayCustom.cpp:
+ * bindings/v8/custom/V8Int8ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
+ * html/canvas/ArrayBuffer.cpp:
+ * html/canvas/ArrayBuffer.idl:
+ * html/canvas/ArrayBufferView.cpp:
+ * html/canvas/ArrayBufferView.idl:
+ * html/canvas/DataView.cpp:
+ * html/canvas/DataView.idl:
+ * html/canvas/Float32Array.cpp:
+ * html/canvas/Float32Array.idl:
+ * html/canvas/Int16Array.cpp:
+ * html/canvas/Int16Array.idl:
+ * html/canvas/Int32Array.cpp:
+ * html/canvas/Int32Array.idl:
+ * html/canvas/Int8Array.cpp:
+ * html/canvas/Int8Array.idl:
+ * html/canvas/Uint16Array.cpp:
+ * html/canvas/Uint16Array.idl:
+ * html/canvas/Uint32Array.cpp:
+ * html/canvas/Uint32Array.idl:
+ * html/canvas/Uint8Array.cpp:
+ * html/canvas/Uint8Array.idl:
+ * page/Crypto.cpp:
+ (WebCore::Crypto::getRandomValues):
+ * page/Crypto.h:
+ * page/Crypto.idl:
+ * page/DOMWindow.idl:
+ * workers/WorkerContext.idl:
+
+2011-02-11 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Background image positioning on RTL text
+ https://bugs.webkit.org/show_bug.cgi?id=32862
+
+ When the style of InlineFlowBox is right-to-left, the strips should be rearranged in reverse order.
+
+ Tests: fast/inline/inline-box-background-long-image.html
+ fast/inline/inline-box-background-repeat-x.html
+ fast/inline/inline-box-background-repeat-y.html
+ fast/inline/inline-box-background.html
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::paintFillLayer):
+
+2011-02-11 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r78044.
+ http://trac.webkit.org/changeset/78044
+ https://bugs.webkit.org/show_bug.cgi?id=54318
+
+ Broke Safari extensions (Requested by eseidel on #webkit).
+
+ * platform/KURL.cpp:
+ (WebCore::KURL::parse):
+
+2011-02-11 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8976456> Scrollbars for overflow
+ areas never appear for WKScrollbarPainter scrollers
+
+ Call ScrollableArea::didAddVerticalScrollbar() and
+ ScrollableArea::willRemoveVerticalScrollbar() when
+ appropriate for RenderLayers.
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::setHasHorizontalScrollbar):
+ (WebCore::RenderLayer::setHasVerticalScrollbar):
+
+2011-02-11 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ KURL should remove default port numbers when cannonicalizing urls (to match every other browser)
+ https://bugs.webkit.org/show_bug.cgi?id=54090
+
+ * platform/KURL.cpp:
+ (WebCore::isDefaultPortForScheme):
+ (WebCore::KURL::parse):
+
+2011-02-11 Mike Reed <reed@google.com>
+
+ Reviewed by James Robinson.
+
+ Need makeContextCurrent() called in prepareForSoftwareDraw(), in the case that skia's backend
+ is the gpu. This matches the pattern in GraphicsContext3DOpenGL.cpp
+
+ No new tests. All existing canvas layouttests exercise this code path
+
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
+
+2011-02-11 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Check for empty scheme before accessing URLSchemeMaps in SchemeRegistry
+ https://bugs.webkit.org/show_bug.cgi?id=54304
+
+ This avoids potential crashes in HashMap, as WTF's StringHash doesn't
+ accept empty Strings.
+
+ * platform/SchemeRegistry.cpp:
+ (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess):
+ (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
+ (WebCore::SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument):
+
+2011-02-11 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [fileapi] Add support for filesystem: URI handling
+ https://bugs.webkit.org/show_bug.cgi?id=53529
+
+ There are two major parts to this patch: one is to add an
+ implementation of Entry.toURI to the FileSystem API.
+ The other is to implement security origin checking for this
+ new scheme.
+
+ All changes are guarded by the FILE_SYSTEM feature. An accompanying
+ Chromium change, to support loading of filesystem: URIs, has recently
+ been submitted as Chromium r74082.
+
+ Spec:
+ http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#methods-2
+ Proposed URI format, and discussion of security origin issues:
+ http://lists.w3.org/Archives/Public/public-webapps/2011JanMar/0218.html
+
+ Tests: fast/filesystem/directory-entry-to-uri.html
+ fast/filesystem/file-entry-to-uri.html
+ fast/filesystem/filesystem-uri-origin.html
+ http/tests/security/filesystem-iframe-from-remote.html
+
+ * fileapi/Entry.cpp:
+ (WebCore::Entry::toURI):
+ * fileapi/Entry.h:
+ * fileapi/Entry.idl:
+ - Added toURI method to the IDL, omitting the MIME type argument
+ specified in the spec as it will soon be removed.
+ * page/SecurityOrigin.cpp:
+ (WebCore::SecurityOrigin::SecurityOrigin):
+ - crack the filesystem: URI to get at the origin of the site
+ (WebCore::SecurityOrigin::canDisplay):
+ - canDisplay for filesystem: URIs is equivalent to canRequest
+ * platform/AsyncFileSystem.cpp:
+ (WebCore::AsyncFileSystem::create):
+ (WebCore::AsyncFileSystem::openFileSystem):
+ * platform/AsyncFileSystem.h:
+ (WebCore::AsyncFileSystem::type):
+ - Exposed filesystem type to allow toURI to use it as part of the
+ path.
+ (WebCore::AsyncFileSystem::AsyncFileSystem):
+ * platform/SchemeRegistry.cpp:
+ (WebCore::canDisplayOnlyIfCanRequestSchemes):
+ (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest):
+ (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
+ - Generalized canDisplayOnlyIfCanRequest as it applies to both
+ filesystem: and blob: URIs.
+ * platform/SchemeRegistry.h:
+
+2011-02-11 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for <rdar://problem/8961061> CrashTracer: [USER]
+ 1 crash at com.apple.WebCore:
+ -[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:] + 62
+
+ Must check for null _animator.
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterControllerDelegate scrollAnimatorDestroyed]):
+ (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
+ (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+
+2011-02-11 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Throw exception when AudioContext's createBuffer() fails to properly decode audio file data
+ https://bugs.webkit.org/show_bug.cgi?id=54158
+
+ No new tests since audio API is not yet implemented.
+
+ * bindings/js/JSAudioContextCustom.cpp:
+ (WebCore::JSAudioContextConstructor::constructJSAudioContext):
+ (WebCore::JSAudioContext::createBuffer):
+ * bindings/v8/custom/V8AudioContextCustom.cpp:
+ (WebCore::V8AudioContext::createBufferCallback):
+ * platform/audio/chromium/AudioBusChromium.cpp:
+ (WebCore::createBusFromInMemoryAudioFile):
+ * webaudio/AudioContext.idl:
+
+2011-02-11 Mike Reed <reed@google.com>
+
+ Reviewed by James Robinson.
+
+ Fix toDataURL() to use device->readPixels() if need be, rather than always dereferencing
+ the address returned by getPixels() (as the device may not be backed by a CPU bitmap)
+ https://bugs.webkit.org/show_bug.cgi?id=54224
+
+ No new tests. Existing canvas tests exercise this...
+ fast/canvas/script-tests/canvas-createPattern-fillRect-shadow.html
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::ImageBuffer::toDataURL):
+
+2011-02-11 Andrew Wason <rectalogic@rectalogic.com>
+
+ Reviewed by David Levin.
+
+ Files missing ENABLE_VIDEO #ifdef
+ https://bugs.webkit.org/show_bug.cgi?id=53390
+
+ No new tests.
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ * html/canvas/WebGLRenderingContext.h:
+ * html/canvas/WebGLRenderingContext.idl:
+ Wrap methods and declarations that use HTMLVideoElement
+ with #if ENABLE(VIDEO).
+
+2011-02-11 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r78331.
+ http://trac.webkit.org/changeset/78331
+ https://bugs.webkit.org/show_bug.cgi?id=54295
+
+ This patch broke 11 tests in GTK bots (Requested by svillar on
+ #webkit).
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_get_name):
+ (webkit_accessible_detach):
+
+2011-02-11 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Xan Lopez.
+
+ [GDOM] Video element needs proper wrapping
+ https://bugs.webkit.org/show_bug.cgi?id=54231
+
+ Use the same strategy as the one used for the audio tag to wrap
+ video as well. No layout tests because this only adds API.
+
+ * bindings/gobject/GNUmakefile.am:
+ * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
+ (WebKit::createVideoWrapper):
+ (WebKit::createHTMLElementWrapper):
+
+2011-02-11 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ SVGStyledElement::fillAttributeToPropertyTypeMap triggers a clang warning (-Woverloaded-virtual)
+ https://bugs.webkit.org/show_bug.cgi?id=54259
+
+ Renamed fillAttributeToPropertyTypeMap with passed map to fillPassedAttributeToPropertyTypeMap to
+ avoid overloading a virtual function.
+
+ No change of functionality. Just fixing a build warning, so no new tests.
+
+ * svg/SVGAElement.cpp:
+ (WebCore::SVGAElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGAltGlyphElement.cpp:
+ (WebCore::SVGAltGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGCircleElement.cpp:
+ (WebCore::SVGCircleElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGClipPathElement.cpp:
+ (WebCore::SVGClipPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGEllipseElement.cpp:
+ (WebCore::SVGEllipseElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEBlendElement.cpp:
+ (WebCore::SVGFEBlendElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEColorMatrixElement.cpp:
+ (WebCore::SVGFEColorMatrixElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEComponentTransferElement.cpp:
+ (WebCore::SVGFEComponentTransferElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFECompositeElement.cpp:
+ (WebCore::SVGFECompositeElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEConvolveMatrixElement.cpp:
+ (WebCore::SVGFEConvolveMatrixElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEDiffuseLightingElement.cpp:
+ (WebCore::SVGFEDiffuseLightingElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEDisplacementMapElement.cpp:
+ (WebCore::SVGFEDisplacementMapElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEFloodElement.cpp:
+ (WebCore::SVGFEFloodElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEGaussianBlurElement.cpp:
+ (WebCore::SVGFEGaussianBlurElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEImageElement.cpp:
+ (WebCore::SVGFEImageElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEMergeElement.cpp:
+ (WebCore::SVGFEMergeElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEMorphologyElement.cpp:
+ (WebCore::SVGFEMorphologyElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEOffsetElement.cpp:
+ (WebCore::SVGFEOffsetElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFESpecularLightingElement.cpp:
+ (WebCore::SVGFESpecularLightingElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFETileElement.cpp:
+ (WebCore::SVGFETileElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFETurbulenceElement.cpp:
+ (WebCore::SVGFETurbulenceElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFilterElement.cpp:
+ (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+ (WebCore::SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGFilterPrimitiveStandardAttributes.h:
+ * svg/SVGFontElement.cpp:
+ (WebCore::SVGFontElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGForeignObjectElement.cpp:
+ (WebCore::SVGForeignObjectElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGGlyphElement.cpp:
+ (WebCore::SVGGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGGradientElement.cpp:
+ (WebCore::SVGGradientElement::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGGradientElement.h:
+ * svg/SVGImageElement.cpp:
+ (WebCore::SVGImageElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGLineElement.cpp:
+ (WebCore::SVGLineElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGLinearGradientElement.cpp:
+ (WebCore::SVGLinearGradientElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMarkerElement.cpp:
+ (WebCore::SVGMarkerElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMaskElement.cpp:
+ (WebCore::SVGMaskElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMissingGlyphElement.cpp:
+ (WebCore::SVGMissingGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPathElement.cpp:
+ (WebCore::SVGPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPatternElement.cpp:
+ (WebCore::SVGPatternElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPolyElement.cpp:
+ (WebCore::SVGPolyElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGRadialGradientElement.cpp:
+ (WebCore::SVGRadialGradientElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGRectElement.cpp:
+ (WebCore::SVGRectElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGStopElement.cpp:
+ (WebCore::SVGStopElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGStyledElement.cpp:
+ (WebCore::SVGStyledElement::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGStyledElement.h:
+ * svg/SVGStyledTransformableElement.cpp:
+ (WebCore::SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGStyledTransformableElement.h:
+ * svg/SVGSwitchElement.cpp:
+ (WebCore::SVGSwitchElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGSymbolElement.cpp:
+ (WebCore::SVGSymbolElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTRefElement.cpp:
+ (WebCore::SVGTRefElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTSpanElement.cpp:
+ (WebCore::SVGTSpanElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGTextContentElement.h:
+ * svg/SVGTextElement.cpp:
+ (WebCore::SVGTextElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextPathElement.cpp:
+ (WebCore::SVGTextPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextPositioningElement.cpp:
+ (WebCore::SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap):
+ * svg/SVGTextPositioningElement.h:
+ * svg/SVGTitleElement.cpp:
+ (WebCore::SVGTitleElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGViewElement.cpp:
+ (WebCore::SVGViewElement::fillAttributeToPropertyTypeMap):
+
+2011-02-11 Andrey Adaikin <aandrey@google.com>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [REGRESSION] click on error message in console doesn't scroll into view
+ https://bugs.webkit.org/show_bug.cgi?id=54089
+
+ * inspector/front-end/Drawer.js:
+ (WebInspector.Drawer.prototype.show.animationFinished):
+ (WebInspector.Drawer.prototype.show):
+ (WebInspector.Drawer.prototype.hide):
+ (WebInspector.Drawer.prototype.resize):
+ (WebInspector.Drawer.prototype.immediatelyFinishAnimation):
+ (WebInspector.Drawer.prototype._cancelAnimationIfNeeded):
+ (WebInspector.Drawer.prototype._animateDrawerHeight.animationFinished):
+ (WebInspector.Drawer.prototype._animateDrawerHeight):
+ (WebInspector.Drawer.prototype._statusBarDragging):
+ * inspector/front-end/inspector.js:
+ (WebInspector.animateStyle):
+ (WebInspector.animateStyle.forceComplete):
+ (WebInspector.animateStyle.cancel):
+ (WebInspector.showSourceLine):
+
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Make DocumentWriter a member of DocumentLoader
+ instead of FrameLoader.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ Refactor, no new tests.
+
+ * bindings/ScriptControllerBase.cpp:
+ (WebCore::ScriptController::executeIfJavaScriptURL):
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ (WebCore::Document::explicitClose):
+ (WebCore::Document::lastModified):
+ (WebCore::Document::initSecurityContext):
+ (WebCore::Document::updateURLForPushOrReplaceState):
+ * dom/Document.h:
+ (WebCore::Document::setDocumentLoader):
+ (WebCore::Document::loader):
+ * html/MediaDocument.cpp:
+ (WebCore::MediaDocument::replaceMediaElementTimerFired):
+ * html/PluginDocument.cpp:
+ (WebCore::PluginDocumentParser::createDocumentStructure):
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::DocumentLoader):
+ (WebCore::DocumentLoader::finishedLoading):
+ (WebCore::DocumentLoader::commitData):
+ (WebCore::DocumentLoader::setupForReplaceByMIMEType):
+ (WebCore::DocumentLoader::setFrame):
+ * loader/DocumentLoader.h:
+ (WebCore::DocumentLoader::writer):
+ * loader/DocumentWriter.cpp:
+ (WebCore::DocumentWriter::begin):
+ * loader/DocumentWriter.h:
+ (WebCore::DocumentWriter::setFrame):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::FrameLoader):
+ (WebCore::FrameLoader::init):
+ (WebCore::FrameLoader::clear):
+ (WebCore::FrameLoader::receivedFirstData):
+ (WebCore::FrameLoader::transitionToCommitted):
+ (WebCore::FrameLoader::open):
+ (WebCore::FrameLoader::finishedLoadingDocument):
+ (WebCore::FrameLoader::addExtraFieldsToRequest):
+ * loader/FrameLoader.h:
+ (WebCore::FrameLoader::notifier):
+ * svg/graphics/SVGImage.cpp:
+ (WebCore::SVGImage::dataChanged):
+
+2011-02-10 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: make InspectorAgent own sub-agents, align agent creation/deletion routines.
+ https://bugs.webkit.org/show_bug.cgi?id=54227
+
+ * dom/Document.cpp:
+ (WebCore::Document::finishedParsing):
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
+ (WebCore::InspectorAgent::setFrontend):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
+ (WebCore::InspectorAgent::didCommitLoad):
+ (WebCore::InspectorAgent::domContentLoadedEventFired):
+ (WebCore::InspectorAgent::loadEventFired):
+ (WebCore::InspectorAgent::startTimelineProfiler):
+ (WebCore::InspectorAgent::stopTimelineProfiler):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorCSSAgent.cpp:
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::InspectorDOMAgent):
+ (WebCore::InspectorDOMAgent::startListening):
+ (WebCore::InspectorDOMAgent::stopListening):
+ (WebCore::InspectorDOMAgent::mainDOMContentLoaded):
+ (WebCore::InspectorDOMAgent::loadEventFired):
+ * inspector/InspectorDOMAgent.h:
+ (WebCore::InspectorDOMAgent::create):
+ * inspector/InspectorDOMStorageAgent.cpp:
+ (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
+ * inspector/InspectorDOMStorageAgent.h:
+ (WebCore::InspectorDOMStorageAgent::create):
+ * inspector/InspectorDOMStorageResource.h:
+ * inspector/InspectorDatabaseAgent.cpp:
+ (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
+ (WebCore::InspectorDatabaseAgent::executeSQL):
+ (WebCore::InspectorDatabaseAgent::selectDatabase):
+ (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
+ * inspector/InspectorDatabaseAgent.h:
+ (WebCore::InspectorDatabaseAgent::FrontendProvider::create):
+ (WebCore::InspectorDatabaseAgent::FrontendProvider::~FrontendProvider):
+ (WebCore::InspectorDatabaseAgent::FrontendProvider::frontend):
+ (WebCore::InspectorDatabaseAgent::FrontendProvider::clearFrontend):
+ (WebCore::InspectorDatabaseAgent::FrontendProvider::FrontendProvider):
+ (WebCore::InspectorDatabaseAgent::create):
+ * inspector/InspectorDatabaseResource.cpp:
+ (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
+ (WebCore::InspectorDatabaseResource::bind):
+ * inspector/InspectorDatabaseResource.h:
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
+ (WebCore::InspectorInstrumentation::loadEventFiredImpl):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
+ (WebCore::InspectorInstrumentation::loadEventFired):
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ (WebCore::InspectorState::mute):
+ (WebCore::InspectorState::updateCookie):
+ * inspector/InspectorState.h:
+ (WebCore::InspectorState::~InspectorState):
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::restore):
+ (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
+ (WebCore::InspectorTimelineAgent::didCommitLoad):
+ (WebCore::InspectorTimelineAgent::setFrontend):
+ (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
+ * inspector/InspectorTimelineAgent.h:
+ (WebCore::InspectorTimelineAgent::create):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::dispatchLoadEvent):
+
+2011-02-11 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: command line API $0 regressed.
+ https://bugs.webkit.org/show_bug.cgi?id=54283
+
+ * inspector/InjectedScriptSource.js:
+
+2011-02-11 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][S60] Vertical borders of buttons and frames are misaligned
+ https://bugs.webkit.org/show_bug.cgi?id=51169
+
+ Force anti-aliasing for lines and rects when using OpenVG backend on Symbian.
+ OpenVG cannot guarantee rendering to be on pixel in floating point co-ordinates
+ without anti-aliasing. Patch idea by Laszlo Agocs.
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
+
+2011-02-11 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] events missing when a document is (re)loaded
+ https://bugs.webkit.org/show_bug.cgi?id=25831
+
+ Make sure webArea returns a proper name and that a signal
+ 'state-change::defunct' is emitted when detaching the wrapper.
+
+ Test: platform/gtk/accessibility/document-reload-events.html
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_get_name): Returns the current document's title
+ as fallback mechanism for webArea objects.
+ (webkit_accessible_detach): Emit 'state-change::defunct' function
+ as soon as the wrapper is detached from the related core object.
+
+2011-02-11 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: command line's API inspect() is broken.
+ https://bugs.webkit.org/show_bug.cgi?id=54275
+
+ Test: inspector/command-line-api.html
+
+ * inspector/InjectedScriptSource.js:
+
+2011-02-11 Adam Barth <abarth@webkit.org>
+
+ Turns out window.crypto is supposed to be readonly.
+
+ * page/DOMWindow.idl:
+
+2011-02-11 Adam Barth <abarth@webkit.org>
+
+ Actually add Crypto.cpp to the Windows build. I'm terrible.
+
+ * WebCore.vcproj/WebCore.vcproj:
+
+2011-02-11 Adam Barth <abarth@webkit.org>
+
+ Attempt to fix the Windows build. Apparently we don't support
+ conditional attributes on functions. This patch makes the whole Crypto
+ interface conditional on ArrayBuffer support.
+
+ * page/DOMWindow.idl:
+ * page/Crypto.cpp:
+ * page/Crypto.h:
+ * page/Crypto.idl:
+
+2011-02-10 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ Enable ancestor identifier filtering for tree building
+ https://bugs.webkit.org/show_bug.cgi?id=54241
+
+ Call CSSStyleSelector::push/popParent() during tree building too, fix up the parent
+ element stack as needed.
+
+ This roughly halves the remaining time in style matching over a typical page load.
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::pushParentStackFrame):
+ (WebCore::CSSStyleSelector::popParentStackFrame):
+ (WebCore::CSSStyleSelector::pushParent):
+ (WebCore::CSSStyleSelector::popParent):
+ * css/CSSStyleSelector.h:
+ (WebCore::CSSStyleSelector::ParentStackFrame::ParentStackFrame):
+ * dom/Document.h:
+ (WebCore::Document::styleSelectorIfExists):
+ * dom/Element.cpp:
+ (WebCore::Element::beginParsingChildren):
+ (WebCore::Element::finishParsingChildren):
+ * dom/Element.h:
+
+2011-02-10 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ WebKit should have a cryptographic RNG
+ https://bugs.webkit.org/show_bug.cgi?id=22049
+
+ Add crypto.getRandomValues. Yes, all these diffs are required to
+ expose a single function to the DOM.
+
+ Test: security/crypto-random-values.html
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * DerivedSources.cpp:
+ * DerivedSources.make:
+ * ForwardingHeaders/wtf/CryptographicallyRandomNumber.h: Added.
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pri:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSDOMWindowCustom.cpp:
+ * bindings/v8/custom/V8DOMWindowCustom.cpp:
+ * config.h:
+ * page/Crypto.cpp: Added.
+ (WebCore::Crypto::Crypto):
+ (WebCore::Crypto::getRandomValues):
+ * page/Crypto.h: Added.
+ (WebCore::Crypto::create):
+ * page/Crypto.idl: Added.
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::clear):
+ (WebCore::DOMWindow::crypto):
+ * page/DOMWindow.h:
+ (WebCore::DOMWindow::optionalCrypto):
+ * page/DOMWindow.idl:
+
+2011-02-11 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Unreviewed build fix.
+
+ [GTK] Build break with 2.18.3
+ https://bugs.webkit.org/show_bug.cgi?id=54057
+
+ * platform/gtk/ScrollbarThemeGtk2.cpp: Include GtkVersioning.h
+
+2011-02-11 Cosmin Truta <ctruta@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Templatize KURLGooglePrivate::init
+ https://bugs.webkit.org/show_bug.cgi?id=53749
+
+ No new tests. Refactoring.
+
+ * platform/KURLGoogle.cpp:
+ (WebCore::KURLGooglePrivate::init):
+ * platform/KURLGooglePrivate.h:
+
+2011-02-10 Andy Estes <aestes@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Convert ContainerNode::firstElementChild() to a free function.
+ https://bugs.webkit.org/show_bug.cgi?id=54269
+
+ No new tests. No change in behavior.
+
+ It seemed incorrect to have a method on ContainerNode that had the
+ concept of an Element but couldn't return an Element*, but a method on
+ Element could not be called by holders of ContainerNodes or other
+ non-Element ContainerNode subclasses. A free function can both return
+ an Element* and be called by anyone with a ContainerNode*.
+
+ * dom/ContainerNode.h:
+ (WebCore::ContainerNode::lastChild):
+ (WebCore::Node::lastChild):
+ * dom/Document.cpp:
+ (WebCore::Document::cacheDocumentElement):
+ * dom/Element.cpp:
+ (WebCore::Element::firstElementChild):
+ * dom/Element.h:
+ (WebCore::firstElementChild):
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
+
+2011-02-10 Mads Ager <ager@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ [V8] Don't crash on exception getting event handler function
+ https://bugs.webkit.org/show_bug.cgi?id=54216
+
+ Check for exceptions when attempting to get the handleEvent property
+ of an event-handler object.
+
+ Test: fast/dom/exception-getting-event-handler.html
+
+ * bindings/v8/V8EventListener.cpp:
+ (WebCore::V8EventListener::getListenerFunction):
+
+2011-02-10 Naoki Takano <takano.naoki@gmail.com>
+
+ Reviewed by James Robinson.
+
+ [Chromium] Layout Test canvas/philip/tests/2d.composite.globalAlpha.fill.html with --accelerated-2d-canvas.
+ https://bugs.webkit.org/show_bug.cgi?id=53857
+
+ globalAlpha is not applied to fillPath() and fillRect().
+
+ Test: fast/canvas/2d.composite.globalAlpha.fillPath.html and canvas/philip/tests/2d.composite.globalAlpha.fill.html with --accelerated-2d-canvas.
+
+ * platform/graphics/chromium/GLES2Canvas.cpp:
+ (WebCore::GLES2Canvas::State::applyAlpha): Append a new function to apply global alpha when fillRect() and fillPath() are called.
+ (WebCore::GLES2Canvas::fillRect): Global alpha is applied to m_fillColor.
+ (WebCore::GLES2Canvas::fillPath): Global alpha is applied to m_fillColor.
+
+2011-02-10 Andy Estes <aestes@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Remove an unneeded argument from HTMLDocument::create().
+ https://bugs.webkit.org/show_bug.cgi?id=54268
+
+ Now that HTMLTreeBuilder no longer uses a dummy HTMLDocument for
+ fragment parsing, there isn't a need to explicitly specify a baseURL
+ when constructing an HTMLDocument. We can remove the unneeded argument.
+
+ Also fix some style issues in Document.h and HTMLDocument.h caught by
+ check-webkit-style.
+
+ No new tests. No change in behavior.
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ * dom/Document.h:
+ * html/HTMLDocument.cpp:
+ (WebCore::HTMLDocument::HTMLDocument):
+ * html/HTMLDocument.h:
+ (WebCore::HTMLDocument::create):
+
+2011-02-10 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Cached JavaScript Parser Data Being Left in Memory Cache
+ https://bugs.webkit.org/show_bug.cgi?id=54245
+
+ Added logic in CachedScript to clear SourceProviderCache data in
+ destroyDecodedData(). Added and changed CachedScript timeout to
+ act similar to CachedImage. Changed didAddClient to call super
+ class method instead of duplicating the logic in the derived
+ classes.
+
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::didAddClient):
+ * loader/cache/CachedScript.cpp:
+ (WebCore::CachedScript::didAddClient):
+ (WebCore::CachedScript::allClientsRemoved):
+ (WebCore::CachedScript::script):
+ (WebCore::CachedScript::destroyDecodedData):
+ * loader/cache/CachedScript.h:
+
+2011-02-10 Cosmin Truta <ctruta@chromium.org>
+
+ Reviewed by David Levin.
+
+ Fix style in KURLGooglePrivate
+ https://bugs.webkit.org/show_bug.cgi?id=54228
+
+ Replace occurrences of NULL with 0, '\0' or null (as applicable),
+ to appease check-webkit-style.
+
+ No new tests. This is a style fix.
+
+ * platform/KURLGoogle.cpp:
+ * platform/KURLGooglePrivate.h:
+
+2011-02-10 Andy Estes <aestes@apple.com>
+
+ Reviewed by Darin Adler.
+
+ HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
+ https://bugs.webkit.org/show_bug.cgi?id=48719
+
+ The HTML5 fragment parsing algorithm specifies that a new Document
+ should be created to serve as the temporary parent of fragment nodes
+ during parsing. Document creation is expensive and accounts for ~38% of
+ the Peacekeeper DOM performance regression. Avoid the cost of creating
+ a dummy document by using the already-created DocumentFragment as the
+ root node during fragment parsing.
+
+ With this patch, the regression in Peacekeeper from Safari 5.0.3 to ToT
+ is ~24%.
+
+ Test: fast/parser/fragment-parser-doctype.html
+
+ * dom/ContainerNode.h:
+ (WebCore::ContainerNode::firstElementChild): Add a method that returns
+ the first element-typed child from a ContainerNode.
+ * dom/Document.cpp:
+ (WebCore::Document::cacheDocumentElement): Call
+ ContainerNode::firstElementChild() to retrieve and cache the document
+ element.
+ * html/parser/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::HTMLConstructionSite): Initialize the
+ root ContainerNode.
+ (WebCore::HTMLConstructionSite::detach): Clear the reference to the
+ root ContainerNode.
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
+ Attach the new element to the root ContainerNode.
+ (WebCore::HTMLConstructionSite::insertDoctype): Ditto.
+ (WebCore::HTMLConstructionSite::insertCommentOnDocument): Ditto.
+ * html/parser/HTMLConstructionSite.h: Store a pointer to a
+ ContainerNode that will be used as the root node for document parsing.
+ This node might or might not be the same as m_document.
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Initialize the
+ HTMLConstructionSite with the correct root ContainerNode based on
+ whether or not we're parsing a fragment.
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
+ Remove m_dummyDocumentForFragmentParsing.
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished): If the
+ fragment has a context element, store only the children of the root
+ element (HTML5 Section 10.4, Step 7).
+ * html/parser/HTMLTreeBuilder.h:
+
+2011-02-10 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Speculative fix for <rdar://problem/8971107> CrashTracer: 6 crashes
+ in WebProcess at com.apple.AppKit:
+ -[NSAnimation(NSInternal) _advanceTimeWithTimer:] + 154
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPartAnimation scrollAnimatorDestroyed]):
+
+2011-02-09 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ IndexedDB event targets need to ensure their wrappers aren't garbage collected
+ https://bugs.webkit.org/show_bug.cgi?id=54144
+
+ hasActivityPending should return true as long as it's possible that we'll
+ fire more event listeners on our event targets. It is still possible for
+ user generated events to run into problems, but I'm not sure how to address
+ that yet (or how big of a deal it is).
+
+ There's really no way to test this deterministically. Testing by hand makes
+ it seem like this patch works as expected though.
+
+ * storage/IDBCursorBackendImpl.cpp:
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::IDBDatabase):
+ (WebCore::IDBDatabase::~IDBDatabase):
+ (WebCore::IDBDatabase::hasPendingActivity):
+ (WebCore::IDBDatabase::stop):
+ * storage/IDBDatabase.h:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::IDBRequest):
+ (WebCore::IDBRequest::hasPendingActivity):
+ (WebCore::IDBRequest::dispatchEvent):
+ (WebCore::IDBRequest::enqueueEvent):
+ * storage/IDBRequest.h:
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::finished):
+ (WebCore::IDBTransaction::hasPendingActivity):
+ (WebCore::IDBTransaction::dispatchEvent):
+ (WebCore::IDBTransaction::canSuspend):
+ (WebCore::IDBTransaction::contextDestroyed):
+ (WebCore::IDBTransaction::enqueueEvent):
+ * storage/IDBTransaction.h:
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] create pkg-config files for mingw
+ https://bugs.webkit.org/show_bug.cgi?id=54238
+
+ (mingw is mostly the same as unix)
+
+ This change was applied in the Qt repository (qt/src/3rdparty/webkit),
+ so we should do the same here in QtWebKit.
+
+ Patch by Mark Brand <mabrand@mabrand.nl>, reviewed (there) by
+ Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
+ 45fe2dddc3a0677b9ec9fce09f07cd4129e37afa
+
+ * WebCore.pro:
+
+2011-02-10 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Antti Koivisto.
+
+ RenderStyle: Remove duplicate comparison of InheritedFlags::_text_transform
+ https://bugs.webkit.org/show_bug.cgi?id=54246
+
+ * rendering/style/RenderStyle.h:
+
+2011-02-10 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ SVG animation avoid unnecessary adjust for currentColor
+ https://bugs.webkit.org/show_bug.cgi?id=54243
+
+ At the moment we try to adjust every animation value for currentColor - independent of the animation type.
+ Since the value is a string and the target element may needs to get called by getElementById, this could
+ be an expensive and unnecessary operation. Also after we adjust for currentColor, we save the result back
+ as a string and parse it to Color afterwards again.
+ With the patch we just adjust an animation value, if we use color animation. The color won't get saved and
+ parsed as a string again.
+
+ No change of functionality, no new tests.
+
+ * svg/SVGAnimateElement.cpp:
+ (WebCore::adjustForCurrentColor):
+ (WebCore::SVGAnimateElement::calculateFromAndToValues):
+ (WebCore::SVGAnimateElement::calculateFromAndByValues):
+ * svg/SVGAnimationElement.cpp:
+ (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
+ (WebCore::SVGAnimationElement::startedActiveInterval):
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove the use of deprecated qFindChildren()
+ https://bugs.webkit.org/show_bug.cgi?id=54232
+
+ This was applied on the Qt repository and affects QtWebKit there.
+ (13833beb641289c45faed337848d37280195aadc)
+
+ The side effect of this change is that we won't be able to build
+ QtWebKit with MSVC 6, as it doesn't support member template functions
+ (not sure if that's possible today anyway).
+
+ Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
+ review reported as being from the mailing list.
+
+ The changes are result of the following commands:
+
+ git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(this,* */f\\1(/'" qFindChild
+ git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(&\([^\(),]*\),* */\\2.f\\1(/'" qFindChild
+ git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*()\),* */\\2->f\\1(/'" qFindChild
+ git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*\):\([^\(),]*\),* */(\\2:\\3)->f\\1(/'" qFindChild
+ git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*\),* */\\2->f\\1(/'" qFindChild
+
+ * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
+ (WebCore::MediaPlayerPrivatePhonon::MediaPlayerPrivatePhonon):
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Rename build target from "embedded" to "qpa"
+ https://bugs.webkit.org/show_bug.cgi?id=54233
+
+ This flag is used by Qt's configure script to enable a QPA build
+ ("QPA is a window system agnostic implementation of Qt" --
+ previously known as lighthouse).
+
+ On the Qt repository, this was changed by two commits:
+
+ 13a0b4935900093607f2b3b7688e1452d22770fd
+ (from embedded to embedded_lite)
+
+ 9716e12e0f5590ebc23ad9fb7ba75c6a3c5aadab
+ (from embedded_lite to qpa)
+
+ * WebCore.pro:
+
+2011-02-10 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Incorporate algorithm for processing paths into GPU-renderable triangle meshes
+ https://bugs.webkit.org/show_bug.cgi?id=45521
+
+ Adding an implementation of Loop and Blinn's GPU accelerated path
+ rendering algorithm from GPU Gems 3. This implementation pays
+ particular attention to the efficiency of the curve subdivision
+ phase needed for correct rendering. It utilizes the OpenGL utility
+ library tessellator for triangulation of the interior of the
+ shape. The regions handled by Loop and Blinn's algorithm are
+ handled by the local triangulator previously incorporated.
+
+ No tests yet; pixel tests will eventually be used to verify this
+ algorithm and prevent regressions.
+
+ * platform/graphics/gpu/LoopBlinnPathProcessor.cpp: Added.
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::Segment):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::setup):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::kind):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::getPoint):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::next):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::prev):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::setNext):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::setPrev):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::contour):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::subdivide):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::boundingBox):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::numCrossingsForXRay):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::numberOfTriangles):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::getTriangle):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::numberOfInteriorVertices):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::getInteriorVertex):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::markedForSubdivision):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::setMarkedForSubdivision):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::toString):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::computeBoundingBox):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::Contour):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::add):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::subdivide):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::begin):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::end):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::isOrientedCounterClockwise):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::setIsOrientedCounterClockwise):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::boundingBox):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::fillSide):
+ (WebCore::LoopBlinnPathProcessorImplementation::Contour::setFillSide):
+ (WebCore::LoopBlinnPathProcessorImplementation::Segment::triangulate):
+ (WebCore::LoopBlinnPathProcessor::LoopBlinnPathProcessor):
+ (WebCore::LoopBlinnPathProcessor::~LoopBlinnPathProcessor):
+ (WebCore::LoopBlinnPathProcessor::process):
+ (WebCore::LoopBlinnPathProcessor::buildContours):
+ (WebCore::LoopBlinnPathProcessor::allSegmentsOverlappingY):
+ (WebCore::LoopBlinnPathProcessor::determineSidesToFill):
+ (WebCore::LoopBlinnPathProcessor::determineOrientation):
+ (WebCore::SweepData::SweepEvent::SweepEvent):
+ (WebCore::SweepData::SweepEvent::setup):
+ (WebCore::SweepData::SweepEvent::x):
+ (WebCore::SweepData::SweepEvent::entry):
+ (WebCore::SweepData::SweepEvent::interval):
+ (WebCore::SweepData::SweepEvent::operator<):
+ (WebCore::SweepData::trianglesOverlap):
+ (WebCore::LoopBlinnPathProcessor::subdivideCurves):
+ (WebCore::LoopBlinnPathProcessor::conditionallySubdivide):
+ (WebCore::LoopBlinnPathProcessor::subdivideCurvesSlow):
+ (WebCore::TessellationState::vertexCallback):
+ (WebCore::TessellationState::combineCallback):
+ (WebCore::TessellationState::edgeFlagCallback):
+ (WebCore::LoopBlinnPathProcessor::tessellateInterior):
+ * platform/graphics/gpu/LoopBlinnPathProcessor.h: Added.
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove the use of deprecated qVariant*
+ https://bugs.webkit.org/show_bug.cgi?id=54229
+
+ This was applied on the Qt repository and affects QtWebKit there.
+ (633f3f45e5420663cf4ceadea79e62fea44cd2eb)
+
+ The side effect of this change is that we won't be able to build
+ QtWebKit with MSVC 6, as it doesn't support member template functions
+ (not sure if it's possible today anyway).
+
+ Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
+ review reported as being from the mailing list.
+
+ The changes are result of the following commands:
+
+ git grep -O"sed -i 's/qVariantValue</qvariant_cast</'" qVariantValue
+ git grep -O"sed -i 's/qVariantSetValue(\([^&*\(),]*\), */\\1.setValue(/'" qVariantSetValue
+ git grep -O"sed -i 's/qVariantSetValue *<\([^>]*\)> *(\([^&*\(),]*\), */\\2.setValue<\\1>(/'" qVariantSetValue
+ git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
+ git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*([^&*\(),]*)\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
+ git grep -O"sed -i 's/qVariantFromValue\( *[(<]\)/QVariant::fromValue\\1/'" qVariantFromValue
+
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::convertValueToQVariant):
+ * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
+ (WebCore::MediaPlayerPrivateQt::commitLoad):
+
+2011-02-10 Nico Weber <thakis@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fix clang warning "WebCore::HTMLAreaElement::getRect' hides overloaded virtual function [-Woverloaded-virtual]"
+ https://bugs.webkit.org/show_bug.cgi?id=54221
+
+ The method name conflicts with ContainerNode::getRect() so rename it to
+ computeRect(). Rename getPath() to computePath() for consistency as
+ well.
+
+ No intended functionality change, covered by existing tests.
+
+ * accessibility/AccessibilityImageMapLink.cpp:
+ (WebCore::AccessibilityImageMapLink::elementRect):
+ * html/HTMLAreaElement.cpp:
+ (WebCore::HTMLAreaElement::computePath):
+ (WebCore::HTMLAreaElement::computeRect):
+ * html/HTMLAreaElement.h:
+ * page/SpatialNavigation.cpp:
+ (WebCore::virtualRectForAreaElementAndDirection):
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::paintFocusRing):
+
+2011-02-10 Alexis Menard <alexis.menard@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Default focus ring is too wide
+ https://bugs.webkit.org/show_bug.cgi?id=51854
+
+ We now respect the outline property and html.css defines the outline of the focus
+ ring to be 5px. This is propagated until GraphicsContext::drawFocusRing which uses
+ it as the pen size. We should ignore the size and keep a default one. I also
+ reverted the SolidLine to DotLine so that the selection looks nicer. Chromium Skia,
+ CG Win, Haiku, WinCE ports also ignore the width.
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::drawFocusRingForPath):
+ (WebCore::GraphicsContext::drawFocusRing):
+
+2011-02-10 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [Soup] ResourceHandleSoup does not ever call didSendData for file uploads
+ https://bugs.webkit.org/show_bug.cgi?id=52090
+
+ Call didSendData as body data is uploaded to the server. This is necessary
+ for XHR upload events to function properly.
+
+ * platform/network/ResourceHandleInternal.h:
+ (WebCore::ResourceHandleInternal::ResourceHandleInternal): Add two new members.
+ One to track the total amount of body data and one to track the total amount of
+ body data sent so far.
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::wroteBodyDataCallback): Added.
+ (WebCore::addFormElementsToSoupMessage): Split this out into a helper function.
+ Will now now sum the total amount of body data.
+ (WebCore::startHttp): Attach a wrote-body-data signal handler.
+
+2011-02-10 Bill Budge <bbudge@chromium.org>
+
+ Reviewed by David Levin.
+
+ Add fields to ResourceRequest and ResourceResponse in preparation for adding CORS support to AssociatedURLLoader.
+ https://bugs.webkit.org/show_bug.cgi?id=53925
+
+ * platform/network/chromium/ResourceRequest.cpp:
+ (WebCore::ResourceRequest::doPlatformCopyData):
+ (WebCore::ResourceRequest::doPlatformAdopt):
+ * platform/network/chromium/ResourceRequest.h:
+ (WebCore::ResourceRequest::ResourceRequest):
+ (WebCore::ResourceRequest::downloadToFile):
+ (WebCore::ResourceRequest::setDownloadToFile):
+ * platform/network/chromium/ResourceResponse.cpp:
+ (WebCore::ResourceResponse::doPlatformCopyData):
+ (WebCore::ResourceResponse::doPlatformAdopt):
+ * platform/network/chromium/ResourceResponse.h:
+ (WebCore::ResourceResponse::downloadFilePath):
+ (WebCore::ResourceResponse::setDownloadFilePath):
+
+2011-02-10 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVGAnimateElement needs information about the animated attribute type
+ https://bugs.webkit.org/show_bug.cgi?id=53442
+
+ For animations, we need to know the SVG property type for a XML attribute. A global static mapping between
+ attribute name and a type is not possible, since one attribute name can be bound to different property types:
+ x can be a SVGNumberList, a SVGNumber or a SVGLength. So we have to ask every target element, if it supports
+ the animated attribute and of which type it is. Just for CSS properties we can share an explicit mapping between
+ the name and the type. This is done in a static map in SVGStyledElement. All other mappings are stored in local static
+ HashMaps for all SVG elements with animated properties. These maps get filled once with the fillAttributeToPropertyTypeMap function
+ that needs to be included in every SVG element. The function is not virtual in base classes for performance reasons.
+
+ No change of functionality, so no new test cases.
+
+ * svg/SVGAElement.cpp:
+ (WebCore::SVGAElement::attributeToPropertyTypeMap):
+ (WebCore::SVGAElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGAElement.h:
+ * svg/SVGAltGlyphElement.cpp:
+ (WebCore::SVGAltGlyphElement::attributeToPropertyTypeMap):
+ (WebCore::SVGAltGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGAltGlyphElement.h:
+ * svg/SVGAnimateElement.cpp:
+ (WebCore::SVGAnimateElement::determinePropertyType):
+ * svg/SVGCircleElement.cpp:
+ (WebCore::SVGCircleElement::attributeToPropertyTypeMap):
+ (WebCore::SVGCircleElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGCircleElement.h:
+ * svg/SVGClipPathElement.cpp:
+ (WebCore::SVGClipPathElement::attributeToPropertyTypeMap):
+ (WebCore::SVGClipPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGClipPathElement.h:
+ * svg/SVGComponentTransferFunctionElement.cpp:
+ (WebCore::SVGComponentTransferFunctionElement::attributeToPropertyTypeMap):
+ (WebCore::SVGComponentTransferFunctionElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGComponentTransferFunctionElement.h:
+ * svg/SVGCursorElement.cpp:
+ (WebCore::SVGCursorElement::attributeToPropertyTypeMap):
+ (WebCore::SVGCursorElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGCursorElement.h:
+ * svg/SVGElement.cpp:
+ (WebCore::SVGElement::attributeToPropertyTypeMap):
+ (WebCore::SVGElement::animatedPropertyTypeForAttribute):
+ * svg/SVGElement.h:
+ (WebCore::SVGElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGEllipseElement.cpp:
+ (WebCore::SVGEllipseElement::attributeToPropertyTypeMap):
+ (WebCore::SVGEllipseElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGEllipseElement.h:
+ * svg/SVGFEBlendElement.cpp:
+ (WebCore::SVGFEBlendElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEBlendElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEBlendElement.h:
+ * svg/SVGFEColorMatrixElement.cpp:
+ (WebCore::SVGFEColorMatrixElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEColorMatrixElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEColorMatrixElement.h:
+ * svg/SVGFEComponentTransferElement.cpp:
+ (WebCore::SVGFEComponentTransferElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEComponentTransferElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEComponentTransferElement.h:
+ * svg/SVGFECompositeElement.cpp:
+ (WebCore::SVGFECompositeElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFECompositeElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFECompositeElement.h:
+ * svg/SVGFEConvolveMatrixElement.cpp:
+ (WebCore::SVGFEConvolveMatrixElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEConvolveMatrixElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEConvolveMatrixElement.h:
+ * svg/SVGFEDiffuseLightingElement.cpp:
+ (WebCore::SVGFEDiffuseLightingElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEDiffuseLightingElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEDiffuseLightingElement.h:
+ * svg/SVGFEDisplacementMapElement.cpp:
+ (WebCore::SVGFEDisplacementMapElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEDisplacementMapElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEDisplacementMapElement.h:
+ * svg/SVGFEFloodElement.cpp:
+ (WebCore::SVGFEFloodElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEFloodElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEFloodElement.h:
+ * svg/SVGFEGaussianBlurElement.cpp:
+ (WebCore::SVGFEGaussianBlurElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEGaussianBlurElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEGaussianBlurElement.h:
+ * svg/SVGFEImageElement.cpp:
+ (WebCore::SVGFEImageElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEImageElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEImageElement.h:
+ * svg/SVGFELightElement.cpp:
+ (WebCore::SVGFELightElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFELightElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFELightElement.h:
+ * svg/SVGFEMergeElement.cpp:
+ (WebCore::SVGFEMergeElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEMergeElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEMergeElement.h:
+ * svg/SVGFEMergeNodeElement.cpp:
+ (WebCore::SVGFEMergeNodeElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEMergeNodeElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEMergeNodeElement.h:
+ * svg/SVGFEMorphologyElement.cpp:
+ (WebCore::SVGFEMorphologyElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEMorphologyElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEMorphologyElement.h:
+ * svg/SVGFEOffsetElement.cpp:
+ (WebCore::SVGFEOffsetElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFEOffsetElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFEOffsetElement.h:
+ * svg/SVGFESpecularLightingElement.cpp:
+ (WebCore::SVGFESpecularLightingElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFESpecularLightingElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFESpecularLightingElement.h:
+ * svg/SVGFETileElement.cpp:
+ (WebCore::SVGFETileElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFETileElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFETileElement.h:
+ * svg/SVGFETurbulenceElement.cpp:
+ (WebCore::SVGFETurbulenceElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFETurbulenceElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFETurbulenceElement.h:
+ * svg/SVGFilterElement.cpp:
+ (WebCore::SVGFilterElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFilterElement.h:
+ * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+ (WebCore::SVGFilterPrimitiveStandardAttributes::fillAttributeToPropertyTypeMap):
+ * svg/SVGFilterPrimitiveStandardAttributes.h:
+ * svg/SVGFontElement.cpp:
+ (WebCore::SVGFontElement::attributeToPropertyTypeMap):
+ (WebCore::SVGFontElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGFontElement.h:
+ (WebCore::SVGFontElement::rendererIsNeeded):
+ * svg/SVGForeignObjectElement.cpp:
+ (WebCore::SVGForeignObjectElement::attributeToPropertyTypeMap):
+ (WebCore::SVGForeignObjectElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGForeignObjectElement.h:
+ * svg/SVGGlyphElement.cpp:
+ (WebCore::SVGGlyphElement::attributeToPropertyTypeMap):
+ (WebCore::SVGGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGGlyphElement.h:
+ * svg/SVGGradientElement.cpp:
+ (WebCore::SVGGradientElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGGradientElement.h:
+ * svg/SVGImageElement.cpp:
+ (WebCore::SVGImageElement::attributeToPropertyTypeMap):
+ (WebCore::SVGImageElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGImageElement.h:
+ * svg/SVGLineElement.cpp:
+ (WebCore::SVGLineElement::attributeToPropertyTypeMap):
+ (WebCore::SVGLineElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGLineElement.h:
+ * svg/SVGLinearGradientElement.cpp:
+ (WebCore::SVGLinearGradientElement::attributeToPropertyTypeMap):
+ (WebCore::SVGLinearGradientElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGLinearGradientElement.h:
+ * svg/SVGMPathElement.cpp:
+ (WebCore::SVGMPathElement::attributeToPropertyTypeMap):
+ (WebCore::SVGMPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMPathElement.h:
+ * svg/SVGMarkerElement.cpp:
+ (WebCore::SVGMarkerElement::attributeToPropertyTypeMap):
+ (WebCore::SVGMarkerElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMarkerElement.h:
+ * svg/SVGMaskElement.cpp:
+ (WebCore::SVGMaskElement::attributeToPropertyTypeMap):
+ (WebCore::SVGMaskElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMaskElement.h:
+ * svg/SVGMissingGlyphElement.cpp:
+ (WebCore::SVGMissingGlyphElement::attributeToPropertyTypeMap):
+ (WebCore::SVGMissingGlyphElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGMissingGlyphElement.h:
+ * svg/SVGPathElement.cpp:
+ (WebCore::SVGPathElement::attributeToPropertyTypeMap):
+ (WebCore::SVGPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPathElement.h:
+ * svg/SVGPatternElement.cpp:
+ (WebCore::SVGPatternElement::attributeToPropertyTypeMap):
+ (WebCore::SVGPatternElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPatternElement.h:
+ * svg/SVGPolyElement.cpp:
+ (WebCore::SVGPolyElement::attributeToPropertyTypeMap):
+ (WebCore::SVGPolyElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGPolyElement.h:
+ * svg/SVGRadialGradientElement.cpp:
+ (WebCore::SVGRadialGradientElement::attributeToPropertyTypeMap):
+ (WebCore::SVGRadialGradientElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGRadialGradientElement.h:
+ * svg/SVGRectElement.cpp:
+ (WebCore::SVGRectElement::attributeToPropertyTypeMap):
+ (WebCore::SVGRectElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGRectElement.h:
+ * svg/SVGSVGElement.cpp:
+ (WebCore::SVGSVGElement::attributeToPropertyTypeMap):
+ (WebCore::SVGSVGElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGSVGElement.h:
+ * svg/SVGScriptElement.cpp:
+ (WebCore::SVGScriptElement::attributeToPropertyTypeMap):
+ (WebCore::SVGScriptElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGScriptElement.h:
+ * svg/SVGStopElement.cpp:
+ (WebCore::SVGStopElement::attributeToPropertyTypeMap):
+ (WebCore::SVGStopElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGStopElement.h:
+ * svg/SVGStyledElement.cpp:
+ (WebCore::cssPropertyToTypeMap):
+ (WebCore::SVGStyledElement::animatedPropertyTypeForCSSProperty):
+ (WebCore::SVGStyledElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGStyledElement.h:
+ * svg/SVGStyledTransformableElement.cpp:
+ (WebCore::SVGStyledTransformableElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGStyledTransformableElement.h:
+ * svg/SVGSwitchElement.cpp:
+ (WebCore::SVGSwitchElement::attributeToPropertyTypeMap):
+ (WebCore::SVGSwitchElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGSwitchElement.h:
+ * svg/SVGSymbolElement.cpp:
+ (WebCore::SVGSymbolElement::attributeToPropertyTypeMap):
+ (WebCore::SVGSymbolElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGSymbolElement.h:
+ * svg/SVGTRefElement.cpp:
+ (WebCore::SVGTRefElement::attributeToPropertyTypeMap):
+ (WebCore::SVGTRefElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTRefElement.h:
+ * svg/SVGTSpanElement.cpp:
+ (WebCore::SVGTSpanElement::attributeToPropertyTypeMap):
+ (WebCore::SVGTSpanElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTSpanElement.h:
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextContentElement.h:
+ * svg/SVGTextElement.cpp:
+ (WebCore::SVGTextElement::attributeToPropertyTypeMap):
+ (WebCore::SVGTextElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextElement.h:
+ * svg/SVGTextPathElement.cpp:
+ (WebCore::SVGTextPathElement::attributeToPropertyTypeMap):
+ (WebCore::SVGTextPathElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextPathElement.h:
+ * svg/SVGTextPositioningElement.cpp:
+ (WebCore::SVGTextPositioningElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTextPositioningElement.h:
+ * svg/SVGTitleElement.cpp:
+ (WebCore::SVGTitleElement::attributeToPropertyTypeMap):
+ (WebCore::SVGTitleElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGTitleElement.h:
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::attributeToPropertyTypeMap):
+ (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGUseElement.h:
+ * svg/SVGViewElement.cpp:
+ (WebCore::SVGViewElement::attributeToPropertyTypeMap):
+ (WebCore::SVGViewElement::fillAttributeToPropertyTypeMap):
+ * svg/SVGViewElement.h:
+
+2011-02-10 Alexis Menard <alexis.menard@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ Fix a Warning after removing FileSystem support for the inspector.
+
+ * WebCore.pro:
+
+2011-02-10 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ AX: AX needs to stop using WebCoreViewFactory
+ https://bugs.webkit.org/show_bug.cgi?id=54153
+
+ WebKit2 no longer uses WebCoreViewFactory, which means that accessibility code needs
+ to get off of it and use WebCoreSystemInterface, like other clients.
+
+ * WebCore.exp.in:
+ * accessibility/AXObjectCache.h:
+ * accessibility/mac/AXObjectCacheMac.mm:
+ (WebCore::AXObjectCache::handleFocusedUIElementChanged):
+ * accessibility/mac/AccessibilityObjectWrapper.h:
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper unregisterUniqueIdForUIElement]):
+ (CFAutoreleaseHelper):
+ (AXObjectIsTextMarker):
+ (AXObjectIsTextMarkerRange):
+ (AXTextMarkerRange):
+ (AXTextMarkerRangeStart):
+ (AXTextMarkerRangeEnd):
+ (textMarkerForVisiblePosition):
+ (-[AccessibilityObjectWrapper textMarkerForVisiblePosition:]):
+ (visiblePositionForTextMarker):
+ (-[AccessibilityObjectWrapper visiblePositionForTextMarker:]):
+ (visiblePositionForStartOfTextMarkerRange):
+ (visiblePositionForEndOfTextMarkerRange):
+ (textMarkerRangeFromMarkers):
+ (AXAttributeStringSetElement):
+ (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
+ (textMarkerRangeFromVisiblePositions):
+ (-[AccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
+ (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
+ (-[AccessibilityObjectWrapper textMarkerRangeForSelection]):
+ (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
+ (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
+ * editing/mac/SelectionControllerMac.mm:
+ (WebCore::accessibilityConvertScreenRect):
+ (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+2011-02-10 Alexis Menard <alexis.menard@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] In trunk with Qt Multimedia the full screen mode doesn't work.
+ https://bugs.webkit.org/show_bug.cgi?id=54201
+
+ Add files for the fullscreen video playback handling. It also fix
+ a missing header.
+
+ * WebCore.pro:
+
+2011-02-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Remove FileSystem support from the inspector.
+ https://bugs.webkit.org/show_bug.cgi?id=50695
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/Inspector.idl:
+ * inspector/InspectorApplicationCacheAgent.cpp:
+ (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
+ (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
+ * inspector/InspectorApplicationCacheAgent.h:
+ * inspector/InspectorFileSystemAgent.cpp: Removed.
+ * inspector/InspectorFileSystemAgent.h: Removed.
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
+ (WebCore::InspectorInstrumentation::willSendRequestImpl):
+ (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
+ (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
+ (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
+ (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
+ (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
+ (WebCore::InspectorInstrumentation::didFailLoadingImpl):
+ (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
+ (WebCore::InspectorInstrumentation::scriptImportedImpl):
+ (WebCore::InspectorInstrumentation::networkStateChangedImpl):
+ (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
+ (WebCore::InspectorInstrumentation::retrieveResourceAgent):
+ * inspector/front-end/FileSystemView.js: Removed.
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.html:
+
+2011-02-10 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r78219.
+ http://trac.webkit.org/changeset/78219
+ https://bugs.webkit.org/show_bug.cgi?id=54215
+
+ breaks editing/style/iframe-onload-crash.html on GTK 64-bit
+ Debug (Requested by philn-tp on #webkit).
+
+ * dom/Document.h:
+ * dom/DocumentFragment.h:
+ * dom/Element.h:
+ * dom/Node.h:
+ * dom/Text.h:
+ * editing/htmlediting.cpp:
+ (WebCore::editingIgnoresContent):
+ (WebCore::canHaveChildrenForEditing):
+ * editing/htmlediting.h:
+ * html/HTMLBRElement.h:
+ * html/HTMLButtonElement.h:
+ * html/HTMLDataGridElement.h:
+ * html/HTMLFormControlElement.h:
+ * html/HTMLFrameElementBase.h:
+ * html/HTMLHRElement.h:
+ * html/HTMLImageElement.h:
+ * html/HTMLMeterElement.h:
+ * html/HTMLOutputElement.h:
+ * html/HTMLPlugInElement.h:
+ * html/HTMLProgressElement.h:
+ * wml/WMLBRElement.h:
+ * wml/WMLDoElement.h:
+ * wml/WMLImageElement.h:
+ * wml/WMLInputElement.h:
+ * wml/WMLSelectElement.h:
+
+2011-02-10 Andras Becsi <abecsi@webkit.org>
+
+ Rubber-stamped by Csaba Osztrogonác.
+
+ [Qt][V8] Fix the build.
+
+ No new tests needed.
+
+ * bindings/v8/WorkerContextExecutionProxy.cpp: add missing CString header.
+ * loader/cache/CachedScript.h: do not use extra qualification for base class enum.
+
+2011-02-10 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [STYLES] Suggest CSS property values once Up/Down is pressed with an empty input
+ https://bugs.webkit.org/show_bug.cgi?id=54205
+
+ * inspector/front-end/CSSCompletions.js:
+ (WebInspector.CSSCompletions):
+ (WebInspector.CSSCompletions.prototype._firstIndexOfPrefix):
+ * inspector/front-end/CSSKeywordCompletions.js:
+ (WebInspector.CSSKeywordCompletions.forProperty):
+ * inspector/front-end/StylesSidebarPane.js:
+ ():
+ * inspector/front-end/TextPrompt.js:
+ (WebInspector.TextPrompt.prototype.complete):
+
+2011-02-10 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ SVGFESpecularLightingElement doesn't support dynamic invalidation, when attributes change.
+ https://bugs.webkit.org/show_bug.cgi?id=54186
+
+ The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.
+
+ Tests: svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop.html
+ svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop.html
+
+ * svg/SVGFESpecularLightingElement.cpp:
+ (WebCore::SVGFESpecularLightingElement::svgAttributeChanged):
+ * svg/SVGFESpecularLightingElement.h:
+
+2011-02-10 Andrey Adaikin <aandrey@google.com>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Error messages are not displayed for the last line in a script
+ https://bugs.webkit.org/show_bug.cgi?id=54204
+
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype.addMessage):
+ (WebInspector.SourceFrame.prototype._addMessageToSource):
+ (WebInspector.SourceFrame.prototype._createConditionElement):
+
+2011-02-10 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Make canHaveChildrenForEditing more efficient
+ https://bugs.webkit.org/show_bug.cgi?id=53564
+
+ Improved the performance (1-2% in release and 20% in debug) by adding virtual member function
+ canContainRangeEndPoint to Node. It returns true whenever the associated node can have be a container
+ node for a position.
+
+ As of this revision, canContainRangeEndPoint returns true on Document, DocumentFragment, Text nodes
+ and any elements except:
+
+ HTML: applet, br, button, datagrid, embed, frame, frameset, hr, img, input,
+ meter, object, output, progress, and select.
+
+ WML: br, do, img, input, and select.
+
+ No new tests are added since this change cannot be tested directly.
+
+ * dom/Document.h:
+ (WebCore::Document::canContainRangeEndPoint): Added; returns false.
+ * dom/DocumentFragment.h:
+ (WebCore::DocumentFragment::canContainRangeEndPoint): Added; returns true.
+ * dom/Element.h:
+ (WebCore::Element::canContainRangeEndPoint): Ditto.
+ * dom/Node.h:
+ (WebCore::Node::canContainRangeEndPoint): Added; returns false.
+ * dom/Text.h:
+ (WebCore::Text::canContainRangeEndPoint): Added; returns true.
+ * editing/htmlediting.cpp: Removed editingIgnoresContent and canHaveChildrenForEditing.
+ * editing/htmlediting.h:
+ (WebCore::editingIgnoresContent): Moved from htmlediting.cpp; made it inline.
+ (WebCore::canHaveChildrenForEditing): Ditto.
+ * html/HTMLBRElement.h:
+ (WebCore::HTMLBRElement::canContainRangeEndPoint): Added; returns false.
+ * html/HTMLButtonElement.h:
+ (WebCore::HTMLButtonElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLDataGridElement.h:
+ (WebCore::HTMLDataGridElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLFormControlElement.h:
+ (WebCore::HTMLFormControlElementWithState::canContainRangeEndPoint): Ditto.
+ * html/HTMLFrameElementBase.h:
+ (WebCore::HTMLFrameElementBase::canContainRangeEndPoint): Ditto.
+ * html/HTMLHRElement.h:
+ (WebCore::HTMLHRElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLImageElement.h:
+ (WebCore::HTMLImageElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLMeterElement.h:
+ (WebCore::HTMLMeterElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLOutputElement.h:
+ (WebCore::HTMLOutputElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLPlugInElement.h:
+ (WebCore::HTMLPlugInElement::canContainRangeEndPoint): Ditto.
+ * html/HTMLProgressElement.h:
+ (WebCore::HTMLProgressElement::canContainRangeEndPoint): Ditto.
+ * wml/WMLBRElement.h:
+ (WebCore::WMLBRElement::canContainRangeEndPoint): Ditto.
+ * wml/WMLDoElement.h:
+ (WebCore::WMLDoElement::canContainRangeEndPoint): Ditto.
+ * wml/WMLImageElement.h:
+ (WebCore::WMLImageElement::canContainRangeEndPoint): Ditto.
+ * wml/WMLInputElement.h:
+ (WebCore::WMLInputElement::canContainRangeEndPoint): Ditto.
+ * wml/WMLSelectElement.h:
+ (WebCore::WMLSelectElement::canContainRangeEndPoint): Ditto.
+
+2011-02-10 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: define interface per domain in Inspector.idl.
+ https://bugs.webkit.org/show_bug.cgi?id=54135
+
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/Inspector.idl:
+
+2011-02-10 Andrey Adaikin <aandrey@google.com>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [regression] Fix syncing heights of the gutter and main panel lines, and add 2px padding-left
+ https://bugs.webkit.org/show_bug.cgi?id=54098
+
+ * inspector/front-end/TextViewer.js:
+ (WebInspector.TextViewer):
+ (WebInspector.TextViewer.prototype._updatePanelOffsets):
+ (WebInspector.TextViewer.prototype._syncScroll):
+ (WebInspector.TextViewer.prototype._syncDecorationsForLine):
+ (WebInspector.TextEditorChunkedPanel.prototype._totalHeight):
+ (WebInspector.TextEditorChunkedPanel.prototype.resize):
+ (WebInspector.TextEditorGutterPanel):
+ (WebInspector.TextEditorGutterChunk.prototype.set expanded):
+ (WebInspector.TextEditorGutterChunk.prototype.get height):
+ (WebInspector.TextEditorMainChunk.prototype.get height):
+ * inspector/front-end/textViewer.css:
+ (.webkit-line-content):
+
+2011-02-10 takano takumi <takano@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ A full-width character rotated leftward 90 degrees in text-combine
+ https://bugs.webkit.org/show_bug.cgi?id=54169
+
+ * rendering/RenderCombineText.cpp:
+ (WebCore::RenderCombineText::combineText):
+ - Fixed by resetting font's orientation to horizontal when we decided to make combined text.
+ Otherwise the text will be unexpectedly rotated in showGlyphsWithAdvances() in FontMac.mm.
+
+2011-02-10 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=50306
+ <rdar://problem/8976152> REGRESSION: WebChromeClient::shouldReplaceWithGeneratedFileForUpload()
+ uses an initialized result value (breaks form submission with clang-built WebKit)
+
+ No new test, because I can't reproduce the observable effect with my gcc build.
+
+ * platform/network/FormData.cpp: (WebCore::FormData::appendKeyValuePairItems): Restore an
+ empty path check - an empty path was causing an exception in Foundation.
+
+2011-02-09 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Network & Resource panels make multiple requests for images with no content
+ https://bugs.webkit.org/show_bug.cgi?id=54085
+
+ - Added success parameter to resourceContent
+ - NetworkManager.requestContent() now returns empty for zero-length resources, null for errors
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorResourceAgent.cpp:
+ (WebCore::InspectorResourceAgent::resourceData):
+ (WebCore::InspectorResourceAgent::resourceContent):
+ * inspector/InspectorResourceAgent.h:
+ * inspector/front-end/NetworkManager.js:
+ (WebInspector.NetworkManager.prototype.requestContent):
+ * inspector/front-end/Resource.js:
+ (WebInspector.Resource.prototype.requestContent):
+ (WebInspector.Resource.prototype._contentURL):
+
+2011-02-10 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ Move the light source implementations into their own files.
+ https://bugs.webkit.org/show_bug.cgi?id=53996
+
+ Splitting LightSource.cpp into 3 files.
+
+ No new tests are added since this is a refactoring.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/filters/DistantLightSource.cpp: Added.
+ (WebCore::DistantLightSource::initPaintingData):
+ (WebCore::DistantLightSource::updatePaintingData):
+ (WebCore::DistantLightSource::setAzimuth):
+ (WebCore::DistantLightSource::setElevation):
+ (WebCore::DistantLightSource::externalRepresentation):
+ * platform/graphics/filters/LightSource.cpp:
+ * platform/graphics/filters/PointLightSource.cpp: Added.
+ (WebCore::PointLightSource::initPaintingData):
+ (WebCore::PointLightSource::updatePaintingData):
+ (WebCore::PointLightSource::setX):
+ (WebCore::PointLightSource::setY):
+ (WebCore::PointLightSource::setZ):
+ (WebCore::operator<<):
+ (WebCore::PointLightSource::externalRepresentation):
+ * platform/graphics/filters/SpotLightSource.cpp: Added.
+ (WebCore::SpotLightSource::initPaintingData):
+ (WebCore::SpotLightSource::updatePaintingData):
+ (WebCore::SpotLightSource::setX):
+ (WebCore::SpotLightSource::setY):
+ (WebCore::SpotLightSource::setZ):
+ (WebCore::SpotLightSource::setPointsAtX):
+ (WebCore::SpotLightSource::setPointsAtY):
+ (WebCore::SpotLightSource::setPointsAtZ):
+ (WebCore::SpotLightSource::setSpecularExponent):
+ (WebCore::SpotLightSource::setLimitingConeAngle):
+ (WebCore::operator<<):
+ (WebCore::SpotLightSource::externalRepresentation):
+
+2011-02-10 Avi Drissman <avi@google.com>
+
+ Reviewed by Darin Fisher.
+
+ <option> should implement the dir attribute. Mac Chromium version, followup to r76983, r77654.
+ https://bugs.webkit.org/show_bug.cgi?id=50969
+
+ Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html added in r76983.
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::updateFromElement):
+ * platform/chromium/PopupMenuChromium.h:
+
+2011-02-10 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Update the semantics of put()
+ https://bugs.webkit.org/show_bug.cgi?id=54102
+
+ Update the semantics of put: For object stores with auto increment,
+ it should be allowed to provide an explicit key, or an in-line key,
+ overriding the key generator mechanism.
+
+ This reflects the spec changes suggested here:
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=11976
+
+ Extracting key-selection logic into its own function
+ to make it a bit easier on the eyes.
+
+ * storage/IDBObjectStoreBackendImpl.cpp:
+ (WebCore::IDBObjectStoreBackendImpl::selectKeyForPut):
+ (WebCore::IDBObjectStoreBackendImpl::putInternal):
+ * storage/IDBObjectStoreBackendImpl.h:
+ (WebCore::IDBObjectStoreBackendImpl::resetAutoIncrementKeyCache):
+
+2011-02-09 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54103
+ Implement fast path for matching simple selectors
+
+ Implement a fast path for single and descendant selectors consisting
+ of id, class and tag selectors only.
+
+ Selectors like this are marked on style selector initialization. When
+ encountered during style matching they are resolved using a fast path.
+
+ Since selectors like this are very common this speeds up style matching
+ quite a bit (up to 50% on some sites according to Shark).
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::RuleData::hasFastCheckableSelector):
+ (WebCore::RuleData::hasMultipartSelector):
+ (WebCore::RuleData::hasTopSelectorMatchingHTMLBasedOnRuleHash):
+ (WebCore::CSSStyleSelector::matchRulesForList):
+ (WebCore::CSSStyleSelector::checkSelector):
+ (WebCore::selectorTagMatches):
+ (WebCore::isFastCheckableSelector):
+ (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):
+ (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
+ (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
+ (WebCore::RuleData::RuleData):
+ * css/CSSStyleSelector.h:
+
+2011-02-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION (r77101) box-shadow sometimes renders incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=54160
+
+ Fix an issue when ShadowBlur had a cached image buffer
+ that was larger than that of the current shadow being drawn,
+ and the current shadow was partially clipped out.
+
+ In that situation endShadowLayer() would clip to the image
+ buffer, using the size of the buffer (as it must), but failed
+ to take into account the fact that we'd only cleared and painted
+ into a smaller section of the buffer. So we need to additionally
+ constrain the clip to cover only the valid part of the buffer.
+
+ Test: fast/box-shadow/shadow-buffer-partial.html
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::endShadowLayer):
+
+2011-02-09 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fix for <rdar://problem/8977051> CrashTracer: 8 crashes
+ in WebProcess at com.apple.WebCore:
+ -[ScrollbarPartAnimation setCurrentProgress:] + 364
+
+ The ScrollbarPartAnimation must be sent by reference!
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
+
+2011-02-09 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(r76107): Crash in VisibleSelection::toNormalizedRange
+ https://bugs.webkit.org/show_bug.cgi?id=54053
+
+ The bug was caused by RenderBlock::positionForPoint's improperly returning a shadow node inside
+ RenderFileUploadControl for hit testing and VisibleSelection::toNormalizedRange's always assuming
+ the position variable "s" is not null.
+
+ Fixed the bug by always returning a null position from RenderFileUploadControl::positionForPoint,
+ and also exiting early when either "s" or "e" is null in VisibleSelection::toNormalizedRange.
+
+ Test: fast/forms/file-input-hit-test.html
+
+ * editing/VisibleSelection.cpp:
+ (WebCore::VisibleSelection::toNormalizedRange):
+ * rendering/RenderFileUploadControl.cpp:
+ (WebCore::RenderFileUploadControl::positionForPoint):
+ * rendering/RenderFileUploadControl.h:
+
+2011-02-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Overlay scrollbars crash used with a RenderListBox.
+
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::layout):
+ (WebCore::RenderListBox::contentsSize):
+ (WebCore::RenderListBox::currentMousePosition):
+ (WebCore::RenderListBox::setHasVerticalScrollbar):
+ * rendering/RenderListBox.h:
+ Implement enough of the ScrollableArea interface to get things generally
+ working.
+
+2011-02-09 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Fix for <rdar://problem/8966868> ScrollbarPainterDelegate
+ must return a layer if layer-backed to avoid crashing
+
+ New virtual function scrollbarWillRenderIntoCompositingLayer()
+ on ScrollableArea.
+ * page/FrameView.h:
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::scrollbarWillRenderIntoCompositingLayer):
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::scrollbarWillRenderIntoCompositingLayer):
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::scrollbarWillRenderIntoCompositingLayer):
+ * rendering/RenderListBox.h:
+
+ Clean up unnecessary method declarations and call
+ scrollbarWillRenderIntoCompositingLayer() to deterine if
+ we need to return a layer.
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterDelegate layer]):
+
+2011-02-09 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Replace static_cast<HTMLElement*> with toHTMLElement
+ https://bugs.webkit.org/show_bug.cgi?id=54117
+
+ No new tests since no new functionality was introduced.
+
+ * accessibility/AccessibilityListBox.cpp:
+ (WebCore::AccessibilityListBox::addChildren):
+ * accessibility/AccessibilityMenuListPopup.cpp:
+ (WebCore::AccessibilityMenuListPopup::addChildren):
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::accessibleNameForNode):
+ (WebCore::AccessibilityRenderObject::accessibilityDescription):
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_get_name):
+ (webkit_accessible_get_description):
+ * bindings/gobject/WebKitDOMBinding.cpp:
+ (WebKit::createWrapper):
+ (WebKit::kit):
+ * bindings/js/JSElementCustom.cpp:
+ (WebCore::toJSNewlyCreated):
+ * bindings/js/JSHTMLFrameSetElementCustom.cpp:
+ (WebCore::JSHTMLFrameSetElement::nameGetter):
+ * bindings/js/JSNodeCustom.cpp:
+ (WebCore::createWrapperInline):
+ * bindings/v8/custom/V8ElementCustom.cpp:
+ (WebCore::toV8):
+ * dom/Document.cpp:
+ (WebCore::Document::body):
+ * dom/Element.cpp:
+ (WebCore::Element::deprecatedCreateContextualFragment):
+ * dom/Range.cpp:
+ (WebCore::Range::createContextualFragment):
+ * editing/ApplyStyleCommand.cpp:
+ (WebCore::ApplyStyleCommand::applyBlockStyle):
+ (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
+ (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
+ (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
+ (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
+ (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
+ (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
+ (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
+ (WebCore::ApplyStyleCommand::removeInlineStyle):
+ (WebCore::ApplyStyleCommand::shouldSplitTextElement):
+ (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
+ * editing/DeleteButtonController.cpp:
+ (WebCore::enclosingDeletableElement):
+ (WebCore::DeleteButtonController::show):
+ * editing/Editor.cpp:
+ (WebCore::Editor::setBaseWritingDirection):
+ * editing/InsertListCommand.cpp:
+ (WebCore::InsertListCommand::mergeWithNeighboringLists):
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):
+ (WebCore::ReplaceSelectionCommand::handleStyleSpans):
+ (WebCore::ReplaceSelectionCommand::copyStyleToChildren):
+ * editing/SelectionController.cpp:
+ (WebCore::scanForForm):
+ (WebCore::SelectionController::currentForm):
+ * editing/htmlediting.cpp:
+ (WebCore::enclosingList):
+ (WebCore::enclosingListChild):
+ (WebCore::embeddedSublist):
+ (WebCore::appendedSublist):
+ * editing/markup.cpp:
+ (WebCore::StyledMarkupAccumulator::appendElement):
+ * html/HTMLCollection.cpp:
+ (WebCore::HTMLCollection::checkForNameMatch):
+ (WebCore::HTMLCollection::updateNameCache):
+ * html/HTMLElement.cpp:
+ (WebCore::HTMLElement::setOuterHTML):
+ (WebCore::HTMLElement::shadowAncestorOwnerForm):
+ * html/HTMLFormElement.cpp:
+ (WebCore::HTMLFormElement::formElementIndex):
+ * html/HTMLSelectElement.cpp:
+ (WebCore::HTMLSelectElement::setOption):
+ (WebCore::HTMLSelectElement::setLength):
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::getOuterHTML):
+ (WebCore::InspectorDOMAgent::setOuterHTML):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleMouseMoveEvent):
+ * rendering/RenderMeter.cpp:
+ (WebCore::RenderMeter::createPart):
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::createSubtreeIfNeeded):
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
+
+2011-02-09 Mike Reed <reed@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Use Skia's device->readPixels() when its bitmap claims to have no pixels, as this
+ handles the case when the device is backed by the GPU.
+ Patch developed by bsalomon@google.com
+
+ No new tests. Existing canvas tests suffice
+ e.g. LayoutTests/canvas/philip/...
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::getImageData):
+ (WebCore::ImageBuffer::getUnmultipliedImageData):
+ (WebCore::ImageBuffer::getPremultipliedImageData):
+ (WebCore::putImageData):
+ (WebCore::ImageBuffer::putUnmultipliedImageData):
+ (WebCore::ImageBuffer::putPremultipliedImageData):
+
+2011-02-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ document.close shouldn't affect non-script-created parsers
+ https://bugs.webkit.org/show_bug.cgi?id=53689
+
+ Tests: fast/frames/document-write-in-iframe-onload-3.html
+ fast/parser/iframe-onload-document-close-with-external-script-2.html
+ fast/parser/iframe-onload-document-close-with-external-script-3.html
+ fast/parser/iframe-onload-document-close-with-external-script.html
+ fast/parser/setTimeout-open.html
+
+ Move our implementation of document.close closer to the spec by
+ introducing the notion of a script-created parser. This area of our
+ code is somewhat hairy. It might take a few more iterations before we
+ fully come up to spec.
+
+ * dom/Document.cpp:
+ (WebCore::Document::setContent):
+ (WebCore::Document::open):
+ (WebCore::Document::cancelParsing):
+ (WebCore::Document::close):
+ - Over time, this method should converge to the spec.
+ (WebCore::Document::explicitClose):
+ - I'm not in love with this name. Somehow we want to differentiate
+ between Document closing itself and the document.close DOM
+ method.
+ (WebCore::Document::removePendingSheet):
+ * dom/Document.h:
+ * dom/ScriptableDocumentParser.cpp:
+ (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
+ * dom/ScriptableDocumentParser.h:
+ (WebCore::ScriptableDocumentParser::setWasCreatedByScript):
+ (WebCore::ScriptableDocumentParser::wasCreatedByScript):
+ - General nonsense to keep track of whether the parser was created
+ by script.
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::hasInsertionPoint):
+ - I'm not sure whether this part of the change is 100% correct. I
+ think our notion of the EOF character might be subtly different
+ from the notion in the spec.
+ * html/parser/HTMLInputStream.h:
+ (WebCore::HTMLInputStream::hasInsertionPoint):
+ - Remove FIXME because we're fixing that!
+
+2011-02-09 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by James Robinson.
+
+ [Chromium] Issue 72387: Integer bounds crash in LayerTilerChromium::resizeLayer
+ https://bugs.webkit.org/show_bug.cgi?id=54132
+
+ * platform/graphics/chromium/LayerTilerChromium.cpp:
+ (WebCore::LayerTilerChromium::resizeLayer):
+
+2011-02-09 Xiyuan Xia <xiyuan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Use #f7f7f7 for select popup background on chromium/linux
+ https://bugs.webkit.org/show_bug.cgi?id=54115
+
+ No new tests since no behavior change.
+
+ * css/themeChromiumLinux.css:
+ (select[size="1"] option):
+
+2011-02-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ REGRESSION(HTML 5): HTMLDocumentParser does not report html parse errors to the console
+ https://bugs.webkit.org/show_bug.cgi?id=41187
+
+ Wire up a basic HTML parse error message. There's a lot of room for
+ improvement in this area, but this is a start.
+
+ No tests! See https://bugs.webkit.org/show_bug.cgi?id=54134
+
+ * html/parser/HTMLDocumentParser.h:
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::parseError):
+ * html/parser/HTMLTreeBuilder.h:
+
+2011-02-09 Naoki Takano <takano.naoki@gmail.com>
+
+ Reviewed by Kenneth Russell.
+
+ [Chromium] Issue 58536: Fix Layout Test canvas/philip/tests/2d.imageData.put.alpha.html with --accelerated-2d-canvas.
+ https://bugs.webkit.org/show_bug.cgi?id=53757
+
+ This fix is for 2d.imageData.put.alpha.html with --accelerated-2d-canvas. No new tests.
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::ImageBuffer::putUnmultipliedImageData): needs to call syncSoftwareCanvas() to sync between hardware and software.
+ (WebCore::ImageBuffer::putPremultipliedImageData): needs to call syncSoftwareCanvas() to sync between hardware and software.
+
+
+2011-02-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Fix scaling and thread safety of FFTFrameFFTW
+ https://bugs.webkit.org/show_bug.cgi?id=54045
+
+ No new tests since audio API is not yet implemented.
+
+ * platform/audio/FFTFrame.h:
+ * platform/audio/fftw/FFTFrameFFTW.cpp:
+ (WebCore::FFTFrame::FFTFrame):
+ (WebCore::FFTFrame::doFFT):
+ (WebCore::FFTFrame::doInverseFFT):
+ (WebCore::FFTFrame::initialize):
+ (WebCore::FFTFrame::cleanup):
+ (WebCore::FFTFrame::realData):
+ (WebCore::FFTFrame::imagData):
+ (WebCore::FFTFrame::fftwPlanForSize):
+ * platform/audio/mac/FFTFrameMac.cpp:
+ (WebCore::FFTFrame::initialize):
+ * platform/audio/mkl/FFTFrameMKL.cpp:
+ (WebCore::FFTFrame::initialize):
+ * webaudio/AudioContext.cpp:
+ (WebCore::AudioContext::AudioContext):
+
+2011-02-09 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: accessibilityShouldUseUniqueId doesn't need to be in the core AX object
+ https://bugs.webkit.org/show_bug.cgi?id=54126
+
+ This is a Mac-only accessibility API concept and doesn't belong in the core AX object.
+
+ * accessibility/AccessibilityObject.h:
+ (WebCore::AccessibilityObject::node):
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper accessibilityShouldUseUniqueId]):
+
+2011-02-09 Nebojsa Ciric <cira@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Implements Locale object of JavaScript internationalization API proposal, as an
+ v8 extension. Extension code is hosted in v8 project (src/extensions/experimental/i18n-extension.{cc,h})
+ and in this patch we just provide flags, tests and build rules for chromium port.
+ https://bugs.webkit.org/show_bug.cgi?id=49414
+
+ Test: fast/js/i18n-bindings-locale.html
+
+ * WebCore.gyp/WebCore.gyp:
+ * bindings/generic/RuntimeEnabledFeatures.cpp:
+ (WebCore::RuntimeEnabledFeatures::experimentalI18NAPIEnabled):
+ * bindings/generic/RuntimeEnabledFeatures.h:
+ (WebCore::RuntimeEnabledFeatures::setExperimentalI18NAPIEnabled):
+ * bindings/v8/V8DOMWindowShell.cpp:
+ (WebCore::V8DOMWindowShell::createNewContext):
+
+2011-02-08 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
+ https://bugs.webkit.org/show_bug.cgi?id=52065
+
+ * dom/Node.cpp:
+ (WebCore::pullOutOfShadow): Added a helper to move a node to the outermost
+ boundary of shadow DOM.
+ (WebCore::Node::dispatchMouseEvent): Changed to use pullOutOfShadow.
+
+2011-02-09 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Add convenience method toHTMLElement(Node*)
+ https://bugs.webkit.org/show_bug.cgi?id=54105
+
+ No new tests since no new functionality introduced.
+
+ * html/HTMLElement.h:
+ (WebCore::toHTMLElement):
+
+2011-02-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dan Bernstein.
+
+ Fixed positioned elements at very top or bottom of page remain fixed but clip during rubber-banding
+ <rdar://problem/7615997>
+ https://bugs.webkit.org/show_bug.cgi?id=54054
+
+ Take the overhang into account when calculating position for elements with position: fixed.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::scrollXForFixedPosition):
+ (WebCore::ScrollView::scrollYForFixedPosition):
+ (WebCore::ScrollView::scrollOffsetForFixedPosition):
+ * platform/ScrollView.h:
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::mapLocalToContainer):
+ (WebCore::RenderView::mapAbsoluteToLocalPoint):
+ (WebCore::RenderView::computeRectForRepaint):
+
+2011-02-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dirk Schulze.
+
+ Enhance ShadowBlur to tile inset box shadows
+ https://bugs.webkit.org/show_bug.cgi?id=51567
+
+ Add a tiling code path to ShadowBlur for rendering inset
+ box-shadows.
+
+ Test: fast/box-shadow/inset-box-shadows.html
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::computeSliceSizesFromRadii): Compute the slice sizes
+ for the eight-piece shadow template.
+ (WebCore::ShadowBlur::templateSize): Compute the size of the template,
+ given the slice sizes.
+ (WebCore::ShadowBlur::drawRectShadow): Bail early if layerRect is empty
+ (which probably means we're clipped out). Call templateSize() and use
+ the result to decide whether to tile.
+ (WebCore::ShadowBlur::drawInsetShadow): New method for inset shadows.
+ (WebCore::ShadowBlur::drawRectShadowWithoutTiling): Code moved.
+ (WebCore::ShadowBlur::drawInsetShadowWithoutTiling): The non-tiling code
+ path for inset shadows.
+ (WebCore::ShadowBlur::drawInsetShadowWithTiling): Fill the shadow template
+ buffer, paint the non-blurred area of the destination, and then call drawLayerPieces()
+ to paint the eight-piece template image.
+ (WebCore::ShadowBlur::drawRectShadowWithTiling): Refactored code, now
+ shares the blurring code via blurAndColorShadowBuffer(), and the tiled template
+ drawing via drawLayerPieces().
+ (WebCore::ShadowBlur::drawLayerPieces): Draw an eight-piece image from the
+ shadow template to the destination.
+ (WebCore::ShadowBlur::blurAndColorShadowBuffer): Blur the pixels in the image
+ buffer, and colorize them using the CompositeSourceIn operation.
+ * platform/graphics/ShadowBlur.h:
+
+2011-02-09 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Disable script elements when a CSP header is present
+ https://bugs.webkit.org/show_bug.cgi?id=53867
+
+ Tests: http/tests/security/contentSecurityPolicy/no-policy.html
+ http/tests/security/contentSecurityPolicy/script-src-in-iframe.html
+ http/tests/security/contentSecurityPolicy/script-src-none.html
+ http/tests/security/contentSecurityPolicy/script-src-redirect.html
+
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
+ * html/parser/HTMLScriptRunner.cpp:
+ (WebCore::HTMLScriptRunner::requestPendingScript):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::didBeginDocument):
+ * loader/MainResourceLoader.cpp:
+ (WebCore::MainResourceLoader::didReceiveResponse):
+ * page/ContentSecurityPolicy.cpp:
+ (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
+ (WebCore::ContentSecurityPolicy::didReceiveHeader):
+ (WebCore::ContentSecurityPolicy::canLoadExternalScriptFromSrc):
+ * page/ContentSecurityPolicy.h:
+
+2011-02-09 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r78047.
+
+ ContextMenu.cpp and ContextMenuItem.cpp have a USE(CROSS_PLATFORM_CONTEXT_MENUS),
+ so they shouldn't cause problems with correct preprocessor defines.
+
+ * CMakeLists.txt:
+
+2011-02-09 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: InspectorAgent should know nothing about InspectorController instance.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54100
+
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ (WebCore::InspectorController::disconnectFrontend):
+ (WebCore::InspectorController::restoreInspectorStateFromCookie):
+
+2011-02-09 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: source frame scroll position is not restored.
+ https://bugs.webkit.org/show_bug.cgi?id=54101
+
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype.show):
+ (WebInspector.SourceFrame.prototype.hide):
+ (WebInspector.SourceFrame.prototype.get scrollTop):
+ (WebInspector.SourceFrame.prototype.set scrollTop):
+ * inspector/front-end/TextViewer.js:
+ (WebInspector.TextViewer.prototype.get scrollTop):
+ (WebInspector.TextViewer.prototype.set scrollTop):
+ (WebInspector.TextViewer.prototype.get scrollLeft):
+ (WebInspector.TextViewer.prototype.set scrollLeft):
+
+2011-02-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: follow up on InspectorAgent split -
+ removing unnecessary methods from InspectorController.
+ https://bugs.webkit.org/show_bug.cgi?id=54093
+
+ * WebCore.exp.in:
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::stopUserInitiatedProfiling):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enabled):
+ (WebCore::InspectorAgent::showConsole):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ (WebCore::InspectorController::didClearWindowObjectInWorld):
+ (WebCore::InspectorController::showConsole):
+ (WebCore::InspectorController::enabled):
+ (WebCore::InspectorController::inspectedPage):
+ * inspector/InspectorController.h:
+ * inspector/InspectorFrontendClientLocal.cpp:
+
+2011-02-07 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ LayoutTests/animations/play-state.html has wrong behavior with accelerated compositing
+ https://bugs.webkit.org/show_bug.cgi?id=53513
+
+ The PlatformCAAnimation::create() function which took a pointer to another
+ PlatformCAAnimation was supposed to make a copy of that passed object.
+ But it was doing completely the wrong thing on Mac and was leaking an object
+ to boot. And the notion of copying an object using a static creation function
+ is wrong in the first place. So I changed it to a member copy() function
+ which would create a new PlatformCAAnimation which was a copy of 'this' and
+ return it. I changed the implementation on both Mac and Win to match.
+
+ This problem was not caught by DRT, even there is a specific test for it.
+ That test just verifies that the higher level logic is working
+ properly, which it is. There's no practical way to find out if the
+ layer is currently animating. There is no logic which probes that
+ deeply into the layer mechanics.
+
+ * platform/graphics/ca/GraphicsLayerCA.cpp:
+ * platform/graphics/ca/PlatformCAAnimation.h:
+ * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
+ * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
+
+2011-02-09 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix.
+
+ [EFL] Remove double definition of ContextMenu.
+ https://bugs.webkit.org/show_bug.cgi?id=50762
+
+ When building with SHARED_CORE enabled, the symbols of ContextMenu
+ were both in webkit and webcore. This removes them from webcore and
+ shall be put back once the CROSS_PLATFORM_CONTEXT_MENUS is implemented
+ in EFL port.
+
+ No new tests because no new functionality.
+
+ * CMakeLists.txt:
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * WebCore.vcproj/QTMovieWinCommon.vsprops: Link against
+ WebKitSystemInterface$(WebKitConfigSuffix).lib, not just WebKitSystemInterface.lib, so we
+ pick up the _debug variant when appropriate.
+
+2011-02-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Hostnames should cannonicalize to lowercase (to match every other browser)
+ https://bugs.webkit.org/show_bug.cgi?id=54084
+
+ * platform/KURL.cpp:
+ (WebCore::KURL::parse):
+
+2011-02-09 Peter Varga <pvarga@webkit.org>
+
+
+ Reviewed by Gavin Barraclough.
+
+ Replace PCRE with Yarr in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53496
+
+ No new tests needed.
+
+ * Android.jscbindings.mk:
+ * CMakeLists.txt:
+ * ForwardingHeaders/pcre/pcre.h: Removed.
+ * ForwardingHeaders/yarr/Yarr.h: Added.
+ * ForwardingHeaders/yarr/YarrInterpreter.h: Added.
+ * ForwardingHeaders/yarr/YarrPattern.h: Added.
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.vcproj/copyForwardingHeaders.cmd:
+ * platform/text/RegularExpression.cpp:
+ (WebCore::RegularExpression::Private::create):
+ (WebCore::RegularExpression::Private::Private):
+ (WebCore::RegularExpression::Private::compile):
+ (WebCore::RegularExpression::match):
+
+2011-02-09 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Eric Seidel.
+
+ [EFL] Add dummy functions for HTML5 Video's control UI
+ https://bugs.webkit.org/show_bug.cgi?id=53906
+
+ In WebKit EFL, there are no implementations for HTML5 control UI.
+ First, dummy functions are added.
+
+ * platform/efl/RenderThemeEfl.cpp:
+ (WebCore::RenderThemeEfl::extraMediaControlsStyleSheet):
+ (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime):
+ (WebCore::RenderThemeEfl::paintMediaFullscreenButton):
+ (WebCore::RenderThemeEfl::paintMediaMuteButton):
+ (WebCore::RenderThemeEfl::paintMediaPlayButton):
+ (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
+ (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
+ (WebCore::RenderThemeEfl::paintMediaSliderTrack):
+ (WebCore::RenderThemeEfl::paintMediaSliderThumb):
+ (WebCore::RenderThemeEfl::paintMediaVolumeSliderContainer):
+ (WebCore::RenderThemeEfl::paintMediaVolumeSliderTrack):
+ (WebCore::RenderThemeEfl::paintMediaVolumeSliderThumb):
+ (WebCore::RenderThemeEfl::paintMediaCurrentTime):
+ * platform/efl/RenderThemeEfl.h:
+
+2011-02-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Make WebKit's fragment cannonicalization match other browsers
+ https://bugs.webkit.org/show_bug.cgi?id=53850
+
+ This doesn't make us match perfectly, but it brings us closer.
+
+ * platform/KURL.cpp:
+ (WebCore::appendEscapingBadChars):
+ (WebCore::escapeAndAppendFragment):
+ (WebCore::KURL::parse):
+
+2011-02-09 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Cursors should skip deleted entries
+ https://bugs.webkit.org/show_bug.cgi?id=53690
+
+ Add test to check that the cursor skips deleted entries.
+
+ Test: storage/indexeddb/cursor-skip-deleted.html
+
+ * storage/IDBCursorBackendImpl.cpp:
+ (WebCore::IDBCursorBackendImpl::currentRowExists):
+ (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
+ * storage/IDBCursorBackendImpl.h:
+
+2011-02-08 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: script formatter should not create a worker for each script.
+ https://bugs.webkit.org/show_bug.cgi?id=54010
+
+ * inspector/front-end/ScriptFormatter.js:
+ (WebInspector.ScriptFormatter):
+ (WebInspector.ScriptFormatter.prototype._formatScript):
+ (WebInspector.ScriptFormatter.prototype._handleMessage):
+ (WebInspector.ScriptFormatter.prototype._handleError):
+
+2011-02-08 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: sync uglifyjs parser files.
+ https://bugs.webkit.org/show_bug.cgi?id=54003
+
+ * inspector/front-end/UglifyJS/parse-js.js:
+ * inspector/front-end/UglifyJS/process.js:
+
+2011-02-08 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(71556,68059): queryCommandValue screws up background color at collapsed cursor
+ https://bugs.webkit.org/show_bug.cgi?id=53196
+
+ The bug was caused by Editor::selectionComputedStyle's modifying typing style without making a copy,
+ and its removing non-inheritable properties from the typing style. Fixed the bug by making a copy
+ before making the modification and not removing non-inheritable properties.
+
+ Also fixed a bug in selectionStartCSSPropertyValue that it doesn't handle xx-small to -webkit-xxx-large
+ by extracting a function from StyleChange::extractTextStyles and calling it in both extractTextStyles
+ and selectionStartCSSPropertyValue.
+
+ Test: editing/style/query-typing-style.html
+
+ * editing/ApplyStyleCommand.cpp:
+ (WebCore::legacyFontSizeFromCSSValue): Extracted from StyleChange::extractTextStyles.
+ (WebCore::StyleChange::extractTextStyles): Calls legacyFontSizeFromCSSValue; this fixes the bug that
+ CSS values from xx-small through -webkit-xxx-large are not accounted.
+ * editing/ApplyStyleCommand.h:
+ * editing/Editor.cpp:
+ (WebCore::Editor::selectionStartCSSPropertyValue): Calls legacyFontSizeFromCSSValue.
+ (WebCore::Editor::selectionComputedStyle): Makes a copy before modifying typing style.
+ No longer calls removeNonEditingProperties on the copied typing style so that background-color property
+ is included when merged into the style.
+
+2011-02-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ REGRESSION (r76831): Subframes are printed blank
+ <rdar://problem/8945867>
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::paintOverhangAreas):
+ Don't paint overhangs when printing.
+
+2011-02-07 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Events should propagate through IDBDatabase (for IDBRequest and IDBTransaction)
+ https://bugs.webkit.org/show_bug.cgi?id=53975
+
+ The third change in the series of overhauling IndexedDB's event model to match
+ the spec (at least the version in our heads and bugs).
+
+ Test: storage/indexeddb/transaction-event-propagation.html
+
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
+ * dom/Event.cpp:
+ (WebCore::Event::isIDBAbortEvent):
+ (WebCore::Event::isIDBCompleteEvent):
+ * dom/Event.h:
+ * dom/EventTarget.cpp:
+ (WebCore::EventTarget::toIDBDatabase):
+ * dom/EventTarget.h:
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::create):
+ (WebCore::IDBDatabase::IDBDatabase):
+ (WebCore::IDBDatabase::scriptExecutionContext):
+ (WebCore::IDBDatabase::eventTargetData):
+ (WebCore::IDBDatabase::ensureEventTargetData):
+ * storage/IDBDatabase.h:
+ (WebCore::IDBDatabase::toIDBDatabase):
+ (WebCore::IDBDatabase::refEventTarget):
+ (WebCore::IDBDatabase::derefEventTarget):
+ * storage/IDBDatabase.idl:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::onSuccess):
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::backend):
+ (WebCore::IDBTransaction::db):
+ (WebCore::IDBTransaction::objectStore):
+ (WebCore::IDBTransaction::scriptExecutionContext):
+ (WebCore::IDBTransaction::dispatchEvent):
+ (WebCore::IDBTransaction::enqueueEvent):
+ * storage/IDBTransaction.h:
+ (WebCore::IDBTransaction::dispatchEvent):
+
+2011-02-08 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Add cache for GPU-accelerated path processing results
+ https://bugs.webkit.org/show_bug.cgi?id=45519
+
+ Adding a cache which holds the results of processing a path into
+ interior and exterior triangle meshes, according to the path
+ rendering algorithm from GPU Gems 3. No tests yet; will be tested
+ in conjunction with later code.
+
+ * platform/graphics/gpu/LoopBlinnPathCache.cpp: Added.
+ (WebCore::LoopBlinnPathCache::LoopBlinnPathCache):
+ (WebCore::LoopBlinnPathCache::~LoopBlinnPathCache):
+ (WebCore::LoopBlinnPathCache::addVertex):
+ (WebCore::LoopBlinnPathCache::clear):
+ (WebCore::LoopBlinnPathCache::addInteriorVertex):
+ (WebCore::LoopBlinnPathCache::numberOfInteriorEdgeVertices):
+ (WebCore::LoopBlinnPathCache::interiorEdgeVertices):
+ (WebCore::LoopBlinnPathCache::addInteriorEdgeVertex):
+ * platform/graphics/gpu/LoopBlinnPathCache.h: Added.
+ (WebCore::LoopBlinnPathCache::numberOfVertices):
+ (WebCore::LoopBlinnPathCache::vertices):
+ (WebCore::LoopBlinnPathCache::texcoords):
+ (WebCore::LoopBlinnPathCache::numberOfInteriorVertices):
+ (WebCore::LoopBlinnPathCache::interiorVertices):
+
+2011-02-08 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Rename GraphicsContext3D::WebGLEnumType
+ https://bugs.webkit.org/show_bug.cgi?id=45708
+
+ * html/canvas/WebGLProgram.cpp:
+ (WebCore::WebGLProgram::getAttachedShader):
+ * html/canvas/WebGLProgram.h:
+ * platform/graphics/GraphicsContext3D.h:
+
+2011-02-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77980.
+ http://trac.webkit.org/changeset/77980
+ https://bugs.webkit.org/show_bug.cgi?id=54043
+
+ "Crashes on Windows and Linux..." (Requested by leviw on
+ #webkit).
+
+ * WebCore.exp.in:
+ * accessibility/AXObjectCache.cpp:
+ (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::startOfStyleRange):
+ (WebCore::endOfStyleRange):
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (objectAndOffsetUnignored):
+ * dom/Position.cpp:
+ (WebCore::Position::upstream):
+ (WebCore::Position::downstream):
+ * dom/Range.cpp:
+ (WebCore::Range::editingStartPosition):
+ * editing/Editor.cpp:
+ (WebCore::Editor::canDeleteRange):
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::doApply):
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
+ (WebCore::SelectionController::setSelectedRange):
+ * editing/TextIterator.cpp:
+ (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::deleteKeyPressed):
+ * editing/VisiblePosition.cpp:
+ (WebCore::VisiblePosition::VisiblePosition):
+ (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
+ (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
+ (WebCore::VisiblePosition::canonicalPosition):
+ (WebCore::VisiblePosition::characterAfter):
+ (WebCore::VisiblePosition::localCaretRect):
+ (WebCore::makeRange):
+ (WebCore::startVisiblePosition):
+ (WebCore::endVisiblePosition):
+ (WebCore::setStart):
+ (WebCore::setEnd):
+ (WebCore::isFirstVisiblePositionInNode):
+ (WebCore::isLastVisiblePositionInNode):
+ * editing/VisiblePosition.h:
+ * editing/htmlediting.cpp:
+ (WebCore::firstInSpecialElement):
+ (WebCore::lastInSpecialElement):
+ (WebCore::visiblePositionBeforeNode):
+ (WebCore::visiblePositionAfterNode):
+ * editing/visible_units.cpp:
+ (WebCore::startPositionForLine):
+ (WebCore::endPositionForLine):
+ (WebCore::previousLinePosition):
+ (WebCore::nextLinePosition):
+ (WebCore::startOfParagraph):
+ (WebCore::endOfParagraph):
+ (WebCore::endOfBlock):
+ (WebCore::startOfDocument):
+ (WebCore::endOfDocument):
+ (WebCore::logicalStartPositionForLine):
+ (WebCore::logicalEndPositionForLine):
+ * page/DOMSelection.cpp:
+ (WebCore::DOMSelection::collapse):
+ (WebCore::DOMSelection::setBaseAndExtent):
+ (WebCore::DOMSelection::setPosition):
+ (WebCore::DOMSelection::extend):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleMousePressEventSingleClick):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::createVisiblePosition):
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::visiblePositionForIndex):
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::selectSubString):
+
+2011-02-08 Jia Pu <jpu@apple.com>
+
+ Reviewed by Darin Adler.
+
+ VisibleSelection::setWithoutValidation() should allow caret selection.
+ https://bugs.webkit.org/show_bug.cgi?id=53943
+
+ Test: editing/undo/undo-paste-when-caret-is-not-in-range.html
+
+ * editing/VisibleSelection.cpp:
+ (WebCore::VisibleSelection::setWithoutValidation):
+
+2011-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Remove the last remnants of the Mozilla theme drawing code
+ https://bugs.webkit.org/show_bug.cgi?id=54035
+
+ Remove all Mozilla theme drawing code.
+
+ No new tests. This change only removes dead code.
+
+ * GNUmakefile.am: Remove Mozilla files from the source list.
+ * platform/gtk/RenderThemeGtk.h: Remove Mozilla-theme-drawing-related methods
+ and add m_colormap to hold the current colormap of the widgets.
+ * platform/gtk/RenderThemeGtk2.cpp: Remove Mozilla code.
+ (WebCore::RenderThemeGtk::platformInit): Ditto.
+ (WebCore::RenderThemeGtk::~RenderThemeGtk): Ditto.
+ (WebCore::RenderThemeGtk::gtkContainer): Ditto.
+ * platform/gtk/ScrollbarThemeGtk2.cpp: Ditto.
+ * platform/gtk/WidgetRenderingContext.cpp: Ditto.
+ (WebCore::WidgetRenderingContext::WidgetRenderingContext): Ditto.
+ * platform/gtk/WidgetRenderingContext.h: Ditto.
+ * platform/gtk/gtk2drawing.c: Removed.
+ * platform/gtk/gtkdrawing.h: Removed.
+
+2011-02-08 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Antti Koivisto.
+
+ Crash when logging into gmail.com with frame flattening turned on.
+ https://bugs.webkit.org/show_bug.cgi?id=52449
+
+ Frame flattening algorithm requires that layout always starts from the main frame, since layout of
+ subframes impacts the layout of their parents.
+ There are places in the code that call view->layout() not on the main frame.
+ Instead of changing all the callsites, I changed FrameView::layout()
+ to force layout from the main frame if frame flattening is enabled.
+ In addition, postLayoutTasks can trigger relayout, so make it use the timer even more.
+ Move the call to SelectionController::updateAppearance() to performPostLayoutTasks(),
+ because calling the from layout() leads to a crash in pages that have a selection in an iframe.
+
+ Tests: fast/frames/flattening/iframe-flattening-crash.html
+ fast/frames/flattening/iframe-flattening-selection-crash.html
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::layout):
+ (WebCore::FrameView::performPostLayoutTasks):
+
+2011-02-08 Andy Estes <aestes@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8913952> REGRESSION (r76301): 'plaintext-only' must be
+ a supported contentEditable mode.
+ https://bugs.webkit.org/show_bug.cgi?id=54041
+
+ * html/HTMLElement.cpp:
+ (WebCore::HTMLElement::setContentEditable): Setting the contentEditable
+ attribute to 'plaintext-only' should not throw an exception.
+
+2011-02-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ RenderRubyRun::m_beingDestroyed is redundant
+ https://bugs.webkit.org/show_bug.cgi?id=54042
+
+ * rendering/RenderRubyRun.cpp:
+ (WebCore::RenderRubyRun::RenderRubyRun): Removed intialization of m_beingDestroyed.
+ (WebCore::RenderRubyRun::removeChild): Use the base class beingDestroyed().
+ * rendering/RenderRubyRun.h:
+
+2011-02-08 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ Stop instantiating legacy editing Positions in VisiblePosition
+ https://bugs.webkit.org/show_bug.cgi?id=52919
+
+ Changing VisiblePosition completely away from legacy positions.
+
+ No new tests since this is functionaly equivalent.
+
+ * WebCore.exp.in: Removing the legacy VisiblePosition constructor and
+ adding the PositionIsOffsetInAnchor symbol. If we must create VisiblePositions
+ outside of WebCore, they should be parent anchored.
+ * accessibility/AXObjectCache.cpp:
+ (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::startOfStyleRange):
+ (WebCore::endOfStyleRange):
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (objectAndOffsetUnignored):
+ * dom/Position.cpp:
+ (WebCore::Position::upstream): Fixed to correctly respect PositionIsAfterAnchor
+ (WebCore::Position::downstream): ditto
+ * dom/Range.cpp:
+ (WebCore::Range::editingStartPosition):
+ * editing/Editor.cpp:
+ (WebCore::Editor::canDeleteRange):
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::doApply):
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
+ (WebCore::SelectionController::setSelectedRange):
+ * editing/TextIterator.cpp:
+ (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::deleteKeyPressed):
+ * editing/VisiblePosition.cpp:
+ (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
+ (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
+ (WebCore::VisiblePosition::canonicalPosition):
+ (WebCore::VisiblePosition::characterAfter):
+ (WebCore::VisiblePosition::localCaretRect):
+ (WebCore::makeRange):
+ (WebCore::startVisiblePosition):
+ (WebCore::endVisiblePosition):
+ (WebCore::setStart):
+ (WebCore::setEnd):
+ (WebCore::isFirstVisiblePositionInNode):
+ (WebCore::isLastVisiblePositionInNode):
+ * editing/VisiblePosition.h:
+ (WebCore::VisiblePosition::VisiblePosition):
+ * editing/htmlediting.cpp:
+ (WebCore::firstInSpecialElement):
+ (WebCore::lastInSpecialElement):
+ (WebCore::visiblePositionBeforeNode):
+ (WebCore::visiblePositionAfterNode):
+ * editing/visible_units.cpp:
+ (WebCore::startPositionForLine):
+ (WebCore::endPositionForLine):
+ (WebCore::previousLinePosition):
+ (WebCore::nextLinePosition):
+ (WebCore::startOfParagraph):
+ (WebCore::endOfParagraph):
+ (WebCore::endOfBlock):
+ (WebCore::startOfDocument):
+ (WebCore::endOfDocument):
+ (WebCore::logicalStartPositionForLine):
+ (WebCore::logicalEndPositionForLine):
+ * page/DOMSelection.cpp:
+ (WebCore::DOMSelection::collapse):
+ (WebCore::DOMSelection::setBaseAndExtent):
+ (WebCore::DOMSelection::setPosition):
+ (WebCore::DOMSelection::extend):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleMousePressEventSingleClick):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::createVisiblePosition):
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::visiblePositionForIndex):
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::selectSubString):
+
+2011-02-08 Michael Saboff <msaboff@apple.com>
+
+ JSC::Bindings m_rootObject->isValid() assert fails when running layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=53716
+
+ Changed ASSERT to be an if for the case where the RuntimeObject was
+ GC'ed before RootObject::invalidate is called. In that case there is
+ no need to remove the RuntimeObject from the RootObject. The isValid()
+ call will be false in this case, but the RuntimeObject has already
+ been removed from the RootObject. Added similar defensive code
+ in RootObject::removeRuntimeObject().
+
+ * bridge/jsc/BridgeJSC.cpp:
+ (JSC::Bindings::Instance::willDestroyRuntimeObject):
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+
+2011-02-08 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for <rdar://problem/8953365> CrashTracer: 14
+ crashes in WebProcess at com.apple.WebCore:
+ -[ScrollKnobAnimation setCurrentProgress:] + 258
+
+ This crash seems to happen when the animation is running
+ and a window is closed. If the ScrollAnimator is destroyed,
+ delegate calls for the animation can still run, so we have
+ to make sure we inform the delegates when the ScrollAnimator
+ is gone, and then we have to null-check it before we do
+ anything with it.
+
+ Remove scrollbarPainterDelegate() since it's not used anymore.
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+
+ Add null-checks for _animator
+ (-[ScrollbarPartAnimation setCurrentProgress:]):
+ (-[ScrollbarPartAnimation scrollAnimatorDestroyed]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
+
+ New function to inform the delegates that the ScrollAnimator
+ is being destroyed.
+ (-[ScrollbarPainterDelegate scrollAnimatorDestroyed]):
+ (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ This code appears to be unused.
+
+ * html/HTMLParserErrorCodes.cpp:
+ * html/HTMLParserErrorCodes.h:
+ * html/HTMLParserQuirks.h:
+ * loader/EmptyClients.h:
+ * page/ChromeClient.h:
+
+2011-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Move scrollbar rendering out of gtk2drawing.c
+ https://bugs.webkit.org/show_bug.cgi?id=52836
+
+ Replace gtk2drawing.c scrollbar rendering with our own version. This
+ is the last use of the Mozilla theme drawing code.
+
+ No new tests. This should not change the rendering of the default
+ theme.
+
+ * platform/gtk/GtkVersioning.h: Add some more backported allocation setters.
+ * platform/gtk/RenderThemeGtk.h: Add a getter for the scrollbar widgets.
+ * platform/gtk/RenderThemeGtk2.cpp: Initialize and add getters for scrollbar widgets.
+ (WebCore::RenderThemeGtk::platformInit): Ditto.
+ (WebCore::RenderThemeGtk::gtkHScrollbar): Ditto.
+ (WebCore::RenderThemeGtk::gtkVScrollbar): Ditto.
+ * platform/gtk/ScrollbarThemeGtk.cpp:
+ (WebCore::ScrollbarThemeGtk::paint): We only repaint the scrolled
+ window background if we are repainting a button or the thumb. In that
+ case also repaint the track rect.
+ * platform/gtk/ScrollbarThemeGtk2.cpp: Port to WidgetRenderingContext.
+ (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk): Ditto.
+ (WebCore::ScrollbarThemeGtk::updateThemeProperties): Ditto.
+ (WebCore::getWidgetForScrollbar): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
+ * platform/gtk/WidgetRenderingContext.cpp: Ditto.
+ (WebCore::WidgetRenderingContext::gtkPaintBox): Added an option which
+ also adjusts a widget allocation according to the paint rect. This is
+ necessary to properly draw scrollbar buttons.
+ * platform/gtk/WidgetRenderingContext.h: Ditto.
+
+2011-02-08 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Inset shadow with large offset renders incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=53882
+
+ Fix an issue with inset shadows, when the shadow offset
+ was larger than the box size. In this case we'd fail to
+ fill the box with the shadow color.
+
+ Test: fast/box-shadow/inset-shadow-large-offset.html
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::areaCastingShadowInHole): Return a rect that covers the area
+ which contributes to the inset shadow.
+
+ (WebCore::RenderBoxModelObject::paintBoxShadow): Use areaCastingShadowInHole()
+ to compute the outerRect.
+
+2011-02-08 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ drawElements should check if a buffer is bound to ELEMENT_ARRAY_BUFFER
+ https://bugs.webkit.org/show_bug.cgi?id=54017
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::drawElements):
+
+2011-01-28 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Change the rest of HTMLMediaElement shadow DOM parts to use shadowPseudoId.
+ https://bugs.webkit.org/show_bug.cgi?id=53190
+
+ This is the second part of refactoring the HTMLMediaElement to use new
+ shadow DOM. The changes are mainly mechanical, except for needing to
+ add a new method to RenderTheme, which indicates whether or not status
+ display is being used by it. Previously, we relied on existence of a cached
+ pseudo style.
+
+ Refactoring, covered by existing tests.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId): Removed now-unused enum values.
+ (WebCore::nameToPseudoTypeMap): Ditto.
+ (WebCore::CSSSelector::extractPseudoType): Ditto.
+ * css/CSSSelector.h: Ditto.
+ * html/shadow/MediaControls.cpp:
+ (WebCore::MediaControls::createPanel): Changed to use the newly-added MediaControlPanelElement.
+ (WebCore::MediaControls::createCurrentTimeDisplay): Changed to use the newly-added
+ MediaControlCurrentTimeDisplayElement.
+ (WebCore::MediaControls::createTimeRemainingDisplay): Changed to use the newly-added
+ MediaControlTimeRemainingDisplayElement.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlShadowRootElement::updateStyle): Changed to use the
+ standard style resolution.
+ (WebCore::MediaControlShadowRootElement::shadowPseudoId): Added.
+ (WebCore::MediaControlElement::MediaControlElement): Removed the switch statement
+ that is no longer necessary.
+ (WebCore::MediaControlElement::styleForElement): Changed to use the standard
+ style resolution.
+ (WebCore::MediaControlPanelElement::MediaControlPanelElement): Added.
+ (WebCore::MediaControlPanelElement::create): Added.
+ (WebCore::MediaControlPanelElement::displayType): Added.
+ (WebCore::MediaControlPanelElement::shadowPseudoId): Added.
+ (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement):
+ Removed PseudoId constructor arg.
+ (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded):
+ Changed to use the newly-plumbed usesMediaControlStatusDisplay helper.
+ (WebCore::MediaControlTimelineContainerElement::displayType): Added.
+ (WebCore::MediaControlTimelineContainerElement::shadowPseudoId): Added.
+ (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
+ Removed PseudoId constructor arg.
+ (WebCore::MediaControlVolumeSliderContainerElement::displayType): Added.
+ (WebCore::MediaControlVolumeSliderContainerElement::shadowPseudoId): Added.
+ (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
+ Removed PseudoId constructor arg.
+ (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Changed to
+ use the newly-plumbed usesMediaControlStatusDisplay helper.
+ (WebCore::MediaControlStatusDisplayElement::displayType): Added.
+ (WebCore::MediaControlStatusDisplayElement::shadowPseudoId): Added.
+ (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
+ Removed PseudoId constructor arg.
+ (WebCore::MediaControlTimeRemainingDisplayElement::create): Added.
+ (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement): Added.
+ (WebCore::MediaControlTimeRemainingDisplayElement::displayType): Added.
+ (WebCore::MediaControlTimeRemainingDisplayElement::shadowPseudoId): Added.
+ (WebCore::MediaControlCurrentTimeDisplayElement::create): Added.
+ (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement): Added.
+ (WebCore::MediaControlCurrentTimeDisplayElement::displayType): Added.
+ (WebCore::MediaControlCurrentTimeDisplayElement::shadowPseudoId): Added.
+ * rendering/MediaControlElements.h: Added/changed defs accordingly.
+ * rendering/RenderTheme.h:
+ (WebCore::RenderTheme::usesMediaControlStatusDisplay): Added.
+ * rendering/RenderThemeMac.h: Added def.
+ * rendering/RenderThemeMac.mm:
+ (WebCore::RenderThemeMac::usesMediaControlStatusDisplay): Added.
+ * rendering/style/RenderStyleConstants.h: Removed now-unused enum values.
+
+2011-02-08 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ Fix pop-up button text not rendered correctly according to its direction
+ in <option>.
+ https://bugs.webkit.org/show_bug.cgi?id=53642
+
+ In adjustInnerStyle(), if m_innerBlock's direction or unicode-bidi
+ changes, set it needs layout.
+
+ Test: fast/text/international/pop-up-button-text-alignment-and-direction.html
+
+ * rendering/RenderMenuList.cpp:
+ (WebCore::RenderMenuList::adjustInnerStyle):
+
+2011-02-08 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed build fix for Qt-minimal.
+
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::hasFrontend):
+
+2011-02-02 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53169
+
+ All the Inspector API for WebCore has two parts.
+ The first one is InspectorInstrumentation for WebCore.
+ The second is InspectorController for WebKit.
+ InspectorAgent was produced by renaming original InspectorController.
+ This patch extracts WebKit related methods from InspectorAgent to InspectorController.
+
+ * WebCore.exp.in:
+ * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
+ * html/HTMLDocument.cpp:
+ (WebCore::HTMLDocument::createParser):
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::~InspectorAgent):
+ (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
+ (WebCore::InspectorAgent::inspect):
+ (WebCore::InspectorAgent::handleMousePress):
+ (WebCore::InspectorAgent::didClearWindowObjectInWorld):
+ (WebCore::InspectorAgent::setFrontend):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::resourceAgent):
+ (WebCore::InspectorAgent::createFrontendLifetimeAgents):
+ (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
+ (WebCore::InspectorAgent::populateScriptObjects):
+ (WebCore::InspectorAgent::pushDataCollectedOffline):
+ (WebCore::InspectorAgent::restoreProfiler):
+ (WebCore::InspectorAgent::startTimelineProfiler):
+ (WebCore::PostWorkerNotificationToFrontendTask::performTask):
+ (WebCore::InspectorAgent::didOpenDatabase):
+ (WebCore::InspectorAgent::didUseDOMStorage):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::enabled):
+ * inspector/InspectorAgent.h:
+ (WebCore::InspectorAgent::frontend):
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ (WebCore::InspectorController::~InspectorController):
+ (WebCore::InspectorController::setInspectorFrontendClient):
+ (WebCore::InspectorController::hasInspectorFrontendClient):
+ (WebCore::InspectorController::didClearWindowObjectInWorld):
+ (WebCore::InspectorController::startTimelineProfiler):
+ (WebCore::InspectorController::stopTimelineProfiler):
+ (WebCore::InspectorController::connectFrontend):
+ (WebCore::InspectorController::disconnectFrontend):
+ (WebCore::InspectorController::disconnectFrontendImpl):
+ (WebCore::InspectorController::show):
+ (WebCore::InspectorController::close):
+ (WebCore::InspectorController::restoreInspectorStateFromCookie):
+ (WebCore::InspectorController::evaluateForTestInFrontend):
+ (WebCore::InspectorController::drawNodeHighlight):
+ (WebCore::InspectorController::inspect):
+ (WebCore::InspectorController::enabled):
+ (WebCore::InspectorController::showPanel):
+ (WebCore::InspectorController::frontendLoaded):
+ (WebCore::InspectorController::timelineProfilerEnabled):
+ (WebCore::InspectorController::enableProfiler):
+ (WebCore::InspectorController::disableProfiler):
+ (WebCore::InspectorController::profilerEnabled):
+ (WebCore::InspectorController::debuggerEnabled):
+ (WebCore::InspectorController::showAndEnableDebugger):
+ (WebCore::InspectorController::disableDebugger):
+ (WebCore::InspectorController::startUserInitiatedProfiling):
+ (WebCore::InspectorController::stopUserInitiatedProfiling):
+ (WebCore::InspectorController::isRecordingUserInitiatedProfile):
+ (WebCore::InspectorController::setInspectorExtensionAPI):
+ (WebCore::InspectorController::resume):
+ (WebCore::InspectorController::hideHighlight):
+ (WebCore::InspectorController::dispatchMessageFromFrontend):
+ * inspector/InspectorController.h:
+ (WebCore::InspectorController::inspectorClient):
+ (WebCore::InspectorController::inspectedPage):
+ (WebCore::InspectorController::hasFrontend):
+ * inspector/InspectorFrontendClientLocal.cpp:
+ (WebCore::InspectorFrontendClientLocal::sendMessageToBackend):
+ * inspector/InspectorFrontendHost.cpp:
+ (WebCore::InspectorFrontendHost::setExtensionAPI):
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
+ (WebCore::InspectorInstrumentation::profilerEnabledImpl):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::hasFrontend):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
+
+2011-02-08 George Wright <gwright@rim.com>
+
+ Reviewed by Adam Barth.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53949
+
+ Ensure that we pack the colour byte order correctly for Skia using
+ Skia's SkPackARGB32 function.
+
+ * platform/image-decoders/ImageDecoder.h:
+ (WebCore::ImageFrame::setRGBA):
+
+2011-02-08 George Wright <gwright@rim.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53951
+
+ Ensure we do not pass (-1, -1) sized rects to ImageBuffer but instead
+ pass the full image dimensions.
+
+ * platform/graphics/GraphicsContext.cpp:
+ (WebCore::GraphicsContext::drawImageBuffer):
+
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WIN] Add missing includes and forward declarations for DownloadBundle
+ https://bugs.webkit.org/show_bug.cgi?id=53881
+
+ * platform/network/cf/DownloadBundle.h:
+ * platform/network/win/DownloadBundleWin.cpp:
+ (WebCore::DownloadBundle::appendResumeData):
+
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WIN] Add missing include in WKCAImageQueue
+ https://bugs.webkit.org/show_bug.cgi?id=53890
+
+ * platform/graphics/win/WKCAImageQueue.cpp:
+
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WIN] Add missing includes and forward declarations for CFNetwork
+ https://bugs.webkit.org/show_bug.cgi?id=53883
+
+ * platform/network/cf/DNSCFNet.cpp:
+ * platform/network/cf/LoaderRunLoopCF.cpp:
+ * platform/network/cf/LoaderRunLoopCF.h:
+ * platform/network/cf/ProxyServerCFNet.cpp:
+ * platform/network/cf/SocketStreamHandle.h:
+ * platform/network/cf/SocketStreamHandleCFNet.cpp:
+
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77870.
+
+ * platform/DragImage.cpp: Enable createDragImageForLink for WinCE.
+
+2011-02-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: open network resource url in new tab upon double click.
+ https://bugs.webkit.org/show_bug.cgi?id=53930
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkDataGridNode.prototype.createCells):
+ (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
+
+2011-02-08 Yonathan Randolph <yonathan@gmail.com>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: $x: any node should work in optional context parameter.
+ https://bugs.webkit.org/show_bug.cgi?id=50138
+
+ * inspector/InjectedScriptSource.js:
+
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77870.
+
+ Remove the global namespace prefix from GlobalLock/GlobalUnlock.
+
+ * platform/win/ClipboardUtilitiesWin.cpp:
+
+2011-02-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed: re-apply r77924.
+
+ Test: inspector/console-api-on-call-frame.html
+
+ * inspector/InjectedScriptSource.js:
+ * inspector/front-end/ExtensionServer.js:
+ (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
+
+2011-02-08 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ REGRESSION(r77312): Unbreak TiledBackingStore.
+
+ Due to an off-by-one error, we were no longer rendering the
+ rightmost column and bottom row of tiles.
+
+ Covered by tst_QGraphicsWebView::widgetsRenderingThroughCache().
+
+ * platform/graphics/TiledBackingStore.cpp:
+ (WebCore::TiledBackingStore::invalidate):
+ (WebCore::TiledBackingStore::updateTileBuffers):
+ (WebCore::TiledBackingStore::paint):
+ (WebCore::TiledBackingStore::createTiles):
+
+2011-02-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77924.
+ http://trac.webkit.org/changeset/77924
+ https://bugs.webkit.org/show_bug.cgi?id=53997
+
+ Breaks inspector tests. (Requested by pfeldman on #webkit).
+
+ * inspector/InjectedScriptSource.js:
+ (.):
+ ():
+
+2011-02-08 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [refacotring] merge InspectorAgent::willSendRequest() into InspectorResourceAgent
+ https://bugs.webkit.org/show_bug.cgi?id=53789
+ - perform UserAgent override via InspectorInstrumentation
+ - move adding extra request headers to InspectorResourceAgent
+ - simplified things in InspectorState
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::applyUserAgentOverride):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
+ (WebCore::InspectorInstrumentation::willSendRequestImpl):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::applyUserAgentOverride):
+ * inspector/InspectorResourceAgent.cpp:
+ (WebCore::InspectorResourceAgent::setExtraHeaders):
+ (WebCore::InspectorResourceAgent::willSendRequest):
+ * inspector/InspectorResourceAgent.h:
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ (WebCore::InspectorState::restoreFromInspectorCookie):
+ (WebCore::InspectorState::updateCookie):
+ (WebCore::InspectorState::setValue):
+ (WebCore::InspectorState::getBoolean):
+ (WebCore::InspectorState::getString):
+ (WebCore::InspectorState::getLong):
+ (WebCore::InspectorState::getObject):
+ * inspector/InspectorState.h:
+ (WebCore::InspectorState::setObject):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::userAgent):
+
+2011-02-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: do not hide scope variables with command line api.
+ https://bugs.webkit.org/show_bug.cgi?id=53497
+
+ Test: inspector/console-api-on-call-frame.html
+
+ * inspector/InjectedScriptSource.js:
+
+2011-02-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: ignore cache upon reload via Ctrl(Cmd)+Shift+R.
+ https://bugs.webkit.org/show_bug.cgi?id=53914
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::reloadPage):
+ * inspector/InspectorAgent.h:
+ * inspector/front-end/AuditsPanel.js:
+ (WebInspector.AuditsPanel.prototype._reloadResources):
+ * inspector/front-end/ExtensionServer.js:
+ (WebInspector.ExtensionServer.prototype._onReload):
+ * inspector/front-end/inspector.js:
+ (WebInspector.documentKeyDown):
+
+2011-02-08 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ Skip over sibling selectors when collecting descendant selector hashes
+ https://bugs.webkit.org/show_bug.cgi?id=53987
+
+ Skip instead of bailing out. This will allow optimizing some sibling selector cases.
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::RuleData::RuleData):
+ (WebCore::RuleData::collectIdentifierHashes):
+ (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
+ * css/CSSStyleSelector.h:
+
+2011-02-07 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by Jian Li.
+
+ Fix null deref in DOMURL
+ https://bugs.webkit.org/show_bug.cgi?id=53811
+
+ Test: fast/files/domurl-script-execution-context-crash.html
+
+ * html/DOMURL.cpp:
+ (WebCore::DOMURL::DOMURL):
+
+2011-02-07 Mark Rowe <mrowe@apple.com>
+
+ Fix the 32-bit build.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar): Remove some extraneous characters.
+ (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar): Ditto.
+
+2011-02-07 Xiyuan Xia <xiyuan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Select popup box does not align with select button when appearance is not "menulist".
+ https://bugs.webkit.org/show_bug.cgi?id=53942
+
+ Added manual test select_webkit_appearance_off_popup_alignment.html.
+
+ * manual-tests/select_webkit_appearance_off_popup_alignment.html: Added.
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::layout):
+
+2011-02-07 Aparna Nandyal <aparna.nand@wipro.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] - Context menu needs "Copy" as well when the selected text is a link.
+ https://bugs.webkit.org/show_bug.cgi?id=40983
+
+ Added copy option for Qt platform if selection is a link.
+ Added a test in tst_qwebpage.cpp.
+
+ * page/ContextMenuController.cpp:
+ (WebCore::ContextMenuController::populate):
+
+2011-02-07 Mike Reed <reed@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add compile-time flag ENABLE(SKIA_GPU) to use Skia's gpu backend
+ when drawing <canvas>. Disabled by default.
+
+ No new tests. existing canvas layouttests apply
+
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::publishToPlatformLayer):
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ (WebCore::GetGlobalGrContext):
+ (WebCore::PlatformContextSkia::isPrinting):
+ (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
+ (WebCore::PlatformContextSkia::syncSoftwareCanvas):
+
+2011-02-07 Jay Civelli <jcivelli@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Removing unused code from PopupMenuChromium.
+ https://bugs.webkit.org/show_bug.cgi?id=53866
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::layout):
+ (WebCore::PopupMenuChromium::show):
+ * platform/chromium/PopupMenuChromium.h:
+
+2011-02-07 Kenichi Ishibashi <bashi@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ HTMLOutputElement::childrenChanged() should call its base class childrenChanged()
+ https://bugs.webkit.org/show_bug.cgi?id=53791
+
+ Calls HTMLFormControlElement::childrenChanged() in HTMLOutputElement::childrenChanged().
+
+ Test: fast/dom/HTMLOutputElement/htmloutputelement-children-removed.html
+
+ * html/HTMLOutputElement.cpp:
+ (WebCore::HTMLOutputElement::childrenChanged): Calls super class's
+ childrenChanged().
+
+2011-02-07 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] cookiesEnabled could create the cookieJar on the wrong thread.
+ https://bugs.webkit.org/show_bug.cgi?id=52289
+
+ Use the QtNAMThreadSafeProxy to make sure the cookie jar is created
+ in the same thread as the QNetworkAccessManager.
+
+ * platform/network/qt/QtNAMThreadSafeProxy.cpp:
+ (WebCore::QtNAMThreadSafeProxy::QtNAMThreadSafeProxy):
+ (WebCore::QtNAMThreadSafeProxy::hasCookieJar):
+ * platform/network/qt/QtNAMThreadSafeProxy.h:
+ * platform/qt/CookieJarQt.cpp:
+ (WebCore::cookiesEnabled):
+
+2011-02-07 Alexey Marinichev <amarinichev@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Hook up WebGraphicsContext3D::setContextLostCallback.
+ https://bugs.webkit.org/show_bug.cgi?id=53722
+
+ Test: fast/canvas/webgl/context-lost.html, comment out the line with
+ extension.loseContext() and kill the GPU process "Lose context"
+ message shows up.
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContextLostCallback::WebGLRenderingContextLostCallback):
+ (WebCore::WebGLRenderingContextLostCallback::onContextLost):
+ (WebCore::WebGLRenderingContextLostCallback::~WebGLRenderingContextLostCallback):
+ (WebCore::WebGLRenderingContext::initializeNewContext):
+ (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
+ * platform/graphics/GraphicsContext3D.h:
+ (WebCore::GraphicsContext3D::ContextLostCallback::~ContextLostCallback):
+ * platform/graphics/mac/GraphicsContext3DMac.mm:
+ (WebCore::GraphicsContext3D::setContextLostCallback): stub
+ * platform/graphics/qt/GraphicsContext3DQt.cpp:
+ (WebCore::GraphicsContext3D::setContextLostCallback): stub
+
+2011-02-07 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add missing PaintInfo include in RenderThemeWin.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=53885
+
+ * rendering/RenderThemeWin.cpp:
+
+2011-02-07 Qi Zhang <qi.2.zhang@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
+ https://bugs.webkit.org/show_bug.cgi?id=52974
+
+ Add ContextMenuItemTagCopyImageUrlToClipboard into standard action but Qt platform specific.
+
+ * page/ContextMenuController.cpp:
+ (WebCore::ContextMenuController::contextMenuItemSelected):
+ (WebCore::ContextMenuController::populate):
+ (WebCore::ContextMenuController::checkOrEnableIfNeeded):
+ * platform/ContextMenuItem.h:
+ * platform/LocalizationStrategy.h:
+ * platform/LocalizedStrings.cpp:
+ (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
+ * platform/LocalizedStrings.h:
+
+2011-02-07 Kenichi Ishibashi <bashi@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ HTMLFormElement::formElementIndex() returns a bad index into a vector of form associated elements
+ https://bugs.webkit.org/show_bug.cgi?id=53970
+
+ Adds HTMLObjectElement::virtualForm() to make HTMLObjectElement::form()
+ return the right value.
+
+ Test: fast/dom/HTMLObjectElement/form/nested-form-element.html
+
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::virtualForm): Added.
+ * html/HTMLObjectElement.h: Added virtualForm().
+
+2011-02-07 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed Leopard build fix.
+
+ * WebCore.xcodeproj/project.pbxproj: let XCode have developmentRegion.
+ * platform/mac/DragImageMac.mm:
+ (WebCore::webkit_CGCeiling): Cast the return value of ceil to CGFloat.
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixing a build break on Mac caused by http://trac.webkit.org/changeset/77874
+
+ When moving code from WebKit to WebCore we needed to move some additional
+ functions previously in NSStringExtras.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/mac/DragImageMac.mm:
+ (WebCore::fontFromNSFont):
+ (WebCore::canUseFastRenderer):
+ (WebCore::widthWithFont):
+ (WebCore::webkit_CGCeiling):
+ (WebCore::drawAtPoint):
+ (WebCore::drawDoubledAtPoint):
+ (WebCore::createDragImageForLink):
+
+2011-02-07 Lucas Forschler <lforschler@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Tr #2, Fix the Leopard 32bit debug build.
+
+ No new tests required.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * accessibility/AccessibilityAllInOne.cpp:
+
+2011-02-07 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8946961> Fix repaint problems
+ with WKScrollbarPainter scrollers while resizing the window
+
+ Remove setPainterForPainterController() and
+ removePainterFromPainterController() since they aren't
+ used anymore.
+ * platform/mac/ScrollAnimatorMac.h:
+
+ Return early if they alpha hasn't changed.
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
+
+ If we're in a live resize, restore alpha to 1.
+ (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
+ (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
+
+2011-02-07 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=53950
+ USE_WK_SCROLLBAR_PAINTER in ScrollbarThemeMac should be in
+ Platform.h instead
+
+ Use hot new USE(WK_SCROLLBAR_PAINTER) from Platform.h rather
+ than the silly, old in-file #define.
+
+ * platform/mac/ScrollbarThemeMac.mm:
+ (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
+ (WebCore::updateArrowPlacement):
+ (WebCore::ScrollbarThemeMac::registerScrollbar):
+ (WebCore::ScrollbarThemeMac::scrollbarThickness):
+ (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
+ (WebCore::ScrollbarThemeMac::hasThumb):
+ (WebCore::ScrollbarThemeMac::minimumThumbLength):
+ (WebCore::ScrollbarThemeMac::paint):
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+ <rdar://problem/8514409>
+
+ * loader/EmptyClients.h: Removed createDragImageFromLink.
+ * page/DragClient.h: Ditto.
+ * page/DragController.cpp:
+ (WebCore::DragController::startDrag): changed call to createDragImageFromLink.
+ * platform/DragImage.h:
+ * platform/mac/DragImageMac.mm:
+ (WebCore::createDragImageForLink): Moved from DragClient.
+ * platform/win/ClipboardUtilitiesWin.cpp: Added a series of functions
+ to de-serialize the drag data from the map into an IDataObject.
+ (WebCore::getWebLocData):
+ (WebCore::texthtmlFormat):
+ (WebCore::createGlobalData):
+ (WebCore::getFullCFHTML):
+ (WebCore::urlWFormat):
+ (WebCore::urlFormat):
+ (WebCore::filenameWFormat):
+ (WebCore::filenameFormat):
+ (WebCore::htmlFormat):
+ (WebCore::smartPasteFormat):
+ (WebCore::getURL):
+ (WebCore::getPlainText):
+ (WebCore::getTextHTML):
+ (WebCore::ClipboardDataItem::ClipboardDataItem):
+ (WebCore::getStringData):
+ (WebCore::getUtf8Data):
+ (WebCore::getCFData):
+ (WebCore::setUCharData):
+ (WebCore::setCharData):
+ (WebCore::setCFData):
+ (WebCore::getClipboardMap):
+ (WebCore::getClipboardData):
+ (WebCore::setClipboardData):
+ * platform/win/ClipboardUtilitiesWin.h:
+ * platform/win/DragImageWin.cpp: Moved createDragImageForLink from DragClient
+ to a platform specific file in WebCore. It makes a lot more sense here, since
+ the drag image is always created in WebCore for all the other content types
+ except for links.
+ (WebCore::dragLabelFont):
+ (WebCore::createDragImageForLink):
+ * platform/win/WCDataObject.cpp: Added new way to
+ construct a WCDataObject from a DragDataMap.
+ (WebCore::WCDataObject::createInstance):
+ (WebCore::WCDataObject::clearData):
+ * platform/win/WCDataObject.h:
+
+2011-02-07 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77848.
+ http://trac.webkit.org/changeset/77848
+ https://bugs.webkit.org/show_bug.cgi?id=53963
+
+ caused 6 test failures (Requested by othermaciej on #webkit).
+
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
+
+2011-02-04 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Add shaders for GPU accelerated path rendering
+ https://bugs.webkit.org/show_bug.cgi?id=45520
+
+ Refactored SolidFillShader and TexShader to call new
+ generateVertex() and generateFragment() methods on base Shader
+ class, and added support for the Loop/Blinn shaders. Refactored
+ Loop/Blinn shader classes to derive from Shader.
+
+ Tested these changes with several of the IE9 Testdrive demos with
+ accelerated 2D canvas enabled, as well as a full layout test run
+ with --platform chromium-gpu.
+
+ * platform/graphics/gpu/LoopBlinnShader.cpp: Added.
+ (WebCore::LoopBlinnShader::LoopBlinnShader):
+ (WebCore::LoopBlinnShader::use):
+ * platform/graphics/gpu/LoopBlinnShader.h: Added.
+ * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp: Added.
+ (WebCore::LoopBlinnSolidFillShader::create):
+ (WebCore::LoopBlinnSolidFillShader::LoopBlinnSolidFillShader):
+ (WebCore::LoopBlinnSolidFillShader::use):
+ * platform/graphics/gpu/LoopBlinnSolidFillShader.h: Added.
+ * platform/graphics/gpu/Shader.cpp:
+ (WebCore::Shader::affineTo4x4):
+ (WebCore::Shader::loadShader):
+ (WebCore::Shader::loadProgram):
+ (WebCore::Shader::generateVertex):
+ (WebCore::Shader::generateFragment):
+ * platform/graphics/gpu/Shader.h:
+ * platform/graphics/gpu/SolidFillShader.cpp:
+ (WebCore::SolidFillShader::create):
+ * platform/graphics/gpu/TexShader.cpp:
+ (WebCore::TexShader::TexShader):
+ (WebCore::TexShader::create):
+
+2011-02-07 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ <rdar://problem/8946023> REGRESSION (r76674): SVG + BiDi text broken (text-intro-05-t.svg)
+ https://bugs.webkit.org/show_bug.cgi?id=53480
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): m_indexEnd should be an
+ offset into m_characters, not into the run’s characters.
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Ditto.
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add bundle API to get the background color of a frame
+ <rdar://problem/8962670>
+ https://bugs.webkit.org/show_bug.cgi?id=53952
+
+ * WebCore.exp.in: Add export.
+
+2011-02-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Assertion failure in ~JSGlobalObject when loading apple.com HTML5
+ transitions demo page
+ https://bugs.webkit.org/show_bug.cgi?id=53853
+
+ This was a long-standing bookkeeping bug uncovered by some heap refactoring.
+
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::createImageBuffer):
+ * html/HTMLImageLoader.cpp:
+ (WebCore::HTMLImageLoader::notifyFinished):
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::dropProtection): Take the JSLock before
+ reporting extra cost to the JavaScriptCore heap, since all use of
+ JavaScriptCore is supposed to be guarded by JSLock.
+
+2011-02-07 Jian Li <jianli@chromium.org>
+
+ Reviewed by David Levin.
+
+ Intermittent crash in fast/files/read-blob-async.html on the GTK+ debug
+ bots
+ https://bugs.webkit.org/show_bug.cgi?id=53104
+
+ Covered by the existing tests.
+
+ * fileapi/FileStreamProxy.cpp:
+ (WebCore::FileStreamProxy::startOnFileThread):
+ * platform/network/BlobRegistryImpl.cpp:
+ (WebCore::BlobRegistryImpl::createResourceHandle):
+ * platform/network/BlobResourceHandle.cpp:
+ (WebCore::BlobResourceHandle::BlobResourceHandle):
+ (WebCore::BlobResourceHandle::cancel):
+ (WebCore::delayedStartBlobResourceHandle):
+ (WebCore::BlobResourceHandle::start): Keep BlobResourceHandle alive
+ till the delay function is called.
+ (WebCore::BlobResourceHandle::doStart):
+ (WebCore::doNotifyFinish):
+ (WebCore::BlobResourceHandle::notifyFinish): Notify the client via the
+ standalone function to prevent the handle from being disposed immediately
+ by the client which will make the calls in the stack that're still bound
+ to the handle suffer.
+ * platform/network/BlobResourceHandle.h:
+ * platform/network/ResourceHandle.h: Change cancel() to virtual so that
+ BlobResourceHandle::cancel will be called when we abort a FileReader.
+
+2011-02-07 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77845.
+ http://trac.webkit.org/changeset/77845
+ https://bugs.webkit.org/show_bug.cgi?id=53946
+
+ build failure (Requested by lforschler_ on #webkit).
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * accessibility/AccessibilityAllInOne.cpp:
+
+2011-02-07 Darin Adler <darin@apple.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=53939
+ fast/css/text-overflow-ellipsis.html failure after r77818/77819
+
+ * platform/text/TextCodecICU.cpp:
+ (WebCore::TextCodecICU::registerExtendedEncodingNames):
+ Add back the "utf8" synonym for "UTF-8".
+
+2011-02-07 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Remove an unnecessary extra computeLogicalWidth() from line layout.
+
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
+
+2011-02-07 Lucas Forschler <lforschler@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Fix Leopard Intel Debug Build.
+ <rdar://problem/8953606> REGRESSION: Can't link WebCore on 32-bit Leopard (53681)
+ This could potentially break windows, since I had to change #include <filename> to #include "filename"
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * accessibility/AccessibilityAllInOne.cpp:
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Fix build.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
+ (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
+ (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
+ (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Add mechanism to inform the ScrollAnimator when Scrollbars are added
+ and removed.
+
+ * platform/ScrollAnimator.h:
+ (WebCore::ScrollAnimator::didAddVerticalScrollbar):
+ (WebCore::ScrollAnimator::willRemoveVerticalScrollbar):
+ (WebCore::ScrollAnimator::didAddHorizontalScrollbar):
+ (WebCore::ScrollAnimator::willRemoveHorizontalScrollbar):
+ Make virtual to allow platform specific overrides.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::setHasHorizontalScrollbar):
+ (WebCore::ScrollView::setHasVerticalScrollbar):
+ Call new ScrollableArea functions.
+
+ * platform/ScrollableArea.cpp:
+ (WebCore::ScrollableArea::didAddVerticalScrollbar):
+ (WebCore::ScrollableArea::willRemoveVerticalScrollbar):
+ (WebCore::ScrollableArea::didAddHorizontalScrollbar):
+ (WebCore::ScrollableArea::willRemoveHorizontalScrollbar):
+ * platform/ScrollableArea.h:
+ Pipe to ScrollAnimator.
+
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
+ (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
+ (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
+ (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
+ * platform/mac/ScrollbarThemeMac.h:
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::registerScrollbar):
+ (WebCore::ScrollbarThemeMac::unregisterScrollbar):
+ (WebCore::ScrollbarThemeMac::painterForScrollbar):
+ Move painter delegate registration to the new didAdd/willRemove functions.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Missing text match markers with accelerated content
+ https://bugs.webkit.org/show_bug.cgi?id=53934
+
+ When doing the fake paint that recomputes the text match rects, we need to
+ flatten compositing layers, otherwise the rects won't be updated until the next paint call.
+
+ (This worked by accident in WebKit1 because Safari calls -[NSWindow displayIfNeeded] on the containing
+ window before asking for the text match rects).
+
+ * editing/Editor.cpp:
+ (WebCore::Editor::countMatchesForText):
+
+2011-02-07 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Andreas Kling.
+
+ REGRESSION(r77740): CSSStyleSelector accessing deleted memory for svg/dom/use-transform.svg
+ https://bugs.webkit.org/show_bug.cgi?id=53900
+
+ Ignore link elements in shadow trees.
+
+ * dom/Element.cpp:
+ (WebCore::StyleSelectorParentPusher::StyleSelectorParentPusher):
+ (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):
+
+ Some asserts to catch cases like this.
+
+ (WebCore::Element::attach):
+ (WebCore::Element::recalcStyle):
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::HTMLLinkElement):
+ (WebCore::HTMLLinkElement::process):
+ (WebCore::HTMLLinkElement::insertedIntoDocument):
+ (WebCore::HTMLLinkElement::removedFromDocument):
+ * html/HTMLLinkElement.h:
+
+2011-02-07 Darin Adler <darin@apple.com>
+
+ Turn UTF-8 decoder off for now so we can look into failing tests
+ without leaving the tree red.
+
+ * platform/text/TextCodecICU.cpp:
+ (WebCore::TextCodecICU::registerBaseEncodingNames): Reverting
+ earlier change so this can handle UTF-8.
+ (WebCore::TextCodecICU::registerBaseCodecs): Ditto.
+ (WebCore::TextCodecICU::registerExtendedEncodingNames): Ditto.
+ (WebCore::TextCodecICU::registerExtendedCodecs): Ditto.
+ * platform/text/TextCodecICU.h: Ditto.
+ * platform/text/TextEncodingRegistry.cpp:
+ (WebCore::buildBaseTextCodecMaps): Ditto.
+ (WebCore::extendTextCodecMaps): Ditto.
+ * platform/text/brew/TextCodecBrew.cpp:
+ (WebCore::TextCodecBrew::registerBaseEncodingNames): Ditto.
+ (WebCore::TextCodecBrew::registerBaseCodecs): Ditto.
+ (WebCore::TextCodecBrew::registerExtendedEncodingNames): Ditto.
+ (WebCore::TextCodecBrew::registerExtendedCodecs): Ditto.
+ * platform/text/brew/TextCodecBrew.h: Ditto.
+ * platform/text/gtk/TextCodecGtk.cpp:
+ (WebCore::TextCodecGtk::registerBaseEncodingNames): Ditto.
+ (WebCore::TextCodecGtk::registerBaseCodecs): Ditto.
+ * platform/text/wince/TextCodecWinCE.cpp:
+ (WebCore::TextCodecWinCE::registerBaseEncodingNames): Ditto.
+ (WebCore::TextCodecWinCE::registerBaseCodecs): Ditto.
+ (WebCore::TextCodecWinCE::registerExtendedEncodingNames): Ditto.
+ (WebCore::TextCodecWinCE::registerExtendedCodecs): Ditto.
+ * platform/text/wince/TextCodecWinCE.h: Ditto.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Don't exclude overlay scrollers from the page overlay bounds
+ https://bugs.webkit.org/show_bug.cgi?id=53924
+
+ Export ScrollbarTheme::nativeTheme.
+
+ * WebCore.exp.in:
+
+2011-02-07 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Crash in glDrawArrays with NaCl crystal model
+ https://bugs.webkit.org/show_bug.cgi?id=52831
+
+ * html/canvas/WebGLRenderingContext.cpp: Allocate large enough buffer for atttrib0 if it's enabled and not used.
+ (WebCore::WebGLRenderingContext::initVertexAttrib0):
+ (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
+ * html/canvas/WebGLRenderingContext.h:
+
+2011-02-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WAI-ARIA @aria-sort not exposed on rowheader and columnheader roles.
+ https://bugs.webkit.org/show_bug.cgi?id=53842
+
+ Test: platform/mac/accessibility/aria-sort.html
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::sortDirection):
+ * accessibility/AccessibilityObject.h:
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
+ (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
+ * html/HTMLAttributeNames.in:
+
+2011-02-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Add built-in decoder for UTF-8 for improved performance
+ https://bugs.webkit.org/show_bug.cgi?id=53898
+
+ Correct behavior is covered by existing tests.
+
+ * Android.mk: Added TextCodecUTF8.
+ * CMakeLists.txt: Ditto.
+ * GNUmakefile.am: Ditto.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+
+ * platform/text/TextCodecICU.cpp: Removed registration of UTF-8
+ since that's now handled by the built-in UTF-8 codec.
+ (WebCore::TextCodecICU::registerEncodingNames): Renamed to remove
+ the word "extended" since all codecs from ICU are now extended.
+ (WebCore::TextCodecICU::registerCodecs): Ditto.
+ * platform/text/TextCodecICU.h: Ditto.
+
+ * platform/text/TextCodecUTF16.cpp:
+ (WebCore::TextCodecUTF16::decode): Added a FIXME about missing
+ error handling.
+
+ * platform/text/TextCodecUTF8.cpp: Added.
+ * platform/text/TextCodecUTF8.h: Added.
+
+ * platform/text/TextEncodingRegistry.cpp:
+ (WebCore::buildBaseTextCodecMaps): Added TextCodecUTF8, and
+ removed TextCodecICU, TextCodecBrew, and TextCodecWinCE.
+ (WebCore::extendTextCodecMaps): Updated names for
+ TextCodecICU and TextCodecWinCE.
+
+ * platform/text/brew/TextCodecBrew.cpp:
+ (WebCore::TextCodecBrew::registerEncodingNames): Renamed to remove
+ the word "extended" since all codecs from Brew are now extended.
+ (WebCore::TextCodecBrew::registerCodecs): Ditto.
+ * platform/text/brew/TextCodecBrew.h: Ditto.
+
+ * platform/text/gtk/TextCodecGtk.cpp:
+ (WebCore::TextCodecGtk::registerBaseEncodingNames): Removed
+ registration of UTF-8. It's questionable whether the other codecs
+ here are really basic. If we think they qualify, then we should
+ register them on other platforms, not just GTK.
+ (WebCore::TextCodecGtk::registerBaseCodecs): Ditto.
+
+ * platform/text/wince/TextCodecWinCE.cpp:
+ (WebCore::getCodePage): Removed special case for UTF-8 since we
+ no longer use this codec for UTF-8.
+ (WebCore::TextCodecWinCE::registerEncodingNames): Renamed to remove
+ the word "extended" since all codecs from WinCE are now extended.
+ (WebCore::TextCodecWinCE::registerCodecs): Ditto.
+ * platform/text/wince/TextCodecWinCE.h: Ditto.
+
+2011-02-07 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [Gtk] atk_text_get_caret_offset fails for list items
+ https://bugs.webkit.org/show_bug.cgi?id=53436
+
+ Consider list item markers when calculating the offset.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_text_get_caret_offset): Adjust the offset
+ with the item marker's length for list items.
+ (webkit_accessible_text_set_caret_offset): Replace usage of
+ g_utf8_strlen() by calling to markerText.length().
+
+2011-02-07 Yi Shen <yi.4.shen@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Fix LayoutTests/media/restore-from-page-cache.html
+ https://bugs.webkit.org/show_bug.cgi?id=53621
+
+ Changed the networkState to MediaPlayer::Loaded when
+ MediaPlayerPrivateQt has enough data.
+
+ Test: media/restore-from-page-cache.html
+
+ * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
+ (WebCore::MediaPlayerPrivateQt::updateStates):
+
+2011-01-31 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: implement beautification of scripts inlined in html documents.
+ https://bugs.webkit.org/show_bug.cgi?id=52706
+
+ To beautify scripts inlined in html, we need to cut individual scripts, beautify them using UglifyJS library, and
+ finally paste them back to html.
+
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * inspector/front-end/ScriptFormatter.js:
+ (WebInspector.ScriptFormatter): Implement formatting of scripts inlined in html.
+ (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
+ (WebInspector.ScriptFormatter.prototype.formatContent):
+ (WebInspector.ScriptFormatter.prototype._splitContentIntoChunks):
+ (WebInspector.ScriptFormatter.prototype._formatChunks.didFormat):
+ (WebInspector.ScriptFormatter.prototype._formatChunks):
+ (WebInspector.ScriptFormatter.prototype._buildContentFromChunks):
+ (WebInspector.ScriptFormatter.prototype._formatScript.messageHandler):
+ (WebInspector.ScriptFormatter.prototype._formatScript):
+ * inspector/front-end/ScriptFormatterWorker.js:
+ (onmessage):
+ (buildMapping):
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrameContent): Use SourceFrameContent and FormattedSourceFrameContent to perform operations with line numbers.
+ * inspector/front-end/SourceFrameContent.js: Added.
+ (WebInspector.SourceFrameContent): Helper class, holds resource text and scripts layout
+ (WebInspector.SourceFrameContent.prototype.get scriptRanges):
+ (WebInspector.SourceFrameContent.prototype.locationToPosition):
+ (WebInspector.SourceFrameContent.prototype.positionToLocation):
+ (WebInspector.SourceFrameContent.prototype.scriptLocationForLineNumber):
+ (WebInspector.SourceFrameContent.prototype.scriptLocationForRange):
+ (WebInspector.SourceFrameContent.prototype.lineNumberToRange):
+ (WebInspector.SourceFrameContent.prototype._intersectingScriptRange):
+ (WebInspector):
+ (WebInspector.FormattedSourceFrameContent): Helper class, holds original and formatted versions of resource and mapping between them.
+ (WebInspector.FormattedSourceFrameContent.prototype.get text):
+ (WebInspector.FormattedSourceFrameContent.prototype.originalLocationToFormattedLocation):
+ (WebInspector.FormattedSourceFrameContent.prototype.scriptLocationForFormattedLineNumber):
+ (WebInspector.FormattedSourceFrameContent.prototype._convertPosition):
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.html:
+
+2011-02-07 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: "Reveal in elements panel" does not always work.
+ https://bugs.webkit.org/show_bug.cgi?id=53775
+
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView):
+ * inspector/front-end/ContextMenu.js:
+ (WebInspector.ContextMenu.prototype.show):
+ * inspector/front-end/ElementsPanel.js:
+ (WebInspector.ElementsPanel.prototype.switchToAndFocus):
+ * inspector/front-end/ElementsTreeOutline.js:
+ (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
+ (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
+ * inspector/front-end/ObjectPropertiesSection.js:
+ (WebInspector.ObjectPropertyTreeElement.prototype.update):
+ (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired):
+ * inspector/front-end/inspector.js:
+ (WebInspector.cancelSearch):
+
+2011-02-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Relative .. in URL paths shouldn't skip adjacent / characters
+ https://bugs.webkit.org/show_bug.cgi?id=53907
+
+ Our new behavior matches Firefox, Chrome, and IE.
+
+ * platform/KURL.cpp:
+ (WebCore::copyPathRemovingDots):
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ WebKitTestRunner does not block remote resources or complain about them
+ https://bugs.webkit.org/show_bug.cgi?id=42139
+ <rdar://problem/8183942>
+
+ * Configurations/WebCore.xcconfig: Allow WebKitTestRunner to link
+ WebCore.
+ * WebCore.exp.in: Export a handful of KURL symbols.
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ * ForwardingHeaders/wtf/OwnArrayPtrCommon.h: Removed.
+ * bindings/v8/NPV8Object.cpp:
+ (WebCore::createValueListFromVariantArgs): Returns PassOwnArrayPtr<v8::Handle<v8::Value>> instead of
+ v8::Handle<v8::Value>*.
+ (_NPN_Invoke): Calls createValueListFromVariantArgs.
+ (_NPN_InvokeDefault): createValueListFromVariantArgs.
+ (_NPN_Construct): createValueListFromVariantArgs.
+ * bindings/v8/ScriptFunctionCall.cpp:
+ (WebCore::ScriptFunctionCall::call): Calls adoptArrayPtr.
+ (WebCore::ScriptFunctionCall::construct): Ditto.
+ (WebCore::ScriptCallback::call):
+ * bindings/v8/V8DOMWindowShell.cpp:
+ (WebCore::V8DOMWindowShell::createNewContext): Ditto.
+ * bindings/v8/V8NPObject.cpp:
+ (WebCore::npObjectInvokeImpl): Ditto
+ * bindings/v8/V8NodeFilterCondition.cpp:
+ (WebCore::V8NodeFilterCondition::acceptNode): Ditto,
+ * html/HTMLAreaElement.cpp:
+ (WebCore::HTMLAreaElement::parseMappedAttribute): Calls newCoordsArray.
+ * html/HTMLFrameSetElement.cpp:
+ (WebCore::HTMLFrameSetElement::parseMappedAttribute): Calls newLengthArray.
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::getAttachedShaders): Calls adoptArraYptr.
+ (WebCore::WebGLRenderingContext::simulateVertexAttrib0): Ditto.
+ (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache): Dito.
+ * platform/Length.cpp:
+ (WebCore::newCoordsArray): Returns PassOwnArrayPtr<Length> instead of Length*.
+ (WebCore::newLengthArray): Returns PassOwnArrayPtr<Length> instead of Length*.
+ * platform/Length.h: Prototype changes.
+ * platform/graphics/ANGLEWebKitBridge.cpp:
+ (WebCore::ANGLEWebKitBridge::validateShaderSource): Calls adoptArrayPtr.
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::getDirtyRects): Ditto.
+ * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+ (WebCore::ComplexTextController::getNormalizedTextRun): Ditto.
+ * platform/graphics/chromium/HarfbuzzSkia.cpp:
+ (WebCore::glyphsToAdvances): Ditto.
+ (WebCore::canRender): Ditto.
+ * platform/graphics/gpu/Texture.cpp:
+ (WebCore::Texture::updateSubRect): Ditto.
+ * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
+ (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas): Ditto.
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ (WebCore::PlatformContextSkia::readbackHardwareToSoftware): Ditto.
+ * platform/graphics/wince/SharedBitmap.cpp:
+ (WebCore::SharedBitmap::to16bit): Ditto.
+ * platform/win/ContextMenuWin.cpp:
+ (WebCore::ContextMenu::getContextMenuItems): Ditto.
+ * platform/win/LoggingWin.cpp:
+ (WebCore::initializeWithUserDefault): Ditto.
+ * plugins/win/PluginPackageWin.cpp:
+ (WebCore::PluginPackage::fetchInfo): Ditto.
+
+2011-02-06 Kent Tamura <tkent@chromium.org>
+
+ Unreviewed.
+
+ * WebCore.xcodeproj/project.pbxproj: Run sort-xcode-project-file.
+
+2011-02-03 Dominic Cooney <dominicc@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Convert <keygen> option elements to a shadow DOM
+ https://bugs.webkit.org/show_bug.cgi?id=51379
+
+ Covered by existing tests e.g. fast/html/keygen.html,
+ html5lib/runner.html, etc.
+
+ * css/html.css:
+ (form): Cleanup.
+ (keygen, select): Border radii should match so focus ring looks good.
+ (keygen::-webkit-keygen-select): No margin on the shadow element.
+ (select): Hoisting border radius to keygen, select rule.
+ * dom/SelectElement.cpp:
+ (WebCore::toSelectElement): keygen is no longer a select element.
+ * html/HTMLKeygenElement.cpp: Implements keygen shadow.
+ (WebCore::KeygenSelectElement::create):
+ (WebCore::KeygenSelectElement::shadowPseudoId):
+ (WebCore::KeygenSelectElement::KeygenSelectElement):
+ (WebCore::HTMLKeygenElement::HTMLKeygenElement):
+ (WebCore::HTMLKeygenElement::parseMappedAttribute):
+ (WebCore::HTMLKeygenElement::appendFormData):
+ (WebCore::HTMLKeygenElement::formControlType):
+ (WebCore::HTMLKeygenElement::reset):
+ (WebCore::HTMLKeygenElement::selectShadow):
+ * html/HTMLKeygenElement.h: keygen is no longer a select on C++ side.
+ (WebCore::HTMLKeygenElement::canStartSelection):
+ (WebCore::HTMLKeygenElement::isEnumeratable):
+ (WebCore::HTMLKeygenElement::isResettable):
+ * html/HTMLOptionElement.cpp:
+ (WebCore::HTMLOptionElement::ownerSelectElement): Only owned by selects.
+ * html/HTMLSelectElement.cpp:
+ (WebCore::HTMLSelectElement::HTMLSelectElement): Only 'select' tag name.
+
+2011-02-06 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Fix coding style errors in ClipboardQt.h
+ https://bugs.webkit.org/show_bug.cgi?id=43520
+
+ Fix coding style: order of header and indentation.
+
+ * platform/qt/ClipboardQt.h:
+ (WebCore::ClipboardQt::create):
+ (WebCore::ClipboardQt::clipboardData):
+ (WebCore::ClipboardQt::invalidateWritableData):
+
+2011-02-06 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Use bloom filter for descendant selector filtering
+ https://bugs.webkit.org/show_bug.cgi?id=53880
+
+ Bloom filter is faster than a hash set in this kind of use.
+
+ Shark thinks this speeds up style matching by ~30% on sites
+ with lots of descendant selectors.
+
+ * ForwardingHeaders/wtf/BloomFilter.h: Added.
+ * css/CSSStyleSelector.cpp:
+ (WebCore::collectElementIdentifierHashes):
+ (WebCore::CSSStyleSelector::pushParent):
+ (WebCore::CSSStyleSelector::popParent):
+ (WebCore::CSSStyleSelector::fastRejectSelector):
+ (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
+ * css/CSSStyleSelector.h:
+
+2011-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ media/video-document-types.html sometimes crashes the WebProcess
+ https://bugs.webkit.org/show_bug.cgi?id=53884
+
+ No new tests. Already covered by media/video-document-types.html
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::userCancelledLoad): Stop the load timer
+ when cancelling the load.
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WIN] Use WCHAR instead of TCHAR
+ https://bugs.webkit.org/show_bug.cgi?id=53863
+
+ We always use the UNICODE versions of windows functions, so
+ the usage of TCHAR makes no sense and mixing them is bad style.
+
+ * platform/graphics/win/IconWin.cpp:
+ (WebCore::Icon::createIconForFiles):
+ * platform/graphics/win/QTMovie.cpp:
+ * platform/graphics/win/QTMovieGWorld.cpp:
+ (QTMovieGWorld::fullscreenWndProc):
+ (QTMovieGWorld::enterFullscreen):
+ * platform/graphics/win/SimpleFontDataCGWin.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/SimpleFontDataCairoWin.cpp:
+ * platform/graphics/win/SimpleFontDataWin.cpp:
+ * platform/graphics/wince/SimpleFontDataWinCE.cpp:
+ * platform/win/BString.cpp:
+ * platform/win/ClipboardWin.cpp:
+ (WebCore::filesystemPathFromUrlOrTitle):
+ (WebCore::createGlobalHDropContent):
+ (WebCore::createGlobalImageFileDescriptor):
+ * platform/win/ContextMenuWin.cpp:
+ * platform/win/CursorWin.cpp:
+ (WebCore::loadSharedCursor):
+ * platform/win/FileChooserWin.cpp:
+ (WebCore::FileChooser::basenameForWidth):
+ * platform/win/PopupMenuWin.cpp:
+ (WebCore::PopupMenuWin::popupClassName):
+ (WebCore::PopupMenuWin::show):
+ * platform/win/PopupMenuWin.h:
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Replace FLT_MAX with std::numeric_limits
+ https://bugs.webkit.org/show_bug.cgi?id=53861
+
+ Also move EFL's userIdleTime from TemporaryLinkStubs into SystemTimeEfl.
+
+ * html/NumberInputType.cpp:
+ * html/parser/HTMLParserIdioms.cpp:
+ (WebCore::parseToDoubleForNumberType):
+ * platform/brew/SystemTimeBrew.cpp:
+ (WebCore::userIdleTime):
+ * platform/efl/SystemTimeEfl.cpp:
+ (WebCore::userIdleTime):
+ * platform/efl/TemporaryLinkStubs.cpp:
+ * platform/graphics/ca/GraphicsLayerCA.cpp:
+ (WebCore::GraphicsLayerCA::setupAnimation):
+ * platform/win/SystemTimeWin.cpp:
+ (WebCore::userIdleTime):
+ * platform/wx/SystemTimeWx.cpp:
+ (WebCore::userIdleTime):
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Add dependencies for Visual Studio projects
+ https://bugs.webkit.org/show_bug.cgi?id=53773
+
+ Add a JavaScriptCore dependecy to WebCore, so CMake can
+ generate the correct build order for the solution.
+
+ * CMakeLists.txt:
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Unify ENABLE_SVG sections
+ https://bugs.webkit.org/show_bug.cgi?id=53778
+
+ * CMakeLists.txt:
+
+2011-02-06 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ Refactor Font::normalizeSpaces() to avoid an extra String copy.
+ https://bugs.webkit.org/show_bug.cgi?id=53871
+
+ Have normalizeSpaces() take UChar*,length arguments instead of a
+ String, since all call sites were creating temporaries from these
+ components anyway.
+
+ Font::normalizeSpaces() now always makes 1 String copy,
+ instead of 1 in the best case and 2 in the worst case.
+
+ * platform/graphics/Font.cpp:
+ (WebCore::Font::normalizeSpaces):
+ * platform/graphics/Font.h:
+ * platform/graphics/qt/FontQt.cpp:
+ (WebCore::drawTextCommon):
+ (WebCore::Font::floatWidthForSimpleText):
+ (WebCore::Font::floatWidthForComplexText):
+ (WebCore::Font::offsetForPositionForSimpleText):
+ (WebCore::Font::offsetForPositionForComplexText):
+ (WebCore::Font::selectionRectForSimpleText):
+ (WebCore::Font::selectionRectForComplexText):
+ * svg/SVGFont.cpp:
+ (WebCore::SVGTextRunWalker::walk):
+
+2011-02-06 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ Fix potential buffer overrun in SVGTextRunWalker::walk()
+ https://bugs.webkit.org/show_bug.cgi?id=53870
+
+ A new String was created from a UChar* with a 'length' argument
+ that could be greater than the number of UChars available.
+
+ * svg/SVGFont.cpp:
+ (WebCore::SVGTextRunWalker::walk):
+
+2011-02-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove unused parameter related to XSSAuditor
+ https://bugs.webkit.org/show_bug.cgi?id=53862
+
+ * WebCore.exp.in:
+ * bindings/ScriptControllerBase.cpp:
+ (WebCore::ScriptController::executeScript):
+ (WebCore::ScriptController::executeIfJavaScriptURL):
+ * bindings/ScriptControllerBase.h:
+ * bindings/js/ScriptController.cpp:
+ (WebCore::ScriptController::evaluateInWorld):
+ (WebCore::ScriptController::evaluate):
+ (WebCore::ScriptController::executeScriptInWorld):
+ * bindings/js/ScriptController.h:
+ * bindings/v8/ScriptController.cpp:
+ (WebCore::ScriptController::evaluate):
+ * bindings/v8/ScriptController.h:
+
+2011-02-05 Adam Barth <abarth@webkit.org>
+
+ Fix Qt build.
+
+ * WebCore.pro:
+
+2011-02-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Delete XSSAuditor
+ https://bugs.webkit.org/show_bug.cgi?id=53859
+
+ The job of the XSSAuditor is now done by the XSSFilter. In the future,
+ we might rename XSSFilter to XSSAuditor.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/ScriptControllerBase.cpp:
+ (WebCore::ScriptController::executeIfJavaScriptURL):
+ * bindings/ScriptControllerBase.h:
+ * bindings/js/ScriptController.cpp:
+ (WebCore::ScriptController::ScriptController):
+ (WebCore::ScriptController::evaluateInWorld):
+ * bindings/js/ScriptController.h:
+ * bindings/js/ScriptEventListener.cpp:
+ (WebCore::createAttributeEventListener):
+ * bindings/v8/ScriptController.cpp:
+ (WebCore::ScriptController::ScriptController):
+ (WebCore::ScriptController::evaluate):
+ * bindings/v8/ScriptController.h:
+ * bindings/v8/ScriptEventListener.cpp:
+ (WebCore::createAttributeEventListener):
+ * dom/Document.cpp:
+ (WebCore::Document::implicitOpen):
+ (WebCore::Document::processBaseElement):
+ * dom/ScriptableDocumentParser.cpp:
+ (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
+ * dom/ScriptableDocumentParser.h:
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
+ * loader/SubframeLoader.cpp:
+ (WebCore::SubframeLoader::requestObject):
+ (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
+ * page/XSSAuditor.cpp: Removed.
+ * page/XSSAuditor.h: Removed.
+
+2011-02-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Need a way to resize and scroll the page at the same time
+ https://bugs.webkit.org/show_bug.cgi?id=53814
+ <rdar://problem/8498008>
+
+ Export a function needed by WebKit2.
+
+ * WebCore.exp.in:
+
+2011-02-05 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Use Document::encoding() instead of DocumentWriter::encoding()
+ https://bugs.webkit.org/show_bug.cgi?id=53398
+
+ This change makes the code more readable, when a subresource
+ inherits the character encoding of the document.
+
+ * dom/ProcessingInstruction.cpp:
+ (WebCore::ProcessingInstruction::checkStyleSheet):
+ * dom/ScriptElement.cpp:
+ (WebCore::ScriptElement::scriptCharset):
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::process):
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::requestPreload):
+ * platform/network/FormDataBuilder.cpp:
+ (WebCore::FormDataBuilder::encodingFromAcceptCharset):
+
+2011-02-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Introduce URLString to represent a canonicalized URL represented by a string
+ https://bugs.webkit.org/show_bug.cgi?id=53847
+
+ Instead of using String all over the codebase to represent a URL,
+ instead we should have a type to represent a canonicalized URL in the
+ form of a string. This patch introduces that type.
+
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/KURL.cpp:
+ (WebCore::KURL::KURL):
+ * platform/KURL.h:
+ (WebCore::KURL::urlString):
+
+2011-02-05 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] Style widgets not rendering
+ https://bugs.webkit.org/show_bug.cgi?id=53849
+
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::hasValidClassId): x-qt-styled-widget is a valid class id too
+
+2011-02-05 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Add ContentSecurityPolicy object to Document and pass the X-WebKit-CSP header from the MainResourceLoader.
+ https://bugs.webkit.org/show_bug.cgi?id=53685
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/Document.h:
+ (WebCore::Document::contentSecurityPolicy):
+ * loader/MainResourceLoader.cpp:
+ (WebCore::MainResourceLoader::didReceiveResponse):
+ * page/ContentSecurityPolicy.cpp:
+ (WebCore::ContentSecurityPolicy::didReceiveHeader):
+ * page/ContentSecurityPolicy.h:
+
+2011-02-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Safari should lowercase schemes in cannonicalized urls to match every other browser
+ https://bugs.webkit.org/show_bug.cgi?id=53848
+
+ We're clearly the odd man out here. See results from every browser at:
+ https://github.com/abarth/url-spec/blob/master/tests/gurl-results/by-browser.txt
+
+ * platform/KURL.cpp:
+ (WebCore::KURL::parse):
+ - Just lowercase the scheme when copying.
+
+2011-02-05 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ Optimize matching of descendant selectors
+ https://bugs.webkit.org/show_bug.cgi?id=49876
+ <rdar://problem/8772822>
+
+ During style recalculation, maintain a filter of tags, ids and classes seen in ancestor elements.
+ Use the filter to quickly reject descendant and child selectors when doing style matching.
+
+ This speeds up style recalculations 3-6x on many major web sites.
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::RuleData::RuleData):
+ (WebCore::RuleData::descendantSelectorIdentifierHashes):
+ (WebCore::collectElementIdentifiers):
+ (WebCore::CSSStyleSelector::pushParent):
+ (WebCore::CSSStyleSelector::popParent):
+ (WebCore::CSSStyleSelector::fastRejectSelector):
+ (WebCore::CSSStyleSelector::matchRulesForList):
+ (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
+ * css/CSSStyleSelector.h:
+ (WebCore::CSSStyleSelector::ParentStackFrame::ParentStackFrame):
+ * dom/Element.cpp:
+ (WebCore::StyleSelectorParentPusher::StyleSelectorParentPusher):
+ (WebCore::StyleSelectorParentPusher::push):
+ (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):
+ (WebCore::Element::attach):
+ (WebCore::Element::recalcStyle):
+
+2011-02-05 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Refactor: NotificationCenter shouldn't hold its own copy of the ScriptExecutionContext*
+ when it inherits one from ActiveDOMObject.
+ https://bugs.webkit.org/show_bug.cgi?id=53815
+
+ * bindings/js/JSDesktopNotificationsCustom.cpp:
+ (WebCore::JSNotificationCenter::requestPermission):
+ * bindings/v8/custom/V8NotificationCenterCustom.cpp:
+ (WebCore::V8NotificationCenter::requestPermissionCallback):
+ * notifications/NotificationCenter.cpp:
+ (WebCore::NotificationCenter::NotificationCenter):
+ (WebCore::NotificationCenter::checkPermission):
+ (WebCore::NotificationCenter::requestPermission):
+ (WebCore::NotificationCenter::disconnectFrame):
+ * notifications/NotificationCenter.h:
+ (WebCore::NotificationCenter::createHTMLNotification):
+ (WebCore::NotificationCenter::createNotification):
+
+2011-02-04 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Crash in WebCore::TextEncoding::decode below XSSFilter::init
+ https://bugs.webkit.org/show_bug.cgi?id=53837
+
+ Add missing null check.
+
+ Test: http/tests/security/xssAuditor/non-block-javascript-url-frame.html
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::init):
+
+2011-02-04 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Crashes in ShadowBlur via WebKit2 FindController
+ https://bugs.webkit.org/show_bug.cgi?id=53830
+
+ Fix a crash cause by re-entering ShadowBlur, and add assertions to
+ detect when it happens.
+
+ The re-entrancy occurred when drawRectShadowWithTiling() filled
+ the interior of the shadow with fillRect() on the context
+ which still had the shadow state set. This would make another ShadowBlur
+ on the stack and call into the code again, potentially blowing away
+ the image buffer.
+
+ Fix by turning off shadows in the destination context while we're
+ drawing the tiled shadow. The non-tiled code path already did this.
+
+ Not testable because CSS shadows clip out the inside of the rect
+ being shadowed, and SVG uses fillPath, even for rects.
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ScratchBuffer::ScratchBuffer):
+ (WebCore::ScratchBuffer::getScratchBuffer):
+ (WebCore::ScratchBuffer::scheduleScratchBufferPurge):
+ (WebCore::ShadowBlur::ShadowBlur):
+ (WebCore::ShadowBlur::drawRectShadowWithTiling):
+
+2011-02-04 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Don't use a fixed size for search field icons
+ https://bugs.webkit.org/show_bug.cgi?id=50624
+
+ Use the parent input content box to make sure the icon fits in the
+ search field, scaling it down when needed.
+
+ * platform/gtk/RenderThemeGtk.cpp:
+ (WebCore::paintGdkPixbuf):
+ (WebCore::getIconSizeForPixelSize):
+ (WebCore::adjustSearchFieldIconStyle):
+ (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
+ (WebCore::centerRectVerticallyInParentInputElement):
+ (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
+ (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
+ (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
+ (WebCore::RenderThemeGtk::paintCapsLockIndicator):
+ (WebCore::RenderThemeGtk::paintMediaButton):
+
+2011-02-04 Hironori Bono <hbono@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [chromium] JPEG corruption
+ https://bugs.webkit.org/show_bug.cgi?id=53250
+
+ Same as gray-scale JPEGs, we convert the colors of CMYK JPEGs with color
+ profiles from CMYK to RGB twice and it causes color corruption. This
+ change suppresses the color profiles for CMYK JPEGs same as gray-scale
+ ones.
+
+ Test: fast/images/cmyk-jpeg-with-color-profile.html
+
+ * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
+ (WebCore::JPEGImageReader::decode):
+
+2011-02-04 Xiyuan Xia <xiyuan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Option text in select popup does not align with menulist button text
+ https://bugs.webkit.org/show_bug.cgi?id=53632
+
+ This makes clientPaddingLeft and clientPaddingRight return
+ the additional m_innerBlock's padding so that the popup item text
+ aligns with the menulist button text.
+
+ * rendering/RenderMenuList.cpp:
+ (WebCore::RenderMenuList::clientPaddingLeft):
+ (WebCore::RenderMenuList::clientPaddingRight):
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig and Beth Dakin.
+
+ REGRESSION: Horizontal scrollbar thumbs leave artifacts over page content when scrolling vertically
+ <rdar://problem/8962457>
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::scrollContents):
+ Subtract scrollbars from the scroll view rect if overlay scrollers are enabled.
+
+ * platform/ScrollableArea.cpp:
+ (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
+ Make sure to invalidate both scrollbars if overlay scrollers are enabled.
+
+2011-02-04 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ PluginDocuments don't create widgets for plugins on back/forward
+ https://bugs.webkit.org/show_bug.cgi?id=53474
+
+ Long ago, PluginDocument always caused the HTMLEmbedElement to create
+ its widget synchronously during a post-layout task. Recently, however,
+ some changes to the HistroyController caused layout on back/forward to
+ become slightly more complicated (and added an extra level of recursion
+ to layout). This extra level of recursion triggered the "I've recursed
+ too many times" condition in the post-layout task queue, causing the
+ FrameView to run the remainder of the tasks asynchronously.
+ Unfortunately, that broke PluginDocument because it needs its the
+ HTMLEmbedElement's updateWidget task to run synchronously.
+
+ This patch adds a mechanism for "kicking off" the pending post-layout
+ tasks synchronously (instead of waiting for the timer to fire).
+ PluginDocument then uses that facility to ensure that the
+ HTMLEmbedElement's updateWidget task happens.
+
+ Test: plugins/plugin-document-back-forward.html
+
+ * html/PluginDocument.cpp:
+ (WebCore::PluginDocumentParser::appendBytes):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
+ * page/FrameView.h:
+
+2011-02-04 Charlie Reis <creis@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Crash in WebCore::HistoryController::itemsAreClones
+ https://bugs.webkit.org/show_bug.cgi?id=52819
+
+ Avoids deleting the current HistoryItem while it is still in use.
+ Ensures that provisional items are committed for same document navigations.
+ Ensures that error pages are committed on back/forward navigations.
+ Also removes unneeded sanity checks used for diagnosing the problem.
+
+ * loader/HistoryController.cpp:
+ * loader/HistoryController.h:
+
+2011-02-04 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ Code Changes.
+
+ CSS 2.1 failure: content-*
+ https://bugs.webkit.org/show_bug.cgi?id=52126
+
+ Test: fast/css/counters/content-021.html
+
+ * rendering/CounterNode.cpp:
+ (showCounterTree):
+ Made parameter const because it is supposed to be so.
+ * rendering/RenderCounter.cpp:
+ (WebCore::previousInPreOrder):
+ (WebCore::previousSiblingOrParent):
+ (WebCore::parentElement):
+ (WebCore::areRenderersElementsSiblings):
+ (WebCore::nextInPreOrder):
+ Added these local helper functions to help navigate the DOM tree
+ enriched with :before and :after pseudo elements.
+ (WebCore::planCounter):
+ Fixed bug that would create a repeat counter for second and
+ subsequent renderers associated with the same DOM element.
+ (WebCore::findPlaceForCounter):
+ (WebCore::makeCounterNode):
+ Changed to use the new tree navigation functions described above
+ instead of the Renderer Tree navigation functions.
+ (WebCore::RenderCounter::rendererSubtreeAttached):
+ (WebCore::RenderCounter::rendererStyleChanged):
+ Optimized to not bother about counters until the renderers are
+ finally attached.
+ (showRendererTree):
+ (showNodeTree):
+ Debug helper functions used to debug Counter bugs.
+
+2011-02-04 Dan Bernstein <mitz@apple.com>
+
+ Typo fix.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::containsJavaScriptURL):
+
+2011-02-04 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Make an infinite loop introduced in r77454 finite.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::containsJavaScriptURL):
+
+2011-02-04 Jer Noble <jer.noble@apple.com>
+
+ Reviewed by Eric Carlson.
+
+ Frame accurate seeking isn't always accurate
+ https://bugs.webkit.org/show_bug.cgi?id=52697
+
+ Test: media/video-frame-accurate-seek.html
+
+ Make seeking slightly more accurate by rounding instead of truncating
+ when converting from seconds-in-float to time/timeScale.
+
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+ (WebCore::MediaPlayerPrivateQTKit::createQTTime):
+ * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
+ (WebCore::MediaPlayerPrivateQuickTimeVisualContext::mediaTimeForTimeValue):
+ * platform/graphics/win/QTMovie.cpp:
+ (QTMovie::setCurrentTime):
+
+2011-02-04 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Second IndexedDB events overhaul patch
+ https://bugs.webkit.org/show_bug.cgi?id=53813
+
+ If an IDBRequest has a IDBTransaction, it should propogate
+ events through it. In order to do this, IDBRequest needs to
+ hold a transaction frontend object rather than a backend one.
+
+ Test: storage/indexeddb/request-event-propagation.html
+
+ * storage/IDBCursor.cpp:
+ (WebCore::IDBCursor::IDBCursor):
+ * storage/IDBCursor.h:
+ (WebCore::IDBCursor::create):
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::setSetVersionTransaction):
+ (WebCore::IDBDatabase::createObjectStore):
+ (WebCore::IDBDatabase::deleteObjectStore):
+ * storage/IDBDatabase.h:
+ * storage/IDBIndex.cpp:
+ (WebCore::IDBIndex::IDBIndex):
+ (WebCore::IDBIndex::openCursor):
+ (WebCore::IDBIndex::openKeyCursor):
+ (WebCore::IDBIndex::get):
+ (WebCore::IDBIndex::getKey):
+ * storage/IDBIndex.h:
+ (WebCore::IDBIndex::create):
+ * storage/IDBObjectStore.cpp:
+ (WebCore::IDBObjectStore::IDBObjectStore):
+ (WebCore::IDBObjectStore::get):
+ (WebCore::IDBObjectStore::add):
+ (WebCore::IDBObjectStore::put):
+ (WebCore::IDBObjectStore::deleteFunction):
+ (WebCore::IDBObjectStore::createIndex):
+ (WebCore::IDBObjectStore::deleteIndex):
+ (WebCore::IDBObjectStore::openCursor):
+ * storage/IDBObjectStore.h:
+ (WebCore::IDBObjectStore::create):
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::create):
+ (WebCore::IDBRequest::IDBRequest):
+ (WebCore::IDBRequest::resetReadyState):
+ (WebCore::IDBRequest::onSuccess):
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBRequest.h:
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::IDBTransaction):
+ (WebCore::IDBTransaction::objectStore):
+ (WebCore::IDBTransaction::contextDestroyed):
+ (WebCore::IDBTransaction::enqueueEvent):
+ * storage/IDBTransaction.h:
+ * storage/IDBTransaction.idl:
+
+2011-02-04 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ First step towards event propogation within IndexedDB
+ https://bugs.webkit.org/show_bug.cgi?id=53795
+
+ This is the first step towards implementing
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=11348
+ within IndexedDB. I've created a method that knows how
+ to capture and bubble (based on Node's dispatchGenericEvent).
+ I've then changed IDBRequest to use it.
+
+ The only functional change is that preventDefault now must
+ be called in error events to prevent the transaction from
+ being aborted. The tests reflect this change and there's one
+ specific test to look at this behavior.
+
+ Test: storage/indexeddb/error-causes-abort-by-default.html
+
+ * storage/IDBAbortEvent.cpp:
+ (WebCore::IDBAbortEvent::create):
+ (WebCore::IDBAbortEvent::IDBAbortEvent):
+ * storage/IDBAbortEvent.h:
+ * storage/IDBCompleteEvent.cpp:
+ (WebCore::IDBCompleteEvent::create):
+ (WebCore::IDBCompleteEvent::IDBCompleteEvent):
+ * storage/IDBCompleteEvent.h:
+ * storage/IDBErrorEvent.cpp:
+ (WebCore::IDBErrorEvent::IDBErrorEvent):
+ * storage/IDBEvent.cpp:
+ (WebCore::IDBEvent::IDBEvent):
+ (WebCore::IDBEvent::dispatch):
+ * storage/IDBEvent.h:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBRequest.h:
+ * storage/IDBSuccessEvent.cpp:
+ (WebCore::IDBSuccessEvent::IDBSuccessEvent):
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::onAbort):
+ (WebCore::IDBTransaction::onComplete):
+ * storage/IDBTransaction.h:
+ (WebCore::IDBTransaction::backend):
+ * storage/IDBTransactionBackendImpl.cpp:
+ (WebCore::IDBTransactionBackendImpl::taskTimerFired):
+
+2011-02-04 Daniel Cheng <dcheng@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Clone WebClipboard to be frame-specific.
+ https://bugs.webkit.org/show_bug.cgi?id=53727
+
+ For drop operations, Chrome currently snapshots the data and copies it
+ into the renderer process. As we add more supported drag data types, the
+ copy will become increasingly expensive. Instead, we'd like to snapshot
+ data in the browser to reduce the amount of data copied and to support
+ Blob in DataTransferItem. In order to allow this, we associated
+ WebClipboard with a frame so it can correctly route its IPCs to the
+ corresponding Chromium host.
+
+ No new tests because no new functionality.
+
+ * platform/chromium/ChromiumDataObject.cpp:
+ (WebCore::ChromiumDataObject::createReadable):
+ * platform/chromium/ChromiumDataObject.h:
+ * platform/chromium/ClipboardChromium.cpp:
+ (WebCore::ClipboardChromium::create):
+ * platform/chromium/PlatformBridge.h:
+ * platform/chromium/ReadableDataObject.cpp:
+ (WebCore::ReadableDataObject::create):
+ (WebCore::ReadableDataObject::ReadableDataObject):
+ (WebCore::ReadableDataObject::getData):
+ (WebCore::ReadableDataObject::urlTitle):
+ (WebCore::ReadableDataObject::htmlBaseUrl):
+ (WebCore::ReadableDataObject::filenames):
+ (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
+ * platform/chromium/ReadableDataObject.h:
+
+2011-02-04 Jeremy Orlow <jorlow@chromium.org>
+
+ Revert https://bugs.webkit.org/show_bug.cgi?id=53795
+
+ * storage/IDBAbortEvent.cpp:
+ (WebCore::IDBAbortEvent::create):
+ (WebCore::IDBAbortEvent::IDBAbortEvent):
+ * storage/IDBAbortEvent.h:
+ * storage/IDBCompleteEvent.cpp:
+ (WebCore::IDBCompleteEvent::create):
+ (WebCore::IDBCompleteEvent::IDBCompleteEvent):
+ * storage/IDBCompleteEvent.h:
+ * storage/IDBErrorEvent.cpp:
+ (WebCore::IDBErrorEvent::IDBErrorEvent):
+ * storage/IDBEvent.cpp:
+ (WebCore::IDBEvent::IDBEvent):
+ * storage/IDBEvent.h:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBRequest.h:
+ * storage/IDBSuccessEvent.cpp:
+ (WebCore::IDBSuccessEvent::IDBSuccessEvent):
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::onAbort):
+ (WebCore::IDBTransaction::onComplete):
+ * storage/IDBTransaction.h:
+ * storage/IDBTransactionBackendImpl.cpp:
+ (WebCore::IDBTransactionBackendImpl::taskTimerFired):
+
+2011-02-04 Martin Galpin <martin@66laps.com>
+
+ Reviewed by David Levin.
+
+ CORS origin header not set on GET when a preflight request is required.
+ https://bugs.webkit.org/show_bug.cgi?id=50773
+
+ Test: http/tests/xmlhttprequest/cross-origin-preflight-get.html
+
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::preflightSuccess):
+ Explicitly set the request origin after a preflight request succeeds.
+
+2011-02-04 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ First step towards event propogation within IndexedDB
+ https://bugs.webkit.org/show_bug.cgi?id=53795
+
+ This is the first step towards implementing
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=11348
+ within IndexedDB. I've created a method that knows how
+ to capture and bubble (based on Node's dispatchGenericEvent).
+ I've then changed IDBRequest to use it.
+
+ The only functional change is that preventDefault now must
+ be called in error events to prevent the transaction from
+ being aborted. The tests reflect this change and there's one
+ specific test to look at this behavior.
+
+ Test: storage/indexeddb/error-causes-abort-by-default.html
+
+ * storage/IDBAbortEvent.cpp:
+ (WebCore::IDBAbortEvent::create):
+ (WebCore::IDBAbortEvent::IDBAbortEvent):
+ * storage/IDBAbortEvent.h:
+ * storage/IDBCompleteEvent.cpp:
+ (WebCore::IDBCompleteEvent::create):
+ (WebCore::IDBCompleteEvent::IDBCompleteEvent):
+ * storage/IDBCompleteEvent.h:
+ * storage/IDBErrorEvent.cpp:
+ (WebCore::IDBErrorEvent::IDBErrorEvent):
+ * storage/IDBEvent.cpp:
+ (WebCore::IDBEvent::IDBEvent):
+ (WebCore::IDBEvent::dispatch):
+ * storage/IDBEvent.h:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBRequest.h:
+ * storage/IDBSuccessEvent.cpp:
+ (WebCore::IDBSuccessEvent::IDBSuccessEvent):
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::onAbort):
+ (WebCore::IDBTransaction::onComplete):
+ * storage/IDBTransaction.h:
+ (WebCore::IDBTransaction::backend):
+ * storage/IDBTransactionBackendImpl.cpp:
+ (WebCore::IDBTransactionBackendImpl::taskTimerFired):
+
+2011-02-04 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt]REGRESSION(r76951): media/controls-without-preload.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53674
+
+ * css/mediaControlsQt.css:
+
+2011-02-04 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler and Dave Hyatt.
+
+ <rdar://problem/8902704> Make ruby text size 50% by default
+ https://bugs.webkit.org/show_bug.cgi?id=53723
+
+ * css/html.css:
+ (ruby > rt): Changed the font-size from 60% to 50%.
+
+2011-02-04 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53610
+ Regression: adjacent sibling selector not working as expected
+ <rdar://problem/8960033>
+
+ https://bugs.webkit.org/show_bug.cgi?id=53574
+ REGRESSION (r76012): :last-child:after not working as expected
+ <rdar://problem/8948643>
+
+ Test for additional conditions in parent style that prevent sharing.
+
+ Tests: fast/selectors/style-sharing-adjacent-selector.html
+ fast/selectors/style-sharing-last-child.html
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::parentStylePreventsSharing):
+ (WebCore::CSSStyleSelector::locateSharedStyle):
+
+2011-02-04 Mark Mentovai <mark@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Chromium GYP build fix.
+
+ When various settings were moved to webcore_prerequisites in r66364,
+ things that should have been direct_dependent_settings were not marked
+ as such. GYP 'defines', for example, make no sense on a 'none'-type
+ target such as webcore_prerequisites. It appears that it was intended
+ for these settings to be pushed to direct dependents, which would make
+ direct_dependent_settings correct.
+
+ Losing the ChromiumWebCoreObjC defines on the Mac, for example, caused
+ http://crbug.com/71537, which at best causes Mac console log spew, and
+ at worst may result in Chromium's copy of WebCore using system
+ definitions of certain Objective-C classes at runtime, or vice-versa.
+
+ The build now includes a postbuild step to prevent
+ http://crbug.com/71537 from regressing again. The build will fail upon
+ regression.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53630
+
+ * WebCore.gyp/WebCore.gyp: Move things in webcore_prerequisites into
+ direct_dependent_settings as needed, add the check_objc_rename
+ postbuild step.
+ * WebCore.gyp/mac/check_objc_rename.sh: Added.
+
+2011-02-04 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Darin Fisher.
+
+ Move chromium iframe shim code to cross-platform file
+ https://bugs.webkit.org/show_bug.cgi?id=52594
+
+ Move Chromium code for identifying and cutting out
+ iframe shims from plugins to cross-platform utility file
+ IFrameShimSupport.cpp.
+ Amend PluginViewQt to use this code to handle shims correctly.
+
+ * WebCore.gypi: Add Chromium support for IFrameShimSupport.cpp
+ * WebCore.pro: Add Qt support for IFrameShimSupport.cpp
+ * plugins/IFrameShimSupport.cpp: Added.
+ (WebCore::getObjectStack):
+ (WebCore::iframeIsAbovePlugin):
+ (WebCore::getPluginOcclusions):
+ * plugins/IFframeShimSupport.h: Added.
+ * plugins/qt/PluginViewQt.cpp:
+ (WebCore::PluginView::setNPWindowIfNeeded):
+
+2011-02-04 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by David Levin.
+
+ Implement "<option> should implement the dir attribute" for chromium port after r76983.
+ https://bugs.webkit.org/show_bug.cgi?id=50969
+
+ Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
+ added in r76983.
+
+ * platform/chromium/PopupMenuChromium.cpp: Remove directionality hint from
+ <select> drop-down setting.
+ (WebCore::PopupListBox::paintRow): Use <option>'s directionality to paint
+ items in drop-down and pass-in bidi override flag when creating text run.
+ * platform/chromium/PopupMenuChromium.h: Remove directionalityHint from
+ PopupContainerSettings.
+
+2011-02-04 Jeremy Orlow <jorlow@chromium.org>
+
+ Build fix from merge mistake.
+
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::ensureEventTargetData):
+
+2011-02-04 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Remove unneeded function declarations in comments in EditorClient.h
+ https://bugs.webkit.org/show_bug.cgi?id=53745
+
+ Removing unused commented out function declarations. No tests since this is just cleanup.
+
+ * page/EditorClient.h:
+
+2011-02-03 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Refactor IDBRequest and IDBTransaction a bit
+ https://bugs.webkit.org/show_bug.cgi?id=53565
+
+ There were a lot of subtle issues with the way IDBTransaction
+ and IDBRequest used to be written. This cleans a lot of them up
+ and largely simplifies the logic. Using EventQueue rather than
+ timers is one example of the simplification.
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * dom/EventQueue.cpp:
+ (WebCore::EventQueue::enqueueEvent):
+ (WebCore::EventQueue::dispatchEvent):
+ * storage/IDBCursor.cpp:
+ (WebCore::IDBCursor::continueFunction):
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::create):
+ (WebCore::IDBRequest::IDBRequest):
+ (WebCore::IDBRequest::resetReadyState):
+ (WebCore::IDBRequest::onError):
+ (WebCore::IDBRequest::onSuccess):
+ (WebCore::IDBRequest::dispatchEvent):
+ (WebCore::IDBRequest::enqueueEvent):
+ (WebCore::IDBRequest::eventTargetData):
+ (WebCore::IDBRequest::ensureEventTargetData):
+ * storage/IDBRequest.h:
+ (WebCore::IDBRequest::dispatchEvent):
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::create):
+ (WebCore::IDBTransaction::IDBTransaction):
+ (WebCore::IDBTransaction::objectStore):
+ (WebCore::IDBTransaction::abort):
+ (WebCore::IDBTransaction::onAbort):
+ (WebCore::IDBTransaction::onComplete):
+ (WebCore::IDBTransaction::onTimeout):
+ (WebCore::IDBTransaction::canSuspend):
+ (WebCore::IDBTransaction::stop):
+ (WebCore::IDBTransaction::enqueueEvent):
+ (WebCore::IDBTransaction::eventTargetData):
+ (WebCore::IDBTransaction::ensureEventTargetData):
+ * storage/IDBTransaction.h:
+
+2011-02-01 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Remove the timeout event from IndexedDB
+ https://bugs.webkit.org/show_bug.cgi?id=53521
+
+ Remove timeout and ontimeout from IDBTransaction per the spec.
+
+ * WebCore.gypi:
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::transaction):
+ * storage/IDBDatabase.h:
+ (WebCore::IDBDatabase::transaction):
+ * storage/IDBDatabase.idl:
+ * storage/IDBDatabaseBackendImpl.cpp:
+ (WebCore::IDBDatabaseBackendImpl::setVersion):
+ (WebCore::IDBDatabaseBackendImpl::transaction):
+ * storage/IDBDatabaseBackendImpl.h:
+ * storage/IDBDatabaseBackendInterface.h:
+ * storage/IDBTimeoutEvent.cpp: Removed.
+ * storage/IDBTimeoutEvent.h: Removed.
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::IDBTransaction):
+ (WebCore::IDBTransaction::onAbort):
+ (WebCore::IDBTransaction::onComplete):
+ * storage/IDBTransaction.h:
+ * storage/IDBTransaction.idl:
+ * storage/IDBTransactionBackendImpl.cpp:
+ (WebCore::IDBTransactionBackendImpl::create):
+ (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
+ * storage/IDBTransactionBackendImpl.h:
+ * storage/IDBTransactionCallbacks.h:
+
+2011-02-04 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: Can't set accessibility overridden attributes on web objects
+ https://bugs.webkit.org/show_bug.cgi?id=53725
+
+ accessibilitySetOverriddenValue does not work on AX objects from WebCore because
+ the right method needed to be overridden (accessibilitySupportsOverriddenAttributes).
+ Unfortunately, there's no way to test this from DRT, since AppKit returns the overridden
+ attribute only when an AX client asks for it through the AX frameworks.
+
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper accessibilitySupportsOverriddenAttributes]):
+
+2011-02-03 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ REGRESSION(r76147): Slider thumb is not repainted when let go outside of the slider track.
+ https://bugs.webkit.org/show_bug.cgi?id=53691
+
+ Test: fast/repaint/slider-thumb-drag-release.html
+
+ * html/shadow/SliderThumbElement.cpp:
+ (WebCore::SliderThumbElement::stopDragging): Added dirtying the layout bit to ensure
+ that the thumb is repainted.
+
+2011-02-04 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Add "show more" data grid node and waiting message UI components.
+ https://bugs.webkit.org/show_bug.cgi?id=53763
+
+ - "show more" data grid node is used for on-demand population of
+ data grid contents (similar to DOM tree capability for limiting
+ displayed nodes count);
+
+ - waiting message is used for informing user about long lasting
+ operations (with a possibility to cancel them).
+
+ * English.lproj/localizedStrings.js:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * inspector/front-end/PleaseWaitMessage.js: Added.
+ (WebInspector.PleaseWaitMessage):
+ * inspector/front-end/ShowMoreDataGridNode.js: Added.
+ (WebInspector.ShowMoreDataGridNode):
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.css:
+ (.data-grid button):
+ (.please-wait-msg):
+ * inspector/front-end/inspector.html:
+
+2011-02-04 Adele Peterson <adele@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=53740
+ <rdar://problem/8503629> Allow platforms to specify if the placeholder should be visible when text controls are focused
+
+ Tests:
+ fast/forms/textarea-placeholder-visibility-1.html
+ fast/forms/textarea-placeholder-visibility-2.html
+ fast/forms/input-placeholder-visibility-1.html
+ fast/forms/input-placeholder-visibility-2.html
+ fast/forms/input-placeholder-visibility-3.html
+
+ * html/HTMLFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
+ Add a check for shouldShowPlaceholderWhenFocused.
+ * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::updateValue):
+ Whenever the value is updated, we should also update placeholder visibility.
+ * rendering/RenderTheme.h: (WebCore::RenderTheme::shouldShowPlaceholderWhenFocused):
+ Make the default the same as the existing behavior.
+ * rendering/RenderThemeMac.h:
+ * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::shouldShowPlaceholderWhenFocused):
+ Show placeholder when appropriate.
+
+2011-02-04 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: evaluate on hover does not work on a breakpoint.
+ https://bugs.webkit.org/show_bug.cgi?id=53768
+
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype._mouseHover):
+
+2011-02-04 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77625 and r77626.
+ http://trac.webkit.org/changeset/77625
+ http://trac.webkit.org/changeset/77626
+ https://bugs.webkit.org/show_bug.cgi?id=53765
+
+ It broke Windows builds (Requested by Ossy_ on #webkit).
+
+ * Android.jscbindings.mk:
+ * CMakeLists.txt:
+ * ForwardingHeaders/pcre/pcre.h: Added.
+ * ForwardingHeaders/yarr/Yarr.h: Removed.
+ * ForwardingHeaders/yarr/YarrInterpreter.h: Removed.
+ * ForwardingHeaders/yarr/YarrPattern.h: Removed.
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.vcproj/copyForwardingHeaders.cmd:
+ * platform/text/RegularExpression.cpp:
+ (WebCore::RegularExpression::Private::regexp):
+ (WebCore::RegularExpression::Private::compile):
+ (WebCore::RegularExpression::Private::Private):
+ (WebCore::RegularExpression::Private::create):
+ (WebCore::RegularExpression::Private::~Private):
+ (WebCore::RegularExpression::match):
+
+2011-02-04 Peter Varga <pvarga@webkit.org>
+
+ Rubber-stamped by Csaba Osztrogonác.
+
+ Replace PCRE with Yarr in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53496
+
+ Speculative windows build fix.
+
+ No new tests needed.
+
+ * platform/text/RegularExpression.cpp:
+
+2011-02-04 Peter Varga <pvarga@webkit.org>
+
+
+ Reviewed by Gavin Barraclough.
+
+ Replace PCRE with Yarr in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53496
+
+ No new tests needed.
+
+ * Android.jscbindings.mk:
+ * CMakeLists.txt:
+ * ForwardingHeaders/pcre/pcre.h: Removed.
+ * ForwardingHeaders/yarr/Yarr.h: Added.
+ * ForwardingHeaders/yarr/YarrInterpreter.h: Added.
+ * ForwardingHeaders/yarr/YarrPattern.h: Added.
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.vcproj/copyForwardingHeaders.cmd:
+ * platform/text/RegularExpression.cpp:
+ (WebCore::RegularExpression::Private::create):
+ (WebCore::RegularExpression::Private::Private):
+ (WebCore::RegularExpression::Private::compile):
+ (WebCore::RegularExpression::match):
+
+2011-02-04 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Network panel filtering is broken.
+ https://bugs.webkit.org/show_bug.cgi?id=53764
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype._sortItems):
+ (WebInspector.NetworkPanel.prototype._sortByTimeline):
+ (WebInspector.NetworkPanel.prototype._filter):
+ (WebInspector.NetworkPanel.prototype._updateOffscreenRows):
+ (WebInspector.NetworkDataGridNode.prototype.isFilteredOut):
+ (WebInspector.NetworkDataGridNode.prototype.get selectable):
+ (WebInspector.NetworkTotalGridNode.prototype.isFilteredOut):
+ (WebInspector.NetworkTotalGridNode.prototype.get selectable):
+
+2011-02-04 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: support overriding user agent strings
+ https://bugs.webkit.org/show_bug.cgi?id=51485
+
+ Test: http/tests/inspector/extensions-useragent.html
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::disconnectFrontend):
+ (WebCore::InspectorController::setUserAgentOverride):
+ (WebCore::InspectorController::userAgentOverride):
+ * inspector/InspectorController.h:
+ * inspector/front-end/ExtensionAPI.js:
+ (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.reload):
+ * inspector/front-end/ExtensionServer.js:
+ (WebInspector.ExtensionServer.prototype._onReload):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::userAgent):
+ (WebCore::FrameLoader::applyUserAgent):
+
+2011-02-04 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: scripts panel displays wrong file name after reload.
+ https://bugs.webkit.org/show_bug.cgi?id=53761
+
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCore.exp.in:
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/InspectorClient.h:
+ * inspector/InspectorFrontendClientLocal.cpp:
+ (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
+ (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
+ (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
+ * inspector/InspectorFrontendClientLocal.h: ports that provide in-process implementation of the inspector front-end can
+ provide platform-specific settings accessor.
+ (WebCore::InspectorFrontendClientLocal::Settings::Settings):
+ (WebCore::InspectorFrontendClientLocal::Settings::~Settings):
+ (WebCore::InspectorFrontendClientLocal::Settings::inspectorAttachedHeight):
+ (WebCore::InspectorFrontendClientLocal::Settings::storeInspectorAttachedHeight):
+ * loader/EmptyClients.h:
+
+2011-02-03 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [v8] frame several more JS code invocations into v8::TryCatch
+ https://bugs.webkit.org/show_bug.cgi?id=53594
+
+ This patch is preemptive and adjusts v8 bindings code to forthcoming small change
+ in v8::ThrowException---currently sometimes exceptions thrown by this method
+ do not reach surrounding v8::TryCatch handler (see
+ http://code.google.com/p/v8/issues/detail?id=1072 and
+ http://codereview.chromium.org/6397011/). Therefore the goal of this patch
+ is to make forthcoming v8 roll as smooth as possible (alas, we'll still need
+ one rebaseline as of now.)
+
+ * bindings/v8/V8Proxy.cpp:
+ (WebCore::V8Proxy::runScript): Do not rely on empty handle as a signal of exception, wrap into v8::TryCatch instead
+ * bindings/v8/V8WindowErrorHandler.cpp:
+ (WebCore::V8WindowErrorHandler::callListenerFunction): Ditto
+
+2011-02-03 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
+ https://bugs.webkit.org/show_bug.cgi?id=52897
+ <rdar://problem/8898294>
+
+ * WebCore.exp.in: Add export now needed by WebKit2
+
+2011-02-03 Victoria Kirst <vrk@google.com>
+
+ Reviewed by James Robinson.
+
+ Replaces float literals with uniform values in shader code
+ so that buggy drivers unable to parse float values in different
+ locales will not produce a pink video.
+
+ [chromium] Fix pink video bug with gpu-acceleration enabled
+ https://bugs.webkit.org/show_bug.cgi?id=53568
+
+ * platform/graphics/chromium/VideoLayerChromium.cpp:
+ (WebCore::VideoLayerChromium::SharedValues::SharedValues):
+ (WebCore::VideoLayerChromium::drawYUV):
+ * platform/graphics/chromium/VideoLayerChromium.h:
+ (WebCore::VideoLayerChromium::SharedValues::signAdjLocation):
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ This method is described in the HTML5 specification here,
+ http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registerprotocolhandler
+
+ This change is largely cribbed from B. Green's 29651 patches. It is
+ behind a flag so as not to break JS feature detection.
+
+ New layout test fast/dom/registerProtocolHandler.html.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * loader/EmptyClients.h:
+ (WebCore::EmptyChromeClient::registerProtocolHandler):
+ * page/Chrome.cpp:
+ (WebCore::Chrome::registerProtocolHandler):
+ * page/Chrome.h:
+ * page/ChromeClient.h:
+ * page/Navigator.cpp:
+ (WebCore::verifyCustomHandlerURL):
+ (WebCore::verifyProtocolHandlerScheme):
+ (WebCore::Navigator::registerProtocolHandler):
+ * page/Navigator.h:
+ * page/Navigator.idl:
+
+2011-02-03 Brian Ryner <bryner@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Add a field to the ResourceResponse for tracking the socket address
+ of the host that the resource was fetched from. Patch was originally
+ by Paul Marks.
+ https://bugs.webkit.org/show_bug.cgi?id=53699
+
+ * platform/network/chromium/ResourceResponse.cpp:
+ (WebCore::ResourceResponse::doPlatformCopyData):
+ (WebCore::ResourceResponse::doPlatformAdopt):
+ * platform/network/chromium/ResourceResponse.h:
+ (WebCore::ResourceResponse::socketAddress):
+ (WebCore::ResourceResponse::setSocketAddress):
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * loader/EmptyClients.h:
+ (WebCore::EmptyFrameLoaderClient::didRunInsecureContent):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::checkIfRunInsecureContent):
+ * loader/FrameLoaderClient.h:
+
+2011-02-03 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION: Artifacts on box-shadow corners in some cases
+ https://bugs.webkit.org/show_bug.cgi?id=53731
+
+ Fix overdrawing artifacts in ShadowBlur's tiling code path,
+ which show up in shadows using a color with alpha.
+
+ Test: fast/box-shadow/shadow-tiling-artifact.html
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::drawRectShadowWithTiling): Ensure
+ that the inner rect that gets filled does not overlap with any
+ of the eight tiled areas by having the corner and side dimensions
+ be the same for contiguous areas.
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ XSS Auditor is spinning inside decodeURLEscapeSequences() if there are
+ percent signs in large posted data
+ https://bugs.webkit.org/show_bug.cgi?id=53405
+
+ If the input string contains many non-% characters followed by a %
+ character that is not a valid URL escape sequence, then the old
+ algorithm would only advance the initial search by one character
+ (instead of jumping to just after the % character). That would cause
+ the algorithm to take N^2 time (in the number of characters before the
+ first % character). This patch just advances the search past the first
+ % character so we can start looking for next % character sooner.
+
+ * platform/KURL.cpp:
+ (WebCore::decodeURLEscapeSequences):
+
+2011-02-03 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: click on a breakpoint highlights wrong line in source frame.
+ https://bugs.webkit.org/show_bug.cgi?id=53692
+
+ * inspector/front-end/BreakpointsSidebarPane.js:
+ (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._setupBreakpointElement):
+
+2011-02-03 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [v8] Bail out if to string conversion returned empty handle
+ https://bugs.webkit.org/show_bug.cgi?id=53687
+
+ This a temporary measure: actually one probably should never get empty handle
+ if there was no exception. The root cause is under investigation.
+ The bailout though allows Chromium not to crash---attempt to convert an empty
+ v8 hande into WebCore string crashes with invalid memory access.
+
+ See http://code.google.com/p/chromium/issues/detail?id=71544
+
+ There is no known reduction expressible as a layout test so far. The crash found with automated testing tools.
+
+ * bindings/v8/V8Binding.cpp:
+ (WebCore::v8NonStringValueToWebCoreString): Bail out on empty handle
+ * bindings/v8/V8Binding.h:
+ (WebCore::V8ParameterBase::prepareBase): Ditto
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Attempt to fix Chromium build.
+
+ * html/parser/XSSFilter.cpp:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, rolling out r77562.
+ http://trac.webkit.org/changeset/77562
+ https://bugs.webkit.org/show_bug.cgi?id=53630
+
+ broke chromium mac build
+
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.gyp/mac/check_objc_rename.sh: Removed.
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSS Auditor severely affects loading performance after submitting a large form
+ https://bugs.webkit.org/show_bug.cgi?id=49845
+
+ Switch over from the XSSAuditor to the XSSFilter, improving performance
+ on this example.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterToken):
+ * page/XSSAuditor.cpp:
+ (WebCore::XSSAuditor::isEnabled):
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, rolling out r77567.
+ http://trac.webkit.org/changeset/77567
+ https://bugs.webkit.org/show_bug.cgi?id=53468
+
+ broke chromium linux svg, canvas tests, possibly win also?
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::getImageData):
+ (WebCore::ImageBuffer::getUnmultipliedImageData):
+ (WebCore::ImageBuffer::getPremultipliedImageData):
+ (WebCore::putImageData):
+ (WebCore::ImageBuffer::putUnmultipliedImageData):
+ (WebCore::ImageBuffer::putPremultipliedImageData):
+
+2011-02-02 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Refactoring: <progress> should not use ShadowElement
+ https://bugs.webkit.org/show_bug.cgi?id=53583
+
+ - Introduced RenderIndicatorPart and RenderProgressBarValuePart
+ to be responsible for bar-part layout,
+ which adopted layout logic from ShadowBlockElement.
+ - ProgressBarValueElement is no longer a subclass of ShadowBlockElement.
+ - Remove dependency from RenderProgress to HTMLProgressElement and
+ ShadowBlockElement.
+ - The shadow tree is no longer removed on detach(). It becomes persistent.
+ This is now possible because the ShadowBlockElement dependency is gone.
+ - ::-webkit-appearance for -webkit-progress-bar-value is no longer referred.
+ That didn't make sense.
+
+ * html/HTMLProgressElement.cpp:
+ (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
+ * html/HTMLProgressElement.h:
+ * html/shadow/ProgressBarValueElement.h: Added.
+ (WebCore::ProgressBarValueElement::ProgressBarValueElement):
+ (WebCore::ProgressBarValueElement::shadowPseudoId):
+ (WebCore::ProgressBarValueElement::createRenderer):
+ (WebCore::ProgressBarValueElement::create):
+ * rendering/RenderIndicator.cpp:
+ (WebCore::RenderIndicatorPart::RenderIndicatorPart):
+ (WebCore::RenderIndicatorPart::~RenderIndicatorPart):
+ (WebCore::RenderIndicatorPart::layout):
+ (WebCore::RenderIndicatorPart::styleDidChange):
+ * rendering/RenderIndicator.h: Added RenderIndicatorPart class
+ (WebCore::RenderIndicatorPart::originalVisibility):
+ (WebCore::RenderIndicatorPart::requiresForcedStyleRecalcPropagation):
+ (WebCore::RenderIndicatorPart::canHaveChildren):
+ * rendering/RenderProgress.cpp:
+ (WebCore::RenderProgressBarValuePart::preferredFrameRect):
+ (WebCore::RenderProgressBarValuePart::shouldBeHidden):
+ (WebCore::RenderProgress::updateFromElement):
+ (WebCore::RenderProgress::layoutParts):
+ (WebCore::RenderProgress::shouldHaveParts):
+ * rendering/RenderProgress.h:
+ (WebCore::RenderProgressBarValuePart::RenderProgressBarValuePart):
+
+2011-02-03 Jia Pu <jpu@apple.com>
+
+ Reversion should not be marked as misspelled.
+ https://bugs.webkit.org/show_bug.cgi?id=53255
+
+ This patch includes fix for reported bug, and also some housekeeping changes.
+
+ To implement desired behavior, we need:
+ 1. Add a new marker type, SpellCheckingExemption, since now we distingusish between text
+ that shouldn't be spellchecked and text shouldn't be autocorrected.
+ 2. Make sure that there is no pending correction panel when we enter markAllMisspellingsAndBadGrammarInRanges().
+ Otherwise the spell checking code in that function may interfere with autocorrection. This
+ is achieved by explicitly applying pending correction when user types space, line break or
+ paragraph break.
+
+ Housekeeping code changes include:
+ 1. Change manual-tests that were broken by relocated WebCore directory.
+ 2. Use TextIterator in various DocumentMarkerController functions instead of using
+ Node::traverseNextNode() directly.
+ 3. Allow passing multiple marker types into DocumentMarkerController::removeMarkers() and
+ DocumentMarkerController::hasMarkers() to improve clarity and efficiency.
+ 4. Fixes of minor bugs that were exposed previously.
+
+ * WebCore.exp.in: Change signature of DocumentMarkerController::removeMarkers().
+
+ * dom/DocumentMarker.h: Added new marker type SpellCheckingExemption.
+
+ * dom/DocumentMarkerController.cpp:
+ (WebCore::DocumentMarkerController::removeMarkers): Use TextIterator to scan the range to be
+ consistent with addMarker() function. Allow passing in multiple marker types in one call.
+ Added a boolean argument to specify the behavior when removing markers that partially
+ overlap the specified range.
+ (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair): Allow passing in
+ multiple marker types in one call.
+ (WebCore::DocumentMarkerController::hasMarkers): Use TextIterator to scan the range to be
+ consistent with addMarker() function. Allow passing in multiple marker types in one call.
+
+ * dom/DocumentMarkerController.h: Allow passing in multiple marker types to removeMarkers()
+ and hasMarkers(). Added a boolean argument to removeMarkers() to specify the behavior when
+ removing markers that partially overlap the specified range.
+
+ * editing/Editor.cpp:
+ (WebCore::markerTypesForAutocorrection): Add SpellCheckingExemption marker when apply correction.
+ (WebCore::markerTypesForReplacement): Ditto.
+ (WebCore::Editor::respondToChangedSelection): Reordered call to dismissCorrectionPanel() and
+ setSelection() to make sure there is no pending correction when entering
+ markAllMisspellingsAndBadGrammarInRanges().
+ (WebCore::Editor::appliedEditing): Only remove CorrectionIndicator markers when the command
+ is a top level command to improve efficiency.
+ (WebCore::Editor::insertTextWithoutSendingTextEvent): Added code to applying pending correction.
+ (WebCore::Editor::insertLineBreak): Ditto.
+ (WebCore::Editor::insertParagraphSeparator): Ditto.
+ (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Don't mark mispelling if the
+ text carries SpellCheckingExemption marker.
+ (WebCore::Editor::correctionPanelTimerFired): Reset correction panel if the returned suggestion
+ from spellchecker is an empty string.
+ (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):
+ Use new DocumentMarkerController::removeMarkers() to replace custom implemenation to improve
+ efficiency and readability.
+ (WebCore::Editor::applyCorrectionPanelInfo): Remove the code that set caret position after
+ applying correction, since it's unnecessary. Also, store pre-correction string together with
+ the marker for reversion panel to use.
+ (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate): Apply pending correction.
+ (WebCore::Editor::changeSelectionAfterCommand): Moved marker removal code to Editor::appliedEditing()
+ where we have access to EditCommand object.
+
+ * editing/Editor.h: Added new function applyAutocorrectionAfterTypingIfAppropriate().
+
+ * manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html: Change manual-tests that
+ were broken by relocated WebCore directory.
+
+ * manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html: Ditto.
+
+ * manual-tests/autocorrection/autocorrection-contraction.html: Ditto.
+
+ * manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html: Ditto.
+
+ * manual-tests/autocorrection/delete-to-dismiss-reversion.html: Ditto.
+
+ * manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html: Ditto.
+
+ * manual-tests/autocorrection/dismiss-multiple-guesses.html: Ditto.
+
+ * manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html: Ditto.
+
+ * manual-tests/autocorrection/select-from-multiple-guesses.html: Ditto.
+
+ * manual-tests/autocorrection/spell-checking-after-reversion.html: Added.
+
+ * manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html: Change manual-tests that
+ were broken by relocated WebCore directory.
+
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::paintDocumentMarkers): Code clean-up to be more concise.
+
+2011-02-03 Abhishek Arya <inferno@chromium.org>
+
+ Unreviewed, qt build fix.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::removeFloatingObject):
+
+2011-02-03 Brian Salomon <bsalomon@google.com>
+
+ Reviewed by James Robinson.
+
+ Handle non-raster backed images in getUnmultipliedImageData()
+ https://bugs.webkit.org/show_bug.cgi?id=53468
+
+ No new tests. Existing canvas tests sufficient
+ LayoutTests/canvas/philip/...
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::getImageData):
+ (WebCore::ImageBuffer::getUnmultipliedImageData):
+ (WebCore::ImageBuffer::getPremultipliedImageData):
+ (WebCore::putImageData):
+ (WebCore::ImageBuffer::putUnmultipliedImageData):
+ (WebCore::ImageBuffer::putPremultipliedImageData):
+
+2011-02-03 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Enforce more limits on root inline boxes height calculations.
+ https://bugs.webkit.org/show_bug.cgi?id=53729
+
+ Test: fast/overflow/overflow-height-float-not-removed-crash.html
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::removeFloatingObject): prevent logicalBottom to
+ become negative when logicalTop is INT_MAX.
+ (WebCore::RenderBlock::markLinesDirtyInBlockRange): when logicalBottom
+ is INT_MAX, we should dirty everything. So, we bail out to make
+ afterLowest equal to the lastRootBox() or lowestDirstLine.
+
+2011-02-03 David Levin <levin@chromium.org>
+
+ Reviewed by Adam Barth and Oliver Hunt.
+
+ Worker.importScript() should clean errors for cross origin imports.
+ https://bugs.webkit.org/show_bug.cgi?id=52871
+
+ Test: http/tests/workers/worker-importScriptsOnError.html
+
+ * bindings/js/WorkerScriptController.cpp:
+ (WebCore::WorkerScriptController::evaluate): Use sanitizeScriptError
+ to determine when to create a clean exception.
+ * bindings/v8/WorkerContextExecutionProxy.cpp:
+ (WebCore::WorkerContextExecutionProxy::evaluate): Ditto.
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::sanitizeScriptError): Figure out
+ if the error needs to be cleaned up.
+ (WebCore::ScriptExecutionContext::dispatchErrorEvent): Extracted
+ sanitizeScriptError for use by other places.
+ * dom/ScriptExecutionContext.h:
+ * workers/WorkerContext.cpp:
+ (WebCore::WorkerContext::importScripts): Use the reponse url when
+ telling the evaluate where the script came fro.
+ * workers/WorkerScriptLoader.cpp:
+ (WebCore::WorkerScriptLoader::responseURL): Expose the url that
+ the script was loaded from (which may be different from url() due
+ to redirects).
+ (WebCore::WorkerScriptLoader::didReceiveResponse): Capture the reponse url.
+ * workers/WorkerScriptLoader.h:
+
+2011-02-03 Mark Mentovai <mark@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Chromium GYP build fix.
+
+ When various settings were moved to webcore_prerequisites in r66364,
+ things that should have been direct_dependent_settings were not marked
+ as such. GYP 'defines', for example, make no sense on a 'none'-type
+ target such as webcore_prerequisites. It appears that it was intended
+ for these settings to be pushed to direct dependents, which would make
+ direct_dependent_settings correct.
+
+ Losing the ChromiumWebCoreObjC defines on the Mac, for example, caused
+ http://crbug.com/71537, which at best causes Mac console log spew, and
+ at worst may result in Chromium's copy of WebCore using system
+ definitions of certain Objective-C classes at runtime, or vice-versa.
+
+ The build now includes a postbuild step to prevent
+ http://crbug.com/71537 from regressing again. The build will fail upon
+ regression.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53630
+
+ * WebCore.gyp/WebCore.gyp: Move things in webcore_prerequisites into
+ direct_dependent_settings as needed, add the check_objc_rename
+ postbuild step.
+ * WebCore.gyp/mac/check_objc_rename.sh: Added.
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Make XSSFilter go fast by adding a SuffixTree
+ https://bugs.webkit.org/show_bug.cgi?id=53665
+
+ The SuffixTree lets us quickly reject snippets if the POST data is
+ large (because we can avoid a linear scan over the POST data).
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::init):
+ (WebCore::XSSFilter::isContainedInRequest):
+ * html/parser/XSSFilter.h:
+
+2011-02-03 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ REGRESSION (r77355): Page cache layout tests crash
+ https://bugs.webkit.org/show_bug.cgi?id=53648
+
+ Test: fast/events/pagehide-timeout.html
+
+ Suspend active DOM objects after all pagehide event handlers have run,
+ otherwise it's possible for them to create more objects that weren't
+ getting suspended.
+
+ * history/CachedFrame.cpp:
+ (WebCore::CachedFrame::CachedFrame):
+
+2011-02-03 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ SerializedScriptValue should not require v8 to create undefined and null values
+ https://bugs.webkit.org/show_bug.cgi?id=53730
+
+ Instead of creating a v8 type and passing that into the constructor, just use
+ the writer class directly. While I was at it, I cleaned up the code a bit too
+ by getting rid of the WireData/StringValue enum as I found that personally
+ confusing.
+
+ This is necessary because these methods are called by IndexedDB in the browser
+ process where v8 is not spun up.
+
+ No functionality changed and not possible to test.
+
+ * bindings/v8/SerializedScriptValue.cpp:
+ (WebCore::SerializedScriptValue::createFromWire):
+ (WebCore::SerializedScriptValue::create):
+ (WebCore::SerializedScriptValue::nullValue):
+ (WebCore::SerializedScriptValue::undefinedValue):
+ (WebCore::SerializedScriptValue::release):
+ (WebCore::SerializedScriptValue::SerializedScriptValue):
+ * bindings/v8/SerializedScriptValue.h:
+
+2011-02-03 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8944544> Ability to animate track
+ for WKPainter scrollers
+
+ Two new WebKitSystemInterface functions.
+ * WebCore.exp.in:
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+ Use Scrollbar::convertFromContainingView() to return the right point.
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
+
+ ScrollKnobAnimation is now ScrollbarPartAnimation. It can
+ now be used to animate the knob or the track.
+ (-[ScrollbarPartAnimation initWithScrollbarPainter:part:WebCore::scrollAnimator:WebCore::animateAlphaTo:duration:]):
+ (-[ScrollbarPartAnimation setCurrentProgress:]):
+ (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
+
+ Scrollbars need invalodating after the overlay state changes.
+ (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
+
+2011-02-03 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Scroll thumb jumps to top when resizing horizontally.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::updateScrollbars): Add call to update
+ the scrollbar's offset in the case where we may have created
+ a new scrollbar but have not changed the current position.
+
+2011-02-03 Justin Schuh <jschuh@chromium.org>
+
+ Reviewed by Dirk Schulze.
+
+ startAnimations should use a local, RefCounted Vector.
+ https://bugs.webkit.org/show_bug.cgi?id=53458
+
+ Test: svg/custom/use-animation-in-fill.html
+
+ * svg/SVGDocumentExtensions.cpp:
+ (WebCore::SVGDocumentExtensions::startAnimations):
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSSFilter shouldn't bother to analyze pages without "injection"
+ characters in the request
+ https://bugs.webkit.org/show_bug.cgi?id=53664
+
+ If the request lacks these "injection" characters, then it's unlikely
+ that there's a reflective XSS attack happening. This hueristic lets us
+ avoid analyzing the vast majority of responses for XSS. Of course, the
+ hueristic isn't perfect. Because of this huerstic, we miss out on
+ injections into unquoted attributes. However, it's a trade-off that's
+ worked well in the XSSAuditor.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::isRequiredForInjection):
+ (WebCore::XSSFilter::XSSFilter):
+ (WebCore::XSSFilter::init):
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::isContainedInRequest):
+ * html/parser/XSSFilter.h:
+
+2011-02-03 Vangelis Kokkevis <vangelis@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Fixing a compositor crash occurring on layers
+ without an associated RenderSurface.
+ https://bugs.webkit.org/show_bug.cgi?id=53679
+ Regression was introduced by in r77425
+
+ Test: http://webkit.org/blog/386/3d-transforms/ doesn't crash
+ anymore.
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawLayer):
+
+2011-02-03 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ <rdar://problem/8948788> Text emphasis marks have wrong orientation for vertical text
+ https://bugs.webkit.org/show_bug.cgi?id=53709
+
+ Covered by rendering of fast/text/emphasis-vertical.html
+
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::scaledFontData): Give the scaled font the same orientation this font
+ has.
+
+2011-02-02 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ Moving cursor down in table cycles at the end of a row
+ https://bugs.webkit.org/show_bug.cgi?id=50012
+
+ Avoids a caret cycling issue with certain content (e.g. tables) found at the very
+ end of a document due to a bug in nextLeafWithSameEditability.
+
+ Test: editing/selection/move-by-line-cycles-in-table.html
+
+ * editing/visible_units.cpp:
+ (WebCore::nextLeafWithSameEditability): Properly avoid descending back into the
+ original leaf node.
+
+2011-02-03 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove dead code related to changes panel.
+ https://bugs.webkit.org/show_bug.cgi?id=53688
+
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * inspector/front-end/ChangesView.js: Removed.
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.css:
+ (#error-warning-count):
+ (#error-warning-count:hover):
+ (#error-count + #warning-count):
+ * inspector/front-end/inspector.html:
+ * inspector/front-end/inspector.js:
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add notification of the end of a rubber band.
+ <rdar://problem/8940648>
+
+ * WebCore.exp.in:
+ Add additional exprots.
+
+ * page/ChromeClient.h:
+ (WebCore::ChromeClient::didCompleteRubberBandForMainFrame):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::didCompleteRubberBand):
+ * page/FrameView.h:
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::didCompleteRubberBand):
+ * platform/ScrollView.h:
+ Add hook.
+
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::inLiveResize):
+ (WebCore::ScrollableArea::maximumScrollPosition):
+ (WebCore::ScrollableArea::visibleWidth):
+ (WebCore::ScrollableArea::overhangAmount):
+ (WebCore::ScrollableArea::didCompleteRubberBand):
+ Reorganize and de-virtualize live resize notifications.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
+ Call the new hook when the rubberband ends.
+
+2011-02-02 Evan Martin <evan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [chromium] complex joining characters positioned in wrong place
+ https://bugs.webkit.org/show_bug.cgi?id=53637
+
+ Provide the correct font metrics to Harfbuzz related to the font design space.
+ There are used in some fonts for GPOS positioning.
+
+ Test: platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html
+
+ * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+ (WebCore::ComplexTextController::setupFontForScriptRun):
+ (WebCore::ComplexTextController::allocHarfbuzzFont):
+ * platform/graphics/chromium/FontPlatformDataLinux.cpp:
+ (WebCore::FontPlatformData::FontPlatformData):
+ (WebCore::FontPlatformData::emSizeInFontUnits):
+ (WebCore::FontPlatformData::operator=):
+ * platform/graphics/chromium/FontPlatformDataLinux.h:
+ (WebCore::FontPlatformData::FontPlatformData):
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ REGRESSION(r76147): Slider thumb position is not updated when value attribute is changed.
+ https://bugs.webkit.org/show_bug.cgi?id=53634
+
+ Test: fast/dom/HTMLInputElement/input-slider-update.html
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::setValue): Added a call to InputType::valueChanged.
+ * html/InputType.cpp:
+ (WebCore::InputType::valueChanged): Added empty implementation.
+ * html/InputType.h: Added def.
+ * html/RangeInputType.cpp:
+ (WebCore::RangeInputType::valueChanged): Added implementation that dirties layout
+ bit on the thumb.
+ * html/RangeInputType.h: Added def.
+
+2011-02-02 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: do not share source frames between resources panel and scripts panel.
+ https://bugs.webkit.org/show_bug.cgi?id=53584
+
+ Currently, we show error messages only for resources. This change will allow showing error
+ messages in source frame even when resource is not available (eval scripts, inlined scripts).
+
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype.addMessage):
+ (WebInspector.ConsoleView.prototype.clearMessages):
+ * inspector/front-end/ResourceView.js:
+ (WebInspector.ResourceView.recreateResourceView):
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.FrameResourceTreeElement.prototype._setBubbleText):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
+ (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
+ (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
+ (WebInspector.ScriptsPanel.prototype.reset):
+ (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
+ (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
+ (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):
+
+2011-02-03 Simon Fraser <simon.fraser@apple.com>
+
+ Fix 32-bit builds.
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::blurLayerImage):
+
+2011-02-03 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Add reporting of JS heap size limit to 'console.memory'.
+ https://bugs.webkit.org/show_bug.cgi?id=53592
+
+ In JSC there is no limit, thus 'undefined' value is returned.
+ For V8, the limit reported by the VM is returned.
+
+ * Android.jscbindings.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSBindingsAllInOne.cpp:
+ * bindings/js/JSMemoryInfoCustom.cpp: Added.
+ * bindings/js/ScriptGCEvent.cpp:
+ (WebCore::ScriptGCEvent::getHeapSize):
+ * bindings/js/ScriptGCEvent.h:
+ * bindings/v8/ScriptGCEvent.cpp:
+ (WebCore::ScriptGCEvent::getHeapSize):
+ * bindings/v8/ScriptGCEvent.h:
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
+ * page/MemoryInfo.cpp:
+ (WebCore::MemoryInfo::MemoryInfo):
+ * page/MemoryInfo.h:
+ (WebCore::MemoryInfo::jsHeapSizeLimit):
+ * page/MemoryInfo.idl:
+
+2011-01-27 Philippe Normand <pnormand@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] LayoutTests/media/audio-mpeg4-supported.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53125
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::mimeTypeCache): Add audio/x-m4a mimetype in the cache.
+
+2011-02-03 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ ShadowBlur radius for CSS shadows is slightly too big
+ https://bugs.webkit.org/show_bug.cgi?id=53660
+
+ If we follow SVG gaussian blur for CSS shadows, we can end up rendering
+ shadows that extend further than the CSS "blur radius", which results
+ in the shadows being truncated.
+
+ Fix with a small fudge factor to reduce the kernel diameter slightly
+ for CSS shadows.
+
+ Also more closely follow the algorithm described in the SVG spec
+ for computing the kernel size for different diameters, and clean up
+ some variable naming relating to the shadow bounds.
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::blurLayerImage):
+ (WebCore::ShadowBlur::drawRectShadowWithTiling):
+
+2011-02-01 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: introduce new api for managing JavaScript breakpoints.
+ https://bugs.webkit.org/show_bug.cgi?id=53235
+
+ Single protocol breakpoint (e.g. set by url) is mapped on zero or more VM breakpoints (set by sourceID).
+ removeJavaScriptBreakpoint(breakpointId) removes breakpoint and all linked VM breakpoints.
+ Since UI uses VM breakpoint location rather then protocol breakpoint location, all resolved breakpoints locations are passed to frontend.
+
+ SourceFrame is now aware of whether breakpoint is resolved or not and may display it accordingly.
+ JavaScriptBreakpointsSidebarPane filters out breakpoints set on nonexistent scripts to avoid UI cluttering.
+
+ * bindings/js/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::setBreakpoint):
+ (WebCore::ScriptDebugServer::removeBreakpoint):
+ * bindings/js/ScriptDebugServer.h:
+ * bindings/v8/DebuggerScript.js:
+ ():
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::setBreakpoint):
+ * bindings/v8/ScriptDebugServer.h:
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp: clear breakpoints from inspector state when new frontend is created
+ (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
+ (WebCore::InspectorAgent::populateScriptObjects):
+ (WebCore::InspectorAgent::restoreDebugger):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorDebuggerAgent.cpp: manage relations between protocol breakpoints and VM breakpoints
+ (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::inspectedURLChanged):
+ (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpoint):
+ (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpointBySourceId):
+ (WebCore::InspectorDebuggerAgent::removeJavaScriptBreakpoint):
+ (WebCore::InspectorDebuggerAgent::continueToLocation):
+ (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
+ (WebCore::InspectorDebuggerAgent::getScriptSource):
+ (WebCore::InspectorDebuggerAgent::didParseSource):
+ (WebCore::InspectorDebuggerAgent::didPause):
+ * inspector/InspectorDebuggerAgent.h:
+ (WebCore::InspectorDebuggerAgent::Script::Script):
+ * inspector/InspectorValues.cpp:
+ (WebCore::InspectorValue::asNumber):
+ (WebCore::InspectorBasicValue::asNumber):
+ (WebCore::InspectorObject::remove):
+ * inspector/InspectorValues.h:
+ (WebCore::InspectorObject::getNumber):
+ (WebCore::InspectorObject::find):
+ * inspector/ScriptBreakpoint.h:
+ (WebCore::ScriptBreakpoint::ScriptBreakpoint):
+ * inspector/front-end/Breakpoint.js:
+ (WebInspector.Breakpoint):
+ (WebInspector.Breakpoint.prototype.addLocation):
+ * inspector/front-end/BreakpointManager.js: remove all stuff related to JavaScript breakpoints from here
+ (WebInspector.BreakpointManager):
+ (WebInspector.BreakpointManager.prototype._projectChanged):
+ (WebInspector.BreakpointManager.prototype._saveBreakpoints):
+ (WebInspector.BreakpointManager.prototype._validateBreakpoints):
+ * inspector/front-end/BreakpointsSidebarPane.js:
+ (WebInspector.JavaScriptBreakpointsSidebarPane): filter breakpoints set on nonexistent scripts to avoid ui cluttering
+ * inspector/front-end/DebuggerModel.js:
+ (WebInspector.DebuggerModel): pull all JavaScript from localStorage and push them to fronted when debugger is enabled, save resolved breakpoints data
+ * inspector/front-end/Script.js:
+ (WebInspector.Script.prototype.sourceLine):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._toggleDebugging):
+ * inspector/front-end/Settings.js:
+ (WebInspector.Settings):
+ * inspector/front-end/SourceFrame.js: handle resolved and unresolved breakpoints differently
+ * inspector/front-end/inspector.js:
+
+2011-02-03 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ small text which is scaled to be large renders pixelated
+ https://bugs.webkit.org/show_bug.cgi?id=12448
+
+ SVG <text> with font-size smaller or equal to 1 does not paint correctly
+ https://bugs.webkit.org/show_bug.cgi?id=14242
+
+ misplaced text in SVG
+ https://bugs.webkit.org/show_bug.cgi?id=17053
+
+ Don't render very small (but zoomed) text inside SVG
+ https://bugs.webkit.org/show_bug.cgi?id=19393
+
+ Tiny fonts scaled up end up too large in Safari
+ https://bugs.webkit.org/show_bug.cgi?id=20192
+
+ Stretched SVG Text has awful glyph spacing
+ https://bugs.webkit.org/show_bug.cgi?id=21774
+
+ REGRESSION (r72141?): svg/batik/text/smallFonts.svg failing on Leopard
+ https://bugs.webkit.org/show_bug.cgi?id=49846
+
+ [Gtk] Text height in zoomed SVG is 1px too high
+ https://bugs.webkit.org/show_bug.cgi?id=50313
+
+ SVG text smaller than 0.5px not displayed properly
+ https://bugs.webkit.org/show_bug.cgi?id=50528
+
+ When rendering text, we're selecting a font with a size, as specified in the markup.
+ This can lead to problems, if the context, where the text is rendered upon, is scaled. If a parent
+ element of the <text> defines a transform=".." or the outermost <svg> containing a viewBox the
+ problem becomes apparent.
+
+ Consider following two snippets, which should render exactly the same:
+ <svg viewBox="0 0 100 100"><text x="25" y="50" font-size="25">test</text></svg>
+ <svg viewBox="0 0 1 1"><text x="0.25" y="0.5" font-size="0.25">test</text></svg>
+
+ When selecting a font size below 0.5, FontCacheMac would request a font with size 0,
+ which AppKit turns into 12. This lead to huge text rendering, instead of small text on Mac.
+ Other platforms have different problems (Qt simply scales the font, leading to pixelation etc.)
+
+ To fix this in a cross-platform fashion, we now always compute the final font size on screen,
+ remove any scaling from the context, draw the text using the scaled font size, then reapply
+ the context scale. This makes the example snippets above render exactly the same and fixes
+ numerous of bugs, present since years. As we're now heavily using floating-point font sizes
+ internally, depending on the scale of the document, it's very important to use the new
+ floating-point text metrics information (floatAscent/floatDescent/floatHeight) everywhere in SVG.
+
+ Fixes existing tests: css3/zoom-coords.xhtml (cross-platform inconsistencies should be gone, mac now reports floatHeight values for SVG text height)
+ svg/hixie/text/003.html (no more pixelation)
+ svg/batik/text/smallFonts.svg (small fonts aren't rendered huge anymore on mac)
+ svg/hixie/viewbox/preserveAspectRatio/001.xml (bug 21774, no more awful spacing)
+ svg/zoom/page/zoom-zoom-coords.xhtml (cross-platform inconsistencies should be gone, inspired by bug 50313)
+
+ Tests: svg/text/font-size-below-point-five-2.svg (reduction from bug 50528)
+ svg/text/font-size-below-point-five.svg (reduction from bug 50528)
+ svg/text/scaled-font.svg (reduction from bug 12448)
+ svg/text/small-fonts-2.svg (reduction from bug 14242)
+ svg/text/small-fonts-3.svg (reduction from bug 17053)
+ svg/text/small-fonts-in-html5.html (reduction from bug 19393)
+ svg/text/small-fonts.svg (reduction from bug 20192))
+
+ * rendering/svg/RenderSVGInlineText.cpp: Cache 'float scalingFactor' & 'Font scaledFont', whenever the on-screen representation changes.
+ * rendering/svg/RenderSVGInlineText.h:
+ * rendering/svg/RenderSVGText.cpp: Update scalingFactor/scaledFont, if necessary.
+ * rendering/svg/SVGInlineTextBox.cpp: Switch to new font rendering strategy. Always use scaledFont, and remove any context scale before drawing.
+ * rendering/svg/SVGInlineTextBox.h:
+ * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Use floating-point metrics everywhere.
+ * rendering/svg/SVGTextMetrics.cpp: Ditto.
+ * rendering/svg/SVGTextMetrics.h: Ditto.
+ * rendering/svg/SVGTextQuery.cpp: Ditto.
+ * svg/SVGFont.cpp: Adjust stroke thickness, when drawing SVGFonts into a normalized context (no more scale).
+ * svg/SVGTextContentElement.cpp: Make <text> elements always dependant on window size changes in combination with viewBox set.
+ * svg/SVGTextPositioningElement.cpp: Remove now unnecessary code to determine wheter relative lengths are used as text attributes.
+ * svg/SVGTextPositioningElement.h:
+
+2011-02-03 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: resources panel doesn't show frames after reload.
+ https://bugs.webkit.org/show_bug.cgi?id=53430
+
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel.prototype.show):
+ (WebInspector.ResourcesPanel.prototype.loadEventFired):
+ (WebInspector.ResourcesPanel.prototype._initDefaultSelection):
+ (WebInspector.ResourcesPanel.prototype.reset):
+ (WebInspector.ResourcesPanel.prototype.clear):
+ * inspector/front-end/inspector.js:
+ (WebInspector.loadEventFired):
+
+2011-02-01 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Remove the *2 suffix from the CSS style-related protocol methods
+ https://bugs.webkit.org/show_bug.cgi?id=53492
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorCSSAgent.cpp:
+ (WebCore::InspectorCSSAgent::getStylesForNode):
+ (WebCore::InspectorCSSAgent::getInlineStyleForNode):
+ (WebCore::InspectorCSSAgent::getComputedStyleForNode):
+ (WebCore::InspectorCSSAgent::getAllStyles):
+ (WebCore::InspectorCSSAgent::getStyleSheet):
+ (WebCore::InspectorCSSAgent::getStyleSheetText):
+ (WebCore::InspectorCSSAgent::setStyleSheetText):
+ (WebCore::InspectorCSSAgent::setPropertyText):
+ (WebCore::InspectorCSSAgent::toggleProperty):
+ (WebCore::InspectorCSSAgent::setRuleSelector):
+ (WebCore::InspectorCSSAgent::addRule):
+ * inspector/InspectorCSSAgent.h:
+ * inspector/front-end/AuditRules.js:
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
+ * inspector/front-end/CSSStyleModel.js:
+ (WebInspector.CSSStyleModel.prototype.getStylesAsync):
+ (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
+ (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
+ (WebInspector.CSSStyleModel.prototype.setRuleSelector):
+ (WebInspector.CSSStyleModel.prototype.addRule):
+ (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
+ (WebInspector.CSSStyleModel.prototype._onRevert):
+ (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
+ (WebInspector.CSSProperty.prototype.setText):
+ (WebInspector.CSSProperty.prototype.setDisabled):
+ (WebInspector.CSSStyleSheet.createForId):
+ (WebInspector.CSSStyleSheet.prototype.setText):
+
+2011-02-03 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter about data URLs
+ https://bugs.webkit.org/show_bug.cgi?id=53662
+
+ The XSS filter doesn't really make sense for data URLs because
+ everything in a "response" from a data URL was part of the request.
+
+ Test: http/tests/security/xssAuditor/data-urls-work.html
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::init):
+ (WebCore::XSSFilter::filterToken):
+
+2011-02-02 Chris Evans <cevans@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ window.find() can fail when switching case sensitivity
+ https://bugs.webkit.org/show_bug.cgi?id=53654
+
+ Reset the pattern to a safe one when done, to avoid usearch_reset()
+ indirectly touching the old, stale text pointer.
+
+ Test: fast/text/find-window.html
+
+ * editing/TextIterator.cpp:
+ (WebCore::SearchBuffer::~SearchBuffer): leave a safe pattern buffer when done.
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter that <param> elements can contain URLs
+ https://bugs.webkit.org/show_bug.cgi?id=53652
+
+ When loading plugins for the <object> tag, we're "smart" enough to
+ reach into the <param> elements and pull out the URL in some cases.
+ This patch teaches the XSSFilter how to block injections into those
+ sorts of param elements.
+
+ Fixes:
+ http/tests/security/xssAuditor/object-*
+
+ * html/HTMLParamElement.cpp:
+ (WebCore::HTMLParamElement::isURLParameter):
+ (WebCore::HTMLParamElement::isURLAttribute):
+ (WebCore::HTMLParamElement::addSubresourceAttributeURLs):
+ * html/HTMLParamElement.h:
+ - Add a helper function so that HTMLParamElement can share the
+ ground truth for these names with the XSSFilter.
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterTokenInitial):
+ (WebCore::XSSFilter::filterParamToken):
+ * html/parser/XSSFilter.h:
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by David Levin.
+
+ GCC compiler on ARM issues bogus warnings and fails to compile.
+ https://bugs.webkit.org/show_bug.cgi?id=53620
+
+ Despite warnings explicitly being disallowed (-Wno-uninitialized),
+ gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 throws up the warnings like:
+
+ "error: 'colorTransparent.unstatic.4909' may be used uninitialized in this function"
+
+ The fix is to add an extra condition, which somehow pacifies the compiler.
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::CSSPrimitiveValue::createColor): Added workaround conditions.
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter about X-XSS-Protection
+ https://bugs.webkit.org/show_bug.cgi?id=53640
+
+ This patch causes us to pass:
+ http/tests/security/xssAuditor/full-block-*
+ http/tests/security/xssAuditor/no-protection-script-tag.html
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::XSSFilter):
+ (WebCore::XSSFilter::init):
+ (WebCore::XSSFilter::filterToken):
+ * html/parser/XSSFilter.h:
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ When XSSFilter blocks JavaScript URLs, use a safe JavaScript URL
+ instead of the empty string
+ https://bugs.webkit.org/show_bug.cgi?id=53643
+
+ In a URL context, the empty string completes to the URL of the current
+ page, which causes these tests to go into an infinite loop. Instead,
+ we should use a "safe" JavaScript URL that does nothing.
+
+ Fixes:
+ http/tests/security/xssAuditor/javascript-link*
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::eraseDangerousAttributesIfInjected):
+
+2011-02-02 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/8380506> REGRESSION (r61921): RTL text in <b> tag doesn't display in WebKit under certain conditions
+ https://bugs.webkit.org/show_bug.cgi?id=44942
+
+ Test: fast/text/bidi-embedding-pop-and-push-same-2.html
+
+ * platform/text/BidiResolver.h:
+ (WebCore::::commitExplicitEmbedding): Changed to return a boolean indicating whether there was
+ a change to embedding levels.
+ (WebCore::::createBidiRunsForLine): If embedding levels did not change as a result of committing
+ the explicit embedding sequence, then runs were not added, and we should continue normally.
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dan Bernstein.
+
+ Fix miscalculation of the overhang area used for painting. We were
+ not correctly accounting for scrollbars resulting in an non-negative
+ overhang even when we weren't over the edge.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::calculateOverhangAreasForPainting):
+
+2011-02-02 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ IDBTransaction and IDBRequest can be deleted while ScriptExecutionContext is iterating....which is bad
+ https://bugs.webkit.org/show_bug.cgi?id=52722
+
+ The solution is to change ScriptExecutionContext's destructor to iterate over
+ the list in a way that handles the mutations. This new method is destructive,
+ but that's OK since the object is going away. I've also added a several asserts.
+
+ There should be no behavior change.
+
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::ScriptExecutionContext):
+ (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
+ (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
+ (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
+ (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
+ (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
+ (WebCore::ScriptExecutionContext::createdActiveDOMObject):
+ (WebCore::ScriptExecutionContext::destroyedActiveDOMObject):
+ * dom/ScriptExecutionContext.h:
+ * storage/IDBTransaction.cpp:
+ (WebCore::IDBTransaction::contextDestroyed):
+ * storage/IDBTransaction.h:
+
+2011-02-02 Mark Rowe <mrowe@apple.com>
+
+ Build fix.
+
+ * WebCore.exp.in: Remove some bogus symbols from the .exp.in file.
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::unregisterScrollbar): Look the object
+ up in the HashMap rather than relying on a local variable that doesn't
+ exist.
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter about JavaScript URLs
+ https://bugs.webkit.org/show_bug.cgi?id=53635
+
+ This patch teaches the XSSFilter to check for JavaScript URLs in
+ attribute values. If this approach has too many false positives, we
+ can restrict which attribute names we examine.
+
+ Fixes these tests:
+ http/tests/security/xssAuditor/anchor-url-dom-write-location-javascript-URL.html
+ http/tests/security/xssAuditor/dom-write-location-javascript-URL.html
+ http/tests/security/xssAuditor/iframe-javascript-url*
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::containsJavaScriptURL):
+ (WebCore::XSSFilter::filterTokenInitial):
+ (WebCore::XSSFilter::eraseDangerousAttributesIfInjected):
+ * html/parser/XSSFilter.h:
+
+2011-02-02 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig, even though this is just a...
+
+ ...build fix.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+
+2011-02-02 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ <rdar://problem/8952012> Crash on launch inside scrollbar code.
+
+ We need to ensure that we remove ourselves as the delegates of objects when we're going
+ away as failing to do this can lead to crashes if the lifetime of the other objects
+ is longer than ours.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::unregisterScrollbar):
+
+2011-02-02 Beth Dakin <bdakin@apple.com>
+
+ Build fix.
+
+ * WebCore.exp.in:
+
+2011-02-02 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77397.
+
+ * page/wince/FrameWinCE.cpp:
+ (WebCore::computePageRectsForFrame):
+
+2011-02-02 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77398.
+
+ * platform/graphics/wince/PlatformPathWinCE.cpp:
+ (WebCore::containsPoint):
+ (WebCore::inflateRectToContainPoint):
+ (WebCore::PlatformPath::addRect):
+ * platform/graphics/wince/SharedBitmap.cpp:
+ (WebCore::SharedBitmap::drawPattern):
+ * rendering/RenderThemeWinCE.cpp:
+ (WebCore::RenderThemeWinCE::paintMenuListButton):
+ (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
+ (WebCore::RenderThemeWinCE::paintSliderTrack):
+ (WebCore::RenderThemeWinCE::paintMediaMuteButton):
+ (WebCore::RenderThemeWinCE::paintMediaPlayButton):
+ (WebCore::RenderThemeWinCE::paintMediaSeekBackButton):
+ (WebCore::RenderThemeWinCE::paintMediaSeekForwardButton):
+
+2011-02-02 Jian Li <jianli@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [V8] Accessing DataView with index of -1 returns 0, doesn't throw
+ https://bugs.webkit.org/show_bug.cgi?id=53559
+
+ Added test cases to cover this in fast/canvas/webgl/data-view-test.html.
+
+ * html/canvas/DataView.h:
+ (WebCore::DataView::beyondRange):
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Add ChromeClient function to paint custom overhang areas.
+ https://bugs.webkit.org/show_bug.cgi?id=53639
+
+ * page/Chrome.cpp:
+ (WebCore::ChromeClient::paintCustomOverhangArea):
+ * page/ChromeClient.h:
+ Add ChromeClient function.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::paintOverhangAreas):
+ * page/FrameView.h:
+ Call out the the ChromeClient, call ScrollView base implementation
+ if the ChromeClient returns false.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::paintOverhangAreas):
+ * platform/ScrollView.h:
+ Add dirty rect for use when painting overhang areas.
+
+2011-02-02 Peter Kasting <pkasting@google.com>
+
+ Not reviewed, build fix.
+
+ Fix compile after r77427.
+ https://bugs.webkit.org/show_bug.cgi?id=53455
+
+ * platform/graphics/qt/ImageDecoderQt.cpp:
+ (WebCore::ImageDecoderQt::internalHandleCurrentImage):
+ * platform/image-decoders/ImageDecoder.cpp:
+ (WebCore::ImageFrame::operator=):
+ * platform/image-decoders/bmp/BMPImageReader.cpp:
+ (WebCore::BMPImageReader::decodeBMP):
+ * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
+ (WebCore::JPEGImageDecoder::outputScanlines):
+ * platform/image-decoders/png/PNGImageDecoder.cpp:
+ (WebCore::PNGImageDecoder::rowAvailable):
+ * platform/image-decoders/webp/WEBPImageDecoder.cpp:
+ (WebCore::WEBPImageDecoder::decode):
+
+2011-02-02 Peter Kasting <pkasting@google.com>
+
+ Reviewed by David Levin.
+
+ Clean up ImageDecoder's comments (remove/trim/clarify).
+ https://bugs.webkit.org/show_bug.cgi?id=53455
+
+ This also renames or eliminates a couple of functions for clarity, and
+ switches a couple erroneous strncmp() calls to memcmp().
+
+ * platform/image-decoders/ImageDecoder.cpp:
+ (WebCore::ImageDecoder::create):
+ (WebCore::ImageFrame::clearPixelData):
+ (WebCore::ImageFrame::zeroFillPixelData):
+ (WebCore::ImageFrame::setSize):
+ * platform/image-decoders/ImageDecoder.h:
+ (WebCore::ImageFrame::originalFrameRect):
+ (WebCore::ImageFrame::setOriginalFrameRect):
+ (WebCore::ImageDecoder::ImageDecoder):
+ (WebCore::ImageDecoder::~ImageDecoder):
+ (WebCore::ImageDecoder::isSizeAvailable):
+ (WebCore::ImageDecoder::size):
+ (WebCore::ImageDecoder::setIgnoreGammaAndColorProfile):
+ (WebCore::ImageDecoder::clearFrameBufferCache):
+ (WebCore::ImageDecoder::isOverSize):
+ * platform/image-decoders/bmp/BMPImageReader.cpp:
+ (WebCore::BMPImageReader::processNonRLEData):
+ * platform/image-decoders/cg/ImageDecoderCG.cpp:
+ (WebCore::ImageFrame::setSize):
+ * platform/image-decoders/gif/GIFImageDecoder.cpp:
+ (WebCore::GIFImageDecoder::clearFrameBufferCache):
+ (WebCore::GIFImageDecoder::frameComplete):
+ (WebCore::GIFImageDecoder::initFrameBuffer):
+ * platform/image-decoders/jpeg/JPEGImageDecoder.h:
+ * platform/image-decoders/qt/ImageFrameQt.cpp:
+ (WebCore::ImageFrame::operator=):
+ (WebCore::ImageFrame::clearPixelData):
+ (WebCore::ImageFrame::zeroFillPixelData):
+ (WebCore::ImageFrame::setSize):
+ * platform/image-decoders/skia/ImageDecoderSkia.cpp:
+ (WebCore::ImageFrame::operator=):
+ (WebCore::ImageFrame::clearPixelData):
+ (WebCore::ImageFrame::zeroFillPixelData):
+ (WebCore::ImageFrame::setSize):
+ * platform/image-decoders/webp/WEBPImageDecoder.h:
+
+2011-02-02 Vangelis Kokkevis <vangelis@chromium.org>
+
+ [chromium] Adding support for reflections to the accelerated
+ compositing path.
+ https://bugs.webkit.org/show_bug.cgi?id=53179
+
+ All layout tests in compositing/reflections generate correct
+ results with the exception of:
+ 1. nested-reflection-anchor-point.html : There appears to be
+ some issue with the layer transform math that I haven't been
+ able to track down yet.
+ 2. reflection-opacity.html : The current implementation applies
+ opacity before doing the reflection which makes this test
+ produce incorrect results. This will affect reflected layers
+ with opacity that overlap their original layer. FIXME comment
+ added in the code.
+
+ Tests: Covered by existing layout tests in compositing/reflections.
+ Please see above for exceptions.
+
+ * platform/graphics/chromium/GraphicsLayerChromium.cpp:
+ (WebCore::GraphicsLayerChromium::setReplicatedByLayer):
+ (WebCore::GraphicsLayerChromium::updateAnchorPoint):
+ * platform/graphics/chromium/GraphicsLayerChromium.h:
+ * platform/graphics/chromium/LayerChromium.cpp:
+ (WebCore::LayerChromium::LayerChromium):
+ * platform/graphics/chromium/LayerChromium.h:
+ (WebCore::LayerChromium::setReplicaLayer):
+ (WebCore::LayerChromium::replicaLayer):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::updateLayersRecursive):
+ (WebCore::LayerRendererChromium::drawLayer):
+ * platform/graphics/chromium/RenderSurfaceChromium.cpp:
+ (WebCore::RenderSurfaceChromium::drawableContentRect):
+ (WebCore::RenderSurfaceChromium::drawSurface):
+ (WebCore::RenderSurfaceChromium::draw):
+ * platform/graphics/chromium/RenderSurfaceChromium.h:
+ (WebCore::RenderSurfaceChromium::drawTransform):
+
+2011-02-02 Xiyuan Xia <xiyuan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Select popup with padding has white strip on right
+ https://bugs.webkit.org/show_bug.cgi?id=53602
+
+ No new tests as this change restores old behavior.
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::layout):
+
+2011-02-02 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Fix for <rdar://problem/8950343> CrashTracer: [USER]
+ 1 crash in WebProcess at com.apple.WebCore:
+ WebCore::ScrollbarThemeMac::unregisterScrollbar + 22
+
+ It is possible for a Scrollbar's ScrollableArea to be null,
+ so we must null check.
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::registerScrollbar):
+ (WebCore::ScrollbarThemeMac::unregisterScrollbar):
+
+2011-02-02 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ bufferData and bufferSubData should generate INVALID_VALUE with negative input
+ https://bugs.webkit.org/show_bug.cgi?id=53626
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::bufferData):
+ (WebCore::WebGLRenderingContext::bufferSubData):
+
+2011-02-02 Jeff Miller <jeffm@apple.com>
+
+ Reviewed by Darin Adler and Steve Falkenburg.
+
+ Add DerivedSources.make to some Visual Studio projects
+ https://bugs.webkit.org/show_bug.cgi?id=53607
+
+ * WebCore.vcproj/WebCoreGenerated.vcproj: Add DerivedSources.make.
+
+2011-02-02 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Refcount domwindows when dispatching device orientation events.
+ https://bugs.webkit.org/show_bug.cgi?id=53623
+
+ Test: fast/events/device-orientation-crash.html
+
+ * dom/DeviceMotionController.cpp:
+ (WebCore::DeviceMotionController::timerFired):
+ (WebCore::DeviceMotionController::didChangeDeviceMotion):
+ * dom/DeviceMotionController.h:
+ * dom/DeviceOrientationController.cpp:
+ (WebCore::DeviceOrientationController::timerFired):
+ (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
+ * dom/DeviceOrientationController.h:
+
+2011-02-02 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ A deleted object should never been bound again
+ https://bugs.webkit.org/show_bug.cgi?id=53604
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::checkObjectToBeBound): Helper function to bind* and useProgram.
+ (WebCore::WebGLRenderingContext::bindBuffer): Use checkObjectToBeBound.
+ (WebCore::WebGLRenderingContext::bindFramebuffer): Ditto.
+ (WebCore::WebGLRenderingContext::bindRenderbuffer): Ditto.
+ (WebCore::WebGLRenderingContext::bindTexture): Ditto, also check the target matching.
+ (WebCore::WebGLRenderingContext::deleteObject): Helper funtion to delete*.
+ (WebCore::WebGLRenderingContext::deleteBuffer): Use deleteObject.
+ (WebCore::WebGLRenderingContext::deleteFramebuffer): Ditto.
+ (WebCore::WebGLRenderingContext::deleteProgram): Ditto.
+ (WebCore::WebGLRenderingContext::deleteRenderbuffer): Ditto.
+ (WebCore::WebGLRenderingContext::deleteShader): Ditto.
+ (WebCore::WebGLRenderingContext::deleteTexture): Ditto.
+ (WebCore::WebGLRenderingContext::useProgram): Use checkObjectToBeBound.
+ * html/canvas/WebGLRenderingContext.h:
+ * html/canvas/WebGLTexture.h:
+ (WebCore::WebGLTexture::getTarget): Accessor to cached target.
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Unreviewed Efl buildfix after r77399.
+
+ * CMakeListsEfl.txt:
+
+2011-02-02 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Rename Typed Array subset to subarray
+ https://bugs.webkit.org/show_bug.cgi?id=53618
+
+ * html/canvas/Float32Array.cpp:
+ (WebCore::Float32Array::subarray):
+ * html/canvas/Float32Array.h:
+ * html/canvas/Float32Array.idl:
+ * html/canvas/Int16Array.cpp:
+ (WebCore::Int16Array::subarray):
+ * html/canvas/Int16Array.h:
+ * html/canvas/Int16Array.idl:
+ * html/canvas/Int32Array.cpp:
+ (WebCore::Int32Array::subarray):
+ * html/canvas/Int32Array.h:
+ * html/canvas/Int32Array.idl:
+ * html/canvas/Int8Array.cpp:
+ (WebCore::Int8Array::subarray):
+ * html/canvas/Int8Array.h:
+ * html/canvas/Int8Array.idl:
+ * html/canvas/TypedArrayBase.h:
+ (WebCore::TypedArrayBase::subarrayImpl):
+ * html/canvas/Uint16Array.cpp:
+ (WebCore::Uint16Array::subarray):
+ * html/canvas/Uint16Array.h:
+ * html/canvas/Uint16Array.idl:
+ * html/canvas/Uint32Array.cpp:
+ (WebCore::Uint32Array::subarray):
+ * html/canvas/Uint32Array.h:
+ * html/canvas/Uint32Array.idl:
+ * html/canvas/Uint8Array.cpp:
+ (WebCore::Uint8Array::subarray):
+ * html/canvas/Uint8Array.h:
+ * html/canvas/Uint8Array.idl:
+
+2011-02-02 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add an empty file for Content Security Policy
+ https://bugs.webkit.org/show_bug.cgi?id=53573
+
+ Posting this as a separate patch because editing the build files is so
+ painful.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+
+2011-02-02 Dan Winship <danw@gnome.org>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] remove old data: URI handler, fix the SoupRequest-based one
+ to pass tests
+ https://bugs.webkit.org/show_bug.cgi?id=50885
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::sendRequestCallback): Do content-type sniffing here for
+ non-HTTP requests.
+ (WebCore::startHTTPRequest): Rename to match WebKit style.
+ (WebCore::ResourceHandle::start): Pass everything except HTTP to
+ startNonHTTPRequest, letting the SoupRequester decide whether it's
+ supported or not.
+ (WebCore::startNonHTTPRequest): Remove some old pre-SoupRequester
+ code that was a no-op for file: URIs, but would break some data:
+ URIs.
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Update even more references to right() and bottom() in Chromium. Sheesh.
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::getFramebufferPixels): Replaced bottom/right with maxY/maxX.
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Unreviewed Gtk3 buildfix after r77286.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+ Remove the physical terminology from IntRect and FloatRect.
+
+ * platform/gtk/RenderThemeGtk3.cpp:
+ (WebCore::RenderThemeGtk::paintMenuList):
+
+2011-02-02 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::pinnedInDirection):
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53619
+
+ Floats should not use physical terminology for their rects. Replace left/top with x/y and right/bottom
+ with maxX/maxY. This matches IntRect.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::addOverflowFromFloats):
+ (WebCore::RenderBlock::flipFloatForWritingMode):
+ (WebCore::RenderBlock::paintFloats):
+ (WebCore::RenderBlock::selectionGaps):
+ (WebCore::RenderBlock::addOverhangingFloats):
+ (WebCore::RenderBlock::addIntrudingFloats):
+ (WebCore::RenderBlock::hitTestFloats):
+ (WebCore::RenderBlock::adjustForBorderFit):
+ * rendering/RenderBlock.h:
+ (WebCore::RenderBlock::FloatingObject::x):
+ (WebCore::RenderBlock::FloatingObject::maxX):
+ (WebCore::RenderBlock::FloatingObject::y):
+ (WebCore::RenderBlock::FloatingObject::maxY):
+ (WebCore::RenderBlock::FloatingObject::setX):
+ (WebCore::RenderBlock::FloatingObject::setY):
+ (WebCore::RenderBlock::logicalTopForFloat):
+ (WebCore::RenderBlock::logicalBottomForFloat):
+ (WebCore::RenderBlock::logicalLeftForFloat):
+ (WebCore::RenderBlock::logicalRightForFloat):
+ (WebCore::RenderBlock::setLogicalTopForFloat):
+ (WebCore::RenderBlock::setLogicalLeftForFloat):
+ (WebCore::RenderBlock::xPositionForFloatIncludingMargin):
+ (WebCore::RenderBlock::yPositionForFloatIncludingMargin):
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Update more references to right() and bottom() in Chromium Win.
+
+ * platform/graphics/chromium/TransparencyWin.cpp:
+ (WebCore::TransparencyWin::compositeOpaqueComposite): Replaced bottom/right with maxY/maxX.
+ (WebCore::TransparencyWin::compositeTextComposite): Ditto.
+ * rendering/RenderThemeChromiumWin.cpp:
+ (WebCore::RenderThemeChromiumWin::paintMenuList): Ditto.
+
+2011-02-02 Adam Roben <aroben@apple.com>
+
+ Encode/decode FormData and FormDataElement objects consistently
+
+ Fixes <http://webkit.org/b/53615> <rdar://problem/8943346> WebKit2: Restoring session state
+ that contains form data fails (asserts in Debug build)
+
+ To prevent this from interfering with WebKit2 testing, it's useful to get this into a build
+ now, even though we don't have an automated test for it yet. Writing a test is covered by
+ <http://webkit.org/b/53616>.
+
+ Reviewed by Darin Adler.
+
+ * history/HistoryItem.cpp: Bump the encoding version, since this patch changes how we encode
+ FormData objects.
+
+ * platform/network/FormData.cpp:
+ (WebCore::decode): Decode the type from the Decoder, rather than getting it from the
+ default-constructed FormDataElement. Failing to do this meant that all future uses of the
+ Decoder would be reading from an unexpected part of the buffer (i.e., the next decode would
+ start by reading the uint32_t that we forgot to decode here, and so on). We already had code
+ to correctly set the FormDataElement's type based on this decoded type later in the
+ function.
+ (WebCore::FormData::encodeForBackForward): Encode m_identifier as an int64_t, since that
+ matches its type and how we decode it.
+
+2011-02-02 Dan Winship <danw@gnome.org>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] drop soup cache stuff, which has been moved to libsoup
+ https://bugs.webkit.org/show_bug.cgi?id=50747
+
+ Use libsoup-based cache/requester API and remove the WebCore version
+ of this functionality. This has been pushed upstream fully.
+
+ No new tests because this should not change functionality.
+
+ * GNUmakefile.am: Update for removed files.
+ * platform/network/ResourceHandleInternal.h:
+ (WebCore::ResourceHandleInternal::ResourceHandleInternal): Update
+ type names, drop m_requester.
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::ensureSessionIsInitialized): Add a SoupRequester to the
+ session.
+ (WebCore::parseDataUrl):
+ (WebCore::startHttp): Get the requester from the session rather
+ than using m_requester.
+ (WebCore::sendRequestCallback):
+ (WebCore::ResourceHandle::platformSetDefersLoading):
+ (WebCore::readCallback):
+ (WebCore::startGio): Update type names.
+ * platform/network/soup/cache/soup-directory-input-stream.c: Removed.
+ * platform/network/soup/cache/soup-directory-input-stream.h: Removed.
+ * platform/network/soup/cache/soup-http-input-stream.c: Removed.
+ * platform/network/soup/cache/soup-http-input-stream.h: Removed.
+ * platform/network/soup/cache/soup-request-data.c: Removed.
+ * platform/network/soup/cache/soup-request-data.h: Removed.
+ * platform/network/soup/cache/soup-request-file.c: Removed.
+ * platform/network/soup/cache/soup-request-file.h: Removed.
+ * platform/network/soup/cache/soup-request-http.c: Removed.
+ * platform/network/soup/cache/soup-request-http.h: Removed.
+ * platform/network/soup/cache/soup-request.c: Removed.
+ * platform/network/soup/cache/soup-request.h: Removed.
+ * platform/network/soup/cache/soup-requester.c: Removed.
+ * platform/network/soup/cache/soup-requester.h: Removed.
+ * platform/network/soup/cache/webkit/soup-cache-private.h: Removed.
+ * platform/network/soup/cache/webkit/soup-cache.c: Removed.
+ * platform/network/soup/cache/webkit/soup-cache.h: Removed.
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+
+ Remove physical accessors from IntRect and FloatRect.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::adjustPageHeightDeprecated):
+ * platform/graphics/FloatRect.h:
+ * platform/graphics/IntRect.h:
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53614
+
+ Remove physical terminology from overflow. Replace with minX/maxX/minY/maxY.
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
+ (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
+ * rendering/InlineFlowBox.h:
+ (WebCore::InlineFlowBox::minYLayoutOverflow):
+ (WebCore::InlineFlowBox::maxYLayoutOverflow):
+ (WebCore::InlineFlowBox::minXLayoutOverflow):
+ (WebCore::InlineFlowBox::maxXLayoutOverflow):
+ (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
+ (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
+ (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
+ (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
+ (WebCore::InlineFlowBox::minYVisualOverflow):
+ (WebCore::InlineFlowBox::maxYVisualOverflow):
+ (WebCore::InlineFlowBox::minXVisualOverflow):
+ (WebCore::InlineFlowBox::maxXVisualOverflow):
+ (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
+ (WebCore::InlineFlowBox::logicalRightVisualOverflow):
+ (WebCore::InlineFlowBox::logicalminYVisualOverflow):
+ (WebCore::InlineFlowBox::logicalmaxYVisualOverflow):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::adjustLinePositionForPagination):
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::beforeSideVisualOverflowForLine):
+ (WebCore::RenderBlock::afterSideVisualOverflowForLine):
+ (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
+ (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::scrollWidth):
+ (WebCore::RenderBox::scrollHeight):
+ * rendering/RenderBox.h:
+ (WebCore::RenderBox::minYLayoutOverflow):
+ (WebCore::RenderBox::maxYLayoutOverflow):
+ (WebCore::RenderBox::minXLayoutOverflow):
+ (WebCore::RenderBox::maxXLayoutOverflow):
+ (WebCore::RenderBox::logicalLeftLayoutOverflow):
+ (WebCore::RenderBox::logicalRightLayoutOverflow):
+ (WebCore::RenderBox::minYVisualOverflow):
+ (WebCore::RenderBox::maxYVisualOverflow):
+ (WebCore::RenderBox::minXVisualOverflow):
+ (WebCore::RenderBox::maxXVisualOverflow):
+ (WebCore::RenderBox::logicalLeftVisualOverflow):
+ (WebCore::RenderBox::logicalRightVisualOverflow):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::linesVisualOverflowBoundingBox):
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
+ * rendering/RenderLineBoxList.cpp:
+ (WebCore::RenderLineBoxList::anyLineIntersectsRect):
+ (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
+ (WebCore::RenderLineBoxList::paint):
+ (WebCore::RenderLineBoxList::hitTest):
+ * rendering/RenderMarquee.cpp:
+ (WebCore::RenderMarquee::computePosition):
+ * rendering/RenderOverflow.h:
+ (WebCore::RenderOverflow::RenderOverflow):
+ (WebCore::RenderOverflow::minYLayoutOverflow):
+ (WebCore::RenderOverflow::maxYLayoutOverflow):
+ (WebCore::RenderOverflow::minXLayoutOverflow):
+ (WebCore::RenderOverflow::maxXLayoutOverflow):
+ (WebCore::RenderOverflow::minYVisualOverflow):
+ (WebCore::RenderOverflow::maxYVisualOverflow):
+ (WebCore::RenderOverflow::minXVisualOverflow):
+ (WebCore::RenderOverflow::maxXVisualOverflow):
+ (WebCore::RenderOverflow::setminYVisualOverflow):
+ (WebCore::RenderOverflow::visualOverflowRect):
+ (WebCore::RenderOverflow::move):
+ (WebCore::RenderOverflow::addVisualOverflow):
+ (WebCore::RenderOverflow::setVisualOverflow):
+ * rendering/RenderReplaced.cpp:
+ (WebCore::RenderReplaced::shouldPaint):
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::layout):
+ (WebCore::RenderTable::paint):
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
+ * rendering/RenderTreeAsText.cpp:
+ (WebCore::writeLayers):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::docTop):
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * Configurations/FeatureDefines.xcconfig:
+ * GNUmakefile.am:
+ * features.pri:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::webkitAudioBytesDecoded):
+ (WebCore::HTMLMediaElement::webkitVideoBytesDecoded):
+ * html/HTMLMediaElement.h:
+ * html/HTMLMediaElement.idl:
+ * html/HTMLVideoElement.cpp:
+ (WebCore::HTMLVideoElement::webkitDecodedFrames):
+ (WebCore::HTMLVideoElement::webkitDroppedFrames):
+ * html/HTMLVideoElement.h:
+ * html/HTMLVideoElement.idl:
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::MediaPlayer::decodedFrames):
+ (WebCore::MediaPlayer::droppedFrames):
+ (WebCore::MediaPlayer::audioBytesDecoded):
+ (WebCore::MediaPlayer::videoBytesDecoded):
+ * platform/graphics/MediaPlayer.h:
+ * platform/graphics/MediaPlayerPrivate.h:
+ (WebCore::MediaPlayerPrivateInterface::decodedFrames):
+ (WebCore::MediaPlayerPrivateInterface::droppedFrames):
+ (WebCore::MediaPlayerPrivateInterface::audioBytesDecoded):
+ (WebCore::MediaPlayerPrivateInterface::videoBytesDecoded):
+
+2011-02-02 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by David Hyatt.
+
+ More conversion from right()/bottom() to maxX()/maxY().
+
+ * page/qt/FrameQt.cpp:
+ (WebCore::Frame::dragImageForSelection):
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContext::roundToDevicePixels):
+
+2011-02-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fixes for wxWebKit.
+
+ * bindings/cpp/WebDOMHTMLDocumentCustom.cpp:
+ (documentWrite):
+ * bindings/scripts/CodeGeneratorCPP.pm:
+ * page/wx/DragControllerWx.cpp:
+ (WebCore::DragController::dragOperation):
+ * platform/graphics/wx/FontCustomPlatformData.h:
+ * platform/graphics/wx/FontPlatformData.h:
+ (WebCore::FontPlatformData::widthVariant):
+ * platform/graphics/wx/FontPlatformDataWx.cpp:
+ (WebCore::FontPlatformData::computeHash):
+ * platform/graphics/wx/FontWx.cpp:
+ * platform/graphics/wx/GraphicsContextWx.cpp:
+ (WebCore::GraphicsContext::fillPath):
+ (WebCore::GraphicsContext::strokePath):
+ * platform/wx/RenderThemeWx.cpp:
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ More right()/bottom() to maxX()/maxY() conversion.
+
+ * page/chromium/FrameChromium.cpp:
+ (WebCore::Frame::nodeImage):
+ (WebCore::Frame::dragImageForSelection):
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Fix windows clean build.
+
+ * DerivedSources.make:
+
+2011-02-02 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Chromium] Landing detailed heap snapshots, part 2.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53606
+
+ Display progress while taking a snapshot, and hints while loading
+ and parsing. This is needed because taking detailed heap snapshots
+ takes time.
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/DetailedHeapshotView.js:
+ (WebInspector.DetailedHeapshotProfileType.prototype.buttonClicked):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel.prototype._reset):
+ (WebInspector.ProfilesPanel.prototype._addProfileHeader):
+ (WebInspector.ProfilesPanel.prototype.getProfiles):
+ (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
+ (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
+ (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
+ (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
+ (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
+ * inspector/front-end/SidebarTreeElement.js:
+ (WebInspector.SidebarTreeElement.prototype.refreshTitles):
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ More conversion from right()/bottom() to maxX()/maxY().
+
+ * platform/win/PopupMenuWin.cpp:
+ (WebCore::PopupMenuWin::calculatePositionAndSize):
+ (WebCore::PopupMenuWin::paint):
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Removal of right()/bottom(). Replace with maxX() and maxY(). Still converting. Haven't removed yet.
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupContainer::layoutAndCalculateWidgetRect):
+ (WebCore::PopupListBox::scrollToRevealRow):
+ (WebCore::PopupListBox::layout):
+ * platform/graphics/FloatRect.h:
+ * platform/graphics/IntRect.h:
+ * platform/graphics/cairo/ImageBufferCairo.cpp:
+ (WebCore::getImageData):
+ (WebCore::putImageData):
+ * platform/graphics/chromium/GLES2Canvas.cpp:
+ (WebCore::GLES2Canvas::drawTexturedRect):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::verticalScrollbarRect):
+ (WebCore::LayerRendererChromium::horizontalScrollbarRect):
+ (WebCore::LayerRendererChromium::setScissorToRect):
+ (WebCore::LayerRendererChromium::setDrawViewportRect):
+ * platform/graphics/chromium/LayerTilerChromium.cpp:
+ (WebCore::LayerTilerChromium::contentRectToTileIndices):
+ (WebCore::LayerTilerChromium::growLayerToContain):
+ * platform/graphics/gpu/TilingData.cpp:
+ (WebCore::TilingData::tileBoundsWithBorder):
+ (WebCore::TilingData::overlappedTileIndices):
+ * platform/graphics/qt/ImageBufferQt.cpp:
+ (WebCore::getImageData):
+ (WebCore::putImageData):
+ * platform/graphics/skia/FloatRectSkia.cpp:
+ (WebCore::FloatRect::operator SkRect):
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::getImageData):
+ (WebCore::putImageData):
+ * platform/graphics/skia/IntRectSkia.cpp:
+ (WebCore::IntRect::operator SkIRect):
+ (WebCore::IntRect::operator SkRect):
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ (WebCore::PlatformContextSkia::beginLayerClippedToImage):
+ * platform/graphics/win/GraphicsContextWin.cpp:
+ (WebCore::GraphicsContextPlatformPrivate::clip):
+ * platform/graphics/win/IntRectWin.cpp:
+ (WebCore::IntRect::operator RECT):
+ * platform/graphics/win/UniscribeController.cpp:
+ (WebCore::UniscribeController::shapeAndPlaceItem):
+ * platform/graphics/wince/GraphicsContextWinCE.cpp:
+ (WebCore::roundRect):
+ (WebCore::mapRect):
+ (WebCore::TransparentLayerDC::TransparentLayerDC):
+ (WebCore::GraphicsContext::drawRect):
+ (WebCore::GraphicsContext::drawEllipse):
+ (WebCore::GraphicsContext::strokeArc):
+ (WebCore::GraphicsContext::clip):
+ (WebCore::GraphicsContext::clipOut):
+ (WebCore::GraphicsContext::strokeRect):
+ * platform/image-decoders/gif/GIFImageDecoder.cpp:
+ (WebCore::GIFImageDecoder::initFrameBuffer):
+ * platform/win/PopupMenuWin.cpp:
+ (WebCore::PopupMenuWin::calculatePositionAndSize):
+ (WebCore::PopupMenuWin::paint):
+ * plugins/win/PluginViewWin.cpp:
+ (WebCore::PluginView::updatePluginWidget):
+ (WebCore::PluginView::invalidateRect):
+ * rendering/RenderThemeSafari.cpp:
+ (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
+ (WebCore::RenderThemeSafari::paintMenuListButton):
+ (WebCore::RenderThemeSafari::paintSliderTrack):
+ * rendering/RenderThemeWin.cpp:
+ (WebCore::RenderThemeWin::paintInnerSpinButton):
+ (WebCore::RenderThemeWin::paintMenuListButton):
+
+2011-02-02 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Use Vector instead of a linked list for rules in CSSStyleSelector
+ https://bugs.webkit.org/show_bug.cgi?id=53581
+
+ - eliminate CSSRuleDataList, replace with Vector<RuleData>
+ - rename CSSRuleData -> RuleData and CSSRuleSet -> RuleSet
+ (these are selector internal classes, CSS prefix is better reserved for public ones).
+ - constify a bit
+ - shrink the vectors to fit after collecting the rules
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::RuleData::RuleData):
+ (WebCore::RuleData::position):
+ (WebCore::RuleData::rule):
+ (WebCore::RuleData::selector):
+ (WebCore::RuleSet::disableAutoShrinkToFit):
+ (WebCore::RuleSet::getIDRules):
+ (WebCore::RuleSet::getClassRules):
+ (WebCore::RuleSet::getTagRules):
+ (WebCore::RuleSet::getPseudoRules):
+ (WebCore::RuleSet::getUniversalRules):
+ (WebCore::RuleSet::getPageRules):
+ (WebCore::collectSiblingRulesInDefaultStyle):
+ (WebCore::CSSStyleSelector::CSSStyleSelector):
+ (WebCore::loadFullDefaultStyle):
+ (WebCore::loadSimpleDefaultStyle):
+ (WebCore::loadViewSourceStyle):
+ (WebCore::CSSStyleSelector::matchRules):
+ (WebCore::CSSStyleSelector::matchRulesForList):
+ (WebCore::operator >):
+ (WebCore::operator <=):
+ (WebCore::CSSStyleSelector::sortMatchedRules):
+ (WebCore::CSSStyleSelector::matchUARules):
+ (WebCore::RuleSet::RuleSet):
+ (WebCore::RuleSet::~RuleSet):
+ (WebCore::RuleSet::addToRuleSet):
+ (WebCore::RuleSet::addRule):
+ (WebCore::RuleSet::addPageRule):
+ (WebCore::RuleSet::addRulesFromSheet):
+ (WebCore::RuleSet::addStyleRule):
+ (WebCore::collectIdsAndSiblingRulesFromList):
+ (WebCore::RuleSet::collectIdsAndSiblingRules):
+ (WebCore::shrinkMapVectorsToFit):
+ (WebCore::RuleSet::shrinkToFit):
+ (WebCore::CSSStyleSelector::matchPageRules):
+ (WebCore::CSSStyleSelector::matchPageRulesForList):
+ * css/CSSStyleSelector.h:
+ (WebCore::CSSStyleSelector::addMatchedRule):
+
+2011-02-02 Andrey Adaikin <aandrey@google.com>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Use DIVs instead of TABLE in TextViewer
+ https://bugs.webkit.org/show_bug.cgi?id=53299
+
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype._createTextViewer):
+ (WebInspector.SourceFrame.prototype._mouseDown):
+ * inspector/front-end/TextViewer.js:
+ (WebInspector.TextViewer):
+ (WebInspector.TextViewer.prototype.set mimeType):
+ (WebInspector.TextViewer.prototype.revealLine):
+ (WebInspector.TextViewer.prototype.addDecoration):
+ (WebInspector.TextViewer.prototype.removeDecoration):
+ (WebInspector.TextViewer.prototype.markAndRevealRange):
+ (WebInspector.TextViewer.prototype.highlightLine):
+ (WebInspector.TextViewer.prototype.clearLineHighlight):
+ (WebInspector.TextViewer.prototype.freeCachedElements):
+ (WebInspector.TextViewer.prototype._handleKeyDown):
+ (WebInspector.TextViewer.prototype.editLine.finishEditing):
+ (WebInspector.TextViewer.prototype.editLine):
+ (WebInspector.TextViewer.prototype.beginUpdates):
+ (WebInspector.TextViewer.prototype.endUpdates):
+ (WebInspector.TextViewer.prototype.resize):
+ (WebInspector.TextViewer.prototype._textChanged):
+ (WebInspector.TextViewer.prototype._updatePanelOffsets):
+ (WebInspector.TextViewer.prototype._syncScroll):
+ (WebInspector.TextViewer.prototype._syncDecorationsForLine):
+ (WebInspector.TextEditorChunkedPanel):
+ (WebInspector.TextEditorChunkedPanel.prototype.set syncScrollListener):
+ (WebInspector.TextEditorChunkedPanel.prototype.get textModel):
+ (WebInspector.TextEditorChunkedPanel.prototype.addDecoration):
+ (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
+ (WebInspector.TextEditorChunkedPanel.prototype.revealLine):
+ (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
+ (WebInspector.TextEditorChunkedPanel.prototype.textChanged):
+ (WebInspector.TextEditorChunkedPanel.prototype.beginUpdates):
+ (WebInspector.TextEditorChunkedPanel.prototype.endUpdates):
+ (WebInspector.TextEditorChunkedPanel.prototype.resize):
+ (WebInspector.TextEditorChunkedPanel.prototype._scroll):
+ (WebInspector.TextEditorChunkedPanel.prototype._scheduleRepaintAll):
+ (WebInspector.TextEditorChunkedPanel.prototype._buildChunks):
+ (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
+ (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
+ (WebInspector.TextEditorChunkedPanel.prototype._chunkForLine):
+ (WebInspector.TextEditorGutterPanel):
+ (WebInspector.TextEditorGutterPanel.prototype.freeCachedElements):
+ (WebInspector.TextEditorGutterPanel.prototype._createNewChunk):
+ (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
+ (WebInspector.TextEditorGutterChunk):
+ (WebInspector.TextEditorGutterChunk.prototype.get expanded):
+ (WebInspector.TextEditorGutterChunk.prototype.set expanded):
+ (WebInspector.TextEditorGutterChunk.prototype.get height):
+ (WebInspector.TextEditorGutterChunk.prototype._createRow):
+ (WebInspector.TextEditorMainPanel):
+ (WebInspector.TextEditorMainPanel.prototype.set syncDecorationsForLine):
+ (WebInspector.TextEditorMainPanel.prototype.set mimeType):
+ (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
+ (WebInspector.TextEditorMainPanel.prototype.highlightLine):
+ (WebInspector.TextEditorMainPanel.prototype.clearLineHighlight):
+ (WebInspector.TextEditorMainPanel.prototype.freeCachedElements):
+ (WebInspector.TextEditorMainPanel.prototype._buildChunks):
+ (WebInspector.TextEditorMainPanel.prototype._createNewChunk):
+ (WebInspector.TextEditorMainPanel.prototype._expandChunks):
+ (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
+ (WebInspector.TextEditorMainPanel.prototype._paintLines):
+ (WebInspector.TextEditorMainPanel.prototype._paintLine):
+ (WebInspector.TextEditorMainPanel.prototype._releaseLinesHighlight):
+ (WebInspector.TextEditorMainPanel.prototype._getSelection):
+ (WebInspector.TextEditorMainPanel.prototype._restoreSelection):
+ (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
+ (WebInspector.TextEditorMainPanel.prototype._positionToSelection):
+ (WebInspector.TextEditorMainPanel.prototype._appendTextNode):
+ (WebInspector.TextEditorMainPanel.prototype._handleDomUpdates):
+ (WebInspector.TextEditorMainChunk):
+ (WebInspector.TextEditorMainChunk.prototype.addDecoration):
+ (WebInspector.TextEditorMainChunk.prototype.set expanded):
+ (WebInspector.TextEditorMainChunk.prototype.get height):
+ (WebInspector.TextEditorMainChunk.prototype.getExpandedLineRow):
+ (WebInspector.TextEditorMainChunk.prototype._createRow):
+ (WebInspector):
+ * inspector/front-end/textViewer.css:
+ (.text-editor-lines):
+ (.text-editor-contents):
+ (.text-editor-editable):
+ (.webkit-line-decorations):
+ (.webkit-line-number):
+ (.webkit-execution-line.webkit-line-content):
+ (.diff-container .webkit-added-line.webkit-line-content):
+ (.diff-container .webkit-removed-line.webkit-line-content):
+ (.diff-container .webkit-changed-line.webkit-line-content):
+ (.webkit-highlighted-line.webkit-line-content):
+
+2011-02-02 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Implement support for cursor updates
+ https://bugs.webkit.org/show_bug.cgi?id=53421
+
+ Implement support for cursor updates using the same pattern as cursor
+ deletes: forward the calls to the IDBObjectStoreBackend::put().
+ The put() function's signature needs to be changed to allow for a
+ "cursor update mode". This makes the signature more clear anyway,
+ since it replaces the boolean parameter.
+
+ Test: storage/indexeddb/cursor-update.html
+
+ * storage/IDBCursor.idl:
+ * storage/IDBCursorBackendImpl.cpp:
+ (WebCore::IDBCursorBackendImpl::key):
+ (WebCore::IDBCursorBackendImpl::update):
+ * storage/IDBCursorBackendImpl.h:
+ * storage/IDBObjectStore.cpp:
+ (WebCore::IDBObjectStore::add):
+ (WebCore::IDBObjectStore::put):
+ * storage/IDBObjectStoreBackendImpl.cpp:
+ (WebCore::IDBObjectStoreBackendImpl::put):
+ (WebCore::IDBObjectStoreBackendImpl::putInternal):
+ * storage/IDBObjectStoreBackendImpl.h:
+ * storage/IDBObjectStoreBackendInterface.h:
+
+2011-02-02 Naoki Takano <takano.naoki@gmail.com>
+
+ Reviewed by Kent Tamura.
+
+ Fix popup menu RTL bug introduced by Changeset 75982.
+ https://bugs.webkit.org/show_bug.cgi?id=53567
+
+ PopupMenuChromium::layout() calculates X position according to RTL or not. So Change the X position calculation in layoutAndCalculateWidgetRect().
+
+ No new tests. However we can check manually with select_dropdown_box_alignment.html, autofill_alignment.html, select_alignment.html, select_dropdown_box_alignment.html, autofill-popup-width-and-item-direction.html
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Fix calculation of x position, because layout() considers RTL. And change the parameter from both X and Y positions to only Y position.
+ (WebCore::PopupContainer::showPopup): Change the passing parameter.
+ (WebCore::PopupContainer::refresh): Change the passing parameter.
+ * platform/chromium/PopupMenuChromium.h: Change the parameter declaration.
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Fix dist compilation
+ https://bugs.webkit.org/show_bug.cgi?id=53579
+
+ * GNUmakefile.am: Added FontWidthVariant.h to the sources, it was
+ added in r77153.
+
+2011-02-02 Dai Mikurube <dmikurube@google.com>
+
+ Reviewed by David Levin.
+
+ Make mime type lookup in File::create(path) thread-safe
+ https://bugs.webkit.org/show_bug.cgi?id=47700
+
+ This patch introduces a new function MIMETypeRegistry::getMIMETypeForExtensionThreadSafe().
+ The function is to be called as a thread-safe version of getMIMETypeForExtension() when
+ both FILE_SYSTEM and WORKERS are enabled.
+
+ No tests for this patch. This patch itself doesn't change the behaviors.
+ For Chromium, it runs in the same way with getMIMETypeForExtensionThreadSafe().
+ For the other platforms, it causes compilation error in case of enabled FILE_SYSTEM and WORKERS.
+ The compilation error would be a signal to implement getMIMETypeForExtensionThreadSafe() in these
+ platforms. Currently it doesn't happen since FILE_SYSTEM is not available in the other platforms.
+
+ * platform/MIMETypeRegistry.cpp: Defined generic getMIMETypeForExtension() calling getMIMETypeForExtensionThreadSafe() for enabled FILE_SYSTEM and WORKERS.
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/MIMETypeRegistry.h: Declared getMIMETypeForExtensionThreadSafe() which should be implemented for each platform.
+ * platform/android/TemporaryLinkStubs.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/brew/MIMETypeRegistryBrew.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/chromium/MIMETypeRegistryChromium.cpp: Defined getMIMETypeForExtensionThreadSafe() for the case when FILE_SYSTEM and WORKERS are enabled.
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtensionThreadSafe):
+ * platform/efl/MIMETypeRegistryEfl.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/gtk/MIMETypeRegistryGtk.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/haiku/MIMETypeRegistryHaiku.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/mac/MIMETypeRegistryMac.mm:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/qt/MIMETypeRegistryQt.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/win/MIMETypeRegistryWin.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/wince/MIMETypeRegistryWinCE.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+ * platform/wx/MimeTypeRegistryWx.cpp:
+ (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
+
+2011-02-01 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Improve readability of updateWidget by converting bool parameter to an enum
+ https://bugs.webkit.org/show_bug.cgi?id=53576
+
+ As requested on webkit-dev.
+
+ * html/HTMLEmbedElement.cpp:
+ (WebCore::HTMLEmbedElement::updateWidget):
+ * html/HTMLEmbedElement.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::updateWidget):
+ * html/HTMLMediaElement.h:
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::updateWidget):
+ * html/HTMLObjectElement.h:
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
+ * html/HTMLPlugInImageElement.h:
+ * page/FrameView.cpp:
+ (WebCore::FrameView::updateWidget):
+
+2011-02-01 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [v8] Increase V8 native->js recursion limit to match document.write() recursion limit
+ https://bugs.webkit.org/show_bug.cgi?id=53566
+
+ A recursion limit of 22 is necessary to pass fast/dom/Document/document-write-recursion.html.
+ Other than being large enough for this one test case, this limit is arbitrary.
+
+ * bindings/v8/V8Proxy.h:
+
+2011-02-01 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Remove useless comment
+ https://bugs.webkit.org/show_bug.cgi?id=53549
+
+ The reason for this parameter is captured in
+ plugins/netscape-plugin-setwindow-size.html, which is a better place to
+ capture it than in this comment (which otherwise just re-iterates the
+ name of the parameter).
+
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
+
+2011-02-01 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Tony Gentilcore.
+
+ [WebTiming] Remove asserts that verify timestamp order
+ https://bugs.webkit.org/show_bug.cgi?id=53548
+
+ Covered by existing tests.
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::stopLoading): Remove assert.
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::dispatchTimedEvent): Ditto.
+
+2011-02-01 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Add the 'default_targets' enclosure to the flags.
+
+ * WebCore.gyp/WebCore.gyp: Did it.
+
+2011-02-01 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Async event handlers should not fire within a modal dialog
+ https://bugs.webkit.org/show_bug.cgi?id=53202
+
+ Asychronous events that use EventQueue would currently fire while a
+ modal dialog (e.g. window.alert()) was up. Change EventQueue to use a
+ SuspendableTimer (which automatically gets suspended while dialogs are
+ up and in other cases where JS execution is not allowed).
+
+ Test: fast/events/scroll-event-during-modal-dialog.html
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ * dom/EventQueue.cpp:
+ (WebCore::EventQueueTimer::EventQueueTimer):
+ (WebCore::EventQueueTimer::fired):
+ (WebCore::EventQueue::EventQueue):
+ (WebCore::EventQueue::enqueueEvent):
+ (WebCore::EventQueue::pendingEventTimerFired):
+ * dom/EventQueue.h:
+ (WebCore::EventQueue::create):
+ * page/SuspendableTimer.cpp:
+ (WebCore::SuspendableTimer::SuspendableTimer):
+ (WebCore::SuspendableTimer::suspend):
+ (WebCore::SuspendableTimer::resume):
+ * page/SuspendableTimer.h:
+
+2011-02-01 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Change wrong PLATFORM(WIN) to USE(WININET)
+ https://bugs.webkit.org/show_bug.cgi?id=53547
+
+ * platform/network/ResourceHandle.h:
+
+2011-02-01 Beth Dakin <bdakin@apple.com>
+
+ 32-bit build fix.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
+
+2011-01-25 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Two tests crash after r76555
+ https://bugs.webkit.org/show_bug.cgi?id=53057
+
+ Instead of creating synchronous ResourceHandles manually, use the ::create factory.
+ This ensures that ::start() is not called when there is a scheduled failure and also
+ reduces code duplication.
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Use the ::create factory method.
+
+2011-02-01 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Eric Seidel.
+
+ [GTK] GObject DOM bindings do no support the CallWith attribute
+ https://bugs.webkit.org/show_bug.cgi?id=53331
+
+ Disable building GObject DOM bindings for IndexedDB because we do not support
+ the CallWith attribute at this time.
+
+ * bindings/gobject/GNUmakefile.am: Disable building bindings for the IndexedDB API.
+
+2011-02-01 Darin Adler <darin@apple.com>
+
+ Reviewed by Brady Eidson.
+
+ Fix a couple loose ends from the back/forward tree encode/decode work
+ https://bugs.webkit.org/show_bug.cgi?id=53537
+
+ * history/HistoryItem.cpp:
+ (WebCore::HistoryItem::encodeBackForwardTreeNode): Remove extra copy of
+ original URL string; no need to encode it twice.
+ (WebCore::HistoryItem::decodeBackForwardTree): Ditto.
+ * history/HistoryItem.h: Removed declaration for function that is no
+ longer defined nor used.
+
+2011-02-01 Tony Chang <tony@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ [chromium] disable arm uninitialized variable warnings
+ https://bugs.webkit.org/show_bug.cgi?id=53553
+
+ We just got another error:
+ third_party/WebKit/Source/WebCore/css/CSSPrimitiveValue.cpp:123:error:
+ 'colorTransparent.unstatic.4879' may be used uninitialized in this
+ function
+
+ * WebCore.gyp/WebCore.gyp:
+
+2011-02-01 chris reiss <christopher.reiss@nokia.com>
+
+ Reviewed by Adam Barth.
+
+ Self-replicating code makes Safari hang and eventually crash
+ https://bugs.webkit.org/show_bug.cgi?id=15123
+
+
+ Here we are replicating the Firefox safeguard against
+ recursive document.write( ) 's.
+
+ See https://bug197052.bugzilla.mozilla.org/attachment.cgi?id=293907 in bug
+ https://bugzilla.mozilla.org/show_bug.cgi?id=197052 . Firefox does two things -
+ a) imposes a recursion limit of 20 on document.write( ) and
+ b) once that limit is passed, panics all the way the call stack (rather than just returning one level.)
+ To see why this is necessary, consider the script :
+
+ <script>
+ var t = document.body.innerHTML;
+ document.write(t);
+ </script>
+
+ This will create a tree both broad and deep as the script keeps appending itself to the text. If
+ we just return one level after the recursion limit is reached, we still allow millions of copies to
+ duplicate (and execute).
+
+ The recursion is fortunately depth-first, so as soon as we cross this limit, we panic up the callstack
+ to prevent this situation. (IE apparently does the same thing, with a lower recursion limit.)
+
+ Test: fast/dom/Document/document-write-recursion.html
+ Test: fast/dom/Document/document-close-iframe-load.html
+ Test: fast/dom/Document/document-close-nested-iframe-load.html
+
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ (WebCore::Document::write):
+ * dom/Document.h:
+
+2011-02-01 Johnny Ding <jnd@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Don't set user gesture in HTMLAnchorElement's click handler because the click handler can be triggered by untrusted event.
+ https://bugs.webkit.org/show_bug.cgi?id=53424
+
+ Test: fast/events/popup-blocked-from-untrusted-click-event-on-anchor.html
+
+ * html/HTMLAnchorElement.cpp:
+ (WebCore::handleLinkClick):
+
+2011-02-01 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed Qt buildfix after r77286.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+ Remove the physical terminology from IntRect and FloatRect.
+
+ * platform/graphics/TiledBackingStore.cpp:
+ (WebCore::TiledBackingStore::createTiles):
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Fix Mac production builds.
+
+ * DerivedSources.make:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollbarThemeMac.h:
+
+2011-02-01 Darin Adler <darin@apple.com>
+
+ Reviewed by Chris Fleizach.
+
+ REGRESSION: Removing focus from area element causes unwanted scrolling
+ https://bugs.webkit.org/show_bug.cgi?id=50169
+
+ Test: fast/images/imagemap-scroll.html
+
+ * html/HTMLAreaElement.cpp:
+ (WebCore::HTMLAreaElement::setFocus): Added override. Calls the new
+ RenderImage::areaElementFocusChanged function.
+ (WebCore::HTMLAreaElement::updateFocusAppearance): Removed the code
+ here that calls setNeedsLayout on the image's renderer. This was an
+ attempt to cause repaint of the renderer, but this function does not
+ need to do that. Also changed this to use the imageElement function
+ to avoid repeating code.
+
+ * html/HTMLAreaElement.h: Updated for above changes.
+
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::paint): Updated for name change.
+ (WebCore::RenderImage::paintAreaElementFocusRing): Renamed this from
+ paintFocusRing, because it only paints area focus rings, and should
+ not be confused with paintFocusRing functions in other classes. Also
+ removed the unused style argument. Removed the code that used an
+ HTMLCollection to see if the focused area element is for this image
+ and instead just call imageElement on the area element.
+ (WebCore::RenderImage::areaElementFocusChanged): Added. Calls repaint.
+
+ * rendering/RenderImage.h: Added a public areaElementFocusChanged
+ function for HTMLAreaElement to call. Made the paintFocusRing function
+ private, renamed it to paintAreaElementFocusRing, and removed its
+ unused style argument.
+
+2011-02-01 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77286.
+
+ * platform/graphics/wince/GraphicsContextWinCE.cpp:
+ (WebCore::TransparentLayerDC::TransparentLayerDC):
+
+2011-02-01 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: AXPosition of AXScrollArea is wrong
+ https://bugs.webkit.org/show_bug.cgi?id=53511
+
+ AccessibilityScrollView needed to return a valid documentFrameView() object.
+ At the same time, the code from document() should be consolidated in
+ AccessibilityObject, so all objects can use it.
+
+ Test: platform/mac/accessibility/webkit-scrollarea-position.html
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::document):
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityScrollView.cpp:
+ (WebCore::AccessibilityScrollView::accessibilityHitTest):
+ (WebCore::AccessibilityScrollView::documentFrameView):
+ * accessibility/AccessibilityScrollView.h:
+
+2011-02-01 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ getUniform should support SAMPLER_2D or SAMPLER_CUBE
+ https://bugs.webkit.org/show_bug.cgi?id=52190
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::getUniform):
+
+2011-02-01 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Darin Adler.
+
+ Fix the incorrect usage of RetainPtr cases in GraphicsContext3DCG.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=53531
+
+ With this fix, running WebGL conformance tests should no longer crash randomly.
+
+ * platform/graphics/cg/GraphicsContext3DCG.cpp:
+ (WebCore::GraphicsContext3D::getImageData):
+
+2011-02-01 Dimitri Glazkov <dglazkov@chromium.org>
+
+ One more Chromium build fix after r77286.
+
+ * platform/chromium/ScrollbarThemeChromiumMac.mm:
+ (WebCore::ScrollbarThemeChromiumMac::paint): Changed to not use topLeft().
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Fix the build for Beth.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Part 2 for <rdar://problem/8492788>
+ Adopt WKScrollbarPainterController
+
+ Use header detection to define scrollbar painting controller #define.
+
+ * WebCore.exp.in:
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollbarThemeMac.h:
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+2011-02-01 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+
+ Remove the physical terminology from IntRect and FloatRect.
+
+ Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
+ we need to update our terminology to be more accurate.
+
+ I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
+ renaming right() and bottom() to maxX() and maxY(). These terms remain accurate
+ even for flipped rectangles.
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper position]):
+ * dom/ClientRect.h:
+ (WebCore::ClientRect::right):
+ (WebCore::ClientRect::bottom):
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::convertLogicalToDevice):
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::normalizeRect):
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::drawElementTitle):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::adjustWindowRect):
+ * page/DragController.cpp:
+ (WebCore::dragLocForSelectionDrag):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::sendContextMenuEventForKey):
+ * page/PrintContext.cpp:
+ (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
+ (WebCore::PrintContext::pageNumberForElement):
+ * page/SpatialNavigation.cpp:
+ (WebCore::end):
+ (WebCore::areRectsFullyAligned):
+ (WebCore::areRectsMoreThanFullScreenApart):
+ (WebCore::below):
+ (WebCore::rightOf):
+ (WebCore::isRectInDirection):
+ (WebCore::entryAndExitPointsForDirection):
+ (WebCore::virtualRectForDirection):
+ * page/WindowFeatures.cpp:
+ (WebCore::WindowFeatures::WindowFeatures):
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::wheelEvent):
+ * platform/Scrollbar.cpp:
+ (WebCore::Scrollbar::setFrameRect):
+ * platform/ScrollbarThemeComposite.cpp:
+ (WebCore::ScrollbarThemeComposite::splitTrack):
+ * platform/chromium/ScrollbarThemeChromium.cpp:
+ (WebCore::ScrollbarThemeChromium::paintTickmarks):
+ * platform/graphics/FloatQuad.h:
+ (WebCore::FloatQuad::FloatQuad):
+ * platform/graphics/FloatRect.cpp:
+ (WebCore::FloatRect::intersects):
+ (WebCore::FloatRect::contains):
+ (WebCore::FloatRect::intersect):
+ (WebCore::FloatRect::unite):
+ (WebCore::enclosingIntRect):
+ * platform/graphics/FloatRect.h:
+ (WebCore::FloatRect::maxX):
+ (WebCore::FloatRect::maxY):
+ (WebCore::FloatRect::contains):
+ * platform/graphics/IntRect.cpp:
+ (WebCore::IntRect::intersects):
+ (WebCore::IntRect::contains):
+ (WebCore::IntRect::intersect):
+ (WebCore::IntRect::unite):
+ * platform/graphics/IntRect.h:
+ (WebCore::IntRect::maxX):
+ (WebCore::IntRect::maxY):
+ (WebCore::IntRect::shiftXEdgeTo):
+ (WebCore::IntRect::shiftMaxXEdgeTo):
+ (WebCore::IntRect::shiftYEdgeTo):
+ (WebCore::IntRect::shiftMaxYEdgeTo):
+ (WebCore::IntRect::contains):
+ * platform/graphics/WidthIterator.cpp:
+ (WebCore::WidthIterator::advance):
+ * platform/graphics/cg/GraphicsContextCG.cpp:
+ (WebCore::GraphicsContext::drawRect):
+ (WebCore::GraphicsContext::fillPath):
+ (WebCore::GraphicsContext::fillRect):
+ * platform/graphics/cg/ImageBufferCG.cpp:
+ (WebCore::getImageData):
+ (WebCore::putImageData):
+ * platform/graphics/cg/ImageCG.cpp:
+ (WebCore::BitmapImage::draw):
+ * platform/graphics/filters/FilterEffect.cpp:
+ (WebCore::FilterEffect::copyImageBytes):
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::platformBoundsForGlyph):
+ * platform/graphics/transforms/AffineTransform.cpp:
+ (WebCore::AffineTransform::mapRect):
+ * platform/graphics/win/FontCGWin.cpp:
+ (WebCore::drawGDIGlyphs):
+ * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
+ (WebCore::MediaPlayerPrivate::paint):
+ * platform/gtk/RenderThemeGtk.cpp:
+ (WebCore::centerRectVerticallyInParentInputElement):
+ * platform/mac/WidgetMac.mm:
+ (WebCore::Widget::paint):
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
+ (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::selectionRect):
+ (WebCore::InlineTextBox::paint):
+ (WebCore::InlineTextBox::positionForOffset):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::addOverflowFromChildren):
+ (WebCore::RenderBlock::paintChildren):
+ (WebCore::RenderBlock::paintEllipsisBoxes):
+ (WebCore::RenderBlock::inlineSelectionGaps):
+ (WebCore::RenderBlock::adjustPointToColumnContents):
+ (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
+ (WebCore::RenderBlock::adjustForColumns):
+ * rendering/RenderBlock.h:
+ (WebCore::RenderBlock::FloatingObject::right):
+ (WebCore::RenderBlock::FloatingObject::bottom):
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::reflectedRect):
+ (WebCore::RenderBox::localCaretRect):
+ (WebCore::RenderBox::addShadowOverflow):
+ (WebCore::RenderBox::addLayoutOverflow):
+ (WebCore::RenderBox::visualOverflowRectForPropagation):
+ (WebCore::RenderBox::layoutOverflowRectForPropagation):
+ (WebCore::RenderBox::flipForWritingMode):
+ * rendering/RenderFrameSet.cpp:
+ (WebCore::RenderFrameSet::paintColumnBorder):
+ (WebCore::RenderFrameSet::paintRowBorder):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::paintOutlineForLine):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::getRectToExpose):
+ (WebCore::cornerRect):
+ (WebCore::RenderLayer::positionOverflowControls):
+ (WebCore::RenderLayer::overflowBottom):
+ (WebCore::RenderLayer::overflowRight):
+ (WebCore::RenderLayer::paintResizer):
+ * rendering/RenderLineBoxList.cpp:
+ (WebCore::RenderLineBoxList::rangeIntersectsRect):
+ (WebCore::RenderLineBoxList::paint):
+ * rendering/RenderListItem.cpp:
+ (WebCore::RenderListItem::positionListMarker):
+ * rendering/RenderListMarker.cpp:
+ (WebCore::RenderListMarker::paint):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
+ * rendering/RenderOverflow.h:
+ (WebCore::RenderOverflow::RenderOverflow):
+ (WebCore::RenderOverflow::addLayoutOverflow):
+ (WebCore::RenderOverflow::addVisualOverflow):
+ (WebCore::RenderOverflow::setLayoutOverflow):
+ (WebCore::RenderOverflow::setVisualOverflow):
+ (WebCore::RenderOverflow::resetLayoutOverflow):
+ * rendering/RenderReplaced.cpp:
+ (WebCore::RenderReplaced::shouldPaint):
+ * rendering/RenderScrollbarTheme.cpp:
+ (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::paint):
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::paint):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::paintObject):
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::absoluteQuads):
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::forwardEvent):
+ * rendering/RenderThemeMac.mm:
+ (WebCore::RenderThemeMac::paintMenuListButtonGradients):
+ (WebCore::RenderThemeMac::paintMenuListButton):
+ (WebCore::RenderThemeMac::paintSliderTrack):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::computeRectForRepaint):
+ (WebCore::RenderView::docBottom):
+ (WebCore::RenderView::docRight):
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::paddedLayoutOverflowRect):
+ * rendering/svg/RenderSVGInlineText.cpp:
+ (WebCore::RenderSVGInlineText::localCaretRect):
+
+2011-02-01 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController
+
+ Lots of new WebCoreSystemInterface functions to export.
+ * WebCore.exp.in:
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+ Let the scrollAnimator know when the mouse has
+ moved anywhere inside the page, and when the mouse
+ has moved in or out of the window.
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::mouseMoved):
+ (WebCore::EventHandler::updateMouseEventTargetNode):
+
+ Let the scrollAnimator know when the window has become
+ active or inactive.
+ * page/FocusController.cpp:
+ (WebCore::FocusController::setActive):
+
+ Let the scrollAnimator know when all of these things
+ are happening.
+ * page/FrameView.cpp:
+ (WebCore::FrameView::setContentsSize):
+ (WebCore::FrameView::didMoveOnscreen):
+ (WebCore::FrameView::willMoveOffscreen):
+ (WebCore::FrameView::currentMousePosition):
+ (WebCore::FrameView::contentsResized):
+
+ New functions called through WebKit2 that allow the
+ scrollAnimator to know when a live resize starts and ends.
+ (WebCore::FrameView::willStartLiveResize):
+ (WebCore::FrameView::willEndLiveResize):
+ * page/FrameView.h:
+
+ New functions on ScrollAnimator that pass information
+ to the WKPainterController when we're using one.
+ * platform/ScrollAnimator.h:
+ (WebCore::ScrollAnimator::scrollableArea):
+ (WebCore::ScrollAnimator::contentAreaWillPaint):
+ (WebCore::ScrollAnimator::mouseEnteredContentArea):
+ (WebCore::ScrollAnimator::mouseExitedContentArea):
+ (WebCore::ScrollAnimator::mouseMovedInContentArea):
+ (WebCore::ScrollAnimator::willStartLiveResize):
+ (WebCore::ScrollAnimator::contentsResized):
+ (WebCore::ScrollAnimator::willEndLiveResize):
+ (WebCore::ScrollAnimator::contentAreaDidShow):
+ (WebCore::ScrollAnimator::contentAreaDidHide):
+ (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
+ (WebCore::ScrollAnimatorMac::scrollbarPainterDelegate):
+ (WebCore::ScrollAnimatorMac::setPainterForPainterController):
+ (WebCore::ScrollAnimatorMac::removePainterFromPainterController):
+ (WebCore::ScrollAnimatorMac::notityPositionChanged):
+ (WebCore::ScrollAnimatorMac::contentAreaWillPaint):
+ (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
+ (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
+ (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
+ (WebCore::ScrollAnimatorMac::willStartLiveResize):
+ (WebCore::ScrollAnimatorMac::contentsResized):
+ (WebCore::ScrollAnimatorMac::willEndLiveResize):
+ (WebCore::ScrollAnimatorMac::contentAreaDidShow):
+ (WebCore::ScrollAnimatorMac::contentAreaDidHide):
+
+ Let the scrollAnimator know when this is happening.
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::paint):
+
+ New function lets the scrollAnimator get the current
+ mouse position.
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::currentMousePosition):
+
+ New function that returns the scrollAnimator when needed.
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::scrollAnimator):
+
+ Keep track of if we're in a live resize using a new memeber
+ variable.
+ * platform/mac/ScrollAnimatorMac.h:
+ (WebCore::ScrollAnimatorMac::inLiveResize):
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::view):
+
+ New delegates for the WKPainter and WKPainterController
+ (-[ScrollbarPainterControllerDelegate initWithScrollAnimator:WebCore::]):
+ (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
+ (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
+ (-[ScrollKnobAnimation initWithScrollbarPainter:forScrollAnimator:WebCore::animateKnobAlphaTo:duration:]):
+ (-[ScrollKnobAnimation setCurrentProgress:]):
+ (-[ScrollbarPainterDelegate initWithScrollAnimator:WebCore::]):
+ (-[ScrollbarPainterDelegate convertRectToBacking:]):
+ (-[ScrollbarPainterDelegate convertRectFromBacking:]):
+ (-[ScrollbarPainterDelegate layer]):
+ (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:animateKnobAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
+ (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
+
+ Get the WKScrollbarPainterRefs to synch up with the
+ WKScrollbarPainterControllerRefs when appropriate
+ * platform/mac/ScrollbarThemeMac.h:
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::registerScrollbar):
+ (WebCore::ScrollbarThemeMac::unregisterScrollbar):
+ (WebCore::ScrollbarThemeMac::setNewPainterForScrollbar):
+ (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
+
+ Implement ScrollableArea's virtual function contentsSize() for access
+ through the scrollAnimator.
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::contentsSize):
+
+2011-02-01 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ layoutTestController.counterValueForElementById does not return the correct value
+ https://bugs.webkit.org/show_bug.cgi?id=53037
+
+ Test: fast/css/counters/deep-before.html
+
+ * rendering/RenderTreeAsText.cpp:
+ (WebCore::counterValueForElement):
+ Modified to use the newly available RenderObject::beforePseudoElement()
+ and RenderObject::afterPseudoElement() instead of the old imperfect
+ algorithm to find the before and after pseudo elements.
+
+2011-02-01 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Allow access for security origin same as this.
+ https://bugs.webkit.org/show_bug.cgi?id=53440
+
+ Hard to test as newly added path currently is never hit.
+
+ * page/SecurityOrigin.cpp:
+ (WebCore::SecurityOrigin::canAccess): allow access if this == other
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Update JSObject storage for new marking API
+ https://bugs.webkit.org/show_bug.cgi?id=53467
+
+ Update WebCore to handle new anonymous slot behaviour.
+
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/WorkerScriptController.cpp:
+ (WebCore::WorkerScriptController::initScript):
+ * bindings/scripts/CodeGeneratorJS.pm:
+
+2011-02-01 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by David Hyatt.
+
+ Fix a text rendering problem when enclosing block is RTL and text runs
+ are in different directionality.
+ https://bugs.webkit.org/show_bug.cgi?id=34176
+
+ The problem happens in the following example scenario (ABC represents
+ Hebrew characters):
+ <div dir=rtl>this is a <span><span>test <span>ABC</span></span></span></div>
+
+ The line consists of 3 text runs -- TextRun1 TextRun2 TextRun3. In which
+ TextRun1 and TextRun2's bidi level are 2, and TextRun3's bidi level is 1.
+ TextRun2 and TextRun3's least common ancestor is not a sibling of TextRun1.
+
+ The visual bidi run order of the text runs is TextRun3 TextRun1 TextRun2.
+
+ Inside RenderBlock::constructLine(), when RenderBlock::createLineBoxes()
+ creates InlineFlowBox for TextRun2, it should check an InlineFlowBox for
+ the run's render object's ancestor (not only its parent) has already
+ been constructed or has something following it on the line, in which
+ case, create a new box for TextRun2 instead of sharing the same box with
+ TextRun3.
+
+ In other words, the following 2 div should render the same results
+ (ABC represents Hebrew characters).
+ <div dir=rtl>this is a <span><span>test <span>ABC</span></span></span></div>
+ <div dir=rtl>this is a <span>Test <span>ABC</span></span></div>
+
+ Test: fast/dom/34176.html
+
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::parentIsConstructedOrHaveNext):
+ (WebCore::RenderBlock::createLineBoxes):
+
+2011-02-01 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ Do not add a node in the document's stylesheet candidate node list if the
+ node is already removed from document.
+ https://bugs.webkit.org/show_bug.cgi?id=53441
+
+ Test: fast/css/stylesheet-candidate-nodes-crash.xhtml
+
+ * dom/Document.cpp:
+ (WebCore::Document::addStyleSheetCandidateNode):
+
+2011-02-01 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
+ with vertical text.
+
+ Change printing functions to check writing-mode and properly swap width and height
+ as needed.
+
+ Fix the setScrollOrigin function so that the origin doesn't cause
+ scroll spasming during printing (this is only partially successful, but it's better
+ than it was).
+
+ Rewrite computePageRects to handle both RTL documents properly as well as vertical
+ text documents properly.
+
+ * WebCore.exp.in:
+ * page/FrameView.cpp:
+ (WebCore::FrameView::adjustViewSize):
+ (WebCore::FrameView::forceLayoutForPagination):
+ * page/PrintContext.cpp:
+ (WebCore::PrintContext::computePageRects):
+ (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
+ (WebCore::PrintContext::computeAutomaticScaleFactor):
+ (WebCore::PrintContext::spoolPage):
+ (WebCore::PrintContext::spoolRect):
+ * page/PrintContext.h:
+ * page/mac/WebCoreFrameView.h:
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::wheelEvent):
+ * platform/ScrollView.h:
+ * platform/mac/ScrollViewMac.mm:
+ (WebCore::ScrollView::platformSetScrollOrigin):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::layout):
+
+2011-02-01 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Fix profiles reset to avoid clearing heap profiles in Chromium.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53500
+
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
+
+2011-02-01 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Chromium] Landing detailed heap snapshots, part 1.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53173
+
+ Adding code for accessing heap snapshot data and
+ performing graph calculations.
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/HeapSnapshot.js:
+ (WebInspector.HeapSnapshotArraySlice): Helper class to avoid array contents copying.
+ (WebInspector.HeapSnapshotEdge): Wrapper for accessing graph edge properties.
+ (WebInspector.HeapSnapshotEdgeIterator):
+ (WebInspector.HeapSnapshotNode): Wrapper for accessing graph node properties.
+ (WebInspector.HeapSnapshotNodeIterator):
+ (WebInspector.HeapSnapshot): Wrapper for the heap snapshot.
+ (WebInspector.HeapSnapshotFilteredOrderedIterator):
+ (WebInspector.HeapSnapshotEdgesProvider):
+ (WebInspector.HeapSnapshotNodesProvider):
+ (WebInspector.HeapSnapshotPathFinder):
+ * inspector/front-end/HeapSnapshotView.js:
+ (WebInspector.HeapSnapshotView.prototype._convertSnapshot):
+
+2011-02-01 Adam Roben <aroben@apple.com>
+
+ Fix linker warnings in Release_LTCG builds
+
+ * WebCore.vcproj/WebCore.vcproj: Exclude EventNames.cpp and EventTarget.cpp from all
+ configurations, since they get pulled in via DOMAllInOne.cpp.
+
+2011-02-01 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [Chromium] Wrongly labelled context-menu item for links in Web Inspector's side-pane
+ https://bugs.webkit.org/show_bug.cgi?id=53482
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/ElementsPanel.js:
+ (WebInspector.ElementsPanel.prototype.populateHrefContextMenu):
+ * inspector/front-end/inspector.js:
+ (WebInspector.resourceForURL):
+ (WebInspector.openLinkExternallyLabel):
+
+2011-02-01 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Propagate parent document security origin to newly create Document XML response
+ https://bugs.webkit.org/show_bug.cgi?id=53444
+
+ Covered by the existing tests.
+
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::responseXML):
+
+2011-02-01 Yury Semikhatsky <yurys@chromium.org>
+
+ Unreviewed. Rollout r77230 which caused many layout tests
+ crashes on Chromium Debug bots.
+
+ Async event handlers should not fire within a modal dialog
+ https://bugs.webkit.org/show_bug.cgi?id=53202
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ * dom/EventQueue.cpp:
+ (WebCore::EventQueue::EventQueue):
+ (WebCore::EventQueue::enqueueEvent):
+ (WebCore::EventQueue::pendingEventTimerFired):
+ * dom/EventQueue.h:
+
+2011-02-01 Zoltan Herczeg <zherczeg@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ LightElement changes does not require relayout.
+ https://bugs.webkit.org/show_bug.cgi?id=53232
+
+ When an attribute of a LightElement changes, it
+ send an update message to the lighting filters
+ to update its corresponding LightSource objects,
+ and repaint the filters.
+
+ Duplicated 'id' attributes removed from svg-filter-animation.svg.
+
+ Existing dynamic-update tests covers this feature.
+
+ 5x speedup on manual-tests/svg-filter-animation.svg
+
+ * manual-tests/svg-filter-animation.svg:
+ * platform/graphics/filters/DistantLightSource.h:
+ * platform/graphics/filters/FEDiffuseLighting.cpp:
+ (WebCore::FEDiffuseLighting::setLightingColor):
+ (WebCore::FEDiffuseLighting::setSurfaceScale):
+ (WebCore::FEDiffuseLighting::setDiffuseConstant):
+ (WebCore::FEDiffuseLighting::setKernelUnitLengthX):
+ (WebCore::FEDiffuseLighting::setKernelUnitLengthY):
+ * platform/graphics/filters/FEDiffuseLighting.h:
+ * platform/graphics/filters/LightSource.cpp:
+ (WebCore::PointLightSource::setX):
+ (WebCore::PointLightSource::setY):
+ (WebCore::PointLightSource::setZ):
+ (WebCore::SpotLightSource::setX):
+ (WebCore::SpotLightSource::setY):
+ (WebCore::SpotLightSource::setZ):
+ (WebCore::SpotLightSource::setPointsAtX):
+ (WebCore::SpotLightSource::setPointsAtY):
+ (WebCore::SpotLightSource::setPointsAtZ):
+ (WebCore::SpotLightSource::setSpecularExponent):
+ (WebCore::SpotLightSource::setLimitingConeAngle):
+ (WebCore::DistantLightSource::setAzimuth):
+ (WebCore::DistantLightSource::setElevation):
+ (WebCore::LightSource::setAzimuth):
+ (WebCore::LightSource::setElevation):
+ (WebCore::LightSource::setX):
+ (WebCore::LightSource::setY):
+ (WebCore::LightSource::setZ):
+ (WebCore::LightSource::setPointsAtX):
+ (WebCore::LightSource::setPointsAtY):
+ (WebCore::LightSource::setPointsAtZ):
+ (WebCore::LightSource::setSpecularExponent):
+ (WebCore::LightSource::setLimitingConeAngle):
+ * platform/graphics/filters/LightSource.h:
+ * platform/graphics/filters/PointLightSource.h:
+ * platform/graphics/filters/SpotLightSource.h:
+ * rendering/svg/RenderSVGResourceFilter.cpp:
+ (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
+ * svg/SVGFEDiffuseLightingElement.cpp:
+ (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
+ (WebCore::SVGFEDiffuseLightingElement::lightElementAttributeChanged):
+ (WebCore::SVGFEDiffuseLightingElement::build):
+ (WebCore::SVGFEDiffuseLightingElement::findLightElement):
+ (WebCore::SVGFEDiffuseLightingElement::findLight):
+ * svg/SVGFEDiffuseLightingElement.h:
+ * svg/SVGFELightElement.cpp:
+ (WebCore::SVGFELightElement::svgAttributeChanged):
+ * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+ (WebCore::SVGFilterPrimitiveStandardAttributes::setFilterEffectAttribute):
+ * svg/SVGFilterPrimitiveStandardAttributes.h:
+
+2011-02-01 Roland Steiner <rolandsteiner@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
+ https://bugs.webkit.org/show_bug.cgi?id=53289
+
+ Moving the nested class DocumentOrderedMap from Document into separate files,
+ updating code where necessary.
+
+ No new tests. (refactoring)
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUMakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/Document.cpp:
+ (WebCore::Document::getElementById):
+ (WebCore::Document::getImageMap):
+ * dom/Document.h:
+ * dom/DocumentOrderedMap.cpp: Added.
+ (WebCore::keyMatchesId):
+ (WebCore::keyMatchesMapName):
+ (WebCore::keyMatchesLowercasedMapName):
+ (WebCore::DocumentOrderedMap::clear):
+ (WebCore::DocumentOrderedMap::add):
+ (WebCore::DocumentOrderedMap::remove):
+ (WebCore::DocumentOrderedMap::get):
+ (WebCore::DocumentOrderedMap::getElementById):
+ (WebCore::DocumentOrderedMap::getElementByMapName):
+ (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
+ * dom/DocumentOrderedMap.h: Added.
+ (WebCore::DocumentOrderedMap::contains):
+ (WebCore::DocumentOrderedMap::containsMultiple):
+ * dom/DOMAllInOne.cpp:
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] atk_text_set_caret_offset fails for list items
+ https://bugs.webkit.org/show_bug.cgi?id=53388
+
+ Allow using text ranges across list items.
+
+ * accessibility/gtk/AccessibilityObjectAtk.cpp:
+ (WebCore::AccessibilityObject::allowsTextRanges): Add list items
+ to the list of accessibility objects supporting text ranges.
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] character range extents is off when the end of a wrapped line is included
+ https://bugs.webkit.org/show_bug.cgi?id=53323
+
+ Fixed wrong calculation getting the range extents.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_text_get_range_extents): Removed '+1' since the
+ requested interval shouldn't include the last character.
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Caret Offset is one off at the end of wrapped lines
+ https://bugs.webkit.org/show_bug.cgi?id=53300
+
+ Consider linebreaks as special cases.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (objectAndOffsetUnignored): In order to avoid getting wrong values
+ when around linebreaks, we need to workaround this by explicitly
+ avoiding those '\n' text nodes from affecting the result of
+ calling to TextIterator:rangeLength().
+
+2011-02-01 Roland Steiner <rolandsteiner@chromium.org>
+
+ Unreviewed, rolling out r77229.
+ http://trac.webkit.org/changeset/77229
+ https://bugs.webkit.org/show_bug.cgi?id=53289
+
+ revert mysterious build breakage
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/DOMAllInOne.cpp:
+ * dom/Document.cpp:
+ (WebCore::Document::DocumentOrderedMap::clear):
+ (WebCore::Document::DocumentOrderedMap::add):
+ (WebCore::Document::DocumentOrderedMap::remove):
+ (WebCore::Document::DocumentOrderedMap::get):
+ (WebCore::keyMatchesId):
+ (WebCore::Document::getElementById):
+ (WebCore::keyMatchesMapName):
+ (WebCore::keyMatchesLowercasedMapName):
+ (WebCore::Document::getImageMap):
+ * dom/Document.h:
+ (WebCore::Document::DocumentOrderedMap::contains):
+ (WebCore::Document::DocumentOrderedMap::containsMultiple):
+ * dom/DocumentOrderedMap.cpp: Removed.
+ * dom/DocumentOrderedMap.h: Removed.
+
+2011-02-01 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Async event handlers should not fire within a modal dialog
+ https://bugs.webkit.org/show_bug.cgi?id=53202
+
+ Asychronous events that use EventQueue would currently fire while a
+ modal dialog (e.g. window.alert()) was up. Change EventQueue to use a
+ SuspendableTimer (which automatically gets suspended while dialogs are
+ up and in other cases where JS execution is not allowed).
+
+ Test: fast/events/scroll-event-during-modal-dialog.html
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ * dom/EventQueue.cpp:
+ (WebCore::EventQueueTimer::EventQueueTimer):
+ (WebCore::EventQueueTimer::fired):
+ (WebCore::EventQueue::EventQueue):
+ (WebCore::EventQueue::enqueueEvent):
+ (WebCore::EventQueue::pendingEventTimerFired):
+ * dom/EventQueue.h:
+ (WebCore::EventQueue::create):
+
+2011-02-01 Roland Steiner <rolandsteiner@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
+ https://bugs.webkit.org/show_bug.cgi?id=53289
+
+ Moving the nested class DocumentOrderedMap from Document into separate files,
+ updating code where necessary.
+
+ No new tests. (refactoring)
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUMakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/Document.cpp:
+ (WebCore::Document::getElementById):
+ (WebCore::Document::getImageMap):
+ * dom/Document.h:
+ * dom/DocumentOrderedMap.cpp: Added.
+ (WebCore::keyMatchesId):
+ (WebCore::keyMatchesMapName):
+ (WebCore::keyMatchesLowercasedMapName):
+ (WebCore::DocumentOrderedMap::clear):
+ (WebCore::DocumentOrderedMap::add):
+ (WebCore::DocumentOrderedMap::remove):
+ (WebCore::DocumentOrderedMap::get):
+ (WebCore::DocumentOrderedMap::getElementById):
+ (WebCore::DocumentOrderedMap::getElementByMapName):
+ (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
+ * dom/DocumentOrderedMap.h: Added.
+ (WebCore::DocumentOrderedMap::contains):
+ (WebCore::DocumentOrderedMap::containsMultiple):
+ * dom/DOMAllInOne.cpp:
+
+2011-02-01 Naoki Takano <takano.naoki@gmail.com>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Autofill should work with HTML5 form elements
+ https://bugs.webkit.org/show_bug.cgi?id=51809
+ http://crbug.com/65654
+
+ No new tests, because this fix is for Chromium project and hard to test only in WebKit project.
+
+ * html/InputType.h: Insert comment for canSetSuggestedValue().
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::canSetSuggestedValue): Implemented to return always true for that all text filed inputs can be completed.
+ * html/TextFieldInputType.h: Declare canSetSuggestedValue().
+ * html/TextInputType.cpp: Delete canSetSuggestedValue() not to return true anymore.
+ * html/TextInputType.h: Delete canSetSuggestedValue() not to return true anymore.
+
+2011-02-01 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION (r65062): Safari loops forever under WebCore::plainTextToMallocAllocatedBuffer()
+ https://bugs.webkit.org/show_bug.cgi?id=53272
+
+ * editing/TextIterator.cpp:
+ (WebCore::TextIterator::handleTextBox): Pass the appropriate renderer to emitText().
+
+2011-01-31 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53466
+ Move WebKit2 to printing via API methods
+
+ * WebCore.exp.in: Export IntRect::scale().
+
+2011-01-31 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Remove obsolete comment after r41871
+ https://bugs.webkit.org/show_bug.cgi?id=53406
+
+ * dom/Document.h:
+
+2011-01-31 Simon Fraser <simon.fraser@apple.com>
+
+ Fix according to reviewer comments: can just use Color::black now.
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::drawInsetShadow):
+ (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
+
+2011-01-31 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Clean up ShadowBlur
+ https://bugs.webkit.org/show_bug.cgi?id=53472
+
+ Some minor ShadowBlur cleanup.
+
+ * platform/graphics/ShadowBlur.h:
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::ShadowBlur): Use m_blurRadius rather than the radius
+ paramter.
+ (WebCore::ShadowBlur::adjustBlurRadius): Renamed from adjustBlurDistance.
+ (WebCore::ShadowBlur::calculateLayerBoundingRect): Rename layerFloatRect to
+ layerRect. Make frameSize a float.
+ (WebCore::ShadowBlur::beginShadowLayer): This now takes a precomputed
+ layerRect rather than calling calculateLayerBoundingRect() to compute
+ it itself, since we were calling calculateLayerBoundingRect() twice.
+ (WebCore::ShadowBlur::drawRectShadow): Optimize to call calculateLayerBoundingRect()
+ only once. The shadowRect variable was unused, so two return paths could be
+ collapsed into one.
+ (WebCore::ShadowBlur::drawInsetShadow): Call calculateLayerBoundingRect() before
+ beginShadowLayer() now.
+ (WebCore::ShadowBlur::drawRectShadowWithoutTiling): The layerRect gets passed in.
+ We always used alpha=1, so no need to pass that in.
+ (WebCore::ShadowBlur::drawRectShadowWithTiling): We always used alpha=1, so no need to
+ pass that in. Move shadowRect down to first use.
+ ShadowBlur::clipBounds() was unused.
+
+2011-01-31 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] QWebElements example from QtWebKit Bridge documentation does not work at all
+ https://bugs.webkit.org/show_bug.cgi?id=46748
+
+ This problem disappears when we register QWebElement using qRegisterMetaType, which we now do in QtInstance.
+ Added a regression test to tst_QWebFrame.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::QtInstance):
+
+2011-01-27 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Convert <progress> shadow DOM to a DOM-based shadow.
+ https://bugs.webkit.org/show_bug.cgi?id=50660
+
+ * Removed RenderProgress::m_valuePart, moved the shadow node
+ to the shadow root of HTMLProgressElement.
+ * Removed hard-coded pseudo ID for -webkit-progress-bar-value.
+ ProgressBarValueElement is defined only for overriding
+ shadowPseudoId().
+
+ No new tests. No behavioral change.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId):
+ (WebCore::nameToPseudoTypeMap):
+ (WebCore::CSSSelector::extractPseudoType):
+ * css/CSSSelector.h:
+ * html/HTMLProgressElement.cpp:
+ (WebCore::ProgressBarValueElement::ProgressBarValueElement):
+ (WebCore::ProgressBarValueElement::shadowPseudoId):
+ (WebCore::ProgressBarValueElement::create):
+ (WebCore::ProgressBarValueElement::detach):
+ (WebCore::HTMLProgressElement::parseMappedAttribute):
+ (WebCore::HTMLProgressElement::attach):
+ (WebCore::HTMLProgressElement::valuePart):
+ (WebCore::HTMLProgressElement::didElementStateChange):
+ (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
+ * html/HTMLProgressElement.h:
+ * rendering/RenderProgress.cpp:
+ (WebCore::RenderProgress::~RenderProgress):
+ (WebCore::RenderProgress::updateFromElement):
+ (WebCore::RenderProgress::layoutParts):
+ (WebCore::RenderProgress::shouldHaveParts):
+ (WebCore::RenderProgress::valuePart):
+ * rendering/RenderProgress.h:
+ * rendering/style/RenderStyleConstants.h:
+
+2011-01-31 Charlie Reis <creis@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Add sanity check to help diagnose bug 52819
+ https://bugs.webkit.org/show_bug.cgi?id=53402
+
+ Crash early if the children of fromItem look invalid.
+
+ * loader/HistoryController.cpp:
+
+2011-01-31 Kalle Vahlman <kalle.vahlman@movial.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] canvas.drawImage(HTMLVideoElement) doesn't work with Qt Multimedia backend
+ https://bugs.webkit.org/show_bug.cgi?id=53325
+
+ Reimplement paintCurrentFrameInContext() rather than delegate the
+ rendering to paint() to make sure we really do get the video frame
+ content into the GraphicsContext, regardless of accelerated
+ compositing and the video scene state.
+
+ * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
+ (WebCore::MediaPlayerPrivateQt::paintCurrentFrameInContext):
+ * platform/graphics/qt/MediaPlayerPrivateQt.h:
+
+2011-01-31 Emil A Eklund <eae@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Setting "selected" attribute to false should have no effect in single line <select>
+ https://bugs.webkit.org/show_bug.cgi?id=52436
+
+ Change SelectElement::setSelectedIndex to select the first selectable
+ option when the select state of all options is set to false as required
+ by the HTML5 specification.
+
+ Test: fast/dom/HTMLSelectElement/selected-false.html
+
+ * dom/SelectElement.cpp:
+ (WebCore::SelectElement::setSelectedIndex):
+
+2011-01-31 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Console source references need a left-margin
+ https://bugs.webkit.org/show_bug.cgi?id=53308
+
+ * inspector/front-end/inspector.css:
+ (.console-message-url): Added a 4px margin on the left.
+
+2011-01-31 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ Code Changes only.
+
+ It is needlessly expensive to find the generating node from an anonymous renderer of a pseudoelement.
+ https://bugs.webkit.org/show_bug.cgi?id=53024
+
+ No new tests. No change in functionality
+
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::before):
+ (WebCore::RenderObject::after):
+ (WebCore::RenderObject::generatingNode):
+ Added new accessors for the use of the CSS 2.1 counters code
+ (mainlyly)
+ * rendering/RenderObjectChildList.cpp:
+ (WebCore::beforeAfterContainer):
+ (WebCore::RenderObjectChildList::invalidateCounters):
+ (WebCore::RenderObjectChildList::before):
+ (WebCore::RenderObjectChildList::after):
+ Refactored the code to take advantage of the new accessors.
+ (WebCore::RenderObjectChildList::updateBeforeAfterContent):
+ Changed to store the generating node in the :before and :after
+ renderers.
+ * rendering/RenderObjectChildList.h:
+
+2011-01-31 Krithigassree Sambamurthy <krithigassree.sambamurthy@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ Add background-clip to background shorthand
+ https://bugs.webkit.org/show_bug.cgi?id=52080
+
+ Added background-clip to background-shorthand. Also made changes to
+ include webkitMaskClip to the mask shorthand to keep both in sync.
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseValue):
+ (WebCore::CSSParser::parseFillShorthand):
+
+2011-01-31 Darin Adler <darin@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ WKView should support scrollPageDown:, scrollPageUp:, scrollToBeg and other similar selectors
+ https://bugs.webkit.org/show_bug.cgi?id=53460
+
+ * editing/EditorCommand.cpp:
+ (WebCore::executeScrollPageBackward): Added.
+ (WebCore::executeScrollPageForward): Added.
+ (WebCore::executeScrollToBeginningOfDocument): Added.
+ (WebCore::executeScrollToEndOfDocument): Added.
+ (WebCore::createCommandMap): Added the four commands above to the map.
+
+2011-01-31 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ Inter-ideograph justification should apply to hiragana and katakana as well
+ https://bugs.webkit.org/show_bug.cgi?id=53464
+
+ Changed the test for expansion opportunities from isCJKIdeograph() to isCJKIdeographOrSymbol().
+
+ * platform/graphics/Font.cpp:
+ (WebCore::Font::expansionOpportunityCount):
+ * platform/graphics/WidthIterator.cpp:
+ (WebCore::WidthIterator::advance):
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
+
+2011-01-31 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by James Robinson.
+
+ REGRESSION(r76951): Appearance of media controls changed slightly on Qt/Chromium ports
+ https://bugs.webkit.org/show_bug.cgi?id=53314
+
+ Fixes media/controls-strict.html on Chromium.
+
+ * css/mediaControlsChromium.css:
+ (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
+ Added proper box-sizing to avoid differences between strict/quirks mode.
+
+2011-01-31 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Validation message bubble shouldn't inherit text-security style
+ https://bugs.webkit.org/show_bug.cgi?id=53457
+
+ No new tests because the validation message feature depends on timers
+ and is enabled only in Chromium port.
+
+ * css/html.css:
+ (::-webkit-validation-bubble): Reset -webkit-text-security.
+
+2011-01-31 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Reapplying this patch again.
+ The removal of this patch in <http://trac.webkit.org/changeset/77125>
+ as part of https://bugs.webkit.org/show_bug.cgi?id=53418,
+ removed the both the first (failing) patch (r76893) and this fixed
+ patch (r76969). This patch includes slight changes necessitated by
+ r77151.
+
+ Reapplying this patch with the change that the second ASSERT in
+ RootObject::removeRuntimeObject was changed to use
+ .uncheckedGet() instead of the failing .get(). The object in question
+ could be in the process of being GC'ed. The get() call will not return
+ such an object while the uncheckedGet() call will return the (unsafe)
+ object. This is the behavior we want.
+
+ Precautionary change.
+ Changed RootObject to use WeakGCMap instead of HashSet.
+ Found will looking for another issue, but can't produce a test case
+ that is problematic. THerefore there aren't any new tests.
+
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ (JSC::Bindings::RootObject::addRuntimeObject):
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+ * bridge/runtime_root.h:
+
+2011-01-31 Andreas Kling <kling@webkit.org>
+
+ Unbreak Qt build after r77151.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::removeCachedMethod):
+ (JSC::Bindings::QtInstance::markAggregate):
+
+2011-01-31 takano takumi <takano@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ Implement text-combine rendering code
+ https://bugs.webkit.org/show_bug.cgi?id=50621
+
+ Test: fast/text/international/text-combine-image-test.html
+
+ * Android.mk: Added RenderCombineText.cpp/h
+ * CMakeLists.txt: Added RenderCombineText.cpp/h
+ * GNUmakefile.am: Added RenderCombineText.cpp/h
+ * WebCore.exp.in:
+ * WebCore.gypi: Added RenderCombineText.cpp/h
+ * WebCore.pro: Added RenderCombineText.cpp/h
+ * WebCore.vcproj/WebCore.vcproj: Added RenderCombineText.cpp/h
+ * WebCore.xcodeproj/project.pbxproj: Added RenderCombineText.cpp/h
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData):
+ - Added fontDescription.widthVariant to SimpleFontData creation.
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applyProperty):
+ - Changed to set "Unique" flag to RenderStyle in case of TextCombine.
+ * dom/Text.cpp:
+ (WebCore::Text::createRenderer):
+ - Changed to create RenderCombineText in case of TextCombine.
+ * loader/cache/CachedFont.cpp:
+ (WebCore::CachedFont::platformDataFromCustomData):
+ - Added FontWidthVariant as an argument for FontPlatformData creation.
+ * loader/cache/CachedFont.h:
+ - Ditto.
+ * platform/graphics/Font.h:
+ (WebCore::Font::widthVariant):
+ - The accessor to FontWidthVariant member variable.
+ * platform/graphics/FontCache.cpp:
+ - Made cache to incorporate FontWidthVariant value.
+ (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
+ (WebCore::FontPlatformDataCacheKey::operator==):
+ (WebCore::computeHash):
+ (WebCore::FontCache::getCachedFontPlatformData):
+ * platform/graphics/FontDescription.h:
+ - Add a member variable that holds a width variant - none, half-width, third-width, and quarter-width.
+ (WebCore::FontDescription::FontDescription):
+ (WebCore::FontDescription::widthVariant):
+ (WebCore::FontDescription::setWidthVariant):
+ (WebCore::FontDescription::operator==):
+ * platform/graphics/FontWidthVariant.h: Added.
+ * platform/graphics/cairo/FontCustomPlatformData.h:
+ - Changed to carry FontWidthVariant value.
+ * platform/graphics/cocoa/FontPlatformData.h:
+ - Changed to carry FontWidthVariant value.
+ (WebCore::FontPlatformData::FontPlatformData):
+ (WebCore::FontPlatformData::widthVariant):
+ (WebCore::FontPlatformData::hash):
+ (WebCore::FontPlatformData::operator==):
+ * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+ (WebCore::FontPlatformData::FontPlatformData):
+ - Changed to carry FontWidthVariant value.
+ (WebCore::FontPlatformData::operator=):
+ - Ditto.
+ (WebCore::mapFontWidthVariantToCTFeatureSelector):
+ - A function to map a FontWidthVariant value to a CoreText's text spacing feature selector.
+ (WebCore::FontPlatformData::ctFont):
+ - Changed to create CTFont with text spacing variant based on FontWidthVariant.
+ * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Changed to carry FontWidthVariant value.
+ * platform/graphics/haiku/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Changed to carry FontWidthVariant value.
+ * platform/graphics/haiku/FontCustomPlatformData.h:
+ * platform/graphics/mac/FontCacheMac.mm:
+ (WebCore::FontCache::createFontPlatformData):
+ - Changed to carry FontWidthVariant value.
+ * platform/graphics/mac/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Changed to carry FontWidthVariant value.
+ * platform/graphics/mac/FontCustomPlatformData.h:
+ - Ditto.
+ * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
+ (WebCore::shouldUseCoreText):
+ - Changed to skip CT path when width variant is specified.
+ * platform/graphics/pango/FontCustomPlatformDataPango.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/qt/FontCustomPlatformData.h:
+ - Ditto.
+ * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/skia/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/skia/FontCustomPlatformData.h:
+ - Ditto.
+ * platform/graphics/win/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/win/FontCustomPlatformData.h:
+ - Ditto.
+ * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
+ - Ditto.
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/win/FontCustomPlatformDataCairo.h:
+ - Ditto.
+ * platform/graphics/wince/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/wince/FontCustomPlatformData.h:
+ - Ditto.
+ * platform/graphics/wx/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ - Ditto.
+ * platform/graphics/wx/FontCustomPlatformData.h:
+ - Ditto.
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::paint):
+ - In case of RenderCombineText, we don't rotate text even in vertical writing. Also, we render original text
+ instead of text returned from text().
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
+ - Made to call RenderCombinedText's prepareTextCombine() here.
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::textWidth):
+ - Made to always use the render object's width() in case of TextCombine.
+ (WebCore::RenderBlock::findNextLineBreak):
+ - Made to call RenderCombinedText's prepareTextCombine() here.
+ * rendering/RenderCombineText.cpp: Added. A subclass of RenderText.
+ (WebCore::RenderCombineText::RenderCombineText):
+ (WebCore::RenderCombineText::styleDidChange):
+ - Clear the flag that indicated the font has been prepared for combining. The font will be reinitialized in
+ the next call of RenderBlock::findNextLineBreak().
+ (WebCore::RenderCombineText::setTextInternal):
+ - Ditto.
+ (WebCore::RenderCombineText::width):
+ - Returns 1-em width in case of font combine.
+ (WebCore::RenderCombineText::adjustTextOrigin):
+ - Adjust drawing origin point in case of font combine.
+ (WebCore::RenderCombineText::charactersToRender):
+ - Return original text instead of current text in case of font combine.
+ (WebCore::RenderCombineText::combineText):
+ - This function tries to pack passed text with; 1) the current font as is, 2) the font created
+ from the descriptor with half-width variant specified, 3) the font with third-width variant, 4) the font
+ with quarter-width variant.
+ - If a suitable font successfully found, replace the current font with the new font. If no appropriate font found,
+ we give up text-combine as the CSS spec describes.
+ - If a new font found, we replace the text with 0xFFFC. This is needed for a combined text block to be able to
+ behave like a single character against text decorations.
+ * rendering/RenderCombineText.h: Added.
+ (WebCore::RenderCombineText::isCombined):
+ (WebCore::RenderCombineText::combinedTextWidth):
+ - Returns 1-em width in case of font combine.
+ (WebCore::RenderCombineText::renderName):
+ (WebCore::toRenderCombineText):
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::widthFromCache):
+ - Made to call RenderCombineText's combinedTextWidth when the text is combined.
+ * rendering/RenderingAllInOne.cpp: Added RenderCombineText.cpp
+ * rendering/style/RenderStyle.h:
+ (WebCore::InheritedFlags::hasTextCombine):
+ - Added for a quick test of TextCombine.
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77098, r77099, r77100, r77109, and
+ r77111 back in, along with a few more Qt fix attempts.
+
+ * ForwardingHeaders/runtime/WriteBarrier.h: Added.
+ * WebCore.exp.in:
+ * bindings/js/DOMWrapperWorld.h:
+ (WebCore::DOMWrapperWorld::globalData):
+ * bindings/js/JSAudioConstructor.cpp:
+ (WebCore::JSAudioConstructor::JSAudioConstructor):
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::markDOMNodesForDocument):
+ (WebCore::markDOMObjectWrapper):
+ (WebCore::markDOMNodeWrapper):
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::markChildren):
+ (WebCore::JSDOMGlobalObject::setInjectedScript):
+ (WebCore::JSDOMGlobalObject::injectedScript):
+ * bindings/js/JSDOMGlobalObject.h:
+ (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
+ (WebCore::getDOMConstructor):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::setLocation):
+ (WebCore::DialogHandler::dialogCreated):
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::JSDOMWindowShell):
+ (WebCore::JSDOMWindowShell::setWindow):
+ (WebCore::JSDOMWindowShell::markChildren):
+ (WebCore::JSDOMWindowShell::unwrappedObject):
+ * bindings/js/JSDOMWindowShell.h:
+ (WebCore::JSDOMWindowShell::window):
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/JSDeviceMotionEventCustom.cpp:
+ (WebCore::createAccelerationObject):
+ (WebCore::createRotationRateObject):
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ (WebCore::JSEventListener::markJSFunction):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ (WebCore::JSHTMLDocument::setAll):
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::JSImageConstructor):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSJavaScriptCallFrameCustom.cpp:
+ (WebCore::JSJavaScriptCallFrame::scopeChain):
+ (WebCore::JSJavaScriptCallFrame::scopeType):
+ * bindings/js/JSNodeFilterCondition.cpp:
+ (WebCore::JSNodeFilterCondition::markAggregate):
+ (WebCore::JSNodeFilterCondition::acceptNode):
+ * bindings/js/JSNodeFilterCondition.h:
+ * bindings/js/JSNodeFilterCustom.cpp:
+ * bindings/js/JSOptionConstructor.cpp:
+ (WebCore::JSOptionConstructor::JSOptionConstructor):
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ (WebCore::JSSQLResultSetRowList::item):
+ * bindings/js/ScriptCachedFrameData.cpp:
+ (WebCore::ScriptCachedFrameData::restore):
+ * bindings/js/ScriptObject.cpp:
+ (WebCore::ScriptGlobalObject::set):
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::putProperty):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bridge/qt/qt_class.cpp:
+ (JSC::Bindings::QtClass::fallbackObject):
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::QtInstance):
+ (JSC::Bindings::QtInstance::removeCachedMethod):
+ (JSC::Bindings::QtInstance::markAggregate):
+ * bridge/qt/qt_instance.h:
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+ (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+ * bridge/qt/qt_runtime.h:
+ * dom/Document.h:
+
+2011-01-31 Dan Winship <danw@gnome.org>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ wss (websockets ssl) support for gtk via new gio TLS support
+ https://bugs.webkit.org/show_bug.cgi?id=50344
+
+ Update to use GPollableOutputStream and GTlsConnection to
+ implement wss URLs
+
+ * platform/network/soup/SocketStreamHandle.h:
+ * platform/network/soup/SocketStreamHandleSoup.cpp:
+ (WebCore::SocketStreamHandle::SocketStreamHandle):
+ (WebCore::SocketStreamHandle::connected):
+ (WebCore::SocketStreamHandle::platformSend):
+ (WebCore::SocketStreamHandle::beginWaitingForSocketWritability):
+ (WebCore::writeReadyCallback):
+
+2011-01-31 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Check the textarea node still exists in document before casting
+ it to HTMLTextAreaElement.
+ https://bugs.webkit.org/show_bug.cgi?id=53429
+
+ Test: fast/forms/textarea-node-removed-from-document-crash.html
+
+ * rendering/RenderTextControlMultiLine.cpp:
+ (WebCore::RenderTextControlMultiLine::~RenderTextControlMultiLine):
+
+2011-01-27 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ If beforeChild is wrapped in an anonymous table section, we need to
+ go the parent to find it and use it before adding childs to table.
+ https://bugs.webkit.org/show_bug.cgi?id=53276
+
+ We need to make sure that beforeChild's parent is "this" before calling
+ RenderBox::addChild. The previous condition in while is too restrictive
+ and fails to calculate the right beforeChild value when its display
+ style is table caption.
+ Test: fast/table/before-child-non-table-section-add-table-crash.html
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::addChild):
+
+2011-01-31 Shane Stephens <shanestephens@google.com>
+
+ Reviewed by Simon Fraser.
+
+ AffineTransform::translateRight incorrectly computes a translateLeft.
+ https://bugs.webkit.org/show_bug.cgi?id=52551
+
+ Removed translateRight and converted all uses to perform standard
+ matrix multiplication.
+
+ No new tests because patch doesn't modify functionality.
+
+ * platform/graphics/transforms/AffineTransform.cpp:
+ * platform/graphics/transforms/AffineTransform.h:
+ (WebCore::AffineTransform::translation):
+ * rendering/svg/RenderSVGResourceMarker.cpp:
+ (WebCore::RenderSVGResourceMarker::localToParentTransform):
+ * rendering/svg/RenderSVGRoot.cpp:
+ (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
+ (WebCore::RenderSVGRoot::localToParentTransform):
+ * rendering/svg/RenderSVGViewportContainer.cpp:
+ (WebCore::RenderSVGViewportContainer::localToParentTransform):
+ * rendering/svg/SVGTextLayoutEngine.cpp:
+ (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
+
+2011-01-31 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] atk_text_set_caret_offset returns True even when it is unsuccessful
+ https://bugs.webkit.org/show_bug.cgi?id=53389
+
+ Return FALSE when not able to set the caret at the specified offset.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (webkit_accessible_text_set_caret_offset): Return FALSE when the
+ range created is NULL and adjust offset to account for list markers.
+
+2011-01-28 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: copy HAR to clipboard instead of saving blob on export.
+ https://bugs.webkit.org/show_bug.cgi?id=53328
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype._exportAll):
+ (WebInspector.NetworkPanel.prototype._exportResource):
+
+2011-01-30 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: speed up network panel rendering.
+ https://bugs.webkit.org/show_bug.cgi?id=53397
+
+ * inspector/front-end/DataGrid.js:
+ (WebInspector.DataGrid.prototype.get scrollContainer):
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype.elementsToRestoreScrollPositionsFor):
+ (WebInspector.NetworkPanel.prototype._positionSummaryBar):
+ (WebInspector.NetworkPanel.prototype._createTable):
+ (WebInspector.NetworkPanel.prototype._exportResource):
+ (WebInspector.NetworkPanel.prototype._onScroll):
+ * inspector/front-end/networkPanel.css:
+ (.network-sidebar .data-grid.small tr.offscreen):
+ (.network-sidebar .data-grid tr.offscreen):
+ (.network-sidebar .data-grid tr.offscreen td):
+
+2011-01-31 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Remove wrec from WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=53298
+
+ No new tests needed.
+
+ * Android.jscbindings.mk:
+ * ForwardingHeaders/wrec/WREC.h: Removed.
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.vcproj/copyForwardingHeaders.cmd:
+
+2011-01-31 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76969.
+ http://trac.webkit.org/changeset/76969
+ https://bugs.webkit.org/show_bug.cgi?id=53418
+
+ "It is causing crashes in GTK+ and Leopard bots" (Requested by
+ alexg__ on #webkit).
+
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ (JSC::Bindings::RootObject::addRuntimeObject):
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+ * bridge/runtime_root.h:
+
+2011-01-31 Antti Koivisto <antti@apple.com>
+
+ Not reviewed.
+
+ Spelling.
+
+ * css/CSSSelectorList.h:
+ (WebCore::CSSSelectorList::next):
+
+2011-01-31 Yury Semikhatsky <yurys@chromium.org>
+
+ Unreviewed. Fix Chromium compilation on Linux.
+
+ * platform/graphics/ShadowBlur.cpp: added PLATFORM(CHROMIUM) guard
+ * platform/graphics/ShadowBlur.h: added missing ColorSpace.h header include
+
+2011-01-31 Yury Semikhatsky <yurys@chromium.org>
+
+ Unreviewed. Fix Chromium compilation on Mac broken by r77101.
+
+ * WebCore.gypi: add ShadowBlur.{h,cpp} to the gypi file.
+
+2011-01-31 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ WebInspector: Change button title from "Clear CPU profiles" to "Clear all profiles".
+
+ https://bugs.webkit.org/show_bug.cgi?id=53309
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel):
+
+2011-01-31 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Unreviewed, fix the build with current GTK+ 3.x.
+
+ * plugins/gtk/gtk2xtbin.c:
+ * plugins/gtk/gtk2xtbin.h:
+
+2011-01-30 Kenichi Ishibashi <bashi@google.com>
+
+ Reviewed by Kent Tamura.
+
+ Dangling form associated elements should not be registered on the document
+ https://bugs.webkit.org/show_bug.cgi?id=53223
+
+ Adds insertedIntoDocument() and remvoedFromDocument() to
+ FormAssociatedElement class to register the element on the document
+ if and only if it actually inserted into (removed from) the document.
+
+ Test: fast/forms/dangling-form-element-crash.html
+
+ * html/FormAssociatedElement.cpp:
+ (WebCore::FormAssociatedElement::insertedIntoDocument): Added.
+ (WebCore::FormAssociatedElement::removedFromDocument): Ditto.
+ (WebCore::FormAssociatedElement::insertedIntoTree): Don't register
+ the element to a document.
+ (WebCore::FormAssociatedElement::removedFromTree): Don't unregister
+ the element from a document.
+ * html/FormAssociatedElement.h:
+ * html/HTMLFormControlElement.cpp:
+ (WebCore::HTMLFormControlElement::insertedIntoDocument): Added.
+ (WebCore::HTMLFormControlElement::removedFromDocument): Ditto.
+ * html/HTMLFormControlElement.h:
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::insertedIntoDocument): Calls
+ FormAssociatedElement::insertedIntoDocument().
+ (WebCore::HTMLObjectElement::removedFromDocument): Calls
+ FormAssociatedElement::removedFromDocument().
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed, rolling out r77098, r77099, r77100, r77109, and
+ r77111.
+ http://trac.webkit.org/changeset/77098
+ http://trac.webkit.org/changeset/77099
+ http://trac.webkit.org/changeset/77100
+ http://trac.webkit.org/changeset/77109
+ http://trac.webkit.org/changeset/77111
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Qt build is broken
+
+ * ForwardingHeaders/runtime/WriteBarrier.h: Removed.
+ * WebCore.exp.in:
+ * bindings/js/DOMWrapperWorld.h:
+ * bindings/js/JSAudioConstructor.cpp:
+ (WebCore::JSAudioConstructor::JSAudioConstructor):
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::markDOMNodesForDocument):
+ (WebCore::markDOMObjectWrapper):
+ (WebCore::markDOMNodeWrapper):
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::markChildren):
+ (WebCore::JSDOMGlobalObject::setInjectedScript):
+ (WebCore::JSDOMGlobalObject::injectedScript):
+ * bindings/js/JSDOMGlobalObject.h:
+ (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
+ (WebCore::getDOMConstructor):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::setLocation):
+ (WebCore::DialogHandler::dialogCreated):
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::JSDOMWindowShell):
+ (WebCore::JSDOMWindowShell::setWindow):
+ (WebCore::JSDOMWindowShell::markChildren):
+ (WebCore::JSDOMWindowShell::unwrappedObject):
+ * bindings/js/JSDOMWindowShell.h:
+ (WebCore::JSDOMWindowShell::window):
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/JSDeviceMotionEventCustom.cpp:
+ (WebCore::createAccelerationObject):
+ (WebCore::createRotationRateObject):
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ (WebCore::JSEventListener::markJSFunction):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ (WebCore::JSHTMLDocument::setAll):
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::JSImageConstructor):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSJavaScriptCallFrameCustom.cpp:
+ (WebCore::JSJavaScriptCallFrame::scopeChain):
+ (WebCore::JSJavaScriptCallFrame::scopeType):
+ * bindings/js/JSNodeFilterCondition.cpp:
+ (WebCore::JSNodeFilterCondition::markAggregate):
+ (WebCore::JSNodeFilterCondition::acceptNode):
+ * bindings/js/JSNodeFilterCondition.h:
+ * bindings/js/JSNodeFilterCustom.cpp:
+ * bindings/js/JSOptionConstructor.cpp:
+ (WebCore::JSOptionConstructor::JSOptionConstructor):
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ (WebCore::JSSQLResultSetRowList::item):
+ * bindings/js/ScriptCachedFrameData.cpp:
+ (WebCore::ScriptCachedFrameData::restore):
+ * bindings/js/ScriptObject.cpp:
+ (WebCore::ScriptGlobalObject::set):
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::putProperty):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::QtInstance):
+ (JSC::Bindings::QtInstance::removeCachedMethod):
+ (JSC::Bindings::QtInstance::markAggregate):
+ * bridge/qt/qt_instance.h:
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+ (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+ * bridge/qt/qt_runtime.h:
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ * bridge/runtime_root.h:
+ * dom/Document.h:
+
+2011-01-30 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77107.
+ http://trac.webkit.org/changeset/77107
+ https://bugs.webkit.org/show_bug.cgi?id=53412
+
+ Caused 5 new form-related test crashes (Requested by smfr on
+ #webkit).
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId):
+ (WebCore::nameToPseudoTypeMap):
+ (WebCore::CSSSelector::extractPseudoType):
+ * css/CSSSelector.h:
+ * html/HTMLProgressElement.cpp:
+ (WebCore::HTMLProgressElement::parseMappedAttribute):
+ (WebCore::HTMLProgressElement::attach):
+ * html/HTMLProgressElement.h:
+ * rendering/RenderProgress.cpp:
+ (WebCore::RenderProgress::~RenderProgress):
+ (WebCore::RenderProgress::updateFromElement):
+ (WebCore::RenderProgress::layoutParts):
+ (WebCore::RenderProgress::shouldHaveParts):
+ * rendering/RenderProgress.h:
+ * rendering/style/RenderStyleConstants.h:
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Enhance ShadowBlur to render inset box shadows
+ https://bugs.webkit.org/show_bug.cgi?id=51567
+
+ Use ShadowBlur for inset box-shadows with CG. It
+ currently lacks a tiled version, but is still much
+ faster than CG shadows.
+
+ Test: fast/box-shadow/inset-box-shadow-radius.html
+
+ * platform/graphics/ShadowBlur.cpp:
+ * platform/graphics/ShadowBlur.h: New method for inset
+ shadows.
+ (WebCore::ShadowBlur::drawInsetShadow):
+
+ * platform/graphics/GraphicsContext.cpp: #ifdef out
+ fillRectWithRoundedHole() for CG.
+
+ * platform/graphics/cg/GraphicsContextCG.cpp:
+ (WebCore::GraphicsContext::fillRectWithRoundedHole): If there's
+ a shadow with a radius > 0, use ShadowBlur.
+
+2011-01-28 Kenneth Russell <kbr@google.com>
+
+ Reviewed by Chris Marrin.
+
+ WebGL shows PNG Textures with indexed colors too dark
+ https://bugs.webkit.org/show_bug.cgi?id=47477
+
+ Properly handle indexed PNG images by re-rendering them as RGBA
+ images before upload. Verified with this layout test and the test
+ cases from bugs 47477 and 53269.
+
+ * platform/graphics/cg/GraphicsContext3DCG.cpp:
+ (WebCore::GraphicsContext3D::getImageData):
+
+2011-01-27 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Convert <progress> shadow DOM to a DOM-based shadow.
+ https://bugs.webkit.org/show_bug.cgi?id=50660
+
+ * Removed RenderProgress::m_valuePart, moved the shadow node
+ to the shadow root of HTMLProgressElement.
+ * Removed hard-coded pseudo ID for -webkit-progress-bar-value.
+ ProgressBarValueElement is defined only for overriding
+ shadowPseudoId().
+
+ No new tests. No behavioral change.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId):
+ (WebCore::nameToPseudoTypeMap):
+ (WebCore::CSSSelector::extractPseudoType):
+ * css/CSSSelector.h:
+ * html/HTMLProgressElement.cpp:
+ (WebCore::ProgressBarValueElement::ProgressBarValueElement):
+ (WebCore::ProgressBarValueElement::shadowPseudoId):
+ (WebCore::ProgressBarValueElement::create):
+ (WebCore::HTMLProgressElement::parseMappedAttribute):
+ (WebCore::HTMLProgressElement::attach):
+ (WebCore::HTMLProgressElement::valuePart):
+ (WebCore::HTMLProgressElement::didElementStateChange):
+ (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
+ * html/HTMLProgressElement.h:
+ * rendering/RenderProgress.cpp:
+ (WebCore::RenderProgress::~RenderProgress):
+ (WebCore::RenderProgress::updateFromElement):
+ (WebCore::RenderProgress::layoutParts):
+ (WebCore::RenderProgress::shouldHaveParts):
+ (WebCore::RenderProgress::valuePart):
+ * rendering/RenderProgress.h:
+ * rendering/style/RenderStyleConstants.h:
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Ariya Hidayat.
+
+ Enhance ShadowBlur to render inset box shadows; Part 1.
+ https://bugs.webkit.org/show_bug.cgi?id=51567
+
+ Add a new method to GraphicsContext to render a rect with a rounded hole,
+ for use by inset box-shadow code. Knowledge that we're rendering a rounded
+ hole will enable ShadowBlur to be used here in future.
+
+ * platform/graphics/GraphicsContext.cpp:
+ (WebCore::GraphicsContext::fillRectWithRoundedHole):
+ * platform/graphics/GraphicsContext.h:
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintBoxShadow):
+
+2011-01-23 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Eric Seidel.
+
+ REGRESSION: Inset shadow with too large border radius misses rounded corner.
+ https://bugs.webkit.org/show_bug.cgi?id=52800
+
+ The refactoring on r76083 broke the invariant between border
+ IntRect and its radii because RoundedIntRect::setRect() is called
+ after getRoundedInnerBorderWithBorderWidths(), which enforces the
+ invariant. Th rounded-rect clipping code verifies the invariant,
+ and discard the invalid radii, that results broken paintings.
+
+ This change moved setRect() before
+ getRoundedInnerBorderWithBorderWidths() not to modify the valid
+ RoundedIntRect value.
+
+ Test: fast/box-shadow/inset-with-extraordinary-radii-and-border.html
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintBoxShadow):
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Attempt to fix Windows build by adding ShadowBlur.cpp/h to the
+ vcproj.
+
+ * WebCore.vcproj/WebCore.vcproj:
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ -webkit-box-shadow causes awful scroll/resize/redraw performance
+ https://bugs.webkit.org/show_bug.cgi?id=22102
+
+ Use ShadowBlur for CG, whe rendering shadows on rects and
+ rounded rects outside of canvas.
+
+ CG shadows with a radius of more than 8px do not render
+ correctly. We preserve this incorrect rendering by compensating
+ for it when rending -webkit-box-shadow. Calls that should use
+ this deprecated radius behavior now use setLegacyShadow().
+
+ Test: fast/box-shadow/box-shadow-transformed.html
+
+ * html/canvas/CanvasRenderingContext2D.cpp: Use setLegacyShadow()
+ for canvas, to indicate that it should use the deprecated radius
+ behavior.
+ (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault): Ditto.
+ (WebCore::CanvasRenderingContext2D::setShadow): Ditto.
+ (WebCore::CanvasRenderingContext2D::applyShadow): Ditto.
+
+ * platform/graphics/GraphicsContext.cpp:
+ (WebCore::GraphicsContext::setLegacyShadow): Set the m_state.shadowsUseLegacyRadius bit.
+
+ * platform/graphics/GraphicsContext.h:
+ (WebCore::GraphicsContextState::GraphicsContextState): Add a
+ shadowsUseLegacyRadius bit to the state.
+
+ * platform/graphics/cg/GraphicsContextCG.cpp:
+ (WebCore::radiusToLegacyRadius): Map from the actual radius to one
+ that approximates CG behavior.
+ (WebCore::hasBlurredShadow): Helper that returns true if we have a shadow
+ with a non-zero blur radius.
+ (WebCore::GraphicsContext::fillRect): Use ShadowBlur if not canvas.
+ (WebCore::GraphicsContext::fillRoundedRect): Ditto.
+ (WebCore::GraphicsContext::setPlatformShadow): Comment.
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintBoxShadow): Call setLegacyShadow()
+ for -webkit-box-shadow.
+
+ * platform/graphics/ShadowBlur.cpp:
+ (WebCore::ShadowBlur::calculateLayerBoundingRect): Fix some pixel crack issues
+ by rounding up the blur radius.
+ (WebCore::ShadowBlur::drawRectShadow): Ditto
+ (WebCore::ShadowBlur::drawRectShadowWithTiling): Ditto.
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Try to fix Qt build (again).
+
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Try to fix Qt build.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::QtInstance):
+ (JSC::Bindings::QtInstance::removeCachedMethod):
+ (JSC::Bindings::QtInstance::markAggregate):
+ * bridge/qt/qt_instance.h:
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77006 and r77020 back in.
+
+ * ForwardingHeaders/runtime/WriteBarrier.h: Added.
+ * WebCore.exp.in:
+ * bindings/js/DOMWrapperWorld.h:
+ (WebCore::DOMWrapperWorld::globalData):
+ * bindings/js/JSAudioConstructor.cpp:
+ (WebCore::JSAudioConstructor::JSAudioConstructor):
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::markDOMNodesForDocument):
+ (WebCore::markDOMObjectWrapper):
+ (WebCore::markDOMNodeWrapper):
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::markChildren):
+ (WebCore::JSDOMGlobalObject::setInjectedScript):
+ (WebCore::JSDOMGlobalObject::injectedScript):
+ * bindings/js/JSDOMGlobalObject.h:
+ (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
+ (WebCore::getDOMConstructor):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::setLocation):
+ (WebCore::DialogHandler::dialogCreated):
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::JSDOMWindowShell):
+ (WebCore::JSDOMWindowShell::setWindow):
+ (WebCore::JSDOMWindowShell::markChildren):
+ (WebCore::JSDOMWindowShell::unwrappedObject):
+ * bindings/js/JSDOMWindowShell.h:
+ (WebCore::JSDOMWindowShell::window):
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/JSDeviceMotionEventCustom.cpp:
+ (WebCore::createAccelerationObject):
+ (WebCore::createRotationRateObject):
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ (WebCore::JSEventListener::markJSFunction):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ (WebCore::JSHTMLDocument::setAll):
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::JSImageConstructor):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSJavaScriptCallFrameCustom.cpp:
+ (WebCore::JSJavaScriptCallFrame::scopeChain):
+ (WebCore::JSJavaScriptCallFrame::scopeType):
+ * bindings/js/JSNodeFilterCondition.cpp:
+ (WebCore::JSNodeFilterCondition::markAggregate):
+ (WebCore::JSNodeFilterCondition::acceptNode):
+ * bindings/js/JSNodeFilterCondition.h:
+ * bindings/js/JSNodeFilterCustom.cpp:
+ * bindings/js/JSOptionConstructor.cpp:
+ (WebCore::JSOptionConstructor::JSOptionConstructor):
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ (WebCore::JSSQLResultSetRowList::item):
+ * bindings/js/ScriptCachedFrameData.cpp:
+ (WebCore::ScriptCachedFrameData::restore):
+ * bindings/js/ScriptObject.cpp:
+ (WebCore::ScriptGlobalObject::set):
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::putProperty):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+ (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+ * bridge/qt/qt_runtime.h:
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ * bridge/runtime_root.h:
+ * dom/Document.h:
+
+2011-01-30 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make ContextShadow code cross-platform
+ https://bugs.webkit.org/show_bug.cgi?id=51312
+
+ Add a new class, ShadowBlur, that contains most of the
+ code from ContextShadow, but is fully cross-platform.
+ It depends on one new method, GraphicsContext::clipBounds(),
+ which platforms will have to implement.
+
+ Add ShadowBlur to the Mac Xcode project, but don't use it
+ anywhere yet.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/GraphicsContext.cpp:
+ (WebCore::GraphicsContext::clipBounds):
+ * platform/graphics/GraphicsContext.h:
+ * platform/graphics/ShadowBlur.cpp: Added.
+ (WebCore::roundUpToMultipleOf32):
+ (WebCore::ScratchBuffer::ScratchBuffer):
+ (WebCore::ScratchBuffer::getScratchBuffer):
+ (WebCore::ScratchBuffer::scheduleScratchBufferPurge):
+ (WebCore::ScratchBuffer::timerFired):
+ (WebCore::ScratchBuffer::clearScratchBuffer):
+ (WebCore::ScratchBuffer::shared):
+ (WebCore::ShadowBlur::ShadowBlur):
+ (WebCore::ShadowBlur::blurLayerImage):
+ (WebCore::ShadowBlur::adjustBlurDistance):
+ (WebCore::ShadowBlur::calculateLayerBoundingRect):
+ (WebCore::ShadowBlur::beginShadowLayer):
+ (WebCore::ShadowBlur::endShadowLayer):
+ (WebCore::ShadowBlur::drawRectShadow):
+ (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
+ (WebCore::ShadowBlur::drawRectShadowWithTiling):
+ (WebCore::ShadowBlur::clipBounds):
+ * platform/graphics/ShadowBlur.h: Added.
+ (WebCore::ShadowBlur::setShadowsIgnoreTransforms):
+ (WebCore::ShadowBlur::shadowsIgnoreTransforms):
+ * platform/graphics/cg/GraphicsContextCG.cpp:
+ (WebCore::GraphicsContext::clipBounds):
+
+2011-01-29 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ CSS3 gradients with em-based stops fail to repaint when font size changes
+ https://bugs.webkit.org/show_bug.cgi?id=51845
+
+ Mark as uncacheable gradidients whose color stops depend on font size,
+ and don't attempt to put these into CSSImageGeneratorValue's image cache.
+ This means we return a new gradient each time, which is fairly cheap, and
+ fixes repaint issues under changing font size.
+
+ Test: fast/repaint/gradients-em-stops-repaint.html
+
+ * css/CSSGradientValue.cpp:
+ (WebCore::CSSGradientValue::image):
+ (WebCore::CSSGradientValue::isCacheable):
+ * css/CSSGradientValue.h:
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Undo try to fix the Qt build.
+
+ My guess didn't work.
+
+ * WebCore.pro:
+
+2011-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Qt build.
+
+ * WebCore.pro: Added platform/text/CharacterNames.h.
+
+2011-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Some more Heap cleanup.
+ https://bugs.webkit.org/show_bug.cgi?id=53357
+
+ Updated for JavaScriptCore changes.
+
+ * bindings/js/ScriptGCEvent.cpp:
+ (WebCore::ScriptGCEvent::getHeapSize):
+
+2011-01-29 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Fix XSSFilter crash when extracting the source for a token twice
+ https://bugs.webkit.org/show_bug.cgi?id=53368
+
+ Previously, it was unsafe to extract the source for the same token
+ twice because the HTMLSourceTracker would advance its internal
+ representation of the SegmentedString. This patch introduces a cache
+ to make calling HTMLSourceTracker::sourceForToken multiple times safe.
+
+ * html/parser/HTMLSourceTracker.cpp:
+ (WebCore::HTMLSourceTracker::end):
+ (WebCore::HTMLSourceTracker::sourceForToken):
+ * html/parser/HTMLSourceTracker.h:
+
+2011-01-29 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix fat build for both 32-bit and 64-bit under llvm-gcc 4.2
+ https://bugs.webkit.org/show_bug.cgi?id=53386
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::elasticDeltaForReboundDelta):
+ (WebCore::scrollWheelMultiplier):
+ (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
+ (WebCore::ScrollAnimatorMac::beginScrollGesture):
+ (WebCore::roundTowardZero):
+ (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
+
+2011-01-29 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Remove reference to ${CMAKE_SOURCE_DIR}/Source in CMake files
+ https://bugs.webkit.org/show_bug.cgi?id=53382
+
+ Our file system hierarchy ensures that CMAKE_SOURCE_DIR is defined to be /Source.
+ So, ${CMAKE_SOURCE_DIR}/Source evaluates to the non-existent directory /Source/Source.
+ Therefore, we should remove such references.
+
+ * CMakeLists.txt:
+
+2011-01-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Jon Honeycutt.
+
+ Fix 32-bit build on the Mac.
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::roundTowardZero):
+ (WebCore::roundToDevicePixelTowardZero):
+ Use floats instead of doubles to avoid double-to-float conversion
+ issues.
+
+2011-01-29 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Use clampToInteger() functions in a few places
+ https://bugs.webkit.org/show_bug.cgi?id=53363
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applyProperty): Use clampToInteger() for z-index.
+ (WebCore::CSSStyleSelector::createTransformOperations): Use clampToPositiveInteger().
+ * platform/graphics/transforms/PerspectiveTransformOperation.cpp: Ditto.
+ (WebCore::PerspectiveTransformOperation::blend): Ditto.
+
+2011-01-29 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Move CharacterNames.h into WTF directory
+ https://bugs.webkit.org/show_bug.cgi?id=49618
+
+ * ForwardingHeaders/wtf/unicode/CharacterNames.h: Added.
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * accessibility/AccessibilityObject.cpp:
+ * accessibility/AccessibilityRenderObject.cpp:
+ * bindings/cpp/WebDOMHTMLDocumentCustom.cpp:
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ * dom/Position.cpp:
+ * dom/SelectElement.cpp:
+ * editing/CompositeEditCommand.cpp:
+ * editing/Editor.cpp:
+ * editing/HTMLInterchange.cpp:
+ * editing/InsertTextCommand.cpp:
+ * editing/MarkupAccumulator.cpp:
+ * editing/TextIterator.cpp:
+ * editing/VisibleSelection.cpp:
+ * editing/htmlediting.cpp:
+ * editing/htmlediting.h:
+ * editing/markup.cpp:
+ * html/FTPDirectoryDocument.cpp:
+ * html/HTMLFormControlElement.cpp:
+ * html/parser/HTMLTreeBuilder.cpp:
+ * loader/appcache/ManifestParser.cpp:
+ * platform/chromium/PopupMenuChromium.cpp:
+ * platform/graphics/Font.h:
+ * platform/graphics/FontFastPath.cpp:
+ * platform/graphics/GlyphPageTreeNode.cpp:
+ * platform/graphics/StringTruncator.cpp:
+ * platform/graphics/mac/ComplexTextController.cpp:
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ * platform/graphics/wince/GraphicsContextWinCE.cpp:
+ * platform/mac/PasteboardMac.mm:
+ * platform/text/TextCodecICU.cpp:
+ * platform/text/mac/TextCodecMac.cpp:
+ * platform/text/transcoder/FontTranscoder.cpp:
+ * rendering/RenderBlockLineLayout.cpp:
+ * rendering/RenderFlexibleBox.cpp:
+ * rendering/RenderListMarker.cpp:
+ * rendering/RenderText.cpp:
+ * rendering/RenderTextControl.cpp:
+ * rendering/RenderTreeAsText.cpp:
+ * rendering/break_lines.cpp:
+ * rendering/mathml/RenderMathMLOperator.h:
+ * websockets/WebSocketHandshake.cpp:
+ * wml/WMLTableElement.cpp:
+
+2011-01-29 Dan Winship <danw@gnome.org>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Remove HAVE_LIBSOUP_2_29_90 conditionals; we depend on
+ libsoup 2.33.1 now.
+ https://bugs.webkit.org/show_bug.cgi?id=50675
+
+ * platform/network/soup/CookieJarSoup.cpp:
+ (WebCore::defaultCookieJar):
+ (WebCore::setCookies):
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::ResourceHandle::prepareForURL):
+ (WebCore::restartedCallback):
+ (WebCore::startHttp):
+ * platform/network/soup/ResourceRequestSoup.cpp:
+ (WebCore::ResourceRequest::updateSoupMessage):
+ (WebCore::ResourceRequest::toSoupMessage):
+ (WebCore::ResourceRequest::updateFromSoupMessage):
+
+2011-01-29 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSSFilter should replace URLs with about:blank instead of the empty string
+ https://bugs.webkit.org/show_bug.cgi?id=53370
+
+ Using the empty string will make the URL complete to the current
+ document's URL, which isn't really what we want. Instead, we want to
+ use about:blank, which is safe.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterObjectToken):
+ (WebCore::XSSFilter::filterEmbedToken):
+
+2011-01-29 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSSFilter should pass xssAuditor/script-tag-addslashes*
+ https://bugs.webkit.org/show_bug.cgi?id=53365
+
+ We need to canonicalize strings to avoid being tricked by addslashes.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::isNonCanonicalCharacter):
+ - This function is copied from the XSSAuditor (with some tweaks).
+ We'll eventually remove the XSSAuditor once we've got XSSFilter
+ working properly.
+ (WebCore::HTMLNames::canonicalize):
+ (WebCore::HTMLNames::decodeURL):
+ (WebCore::XSSFilter::isContainedInRequest):
+
+2011-01-29 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSSFilter should pass xssAuditor/script-tag-with-source-same-host.html
+ and xssAuditor/script-tag-post-*
+ https://bugs.webkit.org/show_bug.cgi?id=53364
+
+ We're supposed to allow loading same-origin resources even if they
+ appear as part of the request.
+
+ Also, we're supposed to look at the POST data too. :)
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::eraseAttributeIfInjected):
+ (WebCore::XSSFilter::isSameOriginResource):
+ - Copy/paste from XSSAuditor::isSameOriginResource. We'll
+ eventually remove the XSSAuditor version when XSSFilter is done.
+ * html/parser/XSSFilter.h:
+
+2011-01-29 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ XSSFilter should pass 16 of the xssAuditor/script-tag* tests
+ https://bugs.webkit.org/show_bug.cgi?id=53362
+
+ Turns out we need to replace the src attribute of script tags with
+ about:blank to avoid loading the main document URL as a script. Also,
+ move misplaced return statement that was triggering the console message
+ too often.
+
+ * html/parser/HTMLToken.h:
+ (WebCore::HTMLToken::appendToAttributeValue):
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterScriptToken):
+ (WebCore::XSSFilter::eraseAttributeIfInjected):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Downloads in WK2 on Windows should write resume data to bundle
+ https://bugs.webkit.org/show_bug.cgi?id=53282
+ <rdar://problem/8753077>
+
+ Reviewed by Alice Liu.
+
+ * WebCore.vcproj/WebCore.vcproj:
+ Added new files to project.
+
+ * platform/network/cf/DownloadBundle.h: Added.
+ * platform/network/win/DownloadBundleWin.cpp: Added.
+ (WebCore::DownloadBundle::magicNumber):
+ Moved from WebKit's WebDownload so that WebKit and WebKit2 can share
+ it.
+ (WebCore::DownloadBundle::fileExtension):
+ Ditto.
+ (WebCore::DownloadBundle::appendResumeData):
+ Ditto - but modified to return bool rather than HRESULT and to clean up
+ whitespace.
+ (WebCore::DownloadBundle::extractResumeData):
+ Ditto - modified to clean up whitespace.
+
+2011-01-29 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77050.
+ http://trac.webkit.org/changeset/77050
+ https://bugs.webkit.org/show_bug.cgi?id=53371
+
+ Caused a crash in Chromium's test_shell_tests (Requested by
+ rniwa on #webkit).
+
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
+ * html/parser/HTMLTreeBuilder.h:
+
+2011-01-28 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
+ https://bugs.webkit.org/show_bug.cgi?id=48719
+
+ It's unclear exactly what the Peacekeeper benchmark is testing,
+ because I haven't found a way to run it myself.
+
+ However, I constructed a benchmark which shows at least one possible slow point.
+ The HTML5 spec talks about creating a new document for every time we use
+ the fragment parsing algorithm. Document() it turns out, it a huge bloated
+ mess, and the constructor and destructor do a huge amount of work.
+ To avoid constructing (or destructing) documents for each innerHTML call,
+ this patch adds a shared dummy document used by all innerHTML calls.
+
+ This patch brings us from 7x slower than Safari 5 on tiny-innerHTML
+ to only 1.5x slower than Safari 5. I'm sure there is more work to do here.
+
+ Saving a shared Document like this is error prone. Currently
+ DummyDocumentFactory::releaseDocument() calls removeAllChildren()
+ in an attempt to clear the Document's state. However it's possible
+ that that call is not sufficient and we'll have future bugs here.
+
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::DummyDocumentFactory::createDummyDocument):
+ (WebCore::DummyDocumentFactory::releaseDocument):
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
+ (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
+ * html/parser/HTMLTreeBuilder.h:
+
+2011-01-28 Johnny Ding <jnd@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Gesture API: Don't use current gesture status to set "forceUserGesture" parameter when calling ScriptController::executeScript.
+ The "forceUserGesture" parameter should be only set when you are definitely sure that the running script is from a hyper-link.
+ https://bugs.webkit.org/show_bug.cgi?id=53244
+
+ Test: fast/events/popup-blocked-from-iframe-src.html
+
+ * bindings/ScriptControllerBase.cpp:
+ (WebCore::ScriptController::executeIfJavaScriptURL):
+
+2011-01-28 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add various clampToInt() methods to MathExtras.h
+ https://bugs.webkit.org/show_bug.cgi?id=52910
+
+ Use clampToInteger() from MathExtras.h
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseCounter):
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77006 and r77020.
+ http://trac.webkit.org/changeset/77006
+ http://trac.webkit.org/changeset/77020
+ https://bugs.webkit.org/show_bug.cgi?id=53360
+
+ "Broke Windows tests" (Requested by rniwa on #webkit).
+
+ * ForwardingHeaders/runtime/WriteBarrier.h: Removed.
+ * WebCore.exp.in:
+ * bindings/js/DOMWrapperWorld.h:
+ * bindings/js/JSAudioConstructor.cpp:
+ (WebCore::JSAudioConstructor::JSAudioConstructor):
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::markDOMNodesForDocument):
+ (WebCore::markDOMObjectWrapper):
+ (WebCore::markDOMNodeWrapper):
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::markChildren):
+ (WebCore::JSDOMGlobalObject::setInjectedScript):
+ (WebCore::JSDOMGlobalObject::injectedScript):
+ * bindings/js/JSDOMGlobalObject.h:
+ (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
+ (WebCore::getDOMConstructor):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::setLocation):
+ (WebCore::DialogHandler::dialogCreated):
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::JSDOMWindowShell):
+ (WebCore::JSDOMWindowShell::setWindow):
+ (WebCore::JSDOMWindowShell::markChildren):
+ (WebCore::JSDOMWindowShell::unwrappedObject):
+ * bindings/js/JSDOMWindowShell.h:
+ (WebCore::JSDOMWindowShell::window):
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/JSDeviceMotionEventCustom.cpp:
+ (WebCore::createAccelerationObject):
+ (WebCore::createRotationRateObject):
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ (WebCore::JSEventListener::markJSFunction):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ (WebCore::JSHTMLDocument::setAll):
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::JSImageConstructor):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSJavaScriptCallFrameCustom.cpp:
+ (WebCore::JSJavaScriptCallFrame::scopeChain):
+ (WebCore::JSJavaScriptCallFrame::scopeType):
+ * bindings/js/JSNodeFilterCondition.cpp:
+ (WebCore::JSNodeFilterCondition::markAggregate):
+ (WebCore::JSNodeFilterCondition::acceptNode):
+ * bindings/js/JSNodeFilterCondition.h:
+ * bindings/js/JSNodeFilterCustom.cpp:
+ * bindings/js/JSOptionConstructor.cpp:
+ (WebCore::JSOptionConstructor::JSOptionConstructor):
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ (WebCore::JSSQLResultSetRowList::item):
+ * bindings/js/ScriptCachedFrameData.cpp:
+ (WebCore::ScriptCachedFrameData::restore):
+ * bindings/js/ScriptObject.cpp:
+ (WebCore::ScriptGlobalObject::set):
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::putProperty):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+ (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+ * bridge/qt/qt_runtime.h:
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ * bridge/runtime_root.h:
+ * dom/Document.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ XSSFilter should log to the console when it blocks something
+ https://bugs.webkit.org/show_bug.cgi?id=53354
+
+ This patch refactors a bunch of methods in XSSFilter to return a bool
+ indicating whether they blocked anything. Using this bool, we decide
+ whether to log to the console. We're using the same log message as the
+ XSSAuditor, but it seems likely we can improve this message in the
+ future (especially by piping in the correct line number, which is now
+ accessible via the parser).
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::isNameOfInlineEventHandler):
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::filterTokenInitial):
+ (WebCore::XSSFilter::filterTokenAfterScriptStartTag):
+ (WebCore::XSSFilter::filterScriptToken):
+ (WebCore::XSSFilter::filterObjectToken):
+ (WebCore::XSSFilter::filterEmbedToken):
+ (WebCore::XSSFilter::filterAppletToken):
+ (WebCore::XSSFilter::filterMetaToken):
+ (WebCore::XSSFilter::filterBaseToken):
+ (WebCore::XSSFilter::eraseInlineEventHandlersIfInjected):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Wire up settings->xssAuditorEnabled to XSSFilter
+ https://bugs.webkit.org/show_bug.cgi?id=53345
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::XSSFilter):
+ (WebCore::XSSFilter::filterToken):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter about <meta> and <base> tags
+ https://bugs.webkit.org/show_bug.cgi?id=53339
+
+ I'm not 100% sure we need to block <meta http-equiv>, but it seems
+ prudent given how powerful that attribute is. We definitely need to
+ block injection of <base href> because that can redirect script tags
+ that use relative URLs.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::filterMetaToken):
+ (WebCore::XSSFilter::filterBaseToken):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter about <applet>
+ https://bugs.webkit.org/show_bug.cgi?id=53338
+
+ HTML5 is pretty light on information about how the <applet> tag works.
+ According to this site:
+
+ http://download.oracle.com/javase/1.4.2/docs/guide/misc/applet.html
+
+ The "code" and "object" attributes are the essential attributes for
+ determining which piece of Java to run. We might need to expand to the
+ codebase and archive attributes at some point, but hopefully code and
+ object will be sufficient.
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::filterAppletToken):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach the XSSFilter about object and embed tags
+ https://bugs.webkit.org/show_bug.cgi?id=53336
+
+ For <object> and <embed>, we filter out attribute values that either
+ indicate which piece of media to load or which plugin to load. In a
+ perfect world, we'd only need to filter out the URLs of the media, but
+ some plug-ins (like Flash) have lots of fun places you can hide the
+ URL (e.g., the "movie" <param>).
+
+ * html/parser/XSSFilter.cpp:
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::filterScriptToken):
+ (WebCore::XSSFilter::filterObjectToken):
+ (WebCore::XSSFilter::filterEmbedToken):
+ (WebCore::XSSFilter::eraseAttributeIfInjected):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Oliver Hunt <oliver@apple.com>
+
+ Fix Qt build.
+
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+ (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
+ (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
+ (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+ * bridge/qt/qt_runtime.h:
+
+2011-01-28 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ CSS styles are shared based on uninitialized property values
+ https://bugs.webkit.org/show_bug.cgi?id=53285
+
+ Null test.
+
+ * dom/NamedNodeMap.cpp:
+ (WebCore::NamedNodeMap::mappedMapsEquivalent):
+
+2011-01-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Update WebCore to the new marking apis, correct bindings
+ codegen.
+
+ * ForwardingHeaders/runtime/WriteBarrier.h: Added.
+ * WebCore.exp.in:
+ * bindings/js/DOMWrapperWorld.h:
+ (WebCore::DOMWrapperWorld::globalData):
+ * bindings/js/JSAudioConstructor.cpp:
+ (WebCore::JSAudioConstructor::JSAudioConstructor):
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::markDOMNodesForDocument):
+ (WebCore::markDOMObjectWrapper):
+ (WebCore::markDOMNodeWrapper):
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::JSDOMGlobalObject::markChildren):
+ (WebCore::JSDOMGlobalObject::setInjectedScript):
+ (WebCore::JSDOMGlobalObject::injectedScript):
+ * bindings/js/JSDOMGlobalObject.h:
+ (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
+ (WebCore::getDOMConstructor):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::setLocation):
+ (WebCore::DialogHandler::dialogCreated):
+ * bindings/js/JSDOMWindowShell.cpp:
+ (WebCore::JSDOMWindowShell::JSDOMWindowShell):
+ (WebCore::JSDOMWindowShell::setWindow):
+ (WebCore::JSDOMWindowShell::markChildren):
+ (WebCore::JSDOMWindowShell::unwrappedObject):
+ * bindings/js/JSDOMWindowShell.h:
+ (WebCore::JSDOMWindowShell::window):
+ (WebCore::JSDOMWindowShell::setWindow):
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ (WebCore::JSEventListener::markJSFunction):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+ * bindings/js/JSHTMLDocumentCustom.cpp:
+ (WebCore::JSHTMLDocument::setAll):
+ * bindings/js/JSImageConstructor.cpp:
+ (WebCore::JSImageConstructor::JSImageConstructor):
+ * bindings/js/JSImageDataCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSJavaScriptCallFrameCustom.cpp:
+ (WebCore::JSJavaScriptCallFrame::scopeChain):
+ (WebCore::JSJavaScriptCallFrame::scopeType):
+ * bindings/js/JSNodeFilterCondition.cpp:
+ (WebCore::JSNodeFilterCondition::markAggregate):
+ (WebCore::JSNodeFilterCondition::acceptNode):
+ * bindings/js/JSNodeFilterCondition.h:
+ * bindings/js/JSNodeFilterCustom.cpp:
+ * bindings/js/JSOptionConstructor.cpp:
+ (WebCore::JSOptionConstructor::JSOptionConstructor):
+ * bindings/js/JSSQLResultSetRowListCustom.cpp:
+ (WebCore::JSSQLResultSetRowList::item):
+ * bindings/js/ScriptCachedFrameData.cpp:
+ (WebCore::ScriptCachedFrameData::restore):
+ * bindings/js/ScriptObject.cpp:
+ (WebCore::ScriptGlobalObject::set):
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneDeserializer::putProperty):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * dom/Document.h:
+
+2011-01-28 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Keyboard scrolling doesn’t work in WebKit2
+ <rdar://problem/8909672>
+
+ * platform/mac/ScrollAnimatorMac.mm:
+ (-[ScrollAnimationHelperDelegate convertSizeToBacking:]):
+ (-[ScrollAnimationHelperDelegate convertSizeFromBacking:]):
+ Add additional necessary delegate methods.
+
+2011-01-29 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Re-land this patch with the missing null check that caused crashes in layout tests.
+
+ Changing cursor style has no effect until the mouse moves
+ https://bugs.webkit.org/show_bug.cgi?id=14344
+ rdar://problem/7563712
+
+ No tests added because we don't have infrastructure for testing actual cursor
+ changes (as opposed to cursor style computation) at this time. We might add it later.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon): Added.
+ * page/EventHandler.h: Ditto.
+
+ * rendering/RenderObject.cpp:
+ (WebCore::areNonIdenticalCursorListsEqual): Added.
+ (WebCore::areCursorsEqual): Added.
+ (WebCore::RenderObject::styleDidChange): Call dispatchFakeMouseMoveEventSoon if
+ cursor styles changed.
+
+2011-01-28 Justin Schuh <jschuh@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ We should hold RefPtrs to SVG font faces
+ https://bugs.webkit.org/show_bug.cgi?id=53270
+
+ Test: svg/custom/use-multiple-on-nested-disallowed-font.html
+
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData):
+ * css/CSSFontFaceSource.h:
+ * svg/SVGFontFaceElement.cpp:
+ (WebCore::SVGFontFaceElement::associatedFontElement):
+ * svg/SVGFontFaceElement.h:
+
+2011-01-28 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ uniformN*v should generate INVALID_VALUE of the array size is not a multiple of N
+ https://bugs.webkit.org/show_bug.cgi?id=53306
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::validateUniformMatrixParameters):
+
+2011-01-28 Tom Sepez <tsepez@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ NULL pointer crash in TextIterator::handleTextBox()
+ https://bugs.webkit.org/show_bug.cgi?id=53267
+
+ Test: fast/css/rtl-nth-child-first-letter-crash.html
+
+ * editing/TextIterator.cpp:
+ (WebCore::TextIterator::handleTextBox):
+
+2011-01-28 Adrienne Walker <enne@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Remove a spurious diagnostic CRASH check.
+ https://bugs.webkit.org/show_bug.cgi?id=52379
+
+ * platform/graphics/chromium/LayerTilerChromium.cpp:
+ (WebCore::LayerTilerChromium::invalidateRect):
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/4761512> <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ Changed <select> pop-up menus on Mac OS X Snow Leopard and later to have their items aligned in the
+ direction corresponding to the writing direction of the <select> element, with the checkmarks
+ on the "start" side, and use the <option>'s writing direction rather than "natural". Made the
+ pop-up button match the menu by adding a Chrome boolean function, selectItemAlignmentFollowsMenuWritingDirection(),
+ which returns true for this pop-up behavior.
+
+ * loader/EmptyClients.h:
+ (WebCore::EmptyChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * manual-tests/pop-up-alignment-and-direction.html: Added.
+ * page/Chrome.cpp:
+ (WebCore::Chrome::selectItemAlignmentFollowsMenuWritingDirection): Added. Calls through to the
+ client.
+ * page/Chrome.h:
+ * page/ChromeClient.h:
+ * platform/PopupMenuStyle.h:
+ (WebCore::PopupMenuStyle::PopupMenuStyle): Added hasTextDirectionOverride parameter and member
+ variable initialization.
+ (WebCore::PopupMenuStyle::hasTextDirectionOverride): Added this accessor.
+ * platform/mac/PopupMenuMac.mm:
+ (WebCore::PopupMenuMac::populate): Set the pop-up's layout direction and items' text alignment
+ to match the menu's writing direction. Set items' writing direction and direction override
+ according to their styles.
+ * rendering/RenderMenuList.cpp:
+ (WebCore::RenderMenuList::RenderMenuList): Removed unncesaary initialization of a smart pointer.
+ (WebCore::RenderMenuList::adjustInnerStyle): If the alignment of items in the menu follows the
+ menu's writing direction, use that alignment for the button as well. Also in this mode, use the
+ item's writing direction and override setting.
+ (WebCore::RenderMenuList::setTextFromOption): Store the option element's style.
+ (WebCore::RenderMenuList::itemStyle): Pass the text direction override value.
+ (WebCore::RenderMenuList::menuStyle): Ditto. Also use the button's direction, not the inner text's.
+ * rendering/RenderMenuList.h:
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::menuStyle): Pass the text direction override value.
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Teach XSSFilter how to filter <script> elements
+ https://bugs.webkit.org/show_bug.cgi?id=53279
+
+ This patch adds the ability for the XSSFilter to block injected
+ <script> elements. Handling script elements is slightly subtle because
+ these elements act very differently depending on whether they have a
+ src attribute.
+
+ In the "src case", which check whether the src attribute was present in
+ the request. In the "non-src case", we check whether the start tag and
+ the body of the script element was included in the request. Checking
+ for the whole start tag means we miss out on some attribute splitting
+ attacks inside of script tags, but that doesn't seem like that big a
+ deal.
+
+ This patch also introduces some amount of state into the XSSFilter
+ because inline script elements span multiple tokens. There's a lot of
+ tuning and optimization left in these cases, some of which I've noted
+ with FIXMEs.
+
+ To test this patch, I played around with some of the existing
+ XSSAuditor tests. Hopefully I'll be able to run the test suite more
+ systematically in the future.
+
+ * html/parser/HTMLToken.h:
+ (WebCore::HTMLToken::eraseCharacters):
+ (WebCore::HTMLToken::eraseValueOfAttribute):
+ * html/parser/XSSFilter.cpp:
+ (WebCore::HTMLNames::hasName):
+ (WebCore::HTMLNames::findAttributeWithName):
+ (WebCore::HTMLNames::isNameOfScriptCarryingAttribute):
+ (WebCore::XSSFilter::XSSFilter):
+ (WebCore::XSSFilter::filterToken):
+ (WebCore::XSSFilter::filterTokenAfterScriptStartTag):
+ (WebCore::XSSFilter::filterScriptToken):
+ (WebCore::XSSFilter::snippetForRange):
+ (WebCore::XSSFilter::snippetForAttribute):
+ * html/parser/XSSFilter.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Daniel Bates.
+
+ Sketch out new XSS filter design (disabled by default)
+ https://bugs.webkit.org/show_bug.cgi?id=53205
+
+ This patch adds a basic sketch of the new XSS filter design. Rather
+ than watching scripts as they execute, in this design, we watch tokens
+ emitted by the tokenizer. We then map the tokens directly back into
+ input characters, which lets us skip all the complicated logic related
+ to HTML entities and double-decoding of JavaScript URLs.
+
+ This patch contains only the bare essentially machinery. I'll add more
+ in future patches and eventually remove the previous code once this
+ code is up and running correctly.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::HTMLDocumentParser):
+ (WebCore::HTMLDocumentParser::pumpTokenizer):
+ (WebCore::HTMLDocumentParser::sourceForToken):
+ * html/parser/HTMLDocumentParser.h:
+ * html/parser/XSSFilter.cpp: Added.
+ * html/parser/XSSFilter.h: Added.
+
+2011-01-28 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Reapplying this patch with the change that the second ASSERT in
+ RootObject::removeRuntimeObject was changed to use
+ .uncheckedGet() instead of the failing .get(). The object in question
+ could be in the process of being GC'ed. The get() call will not return
+ such an object while the uncheckedGet() call will return the (unsafe)
+ object. This is the behavior we want.
+
+ Precautionary change.
+ Changed RootObject to use WeakGCMap instead of HashSet.
+ Found will looking for another issue, but can't produce a test case
+ that is problematic. THerefore there aren't any new tests.
+
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ (JSC::Bindings::RootObject::addRuntimeObject):
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+ * bridge/runtime_root.h:
+
+2011-01-28 Adam Roben <aroben@apple.com>
+
+ Notify CACFLayerTreeHost when the context is flushed
+
+ LegacyCACFLayerTreeHost was keeping this a secret, which meant that WebCore's animation
+ timers were never starting.
+
+ Fixes <http://webkit.org/b/53302> [Windows 7 Release Tests] changesets 76853, 76856, and
+ 76858 broke ~36 animations, compositing, and transitions tests
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
+ (WebCore::LegacyCACFLayerTreeHost::contextDidChange): Call up to the base class after we
+ start our render timer.
+
+2011-01-28 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Remove dead code that tried to map from CSS values to parser values
+ https://bugs.webkit.org/show_bug.cgi?id=53318
+
+ * css/CSSFunctionValue.cpp:
+ * css/CSSFunctionValue.h:
+ * css/CSSPrimitiveValue.cpp:
+ * css/CSSPrimitiveValue.h:
+ * css/CSSValue.h:
+ * css/CSSValueList.cpp:
+ * css/CSSValueList.h:
+
+2011-01-28 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Some drag and drop tests fail since r76824
+ https://bugs.webkit.org/show_bug.cgi?id=53304
+
+ There were '||' instead of '&&' in the checks for valid
+ clipboard content.
+
+ * platform/win/ClipboardWin.cpp:
+ (WebCore::ClipboardWin::getData):
+ (WebCore::ClipboardWin::types):
+ (WebCore::ClipboardWin::files):
+
+2011-01-28 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] AudioProcessingEvent.h and JSJavaScriptAudioNode.h: No such file or directory
+ https://bugs.webkit.org/show_bug.cgi?id=52889
+
+ Build fix for WebAudio. Include WebAudio source files on the source
+ list when WebAudio is enabled.
+
+ * GNUmakefile.am: Include missing source files.
+
+2011-01-28 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add basic rubber banding support
+ <rdar://problem/8219429>
+ https://bugs.webkit.org/show_bug.cgi?id=53277
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleGestureEvent):
+ Pass gesture events to the FrameView.
+
+ * platform/ScrollAnimator.cpp:
+ (WebCore::ScrollAnimator::handleGestureEvent):
+ * platform/ScrollAnimator.h:
+ Add stubbed out implementation.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::ScrollView):
+ (WebCore::ScrollView::overhangAmount):
+ (WebCore::ScrollView::wheelEvent):
+ * platform/ScrollView.h:
+ * platform/ScrollableArea.cpp:
+ (WebCore::ScrollableArea::ScrollableArea):
+ (WebCore::ScrollableArea::handleGestureEvent):
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::constrainsScrollingToContentEdge):
+ (WebCore::ScrollableArea::setConstrainsScrollingToContentEdge):
+ Move constrains scrolling bit to ScrollableArea from ScrollView.
+
+ (WebCore::ScrollableArea::contentsSize):
+ (WebCore::ScrollableArea::overhangAmount):
+ Add additional virtual functions for information needed by the animator.
+
+ * platform/mac/ScrollAnimatorMac.h:
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
+ (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
+ (WebCore::elasticDeltaForTimeDelta):
+ (WebCore::elasticDeltaForReboundDelta):
+ (WebCore::reboundDeltaForElasticDelta):
+ (WebCore::scrollWheelMultiplier):
+ (WebCore::ScrollAnimatorMac::handleWheelEvent):
+ (WebCore::ScrollAnimatorMac::handleGestureEvent):
+ (WebCore::ScrollAnimatorMac::pinnedInDirection):
+ (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
+ (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
+ (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
+ (WebCore::ScrollAnimatorMac::beginScrollGesture):
+ (WebCore::ScrollAnimatorMac::endScrollGesture):
+ (WebCore::ScrollAnimatorMac::snapRubberBand):
+ (WebCore::roundTowardZero):
+ (WebCore::roundToDevicePixelTowardZero):
+ (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
+ Implement basic rubber banding.
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Changing unicode-bidi doesn’t force layout
+ https://bugs.webkit.org/show_bug.cgi?id=53311
+
+ Test: fast/dynamic/unicode-bidi.html
+
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::diff): Return a layout difference if unicode-bidi values differ.
+
+2011-01-27 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Change HTMLInputElement-derived parts of media element shadow DOM to use shadowPseudoId.
+ https://bugs.webkit.org/show_bug.cgi?id=53122
+
+ This is the first step in converting HTMLMediaElement to the new shadow DOM.
+
+ Should not regress any existing tests. No observable change in behavior.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId): Removed now-unnecessary hard-coded pseudo-element selectors.
+ (WebCore::nameToPseudoTypeMap): Ditto.
+ (WebCore::CSSSelector::extractPseudoType): Ditto.
+ * css/CSSSelector.h: Ditto.
+ * css/mediaControls.css: Added proper initial values, now that elements use the proper selector pipeline.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlInputElement::MediaControlInputElement): Removed the switch statement,
+ which is now replaced with virtual shadowPseudoId on each corresponding class.
+ (WebCore::MediaControlInputElement::styleForElement): Changed to use element pipeline.
+ (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Changed to set
+ display type in constructor.
+ (WebCore::MediaControlMuteButtonElement::create): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): Added
+ to disambiguate from the MediaControlMuteButtonElement.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::create): Added.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): Added.
+ (WebCore::MediaControlSeekForwardButtonElement::create): Added.
+ (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): Added.
+ (WebCore::MediaControlSeekBackButtonElement::create): Added.
+ (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Added.
+ (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlTimelineElement::shadowPseudoId): Added.
+ (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Added.
+ (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Added.
+ * rendering/MediaControlElements.h:
+ (WebCore::MediaControlSeekForwardButtonElement::isForwardButton): Added.
+ (WebCore::MediaControlSeekBackButtonElement::isForwardButton): Added.
+ * rendering/RenderMedia.cpp:
+ (WebCore::RenderMedia::createMuteButton): Changed to use new constructor.
+ (WebCore::RenderMedia::createSeekBackButton): Ditto.
+ (WebCore::RenderMedia::createSeekForwardButton): Ditto.
+ (WebCore::RenderMedia::createVolumeSliderMuteButton): Ditto.
+ * rendering/style/RenderStyleConstants.h: Removed constants that are no longer used.
+
+2011-01-27 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Split MediaControls out of RenderMedia.
+ https://bugs.webkit.org/show_bug.cgi?id=53252
+
+ Near-mechanical moving of stuff, no change in behavior, thus no new tests.
+
+ * Android.mk: Added MediaControls to build system.
+ * CMakeLists.txt: Ditto.
+ * GNUmakefile.am: Ditto.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::defaultEventHandler): Changed to forward events to MediaControls.
+ * html/shadow/MediaControls.cpp: Copied all controls-related methods from
+ Source/WebCore/rendering/RenderMedia.cpp, pulled them into their own class called MediaControls.
+ * html/shadow/MediaControls.h: Ditto from Source/WebCore/rendering/RenderMedia.h.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlTimelineElement::defaultEventHandler): Changed to use MediaControls.
+ * rendering/RenderMedia.cpp:
+ (WebCore::RenderMedia::RenderMedia): Moved relevant constructor initializers out to MediaControls.
+ (WebCore::RenderMedia::destroy): Changed to use MediaControls.
+ (WebCore::RenderMedia::styleDidChange): Ditto.
+ (WebCore::RenderMedia::layout): Ditto.
+ (WebCore::RenderMedia::updateFromElement): Ditto.
+ * rendering/RenderMedia.h: Updated defs accordingly and removed player() accessor, which
+ is only used by sub-class RenderVideo.
+ (WebCore::RenderMedia::controls): Added.
+ * rendering/RenderVideo.cpp:
+ (WebCore::RenderVideo::~RenderVideo): Changed to access MediaPlayer* directly from mediaElement().
+ (WebCore::RenderVideo::calculateIntrinsicSize): Ditto.
+ (WebCore::RenderVideo::paintReplaced): Ditto.
+ (WebCore::RenderVideo::updatePlayer): Ditto.
+ (WebCore::RenderVideo::supportsAcceleratedRendering): Ditto.
+ (WebCore::RenderVideo::acceleratedRenderingStateChanged): Ditto.
+
+2011-01-28 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: allow remote debugging with front-end
+ served from the cloud.
+ https://bugs.webkit.org/show_bug.cgi?id=53303
+
+ * inspector/front-end/inspector.js:
+
+2011-01-28 Aparna Nandyal <aparna.nand@wipro.com>
+
+ Reviewed by Andreas Kling.
+
+ Setting value of m_PressedPos to make scrolling smooth
+
+ Page scroll popup menu "Scroll here" option not working when cliking above scroll slider/handler.
+ https://bugs.webkit.org/show_bug.cgi?id=51349
+
+ The value of m_PressedPos was getting set before moveThumb() call
+ in all other scenarios except when "Scroll Here" option is used.
+ Hence scrolling with this option was not as expected even in cases
+ where scrolling was happening. The thumb would move in unexpected
+ direction. m_PressedPos is now set to pressed position so delta is
+ calculated.
+ Unable to write a test case as the test needs to click on "Scroll
+ Here" option of context sensitive menu and QTest is unable to do it.
+ Besides no new functionality introduced.
+
+ * platform/qt/ScrollbarQt.cpp:
+ (WebCore::Scrollbar::contextMenu):
+
+2011-01-28 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Extensions API] add JSON schema for extensions API
+ https://bugs.webkit.org/show_bug.cgi?id=53236
+
+ * inspector/front-end/ExtensionAPISchema.json: Added.
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Remove _LENGTH enumerants
+ https://bugs.webkit.org/show_bug.cgi?id=53259
+
+ * html/canvas/WebGLRenderingContext.cpp: Remove queries for *LENGTH.
+ (WebCore::WebGLRenderingContext::getProgramParameter):
+ (WebCore::WebGLRenderingContext::getShaderParameter):
+ * html/canvas/WebGLRenderingContext.idl: Remove *LENGTH.
+
+2011-01-28 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: syntax highlight inline JS and CSS in HTML resources
+ https://bugs.webkit.org/show_bug.cgi?id=30831
+
+ * inspector/front-end/SourceHTMLTokenizer.js:
+ (WebInspector.SourceHTMLTokenizer):
+ (WebInspector.SourceHTMLTokenizer.prototype.set line):
+ (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
+ * inspector/front-end/SourceHTMLTokenizer.re2js:
+
+2011-01-28 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [STYLES] Up/Down-suggestion breaks an existing keyword
+ https://bugs.webkit.org/show_bug.cgi?id=53295
+
+ Select the current word suffix before switching to the next suggestion.
+
+ * inspector/front-end/StylesSidebarPane.js:
+ ():
+
+2011-01-28 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Fix dist compilation for the release
+ https://bugs.webkit.org/show_bug.cgi?id=53290
+
+ * GNUmakefile.am: Added inspector files to the extra dist.
+
+2011-01-28 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ Const-correct HTMLSelectElement and WebSelectElement
+ https://bugs.webkit.org/show_bug.cgi?id=53293
+
+ * html/HTMLSelectElement.cpp:
+ (WebCore::HTMLSelectElement::value): const.
+ * html/HTMLSelectElement.h:
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76893.
+ http://trac.webkit.org/changeset/76893
+ https://bugs.webkit.org/show_bug.cgi?id=53287
+
+ It made some tests crash on GTK and Qt debug bots (Requested
+ by Ossy on #webkit).
+
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ (JSC::Bindings::RootObject::addRuntimeObject):
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+ * bridge/runtime_root.h:
+
+2011-01-27 Greg Coletta <greg.coletta@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Get rid of prefix header dependency for WebKit2 build system
+ https://bugs.webkit.org/show_bug.cgi?id=50174
+
+ Guard EmptyProtocalDefinitions.h to make sure it's not included twice.
+
+ * platform/mac/EmptyProtocolDefinitions.h:
+
+2011-01-27 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ Recalc table sections if needed before calculating the first line
+ box baseline.
+ https://bugs.webkit.org/show_bug.cgi?id=53265
+
+ When we try to calculate the baseline position of a table cell,
+ we recurse through all the child sibling boxes (when children are
+ non inline) and add their first linebox baseline values. If one of
+ the children is a table with pending section recalc, we will access
+ wrong table section values. We recalc table sections if it is needed.
+
+ Test: fast/table/recalc-section-first-body-crash-main.html
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::firstLineBoxBaseline):
+
+2011-01-27 Adrienne Walker <enne@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Add CRASH calls to further debug tiled compositor memcpy crash.
+ https://bugs.webkit.org/show_bug.cgi?id=52379
+
+ Test: LayoutTests/compositing (to verify these weren't triggered)
+
+ * platform/graphics/chromium/LayerTilerChromium.cpp:
+ (WebCore::LayerTilerChromium::invalidateRect):
+ (WebCore::LayerTilerChromium::update):
+
+2011-01-27 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [STYLES] Cancelled suggestion of a property name results in a visual artifact
+ https://bugs.webkit.org/show_bug.cgi?id=53242
+
+ * inspector/front-end/StylesSidebarPane.js:
+ (WebInspector.StylePropertyTreeElement.prototype):
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76891.
+ http://trac.webkit.org/changeset/76891
+ https://bugs.webkit.org/show_bug.cgi?id=53280
+
+ Makes every layout test crash (Requested by othermaciej on
+ #webkit).
+
+ * page/EventHandler.cpp:
+ * page/EventHandler.h:
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::styleDidChange):
+
+2011-01-27 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed, rolling out r76839.
+ http://trac.webkit.org/changeset/76839
+ https://bugs.webkit.org/show_bug.cgi?id=49744
+
+ broke pixel tests
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::localCaretRect):
+
+2011-01-27 Emil A Eklund <eae@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ contentEditable formatBlock crashes on divs with contenteditable="false"
+ https://bugs.webkit.org/show_bug.cgi?id=53263
+
+ Check if editableRootForPosition returns null for position.
+
+ Test: editing/execCommand/format-block-contenteditable-false.html
+
+ * editing/FormatBlockCommand.cpp:
+ (WebCore::FormatBlockCommand::formatRange):
+
+2011-01-27 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Remove RenderMedia members that aren't used.
+ https://bugs.webkit.org/show_bug.cgi?id=53245
+
+ Refactoring, no change in behavior, so no new tests.
+
+ * rendering/RenderMedia.h: Removed unused member variables.
+
+2011-01-27 Michael Saboff <msaboff@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
+ https://bugs.webkit.org/show_bug.cgi?id=53271
+
+ Precautionary change.
+ Changed RootObject to use WeakGCMap instead of HashSet.
+ Found will looking for another issue, but can't produce a test case
+ that is problematic. THerefore there aren't any new tests.
+
+ * bridge/runtime_root.cpp:
+ (JSC::Bindings::RootObject::invalidate):
+ (JSC::Bindings::RootObject::addRuntimeObject):
+ (JSC::Bindings::RootObject::removeRuntimeObject):
+ * bridge/runtime_root.h:
+
+2011-01-27 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Rename Typed Array slice() to subset()
+ https://bugs.webkit.org/show_bug.cgi?id=53273
+
+ * bindings/js/JSArrayBufferViewHelper.h:
+ (WebCore::constructArrayBufferView):
+ * bindings/v8/custom/V8ArrayBufferViewCustom.h:
+ (WebCore::constructWebGLArray):
+ * html/canvas/Float32Array.cpp:
+ (WebCore::Float32Array::subset):
+ * html/canvas/Float32Array.h:
+ * html/canvas/Float32Array.idl:
+ * html/canvas/Int16Array.cpp:
+ (WebCore::Int16Array::subset):
+ * html/canvas/Int16Array.h:
+ * html/canvas/Int16Array.idl:
+ * html/canvas/Int32Array.cpp:
+ (WebCore::Int32Array::subset):
+ * html/canvas/Int32Array.h:
+ * html/canvas/Int32Array.idl:
+ * html/canvas/Int8Array.cpp:
+ (WebCore::Int8Array::subset):
+ * html/canvas/Int8Array.h:
+ * html/canvas/Int8Array.idl:
+ * html/canvas/TypedArrayBase.h:
+ (WebCore::TypedArrayBase::subsetImpl):
+ * html/canvas/Uint16Array.cpp:
+ (WebCore::Uint16Array::subset):
+ * html/canvas/Uint16Array.h:
+ * html/canvas/Uint16Array.idl:
+ * html/canvas/Uint32Array.cpp:
+ (WebCore::Uint32Array::subset):
+ * html/canvas/Uint32Array.h:
+ * html/canvas/Uint32Array.idl:
+ * html/canvas/Uint8Array.cpp:
+ (WebCore::Uint8Array::subset):
+ * html/canvas/Uint8Array.h:
+ * html/canvas/Uint8Array.idl:
+
+2011-01-27 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Changing cursor style has no effect until the mouse moves
+ https://bugs.webkit.org/show_bug.cgi?id=14344
+ rdar://problem/7563712
+
+ No tests added because we don't have infrastructure for testing actual cursor
+ changes (as opposed to cursor style computation) at this time. We might add it later.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon): Added.
+ * page/EventHandler.h: Ditto.
+
+ * rendering/RenderObject.cpp:
+ (WebCore::areNonIdenticalCursorListsEqual): Added.
+ (WebCore::areCursorsEqual): Added.
+ (WebCore::RenderObject::styleDidChange): Call dispatchFakeMouseMoveEventSoon if
+ cursor styles changed.
+
+2011-01-27 Leo Yang <leo.yang@torchmobile.com.cn>
+
+ Reviewed by Dirk Schulze.
+
+ SVG Use Cycle is not detected
+ https://bugs.webkit.org/show_bug.cgi?id=52544
+
+ We should check if SVGUseElement::buildInstanceTree finds problem
+ for every child node. If it finds problem for any children we must
+ return immediately because otherwise the foundProblem variable may
+ be rewritten to false.
+
+ Test: svg/custom/recursive-use2.svg
+
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::buildInstanceTree):
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ texSubImage2D's format/type needs to match the internalformat/type from the previous texImage2D call
+ https://bugs.webkit.org/show_bug.cgi?id=53054
+
+ Test: fast/canvas/webgl/tex-sub-image-2d-bad-args.html
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::texSubImage2DBase): Check format/type match.
+
+2011-01-27 Yi Shen <yi.4.shen@nokia.com>, Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add fullscreen media control button for html video
+ https://bugs.webkit.org/show_bug.cgi?id=51543
+
+ Implement media control fullscreen button for QtWebKit html5 video.
+
+ * css/mediaControlsQt.css:
+ (video::-webkit-media-controls-fullscreen-button):
+ * platform/qt/RenderThemeQt.cpp:
+ (WebCore::RenderThemeQt::paintMediaFullscreenButton):
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Remove FrameLoader::url() and update callers to use
+ Document::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ Refactor, no new tests.
+
+ * WebCore.exp.in:
+ * dom/Document.cpp:
+ (WebCore::Document::processHttpEquiv):
+ (WebCore::Document::removePendingSheet):
+ * history/CachedFrame.cpp:
+ (WebCore::CachedFrameBase::CachedFrameBase):
+ * history/PageCache.cpp:
+ (WebCore::logCanCacheFrameDecision):
+ (WebCore::PageCache::canCachePageContainingThisFrame):
+ * html/HTMLFrameElementBase.cpp:
+ (WebCore::HTMLFrameElementBase::isURLAllowed):
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL):
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::inspectedURL):
+ * inspector/InspectorResourceAgent.cpp:
+ (WebCore::buildObjectForFrame):
+ * loader/DocumentWriter.cpp:
+ (WebCore::DocumentWriter::replaceDocument):
+ (WebCore::DocumentWriter::deprecatedFrameEncoding):
+ * loader/FrameLoader.cpp:
+ * loader/FrameLoader.h:
+ * loader/HistoryController.cpp:
+ (WebCore::HistoryController::updateForStandardLoad):
+ (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
+ (WebCore::HistoryController::updateForSameDocumentNavigation):
+ * loader/NavigationScheduler.cpp:
+ (WebCore::ScheduledHistoryNavigation::fire):
+ (WebCore::NavigationScheduler::scheduleLocationChange):
+ (WebCore::NavigationScheduler::scheduleRefresh):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::updateControlTints):
+ * page/Location.cpp:
+ (WebCore::Location::url):
+ (WebCore::Location::setProtocol):
+ (WebCore::Location::setHost):
+ (WebCore::Location::setHostname):
+ (WebCore::Location::setPort):
+ (WebCore::Location::setPathname):
+ (WebCore::Location::setSearch):
+ (WebCore::Location::setHash):
+ (WebCore::Location::reload):
+ * page/Page.cpp:
+ (WebCore::Page::goToItem):
+
+2011-01-27 Stephen White <senorblanco@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fix performance regression in ImageQualityController::objectDestroyed().
+ https://bugs.webkit.org/show_bug.cgi?id=52645
+
+ In r72282, I inadvertently introduced this regression by using a
+ linear search through the hash map on object destruction. This was
+ because the hash key consisted of both object pointer and layer id,
+ but on object destruction we only know the object pointer, requiring
+ a search to find all the layers.
+ By replacing the hash map with two nested hash maps, where the outer key
+ is the object and the inner key is the layer, we can find all the
+ relevant data for an object in one hash lookup.
+
+ * rendering/RenderBoxModelObject.cpp:
+ Replace the (object,layer)->size HashMap with object->layer and
+ layer->size HashMaps.
+ (WebCore::ImageQualityController::isEmpty):
+ Implement isEmpty() for the outer HashMap.
+ (WebCore::ImageQualityController::removeLayer):
+ When a layer is removed, remove it from the inner hash map.
+ (WebCore::ImageQualityController::set):
+ Implement set(): if the inner map exists, set the layer->size tuple
+ directly. If not, create a new inner map, set the tuple, and insert
+ it in the outer map.
+ (WebCore::ImageQualityController::objectDestroyed):
+ Look up the object in the outer map only.
+ (WebCore::ImageQualityController::highQualityRepaintTimerFired):
+ Cosmetic changes for the renamed now-outer hash map.
+ (WebCore::ImageQualityController::shouldPaintAtLowQuality):
+ Do both outer and inner hash map lookups. Call set() to add/update
+ entries to the hash maps. keyDestroyed() is now removeLayer().
+ (WebCore::imageQualityController):
+ Make the ImageQualityController a file-static global, so it can be
+ created and destroyed on the fly.
+ (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
+ If there is no ImageQualityController, don't call objectDestroyed().
+ If it's empty, delete it.
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::paintIntoRect):
+ Also pass the Image* as the (void*) layer, since 0 is not a valid
+ HashMap key.
+
+2011-01-27 Adrienne Walker <enne@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Tiled compositor crashes if compositing turned off mid-paint
+ https://bugs.webkit.org/show_bug.cgi?id=53198
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawLayers):
+ * platform/graphics/chromium/LayerTilerChromium.cpp:
+ (WebCore::LayerTilerChromium::update):
+ (WebCore::LayerTilerChromium::draw):
+
+2011-01-27 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ A corrupted counter tree is created when renderers are added to the
+ tree bypassing RenderObject::addChild
+ https://bugs.webkit.org/show_bug.cgi?id=51270
+
+ No new tests. This patch reimplements the fix for bugs 43812 and
+ 51637 and hence all tests are already there as part of the original
+ fixes for those bugs.
+
+ * rendering/RenderCounter.cpp:
+ (WebCore::findPlaceForCounter):
+ Removed old workaround as this patch hopefully fixes the real
+ problem.
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::addChild):
+ Removed call to counter updater as it was moved to a lower level.
+ (WebCore::RenderObject::destroy):
+ Moved attached counter nodes destruction to after the node is
+ removed from the tree.
+ * rendering/RenderObjectChildList.cpp:
+ (WebCore::RenderObjectChildList::removeChildNode):
+ (WebCore::RenderObjectChildList::appendChildNode):
+ (WebCore::RenderObjectChildList::insertChildNode):
+ Added notifications to the Counter system such that the
+ CounterForest reflects the changes to the RendererTree.
+ * rendering/RenderWidget.cpp:
+ (WebCore::RenderWidget::destroy):
+ Applied the same changes as for RenderObject::destroy()
+ since RenderObject::destroy() is not called from here.
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Add WKCACFViewLayerTreeHost
+
+ This is a class that derives from CACFLayerTreeHost and uses a WKCACFView to render.
+
+ Fixes <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost should use
+ WKCACFView for rendering
+
+ * WebCore.vcproj/WebCore.vcproj: Added WKCACFViewLayerTreeHost.{cpp,h}.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Make the test window have a
+ non-zero size. WKCACFView will always say it can't render if you pass it a 0-sized window,
+ so we need a non-empty window to perform a valid test.
+ (WebCore::CACFLayerTreeHost::create): First try to create a WKCACFViewLayerTreeHost, then
+ fall back to a LegacyCACFLayerTreeHost.
+ (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Moved code to react to the
+ context flush from here...
+ (WebCore::CACFLayerTreeHost::contextDidChange): ...to here. Derived classes are required to
+ call this function whenever changes are flushed to the context.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.h: Added contextDidChange.
+
+ * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
+ (WebCore::LegacyCACFLayerTreeHost::createRenderer):
+ (WebCore::LegacyCACFLayerTreeHost::resize):
+ Changed to use flushContext instead of flushing the context manually so that we will always
+ notify the base class when the context gets flushed.
+
+ (WebCore::LegacyCACFLayerTreeHost::flushContext): Added a call to contextDidChange so the
+ base class will know what happened. Moved code to schedule a render from here...
+ (WebCore::LegacyCACFLayerTreeHost::contextDidChange): ...to here.
+
+ * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: Added contextDidChange.
+
+ * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Added.
+ (WebCore::WKCACFViewLayerTreeHost::create): If WebKitQuartzCoreAdditions, which provides
+ WKCACFView, isn't present, bail. Otherwise allocate and return a new host.
+ (WebCore::WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost): Initialize members.
+ (WebCore::WKCACFViewLayerTreeHost::updateViewIfNeeded): Update the view if we previously
+ marked that we needed to do so, and flush the context if our layer's bounds have changed.
+ (WebCore::WKCACFViewLayerTreeHost::contextDidChangeCallback): Call through to
+ contextDidChange.
+ (WebCore::WKCACFViewLayerTreeHost::contextDidChange): Tell the WKCACFView to start rendering
+ (if we didn't already), then call up to the base class.
+ (WebCore::WKCACFViewLayerTreeHost::initializeContext): Set the context's user data, the
+ view's layer, and hook up our "context did change" callback.
+ (WebCore::WKCACFViewLayerTreeHost::resize): Mark that the view needs to be updated the next
+ time we paint.
+ (WebCore::WKCACFViewLayerTreeHost::createRenderer): Update our view and return whether it is
+ able to render or not.
+ (WebCore::WKCACFViewLayerTreeHost::destroyRenderer): Clear out all the info we passed down
+ to the view.
+ (WebCore::WKCACFViewLayerTreeHost::lastCommitTime): Call through to the view.
+ (WebCore::WKCACFViewLayerTreeHost::flushContext): Ditto.
+ (WebCore::WKCACFViewLayerTreeHost::paint): Update the view so it will draw at the right
+ size, then call up to the base class.
+ (WebCore::WKCACFViewLayerTreeHost::render): Invalidate the view using the passed-in dirty
+ rects, then ask it to draw.
+
+ * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h: Copied from Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h.
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Move LegacyCACFLayerTreeHost into its own files
+
+ More preparation for <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost
+ should use WKCACFView for rendering
+
+ Reviewed by Simon Fraser.
+
+ * WebCore.vcproj/WebCore.vcproj: Added LegacyCACFLayerTreeHost.{cpp,h}.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Moved code from here to new files.
+
+ * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp: Added.
+ * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: Added.
+
+2011-01-27 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r76824.
+
+ * platform/wince/DragDataWinCE.cpp:
+ (WebCore::DragData::dragDataMap):
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Split CACFLayerTreeHost into base and derived classes
+
+ The derived class, LegacyCACFLayerTreeHost, contains all the D3D-related code. A later patch
+ will add a new derived class that replaces the D3D code with a different rendering API.
+
+ For now, LegacyCACFLayerTreeHost lives in CACFLayerTreeHost.cpp. This keeps the diff a
+ little smaller. A later patch will move it to its own source files.
+
+ Preparation for <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost
+ should use WKCACFView for rendering
+
+ Reviewed by Simon Fraser.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Clear the window before
+ destroying the host, as that is now the API contract that clients must fulfill.
+ (WebCore::LegacyCACFLayerTreeHost::create): Added. Simple creator.
+ (WebCore::CACFLayerTreeHost::create): Now instantiates a LegacyCACFLayerTreeHost. Calls the
+ new initialize function to perform initialization that has to happen after the vtable has
+ been set up.
+
+ (WebCore::LegacyCACFLayerTreeHost::LegacyCACFLayerTreeHost):
+ (WebCore::CACFLayerTreeHost::CACFLayerTreeHost):
+ (WebCore::LegacyCACFLayerTreeHost::initializeContext):
+ (WebCore::CACFLayerTreeHost::initialize):
+ Moved some initialization code from the CACFLayerTreeHost constructor into these new
+ functions.
+
+ (WebCore::LegacyCACFLayerTreeHost::~LegacyCACFLayerTreeHost): Added. Moved code here from
+ ~CACFLayerTreeHost.
+ (WebCore::CACFLayerTreeHost::~CACFLayerTreeHost): Rather than clearing the window at this
+ point (which would be too late, since we won't be able to call into the derived class's
+ virtual functions), just assert that it has already been cleared (or was never set in the
+ first place).
+ (WebCore::LegacyCACFLayerTreeHost::createRenderer): Renamed from
+ CACFLayerTreeHost::createRenderer, and changed to use getters instead of accessing
+ CACFLayerTreeHost's data members directly.
+
+ (WebCore::LegacyCACFLayerTreeHost::destroyRenderer):
+ (WebCore::CACFLayerTreeHost::destroyRenderer):
+ Moved some code to the new LegacyCACFLayerTreeHost function.
+
+ (WebCore::LegacyCACFLayerTreeHost::resize):
+ (WebCore::LegacyCACFLayerTreeHost::renderTimerFired):
+ Moved these functions to LegacyCACFLayerTreeHost.
+
+ (WebCore::LegacyCACFLayerTreeHost::paint):
+ (WebCore::CACFLayerTreeHost::paint):
+ Moved some code to the new LegacyCACFLayerTreeHost function.
+
+ (WebCore::LegacyCACFLayerTreeHost::render):
+ (WebCore::LegacyCACFLayerTreeHost::renderSoon):
+ Moved these functions to LegacyCACFLayerTreeHost.
+
+ (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Moved code to flush the context
+ from here...
+ (WebCore::LegacyCACFLayerTreeHost::flushContext): ...to this new function.
+
+ (WebCore::LegacyCACFLayerTreeHost::lastCommitTime): Moved code to get the last commit time
+ to this new function...
+ (WebCore::CACFLayerTreeHost::notifyAnimationsStarted): ...from here.
+
+ (WebCore::LegacyCACFLayerTreeHost::initD3DGeometry):
+ (WebCore::LegacyCACFLayerTreeHost::resetDevice):
+ Moved these functions to LegacyCACFLayerTreeHost.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.h: Made some functions virtual, removed some
+ members that have moved to LegacyCACFLayerTreeHost, grouped remaining members more
+ logically, and added some getters used by LegacyCACFLayerTreeHost.
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Move CACFLayerTreeHostClient to its own header file
+
+ Rubber-stamped by Steve Falkenburg.
+
+ * WebCore.vcproj/WebCore.vcproj: Added CACFLayerTreeHostClient.h. Also let VS have its way
+ with the file.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Added new #include.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.h: Removed CACFLayerTreeHostClient.
+
+ * platform/graphics/ca/win/CACFLayerTreeHostClient.h: Added.
+
+ * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp: Moved some #includes here
+ from the header file.
+
+ * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: Replaced broader #includes
+ with more specific ones, plus a forward-declaration.
+
+2011-01-27 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Simplify small caps logic in complex text on linux
+ https://bugs.webkit.org/show_bug.cgi?id=53207
+
+ Test: fast/text/atsui-multiple-renderers.html
+ fast/text/atsui-small-caps-punctuation-size.html
+
+ * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+ (WebCore::ComplexTextController::nextScriptRun): Remove redundant logic. Case changes in a text run imply FontData changes.
+ (WebCore::ComplexTextController::setupFontForScriptRun): Update comment to reflect above.
+
+2011-01-27 Adam Barth <abarth@webkit.org>
+
+ In which I attempt to fix the EFL build.
+
+ * CMakeLists.txt:
+
+2011-01-25 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Adding border and padding to the calculation of the local caret rect for RenderBoxes.
+ Corrected for mistake in r76625
+
+ Undo moves caret to invalid position
+ https://bugs.webkit.org/show_bug.cgi?id=49744
+
+ Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
+ editing/selection/caret-painting-after-paste-undo.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::localCaretRect):
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76825.
+ http://trac.webkit.org/changeset/76825
+ https://bugs.webkit.org/show_bug.cgi?id=53256
+
+ "caused crashes on GTK and chromium" (Requested by rniwa on
+ #webkit).
+
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::ImageQualityController::keyDestroyed):
+ (WebCore::ImageQualityController::objectDestroyed):
+ (WebCore::ImageQualityController::highQualityRepaintTimerFired):
+ (WebCore::ImageQualityController::shouldPaintAtLowQuality):
+ (WebCore::imageQualityController):
+ (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
+
+2011-01-27 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Generalize the mechanism view-source uses to remember the source for an HTMLToken
+ https://bugs.webkit.org/show_bug.cgi?id=53200
+
+ Currently view-source tracks the source associated with each HTMLToken.
+ We want to re-use this mechanism for the new XSS auditor. This patch
+ moves this code into its own class so it can be shared between the
+ view-source parser and the general HTML parser. This patch also add
+ support for tracking the source of tokens that span document.write
+ boundaries.
+
+ No functional change. This code change is somewhat tested by our
+ view-source layout tests.
+
+ * Android.mk:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ - Fun with updating build files.
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::pumpTokenizer):
+ - Teach HTMLDocumentParser to track the source for HTMLTokens.
+ Currently, this information isn't used, but it will be shortly.
+ I ran the HTML parser benchmark and this change didn't have a
+ measurable effect.
+ * html/parser/HTMLDocumentParser.h:
+ - Composite in the HTMLSourceTracker.
+ * html/parser/HTMLSourceTracker.cpp: Added.
+ (WebCore::HTMLSourceTracker::HTMLSourceTracker):
+ (WebCore::HTMLSourceTracker::start):
+ (WebCore::HTMLSourceTracker::end):
+ - This function should eventualy be folded into HTMLTokenizer.
+ (WebCore::HTMLSourceTracker::sourceForToken):
+ * html/parser/HTMLSourceTracker.h: Added.
+ * html/parser/HTMLToken.h:
+ - Now HTMLTokens always have a start index of zero. To do the job
+ of the old start index, this patch introduces the notion of a
+ baseOffset. Unlike the start index (which was used as the base
+ offset for all the other indicies), the baseOffset can change
+ over the lifetime of the token. We need the flexibility to
+ change the offset for tokens that span document.write boundaries.
+ Values are now normalized to zero-offset when stored.
+ (WebCore::HTMLToken::clear):
+ (WebCore::HTMLToken::setBaseOffset):
+ (WebCore::HTMLToken::end):
+ (WebCore::HTMLToken::beginAttributeName):
+ (WebCore::HTMLToken::endAttributeName):
+ (WebCore::HTMLToken::beginAttributeValue):
+ (WebCore::HTMLToken::endAttributeValue):
+ * html/parser/HTMLViewSourceParser.cpp:
+ - Updates the HTMLViewSourceParser to use the new
+ HTMLSourceTracker.
+ (WebCore::HTMLViewSourceParser::pumpTokenizer):
+ (WebCore::HTMLViewSourceParser::append):
+ (WebCore::HTMLViewSourceParser::sourceForToken):
+ - This function now just calls through to HTMLSourceTracker.
+ * html/parser/HTMLViewSourceParser.h:
+ * platform/text/SegmentedString.cpp:
+ (WebCore::SegmentedString::currentColumn):
+ (WebCore::SegmentedString::setCurrentPosition):
+ * platform/text/SegmentedString.h:
+ (WebCore::SegmentedString::numberOfCharactersConsumed):
+ - We need to handle the general case now. The "slow" version
+ doesn't turn out to be any slower in practice anyway.
+
+2011-01-27 Sam Weinig <sam@webkit.org>
+
+ Fix all the builds.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::paintOverhangAreas): Add parameters.
+
+2011-01-27 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dave Hyatt.
+
+ Add ability to do an unconstrained scroll on a ScrollView
+ https://bugs.webkit.org/show_bug.cgi?id=53249
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::ScrollView):
+ Initialize m_constrainsScrollingToContentEdge to true.
+
+ (WebCore::ScrollView::setScrollOffset):
+ Only constrain the offset if the m_constrainsScrollingToContentEdge is set.
+
+ (WebCore::ScrollView::updateScrollbars):
+ Simplify expression converting an IntSize to an IntPoint.
+
+ (WebCore::ScrollView::paint):
+ Paint the overhang if there is any.
+
+ (WebCore::ScrollView::calculateOverhangAreasForPainting):
+ Calculate the overhang in viewport coordinates for painting.
+
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::constrainsScrollingToContentEdge):
+ (WebCore::ScrollView::setConstrainsScrollingToContentEdge):
+ Add bit to control whether the scroll position should be constrained
+ to the content edge when set.
+
+ * platform/ScrollbarThemeComposite.cpp:
+ (WebCore::usedTotalSize):
+ (WebCore::ScrollbarThemeComposite::thumbPosition):
+ (WebCore::ScrollbarThemeComposite::thumbLength):
+ * platform/mac/ScrollbarThemeMac.mm:
+ (WebCore::ScrollbarThemeMac::paint):
+ Improve calculations of thumb size and position to take overhang into account.
+
+2011-01-27 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVG animation of Paths with segments of different coordinate modes on begin and end
+ https://bugs.webkit.org/show_bug.cgi?id=52984
+
+ At the moment we just support SVG path animations, if the number of segments on the given start path
+ is the same as the number of segments on the given end path. But a segment on a given position must be identical
+ on both paths as well. Not only the segment type, also the coordinate mode of the segments must be identical.
+ If MoveToRel is on the second position on the start path a MoveToRel must be on the second position
+ of the end path too. According to the SVG spec, at least the coordinate mode can differ. Means, if we have MoveToRel
+ in the start path, we can use MoveToAbs on the same position in the end path.
+
+ This patch fixes the blending code to follow the spec here. It was necessary to track the current position of
+ both paths, transform coordinates to the same coordinate mode and transform the resulting animation coordinate back
+ to the coordinate mode of either the start or the end path. Which mode is taken depends on the progress of the
+ animation.
+
+ Tests: svg/animations/animate-path-animation-Cc-Ss.html
+ svg/animations/animate-path-animation-Ll-Vv-Hh.html
+ svg/animations/animate-path-animation-Qq-Tt.html
+ svg/animations/animate-path-animation-cC-sS-inverse.html
+ svg/animations/animate-path-animation-lL-vV-hH-inverse.html
+ svg/animations/animate-path-animation-qQ-tT-inverse.html
+
+ * svg/SVGPathBlender.cpp:
+ (WebCore::blendFloatPoint):
+ (WebCore::blendAnimatedFloat):
+ (WebCore::SVGPathBlender::blendAnimatedDimensionalFloat):
+ (WebCore::SVGPathBlender::blendAnimatedFloatPoint):
+ (WebCore::SVGPathBlender::blendMoveToSegment):
+ (WebCore::SVGPathBlender::blendLineToSegment):
+ (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
+ (WebCore::SVGPathBlender::blendLineToVerticalSegment):
+ (WebCore::SVGPathBlender::blendCurveToCubicSegment):
+ (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
+ (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
+ (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
+ (WebCore::SVGPathBlender::blendArcToSegment):
+ (WebCore::coordinateModeOfCommand):
+ (WebCore::isSegmentEqual):
+ (WebCore::SVGPathBlender::blendAnimatedPath):
+ (WebCore::SVGPathBlender::cleanup):
+ * svg/SVGPathBlender.h:
+
+2011-01-27 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Clear the parent on a css keyframe's m_style when removing it from the stylesheet.
+ https://bugs.webkit.org/show_bug.cgi?id=52320
+
+ Test: fast/css/css-keyframe-style-crash.html
+
+ * css/CSSRuleList.cpp:
+ (WebCore::CSSRuleList::deleteRule):
+ * css/WebKitCSSKeyframesRule.cpp:
+ (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):
+
+2011-01-27 Rob Buis <rwlbuis@gmail.com>
+
+ Reviewed by Kent Tamura.
+
+ Color changes to option elements in a select multiple aren't drawn immediately
+ https://bugs.webkit.org/show_bug.cgi?id=49790
+
+ Redirect style changes on <option> element to the owner <select> element.
+
+ Test: fast/repaint/select-option-background-color.html
+
+ * html/HTMLOptionElement.cpp:
+ (WebCore::HTMLOptionElement::setRenderStyle):
+
+2011-01-19 Stephen White <senorblanco@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fix performance regression in ImageQualityController::objectDestroyed().
+ https://bugs.webkit.org/show_bug.cgi?id=52645
+
+ In r72282, I inadvertently introduced this regression by using a
+ linear search through the hash map on object destruction. This was
+ because the hash key consisted of both object pointer and layer id,
+ but on object destruction we only know the object pointer, requiring
+ a search to find all the layers.
+ By replacing the hash map with two nested hash maps, where the outer key
+ is the object and the inner key is the layer, we can find all the
+ relevant data for an object in one hash lookup.
+
+ * rendering/RenderBoxModelObject.cpp:
+ Replace the (object,layer)->size HashMap with object->layer and
+ layer->size HashMaps.
+ (WebCore::ImageQualityController::isEmpty):
+ Implement isEmpty() for the outer HashMap.
+ (WebCore::ImageQualityController::removeLayer):
+ When a layer is removed, remove it from the inner hash map.
+ (WebCore::ImageQualityController::set):
+ Implement set(): if the inner map exists, set the layer->size tuple
+ directly. If not, create a new inner map, set the tuple, and insert
+ it in the outer map.
+ (WebCore::ImageQualityController::objectDestroyed):
+ Look up the object in the outer map only.
+ (WebCore::ImageQualityController::highQualityRepaintTimerFired):
+ Cosmetic changes for the renamed now-outer hash map.
+ (WebCore::ImageQualityController::shouldPaintAtLowQuality):
+ Do both outer and inner hash map lookups. Call set() to add/update
+ entries to the hash maps. keyDestroyed() is now removeLayer().
+ (WebCore::imageQualityController):
+ Make the ImageQualityController a file-static global, so it can be
+ created and destroyed on the fly.
+ (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
+ If there is no ImageQualityController, don't call objectDestroyed().
+ If it's empty, delete it.
+
+
+2011-01-26 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Darin Adler and Adam Roben.
+
+ WebKit2: add support for drag and drop on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+ <rdar://problem/8514409>
+
+ On Windows the access to the content being dragged is
+ provided via the IDataObject interface that is made available
+ to the window that registers itself as drop target.
+ Since this interface cannot be accessed from the WebProcess,
+ in every call to one of the methods of the IDropTarget interface
+ we serialize the content of the drag clipboard and send it over to
+ the WebProcess.
+ The bulk of this patch consists in the refactoring needed in DragData
+ and ClipboardWin classes to extract the data from the serialized object.
+
+ * platform/DragData.cpp:
+ * platform/DragData.h:
+ * platform/win/ClipboardUtilitiesWin.cpp:
+ (WebCore::getWebLocData):
+ (WebCore::getURL):
+ (WebCore::getPlainText):
+ (WebCore::getTextHTML):
+ (WebCore::getCFHTML):
+ (WebCore::fragmentFromFilenames):
+ (WebCore::containsFilenames):
+ (WebCore::fragmentFromHTML):
+ (WebCore::containsHTML):
+ (WebCore::getClipboardData):
+ * platform/win/ClipboardUtilitiesWin.h:
+ * platform/win/ClipboardWin.cpp:
+ (WebCore::Clipboard::create):
+ (WebCore::ClipboardWin::ClipboardWin):
+ (WebCore::ClipboardWin::getData):
+ (WebCore::ClipboardWin::types):
+ (WebCore::ClipboardWin::files):
+ (WebCore::ClipboardWin::hasData):
+ * platform/win/ClipboardWin.h:
+ (WebCore::ClipboardWin::create):
+ * platform/win/DragDataWin.cpp:
+ (WebCore::DragData::DragData):
+ (WebCore::DragData::containsURL):
+ (WebCore::DragData::dragDataMap):
+ (WebCore::DragData::asURL):
+ (WebCore::DragData::containsFiles):
+ (WebCore::DragData::asFilenames):
+ (WebCore::DragData::containsPlainText):
+ (WebCore::DragData::asPlainText):
+ (WebCore::DragData::canSmartReplace):
+ (WebCore::DragData::containsCompatibleContent):
+ (WebCore::DragData::asFragment):
+
+2011-01-27 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Space characters in source document interfere with reported caret offset
+ https://bugs.webkit.org/show_bug.cgi?id=53033
+
+ Calculate caret offset from rendered text instead of from node contents.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (objectAndOffsetUnignored): Calculate the caret offset based only
+ on positions and ranges, instead of using the computed offset in
+ the container node.
+
+2011-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53197
+ <rdar://problem/8895682> Make WebKit2 printing asynchronous
+
+ * WebCore.exp.in: Export more PrintContext methods that we didn't use on Mac before.
+
+ * page/PrintContext.cpp: (WebCore::PrintContext::spoolRect): Changed to make the same
+ transformation as spoolPages does for consistency.
+
+2011-01-27 David Grogan <dgrogan@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ initial support for close() in indexeddb backend
+ https://bugs.webkit.org/show_bug.cgi?id=53150
+
+ Test: storage/indexeddb/transaction-after-close.html
+
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::IDBDatabase):
+ (WebCore::IDBDatabase::transaction):
+ (WebCore::IDBDatabase::close):
+ * storage/IDBDatabase.h:
+ * storage/IDBDatabase.idl:
+ * storage/IDBDatabaseBackendImpl.cpp:
+ (WebCore::IDBDatabaseBackendImpl::transaction):
+ (WebCore::IDBDatabaseBackendImpl::close):
+
+2011-01-27 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVG animation doesn't support calcMode discrete for number and color values.
+ https://bugs.webkit.org/show_bug.cgi?id=53189
+
+ Add support for calcMode discrete on number and color animation.
+
+ Tests: svg/animations/animate-color-calcMode-discrete.html
+ svg/animations/animate-number-calcMode-discrete.html
+
+ * svg/SVGAnimateElement.cpp:
+ (WebCore::SVGAnimateElement::calculateAnimatedValue):
+
+2011-01-26 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ shaderSource needs to preserve original source
+ https://bugs.webkit.org/show_bug.cgi?id=52833
+
+ Test: fast/canvas/webgl/gl-getshadersource.html
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::getShaderParameter): Intercept SHADER_SOURCE_LENGTH.
+ (WebCore::WebGLRenderingContext::getShaderSource): Intercept the call.
+ (WebCore::WebGLRenderingContext::shaderSource): Cache the source.
+ * html/canvas/WebGLShader.cpp: Cache shader source.
+ (WebCore::WebGLShader::WebGLShader):
+ * html/canvas/WebGLShader.h: Ditto.
+ (WebCore::WebGLShader::getSource):
+ (WebCore::WebGLShader::setSource):
+
+2011-01-27 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r76743.
+
+ * platform/graphics/wince/FontWinCE.cpp:
+ (WebCore::TextRunComponent::TextRunComponent):
+
+2011-01-27 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Closure and Global variable details automatically collapsing on each step through JavaScript code.
+ https://bugs.webkit.org/show_bug.cgi?id=53234
+
+ * inspector/front-end/ScopeChainSidebarPane.js:
+ (WebInspector.ScopeChainSidebarPane):
+ (WebInspector.ScopeChainSidebarPane.prototype.update):
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76789.
+ http://trac.webkit.org/changeset/76789
+ https://bugs.webkit.org/show_bug.cgi?id=53238
+
+ Broke GTK layout tests (Requested by podivilov on #webkit).
+
+ * inspector/front-end/ScopeChainSidebarPane.js:
+ (WebInspector.ScopeChainSidebarPane):
+ (WebInspector.ScopeChainSidebarPane.prototype.update):
+
+2011-01-27 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: store all settings related to the agents on the frontend side
+ https://bugs.webkit.org/show_bug.cgi?id=53174
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/ScriptDebugServer.cpp:
+ * bindings/js/ScriptDebugServer.h:
+ * bindings/js/ScriptProfiler.cpp:
+ * bindings/js/ScriptProfiler.h:
+ * bindings/v8/ScriptDebugServer.cpp:
+ * bindings/v8/ScriptDebugServer.h:
+ * bindings/v8/ScriptProfiler.cpp:
+ * bindings/v8/ScriptProfiler.h:
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp: profiler and debugger enablement state is now stored
+ on the front-end side and will be pushed to the backend when the frontend is loaded.
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::restoreDebugger):
+ (WebCore::InspectorAgent::restoreProfiler):
+ (WebCore::InspectorAgent::enableProfiler):
+ (WebCore::InspectorAgent::disableProfiler):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::disableDebugger):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorConsoleAgent.cpp: XHR failures will be logged to the console only
+ if the front-end was opened during current browser session and XHR logging is turned on
+ there.
+ (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
+ (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
+ * inspector/InspectorDebuggerAgent.cpp:
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
+ (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
+ (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
+ * inspector/InspectorSettings.cpp: Removed.
+ * inspector/InspectorSettings.h: Removed.
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ * inspector/InspectorState.h:
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessagesCleared):
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
+ (WebInspector.ConsoleView.prototype._handleContextMenuEvent.itemAction):
+ (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel.prototype._toggleProfiling):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._toggleDebugging):
+ * inspector/front-end/Settings.js:
+ (WebInspector.Settings):
+ * inspector/front-end/inspector.js:
+
+2011-01-27 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Closure and Global variable details automatically collapsing on each step through JavaScript code.
+ https://bugs.webkit.org/show_bug.cgi?id=53234
+
+ * inspector/front-end/ScopeChainSidebarPane.js:
+ (WebInspector.ScopeChainSidebarPane):
+ (WebInspector.ScopeChainSidebarPane.prototype.update):
+
+2011-01-27 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Elements panel] Tooltip for relative links incorrectly identifies current URL
+ https://bugs.webkit.org/show_bug.cgi?id=53171
+
+ * inspector/front-end/inspector.js:
+ (WebInspector.completeURL): Taught to understand partial href's that start with "?" (contain GET parameters only)
+
+2011-01-27 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ [V8] Crash in WebCore::addMessageToConsole
+ https://bugs.webkit.org/show_bug.cgi?id=53227
+
+ * bindings/v8/V8Proxy.cpp: check that the Frame where the error
+ occured still has a page before getting a console object from it.
+ (WebCore::V8Proxy::reportUnsafeAccessTo):
+
+2011-01-27 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Remove IDBCallbacks::onSuccess() used for null values.
+ https://bugs.webkit.org/show_bug.cgi?id=53178
+
+ Remove the IDBCallbacks::onSuccess() function that was used for
+ null values, and replace such calls with calls to
+ IDBCallBacks::onSuccess(SerializedScriptValue::nullValue())
+ instead.
+
+ No new functionality, so no new tests.
+
+ * storage/IDBCallbacks.h:
+ * storage/IDBCursorBackendImpl.cpp:
+ (WebCore::IDBCursorBackendImpl::updateInternal):
+ (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
+ * storage/IDBIndexBackendImpl.cpp:
+ (WebCore::IDBIndexBackendImpl::openCursorInternal):
+ * storage/IDBObjectStoreBackendImpl.cpp:
+ (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
+ (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
+ * storage/IDBRequest.cpp:
+ * storage/IDBRequest.h:
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76773.
+ http://trac.webkit.org/changeset/76773
+ https://bugs.webkit.org/show_bug.cgi?id=53230
+
+ breaks multiple GTK media tests (Requested by philn-tp on
+ #webkit).
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::mimeTypeCache):
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76770.
+ http://trac.webkit.org/changeset/76770
+ https://bugs.webkit.org/show_bug.cgi?id=53229
+
+ Some inspector tests fail (Requested by yurys on #webkit).
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
+ * bindings/js/ScriptDebugServer.h:
+ * bindings/js/ScriptProfiler.cpp:
+ (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
+ * bindings/js/ScriptProfiler.h:
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
+ * bindings/v8/ScriptDebugServer.h:
+ * bindings/v8/ScriptProfiler.cpp:
+ (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
+ * bindings/v8/ScriptProfiler.h:
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::restoreDebugger):
+ (WebCore::InspectorAgent::restoreProfiler):
+ (WebCore::InspectorAgent::ensureSettingsLoaded):
+ (WebCore::InspectorAgent::enableProfiler):
+ (WebCore::InspectorAgent::disableProfiler):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::disableDebugger):
+ * inspector/InspectorAgent.h:
+ (WebCore::InspectorAgent::settings):
+ * inspector/InspectorConsoleAgent.cpp:
+ (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
+ (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::isDebuggerAlwaysEnabled):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
+ (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
+ (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
+ * inspector/InspectorSettings.cpp: Added.
+ (WebCore::InspectorSettings::InspectorSettings):
+ (WebCore::InspectorSettings::getBoolean):
+ (WebCore::InspectorSettings::setBoolean):
+ (WebCore::InspectorSettings::getLong):
+ (WebCore::InspectorSettings::setLong):
+ (WebCore::InspectorSettings::registerBoolean):
+ (WebCore::InspectorSettings::registerLong):
+ * inspector/InspectorSettings.h: Copied from Source/WebCore/bindings/v8/ScriptProfiler.h.
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ * inspector/InspectorState.h:
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.monitoringXHRStateChanged):
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
+ (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel.prototype._toggleProfiling):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._toggleDebugging):
+ * inspector/front-end/Settings.js:
+ (WebInspector.Settings):
+ * inspector/front-end/inspector.js:
+
+2011-01-26 Philippe Normand <pnormand@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] LayoutTests/media/audio-mpeg4-supported.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53125
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::mimeTypeCache): Add audio/x-m4a mimetype in the cache.
+
+2011-01-26 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: store all settings related to the agents on the frontend side
+ https://bugs.webkit.org/show_bug.cgi?id=53174
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp: profiler and debugger enablement state is now stored
+ on the front-end side and will be pushed to the backend when the frontend is loaded.
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::restoreDebugger):
+ (WebCore::InspectorAgent::restoreProfiler):
+ (WebCore::InspectorAgent::enableProfiler):
+ (WebCore::InspectorAgent::disableProfiler):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::disableDebugger):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorConsoleAgent.cpp: XHR failures will be logged to the console only
+ if the front-end was opened during current browser session and XHR logging is turned on
+ there.
+ (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
+ (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
+ (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::enable):
+ (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
+ * inspector/InspectorProfilerAgent.h:
+ * inspector/InspectorSettings.cpp: Removed.
+ * inspector/InspectorSettings.h: Removed.
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ * inspector/InspectorState.h:
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessagesCleared):
+ (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
+ (WebInspector.ConsoleView.prototype._handleContextMenuEvent.itemAction):
+ (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel.prototype._toggleProfiling):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._toggleDebugging):
+ * inspector/front-end/Settings.js:
+ (WebInspector.Settings):
+ * inspector/front-end/inspector.js:
+
+2011-01-27 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ REGRESSION (r76743): Uneven spacing in right-to-left justified text
+ https://bugs.webkit.org/show_bug.cgi?id=53225
+
+ Fixes failure in fast/text/atsui-spacing-features.html
+
+ There was an inconsistency between rendering code and font code in the interpretation of
+ 'after expansion' and 'trailing expansion'. Changed all code to interpret these in terms of
+ visual order rather than logical.
+
+ * platform/graphics/Font.cpp:
+ (WebCore::Font::expansionOpportunityCount): Added a text direction parameter and changed to
+ iterate in visual order accordingly.
+ * platform/graphics/Font.h:
+ * platform/graphics/WidthIterator.cpp:
+ (WebCore::WidthIterator::WidthIterator): Pass the run direction to expansionOpportunityCount().
+ (WebCore::WidthIterator::advance): For right-to-left runs, evaluate the trailing expansion
+ condition with respect to the first character, which is the trailing character in visual order.
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::ComplexTextController): Pass the run direction to
+ expansionOpportunityCount().
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Ditto.
+
+2011-01-26 Adam Roben <aroben@apple.com>
+
+ Don't create the Direct3D device before it's first needed
+
+ We only need the device once we decide to render. There's no point in creating it before
+ then.
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::setWindow): Removed the call to createRenderer() from here.
+ We already have code to create it when we first try to draw.
+ (WebCore::CACFLayerTreeHost::createRenderer): Flush the context after we set our layer's
+ bounds so that the bounds will take effect the next time we render (which could be just
+ after this function returns).
+
+2011-01-26 Adam Roben <aroben@apple.com>
+
+ Add assertions that CACFLayerTreeHost gains and loses an HWND only once
+
+ CACFLayerTreeHost doesn't support any other use pattern.
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::CACFLayerTreeHost): Initialize new member.
+ (WebCore::CACFLayerTreeHost::setWindow): Assert that we transition from not having a window,
+ to having a window, to not having a window just once over the lifetime of this object.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.h: Added m_state.
+
+2011-01-26 Adam Roben <aroben@apple.com>
+
+ Notify layers that their animations have started when we flush the context, not when we
+ render
+
+ r76372 separated context flushing from rendering, but this bit of code got left behind.
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::render): Moved code to notify the layers from here to
+ notifyAnimationsStarted.
+ (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Added a call to
+ notifyAnimationsStarted after we flush the context.
+ (WebCore::CACFLayerTreeHost::notifyAnimationsStarted): Added. Code came from render. Changed
+ to call PlatformCALayer::animationStarted rather than calling through to the client
+ directly.
+
+ * platform/graphics/ca/win/CACFLayerTreeHost.h: Added notifyAniamtionsStarted.
+
+2011-01-26 Adam Roben <aroben@apple.com>
+
+ Small cleanup in MediaPlayerPrivateFullscreenWindow
+
+ Reviewed by Sam Weinig.
+
+ * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
+ (WebCore::MediaPlayerPrivateFullscreenWindow::~MediaPlayerPrivateFullscreenWindow): Moved
+ code here from close(), since this was the only place that called it after the following
+ change to createWindow.
+ (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Replaced code that handled the
+ case where we had already created the window with an assertion that we have not already done
+ so. Our single caller (FullscreenVideoController) did not require this behavior.
+
+ * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: Removed layerView.
+
+2011-01-26 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Move ScrollView scroll wheel code to ScrollAnimator.
+
+ * platform/ScrollAnimator.cpp:
+ (WebCore::ScrollAnimator::handleWheelEvent):
+ * platform/ScrollAnimator.h:
+ Moved implementation of handleWheelEvent from ScrollView::wheelEvent.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::wheelEvent):
+ Call down to the ScrollableArea.
+
+ * platform/ScrollableArea.cpp:
+ (WebCore::ScrollableArea::handleWheelEvent):
+ Call down to the ScrollAnimator.
+
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::scrollPosition):
+ (WebCore::ScrollableArea::minimumScrollPosition):
+ (WebCore::ScrollableArea::maximumScrollPosition):
+ (WebCore::ScrollableArea::visibleContentRect):
+ (WebCore::ScrollableArea::visibleHeight):
+ (WebCore::ScrollableArea::visibleWidth):
+ Add functions needed to implement wheel event in the animator.
+
+2011-01-26 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
+ <rdar://problem/8821760>
+
+ Reviewed by Antti Koivisto.
+
+ This adds support for HTTP pipelining in CFNetwork, but does not
+ enable it. To enable it post-SnowLeopard, use this command:
+
+ defaults write BUNDLE.ID WebKitEnableHTTPPipelining -bool YES
+
+ Once enabled, it is possible to force the same load priority
+ (high) to be sent to CFNetwork to allow WebCore to handle the
+ scheduling:
+
+ defaults write BUNDLE.ID WebKitForceHTTPPipeliningPriorityHigh -bool YES
+
+ * WebCore.exp.in: Export _wkGetHTTPPipeliningPriority and
+ _wkSetHTTPPipeliningPriority.
+
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
+ Copy the priority to preflightRequest.
+
+ * loader/ResourceLoadScheduler.cpp:
+ (WebCore::ResourceLoadScheduler::scheduleLoad): Refactored code
+ at the end of the method to use an early return.
+
+ * loader/cache/CachedResourceRequest.cpp:
+ (WebCore::CachedResourceRequest::load): Set the priority on the
+ ResourceRequest object based on the priority of the
+ CachedResourceRequest before calling
+ ResourceLoadScheduler::scheduleSubresourceLoad().
+
+ * loader/icon/IconLoader.cpp:
+ (WebCore::IconLoader::startLoading): Create a ResourceRequest
+ object and set its priority to ResourceLoadPriorityLow before
+ passing it to ResourceLoadScheduler::scheduleSubresourceLoad().
+
+ * platform/mac/WebCoreSystemInterface.h:
+ (wkGetHTTPPipeliningPriority): Added.
+ (wkSetHTTPPipeliningPriority): Added.
+ * platform/mac/WebCoreSystemInterface.mm:
+ (wkGetHTTPPipeliningPriority): Added.
+ (wkSetHTTPPipeliningPriority): Added.
+
+ * platform/network/ResourceRequestBase.cpp:
+ (WebCore::ResourceRequestBase::adopt): Set m_priority when
+ adopting a CrossThreadResourceRequestData.
+ (WebCore::ResourceRequestBase::copyData): Set m_priority when
+ creating a CrossThreadResourceRequestData.
+ (WebCore::ResourceRequestBase::priority): Added.
+ (WebCore::ResourceRequestBase::setPriority): Added.
+ (WebCore::equalIgnoringHeaderFields): Priorities must match when
+ comparing two ResourceRequest objects.
+
+ * platform/network/ResourceRequestBase.h:
+ (WebCore::ResourceRequestBase::ResourceRequestBase): Set default
+ priority of new objects to ResourceLoadPriorityLow.
+ (WebCore::ResourceRequestBase::priority): Added declaration.
+ (WebCore::ResourceRequestBase::setPriority): Added declaration.
+ (WebCore::isHTTPPipeliningEnabled): Added.
+ (WebCore::shouldUseHTTPPipeliningPriority): Added.
+
+ * platform/network/cf/ResourceRequestCFNet.cpp: Updated so that
+ Mac OS X and Windows share code.
+ (WebCore::initializeMaximumHTTPConnectionCountPerHost): Always
+ set the HTTP connection count per host, but return an
+ 'unlimited' value when using HTTP pipelining. This method used
+ to be defined in ResourceRequestMac.mm for Mac OS X.
+ (WebCore::readBooleanPreference): Added. Helper method for
+ reading boolean user defaults.
+ (WebCore::isHTTPPipeliningEnabled): Returns value of user
+ default key WebKitEnableHTTPPipelining, or false if not set.
+ (WebCore::shouldUseHTTPPipeliningPriority): Returns value of
+ user default key WebKitForceHTTPPipeliningPriorityHigh, or false
+ if not set.
+ * platform/network/cf/ResourceRequestCFNet.h: Updated so that
+ Mac OS X and Windows share code. Fixed indentation.
+ (WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority): Added.
+ (WebCore::mapResourceLoadPriorityToHTTPPipeliningPriority): Added.
+
+ * platform/network/mac/ResourceRequestMac.mm:
+ (WebCore::ResourceRequest::doUpdatePlatformRequest): Update
+ HTTP pipelining priority on NSMutableFURLRequest object.
+ (WebCore::ResourceRequest::doUpdateResourceRequest): Update
+ m_priority from the NSURLRequest object.
+ (WebCore::initializeMaximumHTTPConnectionCountPerHost): Removed.
+ Code is now shared with Windows in ResourceRequestCFNet.cpp.
+
+2011-01-26 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics
+ when using WKScrollbars.
+
+ New WebKitSystemInterface Functionality.
+ * WebCore.exp.in:
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+ Some of the terrible static arrays are now only needed in the
+ old non-WK code, so they are if-def'd now.
+ * platform/mac/ScrollbarThemeMac.mm:
+
+ Just patching this function in a better way than I did
+ before.
+ (WebCore::updateArrowPlacement):
+
+ Call into WK for the right values.
+ (WebCore::ScrollbarThemeMac::scrollbarThickness):
+ (WebCore::ScrollbarThemeMac::hasThumb):
+ (WebCore::ScrollbarThemeMac::minimumThumbLength):
+
+ Return false if there are no buttons.
+ (WebCore::ScrollbarThemeMac::hasButtons):
+
+ Return an empty IntRect if there are not buttons.
+ (WebCore::buttonRepaintRect):
+
+2011-01-26 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add events to represent the start/end of a gesture scroll
+ https://bugs.webkit.org/show_bug.cgi?id=53215
+
+ * WebCore.exp.in:
+ Add new file.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ Add new file.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleGestureEvent):
+ * page/EventHandler.h:
+ Add entry point for handling gesture events.
+
+ * platform/PlatformGestureEvent.h: Added.
+ (WebCore::PlatformGestureEvent::PlatformGestureEvent):
+ (WebCore::PlatformGestureEvent::type):
+ (WebCore::PlatformGestureEvent::position):
+ (WebCore::PlatformGestureEvent::globalPosition):
+ (WebCore::PlatformGestureEvent::timestamp):
+ Add platform agnostic representation of a gesture event.
+
+2011-01-26 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ <rdar://problem/8446709> Allow inter-ideograph justification for CJK
+ https://bugs.webkit.org/show_bug.cgi?id=53184
+
+ Tests: fast/text/justify-ideograph-complex.html
+ fast/text/justify-ideograph-simple.html
+ fast/text/justify-ideograph-vertical.html
+
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::CanvasRenderingContext2D::drawTextInternal): Corrected the type of the third parameter
+ passed to the TextRun constructor and added the trailingExpansionBehavior parameter.
+ * platform/graphics/Font.cpp:
+ (WebCore::Font::expansionOpportunityCount): Added. Returns the number of expansion opportunities
+ for text justification. On entry, isAfterExpansion says whether an expansion opportunity exists
+ before the first character. On return, isAfterExpansion says whether an expansion opportunity
+ exists after the last character.
+ * platform/graphics/Font.h:
+ * platform/graphics/GlyphBuffer.h:
+ (WebCore::GlyphBuffer::expandLastAdvance): Added.
+ * platform/graphics/TextRun.h:
+ (WebCore::TextRun::TextRun): Added a TrailingExpansionBehavior parameter to the constructors.
+ Renamed padding to expansion.
+ (WebCore::TextRun::expansion): Renamed padding() to this.
+ (WebCore::TextRun::allowsTrailingExpansion): Added this accessor.
+ * platform/graphics/WidthIterator.cpp:
+ (WebCore::WidthIterator::WidthIterator): Initialize m_isAfterExpansion. Use Font::expansionOpportunityCount()
+ and adjust the count if it includes a trailing expansion opportunity but the run disallows trailing
+ expansion.
+ (WebCore::WidthIterator::advance): Apply expansion before and after CJK ideographs.
+ (WebCore::WidthIterator::advanceOneCharacter): Changed to not clear the GlyphBuffer so that advance()
+ can expand the last advance if it is followed by a CJK ideograph.
+ * platform/graphics/WidthIterator.h: Renamed m_padding to m_expansion and m_padPerSpace
+ to m_expansionPerOpportunity.
+ * platform/graphics/chromium/FontChromiumWin.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/chromium/FontLinux.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/efl/FontEfl.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/gtk/FontGtk.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/haiku/FontHaiku.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::ComplexTextController): Initialize m_isAfterExpansion. Use
+ Font::expansionOpportunityCount() and adjust the count if it includes a trailing expansion
+ opportunity but the run disallows trailing expansion.
+ (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Moved the definition and initialization
+ of hasExtraSpacing outside the loop. Apply expansion before and after CJK ideographs.
+ * platform/graphics/mac/ComplexTextController.h: Renamed m_padding to m_expansion and m_padPerSpace
+ to m_expansionPerOpportunity.
+ * platform/graphics/mac/FontMac.mm:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/qt/FontQt.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/win/FontWin.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/win/UniscribeController.cpp:
+ (WebCore::UniscribeController::UniscribeController): Updated for rename.
+ * platform/graphics/wince/FontWinCE.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * platform/graphics/wx/FontWx.cpp:
+ (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
+ * rendering/EllipsisBox.cpp:
+ (WebCore::EllipsisBox::paint): Pass a TrailingExpansionBehavior to the TextRun constructor.
+ (WebCore::EllipsisBox::selectionRect): Ditto.
+ (WebCore::EllipsisBox::paintSelection): Ditto.
+ * rendering/InlineBox.h:
+ (WebCore::InlineBox::InlineBox): Renamed m_toAdd to m_expansion.
+ (WebCore::InlineBox::expansion): Renamed toAdd() to this.
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::selectionRect): Pass a TrailingExpansionBehavior to the TextRun constructor.
+ (WebCore::InlineTextBox::paint): Ditto.
+ (WebCore::InlineTextBox::paintSelection): Ditto.
+ (WebCore::InlineTextBox::paintCompositionBackground): Ditto.
+ (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
+ (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
+ (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.
+ (WebCore::InlineTextBox::offsetForPosition): Ditto.
+ (WebCore::InlineTextBox::positionForOffset): Ditto.
+ * rendering/InlineTextBox.h:
+ (WebCore::InlineTextBox::setExpansion): Renamed setSpaceAdd() to this.
+ (WebCore::InlineTextBox::trailingExpansionBehavior): Added. Trailing expansion is allowed if this
+ is not the last leaf box on the line.
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Keep expansion opportunity counts
+ in a vector instead of computing them twice. Discard the trailing expansion opportunity in the
+ last text box.
+ * rendering/RenderFileUploadControl.cpp:
+ (WebCore::RenderFileUploadControl::paintObject): Pass a TrailingExpansionBehavior to the TextRun constructor.
+ (WebCore::RenderFileUploadControl::computePreferredLogicalWidths): Ditto.
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::updateFromElement): Ditto.
+ (WebCore::RenderListBox::paintItemForeground): Ditto. Also corrected the type of the second parameter.
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::getAvgCharWidth): Ditto.
+ (WebCore::RenderTextControl::paintPlaceholder): Ditto.
+ * rendering/svg/SVGInlineTextBox.cpp:
+ (WebCore::SVGInlineTextBox::constructTextRun): Ditto.
+
+2011-01-26 Andy Estes <aestes@apple.com>
+
+ Rubber-stamped by Darin Adler.
+
+ Inline HTMLObjectElement::hasValidClassId().
+
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::hasValidClassId):
+
+2011-01-26 Evan Martin <evan@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [chromium] crash on getBoundingClientRect in complex text
+ https://bugs.webkit.org/show_bug.cgi?id=53199
+
+ Use the correct array bound; we want the number of characters processed by
+ the shaper, not the longest continuous script run length.
+
+ Test: platform/chromium-linux/fast/text/international/complex-text-rectangle.html
+
+ * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+ (WebCore::ComplexTextController::nextScriptRun):
+ * platform/graphics/chromium/ComplexTextControllerLinux.h:
+ (WebCore::ComplexTextController::numCodePoints):
+
+2011-01-26 Emil A Eklund <eae@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Remove cached document reference from CSSStyleSheet and XSLStyleSheet.
+ https://bugs.webkit.org/show_bug.cgi?id=52084
+
+ Test: fast/dom/css-delete-doc.html
+
+ * css/CSSMediaRule.cpp:
+ (WebCore::CSSMediaRule::insertRule):
+ (WebCore::CSSMediaRule::deleteRule):
+ * css/CSSStyleSheet.cpp:
+ (WebCore::CSSStyleSheet::CSSStyleSheet):
+ (WebCore::CSSStyleSheet::document):
+ * css/CSSStyleSheet.h:
+ * xml/XSLStyleSheet.h:
+ (WebCore::XSLStyleSheet::parentStyleSheet):
+ * xml/XSLStyleSheetLibxslt.cpp:
+ (WebCore::XSLStyleSheet::XSLStyleSheet):
+ (WebCore::XSLStyleSheet::cachedResourceLoader):
+ (WebCore::XSLStyleSheet::setParentStyleSheet):
+ (WebCore::XSLStyleSheet::ownerDocument):
+ * xml/XSLStyleSheetQt.cpp:
+ (WebCore::XSLStyleSheet::XSLStyleSheet):
+ (WebCore::XSLStyleSheet::cachedResourceLoader):
+ (WebCore::XSLStyleSheet::ownerDocument):
+
+2011-01-25 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Reduce ref-count churn in shadowPseudoId.
+ https://bugs.webkit.org/show_bug.cgi?id=53136
+
+ Refactoring, so no new tests.
+
+ * dom/Element.h:
+ (WebCore::Element::shadowPseudoId): Changed signature to use const AtomicString&
+ * html/ValidationMessage.cpp:
+ (WebCore::ElementWithPseudoId::shadowPseudoId): Ditto.
+ * html/shadow/SliderThumbElement.cpp:
+ (WebCore::SliderThumbElement::shadowPseudoId): Ditto, plus moved from the header file.
+ * html/shadow/SliderThumbElement.h: Ditto.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlTimelineElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Ditto.
+ (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Ditto.
+ * rendering/MediaControlElements.h: Ditto.
+
+2011-01-26 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=46421, make multi-column layout work with vertical text.
+
+ Added new tests in fast/multicol/vertical-lr and fast/multicol/vertical-rl.
+
+ * css/html.css:
+ Update p, blockquote and h1-h6 to respect directionality so that column layout tests that use those
+ elements work properly.
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
+ Fix a flipping bug with the computation of lineTopIncludingMargins where it could be incorrectly shrunk
+ in some cases (causing lines to all stack on top of one another).
+
+ * rendering/InlineTextBox.h:
+ (WebCore::InlineTextBox::calculateBoundaries):
+ Fix calculateBoundaries to be physical rather than logical.
+
+ * rendering/LayoutState.cpp:
+ (WebCore::LayoutState::addForcedColumnBreak):
+ * rendering/LayoutState.h:
+ Rename childY to childLogicalOffset.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::layoutBlock):
+ (WebCore::RenderBlock::addOverflowFromChildren):
+ (WebCore::RenderBlock::addOverflowFromFloats):
+ (WebCore::RenderBlock::collapseMargins):
+ (WebCore::RenderBlock::estimateLogicalTopPosition):
+ (WebCore::RenderBlock::layoutBlockChild):
+ (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
+ (WebCore::RenderBlock::paintColumnRules):
+ (WebCore::RenderBlock::paintColumnContents):
+ (WebCore::RenderBlock::paintFloats):
+ (WebCore::RenderBlock::selectionGaps):
+ (WebCore::RenderBlock::removeFloatingObjectsBelow):
+ (WebCore::RenderBlock::addOverhangingFloats):
+ (WebCore::RenderBlock::hitTestFloats):
+ (WebCore::RenderBlock::hitTestColumns):
+ (WebCore::RenderBlock::calcColumnWidth):
+ (WebCore::RenderBlock::desiredColumnWidth):
+ (WebCore::RenderBlock::columnRectAt):
+ (WebCore::RenderBlock::layoutColumns):
+ (WebCore::RenderBlock::adjustPointToColumnContents):
+ (WebCore::RenderBlock::adjustRectForColumns):
+ (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
+ (WebCore::RenderBlock::adjustForColumns):
+ (WebCore::RenderBlock::adjustForBorderFit):
+ (WebCore::RenderBlock::nextPageLogicalTop):
+ (WebCore::RenderBlock::applyBeforeBreak):
+ (WebCore::RenderBlock::applyAfterBreak):
+ (WebCore::RenderBlock::adjustForUnsplittableChild):
+ (WebCore::RenderBlock::adjustLinePositionForPagination):
+ * rendering/RenderBlock.h:
+ (WebCore::RenderBlock::logicalRightOffsetForContent):
+ (WebCore::RenderBlock::logicalLeftOffsetForContent):
+ (WebCore::RenderBlock::leftForFloatIncludingMargin):
+ (WebCore::RenderBlock::topForFloatIncludingMargin):
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::layoutInlineChildren):
+ (WebCore::RenderBlock::determineStartPosition):
+ Reworking of all the RenderBlock column functions to support flipping and vertical modes.
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::offsetFromContainer):
+ (WebCore::RenderBox::flipForWritingModeIncludingColumns):
+ Patch offsetFromContainer to be aware of flipped block writing modes when dealing with column layouts.
+
+ * rendering/RenderBox.h:
+ (WebCore::RenderBox::clientLogicalBottom):
+ Fix a bug in clientLogicalBottom where it didn't add in the right border/padding.
+
+ * rendering/RenderFlexibleBox.cpp:
+ (WebCore::RenderFlexibleBox::layoutBlock):
+ Better terminology for pagination.
+
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::offsetFromContainer):
+ (WebCore::RenderInline::mapLocalToContainer):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::paintChildLayerIntoColumns):
+ (WebCore::RenderLayer::hitTestChildLayerColumns):
+ (WebCore::RenderLayer::localBoundingBox):
+ (WebCore::RenderLayer::boundingBox):
+ Patch painting in RenderLayers to be vertical-text-aware.
+
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::mapLocalToContainer):
+ Add code to be flipped block-aware with columns.
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::layout):
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::layout):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::layoutRows):
+ Fix pagination to use better terminology.
+
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::absoluteQuads):
+ (WebCore::RenderText::absoluteQuadsForRange):
+ Fix a bug where vertical text wasn't taken into account.
+
+2011-01-26 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Unreviewed, rolling out r76719.
+ http://trac.webkit.org/changeset/76719
+ https://bugs.webkit.org/show_bug.cgi?id=53122
+
+ Broke a bunch of media tests in Chromium/Qt/GTK.
+
+2011-01-26 Tony Chang <tony@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ [gtk] strip NUL characters when copying text/html on GTK+
+ https://bugs.webkit.org/show_bug.cgi?id=52508
+
+ Putting NUL characters in the text/html clipboard doesn't work in
+ WebKit GTK+ (the pasted value is truncated at the NUL). Since we're
+ already stripping this character for plain text (for Windows), strip
+ it in text/html too.
+
+ * editing/MarkupAccumulator.h: mark function as virtual
+ * editing/markup.cpp:
+ (WebCore::StyledMarkupAccumulator::appendString):
+ (WebCore::StyledMarkupAccumulator::takeResults): strip nulls
+
+2011-01-26 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Reliable crash with getTextAtOffset()
+ https://bugs.webkit.org/show_bug.cgi?id=53131
+
+ Properly calculate length in bytes for a UTF8 substring.
+
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+ (utf8Substr): Use character instead of bytes as units to
+ calculate the length in bytes for the UTF8 string.
+
+2011-01-25 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Change HTMLInputElement-derived parts of media element shadow DOM to use shadowPseudoId.
+ https://bugs.webkit.org/show_bug.cgi?id=53122
+
+ This is the first step in converting HTMLMediaElement to the new shadow DOM.
+
+ Should not regress any existing tests. No observable change in behavior.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId): Removed now-unnecessary hard-coded pseudo-element selectors.
+ (WebCore::nameToPseudoTypeMap): Ditto.
+ (WebCore::CSSSelector::extractPseudoType): Ditto.
+ * css/CSSSelector.h: Ditto.
+ * css/mediaControls.css: Added proper initial values, now that elements use the proper selector pipeline.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlInputElement::MediaControlInputElement): Removed the switch statement,
+ which is now replaced with virtual shadowPseudoId on each corresponding class.
+ (WebCore::MediaControlInputElement::styleForElement): Changed to use element pipeline.
+ (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Changed to set
+ display type in constructor.
+ (WebCore::MediaControlMuteButtonElement::create): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): Added
+ to disambiguate from the MediaControlMuteButtonElement.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::create): Added.
+ (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): Added.
+ (WebCore::MediaControlSeekForwardButtonElement::create): Added.
+ (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): Added.
+ (WebCore::MediaControlSeekBackButtonElement::create): Added.
+ (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Added.
+ (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Added.
+ (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlTimelineElement::shadowPseudoId): Added.
+ (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Added.
+ (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Changed to not take PseudoId as
+ constructor argument.
+ (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Added.
+ * rendering/MediaControlElements.h:
+ (WebCore::MediaControlSeekForwardButtonElement::isForwardButton): Added.
+ (WebCore::MediaControlSeekBackButtonElement::isForwardButton): Added.
+ * rendering/RenderMedia.cpp:
+ (WebCore::RenderMedia::createMuteButton): Changed to use new constructor.
+ (WebCore::RenderMedia::createSeekBackButton): Ditto.
+ (WebCore::RenderMedia::createSeekForwardButton): Ditto.
+ (WebCore::RenderMedia::createVolumeSliderMuteButton): Ditto.
+ * rendering/style/RenderStyleConstants.h: Removed constants that are no longer used.
+
+2011-01-26 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Fix multisampling support in DrawingBuffer
+ https://bugs.webkit.org/show_bug.cgi?id=53154
+
+ In DrawingBuffer's multisampling code path, fixed enum usage and a
+ bug where it would incorrectly redefine the depth and stencil
+ buffers. Hooked up multisampling code path in Chromium port.
+
+ Tested manually with some accelerated 2D canvas content.
+ Multisampling isn't being switched on for the accelerated 2D
+ canvas at the current time because it will increase fill rate
+ requirements and cause a large number of rebaselines.
+
+ * platform/graphics/Extensions3D.h:
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::publishToPlatformLayer):
+ * platform/graphics/chromium/Extensions3DChromium.h:
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ (WebCore::DrawingBuffer::create):
+ (WebCore::DrawingBuffer::reset):
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ (WebCore::Extensions3DOpenGL::supports):
+
+2011-01-26 Tony Chang <tony@chromium.org>
+
+ Unreviewed.
+
+ [chromium] revert r68310 because of race conditions detected by tsans
+ https://bugs.webkit.org/show_bug.cgi?id=53185
+
+ Causes stability problems for Chromium, http://crbug.com/70589
+
+ * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
+ (WebCore::SQLiteFileSystem::registerSQLiteVFS):
+
+2011-01-26 Justin Schuh <jschuh@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Make fireEventsAndUpdateStyle use stack local vectors.
+ https://bugs.webkit.org/show_bug.cgi?id=46760
+
+ Test: animations/animation-add-events-in-handler.html
+
+ * page/animation/AnimationController.cpp:
+ (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
+
+2011-01-26 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Remove m_URL from FrameLoader and depend on Document::url()
+ instead. FrameLoader::url() will be removed in a followup patch.
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ Refactor only, no new tests.
+
+ * WebCore.exp.in:
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ (WebCore::Document::updateURLForPushOrReplaceState):
+ * loader/DocumentWriter.cpp:
+ (WebCore::DocumentWriter::begin):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::iconURL):
+ (WebCore::FrameLoader::didOpenURL):
+ (WebCore::FrameLoader::didExplicitOpen):
+ (WebCore::FrameLoader::receivedFirstData):
+ (WebCore::FrameLoader::url):
+ (WebCore::FrameLoader::setOutgoingReferrer):
+ (WebCore::FrameLoader::startIconLoader):
+ (WebCore::FrameLoader::commitIconURLToIconDatabase):
+ (WebCore::FrameLoader::finishedParsing):
+ (WebCore::FrameLoader::checkIfDisplayInsecureContent):
+ (WebCore::FrameLoader::checkIfRunInsecureContent):
+ (WebCore::FrameLoader::updateFirstPartyForCookies):
+ (WebCore::FrameLoader::loadInSameDocument):
+ (WebCore::FrameLoader::commitProvisionalLoad):
+ (WebCore::FrameLoader::open):
+ (WebCore::FrameLoader::shouldScrollToAnchor):
+ * loader/FrameLoader.h: Rename setURL() to setOutgoingReferrer().
+
+2011-01-25 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Crashes loading pages when cancelling subresource loads through WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=53123
+ <rdar://problem/8914361>
+
+ Fix a crash that happened when cancelling subresource loads through WebKit.
+
+ When a load is cancelled synchronously (via the WebKit client), CachedResourceLoader::requestResource
+ can be called recursively on the same function, either leading to infinite recursion, or deleting
+ an object when it is not done being used.
+
+ The fix for this was to call checkForPendingPreloads and servePendingRequests asynchronously when
+ CachedResourceLoader::loadDone was called synchronously (due to the load being cancelled synchronously).
+
+ Test: fast/loader/willSendRequest-null-for-preload.html
+
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::setRequest): Only dispatch didReceiveServerRedirectForProvisionalLoadForFrame
+ if our new URL is non-null.
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::CachedResourceLoader): Initialize our timer.
+ (WebCore::CachedResourceLoader::loadDone): If the CachedResource we were passed in was 0, that means this
+ function was called synchronously
+ from CachedResourceRequest::load, and we don't want to call into checkForPendingPreloads synchronously,
+ so put it on a 0-delay timer to make the calls to checkForPendingPreloads and servePendingRequests asynchronous.
+ (WebCore::CachedResourceLoader::loadDonePendingActionTimerFired): Call checkForPendingPreloads and servePendingRequests.
+ (WebCore::CachedResourceLoader::checkForPendingPreloads): m_pendingPreloads is now a Deque instead of a Vector,
+ so use Deque methods.
+ * loader/cache/CachedResourceLoader.h: Add the timer, the timer callback function, and make m_pendingPreloads a Deque.
+
+2011-01-25 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: evaluate in console may not work when window.console is substituted or deleted.
+ https://bugs.webkit.org/show_bug.cgi?id=53072
+
+ Test: inspector/console-substituted.html
+
+ * inspector/InjectedScriptSource.js:
+ (.):
+
+2011-01-26 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [cairo] Use CAIRO_OPERATOR_DARKEN when available
+ https://bugs.webkit.org/show_bug.cgi?id=53084
+
+ Use CAIRO_OPERATOR_DARKEN for CompositePlusDarker instead of
+ CAIRO_OPERATOR_SATURATE when building with cairo version >= 1.10.
+
+ * platform/graphics/cairo/CairoUtilities.cpp:
+ (WebCore::toCairoOperator):
+
+2011-01-26 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: visualize \n in strings as unicode cr
+ symbol in stack variables sidebar.
+ https://bugs.webkit.org/show_bug.cgi?id=53162
+
+ * inspector/front-end/ObjectPropertiesSection.js:
+ (WebInspector.ObjectPropertyTreeElement.prototype.update):
+
+2011-01-26 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: size is wrong for cached resources in Network panel
+ - Set the size for 304/not modified resources from cached resource.
+ - Add response headers size to resource transfer size.
+ https://bugs.webkit.org/show_bug.cgi?id=52886
+
+ * inspector/InspectorResourceAgent.cpp:
+ (WebCore::InspectorResourceAgent::didReceiveResponse):
+ * inspector/front-end/Resource.js:
+ (WebInspector.Resource):
+ (WebInspector.Resource.prototype.get transferSize):
+ (WebInspector.Resource.prototype.set responseHeaders):
+ (WebInspector.Resource.prototype._headersSize):
+ (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
+
+2011-01-26 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fixed TiledBacking store to take into account new dirty regions caused by
+ paint time layouts.
+
+ Flawed rendering design for QtWebKit resulting in artifacts being displayed
+ https://bugs.webkit.org/show_bug.cgi?id=49184
+
+ There are no new tests as this patch aims at fixing flicker that
+ happen randomly, mostly on slow hardware, thus are hard to reproduce
+ consistently in an automated test.
+
+ This patch does not fully address the said bug but it is a step in the
+ right direction. A full solution to the bug, as currently perceived,
+ requires either a Qt GUI API change, a performance hit for QtWebKit,
+ or a hack, until a full solution is provided this patch is progress.
+
+ * platform/graphics/TiledBackingStore.cpp:
+ (WebCore::TiledBackingStore::updateTileBuffers):
+ Changed to take into account newly dirtied areas created during
+ tile update initiated layouts during the same update.
+
+2011-01-26 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [SKIA] Remove "current path" of GraphicsContext
+ https://bugs.webkit.org/show_bug.cgi?id=53124
+
+ * platform/graphics/GraphicsContext.h:
+ * platform/graphics/skia/GraphicsContextSkia.cpp:
+ (WebCore::GraphicsContext::clipPath):
+ (WebCore::GraphicsContext::fillPath):
+ (WebCore::GraphicsContext::strokePath):
+ * platform/graphics/skia/PathSkia.cpp:
+ (WebCore::Path::strokeBoundingRect):
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ * platform/graphics/skia/PlatformContextSkia.h:
+
+2011-01-26 Zalan Bujtas <zbujtas@gmail.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Path::normalAngleAtLength() returns incorrect value on ACID3.
+
+ QPainterPath returns angle values with the origo being at the top left corner,
+ we need to account for this in normalAngleAtLength().
+ This Regressed with r66979.
+
+ No new tests as this is already covered by ACID3.
+
+ * platform/graphics/qt/PathQt.cpp:
+ (WebCore::Path::normalAngleAtLength):
+
+2011-01-26 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: live edit does not update source snippet.
+ https://bugs.webkit.org/show_bug.cgi?id=53097
+
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
+
+2011-01-26 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Incorrect on-hover evaluation of a variable named 'profile'.
+ https://bugs.webkit.org/show_bug.cgi?id=53018
+
+ * inspector/InjectedScript.cpp:
+ (WebCore::InjectedScript::evaluate):
+ (WebCore::InjectedScript::evaluateOnCallFrame):
+ (WebCore::InjectedScript::getCompletions):
+ (WebCore::InjectedScript::getCompletionsOnCallFrame):
+ * inspector/InjectedScript.h:
+ * inspector/InjectedScriptSource.js:
+ (.):
+ * inspector/Inspector.idl:
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
+ (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorRuntimeAgent.cpp:
+ (WebCore::InspectorRuntimeAgent::evaluate):
+ (WebCore::InspectorRuntimeAgent::getCompletions):
+ * inspector/InspectorRuntimeAgent.h:
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype.completions):
+ (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
+ (WebInspector.ConsoleView.prototype._enterKeyPressed):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
+ (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype._showPopup):
+ * inspector/front-end/WatchExpressionsSidebarPane.js:
+ (WebInspector.WatchExpressionsSection.prototype.update):
+
+2011-01-26 Hironori Bono <hbono@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ A speculative fix for Bug 52422 - [chromium] More crash in
+ FontFallbackList::determinePitch(const Font* font)
+ https://bugs.webkit.org/show_bug.cgi?id=52422
+
+ My previous change may not work on non-US Windows whose system fonts
+ have localized aliases matching to the system locale because of a
+ font-name mismatch in createFontIndirectAndGetWinName(). This change
+ tries all the fonts installed in a PC and returns the first font that we
+ can create without errors.
+
+ * platform/graphics/chromium/FontCacheChromiumWin.cpp:
+ (WebCore::GetLastResortFallbackFontProcData::GetLastResortFallbackFontProcData):
+ Added a struct used for getLastResortFallbackFontProc().
+ (WebCore::getLastResortFallbackFontProc): Added a callback for EnumFontFamilies().
+ (WebCore::FontCache::getLastResortFallbackFont): Use EnumFontFamilies() to find a last-resort font.
+
+2011-01-26 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Add a DOMTimeStamp parameter to the requestAnimationFrame callback
+ https://bugs.webkit.org/show_bug.cgi?id=53142
+
+ This adds a DOMTimeStamp parameter to the requestAnimationFrame callback to more
+ closely match mozilla's proposal. This is useful if the page has multiple imperative animations
+ and wants to ensure that they all remain synchronized. If each callback used Date.now() to
+ update its animation state, they would potentially be out of sync with each other. If they use
+ the timestamp then all callbacks for the same "frame" will update to the same state.
+
+ Test: fast/animation/request-animation-frame-timestamps.html
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/scripts/test/V8/V8TestCallback.cpp:
+ (WebCore::V8TestCallback::callbackWithClass2Param):
+ * dom/Document.cpp:
+ (WebCore::Document::serviceScriptedAnimations):
+ * dom/Document.h:
+ * dom/RequestAnimationFrameCallback.h:
+ * dom/RequestAnimationFrameCallback.idl:
+ * page/FrameView.cpp:
+ (WebCore::FrameView::serviceScriptedAnimations):
+ * page/FrameView.h:
+
+2011-01-25 Yuzo Fujishima <yuzo@google.com>
+
+ Unreviewed attempt to fix compilation error for Chromium Clang.
+
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::advance):
+
+2011-01-25 Ned Holbrook <nholbrook@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ ComplexTextController incorrectly conflates string length and range of indexes
+ https://bugs.webkit.org/show_bug.cgi?id=52760
+
+ Test: fast/text/offsetForPosition-complex-fallback.html
+
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::offsetForPosition):
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ (WebCore::ComplexTextController::ComplexTextRun::setIsNonMonotonic):
+ (WebCore::ComplexTextController::advance):
+ * platform/graphics/mac/ComplexTextController.h:
+ (WebCore::ComplexTextController::ComplexTextRun::create):
+ (WebCore::ComplexTextController::ComplexTextRun::indexEnd):
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
+
+2011-01-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ Scrollbars don't work correctly for top-to-bottom text in an overflow: scroll area
+ https://bugs.webkit.org/show_bug.cgi?id=53048
+
+ Test: fast/overflow/overflow-rtl-vertical-origin.html
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::scrollPosition):
+ (WebCore::RenderLayer::updateScrollInfoAfterLayout):
+ Take the scroll origin into account when calculating scrollbars in more places.
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Windows production build fix.
+ Use correct configuration-specific path in makefile.
+
+ * WebCore.vcproj/WebCore.make:
+
+2011-01-25 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Radio button group state is not restored correctly
+ https://bugs.webkit.org/show_bug.cgi?id=50442
+
+ Fixes a bug that radio button states are not restored correctly in
+ a case that non-first radio button in a group is checked.
+
+ If "checked" attribute is present, the radio button is checked and
+ other radio buttons in the group are unchecked. This behavior
+ disturbs form state restoring. This patch changes this behavior so
+ that the "checked" attribute handling is delayed after form state
+ restoring.
+
+ Test: fast/forms/state-restore-radio-group.html
+
+ * html/HTMLFormControlElement.h:
+ Make finishParsingChildren() protected so that HTMLInpuElement can call it.
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::HTMLInputElement):
+ - Add createdByParser parameter.
+ - Initialize m_stateRestored and m_parsingInProgress.
+ (WebCore::HTMLInputElement::create): Sync with the constructor.
+ (WebCore::HTMLInputElement::restoreFormControlState):
+ Set m_stateRestored in order to refer it in finishParsingChildren().
+ (WebCore::HTMLInputElement::parseMappedAttribute):
+ Don't call setChecked() during parsing. Move setNeedsValidityCheck()
+ to setChecked().
+ (WebCore::HTMLInputElement::finishParsingChildren):
+ Call setChecked() if form state is not restored.
+ (WebCore::HTMLInputElement::setChecked):
+ Move setNeedsValidityCheck() from parseMappedAttribute() because
+ finishParsingChildren() also needs to call setNeedsValidityCheck().
+ * html/HTMLInputElement.h:
+ - Remove the default value of HTMLFormElement* of the HTMLInputElement
+ constructor, and add createdByParser parameter.
+ - Introduce m_parsingInProgress and m_stateRestored.
+ * html/HTMLIsIndexElement.cpp:
+ (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
+ Sync with the HTMLInputElement constructor change.
+ * html/HTMLTagNames.in: Add constructorNeedsCreatedByParser flag.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlInputElement::MediaControlInputElement):
+ Sync with the HTMLInputElement constructor change.
+ * rendering/ShadowElement.cpp:
+ (WebCore::ShadowInputElement::ShadowInputElement): ditto.
+ * rendering/ShadowElement.h:
+ (WebCore::ShadowElement::ShadowElement): ditto.
+
+2011-01-25 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ HTMLFormElement::checkValidity() returns incorrect result if 'invalid' events are canceled.
+ https://bugs.webkit.org/show_bug.cgi?id=52565
+
+ * html/HTMLFormElement.cpp:
+ (WebCore::HTMLFormElement::validateInteractively):
+ Check checkInvalidControlsAndCollectUnhandled() result instead of
+ checking emptiness of unhandled invalid controls list.
+ (WebCore::HTMLFormElement::checkValidity): ditto.
+ (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
+ Renamed from collectUnhandledInvalidControls().
+ Returns true if there is any invalid control regardless of event canceling.
+ * html/HTMLFormElement.h: Rename collectUnhandledInvalidControls() to
+ checkInvalidControlsAndCollectUnhandled().
+
+2011-01-25 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Range and number inputs should reject increment and decrement by
+ keyboard or mouse wheel if they are disabled or read-only
+ https://bugs.webkit.org/show_bug.cgi?id=53151
+
+ * html/RangeInputType.cpp:
+ (WebCore::RangeInputType::handleKeydownEvent): Check disabled() and readOnly().
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::handleKeydownEventForSpinButton): ditto.
+ (WebCore::TextFieldInputType::handleWheelEventForSpinButton): ditto.
+
+2011-01-25 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ API to support localized numbers for <input type=number>
+ https://bugs.webkit.org/show_bug.cgi?id=45730
+
+ Introduce platform/text/LocalizedNumber.h, and
+ LocalizedNumberNone.cpp, which is an empty implementation of the
+ functions in LocalizedNumber.h. We use LocalizedNumberNone.cpp in
+ all platforms for now.
+
+ A string in a type=number field is parsed as a localized number
+ first. If the parsing fails, it is parsed as the HTML5 number.
+
+ We introduce HTMLInputElement::visibleValue(). It represents a value
+ which should be drawn by a renderer. HTMLInputElement::value() always
+ returns a number formatted for HTML5, and visibleValue() may return a
+ localized number.
+
+ No new tests because this doesn't change any behavior.
+
+ * Android.mk: Add LocalizedNumber.h and/or LocalizedNumberNone.cpp.
+ * CMakeLists.txt: ditto.
+ * GNUmakefile.am: ditto.
+ * WebCore.gypi: ditto.
+ * WebCore.pro: ditto.
+ * WebCore.vcproj/WebCore.vcproj: ditto.
+ * WebCore.xcodeproj/project.pbxproj: ditto.
+ * dom/InputElement.h: Add visibleValue().
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::visibleValue): Added. Just call InputType::visibleValue().
+ * html/HTMLInputElement.h: Declare visibleValue().
+ * html/InputType.cpp:
+ (WebCore::InputType::visibleValue): Add the default implementation of
+ visibleValue(), which returns HTMLInputElement::value().
+ * html/InputType.h: Add declarations.
+ * html/NumberInputType.cpp:
+ (WebCore::isHTMLNumberCharacter): Renamed from isNumberCharacter().
+ (WebCore::isNumberCharacter): Calls isLocalizedNumberCharacter() and isHTMLNumberCharacter().
+ (WebCore::NumberInputType::visibleValue):
+ Returns a localized number string produced by formatLocalizedNumber().
+ (WebCore::NumberInputType::isAcceptableValue): Calls parseLocalizedNumber().
+ (WebCore::NumberInputType::sanitizeValue): Calls parseLocalizedNumber().
+ * html/NumberInputType.h: Add declarations.
+ * platform/text/LocalizedNumber.h: Added.
+ * platform/text/LocalizedNumberNone.cpp: Added.
+ (WebCore::parseLocalizedNumber):
+ (WebCore::formatLocalizedNumber):
+ (WebCore::isLocalizedNumberCharacter):
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::updateFromElement):
+ Calls InputElement::visibleValue() instead of value().
+ * wml/WMLInputElement.h:
+ (WebCore::WMLInputElement::visibleValue): Added. It just calls value().
+
+2011-01-25 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53143
+ Add IntRectHash
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/IntRectHash.h: Added.
+
+ * platform/graphics/IntSizeHash.h: Don't do "using WebCore::IntSize"!
+
+2011-01-25 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ Remove trailing whitespace in HTMLInputElement.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=53152
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::updateCheckedRadioButtons):
+ (WebCore::HTMLInputElement::applyStep):
+ (WebCore::HTMLInputElement::updateFocusAppearance):
+ (WebCore::HTMLInputElement::mapToEntry):
+ (WebCore::HTMLInputElement::setAutofilled):
+ (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
+ (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):
+
+2011-01-25 Mike Reed <reed@google.com>
+
+ Reviewed by James Robinson.
+
+ DrawingBufer::reset() today checks if the new size is the same as its
+ m_size, and if so, returns immediately. This does not match the
+ semantics of <canvas>, which wants to clear its contents anytime the
+ size is specified.
+ https://bugs.webkit.org/show_bug.cgi?id=53149
+
+ Test: Covered by existing <canvas> tests using gpu.
+
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::DrawingBuffer):
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ (WebCore::DrawingBuffer::reset):
+
+2011-01-25 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Add a hashset of DOMURLs to ScriptExecutionContext to track back references.
+ https://bugs.webkit.org/show_bug.cgi?id=53038
+
+ Test: fast/dom/window-domurl-crash.html
+
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
+ (WebCore::ScriptExecutionContext::createdDomUrl):
+ (WebCore::ScriptExecutionContext::destroyedDomUrl):
+ * dom/ScriptExecutionContext.h:
+ (WebCore::ScriptExecutionContext::domUrls):
+ * html/DOMURL.cpp:
+ (WebCore::DOMURL::DOMURL):
+ (WebCore::DOMURL::~DOMURL):
+ (WebCore::DOMURL::contextDestroyed):
+ * html/DOMURL.h:
+ (WebCore::DOMURL::scriptExecutionContext):
+
+2011-01-23 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52983
+ Eliminate m_tagHistory pointer from CSSSelector
+
+ Keep the component selectors in the array in CSSSelectorList instead
+ of maintaining a linked list between them. This allows eliminating
+ m_tagHistory pointer, shrinking CSSSelector by 25% (selection performance
+ seems to improve some too due to better locality).
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+ Make CSSSelector.h a private header.
+
+ * css/CSSGrammar.y:
+
+ Use CSSParserSelector during parsing to keep the tag history in
+ a linked list. This is flattened to an array after parsing.
+ Use accessors for setting selector values.
+ Use OwnPtr in selector vector.
+
+ * css/CSSPageRule.cpp:
+ (WebCore::CSSPageRule::CSSPageRule):
+ * css/CSSPageRule.h:
+ (WebCore::CSSPageRule::create):
+
+ Simplify.
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::~CSSParser):
+ (WebCore::CSSParser::createFloatingSelector):
+ (WebCore::CSSParser::sinkFloatingSelector):
+ (WebCore::CSSParser::createStyleRule):
+ (WebCore::CSSParser::updateSpecifiersWithElementName):
+ (WebCore::CSSParser::createPageRule):
+ * css/CSSParser.h:
+ (WebCore::CSSParser::reusableSelectorVector):
+
+ CSSSelector -> CSSParserSelector.
+ Use OwnPtr in selector vector.
+
+ * css/CSSParserValues.cpp:
+ (WebCore::CSSParserSelector::CSSParserSelector):
+ (WebCore::CSSParserSelector::~CSSParserSelector):
+ * css/CSSParserValues.h:
+ (WebCore::CSSParserSelector::releaseSelector):
+ (WebCore::CSSParserSelector::setTag):
+ (WebCore::CSSParserSelector::setValue):
+ (WebCore::CSSParserSelector::setAttribute):
+ (WebCore::CSSParserSelector::setArgument):
+ (WebCore::CSSParserSelector::setSimpleSelector):
+ (WebCore::CSSParserSelector::setMatch):
+ (WebCore::CSSParserSelector::setRelation):
+ (WebCore::CSSParserSelector::setForPage):
+ (WebCore::CSSParserSelector::pseudoType):
+ (WebCore::CSSParserSelector::isUnknownPseudoElement):
+ (WebCore::CSSParserSelector::isSimple):
+ (WebCore::CSSParserSelector::tagHistory):
+ (WebCore::CSSParserSelector::setTagHistory):
+
+ Linked list used during parsing.
+ Avoid recursive destruction.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::extractPseudoType):
+ (WebCore::CSSSelector::operator==):
+ (WebCore::CSSSelector::selectorText):
+ (WebCore::CSSSelector::setSimpleSelector):
+ * css/CSSSelector.h:
+ (WebCore::CSSSelector::CSSSelector):
+ (WebCore::CSSSelector::~CSSSelector):
+ (WebCore::CSSSelector::tagHistory):
+ (WebCore::CSSSelector::tag):
+ (WebCore::CSSSelector::value):
+ (WebCore::CSSSelector::setTag):
+ (WebCore::CSSSelector::isLastInTagHistory):
+ (WebCore::CSSSelector::setNotLastInTagHistory):
+ (WebCore::CSSSelector::RareData::RareData):
+ (WebCore::CSSSelector::RareData::~RareData):
+ (WebCore::CSSSelector::createRareData):
+ (WebCore::CSSSelector::setValue):
+
+ Remove m_tagHistory.
+ Keep m_value in the union with the rare data pointer instead.
+ Make m_value and m_tag private, implement accessors.
+ Add a new bit to indicate end of the tag history (multipart selector).
+ Eliminate complex destruction. Selectors are now deleted as an array or by a CSSParserSelector chain.
+
+ * css/CSSSelectorList.cpp:
+ (WebCore::CSSSelectorList::adoptSelectorVector):
+
+ Flatten everything to an array.
+
+ (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
+ * css/CSSSelectorList.h:
+ (WebCore::CSSSelectorList::hasOneSelector):
+ (WebCore::CSSSelectorList::next):
+
+ Skip over the subparts of multipart selectors to find the next selector.
+
+ * css/CSSStyleRule.h:
+ (WebCore::CSSStyleRule::adoptSelectorVector):
+
+ CSSSelector -> CSSParserSelector.
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
+ (WebCore::CSSRuleSet::addRule):
+ (WebCore::collectIdsAndSiblingRulesFromList):
+ (WebCore::CSSStyleSelector::matchPageRulesForList):
+ * dom/Node.cpp:
+ (WebCore::Node::querySelector):
+ * dom/SelectorNodeList.cpp:
+ (WebCore::createSelectorNodeList):
+
+ Use accessors.
+
+2011-01-25 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Support small caps in complex text on linux
+ https://bugs.webkit.org/show_bug.cgi?id=53051
+
+ * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+ (WebCore::ComplexTextController::nextScriptRun): Break runs at small caps boundaries.
+ (WebCore::ComplexTextController::setupFontForScriptRun): Setup small caps font data if needed.
+ * platform/graphics/chromium/ComplexTextControllerLinux.h: Store small caps text in separate string.
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber-stamped by Adam Roben.
+
+ Windows production build fix.
+ Use correct environment variable escaping
+
+ * WebCore.vcproj/WebCore.make:
+
+2011-01-25 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Empty URLs are never display isolated
+ https://bugs.webkit.org/show_bug.cgi?id=53053
+
+ This check mirrors the check in the local case. There isn't a good way
+ to test this with a LayoutTest, but it is tested in Chromium (where
+ this registry is used).
+
+ * platform/SchemeRegistry.cpp:
+ (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
+
+2011-01-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Pipe a timestamp down into the PlatformWheelEvent for the Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=53111
+
+ * platform/PlatformWheelEvent.h:
+ (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+ (WebCore::PlatformWheelEvent::timestamp):
+ Add timestamp member.
+
+ * platform/mac/WheelEventMac.mm:
+ (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+ Initialize the timestamp from the event.
+
+2011-01-25 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76625.
+ http://trac.webkit.org/changeset/76625
+ https://bugs.webkit.org/show_bug.cgi?id=53119
+
+ "incorrect pixel test results" (Requested by rniwa on
+ #webkit).
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::localCaretRect):
+
+2011-01-25 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r76614.
+
+ * platform/FileSystem.h:
+
+2011-01-21 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Adding border and padding to the calculation of the local caret rect for RenderBoxes.
+
+ Undo moves caret to invalid position
+ https://bugs.webkit.org/show_bug.cgi?id=49744
+
+ Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
+ editing/selection/caret-painting-after-paste-undo.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::localCaretRect):
+
+2011-01-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add hasPreciseScrollingDeltas bit to PlatformWheelEvent on the Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=53107
+
+ * platform/PlatformWheelEvent.h:
+ (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+ (WebCore::PlatformWheelEvent::hasPreciseScrollingDeltas):
+ * platform/mac/WheelEventMac.mm:
+ (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+
+2011-01-20 Jer Noble <jer.noble@apple.com>
+
+ Reviewed by Eric Carlson.
+
+ REGRESSION (r72119): Audio never plays on Star Wars intro animation
+ https://bugs.webkit.org/show_bug.cgi?id=52467
+
+ QuickTime's eat/m4a movie importer compontent doesn't list audio/m4a as a mime
+ type which it supports, though it handles .m4a files just fine. Change the way
+ we build the list of supported MIME Types through a new WebKitSystemInterface
+ function.
+
+ Caused by r72119, which adds system-specific extension->MIME entries to the cache
+ before global entries, and the system-specific entries include QuickTime's registry
+ entries which contain the audio/m4a MIME type, while its components do not.
+
+ Test: media/audio-mpeg4-supported.html
+
+ * WebCore.vcproj/QTMovieWinCommon.vsprops:
+ * platform/graphics/win/QTMovie.cpp:
+ (getMIMETypeCallBack):
+ (initializeSupportedTypes):
+ (QTMovie::countSupportedTypes): gSupportedTypes is now a CFArrayRef.
+ (QTMovie::getSupportedType): Ditto.
+
+2011-01-25 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Remove PlatformBridge::idbShutdown()
+ https://bugs.webkit.org/show_bug.cgi?id=53077
+
+ Since Chromium r72157, this is not used anymore. The previous use was
+ to signal to the embedder that IndexedDB was shutting down, but we
+ agreed it is better if the embedder keeps track of that itself.
+
+ No new tests: this does not change any functionality.
+
+ * platform/chromium/PlatformBridge.h:
+ * storage/IDBFactoryBackendInterface.cpp:
+ * storage/IDBFactoryBackendInterface.h:
+ (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
+ * storage/chromium/IDBFactoryBackendInterface.cpp:
+
+2011-01-25 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ WebKit is using CSBackupSetItemExcluded incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=53095
+ rdar://problem/8790540
+
+ * loader/icon/IconDatabase.cpp:
+ (WebCore::IconDatabase::performOpenInitialization): Added code to
+ exclude the database from backup one time, and record inside the
+ database that this has been done.
+ (WebCore::IconDatabase::wasExcludedFromBackup): Added.
+ (WebCore::IconDatabase::setWasExcludedFromBackup): Added.
+ * loader/icon/IconDatabase.h: Added new functions above.
+
+ * platform/FileSystem.cpp:
+ (WebCore::canExcludeFromBackup): Added.
+ (WebCore::excludeFromBackup): Added.
+
+ * platform/FileSystem.h: Added canExcludeFromBackup, excludeFromBackup,
+ and pathAsURL functions. Cleaned up ifdefs and comments a bit and sorted
+ things alphabetically, particularly platform-specific sections.
+
+ * platform/cf/FileSystemCF.cpp:
+ (WebCore::pathAsURL): Added.
+
+ * platform/mac/FileSystemMac.mm:
+ (WebCore::canExcludeFromBackup): Added.
+ (WebCore::excludeFromBackup): Added.
+
+ * platform/network/cf/FormDataStreamCFNet.cpp:
+ (WebCore::advanceCurrentStream): Changed to call pathAsURL.
+ * platform/network/mac/FormDataStreamMac.mm:
+ (WebCore::advanceCurrentStream): Ditto.
+
+2011-01-25 Helder Correia <helder@sencha.com>
+
+ Reviewed by Dirk Schulze.
+
+ REGRESSION(75139): SVG gradients are not applied to texts
+ https://bugs.webkit.org/show_bug.cgi?id=52531
+
+ CGContextConcatCTM should use the CGLayer context, not the
+ GraphicsContext. Also, the CTM needs to be adjusted (translated).
+ This fixes SVG text gradient fill.
+
+ Test: svg/css/composite-shadow-text.svg
+
+ * platform/graphics/cg/GraphicsContextCG.cpp:
+ (WebCore::GraphicsContext::fillRect):
+
+2011-01-25 Benjamin Kalman <kalman@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ Cannot extend or modify forward by word over a non-contenteditable region
+ https://bugs.webkit.org/show_bug.cgi?id=53070
+
+ Test: editing/selection/extend-forward-by-word-over-non-editable.html
+
+ Change all instances of honorEditableBoundaryAtOrAfter to honorEditableBoundaryAtOrBefore and vice versa in the
+ functions which determine the end/start of words/lines/sentences in visible_units.cpp.
+
+ This fixes the bug where moving forwards by a word over a non-contenteditable region would place the cursor
+ inside that region, and then get moved back to the start of the word due to honorEditableBoundaryAtOrBefore.
+ The cursor is now moved to the end of the region (which is effectively a noop in this case).
+
+ * editing/visible_units.cpp: Change all instances of honorEditableBoundaryAtOrAfter to
+ honorEditableBoundaryAtOrBefore and vice versa.
+ (WebCore::previousWordPosition):
+ (WebCore::nextWordPosition):
+ (WebCore::startOfLine):
+ (WebCore::endOfLine):
+ (WebCore::previousSentencePosition):
+ (WebCore::nextSentencePosition):
+ (WebCore::logicalStartOfLine):
+ (WebCore::logicalEndOfLine):
+
+2011-01-25 Yael Aharon <yael.aharon@nokia.com>
+
+ Unreviewed build fix.
+ After r76466, efsrv.lib is used unconditionally.
+ Don't guard it with ENABLE_NETSCAPE_PLUGIN_API.
+
+ * WebCore.pro:
+
+2011-01-24 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Style cleanup for WebGLRenderingContext
+ https://bugs.webkit.org/show_bug.cgi?id=52352
+
+ * html/canvas/WebGLBuffer.cpp:
+ * html/canvas/WebGLBuffer.h:
+ * html/canvas/WebGLObject.cpp:
+ * html/canvas/WebGLProgram.cpp:
+ * html/canvas/WebGLRenderbuffer.cpp:
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::create):
+ (WebCore::WebGLRenderingContext::blendFunc):
+ (WebCore::WebGLRenderingContext::createShader):
+ (WebCore::WebGLRenderingContext::deleteBuffer):
+ (WebCore::WebGLRenderingContext::deleteShader):
+ (WebCore::WebGLRenderingContext::deleteTexture):
+ (WebCore::WebGLRenderingContext::disableVertexAttribArray):
+ (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
+ (WebCore::WebGLRenderingContext::validateRenderingState):
+ (WebCore::WebGLRenderingContext::enableVertexAttribArray):
+ (WebCore::WebGLRenderingContext::getUniform):
+ (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
+ * html/canvas/WebGLRenderingContext.h:
+ * html/canvas/WebGLShader.cpp:
+ * html/canvas/WebGLTexture.cpp:
+ * html/canvas/WebGLUniformLocation.cpp:
+ * html/canvas/WebGLUniformLocation.h:
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * Configurations/FeatureDefines.xcconfig:
+ * DerivedSources.cpp:
+ * GNUmakefile.am:
+ * WebCore.pro:
+ * bindings/generic/RuntimeEnabledFeatures.h:
+ * bindings/js/JSArrayBufferCustom.cpp:
+ * bindings/js/JSCanvasRenderingContextCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ * bindings/js/JSDataViewCustom.cpp:
+ * bindings/js/JSDocumentCustom.cpp:
+ * bindings/js/JSFloat32ArrayCustom.cpp:
+ * bindings/js/JSHTMLCanvasElementCustom.cpp:
+ (WebCore::JSHTMLCanvasElement::getContext):
+ * bindings/js/JSInt16ArrayCustom.cpp:
+ * bindings/js/JSInt32ArrayCustom.cpp:
+ * bindings/js/JSInt8ArrayCustom.cpp:
+ * bindings/js/JSUint16ArrayCustom.cpp:
+ * bindings/js/JSUint32ArrayCustom.cpp:
+ * bindings/js/JSUint8ArrayCustom.cpp:
+ * bindings/js/JSWebGLRenderingContextCustom.cpp:
+ * bindings/js/JSXMLHttpRequestCustom.cpp:
+ (WebCore::JSXMLHttpRequest::markChildren):
+ (WebCore::JSXMLHttpRequest::send):
+ (WebCore::JSXMLHttpRequest::response):
+ * bindings/v8/custom/V8ArrayBufferCustom.cpp:
+ * bindings/v8/custom/V8ArrayBufferViewCustom.h:
+ * bindings/v8/custom/V8DataViewCustom.cpp:
+ * bindings/v8/custom/V8DocumentCustom.cpp:
+ (WebCore::V8Document::getCSSCanvasContextCallback):
+ * bindings/v8/custom/V8Float32ArrayCustom.cpp:
+ * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
+ (WebCore::V8HTMLCanvasElement::getContextCallback):
+ * bindings/v8/custom/V8Int16ArrayCustom.cpp:
+ * bindings/v8/custom/V8Int32ArrayCustom.cpp:
+ * bindings/v8/custom/V8Int8ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
+ * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
+ * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
+ * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
+ (WebCore::V8XMLHttpRequest::responseAccessorGetter):
+ (WebCore::V8XMLHttpRequest::sendCallback):
+ * features.pri:
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::getContext):
+ (WebCore::HTMLCanvasElement::reset):
+ * html/HTMLCanvasElement.h:
+ * html/canvas/ArrayBuffer.cpp:
+ * html/canvas/ArrayBuffer.idl:
+ * html/canvas/ArrayBufferView.cpp:
+ * html/canvas/ArrayBufferView.idl:
+ * html/canvas/DataView.cpp:
+ * html/canvas/DataView.idl:
+ * html/canvas/Float32Array.cpp:
+ * html/canvas/Float32Array.idl:
+ * html/canvas/Int16Array.cpp:
+ * html/canvas/Int16Array.idl:
+ * html/canvas/Int32Array.cpp:
+ * html/canvas/Int32Array.idl:
+ * html/canvas/Int8Array.cpp:
+ * html/canvas/Int8Array.idl:
+ * html/canvas/OESStandardDerivatives.cpp:
+ * html/canvas/OESStandardDerivatives.idl:
+ * html/canvas/OESTextureFloat.cpp:
+ * html/canvas/OESTextureFloat.idl:
+ * html/canvas/Uint16Array.cpp:
+ * html/canvas/Uint16Array.idl:
+ * html/canvas/Uint32Array.cpp:
+ * html/canvas/Uint32Array.idl:
+ * html/canvas/Uint8Array.cpp:
+ * html/canvas/Uint8Array.idl:
+ * html/canvas/WebGLActiveInfo.idl:
+ * html/canvas/WebGLBuffer.cpp:
+ * html/canvas/WebGLBuffer.idl:
+ * html/canvas/WebGLContextAttributes.cpp:
+ * html/canvas/WebGLContextAttributes.idl:
+ * html/canvas/WebGLContextEvent.idl:
+ * html/canvas/WebGLExtension.cpp:
+ * html/canvas/WebGLFramebuffer.cpp:
+ * html/canvas/WebGLFramebuffer.idl:
+ * html/canvas/WebGLGetInfo.cpp:
+ * html/canvas/WebGLObject.cpp:
+ * html/canvas/WebGLProgram.cpp:
+ * html/canvas/WebGLProgram.idl:
+ * html/canvas/WebGLRenderbuffer.cpp:
+ * html/canvas/WebGLRenderbuffer.idl:
+ * html/canvas/WebGLRenderingContext.cpp:
+ * html/canvas/WebGLRenderingContext.idl:
+ * html/canvas/WebGLShader.cpp:
+ * html/canvas/WebGLShader.idl:
+ * html/canvas/WebGLTexture.cpp:
+ * html/canvas/WebGLTexture.idl:
+ * html/canvas/WebGLUniformLocation.cpp:
+ * html/canvas/WebGLUniformLocation.idl:
+ * html/canvas/WebKitLoseContext.cpp:
+ * html/canvas/WebKitLoseContext.idl:
+ * page/DOMWindow.idl:
+ * platform/graphics/ANGLEWebKitBridge.cpp:
+ * platform/graphics/GraphicsContext3D.cpp:
+ * platform/graphics/cg/GraphicsContext3DCG.cpp:
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ * platform/graphics/gpu/mac/DrawingBufferMac.mm:
+ * platform/graphics/mac/GraphicsContext3DMac.mm:
+ * platform/graphics/mac/WebGLLayer.mm:
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
+ * platform/graphics/qt/Extensions3DQt.cpp:
+ * platform/graphics/qt/GraphicsContext3DQt.cpp:
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
+ (WebCore::GraphicsLayerQtImpl::paint):
+ (WebCore::GraphicsLayerQtImpl::flushChanges):
+ * platform/graphics/qt/GraphicsLayerQt.h:
+ * platform/graphics/skia/GraphicsContext3DSkia.cpp:
+ * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::isAcceleratedCanvas):
+ (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
+ (WebCore::RenderLayerBacking::containsPaintedContent):
+ (WebCore::RenderLayerBacking::contentChanged):
+ * webaudio/AudioBuffer.cpp:
+ * webaudio/AudioBuffer.idl:
+ * webaudio/RealtimeAnalyser.cpp:
+ * webaudio/RealtimeAnalyser.h:
+ * webaudio/RealtimeAnalyserNode.h:
+ * webaudio/RealtimeAnalyserNode.idl:
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::setResponseType):
+ (WebCore::XMLHttpRequest::clearResponse):
+ (WebCore::XMLHttpRequest::didReceiveData):
+ * xml/XMLHttpRequest.h:
+
+2011-01-25 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Chromium] Prepare for landing of detailed heap snapshots.
+
+ - Introduce Preferences.detailedHeapProfiles flag for controlling
+ querying of detailed heap snapshots.
+ - Add boilerplate code for the new view.
+ - Factor out common code.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52624
+
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * bindings/js/ScriptProfiler.h:
+ (WebCore::ScriptProfiler::HeapSnapshotControl::~HeapSnapshotControl):
+ (WebCore::ScriptProfiler::takeHeapSnapshot):
+ * bindings/v8/ScriptProfiler.cpp:
+ (WebCore::ScriptProfiler::takeHeapSnapshot):
+ * bindings/v8/ScriptProfiler.h:
+ (WebCore::ScriptProfiler::HeapSnapshotControl::~HeapSnapshotControl):
+ * inspector/Inspector.idl:
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
+ * inspector/InspectorProfilerAgent.h:
+ * inspector/front-end/DetailedHeapshotView.js: Added.
+ (WebInspector.DetailedHeapshotView):
+ (WebInspector.DetailedHeapshotView.prototype.get statusBarItems):
+ (WebInspector.DetailedHeapshotView.prototype.get profile):
+ (WebInspector.DetailedHeapshotView.prototype.set profile):
+ (WebInspector.DetailedHeapshotView.prototype.show):
+ (WebInspector.DetailedHeapshotView.prototype.hide):
+ (WebInspector.DetailedHeapshotProfileType):
+ (WebInspector.DetailedHeapshotProfileType.prototype.get buttonTooltip):
+ (WebInspector.DetailedHeapshotProfileType.prototype.get buttonStyle):
+ (WebInspector.DetailedHeapshotProfileType.prototype.buttonClicked):
+ (WebInspector.DetailedHeapshotProfileType.prototype.get welcomeMessage):
+ (WebInspector.DetailedHeapshotProfileType.prototype.createSidebarTreeElementForProfile):
+ (WebInspector.DetailedHeapshotProfileType.prototype.createView):
+ * inspector/front-end/HeapSnapshot.js: Added.
+ (WebInspector.HeapSnapshotEdgesIterator):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get done):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get isElement):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get isHidden):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get name):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.next):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get node):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype.get nodeIndex):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype._getNameOrIndex):
+ (WebInspector.HeapSnapshotEdgesIterator.prototype._getType):
+ (WebInspector.HeapSnapshotNodeWrapper):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get edges):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get edgesCount):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get instancesCount):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get isHidden):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get name):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype.get selfSize):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype._getName):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype._getEdges):
+ (WebInspector.HeapSnapshotNodeWrapper.prototype._getType):
+ (WebInspector.HeapSnapshot):
+ (WebInspector.HeapSnapshot.prototype._init):
+ (WebInspector.HeapSnapshot.prototype.get rootEdges):
+ * inspector/front-end/HeapSnapshotView.js:
+ (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel.prototype._setRecordingProfile):
+ (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
+ (WebInspector.ProfilerDispatcher.prototype.setRecordingProfile):
+ (WebInspector.ProfilerDispatcher.prototype.reportHeapSnapshotProgress):
+ * inspector/front-end/Settings.js:
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.html:
+ * inspector/front-end/inspector.js:
+ (WebInspector._createPanels):
+
+2011-01-25 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove "attached" state related methods from InspectorAgent
+ https://bugs.webkit.org/show_bug.cgi?id=53086
+
+ * WebCore.exp.in:
+ * inspector/InspectorAgent.cpp:
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorFrontendClientLocal.cpp:
+ (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
+ (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
+ * inspector/InspectorSettings.cpp:
+ (WebCore::InspectorSettings::InspectorSettings):
+ * inspector/InspectorSettings.h:
+
+2011-01-25 Qi Zhang <qi.2.zhang@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Symbian] RVCT fails to compile [U|I]nt[8|16|32]Array.h
+ https://bugs.webkit.org/show_bug.cgi?id=51873
+
+ Replace the using declaration, because it doesn't compile on RVCT, and WINSCW has the same issue.
+ No new functionality so no new tests.
+
+ * html/canvas/Int32Array.h:
+ (WebCore::Int32Array::set):
+ * html/canvas/Int8Array.h:
+ (WebCore::Int8Array::set):
+ * html/canvas/Uint16Array.h:
+ (WebCore::Uint16Array::set):
+ * html/canvas/Uint32Array.h:
+ (WebCore::Uint32Array::set):
+ * html/canvas/Uint8Array.h:
+ (WebCore::Uint8Array::set):
+
+2011-01-25 Zoltan Herczeg <zherczeg@webkit.org>
+
+ Reviewed by Dirk Schulze.
+
+ Repaint SVG elements with filter instead of relayout where possible
+ https://bugs.webkit.org/show_bug.cgi?id=52200
+
+ This patch allows repainting of filters, when their
+ attribute changes does not require relayout.
+
+ Existing dynamic-update tests cover this feature.
+
+ * platform/graphics/filters/FilterEffect.cpp:
+ (WebCore::FilterEffect::clearResult): Clearing the currently stored image
+ before repainting.
+ * platform/graphics/filters/FilterEffect.h:
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::isSVGResourceFilter): Not only the filter primitives,
+ but filters should also be detected to allow safe testing and casting.
+ * rendering/svg/RenderSVGResourceFilter.cpp:
+ (WebCore::RenderSVGResourceFilter::buildPrimitives): Passing the renderer.
+ (WebCore::RenderSVGResourceFilter::applyResource):
+ determineFilterPrimitiveSubregion does not require the filter anymore.
+ (WebCore::RenderSVGResourceFilter::postApplyResource): Repaint
+ if lastEffect->hasResult() is false.
+ (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
+ Searching for all FilterEffects, whose created by the current FilterElement,
+ and clearing all resulting images depending on those FilterEffects.
+ * rendering/svg/RenderSVGResourceFilter.h:
+ (WebCore::RenderSVGResourceFilter::isSVGResourceFilter):
+ * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
+ (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
+ The filter argument is unnecessary anymore. But is is still kept as a static
+ member, since the primitive renderer still does not know about the
+ FilterEffect objects.
+ * rendering/svg/RenderSVGResourceFilterPrimitive.h:
+ (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
+ (WebCore::RenderSVGResourceFilterPrimitive::primitiveAttributeChanged):
+ Calls RenderSVGResourceFilter::primitiveAttributeChanged.
+ * svg/SVGFEDiffuseLightingElement.cpp:
+ (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
+ Setting the new attribute value for each FilterEffect.
+ (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
+ * svg/SVGFEDiffuseLightingElement.h:
+ Calling primitiveAttributeChanged.
+ * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+ (WebCore::SVGFilterPrimitiveStandardAttributes::setFilterEffectAttribute):
+ This function will be removed when all FilterElement implements
+ their setFilterEffectAttribute
+ * svg/SVGFilterPrimitiveStandardAttributes.h:
+ (WebCore::SVGFilterPrimitiveStandardAttributes::primitiveAttributeChanged):
+ * svg/graphics/filters/SVGFilterBuilder.cpp:
+ (WebCore::SVGFilterBuilder::appendEffectToEffectReferences): The
+ renderers are assigned to the filter effects.
+ (WebCore::SVGFilterBuilder::clearEffects):
+ (WebCore::SVGFilterBuilder::clearResultsRecursive): Recursively
+ clearing the result images for those filters, whose depend on
+ the starting filter.
+ * svg/graphics/filters/SVGFilterBuilder.h:
+ (WebCore::SVGFilterBuilder::effectReferences): 'get' is unnecessary
+ (WebCore::SVGFilterBuilder::effectByRenderer): returns the
+ FilterEffect belongs to this RenderObject.
+
+2011-01-25 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVG is missing to-animation support for Path
+ https://bugs.webkit.org/show_bug.cgi?id=52982
+
+ SVG was missing 'to' animation support for SVG paths. Even the fallback to discrete
+ animation did not work and an assert was thrown, because of the missing m_fromPath.
+ This also influences a test of the W3C test suite. Subtest 2 of animate-elem-83-t.svg passes now.
+
+ Test: svg/animations/animate-path-to-animation.html
+
+ * svg/SVGAnimateElement.cpp:
+ (WebCore::SVGAnimateElement::calculateAnimatedValue): Take the value of the last SVGAnimateElement for
+ m_fromPath, since 'to' animations are accumulative.
+ (WebCore::SVGAnimateElement::calculateFromAndToValues): Added support for 'to' animations.
+ (WebCore::SVGAnimateElement::resetToBaseValue): Set m_animatedPath on the first animation element to baseVal.
+ * svg/SVGPathByteStream.h:
+ (WebCore::SVGPathByteStream::copySVGPathByteStream): Return copy of current byte stream.
+
+2011-01-25 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: bind resources to URLs upon adding them into the tree.
+ https://bugs.webkit.org/show_bug.cgi?id=53013
+
+ * inspector/front-end/AuditRules.js:
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
+ * inspector/front-end/CSSStyleModel.js:
+ (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
+ (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
+ * inspector/front-end/DebuggerModel.js:
+ (WebInspector.DebuggerModel.prototype._parsedScriptSource):
+ * inspector/front-end/NetworkManager.js:
+ (WebInspector.NetworkManager.prototype._processCachedResources):
+ (WebInspector.NetworkManager.prototype.inflightResourceForURL):
+ (WebInspector.NetworkDispatcher):
+ (WebInspector.NetworkDispatcher.prototype.willSendRequest):
+ (WebInspector.NetworkDispatcher.prototype.markResourceAsCached):
+ (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
+ (WebInspector.NetworkDispatcher.prototype.didReceiveContentLength):
+ (WebInspector.NetworkDispatcher.prototype.didFinishLoading):
+ (WebInspector.NetworkDispatcher.prototype.didFailLoading):
+ (WebInspector.NetworkDispatcher.prototype.willSendWebSocketHandshakeRequest):
+ (WebInspector.NetworkDispatcher.prototype.didReceiveWebSocketHandshakeResponse):
+ (WebInspector.NetworkDispatcher.prototype.didCloseWebSocket):
+ (WebInspector.NetworkDispatcher.prototype._appendRedirect):
+ (WebInspector.NetworkDispatcher.prototype._startResource):
+ (WebInspector.NetworkDispatcher.prototype._finishResource):
+ (WebInspector.NetworkDispatcher.prototype._createResource):
+ * inspector/front-end/ResourceTreeModel.js:
+ (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
+ (WebInspector.ResourceTreeModel.prototype._bindResourceURL):
+ (WebInspector.ResourceTreeModel.prototype._clearResources):
+ (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
+ (WebInspector.ResourcesPanel.prototype.showSourceLine):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._parsedScriptSource):
+ (WebInspector.ScriptsPanel.prototype._addScript):
+
+2011-01-25 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ Use accurate floating-point metrics for SVG Font calculations instead of casting float -> integer.
+ This hopefully fixes differences between 32/64 bit bots.
+
+ Needs new layout test results for several platforms, which need to be taken from the bots landing afterwards.
+
+ * platform/graphics/SimpleFontData.cpp:
+ (WebCore::SimpleFontData::SimpleFontData):
+ (WebCore::SimpleFontData::initCharWidths):
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: debugger and browser debugger agents should manage sticky breakpoints independently.
+ https://bugs.webkit.org/show_bug.cgi?id=52999
+
+ * inspector/Inspector.idl:
+ * inspector/InspectorAgent.cpp:
+ (WebCore::InspectorAgent::didCommitLoad):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::inspectedURLWithoutFragment):
+ * inspector/InspectorAgent.h:
+ * inspector/InspectorBrowserDebuggerAgent.cpp:
+ (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
+ (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
+ (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
+ * inspector/InspectorBrowserDebuggerAgent.h:
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::setAllJavaScriptBreakpoints):
+ (WebCore::InspectorDebuggerAgent::inspectedURLChanged):
+ (WebCore::InspectorDebuggerAgent::restoreBreakpoints):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorState.cpp:
+ (WebCore::InspectorState::InspectorState):
+ * inspector/InspectorState.h:
+ * inspector/front-end/BreakpointManager.js:
+ (WebInspector.BreakpointManager):
+ (WebInspector.BreakpointManager.prototype._projectChanged):
+ (WebInspector.BreakpointManager.prototype._saveBreakpoints):
+ (WebInspector.BreakpointManager.prototype._pushBreakpointsToBackend):
+
+2011-01-25 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Crash in some pages containing flash
+ https://bugs.webkit.org/show_bug.cgi?id=53016
+
+ Flash plugin can produce X errors that are handled by the GDK X
+ error handler, which exits the process. Since we don't want to
+ crash due to flash bugs, we install a custom error handler to show
+ a warning when a X error happens without aborting.
+
+ * plugins/gtk/PluginPackageGtk.cpp:
+ (WebCore::webkitgtkXError):
+ (WebCore::PluginPackage::load):
+
+2011-01-25 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Implement spin buttons in RenderThemeGtk
+ https://bugs.webkit.org/show_bug.cgi?id=51454
+
+ Paint inner up/down buttons for spin button elements when building
+ with GTK+ 3.x.
+
+ Test results will land with the GTK+ 2.x version of this patch.
+
+ * platform/gtk/RenderThemeGtk.h:
+ * platform/gtk/RenderThemeGtk2.cpp:
+ (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
+ (WebCore::RenderThemeGtk::paintInnerSpinButton):
+ * platform/gtk/RenderThemeGtk3.cpp:
+ (WebCore::spinButtonArrowSize):
+ (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
+ (WebCore::paintSpinArrowButton):
+ (WebCore::RenderThemeGtk::paintInnerSpinButton):
+
+2011-01-24 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed. Missed move of one m_deleted use to be outside NDEBUG block
+ in r76575.
+
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::~CachedResource):
+
+2011-01-24 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Add runtime checks for invariants in memory cache
+ https://bugs.webkit.org/show_bug.cgi?id=53059
+
+ To help track down bug 53045, add some CRASH calls in addition to
+ ASSERTs, so that we can track down failures in reliability bots.
+
+ Just some checks, no new tests necessary.
+
+ * css/CSSImageValue.cpp:
+ (WebCore::CSSImageValue::cachedImage):
+ * loader/cache/CachedResource.h:
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::~CachedResource):
+
+2011-01-24 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Leaking CSSRuleDataList objects
+ https://bugs.webkit.org/show_bug.cgi?id=53062
+
+ Fix leaked CSSRuleDataLists added to the m_pseudoRules hash.
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSRuleSet::~CSSRuleSet):
+
+2011-01-24 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Refcount Images used in rendering code
+ https://bugs.webkit.org/show_bug.cgi?id=52701
+
+ Change StyleImage::image(RenderObject*, const IntSize&) and
+ CSSImageGeneratorValue::image(RenderObject*, const IntSize&) to
+ return PassRefPtr<Image>, and adjust other code accordingly.
+
+ This allows us to return one-time images, for example for CSS gradients
+ whose appearance may change depending on factors other than the renderer
+ and the destination size.
+
+ * css/CSSCanvasValue.cpp:
+ (WebCore::CSSCanvasValue::image):
+ * css/CSSCanvasValue.h:
+ * css/CSSGradientValue.cpp:
+ (WebCore::CSSGradientValue::image):
+ * css/CSSGradientValue.h:
+ * css/CSSImageGeneratorValue.h:
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintFillLayerExtended):
+ (WebCore::RenderBoxModelObject::paintNinePieceImage):
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::paintReplaced):
+ (WebCore::RenderImage::paintIntoRect):
+ * rendering/RenderImageResource.h:
+ (WebCore::RenderImageResource::image):
+ * rendering/RenderImageResourceStyleImage.h:
+ (WebCore::RenderImageResourceStyleImage::image):
+ * rendering/RenderListMarker.cpp:
+ (WebCore::RenderListMarker::paint):
+ * rendering/style/StyleCachedImage.cpp:
+ (WebCore::StyleCachedImage::image):
+ * rendering/style/StyleCachedImage.h:
+ * rendering/style/StyleGeneratedImage.cpp:
+ (WebCore::StyleGeneratedImage::image):
+ * rendering/style/StyleGeneratedImage.h:
+ * rendering/style/StyleImage.h:
+ * rendering/style/StylePendingImage.h:
+ (WebCore::StylePendingImage::image):
+ * rendering/svg/RenderSVGImage.cpp:
+ (WebCore::RenderSVGImage::paint):
+
+2011-01-24 Tony Chang <tony@chromium.org>
+
+ Unreviewed, round ascent and descent to match old code.
+
+ * platform/graphics/chromium/SimpleFontDataLinux.cpp:
+ (WebCore::SimpleFontData::platformInit):
+
+2011-01-24 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Chris Marrin.
+
+ perspective() transform function should take lengths
+ https://bugs.webkit.org/show_bug.cgi?id=52683
+
+ The argument to the perspective() transform function should
+ be a Length, rather than a bare number. Bare numbers are still
+ accepted (and treated as px), but this behavior is deprecated.
+
+ Test: animations/3d/transform-perspective.html
+ transforms/3d/general/3dtransform-values.html
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseTransform): Check the units for the perspective()
+ function. Allow bare numbers for backwards compatibility.
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::createTransformOperations): Convert
+ value to Length.
+ * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
+ (WebCore::clampToPostiveInteger): Helper.
+ (WebCore::PerspectiveTransformOperation::blend): Blend via Lengths.
+ * platform/graphics/transforms/PerspectiveTransformOperation.h:
+ (WebCore::PerspectiveTransformOperation::create): double -> Length.
+ (WebCore::PerspectiveTransformOperation::perspective): Ditto.
+ (WebCore::PerspectiveTransformOperation::isIdentity): Ditto.
+ (WebCore::PerspectiveTransformOperation::apply): Ditto.
+ (WebCore::PerspectiveTransformOperation::PerspectiveTransformOperation): Assert
+ that the Length is a fixed type.
+
+2011-01-24 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Windows] Textfield <input>s have different widths.
+ https://bugs.webkit.org/show_bug.cgi?id=48405
+
+ - Apply the padding override for type=text to other textfield types too.
+ - Reset margin value of outer spin button, which is not used in Windows.
+ - Don't add inner spin button width to the preferred text field width.
+ Text fields should have the identical widths regardless of the
+ existence of spin buttons.
+
+ Test: fast/forms/input-widths.html
+
+ * css/themeWin.css:
+ (input[type="week"]):
+ (input[type="week"]:disabled):
+ (input[type="search"]::-webkit-search-cancel-button):
+ (input::-webkit-outer-spin-button):
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::preferredContentWidth):
+ Don't add inner spin button width to the preferred width.
+
+2011-01-24 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Some bugs of search cancel button and spin button about state change in
+ an event handler.
+ https://bugs.webkit.org/show_bug.cgi?id=46950
+
+ Fix the following problems:
+ * Type=search field didn't release event capturing
+ * Assertion failure when an input field with spin buttons was changed
+ to another type on focus event.
+ * A input field with spin button didn't release event capturing when it
+ was changed to another type on focus event.
+
+ Tests: fast/forms/input-number-change-type-on-focus.html
+ fast/forms/search-hide-cancel-on-cancel.html
+
+ * rendering/TextControlInnerElements.cpp:
+ (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
+ - Make the variable 'input' RefPtr. It makes the code simpler.
+ - Remove visibility check on mouseup event. We should release capturing
+ anyway because the cancel button may be invisible if JavaScript code
+ called by the focus event removes the input value.
+ (WebCore::SpinButtonElement::detach):
+ - Release capturing on detach because it is possible that a spin button
+ node is detached while it is capturing events.
+ (WebCore::SpinButtonElement::defaultEventHandler):
+ Take a reference to this and check renderer() after some functions which
+ may run JavaScript code.
+ (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
+ Make the variable 'input' RefPtr to align other functions in this file.
+ (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): ditto.
+ * rendering/TextControlInnerElements.h: Declare SpinButtonElement::detach().
+
+2011-01-24 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Ojan Vafai.
+
+ Inserting multiple whitespace using text composition (IME) should insert interleaved nbsp and whitespace.
+ https://bugs.webkit.org/show_bug.cgi?id=52781
+
+ The bug was caused by stringWithRebalancedWhitespace's replacing the space at the beginning of a paragraph
+ and the end of a paragraph by a non-breaking space after it replaced two consecutive spaces by a space and
+ non-breaking space pattern, thereby replacing more spaces by non-breaking spaces than needed.
+
+ Rewrote the function using Vector<UChar> to fix the bug. New function no longer calls String::replace
+ multiple times but instead it traverses through the string and replaces a space that immediately follows
+ another space or appears at the beginning of a paragraph or at the end of a paragraph by a non-break space.
+
+ * editing/CompositeEditCommand.cpp:
+ * editing/htmlediting.cpp:
+ (WebCore::stringWithRebalancedWhitespace): Written.
+ * editing/htmlediting.h:
+ (WebCore::isWhitespace): Removed from CompositeEditCommand.cpp
+
+2011-01-24 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Web Audio API: port FFTFrame to FFTW
+ https://bugs.webkit.org/show_bug.cgi?id=52989
+
+ Ported FFTFrame class to the open-source FFTW library. Tested with
+ unit tests from Chris Rogers. Made preliminary changes to GYP
+ files for conditional compilation of these files; will need to be
+ adjusted once FFTW is integrated as third-party source.
+
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.gypi:
+ * platform/audio/FFTFrame.h:
+ * platform/audio/fftw: Added.
+ * platform/audio/fftw/FFTFrameFFTW.cpp: Added.
+ (WebCore::FFTFrame::FFTFrame):
+ (WebCore::FFTFrame::~FFTFrame):
+ (WebCore::FFTFrame::multiply):
+ (WebCore::FFTFrame::doFFT):
+ (WebCore::FFTFrame::doInverseFFT):
+ (WebCore::FFTFrame::cleanup):
+ (WebCore::FFTFrame::realData):
+ (WebCore::FFTFrame::imagData):
+ (WebCore::FFTFrame::fftwPlanForSize):
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Reset the page scale factor on standard frame loads
+ https://bugs.webkit.org/show_bug.cgi?id=53058
+ <rdar://problem/8908844>
+
+ Add a symbol needed by WebKit2.
+
+ * WebCore.exp.in:
+
+2011-01-24 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Stop instantiating legacy editing positions in InsertTextCommand, MoveSelectionCommand,
+ ReplaceSelectionCommand, SelectionController, SpellChecker, TypingCommand, and markup.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=52676
+
+ Stop instantiating legacy editing positions in the following files.
+
+ * editing/InsertTextCommand.cpp:
+ (WebCore::InsertTextCommand::prepareForTextInsertion):
+ (WebCore::InsertTextCommand::performTrivialReplace):
+ (WebCore::InsertTextCommand::input):
+ (WebCore::InsertTextCommand::insertTab):
+ * editing/MoveSelectionCommand.cpp:
+ (WebCore::MoveSelectionCommand::doApply):
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
+ (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded):
+ (WebCore::ReplaceSelectionCommand::doApply):
+ (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR):
+ (WebCore::ReplaceSelectionCommand::performTrivialReplace):
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::setSelectionFromNone):
+ * editing/SpellChecker.cpp:
+ (WebCore::SpellChecker::didCheck):
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::makeEditableRootEmpty):
+ (WebCore::TypingCommand::deleteKeyPressed):
+ (WebCore::TypingCommand::forwardDeleteKeyPressed):
+ * editing/markup.cpp:
+ (WebCore::StyledMarkupAccumulator::appendText):
+ (WebCore::StyledMarkupAccumulator::serializeNodes):
+ (WebCore::highestAncestorToWrapMarkup):
+ (WebCore::createMarkup):
+
+2011-01-24 Peter Kasting <pkasting@google.com>
+
+ Reviewed by Darin Adler.
+
+ Roll back r67261 ("Don't fire onclick on middle clicks") due to
+ regressions.
+ https://bugs.webkit.org/show_bug.cgi?id=46733
+
+ * html/HTMLAnchorElement.cpp:
+ (WebCore::isLinkClick):
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::preDispatchEventHandler):
+ (WebCore::HTMLInputElement::postDispatchEventHandler):
+ (WebCore::HTMLInputElement::defaultEventHandler):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleMouseDoubleClickEvent):
+ (WebCore::EventHandler::handleMouseReleaseEvent):
+
+2011-01-24 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Eric Seidel.
+
+ [GTK] Many DOM XHTML tests time out
+ https://bugs.webkit.org/show_bug.cgi?id=52553
+
+ Properly handle the situation where a synchronous load fails before the inner
+ event loop has started. In this case, we simply do not run the inner event loop,
+ or else it will block indefinitely (since no GIO or libsoup callbacks will fire).
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Bail out of a synchronous
+ load if it fails up front.
+
+2011-01-24 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Eric Seidel.
+
+ Cleanup WebGLGetInfo and related get*Parameter helpers in WebGLRenderingContext
+ https://bugs.webkit.org/show_bug.cgi?id=52338
+
+ Removed the long/unsigned long types and corresponding get functions
+ and use int/unsigned int instead.
+
+ * bindings/js/JSWebGLRenderingContextCustom.cpp:
+ (WebCore::toJS):
+ * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
+ (WebCore::toV8Object):
+ * html/canvas/WebGLGetInfo.cpp:
+ (WebCore::WebGLGetInfo::WebGLGetInfo):
+ (WebCore::WebGLGetInfo::getInt):
+ (WebCore::WebGLGetInfo::getUnsignedInt):
+ * html/canvas/WebGLGetInfo.h:
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::getBufferParameter):
+ (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
+ (WebCore::WebGLRenderingContext::getParameter):
+ (WebCore::WebGLRenderingContext::getProgramParameter):
+ (WebCore::WebGLRenderingContext::getRenderbufferParameter):
+ (WebCore::WebGLRenderingContext::getShaderParameter):
+ (WebCore::WebGLRenderingContext::getTexParameter):
+ (WebCore::WebGLRenderingContext::getUniform):
+ (WebCore::WebGLRenderingContext::getVertexAttrib):
+ (WebCore::WebGLRenderingContext::getIntParameter):
+ (WebCore::WebGLRenderingContext::getUnsignedIntParameter):
+ * html/canvas/WebGLRenderingContext.h:
+
+2011-01-24 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Darin Adler.
+
+ Remove sizeInBytes from GraphicsContext3D's various implementations
+ https://bugs.webkit.org/show_bug.cgi?id=52339
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::sizeInBytes):
+ * platform/graphics/GraphicsContext3D.h:
+ * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
+ * platform/graphics/qt/GraphicsContext3DQt.cpp:
+
+2011-01-24 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * WebCore.vcproj/WebCore.make: Update for move of WebCore into Source.
+
+2011-01-24 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ [v8] Refactoring: extract IntrusiveDOMWrapperMap into a seprate class and files.
+ https://bugs.webkit.org/show_bug.cgi?id=52911
+
+ Plain refactoring, covered by the existing tests.
+
+ * WebCore.gypi: IntrusiveDOMWrapperMap.h added.
+ * bindings/v8/DOMDataStore.cpp: IntrusiveDOMWrapperMap is moved out of DOMDataStore class.
+ * bindings/v8/DOMDataStore.h: IntrusiveDOMWrapperMap is moved out of DOMDataStore class.
+ * bindings/v8/IntrusiveDOMWrapperMap.h: Added.
+ (WebCore::ChunkedTable::ChunkedTable):
+ (WebCore::ChunkedTable::add):
+ (WebCore::ChunkedTable::remove):
+ (WebCore::ChunkedTable::clear):
+ (WebCore::ChunkedTable::visit):
+ (WebCore::ChunkedTable::Chunk::Chunk):
+ (WebCore::ChunkedTable::clearEntries):
+ (WebCore::ChunkedTable::visitEntries):
+ (WebCore::IntrusiveDOMWrapperMap::IntrusiveDOMWrapperMap):
+ (WebCore::IntrusiveDOMWrapperMap::get):
+ (WebCore::IntrusiveDOMWrapperMap::set):
+ (WebCore::IntrusiveDOMWrapperMap::contains):
+ (WebCore::IntrusiveDOMWrapperMap::visit):
+ (WebCore::IntrusiveDOMWrapperMap::removeIfPresent):
+ (WebCore::IntrusiveDOMWrapperMap::clear):
+ (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::move):
+ (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::clear):
+ (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::visit):
+ * bindings/v8/StaticDOMDataStore.h: include added.
+
+2011-01-24 Shane Stephens <shanestephens@google.com>
+
+ Reviewed by Chris Marrin.
+
+ TransformationMatrix multiply operations apply operands in wrong order.
+ https://bugs.webkit.org/show_bug.cgi?id=52780
+
+ Rename TranformationMatrix::multLeft into multiply (the method does a multRight,
+ not a multLeft).
+
+ Remove TransformationMatrix::multiply, which was actually doing a multLeft.
+
+ Fix TransformationMatrix::operator* and operator*= such that the operand is
+ applied to the right-hand side of the matrix that the method is called on.
+ i.e., previously "a * b" used to compute "b * a", and "a *= b" used to store
+ "b * a" in "a". This has now been fixed so "a * b" computes "a * b" and
+ "a *= b" stores "a * b" in "a".
+
+ Convert all call sites for these methods to provide operands in the correct order.
+
+ No new tests as patch adds no new functionality.
+
+ * css/WebKitCSSMatrix.cpp:
+ (WebCore::WebKitCSSMatrix::multiply):
+ * platform/graphics/transforms/Matrix3DTransformOperation.h:
+ (WebCore::Matrix3DTransformOperation::apply):
+ * platform/graphics/transforms/MatrixTransformOperation.h:
+ (WebCore::MatrixTransformOperation::apply):
+ * platform/graphics/transforms/TransformationMatrix.cpp:
+ (WebCore::TransformationMatrix::scaleNonUniform):
+ (WebCore::TransformationMatrix::scale3d):
+ (WebCore::TransformationMatrix::rotate3d):
+ (WebCore::TransformationMatrix::skew):
+ (WebCore::TransformationMatrix::applyPerspective):
+ (WebCore::TransformationMatrix::multiply):
+ (WebCore::TransformationMatrix::recompose):
+ * platform/graphics/transforms/TransformationMatrix.h:
+ (WebCore::TransformationMatrix::operator*=):
+ (WebCore::TransformationMatrix::operator*):
+ * rendering/RenderLayer.cpp:
+ (WebCore::transparencyClipBox):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::getTransformFromContainer):
+ * rendering/TransformState.cpp:
+ (WebCore::TransformState::applyTransform):
+ (WebCore::HitTestingTransformState::applyTransform):
+
+2011-01-24 Andrei Popescu <andreip@google.com>
+
+ Reviewed by Nate Chapin.
+
+ IndexedDatabase methods should not take arguments of type OptionsObject
+ https://bugs.webkit.org/show_bug.cgi?id=53012
+
+ This patch reverts all IDB methods, except IDBDatabase::createObjectStore and
+ IDBObjectStore::createIndex, to using a plain list of arguments instead of
+ grouping the various parameters inside a single OptionsObject argument.
+ This decision was made on public-webapps@w3.org mailing list.
+
+ We also add support (v8 only for now) for passing DOMStringList objects as arguments to native
+ methods. The code for obtaining a DOMStringList object from a JS array of strings existed already
+ in OptionsObject.cpp, I just copied it to V8Bindings.cpp and taught the v8 code generator how to
+ use it.
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/v8/V8Binding.cpp:
+ (WebCore::v8ValueToWebCoreDOMStringList):
+ * bindings/v8/V8Binding.h:
+ * storage/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::transaction):
+ * storage/IDBDatabase.h:
+ (WebCore::IDBDatabase::transaction):
+ * storage/IDBDatabase.idl:
+ * storage/IDBIndex.cpp:
+ (WebCore::IDBIndex::openCursor):
+ (WebCore::IDBIndex::openKeyCursor):
+ * storage/IDBIndex.h:
+ (WebCore::IDBIndex::openCursor):
+ (WebCore::IDBIndex::openKeyCursor):
+ * storage/IDBIndex.idl:
+ * storage/IDBObjectStore.cpp:
+ (WebCore::IDBObjectStore::openCursor):
+ * storage/IDBObjectStore.h:
+ (WebCore::IDBObjectStore::openCursor):
+ * storage/IDBObjectStore.idl:
+
+2011-01-24 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: extract dispatch API from network manager.
+ https://bugs.webkit.org/show_bug.cgi?id=53009
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/front-end/NetworkManager.js:
+ (WebInspector.NetworkManager):
+ (WebInspector.NetworkManager.prototype.reset):
+ (WebInspector.NetworkManager.prototype.requestContent):
+ (WebInspector.NetworkManager.prototype._processCachedResources):
+ (WebInspector.NetworkDispatcher):
+ (WebInspector.NetworkDispatcher.prototype._updateResourceWithRequest):
+ (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
+ (WebInspector.NetworkDispatcher.prototype._updateResourceWithCachedResource):
+ (WebInspector.NetworkDispatcher.prototype.identifierForInitialRequest):
+ (WebInspector.NetworkDispatcher.prototype.willSendRequest):
+ (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
+ (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
+ (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
+ (WebInspector.NetworkDispatcher.prototype.didCreateWebSocket):
+ (WebInspector.NetworkDispatcher.prototype._appendRedirect):
+ (WebInspector.NetworkDispatcher.prototype._startResource):
+ (WebInspector.NetworkDispatcher.prototype._updateResource):
+ (WebInspector.NetworkDispatcher.prototype._finishResource):
+ (WebInspector.NetworkDispatcher.prototype._addFramesRecursively):
+ (WebInspector.NetworkDispatcher.prototype._dispatchEventToListeners):
+ (WebInspector.NetworkDispatcher.prototype._createResource):
+ * inspector/front-end/Resource.js:
+ (WebInspector.Resource.prototype._innerRequestContent):
+ * inspector/front-end/ResourceTreeModel.js:
+ (WebInspector.ResourceTreeModel):
+ (WebInspector.ResourceTreeModel.prototype.reset):
+ (WebInspector.ResourceTreeModel.prototype.unbindResourceURL):
+
+2011-01-24 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [JSC] remove ScriptDebugServer::pageCreated
+ https://bugs.webkit.org/show_bug.cgi?id=53007
+
+ It's impossible to create "provisional" inspector for pages which are
+ not yet created so there is no need to listen for page creation in ScriptDebugServer.
+
+ * bindings/js/ScriptDebugServer.cpp:
+ * bindings/js/ScriptDebugServer.h:
+ * page/Page.cpp:
+ (WebCore::Page::Page):
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [REGRESSION] AppCache view on resources panel is broken.
+ https://bugs.webkit.org/show_bug.cgi?id=53002
+
+
+ * inspector/front-end/ApplicationCacheItemsView.js:
+ (WebInspector.ApplicationCacheItemsView.prototype._update):
+ * inspector/front-end/DOMAgent.js:
+ (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
+
+2011-01-24 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Fix warnings about unregistering an invalid timer
+ https://bugs.webkit.org/show_bug.cgi?id=53006
+
+ The ShadowBuffer's purge timer ID was initialized with 0 which lead
+ to us calling QObject::killTimer(0), causing some qWarnings.
+
+ * platform/graphics/qt/ContextShadowQt.cpp:
+ (WebCore::ShadowBuffer::ShadowBuffer):
+ (WebCore::ShadowBuffer::schedulePurge):
+
+2011-01-21 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Chromium] Fix heap snapshot table sorting.
+
+ Fix table sorting to avoid qsort instability artefacts.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52914
+
+ * inspector/front-end/HeapSnapshotView.js:
+ (WebInspector.HeapSnapshotView.prototype._sortData):
+ (WebInspector.HeapSnapshotDataGridList.propertyComparator.comparator):
+ (WebInspector.HeapSnapshotDataGridList.propertyComparator):
+
+2011-01-24 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Find duplicate strings in localizedStrings.js, update it.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53005
+
+ * English.lproj/localizedStrings.js:
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Unreviewed, build fix for r76509.
+
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::setBreakpoint):
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Unreviewed, build fix for r76509.
+
+ * bindings/js/ScriptDebugServer.h:
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: set breakpoints by line:column.
+ https://bugs.webkit.org/show_bug.cgi?id=52615
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::setBreakpoint):
+ (WebCore::ScriptDebugServer::removeBreakpoint):
+ (WebCore::ScriptDebugServer::hasBreakpoint):
+ (WebCore::ScriptDebugServer::clearBreakpoints):
+ * bindings/js/ScriptDebugServer.h:
+ * bindings/v8/DebuggerScript.js:
+ ():
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::setBreakpoint):
+ * bindings/v8/ScriptDebugServer.h:
+ * inspector/Inspector.idl:
+ * inspector/InspectorBrowserDebuggerAgent.cpp:
+ (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::setStickyBreakpoint):
+ (WebCore::InspectorDebuggerAgent::setBreakpoint):
+ (WebCore::InspectorDebuggerAgent::restoreBreakpoint):
+ (WebCore::InspectorDebuggerAgent::didParseSource):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/ScriptBreakpoint.cpp: Removed.
+ * inspector/ScriptBreakpoint.h:
+ (WebCore::ScriptBreakpoint::ScriptBreakpoint):
+ * inspector/front-end/Breakpoint.js:
+ (WebInspector.Breakpoint):
+ (WebInspector.Breakpoint.prototype.get url):
+ * inspector/front-end/BreakpointManager.js:
+ (WebInspector.JavaScriptBreakpoint.prototype._serializeToJSON):
+ * inspector/front-end/DebuggerModel.js:
+ (WebInspector.DebuggerModel.prototype.continueToLine):
+ (WebInspector.DebuggerModel.prototype.setBreakpoint):
+ (WebInspector.DebuggerModel.prototype._breakpointSetOnBackend):
+ (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
+
+2011-01-24 Peter Beverloo <peter@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: recognize application/x-font-woff as a valid mime-type.
+ https://bugs.webkit.org/show_bug.cgi?id=52977
+
+ No new tests.
+
+ * inspector/front-end/inspector.js:
+
+2011-01-24 Pavel Podivilov <podivilov@chromium.org>
+
+ Unreviewed, fix for r76497.
+
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel.prototype.show):
+
+2011-01-24 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Use rad2deg() from WTF instead of rolling our own.
+ https://bugs.webkit.org/show_bug.cgi?id=52993
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContext::rotate):
+ * platform/graphics/qt/PathQt.cpp:
+ (WebCore::Path::addArc):
+
+2011-01-24 Sergio Villar Senin <svillar@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] ResourceHandleSoup: do not wait for streams to close to issue didFinishLoading
+ https://bugs.webkit.org/show_bug.cgi?id=52885
+
+ No new tests as it does not change functionality. We will not wait for
+ the the input stream to close to issue didFinishLoading to
+ WebCore. We expect a subtle performance improvement with this
+ patch when loading complex web pages, as we wouldn't have to wait
+ for the stream to close (which involves creating a thread among
+ other things).
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::closeCallback):
+ (WebCore::readCallback):
+
+2011-01-21 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: eliminate SourceView and ScriptView classes.
+ https://bugs.webkit.org/show_bug.cgi?id=52896
+
+ SourceView and ScriptView delegate everything to SourceFrame and should be eliminated.
+
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * inspector/front-end/GoToLineDialog.js:
+ (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):
+ * inspector/front-end/ResourceView.js:
+ (WebInspector.ResourceView.createResourceView):
+ (WebInspector.ResourceView.resourceViewTypeMatchesResource):
+ (WebInspector.SourceFrameContentProviderForResource): Moved from SourceView.
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel.prototype.show):
+ (WebInspector.ResourcesPanel.prototype._applyDiffMarkup):
+ (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsUpdated):
+ * inspector/front-end/ScriptView.js: Removed.
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
+ (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
+ (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
+ (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
+ (WebInspector.ScriptsPanel.prototype._formatScript):
+ (WebInspector.SourceFrameContentProviderForScript): Moved from ScriptView.
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame):
+ (WebInspector.SourceFrame.prototype.show):
+ (WebInspector.SourceFrame.prototype.hide):
+ (WebInspector.SourceFrame.prototype.hasContent):
+ (WebInspector.SourceFrame.prototype._createTextViewer):
+ (WebInspector.SourceFrame.prototype.performSearch.doFindSearchMatches):
+ (WebInspector.SourceFrame.prototype.performSearch):
+ * inspector/front-end/SourceView.js: Removed.
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.html:
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ No new tests needed.
+
+ * WebCore.pri:
+ * WebCore.pro:
+
+2011-01-24 Kent Tamura <tkent@chromium.org>
+
+ Unreviewed, trivial fix.
+
+ Fix a Chromium-only assertion failure by r76491.
+ https://bugs.webkit.org/show_bug.cgi?id=38982
+
+ Separate icon loading from the FileChooser constructor in order to avoid
+ ref() before adoptRef().
+
+ * platform/FileChooser.cpp:
+ (WebCore::FileChooser::FileChooser):
+ (WebCore::FileChooser::initialize):
+ (WebCore::FileChooser::create):
+ * platform/FileChooser.h:
+
+2011-01-24 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Kent Tamura.
+
+ TextControlInnerElement::m_shadowParent should be removed.
+ https://bugs.webkit.org/show_bug.cgi?id=52998
+
+ No new tests. No behavioral change.
+
+ * rendering/TextControlInnerElements.cpp:
+ (WebCore::TextControlInnerElement::TextControlInnerElement):
+ * rendering/TextControlInnerElements.h:
+
+2011-01-24 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ REGRESSION (r72895): console.trace crashes
+ https://bugs.webkit.org/show_bug.cgi?id=52981
+
+ - Use local RefPtr variable for accessing PassRefPtr arguments to make sure the PassRefPtr has
+ non-null value.
+ - Use PassRefPtr for objects whos ownership is passed to the inspector.
+
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/InspectorConsoleInstrumentation.h: Added. Extract inline methods called from the console into their
+ own header to reduce compilation time of other classes that depend on the inspector instrumentation.
+ (WebCore::InspectorInstrumentation::addMessageToConsole):
+ (WebCore::InspectorInstrumentation::consoleCount):
+ (WebCore::InspectorInstrumentation::startConsoleTiming):
+ (WebCore::InspectorInstrumentation::stopConsoleTiming):
+ (WebCore::InspectorInstrumentation::consoleMarkTimeline):
+ (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
+ (WebCore::InspectorInstrumentation::addProfile):
+ (WebCore::InspectorInstrumentation::profilerEnabled):
+ (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
+ * inspector/InspectorDatabaseInstrumentation.h: Added. Extract inline methods called from the datanase code into their
+ own header to reduce compilation time of other classes that depend on the inspector instrumentation.
+ (WebCore::InspectorInstrumentation::didOpenDatabase):
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
+ (WebCore::InspectorInstrumentation::consoleCountImpl):
+ (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
+ (WebCore::InspectorInstrumentation::consoleMarkTimelineImpl):
+ (WebCore::InspectorInstrumentation::addProfileImpl):
+ (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
+ * inspector/InspectorInstrumentation.h:
+ * page/Console.cpp: use RefPtr local variable instead of accessing PassRefPtr argument directly.
+ (WebCore::Console::addMessage):
+ (WebCore::Console::trace):
+ (WebCore::Console::count):
+ (WebCore::Console::markTimeline):
+ (WebCore::Console::profileEnd):
+ (WebCore::Console::timeEnd):
+ (WebCore::Console::group):
+ (WebCore::Console::groupCollapsed):
+ * storage/Database.cpp:
+ (WebCore::Database::openDatabase):
+
+2010-01-24 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Support icon loading for <input type=file>
+ https://bugs.webkit.org/show_bug.cgi?id=38982
+
+ An icon data in Chromium port is represented as WebCore::Image. We
+ don't need OS-specific code anymore.
+
+ * WebCore.gypi:
+ * platform/graphics/Icon.h:
+ (WebCore::Icon::create): Add Chromium-specific factory.
+ * platform/graphics/chromium/IconChromium.cpp: Added.
+ * platform/graphics/chromium/IconChromiumLinux.cpp: Removed.
+ * platform/graphics/chromium/IconChromiumMac.cpp: Removed.
+ * platform/graphics/chromium/IconChromiumWin.cpp: Removed.
+ * platform/graphics/chromium/PlatformIcon.h:
+
+2011-01-21 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: move search functions from SourceView to SourceFrame.
+ https://bugs.webkit.org/show_bug.cgi?id=52895
+
+ This is the last step before eliminating SourceView and ScriptView since
+ this classes just delegate everything to SourceFrame.
+
+ * inspector/front-end/SourceFrame.js:
+ (WebInspector.SourceFrame.prototype.set visible):
+ (WebInspector.SourceFrame.prototype._clearLineHighlight):
+ (WebInspector.SourceFrame.prototype._createTextViewer):
+ (WebInspector.SourceFrame.prototype.performSearch.doFindSearchMatches):
+ (WebInspector.SourceFrame.prototype.performSearch):
+ (WebInspector.SourceFrame.prototype.searchCanceled):
+ (WebInspector.SourceFrame.prototype.jumpToFirstSearchResult):
+ (WebInspector.SourceFrame.prototype.jumpToLastSearchResult):
+ (WebInspector.SourceFrame.prototype.jumpToNextSearchResult):
+ (WebInspector.SourceFrame.prototype.jumpToPreviousSearchResult):
+ (WebInspector.SourceFrame.prototype.showingFirstSearchResult):
+ (WebInspector.SourceFrame.prototype.showingLastSearchResult):
+ (WebInspector.SourceFrame.prototype._jumpToSearchResult):
+ * inspector/front-end/SourceView.js:
+ (WebInspector.SourceView.prototype.hide):
+ (WebInspector.SourceView.prototype.searchCanceled):
+ (WebInspector.SourceView.prototype.performSearch):
+ (WebInspector.SourceView.prototype.jumpToFirstSearchResult):
+ (WebInspector.SourceView.prototype.jumpToLastSearchResult):
+ (WebInspector.SourceView.prototype.jumpToNextSearchResult):
+ (WebInspector.SourceView.prototype.jumpToPreviousSearchResult):
+ (WebInspector.SourceView.prototype.showingFirstSearchResult):
+ (WebInspector.SourceView.prototype.showingLastSearchResult):
+ (WebInspector.SourceView.prototype.clearMessages):
+
+2011-01-24 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76463.
+ http://trac.webkit.org/changeset/76463
+ https://bugs.webkit.org/show_bug.cgi?id=52993
+
+ It broke canvas/philip/tests/2d.path.stroke.skew.html
+ (Requested by Ossy on #webkit).
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContext::rotate):
+ * platform/graphics/qt/PathQt.cpp:
+ (WebCore::Path::addArc):
+
+2011-01-23 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: summary bar is not resized properly with the rest of network panel
+ https://bugs.webkit.org/show_bug.cgi?id=52881
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype.updateSidebarWidth):
+ (WebInspector.NetworkPanel.prototype._positionSummaryBar):
+ (WebInspector.NetworkPanel.prototype._toggleGridMode):
+
+2011-01-19 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Ryosuke Niwa.
+
+ Space and tab characters "sent" by an input method give totally different results than typing them directly
+ https://bugs.webkit.org/show_bug.cgi?id=5241
+
+ * Introduced TextEvent::InputTypeComposition and TypingCommand::TextCompositionType to
+ distinguish text input which is originated by composition.
+ * Generalized rebalanceWhitespaceAt() to rebalanceWhitespaceOnTextSubstring() to rebalancing
+ range of string on text node, instead of surrounding part of that.
+
+ Test: editing/inserting/insert-composition-whitespace.html
+
+ * dom/TextEvent.h:
+ (WebCore::TextEvent::isComposition):
+ * dom/TextEventInputType.h: Added TextEventInputComposition as a member of TextEvent::InputType
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::containsOnlyWhitespace):
+ (WebCore::CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor):
+ (WebCore::CompositeEditCommand::canRebalance):
+ (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
+ (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring): Added: A generalized version of rebalanceWhitespaceAt(), which takes a range inside Text string.
+ * editing/CompositeEditCommand.h:
+ * editing/Editor.cpp:
+ (WebCore::Editor::insertTextForConfirmedComposition): Added.
+ (WebCore::Editor::insertTextWithoutSendingTextEvent):
+ (WebCore::Editor::confirmComposition): Now uses insertTextForConfirmedComposition().
+ (WebCore::Editor::setComposition):
+ * editing/Editor.h:
+ * editing/InsertTextCommand.cpp:
+ (WebCore::InsertTextCommand::input):
+ * editing/InsertTextCommand.h:
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::TypingCommand):
+ (WebCore::TypingCommand::insertText):
+ (WebCore::TypingCommand::insertTextRunWithoutNewlines):
+ * editing/TypingCommand.h: Added TypingCommand::m_compositionType and TypingCommand::TextCompositionType
+ (WebCore::TypingCommand::setCompositionType): Added.
+ (WebCore::TypingCommand::create):
+
+2011-01-23 Mark Rowe <mrowe@apple.com>
+
+ Follow-up to r76477.
+
+ Fix the scripts that detect problematic code such as static initializers
+ and destructors, weak vtables, inappropriate files in the framework wrappers,
+ and public headers including private headers. These had all been broken
+ since the projects were moved in to the Source directory as the paths to the
+ scripts were not updated at that time.
+
+ Stop copying an IDL file in to the framework wrapper. Doing that doesn't even make sense.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2011-01-23 Mark Rowe <mrowe@apple.com>
+
+ Build fix after r76459.
+
+ Static member variables or globals of types that have constructors or destructors are bad as
+ they generate static initializers and destructors. This is code that is run either at link time
+ when the library is loaded in to memory or at application termination time. Both of these are
+ terrible for performance and are thus outlawed in WebKit code.
+
+ The typical solution is to replace the static member or global with a function that allocates
+ the necessary variable on the heap. The variable is leaked to prevent it from being destroyed
+ at application termination time. The DEFINE_STATIC_LOCAL macro wraps this in to a concise little
+ package, but sadly fails to work in this case due to the type containing multiple template
+ parameters.
+
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::inspectorAgents):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::bindInspectorAgent):
+ (WebCore::InspectorInstrumentation::unbindInspectorAgent):
+ (WebCore::InspectorInstrumentation::inspectorAgentForPage):
+
+2011-01-21 Vangelis Kokkevis <vangelis@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Add support for -webkit-mask properties to the
+ accelerated compositing path.
+ https://bugs.webkit.org/show_bug.cgi?id=49780
+
+ Tests: Existing tests in LayoutTests/compositing/masks
+
+ * platform/graphics/chromium/ContentLayerChromium.cpp:
+ (WebCore::ContentLayerChromium::draw):
+ (WebCore::ContentLayerChromium::unreserveContentsTexture):
+ (WebCore::ContentLayerChromium::bindContentsTexture):
+ * platform/graphics/chromium/ContentLayerChromium.h:
+ * platform/graphics/chromium/GraphicsLayerChromium.cpp:
+ (WebCore::GraphicsLayerChromium::setMaskLayer):
+ * platform/graphics/chromium/GraphicsLayerChromium.h:
+ * platform/graphics/chromium/LayerChromium.cpp:
+ (WebCore::LayerChromium::LayerChromium):
+ * platform/graphics/chromium/LayerChromium.h:
+ (WebCore::LayerChromium::setMaskLayer):
+ (WebCore::LayerChromium::maskLayer):
+ (WebCore::LayerChromium::unreserveContentsTexture):
+ (WebCore::LayerChromium::bindContentsTexture):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::updateLayersRecursive):
+ * platform/graphics/chromium/LayerTexture.cpp:
+ (WebCore::LayerTexture::bindTexture):
+ * platform/graphics/chromium/RenderSurfaceChromium.cpp:
+ (WebCore::RenderSurfaceChromium::SharedValues::SharedValues):
+ (WebCore::RenderSurfaceChromium::SharedValues::~SharedValues):
+ (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
+ (WebCore::RenderSurfaceChromium::draw):
+ * platform/graphics/chromium/RenderSurfaceChromium.h:
+ (WebCore::RenderSurfaceChromium::SharedValues::maskShaderProgram):
+ (WebCore::RenderSurfaceChromium::SharedValues::maskShaderSamplerLocation):
+ (WebCore::RenderSurfaceChromium::SharedValues::maskShaderMaskSamplerLocation):
+ (WebCore::RenderSurfaceChromium::SharedValues::maskShaderMatrixLocation):
+ (WebCore::RenderSurfaceChromium::SharedValues::maskShaderAlphaLocation):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Use WTF::StringHasher in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=52934
+
+ * loader/appcache/ApplicationCacheStorage.cpp:
+ (WebCore::urlHostHash):
+ * platform/LinkHash.cpp:
+ (WebCore::visitedLinkHashInline):
+ * platform/cf/BinaryPropertyList.cpp:
+ (WebCore::IntegerArrayHash::hash):
+ * platform/graphics/wx/FontPlatformDataWx.cpp:
+ (WebCore::FontPlatformData::computeHash):
+ * platform/network/ProtectionSpaceHash.h:
+ (WebCore::ProtectionSpaceHash::hash):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Add an overload to base64Encode with String output
+ https://bugs.webkit.org/show_bug.cgi?id=50122
+
+ This change removes duplicated code.
+
+ * inspector/InspectorResourceAgent.cpp:
+ (WebCore::InspectorResourceAgent::resourceContentBase64):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::btoa):
+ * platform/graphics/skia/FontCustomPlatformData.cpp:
+ (WebCore::createUniqueFontName):
+ * platform/graphics/win/FontCustomPlatformData.cpp:
+ (WebCore::createUniqueFontName):
+ * platform/graphics/wince/FontCustomPlatformData.cpp:
+ (WebCore::createUniqueFontName):
+ * platform/network/cf/ResourceHandleCFNet.cpp:
+ (WebCore::encodeBasicAuthorization):
+ * platform/network/mac/ResourceHandleMac.mm:
+ (WebCore::encodeBasicAuthorization):
+ * platform/text/Base64.cpp:
+ (WebCore::base64Encode):
+ * platform/text/Base64.h:
+ (WebCore::base64Encode):
+ * platform/wince/KeygenWinCE.cpp:
+ (WebCore::WebCore::signedPublicKeyAndChallengeString):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Add String::containsOnlyLatin1()
+ https://bugs.webkit.org/show_bug.cgi?id=52979
+
+ Use String::containsOnlyLatin1() instead of isSafeToConvertCharList().
+
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::btoa):
+ (WebCore::DOMWindow::atob):
+
+2011-01-23 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Add missing CodeGenerator dependencies
+ https://bugs.webkit.org/show_bug.cgi?id=52976
+
+ * CMakeLists.txt:
+
+2011-01-23 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt][Symbian] Fix --minimal build
+ https://bugs.webkit.org/show_bug.cgi?id=52839
+
+ Some of the plugins' functionality is reimplemented in
+ Symbian specific files.
+ Some of this functionality should be compiled in even if
+ the guard NETSCAPE_PLUGIN_API is turned off.
+ This patch moves that functionality out of the
+ NETSCAPE_PLUGIN_API guard.
+
+ Build fix so no new tests.
+
+ * WebCore.pro:
+ * plugins/symbian/PluginPackageSymbian.cpp:
+
+2011-01-23 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Use rad2deg() from WTF instead of rolling our own.
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContext::rotate):
+ * platform/graphics/qt/PathQt.cpp:
+ (WebCore::Path::addArc):
+
+2011-01-23 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Viewport meta: Always adjust device dimensions to the device pixel ratio.
+
+ * dom/ViewportArguments.cpp:
+ (WebCore::computeViewportAttributes):
+
+2011-01-23 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Don't scale absolute geometry specified by viewport meta tag.
+
+ * dom/ViewportArguments.cpp:
+ (WebCore::computeViewportAttributes):
+
+2011-01-23 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed build fix.
+
+ Web Inspector: looks like efl doesn't regenerate InspectorBackendDispatcher.
+
+ Touch Inspector.idl.
+
+ * inspector/Inspector.idl:
+
+2011-01-22 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: next step in splitting InspectorController.
+
+ Splitting InspectorController is a bit tricky process.
+
+ As a first step I'll do the next things:
+ 1) rename existing InspectorController to InspectorAgent;
+ 2) s/nspectorController/nspectorAgent/g everywhere in WebCore/inspector but InspectorInstrumentation;
+ 3) create a fake InspectorController derived from the InspectorAgent for the rest of WebCore and WebKit;
+
+ The second step is a migration of a small set of functions described in bug 52510 from InspectorAgent to InspectorController.
+
+ As far as the second step will have significant changes in the functions' implementation I'll do it as a separate patch.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52955
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSInjectedScriptHostCustom.cpp:
+ (WebCore::JSInjectedScriptHost::nodeForId):
+ (WebCore::JSInjectedScriptHost::selectDOMStorage):
+ * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
+ (WebCore::V8InjectedScriptHost::nodeForIdCallback):
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/InjectedScriptHost.cpp:
+ (WebCore::InjectedScriptHost::InjectedScriptHost):
+ (WebCore::InjectedScriptHost::clearConsoleMessages):
+ (WebCore::InjectedScriptHost::databaseForId):
+ (WebCore::InjectedScriptHost::selectDatabase):
+ (WebCore::InjectedScriptHost::selectDOMStorage):
+ (WebCore::InjectedScriptHost::injectedScriptForMainFrame):
+ (WebCore::InjectedScriptHost::inspectorDOMAgent):
+ (WebCore::InjectedScriptHost::frontend):
+ (WebCore::InjectedScriptHost::didCreateWorker):
+ (WebCore::InjectedScriptHost::didDestroyWorker):
+ * inspector/InjectedScriptHost.h:
+ (WebCore::InjectedScriptHost::create):
+ (WebCore::InjectedScriptHost::inspectorAgent):
+ (WebCore::InjectedScriptHost::disconnectController):
+ * inspector/InspectorAgent.cpp: Copied from Source/WebCore/inspector/InspectorController.cpp.
+ (WebCore::InspectorAgent::InspectorAgent):
+ (WebCore::InspectorAgent::~InspectorAgent):
+ (WebCore::InspectorAgent::inspectedPageDestroyed):
+ (WebCore::InspectorAgent::enabled):
+ (WebCore::InspectorAgent::inspectorStartsAttached):
+ (WebCore::InspectorAgent::setInspectorStartsAttached):
+ (WebCore::InspectorAgent::setInspectorAttachedHeight):
+ (WebCore::InspectorAgent::inspectorAttachedHeight):
+ (WebCore::InspectorAgent::searchingForNodeInPage):
+ (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
+ (WebCore::InspectorAgent::inspect):
+ (WebCore::InspectorAgent::focusNode):
+ (WebCore::InspectorAgent::highlight):
+ (WebCore::InspectorAgent::highlightDOMNode):
+ (WebCore::InspectorAgent::highlightFrame):
+ (WebCore::InspectorAgent::hideHighlight):
+ (WebCore::InspectorAgent::mouseDidMoveOverElement):
+ (WebCore::InspectorAgent::handleMousePress):
+ (WebCore::InspectorAgent::setInspectorFrontendClient):
+ (WebCore::InspectorAgent::didClearWindowObjectInWorld):
+ (WebCore::InspectorAgent::setSearchingForNode):
+ (WebCore::InspectorAgent::connectFrontend):
+ (WebCore::InspectorAgent::show):
+ (WebCore::InspectorAgent::showPanel):
+ (WebCore::InspectorAgent::close):
+ (WebCore::InspectorAgent::disconnectFrontend):
+ (WebCore::InspectorAgent::resourceAgent):
+ (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
+ (WebCore::InspectorAgent::populateScriptObjects):
+ (WebCore::InspectorAgent::pushDataCollectedOffline):
+ (WebCore::InspectorAgent::restoreDebugger):
+ (WebCore::InspectorAgent::restoreProfiler):
+ (WebCore::InspectorAgent::unbindAllResources):
+ (WebCore::InspectorAgent::didCommitLoad):
+ (WebCore::InspectorAgent::mainResourceFiredDOMContentEvent):
+ (WebCore::InspectorAgent::mainResourceFiredLoadEvent):
+ (WebCore::InspectorAgent::isMainResourceLoader):
+ (WebCore::InspectorAgent::willSendRequest):
+ (WebCore::InspectorAgent::ensureSettingsLoaded):
+ (WebCore::InspectorAgent::startTimelineProfiler):
+ (WebCore::InspectorAgent::stopTimelineProfiler):
+ (WebCore::PostWorkerNotificationToFrontendTask::create):
+ (WebCore::PostWorkerNotificationToFrontendTask::PostWorkerNotificationToFrontendTask):
+ (WebCore::PostWorkerNotificationToFrontendTask::performTask):
+ (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
+ (WebCore::InspectorAgent::didCreateWorker):
+ (WebCore::InspectorAgent::didDestroyWorker):
+ (WebCore::InspectorAgent::didOpenDatabase):
+ (WebCore::InspectorAgent::getCookies):
+ (WebCore::InspectorAgent::buildArrayForCookies):
+ (WebCore::InspectorAgent::buildObjectForCookie):
+ (WebCore::InspectorAgent::deleteCookie):
+ (WebCore::InspectorAgent::didUseDOMStorage):
+ (WebCore::InspectorAgent::didCreateWebSocket):
+ (WebCore::InspectorAgent::willSendWebSocketHandshakeRequest):
+ (WebCore::InspectorAgent::didReceiveWebSocketHandshakeResponse):
+ (WebCore::InspectorAgent::didCloseWebSocket):
+ (WebCore::InspectorAgent::isRecordingUserInitiatedProfile):
+ (WebCore::InspectorAgent::startUserInitiatedProfiling):
+ (WebCore::InspectorAgent::stopUserInitiatedProfiling):
+ (WebCore::InspectorAgent::profilerEnabled):
+ (WebCore::InspectorAgent::enableProfiler):
+ (WebCore::InspectorAgent::disableProfiler):
+ (WebCore::InspectorAgent::showAndEnableDebugger):
+ (WebCore::InspectorAgent::enableDebugger):
+ (WebCore::InspectorAgent::disableDebugger):
+ (WebCore::InspectorAgent::resume):
+ (WebCore::InspectorAgent::setAllBrowserBreakpoints):
+ (WebCore::InspectorAgent::evaluateForTestInFrontend):
+ (WebCore::InspectorAgent::didEvaluateForTestInFrontend):
+ (WebCore::quadToPath):
+ (WebCore::drawOutlinedQuad):
+ (WebCore::drawOutlinedQuadWithClip):
+ (WebCore::drawHighlightForBox):
+ (WebCore::drawHighlightForLineBoxesOrSVGRenderer):
+ (WebCore::convertFromFrameToMainFrame):
+ (WebCore::frameToMainFrameOffset):
+ (WebCore::InspectorAgent::drawNodeHighlight):
+ (WebCore::InspectorAgent::drawElementTitle):
+ (WebCore::InspectorAgent::openInInspectedWindow):
+ (WebCore::InspectorAgent::addScriptToEvaluateOnLoad):
+ (WebCore::InspectorAgent::removeAllScriptsToEvaluateOnLoad):
+ (WebCore::InspectorAgent::setInspectorExtensionAPI):
+ (WebCore::InspectorAgent::inspectedURL):
+ (WebCore::InspectorAgent::reloadPage):
+ (WebCore::InspectorAgent::setExtraHeaders):
+ * inspector/InspectorAgent.h: Copied from Source/WebCore/inspector/InspectorController.h.
+ (WebCore::InspectorAgent::inspectorBackendDispatcher):
+ (WebCore::InspectorAgent::inspectorClient):
+ (WebCore::InspectorAgent::injectedScriptHost):
+ (WebCore::InspectorAgent::inspectedPage):
+ (WebCore::InspectorAgent::hideDOMNodeHighlight):
+ (WebCore::InspectorAgent::hideFrameHighlight):
+ (WebCore::InspectorAgent::frontend):
+ (WebCore::InspectorAgent::inspectorController):
+ (WebCore::InspectorAgent::inspectorAgent):
+ (WebCore::InspectorAgent::consoleAgent):
+ (WebCore::InspectorAgent::cssAgent):
+ (WebCore::InspectorAgent::domAgent):
+ (WebCore::InspectorAgent::injectedScriptAgent):
+ (WebCore::InspectorAgent::runtimeAgent):
+ (WebCore::InspectorAgent::timelineAgent):
+ (WebCore::InspectorAgent::databaseAgent):
+ (WebCore::InspectorAgent::domStorageAgent):
+ (WebCore::InspectorAgent::fileSystemAgent):
+ (WebCore::InspectorAgent::browserDebuggerAgent):
+ (WebCore::InspectorAgent::debuggerAgent):
+ (WebCore::InspectorAgent::profilerAgent):
+ (WebCore::InspectorAgent::applicationCacheAgent):
+ (WebCore::InspectorAgent::hasInspectorFrontendClient):
+ (WebCore::InspectorAgent::hasFrontend):
+ (WebCore::InspectorAgent::startProfiling):
+ (WebCore::InspectorAgent::stopProfiling):
+ (WebCore::InspectorAgent::debuggerEnabled):
+ (WebCore::InspectorAgent::state):
+ (WebCore::InspectorAgent::settings):
+ * inspector/InspectorApplicationCacheAgent.cpp:
+ (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
+ (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
+ * inspector/InspectorApplicationCacheAgent.h:
+ * inspector/InspectorBrowserDebuggerAgent.cpp:
+ (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
+ (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
+ (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
+ (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
+ (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
+ (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
+ (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
+ (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
+ (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
+ (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
+ (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
+ * inspector/InspectorBrowserDebuggerAgent.h:
+ (WebCore::InspectorBrowserDebuggerAgent::create):
+ * inspector/InspectorConsoleAgent.cpp:
+ (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
+ (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
+ (WebCore::InspectorConsoleAgent::clearConsoleMessages):
+ (WebCore::InspectorConsoleAgent::addMessageToConsole):
+ (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
+ (WebCore::InspectorConsoleAgent::didReceiveResponse):
+ (WebCore::InspectorConsoleAgent::didFailLoading):
+ (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
+ (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
+ (WebCore::InspectorConsoleAgent::addConsoleMessage):
+ * inspector/InspectorConsoleAgent.h:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ * inspector/InspectorController.h:
+ * inspector/InspectorDatabaseAgent.cpp:
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::create):
+ (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
+ (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
+ (WebCore::InspectorDebuggerAgent::currentCallFrames):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorFileSystemAgent.cpp:
+ (WebCore::InspectorFileSystemAgentCallbacks::didOpenFileSystem):
+ (WebCore::InspectorFileSystemAgent::InspectorFileSystemAgent):
+ (WebCore::InspectorFileSystemAgent::stop):
+ (WebCore::InspectorFileSystemAgent::getFileSystemPathAsync):
+ (WebCore::InspectorFileSystemAgent::didGetFileSystemPath):
+ (WebCore::InspectorFileSystemAgent::didGetFileSystemError):
+ * inspector/InspectorFileSystemAgent.h:
+ (WebCore::InspectorFileSystemAgent::create):
+ * inspector/InspectorFrontendHost.cpp:
+ (WebCore::InspectorFrontendHost::setExtensionAPI):
+ * inspector/InspectorProfilerAgent.cpp:
+ (WebCore::InspectorProfilerAgent::create):
+ (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
+ (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
+ (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
+ (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
+ (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
+ * inspector/InspectorProfilerAgent.h:
+
+2011-01-22 Chris Rogers <crogers@google.com>
+
+ Rubber-stamped by Anders Carlsson.
+
+ Fix FFTFrameStub to compile properly
+ https://bugs.webkit.org/show_bug.cgi?id=52969
+
+ No new tests since this is a build fix.
+
+ * platform/audio/FFTFrameStub.cpp:
+ (WebCore::FFTFrame::FFTFrame):
+
+2011-01-22 Andrei Popescu <andreip@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB corrupts data on disk
+ https://bugs.webkit.org/show_bug.cgi?id=52890
+
+ We need to store the SerializedScriptValues on disk in a BLOB column rather than TEXT.
+ Test: storage/indexeddb/data-corruption.html
+
+ * platform/sql/SQLiteStatement.cpp:
+ (WebCore::SQLiteStatement::bindBlob):
+ (WebCore::SQLiteStatement::getColumnBlobAsString):
+ (WebCore::SQLiteStatement::getColumnBlobAsVector):
+ * platform/sql/SQLiteStatement.h:
+ * storage/IDBCursorBackendImpl.cpp:
+ (WebCore::IDBCursorBackendImpl::loadCurrentRow):
+ * storage/IDBFactoryBackendImpl.cpp:
+ (WebCore::runCommands):
+ (WebCore::createTables):
+ (WebCore::createMetaDataTable):
+ (WebCore::migrateDatabase):
+ * storage/IDBObjectStoreBackendImpl.cpp:
+ (WebCore::IDBObjectStoreBackendImpl::getInternal):
+ (WebCore::putObjectStoreData):
+
+2011-01-22 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Not reviewed. Fix WinCE build.
+
+ * platform/graphics/wince/GraphicsContextWinCE.cpp:
+ (WebCore::GraphicsContext::drawText):
+ * rendering/RenderThemeWinCE.cpp:
+ (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):
+
+2011-01-22 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ REGRESSION: Vertical line metrics incorrect
+ https://bugs.webkit.org/show_bug.cgi?id=52960
+
+ SimpleFontDataMac.mm contains a hack to modifiy lineGap/descent for the 'Hiragino' font.
+ That didn't influence the lineSpacing so far, but does now, causing regressions.
+
+ Restore old line spacing behaviour to fix the regression.
+ Covered by existing fast/blockflow, fast/repaint and fast/text/international test cases.
+
+ * platform/graphics/FontMetrics.h:
+ (WebCore::FontMetrics::FontMetrics):
+ (WebCore::FontMetrics::floatLineSpacing):
+ (WebCore::FontMetrics::setLineSpacing):
+ (WebCore::FontMetrics::lineSpacing):
+ (WebCore::FontMetrics::reset):
+ * platform/graphics/SimpleFontData.cpp:
+ (WebCore::SimpleFontData::SimpleFontData):
+ * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/chromium/SimpleFontDataLinux.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/pango/SimpleFontDataPango.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/qt/SimpleFontDataQt.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/SimpleFontDataCGWin.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/SimpleFontDataCairoWin.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/SimpleFontDataWin.cpp:
+ (WebCore::SimpleFontData::initGDIFont):
+ * platform/graphics/wince/SimpleFontDataWinCE.cpp:
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/wx/SimpleFontDataWx.cpp:
+ (WebCore::SimpleFontData::platformInit):
+
+2011-01-22 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] fast/backgrounds/svg-as-mask.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=52906
+
+ Transparency layers should start out with in SourceOver mode with
+ alpha 1.0 (modeled after CGContextBeginTransparencyLayer.)
+
+ * platform/graphics/qt/TransparencyLayer.h:
+ (WebCore::TransparencyLayer::TransparencyLayer):
+
+2011-01-22 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Not reviewed.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ Fix Chromium/Win build.
+
+ * platform/graphics/chromium/UniscribeHelperTextRun.cpp: s/->/./
+ (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun):
+
+2011-01-21 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ Encapsulate ascent/descent/lineHeight/lineGap methods in a single FontMetrics class, instead of
+ having to define them in both Font & SimpleFontData. Changed to store floating point values
+ as default, in order to get accurate information for small sized fonts. All these methods
+ now have floating-point and integer versions. Whenever an integer variant of these functions
+ is called, lroundf() is used to round the value.
+
+ This makes it possible to support small font-sizes for SVG in a follow-up patch, as well
+ as fixing rounding issues when using SVG Fonts.
+
+ Shouldn't affect existing tests.
+
+ * GNUmakefile.am: Add FontMetrics.h to build.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
+ (baselinePositionForAccessibilityRenderObject):
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::CSSPrimitiveValue::computeLengthDouble):
+ * html/canvas/CanvasRenderingContext2D.cpp: Ditto.
+ (WebCore::CanvasRenderingContext2D::drawTextInternal):
+ * inspector/InspectorController.cpp: Ditto.
+ (WebCore::InspectorController::drawElementTitle):
+ * platform/chromium/PopupMenuChromium.cpp: Ditto.
+ (WebCore::PopupListBox::paintRow):
+ (WebCore::PopupListBox::getRowHeight):
+ * platform/graphics/Font.h: Remove ascent/descent/height/lineGap/lineSpacing/xHeight/unitsPerEm accessor...
+ (WebCore::Font::fontMetrics): ... and only expose a single FontMetrics object here.
+ * platform/graphics/FontFastPath.cpp: Use fontMetrics() to query metrics information.
+ (WebCore::Font::emphasisMarkAscent):
+ (WebCore::Font::emphasisMarkDescent):
+ (WebCore::Font::emphasisMarkHeight):
+ (WebCore::Font::floatWidthForSimpleText):
+ * platform/graphics/FontMetrics.h: Added.
+ (WebCore::FontMetrics::FontMetrics): Creates a FontMetrics object, stored in SimpleFontData.
+ (WebCore::FontMetrics::unitsPerEm): Returns an unsigned describing the unitsPerEm.
+ (WebCore::FontMetrics::setUnitsPerEm): Sets the unitsPerEm value.
+ (WebCore::FontMetrics::floatAscent): Returns the stored m_ascent float.
+ (WebCore::FontMetrics::setAscent): Sets the stored m_ascent float.
+ (WebCore::FontMetrics::floatDescent): Returns the stored m_descent float.
+ (WebCore::FontMetrics::setDescent): Sets the stored m_descent float.
+ (WebCore::FontMetrics::floatHeight): Returns floatAscent() + floatDescent().
+ (WebCore::FontMetrics::floatLineGap): Returns the stored m_lineGap float.
+ (WebCore::FontMetrics::setLineGap): Sets the stored m_lineGap float.
+ (WebCore::FontMetrics::floatLineSpacing): Returns the stored m_lineSpacing float.
+ (WebCore::FontMetrics::setLineSpacing): Sets the stored m_lineSpacing float.
+ (WebCore::FontMetrics::xHeight): Returns the stored m_xHeight float (no integer version available, hence no 'float' prefix).
+ (WebCore::FontMetrics::setXHeight): Sets the stored m_xHeight float.
+ (WebCore::FontMetrics::ascent): Returns a rounded version of ascent().
+ (WebCore::FontMetrics::descent): Ditto (for descent).
+ (WebCore::FontMetrics::height): Returns ascent() + descent().
+ (WebCore::FontMetrics::lineGap): Returns a rounded version of lineGap().
+ (WebCore::FontMetrics::lineSpacing): Ditto (for lineSpacing).
+ (WebCore::FontMetrics::reset): Nulls all members, used only by the platform variants of SimpleFontData.
+ * platform/graphics/SimpleFontData.cpp: Adapt SVG Fonts code, to initialize the FontMetrics object, as the m_ascent/etc.. members are gone.
+ (WebCore::SimpleFontData::SimpleFontData):
+ (WebCore::SimpleFontData::initCharWidths):
+ * platform/graphics/SimpleFontData.h: Remove ascent/descent/height/lineSpacing/lineGap/xHeight/unitsPerEm accessors, and members, just store a FontMetrics object and expose it.
+ (WebCore::SimpleFontData::fontMetrics):
+ (WebCore::SimpleFontData::avgCharWidth):
+ * platform/graphics/chromium/FontChromiumWin.cpp: Use fontMetrics() to query font metrics.
+ (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::estimateTextBounds):
+ (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
+ (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::estimateTextBounds):
+ (WebCore::Font::drawComplexText):
+ * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: Adapt platform code, to initialize the FontMetrics object.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/chromium/SimpleFontDataLinux.cpp: Ditto.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/chromium/UniscribeHelperTextRun.cpp: Use fontMetrics() to query font metrics.
+ (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun):
+ (WebCore::UniscribeHelperTextRun::nextWinFontData):
+ * platform/graphics/freetype/SimpleFontDataFreeType.cpp: Adapt platform code, to initialize the FontMetrics object.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/haiku/SimpleFontDataHaiku.cpp: Ditto.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/mac/FontComplexTextMac.cpp: Use fontMetrics() to query font metrics.
+ (WebCore::Font::floatWidthForComplexText):
+ * platform/graphics/mac/FontMac.mm: Ditto.
+ (WebCore::showGlyphsWithAdvances):
+ * platform/graphics/mac/SimpleFontDataMac.mm: Adapt platform code, to initialize the FontMetrics object.
+ (WebCore::SimpleFontData::platformInit):
+ (WebCore::SimpleFontData::platformCharWidthInit):
+ * platform/graphics/pango/SimpleFontDataPango.cpp: Ditto.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/qt/SimpleFontDataQt.cpp: Ditto. (+ Switch to QFontMetricsF to get floating-point accurancy.)
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/FontCGWin.cpp: Use fontMetrics() to query font metrics.
+ (WebCore::drawGDIGlyphs):
+ * platform/graphics/win/FontWin.cpp: Ditto.
+ (WebCore::Font::floatWidthForComplexText):
+ * platform/graphics/win/SimpleFontDataCGWin.cpp: Adapt platform code, to initialize the FontMetrics object.
+ (WebCore::SimpleFontData::platformInit):
+ (WebCore::SimpleFontData::platformBoundsForGlyph):
+ * platform/graphics/win/SimpleFontDataCairoWin.cpp: Ditto.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/win/SimpleFontDataWin.cpp: Ditto.
+ (WebCore::SimpleFontData::initGDIFont):
+ * platform/graphics/wince/GraphicsContextWinCE.cpp: Use fontMetrics() to query font metrics.
+ (WebCore::GraphicsContext::drawText):
+ * platform/graphics/wince/SimpleFontDataWinCE.cpp: Adapt platform code, to initialize the FontMetrics object.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/graphics/wx/SimpleFontDataWx.cpp: Ditto.
+ (WebCore::SimpleFontData::platformInit):
+ * platform/win/PopupMenuWin.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
+ (WebCore::PopupMenuWin::calculatePositionAndSize):
+ (WebCore::PopupMenuWin::paint):
+ * rendering/EllipsisBox.cpp: Ditto.
+ (WebCore::EllipsisBox::paint):
+ (WebCore::EllipsisBox::nodeAtPoint):
+ * rendering/InlineBox.cpp: Ditto.
+ (WebCore::InlineBox::logicalHeight):
+ * rendering/InlineFlowBox.cpp: Ditto.
+ (WebCore::verticalPositionForBox):
+ (WebCore::InlineFlowBox::computeLogicalBoxHeights):
+ (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
+ * rendering/InlineTextBox.cpp: Ditto.
+ (WebCore::InlineTextBox::paint):
+ (WebCore::InlineTextBox::paintDecoration):
+ (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
+ (WebCore::InlineTextBox::paintCompositionUnderline):
+ * rendering/RenderBlock.cpp: Ditto.
+ (WebCore::RenderBlock::baselinePosition):
+ (WebCore::RenderBlock::firstLineBoxBaseline):
+ (WebCore::RenderBlock::lastLineBoxBaseline):
+ * rendering/RenderBox.cpp: Ditto.
+ (WebCore::RenderBox::localCaretRect):
+ * rendering/RenderEmbeddedObject.cpp: Ditto.
+ (WebCore::RenderEmbeddedObject::paintReplaced):
+ * rendering/RenderImage.cpp: Ditto.
+ (WebCore::RenderImage::setImageSizeForAltText):
+ (WebCore::RenderImage::paintReplaced):
+ * rendering/RenderInline.cpp: Ditto.
+ (WebCore::RenderInline::baselinePosition):
+ * rendering/RenderListBox.cpp: Ditto.
+ (WebCore::RenderListBox::paintItemForeground):
+ (WebCore::RenderListBox::itemHeight):
+ * rendering/RenderListMarker.cpp: Ditto.
+ (WebCore::RenderListMarker::paint):
+ (WebCore::RenderListMarker::layout):
+ (WebCore::RenderListMarker::computePreferredLogicalWidths):
+ (WebCore::RenderListMarker::updateMargins):
+ (WebCore::RenderListMarker::getRelativeMarkerRect):
+ * rendering/RenderTextControl.cpp: Ditto.
+ (WebCore::RenderTextControl::paintPlaceholder):
+ * rendering/RenderTextControlSingleLine.cpp: Ditto.
+ (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
+ * rendering/RenderThemeWin.cpp: Ditto.
+ (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
+ * rendering/mathml/RenderMathMLFraction.cpp: Ditto.
+ (WebCore::RenderMathMLFraction::baselinePosition):
+ * rendering/style/RenderStyle.h: Add "const FontMetrics& fontMetrics() const" accessor.
+ (WebCore::InheritedFlags::fontMetrics):
+ (WebCore::InheritedFlags::computedLineHeight):
+ * rendering/svg/RenderSVGInlineText.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
+ (WebCore::RenderSVGInlineText::positionForPoint):
+ * rendering/svg/SVGInlineTextBox.cpp: Ditto.
+ (WebCore::SVGInlineTextBox::selectionRectForTextFragment):
+ (WebCore::positionOffsetForDecoration):
+ (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
+ (WebCore::SVGInlineTextBox::paintTextWithShadows):
+ (WebCore::SVGInlineTextBox::calculateBoundaries):
+ * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Ditto.
+ (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
+ (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift):
+ (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphAdvanceAndOrientation):
+ * rendering/svg/SVGTextLayoutEngineSpacing.cpp: Ditto.
+ (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
+ * rendering/svg/SVGTextMetrics.cpp: Ditto.
+ (WebCore::SVGTextMetrics::SVGTextMetrics):
+ * rendering/svg/SVGTextQuery.cpp: Ditto.
+ (WebCore::calculateGlyphBoundaries):
+ * svg/SVGFontFaceElement.cpp:
+ (WebCore::SVGFontFaceElement::unitsPerEm): Rename defaultUnitsPerEm global to gDefaultUnitsPerEm.
+ * svg/SVGLength.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
+ (WebCore::SVGLength::convertValueFromUserUnitsToEXS):
+ (WebCore::SVGLength::convertValueFromEXSToUserUnits):
+
+2011-01-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Stop instantiating legacy editing positions in VisibleSelection, visible_units.cpp, Frame, and RenderBlock
+ https://bugs.webkit.org/show_bug.cgi?id=52759
+
+ Stopped instantiating legacy editing positions in the following files.
+
+ * editing/VisibleSelection.cpp:
+ (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
+ * editing/visible_units.cpp:
+ (WebCore::previousBoundary):
+ (WebCore::previousLinePosition):
+ (WebCore::nextLinePosition):
+ (WebCore::startOfBlock):
+ * page/Frame.cpp:
+ (WebCore::Frame::visiblePositionForPoint):
+ * rendering/RenderBlock.cpp: Removed RenderBlock::positionForRenderer because it was not called anywhere.
+ * rendering/RenderBlock.h: Ditto.
+
+2011-01-22 Adrienne Walker <enne@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Fix compositor repaints for offscreen fixed elements
+ https://bugs.webkit.org/show_bug.cgi?id=52681
+
+ The fast path scrolling was clipping offscreen invalidations.
+ Additionally, the compositor was ignoring all invalidations that were
+ entirely out of the content rect.
+
+ Test: compositing/ to verify this caused no regressions.
+ Tested fix manually in browser as I could not generate a LayoutTest that reproduced the bug in run-webkit-tests.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::scrollContentsFastPath):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::invalidateRootLayerRect):
+
+2011-01-22 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52951
+ WebKit2 generates a bad PDF for cross process messaging
+
+ * page/PrintContext.cpp: (WebCore::PrintContext::spoolRect): Use a correct offset to actually
+ draw inside the requested rectangle.
+
+2011-01-21 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Regression: new window.onerror() implementation leaks cross-origin Javascript errors
+ https://bugs.webkit.org/show_bug.cgi?id=52903
+
+ In case of an exception in a script from different domain only generic message
+ will be passed to window.onerror hander.
+
+ Tests: http/tests/security/cross-origin-script-window-onerror-redirected.html
+ http/tests/security/cross-origin-script-window-onerror.html
+
+ * bindings/js/CachedScriptSourceProvider.h: use URL from the resource response to make sure we do all
+ cross origin checks agains real script URL, not the original URL which may have resulted in a sequence
+ of redirects to different domains.
+ (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
+ * bindings/v8/ScriptSourceCode.h: same for v8.
+ (WebCore::ScriptSourceCode::url):
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::dispatchErrorEvent): in case the error occurred in a script we cannot
+ access provide concise "Script error." message without any information about the error source. This is
+ what Firefox does in this case.
+
+2011-01-21 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Always set composition mode through GraphicsContext
+ https://bugs.webkit.org/show_bug.cgi?id=52940
+
+ GraphicsContext tracks the current composition mode so we should
+ never call through to the QPainter directly.
+
+ * platform/graphics/GraphicsContext.h:
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::toQtCompositionMode): Changed this method to a static inline
+ since it's only used by GraphicsContextQt.cpp now.
+
+ * platform/graphics/qt/ImageQt.cpp:
+ (WebCore::Image::drawPattern):
+ (WebCore::BitmapImage::draw):
+
+2011-01-21 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ Inconsistent handling of no-break space in justification logic
+ https://bugs.webkit.org/show_bug.cgi?id=52938
+
+ Test: fast/text/justify-nbsp.html
+
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Count no-break space as a
+ space when computing the distribution of space between text boxes on the line.
+
2011-01-21 Charlie Reis <creis@chromium.org>
Reviewed by Darin Fisher.
diff --git a/Source/WebCore/Configurations/FeatureDefines.xcconfig b/Source/WebCore/Configurations/FeatureDefines.xcconfig
index 46d5de4..3971037 100644
--- a/Source/WebCore/Configurations/FeatureDefines.xcconfig
+++ b/Source/WebCore/Configurations/FeatureDefines.xcconfig
@@ -38,10 +38,10 @@ ENABLE_ACCELERATED_2D_CANVAS_macosx = $(ENABLE_ACCELERATED_2D_CANVAS_macosx_$(TA
ENABLE_ACCELERATED_2D_CANVAS_macosx_1060 = ;
ENABLE_ACCELERATED_2D_CANVAS_macosx_1070 = ;
-ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(REAL_PLATFORM_NAME));
-ENABLE_3D_CANVAS_macosx = $(ENABLE_3D_CANVAS_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
-ENABLE_3D_CANVAS_macosx_1060 = ENABLE_3D_CANVAS;
-ENABLE_3D_CANVAS_macosx_1070 = ENABLE_3D_CANVAS;
+ENABLE_WEBGL = $(ENABLE_WEBGL_$(REAL_PLATFORM_NAME));
+ENABLE_WEBGL_macosx = $(ENABLE_WEBGL_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+ENABLE_WEBGL_macosx_1060 = ENABLE_WEBGL;
+ENABLE_WEBGL_macosx_1070 = ENABLE_WEBGL;
ENABLE_3D_RENDERING = $(ENABLE_3D_RENDERING_$(REAL_PLATFORM_NAME));
ENABLE_3D_RENDERING_iphoneos = ENABLE_3D_RENDERING;
@@ -91,6 +91,8 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
+ENABLE_REGISTER_PROTOCOL_HANDLER = ;
+
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -106,6 +108,8 @@ ENABLE_SVG_FOREIGN_OBJECT = ENABLE_SVG_FOREIGN_OBJECT;
ENABLE_SVG_USE = ENABLE_SVG_USE;
ENABLE_VIDEO = ENABLE_VIDEO;
+ENABLE_MEDIA_STATISTICS = ;
+
ENABLE_WEB_AUDIO = ;
ENABLE_WEB_SOCKETS = $(ENABLE_WEB_SOCKETS_$(REAL_PLATFORM_NAME));
@@ -121,4 +125,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/Source/WebCore/Configurations/Version.xcconfig b/Source/WebCore/Configurations/Version.xcconfig
index 740d199..2901c21 100644
--- a/Source/WebCore/Configurations/Version.xcconfig
+++ b/Source/WebCore/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 16;
+MINOR_VERSION = 20;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/Source/WebCore/Configurations/WebCore.xcconfig b/Source/WebCore/Configurations/WebCore.xcconfig
index ac21049..f164902 100644
--- a/Source/WebCore/Configurations/WebCore.xcconfig
+++ b/Source/WebCore/Configurations/WebCore.xcconfig
@@ -63,7 +63,7 @@ PRODUCTION_FRAMEWORKS_DIR_iphonesimulator = $(PRODUCTION_FRAMEWORKS_DIR_iphoneos
PRODUCTION_FRAMEWORKS_DIR_macosx = $(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks;
WEBKIT2_LDFLAGS = $(WEBKIT2_LDFLAGS_$(TARGET_MAC_OS_X_VERSION_MAJOR));
-WEBKIT2_LDFLAGS_1060 = -allowable_client WebKit2;
+WEBKIT2_LDFLAGS_1060 = -allowable_client WebKit2 -allowable_client WebKitTestRunner -allowable_client WebKitTestRunnerInjectedBundle;
WEBKIT2_LDFLAGS_1070 = $(WEBKIT2_LDFLAGS_1060);
JAVASCRIPTCORE_PRIVATE_HEADERS_DIR = $(JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_$(CONFIGURATION));
diff --git a/Source/WebCore/DerivedSources.cpp b/Source/WebCore/DerivedSources.cpp
index 21271ea..b7bcb66 100644
--- a/Source/WebCore/DerivedSources.cpp
+++ b/Source/WebCore/DerivedSources.cpp
@@ -28,6 +28,8 @@
#include "HTMLElementFactory.cpp"
#include "HTMLEntityTable.cpp"
#include "JSAbstractWorker.cpp"
+#include "JSArrayBuffer.cpp"
+#include "JSArrayBufferView.cpp"
#include "JSAttr.cpp"
#include "JSBarInfo.cpp"
#include "JSBeforeLoadEvent.cpp"
@@ -37,7 +39,7 @@
#include "JSCanvasPattern.cpp"
#include "JSCanvasRenderingContext.cpp"
#include "JSCanvasRenderingContext2D.cpp"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "JSWebGLRenderingContext.cpp"
#endif
#include "JSCDATASection.cpp"
@@ -50,6 +52,7 @@
#include "JSConsole.cpp"
#include "JSCoordinates.cpp"
#include "JSCounter.cpp"
+#include "JSCrypto.cpp"
#include "JSCSSCharsetRule.cpp"
#include "JSCSSFontFaceRule.cpp"
#include "JSCSSImportRule.cpp"
@@ -69,6 +72,7 @@
#include "JSDatabaseSync.cpp"
#include "JSDataGridColumn.cpp"
#include "JSDataGridColumnList.cpp"
+#include "JSDataView.cpp"
#include "JSDedicatedWorkerContext.cpp"
#include "JSDeviceOrientationEvent.cpp"
#include "JSDirectoryEntry.cpp"
@@ -124,6 +128,7 @@
#include "JSFileWriterCallback.cpp"
#include "JSFileWriterSync.cpp"
#include "JSFlags.cpp"
+#include "JSFloat32Array.cpp"
#include "JSGeolocation.cpp"
#include "JSGeoposition.cpp"
#include "JSHashChangeEvent.cpp"
@@ -222,6 +227,9 @@
#include "JSImageData.cpp"
#include "JSInjectedScriptHost.cpp"
#include "JSInspectorFrontendHost.cpp"
+#include "JSInt16Array.cpp"
+#include "JSInt32Array.cpp"
+#include "JSInt8Array.cpp"
#include "JSJavaScriptCallFrame.cpp"
#include "JSKeyboardEvent.cpp"
#include "JSLocation.cpp"
@@ -422,6 +430,9 @@
#include "JSTouchEvent.cpp"
#include "JSTouchList.cpp"
#include "JSTreeWalker.cpp"
+#include "JSUint16Array.cpp"
+#include "JSUint32Array.cpp"
+#include "JSUint8Array.cpp"
#include "JSUIEvent.cpp"
#include "JSValidityState.cpp"
#include "JSWebKitAnimationEvent.cpp"
diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make
index ef2dc2f..3ead1c7 100644
--- a/Source/WebCore/DerivedSources.make
+++ b/Source/WebCore/DerivedSources.make
@@ -127,6 +127,7 @@ DOM_CLASSES = \
Console \
Coordinates \
Counter \
+ Crypto \
CustomEvent \
DataGridColumn \
DataGridColumnList \
@@ -569,6 +570,7 @@ all : \
MathMLNames.cpp \
XPathGrammar.cpp \
tokenizer.cpp \
+ HeaderDetection.h \
#
# --------
@@ -932,3 +934,19 @@ DOM%.h : %.idl $(DOM_BINDINGS_SCRIPTS) bindings/objc/PublicDOMInterfaces.h
endif # MACOS
# ------------------------
+
+# header detection
+
+ifeq ($(OS),MACOS)
+
+HeaderDetection.h : DerivedSources.make /System/Library/CoreServices/SystemVersion.plist
+ rm -f $@
+ echo "/* This is a generated file. Do not edit. */" > $@
+ if [ -f $(SDKROOT)/System/Library/Frameworks/AppKit.framework/PrivateHeaders/NSScrollerImpPair_Private.h ]; then echo "#define USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER 1" >> $@; else echo >> $@; fi
+
+else
+
+HeaderDetection.h :
+ echo > $@
+
+endif
diff --git a/Source/WebCore/English.lproj/localizedStrings.js b/Source/WebCore/English.lproj/localizedStrings.js
index 7bd3da8..6f759a2 100644
--- a/Source/WebCore/English.lproj/localizedStrings.js
+++ b/Source/WebCore/English.lproj/localizedStrings.js
Binary files differ
diff --git a/Source/WebCore/ForwardingHeaders/pcre/pcre.h b/Source/WebCore/ForwardingHeaders/pcre/pcre.h
deleted file mode 100644
index 198acc9..0000000
--- a/Source/WebCore/ForwardingHeaders/pcre/pcre.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef WebCore_FWD_pcre_h
-#define WebCore_FWD_pcre_h
-#include <JavaScriptCore/pcre.h>
-#endif
-
diff --git a/Source/WebCore/ForwardingHeaders/runtime/WriteBarrier.h b/Source/WebCore/ForwardingHeaders/runtime/WriteBarrier.h
new file mode 100644
index 0000000..0857d2f
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/runtime/WriteBarrier.h
@@ -0,0 +1,4 @@
+#ifndef WebCore_FWD_WriteBarrier_h
+#define WebCore_FWD_WriteBarrier_h
+#include <JavaScriptCore/WriteBarrier.h>
+#endif
diff --git a/Source/WebCore/ForwardingHeaders/wrec/WREC.h b/Source/WebCore/ForwardingHeaders/wrec/WREC.h
deleted file mode 100644
index 5749ed9..0000000
--- a/Source/WebCore/ForwardingHeaders/wrec/WREC.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef WebCore_FWD_WREC_h
-#define WebCore_FWD_WREC_h
-#include <JavaScriptCore/WREC.h>
-#endif
diff --git a/Source/WebCore/ForwardingHeaders/wtf/BloomFilter.h b/Source/WebCore/ForwardingHeaders/wtf/BloomFilter.h
new file mode 100644
index 0000000..98a67b9
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/wtf/BloomFilter.h
@@ -0,0 +1,4 @@
+#ifndef WebCore_FWD_BloomFilter_h
+#define WebCore_FWD_BloomFilter_h
+#include <JavaScriptCore/BloomFilter.h>
+#endif
diff --git a/Source/WebCore/ForwardingHeaders/wtf/CryptographicallyRandomNumber.h b/Source/WebCore/ForwardingHeaders/wtf/CryptographicallyRandomNumber.h
new file mode 100644
index 0000000..6c36f9b
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/wtf/CryptographicallyRandomNumber.h
@@ -0,0 +1,5 @@
+#ifndef WebCore_FWD_CryptographicallyRandomNumber_h
+#define WebCore_FWD_CryptographicallyRandomNumber_h
+#include <JavaScriptCore/CryptographicallyRandomNumber.h>
+#endif
+
diff --git a/Source/WebCore/ForwardingHeaders/wtf/OwnArrayPtrCommon.h b/Source/WebCore/ForwardingHeaders/wtf/OwnArrayPtrCommon.h
deleted file mode 100644
index e886c8a..0000000
--- a/Source/WebCore/ForwardingHeaders/wtf/OwnArrayPtrCommon.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef WebCore_FWD_OwnArrayPtrCommon_h
-#define WebCore_FWD_OwnArrayPtrCommon_h
-#include <JavaScriptCore/OwnArrayPtrCommon.h>
-#endif
diff --git a/Source/WebCore/ForwardingHeaders/wtf/unicode/CharacterNames.h b/Source/WebCore/ForwardingHeaders/wtf/unicode/CharacterNames.h
new file mode 100644
index 0000000..5518642
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/wtf/unicode/CharacterNames.h
@@ -0,0 +1,4 @@
+#ifndef WebCore_FWD_CharacterNames_h
+#define WebCore_FWD_CharacterNames_h
+#include <JavaScriptCore/CharacterNames.h>
+#endif
diff --git a/Source/WebCore/ForwardingHeaders/yarr/Yarr.h b/Source/WebCore/ForwardingHeaders/yarr/Yarr.h
new file mode 100644
index 0000000..9d38201
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/yarr/Yarr.h
@@ -0,0 +1,5 @@
+#ifndef WebCore_FWD_Yarr_h
+#define WebCore_FWD_Yarr_h
+#include <JavaScriptCore/Yarr.h>
+#endif
+
diff --git a/Source/WebCore/ForwardingHeaders/yarr/YarrInterpreter.h b/Source/WebCore/ForwardingHeaders/yarr/YarrInterpreter.h
new file mode 100644
index 0000000..00b10a8
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/yarr/YarrInterpreter.h
@@ -0,0 +1,5 @@
+#ifndef WebCore_FWD_YarrInterpreter_h
+#define WebCore_FWD_YarrInterpreter_h
+#include <JavaScriptCore/YarrInterpreter.h>
+#endif
+
diff --git a/Source/WebCore/ForwardingHeaders/yarr/YarrPattern.h b/Source/WebCore/ForwardingHeaders/yarr/YarrPattern.h
new file mode 100644
index 0000000..c2cf0b6
--- /dev/null
+++ b/Source/WebCore/ForwardingHeaders/yarr/YarrPattern.h
@@ -0,0 +1,5 @@
+#ifndef WebCore_FWD_YarrPattern_h
+#define WebCore_FWD_YarrPattern_h
+#include <JavaScriptCore/YarrPattern.h>
+#endif
+
diff --git a/Source/WebCore/GNUmakefile.am b/Source/WebCore/GNUmakefile.am
index 0975094..4c3788b 100644
--- a/Source/WebCore/GNUmakefile.am
+++ b/Source/WebCore/GNUmakefile.am
@@ -87,9 +87,7 @@ webcoregtk_cppflags += \
-I$(srcdir)/Source/WebCore/platform/graphics/gstreamer \
-I$(srcdir)/Source/WebCore/platform/graphics/gtk \
-I$(srcdir)/Source/WebCore/platform/gtk \
- -I$(srcdir)/Source/WebCore/platform/network/soup \
- -I$(srcdir)/Source/WebCore/platform/network/soup/cache \
- -I$(srcdir)/Source/WebCore/platform/network/soup/cache/webkit
+ -I$(srcdir)/Source/WebCore/platform/network/soup
webcore_built_nosources += \
DerivedSources/WebCore/tokenizer.cpp
@@ -164,6 +162,8 @@ webcore_built_sources += \
DerivedSources/WebCore/JSCoordinates.h \
DerivedSources/WebCore/JSCounter.cpp \
DerivedSources/WebCore/JSCounter.h \
+ DerivedSources/WebCore/JSCrypto.cpp \
+ DerivedSources/WebCore/JSCrypto.h \
DerivedSources/WebCore/JSCSSCharsetRule.cpp \
DerivedSources/WebCore/JSCSSCharsetRule.h \
DerivedSources/WebCore/JSCSSFontFaceRule.cpp \
@@ -826,6 +826,7 @@ webcore_sources += \
Source/WebCore/bindings/js/JSLocationCustom.h \
Source/WebCore/bindings/js/JSMainThreadExecState.cpp \
Source/WebCore/bindings/js/JSMainThreadExecState.h \
+ Source/WebCore/bindings/js/JSMemoryInfoCustom.cpp \
Source/WebCore/bindings/js/JSMessageChannelCustom.cpp \
Source/WebCore/bindings/js/JSMessageEventCustom.cpp \
Source/WebCore/bindings/js/JSMessagePortCustom.cpp \
@@ -1167,6 +1168,8 @@ webcore_sources += \
Source/WebCore/dom/DocumentMarkerController.cpp \
Source/WebCore/dom/DocumentMarkerController.h \
Source/WebCore/dom/DocumentMarker.h \
+ Source/WebCore/dom/DocumentOrderedMap.cpp \
+ Source/WebCore/dom/DocumentOrderedMap.h \
Source/WebCore/dom/DocumentParser.cpp \
Source/WebCore/dom/DocumentParser.h \
Source/WebCore/dom/DocumentTiming.h \
@@ -1866,6 +1869,8 @@ webcore_sources += \
Source/WebCore/html/parser/HTMLScriptRunner.cpp \
Source/WebCore/html/parser/HTMLScriptRunner.h \
Source/WebCore/html/parser/HTMLScriptRunnerHost.h \
+ Source/WebCore/html/parser/HTMLSourceTracker.cpp \
+ Source/WebCore/html/parser/HTMLSourceTracker.h \
Source/WebCore/html/parser/HTMLToken.h \
Source/WebCore/html/parser/HTMLTokenizer.cpp \
Source/WebCore/html/parser/HTMLTokenizer.h \
@@ -1878,8 +1883,13 @@ webcore_sources += \
Source/WebCore/html/parser/TextDocumentParser.h \
Source/WebCore/html/parser/TextViewSourceParser.cpp \
Source/WebCore/html/parser/TextViewSourceParser.h \
+ Source/WebCore/html/parser/XSSFilter.cpp \
+ Source/WebCore/html/parser/XSSFilter.h \
+ Source/WebCore/html/shadow/MediaControls.cpp \
+ Source/WebCore/html/shadow/MediaControls.h \
Source/WebCore/html/shadow/SliderThumbElement.cpp \
Source/WebCore/html/shadow/SliderThumbElement.h \
+ Source/WebCore/html/shadow/ProgressBarValueElement.h \
Source/WebCore/html/PasswordInputType.cpp \
Source/WebCore/html/PasswordInputType.h \
Source/WebCore/html/PluginDocument.cpp \
@@ -1951,6 +1961,8 @@ webcore_sources += \
Source/WebCore/inspector/InjectedScript.h \
Source/WebCore/inspector/InjectedScriptHost.cpp \
Source/WebCore/inspector/InjectedScriptHost.h \
+ Source/WebCore/inspector/InspectorAgent.cpp \
+ Source/WebCore/inspector/InspectorAgent.h \
Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp \
Source/WebCore/inspector/InspectorApplicationCacheAgent.h \
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp \
@@ -1961,10 +1973,12 @@ webcore_sources += \
Source/WebCore/inspector/InspectorController.h \
Source/WebCore/inspector/InspectorConsoleAgent.cpp \
Source/WebCore/inspector/InspectorConsoleAgent.h \
+ Source/WebCore/inspector/InspectorConsoleInstrumentation.h \
Source/WebCore/inspector/InspectorCSSAgent.cpp \
Source/WebCore/inspector/InspectorCSSAgent.h \
Source/WebCore/inspector/InspectorDatabaseAgent.cpp \
Source/WebCore/inspector/InspectorDatabaseAgent.h \
+ Source/WebCore/inspector/InspectorDatabaseInstrumentation.h \
Source/WebCore/inspector/InspectorDatabaseResource.cpp \
Source/WebCore/inspector/InspectorDatabaseResource.h \
Source/WebCore/inspector/InspectorDebuggerAgent.cpp \
@@ -1975,8 +1989,6 @@ webcore_sources += \
Source/WebCore/inspector/InspectorDOMStorageAgent.h \
Source/WebCore/inspector/InspectorDOMStorageResource.cpp \
Source/WebCore/inspector/InspectorDOMStorageResource.h \
- Source/WebCore/inspector/InspectorFileSystemAgent.cpp \
- Source/WebCore/inspector/InspectorFileSystemAgent.h \
Source/WebCore/inspector/InspectorFrontendClient.h \
Source/WebCore/inspector/InspectorFrontendClientLocal.cpp \
Source/WebCore/inspector/InspectorFrontendClientLocal.h \
@@ -1990,8 +2002,6 @@ webcore_sources += \
Source/WebCore/inspector/InspectorResourceAgent.h \
Source/WebCore/inspector/InspectorRuntimeAgent.cpp \
Source/WebCore/inspector/InspectorRuntimeAgent.h \
- Source/WebCore/inspector/InspectorSettings.cpp \
- Source/WebCore/inspector/InspectorSettings.h \
Source/WebCore/inspector/InspectorState.cpp \
Source/WebCore/inspector/InspectorState.h \
Source/WebCore/inspector/InspectorStyleSheet.cpp \
@@ -2003,7 +2013,6 @@ webcore_sources += \
Source/WebCore/inspector/InspectorWorkerResource.h \
Source/WebCore/inspector/ScriptArguments.cpp \
Source/WebCore/inspector/ScriptArguments.h \
- Source/WebCore/inspector/ScriptBreakpoint.cpp \
Source/WebCore/inspector/ScriptBreakpoint.h \
Source/WebCore/inspector/ScriptCallFrame.cpp \
Source/WebCore/inspector/ScriptCallFrame.h \
@@ -2166,16 +2175,20 @@ webcore_sources += \
Source/WebCore/page/animation/KeyframeAnimation.h \
Source/WebCore/page/BarInfo.cpp \
Source/WebCore/page/BarInfo.h \
- Source/WebCore/page/ChromeClient.h \
Source/WebCore/page/Chrome.cpp \
Source/WebCore/page/Chrome.h \
+ Source/WebCore/page/ChromeClient.h \
Source/WebCore/page/Console.cpp \
Source/WebCore/page/Console.h \
+ Source/WebCore/page/ContentSecurityPolicy.cpp \
+ Source/WebCore/page/ContentSecurityPolicy.h \
Source/WebCore/page/ContextMenuClient.h \
Source/WebCore/page/ContextMenuController.cpp \
Source/WebCore/page/ContextMenuController.h \
Source/WebCore/page/ContextMenuProvider.h \
Source/WebCore/page/Coordinates.h \
+ Source/WebCore/page/Crypto.cpp \
+ Source/WebCore/page/Crypto.h \
Source/WebCore/page/DOMSelection.cpp \
Source/WebCore/page/DOMSelection.h \
Source/WebCore/page/DOMTimer.cpp \
@@ -2204,9 +2217,9 @@ webcore_sources += \
Source/WebCore/page/Geolocation.cpp \
Source/WebCore/page/Geolocation.h \
Source/WebCore/page/GeolocationClient.h \
- Source/WebCore/page/GeolocationError.h \
Source/WebCore/page/GeolocationController.cpp \
Source/WebCore/page/GeolocationController.h \
+ Source/WebCore/page/GeolocationError.h \
Source/WebCore/page/GeolocationPosition.h \
Source/WebCore/page/GeolocationPositionCache.cpp \
Source/WebCore/page/GeolocationPositionCache.h \
@@ -2223,30 +2236,30 @@ webcore_sources += \
Source/WebCore/page/MemoryInfo.h \
Source/WebCore/page/MouseEventWithHitTestResults.cpp \
Source/WebCore/page/MouseEventWithHitTestResults.h \
- Source/WebCore/page/NavigatorBase.cpp \
- Source/WebCore/page/NavigatorBase.h \
Source/WebCore/page/Navigator.cpp \
Source/WebCore/page/Navigator.h \
+ Source/WebCore/page/NavigatorBase.cpp \
+ Source/WebCore/page/NavigatorBase.h \
Source/WebCore/page/OriginAccessEntry.cpp \
Source/WebCore/page/OriginAccessEntry.h \
Source/WebCore/page/Page.cpp \
+ Source/WebCore/page/Page.h \
Source/WebCore/page/PageGroup.cpp \
Source/WebCore/page/PageGroup.h \
Source/WebCore/page/PageGroupLoadDeferrer.cpp \
Source/WebCore/page/PageGroupLoadDeferrer.h \
- Source/WebCore/page/Page.h \
Source/WebCore/page/Performance.cpp \
Source/WebCore/page/Performance.h \
Source/WebCore/page/PerformanceNavigation.cpp \
Source/WebCore/page/PerformanceNavigation.h \
Source/WebCore/page/PerformanceTiming.cpp \
Source/WebCore/page/PerformanceTiming.h \
- Source/WebCore/page/PluginHalterClient.h \
Source/WebCore/page/PluginHalter.cpp \
Source/WebCore/page/PluginHalter.h \
+ Source/WebCore/page/PluginHalterClient.h \
Source/WebCore/page/PositionCallback.h \
- Source/WebCore/page/PositionErrorCallback.h \
Source/WebCore/page/PositionError.h \
+ Source/WebCore/page/PositionErrorCallback.h \
Source/WebCore/page/PositionOptions.h \
Source/WebCore/page/PrintContext.cpp \
Source/WebCore/page/PrintContext.h \
@@ -2283,8 +2296,6 @@ webcore_sources += \
Source/WebCore/page/WindowFeatures.h \
Source/WebCore/page/WorkerNavigator.cpp \
Source/WebCore/page/WorkerNavigator.h \
- Source/WebCore/page/XSSAuditor.cpp \
- Source/WebCore/page/XSSAuditor.h \
Source/WebCore/platform/animation/Animation.cpp \
Source/WebCore/platform/animation/Animation.h \
Source/WebCore/platform/animation/AnimationList.cpp \
@@ -2334,6 +2345,7 @@ webcore_sources += \
Source/WebCore/platform/graphics/ContextShadow.cpp \
Source/WebCore/platform/graphics/ContextShadow.h \
Source/WebCore/platform/graphics/DashArray.h \
+ Source/WebCore/platform/graphics/filters/DistantLightSource.cpp \
Source/WebCore/platform/graphics/filters/DistantLightSource.h \
Source/WebCore/platform/graphics/filters/FEBlend.cpp \
Source/WebCore/platform/graphics/filters/FEBlend.h \
@@ -2372,11 +2384,13 @@ webcore_sources += \
Source/WebCore/platform/graphics/filters/Filter.h \
Source/WebCore/platform/graphics/filters/LightSource.cpp \
Source/WebCore/platform/graphics/filters/LightSource.h \
+ Source/WebCore/platform/graphics/filters/PointLightSource.cpp \
Source/WebCore/platform/graphics/filters/PointLightSource.h \
Source/WebCore/platform/graphics/filters/SourceAlpha.cpp \
Source/WebCore/platform/graphics/filters/SourceAlpha.h \
Source/WebCore/platform/graphics/filters/SourceGraphic.cpp \
Source/WebCore/platform/graphics/filters/SourceGraphic.h \
+ Source/WebCore/platform/graphics/filters/SpotLightSource.cpp \
Source/WebCore/platform/graphics/filters/SpotLightSource.h \
Source/WebCore/platform/graphics/FloatPoint3D.cpp \
Source/WebCore/platform/graphics/FloatPoint3D.h \
@@ -2402,11 +2416,13 @@ webcore_sources += \
Source/WebCore/platform/graphics/FontFamily.h \
Source/WebCore/platform/graphics/FontFastPath.cpp \
Source/WebCore/platform/graphics/Font.h \
+ Source/WebCore/platform/graphics/FontMetrics.h \
Source/WebCore/platform/graphics/FontOrientation.h \
Source/WebCore/platform/graphics/FontRenderingMode.h \
Source/WebCore/platform/graphics/FontSelector.h \
Source/WebCore/platform/graphics/FontSmoothingMode.h \
Source/WebCore/platform/graphics/FontTraitsMask.h \
+ Source/WebCore/platform/graphics/FontWidthVariant.h \
Source/WebCore/platform/graphics/GeneratedImage.cpp \
Source/WebCore/platform/graphics/GeneratedImage.h \
Source/WebCore/platform/graphics/Generator.h \
@@ -2609,11 +2625,12 @@ webcore_sources += \
Source/WebCore/platform/text/BidiContext.cpp \
Source/WebCore/platform/text/BidiContext.h \
Source/WebCore/platform/text/BidiResolver.h \
- Source/WebCore/platform/text/CharacterNames.h \
Source/WebCore/platform/text/Hyphenation.cpp \
Source/WebCore/platform/text/Hyphenation.h \
Source/WebCore/platform/text/LineEnding.cpp \
Source/WebCore/platform/text/LineEnding.h \
+ Source/WebCore/platform/text/LocalizedNumber.h \
+ Source/WebCore/platform/text/LocalizedNumberNone.cpp \
Source/WebCore/platform/text/ParserUtilities.h \
Source/WebCore/platform/text/PlatformString.h \
Source/WebCore/platform/text/RegularExpression.cpp \
@@ -2633,6 +2650,8 @@ webcore_sources += \
Source/WebCore/platform/text/TextCodecUserDefined.h \
Source/WebCore/platform/text/TextCodecUTF16.cpp \
Source/WebCore/platform/text/TextCodecUTF16.h \
+ Source/WebCore/platform/text/TextCodecUTF8.cpp \
+ Source/WebCore/platform/text/TextCodecUTF8.h \
Source/WebCore/platform/text/TextDirection.h \
Source/WebCore/platform/text/TextEncoding.cpp \
Source/WebCore/platform/text/TextEncodingDetector.h \
@@ -2655,6 +2674,7 @@ webcore_sources += \
Source/WebCore/platform/Timer.cpp \
Source/WebCore/platform/Timer.h \
Source/WebCore/platform/TreeShared.h \
+ Source/WebCore/platform/URLString.h \
Source/WebCore/platform/UUID.cpp \
Source/WebCore/platform/UUID.h \
Source/WebCore/platform/Widget.cpp \
@@ -2734,6 +2754,8 @@ webcore_sources += \
Source/WebCore/rendering/RenderBR.h \
Source/WebCore/rendering/RenderButton.cpp \
Source/WebCore/rendering/RenderButton.h \
+ Source/WebCore/rendering/RenderCombineText.cpp \
+ Source/WebCore/rendering/RenderCombineText.h \
Source/WebCore/rendering/RenderCounter.cpp \
Source/WebCore/rendering/RenderCounter.h \
Source/WebCore/rendering/RenderDataGrid.cpp \
@@ -3723,8 +3745,6 @@ webcoregtk_sources += \
Source/WebCore/platform/gtk/GOwnPtrGtk.h \
Source/WebCore/platform/gtk/GRefPtrGtk.cpp \
Source/WebCore/platform/gtk/GRefPtrGtk.h \
- Source/WebCore/platform/gtk/gtk2drawing.c \
- Source/WebCore/platform/gtk/gtkdrawing.h \
Source/WebCore/platform/gtk/GtkPluginWidget.cpp \
Source/WebCore/platform/gtk/GtkPluginWidget.h \
Source/WebCore/platform/gtk/GtkVersioning.c \
@@ -3799,23 +3819,6 @@ webcoregtk_sources += \
Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp \
Source/WebCore/platform/network/soup/SoupURIUtils.cpp \
Source/WebCore/platform/network/soup/SoupURIUtils.h \
- Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.c \
- Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.h \
- Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c \
- Source/WebCore/platform/network/soup/cache/soup-http-input-stream.h \
- Source/WebCore/platform/network/soup/cache/soup-request-data.c \
- Source/WebCore/platform/network/soup/cache/soup-request-data.h \
- Source/WebCore/platform/network/soup/cache/soup-request-file.c \
- Source/WebCore/platform/network/soup/cache/soup-request-file.h \
- Source/WebCore/platform/network/soup/cache/soup-request-http.c \
- Source/WebCore/platform/network/soup/cache/soup-request-http.h \
- Source/WebCore/platform/network/soup/cache/soup-request.c \
- Source/WebCore/platform/network/soup/cache/soup-request.h \
- Source/WebCore/platform/network/soup/cache/soup-requester.c \
- Source/WebCore/platform/network/soup/cache/soup-requester.h \
- Source/WebCore/platform/network/soup/cache/webkit/soup-cache.c \
- Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h \
- Source/WebCore/platform/network/soup/cache/webkit/soup-cache-private.h \
Source/WebCore/plugins/gtk/PluginDataGtk.cpp \
Source/WebCore/plugins/gtk/PluginPackageGtk.cpp \
Source/WebCore/plugins/gtk/PluginViewGtk.cpp
@@ -4170,6 +4173,16 @@ endif # END USE_GSTREAMER
endif # END ENABLE_VIDEO
# ----
+# Media Statistics Support
+# ----
+if ENABLE_MEDIA_STATISTICS
+FEATURE_DEFINES += ENABLE_MEDIA_STATISTICS=1
+webcore_cppflags += -DENABLE_MEDIA_STATISTICS=1
+else
+webcore_cppflags += -DENABLE_MEDIA_STATISTICS=0
+endif # END ENABLE_MEDIA_STATISTICS
+
+# ----
# Javascript Fullscreen Support
# ----
if ENABLE_FULLSCREEN_API
@@ -4652,6 +4665,102 @@ DerivedSources/WebCore/XLinkNames.cpp : $(WebCore)/dom/make_names.pl $(WebCore)/
if ENABLE_WEB_AUDIO
FEATURE_DEFINES += ENABLE_WEB_AUDIO=1
webcore_cppflags += -DENABLE_WEB_AUDIO=1
+webcore_sources += \
+ Source/WebCore/webaudio/AudioBasicProcessorNode.cpp \
+ Source/WebCore/webaudio/AudioBasicProcessorNode.h \
+ Source/WebCore/webaudio/AudioBuffer.cpp \
+ Source/WebCore/webaudio/AudioBuffer.h \
+ Source/WebCore/webaudio/AudioBufferSourceNode.cpp \
+ Source/WebCore/webaudio/AudioBufferSourceNode.h \
+ Source/WebCore/webaudio/AudioChannelMerger.cpp \
+ Source/WebCore/webaudio/AudioChannelMerger.h \
+ Source/WebCore/webaudio/AudioChannelSplitter.cpp \
+ Source/WebCore/webaudio/AudioChannelSplitter.h \
+ Source/WebCore/webaudio/AudioContext.cpp \
+ Source/WebCore/webaudio/AudioContext.h \
+ Source/WebCore/webaudio/AudioDestinationNode.cpp \
+ Source/WebCore/webaudio/AudioDestinationNode.h \
+ Source/WebCore/webaudio/AudioGain.h \
+ Source/WebCore/webaudio/AudioGainNode.cpp \
+ Source/WebCore/webaudio/AudioGainNode.h \
+ Source/WebCore/webaudio/AudioListener.cpp \
+ Source/WebCore/webaudio/AudioListener.h \
+ Source/WebCore/webaudio/AudioNode.cpp \
+ Source/WebCore/webaudio/AudioNode.h \
+ Source/WebCore/webaudio/AudioNodeInput.cpp \
+ Source/WebCore/webaudio/AudioNodeInput.h \
+ Source/WebCore/webaudio/AudioNodeOutput.cpp \
+ Source/WebCore/webaudio/AudioNodeOutput.h \
+ Source/WebCore/webaudio/AudioPannerNode.cpp \
+ Source/WebCore/webaudio/AudioPannerNode.h \
+ Source/WebCore/webaudio/AudioParam.cpp \
+ Source/WebCore/webaudio/AudioParam.h \
+ Source/WebCore/webaudio/AudioProcessingEvent.cpp \
+ Source/WebCore/webaudio/AudioProcessingEvent.h \
+ Source/WebCore/webaudio/AudioSourceNode.h \
+ Source/WebCore/webaudio/BiquadDSPKernel.cpp \
+ Source/WebCore/webaudio/BiquadDSPKernel.h \
+ Source/WebCore/webaudio/BiquadProcessor.cpp \
+ Source/WebCore/webaudio/BiquadProcessor.h \
+ Source/WebCore/webaudio/ConvolverNode.cpp \
+ Source/WebCore/webaudio/ConvolverNode.h \
+ Source/WebCore/webaudio/DelayDSPKernel.cpp \
+ Source/WebCore/webaudio/DelayDSPKernel.h \
+ Source/WebCore/webaudio/DelayNode.cpp \
+ Source/WebCore/webaudio/DelayNode.h \
+ Source/WebCore/webaudio/DelayProcessor.cpp \
+ Source/WebCore/webaudio/DelayProcessor.h \
+ Source/WebCore/webaudio/HighPass2FilterNode.cpp \
+ Source/WebCore/webaudio/HighPass2FilterNode.h \
+ Source/WebCore/webaudio/JavaScriptAudioNode.cpp \
+ Source/WebCore/webaudio/JavaScriptAudioNode.h \
+ Source/WebCore/webaudio/LowPass2FilterNode.cpp \
+ Source/WebCore/webaudio/LowPass2FilterNode.h \
+ Source/WebCore/webaudio/RealtimeAnalyser.cpp \
+ Source/WebCore/webaudio/RealtimeAnalyser.h \
+ Source/WebCore/webaudio/RealtimeAnalyserNode.cpp \
+ Source/WebCore/webaudio/RealtimeAnalyserNode.h
+webcore_built_sources += \
+ DerivedSources/WebCore/JSAudioBuffer.cpp \
+ DerivedSources/WebCore/JSAudioBuffer.h \
+ DerivedSources/WebCore/JSAudioBufferSourceNode.cpp \
+ DerivedSources/WebCore/JSAudioBufferSourceNode.h \
+ DerivedSources/WebCore/JSAudioChannelMerger.cpp \
+ DerivedSources/WebCore/JSAudioChannelMerger.h \
+ DerivedSources/WebCore/JSAudioChannelSplitter.cpp \
+ DerivedSources/WebCore/JSAudioChannelSplitter.h \
+ DerivedSources/WebCore/JSAudioContext.cpp \
+ DerivedSources/WebCore/JSAudioContext.h \
+ DerivedSources/WebCore/JSAudioDestinationNode.cpp \
+ DerivedSources/WebCore/JSAudioDestinationNode.h \
+ DerivedSources/WebCore/JSAudioGain.cpp \
+ DerivedSources/WebCore/JSAudioGain.h \
+ DerivedSources/WebCore/JSAudioGainNode.cpp \
+ DerivedSources/WebCore/JSAudioGainNode.h \
+ DerivedSources/WebCore/JSAudioListener.cpp \
+ DerivedSources/WebCore/JSAudioListener.h \
+ DerivedSources/WebCore/JSAudioNode.cpp \
+ DerivedSources/WebCore/JSAudioNode.h \
+ DerivedSources/WebCore/JSAudioPannerNode.cpp \
+ DerivedSources/WebCore/JSAudioPannerNode.h \
+ DerivedSources/WebCore/JSAudioParam.cpp \
+ DerivedSources/WebCore/JSAudioParam.h \
+ DerivedSources/WebCore/JSAudioProcessingEvent.cpp \
+ DerivedSources/WebCore/JSAudioProcessingEvent.h \
+ DerivedSources/WebCore/JSAudioSourceNode.cpp \
+ DerivedSources/WebCore/JSAudioSourceNode.h \
+ DerivedSources/WebCore/JSConvolverNode.cpp \
+ DerivedSources/WebCore/JSConvolverNode.h \
+ DerivedSources/WebCore/JSDelayNode.cpp \
+ DerivedSources/WebCore/JSDelayNode.h \
+ DerivedSources/WebCore/JSHighPass2FilterNode.cpp \
+ DerivedSources/WebCore/JSHighPass2FilterNode.h \
+ DerivedSources/WebCore/JSJavaScriptAudioNode.cpp \
+ DerivedSources/WebCore/JSJavaScriptAudioNode.h \
+ DerivedSources/WebCore/JSLowPass2FilterNode.cpp \
+ DerivedSources/WebCore/JSLowPass2FilterNode.h \
+ DerivedSources/WebCore/JSRealtimeAnalyserNode.cpp \
+ DerivedSources/WebCore/JSRealtimeAnalyserNode.h
endif
# ----
@@ -4678,9 +4787,9 @@ endif # END ENABLE_BLOB
# ---
# 3D canvas (WebGL) support
# ---
-if ENABLE_3D_CANVAS
-FEATURE_DEFINES += ENABLE_3D_CANVAS=1
-webcore_cppflags += -DENABLE_3D_CANVAS=1
+if ENABLE_WEBGL
+FEATURE_DEFINES += ENABLE_WEBGL=1
+webcore_cppflags += -DENABLE_WEBGL=1
webcore_sources += \
Source/WebCore/html/canvas/WebGLActiveInfo.h \
Source/WebCore/html/canvas/WebGLBuffer.cpp \
@@ -4707,7 +4816,7 @@ webcore_sources += \
Source/WebCore/html/canvas/WebGLTexture.h \
Source/WebCore/html/canvas/WebGLUniformLocation.cpp \
Source/WebCore/html/canvas/WebGLUniformLocation.h
-endif # END ENABLE_3D_CANVAS
+endif # END ENABLE_WEBGL
DerivedSources/WebCore/CSSPropertyNames.cpp: DerivedSources/WebCore/CSSPropertyNames.h
DerivedSources/WebCore/CSSPropertyNames.h: $(WEBCORE_CSS_PROPERTY_NAMES) $(WebCore)/css/makeprop.pl
@@ -4935,6 +5044,8 @@ EXTRA_DIST += \
Source/WebCore/html/parser/HTMLEntityNames.in \
Source/WebCore/icu/LICENSE \
Source/WebCore/inspector/CodeGeneratorInspector.pm \
+ Source/WebCore/inspector/InjectedScriptSource.js \
+ Source/WebCore/inspector/xxd.pl \
Source/WebCore/LICENSE-APPLE \
Source/WebCore/LICENSE-LGPL-2 \
Source/WebCore/LICENSE-LGPL-2.1 \
diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in
index 250b629..1c71a0f 100644
--- a/Source/WebCore/WebCore.exp.in
+++ b/Source/WebCore/WebCore.exp.in
@@ -215,6 +215,7 @@ __ZN7WebCore11memoryCacheEv
__ZN7WebCore11toUserSpaceERK7_NSRectP8NSWindow
__ZN7WebCore11writeToFileEiPKci
__ZN7WebCore12ChromeClient20paintCustomScrollbarEPNS_15GraphicsContextERKNS_9FloatRectENS_20ScrollbarControlSizeEjNS_13ScrollbarPartEbffj
+__ZN7WebCore12ChromeClient23paintCustomOverhangAreaEPNS_15GraphicsContextERKNS_7IntRectES5_S5_
__ZN7WebCore12ChromeClient23paintCustomScrollCornerEPNS_15GraphicsContextERKNS_9FloatRectE
__ZN7WebCore12EditingStyleD1Ev
__ZN7WebCore12EventHandler10mouseMovedEP7NSEvent
@@ -266,7 +267,7 @@ __ZN7WebCore12PrintContext16computePageRectsERKNS_9FloatRectEfffRfb
__ZN7WebCore12PrintContext16isPageBoxVisibleEPNS_5FrameEi
__ZN7WebCore12PrintContext20pageNumberForElementEPNS_7ElementERKNS_9FloatSizeE
__ZN7WebCore12PrintContext26pageSizeAndMarginsInPixelsEPNS_5FrameEiiiiiii
-__ZN7WebCore12PrintContext27computeAutomaticScaleFactorEf
+__ZN7WebCore12PrintContext27computeAutomaticScaleFactorERKNS_9FloatSizeE
__ZN7WebCore12PrintContext27spoolAllPagesWithBoundariesEPNS_5FrameERNS_15GraphicsContextERKNS_9FloatSizeE
__ZN7WebCore12PrintContext28computePageRectsWithPageSizeERKNS_9FloatSizeEb
__ZN7WebCore12PrintContext3endEv
@@ -343,6 +344,9 @@ __ZN7WebCore14SVGSMILElement13isSMILElementEPNS_4NodeE
__ZN7WebCore14SchemeRegistry24registerURLSchemeAsLocalERKN3WTF6StringE
__ZN7WebCore14SchemeRegistry25registerURLSchemeAsSecureERKN3WTF6StringE
__ZN7WebCore14SchemeRegistry32registerURLSchemeAsEmptyDocumentERKN3WTF6StringE
+__ZN7WebCore14ScrollableArea17willEndLiveResizeEv
+__ZN7WebCore14ScrollableArea19willStartLiveResizeEv
+__ZN7WebCore14ScrollbarTheme11nativeThemeEv
__ZN7WebCore14SecurityOrigin14threadsafeCopyEv
__ZN7WebCore14SecurityOrigin16createFromStringERKN3WTF6StringE
__ZN7WebCore14SecurityOrigin18setLocalLoadPolicyENS0_15LocalLoadPolicyE
@@ -408,7 +412,7 @@ __ZN7WebCore16DeviceMotionData12Acceleration6createEbdbdbd
__ZN7WebCore16DeviceMotionData12RotationRate6createEbdbdbd
__ZN7WebCore16DeviceMotionData6createEN3WTF10PassRefPtrINS0_12AccelerationEEES4_NS2_INS0_12RotationRateEEEbd
__ZN7WebCore16FontFallbackList15releaseFontDataEv
-__ZN7WebCore16FontPlatformDataC1EP6NSFontfbbNS_15FontOrientationE
+__ZN7WebCore16FontPlatformDataC1EP6NSFontfbbNS_15FontOrientationENS_16FontWidthVariantE
__ZN7WebCore16FontPlatformDataD1Ev
__ZN7WebCore16HTMLInputElement13setAutofilledEb
__ZN7WebCore16LegacyWebArchive19createFromSelectionEPNS_5FrameE
@@ -430,10 +434,10 @@ __ZN7WebCore16NavigationActionC1ERKNS_4KURLENS_14NavigationTypeE
__ZN7WebCore16NavigationActionC1Ev
__ZN7WebCore16ScriptController10initScriptEPNS_15DOMWrapperWorldE
__ZN7WebCore16ScriptController11createWorldEv
-__ZN7WebCore16ScriptController13executeScriptERKN3WTF6StringEbNS_14ShouldAllowXSSE
+__ZN7WebCore16ScriptController13executeScriptERKN3WTF6StringEb
__ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE
__ZN7WebCore16ScriptController18windowScriptObjectEv
-__ZN7WebCore16ScriptController20executeScriptInWorldEPNS_15DOMWrapperWorldERKN3WTF6StringEbNS_14ShouldAllowXSSE
+__ZN7WebCore16ScriptController20executeScriptInWorldEPNS_15DOMWrapperWorldERKN3WTF6StringEb
__ZN7WebCore16ScriptController24jsObjectForPluginElementEPNS_17HTMLPlugInElementE
__ZN7WebCore16ThreadGlobalData10staticDataE
__ZN7WebCore16ThreadGlobalDataC1Ev
@@ -446,7 +450,6 @@ __ZN7WebCore16createFullMarkupEPKNS_5RangeE
__ZN7WebCore16enclosingIntRectERK7_NSRect
__ZN7WebCore16enclosingIntRectERKNS_9FloatRectE
__ZN7WebCore16isEndOfParagraphERKNS_15VisiblePositionENS_27EditingBoundaryCrossingRuleE
-__ZN7WebCore16jsStringSlowCaseEPN3JSC9ExecStateERNS0_9WeakGCMapIPN3WTF10StringImplEPNS0_8JSStringEEES6_
__ZN7WebCore17CredentialStorage3getERKNS_15ProtectionSpaceE
__ZN7WebCore17DOMImplementation13isXMLMIMETypeERKN3WTF6StringE
__ZN7WebCore17DOMImplementation14isTextMIMETypeERKN3WTF6StringE
@@ -535,7 +538,7 @@ __ZN7WebCore23ReplaceSelectionCommandC1EPNS_8DocumentEN3WTF10PassRefPtrINS_16Doc
__ZN7WebCore23createFragmentFromNodesEPNS_8DocumentERKN3WTF6VectorIPNS_4NodeELm0EEE
__ZN7WebCore23overrideDefaultLanguageERKN3WTF6StringE
__ZN7WebCore24BinaryPropertyListWriter17writePropertyListEv
-__ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker10MarkerTypeE
+__ZN7WebCore24DocumentMarkerController13removeMarkersEj
__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
__ZN7WebCore24DocumentMarkerController23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE
@@ -621,6 +624,7 @@ __ZN7WebCore4FontaSERKS0_
__ZN7WebCore4Icon18createIconForFilesERKN3WTF6VectorINS1_6StringELm0EEE
__ZN7WebCore4IconD1Ev
__ZN7WebCore4KURL10invalidateEv
+__ZN7WebCore4KURLC1ENS_18ParsedURLStringTagEPKc
__ZN7WebCore4KURLC1ENS_18ParsedURLStringTagERKN3WTF6StringE
__ZN7WebCore4KURLC1EP5NSURL
__ZN7WebCore4KURLC1EPK7__CFURL
@@ -751,6 +755,7 @@ __ZN7WebCore6WidgetD2Ev
__ZN7WebCore6toNodeEN3JSC7JSValueE
__ZN7WebCore7Console21shouldPrintExceptionsEv
__ZN7WebCore7Console24setShouldPrintExceptionsEb
+__ZN7WebCore7IntRect5scaleEf
__ZN7WebCore7IntRect5uniteERKS0_
__ZN7WebCore7IntRect9intersectERKS0_
__ZN7WebCore7IntRectC1ERKNS_9FloatRectE
@@ -781,7 +786,6 @@ __ZN7WebCore8GradientC1ERKNS_10FloatPointES3_
__ZN7WebCore8IntPointC1ERK8_NSPoint
__ZN7WebCore8PositionC1EN3WTF10PassRefPtrINS_4NodeEEEi
__ZN7WebCore8Settings14setJavaEnabledEb
-__ZN7WebCore8Settings18setWebAudioEnabledEb
__ZN7WebCore8Settings15setWebGLEnabledEb
__ZN7WebCore8Settings16setUsesPageCacheEb
__ZN7WebCore8Settings17setPluginsEnabledEb
@@ -790,6 +794,7 @@ __ZN7WebCore8Settings18setDefaultFontSizeEi
__ZN7WebCore8Settings18setFixedFontFamilyERKN3WTF12AtomicStringE
__ZN7WebCore8Settings18setMinimumFontSizeEi
__ZN7WebCore8Settings18setSerifFontFamilyERKN3WTF12AtomicStringE
+__ZN7WebCore8Settings18setWebAudioEnabledEb
__ZN7WebCore8Settings19setShowDebugBordersEb
__ZN7WebCore8Settings20setCursiveFontFamilyERKN3WTF12AtomicStringE
__ZN7WebCore8Settings20setFantasyFontFamilyERKN3WTF12AtomicStringE
@@ -867,6 +872,7 @@ __ZN7WebCore9FrameView14setNeedsLayoutEv
__ZN7WebCore9FrameView14setTransparentEb
__ZN7WebCore9FrameView15setMarginHeightEi
__ZN7WebCore9FrameView16setPaintBehaviorEj
+__ZN7WebCore9FrameView17setScrollPositionERKNS_8IntPointE
__ZN7WebCore9FrameView18updateControlTintsEv
__ZN7WebCore9FrameView20enterCompositingModeEv
__ZN7WebCore9FrameView21flushDeferredRepaintsEv
@@ -875,9 +881,9 @@ __ZN7WebCore9FrameView23updateCanHaveScrollbarsEv
__ZN7WebCore9FrameView24forceLayoutForPaginationERKNS_9FloatSizeEfNS_5Frame19AdjustViewSizeOrNotE
__ZN7WebCore9FrameView26adjustPageHeightDeprecatedEPffff
__ZN7WebCore9FrameView29setShouldUpdateWhileOffscreenEb
-__ZN7WebCore9FrameView38syncCompositingStateIncludingSubframesEv
__ZN7WebCore9FrameView37updateLayoutAndStyleIfNeededRecursiveEv
__ZN7WebCore9FrameView38scrollPositionChangedViaPlatformWidgetEv
+__ZN7WebCore9FrameView38syncCompositingStateIncludingSubframesEv
__ZN7WebCore9FrameView6createEPNS_5FrameE
__ZN7WebCore9FrameView6createEPNS_5FrameERKNS_7IntSizeE
__ZN7WebCore9HTMLNames10listingTagE
@@ -954,6 +960,10 @@ __ZNK7WebCore10PluginData16supportsMimeTypeERKN3WTF6StringE
__ZNK7WebCore10RenderText16linesBoundingBoxEv
__ZNK7WebCore10RenderText9firstRunXEv
__ZNK7WebCore10RenderText9firstRunYEv
+__ZNK7WebCore10RenderView6docTopEv
+__ZNK7WebCore10RenderView7docLeftEv
+__ZNK7WebCore10RenderView8docRightEv
+__ZNK7WebCore10RenderView9docBottomEv
__ZNK7WebCore10ScrollView12contentsSizeEv
__ZNK7WebCore10ScrollView12documentViewEv
__ZNK7WebCore10ScrollView14scrollbarModesERNS_13ScrollbarModeES2_
@@ -980,6 +990,7 @@ __ZNK7WebCore11HistoryItem12isTargetItemEv
__ZNK7WebCore11HistoryItem12redirectURLsEv
__ZNK7WebCore11HistoryItem14alternateTitleEv
__ZNK7WebCore11HistoryItem15lastVisitedTimeEv
+__ZNK7WebCore11HistoryItem15pageScaleFactorEv
__ZNK7WebCore11HistoryItem17originalURLStringEv
__ZNK7WebCore11HistoryItem20getTransientPropertyERKN3WTF6StringE
__ZNK7WebCore11HistoryItem21encodeBackForwardTreeERN3WTF7EncoderE
@@ -1001,6 +1012,7 @@ __ZNK7WebCore12IconDatabase24shouldStopThreadActivityEv
__ZNK7WebCore12IconDatabase9isEnabledEv
__ZNK7WebCore12RenderObject14enclosingLayerEv
__ZNK7WebCore12RenderObject15localToAbsoluteENS_10FloatPointEbb
+__ZNK7WebCore12RenderObject4viewEv
__ZNK7WebCore12RenderObject7childAtEj
__ZNK7WebCore12RenderWidget14windowClipRectEv
__ZNK7WebCore12SharedBuffer11getSomeDataERPKcj
@@ -1078,6 +1090,7 @@ __ZNK7WebCore19AnimationController24numberOfActiveAnimationsEv
__ZNK7WebCore19ResourceRequestBase10httpMethodEv
__ZNK7WebCore19ResourceRequestBase15httpHeaderFieldEPKc
__ZNK7WebCore19ResourceRequestBase3urlEv
+__ZNK7WebCore19ResourceRequestBase6isNullEv
__ZNK7WebCore19ResourceRequestBase7isEmptyEv
__ZNK7WebCore19SelectionController11currentFormEv
__ZNK7WebCore19SelectionController15copyTypingStyleEv
@@ -1118,6 +1131,7 @@ __ZNK7WebCore4KURL14fileSystemPathEv
__ZNK7WebCore4KURL17lastPathComponentEv
__ZNK7WebCore4KURL4hostEv
__ZNK7WebCore4KURL4pathEv
+__ZNK7WebCore4KURL8protocolEv
__ZNK7WebCore4KURLcvP5NSURLEv
__ZNK7WebCore4Node14isDescendantOfEPKS0_
__ZNK7WebCore4Node18getSubresourceURLsERN3WTF11ListHashSetINS_4KURLELm256ENS_8KURLHashEEE
@@ -1126,6 +1140,7 @@ __ZNK7WebCore4Page10pluginDataEv
__ZNK7WebCore4Page15backForwardListEv
__ZNK7WebCore4Page34inLowQualityImageInterpolationModeEv
__ZNK7WebCore4Page9groupNameEv
+__ZNK7WebCore5Color7getRGBAERdS1_S1_S1_
__ZNK7WebCore5Frame13ownerRendererEv
__ZNK7WebCore5Frame14selectionImageEb
__ZNK7WebCore5Frame15contentRendererEv
@@ -1183,6 +1198,7 @@ __ZNK7WebCore7IntRect8containsERKS0_
__ZNK7WebCore7IntRectcv6CGRectEv
__ZNK7WebCore7IntRectcv7_NSRectEv
__ZNK7WebCore7IntSizecv7_NSSizeEv
+__ZNK7WebCore8Document10renderViewEv
__ZNK7WebCore8Document11completeURLERKN3WTF6StringE
__ZNK7WebCore8Document13axObjectCacheEv
__ZNK7WebCore8Document13nodesFromRectEiijjjjb
@@ -1218,6 +1234,7 @@ __ZTVN7WebCore12ChromeClientE
__ZTVN7WebCore17FileChooserClientE
__ZTVN7WebCore17FrameLoaderClientE
__ZTVN7WebCore25HistoryPropertyListWriterE
+__ZTVN7WebCore28InspectorFrontendClientLocal8SettingsE
_filenameByFixingIllegalCharacters
_hasCaseInsensitiveSubstring
_hasCaseInsensitiveSuffix
@@ -1246,6 +1263,7 @@ _wkGetFontInLanguageForCharacter
_wkGetFontInLanguageForRange
_wkGetGlyphTransformedAdvances
_wkGetGlyphsForCharacters
+_wkGetHTTPPipeliningPriority
_wkGetHyphenationLocationBeforeIndex
_wkGetMIMETypeForExtension
_wkGetNSURLResponseCalculatedExpiration
@@ -1276,6 +1294,7 @@ _wkSetCONNECTProxyAuthorizationForStream
_wkSetCONNECTProxyForStream
_wkSetCookieStoragePrivateBrowsingEnabled
_wkSetDragImage
+_wkSetHTTPPipeliningPriority
_wkSetNSURLConnectionDefersCallbacks
_wkSetNSURLRequestShouldContentSniff
_wkSetPatternBaseCTM
@@ -1286,13 +1305,51 @@ _wkSignalCFReadStreamError
_wkSignalCFReadStreamHasBytes
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+_wkContentAreaDidHide
+_wkContentAreaDidShow
+_wkContentAreaResized
+_wkContentAreaScrolled
+_wkContentAreaWillPaint
_wkCreateCTTypesetterWithUniCharProviderAndOptions
+_wkHorizontalScrollbarPainterForController
_wkIOSurfaceContextCreate
_wkIOSurfaceContextCreateImage
_wkMakeScrollbarPainter
+_wkMakeScrollbarPainterController
+_wkMakeScrollbarReplacementPainter
+_wkMouseEnteredContentArea
+_wkMouseExitedContentArea
+_wkMouseMovedInContentArea
+_wkScrollbarMinimumThumbLength
+_wkScrollbarMinimumTotalLengthNeededForThumb
+_wkScrollbarPainterIsHorizontal
+_wkScrollbarPainterKnobAlpha
_wkScrollbarPainterPaint
+_wkScrollbarPainterSetDelegate
+_wkScrollbarPainterSetOverlayState
+_wkScrollbarPainterTrackAlpha
+_wkScrollbarPainterUsesOverlayScrollers
+_wkScrollbarThickness
+_wkSetPainterForPainterController
+_wkSetScrollbarPainterControllerStyle
+_wkSetScrollbarPainterKnobAlpha
+_wkSetScrollbarPainterTrackAlpha
+_wkVerticalScrollbarPainterForController
+_wkWillEndLiveResize
+_wkWillStartLiveResize
#endif
+_wkUnregisterUniqueIdForElement
+_wkAccessibilityHandleFocusChanged
+_wkGetAXTextMarkerTypeID
+_wkGetAXTextMarkerRangeTypeID
+_wkCreateAXTextMarkerRange
+_wkCopyAXTextMarkerRangeStart
+_wkCopyAXTextMarkerRangeEnd
+_wkCreateAXTextMarker
+_wkGetBytesFromAXTextMarker
+_wkCreateAXUIElementRef
+
#if ENABLE(3D_RENDERING)
_WebCoreHas3DRendering
#endif
@@ -1357,28 +1414,23 @@ __ZN7WebCore22GeolocationServiceMock8setErrorEN3WTF10PassRefPtrINS_13PositionErr
#if ENABLE(INSPECTOR)
__ZN7WebCore15InspectorClient31doDispatchMessageOnFrontendPageEPNS_4PageERKN3WTF6StringE
-__ZN7WebCore19InspectorController12ConsolePanelE
-__ZN7WebCore19InspectorController12ScriptsPanelE
-__ZN7WebCore19InspectorController13ProfilesPanelE
-__ZN7WebCore19InspectorController21showAndEnableDebuggerEv
-__ZN7WebCore19InspectorController14enableProfilerEbb
-__ZN7WebCore19InspectorController15disableDebuggerEb
-__ZN7WebCore19InspectorController15disableProfilerEb
+__ZN7WebCore19InspectorController14enableProfilerEv
+__ZN7WebCore19InspectorController15debuggerEnabledEv
+__ZN7WebCore19InspectorController15disableDebuggerEv
+__ZN7WebCore19InspectorController15disableProfilerEv
+__ZN7WebCore19InspectorController15profilerEnabledEv
__ZN7WebCore19InspectorController18disconnectFrontendEv
__ZN7WebCore19InspectorController20stopTimelineProfilerEv
+__ZN7WebCore19InspectorController21showAndEnableDebuggerEv
+__ZN7WebCore19InspectorController11showConsoleEv
__ZN7WebCore19InspectorController21startTimelineProfilerEv
-__ZN7WebCore19InspectorController23inspectorStartsAttachedEv
+__ZN7WebCore19InspectorController23timelineProfilerEnabledEv
__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKN3WTF6StringE
__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE
-__ZN7WebCore19InspectorController26setInspectorStartsAttachedEb
-__ZN7WebCore19InspectorController27startUserInitiatedProfilingEv
__ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
-__ZNK7WebCore19InspectorController31isRecordingUserInitiatedProfileEv
-__ZNK7WebCore19InspectorController15profilerEnabledEv
+__ZN7WebCore19InspectorController27startUserInitiatedProfilingEv
__ZN7WebCore19InspectorController4showEv
__ZN7WebCore19InspectorController5closeEv
-__ZN7WebCore19InspectorController7inspectEPNS_4NodeE
-__ZN7WebCore19InspectorController9showPanelERKN3WTF6StringE
__ZN7WebCore28InspectorFrontendClientLocal12moveWindowByEff
__ZN7WebCore28InspectorFrontendClientLocal14frontendLoadedEv
__ZN7WebCore28InspectorFrontendClientLocal15canAttachWindowEv
@@ -1388,10 +1440,10 @@ __ZN7WebCore28InspectorFrontendClientLocal19requestDetachWindowEv
__ZN7WebCore28InspectorFrontendClientLocal19windowObjectClearedEv
__ZN7WebCore28InspectorFrontendClientLocal26changeAttachedWindowHeightEj
__ZN7WebCore28InspectorFrontendClientLocal27restoreAttachedWindowHeightEv
-__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageE
+__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageEN3WTF10PassOwnPtrINS0_8SettingsEEE
__ZN7WebCore28InspectorFrontendClientLocalD2Ev
__ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE
-__ZNK7WebCore19InspectorController7enabledEv
+__ZNK7WebCore19InspectorController31isRecordingUserInitiatedProfileEv
#endif
#if ENABLE(JAVA_BRIDGE)
@@ -1431,8 +1483,8 @@ __NPN_SetProperty
__NPN_UTF8FromIdentifier
__ZN7WebCore16ScriptController20windowScriptNPObjectEv
__ZN7WebCore16ScriptController29cleanupScriptObjectsForPluginEPv
+__ZN7WebCore16jsStringSlowCaseEPN3JSC9ExecStateERNS0_9WeakGCMapIPN3WTF10StringImplENS0_8JSStringEEES6_
__ZN7WebCore17HTMLPlugInElement11getNPObjectEv
-__ZNK7WebCore12RenderObject4viewEv
__ZNK7WebCore14SecurityOrigin9canAccessEPKS0_
__ZNK7WebCore4KURL10protocolIsEPKc
__ZNK7WebCore4KURL7hasPathEv
@@ -1686,3 +1738,6 @@ __ZN7WebCore6Editor13uppercaseWordEv
__ZN7WebCore6Editor14capitalizeWordEv
#endif
+#if ENABLE(GESTURE_EVENTS)
+__ZN7WebCore12EventHandler18handleGestureEventERKNS_20PlatformGestureEventE
+#endif
diff --git a/Source/WebCore/WebCore.gyp/WebCore.gyp b/Source/WebCore/WebCore.gyp/WebCore.gyp
index f96753c..b155b50 100644
--- a/Source/WebCore/WebCore.gyp/WebCore.gyp
+++ b/Source/WebCore/WebCore.gyp/WebCore.gyp
@@ -45,7 +45,9 @@
},
},{
# WebKit is checked out in src/chromium/third_party/WebKit
- 'variables': {'chromium_src_dir': '../../../../..'},
+ 'variables': {
+ 'chromium_src_dir': '../../../../..',
+ },
}],
['OS == "mac"', {
'targets': [
@@ -104,6 +106,13 @@
'cflags!': ['-g'],
},
}],
+ ['OS=="linux" and target_arch=="arm"', {
+ # Due to a bug in gcc arm, we get warnings about uninitialized timesNewRoman.unstatic.3258
+ # and colorTransparent.unstatic.4879.
+ 'target_defaults': {
+ 'cflags': ['-Wno-uninitialized'],
+ },
+ }],
], # conditions
'variables': {
@@ -115,6 +124,10 @@
# binary and increasing the speed of gdb.
'enable_svg%': 1,
+ # Use v8 as default JavaScript engine. This makes sure that javascript_engine variable
+ # is set for both inside_chromium_build 0 and 1 cases.
+ 'javascript_engine%': 'v8',
+
'webcore_include_dirs': [
'../',
'../accessibility',
@@ -248,7 +261,6 @@
# FIXME: Eliminate dependency on platform/graphics/mac and
# related directories.
# platform/graphics/cg may need to stick around, though.
- '../loader/archive/cf',
'../platform/audio/mac',
'../platform/graphics/mac',
'../platform/mac',
@@ -748,7 +760,7 @@
'webcore_bindings_sources',
'inspector_protocol_sources',
'injected_script_source',
- '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:pcre',
+ '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:yarr',
'../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:wtf',
'<(chromium_src_dir)/build/temp_gyp/googleurl.gyp:googleurl',
'<(chromium_src_dir)/skia/skia.gyp:skia',
@@ -852,12 +864,17 @@
},
}],
# FIXME: (kbr) ideally this target should just depend on webcore_prerequisites
- # to pick up this include directory, but I'm nervous about making that change.
+ # to pick up these include directories, but I'm nervous about making that change.
['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_MKL=1" in feature_defines', {
'include_dirs': [
'<(chromium_src_dir)/third_party/mkl/include',
],
}],
+ ['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_FFTW=1" in feature_defines', {
+ 'include_dirs': [
+ '<(chromium_src_dir)/third_party/fftw/api',
+ ],
+ }],
],
},
{
@@ -867,7 +884,7 @@
'type': 'none',
'dependencies': [
'webcore_bindings',
- '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:pcre',
+ '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:yarr',
'../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:wtf',
'<(chromium_src_dir)/build/temp_gyp/googleurl.gyp:googleurl',
'<(chromium_src_dir)/skia/skia.gyp:skia',
@@ -884,7 +901,7 @@
],
'export_dependent_settings': [
'webcore_bindings',
- '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:pcre',
+ '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:yarr',
'../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:wtf',
'<(chromium_src_dir)/build/temp_gyp/googleurl.gyp:googleurl',
'<(chromium_src_dir)/skia/skia.gyp:skia',
@@ -936,9 +953,11 @@
],
'conditions': [
['inside_chromium_build==1 and OS=="win" and component=="shared_library"', {
- 'defines': [
- 'USING_V8_SHARED',
- ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'USING_V8_SHARED',
+ ],
+ },
}],
],
}],
@@ -959,20 +978,24 @@
'<(chromium_src_dir)/build/linux/system.gyp:fontconfig',
'<(chromium_src_dir)/build/linux/system.gyp:gtk',
],
- 'cflags': [
- # WebCore does not work with strict aliasing enabled.
- # https://bugs.webkit.org/show_bug.cgi?id=25864
- '-fno-strict-aliasing',
- ],
+ 'direct_dependent_settings': {
+ 'cflags': [
+ # WebCore does not work with strict aliasing enabled.
+ # https://bugs.webkit.org/show_bug.cgi?id=25864
+ '-fno-strict-aliasing',
+ ],
+ },
}],
['OS=="linux"', {
- 'defines': [
- # Mozilla on Linux effectively uses uname -sm, but when running
- # 32-bit x86 code on an x86_64 processor, it uses
- # "Linux i686 (x86_64)". Matching that would require making a
- # run-time determination.
- 'WEBCORE_NAVIGATOR_PLATFORM="Linux i686"',
- ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ # Mozilla on Linux effectively uses uname -sm, but when running
+ # 32-bit x86 code on an x86_64 processor, it uses
+ # "Linux i686 (x86_64)". Matching that would require making a
+ # run-time determination.
+ 'WEBCORE_NAVIGATOR_PLATFORM="Linux i686"',
+ ],
+ },
}],
['OS=="mac"', {
'dependencies': [
@@ -981,34 +1004,56 @@
'export_dependent_settings': [
'webkit_system_interface',
],
- 'defines': [
- # Match Safari and Mozilla on Mac x86.
- 'WEBCORE_NAVIGATOR_PLATFORM="MacIntel"',
-
- # Chromium's version of WebCore includes the following Objective-C
- # classes. The system-provided WebCore framework may also provide
- # these classes. Because of the nature of Objective-C binding
- # (dynamically at runtime), it's possible for the Chromium-provided
- # versions to interfere with the system-provided versions. This may
- # happen when a system framework attempts to use WebCore.framework,
- # such as when converting an HTML-flavored string to an
- # NSAttributedString. The solution is to force Objective-C class
- # names that would conflict to use alternate names.
+ 'direct_dependent_settings': {
+ 'defines': [
+ # Match Safari and Mozilla on Mac x86.
+ 'WEBCORE_NAVIGATOR_PLATFORM="MacIntel"',
- # FIXME: This list will hopefully shrink but may also grow.
- # Periodically run:
- # nm libwebcore.a | grep -E '[atsATS] ([+-]\[|\.objc_class_name)'
- # and make sure that everything listed there has the alternate
- # ChromiumWebCoreObjC name, and that nothing extraneous is listed
- # here. If all Objective-C can be eliminated from Chromium's WebCore
- # library, these defines should be removed entirely.
- 'ScrollbarPrefsObserver=ChromiumWebCoreObjCScrollbarPrefsObserver',
- 'WebCoreRenderThemeNotificationObserver=ChromiumWebCoreObjCWebCoreRenderThemeNotificationObserver',
- 'WebFontCache=ChromiumWebCoreObjCWebFontCache',
- ],
- 'include_dirs': [
- '../../../WebKitLibraries',
- ],
+ # Chromium's version of WebCore includes the following Objective-C
+ # classes. The system-provided WebCore framework may also provide
+ # these classes. Because of the nature of Objective-C binding
+ # (dynamically at runtime), it's possible for the
+ # Chromium-provided versions to interfere with the system-provided
+ # versions. This may happen when a system framework attempts to
+ # use WebCore.framework, such as when converting an HTML-flavored
+ # string to an NSAttributedString. The solution is to force
+ # Objective-C class names that would conflict to use alternate
+ # names.
+ #
+ # This list will hopefully shrink but may also grow. Its
+ # performance is monitored by the "Check Objective-C Rename"
+ # postbuild step, and any suspicious-looking symbols not handled
+ # here or whitelisted in that step will cause a build failure.
+ #
+ # If this is unhandled, the console will receive log messages
+ # such as:
+ # com.google.Chrome[] objc[]: Class ScrollbarPrefsObserver is implemented in both .../Google Chrome.app/Contents/Versions/.../Google Chrome Helper.app/Contents/MacOS/../../../Google Chrome Framework.framework/Google Chrome Framework and /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/WebCore. One of the two will be used. Which one is undefined.
+ 'ScrollbarPrefsObserver=ChromiumWebCoreObjCScrollbarPrefsObserver',
+ 'WebCoreRenderThemeNotificationObserver=ChromiumWebCoreObjCWebCoreRenderThemeNotificationObserver',
+ 'WebFontCache=ChromiumWebCoreObjCWebFontCache',
+ ],
+ 'include_dirs': [
+ '../../../WebKitLibraries',
+ ],
+ 'postbuilds': [
+ {
+ # This step ensures that any Objective-C names that aren't
+ # redefined to be "safe" above will cause a build failure.
+ 'postbuild_name': 'Check Objective-C Rename',
+ 'variables': {
+ 'class_whitelist_regex':
+ 'ChromiumWebCoreObjC|TCMVisibleView|RTCMFlippedView',
+ 'category_whitelist_regex':
+ 'TCMInterposing',
+ },
+ 'action': [
+ 'mac/check_objc_rename.sh',
+ '<(class_whitelist_regex)',
+ '<(category_whitelist_regex)',
+ ],
+ },
+ ],
+ },
}],
['OS=="win"', {
'dependencies': [
@@ -1017,14 +1062,16 @@
'export_dependent_settings': [
'<(chromium_src_dir)/build/win/system.gyp:cygwin'
],
- 'defines': [
- # Match Safari and Mozilla on Windows.
- 'WEBCORE_NAVIGATOR_PLATFORM="Win32"',
- '__PRETTY_FUNCTION__=__FUNCTION__',
- ],
- # This is needed because Event.h in this directory is blocked
- # by a system header on windows.
- 'include_dirs++': ['../dom'],
+ 'direct_dependent_settings': {
+ 'defines': [
+ # Match Safari and Mozilla on Windows.
+ 'WEBCORE_NAVIGATOR_PLATFORM="Win32"',
+ '__PRETTY_FUNCTION__=__FUNCTION__',
+ ],
+ # This is needed because Event.h in this directory is blocked
+ # by a system header on windows.
+ 'include_dirs++': ['../dom'],
+ },
}],
['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_MKL=1" in feature_defines', {
# This directory needs to be on the include path for multiple sub-targets of webcore.
@@ -1034,6 +1081,14 @@
],
},
}],
+ ['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_FFTW=1" in feature_defines', {
+ # This directory needs to be on the include path for multiple sub-targets of webcore.
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '<(chromium_src_dir)/third_party/fftw/api',
+ ],
+ },
+ }],
],
},
{
@@ -1096,7 +1151,7 @@
# Exclude things that don't apply to the Chromium platform on the basis
# of their enclosing directories and tags at the ends of their
# filenames.
- ['exclude', '(android|cairo|cf|cg|curl|gtk|haiku|linux|mac|mkl|opentype|posix|qt|soup|svg|symbian|win|wx)/'],
+ ['exclude', '(android|cairo|cf|cg|curl|fftw|gtk|haiku|linux|mac|mkl|opentype|posix|qt|soup|svg|symbian|win|wx)/'],
['exclude', '(?<!Chromium)(Android|Cairo|CF|CG|Curl|Gtk|Linux|Mac|OpenType|POSIX|Posix|Qt|Safari|Soup|Symbian|Win|Wx)\\.(cpp|mm?)$'],
# A few things can't be excluded by patterns. List them individually.
@@ -1136,10 +1191,6 @@
'<(chromium_src_dir)/third_party/harfbuzz/harfbuzz.gyp:harfbuzz',
],
}],
- ['OS=="linux" and target_arch=="arm"', {
- # Due to a bug in gcc arm, we get warnings about uninitialized timesNewRoman.unstatic.3258
- 'cflags': ['-Wno-uninitialized'],
- }],
['OS=="mac"', {
# Necessary for Mac .mm stuff.
'include_dirs': [
@@ -1187,7 +1238,6 @@
# Some of these are used instead of Chromium platform files, see
# the specific exclusions in the "sources!" list below.
['include', 'rendering/RenderThemeMac\\.mm$'],
- ['include', 'loader/archive/cf/LegacyWebArchive\\.cpp$'],
['include', 'platform/graphics/mac/ColorMac\\.mm$'],
['include', 'platform/graphics/mac/FloatPointMac\\.mm$'],
['include', 'platform/graphics/mac/FloatRectMac\\.mm$'],
@@ -1270,6 +1320,11 @@
['include', 'platform/audio/mkl/FFTFrameMKL\\.cpp$'],
],
}],
+ ['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_FFTW=1" in feature_defines', {
+ 'sources/': [
+ ['include', 'platform/audio/fftw/FFTFrameFFTW\\.cpp$'],
+ ],
+ }],
],
},
{
@@ -1328,6 +1383,12 @@
# Don't build IDBKeyPathBackendImpl. We have our own implementation.
['exclude', 'storage/IDBKeyPathBackendImpl\\.cpp$'],
+ # Don't build files needed for WebArchive support, since we disable
+ # this feature.
+ ['exclude', 'loader/archive/cf/LegacyWebArchive\\.cpp$'],
+ ['exclude', 'loader/archive/cf/LegacyWebArchiveMac\\.mm$'],
+ ['exclude', 'loader/archive/ArchiveFactory\\.cpp$'],
+
# Use loader/icon/IconDatabaseNone.cpp instead.
['exclude', 'loader/icon/IconDatabase\\.cpp$'],
@@ -1418,6 +1479,11 @@
['exclude', '/(Windows|Uniscribe)[^/]*\\.cpp$']
],
}],
+ ['javascript_engine=="v8"', {
+ 'dependencies': [
+ '<(chromium_src_dir)/v8/src/extensions/experimental/experimental.gyp:i18n_api',
+ ],
+ }],
],
},
{
@@ -1501,6 +1567,23 @@
},
},
}],
+ ['OS=="linux" and "WTF_USE_WEBAUDIO_FFTW=1" in feature_defines', {
+ # FIXME: (kbr) figure out how to make these dependencies
+ # work in a cross-platform way. Attempts to use
+ # "link_settings" and "libraries" in conjunction with the
+ # msvs-specific settings didn't work so far.
+ 'all_dependent_settings': {
+ 'ldflags': [
+ # FIXME: (kbr) build the FFTW into PRODUCT_DIR using GYP.
+ '-Lthird_party/fftw/.libs',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '-lfftw3f'
+ ],
+ },
+ },
+ }],
['enable_svg!=0', {
'dependencies': [
'webcore_svg',
diff --git a/Source/WebCore/WebCore.gyp/mac/check_objc_rename.sh b/Source/WebCore/WebCore.gyp/mac/check_objc_rename.sh
new file mode 100755
index 0000000..ed3c119
--- /dev/null
+++ b/Source/WebCore/WebCore.gyp/mac/check_objc_rename.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+#
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# This script checks a WebCore static library for potential Objective-C
+# class name collisions with the system's copy of the WebCore framework.
+# See the postbuild action that calls it from ../WebCore.gyp for details.
+
+set -e
+set -o pipefail
+
+if [[ $# -ne 2 ]]; then
+ echo "usage: ${0} class_whitelist_pattern category_whitelist_pattern" >& 2
+ exit 1
+fi
+
+lib="${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}"
+nm_pattern='[atsATS] ([+-]\[|\.objc_class_name_)'
+
+class_whitelist_pattern="${1}"
+category_whitelist_pattern="${2}"
+
+# Send nm's stderr in the pipeline to /dev/null to avoid spewing
+# "nm: no name list" messages. This means that if the pipelined nm fails, there
+# won't be any output, so if the entire assignment fails, run nm again to get
+# some output.
+violators=$(nm -p "${lib}" 2> /dev/null | \
+ (grep -E "${nm_pattern}" || true) | \
+ (grep -Ev "${nm_pattern}(${class_whitelist_pattern})" || true) | \
+ (grep -Ev "\((${category_whitelist_pattern})\)" || true)) || nm -p "${lib}"
+
+if [[ -z "${violators}" ]]; then
+ # An empty list means that everything's clean.
+ exit 0
+fi
+
+cat << __EOF__ >&2
+These Objective-C symbols may clash with those provided by the system's own
+WebCore framework:
+${violators}
+
+These symbols were found in:
+${lib}
+
+This should be corrected by adding the appropriate definitions to
+$(dirname ${0})/../WebCore.gyp
+or by updating the whitelist in
+${0}
+__EOF__
+
+exit 1
diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi
index ca52804..eb8016c 100644
--- a/Source/WebCore/WebCore.gypi
+++ b/Source/WebCore/WebCore.gypi
@@ -245,6 +245,7 @@
'page/BarInfo.idl',
'page/Console.idl',
'page/Coordinates.idl',
+ 'page/Crypto.idl',
'page/DOMSelection.idl',
'page/DOMWindow.idl',
'page/EventSource.idl',
@@ -677,6 +678,7 @@
'bindings/js/JSLocationCustom.h',
'bindings/js/JSMainThreadExecState.cpp',
'bindings/js/JSMainThreadExecState.h',
+ 'bindings/js/JSMemoryInfoCustom.cpp',
'bindings/js/JSMessageChannelCustom.cpp',
'bindings/js/JSMessageEventCustom.cpp',
'bindings/js/JSMessagePortCustom.cpp',
@@ -893,6 +895,7 @@
'bindings/v8/DOMDataStore.h',
'bindings/v8/DOMWrapperWorld.cpp',
'bindings/v8/DOMWrapperWorld.h',
+ 'bindings/v8/IntrusiveDOMWrapperMap.h',
'bindings/v8/IsolatedWorld.cpp',
'bindings/v8/IsolatedWorld.h',
'bindings/v8/JavaScriptCallFrame.cpp',
@@ -1219,6 +1222,8 @@
'dom/DocumentMarker.h',
'dom/DocumentMarkerController.cpp',
'dom/DocumentMarkerController.h',
+ 'dom/DocumentOrderedMap.cpp',
+ 'dom/DocumentOrderedMap.h',
'dom/DocumentParser.cpp',
'dom/DocumentParser.h',
'dom/DocumentTiming.h',
@@ -1986,6 +1991,8 @@
'html/parser/HTMLScriptRunner.cpp',
'html/parser/HTMLScriptRunner.h',
'html/parser/HTMLScriptRunnerHost.h',
+ 'html/parser/HTMLSourceTracker.cpp',
+ 'html/parser/HTMLSourceTracker.h',
'html/parser/HTMLToken.h',
'html/parser/HTMLTokenizer.cpp',
'html/parser/HTMLTokenizer.h',
@@ -1998,6 +2005,11 @@
'html/parser/TextDocumentParser.h',
'html/parser/TextViewSourceParser.cpp',
'html/parser/TextViewSourceParser.h',
+ 'html/parser/XSSFilter.cpp',
+ 'html/parser/XSSFilter.h',
+ 'html/shadow/MediaControls.cpp',
+ 'html/shadow/MediaControls.h',
+ 'html/shadow/ProgressBarValueElement.h',
'html/shadow/SliderThumbElement.cpp',
'html/shadow/SliderThumbElement.h',
'inspector/ConsoleMessage.cpp',
@@ -2006,6 +2018,8 @@
'inspector/InjectedScript.h',
'inspector/InjectedScriptHost.cpp',
'inspector/InjectedScriptHost.h',
+ 'inspector/InspectorAgent.cpp',
+ 'inspector/InspectorAgent.h',
'inspector/InspectorApplicationCacheAgent.cpp',
'inspector/InspectorApplicationCacheAgent.h',
'inspector/InspectorBrowserDebuggerAgent.cpp',
@@ -2014,12 +2028,14 @@
'inspector/InspectorClient.h',
'inspector/InspectorConsoleAgent.cpp',
'inspector/InspectorConsoleAgent.h',
+ 'inspector/InspectorConsoleInstrumentation.h',
'inspector/InspectorController.cpp',
'inspector/InspectorController.h',
'inspector/InspectorCSSAgent.cpp',
'inspector/InspectorCSSAgent.h',
'inspector/InspectorDatabaseAgent.cpp',
'inspector/InspectorDatabaseAgent.h',
+ 'inspector/InspectorDatabaseInstrumentation.h',
'inspector/InspectorDatabaseResource.cpp',
'inspector/InspectorDatabaseResource.h',
'inspector/InspectorDebuggerAgent.cpp',
@@ -2030,8 +2046,6 @@
'inspector/InspectorDOMStorageAgent.h',
'inspector/InspectorDOMStorageResource.cpp',
'inspector/InspectorDOMStorageResource.h',
- 'inspector/InspectorFileSystemAgent.cpp',
- 'inspector/InspectorFileSystemAgent.h',
'inspector/InspectorFrontendClient.h',
'inspector/InspectorFrontendHost.cpp',
'inspector/InspectorFrontendHost.h',
@@ -2044,8 +2058,6 @@
'inspector/InspectorRuntimeAgent.cpp',
'inspector/InspectorRuntimeAgent.h',
'inspector/InspectorState.cpp',
- 'inspector/InspectorSettings.h',
- 'inspector/InspectorSettings.cpp',
'inspector/InspectorState.h',
'inspector/InspectorStyleSheet.cpp',
'inspector/InspectorStyleSheet.h',
@@ -2054,7 +2066,6 @@
'inspector/InspectorValues.cpp',
'inspector/InspectorValues.h',
'inspector/InspectorWorkerResource.h',
- 'inspector/ScriptBreakpoint.cpp',
'inspector/ScriptBreakpoint.h',
'inspector/ScriptArguments.cpp',
'inspector/ScriptArguments.h',
@@ -2263,10 +2274,14 @@
'page/ChromeClient.h',
'page/Console.cpp',
'page/Console.h',
+ 'page/ContentSecurityPolicy.cpp',
+ 'page/ContentSecurityPolicy.h',
'page/ContextMenuClient.h',
'page/ContextMenuController.cpp',
'page/ContextMenuController.h',
'page/ContextMenuProvider.h',
+ 'page/Crypto.cpp',
+ 'page/Crypto.h',
'page/DOMSelection.cpp',
'page/DOMSelection.h',
'page/DOMTimer.cpp',
@@ -2373,8 +2388,6 @@
'page/WindowFeatures.h',
'page/WorkerNavigator.cpp',
'page/WorkerNavigator.h',
- 'page/XSSAuditor.cpp',
- 'page/XSSAuditor.h',
'platform/audio/AudioArray.h',
'platform/audio/AudioBus.h',
'platform/audio/AudioBus.cpp',
@@ -2431,6 +2444,7 @@
'platform/audio/VectorMath.h',
'platform/audio/VectorMath.cpp',
'platform/audio/chromium/AudioBusChromium.cpp',
+ 'platform/audio/fftw/FFTFrameFFTW.cpp',
'platform/audio/mac/AudioBusMac.mm',
'platform/audio/mac/AudioDestinationMac.h',
'platform/audio/mac/AudioDestinationMac.cpp',
@@ -2580,9 +2594,7 @@
'platform/graphics/chromium/GraphicsLayerChromium.h',
'platform/graphics/chromium/HarfbuzzSkia.cpp',
'platform/graphics/chromium/HarfbuzzSkia.h',
- 'platform/graphics/chromium/IconChromiumLinux.cpp',
- 'platform/graphics/chromium/IconChromiumMac.cpp',
- 'platform/graphics/chromium/IconChromiumWin.cpp',
+ 'platform/graphics/chromium/IconChromium.cpp',
'platform/graphics/chromium/ImageBufferData.h',
'platform/graphics/chromium/ImageChromium.cpp',
'platform/graphics/chromium/ImageChromiumMac.mm',
@@ -2622,6 +2634,7 @@
'platform/graphics/chromium/WebGLLayerChromium.h',
'platform/graphics/cocoa/FontPlatformData.h',
'platform/graphics/cocoa/FontPlatformDataCocoa.mm',
+ 'platform/graphics/filters/DistantLightSource.cpp',
'platform/graphics/filters/DistantLightSource.h',
'platform/graphics/filters/FEBlend.cpp',
'platform/graphics/filters/FEBlend.h',
@@ -2657,7 +2670,9 @@
'platform/graphics/filters/FETurbulence.h',
'platform/graphics/filters/LightSource.cpp',
'platform/graphics/filters/LightSource.h',
+ 'platform/graphics/filters/PointLightSource.cpp',
'platform/graphics/filters/PointLightSource.h',
+ 'platform/graphics/filters/SpotLightSource.cpp',
'platform/graphics/filters/SpotLightSource.h',
'platform/graphics/filters/Filter.h',
'platform/graphics/filters/FilterEffect.cpp',
@@ -2907,6 +2922,7 @@
'platform/graphics/FontFamily.cpp',
'platform/graphics/FontFamily.h',
'platform/graphics/FontFastPath.cpp',
+ 'platform/graphics/FontMetrics.h',
'platform/graphics/FontRenderingMode.h',
'platform/graphics/FontSelector.h',
'platform/graphics/FontSmoothingMode.h',
@@ -2956,6 +2972,8 @@
'platform/graphics/RoundedIntRect.h',
'platform/graphics/SegmentedFontData.cpp',
'platform/graphics/SegmentedFontData.h',
+ 'platform/graphics/ShadowBlur.cpp',
+ 'platform/graphics/ShadowBlur.h',
'platform/graphics/SimpleFontData.cpp',
'platform/graphics/SimpleFontData.h',
'platform/graphics/StringTruncator.cpp',
@@ -3305,11 +3323,12 @@
'platform/text/BidiContext.cpp',
'platform/text/BidiContext.h',
'platform/text/BidiResolver.h',
- 'platform/text/CharacterNames.h',
'platform/text/Hyphenation.cpp',
'platform/text/Hyphenation.h',
'platform/text/LineEnding.cpp',
'platform/text/LineEnding.h',
+ 'platform/text/LocalizedNumber.h',
+ 'platform/text/LocalizedNumberNone.cpp',
'platform/text/ParserUtilities.h',
'platform/text/PlatformString.h',
'platform/text/RegularExpression.cpp',
@@ -3333,6 +3352,8 @@
'platform/text/TextCodecLatin1.h',
'platform/text/TextCodecUTF16.cpp',
'platform/text/TextCodecUTF16.h',
+ 'platform/text/TextCodecUTF8.cpp',
+ 'platform/text/TextCodecUTF8.h',
'platform/text/TextCodecUserDefined.cpp',
'platform/text/TextCodecUserDefined.h',
'platform/text/TextDirection.h',
@@ -3540,6 +3561,7 @@
'platform/Timer.cpp',
'platform/Timer.h',
'platform/TreeShared.h',
+ 'platform/URLString.h',
'platform/UUID.cpp',
'platform/UUID.h',
'platform/Widget.cpp',
@@ -3575,6 +3597,8 @@
'plugins/DOMPlugin.h',
'plugins/DOMPluginArray.cpp',
'plugins/DOMPluginArray.h',
+ 'plugins/IFrameShimSupport.cpp',
+ 'plugins/IFrameShimSupport.h',
'plugins/PluginData.cpp',
'plugins/PluginData.h',
'plugins/PluginDatabase.cpp',
@@ -3814,6 +3838,8 @@
'rendering/RenderBoxModelObject.h',
'rendering/RenderButton.cpp',
'rendering/RenderButton.h',
+ 'rendering/RenderCombineText.cpp',
+ 'rendering/RenderCombineText.h',
'rendering/RenderCounter.cpp',
'rendering/RenderCounter.h',
'rendering/RenderDataGrid.cpp',
@@ -4047,8 +4073,6 @@
'storage/IDBSQLiteDatabase.h',
'storage/IDBSuccessEvent.cpp',
'storage/IDBSuccessEvent.h',
- 'storage/IDBTimeoutEvent.cpp',
- 'storage/IDBTimeoutEvent.h',
'storage/IDBTransaction.cpp',
'storage/IDBTransaction.h',
'storage/IDBTransactionBackendImpl.cpp',
@@ -4642,7 +4666,6 @@
'inspector/front-end/BreakpointManager.js',
'inspector/front-end/BreakpointsSidebarPane.js',
'inspector/front-end/CallStackSidebarPane.js',
- 'inspector/front-end/ChangesView.js',
'inspector/front-end/Checkbox.js',
'inspector/front-end/Color.js',
'inspector/front-end/ConsolePanel.js',
@@ -4659,6 +4682,7 @@
'inspector/front-end/DatabaseTableView.js',
'inspector/front-end/DataGrid.js',
'inspector/front-end/DebuggerModel.js',
+ 'inspector/front-end/DetailedHeapshotView.js',
'inspector/front-end/DOMAgent.js',
'inspector/front-end/DOMStorage.js',
'inspector/front-end/DOMStorageItemsView.js',
@@ -4673,10 +4697,10 @@
'inspector/front-end/ExtensionPanel.js',
'inspector/front-end/ExtensionRegistryStub.js',
'inspector/front-end/ExtensionServer.js',
- 'inspector/front-end/FileSystemView.js',
'inspector/front-end/FontView.js',
'inspector/front-end/GoToLineDialog.js',
'inspector/front-end/HAREntry.js',
+ 'inspector/front-end/HeapSnapshot.js',
'inspector/front-end/HeapSnapshotView.js',
'inspector/front-end/HelpScreen.js',
'inspector/front-end/ImageView.js',
@@ -4693,6 +4717,7 @@
'inspector/front-end/Panel.js',
'inspector/front-end/PanelEnablerView.js',
'inspector/front-end/Placard.js',
+ 'inspector/front-end/PleaseWaitMessage.js',
'inspector/front-end/Popover.js',
'inspector/front-end/ProfileDataGridTree.js',
'inspector/front-end/ProfilesPanel.js',
@@ -4713,18 +4738,18 @@
'inspector/front-end/ScriptFormatter.js',
'inspector/front-end/ScriptFormatterWorker.js',
'inspector/front-end/ScriptsPanel.js',
- 'inspector/front-end/ScriptView.js',
'inspector/front-end/ShortcutsHelp.js',
+ 'inspector/front-end/ShowMoreDataGridNode.js',
'inspector/front-end/Section.js',
'inspector/front-end/Settings.js',
'inspector/front-end/SidebarPane.js',
'inspector/front-end/SidebarTreeElement.js',
'inspector/front-end/SourceCSSTokenizer.js',
'inspector/front-end/SourceFrame.js',
+ 'inspector/front-end/SourceFrameContent.js',
'inspector/front-end/SourceHTMLTokenizer.js',
'inspector/front-end/SourceJavaScriptTokenizer.js',
'inspector/front-end/SourceTokenizer.js',
- 'inspector/front-end/SourceView.js',
'inspector/front-end/StatusBarButton.js',
'inspector/front-end/StylesSidebarPane.js',
'inspector/front-end/SummaryBar.js',
diff --git a/Source/WebCore/WebCore.pri b/Source/WebCore/WebCore.pri
index ad1835f..52e2738 100644
--- a/Source/WebCore/WebCore.pri
+++ b/Source/WebCore/WebCore.pri
@@ -1,5 +1,5 @@
-include(../../common.pri)
+include(../common.pri)
include(features.pri)
CONFIG(standalone_package) {
@@ -308,6 +308,7 @@ IDL_BINDINGS += \
page/BarInfo.idl \
page/Console.idl \
page/Coordinates.idl \
+ page/Crypto.idl \
page/DOMSelection.idl \
page/DOMWindow.idl \
page/EventSource.idl \
diff --git a/Source/WebCore/WebCore.pro b/Source/WebCore/WebCore.pro
index 7b953f3..748c032 100644
--- a/Source/WebCore/WebCore.pro
+++ b/Source/WebCore/WebCore.pro
@@ -79,12 +79,12 @@ symbian: {
}
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ..
-include($$PWD/../../WebKit.pri)
+include($$PWD/../WebKit.pri)
TEMPLATE = lib
TARGET = QtWebKit
-contains(QT_CONFIG, embedded):CONFIG += embedded
+contains(QT_CONFIG, qpa):CONFIG += embedded
CONFIG(standalone_package) {
isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$PWD/generated
@@ -114,9 +114,7 @@ moduleFile=$$PWD/../WebKit/qt/qt_webkit_version.pri
isEmpty(QT_BUILD_TREE):include($$moduleFile)
VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION}
-unix {
- QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork
-}
+unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork
unix:!mac:*-g++*:QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections
unix:!mac:*-g++*:QMAKE_LFLAGS += -Wl,--gc-sections
@@ -339,7 +337,7 @@ SOURCES += \
bindings/generic/RuntimeEnabledFeatures.cpp
v8 {
- include($$PWD/../JavaScriptCore/pcre/pcre.pri)
+ include($$PWD/../JavaScriptCore/yarr/yarr.pri)
include($$PWD/../JavaScriptCore/wtf/wtf.pri)
SOURCES += \
@@ -508,6 +506,7 @@ v8 {
bindings/js/DOMObjectHashTableMap.cpp \
bindings/js/DOMWrapperWorld.cpp \
bindings/js/GCController.cpp \
+ bindings/js/JSArrayBufferCustom.cpp \
bindings/js/JSAttrCustom.cpp \
bindings/js/JSCDATASectionCustom.cpp \
bindings/js/JSCSSFontFaceRuleCustom.cpp \
@@ -542,6 +541,7 @@ v8 {
bindings/js/JSDOMWrapper.cpp \
bindings/js/JSDataGridColumnListCustom.cpp \
bindings/js/JSDataGridDataSource.cpp \
+ bindings/js/JSDataViewCustom.cpp \
bindings/js/JSDebugWrapperSet.cpp \
bindings/js/JSDesktopNotificationsCustom.cpp \
bindings/js/JSDeviceMotionEventCustom.cpp \
@@ -555,6 +555,7 @@ v8 {
bindings/js/JSEventTarget.cpp \
bindings/js/JSExceptionBase.cpp \
bindings/js/JSFileReaderCustom.cpp \
+ bindings/js/JSFloat32ArrayCustom.cpp \
bindings/js/JSGeolocationCustom.cpp \
bindings/js/JSHTMLAllCollectionCustom.cpp \
bindings/js/JSHTMLAppletElementCustom.cpp \
@@ -579,9 +580,13 @@ v8 {
bindings/js/JSImageDataCustom.cpp \
bindings/js/JSInjectedScriptHostCustom.cpp \
bindings/js/JSInspectorFrontendHostCustom.cpp \
+ bindings/js/JSInt16ArrayCustom.cpp \
+ bindings/js/JSInt32ArrayCustom.cpp \
+ bindings/js/JSInt8ArrayCustom.cpp \
bindings/js/JSLazyEventListener.cpp \
bindings/js/JSLocationCustom.cpp \
bindings/js/JSMainThreadExecState.cpp \
+ bindings/js/JSMemoryInfoCustom.cpp \
bindings/js/JSMessageChannelCustom.cpp \
bindings/js/JSMessageEventCustom.cpp \
bindings/js/JSMessagePortCustom.cpp \
@@ -603,6 +608,9 @@ v8 {
bindings/js/JSTouchCustom.cpp \
bindings/js/JSTouchListCustom.cpp \
bindings/js/JSTreeWalkerCustom.cpp \
+ bindings/js/JSUint16ArrayCustom.cpp \
+ bindings/js/JSUint32ArrayCustom.cpp \
+ bindings/js/JSUint8ArrayCustom.cpp \
bindings/js/JSWebKitCSSKeyframeRuleCustom.cpp \
bindings/js/JSWebKitCSSKeyframesRuleCustom.cpp \
bindings/js/JSWebKitCSSMatrixCustom.cpp \
@@ -730,6 +738,7 @@ SOURCES += \
dom/Document.cpp \
dom/DocumentFragment.cpp \
dom/DocumentMarkerController.cpp \
+ dom/DocumentOrderedMap.cpp \
dom/DocumentParser.cpp \
dom/DocumentType.cpp \
dom/DOMImplementation.cpp \
@@ -1015,12 +1024,22 @@ SOURCES += \
html/ValidationMessage.cpp \
html/ValidityState.cpp \
html/WeekInputType.cpp \
+ html/canvas/ArrayBuffer.cpp \
+ html/canvas/ArrayBufferView.cpp \
html/canvas/CanvasGradient.cpp \
html/canvas/CanvasPattern.cpp \
html/canvas/CanvasPixelArray.cpp \
html/canvas/CanvasRenderingContext.cpp \
html/canvas/CanvasRenderingContext2D.cpp \
html/canvas/CanvasStyle.cpp \
+ html/canvas/DataView.cpp \
+ html/canvas/Float32Array.cpp \
+ html/canvas/Int16Array.cpp \
+ html/canvas/Int32Array.cpp \
+ html/canvas/Int8Array.cpp \
+ html/canvas/Uint16Array.cpp \
+ html/canvas/Uint32Array.cpp \
+ html/canvas/Uint8Array.cpp \
html/parser/CSSPreloadScanner.cpp \
html/parser/HTMLConstructionSite.cpp \
html/parser/HTMLDocumentParser.cpp \
@@ -1033,15 +1052,19 @@ SOURCES += \
html/parser/HTMLParserScheduler.cpp \
html/parser/HTMLPreloadScanner.cpp \
html/parser/HTMLScriptRunner.cpp \
+ html/parser/HTMLSourceTracker.cpp \
html/parser/HTMLTokenizer.cpp \
html/parser/HTMLTreeBuilder.cpp \
html/parser/HTMLViewSourceParser.cpp \
html/parser/TextDocumentParser.cpp \
html/parser/TextViewSourceParser.cpp \
+ html/parser/XSSFilter.cpp \
+ html/shadow/MediaControls.cpp \
html/shadow/SliderThumbElement.cpp \
inspector/ConsoleMessage.cpp \
inspector/InjectedScript.cpp \
inspector/InjectedScriptHost.cpp \
+ inspector/InspectorAgent.cpp \
inspector/InspectorApplicationCacheAgent.cpp \
inspector/InspectorBrowserDebuggerAgent.cpp \
inspector/InspectorCSSAgent.cpp \
@@ -1054,24 +1077,20 @@ SOURCES += \
inspector/InspectorDOMAgent.cpp \
inspector/InspectorDOMStorageAgent.cpp \
inspector/InspectorDOMStorageResource.cpp \
- inspector/InspectorFileSystemAgent.cpp \
inspector/InspectorFrontendClientLocal.cpp \
inspector/InspectorFrontendHost.cpp \
inspector/InspectorInstrumentation.cpp \
inspector/InspectorProfilerAgent.cpp \
inspector/InspectorResourceAgent.cpp \
inspector/InspectorRuntimeAgent.cpp \
- inspector/InspectorSettings.cpp \
inspector/InspectorState.cpp \
inspector/InspectorStyleSheet.cpp \
inspector/InspectorTimelineAgent.cpp \
inspector/InspectorValues.cpp \
inspector/ScriptArguments.cpp \
- inspector/ScriptBreakpoint.cpp \
inspector/ScriptCallFrame.cpp \
inspector/ScriptCallStack.cpp \
inspector/TimelineRecordFactory.cpp \
- loader/archive/ArchiveFactory.cpp \
loader/archive/ArchiveResource.cpp \
loader/archive/ArchiveResourceCollection.cpp \
loader/cache/MemoryCache.cpp \
@@ -1125,12 +1144,12 @@ SOURCES += \
page/BarInfo.cpp \
page/Chrome.cpp \
page/Console.cpp \
+ page/ContentSecurityPolicy.cpp \
page/ContextMenuController.cpp \
+ page/Crypto.cpp \
page/DOMSelection.cpp \
page/DOMTimer.cpp \
page/DOMWindow.cpp \
- page/Navigator.cpp \
- page/NavigatorBase.cpp \
page/DragController.cpp \
page/EventHandler.cpp \
page/EventSource.cpp \
@@ -1146,6 +1165,8 @@ SOURCES += \
page/Location.cpp \
page/MemoryInfo.cpp \
page/MouseEventWithHitTestResults.cpp \
+ page/Navigator.cpp \
+ page/NavigatorBase.cpp \
page/OriginAccessEntry.cpp \
page/Page.cpp \
page/PageGroup.cpp \
@@ -1155,14 +1176,13 @@ SOURCES += \
page/PerformanceTiming.cpp \
page/PluginHalter.cpp \
page/PrintContext.cpp \
- page/SecurityOrigin.cpp \
page/Screen.cpp \
+ page/SecurityOrigin.cpp \
page/Settings.cpp \
page/SpatialNavigation.cpp \
page/SuspendableTimer.cpp \
page/UserContentURLPattern.cpp \
page/WindowFeatures.cpp \
- page/XSSAuditor.cpp \
plugins/PluginData.cpp \
plugins/DOMPluginArray.cpp \
plugins/DOMPlugin.cpp \
@@ -1175,6 +1195,7 @@ SOURCES += \
platform/text/Base64.cpp \
platform/text/BidiContext.cpp \
platform/text/Hyphenation.cpp \
+ platform/text/LocalizedNumberNone.cpp \
platform/ContentType.cpp \
platform/CrossThreadCopier.cpp \
platform/DeprecatedPtrListImpl.cpp \
@@ -1268,6 +1289,7 @@ SOURCES += \
platform/text/TextCodecLatin1.cpp \
platform/text/TextCodecUserDefined.cpp \
platform/text/TextCodecUTF16.cpp \
+ platform/text/TextCodecUTF8.cpp \
platform/text/TextEncoding.cpp \
platform/text/TextEncodingDetectorNone.cpp \
platform/text/TextEncodingRegistry.cpp \
@@ -1281,6 +1303,7 @@ SOURCES += \
platform/Widget.cpp \
platform/PlatformStrategies.cpp \
platform/LocalizedStrings.cpp \
+ plugins/IFrameShimSupport.cpp \
plugins/PluginDatabase.cpp \
plugins/PluginDebug.cpp \
plugins/PluginPackage.cpp \
@@ -1305,6 +1328,7 @@ SOURCES += \
rendering/RenderBoxModelObject.cpp \
rendering/RenderBR.cpp \
rendering/RenderButton.cpp \
+ rendering/RenderCombineText.cpp \
rendering/RenderCounter.cpp \
rendering/RenderDataGrid.cpp \
rendering/RenderDetails.cpp \
@@ -1492,15 +1516,14 @@ v8 {
bindings/js/GCController.h \
bindings/js/DOMObjectHashTableMap.h \
bindings/js/DOMWrapperWorld.h \
- bindings/js/JSCallbackData.h \
+ bindings/js/JSArrayBufferViewHelper.h \
bindings/js/JSAudioConstructor.h \
bindings/js/JSCSSStyleDeclarationCustom.h \
+ bindings/js/JSCallbackData.h \
bindings/js/JSCustomPositionCallback.h \
bindings/js/JSCustomPositionErrorCallback.h \
bindings/js/JSCustomVoidCallback.h \
bindings/js/JSCustomXPathNSResolver.h \
- bindings/js/JSDataGridDataSource.h \
- bindings/js/JSDebugWrapperSet.h \
bindings/js/JSDOMBinding.h \
bindings/js/JSDOMGlobalObject.h \
bindings/js/JSDOMStringMapCustom.h \
@@ -1508,15 +1531,17 @@ v8 {
bindings/js/JSDOMWindowCustom.h \
bindings/js/JSDOMWindowShell.h \
bindings/js/JSDOMWrapper.h \
+ bindings/js/JSDataGridDataSource.h \
+ bindings/js/JSDebugWrapperSet.h \
bindings/js/JSErrorHandler.h \
bindings/js/JSEventListener.h \
bindings/js/JSEventTarget.h \
- bindings/js/JSHistoryCustom.h \
bindings/js/JSHTMLAppletElementCustom.h \
bindings/js/JSHTMLEmbedElementCustom.h \
bindings/js/JSHTMLInputElementCustom.h \
bindings/js/JSHTMLObjectElementCustom.h \
bindings/js/JSHTMLSelectElementCustom.h \
+ bindings/js/JSHistoryCustom.h \
bindings/js/JSImageConstructor.h \
bindings/js/JSLazyEventListener.h \
bindings/js/JSLocationCustom.h \
@@ -1660,6 +1685,7 @@ HEADERS += \
dom/DocumentFragment.h \
dom/DocumentMarker.h \
dom/DocumentMarkerController.h \
+ dom/DocumentOrderedMap.h \
dom/DocumentType.h \
dom/DOMImplementation.h \
dom/DOMStringList.h \
@@ -1805,12 +1831,22 @@ HEADERS += \
history/HistoryItem.h \
history/PageCache.h \
html/AsyncImageResizer.h \
+ html/canvas/ArrayBuffer.h \
+ html/canvas/ArrayBufferView.h \
html/canvas/CanvasGradient.h \
html/canvas/CanvasPattern.h \
html/canvas/CanvasPixelArray.h \
html/canvas/CanvasRenderingContext.h \
html/canvas/CanvasRenderingContext2D.h \
html/canvas/CanvasStyle.h \
+ html/canvas/DataView.h \
+ html/canvas/Float32Array.h \
+ html/canvas/Int16Array.h \
+ html/canvas/Int32Array.h \
+ html/canvas/Int8Array.h \
+ html/canvas/Uint16Array.h \
+ html/canvas/Uint32Array.h \
+ html/canvas/Uint8Array.h \
html/ClassList.h \
html/CollectionCache.h \
html/DataGridColumn.h \
@@ -1937,20 +1973,23 @@ HEADERS += \
html/parser/HTMLTokenizer.h \
html/parser/HTMLTreeBuilder.h \
html/parser/HTMLViewSourceParser.h \
+ html/parser/XSSFilter.h \
inspector/ConsoleMessage.h \
inspector/InjectedScript.h \
inspector/InjectedScriptHost.h \
+ inspector/InspectorAgent.h \
inspector/InspectorApplicationCacheAgent.h \
inspector/InspectorBrowserDebuggerAgent.h \
inspector/InspectorConsoleAgent.h \
+ inspector/InspectorConsoleInstrumentation.h \
inspector/InspectorController.h \
inspector/InspectorCSSAgent.h \
inspector/InspectorDatabaseAgent.h \
+ inspector/InspectorDatabaseInstrumentation.h \
inspector/InspectorDatabaseResource.h \
inspector/InspectorDebuggerAgent.h \
inspector/InspectorDOMStorageAgent.h \
inspector/InspectorDOMStorageResource.h \
- inspector/InspectorFileSystemAgent.h \
inspector/InspectorFrontendClient.h \
inspector/InspectorFrontendClientLocal.h \
inspector/InspectorFrontendHost.h \
@@ -1958,7 +1997,6 @@ HEADERS += \
inspector/InspectorProfilerAgent.h \
inspector/InspectorResourceAgent.h \
inspector/InspectorRuntimeAgent.h \
- inspector/InspectorSettings.h \
inspector/InspectorState.h \
inspector/InspectorStyleSheet.h \
inspector/InspectorTimelineAgent.h \
@@ -1971,7 +2009,6 @@ HEADERS += \
loader/appcache/ApplicationCacheStorage.h \
loader/appcache/DOMApplicationCache.h \
loader/appcache/ManifestParser.h \
- loader/archive/ArchiveFactory.h \
loader/archive/ArchiveResourceCollection.h \
loader/archive/ArchiveResource.h \
loader/cache/CachedCSSStyleSheet.h \
@@ -2065,7 +2102,6 @@ HEADERS += \
page/SpeechInputResultList.h \
page/WindowFeatures.h \
page/WorkerNavigator.h \
- page/XSSAuditor.h \
platform/animation/Animation.h \
platform/animation/AnimationList.h \
platform/Arena.h \
@@ -2117,6 +2153,7 @@ HEADERS += \
platform/graphics/FontData.h \
platform/graphics/FontDescription.h \
platform/graphics/FontFamily.h \
+ platform/graphics/FontMetrics.h \
platform/graphics/Font.h \
platform/graphics/GeneratedImage.h \
platform/graphics/Gradient.h \
@@ -2217,6 +2254,7 @@ HEADERS += \
platform/text/TextCodecLatin1.h \
platform/text/TextCodecUserDefined.h \
platform/text/TextCodecUTF16.h \
+ platform/text/TextCodecUTF8.h \
platform/text/TextEncoding.h \
platform/text/TextEncodingRegistry.h \
platform/text/TextStream.h \
@@ -2235,6 +2273,7 @@ HEADERS += \
plugins/PluginData.h \
plugins/PluginDebug.h \
plugins/DOMPlugin.h \
+ plugins/IFrameShimSupport.h \
plugins/PluginMainThreadScheduler.h \
plugins/PluginPackage.h \
plugins/PluginStream.h \
@@ -2271,6 +2310,7 @@ HEADERS += \
rendering/RenderBoxModelObject.h \
rendering/RenderBR.h \
rendering/RenderButton.h \
+ rendering/RenderCombineText.h \
rendering/RenderCounter.h \
rendering/RenderDataGrid.h \
rendering/RenderDetails.h \
@@ -2663,6 +2703,7 @@ HEADERS += \
$$PWD/../WebKit/qt/Api/qwebplugindatabase_p.h \
$$PWD/../WebKit/qt/WebCoreSupport/InspectorServerQt.h \
$$PWD/../WebKit/qt/WebCoreSupport/QtFallbackWebPopup.h \
+ $$PWD/../WebKit/qt/WebCoreSupport/ChromeClientQt.h \
$$PWD/../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h \
$$PWD/../WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.h \
$$PWD/../WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h \
@@ -2839,14 +2880,20 @@ contains (CONFIG, text_breaking_with_icu) {
LIBS += -licuuc
}
+symbian {
+ SOURCES += \
+ plugins/symbian/PluginDatabaseSymbian.cpp \
+ plugins/symbian/PluginPackageSymbian.cpp
+
+ LIBS += -lefsrv
+}
+
contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
SOURCES += plugins/npapi.cpp
symbian {
SOURCES += \
- plugins/symbian/PluginPackageSymbian.cpp \
- plugins/symbian/PluginDatabaseSymbian.cpp \
plugins/symbian/PluginViewSymbian.cpp \
plugins/symbian/PluginContainerSymbian.cpp
@@ -2854,8 +2901,6 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
plugins/symbian/PluginContainerSymbian.h \
plugins/symbian/npinterface.h
- LIBS += -lefsrv
-
} else {
unix {
@@ -3264,11 +3309,13 @@ contains(DEFINES, ENABLE_VIDEO=1) {
} else:contains(MOBILITY_CONFIG, multimedia) {
HEADERS += \
platform/graphics/qt/MediaPlayerPrivateQt.h \
- $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoQt.h
+ $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoQt.h \
+ $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h
SOURCES += \
platform/graphics/qt/MediaPlayerPrivateQt.cpp \
- $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
+ $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp \
+ $$PWD/../WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp
CONFIG *= mobility
MOBILITY += multimedia
@@ -3334,6 +3381,7 @@ contains(DEFINES, ENABLE_XSLT=1) {
contains(DEFINES, ENABLE_FILTERS=1) {
SOURCES += \
+ platform/graphics/filters/DistantLightSource.cpp \
platform/graphics/filters/FEBlend.cpp \
platform/graphics/filters/FEColorMatrix.cpp \
platform/graphics/filters/FEComponentTransfer.cpp \
@@ -3352,6 +3400,8 @@ contains(DEFINES, ENABLE_FILTERS=1) {
platform/graphics/filters/FETurbulence.cpp \
platform/graphics/filters/FilterEffect.cpp \
platform/graphics/filters/LightSource.cpp \
+ platform/graphics/filters/PointLightSource.cpp \
+ platform/graphics/filters/SpotLightSource.cpp \
platform/graphics/filters/SourceAlpha.cpp \
platform/graphics/filters/SourceGraphic.cpp
}
@@ -3751,50 +3801,7 @@ contains(DEFINES, ENABLE_WEB_SOCKETS=1) {
}
}
-contains(DEFINES, ENABLE_BLOB=1) | contains(DEFINES, ENABLE_3D_CANVAS=1) {
- !v8 {
- HEADERS += \
- bindings/js/JSArrayBufferViewHelper.h
- }
-
- HEADERS += \
- html/canvas/ArrayBuffer.h \
- html/canvas/ArrayBufferView.h \
- html/canvas/DataView.h \
- html/canvas/Int8Array.h \
- html/canvas/Float32Array.h \
- html/canvas/Int32Array.h \
- html/canvas/Int16Array.h \
- html/canvas/Uint8Array.h \
- html/canvas/Uint32Array.h \
- html/canvas/Uint16Array.h
-
- !v8 {
- SOURCES += \
- bindings/js/JSArrayBufferCustom.cpp \
- bindings/js/JSDataViewCustom.cpp \
- bindings/js/JSInt8ArrayCustom.cpp \
- bindings/js/JSFloat32ArrayCustom.cpp \
- bindings/js/JSInt32ArrayCustom.cpp \
- bindings/js/JSInt16ArrayCustom.cpp \
- bindings/js/JSUint8ArrayCustom.cpp \
- bindings/js/JSUint32ArrayCustom.cpp \
- bindings/js/JSUint16ArrayCustom.cpp
- }
- SOURCES += \
- html/canvas/ArrayBuffer.cpp \
- html/canvas/ArrayBufferView.cpp \
- html/canvas/DataView.cpp \
- html/canvas/Int8Array.cpp \
- html/canvas/Float32Array.cpp \
- html/canvas/Int32Array.cpp \
- html/canvas/Int16Array.cpp \
- html/canvas/Uint8Array.cpp \
- html/canvas/Uint32Array.cpp \
- html/canvas/Uint16Array.cpp
- }
-
-contains(DEFINES, ENABLE_3D_CANVAS=1) {
+contains(DEFINES, ENABLE_WEBGL=1) {
tobe|!tobe: QT += opengl
HEADERS += \
diff --git a/Source/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops b/Source/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops
index d56a941..9b03fc9 100644
--- a/Source/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops
+++ b/Source/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops
@@ -12,7 +12,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
+ AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
IgnoreDefaultLibraryNames="LIBCMT"
diff --git a/Source/WebCore/WebCore.vcproj/WebCore.make b/Source/WebCore/WebCore.vcproj/WebCore.make
index 7bb6659..1be2edd 100644
--- a/Source/WebCore/WebCore.vcproj/WebCore.make
+++ b/Source/WebCore/WebCore.vcproj/WebCore.make
@@ -9,15 +9,15 @@ install:
set WebKitLibrariesDir=$(SRCROOT)\AppleInternal
set WebKitOutputDir=$(OBJROOT)
set ConfigurationBuildDir=$(OBJROOT)\$(BUILDSTYLE)
- set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\
- -mkdir 2>NUL "%WebKitOutputDir%\include\private\JavaScriptCore"
- xcopy "%WebKitLibrariesDir%\include\private\JavaScriptCore\*" "%WebKitOutputDir%\include\private\JavaScriptCore" /e/v/i/h/y
+ set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
+ -mkdir 2>NUL "%ConfigurationBuildDir%\include\private\JavaScriptCore"
+ xcopy "%WebKitLibrariesDir%\include\private\JavaScriptCore\*" "%ConfigurationBuildDir%\include\private\JavaScriptCore" /e/v/i/h/y
devenv "WebCore.submit.sln" /rebuild $(BUILDSTYLE)
- xcopy "$(ConfigurationBuildDir)\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\WebKit.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit.resources" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\obj\WebCore\scripts\*" "$(DSTROOT)\AppleInternal\tools\scripts" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\WebKit.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit.resources" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\obj\WebCore\scripts\*" "$(DSTROOT)\AppleInternal\tools\scripts" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
-mkdir "$(DSTROOT)\AppleInternal\Sources\WebCore"
- xcopy "$(ConfigurationBuildDir)\obj\WebCore\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\WebCore" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\obj\WebCore\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\WebCore" /e/v/i/h/y
diff --git a/Source/WebCore/WebCore.vcproj/WebCore.vcproj b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
index f1da922..2a8f340 100755
--- a/Source/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -1754,6 +1754,62 @@
>
</File>
<File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSCrypto.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSCrypto.h"
+ >
+ </File>
+ <File
RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSCSSCharsetRule.cpp"
>
<FileConfiguration
@@ -24394,6 +24450,14 @@
>
</File>
<File
+ RelativePath="..\page\ContentSecurityPolicy.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\page\ContentSecurityPolicy.h"
+ >
+ </File>
+ <File
RelativePath="..\page\ContextMenuClient.h"
>
</File>
@@ -24414,6 +24478,14 @@
>
</File>
<File
+ RelativePath="..\page\Crypto.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\page\Crypto.h"
+ >
+ </File>
+ <File
RelativePath="..\page\DOMSelection.cpp"
>
</File>
@@ -24817,14 +24889,6 @@
RelativePath="..\page\WorkerNavigator.h"
>
</File>
- <File
- RelativePath="..\page\XSSAuditor.cpp"
- >
- </File>
- <File
- RelativePath="..\page\XSSAuditor.h"
- >
- </File>
<Filter
Name="win"
>
@@ -25738,27 +25802,27 @@
>
</File>
<File
- RelativePath="..\platform\ScrollAnimator.cpp"
+ RelativePath="..\platform\ScrollableArea.cpp"
>
</File>
<File
- RelativePath="..\platform\ScrollAnimator.h"
+ RelativePath="..\platform\ScrollableArea.h"
>
</File>
<File
- RelativePath="..\platform\ScrollAnimatorWin.cpp"
+ RelativePath="..\platform\ScrollAnimator.cpp"
>
</File>
<File
- RelativePath="..\platform\ScrollAnimatorWin.h"
+ RelativePath="..\platform\ScrollAnimator.h"
>
</File>
<File
- RelativePath="..\platform\ScrollableArea.cpp"
+ RelativePath="..\platform\ScrollAnimatorWin.cpp"
>
</File>
<File
- RelativePath="..\platform\ScrollableArea.h"
+ RelativePath="..\platform\ScrollAnimatorWin.h"
>
</File>
<File
@@ -26549,6 +26613,10 @@
>
</File>
<File
+ RelativePath="..\platform\graphics\FontMetrics.h"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\FontRenderingMode.h"
>
</File>
@@ -26765,6 +26833,14 @@
>
</File>
<File
+ RelativePath="..\platform\graphics\ShadowBlur.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\platform\graphics\ShadowBlur.h"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\SimpleFontData.cpp"
>
</File>
@@ -28648,6 +28724,10 @@
Name="filters"
>
<File
+ RelativePath="..\platform\graphics\filters\DistantLightSource.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\filters\DistantLightSource.h"
>
</File>
@@ -28800,6 +28880,10 @@
>
</File>
<File
+ RelativePath="..\platform\graphics\filters\PointLightSource.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\filters\PointLightSource.h"
>
</File>
@@ -28820,6 +28904,10 @@
>
</File>
<File
+ RelativePath="..\platform\graphics\filters\SpotLightSource.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\filters\SpotLightSource.h"
>
</File>
@@ -28895,6 +28983,10 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\platform\graphics\ca\win\CACFLayerTreeHostClient.h"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\ca\win\LayerChangesFlusher.cpp"
>
<FileConfiguration
@@ -28935,6 +29027,14 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\platform\graphics\ca\win\LegacyCACFLayerTreeHost.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\platform\graphics\ca\win\LegacyCACFLayerTreeHost.h"
+ >
+ </File>
+ <File
RelativePath="..\platform\graphics\ca\win\PlatformCAAnimationWin.cpp"
>
</File>
@@ -28950,6 +29050,14 @@
RelativePath="..\platform\graphics\ca\win\PlatformCALayerWinInternal.h"
>
</File>
+ <File
+ RelativePath="..\platform\graphics\ca\win\WKCACFViewLayerTreeHost.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\platform\graphics\ca\win\WKCACFViewLayerTreeHost.h"
+ >
+ </File>
</Filter>
</Filter>
</Filter>
@@ -29312,6 +29420,10 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\platform\network\cf\DownloadBundle.h"
+ >
+ </File>
+ <File
RelativePath="..\platform\network\cf\FormDataStreamCFNet.cpp"
>
<FileConfiguration
@@ -29604,6 +29716,10 @@
Name="win"
>
<File
+ RelativePath="..\platform\network\win\DownloadBundleWin.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\network\win\NetworkStateNotifierWin.cpp"
>
</File>
@@ -30157,10 +30273,6 @@
>
</File>
<File
- RelativePath="..\platform\text\CharacterNames.h"
- >
- </File>
- <File
RelativePath="..\platform\text\Hyphenation.h"
>
</File>
@@ -30173,6 +30285,14 @@
>
</File>
<File
+ RelativePath="..\platform\text\LocalizedNumber.h"
+ >
+ </File>
+ <File
+ RelativePath="..\platform\text\LocalizedNumberNone.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\text\ParserUtilities.h"
>
</File>
@@ -30325,6 +30445,14 @@
>
</File>
<File
+ RelativePath="..\platform\text\TextCodecUTF8.h"
+ >
+ </File>
+ <File
+ RelativePath="..\platform\text\TextCodecUTF8.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\text\TextCodecUTF16.h"
>
</File>
@@ -33026,6 +33154,62 @@
>
</File>
<File
+ RelativePath="..\rendering\RenderCombineText.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\rendering\RenderCombineText.h"
+ >
+ </File>
+ <File
RelativePath="..\rendering\RenderCounter.cpp"
>
<FileConfiguration
@@ -42978,6 +43162,62 @@
>
</File>
<File
+ RelativePath="..\dom\DocumentOrderedMap.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\dom\DocumentOrderedMap.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\DocumentParser.cpp"
>
<FileConfiguration
@@ -43697,7 +43937,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_All|Win32"
+ Name="Debug_Cairo_CFLite|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43705,7 +43945,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_Cairo_CFLite|Win32"
+ Name="Release_Cairo_CFLite|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43713,7 +43953,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Release_Cairo_CFLite|Win32"
+ Name="Debug_All|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43721,7 +43961,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_All|Win32"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43776,17 +44016,9 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- <FileConfiguration
- Name="Release_LTCG|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
</File>
<File
- RelativePath="..\dom\EventTarget.h"
+ RelativePath="..\dom\EventQueue.h"
>
</File>
<File
@@ -43809,7 +44041,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_Internal|Win32"
+ Name="Debug_Cairo_CFLite|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43817,7 +44049,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_Cairo|Win32"
+ Name="Release_Cairo_CFLite|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43825,7 +44057,7 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Release_Cairo|Win32"
+ Name="Debug_All|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43833,7 +44065,31 @@
/>
</FileConfiguration>
<FileConfiguration
- Name="Debug_All|Win32"
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -43842,7 +44098,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\dom\EventQueue.h"
+ RelativePath="..\dom\EventTarget.h"
>
</File>
<File
@@ -50190,6 +50446,22 @@
>
</File>
<File
+ RelativePath="..\html\canvas\ArrayBuffer.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\ArrayBuffer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\ArrayBufferView.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\ArrayBufferView.h"
+ >
+ </File>
+ <File
RelativePath="..\html\canvas\CanvasGradient.cpp"
>
</File>
@@ -50238,6 +50510,70 @@
>
</File>
<File
+ RelativePath="..\html\canvas\DataView.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\DataView.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Float32Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Float32Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int32Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int32Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int16Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int16Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int8Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\Int8Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt16Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt16Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt32Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt32Array.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt8Array.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\canvas\UInt8Array.h"
+ >
+ </File>
+ <File
RelativePath="..\html\CheckboxInputType.cpp"
>
</File>
@@ -55433,6 +55769,14 @@
>
</File>
<File
+ RelativePath="..\html\parser\HTMLSourceTracker.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\parser\HTMLSourceTracker.h"
+ >
+ </File>
+ <File
RelativePath="..\html\parser\HTMLToken.h"
>
</File>
@@ -55480,11 +55824,31 @@
RelativePath="..\html\parser\TextViewSourceParser.h"
>
</File>
+ <File
+ RelativePath="..\html\parser\XSSFilter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\parser\XSSFilter.h"
+ >
+ </File>
</Filter>
<Filter
Name="shadow"
>
<File
+ RelativePath="..\html\shadow\MediaControls.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\shadow\MediaControls.h"
+ >
+ </File>
+ <File
+ RelativePath="..\html\shadow\ProgressBarValueElement.h"
+ >
+ </File>
+ <File
RelativePath="..\html\shadow\SliderThumbElement.cpp"
>
</File>
@@ -60029,6 +60393,58 @@
>
</File>
<File
+ RelativePath="..\bindings\js\JSMemoryInfoCustom.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\bindings\js\JSMessageChannelCustom.cpp"
>
<FileConfiguration
@@ -64310,10 +64726,18 @@
</File>
</Filter>
<Filter
- Name="pcre"
+ Name="yarr"
>
<File
- RelativePath="..\ForwardingHeaders\pcre\pcre.h"
+ RelativePath="..\ForwardingHeaders\yarr\Yarr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\ForwardingHeaders\yarr\YarrInterpreter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\ForwardingHeaders\yarr\YarrPattern.h"
>
</File>
</Filter>
@@ -64357,14 +64781,6 @@
>
</File>
</Filter>
- <Filter
- Name="wrec"
- >
- <File
- RelativePath="..\ForwardingHeaders\wrec\WREC.h"
- >
- </File>
- </Filter>
</Filter>
<Filter
Name="history"
@@ -65070,6 +65486,14 @@
>
</File>
<File
+ RelativePath="..\inspector\InspectorAgent.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\inspector\InspectorAgent.h"
+ >
+ </File>
+ <File
RelativePath="..\inspector\InspectorApplicationCacheAgent.cpp"
>
</File>
@@ -65102,6 +65526,10 @@
>
</File>
<File
+ RelativePath="..\inspector\InspectorConsoleInstrumentation.h"
+ >
+ </File>
+ <File
RelativePath="..\inspector\InspectorController.cpp"
>
</File>
@@ -65126,6 +65554,10 @@
>
</File>
<File
+ RelativePath="..\inspector\InspectorDatabaseInstrumentation.h"
+ >
+ </File>
+ <File
RelativePath="..\inspector\InspectorDatabaseResource.cpp"
>
</File>
@@ -65166,14 +65598,6 @@
>
</File>
<File
- RelativePath="..\inspector\InspectorFileSystemAgent.cpp"
- >
- </File>
- <File
- RelativePath="..\inspector\InspectorFileSystemAgent.h"
- >
- </File>
- <File
RelativePath="..\inspector\InspectorFrontendClient.h"
>
</File>
@@ -65226,14 +65650,6 @@
>
</File>
<File
- RelativePath="..\inspector\InspectorSettings.cpp"
- >
- </File>
- <File
- RelativePath="..\inspector\InspectorSettings.h"
- >
- </File>
- <File
RelativePath="..\inspector\InspectorState.cpp"
>
</File>
@@ -65278,10 +65694,6 @@
>
</File>
<File
- RelativePath="..\inspector\ScriptBreakpoint.cpp"
- >
- </File>
- <File
RelativePath="..\inspector\ScriptBreakpoint.h"
>
</File>
@@ -65373,10 +65785,6 @@
>
</File>
<File
- RelativePath="..\inspector\front-end\ChangesView.js"
- >
- </File>
- <File
RelativePath="..\inspector\front-end\Checkbox.js"
>
</File>
@@ -65441,6 +65849,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\DetailedHeapshotView.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\DOMAgent.js"
>
</File>
@@ -65497,10 +65909,6 @@
>
</File>
<File
- RelativePath="..\inspector\front-end\FileSystemView.js"
- >
- </File>
- <File
RelativePath="..\inspector\front-end\FontView.js"
>
</File>
@@ -65521,6 +65929,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\HeapSnapshot.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\HeapSnapshotView.js"
>
</File>
@@ -65593,10 +66005,18 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\UglifyJS\parse-js.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\Placard.js"
>
</File>
<File
+ RelativePath="..\inspector\front-end\PleaseWaitMessage.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\popover.css"
>
</File>
@@ -65605,6 +66025,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\UglifyJS\process.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\ProfileDataGridTree.js"
>
</File>
@@ -65681,10 +66105,6 @@
>
</File>
<File
- RelativePath="..\inspector\front-end\ScriptView.js"
- >
- </File>
- <File
RelativePath="..\inspector\front-end\Section.js"
>
</File>
@@ -65697,6 +66117,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\ShowMoreDataGridNode.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\SidebarPane.js"
>
</File>
@@ -65713,19 +66137,19 @@
>
</File>
<File
- RelativePath="..\inspector\front-end\SourceHTMLTokenizer.js"
+ RelativePath="..\inspector\front-end\SourceFrameContent.js"
>
</File>
<File
- RelativePath="..\inspector\front-end\SourceJavaScriptTokenizer.js"
+ RelativePath="..\inspector\front-end\SourceHTMLTokenizer.js"
>
</File>
<File
- RelativePath="..\inspector\front-end\SourceTokenizer.js"
+ RelativePath="..\inspector\front-end\SourceJavaScriptTokenizer.js"
>
</File>
<File
- RelativePath="..\inspector\front-end\SourceView.js"
+ RelativePath="..\inspector\front-end\SourceTokenizer.js"
>
</File>
<File
@@ -65812,14 +66236,6 @@
RelativePath="..\inspector\front-end\WorkersSidebarPane.js"
>
</File>
- <File
- RelativePath="..\inspector\front-end\UglifyJS\parse-js.js"
- >
- </File>
- <File
- RelativePath="..\inspector\front-end\UglifyJS\process.js"
- >
- </File>
</Filter>
</Filter>
<Filter
diff --git a/Source/WebCore/WebCore.vcproj/WebCoreGenerated.vcproj b/Source/WebCore/WebCore.vcproj/WebCoreGenerated.vcproj
index 115189d..60bf017 100644
--- a/Source/WebCore/WebCore.vcproj/WebCoreGenerated.vcproj
+++ b/Source/WebCore/WebCore.vcproj/WebCoreGenerated.vcproj
@@ -85,6 +85,10 @@
>
</File>
<File
+ RelativePath="..\DerivedSources.make"
+ >
+ </File>
+ <File
RelativePath=".\migrate-scripts.sh"
>
</File>
diff --git a/Source/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd b/Source/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
index b3f19c6..3351e60 100755
--- a/Source/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
+++ b/Source/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
@@ -7,13 +7,12 @@ mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\masm"
-mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\profiler"
-mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\unicode\icu"
+mkdir 2>NUL "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\yarr"
xcopy /y /d "%ProjectDir%..\config.h" "%CONFIGURATIONBUILDDIR%\include\WebCore"
xcopy /y /d "%CONFIGURATIONBUILDDIR%\obj\WebCore\DerivedSources\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore"
@@ -75,12 +74,11 @@ xcopy /y /d "%ProjectDir%..\ForwardingHeaders\bindings\*.h" "%CONFIGURATIONBUILD
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\parser\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\runtime\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\masm\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\masm"
-xcopy /y /d "%ProjectDir%..\ForwardingHeaders\pcre\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\profiler\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\profiler"
-xcopy /y /d "%ProjectDir%..\ForwardingHeaders\wrec\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\wtf\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\wtf\text\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\wtf\unicode\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "%ProjectDir%..\ForwardingHeaders\wtf\unicode\icu\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\wtf\unicode\icu"
+xcopy /y /d "%ProjectDir%..\ForwardingHeaders\yarr\*.h" "%CONFIGURATIONBUILDDIR%\include\WebCore\ForwardingHeaders\yarr"
if exist "%CONFIGURATIONBUILDDIR%\buildfailed" del "%CONFIGURATIONBUILDDIR%\buildfailed"
diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
index 4f01530..fc17927 100644
--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -53,10 +53,8 @@
066C77310AB603FD00238CC4 /* RenderFileUploadControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 066C772F0AB603FD00238CC4 /* RenderFileUploadControl.h */; };
06E81ED70AB5D5E900C87837 /* LocalCurrentGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E81ED60AB5D5E900C87837 /* LocalCurrentGraphicsContext.h */; };
06E81EEC0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06E81EEB0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm */; };
- 0709FC4C1025DED80059CDBA /* AccessibilitySlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0709FC4B1025DED80059CDBA /* AccessibilitySlider.cpp */; };
0709FC4E1025DEE30059CDBA /* AccessibilitySlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */; };
0735EE6A0F40C5E4004A2604 /* MediaPlayerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0735EE690F40C5E4004A2604 /* MediaPlayerProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 07B0113D1032241900FBDC33 /* AccessibilityMediaControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B0113C1032241900FBDC33 /* AccessibilityMediaControls.cpp */; };
07B0113F1032242200FBDC33 /* AccessibilityMediaControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */; };
080081960ED3B2DD00C53BC0 /* WMLAnchorElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 080081940ED3B2DD00C53BC0 /* WMLAnchorElement.cpp */; };
080081970ED3B2DD00C53BC0 /* WMLAnchorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */; };
@@ -102,6 +100,7 @@
083DAEA70F01A7FB00342754 /* RenderTextControlMultiLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */; };
083DAEA80F01A7FB00342754 /* RenderTextControlSingleLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */; };
083DAEA90F01A7FB00342754 /* RenderTextControlSingleLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA50F01A7FB00342754 /* RenderTextControlSingleLine.h */; };
+ 0845680812B90DA600960A9F /* FontMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = 0845680712B90DA600960A9F /* FontMetrics.h */; settings = {ATTRIBUTES = (Private, ); }; };
084A0829128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 084A0828128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h */; };
084AEBE40FB505FA0038483E /* SelectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084AEBE20FB505FA0038483E /* SelectElement.cpp */; };
084AEBE50FB505FA0038483E /* SelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 084AEBE30FB505FA0038483E /* SelectElement.h */; };
@@ -253,6 +252,9 @@
0C45342810CDBBFA00869157 /* JSWebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */; };
0F11A54F0F39233100C37884 /* RenderSelectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */; };
0F15DA8A0F3AAEE70000CE47 /* AnimationControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */; };
+ 0F29C16E1300C2E2002D794E /* AccessibilityAllInOne.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F29C16D1300C2E2002D794E /* AccessibilityAllInOne.cpp */; };
+ 0F3DD44F12F5EA1B000D9190 /* ShadowBlur.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */; };
+ 0F3DD45012F5EA1B000D9190 /* ShadowBlur.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */; };
0F500AAF0F54DB1B00EEF928 /* TransformState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F500AAE0F54DB1B00EEF928 /* TransformState.h */; };
0F500AB10F54DB3100EEF928 /* TransformState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F500AB00F54DB3100EEF928 /* TransformState.cpp */; };
0F56028F0E4B76580065B038 /* RenderMarquee.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F56028D0E4B76580065B038 /* RenderMarquee.h */; };
@@ -313,6 +315,8 @@
1479FAF4109AE37500DED655 /* RenderRubyText.h in Headers */ = {isa = PBXBuildFile; fileRef = 1479FAEC109AE37500DED655 /* RenderRubyText.h */; };
148AFDA50AF58360008CC700 /* ExceptionHandlers.h in Headers */ = {isa = PBXBuildFile; fileRef = 148AFDA30AF58360008CC700 /* ExceptionHandlers.h */; settings = {ATTRIBUTES = (Private, ); }; };
148AFDA60AF58360008CC700 /* ExceptionHandlers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 148AFDA40AF58360008CC700 /* ExceptionHandlers.mm */; };
+ 14947FFD12F80CD200A0F631 /* DocumentOrderedMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */; };
+ 14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
14993BE50B2F2B1C0050497F /* FocusController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14993BE30B2F2B1C0050497F /* FocusController.cpp */; };
14993BE60B2F2B1C0050497F /* FocusController.h in Headers */ = {isa = PBXBuildFile; fileRef = 14993BE40B2F2B1C0050497F /* FocusController.h */; settings = {ATTRIBUTES = (Private, ); }; };
14C9A5EA0B3D105F005A0232 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14C9A5E90B3D105F005A0232 /* Settings.cpp */; };
@@ -646,7 +650,6 @@
1CF6BE140E9BB4670025E1CD /* ObjCNodeFilterCondition.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF6BE120E9BB4670025E1CD /* ObjCNodeFilterCondition.mm */; };
1CF6BE150E9BB4670025E1CD /* ObjCNodeFilterCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CF6BE130E9BB4670025E1CD /* ObjCNodeFilterCondition.h */; };
1CFAE3230A6D6A3F0032593D /* libobjc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CFAE3220A6D6A3F0032593D /* libobjc.dylib */; };
- 200B190911C277D900DCCD3A /* ScriptBreakpoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */; };
20D629261253690B00081543 /* InspectorInstrumentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20D629241253690B00081543 /* InspectorInstrumentation.cpp */; };
20D629271253690B00081543 /* InspectorInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 20D629251253690B00081543 /* InspectorInstrumentation.h */; };
228C284510D82500009D0D0E /* ScriptWrappable.h in Headers */ = {isa = PBXBuildFile; fileRef = 228C284410D82500009D0D0E /* ScriptWrappable.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -655,33 +658,17 @@
2542F4DA1166C25A00E89A86 /* UserGestureIndicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2542F4D81166C25A00E89A86 /* UserGestureIndicator.cpp */; };
2542F4DB1166C25A00E89A86 /* UserGestureIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2542F4D91166C25A00E89A86 /* UserGestureIndicator.h */; settings = {ATTRIBUTES = (Private, ); }; };
29489FC712C00F0300D83F0F /* AccessibilityScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */; };
- 29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */; };
- 29A812260FBB9C1D00510293 /* AccessibilityRenderObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */; };
- 29A812270FBB9C1D00510293 /* AccessibilityTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */; };
- 29A812280FBB9C1D00510293 /* AccessibilityARIAGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8120A0FBB9C1D00510293 /* AccessibilityARIAGrid.cpp */; };
- 29A812290FBB9C1D00510293 /* AccessibilityTableRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8120B0FBB9C1D00510293 /* AccessibilityTableRow.cpp */; };
- 29A8122A0FBB9C1D00510293 /* AccessibilityTableCell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8120C0FBB9C1D00510293 /* AccessibilityTableCell.cpp */; };
29A8122B0FBB9C1D00510293 /* AccessibilityTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A8120D0FBB9C1D00510293 /* AccessibilityTable.h */; };
29A8122C0FBB9C1D00510293 /* AccessibilityList.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A8120E0FBB9C1D00510293 /* AccessibilityList.h */; };
- 29A8122D0FBB9C1D00510293 /* AccessibilityARIAGridRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8120F0FBB9C1D00510293 /* AccessibilityARIAGridRow.cpp */; };
29A8122E0FBB9C1D00510293 /* AccessibilityARIAGridCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812100FBB9C1D00510293 /* AccessibilityARIAGridCell.h */; };
- 29A8122F0FBB9C1D00510293 /* AccessibilityList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812110FBB9C1D00510293 /* AccessibilityList.cpp */; };
- 29A812300FBB9C1D00510293 /* AccessibilityARIAGridCell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812120FBB9C1D00510293 /* AccessibilityARIAGridCell.cpp */; };
29A812310FBB9C1D00510293 /* AccessibilityTableRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812130FBB9C1D00510293 /* AccessibilityTableRow.h */; };
29A812320FBB9C1D00510293 /* AccessibilityTableCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812140FBB9C1D00510293 /* AccessibilityTableCell.h */; };
29A812330FBB9C1D00510293 /* AccessibilityARIAGridRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812150FBB9C1D00510293 /* AccessibilityARIAGridRow.h */; };
- 29A812350FBB9C1D00510293 /* AccessibilityTableColumn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812170FBB9C1D00510293 /* AccessibilityTableColumn.cpp */; };
29A812360FBB9C1D00510293 /* AccessibilityObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812180FBB9C1D00510293 /* AccessibilityObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 29A812370FBB9C1D00510293 /* AXObjectCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812190FBB9C1D00510293 /* AXObjectCache.cpp */; };
29A812380FBB9C1D00510293 /* AXObjectCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A8121A0FBB9C1D00510293 /* AXObjectCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
29A812390FBB9C1D00510293 /* AccessibilityRenderObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */; };
- 29A8123A0FBB9C1D00510293 /* AccessibilityImageMapLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8121C0FBB9C1D00510293 /* AccessibilityImageMapLink.cpp */; };
29A8123B0FBB9C1D00510293 /* AccessibilityImageMapLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A8121D0FBB9C1D00510293 /* AccessibilityImageMapLink.h */; };
- 29A8123C0FBB9C1D00510293 /* AccessibilityObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8121E0FBB9C1D00510293 /* AccessibilityObject.cpp */; };
- 29A8123D0FBB9C1D00510293 /* AccessibilityListBoxOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8121F0FBB9C1D00510293 /* AccessibilityListBoxOption.cpp */; };
- 29A8123E0FBB9C1D00510293 /* AccessibilityListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812200FBB9C1D00510293 /* AccessibilityListBox.cpp */; };
29A8123F0FBB9C1D00510293 /* AccessibilityTableHeaderContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812210FBB9C1D00510293 /* AccessibilityTableHeaderContainer.h */; };
- 29A812400FBB9C1D00510293 /* AccessibilityTableHeaderContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812220FBB9C1D00510293 /* AccessibilityTableHeaderContainer.cpp */; };
29A812410FBB9C1D00510293 /* AccessibilityTableColumn.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812230FBB9C1D00510293 /* AccessibilityTableColumn.h */; };
29A812420FBB9C1D00510293 /* AccessibilityListBoxOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812240FBB9C1D00510293 /* AccessibilityListBoxOption.h */; };
29A812430FBB9C1D00510293 /* AccessibilityListBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A812250FBB9C1D00510293 /* AccessibilityListBox.h */; };
@@ -873,8 +860,6 @@
37F818FD0D657606005E1F05 /* WebCoreURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F818FB0D657606005E1F05 /* WebCoreURLResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
37F818FE0D657606005E1F05 /* WebCoreURLResponse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37F818FC0D657606005E1F05 /* WebCoreURLResponse.mm */; };
37FD4298118368460093C029 /* TreeDepthLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 37FD4297118368460093C029 /* TreeDepthLimit.h */; };
- 3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */; };
- 3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */; };
3AC648B2129E146500C3EB25 /* EditingBoundary.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC648B1129E146500C3EB25 /* EditingBoundary.h */; settings = {ATTRIBUTES = (Private, ); }; };
41002CCD0F66EDEF009E660D /* ScriptFunctionCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */; };
41002CCE0F66EDEF009E660D /* ScriptFunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */; };
@@ -888,6 +873,8 @@
4138D3361244054800323D33 /* EventContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4138D3341244054800323D33 /* EventContext.cpp */; };
4150F9F112B6E0E70008C860 /* SliderThumbElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4150F9EF12B6E0E70008C860 /* SliderThumbElement.h */; };
4150F9F212B6E0E70008C860 /* SliderThumbElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4150F9F012B6E0E70008C860 /* SliderThumbElement.cpp */; };
+ 4157AF8012F1FB0400A8C6F5 /* MediaControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 4157AF7E12F1FB0400A8C6F5 /* MediaControls.h */; };
+ 4157AF8112F1FB0400A8C6F5 /* MediaControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4157AF7F12F1FB0400A8C6F5 /* MediaControls.cpp */; };
4162A450101145AE00DFF3ED /* DedicatedWorkerContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4162A44D101145AE00DFF3ED /* DedicatedWorkerContext.cpp */; };
4162A451101145AE00DFF3ED /* DedicatedWorkerContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 4162A44E101145AE00DFF3ED /* DedicatedWorkerContext.h */; };
4162A454101145E300DFF3ED /* JSDedicatedWorkerContextCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4162A453101145E300DFF3ED /* JSDedicatedWorkerContextCustom.cpp */; };
@@ -1264,6 +1251,8 @@
4E19592E0A39DACC00220FE5 /* MediaQueryExp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E1959280A39DACC00220FE5 /* MediaQueryExp.h */; };
4F1534DE11B532EC0021FD86 /* EditingBehavior.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1534DD11B532EC0021FD86 /* EditingBehavior.h */; settings = {ATTRIBUTES = (Private, ); }; };
4F1534E011B533020021FD86 /* EditingBehaviorTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 4F2D205412EAE7B3005C2874 /* InspectorAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2D205212EAE7B3005C2874 /* InspectorAgent.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 4F2D205512EAE7B3005C2874 /* InspectorAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F2D205312EAE7B3005C2874 /* InspectorAgent.cpp */; };
4F3289B511A42AAB005ABE7E /* InspectorValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */; };
4F3289B611A42AAB005ABE7E /* InspectorValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3289B411A42AAB005ABE7E /* InspectorValues.h */; settings = {ATTRIBUTES = (Private, ); }; };
4F4F5FFB11CBD2E100A186BF /* InspectorFrontend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F5FFA11CBD2D200A186BF /* InspectorFrontend.cpp */; };
@@ -1657,8 +1646,6 @@
7A1F2B52126C61B20006A7E6 /* InspectorClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A1F2B51126C61B20006A7E6 /* InspectorClient.cpp */; };
7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */; };
7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 7A5640BF12DF9E5E00F4536D /* InspectorSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */; };
- 7A5640C012DF9E5E00F4536D /* InspectorSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */; };
7A674BDB0F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A674BD90F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp */; };
7A674BDC0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A674BDA0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h */; };
7A74ECBA101839A600BF939E /* InspectorDOMStorageAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A74ECB8101839A500BF939E /* InspectorDOMStorageAgent.cpp */; };
@@ -2762,7 +2749,6 @@
8FAC774D119872CB0015AE94 /* JSMainThreadExecState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F934D841189F1EE00508D5D /* JSMainThreadExecState.cpp */; };
9001774012E0347800648462 /* OESStandardDerivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9001773D12E0347800648462 /* OESStandardDerivatives.cpp */; };
9001774112E0347800648462 /* OESStandardDerivatives.h in Headers */ = {isa = PBXBuildFile; fileRef = 9001773E12E0347800648462 /* OESStandardDerivatives.h */; };
- 9001774212E0347800648462 /* OESStandardDerivatives.idl in Resources */ = {isa = PBXBuildFile; fileRef = 9001773F12E0347800648462 /* OESStandardDerivatives.idl */; };
9001788012E0370700648462 /* JSOESStandardDerivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9001787E12E0370700648462 /* JSOESStandardDerivatives.cpp */; };
9001788112E0370700648462 /* JSOESStandardDerivatives.h in Headers */ = {isa = PBXBuildFile; fileRef = 9001787F12E0370700648462 /* JSOESStandardDerivatives.h */; };
9302B0BD0D79F82900C7EE83 /* PageGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9302B0BC0D79F82900C7EE83 /* PageGroup.cpp */; };
@@ -2859,6 +2845,8 @@
933A14AA0B7D1D0900A53FFD /* DOMTextEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 933A14A90B7D1D0900A53FFD /* DOMTextEvent.mm */; };
933A14B80B7D1D5200A53FFD /* JSTextEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 933A14B60B7D1D5200A53FFD /* JSTextEvent.cpp */; };
933A14B90B7D1D5200A53FFD /* JSTextEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 933A14B70B7D1D5200A53FFD /* JSTextEvent.h */; };
+ 9343CB8112F25E510033C5EE /* TextCodecUTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9343CB7F12F25E510033C5EE /* TextCodecUTF8.cpp */; };
+ 9343CB8212F25E510033C5EE /* TextCodecUTF8.h in Headers */ = {isa = PBXBuildFile; fileRef = 9343CB8012F25E510033C5EE /* TextCodecUTF8.h */; };
93442C9E0D2B335C00338FF9 /* HTMLTableRowsCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 93442C9D0D2B335C00338FF9 /* HTMLTableRowsCollection.h */; };
93442CA00D2B336000338FF9 /* HTMLTableRowsCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93442C9F0D2B336000338FF9 /* HTMLTableRowsCollection.cpp */; };
934907E4125BBBC8007F23A0 /* GraphicsContextCG.h in Headers */ = {isa = PBXBuildFile; fileRef = 934907E3125BBBC8007F23A0 /* GraphicsContextCG.h */; };
@@ -2940,7 +2928,6 @@
93C441EF0F813A1A00C1A634 /* CollectionCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C441ED0F813A1A00C1A634 /* CollectionCache.cpp */; };
93C441F00F813A1A00C1A634 /* CollectionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441EE0F813A1A00C1A634 /* CollectionCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
93C442000F813AE100C1A634 /* CollectionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441FF0F813AE100C1A634 /* CollectionType.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */; };
93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */; };
93C841F809CE855C00DFF5E5 /* DOMImplementationFront.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */; };
93C841FF09CE858300DFF5E5 /* DOMImplementationFront.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */; };
@@ -3030,6 +3017,7 @@
97059978107D975200A50A7C /* PolicyCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 97059974107D975200A50A7C /* PolicyCallback.h */; settings = {ATTRIBUTES = (Private, ); }; };
97059979107D975200A50A7C /* PolicyChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97059975107D975200A50A7C /* PolicyChecker.cpp */; };
9705997A107D975200A50A7C /* PolicyChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 97059976107D975200A50A7C /* PolicyChecker.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 971491DA12FD65E8001BFEB1 /* URLString.h in Headers */ = {isa = PBXBuildFile; fileRef = 971491D912FD65E8001BFEB1 /* URLString.h */; settings = {ATTRIBUTES = (Private, ); }; };
97205AAF123928CA00B17380 /* FTPDirectoryDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97205AAD123928CA00B17380 /* FTPDirectoryDocument.cpp */; };
97205AB0123928CA00B17380 /* FTPDirectoryDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 97205AAE123928CA00B17380 /* FTPDirectoryDocument.h */; };
97205AB51239291000B17380 /* ImageDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97205AB11239291000B17380 /* ImageDocument.cpp */; };
@@ -3044,6 +3032,10 @@
973889A1116EA9DC00ADF313 /* DocumentWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9738899F116EA9DC00ADF313 /* DocumentWriter.h */; settings = {ATTRIBUTES = (Private, ); }; };
973E325610883B7C005BC493 /* ResourceLoadNotifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 973E325410883B7C005BC493 /* ResourceLoadNotifier.cpp */; };
973E325710883B7C005BC493 /* ResourceLoadNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 973E325510883B7C005BC493 /* ResourceLoadNotifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 975CA28A130365F800E99AD9 /* Crypto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 975CA287130365F800E99AD9 /* Crypto.cpp */; };
+ 975CA28B130365F800E99AD9 /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 975CA288130365F800E99AD9 /* Crypto.h */; };
+ 975CA2A11303679D00E99AD9 /* JSCrypto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 975CA29F1303679D00E99AD9 /* JSCrypto.cpp */; };
+ 975CA2A21303679D00E99AD9 /* JSCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 975CA2A01303679D00E99AD9 /* JSCrypto.h */; };
976D6C77122B8A3D001FD1F7 /* AsyncFileWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 976D6C58122B8A3D001FD1F7 /* AsyncFileWriter.h */; };
976D6C78122B8A3D001FD1F7 /* Blob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 976D6C59122B8A3D001FD1F7 /* Blob.cpp */; };
976D6C79122B8A3D001FD1F7 /* Blob.h in Headers */ = {isa = PBXBuildFile; fileRef = 976D6C5A122B8A3D001FD1F7 /* Blob.h */; };
@@ -3096,6 +3088,10 @@
977B3878122883E900B81FF8 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 977B385F122883E900B81FF8 /* HTMLTokenizer.h */; };
977B3879122883E900B81FF8 /* HTMLViewSourceParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 977B3860122883E900B81FF8 /* HTMLViewSourceParser.cpp */; };
977B387A122883E900B81FF8 /* HTMLViewSourceParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 977B3861122883E900B81FF8 /* HTMLViewSourceParser.h */; };
+ 977E2DCD12F0E28300C13379 /* HTMLSourceTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 977E2DCB12F0E28300C13379 /* HTMLSourceTracker.cpp */; };
+ 977E2DCE12F0E28300C13379 /* HTMLSourceTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 977E2DCC12F0E28300C13379 /* HTMLSourceTracker.h */; };
+ 977E2E0E12F0FC9C00C13379 /* XSSFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 977E2E0B12F0FC9C00C13379 /* XSSFilter.cpp */; };
+ 977E2E0F12F0FC9C00C13379 /* XSSFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 977E2E0C12F0FC9C00C13379 /* XSSFilter.h */; };
979F43D31075E44A0000F83B /* NavigationScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 979F43D11075E44A0000F83B /* NavigationScheduler.cpp */; };
979F43D41075E44A0000F83B /* NavigationScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 979F43D21075E44A0000F83B /* NavigationScheduler.h */; settings = {ATTRIBUTES = (Private, ); }; };
97BC84831236FD93000C6161 /* TextDocumentParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97BC84811236FD93000C6161 /* TextDocumentParser.cpp */; };
@@ -3106,10 +3102,10 @@
97BC84B312371180000C6161 /* TextDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97BC84B112371180000C6161 /* TextDocument.cpp */; };
97BC84B412371180000C6161 /* TextDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 97BC84B212371180000C6161 /* TextDocument.h */; };
97C078501165D5BE003A32EF /* SuffixTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 97C0784F1165D5BE003A32EF /* SuffixTree.h */; };
+ 97C471DB12F925BD0086354B /* ContentSecurityPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97C471D912F925BC0086354B /* ContentSecurityPolicy.cpp */; };
+ 97C471DC12F925BD0086354B /* ContentSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 97C471DA12F925BD0086354B /* ContentSecurityPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
97DCE20110807C750057D394 /* HistoryController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97DCE1FF10807C750057D394 /* HistoryController.cpp */; };
97DCE20210807C750057D394 /* HistoryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DCE20010807C750057D394 /* HistoryController.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97DD4D840FDF4D6D00ECF9A4 /* XSSAuditor.cpp */; };
- 97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DD4D850FDF4D6E00ECF9A4 /* XSSAuditor.h */; };
97EF7DFE107E55B700D7C49C /* ScriptControllerBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */; };
9B417064125662B3006B28FC /* ApplyBlockElementCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B417062125662B3006B28FC /* ApplyBlockElementCommand.h */; settings = {ATTRIBUTES = (Private, ); }; };
9B417065125662B3006B28FC /* ApplyBlockElementCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B417063125662B3006B28FC /* ApplyBlockElementCommand.cpp */; };
@@ -3132,6 +3128,7 @@
9FA37EFB1172FDA600C4CD55 /* JSScriptProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA37EF71172FD9300C4CD55 /* JSScriptProfile.h */; };
9FA37EFC1172FDA600C4CD55 /* JSScriptProfileNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FA37EF81172FD9300C4CD55 /* JSScriptProfileNode.cpp */; };
9FA37EFD1172FDA600C4CD55 /* JSScriptProfileNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA37EF91172FD9300C4CD55 /* JSScriptProfileNode.h */; };
+ 9FDC8FF212FAB0060099AB1C /* JSMemoryInfoCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FDC8FF112FAB0060099AB1C /* JSMemoryInfoCustom.cpp */; };
9FFE3E7A11B59C5D0037874E /* MemoryInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FFE3E7811B59C5D0037874E /* MemoryInfo.cpp */; };
9FFE3E7B11B59C5D0037874E /* MemoryInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFE3E7911B59C5D0037874E /* MemoryInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
9FFE3EA511B5A4390037874E /* JSMemoryInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FFE3EA311B5A4390037874E /* JSMemoryInfo.cpp */; };
@@ -3141,6 +3138,9 @@
A136A00D1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h in Headers */ = {isa = PBXBuildFile; fileRef = A136A00B1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h */; };
A17C81220F2A5CF7005DAAEB /* HTMLElementFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A17C81200F2A5CF7005DAAEB /* HTMLElementFactory.cpp */; };
A17C81230F2A5CF7005DAAEB /* HTMLElementFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = A17C81210F2A5CF7005DAAEB /* HTMLElementFactory.h */; };
+ A1E1154413015C3D0054AC8C /* DistantLightSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E1154313015C3D0054AC8C /* DistantLightSource.cpp */; };
+ A1E1154613015C4E0054AC8C /* PointLightSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E1154513015C4E0054AC8C /* PointLightSource.cpp */; };
+ A1E1154813015C5D0054AC8C /* SpotLightSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E1154713015C5D0054AC8C /* SpotLightSource.cpp */; };
A409C984116D0DDD007197BD /* AccessibilityProgressIndicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A409C982116D0DDD007197BD /* AccessibilityProgressIndicator.cpp */; };
A409C985116D0DDD007197BD /* AccessibilityProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = A409C983116D0DDD007197BD /* AccessibilityProgressIndicator.h */; };
A4226E5A1163D667008B8397 /* JSHTMLProgressElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4226E591163D667008B8397 /* JSHTMLProgressElement.cpp */; };
@@ -3221,6 +3221,7 @@
A7DBF8DE1276919C006B6008 /* TextCheckingHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DBF8DC1276919C006B6008 /* TextCheckingHelper.h */; };
A7F338A311C0EFCA00A320A7 /* ShadowElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7F338A111C0EFCA00A320A7 /* ShadowElement.cpp */; };
A7F338A411C0EFCA00A320A7 /* ShadowElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F338A211C0EFCA00A320A7 /* ShadowElement.h */; };
+ A7FE819C12FA677700850C1E /* ProgressBarValueElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FE819B12FA677700850C1E /* ProgressBarValueElement.h */; };
A80A38FE0E50CC8200A25EBC /* PatternCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80A38FD0E50CC8200A25EBC /* PatternCG.cpp */; };
A80D67080E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h in Headers */ = {isa = PBXBuildFile; fileRef = A80D67070E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h */; };
A80E6CE40A1989CA007FB8C5 /* CSSValueList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CBA0A1989CA007FB8C5 /* CSSValueList.cpp */; };
@@ -3272,7 +3273,7 @@
A80E734F0A199C77007FB8C5 /* CSSSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E73480A199C77007FB8C5 /* CSSSelector.cpp */; };
A80E73500A199C77007FB8C5 /* StyleBase.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E73490A199C77007FB8C5 /* StyleBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
A80E73510A199C77007FB8C5 /* StyleList.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E734A0A199C77007FB8C5 /* StyleList.h */; };
- A80E73520A199C77007FB8C5 /* CSSSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E734B0A199C77007FB8C5 /* CSSSelector.h */; };
+ A80E73520A199C77007FB8C5 /* CSSSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E734B0A199C77007FB8C5 /* CSSSelector.h */; settings = {ATTRIBUTES = (Private, ); }; };
A80E73530A199C77007FB8C5 /* StyleBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E734C0A199C77007FB8C5 /* StyleBase.cpp */; };
A80E7A170A19C3D6007FB8C5 /* JSHTMLMetaElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E7A150A19C3D6007FB8C5 /* JSHTMLMetaElement.cpp */; };
A80E7A180A19C3D6007FB8C5 /* JSHTMLMetaElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E7A160A19C3D6007FB8C5 /* JSHTMLMetaElement.h */; };
@@ -4426,7 +4427,6 @@
B2C3DA230D006C1D00EF6F26 /* BidiContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C3D9F20D006C1D00EF6F26 /* BidiContext.cpp */; };
B2C3DA240D006C1D00EF6F26 /* BidiContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3D9F30D006C1D00EF6F26 /* BidiContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
B2C3DA250D006C1D00EF6F26 /* BidiResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3D9F40D006C1D00EF6F26 /* BidiResolver.h */; settings = {ATTRIBUTES = (Private, ); }; };
- B2C3DA260D006C1D00EF6F26 /* CharacterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3D9F50D006C1D00EF6F26 /* CharacterNames.h */; settings = {ATTRIBUTES = (Private, ); }; };
B2C3DA2A0D006C1D00EF6F26 /* CharsetData.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3D9FA0D006C1D00EF6F26 /* CharsetData.h */; settings = {ATTRIBUTES = (Private, ); }; };
B2C3DA2B0D006C1D00EF6F26 /* PlatformString.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C3D9FB0D006C1D00EF6F26 /* PlatformString.h */; settings = {ATTRIBUTES = (Private, ); }; };
B2C3DA2C0D006C1D00EF6F26 /* RegularExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C3D9FC0D006C1D00EF6F26 /* RegularExpression.cpp */; };
@@ -5082,6 +5082,7 @@
BC94D14F0C275C68006BC617 /* JSHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94D14D0C275C68006BC617 /* JSHistory.h */; };
BC94D1530C275C8B006BC617 /* History.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC94D1500C275C8B006BC617 /* History.cpp */; };
BC94D1540C275C8B006BC617 /* History.h in Headers */ = {isa = PBXBuildFile; fileRef = BC94D1510C275C8B006BC617 /* History.h */; };
+ BC9585E112F0989500755821 /* PlatformGestureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9585DF12F0989500755821 /* PlatformGestureEvent.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC96DB430F3A880E00573CB3 /* RenderBoxModelObject.h in Headers */ = {isa = PBXBuildFile; fileRef = BC96DB420F3A880E00573CB3 /* RenderBoxModelObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC96DB460F3A882200573CB3 /* RenderBoxModelObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC96DB450F3A882200573CB3 /* RenderBoxModelObject.cpp */; };
BC97E23A109144950010D361 /* HTMLAllCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = BC97E238109144950010D361 /* HTMLAllCollection.h */; };
@@ -5199,6 +5200,9 @@
BCE1C4400D9830F4003B02F2 /* JSLocationCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCE1C43F0D9830F4003B02F2 /* JSLocationCustom.cpp */; };
BCE3BEC20D222B1D007E06E4 /* TagNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCE3BEC00D222B1D007E06E4 /* TagNodeList.cpp */; };
BCE3BEC30D222B1D007E06E4 /* TagNodeList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE3BEC10D222B1D007E06E4 /* TagNodeList.h */; };
+ BCE4413312F748E2009B84B8 /* RenderCombineText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCE4413112F748E2009B84B8 /* RenderCombineText.cpp */; };
+ BCE4413412F748E2009B84B8 /* RenderCombineText.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE4413212F748E2009B84B8 /* RenderCombineText.h */; };
+ BCE4413612F7490B009B84B8 /* FontWidthVariant.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE4413512F7490B009B84B8 /* FontWidthVariant.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCE658FF0EA9248A007E4533 /* Theme.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE658FE0EA9248A007E4533 /* Theme.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCE659A90EA927B9007E4533 /* ThemeTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE659A80EA927B9007E4533 /* ThemeTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCE659E60EA92FB2007E4533 /* ThemeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE659E50EA92FB2007E4533 /* ThemeMac.h */; };
@@ -5475,6 +5479,7 @@
E1284BD61044A01E00EAEB52 /* DOMPageTransitionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E1284BD41044A01E00EAEB52 /* DOMPageTransitionEvent.h */; };
E12EDB7B0B308A78002704B6 /* EventTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = E12EDB7A0B308A78002704B6 /* EventTarget.h */; settings = {ATTRIBUTES = (Private, ); }; };
E12EDBEA0B308E0B002704B6 /* EventTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E12EDBE90B308E0B002704B6 /* EventTarget.cpp */; };
+ E134F5AB12EE343F004EC58D /* IntRectHash.h in Headers */ = {isa = PBXBuildFile; fileRef = E134F5AA12EE343F004EC58D /* IntRectHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
E13F01F11270E19000DFBA71 /* CookieStorageMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = E13F01F01270E19000DFBA71 /* CookieStorageMac.mm */; };
E15A36D71104572000B7B639 /* XMLNSNames.h in Headers */ = {isa = PBXBuildFile; fileRef = E15A36D61104572000B7B639 /* XMLNSNames.h */; };
E15A36D91104572700B7B639 /* XMLNSNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E15A36D81104572700B7B639 /* XMLNSNames.cpp */; };
@@ -5584,7 +5589,7 @@
E446143C0CD689CC00FADA75 /* JSHTMLSourceElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B423720CBFB6E000AF2ECE /* JSHTMLSourceElement.h */; };
E44614510CD68A3500FADA75 /* RenderVideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B41E330CBFB60900AF2ECE /* RenderVideo.cpp */; };
E44614520CD68A3500FADA75 /* RenderVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B41E340CBFB60900AF2ECE /* RenderVideo.h */; };
- E462A4A1113E71BE004A4220 /* IntPointHash.h in Headers */ = {isa = PBXBuildFile; fileRef = E462A4A0113E71BE004A4220 /* IntPointHash.h */; };
+ E462A4A1113E71BE004A4220 /* IntPointHash.h in Headers */ = {isa = PBXBuildFile; fileRef = E462A4A0113E71BE004A4220 /* IntPointHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
E4778B7F115A581A00B5D372 /* JSCustomEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4778B7D115A581A00B5D372 /* JSCustomEvent.cpp */; };
E4778B80115A581A00B5D372 /* JSCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E4778B7E115A581A00B5D372 /* JSCustomEvent.h */; };
E47B4BE80E71241600038854 /* CachedResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = E47B4BE60E71241600038854 /* CachedResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5628,8 +5633,12 @@
F3D461491161D53200CA0D09 /* JSErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D461471161D53200CA0D09 /* JSErrorHandler.h */; };
F3D4C47812E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */; };
F3D4C47912E07663003DA150 /* InspectorBrowserDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D4C47712E07663003DA150 /* InspectorBrowserDebuggerAgent.h */; };
+ F3F5CF1112ED81A80084C569 /* InspectorConsoleInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */; };
+ F3F5CF1312ED81B30084C569 /* InspectorDatabaseInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F5CF1212ED81B30084C569 /* InspectorDatabaseInstrumentation.h */; };
F4EAF4AE10C742B1009100D3 /* OpenTypeSanitizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4EAF4AC10C742B1009100D3 /* OpenTypeSanitizer.cpp */; };
F4EAF4AF10C742B1009100D3 /* OpenTypeSanitizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4EAF4AD10C742B1009100D3 /* OpenTypeSanitizer.h */; };
+ F5142C69123F12B000F5BD4C /* LocalizedNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = F5142C68123F12B000F5BD4C /* LocalizedNumber.h */; };
+ F5142C6B123F12C500F5BD4C /* LocalizedNumberNone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5142C6A123F12C500F5BD4C /* LocalizedNumberNone.cpp */; };
F55B3DAD1251F12D003EF269 /* BaseTextInputType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F55B3D791251F12D003EF269 /* BaseTextInputType.cpp */; };
F55B3DAE1251F12D003EF269 /* BaseTextInputType.h in Headers */ = {isa = PBXBuildFile; fileRef = F55B3D7A1251F12D003EF269 /* BaseTextInputType.h */; };
F55B3DAF1251F12D003EF269 /* ButtonInputType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F55B3D7B1251F12D003EF269 /* ButtonInputType.cpp */; };
@@ -6366,13 +6375,11 @@
066C772F0AB603FD00238CC4 /* RenderFileUploadControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderFileUploadControl.h; sourceTree = "<group>"; };
06E81ED60AB5D5E900C87837 /* LocalCurrentGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalCurrentGraphicsContext.h; sourceTree = "<group>"; };
06E81EEB0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalCurrentGraphicsContext.mm; sourceTree = "<group>"; };
- 0709FC4B1025DED80059CDBA /* AccessibilitySlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilitySlider.cpp; sourceTree = "<group>"; };
0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySlider.h; sourceTree = "<group>"; };
070DD8F50F01868000727DEB /* mediaControls.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mediaControls.css; sourceTree = "<group>"; };
0735EE690F40C5E4004A2604 /* MediaPlayerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerProxy.h; sourceTree = "<group>"; };
079F5E4B0F3BEBEA005E0782 /* MediaPlayerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivate.h; sourceTree = "<group>"; };
07AFE5900F1446BD00841617 /* mediaControlsQuickTime.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mediaControlsQuickTime.css; sourceTree = "<group>"; };
- 07B0113C1032241900FBDC33 /* AccessibilityMediaControls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMediaControls.cpp; sourceTree = "<group>"; };
07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMediaControls.h; sourceTree = "<group>"; };
080081940ED3B2DD00C53BC0 /* WMLAnchorElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLAnchorElement.cpp; sourceTree = "<group>"; };
080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLAnchorElement.h; sourceTree = "<group>"; };
@@ -6416,6 +6423,7 @@
083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlMultiLine.h; sourceTree = "<group>"; };
083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlSingleLine.cpp; sourceTree = "<group>"; };
083DAEA50F01A7FB00342754 /* RenderTextControlSingleLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlSingleLine.h; sourceTree = "<group>"; };
+ 0845680712B90DA600960A9F /* FontMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontMetrics.h; sourceTree = "<group>"; };
084A0828128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegListPropertyTearOff.h; sourceTree = "<group>"; };
084AEBE20FB505FA0038483E /* SelectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectElement.cpp; sourceTree = "<group>"; };
084AEBE30FB505FA0038483E /* SelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectElement.h; sourceTree = "<group>"; };
@@ -6557,6 +6565,9 @@
0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLUniformLocation.h; sourceTree = "<group>"; };
0F11A54E0F39233100C37884 /* RenderSelectionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSelectionInfo.h; sourceTree = "<group>"; };
0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationControllerPrivate.h; path = animation/AnimationControllerPrivate.h; sourceTree = "<group>"; };
+ 0F29C16D1300C2E2002D794E /* AccessibilityAllInOne.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityAllInOne.cpp; sourceTree = "<group>"; };
+ 0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShadowBlur.cpp; sourceTree = "<group>"; };
+ 0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShadowBlur.h; sourceTree = "<group>"; };
0F500AAE0F54DB1B00EEF928 /* TransformState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformState.h; sourceTree = "<group>"; };
0F500AB00F54DB3100EEF928 /* TransformState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformState.cpp; sourceTree = "<group>"; };
0F56028D0E4B76580065B038 /* RenderMarquee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMarquee.h; sourceTree = "<group>"; };
@@ -6624,6 +6635,8 @@
14813BF309EDF88E00F757E1 /* IDLParser.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; name = IDLParser.pm; path = scripts/IDLParser.pm; sourceTree = "<group>"; };
148AFDA30AF58360008CC700 /* ExceptionHandlers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ExceptionHandlers.h; sourceTree = "<group>"; };
148AFDA40AF58360008CC700 /* ExceptionHandlers.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ExceptionHandlers.mm; sourceTree = "<group>"; };
+ 14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentOrderedMap.cpp; sourceTree = "<group>"; };
+ 14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentOrderedMap.h; sourceTree = "<group>"; };
14993BE30B2F2B1C0050497F /* FocusController.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FocusController.cpp; sourceTree = "<group>"; };
14993BE40B2F2B1C0050497F /* FocusController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FocusController.h; sourceTree = "<group>"; };
14C9A5E90B3D105F005A0232 /* Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Settings.cpp; sourceTree = "<group>"; };
@@ -6985,7 +6998,6 @@
1CF6BE120E9BB4670025E1CD /* ObjCNodeFilterCondition.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjCNodeFilterCondition.mm; sourceTree = "<group>"; };
1CF6BE130E9BB4670025E1CD /* ObjCNodeFilterCondition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjCNodeFilterCondition.h; sourceTree = "<group>"; };
1CFAE3220A6D6A3F0032593D /* libobjc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libobjc.dylib; path = /usr/lib/libobjc.dylib; sourceTree = "<absolute>"; };
- 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptBreakpoint.cpp; sourceTree = "<group>"; };
20D629241253690B00081543 /* InspectorInstrumentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorInstrumentation.cpp; sourceTree = "<group>"; };
20D629251253690B00081543 /* InspectorInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorInstrumentation.h; sourceTree = "<group>"; };
228C284410D82500009D0D0E /* ScriptWrappable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptWrappable.h; sourceTree = "<group>"; };
@@ -6995,34 +7007,18 @@
2542F4D81166C25A00E89A86 /* UserGestureIndicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserGestureIndicator.cpp; sourceTree = "<group>"; };
2542F4D91166C25A00E89A86 /* UserGestureIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserGestureIndicator.h; sourceTree = "<group>"; };
29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityScrollView.h; sourceTree = "<group>"; };
- 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityScrollView.cpp; sourceTree = "<group>"; };
- 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityRenderObject.cpp; sourceTree = "<group>"; };
- 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTable.cpp; sourceTree = "<group>"; };
- 29A8120A0FBB9C1D00510293 /* AccessibilityARIAGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityARIAGrid.cpp; sourceTree = "<group>"; };
- 29A8120B0FBB9C1D00510293 /* AccessibilityTableRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTableRow.cpp; sourceTree = "<group>"; };
- 29A8120C0FBB9C1D00510293 /* AccessibilityTableCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTableCell.cpp; sourceTree = "<group>"; };
29A8120D0FBB9C1D00510293 /* AccessibilityTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTable.h; sourceTree = "<group>"; };
29A8120E0FBB9C1D00510293 /* AccessibilityList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityList.h; sourceTree = "<group>"; };
- 29A8120F0FBB9C1D00510293 /* AccessibilityARIAGridRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityARIAGridRow.cpp; sourceTree = "<group>"; };
29A812100FBB9C1D00510293 /* AccessibilityARIAGridCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityARIAGridCell.h; sourceTree = "<group>"; };
- 29A812110FBB9C1D00510293 /* AccessibilityList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityList.cpp; sourceTree = "<group>"; };
- 29A812120FBB9C1D00510293 /* AccessibilityARIAGridCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityARIAGridCell.cpp; sourceTree = "<group>"; };
29A812130FBB9C1D00510293 /* AccessibilityTableRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTableRow.h; sourceTree = "<group>"; };
29A812140FBB9C1D00510293 /* AccessibilityTableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTableCell.h; sourceTree = "<group>"; };
29A812150FBB9C1D00510293 /* AccessibilityARIAGridRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityARIAGridRow.h; sourceTree = "<group>"; };
29A812160FBB9C1D00510293 /* AccessibilityARIAGrid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityARIAGrid.h; sourceTree = "<group>"; };
- 29A812170FBB9C1D00510293 /* AccessibilityTableColumn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTableColumn.cpp; sourceTree = "<group>"; };
29A812180FBB9C1D00510293 /* AccessibilityObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityObject.h; sourceTree = "<group>"; };
- 29A812190FBB9C1D00510293 /* AXObjectCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AXObjectCache.cpp; sourceTree = "<group>"; };
29A8121A0FBB9C1D00510293 /* AXObjectCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXObjectCache.h; sourceTree = "<group>"; };
29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityRenderObject.h; sourceTree = "<group>"; };
- 29A8121C0FBB9C1D00510293 /* AccessibilityImageMapLink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityImageMapLink.cpp; sourceTree = "<group>"; };
29A8121D0FBB9C1D00510293 /* AccessibilityImageMapLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityImageMapLink.h; sourceTree = "<group>"; };
- 29A8121E0FBB9C1D00510293 /* AccessibilityObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityObject.cpp; sourceTree = "<group>"; };
- 29A8121F0FBB9C1D00510293 /* AccessibilityListBoxOption.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityListBoxOption.cpp; sourceTree = "<group>"; };
- 29A812200FBB9C1D00510293 /* AccessibilityListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityListBox.cpp; sourceTree = "<group>"; };
29A812210FBB9C1D00510293 /* AccessibilityTableHeaderContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTableHeaderContainer.h; sourceTree = "<group>"; };
- 29A812220FBB9C1D00510293 /* AccessibilityTableHeaderContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTableHeaderContainer.cpp; sourceTree = "<group>"; };
29A812230FBB9C1D00510293 /* AccessibilityTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTableColumn.h; sourceTree = "<group>"; };
29A812240FBB9C1D00510293 /* AccessibilityListBoxOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityListBoxOption.h; sourceTree = "<group>"; };
29A812250FBB9C1D00510293 /* AccessibilityListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityListBox.h; sourceTree = "<group>"; };
@@ -7231,8 +7227,6 @@
37F818FC0D657606005E1F05 /* WebCoreURLResponse.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreURLResponse.mm; sourceTree = "<group>"; };
37FC96DA1104ED71003E1FAD /* TrailingFloatsRootInlineBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrailingFloatsRootInlineBox.h; sourceTree = "<group>"; };
37FD4297118368460093C029 /* TreeDepthLimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeDepthLimit.h; sourceTree = "<group>"; };
- 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFileSystemAgent.cpp; sourceTree = "<group>"; };
- 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFileSystemAgent.h; sourceTree = "<group>"; };
3AC648B1129E146500C3EB25 /* EditingBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBoundary.h; sourceTree = "<group>"; };
41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptFunctionCall.h; sourceTree = "<group>"; };
41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptFunctionCall.cpp; sourceTree = "<group>"; };
@@ -7246,6 +7240,8 @@
4138D3341244054800323D33 /* EventContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventContext.cpp; sourceTree = "<group>"; };
4150F9EF12B6E0E70008C860 /* SliderThumbElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SliderThumbElement.h; sourceTree = "<group>"; };
4150F9F012B6E0E70008C860 /* SliderThumbElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SliderThumbElement.cpp; sourceTree = "<group>"; };
+ 4157AF7E12F1FB0400A8C6F5 /* MediaControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaControls.h; sourceTree = "<group>"; };
+ 4157AF7F12F1FB0400A8C6F5 /* MediaControls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaControls.cpp; sourceTree = "<group>"; };
4162A44D101145AE00DFF3ED /* DedicatedWorkerContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DedicatedWorkerContext.cpp; path = workers/DedicatedWorkerContext.cpp; sourceTree = "<group>"; };
4162A44E101145AE00DFF3ED /* DedicatedWorkerContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DedicatedWorkerContext.h; path = workers/DedicatedWorkerContext.h; sourceTree = "<group>"; };
4162A44F101145AE00DFF3ED /* DedicatedWorkerContext.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = DedicatedWorkerContext.idl; path = workers/DedicatedWorkerContext.idl; sourceTree = "<group>"; };
@@ -7665,6 +7661,8 @@
4E1959280A39DACC00220FE5 /* MediaQueryExp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MediaQueryExp.h; sourceTree = "<group>"; };
4F1534DD11B532EC0021FD86 /* EditingBehavior.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBehavior.h; sourceTree = "<group>"; };
4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBehaviorTypes.h; sourceTree = "<group>"; };
+ 4F2D205212EAE7B3005C2874 /* InspectorAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorAgent.h; sourceTree = "<group>"; };
+ 4F2D205312EAE7B3005C2874 /* InspectorAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorAgent.cpp; sourceTree = "<group>"; };
4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorValues.cpp; sourceTree = "<group>"; };
4F3289B411A42AAB005ABE7E /* InspectorValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorValues.h; sourceTree = "<group>"; };
4F4F5FFA11CBD2D200A186BF /* InspectorFrontend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFrontend.cpp; sourceTree = "<group>"; };
@@ -8094,8 +8092,6 @@
7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDOMAgent.h; sourceTree = "<group>"; };
7A563E5412DE32B000F4536D /* InjectedScriptSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedScriptSource.h; sourceTree = "<group>"; };
7A563F9512DF5C9100F4536D /* InjectedScriptSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = InjectedScriptSource.js; sourceTree = "<group>"; };
- 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorSettings.cpp; sourceTree = "<group>"; };
- 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorSettings.h; sourceTree = "<group>"; };
7A674BD90F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageGroupLoadDeferrer.cpp; sourceTree = "<group>"; };
7A674BDA0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageGroupLoadDeferrer.h; sourceTree = "<group>"; };
7A74ECB8101839A500BF939E /* InspectorDOMStorageAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMStorageAgent.cpp; sourceTree = "<group>"; };
@@ -9253,6 +9249,8 @@
933A14A90B7D1D0900A53FFD /* DOMTextEvent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMTextEvent.mm; sourceTree = "<group>"; };
933A14B60B7D1D5200A53FFD /* JSTextEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextEvent.cpp; sourceTree = "<group>"; };
933A14B70B7D1D5200A53FFD /* JSTextEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTextEvent.h; sourceTree = "<group>"; };
+ 9343CB7F12F25E510033C5EE /* TextCodecUTF8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextCodecUTF8.cpp; sourceTree = "<group>"; };
+ 9343CB8012F25E510033C5EE /* TextCodecUTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCodecUTF8.h; sourceTree = "<group>"; };
93442C9D0D2B335C00338FF9 /* HTMLTableRowsCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTableRowsCollection.h; sourceTree = "<group>"; };
93442C9F0D2B336000338FF9 /* HTMLTableRowsCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLTableRowsCollection.cpp; sourceTree = "<group>"; };
934907E3125BBBC8007F23A0 /* GraphicsContextCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsContextCG.h; sourceTree = "<group>"; };
@@ -9338,7 +9336,6 @@
93C441ED0F813A1A00C1A634 /* CollectionCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollectionCache.cpp; sourceTree = "<group>"; };
93C441EE0F813A1A00C1A634 /* CollectionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionCache.h; sourceTree = "<group>"; };
93C441FF0F813AE100C1A634 /* CollectionType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionType.h; sourceTree = "<group>"; };
- 93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityScrollbar.cpp; sourceTree = "<group>"; };
93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityScrollbar.h; sourceTree = "<group>"; };
93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMImplementationFront.h; sourceTree = "<group>"; };
93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMImplementationFront.cpp; sourceTree = "<group>"; };
@@ -9408,6 +9405,7 @@
97059974107D975200A50A7C /* PolicyCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolicyCallback.h; sourceTree = "<group>"; };
97059975107D975200A50A7C /* PolicyChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolicyChecker.cpp; sourceTree = "<group>"; };
97059976107D975200A50A7C /* PolicyChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolicyChecker.h; sourceTree = "<group>"; };
+ 971491D912FD65E8001BFEB1 /* URLString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLString.h; sourceTree = "<group>"; };
97205AAD123928CA00B17380 /* FTPDirectoryDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FTPDirectoryDocument.cpp; sourceTree = "<group>"; };
97205AAE123928CA00B17380 /* FTPDirectoryDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTPDirectoryDocument.h; sourceTree = "<group>"; };
97205AB11239291000B17380 /* ImageDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageDocument.cpp; sourceTree = "<group>"; };
@@ -9422,6 +9420,11 @@
9738899F116EA9DC00ADF313 /* DocumentWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentWriter.h; sourceTree = "<group>"; };
973E325410883B7C005BC493 /* ResourceLoadNotifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceLoadNotifier.cpp; sourceTree = "<group>"; };
973E325510883B7C005BC493 /* ResourceLoadNotifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadNotifier.h; sourceTree = "<group>"; };
+ 975CA287130365F800E99AD9 /* Crypto.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Crypto.cpp; sourceTree = "<group>"; };
+ 975CA288130365F800E99AD9 /* Crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Crypto.h; sourceTree = "<group>"; };
+ 975CA289130365F800E99AD9 /* Crypto.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Crypto.idl; sourceTree = "<group>"; };
+ 975CA29F1303679D00E99AD9 /* JSCrypto.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCrypto.cpp; sourceTree = "<group>"; };
+ 975CA2A01303679D00E99AD9 /* JSCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCrypto.h; sourceTree = "<group>"; };
976D6C58122B8A3D001FD1F7 /* AsyncFileWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AsyncFileWriter.h; path = fileapi/AsyncFileWriter.h; sourceTree = "<group>"; };
976D6C59122B8A3D001FD1F7 /* Blob.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Blob.cpp; path = fileapi/Blob.cpp; sourceTree = "<group>"; };
976D6C5A122B8A3D001FD1F7 /* Blob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Blob.h; path = fileapi/Blob.h; sourceTree = "<group>"; };
@@ -9475,6 +9478,10 @@
977B385F122883E900B81FF8 /* HTMLTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLTokenizer.h; path = parser/HTMLTokenizer.h; sourceTree = "<group>"; };
977B3860122883E900B81FF8 /* HTMLViewSourceParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HTMLViewSourceParser.cpp; path = parser/HTMLViewSourceParser.cpp; sourceTree = "<group>"; };
977B3861122883E900B81FF8 /* HTMLViewSourceParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLViewSourceParser.h; path = parser/HTMLViewSourceParser.h; sourceTree = "<group>"; };
+ 977E2DCB12F0E28300C13379 /* HTMLSourceTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HTMLSourceTracker.cpp; path = parser/HTMLSourceTracker.cpp; sourceTree = "<group>"; };
+ 977E2DCC12F0E28300C13379 /* HTMLSourceTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLSourceTracker.h; path = parser/HTMLSourceTracker.h; sourceTree = "<group>"; };
+ 977E2E0B12F0FC9C00C13379 /* XSSFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XSSFilter.cpp; path = parser/XSSFilter.cpp; sourceTree = "<group>"; };
+ 977E2E0C12F0FC9C00C13379 /* XSSFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XSSFilter.h; path = parser/XSSFilter.h; sourceTree = "<group>"; };
979F43D11075E44A0000F83B /* NavigationScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavigationScheduler.cpp; sourceTree = "<group>"; };
979F43D21075E44A0000F83B /* NavigationScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigationScheduler.h; sourceTree = "<group>"; };
97BC84811236FD93000C6161 /* TextDocumentParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextDocumentParser.cpp; path = parser/TextDocumentParser.cpp; sourceTree = "<group>"; };
@@ -9486,10 +9493,10 @@
97BC84B212371180000C6161 /* TextDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextDocument.h; sourceTree = "<group>"; };
97C0784F1165D5BE003A32EF /* SuffixTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SuffixTree.h; sourceTree = "<group>"; };
97C1F552122855CB00EDE616 /* HTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLToken.h; path = parser/HTMLToken.h; sourceTree = "<group>"; };
+ 97C471D912F925BC0086354B /* ContentSecurityPolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentSecurityPolicy.cpp; sourceTree = "<group>"; };
+ 97C471DA12F925BD0086354B /* ContentSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentSecurityPolicy.h; sourceTree = "<group>"; };
97DCE1FF10807C750057D394 /* HistoryController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HistoryController.cpp; sourceTree = "<group>"; };
97DCE20010807C750057D394 /* HistoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryController.h; sourceTree = "<group>"; };
- 97DD4D840FDF4D6D00ECF9A4 /* XSSAuditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XSSAuditor.cpp; sourceTree = "<group>"; };
- 97DD4D850FDF4D6E00ECF9A4 /* XSSAuditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XSSAuditor.h; sourceTree = "<group>"; };
97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptControllerBase.cpp; sourceTree = "<group>"; };
9B417062125662B3006B28FC /* ApplyBlockElementCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplyBlockElementCommand.h; sourceTree = "<group>"; };
9B417063125662B3006B28FC /* ApplyBlockElementCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplyBlockElementCommand.cpp; sourceTree = "<group>"; };
@@ -9514,6 +9521,7 @@
9FA37EF71172FD9300C4CD55 /* JSScriptProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptProfile.h; sourceTree = "<group>"; };
9FA37EF81172FD9300C4CD55 /* JSScriptProfileNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSScriptProfileNode.cpp; sourceTree = "<group>"; };
9FA37EF91172FD9300C4CD55 /* JSScriptProfileNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptProfileNode.h; sourceTree = "<group>"; };
+ 9FDC8FF112FAB0060099AB1C /* JSMemoryInfoCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMemoryInfoCustom.cpp; sourceTree = "<group>"; };
9FFE3E7811B59C5D0037874E /* MemoryInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryInfo.cpp; sourceTree = "<group>"; };
9FFE3E7911B59C5D0037874E /* MemoryInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryInfo.h; sourceTree = "<group>"; };
9FFE3E7C11B59C6E0037874E /* MemoryInfo.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MemoryInfo.idl; sourceTree = "<group>"; };
@@ -9524,6 +9532,9 @@
A136A00B1134DBD200CC8D50 /* XMLHttpRequestProgressEventThrottle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLHttpRequestProgressEventThrottle.h; sourceTree = "<group>"; };
A17C81200F2A5CF7005DAAEB /* HTMLElementFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLElementFactory.cpp; sourceTree = "<group>"; };
A17C81210F2A5CF7005DAAEB /* HTMLElementFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLElementFactory.h; sourceTree = "<group>"; };
+ A1E1154313015C3D0054AC8C /* DistantLightSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DistantLightSource.cpp; path = filters/DistantLightSource.cpp; sourceTree = "<group>"; };
+ A1E1154513015C4E0054AC8C /* PointLightSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointLightSource.cpp; path = filters/PointLightSource.cpp; sourceTree = "<group>"; };
+ A1E1154713015C5D0054AC8C /* SpotLightSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SpotLightSource.cpp; path = filters/SpotLightSource.cpp; sourceTree = "<group>"; };
A409C982116D0DDD007197BD /* AccessibilityProgressIndicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityProgressIndicator.cpp; sourceTree = "<group>"; };
A409C983116D0DDD007197BD /* AccessibilityProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityProgressIndicator.h; sourceTree = "<group>"; };
A4226E591163D667008B8397 /* JSHTMLProgressElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLProgressElement.cpp; sourceTree = "<group>"; };
@@ -9609,6 +9620,7 @@
A7DBF8DC1276919C006B6008 /* TextCheckingHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCheckingHelper.h; sourceTree = "<group>"; };
A7F338A111C0EFCA00A320A7 /* ShadowElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShadowElement.cpp; sourceTree = "<group>"; };
A7F338A211C0EFCA00A320A7 /* ShadowElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShadowElement.h; sourceTree = "<group>"; };
+ A7FE819B12FA677700850C1E /* ProgressBarValueElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressBarValueElement.h; sourceTree = "<group>"; };
A80A38FD0E50CC8200A25EBC /* PatternCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PatternCG.cpp; sourceTree = "<group>"; };
A80D67070E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsContextPlatformPrivateCG.h; sourceTree = "<group>"; };
A80E6CBA0A1989CA007FB8C5 /* CSSValueList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSValueList.cpp; sourceTree = "<group>"; };
@@ -10706,7 +10718,6 @@
B2C3D9F20D006C1D00EF6F26 /* BidiContext.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = BidiContext.cpp; sourceTree = "<group>"; };
B2C3D9F30D006C1D00EF6F26 /* BidiContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BidiContext.h; sourceTree = "<group>"; };
B2C3D9F40D006C1D00EF6F26 /* BidiResolver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BidiResolver.h; sourceTree = "<group>"; };
- B2C3D9F50D006C1D00EF6F26 /* CharacterNames.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CharacterNames.h; sourceTree = "<group>"; };
B2C3D9FA0D006C1D00EF6F26 /* CharsetData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CharsetData.h; sourceTree = "<group>"; };
B2C3D9FB0D006C1D00EF6F26 /* PlatformString.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlatformString.h; sourceTree = "<group>"; };
B2C3D9FC0D006C1D00EF6F26 /* RegularExpression.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RegularExpression.cpp; sourceTree = "<group>"; };
@@ -11363,6 +11374,7 @@
BC7FA6800D1F167900DB22A9 /* SelectorNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectorNodeList.cpp; sourceTree = "<group>"; };
BC80C9850CD294EE00A0B7B3 /* CSSTimingFunctionValue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSTimingFunctionValue.cpp; sourceTree = "<group>"; };
BC80C9860CD294EE00A0B7B3 /* CSSTimingFunctionValue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSTimingFunctionValue.h; sourceTree = "<group>"; };
+ BC814A4112F8C34A007B2C32 /* HeaderDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeaderDetection.h; sourceTree = "<group>"; };
BC8243250D0CE8A200460C8F /* JSSQLError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLError.h; sourceTree = "<group>"; };
BC8243260D0CE8A200460C8F /* JSSQLTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSQLTransaction.h; sourceTree = "<group>"; };
BC8243E60D0CFD7500460C8F /* WindowFeatures.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowFeatures.cpp; sourceTree = "<group>"; };
@@ -11392,6 +11404,7 @@
BC94D1500C275C8B006BC617 /* History.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = History.cpp; sourceTree = "<group>"; };
BC94D1510C275C8B006BC617 /* History.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = History.h; sourceTree = "<group>"; };
BC94D1520C275C8B006BC617 /* History.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = History.idl; sourceTree = "<group>"; };
+ BC9585DF12F0989500755821 /* PlatformGestureEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformGestureEvent.h; sourceTree = "<group>"; };
BC96DB420F3A880E00573CB3 /* RenderBoxModelObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderBoxModelObject.h; sourceTree = "<group>"; };
BC96DB450F3A882200573CB3 /* RenderBoxModelObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderBoxModelObject.cpp; sourceTree = "<group>"; };
BC97E238109144950010D361 /* HTMLAllCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLAllCollection.h; sourceTree = "<group>"; };
@@ -11517,6 +11530,9 @@
BCE1C43F0D9830F4003B02F2 /* JSLocationCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSLocationCustom.cpp; sourceTree = "<group>"; };
BCE3BEC00D222B1D007E06E4 /* TagNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TagNodeList.cpp; sourceTree = "<group>"; };
BCE3BEC10D222B1D007E06E4 /* TagNodeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagNodeList.h; sourceTree = "<group>"; };
+ BCE4413112F748E2009B84B8 /* RenderCombineText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderCombineText.cpp; sourceTree = "<group>"; };
+ BCE4413212F748E2009B84B8 /* RenderCombineText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderCombineText.h; sourceTree = "<group>"; };
+ BCE4413512F7490B009B84B8 /* FontWidthVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontWidthVariant.h; sourceTree = "<group>"; };
BCE658FE0EA9248A007E4533 /* Theme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Theme.h; sourceTree = "<group>"; };
BCE659A80EA927B9007E4533 /* ThemeTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeTypes.h; sourceTree = "<group>"; };
BCE659E50EA92FB2007E4533 /* ThemeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeMac.h; sourceTree = "<group>"; };
@@ -11821,6 +11837,7 @@
E1284BD41044A01E00EAEB52 /* DOMPageTransitionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMPageTransitionEvent.h; sourceTree = "<group>"; };
E12EDB7A0B308A78002704B6 /* EventTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventTarget.h; sourceTree = "<group>"; };
E12EDBE90B308E0B002704B6 /* EventTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTarget.cpp; sourceTree = "<group>"; };
+ E134F5AA12EE343F004EC58D /* IntRectHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntRectHash.h; sourceTree = "<group>"; };
E13F01EA1270E10D00DFBA71 /* CookieStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CookieStorage.h; sourceTree = "<group>"; };
E13F01F01270E19000DFBA71 /* CookieStorageMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CookieStorageMac.mm; sourceTree = "<group>"; };
E15A36D61104572000B7B639 /* XMLNSNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLNSNames.h; sourceTree = "<group>"; };
@@ -11988,8 +12005,12 @@
F3D461471161D53200CA0D09 /* JSErrorHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSErrorHandler.h; sourceTree = "<group>"; };
F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorBrowserDebuggerAgent.cpp; sourceTree = "<group>"; };
F3D4C47712E07663003DA150 /* InspectorBrowserDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorBrowserDebuggerAgent.h; sourceTree = "<group>"; };
+ F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorConsoleInstrumentation.h; sourceTree = "<group>"; };
+ F3F5CF1212ED81B30084C569 /* InspectorDatabaseInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDatabaseInstrumentation.h; sourceTree = "<group>"; };
F4EAF4AC10C742B1009100D3 /* OpenTypeSanitizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenTypeSanitizer.cpp; path = opentype/OpenTypeSanitizer.cpp; sourceTree = "<group>"; };
F4EAF4AD10C742B1009100D3 /* OpenTypeSanitizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenTypeSanitizer.h; path = opentype/OpenTypeSanitizer.h; sourceTree = "<group>"; };
+ F5142C68123F12B000F5BD4C /* LocalizedNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalizedNumber.h; sourceTree = "<group>"; };
+ F5142C6A123F12C500F5BD4C /* LocalizedNumberNone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalizedNumberNone.cpp; sourceTree = "<group>"; };
F523D23B02DE4396018635CA /* HTMLDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDocument.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F523D23C02DE4396018635CA /* HTMLDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = HTMLDocument.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F523D23E02DE4396018635CA /* HTMLElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLElement.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -12967,6 +12988,8 @@
7A0E76F710BF08ED00A0276E /* InjectedScriptHost.h */,
7A0E76F810BF08ED00A0276E /* InjectedScriptHost.idl */,
7A563F9512DF5C9100F4536D /* InjectedScriptSource.js */,
+ 4F2D205312EAE7B3005C2874 /* InspectorAgent.cpp */,
+ 4F2D205212EAE7B3005C2874 /* InspectorAgent.h */,
B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */,
B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */,
F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */,
@@ -12975,12 +12998,14 @@
1C81B9580E97330800266E07 /* InspectorClient.h */,
F3335BF612E07DC300D33011 /* InspectorConsoleAgent.cpp */,
F3335BF712E07DC300D33011 /* InspectorConsoleAgent.h */,
+ F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */,
1C81B9570E97330800266E07 /* InspectorController.cpp */,
1C81B9560E97330800266E07 /* InspectorController.h */,
82AB1741124B99EC00C5069D /* InspectorCSSAgent.cpp */,
82AB1742124B99EC00C5069D /* InspectorCSSAgent.h */,
7AB0B1BE1211A62200A76940 /* InspectorDatabaseAgent.cpp */,
7AB0B1BF1211A62200A76940 /* InspectorDatabaseAgent.h */,
+ F3F5CF1212ED81B30084C569 /* InspectorDatabaseInstrumentation.h */,
41F062130F5F192600A07EAC /* InspectorDatabaseResource.cpp */,
41F062120F5F192600A07EAC /* InspectorDatabaseResource.h */,
F33F053B120B0DA500E5743A /* InspectorDebuggerAgent.cpp */,
@@ -12991,8 +13016,6 @@
7A74ECB9101839A600BF939E /* InspectorDOMStorageAgent.h */,
41F061730F5F00AC00A07EAC /* InspectorDOMStorageResource.cpp */,
41F061720F5F00AC00A07EAC /* InspectorDOMStorageResource.h */,
- 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */,
- 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */,
F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */,
F344C75711294FF600F26EEE /* InspectorFrontendClientLocal.cpp */,
F344C75211294D9D00F26EEE /* InspectorFrontendClientLocal.h */,
@@ -13007,8 +13030,6 @@
82AB1772125C826700C5069D /* InspectorResourceAgent.h */,
7AA365ED12E7265400DCA242 /* InspectorRuntimeAgent.cpp */,
7AF11A5912E727490061F23C /* InspectorRuntimeAgent.h */,
- 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */,
- 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */,
4FA3B908125CD12100300BAD /* InspectorState.cpp */,
4FA3B909125CD12200300BAD /* InspectorState.h */,
82AB176F125C826700C5069D /* InspectorStyleSheet.cpp */,
@@ -13022,7 +13043,6 @@
BCC64F5F0DCFB84E0081EF3B /* localizedStrings.js */,
F39BE95912673BF400E0A674 /* ScriptArguments.cpp */,
F39BE95A12673BF400E0A674 /* ScriptArguments.h */,
- 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */,
7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */,
416E75CA0EDF90C700360E1D /* ScriptCallFrame.cpp */,
416E75C90EDF90C700360E1D /* ScriptCallFrame.h */,
@@ -13057,21 +13077,14 @@
isa = PBXGroup;
children = (
29A812050FBB9B5200510293 /* mac */,
- 29A8120A0FBB9C1D00510293 /* AccessibilityARIAGrid.cpp */,
+ 0F29C16D1300C2E2002D794E /* AccessibilityAllInOne.cpp */,
29A812160FBB9C1D00510293 /* AccessibilityARIAGrid.h */,
- 29A812120FBB9C1D00510293 /* AccessibilityARIAGridCell.cpp */,
29A812100FBB9C1D00510293 /* AccessibilityARIAGridCell.h */,
- 29A8120F0FBB9C1D00510293 /* AccessibilityARIAGridRow.cpp */,
29A812150FBB9C1D00510293 /* AccessibilityARIAGridRow.h */,
- 29A8121C0FBB9C1D00510293 /* AccessibilityImageMapLink.cpp */,
29A8121D0FBB9C1D00510293 /* AccessibilityImageMapLink.h */,
- 29A812110FBB9C1D00510293 /* AccessibilityList.cpp */,
29A8120E0FBB9C1D00510293 /* AccessibilityList.h */,
- 29A812200FBB9C1D00510293 /* AccessibilityListBox.cpp */,
29A812250FBB9C1D00510293 /* AccessibilityListBox.h */,
- 29A8121F0FBB9C1D00510293 /* AccessibilityListBoxOption.cpp */,
29A812240FBB9C1D00510293 /* AccessibilityListBoxOption.h */,
- 07B0113C1032241900FBDC33 /* AccessibilityMediaControls.cpp */,
07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */,
76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */,
76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */,
@@ -13079,29 +13092,18 @@
76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */,
76CDD2EE1103DA6600680521 /* AccessibilityMenuListPopup.cpp */,
76CDD2EF1103DA6600680521 /* AccessibilityMenuListPopup.h */,
- 29A8121E0FBB9C1D00510293 /* AccessibilityObject.cpp */,
29A812180FBB9C1D00510293 /* AccessibilityObject.h */,
A409C982116D0DDD007197BD /* AccessibilityProgressIndicator.cpp */,
A409C983116D0DDD007197BD /* AccessibilityProgressIndicator.h */,
- 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */,
29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */,
- 93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */,
93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */,
- 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */,
29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */,
- 0709FC4B1025DED80059CDBA /* AccessibilitySlider.cpp */,
0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */,
- 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */,
29A8120D0FBB9C1D00510293 /* AccessibilityTable.h */,
- 29A8120C0FBB9C1D00510293 /* AccessibilityTableCell.cpp */,
29A812140FBB9C1D00510293 /* AccessibilityTableCell.h */,
- 29A812170FBB9C1D00510293 /* AccessibilityTableColumn.cpp */,
29A812230FBB9C1D00510293 /* AccessibilityTableColumn.h */,
- 29A812220FBB9C1D00510293 /* AccessibilityTableHeaderContainer.cpp */,
29A812210FBB9C1D00510293 /* AccessibilityTableHeaderContainer.h */,
- 29A8120B0FBB9C1D00510293 /* AccessibilityTableRow.cpp */,
29A812130FBB9C1D00510293 /* AccessibilityTableRow.h */,
- 29A812190FBB9C1D00510293 /* AXObjectCache.cpp */,
29A8121A0FBB9C1D00510293 /* AXObjectCache.h */,
);
path = accessibility;
@@ -13213,6 +13215,9 @@
4150F9ED12B6E0990008C860 /* shadow */ = {
isa = PBXGroup;
children = (
+ 4157AF7F12F1FB0400A8C6F5 /* MediaControls.cpp */,
+ 4157AF7E12F1FB0400A8C6F5 /* MediaControls.h */,
+ A7FE819B12FA677700850C1E /* ProgressBarValueElement.h */,
4150F9F012B6E0E70008C860 /* SliderThumbElement.cpp */,
4150F9EF12B6E0E70008C860 /* SliderThumbElement.h */,
);
@@ -13745,6 +13750,7 @@
6565814709D13043000E61D7 /* CSSValueKeywords.gperf */,
6565814809D13043000E61D7 /* CSSValueKeywords.h */,
E406F3FA1198304D009D59D6 /* DocTypeStrings.cpp */,
+ BC814A4112F8C34A007B2C32 /* HeaderDetection.h */,
A17C81200F2A5CF7005DAAEB /* HTMLElementFactory.cpp */,
A17C81210F2A5CF7005DAAEB /* HTMLElementFactory.h */,
A8BC04911214F69600B5F122 /* HTMLEntityTable.cpp */,
@@ -13951,12 +13957,17 @@
BC0B36A10CD3C67C00AC7EB5 /* Console.cpp */,
BC0B36A20CD3C67C00AC7EB5 /* Console.h */,
BC0B36A30CD3C67C00AC7EB5 /* Console.idl */,
+ 97C471D912F925BC0086354B /* ContentSecurityPolicy.cpp */,
+ 97C471DA12F925BD0086354B /* ContentSecurityPolicy.h */,
065AD4F20B0C2EDA005A2B1D /* ContextMenuClient.h */,
065AD4F30B0C2EDA005A2B1D /* ContextMenuController.cpp */,
065AD4F40B0C2EDA005A2B1D /* ContextMenuController.h */,
7ADE722510CBBB9B006B3B3A /* ContextMenuProvider.h */,
FE6FD4850F676E5700092873 /* Coordinates.h */,
FE6FD4860F676E5700092873 /* Coordinates.idl */,
+ 975CA287130365F800E99AD9 /* Crypto.cpp */,
+ 975CA288130365F800E99AD9 /* Crypto.h */,
+ 975CA289130365F800E99AD9 /* Crypto.idl */,
BC5A86810C33676000EEA649 /* DOMSelection.cpp */,
BC5A86820C33676000EEA649 /* DOMSelection.h */,
BC5A86830C33676000EEA649 /* DOMSelection.idl */,
@@ -14083,8 +14094,6 @@
E1271A130EEEC80400F61213 /* WorkerNavigator.cpp */,
E1271A0A0EEEC77A00F61213 /* WorkerNavigator.h */,
E1271A510EEECD1C00F61213 /* WorkerNavigator.idl */,
- 97DD4D840FDF4D6D00ECF9A4 /* XSSAuditor.cpp */,
- 97DD4D850FDF4D6E00ECF9A4 /* XSSAuditor.h */,
);
path = page;
sourceTree = "<group>";
@@ -15929,6 +15938,8 @@
977B385B122883E900B81FF8 /* HTMLScriptRunner.cpp */,
977B385C122883E900B81FF8 /* HTMLScriptRunner.h */,
977B385D122883E900B81FF8 /* HTMLScriptRunnerHost.h */,
+ 977E2DCB12F0E28300C13379 /* HTMLSourceTracker.cpp */,
+ 977E2DCC12F0E28300C13379 /* HTMLSourceTracker.h */,
97C1F552122855CB00EDE616 /* HTMLToken.h */,
977B385E122883E900B81FF8 /* HTMLTokenizer.cpp */,
977B385F122883E900B81FF8 /* HTMLTokenizer.h */,
@@ -15941,6 +15952,8 @@
97BC84821236FD93000C6161 /* TextDocumentParser.h */,
97BC84A212370DC7000C6161 /* TextViewSourceParser.cpp */,
97BC84A312370DC8000C6161 /* TextViewSourceParser.h */,
+ 977E2E0B12F0FC9C00C13379 /* XSSFilter.cpp */,
+ 977E2E0C12F0FC9C00C13379 /* XSSFilter.h */,
);
name = parser;
sourceTree = "<group>";
@@ -15966,6 +15979,9 @@
A75E8B7F0E1DE2B0007F2481 /* filters */ = {
isa = PBXGroup;
children = (
+ A1E1154713015C5D0054AC8C /* SpotLightSource.cpp */,
+ A1E1154513015C4E0054AC8C /* PointLightSource.cpp */,
+ A1E1154313015C3D0054AC8C /* DistantLightSource.cpp */,
84730D5A1248F0B300D3A9C9 /* DistantLightSource.h */,
A75E8B800E1DE2D6007F2481 /* FEBlend.cpp */,
A75E8B810E1DE2D6007F2481 /* FEBlend.h */,
@@ -17459,11 +17475,13 @@
B2C3DA580D006CD600EF6F26 /* FontFamily.cpp */,
B2C3DA590D006CD600EF6F26 /* FontFamily.h */,
72626E010EF022FE00A07E20 /* FontFastPath.cpp */,
+ 0845680712B90DA600960A9F /* FontMetrics.h */,
F7A034C3126BF6BE007DC19E /* FontOrientation.h */,
37ACCE410DA2980F0089E602 /* FontRenderingMode.h */,
B2C3DA5A0D006CD600EF6F26 /* FontSelector.h */,
37202198106213C600F25C4B /* FontSmoothingMode.h */,
3784C34A0E11AA34007D8D48 /* FontTraitsMask.h */,
+ BCE4413512F7490B009B84B8 /* FontWidthVariant.h */,
BCE04C930DAFF902007A0F41 /* GeneratedImage.cpp */,
BC23F0DA0DAFF4A4009FDC91 /* GeneratedImage.h */,
BCE04C890DAFF7A0007A0F41 /* Generator.h */,
@@ -17492,6 +17510,7 @@
E462A4A0113E71BE004A4220 /* IntPointHash.h */,
B27535450B053814002CE64F /* IntRect.cpp */,
B27535460B053814002CE64F /* IntRect.h */,
+ E134F5AA12EE343F004EC58D /* IntRectHash.h */,
B27535470B053814002CE64F /* IntSize.h */,
B27535480B053814002CE64F /* IntSizeHash.h */,
E4B41E0C0CBF90BD00AF2ECE /* MediaPlayer.cpp */,
@@ -17507,6 +17526,8 @@
A73F95FD12C97BFE0031AAF9 /* RoundedIntRect.h */,
371F4FFB0D25E7F300ECE0D5 /* SegmentedFontData.cpp */,
371F4FFA0D25E7F300ECE0D5 /* SegmentedFontData.h */,
+ 0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */,
+ 0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */,
B2C3DA530D006CD600EF6F26 /* SimpleFontData.cpp */,
B2C3DA540D006CD600EF6F26 /* SimpleFontData.h */,
B23540F00D00782E002382FA /* StringTruncator.cpp */,
@@ -17545,10 +17566,11 @@
B2C3D9F20D006C1D00EF6F26 /* BidiContext.cpp */,
B2C3D9F30D006C1D00EF6F26 /* BidiContext.h */,
B2C3D9F40D006C1D00EF6F26 /* BidiResolver.h */,
- B2C3D9F50D006C1D00EF6F26 /* CharacterNames.h */,
375CD231119D43C800A2A859 /* Hyphenation.h */,
89B5EA9F11E8003D00F2367E /* LineEnding.cpp */,
89B5EAA011E8003D00F2367E /* LineEnding.h */,
+ F5142C68123F12B000F5BD4C /* LocalizedNumber.h */,
+ F5142C6A123F12C500F5BD4C /* LocalizedNumberNone.cpp */,
BC76AC110DD7AD5C00415F34 /* ParserUtilities.h */,
B2C3D9FB0D006C1D00EF6F26 /* PlatformString.h */,
B2C3D9FC0D006C1D00EF6F26 /* RegularExpression.cpp */,
@@ -17572,6 +17594,8 @@
B2C3DA100D006C1D00EF6F26 /* TextCodecUserDefined.h */,
B2C3DA110D006C1D00EF6F26 /* TextCodecUTF16.cpp */,
B2C3DA120D006C1D00EF6F26 /* TextCodecUTF16.h */,
+ 9343CB7F12F25E510033C5EE /* TextCodecUTF8.cpp */,
+ 9343CB8012F25E510033C5EE /* TextCodecUTF8.h */,
B2C3DA150D006C1D00EF6F26 /* TextDirection.h */,
B2C3DA160D006C1D00EF6F26 /* TextEncoding.cpp */,
B2C3DA170D006C1D00EF6F26 /* TextEncoding.h */,
@@ -17728,6 +17752,7 @@
3314ACEA10892086000F0E56 /* JSExceptionBase.h */,
8F934D841189F1EE00508D5D /* JSMainThreadExecState.cpp */,
8F934D831189F1EE00508D5D /* JSMainThreadExecState.h */,
+ 9FDC8FF112FAB0060099AB1C /* JSMemoryInfoCustom.cpp */,
93B70D4F09EB0C7C009D8468 /* JSPluginElementFunctions.cpp */,
93B70D5009EB0C7C009D8468 /* JSPluginElementFunctions.h */,
14CD8D81106B529000A46D23 /* JSSharedWorkerCustom.cpp */,
@@ -18020,6 +18045,8 @@
BC124EFE0C26447A009E2349 /* JSBarInfo.h */,
BC98543B0CD3D98B00069BC1 /* JSConsole.cpp */,
BC98543C0CD3D98B00069BC1 /* JSConsole.h */,
+ 975CA29F1303679D00E99AD9 /* JSCrypto.cpp */,
+ 975CA2A01303679D00E99AD9 /* JSCrypto.h */,
BC5A86B30C3367E800EEA649 /* JSDOMSelection.cpp */,
BC5A86B40C3367E800EEA649 /* JSDOMSelection.h */,
1403BA0B09EB18C700797C7F /* JSDOMWindow.cpp */,
@@ -18275,6 +18302,7 @@
BC772C4C0C4EB3040083285F /* MIMETypeRegistry.cpp */,
BC772C4D0C4EB3040083285F /* MIMETypeRegistry.h */,
4B2708C50AF19EE40065127F /* Pasteboard.h */,
+ BC9585DF12F0989500755821 /* PlatformGestureEvent.h */,
935C476609AC4D4300A6AAB4 /* PlatformKeyboardEvent.h */,
932871BF0B20DEB70049035A /* PlatformMenuDescription.h */,
935C476709AC4D4300A6AAB4 /* PlatformMouseEvent.h */,
@@ -18323,6 +18351,7 @@
93309EA1099EB78C0056E581 /* Timer.cpp */,
9305B24C098F1B6B00C28855 /* Timer.h */,
1419D2C40CEA6F6100FF507A /* TreeShared.h */,
+ 971491D912FD65E8001BFEB1 /* URLString.h */,
2E3BBF051162DA1100B9409A /* UUID.cpp */,
2E3BBF061162DA1100B9409A /* UUID.h */,
515788C01207852C00A37C4A /* VisitedLinkStrategy.h */,
@@ -18714,6 +18743,8 @@
BCEA4825097D93020094C9E4 /* RenderBR.h */,
BCEA4826097D93020094C9E4 /* RenderButton.cpp */,
BCEA4827097D93020094C9E4 /* RenderButton.h */,
+ BCE4413112F748E2009B84B8 /* RenderCombineText.cpp */,
+ BCE4413212F748E2009B84B8 /* RenderCombineText.h */,
9392F1430AD185FE00691BD4 /* RenderCounter.cpp */,
9392F1410AD185F400691BD4 /* RenderCounter.h */,
BC77CEC70FF01CBE0070887B /* RenderDataGrid.cpp */,
@@ -18950,6 +18981,8 @@
ED2BA83B09A24B91006C0AC4 /* DocumentMarker.h */,
CE057FA31220731100A476D5 /* DocumentMarkerController.cpp */,
CE057FA41220731100A476D5 /* DocumentMarkerController.h */,
+ 14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */,
+ 14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */,
A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */,
BCCFBAE70B5152ED0001F1D7 /* DocumentParser.h */,
86D982F6125C154000AD9E3D /* DocumentTiming.h */,
@@ -19570,7 +19603,6 @@
6550B69E099DF0270090D781 /* CDATASection.h in Headers */,
514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */,
6550B6A0099DF0270090D781 /* CharacterData.h in Headers */,
- B2C3DA260D006C1D00EF6F26 /* CharacterNames.h in Headers */,
B2C3DA2A0D006C1D00EF6F26 /* CharsetData.h in Headers */,
F55B3DB21251F12D003EF269 /* CheckboxInputType.h in Headers */,
A00B721A11DE6428008AB9FF /* CheckedInt.h in Headers */,
@@ -19608,6 +19640,7 @@
A818721C0977D3C0005826D9 /* ContainerNode.h in Headers */,
E1A1470811102B1500EEC0F3 /* ContainerNodeAlgorithms.h in Headers */,
BC5EB9810E82072500B25965 /* ContentData.h in Headers */,
+ 97C471DC12F925BD0086354B /* ContentSecurityPolicy.h in Headers */,
41D015CA0F4B5C71004A662F /* ContentType.h in Headers */,
93B6A0E60B0BCA5C00F5027A /* ContextMenu.h in Headers */,
065AD4F50B0C2EDA005A2B1D /* ContextMenuClient.h in Headers */,
@@ -19745,6 +19778,7 @@
8A12E35D11FA33280025836A /* DocumentLoadTiming.h in Headers */,
ED2BA83C09A24B91006C0AC4 /* DocumentMarker.h in Headers */,
CE057FA61220731100A476D5 /* DocumentMarkerController.h in Headers */,
+ 14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */,
BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */,
0B90561A0F2578BF0095FF6A /* DocumentThreadableLoader.h in Headers */,
86D982F7125C154000AD9E3D /* DocumentTiming.h in Headers */,
@@ -20630,6 +20664,7 @@
B2C3DA680D006CD600EF6F26 /* FontFallbackList.h in Headers */,
B2C3DA6A0D006CD600EF6F26 /* FontFamily.h in Headers */,
A80E6CF30A1989CA007FB8C5 /* FontFamilyValue.h in Headers */,
+ 0845680812B90DA600960A9F /* FontMetrics.h in Headers */,
F7A034C4126BF6BE007DC19E /* FontOrientation.h in Headers */,
B5320D6B122A24E9002D1440 /* FontPlatformData.h in Headers */,
37ACCE420DA2980F0089E602 /* FontRenderingMode.h in Headers */,
@@ -20638,6 +20673,7 @@
3784C34B0E11AA34007D8D48 /* FontTraitsMask.h in Headers */,
B734B183119B991D006587BD /* FontTranscoder.h in Headers */,
A80E6CED0A1989CA007FB8C5 /* FontValue.h in Headers */,
+ BCE4413612F7490B009B84B8 /* FontWidthVariant.h in Headers */,
4A0DA2FF129B241900AB61E1 /* FormAssociatedElement.h in Headers */,
D05CED2A0A40BB2C00C5AF38 /* FormatBlockCommand.h in Headers */,
514C76700CE923A1007EF3CD /* FormData.h in Headers */,
@@ -20797,6 +20833,7 @@
977B3876122883E900B81FF8 /* HTMLScriptRunnerHost.h in Headers */,
A81369D8097374F600D74463 /* HTMLSelectElement.h in Headers */,
E44613A80CD6331000FADA75 /* HTMLSourceElement.h in Headers */,
+ 977E2DCE12F0E28300C13379 /* HTMLSourceTracker.h in Headers */,
A871DC230A15205700B12A68 /* HTMLStyleElement.h in Headers */,
A871DB2B0A150BD600B12A68 /* HTMLTableCaptionElement.h in Headers */,
A871DB2A0A150BD600B12A68 /* HTMLTableCellElement.h in Headers */,
@@ -20881,20 +20918,22 @@
93309DEE099E64920056E581 /* InsertNodeBeforeCommand.h in Headers */,
93309DF0099E64920056E581 /* InsertParagraphSeparatorCommand.h in Headers */,
93309DF2099E64920056E581 /* InsertTextCommand.h in Headers */,
+ 4F2D205412EAE7B3005C2874 /* InspectorAgent.h in Headers */,
B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */,
4F707A9A11EF679400ACDA69 /* InspectorBackendDispatcher.h in Headers */,
F3D4C47912E07663003DA150 /* InspectorBrowserDebuggerAgent.h in Headers */,
1C81B95C0E97330800266E07 /* InspectorClient.h in Headers */,
F3335BF912E07DC300D33011 /* InspectorConsoleAgent.h in Headers */,
+ F3F5CF1112ED81A80084C569 /* InspectorConsoleInstrumentation.h in Headers */,
1C81B95A0E97330800266E07 /* InspectorController.h in Headers */,
82AB1744124B99EC00C5069D /* InspectorCSSAgent.h in Headers */,
7AB0B1C11211A62200A76940 /* InspectorDatabaseAgent.h in Headers */,
+ F3F5CF1312ED81B30084C569 /* InspectorDatabaseInstrumentation.h in Headers */,
41F062140F5F192600A07EAC /* InspectorDatabaseResource.h in Headers */,
F33F053E120B0DA500E5743A /* InspectorDebuggerAgent.h in Headers */,
7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */,
7A74ECBB101839A600BF939E /* InspectorDOMStorageAgent.h in Headers */,
41F061740F5F00AC00A07EAC /* InspectorDOMStorageResource.h in Headers */,
- 3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */,
F344C7141125B82C00F26EEE /* InspectorFrontendClient.h in Headers */,
F344C75311294D9D00F26EEE /* InspectorFrontendClientLocal.h in Headers */,
7A0E770F10C00A8800A0276E /* InspectorFrontendHost.h in Headers */,
@@ -20902,7 +20941,6 @@
9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers */,
82AB1776125C826700C5069D /* InspectorResourceAgent.h in Headers */,
7AF11A5A12E727490061F23C /* InspectorRuntimeAgent.h in Headers */,
- 7A5640C012DF9E5E00F4536D /* InspectorSettings.h in Headers */,
4FA3B90B125CD12200300BAD /* InspectorState.h in Headers */,
82AB1774125C826700C5069D /* InspectorStyleSheet.h in Headers */,
754133A8102E00E800075D00 /* InspectorTimelineAgent.h in Headers */,
@@ -20915,6 +20953,7 @@
B27535720B053814002CE64F /* IntPoint.h in Headers */,
E462A4A1113E71BE004A4220 /* IntPointHash.h in Headers */,
B27535740B053814002CE64F /* IntRect.h in Headers */,
+ E134F5AB12EE343F004EC58D /* IntRectHash.h in Headers */,
B27535750B053814002CE64F /* IntSize.h in Headers */,
B27535760B053814002CE64F /* IntSizeHash.h in Headers */,
F55B3DC41251F12D003EF269 /* IsIndexInputType.h in Headers */,
@@ -21447,6 +21486,7 @@
06E81ED70AB5D5E900C87837 /* LocalCurrentGraphicsContext.h in Headers */,
89878568122CA064003AABDA /* LocalFileSystem.h in Headers */,
BC5CFCA911F793320099ED09 /* LocalizationStrategy.h in Headers */,
+ F5142C69123F12B000F5BD4C /* LocalizedNumber.h in Headers */,
935207BE09BD410A00F2038D /* LocalizedStrings.h in Headers */,
511F23180DC160DA004F0032 /* LocalStorageTask.h in Headers */,
511F231A0DC160DA004F0032 /* LocalStorageThread.h in Headers */,
@@ -21472,6 +21512,7 @@
49E911C70EF86D47009D0CAF /* MatrixTransformOperation.h in Headers */,
931BCC611124DFCB00BE70DD /* MediaCanStartListener.h in Headers */,
ABFE7E130D32FAF60066F4D2 /* MediaControlElements.h in Headers */,
+ 4157AF8012F1FB0400A8C6F5 /* MediaControls.h in Headers */,
97205AB81239291000B17380 /* MediaDocument.h in Headers */,
E44613AD0CD6331000FADA75 /* MediaError.h in Headers */,
4E1959220A39DABA00220FE5 /* MediaFeatureNames.h in Headers */,
@@ -21583,6 +21624,7 @@
499B3EDD128DB50200E726C2 /* PlatformCAAnimation.h in Headers */,
499B3EC5128CCC4700E726C2 /* PlatformCALayer.h in Headers */,
493E5E0912D6420500020081 /* PlatformCALayerClient.h in Headers */,
+ BC9585E112F0989500755821 /* PlatformGestureEvent.h in Headers */,
935C476809AC4D4300A6AAB4 /* PlatformKeyboardEvent.h in Headers */,
932871C00B20DEB70049035A /* PlatformMenuDescription.h in Headers */,
41BF70100FE86F61005E8DEC /* PlatformMessagePortChannel.h in Headers */,
@@ -21619,6 +21661,7 @@
FE80D7D10E9C1F25000D6F75 /* PositionOptions.h in Headers */,
B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */,
A8EA7EBC0A1945D000A8EF5F /* ProcessingInstruction.h in Headers */,
+ A7FE819C12FA677700850C1E /* ProgressBarValueElement.h in Headers */,
E44613EC0CD681B500FADA75 /* ProgressEvent.h in Headers */,
1A2A68240B5BEDE70002A480 /* ProgressTracker.h in Headers */,
514C76750CE923A1007EF3CD /* ProtectionSpace.h in Headers */,
@@ -21650,6 +21693,7 @@
BC96DB430F3A880E00573CB3 /* RenderBoxModelObject.h in Headers */,
BCEA4864097D93020094C9E4 /* RenderBR.h in Headers */,
BCEA4866097D93020094C9E4 /* RenderButton.h in Headers */,
+ BCE4413412F748E2009B84B8 /* RenderCombineText.h in Headers */,
9392F1420AD185F400691BD4 /* RenderCounter.h in Headers */,
BC77CEB30FF017F20070887B /* RenderDataGrid.h in Headers */,
D302754812A5FE84004BD828 /* RenderDetails.h in Headers */,
@@ -21824,6 +21868,7 @@
41C760B10EDE03D300C1655F /* ScriptState.h in Headers */,
934CC0E20ED39D6F00A658F2 /* ScriptValue.h in Headers */,
228C284510D82500009D0D0E /* ScriptWrappable.h in Headers */,
+ BC8AE34F12EA096A00EB3AE6 /* ScrollableArea.h in Headers */,
CA3BF67E10D99BAE00E6CE53 /* ScrollAnimator.h in Headers */,
BCAE1FA712939DB7004CB026 /* ScrollAnimatorMac.h in Headers */,
93F199B808245E59001E9ABC /* Scrollbar.h in Headers */,
@@ -21848,6 +21893,7 @@
93309E10099E64920056E581 /* SetNodeAttributeCommand.h in Headers */,
93F1994F08245E59001E9ABC /* Settings.h in Headers */,
498770E91242C535002226BA /* Shader.h in Headers */,
+ 0F3DD45012F5EA1B000D9190 /* ShadowBlur.h in Headers */,
BC5EB8C40E82031B00B25965 /* ShadowData.h in Headers */,
A7F338A411C0EFCA00A320A7 /* ShadowElement.h in Headers */,
A80E6CE80A1989CA007FB8C5 /* ShadowValue.h in Headers */,
@@ -22246,6 +22292,7 @@
E4AFCFA50DAF29A300F5F55C /* UnitBezier.h in Headers */,
D086FE9809D53AAB005BC74D /* UnlinkCommand.h in Headers */,
F55B3DDE1251F12D003EF269 /* URLInputType.h in Headers */,
+ 971491DA12FD65E8001BFEB1 /* URLString.h in Headers */,
656581B209D14EE6000E61D7 /* UserAgentStyleSheets.h in Headers */,
003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */,
BCACF3BD1072921A00C0C8A3 /* UserContentURLPattern.h in Headers */,
@@ -22409,8 +22456,10 @@
E1F1E8300C3C2BB9006DB391 /* XSLTExtensions.h in Headers */,
93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
- 97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
- BC8AE34F12EA096A00EB3AE6 /* ScrollableArea.h in Headers */,
+ 9343CB8212F25E510033C5EE /* TextCodecUTF8.h in Headers */,
+ 977E2E0F12F0FC9C00C13379 /* XSSFilter.h in Headers */,
+ 975CA28B130365F800E99AD9 /* Crypto.h in Headers */,
+ 975CA2A21303679D00E99AD9 /* JSCrypto.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -22523,7 +22572,6 @@
85136CA20AED665900F90A3D /* northWestResizeCursor.png in Resources */,
85136CA30AED665900F90A3D /* northWestSouthEastResizeCursor.png in Resources */,
464EA2740B8A350B00A8E6E3 /* notAllowedCursor.png in Resources */,
- 9001774212E0347800648462 /* OESStandardDerivatives.idl in Resources */,
46F9D5DF0B0D60170028EE36 /* progressCursor.png in Resources */,
85136CA40AED665900F90A3D /* southEastResizeCursor.png in Resources */,
85136CA50AED665900F90A3D /* southResizeCursor.png in Resources */,
@@ -22588,7 +22636,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
@@ -22649,7 +22697,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-inappropriate-files-in-framework ]; then\n ../Tools/Scripts/check-for-inappropriate-files-in-framework || exit $?\nfi\n";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-inappropriate-files-in-framework ]; then\n ../../Tools/Scripts/check-for-inappropriate-files-in-framework || exit $?\nfi\n";
};
933457E60EBFDF6B00B80894 /* Check For Exit Time Destructors */ = {
isa = PBXShellScriptBuildPhase;
@@ -22664,7 +22712,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
};
939D050109D9FF6B00984996 /* Check For Global Initializers */ = {
isa = PBXShellScriptBuildPhase;
@@ -22679,7 +22727,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-global-initializers ]; then\n ../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-global-initializers ]; then\n ../../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
};
DD041FBD09D9DDBE0010AF2A /* Generate Derived Sources */ = {
isa = PBXShellScriptBuildPhase;
@@ -22712,30 +22760,12 @@
files = (
B5B5DC69119BB3D5002A8790 /* AbstractDatabase.cpp in Sources */,
41E1B1D00FF5986900576B3B /* AbstractWorker.cpp in Sources */,
- 29A812280FBB9C1D00510293 /* AccessibilityARIAGrid.cpp in Sources */,
- 29A812300FBB9C1D00510293 /* AccessibilityARIAGridCell.cpp in Sources */,
- 29A8122D0FBB9C1D00510293 /* AccessibilityARIAGridRow.cpp in Sources */,
- 29A8123A0FBB9C1D00510293 /* AccessibilityImageMapLink.cpp in Sources */,
- 29A8122F0FBB9C1D00510293 /* AccessibilityList.cpp in Sources */,
- 29A8123E0FBB9C1D00510293 /* AccessibilityListBox.cpp in Sources */,
- 29A8123D0FBB9C1D00510293 /* AccessibilityListBoxOption.cpp in Sources */,
- 07B0113D1032241900FBDC33 /* AccessibilityMediaControls.cpp in Sources */,
76CDD2F21103DA6600680521 /* AccessibilityMenuList.cpp in Sources */,
76CDD2F61103DA6600680521 /* AccessibilityMenuListOption.cpp in Sources */,
76CDD2F41103DA6600680521 /* AccessibilityMenuListPopup.cpp in Sources */,
- 29A8123C0FBB9C1D00510293 /* AccessibilityObject.cpp in Sources */,
29A812480FBB9CA900510293 /* AccessibilityObjectMac.mm in Sources */,
29A8124A0FBB9CA900510293 /* AccessibilityObjectWrapper.mm in Sources */,
A409C984116D0DDD007197BD /* AccessibilityProgressIndicator.cpp in Sources */,
- 29A812260FBB9C1D00510293 /* AccessibilityRenderObject.cpp in Sources */,
- 93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */,
- 29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */,
- 0709FC4C1025DED80059CDBA /* AccessibilitySlider.cpp in Sources */,
- 29A812270FBB9C1D00510293 /* AccessibilityTable.cpp in Sources */,
- 29A8122A0FBB9C1D00510293 /* AccessibilityTableCell.cpp in Sources */,
- 29A812350FBB9C1D00510293 /* AccessibilityTableColumn.cpp in Sources */,
- 29A812400FBB9C1D00510293 /* AccessibilityTableHeaderContainer.cpp in Sources */,
- 29A812290FBB9C1D00510293 /* AccessibilityTableRow.cpp in Sources */,
B5D31DFA11CF610B009F22B4 /* ActiveDOMCallback.cpp in Sources */,
E1C4DE6E0EA75C650023CCD6 /* ActiveDOMObject.cpp in Sources */,
84D0C4041115F1D40018AA34 /* AffineTransform.cpp in Sources */,
@@ -22792,7 +22822,6 @@
514C764D0CE9234E007EF3CD /* AuthenticationMac.mm in Sources */,
51E1ECAF0C91C54600DC255B /* AutodrainedPool.mm in Sources */,
A8CFF0500A154F09000A4234 /* AutoTableLayout.cpp in Sources */,
- 29A812370FBB9C1D00510293 /* AXObjectCache.cpp in Sources */,
29A8124B0FBB9CA900510293 /* AXObjectCacheMac.mm in Sources */,
BCA8C81F11E3D36900812FB7 /* BackForwardController.cpp in Sources */,
BCA8CA5F11E4E6D100812FB7 /* BackForwardListImpl.cpp in Sources */,
@@ -22882,6 +22911,7 @@
41F0618F0F5F069800A07EAC /* ConsoleMessage.cpp in Sources */,
A818721F0977D3C0005826D9 /* ContainerNode.cpp in Sources */,
BC5EB9800E82072500B25965 /* ContentData.cpp in Sources */,
+ 97C471DB12F925BD0086354B /* ContentSecurityPolicy.cpp in Sources */,
41D015CB0F4B5C71004A662F /* ContentType.cpp in Sources */,
065AD4F60B0C2EDA005A2B1D /* ContextMenuController.cpp in Sources */,
06027CB30B1CC03D00884B2D /* ContextMenuItemMac.mm in Sources */,
@@ -22995,6 +23025,7 @@
93E227E00AF589AD00D48324 /* DocumentLoader.cpp in Sources */,
1C26497A0D7E248A00BD10F2 /* DocumentLoaderMac.cpp in Sources */,
CE057FA51220731100A476D5 /* DocumentMarkerController.cpp in Sources */,
+ 14947FFD12F80CD200A0F631 /* DocumentOrderedMap.cpp in Sources */,
A8C2280E11D4A59700D5A7D3 /* DocumentParser.cpp in Sources */,
0B9056190F2578BE0095FF6A /* DocumentThreadableLoader.cpp in Sources */,
A8185F3A09765766005826D9 /* DocumentType.cpp in Sources */,
@@ -23549,6 +23580,7 @@
977B3874122883E900B81FF8 /* HTMLScriptRunner.cpp in Sources */,
A81369D9097374F600D74463 /* HTMLSelectElement.cpp in Sources */,
E44613A70CD6331000FADA75 /* HTMLSourceElement.cpp in Sources */,
+ 977E2DCD12F0E28300C13379 /* HTMLSourceTracker.cpp in Sources */,
A871DC260A15205700B12A68 /* HTMLStyleElement.cpp in Sources */,
A871DB320A150BD600B12A68 /* HTMLTableCaptionElement.cpp in Sources */,
A871DB2E0A150BD600B12A68 /* HTMLTableCellElement.cpp in Sources */,
@@ -23622,6 +23654,7 @@
93309DED099E64920056E581 /* InsertNodeBeforeCommand.cpp in Sources */,
93309DEF099E64920056E581 /* InsertParagraphSeparatorCommand.cpp in Sources */,
93309DF1099E64920056E581 /* InsertTextCommand.cpp in Sources */,
+ 4F2D205512EAE7B3005C2874 /* InspectorAgent.cpp in Sources */,
B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */,
4F707A9911EF679400ACDA69 /* InspectorBackendDispatcher.cpp in Sources */,
F3D4C47812E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp in Sources */,
@@ -23635,7 +23668,6 @@
7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */,
7A74ECBA101839A600BF939E /* InspectorDOMStorageAgent.cpp in Sources */,
41F061750F5F00AC00A07EAC /* InspectorDOMStorageResource.cpp in Sources */,
- 3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */,
4F4F5FFB11CBD2E100A186BF /* InspectorFrontend.cpp in Sources */,
F344C75811294FF600F26EEE /* InspectorFrontendClientLocal.cpp in Sources */,
7A0E770E10C00A8800A0276E /* InspectorFrontendHost.cpp in Sources */,
@@ -23643,7 +23675,6 @@
9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in Sources */,
82AB1775125C826700C5069D /* InspectorResourceAgent.cpp in Sources */,
7AA365EE12E7265400DCA242 /* InspectorRuntimeAgent.cpp in Sources */,
- 7A5640BF12DF9E5E00F4536D /* InspectorSettings.cpp in Sources */,
4FA3B90A125CD12200300BAD /* InspectorState.cpp in Sources */,
82AB1773125C826700C5069D /* InspectorStyleSheet.cpp in Sources */,
754133AA102E00F400075D00 /* InspectorTimelineAgent.cpp in Sources */,
@@ -23993,6 +24024,7 @@
BC3C39B60C0D3D8D005F4D7A /* JSMediaList.cpp in Sources */,
D3A94A46122DC40F00A37BBC /* JSMediaQueryList.cpp in Sources */,
9FFE3EA511B5A4390037874E /* JSMemoryInfo.cpp in Sources */,
+ 9FDC8FF212FAB0060099AB1C /* JSMemoryInfoCustom.cpp in Sources */,
E107400D0E77BDC00033AF24 /* JSMessageChannel.cpp in Sources */,
E1A5F99B0E7EAA2500AF85EA /* JSMessageChannelCustom.cpp in Sources */,
75793EC80D0CE72D007FC0AC /* JSMessageEvent.cpp in Sources */,
@@ -24295,6 +24327,7 @@
7EE6846812D26E3800E79415 /* LoaderRunLoopCF.cpp in Sources */,
06E81EEC0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm in Sources */,
89878567122CA064003AABDA /* LocalFileSystem.cpp in Sources */,
+ F5142C6B123F12C500F5BD4C /* LocalizedNumberNone.cpp in Sources */,
C046E1AC1208A9FE00BA2CF7 /* LocalizedStrings.cpp in Sources */,
511F23170DC160DA004F0032 /* LocalStorageTask.cpp in Sources */,
511F23190DC160DA004F0032 /* LocalStorageThread.cpp in Sources */,
@@ -24318,6 +24351,7 @@
49D5DC2B0F423A73008F20FD /* Matrix3DTransformOperation.cpp in Sources */,
49E911C60EF86D47009D0CAF /* MatrixTransformOperation.cpp in Sources */,
ABFE7E120D32FAF60066F4D2 /* MediaControlElements.cpp in Sources */,
+ 4157AF8112F1FB0400A8C6F5 /* MediaControls.cpp in Sources */,
97205AB71239291000B17380 /* MediaDocument.cpp in Sources */,
4E1959210A39DABA00220FE5 /* MediaFeatureNames.cpp in Sources */,
A8EA80090A19516E00A8EF5F /* MediaList.cpp in Sources */,
@@ -24451,6 +24485,7 @@
BC96DB460F3A882200573CB3 /* RenderBoxModelObject.cpp in Sources */,
BCEA4863097D93020094C9E4 /* RenderBR.cpp in Sources */,
BCEA4865097D93020094C9E4 /* RenderButton.cpp in Sources */,
+ BCE4413312F748E2009B84B8 /* RenderCombineText.cpp in Sources */,
9392F1440AD185FE00691BD4 /* RenderCounter.cpp in Sources */,
BC77CEC80FF01CBE0070887B /* RenderDataGrid.cpp in Sources */,
D302754712A5FE84004BD828 /* RenderDetails.cpp in Sources */,
@@ -24599,7 +24634,6 @@
BCEC01BD0C274DAC009F4EC9 /* Screen.cpp in Sources */,
A84D82C211D3474800972990 /* ScriptableDocumentParser.cpp in Sources */,
F39BE95B12673BF400E0A674 /* ScriptArguments.cpp in Sources */,
- 200B190911C277D900DCCD3A /* ScriptBreakpoint.cpp in Sources */,
41F1D2200EF35C2A00DA8753 /* ScriptCachedFrameData.cpp in Sources */,
416E75CC0EDF90C700360E1D /* ScriptCallFrame.cpp in Sources */,
416E75BF0EDF8FD700360E1D /* ScriptCallStack.cpp in Sources */,
@@ -24618,6 +24652,7 @@
9F72305011184B4100AD0126 /* ScriptProfiler.cpp in Sources */,
4127D5370F8AAB1D00E424F5 /* ScriptState.cpp in Sources */,
934CC0E10ED39D6F00A658F2 /* ScriptValue.cpp in Sources */,
+ BC8AE34E12EA096A00EB3AE6 /* ScrollableArea.cpp in Sources */,
CA3BF67C10D99BAE00E6CE53 /* ScrollAnimator.cpp in Sources */,
BC51156E12B1749C00C96754 /* ScrollAnimatorMac.mm in Sources */,
BCAA90C30A7EBA60008B1229 /* Scrollbar.cpp in Sources */,
@@ -24640,6 +24675,7 @@
93309E0F099E64920056E581 /* SetNodeAttributeCommand.cpp in Sources */,
14C9A5EA0B3D105F005A0232 /* Settings.cpp in Sources */,
498770E81242C535002226BA /* Shader.cpp in Sources */,
+ 0F3DD44F12F5EA1B000D9190 /* ShadowBlur.cpp in Sources */,
BC5EB8C30E82031B00B25965 /* ShadowData.cpp in Sources */,
A7F338A311C0EFCA00A320A7 /* ShadowElement.cpp in Sources */,
A80E6CF40A1989CA007FB8C5 /* ShadowValue.cpp in Sources */,
@@ -25104,8 +25140,14 @@
93F19B0408245E59001E9ABC /* XSLTProcessor.cpp in Sources */,
93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */,
E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
- 97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
- BC8AE34E12EA096A00EB3AE6 /* ScrollableArea.cpp in Sources */,
+ 9343CB8112F25E510033C5EE /* TextCodecUTF8.cpp in Sources */,
+ 977E2E0E12F0FC9C00C13379 /* XSSFilter.cpp in Sources */,
+ 0F29C16E1300C2E2002D794E /* AccessibilityAllInOne.cpp in Sources */,
+ 975CA28A130365F800E99AD9 /* Crypto.cpp in Sources */,
+ 975CA2A11303679D00E99AD9 /* JSCrypto.cpp in Sources */,
+ A1E1154413015C3D0054AC8C /* DistantLightSource.cpp in Sources */,
+ A1E1154613015C4E0054AC8C /* PointLightSource.cpp in Sources */,
+ A1E1154813015C5D0054AC8C /* SpotLightSource.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h
index 00e7fbc..d2d40c1 100644
--- a/Source/WebCore/accessibility/AXObjectCache.h
+++ b/Source/WebCore/accessibility/AXObjectCache.h
@@ -34,12 +34,6 @@
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
-#ifdef __OBJC__
-@class WebCoreTextMarker;
-#else
-class WebCoreTextMarker;
-#endif
-
namespace WebCore {
class Document;
diff --git a/Source/WebCore/accessibility/AccessibilityAllInOne.cpp b/Source/WebCore/accessibility/AccessibilityAllInOne.cpp
index 1c2836e..dd7f777 100644
--- a/Source/WebCore/accessibility/AccessibilityAllInOne.cpp
+++ b/Source/WebCore/accessibility/AccessibilityAllInOne.cpp
@@ -25,22 +25,22 @@
// This all-in-one cpp file cuts down on template bloat to allow us to build our Windows release build.
-#include <AXObjectCache.cpp>
-#include <AccessibilityARIAGrid.cpp>
-#include <AccessibilityARIAGridCell.cpp>
-#include <AccessibilityARIAGridRow.cpp>
-#include <AccessibilityImageMapLink.cpp>
-#include <AccessibilityList.cpp>
-#include <AccessibilityListBox.cpp>
-#include <AccessibilityListBoxOption.cpp>
-#include <AccessibilityMediaControls.cpp>
-#include <AccessibilityObject.cpp>
-#include <AccessibilityRenderObject.cpp>
-#include <AccessibilityScrollView.cpp>
-#include <AccessibilityScrollbar.cpp>
-#include <AccessibilitySlider.cpp>
-#include <AccessibilityTable.cpp>
-#include <AccessibilityTableCell.cpp>
-#include <AccessibilityTableColumn.cpp>
-#include <AccessibilityTableHeaderContainer.cpp>
-#include <AccessibilityTableRow.cpp>
+#include "AXObjectCache.cpp"
+#include "AccessibilityARIAGrid.cpp"
+#include "AccessibilityARIAGridCell.cpp"
+#include "AccessibilityARIAGridRow.cpp"
+#include "AccessibilityImageMapLink.cpp"
+#include "AccessibilityList.cpp"
+#include "AccessibilityListBox.cpp"
+#include "AccessibilityListBoxOption.cpp"
+#include "AccessibilityMediaControls.cpp"
+#include "AccessibilityObject.cpp"
+#include "AccessibilityRenderObject.cpp"
+#include "AccessibilityScrollView.cpp"
+#include "AccessibilityScrollbar.cpp"
+#include "AccessibilitySlider.cpp"
+#include "AccessibilityTable.cpp"
+#include "AccessibilityTableCell.cpp"
+#include "AccessibilityTableColumn.cpp"
+#include "AccessibilityTableHeaderContainer.cpp"
+#include "AccessibilityTableRow.cpp"
diff --git a/Source/WebCore/accessibility/AccessibilityImageMapLink.cpp b/Source/WebCore/accessibility/AccessibilityImageMapLink.cpp
index 5676206..0844d02 100644
--- a/Source/WebCore/accessibility/AccessibilityImageMapLink.cpp
+++ b/Source/WebCore/accessibility/AccessibilityImageMapLink.cpp
@@ -133,7 +133,7 @@ IntRect AccessibilityImageMapLink::elementRect() const
if (!renderer)
return IntRect();
- return m_areaElement->getRect(renderer);
+ return m_areaElement->computeRect(renderer);
}
String AccessibilityImageMapLink::stringValueForMSAA() const
diff --git a/Source/WebCore/accessibility/AccessibilityListBox.cpp b/Source/WebCore/accessibility/AccessibilityListBox.cpp
index 191a041..81ea503 100644
--- a/Source/WebCore/accessibility/AccessibilityListBox.cpp
+++ b/Source/WebCore/accessibility/AccessibilityListBox.cpp
@@ -79,7 +79,7 @@ void AccessibilityListBox::addChildren()
for (unsigned i = 0; i < length; i++) {
// The cast to HTMLElement below is safe because the only other possible listItem type
// would be a WMLElement, but WML builds don't use accessibility features at all.
- AccessibilityObject* listOption = listBoxOptionAccessibilityObject(static_cast<HTMLElement*>(listItems[i]));
+ AccessibilityObject* listOption = listBoxOptionAccessibilityObject(toHTMLElement(listItems[i]));
if (listOption && !listOption->accessibilityIsIgnored())
m_children.append(listOption);
}
diff --git a/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp b/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp
index 515e02f..9e2ed6b 100644
--- a/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp
+++ b/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp
@@ -97,7 +97,7 @@ void AccessibilityMenuListPopup::addChildren()
for (unsigned i = 0; i < length; i++) {
// The cast to HTMLElement below is safe because the only other possible listItem type
// would be a WMLElement, but WML builds don't use accessbility features at all.
- AccessibilityMenuListOption* option = menuListOptionAccessibilityObject(static_cast<HTMLElement*>(listItems[i]));
+ AccessibilityMenuListOption* option = menuListOptionAccessibilityObject(toHTMLElement(listItems[i]));
if (option) {
option->setParent(this);
m_children.append(option);
diff --git a/Source/WebCore/accessibility/AccessibilityObject.cpp b/Source/WebCore/accessibility/AccessibilityObject.cpp
index f2a2d7d..ba03ef4 100644
--- a/Source/WebCore/accessibility/AccessibilityObject.cpp
+++ b/Source/WebCore/accessibility/AccessibilityObject.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,7 +31,6 @@
#include "AXObjectCache.h"
#include "AccessibilityRenderObject.h"
-#include "CharacterNames.h"
#include "FloatRect.h"
#include "FocusController.h"
#include "Frame.h"
@@ -53,6 +52,7 @@
#include "htmlediting.h"
#include "visible_units.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
@@ -718,6 +718,15 @@ unsigned AccessibilityObject::doAXLineForIndex(unsigned index)
{
return lineForPosition(visiblePositionForIndex(index, false));
}
+
+Document* AccessibilityObject::document() const
+{
+ FrameView* frameView = documentFrameView();
+ if (!frameView)
+ return 0;
+
+ return frameView->frame()->document();
+}
FrameView* AccessibilityObject::documentFrameView() const
{
@@ -1042,6 +1051,17 @@ AccessibilityObject* AccessibilityObject::focusedUIElement() const
return AXObjectCache::focusedUIElementForPage(page);
}
+AccessibilitySortDirection AccessibilityObject::sortDirection() const
+{
+ const AtomicString& sortAttribute = getAttribute(aria_sortAttr);
+ if (equalIgnoringCase(sortAttribute, "ascending"))
+ return SortDirectionAscending;
+ if (equalIgnoringCase(sortAttribute, "descending"))
+ return SortDirectionDescending;
+
+ return SortDirectionNone;
+}
+
bool AccessibilityObject::supportsARIAExpanded() const
{
return !getAttribute(aria_expandedAttr).isEmpty();
diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h
index c8d887b..4687cae 100644
--- a/Source/WebCore/accessibility/AccessibilityObject.h
+++ b/Source/WebCore/accessibility/AccessibilityObject.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2008 Nuanti Ltd.
*
* Redistribution and use in source and binary forms, with or without
@@ -214,6 +214,12 @@ enum AccessibilityButtonState {
ButtonStateOn,
ButtonStateMixed,
};
+
+enum AccessibilitySortDirection {
+ SortDirectionNone,
+ SortDirectionAscending,
+ SortDirectionDescending,
+};
struct VisiblePositionRange {
@@ -343,7 +349,6 @@ public:
virtual void setAccessibleName(String&) { }
virtual Node* node() const { return 0; }
- bool accessibilityShouldUseUniqueId() const { return true; }
virtual bool accessibilityIsIgnored() const { return true; }
virtual int headingLevel() const { return 0; }
@@ -366,6 +371,7 @@ public:
bool ariaIsMultiline() const;
virtual const AtomicString& invalidStatus() const;
bool supportsARIAExpanded() const;
+ AccessibilitySortDirection sortDirection() const;
// ARIA drag and drop
virtual bool supportsARIADropping() const { return false; }
@@ -436,7 +442,7 @@ public:
const String& actionVerb() const;
virtual Widget* widget() const { return 0; }
virtual Widget* widgetForAttachmentView() const { return 0; }
- virtual Document* document() const { return 0; }
+ virtual Document* document() const;
virtual FrameView* topDocumentFrameView() const { return 0; }
virtual FrameView* documentFrameView() const;
String language() const;
diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
index ca8d4a7..70ed839 100644
--- a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -32,7 +32,6 @@
#include "AXObjectCache.h"
#include "AccessibilityImageMapLink.h"
#include "AccessibilityListBox.h"
-#include "CharacterNames.h"
#include "EventNames.h"
#include "FloatRect.h"
#include "Frame.h"
@@ -77,6 +76,7 @@
#include "htmlediting.h"
#include "visible_units.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
@@ -1169,7 +1169,7 @@ static String accessibleNameForNode(Node* node)
return static_cast<HTMLInputElement*>(node)->value();
if (node->isHTMLElement()) {
- const AtomicString& alt = static_cast<HTMLElement*>(node)->getAttribute(altAttr);
+ const AtomicString& alt = toHTMLElement(node)->getAttribute(altAttr);
if (!alt.isEmpty())
return alt;
}
@@ -1357,7 +1357,7 @@ String AccessibilityRenderObject::accessibilityDescription() const
if (isImage() || isInputImage() || isNativeImage()) {
Node* node = m_renderer->node();
if (node && node->isHTMLElement()) {
- const AtomicString& alt = static_cast<HTMLElement*>(node)->getAttribute(altAttr);
+ const AtomicString& alt = toHTMLElement(node)->getAttribute(altAttr);
if (alt.isEmpty())
return String();
return alt;
@@ -1384,11 +1384,11 @@ String AccessibilityRenderObject::accessibilityDescription() const
return static_cast<HTMLFrameElementBase*>(owner)->getAttribute(nameAttr);
}
if (owner->isHTMLElement())
- return static_cast<HTMLElement*>(owner)->getAttribute(nameAttr);
+ return toHTMLElement(owner)->getAttribute(nameAttr);
}
owner = document->body();
if (owner && owner->isHTMLElement())
- return static_cast<HTMLElement*>(owner)->getAttribute(nameAttr);
+ return toHTMLElement(owner)->getAttribute(nameAttr);
}
return String();
@@ -2519,7 +2519,7 @@ IntRect AccessibilityRenderObject::boundsForVisiblePositionRange(const VisiblePo
ourrect.unite(rect2);
// if the rectangle spans lines and contains multiple text chars, use the range's bounding box intead
- if (rect1.bottom() != rect2.bottom()) {
+ if (rect1.maxY() != rect2.maxY()) {
RefPtr<Range> dataRange = makeRange(range.start, range.end);
IntRect boundingBox = dataRange->boundingBox();
String rangeString = plainText(dataRange.get());
diff --git a/Source/WebCore/accessibility/AccessibilityScrollView.cpp b/Source/WebCore/accessibility/AccessibilityScrollView.cpp
index c9dcbb6..5b94fe3 100644
--- a/Source/WebCore/accessibility/AccessibilityScrollView.cpp
+++ b/Source/WebCore/accessibility/AccessibilityScrollView.cpp
@@ -136,20 +136,20 @@ AccessibilityObject* AccessibilityScrollView::accessibilityHitTest(const IntPoin
return webArea->accessibilityHitTest(point);
}
-
-Document* AccessibilityScrollView::document() const
-{
- if (!m_scrollView->isFrameView())
- return 0;
-
- return static_cast<FrameView*>(m_scrollView.get())->frame()->document();
-}
IntRect AccessibilityScrollView::elementRect() const
{
return m_scrollView->frameRect();
}
+FrameView* AccessibilityScrollView::documentFrameView() const
+{
+ if (!m_scrollView->isFrameView())
+ return 0;
+
+ return static_cast<FrameView*>(m_scrollView.get());
+}
+
AccessibilityObject* AccessibilityScrollView::parentObject() const
{
if (!m_scrollView->isFrameView())
diff --git a/Source/WebCore/accessibility/AccessibilityScrollView.h b/Source/WebCore/accessibility/AccessibilityScrollView.h
index e32cd1c..f19bde8 100644
--- a/Source/WebCore/accessibility/AccessibilityScrollView.h
+++ b/Source/WebCore/accessibility/AccessibilityScrollView.h
@@ -47,11 +47,11 @@ private:
virtual bool isAccessibilityScrollView() const { return true; }
virtual AccessibilityObject* scrollBar(AccessibilityOrientation) const;
virtual void addChildren();
- virtual Document* document() const;
virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const;
virtual const AccessibilityChildrenVector& children();
virtual void updateChildrenIfNecessary();
+ virtual FrameView* documentFrameView() const;
virtual IntRect elementRect() const;
virtual AccessibilityObject* parentObject() const;
diff --git a/Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp b/Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
index 9772b43..c8c1951 100644
--- a/Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
+++ b/Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
@@ -105,7 +105,7 @@ void AccessibilityObject::setWrapper(AccessibilityObjectWrapper* wrapper)
bool AccessibilityObject::allowsTextRanges() const
{
- return isTextControl() || isWebArea() || isGroup() || isLink() || isHeading();
+ return isTextControl() || isWebArea() || isGroup() || isLink() || isHeading() || isListItem();
}
unsigned AccessibilityObject::getLengthForTextRange() const
diff --git a/Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp b/Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
index 7489034..8f39113 100644
--- a/Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
+++ b/Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
@@ -63,6 +63,7 @@
#include "TextEncoding.h"
#include "TextIterator.h"
#include "WebKitAccessibleHyperlink.h"
+#include "visible_units.h"
#include <atk/atk.h>
#include <glib.h>
@@ -184,7 +185,7 @@ static const gchar* webkit_accessible_get_name(AtkObject* object)
Node* node = renderObject->renderer()->node();
if (node && node->isHTMLElement()) {
// Get the attribute rather than altText String so as not to fall back on title.
- String alt = static_cast<HTMLElement*>(node)->getAttribute(HTMLNames::altAttr);
+ String alt = toHTMLElement(node)->getAttribute(HTMLNames::altAttr);
if (!alt.isEmpty())
return returnString(alt);
}
@@ -211,7 +212,7 @@ static const gchar* webkit_accessible_get_description(AtkObject* object)
// The title attribute should be reliably available as the object's descripton.
// We do not want to fall back on other attributes in its absence. See bug 25524.
- String title = static_cast<HTMLElement*>(node)->title();
+ String title = toHTMLElement(node)->title();
if (!title.isEmpty())
return returnString(title);
@@ -994,7 +995,7 @@ static gchar* utf8Substr(const gchar* string, gint start, gint end)
if (start > strLen || end > strLen)
return 0;
gchar* startPtr = g_utf8_offset_to_pointer(string, start);
- gsize lenInBytes = g_utf8_offset_to_pointer(string, end) - startPtr + 1;
+ gsize lenInBytes = g_utf8_offset_to_pointer(string, end + 1) - startPtr;
gchar* output = static_cast<gchar*>(g_malloc0(lenInBytes + 1));
return g_utf8_strncpy(output, startPtr, end - start + 1);
}
@@ -1208,8 +1209,10 @@ static gint webkit_accessible_text_get_caret_offset(AtkText* text)
// coreObject is the unignored object whose offset the caller is requesting.
// focusedObject is the object with the caret. It is likely ignored -- unless it's a link.
AccessibilityObject* coreObject = core(text);
- Node* focusedNode = coreObject->selection().end().node();
+ if (!coreObject->isAccessibilityRenderObject())
+ return 0;
+ Node* focusedNode = coreObject->selection().end().node();
if (!focusedNode)
return 0;
@@ -1221,6 +1224,14 @@ static gint webkit_accessible_text_get_caret_offset(AtkText* text)
if (!objectAndOffsetUnignored(focusedObject, offset, !coreObject->isLink()))
return 0;
+ RenderObject* renderer = toAccessibilityRenderObject(coreObject)->renderer();
+ if (renderer && renderer->isListItem()) {
+ String markerText = toRenderListItem(renderer)->markerTextWithSuffix();
+
+ // We need to adjust the offset for the list item marker.
+ offset += markerText.length();
+ }
+
// TODO: Verify this for RTL text.
return offset;
}
@@ -1230,8 +1241,8 @@ static int baselinePositionForAccessibilityRenderObject(RenderObject* renderObje
// FIXME: This implementation of baselinePosition originates from RenderObject.cpp and was
// removed in r70072. The implementation looks incorrect though, because this is not the
// baseline of the underlying RenderObject, but of the AccessibilityRenderObject.
- const Font& f = renderObject->firstLineStyle()->font();
- return f.ascent() + (renderObject->firstLineStyle()->computedLineHeight() - f.height()) / 2;
+ const FontMetrics& fontMetrics = renderObject->firstLineStyle()->fontMetrics();
+ return fontMetrics.ascent() + (renderObject->firstLineStyle()->computedLineHeight() - fontMetrics.height()) / 2;
}
static AtkAttributeSet* getAttributeSetForAccessibilityObject(const AccessibilityObject* object)
@@ -1543,7 +1554,7 @@ static void webkit_accessible_text_get_character_extents(AtkText* text, gint off
static void webkit_accessible_text_get_range_extents(AtkText* text, gint startOffset, gint endOffset, AtkCoordType coords, AtkTextRectangle* rect)
{
- IntRect extents = textExtents(text, startOffset, endOffset - startOffset + 1, coords);
+ IntRect extents = textExtents(text, startOffset, endOffset - startOffset, coords);
rect->x = extents.x();
rect->y = extents.y();
rect->width = extents.width();
@@ -1699,10 +1710,26 @@ static gboolean webkit_accessible_text_set_caret_offset(AtkText* text, gint offs
{
AccessibilityObject* coreObject = core(text);
+ if (!coreObject->isAccessibilityRenderObject())
+ return FALSE;
+
+ RenderObject* renderer = toAccessibilityRenderObject(coreObject)->renderer();
+ if (renderer && renderer->isListItem()) {
+ String markerText = toRenderListItem(renderer)->markerTextWithSuffix();
+ int markerLength = markerText.length();
+ if (offset < markerLength)
+ return FALSE;
+
+ // We need to adjust the offset for list items.
+ offset -= markerLength;
+ }
+
PlainTextRange textRange(offset, 0);
VisiblePositionRange range = coreObject->visiblePositionRangeForRange(textRange);
- coreObject->setSelectedVisiblePositionRange(range);
+ if (range.isNull())
+ return FALSE;
+ coreObject->setSelectedVisiblePositionRange(range);
return TRUE;
}
@@ -2457,8 +2484,6 @@ AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible)
AccessibilityObject* objectAndOffsetUnignored(AccessibilityObject* coreObject, int& offset, bool ignoreLinks)
{
- Node* endNode = static_cast<AccessibilityRenderObject*>(coreObject)->renderer()->node();
- int endOffset = coreObject->selection().end().computeOffsetInContainerNode();
// Indication that something bogus has transpired.
offset = -1;
@@ -2473,16 +2498,23 @@ AccessibilityObject* objectAndOffsetUnignored(AccessibilityObject* coreObject, i
if (!realObject)
return 0;
- Node* node = static_cast<AccessibilityRenderObject*>(realObject)->renderer()->node();
+ Node* node = realObject->node();
if (node) {
- RefPtr<Range> range = rangeOfContents(node);
- if (range->ownerDocument() == node->document()) {
- ExceptionCode ec = 0;
- range->setEndBefore(endNode, ec);
- if (range->boundaryPointsValid())
- offset = range->text().length() + endOffset;
+ VisiblePosition startPosition = VisiblePosition(node, 0, DOWNSTREAM);
+ VisiblePosition endPosition = realObject->selection().visibleEnd();
+
+ if (startPosition == endPosition)
+ offset = 0;
+ else if (!isStartOfLine(endPosition)) {
+ RefPtr<Range> range = makeRange(startPosition, endPosition.previous());
+ offset = TextIterator::rangeLength(range.get()) + 1;
+ } else {
+ RefPtr<Range> range = makeRange(startPosition, endPosition);
+ offset = TextIterator::rangeLength(range.get());
}
+
}
+
return realObject;
}
diff --git a/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm b/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
index 13c8ec2..e223bf4 100644
--- a/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
+++ b/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
@@ -31,7 +31,7 @@
#import "AccessibilityObject.h"
#import "AccessibilityObjectWrapper.h"
#import "RenderObject.h"
-#import "WebCoreViewFactory.h"
+#import "WebCoreSystemInterface.h"
#import <wtf/PassRefPtr.h>
@@ -127,7 +127,7 @@ void AXObjectCache::nodeTextChangePlatformNotification(AccessibilityObject*, AXT
void AXObjectCache::handleFocusedUIElementChanged(RenderObject*, RenderObject*)
{
- [[WebCoreViewFactory sharedFactory] accessibilityHandleFocusChanged];
+ wkAccessibilityHandleFocusChanged();
}
void AXObjectCache::handleScrolledToAnchor(const Node*)
diff --git a/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.h b/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
index b54d3fc..2d29e1e 100644
--- a/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
+++ b/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
@@ -29,14 +29,6 @@
#ifndef AccessibilityObjectWrapper_h
#define AccessibilityObjectWrapper_h
-#ifdef __OBJC__
-@class WebCoreTextMarker;
-@class WebCoreTextMarkerRange;
-#else
-class WebCoreTextMarker;
-class WebCoreTextMarkerRange;
-#endif
-
namespace WebCore {
class AccessibilityObject;
class VisiblePosition;
diff --git a/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
index c2e3724..8fe3a49 100644
--- a/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
+++ b/Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -61,7 +61,7 @@
#import "TextIterator.h"
#import "WebCoreFrameView.h"
#import "WebCoreObjCExtras.h"
-#import "WebCoreViewFactory.h"
+#import "WebCoreSystemInterface.h"
#import "htmlediting.h"
#import "visible_units.h"
@@ -194,7 +194,7 @@ typedef unsigned NSUInteger;
- (void)unregisterUniqueIdForUIElement
{
- [[WebCoreViewFactory sharedFactory] unregisterUniqueIdForUIElement:self];
+ wkUnregisterUniqueIdForElement(self);
}
- (void)detach
@@ -237,7 +237,52 @@ typedef unsigned NSUInteger;
return NSAccessibilityUnignoredDescendant(widget->platformWidget());
}
-static WebCoreTextMarker* textMarkerForVisiblePosition(AXObjectCache* cache, const VisiblePosition& visiblePos)
+#pragma mark SystemInterface wrappers
+
+static inline id CFAutoreleaseHelper(CFTypeRef obj)
+{
+ if (obj)
+ CFMakeCollectable(obj);
+ [(id)obj autorelease];
+ return (id)obj;
+}
+
+static inline BOOL AXObjectIsTextMarker(id obj)
+{
+ return obj != nil && CFGetTypeID(obj) == wkGetAXTextMarkerTypeID();
+}
+
+static inline BOOL AXObjectIsTextMarkerRange(id obj)
+{
+ return obj != nil && CFGetTypeID(obj) == wkGetAXTextMarkerRangeTypeID();
+}
+
+static id AXTextMarkerRange(id startMarker, id endMarker)
+{
+ ASSERT(startMarker != nil);
+ ASSERT(endMarker != nil);
+ ASSERT(CFGetTypeID(startMarker) == wkGetAXTextMarkerTypeID());
+ ASSERT(CFGetTypeID(endMarker) == wkGetAXTextMarkerTypeID());
+ return CFAutoreleaseHelper(wkCreateAXTextMarkerRange((CFTypeRef)startMarker, (CFTypeRef)endMarker));
+}
+
+static id AXTextMarkerRangeStart(id range)
+{
+ ASSERT(range != nil);
+ ASSERT(CFGetTypeID(range) == wkGetAXTextMarkerRangeTypeID());
+ return CFAutoreleaseHelper(wkCopyAXTextMarkerRangeStart(range));
+}
+
+static id AXTextMarkerRangeEnd(id range)
+{
+ ASSERT(range != nil);
+ ASSERT(CFGetTypeID(range) == wkGetAXTextMarkerRangeTypeID());
+ return CFAutoreleaseHelper(wkCopyAXTextMarkerRangeEnd(range));
+}
+
+#pragma mark Text Marker helpers
+
+static id textMarkerForVisiblePosition(AXObjectCache* cache, const VisiblePosition& visiblePos)
{
ASSERT(cache);
@@ -246,48 +291,48 @@ static WebCoreTextMarker* textMarkerForVisiblePosition(AXObjectCache* cache, con
if (!textMarkerData.axID)
return nil;
- return [[WebCoreViewFactory sharedFactory] textMarkerWithBytes:&textMarkerData length:sizeof(textMarkerData)];
+ return CFAutoreleaseHelper(wkCreateAXTextMarker(&textMarkerData, sizeof(textMarkerData)));
}
-- (WebCoreTextMarker *)textMarkerForVisiblePosition:(const VisiblePosition &)visiblePos
+- (id)textMarkerForVisiblePosition:(const VisiblePosition &)visiblePos
{
return textMarkerForVisiblePosition(m_object->axObjectCache(), visiblePos);
}
-static VisiblePosition visiblePositionForTextMarker(AXObjectCache* cache, WebCoreTextMarker* textMarker)
+static VisiblePosition visiblePositionForTextMarker(AXObjectCache* cache, CFTypeRef textMarker)
{
ASSERT(cache);
if (!textMarker)
return VisiblePosition();
TextMarkerData textMarkerData;
- if (![[WebCoreViewFactory sharedFactory] getBytes:&textMarkerData fromTextMarker:textMarker length:sizeof(textMarkerData)])
+ if (!wkGetBytesFromAXTextMarker(textMarker, &textMarkerData, sizeof(textMarkerData)))
return VisiblePosition();
return cache->visiblePositionForTextMarkerData(textMarkerData);
}
-- (VisiblePosition)visiblePositionForTextMarker:(WebCoreTextMarker *)textMarker
+- (VisiblePosition)visiblePositionForTextMarker:(id)textMarker
{
return visiblePositionForTextMarker(m_object->axObjectCache(), textMarker);
}
-static VisiblePosition visiblePositionForStartOfTextMarkerRange(AXObjectCache *cache, WebCoreTextMarkerRange* textMarkerRange)
+static VisiblePosition visiblePositionForStartOfTextMarkerRange(AXObjectCache *cache, id textMarkerRange)
{
- return visiblePositionForTextMarker(cache, [[WebCoreViewFactory sharedFactory] startOfTextMarkerRange:textMarkerRange]);
+ return visiblePositionForTextMarker(cache, AXTextMarkerRangeStart(textMarkerRange));
}
-static VisiblePosition visiblePositionForEndOfTextMarkerRange(AXObjectCache *cache, WebCoreTextMarkerRange* textMarkerRange)
+static VisiblePosition visiblePositionForEndOfTextMarkerRange(AXObjectCache *cache, id textMarkerRange)
{
- return visiblePositionForTextMarker(cache, [[WebCoreViewFactory sharedFactory] endOfTextMarkerRange:textMarkerRange]);
+ return visiblePositionForTextMarker(cache, AXTextMarkerRangeEnd(textMarkerRange));
}
-static WebCoreTextMarkerRange* textMarkerRangeFromMarkers(WebCoreTextMarker* textMarker1, WebCoreTextMarker* textMarker2)
+static id textMarkerRangeFromMarkers(id textMarker1, id textMarker2)
{
if (!textMarker1 || !textMarker2)
return nil;
- return [[WebCoreViewFactory sharedFactory] textMarkerRangeWithStart:textMarker1 end:textMarker2];
+ return AXTextMarkerRange(textMarker1, textMarker2);
}
static void AXAttributeStringSetFont(NSMutableAttributedString* attrString, NSString* attribute, NSFont* font, NSRange range)
@@ -484,7 +529,7 @@ static void AXAttributeStringSetElement(NSMutableAttributedString* attrString, N
if (!cache)
return;
- AXUIElementRef axElement = [[WebCoreViewFactory sharedFactory] AXUIElementForElement:object->wrapper()];
+ AXUIElementRef axElement = wkCreateAXUIElementRef(object->wrapper());
if (axElement) {
[attrString addAttribute:attribute value:(id)axElement range:range];
CFRelease(axElement);
@@ -543,7 +588,7 @@ static NSString* nsStringForReplacedNode(Node* replacedNode)
return [NSString stringWithCharacters:&attachmentChar length:1];
}
-- (NSAttributedString*)doAXAttributedStringForTextMarkerRange:(WebCoreTextMarkerRange*)textMarkerRange
+- (NSAttributedString*)doAXAttributedStringForTextMarkerRange:(id)textMarkerRange
{
if (!m_object)
return nil;
@@ -599,14 +644,14 @@ static NSString* nsStringForReplacedNode(Node* replacedNode)
return [attrString autorelease];
}
-static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache *cache, VisiblePosition startPosition, VisiblePosition endPosition)
+static id textMarkerRangeFromVisiblePositions(AXObjectCache *cache, VisiblePosition startPosition, VisiblePosition endPosition)
{
- WebCoreTextMarker* startTextMarker = textMarkerForVisiblePosition(cache, startPosition);
- WebCoreTextMarker* endTextMarker = textMarkerForVisiblePosition(cache, endPosition);
+ id startTextMarker = textMarkerForVisiblePosition(cache, startPosition);
+ id endTextMarker = textMarkerForVisiblePosition(cache, endPosition);
return textMarkerRangeFromMarkers(startTextMarker, endTextMarker);
}
-- (WebCoreTextMarkerRange *)textMarkerRangeFromVisiblePositions:(VisiblePosition)startPosition endPosition:(VisiblePosition)endPosition
+- (id)textMarkerRangeFromVisiblePositions:(VisiblePosition)startPosition endPosition:(VisiblePosition)endPosition
{
return textMarkerRangeFromVisiblePositions(m_object->axObjectCache(), startPosition, endPosition);
}
@@ -664,6 +709,9 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
[additional addObject:NSAccessibilityARIALiveAttribute];
[additional addObject:NSAccessibilityARIARelevantAttribute];
}
+
+ if (m_object->sortDirection() != SortDirectionNone)
+ [additional addObject:NSAccessibilitySortDirectionAttribute];
// If an object is a child of a live region, then add these
if (m_object->isInsideARIALiveRegion()) {
@@ -1035,7 +1083,7 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
return objectAttributes;
}
-- (VisiblePositionRange)visiblePositionRangeForTextMarkerRange:(WebCoreTextMarkerRange*) textMarkerRange
+- (VisiblePositionRange)visiblePositionRangeForTextMarkerRange:(id)textMarkerRange
{
if (!textMarkerRange)
return VisiblePositionRange();
@@ -1089,7 +1137,7 @@ static NSMutableArray* convertToNSArray(const AccessibilityObject::Accessibility
return array;
}
-- (WebCoreTextMarkerRange*)textMarkerRangeForSelection
+- (id)textMarkerRangeForSelection
{
VisibleSelection selection = m_object->selection();
if (selection.isNone())
@@ -1125,7 +1173,7 @@ static NSMutableArray* convertToNSArray(const AccessibilityObject::Accessibility
point.y = screenHeight - (point.y + remotePosition.y + rect.height() - scrollPosition.y);
} else {
// The Cocoa accessibility API wants the lower-left corner.
- point = NSMakePoint(rect.x(), rect.bottom());
+ point = NSMakePoint(rect.x(), rect.maxY());
if (frameView) {
NSView* view = frameView->documentView();
@@ -1976,6 +2024,17 @@ static NSString* roleValueToNSString(AccessibilityRole value)
return nil;
}
+ if ([attributeName isEqualToString:NSAccessibilitySortDirectionAttribute]) {
+ switch (m_object->sortDirection()) {
+ case SortDirectionAscending:
+ return NSAccessibilityAscendingSortDirectionValue;
+ case SortDirectionDescending:
+ return NSAccessibilityDescendingSortDirectionValue;
+ default:
+ return NSAccessibilityUnknownSortDirectionValue;
+ }
+ }
+
if ([attributeName isEqualToString:NSAccessibilityLanguageAttribute])
return m_object->language();
@@ -2312,15 +2371,15 @@ static NSString* roleValueToNSString(AccessibilityRole value)
if (![self updateObjectBackingStore])
return;
- WebCoreTextMarkerRange* textMarkerRange = nil;
+ id textMarkerRange = nil;
NSNumber* number = nil;
NSString* string = nil;
NSRange range = {0, 0};
NSArray* array = nil;
// decode the parameter
- if ([[WebCoreViewFactory sharedFactory] objectIsTextMarkerRange:value])
- textMarkerRange = (WebCoreTextMarkerRange*) value;
+ if (AXObjectIsTextMarkerRange(value))
+ textMarkerRange = value;
else if ([value isKindOfClass:[NSNumber self]])
number = value;
@@ -2429,8 +2488,8 @@ static RenderObject* rendererForView(NSView* view)
- (id)accessibilityAttributeValue:(NSString*)attribute forParameter:(id)parameter
{
- WebCoreTextMarker* textMarker = nil;
- WebCoreTextMarkerRange* textMarkerRange = nil;
+ id textMarker = nil;
+ id textMarkerRange = nil;
NSNumber* number = nil;
NSArray* array = nil;
RefPtr<AccessibilityObject> uiElement = 0;
@@ -2449,11 +2508,11 @@ static RenderObject* rendererForView(NSView* view)
// common parameter type check/casting. Nil checks in handlers catch wrong type case.
// NOTE: This assumes nil is not a valid parameter, because it is indistinguishable from
// a parameter of the wrong type.
- if ([[WebCoreViewFactory sharedFactory] objectIsTextMarker:parameter])
- textMarker = (WebCoreTextMarker*) parameter;
+ if (AXObjectIsTextMarker(parameter))
+ textMarker = parameter;
- else if ([[WebCoreViewFactory sharedFactory] objectIsTextMarkerRange:parameter])
- textMarkerRange = (WebCoreTextMarkerRange*) parameter;
+ else if (AXObjectIsTextMarkerRange(parameter))
+ textMarkerRange = parameter;
else if ([parameter isKindOfClass:[AccessibilityObjectWrapper self]])
uiElement = [(AccessibilityObjectWrapper*)parameter accessibilityObject];
@@ -2540,10 +2599,9 @@ static RenderObject* rendererForView(NSView* view)
if ([array count] < 2)
return nil;
- WebCoreTextMarker* textMarker1 = (WebCoreTextMarker*) [array objectAtIndex:0];
- WebCoreTextMarker* textMarker2 = (WebCoreTextMarker*) [array objectAtIndex:1];
- if (![[WebCoreViewFactory sharedFactory] objectIsTextMarker:textMarker1]
- || ![[WebCoreViewFactory sharedFactory] objectIsTextMarker:textMarker2])
+ id textMarker1 = [array objectAtIndex:0];
+ id textMarker2 = [array objectAtIndex:1];
+ if (!AXObjectIsTextMarker(textMarker1) || !AXObjectIsTextMarker(textMarker2))
return nil;
VisiblePosition visiblePos1 = [self visiblePositionForTextMarker:(textMarker1)];
@@ -2731,9 +2789,15 @@ static RenderObject* rendererForView(NSView* view)
return [super accessibilityAttributeValue:attribute forParameter:parameter];
}
+- (BOOL)accessibilitySupportsOverriddenAttributes
+{
+ return YES;
+}
+
- (BOOL)accessibilityShouldUseUniqueId
{
- return m_object->accessibilityShouldUseUniqueId();
+ // All AX object wrappers should use unique ID's because it's faster within AppKit to look them up.
+ return YES;
}
// API that AppKit uses for faster access
diff --git a/Source/WebCore/bindings/ScriptControllerBase.cpp b/Source/WebCore/bindings/ScriptControllerBase.cpp
index a77ff9c..e128d11 100644
--- a/Source/WebCore/bindings/ScriptControllerBase.cpp
+++ b/Source/WebCore/bindings/ScriptControllerBase.cpp
@@ -27,7 +27,6 @@
#include "ScriptSourceCode.h"
#include "ScriptValue.h"
#include "Settings.h"
-#include "XSSAuditor.h"
namespace WebCore {
@@ -44,12 +43,12 @@ bool ScriptController::canExecuteScripts(ReasonForCallingCanExecuteScripts reaso
return allowed;
}
-ScriptValue ScriptController::executeScript(const String& script, bool forceUserGesture, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::executeScript(const String& script, bool forceUserGesture)
{
- return executeScript(ScriptSourceCode(script, forceUserGesture ? KURL() : m_frame->document()->url()), shouldAllowXSS);
+ return executeScript(ScriptSourceCode(script, forceUserGesture ? KURL() : m_frame->document()->url()));
}
-ScriptValue ScriptController::executeScript(const ScriptSourceCode& sourceCode, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::executeScript(const ScriptSourceCode& sourceCode)
{
if (!canExecuteScripts(AboutToExecuteScript) || isPaused())
return ScriptValue();
@@ -57,7 +56,7 @@ ScriptValue ScriptController::executeScript(const ScriptSourceCode& sourceCode,
bool wasInExecuteScript = m_inExecuteScript;
m_inExecuteScript = true;
- ScriptValue result = evaluate(sourceCode, shouldAllowXSS);
+ ScriptValue result = evaluate(sourceCode);
if (!wasInExecuteScript) {
m_inExecuteScript = false;
@@ -88,9 +87,7 @@ bool ScriptController::executeIfJavaScriptURL(const KURL& url, ShouldReplaceDocu
const int javascriptSchemeLength = sizeof("javascript:") - 1;
String decodedURL = decodeURLEscapeSequences(url.string());
- ScriptValue result;
- if (xssAuditor()->canEvaluateJavaScriptURL(decodedURL))
- result = executeScript(decodedURL.substring(javascriptSchemeLength), processingUserGesture(), AllowXSS);
+ ScriptValue result = executeScript(decodedURL.substring(javascriptSchemeLength), false);
// If executing script caused this frame to be removed from the page, we
// don't want to try to replace its document!
@@ -112,7 +109,7 @@ bool ScriptController::executeIfJavaScriptURL(const KURL& url, ShouldReplaceDocu
// synchronously can cause crashes:
// http://bugs.webkit.org/show_bug.cgi?id=16782
if (shouldReplaceDocumentIfJavaScriptURL == ReplaceDocumentIfJavaScriptURL)
- m_frame->loader()->writer()->replaceDocument(scriptResult);
+ m_frame->document()->loader()->writer()->replaceDocument(scriptResult);
return true;
}
diff --git a/Source/WebCore/bindings/ScriptControllerBase.h b/Source/WebCore/bindings/ScriptControllerBase.h
index ed6ca62..489c8a8 100644
--- a/Source/WebCore/bindings/ScriptControllerBase.h
+++ b/Source/WebCore/bindings/ScriptControllerBase.h
@@ -37,12 +37,6 @@ enum ReasonForCallingCanExecuteScripts {
NotAboutToExecuteScript
};
-// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine.
-enum ShouldAllowXSS {
- AllowXSS,
- DoNotAllowXSS
-};
-
-} // namespace WebCore
+}
-#endif // ScriptControllerBase_h
+#endif
diff --git a/Source/WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp b/Source/WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp
index d608b0f..d12f824 100644
--- a/Source/WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp
+++ b/Source/WebCore/bindings/cpp/WebDOMHTMLDocumentCustom.cpp
@@ -20,18 +20,17 @@
#include "config.h"
#include "WebDOMHTMLDocument.h"
-#include "CharacterNames.h"
#include "HTMLDocument.h"
#include "SegmentedString.h"
#include "WebExceptionHandler.h"
-
#include <wtf/Forward.h>
+#include <wtf/unicode/CharacterNames.h>
static inline void documentWrite(const WebDOMString& text, WebCore::HTMLDocument* document, bool addNewline)
{
WebCore::SegmentedString segmentedString = WTF::String(text);
if (addNewline)
- segmentedString.append(WebCore::SegmentedString(WTF::String(&WebCore::newlineCharacter)));
+ segmentedString.append(WebCore::SegmentedString(WTF::String(&WTF::Unicode::newlineCharacter)));
document->write(segmentedString);
}
diff --git a/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp b/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
index dadcc1c..14e4ac8 100644
--- a/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
+++ b/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
@@ -69,6 +69,15 @@ bool RuntimeEnabledFeatures::fileSystemEnabled()
}
#endif
+#if ENABLE(JAVASCRIPT_I18N_API)
+bool RuntimeEnabledFeatures::isJavaScriptI18NAPIEnabled = false;
+
+bool RuntimeEnabledFeatures::javaScriptI18NAPIEnabled()
+{
+ return isJavaScriptI18NAPIEnabled;
+}
+#endif
+
#if ENABLE(VIDEO)
bool RuntimeEnabledFeatures::audioEnabled()
diff --git a/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h b/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h
index c1b9b8a..4f9a21e 100644
--- a/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h
+++ b/Source/WebCore/bindings/generic/RuntimeEnabledFeatures.h
@@ -97,17 +97,8 @@ public:
static bool webkitAudioContextEnabled() { return isWebAudioEnabled; }
#endif
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
static void setWebGLEnabled(bool isEnabled) { isWebGLEnabled = isEnabled; }
- static bool arrayBufferEnabled() { return isWebGLEnabled; }
- static bool int8ArrayEnabled() { return isWebGLEnabled; }
- static bool uint8ArrayEnabled() { return isWebGLEnabled; }
- static bool int16ArrayEnabled() { return isWebGLEnabled; }
- static bool uint16ArrayEnabled() { return isWebGLEnabled; }
- static bool int32ArrayEnabled() { return isWebGLEnabled; }
- static bool uint32ArrayEnabled() { return isWebGLEnabled; }
- static bool float32ArrayEnabled() { return isWebGLEnabled; }
- static bool dataViewEnabled() { return isWebGLEnabled; }
static bool webGLRenderingContextEnabled() { return isWebGLEnabled; }
static bool webGLArrayBufferEnabled() { return isWebGLEnabled; }
static bool webGLByteArrayEnabled() { return isWebGLEnabled; }
@@ -169,6 +160,11 @@ public:
static void setFileSystemEnabled(bool isEnabled) { isFileSystemEnabled = isEnabled; }
#endif
+#if ENABLE(JAVASCRIPT_I18N_API)
+ static bool javaScriptI18NAPIEnabled();
+ static void setJavaScriptI18NAPIEnabled(bool isEnabled) { isJavaScriptI18NAPIEnabled = isEnabled; }
+#endif
+
private:
// Never instantiate.
RuntimeEnabledFeatures() { }
@@ -193,6 +189,10 @@ private:
#if ENABLE(FILE_SYSTEM)
static bool isFileSystemEnabled;
#endif
+
+#if ENABLE(JAVASCRIPT_I18N_API)
+ static bool isJavaScriptI18NAPIEnabled;
+#endif
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/gobject/GNUmakefile.am b/Source/WebCore/bindings/gobject/GNUmakefile.am
index 4067dbc..881f45a 100644
--- a/Source/WebCore/bindings/gobject/GNUmakefile.am
+++ b/Source/WebCore/bindings/gobject/GNUmakefile.am
@@ -395,10 +395,13 @@ endif
if ENABLE_VIDEO
webkitgtk_built_h_api += \
- $(top_builddir)/DerivedSources/webkit/WebKitDOMHTMLAudioElement.h
+ $(top_builddir)/DerivedSources/webkit/WebKitDOMHTMLAudioElement.h \
+ $(top_builddir)/DerivedSources/webkit/WebKitDOMHTMLVideoElement.h
webkitgtk_gdom_built_sources += \
DerivedSources/webkit/WebKitDOMHTMLAudioElement.cpp \
- DerivedSources/webkit/WebKitDOMHTMLAudioElementPrivate.h
+ DerivedSources/webkit/WebKitDOMHTMLAudioElementPrivate.h \
+ DerivedSources/webkit/WebKitDOMHTMLVideoElement.cpp \
+ DerivedSources/webkit/WebKitDOMHTMLVideoElementPrivate.h
endif
gdom_class_list := $(subst WebKitDOM,, $(filter-out %Private, $(basename $(notdir $(webkitgtk_gdom_built_sources)))))
@@ -424,7 +427,8 @@ $(top_builddir)/DerivedSources/webkit/WebKitDOMEventTargetPrivate.h: $(WebCore)/
$(AM_V_GEN)cp -f $< $@
# Filter out SVG for now
-gdom_feature_defines := $(filter-out ENABLE-SVG%, $(FEATURE_DEFINES))
-DerivedSources/webkit/WebKitDOM%.cpp DerivedSources/webkit/WebKitDOM%.h DerivedSources/webkit/WebKitDOM%Private.h:: %.idl $(SCRIPTS_BINDINGS) $(WebCore)/bindings/scripts/CodeGeneratorGObject.pm
+gdom_feature_defines := $(filter-out ENABLE_INDEXED_DATABASE=1, $(filter-out ENABLE_SVG%, $(FEATURE_DEFINES)))
+DerivedSources/webkit/WebKitDOM%.cpp DerivedSources/webkit/WebKitDOM%.h DerivedSources/webkit/WebKitDOM%Private.h:: %.idl $(SCRIPTS_BINDINGS) $(WebCore)/bindings/scripts/CodeGeneratorGObject.pm $(WebCore)/bindings/gobject/GNUmakefile.am
+ echo $(gdom_feature_defines)
$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl --include $(WebCore)/dom --include $(WebCore)/html --include $(WebCore)/css --include $(WebCore)/page --include $(WebCore)/xml --include $(WebCore)/svg --outputDir "$(GENSOURCES_WEBKIT)" --defines "LANGUAGE_GOBJECT=1 $(gdom_feature_defines)" --generator GObject $<
diff --git a/Source/WebCore/bindings/gobject/WebKitDOMBinding.cpp b/Source/WebCore/bindings/gobject/WebKitDOMBinding.cpp
index a9b0897..aff3434 100644
--- a/Source/WebCore/bindings/gobject/WebKitDOMBinding.cpp
+++ b/Source/WebCore/bindings/gobject/WebKitDOMBinding.cpp
@@ -57,7 +57,7 @@ static gpointer createWrapper(Node* node)
switch (node->nodeType()) {
case Node::ELEMENT_NODE:
if (node->isHTMLElement())
- wrappedNode = createHTMLElementWrapper(static_cast<HTMLElement*>(node));
+ wrappedNode = createHTMLElementWrapper(toHTMLElement(node));
else
wrappedNode = wrapElement(static_cast<Element*>(node));
break;
@@ -93,7 +93,7 @@ WebKitDOMElement* kit(Element* element)
gpointer wrappedElement;
if (element->isHTMLElement())
- wrappedElement = createHTMLElementWrapper(static_cast<HTMLElement*>(element));
+ wrappedElement = createHTMLElementWrapper(toHTMLElement(element));
else
wrappedElement = wrapElement(element);
diff --git a/Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp b/Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp
index 3ac13d1..0a869fd 100644
--- a/Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp
+++ b/Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp
@@ -93,6 +93,7 @@
#include "HTMLTextAreaElement.h"
#include "HTMLTitleElement.h"
#include "HTMLUListElement.h"
+#include "HTMLVideoElement.h"
#include "webkit/WebKitDOMHTMLAnchorElementPrivate.h"
#include "webkit/WebKitDOMHTMLAppletElementPrivate.h"
@@ -156,6 +157,7 @@
#if ENABLE(VIDEO)
#include "webkit/WebKitDOMHTMLAudioElementPrivate.h"
+#include "webkit/WebKitDOMHTMLVideoElementPrivate.h"
#endif
#include <wtf/text/CString.h>
@@ -187,6 +189,11 @@ static gpointer createAudioWrapper(PassRefPtr<HTMLElement> element)
{
return wrapHTMLAudioElement(static_cast<HTMLAudioElement*>(element.get()));
}
+
+static gpointer createVideoWrapper(PassRefPtr<HTMLElement> element)
+{
+ return wrapHTMLVideoElement(static_cast<HTMLVideoElement*>(element.get()));
+}
#endif
static gpointer createBaseWrapper(PassRefPtr<HTMLElement> element)
@@ -467,6 +474,7 @@ gpointer createHTMLElementWrapper(PassRefPtr<WebCore::HTMLElement> element)
map.set(appletTag.localName().impl(), createAppletWrapper);
#if ENABLE(VIDEO)
map.set(audioTag.localName().impl(), createAudioWrapper);
+ map.set(videoTag.localName().impl(), createVideoWrapper);
#endif
map.set(areaTag.localName().impl(), createAreaWrapper);
map.set(baseTag.localName().impl(), createBaseWrapper);
diff --git a/Source/WebCore/bindings/js/CachedScriptSourceProvider.h b/Source/WebCore/bindings/js/CachedScriptSourceProvider.h
index 9bae8ca..8f63a69 100644
--- a/Source/WebCore/bindings/js/CachedScriptSourceProvider.h
+++ b/Source/WebCore/bindings/js/CachedScriptSourceProvider.h
@@ -57,7 +57,7 @@ namespace WebCore {
private:
CachedScriptSourceProvider(CachedScript* cachedScript)
- : ScriptSourceProvider(stringToUString(cachedScript->url()), cachedScript->sourceProviderCache())
+ : ScriptSourceProvider(stringToUString(cachedScript->response().url()), cachedScript->sourceProviderCache())
, m_cachedScript(cachedScript)
{
m_cachedScript->addClient(this);
diff --git a/Source/WebCore/bindings/js/DOMWrapperWorld.h b/Source/WebCore/bindings/js/DOMWrapperWorld.h
index 5e7b551..9825a08 100644
--- a/Source/WebCore/bindings/js/DOMWrapperWorld.h
+++ b/Source/WebCore/bindings/js/DOMWrapperWorld.h
@@ -32,8 +32,8 @@ namespace WebCore {
class ScriptController;
-typedef JSC::WeakGCMap<void*, DOMObject*> DOMObjectWrapperMap;
-typedef JSC::WeakGCMap<StringImpl*, JSC::JSString*> JSStringCache;
+typedef JSC::WeakGCMap<void*, DOMObject> DOMObjectWrapperMap;
+typedef JSC::WeakGCMap<StringImpl*, JSC::JSString> JSStringCache;
class DOMWrapperWorld : public RefCounted<DOMWrapperWorld> {
public:
@@ -58,6 +58,8 @@ public:
bool isNormal() const { return m_isNormal; }
+ JSC::JSGlobalData* globalData() const { return m_globalData; }
+
protected:
DOMWrapperWorld(JSC::JSGlobalData*, bool isNormal);
diff --git a/Source/WebCore/bindings/js/JSArrayBufferCustom.cpp b/Source/WebCore/bindings/js/JSArrayBufferCustom.cpp
index 68edc5c..52332c9 100644
--- a/Source/WebCore/bindings/js/JSArrayBufferCustom.cpp
+++ b/Source/WebCore/bindings/js/JSArrayBufferCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSArrayBuffer.h"
#include "ArrayBuffer.h"
@@ -53,5 +50,3 @@ EncodedJSValue JSC_HOST_CALL JSArrayBufferConstructor::constructJSArrayBuffer(Ex
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSArrayBufferViewHelper.h b/Source/WebCore/bindings/js/JSArrayBufferViewHelper.h
index 73229da..a7ef436 100644
--- a/Source/WebCore/bindings/js/JSArrayBufferViewHelper.h
+++ b/Source/WebCore/bindings/js/JSArrayBufferViewHelper.h
@@ -137,7 +137,7 @@ PassRefPtr<C> constructArrayBufferView(JSC::ExecState* exec)
// JavaScript DOM bindings can distinguish between "new
// <Type>Array()" and what occurs when a previously-constructed
// ArrayBufferView is returned to JavaScript; e.g., from
- // "array.slice()".
+ // "array.subset()".
if (exec->argumentCount() < 1)
return C::create(0);
diff --git a/Source/WebCore/bindings/js/JSAudioConstructor.cpp b/Source/WebCore/bindings/js/JSAudioConstructor.cpp
index 1ea5ae4..c19d795 100644
--- a/Source/WebCore/bindings/js/JSAudioConstructor.cpp
+++ b/Source/WebCore/bindings/js/JSAudioConstructor.cpp
@@ -42,8 +42,8 @@ const ClassInfo JSAudioConstructor::s_info = { "AudioConstructor", 0, 0, 0 };
JSAudioConstructor::JSAudioConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
: DOMConstructorWithDocument(JSAudioConstructor::createStructure(globalObject->objectPrototype()), globalObject)
{
- putDirect(exec->propertyNames().prototype, JSHTMLAudioElementPrototype::self(exec, globalObject), None);
- putDirect(exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLAudioElementPrototype::self(exec, globalObject), None);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontDelete | DontEnum);
}
static EncodedJSValue JSC_HOST_CALL constructAudio(ExecState* exec)
diff --git a/Source/WebCore/bindings/js/JSAudioContextCustom.cpp b/Source/WebCore/bindings/js/JSAudioContextCustom.cpp
index 04644bc..382d0cb 100644
--- a/Source/WebCore/bindings/js/JSAudioContextCustom.cpp
+++ b/Source/WebCore/bindings/js/JSAudioContextCustom.cpp
@@ -28,12 +28,18 @@
#include "AudioContext.h"
+#include "ArrayBuffer.h"
+#include "AudioBuffer.h"
+#include "JSArrayBuffer.h"
+#include "JSAudioBuffer.h"
#include "JSAudioContext.h"
#include <runtime/Error.h>
+using namespace JSC;
+
namespace WebCore {
-JSC::EncodedJSValue JSC_HOST_CALL JSAudioContextConstructor::constructJSAudioContext(JSC::ExecState* exec)
+EncodedJSValue JSC_HOST_CALL JSAudioContextConstructor::constructJSAudioContext(ExecState* exec)
{
JSAudioContextConstructor* jsConstructor = static_cast<JSAudioContextConstructor*>(exec->callee());
if (!jsConstructor)
@@ -49,7 +55,48 @@ JSC::EncodedJSValue JSC_HOST_CALL JSAudioContextConstructor::constructJSAudioCon
Document* document = static_cast<Document*>(scriptExecutionContext);
RefPtr<AudioContext> context = AudioContext::create(document);
- return JSC::JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), context.get())));
+ return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), context.get())));
+}
+
+JSValue JSAudioContext::createBuffer(ExecState* exec)
+{
+ if (exec->argumentCount() < 2)
+ return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
+
+ AudioContext* audioContext = static_cast<AudioContext*>(impl());
+ ASSERT(audioContext);
+
+ // AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono);
+ JSValue val = exec->argument(0);
+ if (val.inherits(&JSArrayBuffer::s_info)) {
+ ArrayBuffer* arrayBuffer = toArrayBuffer(val);
+ ASSERT(arrayBuffer);
+ if (arrayBuffer) {
+ bool mixToMono = exec->argument(1).toBoolean(exec);
+
+ RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(arrayBuffer, mixToMono);
+ if (!audioBuffer.get())
+ return throwError(exec, createSyntaxError(exec, "Error decoding audio file data"));
+
+ return toJS(exec, globalObject(), audioBuffer.get());
+ }
+
+ return jsUndefined();
+ }
+
+ // AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
+ if (exec->argumentCount() < 3)
+ return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
+
+ unsigned numberOfChannels = exec->argument(0).toInt32(exec);
+ unsigned numberOfFrames = exec->argument(1).toInt32(exec);
+ float sampleRate = exec->argument(2).toFloat(exec);
+
+ RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+ if (!audioBuffer.get())
+ return throwError(exec, createSyntaxError(exec, "Error creating AudioBuffer"));
+
+ return toJS(exec, globalObject(), audioBuffer.get());
}
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp b/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
index af74e8c..7c5edc6 100644
--- a/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -28,6 +28,7 @@
#include "DOMObjectHashTableMap.cpp"
#include "DOMWrapperWorld.cpp"
#include "GCController.cpp"
+#include "JSArrayBufferCustom.cpp"
#include "JSAttrCustom.cpp"
#include "JSAudioConstructor.cpp"
#include "JSCDATASectionCustom.cpp"
@@ -65,6 +66,7 @@
#include "JSDOMWrapper.cpp"
#include "JSDataGridColumnListCustom.cpp"
#include "JSDataGridDataSource.cpp"
+#include "JSDataViewCustom.cpp"
#include "JSDebugWrapperSet.cpp"
#include "JSDedicatedWorkerContextCustom.cpp"
#include "JSDesktopNotificationsCustom.cpp"
@@ -77,6 +79,7 @@
#include "JSEventSourceCustom.cpp"
#include "JSEventTarget.cpp"
#include "JSExceptionBase.cpp"
+#include "JSFloat32ArrayCustom.cpp"
#include "JSGeolocationCustom.cpp"
#include "JSHTMLAllCollectionCustom.cpp"
#include "JSHTMLAppletElementCustom.cpp"
@@ -101,10 +104,14 @@
#include "JSImageDataCustom.cpp"
#include "JSInjectedScriptHostCustom.cpp"
#include "JSInspectorFrontendHostCustom.cpp"
+#include "JSInt16ArrayCustom.cpp"
+#include "JSInt32ArrayCustom.cpp"
+#include "JSInt8ArrayCustom.cpp"
#include "JSJavaScriptCallFrameCustom.cpp"
#include "JSLazyEventListener.cpp"
#include "JSLocationCustom.cpp"
#include "JSMainThreadExecState.cpp"
+#include "JSMemoryInfoCustom.cpp"
#include "JSMessageChannelCustom.cpp"
#include "JSMessageEventCustom.cpp"
#include "JSMessagePortCustom.cpp"
@@ -133,6 +140,9 @@
#include "JSTouchCustom.cpp"
#include "JSTouchListCustom.cpp"
#include "JSTreeWalkerCustom.cpp"
+#include "JSUint16ArrayCustom.cpp"
+#include "JSUint32ArrayCustom.cpp"
+#include "JSUint8ArrayCustom.cpp"
#include "JSWebKitCSSKeyframeRuleCustom.cpp"
#include "JSWebKitCSSKeyframesRuleCustom.cpp"
#include "JSWebKitCSSMatrixCustom.cpp"
diff --git a/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp b/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp
index df24eb7..cab7ba3 100644
--- a/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp
+++ b/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp
@@ -28,7 +28,7 @@
#include "CanvasRenderingContext2D.h"
#include "JSCanvasRenderingContext2D.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLRenderingContext.h"
#include "JSWebGLRenderingContext.h"
#endif
@@ -42,7 +42,7 @@ JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, CanvasR
if (!object)
return jsUndefined();
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
if (object->is3d())
return getDOMObjectWrapper<JSWebGLRenderingContext>(exec, globalObject, static_cast<WebGLRenderingContext*>(object));
#endif
diff --git a/Source/WebCore/bindings/js/JSDOMBinding.cpp b/Source/WebCore/bindings/js/JSDOMBinding.cpp
index e53dcfb..7de2719 100644
--- a/Source/WebCore/bindings/js/JSDOMBinding.cpp
+++ b/Source/WebCore/bindings/js/JSDOMBinding.cpp
@@ -335,9 +335,9 @@ void markDOMNodesForDocument(MarkStack& markStack, Document* document)
JSWrapperCache::iterator nodeEnd = nodeDict->uncheckedEnd();
for (JSWrapperCache::iterator nodeIt = nodeDict->uncheckedBegin(); nodeIt != nodeEnd; ++nodeIt) {
- JSNode* jsNode = nodeIt->second;
- if (isObservableThroughDOM(jsNode, world))
- markStack.append(jsNode);
+ DeprecatedPtr<JSNode>& jsNode = nodeIt->second;
+ if (isObservableThroughDOM(jsNode.get(), world))
+ markStack.append(&jsNode);
}
}
}
@@ -416,8 +416,8 @@ void markDOMObjectWrapper(MarkStack& markStack, JSGlobalData& globalData, void*
return;
for (JSGlobalDataWorldIterator worldIter(&globalData); worldIter; ++worldIter) {
- if (DOMObject* wrapper = worldIter->m_wrappers.uncheckedGet(object))
- markStack.append(wrapper);
+ if (DeprecatedPtr<DOMObject>* wrapperSlot = worldIter->m_wrappers.uncheckedGetSlot(object))
+ markStack.append(wrapperSlot);
}
}
@@ -426,15 +426,15 @@ void markDOMNodeWrapper(MarkStack& markStack, Document* document, Node* node)
if (document) {
JSWrapperCacheMap& wrapperCacheMap = document->wrapperCacheMap();
for (JSWrapperCacheMap::iterator iter = wrapperCacheMap.begin(); iter != wrapperCacheMap.end(); ++iter) {
- if (JSNode* wrapper = iter->second->uncheckedGet(node))
- markStack.append(wrapper);
+ if (DeprecatedPtr<JSNode>* wrapperSlot = iter->second->uncheckedGetSlot(node))
+ markStack.append(wrapperSlot);
}
return;
}
for (JSGlobalDataWorldIterator worldIter(JSDOMWindow::commonJSGlobalData()); worldIter; ++worldIter) {
- if (DOMObject* wrapper = worldIter->m_wrappers.uncheckedGet(node))
- markStack.append(wrapper);
+ if (DeprecatedPtr<DOMObject>* wrapperSlot = worldIter->m_wrappers.uncheckedGetSlot(node))
+ markStack.append(wrapperSlot);
}
}
diff --git a/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp b/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
index e0b5b89..a328ee9 100644
--- a/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
+++ b/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp
@@ -53,14 +53,14 @@ void JSDOMGlobalObject::markChildren(MarkStack& markStack)
JSDOMStructureMap::iterator end = structures().end();
for (JSDOMStructureMap::iterator it = structures().begin(); it != end; ++it)
- markStack.append(it->second->storedPrototype());
+ markStack.append(it->second->storedPrototypeSlot());
JSDOMConstructorMap::iterator end2 = constructors().end();
for (JSDOMConstructorMap::iterator it2 = constructors().begin(); it2 != end2; ++it2)
- markStack.append(it2->second);
+ markStack.append(&it2->second);
if (d()->m_injectedScript)
- markStack.append(d()->m_injectedScript);
+ markStack.append(&d()->m_injectedScript);
}
void JSDOMGlobalObject::setCurrentEvent(Event* evt)
@@ -75,12 +75,12 @@ Event* JSDOMGlobalObject::currentEvent() const
void JSDOMGlobalObject::setInjectedScript(JSObject* injectedScript)
{
- d()->m_injectedScript = injectedScript;
+ d()->m_injectedScript.set(globalData(), this, injectedScript);
}
JSObject* JSDOMGlobalObject::injectedScript() const
{
- return d()->m_injectedScript;
+ return d()->m_injectedScript.get();
}
void JSDOMGlobalObject::destroyJSDOMGlobalObjectData(void* jsDOMGlobalObjectData)
diff --git a/Source/WebCore/bindings/js/JSDOMGlobalObject.h b/Source/WebCore/bindings/js/JSDOMGlobalObject.h
index 8eb55c1..4dce7a5 100644
--- a/Source/WebCore/bindings/js/JSDOMGlobalObject.h
+++ b/Source/WebCore/bindings/js/JSDOMGlobalObject.h
@@ -39,7 +39,7 @@ namespace WebCore {
class ScriptExecutionContext;
typedef HashMap<const JSC::ClassInfo*, RefPtr<JSC::Structure> > JSDOMStructureMap;
- typedef HashMap<const JSC::ClassInfo*, JSC::JSObject*> JSDOMConstructorMap;
+ typedef HashMap<const JSC::ClassInfo*, JSC::WriteBarrier<JSC::JSObject> > JSDOMConstructorMap;
class JSDOMGlobalObject : public JSC::JSGlobalObject {
typedef JSC::JSGlobalObject Base;
@@ -76,7 +76,6 @@ namespace WebCore {
: JSGlobalObjectData(destructor)
, evt(0)
, m_world(world)
- , m_injectedScript(0)
{
}
@@ -85,7 +84,7 @@ namespace WebCore {
Event* evt;
RefPtr<DOMWrapperWorld> m_world;
- JSObject* m_injectedScript;
+ JSC::WriteBarrier<JSObject> m_injectedScript;
};
private:
@@ -97,11 +96,12 @@ namespace WebCore {
template<class ConstructorClass>
inline JSC::JSObject* getDOMConstructor(JSC::ExecState* exec, const JSDOMGlobalObject* globalObject)
{
- if (JSC::JSObject* constructor = globalObject->constructors().get(&ConstructorClass::s_info))
+ if (JSC::JSObject* constructor = globalObject->constructors().get(&ConstructorClass::s_info).get())
return constructor;
JSC::JSObject* constructor = new (exec) ConstructorClass(exec, const_cast<JSDOMGlobalObject*>(globalObject));
ASSERT(!globalObject->constructors().contains(&ConstructorClass::s_info));
- globalObject->constructors().set(&ConstructorClass::s_info, constructor);
+ JSC::WriteBarrier<JSC::JSObject> temp;
+ globalObject->constructors().add(&ConstructorClass::s_info, temp).first->second.set(exec->globalData(), globalObject, constructor);
return constructor;
}
diff --git a/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp b/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
index c8d8db6..c12d1c4 100644
--- a/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
+++ b/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
@@ -24,17 +24,26 @@
#include "HTMLCollection.h"
#include "HTMLDocument.h"
#include "History.h"
+#include "JSArrayBuffer.h"
#include "JSAudioConstructor.h"
+#include "JSDataView.h"
#include "JSEvent.h"
#include "JSEventListener.h"
#include "JSEventSource.h"
+#include "JSFloat32Array.h"
#include "JSHTMLCollection.h"
#include "JSHistory.h"
#include "JSImageConstructor.h"
+#include "JSInt16Array.h"
+#include "JSInt32Array.h"
+#include "JSInt8Array.h"
#include "JSLocation.h"
#include "JSMessageChannel.h"
#include "JSMessagePortCustom.h"
#include "JSOptionConstructor.h"
+#include "JSUint16Array.h"
+#include "JSUint32Array.h"
+#include "JSUint8Array.h"
#include "JSWebKitCSSMatrix.h"
#include "JSWebKitPoint.h"
#include "JSWorker.h"
@@ -48,18 +57,6 @@
#include <runtime/JSFunction.h>
#include <runtime/PrototypeFunction.h>
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-#include "JSArrayBuffer.h"
-#include "JSDataView.h"
-#include "JSFloat32Array.h"
-#include "JSInt16Array.h"
-#include "JSInt32Array.h"
-#include "JSInt8Array.h"
-#include "JSUint16Array.h"
-#include "JSUint32Array.h"
-#include "JSUint8Array.h"
-#endif
-
#if ENABLE(SHARED_WORKERS)
#include "JSSharedWorker.h"
#endif
@@ -475,7 +472,7 @@ void JSDOMWindow::setLocation(ExecState* exec, JSValue value)
if (Settings* settings = activeFrame->settings()) {
if (settings->usesDashboardBackwardCompatibilityMode() && !activeFrame->tree()->parent()) {
if (allowsAccessFrom(exec))
- putDirect(Identifier(exec, "location"), value);
+ putDirect(exec->globalData(), Identifier(exec, "location"), value);
return;
}
}
@@ -489,11 +486,6 @@ void JSDOMWindow::setLocation(ExecState* exec, JSValue value)
impl()->setLocation(ustringToString(locationString), activeDOMWindow(exec), firstDOMWindow(exec));
}
-JSValue JSDOMWindow::crypto(ExecState*) const
-{
- return jsUndefined();
-}
-
JSValue JSDOMWindow::event(ExecState* exec) const
{
Event* event = currentEvent();
@@ -538,7 +530,6 @@ JSValue JSDOMWindow::webKitCSSMatrix(ExecState* exec) const
return getDOMConstructor<JSWebKitCSSMatrixConstructor>(exec, this);
}
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
JSValue JSDOMWindow::arrayBuffer(ExecState* exec) const
{
return getDOMConstructor<JSArrayBufferConstructor>(exec, this);
@@ -583,8 +574,7 @@ JSValue JSDOMWindow::dataView(ExecState* exec) const
{
return getDOMConstructor<JSDataViewConstructor>(exec, this);
}
-#endif
-
+
JSValue JSDOMWindow::xmlHttpRequest(ExecState* exec) const
{
return getDOMConstructor<JSXMLHttpRequestConstructor>(exec, this);
@@ -682,7 +672,7 @@ inline void DialogHandler::dialogCreated(DOMWindow* dialog)
// world if dialogArguments comes from an isolated world.
m_globalObject = toJSDOMWindow(dialog->frame(), normalWorld(m_exec->globalData()));
if (JSValue dialogArguments = m_exec->argument(1))
- m_globalObject->putDirect(Identifier(m_exec, "dialogArguments"), dialogArguments);
+ m_globalObject->putDirect(m_exec->globalData(), Identifier(m_exec, "dialogArguments"), dialogArguments);
}
inline JSValue DialogHandler::returnValue() const
diff --git a/Source/WebCore/bindings/js/JSDOMWindowShell.cpp b/Source/WebCore/bindings/js/JSDOMWindowShell.cpp
index 65096b9..40f9910 100644
--- a/Source/WebCore/bindings/js/JSDOMWindowShell.cpp
+++ b/Source/WebCore/bindings/js/JSDOMWindowShell.cpp
@@ -45,7 +45,6 @@ const ClassInfo JSDOMWindowShell::s_info = { "JSDOMWindowShell", 0, 0, 0 };
JSDOMWindowShell::JSDOMWindowShell(PassRefPtr<DOMWindow> window, DOMWrapperWorld* world)
: Base(JSDOMWindowShell::createStructure(jsNull()))
- , m_window(0)
, m_world(world)
{
setWindow(window);
@@ -65,8 +64,8 @@ void JSDOMWindowShell::setWindow(PassRefPtr<DOMWindow> domWindow)
RefPtr<Structure> structure = JSDOMWindow::createStructure(prototype);
JSDOMWindow* jsDOMWindow = new (JSDOMWindow::commonJSGlobalData()) JSDOMWindow(structure.release(), domWindow, this);
- prototype->putAnonymousValue(0, jsDOMWindow);
- setWindow(jsDOMWindow);
+ prototype->putAnonymousValue(*JSDOMWindow::commonJSGlobalData(), 0, jsDOMWindow);
+ setWindow(*JSDOMWindow::commonJSGlobalData(), jsDOMWindow);
}
// ----
@@ -77,7 +76,7 @@ void JSDOMWindowShell::markChildren(MarkStack& markStack)
{
Base::markChildren(markStack);
if (m_window)
- markStack.append(m_window);
+ markStack.append(&m_window);
}
UString JSDOMWindowShell::className() const
@@ -147,7 +146,7 @@ JSValue JSDOMWindowShell::lookupSetter(ExecState* exec, const Identifier& proper
JSObject* JSDOMWindowShell::unwrappedObject()
{
- return m_window;
+ return m_window.get();
}
// ----
diff --git a/Source/WebCore/bindings/js/JSDOMWindowShell.h b/Source/WebCore/bindings/js/JSDOMWindowShell.h
index 888325d..d585fd4 100644
--- a/Source/WebCore/bindings/js/JSDOMWindowShell.h
+++ b/Source/WebCore/bindings/js/JSDOMWindowShell.h
@@ -43,11 +43,11 @@ namespace WebCore {
JSDOMWindowShell(PassRefPtr<DOMWindow>, DOMWrapperWorld* world);
virtual ~JSDOMWindowShell();
- JSDOMWindow* window() const { return m_window; }
- void setWindow(JSDOMWindow* window)
+ JSDOMWindow* window() const { return m_window.get(); }
+ void setWindow(JSC::JSGlobalData& globalData, JSDOMWindow* window)
{
ASSERT_ARG(window, window);
- m_window = window;
+ m_window.set(globalData, this, window);
setPrototype(window->prototype());
}
void setWindow(PassRefPtr<DOMWindow>);
@@ -85,7 +85,7 @@ namespace WebCore {
virtual JSC::JSObject* unwrappedObject();
virtual const JSC::ClassInfo* classInfo() const { return &s_info; }
- JSDOMWindow* m_window;
+ JSC::WriteBarrier<JSDOMWindow> m_window;
RefPtr<DOMWrapperWorld> m_world;
};
diff --git a/Source/WebCore/bindings/js/JSDataViewCustom.cpp b/Source/WebCore/bindings/js/JSDataViewCustom.cpp
index ba48374..eaf57bd 100644
--- a/Source/WebCore/bindings/js/JSDataViewCustom.cpp
+++ b/Source/WebCore/bindings/js/JSDataViewCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSDataView.h"
#include "DataView.h"
@@ -160,5 +157,3 @@ JSValue JSDataView::setUint8(ExecState* exec)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSDesktopNotificationsCustom.cpp b/Source/WebCore/bindings/js/JSDesktopNotificationsCustom.cpp
index 38334b9..16a962c 100644
--- a/Source/WebCore/bindings/js/JSDesktopNotificationsCustom.cpp
+++ b/Source/WebCore/bindings/js/JSDesktopNotificationsCustom.cpp
@@ -47,7 +47,7 @@ namespace WebCore {
JSValue JSNotificationCenter::requestPermission(ExecState* exec)
{
- ScriptExecutionContext* context = impl()->context();
+ ScriptExecutionContext* context = impl()->scriptExecutionContext();
// Make sure that script execution context is valid.
if (!context) {
diff --git a/Source/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp b/Source/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
index 503d64f..9142aa2 100644
--- a/Source/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
+++ b/Source/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
@@ -114,18 +114,18 @@ static PassRefPtr<DeviceMotionData::RotationRate> readRotationRateArgument(JSVal
static JSObject* createAccelerationObject(const DeviceMotionData::Acceleration* acceleration, ExecState* exec)
{
JSObject* object = constructEmptyObject(exec);
- object->putDirect(Identifier(exec, "x"), acceleration->canProvideX() ? jsNumber(acceleration->x()) : jsNull());
- object->putDirect(Identifier(exec, "y"), acceleration->canProvideY() ? jsNumber(acceleration->y()) : jsNull());
- object->putDirect(Identifier(exec, "z"), acceleration->canProvideZ() ? jsNumber(acceleration->z()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "x"), acceleration->canProvideX() ? jsNumber(acceleration->x()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "y"), acceleration->canProvideY() ? jsNumber(acceleration->y()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "z"), acceleration->canProvideZ() ? jsNumber(acceleration->z()) : jsNull());
return object;
}
static JSObject* createRotationRateObject(const DeviceMotionData::RotationRate* rotationRate, ExecState* exec)
{
JSObject* object = constructEmptyObject(exec);
- object->putDirect(Identifier(exec, "alpha"), rotationRate->canProvideAlpha() ? jsNumber(rotationRate->alpha()) : jsNull());
- object->putDirect(Identifier(exec, "beta"), rotationRate->canProvideBeta() ? jsNumber(rotationRate->beta()) : jsNull());
- object->putDirect(Identifier(exec, "gamma"), rotationRate->canProvideGamma() ? jsNumber(rotationRate->gamma()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "alpha"), rotationRate->canProvideAlpha() ? jsNumber(rotationRate->alpha()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "beta"), rotationRate->canProvideBeta() ? jsNumber(rotationRate->beta()) : jsNull());
+ object->putDirect(exec->globalData(), Identifier(exec, "gamma"), rotationRate->canProvideGamma() ? jsNumber(rotationRate->gamma()) : jsNull());
return object;
}
diff --git a/Source/WebCore/bindings/js/JSDocumentCustom.cpp b/Source/WebCore/bindings/js/JSDocumentCustom.cpp
index 4cc176c..fa2b93c 100644
--- a/Source/WebCore/bindings/js/JSDocumentCustom.cpp
+++ b/Source/WebCore/bindings/js/JSDocumentCustom.cpp
@@ -25,7 +25,7 @@
#include "FrameLoader.h"
#include "HTMLDocument.h"
#include "JSCanvasRenderingContext2D.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "JSWebGLRenderingContext.h"
#endif
#include "JSDOMWindowCustom.h"
diff --git a/Source/WebCore/bindings/js/JSElementCustom.cpp b/Source/WebCore/bindings/js/JSElementCustom.cpp
index 3bfe110..9ed3739 100644
--- a/Source/WebCore/bindings/js/JSElementCustom.cpp
+++ b/Source/WebCore/bindings/js/JSElementCustom.cpp
@@ -75,7 +75,7 @@ JSValue toJSNewlyCreated(ExecState* exec, JSDOMGlobalObject* globalObject, Eleme
JSNode* wrapper;
if (element->isHTMLElement())
- wrapper = createJSHTMLWrapper(exec, globalObject, static_cast<HTMLElement*>(element));
+ wrapper = createJSHTMLWrapper(exec, globalObject, toHTMLElement(element));
#if ENABLE(SVG)
else if (element->isSVGElement())
wrapper = createJSSVGWrapper(exec, globalObject, static_cast<SVGElement*>(element));
diff --git a/Source/WebCore/bindings/js/JSEventListener.cpp b/Source/WebCore/bindings/js/JSEventListener.cpp
index 5604374..6427683 100644
--- a/Source/WebCore/bindings/js/JSEventListener.cpp
+++ b/Source/WebCore/bindings/js/JSEventListener.cpp
@@ -34,12 +34,12 @@ namespace WebCore {
JSEventListener::JSEventListener(JSObject* function, JSObject* wrapper, bool isAttribute, DOMWrapperWorld* isolatedWorld)
: EventListener(JSEventListenerType)
- , m_jsFunction(function)
, m_isAttribute(isAttribute)
, m_isolatedWorld(isolatedWorld)
{
if (wrapper)
m_wrapper = wrapper;
+ m_jsFunction.set(*m_isolatedWorld->globalData(), wrapper, function);
}
JSEventListener::~JSEventListener()
@@ -55,7 +55,7 @@ JSObject* JSEventListener::initializeJSFunction(ScriptExecutionContext*) const
void JSEventListener::markJSFunction(MarkStack& markStack)
{
if (m_jsFunction)
- markStack.append(m_jsFunction);
+ markStack.append(&m_jsFunction);
}
void JSEventListener::handleEvent(ScriptExecutionContext* scriptExecutionContext, Event* event)
diff --git a/Source/WebCore/bindings/js/JSEventListener.h b/Source/WebCore/bindings/js/JSEventListener.h
index 83d0d2e..47ff44e 100644
--- a/Source/WebCore/bindings/js/JSEventListener.h
+++ b/Source/WebCore/bindings/js/JSEventListener.h
@@ -66,7 +66,7 @@ namespace WebCore {
virtual void handleEvent(ScriptExecutionContext*, Event*);
private:
- mutable JSC::JSObject* m_jsFunction;
+ mutable JSC::WriteBarrier<JSC::JSObject> m_jsFunction;
mutable JSC::WeakGCPtr<JSC::JSObject> m_wrapper;
bool m_isAttribute;
@@ -76,7 +76,7 @@ namespace WebCore {
inline JSC::JSObject* JSEventListener::jsFunction(ScriptExecutionContext* scriptExecutionContext) const
{
if (!m_jsFunction)
- m_jsFunction = initializeJSFunction(scriptExecutionContext);
+ m_jsFunction.set(*scriptExecutionContext->globalData(), m_wrapper.get(), initializeJSFunction(scriptExecutionContext));
// Verify that we have a valid wrapper protecting our function from
// garbage collection.
@@ -86,9 +86,9 @@ namespace WebCore {
// Try to verify that m_jsFunction wasn't recycled. (Not exact, since an
// event listener can be almost anything, but this makes test-writing easier).
- ASSERT(!m_jsFunction || static_cast<JSC::JSCell*>(m_jsFunction)->isObject());
+ ASSERT(!m_jsFunction || static_cast<JSC::JSCell*>(m_jsFunction.get())->isObject());
- return m_jsFunction;
+ return m_jsFunction.get();
}
inline void JSEventListener::invalidateJSFunction(JSC::JSObject* wrapper)
diff --git a/Source/WebCore/bindings/js/JSFloat32ArrayCustom.cpp b/Source/WebCore/bindings/js/JSFloat32ArrayCustom.cpp
index eb4608c..5da69b4 100644
--- a/Source/WebCore/bindings/js/JSFloat32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSFloat32ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSFloat32Array.h"
#include "Float32Array.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSFloat32ArrayConstructor::constructJSFloat32Array(
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp b/Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
index ae9115e..84dd72e 100644
--- a/Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
+++ b/Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
@@ -30,7 +30,7 @@
#include "CanvasContextAttributes.h"
#include "HTMLCanvasElement.h"
#include "JSCanvasRenderingContext2D.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "JSWebGLRenderingContext.h"
#include "WebGLContextAttributes.h"
#endif
@@ -55,7 +55,7 @@ JSValue JSHTMLCanvasElement::getContext(ExecState* exec)
HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(impl());
const UString& contextId = exec->argument(0).toString(exec);
RefPtr<CanvasContextAttributes> attrs;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
if (contextId == "experimental-webgl" || contextId == "webkit-3d") {
attrs = WebGLContextAttributes::create();
WebGLContextAttributes* webGLAttrs = static_cast<WebGLContextAttributes*>(attrs.get());
diff --git a/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp b/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp
index 0b40ef0..192ef5d 100644
--- a/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp
+++ b/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp
@@ -26,7 +26,6 @@
#include "config.h"
#include "JSHTMLDocument.h"
-#include "CharacterNames.h"
#include "Frame.h"
#include "HTMLAllCollection.h"
#include "HTMLBodyElement.h"
@@ -43,6 +42,7 @@
#include "DocumentParser.h"
#include <runtime/Error.h>
#include <runtime/JSCell.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace JSC;
@@ -96,7 +96,7 @@ JSValue JSHTMLDocument::all(ExecState* exec) const
void JSHTMLDocument::setAll(ExecState* exec, JSValue value)
{
// Add "all" to the property map.
- putDirect(Identifier(exec, "all"), value);
+ putDirect(exec->globalData(), Identifier(exec, "all"), value);
}
// Custom functions
diff --git a/Source/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp b/Source/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp
index 617aaff..ea4f4c0 100644
--- a/Source/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp
+++ b/Source/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp
@@ -50,7 +50,7 @@ bool JSHTMLFrameSetElement::canGetItemsForName(ExecState*, HTMLFrameSetElement*
JSValue JSHTMLFrameSetElement::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
{
JSHTMLElement* thisObj = static_cast<JSHTMLElement*>(asObject(slotBase));
- HTMLElement* element = static_cast<HTMLElement*>(thisObj->impl());
+ HTMLElement* element = toHTMLElement(thisObj->impl());
Node* frame = element->children()->namedItem(identifierToAtomicString(propertyName));
if (Document* doc = static_cast<HTMLFrameElement*>(frame)->contentDocument()) {
diff --git a/Source/WebCore/bindings/js/JSImageConstructor.cpp b/Source/WebCore/bindings/js/JSImageConstructor.cpp
index f2ad803..5192e12 100644
--- a/Source/WebCore/bindings/js/JSImageConstructor.cpp
+++ b/Source/WebCore/bindings/js/JSImageConstructor.cpp
@@ -37,7 +37,7 @@ const ClassInfo JSImageConstructor::s_info = { "ImageConstructor", 0, 0, 0 };
JSImageConstructor::JSImageConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
: DOMConstructorWithDocument(JSImageConstructor::createStructure(globalObject->objectPrototype()), globalObject)
{
- putDirect(exec->propertyNames().prototype, JSHTMLImageElementPrototype::self(exec, globalObject), None);
+ putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLImageElementPrototype::self(exec, globalObject), None);
}
static EncodedJSValue JSC_HOST_CALL constructImage(ExecState* exec)
diff --git a/Source/WebCore/bindings/js/JSImageDataCustom.cpp b/Source/WebCore/bindings/js/JSImageDataCustom.cpp
index 61c5112..878e1de 100644
--- a/Source/WebCore/bindings/js/JSImageDataCustom.cpp
+++ b/Source/WebCore/bindings/js/JSImageDataCustom.cpp
@@ -49,7 +49,7 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, ImageData* imageD
Identifier dataName(exec, "data");
DEFINE_STATIC_LOCAL(RefPtr<Structure>, cpaStructure, (JSByteArray::createStructure(jsNull())));
static const ClassInfo cpaClassInfo = { "CanvasPixelArray", 0, 0, 0 };
- wrapper->putDirect(dataName, new (exec) JSByteArray(exec, cpaStructure, imageData->data()->data(), &cpaClassInfo), DontDelete | ReadOnly);
+ wrapper->putDirect(exec->globalData(), dataName, new (exec) JSByteArray(exec, cpaStructure, imageData->data()->data(), &cpaClassInfo), DontDelete | ReadOnly);
exec->heap()->reportExtraMemoryCost(imageData->data()->length());
return wrapper;
diff --git a/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp b/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
index 971098d..dd36c2e 100644
--- a/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
+++ b/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
@@ -46,7 +46,7 @@
#include "FrameLoader.h"
#include "InjectedScript.h"
#include "InjectedScriptHost.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "InspectorValues.h"
#include "JSDOMWindow.h"
#include "JSDOMWindowCustom.h"
@@ -128,8 +128,7 @@ JSValue JSInjectedScriptHost::nodeForId(ExecState* exec)
if (!node)
return jsUndefined();
- InspectorController* ic = impl()->inspectorController();
- if (!ic)
+ if (!impl()->inspectorAgent())
return jsUndefined();
JSLock lock(SilenceAssertionsOnly);
@@ -177,8 +176,7 @@ JSValue JSInjectedScriptHost::selectDOMStorage(ExecState* exec)
{
if (exec->argumentCount() < 1)
return jsUndefined();
- InspectorController* ic = impl()->inspectorController();
- if (!ic)
+ if (!impl()->inspectorAgent())
return jsUndefined();
Storage* storage = toStorage(exec->argument(0));
diff --git a/Source/WebCore/bindings/js/JSInt16ArrayCustom.cpp b/Source/WebCore/bindings/js/JSInt16ArrayCustom.cpp
index 2e56d0b..87ea6fe 100644
--- a/Source/WebCore/bindings/js/JSInt16ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSInt16ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSInt16Array.h"
#include "Int16Array.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSInt16ArrayConstructor::constructJSInt16Array(Exec
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSInt32ArrayCustom.cpp b/Source/WebCore/bindings/js/JSInt32ArrayCustom.cpp
index eaf474a..8b824a7 100644
--- a/Source/WebCore/bindings/js/JSInt32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSInt32ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSInt32Array.h"
#include "Int32Array.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSInt32ArrayConstructor::constructJSInt32Array(Exec
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSInt8ArrayCustom.cpp b/Source/WebCore/bindings/js/JSInt8ArrayCustom.cpp
index c4bd007..dcbcc5a 100644
--- a/Source/WebCore/bindings/js/JSInt8ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSInt8ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSInt8Array.h"
#include "Int8Array.h"
@@ -63,5 +60,3 @@ EncodedJSValue JSC_HOST_CALL JSInt8ArrayConstructor::constructJSInt8Array(ExecSt
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp b/Source/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp
index 0f47b7b..7c00bd4 100644
--- a/Source/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp
+++ b/Source/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp
@@ -79,7 +79,7 @@ JSValue JSJavaScriptCallFrame::scopeChain(ExecState* exec) const
MarkedArgumentBuffer list;
do {
- list.append(*iter);
+ list.append(iter->get());
++iter;
} while (iter != end);
@@ -100,7 +100,7 @@ JSValue JSJavaScriptCallFrame::scopeType(ExecState* exec)
bool foundLocalScope = false;
for (ScopeChainIterator iter = scopeChain->begin(); iter != end; ++iter) {
- JSObject* scope = *iter;
+ JSC::DeprecatedPtr<JSObject> scope = *iter;
if (scope->isActivationObject()) {
if (!foundLocalScope) {
// First activation object is local scope, each successive activation object is closure.
diff --git a/Source/WebCore/platform/graphics/chromium/IconChromiumLinux.cpp b/Source/WebCore/bindings/js/JSMemoryInfoCustom.cpp
index 16f55e2..94c0e8a 100644
--- a/Source/WebCore/platform/graphics/chromium/IconChromiumLinux.cpp
+++ b/Source/WebCore/bindings/js/JSMemoryInfoCustom.cpp
@@ -1,10 +1,10 @@
/*
- * Copyright (c) 2008, 2009 Google Inc. All rights reserved.
- *
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -29,26 +29,16 @@
*/
#include "config.h"
-#include "Icon.h"
-#include "GraphicsContext.h"
-#include "NotImplemented.h"
-#include "PlatformString.h"
+#include "JSMemoryInfo.h"
-namespace WebCore {
-
-Icon::Icon(const PlatformIcon& icon)
- : m_icon(icon)
-{
-}
+using namespace JSC;
-Icon::~Icon()
-{
-}
+namespace WebCore {
-void Icon::paint(GraphicsContext*, const IntRect&)
+JSValue JSMemoryInfo::jsHeapSizeLimit(ExecState*) const
{
- notImplemented();
+ return jsUndefined();
}
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/JSNodeCustom.cpp b/Source/WebCore/bindings/js/JSNodeCustom.cpp
index a0963b8..8d00447 100644
--- a/Source/WebCore/bindings/js/JSNodeCustom.cpp
+++ b/Source/WebCore/bindings/js/JSNodeCustom.cpp
@@ -169,7 +169,7 @@ static ALWAYS_INLINE JSValue createWrapperInline(ExecState* exec, JSDOMGlobalObj
switch (node->nodeType()) {
case Node::ELEMENT_NODE:
if (node->isHTMLElement())
- wrapper = createJSHTMLWrapper(exec, globalObject, static_cast<HTMLElement*>(node));
+ wrapper = createJSHTMLWrapper(exec, globalObject, toHTMLElement(node));
#if ENABLE(SVG)
else if (node->isSVGElement())
wrapper = createJSSVGWrapper(exec, globalObject, static_cast<SVGElement*>(node));
diff --git a/Source/WebCore/bindings/js/JSNodeFilterCondition.cpp b/Source/WebCore/bindings/js/JSNodeFilterCondition.cpp
index b269e5f..1cf72a5 100644
--- a/Source/WebCore/bindings/js/JSNodeFilterCondition.cpp
+++ b/Source/WebCore/bindings/js/JSNodeFilterCondition.cpp
@@ -39,14 +39,14 @@ JSNodeFilterCondition::JSNodeFilterCondition(JSValue filter)
void JSNodeFilterCondition::markAggregate(MarkStack& markStack)
{
- markStack.append(m_filter);
+ markStack.append(&m_filter);
}
short JSNodeFilterCondition::acceptNode(JSC::ExecState* exec, Node* filterNode) const
{
JSLock lock(SilenceAssertionsOnly);
- if (!m_filter.isObject())
+ if (!m_filter->isObject())
return NodeFilter::FILTER_ACCEPT;
// The exec argument here should only be null if this was called from a
@@ -58,11 +58,11 @@ short JSNodeFilterCondition::acceptNode(JSC::ExecState* exec, Node* filterNode)
if (!exec)
return NodeFilter::FILTER_REJECT;
- JSValue function = m_filter;
+ JSValue function = m_filter.get();
CallData callData;
CallType callType = getCallData(function, callData);
if (callType == CallTypeNone) {
- function = m_filter.get(exec, Identifier(exec, "acceptNode"));
+ function = m_filter->get(exec, Identifier(exec, "acceptNode"));
callType = getCallData(function, callData);
if (callType == CallTypeNone) {
throwError(exec, createTypeError(exec, "NodeFilter object does not have an acceptNode function"));
@@ -77,7 +77,7 @@ short JSNodeFilterCondition::acceptNode(JSC::ExecState* exec, Node* filterNode)
if (exec->hadException())
return NodeFilter::FILTER_REJECT;
- JSValue result = JSC::call(exec, function, callType, callData, m_filter, args);
+ JSValue result = JSC::call(exec, function, callType, callData, m_filter.get(), args);
if (exec->hadException())
return NodeFilter::FILTER_REJECT;
diff --git a/Source/WebCore/bindings/js/JSNodeFilterCondition.h b/Source/WebCore/bindings/js/JSNodeFilterCondition.h
index b96534a..14b0c1d 100644
--- a/Source/WebCore/bindings/js/JSNodeFilterCondition.h
+++ b/Source/WebCore/bindings/js/JSNodeFilterCondition.h
@@ -41,7 +41,7 @@ namespace WebCore {
virtual short acceptNode(ScriptState*, Node*) const;
virtual void markAggregate(JSC::MarkStack&);
- mutable JSC::JSValue m_filter;
+ mutable JSC::DeprecatedPtr<JSC::Unknown> m_filter;
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp b/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp
index bb90c4f..bc79e99 100644
--- a/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp
+++ b/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp
@@ -26,6 +26,7 @@
#include "config.h"
#include "JSNodeFilter.h"
+#include "JSDOMWindowBase.h"
#include "JSNode.h"
#include "JSNodeFilterCondition.h"
#include "NodeFilter.h"
diff --git a/Source/WebCore/bindings/js/JSOptionConstructor.cpp b/Source/WebCore/bindings/js/JSOptionConstructor.cpp
index 4ecfe58..e14fb6d 100644
--- a/Source/WebCore/bindings/js/JSOptionConstructor.cpp
+++ b/Source/WebCore/bindings/js/JSOptionConstructor.cpp
@@ -38,8 +38,8 @@ const ClassInfo JSOptionConstructor::s_info = { "OptionConstructor", 0, 0, 0 };
JSOptionConstructor::JSOptionConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
: DOMConstructorWithDocument(JSOptionConstructor::createStructure(globalObject->objectPrototype()), globalObject)
{
- putDirect(exec->propertyNames().prototype, JSHTMLOptionElementPrototype::self(exec, globalObject), None);
- putDirect(exec->propertyNames().length, jsNumber(4), ReadOnly | DontDelete | DontEnum);
+ putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLOptionElementPrototype::self(exec, globalObject), None);
+ putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(4), ReadOnly | DontDelete | DontEnum);
}
static EncodedJSValue JSC_HOST_CALL constructHTMLOptionElement(ExecState* exec)
diff --git a/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp b/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp
index 7274cd0..0fcd1ea 100644
--- a/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp
+++ b/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp
@@ -74,7 +74,7 @@ JSValue JSSQLResultSetRowList::item(ExecState* exec)
ASSERT_NOT_REACHED();
}
- object->putDirect(Identifier(exec, stringToUString(m_impl->columnNames()[i])), jsValue, DontDelete | ReadOnly);
+ object->putDirect(exec->globalData(), Identifier(exec, stringToUString(m_impl->columnNames()[i])), jsValue, DontDelete | ReadOnly);
}
return object;
diff --git a/Source/WebCore/bindings/js/JSUint16ArrayCustom.cpp b/Source/WebCore/bindings/js/JSUint16ArrayCustom.cpp
index 9e476f2..16f9db2 100644
--- a/Source/WebCore/bindings/js/JSUint16ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSUint16ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSUint16Array.h"
#include "JSArrayBufferViewHelper.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSUint16ArrayConstructor::constructJSUint16Array(Ex
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSUint32ArrayCustom.cpp b/Source/WebCore/bindings/js/JSUint32ArrayCustom.cpp
index d221c2a..1e071c9 100644
--- a/Source/WebCore/bindings/js/JSUint32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSUint32ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSUint32Array.h"
#include "JSArrayBufferViewHelper.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSUint32ArrayConstructor::constructJSUint32Array(Ex
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSUint8ArrayCustom.cpp b/Source/WebCore/bindings/js/JSUint8ArrayCustom.cpp
index b37eea8..e90f8e9 100644
--- a/Source/WebCore/bindings/js/JSUint8ArrayCustom.cpp
+++ b/Source/WebCore/bindings/js/JSUint8ArrayCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "JSUint8Array.h"
#include "JSArrayBufferViewHelper.h"
@@ -62,5 +59,3 @@ EncodedJSValue JSC_HOST_CALL JSUint8ArrayConstructor::constructJSUint8Array(Exec
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp b/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
index dc32d5f..eb4f6e2 100644
--- a/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
+++ b/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "JSWebGLRenderingContext.h"
@@ -89,14 +89,14 @@ static JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, const WebG
}
case WebGLGetInfo::kTypeFloat:
return jsNumber(info.getFloat());
- case WebGLGetInfo::kTypeLong:
- return jsNumber(info.getLong());
+ case WebGLGetInfo::kTypeInt:
+ return jsNumber(info.getInt());
case WebGLGetInfo::kTypeNull:
return jsNull();
case WebGLGetInfo::kTypeString:
return jsString(exec, info.getString());
- case WebGLGetInfo::kTypeUnsignedLong:
- return jsNumber(info.getUnsignedLong());
+ case WebGLGetInfo::kTypeUnsignedInt:
+ return jsNumber(info.getUnsignedInt());
case WebGLGetInfo::kTypeWebGLBuffer:
return toJS(exec, globalObject, info.getWebGLBuffer());
case WebGLGetInfo::kTypeWebGLFloatArray:
@@ -703,4 +703,4 @@ JSC::JSValue JSWebGLRenderingContext::vertexAttrib4fv(JSC::ExecState* exec)
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp b/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
index a93db11..1d6f1cb 100644
--- a/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
+++ b/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
@@ -64,7 +64,7 @@ void JSXMLHttpRequest::markChildren(MarkStack& markStack)
if (Document* responseDocument = m_impl->optionalResponseXML())
markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), responseDocument);
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
if (ArrayBuffer* responseArrayBuffer = m_impl->optionalResponseArrayBuffer())
markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), responseArrayBuffer);
#endif
@@ -124,7 +124,7 @@ JSValue JSXMLHttpRequest::send(ExecState* exec)
impl()->send(toBlob(val), ec);
else if (val.inherits(&JSDOMFormData::s_info))
impl()->send(toDOMFormData(val), ec);
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
else if (val.inherits(&JSArrayBuffer::s_info))
impl()->send(toArrayBuffer(val), ec);
#endif
@@ -189,7 +189,7 @@ JSValue JSXMLHttpRequest::response(ExecState* exec) const
#endif
case XMLHttpRequest::ResponseTypeArrayBuffer:
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
{
ExceptionCode ec = 0;
ArrayBuffer* arrayBuffer = impl()->responseArrayBuffer(ec);
diff --git a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
index 16f18d3..d65bce2 100644
--- a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
+++ b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
@@ -84,7 +84,7 @@ void ScriptCachedFrameData::restore(Frame* frame)
JSDOMWindowShell* windowShell = iter->second.get();
if (JSDOMWindow* window = m_windows.get(world))
- windowShell->setWindow(window);
+ windowShell->setWindow(window->globalData(), window);
else {
windowShell->setWindow(frame->domWindow());
diff --git a/Source/WebCore/bindings/js/ScriptController.cpp b/Source/WebCore/bindings/js/ScriptController.cpp
index cf55080..e7eafd0 100644
--- a/Source/WebCore/bindings/js/ScriptController.cpp
+++ b/Source/WebCore/bindings/js/ScriptController.cpp
@@ -40,7 +40,6 @@
#include "StorageNamespace.h"
#include "UserGestureIndicator.h"
#include "WebCoreJSClientData.h"
-#include "XSSAuditor.h"
#include "npruntime_impl.h"
#include "runtime_root.h"
#include <debugger/Debugger.h>
@@ -72,7 +71,6 @@ ScriptController::ScriptController(Frame* frame)
#if PLATFORM(MAC)
, m_windowScriptObject(0)
#endif
- , m_XSSAuditor(new XSSAuditor(frame))
{
#if PLATFORM(MAC) && ENABLE(JAVA_BRIDGE)
static bool initializedJavaJSBindings;
@@ -116,16 +114,11 @@ JSDOMWindowShell* ScriptController::createWindowShell(DOMWrapperWorld* world)
return windowShell;
}
-ScriptValue ScriptController::evaluateInWorld(const ScriptSourceCode& sourceCode, DOMWrapperWorld* world, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::evaluateInWorld(const ScriptSourceCode& sourceCode, DOMWrapperWorld* world)
{
const SourceCode& jsSourceCode = sourceCode.jsSourceCode();
String sourceURL = ustringToString(jsSourceCode.provider()->url());
- if (shouldAllowXSS == DoNotAllowXSS && !m_XSSAuditor->canEvaluate(sourceCode.source())) {
- // This script is not safe to be evaluated.
- return JSValue();
- }
-
// evaluate code. Returns the JS return value or 0
// if there was none, an error occurred or the type couldn't be converted.
@@ -166,9 +159,9 @@ ScriptValue ScriptController::evaluateInWorld(const ScriptSourceCode& sourceCode
return JSValue();
}
-ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode)
{
- return evaluateInWorld(sourceCode, mainThreadNormalWorld(), shouldAllowXSS);
+ return evaluateInWorld(sourceCode, mainThreadNormalWorld());
}
PassRefPtr<DOMWrapperWorld> ScriptController::createWorld()
@@ -497,7 +490,7 @@ void ScriptController::clearScriptObjects()
#endif
}
-ScriptValue ScriptController::executeScriptInWorld(DOMWrapperWorld* world, const String& script, bool forceUserGesture, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::executeScriptInWorld(DOMWrapperWorld* world, const String& script, bool forceUserGesture)
{
ScriptSourceCode sourceCode(script, forceUserGesture ? KURL() : m_frame->document()->url());
@@ -507,7 +500,7 @@ ScriptValue ScriptController::executeScriptInWorld(DOMWrapperWorld* world, const
bool wasInExecuteScript = m_inExecuteScript;
m_inExecuteScript = true;
- ScriptValue result = evaluateInWorld(sourceCode, world, shouldAllowXSS);
+ ScriptValue result = evaluateInWorld(sourceCode, world);
if (!wasInExecuteScript) {
m_inExecuteScript = false;
diff --git a/Source/WebCore/bindings/js/ScriptController.h b/Source/WebCore/bindings/js/ScriptController.h
index 413b88a..19542af 100644
--- a/Source/WebCore/bindings/js/ScriptController.h
+++ b/Source/WebCore/bindings/js/ScriptController.h
@@ -59,7 +59,6 @@ class Node;
class ScriptSourceCode;
class ScriptValue;
class Widget;
-class XSSAuditor;
typedef HashMap<void*, RefPtr<JSC::Bindings::RootObject> > RootObjectMap;
@@ -93,9 +92,9 @@ public:
static void getAllWorlds(Vector<DOMWrapperWorld*>&);
- ScriptValue executeScript(const ScriptSourceCode&, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
- ScriptValue executeScript(const String& script, bool forceUserGesture = false, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
- ScriptValue executeScriptInWorld(DOMWrapperWorld* world, const String& script, bool forceUserGesture = false, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
+ ScriptValue executeScript(const ScriptSourceCode&);
+ ScriptValue executeScript(const String& script, bool forceUserGesture = false);
+ ScriptValue executeScriptInWorld(DOMWrapperWorld*, const String& script, bool forceUserGesture = false);
// Returns true if argument is a JavaScript URL.
bool executeIfJavaScriptURL(const KURL&, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL);
@@ -104,8 +103,8 @@ public:
// Darwin is an exception to this rule: it is OK to call this function from any thread, even reentrantly.
static void initializeThreading();
- ScriptValue evaluate(const ScriptSourceCode&, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
- ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
+ ScriptValue evaluate(const ScriptSourceCode&);
+ ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*);
int eventHandlerLineNumber() const;
@@ -168,8 +167,6 @@ public:
NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*);
NPObject* windowScriptNPObject();
#endif
-
- XSSAuditor* xssAuditor() { return m_XSSAuditor.get(); }
private:
JSDOMWindowShell* initScript(DOMWrapperWorld* world);
@@ -202,9 +199,6 @@ private:
#if PLATFORM(MAC)
RetainPtr<WebScriptObject> m_windowScriptObject;
#endif
-
- // The XSSAuditor associated with this ScriptController.
- OwnPtr<XSSAuditor> m_XSSAuditor;
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/ScriptDebugServer.cpp b/Source/WebCore/bindings/js/ScriptDebugServer.cpp
index b516f6d..aed2ad4 100644
--- a/Source/WebCore/bindings/js/ScriptDebugServer.cpp
+++ b/Source/WebCore/bindings/js/ScriptDebugServer.cpp
@@ -117,20 +117,6 @@ void ScriptDebugServer::removeListener(ScriptDebugListener* listener, Page* page
didRemoveListener(page);
}
-void ScriptDebugServer::pageCreated(Page* page)
-{
- ASSERT_ARG(page, page);
-
- if (!hasListenersInterestedInPage(page))
- return;
- page->setDebugger(this);
-}
-
-bool ScriptDebugServer::isDebuggerAlwaysEnabled()
-{
- return false;
-}
-
bool ScriptDebugServer::hasListenersInterestedInPage(Page* page)
{
ASSERT_ARG(page, page);
@@ -138,19 +124,21 @@ bool ScriptDebugServer::hasListenersInterestedInPage(Page* page)
return m_pageListenersMap.contains(page);
}
-String ScriptDebugServer::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber)
+String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, int* actualLineNumber, int* actualColumnNumber)
{
intptr_t sourceIDValue = sourceID.toIntPtr();
if (!sourceIDValue)
return "";
- BreakpointsMap::iterator it = m_breakpoints.find(sourceIDValue);
- if (it == m_breakpoints.end())
- it = m_breakpoints.set(sourceIDValue, SourceBreakpoints()).first;
- if (it->second.contains(lineNumber))
+ SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue);
+ if (it == m_sourceIdToBreakpoints.end())
+ it = m_sourceIdToBreakpoints.set(sourceIDValue, LineToBreakpointMap()).first;
+ if (it->second.contains(scriptBreakpoint.lineNumber + 1))
return "";
- it->second.set(lineNumber, ScriptBreakpoint(enabled, condition));
- *actualLineNumber = lineNumber;
- return makeString(sourceID, ":", String::number(lineNumber));
+ it->second.set(scriptBreakpoint.lineNumber + 1, scriptBreakpoint);
+ *actualLineNumber = scriptBreakpoint.lineNumber;
+ // FIXME(WK53003): implement setting breakpoints by line:column.
+ *actualColumnNumber = 0;
+ return makeString(sourceID, ":", String::number(scriptBreakpoint.lineNumber));
}
void ScriptDebugServer::removeBreakpoint(const String& breakpointId)
@@ -166,9 +154,9 @@ void ScriptDebugServer::removeBreakpoint(const String& breakpointId)
unsigned lineNumber = tokens[1].toUInt(&success);
if (!success)
return;
- BreakpointsMap::iterator it = m_breakpoints.find(sourceIDValue);
- if (it != m_breakpoints.end())
- it->second.remove(lineNumber);
+ SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue);
+ if (it != m_sourceIdToBreakpoints.end())
+ it->second.remove(lineNumber + 1);
}
bool ScriptDebugServer::hasBreakpoint(intptr_t sourceID, unsigned lineNumber) const
@@ -176,10 +164,10 @@ bool ScriptDebugServer::hasBreakpoint(intptr_t sourceID, unsigned lineNumber) co
if (!m_breakpointsActivated)
return false;
- BreakpointsMap::const_iterator it = m_breakpoints.find(sourceID);
- if (it == m_breakpoints.end())
+ SourceIdToBreakpointsMap::const_iterator it = m_sourceIdToBreakpoints.find(sourceID);
+ if (it == m_sourceIdToBreakpoints.end())
return false;
- SourceBreakpoints::const_iterator breakIt = it->second.find(lineNumber);
+ LineToBreakpointMap::const_iterator breakIt = it->second.find(lineNumber);
if (breakIt == it->second.end() || !breakIt->second.enabled)
return false;
@@ -198,7 +186,7 @@ bool ScriptDebugServer::hasBreakpoint(intptr_t sourceID, unsigned lineNumber) co
void ScriptDebugServer::clearBreakpoints()
{
- m_breakpoints.clear();
+ m_sourceIdToBreakpoints.clear();
}
void ScriptDebugServer::setBreakpointsActivated(bool activated)
diff --git a/Source/WebCore/bindings/js/ScriptDebugServer.h b/Source/WebCore/bindings/js/ScriptDebugServer.h
index bde4736..428b254 100644
--- a/Source/WebCore/bindings/js/ScriptDebugServer.h
+++ b/Source/WebCore/bindings/js/ScriptDebugServer.h
@@ -64,7 +64,7 @@ public:
void addListener(ScriptDebugListener*, Page*);
void removeListener(ScriptDebugListener*, Page*);
- String setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber);
+ String setBreakpoint(const String& sourceID, const ScriptBreakpoint&, int* actualLineNumber, int* actualColumnNumber);
void removeBreakpoint(const String& breakpointId);
void clearBreakpoints();
void setBreakpointsActivated(bool activated);
@@ -93,10 +93,6 @@ public:
JavaScriptCallFrame* currentCallFrame();
- void pageCreated(Page*);
-
- bool isDebuggerAlwaysEnabled();
-
private:
typedef HashSet<ScriptDebugListener*> ListenerSet;
typedef void (ScriptDebugServer::*JavaScriptExecutionCallback)(ScriptDebugListener*);
@@ -138,7 +134,8 @@ private:
void didRemoveListener(Page*);
typedef HashMap<Page*, ListenerSet*> PageListenersMap;
- typedef HashMap<intptr_t, SourceBreakpoints> BreakpointsMap;
+ typedef HashMap<long, ScriptBreakpoint> LineToBreakpointMap;
+ typedef HashMap<intptr_t, LineToBreakpointMap> SourceIdToBreakpointsMap;
PageListenersMap m_pageListenersMap;
bool m_callingListeners;
@@ -150,7 +147,7 @@ private:
bool m_breakpointsActivated;
JavaScriptCallFrame* m_pauseOnCallFrame;
RefPtr<JavaScriptCallFrame> m_currentCallFrame;
- BreakpointsMap m_breakpoints;
+ SourceIdToBreakpointsMap m_sourceIdToBreakpoints;
Timer<ScriptDebugServer> m_recompileTimer;
};
diff --git a/Source/WebCore/bindings/js/ScriptEventListener.cpp b/Source/WebCore/bindings/js/ScriptEventListener.cpp
index d2baf82..3a03f59 100644
--- a/Source/WebCore/bindings/js/ScriptEventListener.cpp
+++ b/Source/WebCore/bindings/js/ScriptEventListener.cpp
@@ -36,7 +36,6 @@
#include "EventListener.h"
#include "JSNode.h"
#include "Frame.h"
-#include "XSSAuditor.h"
#include <runtime/JSLock.h>
using namespace JSC;
@@ -66,11 +65,6 @@ PassRefPtr<JSLazyEventListener> createAttributeEventListener(Node* node, Attribu
if (!scriptController->canExecuteScripts(AboutToExecuteScript))
return 0;
- if (!scriptController->xssAuditor()->canCreateInlineEventListener(attr->localName().string(), attr->value())) {
- // This script is not safe to execute.
- return 0;
- }
-
lineNumber = scriptController->eventHandlerLineNumber();
sourceURL = node->document()->url().string();
}
@@ -94,11 +88,6 @@ PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame* frame, Attri
if (!scriptController->canExecuteScripts(AboutToExecuteScript))
return 0;
- if (!scriptController->xssAuditor()->canCreateInlineEventListener(attr->localName().string(), attr->value())) {
- // This script is not safe to execute.
- return 0;
- }
-
lineNumber = scriptController->eventHandlerLineNumber();
sourceURL = frame->document()->url().string();
JSObject* wrapper = toJSDOMWindow(frame, mainThreadNormalWorld());
diff --git a/Source/WebCore/bindings/js/ScriptGCEvent.cpp b/Source/WebCore/bindings/js/ScriptGCEvent.cpp
index b7fc7b3..dd027b4 100644
--- a/Source/WebCore/bindings/js/ScriptGCEvent.cpp
+++ b/Source/WebCore/bindings/js/ScriptGCEvent.cpp
@@ -42,12 +42,14 @@ namespace WebCore {
using namespace JSC;
-void ScriptGCEvent::getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize)
+void ScriptGCEvent::getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize, size_t& heapSizeLimit)
{
JSGlobalData* globalData = JSDOMWindow::commonJSGlobalData();
- totalHeapSize = globalData->heap.size();
- usedHeapSize = totalHeapSize;
+ totalHeapSize = globalData->heap.capacity();
+ usedHeapSize = globalData->heap.size();
+ heapSizeLimit = 0;
}
+
} // namespace WebCore
#endif // !ENABLE(INSPECTOR)
diff --git a/Source/WebCore/bindings/js/ScriptGCEvent.h b/Source/WebCore/bindings/js/ScriptGCEvent.h
index 86d4f68..6614b8e 100644
--- a/Source/WebCore/bindings/js/ScriptGCEvent.h
+++ b/Source/WebCore/bindings/js/ScriptGCEvent.h
@@ -42,7 +42,7 @@ class ScriptGCEvent
public:
static void addEventListener(ScriptGCEventListener*) { }
static void removeEventListener(ScriptGCEventListener*) { }
- static void getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize);
+ static void getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize, size_t& heapSizeLimit);
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/ScriptObject.cpp b/Source/WebCore/bindings/js/ScriptObject.cpp
index e06eccb..b5c1f01 100644
--- a/Source/WebCore/bindings/js/ScriptObject.cpp
+++ b/Source/WebCore/bindings/js/ScriptObject.cpp
@@ -62,7 +62,7 @@ static bool handleException(ScriptState* scriptState)
bool ScriptGlobalObject::set(ScriptState* scriptState, const char* name, const ScriptObject& value)
{
JSLock lock(SilenceAssertionsOnly);
- scriptState->lexicalGlobalObject()->putDirect(Identifier(scriptState, name), value.jsObject());
+ scriptState->lexicalGlobalObject()->putDirect(scriptState->globalData(), Identifier(scriptState, name), value.jsObject());
return handleException(scriptState);
}
@@ -71,7 +71,7 @@ bool ScriptGlobalObject::set(ScriptState* scriptState, const char* name, Inspect
{
JSLock lock(SilenceAssertionsOnly);
JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
- globalObject->putDirect(Identifier(scriptState, name), toJS(scriptState, globalObject, value));
+ globalObject->putDirect(scriptState->globalData(), Identifier(scriptState, name), toJS(scriptState, globalObject, value));
return handleException(scriptState);
}
@@ -79,7 +79,7 @@ bool ScriptGlobalObject::set(ScriptState* scriptState, const char* name, Injecte
{
JSLock lock(SilenceAssertionsOnly);
JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
- globalObject->putDirect(Identifier(scriptState, name), toJS(scriptState, globalObject, value));
+ globalObject->putDirect(scriptState->globalData(), Identifier(scriptState, name), toJS(scriptState, globalObject, value));
return handleException(scriptState);
}
#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebCore/bindings/js/ScriptProfiler.cpp b/Source/WebCore/bindings/js/ScriptProfiler.cpp
index 62ae9ba..f372c3c 100644
--- a/Source/WebCore/bindings/js/ScriptProfiler.cpp
+++ b/Source/WebCore/bindings/js/ScriptProfiler.cpp
@@ -46,11 +46,6 @@ PassRefPtr<ScriptProfile> ScriptProfiler::stop(ScriptState* state, const String&
return ScriptProfile::create(profile);
}
-bool ScriptProfiler::isProfilerAlwaysEnabled()
-{
- return false;
-}
-
} // namespace WebCore
#endif // ENABLE(JAVASCRIPT_DEBUGGER)
diff --git a/Source/WebCore/bindings/js/ScriptProfiler.h b/Source/WebCore/bindings/js/ScriptProfiler.h
index d4dd606..d8ad482 100644
--- a/Source/WebCore/bindings/js/ScriptProfiler.h
+++ b/Source/WebCore/bindings/js/ScriptProfiler.h
@@ -38,10 +38,18 @@ namespace WebCore {
class ScriptProfiler {
WTF_MAKE_NONCOPYABLE(ScriptProfiler);
public:
+ class HeapSnapshotProgress {
+ public:
+ virtual ~HeapSnapshotProgress() { }
+ virtual void Start(int totalWork) = 0;
+ virtual void Worked(int workDone) = 0;
+ virtual void Done() = 0;
+ virtual bool isCanceled() = 0;
+ };
+
static void start(ScriptState* state, const String& title);
static PassRefPtr<ScriptProfile> stop(ScriptState* state, const String& title);
- static PassRefPtr<ScriptHeapSnapshot> takeHeapSnapshot(const String&) { return 0; }
- static bool isProfilerAlwaysEnabled();
+ static PassRefPtr<ScriptHeapSnapshot> takeHeapSnapshot(const String&, HeapSnapshotProgress*) { return 0; }
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/js/SerializedScriptValue.cpp b/Source/WebCore/bindings/js/SerializedScriptValue.cpp
index b02a4bb..f721334 100644
--- a/Source/WebCore/bindings/js/SerializedScriptValue.cpp
+++ b/Source/WebCore/bindings/js/SerializedScriptValue.cpp
@@ -1040,14 +1040,14 @@ private:
void putProperty(JSArray* array, unsigned index, JSValue value)
{
if (array->canSetIndex(index))
- array->setIndex(index, value);
+ array->setIndex(m_exec->globalData(), index, value);
else
array->put(m_exec, index, value);
}
void putProperty(JSObject* object, const Identifier& property, JSValue value)
{
- object->putDirect(property, value);
+ object->putDirect(m_exec->globalData(), property, value);
}
bool readFile(RefPtr<File>& file)
diff --git a/Source/WebCore/bindings/js/WorkerScriptController.cpp b/Source/WebCore/bindings/js/WorkerScriptController.cpp
index 5872b2e..0c89632 100644
--- a/Source/WebCore/bindings/js/WorkerScriptController.cpp
+++ b/Source/WebCore/bindings/js/WorkerScriptController.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2011 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -80,8 +81,8 @@ void WorkerScriptController::initScript()
RefPtr<Structure> structure = JSDedicatedWorkerContext::createStructure(dedicatedContextPrototype);
m_workerContextWrapper = new (m_globalData.get()) JSDedicatedWorkerContext(structure.release(), m_workerContext->toDedicatedWorkerContext());
- workerContextPrototype->putAnonymousValue(0, m_workerContextWrapper);
- dedicatedContextPrototype->putAnonymousValue(0, m_workerContextWrapper);
+ workerContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper);
+ dedicatedContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper);
#if ENABLE(SHARED_WORKERS)
} else {
ASSERT(m_workerContext->isSharedWorkerContext());
@@ -90,8 +91,8 @@ void WorkerScriptController::initScript()
RefPtr<Structure> structure = JSSharedWorkerContext::createStructure(sharedContextPrototype);
m_workerContextWrapper = new (m_globalData.get()) JSSharedWorkerContext(structure.release(), m_workerContext->toSharedWorkerContext());
- workerContextPrototype->putAnonymousValue(0, m_workerContextWrapper);
- sharedContextPrototype->putAnonymousValue(0, m_workerContextWrapper);
+ workerContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper);
+ sharedContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper);
#endif
}
}
@@ -131,8 +132,15 @@ ScriptValue WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode,
if (comp.complType() == Normal || comp.complType() == ReturnValue)
return comp.value();
- if (comp.complType() == Throw)
- *exception = comp.value();
+ if (comp.complType() == Throw) {
+ String errorMessage;
+ int lineNumber = 0;
+ String sourceURL = sourceCode.url().string();
+ if (m_workerContext->sanitizeScriptError(errorMessage, lineNumber, sourceURL))
+ *exception = ScriptValue(throwError(exec, createError(exec, errorMessage.impl())));
+ else
+ *exception = comp.value();
+ }
return JSValue();
}
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm b/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm
index 9b3f21e..7d3d613 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm
@@ -233,6 +233,7 @@ sub GetCPPType
return "int" if $type eq "long";
return "unsigned" if $name eq "unsigned long";
return "unsigned short" if $type eq "CompareHow";
+ return "double" if $name eq "Date";
if ($codeGenerator->IsStringType($type)) {
if ($useConstReference) {
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
index abef04e..d2309e9 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -1434,7 +1434,7 @@ sub GenerateImplementation
push(@implContent, "{\n");
if ($numCachedAttributes > 0) {
push(@implContent, " for (unsigned i = Base::AnonymousSlotCount; i < AnonymousSlotCount; i++)\n");
- push(@implContent, " putAnonymousValue(i, JSValue());\n");
+ push(@implContent, " putAnonymousValue(globalObject->globalData(), i, JSValue());\n");
}
push(@implContent, "}\n\n");
@@ -1602,7 +1602,7 @@ sub GenerateImplementation
}
}
- push(@implContent, " castedThis->putAnonymousValue(" . $className . "::" . $attribute->signature->name . "Slot, result);\n") if ($attribute->signature->extendedAttributes->{"CachedAttribute"});
+ push(@implContent, " castedThis->putAnonymousValue(exec->globalData(), " . $className . "::" . $attribute->signature->name . "Slot, result);\n") if ($attribute->signature->extendedAttributes->{"CachedAttribute"});
push(@implContent, " return result;\n");
} else {
@@ -1735,13 +1735,13 @@ sub GenerateImplementation
}
push(@implContent, " // Shadowing a built-in constructor\n");
if ($interfaceName eq "DOMWindow" && $className eq "JSblah") {
- push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->propertyNames().constructor, value);\n");
+ push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->globalData(), exec->propertyNames().constructor, value);\n");
} else {
- push(@implContent, " static_cast<$className*>(thisObject)->putDirect(Identifier(exec, \"$name\"), value);\n");
+ push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->globalData(), Identifier(exec, \"$name\"), value);\n");
}
} elsif ($attribute->signature->extendedAttributes->{"Replaceable"}) {
push(@implContent, " // Shadowing a built-in object\n");
- push(@implContent, " static_cast<$className*>(thisObject)->putDirect(Identifier(exec, \"$name\"), value);\n");
+ push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->globalData(), Identifier(exec, \"$name\"), value);\n");
} else {
push(@implContent, " $className* castedThis = static_cast<$className*>(thisObject);\n");
push(@implContent, " $implType* imp = static_cast<$implType*>(castedThis->impl());\n");
@@ -1824,9 +1824,9 @@ sub GenerateImplementation
push(@implContent, " // Shadowing a built-in constructor\n");
if ($interfaceName eq "DOMWindow") {
- push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->propertyNames().constructor, value);\n");
+ push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->globalData(), exec->propertyNames().constructor, value);\n");
} else {
- push(@implContent, " static_cast<$className*>(thisObject)->putDirect(Identifier(exec, \"$name\"), value);\n");
+ push(@implContent, " static_cast<$className*>(thisObject)->putDirect(exec->globalData(), Identifier(exec, \"$name\"), value);\n");
}
push(@implContent, "}\n");
push(@implContent, "\n");
@@ -2942,11 +2942,11 @@ sub GenerateConstructorDefinition
push(@$outputArray, " : DOMConstructorObject(${constructorClassName}::createStructure(globalObject->objectPrototype()), globalObject)\n");
push(@$outputArray, "{\n");
if ($interfaceName eq "DOMWindow") {
- push(@$outputArray, " putDirect(exec->propertyNames().prototype, globalObject->prototype(), DontDelete | ReadOnly);\n");
+ push(@$outputArray, " putDirect(exec->globalData(), exec->propertyNames().prototype, globalObject->prototype(), DontDelete | ReadOnly);\n");
} else {
- push(@$outputArray, " putDirect(exec->propertyNames().prototype, ${protoClassName}::self(exec, globalObject), DontDelete | ReadOnly);\n");
+ push(@$outputArray, " putDirect(exec->globalData(), exec->propertyNames().prototype, ${protoClassName}::self(exec, globalObject), DontDelete | ReadOnly);\n");
}
- push(@$outputArray, " putDirect(exec->propertyNames().length, jsNumber(${numberOfconstructParameters}), ReadOnly | DontDelete | DontEnum);\n") if $numberOfconstructParameters;
+ push(@$outputArray, " putDirect(exec->globalData(), exec->propertyNames().length, jsNumber(${numberOfconstructParameters}), ReadOnly | DontDelete | DontEnum);\n") if $numberOfconstructParameters;
push(@$outputArray, "}\n\n");
push(@$outputArray, "bool ${constructorClassName}::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)\n");
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 7d36db1..f393230 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -2393,7 +2393,7 @@ END
@args = ();
foreach my $param (@params) {
my $paramName = $param->name;
- push(@implContent, " v8::Handle<v8::Value> ${paramName}Handle = toV8(${paramName});\n");
+ push(@implContent, " v8::Handle<v8::Value> ${paramName}Handle = " . NativeToJSValue($param, $paramName) . ";\n");
push(@implContent, " if (${paramName}Handle.IsEmpty()) {\n");
push(@implContent, " CRASH();\n");
push(@implContent, " return true;\n");
@@ -2565,6 +2565,7 @@ sub IsActiveDomType
return 1 if $type eq "Worker";
return 1 if $type eq "SharedWorker";
return 1 if $type eq "IDBRequest";
+ return 1 if $type eq "IDBTransaction";
return 1 if $type eq "FileReader";
return 1 if $type eq "FileWriter";
return 0;
@@ -2832,6 +2833,8 @@ sub GetNativeType
return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener";
+ return "RefPtr<DOMStringList>" if $type eq "DOMStringList";
+
# Default, assume native type is a pointer with same type name as idl type
return "${type}*";
}
@@ -2885,6 +2888,7 @@ sub JSValueToNative
return "static_cast<Range::CompareHow>($value->Int32Value())" if $type eq "CompareHow";
return "static_cast<SVGPaint::SVGPaintType>($value->ToInt32()->Int32Value())" if $type eq "SVGPaintType";
return "toWebCoreDate($value)" if $type eq "Date";
+ return "v8ValueToWebCoreDOMStringList($value)" if $type eq "DOMStringList";
if ($type eq "DOMString" or $type eq "DOMUserData") {
return $value;
@@ -3086,76 +3090,81 @@ sub IsDOMNodeType
}
-sub ReturnNativeToJSValue
+sub NativeToJSValue
{
my $signature = shift;
my $value = shift;
my $indent = shift;
my $type = GetTypeFromSignature($signature);
- return "return v8Boolean($value)" if $type eq "boolean";
- return "return v8::Handle<v8::Value>()" if $type eq "void"; # equivalent to v8::Undefined()
+ return "v8Boolean($value)" if $type eq "boolean";
+ return "v8::Handle<v8::Value>()" if $type eq "void"; # equivalent to v8::Undefined()
# HTML5 says that unsigned reflected attributes should be in the range
# [0, 2^31). When a value isn't in this range, a default value (or 0)
# should be returned instead.
if ($signature->extendedAttributes->{"Reflect"} and ($type eq "unsigned long" or $type eq "unsigned short")) {
$value =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g;
- return "return v8::Integer::NewFromUnsigned(std::max(0, " . $value . "))";
+ return "v8::Integer::NewFromUnsigned(std::max(0, " . $value . "))";
}
# For all the types where we use 'int' as the representation type,
# we use Integer::New which has a fast Smi conversion check.
my $nativeType = GetNativeType($type);
- return "return v8::Integer::New($value)" if $nativeType eq "int";
- return "return v8::Integer::NewFromUnsigned($value)" if $nativeType eq "unsigned";
+ return "v8::Integer::New($value)" if $nativeType eq "int";
+ return "v8::Integer::NewFromUnsigned($value)" if $nativeType eq "unsigned";
- return "return v8DateOrNull($value)" if $type eq "Date";
+ return "v8DateOrNull($value)" if $type eq "Date";
# long long and unsigned long long are not representable in ECMAScript.
- return "return v8::Number::New(static_cast<double>($value))" if $type eq "long long" or $type eq "unsigned long long" or $type eq "DOMTimeStamp";
- return "return v8::Number::New($value)" if $codeGenerator->IsPrimitiveType($type) or $type eq "SVGPaintType";
- return "return $value.v8Value()" if $nativeType eq "ScriptValue";
+ return "v8::Number::New(static_cast<double>($value))" if $type eq "long long" or $type eq "unsigned long long" or $type eq "DOMTimeStamp";
+ return "v8::Number::New($value)" if $codeGenerator->IsPrimitiveType($type) or $type eq "SVGPaintType";
+ return "$value.v8Value()" if $nativeType eq "ScriptValue";
if ($codeGenerator->IsStringType($type)) {
my $conv = $signature->extendedAttributes->{"ConvertNullStringTo"};
if (defined $conv) {
- return "return v8StringOrNull($value)" if $conv eq "Null";
- return "return v8StringOrUndefined($value)" if $conv eq "Undefined";
- return "return v8StringOrFalse($value)" if $conv eq "False";
+ return "v8StringOrNull($value)" if $conv eq "Null";
+ return "v8StringOrUndefined($value)" if $conv eq "Undefined";
+ return "v8StringOrFalse($value)" if $conv eq "False";
die "Unknown value for ConvertNullStringTo extended attribute";
}
$conv = $signature->extendedAttributes->{"ConvertScriptString"};
- return "return v8StringOrNull($value)" if $conv;
- return "return v8String($value)";
+ return "v8StringOrNull($value)" if $conv;
+ return "v8String($value)";
}
AddIncludesForType($type);
# special case for non-DOM node interfaces
if (IsDOMNodeType($type)) {
- return "return toV8(${value}" . ($signature->extendedAttributes->{"ReturnsNew"} ? ", true)" : ")");
+ return "toV8(${value}" . ($signature->extendedAttributes->{"ReturnsNew"} ? ", true)" : ")");
}
if ($type eq "EventTarget") {
- return "return V8DOMWrapper::convertEventTargetToV8Object($value)";
+ return "V8DOMWrapper::convertEventTargetToV8Object($value)";
}
if ($type eq "EventListener") {
$implIncludes{"V8AbstractEventListener.h"} = 1;
- return "return ${value} ? v8::Handle<v8::Value>(static_cast<V8AbstractEventListener*>(${value})->getListenerObject(imp->scriptExecutionContext())) : v8::Handle<v8::Value>(v8::Null())";
+ return "${value} ? v8::Handle<v8::Value>(static_cast<V8AbstractEventListener*>(${value})->getListenerObject(imp->scriptExecutionContext())) : v8::Handle<v8::Value>(v8::Null())";
}
if ($type eq "SerializedScriptValue") {
$implIncludes{"$type.h"} = 1;
- return "return $value->deserialize()";
+ return "$value->deserialize()";
}
$implIncludes{"wtf/RefCounted.h"} = 1;
$implIncludes{"wtf/RefPtr.h"} = 1;
$implIncludes{"wtf/GetPtr.h"} = 1;
- return "return toV8($value)";
+ return "toV8($value)";
+}
+
+sub ReturnNativeToJSValue
+{
+ return "return " . NativeToJSValue(@_);
}
# Internal helper
diff --git a/Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp b/Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp
index 36a5ca2..057302d 100644
--- a/Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp
+++ b/Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp
@@ -29,6 +29,9 @@
#include "V8CustomVoidCallback.h"
#include "V8DOMString.h"
#include "V8Proxy.h"
+#include <wtf/GetPtr.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
#include <wtf/Assertions.h>
@@ -113,7 +116,7 @@ bool V8TestCallback::callbackWithClass2Param(Class2* class2Param, const String&
CRASH();
return true;
}
- v8::Handle<v8::Value> strArgHandle = toV8(strArg);
+ v8::Handle<v8::Value> strArgHandle = v8String(strArg);
if (strArgHandle.IsEmpty()) {
CRASH();
return true;
diff --git a/Source/WebCore/bindings/v8/DOMDataStore.cpp b/Source/WebCore/bindings/v8/DOMDataStore.cpp
index 5393bd9..21b47a4 100644
--- a/Source/WebCore/bindings/v8/DOMDataStore.cpp
+++ b/Source/WebCore/bindings/v8/DOMDataStore.cpp
@@ -173,20 +173,6 @@ void DOMDataStore::weakNodeCallback(v8::Persistent<v8::Value> value, void* domOb
node->deref(); // Nobody overrides Node::deref so it's safe
}
-bool DOMDataStore::IntrusiveDOMWrapperMap::removeIfPresent(Node* obj, v8::Persistent<v8::Object> value)
-{
- ASSERT(obj);
- v8::Persistent<v8::Object>* entry = obj->wrapper();
- if (!entry)
- return false;
- if (*entry != value)
- return false;
- obj->clearWrapper();
- m_table.remove(entry);
- value.Dispose();
- return true;
-}
-
#if ENABLE(SVG)
void DOMDataStore::weakSVGElementInstanceCallback(v8::Persistent<v8::Value> v8Object, void* domObject)
diff --git a/Source/WebCore/bindings/v8/DOMDataStore.h b/Source/WebCore/bindings/v8/DOMDataStore.h
index dbead9c..ffb9df5 100644
--- a/Source/WebCore/bindings/v8/DOMDataStore.h
+++ b/Source/WebCore/bindings/v8/DOMDataStore.h
@@ -51,95 +51,6 @@ namespace WebCore {
typedef WTF::Vector<DOMDataStore*> DOMDataList;
- template <class T, int CHUNK_SIZE, class Traits>
- class ChunkedTable {
- public:
- ChunkedTable() : m_chunks(0), m_current(0), m_last(0) { }
-
- T* add(T element)
- {
- if (m_current == m_last) {
- m_chunks = new Chunk(m_chunks);
- m_current = m_chunks->m_entries;
- m_last = m_current + CHUNK_SIZE;
- }
- ASSERT((m_chunks->m_entries <= m_current) && (m_current < m_last));
- T* p = m_current++;
- *p = element;
- return p;
- }
-
- void remove(T* element)
- {
- ASSERT(element);
- ASSERT(m_current > m_chunks->m_entries);
- m_current--;
- if (element != m_current)
- Traits::move(element, m_current);
- if (m_current == m_chunks->m_entries) {
- Chunk* toDelete = m_chunks;
- m_chunks = toDelete->m_previous;
- m_current = m_last = m_chunks ? m_chunks->m_entries + CHUNK_SIZE : 0;
- delete toDelete;
- }
- ASSERT(!m_chunks || ((m_chunks->m_entries < m_current) && (m_current <= m_last)));
- }
-
- void clear()
- {
- if (!m_chunks)
- return;
-
- clearEntries(m_chunks->m_entries, m_current);
- Chunk* last = m_chunks;
- while (true) {
- Chunk* previous = last->m_previous;
- if (!previous)
- break;
- delete last;
- clearEntries(previous->m_entries, previous->m_entries + CHUNK_SIZE);
- last = previous;
- }
-
- m_chunks = last;
- m_current = m_chunks->m_entries;
- m_last = m_current + CHUNK_SIZE;
- }
-
- void visit(DOMDataStore* store, typename Traits::Visitor* visitor)
- {
- if (!m_chunks)
- return;
-
- visitEntries(store, m_chunks->m_entries, m_current, visitor);
- for (Chunk* chunk = m_chunks->m_previous; chunk; chunk = chunk->m_previous)
- visitEntries(store, chunk->m_entries, chunk->m_entries + CHUNK_SIZE, visitor);
- }
-
- private:
- struct Chunk {
- explicit Chunk(Chunk* previous) : m_previous(previous) { }
- Chunk* const m_previous;
- T m_entries[CHUNK_SIZE];
- };
-
- static void clearEntries(T* first, T* last)
- {
- for (T* entry = first; entry < last; entry++)
- Traits::clear(entry);
- }
-
- static void visitEntries(DOMDataStore* store, T* first, T* last, typename Traits::Visitor* visitor)
- {
- for (T* entry = first; entry < last; entry++)
- Traits::visit(store, entry, visitor);
- }
-
- Chunk* m_chunks;
- T* m_current;
- T* m_last;
- };
-
// DOMDataStore
//
// DOMDataStore is the backing store that holds the maps between DOM objects
@@ -161,79 +72,6 @@ namespace WebCore {
#endif
};
- class IntrusiveDOMWrapperMap : public AbstractWeakReferenceMap<Node, v8::Object> {
- public:
- IntrusiveDOMWrapperMap(v8::WeakReferenceCallback callback)
- : AbstractWeakReferenceMap<Node, v8::Object>(callback) { }
-
- virtual v8::Persistent<v8::Object> get(Node* obj)
- {
- v8::Persistent<v8::Object>* wrapper = obj->wrapper();
- return wrapper ? *wrapper : v8::Persistent<v8::Object>();
- }
-
- virtual void set(Node* obj, v8::Persistent<v8::Object> wrapper)
- {
- ASSERT(obj);
- ASSERT(!obj->wrapper());
- v8::Persistent<v8::Object>* entry = m_table.add(wrapper);
- obj->setWrapper(entry);
- wrapper.MakeWeak(obj, weakReferenceCallback());
- }
-
- virtual bool contains(Node* obj)
- {
- return obj->wrapper();
- }
-
- virtual void visit(DOMDataStore* store, Visitor* visitor)
- {
- m_table.visit(store, visitor);
- }
-
- virtual bool removeIfPresent(Node*, v8::Persistent<v8::Object>);
-
- virtual void clear()
- {
- m_table.clear();
- }
-
- private:
- static int const numberOfEntries = (1 << 10) - 1;
-
- struct ChunkedTableTraits {
- typedef IntrusiveDOMWrapperMap::Visitor Visitor;
-
- static void move(v8::Persistent<v8::Object>* target, v8::Persistent<v8::Object>* source)
- {
- *target = *source;
- Node* node = V8Node::toNative(*target);
- ASSERT(node);
- node->setWrapper(target);
- }
-
- static void clear(v8::Persistent<v8::Object>* entry)
- {
- Node* node = V8Node::toNative(*entry);
- ASSERT(node->wrapper() == entry);
-
- node->clearWrapper();
- entry->Dispose();
- }
-
- static void visit(DOMDataStore* store, v8::Persistent<v8::Object>* entry, Visitor* visitor)
- {
- Node* node = V8Node::toNative(*entry);
- ASSERT(node->wrapper() == entry);
-
- visitor->visitDOMWrapper(store, node, *entry);
- }
- };
-
- typedef ChunkedTable<v8::Persistent<v8::Object>, numberOfEntries, ChunkedTableTraits> Table;
- Table m_table;
- };
-
DOMDataStore(DOMData*);
virtual ~DOMDataStore();
diff --git a/Source/WebCore/bindings/v8/DebuggerScript.js b/Source/WebCore/bindings/v8/DebuggerScript.js
index eb9de2f..1798352 100644
--- a/Source/WebCore/bindings/v8/DebuggerScript.js
+++ b/Source/WebCore/bindings/v8/DebuggerScript.js
@@ -91,15 +91,15 @@ DebuggerScript._formatScript = function(script)
DebuggerScript.setBreakpoint = function(execState, args)
{
- args.lineNumber = DebuggerScript._webkitToV8LineNumber(args.lineNumber);
- var breakId = Debug.setScriptBreakPointById(args.scriptId, args.lineNumber, 0 /* column */, args.condition);
+ var breakId = Debug.setScriptBreakPointById(args.scriptId, args.lineNumber, args.columnNumber, args.condition);
if (!args.enabled)
Debug.disableScriptBreakPoint(breakId);
var locations = Debug.findBreakPointActualLocations(breakId);
if (!locations.length)
return undefined;
- args.lineNumber = DebuggerScript._v8ToWebkitLineNumber(locations[0].line);
+ args.lineNumber = locations[0].line;
+ args.columnNumber = locations[0].column;
return breakId.toString();
}
@@ -263,11 +263,6 @@ DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror, callerFrame)
};
}
-DebuggerScript._webkitToV8LineNumber = function(line)
-{
- return line - 1;
-};
-
DebuggerScript._v8ToWebkitLineNumber = function(line)
{
return line + 1;
diff --git a/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h b/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h
new file mode 100644
index 0000000..5c066f0
--- /dev/null
+++ b/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IntrusiveDOMWrapperMap_h
+#define IntrusiveDOMWrapperMap_h
+
+#include "DOMDataStore.h"
+#include "V8Node.h"
+
+namespace WebCore {
+
+template <class T, int CHUNK_SIZE, class Traits>
+class ChunkedTable {
+ public:
+ ChunkedTable() : m_chunks(0), m_current(0), m_last(0) { }
+
+ T* add(T element)
+ {
+ if (m_current == m_last) {
+ m_chunks = new Chunk(m_chunks);
+ m_current = m_chunks->m_entries;
+ m_last = m_current + CHUNK_SIZE;
+ }
+ ASSERT((m_chunks->m_entries <= m_current) && (m_current < m_last));
+ T* p = m_current++;
+ *p = element;
+ return p;
+ }
+
+ void remove(T* element)
+ {
+ ASSERT(element);
+ ASSERT(m_current > m_chunks->m_entries);
+ m_current--;
+ if (element != m_current)
+ Traits::move(element, m_current);
+ if (m_current == m_chunks->m_entries) {
+ Chunk* toDelete = m_chunks;
+ m_chunks = toDelete->m_previous;
+ m_current = m_last = m_chunks ? m_chunks->m_entries + CHUNK_SIZE : 0;
+ delete toDelete;
+ }
+ ASSERT(!m_chunks || ((m_chunks->m_entries < m_current) && (m_current <= m_last)));
+ }
+
+ void clear()
+ {
+ if (!m_chunks)
+ return;
+
+ clearEntries(m_chunks->m_entries, m_current);
+ Chunk* last = m_chunks;
+ while (true) {
+ Chunk* previous = last->m_previous;
+ if (!previous)
+ break;
+ delete last;
+ clearEntries(previous->m_entries, previous->m_entries + CHUNK_SIZE);
+ last = previous;
+ }
+
+ m_chunks = last;
+ m_current = m_chunks->m_entries;
+ m_last = m_current + CHUNK_SIZE;
+ }
+
+ void visit(DOMDataStore* store, typename Traits::Visitor* visitor)
+ {
+ if (!m_chunks)
+ return;
+
+ visitEntries(store, m_chunks->m_entries, m_current, visitor);
+ for (Chunk* chunk = m_chunks->m_previous; chunk; chunk = chunk->m_previous)
+ visitEntries(store, chunk->m_entries, chunk->m_entries + CHUNK_SIZE, visitor);
+ }
+
+ private:
+ struct Chunk {
+ explicit Chunk(Chunk* previous) : m_previous(previous) { }
+ Chunk* const m_previous;
+ T m_entries[CHUNK_SIZE];
+ };
+
+ static void clearEntries(T* first, T* last)
+ {
+ for (T* entry = first; entry < last; entry++)
+ Traits::clear(entry);
+ }
+
+ static void visitEntries(DOMDataStore* store, T* first, T* last, typename Traits::Visitor* visitor)
+ {
+ for (T* entry = first; entry < last; entry++)
+ Traits::visit(store, entry, visitor);
+ }
+
+ Chunk* m_chunks;
+ T* m_current;
+ T* m_last;
+};
+
+
+class IntrusiveDOMWrapperMap : public AbstractWeakReferenceMap<Node, v8::Object> {
+public:
+ IntrusiveDOMWrapperMap(v8::WeakReferenceCallback callback)
+ : AbstractWeakReferenceMap<Node, v8::Object>(callback) { }
+
+ virtual v8::Persistent<v8::Object> get(Node* obj)
+ {
+ v8::Persistent<v8::Object>* wrapper = obj->wrapper();
+ return wrapper ? *wrapper : v8::Persistent<v8::Object>();
+ }
+
+ virtual void set(Node* obj, v8::Persistent<v8::Object> wrapper)
+ {
+ ASSERT(obj);
+ ASSERT(!obj->wrapper());
+ v8::Persistent<v8::Object>* entry = m_table.add(wrapper);
+ obj->setWrapper(entry);
+ wrapper.MakeWeak(obj, weakReferenceCallback());
+ }
+
+ virtual bool contains(Node* obj)
+ {
+ return obj->wrapper();
+ }
+
+ virtual void visit(DOMDataStore* store, Visitor* visitor)
+ {
+ m_table.visit(store, visitor);
+ }
+
+ virtual bool removeIfPresent(Node* obj, v8::Persistent<v8::Object> value)
+ {
+ ASSERT(obj);
+ v8::Persistent<v8::Object>* entry = obj->wrapper();
+ if (!entry)
+ return false;
+ if (*entry != value)
+ return false;
+ obj->clearWrapper();
+ m_table.remove(entry);
+ value.Dispose();
+ return true;
+ }
+
+
+ virtual void clear()
+ {
+ m_table.clear();
+ }
+
+private:
+ static int const numberOfEntries = (1 << 10) - 1;
+
+ struct ChunkedTableTraits {
+ typedef IntrusiveDOMWrapperMap::Visitor Visitor;
+
+ static void move(v8::Persistent<v8::Object>* target, v8::Persistent<v8::Object>* source)
+ {
+ *target = *source;
+ Node* node = V8Node::toNative(*target);
+ ASSERT(node);
+ node->setWrapper(target);
+ }
+
+ static void clear(v8::Persistent<v8::Object>* entry)
+ {
+ Node* node = V8Node::toNative(*entry);
+ ASSERT(node->wrapper() == entry);
+
+ node->clearWrapper();
+ entry->Dispose();
+ }
+
+ static void visit(DOMDataStore* store, v8::Persistent<v8::Object>* entry, Visitor* visitor)
+ {
+ Node* node = V8Node::toNative(*entry);
+ ASSERT(node->wrapper() == entry);
+
+ visitor->visitDOMWrapper(store, node, *entry);
+ }
+ };
+
+ typedef ChunkedTable<v8::Persistent<v8::Object>, numberOfEntries, ChunkedTableTraits> Table;
+ Table m_table;
+};
+
+} // namespace WebCore
+
+#endif
diff --git a/Source/WebCore/bindings/v8/NPV8Object.cpp b/Source/WebCore/bindings/v8/NPV8Object.cpp
index e4be0d8..0ecb3c7 100644
--- a/Source/WebCore/bindings/v8/NPV8Object.cpp
+++ b/Source/WebCore/bindings/v8/NPV8Object.cpp
@@ -78,14 +78,14 @@ static void freeV8NPObject(NPObject* npObject)
free(v8NpObject);
}
-static v8::Handle<v8::Value>* createValueListFromVariantArgs(const NPVariant* arguments, uint32_t argumentCount, NPObject* owner)
+static PassOwnArrayPtr<v8::Handle<v8::Value> > createValueListFromVariantArgs(const NPVariant* arguments, uint32_t argumentCount, NPObject* owner)
{
- v8::Handle<v8::Value>* argv = new v8::Handle<v8::Value>[argumentCount];
+ OwnArrayPtr<v8::Handle<v8::Value> > argv = adoptArrayPtr(new v8::Handle<v8::Value>[argumentCount]);
for (uint32_t index = 0; index < argumentCount; index++) {
const NPVariant* arg = &arguments[index];
argv[index] = convertNPVariantToV8Object(arg, owner);
}
- return argv;
+ return argv.release();
}
// Create an identifier (null terminated utf8 char*) from the NPIdentifier.
@@ -188,7 +188,7 @@ bool _NPN_Invoke(NPP npp, NPObject* npObject, NPIdentifier methodName, const NPV
// Call the function object.
v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(functionObject);
- OwnArrayPtr<v8::Handle<v8::Value> > argv(createValueListFromVariantArgs(arguments, argumentCount, npObject));
+ OwnArrayPtr<v8::Handle<v8::Value> > argv = createValueListFromVariantArgs(arguments, argumentCount, npObject);
v8::Local<v8::Value> resultObject = proxy->callFunction(function, v8NpObject->v8Object, argumentCount, argv.get());
// If we had an error, return false. The spec is a little unclear here, but says "Returns true if the method was
@@ -237,7 +237,7 @@ bool _NPN_InvokeDefault(NPP npp, NPObject* npObject, const NPVariant* arguments,
V8Proxy* proxy = toV8Proxy(npObject);
ASSERT(proxy);
- OwnArrayPtr<v8::Handle<v8::Value> > argv(createValueListFromVariantArgs(arguments, argumentCount, npObject));
+ OwnArrayPtr<v8::Handle<v8::Value> > argv = createValueListFromVariantArgs(arguments, argumentCount, npObject);
resultObject = proxy->callFunction(function, functionObject, argumentCount, argv.get());
}
// If we had an error, return false. The spec is a little unclear here, but says "Returns true if the method was
@@ -537,7 +537,7 @@ bool _NPN_Construct(NPP npp, NPObject* npObject, const NPVariant* arguments, uin
V8Proxy* proxy = toV8Proxy(npObject);
ASSERT(proxy);
- OwnArrayPtr<v8::Handle<v8::Value> > argv(createValueListFromVariantArgs(arguments, argumentCount, npObject));
+ OwnArrayPtr<v8::Handle<v8::Value> > argv = createValueListFromVariantArgs(arguments, argumentCount, npObject);
resultObject = proxy->newInstance(ctor, argumentCount, argv.get());
}
diff --git a/Source/WebCore/bindings/v8/ScriptController.cpp b/Source/WebCore/bindings/v8/ScriptController.cpp
index fcbf40d..55f127b 100644
--- a/Source/WebCore/bindings/v8/ScriptController.cpp
+++ b/Source/WebCore/bindings/v8/ScriptController.cpp
@@ -61,7 +61,6 @@
#include "V8NPObject.h"
#include "V8Proxy.h"
#include "Widget.h"
-#include "XSSAuditor.h"
#include <wtf/StdLibExtras.h>
#include <wtf/text/CString.h>
@@ -117,7 +116,6 @@ ScriptController::ScriptController(Frame* frame)
#if ENABLE(NETSCAPE_PLUGIN_API)
, m_windowScriptNPObject(0)
#endif
- , m_XSSAuditor(new XSSAuditor(frame))
{
}
@@ -219,17 +217,12 @@ void ScriptController::evaluateInIsolatedWorld(unsigned worldID, const Vector<Sc
}
// Evaluate a script file in the environment of this proxy.
-ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode, ShouldAllowXSS shouldAllowXSS)
+ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode)
{
String sourceURL = sourceCode.url();
const String* savedSourceURL = m_sourceURL;
m_sourceURL = &sourceURL;
- if (shouldAllowXSS == DoNotAllowXSS && !m_XSSAuditor->canEvaluate(sourceCode.source())) {
- // This script is not safe to be evaluated.
- return ScriptValue();
- }
-
v8::HandleScope handleScope;
v8::Handle<v8::Context> v8Context = V8Proxy::mainWorldContext(m_proxy->frame());
if (v8Context.IsEmpty())
diff --git a/Source/WebCore/bindings/v8/ScriptController.h b/Source/WebCore/bindings/v8/ScriptController.h
index 7664846..b20e7fd 100644
--- a/Source/WebCore/bindings/v8/ScriptController.h
+++ b/Source/WebCore/bindings/v8/ScriptController.h
@@ -61,7 +61,6 @@ class Frame;
class HTMLPlugInElement;
class ScriptSourceCode;
class Widget;
-class XSSAuditor;
class ScriptController {
public:
@@ -72,8 +71,8 @@ public:
// or this accessor should be made JSProxy*
V8Proxy* proxy() { return m_proxy.get(); }
- ScriptValue executeScript(const ScriptSourceCode&, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
- ScriptValue executeScript(const String& script, bool forceUserGesture = false, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
+ ScriptValue executeScript(const ScriptSourceCode&);
+ ScriptValue executeScript(const String& script, bool forceUserGesture = false);
// Returns true if argument is a JavaScript URL.
bool executeIfJavaScriptURL(const KURL&, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL);
@@ -84,7 +83,7 @@ public:
// Evaluate a script file in the environment of this proxy.
// If succeeded, 'succ' is set to true and result is returned
// as a string.
- ScriptValue evaluate(const ScriptSourceCode&, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
+ ScriptValue evaluate(const ScriptSourceCode&);
void evaluateInIsolatedWorld(unsigned worldID, const Vector<ScriptSourceCode>&);
@@ -106,8 +105,6 @@ public:
ScriptController* windowShell(DOMWrapperWorld*) { return this; }
ScriptController* existingWindowShell(DOMWrapperWorld*) { return this; }
- XSSAuditor* xssAuditor() { return m_XSSAuditor.get(); }
-
void collectGarbage();
// Notify V8 that the system is running low on memory.
@@ -215,8 +212,6 @@ private:
#if ENABLE(NETSCAPE_PLUGIN_API)
NPObject* m_windowScriptNPObject;
#endif
- // The XSSAuditor associated with this ScriptController.
- OwnPtr<XSSAuditor> m_XSSAuditor;
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/v8/ScriptDebugServer.cpp b/Source/WebCore/bindings/v8/ScriptDebugServer.cpp
index 1c70a0e..cc7fba8 100644
--- a/Source/WebCore/bindings/v8/ScriptDebugServer.cpp
+++ b/Source/WebCore/bindings/v8/ScriptDebugServer.cpp
@@ -143,7 +143,7 @@ void ScriptDebugServer::removeListener(ScriptDebugListener* listener, Page* page
// FIXME: Remove all breakpoints set by the agent.
}
-String ScriptDebugServer::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber)
+String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, int* actualLineNumber, int* actualColumnNumber)
{
v8::HandleScope scope;
v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext();
@@ -151,15 +151,17 @@ String ScriptDebugServer::setBreakpoint(const String& sourceID, unsigned lineNum
v8::Local<v8::Object> args = v8::Object::New();
args->Set(v8::String::New("scriptId"), v8String(sourceID));
- args->Set(v8::String::New("lineNumber"), v8::Integer::New(lineNumber));
- args->Set(v8::String::New("condition"), v8String(condition));
- args->Set(v8::String::New("enabled"), v8::Boolean::New(enabled));
+ args->Set(v8::String::New("lineNumber"), v8::Integer::New(scriptBreakpoint.lineNumber));
+ args->Set(v8::String::New("columnNumber"), v8::Integer::New(scriptBreakpoint.columnNumber));
+ args->Set(v8::String::New("condition"), v8String(scriptBreakpoint.condition));
+ args->Set(v8::String::New("enabled"), v8::Boolean::New(scriptBreakpoint.enabled));
v8::Handle<v8::Function> setBreakpointFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("setBreakpoint")));
v8::Handle<v8::Value> breakpointId = v8::Debug::Call(setBreakpointFunction, args);
if (!breakpointId->IsString())
return "";
*actualLineNumber = args->Get(v8::String::New("lineNumber"))->Int32Value();
+ *actualColumnNumber = args->Get(v8::String::New("columnNumber"))->Int32Value();
return v8StringToWebCoreString(breakpointId->ToString());
}
@@ -340,11 +342,6 @@ void ScriptDebugServer::setEnabled(bool value)
m_enabled = value;
}
-bool ScriptDebugServer::isDebuggerAlwaysEnabled()
-{
- return m_enabled;
-}
-
void ScriptDebugServer::interruptAndRun(PassOwnPtr<Task> task)
{
v8::Debug::DebugBreakForCommand(new ClientDataImpl(task));
diff --git a/Source/WebCore/bindings/v8/ScriptDebugServer.h b/Source/WebCore/bindings/v8/ScriptDebugServer.h
index 8fa723f..af3d2ab 100644
--- a/Source/WebCore/bindings/v8/ScriptDebugServer.h
+++ b/Source/WebCore/bindings/v8/ScriptDebugServer.h
@@ -56,7 +56,7 @@ public:
void addListener(ScriptDebugListener*, Page*);
void removeListener(ScriptDebugListener*, Page*);
- String setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber);
+ String setBreakpoint(const String& sourceID, const ScriptBreakpoint&, int* actualLineNumber, int* actualColumnNumber);
void removeBreakpoint(const String& breakpointId);
void clearBreakpoints();
void setBreakpointsActivated(bool activated);
@@ -99,7 +99,6 @@ public:
PassRefPtr<JavaScriptCallFrame> currentCallFrame();
void setEnabled(bool);
- bool isDebuggerAlwaysEnabled();
class Task {
public:
diff --git a/Source/WebCore/bindings/v8/ScriptEventListener.cpp b/Source/WebCore/bindings/v8/ScriptEventListener.cpp
index b46fc5a..0d758d9 100644
--- a/Source/WebCore/bindings/v8/ScriptEventListener.cpp
+++ b/Source/WebCore/bindings/v8/ScriptEventListener.cpp
@@ -39,7 +39,6 @@
#include "DocumentParser.h"
#include "V8AbstractEventListener.h"
#include "V8Binding.h"
-#include "XSSAuditor.h"
namespace WebCore {
@@ -59,11 +58,6 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node* node, Attribu
if (!scriptController->canExecuteScripts(AboutToExecuteScript))
return 0;
- if (!scriptController->xssAuditor()->canCreateInlineEventListener(attr->localName().string(), attr->value())) {
- // This script is not safe to execute.
- return 0;
- }
-
position = scriptController->eventHandlerPosition();
sourceURL = node->document()->url().string();
}
@@ -84,11 +78,6 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attri
if (!scriptController->canExecuteScripts(AboutToExecuteScript))
return 0;
- if (!scriptController->xssAuditor()->canCreateInlineEventListener(attr->localName().string(), attr->value())) {
- // This script is not safe to execute.
- return 0;
- }
-
TextPosition0 position = scriptController->eventHandlerPosition();
String sourceURL = frame->document()->url().string();
return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld));
diff --git a/Source/WebCore/bindings/v8/ScriptFunctionCall.cpp b/Source/WebCore/bindings/v8/ScriptFunctionCall.cpp
index 3ea536e..aec742c 100644
--- a/Source/WebCore/bindings/v8/ScriptFunctionCall.cpp
+++ b/Source/WebCore/bindings/v8/ScriptFunctionCall.cpp
@@ -126,7 +126,7 @@ ScriptValue ScriptFunctionCall::call(bool& hadException, bool reportExceptions)
ASSERT(value->IsFunction());
v8::Local<v8::Function> function(v8::Function::Cast(*value));
- OwnArrayPtr<v8::Handle<v8::Value> > args(new v8::Handle<v8::Value>[m_arguments.size()]);
+ OwnArrayPtr<v8::Handle<v8::Value> > args = adoptArrayPtr(new v8::Handle<v8::Value>[m_arguments.size()]);
for (size_t i = 0; i < m_arguments.size(); ++i)
args[i] = m_arguments[i].v8Value();
@@ -159,7 +159,7 @@ ScriptObject ScriptFunctionCall::construct(bool& hadException, bool reportExcept
ASSERT(value->IsFunction());
v8::Local<v8::Function> constructor(v8::Function::Cast(*value));
- OwnArrayPtr<v8::Handle<v8::Value> > args(new v8::Handle<v8::Value>[m_arguments.size()]);
+ OwnArrayPtr<v8::Handle<v8::Value> > args = adoptArrayPtr(new v8::Handle<v8::Value>[m_arguments.size()]);
for (size_t i = 0; i < m_arguments.size(); ++i)
args[i] = m_arguments[i].v8Value();
@@ -193,7 +193,7 @@ ScriptValue ScriptCallback::call(bool& hadException)
v8::Handle<v8::Object> object = v8::Context::GetCurrent()->Global();
v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(m_function.v8Value());
- OwnArrayPtr<v8::Handle<v8::Value> > args(new v8::Handle<v8::Value>[m_arguments.size()]);
+ OwnArrayPtr<v8::Handle<v8::Value> > args = adoptArrayPtr(new v8::Handle<v8::Value>[m_arguments.size()]);
for (size_t i = 0; i < m_arguments.size(); ++i)
args[i] = m_arguments[i].v8Value();
diff --git a/Source/WebCore/bindings/v8/ScriptGCEvent.cpp b/Source/WebCore/bindings/v8/ScriptGCEvent.cpp
index a58a0cd..55a803f 100644
--- a/Source/WebCore/bindings/v8/ScriptGCEvent.cpp
+++ b/Source/WebCore/bindings/v8/ScriptGCEvent.cpp
@@ -66,12 +66,13 @@ void ScriptGCEvent::removeEventListener(ScriptGCEventListener* eventListener)
}
}
-void ScriptGCEvent::getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize)
+void ScriptGCEvent::getHeapSize(size_t& usedHeapSize, size_t& totalHeapSize, size_t& heapSizeLimit)
{
v8::HeapStatistics heapStatistics;
v8::V8::GetHeapStatistics(&heapStatistics);
usedHeapSize = heapStatistics.used_heap_size();
totalHeapSize = heapStatistics.total_heap_size();
+ heapSizeLimit = heapStatistics.heap_size_limit();
}
size_t ScriptGCEvent::getUsedHeapSize()
diff --git a/Source/WebCore/bindings/v8/ScriptGCEvent.h b/Source/WebCore/bindings/v8/ScriptGCEvent.h
index 80a5a38..2ffd940 100644
--- a/Source/WebCore/bindings/v8/ScriptGCEvent.h
+++ b/Source/WebCore/bindings/v8/ScriptGCEvent.h
@@ -45,7 +45,7 @@ class ScriptGCEvent
public:
static void addEventListener(ScriptGCEventListener*);
static void removeEventListener(ScriptGCEventListener*);
- static void getHeapSize(size_t&, size_t&);
+ static void getHeapSize(size_t&, size_t&, size_t&);
private:
typedef Vector<ScriptGCEventListener*> GCEventListeners;
static GCEventListeners s_eventListeners;
diff --git a/Source/WebCore/bindings/v8/ScriptProfiler.cpp b/Source/WebCore/bindings/v8/ScriptProfiler.cpp
index 02dea14..615dcfc 100644
--- a/Source/WebCore/bindings/v8/ScriptProfiler.cpp
+++ b/Source/WebCore/bindings/v8/ScriptProfiler.cpp
@@ -53,16 +53,41 @@ PassRefPtr<ScriptProfile> ScriptProfiler::stop(ScriptState* state, const String&
return profile ? ScriptProfile::create(profile) : 0;
}
-PassRefPtr<ScriptHeapSnapshot> ScriptProfiler::takeHeapSnapshot(const String& title)
+namespace {
+
+class ActivityControlAdapter : public v8::ActivityControl {
+public:
+ ActivityControlAdapter(ScriptProfiler::HeapSnapshotProgress* progress)
+ : m_progress(progress), m_firstReport(true) { }
+ ControlOption ReportProgressValue(int done, int total)
+ {
+ ControlOption result = m_progress->isCanceled() ? kAbort : kContinue;
+ if (m_firstReport) {
+ m_firstReport = false;
+ m_progress->Start(total);
+ } else
+ m_progress->Worked(done);
+ if (done >= total)
+ m_progress->Done();
+ return result;
+ }
+private:
+ ScriptProfiler::HeapSnapshotProgress* m_progress;
+ bool m_firstReport;
+};
+
+} // namespace
+
+PassRefPtr<ScriptHeapSnapshot> ScriptProfiler::takeHeapSnapshot(const String& title, HeapSnapshotProgress* control)
{
v8::HandleScope hs;
- const v8::HeapSnapshot* snapshot = v8::HeapProfiler::TakeSnapshot(v8String(title), v8::HeapSnapshot::kAggregated);
+ const v8::HeapSnapshot* snapshot = 0;
+ if (control) {
+ ActivityControlAdapter adapter(control);
+ snapshot = v8::HeapProfiler::TakeSnapshot(v8String(title), v8::HeapSnapshot::kFull, &adapter);
+ } else
+ snapshot = v8::HeapProfiler::TakeSnapshot(v8String(title), v8::HeapSnapshot::kAggregated);
return snapshot ? ScriptHeapSnapshot::create(snapshot) : 0;
}
-bool ScriptProfiler::isProfilerAlwaysEnabled()
-{
- return true;
-}
-
} // namespace WebCore
diff --git a/Source/WebCore/bindings/v8/ScriptProfiler.h b/Source/WebCore/bindings/v8/ScriptProfiler.h
index e0969e1..9016668 100644
--- a/Source/WebCore/bindings/v8/ScriptProfiler.h
+++ b/Source/WebCore/bindings/v8/ScriptProfiler.h
@@ -44,10 +44,18 @@ class InspectorObject;
class ScriptProfiler {
WTF_MAKE_NONCOPYABLE(ScriptProfiler);
public:
+ class HeapSnapshotProgress {
+ public:
+ virtual ~HeapSnapshotProgress() { }
+ virtual void Start(int totalWork) = 0;
+ virtual void Worked(int workDone) = 0;
+ virtual void Done() = 0;
+ virtual bool isCanceled() = 0;
+ };
+
static void start(ScriptState* state, const String& title);
static PassRefPtr<ScriptProfile> stop(ScriptState* state, const String& title);
- static PassRefPtr<ScriptHeapSnapshot> takeHeapSnapshot(const String& title);
- static bool isProfilerAlwaysEnabled();
+ static PassRefPtr<ScriptHeapSnapshot> takeHeapSnapshot(const String& title, HeapSnapshotProgress*);
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/v8/ScriptSourceCode.h b/Source/WebCore/bindings/v8/ScriptSourceCode.h
index 2478151..d7d1510 100644
--- a/Source/WebCore/bindings/v8/ScriptSourceCode.h
+++ b/Source/WebCore/bindings/v8/ScriptSourceCode.h
@@ -63,7 +63,12 @@ public:
const String& source() const { return m_source; }
CachedScript* cachedScript() const { return m_cachedScript.get(); }
- const KURL& url() const { return m_url; }
+ const KURL& url() const
+ {
+ if (m_cachedScript)
+ return m_cachedScript->response().url();
+ return m_url;
+ }
int startLine() const { return m_startPosition.m_line.oneBasedInt(); }
const TextPosition1& startPosition() const { return m_startPosition; }
diff --git a/Source/WebCore/bindings/v8/SerializedScriptValue.cpp b/Source/WebCore/bindings/v8/SerializedScriptValue.cpp
index 666e619..1c5e4e7 100644
--- a/Source/WebCore/bindings/v8/SerializedScriptValue.cpp
+++ b/Source/WebCore/bindings/v8/SerializedScriptValue.cpp
@@ -1118,12 +1118,15 @@ PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V
PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWire(String data)
{
- return adoptRef(new SerializedScriptValue(data, WireData));
+ return adoptRef(new SerializedScriptValue(data));
}
PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(String data)
{
- return adoptRef(new SerializedScriptValue(data, StringValue));
+ Writer writer;
+ writer.writeWebCoreString(data);
+ String wireData = StringImpl::adopt(writer.data());
+ return adoptRef(new SerializedScriptValue(wireData));
}
PassRefPtr<SerializedScriptValue> SerializedScriptValue::create()
@@ -1133,19 +1136,31 @@ PassRefPtr<SerializedScriptValue> SerializedScriptValue::create()
SerializedScriptValue* SerializedScriptValue::nullValue()
{
- DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, nullValue, (SerializedScriptValue::create()));
+ DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, nullValue, (0));
+ if (!nullValue) {
+ Writer writer;
+ writer.writeNull();
+ String wireData = StringImpl::adopt(writer.data());
+ nullValue = adoptRef(new SerializedScriptValue(wireData));
+ }
return nullValue.get();
}
SerializedScriptValue* SerializedScriptValue::undefinedValue()
{
- DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, undefinedValue, (SerializedScriptValue::create(v8::Undefined())));
+ DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, undefinedValue, (0));
+ if (!undefinedValue) {
+ Writer writer;
+ writer.writeUndefined();
+ String wireData = StringImpl::adopt(writer.data());
+ undefinedValue = adoptRef(new SerializedScriptValue(wireData));
+ }
return undefinedValue.get();
}
PassRefPtr<SerializedScriptValue> SerializedScriptValue::release()
{
- RefPtr<SerializedScriptValue> result = adoptRef(new SerializedScriptValue(m_data, WireData));
+ RefPtr<SerializedScriptValue> result = adoptRef(new SerializedScriptValue(m_data));
m_data = String().crossThreadString();
return result.release();
}
@@ -1167,16 +1182,9 @@ SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, bool&
m_data = String(StringImpl::adopt(writer.data())).crossThreadString();
}
-SerializedScriptValue::SerializedScriptValue(String data, StringDataMode mode)
+SerializedScriptValue::SerializedScriptValue(String wireData)
{
- if (mode == WireData)
- m_data = data.crossThreadString();
- else {
- ASSERT(mode == StringValue);
- Writer writer;
- writer.writeWebCoreString(data);
- m_data = String(StringImpl::adopt(writer.data())).crossThreadString();
- }
+ m_data = wireData.crossThreadString();
}
v8::Handle<v8::Value> SerializedScriptValue::deserialize()
diff --git a/Source/WebCore/bindings/v8/SerializedScriptValue.h b/Source/WebCore/bindings/v8/SerializedScriptValue.h
index ead9511..d0d8575 100644
--- a/Source/WebCore/bindings/v8/SerializedScriptValue.h
+++ b/Source/WebCore/bindings/v8/SerializedScriptValue.h
@@ -72,7 +72,7 @@ private:
SerializedScriptValue();
SerializedScriptValue(v8::Handle<v8::Value>, bool& didThrow);
- SerializedScriptValue(String data, StringDataMode mode);
+ explicit SerializedScriptValue(String wireData);
String m_data;
};
diff --git a/Source/WebCore/bindings/v8/StaticDOMDataStore.h b/Source/WebCore/bindings/v8/StaticDOMDataStore.h
index fb6aa42..940646e 100644
--- a/Source/WebCore/bindings/v8/StaticDOMDataStore.h
+++ b/Source/WebCore/bindings/v8/StaticDOMDataStore.h
@@ -32,6 +32,7 @@
#define StaticDOMDataStore_h
#include "DOMDataStore.h"
+#include "IntrusiveDOMWrapperMap.h"
namespace WebCore {
diff --git a/Source/WebCore/bindings/v8/V8Binding.cpp b/Source/WebCore/bindings/v8/V8Binding.cpp
index 52b23bd..2acd29a 100644
--- a/Source/WebCore/bindings/v8/V8Binding.cpp
+++ b/Source/WebCore/bindings/v8/V8Binding.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "V8Binding.h"
+#include "DOMStringList.h"
#include "Element.h"
#include "MathExtras.h"
#include "PlatformString.h"
@@ -412,6 +413,13 @@ String v8NonStringValueToWebCoreString(v8::Handle<v8::Value> object)
throwError(block.Exception());
return StringImpl::empty();
}
+ // This path is unexpected. However there is hypothesis that it
+ // might be combination of v8 and v8 bindings bugs. For now
+ // just bailout as we'll crash if attempt to convert empty handle into a string.
+ if (v8String.IsEmpty()) {
+ ASSERT_NOT_REACHED();
+ return StringImpl::empty();
+ }
return v8StringToWebCoreString<String>(v8String, DoNotExternalize);
}
@@ -578,4 +586,19 @@ void setElementStringAttr(const v8::AccessorInfo& info,
imp->setAttribute(name, v);
}
+PassRefPtr<DOMStringList> v8ValueToWebCoreDOMStringList(v8::Handle<v8::Value> value)
+{
+ v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(value));
+ if (!v8Value->IsArray())
+ return 0;
+
+ RefPtr<DOMStringList> ret = DOMStringList::create();
+ v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value);
+ for (size_t i = 0; i < v8Array->Length(); ++i) {
+ v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Integer::New(i));
+ ret->append(v8ValueToWebCoreString(indexedValue));
+ }
+ return ret.release();
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/bindings/v8/V8Binding.h b/Source/WebCore/bindings/v8/V8Binding.h
index b2d5daa..7873b54 100644
--- a/Source/WebCore/bindings/v8/V8Binding.h
+++ b/Source/WebCore/bindings/v8/V8Binding.h
@@ -41,6 +41,7 @@
namespace WebCore {
+ class DOMStringList;
class EventListener;
class EventTarget;
@@ -206,6 +207,8 @@ namespace WebCore {
String int32ToWebCoreString(int value);
+ PassRefPtr<DOMStringList> v8ValueToWebCoreDOMStringList(v8::Handle<v8::Value>);
+
class V8ParameterBase {
public:
operator String() { return toString<String>(); }
@@ -233,6 +236,14 @@ namespace WebCore {
return false;
}
+ // This path is unexpected. However there is hypothesis that it
+ // might be combination of v8 and v8 bindings bugs. For now
+ // just bailout as we'll crash if attempt to convert empty handle into a string.
+ if (m_v8Object.IsEmpty()) {
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+
return true;
}
diff --git a/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp b/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp
index f53e1b7..d88d8a6 100644
--- a/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp
+++ b/Source/WebCore/bindings/v8/V8DOMWindowShell.cpp
@@ -39,6 +39,7 @@
#include "FrameLoaderClient.h"
#include "Page.h"
#include "PageGroup.h"
+#include "RuntimeEnabledFeatures.h"
#include "ScriptCallStack.h"
#include "ScriptCallStackFactory.h"
#include "ScriptController.h"
@@ -62,6 +63,11 @@
#include <utility>
#include <v8-debug.h>
#include <v8.h>
+
+#if ENABLE(JAVASCRIPT_I18N_API)
+#include <v8/src/extensions/experimental/i18n-extension.h>
+#endif
+
#include <wtf/Assertions.h>
#include <wtf/OwnArrayPtr.h>
#include <wtf/StdLibExtras.h>
@@ -368,9 +374,15 @@ v8::Persistent<v8::Context> V8DOMWindowShell::createNewContext(v8::Handle<v8::Ob
if (!V8Proxy::registeredExtensionWithV8(DateExtension::get()))
V8Proxy::registerExtension(DateExtension::get());
+#if ENABLE(JAVASCRIPT_I18N_API)
+ // Enables experimental i18n API in V8.
+ if (RuntimeEnabledFeatures::javaScriptI18NAPIEnabled() && !V8Proxy::registeredExtensionWithV8(v8::internal::I18NExtension::get()))
+ V8Proxy::registerExtension(v8::internal::I18NExtension::get());
+#endif
+
// Dynamically tell v8 about our extensions now.
const V8Extensions& extensions = V8Proxy::extensions();
- OwnArrayPtr<const char*> extensionNames(new const char*[extensions.size()]);
+ OwnArrayPtr<const char*> extensionNames = adoptArrayPtr(new const char*[extensions.size()]);
int index = 0;
for (size_t i = 0; i < extensions.size(); ++i) {
// Ensure our date extension is always allowed.
diff --git a/Source/WebCore/bindings/v8/V8DOMWrapper.cpp b/Source/WebCore/bindings/v8/V8DOMWrapper.cpp
index b51c5a5..b439274 100644
--- a/Source/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/Source/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -51,6 +51,7 @@
#include "V8FileWriter.h"
#include "V8HTMLCollection.h"
#include "V8HTMLDocument.h"
+#include "V8IDBDatabase.h"
#include "V8IDBRequest.h"
#include "V8IDBTransaction.h"
#include "V8IsolatedContext.h"
@@ -381,6 +382,8 @@ v8::Handle<v8::Value> V8DOMWrapper::convertEventTargetToV8Object(EventTarget* ta
#endif
#if ENABLE(INDEXED_DATABASE)
+ if (IDBDatabase* idbDatabase = target->toIDBDatabase())
+ return toV8(idbDatabase);
if (IDBRequest* idbRequest = target->toIDBRequest())
return toV8(idbRequest);
if (IDBTransaction* idbTransaction = target->toIDBTransaction())
diff --git a/Source/WebCore/bindings/v8/V8EventListener.cpp b/Source/WebCore/bindings/v8/V8EventListener.cpp
index 808d342..319da42 100644
--- a/Source/WebCore/bindings/v8/V8EventListener.cpp
+++ b/Source/WebCore/bindings/v8/V8EventListener.cpp
@@ -54,7 +54,9 @@ v8::Local<v8::Function> V8EventListener::getListenerFunction(ScriptExecutionCont
if (listener->IsObject()) {
v8::Local<v8::Value> property = listener->Get(v8::String::NewSymbol("handleEvent"));
- if (property->IsFunction())
+ // Check that no exceptions were thrown when getting the
+ // handleEvent property and that the value is a function.
+ if (!property.IsEmpty() && property->IsFunction())
return v8::Local<v8::Function>::Cast(property);
}
diff --git a/Source/WebCore/bindings/v8/V8NPObject.cpp b/Source/WebCore/bindings/v8/V8NPObject.cpp
index 0b1d25e..36640b7 100644
--- a/Source/WebCore/bindings/v8/V8NPObject.cpp
+++ b/Source/WebCore/bindings/v8/V8NPObject.cpp
@@ -101,7 +101,7 @@ static v8::Handle<v8::Value> npObjectInvokeImpl(const v8::Arguments& args, Invok
// Wrap up parameters.
int numArgs = args.Length();
- OwnArrayPtr<NPVariant> npArgs(new NPVariant[numArgs]);
+ OwnArrayPtr<NPVariant> npArgs = adoptArrayPtr(new NPVariant[numArgs]);
for (int i = 0; i < numArgs; i++)
convertV8ObjectToNPVariant(args[i], npObject, &npArgs[i]);
diff --git a/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp b/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp
index 4e0240d..a8ca878 100644
--- a/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp
+++ b/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp
@@ -80,7 +80,7 @@ short V8NodeFilterCondition::acceptNode(ScriptState* state, Node* node) const
}
v8::Handle<v8::Object> object = v8::Context::GetCurrent()->Global();
- OwnArrayPtr<v8::Handle<v8::Value> > args(new v8::Handle<v8::Value>[1]);
+ OwnArrayPtr<v8::Handle<v8::Value> > args = adoptArrayPtr(new v8::Handle<v8::Value>[1]);
args[0] = toV8(node);
v8::Handle<v8::Value> result = V8Proxy::callFunctionWithoutFrame(callback, object, 1, args.get());
diff --git a/Source/WebCore/bindings/v8/V8Proxy.cpp b/Source/WebCore/bindings/v8/V8Proxy.cpp
index 831a6ef..ca57fa8 100644
--- a/Source/WebCore/bindings/v8/V8Proxy.cpp
+++ b/Source/WebCore/bindings/v8/V8Proxy.cpp
@@ -161,10 +161,15 @@ void V8Proxy::reportUnsafeAccessTo(Frame* target)
return;
Frame* source = V8Proxy::retrieveFrameForEnteredContext();
- if (!source || !source->document())
- return; // Ignore error if the source document is gone.
+ if (!source)
+ return;
+ Page* page = source->page();
+ if (!page)
+ return;
Document* sourceDocument = source->document();
+ if (!sourceDocument)
+ return; // Ignore error if the source document is gone.
// FIXME: This error message should contain more specifics of why the same
// origin check has failed.
@@ -178,7 +183,7 @@ void V8Proxy::reportUnsafeAccessTo(Frame* target)
// NOTE: Safari prints the message in the target page, but it seems like
// it should be in the source page. Even for delayed messages, we put it in
// the source page.
- addMessageToConsole(source->page(), str, kSourceID, kLineNumber);
+ addMessageToConsole(page, str, kSourceID, kLineNumber);
}
static void handleFatalErrorInV8()
@@ -430,6 +435,8 @@ v8::Local<v8::Value> V8Proxy::runScriptInternal(v8::Handle<v8::Script> script, b
// Run the script and keep track of the current recursion depth.
v8::Local<v8::Value> result;
+ v8::TryCatch tryCatch;
+ tryCatch.SetVerbose(true);
{
// See comment in V8Proxy::callFunction.
m_frame->keepAlive();
@@ -446,6 +453,11 @@ v8::Local<v8::Value> V8Proxy::runScriptInternal(v8::Handle<v8::Script> script, b
ASSERT(result.IsEmpty());
// Handle V8 internal error situation (Out-of-memory).
+ if (tryCatch.HasCaught()) {
+ ASSERT(result.IsEmpty());
+ return notHandledByInterceptor();
+ }
+
if (result.IsEmpty())
return notHandledByInterceptor();
diff --git a/Source/WebCore/bindings/v8/V8Proxy.h b/Source/WebCore/bindings/v8/V8Proxy.h
index 746d8f8..fc52b19 100644
--- a/Source/WebCore/bindings/v8/V8Proxy.h
+++ b/Source/WebCore/bindings/v8/V8Proxy.h
@@ -116,7 +116,7 @@ namespace WebCore {
const BatchedCallback*,
size_t callbackCount);
- const int kMaxRecursionDepth = 20;
+ const int kMaxRecursionDepth = 22;
// The list of extensions that are registered for use with V8.
typedef WTF::Vector<v8::Extension*> V8Extensions;
diff --git a/Source/WebCore/bindings/v8/V8WindowErrorHandler.cpp b/Source/WebCore/bindings/v8/V8WindowErrorHandler.cpp
index 4203ad5..e33a183 100644
--- a/Source/WebCore/bindings/v8/V8WindowErrorHandler.cpp
+++ b/Source/WebCore/bindings/v8/V8WindowErrorHandler.cpp
@@ -54,8 +54,10 @@ v8::Local<v8::Value> V8WindowErrorHandler::callListenerFunction(ScriptExecutionC
v8::Local<v8::Function> callFunction = v8::Local<v8::Function>::Cast(listener);
v8::Local<v8::Object> thisValue = v8::Context::GetCurrent()->Global();
v8::Handle<v8::Value> parameters[3] = { v8String(errorEvent->message()), v8String(errorEvent->filename()), v8::Integer::New(errorEvent->lineno()) };
+ v8::TryCatch tryCatch;
+ tryCatch.SetVerbose(true);
returnValue = callFunction->Call(thisValue, 3, parameters);
- if (!returnValue.IsEmpty() && returnValue->IsBoolean() && !returnValue->BooleanValue())
+ if (!tryCatch.HasCaught() && !returnValue.IsEmpty() && returnValue->IsBoolean() && !returnValue->BooleanValue())
event->preventDefault();
}
return returnValue;
diff --git a/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp b/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
index aef892a..eb7252b 100644
--- a/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
+++ b/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -49,6 +49,7 @@
#include "WorkerContext.h"
#include "WorkerScriptController.h"
#include "WrapperTypeInfo.h"
+#include <wtf/text/CString.h>
namespace WebCore {
@@ -205,10 +206,14 @@ ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const St
if (exceptionCatcher.HasCaught()) {
v8::Local<v8::Message> message = exceptionCatcher.Message();
state->hadException = true;
- state->exception = ScriptValue(exceptionCatcher.Exception());
state->errorMessage = toWebCoreString(message->Get());
state->lineNumber = message->GetLineNumber();
state->sourceURL = toWebCoreString(message->GetScriptResourceName());
+ if (m_workerContext->sanitizeScriptError(state->errorMessage, state->lineNumber, state->sourceURL))
+ state->exception = V8Proxy::throwError(V8Proxy::GeneralError, state->errorMessage.utf8().data());
+ else
+ state->exception = ScriptValue(exceptionCatcher.Exception());
+
exceptionCatcher.Reset();
} else
state->hadException = false;
diff --git a/Source/WebCore/bindings/v8/custom/V8ArrayBufferCustom.cpp b/Source/WebCore/bindings/v8/custom/V8ArrayBufferCustom.cpp
index 99edc8b..9d8907b 100644
--- a/Source/WebCore/bindings/v8/custom/V8ArrayBufferCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8ArrayBufferCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "ExceptionCode.h"
@@ -77,5 +74,3 @@ v8::Handle<v8::Value> V8ArrayBuffer::constructorCallback(const v8::Arguments& ar
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h b/Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h
index 6881a01..f842b6d 100644
--- a/Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h
+++ b/Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h
@@ -31,8 +31,6 @@
#ifndef V8ArrayBufferViewCustom_h
#define V8ArrayBufferViewCustom_h
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "V8ArrayBuffer.h"
@@ -87,7 +85,7 @@ v8::Handle<v8::Value> constructWebGLArray(const v8::Arguments& args, WrapperType
int argLen = args.Length();
if (!argLen) {
// This happens when we return a previously constructed
- // ArrayBufferView, e.g. from the call to <Type>Array.slice().
+ // ArrayBufferView, e.g. from the call to <Type>Array.subset().
// The V8DOMWrapper will set the internal pointer in the
// created object. Unfortunately it doesn't look like it's
// possible to distinguish between this case and that where
@@ -99,7 +97,7 @@ v8::Handle<v8::Value> constructWebGLArray(const v8::Arguments& args, WrapperType
V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get());
// Do not call SetIndexedPropertiesToExternalArrayData on this
// object. Not only is there no point from a performance
- // perspective, but doing so causes errors in the slice() case.
+ // perspective, but doing so causes errors in the subset() case.
return toV8(array.release(), args.Holder());
}
@@ -209,6 +207,4 @@ v8::Handle<v8::Value> setWebGLArrayHelper(const v8::Arguments& args)
}
-#endif // ENABLE(3D_CANVAS)
-
#endif // V8ArrayBufferViewCustom_h
diff --git a/Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp b/Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp
index e1a1ba4..419cd60 100644
--- a/Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp
@@ -28,8 +28,13 @@
#include "V8AudioContext.h"
+#include "ArrayBuffer.h"
+#include "AudioBuffer.h"
#include "AudioContext.h"
#include "Frame.h"
+#include "V8ArrayBuffer.h"
+#include "V8AudioBuffer.h"
+#include "V8Binding.h"
#include "V8Proxy.h"
namespace WebCore {
@@ -55,6 +60,58 @@ v8::Handle<v8::Value> V8AudioContext::constructorCallback(const v8::Arguments& a
return args.Holder();
}
+v8::Handle<v8::Value> V8AudioContext::createBufferCallback(const v8::Arguments& args)
+{
+ if (args.Length() < 2)
+ return throwError("Not enough arguments", V8Proxy::SyntaxError);
+
+ AudioContext* audioContext = toNative(args.Holder());
+ ASSERT(audioContext);
+
+ v8::Handle<v8::Value> arg = args[0];
+
+ // AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono);
+ if (V8ArrayBuffer::HasInstance(arg)) {
+ v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
+ ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(object);
+ ASSERT(arrayBuffer);
+
+ if (arrayBuffer) {
+ bool mixToMono = args[1]->ToBoolean()->Value();
+
+ RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(arrayBuffer, mixToMono);
+ if (!audioBuffer.get())
+ return throwError("Error decoding audio file data", V8Proxy::SyntaxError);
+
+ return toV8(audioBuffer.get());
+ }
+
+ return v8::Undefined();
+ }
+
+ // AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
+ if (args.Length() < 3)
+ return throwError("Not enough arguments", V8Proxy::SyntaxError);
+
+ bool ok = false;
+
+ unsigned numberOfChannels = toInt32(args[0], ok);
+ if (!ok)
+ return throwError("Invalid number of channels", V8Proxy::SyntaxError);
+
+ unsigned numberOfFrames = toInt32(args[1], ok);
+ if (!ok)
+ return throwError("Invalid number of frames", V8Proxy::SyntaxError);
+
+ float sampleRate = toFloat(args[2]);
+
+ RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+ if (!audioBuffer.get())
+ return throwError("Error creating AudioBuffer", V8Proxy::SyntaxError);
+
+ return toV8(audioBuffer.get());
+}
+
} // namespace WebCore
#endif // ENABLE(WEB_AUDIO)
diff --git a/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp b/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
index 328a9c1..85ae322 100644
--- a/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
@@ -183,12 +183,6 @@ void V8DOMWindow::eventAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::
context->Global()->SetHiddenValue(eventSymbol, value);
}
-v8::Handle<v8::Value> V8DOMWindow::cryptoAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
-{
- // FIXME: Implement me.
- return v8::Undefined();
-}
-
void V8DOMWindow::locationAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
{
DOMWindow* imp = V8DOMWindow::toNative(info.Holder());
diff --git a/Source/WebCore/bindings/v8/custom/V8DataViewCustom.cpp b/Source/WebCore/bindings/v8/custom/V8DataViewCustom.cpp
index 60ce7ce..14f13cb 100755
--- a/Source/WebCore/bindings/v8/custom/V8DataViewCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8DataViewCustom.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "DataView.h"
#include "V8ArrayBufferViewCustom.h"
@@ -120,5 +117,3 @@ v8::Handle<v8::Value> V8DataView::setUint8Callback(const v8::Arguments& args)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp b/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp
index cda0737..c435863 100644
--- a/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp
@@ -49,7 +49,7 @@
#include "V8Proxy.h"
#include "V8Touch.h"
#include "V8TouchList.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "V8WebGLRenderingContext.h"
#endif
#include "V8XPathNSResolver.h"
@@ -110,10 +110,10 @@ v8::Handle<v8::Value> V8Document::getCSSCanvasContextCallback(const v8::Argument
return v8::Undefined();
if (result->is2d())
return toV8(static_cast<CanvasRenderingContext2D*>(result));
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
else if (result->is3d())
return toV8(static_cast<WebGLRenderingContext*>(result));
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
ASSERT_NOT_REACHED();
return v8::Undefined();
}
diff --git a/Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp b/Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp
index 02fc457..e9b9336 100644
--- a/Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8ElementCustom.cpp
@@ -58,7 +58,7 @@ v8::Handle<v8::Value> toV8(Element* impl, bool forceNewObject)
if (!impl)
return v8::Null();
if (impl->isHTMLElement())
- return toV8(static_cast<HTMLElement*>(impl), forceNewObject);
+ return toV8(toHTMLElement(impl), forceNewObject);
#if ENABLE(SVG)
if (impl->isSVGElement())
return toV8(static_cast<SVGElement*>(impl), forceNewObject);
diff --git a/Source/WebCore/bindings/v8/custom/V8Float32ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Float32ArrayCustom.cpp
index c3dbe3b..178307e 100644
--- a/Source/WebCore/bindings/v8/custom/V8Float32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Float32ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Float32Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Float32Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp b/Source/WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
index e154f7f..8fd2d62 100644
--- a/Source/WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
@@ -41,7 +41,7 @@
#include "V8CanvasRenderingContext2D.h"
#include "V8Node.h"
#include "V8Proxy.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "V8WebGLRenderingContext.h"
#endif
#include <wtf/MathExtras.h>
@@ -55,7 +55,7 @@ v8::Handle<v8::Value> V8HTMLCanvasElement::getContextCallback(const v8::Argument
HTMLCanvasElement* imp = V8HTMLCanvasElement::toNative(holder);
String contextId = toWebCoreString(args[0]);
RefPtr<CanvasContextAttributes> attrs;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
if (contextId == "experimental-webgl" || contextId == "webkit-3d") {
attrs = WebGLContextAttributes::create();
WebGLContextAttributes* webGLAttrs = static_cast<WebGLContextAttributes*>(attrs.get());
@@ -84,7 +84,7 @@ v8::Handle<v8::Value> V8HTMLCanvasElement::getContextCallback(const v8::Argument
return v8::Null();
if (result->is2d())
return toV8(static_cast<CanvasRenderingContext2D*>(result));
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
else if (result->is3d())
return toV8(static_cast<WebGLRenderingContext*>(result));
#endif
diff --git a/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp b/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
index 6bd5abb..ce1732b 100644
--- a/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
@@ -36,7 +36,6 @@
#include "Frame.h"
#include "InjectedScript.h"
#include "InjectedScriptHost.h"
-#include "InspectorController.h"
#include "InspectorValues.h"
#include "Node.h"
#include "Page.h"
@@ -147,8 +146,7 @@ v8::Handle<v8::Value> V8InjectedScriptHost::nodeForIdCallback(const v8::Argument
if (!node)
return v8::Undefined();
- InspectorController* ic = host->inspectorController();
- if (!ic)
+ if (!host->inspectorAgent())
return v8::Undefined();
return toV8(node);
diff --git a/Source/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp b/Source/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp
index 94fa86e..a8d8d0b 100644
--- a/Source/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp
@@ -32,6 +32,7 @@
#include "V8InspectorFrontendHost.h"
#include "InspectorController.h"
+#include "InspectorFrontendClient.h"
#include "InspectorFrontendHost.h"
#include "PlatformString.h"
diff --git a/Source/WebCore/bindings/v8/custom/V8Int16ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Int16ArrayCustom.cpp
index 244a231..90a3c71 100644
--- a/Source/WebCore/bindings/v8/custom/V8Int16ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Int16ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Int16Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Int16Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8Int32ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Int32ArrayCustom.cpp
index a5001ed..8fa38a7 100644
--- a/Source/WebCore/bindings/v8/custom/V8Int32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Int32ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Int32Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Int32Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8Int8ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Int8ArrayCustom.cpp
index 526d83e..33458dc 100644
--- a/Source/WebCore/bindings/v8/custom/V8Int8ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Int8ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Int8Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Int8Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp b/Source/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
index f1357bd..c94afd9 100644
--- a/Source/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
@@ -81,7 +81,7 @@ v8::Handle<v8::Value> V8NotificationCenter::requestPermissionCallback(const v8::
{
INC_STATS(L"DOM.NotificationCenter.RequestPermission()");
NotificationCenter* notificationCenter = V8NotificationCenter::toNative(args.Holder());
- ScriptExecutionContext* context = notificationCenter->context();
+ ScriptExecutionContext* context = notificationCenter->scriptExecutionContext();
// Make sure that script execution context is valid.
if (!context)
diff --git a/Source/WebCore/bindings/v8/custom/V8Uint16ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Uint16ArrayCustom.cpp
index e3ae263..aebe310 100644
--- a/Source/WebCore/bindings/v8/custom/V8Uint16ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Uint16ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Uint16Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Uint16Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8Uint32ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Uint32ArrayCustom.cpp
index 6c60283..563df8e 100644
--- a/Source/WebCore/bindings/v8/custom/V8Uint32ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Uint32ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Uint32Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Uint32Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8Uint8ArrayCustom.cpp b/Source/WebCore/bindings/v8/custom/V8Uint8ArrayCustom.cpp
index ea9f421..aa46863 100644
--- a/Source/WebCore/bindings/v8/custom/V8Uint8ArrayCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8Uint8ArrayCustom.cpp
@@ -29,9 +29,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include "Uint8Array.h"
@@ -67,5 +64,3 @@ v8::Handle<v8::Value> toV8(Uint8Array* impl)
}
} // namespace WebCore
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp b/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
index 7fdfc55..5a3f873 100644
--- a/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "V8WebGLRenderingContext.h"
@@ -120,14 +120,14 @@ static v8::Handle<v8::Value> toV8Object(const WebGLGetInfo& info)
}
case WebGLGetInfo::kTypeFloat:
return v8::Number::New(info.getFloat());
- case WebGLGetInfo::kTypeLong:
- return v8::Integer::New(info.getLong());
+ case WebGLGetInfo::kTypeInt:
+ return v8::Integer::New(info.getInt());
case WebGLGetInfo::kTypeNull:
return v8::Null();
case WebGLGetInfo::kTypeString:
return v8::String::New(fromWebCoreString(info.getString()), info.getString().length());
- case WebGLGetInfo::kTypeUnsignedLong:
- return v8::Integer::NewFromUnsigned(info.getUnsignedLong());
+ case WebGLGetInfo::kTypeUnsignedInt:
+ return v8::Integer::NewFromUnsigned(info.getUnsignedInt());
case WebGLGetInfo::kTypeWebGLBuffer:
return toV8(info.getWebGLBuffer());
case WebGLGetInfo::kTypeWebGLFloatArray:
@@ -773,4 +773,4 @@ v8::Handle<v8::Value> V8WebGLRenderingContext::vertexAttrib4fvCallback(const v8:
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp b/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
index 6a571ae..0548a4d 100644
--- a/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp
@@ -95,7 +95,7 @@ v8::Handle<v8::Value> V8XMLHttpRequest::responseAccessorGetter(v8::Local<v8::Str
return v8::Undefined();
#endif
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
case XMLHttpRequest::ResponseTypeArrayBuffer:
{
ExceptionCode ec = 0;
@@ -193,7 +193,7 @@ v8::Handle<v8::Value> V8XMLHttpRequest::sendCallback(const v8::Arguments& args)
DOMFormData* domFormData = V8DOMFormData::toNative(object);
ASSERT(domFormData);
xmlHttpRequest->send(domFormData, ec);
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
} else if (V8ArrayBuffer::HasInstance(arg)) {
v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(object);
diff --git a/Source/WebCore/bridge/jsc/BridgeJSC.cpp b/Source/WebCore/bridge/jsc/BridgeJSC.cpp
index 49ffb2a..2747c75 100644
--- a/Source/WebCore/bridge/jsc/BridgeJSC.cpp
+++ b/Source/WebCore/bridge/jsc/BridgeJSC.cpp
@@ -106,7 +106,6 @@ RuntimeObject* Instance::newRuntimeObject(ExecState* exec)
void Instance::willDestroyRuntimeObject(RuntimeObject* object)
{
ASSERT(m_rootObject);
- ASSERT(m_rootObject->isValid());
m_rootObject->removeRuntimeObject(object);
m_runtimeObject.clear(object);
}
diff --git a/Source/WebCore/bridge/qt/qt_class.cpp b/Source/WebCore/bridge/qt/qt_class.cpp
index 4c29c69..3c1836a 100644
--- a/Source/WebCore/bridge/qt/qt_class.cpp
+++ b/Source/WebCore/bridge/qt/qt_class.cpp
@@ -74,7 +74,7 @@ JSValue QtClass::fallbackObject(ExecState* exec, Instance* inst, const Identifie
const QByteArray name = QString(reinterpret_cast<const QChar*>(ustring.characters()), ustring.length()).toAscii();
// First see if we have a cache hit
- JSObject* val = qtinst->m_methods.value(name);
+ JSObject* val = qtinst->m_methods.value(name).get();
if (val)
return val;
diff --git a/Source/WebCore/bridge/qt/qt_instance.cpp b/Source/WebCore/bridge/qt/qt_instance.cpp
index 78263e9..b4d2117 100644
--- a/Source/WebCore/bridge/qt/qt_instance.cpp
+++ b/Source/WebCore/bridge/qt/qt_instance.cpp
@@ -34,6 +34,7 @@
#include <qhash.h>
#include <qmetaobject.h>
#include <qmetatype.h>
+#include <qwebelement.h>
namespace JSC {
namespace Bindings {
@@ -82,9 +83,10 @@ QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject, QScriptEng
, m_class(0)
, m_object(o)
, m_hashkey(o)
- , m_defaultMethod(0)
, m_ownership(ownership)
{
+ // This is a good place to register Qt metatypes that are in the QtWebKit module, as this is class will initialize if we have a QObject bridge.
+ qRegisterMetaType<QWebElement>();
}
QtInstance::~QtInstance()
@@ -148,12 +150,12 @@ void QtInstance::put(JSObject* object, ExecState* exec, const Identifier& proper
void QtInstance::removeCachedMethod(JSObject* method)
{
- if (m_defaultMethod == method)
- m_defaultMethod = 0;
+ if (m_defaultMethod.get() == method)
+ m_defaultMethod.clear();
- for (QHash<QByteArray, JSObject*>::Iterator it = m_methods.begin(),
+ for (QHash<QByteArray, DeprecatedPtr<JSObject> >::Iterator it = m_methods.begin(),
end = m_methods.end(); it != end; ++it)
- if (it.value() == method) {
+ if (it.value().get() == method) {
m_methods.erase(it);
return;
}
@@ -188,10 +190,10 @@ RuntimeObject* QtInstance::newRuntimeObject(ExecState* exec)
void QtInstance::markAggregate(MarkStack& markStack)
{
if (m_defaultMethod)
- markStack.append(m_defaultMethod);
- foreach (JSObject* val, m_methods.values()) {
+ markStack.append(&m_defaultMethod);
+ foreach (DeprecatedPtr<JSObject> val, m_methods.values()) {
if (val)
- markStack.append(val);
+ markStack.append(&val);
}
}
diff --git a/Source/WebCore/bridge/qt/qt_instance.h b/Source/WebCore/bridge/qt/qt_instance.h
index 25aea53..003c801 100644
--- a/Source/WebCore/bridge/qt/qt_instance.h
+++ b/Source/WebCore/bridge/qt/qt_instance.h
@@ -83,9 +83,9 @@ private:
mutable QtClass* m_class;
QPointer<QObject> m_object;
QObject* m_hashkey;
- mutable QHash<QByteArray, JSObject*> m_methods;
+ mutable QHash<QByteArray, DeprecatedPtr<JSObject> > m_methods;
mutable QHash<QString, QtField*> m_fields;
- mutable QtRuntimeMetaMethod* m_defaultMethod;
+ mutable WriteBarrier<QtRuntimeMetaMethod> m_defaultMethod;
QScriptEngine::ValueOwnership m_ownership;
};
diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
index 0fb811b..5507fc9 100644
--- a/Source/WebCore/bridge/qt/qt_runtime.cpp
+++ b/Source/WebCore/bridge/qt/qt_runtime.cpp
@@ -587,7 +587,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
if (qstring.mid(lastSlash + 1).contains(QLatin1Char('i')))
realRe.setCaseSensitivity(Qt::CaseInsensitive);
- ret = qVariantFromValue(realRe);
+ ret = QVariant::fromValue(realRe);
dist = 0;
} else {
qConvDebug() << "couldn't parse a JS regexp";
@@ -598,7 +598,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
QRegExp re(qstring);
if (re.isValid()) {
- ret = qVariantFromValue(re);
+ ret = QVariant::fromValue(re);
dist = 10;
}
}
@@ -610,7 +610,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
if (qtinst) {
if (qtinst->getObject()) {
qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
- ret = qVariantFromValue(qtinst->getObject());
+ ret = QVariant::fromValue(qtinst->getObject());
qConvDebug() << ret;
dist = 0;
} else {
@@ -621,7 +621,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
}
} else if (type == Null) {
QObject* nullobj = 0;
- ret = qVariantFromValue(nullobj);
+ ret = QVariant::fromValue(nullobj);
dist = 0;
} else {
qConvDebug() << "previous type was not an object:" << type;
@@ -634,7 +634,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
if (qtinst) {
if (qtinst->getObject()) {
qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
- ret = qVariantFromValue((void *)qtinst->getObject());
+ ret = QVariant::fromValue((void *)qtinst->getObject());
qConvDebug() << ret;
dist = 0;
} else {
@@ -644,7 +644,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
qConvDebug() << "wasn't a qtinstance";
}
} else if (type == Null) {
- ret = qVariantFromValue((void*)0);
+ ret = QVariant::fromValue((void*)0);
dist = 0;
} else if (type == Number) {
// I don't think that converting a double to a pointer is a wise
@@ -1401,8 +1401,6 @@ QtRuntimeMetaMethod::QtRuntimeMetaMethod(ExecState* exec, const Identifier& iden
QW_D(QtRuntimeMetaMethod);
d->m_signature = signature;
d->m_index = index;
- d->m_connect = 0;
- d->m_disconnect = 0;
d->m_allowPrivate = allowPrivate;
}
@@ -1411,9 +1409,9 @@ void QtRuntimeMetaMethod::markChildren(MarkStack& markStack)
QtRuntimeMethod::markChildren(markStack);
QW_D(QtRuntimeMetaMethod);
if (d->m_connect)
- markStack.append(d->m_connect);
+ markStack.append(&d->m_connect);
if (d->m_disconnect)
- markStack.append(d->m_disconnect);
+ markStack.append(&d->m_disconnect);
}
EncodedJSValue QtRuntimeMetaMethod::call(ExecState* exec)
@@ -1523,8 +1521,8 @@ JSValue QtRuntimeMetaMethod::connectGetter(ExecState* exec, JSValue slotBase, co
QW_DS(QtRuntimeMetaMethod, thisObj);
if (!d->m_connect)
- d->m_connect = new (exec) QtRuntimeConnectionMethod(exec, ident, true, d->m_instance, d->m_index, d->m_signature);
- return d->m_connect;
+ d->m_connect.set(exec->globalData(), thisObj, new (exec) QtRuntimeConnectionMethod(exec, ident, true, d->m_instance, d->m_index, d->m_signature));
+ return d->m_connect.get();
}
JSValue QtRuntimeMetaMethod::disconnectGetter(ExecState* exec, JSValue slotBase, const Identifier& ident)
@@ -1533,8 +1531,8 @@ JSValue QtRuntimeMetaMethod::disconnectGetter(ExecState* exec, JSValue slotBase,
QW_DS(QtRuntimeMetaMethod, thisObj);
if (!d->m_disconnect)
- d->m_disconnect = new (exec) QtRuntimeConnectionMethod(exec, ident, false, d->m_instance, d->m_index, d->m_signature);
- return d->m_disconnect;
+ d->m_disconnect.set(exec->globalData(), thisObj, new (exec) QtRuntimeConnectionMethod(exec, ident, false, d->m_instance, d->m_index, d->m_signature));
+ return d->m_disconnect.get();
}
// ===============
diff --git a/Source/WebCore/bridge/qt/qt_runtime.h b/Source/WebCore/bridge/qt/qt_runtime.h
index 8dab08c..c5abca7 100644
--- a/Source/WebCore/bridge/qt/qt_runtime.h
+++ b/Source/WebCore/bridge/qt/qt_runtime.h
@@ -129,8 +129,8 @@ class QtRuntimeMetaMethodData : public QtRuntimeMethodData {
QByteArray m_signature;
bool m_allowPrivate;
int m_index;
- QtRuntimeConnectionMethod *m_connect;
- QtRuntimeConnectionMethod *m_disconnect;
+ WriteBarrier<QtRuntimeConnectionMethod> m_connect;
+ WriteBarrier<QtRuntimeConnectionMethod> m_disconnect;
};
class QtRuntimeConnectionMethodData : public QtRuntimeMethodData {
diff --git a/Source/WebCore/bridge/runtime_root.cpp b/Source/WebCore/bridge/runtime_root.cpp
index 515636d..5496e55 100644
--- a/Source/WebCore/bridge/runtime_root.cpp
+++ b/Source/WebCore/bridge/runtime_root.cpp
@@ -101,13 +101,15 @@ void RootObject::invalidate()
return;
{
- HashSet<RuntimeObject*>::iterator end = m_runtimeObjects.end();
- for (HashSet<RuntimeObject*>::iterator it = m_runtimeObjects.begin(); it != end; ++it)
- (*it)->invalidate();
-
+ WeakGCMap<RuntimeObject*, RuntimeObject>::iterator end = m_runtimeObjects.uncheckedEnd();
+ for (WeakGCMap<RuntimeObject*, RuntimeObject>::iterator it = m_runtimeObjects.uncheckedBegin(); it != end; ++it) {
+ if (m_runtimeObjects.isValid(it))
+ it->second->invalidate();
+ }
+
m_runtimeObjects.clear();
}
-
+
m_isValid = false;
m_nativeHandle = 0;
@@ -176,17 +178,19 @@ void RootObject::updateGlobalObject(JSGlobalObject* globalObject)
void RootObject::addRuntimeObject(RuntimeObject* object)
{
ASSERT(m_isValid);
- ASSERT(!m_runtimeObjects.contains(object));
-
- m_runtimeObjects.add(object);
-}
-
+ ASSERT(!m_runtimeObjects.get(object));
+
+ m_runtimeObjects.set(object, object);
+}
+
void RootObject::removeRuntimeObject(RuntimeObject* object)
{
- ASSERT(m_isValid);
- ASSERT(m_runtimeObjects.contains(object));
-
- m_runtimeObjects.remove(object);
+ if (!m_isValid)
+ return;
+
+ ASSERT(m_runtimeObjects.uncheckedGet(object));
+
+ m_runtimeObjects.take(object);
}
} } // namespace JSC::Bindings
diff --git a/Source/WebCore/bridge/runtime_root.h b/Source/WebCore/bridge/runtime_root.h
index babd7ad..dde8a48 100644
--- a/Source/WebCore/bridge/runtime_root.h
+++ b/Source/WebCore/bridge/runtime_root.h
@@ -31,8 +31,8 @@
#endif
#include <runtime/Protect.h>
+#include <runtime/WeakGCMap.h>
#include <wtf/Forward.h>
-#include <wtf/HashSet.h>
#include <wtf/Noncopyable.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -89,7 +89,7 @@ private:
ProtectedPtr<JSGlobalObject> m_globalObject;
ProtectCountSet m_protectCountSet;
- HashSet<RuntimeObject*> m_runtimeObjects;
+ WeakGCMap<RuntimeObject*, RuntimeObject> m_runtimeObjects; // Really need a WeakGCSet, but this will do.
HashSet<InvalidationCallback*> m_invalidationCallbacks;
};
diff --git a/Source/WebCore/config.h b/Source/WebCore/config.h
index 3018e29..781762a 100644
--- a/Source/WebCore/config.h
+++ b/Source/WebCore/config.h
@@ -271,6 +271,10 @@
#define USE_SYSTEM_MALLOC 1
#endif
+#if OS(UNIX) || OS(WINDOWS)
+#define WTF_USE_OS_RANDOMNESS 1
+#endif
+
#if PLATFORM(CHROMIUM)
#if !OS(DARWIN)
diff --git a/Source/WebCore/css/CSSCanvasValue.cpp b/Source/WebCore/css/CSSCanvasValue.cpp
index e28def9..7f61d25 100644
--- a/Source/WebCore/css/CSSCanvasValue.cpp
+++ b/Source/WebCore/css/CSSCanvasValue.cpp
@@ -83,7 +83,7 @@ HTMLCanvasElement* CSSCanvasValue::element(Document* document)
return m_element;
}
-Image* CSSCanvasValue::image(RenderObject* renderer, const IntSize& /*size*/)
+PassRefPtr<Image> CSSCanvasValue::image(RenderObject* renderer, const IntSize& /*size*/)
{
ASSERT(m_clients.contains(renderer));
HTMLCanvasElement* elt = element(renderer->document());
diff --git a/Source/WebCore/css/CSSCanvasValue.h b/Source/WebCore/css/CSSCanvasValue.h
index 4cd4280..27b8f2b 100644
--- a/Source/WebCore/css/CSSCanvasValue.h
+++ b/Source/WebCore/css/CSSCanvasValue.h
@@ -40,7 +40,7 @@ public:
virtual String cssText() const;
- virtual Image* image(RenderObject*, const IntSize&);
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&);
virtual bool isFixedSize() const { return true; }
virtual IntSize fixedSize(const RenderObject*);
diff --git a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
index 89564c3..f1c7fdf 100644
--- a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
+++ b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
@@ -3,6 +3,7 @@
* Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
* Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
+ * Copyright (C) 2011 Sencha, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1148,26 +1149,30 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
return CSSPrimitiveValue::create(style->listStylePosition());
case CSSPropertyListStyleType:
return CSSPrimitiveValue::create(style->listStyleType());
- case CSSPropertyMarginTop:
- if (renderer && renderer->isBox())
- // FIXME: Supposed to return the percentage if percentage was specified.
- return zoomAdjustedPixelValue(toRenderBox(renderer)->marginTop(), style.get());
- return CSSPrimitiveValue::create(style->marginTop());
- case CSSPropertyMarginRight:
- if (renderer && renderer->isBox())
- // FIXME: Supposed to return the percentage if percentage was specified.
- return zoomAdjustedPixelValue(toRenderBox(renderer)->marginRight(), style.get());
- return CSSPrimitiveValue::create(style->marginRight());
- case CSSPropertyMarginBottom:
- if (renderer && renderer->isBox())
- // FIXME: Supposed to return the percentage if percentage was specified.
- return zoomAdjustedPixelValue(toRenderBox(renderer)->marginBottom(), style.get());
- return CSSPrimitiveValue::create(style->marginBottom());
- case CSSPropertyMarginLeft:
- if (renderer && renderer->isBox())
- // FIXME: Supposed to return the percentage if percentage was specified.
- return zoomAdjustedPixelValue(toRenderBox(renderer)->marginLeft(), style.get());
- return CSSPrimitiveValue::create(style->marginLeft());
+ case CSSPropertyMarginTop: {
+ Length marginTop = style->marginTop();
+ if (marginTop.isPercent())
+ return CSSPrimitiveValue::create(marginTop);
+ return zoomAdjustedPixelValue(marginTop.value(), style.get());
+ }
+ case CSSPropertyMarginRight: {
+ Length marginRight = style->marginRight();
+ if (marginRight.isPercent())
+ return CSSPrimitiveValue::create(marginRight);
+ return zoomAdjustedPixelValue(marginRight.value(), style.get());
+ }
+ case CSSPropertyMarginBottom: {
+ Length marginBottom = style->marginBottom();
+ if (marginBottom.isPercent())
+ return CSSPrimitiveValue::create(marginBottom);
+ return zoomAdjustedPixelValue(marginBottom.value(), style.get());
+ }
+ case CSSPropertyMarginLeft: {
+ Length marginLeft = style->marginLeft();
+ if (marginLeft.isPercent())
+ return CSSPrimitiveValue::create(marginLeft);
+ return zoomAdjustedPixelValue(marginLeft.value(), style.get());
+ }
case CSSPropertyWebkitMarqueeDirection:
return CSSPrimitiveValue::create(style->marqueeDirection());
case CSSPropertyWebkitMarqueeIncrement:
diff --git a/Source/WebCore/css/CSSFontFaceSource.cpp b/Source/WebCore/css/CSSFontFaceSource.cpp
index 034b22e..681a94b 100644
--- a/Source/WebCore/css/CSSFontFaceSource.cpp
+++ b/Source/WebCore/css/CSSFontFaceSource.cpp
@@ -115,7 +115,7 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
}
// See if we have a mapping in our FontData cache.
- unsigned hashKey = (fontDescription.computedPixelSize() + 1) << 3 | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0);
+ unsigned hashKey = (fontDescription.computedPixelSize() + 1) << 5 | fontDescription.widthVariant() << 3 | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0);
if (SimpleFontData* cachedData = m_fontDataTable.get(hashKey))
return cachedData;
@@ -162,13 +162,13 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
if (!m_font->ensureCustomFontData())
return 0;
- fontData.set(new SimpleFontData(m_font->platformDataFromCustomData(fontDescription.computedPixelSize(), syntheticBold, syntheticItalic, fontDescription.orientation(), fontDescription.renderingMode()), true, false));
+ fontData.set(new SimpleFontData(m_font->platformDataFromCustomData(fontDescription.computedPixelSize(), syntheticBold, syntheticItalic, fontDescription.orientation(), fontDescription.widthVariant(), fontDescription.renderingMode()), true, false));
}
} else {
#if ENABLE(SVG_FONTS)
// In-Document SVG Fonts
if (m_svgFontFaceElement)
- fontData.set(new SimpleFontData(adoptPtr(new SVGFontData(m_svgFontFaceElement)), fontDescription.computedPixelSize(), syntheticBold, syntheticItalic));
+ fontData.set(new SimpleFontData(adoptPtr(new SVGFontData(m_svgFontFaceElement.get())), fontDescription.computedPixelSize(), syntheticBold, syntheticItalic));
#endif
}
} else {
@@ -190,6 +190,16 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
}
#if ENABLE(SVG_FONTS)
+SVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const
+{
+ return m_svgFontFaceElement.get();
+}
+
+void CSSFontFaceSource::setSVGFontFaceElement(PassRefPtr<SVGFontFaceElement> element)
+{
+ m_svgFontFaceElement = element;
+}
+
bool CSSFontFaceSource::isSVGFontFaceSource() const
{
return m_svgFontFaceElement || (m_font && m_font->isSVGFont());
diff --git a/Source/WebCore/css/CSSFontFaceSource.h b/Source/WebCore/css/CSSFontFaceSource.h
index e2057cc..a5c3e61 100644
--- a/Source/WebCore/css/CSSFontFaceSource.h
+++ b/Source/WebCore/css/CSSFontFaceSource.h
@@ -63,8 +63,8 @@ public:
void pruneTable();
#if ENABLE(SVG_FONTS)
- SVGFontFaceElement* svgFontFaceElement() const { return m_svgFontFaceElement; }
- void setSVGFontFaceElement(SVGFontFaceElement* element) { m_svgFontFaceElement = element; }
+ SVGFontFaceElement* svgFontFaceElement() const;
+ void setSVGFontFaceElement(PassRefPtr<SVGFontFaceElement>);
bool isSVGFontFaceSource() const;
#endif
@@ -75,7 +75,7 @@ private:
HashMap<unsigned, SimpleFontData*> m_fontDataTable; // The hash key is composed of size synthetic styles.
#if ENABLE(SVG_FONTS)
- SVGFontFaceElement* m_svgFontFaceElement;
+ RefPtr<SVGFontFaceElement> m_svgFontFaceElement;
RefPtr<SVGFontElement> m_externalSVGFontElement;
#endif
};
diff --git a/Source/WebCore/css/CSSFunctionValue.cpp b/Source/WebCore/css/CSSFunctionValue.cpp
index 70e8174..52a2953 100644
--- a/Source/WebCore/css/CSSFunctionValue.cpp
+++ b/Source/WebCore/css/CSSFunctionValue.cpp
@@ -26,6 +26,7 @@
#include "config.h"
#include "CSSFunctionValue.h"
+#include "CSSParserValues.h"
#include "CSSValueList.h"
#include <wtf/PassOwnPtr.h>
@@ -51,18 +52,4 @@ String CSSFunctionValue::cssText() const
return result;
}
-CSSParserValue CSSFunctionValue::parserValue() const
-{
- CSSParserValue val;
- val.id = 0;
- val.isInt = false;
- val.unit = CSSParserValue::Function;
- val.function = new CSSParserFunction;
- val.function->name.characters = const_cast<UChar*>(m_name.characters());
- val.function->name.length = m_name.length();
- if (m_args)
- val.function->args = m_args->createParserValueList();
- return val;
-}
-
}
diff --git a/Source/WebCore/css/CSSFunctionValue.h b/Source/WebCore/css/CSSFunctionValue.h
index 1d73f33..be38206 100644
--- a/Source/WebCore/css/CSSFunctionValue.h
+++ b/Source/WebCore/css/CSSFunctionValue.h
@@ -44,8 +44,6 @@ public:
virtual String cssText() const;
- virtual CSSParserValue parserValue() const;
-
private:
explicit CSSFunctionValue(CSSParserFunction*);
diff --git a/Source/WebCore/css/CSSGradientValue.cpp b/Source/WebCore/css/CSSGradientValue.cpp
index b6b9ebe..ede76da 100644
--- a/Source/WebCore/css/CSSGradientValue.cpp
+++ b/Source/WebCore/css/CSSGradientValue.cpp
@@ -41,27 +41,28 @@ using namespace std;
namespace WebCore {
-Image* CSSGradientValue::image(RenderObject* renderer, const IntSize& size)
+PassRefPtr<Image> CSSGradientValue::image(RenderObject* renderer, const IntSize& size)
{
- if (!m_clients.contains(renderer))
- return 0;
-
- // Need to look up our size. Create a string of width*height to use as a hash key.
- // FIXME: hashing based only on size is not sufficient. Color stops may use context-sensitive units (like em)
- // that should force the color stop positions to be recomputed.
- Image* result = getImage(renderer, size);
- if (result)
- return result;
-
if (size.isEmpty())
return 0;
+ bool cacheable = isCacheable();
+ if (cacheable) {
+ if (!m_clients.contains(renderer))
+ return 0;
+
+ // Need to look up our size. Create a string of width*height to use as a hash key.
+ Image* result = getImage(renderer, size);
+ if (result)
+ return result;
+ }
+
// We need to create an image.
RefPtr<Image> newImage = GeneratedImage::create(createGradient(renderer, size), size);
- result = newImage.get();
- putImage(size, newImage.release());
+ if (cacheable)
+ putImage(size, newImage);
- return result;
+ return newImage.release();
}
// Should only ever be called for deprecated gradients.
@@ -280,7 +281,7 @@ void CSSGradientValue::addStops(Gradient* gradient, RenderObject* renderer, Rend
float lastOffset = stops[stops.size() - 1].offset;
if (lastOffset < maxExtent) {
float currOffset = lastOffset;
- size_t srcStopOrdinal = 0;
+ size_t srcStopOrdinal = originalFirstStopIndex;
while (true) {
GradientStop newStop = stops[srcStopOrdinal];
@@ -289,7 +290,7 @@ void CSSGradientValue::addStops(Gradient* gradient, RenderObject* renderer, Rend
if (currOffset > maxExtent)
break;
if (srcStopOrdinal < originalNumStops - 1)
- currOffset += stops[originalFirstStopIndex + srcStopOrdinal + 1].offset - stops[originalFirstStopIndex + srcStopOrdinal].offset;
+ currOffset += stops[srcStopOrdinal + 1].offset - stops[srcStopOrdinal].offset;
srcStopOrdinal = (srcStopOrdinal + 1) % originalNumStops;
}
}
@@ -406,6 +407,21 @@ FloatPoint CSSGradientValue::computeEndPoint(CSSPrimitiveValue* first, CSSPrimit
return result;
}
+bool CSSGradientValue::isCacheable() const
+{
+ for (size_t i = 0; i < m_stops.size(); ++i) {
+ const CSSGradientColorStop& stop = m_stops[i];
+ if (!stop.m_position)
+ continue;
+
+ unsigned short unitType = stop.m_position->primitiveType();
+ if (unitType == CSSPrimitiveValue::CSS_EMS || unitType == CSSPrimitiveValue::CSS_EXS || unitType == CSSPrimitiveValue::CSS_REMS)
+ return false;
+ }
+
+ return true;
+}
+
String CSSLinearGradientValue::cssText() const
{
String result;
diff --git a/Source/WebCore/css/CSSGradientValue.h b/Source/WebCore/css/CSSGradientValue.h
index 0b5ca77..b19548e 100644
--- a/Source/WebCore/css/CSSGradientValue.h
+++ b/Source/WebCore/css/CSSGradientValue.h
@@ -46,7 +46,7 @@ struct CSSGradientColorStop {
class CSSGradientValue : public CSSImageGeneratorValue {
public:
- virtual Image* image(RenderObject*, const IntSize&);
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&);
void setFirstX(PassRefPtr<CSSPrimitiveValue> val) { m_firstX = val; }
void setFirstY(PassRefPtr<CSSPrimitiveValue> val) { m_firstY = val; }
@@ -81,6 +81,8 @@ protected:
// Resolve points/radii to front end values.
FloatPoint computeEndPoint(CSSPrimitiveValue*, CSSPrimitiveValue*, RenderStyle*, RenderStyle* rootStyle, const IntSize&);
+
+ bool isCacheable() const;
// Points. Some of these may be null for linear gradients.
RefPtr<CSSPrimitiveValue> m_firstX;
diff --git a/Source/WebCore/css/CSSGrammar.y b/Source/WebCore/css/CSSGrammar.y
index a5fe795..03d25d9 100644
--- a/Source/WebCore/css/CSSGrammar.y
+++ b/Source/WebCore/css/CSSGrammar.y
@@ -69,8 +69,8 @@ using namespace HTMLNames;
CSSRule* rule;
CSSRuleList* ruleList;
- CSSSelector* selector;
- Vector<CSSSelector*>* selectorList;
+ CSSParserSelector* selector;
+ Vector<OwnPtr<CSSParserSelector> >* selectorList;
CSSSelector::MarginBoxType marginBox;
CSSSelector::Relation relation;
MediaList* mediaList;
@@ -663,14 +663,14 @@ page_selector:
IDENT {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace);
+ $$->setTag(QualifiedName(nullAtom, $1, p->m_defaultNamespace));
$$->setForPage();
}
| IDENT pseudo_page {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = $2;
if ($$) {
- $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace);
+ $$->setTag(QualifiedName(nullAtom, $1, p->m_defaultNamespace));
$$->setForPage();
}
}
@@ -812,7 +812,6 @@ selector_list:
if ($1) {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->reusableSelectorVector();
- deleteAllValues(*$$);
$$->shrink(0);
$$->append(p->sinkFloatingSelector($1));
p->updateLastSelectorLineAndPosition();
@@ -853,10 +852,10 @@ selector:
$$ = 0;
else if ($$) {
CSSParser* p = static_cast<CSSParser*>(parser);
- CSSSelector* end = $$;
+ CSSParserSelector* end = $$;
while (end->tagHistory())
end = end->tagHistory();
- end->m_relation = CSSSelector::Descendant;
+ end->setRelation(CSSSelector::Descendant);
end->setTagHistory(p->sinkFloatingSelector($1));
if (Document* doc = p->document())
doc->setUsesDescendantRules(true);
@@ -868,10 +867,10 @@ selector:
$$ = 0;
else if ($$) {
CSSParser* p = static_cast<CSSParser*>(parser);
- CSSSelector* end = $$;
+ CSSParserSelector* end = $$;
while (end->tagHistory())
end = end->tagHistory();
- end->m_relation = $2;
+ end->setRelation($2);
end->setTagHistory(p->sinkFloatingSelector($1));
if ($2 == CSSSelector::Child) {
if (Document* doc = p->document())
@@ -897,7 +896,7 @@ simple_selector:
element_name {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace);
+ $$->setTag(QualifiedName(nullAtom, $1, p->m_defaultNamespace));
}
| element_name specifier_list {
$$ = $2;
@@ -914,10 +913,10 @@ simple_selector:
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
if (p->m_styleSheet)
- $$->m_tag = QualifiedName(namespacePrefix, $2,
- p->m_styleSheet->determineNamespace(namespacePrefix));
+ $$->setTag(QualifiedName(namespacePrefix, $2,
+ p->m_styleSheet->determineNamespace(namespacePrefix)));
else // FIXME: Shouldn't this case be an error?
- $$->m_tag = QualifiedName(nullAtom, $2, p->m_defaultNamespace);
+ $$->setTag(QualifiedName(nullAtom, $2, p->m_defaultNamespace));
}
| namespace_selector element_name specifier_list {
$$ = $3;
@@ -956,8 +955,8 @@ specifier_list:
$$ = 0;
else if ($1) {
CSSParser* p = static_cast<CSSParser*>(parser);
- CSSSelector* end;
- CSSSelector* history;
+ CSSParserSelector* end;
+ CSSParserSelector* history;
// Ensure that unknown pseudo element always stays at the top of selector chain.
if ($2->isUnknownPseudoElement()) {
end = $2;
@@ -969,7 +968,7 @@ specifier_list:
$$ = end;
while(end->tagHistory())
end = end->tagHistory();
- end->m_relation = CSSSelector::SubSelector;
+ end->setRelation(CSSSelector::SubSelector);
end->setTagHistory(p->sinkFloatingSelector(history));
}
}
@@ -982,10 +981,10 @@ specifier:
IDSEL {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::Id;
+ $$->setMatch(CSSSelector::Id);
if (!p->m_strict)
$1.lower();
- $$->m_value = $1;
+ $$->setValue($1);
}
| HEX {
if ($1.characters[0] >= '0' && $1.characters[0] <= '9') {
@@ -993,10 +992,10 @@ specifier:
} else {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::Id;
+ $$->setMatch(CSSSelector::Id);
if (!p->m_strict)
$1.lower();
- $$->m_value = $1;
+ $$->setValue($1);
}
}
| class
@@ -1008,10 +1007,10 @@ class:
'.' IDENT {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::Class;
+ $$->setMatch(CSSSelector::Class);
if (!p->m_strict)
$2.lower();
- $$->m_value = $2;
+ $$->setValue($2);
}
;
@@ -1030,13 +1029,13 @@ attrib:
'[' maybe_space attr_name ']' {
$$ = static_cast<CSSParser*>(parser)->createFloatingSelector();
$$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
- $$->m_match = CSSSelector::Set;
+ $$->setMatch(CSSSelector::Set);
}
| '[' maybe_space attr_name match maybe_space ident_or_string maybe_space ']' {
$$ = static_cast<CSSParser*>(parser)->createFloatingSelector();
$$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
- $$->m_match = (CSSSelector::Match)$4;
- $$->m_value = $6;
+ $$->setMatch((CSSSelector::Match)$4);
+ $$->setValue($6);
}
| '[' maybe_space namespace_selector attr_name ']' {
AtomicString namespacePrefix = $3;
@@ -1044,7 +1043,7 @@ attrib:
$$ = p->createFloatingSelector();
$$->setAttribute(QualifiedName(namespacePrefix, $4,
p->m_styleSheet->determineNamespace(namespacePrefix)));
- $$->m_match = CSSSelector::Set;
+ $$->setMatch(CSSSelector::Set);
}
| '[' maybe_space namespace_selector attr_name match maybe_space ident_or_string maybe_space ']' {
AtomicString namespacePrefix = $3;
@@ -1052,8 +1051,8 @@ attrib:
$$ = p->createFloatingSelector();
$$->setAttribute(QualifiedName(namespacePrefix, $4,
p->m_styleSheet->determineNamespace(namespacePrefix)));
- $$->m_match = (CSSSelector::Match)$5;
- $$->m_value = $7;
+ $$->setMatch((CSSSelector::Match)$5);
+ $$->setValue($7);
}
;
@@ -1086,9 +1085,9 @@ ident_or_string:
pseudo_page:
':' IDENT {
$$ = static_cast<CSSParser*>(parser)->createFloatingSelector();
- $$->m_match = CSSSelector::PagePseudoClass;
+ $$->setMatch(CSSSelector::PagePseudoClass);
$2.lower();
- $$->m_value = $2;
+ $$->setValue($2);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoUnknown)
$$ = 0;
@@ -1097,9 +1096,9 @@ pseudo_page:
pseudo:
':' IDENT {
$$ = static_cast<CSSParser*>(parser)->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoClass;
+ $$->setMatch(CSSSelector::PseudoClass);
$2.lower();
- $$->m_value = $2;
+ $$->setValue($2);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoUnknown)
$$ = 0;
@@ -1131,9 +1130,9 @@ pseudo:
}
| ':' ':' IDENT {
$$ = static_cast<CSSParser*>(parser)->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoElement;
+ $$->setMatch(CSSSelector::PseudoElement);
$3.lower();
- $$->m_value = $3;
+ $$->setValue($3);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoFirstLine) {
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -1150,9 +1149,9 @@ pseudo:
| ':' FUNCTION maybe_space NTH maybe_space ')' {
CSSParser *p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoClass;
+ $$->setMatch(CSSSelector::PseudoClass);
$$->setArgument($4);
- $$->m_value = $2;
+ $$->setValue($2);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoUnknown)
$$ = 0;
@@ -1168,9 +1167,9 @@ pseudo:
| ':' FUNCTION maybe_space maybe_unary_operator INTEGER maybe_space ')' {
CSSParser *p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoClass;
+ $$->setMatch(CSSSelector::PseudoClass);
$$->setArgument(String::number($4 * $5));
- $$->m_value = $2;
+ $$->setValue($2);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoUnknown)
$$ = 0;
@@ -1186,10 +1185,10 @@ pseudo:
| ':' FUNCTION maybe_space IDENT maybe_space ')' {
CSSParser *p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoClass;
+ $$->setMatch(CSSSelector::PseudoClass);
$$->setArgument($4);
$2.lower();
- $$->m_value = $2;
+ $$->setValue($2);
CSSSelector::PseudoType type = $$->pseudoType();
if (type == CSSSelector::PseudoUnknown)
$$ = 0;
@@ -1211,10 +1210,10 @@ pseudo:
else {
CSSParser* p = static_cast<CSSParser*>(parser);
$$ = p->createFloatingSelector();
- $$->m_match = CSSSelector::PseudoClass;
- $$->setSimpleSelector(p->sinkFloatingSelector($4));
+ $$->setMatch(CSSSelector::PseudoClass);
+ $$->setSimpleSelector(p->sinkFloatingSelector($4)->releaseSelector());
$2.lower();
- $$->m_value = $2;
+ $$->setValue($2);
}
}
;
diff --git a/Source/WebCore/css/CSSImageGeneratorValue.h b/Source/WebCore/css/CSSImageGeneratorValue.h
index c053bfe..f5c17f5 100644
--- a/Source/WebCore/css/CSSImageGeneratorValue.h
+++ b/Source/WebCore/css/CSSImageGeneratorValue.h
@@ -44,7 +44,7 @@ public:
void addClient(RenderObject*, const IntSize&);
void removeClient(RenderObject*);
- virtual Image* image(RenderObject*, const IntSize&) = 0;
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) = 0;
StyleGeneratedImage* generatedImage();
diff --git a/Source/WebCore/css/CSSImageValue.cpp b/Source/WebCore/css/CSSImageValue.cpp
index a9038b9..6896596 100644
--- a/Source/WebCore/css/CSSImageValue.cpp
+++ b/Source/WebCore/css/CSSImageValue.cpp
@@ -67,6 +67,10 @@ StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader)
StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader, const String& url)
{
ASSERT(loader);
+ if (!loader) {
+ // FIXME: Remove when http://webkit.org/b/53045 is fixed.
+ CRASH();
+ }
if (!m_accessedImage) {
m_accessedImage = true;
diff --git a/Source/WebCore/css/CSSMediaRule.cpp b/Source/WebCore/css/CSSMediaRule.cpp
index 6348762..46dc780 100644
--- a/Source/WebCore/css/CSSMediaRule.cpp
+++ b/Source/WebCore/css/CSSMediaRule.cpp
@@ -88,8 +88,8 @@ unsigned CSSMediaRule::insertRule(const String& rule, unsigned index, ExceptionC
newRule->setParent(this);
unsigned returnedIndex = m_lstCSSRules->insertRule(newRule.get(), index);
- // stylesheet() can only return 0 for computed style declarations.
- stylesheet()->styleSheetChanged();
+ if (stylesheet())
+ stylesheet()->styleSheetChanged();
return returnedIndex;
}
@@ -105,8 +105,8 @@ void CSSMediaRule::deleteRule(unsigned index, ExceptionCode& ec)
m_lstCSSRules->deleteRule(index);
- // stylesheet() can only return 0 for computed style declarations.
- stylesheet()->styleSheetChanged();
+ if (stylesheet())
+ stylesheet()->styleSheetChanged();
}
String CSSMediaRule::cssText() const
diff --git a/Source/WebCore/css/CSSPageRule.cpp b/Source/WebCore/css/CSSPageRule.cpp
index c85c1aa..c3dbcaa 100644
--- a/Source/WebCore/css/CSSPageRule.cpp
+++ b/Source/WebCore/css/CSSPageRule.cpp
@@ -27,12 +27,9 @@
namespace WebCore {
-CSSPageRule::CSSPageRule(CSSStyleSheet* parent, CSSSelector* selector, int sourceLine)
+CSSPageRule::CSSPageRule(CSSStyleSheet* parent, int sourceLine)
: CSSStyleRule(parent, sourceLine)
{
- Vector<CSSSelector*> selectors;
- selectors.append(selector);
- adoptSelectorVector(selectors);
}
CSSPageRule::~CSSPageRule()
diff --git a/Source/WebCore/css/CSSPageRule.h b/Source/WebCore/css/CSSPageRule.h
index bdfb751..9c1c41f 100644
--- a/Source/WebCore/css/CSSPageRule.h
+++ b/Source/WebCore/css/CSSPageRule.h
@@ -34,9 +34,9 @@ class CSSSelectorList;
class CSSPageRule : public CSSStyleRule {
public:
- static PassRefPtr<CSSPageRule> create(CSSStyleSheet* parent, CSSSelector* selector, int sourceLine)
+ static PassRefPtr<CSSPageRule> create(CSSStyleSheet* parent, int sourceLine)
{
- return adoptRef(new CSSPageRule(parent, selector, sourceLine));
+ return adoptRef(new CSSPageRule(parent, sourceLine));
}
virtual ~CSSPageRule();
@@ -44,7 +44,7 @@ public:
virtual String selectorText() const;
private:
- CSSPageRule(CSSStyleSheet* parent, CSSSelector* selector, int sourceLine);
+ CSSPageRule(CSSStyleSheet* parent, int sourceLine);
virtual bool isPageRule() { return true; }
diff --git a/Source/WebCore/css/CSSParser.cpp b/Source/WebCore/css/CSSParser.cpp
index 9142e67..55175a2 100644
--- a/Source/WebCore/css/CSSParser.cpp
+++ b/Source/WebCore/css/CSSParser.cpp
@@ -62,8 +62,10 @@
#include "HashTools.h"
#include "MediaList.h"
#include "MediaQueryExp.h"
+#include "Page.h"
#include "Pair.h"
#include "Rect.h"
+#include "RenderTheme.h"
#include "ShadowValue.h"
#include "WebKitCSSKeyframeRule.h"
#include "WebKitCSSKeyframesRule.h"
@@ -129,13 +131,6 @@ static bool hasPrefix(const char* string, unsigned length, const char* prefix)
return false;
}
-static int clampToSignedInteger(double d)
-{
- const double minIntAsDouble = std::numeric_limits<int>::min();
- const double maxIntAsDouble = std::numeric_limits<int>::max();
- return static_cast<int>(max(minIntAsDouble, min(d, maxIntAsDouble)));
-}
-
CSSParser::CSSParser(bool strictParsing)
: m_strict(strictParsing)
, m_important(false)
@@ -183,7 +178,6 @@ CSSParser::~CSSParser()
fastDeleteAllValues(m_floatingSelectors);
deleteAllValues(m_floatingValueLists);
deleteAllValues(m_floatingFunctions);
- deleteAllValues(m_reusableSelectorVector);
}
void CSSParserString::lower()
@@ -330,11 +324,14 @@ bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict)
return false;
CSSValue* value = parser.m_parsedProperties[0]->value();
- if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) {
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- color = primitiveValue->getRGBA32Value();
- }
+ if (value->cssValueType() != CSSValue::CSS_PRIMITIVE_VALUE)
+ return false;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_RGBCOLOR)
+ return false;
+ color = primitiveValue->getRGBA32Value();
return true;
}
@@ -356,6 +353,22 @@ bool CSSParser::parseColor(CSSMutableStyleDeclaration* declaration, const String
return (m_numParsedProperties && m_parsedProperties[0]->m_id == CSSPropertyColor);
}
+bool CSSParser::parseSystemColor(RGBA32& color, const String& string, Document* document)
+{
+ if (!document || !document->page())
+ return false;
+
+ CSSParserString cssColor;
+ cssColor.characters = const_cast<UChar*>(string.characters());
+ cssColor.length = string.length();
+ int id = cssValueKeywordID(cssColor);
+ if (id <= 0)
+ return false;
+
+ color = document->page()->theme()->systemColor(id).rgb();
+ return true;
+}
+
void CSSParser::parseSelector(const String& string, Document* doc, CSSSelectorList& selectorList)
{
#ifdef ANDROID_INSTRUMENT
@@ -1675,14 +1688,14 @@ bool CSSParser::parseValue(int propId, bool important)
// FIXME: Add CSSPropertyBackgroundSize to the shorthand.
const int properties[] = { CSSPropertyBackgroundImage, CSSPropertyBackgroundRepeat,
CSSPropertyBackgroundAttachment, CSSPropertyBackgroundPosition, CSSPropertyBackgroundOrigin,
- CSSPropertyBackgroundColor };
- return parseFillShorthand(propId, properties, 6, important);
+ CSSPropertyBackgroundClip, CSSPropertyBackgroundColor };
+ return parseFillShorthand(propId, properties, 7, important);
}
case CSSPropertyWebkitMask: {
const int properties[] = { CSSPropertyWebkitMaskImage, CSSPropertyWebkitMaskRepeat,
CSSPropertyWebkitMaskAttachment, CSSPropertyWebkitMaskPosition,
- CSSPropertyWebkitMaskOrigin };
- return parseFillShorthand(propId, properties, 5, important);
+ CSSPropertyWebkitMaskOrigin, CSSPropertyWebkitMaskClip };
+ return parseFillShorthand(propId, properties, 6, important);
}
case CSSPropertyBorder:
// [ 'border-width' || 'border-style' || <color> ] | inherit
@@ -1988,6 +2001,7 @@ bool CSSParser::parseFillShorthand(int propId, const int* properties, int numPro
RefPtr<CSSValue> clipValue;
RefPtr<CSSValue> positionYValue;
RefPtr<CSSValue> repeatYValue;
+ bool foundClip = false;
int i;
while (m_valueList->current()) {
@@ -2010,7 +2024,7 @@ bool CSSParser::parseFillShorthand(int propId, const int* properties, int numPro
if ((properties[i] == CSSPropertyBackgroundOrigin || properties[i] == CSSPropertyWebkitMaskOrigin) && !parsedProperty[i]) {
// If background-origin wasn't present, then reset background-clip also.
addFillValue(clipValue, CSSInitialValue::createImplicit());
- }
+ }
}
parsedProperty[i] = false;
}
@@ -2039,6 +2053,11 @@ bool CSSParser::parseFillShorthand(int propId, const int* properties, int numPro
else
addFillValue(clipValue, CSSInitialValue::createImplicit()); // Some value was used for origin that is not supported by clip. Just reset clip instead.
}
+ if (properties[i] == CSSPropertyBackgroundClip || properties[i] == CSSPropertyWebkitMaskClip) {
+ // Update clipValue
+ addFillValue(clipValue, val1.release());
+ foundClip = true;
+ }
}
}
}
@@ -2082,13 +2101,16 @@ bool CSSParser::parseFillShorthand(int propId, const int* properties, int numPro
addProperty(CSSPropertyWebkitMaskRepeatX, values[i].release(), important);
// it's OK to call repeatYValue.release() since we only see CSSPropertyBackgroundPosition once
addProperty(CSSPropertyWebkitMaskRepeatY, repeatYValue.release(), important);
- } else
+ } else if ((properties[i] == CSSPropertyBackgroundClip || properties[i] == CSSPropertyWebkitMaskClip) && !foundClip)
+ // Value is already set while updating origin
+ continue;
+ else
addProperty(properties[i], values[i].release(), important);
// Add in clip values when we hit the corresponding origin property.
- if (properties[i] == CSSPropertyBackgroundOrigin)
+ if (properties[i] == CSSPropertyBackgroundOrigin && !foundClip)
addProperty(CSSPropertyBackgroundClip, clipValue.release(), important);
- else if (properties[i] == CSSPropertyWebkitMaskOrigin)
+ else if (properties[i] == CSSPropertyWebkitMaskOrigin && !foundClip)
addProperty(CSSPropertyWebkitMaskClip, clipValue.release(), important);
}
@@ -4722,7 +4744,7 @@ bool CSSParser::parseCounter(int propId, int defaultValue, bool important)
case VAL: {
int i = defaultValue;
if (val && val->unit == CSSPrimitiveValue::CSS_NUMBER) {
- i = clampToSignedInteger(val->fValue);
+ i = clampToInteger(val->fValue);
m_valueList->next();
}
@@ -5409,6 +5431,10 @@ PassRefPtr<CSSValueList> CSSParser::parseTransform()
// 1st param of translateZ() cannot be a percentage
if (!validUnit(a, FLength, true))
return 0;
+ } else if (info.type() == WebKitCSSTransformValue::PerspectiveTransformOperation && argNumber == 0) {
+ // 1st param of perspective() must be a non-negative number (deprecated) or length.
+ if (!validUnit(a, FNumber | FLength | FNonNeg, true))
+ return 0;
} else if (!validUnit(a, unit, true))
return 0;
@@ -5789,20 +5815,20 @@ void CSSParser::countLines()
}
}
-CSSSelector* CSSParser::createFloatingSelector()
+CSSParserSelector* CSSParser::createFloatingSelector()
{
- CSSSelector* selector = fastNew<CSSSelector>();
+ CSSParserSelector* selector = new CSSParserSelector;
m_floatingSelectors.add(selector);
return selector;
}
-CSSSelector* CSSParser::sinkFloatingSelector(CSSSelector* selector)
+PassOwnPtr<CSSParserSelector> CSSParser::sinkFloatingSelector(CSSParserSelector* selector)
{
if (selector) {
ASSERT(m_floatingSelectors.contains(selector));
m_floatingSelectors.remove(selector);
}
- return selector;
+ return adoptPtr(selector);
}
CSSParserValueList* CSSParser::createFloatingValueList()
@@ -5944,7 +5970,7 @@ WebKitCSSKeyframesRule* CSSParser::createKeyframesRule()
return rulePtr;
}
-CSSRule* CSSParser::createStyleRule(Vector<CSSSelector*>* selectors)
+CSSRule* CSSParser::createStyleRule(Vector<OwnPtr<CSSParserSelector> >* selectors)
{
CSSStyleRule* result = 0;
markRuleBodyEnd();
@@ -6006,21 +6032,21 @@ void CSSParser::addNamespace(const AtomicString& prefix, const AtomicString& uri
m_styleSheet->addNamespace(this, prefix, uri);
}
-void CSSParser::updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSSelector* specifiers)
+void CSSParser::updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector* specifiers)
{
AtomicString determinedNamespace = namespacePrefix != nullAtom && m_styleSheet ? m_styleSheet->determineNamespace(namespacePrefix) : m_defaultNamespace;
QualifiedName tag = QualifiedName(namespacePrefix, elementName, determinedNamespace);
if (!specifiers->isUnknownPseudoElement()) {
- specifiers->m_tag = tag;
+ specifiers->setTag(tag);
return;
}
if (Document* doc = document())
doc->setUsesDescendantRules(true);
- specifiers->m_relation = CSSSelector::ShadowDescendant;
- if (CSSSelector* history = specifiers->tagHistory()) {
- history->m_tag = tag;
+ specifiers->setRelation(CSSSelector::ShadowDescendant);
+ if (CSSParserSelector* history = specifiers->tagHistory()) {
+ history->setTag(tag);
return;
}
@@ -6029,19 +6055,22 @@ void CSSParser::updateSpecifiersWithElementName(const AtomicString& namespacePre
if (elementName == starAtom && m_defaultNamespace == starAtom)
return;
- CSSSelector* elementNameSelector = fastNew<CSSSelector>();
- elementNameSelector->m_tag = tag;
+ CSSParserSelector* elementNameSelector = new CSSParserSelector;
+ elementNameSelector->setTag(tag);
specifiers->setTagHistory(elementNameSelector);
}
-CSSRule* CSSParser::createPageRule(CSSSelector* pageSelector)
+CSSRule* CSSParser::createPageRule(PassOwnPtr<CSSParserSelector> pageSelector)
{
// FIXME: Margin at-rules are ignored.
m_allowImportRules = m_allowNamespaceDeclarations = false;
CSSPageRule* pageRule = 0;
if (pageSelector) {
- RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLineNumber);
+ RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, m_lastSelectorLineNumber);
+ Vector<OwnPtr<CSSParserSelector> > selectorVector;
+ selectorVector.append(pageSelector);
+ rule->adoptSelectorVector(selectorVector);
rule->setDeclaration(CSSMutableStyleDeclaration::create(rule.get(), m_parsedProperties, m_numParsedProperties));
pageRule = rule.get();
m_parsedStyleObjects.append(rule.release());
diff --git a/Source/WebCore/css/CSSParser.h b/Source/WebCore/css/CSSParser.h
index d326812..6ccfbe2 100644
--- a/Source/WebCore/css/CSSParser.h
+++ b/Source/WebCore/css/CSSParser.h
@@ -64,6 +64,7 @@ namespace WebCore {
PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&);
bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important);
static bool parseColor(RGBA32& color, const String&, bool strict = false);
+ static bool parseSystemColor(RGBA32& color, const String&, Document*);
bool parseColor(CSSMutableStyleDeclaration*, const String&);
bool parseDeclaration(CSSMutableStyleDeclaration*, const String&, RefPtr<CSSStyleSourceData>* styleSourceData = 0);
bool parseMediaQuery(MediaList*, const String&);
@@ -170,8 +171,8 @@ namespace WebCore {
int yyparse();
- CSSSelector* createFloatingSelector();
- CSSSelector* sinkFloatingSelector(CSSSelector*);
+ CSSParserSelector* createFloatingSelector();
+ PassOwnPtr<CSSParserSelector> sinkFloatingSelector(CSSParserSelector*);
CSSParserValueList* createFloatingValueList();
CSSParserValueList* sinkFloatingValueList(CSSParserValueList*);
@@ -188,9 +189,9 @@ namespace WebCore {
WebKitCSSKeyframesRule* createKeyframesRule();
CSSRule* createMediaRule(MediaList*, CSSRuleList*);
CSSRuleList* createRuleList();
- CSSRule* createStyleRule(Vector<CSSSelector*>* selectors);
+ CSSRule* createStyleRule(Vector<OwnPtr<CSSParserSelector> >* selectors);
CSSRule* createFontFaceRule();
- CSSRule* createPageRule(CSSSelector* pageSelector);
+ CSSRule* createPageRule(PassOwnPtr<CSSParserSelector> pageSelector);
CSSRule* createMarginAtRule(CSSSelector::MarginBoxType marginBox);
void startDeclarationsForMarginBox();
void endDeclarationsForMarginBox();
@@ -204,11 +205,11 @@ namespace WebCore {
PassOwnPtr<MediaQuery> sinkFloatingMediaQuery(MediaQuery*);
void addNamespace(const AtomicString& prefix, const AtomicString& uri);
- void updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSSelector*);
+ void updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*);
void invalidBlockHit();
- Vector<CSSSelector*>* reusableSelectorVector() { return &m_reusableSelectorVector; }
+ Vector<OwnPtr<CSSParserSelector> >* reusableSelectorVector() { return &m_reusableSelectorVector; }
void updateLastSelectorLineAndPosition();
@@ -302,7 +303,7 @@ namespace WebCore {
Vector<RefPtr<StyleBase> > m_parsedStyleObjects;
Vector<RefPtr<CSSRuleList> > m_parsedRuleLists;
- HashSet<CSSSelector*> m_floatingSelectors;
+ HashSet<CSSParserSelector*> m_floatingSelectors;
HashSet<CSSParserValueList*> m_floatingValueLists;
HashSet<CSSParserFunction*> m_floatingFunctions;
@@ -310,7 +311,7 @@ namespace WebCore {
OwnPtr<MediaQueryExp> m_floatingMediaQueryExp;
OwnPtr<Vector<OwnPtr<MediaQueryExp> > > m_floatingMediaQueryExpList;
- Vector<CSSSelector*> m_reusableSelectorVector;
+ Vector<OwnPtr<CSSParserSelector> > m_reusableSelectorVector;
// defines units allowed for a certain property, used in parseUnit
enum Units {
diff --git a/Source/WebCore/css/CSSParserValues.cpp b/Source/WebCore/css/CSSParserValues.cpp
index 06651f1..dc0e82b 100644
--- a/Source/WebCore/css/CSSParserValues.cpp
+++ b/Source/WebCore/css/CSSParserValues.cpp
@@ -20,11 +20,15 @@
#include "config.h"
#include "CSSParserValues.h"
+
#include "CSSPrimitiveValue.h"
#include "CSSFunctionValue.h"
#include "CSSQuirkPrimitiveValue.h"
+#include "CSSSelector.h"
namespace WebCore {
+
+using namespace WTF;
CSSParserValueList::~CSSParserValueList()
{
@@ -70,6 +74,27 @@ PassRefPtr<CSSValue> CSSParserValue::createCSSValue()
parsedValue = CSSQuirkPrimitiveValue::create(fValue, CSSPrimitiveValue::CSS_EMS);
return parsedValue;
}
+
+CSSParserSelector::CSSParserSelector()
+ : m_selector(adoptPtr(fastNew<CSSSelector>()))
+{
+}
+
+CSSParserSelector::~CSSParserSelector()
+{
+ if (!m_tagHistory)
+ return;
+ Vector<CSSParserSelector*, 16> toDelete;
+ CSSParserSelector* selector = m_tagHistory.leakPtr();
+ while (true) {
+ toDelete.append(selector);
+ CSSParserSelector* next = selector->m_tagHistory.leakPtr();
+ if (!next)
+ break;
+ selector = next;
+ }
+ deleteAllValues(toDelete);
+}
}
diff --git a/Source/WebCore/css/CSSParserValues.h b/Source/WebCore/css/CSSParserValues.h
index 996e783..d084091 100644
--- a/Source/WebCore/css/CSSParserValues.h
+++ b/Source/WebCore/css/CSSParserValues.h
@@ -21,11 +21,13 @@
#ifndef CSSParserValues_h
#define CSSParserValues_h
+#include "CSSSelector.h"
#include <wtf/text/AtomicString.h>
namespace WebCore {
class CSSValue;
+class QualifiedName;
struct CSSParserString {
UChar* characters;
@@ -91,6 +93,35 @@ public:
OwnPtr<CSSParserValueList> args;
};
+class CSSParserSelector {
+ WTF_MAKE_FAST_ALLOCATED;
+public:
+ CSSParserSelector();
+ ~CSSParserSelector();
+
+ PassOwnPtr<CSSSelector> releaseSelector() { return m_selector.release(); }
+
+ void setTag(const QualifiedName& value) { m_selector->setTag(value); }
+ void setValue(const AtomicString& value) { m_selector->setValue(value); }
+ void setAttribute(const QualifiedName& value) { m_selector->setAttribute(value); }
+ void setArgument(const AtomicString& value) { m_selector->setArgument(value); }
+ void setSimpleSelector(PassOwnPtr<CSSSelector> value) { m_selector->setSimpleSelector(value); }
+ void setMatch(CSSSelector::Match value) { m_selector->m_match = value; }
+ void setRelation(CSSSelector::Relation value) { m_selector->m_relation = value; }
+ void setForPage() { m_selector->setForPage(); }
+
+ CSSSelector::PseudoType pseudoType() const { return m_selector->pseudoType(); }
+ bool isUnknownPseudoElement() const { return m_selector->isUnknownPseudoElement(); }
+ bool isSimple() const { return !m_tagHistory && m_selector->isSimple(); }
+
+ CSSParserSelector* tagHistory() const { return m_tagHistory.get(); }
+ void setTagHistory(PassOwnPtr<CSSParserSelector> selector) { m_tagHistory = selector; }
+
+private:
+ OwnPtr<CSSSelector> m_selector;
+ OwnPtr<CSSParserSelector> m_tagHistory;
+};
+
}
#endif
diff --git a/Source/WebCore/css/CSSPrimitiveValue.cpp b/Source/WebCore/css/CSSPrimitiveValue.cpp
index ce1b87b..6d930bd 100644
--- a/Source/WebCore/css/CSSPrimitiveValue.cpp
+++ b/Source/WebCore/css/CSSPrimitiveValue.cpp
@@ -127,10 +127,20 @@ PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createColor(unsigned rgbValue)
// These are the empty and deleted values of the hash table.
if (rgbValue == Color::transparent) {
static CSSPrimitiveValue* colorTransparent = createUncachedColor(Color::transparent).releaseRef();
+#if CPU(ARM) && OS(LINUX)
+ // A workaround for gcc bug on ARM.
+ if (!colorTransparent)
+ return 0;
+#endif
return colorTransparent;
}
if (rgbValue == Color::white) {
static CSSPrimitiveValue* colorWhite = createUncachedColor(Color::white).releaseRef();
+#if CPU(ARM) && OS(LINUX)
+ // A workaround for gcc bug on ARM.
+ if (!colorWhite)
+ return 0;
+#endif
return colorWhite;
}
RefPtr<CSSPrimitiveValue> primitiveValue = colorValueCache->get(rgbValue);
@@ -400,7 +410,7 @@ double CSSPrimitiveValue::computeLengthDouble(RenderStyle* style, RenderStyle* r
// We really need to compute EX using fontMetrics for the original specifiedSize and not use
// our actual constructed rendering font.
applyZoomMultiplier = false;
- factor = style->font().xHeight();
+ factor = style->fontMetrics().xHeight();
break;
case CSS_REMS:
applyZoomMultiplier = false;
@@ -914,81 +924,6 @@ String CSSPrimitiveValue::cssText() const
return text;
}
-CSSParserValue CSSPrimitiveValue::parserValue() const
-{
- // We only have to handle a subset of types.
- CSSParserValue value;
- value.id = 0;
- value.isInt = false;
- value.unit = CSSPrimitiveValue::CSS_IDENT;
- switch (m_type) {
- case CSS_NUMBER:
- case CSS_PERCENTAGE:
- case CSS_EMS:
- case CSS_EXS:
- case CSS_REMS:
- case CSS_PX:
- case CSS_CM:
- case CSS_MM:
- case CSS_IN:
- case CSS_PT:
- case CSS_PC:
- case CSS_DEG:
- case CSS_RAD:
- case CSS_GRAD:
- case CSS_MS:
- case CSS_S:
- case CSS_HZ:
- case CSS_KHZ:
- case CSS_DIMENSION:
- case CSS_TURN:
- value.fValue = m_value.num;
- value.unit = m_type;
- break;
- case CSS_STRING:
- case CSS_URI:
- case CSS_PARSER_HEXCOLOR:
- value.string.characters = const_cast<UChar*>(m_value.string->characters());
- value.string.length = m_value.string->length();
- value.unit = m_type;
- break;
- case CSS_IDENT: {
- value.id = m_value.ident;
- const AtomicString& name = valueOrPropertyName(m_value.ident);
- value.string.characters = const_cast<UChar*>(name.characters());
- value.string.length = name.length();
- break;
- }
- case CSS_PARSER_OPERATOR:
- value.iValue = m_value.ident;
- value.unit = CSSParserValue::Operator;
- break;
- case CSS_PARSER_INTEGER:
- value.fValue = m_value.num;
- value.unit = CSSPrimitiveValue::CSS_NUMBER;
- value.isInt = true;
- break;
- case CSS_PARSER_IDENTIFIER:
- value.string.characters = const_cast<UChar*>(m_value.string->characters());
- value.string.length = m_value.string->length();
- value.unit = CSSPrimitiveValue::CSS_IDENT;
- break;
- case CSS_UNKNOWN:
- case CSS_ATTR:
- case CSS_COUNTER:
- case CSS_RECT:
- case CSS_RGBCOLOR:
- case CSS_PAIR:
-#if ENABLE(DASHBOARD_SUPPORT)
- case CSS_DASHBOARD_REGION:
-#endif
- ASSERT_NOT_REACHED();
- break;
- }
-
- return value;
-}
-
void CSSPrimitiveValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet)
{
if (m_type == CSS_URI)
diff --git a/Source/WebCore/css/CSSPrimitiveValue.h b/Source/WebCore/css/CSSPrimitiveValue.h
index e12cd4c..c9892e8 100644
--- a/Source/WebCore/css/CSSPrimitiveValue.h
+++ b/Source/WebCore/css/CSSPrimitiveValue.h
@@ -185,8 +185,6 @@ public:
virtual bool isQuirkValue() { return false; }
- virtual CSSParserValue parserValue() const;
-
virtual void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*);
protected:
diff --git a/Source/WebCore/css/CSSRuleList.cpp b/Source/WebCore/css/CSSRuleList.cpp
index 0a312af..da65632 100644
--- a/Source/WebCore/css/CSSRuleList.cpp
+++ b/Source/WebCore/css/CSSRuleList.cpp
@@ -22,8 +22,10 @@
#include "config.h"
#include "CSSRuleList.h"
+#include "CSSMutableStyleDeclaration.h"
#include "CSSRule.h"
#include "StyleList.h"
+#include "WebKitCSSKeyframeRule.h"
namespace WebCore {
@@ -76,6 +78,11 @@ void CSSRuleList::deleteRule(unsigned index)
return;
}
+ if (m_lstCSSRules[index]->isKeyframeRule()) {
+ if (CSSMutableStyleDeclaration* style = static_cast<WebKitCSSKeyframeRule*>(m_lstCSSRules[index].get())->style())
+ style->setParent(0);
+ }
+
m_lstCSSRules[index]->setParent(0);
m_lstCSSRules.remove(index);
}
diff --git a/Source/WebCore/css/CSSSelector.cpp b/Source/WebCore/css/CSSSelector.cpp
index ca3814a..c804697 100644
--- a/Source/WebCore/css/CSSSelector.cpp
+++ b/Source/WebCore/css/CSSSelector.cpp
@@ -36,38 +36,15 @@
namespace WebCore {
using namespace HTMLNames;
-
-class CSSSelectorBag {
- WTF_MAKE_NONCOPYABLE(CSSSelectorBag);
-public:
- CSSSelectorBag() { }
- ~CSSSelectorBag()
- {
- ASSERT(isEmpty());
- }
-
- bool isEmpty() const
- {
- return m_stack.isEmpty();
- }
-
- void add(PassOwnPtr<CSSSelector> selector)
- {
- if (selector)
- m_stack.append(selector.leakPtr());
- }
-
- PassOwnPtr<CSSSelector> takeAny()
- {
- ASSERT(!isEmpty());
- OwnPtr<CSSSelector> selector = adoptPtr(m_stack.last());
- m_stack.removeLast();
- return selector.release();
- }
-
-private:
- Vector<CSSSelector*, 16> m_stack;
-};
+
+void CSSSelector::createRareData()
+{
+ if (m_hasRareData)
+ return;
+ // Move the value to the rare data stucture.
+ m_data.m_rareData = new RareData(adoptRef(m_data.m_value));
+ m_hasRareData = true;
+}
unsigned CSSSelector::specificity() const
{
@@ -161,40 +138,6 @@ PseudoId CSSSelector::pseudoId(PseudoType type)
return SEARCH_RESULTS_DECORATION;
case PseudoSearchResultsButton:
return SEARCH_RESULTS_BUTTON;
- case PseudoMediaControlsPanel:
- return MEDIA_CONTROLS_PANEL;
- case PseudoMediaControlsMuteButton:
- return MEDIA_CONTROLS_MUTE_BUTTON;
- case PseudoMediaControlsPlayButton:
- return MEDIA_CONTROLS_PLAY_BUTTON;
- case PseudoMediaControlsTimelineContainer:
- return MEDIA_CONTROLS_TIMELINE_CONTAINER;
- case PseudoMediaControlsVolumeSliderContainer:
- return MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER;
- case PseudoMediaControlsCurrentTimeDisplay:
- return MEDIA_CONTROLS_CURRENT_TIME_DISPLAY;
- case PseudoMediaControlsTimeRemainingDisplay:
- return MEDIA_CONTROLS_TIME_REMAINING_DISPLAY;
- case PseudoMediaControlsTimeline:
- return MEDIA_CONTROLS_TIMELINE;
- case PseudoMediaControlsVolumeSlider:
- return MEDIA_CONTROLS_VOLUME_SLIDER;
- case PseudoMediaControlsVolumeSliderMuteButton:
- return MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON;
- case PseudoMediaControlsSeekBackButton:
- return MEDIA_CONTROLS_SEEK_BACK_BUTTON;
- case PseudoMediaControlsSeekForwardButton:
- return MEDIA_CONTROLS_SEEK_FORWARD_BUTTON;
- case PseudoMediaControlsRewindButton:
- return MEDIA_CONTROLS_REWIND_BUTTON;
- case PseudoMediaControlsReturnToRealtimeButton:
- return MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON;
- case PseudoMediaControlsToggleClosedCaptions:
- return MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON;
- case PseudoMediaControlsStatusDisplay:
- return MEDIA_CONTROLS_STATUS_DISPLAY;
- case PseudoMediaControlsFullscreenButton:
- return MEDIA_CONTROLS_FULLSCREEN_BUTTON;
case PseudoScrollbar:
return SCROLLBAR;
case PseudoScrollbarButton:
@@ -213,14 +156,6 @@ PseudoId CSSSelector::pseudoId(PseudoType type)
return INNER_SPIN_BUTTON;
case PseudoOuterSpinButton:
return OUTER_SPIN_BUTTON;
- case PseudoProgressBarValue:
-#if ENABLE(PROGRESS_TAG)
- return PROGRESS_BAR_VALUE;
-#else
- ASSERT_NOT_REACHED();
- return NOPSEUDO;
-#endif
-
#if ENABLE(METER_TAG)
case PseudoMeterHorizontalBar:
return METER_HORIZONTAL_BAR;
@@ -369,32 +304,11 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap(
DEFINE_STATIC_LOCAL(AtomicString, lastOfType, ("last-of-type"));
DEFINE_STATIC_LOCAL(AtomicString, link, ("link"));
DEFINE_STATIC_LOCAL(AtomicString, lang, ("lang("));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsPanel, ("-webkit-media-controls-panel"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsMuteButton, ("-webkit-media-controls-mute-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsPlayButton, ("-webkit-media-controls-play-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeline, ("-webkit-media-controls-timeline"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsVolumeSlider, ("-webkit-media-controls-volume-slider"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsVolumeSliderMuteButton, ("-webkit-media-controls-volume-slider-mute-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekBackButton, ("-webkit-media-controls-seek-back-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekForwardButton, ("-webkit-media-controls-seek-forward-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsRewindButton, ("-webkit-media-controls-rewind-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsReturnToRealtimeButton, ("-webkit-media-controls-return-to-realtime-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsToggleClosedCaptionsButton, ("-webkit-media-controls-toggle-closed-captions-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsStatusDisplay, ("-webkit-media-controls-status-display"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsFullscreenButton, ("-webkit-media-controls-fullscreen-button"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimelineContainer, ("-webkit-media-controls-timeline-container"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsVolumeSliderContainer, ("-webkit-media-controls-volume-slider-container"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsCurrentTimeDisplay, ("-webkit-media-controls-current-time-display"));
- DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeRemainingDisplay, ("-webkit-media-controls-time-remaining-display"));
DEFINE_STATIC_LOCAL(AtomicString, notStr, ("not("));
DEFINE_STATIC_LOCAL(AtomicString, onlyChild, ("only-child"));
DEFINE_STATIC_LOCAL(AtomicString, onlyOfType, ("only-of-type"));
DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional"));
DEFINE_STATIC_LOCAL(AtomicString, outerSpinButton, ("-webkit-outer-spin-button"));
-#if ENABLE(PROGRESS_TAG)
- DEFINE_STATIC_LOCAL(AtomicString, progressBarValue, ("-webkit-progress-bar-value"));
-#endif
-
#if ENABLE(METER_TAG)
DEFINE_STATIC_LOCAL(AtomicString, meterHorizontalBar, ("-webkit-meter-horizontal-bar"));
DEFINE_STATIC_LOCAL(AtomicString, meterHorizontalOptimumValue, ("-webkit-meter-horizontal-optimum-value"));
@@ -486,32 +400,12 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap(
nameToPseudoType->set(innerSpinButton.impl(), CSSSelector::PseudoInnerSpinButton);
nameToPseudoType->set(link.impl(), CSSSelector::PseudoLink);
nameToPseudoType->set(lang.impl(), CSSSelector::PseudoLang);
- nameToPseudoType->set(mediaControlsPanel.impl(), CSSSelector::PseudoMediaControlsPanel);
- nameToPseudoType->set(mediaControlsMuteButton.impl(), CSSSelector::PseudoMediaControlsMuteButton);
- nameToPseudoType->set(mediaControlsPlayButton.impl(), CSSSelector::PseudoMediaControlsPlayButton);
- nameToPseudoType->set(mediaControlsCurrentTimeDisplay.impl(), CSSSelector::PseudoMediaControlsCurrentTimeDisplay);
- nameToPseudoType->set(mediaControlsTimeRemainingDisplay.impl(), CSSSelector::PseudoMediaControlsTimeRemainingDisplay);
- nameToPseudoType->set(mediaControlsTimeline.impl(), CSSSelector::PseudoMediaControlsTimeline);
- nameToPseudoType->set(mediaControlsVolumeSlider.impl(), CSSSelector::PseudoMediaControlsVolumeSlider);
- nameToPseudoType->set(mediaControlsVolumeSliderMuteButton.impl(), CSSSelector::PseudoMediaControlsVolumeSliderMuteButton);
- nameToPseudoType->set(mediaControlsSeekBackButton.impl(), CSSSelector::PseudoMediaControlsSeekBackButton);
- nameToPseudoType->set(mediaControlsSeekForwardButton.impl(), CSSSelector::PseudoMediaControlsSeekForwardButton);
- nameToPseudoType->set(mediaControlsRewindButton.impl(), CSSSelector::PseudoMediaControlsRewindButton);
- nameToPseudoType->set(mediaControlsReturnToRealtimeButton.impl(), CSSSelector::PseudoMediaControlsReturnToRealtimeButton);
- nameToPseudoType->set(mediaControlsToggleClosedCaptionsButton.impl(), CSSSelector::PseudoMediaControlsToggleClosedCaptions);
- nameToPseudoType->set(mediaControlsStatusDisplay.impl(), CSSSelector::PseudoMediaControlsStatusDisplay);
- nameToPseudoType->set(mediaControlsFullscreenButton.impl(), CSSSelector::PseudoMediaControlsFullscreenButton);
- nameToPseudoType->set(mediaControlsTimelineContainer.impl(), CSSSelector::PseudoMediaControlsTimelineContainer);
- nameToPseudoType->set(mediaControlsVolumeSliderContainer.impl(), CSSSelector::PseudoMediaControlsVolumeSliderContainer);
nameToPseudoType->set(notStr.impl(), CSSSelector::PseudoNot);
nameToPseudoType->set(nthChild.impl(), CSSSelector::PseudoNthChild);
nameToPseudoType->set(nthOfType.impl(), CSSSelector::PseudoNthOfType);
nameToPseudoType->set(nthLastChild.impl(), CSSSelector::PseudoNthLastChild);
nameToPseudoType->set(nthLastOfType.impl(), CSSSelector::PseudoNthLastOfType);
nameToPseudoType->set(outerSpinButton.impl(), CSSSelector::PseudoOuterSpinButton);
-#if ENABLE(PROGRESS_TAG)
- nameToPseudoType->set(progressBarValue.impl(), CSSSelector::PseudoProgressBarValue);
-#endif
#if ENABLE(METER_TAG)
nameToPseudoType->set(meterHorizontalBar.impl(), CSSSelector::PseudoMeterHorizontalBar);
nameToPseudoType->set(meterHorizontalOptimumValue.impl(), CSSSelector::PseudoMeterHorizontalOptimum);
@@ -577,7 +471,7 @@ void CSSSelector::extractPseudoType() const
if (m_match != PseudoClass && m_match != PseudoElement && m_match != PagePseudoClass)
return;
- m_pseudoType = parsePseudoType(m_value);
+ m_pseudoType = parsePseudoType(value());
bool element = false; // pseudo-element
bool compat = false; // single colon compatbility mode
@@ -596,23 +490,6 @@ void CSSSelector::extractPseudoType() const
case PseudoInputSpeechButton:
#endif
case PseudoInnerSpinButton:
- case PseudoMediaControlsPanel:
- case PseudoMediaControlsMuteButton:
- case PseudoMediaControlsPlayButton:
- case PseudoMediaControlsCurrentTimeDisplay:
- case PseudoMediaControlsTimeRemainingDisplay:
- case PseudoMediaControlsTimeline:
- case PseudoMediaControlsVolumeSlider:
- case PseudoMediaControlsVolumeSliderMuteButton:
- case PseudoMediaControlsSeekBackButton:
- case PseudoMediaControlsSeekForwardButton:
- case PseudoMediaControlsRewindButton:
- case PseudoMediaControlsReturnToRealtimeButton:
- case PseudoMediaControlsToggleClosedCaptions:
- case PseudoMediaControlsStatusDisplay:
- case PseudoMediaControlsFullscreenButton:
- case PseudoMediaControlsTimelineContainer:
- case PseudoMediaControlsVolumeSliderContainer:
case PseudoMeterHorizontalBar:
case PseudoMeterHorizontalOptimum:
case PseudoMeterHorizontalSuboptimal:
@@ -622,7 +499,6 @@ void CSSSelector::extractPseudoType() const
case PseudoMeterVerticalSuboptimal:
case PseudoMeterVerticalEvenLessGood:
case PseudoOuterSpinButton:
- case PseudoProgressBarValue:
case PseudoResizer:
case PseudoScrollbar:
case PseudoScrollbarCorner:
@@ -721,7 +597,7 @@ bool CSSSelector::operator==(const CSSSelector& other)
while (sel1 && sel2) {
if (sel1->m_tag != sel2->m_tag || sel1->attribute() != sel2->attribute() ||
sel1->relation() != sel2->relation() || sel1->m_match != sel2->m_match ||
- sel1->m_value != sel2->m_value ||
+ sel1->value() != sel2->value() ||
sel1->pseudoType() != sel2->pseudoType() ||
sel1->argument() != sel2->argument())
return false;
@@ -755,13 +631,13 @@ String CSSSelector::selectorText() const
while (true) {
if (cs->m_match == CSSSelector::Id) {
str += "#";
- serializeIdentifier(cs->m_value, str);
+ serializeIdentifier(cs->value(), str);
} else if (cs->m_match == CSSSelector::Class) {
str += ".";
- serializeIdentifier(cs->m_value, str);
+ serializeIdentifier(cs->value(), str);
} else if (cs->m_match == CSSSelector::PseudoClass || cs->m_match == CSSSelector::PagePseudoClass) {
str += ":";
- str += cs->m_value;
+ str += cs->value();
if (cs->pseudoType() == PseudoNot) {
if (CSSSelector* subSel = cs->simpleSelector())
str += subSel->selectorText();
@@ -776,7 +652,7 @@ String CSSSelector::selectorText() const
}
} else if (cs->m_match == CSSSelector::PseudoElement) {
str += "::";
- str += cs->m_value;
+ str += cs->value();
} else if (cs->hasAttribute()) {
str += "[";
const AtomicString& prefix = cs->attribute().prefix();
@@ -812,7 +688,7 @@ String CSSSelector::selectorText() const
break;
}
if (cs->m_match != CSSSelector::Set) {
- serializeString(cs->m_value, str);
+ serializeString(cs->value(), str);
str += "]";
}
}
@@ -836,14 +712,6 @@ String CSSSelector::selectorText() const
return str;
}
-
-void CSSSelector::setTagHistory(CSSSelector* tagHistory)
-{
- if (m_hasRareData)
- m_data.m_rareData->m_tagHistory.set(tagHistory);
- else
- m_data.m_tagHistory = tagHistory;
-}
const QualifiedName& CSSSelector::attribute() const
{
@@ -869,10 +737,10 @@ void CSSSelector::setArgument(const AtomicString& value)
m_data.m_rareData->m_argument = value;
}
-void CSSSelector::setSimpleSelector(CSSSelector* value)
+void CSSSelector::setSimpleSelector(PassOwnPtr<CSSSelector> value)
{
createRareData();
- m_data.m_rareData->m_simpleSelector.set(value);
+ m_data.m_rareData->m_simpleSelector = value;
}
bool CSSSelector::parseNth()
@@ -975,33 +843,4 @@ bool CSSSelector::RareData::matchNth(int count)
}
}
-inline void CSSSelector::releaseOwnedSelectorsToBag(CSSSelectorBag& bag)
-{
- if (m_hasRareData) {
- ASSERT(m_data.m_rareData);
- bag.add(m_data.m_rareData->m_tagHistory.release());
- bag.add(m_data.m_rareData->m_simpleSelector.release());
- delete m_data.m_rareData;
- // Clear the pointer so that a destructor of this selector will not
- // traverse this chain.
- m_data.m_rareData = 0;
- } else {
- bag.add(adoptPtr(m_data.m_tagHistory));
- // Clear the pointer for the same reason.
- m_data.m_tagHistory = 0;
- }
-}
-
-void CSSSelector::deleteReachableSelectors()
-{
- // Traverse the chain of selectors and delete each iteratively.
- CSSSelectorBag selectorsToBeDeleted;
- releaseOwnedSelectorsToBag(selectorsToBeDeleted);
- while (!selectorsToBeDeleted.isEmpty()) {
- OwnPtr<CSSSelector> selector(selectorsToBeDeleted.takeAny());
- ASSERT(selector);
- selector->releaseOwnedSelectorsToBag(selectorsToBeDeleted);
- }
-}
-
} // namespace WebCore
diff --git a/Source/WebCore/css/CSSSelector.h b/Source/WebCore/css/CSSSelector.h
index b930353..ea161c3 100644
--- a/Source/WebCore/css/CSSSelector.h
+++ b/Source/WebCore/css/CSSSelector.h
@@ -30,8 +30,6 @@
namespace WebCore {
- class CSSSelectorBag;
-
// this class represents a selector for a StyleRule
class CSSSelector {
WTF_MAKE_NONCOPYABLE(CSSSelector); WTF_MAKE_FAST_ALLOCATED;
@@ -42,6 +40,7 @@ namespace WebCore {
, m_pseudoType(PseudoNotParsed)
, m_parsedNth(false)
, m_isLastInSelectorList(false)
+ , m_isLastInTagHistory(true)
, m_hasRareData(false)
, m_isForPage(false)
, m_tag(anyQName())
@@ -54,6 +53,7 @@ namespace WebCore {
, m_pseudoType(PseudoNotParsed)
, m_parsedNth(false)
, m_isLastInSelectorList(false)
+ , m_isLastInTagHistory(true)
, m_hasRareData(false)
, m_isForPage(false)
, m_tag(qName)
@@ -62,18 +62,10 @@ namespace WebCore {
~CSSSelector()
{
- // Exit if this selector does not own any objects to be deleted.
- if (m_hasRareData) {
- if (!m_data.m_rareData)
- return;
- } else if (!m_data.m_tagHistory)
- return;
-
- // We can not delete the owned object(s) by simply calling delete
- // directly on them. That would lead to recursive destructor calls
- // which might cause stack overflow. We have to delete them
- // iteratively.
- deleteReachableSelectors();
+ if (m_hasRareData)
+ delete m_data.m_rareData;
+ else if (m_data.m_value)
+ m_data.m_value->deref();
}
/**
@@ -183,23 +175,6 @@ namespace WebCore {
PseudoSearchDecoration,
PseudoSearchResultsDecoration,
PseudoSearchResultsButton,
- PseudoMediaControlsPanel,
- PseudoMediaControlsMuteButton,
- PseudoMediaControlsPlayButton,
- PseudoMediaControlsTimelineContainer,
- PseudoMediaControlsVolumeSliderContainer,
- PseudoMediaControlsVolumeSliderMuteButton,
- PseudoMediaControlsCurrentTimeDisplay,
- PseudoMediaControlsTimeRemainingDisplay,
- PseudoMediaControlsToggleClosedCaptions,
- PseudoMediaControlsTimeline,
- PseudoMediaControlsVolumeSlider,
- PseudoMediaControlsSeekBackButton,
- PseudoMediaControlsSeekForwardButton,
- PseudoMediaControlsRewindButton,
- PseudoMediaControlsReturnToRealtimeButton,
- PseudoMediaControlsStatusDisplay,
- PseudoMediaControlsFullscreenButton,
PseudoMeterHorizontalBar,
PseudoMeterVerticalBar,
PseudoMeterHorizontalOptimum,
@@ -214,7 +189,6 @@ namespace WebCore {
#endif
PseudoInnerSpinButton,
PseudoOuterSpinButton,
- PseudoProgressBarValue,
PseudoLeftPage,
PseudoRightPage,
PseudoFirstPage,
@@ -255,29 +229,31 @@ namespace WebCore {
static PseudoType parsePseudoType(const AtomicString&);
static PseudoId pseudoId(PseudoType);
- CSSSelector* tagHistory() const { return m_hasRareData ? m_data.m_rareData->m_tagHistory.get() : m_data.m_tagHistory; }
- void setTagHistory(CSSSelector* tagHistory);
+ // Selectors are kept in an array by CSSSelectorList. The next component of the selector is
+ // the next item in the array.
+ CSSSelector* tagHistory() const { return m_isLastInTagHistory ? 0 : const_cast<CSSSelector*>(this + 1); }
bool hasTag() const { return m_tag != anyQName(); }
bool hasAttribute() const { return m_match == Id || m_match == Class || (m_hasRareData && m_data.m_rareData->m_attribute != anyQName()); }
+ const QualifiedName& tag() const { return m_tag; }
+ // AtomicString is really just an AtomicStringImpl* so the cast below is safe.
+ // FIXME: Perhaps call sites could be changed to accept AtomicStringImpl?
+ const AtomicString& value() const { return *reinterpret_cast<const AtomicString*>(m_hasRareData ? &m_data.m_rareData->m_value : &m_data.m_value); }
const QualifiedName& attribute() const;
const AtomicString& argument() const { return m_hasRareData ? m_data.m_rareData->m_argument : nullAtom; }
CSSSelector* simpleSelector() const { return m_hasRareData ? m_data.m_rareData->m_simpleSelector.get() : 0; }
- void setAttribute(const QualifiedName& value);
- void setArgument(const AtomicString& value);
- void setSimpleSelector(CSSSelector* value);
+ void setTag(const QualifiedName& value) { m_tag = value; }
+ void setValue(const AtomicString&);
+ void setAttribute(const QualifiedName&);
+ void setArgument(const AtomicString&);
+ void setSimpleSelector(PassOwnPtr<CSSSelector>);
bool parseNth();
bool matchNth(int count);
- bool matchesPseudoElement() const
- {
- if (m_pseudoType == PseudoUnknown)
- extractPseudoType();
- return m_match == PseudoElement;
- }
+ bool matchesPseudoElement() const;
bool isUnknownPseudoElement() const;
bool isSiblingSelector() const;
@@ -285,6 +261,9 @@ namespace WebCore {
bool isLastInSelectorList() const { return m_isLastInSelectorList; }
void setLastInSelectorList() { m_isLastInSelectorList = true; }
+ bool isLastInTagHistory() const { return m_isLastInTagHistory; }
+ void setNotLastInTagHistory() { m_isLastInTagHistory = false; }
+
bool isSimple() const;
bool isForPage() const { return m_isForPage; }
@@ -297,12 +276,10 @@ namespace WebCore {
private:
bool m_parsedNth : 1; // Used for :nth-*
bool m_isLastInSelectorList : 1;
+ bool m_isLastInTagHistory : 1;
bool m_hasRareData : 1;
bool m_isForPage : 1;
- void releaseOwnedSelectorsToBag(CSSSelectorBag&);
- void deleteReachableSelectors();
-
unsigned specificityForOneSelector() const;
unsigned specificityForPage() const;
void extractPseudoType() const;
@@ -310,44 +287,47 @@ namespace WebCore {
struct RareData {
WTF_MAKE_NONCOPYABLE(RareData); WTF_MAKE_FAST_ALLOCATED;
public:
- RareData(PassOwnPtr<CSSSelector> tagHistory)
- : m_a(0)
+ RareData(PassRefPtr<AtomicStringImpl> value)
+ : m_value(value.leakRef())
+ , m_a(0)
, m_b(0)
- , m_tagHistory(tagHistory)
, m_attribute(anyQName())
, m_argument(nullAtom)
{
}
+ ~RareData()
+ {
+ if (m_value)
+ m_value->deref();
+ }
bool parseNth();
bool matchNth(int count);
+ AtomicStringImpl* m_value; // Plain pointer to keep things uniform with the union.
int m_a; // Used for :nth-*
int m_b; // Used for :nth-*
- OwnPtr<CSSSelector> m_tagHistory;
OwnPtr<CSSSelector> m_simpleSelector; // Used for :not.
QualifiedName m_attribute; // used for attribute selector
AtomicString m_argument; // Used for :contains, :lang and :nth-*
};
-
- void createRareData()
- {
- if (m_hasRareData)
- return;
- m_data.m_rareData = new RareData(adoptPtr(m_data.m_tagHistory));
- m_hasRareData = true;
- }
+ void createRareData();
union DataUnion {
- DataUnion() : m_tagHistory(0) { }
- CSSSelector* m_tagHistory;
+ DataUnion() : m_value(0) { }
+ AtomicStringImpl* m_value;
RareData* m_rareData;
} m_data;
- public:
- mutable AtomicString m_value;
QualifiedName m_tag;
};
+
+inline bool CSSSelector::matchesPseudoElement() const
+{
+ if (m_pseudoType == PseudoUnknown)
+ extractPseudoType();
+ return m_match == PseudoElement;
+}
inline bool CSSSelector::isUnknownPseudoElement() const
{
@@ -371,6 +351,26 @@ inline bool CSSSelector::isSiblingSelector() const
|| type == PseudoNthLastChild
|| type == PseudoNthLastOfType;
}
+
+inline void CSSSelector::setValue(const AtomicString& value)
+{
+ // Need to do ref counting manually for the union.
+ if (m_hasRareData) {
+ m_data.m_rareData->m_value = value.impl();
+ m_data.m_rareData->m_value->ref();
+ return;
+ }
+ m_data.m_value = value.impl();
+ m_data.m_value->ref();
+}
+
+inline void move(PassOwnPtr<CSSSelector> from, CSSSelector* to)
+{
+ memcpy(to, from.get(), sizeof(CSSSelector));
+ // We want to free the memory (which was allocated with fastNew), but we
+ // don't want the destructor to run since it will affect the copy we've just made.
+ fastDeleteSkippingDestructor(from.leakPtr());
+}
} // namespace WebCore
diff --git a/Source/WebCore/css/CSSSelectorList.cpp b/Source/WebCore/css/CSSSelectorList.cpp
index 7cb4df4..f4a8165 100644
--- a/Source/WebCore/css/CSSSelectorList.cpp
+++ b/Source/WebCore/css/CSSSelectorList.cpp
@@ -27,6 +27,8 @@
#include "config.h"
#include "CSSSelectorList.h"
+#include "CSSParserValues.h"
+
namespace WebCore {
CSSSelectorList::~CSSSelectorList()
@@ -41,26 +43,40 @@ void CSSSelectorList::adopt(CSSSelectorList& list)
list.m_selectorArray = 0;
}
-void CSSSelectorList::adoptSelectorVector(Vector<CSSSelector*>& selectorVector)
+void CSSSelectorList::adoptSelectorVector(Vector<OwnPtr<CSSParserSelector> >& selectorVector)
{
deleteSelectors();
- const size_t size = selectorVector.size();
- ASSERT(size);
- if (size == 1) {
- m_selectorArray = selectorVector[0];
+ const size_t vectorSize = selectorVector.size();
+ size_t flattenedSize = 0;
+ for (size_t i = 0; i < vectorSize; ++i) {
+ for (CSSParserSelector* selector = selectorVector[i].get(); selector; selector = selector->tagHistory())
+ ++flattenedSize;
+ }
+ ASSERT(flattenedSize);
+ if (flattenedSize == 1) {
+ m_selectorArray = selectorVector[0]->releaseSelector().leakPtr();
m_selectorArray->setLastInSelectorList();
+ ASSERT(m_selectorArray->isLastInTagHistory());
selectorVector.shrink(0);
return;
}
- m_selectorArray = reinterpret_cast<CSSSelector*>(fastMalloc(sizeof(CSSSelector) * selectorVector.size()));
- for (size_t i = 0; i < size; ++i) {
- memcpy(&m_selectorArray[i], selectorVector[i], sizeof(CSSSelector));
- // We want to free the memory (which was allocated with fastNew), but we
- // don't want the destructor to run since it will affect the copy we've just made.
- fastDeleteSkippingDestructor(selectorVector[i]);
- ASSERT(!m_selectorArray[i].isLastInSelectorList());
+ m_selectorArray = reinterpret_cast<CSSSelector*>(fastMalloc(sizeof(CSSSelector) * flattenedSize));
+ size_t arrayIndex = 0;
+ for (size_t i = 0; i < vectorSize; ++i) {
+ CSSParserSelector* current = selectorVector[i].get();
+ while (current) {
+ OwnPtr<CSSSelector> selector = current->releaseSelector();
+ current = current->tagHistory();
+ move(selector.release(), &m_selectorArray[arrayIndex]);
+ ASSERT(!m_selectorArray[arrayIndex].isLastInSelectorList());
+ if (current)
+ m_selectorArray[arrayIndex].setNotLastInTagHistory();
+ ++arrayIndex;
+ }
+ ASSERT(m_selectorArray[arrayIndex - 1].isLastInTagHistory());
}
- m_selectorArray[size - 1].setLastInSelectorList();
+ ASSERT(flattenedSize == arrayIndex);
+ m_selectorArray[arrayIndex - 1].setLastInSelectorList();
selectorVector.shrink(0);
}
@@ -122,7 +138,7 @@ class SelectorNeedsNamespaceResolutionFunctor {
public:
bool operator()(CSSSelector* selector)
{
- if (selector->hasTag() && selector->m_tag.prefix() != nullAtom && selector->m_tag.prefix() != starAtom)
+ if (selector->hasTag() && selector->tag().prefix() != nullAtom && selector->tag().prefix() != starAtom)
return true;
if (selector->hasAttribute() && selector->attribute().prefix() != nullAtom && selector->attribute().prefix() != starAtom)
return true;
diff --git a/Source/WebCore/css/CSSSelectorList.h b/Source/WebCore/css/CSSSelectorList.h
index abd9bc8..2b96d92 100644
--- a/Source/WebCore/css/CSSSelectorList.h
+++ b/Source/WebCore/css/CSSSelectorList.h
@@ -30,6 +30,8 @@
namespace WebCore {
+class CSSParserSelector;
+
class CSSSelectorList {
WTF_MAKE_NONCOPYABLE(CSSSelectorList); WTF_MAKE_FAST_ALLOCATED;
public:
@@ -37,11 +39,11 @@ public:
~CSSSelectorList();
void adopt(CSSSelectorList& list);
- void adoptSelectorVector(Vector<CSSSelector*>& selectorVector);
+ void adoptSelectorVector(Vector<OwnPtr<CSSParserSelector> >& selectorVector);
CSSSelector* first() const { return m_selectorArray ? m_selectorArray : 0; }
- static CSSSelector* next(CSSSelector* previous) { return previous->isLastInSelectorList() ? 0 : previous + 1; }
- bool hasOneSelector() const { return m_selectorArray ? m_selectorArray->isLastInSelectorList() : false; }
+ static CSSSelector* next(CSSSelector*);
+ bool hasOneSelector() const { return m_selectorArray && !next(m_selectorArray); }
bool selectorsNeedNamespaceResolution();
bool hasUnknownPseudoElements() const;
@@ -49,10 +51,19 @@ public:
private:
void deleteSelectors();
+ // End of a multipart selector is indicated by m_isLastInTagHistory bit in the last item.
// End of the array is indicated by m_isLastInSelectorList bit in the last item.
CSSSelector* m_selectorArray;
};
+inline CSSSelector* CSSSelectorList::next(CSSSelector* current)
+{
+ // Skip subparts of compound selectors.
+ while (!current->isLastInTagHistory())
+ current++;
+ return current->isLastInSelectorList() ? 0 : current + 1;
+}
+
} // namespace WebCore
#endif // CSSSelectorList_h
diff --git a/Source/WebCore/css/CSSStyleRule.h b/Source/WebCore/css/CSSStyleRule.h
index 171b636..2d35043 100644
--- a/Source/WebCore/css/CSSStyleRule.h
+++ b/Source/WebCore/css/CSSStyleRule.h
@@ -50,7 +50,7 @@ public:
// Not part of the CSSOM
virtual bool parseString(const String&, bool = false);
- void adoptSelectorVector(Vector<CSSSelector*>& selectors) { m_selectorList.adoptSelectorVector(selectors); }
+ void adoptSelectorVector(Vector<OwnPtr<CSSParserSelector> >& selectors) { m_selectorList.adoptSelectorVector(selectors); }
void setDeclaration(PassRefPtr<CSSMutableStyleDeclaration>);
const CSSSelectorList& selectorList() const { return m_selectorList; }
diff --git a/Source/WebCore/css/CSSStyleSelector.cpp b/Source/WebCore/css/CSSStyleSelector.cpp
index 5a21615..02cf8d3 100644
--- a/Source/WebCore/css/CSSStyleSelector.cpp
+++ b/Source/WebCore/css/CSSStyleSelector.cpp
@@ -2,7 +2,7 @@
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
* Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
- * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
* Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
* Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
@@ -352,73 +352,43 @@ if (id == propID) { \
return; \
}
-class CSSRuleData {
- WTF_MAKE_NONCOPYABLE(CSSRuleData);
+class RuleData {
public:
- CSSRuleData(unsigned pos, CSSStyleRule* r, CSSSelector* sel, CSSRuleData* prev = 0)
- : m_position(pos)
- , m_rule(r)
- , m_selector(sel)
- , m_next(0)
- {
- if (prev)
- prev->m_next = this;
- }
-
- ~CSSRuleData()
- {
- }
+ RuleData(CSSStyleRule*, CSSSelector*, unsigned position);
- unsigned position() { return m_position; }
- CSSStyleRule* rule() { return m_rule; }
- CSSSelector* selector() { return m_selector; }
- CSSRuleData* next() { return m_next; }
+ unsigned position() const { return m_position; }
+ CSSStyleRule* rule() const { return m_rule; }
+ CSSSelector* selector() const { return m_selector; }
+
+ bool hasFastCheckableSelector() const { return m_hasFastCheckableSelector; }
+ bool hasMultipartSelector() const { return m_hasMultipartSelector; }
+ bool hasTopSelectorMatchingHTMLBasedOnRuleHash() const { return m_hasTopSelectorMatchingHTMLBasedOnRuleHash; }
+
+ // Try to balance between memory usage (there can be lots of RuleData objects) and good filtering performance.
+ static const unsigned maximumIdentifierCount = 4;
+ const unsigned* descendantSelectorIdentifierHashes() const { return m_descendantSelectorIdentifierHashes; }
private:
- unsigned m_position;
+ void collectDescendantSelectorIdentifierHashes();
+ void collectIdentifierHashes(const CSSSelector*, unsigned& identifierCount);
+
CSSStyleRule* m_rule;
CSSSelector* m_selector;
- CSSRuleData* m_next;
+ unsigned m_position : 29;
+ bool m_hasFastCheckableSelector : 1;
+ bool m_hasMultipartSelector : 1;
+ bool m_hasTopSelectorMatchingHTMLBasedOnRuleHash : 1;
+ // Use plain array instead of a Vector to minimize memory overhead.
+ unsigned m_descendantSelectorIdentifierHashes[maximumIdentifierCount];
};
-class CSSRuleDataList {
- WTF_MAKE_NONCOPYABLE(CSSRuleDataList);
+class RuleSet {
+ WTF_MAKE_NONCOPYABLE(RuleSet);
public:
- CSSRuleDataList(unsigned pos, CSSStyleRule* rule, CSSSelector* sel)
- : m_first(new CSSRuleData(pos, rule, sel))
- , m_last(m_first)
- {
- }
-
- ~CSSRuleDataList()
- {
- CSSRuleData* ptr;
- CSSRuleData* next;
- ptr = m_first;
- while (ptr) {
- next = ptr->next();
- delete ptr;
- ptr = next;
- }
- }
-
- CSSRuleData* first() const { return m_first; }
- CSSRuleData* last() const { return m_last; }
-
- void append(unsigned pos, CSSStyleRule* rule, CSSSelector* sel) { m_last = new CSSRuleData(pos, rule, sel, m_last); }
-
-private:
- CSSRuleData* m_first;
- CSSRuleData* m_last;
-};
-
-class CSSRuleSet {
- WTF_MAKE_NONCOPYABLE(CSSRuleSet);
-public:
- CSSRuleSet();
- ~CSSRuleSet();
+ RuleSet();
+ ~RuleSet();
- typedef HashMap<AtomicStringImpl*, CSSRuleDataList*> AtomRuleMap;
+ typedef HashMap<AtomicStringImpl*, Vector<RuleData>*> AtomRuleMap;
void addRulesFromSheet(CSSStyleSheet*, const MediaQueryEvaluator&, CSSStyleSelector* = 0);
@@ -427,34 +397,36 @@ public:
void addPageRule(CSSStyleRule* rule, CSSSelector* sel);
void addToRuleSet(AtomicStringImpl* key, AtomRuleMap& map,
CSSStyleRule* rule, CSSSelector* sel);
+ void shrinkToFit();
+ void disableAutoShrinkToFit() { m_autoShrinkToFitEnabled = false; }
- void collectIdsAndSiblingRules(HashSet<AtomicStringImpl*>& ids, OwnPtr<CSSRuleSet>& siblingRules) const;
+ void collectIdsAndSiblingRules(HashSet<AtomicStringImpl*>& ids, OwnPtr<RuleSet>& siblingRules) const;
- CSSRuleDataList* getIDRules(AtomicStringImpl* key) { return m_idRules.get(key); }
- CSSRuleDataList* getClassRules(AtomicStringImpl* key) { return m_classRules.get(key); }
- CSSRuleDataList* getTagRules(AtomicStringImpl* key) { return m_tagRules.get(key); }
- CSSRuleDataList* getPseudoRules(AtomicStringImpl* key) { return m_pseudoRules.get(key); }
- CSSRuleDataList* getUniversalRules() { return m_universalRules.get(); }
- CSSRuleDataList* getPageRules() { return m_pageRules.get(); }
+ const Vector<RuleData>* getIDRules(AtomicStringImpl* key) const { return m_idRules.get(key); }
+ const Vector<RuleData>* getClassRules(AtomicStringImpl* key) const { return m_classRules.get(key); }
+ const Vector<RuleData>* getTagRules(AtomicStringImpl* key) const { return m_tagRules.get(key); }
+ const Vector<RuleData>* getPseudoRules(AtomicStringImpl* key) const { return m_pseudoRules.get(key); }
+ const Vector<RuleData>* getUniversalRules() const { return &m_universalRules; }
+ const Vector<RuleData>* getPageRules() const { return &m_pageRules; }
public:
AtomRuleMap m_idRules;
AtomRuleMap m_classRules;
AtomRuleMap m_tagRules;
AtomRuleMap m_pseudoRules;
- OwnPtr<CSSRuleDataList> m_universalRules;
- OwnPtr<CSSRuleDataList> m_pageRules;
+ Vector<RuleData> m_universalRules;
+ Vector<RuleData> m_pageRules;
unsigned m_ruleCount;
- unsigned m_pageRuleCount;
+ bool m_autoShrinkToFitEnabled;
};
-static CSSRuleSet* defaultStyle;
-static CSSRuleSet* defaultQuirksStyle;
-static CSSRuleSet* defaultPrintStyle;
-static CSSRuleSet* defaultViewSourceStyle;
+static RuleSet* defaultStyle;
+static RuleSet* defaultQuirksStyle;
+static RuleSet* defaultPrintStyle;
+static RuleSet* defaultViewSourceStyle;
static CSSStyleSheet* simpleDefaultStyleSheet;
-static CSSRuleSet* siblingRulesInDefaultStyle;
+static RuleSet* siblingRulesInDefaultStyle;
RenderStyle* CSSStyleSelector::s_styleNotYetAvailable;
@@ -473,7 +445,7 @@ static inline bool elementCanUseSimpleDefaultStyle(Element* e)
static inline void collectSiblingRulesInDefaultStyle()
{
- OwnPtr<CSSRuleSet> siblingRules;
+ OwnPtr<RuleSet> siblingRules;
HashSet<AtomicStringImpl*> ids;
defaultStyle->collectIdsAndSiblingRules(ids, siblingRules);
ASSERT(ids.isEmpty());
@@ -546,10 +518,12 @@ CSSStyleSelector::CSSStyleSelector(Document* document, StyleSheetList* styleShee
if (m_rootDefaultStyle && view)
m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->frame(), m_rootDefaultStyle.get()));
- m_authorStyle = adoptPtr(new CSSRuleSet);
+ m_authorStyle = adoptPtr(new RuleSet);
+ // Adding rules from multiple sheets, shrink at the end.
+ m_authorStyle->disableAutoShrinkToFit();
// FIXME: This sucks! The user sheet is reparsed every time!
- OwnPtr<CSSRuleSet> tempUserStyle = adoptPtr(new CSSRuleSet);
+ OwnPtr<RuleSet> tempUserStyle = adoptPtr(new RuleSet);
if (pageUserSheet)
tempUserStyle->addRulesFromSheet(pageUserSheet, *m_medium, this);
if (pageGroupUserSheets) {
@@ -562,7 +536,7 @@ CSSStyleSelector::CSSStyleSelector(Document* document, StyleSheetList* styleShee
}
}
- if (tempUserStyle->m_ruleCount > 0 || tempUserStyle->m_pageRuleCount > 0)
+ if (tempUserStyle->m_ruleCount > 0 || tempUserStyle->m_pageRules.size() > 0)
m_userStyle = tempUserStyle.release();
// Add rules from elements like SVG's <font-face>
@@ -575,8 +549,7 @@ CSSStyleSelector::CSSStyleSelector(Document* document, StyleSheetList* styleShee
StyleSheet* sheet = styleSheets->item(i);
if (sheet->isCSSStyleSheet() && !sheet->disabled())
m_authorStyle->addRulesFromSheet(static_cast<CSSStyleSheet*>(sheet), *m_medium, this);
- }
-
+ }
// Collect all ids and rules using sibling selectors (:first-child and similar)
// in the current set of stylesheets. Style sharing code uses this information to reject
// sharing candidates.
@@ -587,6 +560,10 @@ CSSStyleSelector::CSSStyleSelector(Document* document, StyleSheetList* styleShee
if (m_userStyle)
m_userStyle->collectIdsAndSiblingRules(m_idsInRules, m_siblingRules);
+ m_authorStyle->shrinkToFit();
+ if (m_siblingRules)
+ m_siblingRules->shrinkToFit();
+
if (document->renderer() && document->renderer()->style())
document->renderer()->style()->font().update(fontSelector());
}
@@ -622,13 +599,13 @@ static void loadFullDefaultStyle()
ASSERT(defaultStyle);
delete defaultStyle;
simpleDefaultStyleSheet->deref();
- defaultStyle = new CSSRuleSet;
+ defaultStyle = new RuleSet;
simpleDefaultStyleSheet = 0;
} else {
ASSERT(!defaultStyle);
- defaultStyle = new CSSRuleSet;
- defaultPrintStyle = new CSSRuleSet;
- defaultQuirksStyle = new CSSRuleSet;
+ defaultStyle = new RuleSet;
+ defaultPrintStyle = new RuleSet;
+ defaultQuirksStyle = new RuleSet;
}
// Strict-mode rules.
@@ -661,9 +638,9 @@ static void loadSimpleDefaultStyle()
ASSERT(!defaultStyle);
ASSERT(!simpleDefaultStyleSheet);
- defaultStyle = new CSSRuleSet;
- defaultPrintStyle = new CSSRuleSet;
- defaultQuirksStyle = new CSSRuleSet;
+ defaultStyle = new RuleSet;
+ defaultPrintStyle = new RuleSet;
+ defaultQuirksStyle = new RuleSet;
simpleDefaultStyleSheet = parseUASheet(simpleUserAgentStyleSheet, strlen(simpleUserAgentStyleSheet));
defaultStyle->addRulesFromSheet(simpleDefaultStyleSheet, screenEval());
@@ -674,16 +651,98 @@ static void loadSimpleDefaultStyle()
static void loadViewSourceStyle()
{
ASSERT(!defaultViewSourceStyle);
- defaultViewSourceStyle = new CSSRuleSet;
+ defaultViewSourceStyle = new RuleSet;
defaultViewSourceStyle->addRulesFromSheet(parseUASheet(sourceUserAgentStyleSheet, sizeof(sourceUserAgentStyleSheet)), screenEval());
}
+
+static inline void collectElementIdentifierHashes(const Element* element, Vector<unsigned, 4>& identifierHashes)
+{
+ identifierHashes.append(element->localName().impl()->existingHash());
+ if (element->hasID())
+ identifierHashes.append(element->idForStyleResolution().impl()->existingHash());
+ const StyledElement* styledElement = element->isStyledElement() ? static_cast<const StyledElement*>(element) : 0;
+ if (styledElement && styledElement->hasClass()) {
+ const SpaceSplitString& classNames = styledElement->classNames();
+ size_t count = classNames.size();
+ for (size_t i = 0; i < count; ++i)
+ identifierHashes.append(classNames[i].impl()->existingHash());
+ }
+}
+
+void CSSStyleSelector::pushParentStackFrame(Element* parent)
+{
+ ASSERT(m_ancestorIdentifierFilter);
+ ASSERT(m_parentStack.isEmpty() || m_parentStack.last().element == parent->parentElement());
+ ASSERT(!m_parentStack.isEmpty() || !parent->parentElement());
+ m_parentStack.append(ParentStackFrame(parent));
+ ParentStackFrame& parentFrame = m_parentStack.last();
+ // Mix tags, class names and ids into some sort of weird bouillabaisse.
+ // The filter is used for fast rejection of child and descendant selectors.
+ collectElementIdentifierHashes(parent, parentFrame.identifierHashes);
+ size_t count = parentFrame.identifierHashes.size();
+ for (size_t i = 0; i < count; ++i)
+ m_ancestorIdentifierFilter->add(parentFrame.identifierHashes[i]);
+}
+
+void CSSStyleSelector::popParentStackFrame()
+{
+ ASSERT(!m_parentStack.isEmpty());
+ ASSERT(m_ancestorIdentifierFilter);
+ const ParentStackFrame& parentFrame = m_parentStack.last();
+ size_t count = parentFrame.identifierHashes.size();
+ for (size_t i = 0; i < count; ++i)
+ m_ancestorIdentifierFilter->remove(parentFrame.identifierHashes[i]);
+ m_parentStack.removeLast();
+ if (m_parentStack.isEmpty()) {
+ ASSERT(m_ancestorIdentifierFilter->likelyEmpty());
+ m_ancestorIdentifierFilter.clear();
+ }
+}
+
+void CSSStyleSelector::pushParent(Element* parent)
+{
+ if (m_parentStack.isEmpty()) {
+ ASSERT(!m_ancestorIdentifierFilter);
+ m_ancestorIdentifierFilter = adoptPtr(new BloomFilter<bloomFilterKeyBits>);
+ // If the element is not the root itself, build the stack starting from the root.
+ if (parent->parentElement()) {
+ Vector<Element*, 30> ancestors;
+ for (Element* ancestor = parent; ancestor; ancestor = ancestor->parentElement())
+ ancestors.append(ancestor);
+ int count = ancestors.size();
+ for (int n = count - 1; n >= 0; --n)
+ pushParentStackFrame(ancestors[n]);
+ return;
+ }
+ } else if (!parent->parentElement()) {
+ // We are not always invoked consistently. For example, script execution can cause us to enter
+ // style recalc in the middle of tree building. Reset the stack if we see a new root element.
+ ASSERT(m_ancestorIdentifierFilter);
+ m_ancestorIdentifierFilter->clear();
+ m_parentStack.resize(0);
+ } else {
+ ASSERT(m_ancestorIdentifierFilter);
+ // We may get invoked for some random elements in some wacky cases during style resolve.
+ // Pause maintaining the stack in this case.
+ if (m_parentStack.last().element != parent->parentElement())
+ return;
+ }
+ pushParentStackFrame(parent);
+}
+
+void CSSStyleSelector::popParent(Element* parent)
+{
+ if (m_parentStack.isEmpty() || m_parentStack.last().element != parent)
+ return;
+ popParentStackFrame();
+}
void CSSStyleSelector::addMatchedDeclaration(CSSMutableStyleDeclaration* decl)
{
m_matchedDecls.append(decl);
}
-void CSSStyleSelector::matchRules(CSSRuleSet* rules, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules)
+void CSSStyleSelector::matchRules(RuleSet* rules, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules)
{
m_matchedRules.clear();
@@ -728,21 +787,38 @@ void CSSStyleSelector::matchRules(CSSRuleSet* rules, int& firstRuleIndex, int& l
}
}
-void CSSStyleSelector::matchRulesForList(CSSRuleDataList* rules, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules)
+inline bool CSSStyleSelector::fastRejectSelector(const RuleData& ruleData) const
+{
+ ASSERT(m_ancestorIdentifierFilter);
+ const unsigned* descendantSelectorIdentifierHashes = ruleData.descendantSelectorIdentifierHashes();
+ for (unsigned n = 0; n < RuleData::maximumIdentifierCount && descendantSelectorIdentifierHashes[n]; ++n) {
+ if (!m_ancestorIdentifierFilter->mayContain(descendantSelectorIdentifierHashes[n]))
+ return true;
+ }
+ return false;
+}
+
+void CSSStyleSelector::matchRulesForList(const Vector<RuleData>* rules, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules)
{
if (!rules)
return;
+ // In some cases we may end up looking up style for random elements in the middle of a recursive tree resolve.
+ // Ancestor identifier filter won't be up-to-date in that case and we can't use the fast path.
+ bool canUseFastReject = !m_parentStack.isEmpty() && m_parentStack.last().element == m_parentNode;
- for (CSSRuleData* d = rules->first(); d; d = d->next()) {
- CSSStyleRule* rule = d->rule();
- if (m_checker.m_sameOriginOnly && !m_checker.m_document->securityOrigin()->canRequest(rule->baseURL()))
- continue;
- if (checkSelector(d->selector())) {
+ unsigned size = rules->size();
+ for (unsigned i = 0; i < size; ++i) {
+ const RuleData& ruleData = rules->at(i);
+ if (canUseFastReject && fastRejectSelector(ruleData))
+ continue;
+ if (checkSelector(ruleData)) {
// If the rule has no properties to apply, then ignore it in the non-debug mode.
+ CSSStyleRule* rule = ruleData.rule();
CSSMutableStyleDeclaration* decl = rule->declaration();
if (!decl || (!decl->length() && !includeEmptyRules))
continue;
-
+ if (m_checker.m_sameOriginOnly && !m_checker.m_document->securityOrigin()->canRequest(rule->baseURL()))
+ continue;
// If we're matching normal rules, set a pseudo bit if
// we really just matched a pseudo-element.
if (m_dynamicPseudo != NOPSEUDO && m_checker.m_pseudoStyle == NOPSEUDO) {
@@ -757,20 +833,20 @@ void CSSStyleSelector::matchRulesForList(CSSRuleDataList* rules, int& firstRuleI
firstRuleIndex = lastRuleIndex;
// Add this rule to our list of matched rules.
- addMatchedRule(d);
+ addMatchedRule(&ruleData);
}
}
}
}
-static bool operator >(CSSRuleData& r1, CSSRuleData& r2)
+static bool operator >(const RuleData& r1, const RuleData& r2)
{
int spec1 = r1.selector()->specificity();
int spec2 = r2.selector()->specificity();
return (spec1 == spec2) ? r1.position() > r2.position() : spec1 > spec2;
}
-static bool operator <=(CSSRuleData& r1, CSSRuleData& r2)
+static bool operator <=(const RuleData& r1, const RuleData& r2)
{
return !(r1 > r2);
}
@@ -785,8 +861,8 @@ void CSSStyleSelector::sortMatchedRules(unsigned start, unsigned end)
for (unsigned i = end - 1; i > start; i--) {
bool sorted = true;
for (unsigned j = start; j < i; j++) {
- CSSRuleData* elt = m_matchedRules[j];
- CSSRuleData* elt2 = m_matchedRules[j + 1];
+ const RuleData* elt = m_matchedRules[j];
+ const RuleData* elt2 = m_matchedRules[j + 1];
if (*elt > *elt2) {
sorted = false;
m_matchedRules[j] = elt2;
@@ -804,8 +880,8 @@ void CSSStyleSelector::sortMatchedRules(unsigned start, unsigned end)
sortMatchedRules(start, mid);
sortMatchedRules(mid, end);
- CSSRuleData* elt = m_matchedRules[mid - 1];
- CSSRuleData* elt2 = m_matchedRules[mid];
+ const RuleData* elt = m_matchedRules[mid - 1];
+ const RuleData* elt2 = m_matchedRules[mid];
// Handle the fast common case (of equal specificity). The list may already
// be completely sorted.
@@ -814,7 +890,7 @@ void CSSStyleSelector::sortMatchedRules(unsigned start, unsigned end)
// We have to merge sort. Ensure our merge buffer is big enough to hold
// all the items.
- Vector<CSSRuleData*> rulesMergeBuffer;
+ Vector<const RuleData*> rulesMergeBuffer;
rulesMergeBuffer.reserveInitialCapacity(end - start);
unsigned i1 = start;
@@ -1129,6 +1205,14 @@ inline Node* CSSStyleSelector::findSiblingForStyleSharing(Node* node, unsigned&
return node;
}
+static inline bool parentStylePreventsSharing(const RenderStyle* parentStyle)
+{
+ return parentStyle->childrenAffectedByPositionalRules()
+ || parentStyle->childrenAffectedByFirstChildRules()
+ || parentStyle->childrenAffectedByLastChildRules()
+ || parentStyle->childrenAffectedByDirectAdjacentRules();
+}
+
ALWAYS_INLINE RenderStyle* CSSStyleSelector::locateSharedStyle()
{
if (!m_styledElement || !m_parentStyle)
@@ -1139,6 +1223,8 @@ ALWAYS_INLINE RenderStyle* CSSStyleSelector::locateSharedStyle()
// Ids stop style sharing if they show up in the stylesheets.
if (m_styledElement->hasID() && m_idsInRules.contains(m_styledElement->idForStyleResolution().impl()))
return 0;
+ if (parentStylePreventsSharing(m_parentStyle))
+ return 0;
// Check previous siblings.
unsigned count = 0;
Node* shareNode = findSiblingForStyleSharing(m_styledElement->previousSibling(), count);
@@ -1152,7 +1238,7 @@ ALWAYS_INLINE RenderStyle* CSSStyleSelector::locateSharedStyle()
if (matchesSiblingRules())
return 0;
// Tracking child index requires unique style for each node. This may get set by the sibling rule match above.
- if (m_parentStyle->childrenAffectedByPositionalRules())
+ if (parentStylePreventsSharing(m_parentStyle))
return 0;
return shareNode->renderStyle();
}
@@ -1160,7 +1246,7 @@ ALWAYS_INLINE RenderStyle* CSSStyleSelector::locateSharedStyle()
void CSSStyleSelector::matchUARules(int& firstUARule, int& lastUARule)
{
// First we match rules from the user agent sheet.
- CSSRuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
+ RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
? defaultPrintStyle : defaultStyle;
matchRules(userAgentStyleSheet, firstUARule, lastUARule, false);
@@ -2010,21 +2096,103 @@ PassRefPtr<CSSRuleList> CSSStyleSelector::pseudoStyleRulesForElement(Element* e,
return m_ruleList.release();
}
-bool CSSStyleSelector::checkSelector(CSSSelector* sel)
+inline bool CSSStyleSelector::checkSelector(const RuleData& ruleData)
{
m_dynamicPseudo = NOPSEUDO;
- // Check the selector
- SelectorMatch match = m_checker.checkSelector(sel, m_element, &m_selectorAttrs, m_dynamicPseudo, false, false, style(), m_parentNode ? m_parentNode->renderStyle() : 0);
+ if (ruleData.hasFastCheckableSelector()) {
+ // We know this selector does not include any pseudo selectors.
+ if (m_checker.m_pseudoStyle != NOPSEUDO)
+ return false;
+ // We know a sufficiently simple single part selector matches simply because we found it from the rule hash.
+ // This is limited to HTML only so we don't need to check the namespace.
+ if (ruleData.hasTopSelectorMatchingHTMLBasedOnRuleHash() && !ruleData.hasMultipartSelector() && m_element->isHTMLElement())
+ return true;
+ return SelectorChecker::fastCheckSelector(ruleData.selector(), m_element);
+ }
+
+ // Slow path.
+ SelectorMatch match = m_checker.checkSelector(ruleData.selector(), m_element, &m_selectorAttrs, m_dynamicPseudo, false, false, style(), m_parentNode ? m_parentNode->renderStyle() : 0);
if (match != SelectorMatches)
return false;
-
if (m_checker.m_pseudoStyle != NOPSEUDO && m_checker.m_pseudoStyle != m_dynamicPseudo)
return false;
+ return true;
+}
+
+static inline bool selectorTagMatches(const Element* element, const CSSSelector* selector)
+{
+ if (!selector->hasTag())
+ return true;
+ const AtomicString& localName = selector->tag().localName();
+ if (localName != starAtom && localName != element->localName())
+ return false;
+ const AtomicString& namespaceURI = selector->tag().namespaceURI();
+ return namespaceURI == starAtom || namespaceURI == element->namespaceURI();
+}
+static inline bool isFastCheckableSelector(const CSSSelector* selector)
+{
+ for (; selector; selector = selector->tagHistory()) {
+ if (selector->relation() != CSSSelector::Descendant)
+ return false;
+ if (selector->m_match != CSSSelector::None && selector->m_match != CSSSelector::Id && selector->m_match != CSSSelector::Class)
+ return false;
+ }
return true;
}
+bool CSSStyleSelector::SelectorChecker::fastCheckSelector(const CSSSelector* selector, const Element* element)
+{
+ ASSERT(isFastCheckableSelector(selector));
+
+ // The top selector requires tag check only as rule hashes have already handled id and class matches.
+ if (!selectorTagMatches(element, selector))
+ return false;
+
+ selector = selector->tagHistory();
+ if (!selector)
+ return true;
+ const Element* ancestor = element;
+ // We know this compound selector has descendant combinators only and all components are simple.
+ for (; selector; selector = selector->tagHistory()) {
+ AtomicStringImpl* value;
+ switch (selector->m_match) {
+ case CSSSelector::Class:
+ value = selector->value().impl();
+ while (true) {
+ if (!(ancestor = ancestor->parentElement()))
+ return false;
+ const StyledElement* styledElement = static_cast<const StyledElement*>(ancestor);
+ if (ancestor->hasClass() && styledElement->classNames().contains(value) && selectorTagMatches(ancestor, selector))
+ break;
+ }
+ break;
+ case CSSSelector::Id:
+ value = selector->value().impl();
+ while (true) {
+ if (!(ancestor = ancestor->parentElement()))
+ return false;
+ if (ancestor->hasID() && ancestor->idForStyleResolution().impl() == value && selectorTagMatches(ancestor, selector))
+ break;
+ }
+ break;
+ case CSSSelector::None:
+ while (true) {
+ if (!(ancestor = ancestor->parentElement()))
+ return false;
+ if (selectorTagMatches(ancestor, selector))
+ break;
+ }
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ }
+ return true;
+}
+
+
// Recursive check of selectors and combinators
// It can return 3 different values:
// * SelectorMatches - the selector matches the element e
@@ -2216,21 +2384,15 @@ bool CSSStyleSelector::SelectorChecker::checkOneSelector(CSSSelector* sel, Eleme
if (!e)
return false;
- if (sel->hasTag()) {
- const AtomicString& selLocalName = sel->m_tag.localName();
- if (selLocalName != starAtom && selLocalName != e->localName())
- return false;
- const AtomicString& selNS = sel->m_tag.namespaceURI();
- if (selNS != starAtom && selNS != e->namespaceURI())
- return false;
- }
+ if (!selectorTagMatches(e, sel))
+ return false;
if (sel->hasAttribute()) {
if (sel->m_match == CSSSelector::Class)
- return e->hasClass() && static_cast<StyledElement*>(e)->classNames().contains(sel->m_value);
+ return e->hasClass() && static_cast<StyledElement*>(e)->classNames().contains(sel->value());
if (sel->m_match == CSSSelector::Id)
- return e->hasID() && e->idForStyleResolution() == sel->m_value;
+ return e->hasID() && e->idForStyleResolution() == sel->value();
const QualifiedName& attr = sel->attribute();
@@ -2249,22 +2411,22 @@ bool CSSStyleSelector::SelectorChecker::checkOneSelector(CSSSelector* sel, Eleme
switch (sel->m_match) {
case CSSSelector::Exact:
- if (caseSensitive ? sel->m_value != value : !equalIgnoringCase(sel->m_value, value))
+ if (caseSensitive ? sel->value() != value : !equalIgnoringCase(sel->value(), value))
return false;
break;
case CSSSelector::List:
{
// Ignore empty selectors or selectors containing spaces
- if (sel->m_value.contains(' ') || sel->m_value.isEmpty())
+ if (sel->value().contains(' ') || sel->value().isEmpty())
return false;
unsigned startSearchAt = 0;
while (true) {
- size_t foundPos = value.find(sel->m_value, startSearchAt, caseSensitive);
+ size_t foundPos = value.find(sel->value(), startSearchAt, caseSensitive);
if (foundPos == notFound)
return false;
if (foundPos == 0 || value[foundPos - 1] == ' ') {
- unsigned endStr = foundPos + sel->m_value.length();
+ unsigned endStr = foundPos + sel->value().length();
if (endStr == value.length() || value[endStr] == ' ')
break; // We found a match.
}
@@ -2275,24 +2437,24 @@ bool CSSStyleSelector::SelectorChecker::checkOneSelector(CSSSelector* sel, Eleme
break;
}
case CSSSelector::Contain:
- if (!value.contains(sel->m_value, caseSensitive) || sel->m_value.isEmpty())
+ if (!value.contains(sel->value(), caseSensitive) || sel->value().isEmpty())
return false;
break;
case CSSSelector::Begin:
- if (!value.startsWith(sel->m_value, caseSensitive) || sel->m_value.isEmpty())
+ if (!value.startsWith(sel->value(), caseSensitive) || sel->value().isEmpty())
return false;
break;
case CSSSelector::End:
- if (!value.endsWith(sel->m_value, caseSensitive) || sel->m_value.isEmpty())
+ if (!value.endsWith(sel->value(), caseSensitive) || sel->value().isEmpty())
return false;
break;
case CSSSelector::Hyphen:
- if (value.length() < sel->m_value.length())
+ if (value.length() < sel->value().length())
return false;
- if (!value.startsWith(sel->m_value, caseSensitive))
+ if (!value.startsWith(sel->value(), caseSensitive))
return false;
// It they start the same, check for exact match or following '-':
- if (value.length() != sel->m_value.length() && value[sel->m_value.length()] != '-')
+ if (value.length() != sel->value().length() && value[sel->value().length()] != '-')
return false;
break;
case CSSSelector::PseudoClass:
@@ -2875,70 +3037,130 @@ bool CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass(CSSSelector* s
// -----------------------------------------------------------------
-CSSRuleSet::CSSRuleSet()
+static inline bool isSelectorMatchingHTMLBasedOnRuleHash(const CSSSelector* selector)
+{
+ const AtomicString& selectorNamespace = selector->tag().namespaceURI();
+ if (selectorNamespace != starAtom && selectorNamespace != xhtmlNamespaceURI)
+ return false;
+ if (selector->m_match == CSSSelector::None)
+ return true;
+ if (selector->m_match != CSSSelector::Id && selector->m_match != CSSSelector::Class)
+ return false;
+ return selector->tag() == starAtom;
+}
+
+RuleData::RuleData(CSSStyleRule* rule, CSSSelector* selector, unsigned position)
+ : m_rule(rule)
+ , m_selector(selector)
+ , m_position(position)
+ , m_hasFastCheckableSelector(isFastCheckableSelector(selector))
+ , m_hasMultipartSelector(selector->tagHistory())
+ , m_hasTopSelectorMatchingHTMLBasedOnRuleHash(isSelectorMatchingHTMLBasedOnRuleHash(selector))
+{
+ collectDescendantSelectorIdentifierHashes();
+}
+
+inline void RuleData::collectIdentifierHashes(const CSSSelector* selector, unsigned& identifierCount)
+{
+ if ((selector->m_match == CSSSelector::Id || selector->m_match == CSSSelector::Class) && !selector->value().isEmpty())
+ m_descendantSelectorIdentifierHashes[identifierCount++] = selector->value().impl()->existingHash();
+ if (identifierCount == maximumIdentifierCount)
+ return;
+ const AtomicString& localName = selector->tag().localName();
+ if (localName != starAtom)
+ m_descendantSelectorIdentifierHashes[identifierCount++] = localName.impl()->existingHash();
+}
+
+inline void RuleData::collectDescendantSelectorIdentifierHashes()
+{
+ unsigned identifierCount = 0;
+ CSSSelector::Relation relation = m_selector->relation();
+
+ // Skip the topmost selector. It is handled quickly by the rule hashes.
+ bool skipOverSubselectors = true;
+ for (const CSSSelector* selector = m_selector->tagHistory(); selector; selector = selector->tagHistory()) {
+ // Only collect identifiers that match ancestors.
+ switch (relation) {
+ case CSSSelector::SubSelector:
+ if (!skipOverSubselectors)
+ collectIdentifierHashes(selector, identifierCount);
+ break;
+ case CSSSelector::DirectAdjacent:
+ case CSSSelector::IndirectAdjacent:
+ case CSSSelector::ShadowDescendant:
+ skipOverSubselectors = true;
+ break;
+ case CSSSelector::Descendant:
+ case CSSSelector::Child:
+ skipOverSubselectors = false;
+ collectIdentifierHashes(selector, identifierCount);
+ break;
+ }
+ if (identifierCount == maximumIdentifierCount)
+ return;
+ relation = selector->relation();
+ }
+ m_descendantSelectorIdentifierHashes[identifierCount] = 0;
+}
+
+RuleSet::RuleSet()
: m_ruleCount(0)
- , m_pageRuleCount(0)
+ , m_autoShrinkToFitEnabled(true)
{
}
-CSSRuleSet::~CSSRuleSet()
+RuleSet::~RuleSet()
{
deleteAllValues(m_idRules);
deleteAllValues(m_classRules);
+ deleteAllValues(m_pseudoRules);
deleteAllValues(m_tagRules);
}
-void CSSRuleSet::addToRuleSet(AtomicStringImpl* key, AtomRuleMap& map,
+void RuleSet::addToRuleSet(AtomicStringImpl* key, AtomRuleMap& map,
CSSStyleRule* rule, CSSSelector* sel)
{
if (!key) return;
- CSSRuleDataList* rules = map.get(key);
+ Vector<RuleData>* rules = map.get(key);
if (!rules) {
- rules = new CSSRuleDataList(m_ruleCount++, rule, sel);
+ rules = new Vector<RuleData>;
map.set(key, rules);
- } else
- rules->append(m_ruleCount++, rule, sel);
+ }
+ rules->append(RuleData(rule, sel, m_ruleCount++));
}
-void CSSRuleSet::addRule(CSSStyleRule* rule, CSSSelector* sel)
+void RuleSet::addRule(CSSStyleRule* rule, CSSSelector* sel)
{
if (sel->m_match == CSSSelector::Id) {
- addToRuleSet(sel->m_value.impl(), m_idRules, rule, sel);
+ addToRuleSet(sel->value().impl(), m_idRules, rule, sel);
return;
}
if (sel->m_match == CSSSelector::Class) {
- addToRuleSet(sel->m_value.impl(), m_classRules, rule, sel);
+ addToRuleSet(sel->value().impl(), m_classRules, rule, sel);
return;
}
if (sel->isUnknownPseudoElement()) {
- addToRuleSet(sel->m_value.impl(), m_pseudoRules, rule, sel);
+ addToRuleSet(sel->value().impl(), m_pseudoRules, rule, sel);
return;
}
- const AtomicString& localName = sel->m_tag.localName();
+ const AtomicString& localName = sel->tag().localName();
if (localName != starAtom) {
addToRuleSet(localName.impl(), m_tagRules, rule, sel);
return;
}
- // Just put it in the universal rule set.
- if (!m_universalRules)
- m_universalRules = adoptPtr(new CSSRuleDataList(m_ruleCount++, rule, sel));
- else
- m_universalRules->append(m_ruleCount++, rule, sel);
+ m_universalRules.append(RuleData(rule, sel, m_ruleCount++));
}
-void CSSRuleSet::addPageRule(CSSStyleRule* rule, CSSSelector* sel)
+void RuleSet::addPageRule(CSSStyleRule* rule, CSSSelector* sel)
{
- if (!m_pageRules)
- m_pageRules = adoptPtr(new CSSRuleDataList(m_pageRuleCount++, rule, sel));
- else
- m_pageRules->append(m_pageRuleCount++, rule, sel);
+ m_pageRules.append(RuleData(rule, sel, m_pageRules.size()));
}
-void CSSRuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator& medium, CSSStyleSelector* styleSelector)
+void RuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluator& medium, CSSStyleSelector* styleSelector)
{
if (!sheet)
return;
@@ -2987,9 +3209,11 @@ void CSSRuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluat
} else if (item->isKeyframesRule())
styleSelector->addKeyframeStyle(static_cast<WebKitCSSKeyframesRule*>(item));
}
+ if (m_autoShrinkToFitEnabled)
+ shrinkToFit();
}
-void CSSRuleSet::addStyleRule(CSSStyleRule* rule)
+void RuleSet::addStyleRule(CSSStyleRule* rule)
{
if (rule->isPageRule()) {
CSSPageRule* pageRule = static_cast<CSSPageRule*>(rule);
@@ -3000,45 +3224,63 @@ void CSSRuleSet::addStyleRule(CSSStyleRule* rule)
}
}
-static void collectIdsAndSiblingRulesFromList(HashSet<AtomicStringImpl*>& ids, OwnPtr<CSSRuleSet>& siblingRules, const CSSRuleDataList* rules)
+static void collectIdsAndSiblingRulesFromList(HashSet<AtomicStringImpl*>& ids, OwnPtr<RuleSet>& siblingRules, const Vector<RuleData>& rules)
{
- for (CSSRuleData* data = rules->first(); data; data = data->next()) {
+ unsigned size = rules.size();
+ for (unsigned i = 0; i < size; ++i) {
+ const RuleData& ruleData = rules[i];
bool foundSiblingSelector = false;
- for (CSSSelector* selector = data->selector(); selector; selector = selector->tagHistory()) {
- if (selector->m_match == CSSSelector::Id && !selector->m_value.isEmpty())
- ids.add(selector->m_value.impl());
+ for (CSSSelector* selector = ruleData.selector(); selector; selector = selector->tagHistory()) {
+ if (selector->m_match == CSSSelector::Id && !selector->value().isEmpty())
+ ids.add(selector->value().impl());
if (CSSSelector* simpleSelector = selector->simpleSelector()) {
ASSERT(!simpleSelector->simpleSelector());
- if (simpleSelector->m_match == CSSSelector::Id && !simpleSelector->m_value.isEmpty())
- ids.add(simpleSelector->m_value.impl());
+ if (simpleSelector->m_match == CSSSelector::Id && !simpleSelector->value().isEmpty())
+ ids.add(simpleSelector->value().impl());
}
if (selector->isSiblingSelector())
foundSiblingSelector = true;
}
if (foundSiblingSelector) {
if (!siblingRules)
- siblingRules = adoptPtr(new CSSRuleSet);
- siblingRules->addRule(data->rule(), data->selector());
+ siblingRules = adoptPtr(new RuleSet);
+ siblingRules->addRule(ruleData.rule(), ruleData.selector());
}
}
}
-void CSSRuleSet::collectIdsAndSiblingRules(HashSet<AtomicStringImpl*>& ids, OwnPtr<CSSRuleSet>& siblingRules) const
+void RuleSet::collectIdsAndSiblingRules(HashSet<AtomicStringImpl*>& ids, OwnPtr<RuleSet>& siblingRules) const
{
AtomRuleMap::const_iterator end = m_idRules.end();
for (AtomRuleMap::const_iterator it = m_idRules.begin(); it != end; ++it)
- collectIdsAndSiblingRulesFromList(ids, siblingRules, it->second);
+ collectIdsAndSiblingRulesFromList(ids, siblingRules, *it->second);
end = m_classRules.end();
for (AtomRuleMap::const_iterator it = m_classRules.begin(); it != end; ++it)
- collectIdsAndSiblingRulesFromList(ids, siblingRules, it->second);
+ collectIdsAndSiblingRulesFromList(ids, siblingRules, *it->second);
end = m_tagRules.end();
for (AtomRuleMap::const_iterator it = m_tagRules.begin(); it != end; ++it)
- collectIdsAndSiblingRulesFromList(ids, siblingRules, it->second);
+ collectIdsAndSiblingRulesFromList(ids, siblingRules, *it->second);
end = m_pseudoRules.end();
for (AtomRuleMap::const_iterator it = m_pseudoRules.begin(); it != end; ++it)
- collectIdsAndSiblingRulesFromList(ids, siblingRules, it->second);
- if (m_universalRules)
- collectIdsAndSiblingRulesFromList(ids, siblingRules, m_universalRules.get());
+ collectIdsAndSiblingRulesFromList(ids, siblingRules, *it->second);
+ collectIdsAndSiblingRulesFromList(ids, siblingRules, m_universalRules);
+}
+
+static inline void shrinkMapVectorsToFit(RuleSet::AtomRuleMap& map)
+{
+ RuleSet::AtomRuleMap::iterator end = map.end();
+ for (RuleSet::AtomRuleMap::iterator it = map.begin(); it != end; ++it)
+ it->second->shrinkToFit();
+}
+
+void RuleSet::shrinkToFit()
+{
+ shrinkMapVectorsToFit(m_idRules);
+ shrinkMapVectorsToFit(m_classRules);
+ shrinkMapVectorsToFit(m_tagRules);
+ shrinkMapVectorsToFit(m_pseudoRules);
+ m_universalRules.shrinkToFit();
+ m_pageRules.shrinkToFit();
}
// -------------------------------------------------------------------------------------
@@ -3107,7 +3349,7 @@ void CSSStyleSelector::applyDeclarations(bool isImportant, int startIndex, int e
}
}
-void CSSStyleSelector::matchPageRules(CSSRuleSet* rules, bool isLeftPage, bool isFirstPage, const String& pageName)
+void CSSStyleSelector::matchPageRules(RuleSet* rules, bool isLeftPage, bool isFirstPage, const String& pageName)
{
m_matchedRules.clear();
@@ -3128,17 +3370,19 @@ void CSSStyleSelector::matchPageRules(CSSRuleSet* rules, bool isLeftPage, bool i
addMatchedDeclaration(m_matchedRules[i]->rule()->declaration());
}
-void CSSStyleSelector::matchPageRulesForList(CSSRuleDataList* rules, bool isLeftPage, bool isFirstPage, const String& pageName)
+void CSSStyleSelector::matchPageRulesForList(const Vector<RuleData>* rules, bool isLeftPage, bool isFirstPage, const String& pageName)
{
if (!rules)
return;
- for (CSSRuleData* d = rules->first(); d; d = d->next()) {
- CSSStyleRule* rule = d->rule();
- const AtomicString& selectorLocalName = d->selector()->m_tag.localName();
+ unsigned size = rules->size();
+ for (unsigned i = 0; i < size; ++i) {
+ const RuleData& ruleData = rules->at(i);
+ CSSStyleRule* rule = ruleData.rule();
+ const AtomicString& selectorLocalName = ruleData.selector()->tag().localName();
if (selectorLocalName != starAtom && selectorLocalName != pageName)
continue;
- CSSSelector::PseudoType pseudoType = d->selector()->pseudoType();
+ CSSSelector::PseudoType pseudoType = ruleData.selector()->pseudoType();
if ((pseudoType == CSSSelector::PseudoLeftPage && !isLeftPage)
|| (pseudoType == CSSSelector::PseudoRightPage && isLeftPage)
|| (pseudoType == CSSSelector::PseudoFirstPage && !isFirstPage))
@@ -3150,7 +3394,7 @@ void CSSStyleSelector::matchPageRulesForList(CSSRuleDataList* rules, bool isLeft
continue;
// Add this rule to our list of matched rules.
- addMatchedRule(d);
+ addMatchedRule(&ruleData);
}
}
@@ -4295,9 +4539,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
}
// FIXME: Should clamp all sorts of other integer properties too.
- const double minIntAsDouble = INT_MIN;
- const double maxIntAsDouble = INT_MAX;
- m_style->setZIndex(static_cast<int>(max(minIntAsDouble, min(primitiveValue->getDoubleValue(), maxIntAsDouble))));
+ m_style->setZIndex(clampToInteger(primitiveValue->getDoubleValue()));
return;
}
case CSSPropertyWidows:
@@ -5763,6 +6005,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
case CSSPropertyWebkitTextCombine:
HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(textCombine, TextCombine)
+ if (m_style->hasTextCombine())
+ m_style->setUnique(); // The style could be modified in RenderCombineText depending on text metrics.
return;
case CSSPropertyWebkitTextEmphasisPosition:
@@ -7196,9 +7440,21 @@ bool CSSStyleSelector::createTransformOperations(CSSValue* inValue, RenderStyle*
break;
}
case WebKitCSSTransformValue::PerspectiveTransformOperation: {
- double p = firstValue->getDoubleValue();
- if (p < 0.0)
+ bool ok = true;
+ Length p = Length(0, Fixed);
+ if (CSSPrimitiveValue::isUnitTypeLength(firstValue->primitiveType()))
+ p = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ else {
+ // This is a quirk that should go away when 3d transforms are finalized.
+ double val = firstValue->getDoubleValue();
+ ok = val >= 0;
+ val = clampToPositiveInteger(val);
+ p = Length(static_cast<int>(val), Fixed);
+ }
+
+ if (!ok)
return false;
+
operations.operations().append(PerspectiveTransformOperation::create(p));
break;
}
diff --git a/Source/WebCore/css/CSSStyleSelector.h b/Source/WebCore/css/CSSStyleSelector.h
index e035af2..6065c2c 100644
--- a/Source/WebCore/css/CSSStyleSelector.h
+++ b/Source/WebCore/css/CSSStyleSelector.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -27,6 +27,7 @@
#include "LinkHash.h"
#include "MediaQueryExp.h"
#include "RenderStyle.h"
+#include <wtf/BloomFilter.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
@@ -42,10 +43,7 @@ class CSSProperty;
class CSSFontFace;
class CSSFontFaceRule;
class CSSImageValue;
-class CSSRuleData;
-class CSSRuleDataList;
class CSSRuleList;
-class CSSRuleSet;
class CSSSelector;
class CSSStyleRule;
class CSSStyleSheet;
@@ -61,6 +59,8 @@ class KeyframeList;
class KeyframeValue;
class MediaQueryEvaluator;
class Node;
+class RuleData;
+class RuleSet;
class Settings;
class StyleImage;
class StyleSheet;
@@ -90,6 +90,10 @@ public:
CSSStyleSheet* pageUserSheet, const Vector<RefPtr<CSSStyleSheet> >* pageGroupUserSheets,
bool strictParsing, bool matchAuthorAndUserStyles);
~CSSStyleSelector();
+
+ // Using these during tree walk will allow style selector to optimize child and descendant selector lookups.
+ void pushParent(Element* parent);
+ void popParent(Element* parent);
PassRefPtr<RenderStyle> styleForElement(Element* e, RenderStyle* parentStyle = 0, bool allowSharing = true, bool resolveForRootDefault = false, bool matchVisitedPseudoClass = false);
@@ -115,6 +119,9 @@ public:
Node* locateCousinList(Element* parent, unsigned depth = 1) const;
Node* findSiblingForStyleSharing(Node*, unsigned& count) const;
bool canShareStyleWithElement(Node*) const;
+
+ void pushParentStackFrame(Element* parent);
+ void popParentStackFrame();
RenderStyle* style() const { return m_style.get(); }
@@ -157,9 +164,6 @@ public:
CSSFontSelector* fontSelector() const { return m_fontSelector.get(); }
- // Checks if a compound selector (which can consist of multiple simple selectors) matches the current element.
- bool checkSelector(CSSSelector*);
-
void addViewportDependentMediaQueryResult(const MediaQueryExp*, bool result);
bool affectedByViewportChange() const;
@@ -182,28 +186,43 @@ public:
void adjustRenderStyle(RenderStyle* styleToAdjust, RenderStyle* parentStyle, Element*);
- void addMatchedRule(CSSRuleData* rule) { m_matchedRules.append(rule); }
+ void addMatchedRule(const RuleData* rule) { m_matchedRules.append(rule); }
void addMatchedDeclaration(CSSMutableStyleDeclaration* decl);
- void matchRules(CSSRuleSet*, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules);
- void matchRulesForList(CSSRuleDataList*, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules);
+ void matchRules(RuleSet*, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules);
+ void matchRulesForList(const Vector<RuleData>*, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules);
+ bool fastRejectSelector(const RuleData&) const;
void sortMatchedRules(unsigned start, unsigned end);
+
+ bool checkSelector(const RuleData&);
template <bool firstPass>
void applyDeclarations(bool important, int startIndex, int endIndex);
- void matchPageRules(CSSRuleSet*, bool isLeftPage, bool isFirstPage, const String& pageName);
- void matchPageRulesForList(CSSRuleDataList*, bool isLeftPage, bool isFirstPage, const String& pageName);
+ void matchPageRules(RuleSet*, bool isLeftPage, bool isFirstPage, const String& pageName);
+ void matchPageRulesForList(const Vector<RuleData>*, bool isLeftPage, bool isFirstPage, const String& pageName);
bool isLeftPage(int pageIndex) const;
bool isRightPage(int pageIndex) const { return !isLeftPage(pageIndex); }
bool isFirstPage(int pageIndex) const;
String pageName(int pageIndex) const;
- OwnPtr<CSSRuleSet> m_authorStyle;
- OwnPtr<CSSRuleSet> m_userStyle;
+ OwnPtr<RuleSet> m_authorStyle;
+ OwnPtr<RuleSet> m_userStyle;
- OwnPtr<CSSRuleSet> m_siblingRules;
+ OwnPtr<RuleSet> m_siblingRules;
HashSet<AtomicStringImpl*> m_idsInRules;
+
+ struct ParentStackFrame {
+ ParentStackFrame() {}
+ ParentStackFrame(Element* element) : element(element) {}
+ Element* element;
+ Vector<unsigned, 4> identifierHashes;
+ };
+ Vector<ParentStackFrame> m_parentStack;
+
+ // With 100 unique strings in the filter, 2^12 slot table has false positive rate of ~0.2%.
+ static const unsigned bloomFilterKeyBits = 12;
+ OwnPtr<BloomFilter<bloomFilterKeyBits> > m_ancestorIdentifierFilter;
bool m_hasUAAppearance;
BorderData m_borderData;
@@ -225,6 +244,7 @@ public:
SelectorMatch checkSelector(CSSSelector*, Element*, HashSet<AtomicStringImpl*>* selectorAttrs, PseudoId& dynamicPseudo, bool isSubSelector, bool encounteredLink, RenderStyle* = 0, RenderStyle* elementParentStyle = 0) const;
bool checkOneSelector(CSSSelector*, Element*, HashSet<AtomicStringImpl*>* selectorAttrs, PseudoId& dynamicPseudo, bool isSubSelector, RenderStyle*, RenderStyle* elementParentStyle) const;
bool checkScrollbarPseudoClass(CSSSelector*, PseudoId& dynamicPseudo) const;
+ static bool fastCheckSelector(const CSSSelector*, const Element*);
EInsideLink determineLinkState(Element* element) const;
EInsideLink determineLinkStateSlowCase(Element* element) const;
@@ -293,7 +313,7 @@ public:
// A buffer used to hold the set of matched rules for an element, and a temporary buffer used for
// merge sorting.
- Vector<CSSRuleData*, 32> m_matchedRules;
+ Vector<const RuleData*, 32> m_matchedRules;
RefPtr<CSSRuleList> m_ruleList;
diff --git a/Source/WebCore/css/CSSStyleSheet.cpp b/Source/WebCore/css/CSSStyleSheet.cpp
index d5487a1..16c2ba8 100644
--- a/Source/WebCore/css/CSSStyleSheet.cpp
+++ b/Source/WebCore/css/CSSStyleSheet.cpp
@@ -53,7 +53,6 @@ static bool isAcceptableCSSStyleSheetParent(Node* parentNode)
CSSStyleSheet::CSSStyleSheet(CSSStyleSheet* parentSheet, const String& href, const KURL& baseURL, const String& charset)
: StyleSheet(parentSheet, href, baseURL)
- , m_document(parentSheet ? parentSheet->document() : 0)
, m_charset(charset)
, m_loadCompleted(false)
, m_strictParsing(!parentSheet || parentSheet->useStrictParsing())
@@ -64,7 +63,6 @@ CSSStyleSheet::CSSStyleSheet(CSSStyleSheet* parentSheet, const String& href, con
CSSStyleSheet::CSSStyleSheet(Node* parentNode, const String& href, const KURL& baseURL, const String& charset)
: StyleSheet(parentNode, href, baseURL)
- , m_document(parentNode->document())
, m_charset(charset)
, m_loadCompleted(false)
, m_strictParsing(false)
@@ -82,7 +80,6 @@ CSSStyleSheet::CSSStyleSheet(CSSRule* ownerRule, const String& href, const KURL&
, m_hasSyntacticallyValidCSSHeader(true)
{
CSSStyleSheet* parentSheet = ownerRule ? ownerRule->parentStyleSheet() : 0;
- m_document = parentSheet ? parentSheet->document() : 0;
m_isUserStyleSheet = parentSheet ? parentSheet->isUserStyleSheet() : false;
}
@@ -233,6 +230,24 @@ void CSSStyleSheet::checkLoaded()
m_loadCompleted = ownerNode() ? ownerNode()->sheetLoaded() : true;
}
+Document* CSSStyleSheet::document()
+{
+ StyleBase* styleObject = this;
+ while (styleObject) {
+ if (styleObject->isCSSStyleSheet()) {
+ Node* ownerNode = static_cast<CSSStyleSheet*>(styleObject)->ownerNode();
+ if (ownerNode)
+ return ownerNode->document();
+ }
+ if (styleObject->isRule())
+ styleObject = static_cast<CSSRule*>(styleObject)->parentStyleSheet();
+ else
+ styleObject = styleObject->parent();
+ }
+
+ return 0;
+}
+
void CSSStyleSheet::styleSheetChanged()
{
StyleBase* root = this;
diff --git a/Source/WebCore/css/CSSStyleSheet.h b/Source/WebCore/css/CSSStyleSheet.h
index 725518f..062886a 100644
--- a/Source/WebCore/css/CSSStyleSheet.h
+++ b/Source/WebCore/css/CSSStyleSheet.h
@@ -87,7 +87,7 @@ public:
virtual void checkLoaded();
- Document* document() { return m_document; }
+ Document* document();
const String& charset() const { return m_charset; }
@@ -112,7 +112,6 @@ private:
virtual bool isCSSStyleSheet() const { return true; }
virtual String type() const { return "text/css"; }
- Document* m_document;
OwnPtr<CSSNamespace> m_namespaces;
String m_charset;
bool m_loadCompleted : 1;
diff --git a/Source/WebCore/css/CSSValue.h b/Source/WebCore/css/CSSValue.h
index d1464ca..e8053fe 100644
--- a/Source/WebCore/css/CSSValue.h
+++ b/Source/WebCore/css/CSSValue.h
@@ -21,7 +21,6 @@
#ifndef CSSValue_h
#define CSSValue_h
-#include "CSSParserValues.h"
#include "KURLHash.h"
#include <wtf/ListHashSet.h>
#include <wtf/RefPtr.h>
@@ -70,8 +69,6 @@ public:
virtual bool isSVGPaint() const { return false; }
#endif
- virtual CSSParserValue parserValue() const { ASSERT_NOT_REACHED(); return CSSParserValue(); }
-
virtual void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*) { }
};
diff --git a/Source/WebCore/css/CSSValueList.cpp b/Source/WebCore/css/CSSValueList.cpp
index f8d8457..e107fb4 100644
--- a/Source/WebCore/css/CSSValueList.cpp
+++ b/Source/WebCore/css/CSSValueList.cpp
@@ -120,17 +120,6 @@ String CSSValueList::cssText() const
return result;
}
-PassOwnPtr<CSSParserValueList> CSSValueList::createParserValueList() const
-{
- size_t size = m_values.size();
- if (!size)
- return 0;
- OwnPtr<CSSParserValueList> result = adoptPtr(new CSSParserValueList);
- for (size_t i = 0; i < size; ++i)
- result->addValue(m_values[i]->parserValue());
- return result.release();
-}
-
void CSSValueList::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet)
{
size_t size = m_values.size();
diff --git a/Source/WebCore/css/CSSValueList.h b/Source/WebCore/css/CSSValueList.h
index 0d5c882..b2e6063 100644
--- a/Source/WebCore/css/CSSValueList.h
+++ b/Source/WebCore/css/CSSValueList.h
@@ -58,8 +58,6 @@ public:
virtual String cssText() const;
- PassOwnPtr<CSSParserValueList> createParserValueList() const;
-
virtual void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*);
protected:
diff --git a/Source/WebCore/css/WebKitCSSKeyframesRule.cpp b/Source/WebCore/css/WebKitCSSKeyframesRule.cpp
index 23f9f34..bf0c463 100644
--- a/Source/WebCore/css/WebKitCSSKeyframesRule.cpp
+++ b/Source/WebCore/css/WebKitCSSKeyframesRule.cpp
@@ -24,12 +24,13 @@
*/
#include "config.h"
+#include "WebKitCSSKeyframesRule.h"
+#include "CSSMutableStyleDeclaration.h"
#include "CSSParser.h"
-#include "WebKitCSSKeyframesRule.h"
-#include "WebKitCSSKeyframeRule.h"
#include "CSSRuleList.h"
#include "StyleSheet.h"
+#include "WebKitCSSKeyframeRule.h"
namespace WebCore {
@@ -45,8 +46,13 @@ WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule()
if (length == 0)
return;
- for (int i = 0; i < length; i++)
+ for (int i = 0; i < length; i++) {
+ if (m_lstCSSRules->item(i)->isKeyframeRule()) {
+ if (CSSMutableStyleDeclaration* style = static_cast<WebKitCSSKeyframeRule*>(m_lstCSSRules->item(i))->style())
+ style->setParent(0);
+ }
m_lstCSSRules->item(i)->setParent(0);
+ }
}
String WebKitCSSKeyframesRule::name() const
diff --git a/Source/WebCore/css/WebKitCSSMatrix.cpp b/Source/WebCore/css/WebKitCSSMatrix.cpp
index 14f6b4e..163eac8 100644
--- a/Source/WebCore/css/WebKitCSSMatrix.cpp
+++ b/Source/WebCore/css/WebKitCSSMatrix.cpp
@@ -91,9 +91,7 @@ PassRefPtr<WebKitCSSMatrix> WebKitCSSMatrix::multiply(WebKitCSSMatrix* secondMat
if (!secondMatrix)
return 0;
- TransformationMatrix tmp(secondMatrix->m_matrix);
- tmp.multiply(m_matrix);
- return WebKitCSSMatrix::create(tmp);
+ return WebKitCSSMatrix::create(TransformationMatrix(m_matrix).multiply(secondMatrix->m_matrix));
}
PassRefPtr<WebKitCSSMatrix> WebKitCSSMatrix::inverse(ExceptionCode& ec) const
diff --git a/Source/WebCore/css/html.css b/Source/WebCore/css/html.css
index 3c75559..0f13fcb 100644
--- a/Source/WebCore/css/html.css
+++ b/Source/WebCore/css/html.css
@@ -61,7 +61,10 @@ body {
p {
display: block;
- margin: 1.0__qem 0px
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1__qem;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
}
div {
@@ -87,7 +90,10 @@ address {
blockquote {
display: block;
- margin: 1__qem 40px 1em 40px
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 40px;
+ -webkit-margin-end: 40px;
}
figcaption {
@@ -96,7 +102,10 @@ figcaption {
figure {
display: block;
- margin: 1em 40px 1em 40px
+ -webkit-margin-before: 1em;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 40px;
+ -webkit-margin-end: 40px;
}
q {
@@ -121,7 +130,10 @@ center {
hr {
display: block;
- margin: 0.5em auto;
+ -webkit-margin-before: 0.5em;
+ -webkit-margin-after: 0.5em;
+ -webkit-margin-start: auto;
+ -webkit-margin-end: auto;
border-style: inset;
border-width: 1px
}
@@ -135,41 +147,59 @@ map {
h1 {
display: block;
font-size: 2em;
- margin: .67__qem 0 .67em 0;
+ -webkit-margin-before: 0.67__qem;
+ -webkit-margin-after: 0.67em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
h2 {
display: block;
font-size: 1.5em;
- margin: .83__qem 0 .83em 0;
+ -webkit-margin-before: 0.83__qem;
+ -webkit-margin-after: 0.83em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
h3 {
display: block;
font-size: 1.17em;
- margin: 1__qem 0 1em 0;
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
h4 {
display: block;
- margin: 1.33__qem 0 1.33em 0;
+ -webkit-margin-before: 1.33__qem;
+ -webkit-margin-after: 1.33em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
h5 {
display: block;
font-size: .83em;
- margin: 1.67__qem 0 1.67em 0;
+ -webkit-margin-before: 1.67__qem;
+ -webkit-margin-after: 1.67em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
h6 {
display: block;
font-size: .67em;
- margin: 2.33__qem 0 2.33em 0;
+ -webkit-margin-before: 2.33__qem;
+ -webkit-margin-after: 2.33em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
font-weight: bold
}
@@ -293,7 +323,7 @@ ol ul, ul ol, ul ul, ol ol {
form {
display: block;
- margin-top: 0__qem
+ margin-top: 0__qem;
}
label {
@@ -403,6 +433,14 @@ input::-webkit-input-speech-button {
display: inline-block;
}
+keygen, select {
+ -webkit-border-radius: 5px;
+}
+
+keygen::-webkit-keygen-select {
+ margin: 0px;
+}
+
textarea {
-webkit-appearance: textarea;
background-color: white;
@@ -505,12 +543,11 @@ input[type="radio"] {
-webkit-box-sizing: border-box;
}
-keygen, select {
+select {
-webkit-appearance: menulist;
-webkit-box-sizing: border-box;
-webkit-box-align: center;
border: 1px solid;
- -webkit-border-radius: 5px;
white-space: pre;
-webkit-rtl-ordering: logical;
color: black;
@@ -557,6 +594,7 @@ output {
position: absolute;
opacity: 0.9;
line-height: 0;
+ -webkit-text-security: none;
-webkit-transition: opacity 05.5s ease;
}
@@ -793,7 +831,7 @@ rt {
ruby > rt {
display: block;
- font-size: 60%; /* make slightly larger than 50% for better readability */
+ font-size: 50%;
text-align: center;
}
diff --git a/Source/WebCore/css/mediaControls.css b/Source/WebCore/css/mediaControls.css
index 6a0f14b..88144b4 100644
--- a/Source/WebCore/css/mediaControls.css
+++ b/Source/WebCore/css/mediaControls.css
@@ -52,6 +52,9 @@ audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-bu
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button {
@@ -59,6 +62,9 @@ audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-bu
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container {
@@ -86,6 +92,10 @@ audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline {
-webkit-box-flex: 1;
height: 16px;
padding: 0px 2px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
+ margin: initial;
}
audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container {
@@ -94,6 +104,10 @@ audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-cont
audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider {
display: none;
+ background-color: initial;
+ border: initial;
+ color: inherit;
+ margin: initial;
}
audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button {
@@ -101,6 +115,9 @@ audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-se
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button {
@@ -108,6 +125,9 @@ audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button {
@@ -115,14 +135,23 @@ audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-f
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button {
display: none;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button {
display: none;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button {
@@ -130,9 +159,15 @@ audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-medi
display: -webkit-box;
width: 16px;
height: 16px;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button {
-webkit-appearance: media-volume-slider-mute-button;
display: none;
+ background-color: initial;
+ border: initial;
+ color: inherit;
}
diff --git a/Source/WebCore/css/mediaControlsChromium.css b/Source/WebCore/css/mediaControlsChromium.css
index 61cbb0d..b8adc2c 100644
--- a/Source/WebCore/css/mediaControlsChromium.css
+++ b/Source/WebCore/css/mediaControlsChromium.css
@@ -153,11 +153,12 @@ audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-contr
audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline {
-webkit-appearance: media-slider;
display: -webkit-box;
+ box-sizing: border-box;
-webkit-box-flex: 1;
padding: 0px;
margin: 0px 6px;
- height: 16px;
+ height: 18px;
border-color: rgba(255, 255, 255, 0.2);
border-style: solid;
diff --git a/Source/WebCore/css/mediaControlsQt.css b/Source/WebCore/css/mediaControlsQt.css
index 871a5b8..9ca3313 100644
--- a/Source/WebCore/css/mediaControlsQt.css
+++ b/Source/WebCore/css/mediaControlsQt.css
@@ -213,7 +213,12 @@ audio::-webkit-media-controls-fullscreen-button {
}
video::-webkit-media-controls-fullscreen-button {
- display: none;
+ top: 0px;
+ right: 0px;
+ width: 12px;
+ height: 12px;
+ padding: 6px;
+ margin: 5px 5px 5px 3px;
}
audio::-webkit-media-controls-rewind-button {
@@ -240,3 +245,11 @@ video::-webkit-media-controls-toggle-closed-captions-button {
display: none;
}
+::-webkit-media-controls-mute-button,
+::-webkit-media-controls-play-button,
+::-webkit-media-controls-timeline,
+::-webkit-media-controls-volume-slider,
+::-webkit-media-controls-fullscreen-button
+{
+ box-sizing: content-box !important;
+}
diff --git a/Source/WebCore/css/themeChromiumLinux.css b/Source/WebCore/css/themeChromiumLinux.css
index f8210c3..bd7f961 100644
--- a/Source/WebCore/css/themeChromiumLinux.css
+++ b/Source/WebCore/css/themeChromiumLinux.css
@@ -34,3 +34,8 @@ select {
background-color: #dddddd;
border: 0px;
}
+
+select[size="0"] option,
+select[size="1"] option {
+ background-color: #f7f7f7;
+}
diff --git a/Source/WebCore/css/themeWin.css b/Source/WebCore/css/themeWin.css
index f2ad669..0838b11 100644
--- a/Source/WebCore/css/themeWin.css
+++ b/Source/WebCore/css/themeWin.css
@@ -33,8 +33,19 @@
making our form elements match Firefox's. */
input:not([type]),
+input[type="color"],
+input[type="date"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="tel"],
input[type="text"],
-input[type="password"] {
+input[type="time"],
+input[type="url"],
+input[type="week"] {
padding:1px 0;
}
@@ -59,14 +70,25 @@ input[type="radio"] {
*/
textarea:disabled,
input:not([type]):disabled,
-input[type="text"]:disabled,
+input[type="color"]:disabled,
+input[type="date"]:disabled,
+input[type="datetime"]:disabled,
+input[type="datetime-local"]:disabled,
+input[type="email"]:disabled,
+input[type="month"]:disabled,
input[type="password"]:disabled,
-input[type="search"]:disabled {
+input[type="number"]:disabled,
+input[type="search"]:disabled,
+input[type="tel"]:disabled,
+input[type="text"]:disabled,
+input[type="time"]:disabled,
+input[type="url"]:disabled,
+input[type="week"]:disabled {
background-color: #EBEBE4;
}
input[type="search"]::-webkit-search-cancel-button {
- margin-right: 3px;
+ margin-right: 3px;
}
input[type="search"]::-webkit-search-results-decoration {
@@ -77,6 +99,10 @@ input[type="search"]::-webkit-search-results-button {
margin: 0 3px 0 2px;
}
+input::-webkit-outer-spin-button {
+ margin: 0;
+}
+
input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button {
padding: 1px 6px;
}
diff --git a/Source/WebCore/dom/ClientRect.h b/Source/WebCore/dom/ClientRect.h
index f9acef0..f739497 100644
--- a/Source/WebCore/dom/ClientRect.h
+++ b/Source/WebCore/dom/ClientRect.h
@@ -42,8 +42,8 @@ namespace WebCore {
static PassRefPtr<ClientRect> create(const FloatRect& rect) { return adoptRef(new ClientRect(rect)); }
float top() const { return m_rect.y(); }
- float right() const { return m_rect.right(); }
- float bottom() const { return m_rect.bottom(); }
+ float right() const { return m_rect.maxX(); }
+ float bottom() const { return m_rect.maxY(); }
float left() const { return m_rect.x(); }
float width() const { return m_rect.width(); }
float height() const { return m_rect.height(); }
diff --git a/Source/WebCore/dom/DOMAllInOne.cpp b/Source/WebCore/dom/DOMAllInOne.cpp
index aa85bfb..c88aecf 100644
--- a/Source/WebCore/dom/DOMAllInOne.cpp
+++ b/Source/WebCore/dom/DOMAllInOne.cpp
@@ -60,6 +60,7 @@
#include "Document.cpp"
#include "DocumentFragment.cpp"
#include "DocumentMarkerController.cpp"
+#include "DocumentOrderedMap.cpp"
#include "DocumentParser.cpp"
#include "DocumentType.cpp"
#include "DynamicNodeList.cpp"
diff --git a/Source/WebCore/dom/DeviceMotionController.cpp b/Source/WebCore/dom/DeviceMotionController.cpp
index 3385167..28e201e 100644
--- a/Source/WebCore/dom/DeviceMotionController.cpp
+++ b/Source/WebCore/dom/DeviceMotionController.cpp
@@ -54,7 +54,7 @@ void DeviceMotionController::timerFired(Timer<DeviceMotionController>* timer)
RefPtr<DeviceMotionData> deviceMotionData = m_client ? m_client->currentDeviceMotion() : DeviceMotionData::create();
RefPtr<DeviceMotionEvent> event = DeviceMotionEvent::create(eventNames().devicemotionEvent, deviceMotionData.get());
- Vector<DOMWindow*> listenersVector;
+ Vector<RefPtr<DOMWindow> > listenersVector;
copyToVector(m_newListeners, listenersVector);
m_newListeners.clear();
for (size_t i = 0; i < listenersVector.size(); ++i)
@@ -100,7 +100,7 @@ void DeviceMotionController::removeAllListeners(DOMWindow* window)
void DeviceMotionController::didChangeDeviceMotion(DeviceMotionData* deviceMotionData)
{
RefPtr<DeviceMotionEvent> event = DeviceMotionEvent::create(eventNames().devicemotionEvent, deviceMotionData);
- Vector<DOMWindow*> listenersVector;
+ Vector<RefPtr<DOMWindow> > listenersVector;
copyToVector(m_listeners, listenersVector);
for (size_t i = 0; i < listenersVector.size(); ++i)
listenersVector[i]->dispatchEvent(event);
diff --git a/Source/WebCore/dom/DeviceMotionController.h b/Source/WebCore/dom/DeviceMotionController.h
index 70c948e..80c9d94 100644
--- a/Source/WebCore/dom/DeviceMotionController.h
+++ b/Source/WebCore/dom/DeviceMotionController.h
@@ -52,9 +52,9 @@ private:
void timerFired(Timer<DeviceMotionController>*);
DeviceMotionClient* m_client;
- typedef HashCountedSet<DOMWindow*> ListenersCountedSet;
+ typedef HashCountedSet<RefPtr<DOMWindow> > ListenersCountedSet;
ListenersCountedSet m_listeners;
- typedef HashSet<DOMWindow*> ListenersSet;
+ typedef HashSet<RefPtr<DOMWindow> > ListenersSet;
ListenersSet m_newListeners;
Timer<DeviceMotionController> m_timer;
};
diff --git a/Source/WebCore/dom/DeviceOrientationController.cpp b/Source/WebCore/dom/DeviceOrientationController.cpp
index 60fcf13..da42bec 100644
--- a/Source/WebCore/dom/DeviceOrientationController.cpp
+++ b/Source/WebCore/dom/DeviceOrientationController.cpp
@@ -54,7 +54,7 @@ void DeviceOrientationController::timerFired(Timer<DeviceOrientationController>*
RefPtr<DeviceOrientation> orientation = m_client->lastOrientation();
RefPtr<DeviceOrientationEvent> event = DeviceOrientationEvent::create(eventNames().deviceorientationEvent, orientation.get());
- Vector<DOMWindow*> listenersVector;
+ Vector<RefPtr<DOMWindow> > listenersVector;
copyToVector(m_newListeners, listenersVector);
m_newListeners.clear();
for (size_t i = 0; i < listenersVector.size(); ++i)
@@ -102,7 +102,7 @@ void DeviceOrientationController::removeAllListeners(DOMWindow* window)
void DeviceOrientationController::didChangeDeviceOrientation(DeviceOrientation* orientation)
{
RefPtr<DeviceOrientationEvent> event = DeviceOrientationEvent::create(eventNames().deviceorientationEvent, orientation);
- Vector<DOMWindow*> listenersVector;
+ Vector<RefPtr<DOMWindow> > listenersVector;
copyToVector(m_listeners, listenersVector);
for (size_t i = 0; i < listenersVector.size(); ++i)
listenersVector[i]->dispatchEvent(event);
diff --git a/Source/WebCore/dom/DeviceOrientationController.h b/Source/WebCore/dom/DeviceOrientationController.h
index 4fa9006..5e06771 100644
--- a/Source/WebCore/dom/DeviceOrientationController.h
+++ b/Source/WebCore/dom/DeviceOrientationController.h
@@ -55,9 +55,9 @@ private:
Page* m_page;
DeviceOrientationClient* m_client;
- typedef HashCountedSet<DOMWindow*> ListenersCountedSet;
+ typedef HashCountedSet<RefPtr<DOMWindow> > ListenersCountedSet;
ListenersCountedSet m_listeners;
- typedef HashSet<DOMWindow*> ListenersSet;
+ typedef HashSet<RefPtr<DOMWindow> > ListenersSet;
ListenersSet m_newListeners;
Timer<DeviceOrientationController> m_timer;
};
diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp
index 0bdd603..ee790ab 100644
--- a/Source/WebCore/dom/Document.cpp
+++ b/Source/WebCore/dom/Document.cpp
@@ -55,6 +55,7 @@
#include "DocumentType.h"
#include "EditingText.h"
#include "Editor.h"
+#include "Element.h"
#include "EntityReference.h"
#include "Event.h"
#include "EventHandler.h"
@@ -102,6 +103,7 @@
#include "MouseEventWithHitTestResults.h"
#include "MutationEvent.h"
#include "NameNodeList.h"
+#include "NestingLevelIncrementer.h"
#include "NodeFilter.h"
#include "NodeIterator.h"
#include "NodeWithIndex.h"
@@ -143,7 +145,6 @@
#include "XMLHttpRequest.h"
#include "XMLNSNames.h"
#include "XMLNames.h"
-#include "XSSAuditor.h"
#include "htmlediting.h"
#include <wtf/CurrentTime.h>
#include <wtf/HashFunctions.h>
@@ -235,16 +236,13 @@ using namespace HTMLNames;
// #define INSTRUMENT_LAYOUT_SCHEDULING 1
+static const unsigned cMaxWriteRecursionDepth = 21;
+
// This amount of time must have elapsed before we will even consider scheduling a layout without a delay.
// FIXME: For faster machines this value can really be lowered to 200. 250 is adequate, but a little high
// for dual G5s. :)
static const int cLayoutScheduleThreshold = 250;
-// These functions can't have internal linkage because they are used as template arguments.
-bool keyMatchesId(AtomicStringImpl*, Element*);
-bool keyMatchesMapName(AtomicStringImpl*, Element*);
-bool keyMatchesLowercasedMapName(AtomicStringImpl*, Element*);
-
// DOM Level 2 says (letters added):
//
// a) Name start characters must have one of the categories Ll, Lu, Lo, Lt, Nl.
@@ -383,7 +381,7 @@ private:
Document* m_document;
};
-Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, const KURL& baseURL)
+Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML)
: ContainerNode(0)
, m_compatibilityMode(NoQuirksMode)
, m_compatibilityModeLocked(false)
@@ -430,7 +428,7 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, con
, m_normalWorldWrapperCache(0)
#endif
, m_usingGeolocation(false)
- , m_eventQueue(adoptPtr(new EventQueue))
+ , m_eventQueue(EventQueue::create(this))
#if ENABLE(WML)
, m_containsWMLContent(false)
#endif
@@ -446,6 +444,8 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, con
, m_loadEventDelayTimer(this, &Document::loadEventDelayTimerFired)
, m_directionSetOnDocumentElement(false)
, m_writingModeSetOnDocumentElement(false)
+ , m_writeRecursionIsTooDeep(false)
+ , m_writeRecursionDepth(0)
#if ENABLE(REQUEST_ANIMATION_FRAME)
, m_nextRequestAnimationFrameCallbackId(0)
#endif
@@ -460,15 +460,16 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, con
m_ignoreAutofocus = false;
m_frame = frame;
-
- if (frame || !url.isEmpty())
+ m_documentLoader = frame ? frame->loader()->activeDocumentLoader() : 0;
+
+ // We depend on the url getting immediately set in subframes, but we
+ // also depend on the url NOT getting immediately set in opened windows.
+ // See fast/dom/early-frame-url.html
+ // and fast/dom/location-new-window-no-crash.html, respectively.
+ // FIXME: Can/should we unify this behavior?
+ if ((frame && frame->ownerElement()) || !url.isEmpty())
setURL(url);
- // Setting of m_baseURL needs to happen after the setURL call, since that
- // calls updateBaseURL, which would clobber the passed in value.
- if (!baseURL.isNull())
- m_baseURL = baseURL;
-
#if !PLATFORM(ANDROID)
m_axObjectCache = 0;
#endif
@@ -521,12 +522,6 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, con
#endif
}
-inline void Document::DocumentOrderedMap::clear()
-{
- m_map.clear();
- m_duplicateCounts.clear();
-}
-
void Document::removedLastRef()
{
ASSERT(!m_deletionHasBegun);
@@ -736,10 +731,7 @@ void Document::childrenChanged(bool changedByParser, Node* beforeChange, Node* a
void Document::cacheDocumentElement() const
{
ASSERT(!m_documentElement);
- Node* n = firstChild();
- while (n && !n->isElementNode())
- n = n->nextSibling();
- m_documentElement = static_cast<Element*>(n);
+ m_documentElement = firstElementChild(this);
}
PassRefPtr<Element> Document::createElement(const AtomicString& name, ExceptionCode& ec)
@@ -1019,87 +1011,11 @@ PassRefPtr<Element> Document::createElementNS(const String& namespaceURI, const
return createElement(qName, false);
}
-inline void Document::DocumentOrderedMap::add(AtomicStringImpl* key, Element* element)
-{
- ASSERT(key);
- ASSERT(element);
-
- if (!m_duplicateCounts.contains(key)) {
- // Fast path. The key is not already in m_duplicateCounts, so we assume that it's
- // also not already in m_map and try to add it. If that add succeeds, we're done.
- pair<Map::iterator, bool> addResult = m_map.add(key, element);
- if (addResult.second)
- return;
-
- // The add failed, so this key was already cached in m_map.
- // There are multiple elements with this key. Remove the m_map
- // cache for this key so get searches for it next time it is called.
- m_map.remove(addResult.first);
- m_duplicateCounts.add(key);
- } else {
- // There are multiple elements with this key. Remove the m_map
- // cache for this key so get will search for it next time it is called.
- Map::iterator cachedItem = m_map.find(key);
- if (cachedItem != m_map.end()) {
- m_map.remove(cachedItem);
- m_duplicateCounts.add(key);
- }
- }
-
- m_duplicateCounts.add(key);
-}
-
-inline void Document::DocumentOrderedMap::remove(AtomicStringImpl* key, Element* element)
-{
- ASSERT(key);
- ASSERT(element);
-
- m_map.checkConsistency();
- Map::iterator cachedItem = m_map.find(key);
- if (cachedItem != m_map.end() && cachedItem->second == element)
- m_map.remove(cachedItem);
- else
- m_duplicateCounts.remove(key);
-}
-
-template<bool keyMatches(AtomicStringImpl*, Element*)> inline Element* Document::DocumentOrderedMap::get(AtomicStringImpl* key, const Document* document) const
-{
- ASSERT(key);
-
- m_map.checkConsistency();
-
- Element* element = m_map.get(key);
- if (element)
- return element;
-
- if (m_duplicateCounts.contains(key)) {
- // We know there's at least one node that matches; iterate to find the first one.
- for (Node* node = document->firstChild(); node; node = node->traverseNextNode()) {
- if (!node->isElementNode())
- continue;
- element = static_cast<Element*>(node);
- if (!keyMatches(key, element))
- continue;
- m_duplicateCounts.remove(key);
- m_map.set(key, element);
- return element;
- }
- ASSERT_NOT_REACHED();
- }
-
- return 0;
-}
-
-inline bool keyMatchesId(AtomicStringImpl* key, Element* element)
-{
- return element->hasID() && element->getIdAttribute().impl() == key;
-}
-
Element* Document::getElementById(const AtomicString& elementId) const
{
if (elementId.isEmpty())
return 0;
- return m_elementsById.get<keyMatchesId>(elementId.impl(), this);
+ return m_elementsById.getElementById(elementId.impl(), this);
}
String Document::readyState() const
@@ -1209,7 +1125,7 @@ void Document::setContent(const String& content)
open();
m_parser->append(content);
m_parser->finish();
- close();
+ explicitClose();
}
// FIXME: We need to discuss the DOM API here at some point. Ideas:
@@ -2038,6 +1954,8 @@ void Document::open(Document* ownerDocument)
removeAllEventListeners();
implicitOpen();
+ if (ScriptableDocumentParser* parser = scriptableDocumentParser())
+ parser->setWasCreatedByScript(true);
if (DOMWindow* domWindow = this->domWindow())
domWindow->removeAllEventListeners();
@@ -2056,14 +1974,15 @@ void Document::detachParser()
void Document::cancelParsing()
{
- if (m_parser) {
- // We have to clear the parser to avoid possibly triggering
- // the onload handler when closing as a side effect of a cancel-style
- // change, such as opening a new document or closing the window while
- // still parsing
- detachParser();
- close();
- }
+ if (!m_parser)
+ return;
+
+ // We have to clear the parser to avoid possibly triggering
+ // the onload handler when closing as a side effect of a cancel-style
+ // change, such as opening a new document or closing the window while
+ // still parsing
+ detachParser();
+ explicitClose();
}
void Document::implicitOpen()
@@ -2078,10 +1997,6 @@ void Document::implicitOpen()
setParsing(true);
setReadyState(Loading);
- ScriptableDocumentParser* parser = scriptableDocumentParser();
- if (m_frame && parser)
- parser->setXSSAuditor(m_frame->script()->xssAuditor());
-
// If we reload, the animation controller sticks around and has
// a stale animation time. We need to update it here.
if (m_frame && m_frame->animation())
@@ -2098,12 +2013,12 @@ HTMLElement* Document::body() const
Node* body = 0;
for (Node* i = de->firstChild(); i; i = i->nextSibling()) {
if (i->hasTagName(framesetTag))
- return static_cast<HTMLElement*>(i);
+ return toHTMLElement(i);
if (i->hasTagName(bodyTag) && !body)
body = i;
}
- return static_cast<HTMLElement*>(body);
+ return toHTMLElement(body);
}
void Document::setBody(PassRefPtr<HTMLElement> newBody, ExceptionCode& ec)
@@ -2135,18 +2050,28 @@ HTMLHeadElement* Document::head()
void Document::close()
{
- Frame* frame = this->frame();
- if (frame) {
- // This code calls implicitClose() if all loading has completed.
- FrameLoader* frameLoader = frame->loader();
- frameLoader->writer()->endIfNotLoadingMainResource();
- frameLoader->checkCompleted();
- } else {
+ // FIXME: We should follow the specification more closely:
+ // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close
+
+ if (!scriptableDocumentParser() || !scriptableDocumentParser()->wasCreatedByScript())
+ return;
+
+ explicitClose();
+}
+
+void Document::explicitClose()
+{
+ if (!m_frame) {
// Because we have no frame, we don't know if all loading has completed,
// so we just call implicitClose() immediately. FIXME: This might fire
// the load event prematurely <http://bugs.webkit.org/show_bug.cgi?id=14568>.
implicitClose();
+ return;
}
+
+ // This code calls implicitClose() if all loading has completed.
+ loader()->writer()->endIfNotLoadingMainResource();
+ m_frame->loader()->checkCompleted();
}
void Document::implicitClose()
@@ -2297,6 +2222,14 @@ int Document::elapsedTime() const
void Document::write(const SegmentedString& text, Document* ownerDocument)
{
+ NestingLevelIncrementer nestingLevelIncrementer(m_writeRecursionDepth);
+
+ m_writeRecursionIsTooDeep = (m_writeRecursionDepth > 1) && m_writeRecursionIsTooDeep;
+ m_writeRecursionIsTooDeep = (m_writeRecursionDepth > cMaxWriteRecursionDepth) || m_writeRecursionIsTooDeep;
+
+ if (m_writeRecursionIsTooDeep)
+ return;
+
#ifdef INSTRUMENT_LAYOUT_SCHEDULING
if (!ownerElement())
printf("Beginning a document.write at %d\n", elapsedTime());
@@ -2421,7 +2354,7 @@ void Document::processBaseElement()
KURL baseElementURL;
if (href) {
String strippedHref = stripLeadingAndTrailingHTMLSpaces(*href);
- if (!strippedHref.isEmpty() && (!frame() || frame()->script()->xssAuditor()->canSetBaseElementURL(*href)))
+ if (!strippedHref.isEmpty())
baseElementURL = KURL(url(), strippedHref);
}
if (m_baseElementURL != baseElementURL) {
@@ -2698,7 +2631,7 @@ void Document::processHttpEquiv(const String& equiv, const String& content)
String url;
if (frame && parseHTTPRefresh(content, true, delay, url)) {
if (url.isEmpty())
- url = frame->loader()->url().string();
+ url = m_url.string();
else
url = completeURL(url).string();
frame->navigationScheduler()->scheduleRedirect(delay, url);
@@ -2979,12 +2912,11 @@ void Document::removePendingSheet()
styleSelectorChanged(RecalcStyleImmediately);
- ScriptableDocumentParser* parser = scriptableDocumentParser();
- if (parser)
+ if (ScriptableDocumentParser* parser = scriptableDocumentParser())
parser->executeScriptsWaitingForStylesheets();
if (m_gotoAnchorNeededAfterStylesheetsLoad && view())
- view()->scrollToFragment(m_frame->loader()->url());
+ view()->scrollToFragment(m_url);
}
void Document::styleSelectorChanged(StyleSelectorUpdateFlag updateFlag)
@@ -3037,6 +2969,9 @@ void Document::styleSelectorChanged(StyleSelectorUpdateFlag updateFlag)
void Document::addStyleSheetCandidateNode(Node* node, bool createdByParser)
{
+ if (!node->inDocument())
+ return;
+
// Until the <body> exists, we have no choice but to compare document positions,
// since styles outside of the body and head continue to be shunted into the head
// (and thus can shift to end up before dynamically added DOM content that is also
@@ -3825,7 +3760,7 @@ String Document::lastModified() const
DateComponents date;
bool foundDate = false;
if (m_frame) {
- String httpLastModified = m_frame->loader()->documentLoader()->response().httpHeaderField("Last-Modified");
+ String httpLastModified = m_documentLoader->response().httpHeaderField("Last-Modified");
if (!httpLastModified.isEmpty()) {
date.setMillisecondsSinceEpochForDateTime(parseDate(httpLastModified));
foundDate = true;
@@ -3957,16 +3892,6 @@ void Document::removeImageMap(HTMLMapElement* imageMap)
m_imageMapsByName.remove(name, imageMap);
}
-inline bool keyMatchesMapName(AtomicStringImpl* key, Element* element)
-{
- return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().impl() == key;
-}
-
-inline bool keyMatchesLowercasedMapName(AtomicStringImpl* key, Element* element)
-{
- return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().lower().impl() == key;
-}
-
HTMLMapElement* Document::getImageMap(const String& url) const
{
if (url.isNull())
@@ -3974,8 +3899,8 @@ HTMLMapElement* Document::getImageMap(const String& url) const
size_t hashPos = url.find('#');
String name = (hashPos == notFound ? url : url.substring(hashPos + 1)).impl();
if (isHTMLDocument())
- return static_cast<HTMLMapElement*>(m_imageMapsByName.get<keyMatchesLowercasedMapName>(AtomicString(name.lower()).impl(), this));
- return static_cast<HTMLMapElement*>(m_imageMapsByName.get<keyMatchesMapName>(AtomicString(name).impl(), this));
+ return static_cast<HTMLMapElement*>(m_imageMapsByName.getElementByLowercasedMapName(AtomicString(name.lower()).impl(), this));
+ return static_cast<HTMLMapElement*>(m_imageMapsByName.getElementByMapName(AtomicString(name).impl(), this));
}
void Document::setDecoder(PassRefPtr<TextResourceDecoder> decoder)
@@ -4338,7 +4263,7 @@ void Document::finishedParsing()
f->loader()->finishedParsing();
- InspectorInstrumentation::mainResourceFiredDOMContentEvent(f, url());
+ InspectorInstrumentation::domContentLoadedEventFired(f, url());
}
}
@@ -4551,8 +4476,7 @@ void Document::initSecurityContext()
// load local resources. See https://bugs.webkit.org/show_bug.cgi?id=16756
// and https://bugs.webkit.org/show_bug.cgi?id=19760 for further
// discussion.
- DocumentLoader* documentLoader = m_frame->loader()->documentLoader();
- if (documentLoader && documentLoader->substituteData().isValid())
+ if (m_documentLoader->substituteData().isValid())
securityOrigin()->grantLoadLocalResources();
}
@@ -4629,10 +4553,9 @@ void Document::updateURLForPushOrReplaceState(const KURL& url)
if (!f)
return;
- // FIXME: Eliminate this redundancy.
setURL(url);
- f->loader()->setURL(url);
- f->loader()->documentLoader()->replaceRequestURLForSameDocumentNavigation(url);
+ f->loader()->setOutgoingReferrer(url);
+ m_documentLoader->replaceRequestURLForSameDocumentNavigation(url);
}
void Document::statePopped(SerializedScriptValue* stateObject)
@@ -5048,7 +4971,7 @@ void Document::webkitCancelRequestAnimationFrame(int id)
}
}
-void Document::serviceScriptedAnimations()
+void Document::serviceScriptedAnimations(DOMTimeStamp time)
{
if (!m_requestAnimationFrameCallbacks)
return;
@@ -5076,7 +4999,7 @@ void Document::serviceScriptedAnimations()
RequestAnimationFrameCallback* callback = callbacks[i].get();
if (!callback->m_firedOrCancelled && (!callback->m_element || callback->m_element->renderer())) {
callback->m_firedOrCancelled = true;
- callback->handleEvent();
+ callback->handleEvent(time);
firedCallback = true;
callbacks.remove(i);
break;
diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h
index c9c8d38..9ace93d 100644
--- a/Source/WebCore/dom/Document.h
+++ b/Source/WebCore/dom/Document.h
@@ -32,15 +32,19 @@
#include "CollectionType.h"
#include "Color.h"
#include "ContainerNode.h"
+#include "ContentSecurityPolicy.h"
+#include "DOMTimeStamp.h"
+#include "DocumentLoader.h"
+#include "DocumentOrderedMap.h"
#include "DocumentTiming.h"
#include "QualifiedName.h"
#include "ScriptExecutionContext.h"
#include "Timer.h"
#include "ViewportArguments.h"
#include <wtf/FixedArray.h>
-#include <wtf/HashCountedSet.h>
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
+#include <wtf/PassRefPtr.h>
#if USE(JSC)
#include <runtime/WeakGCMap.h>
@@ -347,7 +351,6 @@ public:
String defaultCharset() const;
- // Synonyms backing similar DOM attributes. Use Document::encoding() to avoid virtual dispatch.
String inputEncoding() const { return Document::encoding(); }
String charset() const { return Document::encoding(); }
String characterSet() const { return Document::encoding(); }
@@ -429,6 +432,7 @@ public:
#endif
virtual bool isFrameSet() const { return false; }
+ CSSStyleSelector* styleSelectorIfExists() const { return m_styleSelector.get(); }
CSSStyleSelector* styleSelector()
{
if (!m_styleSelector)
@@ -554,11 +558,22 @@ public:
// to get visually ordered hebrew and arabic pages right
void setVisuallyOrdered();
bool visuallyOrdered() const { return m_visuallyOrdered; }
+
+ void setDocumentLoader(DocumentLoader* documentLoader) { m_documentLoader = documentLoader; }
+ DocumentLoader* loader() const { return m_documentLoader; }
void open(Document* ownerDocument = 0);
void implicitOpen();
+
+ // close() is the DOM API document.close()
void close();
+ // In some situations (see the code), we ignore document.close().
+ // explicitClose() bypass these checks and actually tries to close the
+ // input stream.
+ void explicitClose();
+ // implicitClose() actually does the work of closing the input stream.
void implicitClose();
+
void cancelParsing();
void write(const SegmentedString& text, Document* ownerDocument = 0);
@@ -952,7 +967,7 @@ public:
virtual void postTask(PassOwnPtr<Task>); // Executes the task on context's thread asynchronously.
#if USE(JSC)
- typedef JSC::WeakGCMap<WebCore::Node*, JSNode*> JSWrapperCache;
+ typedef JSC::WeakGCMap<WebCore::Node*, JSNode> JSWrapperCache;
typedef HashMap<DOMWrapperWorld*, JSWrapperCache*> JSWrapperCacheMap;
JSWrapperCacheMap& wrapperCacheMap() { return m_wrapperCacheMap; }
JSWrapperCache* getWrapperCache(DOMWrapperWorld* world);
@@ -1091,7 +1106,7 @@ public:
#if ENABLE(REQUEST_ANIMATION_FRAME)
int webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback>, Element*);
void webkitCancelRequestAnimationFrame(int id);
- void serviceScriptedAnimations();
+ void serviceScriptedAnimations(DOMTimeStamp);
#endif
bool mayCauseFlashOfUnstyledContent() const;
@@ -1101,35 +1116,15 @@ public:
void initDNSPrefetch();
+ ContentSecurityPolicy* contentSecurityPolicy() { return &m_contentSecurityPolicy; }
+
protected:
- Document(Frame*, const KURL& url, bool isXHTML, bool isHTML, const KURL& baseURL = KURL());
+ Document(Frame*, const KURL&, bool isXHTML, bool isHTML);
void clearXMLVersion() { m_xmlVersion = String(); }
private:
- class DocumentOrderedMap {
- public:
- void add(AtomicStringImpl*, Element*);
- void remove(AtomicStringImpl*, Element*);
- void clear();
-
- bool contains(AtomicStringImpl*) const;
- bool containsMultiple(AtomicStringImpl*) const;
- template<bool keyMatches(AtomicStringImpl*, Element*)> Element* get(AtomicStringImpl*, const Document*) const;
-
- void checkConsistency() const;
-
- private:
- typedef HashMap<AtomicStringImpl*, Element*> Map;
-
- // We maintain the invariant that m_duplicateCounts is the count of all elements with a given key
- // excluding the one referenced in m_map, if any. This means it one less than the total count
- // when the first node with a given key is cached, otherwise the same as the total count.
- mutable Map m_map;
- mutable HashCountedSet<AtomicStringImpl*> m_duplicateCounts;
- };
-
friend class IgnoreDestructiveWriteCountIncrementer;
void detachParser();
@@ -1172,6 +1167,7 @@ private:
bool m_didCalculateStyleSelector;
Frame* m_frame;
+ DocumentLoader* m_documentLoader;
OwnPtr<CachedResourceLoader> m_cachedResourceLoader;
RefPtr<DocumentParser> m_parser;
bool m_wellFormed;
@@ -1422,23 +1418,17 @@ private:
DocumentTiming m_documentTiming;
RefPtr<MediaQueryMatcher> m_mediaQueryMatcher;
+ bool m_writeRecursionIsTooDeep;
+ unsigned m_writeRecursionDepth;
#if ENABLE(REQUEST_ANIMATION_FRAME)
typedef Vector<RefPtr<RequestAnimationFrameCallback> > RequestAnimationFrameCallbackList;
OwnPtr<RequestAnimationFrameCallbackList> m_requestAnimationFrameCallbacks;
int m_nextRequestAnimationFrameCallbackId;
#endif
-};
-inline bool Document::DocumentOrderedMap::contains(AtomicStringImpl* id) const
-{
- return m_map.contains(id) || m_duplicateCounts.contains(id);
-}
-
-inline bool Document::DocumentOrderedMap::containsMultiple(AtomicStringImpl* id) const
-{
- return m_duplicateCounts.contains(id);
-}
+ ContentSecurityPolicy m_contentSecurityPolicy;
+};
inline bool Document::hasElementWithId(AtomicStringImpl* id) const
{
diff --git a/Source/WebCore/dom/DocumentMarker.h b/Source/WebCore/dom/DocumentMarker.h
index 2be60f8..76b85bb 100644
--- a/Source/WebCore/dom/DocumentMarker.h
+++ b/Source/WebCore/dom/DocumentMarker.h
@@ -37,10 +37,20 @@ struct DocumentMarker {
Spelling = 1 << 0,
Grammar = 1 << 1,
TextMatch = 1 << 2,
+ // Text has been modified by spell correction. On some platforms, this prevents the text
+ // to be autocorrected again.
Replacement = 1 << 3,
+ // Renderer needs to add underline indicating that the text has been modified by spell
+ // correction. Text with Replacement marker doesn't necessarily has CorrectionIndicator
+ // marker. For instance, after some text has been corrected, it will have both Replacement
+ // and CorrectionIndicator. However, if user further modifies such text, we would remove
+ // CorrectionIndicator marker, but retain Replacement marker.
CorrectionIndicator = 1 << 4,
+ // Correction suggestion has been offered, but got rejected by user.
RejectedCorrection = 1 << 5,
- AllMarkers = Spelling | Grammar | TextMatch | Replacement | CorrectionIndicator | RejectedCorrection
+ // On some platforms, this prevents the text to be spellchecked again.
+ SpellCheckingExemption = 1 << 6,
+ AllMarkers = Spelling | Grammar | TextMatch | Replacement | CorrectionIndicator | RejectedCorrection | SpellCheckingExemption
};
MarkerType type;
typedef unsigned MarkerTypes;
diff --git a/Source/WebCore/dom/DocumentMarkerController.cpp b/Source/WebCore/dom/DocumentMarkerController.cpp
index 5f88631..1bc7cb4 100644
--- a/Source/WebCore/dom/DocumentMarkerController.cpp
+++ b/Source/WebCore/dom/DocumentMarkerController.cpp
@@ -57,21 +57,16 @@ void DocumentMarkerController::addMarker(Range* range, DocumentMarker::MarkerTyp
}
}
-void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::MarkerType markerType)
+void DocumentMarkerController::removeMarkers(Range* range, DocumentMarker::MarkerTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyOverlappingMarker)
{
if (m_markers.isEmpty())
return;
- ExceptionCode ec = 0;
- Node* startContainer = range->startContainer(ec);
- Node* endContainer = range->endContainer(ec);
-
- Node* pastLastNode = range->pastLastNode();
- for (Node* node = range->firstNode(); node != pastLastNode; node = node->traverseNextNode()) {
- int startOffset = node == startContainer ? range->startOffset(ec) : 0;
- int endOffset = node == endContainer ? range->endOffset(ec) : INT_MAX;
- int length = endOffset - startOffset;
- removeMarkers(node, startOffset, length, markerType);
+ for (TextIterator markedText(range); !markedText.atEnd(); markedText.advance()) {
+ RefPtr<Range> textPiece = markedText.range();
+ int startOffset = textPiece->startOffset();
+ int endOffset = textPiece->endOffset();
+ removeMarkers(textPiece->startContainer(), startOffset, endOffset - startOffset, markerTypes, shouldRemovePartiallyOverlappingMarker);
}
}
@@ -185,7 +180,7 @@ void DocumentMarkerController::copyMarkers(Node* srcNode, unsigned startOffset,
dstNode->renderer()->repaint();
}
-void DocumentMarkerController::removeMarkers(Node* node, unsigned startOffset, int length, DocumentMarker::MarkerType markerType)
+void DocumentMarkerController::removeMarkers(Node* node, unsigned startOffset, int length, DocumentMarker::MarkerTypes markerTypes, RemovePartiallyOverlappingMarkerOrNot shouldRemovePartiallyOverlappingMarker)
{
if (length <= 0)
return;
@@ -207,7 +202,7 @@ void DocumentMarkerController::removeMarkers(Node* node, unsigned startOffset, i
break;
// skip marker that is wrong type or before target
- if (marker.endOffset < startOffset || (marker.type != markerType && markerType != DocumentMarker::AllMarkers)) {
+ if (marker.endOffset <= startOffset || !(marker.type & markerTypes)) {
i++;
continue;
}
@@ -219,6 +214,10 @@ void DocumentMarkerController::removeMarkers(Node* node, unsigned startOffset, i
markers.remove(i);
rects.remove(i);
+ if (shouldRemovePartiallyOverlappingMarker)
+ // Stop here. Don't add resulting slices back.
+ continue;
+
// add either of the resulting slices that are left after removing target
if (startOffset > marker.startOffset) {
DocumentMarker newLeft = marker;
@@ -321,14 +320,14 @@ Vector<IntRect> DocumentMarkerController::renderedRectsForMarkers(DocumentMarker
return result;
}
-void DocumentMarkerController::removeMarkers(Node* node, DocumentMarker::MarkerType markerType)
+void DocumentMarkerController::removeMarkers(Node* node, DocumentMarker::MarkerTypes markerTypes)
{
MarkerMap::iterator iterator = m_markers.find(node);
if (iterator != m_markers.end())
- removeMarkersFromMarkerMapVectorPair(node, iterator->second, markerType);
+ removeMarkersFromMarkerMapVectorPair(node, iterator->second, markerTypes);
}
-void DocumentMarkerController::removeMarkers(DocumentMarker::MarkerType markerType)
+void DocumentMarkerController::removeMarkers(DocumentMarker::MarkerTypes markerTypes)
{
// outer loop: process each markered node in the document
MarkerMap markerMapCopy = m_markers;
@@ -336,14 +335,14 @@ void DocumentMarkerController::removeMarkers(DocumentMarker::MarkerType markerTy
for (MarkerMap::iterator i = markerMapCopy.begin(); i != end; ++i) {
Node* node = i->first.get();
MarkerMapVectorPair* vectorPair = i->second;
- removeMarkersFromMarkerMapVectorPair(node, vectorPair, markerType);
+ removeMarkersFromMarkerMapVectorPair(node, vectorPair, markerTypes);
}
}
// This function may release node and vectorPair.
-void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node, MarkerMapVectorPair* vectorPair, DocumentMarker::MarkerType markerType)
+void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node, MarkerMapVectorPair* vectorPair, DocumentMarker::MarkerTypes markerTypes)
{
- if (markerType == DocumentMarker::AllMarkers) {
+ if (!~(markerTypes & DocumentMarker::AllMarkers)) {
delete vectorPair;
m_markers.remove(node);
if (RenderObject* renderer = node->renderer())
@@ -357,7 +356,7 @@ void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node,
DocumentMarker marker = markers[i];
// skip nodes that are not of the specified type
- if (marker.type != markerType) {
+ if (!(marker.type & markerTypes)) {
++i;
continue;
}
@@ -566,7 +565,6 @@ bool DocumentMarkerController::hasMarkers(Range* range, DocumentMarker::MarkerTy
}
return false;
}
-
#ifndef NDEBUG
void DocumentMarkerController::showMarkers() const
{
diff --git a/Source/WebCore/dom/DocumentMarkerController.h b/Source/WebCore/dom/DocumentMarkerController.h
index 2dc2b9e..21b351b 100644
--- a/Source/WebCore/dom/DocumentMarkerController.h
+++ b/Source/WebCore/dom/DocumentMarkerController.h
@@ -49,10 +49,16 @@ public:
void addMarker(Node*, DocumentMarker);
void copyMarkers(Node* srcNode, unsigned startOffset, int length, Node* dstNode, int delta, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
bool hasMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
- void removeMarkers(Range*, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
- void removeMarkers(Node*, unsigned startOffset, int length, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
- void removeMarkers(DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
- void removeMarkers(Node*, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
+
+ // When a marker partially overlaps with range, if removePartiallyOverlappingMarkers is true, we completely
+ // remove the marker. If the argument is false, we will adjust the span of the marker so that it retains
+ // the portion that is outside of the range.
+ enum RemovePartiallyOverlappingMarkerOrNot { DoNotRemovePartiallyOverlappingMarker, RemovePartiallyOverlappingMarker };
+ void removeMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers, RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
+ void removeMarkers(Node*, unsigned startOffset, int length, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers, RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
+
+ void removeMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
+ void removeMarkers(Node*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
void repaintMarkers(DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
void setRenderedRectForMarker(Node*, const DocumentMarker&, const IntRect&);
void invalidateRenderedRectsForMarkersInRect(const IntRect&);
@@ -72,7 +78,7 @@ private:
typedef std::pair<Vector<DocumentMarker>, Vector<IntRect> > MarkerMapVectorPair;
typedef HashMap<RefPtr<Node>, MarkerMapVectorPair*> MarkerMap;
MarkerMap m_markers;
- void removeMarkersFromMarkerMapVectorPair(Node*, MarkerMapVectorPair*, DocumentMarker::MarkerType);
+ void removeMarkersFromMarkerMapVectorPair(Node*, MarkerMapVectorPair*, DocumentMarker::MarkerTypes);
};
} // namespace WebCore
diff --git a/Source/WebCore/dom/DocumentOrderedMap.cpp b/Source/WebCore/dom/DocumentOrderedMap.cpp
new file mode 100644
index 0000000..787fcf4
--- /dev/null
+++ b/Source/WebCore/dom/DocumentOrderedMap.cpp
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "DocumentOrderedMap.h"
+
+#include "Element.h"
+#include "HTMLMapElement.h"
+#include "HTMLNames.h"
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+inline bool keyMatchesId(AtomicStringImpl* key, Element* element)
+{
+ return element->hasID() && element->getIdAttribute().impl() == key;
+}
+
+inline bool keyMatchesMapName(AtomicStringImpl* key, Element* element)
+{
+ return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().impl() == key;
+}
+
+inline bool keyMatchesLowercasedMapName(AtomicStringImpl* key, Element* element)
+{
+ return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().lower().impl() == key;
+}
+
+void DocumentOrderedMap::clear()
+{
+ m_map.clear();
+ m_duplicateCounts.clear();
+}
+
+void DocumentOrderedMap::add(AtomicStringImpl* key, Element* element)
+{
+ ASSERT(key);
+ ASSERT(element);
+
+ if (!m_duplicateCounts.contains(key)) {
+ // Fast path. The key is not already in m_duplicateCounts, so we assume that it's
+ // also not already in m_map and try to add it. If that add succeeds, we're done.
+ pair<Map::iterator, bool> addResult = m_map.add(key, element);
+ if (addResult.second)
+ return;
+
+ // The add failed, so this key was already cached in m_map.
+ // There are multiple elements with this key. Remove the m_map
+ // cache for this key so get searches for it next time it is called.
+ m_map.remove(addResult.first);
+ m_duplicateCounts.add(key);
+ } else {
+ // There are multiple elements with this key. Remove the m_map
+ // cache for this key so get will search for it next time it is called.
+ Map::iterator cachedItem = m_map.find(key);
+ if (cachedItem != m_map.end()) {
+ m_map.remove(cachedItem);
+ m_duplicateCounts.add(key);
+ }
+ }
+
+ m_duplicateCounts.add(key);
+}
+
+void DocumentOrderedMap::remove(AtomicStringImpl* key, Element* element)
+{
+ ASSERT(key);
+ ASSERT(element);
+
+ m_map.checkConsistency();
+ Map::iterator cachedItem = m_map.find(key);
+ if (cachedItem != m_map.end() && cachedItem->second == element)
+ m_map.remove(cachedItem);
+ else
+ m_duplicateCounts.remove(key);
+}
+
+template<bool keyMatches(AtomicStringImpl*, Element*)>
+inline Element* DocumentOrderedMap::get(AtomicStringImpl* key, const Document* document) const
+{
+ ASSERT(key);
+
+ m_map.checkConsistency();
+
+ Element* element = m_map.get(key);
+ if (element)
+ return element;
+
+ if (m_duplicateCounts.contains(key)) {
+ // We know there's at least one node that matches; iterate to find the first one.
+ for (Node* node = document->firstChild(); node; node = node->traverseNextNode()) {
+ if (!node->isElementNode())
+ continue;
+ element = static_cast<Element*>(node);
+ if (!keyMatches(key, element))
+ continue;
+ m_duplicateCounts.remove(key);
+ m_map.set(key, element);
+ return element;
+ }
+ ASSERT_NOT_REACHED();
+ }
+
+ return 0;
+}
+
+Element* DocumentOrderedMap::getElementById(AtomicStringImpl* key, const Document* document) const
+{
+ return get<keyMatchesId>(key, document);
+}
+
+Element* DocumentOrderedMap::getElementByMapName(AtomicStringImpl* key, const Document* document) const
+{
+ return get<keyMatchesMapName>(key, document);
+}
+
+Element* DocumentOrderedMap::getElementByLowercasedMapName(AtomicStringImpl* key, const Document* document) const
+{
+ return get<keyMatchesLowercasedMapName>(key, document);
+}
+
+} // namespace WebCore
+
diff --git a/Source/WebCore/dom/DocumentOrderedMap.h b/Source/WebCore/dom/DocumentOrderedMap.h
new file mode 100644
index 0000000..58767c6
--- /dev/null
+++ b/Source/WebCore/dom/DocumentOrderedMap.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DocumentOrderedMap_h
+#define DocumentOrderedMap_h
+
+#include <wtf/HashCountedSet.h>
+#include <wtf/HashMap.h>
+#include <wtf/text/AtomicStringImpl.h>
+
+namespace WebCore {
+
+class Document;
+class Element;
+
+class DocumentOrderedMap {
+public:
+ void add(AtomicStringImpl*, Element*);
+ void remove(AtomicStringImpl*, Element*);
+ void clear();
+
+ bool contains(AtomicStringImpl*) const;
+ bool containsMultiple(AtomicStringImpl*) const;
+ // concrete instantiations of the get<>() method template
+ Element* getElementById(AtomicStringImpl*, const Document*) const;
+ Element* getElementByMapName(AtomicStringImpl*, const Document*) const;
+ Element* getElementByLowercasedMapName(AtomicStringImpl*, const Document*) const;
+
+ void checkConsistency() const;
+
+private:
+ template<bool keyMatches(AtomicStringImpl*, Element*)> Element* get(AtomicStringImpl*, const Document*) const;
+
+ typedef HashMap<AtomicStringImpl*, Element*> Map;
+
+ // We maintain the invariant that m_duplicateCounts is the count of all elements with a given key
+ // excluding the one referenced in m_map, if any. This means it one less than the total count
+ // when the first node with a given key is cached, otherwise the same as the total count.
+ mutable Map m_map;
+ mutable HashCountedSet<AtomicStringImpl*> m_duplicateCounts;
+};
+
+inline bool DocumentOrderedMap::contains(AtomicStringImpl* id) const
+{
+ return m_map.contains(id) || m_duplicateCounts.contains(id);
+}
+
+inline bool DocumentOrderedMap::containsMultiple(AtomicStringImpl* id) const
+{
+ return m_duplicateCounts.contains(id);
+}
+
+} // namespace WebCore
+
+#endif // DocumentOrderedMap_h
+
diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp
index 276a409..142febd 100644
--- a/Source/WebCore/dom/Element.cpp
+++ b/Source/WebCore/dom/Element.cpp
@@ -68,6 +68,34 @@ namespace WebCore {
using namespace HTMLNames;
using namespace XMLNames;
+class StyleSelectorParentPusher {
+public:
+ StyleSelectorParentPusher(Element* parent)
+ : m_parent(parent)
+ , m_pushedStyleSelector(0)
+ {
+ }
+ void push()
+ {
+ if (m_pushedStyleSelector)
+ return;
+ m_pushedStyleSelector = m_parent->document()->styleSelector();
+ m_pushedStyleSelector->pushParent(m_parent);
+ }
+ ~StyleSelectorParentPusher()
+ {
+
+ if (!m_pushedStyleSelector)
+ return;
+ ASSERT(m_pushedStyleSelector == m_parent->document()->styleSelector());
+ m_pushedStyleSelector->popParent(m_parent);
+ }
+
+private:
+ Element* m_parent;
+ CSSStyleSelector* m_pushedStyleSelector;
+};
+
PassRefPtr<Element> Element::create(const QualifiedName& tagName, Document* document)
{
return adoptRef(new Element(tagName, document, CreateElement));
@@ -124,7 +152,7 @@ PassRefPtr<DocumentFragment> Element::deprecatedCreateContextualFragment(const S
for (RefPtr<Node> node = fragment->firstChild(); node; node = nextNode) {
nextNode = node->nextSibling();
if (node->hasTagName(htmlTag) || node->hasTagName(bodyTag)) {
- HTMLElement* element = static_cast<HTMLElement*>(node.get());
+ HTMLElement* element = toHTMLElement(node.get());
Node* firstChild = element->firstChild();
if (firstChild)
nextNode = firstChild;
@@ -917,9 +945,15 @@ void Element::attach()
RenderWidget::suspendWidgetHierarchyUpdates();
createRendererIfNeeded();
+
+ StyleSelectorParentPusher parentPusher(this);
+ if (firstChild())
+ parentPusher.push();
ContainerNode::attach();
- if (Node* shadow = shadowRoot())
+ if (Node* shadow = shadowRoot()) {
+ parentPusher.push();
shadow->attach();
+ }
if (hasRareData()) {
ElementRareData* data = rareData();
if (data->needsFocusAppearanceUpdateSoonAfterAttach()) {
@@ -1075,7 +1109,7 @@ void Element::recalcStyle(StyleChange change)
change = ch;
}
}
-
+ StyleSelectorParentPusher parentPusher(this);
// FIXME: This check is good enough for :hover + foo, but it is not good enough for :hover + foo + bar.
// For now we will just worry about the common case, since it's a lot trickier to get the second case right
// without doing way too much re-resolution.
@@ -1084,15 +1118,19 @@ void Element::recalcStyle(StyleChange change)
bool childRulesChanged = n->needsStyleRecalc() && n->styleChangeType() == FullStyleChange;
if (forceCheckOfNextElementSibling && n->isElementNode())
n->setNeedsStyleRecalc();
- if (change >= Inherit || n->isTextNode() || n->childNeedsStyleRecalc() || n->needsStyleRecalc())
+ if (change >= Inherit || n->isTextNode() || n->childNeedsStyleRecalc() || n->needsStyleRecalc()) {
+ parentPusher.push();
n->recalcStyle(change);
+ }
if (n->isElementNode())
forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules;
}
// FIXME: This does not care about sibling combinators. Will be necessary in XBL2 world.
if (Node* shadow = shadowRoot()) {
- if (change >= Inherit || shadow->isTextNode() || shadow->childNeedsStyleRecalc() || shadow->needsStyleRecalc())
+ if (change >= Inherit || shadow->isTextNode() || shadow->childNeedsStyleRecalc() || shadow->needsStyleRecalc()) {
+ parentPusher.push();
shadow->recalcStyle(change);
+ }
}
clearNeedsStyleRecalc();
@@ -1238,12 +1276,22 @@ void Element::childrenChanged(bool changedByParser, Node* beforeChange, Node* af
if (!changedByParser)
checkForSiblingStyleChanges(this, renderStyle(), false, beforeChange, afterChange, childCountDelta);
}
+
+void Element::beginParsingChildren()
+{
+ clearIsParsingChildrenFinished();
+ CSSStyleSelector* styleSelector = document()->styleSelectorIfExists();
+ if (styleSelector && attached())
+ styleSelector->pushParent(this);
+}
void Element::finishParsingChildren()
{
ContainerNode::finishParsingChildren();
setIsParsingChildrenFinished();
checkForSiblingStyleChanges(this, renderStyle(), true, lastChild(), 0, 0);
+ if (CSSStyleSelector* styleSelector = document()->styleSelectorIfExists())
+ styleSelector->popParent(this);
}
void Element::dispatchAttrRemovalEvent(Attribute*)
@@ -1632,10 +1680,7 @@ void Element::normalizeAttributes()
// ElementTraversal API
Element* Element::firstElementChild() const
{
- Node* n = firstChild();
- while (n && !n->isElementNode())
- n = n->nextSibling();
- return static_cast<Element*>(n);
+ return WebCore::firstElementChild(this);
}
Element* Element::lastElementChild() const
diff --git a/Source/WebCore/dom/Element.h b/Source/WebCore/dom/Element.h
index 4510478..a85f8cd 100644
--- a/Source/WebCore/dom/Element.h
+++ b/Source/WebCore/dom/Element.h
@@ -232,7 +232,7 @@ public:
Node* shadowRoot();
void setShadowRoot(PassRefPtr<Node>);
- virtual AtomicString shadowPseudoId() const;
+ virtual const AtomicString& shadowPseudoId() const;
RenderStyle* computedStyle(PseudoId = NOPSEUDO);
@@ -276,7 +276,7 @@ public:
bool isFinishedParsingChildren() const { return isParsingChildrenFinished(); }
virtual void finishParsingChildren();
- virtual void beginParsingChildren() { clearIsParsingChildrenFinished(); }
+ virtual void beginParsingChildren();
// ElementTraversal API
Element* firstElementChild() const;
@@ -510,9 +510,18 @@ inline void Element::setIdAttribute(const AtomicString& value)
setAttribute(document()->idAttributeName(), value);
}
-inline AtomicString Element::shadowPseudoId() const
+inline const AtomicString& Element::shadowPseudoId() const
{
- return AtomicString();
+ return nullAtom;
+}
+
+inline Element* firstElementChild(const ContainerNode* container)
+{
+ ASSERT_ARG(container, container);
+ Node* child = container->firstChild();
+ while (child && !child->isElementNode())
+ child = child->nextSibling();
+ return static_cast<Element*>(child);
}
} // namespace
diff --git a/Source/WebCore/dom/Event.cpp b/Source/WebCore/dom/Event.cpp
index 0e11c69..bdc1c58 100644
--- a/Source/WebCore/dom/Event.cpp
+++ b/Source/WebCore/dom/Event.cpp
@@ -193,6 +193,16 @@ bool Event::isStorageEvent() const
#endif
#if ENABLE(INDEXED_DATABASE)
+bool Event::isIDBAbortEvent() const
+{
+ return false;
+}
+
+bool Event::isIDBCompleteEvent() const
+{
+ return false;
+}
+
bool Event::isIDBErrorEvent() const
{
return false;
diff --git a/Source/WebCore/dom/Event.h b/Source/WebCore/dom/Event.h
index 45b879d..81f9e6b 100644
--- a/Source/WebCore/dom/Event.h
+++ b/Source/WebCore/dom/Event.h
@@ -126,6 +126,8 @@ namespace WebCore {
virtual bool isStorageEvent() const;
#endif
#if ENABLE(INDEXED_DATABASE)
+ virtual bool isIDBAbortEvent() const;
+ virtual bool isIDBCompleteEvent() const;
virtual bool isIDBErrorEvent() const;
virtual bool isIDBSuccessEvent() const;
#endif
diff --git a/Source/WebCore/dom/EventQueue.cpp b/Source/WebCore/dom/EventQueue.cpp
index a43929e..5a1abe8 100644
--- a/Source/WebCore/dom/EventQueue.cpp
+++ b/Source/WebCore/dom/EventQueue.cpp
@@ -28,24 +28,41 @@
#include "EventQueue.h"
#include "DOMWindow.h"
-#include "Document.h"
#include "Event.h"
#include "EventNames.h"
+#include "ScriptExecutionContext.h"
+#include "SuspendableTimer.h"
namespace WebCore {
-EventQueue::EventQueue()
- : m_pendingEventTimer(this, &EventQueue::pendingEventTimerFired)
+class EventQueueTimer : public SuspendableTimer {
+ WTF_MAKE_NONCOPYABLE(EventQueueTimer);
+public:
+ EventQueueTimer(EventQueue* eventQueue, ScriptExecutionContext* context)
+ : SuspendableTimer(context)
+ , m_eventQueue(eventQueue) { }
+
+private:
+ virtual void fired() { m_eventQueue->pendingEventTimerFired(); }
+ EventQueue* m_eventQueue;
+};
+
+EventQueue::EventQueue(ScriptExecutionContext* context)
+ : m_pendingEventTimer(adoptPtr(new EventQueueTimer(this, context)))
+{
+}
+
+EventQueue::~EventQueue()
{
}
void EventQueue::enqueueEvent(PassRefPtr<Event> event)
{
- ASSERT(event->target()->toNode() || event->target()->toDOMWindow());
+ ASSERT(event->target());
m_queuedEvents.append(event);
- if (!m_pendingEventTimer.isActive())
- m_pendingEventTimer.startOneShot(0);
+ if (!m_pendingEventTimer->isActive())
+ m_pendingEventTimer->startOneShot(0);
}
void EventQueue::enqueueScrollEvent(PassRefPtr<Node> target, ScrollEventTargetType targetType)
@@ -60,9 +77,9 @@ void EventQueue::enqueueScrollEvent(PassRefPtr<Node> target, ScrollEventTargetTy
enqueueEvent(scrollEvent.release());
}
-void EventQueue::pendingEventTimerFired(Timer<EventQueue>*)
+void EventQueue::pendingEventTimerFired()
{
- ASSERT(!m_pendingEventTimer.isActive());
+ ASSERT(!m_pendingEventTimer->isActive());
Vector<RefPtr<Event> > queuedEvents;
queuedEvents.swap(m_queuedEvents);
@@ -81,7 +98,7 @@ void EventQueue::dispatchEvent(PassRefPtr<Event> event)
else if (eventTarget->toDOMWindow())
eventTarget->toDOMWindow()->dispatchEvent(event, 0);
else
- ASSERT_NOT_REACHED();
+ eventTarget->dispatchEvent(event);
}
}
diff --git a/Source/WebCore/dom/EventQueue.h b/Source/WebCore/dom/EventQueue.h
index 7f8d5fb..a589ed8 100644
--- a/Source/WebCore/dom/EventQueue.h
+++ b/Source/WebCore/dom/EventQueue.h
@@ -27,38 +27,51 @@
#ifndef EventQueue_h
#define EventQueue_h
-#include "Timer.h"
#include <wtf/HashSet.h>
#include <wtf/Noncopyable.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class Event;
+class EventQueueTimer;
class Node;
+class ScriptExecutionContext;
class EventQueue {
WTF_MAKE_NONCOPYABLE(EventQueue);
+
public:
enum ScrollEventTargetType {
ScrollEventDocumentTarget,
ScrollEventElementTarget
};
- EventQueue();
+ static PassOwnPtr<EventQueue> create(ScriptExecutionContext* context)
+ {
+ return adoptPtr(new EventQueue(context));
+ }
+
+ ~EventQueue();
void enqueueEvent(PassRefPtr<Event>);
void enqueueScrollEvent(PassRefPtr<Node>, ScrollEventTargetType);
private:
- void pendingEventTimerFired(Timer<EventQueue>*);
+ explicit EventQueue(ScriptExecutionContext*);
+
+ void pendingEventTimerFired();
void dispatchEvent(PassRefPtr<Event>);
- Timer<EventQueue> m_pendingEventTimer;
+ OwnPtr<EventQueueTimer> m_pendingEventTimer;
Vector<RefPtr<Event> > m_queuedEvents;
HashSet<Node*> m_nodesWithQueuedScrollEvents;
+
+ friend class EventQueueTimer;
};
}
diff --git a/Source/WebCore/dom/EventTarget.cpp b/Source/WebCore/dom/EventTarget.cpp
index 5f2f8a7..ed5995c 100644
--- a/Source/WebCore/dom/EventTarget.cpp
+++ b/Source/WebCore/dom/EventTarget.cpp
@@ -181,6 +181,10 @@ FileWriter* EventTarget::toFileWriter()
#endif
#if ENABLE(INDEXED_DATABASE)
+IDBDatabase* EventTarget::toIDBDatabase()
+{
+ return 0;
+}
IDBRequest* EventTarget::toIDBRequest()
{
return 0;
diff --git a/Source/WebCore/dom/EventTarget.h b/Source/WebCore/dom/EventTarget.h
index 81eeb7f..a03801b 100644
--- a/Source/WebCore/dom/EventTarget.h
+++ b/Source/WebCore/dom/EventTarget.h
@@ -49,6 +49,7 @@ namespace WebCore {
class EventSource;
class FileReader;
class FileWriter;
+ class IDBDatabase;
class IDBRequest;
class IDBTransaction;
class JavaScriptAudioNode;
@@ -138,6 +139,7 @@ namespace WebCore {
#endif
#if ENABLE(INDEXED_DATABASE)
+ virtual IDBDatabase* toIDBDatabase();
virtual IDBRequest* toIDBRequest();
virtual IDBTransaction* toIDBTransaction();
#endif
diff --git a/Source/WebCore/dom/InputElement.h b/Source/WebCore/dom/InputElement.h
index 2d5606d..02ac5cf 100644
--- a/Source/WebCore/dom/InputElement.h
+++ b/Source/WebCore/dom/InputElement.h
@@ -59,6 +59,8 @@ public:
virtual String value() const = 0;
virtual void setValue(const String&, bool sendChangeEvent = false) = 0;
virtual void setValueForUser(const String&) = 0;
+ // The value which is drawn by a renderer.
+ virtual String visibleValue() const = 0;
// Returns true if the specified string can be set as the value of InputElement.
virtual bool isAcceptableValue(const String&) const = 0;
diff --git a/Source/WebCore/dom/NamedNodeMap.cpp b/Source/WebCore/dom/NamedNodeMap.cpp
index 0e2861e..2861226 100644
--- a/Source/WebCore/dom/NamedNodeMap.cpp
+++ b/Source/WebCore/dom/NamedNodeMap.cpp
@@ -357,7 +357,7 @@ bool NamedNodeMap::mappedMapsEquivalent(const NamedNodeMap* otherMap) const
ASSERT(attr->isMappedAttribute());
Attribute* otherAttr = otherMap->getAttributeItem(attr->name());
- if (!otherAttr || attr->value() != otherAttr->value())
+ if (!otherAttr || !otherAttr->decl() || attr->value() != otherAttr->value())
return false;
if (!attr->decl()->propertiesEqual(otherAttr->decl()))
return false;
diff --git a/Source/WebCore/dom/Node.cpp b/Source/WebCore/dom/Node.cpp
index 275e370..72592ae 100644
--- a/Source/WebCore/dom/Node.cpp
+++ b/Source/WebCore/dom/Node.cpp
@@ -1641,7 +1641,7 @@ PassRefPtr<Element> Node::querySelector(const String& selectors, ExceptionCode&
// FIXME: we could also optimize for the the [id="foo"] case
if (strictParsing && inDocument() && querySelectorList.hasOneSelector() && querySelectorList.first()->m_match == CSSSelector::Id) {
- Element* element = document()->getElementById(querySelectorList.first()->m_value);
+ Element* element = document()->getElementById(querySelectorList.first()->value());
if (element && (isDocumentNode() || element->isDescendantOf(this)) && selectorChecker.checkSelector(querySelectorList.first(), element))
return element;
return 0;
@@ -2913,6 +2913,18 @@ void Node::dispatchSimulatedClick(PassRefPtr<Event> event, bool sendMouseEvents,
gNodesDispatchingSimulatedClicks->remove(this);
}
+// FIXME: Once https://bugs.webkit.org/show_bug.cgi?id=52963 lands, this should
+// be greatly improved. See https://bugs.webkit.org/show_bug.cgi?id=54025.
+static Node* pullOutOfShadow(Node* node)
+{
+ Node* outermostShadowBoundary = node;
+ for (Node* n = node; n; n = n->parentOrHostNode()) {
+ if (n->isShadowRoot())
+ outermostShadowBoundary = n->parentOrHostNode();
+ }
+ return outermostShadowBoundary;
+}
+
bool Node::dispatchMouseEvent(const AtomicString& eventType, int button, int detail,
int pageX, int pageY, int screenX, int screenY,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
@@ -2935,7 +2947,7 @@ bool Node::dispatchMouseEvent(const AtomicString& eventType, int button, int det
bool swallowEvent = false;
// Attempting to dispatch with a non-EventTarget relatedTarget causes the relatedTarget to be silently ignored.
- RefPtr<Node> relatedTarget = relatedTargetArg;
+ RefPtr<Node> relatedTarget = pullOutOfShadow(relatedTargetArg);
int adjustedPageX = pageX;
int adjustedPageY = pageY;
diff --git a/Source/WebCore/dom/Position.cpp b/Source/WebCore/dom/Position.cpp
index 6749ca9..cbad302 100644
--- a/Source/WebCore/dom/Position.cpp
+++ b/Source/WebCore/dom/Position.cpp
@@ -27,7 +27,6 @@
#include "Position.h"
#include "CSSComputedStyleDeclaration.h"
-#include "CharacterNames.h"
#include "Logging.h"
#include "PositionIterator.h"
#include "RenderBlock.h"
@@ -38,6 +37,7 @@
#include "visible_units.h"
#include <stdio.h>
#include <wtf/text/CString.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/dom/ProcessingInstruction.cpp b/Source/WebCore/dom/ProcessingInstruction.cpp
index e7dea48..ed329bc 100644
--- a/Source/WebCore/dom/ProcessingInstruction.cpp
+++ b/Source/WebCore/dom/ProcessingInstruction.cpp
@@ -168,7 +168,7 @@ void ProcessingInstruction::checkStyleSheet()
{
String charset = attrs.get("charset");
if (charset.isEmpty())
- charset = document()->frame()->loader()->writer()->encoding();
+ charset = document()->charset();
m_cachedSheet = document()->cachedResourceLoader()->requestCSSStyleSheet(url, charset);
}
diff --git a/Source/WebCore/dom/Range.cpp b/Source/WebCore/dom/Range.cpp
index a41fc49..e224843 100644
--- a/Source/WebCore/dom/Range.cpp
+++ b/Source/WebCore/dom/Range.cpp
@@ -594,6 +594,21 @@ bool Range::intersectsNode(Node* refNode, ExceptionCode& ec)
return true; // all other cases
}
+static inline Node* highestAncestorUnderCommonRoot(Node* node, Node* commonRoot)
+{
+ if (node == commonRoot)
+ return 0;
+
+ ASSERT(commonRoot->contains(node));
+
+ while (node->parentNode() != commonRoot)
+ node = node->parentNode();
+
+ return node;
+}
+
+static inline unsigned lengthOfContentsInNode() { return numeric_limits<unsigned>::max(); }
+
PassRefPtr<DocumentFragment> Range::processContents(ActionType action, ExceptionCode& ec)
{
typedef Vector<RefPtr<Node> > NodeVector;
@@ -601,7 +616,7 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception
RefPtr<DocumentFragment> fragment;
if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS)
fragment = DocumentFragment::create(m_ownerDocument.get());
-
+
ec = 0;
if (collapsed(ec))
return fragment.release();
@@ -613,68 +628,16 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception
return 0;
ASSERT(commonRoot);
- // what is the highest node that partially selects the start of the range?
- Node* partialStart = 0;
- if (m_start.container() != commonRoot) {
- partialStart = m_start.container();
- while (partialStart->parentNode() != commonRoot)
- partialStart = partialStart->parentNode();
- }
-
- // what is the highest node that partially selects the end of the range?
- Node* partialEnd = 0;
- if (m_end.container() != commonRoot) {
- partialEnd = m_end.container();
- while (partialEnd->parentNode() != commonRoot)
- partialEnd = partialEnd->parentNode();
- }
-
- // Simple case: the start and end containers are the same. We just grab
- // everything >= start offset and < end offset
if (m_start.container() == m_end.container()) {
- Node::NodeType startNodeType = m_start.container()->nodeType();
- if (startNodeType == Node::TEXT_NODE || startNodeType == Node::CDATA_SECTION_NODE || startNodeType == Node::COMMENT_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<CharacterData> c = static_pointer_cast<CharacterData>(m_start.container()->cloneNode(true));
- c->deleteData(m_end.offset(), c->length() - m_end.offset(), ec);
- c->deleteData(0, m_start.offset(), ec);
- fragment->appendChild(c.release(), ec);
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS)
- static_cast<CharacterData*>(m_start.container())->deleteData(m_start.offset(), m_end.offset() - m_start.offset(), ec);
- } else if (startNodeType == Node::PROCESSING_INSTRUCTION_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<ProcessingInstruction> c = static_pointer_cast<ProcessingInstruction>(m_start.container()->cloneNode(true));
- c->setData(c->data().substring(m_start.offset(), m_end.offset() - m_start.offset()), ec);
- fragment->appendChild(c.release(), ec);
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS) {
- ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(m_start.container());
- String data(pi->data());
- data.remove(m_start.offset(), m_end.offset() - m_start.offset());
- pi->setData(data, ec);
- }
- } else {
- RefPtr<Node> n = m_start.container()->firstChild();
- int i;
- for (i = 0; n && i < m_start.offset(); i++) // skip until start offset
- n = n->nextSibling();
- int endOffset = m_end.offset();
- RefPtr<Node> next;
- for (; n && i < endOffset; n = next, i++) { // delete until end offset
- next = n->nextSibling();
- if (action == EXTRACT_CONTENTS)
- fragment->appendChild(n, ec); // will remove n from its parent
- else if (action == CLONE_CONTENTS)
- fragment->appendChild(n->cloneNode(true), ec);
- else
- toContainerNode(m_start.container())->removeChild(n.get(), ec);
- }
- }
- return fragment.release();
+ processContentsBetweenOffsets(action, fragment, m_start.container(), m_start.offset(), m_end.offset(), ec);
+ return fragment;
}
- // Complex case: Start and end containers are different.
+ // what is the highest node that partially selects the start / end of the range?
+ Node* partialStart = highestAncestorUnderCommonRoot(m_start.container(), commonRoot);
+ Node* partialEnd = highestAncestorUnderCommonRoot(m_end.container(), commonRoot);
+
+ // Start and end containers are different.
// There are three possibilities here:
// 1. Start container == commonRoot (End container must be a descendant)
// 2. End container == commonRoot (Start container must be a descendant)
@@ -693,49 +656,7 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception
RefPtr<Node> leftContents;
if (m_start.container() != commonRoot) {
- // process the left-hand side of the range, up until the last ancestor of
- // start container before commonRoot
- Node::NodeType startNodeType = m_start.container()->nodeType();
- if (startNodeType == Node::TEXT_NODE || startNodeType == Node::CDATA_SECTION_NODE || startNodeType == Node::COMMENT_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<CharacterData> c = static_pointer_cast<CharacterData>(m_start.container()->cloneNode(true));
- c->deleteData(0, m_start.offset(), ec);
- leftContents = c.release();
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS)
- static_cast<CharacterData*>(m_start.container())->deleteData(
- m_start.offset(), static_cast<CharacterData*>(m_start.container())->length() - m_start.offset(), ec);
- } else if (startNodeType == Node::PROCESSING_INSTRUCTION_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<ProcessingInstruction> c = static_pointer_cast<ProcessingInstruction>(m_start.container()->cloneNode(true));
- c->setData(c->data().substring(m_start.offset()), ec);
- leftContents = c.release();
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS) {
- ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(m_start.container());
- String data(pi->data());
- pi->setData(data.left(m_start.offset()), ec);
- }
- } else {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS)
- leftContents = m_start.container()->cloneNode(false);
- NodeVector nodes;
- Node* n = m_start.container()->firstChild();
- for (int i = 0; n; n = n->nextSibling(), i++) {
- if (i < m_start.offset())
- continue; // Skip until start offset.
- nodes.append(n);
- }
- for (NodeVector::const_iterator it = nodes.begin(); it != nodes.end(); it++) {
- Node* n = it->get();
- if (action == EXTRACT_CONTENTS)
- leftContents->appendChild(n, ec); // Will remove n from start container.
- else if (action == CLONE_CONTENTS)
- leftContents->appendChild(n->cloneNode(true), ec);
- else
- toContainerNode(m_start.container())->removeChild(n, ec);
- }
- }
+ leftContents = processContentsBetweenOffsets(action, 0, m_start.container(), m_start.offset(), lengthOfContentsInNode(), ec);
NodeVector ancestorNodes;
for (ContainerNode* n = m_start.container()->parentNode(); n && n != commonRoot; n = n->parentNode())
@@ -767,46 +688,7 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception
RefPtr<Node> rightContents;
if (m_end.container() != commonRoot) {
- // delete the right-hand side of the range, up until the last ancestor of
- // end container before commonRoot
- Node::NodeType endNodeType = m_end.container()->nodeType();
- if (endNodeType == Node::TEXT_NODE || endNodeType == Node::CDATA_SECTION_NODE || endNodeType == Node::COMMENT_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<CharacterData> c = static_pointer_cast<CharacterData>(m_end.container()->cloneNode(true));
- c->deleteData(m_end.offset(), static_cast<CharacterData*>(m_end.container())->length() - m_end.offset(), ec);
- rightContents = c;
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS)
- static_cast<CharacterData*>(m_end.container())->deleteData(0, m_end.offset(), ec);
- } else if (endNodeType == Node::PROCESSING_INSTRUCTION_NODE) {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
- RefPtr<ProcessingInstruction> c = static_pointer_cast<ProcessingInstruction>(m_end.container()->cloneNode(true));
- c->setData(c->data().left(m_end.offset()), ec);
- rightContents = c.release();
- }
- if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS) {
- ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(m_end.container());
- pi->setData(pi->data().substring(m_end.offset()), ec);
- }
- } else {
- if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS)
- rightContents = m_end.container()->cloneNode(false);
- Node* n = m_end.container()->firstChild();
- if (n && m_end.offset()) {
- NodeVector nodes;
- for (int i = 0; i < m_end.offset() && n; i++, n = n->nextSibling())
- nodes.append(n);
- for (int i = nodes.size() - 1; i >= 0; i--) {
- n = nodes[i].get();
- if (action == EXTRACT_CONTENTS)
- rightContents->insertBefore(n, rightContents->firstChild(), ec); // will remove n from its parent
- else if (action == CLONE_CONTENTS)
- rightContents->insertBefore(n->cloneNode(true), rightContents->firstChild(), ec);
- else
- toContainerNode(m_end.container())->removeChild(n, ec);
- }
- }
- }
+ rightContents = processContentsBetweenOffsets(action, 0, m_end.container(), 0, m_end.offset(), ec);
ContainerNode* rightParent = m_end.container()->parentNode();
Node* n = m_end.container()->previousSibling();
@@ -892,6 +774,98 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception
return fragment.release();
}
+PassRefPtr<Node> Range::processContentsBetweenOffsets(ActionType action, PassRefPtr<DocumentFragment> fragment,
+ Node* container, unsigned startOffset, unsigned endOffset, ExceptionCode& ec)
+{
+ ASSERT(container);
+ ASSERT(startOffset <= endOffset);
+
+ RefPtr<Node> result;
+ switch (container->nodeType()) {
+ case Node::TEXT_NODE:
+ case Node::CDATA_SECTION_NODE:
+ case Node::COMMENT_NODE:
+ ASSERT(endOffset <= static_cast<CharacterData*>(container)->length() || endOffset == lengthOfContentsInNode());
+ if (endOffset == lengthOfContentsInNode())
+ endOffset = static_cast<CharacterData*>(container)->length();
+ if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
+ RefPtr<CharacterData> c = static_pointer_cast<CharacterData>(container->cloneNode(true));
+ if (c->length() - endOffset)
+ c->deleteData(endOffset, c->length() - endOffset, ec);
+ if (startOffset)
+ c->deleteData(0, startOffset, ec);
+ if (fragment) {
+ result = fragment;
+ result->appendChild(c.release(), ec);
+ } else
+ result = c.release();
+ }
+ if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS)
+ static_cast<CharacterData*>(container)->deleteData(startOffset, endOffset - startOffset, ec);
+ break;
+ case Node::PROCESSING_INSTRUCTION_NODE:
+ ASSERT(endOffset <= static_cast<ProcessingInstruction*>(container)->data().length() || endOffset == lengthOfContentsInNode());
+ if (endOffset == lengthOfContentsInNode())
+ endOffset = static_cast<ProcessingInstruction*>(container)->data().length();
+ if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
+ RefPtr<ProcessingInstruction> c = static_pointer_cast<ProcessingInstruction>(container->cloneNode(true));
+ c->setData(c->data().substring(startOffset, endOffset - startOffset), ec);
+ if (fragment) {
+ result = fragment;
+ result->appendChild(c.release(), ec);
+ } else
+ result = c.release();
+ }
+ if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS) {
+ ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(container);
+ String data(pi->data());
+ data.remove(startOffset, endOffset - startOffset);
+ pi->setData(data, ec);
+ }
+ break;
+ case Node::ELEMENT_NODE:
+ case Node::ATTRIBUTE_NODE:
+ case Node::ENTITY_REFERENCE_NODE:
+ case Node::ENTITY_NODE:
+ case Node::DOCUMENT_NODE:
+ case Node::DOCUMENT_TYPE_NODE:
+ case Node::DOCUMENT_FRAGMENT_NODE:
+ case Node::NOTATION_NODE:
+ case Node::XPATH_NAMESPACE_NODE:
+ // FIXME: Should we assert that some nodes never appear here?
+ if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
+ if (fragment)
+ result = fragment;
+ else
+ result = container->cloneNode(false);
+ }
+
+ Node* n = container->firstChild();
+ Vector<RefPtr<Node> > nodes;
+ for (unsigned i = startOffset; n && i; i--)
+ n = n->nextSibling();
+ for (unsigned i = startOffset; n && i < endOffset; i++, n = n->nextSibling())
+ nodes.append(n);
+
+ for (unsigned i = 0; i < nodes.size(); i++) {
+ switch (action) {
+ case DELETE_CONTENTS:
+ container->removeChild(nodes[i].get(), ec);
+ break;
+ case EXTRACT_CONTENTS:
+ result->appendChild(nodes[i].release(), ec); // will remove n from its parent
+ break;
+ case CLONE_CONTENTS:
+ result->appendChild(nodes[i]->cloneNode(true), ec);
+ break;
+ }
+ }
+ break;
+ }
+
+ return result;
+}
+
PassRefPtr<DocumentFragment> Range::extractContents(ExceptionCode& ec)
{
checkDeleteExtract(ec);
@@ -1079,7 +1053,7 @@ PassRefPtr<DocumentFragment> Range::createContextualFragment(const String& marku
// Logic from deprecatedCreateContextualFragment should just be moved into
// this function. Range::createContextualFragment semantics do not make
// sense for the rest of the DOM implementation to use.
- RefPtr<DocumentFragment> fragment = static_cast<HTMLElement*>(element)->deprecatedCreateContextualFragment(markup);
+ RefPtr<DocumentFragment> fragment = toHTMLElement(element)->deprecatedCreateContextualFragment(markup);
if (!fragment) {
ec = NOT_SUPPORTED_ERR;
return 0;
diff --git a/Source/WebCore/dom/Range.h b/Source/WebCore/dom/Range.h
index aea76e1..86c1354 100644
--- a/Source/WebCore/dom/Range.h
+++ b/Source/WebCore/dom/Range.h
@@ -147,6 +147,7 @@ private:
enum ActionType { DELETE_CONTENTS, EXTRACT_CONTENTS, CLONE_CONTENTS };
PassRefPtr<DocumentFragment> processContents(ActionType, ExceptionCode&);
+ PassRefPtr<Node> processContentsBetweenOffsets(ActionType, PassRefPtr<DocumentFragment>, Node*, unsigned startOffset, unsigned endOffset, ExceptionCode&);
RefPtr<Document> m_ownerDocument;
RangeBoundaryPoint m_start;
diff --git a/Source/WebCore/dom/RequestAnimationFrameCallback.h b/Source/WebCore/dom/RequestAnimationFrameCallback.h
index 819e495..3edeb9e 100644
--- a/Source/WebCore/dom/RequestAnimationFrameCallback.h
+++ b/Source/WebCore/dom/RequestAnimationFrameCallback.h
@@ -40,7 +40,7 @@ namespace WebCore {
class RequestAnimationFrameCallback : public RefCounted<RequestAnimationFrameCallback> {
public:
virtual ~RequestAnimationFrameCallback() { }
- virtual bool handleEvent() = 0;
+ virtual bool handleEvent(DOMTimeStamp) = 0;
RefPtr<Element> m_element;
int m_id;
diff --git a/Source/WebCore/dom/RequestAnimationFrameCallback.idl b/Source/WebCore/dom/RequestAnimationFrameCallback.idl
index 8d232e5..1905193 100644
--- a/Source/WebCore/dom/RequestAnimationFrameCallback.idl
+++ b/Source/WebCore/dom/RequestAnimationFrameCallback.idl
@@ -32,6 +32,6 @@ module core {
interface [
Callback=FunctionOnly,Conditional=REQUEST_ANIMATION_FRAME
] RequestAnimationFrameCallback{
- boolean handleEvent();
+ boolean handleEvent(in DOMTimeStamp time);
};
}
diff --git a/Source/WebCore/dom/ScriptElement.cpp b/Source/WebCore/dom/ScriptElement.cpp
index 747f7a1..1939a08 100644
--- a/Source/WebCore/dom/ScriptElement.cpp
+++ b/Source/WebCore/dom/ScriptElement.cpp
@@ -292,10 +292,8 @@ String ScriptElement::scriptCharset() const
String charset = charsetAttributeValue().stripWhiteSpace();
// If charset has not been declared in script tag, fall back to frame encoding.
- if (charset.isEmpty()) {
- if (Frame* frame = m_element->document()->frame())
- charset = frame->loader()->writer()->encoding();
- }
+ if (charset.isEmpty())
+ charset = m_element->document()->charset();
return charset;
}
diff --git a/Source/WebCore/dom/ScriptExecutionContext.cpp b/Source/WebCore/dom/ScriptExecutionContext.cpp
index 9fdf85e..19267c6 100644
--- a/Source/WebCore/dom/ScriptExecutionContext.cpp
+++ b/Source/WebCore/dom/ScriptExecutionContext.cpp
@@ -30,6 +30,7 @@
#include "ActiveDOMObject.h"
#include "Blob.h"
#include "BlobURL.h"
+#include "DOMURL.h"
#include "Database.h"
#include "DatabaseTask.h"
#include "DatabaseThread.h"
@@ -83,7 +84,9 @@ public:
};
ScriptExecutionContext::ScriptExecutionContext()
- : m_inDispatchErrorEvent(false)
+ : m_iteratingActiveDOMObjects(false)
+ , m_inDestructor(false)
+ , m_inDispatchErrorEvent(false)
#if ENABLE(DATABASE)
, m_hasOpenDatabases(false)
#endif
@@ -92,10 +95,12 @@ ScriptExecutionContext::ScriptExecutionContext()
ScriptExecutionContext::~ScriptExecutionContext()
{
- HashMap<ActiveDOMObject*, void*>::iterator activeObjectsEnd = m_activeDOMObjects.end();
- for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) {
- ASSERT(iter->first->scriptExecutionContext() == this);
- iter->first->contextDestroyed();
+ m_inDestructor = true;
+ for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != m_activeDOMObjects.end(); iter = m_activeDOMObjects.begin()) {
+ ActiveDOMObject* object = iter->first;
+ m_activeDOMObjects.remove(iter);
+ ASSERT(object->scriptExecutionContext() == this);
+ object->contextDestroyed();
}
HashSet<MessagePort*>::iterator messagePortsEnd = m_messagePorts.end();
@@ -120,6 +125,12 @@ ScriptExecutionContext::~ScriptExecutionContext()
HashSet<String>::iterator publicBlobURLsEnd = m_publicBlobURLs.end();
for (HashSet<String>::iterator iter = m_publicBlobURLs.begin(); iter != publicBlobURLsEnd; ++iter)
ThreadableBlobRegistry::unregisterBlobURL(KURL(ParsedURLString, *iter));
+
+ HashSet<DOMURL*>::iterator domUrlsEnd = m_domUrls.end();
+ for (HashSet<DOMURL*>::iterator iter = m_domUrls.begin(); iter != domUrlsEnd; ++iter) {
+ ASSERT((*iter)->scriptExecutionContext() == this);
+ (*iter)->contextDestroyed();
+ }
#endif
}
@@ -194,46 +205,70 @@ void ScriptExecutionContext::destroyedMessagePort(MessagePort* port)
m_messagePorts.remove(port);
}
+#if ENABLE(BLOB)
+void ScriptExecutionContext::createdDomUrl(DOMURL* url)
+{
+ ASSERT(url);
+ m_domUrls.add(url);
+}
+
+void ScriptExecutionContext::destroyedDomUrl(DOMURL* url)
+{
+ ASSERT(url);
+ m_domUrls.remove(url);
+}
+#endif
+
bool ScriptExecutionContext::canSuspendActiveDOMObjects()
{
// No protection against m_activeDOMObjects changing during iteration: canSuspend() shouldn't execute arbitrary JS.
+ m_iteratingActiveDOMObjects = true;
HashMap<ActiveDOMObject*, void*>::iterator activeObjectsEnd = m_activeDOMObjects.end();
for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) {
ASSERT(iter->first->scriptExecutionContext() == this);
- if (!iter->first->canSuspend())
+ if (!iter->first->canSuspend()) {
+ m_iteratingActiveDOMObjects = false;
return false;
- }
+ }
+ }
+ m_iteratingActiveDOMObjects = false;
return true;
}
void ScriptExecutionContext::suspendActiveDOMObjects(ActiveDOMObject::ReasonForSuspension why)
{
// No protection against m_activeDOMObjects changing during iteration: suspend() shouldn't execute arbitrary JS.
+ m_iteratingActiveDOMObjects = true;
HashMap<ActiveDOMObject*, void*>::iterator activeObjectsEnd = m_activeDOMObjects.end();
for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) {
ASSERT(iter->first->scriptExecutionContext() == this);
iter->first->suspend(why);
}
+ m_iteratingActiveDOMObjects = false;
}
void ScriptExecutionContext::resumeActiveDOMObjects()
{
// No protection against m_activeDOMObjects changing during iteration: resume() shouldn't execute arbitrary JS.
+ m_iteratingActiveDOMObjects = true;
HashMap<ActiveDOMObject*, void*>::iterator activeObjectsEnd = m_activeDOMObjects.end();
for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) {
ASSERT(iter->first->scriptExecutionContext() == this);
iter->first->resume();
}
+ m_iteratingActiveDOMObjects = false;
}
void ScriptExecutionContext::stopActiveDOMObjects()
{
// No protection against m_activeDOMObjects changing during iteration: stop() shouldn't execute arbitrary JS.
+ m_iteratingActiveDOMObjects = true;
HashMap<ActiveDOMObject*, void*>::iterator activeObjectsEnd = m_activeDOMObjects.end();
for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) {
ASSERT(iter->first->scriptExecutionContext() == this);
iter->first->stop();
}
+ m_iteratingActiveDOMObjects = false;
// Also close MessagePorts. If they were ActiveDOMObjects (they could be) then they could be stopped instead.
closeMessagePorts();
@@ -243,12 +278,17 @@ void ScriptExecutionContext::createdActiveDOMObject(ActiveDOMObject* object, voi
{
ASSERT(object);
ASSERT(upcastPointer);
+ ASSERT(!m_inDestructor);
+ if (m_iteratingActiveDOMObjects)
+ CRASH();
m_activeDOMObjects.add(object, upcastPointer);
}
void ScriptExecutionContext::destroyedActiveDOMObject(ActiveDOMObject* object)
{
ASSERT(object);
+ if (m_iteratingActiveDOMObjects)
+ CRASH();
m_activeDOMObjects.remove(object);
}
@@ -265,6 +305,17 @@ void ScriptExecutionContext::setSecurityOrigin(PassRefPtr<SecurityOrigin> securi
m_securityOrigin = securityOrigin;
}
+bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, String& sourceURL)
+{
+ KURL targetURL = completeURL(sourceURL);
+ if (securityOrigin()->canRequest(targetURL))
+ return false;
+ errorMessage = "Script error.";
+ sourceURL = String();
+ lineNumber = 0;
+ return true;
+}
+
void ScriptExecutionContext::reportException(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack> callStack)
{
if (m_inDispatchErrorEvent) {
@@ -294,9 +345,14 @@ bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int
if (!target)
return false;
+ String message = errorMessage;
+ int line = lineNumber;
+ String sourceName = sourceURL;
+ sanitizeScriptError(message, line, sourceName);
+
ASSERT(!m_inDispatchErrorEvent);
m_inDispatchErrorEvent = true;
- RefPtr<ErrorEvent> errorEvent = ErrorEvent::create(errorMessage, sourceURL, lineNumber);
+ RefPtr<ErrorEvent> errorEvent = ErrorEvent::create(message, sourceName, line);
target->dispatchEvent(errorEvent);
m_inDispatchErrorEvent = false;
return errorEvent->defaultPrevented();
diff --git a/Source/WebCore/dom/ScriptExecutionContext.h b/Source/WebCore/dom/ScriptExecutionContext.h
index b57b75a..642906c 100644
--- a/Source/WebCore/dom/ScriptExecutionContext.h
+++ b/Source/WebCore/dom/ScriptExecutionContext.h
@@ -60,6 +60,7 @@ namespace WebCore {
class FileThread;
#endif
class MessagePort;
+ class DOMURL;
class SecurityOrigin;
class ScriptCallStack;
@@ -90,6 +91,7 @@ namespace WebCore {
SecurityOrigin* securityOrigin() const { return m_securityOrigin.get(); }
+ bool sanitizeScriptError(String& errorMessage, int& lineNumber, String& sourceURL);
void reportException(const String& errorMessage, int lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>);
virtual void addMessage(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceURL, PassRefPtr<ScriptCallStack>) = 0;
@@ -112,6 +114,11 @@ namespace WebCore {
void destroyedMessagePort(MessagePort*);
const HashSet<MessagePort*>& messagePorts() const { return m_messagePorts; }
+#if ENABLE(BLOB)
+ void createdDomUrl(DOMURL*);
+ void destroyedDomUrl(DOMURL*);
+ const HashSet<DOMURL*>& domUrls() const { return m_domUrls; }
+#endif
void ref() { refScriptExecutionContext(); }
void deref() { derefScriptExecutionContext(); }
@@ -166,11 +173,14 @@ namespace WebCore {
HashSet<MessagePort*> m_messagePorts;
HashMap<ActiveDOMObject*, void*> m_activeDOMObjects;
+ bool m_iteratingActiveDOMObjects;
+ bool m_inDestructor;
HashMap<int, DOMTimer*> m_timeouts;
#if ENABLE(BLOB)
HashSet<String> m_publicBlobURLs;
+ HashSet<DOMURL*> m_domUrls;
#endif
virtual void refScriptExecutionContext() = 0;
diff --git a/Source/WebCore/dom/ScriptableDocumentParser.cpp b/Source/WebCore/dom/ScriptableDocumentParser.cpp
index 0712a15..708dc1d 100644
--- a/Source/WebCore/dom/ScriptableDocumentParser.cpp
+++ b/Source/WebCore/dom/ScriptableDocumentParser.cpp
@@ -30,7 +30,7 @@ namespace WebCore {
ScriptableDocumentParser::ScriptableDocumentParser(Document* document)
: DecodedDataDocumentParser(document)
- , m_xssAuditor(0)
+ , m_wasCreatedByScript(false)
{
}
diff --git a/Source/WebCore/dom/ScriptableDocumentParser.h b/Source/WebCore/dom/ScriptableDocumentParser.h
index d9bf85c..35c2767 100644
--- a/Source/WebCore/dom/ScriptableDocumentParser.h
+++ b/Source/WebCore/dom/ScriptableDocumentParser.h
@@ -31,8 +31,6 @@
namespace WebCore {
-class XSSAuditor;
-
class ScriptableDocumentParser : public DecodedDataDocumentParser {
public:
// Only used by Document::open for deciding if its safe to act on a
@@ -49,8 +47,8 @@ public:
virtual int lineNumber() const = 0;
virtual TextPosition0 textPosition() const = 0;
- XSSAuditor* xssAuditor() const { return m_xssAuditor; }
- void setXSSAuditor(XSSAuditor* auditor) { m_xssAuditor = auditor; }
+ void setWasCreatedByScript(bool wasCreatedByScript) { m_wasCreatedByScript = wasCreatedByScript; }
+ bool wasCreatedByScript() const { return m_wasCreatedByScript; }
protected:
explicit ScriptableDocumentParser(Document*);
@@ -58,8 +56,8 @@ protected:
private:
virtual ScriptableDocumentParser* asScriptableDocumentParser() { return this; }
- // The XSSAuditor associated with this document parser.
- XSSAuditor* m_xssAuditor;
+ // http://www.whatwg.org/specs/web-apps/current-work/#script-created-parser
+ bool m_wasCreatedByScript;
};
}
diff --git a/Source/WebCore/dom/SelectElement.cpp b/Source/WebCore/dom/SelectElement.cpp
index 661ba88..a4da0ae 100644
--- a/Source/WebCore/dom/SelectElement.cpp
+++ b/Source/WebCore/dom/SelectElement.cpp
@@ -22,7 +22,6 @@
#include "SelectElement.h"
#include "Attribute.h"
-#include "CharacterNames.h"
#include "Chrome.h"
#include "ChromeClient.h"
#include "Element.h"
@@ -31,7 +30,6 @@
#include "FormDataList.h"
#include "Frame.h"
#include "HTMLFormElement.h"
-#include "HTMLKeygenElement.h"
#include "HTMLNames.h"
#include "HTMLSelectElement.h"
#include "KeyboardEvent.h"
@@ -43,6 +41,7 @@
#include "RenderMenuList.h"
#include "SpatialNavigation.h"
#include <wtf/Assertions.h>
+#include <wtf/unicode/CharacterNames.h>
#if ENABLE(WML)
#include "WMLNames.h"
@@ -315,11 +314,14 @@ int SelectElement::selectedIndex(const SelectElementData& data, const Element* e
void SelectElement::setSelectedIndex(SelectElementData& data, Element* element, int optionIndex, bool deselect, bool fireOnChangeNow, bool userDrivenChange)
{
- const Vector<Element*>& items = data.listItems(element);
- int listIndex = optionToListIndex(data, element, optionIndex);
+ if (optionIndex == -1 && !deselect && !data.multiple())
+ optionIndex = nextSelectableListIndex(data, element, -1);
if (!data.multiple())
deselect = true;
+ const Vector<Element*>& items = data.listItems(element);
+ int listIndex = optionToListIndex(data, element, optionIndex);
+
Element* excludeElement = 0;
if (OptionElement* optionElement = (listIndex >= 0 ? toOptionElement(items[listIndex]) : 0)) {
excludeElement = items[listIndex];
@@ -1024,12 +1026,8 @@ const Vector<Element*>& SelectElementData::listItems(const Element* element) con
SelectElement* toSelectElement(Element* element)
{
- if (element->isHTMLElement()) {
- if (element->hasTagName(HTMLNames::selectTag))
- return static_cast<HTMLSelectElement*>(element);
- if (element->hasTagName(HTMLNames::keygenTag))
- return static_cast<HTMLKeygenElement*>(element);
- }
+ if (element->isHTMLElement() && element->hasTagName(HTMLNames::selectTag))
+ return static_cast<HTMLSelectElement*>(element);
#if ENABLE(WML)
if (element->isWMLElement() && element->hasTagName(WMLNames::selectTag))
diff --git a/Source/WebCore/dom/SelectorNodeList.cpp b/Source/WebCore/dom/SelectorNodeList.cpp
index 039a29f..7611488 100644
--- a/Source/WebCore/dom/SelectorNodeList.cpp
+++ b/Source/WebCore/dom/SelectorNodeList.cpp
@@ -50,8 +50,8 @@ PassRefPtr<StaticNodeList> createSelectorNodeList(Node* rootNode, const CSSSelec
CSSStyleSelector::SelectorChecker selectorChecker(document, strictParsing);
- if (strictParsing && rootNode->inDocument() && onlySelector && onlySelector->m_match == CSSSelector::Id && !document->containsMultipleElementsWithId(onlySelector->m_value)) {
- Element* element = document->getElementById(onlySelector->m_value);
+ if (strictParsing && rootNode->inDocument() && onlySelector && onlySelector->m_match == CSSSelector::Id && !document->containsMultipleElementsWithId(onlySelector->value())) {
+ Element* element = document->getElementById(onlySelector->value());
if (element && (rootNode->isDocumentNode() || element->isDescendantOf(rootNode)) && selectorChecker.checkSelector(onlySelector, element))
nodes.append(element);
} else {
diff --git a/Source/WebCore/dom/Text.cpp b/Source/WebCore/dom/Text.cpp
index 47c532e..34266f1 100644
--- a/Source/WebCore/dom/Text.cpp
+++ b/Source/WebCore/dom/Text.cpp
@@ -23,6 +23,7 @@
#include "Text.h"
#include "ExceptionCode.h"
+#include "RenderCombineText.h"
#include "RenderText.h"
#include "TextBreakIterator.h"
#include <wtf/text/CString.h>
@@ -237,7 +238,7 @@ bool Text::rendererIsNeeded(RenderStyle *style)
return true;
}
-RenderObject* Text::createRenderer(RenderArena* arena, RenderStyle*)
+RenderObject* Text::createRenderer(RenderArena* arena, RenderStyle* style)
{
#if ENABLE(SVG)
Node* parentOrHost = parentOrHostNode();
@@ -248,7 +249,10 @@ RenderObject* Text::createRenderer(RenderArena* arena, RenderStyle*)
)
return new (arena) RenderSVGInlineText(this, dataImpl());
#endif
-
+
+ if (style->hasTextCombine())
+ return new (arena) RenderCombineText(this, dataImpl());
+
return new (arena) RenderText(this, dataImpl());
}
diff --git a/Source/WebCore/dom/TextEvent.h b/Source/WebCore/dom/TextEvent.h
index d770d38..26c8b93 100644
--- a/Source/WebCore/dom/TextEvent.h
+++ b/Source/WebCore/dom/TextEvent.h
@@ -51,6 +51,7 @@ namespace WebCore {
virtual bool isTextEvent() const;
bool isLineBreak() const { return m_inputType == TextEventInputLineBreak; }
+ bool isComposition() const { return m_inputType == TextEventInputComposition; }
bool isBackTab() const { return m_inputType == TextEventInputBackTab; }
bool isPaste() const { return m_inputType == TextEventInputPaste; }
bool isDrop() const { return m_inputType == TextEventInputDrop; }
diff --git a/Source/WebCore/dom/TextEventInputType.h b/Source/WebCore/dom/TextEventInputType.h
index 2522ec4..f5a05eb 100644
--- a/Source/WebCore/dom/TextEventInputType.h
+++ b/Source/WebCore/dom/TextEventInputType.h
@@ -31,6 +31,7 @@ namespace WebCore {
enum TextEventInputType {
TextEventInputKeyboard, // any newline characters in the text are line breaks only, not paragraph separators.
TextEventInputLineBreak, // any tab characters in the text are backtabs.
+ TextEventInputComposition,
TextEventInputBackTab,
TextEventInputPaste,
TextEventInputDrop,
diff --git a/Source/WebCore/dom/ViewportArguments.cpp b/Source/WebCore/dom/ViewportArguments.cpp
index d3026e7..6dd1b8a 100644
--- a/Source/WebCore/dom/ViewportArguments.cpp
+++ b/Source/WebCore/dom/ViewportArguments.cpp
@@ -50,30 +50,6 @@ ViewportAttributes computeViewportAttributes(ViewportArguments args, int desktop
ASSERT(availableWidth > 0 && availableHeight > 0);
- switch (int(args.width)) {
- case ViewportArguments::ValueDesktopWidth:
- args.width = desktopWidth;
- break;
- case ViewportArguments::ValueDeviceWidth:
- args.width = deviceWidth;
- break;
- case ViewportArguments::ValueDeviceHeight:
- args.width = deviceHeight;
- break;
- }
-
- switch (int(args.height)) {
- case ViewportArguments::ValueDesktopWidth:
- args.height = desktopWidth;
- break;
- case ViewportArguments::ValueDeviceWidth:
- args.height = deviceWidth;
- break;
- case ViewportArguments::ValueDeviceHeight:
- args.height = deviceHeight;
- break;
- }
-
switch (int(args.targetDensityDpi)) {
case ViewportArguments::ValueDeviceDPI:
args.targetDensityDpi = deviceDPI;
@@ -98,11 +74,30 @@ ViewportAttributes computeViewportAttributes(ViewportArguments args, int desktop
availableHeight /= result.devicePixelRatio;
deviceWidth /= result.devicePixelRatio;
deviceHeight /= result.devicePixelRatio;
+ }
- if (args.width != ViewportArguments::ValueAuto)
- args.width /= result.devicePixelRatio;
- if (args.height != ViewportArguments::ValueAuto)
- args.height /= result.devicePixelRatio;
+ switch (int(args.width)) {
+ case ViewportArguments::ValueDesktopWidth:
+ args.width = desktopWidth;
+ break;
+ case ViewportArguments::ValueDeviceWidth:
+ args.width = deviceWidth;
+ break;
+ case ViewportArguments::ValueDeviceHeight:
+ args.width = deviceHeight;
+ break;
+ }
+
+ switch (int(args.height)) {
+ case ViewportArguments::ValueDesktopWidth:
+ args.height = desktopWidth;
+ break;
+ case ViewportArguments::ValueDeviceWidth:
+ args.height = deviceWidth;
+ break;
+ case ViewportArguments::ValueDeviceHeight:
+ args.height = deviceHeight;
+ break;
}
// Clamp values to range defined by spec and resolve minimum-scale and maximum-scale values
diff --git a/Source/WebCore/editing/ApplyStyleCommand.cpp b/Source/WebCore/editing/ApplyStyleCommand.cpp
index 39350b9..ccade74 100644
--- a/Source/WebCore/editing/ApplyStyleCommand.cpp
+++ b/Source/WebCore/editing/ApplyStyleCommand.cpp
@@ -113,7 +113,7 @@ public:
private:
void init(PassRefPtr<CSSStyleDeclaration>, const Position&);
void reconcileTextDecorationProperties(CSSMutableStyleDeclaration*);
- void extractTextStyles(Document*, CSSMutableStyleDeclaration*, bool shouldUseFixedFontDefautlSize);
+ void extractTextStyles(Document*, CSSMutableStyleDeclaration*, bool shouldUseFixedFontDefaultSize);
String m_cssStyle;
bool m_applyBold;
@@ -205,7 +205,31 @@ static void setTextDecorationProperty(CSSMutableStyleDeclaration* style, const C
}
}
-void StyleChange::extractTextStyles(Document* document, CSSMutableStyleDeclaration* style, bool shouldUseFixedFontDefautlSize)
+static bool isCSSValueLength(CSSPrimitiveValue* value)
+{
+ return value->primitiveType() >= CSSPrimitiveValue::CSS_PX && value->primitiveType() <= CSSPrimitiveValue::CSS_PC;
+}
+
+int legacyFontSizeFromCSSValue(Document* document, CSSPrimitiveValue* value, bool shouldUseFixedFontDefaultSize, LegacyFontSizeMode mode)
+{
+ if (isCSSValueLength(value)) {
+ int pixelFontSize = value->getIntValue(CSSPrimitiveValue::CSS_PX);
+ int legacyFontSize = CSSStyleSelector::legacyFontSize(document, pixelFontSize, shouldUseFixedFontDefaultSize);
+ // Use legacy font size only if pixel value matches exactly to that of legacy font size.
+ int cssPrimitiveEquivalent = legacyFontSize - 1 + CSSValueXSmall;
+ if (mode == AlwaysUseLegacyFontSize || CSSStyleSelector::fontSizeForKeyword(document, cssPrimitiveEquivalent, shouldUseFixedFontDefaultSize) == pixelFontSize)
+ return legacyFontSize;
+
+ return 0;
+ }
+
+ if (CSSValueXSmall <= value->getIdent() && value->getIdent() <= CSSValueWebkitXxxLarge)
+ return value->getIdent() - CSSValueXSmall + 1;
+
+ return 0;
+}
+
+void StyleChange::extractTextStyles(Document* document, CSSMutableStyleDeclaration* style, bool shouldUseFixedFontDefaultSize)
{
ASSERT(style);
@@ -260,20 +284,10 @@ void StyleChange::extractTextStyles(Document* document, CSSMutableStyleDeclarati
if (RefPtr<CSSValue> fontSize = style->getPropertyCSSValue(CSSPropertyFontSize)) {
if (!fontSize->isPrimitiveValue())
style->removeProperty(CSSPropertyFontSize); // Can't make sense of the number. Put no font size.
- else {
- CSSPrimitiveValue* value = static_cast<CSSPrimitiveValue*>(fontSize.get());
- if (value->primitiveType() >= CSSPrimitiveValue::CSS_PX && value->primitiveType() <= CSSPrimitiveValue::CSS_PC) {
- int pixelFontSize = value->getFloatValue(CSSPrimitiveValue::CSS_PX);
- int legacyFontSize = CSSStyleSelector::legacyFontSize(document, pixelFontSize, shouldUseFixedFontDefautlSize);
- // Use legacy font size only if pixel value matches exactly to that of legacy font size.
- if (CSSStyleSelector::fontSizeForKeyword(document, legacyFontSize - 1 + CSSValueXSmall, shouldUseFixedFontDefautlSize) == pixelFontSize) {
- m_applyFontSize = String::number(legacyFontSize);
- style->removeProperty(CSSPropertyFontSize);
- }
- } else if (CSSValueXSmall <= value->getIdent() && value->getIdent() <= CSSValueWebkitXxxLarge) {
- m_applyFontSize = String::number(value->getIdent() - CSSValueXSmall + 1);
- style->removeProperty(CSSPropertyFontSize);
- }
+ else if (int legacyFontSize = legacyFontSizeFromCSSValue(document, static_cast<CSSPrimitiveValue*>(fontSize.get()),
+ shouldUseFixedFontDefaultSize, UseLegacyFontSizeOnlyIfPixelValuesMatch)) {
+ m_applyFontSize = String::number(legacyFontSize);
+ style->removeProperty(CSSPropertyFontSize);
}
}
}
@@ -522,18 +536,17 @@ void ApplyStyleCommand::doApply()
// Apply the block-centric properties of the style.
RefPtr<EditingStyle> blockStyle = m_style->extractAndRemoveBlockProperties();
if (!blockStyle->isEmpty())
- applyBlockStyle(blockStyle->style());
+ applyBlockStyle(blockStyle.get());
// Apply any remaining styles to the inline elements.
if (!m_style->isEmpty() || m_styledInlineElement || m_isInlineElementToRemoveFunction) {
- RefPtr<CSSMutableStyleDeclaration> style = m_style->style() ? m_style->style() : CSSMutableStyleDeclaration::create();
applyRelativeFontStyleChange(m_style.get());
- applyInlineStyle(style.get());
+ applyInlineStyle(m_style.get());
}
break;
}
case ForceBlockProperties:
// Force all properties to be applied as block styles.
- applyBlockStyle(m_style->style());
+ applyBlockStyle(m_style.get());
break;
}
}
@@ -543,7 +556,7 @@ EditAction ApplyStyleCommand::editingAction() const
return m_editingAction;
}
-void ApplyStyleCommand::applyBlockStyle(CSSMutableStyleDeclaration *style)
+void ApplyStyleCommand::applyBlockStyle(EditingStyle *style)
{
// update document layout once before removing styles
// so that we avoid the expense of updating before each and every call
@@ -578,7 +591,7 @@ void ApplyStyleCommand::applyBlockStyle(CSSMutableStyleDeclaration *style)
VisiblePosition nextParagraphStart(endOfParagraph(paragraphStart).next());
VisiblePosition beyondEnd(endOfParagraph(visibleEnd).next());
while (paragraphStart.isNotNull() && paragraphStart != beyondEnd) {
- StyleChange styleChange(style, paragraphStart.deepEquivalent());
+ StyleChange styleChange(style->style(), paragraphStart.deepEquivalent());
if (styleChange.cssStyle().length() || m_removeOnly) {
RefPtr<Node> block = enclosingBlock(paragraphStart.deepEquivalent().node());
if (!m_removeOnly) {
@@ -588,9 +601,9 @@ void ApplyStyleCommand::applyBlockStyle(CSSMutableStyleDeclaration *style)
}
ASSERT(block->isHTMLElement());
if (block->isHTMLElement()) {
- removeCSSStyle(style, static_cast<HTMLElement*>(block.get()));
+ removeCSSStyle(style->style(), toHTMLElement(block.get()));
if (!m_removeOnly)
- addBlockStyle(styleChange, static_cast<HTMLElement*>(block.get()));
+ addBlockStyle(styleChange, toHTMLElement(block.get()));
}
if (nextParagraphStart.isOrphan())
@@ -677,7 +690,7 @@ void ApplyStyleCommand::applyRelativeFontStyleChange(EditingStyle* style)
// Only work on fully selected nodes.
if (!nodeFullySelected(node, start, end))
continue;
- element = static_cast<HTMLElement*>(node);
+ element = toHTMLElement(node);
} else if (node->isTextNode() && node->renderer() && node->parentNode() != lastStyledNode) {
// Last styled node was not parent node of this text node, but we wish to style this
// text node. To make this possible, add a style span to surround this text node.
@@ -741,7 +754,7 @@ void ApplyStyleCommand::cleanupUnstyledAppleStyleSpans(Node* dummySpanAncestor)
}
}
-HTMLElement* ApplyStyleCommand::splitAncestorsWithUnicodeBidi(Node* node, bool before, int allowedDirection)
+HTMLElement* ApplyStyleCommand::splitAncestorsWithUnicodeBidi(Node* node, bool before, WritingDirection allowedDirection)
{
// We are allowed to leave the highest ancestor with unicode-bidi unsplit if it is unicode-bidi: embed and direction: allowedDirection.
// In that case, we return the unsplit ancestor. Otherwise, we return 0.
@@ -766,13 +779,16 @@ HTMLElement* ApplyStyleCommand::splitAncestorsWithUnicodeBidi(Node* node, bool b
HTMLElement* unsplitAncestor = 0;
- if (allowedDirection && highestAncestorUnicodeBidi != CSSValueBidiOverride
- && getIdentifierValue(computedStyle(highestAncestorWithUnicodeBidi).get(), CSSPropertyDirection) == allowedDirection
- && highestAncestorWithUnicodeBidi->isHTMLElement()) {
+ WritingDirection highestAncestorDirection;
+ if (allowedDirection != NaturalWritingDirection
+ && highestAncestorUnicodeBidi != CSSValueBidiOverride
+ && highestAncestorWithUnicodeBidi->isHTMLElement()
+ && EditingStyle::create(highestAncestorWithUnicodeBidi, EditingStyle::AllProperties)->textDirection(highestAncestorDirection)
+ && highestAncestorDirection == allowedDirection) {
if (!nextHighestAncestorWithUnicodeBidi)
- return static_cast<HTMLElement*>(highestAncestorWithUnicodeBidi);
+ return toHTMLElement(highestAncestorWithUnicodeBidi);
- unsplitAncestor = static_cast<HTMLElement*>(highestAncestorWithUnicodeBidi);
+ unsplitAncestor = toHTMLElement(highestAncestorWithUnicodeBidi);
highestAncestorWithUnicodeBidi = nextHighestAncestorWithUnicodeBidi;
}
@@ -836,7 +852,7 @@ static Node* highestEmbeddingAncestor(Node* startNode, Node* enclosingNode)
return 0;
}
-void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
+void ApplyStyleCommand::applyInlineStyle(EditingStyle* style)
{
Node* startDummySpanAncestor = 0;
Node* endDummySpanAncestor = 0;
@@ -858,7 +874,7 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
// split the start node and containing element if the selection starts inside of it
bool splitStart = isValidCaretPositionInTextNode(start);
if (splitStart) {
- if (shouldSplitTextElement(start.node()->parentElement(), style))
+ if (shouldSplitTextElement(start.node()->parentElement(), style->style()))
splitTextElementAtStart(start, end);
else
splitTextAtStart(start, end);
@@ -870,7 +886,7 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
// split the end node and containing element if the selection ends inside of it
bool splitEnd = isValidCaretPositionInTextNode(end);
if (splitEnd) {
- if (shouldSplitTextElement(end.node()->parentElement(), style))
+ if (shouldSplitTextElement(end.node()->parentElement(), style->style()))
splitTextElementAtEnd(start, end);
else
splitTextAtEnd(start, end);
@@ -885,15 +901,16 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
// and prevent us from adding redundant ones, as described in:
// <rdar://problem/3724344> Bolding and unbolding creates extraneous tags
Position removeStart = start.upstream();
- int unicodeBidi = getIdentifierValue(style, CSSPropertyUnicodeBidi);
- int direction = 0;
- RefPtr<CSSMutableStyleDeclaration> styleWithoutEmbedding;
+ int unicodeBidi = getIdentifierValue(style->style(), CSSPropertyUnicodeBidi);
+ RefPtr<EditingStyle> styleWithoutEmbedding;
+ RefPtr<EditingStyle> embeddingStyle;
if (unicodeBidi) {
+ WritingDirection textDirection = NaturalWritingDirection;
+ style->textDirection(textDirection);
+
// Leave alone an ancestor that provides the desired single level embedding, if there is one.
- if (unicodeBidi == CSSValueEmbed)
- direction = getIdentifierValue(style, CSSPropertyDirection);
- HTMLElement* startUnsplitAncestor = splitAncestorsWithUnicodeBidi(start.node(), true, direction);
- HTMLElement* endUnsplitAncestor = splitAncestorsWithUnicodeBidi(end.node(), false, direction);
+ HTMLElement* startUnsplitAncestor = splitAncestorsWithUnicodeBidi(start.node(), true, textDirection);
+ HTMLElement* endUnsplitAncestor = splitAncestorsWithUnicodeBidi(end.node(), false, textDirection);
removeEmbeddingUpToEnclosingBlock(start.node(), startUnsplitAncestor);
removeEmbeddingUpToEnclosingBlock(end.node(), endUnsplitAncestor);
@@ -907,18 +924,15 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
embeddingRemoveEnd = positionInParentBeforeNode(endUnsplitAncestor).downstream();
if (embeddingRemoveEnd != removeStart || embeddingRemoveEnd != end) {
- RefPtr<CSSMutableStyleDeclaration> embeddingStyle = CSSMutableStyleDeclaration::create();
- embeddingStyle->setProperty(CSSPropertyUnicodeBidi, CSSValueEmbed);
- embeddingStyle->setProperty(CSSPropertyDirection, direction);
- if (comparePositions(embeddingRemoveStart, embeddingRemoveEnd) <= 0)
- removeInlineStyle(embeddingStyle, embeddingRemoveStart, embeddingRemoveEnd);
styleWithoutEmbedding = style->copy();
- styleWithoutEmbedding->removeProperty(CSSPropertyUnicodeBidi);
- styleWithoutEmbedding->removeProperty(CSSPropertyDirection);
+ embeddingStyle = styleWithoutEmbedding->extractAndRemoveTextDirection();
+
+ if (comparePositions(embeddingRemoveStart, embeddingRemoveEnd) <= 0)
+ removeInlineStyle(embeddingStyle->style(), embeddingRemoveStart, embeddingRemoveEnd);
}
}
- removeInlineStyle(styleWithoutEmbedding ? styleWithoutEmbedding.get() : style, removeStart, end);
+ removeInlineStyle(styleWithoutEmbedding ? styleWithoutEmbedding->style() : style->style(), removeStart, end);
start = startPosition();
end = endPosition();
if (start.isNull() || start.isOrphan() || end.isNull() || end.isOrphan())
@@ -942,7 +956,7 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
// to check a computed style
updateLayout();
- RefPtr<CSSMutableStyleDeclaration> styleToApply = style;
+ RefPtr<CSSMutableStyleDeclaration> styleToApply = style->isEmpty() ? CSSMutableStyleDeclaration::create() : style->style();
if (unicodeBidi) {
// Avoid applying the unicode-bidi and direction properties beneath ancestors that already have them.
Node* embeddingStartNode = highestEmbeddingAncestor(start.node(), enclosingBlock(start.node()));
@@ -953,18 +967,13 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style)
Position embeddingApplyEnd = embeddingEndNode ? positionInParentBeforeNode(embeddingEndNode) : end;
ASSERT(embeddingApplyStart.isNotNull() && embeddingApplyEnd.isNotNull());
- RefPtr<CSSMutableStyleDeclaration> embeddingStyle = CSSMutableStyleDeclaration::create();
- embeddingStyle->setProperty(CSSPropertyUnicodeBidi, CSSValueEmbed);
- embeddingStyle->setProperty(CSSPropertyDirection, direction);
- fixRangeAndApplyInlineStyle(embeddingStyle.get(), embeddingApplyStart, embeddingApplyEnd);
-
- if (styleWithoutEmbedding)
- styleToApply = styleWithoutEmbedding;
- else {
- styleToApply = style->copy();
- styleToApply->removeProperty(CSSPropertyUnicodeBidi);
- styleToApply->removeProperty(CSSPropertyDirection);
+ if (!embeddingStyle) {
+ styleWithoutEmbedding = style->copy();
+ embeddingStyle = styleWithoutEmbedding->extractAndRemoveTextDirection();
}
+ fixRangeAndApplyInlineStyle(embeddingStyle->style(), embeddingApplyStart, embeddingApplyEnd);
+
+ styleToApply = styleWithoutEmbedding->style();
}
}
@@ -1040,7 +1049,7 @@ void ApplyStyleCommand::applyInlineStyleToNodeRange(CSSMutableStyleDeclaration*
if (pastEndNode && pastEndNode->isDescendantOf(node))
break;
// Add to this element's inline style and skip over its contents.
- HTMLElement* element = static_cast<HTMLElement*>(node);
+ HTMLElement* element = toHTMLElement(node);
RefPtr<CSSMutableStyleDeclaration> inlineStyle = element->getInlineStyleDecl()->copy();
inlineStyle->merge(style);
setNodeAttribute(element, styleAttr, inlineStyle->cssText());
@@ -1110,7 +1119,7 @@ bool ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle(CSSMutableStyleDec
RefPtr<Node> previousSibling = node->previousSibling();
RefPtr<Node> nextSibling = node->nextSibling();
RefPtr<ContainerNode> parent = node->parentNode();
- removeInlineStyleFromElement(style, static_cast<HTMLElement*>(node.get()), RemoveAlways);
+ removeInlineStyleFromElement(style, toHTMLElement(node.get()), RemoveAlways);
if (!node->inDocument()) {
// FIXME: We might need to update the start and the end of current selection here but need a test.
if (runStart == node)
@@ -1125,7 +1134,6 @@ bool ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle(CSSMutableStyleDec
bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration* style, PassRefPtr<HTMLElement> element, InlineStyleRemovalMode mode, CSSMutableStyleDeclaration* extractedStyle)
{
- ASSERT(style);
ASSERT(element);
if (!element->parentNode() || !element->parentNode()->isContentEditable())
@@ -1141,6 +1149,9 @@ bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration*
return true;
}
+ if (!style)
+ return false;
+
bool removed = false;
if (removeImplicitlyStyledElement(style, element.get(), mode, extractedStyle))
removed = true;
@@ -1214,6 +1225,7 @@ static const HTMLEquivalent HTMLEquivalents[] = {
bool ApplyStyleCommand::removeImplicitlyStyledElement(CSSMutableStyleDeclaration* style, HTMLElement* element, InlineStyleRemovalMode mode, CSSMutableStyleDeclaration* extractedStyle)
{
// Current implementation does not support stylePushedDown when mode == RemoveNone because of early exit.
+ ASSERT(style);
ASSERT(!extractedStyle || mode != RemoveNone);
bool removed = false;
for (size_t i = 0; i < WTF_ARRAY_LENGTH(HTMLEquivalents); ++i) {
@@ -1336,8 +1348,8 @@ HTMLElement* ApplyStyleCommand::highestAncestorWithConflictingInlineStyle(CSSMut
Node* unsplittableElement = unsplittableElementForPosition(firstPositionInOrBeforeNode(node));
for (Node *n = node; n; n = n->parentNode()) {
- if (n->isHTMLElement() && shouldRemoveInlineStyleFromElement(style, static_cast<HTMLElement*>(n)))
- result = static_cast<HTMLElement*>(n);
+ if (n->isHTMLElement() && shouldRemoveInlineStyleFromElement(style, toHTMLElement(n)))
+ result = toHTMLElement(n);
// Should stop at the editable root (cannot cross editing boundary) and
// also stop at the unsplittable element to be consistent with other UAs
if (n == unsplittableElement)
@@ -1356,7 +1368,7 @@ void ApplyStyleCommand::applyInlineStyleToPushDown(Node* node, CSSMutableStyleDe
RefPtr<CSSMutableStyleDeclaration> newInlineStyle = style;
if (node->isHTMLElement()) {
- HTMLElement* element = static_cast<HTMLElement*>(node);
+ HTMLElement* element = toHTMLElement(node);
CSSMutableStyleDeclaration* existingInlineStyle = element->inlineStyleDecl();
// Avoid overriding existing styles of node
@@ -1392,7 +1404,7 @@ void ApplyStyleCommand::applyInlineStyleToPushDown(Node* node, CSSMutableStyleDe
// Since addInlineStyleIfNeeded can't add styles to block-flow render objects, add style attribute instead.
// FIXME: applyInlineStyleToRange should be used here instead.
if ((node->renderer()->isBlockFlow() || node->childNodeCount()) && node->isHTMLElement()) {
- setNodeAttribute(static_cast<HTMLElement*>(node), styleAttr, newInlineStyle->cssText());
+ setNodeAttribute(toHTMLElement(node), styleAttr, newInlineStyle->cssText());
return;
}
@@ -1428,7 +1440,7 @@ void ApplyStyleCommand::pushDownInlineStyleAroundNode(CSSMutableStyleDeclaration
elementsToPushDown.append(styledElement);
}
RefPtr<CSSMutableStyleDeclaration> styleToPushDown = CSSMutableStyleDeclaration::create();
- removeInlineStyleFromElement(style, static_cast<HTMLElement*>(current), RemoveIfNeeded, styleToPushDown.get());
+ removeInlineStyleFromElement(style, toHTMLElement(current), RemoveIfNeeded, styleToPushDown.get());
// The inner loop will go through children on each level
// FIXME: we should aggregate inline child elements together so that we don't wrap each child separately.
@@ -1469,8 +1481,8 @@ void ApplyStyleCommand::removeInlineStyle(PassRefPtr<CSSMutableStyleDeclaration>
ASSERT(start.node()->inDocument());
ASSERT(end.node()->inDocument());
ASSERT(comparePositions(start, end) <= 0);
-
- RefPtr<CSSValue> textDecorationSpecialProperty = style->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect);
+
+ RefPtr<CSSValue> textDecorationSpecialProperty = style ? style->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect) : 0;
if (textDecorationSpecialProperty) {
style = style->copy();
style->setProperty(CSSPropertyTextDecoration, textDecorationSpecialProperty->cssText(), style->getPropertyPriority(CSSPropertyWebkitTextDecorationsInEffect));
@@ -1500,7 +1512,7 @@ void ApplyStyleCommand::removeInlineStyle(PassRefPtr<CSSMutableStyleDeclaration>
while (node) {
RefPtr<Node> next = node->traverseNextNode();
if (node->isHTMLElement() && nodeFullySelected(node, start, end)) {
- RefPtr<HTMLElement> elem = static_cast<HTMLElement*>(node);
+ RefPtr<HTMLElement> elem = toHTMLElement(node);
RefPtr<Node> prev = elem->traversePreviousNodePostOrder();
RefPtr<Node> next = elem->traverseNextNode();
RefPtr<CSSMutableStyleDeclaration> styleToPushDown;
@@ -1624,7 +1636,7 @@ bool ApplyStyleCommand::shouldSplitTextElement(Element* element, CSSMutableStyle
if (!element || !element->isHTMLElement())
return false;
- return shouldRemoveInlineStyleFromElement(style, static_cast<HTMLElement*>(element));
+ return shouldRemoveInlineStyleFromElement(style, toHTMLElement(element));
}
bool ApplyStyleCommand::isValidCaretPositionInTextNode(const Position& position)
@@ -1827,10 +1839,10 @@ void ApplyStyleCommand::addInlineStyleIfNeeded(CSSMutableStyleDeclaration *style
HTMLElement* styleContainer = 0;
for (Node* container = startNode.get(); container && startNode == endNode; container = container->firstChild()) {
if (container->isHTMLElement() && container->hasTagName(fontTag))
- fontContainer = static_cast<HTMLElement*>(container);
+ fontContainer = toHTMLElement(container);
bool styleContainerIsNotSpan = !styleContainer || !styleContainer->hasTagName(spanTag);
if (container->isHTMLElement() && (container->hasTagName(spanTag) || (styleContainerIsNotSpan && container->childNodeCount())))
- styleContainer = static_cast<HTMLElement*>(container);
+ styleContainer = toHTMLElement(container);
if (!container->firstChild())
break;
startNode = container->firstChild();
@@ -1860,7 +1872,7 @@ void ApplyStyleCommand::addInlineStyleIfNeeded(CSSMutableStyleDeclaration *style
if (styleChange.cssStyle().length()) {
if (styleContainer) {
- CSSMutableStyleDeclaration* existingStyle = static_cast<HTMLElement*>(styleContainer)->inlineStyleDecl();
+ CSSMutableStyleDeclaration* existingStyle = toHTMLElement(styleContainer)->inlineStyleDecl();
if (existingStyle)
setNodeAttribute(styleContainer, styleAttr, existingStyle->cssText() + styleChange.cssStyle());
else
diff --git a/Source/WebCore/editing/ApplyStyleCommand.h b/Source/WebCore/editing/ApplyStyleCommand.h
index 05af85c..1b2c2ef 100644
--- a/Source/WebCore/editing/ApplyStyleCommand.h
+++ b/Source/WebCore/editing/ApplyStyleCommand.h
@@ -28,6 +28,7 @@
#include "CompositeEditCommand.h"
#include "HTMLElement.h"
+#include "WritingDirection.h"
namespace WebCore {
@@ -90,9 +91,9 @@ private:
bool nodeFullyUnselected(Node*, const Position& start, const Position& end) const;
// style-application helpers
- void applyBlockStyle(CSSMutableStyleDeclaration*);
+ void applyBlockStyle(EditingStyle*);
void applyRelativeFontStyleChange(EditingStyle*);
- void applyInlineStyle(CSSMutableStyleDeclaration*);
+ void applyInlineStyle(EditingStyle*);
void fixRangeAndApplyInlineStyle(CSSMutableStyleDeclaration*, const Position& start, const Position& end);
void applyInlineStyleToNodeRange(CSSMutableStyleDeclaration*, Node* startNode, Node* pastEndNode);
void addBlockStyle(const StyleChange&, HTMLElement*);
@@ -111,7 +112,7 @@ private:
float computedFontSize(Node*);
void joinChildTextNodes(Node*, const Position& start, const Position& end);
- HTMLElement* splitAncestorsWithUnicodeBidi(Node*, bool before, int allowedDirection);
+ HTMLElement* splitAncestorsWithUnicodeBidi(Node*, bool before, WritingDirection allowedDirection);
void removeEmbeddingUpToEnclosingBlock(Node* node, Node* unsplitAncestor);
void updateStartEnd(const Position& newStart, const Position& newEnd);
@@ -129,6 +130,8 @@ private:
IsInlineElementToRemoveFunction m_isInlineElementToRemoveFunction;
};
+enum LegacyFontSizeMode { AlwaysUseLegacyFontSize, UseLegacyFontSizeOnlyIfPixelValuesMatch };
+int legacyFontSizeFromCSSValue(Document*, CSSPrimitiveValue*, bool shouldUseFixedFontDefaultSize, LegacyFontSizeMode);
bool isStyleSpan(const Node*);
PassRefPtr<HTMLElement> createStyleSpanElement(Document*);
RefPtr<CSSMutableStyleDeclaration> getPropertiesNotIn(CSSStyleDeclaration* styleWithRedundantProperties, CSSStyleDeclaration* baseStyle);
diff --git a/Source/WebCore/editing/CompositeEditCommand.cpp b/Source/WebCore/editing/CompositeEditCommand.cpp
index 552ed79..ac3d761 100644
--- a/Source/WebCore/editing/CompositeEditCommand.cpp
+++ b/Source/WebCore/editing/CompositeEditCommand.cpp
@@ -28,7 +28,6 @@
#include "AppendNodeCommand.h"
#include "ApplyStyleCommand.h"
-#include "CharacterNames.h"
#include "DeleteFromTextNodeCommand.h"
#include "DeleteSelectionCommand.h"
#include "Document.h"
@@ -63,6 +62,7 @@
#include "htmlediting.h"
#include "markup.h"
#include "visible_units.h"
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
@@ -390,57 +390,84 @@ void CompositeEditCommand::setNodeAttribute(PassRefPtr<Element> element, const Q
applyCommandToComposite(SetNodeAttributeCommand::create(element, attribute, value));
}
-static inline bool isWhitespace(UChar c)
+static inline bool containsOnlyWhitespace(const String& text)
{
- return c == noBreakSpace || c == ' ' || c == '\n' || c == '\t';
+ for (unsigned i = 0; i < text.length(); ++i) {
+ if (!isWhitespace(text.characters()[i]))
+ return false;
+ }
+
+ return true;
}
-// FIXME: Doesn't go into text nodes that contribute adjacent text (siblings, cousins, etc).
-void CompositeEditCommand::rebalanceWhitespaceAt(const Position& position)
+bool CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor(const String& text) const
+{
+ return containsOnlyWhitespace(text);
+}
+
+bool CompositeEditCommand::canRebalance(const Position& position) const
{
Node* node = position.containerNode();
if (position.anchorType() != Position::PositionIsOffsetInAnchor || !node || !node->isTextNode())
- return;
- Text* textNode = static_cast<Text*>(node);
+ return false;
+ Text* textNode = static_cast<Text*>(node);
if (textNode->length() == 0)
- return;
+ return false;
+
RenderObject* renderer = textNode->renderer();
if (renderer && !renderer->style()->collapseWhiteSpace())
- return;
+ return false;
- String text = textNode->data();
- ASSERT(!text.isEmpty());
+ return true;
+}
+
+// FIXME: Doesn't go into text nodes that contribute adjacent text (siblings, cousins, etc).
+void CompositeEditCommand::rebalanceWhitespaceAt(const Position& position)
+{
+ Node* node = position.containerNode();
+ if (!canRebalance(position))
+ return;
+ // If the rebalance is for the single offset, and neither text[offset] nor text[offset - 1] are some form of whitespace, do nothing.
int offset = position.deprecatedEditingOffset();
- // If neither text[offset] nor text[offset - 1] are some form of whitespace, do nothing.
+ String text = static_cast<Text*>(node)->data();
if (!isWhitespace(text[offset])) {
offset--;
if (offset < 0 || !isWhitespace(text[offset]))
return;
}
-
+
+ rebalanceWhitespaceOnTextSubstring(static_cast<Text*>(node), position.offsetInContainerNode(), position.offsetInContainerNode());
+}
+
+void CompositeEditCommand::rebalanceWhitespaceOnTextSubstring(RefPtr<Text> textNode, int startOffset, int endOffset)
+{
+ String text = textNode->data();
+ ASSERT(!text.isEmpty());
+
// Set upstream and downstream to define the extent of the whitespace surrounding text[offset].
- int upstream = offset;
+ int upstream = startOffset;
while (upstream > 0 && isWhitespace(text[upstream - 1]))
upstream--;
- int downstream = offset;
- while ((unsigned)downstream + 1 < text.length() && isWhitespace(text[downstream + 1]))
+ int downstream = endOffset;
+ while ((unsigned)downstream < text.length() && isWhitespace(text[downstream]))
downstream++;
- int length = downstream - upstream + 1;
- ASSERT(length > 0);
-
- VisiblePosition visibleUpstreamPos(Position(position.containerNode(), upstream, Position::PositionIsOffsetInAnchor));
- VisiblePosition visibleDownstreamPos(Position(position.containerNode(), downstream + 1, Position::PositionIsOffsetInAnchor));
+ int length = downstream - upstream;
+ if (!length)
+ return;
+
+ VisiblePosition visibleUpstreamPos(Position(textNode, upstream, Position::PositionIsOffsetInAnchor));
+ VisiblePosition visibleDownstreamPos(Position(textNode, downstream, Position::PositionIsOffsetInAnchor));
String string = text.substring(upstream, length);
String rebalancedString = stringWithRebalancedWhitespace(string,
// FIXME: Because of the problem mentioned at the top of this function, we must also use nbsps at the start/end of the string because
// this function doesn't get all surrounding whitespace, just the whitespace in the current text node.
isStartOfParagraph(visibleUpstreamPos) || upstream == 0,
- isEndOfParagraph(visibleDownstreamPos) || (unsigned)downstream == text.length() - 1);
+ isEndOfParagraph(visibleDownstreamPos) || (unsigned)downstream == text.length());
if (string != rebalancedString)
replaceTextInNode(textNode, upstream, length, rebalancedString);
diff --git a/Source/WebCore/editing/CompositeEditCommand.h b/Source/WebCore/editing/CompositeEditCommand.h
index 6db4eb1..9066b65 100644
--- a/Source/WebCore/editing/CompositeEditCommand.h
+++ b/Source/WebCore/editing/CompositeEditCommand.h
@@ -71,7 +71,10 @@ protected:
void mergeIdenticalElements(PassRefPtr<Element>, PassRefPtr<Element>);
void rebalanceWhitespace();
void rebalanceWhitespaceAt(const Position&);
+ void rebalanceWhitespaceOnTextSubstring(RefPtr<Text>, int startOffset, int endOffset);
void prepareWhitespaceAtPositionForSplit(Position&);
+ bool canRebalance(const Position&) const;
+ bool shouldRebalanceLeadingWhitespaceFor(const String&) const;
void removeCSSProperty(PassRefPtr<StyledElement>, CSSPropertyID);
void removeNodeAttribute(PassRefPtr<Element>, const QualifiedName& attribute);
void removeChildrenInRange(PassRefPtr<Node>, unsigned from, unsigned to);
diff --git a/Source/WebCore/editing/DeleteButtonController.cpp b/Source/WebCore/editing/DeleteButtonController.cpp
index 61e3190..75b9a96 100644
--- a/Source/WebCore/editing/DeleteButtonController.cpp
+++ b/Source/WebCore/editing/DeleteButtonController.cpp
@@ -164,7 +164,7 @@ static HTMLElement* enclosingDeletableElement(const VisibleSelection& selection)
return 0;
ASSERT(element->isHTMLElement());
- return static_cast<HTMLElement*>(element);
+ return toHTMLElement(element);
}
void DeleteButtonController::respondToChangedSelection(const VisibleSelection& oldSelection)
@@ -263,7 +263,7 @@ void DeleteButtonController::show(HTMLElement* element)
if (!enabled() || !element || !element->inDocument() || !isDeletableElement(element))
return;
- if (!m_frame->editor()->shouldShowDeleteInterface(static_cast<HTMLElement*>(element)))
+ if (!m_frame->editor()->shouldShowDeleteInterface(toHTMLElement(element)))
return;
// we rely on the renderer having current information, so we should update the layout if needed
diff --git a/Source/WebCore/editing/EditingStyle.cpp b/Source/WebCore/editing/EditingStyle.cpp
index 8caf4b6..a3f66be 100644
--- a/Source/WebCore/editing/EditingStyle.cpp
+++ b/Source/WebCore/editing/EditingStyle.cpp
@@ -90,18 +90,18 @@ EditingStyle::EditingStyle()
{
}
-EditingStyle::EditingStyle(Node* node)
+EditingStyle::EditingStyle(Node* node, PropertiesToInclude propertiesToInclude)
: m_shouldUseFixedDefaultFontSize(false)
, m_fontSizeDelta(NoFontDelta)
{
- init(node);
+ init(node, propertiesToInclude);
}
EditingStyle::EditingStyle(const Position& position)
: m_shouldUseFixedDefaultFontSize(false)
, m_fontSizeDelta(NoFontDelta)
{
- init(position.node());
+ init(position.node(), OnlyInheritableProperties);
}
EditingStyle::EditingStyle(const CSSStyleDeclaration* style)
@@ -116,10 +116,10 @@ EditingStyle::~EditingStyle()
{
}
-void EditingStyle::init(Node* node)
+void EditingStyle::init(Node* node, PropertiesToInclude propertiesToInclude)
{
RefPtr<CSSComputedStyleDeclaration> computedStyleAtPosition = computedStyle(node);
- m_mutableStyle = editingStyleFromComputedStyle(computedStyleAtPosition);
+ m_mutableStyle = propertiesToInclude == AllProperties && computedStyleAtPosition ? computedStyleAtPosition->copy() : editingStyleFromComputedStyle(computedStyleAtPosition);
if (node && node->computedStyle()) {
RenderStyle* renderStyle = node->computedStyle();
@@ -255,6 +255,20 @@ PassRefPtr<EditingStyle> EditingStyle::extractAndRemoveBlockProperties()
return blockProperties;
}
+PassRefPtr<EditingStyle> EditingStyle::extractAndRemoveTextDirection()
+{
+ RefPtr<EditingStyle> textDirection = EditingStyle::create();
+ textDirection->m_mutableStyle = CSSMutableStyleDeclaration::create();
+ textDirection->m_mutableStyle->setProperty(CSSPropertyUnicodeBidi, CSSValueEmbed, m_mutableStyle->getPropertyPriority(CSSPropertyUnicodeBidi));
+ textDirection->m_mutableStyle->setProperty(CSSPropertyDirection, m_mutableStyle->getPropertyValue(CSSPropertyDirection),
+ m_mutableStyle->getPropertyPriority(CSSPropertyDirection));
+
+ m_mutableStyle->removeProperty(CSSPropertyUnicodeBidi);
+ m_mutableStyle->removeProperty(CSSPropertyDirection);
+
+ return textDirection;
+}
+
void EditingStyle::removeBlockProperties()
{
if (!m_mutableStyle)
diff --git a/Source/WebCore/editing/EditingStyle.h b/Source/WebCore/editing/EditingStyle.h
index a71b4ad..129ade5 100644
--- a/Source/WebCore/editing/EditingStyle.h
+++ b/Source/WebCore/editing/EditingStyle.h
@@ -47,6 +47,7 @@ class RenderStyle;
class EditingStyle : public RefCounted<EditingStyle> {
public:
+ enum PropertiesToInclude { AllProperties, OnlyInheritableProperties };
enum ShouldPreserveWritingDirection { PreserveWritingDirection, DoNotPreserveWritingDirection };
static float NoFontDelta;
@@ -55,9 +56,9 @@ public:
return adoptRef(new EditingStyle());
}
- static PassRefPtr<EditingStyle> create(Node* node)
+ static PassRefPtr<EditingStyle> create(Node* node, PropertiesToInclude propertiesToInclude = OnlyInheritableProperties)
{
- return adoptRef(new EditingStyle(node));
+ return adoptRef(new EditingStyle(node, propertiesToInclude));
}
static PassRefPtr<EditingStyle> create(const Position& position)
@@ -80,6 +81,7 @@ public:
void clear();
PassRefPtr<EditingStyle> copy() const;
PassRefPtr<EditingStyle> extractAndRemoveBlockProperties();
+ PassRefPtr<EditingStyle> extractAndRemoveTextDirection();
void removeBlockProperties();
void removeStyleAddedByNode(Node*);
void removeStyleConflictingWithStyleOfNode(Node*);
@@ -91,10 +93,10 @@ public:
private:
EditingStyle();
- EditingStyle(Node*);
+ EditingStyle(Node*, PropertiesToInclude);
EditingStyle(const Position&);
EditingStyle(const CSSStyleDeclaration*);
- void init(Node*);
+ void init(Node*, PropertiesToInclude);
void removeTextFillAndStrokeColorsIfNeeded(RenderStyle*);
void replaceFontSizeByKeywordIfPossible(RenderStyle*, CSSComputedStyleDeclaration*);
void extractFontSizeDelta();
diff --git a/Source/WebCore/editing/Editor.cpp b/Source/WebCore/editing/Editor.cpp
index 23b41ce..99624b3 100644
--- a/Source/WebCore/editing/Editor.cpp
+++ b/Source/WebCore/editing/Editor.cpp
@@ -36,7 +36,6 @@
#include "CSSStyleSelector.h"
#include "CSSValueKeywords.h"
#include "CachedResourceLoader.h"
-#include "CharacterNames.h"
#include "ClipboardEvent.h"
#include "CompositionEvent.h"
#include "CreateLinkCommand.h"
@@ -83,6 +82,7 @@
#include "markup.h"
#include "visible_units.h"
#include <wtf/UnusedParam.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -116,6 +116,7 @@ static const Vector<DocumentMarker::MarkerType>& markerTypesForAutocorrection()
if (markerTypesForAutoCorrection.isEmpty()) {
markerTypesForAutoCorrection.append(DocumentMarker::Replacement);
markerTypesForAutoCorrection.append(DocumentMarker::CorrectionIndicator);
+ markerTypesForAutoCorrection.append(DocumentMarker::SpellCheckingExemption);
}
return markerTypesForAutoCorrection;
}
@@ -123,8 +124,10 @@ static const Vector<DocumentMarker::MarkerType>& markerTypesForAutocorrection()
static const Vector<DocumentMarker::MarkerType>& markerTypesForReplacement()
{
DEFINE_STATIC_LOCAL(Vector<DocumentMarker::MarkerType>, markerTypesForReplacement, ());
- if (markerTypesForReplacement.isEmpty())
+ if (markerTypesForReplacement.isEmpty()) {
markerTypesForReplacement.append(DocumentMarker::Replacement);
+ markerTypesForReplacement.append(DocumentMarker::SpellCheckingExemption);
+ }
return markerTypesForReplacement;
}
@@ -505,19 +508,12 @@ bool Editor::shouldShowDeleteInterface(HTMLElement* element) const
void Editor::respondToChangedSelection(const VisibleSelection& oldSelection)
{
-#if SUPPORT_AUTOCORRECTION_PANEL
- VisibleSelection currentSelection(frame()->selection()->selection());
- if (currentSelection != oldSelection) {
- stopCorrectionPanelTimer();
- dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
- }
-#endif // SUPPORT_AUTOCORRECTION_PANEL
-
if (client())
client()->respondToChangedSelection();
m_deleteButtonController->respondToChangedSelection(oldSelection);
#if SUPPORT_AUTOCORRECTION_PANEL
+ VisibleSelection currentSelection(frame()->selection()->selection());
// When user moves caret to the end of autocorrected word and pauses, we show the panel
// containing the original pre-correction word so that user can quickly revert the
// undesired autocorrection. Here, we start correction panel timer once we confirm that
@@ -1051,10 +1047,10 @@ String Editor::selectionStartCSSPropertyValue(int propertyID)
if (propertyID == CSSPropertyFontSize) {
RefPtr<CSSValue> cssValue = selectionStyle->getPropertyCSSValue(CSSPropertyFontSize);
- ASSERT(cssValue->isPrimitiveValue());
- int fontPixelSize = static_cast<CSSPrimitiveValue*>(cssValue.get())->getIntValue(CSSPrimitiveValue::CSS_PX);
- int size = CSSStyleSelector::legacyFontSize(m_frame->document(), fontPixelSize, shouldUseFixedFontDefaultSize);
- value = String::number(size);
+ if (cssValue->isPrimitiveValue()) {
+ value = String::number(legacyFontSizeFromCSSValue(m_frame->document(), static_cast<CSSPrimitiveValue*>(cssValue.get()),
+ shouldUseFixedFontDefaultSize, AlwaysUseLegacyFontSize));
+ }
}
return value;
@@ -1089,14 +1085,20 @@ void Editor::appliedEditing(PassRefPtr<EditCommand> cmd)
m_frame->document()->updateLayout();
dispatchEditableContentChangedEvents(*cmd);
-
VisibleSelection newSelection(cmd->endingSelection());
+
+#if SUPPORT_AUTOCORRECTION_PANEL
+ // Check to see if the command introduced paragraph separator. If it did, we remove existing autocorrection underlines. This is in consistency with the behavior in AppKit.
+ if (cmd->isTopLevelCommand() && !inSameParagraph(cmd->startingSelection().start(), newSelection.end()))
+ m_frame->document()->markers()->removeMarkers(DocumentMarker::CorrectionIndicator);
+#endif
+
// Don't clear the typing style with this selection change. We do those things elsewhere if necessary.
changeSelectionAfterCommand(newSelection, false, false);
-
+
if (!cmd->preservesTypingStyle())
m_frame->selection()->clearTypingStyle();
-
+
// Command will be equal to last edit command only in the case of typing
if (m_lastEditCommand.get() == cmd)
ASSERT(cmd->isTypingCommand());
@@ -1173,7 +1175,12 @@ bool Editor::insertText(const String& text, Event* triggeringEvent)
return m_frame->eventHandler()->handleTextInputEvent(text, triggeringEvent);
}
-bool Editor::insertTextWithoutSendingTextEvent(const String& text, bool selectInsertedText, Event* triggeringEvent)
+bool Editor::insertTextForConfirmedComposition(const String& text)
+{
+ return m_frame->eventHandler()->handleTextInputEvent(text, 0, TextEventInputComposition);
+}
+
+bool Editor::insertTextWithoutSendingTextEvent(const String& text, bool selectInsertedText, TextEvent* triggeringEvent)
{
if (text.isEmpty())
return false;
@@ -1186,6 +1193,9 @@ bool Editor::insertTextWithoutSendingTextEvent(const String& text, bool selectIn
if (!shouldInsertText(text, range.get(), EditorInsertActionTyped))
return true;
+ if (text == " " || text == "\t")
+ applyAutocorrectionBeforeTypingIfAppropriate();
+
// Get the selection to use for the event that triggered this insertText.
// If the event handler changed the selection, we may want to use a different selection
// that is contained in the event target.
@@ -1195,7 +1205,8 @@ bool Editor::insertTextWithoutSendingTextEvent(const String& text, bool selectIn
RefPtr<Document> document = selectionStart->document();
// Insert the text
- TypingCommand::insertText(document.get(), text, selection, selectInsertedText);
+ TypingCommand::insertText(document.get(), text, selection, selectInsertedText,
+ triggeringEvent && triggeringEvent->isComposition() ? TypingCommand::TextCompositionConfirm : TypingCommand::TextCompositionNone);
// Reveal the current selection
if (Frame* editedFrame = document->frame())
@@ -1215,6 +1226,8 @@ bool Editor::insertLineBreak()
if (!shouldInsertText("\n", m_frame->selection()->toNormalizedRange().get(), EditorInsertActionTyped))
return true;
+ applyAutocorrectionBeforeTypingIfAppropriate();
+
TypingCommand::insertLineBreak(m_frame->document());
revealSelectionAfterEditingOperation();
return true;
@@ -1231,6 +1244,8 @@ bool Editor::insertParagraphSeparator()
if (!shouldInsertText("\n", m_frame->selection()->toNormalizedRange().get(), EditorInsertActionTyped))
return true;
+ applyAutocorrectionBeforeTypingIfAppropriate();
+
TypingCommand::insertParagraphSeparator(m_frame->document());
revealSelectionAfterEditingOperation();
return true;
@@ -1543,7 +1558,7 @@ void Editor::setBaseWritingDirection(WritingDirection direction)
if (focusedNode && (focusedNode->hasTagName(textareaTag) || (focusedNode->hasTagName(inputTag) && static_cast<HTMLInputElement*>(focusedNode)->isTextField()))) {
if (direction == NaturalWritingDirection)
return;
- static_cast<HTMLElement*>(focusedNode)->setAttribute(dirAttr, direction == LeftToRightWritingDirection ? "ltr" : "rtl");
+ toHTMLElement(focusedNode)->setAttribute(dirAttr, direction == LeftToRightWritingDirection ? "ltr" : "rtl");
frame()->document()->updateStyleIfNeeded();
return;
}
@@ -1618,7 +1633,7 @@ void Editor::confirmComposition(const String& text, bool preserveSelection)
m_compositionNode = 0;
m_customCompositionUnderlines.clear();
- insertText(text, 0);
+ insertTextForConfirmedComposition(text);
if (preserveSelection) {
m_frame->selection()->setSelection(oldSelection, false, false);
@@ -1687,7 +1702,7 @@ void Editor::setComposition(const String& text, const Vector<CompositionUnderlin
m_customCompositionUnderlines.clear();
if (!text.isEmpty()) {
- TypingCommand::insertText(m_frame->document(), text, true, true);
+ TypingCommand::insertText(m_frame->document(), text, true, TypingCommand::TextCompositionUpdate);
// Find out what node has the composition now.
Position base = m_frame->selection()->base().downstream();
@@ -2210,6 +2225,9 @@ void Editor::markBadGrammar(const VisibleSelection& selection)
#if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCheckingOptions, Range* spellingRange, Range* grammarRange)
{
+ // There shouldn't be pending autocorrection at this moment.
+ ASSERT(!m_correctionPanelInfo.rangeToBeReplaced);
+
bool shouldMarkSpelling = textCheckingOptions & MarkSpelling;
bool shouldMarkGrammar = textCheckingOptions & MarkGrammar;
bool shouldPerformReplacement = textCheckingOptions & PerformReplacement;
@@ -2303,6 +2321,10 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
if (shouldMarkSpelling && result->type == TextCheckingTypeSpelling && resultLocation >= spellingParagraph.checkingStart() && resultLocation + resultLength <= spellingRangeEndOffset && !resultEndsAtAmbiguousBoundary) {
ASSERT(resultLength > 0 && resultLocation >= 0);
RefPtr<Range> misspellingRange = spellingParagraph.subrange(resultLocation, resultLength);
+#if SUPPORT_AUTOCORRECTION_PANEL
+ if (m_frame->document()->markers()->hasMarkers(misspellingRange.get(), DocumentMarker::SpellCheckingExemption))
+ continue;
+#endif // SUPPORT_AUTOCORRECTION_PANEL
misspellingRange->startContainer(ec)->document()->markers()->addMarker(misspellingRange.get(), DocumentMarker::Spelling);
} else if (shouldMarkGrammar && result->type == TextCheckingTypeGrammar && grammarParagraph.checkingRangeCovers(resultLocation, resultLength)) {
ASSERT(resultLength > 0 && resultLocation >= 0);
@@ -2406,6 +2428,7 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
RefPtr<Range> replacedRange = paragraph.subrange(resultLocation, replacementLength);
replacedRange->startContainer()->document()->markers()->addMarker(replacedRange.get(), DocumentMarker::Replacement, replacedString);
replacedRange->startContainer()->document()->markers()->addMarker(replacedRange.get(), DocumentMarker::CorrectionIndicator, replacedString);
+ replacedRange->startContainer()->document()->markers()->addMarker(replacedRange.get(), DocumentMarker::SpellCheckingExemption);
}
}
}
@@ -2488,8 +2511,10 @@ void Editor::correctionPanelTimerFired(Timer<Editor>*)
String paragraphText = plainText(TextCheckingParagraph(m_correctionPanelInfo.rangeToBeReplaced).paragraphRange().get());
Vector<String> suggestions;
client()->getGuessesForWord(m_correctionPanelInfo.replacedString, paragraphText, suggestions);
- if (suggestions.isEmpty())
+ if (suggestions.isEmpty()) {
+ m_correctionPanelInfo.rangeToBeReplaced.clear();
break;
+ }
String topSuggestion = suggestions.first();
suggestions.remove(0);
m_correctionPanelInfo.isActive = true;
@@ -2649,44 +2674,8 @@ void Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited(bool doNotRemove
// of marker that contains the word in question, and remove marker on that whole range.
Document* document = m_frame->document();
RefPtr<Range> wordRange = Range::create(document, startOfFirstWord.deepEquivalent(), endOfLastWord.deepEquivalent());
- RefPtr<Range> rangeOfFirstWord = Range::create(document, startOfFirstWord.deepEquivalent(), endOfFirstWord.deepEquivalent());
- RefPtr<Range> rangeOfLastWord = Range::create(document, startOfLastWord.deepEquivalent(), endOfLastWord.deepEquivalent());
-
- typedef pair<RefPtr<Range>, DocumentMarker::MarkerType> RangeMarkerPair;
- // It's probably unsafe to remove marker while iterating a vector of markers. So we store the markers and ranges that we want to remove temporarily. Then remove them at the end of function.
- // To avoid allocation on the heap, Give markersToRemove a small inline capacity
- Vector<RangeMarkerPair, 16> markersToRemove;
- for (TextIterator textIterator(wordRange.get()); !textIterator.atEnd(); textIterator.advance()) {
- Node* node = textIterator.node();
- if (!node)
- continue;
- if (node == startOfFirstWord.deepEquivalent().containerNode() || node == endOfLastWord.deepEquivalent().containerNode()) {
- // First word and last word can belong to the same node
- bool processFirstWord = node == startOfFirstWord.deepEquivalent().containerNode() && document->markers()->hasMarkers(rangeOfFirstWord.get(), DocumentMarker::Spelling | DocumentMarker::CorrectionIndicator);
- bool processLastWord = node == endOfLastWord.deepEquivalent().containerNode() && document->markers()->hasMarkers(rangeOfLastWord.get(), DocumentMarker::Spelling | DocumentMarker::CorrectionIndicator);
- // Take note on the markers whose range overlaps with the range of the first word or the last word.
- Vector<DocumentMarker> markers = document->markers()->markersForNode(node);
- for (size_t i = 0; i < markers.size(); ++i) {
- DocumentMarker marker = markers[i];
- if (processFirstWord && static_cast<int>(marker.endOffset) > startOfFirstWord.deepEquivalent().offsetInContainerNode() && (marker.type == DocumentMarker::Spelling || marker.type == DocumentMarker::CorrectionIndicator)) {
- RefPtr<Range> markerRange = Range::create(document, node, marker.startOffset, node, marker.endOffset);
- markersToRemove.append(std::make_pair(markerRange, marker.type));
- }
- if (processLastWord && static_cast<int>(marker.startOffset) <= endOfLastWord.deepEquivalent().offsetInContainerNode() && (marker.type == DocumentMarker::Spelling || marker.type == DocumentMarker::CorrectionIndicator)) {
- RefPtr<Range> markerRange = Range::create(document, node, marker.startOffset, node, marker.endOffset);
- markersToRemove.append(std::make_pair(markerRange, marker.type));
- }
- }
- } else {
- document->markers()->removeMarkers(node, DocumentMarker::Spelling);
- document->markers()->removeMarkers(node, DocumentMarker::CorrectionIndicator);
- }
- }
- // Actually remove the markers.
- Vector<RangeMarkerPair>::const_iterator pairEnd = markersToRemove.end();
- for (Vector<RangeMarkerPair>::const_iterator pairIterator = markersToRemove.begin(); pairIterator != pairEnd; ++pairIterator)
- document->markers()->removeMarkers(pairIterator->first.get(), pairIterator->second);
+ document->markers()->removeMarkers(wordRange.get(), DocumentMarker::Spelling | DocumentMarker::CorrectionIndicator | DocumentMarker::SpellCheckingExemption, DocumentMarkerController::RemovePartiallyOverlappingMarker);
}
void Editor::applyCorrectionPanelInfo(const Vector<DocumentMarker::MarkerType>& markerTypesToAdd)
@@ -2719,7 +2708,6 @@ void Editor::applyCorrectionPanelInfo(const Vector<DocumentMarker::MarkerType>&
// Take note of the location of autocorrection so that we can add marker after the replacement took place.
int correctionStartOffsetInParagraph = TextIterator::rangeLength(correctionStartOffsetInParagraphAsRange.get());
- Position caretPosition = m_frame->selection()->selection().end();
// Clone the range, since the caller of this method may want to keep the original range around.
RefPtr<Range> rangeToBeReplaced = m_correctionPanelInfo.rangeToBeReplaced->cloneRange(ec);
@@ -2727,17 +2715,34 @@ void Editor::applyCorrectionPanelInfo(const Vector<DocumentMarker::MarkerType>&
if (m_frame->selection()->shouldChangeSelection(selectionToReplace)) {
m_frame->selection()->setSelection(selectionToReplace);
replaceSelectionWithText(m_correctionPanelInfo.replacementString, false, false);
- caretPosition.moveToOffset(caretPosition.offsetInContainerNode() + m_correctionPanelInfo.replacementString.length() - m_correctionPanelInfo.replacedString.length());
- setEnd(paragraphRangeContainingCorrection.get(), endOfParagraph(caretPosition));
+ setEnd(paragraphRangeContainingCorrection.get(), m_frame->selection()->selection().start());
RefPtr<Range> replacementRange = TextIterator::subrange(paragraphRangeContainingCorrection.get(), correctionStartOffsetInParagraph, m_correctionPanelInfo.replacementString.length());
DocumentMarkerController* markers = replacementRange->startContainer()->document()->markers();
size_t size = markerTypesToAdd.size();
- for (size_t i = 0; i < size; ++i)
- markers->addMarker(replacementRange.get(), markerTypesToAdd[i], m_correctionPanelInfo.replacementString);
- m_frame->selection()->moveTo(caretPosition, false);
+ for (size_t i = 0; i < size; ++i) {
+ if (m_correctionPanelInfo.panelType == CorrectionPanelInfo::PanelTypeReversion)
+ markers->addMarker(replacementRange.get(), markerTypesToAdd[i]);
+ else
+ markers->addMarker(replacementRange.get(), markerTypesToAdd[i], m_correctionPanelInfo.replacedString);
+ }
}
}
+void Editor::applyAutocorrectionBeforeTypingIfAppropriate()
+{
+ if (!m_correctionPanelInfo.rangeToBeReplaced || !m_correctionPanelInfo.isActive)
+ return;
+
+ if (m_correctionPanelInfo.panelType != CorrectionPanelInfo::PanelTypeCorrection)
+ return;
+
+ Position caretPosition = m_frame->selection()->selection().start();
+
+ // Pending correction should always be where caret is. But in case this is not always true, we still want to dismiss the panel without accepting the correction.
+ ASSERT(m_correctionPanelInfo.rangeToBeReplaced->endPosition() == caretPosition);
+ dismissCorrectionPanel(m_correctionPanelInfo.rangeToBeReplaced->endPosition() == caretPosition ? ReasonForDismissingCorrectionPanelAccepted : ReasonForDismissingCorrectionPanelIgnored);
+}
+
PassRefPtr<Range> Editor::rangeForPoint(const IntPoint& windowPoint)
{
Document* document = m_frame->documentAtPoint(windowPoint);
@@ -3004,13 +3009,6 @@ void Editor::changeSelectionAfterCommand(const VisibleSelection& newSelection, b
if (newSelection.start().isOrphan() || newSelection.end().isOrphan())
return;
-#if SUPPORT_AUTOCORRECTION_PANEL
- // Check to see if the command introduced paragraph separator. If it did, we remove existing autocorrection underlines.
- // This is in consistency with the behavior in AppKit
- if (!inSameParagraph(m_frame->selection()->selection().visibleStart(), newSelection.visibleEnd()))
- m_frame->document()->markers()->removeMarkers(DocumentMarker::CorrectionIndicator);
-#endif
-
// If there is no selection change, don't bother sending shouldChangeSelection, but still call setSelection,
// because there is work that it must do in this situation.
// The old selection can be invalid here and calling shouldChangeSelection can produce some strange calls.
@@ -3018,13 +3016,13 @@ void Editor::changeSelectionAfterCommand(const VisibleSelection& newSelection, b
bool selectionDidNotChangeDOMPosition = newSelection == m_frame->selection()->selection();
if (selectionDidNotChangeDOMPosition || m_frame->selection()->shouldChangeSelection(newSelection))
m_frame->selection()->setSelection(newSelection, closeTyping, clearTypingStyle);
-
+
// Some editing operations change the selection visually without affecting its position within the DOM.
- // For example when you press return in the following (the caret is marked by ^):
+ // For example when you press return in the following (the caret is marked by ^):
// <div contentEditable="true"><div>^Hello</div></div>
// WebCore inserts <div><br></div> *before* the current block, which correctly moves the paragraph down but which doesn't
// change the caret's DOM position (["hello", 0]). In these situations the above SelectionController::setSelection call
- // does not call EditorClient::respondToChangedSelection(), which, on the Mac, sends selection change notifications and
+ // does not call EditorClient::respondToChangedSelection(), which, on the Mac, sends selection change notifications and
// starts a new kill ring sequence, but we want to do these things (matches AppKit).
if (selectionDidNotChangeDOMPosition)
client()->respondToChangedSelection();
@@ -3142,8 +3140,7 @@ PassRefPtr<CSSMutableStyleDeclaration> Editor::selectionComputedStyle(bool& shou
if (!m_frame->selection()->typingStyle())
return mutableStyle;
- RefPtr<EditingStyle> typingStyle = m_frame->selection()->typingStyle();
- typingStyle->removeNonEditingProperties();
+ RefPtr<EditingStyle> typingStyle = m_frame->selection()->typingStyle()->copy();
typingStyle->prepareToApplyAt(position);
mutableStyle->merge(typingStyle->style());
@@ -3421,7 +3418,11 @@ unsigned Editor::countMatchesForText(const String& target, Range* range, FindOpt
if (!visibleRect.isEmpty()) {
GraphicsContext context((PlatformGraphicsContext*)0);
context.setPaintingDisabled(true);
+
+ PaintBehavior oldBehavior = m_frame->view()->paintBehavior();
+ m_frame->view()->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers);
m_frame->view()->paintContents(&context, visibleRect);
+ m_frame->view()->setPaintBehavior(oldBehavior);
}
}
}
@@ -3440,6 +3441,15 @@ void Editor::setMarkedTextMatchesAreHighlighted(bool flag)
void Editor::respondToChangedSelection(const VisibleSelection& oldSelection, bool closeTyping)
{
+#if SUPPORT_AUTOCORRECTION_PANEL
+ // Make sure there's no pending autocorrection before we call markMisspellingsAndBadGrammar() below.
+ VisibleSelection currentSelection(frame()->selection()->selection());
+ if (currentSelection != oldSelection) {
+ stopCorrectionPanelTimer();
+ dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
+ }
+#endif // SUPPORT_AUTOCORRECTION_PANEL
+
bool isContinuousSpellCheckingEnabled = this->isContinuousSpellCheckingEnabled();
bool isContinuousGrammarCheckingEnabled = isContinuousSpellCheckingEnabled && isGrammarCheckingEnabled();
if (isContinuousSpellCheckingEnabled) {
diff --git a/Source/WebCore/editing/Editor.h b/Source/WebCore/editing/Editor.h
index 2e61ce6..0a06a4a 100644
--- a/Source/WebCore/editing/Editor.h
+++ b/Source/WebCore/editing/Editor.h
@@ -198,7 +198,8 @@ public:
static bool commandIsSupportedFromMenuOrKeyBinding(const String& commandName); // Works without a frame.
bool insertText(const String&, Event* triggeringEvent);
- bool insertTextWithoutSendingTextEvent(const String&, bool selectInsertedText, Event* triggeringEvent);
+ bool insertTextForConfirmedComposition(const String& text);
+ bool insertTextWithoutSendingTextEvent(const String&, bool selectInsertedText, TextEvent* triggeringEvent);
bool insertLineBreak();
bool insertParagraphSeparator();
@@ -423,6 +424,7 @@ private:
void stopCorrectionPanelTimer();
void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel);
void applyCorrectionPanelInfo(const Vector<DocumentMarker::MarkerType>& markerTypesToAdd);
+ void applyAutocorrectionBeforeTypingIfAppropriate();
};
inline void Editor::setStartNewKillRingSequence(bool flag)
diff --git a/Source/WebCore/editing/EditorCommand.cpp b/Source/WebCore/editing/EditorCommand.cpp
index 9e5bf9f..451d855 100644
--- a/Source/WebCore/editing/EditorCommand.cpp
+++ b/Source/WebCore/editing/EditorCommand.cpp
@@ -930,6 +930,26 @@ static bool executeRemoveFormat(Frame* frame, Event*, EditorCommandSource, const
return true;
}
+static bool executeScrollPageBackward(Frame* frame, Event*, EditorCommandSource, const String&)
+{
+ return frame->eventHandler()->logicalScrollRecursively(ScrollBlockDirectionBackward, ScrollByPage);
+}
+
+static bool executeScrollPageForward(Frame* frame, Event*, EditorCommandSource, const String&)
+{
+ return frame->eventHandler()->logicalScrollRecursively(ScrollBlockDirectionForward, ScrollByPage);
+}
+
+static bool executeScrollToBeginningOfDocument(Frame* frame, Event*, EditorCommandSource, const String&)
+{
+ return frame->eventHandler()->logicalScrollRecursively(ScrollBlockDirectionBackward, ScrollByDocument);
+}
+
+static bool executeScrollToEndOfDocument(Frame* frame, Event*, EditorCommandSource, const String&)
+{
+ return frame->eventHandler()->logicalScrollRecursively(ScrollBlockDirectionForward, ScrollByDocument);
+}
+
static bool executeSelectAll(Frame* frame, Event*, EditorCommandSource, const String&)
{
frame->selection()->selectAll();
@@ -1477,6 +1497,10 @@ static const CommandMap& createCommandMap()
{ "Print", { executePrint, supported, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "Redo", { executeRedo, supported, enabledRedo, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "RemoveFormat", { executeRemoveFormat, supported, enabledRangeInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
+ { "ScrollPageBackward", { executeScrollPageBackward, supportedFromMenuOrKeyBinding, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
+ { "ScrollPageForward", { executeScrollPageForward, supportedFromMenuOrKeyBinding, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
+ { "ScrollToBeginningOfDocument", { executeScrollToBeginningOfDocument, supportedFromMenuOrKeyBinding, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
+ { "ScrollToEndOfDocument", { executeScrollToEndOfDocument, supportedFromMenuOrKeyBinding, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "SelectAll", { executeSelectAll, supported, enabled, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "SelectLine", { executeSelectLine, supportedFromMenuOrKeyBinding, enabledVisibleSelection, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
{ "SelectParagraph", { executeSelectParagraph, supportedFromMenuOrKeyBinding, enabledVisibleSelection, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } },
diff --git a/Source/WebCore/editing/FormatBlockCommand.cpp b/Source/WebCore/editing/FormatBlockCommand.cpp
index e43f330..58157af 100644
--- a/Source/WebCore/editing/FormatBlockCommand.cpp
+++ b/Source/WebCore/editing/FormatBlockCommand.cpp
@@ -67,6 +67,9 @@ void FormatBlockCommand::formatRange(const Position& start, const Position& end,
RefPtr<Range> range = Range::create(document(), start, endOfSelection);
Element* refNode = enclosingBlockFlowElement(end);
Element* root = editableRootForPosition(start);
+ // Root is null for elements with contenteditable=false.
+ if (!root)
+ return;
if (isElementForFormatBlock(refNode->tagQName()) && start == startOfBlock(start)
&& (end == endOfBlock(end) || isNodeVisiblyContainedWithin(refNode, range.get()))
&& refNode != root && !root->isDescendantOf(refNode)) {
diff --git a/Source/WebCore/editing/HTMLInterchange.cpp b/Source/WebCore/editing/HTMLInterchange.cpp
index 16b330d..1ce06ab 100644
--- a/Source/WebCore/editing/HTMLInterchange.cpp
+++ b/Source/WebCore/editing/HTMLInterchange.cpp
@@ -26,10 +26,10 @@
#include "config.h"
#include "HTMLInterchange.h"
-#include "CharacterNames.h"
#include "Text.h"
#include "TextIterator.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/editing/InsertListCommand.cpp b/Source/WebCore/editing/InsertListCommand.cpp
index 9348786..c24c683 100644
--- a/Source/WebCore/editing/InsertListCommand.cpp
+++ b/Source/WebCore/editing/InsertListCommand.cpp
@@ -72,7 +72,7 @@ PassRefPtr<HTMLElement> InsertListCommand::mergeWithNeighboringLists(PassRefPtr<
if (!list || !list->nextElementSibling() || !list->nextElementSibling()->isHTMLElement())
return list.release();
- RefPtr<HTMLElement> nextList = static_cast<HTMLElement*>(list->nextElementSibling());
+ RefPtr<HTMLElement> nextList = toHTMLElement(list->nextElementSibling());
if (canMergeLists(list.get(), nextList.get())) {
mergeIdenticalElements(list, nextList);
return nextList.release();
diff --git a/Source/WebCore/editing/InsertTextCommand.cpp b/Source/WebCore/editing/InsertTextCommand.cpp
index fc18e91..1ec11ad 100644
--- a/Source/WebCore/editing/InsertTextCommand.cpp
+++ b/Source/WebCore/editing/InsertTextCommand.cpp
@@ -26,7 +26,6 @@
#include "config.h"
#include "InsertTextCommand.h"
-#include "CharacterNames.h"
#include "CSSComputedStyleDeclaration.h"
#include "CSSMutableStyleDeclaration.h"
#include "CSSPropertyNames.h"
@@ -41,6 +40,7 @@
#include "TextIterator.h"
#include "TypingCommand.h"
#include "visible_units.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -61,13 +61,13 @@ Position InsertTextCommand::prepareForTextInsertion(const Position& p)
if (!pos.node()->isTextNode()) {
RefPtr<Node> textNode = document()->createEditingTextNode("");
insertNodeAt(textNode.get(), pos);
- return Position(textNode.get(), 0);
+ return firstPositionInNode(textNode.get());
}
if (isTabSpanTextNode(pos.node())) {
RefPtr<Node> textNode = document()->createEditingTextNode("");
insertNodeAtTabSpanPosition(textNode.get(), pos);
- return Position(textNode.get(), 0);
+ return firstPositionInNode(textNode.get());
}
return pos;
@@ -83,30 +83,32 @@ bool InsertTextCommand::performTrivialReplace(const String& text, bool selectIns
if (text.contains('\t') || text.contains(' ') || text.contains('\n'))
return false;
- Position start = endingSelection().start();
- Position end = endingSelection().end();
-
- if (start.node() != end.node() || !start.node()->isTextNode() || isTabSpanTextNode(start.node()))
+ Position start = endingSelection().start().parentAnchoredEquivalent();
+ Position end = endingSelection().end().parentAnchoredEquivalent();
+ ASSERT(start.anchorType() == Position::PositionIsOffsetInAnchor);
+ ASSERT(end.anchorType() == Position::PositionIsOffsetInAnchor);
+
+ if (start.containerNode() != end.containerNode() || !start.containerNode()->isTextNode() || isTabSpanTextNode(start.containerNode()))
return false;
-
- replaceTextInNode(static_cast<Text*>(start.node()), start.deprecatedEditingOffset(), end.deprecatedEditingOffset() - start.deprecatedEditingOffset(), text);
-
- Position endPosition(start.node(), start.deprecatedEditingOffset() + text.length());
-
+
+ replaceTextInNode(static_cast<Text*>(start.containerNode()), start.offsetInContainerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), text);
+
+ Position endPosition(start.containerNode(), start.offsetInContainerNode() + text.length());
+
// We could have inserted a part of composed character sequence,
// so we are basically treating ending selection as a range to avoid validation.
// <http://bugs.webkit.org/show_bug.cgi?id=15781>
VisibleSelection forcedEndingSelection;
forcedEndingSelection.setWithoutValidation(start, endPosition);
setEndingSelection(forcedEndingSelection);
-
+
if (!selectInsertedText)
setEndingSelection(VisibleSelection(endingSelection().visibleEnd()));
return true;
}
-void InsertTextCommand::input(const String& text, bool selectInsertedText)
+void InsertTextCommand::input(const String& text, bool selectInsertedText, RebalanceType whitespaceRebalance)
{
ASSERT(text.find('\n') == notFound);
@@ -170,13 +172,19 @@ void InsertTextCommand::input(const String& text, bool selectInsertedText)
int offset = startPosition.deprecatedEditingOffset();
insertTextIntoNode(textNode, offset, text);
- endPosition = Position(textNode, offset + text.length());
-
- // The insertion may require adjusting adjacent whitespace, if it is present.
- rebalanceWhitespaceAt(endPosition);
- // Rebalancing on both sides isn't necessary if we've inserted a space.
- if (text != " ")
- rebalanceWhitespaceAt(startPosition);
+ endPosition = Position(textNode, offset + text.length(), Position::PositionIsOffsetInAnchor);
+
+ if (whitespaceRebalance == RebalanceLeadingAndTrailingWhitespaces) {
+ // The insertion may require adjusting adjacent whitespace, if it is present.
+ rebalanceWhitespaceAt(endPosition);
+ // Rebalancing on both sides isn't necessary if we've inserted only spaces.
+ if (!shouldRebalanceLeadingWhitespaceFor(text))
+ rebalanceWhitespaceAt(startPosition);
+ } else {
+ ASSERT(whitespaceRebalance == RebalanceAllWhitespaces);
+ if (canRebalance(startPosition) && canRebalance(endPosition))
+ rebalanceWhitespaceOnTextSubstring(textNode, startPosition.deprecatedEditingOffset(), endPosition.deprecatedEditingOffset());
+ }
}
// We could have inserted a part of composed character sequence,
@@ -207,7 +215,7 @@ Position InsertTextCommand::insertTab(const Position& pos)
// keep tabs coalesced in tab span
if (isTabSpanTextNode(node)) {
insertTextIntoNode(static_cast<Text *>(node), offset, "\t");
- return Position(node, offset + 1);
+ return Position(node, offset + 1, Position::PositionIsOffsetInAnchor);
}
// create new tab span
@@ -230,9 +238,9 @@ Position InsertTextCommand::insertTab(const Position& pos)
insertNodeBefore(spanNode, textNode);
}
}
-
+
// return the position following the new tab
- return Position(spanNode->lastChild(), caretMaxOffset(spanNode->lastChild()));
+ return lastPositionInNode(spanNode.get());
}
bool InsertTextCommand::isInsertTextCommand() const
diff --git a/Source/WebCore/editing/InsertTextCommand.h b/Source/WebCore/editing/InsertTextCommand.h
index 77ae016..672e576 100644
--- a/Source/WebCore/editing/InsertTextCommand.h
+++ b/Source/WebCore/editing/InsertTextCommand.h
@@ -32,14 +32,20 @@ namespace WebCore {
class InsertTextCommand : public CompositeEditCommand {
public:
+ enum RebalanceType {
+ RebalanceLeadingAndTrailingWhitespaces,
+ RebalanceAllWhitespaces
+ };
+
static PassRefPtr<InsertTextCommand> create(Document* document)
{
return adoptRef(new InsertTextCommand(document));
}
- void input(const String& text, bool selectInsertedText = false);
+ void input(const String& text, bool selectInsertedText = false, RebalanceType = RebalanceLeadingAndTrailingWhitespaces);
private:
+
InsertTextCommand(Document*);
void deleteCharacter();
diff --git a/Source/WebCore/editing/MarkupAccumulator.cpp b/Source/WebCore/editing/MarkupAccumulator.cpp
index f6dbd8b..f4489c5 100644
--- a/Source/WebCore/editing/MarkupAccumulator.cpp
+++ b/Source/WebCore/editing/MarkupAccumulator.cpp
@@ -28,7 +28,6 @@
#include "MarkupAccumulator.h"
#include "CDATASection.h"
-#include "CharacterNames.h"
#include "Comment.h"
#include "DocumentFragment.h"
#include "DocumentType.h"
@@ -38,6 +37,7 @@
#include "KURL.h"
#include "ProcessingInstruction.h"
#include "XMLNSNames.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/editing/MarkupAccumulator.h b/Source/WebCore/editing/MarkupAccumulator.h
index 5a9c884..0bfc6e6 100644
--- a/Source/WebCore/editing/MarkupAccumulator.h
+++ b/Source/WebCore/editing/MarkupAccumulator.h
@@ -72,7 +72,7 @@ public:
String serializeNodes(Node* node, Node* nodeToSkip, EChildrenOnly childrenOnly);
protected:
- void appendString(const String&);
+ virtual void appendString(const String&);
void appendStartTag(Node*, Namespaces* = 0);
void appendEndTag(Node*);
static size_t totalLength(const Vector<String>&);
diff --git a/Source/WebCore/editing/MoveSelectionCommand.cpp b/Source/WebCore/editing/MoveSelectionCommand.cpp
index 3a1cae0..0f23b29 100644
--- a/Source/WebCore/editing/MoveSelectionCommand.cpp
+++ b/Source/WebCore/editing/MoveSelectionCommand.cpp
@@ -39,25 +39,21 @@ MoveSelectionCommand::MoveSelectionCommand(PassRefPtr<DocumentFragment> fragment
void MoveSelectionCommand::doApply()
{
- VisibleSelection selection = endingSelection();
- ASSERT(selection.isNonOrphanedRange());
+ ASSERT(endingSelection().isNonOrphanedRange());
Position pos = m_position;
if (pos.isNull())
return;
-
+
// Update the position otherwise it may become invalid after the selection is deleted.
- Node *positionNode = m_position.node();
- int positionOffset = m_position.deprecatedEditingOffset();
- Position selectionEnd = selection.end();
- int selectionEndOffset = selectionEnd.deprecatedEditingOffset();
- if (selectionEnd.node() == positionNode && selectionEndOffset < positionOffset) {
- positionOffset -= selectionEndOffset;
- Position selectionStart = selection.start();
- if (selectionStart.node() == positionNode) {
- positionOffset += selectionStart.deprecatedEditingOffset();
- }
- pos = Position(positionNode, positionOffset);
+ Position selectionEnd = endingSelection().end();
+ if (pos.anchorType() == Position::PositionIsOffsetInAnchor && selectionEnd.anchorType() == Position::PositionIsOffsetInAnchor
+ && selectionEnd.containerNode() == pos.containerNode() && selectionEnd.offsetInContainerNode() < pos.offsetInContainerNode()) {
+ pos.moveToOffset(pos.offsetInContainerNode() - selectionEnd.offsetInContainerNode());
+
+ Position selectionStart = endingSelection().start();
+ if (selectionStart.anchorType() == Position::PositionIsOffsetInAnchor && selectionStart.containerNode() == pos.containerNode())
+ pos.moveToOffset(pos.offsetInContainerNode() + selectionStart.offsetInContainerNode());
}
deleteSelection(m_smartDelete);
@@ -70,11 +66,11 @@ void MoveSelectionCommand::doApply()
pos = endingSelection().start();
setEndingSelection(VisibleSelection(pos, endingSelection().affinity()));
- if (!positionNode->inDocument()) {
+ if (!pos.anchorNode()->inDocument()) {
// Document was modified out from under us.
return;
}
- applyCommandToComposite(ReplaceSelectionCommand::create(positionNode->document(), m_fragment, true, m_smartInsert));
+ applyCommandToComposite(ReplaceSelectionCommand::create(document(), m_fragment, true, m_smartInsert));
}
EditAction MoveSelectionCommand::editingAction() const
diff --git a/Source/WebCore/editing/ReplaceSelectionCommand.cpp b/Source/WebCore/editing/ReplaceSelectionCommand.cpp
index f47cb4e..846b932 100644
--- a/Source/WebCore/editing/ReplaceSelectionCommand.cpp
+++ b/Source/WebCore/editing/ReplaceSelectionCommand.cpp
@@ -476,7 +476,7 @@ void ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance()
for (RefPtr<Node> node = m_firstNodeInserted.get(); node; node = node->traverseNextNode()) {
// FIXME: <rdar://problem/5371536> Style rules that match pasted content can change it's appearance
if (isStyleSpan(node.get())) {
- HTMLElement* e = static_cast<HTMLElement*>(node.get());
+ HTMLElement* e = toHTMLElement(node.get());
// There are other styles that style rules can give to style spans,
// but these are the two important ones because they'll prevent
// inserted content from appearing in the right paragraph.
@@ -496,10 +496,10 @@ void ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance()
void ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds()
{
document()->updateLayoutIgnorePendingStylesheets();
- if (!m_lastLeafInserted->renderer() &&
- m_lastLeafInserted->isTextNode() &&
- !enclosingNodeWithTag(Position(m_lastLeafInserted.get(), 0), selectTag) &&
- !enclosingNodeWithTag(Position(m_lastLeafInserted.get(), 0), scriptTag)) {
+ if (!m_lastLeafInserted->renderer()
+ && m_lastLeafInserted->isTextNode()
+ && !enclosingNodeWithTag(firstPositionInOrBeforeNode(m_lastLeafInserted.get()), selectTag)
+ && !enclosingNodeWithTag(firstPositionInOrBeforeNode(m_lastLeafInserted.get()), scriptTag)) {
if (m_firstNodeInserted == m_lastLeafInserted) {
removeNode(m_lastLeafInserted.get());
m_lastLeafInserted = 0;
@@ -620,7 +620,7 @@ void ReplaceSelectionCommand::handleStyleSpans()
if (!sourceDocumentStyleSpan)
return;
- RefPtr<EditingStyle> sourceDocumentStyle = EditingStyle::create(static_cast<HTMLElement*>(sourceDocumentStyleSpan)->getInlineStyleDecl());
+ RefPtr<EditingStyle> sourceDocumentStyle = EditingStyle::create(toHTMLElement(sourceDocumentStyleSpan)->getInlineStyleDecl());
ContainerNode* context = sourceDocumentStyleSpan->parentNode();
// If Mail wraps the fragment with a Paste as Quotation blockquote, or if you're pasting into a quoted region,
@@ -657,7 +657,7 @@ void ReplaceSelectionCommand::handleStyleSpans()
return;
}
- RefPtr<EditingStyle> copiedRangeStyle = EditingStyle::create(static_cast<HTMLElement*>(copiedRangeStyleSpan)->getInlineStyleDecl());
+ RefPtr<EditingStyle> copiedRangeStyle = EditingStyle::create(toHTMLElement(copiedRangeStyleSpan)->getInlineStyleDecl());
// We're going to put sourceDocumentStyleSpan's non-redundant styles onto copiedRangeStyleSpan,
// as long as they aren't overridden by ones on copiedRangeStyleSpan.
@@ -696,7 +696,7 @@ void ReplaceSelectionCommand::copyStyleToChildren(Node* parentNode, const CSSMut
// In this case, put a span tag around the child node.
RefPtr<Node> newNode = parentNode->cloneNode(false);
ASSERT(newNode->hasTagName(spanTag));
- HTMLElement* newSpan = static_cast<HTMLElement*>(newNode.get());
+ HTMLElement* newSpan = toHTMLElement(newNode.get());
setNodeAttribute(newSpan, styleAttr, parentStyle->cssText());
insertNodeAfter(newSpan, childNode);
ExceptionCode ec = 0;
@@ -707,7 +707,7 @@ void ReplaceSelectionCommand::copyStyleToChildren(Node* parentNode, const CSSMut
// Copy the style attribute and merge them into the child node. We don't want to override
// existing styles, so don't clobber on merge.
RefPtr<CSSMutableStyleDeclaration> newStyle = parentStyle->copy();
- HTMLElement* childElement = static_cast<HTMLElement*>(childNode);
+ HTMLElement* childElement = toHTMLElement(childNode);
RefPtr<CSSMutableStyleDeclaration> existingStyles = childElement->getInlineStyleDecl()->copy();
existingStyles->merge(newStyle.get(), false);
setNodeAttribute(childElement, styleAttr, existingStyles->cssText());
@@ -743,7 +743,7 @@ void ReplaceSelectionCommand::mergeEndIfNeeded()
if (endOfParagraph(startOfParagraphToMove) == destination) {
RefPtr<Node> placeholder = createBreakElement(document());
insertNodeBefore(placeholder, startOfParagraphToMove.deepEquivalent().node());
- destination = VisiblePosition(Position(placeholder.get(), 0));
+ destination = VisiblePosition(positionBeforeNode(placeholder.get()));
}
moveParagraph(startOfParagraphToMove, endOfParagraph(startOfParagraphToMove), destination);
@@ -1045,7 +1045,7 @@ void ReplaceSelectionCommand::doApply()
if (isListItem(enclosingNode)) {
RefPtr<Node> newListItem = createListItemElement(document());
insertNodeAfter(newListItem, enclosingNode);
- setEndingSelection(VisiblePosition(Position(newListItem, 0)));
+ setEndingSelection(VisiblePosition(firstPositionInNode(newListItem.get())));
} else
// Use a default paragraph element (a plain div) for the empty paragraph, using the last paragraph
// block's style seems to annoy users.
@@ -1124,7 +1124,7 @@ bool ReplaceSelectionCommand::shouldRemoveEndBR(Node* endBR, const VisiblePositi
if (!endBR || !endBR->inDocument())
return false;
- VisiblePosition visiblePos(Position(endBR, 0));
+ VisiblePosition visiblePos(positionBeforeNode(endBR));
// Don't remove the br if nothing was inserted.
if (visiblePos.previous() == originalVisPosBeforeEndBR)
@@ -1261,7 +1261,7 @@ bool ReplaceSelectionCommand::performTrivialReplace(const ReplacementFragment& f
{
if (!fragment.firstChild() || fragment.firstChild() != fragment.lastChild() || !fragment.firstChild()->isTextNode())
return false;
-
+
// FIXME: Would be nice to handle smart replace in the fast path.
if (m_smartReplace || fragment.hasInterchangeNewlineAtStart() || fragment.hasInterchangeNewlineAtEnd())
return false;
@@ -1270,20 +1270,22 @@ bool ReplaceSelectionCommand::performTrivialReplace(const ReplacementFragment& f
// Our fragment creation code handles tabs, spaces, and newlines, so we don't have to worry about those here.
String text(textNode->data());
- Position start = endingSelection().start();
- Position end = endingSelection().end();
-
- if (start.anchorNode() != end.anchorNode() || !start.anchorNode()->isTextNode())
+ Position start = endingSelection().start().parentAnchoredEquivalent();
+ Position end = endingSelection().end().parentAnchoredEquivalent();
+ ASSERT(start.anchorType() == Position::PositionIsOffsetInAnchor);
+ ASSERT(end.anchorType() == Position::PositionIsOffsetInAnchor);
+
+ if (start.containerNode() != end.containerNode() || !start.containerNode()->isTextNode())
return false;
-
- replaceTextInNode(static_cast<Text*>(start.anchorNode()), start.offsetInContainerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), text);
-
- end = Position(start.anchorNode(), start.offsetInContainerNode() + text.length());
-
+
+ replaceTextInNode(static_cast<Text*>(start.containerNode()), start.offsetInContainerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), text);
+
+ end = Position(start.containerNode(), start.offsetInContainerNode() + text.length(), Position::PositionIsOffsetInAnchor);
+
VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, end);
-
+
setEndingSelection(selectionAfterReplace);
-
+
return true;
}
diff --git a/Source/WebCore/editing/SelectionController.cpp b/Source/WebCore/editing/SelectionController.cpp
index fa0c32d..a574b5a 100644
--- a/Source/WebCore/editing/SelectionController.cpp
+++ b/Source/WebCore/editing/SelectionController.cpp
@@ -1707,7 +1707,7 @@ static HTMLFormElement* scanForForm(Node* start)
for (Node* node = start; node; node = node->traverseNextNode()) {
if (node->hasTagName(formTag))
return static_cast<HTMLFormElement*>(node);
- if (node->isHTMLElement() && static_cast<HTMLElement*>(node)->isFormControlElement())
+ if (node->isHTMLElement() && toHTMLElement(node)->isFormControlElement())
return static_cast<HTMLFormControlElement*>(node)->form();
if (node->hasTagName(frameTag) || node->hasTagName(iframeTag)) {
Node* childDocument = static_cast<HTMLFrameElementBase*>(node)->contentDocument();
@@ -1731,7 +1731,7 @@ HTMLFormElement* SelectionController::currentForm() const
for (node = start; node; node = node->parentNode()) {
if (node->hasTagName(formTag))
return static_cast<HTMLFormElement*>(node);
- if (node->isHTMLElement() && static_cast<HTMLElement*>(node)->isFormControlElement())
+ if (node->isHTMLElement() && toHTMLElement(node)->isFormControlElement())
return static_cast<HTMLFormControlElement*>(node)->form();
}
@@ -1781,7 +1781,7 @@ void SelectionController::setSelectionFromNone()
while (node && !node->hasTagName(bodyTag))
node = node->traverseNextNode();
if (node)
- setSelection(VisibleSelection(Position(node, 0), DOWNSTREAM));
+ setSelection(VisibleSelection(firstPositionInOrBeforeNode(node), DOWNSTREAM));
}
bool SelectionController::shouldChangeSelection(const VisibleSelection& newSelection) const
diff --git a/Source/WebCore/editing/SpellChecker.cpp b/Source/WebCore/editing/SpellChecker.cpp
index 1807474..f14a74d 100644
--- a/Source/WebCore/editing/SpellChecker.cpp
+++ b/Source/WebCore/editing/SpellChecker.cpp
@@ -141,7 +141,7 @@ void SpellChecker::didCheck(int sequence, const Vector<SpellCheckingResult>& res
}
int startOffset = 0;
- PositionIterator start = Position(m_requestNode, 0);
+ PositionIterator start = firstPositionInOrBeforeNode(m_requestNode.get());
for (size_t i = 0; i < results.size(); ++i) {
if (results[i].type() != DocumentMarker::Spelling && results[i].type() != DocumentMarker::Grammar)
continue;
diff --git a/Source/WebCore/editing/TextIterator.cpp b/Source/WebCore/editing/TextIterator.cpp
index 1fc7606..b621dc2 100644
--- a/Source/WebCore/editing/TextIterator.cpp
+++ b/Source/WebCore/editing/TextIterator.cpp
@@ -27,7 +27,6 @@
#include "config.h"
#include "TextIterator.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "HTMLElement.h"
#include "HTMLNames.h"
@@ -42,6 +41,7 @@
#include "TextBreakIterator.h"
#include "VisiblePosition.h"
#include "visible_units.h"
+#include <wtf/unicode/CharacterNames.h>
#if USE(ICU_UNICODE) && !UCONFIG_NO_COLLATION
#include "TextBreakIteratorInternalICU.h"
@@ -543,7 +543,7 @@ void TextIterator::handleTextBox()
unsigned runStart = max(textBoxStart, start);
// Check for collapsed space at the start of this run.
- InlineTextBox* firstTextBox = renderer->containsReversedText() ? m_sortedTextBoxes[0] : renderer->firstTextBox();
+ InlineTextBox* firstTextBox = renderer->containsReversedText() ? (m_sortedTextBoxes.isEmpty() ? 0 : m_sortedTextBoxes[0]) : renderer->firstTextBox();
bool needSpace = m_lastTextNodeEndedWithCollapsedSpace
|| (m_textBox == firstTextBox && textBoxStart == runStart && runStart > 0);
if (needSpace && !isCollapsibleWhitespace(m_lastCharacter) && m_lastCharacter) {
@@ -551,7 +551,7 @@ void TextIterator::handleTextBox()
unsigned spaceRunStart = runStart - 1;
while (spaceRunStart > 0 && str[spaceRunStart - 1] == ' ')
--spaceRunStart;
- emitText(m_node, spaceRunStart, spaceRunStart + 1);
+ emitText(m_node, renderer, spaceRunStart, spaceRunStart + 1);
} else
emitCharacter(' ', m_node, 0, runStart, runStart);
return;
@@ -1922,6 +1922,11 @@ inline SearchBuffer::SearchBuffer(const String& target, FindOptions options)
inline SearchBuffer::~SearchBuffer()
{
+ // Leave the static object pointing to a valid string.
+ UErrorCode status = U_ZERO_ERROR;
+ usearch_setPattern(WebCore::searcher(), &newlineCharacter, 1, &status);
+ ASSERT(status == U_ZERO_ERROR);
+
unlockSearcher();
}
diff --git a/Source/WebCore/editing/TypingCommand.cpp b/Source/WebCore/editing/TypingCommand.cpp
index d54b388..9723c2d 100644
--- a/Source/WebCore/editing/TypingCommand.cpp
+++ b/Source/WebCore/editing/TypingCommand.cpp
@@ -47,7 +47,8 @@ namespace WebCore {
using namespace HTMLNames;
-TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, const String &textToInsert, bool selectInsertedText, TextGranularity granularity, bool killRing)
+TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, const String &textToInsert, bool selectInsertedText, TextGranularity granularity, TextCompositionType compositionType,
+ bool killRing)
: CompositeEditCommand(document),
m_commandType(commandType),
m_textToInsert(textToInsert),
@@ -55,6 +56,7 @@ TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, con
m_selectInsertedText(selectInsertedText),
m_smartDelete(false),
m_granularity(granularity),
+ m_compositionType(compositionType),
m_killRing(killRing),
m_openedByBackwardDelete(false)
{
@@ -133,18 +135,18 @@ void TypingCommand::updateSelectionIfDifferentFromCurrentSelection(TypingCommand
}
-void TypingCommand::insertText(Document* document, const String& text, bool selectInsertedText, bool insertedTextIsComposition)
+void TypingCommand::insertText(Document* document, const String& text, bool selectInsertedText, TextCompositionType composition)
{
ASSERT(document);
Frame* frame = document->frame();
ASSERT(frame);
- insertText(document, text, frame->selection()->selection(), selectInsertedText, insertedTextIsComposition);
+ insertText(document, text, frame->selection()->selection(), selectInsertedText, composition);
}
// FIXME: We shouldn't need to take selectionForInsertion. It should be identical to SelectionController's current selection.
-void TypingCommand::insertText(Document* document, const String& text, const VisibleSelection& selectionForInsertion, bool selectInsertedText, bool insertedTextIsComposition)
+void TypingCommand::insertText(Document* document, const String& text, const VisibleSelection& selectionForInsertion, bool selectInsertedText, TextCompositionType compositionType)
{
#if REMOVE_MARKERS_UPON_EDITING
if (!text.isEmpty())
@@ -161,7 +163,7 @@ void TypingCommand::insertText(Document* document, const String& text, const Vis
String newText = text;
Node* startNode = selectionForInsertion.start().node();
- if (startNode && startNode->rootEditableElement() && !insertedTextIsComposition) {
+ if (startNode && startNode->rootEditableElement() && compositionType != TextCompositionUpdate) {
// Send BeforeTextInsertedEvent. The event handler will update text if necessary.
ExceptionCode ec = 0;
RefPtr<BeforeTextInsertedEvent> evt = BeforeTextInsertedEvent::create(text);
@@ -182,11 +184,13 @@ void TypingCommand::insertText(Document* document, const String& text, const Vis
lastTypingCommand->setStartingSelection(selectionForInsertion);
lastTypingCommand->setEndingSelection(selectionForInsertion);
}
+
+ lastTypingCommand->setCompositionType(compositionType);
lastTypingCommand->insertText(newText, selectInsertedText);
return;
}
- RefPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, selectInsertedText);
+ RefPtr<TypingCommand> cmd = TypingCommand::create(document, InsertText, newText, selectInsertedText, compositionType);
if (changeSelection) {
cmd->setStartingSelection(selectionForInsertion);
cmd->setEndingSelection(selectionForInsertion);
@@ -386,7 +390,8 @@ void TypingCommand::insertTextRunWithoutNewlines(const String &text, bool select
command->setStartingSelection(endingSelection());
command->setEndingSelection(endingSelection());
}
- command->input(text, selectInsertedText);
+ command->input(text, selectInsertedText,
+ m_compositionType == TextCompositionNone ? InsertTextCommand::RebalanceLeadingAndTrailingWhitespaces : InsertTextCommand::RebalanceAllWhitespaces);
typingAddedToOpenCommand(InsertText);
}
@@ -431,7 +436,7 @@ bool TypingCommand::makeEditableRootEmpty()
removeNode(child);
addBlockPlaceholderIfNeeded(root);
- setEndingSelection(VisibleSelection(Position(root, 0), DOWNSTREAM));
+ setEndingSelection(VisibleSelection(firstPositionInNode(root), DOWNSTREAM));
return true;
}
@@ -490,7 +495,7 @@ void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing)
selection.modify(SelectionController::AlterationExtend, DirectionBackward, granularity);
// If the caret is just after a table, select the table and don't delete anything.
} else if (Node* table = isFirstPositionAfterTable(visibleStart)) {
- setEndingSelection(VisibleSelection(Position(table, 0), endingSelection().start(), DOWNSTREAM));
+ setEndingSelection(VisibleSelection(positionAfterNode(table), endingSelection().start(), DOWNSTREAM));
typingAddedToOpenCommand(DeleteKey);
return;
}
@@ -591,7 +596,7 @@ void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki
extraCharacters = selectionToDelete.end().deprecatedEditingOffset() - selectionToDelete.start().deprecatedEditingOffset();
else
extraCharacters = selectionToDelete.end().deprecatedEditingOffset();
- extent = Position(extent.node(), extent.deprecatedEditingOffset() + extraCharacters);
+ extent = Position(extent.node(), extent.deprecatedEditingOffset() + extraCharacters, Position::PositionIsOffsetInAnchor);
}
selectionAfterUndo.setWithoutValidation(startingSelection().start(), extent);
}
diff --git a/Source/WebCore/editing/TypingCommand.h b/Source/WebCore/editing/TypingCommand.h
index 284ebc0..b34bdc1 100644
--- a/Source/WebCore/editing/TypingCommand.h
+++ b/Source/WebCore/editing/TypingCommand.h
@@ -42,11 +42,17 @@ public:
InsertParagraphSeparatorInQuotedContent
};
+ enum TextCompositionType {
+ TextCompositionNone,
+ TextCompositionUpdate,
+ TextCompositionConfirm
+ };
+
static void deleteSelection(Document*, bool smartDelete = false);
static void deleteKeyPressed(Document*, bool smartDelete = false, TextGranularity = CharacterGranularity, bool killRing = false);
static void forwardDeleteKeyPressed(Document*, bool smartDelete = false, TextGranularity = CharacterGranularity, bool killRing = false);
- static void insertText(Document*, const String&, bool selectInsertedText = false, bool insertedTextIsComposition = false);
- static void insertText(Document*, const String&, const VisibleSelection&, bool selectInsertedText = false, bool insertedTextIsComposition = false);
+ static void insertText(Document*, const String&, bool selectInsertedText = false, TextCompositionType = TextCompositionNone);
+ static void insertText(Document*, const String&, const VisibleSelection&, bool selectInsertedText = false, TextCompositionType = TextCompositionNone);
static void insertLineBreak(Document*);
static void insertParagraphSeparator(Document*);
static void insertParagraphSeparatorInQuotedContent(Document*);
@@ -64,14 +70,20 @@ public:
void deleteKeyPressed(TextGranularity, bool killRing);
void forwardDeleteKeyPressed(TextGranularity, bool killRing);
void deleteSelection(bool smartDelete);
+ void setCompositionType(TextCompositionType type) { m_compositionType = type; }
private:
static PassRefPtr<TypingCommand> create(Document* document, ETypingCommand command, const String& text = "", bool selectInsertedText = false, TextGranularity granularity = CharacterGranularity, bool killRing = false)
{
- return adoptRef(new TypingCommand(document, command, text, selectInsertedText, granularity, killRing));
+ return adoptRef(new TypingCommand(document, command, text, selectInsertedText, granularity, TextCompositionNone, killRing));
+ }
+
+ static PassRefPtr<TypingCommand> create(Document* document, ETypingCommand command, const String& text, bool selectInsertedText, TextCompositionType compositionType)
+ {
+ return adoptRef(new TypingCommand(document, command, text, selectInsertedText, CharacterGranularity, compositionType, false));
}
- TypingCommand(Document*, ETypingCommand, const String& text, bool selectInsertedText, TextGranularity, bool killRing);
+ TypingCommand(Document*, ETypingCommand, const String& text, bool selectInsertedText, TextGranularity, TextCompositionType, bool killRing);
bool smartDelete() const { return m_smartDelete; }
void setSmartDelete(bool smartDelete) { m_smartDelete = smartDelete; }
@@ -94,6 +106,7 @@ private:
bool m_selectInsertedText;
bool m_smartDelete;
TextGranularity m_granularity;
+ TextCompositionType m_compositionType;
bool m_killRing;
bool m_preservesTypingStyle;
diff --git a/Source/WebCore/editing/VisibleSelection.cpp b/Source/WebCore/editing/VisibleSelection.cpp
index 035afb8..9096dc5 100644
--- a/Source/WebCore/editing/VisibleSelection.cpp
+++ b/Source/WebCore/editing/VisibleSelection.cpp
@@ -26,7 +26,6 @@
#include "config.h"
#include "VisibleSelection.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "Element.h"
#include "htmlediting.h"
@@ -34,10 +33,10 @@
#include "VisiblePosition.h"
#include "visible_units.h"
#include "Range.h"
-
+#include <stdio.h>
#include <wtf/Assertions.h>
#include <wtf/text/CString.h>
-#include <stdio.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -173,6 +172,9 @@ PassRefPtr<Range> VisibleSelection::toNormalizedRange() const
s = s.parentAnchoredEquivalent();
e = e.parentAnchoredEquivalent();
}
+
+ if (s.isNull() || e.isNull())
+ return 0;
// VisibleSelections are supposed to always be valid. This constructor will ASSERT
// if a valid range could not be created, which is fine for this callsite.
@@ -432,7 +434,6 @@ void VisibleSelection::setWithoutValidation(const Position& base, const Position
{
ASSERT(!base.isNull());
ASSERT(!extent.isNull());
- ASSERT(base != extent);
ASSERT(m_affinity == DOWNSTREAM);
m_base = base;
m_extent = extent;
@@ -444,7 +445,7 @@ void VisibleSelection::setWithoutValidation(const Position& base, const Position
m_start = extent;
m_end = base;
}
- m_selectionType = RangeSelection;
+ m_selectionType = base == extent ? CaretSelection : RangeSelection;
}
void VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries()
@@ -526,13 +527,13 @@ void VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries()
Position p = nextVisuallyDistinctCandidate(m_start);
Node* shadowAncestor = startRoot ? startRoot->shadowAncestorNode() : 0;
if (p.isNull() && startRoot && (shadowAncestor != startRoot))
- p = Position(shadowAncestor, 0);
+ p = positionBeforeNode(shadowAncestor);
while (p.isNotNull() && !(lowestEditableAncestor(p.node()) == baseEditableAncestor && !isEditablePosition(p))) {
Node* root = editableRootForPosition(p);
shadowAncestor = root ? root->shadowAncestorNode() : 0;
p = isAtomicNode(p.node()) ? positionInParentAfterNode(p.node()) : nextVisuallyDistinctCandidate(p);
if (p.isNull() && (shadowAncestor != root))
- p = Position(shadowAncestor, 0);
+ p = positionBeforeNode(shadowAncestor);
}
VisiblePosition next(p);
diff --git a/Source/WebCore/editing/htmlediting.cpp b/Source/WebCore/editing/htmlediting.cpp
index 90db3ef..cb157d2 100644
--- a/Source/WebCore/editing/htmlediting.cpp
+++ b/Source/WebCore/editing/htmlediting.cpp
@@ -26,7 +26,6 @@
#include "config.h"
#include "htmlediting.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "EditingText.h"
#include "HTMLBRElement.h"
@@ -46,6 +45,7 @@
#include "VisiblePosition.h"
#include "visible_units.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#if ENABLE(WML)
#include "WMLNames.h"
@@ -356,25 +356,27 @@ int lastOffsetForEditing(const Node* node)
String stringWithRebalancedWhitespace(const String& string, bool startIsStartOfParagraph, bool endIsEndOfParagraph)
{
- DEFINE_STATIC_LOCAL(String, twoSpaces, (" "));
- DEFINE_STATIC_LOCAL(String, nbsp, ("\xa0"));
- DEFINE_STATIC_LOCAL(String, pattern, (" \xa0"));
+ Vector<UChar> rebalancedString;
+ append(rebalancedString, string);
- String rebalancedString = string;
+ bool previousCharacterWasSpace = false;
+ for (size_t i = 0; i < rebalancedString.size(); i++) {
+ if (!isWhitespace(rebalancedString[i])) {
+ previousCharacterWasSpace = false;
+ continue;
+ }
- rebalancedString.replace(noBreakSpace, ' ');
- rebalancedString.replace('\n', ' ');
- rebalancedString.replace('\t', ' ');
-
- rebalancedString.replace(twoSpaces, pattern);
-
- if (startIsStartOfParagraph && rebalancedString[0] == ' ')
- rebalancedString.replace(0, 1, nbsp);
- int end = rebalancedString.length() - 1;
- if (endIsEndOfParagraph && rebalancedString[end] == ' ')
- rebalancedString.replace(end, 1, nbsp);
+ if (previousCharacterWasSpace || (!i && startIsStartOfParagraph) || (i + 1 == rebalancedString.size() && endIsEndOfParagraph)) {
+ rebalancedString[i] = noBreakSpace;
+ previousCharacterWasSpace = false;
+ } else {
+ rebalancedString[i] = ' ';
+ previousCharacterWasSpace = true;
+ }
+
+ }
- return rebalancedString;
+ return String::adopt(rebalancedString);
}
bool isTableStructureNode(const Node *node)
@@ -660,7 +662,7 @@ HTMLElement* enclosingList(Node* node)
for (ContainerNode* n = node->parentNode(); n; n = n->parentNode()) {
if (n->hasTagName(ulTag) || n->hasTagName(olTag))
- return static_cast<HTMLElement*>(n);
+ return toHTMLElement(n);
if (n == root)
return 0;
}
@@ -668,7 +670,7 @@ HTMLElement* enclosingList(Node* node)
return 0;
}
-HTMLElement* enclosingListChild(Node *node)
+Node* enclosingListChild(Node *node)
{
if (!node)
return 0;
@@ -679,7 +681,7 @@ HTMLElement* enclosingListChild(Node *node)
// FIXME: This function is inappropriately named if it starts with node instead of node->parentNode()
for (Node* n = node; n && n->parentNode(); n = n->parentNode()) {
if (n->hasTagName(liTag) || isListElement(n->parentNode()))
- return static_cast<HTMLElement*>(n);
+ return n;
if (n == root || isTableCell(n))
return 0;
}
@@ -692,7 +694,7 @@ static HTMLElement* embeddedSublist(Node* listItem)
// Check the DOM so that we'll find collapsed sublists without renderers.
for (Node* n = listItem->firstChild(); n; n = n->nextSibling()) {
if (isListElement(n))
- return static_cast<HTMLElement*>(n);
+ return toHTMLElement(n);
}
return 0;
@@ -703,7 +705,7 @@ static Node* appendedSublist(Node* listItem)
// Check the DOM so that we'll find collapsed sublists without renderers.
for (Node* n = listItem->nextSibling(); n; n = n->nextSibling()) {
if (isListElement(n))
- return static_cast<HTMLElement*>(n);
+ return toHTMLElement(n);
if (isListItem(listItem))
return 0;
}
diff --git a/Source/WebCore/editing/htmlediting.h b/Source/WebCore/editing/htmlediting.h
index 0208dfb..b71e879 100644
--- a/Source/WebCore/editing/htmlediting.h
+++ b/Source/WebCore/editing/htmlediting.h
@@ -26,10 +26,11 @@
#ifndef htmlediting_h
#define htmlediting_h
-#include <wtf/Forward.h>
-#include "HTMLNames.h"
#include "ExceptionCode.h"
+#include "HTMLNames.h"
#include "Position.h"
+#include <wtf/Forward.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -202,7 +203,7 @@ PassRefPtr<HTMLElement> createHTMLElement(Document*, const AtomicString&);
HTMLElement* enclosingList(Node*);
HTMLElement* outermostEnclosingList(Node*, Node* rootList = 0);
-HTMLElement* enclosingListChild(Node*);
+Node* enclosingListChild(Node*);
// -------------------------------------------------------------------------
// Element
@@ -231,8 +232,11 @@ VisibleSelection avoidIntersectionWithNode(const VisibleSelection&, Node*);
VisibleSelection selectionForParagraphIteration(const VisibleSelection&);
-// Miscellaneous functions on String
-
+// Miscellaneous functions on Text
+inline bool isWhitespace(UChar c)
+{
+ return c == noBreakSpace || c == ' ' || c == '\n' || c == '\t';
+}
String stringWithRebalancedWhitespace(const String&, bool, bool);
const String& nonBreakingSpaceString();
diff --git a/Source/WebCore/editing/mac/SelectionControllerMac.mm b/Source/WebCore/editing/mac/SelectionControllerMac.mm
index 730eb60..119d406 100644
--- a/Source/WebCore/editing/mac/SelectionControllerMac.mm
+++ b/Source/WebCore/editing/mac/SelectionControllerMac.mm
@@ -33,6 +33,19 @@
namespace WebCore {
+static CGRect accessibilityConvertScreenRect(CGRect bounds)
+{
+ NSArray *screens = [NSScreen screens];
+ if ([screens count]) {
+ CGFloat screenHeight = NSHeight([[screens objectAtIndex:0] frame]);
+ bounds.origin.y = (screenHeight - (bounds.origin.y + bounds.size.height));
+ } else
+ bounds = CGRectZero;
+
+ return bounds;
+}
+
+
void SelectionController::notifyAccessibilityForSelectionChange()
{
Document* document = m_frame->document();
@@ -58,8 +71,8 @@ void SelectionController::notifyAccessibilityForSelectionChange()
viewRect = frameView->contentsToScreen(viewRect);
CGRect cgCaretRect = CGRectMake(selectionRect.x(), selectionRect.y(), selectionRect.width(), selectionRect.height());
CGRect cgViewRect = CGRectMake(viewRect.x(), viewRect.y(), viewRect.width(), viewRect.height());
- cgCaretRect = [[WebCoreViewFactory sharedFactory] accessibilityConvertScreenRect:cgCaretRect];
- cgViewRect = [[WebCoreViewFactory sharedFactory] accessibilityConvertScreenRect:cgViewRect];
+ cgCaretRect = accessibilityConvertScreenRect(cgCaretRect);
+ cgViewRect = accessibilityConvertScreenRect(cgViewRect);
UAZoomChangeFocus(&cgViewRect, &cgCaretRect, kUAZoomFocusTypeInsertionPoint);
}
diff --git a/Source/WebCore/editing/markup.cpp b/Source/WebCore/editing/markup.cpp
index 4cbdcce..34c3ec7 100644
--- a/Source/WebCore/editing/markup.cpp
+++ b/Source/WebCore/editing/markup.cpp
@@ -27,7 +27,6 @@
#include "markup.h"
#include "CDATASection.h"
-#include "CharacterNames.h"
#include "CSSComputedStyleDeclaration.h"
#include "CSSMutableStyleDeclaration.h"
#include "CSSPrimitiveValue.h"
@@ -56,6 +55,7 @@
#include "htmlediting.h"
#include "visible_units.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
@@ -124,7 +124,7 @@ public:
}
Node* serializeNodes(Node* startNode, Node* pastEnd);
- void appendString(const String& s) { return MarkupAccumulator::appendString(s); }
+ virtual void appendString(const String& s) { return MarkupAccumulator::appendString(s); }
void wrapWithNode(Node*, bool convertBlocksToInlines = false, RangeFullySelectsNode = DoesFullySelectNode);
void wrapWithStyleNode(CSSStyleDeclaration*, Document*, bool isBlock = false);
String takeResults();
@@ -184,7 +184,8 @@ String StyledMarkupAccumulator::takeResults()
concatenateMarkup(result);
- return String::adopt(result);
+ // We remove '\0' characters because they are not visibly rendered to the user.
+ return String::adopt(result).replace(0, "");
}
void StyledMarkupAccumulator::appendText(Vector<UChar>& out, Text* text)
@@ -194,7 +195,7 @@ void StyledMarkupAccumulator::appendText(Vector<UChar>& out, Text* text)
return;
}
- bool useRenderedText = !enclosingNodeWithTag(Position(text, 0), selectTag);
+ bool useRenderedText = !enclosingNodeWithTag(firstPositionInNode(text), selectTag);
String content = useRenderedText ? renderedText(text, m_range) : stringValueForRange(text, m_range);
Vector<UChar> buffer;
appendCharactersReplacingEntities(buffer, content.characters(), content.length(), EntityMaskInPCDATA);
@@ -267,7 +268,7 @@ void StyledMarkupAccumulator::appendElement(Vector<UChar>& out, Element* element
}
if (element->isHTMLElement() && (shouldAnnotate() || addDisplayInline)) {
- RefPtr<CSSMutableStyleDeclaration> style = static_cast<HTMLElement*>(element)->getInlineStyleDecl()->copy();
+ RefPtr<CSSMutableStyleDeclaration> style = toHTMLElement(element)->getInlineStyleDecl()->copy();
if (shouldAnnotate()) {
RefPtr<CSSMutableStyleDeclaration> styleFromMatchedRules = styleFromMatchedRulesForElement(const_cast<Element*>(element));
// Styles from the inline style declaration, held in the variable "style", take precedence
@@ -337,7 +338,7 @@ Node* StyledMarkupAccumulator::serializeNodes(Node* startNode, Node* pastEnd)
// Don't write out empty block containers that aren't fully selected.
continue;
- if (!n->renderer() && !enclosingNodeWithTag(Position(n, 0), selectTag)) {
+ if (!n->renderer() && !enclosingNodeWithTag(firstPositionInOrBeforeNode(n), selectTag)) {
next = n->traverseNextSibling();
// Don't skip over pastEnd.
if (pastEnd && pastEnd->isDescendantOf(n))
@@ -495,7 +496,7 @@ static Node* highestAncestorToWrapMarkup(const Range* range, Node* fullySelected
Node* checkAncestor = specialCommonAncestor ? specialCommonAncestor : commonAncestor;
if (checkAncestor->renderer()) {
- Node* newSpecialCommonAncestor = highestEnclosingNodeOfType(Position(checkAncestor, 0), &isElementPresentational);
+ Node* newSpecialCommonAncestor = highestEnclosingNodeOfType(firstPositionInNode(checkAncestor), &isElementPresentational);
if (newSpecialCommonAncestor)
specialCommonAncestor = newSpecialCommonAncestor;
}
@@ -509,7 +510,7 @@ static Node* highestAncestorToWrapMarkup(const Range* range, Node* fullySelected
if (!specialCommonAncestor && isTabSpanNode(commonAncestor))
specialCommonAncestor = commonAncestor;
- if (Node *enclosingAnchor = enclosingNodeWithTag(Position(specialCommonAncestor ? specialCommonAncestor : commonAncestor, 0), aTag))
+ if (Node *enclosingAnchor = enclosingNodeWithTag(firstPositionInNode(specialCommonAncestor ? specialCommonAncestor : commonAncestor), aTag))
specialCommonAncestor = enclosingAnchor;
if (shouldAnnotate == AnnotateForInterchange && fullySelectedRoot) {
@@ -579,7 +580,7 @@ String createMarkup(const Range* range, Vector<Node*>* nodes, EAnnotateForInterc
}
}
- Node* body = enclosingNodeWithTag(Position(commonAncestor, 0), bodyTag);
+ Node* body = enclosingNodeWithTag(firstPositionInNode(commonAncestor), bodyTag);
Node* fullySelectedRoot = 0;
// FIXME: Do this for all fully selected blocks, not just the body.
if (body && areRangesEqual(VisibleSelection::selectionFromContentsOfNode(body).toNormalizedRange().get(), range))
diff --git a/Source/WebCore/editing/visible_units.cpp b/Source/WebCore/editing/visible_units.cpp
index 3582aa9..391d6e6 100644
--- a/Source/WebCore/editing/visible_units.cpp
+++ b/Source/WebCore/editing/visible_units.cpp
@@ -292,7 +292,7 @@ static unsigned previousWordPositionBoundary(const UChar* characters, unsigned l
VisiblePosition previousWordPosition(const VisiblePosition &c)
{
VisiblePosition prev = previousBoundary(c, previousWordPositionBoundary);
- return c.honorEditableBoundaryAtOrAfter(prev);
+ return c.honorEditableBoundaryAtOrBefore(prev);
}
static unsigned nextWordPositionBoundary(const UChar* characters, unsigned length, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreContext)
@@ -308,7 +308,7 @@ static unsigned nextWordPositionBoundary(const UChar* characters, unsigned lengt
VisiblePosition nextWordPosition(const VisiblePosition &c)
{
VisiblePosition next = nextBoundary(c, nextWordPositionBoundary);
- return c.honorEditableBoundaryAtOrBefore(next);
+ return c.honorEditableBoundaryAtOrAfter(next);
}
// ---------
@@ -391,7 +391,7 @@ VisiblePosition startOfLine(const VisiblePosition& c)
{
VisiblePosition visPos = startPositionForLine(c);
- return c.honorEditableBoundaryAtOrAfter(visPos);
+ return c.honorEditableBoundaryAtOrBefore(visPos);
}
static VisiblePosition endPositionForLine(const VisiblePosition& c)
@@ -458,7 +458,7 @@ VisiblePosition endOfLine(const VisiblePosition& c)
visPos = endPositionForLine(visPos);
}
- return c.honorEditableBoundaryAtOrBefore(visPos);
+ return c.honorEditableBoundaryAtOrAfter(visPos);
}
bool inSameLine(const VisiblePosition &a, const VisiblePosition &b)
@@ -536,7 +536,7 @@ VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int
while (n && startBlock == enclosingNodeWithNonInlineRenderer(n))
n = previousLeafWithSameEditability(n);
while (n) {
- if (highestEditableRoot(Position(n, 0)) != highestRoot)
+ if (highestEditableRoot(firstPositionInOrBeforeNode(n)) != highestRoot)
break;
Position pos(n, caretMinOffset(n));
if (pos.isCandidate()) {
@@ -567,7 +567,7 @@ VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int
RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
Node* node = renderer->node();
if (node && editingIgnoresContent(node))
- return Position(node->parentNode(), node->nodeIndex());
+ return positionInParentBeforeNode(node);
return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
}
@@ -583,7 +583,7 @@ static Node* nextLeafWithSameEditability(Node* node, int offset)
bool editable = node->isContentEditable();
ASSERT(offset >= 0);
Node* child = node->childNode(offset);
- Node* n = child ? child->nextLeafNode() : node->nextLeafNode();
+ Node* n = child ? child->nextLeafNode() : node->lastDescendant()->nextLeafNode();
while (n) {
if (editable == n->isContentEditable())
return n;
@@ -645,7 +645,7 @@ VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int x)
while (n && startBlock == enclosingNodeWithNonInlineRenderer(n))
n = nextLeafWithSameEditability(n);
while (n) {
- if (highestEditableRoot(Position(n, 0)) != highestRoot)
+ if (highestEditableRoot(firstPositionInOrBeforeNode(n)) != highestRoot)
break;
Position pos(n, caretMinOffset(n));
if (pos.isCandidate()) {
@@ -672,7 +672,7 @@ VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int x)
RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
Node* node = renderer->node();
if (node && editingIgnoresContent(node))
- return Position(node->parentNode(), node->nodeIndex());
+ return positionInParentBeforeNode(node);
return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
}
@@ -720,7 +720,7 @@ static unsigned previousSentencePositionBoundary(const UChar* characters, unsign
VisiblePosition previousSentencePosition(const VisiblePosition &c)
{
VisiblePosition prev = previousBoundary(c, previousSentencePositionBoundary);
- return c.honorEditableBoundaryAtOrAfter(prev);
+ return c.honorEditableBoundaryAtOrBefore(prev);
}
static unsigned nextSentencePositionBoundary(const UChar* characters, unsigned length, unsigned, BoundarySearchContextAvailability, bool&)
@@ -734,7 +734,7 @@ static unsigned nextSentencePositionBoundary(const UChar* characters, unsigned l
VisiblePosition nextSentencePosition(const VisiblePosition &c)
{
VisiblePosition next = nextBoundary(c, nextSentencePositionBoundary);
- return c.honorEditableBoundaryAtOrBefore(next);
+ return c.honorEditableBoundaryAtOrAfter(next);
}
VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossingRule boundaryCrossingRule)
@@ -913,7 +913,7 @@ VisiblePosition startOfBlock(const VisiblePosition &c)
Node *startNode = p.node();
if (!startNode)
return VisiblePosition();
- return VisiblePosition(Position(startNode->enclosingBlockFlowElement(), 0), DOWNSTREAM);
+ return VisiblePosition(firstPositionInNode(startNode->enclosingBlockFlowElement()), DOWNSTREAM);
}
VisiblePosition endOfBlock(const VisiblePosition &c)
@@ -1133,7 +1133,7 @@ VisiblePosition logicalStartOfLine(const VisiblePosition& c)
// Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail.
VisiblePosition visPos = logicalStartPositionForLine(c);
- return c.honorEditableBoundaryAtOrAfter(visPos);
+ return c.honorEditableBoundaryAtOrBefore(visPos);
}
static VisiblePosition logicalEndPositionForLine(const VisiblePosition& c)
@@ -1190,7 +1190,7 @@ VisiblePosition logicalEndOfLine(const VisiblePosition& c)
if (!inSameLogicalLine(c, visPos))
visPos = visPos.previous();
- return c.honorEditableBoundaryAtOrBefore(visPos);
+ return c.honorEditableBoundaryAtOrAfter(visPos);
}
VisiblePosition leftBoundaryOfLine(const VisiblePosition& c, TextDirection direction)
diff --git a/Source/WebCore/features.pri b/Source/WebCore/features.pri
index fdf11ed..b3f0e2d 100644
--- a/Source/WebCore/features.pri
+++ b/Source/WebCore/features.pri
@@ -73,7 +73,8 @@ contains(DEFINES, ENABLE_SINGLE_THREADED=1) {
!contains(DEFINES, ENABLE_INSPECTOR=.): DEFINES += ENABLE_INSPECTOR=1
!contains(DEFINES, ENABLE_3D_RENDERING=.): DEFINES += ENABLE_3D_RENDERING=1
!contains(DEFINES, ENABLE_WEB_AUDIO=.): DEFINES += ENABLE_WEB_AUDIO=0
-!contains(DEFINES, ENABLE_3D_CANVAS=.): DEFINES += ENABLE_3D_CANVAS=0
+!contains(DEFINES, ENABLE_WEBGL=.): DEFINES += ENABLE_WEBGL=0
+!contains(DEFINES, ENABLE_MEDIA_STATISTICS=.): DEFINES += ENABLE_MEDIA_STATISTICS=0
# SVG support
!contains(DEFINES, ENABLE_SVG=0) {
@@ -209,3 +210,4 @@ contains(DEFINES, ENABLE_METER_TAG=1): FEATURE_DEFINES_JAVASCRIPT += ENABLE_METE
contains(DEFINES, ENABLE_PROGRESS_TAG=1): FEATURE_DEFINES_JAVASCRIPT += ENABLE_PROGRESS_TAG=1
contains(DEFINES, ENABLE_GEOLOCATION=1): FEATURE_DEFINES_JAVASCRIPT += ENABLE_GEOLOCATION=1
contains(DEFINES, ENABLE_BLOB=1): FEATURE_DEFINES_JAVASCRIPT += ENABLE_BLOB=1
+contains(DEFINES, ENABLE_MEDIA_STATISTICS=1): FEATURE_DEFINES_JAVASCRIPT += ENABLE_MEDIA_STATISTICS=1
diff --git a/Source/WebCore/fileapi/Entry.cpp b/Source/WebCore/fileapi/Entry.cpp
index 9c3fa4e..53cd576 100644
--- a/Source/WebCore/fileapi/Entry.cpp
+++ b/Source/WebCore/fileapi/Entry.cpp
@@ -32,13 +32,17 @@
#if ENABLE(FILE_SYSTEM)
+#include "AsyncFileSystem.h"
#include "DirectoryEntry.h"
#include "EntryCallback.h"
#include "ErrorCallback.h"
#include "FileError.h"
#include "FileSystemCallbacks.h"
#include "MetadataCallback.h"
+#include "ScriptExecutionContext.h"
+#include "SecurityOrigin.h"
#include "VoidCallback.h"
+#include <wtf/text/StringBuilder.h>
namespace WebCore {
@@ -82,11 +86,15 @@ void Entry::getParent(PassRefPtr<EntryCallback> successCallback, PassRefPtr<Erro
filesystem()->scheduleCallback(errorCallback.release(), FileError::create(FileError::INVALID_MODIFICATION_ERR));
}
-String Entry::toURI(const String&)
+String Entry::toURI()
{
- // FIXME: to be implemented.
- ASSERT_NOT_REACHED();
- return String();
+ StringBuilder uriBuilder;
+ uriBuilder.append("filesystem:");
+ uriBuilder.append(filesystem()->scriptExecutionContext()->securityOrigin()->toString());
+ uriBuilder.append("/");
+ uriBuilder.append(m_fileSystem->asyncFileSystem()->type() == AsyncFileSystem::Temporary ? "temporary" : "persistent");
+ uriBuilder.append(m_fullPath);
+ return uriBuilder.toString();
}
} // namespace WebCore
diff --git a/Source/WebCore/fileapi/Entry.h b/Source/WebCore/fileapi/Entry.h
index 9367f4f..d871262 100644
--- a/Source/WebCore/fileapi/Entry.h
+++ b/Source/WebCore/fileapi/Entry.h
@@ -57,7 +57,7 @@ public:
void remove(PassRefPtr<VoidCallback> successCallback = 0, PassRefPtr<ErrorCallback> errorCallback = 0) const;
void getParent(PassRefPtr<EntryCallback> successCallback = 0, PassRefPtr<ErrorCallback> errorCallback = 0) const;
- String toURI(const String& mimeType = String());
+ String toURI();
protected:
Entry(PassRefPtr<DOMFileSystemBase>, const String& fullPath);
diff --git a/Source/WebCore/fileapi/Entry.idl b/Source/WebCore/fileapi/Entry.idl
index f6fcdb3..f144b31 100644
--- a/Source/WebCore/fileapi/Entry.idl
+++ b/Source/WebCore/fileapi/Entry.idl
@@ -43,6 +43,7 @@ module storage {
void getMetadata(in [Optional, Callback] MetadataCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
void moveTo(in DirectoryEntry parent, in [Optional, ConvertUndefinedOrNullToNullString] DOMString name, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
void copyTo(in DirectoryEntry parent, in [Optional, ConvertUndefinedOrNullToNullString] DOMString name, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
+ DOMString toURI();
void remove(in [Optional, Callback] VoidCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
void getParent(in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
};
diff --git a/Source/WebCore/fileapi/FileStreamProxy.cpp b/Source/WebCore/fileapi/FileStreamProxy.cpp
index 5daf983..92b07cd 100644
--- a/Source/WebCore/fileapi/FileStreamProxy.cpp
+++ b/Source/WebCore/fileapi/FileStreamProxy.cpp
@@ -83,6 +83,8 @@ static void didStart(ScriptExecutionContext*, FileStreamProxy* proxy)
void FileStreamProxy::startOnFileThread()
{
+ if (!client())
+ return;
m_stream->start();
m_context->postTask(createCallbackTask(&didStart, this));
}
diff --git a/Source/WebCore/history/CachedFrame.cpp b/Source/WebCore/history/CachedFrame.cpp
index ab6b4d6..0059691 100644
--- a/Source/WebCore/history/CachedFrame.cpp
+++ b/Source/WebCore/history/CachedFrame.cpp
@@ -65,7 +65,7 @@ CachedFrameBase::CachedFrameBase(Frame* frame)
, m_documentLoader(frame->loader()->documentLoader())
, m_view(frame->view())
, m_mousePressNode(frame->eventHandler()->mousePressNode())
- , m_url(frame->loader()->url())
+ , m_url(frame->document()->url())
, m_isMainFrame(!frame->tree()->parent())
{
}
@@ -135,10 +135,6 @@ CachedFrame::CachedFrame(Frame* frame)
if (frame->page()->focusController()->focusedFrame() == frame)
frame->page()->focusController()->setFocusedFrame(frame->page()->mainFrame());
- // Active DOM objects must be suspended before we cached the frame script data
- m_document->suspendActiveDOMObjects(ActiveDOMObject::DocumentWillBecomeInactive);
- m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame));
-
// Custom scrollbar renderers will get reattached when the document comes out of the page cache
m_view->detachCustomScrollbars();
@@ -146,13 +142,21 @@ CachedFrame::CachedFrame(Frame* frame)
frame->clearTimers();
m_document->setInPageCache(true);
frame->loader()->stopLoading(UnloadEventPolicyUnloadAndPageHide);
-
- frame->loader()->client()->savePlatformDataToCachedFrame(this);
// Create the CachedFrames for all Frames in the FrameTree.
for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling())
m_childFrames.append(CachedFrame::create(child));
+ // Active DOM objects must be suspended before we cache the frame script data,
+ // but after we've fired the pagehide event, in case that creates more objects.
+ // Suspending must also happen after we've recursed over child frames, in case
+ // those create more objects.
+ // FIXME: It's still possible to have objects created after suspending in some cases, see http://webkit.org/b/53733 for more details.
+ m_document->suspendActiveDOMObjects(ActiveDOMObject::DocumentWillBecomeInactive);
+ m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame));
+
+ frame->loader()->client()->savePlatformDataToCachedFrame(this);
+
// Deconstruct the FrameTree, to restore it later.
// We do this for two reasons:
// 1 - We reuse the main frame, so when it navigates to a new page load it needs to start with a blank FrameTree.
diff --git a/Source/WebCore/history/HistoryItem.cpp b/Source/WebCore/history/HistoryItem.cpp
index 805d5aa..c698db3 100644
--- a/Source/WebCore/history/HistoryItem.cpp
+++ b/Source/WebCore/history/HistoryItem.cpp
@@ -40,7 +40,7 @@
namespace WebCore {
-const uint32_t backForwardTreeEncodingVersion = 1;
+const uint32_t backForwardTreeEncodingVersion = 2;
static long long generateSequenceNumber()
{
@@ -716,8 +716,6 @@ void HistoryItem::encodeBackForwardTreeNode(Encoder& encoder) const
encoder.encodeInt64(m_itemSequenceNumber);
- encoder.encodeString(m_originalURLString);
-
encoder.encodeString(m_referrer);
encoder.encodeInt32(m_scrollPoint.x());
@@ -820,9 +818,6 @@ resume:
if (!decoder.decodeInt64(node->m_itemSequenceNumber))
return 0;
- if (!decoder.decodeString(node->m_originalURLString))
- return 0;
-
if (!decoder.decodeString(node->m_referrer))
return 0;
diff --git a/Source/WebCore/history/HistoryItem.h b/Source/WebCore/history/HistoryItem.h
index 526cae2..235f756 100644
--- a/Source/WebCore/history/HistoryItem.h
+++ b/Source/WebCore/history/HistoryItem.h
@@ -234,7 +234,6 @@ private:
HistoryItem* findTargetItem();
void encodeBackForwardTreeNode(Encoder&) const;
- static PassRefPtr<HistoryItem> decodeBackForwardTreeNode(const String& urlString, const String& title, const String& originalURLString, Decoder&);
/* When adding new member variables to this class, please notify the Qt team.
* qt/HistoryItemQt.cpp contains code to serialize history items.
diff --git a/Source/WebCore/history/PageCache.cpp b/Source/WebCore/history/PageCache.cpp
index a5dfb1e..d57df65 100644
--- a/Source/WebCore/history/PageCache.cpp
+++ b/Source/WebCore/history/PageCache.cpp
@@ -111,7 +111,7 @@ static bool logCanCacheFrameDecision(Frame* frame, int indentLevel)
PCLOG(" -Frame contains plugins");
cannotCache = true;
}
- if (frame->loader()->url().protocolIs("https")) {
+ if (frame->document()->url().protocolIs("https")) {
PCLOG(" -Frame is HTTPS");
cannotCache = true;
}
@@ -260,7 +260,7 @@ bool PageCache::canCachePageContainingThisFrame(Frame* frame)
// they would need to be destroyed and then recreated, and there is no way that we can recreate
// the right NPObjects. See <rdar://problem/5197041> for more information.
&& !frame->loader()->subframeLoader()->containsPlugins()
- && !frame->loader()->url().protocolIs("https")
+ && !frame->document()->url().protocolIs("https")
&& (!frame->domWindow() || !frame->domWindow()->hasEventListeners(eventNames().unloadEvent))
#if ENABLE(DATABASE)
&& !frame->document()->hasOpenDatabases()
diff --git a/Source/WebCore/html/DOMURL.cpp b/Source/WebCore/html/DOMURL.cpp
index 87f9f45..d0f0aeb 100644
--- a/Source/WebCore/html/DOMURL.cpp
+++ b/Source/WebCore/html/DOMURL.cpp
@@ -37,6 +37,20 @@ namespace WebCore {
DOMURL::DOMURL(ScriptExecutionContext* scriptExecutionContext)
: m_scriptExecutionContext(scriptExecutionContext)
{
+ if (m_scriptExecutionContext)
+ m_scriptExecutionContext->createdDomUrl(this);
+}
+
+DOMURL::~DOMURL()
+{
+ if (m_scriptExecutionContext)
+ m_scriptExecutionContext->destroyedDomUrl(this);
+}
+
+void DOMURL::contextDestroyed()
+{
+ ASSERT(m_scriptExecutionContext);
+ m_scriptExecutionContext = 0;
}
String DOMURL::createObjectURL(Blob* blob)
diff --git a/Source/WebCore/html/DOMURL.h b/Source/WebCore/html/DOMURL.h
index 57f3000..dff4dd8 100644
--- a/Source/WebCore/html/DOMURL.h
+++ b/Source/WebCore/html/DOMURL.h
@@ -40,10 +40,14 @@ class ScriptExecutionContext;
class DOMURL : public RefCounted<DOMURL> {
public:
static PassRefPtr<DOMURL> create(ScriptExecutionContext* scriptExecutionContext) { return adoptRef(new DOMURL(scriptExecutionContext)); }
+ ~DOMURL();
String createObjectURL(Blob*);
void revokeObjectURL(const String&);
-
+
+ void contextDestroyed();
+ ScriptExecutionContext* scriptExecutionContext() const { return m_scriptExecutionContext; }
+
private:
explicit DOMURL(ScriptExecutionContext*);
diff --git a/Source/WebCore/html/FTPDirectoryDocument.cpp b/Source/WebCore/html/FTPDirectoryDocument.cpp
index 2a08696..dc89045 100644
--- a/Source/WebCore/html/FTPDirectoryDocument.cpp
+++ b/Source/WebCore/html/FTPDirectoryDocument.cpp
@@ -26,7 +26,6 @@
#if ENABLE(FTPDIR)
#include "FTPDirectoryDocument.h"
-#include "CharacterNames.h"
#include "HTMLDocumentParser.h"
#include "HTMLNames.h"
#include "HTMLTableElement.h"
@@ -37,11 +36,11 @@
#include "Settings.h"
#include "SharedBuffer.h"
#include "Text.h"
-
#include <wtf/text/CString.h>
#include <wtf/text/StringConcatenate.h>
#include <wtf/CurrentTime.h>
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
diff --git a/Source/WebCore/html/FormAssociatedElement.cpp b/Source/WebCore/html/FormAssociatedElement.cpp
index 574dfe5..3571744 100644
--- a/Source/WebCore/html/FormAssociatedElement.cpp
+++ b/Source/WebCore/html/FormAssociatedElement.cpp
@@ -59,11 +59,24 @@ void FormAssociatedElement::willMoveToNewOwnerDocument()
element->document()->unregisterFormElementWithFormAttribute(this);
}
+void FormAssociatedElement::insertedIntoDocument()
+{
+ HTMLElement* element = toHTMLElement(this);
+ if (element->fastHasAttribute(formAttr))
+ element->document()->registerFormElementWithFormAttribute(this);
+}
+
+void FormAssociatedElement::removedFromDocument()
+{
+ HTMLElement* element = toHTMLElement(this);
+ if (element->fastHasAttribute(formAttr))
+ element->document()->unregisterFormElementWithFormAttribute(this);
+}
+
void FormAssociatedElement::insertedIntoTree()
{
HTMLElement* element = toHTMLElement(this);
if (element->fastHasAttribute(formAttr)) {
- element->document()->registerFormElementWithFormAttribute(this);
Element* formElement = element->document()->getElementById(element->fastGetAttribute(formAttr));
if (formElement && formElement->hasTagName(formTag)) {
if (m_form)
@@ -94,8 +107,6 @@ static inline Node* findRoot(Node* n)
void FormAssociatedElement::removedFromTree()
{
HTMLElement* element = toHTMLElement(this);
- if (element->fastHasAttribute(formAttr))
- element->document()->unregisterFormElementWithFormAttribute(this);
// If the form and element are both in the same tree, preserve the connection to the form.
// Otherwise, null out our form and remove ourselves from the form's list of elements.
diff --git a/Source/WebCore/html/FormAssociatedElement.h b/Source/WebCore/html/FormAssociatedElement.h
index ebefdc6..aa5abd9 100644
--- a/Source/WebCore/html/FormAssociatedElement.h
+++ b/Source/WebCore/html/FormAssociatedElement.h
@@ -63,7 +63,8 @@ protected:
void insertedIntoTree();
void removedFromTree();
-
+ void insertedIntoDocument();
+ void removedFromDocument();
void willMoveToNewOwnerDocument();
void setForm(HTMLFormElement* form) { m_form = form; }
diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp
index dcdde28..0c10022 100644
--- a/Source/WebCore/html/HTMLAnchorElement.cpp
+++ b/Source/WebCore/html/HTMLAnchorElement.cpp
@@ -541,7 +541,7 @@ bool isMiddleMouseButtonEvent(Event* event)
bool isLinkClick(Event* event)
{
- return event->type() == eventNames().clickEvent || (event->type() == eventNames().mouseupEvent && isMiddleMouseButtonEvent(event));
+ return event->type() == eventNames().clickEvent && (!event->isMouseEvent() || static_cast<MouseEvent*>(event)->button() != RightButton);
}
void handleLinkClick(Event* event, Document* document, const String& url, const String& target, bool hideReferrer)
@@ -551,8 +551,6 @@ void handleLinkClick(Event* event, Document* document, const String& url, const
Frame* frame = document->frame();
if (!frame)
return;
- // FIXME: This seems wrong. Why are we manufactuing a user gesture?
- UserGestureIndicator indicator(DefinitelyProcessingUserGesture);
frame->loader()->urlSelected(document->completeURL(url), target, event, false, false, hideReferrer ? NoReferrer : SendReferrer);
}
diff --git a/Source/WebCore/html/HTMLAreaElement.cpp b/Source/WebCore/html/HTMLAreaElement.cpp
index ac4c865..9832d06 100644
--- a/Source/WebCore/html/HTMLAreaElement.cpp
+++ b/Source/WebCore/html/HTMLAreaElement.cpp
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 1999 Antti Koivisto (koivisto@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2009, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -30,7 +30,7 @@
#include "HTMLNames.h"
#include "HitTestResult.h"
#include "Path.h"
-#include "RenderObject.h"
+#include "RenderImage.h"
using namespace std;
@@ -64,7 +64,7 @@ void HTMLAreaElement::parseMappedAttribute(Attribute* attr)
else if (equalIgnoringCase(attr->value(), "rect"))
m_shape = Rect;
} else if (attr->name() == coordsAttr) {
- m_coords.set(newCoordsArray(attr->value().string(), m_coordsLen));
+ m_coords = newCoordsArray(attr->value().string(), m_coordsLen);
} else if (attr->name() == altAttr || attr->name() == accesskeyAttr) {
// Do nothing.
} else
@@ -86,7 +86,7 @@ bool HTMLAreaElement::mapMouseEvent(int x, int y, const IntSize& size, HitTestRe
return true;
}
-Path HTMLAreaElement::getPath(RenderObject* obj) const
+Path HTMLAreaElement::computePath(RenderObject* obj) const
{
if (!obj)
return Path();
@@ -111,9 +111,9 @@ Path HTMLAreaElement::getPath(RenderObject* obj) const
return p;
}
-IntRect HTMLAreaElement::getRect(RenderObject* obj) const
+IntRect HTMLAreaElement::computeRect(RenderObject* obj) const
{
- return enclosingIntRect(getPath(obj).boundingRect());
+ return enclosingIntRect(computePath(obj).boundingRect());
}
Path HTMLAreaElement::getRegion(const IntSize& size) const
@@ -196,33 +196,34 @@ bool HTMLAreaElement::isFocusable() const
return supportsFocus() && Element::tabIndex() >= 0;
}
-void HTMLAreaElement::dispatchBlurEvent()
+void HTMLAreaElement::setFocus(bool shouldBeFocused)
{
- HTMLAnchorElement::dispatchBlurEvent();
-
- // On a blur, we might need to remove our focus rings by repainting.
- updateFocusAppearance(false);
+ if (focused() == shouldBeFocused)
+ return;
+
+ HTMLAnchorElement::setFocus(shouldBeFocused);
+
+ HTMLImageElement* imageElement = this->imageElement();
+ if (!imageElement)
+ return;
+
+ RenderObject* renderer = imageElement->renderer();
+ if (!renderer || !renderer->isImage())
+ return;
+
+ toRenderImage(renderer)->areaElementFocusChanged(this);
}
void HTMLAreaElement::updateFocusAppearance(bool restorePreviousSelection)
{
if (!isFocusable())
return;
-
- ContainerNode* parent = parentNode();
- if (!parent || !parent->hasTagName(mapTag))
- return;
-
- HTMLImageElement* imageElement = static_cast<HTMLMapElement*>(parent)->imageElement();
+
+ HTMLImageElement* imageElement = this->imageElement();
if (!imageElement)
return;
-
- // This will handle scrolling to the image if necessary.
+
imageElement->updateFocusAppearance(restorePreviousSelection);
-
- RenderObject* imageRenderer = imageElement->renderer();
- if (imageRenderer)
- imageRenderer->setNeedsLayout(true);
}
bool HTMLAreaElement::supportsFocus() const
diff --git a/Source/WebCore/html/HTMLAreaElement.h b/Source/WebCore/html/HTMLAreaElement.h
index 42d4198..34f5ba9 100644
--- a/Source/WebCore/html/HTMLAreaElement.h
+++ b/Source/WebCore/html/HTMLAreaElement.h
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 1999 Antti Koivisto (koivisto@kde.org)
- * Copyright (C) 2004, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2008, 2009, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -41,8 +41,8 @@ public:
bool mapMouseEvent(int x, int y, const IntSize&, HitTestResult&);
- IntRect getRect(RenderObject*) const;
- Path getPath(RenderObject*) const;
+ IntRect computeRect(RenderObject*) const;
+ Path computePath(RenderObject*) const;
// The parent map's image.
HTMLImageElement* imageElement() const;
@@ -57,7 +57,7 @@ private:
virtual bool isMouseFocusable() const;
virtual bool isFocusable() const;
virtual void updateFocusAppearance(bool /*restorePreviousSelection*/);
- virtual void dispatchBlurEvent();
+ virtual void setFocus(bool);
enum Shape { Default, Poly, Rect, Circle, Unknown };
Path getRegion(const IntSize&) const;
diff --git a/Source/WebCore/html/HTMLAttributeNames.in b/Source/WebCore/html/HTMLAttributeNames.in
index eac9a73..d195a6f 100644
--- a/Source/WebCore/html/HTMLAttributeNames.in
+++ b/Source/WebCore/html/HTMLAttributeNames.in
@@ -41,6 +41,7 @@ aria-readonly
aria-relevant
aria-required
aria-selected
+aria-sort
aria-valuemax
aria-valuemin
aria-valuenow
diff --git a/Source/WebCore/html/HTMLCanvasElement.cpp b/Source/WebCore/html/HTMLCanvasElement.cpp
index 0fdb7b2..09e8d04 100644
--- a/Source/WebCore/html/HTMLCanvasElement.cpp
+++ b/Source/WebCore/html/HTMLCanvasElement.cpp
@@ -48,7 +48,11 @@
#include <math.h>
#include <stdio.h>
-#if ENABLE(3D_CANVAS)
+#if USE(JSC)
+#include <runtime/JSLock.h>
+#endif
+
+#if ENABLE(WEBGL)
#include "WebGLContextAttributes.h"
#include "WebGLRenderingContext.h"
#endif
@@ -166,7 +170,7 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas
}
return m_context.get();
}
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
Settings* settings = document()->settings();
if (settings && settings->webGLEnabled()
#if !PLATFORM(CHROMIUM) && !PLATFORM(QT)
@@ -232,7 +236,7 @@ void HTMLCanvasElement::reset()
IntSize oldSize = size();
setSurfaceSize(IntSize(w, h)); // The image buffer gets cleared here.
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
if (m_context && m_context->is3d() && oldSize != size())
static_cast<WebGLRenderingContext*>(m_context.get())->reshape(width(), height());
#endif
@@ -279,7 +283,7 @@ void HTMLCanvasElement::paint(GraphicsContext* context, const IntRect& r)
}
}
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
bool HTMLCanvasElement::is3D() const
{
return m_context && m_context->is3d();
@@ -344,10 +348,10 @@ String HTMLCanvasElement::toDataURL(const String& mimeType, const double* qualit
IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const
{
- float left = floorf(logicalRect.left() * m_pageScaleFactor);
- float top = floorf(logicalRect.top() * m_pageScaleFactor);
- float right = ceilf(logicalRect.right() * m_pageScaleFactor);
- float bottom = ceilf(logicalRect.bottom() * m_pageScaleFactor);
+ float left = floorf(logicalRect.x() * m_pageScaleFactor);
+ float top = floorf(logicalRect.y() * m_pageScaleFactor);
+ float right = ceilf(logicalRect.maxX() * m_pageScaleFactor);
+ float bottom = ceilf(logicalRect.maxY() * m_pageScaleFactor);
return IntRect(IntPoint(left, top), convertToValidDeviceSize(right - left, bottom - top));
}
@@ -408,8 +412,10 @@ void HTMLCanvasElement::createImageBuffer() const
m_imageBuffer->context()->setImageInterpolationQuality(DefaultInterpolationQuality);
#if USE(JSC)
- if (hasCachedDOMNodeWrapperUnchecked(document(), const_cast<HTMLCanvasElement*>(this)))
+ if (hasCachedDOMNodeWrapperUnchecked(document(), const_cast<HTMLCanvasElement*>(this))) {
+ JSC::JSLock lock(JSC::SilenceAssertionsOnly);
scriptExecutionContext()->globalData()->heap.reportExtraMemoryCost(m_imageBuffer->dataSize());
+ }
#endif
}
diff --git a/Source/WebCore/html/HTMLCanvasElement.h b/Source/WebCore/html/HTMLCanvasElement.h
index 1f32dec..5c8ac9a 100644
--- a/Source/WebCore/html/HTMLCanvasElement.h
+++ b/Source/WebCore/html/HTMLCanvasElement.h
@@ -118,7 +118,7 @@ public:
AffineTransform baseTransform() const;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
bool is3D() const;
#endif
diff --git a/Source/WebCore/html/HTMLCollection.cpp b/Source/WebCore/html/HTMLCollection.cpp
index 9b4e566..7d776d1 100644
--- a/Source/WebCore/html/HTMLCollection.cpp
+++ b/Source/WebCore/html/HTMLCollection.cpp
@@ -264,7 +264,7 @@ bool HTMLCollection::checkForNameMatch(Element* element, bool checkName, const A
if (!element->isHTMLElement())
return false;
- HTMLElement* e = static_cast<HTMLElement*>(element);
+ HTMLElement* e = toHTMLElement(element);
if (!checkName)
return e->getIdAttribute() == name;
@@ -318,7 +318,7 @@ void HTMLCollection::updateNameCache() const
for (Element* element = itemAfter(0); element; element = itemAfter(element)) {
if (!element->isHTMLElement())
continue;
- HTMLElement* e = static_cast<HTMLElement*>(element);
+ HTMLElement* e = toHTMLElement(element);
const AtomicString& idAttrVal = e->getIdAttribute();
const AtomicString& nameAttrVal = e->getAttribute(nameAttr);
if (!idAttrVal.isEmpty()) {
diff --git a/Source/WebCore/html/HTMLDocument.cpp b/Source/WebCore/html/HTMLDocument.cpp
index 84ad706..dd41514 100644
--- a/Source/WebCore/html/HTMLDocument.cpp
+++ b/Source/WebCore/html/HTMLDocument.cpp
@@ -69,7 +69,7 @@
#include "HTMLBodyElement.h"
#include "HTMLElementFactory.h"
#include "HTMLNames.h"
-#include "InspectorController.h"
+#include "InspectorInstrumentation.h"
#include "KURL.h"
#include "Page.h"
#include "Settings.h"
@@ -79,8 +79,8 @@ namespace WebCore {
using namespace HTMLNames;
-HTMLDocument::HTMLDocument(Frame* frame, const KURL& url, const KURL& baseURL)
- : Document(frame, url, false, true, baseURL)
+HTMLDocument::HTMLDocument(Frame* frame, const KURL& url)
+ : Document(frame, url, false, true)
{
clearXMLVersion();
}
@@ -277,11 +277,7 @@ void HTMLDocument::releaseEvents()
PassRefPtr<DocumentParser> HTMLDocument::createParser()
{
- bool reportErrors = false;
-#if ENABLE(INSPECTOR)
- if (Page* page = this->page())
- reportErrors = page->inspectorController()->hasFrontend();
-#endif
+ bool reportErrors = InspectorInstrumentation::hasFrontend(this->page());
return HTMLDocumentParser::create(this, reportErrors);
}
diff --git a/Source/WebCore/html/HTMLDocument.h b/Source/WebCore/html/HTMLDocument.h
index 37edd87..3310b71 100644
--- a/Source/WebCore/html/HTMLDocument.h
+++ b/Source/WebCore/html/HTMLDocument.h
@@ -35,9 +35,9 @@ class HTMLElement;
class HTMLDocument : public Document, public CachedResourceClient {
public:
- static PassRefPtr<HTMLDocument> create(Frame* frame, const KURL& url, const KURL& baseURL = KURL())
+ static PassRefPtr<HTMLDocument> create(Frame* frame, const KURL& url)
{
- return adoptRef(new HTMLDocument(frame, url, baseURL));
+ return adoptRef(new HTMLDocument(frame, url));
}
virtual ~HTMLDocument();
@@ -80,7 +80,7 @@ public:
bool hasExtraNamedItem(AtomicStringImpl* name);
protected:
- HTMLDocument(Frame* frame, const KURL& url, const KURL& baseURL = KURL());
+ HTMLDocument(Frame*, const KURL&);
#ifdef ANDROID_INSTRUMENT
// Overridden to resolve the ambiguous
diff --git a/Source/WebCore/html/HTMLElement.cpp b/Source/WebCore/html/HTMLElement.cpp
index b7eca06..22fc2f2 100644
--- a/Source/WebCore/html/HTMLElement.cpp
+++ b/Source/WebCore/html/HTMLElement.cpp
@@ -371,7 +371,7 @@ void HTMLElement::setOuterHTML(const String& html, ExceptionCode& ec)
ec = NO_MODIFICATION_ALLOWED_ERR;
return;
}
- HTMLElement* parent = static_cast<HTMLElement*>(p);
+ HTMLElement* parent = toHTMLElement(p);
RefPtr<DocumentFragment> fragment = createFragmentFromSource(html, parent, ec);
if (fragment) {
@@ -735,6 +735,8 @@ void HTMLElement::setContentEditable(const String& enabled, ExceptionCode& ec)
setAttribute(contenteditableAttr, "true", ec);
else if (equalIgnoringCase(enabled, "false"))
setAttribute(contenteditableAttr, "false", ec);
+ else if (equalIgnoringCase(enabled, "plaintext-only"))
+ setAttribute(contenteditableAttr, "plaintext-only");
else if (equalIgnoringCase(enabled, "inherit"))
removeAttribute(contenteditableAttr, ec);
else
@@ -850,7 +852,7 @@ HTMLFormElement* HTMLElement::shadowAncestorOwnerForm()
if (!ancestorNode->isHTMLElement())
return 0;
- HTMLElement* ancestorHTML = static_cast<HTMLElement*>(ancestorNode);
+ HTMLElement* ancestorHTML = toHTMLElement(ancestorNode);
if (!ancestorHTML)
return 0;
return ancestorHTML->form();
diff --git a/Source/WebCore/html/HTMLElement.h b/Source/WebCore/html/HTMLElement.h
index ad84f5d..2f6bc41 100644
--- a/Source/WebCore/html/HTMLElement.h
+++ b/Source/WebCore/html/HTMLElement.h
@@ -108,6 +108,18 @@ private:
HTMLFormElement* shadowAncestorOwnerForm();
};
+inline HTMLElement* toHTMLElement(Node* node)
+{
+ ASSERT(!node || node->isHTMLElement());
+ return static_cast<HTMLElement*>(node);
+}
+
+inline const HTMLElement* toHTMLElement(const Node* node)
+{
+ ASSERT(!node || node->isHTMLElement());
+ return static_cast<const HTMLElement*>(node);
+}
+
inline HTMLElement::HTMLElement(const QualifiedName& tagName, Document* document)
: StyledElement(tagName, document, CreateHTMLElement)
{
diff --git a/Source/WebCore/html/HTMLEmbedElement.cpp b/Source/WebCore/html/HTMLEmbedElement.cpp
index df97280..f419e2a 100644
--- a/Source/WebCore/html/HTMLEmbedElement.cpp
+++ b/Source/WebCore/html/HTMLEmbedElement.cpp
@@ -138,7 +138,7 @@ void HTMLEmbedElement::parametersForPlugin(Vector<String>& paramNames, Vector<St
// FIXME: This should be unified with HTMLObjectElement::updateWidget and
// moved down into HTMLPluginImageElement.cpp
-void HTMLEmbedElement::updateWidget(bool onlyCreateNonNetscapePlugins)
+void HTMLEmbedElement::updateWidget(PluginCreationOption pluginCreationOption)
{
ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing());
// FIXME: We should ASSERT(needsWidgetUpdate()), but currently
@@ -153,7 +153,10 @@ void HTMLEmbedElement::updateWidget(bool onlyCreateNonNetscapePlugins)
// <object> which modifies url and serviceType before calling these.
if (!allowedToLoadFrameURL(m_url))
return;
- if (onlyCreateNonNetscapePlugins && wouldLoadAsNetscapePlugin(m_url, m_serviceType))
+ // FIXME: It's sadness that we have this special case here.
+ // See http://trac.webkit.org/changeset/25128 and
+ // plugins/netscape-plugin-setwindow-size.html
+ if (pluginCreationOption == CreateOnlyNonNetscapePlugins && wouldLoadAsNetscapePlugin(m_url, m_serviceType))
return;
// FIXME: These should be joined into a PluginParameters class.
diff --git a/Source/WebCore/html/HTMLEmbedElement.h b/Source/WebCore/html/HTMLEmbedElement.h
index 70eb0dc..863c09b 100644
--- a/Source/WebCore/html/HTMLEmbedElement.h
+++ b/Source/WebCore/html/HTMLEmbedElement.h
@@ -47,7 +47,7 @@ private:
virtual RenderWidget* renderWidgetForJSBindings() const;
- virtual void updateWidget(bool onlyCreateNonNetscapePlugins);
+ virtual void updateWidget(PluginCreationOption);
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
diff --git a/Source/WebCore/html/HTMLFormControlElement.cpp b/Source/WebCore/html/HTMLFormControlElement.cpp
index bb42dfd..2f3db08 100644
--- a/Source/WebCore/html/HTMLFormControlElement.cpp
+++ b/Source/WebCore/html/HTMLFormControlElement.cpp
@@ -26,7 +26,6 @@
#include "HTMLFormControlElement.h"
#include "Attribute.h"
-#include "CharacterNames.h"
#include "Chrome.h"
#include "ChromeClient.h"
#include "Document.h"
@@ -49,6 +48,7 @@
#include "ValidityState.h"
#include <limits>
#include <wtf/Vector.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -165,6 +165,18 @@ void HTMLFormControlElement::removedFromTree(bool deep)
HTMLElement::removedFromTree(deep);
}
+void HTMLFormControlElement::insertedIntoDocument()
+{
+ HTMLElement::insertedIntoDocument();
+ FormAssociatedElement::insertedIntoDocument();
+}
+
+void HTMLFormControlElement::removedFromDocument()
+{
+ HTMLElement::removedFromDocument();
+ FormAssociatedElement::removedFromDocument();
+}
+
const AtomicString& HTMLFormControlElement::formControlName() const
{
const AtomicString& name = fastGetAttribute(nameAttr);
@@ -570,8 +582,8 @@ bool HTMLTextFormControlElement::placeholderShouldBeVisible() const
{
return supportsPlaceholder()
&& isEmptyValue()
- && document()->focusedNode() != this
- && !isPlaceholderEmpty();
+ && !isPlaceholderEmpty()
+ && (document()->focusedNode() != this || (renderer() && renderer()->theme()->shouldShowPlaceholderWhenFocused()));
}
void HTMLTextFormControlElement::updatePlaceholderVisibility(bool placeholderValueChanged)
diff --git a/Source/WebCore/html/HTMLFormControlElement.h b/Source/WebCore/html/HTMLFormControlElement.h
index c88905c..368dcfa 100644
--- a/Source/WebCore/html/HTMLFormControlElement.h
+++ b/Source/WebCore/html/HTMLFormControlElement.h
@@ -111,6 +111,8 @@ protected:
virtual void attach();
virtual void insertedIntoTree(bool deep);
virtual void removedFromTree(bool deep);
+ virtual void insertedIntoDocument();
+ virtual void removedFromDocument();
virtual void willMoveToNewOwnerDocument();
virtual bool isKeyboardFocusable(KeyboardEvent*) const;
@@ -170,14 +172,13 @@ protected:
HTMLFormControlElementWithState(const QualifiedName& tagName, Document*, HTMLFormElement*);
virtual bool autoComplete() const;
-
+ virtual void finishParsingChildren();
virtual void willMoveToNewOwnerDocument();
virtual void didMoveToNewOwnerDocument();
virtual void defaultEventHandler(Event*);
private:
virtual bool shouldSaveAndRestoreFormControlState() const;
- virtual void finishParsingChildren();
};
// FIXME: Give this class its own header file.
diff --git a/Source/WebCore/html/HTMLFormElement.cpp b/Source/WebCore/html/HTMLFormElement.cpp
index d778601..8535027 100644
--- a/Source/WebCore/html/HTMLFormElement.cpp
+++ b/Source/WebCore/html/HTMLFormElement.cpp
@@ -221,8 +221,7 @@ bool HTMLFormElement::validateInteractively(Event* event)
}
Vector<RefPtr<FormAssociatedElement> > unhandledInvalidControls;
- collectUnhandledInvalidControls(unhandledInvalidControls);
- if (unhandledInvalidControls.isEmpty())
+ if (!checkInvalidControlsAndCollectUnhandled(unhandledInvalidControls))
return true;
// If the form has invalid controls, abort submission.
@@ -463,7 +462,7 @@ unsigned HTMLFormElement::formElementIndex(FormAssociatedElement* associatedElem
if (node->isHTMLElement()
&& (static_cast<Element*>(node)->isFormControlElement()
|| node->hasTagName(objectTag))
- && static_cast<HTMLElement*>(node)->form() == this)
+ && toHTMLElement(node)->form() == this)
++i;
}
}
@@ -586,8 +585,7 @@ HTMLFormControlElement* HTMLFormElement::defaultButton() const
bool HTMLFormElement::checkValidity()
{
Vector<RefPtr<FormAssociatedElement> > controls;
- collectUnhandledInvalidControls(controls);
- return controls.isEmpty();
+ return !checkInvalidControlsAndCollectUnhandled(controls);
}
void HTMLFormElement::broadcastFormEvent(const AtomicString& eventName)
@@ -623,7 +621,7 @@ void HTMLFormElement::dispatchFormChange()
broadcastFormEvent(eventNames().formchangeEvent);
}
-void HTMLFormElement::collectUnhandledInvalidControls(Vector<RefPtr<FormAssociatedElement> >& unhandledInvalidControls)
+bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled(Vector<RefPtr<FormAssociatedElement> >& unhandledInvalidControls)
{
RefPtr<HTMLFormElement> protector(this);
// Copy m_associatedElements because event handlers called from
@@ -632,10 +630,15 @@ void HTMLFormElement::collectUnhandledInvalidControls(Vector<RefPtr<FormAssociat
elements.reserveCapacity(m_associatedElements.size());
for (unsigned i = 0; i < m_associatedElements.size(); ++i)
elements.append(m_associatedElements[i]);
+ bool hasInvalidControls = false;
for (unsigned i = 0; i < elements.size(); ++i) {
- if (elements[i]->form() == this && elements[i]->isFormControlElement())
- static_cast<HTMLFormControlElement*>(elements[i].get())->checkValidity(&unhandledInvalidControls);
+ if (elements[i]->form() == this && elements[i]->isFormControlElement()) {
+ HTMLFormControlElement* control = static_cast<HTMLFormControlElement*>(elements[i].get());
+ if (!control->checkValidity(&unhandledInvalidControls) && control->form() == this)
+ hasInvalidControls = true;
+ }
}
+ return hasInvalidControls;
}
HTMLFormControlElement* HTMLFormElement::elementForAlias(const AtomicString& alias)
diff --git a/Source/WebCore/html/HTMLFormElement.h b/Source/WebCore/html/HTMLFormElement.h
index 7d7f4f8..f723533 100644
--- a/Source/WebCore/html/HTMLFormElement.h
+++ b/Source/WebCore/html/HTMLFormElement.h
@@ -144,8 +144,9 @@ private:
bool validateInteractively(Event*);
// Validates each of the controls, and stores controls of which 'invalid'
- // event was not canceled to the specified vector.
- void collectUnhandledInvalidControls(Vector<RefPtr<FormAssociatedElement> >&);
+ // event was not canceled to the specified vector. Returns true if there
+ // are any invalid controls in this form.
+ bool checkInvalidControlsAndCollectUnhandled(Vector<RefPtr<FormAssociatedElement> >&);
void broadcastFormEvent(const AtomicString&);
diff --git a/Source/WebCore/html/HTMLFrameElementBase.cpp b/Source/WebCore/html/HTMLFrameElementBase.cpp
index 47465c6..cf079ea 100644
--- a/Source/WebCore/html/HTMLFrameElementBase.cpp
+++ b/Source/WebCore/html/HTMLFrameElementBase.cpp
@@ -80,7 +80,7 @@ bool HTMLFrameElementBase::isURLAllowed() const
// But we don't allow more than one.
bool foundSelfReference = false;
for (Frame* frame = document()->frame(); frame; frame = frame->tree()->parent()) {
- if (equalIgnoringFragmentIdentifier(frame->loader()->url(), completeURL)) {
+ if (equalIgnoringFragmentIdentifier(frame->document()->url(), completeURL)) {
if (foundSelfReference)
return false;
foundSelfReference = true;
diff --git a/Source/WebCore/html/HTMLFrameSetElement.cpp b/Source/WebCore/html/HTMLFrameSetElement.cpp
index 0bb6c56..50f921b 100644
--- a/Source/WebCore/html/HTMLFrameSetElement.cpp
+++ b/Source/WebCore/html/HTMLFrameSetElement.cpp
@@ -75,12 +75,12 @@ void HTMLFrameSetElement::parseMappedAttribute(Attribute* attr)
{
if (attr->name() == rowsAttr) {
if (!attr->isNull()) {
- m_rowLengths.set(newLengthArray(attr->value().string(), m_totalRows));
+ m_rowLengths = newLengthArray(attr->value().string(), m_totalRows);
setNeedsStyleRecalc();
}
} else if (attr->name() == colsAttr) {
if (!attr->isNull()) {
- m_colLengths.set(newLengthArray(attr->value().string(), m_totalCols));
+ m_colLengths = newLengthArray(attr->value().string(), m_totalCols);
setNeedsStyleRecalc();
}
} else if (attr->name() == frameborderAttr) {
diff --git a/Source/WebCore/html/HTMLImageLoader.cpp b/Source/WebCore/html/HTMLImageLoader.cpp
index 710c177..ab4ae29 100644
--- a/Source/WebCore/html/HTMLImageLoader.cpp
+++ b/Source/WebCore/html/HTMLImageLoader.cpp
@@ -33,6 +33,7 @@
#if USE(JSC)
#include "JSDOMWindowBase.h"
+#include <runtime/JSLock.h>
#endif
namespace WebCore {
@@ -76,6 +77,7 @@ void HTMLImageLoader::notifyFinished(CachedResource*)
#if USE(JSC)
if (!loadError) {
if (!elem->inDocument()) {
+ JSC::JSLock lock(JSC::SilenceAssertionsOnly);
JSC::JSGlobalData* globalData = JSDOMWindowBase::commonJSGlobalData();
globalData->heap.reportExtraMemoryCost(cachedImage->encodedSize());
}
diff --git a/Source/WebCore/html/HTMLInputElement.cpp b/Source/WebCore/html/HTMLInputElement.cpp
index 0d20389..14dd149 100644
--- a/Source/WebCore/html/HTMLInputElement.cpp
+++ b/Source/WebCore/html/HTMLInputElement.cpp
@@ -45,6 +45,7 @@
#include "KeyboardEvent.h"
#include "LocalizedStrings.h"
#include "MouseEvent.h"
+#include "PlatformMouseEvent.h"
#include "RenderTextControlSingleLine.h"
#include "RenderTheme.h"
#include "RuntimeEnabledFeatures.h"
@@ -69,7 +70,7 @@ using namespace HTMLNames;
const int maxSavedResults = 256;
-HTMLInputElement::HTMLInputElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
+HTMLInputElement::HTMLInputElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form, bool createdByParser)
: HTMLTextFormControlElement(tagName, document, form)
, m_maxResults(-1)
, m_isChecked(false)
@@ -79,14 +80,16 @@ HTMLInputElement::HTMLInputElement(const QualifiedName& tagName, Document* docum
, m_isActivatedSubmit(false)
, m_autocomplete(Uninitialized)
, m_isAutofilled(false)
+ , m_stateRestored(false)
+ , m_parsingInProgress(createdByParser)
, m_inputType(InputType::createText(this))
{
ASSERT(hasTagName(inputTag) || hasTagName(isindexTag));
}
-PassRefPtr<HTMLInputElement> HTMLInputElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
+PassRefPtr<HTMLInputElement> HTMLInputElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form, bool createdByParser)
{
- return adoptRef(new HTMLInputElement(tagName, document, form));
+ return adoptRef(new HTMLInputElement(tagName, document, form, createdByParser));
}
HTMLInputElement::~HTMLInputElement()
@@ -146,7 +149,7 @@ void HTMLInputElement::updateCheckedRadioButtons()
control->setNeedsValidityCheck();
}
}
-
+
if (renderer() && renderer()->style()->hasAppearance())
renderer()->theme()->stateChanged(renderer(), CheckedState);
}
@@ -356,7 +359,7 @@ void HTMLInputElement::applyStep(double count, ExceptionCode& ec)
if (newValue > m_inputType->maximum())
newValue = m_inputType->maximum();
setValueAsNumber(newValue, ec);
-
+
if (AXObjectCache::accessibilityEnabled())
document()->axObjectCache()->postNotification(renderer(), AXObjectCache::AXValueChanged, true);
}
@@ -386,7 +389,7 @@ bool HTMLInputElement::isMouseFocusable() const
}
void HTMLInputElement::updateFocusAppearance(bool restorePreviousSelection)
-{
+{
if (isTextField())
InputElement::updateFocusAppearance(m_data, this, this, restorePreviousSelection);
else
@@ -517,6 +520,7 @@ bool HTMLInputElement::saveFormControlState(String& result) const
void HTMLInputElement::restoreFormControlState(const String& state)
{
m_inputType->restoreFormControlState(state);
+ m_stateRestored = true;
}
bool HTMLInputElement::canStartSelection() const
@@ -539,11 +543,11 @@ void HTMLInputElement::accessKeyAction(bool sendToAnyElement)
bool HTMLInputElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const
{
if (((attrName == heightAttr || attrName == widthAttr) && m_inputType->shouldRespectHeightAndWidthAttributes())
- || attrName == vspaceAttr
+ || attrName == vspaceAttr
|| attrName == hspaceAttr) {
result = eUniversal;
return false;
- }
+ }
if (attrName == alignAttr && m_inputType->shouldRespectAlignAttribute()) {
// Share with <img> since the alignment behavior is the same.
@@ -585,11 +589,14 @@ void HTMLInputElement::parseMappedAttribute(Attribute* attr)
setFormControlValueMatchesRenderer(false);
setNeedsValidityCheck();
} else if (attr->name() == checkedAttr) {
- if (m_reflectsCheckedAttribute) {
+ // Another radio button in the same group might be checked by state
+ // restore. We shouldn't call setChecked() even if this has the checked
+ // attribute. So, delay the setChecked() call until
+ // finishParsingChildren() is called if parsing is in progress.
+ if (!m_parsingInProgress && m_reflectsCheckedAttribute) {
setChecked(!attr->isNull());
m_reflectsCheckedAttribute = true;
}
- setNeedsValidityCheck();
} else if (attr->name() == maxlengthAttr) {
InputElement::parseMaxLengthAttribute(m_data, this, this, attr);
setNeedsValidityCheck();
@@ -658,6 +665,18 @@ void HTMLInputElement::parseMappedAttribute(Attribute* attr)
HTMLTextFormControlElement::parseMappedAttribute(attr);
}
+void HTMLInputElement::finishParsingChildren()
+{
+ m_parsingInProgress = false;
+ HTMLFormControlElementWithState::finishParsingChildren();
+ if (!m_stateRestored) {
+ bool checked = hasAttribute(checkedAttr);
+ if (checked)
+ setChecked(checked);
+ m_reflectsCheckedAttribute = true;
+ }
+}
+
bool HTMLInputElement::rendererIsNeeded(RenderStyle* style)
{
return m_inputType->rendererIsNeeded() && HTMLFormControlElementWithState::rendererIsNeeded(style);
@@ -756,6 +775,7 @@ void HTMLInputElement::setChecked(bool nowChecked, bool sendChangeEvent)
setNeedsStyleRecalc();
updateCheckedRadioButtons();
+ setNeedsValidityCheck();
// Ideally we'd do this from the render tree (matching
// RenderTextView), but it's not possible to do it at the moment
@@ -883,6 +903,7 @@ void HTMLInputElement::setValue(const String& value, bool sendChangeEvent)
cacheSelection(max, max);
m_data.setSuggestedValue(String());
}
+ m_inputType->valueChanged();
// Don't dispatch the change event when focused, it will be dispatched
// when the control loses focus.
@@ -958,6 +979,8 @@ void* HTMLInputElement::preDispatchEventHandler(Event* event)
{
if (event->type() != eventNames().clickEvent)
return 0;
+ if (!event->isMouseEvent() || static_cast<MouseEvent*>(event)->button() != LeftButton)
+ return 0;
// FIXME: Check whether there are any cases where this actually ends up leaking.
return m_inputType->willDispatchClick().leakPtr();
}
@@ -965,8 +988,6 @@ void* HTMLInputElement::preDispatchEventHandler(Event* event)
void HTMLInputElement::postDispatchEventHandler(Event* event, void* dataFromPreDispatch)
{
OwnPtr<ClickHandlingState> state = adoptPtr(static_cast<ClickHandlingState*>(dataFromPreDispatch));
- if (event->type() != eventNames().clickEvent)
- return;
if (!state)
return;
m_inputType->didDispatchClick(event, *state);
@@ -974,7 +995,7 @@ void HTMLInputElement::postDispatchEventHandler(Event* event, void* dataFromPreD
void HTMLInputElement::defaultEventHandler(Event* evt)
{
- if (evt->isMouseEvent() && evt->type() == eventNames().clickEvent) {
+ if (evt->isMouseEvent() && evt->type() == eventNames().clickEvent && static_cast<MouseEvent*>(evt)->button() == LeftButton) {
m_inputType->handleClickEvent(static_cast<MouseEvent*>(evt));
if (evt->defaultHandled())
return;
@@ -1134,7 +1155,7 @@ void HTMLInputElement::setAutofilled(bool autofilled)
{
if (autofilled == m_isAutofilled)
return;
-
+
m_isAutofilled = autofilled;
setNeedsStyleRecalc();
}
@@ -1144,6 +1165,11 @@ FileList* HTMLInputElement::files()
return m_inputType->files();
}
+String HTMLInputElement::visibleValue() const
+{
+ return m_inputType->visibleValue();
+}
+
bool HTMLInputElement::isAcceptableValue(const String& proposedValue) const
{
return m_inputType->isAcceptableValue(proposedValue);
@@ -1225,7 +1251,7 @@ void HTMLInputElement::willMoveToNewOwnerDocument()
// Always unregister for cache callbacks when leaving a document, even if we would otherwise like to be registered
if (needsActivationCallback())
document()->unregisterForDocumentActivationCallbacks(this);
-
+
document()->checkedRadioButtons().removeButton(this);
HTMLFormControlElementWithState::willMoveToNewOwnerDocument();
@@ -1234,10 +1260,10 @@ void HTMLInputElement::willMoveToNewOwnerDocument()
void HTMLInputElement::didMoveToNewOwnerDocument()
{
registerForActivationCallbackIfNeeded();
-
+
HTMLFormControlElementWithState::didMoveToNewOwnerDocument();
}
-
+
void HTMLInputElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const
{
HTMLFormControlElementWithState::addSubresourceAttributeURLs(urls);
diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h
index 403248c..757992a 100644
--- a/Source/WebCore/html/HTMLInputElement.h
+++ b/Source/WebCore/html/HTMLInputElement.h
@@ -37,7 +37,7 @@ class KURL;
class HTMLInputElement : public HTMLTextFormControlElement, public InputElement {
public:
- static PassRefPtr<HTMLInputElement> create(const QualifiedName&, Document*, HTMLFormElement*);
+ static PassRefPtr<HTMLInputElement> create(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
virtual ~HTMLInputElement();
DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitspeechchange);
@@ -198,7 +198,7 @@ public:
void updateCheckedRadioButtons();
protected:
- HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement* = 0);
+ HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
virtual void defaultEventHandler(Event*);
@@ -240,6 +240,7 @@ private:
virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const;
virtual void parseMappedAttribute(Attribute*);
+ virtual void finishParsingChildren();
virtual void copyNonAttributeProperties(const Element* source);
@@ -258,6 +259,7 @@ private:
virtual void cacheSelection(int start, int end);
+ virtual String visibleValue() const;
virtual bool isAcceptableValue(const String&) const;
virtual String sanitizeValue(const String&) const;
virtual bool hasUnacceptableValue() const;
@@ -312,6 +314,8 @@ private:
#if ENABLE(DATALIST)
bool m_hasNonEmptyList : 1;
#endif
+ bool m_stateRestored : 1;
+ bool m_parsingInProgress : 1;
OwnPtr<InputType> m_inputType;
};
diff --git a/Source/WebCore/html/HTMLIsIndexElement.cpp b/Source/WebCore/html/HTMLIsIndexElement.cpp
index a23a353..f865790 100644
--- a/Source/WebCore/html/HTMLIsIndexElement.cpp
+++ b/Source/WebCore/html/HTMLIsIndexElement.cpp
@@ -33,7 +33,7 @@ namespace WebCore {
using namespace HTMLNames;
HTMLIsIndexElement::HTMLIsIndexElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
- : HTMLInputElement(tagName, document, form)
+ : HTMLInputElement(tagName, document, form, false)
{
ASSERT(hasTagName(isindexTag));
setDefaultName(isindexTag.localName());
diff --git a/Source/WebCore/html/HTMLKeygenElement.cpp b/Source/WebCore/html/HTMLKeygenElement.cpp
index 881a0a8..b90335e 100644
--- a/Source/WebCore/html/HTMLKeygenElement.cpp
+++ b/Source/WebCore/html/HTMLKeygenElement.cpp
@@ -29,6 +29,7 @@
#include "Document.h"
#include "FormDataList.h"
#include "HTMLNames.h"
+#include "HTMLSelectElement.h"
#include "HTMLOptionElement.h"
#include "SSLKeyGenerator.h"
#include "Text.h"
@@ -40,20 +41,41 @@ namespace WebCore {
using namespace HTMLNames;
+class KeygenSelectElement : public HTMLSelectElement {
+public:
+ static PassRefPtr<KeygenSelectElement> create(Document* document)
+ {
+ return adoptRef(new KeygenSelectElement(document));
+ }
+
+ virtual const AtomicString& shadowPseudoId() const
+ {
+ DEFINE_STATIC_LOCAL(AtomicString, pseudoId, ("-webkit-keygen-select"));
+ return pseudoId;
+ }
+
+protected:
+ KeygenSelectElement(Document* document)
+ : HTMLSelectElement(selectTag, document, 0)
+ {
+ }
+};
+
inline HTMLKeygenElement::HTMLKeygenElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
- : HTMLSelectElement(tagName, document, form)
+ : HTMLFormControlElementWithState(tagName, document, form)
{
ASSERT(hasTagName(keygenTag));
- // FIXME: This markup should go in the shadow tree.
- // Add one option element for each key size.
+ // Create a select element with one option element for each key size.
+ RefPtr<HTMLSelectElement> select = KeygenSelectElement::create(document);
Vector<String> keys;
getSupportedKeySizes(keys);
for (size_t i = 0; i < keys.size(); ++i) {
RefPtr<HTMLOptionElement> option = HTMLOptionElement::create(document, this->form());
- parserAddChild(option);
+ select->parserAddChild(option);
option->parserAddChild(Text::create(document, keys[i]));
}
+ setShadowRoot(select);
}
PassRefPtr<HTMLKeygenElement> HTMLKeygenElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
@@ -61,22 +83,18 @@ PassRefPtr<HTMLKeygenElement> HTMLKeygenElement::create(const QualifiedName& tag
return adoptRef(new HTMLKeygenElement(tagName, document, form));
}
-const AtomicString& HTMLKeygenElement::formControlType() const
-{
- DEFINE_STATIC_LOCAL(const AtomicString, keygen, ("keygen"));
- return keygen;
-}
-
void HTMLKeygenElement::parseMappedAttribute(Attribute* attr)
{
+ // Reflect disabled attribute on the shadow select element
+ if (attr->name() == disabledAttr)
+ selectShadow()->setAttribute(attr->name(), attr->value());
+
if (attr->name() == challengeAttr)
m_challenge = attr->value();
else if (attr->name() == keytypeAttr)
m_keyType = attr->value();
- else {
- // Skip HTMLSelectElement parsing.
+ else
HTMLFormControlElement::parseMappedAttribute(attr);
- }
}
bool HTMLKeygenElement::appendFormData(FormDataList& encoded_values, bool)
@@ -84,11 +102,27 @@ bool HTMLKeygenElement::appendFormData(FormDataList& encoded_values, bool)
// Only RSA is supported at this time.
if (!m_keyType.isNull() && !equalIgnoringCase(m_keyType, "rsa"))
return false;
- String value = signedPublicKeyAndChallengeString(selectedIndex(), m_challenge, document()->baseURL());
+ String value = signedPublicKeyAndChallengeString(selectShadow()->selectedIndex(), m_challenge, document()->baseURL());
if (value.isNull())
return false;
encoded_values.appendData(name(), value.utf8());
return true;
}
+const AtomicString& HTMLKeygenElement::formControlType() const
+{
+ DEFINE_STATIC_LOCAL(const AtomicString, keygen, ("keygen"));
+ return keygen;
+}
+
+void HTMLKeygenElement::reset()
+{
+ static_cast<HTMLFormControlElement*>(selectShadow())->reset();
+}
+
+HTMLSelectElement* HTMLKeygenElement::selectShadow()
+{
+ return static_cast<HTMLSelectElement*>(shadowRoot());
+}
+
} // namespace
diff --git a/Source/WebCore/html/HTMLKeygenElement.h b/Source/WebCore/html/HTMLKeygenElement.h
index 3dc4ad2..a7a8a64 100644
--- a/Source/WebCore/html/HTMLKeygenElement.h
+++ b/Source/WebCore/html/HTMLKeygenElement.h
@@ -24,11 +24,13 @@
#ifndef HTMLKeygenElement_h
#define HTMLKeygenElement_h
-#include "HTMLSelectElement.h"
+#include "HTMLFormControlElement.h"
namespace WebCore {
-class HTMLKeygenElement : public HTMLSelectElement {
+class HTMLSelectElement;
+
+class HTMLKeygenElement : public HTMLFormControlElementWithState {
public:
static PassRefPtr<HTMLKeygenElement> create(const QualifiedName&, Document*, HTMLFormElement*);
@@ -37,13 +39,21 @@ public:
private:
HTMLKeygenElement(const QualifiedName&, Document*, HTMLFormElement*);
- virtual bool isResettable() const { return true; }
+ virtual bool canStartSelection() const { return false; }
- virtual const AtomicString& formControlType() const;
virtual void parseMappedAttribute(Attribute*);
+
virtual bool appendFormData(FormDataList&, bool);
+ virtual const AtomicString& formControlType() const;
virtual bool isOptionalFormControl() const { return false; }
+ virtual bool isEnumeratable() const { return true; }
+
+ virtual bool isResettable() const { return true; }
+ virtual void reset();
+
+ HTMLSelectElement* selectShadow();
+
AtomicString m_challenge;
AtomicString m_keyType;
};
diff --git a/Source/WebCore/html/HTMLLinkElement.cpp b/Source/WebCore/html/HTMLLinkElement.cpp
index 8b2ae08..04cfda4 100644
--- a/Source/WebCore/html/HTMLLinkElement.cpp
+++ b/Source/WebCore/html/HTMLLinkElement.cpp
@@ -56,6 +56,7 @@ inline HTMLLinkElement::HTMLLinkElement(const QualifiedName& tagName, Document*
, m_disabledState(Unset)
, m_loading(false)
, m_createdByParser(createdByParser)
+ , m_isInShadowTree(false)
, m_pendingSheetType(None)
{
ASSERT(hasTagName(linkTag));
@@ -204,7 +205,7 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute
void HTMLLinkElement::process()
{
- if (!inDocument()) {
+ if (!inDocument() || m_isInShadowTree) {
ASSERT(!m_sheet);
return;
}
@@ -247,7 +248,7 @@ void HTMLLinkElement::process()
String charset = getAttribute(charsetAttr);
if (charset.isEmpty() && document()->frame())
- charset = document()->frame()->loader()->writer()->encoding();
+ charset = document()->charset();
if (m_cachedSheet) {
removePendingSheet();
@@ -298,6 +299,11 @@ void HTMLLinkElement::process()
void HTMLLinkElement::insertedIntoDocument()
{
HTMLElement::insertedIntoDocument();
+
+ m_isInShadowTree = isInShadowTree();
+ if (m_isInShadowTree)
+ return;
+
document()->addStyleSheetCandidateNode(this, m_createdByParser);
process();
@@ -307,6 +313,10 @@ void HTMLLinkElement::removedFromDocument()
{
HTMLElement::removedFromDocument();
+ if (m_isInShadowTree) {
+ ASSERT(!m_sheet);
+ return;
+ }
document()->removeStyleSheetCandidateNode(this);
if (m_sheet) {
diff --git a/Source/WebCore/html/HTMLLinkElement.h b/Source/WebCore/html/HTMLLinkElement.h
index e1198b1..3798c33 100644
--- a/Source/WebCore/html/HTMLLinkElement.h
+++ b/Source/WebCore/html/HTMLLinkElement.h
@@ -147,6 +147,7 @@ private:
RelAttribute m_relAttribute;
bool m_loading;
bool m_createdByParser;
+ bool m_isInShadowTree;
PendingSheetType m_pendingSheetType;
};
diff --git a/Source/WebCore/html/HTMLMediaElement.cpp b/Source/WebCore/html/HTMLMediaElement.cpp
index be478b3..04d0a1d 100644
--- a/Source/WebCore/html/HTMLMediaElement.cpp
+++ b/Source/WebCore/html/HTMLMediaElement.cpp
@@ -48,6 +48,7 @@
#include "HTMLSourceElement.h"
#include "HTMLVideoElement.h"
#include "Logging.h"
+#include "MediaControls.h"
#include "MediaDocument.h"
#include "MediaError.h"
#include "MediaList.h"
@@ -2181,6 +2182,7 @@ void HTMLMediaElement::userCancelledLoad()
m_player.clear();
#endif
stopPeriodicTimers();
+ m_loadTimer.stop();
m_loadState = WaitingForSource;
// 2 - Set the error attribute to a new MediaError object whose code attribute is set to MEDIA_ERR_ABORTED.
@@ -2297,7 +2299,7 @@ void HTMLMediaElement::defaultEventHandler(Event* event)
widget->handleEvent(event);
#else
if (renderer() && renderer()->isMedia())
- toRenderMedia(renderer())->forwardEvent(event);
+ toRenderMedia(renderer())->controls()->forwardEvent(event);
if (event->defaultHandled())
return;
HTMLElement::defaultEventHandler(event);
@@ -2401,7 +2403,7 @@ void HTMLMediaElement::createMediaPlayerProxy()
m_needWidgetUpdate = false;
}
-void HTMLMediaElement::updateWidget(bool)
+void HTMLMediaElement::updateWidget(PluginCreationOption)
{
mediaElement->setNeedWidgetUpdate(false);
@@ -2493,6 +2495,22 @@ bool HTMLMediaElement::webkitHasClosedCaptions() const
return hasClosedCaptions();
}
+#if ENABLE(MEDIA_STATISTICS)
+unsigned long HTMLMediaElement::webkitAudioBytesDecoded() const
+{
+ if (!m_player)
+ return 0;
+ return m_player->audioBytesDecoded();
+}
+
+unsigned long HTMLMediaElement::webkitVideoBytesDecoded() const
+{
+ if (!m_player)
+ return 0;
+ return m_player->videoBytesDecoded();
+}
+#endif
+
void HTMLMediaElement::mediaCanStart()
{
LOG(Media, "HTMLMediaElement::mediaCanStart");
diff --git a/Source/WebCore/html/HTMLMediaElement.h b/Source/WebCore/html/HTMLMediaElement.h
index bdc3447..9778fd4 100644
--- a/Source/WebCore/html/HTMLMediaElement.h
+++ b/Source/WebCore/html/HTMLMediaElement.h
@@ -129,6 +129,12 @@ public:
bool webkitClosedCaptionsVisible() const;
void setWebkitClosedCaptionsVisible(bool);
+#if ENABLE(MEDIA_STATISTICS)
+// Statistics
+ unsigned long webkitAudioBytesDecoded() const;
+ unsigned long webkitVideoBytesDecoded() const;
+#endif
+
// controls
bool controls() const;
void setControls(bool);
@@ -152,7 +158,7 @@ public:
void getPluginProxyParams(KURL& url, Vector<String>& names, Vector<String>& values);
virtual void finishParsingChildren();
void createMediaPlayerProxy();
- void updateWidget(bool onlyCreateNonNetscapePlugins);
+ void updateWidget(PluginCreationOption);
#endif
bool hasSingleSecurityOrigin() const { return !m_player || m_player->hasSingleSecurityOrigin(); }
diff --git a/Source/WebCore/html/HTMLMediaElement.idl b/Source/WebCore/html/HTMLMediaElement.idl
index d6ba79d..9d4602d 100644
--- a/Source/WebCore/html/HTMLMediaElement.idl
+++ b/Source/WebCore/html/HTMLMediaElement.idl
@@ -81,5 +81,11 @@ interface [Conditional=VIDEO] HTMLMediaElement : HTMLElement {
readonly attribute boolean webkitHasClosedCaptions;
attribute boolean webkitClosedCaptionsVisible;
+
+#if defined(ENABLE_MEDIA_STATISTICS) && ENABLE_MEDIA_STATISTICS
+ // The number of bytes consumed by the media decoder.
+ readonly attribute unsigned long webkitAudioBytesDecoded;
+ readonly attribute unsigned long webkitVideoBytesDecoded;
+#endif
};
}
diff --git a/Source/WebCore/html/HTMLObjectElement.cpp b/Source/WebCore/html/HTMLObjectElement.cpp
index a1dde1a..0f05a3a 100644
--- a/Source/WebCore/html/HTMLObjectElement.cpp
+++ b/Source/WebCore/html/HTMLObjectElement.cpp
@@ -236,14 +236,14 @@ bool HTMLObjectElement::hasFallbackContent() const
return false;
}
-bool HTMLObjectElement::hasValidClassId()
+inline bool HTMLObjectElement::hasValidClassId()
{
// HTML5 says that fallback content should be rendered if a non-empty
// classid is specified for which the UA can't find a suitable plug-in.
// WebKit supports no classids, with the exception of Qt plug-ins, which use
// classid to specify which QObject to load.
#if PLATFORM(QT)
- return classId().isEmpty() || equalIgnoringCase(serviceType(), "application/x-qt-plugin");
+ return classId().isEmpty() || equalIgnoringCase(serviceType(), "application/x-qt-plugin") || equalIgnoringCase(serviceType(), "application/x-qt-styled-widget");
#else
return classId().isEmpty();
#endif
@@ -251,7 +251,7 @@ bool HTMLObjectElement::hasValidClassId()
// FIXME: This should be unified with HTMLEmbedElement::updateWidget and
// moved down into HTMLPluginImageElement.cpp
-void HTMLObjectElement::updateWidget(bool onlyCreateNonNetscapePlugins)
+void HTMLObjectElement::updateWidget(PluginCreationOption pluginCreationOption)
{
ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing());
// FIXME: We should ASSERT(needsWidgetUpdate()), but currently
@@ -277,7 +277,7 @@ void HTMLObjectElement::updateWidget(bool onlyCreateNonNetscapePlugins)
bool fallbackContent = hasFallbackContent();
renderEmbeddedObject()->setHasFallbackContent(fallbackContent);
- if (onlyCreateNonNetscapePlugins && wouldLoadAsNetscapePlugin(url, serviceType))
+ if (pluginCreationOption == CreateOnlyNonNetscapePlugins && wouldLoadAsNetscapePlugin(url, serviceType))
return;
ASSERT(!m_inBeforeLoadEventHandler);
@@ -318,6 +318,7 @@ void HTMLObjectElement::insertedIntoDocument()
}
HTMLPlugInImageElement::insertedIntoDocument();
+ FormAssociatedElement::insertedIntoDocument();
}
void HTMLObjectElement::removedFromDocument()
@@ -329,6 +330,7 @@ void HTMLObjectElement::removedFromDocument()
}
HTMLPlugInImageElement::removedFromDocument();
+ FormAssociatedElement::removedFromDocument();
}
void HTMLObjectElement::attributeChanged(Attribute* attr, bool preserveDecls)
@@ -508,4 +510,9 @@ const AtomicString& HTMLObjectElement::formControlName() const
return m_name.isNull() ? emptyAtom : m_name;
}
+HTMLFormElement* HTMLObjectElement::virtualForm() const
+{
+ return FormAssociatedElement::form();
+}
+
}
diff --git a/Source/WebCore/html/HTMLObjectElement.h b/Source/WebCore/html/HTMLObjectElement.h
index cc8a03c..82d63f7 100644
--- a/Source/WebCore/html/HTMLObjectElement.h
+++ b/Source/WebCore/html/HTMLObjectElement.h
@@ -85,7 +85,7 @@ private:
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
- virtual void updateWidget(bool onlyCreateNonNetscapePlugins);
+ virtual void updateWidget(PluginCreationOption);
void updateDocNamedItem();
bool hasFallbackContent() const;
@@ -98,6 +98,7 @@ private:
virtual void refFormAssociatedElement() { ref(); }
virtual void derefFormAssociatedElement() { deref(); }
+ virtual HTMLFormElement* virtualForm() const;
virtual const AtomicString& formControlName() const;
diff --git a/Source/WebCore/html/HTMLOptionElement.cpp b/Source/WebCore/html/HTMLOptionElement.cpp
index e8f624c..966f837 100644
--- a/Source/WebCore/html/HTMLOptionElement.cpp
+++ b/Source/WebCore/html/HTMLOptionElement.cpp
@@ -194,7 +194,7 @@ void HTMLOptionElement::childrenChanged(bool changedByParser, Node* beforeChange
HTMLSelectElement* HTMLOptionElement::ownerSelectElement() const
{
ContainerNode* select = parentNode();
- while (select && !(select->hasTagName(selectTag) || select->hasTagName(keygenTag)))
+ while (select && !select->hasTagName(selectTag))
select = select->parentNode();
if (!select)
@@ -221,6 +221,9 @@ String HTMLOptionElement::label() const
void HTMLOptionElement::setRenderStyle(PassRefPtr<RenderStyle> newStyle)
{
m_style = newStyle;
+ if (HTMLSelectElement* select = ownerSelectElement())
+ if (RenderObject* renderer = select->renderer())
+ renderer->repaint();
}
RenderStyle* HTMLOptionElement::nonRendererRenderStyle() const
diff --git a/Source/WebCore/html/HTMLOutputElement.cpp b/Source/WebCore/html/HTMLOutputElement.cpp
index 2f1d490..8be5d91 100644
--- a/Source/WebCore/html/HTMLOutputElement.cpp
+++ b/Source/WebCore/html/HTMLOutputElement.cpp
@@ -74,7 +74,7 @@ void HTMLOutputElement::setFor(const String& value)
m_tokens->setValue(value);
}
-void HTMLOutputElement::childrenChanged(bool createdByParser, Node*, Node*, int)
+void HTMLOutputElement::childrenChanged(bool createdByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
if (createdByParser || m_isSetTextContentInProgress) {
m_isSetTextContentInProgress = false;
@@ -83,6 +83,7 @@ void HTMLOutputElement::childrenChanged(bool createdByParser, Node*, Node*, int)
if (m_isDefaultValueMode)
m_defaultValue = textContent();
+ HTMLFormControlElement::childrenChanged(createdByParser, beforeChange, afterChange, childCountDelta);
}
void HTMLOutputElement::reset()
diff --git a/Source/WebCore/html/HTMLParamElement.cpp b/Source/WebCore/html/HTMLParamElement.cpp
index 2dc9d1d..45a74b2 100644
--- a/Source/WebCore/html/HTMLParamElement.cpp
+++ b/Source/WebCore/html/HTMLParamElement.cpp
@@ -42,6 +42,11 @@ PassRefPtr<HTMLParamElement> HTMLParamElement::create(const QualifiedName& tagNa
return adoptRef(new HTMLParamElement(tagName, document));
}
+bool HTMLParamElement::isURLParameter(const String& name)
+{
+ return equalIgnoringCase(name, "data") || equalIgnoringCase(name, "movie") || equalIgnoringCase(name, "src");
+}
+
void HTMLParamElement::parseMappedAttribute(Attribute* attr)
{
if (isIdAttributeName(attr->name())) {
@@ -64,7 +69,7 @@ bool HTMLParamElement::isURLAttribute(Attribute* attr) const
Attribute* attr = attributes()->getAttributeItem(nameAttr);
if (attr) {
const AtomicString& value = attr->value();
- if (equalIgnoringCase(value, "data") || equalIgnoringCase(value, "movie") || equalIgnoringCase(value, "src"))
+ if (isURLParameter(value))
return true;
}
}
@@ -75,11 +80,9 @@ void HTMLParamElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) cons
{
HTMLElement::addSubresourceAttributeURLs(urls);
- if (!equalIgnoringCase(name(), "data") &&
- !equalIgnoringCase(name(), "movie") &&
- !equalIgnoringCase(name(), "src"))
+ if (!isURLParameter(name()))
return;
-
+
addSubresourceURL(urls, document()->completeURL(value()));
}
diff --git a/Source/WebCore/html/HTMLParamElement.h b/Source/WebCore/html/HTMLParamElement.h
index f13f8fa..f448547 100644
--- a/Source/WebCore/html/HTMLParamElement.h
+++ b/Source/WebCore/html/HTMLParamElement.h
@@ -34,6 +34,8 @@ public:
String name() const { return m_name; }
String value() const { return m_value; }
+ static bool isURLParameter(const String&);
+
private:
HTMLParamElement(const QualifiedName&, Document*);
diff --git a/Source/WebCore/html/HTMLParserErrorCodes.cpp b/Source/WebCore/html/HTMLParserErrorCodes.cpp
index 6f973df..e1861a7 100644
--- a/Source/WebCore/html/HTMLParserErrorCodes.cpp
+++ b/Source/WebCore/html/HTMLParserErrorCodes.cpp
@@ -24,47 +24,5 @@
*/
#include "config.h"
-#include "HTMLParserErrorCodes.h"
-namespace WebCore {
-
-const char* htmlParserErrorMessageTemplate(HTMLParserErrorCode errorCode)
-{
- static const char* const errors[] = {
- "%tag1 is not allowed inside %tag2. Moving %tag1 into the nearest enclosing <table>.",
- "<head> must be a child of <html>. Content ignored.",
- "%tag1 is not allowed inside %tag2. Moving %tag1 into the <head>.",
- "Extra %tag1 encountered. Migrating attributes back to the original %tag1 element and ignoring the tag.",
- "<area> is not allowed inside %tag1. Moving the <area> into the nearest enclosing <map>.",
- "%tag1 is not allowed inside %tag2. Content ignored.",
- "%tag1 is not allowed in a <frameset> page. Content ignored.",
- "%tag1 is not allowed inside %tag2. Closing %tag2 and trying the insertion again.",
- "%tag1 is not allowed inside <caption>. Closing the <caption> and trying the insertion again.",
- "<table> is not allowed inside %tag1. Closing the current <table> and inserting the new <table> as a sibling.",
- "%tag1 is not allowed inside %tag2. Inserting %tag1 before the <table> instead.",
- "%tag1 misplaced in <table>. Creating %tag2 and putting %tag1 inside it.",
- "</br> encountered. Converting </br> into <br>.",
- "XML self-closing tag syntax used on %tag1. The tag will not be closed.",
- "Unmatched </p> encountered. Converting </p> into <p></p>.",
- "Unmatched %tag1 encountered. Ignoring tag.",
- "%tag1 misnested or not properly closed. Cloning %tag1 in order to preserve the styles applied by it.",
- "<form> cannot act as a container inside %tag1 without disrupting the table. The children of the <form> will be placed inside the %tag1 instead.",
- "XML self-closing tag syntax used on <script>. The tag will be closed by WebKit, but not all browsers do this. Change to <script></script> instead for best cross-browser compatibility."
- };
-
- if (errorCode >= MisplacedTablePartError && errorCode <= IncorrectXMLCloseScriptWarning)
- return errors[errorCode];
- return 0;
-}
-
-const char* htmlParserDocumentWriteMessage()
-{
- return "[The HTML that caused this error was generated by a script.] ";
-}
-
-bool isWarning(HTMLParserErrorCode code)
-{
- return code >= IncorrectXMLCloseScriptWarning;
-}
-
-}
+// FIXME: Delete this file.
diff --git a/Source/WebCore/html/HTMLParserErrorCodes.h b/Source/WebCore/html/HTMLParserErrorCodes.h
index 4da6b90..1d88bc6 100644
--- a/Source/WebCore/html/HTMLParserErrorCodes.h
+++ b/Source/WebCore/html/HTMLParserErrorCodes.h
@@ -23,38 +23,4 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef HTMLParserErrorCodes_h
-#define HTMLParserErrorCodes_h
-
-namespace WebCore {
-
-enum HTMLParserErrorCode {
- MisplacedTablePartError,
- MisplacedHeadError,
- MisplacedHeadContentError,
- RedundantHTMLBodyError,
- MisplacedAreaError,
- IgnoredContentError,
- MisplacedFramesetContentError,
- MisplacedContentRetryError,
- MisplacedCaptionContentError,
- MisplacedTableError,
- StrayTableContentError,
- TablePartRequiredError,
- MalformedBRError,
- IncorrectXMLSelfCloseError,
- StrayParagraphCloseError,
- StrayCloseTagError,
- ResidualStyleError,
- FormInsideTablePartError,
- IncorrectXMLCloseScriptWarning
-};
-
-const char* htmlParserErrorMessageTemplate(HTMLParserErrorCode);
-const char* htmlParserDocumentWriteMessage();
-
-bool isWarning(HTMLParserErrorCode);
-
-}
-
-#endif
+// FIXME: Delete this file.
diff --git a/Source/WebCore/html/HTMLParserQuirks.h b/Source/WebCore/html/HTMLParserQuirks.h
index 3bf22a4..4ac6db8 100644
--- a/Source/WebCore/html/HTMLParserQuirks.h
+++ b/Source/WebCore/html/HTMLParserQuirks.h
@@ -23,27 +23,4 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef HTMLParserQuirks_h
-#define HTMLParserQuirks_h
-
-#include <wtf/Forward.h>
-
-namespace WebCore {
-
-class Node;
-
-class HTMLParserQuirks {
- WTF_MAKE_NONCOPYABLE(HTMLParserQuirks);
-public:
- HTMLParserQuirks() { }
- virtual ~HTMLParserQuirks() { }
-
- virtual void reset() = 0;
-
- virtual bool shouldInsertNode(Node* parent, Node* newNode) = 0;
- virtual bool shouldPopBlock(const AtomicString& tagNameOnStack, const AtomicString& tagNameToPop) = 0;
-};
-
-} // namespace WebCore
-
-#endif // HTMLParserQuirks_h
+// FIXME: Delete this file.
diff --git a/Source/WebCore/html/HTMLPlugInImageElement.cpp b/Source/WebCore/html/HTMLPlugInImageElement.cpp
index 9ac5ad8..db07334 100644
--- a/Source/WebCore/html/HTMLPlugInImageElement.cpp
+++ b/Source/WebCore/html/HTMLPlugInImageElement.cpp
@@ -78,7 +78,7 @@ bool HTMLPlugInImageElement::allowedToLoadFrameURL(const String& url)
KURL completeURL = document()->completeURL(url);
bool foundSelfReference = false;
for (Frame* frame = document()->frame(); frame; frame = frame->tree()->parent()) {
- if (equalIgnoringFragmentIdentifier(frame->loader()->url(), completeURL)) {
+ if (equalIgnoringFragmentIdentifier(frame->document()->url(), completeURL)) {
if (foundSelfReference)
return false;
foundSelfReference = true;
@@ -166,8 +166,7 @@ void HTMLPlugInImageElement::updateWidgetIfNecessary()
if (!renderEmbeddedObject() || renderEmbeddedObject()->pluginCrashedOrWasMissing())
return;
- // True indicates that this code path should only create non-netscape plugins (no clue why).
- updateWidget(true);
+ updateWidget(CreateOnlyNonNetscapePlugins);
}
void HTMLPlugInImageElement::finishParsingChildren()
diff --git a/Source/WebCore/html/HTMLPlugInImageElement.h b/Source/WebCore/html/HTMLPlugInImageElement.h
index f394d40..364262b 100644
--- a/Source/WebCore/html/HTMLPlugInImageElement.h
+++ b/Source/WebCore/html/HTMLPlugInImageElement.h
@@ -29,12 +29,17 @@ namespace WebCore {
class HTMLImageLoader;
class FrameLoader;
+enum PluginCreationOption {
+ CreateAnyWidgetType,
+ CreateOnlyNonNetscapePlugins,
+};
+
// Base class for HTMLObjectElement and HTMLEmbedElement
class HTMLPlugInImageElement : public HTMLPlugInElement {
public:
RenderEmbeddedObject* renderEmbeddedObject() const;
- virtual void updateWidget(bool onlyCreateNonNetscapePlugins) = 0;
+ virtual void updateWidget(PluginCreationOption) = 0;
const String& serviceType() const { return m_serviceType; }
const String& url() const { return m_url; }
diff --git a/Source/WebCore/html/HTMLProgressElement.cpp b/Source/WebCore/html/HTMLProgressElement.cpp
index 4a55a1e..cab0429 100644
--- a/Source/WebCore/html/HTMLProgressElement.cpp
+++ b/Source/WebCore/html/HTMLProgressElement.cpp
@@ -26,9 +26,11 @@
#include "EventNames.h"
#include "ExceptionCode.h"
#include "FormDataList.h"
+#include "HTMLDivElement.h"
#include "HTMLFormElement.h"
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
+#include "ProgressBarValueElement.h"
#include "RenderProgress.h"
#include <wtf/StdLibExtras.h>
@@ -60,21 +62,19 @@ const AtomicString& HTMLProgressElement::formControlType() const
void HTMLProgressElement::parseMappedAttribute(Attribute* attribute)
{
- if (attribute->name() == valueAttr) {
- if (renderer())
- renderer()->updateFromElement();
- } else if (attribute->name() == maxAttr) {
- if (renderer())
- renderer()->updateFromElement();
- } else
+ if (attribute->name() == valueAttr)
+ didElementStateChange();
+ else if (attribute->name() == maxAttr)
+ didElementStateChange();
+ else
HTMLFormControlElement::parseMappedAttribute(attribute);
}
void HTMLProgressElement::attach()
{
+ createShadowSubtreeIfNeeded();
HTMLFormControlElement::attach();
- if (renderer())
- renderer()->updateFromElement();
+ didElementStateChange();
}
double HTMLProgressElement::value() const
@@ -121,5 +121,18 @@ double HTMLProgressElement::position() const
return value() / max();
}
+void HTMLProgressElement::didElementStateChange()
+{
+ if (renderer())
+ renderer()->updateFromElement();
+}
+
+void HTMLProgressElement::createShadowSubtreeIfNeeded()
+{
+ if (shadowRoot())
+ return;
+ setShadowRoot(ProgressBarValueElement::create(document()).get());
+}
+
} // namespace
#endif
diff --git a/Source/WebCore/html/HTMLProgressElement.h b/Source/WebCore/html/HTMLProgressElement.h
index c80f50f..a0db966 100644
--- a/Source/WebCore/html/HTMLProgressElement.h
+++ b/Source/WebCore/html/HTMLProgressElement.h
@@ -50,6 +50,9 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void attach();
+
+ void didElementStateChange();
+ void createShadowSubtreeIfNeeded();
};
} // namespace
diff --git a/Source/WebCore/html/HTMLSelectElement.cpp b/Source/WebCore/html/HTMLSelectElement.cpp
index c7f47f2..d23e56a 100644
--- a/Source/WebCore/html/HTMLSelectElement.cpp
+++ b/Source/WebCore/html/HTMLSelectElement.cpp
@@ -49,7 +49,7 @@ static const unsigned maxSelectItems = 10000;
HTMLSelectElement::HTMLSelectElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
: HTMLFormControlElementWithState(tagName, document, form)
{
- ASSERT(hasTagName(selectTag) || hasTagName(keygenTag));
+ ASSERT(hasTagName(selectTag));
}
PassRefPtr<HTMLSelectElement> HTMLSelectElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
@@ -206,7 +206,7 @@ void HTMLSelectElement::remove(HTMLOptionElement* option)
option->remove(ec);
}
-String HTMLSelectElement::value()
+String HTMLSelectElement::value() const
{
const Vector<Element*>& items = listItems();
for (unsigned i = 0; i < items.size(); i++) {
@@ -464,7 +464,7 @@ void HTMLSelectElement::setOption(unsigned index, HTMLOptionElement* option, Exc
setLength(index, ec);
// replace an existing entry ?
} else if (diff < 0) {
- before = static_cast<HTMLElement*>(options()->item(index+1));
+ before = toHTMLElement(options()->item(index+1));
remove(index);
}
// finally add the new element
@@ -486,7 +486,7 @@ void HTMLSelectElement::setLength(unsigned newLen, ExceptionCode& ec)
do {
RefPtr<Element> option = document()->createElement(optionTag, false);
ASSERT(option);
- add(static_cast<HTMLElement*>(option.get()), 0, ec);
+ add(toHTMLElement(option.get()), 0, ec);
if (ec)
break;
} while (++diff);
diff --git a/Source/WebCore/html/HTMLSelectElement.h b/Source/WebCore/html/HTMLSelectElement.h
index 42e8963..837675c 100644
--- a/Source/WebCore/html/HTMLSelectElement.h
+++ b/Source/WebCore/html/HTMLSelectElement.h
@@ -55,7 +55,7 @@ public:
void remove(int index);
void remove(HTMLOptionElement*);
- String value();
+ String value() const;
void setValue(const String&);
PassRefPtr<HTMLOptionsCollection> options();
diff --git a/Source/WebCore/html/HTMLTagNames.in b/Source/WebCore/html/HTMLTagNames.in
index f5ff077..83d41de 100644
--- a/Source/WebCore/html/HTMLTagNames.in
+++ b/Source/WebCore/html/HTMLTagNames.in
@@ -67,7 +67,7 @@ i interfaceName=HTMLElement
iframe interfaceName=HTMLIFrameElement
image mapToTagName=img
img interfaceName=HTMLImageElement, constructorNeedsFormElement
-input constructorNeedsFormElement
+input constructorNeedsFormElement, constructorNeedsCreatedByParser
ins interfaceName=HTMLModElement
isindex interfaceName=HTMLIsIndexElement, constructorNeedsFormElement
kbd interfaceName=HTMLElement
diff --git a/Source/WebCore/html/HTMLTextAreaElement.cpp b/Source/WebCore/html/HTMLTextAreaElement.cpp
index 2741bfe..b8b04de 100644
--- a/Source/WebCore/html/HTMLTextAreaElement.cpp
+++ b/Source/WebCore/html/HTMLTextAreaElement.cpp
@@ -281,6 +281,7 @@ void HTMLTextAreaElement::updateValue() const
const_cast<HTMLTextAreaElement*>(this)->setFormControlValueMatchesRenderer(true);
notifyFormStateChanged(this);
m_isDirty = true;
+ const_cast<HTMLTextAreaElement*>(this)->updatePlaceholderVisibility(false);
}
String HTMLTextAreaElement::value() const
diff --git a/Source/WebCore/html/HTMLVideoElement.cpp b/Source/WebCore/html/HTMLVideoElement.cpp
index bbda53a..2004e48 100644
--- a/Source/WebCore/html/HTMLVideoElement.cpp
+++ b/Source/WebCore/html/HTMLVideoElement.cpp
@@ -263,6 +263,24 @@ void HTMLVideoElement::willMoveToNewOwnerDocument()
HTMLMediaElement::willMoveToNewOwnerDocument();
}
+#if ENABLE(MEDIA_STATISTICS)
+unsigned long HTMLVideoElement::webkitDecodedFrames() const
+{
+ if (!player())
+ return 0;
+
+ return player()->decodedFrames();
+}
+
+unsigned long HTMLVideoElement::webkitDroppedFrames() const
+{
+ if (!player())
+ return 0;
+
+ return player()->droppedFrames();
+}
+#endif
+
}
#endif
diff --git a/Source/WebCore/html/HTMLVideoElement.h b/Source/WebCore/html/HTMLVideoElement.h
index d893411..dd38a59 100644
--- a/Source/WebCore/html/HTMLVideoElement.h
+++ b/Source/WebCore/html/HTMLVideoElement.h
@@ -55,6 +55,12 @@ public:
void webkitEnterFullScreen(bool isUserGesture, ExceptionCode& ec) { webkitEnterFullscreen(isUserGesture, ec); }
void webkitExitFullScreen() { webkitExitFullscreen(); }
+#if ENABLE(MEDIA_STATISTICS)
+ // Statistics
+ unsigned long webkitDecodedFrames() const;
+ unsigned long webkitDroppedFrames() const;
+#endif
+
// Used by canvas to gain raw pixel access
void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
diff --git a/Source/WebCore/html/HTMLVideoElement.idl b/Source/WebCore/html/HTMLVideoElement.idl
index 770e4b2..50513d4 100644
--- a/Source/WebCore/html/HTMLVideoElement.idl
+++ b/Source/WebCore/html/HTMLVideoElement.idl
@@ -42,5 +42,15 @@ module html {
[NeedsUserGestureCheck] void webkitEnterFullScreen() raises (DOMException);
void webkitExitFullScreen();
+
+#if defined(ENABLE_MEDIA_STATISTICS) && ENABLE_MEDIA_STATISTICS
+ // The number of frames that have been decoded and made available for
+ // playback.
+ readonly attribute unsigned long webkitDecodedFrames;
+
+ // The number of decoded frames that have been dropped by the player
+ // for performance reasons during playback.
+ readonly attribute unsigned long webkitDroppedFrames;
+#endif
};
}
diff --git a/Source/WebCore/html/InputType.cpp b/Source/WebCore/html/InputType.cpp
index 8e3a9e3..21ba7c2 100644
--- a/Source/WebCore/html/InputType.cpp
+++ b/Source/WebCore/html/InputType.cpp
@@ -435,6 +435,10 @@ void InputType::srcAttributeChanged()
{
}
+void InputType::valueChanged()
+{
+}
+
void InputType::willMoveToNewOwnerDocument()
{
}
@@ -512,6 +516,11 @@ void InputType::didDispatchClick(Event*, const ClickHandlingState&)
{
}
+String InputType::visibleValue() const
+{
+ return element()->value();
+}
+
bool InputType::isAcceptableValue(const String&)
{
return true;
diff --git a/Source/WebCore/html/InputType.h b/Source/WebCore/html/InputType.h
index 40606d1..8c35af3 100644
--- a/Source/WebCore/html/InputType.h
+++ b/Source/WebCore/html/InputType.h
@@ -152,6 +152,7 @@ public:
virtual String typeMismatchText() const;
virtual String valueMissingText() const;
virtual bool canSetStringValue() const;
+ virtual String visibleValue() const;
virtual bool isAcceptableValue(const String&);
virtual String sanitizeValue(const String&);
virtual bool hasUnacceptableValue();
@@ -197,9 +198,11 @@ public:
virtual void minOrMaxAttributeChanged();
virtual void altAttributeChanged();
virtual void srcAttributeChanged();
+ virtual void valueChanged();
virtual void willMoveToNewOwnerDocument();
virtual bool shouldRespectAlignAttribute();
virtual FileList* files();
+ // Should return true if the corresponding renderer for a type can display a suggested value.
virtual bool canSetSuggestedValue();
virtual bool shouldSendChangeEventAfterCheckedChanged();
virtual bool canSetValue(const String&);
diff --git a/Source/WebCore/html/MediaDocument.cpp b/Source/WebCore/html/MediaDocument.cpp
index d6fe6dd..cd1fdfb 100644
--- a/Source/WebCore/html/MediaDocument.cpp
+++ b/Source/WebCore/html/MediaDocument.cpp
@@ -209,7 +209,7 @@ void MediaDocument::replaceMediaElementTimerFired(Timer<MediaDocument>*)
embedElement->setAttribute(heightAttr, "100%");
embedElement->setAttribute(nameAttr, "plugin");
embedElement->setAttribute(srcAttr, url().string());
- embedElement->setAttribute(typeAttr, frame()->loader()->writer()->mimeType());
+ embedElement->setAttribute(typeAttr, loader()->writer()->mimeType());
ExceptionCode ec;
videoElement->parentNode()->replaceChild(embedElement, videoElement, ec);
diff --git a/Source/WebCore/html/NumberInputType.cpp b/Source/WebCore/html/NumberInputType.cpp
index 3916527..0011115 100644
--- a/Source/WebCore/html/NumberInputType.cpp
+++ b/Source/WebCore/html/NumberInputType.cpp
@@ -38,6 +38,7 @@
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
#include "KeyboardEvent.h"
+#include "LocalizedNumber.h"
#include "RenderTextControl.h"
#include <limits>
#include <wtf/ASCIICType.h>
@@ -49,17 +50,21 @@ namespace WebCore {
using namespace HTMLNames;
using namespace std;
-static const double numberDefaultMinimum = -FLT_MAX;
-static const double numberDefaultMaximum = FLT_MAX;
-
static const double numberDefaultStep = 1.0;
static const double numberStepScaleFactor = 1.0;
-static bool isNumberCharacter(UChar ch)
+// Returns true if the specified character can be a part of 'valid floating
+// point number' of HTML5.
+static bool isHTMLNumberCharacter(UChar ch)
{
return ch == '+' || ch == '-' || ch == '.' || ch == 'e' || ch == 'E' || isASCIIDigit(ch);
}
+static bool isNumberCharacter(UChar ch)
+{
+ return isLocalizedNumberCharacter(ch) || isHTMLNumberCharacter(ch);
+}
+
PassOwnPtr<InputType> NumberInputType::create(HTMLInputElement* element)
{
return adoptPtr(new NumberInputType(element));
@@ -77,11 +82,11 @@ double NumberInputType::valueAsNumber() const
void NumberInputType::setValueAsNumber(double newValue, ExceptionCode& ec) const
{
- if (newValue < numberDefaultMinimum) {
+ if (newValue < -numeric_limits<float>::max()) {
ec = INVALID_STATE_ERR;
return;
}
- if (newValue > numberDefaultMaximum) {
+ if (newValue > numeric_limits<float>::max()) {
ec = INVALID_STATE_ERR;
return;
}
@@ -120,12 +125,12 @@ bool NumberInputType::supportsRangeLimitation() const
double NumberInputType::minimum() const
{
- return parseToDouble(element()->fastGetAttribute(minAttr), numberDefaultMinimum);
+ return parseToDouble(element()->fastGetAttribute(minAttr), -numeric_limits<float>::max());
}
double NumberInputType::maximum() const
{
- return parseToDouble(element()->fastGetAttribute(maxAttr), numberDefaultMaximum);
+ return parseToDouble(element()->fastGetAttribute(maxAttr), numeric_limits<float>::max());
}
bool NumberInputType::stepMismatch(const String& value, double step) const
@@ -248,13 +253,29 @@ void NumberInputType::handleBlurEvent()
element()->renderer()->updateFromElement();
}
+String NumberInputType::visibleValue() const
+{
+ String currentValue = element()->value();
+ if (currentValue.isEmpty())
+ return currentValue;
+ double doubleValue = numeric_limits<double>::quiet_NaN();
+ parseToDoubleForNumberType(currentValue, &doubleValue);
+ String localized = formatLocalizedNumber(doubleValue);
+ return localized.isEmpty() ? currentValue : localized;
+}
+
bool NumberInputType::isAcceptableValue(const String& proposedValue)
{
- return proposedValue.isEmpty() || parseToDoubleForNumberType(proposedValue, 0);
+ return proposedValue.isEmpty() || isfinite(parseLocalizedNumber(proposedValue)) || parseToDoubleForNumberType(proposedValue, 0);
}
String NumberInputType::sanitizeValue(const String& proposedValue)
{
+ // Try to parse the value as a localized number, then try to parse it as
+ // the standard format.
+ double parsedValue = parseLocalizedNumber(proposedValue);
+ if (isfinite(parsedValue))
+ return serializeForNumberType(parsedValue);
return parseToDoubleForNumberType(proposedValue, 0) ? proposedValue : String();
}
diff --git a/Source/WebCore/html/NumberInputType.h b/Source/WebCore/html/NumberInputType.h
index 0b23d34..9d97134 100644
--- a/Source/WebCore/html/NumberInputType.h
+++ b/Source/WebCore/html/NumberInputType.h
@@ -64,6 +64,7 @@ private:
virtual String serialize(double) const;
virtual double acceptableError(double) const;
virtual void handleBlurEvent();
+ virtual String visibleValue() const;
virtual bool isAcceptableValue(const String&);
virtual String sanitizeValue(const String&);
virtual bool hasUnacceptableValue();
diff --git a/Source/WebCore/html/PluginDocument.cpp b/Source/WebCore/html/PluginDocument.cpp
index cebb949..94f44cf 100644
--- a/Source/WebCore/html/PluginDocument.cpp
+++ b/Source/WebCore/html/PluginDocument.cpp
@@ -28,6 +28,7 @@
#include "DocumentLoader.h"
#include "Frame.h"
#include "FrameLoaderClient.h"
+#include "FrameView.h"
#include "HTMLEmbedElement.h"
#include "HTMLHtmlElement.h"
#include "HTMLNames.h"
@@ -91,7 +92,7 @@ void PluginDocumentParser::createDocumentStructure()
m_embedElement->setAttribute(nameAttr, "plugin");
m_embedElement->setAttribute(srcAttr, document()->url().string());
- m_embedElement->setAttribute(typeAttr, document()->frame()->loader()->writer()->mimeType());
+ m_embedElement->setAttribute(typeAttr, document()->loader()->writer()->mimeType());
static_cast<PluginDocument*>(document())->setPluginNode(m_embedElement);
@@ -115,6 +116,13 @@ void PluginDocumentParser::appendBytes(DocumentWriter*, const char*, int, bool)
document()->updateLayout();
+ // Below we assume that renderer->widget() to have been created by
+ // document()->updateLayout(). However, in some cases, updateLayout() will
+ // recurse too many times and delay its post-layout tasks (such as creating
+ // the widget). Here we kick off the pending post-layout tasks so that we
+ // can synchronously redirect data to the plugin.
+ frame->view()->flushAnyPendingPostLayoutTasks();
+
if (RenderPart* renderer = m_embedElement->renderPart()) {
if (Widget* widget = renderer->widget()) {
frame->loader()->client()->redirectDataToPlugin(widget);
diff --git a/Source/WebCore/html/RangeInputType.cpp b/Source/WebCore/html/RangeInputType.cpp
index 7c74206..be7e0c6 100644
--- a/Source/WebCore/html/RangeInputType.cpp
+++ b/Source/WebCore/html/RangeInputType.cpp
@@ -158,6 +158,8 @@ void RangeInputType::handleMouseDownEvent(MouseEvent* event)
void RangeInputType::handleKeydownEvent(KeyboardEvent* event)
{
+ if (element()->disabled() || element()->readOnly())
+ return;
const String& key = event->keyIdentifier();
if (key != "Up" && key != "Right" && key != "Down" && key != "Left")
return;
@@ -257,6 +259,11 @@ void RangeInputType::minOrMaxAttributeChanged()
element()->setNeedsStyleRecalc();
}
+void RangeInputType::valueChanged()
+{
+ element()->shadowRoot()->setNeedsStyleRecalc();
+}
+
String RangeInputType::fallbackValue()
{
return serializeForNumberType(StepRange(element()).defaultValue());
diff --git a/Source/WebCore/html/RangeInputType.h b/Source/WebCore/html/RangeInputType.h
index 1447018..ac89d02 100644
--- a/Source/WebCore/html/RangeInputType.h
+++ b/Source/WebCore/html/RangeInputType.h
@@ -63,6 +63,7 @@ private:
virtual String serialize(double) const;
virtual void accessKeyAction(bool sendToAnyElement);
virtual void minOrMaxAttributeChanged();
+ virtual void valueChanged();
virtual String fallbackValue();
virtual String sanitizeValue(const String& proposedValue);
virtual bool shouldRespectListAttribute();
diff --git a/Source/WebCore/html/TextFieldInputType.cpp b/Source/WebCore/html/TextFieldInputType.cpp
index 54527b1..1d06be3 100644
--- a/Source/WebCore/html/TextFieldInputType.cpp
+++ b/Source/WebCore/html/TextFieldInputType.cpp
@@ -52,6 +52,11 @@ bool TextFieldInputType::valueMissing(const String& value) const
return value.isEmpty();
}
+bool TextFieldInputType::canSetSuggestedValue()
+{
+ return true;
+}
+
void TextFieldInputType::handleKeydownEvent(KeyboardEvent* event)
{
if (!element()->focused())
@@ -64,6 +69,8 @@ void TextFieldInputType::handleKeydownEvent(KeyboardEvent* event)
void TextFieldInputType::handleKeydownEventForSpinButton(KeyboardEvent* event)
{
+ if (element()->disabled() || element()->readOnly())
+ return;
const String& key = event->keyIdentifier();
int step = 0;
if (key == "Up")
@@ -78,6 +85,8 @@ void TextFieldInputType::handleKeydownEventForSpinButton(KeyboardEvent* event)
void TextFieldInputType::handleWheelEventForSpinButton(WheelEvent* event)
{
+ if (element()->disabled() || element()->readOnly())
+ return;
int step = 0;
if (event->wheelDeltaY() > 0)
step = 1;
diff --git a/Source/WebCore/html/TextFieldInputType.h b/Source/WebCore/html/TextFieldInputType.h
index e882c82..86ad0ef 100644
--- a/Source/WebCore/html/TextFieldInputType.h
+++ b/Source/WebCore/html/TextFieldInputType.h
@@ -40,6 +40,7 @@ namespace WebCore {
class TextFieldInputType : public InputType {
protected:
TextFieldInputType(HTMLInputElement* element) : InputType(element) { }
+ virtual bool canSetSuggestedValue();
virtual void handleKeydownEvent(KeyboardEvent*);
void handleKeydownEventForSpinButton(KeyboardEvent*);
void handleWheelEventForSpinButton(WheelEvent*);
diff --git a/Source/WebCore/html/TextInputType.cpp b/Source/WebCore/html/TextInputType.cpp
index c37263a..a369976 100644
--- a/Source/WebCore/html/TextInputType.cpp
+++ b/Source/WebCore/html/TextInputType.cpp
@@ -45,12 +45,6 @@ const AtomicString& TextInputType::formControlType() const
return InputTypeNames::text();
}
-bool TextInputType::canSetSuggestedValue()
-{
- // FIXME: Should this really be restricted to plain text? What about search, for example?
- return true;
-}
-
bool TextInputType::shouldRespectSpeechAttribute()
{
return true;
diff --git a/Source/WebCore/html/TextInputType.h b/Source/WebCore/html/TextInputType.h
index 3b6810e..243f656 100644
--- a/Source/WebCore/html/TextInputType.h
+++ b/Source/WebCore/html/TextInputType.h
@@ -42,7 +42,6 @@ public:
private:
TextInputType(HTMLInputElement* element) : BaseTextInputType(element) { }
virtual const AtomicString& formControlType() const;
- virtual bool canSetSuggestedValue();
virtual bool shouldRespectSpeechAttribute();
};
diff --git a/Source/WebCore/html/ValidationMessage.cpp b/Source/WebCore/html/ValidationMessage.cpp
index 2c441c7..f772b92 100644
--- a/Source/WebCore/html/ValidationMessage.cpp
+++ b/Source/WebCore/html/ValidationMessage.cpp
@@ -105,7 +105,7 @@ protected:
ElementWithPseudoId(Document* doc, const AtomicString& pseudoName)
: HTMLElement(divTag, doc)
, m_pseudoName(pseudoName) { };
- virtual AtomicString shadowPseudoId() const { return m_pseudoName; }
+ virtual const AtomicString& shadowPseudoId() const { return m_pseudoName; }
private:
AtomicString m_pseudoName;
diff --git a/Source/WebCore/html/canvas/ArrayBuffer.cpp b/Source/WebCore/html/canvas/ArrayBuffer.cpp
index 2136f64..4f75cc3 100644
--- a/Source/WebCore/html/canvas/ArrayBuffer.cpp
+++ b/Source/WebCore/html/canvas/ArrayBuffer.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBuffer.h"
#include <wtf/RefPtr.h>
@@ -100,5 +97,3 @@ void* ArrayBuffer::tryAllocate(unsigned numElements, unsigned elementByteSize)
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/ArrayBuffer.idl b/Source/WebCore/html/canvas/ArrayBuffer.idl
index 79a4685..6f63e65 100644
--- a/Source/WebCore/html/canvas/ArrayBuffer.idl
+++ b/Source/WebCore/html/canvas/ArrayBuffer.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
NoStaticTables,
diff --git a/Source/WebCore/html/canvas/ArrayBufferView.cpp b/Source/WebCore/html/canvas/ArrayBufferView.cpp
index 7f41bda..a2f61ca 100644
--- a/Source/WebCore/html/canvas/ArrayBufferView.cpp
+++ b/Source/WebCore/html/canvas/ArrayBufferView.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "ArrayBufferView.h"
#include "ArrayBuffer.h"
@@ -105,5 +102,3 @@ void ArrayBufferView::calculateOffsetAndLength(int start, int end, unsigned arra
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/ArrayBufferView.idl b/Source/WebCore/html/canvas/ArrayBufferView.idl
index be217c1..1ea451d 100644
--- a/Source/WebCore/html/canvas/ArrayBufferView.idl
+++ b/Source/WebCore/html/canvas/ArrayBufferView.idl
@@ -24,7 +24,7 @@
*/
module html {
- interface [Conditional=3D_CANVAS|BLOB, CustomToJS, NoStaticTables, OmitConstructor] ArrayBufferView {
+ interface [CustomToJS, NoStaticTables, OmitConstructor] ArrayBufferView {
readonly attribute ArrayBuffer buffer;
readonly attribute unsigned long byteOffset;
readonly attribute unsigned long byteLength;
diff --git a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index e029128..9ef2dba 100644
--- a/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -234,7 +234,7 @@ void CanvasRenderingContext2D::setAllAttributesToDefault()
if (!context)
return;
- context->setShadow(FloatSize(), 0, Color::transparent, ColorSpaceDeviceRGB);
+ context->setLegacyShadow(FloatSize(), 0, Color::transparent, ColorSpaceDeviceRGB);
context->setAlpha(1);
context->setCompositeOperation(CompositeSourceOver);
}
@@ -574,7 +574,7 @@ void CanvasRenderingContext2D::setStrokeColor(const String& color)
{
if (color == state().m_unparsedStrokeColor)
return;
- setStrokeStyle(CanvasStyle::createFromString(color));
+ setStrokeStyle(CanvasStyle::createFromString(color, canvas()->document()));
state().m_unparsedStrokeColor = color;
}
@@ -615,7 +615,7 @@ void CanvasRenderingContext2D::setFillColor(const String& color)
{
if (color == state().m_unparsedFillColor)
return;
- setFillStyle(CanvasStyle::createFromString(color));
+ setFillStyle(CanvasStyle::createFromString(color, canvas()->document()));
state().m_unparsedFillColor = color;
}
@@ -1000,7 +1000,7 @@ void CanvasRenderingContext2D::setShadow(float width, float height, float blur,
if (!c)
return;
- c->setShadow(IntSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ c->setLegacyShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
}
void CanvasRenderingContext2D::setShadow(float width, float height, float blur, const String& color, float alpha)
@@ -1018,7 +1018,7 @@ void CanvasRenderingContext2D::setShadow(float width, float height, float blur,
if (!c)
return;
- c->setShadow(IntSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ c->setLegacyShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
}
void CanvasRenderingContext2D::setShadow(float width, float height, float blur, float grayLevel, float alpha)
@@ -1031,7 +1031,7 @@ void CanvasRenderingContext2D::setShadow(float width, float height, float blur,
if (!c)
return;
- c->setShadow(IntSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ c->setLegacyShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
}
void CanvasRenderingContext2D::setShadow(float width, float height, float blur, float r, float g, float b, float a)
@@ -1044,7 +1044,7 @@ void CanvasRenderingContext2D::setShadow(float width, float height, float blur,
if (!c)
return;
- c->setShadow(IntSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ c->setLegacyShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
}
void CanvasRenderingContext2D::setShadow(float width, float height, float blur, float c, float m, float y, float k, float a)
@@ -1064,7 +1064,7 @@ void CanvasRenderingContext2D::setShadow(float width, float height, float blur,
CGContextSetShadowWithColor(dc->platformContext(), adjustedShadowSize(width, -height), blur, shadowColor);
CGColorRelease(shadowColor);
#else
- dc->setShadow(IntSize(width, -height), blur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ dc->setLegacyShadow(FloatSize(width, -height), blur, state().m_shadowColor, ColorSpaceDeviceRGB);
#endif
}
@@ -1084,7 +1084,7 @@ void CanvasRenderingContext2D::applyShadow()
float width = state().m_shadowOffset.width();
float height = state().m_shadowOffset.height();
- c->setShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
+ c->setLegacyShadow(FloatSize(width, -height), state().m_shadowBlur, state().m_shadowColor, ColorSpaceDeviceRGB);
}
static IntSize size(HTMLImageElement* image)
@@ -1105,8 +1105,8 @@ static IntSize size(HTMLVideoElement* video)
static inline FloatRect normalizeRect(const FloatRect& rect)
{
- return FloatRect(min(rect.x(), rect.right()),
- min(rect.y(), rect.bottom()),
+ return FloatRect(min(rect.x(), rect.maxX()),
+ min(rect.y(), rect.maxY()),
max(rect.width(), -rect.width()),
max(rect.height(), -rect.height()));
}
@@ -1760,7 +1760,8 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, flo
return;
const Font& font = accessFont();
-
+ const FontMetrics& fontMetrics = font.fontMetrics();
+
// FIXME: Handle maxWidth.
// FIXME: Need to turn off font smoothing.
@@ -1770,21 +1771,21 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, flo
unsigned length = text.length();
const UChar* string = text.characters();
- TextRun textRun(string, length, 0, 0, 0, rtl, override, false, false);
+ TextRun textRun(string, length, false, 0, 0, TextRun::AllowTrailingExpansion, rtl, override, false, false);
// Draw the item text at the correct point.
FloatPoint location(x, y);
switch (state().m_textBaseline) {
case TopTextBaseline:
case HangingTextBaseline:
- location.setY(y + font.ascent());
+ location.setY(y + fontMetrics.ascent());
break;
case BottomTextBaseline:
case IdeographicTextBaseline:
- location.setY(y - font.descent());
+ location.setY(y - fontMetrics.descent());
break;
case MiddleTextBaseline:
- location.setY(y - font.descent() + font.height() / 2);
+ location.setY(y - fontMetrics.descent() + fontMetrics.height() / 2);
break;
case AlphabeticTextBaseline:
default:
@@ -1792,7 +1793,7 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, flo
break;
}
- float width = font.width(TextRun(text, false, 0, 0, rtl, override));
+ float width = font.width(TextRun(text, false, 0, 0, TextRun::AllowTrailingExpansion, rtl, override));
TextAlign align = state().m_textAlign;
if (align == StartTextAlign)
@@ -1812,8 +1813,8 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, flo
}
// The slop built in to this mask rect matches the heuristic used in FontCGWin.cpp for GDI text.
- FloatRect textRect = FloatRect(location.x() - font.height() / 2, location.y() - font.ascent() - font.lineGap(),
- width + font.height(), font.lineSpacing());
+ FloatRect textRect = FloatRect(location.x() - fontMetrics.height() / 2, location.y() - fontMetrics.ascent() - fontMetrics.lineGap(),
+ width + fontMetrics.height(), fontMetrics.lineSpacing());
if (!fill)
textRect.inflate(c->strokeThickness() / 2);
diff --git a/Source/WebCore/html/canvas/CanvasStyle.cpp b/Source/WebCore/html/canvas/CanvasStyle.cpp
index a4e87e3..ee8567c 100644
--- a/Source/WebCore/html/canvas/CanvasStyle.cpp
+++ b/Source/WebCore/html/canvas/CanvasStyle.cpp
@@ -51,14 +51,16 @@
namespace WebCore {
-enum ColorParseResult { ParsedRGBA, ParsedCurrentColor, ParseFailed };
+enum ColorParseResult { ParsedRGBA, ParsedCurrentColor, ParsedSystemColor, ParseFailed };
-static ColorParseResult parseColor(RGBA32& parsedColor, const String& colorString)
+static ColorParseResult parseColor(RGBA32& parsedColor, const String& colorString, Document* document = 0)
{
if (equalIgnoringCase(colorString, "currentcolor"))
return ParsedCurrentColor;
if (CSSParser::parseColor(parsedColor, colorString))
return ParsedRGBA;
+ if (CSSParser::parseSystemColor(parsedColor, colorString, document))
+ return ParsedSystemColor;
return ParseFailed;
}
@@ -73,9 +75,10 @@ RGBA32 currentColor(HTMLCanvasElement* canvas)
bool parseColorOrCurrentColor(RGBA32& parsedColor, const String& colorString, HTMLCanvasElement* canvas)
{
- ColorParseResult parseResult = parseColor(parsedColor, colorString);
+ ColorParseResult parseResult = parseColor(parsedColor, colorString, canvas ? canvas->document() : 0);
switch (parseResult) {
case ParsedRGBA:
+ case ParsedSystemColor:
return true;
case ParsedCurrentColor:
parsedColor = currentColor(canvas);
@@ -131,12 +134,13 @@ CanvasStyle::CanvasStyle(PassRefPtr<CanvasPattern> pattern)
{
}
-PassRefPtr<CanvasStyle> CanvasStyle::createFromString(const String& color)
+PassRefPtr<CanvasStyle> CanvasStyle::createFromString(const String& color, Document* document)
{
RGBA32 rgba;
- ColorParseResult parseResult = parseColor(rgba, color);
+ ColorParseResult parseResult = parseColor(rgba, color, document);
switch (parseResult) {
case ParsedRGBA:
+ case ParsedSystemColor:
return adoptRef(new CanvasStyle(rgba));
case ParsedCurrentColor:
return adoptRef(new CanvasStyle(CurrentColor));
diff --git a/Source/WebCore/html/canvas/CanvasStyle.h b/Source/WebCore/html/canvas/CanvasStyle.h
index 91dc923..1c136d3 100644
--- a/Source/WebCore/html/canvas/CanvasStyle.h
+++ b/Source/WebCore/html/canvas/CanvasStyle.h
@@ -35,13 +35,14 @@ namespace WebCore {
class CanvasGradient;
class CanvasPattern;
+ class Document;
class GraphicsContext;
class HTMLCanvasElement;
class CanvasStyle : public RefCounted<CanvasStyle> {
public:
static PassRefPtr<CanvasStyle> createFromRGBA(RGBA32 rgba) { return adoptRef(new CanvasStyle(rgba)); }
- static PassRefPtr<CanvasStyle> createFromString(const String& color);
+ static PassRefPtr<CanvasStyle> createFromString(const String& color, Document* = 0);
static PassRefPtr<CanvasStyle> createFromStringWithOverrideAlpha(const String& color, float alpha);
static PassRefPtr<CanvasStyle> createFromGrayLevelWithAlpha(float grayLevel, float alpha) { return adoptRef(new CanvasStyle(grayLevel, alpha)); }
static PassRefPtr<CanvasStyle> createFromRGBAChannels(float r, float g, float b, float a) { return adoptRef(new CanvasStyle(r, g, b, a)); }
diff --git a/Source/WebCore/html/canvas/DataView.cpp b/Source/WebCore/html/canvas/DataView.cpp
index 82b10b3..e00443d 100755
--- a/Source/WebCore/html/canvas/DataView.cpp
+++ b/Source/WebCore/html/canvas/DataView.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "DataView.h"
#include "CheckedInt.h"
@@ -231,5 +228,3 @@ void DataView::setFloat64(unsigned byteOffset, double value, bool littleEndian,
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/DataView.h b/Source/WebCore/html/canvas/DataView.h
index 5707aa3..a8aba5c 100755
--- a/Source/WebCore/html/canvas/DataView.h
+++ b/Source/WebCore/html/canvas/DataView.h
@@ -75,7 +75,7 @@ private:
DataView(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned byteLength);
template<typename T>
- inline bool beyondRange(unsigned byteOffset) const { return byteOffset + sizeof(T) > m_byteLength; }
+ inline bool beyondRange(unsigned byteOffset) const { return byteOffset >= m_byteLength || byteOffset + sizeof(T) > m_byteLength; }
template<typename T>
T getData(unsigned byteOffset, bool littleEndian, ExceptionCode&) const;
diff --git a/Source/WebCore/html/canvas/DataView.idl b/Source/WebCore/html/canvas/DataView.idl
index f99a814..2e173d7 100755
--- a/Source/WebCore/html/canvas/DataView.idl
+++ b/Source/WebCore/html/canvas/DataView.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
CustomToJS,
diff --git a/Source/WebCore/html/canvas/Float32Array.cpp b/Source/WebCore/html/canvas/Float32Array.cpp
index 1b26aef..209b20f 100644
--- a/Source/WebCore/html/canvas/Float32Array.cpp
+++ b/Source/WebCore/html/canvas/Float32Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Float32Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Float32Array::Float32Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset,
{
}
-PassRefPtr<Float32Array> Float32Array::slice(int start) const
+PassRefPtr<Float32Array> Float32Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Float32Array> Float32Array::slice(int start, int end) const
+PassRefPtr<Float32Array> Float32Array::subarray(int start, int end) const
{
- return sliceImpl<Float32Array>(start, end);
+ return subarrayImpl<Float32Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Float32Array.h b/Source/WebCore/html/canvas/Float32Array.h
index d00a7c5..ee1ea56 100644
--- a/Source/WebCore/html/canvas/Float32Array.h
+++ b/Source/WebCore/html/canvas/Float32Array.h
@@ -56,8 +56,8 @@ public:
return result;
}
- PassRefPtr<Float32Array> slice(int start) const;
- PassRefPtr<Float32Array> slice(int start, int end) const;
+ PassRefPtr<Float32Array> subarray(int start) const;
+ PassRefPtr<Float32Array> subarray(int start, int end) const;
private:
Float32Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Float32Array.idl b/Source/WebCore/html/canvas/Float32Array.idl
index b979d29..c797f31 100644
--- a/Source/WebCore/html/canvas/Float32Array.idl
+++ b/Source/WebCore/html/canvas/Float32Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 4;
readonly attribute unsigned long length;
- Float32Array slice(in long start, in [Optional] long end);
+ Float32Array subarray(in long start, in [Optional] long end);
// void set(in Float32Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/Int16Array.cpp b/Source/WebCore/html/canvas/Int16Array.cpp
index a3d04bc..9aaa1d5 100644
--- a/Source/WebCore/html/canvas/Int16Array.cpp
+++ b/Source/WebCore/html/canvas/Int16Array.cpp
@@ -24,9 +24,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Int16Array.h"
namespace WebCore {
@@ -51,16 +48,14 @@ Int16Array::Int16Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsi
{
}
-PassRefPtr<Int16Array> Int16Array::slice(int start) const
+PassRefPtr<Int16Array> Int16Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Int16Array> Int16Array::slice(int start, int end) const
+PassRefPtr<Int16Array> Int16Array::subarray(int start, int end) const
{
- return sliceImpl<Int16Array>(start, end);
+ return subarrayImpl<Int16Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Int16Array.h b/Source/WebCore/html/canvas/Int16Array.h
index a6286c6..6c4f54b 100644
--- a/Source/WebCore/html/canvas/Int16Array.h
+++ b/Source/WebCore/html/canvas/Int16Array.h
@@ -41,8 +41,8 @@ public:
using TypedArrayBase<short>::set;
using IntegralTypedArrayBase<short>::set;
- PassRefPtr<Int16Array> slice(int start) const;
- PassRefPtr<Int16Array> slice(int start, int end) const;
+ PassRefPtr<Int16Array> subarray(int start) const;
+ PassRefPtr<Int16Array> subarray(int start, int end) const;
private:
Int16Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Int16Array.idl b/Source/WebCore/html/canvas/Int16Array.idl
index f1f5c8b..40123d7 100644
--- a/Source/WebCore/html/canvas/Int16Array.idl
+++ b/Source/WebCore/html/canvas/Int16Array.idl
@@ -25,7 +25,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -39,7 +38,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 2;
readonly attribute unsigned long length;
- Int16Array slice(in long start, in [Optional] long end);
+ Int16Array subarray(in long start, in [Optional] long end);
// void set(in Int16Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/Int32Array.cpp b/Source/WebCore/html/canvas/Int32Array.cpp
index 266c941..6d2793c 100644
--- a/Source/WebCore/html/canvas/Int32Array.cpp
+++ b/Source/WebCore/html/canvas/Int32Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Int32Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Int32Array::Int32Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsi
{
}
-PassRefPtr<Int32Array> Int32Array::slice(int start) const
+PassRefPtr<Int32Array> Int32Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Int32Array> Int32Array::slice(int start, int end) const
+PassRefPtr<Int32Array> Int32Array::subarray(int start, int end) const
{
- return sliceImpl<Int32Array>(start, end);
+ return subarrayImpl<Int32Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Int32Array.h b/Source/WebCore/html/canvas/Int32Array.h
index 068a677..c657300 100644
--- a/Source/WebCore/html/canvas/Int32Array.h
+++ b/Source/WebCore/html/canvas/Int32Array.h
@@ -37,13 +37,12 @@ public:
static PassRefPtr<Int32Array> create(int* array, unsigned length);
static PassRefPtr<Int32Array> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length);
-#if !COMPILER(RVCT)
- using TypedArrayBase<int>::set;
- using IntegralTypedArrayBase<int>::set;
-#endif
+ // Can’t use "using" here due to a bug in the RVCT compiler.
+ void set(TypedArrayBase<int>* array, unsigned offset, ExceptionCode& ec) { return TypedArrayBase<int>::set(array, offset, ec); }
+ void set(unsigned index, double value) { return IntegralTypedArrayBase<int>::set(index, value); }
- PassRefPtr<Int32Array> slice(int start) const;
- PassRefPtr<Int32Array> slice(int start, int end) const;
+ PassRefPtr<Int32Array> subarray(int start) const;
+ PassRefPtr<Int32Array> subarray(int start, int end) const;
private:
Int32Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Int32Array.idl b/Source/WebCore/html/canvas/Int32Array.idl
index f96b53c..dd9082a 100644
--- a/Source/WebCore/html/canvas/Int32Array.idl
+++ b/Source/WebCore/html/canvas/Int32Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 4;
readonly attribute unsigned long length;
- Int32Array slice(in long start, in [Optional] long end);
+ Int32Array subarray(in long start, in [Optional] long end);
// void set(in Int32Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/Int8Array.cpp b/Source/WebCore/html/canvas/Int8Array.cpp
index 89ed316..ceb7579 100644
--- a/Source/WebCore/html/canvas/Int8Array.cpp
+++ b/Source/WebCore/html/canvas/Int8Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Int8Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Int8Array::Int8Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsign
{
}
-PassRefPtr<Int8Array> Int8Array::slice(int start) const
+PassRefPtr<Int8Array> Int8Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Int8Array> Int8Array::slice(int start, int end) const
+PassRefPtr<Int8Array> Int8Array::subarray(int start, int end) const
{
- return sliceImpl<Int8Array>(start, end);
+ return subarrayImpl<Int8Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Int8Array.h b/Source/WebCore/html/canvas/Int8Array.h
index a5df302..aabdb97 100644
--- a/Source/WebCore/html/canvas/Int8Array.h
+++ b/Source/WebCore/html/canvas/Int8Array.h
@@ -39,11 +39,12 @@ public:
static PassRefPtr<Int8Array> create(signed char* array, unsigned length);
static PassRefPtr<Int8Array> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length);
- using TypedArrayBase<signed char>::set;
- using IntegralTypedArrayBase<signed char>::set;
+ // Can’t use "using" here due to a bug in the RVCT compiler.
+ void set(TypedArrayBase<signed char>* array, unsigned offset, ExceptionCode& ec) { return TypedArrayBase<signed char>::set(array, offset, ec); }
+ void set(unsigned index, double value) { return IntegralTypedArrayBase<signed char>::set(index, value); }
- PassRefPtr<Int8Array> slice(int start) const;
- PassRefPtr<Int8Array> slice(int start, int end) const;
+ PassRefPtr<Int8Array> subarray(int start) const;
+ PassRefPtr<Int8Array> subarray(int start, int end) const;
private:
Int8Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Int8Array.idl b/Source/WebCore/html/canvas/Int8Array.idl
index 08a608b..ab000f2 100644
--- a/Source/WebCore/html/canvas/Int8Array.idl
+++ b/Source/WebCore/html/canvas/Int8Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 1;
readonly attribute unsigned long length;
- Int8Array slice(in long start, in [Optional] long end);
+ Int8Array subarray(in long start, in [Optional] long end);
// void set(in Int8Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/OESStandardDerivatives.cpp b/Source/WebCore/html/canvas/OESStandardDerivatives.cpp
index 25aae2f..5bd3163 100644
--- a/Source/WebCore/html/canvas/OESStandardDerivatives.cpp
+++ b/Source/WebCore/html/canvas/OESStandardDerivatives.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "OESStandardDerivatives.h"
@@ -51,4 +51,4 @@ PassRefPtr<OESStandardDerivatives> OESStandardDerivatives::create()
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/OESStandardDerivatives.idl b/Source/WebCore/html/canvas/OESStandardDerivatives.idl
index a9d1dd6..6c0f788 100644
--- a/Source/WebCore/html/canvas/OESStandardDerivatives.idl
+++ b/Source/WebCore/html/canvas/OESStandardDerivatives.idl
@@ -24,7 +24,7 @@
*/
module html {
- interface [Conditional=3D_CANVAS, OmitConstructor, DontCheckEnums] OESStandardDerivatives {
+ interface [Conditional=WEBGL, OmitConstructor, DontCheckEnums] OESStandardDerivatives {
const unsigned int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
};
}
diff --git a/Source/WebCore/html/canvas/OESTextureFloat.cpp b/Source/WebCore/html/canvas/OESTextureFloat.cpp
index dab3caf..9518764 100644
--- a/Source/WebCore/html/canvas/OESTextureFloat.cpp
+++ b/Source/WebCore/html/canvas/OESTextureFloat.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "OESTextureFloat.h"
@@ -51,4 +51,4 @@ PassRefPtr<OESTextureFloat> OESTextureFloat::create()
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/OESTextureFloat.idl b/Source/WebCore/html/canvas/OESTextureFloat.idl
index e255875..3319fd9 100644
--- a/Source/WebCore/html/canvas/OESTextureFloat.idl
+++ b/Source/WebCore/html/canvas/OESTextureFloat.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS, OmitConstructor] OESTextureFloat {
+ interface [Conditional=WEBGL, OmitConstructor] OESTextureFloat {
};
}
diff --git a/Source/WebCore/html/canvas/TypedArrayBase.h b/Source/WebCore/html/canvas/TypedArrayBase.h
index a828620..e2a7c63 100644
--- a/Source/WebCore/html/canvas/TypedArrayBase.h
+++ b/Source/WebCore/html/canvas/TypedArrayBase.h
@@ -104,7 +104,7 @@ protected:
}
template <class Subclass>
- PassRefPtr<Subclass> sliceImpl(int start, int end) const
+ PassRefPtr<Subclass> subarrayImpl(int start, int end) const
{
unsigned offset, length;
calculateOffsetAndLength(start, end, m_length, &offset, &length);
diff --git a/Source/WebCore/html/canvas/Uint16Array.cpp b/Source/WebCore/html/canvas/Uint16Array.cpp
index 5312888..92b2361 100644
--- a/Source/WebCore/html/canvas/Uint16Array.cpp
+++ b/Source/WebCore/html/canvas/Uint16Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Uint16Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Uint16Array::Uint16Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, un
{
}
-PassRefPtr<Uint16Array> Uint16Array::slice(int start) const
+PassRefPtr<Uint16Array> Uint16Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Uint16Array> Uint16Array::slice(int start, int end) const
+PassRefPtr<Uint16Array> Uint16Array::subarray(int start, int end) const
{
- return sliceImpl<Uint16Array>(start, end);
+ return subarrayImpl<Uint16Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Uint16Array.h b/Source/WebCore/html/canvas/Uint16Array.h
index f63b67d..8ef04a4 100644
--- a/Source/WebCore/html/canvas/Uint16Array.h
+++ b/Source/WebCore/html/canvas/Uint16Array.h
@@ -39,11 +39,12 @@ public:
static PassRefPtr<Uint16Array> create(unsigned short* array, unsigned length);
static PassRefPtr<Uint16Array> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length);
- using TypedArrayBase<unsigned short>::set;
- using IntegralTypedArrayBase<unsigned short>::set;
+ // Can’t use "using" here due to a bug in the RVCT compiler.
+ void set(TypedArrayBase<unsigned short>* array, unsigned offset, ExceptionCode& ec) { return TypedArrayBase<unsigned short>::set(array, offset, ec); }
+ void set(unsigned index, double value) { return IntegralTypedArrayBase<unsigned short>::set(index, value); }
- PassRefPtr<Uint16Array> slice(int start) const;
- PassRefPtr<Uint16Array> slice(int start, int end) const;
+ PassRefPtr<Uint16Array> subarray(int start) const;
+ PassRefPtr<Uint16Array> subarray(int start, int end) const;
private:
Uint16Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Uint16Array.idl b/Source/WebCore/html/canvas/Uint16Array.idl
index 8e778b4..fc8775d 100644
--- a/Source/WebCore/html/canvas/Uint16Array.idl
+++ b/Source/WebCore/html/canvas/Uint16Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 2;
readonly attribute unsigned long length;
- Uint16Array slice(in long start, in [Optional] long end);
+ Uint16Array subarray(in long start, in [Optional] long end);
// void set(in Uint16Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/Uint32Array.cpp b/Source/WebCore/html/canvas/Uint32Array.cpp
index f5bd959..621b53c 100644
--- a/Source/WebCore/html/canvas/Uint32Array.cpp
+++ b/Source/WebCore/html/canvas/Uint32Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Uint32Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Uint32Array::Uint32Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, un
{
}
-PassRefPtr<Uint32Array> Uint32Array::slice(int start) const
+PassRefPtr<Uint32Array> Uint32Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Uint32Array> Uint32Array::slice(int start, int end) const
+PassRefPtr<Uint32Array> Uint32Array::subarray(int start, int end) const
{
- return sliceImpl<Uint32Array>(start, end);
+ return subarrayImpl<Uint32Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Uint32Array.h b/Source/WebCore/html/canvas/Uint32Array.h
index 9c0f137..196a67f 100644
--- a/Source/WebCore/html/canvas/Uint32Array.h
+++ b/Source/WebCore/html/canvas/Uint32Array.h
@@ -39,11 +39,12 @@ public:
static PassRefPtr<Uint32Array> create(unsigned int* array, unsigned length);
static PassRefPtr<Uint32Array> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length);
- using TypedArrayBase<unsigned int>::set;
- using IntegralTypedArrayBase<unsigned int>::set;
+ // Can’t use "using" here due to a bug in the RVCT compiler.
+ void set(TypedArrayBase<unsigned int>* array, unsigned offset, ExceptionCode& ec) { return TypedArrayBase<unsigned int>::set(array, offset, ec); }
+ void set(unsigned index, double value) { return IntegralTypedArrayBase<unsigned int>::set(index, value); }
- PassRefPtr<Uint32Array> slice(int start) const;
- PassRefPtr<Uint32Array> slice(int start, int end) const;
+ PassRefPtr<Uint32Array> subarray(int start) const;
+ PassRefPtr<Uint32Array> subarray(int start, int end) const;
private:
Uint32Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Uint32Array.idl b/Source/WebCore/html/canvas/Uint32Array.idl
index 9fbf30c..4d95eab 100644
--- a/Source/WebCore/html/canvas/Uint32Array.idl
+++ b/Source/WebCore/html/canvas/Uint32Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 4;
readonly attribute unsigned long length;
- Uint32Array slice(in long start, in [Optional] long end);
+ Uint32Array subarray(in long start, in [Optional] long end);
// void set(in Uint32Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/Uint8Array.cpp b/Source/WebCore/html/canvas/Uint8Array.cpp
index 99b8a09..572e7ec 100644
--- a/Source/WebCore/html/canvas/Uint8Array.cpp
+++ b/Source/WebCore/html/canvas/Uint8Array.cpp
@@ -25,9 +25,6 @@
*/
#include "config.h"
-
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
-
#include "Uint8Array.h"
namespace WebCore {
@@ -52,16 +49,14 @@ Uint8Array::Uint8Array(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsi
{
}
-PassRefPtr<Uint8Array> Uint8Array::slice(int start) const
+PassRefPtr<Uint8Array> Uint8Array::subarray(int start) const
{
- return slice(start, length());
+ return subarray(start, length());
}
-PassRefPtr<Uint8Array> Uint8Array::slice(int start, int end) const
+PassRefPtr<Uint8Array> Uint8Array::subarray(int start, int end) const
{
- return sliceImpl<Uint8Array>(start, end);
+ return subarrayImpl<Uint8Array>(start, end);
}
}
-
-#endif // ENABLE(3D_CANVAS) || ENABLE(BLOB)
diff --git a/Source/WebCore/html/canvas/Uint8Array.h b/Source/WebCore/html/canvas/Uint8Array.h
index 66154b5..a3a42dc 100644
--- a/Source/WebCore/html/canvas/Uint8Array.h
+++ b/Source/WebCore/html/canvas/Uint8Array.h
@@ -39,13 +39,12 @@ public:
static PassRefPtr<Uint8Array> create(unsigned char* array, unsigned length);
static PassRefPtr<Uint8Array> create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length);
-#if !COMPILER(RVCT)
- using TypedArrayBase<unsigned char>::set;
- using IntegralTypedArrayBase<unsigned char>::set;
-#endif
+ // Can’t use "using" here due to a bug in the RVCT compiler.
+ void set(TypedArrayBase<unsigned char>* array, unsigned offset, ExceptionCode& ec) { return TypedArrayBase<unsigned char>::set(array, offset, ec); }
+ void set(unsigned index, double value) { return IntegralTypedArrayBase<unsigned char>::set(index, value); }
- PassRefPtr<Uint8Array> slice(int start) const;
- PassRefPtr<Uint8Array> slice(int start, int end) const;
+ PassRefPtr<Uint8Array> subarray(int start) const;
+ PassRefPtr<Uint8Array> subarray(int start, int end) const;
private:
Uint8Array(PassRefPtr<ArrayBuffer> buffer,
diff --git a/Source/WebCore/html/canvas/Uint8Array.idl b/Source/WebCore/html/canvas/Uint8Array.idl
index 7fe7e21..1bdd299 100644
--- a/Source/WebCore/html/canvas/Uint8Array.idl
+++ b/Source/WebCore/html/canvas/Uint8Array.idl
@@ -26,7 +26,6 @@
module html {
interface [
- Conditional=3D_CANVAS|BLOB,
CanBeConstructed,
CustomConstructFunction,
V8CustomConstructor,
@@ -40,7 +39,7 @@ module html {
const unsigned int BYTES_PER_ELEMENT = 1;
readonly attribute unsigned long length;
- Uint8Array slice(in long start, in [Optional] long end);
+ Uint8Array subarray(in long start, in [Optional] long end);
// void set(in Uint8Array array, [Optional] in unsigned long offset);
// void set(in sequence<long> array, [Optional] in unsigned long offset);
diff --git a/Source/WebCore/html/canvas/WebGLActiveInfo.idl b/Source/WebCore/html/canvas/WebGLActiveInfo.idl
index 28f7136..d544970 100644
--- a/Source/WebCore/html/canvas/WebGLActiveInfo.idl
+++ b/Source/WebCore/html/canvas/WebGLActiveInfo.idl
@@ -26,7 +26,7 @@
module html {
interface [
- Conditional=3D_CANVAS
+ Conditional=WEBGL
] WebGLActiveInfo {
readonly attribute int size;
readonly attribute unsigned int type;
diff --git a/Source/WebCore/html/canvas/WebGLBuffer.cpp b/Source/WebCore/html/canvas/WebGLBuffer.cpp
index 849472b..ee0ebe6 100644
--- a/Source/WebCore/html/canvas/WebGLBuffer.cpp
+++ b/Source/WebCore/html/canvas/WebGLBuffer.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLBuffer.h"
@@ -34,7 +34,7 @@
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
PassRefPtr<WebGLBuffer> WebGLBuffer::create(WebGLRenderingContext* ctx)
{
return adoptRef(new WebGLBuffer(ctx));
@@ -207,4 +207,4 @@ void WebGLBuffer::clearCachedMaxIndices()
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLBuffer.h b/Source/WebCore/html/canvas/WebGLBuffer.h
index ec79a2d..6153cf1 100644
--- a/Source/WebCore/html/canvas/WebGLBuffer.h
+++ b/Source/WebCore/html/canvas/WebGLBuffer.h
@@ -42,10 +42,10 @@ public:
static PassRefPtr<WebGLBuffer> create(WebGLRenderingContext*);
bool associateBufferData(GC3Dsizeiptr size);
- bool associateBufferData(ArrayBuffer* array);
- bool associateBufferData(ArrayBufferView* array);
- bool associateBufferSubData(GC3Dintptr offset, ArrayBuffer* array);
- bool associateBufferSubData(GC3Dintptr offset, ArrayBufferView* array);
+ bool associateBufferData(ArrayBuffer*);
+ bool associateBufferData(ArrayBufferView*);
+ bool associateBufferSubData(GC3Dintptr offset, ArrayBuffer*);
+ bool associateBufferSubData(GC3Dintptr offset, ArrayBufferView*);
GC3Dsizeiptr byteLength() const;
const ArrayBuffer* elementArrayBuffer() const { return m_elementArrayBuffer.get(); }
diff --git a/Source/WebCore/html/canvas/WebGLBuffer.idl b/Source/WebCore/html/canvas/WebGLBuffer.idl
index 30b7606..2b6daec 100644
--- a/Source/WebCore/html/canvas/WebGLBuffer.idl
+++ b/Source/WebCore/html/canvas/WebGLBuffer.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLBuffer {
+ interface [Conditional=WEBGL] WebGLBuffer {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLContextAttributes.cpp b/Source/WebCore/html/canvas/WebGLContextAttributes.cpp
index a0725ca..6a47ea9 100644
--- a/Source/WebCore/html/canvas/WebGLContextAttributes.cpp
+++ b/Source/WebCore/html/canvas/WebGLContextAttributes.cpp
@@ -26,7 +26,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLContextAttributes.h"
@@ -114,4 +114,4 @@ GraphicsContext3D::Attributes WebGLContextAttributes::attributes() const
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLContextAttributes.idl b/Source/WebCore/html/canvas/WebGLContextAttributes.idl
index be2b20c..0fa0c2c 100644
--- a/Source/WebCore/html/canvas/WebGLContextAttributes.idl
+++ b/Source/WebCore/html/canvas/WebGLContextAttributes.idl
@@ -26,7 +26,7 @@
module html {
interface [
- Conditional=3D_CANVAS,
+ Conditional=WEBGL,
OmitConstructor
] WebGLContextAttributes {
attribute boolean alpha;
diff --git a/Source/WebCore/html/canvas/WebGLContextEvent.idl b/Source/WebCore/html/canvas/WebGLContextEvent.idl
index 30973a9..9ee4769 100644
--- a/Source/WebCore/html/canvas/WebGLContextEvent.idl
+++ b/Source/WebCore/html/canvas/WebGLContextEvent.idl
@@ -25,7 +25,7 @@
module html {
interface [
- Conditional=3D_CANVAS,
+ Conditional=WEBGL,
] WebGLContextEvent : Event {
readonly attribute DOMString statusMessage;
[StrictTypeChecking] void initEvent(in DOMString eventTypeArg,
diff --git a/Source/WebCore/html/canvas/WebGLExtension.cpp b/Source/WebCore/html/canvas/WebGLExtension.cpp
index 580e635..64b0bf5 100644
--- a/Source/WebCore/html/canvas/WebGLExtension.cpp
+++ b/Source/WebCore/html/canvas/WebGLExtension.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLExtension.h"
@@ -41,4 +41,4 @@ WebGLExtension::~WebGLExtension()
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLFramebuffer.cpp b/Source/WebCore/html/canvas/WebGLFramebuffer.cpp
index dbc714b..4b721eb 100644
--- a/Source/WebCore/html/canvas/WebGLFramebuffer.cpp
+++ b/Source/WebCore/html/canvas/WebGLFramebuffer.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLFramebuffer.h"
@@ -354,4 +354,4 @@ bool WebGLFramebuffer::initializeRenderbuffers()
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLFramebuffer.idl b/Source/WebCore/html/canvas/WebGLFramebuffer.idl
index 8c1d9fd..7211d15 100644
--- a/Source/WebCore/html/canvas/WebGLFramebuffer.idl
+++ b/Source/WebCore/html/canvas/WebGLFramebuffer.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLFramebuffer {
+ interface [Conditional=WEBGL] WebGLFramebuffer {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLGetInfo.cpp b/Source/WebCore/html/canvas/WebGLGetInfo.cpp
index 6aff82f..d0c8c65 100644
--- a/Source/WebCore/html/canvas/WebGLGetInfo.cpp
+++ b/Source/WebCore/html/canvas/WebGLGetInfo.cpp
@@ -26,7 +26,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLGetInfo.h"
@@ -63,9 +63,9 @@ WebGLGetInfo::WebGLGetInfo(float value)
{
}
-WebGLGetInfo::WebGLGetInfo(long value)
- : m_type(kTypeLong)
- , m_long(value)
+WebGLGetInfo::WebGLGetInfo(int value)
+ : m_type(kTypeInt)
+ , m_int(value)
{
}
@@ -80,9 +80,9 @@ WebGLGetInfo::WebGLGetInfo(const String& value)
{
}
-WebGLGetInfo::WebGLGetInfo(unsigned long value)
- : m_type(kTypeUnsignedLong)
- , m_unsignedLong(value)
+WebGLGetInfo::WebGLGetInfo(unsigned int value)
+ : m_type(kTypeUnsignedInt)
+ , m_unsignedInt(value)
{
}
@@ -161,10 +161,10 @@ float WebGLGetInfo::getFloat() const
return m_float;
}
-long WebGLGetInfo::getLong() const
+int WebGLGetInfo::getInt() const
{
- ASSERT(getType() == kTypeLong);
- return m_long;
+ ASSERT(getType() == kTypeInt);
+ return m_int;
}
const String& WebGLGetInfo::getString() const
@@ -173,10 +173,10 @@ const String& WebGLGetInfo::getString() const
return m_string;
}
-unsigned long WebGLGetInfo::getUnsignedLong() const
+unsigned int WebGLGetInfo::getUnsignedInt() const
{
- ASSERT(getType() == kTypeUnsignedLong);
- return m_unsignedLong;
+ ASSERT(getType() == kTypeUnsignedInt);
+ return m_unsignedInt;
}
PassRefPtr<WebGLBuffer> WebGLGetInfo::getWebGLBuffer() const
@@ -229,4 +229,4 @@ PassRefPtr<Uint8Array> WebGLGetInfo::getWebGLUnsignedByteArray() const
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLGetInfo.h b/Source/WebCore/html/canvas/WebGLGetInfo.h
index caee520..91f9233 100644
--- a/Source/WebCore/html/canvas/WebGLGetInfo.h
+++ b/Source/WebCore/html/canvas/WebGLGetInfo.h
@@ -53,10 +53,10 @@ public:
kTypeBool,
kTypeBoolArray,
kTypeFloat,
- kTypeLong,
+ kTypeInt,
kTypeNull,
kTypeString,
- kTypeUnsignedLong,
+ kTypeUnsignedInt,
kTypeWebGLBuffer,
kTypeWebGLFloatArray,
kTypeWebGLFramebuffer,
@@ -71,11 +71,11 @@ public:
WebGLGetInfo(bool value);
WebGLGetInfo(const bool* value, int size);
WebGLGetInfo(float value);
- WebGLGetInfo(long value);
+ WebGLGetInfo(int value);
// Represents the null value and type.
WebGLGetInfo();
WebGLGetInfo(const String& value);
- WebGLGetInfo(unsigned long value);
+ WebGLGetInfo(unsigned int value);
WebGLGetInfo(PassRefPtr<WebGLBuffer> value);
WebGLGetInfo(PassRefPtr<Float32Array> value);
WebGLGetInfo(PassRefPtr<WebGLFramebuffer> value);
@@ -94,9 +94,9 @@ public:
bool getBool() const;
const Vector<bool>& getBoolArray() const;
float getFloat() const;
- long getLong() const;
+ int getInt() const;
const String& getString() const;
- unsigned long getUnsignedLong() const;
+ unsigned int getUnsignedInt() const;
PassRefPtr<WebGLBuffer> getWebGLBuffer() const;
PassRefPtr<Float32Array> getWebGLFloatArray() const;
PassRefPtr<WebGLFramebuffer> getWebGLFramebuffer() const;
@@ -113,9 +113,9 @@ private:
bool m_bool;
Vector<bool> m_boolArray;
float m_float;
- long m_long;
+ int m_int;
String m_string;
- unsigned long m_unsignedLong;
+ unsigned int m_unsignedInt;
RefPtr<WebGLBuffer> m_webglBuffer;
RefPtr<Float32Array> m_webglFloatArray;
RefPtr<WebGLFramebuffer> m_webglFramebuffer;
diff --git a/Source/WebCore/html/canvas/WebGLObject.cpp b/Source/WebCore/html/canvas/WebGLObject.cpp
index 41ad0f1..d47013e 100644
--- a/Source/WebCore/html/canvas/WebGLObject.cpp
+++ b/Source/WebCore/html/canvas/WebGLObject.cpp
@@ -25,14 +25,14 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLObject.h"
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
WebGLObject::WebGLObject(WebGLRenderingContext* context)
: m_object(0)
, m_context(context)
@@ -68,4 +68,4 @@ void WebGLObject::deleteObject()
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLProgram.cpp b/Source/WebCore/html/canvas/WebGLProgram.cpp
index b3fa363..d3efda4 100644
--- a/Source/WebCore/html/canvas/WebGLProgram.cpp
+++ b/Source/WebCore/html/canvas/WebGLProgram.cpp
@@ -25,14 +25,14 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLProgram.h"
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
PassRefPtr<WebGLProgram> WebGLProgram::create(WebGLRenderingContext* ctx)
{
return adoptRef(new WebGLProgram(ctx));
@@ -103,7 +103,7 @@ bool WebGLProgram::isUsingVertexAttrib0() const
return false;
}
-WebGLShader* WebGLProgram::getAttachedShader(GraphicsContext3D::WebGLEnumType type)
+WebGLShader* WebGLProgram::getAttachedShader(GC3Denum type)
{
switch (type) {
case GraphicsContext3D::VERTEX_SHADER:
@@ -157,4 +157,4 @@ bool WebGLProgram::detachShader(WebGLShader* shader)
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLProgram.h b/Source/WebCore/html/canvas/WebGLProgram.h
index f2acef8..0dd3ba0 100644
--- a/Source/WebCore/html/canvas/WebGLProgram.h
+++ b/Source/WebCore/html/canvas/WebGLProgram.h
@@ -60,7 +60,7 @@ public:
// will never be linked so many times.
void increaseLinkCount() { ++m_linkCount; }
- WebGLShader* getAttachedShader(GraphicsContext3D::WebGLEnumType);
+ WebGLShader* getAttachedShader(GC3Denum);
bool attachShader(WebGLShader*);
bool detachShader(WebGLShader*);
diff --git a/Source/WebCore/html/canvas/WebGLProgram.idl b/Source/WebCore/html/canvas/WebGLProgram.idl
index 562fa3a..480dfce 100644
--- a/Source/WebCore/html/canvas/WebGLProgram.idl
+++ b/Source/WebCore/html/canvas/WebGLProgram.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLProgram {
+ interface [Conditional=WEBGL] WebGLProgram {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLRenderbuffer.cpp b/Source/WebCore/html/canvas/WebGLRenderbuffer.cpp
index 03a419a..93b9165 100644
--- a/Source/WebCore/html/canvas/WebGLRenderbuffer.cpp
+++ b/Source/WebCore/html/canvas/WebGLRenderbuffer.cpp
@@ -25,14 +25,14 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLRenderbuffer.h"
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
PassRefPtr<WebGLRenderbuffer> WebGLRenderbuffer::create(WebGLRenderingContext* ctx)
{
return adoptRef(new WebGLRenderbuffer(ctx));
@@ -57,4 +57,4 @@ void WebGLRenderbuffer::deleteObjectImpl(Platform3DObject object)
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLRenderbuffer.idl b/Source/WebCore/html/canvas/WebGLRenderbuffer.idl
index 2524433..5aa7db8 100644
--- a/Source/WebCore/html/canvas/WebGLRenderbuffer.idl
+++ b/Source/WebCore/html/canvas/WebGLRenderbuffer.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLRenderbuffer {
+ interface [Conditional=WEBGL] WebGLRenderbuffer {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
index a3b9699..bd155c9 100644
--- a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLRenderingContext.h"
@@ -48,6 +48,7 @@
#include "OESTextureFloat.h"
#include "RenderBox.h"
#include "RenderLayer.h"
+#include "Settings.h"
#include "Uint16Array.h"
#include "WebGLActiveInfo.h"
#include "WebGLBuffer.h"
@@ -341,17 +342,33 @@ void WebGLRenderingContext::WebGLRenderingContextRestoreTimer::fired()
}
}
+class WebGLRenderingContextLostCallback : public GraphicsContext3D::ContextLostCallback {
+public:
+ WebGLRenderingContextLostCallback(WebGLRenderingContext* cb) : m_contextLostCallback(cb) {}
+ virtual void onContextLost() { m_contextLostCallback->forceLostContext(); }
+ virtual ~WebGLRenderingContextLostCallback() {}
+private:
+ WebGLRenderingContext* m_contextLostCallback;
+};
+
PassOwnPtr<WebGLRenderingContext> WebGLRenderingContext::create(HTMLCanvasElement* canvas, WebGLContextAttributes* attrs)
{
HostWindow* hostWindow = canvas->document()->view()->root()->hostWindow();
GraphicsContext3D::Attributes attributes = attrs ? attrs->attributes() : GraphicsContext3D::Attributes();
+
+ if (attributes.antialias) {
+ Page* p = canvas->document()->page();
+ if (p && !p->settings()->openGLMultisamplingEnabled())
+ attributes.antialias = false;
+ }
+
RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(attributes, hostWindow));
if (!context) {
canvas->dispatchEvent(WebGLContextEvent::create(eventNames().webglcontextcreationerrorEvent, false, true, "Could not create a WebGL context."));
return 0;
}
-
+
return new WebGLRenderingContext(canvas, context, attributes);
}
@@ -416,6 +433,8 @@ void WebGLRenderingContext::initializeNewContext()
m_context->reshape(canvas()->width(), canvas()->height());
m_context->viewport(0, 0, canvas()->width(), canvas()->height());
+
+ m_context->setContextLostCallback(adoptPtr(new WebGLRenderingContextLostCallback(this)));
}
void WebGLRenderingContext::setupFlags()
@@ -437,6 +456,7 @@ void WebGLRenderingContext::setupFlags()
WebGLRenderingContext::~WebGLRenderingContext()
{
detachAndRemoveAllObjects();
+ m_context->setContextLostCallback(0);
}
void WebGLRenderingContext::markContextChanged()
@@ -487,7 +507,24 @@ void WebGLRenderingContext::reshape(int width, int height)
unsigned int WebGLRenderingContext::sizeInBytes(GC3Denum type)
{
- return m_context->sizeInBytes(type);
+ switch (type) {
+ case GraphicsContext3D::BYTE:
+ return sizeof(GC3Dbyte);
+ case GraphicsContext3D::UNSIGNED_BYTE:
+ return sizeof(GC3Dubyte);
+ case GraphicsContext3D::SHORT:
+ return sizeof(GC3Dshort);
+ case GraphicsContext3D::UNSIGNED_SHORT:
+ return sizeof(GC3Dushort);
+ case GraphicsContext3D::INT:
+ return sizeof(GC3Dint);
+ case GraphicsContext3D::UNSIGNED_INT:
+ return sizeof(GC3Duint);
+ case GraphicsContext3D::FLOAT:
+ return sizeof(GC3Dfloat);
+ }
+ ASSERT_NOT_REACHED();
+ return 0;
}
void WebGLRenderingContext::activeTexture(GC3Denum texture, ExceptionCode& ec)
@@ -529,20 +566,33 @@ void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, GC3Duint i
cleanupAfterGraphicsCall(false);
}
+bool WebGLRenderingContext::checkObjectToBeBound(WebGLObject* object, bool& deleted)
+{
+ deleted = false;
+ if (isContextLost())
+ return false;
+ if (object) {
+ if (object->context() != this) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return false;
+ }
+ deleted = !object->object();
+ }
+ return true;
+}
+
void WebGLRenderingContext::bindBuffer(GC3Denum target, WebGLBuffer* buffer, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
- if (isContextLost())
+ bool deleted;
+ if (!checkObjectToBeBound(buffer, deleted))
return;
- if (buffer && buffer->context() != this) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
- return;
- }
+ if (deleted)
+ buffer = 0;
if (buffer && buffer->getTarget() && buffer->getTarget() != target) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
return;
}
-
if (target == GraphicsContext3D::ARRAY_BUFFER)
m_boundArrayBuffer = buffer;
else if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER)
@@ -558,16 +608,14 @@ void WebGLRenderingContext::bindBuffer(GC3Denum target, WebGLBuffer* buffer, Exc
cleanupAfterGraphicsCall(false);
}
-
void WebGLRenderingContext::bindFramebuffer(GC3Denum target, WebGLFramebuffer* buffer, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
- if (isContextLost())
- return;
- if (buffer && buffer->context() != this) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ bool deleted;
+ if (!checkObjectToBeBound(buffer, deleted))
return;
- }
+ if (deleted)
+ buffer = 0;
if (target != GraphicsContext3D::FRAMEBUFFER) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return;
@@ -582,12 +630,11 @@ void WebGLRenderingContext::bindFramebuffer(GC3Denum target, WebGLFramebuffer* b
void WebGLRenderingContext::bindRenderbuffer(GC3Denum target, WebGLRenderbuffer* renderBuffer, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
- if (isContextLost())
+ bool deleted;
+ if (!checkObjectToBeBound(renderBuffer, deleted))
return;
- if (renderBuffer && renderBuffer->context() != this) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
- return;
- }
+ if (deleted)
+ renderBuffer = 0;
if (target != GraphicsContext3D::RENDERBUFFER) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return;
@@ -599,13 +646,15 @@ void WebGLRenderingContext::bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*
cleanupAfterGraphicsCall(false);
}
-
void WebGLRenderingContext::bindTexture(GC3Denum target, WebGLTexture* texture, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
- if (isContextLost())
+ bool deleted;
+ if (!checkObjectToBeBound(texture, deleted))
return;
- if (texture && texture->context() != this) {
+ if (deleted)
+ texture = 0;
+ if (texture && texture->getTarget() && texture->getTarget() != target) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
return;
}
@@ -667,7 +716,7 @@ void WebGLRenderingContext::blendFunc(GC3Denum sfactor, GC3Denum dfactor)
return;
m_context->blendFunc(sfactor, dfactor);
cleanupAfterGraphicsCall(false);
-}
+}
void WebGLRenderingContext::blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha)
{
@@ -685,6 +734,10 @@ void WebGLRenderingContext::bufferData(GC3Denum target, GC3Dsizeiptr size, GC3De
WebGLBuffer* buffer = validateBufferDataParameters(target, usage);
if (!buffer)
return;
+ if (size < 0) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
if (!buffer->associateBufferData(size)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -750,6 +803,10 @@ void WebGLRenderingContext::bufferSubData(GC3Denum target, GC3Dintptr offset, Ar
WebGLBuffer* buffer = validateBufferDataParameters(target, GraphicsContext3D::STATIC_DRAW);
if (!buffer)
return;
+ if (offset < 0) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
if (!data)
return;
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
@@ -771,6 +828,10 @@ void WebGLRenderingContext::bufferSubData(GC3Denum target, GC3Dintptr offset, Ar
WebGLBuffer* buffer = validateBufferDataParameters(target, GraphicsContext3D::STATIC_DRAW);
if (!buffer)
return;
+ if (offset < 0) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
if (!data)
return;
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
@@ -972,7 +1033,7 @@ PassRefPtr<WebGLBuffer> WebGLRenderingContext::createBuffer()
addObject(o.get());
return o;
}
-
+
PassRefPtr<WebGLFramebuffer> WebGLRenderingContext::createFramebuffer()
{
if (isContextLost())
@@ -1018,7 +1079,7 @@ PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(GC3Denum type, Excep
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return 0;
}
-
+
RefPtr<WebGLShader> o = WebGLShader::create(this, type);
addObject(o.get());
return o;
@@ -1032,13 +1093,27 @@ void WebGLRenderingContext::cullFace(GC3Denum mode)
cleanupAfterGraphicsCall(false);
}
+bool WebGLRenderingContext::deleteObject(WebGLObject* object)
+{
+ if (isContextLost() || !object)
+ return false;
+ if (object->context() != this) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return false;
+ }
+ if (object->object())
+ object->deleteObject();
+ return true;
+}
+
void WebGLRenderingContext::deleteBuffer(WebGLBuffer* buffer)
{
- if (isContextLost() || !buffer)
+ if (!deleteObject(buffer))
return;
-
- buffer->deleteObject();
-
+ if (m_boundArrayBuffer == buffer)
+ m_boundArrayBuffer = 0;
+ if (m_boundElementArrayBuffer == buffer)
+ m_boundElementArrayBuffer = 0;
if (!isGLES2Compliant()) {
VertexAttribState& state = m_vertexAttribState[0];
if (buffer == state.bufferBinding) {
@@ -1056,54 +1131,47 @@ void WebGLRenderingContext::deleteBuffer(WebGLBuffer* buffer)
void WebGLRenderingContext::deleteFramebuffer(WebGLFramebuffer* framebuffer)
{
- if (isContextLost() || !framebuffer)
+ if (!deleteObject(framebuffer))
return;
if (framebuffer == m_framebufferBinding) {
m_framebufferBinding = 0;
// Have to call bindFramebuffer here to bind back to internal fbo.
m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0);
}
- framebuffer->deleteObject();
}
void WebGLRenderingContext::deleteProgram(WebGLProgram* program)
{
- if (isContextLost() || !program)
- return;
- if (program->context() != this) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
- return;
- }
- if (!program->object())
- return;
- program->deleteObject();
+ deleteObject(program);
+ // We don't reset m_currentProgram to 0 here because the deletion of the
+ // current program is delayed.
}
void WebGLRenderingContext::deleteRenderbuffer(WebGLRenderbuffer* renderbuffer)
{
- if (isContextLost() || !renderbuffer)
+ if (!deleteObject(renderbuffer))
return;
if (renderbuffer == m_renderbufferBinding)
m_renderbufferBinding = 0;
- renderbuffer->deleteObject();
if (m_framebufferBinding)
m_framebufferBinding->removeAttachment(renderbuffer);
}
void WebGLRenderingContext::deleteShader(WebGLShader* shader)
{
- if (isContextLost() || !shader)
- return;
-
- shader->deleteObject();
+ deleteObject(shader);
}
void WebGLRenderingContext::deleteTexture(WebGLTexture* texture)
{
- if (isContextLost() || !texture)
+ if (!deleteObject(texture))
return;
-
- texture->deleteObject();
+ for (size_t i = 0; i < m_textureUnits.size(); ++i) {
+ if (texture == m_textureUnits[i].m_texture2DBinding)
+ m_textureUnits[i].m_texture2DBinding = 0;
+ if (texture == m_textureUnits[i].m_textureCubeMapBinding)
+ m_textureUnits[i].m_textureCubeMapBinding = 0;
+ }
if (m_framebufferBinding)
m_framebufferBinding->removeAttachment(texture);
}
@@ -1150,7 +1218,6 @@ void WebGLRenderingContext::detachShader(WebGLProgram* program, WebGLShader* sha
cleanupAfterGraphicsCall(false);
}
-
void WebGLRenderingContext::disable(GC3Denum cap)
{
if (isContextLost() || !validateCapability(cap))
@@ -1168,7 +1235,7 @@ void WebGLRenderingContext::disableVertexAttribArray(GC3Duint index, ExceptionCo
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
}
-
+
if (index < m_vertexAttribState.size())
m_vertexAttribState[index].enabled = false;
@@ -1291,8 +1358,8 @@ bool WebGLRenderingContext::validateIndexArrayPrecise(GC3Dsizei count, GC3Denum
lastIndex = *p;
++p;
}
- }
-
+ }
+
// Then set the last index in the index array and make sure it is valid.
numElementsRequired = lastIndex + 1;
return numElementsRequired > 0;
@@ -1336,10 +1403,10 @@ bool WebGLRenderingContext::validateRenderingState(int numElementsRequired)
}
}
}
-
+
if (smallestNumElements == INT_MAX)
smallestNumElements = 0;
-
+
return numElementsRequired <= smallestNumElements;
}
@@ -1435,6 +1502,11 @@ void WebGLRenderingContext::drawElements(GC3Denum mode, GC3Dsizei count, GC3Denu
if (!count)
return;
+ if (!m_boundElementArrayBuffer) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return;
+ }
+
int numElements = 0;
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
// Ensure we have a valid rendering state
@@ -1495,12 +1567,12 @@ void WebGLRenderingContext::enableVertexAttribArray(GC3Duint index, ExceptionCod
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
}
-
+
if (index >= m_vertexAttribState.size())
m_vertexAttribState.resize(index + 1);
-
+
m_vertexAttribState[index].enabled = true;
-
+
m_context->enableVertexAttribArray(index);
cleanupAfterGraphicsCall(false);
}
@@ -1513,7 +1585,6 @@ void WebGLRenderingContext::finish()
cleanupAfterGraphicsCall(true);
}
-
void WebGLRenderingContext::flush()
{
if (isContextLost())
@@ -1689,7 +1760,7 @@ bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Web
GC3Dint numShaders = 0;
m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ATTACHED_SHADERS, &numShaders);
if (numShaders) {
- OwnArrayPtr<Platform3DObject> shaders(new Platform3DObject[numShaders]);
+ OwnArrayPtr<Platform3DObject> shaders = adoptArrayPtr(new Platform3DObject[numShaders]);
GC3Dsizei count = 0;
m_context->getAttachedShaders(objectOrZero(program), numShaders, &count, shaders.get());
if (count != numShaders)
@@ -1735,8 +1806,8 @@ WebGLGetInfo WebGLRenderingContext::getBufferParameter(GC3Denum target, GC3Denum
GC3Dint value = 0;
m_context->getBufferParameteriv(target, pname, &value);
if (pname == GraphicsContext3D::BUFFER_SIZE)
- return WebGLGetInfo(static_cast<long>(value));
- return WebGLGetInfo(static_cast<unsigned long>(value));
+ return WebGLGetInfo(value);
+ return WebGLGetInfo(static_cast<unsigned int>(value));
}
PassRefPtr<WebGLContextAttributes> WebGLRenderingContext::getContextAttributes()
@@ -1809,8 +1880,8 @@ WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(GC3Denum t
GC3Dint value = 0;
m_context->getFramebufferAttachmentParameteriv(target, attachment, pname, &value);
if (pname == GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)
- return WebGLGetInfo(static_cast<unsigned long>(value));
- return WebGLGetInfo(static_cast<long>(value));
+ return WebGLGetInfo(static_cast<unsigned int>(value));
+ return WebGLGetInfo(value);
}
WebGLStateRestorer(this, false);
@@ -1839,13 +1910,13 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
WebGLStateRestorer(this, false);
switch (pname) {
case GraphicsContext3D::ACTIVE_TEXTURE:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::ALIASED_LINE_WIDTH_RANGE:
return getWebGLFloatArrayParameter(pname);
case GraphicsContext3D::ALIASED_POINT_SIZE_RANGE:
return getWebGLFloatArrayParameter(pname);
case GraphicsContext3D::ALPHA_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::ARRAY_BUFFER_BINDING:
return WebGLGetInfo(PassRefPtr<WebGLBuffer>(m_boundArrayBuffer));
case GraphicsContext3D::BLEND:
@@ -1853,19 +1924,19 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
case GraphicsContext3D::BLEND_COLOR:
return getWebGLFloatArrayParameter(pname);
case GraphicsContext3D::BLEND_DST_ALPHA:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLEND_DST_RGB:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLEND_EQUATION_ALPHA:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLEND_EQUATION_RGB:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLEND_SRC_ALPHA:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLEND_SRC_RGB:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::BLUE_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::COLOR_CLEAR_VALUE:
return getWebGLFloatArrayParameter(pname);
case GraphicsContext3D::COLOR_WRITEMASK:
@@ -1876,15 +1947,15 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
case GraphicsContext3D::CULL_FACE:
return getBooleanParameter(pname);
case GraphicsContext3D::CULL_FACE_MODE:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::CURRENT_PROGRAM:
return WebGLGetInfo(PassRefPtr<WebGLProgram>(m_currentProgram));
case GraphicsContext3D::DEPTH_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::DEPTH_CLEAR_VALUE:
return getFloatParameter(pname);
case GraphicsContext3D::DEPTH_FUNC:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::DEPTH_RANGE:
return getWebGLFloatArrayParameter(pname);
case GraphicsContext3D::DEPTH_TEST:
@@ -1898,43 +1969,43 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
case GraphicsContext3D::FRAMEBUFFER_BINDING:
return WebGLGetInfo(PassRefPtr<WebGLFramebuffer>(m_framebufferBinding));
case GraphicsContext3D::FRONT_FACE:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::GENERATE_MIPMAP_HINT:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::GREEN_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::LINE_WIDTH:
return getFloatParameter(pname);
case GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_CUBE_MAP_TEXTURE_SIZE:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_FRAGMENT_UNIFORM_VECTORS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_RENDERBUFFER_SIZE:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_TEXTURE_IMAGE_UNITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_TEXTURE_SIZE:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_VARYING_VECTORS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_VERTEX_ATTRIBS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_VERTEX_TEXTURE_IMAGE_UNITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_VERTEX_UNIFORM_VECTORS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::MAX_VIEWPORT_DIMS:
return getWebGLIntArrayParameter(pname);
case GraphicsContext3D::NUM_COMPRESSED_TEXTURE_FORMATS:
// WebGL 1.0 specifies that there are no compressed texture formats.
- return WebGLGetInfo(static_cast<long>(0));
+ return WebGLGetInfo(static_cast<int>(0));
case GraphicsContext3D::NUM_SHADER_BINARY_FORMATS:
// FIXME: should we always return 0 for this?
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::PACK_ALIGNMENT:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::POLYGON_OFFSET_FACTOR:
return getFloatParameter(pname);
case GraphicsContext3D::POLYGON_OFFSET_FILL:
@@ -1942,19 +2013,19 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
case GraphicsContext3D::POLYGON_OFFSET_UNITS:
return getFloatParameter(pname);
case GraphicsContext3D::RED_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::RENDERBUFFER_BINDING:
return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(m_renderbufferBinding));
case GraphicsContext3D::RENDERER:
return WebGLGetInfo(m_context->getString(GraphicsContext3D::RENDERER));
case GraphicsContext3D::SAMPLE_BUFFERS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::SAMPLE_COVERAGE_INVERT:
return getBooleanParameter(pname);
case GraphicsContext3D::SAMPLE_COVERAGE_VALUE:
return getFloatParameter(pname);
case GraphicsContext3D::SAMPLES:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::SCISSOR_BOX:
return getWebGLIntArrayParameter(pname);
case GraphicsContext3D::SCISSOR_TEST:
@@ -1962,54 +2033,53 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
case GraphicsContext3D::SHADING_LANGUAGE_VERSION:
return WebGLGetInfo("WebGL GLSL ES 1.0 (" + m_context->getString(GraphicsContext3D::SHADING_LANGUAGE_VERSION) + ")");
case GraphicsContext3D::STENCIL_BACK_FAIL:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_FUNC:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_PASS_DEPTH_FAIL:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_PASS_DEPTH_PASS:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_REF:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_VALUE_MASK:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BACK_WRITEMASK:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::STENCIL_CLEAR_VALUE:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::STENCIL_FAIL:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_FUNC:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_PASS_DEPTH_FAIL:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_PASS_DEPTH_PASS:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_REF:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::STENCIL_TEST:
return getBooleanParameter(pname);
case GraphicsContext3D::STENCIL_VALUE_MASK:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::STENCIL_WRITEMASK:
- return getUnsignedLongParameter(pname);
+ return getUnsignedIntParameter(pname);
case GraphicsContext3D::SUBPIXEL_BITS:
- return getLongParameter(pname);
+ return getIntParameter(pname);
case GraphicsContext3D::TEXTURE_BINDING_2D:
return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeTextureUnit].m_texture2DBinding));
case GraphicsContext3D::TEXTURE_BINDING_CUBE_MAP:
return WebGLGetInfo(PassRefPtr<WebGLTexture>(m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding));
case GraphicsContext3D::UNPACK_ALIGNMENT:
- // FIXME: should this be "long" in the spec?
return getIntParameter(pname);
case GraphicsContext3D::UNPACK_FLIP_Y_WEBGL:
return WebGLGetInfo(m_unpackFlipY);
case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL:
return WebGLGetInfo(m_unpackPremultiplyAlpha);
case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL:
- return WebGLGetInfo(static_cast<unsigned long>(m_unpackColorspaceConversion));
+ return WebGLGetInfo(m_unpackColorspaceConversion);
case GraphicsContext3D::VENDOR:
return WebGLGetInfo("Webkit (" + m_context->getString(GraphicsContext3D::VENDOR) + ")");
case GraphicsContext3D::VERSION:
@@ -2018,7 +2088,7 @@ WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode&
return getWebGLIntArrayParameter(pname);
case Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_derivatives
if (m_oesStandardDerivatives)
- return getUnsignedLongParameter(Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES);
+ return getUnsignedIntParameter(Extensions3D::FRAGMENT_SHADER_DERIVATIVE_HINT_OES);
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
default:
@@ -2043,14 +2113,11 @@ WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, G
return WebGLGetInfo(static_cast<bool>(value));
case GraphicsContext3D::LINK_STATUS:
return WebGLGetInfo(program->getLinkStatus());
- case GraphicsContext3D::INFO_LOG_LENGTH:
case GraphicsContext3D::ATTACHED_SHADERS:
case GraphicsContext3D::ACTIVE_ATTRIBUTES:
- case GraphicsContext3D::ACTIVE_ATTRIBUTE_MAX_LENGTH:
case GraphicsContext3D::ACTIVE_UNIFORMS:
- case GraphicsContext3D::ACTIVE_UNIFORM_MAX_LENGTH:
m_context->getProgramiv(objectOrZero(program), pname, &value);
- return WebGLGetInfo(static_cast<long>(value));
+ return WebGLGetInfo(value);
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
@@ -2085,13 +2152,13 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC
if (m_renderbufferBinding->getInternalFormat() == GraphicsContext3D::DEPTH_STENCIL
&& !m_renderbufferBinding->isValid()) {
ASSERT(!isDepthStencilSupported());
- long value = 0;
+ int value = 0;
switch (pname) {
case GraphicsContext3D::RENDERBUFFER_WIDTH:
- value = static_cast<long>(m_renderbufferBinding->getWidth());
+ value = m_renderbufferBinding->getWidth();
break;
case GraphicsContext3D::RENDERBUFFER_HEIGHT:
- value = static_cast<long>(m_renderbufferBinding->getHeight());
+ value = m_renderbufferBinding->getHeight();
break;
case GraphicsContext3D::RENDERBUFFER_RED_SIZE:
case GraphicsContext3D::RENDERBUFFER_GREEN_SIZE:
@@ -2106,7 +2173,7 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC
value = 8;
break;
case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT:
- return WebGLGetInfo(static_cast<unsigned long>(m_renderbufferBinding->getInternalFormat()));
+ return WebGLGetInfo(m_renderbufferBinding->getInternalFormat());
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
@@ -2126,9 +2193,9 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC
case GraphicsContext3D::RENDERBUFFER_DEPTH_SIZE:
case GraphicsContext3D::RENDERBUFFER_STENCIL_SIZE:
m_context->getRenderbufferParameteriv(target, pname, &value);
- return WebGLGetInfo(static_cast<long>(value));
+ return WebGLGetInfo(value);
case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT:
- return WebGLGetInfo(static_cast<unsigned long>(m_renderbufferBinding->getInternalFormat()));
+ return WebGLGetInfo(m_renderbufferBinding->getInternalFormat());
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
@@ -2150,11 +2217,7 @@ WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, GC3D
return WebGLGetInfo(static_cast<bool>(value));
case GraphicsContext3D::SHADER_TYPE:
m_context->getShaderiv(objectOrZero(shader), pname, &value);
- return WebGLGetInfo(static_cast<unsigned long>(value));
- case GraphicsContext3D::INFO_LOG_LENGTH:
- case GraphicsContext3D::SHADER_SOURCE_LENGTH:
- m_context->getShaderiv(objectOrZero(shader), pname, &value);
- return WebGLGetInfo(static_cast<long>(value));
+ return WebGLGetInfo(static_cast<unsigned int>(value));
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
@@ -2179,8 +2242,7 @@ String WebGLRenderingContext::getShaderSource(WebGLShader* shader, ExceptionCode
return String();
if (!validateWebGLObject(shader))
return "";
- WebGLStateRestorer(this, false);
- return m_context->getShaderSource(objectOrZero(shader));
+ return shader->getSource();
}
Vector<String> WebGLRenderingContext::getSupportedExtensions()
@@ -2210,7 +2272,7 @@ WebGLGetInfo WebGLRenderingContext::getTexParameter(GC3Denum target, GC3Denum pn
case GraphicsContext3D::TEXTURE_WRAP_S:
case GraphicsContext3D::TEXTURE_WRAP_T:
m_context->getTexParameteriv(target, pname, &value);
- return WebGLGetInfo(static_cast<unsigned long>(value));
+ return WebGLGetInfo(static_cast<unsigned int>(value));
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
@@ -2227,7 +2289,7 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
return WebGLGetInfo();
}
GC3Dint location = uniformLocation->location();
-
+
WebGLStateRestorer(this, false);
// FIXME: make this more efficient using WebGLUniformLocation and caching types in it
GC3Dint activeUniforms = 0;
@@ -2314,9 +2376,13 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
baseType = GraphicsContext3D::FLOAT;
length = 16;
break;
+ case GraphicsContext3D::SAMPLER_2D:
+ case GraphicsContext3D::SAMPLER_CUBE:
+ baseType = GraphicsContext3D::INT;
+ length = 1;
+ break;
default:
// Can't handle this type
- // FIXME: what to do about samplers?
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return WebGLGetInfo();
}
@@ -2332,7 +2398,7 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
GC3Dint value[4] = {0};
m_context->getUniformiv(objectOrZero(program), location, value);
if (length == 1)
- return WebGLGetInfo(static_cast<long>(value[0]));
+ return WebGLGetInfo(value[0]);
return WebGLGetInfo(Int32Array::create(value, length));
}
case GraphicsContext3D::BOOL: {
@@ -2399,16 +2465,16 @@ WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GC3Duint index, GC3Denum pna
return WebGLGetInfo(m_vertexAttribState[index].normalized);
case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_SIZE:
if (index >= m_vertexAttribState.size())
- return WebGLGetInfo(static_cast<long>(4));
- return WebGLGetInfo(static_cast<long>(m_vertexAttribState[index].size));
+ return WebGLGetInfo(static_cast<int>(4));
+ return WebGLGetInfo(m_vertexAttribState[index].size);
case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_STRIDE:
if (index >= m_vertexAttribState.size())
- return WebGLGetInfo(static_cast<long>(0));
- return WebGLGetInfo(static_cast<long>(m_vertexAttribState[index].originalStride));
+ return WebGLGetInfo(static_cast<int>(0));
+ return WebGLGetInfo(m_vertexAttribState[index].originalStride);
case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_TYPE:
if (index >= m_vertexAttribState.size())
- return WebGLGetInfo(static_cast<unsigned long>(GraphicsContext3D::FLOAT));
- return WebGLGetInfo(static_cast<unsigned long>(m_vertexAttribState[index].type));
+ return WebGLGetInfo(static_cast<unsigned int>(GraphicsContext3D::FLOAT));
+ return WebGLGetInfo(m_vertexAttribState[index].type);
case GraphicsContext3D::CURRENT_VERTEX_ATTRIB:
if (index >= m_vertexAttribState.size()) {
float value[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
@@ -2760,6 +2826,7 @@ void WebGLRenderingContext::shaderSource(WebGLShader* shader, const String& stri
String stringWithoutComments = StripComments(string).result();
if (!validateString(stringWithoutComments))
return;
+ shader->setSource(string);
m_context->shaderSource(objectOrZero(shader), stringWithoutComments);
cleanupAfterGraphicsCall(false);
}
@@ -2980,6 +3047,7 @@ void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum
m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
}
+#if ENABLE(VIDEO)
PassRefPtr<Image> WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* video)
{
if (!video || !video->videoWidth() || !video->videoHeight()) {
@@ -3010,6 +3078,7 @@ void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum
return;
texImage2DImpl(target, level, internalformat, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
}
+#endif
void WebGLRenderingContext::texParameter(GC3Denum target, GC3Denum pname, GC3Dfloat paramf, GC3Dint parami, bool isFloat)
{
@@ -3062,12 +3131,21 @@ void WebGLRenderingContext::texSubImage2DBase(GC3Denum target, GC3Dint level, GC
ec = 0;
if (isContextLost())
return;
- if (!validateTexFuncFormatAndType(format, type))
+ if (!validateTexFuncParameters(target, level, format, width, height, 0, format, type))
return;
- if (!validateTextureBinding(target, true))
+ if (!validateSize(xoffset, yoffset))
return;
- if (!validateSize(xoffset, yoffset) || !validateSize(width, height))
+ WebGLTexture* tex = validateTextureBinding(target, true);
+ if (!tex)
return;
+ if (xoffset + width > tex->getWidth(target, level) || yoffset + height > tex->getHeight(target, level)) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
+ if (tex->getInternalFormat(target, level) != format || tex->getType(target, level) != type) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return;
+ }
m_context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
cleanupAfterGraphicsCall(false);
}
@@ -3159,6 +3237,7 @@ void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din
m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
}
+#if ENABLE(VIDEO)
void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode& ec)
{
@@ -3170,6 +3249,7 @@ void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din
return;
texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
}
+#endif
void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, GC3Dfloat x, ExceptionCode& ec)
{
@@ -3508,13 +3588,12 @@ void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* locatio
void WebGLRenderingContext::useProgram(WebGLProgram* program, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
- if (isContextLost())
+ bool deleted;
+ if (!checkObjectToBeBound(program, deleted))
return;
- if (program && program->context() != this) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
- return;
- }
- if (program && program->object() && !program->getLinkStatus()) {
+ if (deleted)
+ program = 0;
+ if (program && !program->getLinkStatus()) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
cleanupAfterGraphicsCall(false);
return;
@@ -3524,7 +3603,7 @@ void WebGLRenderingContext::useProgram(WebGLProgram* program, ExceptionCode& ec)
m_currentProgram->onDetached();
m_currentProgram = program;
m_context->useProgram(objectOrZero(program));
- if (program && program->object())
+ if (program)
program->onAttached();
}
cleanupAfterGraphicsCall(false);
@@ -3732,7 +3811,7 @@ void WebGLRenderingContext::detachAndRemoveAllObjects()
HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it)
(*it)->detachContext();
-
+
m_canvasObjects.clear();
}
@@ -3814,22 +3893,16 @@ WebGLGetInfo WebGLRenderingContext::getFloatParameter(GC3Denum pname)
WebGLGetInfo WebGLRenderingContext::getIntParameter(GC3Denum pname)
{
- return getLongParameter(pname);
-}
-
-WebGLGetInfo WebGLRenderingContext::getLongParameter(GC3Denum pname)
-{
GC3Dint value = 0;
m_context->getIntegerv(pname, &value);
- return WebGLGetInfo(static_cast<long>(value));
+ return WebGLGetInfo(value);
}
-WebGLGetInfo WebGLRenderingContext::getUnsignedLongParameter(GC3Denum pname)
+WebGLGetInfo WebGLRenderingContext::getUnsignedIntParameter(GC3Denum pname)
{
GC3Dint value = 0;
m_context->getIntegerv(pname, &value);
- GC3Duint uValue = static_cast<GC3Duint>(value);
- return WebGLGetInfo(static_cast<unsigned long>(uValue));
+ return WebGLGetInfo(static_cast<unsigned int>(value));
}
WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(GC3Denum pname)
@@ -4382,7 +4455,7 @@ bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLo
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return false;
}
- if (size < requiredMinSize) {
+ if (size < requiredMinSize || (size % requiredMinSize)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return false;
}
@@ -4518,34 +4591,49 @@ void WebGLRenderingContext::initVertexAttrib0()
m_vertexAttrib0BufferValue[1] = 0.0f;
m_vertexAttrib0BufferValue[2] = 0.0f;
m_vertexAttrib0BufferValue[3] = 1.0f;
+ m_forceAttrib0BufferRefill = false;
+ m_vertexAttrib0UsedBefore = false;
}
bool WebGLRenderingContext::simulateVertexAttrib0(GC3Dsizei numVertex)
{
const VertexAttribState& state = m_vertexAttribState[0];
- if (state.enabled || !m_currentProgram || !m_currentProgram->object()
- || !m_currentProgram->isUsingVertexAttrib0())
+ if (!m_currentProgram)
return false;
+ bool usingVertexAttrib0 = m_currentProgram->isUsingVertexAttrib0();
+ if (usingVertexAttrib0)
+ m_vertexAttrib0UsedBefore = true;
+ if (state.enabled && usingVertexAttrib0)
+ return false;
+ if (!usingVertexAttrib0 && !m_vertexAttrib0UsedBefore)
+ return false;
+ m_vertexAttrib0UsedBefore = true;
m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer->object());
GC3Dsizeiptr bufferDataSize = (numVertex + 1) * 4 * sizeof(GC3Dfloat);
- if (bufferDataSize > m_vertexAttrib0BufferSize
- || state.value[0] != m_vertexAttrib0BufferValue[0]
- || state.value[1] != m_vertexAttrib0BufferValue[1]
- || state.value[2] != m_vertexAttrib0BufferValue[2]
- || state.value[3] != m_vertexAttrib0BufferValue[3]) {
- OwnArrayPtr<GC3Dfloat> bufferData(new GC3Dfloat[(numVertex + 1) * 4]);
+ if (bufferDataSize > m_vertexAttrib0BufferSize) {
+ m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, bufferDataSize, 0, GraphicsContext3D::DYNAMIC_DRAW);
+ m_vertexAttrib0BufferSize = bufferDataSize;
+ m_forceAttrib0BufferRefill = true;
+ }
+ if (usingVertexAttrib0
+ && (m_forceAttrib0BufferRefill
+ || state.value[0] != m_vertexAttrib0BufferValue[0]
+ || state.value[1] != m_vertexAttrib0BufferValue[1]
+ || state.value[2] != m_vertexAttrib0BufferValue[2]
+ || state.value[3] != m_vertexAttrib0BufferValue[3])) {
+ OwnArrayPtr<GC3Dfloat> bufferData = adoptArrayPtr(new GC3Dfloat[(numVertex + 1) * 4]);
for (GC3Dsizei ii = 0; ii < numVertex + 1; ++ii) {
bufferData[ii * 4] = state.value[0];
bufferData[ii * 4 + 1] = state.value[1];
bufferData[ii * 4 + 2] = state.value[2];
bufferData[ii * 4 + 3] = state.value[3];
}
- m_context->bufferData(GraphicsContext3D::ARRAY_BUFFER, bufferDataSize, bufferData.get(), GraphicsContext3D::DYNAMIC_DRAW);
- m_vertexAttrib0BufferSize = bufferDataSize;
m_vertexAttrib0BufferValue[0] = state.value[0];
m_vertexAttrib0BufferValue[1] = state.value[1];
m_vertexAttrib0BufferValue[2] = state.value[2];
m_vertexAttrib0BufferValue[3] = state.value[3];
+ m_forceAttrib0BufferRefill = false;
+ m_context->bufferSubData(GraphicsContext3D::ARRAY_BUFFER, 0, bufferDataSize, bufferData.get());
}
m_context->vertexAttribPointer(0, 4, GraphicsContext3D::FLOAT, 0, 0, 0);
return true;
@@ -4588,7 +4676,7 @@ WebGLExtension* WebGLRenderingContext::getExtensionNumber(int i)
}
WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache(int capacity)
- : m_buffers(new OwnPtr<ImageBuffer>[capacity])
+ : m_buffers(adoptArrayPtr(new OwnPtr<ImageBuffer>[capacity]))
, m_capacity(capacity)
{
}
@@ -4625,4 +4713,4 @@ void WebGLRenderingContext::LRUImageBufferCache::bubbleToFront(int idx)
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.h b/Source/WebCore/html/canvas/WebGLRenderingContext.h
index 01b5438..dd71620 100644
--- a/Source/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/Source/WebCore/html/canvas/WebGLRenderingContext.h
@@ -69,13 +69,13 @@ public:
virtual bool isAccelerated() const { return true; }
virtual bool paintsIntoCanvasBuffer() const;
- void activeTexture(GC3Denum texture, ExceptionCode& ec);
- void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode& ec);
- void bindAttribLocation(WebGLProgram*, GC3Duint index, const String& name, ExceptionCode& ec);
- void bindBuffer(GC3Denum target, WebGLBuffer*, ExceptionCode& ec);
- void bindFramebuffer(GC3Denum target, WebGLFramebuffer*, ExceptionCode& ec);
- void bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*, ExceptionCode& ec);
- void bindTexture(GC3Denum target, WebGLTexture*, ExceptionCode& ec);
+ void activeTexture(GC3Denum texture, ExceptionCode&);
+ void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode&);
+ void bindAttribLocation(WebGLProgram*, GC3Duint index, const String& name, ExceptionCode&);
+ void bindBuffer(GC3Denum target, WebGLBuffer*, ExceptionCode&);
+ void bindFramebuffer(GC3Denum target, WebGLFramebuffer*, ExceptionCode&);
+ void bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*, ExceptionCode&);
+ void bindTexture(GC3Denum target, WebGLTexture*, ExceptionCode&);
void blendColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat alpha);
void blendEquation(GC3Denum mode);
void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha);
@@ -94,7 +94,7 @@ public:
void clearDepth(GC3Dfloat);
void clearStencil(GC3Dint);
void colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha);
- void compileShader(WebGLShader*, ExceptionCode& ec);
+ void compileShader(WebGLShader*, ExceptionCode&);
// void compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Dsizei imageSize, const void* data);
// void compressedTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei GC3Dsizei height, GC3Denum format, GC3Dsizei imageSize, const void* data);
@@ -131,8 +131,8 @@ public:
void enableVertexAttribArray(GC3Duint index, ExceptionCode&);
void finish();
void flush();
- void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, WebGLRenderbuffer*, ExceptionCode& ec);
- void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, WebGLTexture*, GC3Dint level, ExceptionCode& ec);
+ void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, WebGLRenderbuffer*, ExceptionCode&);
+ void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, WebGLTexture*, GC3Dint level, ExceptionCode&);
void frontFace(GC3Denum mode);
void generateMipmap(GC3Denum target);
@@ -147,10 +147,10 @@ public:
WebGLGetInfo getFramebufferAttachmentParameter(GC3Denum target, GC3Denum attachment, GC3Denum pname, ExceptionCode&);
WebGLGetInfo getParameter(GC3Denum pname, ExceptionCode&);
WebGLGetInfo getProgramParameter(WebGLProgram*, GC3Denum pname, ExceptionCode&);
- String getProgramInfoLog(WebGLProgram*, ExceptionCode& ec);
+ String getProgramInfoLog(WebGLProgram*, ExceptionCode&);
WebGLGetInfo getRenderbufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode&);
- WebGLGetInfo getShaderParameter(WebGLShader*, GC3Denum pname, ExceptionCode& ec);
- String getShaderInfoLog(WebGLShader*, ExceptionCode& ec);
+ WebGLGetInfo getShaderParameter(WebGLShader*, GC3Denum pname, ExceptionCode&);
+ String getShaderInfoLog(WebGLShader*, ExceptionCode&);
// TBD
// void glGetShaderPrecisionFormat (GC3Denum shadertype, GC3Denum precisiontype, GC3Dint* range, GC3Dint* precision);
@@ -192,30 +192,34 @@ public:
void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Dsizei width, GC3Dsizei height, GC3Dint border,
- GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode&);
+ GC3Denum format, GC3Denum type, ArrayBufferView*, ExceptionCode&);
void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
- GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode&);
+ GC3Denum format, GC3Denum type, ImageData*, ExceptionCode&);
void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
- GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLImageElement*, ExceptionCode&);
void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
- GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLCanvasElement*, ExceptionCode&);
+#if ENABLE(VIDEO)
void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat,
- GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLVideoElement*, ExceptionCode&);
+#endif
void texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param);
void texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param);
void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
GC3Dsizei width, GC3Dsizei height,
- GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode&);
+ GC3Denum format, GC3Denum type, ArrayBufferView*, ExceptionCode&);
void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
- GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode&);
+ GC3Denum format, GC3Denum type, ImageData*, ExceptionCode&);
void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
- GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLImageElement*, ExceptionCode&);
void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
- GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLCanvasElement*, ExceptionCode&);
+#if ENABLE(VIDEO)
void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
- GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode&);
+ GC3Denum format, GC3Denum type, HTMLVideoElement*, ExceptionCode&);
+#endif
void uniform1f(const WebGLUniformLocation* location, GC3Dfloat x, ExceptionCode&);
void uniform1fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&);
@@ -334,9 +338,11 @@ public:
// If numElements <= 0, we only check if each enabled vertex attribute is bound to a buffer.
bool validateRenderingState(int numElements);
- bool validateWebGLObject(WebGLObject* object);
+ bool validateWebGLObject(WebGLObject*);
- PassRefPtr<Image> videoFrameToImage(HTMLVideoElement* video);
+#if ENABLE(VIDEO)
+ PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*);
+#endif
RefPtr<GraphicsContext3D> m_context;
@@ -399,6 +405,8 @@ public:
RefPtr<WebGLBuffer> m_vertexAttrib0Buffer;
long m_vertexAttrib0BufferSize;
GC3Dfloat m_vertexAttrib0BufferValue[4];
+ bool m_forceAttrib0BufferRefill;
+ bool m_vertexAttrib0UsedBefore;
RefPtr<WebGLProgram> m_currentProgram;
RefPtr<WebGLFramebuffer> m_framebufferBinding;
@@ -457,20 +465,19 @@ public:
RefPtr<WebKitLoseContext> m_webkitLoseContext;
// Helpers for getParameter and others
- WebGLGetInfo getBooleanParameter(GC3Denum pname);
- WebGLGetInfo getBooleanArrayParameter(GC3Denum pname);
- WebGLGetInfo getFloatParameter(GC3Denum pname);
- WebGLGetInfo getIntParameter(GC3Denum pname);
- WebGLGetInfo getLongParameter(GC3Denum pname);
- WebGLGetInfo getUnsignedLongParameter(GC3Denum pname);
- WebGLGetInfo getWebGLFloatArrayParameter(GC3Denum pname);
- WebGLGetInfo getWebGLIntArrayParameter(GC3Denum pname);
+ WebGLGetInfo getBooleanParameter(GC3Denum);
+ WebGLGetInfo getBooleanArrayParameter(GC3Denum);
+ WebGLGetInfo getFloatParameter(GC3Denum);
+ WebGLGetInfo getIntParameter(GC3Denum);
+ WebGLGetInfo getUnsignedIntParameter(GC3Denum);
+ WebGLGetInfo getWebGLFloatArrayParameter(GC3Denum);
+ WebGLGetInfo getWebGLIntArrayParameter(GC3Denum);
void texImage2DBase(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Dsizei width, GC3Dsizei height, GC3Dint border,
GC3Denum format, GC3Denum type, void* pixels, ExceptionCode&);
void texImage2DImpl(GC3Denum target, GC3Dint level, GC3Denum internalformat,
- GC3Denum format, GC3Denum type, Image* image,
+ GC3Denum format, GC3Denum type, Image*,
bool flipY, bool premultiplyAlpha, ExceptionCode&);
void texSubImage2DBase(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset,
GC3Dsizei width, GC3Dsizei height,
@@ -547,7 +554,7 @@ public:
// Helper function to print warnings to console. Currently
// used only to warn about use of obsolete functions.
- void printWarningToConsole(const String& message);
+ void printWarningToConsole(const String&);
// Helper function to validate input parameters for framebuffer functions.
// Generate GL error if parameters are illegal.
@@ -563,20 +570,29 @@ public:
bool validateCapability(GC3Denum);
// Helper function to validate input parameters for uniform functions.
- bool validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, GC3Dsizei mod);
- bool validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, GC3Dsizei mod);
- bool validateUniformParameters(const WebGLUniformLocation* location, void* v, GC3Dsizei size, GC3Dsizei mod);
- bool validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, GC3Dsizei mod);
- bool validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, void* v, GC3Dsizei size, GC3Dsizei mod);
+ bool validateUniformParameters(const WebGLUniformLocation*, Float32Array*, GC3Dsizei mod);
+ bool validateUniformParameters(const WebGLUniformLocation*, Int32Array*, GC3Dsizei mod);
+ bool validateUniformParameters(const WebGLUniformLocation*, void*, GC3Dsizei size, GC3Dsizei mod);
+ bool validateUniformMatrixParameters(const WebGLUniformLocation*, GC3Dboolean transpose, Float32Array*, GC3Dsizei mod);
+ bool validateUniformMatrixParameters(const WebGLUniformLocation*, GC3Dboolean transpose, void*, GC3Dsizei size, GC3Dsizei mod);
// Helper function to validate parameters for bufferData.
// Return the current bound buffer to target, or 0 if parameters are invalid.
WebGLBuffer* validateBufferDataParameters(GC3Denum target, GC3Denum usage);
// Helper functions for vertexAttribNf{v}.
- void vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3);
- void vertexAttribfvImpl(GC3Duint index, Float32Array* v, GC3Dsizei expectedSize);
- void vertexAttribfvImpl(GC3Duint index, GC3Dfloat* v, GC3Dsizei size, GC3Dsizei expectedSize);
+ void vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat, GC3Dfloat, GC3Dfloat, GC3Dfloat);
+ void vertexAttribfvImpl(GC3Duint index, Float32Array*, GC3Dsizei expectedSize);
+ void vertexAttribfvImpl(GC3Duint index, GC3Dfloat*, GC3Dsizei size, GC3Dsizei expectedSize);
+
+ // Helper function for delete* (deleteBuffer, deleteProgram, etc) functions.
+ // Return false if caller should return without further processing.
+ bool deleteObject(WebGLObject*);
+
+ // Helper function for bind* (bindBuffer, bindTexture, etc) and useProgram.
+ // If the object has already been deleted, set deleted to true upon return.
+ // Return false if caller should return without further processing.
+ bool checkObjectToBeBound(WebGLObject*, bool& deleted);
// Helpers for simulating vertexAttrib0
void initVertexAttrib0();
diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.idl b/Source/WebCore/html/canvas/WebGLRenderingContext.idl
index 40b9bb0..7a19814 100644
--- a/Source/WebCore/html/canvas/WebGLRenderingContext.idl
+++ b/Source/WebCore/html/canvas/WebGLRenderingContext.idl
@@ -26,7 +26,7 @@
module html {
interface [
- Conditional=3D_CANVAS,
+ Conditional=WEBGL,
InterfaceUUID=98fb48ae-7216-489c-862b-8e1217fc4443,
ImplementationUUID=ab4f0781-152f-450e-9546-5b3987491a54,
CustomMarkFunction,
@@ -258,9 +258,7 @@ module html {
const unsigned int VALIDATE_STATUS = 0x8B83;
const unsigned int ATTACHED_SHADERS = 0x8B85;
const unsigned int ACTIVE_UNIFORMS = 0x8B86;
- const unsigned int ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87;
const unsigned int ACTIVE_ATTRIBUTES = 0x8B89;
- const unsigned int ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A;
const unsigned int SHADING_LANGUAGE_VERSION = 0x8B8C;
const unsigned int CURRENT_PROGRAM = 0x8B8D;
@@ -389,8 +387,6 @@ module html {
/* Shader Source */
const unsigned int COMPILE_STATUS = 0x8B81;
- const unsigned int INFO_LOG_LENGTH = 0x8B84;
- const unsigned int SHADER_SOURCE_LENGTH = 0x8B88;
const unsigned int SHADER_COMPILER = 0x8DFA;
/* Shader Precision-Specified Types */
@@ -613,8 +609,10 @@ module html {
in unsigned long format, in unsigned long type, in HTMLImageElement image) raises (DOMException);
[StrictTypeChecking] void texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
in unsigned long format, in unsigned long type, in HTMLCanvasElement canvas) raises (DOMException);
+#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
[StrictTypeChecking] void texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
in unsigned long format, in unsigned long type, in HTMLVideoElement video) raises (DOMException);
+#endif
[StrictTypeChecking] void texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
in long width, in long height,
@@ -625,8 +623,10 @@ module html {
in unsigned long format, in unsigned long type, in HTMLImageElement image) raises (DOMException);
[StrictTypeChecking] void texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
in unsigned long format, in unsigned long type, in HTMLCanvasElement canvas) raises (DOMException);
+#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
[StrictTypeChecking] void texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
in unsigned long format, in unsigned long type, in HTMLVideoElement video) raises (DOMException);
+#endif
[StrictTypeChecking] void uniform1f(in WebGLUniformLocation location, in float x) raises(DOMException);
[StrictTypeChecking, Custom] void uniform1fv(in WebGLUniformLocation location, in Float32Array v) raises(DOMException);
diff --git a/Source/WebCore/html/canvas/WebGLShader.cpp b/Source/WebCore/html/canvas/WebGLShader.cpp
index a07023f..59695e4 100644
--- a/Source/WebCore/html/canvas/WebGLShader.cpp
+++ b/Source/WebCore/html/canvas/WebGLShader.cpp
@@ -25,14 +25,14 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLShader.h"
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
PassRefPtr<WebGLShader> WebGLShader::create(WebGLRenderingContext* ctx, GC3Denum type)
{
return adoptRef(new WebGLShader(ctx, type));
@@ -41,6 +41,7 @@ PassRefPtr<WebGLShader> WebGLShader::create(WebGLRenderingContext* ctx, GC3Denum
WebGLShader::WebGLShader(WebGLRenderingContext* ctx, GC3Denum type)
: WebGLObject(ctx)
, m_type(type)
+ , m_source("")
{
setObject(context()->graphicsContext3D()->createShader(type));
}
@@ -52,4 +53,4 @@ void WebGLShader::deleteObjectImpl(Platform3DObject object)
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLShader.h b/Source/WebCore/html/canvas/WebGLShader.h
index 5deaf20..1d7a10c 100644
--- a/Source/WebCore/html/canvas/WebGLShader.h
+++ b/Source/WebCore/html/canvas/WebGLShader.h
@@ -40,6 +40,9 @@ public:
static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GC3Denum);
GC3Denum getType() const { return m_type; }
+ const String& getSource() const { return m_source; }
+
+ void setSource(const String& source) { m_source = source; }
private:
WebGLShader(WebGLRenderingContext*, GC3Denum);
@@ -49,6 +52,7 @@ private:
virtual bool isShader() const { return true; }
GC3Denum m_type;
+ String m_source;
};
} // namespace WebCore
diff --git a/Source/WebCore/html/canvas/WebGLShader.idl b/Source/WebCore/html/canvas/WebGLShader.idl
index 45e7f54..21bba65 100644
--- a/Source/WebCore/html/canvas/WebGLShader.idl
+++ b/Source/WebCore/html/canvas/WebGLShader.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLShader {
+ interface [Conditional=WEBGL] WebGLShader {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLTexture.cpp b/Source/WebCore/html/canvas/WebGLTexture.cpp
index a57500f..e8e8bf8 100644
--- a/Source/WebCore/html/canvas/WebGLTexture.cpp
+++ b/Source/WebCore/html/canvas/WebGLTexture.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLTexture.h"
@@ -33,7 +33,7 @@
#include "WebGLRenderingContext.h"
namespace WebCore {
-
+
PassRefPtr<WebGLTexture> WebGLTexture::create(WebGLRenderingContext* ctx)
{
return adoptRef(new WebGLTexture(ctx));
@@ -353,4 +353,4 @@ const WebGLTexture::LevelInfo* WebGLTexture::getLevelInfo(GC3Denum target, GC3Di
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLTexture.h b/Source/WebCore/html/canvas/WebGLTexture.h
index 27eb8ee..6bd1272 100644
--- a/Source/WebCore/html/canvas/WebGLTexture.h
+++ b/Source/WebCore/html/canvas/WebGLTexture.h
@@ -44,6 +44,8 @@ public:
void setParameteri(GC3Denum pname, GC3Dint param);
void setParameterf(GC3Denum pname, GC3Dfloat param);
+ GC3Denum getTarget() const { return m_target; }
+
int getMinFilter() const { return m_minFilter; }
void setLevelInfo(GC3Denum target, GC3Dint level, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, GC3Denum type);
diff --git a/Source/WebCore/html/canvas/WebGLTexture.idl b/Source/WebCore/html/canvas/WebGLTexture.idl
index da7e066..d287f35 100644
--- a/Source/WebCore/html/canvas/WebGLTexture.idl
+++ b/Source/WebCore/html/canvas/WebGLTexture.idl
@@ -24,6 +24,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLTexture {
+ interface [Conditional=WEBGL] WebGLTexture {
};
}
diff --git a/Source/WebCore/html/canvas/WebGLUniformLocation.cpp b/Source/WebCore/html/canvas/WebGLUniformLocation.cpp
index a8220b0..1aeddb5 100644
--- a/Source/WebCore/html/canvas/WebGLUniformLocation.cpp
+++ b/Source/WebCore/html/canvas/WebGLUniformLocation.cpp
@@ -26,12 +26,12 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebGLUniformLocation.h"
namespace WebCore {
-
+
PassRefPtr<WebGLUniformLocation> WebGLUniformLocation::create(WebGLProgram* program, GC3Dint location)
{
return adoptRef(new WebGLUniformLocation(program, location));
@@ -64,4 +64,4 @@ GC3Dint WebGLUniformLocation::location() const
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebGLUniformLocation.h b/Source/WebCore/html/canvas/WebGLUniformLocation.h
index 3ef9fa8..6e05c7a 100644
--- a/Source/WebCore/html/canvas/WebGLUniformLocation.h
+++ b/Source/WebCore/html/canvas/WebGLUniformLocation.h
@@ -39,14 +39,14 @@ class WebGLUniformLocation : public RefCounted<WebGLUniformLocation> {
public:
virtual ~WebGLUniformLocation() { }
- static PassRefPtr<WebGLUniformLocation> create(WebGLProgram* program, GC3Dint location);
+ static PassRefPtr<WebGLUniformLocation> create(WebGLProgram*, GC3Dint location);
WebGLProgram* program() const;
GC3Dint location() const;
protected:
- WebGLUniformLocation(WebGLProgram* program, GC3Dint location);
+ WebGLUniformLocation(WebGLProgram*, GC3Dint location);
private:
RefPtr<WebGLProgram> m_program;
diff --git a/Source/WebCore/html/canvas/WebGLUniformLocation.idl b/Source/WebCore/html/canvas/WebGLUniformLocation.idl
index b080241..5cd6404 100644
--- a/Source/WebCore/html/canvas/WebGLUniformLocation.idl
+++ b/Source/WebCore/html/canvas/WebGLUniformLocation.idl
@@ -25,6 +25,6 @@
*/
module html {
- interface [Conditional=3D_CANVAS] WebGLUniformLocation {
+ interface [Conditional=WEBGL] WebGLUniformLocation {
};
}
diff --git a/Source/WebCore/html/canvas/WebKitLoseContext.cpp b/Source/WebCore/html/canvas/WebKitLoseContext.cpp
index c7dd078..05e82f4 100644
--- a/Source/WebCore/html/canvas/WebKitLoseContext.cpp
+++ b/Source/WebCore/html/canvas/WebKitLoseContext.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "WebKitLoseContext.h"
@@ -60,4 +60,4 @@ void WebKitLoseContext::loseContext()
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/html/canvas/WebKitLoseContext.idl b/Source/WebCore/html/canvas/WebKitLoseContext.idl
index 741aa4a..83fc909 100644
--- a/Source/WebCore/html/canvas/WebKitLoseContext.idl
+++ b/Source/WebCore/html/canvas/WebKitLoseContext.idl
@@ -24,7 +24,7 @@
*/
module html {
- interface [Conditional=3D_CANVAS, OmitConstructor] WebKitLoseContext {
+ interface [Conditional=WEBGL, OmitConstructor] WebKitLoseContext {
[StrictTypeChecking] void loseContext();
};
}
diff --git a/Source/WebCore/html/parser/HTMLConstructionSite.cpp b/Source/WebCore/html/parser/HTMLConstructionSite.cpp
index c46b9b9..a026ef9 100644
--- a/Source/WebCore/html/parser/HTMLConstructionSite.cpp
+++ b/Source/WebCore/html/parser/HTMLConstructionSite.cpp
@@ -130,10 +130,20 @@ void HTMLConstructionSite::attachAtSite(const AttachmentSite& site, PassRefPtr<N
child->attach();
}
-HTMLConstructionSite::HTMLConstructionSite(Document* document, FragmentScriptingPermission scriptingPermission, bool isParsingFragment)
+HTMLConstructionSite::HTMLConstructionSite(Document* document)
: m_document(document)
+ , m_attachmentRoot(document)
+ , m_fragmentScriptingPermission(FragmentScriptingAllowed)
+ , m_isParsingFragment(false)
+ , m_redirectAttachToFosterParent(false)
+{
+}
+
+HTMLConstructionSite::HTMLConstructionSite(DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
+ : m_document(fragment->document())
+ , m_attachmentRoot(fragment)
, m_fragmentScriptingPermission(scriptingPermission)
- , m_isParsingFragment(isParsingFragment)
+ , m_isParsingFragment(true)
, m_redirectAttachToFosterParent(false)
{
}
@@ -145,6 +155,7 @@ HTMLConstructionSite::~HTMLConstructionSite()
void HTMLConstructionSite::detach()
{
m_document = 0;
+ m_attachmentRoot = 0;
}
void HTMLConstructionSite::setForm(HTMLFormElement* form)
@@ -170,7 +181,7 @@ void HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken& tok
{
RefPtr<HTMLHtmlElement> element = HTMLHtmlElement::create(m_document);
element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission);
- m_openElements.pushHTMLHtmlElement(attach<Element>(m_document, element.get()));
+ m_openElements.pushHTMLHtmlElement(attach<Element>(m_attachmentRoot, element.get()));
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
element->insertedByParser();
#endif
@@ -205,7 +216,16 @@ void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken& token)
void HTMLConstructionSite::insertDoctype(AtomicHTMLToken& token)
{
ASSERT(token.type() == HTMLToken::DOCTYPE);
- attach(m_document, DocumentType::create(m_document, token.name(), String::adopt(token.publicIdentifier()), String::adopt(token.systemIdentifier())));
+ attach(m_attachmentRoot, DocumentType::create(m_document, token.name(), String::adopt(token.publicIdentifier()), String::adopt(token.systemIdentifier())));
+
+ // DOCTYPE nodes are only processed when parsing fragments w/o contextElements, which
+ // never occurs. However, if we ever chose to support such, this code is subtly wrong,
+ // because context-less fragments can determine their own quirks mode, and thus change
+ // parsing rules (like <p> inside <table>). For now we ASSERT that we never hit this code
+ // in a fragment, as changing the owning document's compatibility mode would be wrong.
+ ASSERT(!m_isParsingFragment);
+ if (m_isParsingFragment)
+ return;
if (token.forceQuirks())
m_document->setCompatibilityMode(Document::QuirksMode);
@@ -222,7 +242,7 @@ void HTMLConstructionSite::insertComment(AtomicHTMLToken& token)
void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken& token)
{
ASSERT(token.type() == HTMLToken::Comment);
- attach(m_document, Comment::create(m_document, token.comment()));
+ attach(m_attachmentRoot, Comment::create(m_document, token.comment()));
}
void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken& token)
diff --git a/Source/WebCore/html/parser/HTMLConstructionSite.h b/Source/WebCore/html/parser/HTMLConstructionSite.h
index 5a4a65d..0298503 100644
--- a/Source/WebCore/html/parser/HTMLConstructionSite.h
+++ b/Source/WebCore/html/parser/HTMLConstructionSite.h
@@ -43,7 +43,8 @@ class Element;
class HTMLConstructionSite {
WTF_MAKE_NONCOPYABLE(HTMLConstructionSite);
public:
- HTMLConstructionSite(Document*, FragmentScriptingPermission, bool isParsingFragment);
+ HTMLConstructionSite(Document*);
+ HTMLConstructionSite(DocumentFragment*, FragmentScriptingPermission);
~HTMLConstructionSite();
void detach();
@@ -130,6 +131,12 @@ private:
void dispatchDocumentElementAvailableIfNeeded();
Document* m_document;
+
+ // This is the root ContainerNode to which the parser attaches all newly
+ // constructed nodes. It points to a DocumentFragment when parsing fragments
+ // and a Document in all other cases.
+ ContainerNode* m_attachmentRoot;
+
RefPtr<Element> m_head;
RefPtr<HTMLFormElement> m_form;
mutable HTMLElementStack m_openElements;
diff --git a/Source/WebCore/html/parser/HTMLDocumentParser.cpp b/Source/WebCore/html/parser/HTMLDocumentParser.cpp
index 93e1309..2fe9486 100644
--- a/Source/WebCore/html/parser/HTMLDocumentParser.cpp
+++ b/Source/WebCore/html/parser/HTMLDocumentParser.cpp
@@ -39,7 +39,6 @@
#include "InspectorInstrumentation.h"
#include "NestingLevelIncrementer.h"
#include "Settings.h"
-#include "XSSAuditor.h"
#include <wtf/CurrentTime.h>
#ifdef ANDROID_INSTRUMENT
@@ -85,6 +84,7 @@ HTMLDocumentParser::HTMLDocumentParser(HTMLDocument* document, bool reportErrors
, m_scriptRunner(HTMLScriptRunner::create(document, this))
, m_treeBuilder(HTMLTreeBuilder::create(this, document, reportErrors, usePreHTML5ParserQuirks(document)))
, m_parserScheduler(HTMLParserScheduler::create(this))
+ , m_xssFilter(this)
, m_endWasDelayed(false)
, m_writeNestingLevel(0)
{
@@ -96,6 +96,7 @@ HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, Element* cont
: ScriptableDocumentParser(fragment->document())
, m_tokenizer(HTMLTokenizer::create(usePreHTML5ParserQuirks(fragment->document())))
, m_treeBuilder(HTMLTreeBuilder::create(this, fragment, contextElement, scriptingPermission, usePreHTML5ParserQuirks(fragment->document())))
+ , m_xssFilter(this)
, m_endWasDelayed(false)
, m_writeNestingLevel(0)
{
@@ -230,8 +231,13 @@ void HTMLDocumentParser::pumpTokenizer(SynchronousMode mode)
if (!m_treeBuilder->isParsingFragment()
&& document()->frame() && document()->frame()->navigationScheduler()->locationChangePending())
break;
+
+ m_sourceTracker.start(m_input, m_token);
if (!m_tokenizer->nextToken(m_input.current(), m_token))
break;
+ m_sourceTracker.end(m_input, m_token);
+
+ m_xssFilter.filterToken(m_token);
m_treeBuilder->constructTreeFromToken(m_token);
m_token.clear();
@@ -274,7 +280,12 @@ void HTMLDocumentParser::pumpTokenizer(SynchronousMode mode)
bool HTMLDocumentParser::hasInsertionPoint()
{
- return m_input.hasInsertionPoint();
+ // FIXME: The wasCreatedByScript() branch here might not be fully correct.
+ // Our model of the EOF character differs slightly from the one in
+ // the spec because our treatment is uniform between network-sourced
+ // and script-sourced input streams whereas the spec treats them
+ // differently.
+ return m_input.hasInsertionPoint() || (wasCreatedByScript() && !m_input.haveSeenEndOfFile());
}
void HTMLDocumentParser::insert(const SegmentedString& source)
@@ -414,6 +425,11 @@ bool HTMLDocumentParser::inScriptExecution() const
return m_scriptRunner->isExecutingScript();
}
+String HTMLDocumentParser::sourceForToken(const HTMLToken& token)
+{
+ return m_sourceTracker.sourceForToken(token);
+}
+
int HTMLDocumentParser::lineNumber() const
{
return m_tokenizer->lineNumber();
@@ -460,9 +476,7 @@ void HTMLDocumentParser::stopWatchingForLoad(CachedResource* cachedScript)
bool HTMLDocumentParser::shouldLoadExternalScriptFromSrc(const AtomicString& srcValue)
{
- if (!xssAuditor())
- return true;
- return xssAuditor()->canLoadExternalScriptFromSrc(srcValue);
+ return document()->contentSecurityPolicy()->canLoadExternalScriptFromSrc(srcValue);
}
void HTMLDocumentParser::notifyFinished(CachedResource* cachedResource)
diff --git a/Source/WebCore/html/parser/HTMLDocumentParser.h b/Source/WebCore/html/parser/HTMLDocumentParser.h
index f925269..be2ca1b 100644
--- a/Source/WebCore/html/parser/HTMLDocumentParser.h
+++ b/Source/WebCore/html/parser/HTMLDocumentParser.h
@@ -30,10 +30,12 @@
#include "FragmentScriptingPermission.h"
#include "HTMLInputStream.h"
#include "HTMLScriptRunnerHost.h"
+#include "HTMLSourceTracker.h"
#include "HTMLToken.h"
#include "ScriptableDocumentParser.h"
#include "SegmentedString.h"
#include "Timer.h"
+#include "XSSFilter.h"
#include <wtf/OwnPtr.h>
namespace WebCore {
@@ -71,8 +73,11 @@ public:
static bool usePreHTML5ParserQuirks(Document*);
HTMLTokenizer* tokenizer() const { return m_tokenizer.get(); }
+ String sourceForToken(const HTMLToken&);
virtual TextPosition0 textPosition() const;
+ virtual int lineNumber() const;
+
virtual void suspendScheduledTasks();
virtual void resumeScheduledTasks();
@@ -97,7 +102,6 @@ private:
virtual bool isWaitingForScripts() const;
virtual bool isExecutingScript() const;
virtual void executeScriptsWaitingForStylesheets();
- virtual int lineNumber() const;
// HTMLScriptRunnerHost
virtual void watchForLoad(CachedResource*);
@@ -141,6 +145,8 @@ private:
OwnPtr<HTMLTreeBuilder> m_treeBuilder;
OwnPtr<HTMLPreloadScanner> m_preloadScanner;
OwnPtr<HTMLParserScheduler> m_parserScheduler;
+ HTMLSourceTracker m_sourceTracker;
+ XSSFilter m_xssFilter;
bool m_endWasDelayed;
unsigned m_writeNestingLevel;
diff --git a/Source/WebCore/html/parser/HTMLInputStream.h b/Source/WebCore/html/parser/HTMLInputStream.h
index d95ec31..512ae88 100644
--- a/Source/WebCore/html/parser/HTMLInputStream.h
+++ b/Source/WebCore/html/parser/HTMLInputStream.h
@@ -67,17 +67,7 @@ public:
bool hasInsertionPoint() const
{
- if (&m_first != m_last)
- return true;
- if (!haveSeenEndOfFile()) {
- // FIXME: Somehow we need to understand the difference between
- // input streams that are coming off the network and streams that
- // were created with document.open(). In the later case, we always
- // have an isertion point at the end of the stream until someone
- // calls document.close().
- return true;
- }
- return false;
+ return &m_first != m_last;
}
void markEndOfFile()
diff --git a/Source/WebCore/html/parser/HTMLParserIdioms.cpp b/Source/WebCore/html/parser/HTMLParserIdioms.cpp
index 91ff8d3..2be6af9 100644
--- a/Source/WebCore/html/parser/HTMLParserIdioms.cpp
+++ b/Source/WebCore/html/parser/HTMLParserIdioms.cpp
@@ -25,6 +25,7 @@
#include "config.h"
#include "HTMLParserIdioms.h"
+#include <limits>
#include <wtf/MathExtras.h>
#include <wtf/dtoa.h>
#include <wtf/text/AtomicString.h>
@@ -85,7 +86,7 @@ bool parseToDoubleForNumberType(const String& string, double* result)
// Numbers are considered finite IEEE 754 single-precision floating point values.
// See HTML5 2.4.4.3 `Real numbers.'
- if (-FLT_MAX > value || value > FLT_MAX)
+ if (-std::numeric_limits<float>::max() > value || value > std::numeric_limits<float>::max())
return false;
if (result) {
diff --git a/Source/WebCore/html/parser/HTMLScriptRunner.cpp b/Source/WebCore/html/parser/HTMLScriptRunner.cpp
index 2fe1d30..c99858d 100644
--- a/Source/WebCore/html/parser/HTMLScriptRunner.cpp
+++ b/Source/WebCore/html/parser/HTMLScriptRunner.cpp
@@ -264,6 +264,7 @@ bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Elemen
ASSERT(!pendingScript.element());
const AtomicString& srcValue = script->getAttribute(srcAttr);
// Allow the host to disllow script loads (using the XSSAuditor, etc.)
+ // FIXME: this check should be performed on the final URL in a redirect chain.
if (!m_host->shouldLoadExternalScriptFromSrc(srcValue))
return false;
// FIXME: We need to resolve the url relative to the element.
diff --git a/Source/WebCore/html/parser/HTMLSourceTracker.cpp b/Source/WebCore/html/parser/HTMLSourceTracker.cpp
new file mode 100644
index 0000000..cf43105
--- /dev/null
+++ b/Source/WebCore/html/parser/HTMLSourceTracker.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 Adam Barth. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "HTMLSourceTracker.h"
+
+namespace WebCore {
+
+HTMLSourceTracker::HTMLSourceTracker()
+{
+}
+
+void HTMLSourceTracker::start(const HTMLInputStream& input, HTMLToken& token)
+{
+ m_sourceFromPreviousSegments = token.type() == HTMLToken::Uninitialized ? String() : m_sourceFromPreviousSegments + m_source.toString();
+ m_source = input.current();
+ token.setBaseOffset(input.current().numberOfCharactersConsumed() - m_sourceFromPreviousSegments.length());
+}
+
+void HTMLSourceTracker::end(const HTMLInputStream& input, HTMLToken& token)
+{
+ m_cachedSourceForToken = String();
+ // FIXME: This work should really be done by the HTMLTokenizer.
+ token.end(input.current().numberOfCharactersConsumed());
+}
+
+String HTMLSourceTracker::sourceForToken(const HTMLToken& token)
+{
+ if (token.type() == HTMLToken::EndOfFile)
+ return String(); // Hides the null character we use to mark the end of file.
+
+ if (!m_cachedSourceForToken.isEmpty())
+ return m_cachedSourceForToken;
+
+ ASSERT(!token.startIndex());
+ UChar* data = 0;
+ int length = token.endIndex() - token.startIndex() - m_sourceFromPreviousSegments.length();
+ String source = String::createUninitialized(length, data);
+ for (int i = 0; i < length; ++i) {
+ data[i] = *m_source;
+ m_source.advance();
+ }
+ m_cachedSourceForToken = m_sourceFromPreviousSegments + source;
+ return m_cachedSourceForToken;
+}
+
+}
diff --git a/Source/WebCore/html/parser/HTMLSourceTracker.h b/Source/WebCore/html/parser/HTMLSourceTracker.h
new file mode 100644
index 0000000..17ae191
--- /dev/null
+++ b/Source/WebCore/html/parser/HTMLSourceTracker.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 Adam Barth. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef HTMLSourceTracker_h
+#define HTMLSourceTracker_h
+
+#include "HTMLInputStream.h"
+#include "HTMLToken.h"
+
+namespace WebCore {
+
+class HTMLSourceTracker {
+ WTF_MAKE_NONCOPYABLE(HTMLSourceTracker);
+public:
+ HTMLSourceTracker();
+
+ // FIXME: Once we move "end" into HTMLTokenizer, rename "start" to
+ // something that makes it obvious that this method can be called multiple
+ // times.
+ void start(const HTMLInputStream&, HTMLToken&);
+ void end(const HTMLInputStream&, HTMLToken&);
+
+ String sourceForToken(const HTMLToken&);
+
+private:
+ String m_sourceFromPreviousSegments;
+ SegmentedString m_source;
+ String m_cachedSourceForToken;
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/html/parser/HTMLToken.h b/Source/WebCore/html/parser/HTMLToken.h
index 1cbc151..aa16ab2 100644
--- a/Source/WebCore/html/parser/HTMLToken.h
+++ b/Source/WebCore/html/parser/HTMLToken.h
@@ -64,20 +64,26 @@ public:
HTMLToken() { clear(); }
- void clear(int startIndex = 0)
+ void clear()
{
m_type = Uninitialized;
- m_range.m_start = startIndex;
- m_range.m_end = startIndex;
+ m_range.m_start = 0;
+ m_range.m_end = 0;
+ m_baseOffset = 0;
m_data.clear();
}
int startIndex() const { return m_range.m_start; }
int endIndex() const { return m_range.m_end; }
- void end(int endIndex)
+ void setBaseOffset(int offset)
{
- m_range.m_end = endIndex;
+ m_baseOffset = offset;
+ }
+
+ void end(int endOffset)
+ {
+ m_range.m_end = endOffset - m_baseOffset;
}
void makeEndOfFile()
@@ -172,29 +178,30 @@ public:
#endif
}
- void beginAttributeName(int index)
+ void beginAttributeName(int offset)
{
- m_currentAttribute->m_nameRange.m_start = index;
+ m_currentAttribute->m_nameRange.m_start = offset - m_baseOffset;
}
- void endAttributeName(int index)
+ void endAttributeName(int offset)
{
+ int index = offset - m_baseOffset;
m_currentAttribute->m_nameRange.m_end = index;
m_currentAttribute->m_valueRange.m_start = index;
m_currentAttribute->m_valueRange.m_end = index;
}
- void beginAttributeValue(int index)
+ void beginAttributeValue(int offset)
{
- m_currentAttribute->m_valueRange.m_start = index;
+ m_currentAttribute->m_valueRange.m_start = offset - m_baseOffset;
#ifndef NDEBUG
m_currentAttribute->m_valueRange.m_end = 0;
#endif
}
- void endAttributeValue(int index)
+ void endAttributeValue(int offset)
{
- m_currentAttribute->m_valueRange.m_end = index;
+ m_currentAttribute->m_valueRange.m_end = offset - m_baseOffset;
}
void appendToAttributeName(UChar character)
@@ -213,6 +220,13 @@ public:
m_currentAttribute->m_value.append(character);
}
+ void appendToAttributeValue(size_t i, const String& value)
+ {
+ ASSERT(!value.isEmpty());
+ ASSERT(m_type == StartTag || m_type == EndTag);
+ m_attributes[i].m_value.append(value.characters(), value.length());
+ }
+
Type type() const { return m_type; }
bool selfClosing() const
@@ -239,6 +253,18 @@ public:
return m_data;
}
+ void eraseCharacters()
+ {
+ ASSERT(m_type == Character);
+ m_data.clear();
+ }
+
+ void eraseValueOfAttribute(size_t i)
+ {
+ ASSERT(m_type == StartTag || m_type == EndTag);
+ m_attributes[i].m_value.clear();
+ }
+
const DataVector& characters() const
{
ASSERT(m_type == Character);
@@ -331,9 +357,8 @@ private:
};
Type m_type;
-
- // Which characters from the input stream are represented by this token.
- Range m_range;
+ Range m_range; // Always starts at zero.
+ int m_baseOffset;
// "name" for DOCTYPE, StartTag, and EndTag
// "characters" for Character
diff --git a/Source/WebCore/html/parser/HTMLTreeBuilder.cpp b/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
index 97cee13..d2931ac 100644
--- a/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
+++ b/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
@@ -26,8 +26,8 @@
#include "config.h"
#include "HTMLTreeBuilder.h"
-#include "CharacterNames.h"
#include "Comment.h"
+#include "DOMWindow.h"
#include "DocumentFragment.h"
#include "DocumentType.h"
#include "Frame.h"
@@ -50,6 +50,7 @@
#include "XLinkNames.h"
#include "XMLNSNames.h"
#include "XMLNames.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -341,7 +342,7 @@ private:
HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLDocument* document, bool reportErrors, bool usePreHTML5ParserQuirks)
: m_framesetOk(true)
, m_document(document)
- , m_tree(document, FragmentScriptingAllowed, false)
+ , m_tree(document)
, m_reportErrors(reportErrors)
, m_isPaused(false)
, m_insertionMode(InitialMode)
@@ -359,8 +360,8 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLDocument* docum
HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks)
: m_framesetOk(true)
, m_fragmentContext(fragment, contextElement, scriptingPermission)
- , m_document(m_fragmentContext.document())
- , m_tree(m_document, scriptingPermission, true)
+ , m_document(fragment->document())
+ , m_tree(fragment, scriptingPermission)
, m_reportErrors(false) // FIXME: Why not report errors in fragments?
, m_isPaused(false)
, m_insertionMode(InitialMode)
@@ -374,7 +375,6 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, DocumentFragment* f
if (contextElement) {
// Steps 4.2-4.6 of the HTML5 Fragment Case parsing algorithm:
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case
- m_document->setCompatibilityMode(contextElement->document()->compatibilityMode());
processFakeStartTag(htmlTag);
resetInsertionModeAppropriately();
m_tree.setForm(closestFormAncestor(contextElement));
@@ -403,27 +403,24 @@ HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext()
}
HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext(DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission)
- : m_dummyDocumentForFragmentParsing(HTMLDocument::create(0, KURL(), fragment->document()->baseURI()))
- , m_fragment(fragment)
+ : m_fragment(fragment)
, m_contextElement(contextElement)
, m_scriptingPermission(scriptingPermission)
{
- m_dummyDocumentForFragmentParsing->setCompatibilityMode(fragment->document()->compatibilityMode());
-}
-
-Document* HTMLTreeBuilder::FragmentParsingContext::document() const
-{
- ASSERT(m_fragment);
- return m_dummyDocumentForFragmentParsing.get();
+ ASSERT(!fragment->hasChildNodes());
}
void HTMLTreeBuilder::FragmentParsingContext::finished()
{
- // Populate the DocumentFragment with the parsed content now that we're done.
- ContainerNode* root = m_dummyDocumentForFragmentParsing.get();
- if (m_contextElement)
- root = m_dummyDocumentForFragmentParsing->documentElement();
- m_fragment->takeAllChildrenFrom(root);
+ if (!m_contextElement)
+ return;
+
+ // The HTML5 spec says to return the children of the fragment's document
+ // element when there is a context element (10.4.7).
+ RefPtr<ContainerNode> documentElement = firstElementChild(m_fragment);
+ m_fragment->removeChildren();
+ ASSERT(documentElement);
+ m_fragment->takeAllChildrenFrom(documentElement.get());
}
HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext()
@@ -2807,6 +2804,20 @@ void HTMLTreeBuilder::finished()
m_document->finishedParsing();
}
+void HTMLTreeBuilder::parseError(AtomicHTMLToken&)
+{
+ DEFINE_STATIC_LOCAL(String, parseErrorMessage, ("HTML parse error (recovered gracefully)"));
+
+ if (!m_reportErrors)
+ return;
+
+ DOMWindow* domWindow = m_document->domWindow();
+ if (!domWindow)
+ return;
+
+ domWindow->console()->addMessage(HTMLMessageSource, LogMessageType, WarningMessageLevel, parseErrorMessage, m_parser->lineNumber(), m_document->url().string());
+}
+
bool HTMLTreeBuilder::scriptEnabled(Frame* frame)
{
if (!frame)
diff --git a/Source/WebCore/html/parser/HTMLTreeBuilder.h b/Source/WebCore/html/parser/HTMLTreeBuilder.h
index 309ac6f..0cec667 100644
--- a/Source/WebCore/html/parser/HTMLTreeBuilder.h
+++ b/Source/WebCore/html/parser/HTMLTreeBuilder.h
@@ -183,8 +183,7 @@ private:
bool m_framesetOk;
- // FIXME: Implement error reporting.
- void parseError(AtomicHTMLToken&) { }
+ void parseError(AtomicHTMLToken&);
InsertionMode insertionMode() const { return m_insertionMode; }
void setInsertionMode(InsertionMode mode)
@@ -212,7 +211,6 @@ private:
FragmentParsingContext(DocumentFragment*, Element* contextElement, FragmentScriptingPermission);
~FragmentParsingContext();
- Document* document() const;
DocumentFragment* fragment() const { return m_fragment; }
Element* contextElement() const { ASSERT(m_fragment); return m_contextElement; }
FragmentScriptingPermission scriptingPermission() const { ASSERT(m_fragment); return m_scriptingPermission; }
@@ -220,7 +218,6 @@ private:
void finished();
private:
- RefPtr<Document> m_dummyDocumentForFragmentParsing;
DocumentFragment* m_fragment;
Element* m_contextElement;
diff --git a/Source/WebCore/html/parser/HTMLViewSourceParser.cpp b/Source/WebCore/html/parser/HTMLViewSourceParser.cpp
index ace8590..7cdbdc7 100644
--- a/Source/WebCore/html/parser/HTMLViewSourceParser.cpp
+++ b/Source/WebCore/html/parser/HTMLViewSourceParser.cpp
@@ -49,35 +49,27 @@ void HTMLViewSourceParser::insert(const SegmentedString&)
void HTMLViewSourceParser::pumpTokenizer()
{
- while (m_tokenizer->nextToken(m_input.current(), m_token)) {
- m_token.end(m_input.current().numberOfCharactersConsumed());
+ while (true) {
+ m_sourceTracker.start(m_input, m_token);
+ if (!m_tokenizer->nextToken(m_input.current(), m_token))
+ break;
+ m_sourceTracker.end(m_input, m_token);
+
document()->addSource(sourceForToken(), m_token);
updateTokenizerState();
- m_token.clear(m_input.current().numberOfCharactersConsumed());
+ m_token.clear();
}
}
void HTMLViewSourceParser::append(const SegmentedString& input)
{
m_input.appendToEnd(input);
- m_source.append(input);
pumpTokenizer();
}
String HTMLViewSourceParser::sourceForToken()
{
- if (m_token.type() == HTMLToken::EndOfFile)
- return String();
-
- ASSERT(m_source.numberOfCharactersConsumed() == m_token.startIndex());
- UChar* data = 0;
- int length = m_token.endIndex() - m_token.startIndex();
- String source = String::createUninitialized(length, data);
- for (int i = 0; i < length; ++i) {
- data[i] = *m_source;
- m_source.advance();
- }
- return source;
+ return m_sourceTracker.sourceForToken(m_token);
}
void HTMLViewSourceParser::updateTokenizerState()
diff --git a/Source/WebCore/html/parser/HTMLViewSourceParser.h b/Source/WebCore/html/parser/HTMLViewSourceParser.h
index abe55b4..2e6ddfe 100644
--- a/Source/WebCore/html/parser/HTMLViewSourceParser.h
+++ b/Source/WebCore/html/parser/HTMLViewSourceParser.h
@@ -28,6 +28,7 @@
#include "DecodedDataDocumentParser.h"
#include "HTMLInputStream.h"
+#include "HTMLSourceTracker.h"
#include "HTMLToken.h"
#include "HTMLTokenizer.h"
#include "HTMLViewSourceDocument.h"
@@ -69,8 +70,8 @@ private:
void updateTokenizerState();
HTMLInputStream m_input;
- SegmentedString m_source;
HTMLToken m_token;
+ HTMLSourceTracker m_sourceTracker;
OwnPtr<HTMLTokenizer> m_tokenizer;
};
diff --git a/Source/WebCore/html/parser/XSSFilter.cpp b/Source/WebCore/html/parser/XSSFilter.cpp
new file mode 100644
index 0000000..de31f76
--- /dev/null
+++ b/Source/WebCore/html/parser/XSSFilter.cpp
@@ -0,0 +1,450 @@
+/*
+ * Copyright (C) 2011 Adam Barth. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "XSSFilter.h"
+
+#include "DOMWindow.h"
+#include "Document.h"
+#include "DocumentLoader.h"
+#include "Frame.h"
+#include "HTMLDocumentParser.h"
+#include "HTMLNames.h"
+#include "HTMLParamElement.h"
+#include "HTMLParserIdioms.h"
+#include "Settings.h"
+#include "TextEncoding.h"
+#include "TextResourceDecoder.h"
+#include <wtf/text/CString.h>
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+namespace {
+
+bool isNonCanonicalCharacter(UChar c)
+{
+ // We remove all non-ASCII characters, including non-printable ASCII characters.
+ //
+ // Note, we don't remove backslashes like PHP stripslashes(), which among other things converts "\\0" to the \0 character.
+ // Instead, we remove backslashes and zeros (since the string "\\0" =(remove backslashes)=> "0"). However, this has the
+ // adverse effect that we remove any legitimate zeros from a string.
+ //
+ // For instance: new String("http://localhost:8000") => new String("http://localhost:8").
+ return (c == '\\' || c == '0' || c == '\0' || c >= 127);
+}
+
+String canonicalize(const String& string)
+{
+ return string.removeCharacters(&isNonCanonicalCharacter);
+}
+
+bool isRequiredForInjection(UChar c)
+{
+ return (c == '\'' || c == '"' || c == '<' || c == '>');
+}
+
+bool hasName(const HTMLToken& token, const QualifiedName& name)
+{
+ return equalIgnoringNullity(token.name(), static_cast<const String&>(name.localName()));
+}
+
+bool findAttributeWithName(const HTMLToken& token, const QualifiedName& name, size_t& indexOfMatchingAttribute)
+{
+ for (size_t i = 0; i < token.attributes().size(); ++i) {
+ if (equalIgnoringNullity(token.attributes().at(i).m_name, name.localName())) {
+ indexOfMatchingAttribute = i;
+ return true;
+ }
+ }
+ return false;
+}
+
+bool isNameOfInlineEventHandler(const Vector<UChar, 32>& name)
+{
+ const size_t lengthOfShortestInlineEventHandlerName = 5; // To wit: oncut.
+ if (name.size() < lengthOfShortestInlineEventHandlerName)
+ return false;
+ return name[0] == 'o' && name[1] == 'n';
+}
+
+bool containsJavaScriptURL(const Vector<UChar, 32>& value)
+{
+ static const char javaScriptScheme[] = "javascript:";
+ static const size_t lengthOfJavaScriptScheme = sizeof(javaScriptScheme) - 1;
+
+ size_t i;
+ for (i = 0; i < value.size(); ++i) {
+ if (!isHTMLSpace(value[i]))
+ break;
+ }
+
+ if (value.size() - i < lengthOfJavaScriptScheme)
+ return false;
+
+ return equalIgnoringCase(value.data() + i, javaScriptScheme, lengthOfJavaScriptScheme);
+}
+
+String decodeURL(const String& string, const TextEncoding& encoding)
+{
+ String workingString = string;
+ workingString.replace('+', ' ');
+ workingString = decodeURLEscapeSequences(workingString);
+ CString workingStringUTF8 = workingString.utf8();
+ String decodedString = encoding.decode(workingStringUTF8.data(), workingStringUTF8.length());
+ // FIXME: Is this check necessary?
+ if (decodedString.isEmpty())
+ return canonicalize(workingString);
+ return canonicalize(decodedString);
+}
+
+}
+
+XSSFilter::XSSFilter(HTMLDocumentParser* parser)
+ : m_parser(parser)
+ , m_isEnabled(false)
+ , m_xssProtection(XSSProtectionEnabled)
+ , m_state(Uninitialized)
+{
+ ASSERT(m_parser);
+ if (Frame* frame = parser->document()->frame()) {
+ if (Settings* settings = frame->settings())
+ m_isEnabled = settings->xssAuditorEnabled();
+ }
+ // Although tempting to call init() at this point, the various objects
+ // we want to reference might not all have been constructed yet.
+}
+
+void XSSFilter::init()
+{
+ const size_t miniumLengthForSuffixTree = 512; // FIXME: Tune this parameter.
+ const int suffixTreeDepth = 5;
+
+ ASSERT(m_state == Uninitialized);
+ m_state = Initial;
+
+ if (!m_isEnabled)
+ return;
+
+ // In theory, the Document could have detached from the Frame after the
+ // XSSFilter was constructed.
+ if (!m_parser->document()->frame()) {
+ m_isEnabled = false;
+ return;
+ }
+
+ const KURL& url = m_parser->document()->url();
+
+ if (url.protocolIsData()) {
+ m_isEnabled = false;
+ return;
+ }
+
+ TextResourceDecoder* decoder = m_parser->document()->decoder();
+ m_decodedURL = decoder ? decodeURL(url.string(), decoder->encoding()) : url.string();
+ if (m_decodedURL.find(isRequiredForInjection, 0) == notFound)
+ m_decodedURL = String();
+
+ if (DocumentLoader* documentLoader = m_parser->document()->frame()->loader()->documentLoader()) {
+ DEFINE_STATIC_LOCAL(String, XSSProtectionHeader, ("X-XSS-Protection"));
+ m_xssProtection = parseXSSProtectionHeader(documentLoader->response().httpHeaderField(XSSProtectionHeader));
+
+ FormData* httpBody = documentLoader->originalRequest().httpBody();
+ if (httpBody && !httpBody->isEmpty()) {
+ String httpBodyAsString = httpBody->flattenToString();
+ m_decodedHTTPBody = decoder ? decodeURL(httpBodyAsString, decoder->encoding()) : httpBodyAsString;
+ if (m_decodedHTTPBody.find(isRequiredForInjection, 0) == notFound)
+ m_decodedHTTPBody = String();
+ if (m_decodedHTTPBody.length() >= miniumLengthForSuffixTree)
+ m_decodedHTTPBodySuffixTree = adoptPtr(new SuffixTree<ASCIICodebook>(m_decodedHTTPBody, suffixTreeDepth));
+ }
+ }
+
+ if (m_decodedURL.isEmpty() && m_decodedHTTPBody.isEmpty())
+ m_isEnabled = false;
+}
+
+void XSSFilter::filterToken(HTMLToken& token)
+{
+ if (m_state == Uninitialized) {
+ init();
+ ASSERT(m_state == Initial);
+ }
+
+ if (!m_isEnabled || m_xssProtection == XSSProtectionDisabled)
+ return;
+
+ bool didBlockScript = false;
+
+ switch (m_state) {
+ case Uninitialized:
+ ASSERT_NOT_REACHED();
+ break;
+ case Initial:
+ didBlockScript = filterTokenInitial(token);
+ break;
+ case AfterScriptStartTag:
+ didBlockScript = filterTokenAfterScriptStartTag(token);
+ ASSERT(m_state == Initial);
+ m_cachedSnippet = String();
+ break;
+ }
+
+ if (didBlockScript) {
+ // FIXME: Consider using a more helpful console message.
+ DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to execute a JavaScript script. Source code of script found within request.\n"));
+ // FIXME: We should add the real line number to the console.
+ m_parser->document()->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
+
+ if (m_xssProtection == XSSProtectionBlockEnabled) {
+ m_parser->document()->frame()->loader()->stopAllLoaders();
+ m_parser->document()->frame()->navigationScheduler()->scheduleLocationChange(m_parser->document()->securityOrigin(), blankURL(), String());
+ }
+ }
+}
+
+bool XSSFilter::filterTokenInitial(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+
+ if (token.type() != HTMLToken::StartTag)
+ return false;
+
+ bool didBlockScript = eraseDangerousAttributesIfInjected(token);
+
+ if (hasName(token, scriptTag))
+ didBlockScript |= filterScriptToken(token);
+ else if (hasName(token, objectTag))
+ didBlockScript |= filterObjectToken(token);
+ else if (hasName(token, paramTag))
+ didBlockScript |= filterParamToken(token);
+ else if (hasName(token, embedTag))
+ didBlockScript |= filterEmbedToken(token);
+ else if (hasName(token, appletTag))
+ didBlockScript |= filterAppletToken(token);
+ else if (hasName(token, metaTag))
+ didBlockScript |= filterMetaToken(token);
+ else if (hasName(token, baseTag))
+ didBlockScript |= filterBaseToken(token);
+
+ return didBlockScript;
+}
+
+bool XSSFilter::filterTokenAfterScriptStartTag(HTMLToken& token)
+{
+ ASSERT(m_state == AfterScriptStartTag);
+ m_state = Initial;
+
+ if (token.type() != HTMLToken::Character) {
+ ASSERT(token.type() == HTMLToken::EndTag || token.type() == HTMLToken::EndOfFile);
+ return false;
+ }
+
+ int start = 0;
+ // FIXME: We probably want to grab only the first few characters of the
+ // contents of the script element.
+ int end = token.endIndex() - token.startIndex();
+ if (isContainedInRequest(m_cachedSnippet + snippetForRange(token, start, end))) {
+ token.eraseCharacters();
+ token.appendToCharacter(' '); // Technically, character tokens can't be empty.
+ return true;
+ }
+ return false;
+}
+
+bool XSSFilter::filterScriptToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, scriptTag));
+
+ if (eraseAttributeIfInjected(token, srcAttr, blankURL().string()))
+ return true;
+
+ m_state = AfterScriptStartTag;
+ m_cachedSnippet = m_parser->sourceForToken(token);
+ return false;
+}
+
+bool XSSFilter::filterObjectToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, objectTag));
+
+ bool didBlockScript = false;
+
+ didBlockScript |= eraseAttributeIfInjected(token, dataAttr, blankURL().string());
+ didBlockScript |= eraseAttributeIfInjected(token, typeAttr);
+ didBlockScript |= eraseAttributeIfInjected(token, classidAttr);
+
+ return didBlockScript;
+}
+
+bool XSSFilter::filterParamToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, paramTag));
+
+ size_t indexOfNameAttribute;
+ if (!findAttributeWithName(token, nameAttr, indexOfNameAttribute))
+ return false;
+
+ const HTMLToken::Attribute& nameAttribute = token.attributes().at(indexOfNameAttribute);
+ String name = String(nameAttribute.m_value.data(), nameAttribute.m_value.size());
+
+ if (!HTMLParamElement::isURLParameter(name))
+ return false;
+
+ return eraseAttributeIfInjected(token, valueAttr, blankURL().string());
+}
+
+bool XSSFilter::filterEmbedToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, embedTag));
+
+ bool didBlockScript = false;
+
+ didBlockScript |= eraseAttributeIfInjected(token, srcAttr, blankURL().string());
+ didBlockScript |= eraseAttributeIfInjected(token, typeAttr);
+
+ return didBlockScript;
+}
+
+bool XSSFilter::filterAppletToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, appletTag));
+
+ bool didBlockScript = false;
+
+ didBlockScript |= eraseAttributeIfInjected(token, codeAttr);
+ didBlockScript |= eraseAttributeIfInjected(token, objectAttr);
+
+ return didBlockScript;
+}
+
+bool XSSFilter::filterMetaToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, metaTag));
+
+ return eraseAttributeIfInjected(token, http_equivAttr);
+}
+
+bool XSSFilter::filterBaseToken(HTMLToken& token)
+{
+ ASSERT(m_state == Initial);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(hasName(token, baseTag));
+
+ return eraseAttributeIfInjected(token, hrefAttr);
+}
+
+bool XSSFilter::eraseDangerousAttributesIfInjected(HTMLToken& token)
+{
+ DEFINE_STATIC_LOCAL(String, safeJavaScriptURL, ("javascript:void(0)"));
+
+ bool didBlockScript = false;
+ for (size_t i = 0; i < token.attributes().size(); ++i) {
+ const HTMLToken::Attribute& attribute = token.attributes().at(i);
+ bool isInlineEventHandler = isNameOfInlineEventHandler(attribute.m_name);
+ bool valueContainsJavaScriptURL = isInlineEventHandler ? false : containsJavaScriptURL(attribute.m_value);
+ if (!isInlineEventHandler && !valueContainsJavaScriptURL)
+ continue;
+ if (!isContainedInRequest(snippetForAttribute(token, attribute)))
+ continue;
+ token.eraseValueOfAttribute(i);
+ if (valueContainsJavaScriptURL)
+ token.appendToAttributeValue(i, safeJavaScriptURL);
+ didBlockScript = true;
+ }
+ return didBlockScript;
+}
+
+bool XSSFilter::eraseAttributeIfInjected(HTMLToken& token, const QualifiedName& attributeName, const String& replacementValue)
+{
+ size_t indexOfAttribute;
+ if (findAttributeWithName(token, attributeName, indexOfAttribute)) {
+ const HTMLToken::Attribute& attribute = token.attributes().at(indexOfAttribute);
+ if (isContainedInRequest(snippetForAttribute(token, attribute))) {
+ if (attributeName == srcAttr && isSameOriginResource(String(attribute.m_value.data(), attribute.m_value.size())))
+ return false;
+ token.eraseValueOfAttribute(indexOfAttribute);
+ if (!replacementValue.isEmpty())
+ token.appendToAttributeValue(indexOfAttribute, replacementValue);
+ return true;
+ }
+ }
+ return false;
+}
+
+String XSSFilter::snippetForRange(const HTMLToken& token, int start, int end)
+{
+ // FIXME: There's an extra allocation here that we could save by
+ // passing the range to the parser.
+ return m_parser->sourceForToken(token).substring(start, end - start);
+}
+
+String XSSFilter::snippetForAttribute(const HTMLToken& token, const HTMLToken::Attribute& attribute)
+{
+ // FIXME: We should grab one character before the name also.
+ int start = attribute.m_nameRange.m_start - token.startIndex();
+ // FIXME: We probably want to grab only the first few characters of the attribute value.
+ int end = attribute.m_valueRange.m_end - token.startIndex();
+ return snippetForRange(token, start, end);
+}
+
+bool XSSFilter::isContainedInRequest(const String& snippet)
+{
+ ASSERT(!snippet.isEmpty());
+ String canonicalizedSnippet = canonicalize(snippet);
+ ASSERT(!canonicalizedSnippet.isEmpty());
+ if (m_decodedURL.find(canonicalizedSnippet, 0, false) != notFound)
+ return true;
+ if (m_decodedHTTPBodySuffixTree && !m_decodedHTTPBodySuffixTree->mightContain(canonicalizedSnippet))
+ return false;
+ return m_decodedHTTPBody.find(canonicalizedSnippet, 0, false) != notFound;
+}
+
+bool XSSFilter::isSameOriginResource(const String& url)
+{
+ // If the resource is loaded from the same URL as the enclosing page, it's
+ // probably not an XSS attack, so we reduce false positives by allowing the
+ // request. If the resource has a query string, we're more suspicious,
+ // however, because that's pretty rare and the attacker might be able to
+ // trick a server-side script into doing something dangerous with the query
+ // string.
+ KURL resourceURL(m_parser->document()->url(), url);
+ return (m_parser->document()->url().host() == resourceURL.host() && resourceURL.query().isEmpty());
+}
+
+}
diff --git a/Source/WebCore/html/parser/XSSFilter.h b/Source/WebCore/html/parser/XSSFilter.h
new file mode 100644
index 0000000..2c7d428
--- /dev/null
+++ b/Source/WebCore/html/parser/XSSFilter.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2011 Adam Barth. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef XSSFilter_h
+#define XSSFilter_h
+
+#include "HTMLToken.h"
+#include "HTTPParsers.h"
+#include "SuffixTree.h"
+
+namespace WebCore {
+
+class HTMLDocumentParser;
+
+class XSSFilter {
+ WTF_MAKE_NONCOPYABLE(XSSFilter);
+public:
+ explicit XSSFilter(HTMLDocumentParser*);
+
+ void filterToken(HTMLToken&);
+
+private:
+ enum State {
+ Uninitialized,
+ Initial,
+ AfterScriptStartTag,
+ };
+
+ void init();
+
+ bool filterTokenInitial(HTMLToken&);
+ bool filterTokenAfterScriptStartTag(HTMLToken&);
+
+ bool filterScriptToken(HTMLToken&);
+ bool filterObjectToken(HTMLToken&);
+ bool filterParamToken(HTMLToken&);
+ bool filterEmbedToken(HTMLToken&);
+ bool filterAppletToken(HTMLToken&);
+ bool filterMetaToken(HTMLToken&);
+ bool filterBaseToken(HTMLToken&);
+
+ bool eraseDangerousAttributesIfInjected(HTMLToken&);
+ bool eraseAttributeIfInjected(HTMLToken&, const QualifiedName&, const String& replacementValue = String());
+
+ String snippetForRange(const HTMLToken&, int start, int end);
+ String snippetForAttribute(const HTMLToken&, const HTMLToken::Attribute&);
+
+ bool isContainedInRequest(const String&);
+ bool isSameOriginResource(const String& url);
+
+ HTMLDocumentParser* m_parser;
+ bool m_isEnabled;
+ XSSProtectionDisposition m_xssProtection;
+
+ String m_decodedURL;
+ String m_decodedHTTPBody;
+ OwnPtr<SuffixTree<ASCIICodebook> > m_decodedHTTPBodySuffixTree;
+
+ State m_state;
+ String m_cachedSnippet;
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/html/shadow/MediaControls.cpp b/Source/WebCore/html/shadow/MediaControls.cpp
new file mode 100644
index 0000000..a374e49
--- /dev/null
+++ b/Source/WebCore/html/shadow/MediaControls.cpp
@@ -0,0 +1,617 @@
+/*
+ * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(VIDEO)
+#include "MediaControls.h"
+
+#include "EventNames.h"
+#include "FloatConversion.h"
+#include "HTMLNames.h"
+#include "MediaControlElements.h"
+#include "MouseEvent.h"
+#include "Page.h"
+#include "RenderLayer.h"
+#include "RenderTheme.h"
+#include <wtf/CurrentTime.h>
+#include <wtf/MathExtras.h>
+
+#if PLATFORM(ANDROID)
+#include "TouchEvent.h"
+#define TOUCH_DELAY 4
+#endif
+
+
+using namespace std;
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+static const double cTimeUpdateRepeatDelay = 0.2;
+static const double cOpacityAnimationRepeatDelay = 0.05;
+
+MediaControls::MediaControls(HTMLMediaElement* mediaElement)
+ : m_mediaElement(mediaElement)
+ , m_timeUpdateTimer(this, &MediaControls::timeUpdateTimerFired)
+ , m_opacityAnimationTimer(this, &MediaControls::opacityAnimationTimerFired)
+ , m_opacityAnimationStartTime(0)
+ , m_opacityAnimationDuration(0)
+ , m_opacityAnimationFrom(0)
+ , m_opacityAnimationTo(1.0f)
+ , m_mouseOver(false)
+#if PLATFORM(ANDROID)
+ , m_lastTouch(0)
+#endif
+{
+}
+
+void MediaControls::updateStyle()
+{
+ if (!m_controlsShadowRoot)
+ return;
+
+ if (m_panel)
+ m_panel->updateStyle();
+ if (m_muteButton)
+ m_muteButton->updateStyle();
+ if (m_playButton)
+ m_playButton->updateStyle();
+ if (m_seekBackButton)
+ m_seekBackButton->updateStyle();
+ if (m_seekForwardButton)
+ m_seekForwardButton->updateStyle();
+ if (m_rewindButton)
+ m_rewindButton->updateStyle();
+ if (m_returnToRealtimeButton)
+ m_returnToRealtimeButton->updateStyle();
+ if (m_toggleClosedCaptionsButton)
+ m_toggleClosedCaptionsButton->updateStyle();
+ if (m_statusDisplay)
+ m_statusDisplay->updateStyle();
+ if (m_timelineContainer)
+ m_timelineContainer->updateStyle();
+ if (m_timeline)
+ m_timeline->updateStyle();
+ if (m_fullscreenButton)
+ m_fullscreenButton->updateStyle();
+ if (m_currentTimeDisplay)
+ m_currentTimeDisplay->updateStyle();
+ if (m_timeRemainingDisplay)
+ m_timeRemainingDisplay->updateStyle();
+ if (m_volumeSliderContainer)
+ m_volumeSliderContainer->updateStyle();
+ if (m_volumeSliderMuteButton)
+ m_volumeSliderMuteButton->updateStyle();
+ if (m_volumeSlider)
+ m_volumeSlider->updateStyle();
+}
+
+void MediaControls::destroy()
+{
+ ASSERT(m_mediaElement->renderer());
+
+ if (m_controlsShadowRoot && m_controlsShadowRoot->renderer()) {
+
+ // detach the panel before removing the shadow renderer to prevent a crash in m_controlsShadowRoot->detach()
+ // when display: style changes
+ m_panel->detach();
+
+ m_mediaElement->renderer()->removeChild(m_controlsShadowRoot->renderer());
+ m_controlsShadowRoot->detach();
+ m_controlsShadowRoot = 0;
+ }
+}
+
+void MediaControls::update()
+{
+ HTMLMediaElement* media = m_mediaElement;
+ if (!media->controls() || !media->inActiveDocument()) {
+ if (m_controlsShadowRoot) {
+ m_controlsShadowRoot->detach();
+ m_panel = 0;
+ m_muteButton = 0;
+ m_playButton = 0;
+ m_statusDisplay = 0;
+ m_timelineContainer = 0;
+ m_timeline = 0;
+ m_seekBackButton = 0;
+ m_seekForwardButton = 0;
+ m_rewindButton = 0;
+ m_returnToRealtimeButton = 0;
+ m_currentTimeDisplay = 0;
+ m_timeRemainingDisplay = 0;
+ m_fullscreenButton = 0;
+ m_volumeSliderContainer = 0;
+ m_volumeSlider = 0;
+ m_volumeSliderMuteButton = 0;
+ m_controlsShadowRoot = 0;
+ m_toggleClosedCaptionsButton = 0;
+ }
+ m_opacityAnimationTo = 1.0f;
+ m_opacityAnimationTimer.stop();
+ m_timeUpdateTimer.stop();
+ return;
+ }
+
+ if (!m_controlsShadowRoot) {
+ createControlsShadowRoot();
+ createPanel();
+ if (m_panel) {
+ createRewindButton();
+ createPlayButton();
+ createReturnToRealtimeButton();
+ createStatusDisplay();
+ createTimelineContainer();
+ if (m_timelineContainer) {
+ createCurrentTimeDisplay();
+ createTimeline();
+ createTimeRemainingDisplay();
+ }
+ createSeekBackButton();
+ createSeekForwardButton();
+ createToggleClosedCaptionsButton();
+ createFullscreenButton();
+ createMuteButton();
+ createVolumeSliderContainer();
+ if (m_volumeSliderContainer) {
+ createVolumeSlider();
+ createVolumeSliderMuteButton();
+ }
+ m_panel->attach();
+ }
+ }
+
+ if (media->canPlay()) {
+ if (m_timeUpdateTimer.isActive())
+ m_timeUpdateTimer.stop();
+ } else if (media->renderer()->style()->visibility() == VISIBLE && m_timeline && m_timeline->renderer() && m_timeline->renderer()->style()->display() != NONE) {
+ m_timeUpdateTimer.startRepeating(cTimeUpdateRepeatDelay);
+ }
+
+ if (m_panel) {
+ // update() might alter the opacity of the element, especially if we are in the middle
+ // of an animation. This is the only element concerned as we animate only this element.
+ float opacityBeforeChangingStyle = m_panel->renderer() ? m_panel->renderer()->style()->opacity() : 0;
+ m_panel->update();
+ changeOpacity(m_panel.get(), opacityBeforeChangingStyle);
+ }
+ if (m_muteButton)
+ m_muteButton->update();
+ if (m_playButton)
+ m_playButton->update();
+ if (m_timelineContainer)
+ m_timelineContainer->update();
+ if (m_volumeSliderContainer)
+ m_volumeSliderContainer->update();
+ if (m_timeline)
+ m_timeline->update();
+ if (m_currentTimeDisplay)
+ m_currentTimeDisplay->update();
+ if (m_timeRemainingDisplay)
+ m_timeRemainingDisplay->update();
+ if (m_seekBackButton)
+ m_seekBackButton->update();
+ if (m_seekForwardButton)
+ m_seekForwardButton->update();
+ if (m_rewindButton)
+ m_rewindButton->update();
+ if (m_returnToRealtimeButton)
+ m_returnToRealtimeButton->update();
+ if (m_toggleClosedCaptionsButton)
+ m_toggleClosedCaptionsButton->update();
+ if (m_statusDisplay)
+ m_statusDisplay->update();
+ if (m_fullscreenButton)
+ m_fullscreenButton->update();
+ if (m_volumeSlider)
+ m_volumeSlider->update();
+ if (m_volumeSliderMuteButton)
+ m_volumeSliderMuteButton->update();
+
+ updateTimeDisplay();
+ updateControlVisibility();
+}
+
+void MediaControls::createControlsShadowRoot()
+{
+ ASSERT(!m_controlsShadowRoot);
+ m_controlsShadowRoot = MediaControlShadowRootElement::create(m_mediaElement);
+ m_mediaElement->renderer()->addChild(m_controlsShadowRoot->renderer());
+}
+
+void MediaControls::createPanel()
+{
+ ASSERT(!m_panel);
+ m_panel = MediaControlPanelElement::create(m_mediaElement);
+ m_panel->attachToParent(m_controlsShadowRoot.get());
+}
+
+void MediaControls::createMuteButton()
+{
+ ASSERT(!m_muteButton);
+ m_muteButton = MediaControlMuteButtonElement::create(m_mediaElement);
+ m_muteButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createPlayButton()
+{
+ ASSERT(!m_playButton);
+ m_playButton = MediaControlPlayButtonElement::create(m_mediaElement);
+ m_playButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createSeekBackButton()
+{
+ ASSERT(!m_seekBackButton);
+ m_seekBackButton = MediaControlSeekBackButtonElement::create(m_mediaElement);
+ m_seekBackButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createSeekForwardButton()
+{
+ ASSERT(!m_seekForwardButton);
+ m_seekForwardButton = MediaControlSeekForwardButtonElement::create(m_mediaElement);
+ m_seekForwardButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createRewindButton()
+{
+ ASSERT(!m_rewindButton);
+ m_rewindButton = MediaControlRewindButtonElement::create(m_mediaElement);
+ m_rewindButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createReturnToRealtimeButton()
+{
+ ASSERT(!m_returnToRealtimeButton);
+ m_returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create(m_mediaElement);
+ m_returnToRealtimeButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createToggleClosedCaptionsButton()
+{
+ ASSERT(!m_toggleClosedCaptionsButton);
+ m_toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(m_mediaElement);
+ m_toggleClosedCaptionsButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::createStatusDisplay()
+{
+ ASSERT(!m_statusDisplay);
+ m_statusDisplay = MediaControlStatusDisplayElement::create(m_mediaElement);
+ m_statusDisplay->attachToParent(m_panel.get());
+}
+
+void MediaControls::createTimelineContainer()
+{
+ ASSERT(!m_timelineContainer);
+ m_timelineContainer = MediaControlTimelineContainerElement::create(m_mediaElement);
+ m_timelineContainer->attachToParent(m_panel.get());
+}
+
+void MediaControls::createTimeline()
+{
+ ASSERT(!m_timeline);
+ m_timeline = MediaControlTimelineElement::create(m_mediaElement);
+ m_timeline->setAttribute(precisionAttr, "float");
+ m_timeline->attachToParent(m_timelineContainer.get());
+}
+
+void MediaControls::createVolumeSliderContainer()
+{
+ ASSERT(!m_volumeSliderContainer);
+ m_volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(m_mediaElement);
+ m_volumeSliderContainer->attachToParent(m_panel.get());
+}
+
+void MediaControls::createVolumeSlider()
+{
+ ASSERT(!m_volumeSlider);
+ m_volumeSlider = MediaControlVolumeSliderElement::create(m_mediaElement);
+ m_volumeSlider->setAttribute(precisionAttr, "float");
+ m_volumeSlider->setAttribute(maxAttr, "1");
+ m_volumeSlider->setAttribute(valueAttr, String::number(m_mediaElement->volume()));
+ m_volumeSlider->attachToParent(m_volumeSliderContainer.get());
+}
+
+void MediaControls::createVolumeSliderMuteButton()
+{
+ ASSERT(!m_volumeSliderMuteButton);
+ m_volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(m_mediaElement);
+ m_volumeSliderMuteButton->attachToParent(m_volumeSliderContainer.get());
+}
+
+void MediaControls::createCurrentTimeDisplay()
+{
+ ASSERT(!m_currentTimeDisplay);
+ m_currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(m_mediaElement);
+ m_currentTimeDisplay->attachToParent(m_timelineContainer.get());
+}
+
+void MediaControls::createTimeRemainingDisplay()
+{
+ ASSERT(!m_timeRemainingDisplay);
+ m_timeRemainingDisplay = MediaControlTimeRemainingDisplayElement::create(m_mediaElement);
+ m_timeRemainingDisplay->attachToParent(m_timelineContainer.get());
+}
+
+void MediaControls::createFullscreenButton()
+{
+ ASSERT(!m_fullscreenButton);
+ m_fullscreenButton = MediaControlFullscreenButtonElement::create(m_mediaElement);
+ m_fullscreenButton->attachToParent(m_panel.get());
+}
+
+void MediaControls::timeUpdateTimerFired(Timer<MediaControls>*)
+{
+ if (m_timeline)
+ m_timeline->update(false);
+ updateTimeDisplay();
+}
+
+void MediaControls::updateTimeDisplay()
+{
+ ASSERT(m_mediaElement->renderer());
+
+ if (!m_currentTimeDisplay || !m_currentTimeDisplay->renderer() || m_currentTimeDisplay->renderer()->style()->display() == NONE || m_mediaElement->renderer()->style()->visibility() != VISIBLE)
+ return;
+
+ float now = m_mediaElement->currentTime();
+ float duration = m_mediaElement->duration();
+
+ // Allow the theme to format the time
+ ExceptionCode ec;
+ m_currentTimeDisplay->setInnerText(m_mediaElement->renderer()->theme()->formatMediaControlsCurrentTime(now, duration), ec);
+ m_currentTimeDisplay->setCurrentValue(now);
+ m_timeRemainingDisplay->setInnerText(m_mediaElement->renderer()->theme()->formatMediaControlsRemainingTime(now, duration), ec);
+ m_timeRemainingDisplay->setCurrentValue(now - duration);
+}
+
+RenderBox* MediaControls::renderBox()
+{
+ return m_controlsShadowRoot ? m_controlsShadowRoot->renderBox() : 0;
+}
+
+void MediaControls::updateControlVisibility()
+{
+ if (!m_panel || !m_panel->renderer())
+ return;
+
+ // Don't fade for audio controls.
+ HTMLMediaElement* media = m_mediaElement;
+ if (!media->hasVideo())
+ return;
+
+ ASSERT(media->renderer());
+
+ // Don't fade if the media element is not visible
+ if (media->renderer()->style()->visibility() != VISIBLE)
+ return;
+
+#if PLATFORM(ANDROID)
+ if (WTF::currentTime() - m_lastTouch > TOUCH_DELAY)
+ m_mouseOver = false;
+ else
+ m_mouseOver = true;
+#endif
+
+ bool shouldHideController = !m_mouseOver && !media->canPlay();
+
+ // Do fading manually, css animations don't work with shadow trees
+
+ float animateFrom = m_panel->renderer()->style()->opacity();
+ float animateTo = shouldHideController ? 0.0f : 1.0f;
+
+ if (animateFrom == animateTo)
+ return;
+
+ if (m_opacityAnimationTimer.isActive()) {
+ if (m_opacityAnimationTo == animateTo)
+ return;
+ m_opacityAnimationTimer.stop();
+ }
+
+ if (animateFrom < animateTo)
+ m_opacityAnimationDuration = m_panel->renderer()->theme()->mediaControlsFadeInDuration();
+ else
+ m_opacityAnimationDuration = m_panel->renderer()->theme()->mediaControlsFadeOutDuration();
+
+ m_opacityAnimationFrom = animateFrom;
+ m_opacityAnimationTo = animateTo;
+
+ m_opacityAnimationStartTime = currentTime();
+ m_opacityAnimationTimer.startRepeating(cOpacityAnimationRepeatDelay);
+}
+
+void MediaControls::changeOpacity(HTMLElement* e, float opacity)
+{
+ if (!e || !e->renderer() || !e->renderer()->style())
+ return;
+ RefPtr<RenderStyle> s = RenderStyle::clone(e->renderer()->style());
+ s->setOpacity(opacity);
+ // z-index can't be auto if opacity is used
+ s->setZIndex(0);
+ e->renderer()->setStyle(s.release());
+}
+
+void MediaControls::opacityAnimationTimerFired(Timer<MediaControls>*)
+{
+ double time = currentTime() - m_opacityAnimationStartTime;
+ if (time >= m_opacityAnimationDuration) {
+ time = m_opacityAnimationDuration;
+ m_opacityAnimationTimer.stop();
+ }
+ float opacity = narrowPrecisionToFloat(m_opacityAnimationFrom + (m_opacityAnimationTo - m_opacityAnimationFrom) * time / m_opacityAnimationDuration);
+ changeOpacity(m_panel.get(), opacity);
+}
+
+void MediaControls::updateVolumeSliderContainer(bool visible)
+{
+ if (!m_mediaElement->hasAudio() || !m_volumeSliderContainer || !m_volumeSlider)
+ return;
+
+ if (visible && !m_volumeSliderContainer->isVisible()) {
+ if (!m_muteButton || !m_muteButton->renderer() || !m_muteButton->renderBox())
+ return;
+
+ RefPtr<RenderStyle> s = m_volumeSliderContainer->styleForElement();
+ int height = s->height().isPercent() ? 0 : s->height().value();
+ int width = s->width().isPercent() ? 0 : s->width().value();
+ IntPoint offset = m_mediaElement->document()->page()->theme()->volumeSliderOffsetFromMuteButton(m_muteButton->renderer()->node(), IntSize(width, height));
+ int x = offset.x() + m_muteButton->renderBox()->offsetLeft();
+ int y = offset.y() + m_muteButton->renderBox()->offsetTop();
+
+ m_volumeSliderContainer->setPosition(x, y);
+ m_volumeSliderContainer->setVisible(true);
+ m_volumeSliderContainer->update();
+ m_volumeSlider->update();
+ } else if (!visible && m_volumeSliderContainer->isVisible()) {
+ m_volumeSliderContainer->setVisible(false);
+ m_volumeSliderContainer->updateStyle();
+ }
+}
+
+void MediaControls::forwardEvent(Event* event)
+{
+#if PLATFORM(ANDROID)
+ if (event->isMouseEvent())
+ updateLastTouch();
+#if ENABLE(TOUCH_EVENTS)
+ if (event->isTouchEvent())
+ updateLastTouch();
+#endif
+#endif
+
+ ASSERT(m_mediaElement->renderer());
+
+ if (event->isMouseEvent() && m_controlsShadowRoot) {
+ MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
+ IntPoint point(mouseEvent->absoluteLocation());
+
+ bool defaultHandled = false;
+ if (m_volumeSliderMuteButton && m_volumeSliderMuteButton->hitTest(point)) {
+ m_volumeSliderMuteButton->defaultEventHandler(event);
+ defaultHandled = event->defaultHandled();
+ }
+
+ bool showVolumeSlider = false;
+ if (!defaultHandled && m_muteButton && m_muteButton->hitTest(point)) {
+ m_muteButton->defaultEventHandler(event);
+ if (event->type() != eventNames().mouseoutEvent)
+ showVolumeSlider = true;
+ }
+
+ if (m_volumeSliderContainer && m_volumeSliderContainer->hitTest(point))
+ showVolumeSlider = true;
+
+ if (m_volumeSlider && m_volumeSlider->hitTest(point)) {
+ m_volumeSlider->defaultEventHandler(event);
+ showVolumeSlider = true;
+ }
+
+ updateVolumeSliderContainer(showVolumeSlider);
+
+ if (m_playButton && m_playButton->hitTest(point))
+ m_playButton->defaultEventHandler(event);
+
+ if (m_seekBackButton && m_seekBackButton->hitTest(point))
+ m_seekBackButton->defaultEventHandler(event);
+
+ if (m_seekForwardButton && m_seekForwardButton->hitTest(point))
+ m_seekForwardButton->defaultEventHandler(event);
+
+ if (m_rewindButton && m_rewindButton->hitTest(point))
+ m_rewindButton->defaultEventHandler(event);
+
+ if (m_returnToRealtimeButton && m_returnToRealtimeButton->hitTest(point))
+ m_returnToRealtimeButton->defaultEventHandler(event);
+
+ if (m_toggleClosedCaptionsButton && m_toggleClosedCaptionsButton->hitTest(point))
+ m_toggleClosedCaptionsButton->defaultEventHandler(event);
+
+ if (m_timeline && m_timeline->hitTest(point))
+ m_timeline->defaultEventHandler(event);
+
+ if (m_fullscreenButton && m_fullscreenButton->hitTest(point))
+ m_fullscreenButton->defaultEventHandler(event);
+
+ if (event->type() == eventNames().mouseoverEvent) {
+ m_mouseOver = true;
+ updateControlVisibility();
+ }
+ if (event->type() == eventNames().mouseoutEvent) {
+ // When the scrollbar thumb captures mouse events, we should treat the mouse as still being over our renderer if the new target is a descendant
+ Node* mouseOverNode = mouseEvent->relatedTarget() ? mouseEvent->relatedTarget()->toNode() : 0;
+ RenderObject* mouseOverRenderer = mouseOverNode ? mouseOverNode->renderer() : 0;
+ m_mouseOver = mouseOverRenderer && mouseOverRenderer->isDescendantOf(m_mediaElement->renderer());
+ updateControlVisibility();
+ }
+ }
+#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS)
+ // We want to process touch events landing on the timeline so that the user
+ // can drag the scrollbar thumb with their finger.
+ else if (event->isTouchEvent() && m_controlsShadowRoot) {
+ TouchEvent* touchEvent = static_cast<TouchEvent*>(event);
+ if (touchEvent->touches() && touchEvent->touches()->item(0)) {
+ IntPoint point;
+ point.setX(touchEvent->touches()->item(0)->pageX());
+ point.setY(touchEvent->touches()->item(0)->pageY());
+ if (m_timeline && m_timeline->hitTest(point))
+ m_timeline->defaultEventHandler(event);
+ }
+ }
+#endif
+}
+
+// We want the timeline slider to be at least 100 pixels wide.
+static const int minWidthToDisplayTimeDisplays = 16 + 16 + 45 + 100 + 45 + 16 + 1;
+
+void MediaControls::updateTimeDisplayVisibility()
+{
+ ASSERT(m_mediaElement->renderer());
+
+ if (!m_currentTimeDisplay && !m_timeRemainingDisplay)
+ return;
+
+ int width = m_mediaElement->renderBox()->width();
+ bool shouldShowTimeDisplays = width >= minWidthToDisplayTimeDisplays * m_mediaElement->renderer()->style()->effectiveZoom();
+
+ m_currentTimeDisplay->setVisible(shouldShowTimeDisplays);
+ m_timeRemainingDisplay->setVisible(shouldShowTimeDisplays);
+}
+
+#if PLATFORM(ANDROID)
+void MediaControls::updateLastTouch()
+{
+ m_lastTouch = WTF::currentTime();
+}
+#endif
+
+}
+
+#endif
diff --git a/Source/WebCore/html/shadow/MediaControls.h b/Source/WebCore/html/shadow/MediaControls.h
new file mode 100644
index 0000000..a4fbbd6
--- /dev/null
+++ b/Source/WebCore/html/shadow/MediaControls.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MediaControls_h
+#define MediaControls_h
+
+#if ENABLE(VIDEO)
+
+#include "Timer.h"
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+
+class HTMLElement;
+class HTMLInputElement;
+class HTMLMediaElement;
+class Event;
+class MediaControlMuteButtonElement;
+class MediaControlPlayButtonElement;
+class MediaControlSeekButtonElement;
+class MediaControlShadowRootElement;
+class MediaControlRewindButtonElement;
+class MediaControlReturnToRealtimeButtonElement;
+class MediaControlToggleClosedCaptionsButtonElement;
+class MediaControlTimelineElement;
+class MediaControlVolumeSliderElement;
+class MediaControlFullscreenButtonElement;
+class MediaControlTimeDisplayElement;
+class MediaControlStatusDisplayElement;
+class MediaControlTimelineContainerElement;
+class MediaControlVolumeSliderContainerElement;
+class MediaControlElement;
+class MediaPlayer;
+
+class RenderBox;
+class RenderMedia;
+
+class MediaControls {
+public:
+ MediaControls(HTMLMediaElement*);
+
+ void destroy();
+ void update();
+ void updateStyle();
+ void forwardEvent(Event*);
+ void updateTimeDisplay();
+ void updateTimeDisplayVisibility();
+
+ // FIXME: This is temporary to allow RenderMedia::layout tweak the position of controls.
+ // Once shadow DOM refactoring is complete, the tweaking will be in MediaControlsShadowRoot and this accessor will no longer be necessary.
+ RenderBox* renderBox();
+
+#if PLATFORM(ANDROID)
+ void updateLastTouch();
+#endif
+
+private:
+ void createControlsShadowRoot();
+ void destroyControlsShadowRoot();
+ void createPanel();
+ void createMuteButton();
+ void createPlayButton();
+ void createSeekBackButton();
+ void createSeekForwardButton();
+ void createRewindButton();
+ void createReturnToRealtimeButton();
+ void createToggleClosedCaptionsButton();
+ void createStatusDisplay();
+ void createTimelineContainer();
+ void createTimeline();
+ void createVolumeSliderContainer();
+ void createVolumeSlider();
+ void createVolumeSliderMuteButton();
+ void createCurrentTimeDisplay();
+ void createTimeRemainingDisplay();
+ void createFullscreenButton();
+
+ void timeUpdateTimerFired(Timer<MediaControls>*);
+
+ void updateControlVisibility();
+ void changeOpacity(HTMLElement*, float opacity);
+ void opacityAnimationTimerFired(Timer<MediaControls>*);
+
+ void updateVolumeSliderContainer(bool visible);
+
+private:
+ RefPtr<MediaControlShadowRootElement> m_controlsShadowRoot;
+ RefPtr<MediaControlElement> m_panel;
+ RefPtr<MediaControlMuteButtonElement> m_muteButton;
+ RefPtr<MediaControlPlayButtonElement> m_playButton;
+ RefPtr<MediaControlSeekButtonElement> m_seekBackButton;
+ RefPtr<MediaControlSeekButtonElement> m_seekForwardButton;
+ RefPtr<MediaControlRewindButtonElement> m_rewindButton;
+ RefPtr<MediaControlReturnToRealtimeButtonElement> m_returnToRealtimeButton;
+ RefPtr<MediaControlToggleClosedCaptionsButtonElement> m_toggleClosedCaptionsButton;
+ RefPtr<MediaControlTimelineElement> m_timeline;
+ RefPtr<MediaControlVolumeSliderElement> m_volumeSlider;
+ RefPtr<MediaControlMuteButtonElement> m_volumeSliderMuteButton;
+ RefPtr<MediaControlFullscreenButtonElement> m_fullscreenButton;
+ RefPtr<MediaControlTimelineContainerElement> m_timelineContainer;
+ RefPtr<MediaControlVolumeSliderContainerElement> m_volumeSliderContainer;
+ RefPtr<MediaControlTimeDisplayElement> m_currentTimeDisplay;
+ RefPtr<MediaControlTimeDisplayElement> m_timeRemainingDisplay;
+ RefPtr<MediaControlStatusDisplayElement> m_statusDisplay;
+
+ HTMLMediaElement* m_mediaElement;
+ Timer<MediaControls> m_timeUpdateTimer;
+ Timer<MediaControls> m_opacityAnimationTimer;
+
+ double m_opacityAnimationStartTime;
+ double m_opacityAnimationDuration;
+ float m_opacityAnimationFrom;
+ float m_opacityAnimationTo;
+
+ bool m_mouseOver;
+
+#if PLATFORM(ANDROID)
+ double m_lastTouch;
+#endif
+};
+
+
+}
+
+#endif
+#endif
diff --git a/Source/WebCore/html/shadow/ProgressBarValueElement.h b/Source/WebCore/html/shadow/ProgressBarValueElement.h
new file mode 100644
index 0000000..22f4e57
--- /dev/null
+++ b/Source/WebCore/html/shadow/ProgressBarValueElement.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ProgressBarValueElement_h
+#define ProgressBarValueElement_h
+
+#include "HTMLDivElement.h"
+#include "HTMLNames.h"
+#include "RenderProgress.h"
+#include <wtf/Forward.h>
+
+namespace WebCore {
+
+class ProgressBarValueElement : public HTMLDivElement {
+public:
+ ProgressBarValueElement(Document* document)
+ : HTMLDivElement(HTMLNames::divTag, document)
+ {
+ }
+
+ virtual const AtomicString& shadowPseudoId() const;
+ virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
+ static PassRefPtr<ProgressBarValueElement> create(Document*);
+
+};
+
+inline const AtomicString& ProgressBarValueElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, pseudId, ("-webkit-progress-bar-value"));
+ return pseudId;
+}
+
+inline RenderObject* ProgressBarValueElement::createRenderer(RenderArena* arena, RenderStyle*)
+{
+ return new (arena) RenderProgressBarValuePart(this);
+}
+
+inline PassRefPtr<ProgressBarValueElement> ProgressBarValueElement::create(Document* document)
+{
+ return adoptRef(new ProgressBarValueElement(document));
+}
+
+}
+
+#endif
diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp
index 758d3c7..2c049cb 100644
--- a/Source/WebCore/html/shadow/SliderThumbElement.cpp
+++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp
@@ -163,6 +163,8 @@ void SliderThumbElement::stopDragging()
frame->page()->mainFrame()->eventHandler()->setCapturingTouchEventsNode(0);
#endif
m_inDragMode = false;
+ if (renderer())
+ renderer()->setNeedsLayout(true);
}
void SliderThumbElement::defaultEventHandler(Event* event)
@@ -246,5 +248,11 @@ void SliderThumbElement::detach()
HTMLDivElement::detach();
}
+const AtomicString& SliderThumbElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb"));
+ return sliderThumb;
+}
+
}
diff --git a/Source/WebCore/html/shadow/SliderThumbElement.h b/Source/WebCore/html/shadow/SliderThumbElement.h
index 1f1c869..7c4c179 100644
--- a/Source/WebCore/html/shadow/SliderThumbElement.h
+++ b/Source/WebCore/html/shadow/SliderThumbElement.h
@@ -53,7 +53,7 @@ public:
void dragFrom(const IntPoint&);
virtual void defaultEventHandler(Event*);
virtual void detach();
- virtual AtomicString shadowPseudoId() const;
+ virtual const AtomicString& shadowPseudoId() const;
private:
SliderThumbElement(Document*);
@@ -77,12 +77,6 @@ inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document* docum
return adoptRef(new SliderThumbElement(document));
}
-inline AtomicString SliderThumbElement::shadowPseudoId() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb"));
- return sliderThumb;
-}
-
inline SliderThumbElement* toSliderThumbElement(Node* node)
{
ASSERT(!node || node->isHTMLElement());
diff --git a/Source/WebCore/inspector/CodeGeneratorInspector.pm b/Source/WebCore/inspector/CodeGeneratorInspector.pm
index e215a91..e4e19b0 100644
--- a/Source/WebCore/inspector/CodeGeneratorInspector.pm
+++ b/Source/WebCore/inspector/CodeGeneratorInspector.pm
@@ -60,7 +60,7 @@ $typeTransform{"InjectedScript"} = {
"domainAccessor" => "m_inspectorAgent->injectedScriptAgent()",
};
$typeTransform{"Inspector"} = {
- "forwardHeader" => "InspectorController.h", # FIXME: Temporary solution until extracting the real InspectorAgent from InspectorController.
+ "forwardHeader" => "InspectorAgent.h",
"domainAccessor" => "m_inspectorAgent",
};
$typeTransform{"Network"} = {
@@ -205,18 +205,20 @@ my $namespace;
my $backendClassName;
my $backendJSStubName;
my %backendTypes;
-my %backendMethods;
+my @backendMethods;
my @backendMethodsImpl;
+my %backendMethodSignatures;
my $backendConstructor;
my @backendConstantDeclarations;
my @backendConstantDefinitions;
my $backendFooter;
-my @backendStubJS;
+my @backendJSStubs;
my $frontendClassName;
my %frontendTypes;
-my %frontendMethods;
+my @frontendMethods;
my @frontendMethodsImpl;
+my %frontendMethodSignatures;
my $frontendConstructor;
my @frontendConstantDeclarations;
my @frontendConstantDefinitions;
@@ -259,17 +261,16 @@ sub GenerateInterface
my $className = $interface->name;
- $frontendClassName = $className . "Frontend";
+ $frontendClassName = "InspectorFrontend";
$frontendConstructor = " ${frontendClassName}(InspectorClient* inspectorClient) : m_inspectorClient(inspectorClient) { }";
- $frontendFooter = " InspectorClient* m_inspectorClient;";
+ $frontendFooter = " private:\n InspectorClient* m_inspectorClient;";
$frontendTypes{"String"} = 1;
$frontendTypes{"InspectorClient"} = 1;
$frontendTypes{"PassRefPtr"} = 1;
- $backendClassName = $className . "BackendDispatcher";
- $backendJSStubName = $className . "BackendStub";
+ $backendClassName = "InspectorBackendDispatcher";
+ $backendJSStubName = "InspectorBackendStub";
my @backendHead;
- push(@backendHead, " typedef InspectorController InspectorAgent;"); # FIXME: Temporary substitution until extracting InspectorAgent from InspectorController.
push(@backendHead, " ${backendClassName}(InspectorAgent* inspectorAgent) : m_inspectorAgent(inspectorAgent) { }");
push(@backendHead, " void reportProtocolError(const long callId, const String& errorText) const;");
push(@backendHead, " void dispatch(const String& message);");
@@ -281,12 +282,7 @@ sub GenerateInterface
$backendTypes{"PassRefPtr"} = 1;
$backendTypes{"Object"} = 1;
- push(@backendMethodsImpl, generateBackendMessageParser());
generateFunctions($interface);
-
- # Make dispatcher methods private on the backend.
- push(@backendConstantDeclarations, "");
- push(@backendConstantDeclarations, "private:");
}
sub generateFunctions
@@ -295,55 +291,48 @@ sub generateFunctions
foreach my $function (@{$interface->functions}) {
if ($function->signature->extendedAttributes->{"notify"}) {
- generateFrontendFunction($function);
+ generateFrontendFunction($interface, $function);
} else {
- generateBackendFunction($function);
+ generateBackendFunction($interface, $function);
}
}
- push(@backendMethodsImpl, generateBackendDispatcher());
- push(@backendMethodsImpl, generateBackendReportProtocolError());
- foreach my $type (keys %backendTypes) {
- if ($typeTransform{$type}{"JSONType"}) {
- push(@backendMethodsImpl, generateArgumentGetters($type));
- }
- }
-
- @backendStubJS = generateBackendStubJS($interface);
+ collectBackendJSStubFunctions($interface);
}
sub generateFrontendFunction
{
+ my $interface = shift;
my $function = shift;
my $functionName = $function->signature->name;
- my $domain = $function->signature->extendedAttributes->{"domain"} || "Inspector";
+ my $domain = $interface->name;
my @argsFiltered = grep($_->direction eq "out", @{$function->parameters}); # just keep only out parameters for frontend interface.
map($frontendTypes{$_->type} = 1, @argsFiltered); # register required types.
my $arguments = join(", ", map($typeTransform{$_->type}->{"param"} . " " . $_->name, @argsFiltered)); # prepare arguments for function signature.
my $signature = " void ${functionName}(${arguments});";
- if (!$frontendMethods{${signature}}) {
- $frontendMethods{${signature}} = 1;
-
- my @function;
- push(@function, "void ${frontendClassName}::${functionName}(${arguments})");
- push(@function, "{");
- push(@function, " RefPtr<InspectorObject> ${functionName}Message = InspectorObject::create();");
- push(@function, " ${functionName}Message->setString(\"type\", \"event\");");
- push(@function, " ${functionName}Message->setString(\"domain\", \"$domain\");");
- push(@function, " ${functionName}Message->setString(\"event\", \"$functionName\");");
- push(@function, " RefPtr<InspectorObject> payloadDataObject = InspectorObject::create();");
- my @pushArguments = map(" payloadDataObject->set" . $typeTransform{$_->type}->{"JSONType"} . "(\"" . $_->name . "\", " . $_->name . ");", @argsFiltered);
- push(@function, @pushArguments);
- push(@function, " ${functionName}Message->setObject(\"data\", payloadDataObject);");
- push(@function, " m_inspectorClient->sendMessageToFrontend(${functionName}Message->toJSONString());");
-
- push(@function, "}");
- push(@function, "");
- push(@frontendMethodsImpl, @function);
- }
+ !$frontendMethodSignatures{${signature}} || die "Duplicate frontend function was detected for signature '$signature'.";
+ $frontendMethodSignatures{${signature}} = 1;
+ push(@frontendMethods, $signature);
+
+ my @function;
+ push(@function, "void ${frontendClassName}::${functionName}(${arguments})");
+ push(@function, "{");
+ push(@function, " RefPtr<InspectorObject> ${functionName}Message = InspectorObject::create();");
+ push(@function, " ${functionName}Message->setString(\"type\", \"event\");");
+ push(@function, " ${functionName}Message->setString(\"domain\", \"$domain\");");
+ push(@function, " ${functionName}Message->setString(\"event\", \"$functionName\");");
+ push(@function, " RefPtr<InspectorObject> payloadDataObject = InspectorObject::create();");
+ my @pushArguments = map(" payloadDataObject->set" . $typeTransform{$_->type}->{"JSONType"} . "(\"" . $_->name . "\", " . $_->name . ");", @argsFiltered);
+ push(@function, @pushArguments);
+ push(@function, " ${functionName}Message->setObject(\"data\", payloadDataObject);");
+ push(@function, " m_inspectorClient->sendMessageToFrontend(${functionName}Message->toJSONString());");
+
+ push(@function, "}");
+ push(@function, "");
+ push(@frontendMethodsImpl, @function);
}
sub camelCase
@@ -356,29 +345,32 @@ sub camelCase
sub generateBackendFunction
{
+ my $interface = shift;
my $function = shift;
my $functionName = $function->signature->name;
+ my $fullQualifiedFunctionName = $interface->name . "_" . $function->signature->name;
- push(@backendConstantDeclarations, " static const char* ${functionName}Cmd;");
- push(@backendConstantDefinitions, "const char* ${backendClassName}::${functionName}Cmd = \"${functionName}\";");
+ push(@backendConstantDeclarations, " static const char* ${fullQualifiedFunctionName}Cmd;");
+ push(@backendConstantDefinitions, "const char* ${backendClassName}::${fullQualifiedFunctionName}Cmd = \"${functionName}\";");
map($backendTypes{$_->type} = 1, @{$function->parameters}); # register required types
my @inArgs = grep($_->direction eq "in" && !($_->name eq "callId") , @{$function->parameters});
my @outArgs = grep($_->direction eq "out", @{$function->parameters});
- my $signature = " void ${functionName}(long callId, InspectorObject* requestMessageObject);";
- !$backendMethods{${signature}} || die "Duplicate function was detected for signature '$signature'.";
- $backendMethods{${signature}} = $functionName;
+ my $signature = " void ${fullQualifiedFunctionName}(long callId, InspectorObject* requestMessageObject);";
+ !$backendMethodSignatures{${signature}} || die "Duplicate function was detected for signature '$signature'.";
+ $backendMethodSignatures{${signature}} = "$fullQualifiedFunctionName";
+ push(@backendMethods, ${signature});
my @function;
my $requestMessageObject = scalar(@inArgs) ? " requestMessageObject" : "";
- push(@function, "void ${backendClassName}::${functionName}(long callId, InspectorObject*$requestMessageObject)");
+ push(@function, "void ${backendClassName}::${fullQualifiedFunctionName}(long callId, InspectorObject*$requestMessageObject)");
push(@function, "{");
push(@function, " RefPtr<InspectorArray> protocolErrors = InspectorArray::create();");
push(@function, "");
- my $domain = $function->signature->extendedAttributes->{"domain"} || "Inspector";
+ my $domain = $interface->name;
my $domainAccessor = $typeTransform{$domain}->{"domainAccessor"};
$backendTypes{$domain} = 1;
push(@function, " if (!$domainAccessor)");
@@ -463,7 +455,7 @@ sub generateArgumentGetters
my $return = $typeTransform{$type}{"return"} ? $typeTransform{$type}{"return"} : $typeTransform{$type}{"param"};
my $typeString = camelCase($type);
- push(@backendConstantDeclarations, "$return get$typeString(InspectorObject* object, const String& name, InspectorArray* protocolErrors);");
+ push(@backendConstantDeclarations, " $return get$typeString(InspectorObject* object, const String& name, InspectorArray* protocolErrors);");
my $getterBody = << "EOF";
$return InspectorBackendDispatcher::get$typeString(InspectorObject* object, const String& name, InspectorArray* protocolErrors)
@@ -491,8 +483,7 @@ EOF
sub generateBackendDispatcher
{
my @body;
- my @methods = map($backendMethods{$_}, keys %backendMethods);
- my @mapEntries = map(" dispatchMap.add(${_}Cmd, &${backendClassName}::$_);", @methods);
+ my @mapEntries = map(" dispatchMap.add(${_}Cmd, &${backendClassName}::$_);", map ($backendMethodSignatures{$_}, @backendMethods));
my $mapEntries = join("\n", @mapEntries);
my $backendDispatcherBody = << "EOF";
@@ -573,30 +564,31 @@ bool ${backendClassName}::getCommandName(const String& message, String* result)
return commandValue->asString(result);
}
-
EOF
return split("\n", $messageParserBody);
}
-sub generateBackendStubJS
+sub collectBackendJSStubFunctions
{
my $interface = shift;
- my @backendFunctions = grep(!$_->signature->extendedAttributes->{"notify"}, @{$interface->functions});
- my @JSStubs;
+ my @functions = grep(!$_->signature->extendedAttributes->{"notify"}, @{$interface->functions});
+ my $domain = $interface->name;
- foreach my $function (@backendFunctions) {
+ foreach my $function (@functions) {
my $name = $function->signature->name;
- my $domain = $function->signature->extendedAttributes->{"domain"};
my $argumentNames = join(",", map("\"" . $_->name . "\": \"" . $typeTransform{$_->type}->{"JSType"} . "\"", grep($_->direction eq "in", @{$function->parameters})));
- push(@JSStubs, " this._registerDelegate('{" .
+ push(@backendJSStubs, " this._registerDelegate('{" .
"\"seq\": 0, " .
"\"domain\": \"$domain\", " .
"\"command\": \"$name\", " .
"\"arguments\": {$argumentNames}" .
"}');");
}
+}
- my $JSStubs = join("\n", @JSStubs);
+sub generateBackendStubJS
+{
+ my $JSStubs = join("\n", @backendJSStubs);
my $inspectorBackendStubJS = << "EOF";
$licenseTemplate
@@ -735,7 +727,7 @@ sub generateHeader
my $forwardHeaders = join("\n", sort(map("#include <" . $typeTransform{$_}->{"forwardHeader"} . ">", grep($typeTransform{$_}->{"forwardHeader"}, keys %{$types}))));
my $forwardDeclarations = join("\n", sort(map("class " . $typeTransform{$_}->{"forward"} . ";", grep($typeTransform{$_}->{"forward"}, keys %{$types}))));
my $constantDeclarations = join("\n", @{$constants});
- my $methodsDeclarations = join("\n", keys %{$methods});
+ my $methodsDeclarations = join("\n", @{$methods});
my $headerBody = << "EOF";
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
@@ -757,7 +749,6 @@ $constructor
$constantDeclarations
$methodsDeclarations
-private:
$footer
};
@@ -792,7 +783,7 @@ sub generateSource
push(@sourceContent, "");
push(@sourceContent, "namespace $namespace {");
push(@sourceContent, "");
- push (@sourceContent, join("\n", @{$constants}));
+ push(@sourceContent, join("\n", @{$constants}));
push(@sourceContent, "");
push(@sourceContent, @{$methods});
push(@sourceContent, "");
@@ -807,28 +798,46 @@ sub finish
{
my $object = shift;
+ push(@backendMethodsImpl, generateBackendDispatcher());
+ push(@backendMethodsImpl, generateBackendReportProtocolError());
+
open(my $SOURCE, ">$outputDir/$frontendClassName.cpp") || die "Couldn't open file $outputDir/$frontendClassName.cpp";
print $SOURCE join("\n", generateSource($frontendClassName, \%frontendTypes, \@frontendConstantDefinitions, \@frontendMethodsImpl));
close($SOURCE);
undef($SOURCE);
open(my $HEADER, ">$outputHeadersDir/$frontendClassName.h") || die "Couldn't open file $outputHeadersDir/$frontendClassName.h";
- print $HEADER generateHeader($frontendClassName, \%frontendTypes, $frontendConstructor, \@frontendConstantDeclarations, \%frontendMethods, $frontendFooter);
+ print $HEADER generateHeader($frontendClassName, \%frontendTypes, $frontendConstructor, \@frontendConstantDeclarations, \@frontendMethods, $frontendFooter);
close($HEADER);
undef($HEADER);
+ # Make dispatcher methods private on the backend.
+ push(@backendConstantDeclarations, "");
+ push(@backendConstantDeclarations, "private:");
+
+ foreach my $type (keys %backendTypes) {
+ if ($typeTransform{$type}{"JSONType"}) {
+ push(@backendMethodsImpl, generateArgumentGetters($type));
+ }
+ }
+
+ push(@backendMethodsImpl, generateBackendMessageParser());
+ push(@backendMethodsImpl, "");
+
+ push(@backendConstantDeclarations, "");
+
open($SOURCE, ">$outputDir/$backendClassName.cpp") || die "Couldn't open file $outputDir/$backendClassName.cpp";
print $SOURCE join("\n", generateSource($backendClassName, \%backendTypes, \@backendConstantDefinitions, \@backendMethodsImpl));
close($SOURCE);
undef($SOURCE);
open($HEADER, ">$outputHeadersDir/$backendClassName.h") || die "Couldn't open file $outputHeadersDir/$backendClassName.h";
- print $HEADER join("\n", generateHeader($backendClassName, \%backendTypes, $backendConstructor, \@backendConstantDeclarations, \%backendMethods, $backendFooter));
+ print $HEADER join("\n", generateHeader($backendClassName, \%backendTypes, $backendConstructor, \@backendConstantDeclarations, \@backendMethods, $backendFooter));
close($HEADER);
undef($HEADER);
open(my $JS_STUB, ">$outputDir/$backendJSStubName.js") || die "Couldn't open file $outputDir/$backendJSStubName.js";
- print $JS_STUB join("\n", @backendStubJS);
+ print $JS_STUB join("\n", generateBackendStubJS());
close($JS_STUB);
undef($JS_STUB);
}
diff --git a/Source/WebCore/inspector/InjectedScript.cpp b/Source/WebCore/inspector/InjectedScript.cpp
index 1969f34..9fd606b 100644
--- a/Source/WebCore/inspector/InjectedScript.cpp
+++ b/Source/WebCore/inspector/InjectedScript.cpp
@@ -44,20 +44,22 @@ InjectedScript::InjectedScript(ScriptObject injectedScriptObject)
{
}
-void InjectedScript::evaluate(const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result)
+void InjectedScript::evaluate(const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
ScriptFunctionCall function(m_injectedScriptObject, "evaluate");
function.appendArgument(expression);
function.appendArgument(objectGroup);
+ function.appendArgument(includeCommandLineAPI);
makeCall(function, result);
}
-void InjectedScript::evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result)
+void InjectedScript::evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
ScriptFunctionCall function(m_injectedScriptObject, "evaluateOnCallFrame");
function.appendArgument(callFrameId->toJSONString());
function.appendArgument(expression);
function.appendArgument(objectGroup);
+ function.appendArgument(includeCommandLineAPI);
makeCall(function, result);
}
@@ -69,20 +71,20 @@ void InjectedScript::evaluateOnSelf(const String& functionBody, PassRefPtr<Inspe
makeCall(function, result);
}
-void InjectedScript::getCompletions(const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result)
+void InjectedScript::getCompletions(const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
ScriptFunctionCall function(m_injectedScriptObject, "getCompletions");
function.appendArgument(expression);
- function.appendArgument(includeInspectorCommandLineAPI);
+ function.appendArgument(includeCommandLineAPI);
makeCall(function, result);
}
-void InjectedScript::getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result)
+void InjectedScript::getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
ScriptFunctionCall function(m_injectedScriptObject, "getCompletionsOnCallFrame");
function.appendArgument(callFrameId->toJSONString());
function.appendArgument(expression);
- function.appendArgument(includeInspectorCommandLineAPI);
+ function.appendArgument(includeCommandLineAPI);
makeCall(function, result);
}
diff --git a/Source/WebCore/inspector/InjectedScript.h b/Source/WebCore/inspector/InjectedScript.h
index 0a3f24b..0dd41ae 100644
--- a/Source/WebCore/inspector/InjectedScript.h
+++ b/Source/WebCore/inspector/InjectedScript.h
@@ -50,11 +50,11 @@ public:
bool hasNoValue() const { return m_injectedScriptObject.hasNoValue(); }
- void evaluate(const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result);
- void evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result);
+ void evaluate(const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
+ void evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
void evaluateOnSelf(const String& functionBody, PassRefPtr<InspectorArray> argumentsArray, RefPtr<InspectorValue>* result);
- void getCompletions(const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result);
- void getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result);
+ void getCompletions(const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
+ void getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
void getProperties(PassRefPtr<InspectorObject> objectId, bool ignoreHasOwnProperty, bool abbreviate, RefPtr<InspectorValue>* result);
void pushNodeToFrontend(PassRefPtr<InspectorObject> objectId, RefPtr<InspectorValue>* result);
void resolveNode(long nodeId, RefPtr<InspectorValue>* result);
diff --git a/Source/WebCore/inspector/InjectedScriptHost.cpp b/Source/WebCore/inspector/InjectedScriptHost.cpp
index d67adaf..fbb4dbf 100644
--- a/Source/WebCore/inspector/InjectedScriptHost.cpp
+++ b/Source/WebCore/inspector/InjectedScriptHost.cpp
@@ -39,9 +39,9 @@
#include "HTMLFrameOwnerElement.h"
#include "InjectedScript.h"
#include "InjectedScriptSource.h"
+#include "InspectorAgent.h"
#include "InspectorClient.h"
#include "InspectorConsoleAgent.h"
-#include "InspectorController.h"
#include "InspectorDOMAgent.h"
#include "InspectorDOMStorageAgent.h"
#include "InspectorDatabaseAgent.h"
@@ -69,8 +69,8 @@ using namespace std;
namespace WebCore {
-InjectedScriptHost::InjectedScriptHost(InspectorController* inspectorController)
- : m_inspectorController(inspectorController)
+InjectedScriptHost::InjectedScriptHost(InspectorAgent* inspectorAgent)
+ : m_inspectorAgent(inspectorAgent)
, m_nextInjectedScriptId(1)
, m_lastWorkerId(1 << 31) // Distinguish ids of fake workers from real ones, to minimize the chances they overlap.
{
@@ -89,8 +89,8 @@ void InjectedScriptHost::evaluateOnSelf(const String& functionBody, PassRefPtr<I
void InjectedScriptHost::clearConsoleMessages()
{
- if (m_inspectorController)
- m_inspectorController->consoleAgent()->clearConsoleMessages();
+ if (m_inspectorAgent)
+ m_inspectorAgent->consoleAgent()->clearConsoleMessages();
}
void InjectedScriptHost::copyText(const String& text)
@@ -130,23 +130,23 @@ long InjectedScriptHost::inspectedNode(unsigned long num)
#if ENABLE(DATABASE)
Database* InjectedScriptHost::databaseForId(long databaseId)
{
- if (m_inspectorController && m_inspectorController->databaseAgent())
- return m_inspectorController->databaseAgent()->databaseForId(databaseId);
+ if (m_inspectorAgent && m_inspectorAgent->databaseAgent())
+ return m_inspectorAgent->databaseAgent()->databaseForId(databaseId);
return 0;
}
void InjectedScriptHost::selectDatabase(Database* database)
{
- if (m_inspectorController && m_inspectorController->databaseAgent())
- m_inspectorController->databaseAgent()->selectDatabase(database);
+ if (m_inspectorAgent && m_inspectorAgent->databaseAgent())
+ m_inspectorAgent->databaseAgent()->selectDatabase(database);
}
#endif
#if ENABLE(DOM_STORAGE)
void InjectedScriptHost::selectDOMStorage(Storage* storage)
{
- if (m_inspectorController && m_inspectorController->domStorageAgent())
- m_inspectorController->domStorageAgent()->selectDOMStorage(storage);
+ if (m_inspectorAgent && m_inspectorAgent->domStorageAgent())
+ m_inspectorAgent->domStorageAgent()->selectDOMStorage(storage);
}
#endif
@@ -166,7 +166,7 @@ InjectedScript InjectedScriptHost::injectedScriptForObjectId(InspectorObject* ob
InjectedScript InjectedScriptHost::injectedScriptForMainFrame()
{
- return injectedScriptFor(mainWorldScriptState(m_inspectorController->inspectedPage()->mainFrame()));
+ return injectedScriptFor(mainWorldScriptState(m_inspectorAgent->inspectedPage()->mainFrame()));
}
void InjectedScriptHost::discardInjectedScripts()
@@ -192,16 +192,16 @@ void InjectedScriptHost::releaseWrapperObjectGroup(long injectedScriptId, const
InspectorDOMAgent* InjectedScriptHost::inspectorDOMAgent()
{
- if (!m_inspectorController)
+ if (!m_inspectorAgent)
return 0;
- return m_inspectorController->domAgent();
+ return m_inspectorAgent->domAgent();
}
InspectorFrontend* InjectedScriptHost::frontend()
{
- if (!m_inspectorController)
+ if (!m_inspectorAgent)
return 0;
- return m_inspectorController->frontend();
+ return m_inspectorAgent->frontend();
}
String InjectedScriptHost::injectedScriptSource()
@@ -223,14 +223,14 @@ long InjectedScriptHost::nextWorkerId()
void InjectedScriptHost::didCreateWorker(long id, const String& url, bool isSharedWorker)
{
- if (m_inspectorController)
- m_inspectorController->didCreateWorker(id, url, isSharedWorker);
+ if (m_inspectorAgent)
+ m_inspectorAgent->didCreateWorker(id, url, isSharedWorker);
}
void InjectedScriptHost::didDestroyWorker(long id)
{
- if (m_inspectorController)
- m_inspectorController->didDestroyWorker(id);
+ if (m_inspectorAgent)
+ m_inspectorAgent->didDestroyWorker(id);
}
#endif // ENABLE(WORKERS)
diff --git a/Source/WebCore/inspector/InjectedScriptHost.h b/Source/WebCore/inspector/InjectedScriptHost.h
index 108f118..f51f8da 100644
--- a/Source/WebCore/inspector/InjectedScriptHost.h
+++ b/Source/WebCore/inspector/InjectedScriptHost.h
@@ -31,7 +31,7 @@
#define InjectedScriptHost_h
#include "Console.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "PlatformString.h"
#include "ScriptState.h"
@@ -52,9 +52,9 @@ class Storage;
class InjectedScriptHost : public RefCounted<InjectedScriptHost>
{
public:
- static PassRefPtr<InjectedScriptHost> create(InspectorController* inspectorController)
+ static PassRefPtr<InjectedScriptHost> create(InspectorAgent* inspectorAgent)
{
- return adoptRef(new InjectedScriptHost(inspectorController));
+ return adoptRef(new InjectedScriptHost(inspectorAgent));
}
~InjectedScriptHost();
@@ -62,8 +62,8 @@ public:
// Part of the protocol.
void evaluateOnSelf(const String& functionBody, PassRefPtr<InspectorArray> argumentsArray, RefPtr<InspectorValue>* result);
- InspectorController* inspectorController() { return m_inspectorController; }
- void disconnectController() { m_inspectorController = 0; }
+ InspectorAgent* inspectorAgent() { return m_inspectorAgent; }
+ void disconnectController() { m_inspectorAgent = 0; }
void clearConsoleMessages();
@@ -96,14 +96,14 @@ public:
static bool canAccessInspectedWindow(ScriptState*);
private:
- InjectedScriptHost(InspectorController* inspectorController);
+ InjectedScriptHost(InspectorAgent*);
InspectorDOMAgent* inspectorDOMAgent();
InspectorFrontend* frontend();
String injectedScriptSource();
ScriptObject createInjectedScript(const String& source, ScriptState* scriptState, long id);
void discardInjectedScript(ScriptState*);
- InspectorController* m_inspectorController;
+ InspectorAgent* m_inspectorAgent;
long m_nextInjectedScriptId;
long m_lastWorkerId;
typedef HashMap<long, InjectedScript> IdToInjectedScriptMap;
diff --git a/Source/WebCore/inspector/InjectedScriptSource.js b/Source/WebCore/inspector/InjectedScriptSource.js
index 3aa24a6..c88e8e4 100644
--- a/Source/WebCore/inspector/InjectedScriptSource.js
+++ b/Source/WebCore/inspector/InjectedScriptSource.js
@@ -28,6 +28,20 @@
(function (InjectedScriptHost, inspectedWindow, injectedScriptId) {
+function bind(thisObject, memberFunction)
+{
+ var func = memberFunction;
+ var args = Array.prototype.slice.call(arguments, 2);
+ function bound()
+ {
+ return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments, 0)));
+ }
+ bound.toString = function() {
+ return "bound: " + func;
+ };
+ return bound;
+}
+
var InjectedScript = function()
{
this._lastBoundObjectId = 1;
@@ -186,27 +200,27 @@ InjectedScript.prototype = {
return Object.keys(propertyNameSet);
},
- getCompletions: function(expression, includeInspectorCommandLineAPI)
+ getCompletions: function(expression, includeCommandLineAPI)
{
var props = {};
try {
if (!expression)
expression = "this";
- var expressionResult = this._evaluateOn(inspectedWindow.eval, inspectedWindow, expression, false);
+ var expressionResult = this._evaluateOn(inspectedWindow.eval, inspectedWindow, expression, false, false);
if (typeof expressionResult === "object")
this._populatePropertyNames(expressionResult, props);
-
- if (includeInspectorCommandLineAPI) {
- for (var prop in this._commandLineAPI)
- props[prop] = true;
+
+ if (includeCommandLineAPI) {
+ for (var prop in CommandLineAPI.members_)
+ props[CommandLineAPI.members_[prop]] = true;
}
} catch(e) {
}
return props;
},
- getCompletionsOnCallFrame: function(callFrameId, expression, includeInspectorCommandLineAPI)
+ getCompletionsOnCallFrame: function(callFrameId, expression, includeCommandLineAPI)
{
var props = {};
try {
@@ -215,7 +229,7 @@ InjectedScript.prototype = {
return props;
if (expression) {
- var expressionResult = this._evaluateOn(callFrame.evaluate, callFrame, expression, true);
+ var expressionResult = this._evaluateOn(callFrame.evaluate, callFrame, expression, true, false);
if (typeof expressionResult === "object")
this._populatePropertyNames(expressionResult, props);
} else {
@@ -225,49 +239,52 @@ InjectedScript.prototype = {
this._populatePropertyNames(scopeChain[i], props);
}
- if (includeInspectorCommandLineAPI) {
- for (var prop in this._commandLineAPI)
- props[prop] = true;
+ if (includeCommandLineAPI) {
+ for (var prop in CommandLineAPI.members_)
+ props[CommandLineAPI.members_[prop]] = true;
}
} catch(e) {
}
return props;
},
- evaluate: function(expression, objectGroup)
+ evaluate: function(expression, objectGroup, injectCommandLineAPI)
{
- return this._evaluateAndWrap(inspectedWindow.eval, inspectedWindow, expression, objectGroup, false);
+ return this._evaluateAndWrap(inspectedWindow.eval, inspectedWindow, expression, objectGroup, false, injectCommandLineAPI);
},
- _evaluateAndWrap: function(evalFunction, object, expression, objectGroup, isEvalOnCallFrame)
+ _evaluateAndWrap: function(evalFunction, object, expression, objectGroup, isEvalOnCallFrame, injectCommandLineAPI)
{
try {
- return this._wrapObject(this._evaluateOn(evalFunction, object, expression, isEvalOnCallFrame), objectGroup);
+ return this._wrapObject(this._evaluateOn(evalFunction, object, expression, isEvalOnCallFrame, injectCommandLineAPI), objectGroup);
} catch (e) {
return InjectedScript.RemoteObject.fromException(e);
}
},
- _evaluateOn: function(evalFunction, object, expression, isEvalOnCallFrame)
+ _evaluateOn: function(evalFunction, object, expression, isEvalOnCallFrame, injectCommandLineAPI)
{
// Only install command line api object for the time of evaluation.
// Surround the expression in with statements to inject our command line API so that
// the window object properties still take more precedent than our API functions.
- inspectedWindow.console._commandLineAPI = this._commandLineAPI;
-
- // We don't want local variables to be shadowed by global ones when evaluating on CallFrame.
- if (!isEvalOnCallFrame)
- expression = "with (window) {\n" + expression + "\n} ";
- expression = "with (window ? window.console._commandLineAPI : {}) {\n" + expression + "\n}";
- var value = evalFunction.call(object, expression);
-
- delete inspectedWindow.console._commandLineAPI;
-
- // When evaluating on call frame error is not thrown, but returned as a value.
- if (this._type(value) === "error")
- throw value.toString();
-
- return value;
+
+ try {
+ if (injectCommandLineAPI && inspectedWindow.console) {
+ inspectedWindow.console._commandLineAPI = new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? object : null);
+ expression = "with ((window && window.console && window.console._commandLineAPI) || {}) {\n" + expression + "\n}";
+ }
+
+ var value = evalFunction.call(object, expression);
+
+ // When evaluating on call frame error is not thrown, but returned as a value.
+ if (this._type(value) === "error")
+ throw value.toString();
+
+ return value;
+ } finally {
+ if (injectCommandLineAPI && inspectedWindow.console)
+ delete inspectedWindow.console._commandLineAPI;
+ }
},
getNodeId: function(node)
@@ -291,12 +308,12 @@ InjectedScript.prototype = {
return result;
},
- evaluateOnCallFrame: function(callFrameId, code, objectGroup)
+ evaluateOnCallFrame: function(callFrameId, expression, objectGroup, injectCommandLineAPI)
{
var callFrame = this._callFrameForId(callFrameId);
if (!callFrame)
return false;
- return this._evaluateAndWrap(callFrame.evaluate, callFrame, code, objectGroup, true);
+ return this._evaluateAndWrap(callFrame.evaluate, callFrame, expression, objectGroup, true, injectCommandLineAPI);
},
_callFrameForId: function(callFrameId)
@@ -471,49 +488,6 @@ InjectedScript.prototype = {
{
// We don't use String(obj) because inspectedWindow.String is undefined if owning frame navigated to another page.
return "" + obj;
- },
-
- _logEvent: function(event)
- {
- console.log(event.type, event);
- },
-
- _normalizeEventTypes: function(types)
- {
- if (typeof types === "undefined")
- types = [ "mouse", "key", "load", "unload", "abort", "error", "select", "change", "submit", "reset", "focus", "blur", "resize", "scroll" ];
- else if (typeof types === "string")
- types = [ types ];
-
- var result = [];
- for (var i = 0; i < types.length; i++) {
- if (types[i] === "mouse")
- result.splice(0, 0, "mousedown", "mouseup", "click", "dblclick", "mousemove", "mouseover", "mouseout");
- else if (types[i] === "key")
- result.splice(0, 0, "keydown", "keyup", "keypress");
- else
- result.push(types[i]);
- }
- return result;
- },
-
- _inspectedNode: function(num)
- {
- var nodeId = InjectedScriptHost.inspectedNode(num);
- return this._nodeForId(nodeId);
- },
-
- _bindToScript: function(func)
- {
- var args = Array.prototype.slice.call(arguments, 1);
- function bound()
- {
- return func.apply(injectedScript, args.concat(Array.prototype.slice.call(arguments)));
- }
- bound.toString = function() {
- return "bound: " + func;
- };
- return bound;
}
}
@@ -602,15 +576,48 @@ InjectedScript.CallFrameProxy.prototype = {
}
}
-function CommandLineAPI()
+function CommandLineAPI(commandLineAPIImpl, callFrame)
+{
+ function inScopeVariables(member)
+ {
+ if (!callFrame)
+ return false;
+
+ var scopeChain = callFrame.scopeChain;
+ for (var i = 0; i < scopeChain.length; ++i) {
+ if (member in scopeChain[i])
+ return true;
+ }
+ return false;
+ }
+
+ for (var i = 0; i < CommandLineAPI.members_.length; ++i) {
+ var member = CommandLineAPI.members_[i];
+ if (member in inspectedWindow || inScopeVariables(member))
+ continue;
+
+ this[member] = bind(commandLineAPIImpl, commandLineAPIImpl[member]);
+ }
+
+ for (var i = 0; i < 5; ++i) {
+ var member = "$" + i;
+ if (member in inspectedWindow || inScopeVariables(member))
+ continue;
+
+ this.__defineGetter__("$" + i, bind(commandLineAPIImpl, commandLineAPIImpl._inspectedNode, i));
+ }
+}
+
+CommandLineAPI.members_ = [
+ "$", "$$", "$x", "dir", "dirxml", "keys", "values", "profile", "profileEnd",
+ "monitorEvents", "unmonitorEvents", "inspect", "copy", "clear"
+];
+
+function CommandLineAPIImpl()
{
- for (var i = 0; i < 5; ++i)
- this.__defineGetter__("$" + i, injectedScript._bindToScript(injectedScript._inspectedNode, i));
}
-CommandLineAPI.prototype = {
- // Only add API functions here, private stuff should go to
- // InjectedScript so that it is not suggested by the completion.
+CommandLineAPIImpl.prototype = {
$: function()
{
return document.getElementById.apply(document, arguments)
@@ -625,8 +632,8 @@ CommandLineAPI.prototype = {
{
var nodes = [];
try {
- var doc = context || document;
- var results = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null);
+ var doc = (context && context.ownerDocument) || inspectedWindow.document;
+ var results = doc.evaluate(xpath, context || doc, null, XPathResult.ANY_TYPE, null);
var node;
while (node = results.iterateNext())
nodes.push(node);
@@ -672,10 +679,10 @@ CommandLineAPI.prototype = {
{
if (!object || !object.addEventListener || !object.removeEventListener)
return;
- types = injectedScript._normalizeEventTypes(types);
+ types = this._normalizeEventTypes(types);
for (var i = 0; i < types.length; ++i) {
- object.removeEventListener(types[i], injectedScript._logEvent, false);
- object.addEventListener(types[i], injectedScript._logEvent, false);
+ object.removeEventListener(types[i], this._logEvent, false);
+ object.addEventListener(types[i], this._logEvent, false);
}
},
@@ -683,9 +690,9 @@ CommandLineAPI.prototype = {
{
if (!object || !object.addEventListener || !object.removeEventListener)
return;
- types = injectedScript._normalizeEventTypes(types);
+ types = this._normalizeEventTypes(types);
for (var i = 0; i < types.length; ++i)
- object.removeEventListener(types[i], injectedScript._logEvent, false);
+ object.removeEventListener(types[i], this._logEvent, false);
},
inspect: function(object)
@@ -718,10 +725,39 @@ CommandLineAPI.prototype = {
clear: function()
{
InjectedScriptHost.clearConsoleMessages();
+ },
+
+ _inspectedNode: function(num)
+ {
+ var nodeId = InjectedScriptHost.inspectedNode(num);
+ return injectedScript._nodeForId(nodeId);
+ },
+
+ _normalizeEventTypes: function(types)
+ {
+ if (typeof types === "undefined")
+ types = [ "mouse", "key", "load", "unload", "abort", "error", "select", "change", "submit", "reset", "focus", "blur", "resize", "scroll" ];
+ else if (typeof types === "string")
+ types = [ types ];
+
+ var result = [];
+ for (var i = 0; i < types.length; i++) {
+ if (types[i] === "mouse")
+ result.splice(0, 0, "mousedown", "mouseup", "click", "dblclick", "mousemove", "mouseover", "mouseout");
+ else if (types[i] === "key")
+ result.splice(0, 0, "keydown", "keyup", "keypress");
+ else
+ result.push(types[i]);
+ }
+ return result;
+ },
+
+ _logEvent: function(event)
+ {
+ console.log(event.type, event);
}
}
-injectedScript._commandLineAPI = new CommandLineAPI();
+injectedScript._commandLineAPIImpl = new CommandLineAPIImpl();
return injectedScript;
})
-
diff --git a/Source/WebCore/inspector/Inspector.idl b/Source/WebCore/inspector/Inspector.idl
index 79b33f6..80c24db 100644
--- a/Source/WebCore/inspector/Inspector.idl
+++ b/Source/WebCore/inspector/Inspector.idl
@@ -31,286 +31,249 @@
module core {
interface [Conditional=INSPECTOR] Inspector {
+ void addScriptToEvaluateOnLoad(in String scriptSource);
+ void removeAllScriptsToEvaluateOnLoad();
+ void reloadPage(in boolean ignoreCache);
+ void populateScriptObjects();
+
+ void openInInspectedWindow(in String url);
+ void setSearchingForNode(in boolean enabled, out boolean newState);
+ [notify] void frontendReused();
+ [notify] void addNodesToSearchResult(out Array nodeIds);
+ [notify] void bringToFront();
+ [notify] void disconnectFromBackend();
+ [notify] void inspectedURLChanged(out String url);
+ [notify] void domContentEventFired(out double time);
+ [notify] void loadEventFired(out double time);
+ [notify] void reset();
+ [notify] void showPanel(out String panel);
+
+ [notify] void evaluateForTestInFrontend(out long testCallId, out String script);
+ void didEvaluateForTestInFrontend(in long testCallId, in String jsonResult);
+
+ void highlightDOMNode(in long nodeId);
+ void hideDOMNodeHighlight();
+ void highlightFrame(in unsigned long frameId);
+ void hideFrameHighlight();
+ [notify] void updateFocusedNode(out long nodeId);
+
+ void setUserAgentOverride(in String userAgent);
+
+ void getCookies(out Array cookies, out String cookiesString);
+ void deleteCookie(in String cookieName, in String domain);
+
+ // FIXME: dispatch on agents.
+ void startTimelineProfiler();
+ void stopTimelineProfiler();
- ///////////////////////////////////////////////////////////////////////
- // generic Inspector's methods
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Inspector] void addScriptToEvaluateOnLoad(in String scriptSource);
- [domain=Inspector] void removeAllScriptsToEvaluateOnLoad();
- [domain=Inspector] void reloadPage();
- [domain=Inspector] void populateScriptObjects();
-
- [domain=Inspector] void openInInspectedWindow(in String url);
- [domain=Inspector] void setSearchingForNode(in boolean enabled, out boolean newState);
- [notify, domain=Inspector] void frontendReused();
- [notify, domain=Inspector] void addNodesToSearchResult(out Array nodeIds);
- [notify, domain=Inspector] void bringToFront();
- [notify, domain=Inspector] void disconnectFromBackend();
- [notify, domain=Inspector] void inspectedURLChanged(out String url);
- [notify, domain=Inspector] void domContentEventFired(out double time);
- [notify, domain=Inspector] void loadEventFired(out double time);
- [notify, domain=Inspector] void reset();
- [notify, domain=Inspector] void showPanel(out String panel);
-
- [notify, domain=Inspector] void evaluateForTestInFrontend(out long testCallId, out String script);
- [domain=Inspector] void didEvaluateForTestInFrontend(in long testCallId, in String jsonResult);
-
- [domain=Inspector] void highlightDOMNode(in long nodeId);
- [domain=Inspector] void hideDOMNodeHighlight();
- [domain=Inspector] void highlightFrame(in unsigned long frameId);
- [domain=Inspector] void hideFrameHighlight();
- [notify, domain=Inspector] void updateFocusedNode(out long nodeId);
-
- [domain=Inspector] void setExtraHeaders(in Object headers);
-
- [domain=Inspector] void getCookies(out Array cookies, out String cookiesString);
- [domain=Inspector] void deleteCookie(in String cookieName, in String domain);
-
- ///////////////////////////////////////////////////////////////////////
- // Runtime
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Runtime] void evaluate(in String expression, in String objectGroup, out Value result);
- [domain=Runtime] void getCompletions(in String expression, in boolean includeInspectorCommandLineAPI, out Value result);
- [domain=Runtime] void getProperties(in Object objectId, in boolean ignoreHasOwnProperty, in boolean abbreviate, out Value result);
- [domain=Runtime] void setPropertyValue(in Object objectId, in String propertyName, in String expression, out Value result);
- [domain=Runtime] void releaseWrapperObjectGroup(in long injectedScriptId, in String objectGroup);
-
- ///////////////////////////////////////////////////////////////////////
- // Injected Script
- ///////////////////////////////////////////////////////////////////////
-
- [domain=InjectedScript] void evaluateOnSelf(in String functionBody, in Array argumentsArray, out Value result);
-
- ///////////////////////////////////////////////////////////////////////
- // Console API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Console] void setConsoleMessagesEnabled(in boolean enabled, out boolean newState);
- [notify, domain=Console] void addConsoleMessage(out Object messageObj);
- [notify, domain=Console] void updateConsoleMessageExpiredCount(out unsigned long count);
- [notify, domain=Console] void updateConsoleMessageRepeatCount(out unsigned long count);
- [domain=Console] void clearConsoleMessages();
- [notify, domain=Console] void consoleMessagesCleared();
- [domain=Console] void setMonitoringXHREnabled(in boolean enabled);
- [notify, domain=Console] void monitoringXHRStateChanged(out boolean enabled);
-
- ///////////////////////////////////////////////////////////////////////
- // Network API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Network] void cachedResources(out Object resources);
- [domain=Network] void resourceContent(in unsigned long frameId, in String url, in boolean base64Encode, out String content);
-
- [notify, domain=Network] void frameDetachedFromParent(out unsigned long frameId);
- [notify, domain=Network] void identifierForInitialRequest(out long identifier, out String url, out Object loader, out Value callStack);
- [notify, domain=Network] void willSendRequest(out long identifier, out double time, out Object request, out Object redirectResponse);
- [notify, domain=Network] void markResourceAsCached(out long identifier);
- [notify, domain=Network] void didReceiveResponse(out long identifier, out double time, out String resourceType, out Object response);
- [notify, domain=Network] void didReceiveContentLength(out long identifier, out double time, out long lengthReceived);
- [notify, domain=Network] void didFinishLoading(out long identifier, out double finishTime);
- [notify, domain=Network] void didFailLoading(out long identifier, out double time, out String localizedDescription);
- [notify, domain=Network] void didLoadResourceFromMemoryCache(out double time, out Object resource);
- [notify, domain=Network] void setInitialContent(out long identifier, out String sourceString, out String type);
- [notify, domain=Network] void didCommitLoadForFrame(out Object frame, out Object loader);
- [notify, domain=Network] void didCreateWebSocket(out unsigned long identifier, out String requestURL);
- [notify, domain=Network] void willSendWebSocketHandshakeRequest(out unsigned long identifier, out double time, out Object request);
- [notify, domain=Network] void didReceiveWebSocketHandshakeResponse(out unsigned long identifier, out double time, out Object response);
- [notify, domain=Network] void didCloseWebSocket(out unsigned long identifier, out double time);
+#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
+ void enableDebugger();
+ void disableDebugger();
+ void enableProfiler();
+ void disableProfiler();
+ void startProfiling();
+ void stopProfiling();
+#endif // ENABLE_JAVASCRIPT_DEBUGGER
+ };
-#if defined(ENABLE_DATABASE) && ENABLE_DATABASE
+ interface [Conditional=INSPECTOR] Runtime {
+ void evaluate(in String expression, in String objectGroup, in boolean includeCommandLineAPI, out Value result);
+ void getCompletions(in String expression, in boolean includeCommandLineAPI, out Value result);
+ void getProperties(in Object objectId, in boolean ignoreHasOwnProperty, in boolean abbreviate, out Value result);
+ void setPropertyValue(in Object objectId, in String propertyName, in String expression, out Value result);
+ void releaseWrapperObjectGroup(in long injectedScriptId, in String objectGroup);
+ };
- ///////////////////////////////////////////////////////////////////////
- // Database API
- ///////////////////////////////////////////////////////////////////////
+ interface [Conditional=INSPECTOR] InjectedScript {
+ void evaluateOnSelf(in String functionBody, in Array argumentsArray, out Value result);
+ };
- [domain=Database] void getDatabaseTableNames(in long databaseId, out Array tableNames);
- [domain=Database] void executeSQL(in long databaseId, in String query, out boolean success, out long transactionId);
+ interface [Conditional=INSPECTOR] Console {
+ void setConsoleMessagesEnabled(in boolean enabled, out boolean newState);
+ [notify] void addConsoleMessage(out Object messageObj);
+ [notify] void updateConsoleMessageExpiredCount(out unsigned long count);
+ [notify] void updateConsoleMessageRepeatCount(out unsigned long count);
+ void clearConsoleMessages();
+ [notify] void consoleMessagesCleared();
+ void setMonitoringXHREnabled(in boolean enabled);
+ };
- [notify, domain=Database] void addDatabase(out Object database);
- [notify, domain=Database] void selectDatabase(out int databaseId);
- [notify, domain=Database] void sqlTransactionSucceeded(out long transactionId, out Value columnNames, out Value values);
- [notify, domain=Database] void sqlTransactionFailed(out long transactionId, out Value sqlError);
+ interface [Conditional=INSPECTOR] Network {
+ void cachedResources(out Object resources);
+ void resourceContent(in unsigned long frameId, in String url, in boolean base64Encode, out boolean success, out String content);
+ void setExtraHeaders(in Object headers);
+
+ [notify] void frameDetachedFromParent(out unsigned long frameId);
+ [notify] void identifierForInitialRequest(out long identifier, out String url, out Object loader, out Value callStack);
+ [notify] void willSendRequest(out long identifier, out double time, out Object request, out Object redirectResponse);
+ [notify] void markResourceAsCached(out long identifier);
+ [notify] void didReceiveResponse(out long identifier, out double time, out String resourceType, out Object response);
+ [notify] void didReceiveContentLength(out long identifier, out double time, out long lengthReceived);
+ [notify] void didFinishLoading(out long identifier, out double finishTime);
+ [notify] void didFailLoading(out long identifier, out double time, out String localizedDescription);
+ [notify] void didLoadResourceFromMemoryCache(out double time, out Object resource);
+ [notify] void setInitialContent(out long identifier, out String sourceString, out String type);
+ [notify] void didCommitLoadForFrame(out Object frame, out Object loader);
+ [notify] void didCreateWebSocket(out unsigned long identifier, out String requestURL);
+ [notify] void willSendWebSocketHandshakeRequest(out unsigned long identifier, out double time, out Object request);
+ [notify] void didReceiveWebSocketHandshakeResponse(out unsigned long identifier, out double time, out Object response);
+ [notify] void didCloseWebSocket(out unsigned long identifier, out double time);
+ };
+
+#if defined(ENABLE_DATABASE) && ENABLE_DATABASE
+ interface [Conditional=INSPECTOR] Database {
+ void getDatabaseTableNames(in long databaseId, out Array tableNames);
+ void executeSQL(in long databaseId, in String query, out boolean success, out long transactionId);
+
+ [notify] void addDatabase(out Object database);
+ [notify] void selectDatabase(out int databaseId);
+ [notify] void sqlTransactionSucceeded(out long transactionId, out Value columnNames, out Value values);
+ [notify] void sqlTransactionFailed(out long transactionId, out Value sqlError);
+ };
#endif
#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
-
- ///////////////////////////////////////////////////////////////////////
- // DOM Storage API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=DOMStorage] void getDOMStorageEntries(in long storageId, out Array entries);
- [domain=DOMStorage] void setDOMStorageItem(in long storageId, in String key, in String value, out boolean success);
- [domain=DOMStorage] void removeDOMStorageItem(in long storageId, in String key, out boolean success);
- [notify, domain=DOMStorage] void addDOMStorage(out Object storage);
- [notify, domain=DOMStorage] void updateDOMStorage(out int storageId);
- [notify, domain=DOMStorage] void selectDOMStorage(out int storageId);
+ interface [Conditional=INSPECTOR] DOMStorage {
+ void getDOMStorageEntries(in long storageId, out Array entries);
+ void setDOMStorageItem(in long storageId, in String key, in String value, out boolean success);
+ void removeDOMStorageItem(in long storageId, in String key, out boolean success);
+ [notify] void addDOMStorage(out Object storage);
+ [notify] void updateDOMStorage(out int storageId);
+ [notify] void selectDOMStorage(out int storageId);
+ };
#endif
#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS) && ENABLE_OFFLINE_WEB_APPLICATIONS
-
- ///////////////////////////////////////////////////////////////////////
- // AppCache API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=ApplicationCache] void getApplicationCaches(out Value applicationCaches);
- [notify, domain=ApplicationCache] void updateApplicationCacheStatus(out int status);
- [notify, domain=ApplicationCache] void updateNetworkState(out boolean isNowOnline);
+ interface [Conditional=INSPECTOR] ApplicationCache {
+ void getApplicationCaches(out Value applicationCaches);
+ [notify] void updateApplicationCacheStatus(out int status);
+ [notify] void updateNetworkState(out boolean isNowOnline);
+ };
#endif
-#if defined(ENABLE_FILE_SYSTEM) && ENABLE_FILE_SYSTEM
-
- ///////////////////////////////////////////////////////////////////////
- // Filesystem API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=FileSystem] void getFileSystemPathAsync(in unsigned int type, in String origin);
- [domain=FileSystem] void revealFolderInOS(in String path);
+ interface [Conditional=INSPECTOR] DOM {
+ void getChildNodes(in long nodeId);
+ void setAttribute(in long elementId, in String name, in String value, out boolean success);
+ void removeAttribute(in long elementId, in String name, out boolean success);
+ void setTextNodeValue(in long nodeId, in String value, out boolean success);
+ void getEventListenersForNode(in long nodeId, out long outNodeId, out Array listenersArray);
+ void copyNode(in long nodeId);
+ void removeNode(in long nodeId, out long outNodeId);
+ void changeTagName(in long nodeId, in String newTagName, out long outNodeId);
+ void getOuterHTML(in long nodeId, out String outerHTML);
+ void setOuterHTML(in long nodeId, in String outerHTML, out long outNodeId);
+ void addInspectedNode(in long nodeId);
+ void performSearch(in String query, in boolean runSynchronously);
+ void searchCanceled();
+ void pushNodeByPathToFrontend(in String path, out long nodeId);
+ void resolveNode(in long nodeId, out Value result);
+ void getNodeProperties(in long nodeId, in Array propertiesArray, out Value result);
+ void getNodePrototypes(in long nodeId, out Value result);
+ void pushNodeToFrontend(in Object objectId, out Value result);
+
+ [notify] void setDocument(out Value root); // FIXME: should be requested from the front-end as getDocument.
+ [notify] void attributesUpdated(out long id, out Array attributes);
+ [notify] void characterDataModified(out long id, out String newValue);
+ [notify] void setChildNodes(out long parentId, out Array nodes);
+ [notify] void setDetachedRoot(out Object root);
+ [notify] void childNodeCountUpdated(out long id, out int newValue);
+ [notify] void childNodeInserted(out long parentId, out long prevId, out Object node);
+ [notify] void childNodeRemoved(out long parentId, out long id);
+ };
- [notify, domain=FileSystem] void didGetFileSystemPath(out String root, out int type, out String origin);
- [notify, domain=FileSystem] void didGetFileSystemError(out int type, out String origin);
- [notify, domain=FileSystem] void didGetFileSystemDisabled();
-#endif
+ interface [Conditional=INSPECTOR] CSS {
+ void getStylesForNode(in long nodeId, out Value styles);
+ void getComputedStyleForNode(in long nodeId, out Value style);
+ void getInlineStyleForNode(in long nodeId, out Value style);
+ void getAllStyles(out Array styleSheetIds);
+ void getStyleSheet(in String styleSheetId, out Value styleSheet);
+ void getStyleSheetText(in String styleSheetId, out String url, out String text);
+ void setStyleSheetText(in String styleSheetId, in String text, out boolean success);
+ void setPropertyText(in Object styleId, in long propertyIndex, in String text, in boolean overwrite, out Value style);
+ void toggleProperty(in Object styleId, in long propertyIndex, in boolean disable, out Value style);
+ void setRuleSelector(in Object ruleId, in String selector, out Value rule);
+ void addRule(in long contextNodeId, in String selector, out Value rule);
+ void getSupportedCSSProperties(out Array cssProperties);
+ void querySelectorAll(in long documentId, in String selector, out Array result);
+ };
- ///////////////////////////////////////////////////////////////////////
- // DOM API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=DOM] void getChildNodes(in long nodeId);
- [domain=DOM] void setAttribute(in long elementId, in String name, in String value, out boolean success);
- [domain=DOM] void removeAttribute(in long elementId, in String name, out boolean success);
- [domain=DOM] void setTextNodeValue(in long nodeId, in String value, out boolean success);
- [domain=DOM] void getEventListenersForNode(in long nodeId, out long outNodeId, out Array listenersArray);
- [domain=DOM] void copyNode(in long nodeId);
- [domain=DOM] void removeNode(in long nodeId, out long outNodeId);
- [domain=DOM] void changeTagName(in long nodeId, in String newTagName, out long outNodeId);
- [domain=DOM] void getOuterHTML(in long nodeId, out String outerHTML);
- [domain=DOM] void setOuterHTML(in long nodeId, in String outerHTML, out long outNodeId);
- [domain=DOM] void addInspectedNode(in long nodeId);
- [domain=DOM] void performSearch(in String query, in boolean runSynchronously);
- [domain=DOM] void searchCanceled();
- [domain=DOM] void pushNodeByPathToFrontend(in String path, out long nodeId);
- [domain=DOM] void resolveNode(in long nodeId, out Value result);
- [domain=DOM] void getNodeProperties(in long nodeId, in Array propertiesArray, out Value result);
- [domain=DOM] void getNodePrototypes(in long nodeId, out Value result);
- [domain=DOM] void pushNodeToFrontend(in Object objectId, out Value result);
-
- [notify, domain=DOM] void setDocument(out Value root); // FIXME: should be requested from the front-end as getDocument.
- [notify, domain=DOM] void attributesUpdated(out long id, out Array attributes);
- [notify, domain=DOM] void characterDataModified(out long id, out String newValue);
- [notify, domain=DOM] void setChildNodes(out long parentId, out Array nodes);
- [notify, domain=DOM] void setDetachedRoot(out Object root);
- [notify, domain=DOM] void childNodeCountUpdated(out long id, out int newValue);
- [notify, domain=DOM] void childNodeInserted(out long parentId, out long prevId, out Object node);
- [notify, domain=DOM] void childNodeRemoved(out long parentId, out long id);
-
- ///////////////////////////////////////////////////////////////////////
- // CSS API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=CSS] void getStylesForNode2(in long nodeId, out Value styles);
- [domain=CSS] void getComputedStyleForNode2(in long nodeId, out Value style);
- [domain=CSS] void getInlineStyleForNode2(in long nodeId, out Value style);
- [domain=CSS] void getAllStyles2(out Array styleSheetIds);
- [domain=CSS] void getStyleSheet2(in String styleSheetId, out Value styleSheet);
- [domain=CSS] void getStyleSheetText2(in String styleSheetId, out String url, out String text);
- [domain=CSS] void setStyleSheetText2(in String styleSheetId, in String text, out boolean success);
- [domain=CSS] void setPropertyText2(in Object styleId, in long propertyIndex, in String text, in boolean overwrite, out Value style);
- [domain=CSS] void toggleProperty2(in Object styleId, in long propertyIndex, in boolean disable, out Value style);
- [domain=CSS] void setRuleSelector2(in Object ruleId, in String selector, out Value rule);
- [domain=CSS] void addRule2(in long contextNodeId, in String selector, out Value rule);
- [domain=CSS] void getSupportedCSSProperties(out Array cssProperties);
- [domain=CSS] void querySelectorAll(in long documentId, in String selector, out Array result);
-
- ///////////////////////////////////////////////////////////////////////
- // Timeline API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Inspector] void startTimelineProfiler();
- [domain=Inspector] void stopTimelineProfiler();
- [notify, domain=Timeline] void timelineProfilerWasStarted();
- [notify, domain=Timeline] void timelineProfilerWasStopped();
- [notify, domain=Timeline] void addRecordToTimeline(out Object record);
+ interface [Conditional=INSPECTOR] Timeline {
+ [notify] void timelineProfilerWasStarted();
+ [notify] void timelineProfilerWasStopped();
+ [notify] void addRecordToTimeline(out Object record);
+ };
#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
+ interface [Conditional=INSPECTOR] Debugger {
+ [notify] void debuggerWasEnabled();
+ [notify] void debuggerWasDisabled();
- ///////////////////////////////////////////////////////////////////////
- // Debugger API
- ///////////////////////////////////////////////////////////////////////
-
- [domain=Inspector] void enableDebugger(in boolean always);
- [domain=Inspector] void disableDebugger(in boolean always);
-
- [domain=Inspector] void setAllBrowserBreakpoints(in Object breakpoints);
-
- [notify, domain=Debugger] void debuggerWasEnabled();
- [notify, domain=Debugger] void debuggerWasDisabled();
-
- [notify, domain=Debugger] void parsedScriptSource(out String sourceID, out String url, out int lineOffset, out int columnOffset, out int length, out int scriptWorldType);
- [notify, domain=Debugger] void failedToParseScriptSource(out String url, out String data, out int firstLine, out int errorLine, out String errorMessage);
-
- [domain=Debugger] void activateBreakpoints();
- [domain=Debugger] void deactivateBreakpoints();
-
- [domain=Debugger] void setBreakpoint(in String sourceID, in unsigned int lineNumber, in String condition, in boolean enabled, out String breakpointId, out unsigned int actualLineNumber);
- [domain=Debugger] void removeBreakpoint(in String breakpointId);
+ [notify] void parsedScriptSource(out String sourceID, out String url, out int lineOffset, out int columnOffset, out int length, out int scriptWorldType);
+ [notify] void failedToParseScriptSource(out String url, out String data, out int firstLine, out int errorLine, out String errorMessage);
- [domain=BrowserDebugger] void setDOMBreakpoint(in long nodeId, in long type);
- [domain=BrowserDebugger] void removeDOMBreakpoint(in long nodeId, in long type);
- [domain=BrowserDebugger] void setEventListenerBreakpoint(in String eventName);
- [domain=BrowserDebugger] void removeEventListenerBreakpoint(in String eventName);
- [domain=BrowserDebugger] void setXHRBreakpoint(in String url);
- [domain=BrowserDebugger] void removeXHRBreakpoint(in String url);
+ void activateBreakpoints();
+ void deactivateBreakpoints();
- [domain=Debugger] void stepOver();
- [domain=Debugger] void stepInto();
- [domain=Debugger] void stepOut();
- [domain=Debugger] void pause();
- [notify, domain=Debugger] void pausedScript(out Object details);
- [domain=Debugger] void resume();
- [notify, domain=Debugger] void resumedScript(); // FIXME: Make this out parameter of resume if possible.
+ void setJavaScriptBreakpoint(in String url, in int lineNumber, in int columnNumber, in String condition, in boolean enabled, out String breakpointId, out Array locations);
+ void setJavaScriptBreakpointBySourceId(in String sourceId, in int lineNumber, in int columnNumber, in String condition, in boolean enabled, out String breakpointId, out int actualLineNumber, out int actualColumnNumber);
+ void removeJavaScriptBreakpoint(in String breakpointId);
+ [notify] void breakpointResolved(out String breakpointId, out String sourceId, out int lineNumber, out int columnNumber);
+ void continueToLocation(in String sourceId, in int lineNumber, in int columnNumber);
- [domain=Debugger] void editScriptSource(in String sourceID, in String newContent, out boolean success, out String result, out Value newCallFrames);
- [domain=Debugger] void getScriptSource(in String sourceID, out String scriptSource);
+ void stepOver();
+ void stepInto();
+ void stepOut();
+ void pause();
+ [notify] void pausedScript(out Object details);
+ void resume();
+ [notify] void resumedScript(); // FIXME: Make this out parameter of resume if possible.
- [domain=Debugger] void setPauseOnExceptionsState(in long pauseOnExceptionsState, out long newState);
+ void editScriptSource(in String sourceID, in String newContent, out boolean success, out String result, out Value newCallFrames);
+ void getScriptSource(in String sourceID, out String scriptSource);
- [domain=Debugger] void evaluateOnCallFrame(in Object callFrameId, in String expression, in String objectGroup, out Value result);
- [domain=Debugger] void getCompletionsOnCallFrame(in Object callFrameId, in String expression, in boolean includeInspectorCommandLineAPI, out Value result);
+ void setPauseOnExceptionsState(in long pauseOnExceptionsState, out long newState);
- [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);
+ void evaluateOnCallFrame(in Object callFrameId, in String expression, in String objectGroup, in boolean includeCommandLineAPI, out Value result);
+ void getCompletionsOnCallFrame(in Object callFrameId, in String expression, in boolean includeCommandLineAPI, out Value result);
#if defined(ENABLE_WORKERS) && ENABLE_WORKERS
- [notify, domain=Debugger] void didCreateWorker(out long id, out String url, out boolean isShared);
- [notify, domain=Debugger] void didDestroyWorker(out long id);
+ [notify] void didCreateWorker(out long id, out String url, out boolean isShared);
+ [notify] void didDestroyWorker(out long id);
#endif // ENABLE_WORKERS
- ///////////////////////////////////////////////////////////////////////
- // Profiler API
- ///////////////////////////////////////////////////////////////////////
+ };
+#endif // ENABLE_JAVASCRIPT_DEBUGGER
- [domain=Inspector] void enableProfiler(in boolean always);
- [domain=Inspector] void disableProfiler(in boolean always);
- [notify, domain=Profiler] void profilerWasEnabled();
- [notify, domain=Profiler] void profilerWasDisabled();
+#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
+ interface [Conditional=INSPECTOR] BrowserDebugger {
+ void setAllBrowserBreakpoints(in Object breakpoints);
+ void setDOMBreakpoint(in long nodeId, in long type);
+ void removeDOMBreakpoint(in long nodeId, in long type);
+ void setEventListenerBreakpoint(in String eventName);
+ void removeEventListenerBreakpoint(in String eventName);
+ void setXHRBreakpoint(in String url);
+ void removeXHRBreakpoint(in String url);
+ };
+#endif // ENABLE_JAVASCRIPT_DEBUGGER
- [domain=Inspector] void startProfiling(); // FIXME: dispatch on profiler agent.
- [domain=Inspector] void stopProfiling(); // FIXME: dispatch on profiler agent.
+#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
+ interface [Conditional=INSPECTOR] Profiler {
+ [notify] void profilerWasEnabled();
+ [notify] void profilerWasDisabled();
- [domain=Profiler] void getProfileHeaders(out Array headers);
- [domain=Profiler] void getProfile(in String type, in unsigned long uid, out Object profile);
- [domain=Profiler] void removeProfile(in String type, in unsigned long uid);
- [domain=Profiler] void clearProfiles();
+ void getProfileHeaders(out Array headers);
+ void getProfile(in String type, in unsigned long uid, out Object profile);
+ void removeProfile(in String type, in unsigned long uid);
+ void clearProfiles();
// FIXME: split into Profiler and HeapProfiler.
- [domain=Profiler] void takeHeapSnapshot();
- [notify, domain=Profiler] void addProfileHeader(out Object header);
- [notify, domain=Profiler] void addHeapSnapshotChunk(out unsigned long uid, out String chunk);
- [notify, domain=Profiler] void finishHeapSnapshot(out unsigned long uid);
- [notify, domain=Profiler] void setRecordingProfile(out boolean isProfiling);
- [notify, domain=Profiler] void resetProfiles();
-
-#endif // ENABLE_JAVASCRIPT_DEBUGGER
+ void takeHeapSnapshot(in boolean detailed);
+ [notify] void addProfileHeader(out Object header);
+ [notify] void addHeapSnapshotChunk(out unsigned long uid, out String chunk);
+ [notify] void finishHeapSnapshot(out unsigned long uid);
+ [notify] void setRecordingProfile(out boolean isProfiling);
+ [notify] void resetProfiles();
+ [notify] void reportHeapSnapshotProgress(out int done, out int total);
};
+#endif // ENABLE_JAVASCRIPT_DEBUGGER
}
diff --git a/Source/WebCore/inspector/InspectorAgent.cpp b/Source/WebCore/inspector/InspectorAgent.cpp
new file mode 100644
index 0000000..9559099
--- /dev/null
+++ b/Source/WebCore/inspector/InspectorAgent.cpp
@@ -0,0 +1,1269 @@
+/*
+ * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "InspectorAgent.h"
+
+#if ENABLE(INSPECTOR)
+
+#include "CachedResource.h"
+#include "CachedResourceLoader.h"
+#include "Chrome.h"
+#include "Cookie.h"
+#include "CookieJar.h"
+#include "DOMWindow.h"
+#include "DOMWrapperWorld.h"
+#include "Document.h"
+#include "DocumentLoader.h"
+#include "Element.h"
+#include "FloatConversion.h"
+#include "FloatQuad.h"
+#include "FloatRect.h"
+#include "Frame.h"
+#include "FrameLoadRequest.h"
+#include "FrameLoader.h"
+#include "FrameTree.h"
+#include "FrameView.h"
+#include "GraphicsContext.h"
+#include "HTMLFrameOwnerElement.h"
+#include "HTTPHeaderMap.h"
+#include "HitTestResult.h"
+#include "InjectedScript.h"
+#include "InjectedScriptHost.h"
+#include "InspectorBrowserDebuggerAgent.h"
+#include "InspectorCSSAgent.h"
+#include "InspectorClient.h"
+#include "InspectorConsoleAgent.h"
+#include "InspectorController.h"
+#include "InspectorDOMAgent.h"
+#include "InspectorDOMStorageResource.h"
+#include "InspectorDatabaseResource.h"
+#include "InspectorDebuggerAgent.h"
+#include "InspectorFrontend.h"
+#include "InspectorFrontendClient.h"
+#include "InspectorInstrumentation.h"
+#include "InspectorProfilerAgent.h"
+#include "InspectorResourceAgent.h"
+#include "InspectorRuntimeAgent.h"
+#include "InspectorState.h"
+#include "InspectorTimelineAgent.h"
+#include "InspectorValues.h"
+#include "InspectorWorkerResource.h"
+#include "IntRect.h"
+#include "Page.h"
+#include "ProgressTracker.h"
+#include "Range.h"
+#include "RenderInline.h"
+#include "ResourceRequest.h"
+#include "ResourceResponse.h"
+#include "ScriptArguments.h"
+#include "ScriptCallStack.h"
+#include "ScriptFunctionCall.h"
+#include "ScriptObject.h"
+#include "ScriptProfile.h"
+#include "ScriptProfiler.h"
+#include "ScriptSourceCode.h"
+#include "ScriptState.h"
+#include "SecurityOrigin.h"
+#include "Settings.h"
+#include "SharedBuffer.h"
+#include "TextEncoding.h"
+#include "TextIterator.h"
+#include "TextRun.h"
+#include "UserGestureIndicator.h"
+#include "WindowFeatures.h"
+#include <wtf/CurrentTime.h>
+#include <wtf/ListHashSet.h>
+#include <wtf/RefCounted.h>
+#include <wtf/StdLibExtras.h>
+#include <wtf/UnusedParam.h>
+#include <wtf/text/StringConcatenate.h>
+
+#if ENABLE(DATABASE)
+#include "Database.h"
+#include "InspectorDatabaseAgent.h"
+#endif
+
+#if ENABLE(DOM_STORAGE)
+#include "InspectorDOMStorageAgent.h"
+#include "Storage.h"
+#include "StorageArea.h"
+#endif
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+#include "InspectorApplicationCacheAgent.h"
+#endif
+
+using namespace std;
+
+namespace WebCore {
+
+namespace InspectorAgentState {
+static const char searchingForNode[] = "searchingForNode";
+static const char timelineProfilerEnabled[] = "timelineProfilerEnabled";
+static const char userInitiatedProfiling[] = "userInitiatedProfiling";
+static const char debuggerEnabled[] = "debuggerEnabled";
+static const char profilerEnabled[] = "profilerEnabled";
+}
+
+static const char scriptsPanelName[] = "scripts";
+static const char consolePanelName[] = "console";
+static const char profilesPanelName[] = "profiles";
+
+InspectorAgent::InspectorAgent(Page* page, InspectorClient* client)
+ : m_inspectedPage(page)
+ , m_client(client)
+ , m_frontend(0)
+ , m_cssAgent(new InspectorCSSAgent())
+ , m_state(new InspectorState(client))
+ , m_injectedScriptHost(InjectedScriptHost::create(this))
+ , m_consoleAgent(new InspectorConsoleAgent(this))
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ , m_profilerAgent(InspectorProfilerAgent::create(this))
+#endif
+{
+ ASSERT_ARG(page, page);
+ ASSERT_ARG(client, client);
+ InspectorInstrumentation::bindInspectorAgent(m_inspectedPage, this);
+}
+
+InspectorAgent::~InspectorAgent()
+{
+ // These should have been cleared in inspectedPageDestroyed().
+ ASSERT(!m_client);
+ ASSERT(!m_inspectedPage);
+ ASSERT(!m_highlightedNode);
+}
+
+void InspectorAgent::inspectedPageDestroyed()
+{
+ if (m_frontend)
+ m_frontend->disconnectFromBackend();
+
+ hideHighlight();
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ m_debuggerAgent.clear();
+ m_browserDebuggerAgent.clear();
+#endif
+
+ ASSERT(m_inspectedPage);
+ InspectorInstrumentation::unbindInspectorAgent(m_inspectedPage);
+ m_inspectedPage = 0;
+
+ releaseFrontendLifetimeAgents();
+ m_injectedScriptHost->disconnectController();
+
+ m_client->inspectorDestroyed();
+ m_client = 0;
+}
+
+bool InspectorAgent::searchingForNodeInPage() const
+{
+ return m_state->getBoolean(InspectorAgentState::searchingForNode);
+}
+
+void InspectorAgent::restoreInspectorStateFromCookie(const String& inspectorStateCookie)
+{
+ m_state = new InspectorState(m_client, inspectorStateCookie);
+
+ m_frontend->frontendReused();
+ m_frontend->inspectedURLChanged(inspectedURL().string());
+ pushDataCollectedOffline();
+
+ m_resourceAgent = InspectorResourceAgent::restore(m_inspectedPage, m_state.get(), m_frontend);
+ m_timelineAgent = InspectorTimelineAgent::restore(m_state.get(), m_frontend);
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ restoreDebugger(false);
+ restoreProfiler(ProfilerRestoreResetAgent);
+ if (m_state->getBoolean(InspectorAgentState::userInitiatedProfiling))
+ startUserInitiatedProfiling();
+#endif
+}
+
+void InspectorAgent::inspect(Node* node)
+{
+ if (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE)
+ node = node->parentNode();
+ m_nodeToFocus = node;
+
+ if (!m_frontend)
+ return;
+
+ focusNode();
+}
+
+void InspectorAgent::focusNode()
+{
+ if (!enabled())
+ return;
+
+ ASSERT(m_frontend);
+ ASSERT(m_nodeToFocus);
+
+ long id = m_domAgent->pushNodePathToFrontend(m_nodeToFocus.get());
+ m_frontend->updateFocusedNode(id);
+ m_nodeToFocus = 0;
+}
+
+void InspectorAgent::highlight(Node* node)
+{
+ if (!enabled())
+ return;
+ ASSERT_ARG(node, node);
+ m_highlightedNode = node;
+ m_client->highlight(node);
+}
+
+void InspectorAgent::highlightDOMNode(long nodeId)
+{
+ Node* node = 0;
+ if (m_domAgent && (node = m_domAgent->nodeForId(nodeId)))
+ highlight(node);
+}
+
+void InspectorAgent::highlightFrame(unsigned long frameId)
+{
+ Frame* mainFrame = m_inspectedPage->mainFrame();
+ for (Frame* frame = mainFrame; frame; frame = frame->tree()->traverseNext(mainFrame)) {
+ if (reinterpret_cast<uintptr_t>(frame) == frameId && frame->ownerElement()) {
+ highlight(frame->ownerElement());
+ return;
+ }
+ }
+}
+
+void InspectorAgent::hideHighlight()
+{
+ if (!enabled())
+ return;
+ m_highlightedNode = 0;
+ m_client->hideHighlight();
+}
+
+void InspectorAgent::mouseDidMoveOverElement(const HitTestResult& result, unsigned)
+{
+ if (!enabled() || !searchingForNodeInPage())
+ return;
+
+ Node* node = result.innerNode();
+ while (node && node->nodeType() == Node::TEXT_NODE)
+ node = node->parentNode();
+ if (node)
+ highlight(node);
+}
+
+bool InspectorAgent::handleMousePress()
+{
+ if (!enabled() || !searchingForNodeInPage())
+ return false;
+
+ if (m_highlightedNode) {
+ RefPtr<Node> node = m_highlightedNode;
+ setSearchingForNode(false);
+ inspect(node.get());
+ }
+ return true;
+}
+
+void InspectorAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world)
+{
+ if (world != mainThreadNormalWorld())
+ return;
+
+ if (enabled()) {
+ if (m_frontend && frame == m_inspectedPage->mainFrame())
+ m_injectedScriptHost->discardInjectedScripts();
+
+ if (m_scriptsToEvaluateOnLoad.size()) {
+ ScriptState* scriptState = mainWorldScriptState(frame);
+ for (Vector<String>::iterator it = m_scriptsToEvaluateOnLoad.begin();
+ it != m_scriptsToEvaluateOnLoad.end(); ++it) {
+ m_injectedScriptHost->injectScript(*it, scriptState);
+ }
+ }
+ }
+
+ if (!m_inspectorExtensionAPI.isEmpty())
+ m_injectedScriptHost->injectScript(m_inspectorExtensionAPI, mainWorldScriptState(frame));
+}
+
+void InspectorAgent::setSearchingForNode(bool enabled)
+{
+ if (searchingForNodeInPage() == enabled)
+ return;
+ m_state->setBoolean(InspectorAgentState::searchingForNode, enabled);
+ if (!enabled)
+ hideHighlight();
+}
+
+void InspectorAgent::setSearchingForNode(bool enabled, bool* newState)
+{
+ *newState = enabled;
+ setSearchingForNode(enabled);
+}
+
+void InspectorAgent::setFrontend(InspectorFrontend* inspectorFrontend)
+{
+ m_frontend = inspectorFrontend;
+ createFrontendLifetimeAgents();
+
+ m_cssAgent->setDOMAgent(m_domAgent.get());
+ m_consoleAgent->setFrontend(m_frontend);
+
+ // Initialize Web Inspector title.
+ m_frontend->inspectedURLChanged(inspectedURL().string());
+}
+
+void InspectorAgent::disconnectFrontend()
+{
+ if (!m_frontend)
+ return;
+
+ // Destroying agents would change the state, but we don't want that.
+ // Pre-disconnect state will be used to restore inspector agents.
+ m_state->mute();
+
+ m_frontend = 0;
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ // If the window is being closed with the debugger enabled,
+ // remember this state to re-enable debugger on the next window
+ // opening.
+ disableDebugger();
+#endif
+ setSearchingForNode(false);
+
+ hideHighlight();
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ m_profilerAgent->setFrontend(0);
+ m_profilerAgent->stopUserInitiatedProfiling(true);
+#endif
+
+ m_consoleAgent->setFrontend(0);
+
+ releaseFrontendLifetimeAgents();
+ m_userAgentOverride = "";
+}
+
+InspectorResourceAgent* InspectorAgent::resourceAgent()
+{
+ if (!m_resourceAgent && m_frontend)
+ m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_state.get(), m_frontend);
+ return m_resourceAgent.get();
+}
+
+void InspectorAgent::createFrontendLifetimeAgents()
+{
+ m_domAgent = InspectorDOMAgent::create(m_injectedScriptHost.get(), m_frontend);
+ m_runtimeAgent = InspectorRuntimeAgent::create(m_injectedScriptHost.get());
+
+#if ENABLE(DATABASE)
+ m_databaseAgent = InspectorDatabaseAgent::create(&m_databaseResources, m_frontend);
+#endif
+
+#if ENABLE(DOM_STORAGE)
+ m_domStorageAgent = InspectorDOMStorageAgent::create(&m_domStorageResources, m_frontend);
+#endif
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ m_applicationCacheAgent = new InspectorApplicationCacheAgent(m_inspectedPage->mainFrame()->loader()->documentLoader(), m_frontend);
+#endif
+}
+
+void InspectorAgent::releaseFrontendLifetimeAgents()
+{
+ m_resourceAgent.clear();
+ m_runtimeAgent.clear();
+ m_timelineAgent.clear();
+
+#if ENABLE(DATABASE)
+ m_databaseAgent.clear();
+#endif
+
+#if ENABLE(DOM_STORAGE)
+ m_domStorageAgent.clear();
+#endif
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ m_applicationCacheAgent.clear();
+#endif
+
+ // This should be invoked prior to m_domAgent destruction.
+ m_cssAgent->setDOMAgent(0);
+ m_domAgent.clear();
+}
+
+void InspectorAgent::populateScriptObjects()
+{
+ ASSERT(m_frontend);
+ if (!m_frontend)
+ return;
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (m_profilerAgent->enabled())
+ m_frontend->profilerWasEnabled();
+#endif
+
+ pushDataCollectedOffline();
+
+ if (m_nodeToFocus)
+ focusNode();
+
+ if (!m_requiredPanel.isEmpty()) {
+ m_frontend->showPanel(m_requiredPanel);
+ m_requiredPanel = "";
+ }
+
+ restoreDebugger(true);
+ restoreProfiler(ProfilerRestoreNoAction);
+
+ // Dispatch pending frontend commands
+ for (Vector<pair<long, String> >::iterator it = m_pendingEvaluateTestCommands.begin(); it != m_pendingEvaluateTestCommands.end(); ++it)
+ m_frontend->evaluateForTestInFrontend((*it).first, (*it).second);
+ m_pendingEvaluateTestCommands.clear();
+}
+
+void InspectorAgent::pushDataCollectedOffline()
+{
+ m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
+
+#if ENABLE(DATABASE)
+ DatabaseResourcesMap::iterator databasesEnd = m_databaseResources.end();
+ for (DatabaseResourcesMap::iterator it = m_databaseResources.begin(); it != databasesEnd; ++it)
+ it->second->bind(m_frontend);
+#endif
+#if ENABLE(DOM_STORAGE)
+ DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources.end();
+ for (DOMStorageResourcesMap::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
+ it->second->bind(m_frontend);
+#endif
+#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(WORKERS)
+ WorkersMap::iterator workersEnd = m_workers.end();
+ for (WorkersMap::iterator it = m_workers.begin(); it != workersEnd; ++it) {
+ InspectorWorkerResource* worker = it->second.get();
+ m_frontend->didCreateWorker(worker->id(), worker->url(), worker->isSharedWorker());
+ }
+#endif
+}
+
+void InspectorAgent::restoreDebugger(bool eraseStickyBreakpoints)
+{
+ ASSERT(m_frontend);
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (m_state->getBoolean(InspectorAgentState::debuggerEnabled))
+ enableDebugger(eraseStickyBreakpoints);
+#endif
+}
+
+void InspectorAgent::restoreProfiler(ProfilerRestoreAction action)
+{
+ ASSERT(m_frontend);
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ m_profilerAgent->setFrontend(m_frontend);
+ if (m_state->getBoolean(InspectorAgentState::profilerEnabled))
+ enableProfiler();
+ if (action == ProfilerRestoreResetAgent)
+ m_profilerAgent->resetFrontendProfiles();
+#endif
+}
+
+void InspectorAgent::didCommitLoad(DocumentLoader* loader)
+{
+ if (!enabled())
+ return;
+
+ if (m_resourceAgent)
+ m_resourceAgent->didCommitLoad(loader);
+
+ ASSERT(m_inspectedPage);
+
+ if (loader->frame() == m_inspectedPage->mainFrame()) {
+ if (m_frontend)
+ m_frontend->inspectedURLChanged(loader->url().string());
+
+ m_injectedScriptHost->discardInjectedScripts();
+ m_consoleAgent->reset();
+
+ if (m_timelineAgent)
+ m_timelineAgent->didCommitLoad();
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ if (m_applicationCacheAgent)
+ m_applicationCacheAgent->didCommitLoad(loader);
+#endif
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (m_debuggerAgent) {
+ KURL url = inspectedURLWithoutFragment();
+ m_debuggerAgent->inspectedURLChanged(url);
+ if (m_browserDebuggerAgent)
+ m_browserDebuggerAgent->inspectedURLChanged(url);
+ }
+#endif
+
+#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
+ m_profilerAgent->stopUserInitiatedProfiling(true);
+ m_profilerAgent->resetState();
+#endif
+
+ if (m_frontend) {
+ m_frontend->reset();
+ m_domAgent->reset();
+ m_cssAgent->reset();
+ }
+#if ENABLE(WORKERS)
+ m_workers.clear();
+#endif
+#if ENABLE(DATABASE)
+ m_databaseResources.clear();
+#endif
+#if ENABLE(DOM_STORAGE)
+ m_domStorageResources.clear();
+#endif
+
+ if (m_frontend)
+ m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
+ }
+}
+
+void InspectorAgent::domContentLoadedEventFired(DocumentLoader* loader, const KURL& url)
+{
+ if (!enabled() || !isMainResourceLoader(loader, url))
+ return;
+
+ if (m_domAgent)
+ m_domAgent->mainFrameDOMContentLoaded();
+ if (m_timelineAgent)
+ m_timelineAgent->didMarkDOMContentEvent();
+ if (m_frontend)
+ m_frontend->domContentEventFired(currentTime());
+}
+
+void InspectorAgent::loadEventFired(DocumentLoader* loader, const KURL& url)
+{
+ if (!enabled())
+ return;
+
+ if (m_domAgent)
+ m_domAgent->loadEventFired(loader->frame()->document());
+
+ if (!isMainResourceLoader(loader, url))
+ return;
+
+ if (m_timelineAgent)
+ m_timelineAgent->didMarkLoadEvent();
+ if (m_frontend)
+ m_frontend->loadEventFired(currentTime());
+}
+
+bool InspectorAgent::isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl)
+{
+ return loader->frame() == m_inspectedPage->mainFrame() && requestUrl == loader->requestURL();
+}
+
+void InspectorAgent::setUserAgentOverride(const String& userAgent)
+{
+ m_userAgentOverride = userAgent;
+}
+
+void InspectorAgent::applyUserAgentOverride(String* userAgent) const
+{
+ if (!m_userAgentOverride.isEmpty())
+ *userAgent = m_userAgentOverride;
+}
+
+void InspectorAgent::startTimelineProfiler()
+{
+ if (m_timelineAgent || !enabled() || !m_frontend)
+ return;
+
+ m_timelineAgent = InspectorTimelineAgent::create(m_state.get(), m_frontend);
+}
+
+void InspectorAgent::stopTimelineProfiler()
+{
+ m_timelineAgent.clear();
+}
+
+#if ENABLE(WORKERS)
+class PostWorkerNotificationToFrontendTask : public ScriptExecutionContext::Task {
+public:
+ static PassOwnPtr<PostWorkerNotificationToFrontendTask> create(PassRefPtr<InspectorWorkerResource> worker, InspectorAgent::WorkerAction action)
+ {
+ return new PostWorkerNotificationToFrontendTask(worker, action);
+ }
+
+private:
+ PostWorkerNotificationToFrontendTask(PassRefPtr<InspectorWorkerResource> worker, InspectorAgent::WorkerAction action)
+ : m_worker(worker)
+ , m_action(action)
+ {
+ }
+
+ virtual void performTask(ScriptExecutionContext* scriptContext)
+ {
+ if (scriptContext->isDocument()) {
+ if (InspectorAgent* inspectorAgent = static_cast<Document*>(scriptContext)->page()->inspectorController()->m_inspectorAgent.get())
+ inspectorAgent->postWorkerNotificationToFrontend(*m_worker, m_action);
+ }
+ }
+
+private:
+ RefPtr<InspectorWorkerResource> m_worker;
+ InspectorAgent::WorkerAction m_action;
+};
+
+void InspectorAgent::postWorkerNotificationToFrontend(const InspectorWorkerResource& worker, InspectorAgent::WorkerAction action)
+{
+ if (!m_frontend)
+ return;
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ switch (action) {
+ case InspectorAgent::WorkerCreated:
+ m_frontend->didCreateWorker(worker.id(), worker.url(), worker.isSharedWorker());
+ break;
+ case InspectorAgent::WorkerDestroyed:
+ m_frontend->didDestroyWorker(worker.id());
+ break;
+ }
+#endif
+}
+
+void InspectorAgent::didCreateWorker(intptr_t id, const String& url, bool isSharedWorker)
+{
+ if (!enabled())
+ return;
+
+ RefPtr<InspectorWorkerResource> workerResource(InspectorWorkerResource::create(id, url, isSharedWorker));
+ m_workers.set(id, workerResource);
+ if (m_inspectedPage && m_frontend)
+ m_inspectedPage->mainFrame()->document()->postTask(PostWorkerNotificationToFrontendTask::create(workerResource, InspectorAgent::WorkerCreated));
+}
+
+void InspectorAgent::didDestroyWorker(intptr_t id)
+{
+ if (!enabled())
+ return;
+
+ WorkersMap::iterator workerResource = m_workers.find(id);
+ if (workerResource == m_workers.end())
+ return;
+ if (m_inspectedPage && m_frontend)
+ m_inspectedPage->mainFrame()->document()->postTask(PostWorkerNotificationToFrontendTask::create(workerResource->second, InspectorAgent::WorkerDestroyed));
+ m_workers.remove(workerResource);
+}
+#endif // ENABLE(WORKERS)
+
+#if ENABLE(DATABASE)
+void InspectorAgent::didOpenDatabase(PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
+{
+ if (!enabled())
+ return;
+
+ RefPtr<InspectorDatabaseResource> resource = InspectorDatabaseResource::create(database, domain, name, version);
+
+ m_databaseResources.set(resource->id(), resource);
+
+ // Resources are only bound while visible.
+ if (m_frontend)
+ resource->bind(m_frontend);
+}
+#endif
+
+void InspectorAgent::getCookies(RefPtr<InspectorArray>* cookies, WTF::String* cookiesString)
+{
+ // If we can get raw cookies.
+ ListHashSet<Cookie> rawCookiesList;
+
+ // If we can't get raw cookies - fall back to String representation
+ String stringCookiesList;
+
+ // Return value to getRawCookies should be the same for every call because
+ // the return value is platform/network backend specific, and the call will
+ // always return the same true/false value.
+ bool rawCookiesImplemented = false;
+
+ for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
+ Document* document = frame->document();
+ const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
+ CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
+ for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) {
+ Vector<Cookie> docCookiesList;
+ rawCookiesImplemented = getRawCookies(document, KURL(ParsedURLString, it->second->url()), docCookiesList);
+
+ if (!rawCookiesImplemented) {
+ // FIXME: We need duplication checking for the String representation of cookies.
+ ExceptionCode ec = 0;
+ stringCookiesList += document->cookie(ec);
+ // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here
+ // because "document" is the document of the main frame of the page.
+ ASSERT(!ec);
+ } else {
+ int cookiesSize = docCookiesList.size();
+ for (int i = 0; i < cookiesSize; i++) {
+ if (!rawCookiesList.contains(docCookiesList[i]))
+ rawCookiesList.add(docCookiesList[i]);
+ }
+ }
+ }
+ }
+
+ if (rawCookiesImplemented)
+ *cookies = buildArrayForCookies(rawCookiesList);
+ else
+ *cookiesString = stringCookiesList;
+}
+
+PassRefPtr<InspectorArray> InspectorAgent::buildArrayForCookies(ListHashSet<Cookie>& cookiesList)
+{
+ RefPtr<InspectorArray> cookies = InspectorArray::create();
+
+ ListHashSet<Cookie>::iterator end = cookiesList.end();
+ ListHashSet<Cookie>::iterator it = cookiesList.begin();
+ for (int i = 0; it != end; ++it, i++)
+ cookies->pushObject(buildObjectForCookie(*it));
+
+ return cookies;
+}
+
+PassRefPtr<InspectorObject> InspectorAgent::buildObjectForCookie(const Cookie& cookie)
+{
+ RefPtr<InspectorObject> value = InspectorObject::create();
+ value->setString("name", cookie.name);
+ value->setString("value", cookie.value);
+ value->setString("domain", cookie.domain);
+ value->setString("path", cookie.path);
+ value->setNumber("expires", cookie.expires);
+ value->setNumber("size", (cookie.name.length() + cookie.value.length()));
+ value->setBoolean("httpOnly", cookie.httpOnly);
+ value->setBoolean("secure", cookie.secure);
+ value->setBoolean("session", cookie.session);
+ return value;
+}
+
+void InspectorAgent::deleteCookie(const String& cookieName, const String& domain)
+{
+ for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
+ Document* document = frame->document();
+ if (document->url().host() != domain)
+ continue;
+ const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
+ CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
+ for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it)
+ WebCore::deleteCookie(document, KURL(ParsedURLString, it->second->url()), cookieName);
+ }
+}
+
+#if ENABLE(DOM_STORAGE)
+void InspectorAgent::didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame)
+{
+ if (!enabled())
+ return;
+
+ DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources.end();
+ for (DOMStorageResourcesMap::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
+ if (it->second->isSameHostAndType(frame, isLocalStorage))
+ return;
+
+ RefPtr<Storage> domStorage = Storage::create(frame, storageArea);
+ RefPtr<InspectorDOMStorageResource> resource = InspectorDOMStorageResource::create(domStorage.get(), isLocalStorage, frame);
+
+ m_domStorageResources.set(resource->id(), resource);
+
+ // Resources are only bound while visible.
+ if (m_frontend)
+ resource->bind(m_frontend);
+}
+#endif
+
+#if ENABLE(WEB_SOCKETS)
+void InspectorAgent::didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
+{
+ if (!enabled())
+ return;
+ ASSERT(m_inspectedPage);
+
+ if (m_resourceAgent)
+ m_resourceAgent->didCreateWebSocket(identifier, requestURL);
+ UNUSED_PARAM(documentURL);
+}
+
+void InspectorAgent::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request)
+{
+ if (m_resourceAgent)
+ m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
+}
+
+void InspectorAgent::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response)
+{
+ if (m_resourceAgent)
+ m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
+}
+
+void InspectorAgent::didCloseWebSocket(unsigned long identifier)
+{
+ if (m_resourceAgent)
+ m_resourceAgent->didCloseWebSocket(identifier);
+}
+#endif // ENABLE(WEB_SOCKETS)
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+bool InspectorAgent::isRecordingUserInitiatedProfile() const
+{
+ return m_profilerAgent->isRecordingUserInitiatedProfile();
+}
+
+void InspectorAgent::startUserInitiatedProfiling()
+{
+ if (!enabled())
+ return;
+ m_profilerAgent->startUserInitiatedProfiling();
+ m_state->setBoolean(InspectorAgentState::userInitiatedProfiling, true);
+}
+
+void InspectorAgent::stopUserInitiatedProfiling()
+{
+ if (!enabled())
+ return;
+ m_profilerAgent->stopUserInitiatedProfiling();
+ m_state->setBoolean(InspectorAgentState::userInitiatedProfiling, false);
+ showPanel(profilesPanelName);
+}
+
+bool InspectorAgent::profilerEnabled() const
+{
+ return enabled() && m_profilerAgent->enabled();
+}
+
+void InspectorAgent::enableProfiler()
+{
+ if (profilerEnabled())
+ return;
+ m_state->setBoolean(InspectorAgentState::profilerEnabled, true);
+ m_profilerAgent->enable(false);
+}
+
+void InspectorAgent::disableProfiler()
+{
+ m_state->setBoolean(InspectorAgentState::profilerEnabled, false);
+ m_profilerAgent->disable();
+}
+#endif
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+void InspectorAgent::showAndEnableDebugger()
+{
+ if (!enabled())
+ return;
+
+ if (debuggerEnabled())
+ return;
+
+ if (!m_frontend) {
+ m_state->setBoolean(InspectorAgentState::debuggerEnabled, true);
+ showPanel(scriptsPanelName);
+ } else
+ enableDebugger(true);
+}
+
+void InspectorAgent::enableDebugger(bool eraseStickyBreakpoints)
+{
+ if (debuggerEnabled())
+ return;
+ m_state->setBoolean(InspectorAgentState::debuggerEnabled, true);
+ ASSERT(m_inspectedPage);
+
+ m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend, eraseStickyBreakpoints);
+ m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this, eraseStickyBreakpoints);
+
+ m_frontend->debuggerWasEnabled();
+}
+
+void InspectorAgent::disableDebugger()
+{
+ if (!enabled())
+ return;
+ ASSERT(m_inspectedPage);
+ m_debuggerAgent.clear();
+ m_browserDebuggerAgent.clear();
+
+ if (m_frontend) {
+ m_frontend->debuggerWasDisabled();
+ m_state->setBoolean(InspectorAgentState::debuggerEnabled, false);
+ }
+}
+
+void InspectorAgent::resume()
+{
+ if (m_debuggerAgent)
+ m_debuggerAgent->resume();
+}
+#endif
+
+void InspectorAgent::evaluateForTestInFrontend(long callId, const String& script)
+{
+ if (m_frontend)
+ m_frontend->evaluateForTestInFrontend(callId, script);
+ else
+ m_pendingEvaluateTestCommands.append(pair<long, String>(callId, script));
+}
+
+void InspectorAgent::didEvaluateForTestInFrontend(long callId, const String& jsonResult)
+{
+ ScriptState* scriptState = scriptStateFromPage(debuggerWorld(), m_inspectedPage);
+ ScriptObject window;
+ ScriptGlobalObject::get(scriptState, "window", window);
+ ScriptFunctionCall function(window, "didEvaluateForTestInFrontend");
+ function.appendArgument(callId);
+ function.appendArgument(jsonResult);
+ function.call();
+}
+
+static Path quadToPath(const FloatQuad& quad)
+{
+ Path quadPath;
+ quadPath.moveTo(quad.p1());
+ quadPath.addLineTo(quad.p2());
+ quadPath.addLineTo(quad.p3());
+ quadPath.addLineTo(quad.p4());
+ quadPath.closeSubpath();
+ return quadPath;
+}
+
+static void drawOutlinedQuad(GraphicsContext& context, const FloatQuad& quad, const Color& fillColor)
+{
+ static const int outlineThickness = 2;
+ static const Color outlineColor(62, 86, 180, 228);
+
+ Path quadPath = quadToPath(quad);
+
+ // Clip out the quad, then draw with a 2px stroke to get a pixel
+ // of outline (because inflating a quad is hard)
+ {
+ context.save();
+ context.clipOut(quadPath);
+
+ context.setStrokeThickness(outlineThickness);
+ context.setStrokeColor(outlineColor, ColorSpaceDeviceRGB);
+ context.strokePath(quadPath);
+
+ context.restore();
+ }
+
+ // Now do the fill
+ context.setFillColor(fillColor, ColorSpaceDeviceRGB);
+ context.fillPath(quadPath);
+}
+
+static void drawOutlinedQuadWithClip(GraphicsContext& context, const FloatQuad& quad, const FloatQuad& clipQuad, const Color& fillColor)
+{
+ context.save();
+ Path clipQuadPath = quadToPath(clipQuad);
+ context.clipOut(clipQuadPath);
+ drawOutlinedQuad(context, quad, fillColor);
+ context.restore();
+}
+
+static void drawHighlightForBox(GraphicsContext& context, const FloatQuad& contentQuad, const FloatQuad& paddingQuad, const FloatQuad& borderQuad, const FloatQuad& marginQuad)
+{
+ static const Color contentBoxColor(125, 173, 217, 128);
+ static const Color paddingBoxColor(125, 173, 217, 160);
+ static const Color borderBoxColor(125, 173, 217, 192);
+ static const Color marginBoxColor(125, 173, 217, 228);
+
+ if (marginQuad != borderQuad)
+ drawOutlinedQuadWithClip(context, marginQuad, borderQuad, marginBoxColor);
+ if (borderQuad != paddingQuad)
+ drawOutlinedQuadWithClip(context, borderQuad, paddingQuad, borderBoxColor);
+ if (paddingQuad != contentQuad)
+ drawOutlinedQuadWithClip(context, paddingQuad, contentQuad, paddingBoxColor);
+
+ drawOutlinedQuad(context, contentQuad, contentBoxColor);
+}
+
+static void drawHighlightForLineBoxesOrSVGRenderer(GraphicsContext& context, const Vector<FloatQuad>& lineBoxQuads)
+{
+ static const Color lineBoxColor(125, 173, 217, 128);
+
+ for (size_t i = 0; i < lineBoxQuads.size(); ++i)
+ drawOutlinedQuad(context, lineBoxQuads[i], lineBoxColor);
+}
+
+static inline void convertFromFrameToMainFrame(Frame* frame, IntRect& rect)
+{
+ rect = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(rect));
+}
+
+static inline IntSize frameToMainFrameOffset(Frame* frame)
+{
+ IntPoint mainFramePoint = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(IntPoint()));
+ return mainFramePoint - IntPoint();
+}
+
+void InspectorAgent::drawNodeHighlight(GraphicsContext& context) const
+{
+ if (!m_highlightedNode)
+ return;
+
+ RenderObject* renderer = m_highlightedNode->renderer();
+ Frame* containingFrame = m_highlightedNode->document()->frame();
+ if (!renderer || !containingFrame)
+ return;
+
+ IntSize mainFrameOffset = frameToMainFrameOffset(containingFrame);
+ IntRect boundingBox = renderer->absoluteBoundingBoxRect(true);
+ boundingBox.move(mainFrameOffset);
+
+ IntRect titleReferenceBox = boundingBox;
+
+ ASSERT(m_inspectedPage);
+
+ FrameView* view = m_inspectedPage->mainFrame()->view();
+ FloatRect overlayRect = view->visibleContentRect();
+ if (!overlayRect.contains(boundingBox) && !boundingBox.contains(enclosingIntRect(overlayRect)))
+ overlayRect = view->visibleContentRect();
+ context.translate(-overlayRect.x(), -overlayRect.y());
+
+ // RenderSVGRoot should be highlighted through the isBox() code path, all other SVG elements should just dump their absoluteQuads().
+#if ENABLE(SVG)
+ bool isSVGRenderer = renderer->node() && renderer->node()->isSVGElement() && !renderer->isSVGRoot();
+#else
+ bool isSVGRenderer = false;
+#endif
+
+ if (renderer->isBox() && !isSVGRenderer) {
+ RenderBox* renderBox = toRenderBox(renderer);
+
+ IntRect contentBox = renderBox->contentBoxRect();
+
+ IntRect paddingBox(contentBox.x() - renderBox->paddingLeft(), contentBox.y() - renderBox->paddingTop(),
+ contentBox.width() + renderBox->paddingLeft() + renderBox->paddingRight(), contentBox.height() + renderBox->paddingTop() + renderBox->paddingBottom());
+ IntRect borderBox(paddingBox.x() - renderBox->borderLeft(), paddingBox.y() - renderBox->borderTop(),
+ paddingBox.width() + renderBox->borderLeft() + renderBox->borderRight(), paddingBox.height() + renderBox->borderTop() + renderBox->borderBottom());
+ IntRect marginBox(borderBox.x() - renderBox->marginLeft(), borderBox.y() - renderBox->marginTop(),
+ borderBox.width() + renderBox->marginLeft() + renderBox->marginRight(), borderBox.height() + renderBox->marginTop() + renderBox->marginBottom());
+
+ titleReferenceBox = marginBox;
+ titleReferenceBox.move(mainFrameOffset);
+ titleReferenceBox.move(boundingBox.x(), boundingBox.y());
+
+ FloatQuad absContentQuad = renderBox->localToAbsoluteQuad(FloatRect(contentBox));
+ FloatQuad absPaddingQuad = renderBox->localToAbsoluteQuad(FloatRect(paddingBox));
+ FloatQuad absBorderQuad = renderBox->localToAbsoluteQuad(FloatRect(borderBox));
+ FloatQuad absMarginQuad = renderBox->localToAbsoluteQuad(FloatRect(marginBox));
+
+ absContentQuad.move(mainFrameOffset);
+ absPaddingQuad.move(mainFrameOffset);
+ absBorderQuad.move(mainFrameOffset);
+ absMarginQuad.move(mainFrameOffset);
+
+ drawHighlightForBox(context, absContentQuad, absPaddingQuad, absBorderQuad, absMarginQuad);
+ } else if (renderer->isRenderInline() || isSVGRenderer) {
+ // FIXME: We should show margins/padding/border for inlines.
+ Vector<FloatQuad> lineBoxQuads;
+ renderer->absoluteQuads(lineBoxQuads);
+ for (unsigned i = 0; i < lineBoxQuads.size(); ++i)
+ lineBoxQuads[i] += mainFrameOffset;
+
+ drawHighlightForLineBoxesOrSVGRenderer(context, lineBoxQuads);
+ }
+
+ // Draw node title if necessary.
+
+ if (!m_highlightedNode->isElementNode())
+ return;
+
+ WebCore::Settings* settings = containingFrame->settings();
+ drawElementTitle(context, titleReferenceBox, overlayRect, settings);
+}
+
+void InspectorAgent::drawElementTitle(GraphicsContext& context, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings* settings) const
+{
+ static const int rectInflatePx = 4;
+ static const int fontHeightPx = 12;
+ static const int borderWidthPx = 1;
+ static const Color tooltipBackgroundColor(255, 255, 194, 255);
+ static const Color tooltipBorderColor(Color::black);
+ static const Color tooltipFontColor(Color::black);
+
+ Element* element = static_cast<Element*>(m_highlightedNode.get());
+ bool isXHTML = element->document()->isXHTMLDocument();
+ String nodeTitle = isXHTML ? element->nodeName() : element->nodeName().lower();
+ const AtomicString& idValue = element->getIdAttribute();
+ if (!idValue.isNull() && !idValue.isEmpty()) {
+ nodeTitle += "#";
+ nodeTitle += idValue;
+ }
+ if (element->hasClass() && element->isStyledElement()) {
+ const SpaceSplitString& classNamesString = static_cast<StyledElement*>(element)->classNames();
+ size_t classNameCount = classNamesString.size();
+ if (classNameCount) {
+ HashSet<AtomicString> usedClassNames;
+ for (size_t i = 0; i < classNameCount; ++i) {
+ const AtomicString& className = classNamesString[i];
+ if (usedClassNames.contains(className))
+ continue;
+ usedClassNames.add(className);
+ nodeTitle += ".";
+ nodeTitle += className;
+ }
+ }
+ }
+
+ Element* highlightedElement = m_highlightedNode->isElementNode() ? static_cast<Element*>(m_highlightedNode.get()) : 0;
+ nodeTitle += " [";
+ nodeTitle += String::number(highlightedElement ? highlightedElement->offsetWidth() : boundingBox.width());
+ nodeTitle.append(static_cast<UChar>(0x00D7)); // &times;
+ nodeTitle += String::number(highlightedElement ? highlightedElement->offsetHeight() : boundingBox.height());
+ nodeTitle += "]";
+
+ FontDescription desc;
+ FontFamily family;
+ family.setFamily(settings->fixedFontFamily());
+ desc.setFamily(family);
+ desc.setComputedSize(fontHeightPx);
+ Font font = Font(desc, 0, 0);
+ font.update(0);
+
+ TextRun nodeTitleRun(nodeTitle);
+ IntPoint titleBasePoint = IntPoint(boundingBox.x(), boundingBox.maxY() - 1);
+ titleBasePoint.move(rectInflatePx, rectInflatePx);
+ IntRect titleRect = enclosingIntRect(font.selectionRectForText(nodeTitleRun, titleBasePoint, fontHeightPx));
+ titleRect.inflate(rectInflatePx);
+
+ // The initial offsets needed to compensate for a 1px-thick border stroke (which is not a part of the rectangle).
+ int dx = -borderWidthPx;
+ int dy = borderWidthPx;
+
+ // If the tip sticks beyond the right of overlayRect, right-align the tip with the said boundary.
+ if (titleRect.maxX() > overlayRect.maxX())
+ dx = overlayRect.maxX() - titleRect.maxX();
+
+ // If the tip sticks beyond the left of overlayRect, left-align the tip with the said boundary.
+ if (titleRect.x() + dx < overlayRect.x())
+ dx = overlayRect.x() - titleRect.x() - borderWidthPx;
+
+ // If the tip sticks beyond the bottom of overlayRect, show the tip at top of bounding box.
+ if (titleRect.maxY() > overlayRect.maxY()) {
+ dy = boundingBox.y() - titleRect.maxY() - borderWidthPx;
+ // If the tip still sticks beyond the bottom of overlayRect, bottom-align the tip with the said boundary.
+ if (titleRect.maxY() + dy > overlayRect.maxY())
+ dy = overlayRect.maxY() - titleRect.maxY();
+ }
+
+ // If the tip sticks beyond the top of overlayRect, show the tip at top of overlayRect.
+ if (titleRect.y() + dy < overlayRect.y())
+ dy = overlayRect.y() - titleRect.y() + borderWidthPx;
+
+ titleRect.move(dx, dy);
+ context.setStrokeColor(tooltipBorderColor, ColorSpaceDeviceRGB);
+ context.setStrokeThickness(borderWidthPx);
+ context.setFillColor(tooltipBackgroundColor, ColorSpaceDeviceRGB);
+ context.drawRect(titleRect);
+ context.setFillColor(tooltipFontColor, ColorSpaceDeviceRGB);
+ context.drawText(font, nodeTitleRun, IntPoint(titleRect.x() + rectInflatePx, titleRect.y() + font.fontMetrics().height()));
+}
+
+void InspectorAgent::openInInspectedWindow(const String& url)
+{
+ Frame* mainFrame = m_inspectedPage->mainFrame();
+
+ FrameLoadRequest request(mainFrame->document()->securityOrigin(), ResourceRequest(), "_blank");
+
+ bool created;
+ WindowFeatures windowFeatures;
+ Frame* newFrame = WebCore::createWindow(mainFrame, mainFrame, request, windowFeatures, created);
+ if (!newFrame)
+ return;
+
+ UserGestureIndicator indicator(DefinitelyProcessingUserGesture);
+ newFrame->loader()->setOpener(mainFrame);
+ newFrame->page()->setOpenedByDOM();
+ newFrame->loader()->changeLocation(mainFrame->document()->securityOrigin(), newFrame->loader()->completeURL(url), "", false, false);
+}
+
+void InspectorAgent::addScriptToEvaluateOnLoad(const String& source)
+{
+ m_scriptsToEvaluateOnLoad.append(source);
+}
+
+void InspectorAgent::removeAllScriptsToEvaluateOnLoad()
+{
+ m_scriptsToEvaluateOnLoad.clear();
+}
+
+void InspectorAgent::setInspectorExtensionAPI(const String& source)
+{
+ m_inspectorExtensionAPI = source;
+}
+
+KURL InspectorAgent::inspectedURL() const
+{
+ return m_inspectedPage->mainFrame()->document()->url();
+}
+
+KURL InspectorAgent::inspectedURLWithoutFragment() const
+{
+ KURL url = inspectedURL();
+ url.removeFragmentIdentifier();
+ return url;
+}
+
+void InspectorAgent::reloadPage(bool ignoreCache)
+{
+ m_inspectedPage->mainFrame()->loader()->reload(ignoreCache);
+}
+
+bool InspectorAgent::enabled() const
+{
+ if (!m_inspectedPage)
+ return false;
+ return m_inspectedPage->settings()->developerExtrasEnabled();
+}
+
+void InspectorAgent::showConsole()
+{
+ showPanel(consolePanelName);
+}
+
+void InspectorAgent::showPanel(const String& panel)
+{
+ if (!m_frontend) {
+ m_requiredPanel = panel;
+ return;
+ }
+ m_frontend->showPanel(panel);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebCore/inspector/InspectorAgent.h b/Source/WebCore/inspector/InspectorAgent.h
new file mode 100644
index 0000000..1f14dd9
--- /dev/null
+++ b/Source/WebCore/inspector/InspectorAgent.h
@@ -0,0 +1,327 @@
+/*
+ * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef InspectorAgent_h
+#define InspectorAgent_h
+
+#include "CharacterData.h"
+#include "Console.h"
+#include "Cookie.h"
+#include "Page.h"
+#include "PlatformString.h"
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
+#include <wtf/ListHashSet.h>
+#include <wtf/RefCounted.h>
+#include <wtf/Vector.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+class CachedResource;
+class CharacterData;
+class Database;
+class DOMWrapperWorld;
+class Document;
+class DocumentLoader;
+class FloatRect;
+class GraphicsContext;
+class HTTPHeaderMap;
+class HitTestResult;
+class InjectedScript;
+class InjectedScriptHost;
+class InspectorArray;
+class InspectorBrowserDebuggerAgent;
+class InspectorClient;
+class InspectorConsoleAgent;
+class InspectorCSSAgent;
+class InspectorDOMAgent;
+class InspectorDOMStorageAgent;
+class InspectorDOMStorageResource;
+class InspectorDatabaseAgent;
+class InspectorDatabaseResource;
+class InspectorDebuggerAgent;
+class InspectorFrontend;
+class InspectorFrontendClient;
+class InspectorObject;
+class InspectorProfilerAgent;
+class InspectorResourceAgent;
+class InspectorRuntimeAgent;
+class InspectorState;
+class InspectorStorageAgent;
+class InspectorTimelineAgent;
+class InspectorValue;
+class InspectorWorkerResource;
+class IntRect;
+class KURL;
+class Node;
+class Page;
+class ResourceRequest;
+class ResourceResponse;
+class ResourceError;
+class ScriptArguments;
+class ScriptCallStack;
+class ScriptProfile;
+class SharedBuffer;
+class StorageArea;
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+class InspectorApplicationCacheAgent;
+#endif
+
+#if ENABLE(WEB_SOCKETS)
+class WebSocketHandshakeRequest;
+class WebSocketHandshakeResponse;
+#endif
+
+class InspectorAgent {
+ WTF_MAKE_NONCOPYABLE(InspectorAgent);
+ WTF_MAKE_FAST_ALLOCATED;
+public:
+ InspectorAgent(Page*, InspectorClient*);
+ virtual ~InspectorAgent();
+
+ InspectorClient* inspectorClient() { return m_client; }
+ InjectedScriptHost* injectedScriptHost() { return m_injectedScriptHost.get(); }
+
+ void inspectedPageDestroyed();
+
+ bool enabled() const;
+
+ Page* inspectedPage() const { return m_inspectedPage; }
+ KURL inspectedURL() const;
+ KURL inspectedURLWithoutFragment() const;
+ void reloadPage(bool ignoreCache);
+ void showConsole();
+
+ void restoreInspectorStateFromCookie(const String& inspectorCookie);
+
+ void highlight(Node*);
+ void hideHighlight();
+ void inspect(Node*);
+ void highlightDOMNode(long nodeId);
+ void hideDOMNodeHighlight() { hideHighlight(); }
+
+ void highlightFrame(unsigned long frameId);
+ void hideFrameHighlight() { hideHighlight(); }
+
+ void setFrontend(InspectorFrontend*);
+ InspectorFrontend* frontend() const { return m_frontend; }
+ void disconnectFrontend();
+
+ InspectorResourceAgent* resourceAgent();
+
+ InspectorAgent* inspectorAgent() { return this; }
+ InspectorConsoleAgent* consoleAgent() { return m_consoleAgent.get(); }
+ InspectorCSSAgent* cssAgent() { return m_cssAgent.get(); }
+ InspectorDOMAgent* domAgent() { return m_domAgent.get(); }
+ InjectedScriptHost* injectedScriptAgent() { return m_injectedScriptHost.get(); }
+ InspectorRuntimeAgent* runtimeAgent() { return m_runtimeAgent.get(); }
+ InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); }
+#if ENABLE(DATABASE)
+ InspectorDatabaseAgent* databaseAgent() { return m_databaseAgent.get(); }
+#endif
+#if ENABLE(DOM_STORAGE)
+ InspectorDOMStorageAgent* domStorageAgent() { return m_domStorageAgent.get(); }
+#endif
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ InspectorBrowserDebuggerAgent* browserDebuggerAgent() const { return m_browserDebuggerAgent.get(); }
+ InspectorDebuggerAgent* debuggerAgent() const { return m_debuggerAgent.get(); }
+ InspectorProfilerAgent* profilerAgent() const { return m_profilerAgent.get(); }
+#endif
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ InspectorApplicationCacheAgent* applicationCacheAgent() { return m_applicationCacheAgent.get(); }
+#endif
+
+ bool handleMousePress();
+ bool searchingForNodeInPage() const;
+ void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
+
+ void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*);
+
+ void didCommitLoad(DocumentLoader*);
+
+ void startTimelineProfiler();
+ void stopTimelineProfiler();
+
+ void getCookies(RefPtr<InspectorArray>* cookies, WTF::String* cookiesString);
+ void deleteCookie(const String& cookieName, const String& domain);
+
+ void domContentLoadedEventFired(DocumentLoader*, const KURL&);
+ void loadEventFired(DocumentLoader*, const KURL&);
+
+#if ENABLE(WORKERS)
+ enum WorkerAction { WorkerCreated, WorkerDestroyed };
+
+ void postWorkerNotificationToFrontend(const InspectorWorkerResource&, WorkerAction);
+ void didCreateWorker(intptr_t, const String& url, bool isSharedWorker);
+ void didDestroyWorker(intptr_t);
+#endif
+
+#if ENABLE(DATABASE)
+ void didOpenDatabase(PassRefPtr<Database>, const String& domain, const String& name, const String& version);
+#endif
+
+#if ENABLE(DOM_STORAGE)
+ void didUseDOMStorage(StorageArea*, bool isLocalStorage, Frame*);
+#endif
+
+#if ENABLE(WEB_SOCKETS)
+ void didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
+ void willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest&);
+ void didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse&);
+ void didCloseWebSocket(unsigned long identifier);
+#endif
+
+ bool hasFrontend() const { return m_frontend; }
+
+ void drawNodeHighlight(GraphicsContext&) const;
+ void openInInspectedWindow(const String& url);
+ void drawElementTitle(GraphicsContext&, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings*) const;
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ bool isRecordingUserInitiatedProfile() const;
+ void startProfiling() { startUserInitiatedProfiling(); }
+ void startUserInitiatedProfiling();
+ void stopProfiling() { stopUserInitiatedProfiling(); }
+ void stopUserInitiatedProfiling();
+ void enableProfiler();
+ void disableProfiler();
+ bool profilerEnabled() const;
+
+ void showAndEnableDebugger();
+ void enableDebugger() { enableDebugger(false); }
+ void enableDebugger(bool eraseStickyBreakpoints);
+ void disableDebugger();
+ bool debuggerEnabled() const { return m_debuggerAgent; }
+ void resume();
+#endif
+
+ // Generic code called from custom implementations.
+ void evaluateForTestInFrontend(long testCallId, const String& script);
+
+ void addScriptToEvaluateOnLoad(const String& source);
+ void removeAllScriptsToEvaluateOnLoad();
+ void setInspectorExtensionAPI(const String& source);
+
+ InspectorState* state() { return m_state.get(); }
+
+ // InspectorAgent API
+ void getInspectorState(RefPtr<InspectorObject>* state);
+ void setMonitoringXHREnabled(bool enabled, bool* newState);
+ void populateScriptObjects();
+ // Following are used from InspectorBackend and internally.
+ void setSearchingForNode(bool enabled, bool* newState);
+ void didEvaluateForTestInFrontend(long callId, const String& jsonResult);
+
+ void setUserAgentOverride(const String& userAgent);
+ void applyUserAgentOverride(String* userAgent) const;
+
+private:
+ void showPanel(const String& panel);
+ void pushDataCollectedOffline();
+ void restoreDebugger(bool eraseStickyBreakpoints);
+ enum ProfilerRestoreAction {
+ ProfilerRestoreNoAction = 0,
+ ProfilerRestoreResetAgent = 1
+ };
+ void restoreProfiler(ProfilerRestoreAction);
+ void unbindAllResources();
+ void setSearchingForNode(bool enabled);
+
+ void releaseFrontendLifetimeAgents();
+ void createFrontendLifetimeAgents();
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ void toggleRecordButton(bool);
+#endif
+
+ PassRefPtr<InspectorObject> buildObjectForCookie(const Cookie&);
+ PassRefPtr<InspectorArray> buildArrayForCookies(ListHashSet<Cookie>&);
+
+ void focusNode();
+ bool isMainResourceLoader(DocumentLoader*, const KURL& requestUrl);
+
+ Page* m_inspectedPage;
+ InspectorClient* m_client;
+ InspectorFrontend* m_frontend;
+ OwnPtr<InspectorCSSAgent> m_cssAgent;
+ OwnPtr<InspectorDOMAgent> m_domAgent;
+
+#if ENABLE(DATABASE)
+ OwnPtr<InspectorDatabaseAgent> m_databaseAgent;
+#endif
+
+#if ENABLE(DOM_STORAGE)
+ OwnPtr<InspectorDOMStorageAgent> m_domStorageAgent;
+#endif
+
+ OwnPtr<InspectorTimelineAgent> m_timelineAgent;
+ OwnPtr<InspectorState> m_state;
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent;
+#endif
+
+ RefPtr<Node> m_highlightedNode;
+ RefPtr<Node> m_nodeToFocus;
+ RefPtr<InspectorResourceAgent> m_resourceAgent;
+ OwnPtr<InspectorRuntimeAgent> m_runtimeAgent;
+
+#if ENABLE(DATABASE)
+ typedef HashMap<int, RefPtr<InspectorDatabaseResource> > DatabaseResourcesMap;
+ DatabaseResourcesMap m_databaseResources;
+#endif
+#if ENABLE(DOM_STORAGE)
+ typedef HashMap<int, RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesMap;
+ DOMStorageResourcesMap m_domStorageResources;
+#endif
+
+ RefPtr<InjectedScriptHost> m_injectedScriptHost;
+ OwnPtr<InspectorConsoleAgent> m_consoleAgent;
+
+ Vector<pair<long, String> > m_pendingEvaluateTestCommands;
+ String m_requiredPanel;
+ Vector<String> m_scriptsToEvaluateOnLoad;
+ String m_inspectorExtensionAPI;
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ OwnPtr<InspectorDebuggerAgent> m_debuggerAgent;
+ OwnPtr<InspectorBrowserDebuggerAgent> m_browserDebuggerAgent;
+ OwnPtr<InspectorProfilerAgent> m_profilerAgent;
+#endif
+ String m_userAgentOverride;
+#if ENABLE(WORKERS)
+ typedef HashMap<intptr_t, RefPtr<InspectorWorkerResource> > WorkersMap;
+
+ WorkersMap m_workers;
+#endif
+};
+
+} // namespace WebCore
+
+#endif // !defined(InspectorAgent_h)
diff --git a/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp b/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp
index 1cca6fe..b38bb83 100644
--- a/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp
+++ b/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp
@@ -32,7 +32,7 @@
#include "DocumentLoader.h"
#include "Frame.h"
#include "FrameLoader.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "InspectorFrontend.h"
#include "InspectorValues.h"
#include "NetworkStateNotifier.h"
@@ -41,12 +41,17 @@
namespace WebCore {
-InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
- : m_inspectorController(inspectorController)
+InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(DocumentLoader* documentLoader, InspectorFrontend* frontend)
+ : m_documentLoader(documentLoader)
, m_frontend(frontend)
{
}
+void InspectorApplicationCacheAgent::didCommitLoad(DocumentLoader* documentLoader)
+{
+ m_documentLoader = documentLoader;
+}
+
void InspectorApplicationCacheAgent::updateApplicationCacheStatus(Frame* frame)
{
ApplicationCacheHost::Status status = frame->loader()->documentLoader()->applicationCacheHost()->status();
@@ -61,9 +66,8 @@ void InspectorApplicationCacheAgent::networkStateChanged()
void InspectorApplicationCacheAgent::getApplicationCaches(RefPtr<InspectorValue>* applicationCaches)
{
- DocumentLoader* documentLoader = m_inspectorController->inspectedPage()->mainFrame()->loader()->documentLoader();
- if (documentLoader) {
- ApplicationCacheHost* host = documentLoader->applicationCacheHost();
+ if (m_documentLoader) {
+ ApplicationCacheHost* host = m_documentLoader->applicationCacheHost();
ApplicationCacheHost::CacheInfo info = host->applicationCacheInfo();
ApplicationCacheHost::ResourceInfoList resources;
diff --git a/Source/WebCore/inspector/InspectorApplicationCacheAgent.h b/Source/WebCore/inspector/InspectorApplicationCacheAgent.h
index ac0acbf..33cee59 100644
--- a/Source/WebCore/inspector/InspectorApplicationCacheAgent.h
+++ b/Source/WebCore/inspector/InspectorApplicationCacheAgent.h
@@ -33,9 +33,10 @@
namespace WebCore {
+class DocumentLoader;
class Frame;
class InspectorArray;
-class InspectorController;
+class InspectorAgent;
class InspectorFrontend;
class InspectorObject;
class InspectorValue;
@@ -44,9 +45,11 @@ class ResourceResponse;
class InspectorApplicationCacheAgent {
WTF_MAKE_NONCOPYABLE(InspectorApplicationCacheAgent); WTF_MAKE_FAST_ALLOCATED;
public:
- InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend);
+ InspectorApplicationCacheAgent(DocumentLoader*, InspectorFrontend*);
~InspectorApplicationCacheAgent() { }
+ void didCommitLoad(DocumentLoader*);
+
// Backend to Frontend
void updateApplicationCacheStatus(Frame*);
void networkStateChanged();
@@ -59,7 +62,7 @@ private:
PassRefPtr<InspectorArray> buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList&);
PassRefPtr<InspectorObject> buildObjectForApplicationCacheResource(const ApplicationCacheHost::ResourceInfo&);
- InspectorController* m_inspectorController;
+ DocumentLoader* m_documentLoader;
InspectorFrontend* m_frontend;
};
diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
index 023dc49..5fe9937 100644
--- a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
+++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
@@ -35,7 +35,7 @@
#if ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER)
#include "HTMLElement.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "InspectorDOMAgent.h"
#include "InspectorDebuggerAgent.h"
#include "InspectorState.h"
@@ -61,26 +61,41 @@ const int domBreakpointDerivedTypeShift = 16;
namespace WebCore {
-InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent(InspectorController* inspectorController)
- : m_inspectorController(inspectorController)
+namespace BrowserDebuggerAgentState {
+static const char browserBreakpoints[] = "browserBreakpoints";
+}
+
+PassOwnPtr<InspectorBrowserDebuggerAgent> InspectorBrowserDebuggerAgent::create(InspectorAgent* inspectorAgent, bool eraseStickyBreakpoints)
+{
+ return adoptPtr(new InspectorBrowserDebuggerAgent(inspectorAgent, eraseStickyBreakpoints));
+}
+
+InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent(InspectorAgent* inspectorAgent, bool eraseStickyBreakpoints)
+ : m_inspectorAgent(inspectorAgent)
, m_hasXHRBreakpointWithEmptyURL(false)
{
+ if (eraseStickyBreakpoints)
+ inspectorAgent->state()->setObject(BrowserDebuggerAgentState::browserBreakpoints, InspectorObject::create());
}
InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent()
{
}
-void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url)
+void InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints)
+{
+ m_inspectorAgent->state()->setObject(BrowserDebuggerAgentState::browserBreakpoints, breakpoints);
+ inspectedURLChanged(m_inspectorAgent->inspectedURLWithoutFragment());
+}
+
+void InspectorBrowserDebuggerAgent::inspectedURLChanged(const String& url)
{
m_eventListenerBreakpoints.clear();
m_XHRBreakpoints.clear();
m_hasXHRBreakpointWithEmptyURL = false;
- RefPtr<InspectorObject> allBreakpoints = m_inspectorController->state()->getObject(InspectorState::browserBreakpoints);
- KURL urlCopy = url;
- urlCopy.removeFragmentIdentifier();
- RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(urlCopy);
+ RefPtr<InspectorObject> allBreakpoints = m_inspectorAgent->state()->getObject(BrowserDebuggerAgentState::browserBreakpoints);
+ RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url);
if (!breakpoints)
return;
for (unsigned i = 0; i < breakpoints->length(); ++i)
@@ -89,10 +104,6 @@ void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url)
void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint)
{
- DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener"));
- DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS"));
- DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR"));
-
if (!breakpoint)
return;
String type;
@@ -105,25 +116,14 @@ void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<Inspector
if (!condition)
return;
- if (type == eventListenerBreakpointType) {
+ if (type == eventListenerNativeBreakpointType) {
if (!enabled)
return;
String eventName;
if (!condition->getString("eventName", &eventName))
return;
setEventListenerBreakpoint(eventName);
- } else if (type == javaScriptBreakpointType && m_inspectorController->debuggerAgent()) {
- String url;
- if (!condition->getString("url", &url))
- return;
- double lineNumber;
- if (!condition->getNumber("lineNumber", &lineNumber))
- return;
- String javaScriptCondition;
- if (!condition->getString("condition", &javaScriptCondition))
- return;
- m_inspectorController->debuggerAgent()->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled);
- } else if (type == xhrBreakpointType) {
+ } else if (type == xhrNativeBreakpointType) {
if (!enabled)
return;
String url;
@@ -178,7 +178,7 @@ void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node)
void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type)
{
- Node* node = m_inspectorController->domAgent()->nodeForId(nodeId);
+ Node* node = m_inspectorAgent->domAgent()->nodeForId(nodeId);
if (!node)
return;
@@ -192,7 +192,7 @@ void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type)
void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type)
{
- Node* node = m_inspectorController->domAgent()->nodeForId(nodeId);
+ Node* node = m_inspectorAgent->domAgent()->nodeForId(nodeId);
if (!node)
return;
@@ -211,7 +211,7 @@ void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type)
void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
if (!debuggerAgent)
return;
@@ -225,7 +225,7 @@ void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
if (!debuggerAgent)
return;
@@ -244,7 +244,7 @@ void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node)
void InspectorBrowserDebuggerAgent::willModifyDOMAttr(Element* element)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
if (!debuggerAgent)
return;
@@ -264,7 +264,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br
if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) {
// For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.
// Target node may be unknown to frontend, so we need to push it first.
- long targetNodeId = m_inspectorController->domAgent()->pushNodePathToFrontend(target);
+ long targetNodeId = m_inspectorAgent->domAgent()->pushNodePathToFrontend(target);
ASSERT(targetNodeId);
description->setNumber("targetNodeId", targetNodeId);
@@ -281,7 +281,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br
description->setBoolean("insertion", insertion);
}
- long breakpointOwnerNodeId = m_inspectorController->domAgent()->pushNodePathToFrontend(breakpointOwner);
+ long breakpointOwnerNodeId = m_inspectorAgent->domAgent()->pushNodePathToFrontend(breakpointOwner);
ASSERT(breakpointOwnerNodeId);
description->setNumber("nodeId", breakpointOwnerNodeId);
description->setNumber("type", breakpointType);
@@ -314,7 +314,7 @@ void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_
void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
if (!debuggerAgent)
return;
@@ -349,7 +349,7 @@ void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(const String& url)
void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
if (!debuggerAgent)
return;
diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
index 0ffa85c..fac54bb 100644
--- a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
+++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
@@ -44,22 +44,19 @@
namespace WebCore {
class Element;
-class InspectorController;
+class InspectorAgent;
class InspectorObject;
-class KURL;
class Node;
class InspectorBrowserDebuggerAgent {
WTF_MAKE_NONCOPYABLE(InspectorBrowserDebuggerAgent);
public:
- static PassOwnPtr<InspectorBrowserDebuggerAgent> create(InspectorController* inspectorController)
- {
- return adoptPtr(new InspectorBrowserDebuggerAgent(inspectorController));
- }
+ static PassOwnPtr<InspectorBrowserDebuggerAgent> create(InspectorAgent*, bool eraseStickyBreakpoints);
virtual ~InspectorBrowserDebuggerAgent();
- void inspectedURLChanged(const KURL&);
+ void setAllBrowserBreakpoints(PassRefPtr<InspectorObject>);
+ void inspectedURLChanged(const String& url);
// BrowserDebugger API for InspectorFrontend
void setXHRBreakpoint(const String& url);
@@ -79,7 +76,7 @@ public:
void pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous);
private:
- InspectorBrowserDebuggerAgent(InspectorController*);
+ InspectorBrowserDebuggerAgent(InspectorAgent*, bool eraseStickyBreakpoints);
void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint);
@@ -88,7 +85,7 @@ private:
bool hasBreakpoint(Node*, long type);
void discardBindings();
- InspectorController* m_inspectorController;
+ InspectorAgent* m_inspectorAgent;
HashMap<Node*, uint32_t> m_domBreakpoints;
HashSet<String> m_eventListenerBreakpoints;
HashSet<String> m_XHRBreakpoints;
diff --git a/Source/WebCore/inspector/InspectorCSSAgent.cpp b/Source/WebCore/inspector/InspectorCSSAgent.cpp
index bacf741..f49f89c 100644
--- a/Source/WebCore/inspector/InspectorCSSAgent.cpp
+++ b/Source/WebCore/inspector/InspectorCSSAgent.cpp
@@ -42,10 +42,10 @@
#include "InspectorFrontend.h"
#include "InspectorValues.h"
#include "Node.h"
+#include "NodeList.h"
#include "StyleSheetList.h"
#include <wtf/HashSet.h>
-#include <wtf/ListHashSet.h>
#include <wtf/Vector.h>
#include <wtf/text/CString.h>
@@ -173,7 +173,7 @@ void InspectorCSSAgent::reset()
m_documentToInspectorStyleSheet.clear();
}
-void InspectorCSSAgent::getStylesForNode2(long nodeId, RefPtr<InspectorValue>* result)
+void InspectorCSSAgent::getStylesForNode(long nodeId, RefPtr<InspectorValue>* result)
{
Element* element = elementForId(nodeId);
if (!element)
@@ -228,7 +228,7 @@ void InspectorCSSAgent::getStylesForNode2(long nodeId, RefPtr<InspectorValue>* r
*result = resultObject.release();
}
-void InspectorCSSAgent::getInlineStyleForNode2(long nodeId, RefPtr<InspectorValue>* style)
+void InspectorCSSAgent::getInlineStyleForNode(long nodeId, RefPtr<InspectorValue>* style)
{
Element* element = elementForId(nodeId);
if (!element)
@@ -241,7 +241,7 @@ void InspectorCSSAgent::getInlineStyleForNode2(long nodeId, RefPtr<InspectorValu
*style = styleSheet->buildObjectForStyle(element->style());
}
-void InspectorCSSAgent::getComputedStyleForNode2(long nodeId, RefPtr<InspectorValue>* style)
+void InspectorCSSAgent::getComputedStyleForNode(long nodeId, RefPtr<InspectorValue>* style)
{
Element* element = elementForId(nodeId);
if (!element)
@@ -252,10 +252,10 @@ void InspectorCSSAgent::getComputedStyleForNode2(long nodeId, RefPtr<InspectorVa
*style = inspectorStyle->buildObjectForStyle();
}
-void InspectorCSSAgent::getAllStyles2(RefPtr<InspectorArray>* styles)
+void InspectorCSSAgent::getAllStyles(RefPtr<InspectorArray>* styles)
{
- const ListHashSet<RefPtr<Document> >& documents = m_domAgent->documents();
- for (ListHashSet<RefPtr<Document> >::const_iterator it = documents.begin(); it != documents.end(); ++it) {
+ Vector<Document*> documents = m_domAgent->documents();
+ for (Vector<Document*>::iterator it = documents.begin(); it != documents.end(); ++it) {
StyleSheetList* list = (*it)->styleSheets();
for (unsigned i = 0; i < list->length(); ++i) {
StyleSheet* styleSheet = list->item(i);
@@ -267,7 +267,7 @@ void InspectorCSSAgent::getAllStyles2(RefPtr<InspectorArray>* styles)
}
}
-void InspectorCSSAgent::getStyleSheet2(const String& styleSheetId, RefPtr<InspectorValue>* styleSheetObject)
+void InspectorCSSAgent::getStyleSheet(const String& styleSheetId, RefPtr<InspectorValue>* styleSheetObject)
{
InspectorStyleSheet* inspectorStyleSheet = styleSheetForId(styleSheetId);
if (!inspectorStyleSheet)
@@ -276,7 +276,7 @@ void InspectorCSSAgent::getStyleSheet2(const String& styleSheetId, RefPtr<Inspec
*styleSheetObject = inspectorStyleSheet->buildObjectForStyleSheet();
}
-void InspectorCSSAgent::getStyleSheetText2(const String& styleSheetId, String* url, String* result)
+void InspectorCSSAgent::getStyleSheetText(const String& styleSheetId, String* url, String* result)
{
InspectorStyleSheet* inspectorStyleSheet = styleSheetForId(styleSheetId);
if (!inspectorStyleSheet)
@@ -285,7 +285,7 @@ void InspectorCSSAgent::getStyleSheetText2(const String& styleSheetId, String* u
inspectorStyleSheet->text(result);
}
-void InspectorCSSAgent::setStyleSheetText2(const String& styleSheetId, const String& text, bool* success)
+void InspectorCSSAgent::setStyleSheetText(const String& styleSheetId, const String& text, bool* success)
{
InspectorStyleSheet* inspectorStyleSheet = styleSheetForId(styleSheetId);
if (!inspectorStyleSheet) {
@@ -298,7 +298,7 @@ void InspectorCSSAgent::setStyleSheetText2(const String& styleSheetId, const Str
inspectorStyleSheet->reparseStyleSheet(text);
}
-void InspectorCSSAgent::setPropertyText2(const RefPtr<InspectorObject>& fullStyleId, long propertyIndex, const String& text, bool overwrite, RefPtr<InspectorValue>* result)
+void InspectorCSSAgent::setPropertyText(const RefPtr<InspectorObject>& fullStyleId, long propertyIndex, const String& text, bool overwrite, RefPtr<InspectorValue>* result)
{
InspectorCSSId compoundId(fullStyleId);
ASSERT(!compoundId.isEmpty());
@@ -312,7 +312,7 @@ void InspectorCSSAgent::setPropertyText2(const RefPtr<InspectorObject>& fullStyl
*result = inspectorStyleSheet->buildObjectForStyle(inspectorStyleSheet->styleForId(compoundId));
}
-void InspectorCSSAgent::toggleProperty2(const RefPtr<InspectorObject>& fullStyleId, long propertyIndex, bool disable, RefPtr<InspectorValue>* result)
+void InspectorCSSAgent::toggleProperty(const RefPtr<InspectorObject>& fullStyleId, long propertyIndex, bool disable, RefPtr<InspectorValue>* result)
{
InspectorCSSId compoundId(fullStyleId);
ASSERT(!compoundId.isEmpty());
@@ -326,7 +326,7 @@ void InspectorCSSAgent::toggleProperty2(const RefPtr<InspectorObject>& fullStyle
*result = inspectorStyleSheet->buildObjectForStyle(inspectorStyleSheet->styleForId(compoundId));
}
-void InspectorCSSAgent::setRuleSelector2(const RefPtr<InspectorObject>& fullRuleId, const String& selector, RefPtr<InspectorValue>* result)
+void InspectorCSSAgent::setRuleSelector(const RefPtr<InspectorObject>& fullRuleId, const String& selector, RefPtr<InspectorValue>* result)
{
InspectorCSSId compoundId(fullRuleId);
ASSERT(!compoundId.isEmpty());
@@ -342,7 +342,7 @@ void InspectorCSSAgent::setRuleSelector2(const RefPtr<InspectorObject>& fullRule
*result = inspectorStyleSheet->buildObjectForRule(inspectorStyleSheet->ruleForId(compoundId));
}
-void InspectorCSSAgent::addRule2(const long contextNodeId, const String& selector, RefPtr<InspectorValue>* result)
+void InspectorCSSAgent::addRule(const long contextNodeId, const String& selector, RefPtr<InspectorValue>* result)
{
Node* node = m_domAgent->nodeForId(contextNodeId);
if (!node)
diff --git a/Source/WebCore/inspector/InspectorCSSAgent.h b/Source/WebCore/inspector/InspectorCSSAgent.h
index 619f958..12b3f9b 100644
--- a/Source/WebCore/inspector/InspectorCSSAgent.h
+++ b/Source/WebCore/inspector/InspectorCSSAgent.h
@@ -61,17 +61,17 @@ public:
void setDOMAgent(InspectorDOMAgent* domAgent);
void reset();
- void getStylesForNode2(long nodeId, RefPtr<InspectorValue>* result);
- void getInlineStyleForNode2(long nodeId, RefPtr<InspectorValue>* style);
- void getComputedStyleForNode2(long nodeId, RefPtr<InspectorValue>* style);
- void getAllStyles2(RefPtr<InspectorArray>* styles);
- void getStyleSheet2(const String& styleSheetId, RefPtr<InspectorValue>* result);
- void getStyleSheetText2(const String& styleSheetId, String* url, String* result);
- void setStyleSheetText2(const String& styleSheetId, const String& text, bool* success);
- void setPropertyText2(const RefPtr<InspectorObject>& styleId, long propertyIndex, const String& text, bool overwrite, RefPtr<InspectorValue>* result);
- void toggleProperty2(const RefPtr<InspectorObject>& styleId, long propertyIndex, bool disable, RefPtr<InspectorValue>* result);
- void setRuleSelector2(const RefPtr<InspectorObject>& ruleId, const String& selector, RefPtr<InspectorValue>* result);
- void addRule2(const long contextNodeId, const String& selector, RefPtr<InspectorValue>* result);
+ void getStylesForNode(long nodeId, RefPtr<InspectorValue>* result);
+ void getInlineStyleForNode(long nodeId, RefPtr<InspectorValue>* style);
+ void getComputedStyleForNode(long nodeId, RefPtr<InspectorValue>* style);
+ void getAllStyles(RefPtr<InspectorArray>* styles);
+ void getStyleSheet(const String& styleSheetId, RefPtr<InspectorValue>* result);
+ void getStyleSheetText(const String& styleSheetId, String* url, String* result);
+ void setStyleSheetText(const String& styleSheetId, const String& text, bool* success);
+ void setPropertyText(const RefPtr<InspectorObject>& styleId, long propertyIndex, const String& text, bool overwrite, RefPtr<InspectorValue>* result);
+ void toggleProperty(const RefPtr<InspectorObject>& styleId, long propertyIndex, bool disable, RefPtr<InspectorValue>* result);
+ void setRuleSelector(const RefPtr<InspectorObject>& ruleId, const String& selector, RefPtr<InspectorValue>* result);
+ void addRule(const long contextNodeId, const String& selector, RefPtr<InspectorValue>* result);
void getSupportedCSSProperties(RefPtr<InspectorArray>* result);
void querySelectorAll(const long nodeId, const String& selector, RefPtr<InspectorArray>* result);
diff --git a/Source/WebCore/inspector/InspectorClient.h b/Source/WebCore/inspector/InspectorClient.h
index 3b8007e..d24ce4d 100644
--- a/Source/WebCore/inspector/InspectorClient.h
+++ b/Source/WebCore/inspector/InspectorClient.h
@@ -45,9 +45,6 @@ public:
virtual void highlight(Node*) = 0;
virtual void hideHighlight() = 0;
- virtual void populateSetting(const String& key, String* value) = 0;
- virtual void storeSetting(const String& key, const String& value) = 0;
-
virtual bool sendMessageToFrontend(const String& message) = 0;
// Navigation can cause some WebKit implementations to change the view / page / inspector controller instance.
diff --git a/Source/WebCore/inspector/InspectorConsoleAgent.cpp b/Source/WebCore/inspector/InspectorConsoleAgent.cpp
index 2c837f3..7d11a7a 100644
--- a/Source/WebCore/inspector/InspectorConsoleAgent.cpp
+++ b/Source/WebCore/inspector/InspectorConsoleAgent.cpp
@@ -30,10 +30,9 @@
#include "Console.h"
#include "ConsoleMessage.h"
#include "InjectedScriptHost.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "InspectorDOMAgent.h"
#include "InspectorFrontend.h"
-#include "InspectorSettings.h"
#include "InspectorState.h"
#include "ResourceError.h"
#include "ResourceResponse.h"
@@ -50,8 +49,13 @@ namespace WebCore {
static const unsigned maximumConsoleMessages = 1000;
static const unsigned expireConsoleMessagesStep = 100;
-InspectorConsoleAgent::InspectorConsoleAgent(InspectorController* inspectorController)
- : m_inspectorController(inspectorController)
+namespace ConsoleAgentState {
+static const char monitoringXHR[] = "monitoringXHR";
+static const char consoleMessagesEnabled[] = "consoleMessagesEnabled";
+}
+
+InspectorConsoleAgent::InspectorConsoleAgent(InspectorAgent* inspectorAgent)
+ : m_inspectorAgent(inspectorAgent)
, m_frontend(0)
, m_previousMessage(0)
, m_expiredConsoleMessageCount(0)
@@ -60,7 +64,7 @@ InspectorConsoleAgent::InspectorConsoleAgent(InspectorController* inspectorContr
InspectorConsoleAgent::~InspectorConsoleAgent()
{
- m_inspectorController = 0;
+ m_inspectorAgent = 0;
}
void InspectorConsoleAgent::setConsoleMessagesEnabled(bool enabled, bool* newState)
@@ -74,8 +78,8 @@ void InspectorConsoleAgent::clearConsoleMessages()
m_consoleMessages.clear();
m_expiredConsoleMessageCount = 0;
m_previousMessage = 0;
- m_inspectorController->injectedScriptHost()->releaseWrapperObjectGroup(0 /* release the group in all scripts */, "console");
- if (InspectorDOMAgent* domAgent = m_inspectorController->domAgent())
+ m_inspectorAgent->injectedScriptHost()->releaseWrapperObjectGroup(0 /* release the group in all scripts */, "console");
+ if (InspectorDOMAgent* domAgent = m_inspectorAgent->domAgent())
domAgent->releaseDanglingNodes();
if (m_frontend)
m_frontend->consoleMessagesCleared();
@@ -95,14 +99,14 @@ void InspectorConsoleAgent::setFrontend(InspectorFrontend* frontend)
void InspectorConsoleAgent::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
{
- if (!m_inspectorController->enabled())
+ if (!m_inspectorAgent->enabled())
return;
addConsoleMessage(new ConsoleMessage(source, type, level, message, arguments, callStack));
}
void InspectorConsoleAgent::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
{
- if (!m_inspectorController->enabled())
+ if (!m_inspectorAgent->enabled())
return;
addConsoleMessage(new ConsoleMessage(source, type, level, message, lineNumber, sourceID));
}
@@ -163,15 +167,15 @@ void InspectorConsoleAgent::count(PassRefPtr<ScriptArguments> arguments, PassRef
void InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest(const String& url, const String& sendURL, unsigned sendLineNumber)
{
- if (!m_inspectorController->enabled())
+ if (!m_inspectorAgent->enabled())
return;
- if (m_inspectorController->state()->getBoolean(InspectorState::monitoringXHR))
+ if (m_inspectorAgent->state()->getBoolean(ConsoleAgentState::monitoringXHR))
addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + url + "\".", sendLineNumber, sendURL);
}
void InspectorConsoleAgent::didReceiveResponse(unsigned long identifier, const ResourceResponse& response)
{
- if (!m_inspectorController->enabled())
+ if (!m_inspectorAgent->enabled())
return;
if (response.httpStatusCode() >= 400) {
@@ -182,7 +186,7 @@ void InspectorConsoleAgent::didReceiveResponse(unsigned long identifier, const R
void InspectorConsoleAgent::didFailLoading(unsigned long identifier, const ResourceError& error)
{
- if (!m_inspectorController->enabled())
+ if (!m_inspectorAgent->enabled())
return;
String message = "Failed to load resource";
@@ -193,40 +197,36 @@ void InspectorConsoleAgent::didFailLoading(unsigned long identifier, const Resou
void InspectorConsoleAgent::setMonitoringXHREnabled(bool enabled)
{
- m_inspectorController->state()->setBoolean(InspectorState::monitoringXHR, enabled);
- m_inspectorController->settings()->setBoolean(InspectorSettings::MonitoringXHREnabled, enabled);
- if (m_frontend)
- m_frontend->monitoringXHRStateChanged(enabled);
+ m_inspectorAgent->state()->setBoolean(ConsoleAgentState::monitoringXHR, enabled);
}
void InspectorConsoleAgent::setConsoleMessagesEnabled(bool enabled)
{
- m_inspectorController->state()->setBoolean(InspectorState::consoleMessagesEnabled, enabled);
+ m_inspectorAgent->state()->setBoolean(ConsoleAgentState::consoleMessagesEnabled, enabled);
if (!enabled || !m_frontend)
return;
- m_frontend->monitoringXHRStateChanged(m_inspectorController->state()->getBoolean(InspectorState::monitoringXHR));
if (m_expiredConsoleMessageCount)
m_frontend->updateConsoleMessageExpiredCount(m_expiredConsoleMessageCount);
unsigned messageCount = m_consoleMessages.size();
for (unsigned i = 0; i < messageCount; ++i)
- m_consoleMessages[i]->addToFrontend(m_frontend, m_inspectorController->injectedScriptHost());
+ m_consoleMessages[i]->addToFrontend(m_frontend, m_inspectorAgent->injectedScriptHost());
}
void InspectorConsoleAgent::addConsoleMessage(PassOwnPtr<ConsoleMessage> consoleMessage)
{
- ASSERT(m_inspectorController->enabled());
+ ASSERT(m_inspectorAgent->enabled());
ASSERT_ARG(consoleMessage, consoleMessage);
if (m_previousMessage && m_previousMessage->isEqual(consoleMessage.get())) {
m_previousMessage->incrementCount();
- if (m_inspectorController->state()->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend)
+ if (m_inspectorAgent->state()->getBoolean(ConsoleAgentState::consoleMessagesEnabled) && m_frontend)
m_previousMessage->updateRepeatCountInConsole(m_frontend);
} else {
m_previousMessage = consoleMessage.get();
m_consoleMessages.append(consoleMessage);
- if (m_inspectorController->state()->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend)
- m_previousMessage->addToFrontend(m_frontend, m_inspectorController->injectedScriptHost());
+ if (m_inspectorAgent->state()->getBoolean(ConsoleAgentState::consoleMessagesEnabled) && m_frontend)
+ m_previousMessage->addToFrontend(m_frontend, m_inspectorAgent->injectedScriptHost());
}
if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) {
diff --git a/Source/WebCore/inspector/InspectorConsoleAgent.h b/Source/WebCore/inspector/InspectorConsoleAgent.h
index 411f709..10ffb02 100644
--- a/Source/WebCore/inspector/InspectorConsoleAgent.h
+++ b/Source/WebCore/inspector/InspectorConsoleAgent.h
@@ -37,7 +37,7 @@ namespace WebCore {
#if ENABLE(INSPECTOR)
class ConsoleMessage;
-class InspectorController;
+class InspectorAgent;
class InspectorFrontend;
class InspectorState;
class ResourceError;
@@ -49,7 +49,7 @@ class ScriptProfile;
class InspectorConsoleAgent {
WTF_MAKE_NONCOPYABLE(InspectorConsoleAgent);
public:
- InspectorConsoleAgent(InspectorController*);
+ InspectorConsoleAgent(InspectorAgent*);
~InspectorConsoleAgent();
void setConsoleMessagesEnabled(bool enabled, bool* newState);
@@ -77,7 +77,7 @@ private:
void setConsoleMessagesEnabled(bool);
void addConsoleMessage(PassOwnPtr<ConsoleMessage>);
- InspectorController* m_inspectorController;
+ InspectorAgent* m_inspectorAgent;
InspectorFrontend* m_frontend;
ConsoleMessage* m_previousMessage;
Vector<OwnPtr<ConsoleMessage> > m_consoleMessages;
diff --git a/Source/WebCore/inspector/InspectorConsoleInstrumentation.h b/Source/WebCore/inspector/InspectorConsoleInstrumentation.h
new file mode 100644
index 0000000..8326741
--- /dev/null
+++ b/Source/WebCore/inspector/InspectorConsoleInstrumentation.h
@@ -0,0 +1,127 @@
+/*
+* Copyright (C) 2011 Google Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of Google Inc. nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef InspectorConsoleInstrumentation_h
+#define InspectorConsoleInstrumentation_h
+
+#include "InspectorInstrumentation.h"
+#include "ScriptArguments.h"
+#include "ScriptCallStack.h"
+#include <wtf/PassRefPtr.h>
+
+namespace WebCore {
+
+inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ addMessageToConsoleImpl(inspectorAgent, source, type, level, message, arguments, callStack);
+#endif
+}
+
+inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ addMessageToConsoleImpl(inspectorAgent, source, type, level, message, lineNumber, sourceID);
+#endif
+}
+
+inline void InspectorInstrumentation::consoleCount(Page* page, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> stack)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ consoleCountImpl(inspectorAgent, arguments, stack);
+#endif
+}
+
+inline void InspectorInstrumentation::startConsoleTiming(Page* page, const String& title)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ startConsoleTimingImpl(inspectorAgent, title);
+#endif
+}
+
+inline void InspectorInstrumentation::stopConsoleTiming(Page* page, const String& title, PassRefPtr<ScriptCallStack> stack)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ stopConsoleTimingImpl(inspectorAgent, title, stack);
+#endif
+}
+
+inline void InspectorInstrumentation::consoleMarkTimeline(Page* page, PassRefPtr<ScriptArguments> arguments)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
+ consoleMarkTimelineImpl(inspectorAgent, arguments);
+#endif
+}
+
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+inline void InspectorInstrumentation::addStartProfilingMessageToConsole(Page* page, const String& title, unsigned lineNumber, const String& sourceURL)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ addStartProfilingMessageToConsoleImpl(inspectorAgent, title, lineNumber, sourceURL);
+#endif
+}
+
+inline void InspectorInstrumentation::addProfile(Page* page, RefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ addProfileImpl(inspectorAgent, profile, callStack);
+#endif
+}
+
+inline bool InspectorInstrumentation::profilerEnabled(Page* page)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ return profilerEnabledImpl(inspectorAgent);
+#endif
+ return false;
+}
+
+inline String InspectorInstrumentation::getCurrentUserInitiatedProfileName(Page* page, bool incrementProfileNumber)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ return InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(inspectorAgent, incrementProfileNumber);
+#endif
+ return "";
+}
+#endif
+
+} // namespace WebCore
+
+#endif // !defined(InspectorConsoleInstrumentation_h)
diff --git a/Source/WebCore/inspector/InspectorController.cpp b/Source/WebCore/inspector/InspectorController.cpp
index 8533a5f..426e5f3 100644
--- a/Source/WebCore/inspector/InspectorController.cpp
+++ b/Source/WebCore/inspector/InspectorController.cpp
@@ -1,30 +1,31 @@
/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
+ * Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * modification, are permitted provided that the following conditions are
+ * met:
*
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
@@ -32,307 +33,42 @@
#if ENABLE(INSPECTOR)
-#include "CachedResource.h"
-#include "CachedResourceLoader.h"
-#include "Chrome.h"
-#include "Cookie.h"
-#include "CookieJar.h"
-#include "DOMWindow.h"
-#include "DOMWrapperWorld.h"
-#include "Document.h"
-#include "DocumentLoader.h"
-#include "Element.h"
-#include "FloatConversion.h"
-#include "FloatQuad.h"
-#include "FloatRect.h"
#include "Frame.h"
-#include "FrameLoadRequest.h"
-#include "FrameLoader.h"
-#include "FrameTree.h"
-#include "FrameView.h"
#include "GraphicsContext.h"
-#include "HTMLFrameOwnerElement.h"
-#include "HTTPHeaderMap.h"
-#include "HitTestResult.h"
-#include "InjectedScript.h"
#include "InjectedScriptHost.h"
+#include "InspectorAgent.h"
#include "InspectorBackendDispatcher.h"
-#include "InspectorBrowserDebuggerAgent.h"
-#include "InspectorCSSAgent.h"
-#include "InspectorClient.h"
-#include "InspectorConsoleAgent.h"
-#include "InspectorDOMAgent.h"
-#include "InspectorDOMStorageResource.h"
-#include "InspectorDatabaseResource.h"
#include "InspectorDebuggerAgent.h"
+#include "InspectorClient.h"
#include "InspectorFrontend.h"
#include "InspectorFrontendClient.h"
#include "InspectorInstrumentation.h"
-#include "InspectorProfilerAgent.h"
-#include "InspectorResourceAgent.h"
-#include "InspectorRuntimeAgent.h"
-#include "InspectorSettings.h"
-#include "InspectorState.h"
-#include "InspectorTimelineAgent.h"
-#include "InspectorValues.h"
-#include "InspectorWorkerResource.h"
-#include "IntRect.h"
#include "Page.h"
-#include "ProgressTracker.h"
-#include "Range.h"
-#include "RenderInline.h"
-#include "ResourceRequest.h"
-#include "ResourceResponse.h"
-#include "ScriptArguments.h"
-#include "ScriptCallStack.h"
-#include "ScriptFunctionCall.h"
#include "ScriptObject.h"
-#include "ScriptProfile.h"
-#include "ScriptProfiler.h"
-#include "ScriptSourceCode.h"
-#include "ScriptState.h"
-#include "SecurityOrigin.h"
#include "Settings.h"
-#include "SharedBuffer.h"
-#include "TextEncoding.h"
-#include "TextIterator.h"
-#include "TextRun.h"
-#include "UserGestureIndicator.h"
-#include "WindowFeatures.h"
-#include <wtf/text/StringConcatenate.h>
-#include <wtf/CurrentTime.h>
-#include <wtf/ListHashSet.h>
-#include <wtf/RefCounted.h>
-#include <wtf/StdLibExtras.h>
-#include <wtf/UnusedParam.h>
-
-#if ENABLE(DATABASE)
-#include "Database.h"
-#include "InspectorDatabaseAgent.h"
-#endif
-
-#if ENABLE(DOM_STORAGE)
-#include "InspectorDOMStorageAgent.h"
-#include "Storage.h"
-#include "StorageArea.h"
-#endif
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
-#include "InspectorApplicationCacheAgent.h"
-#endif
-
-#if ENABLE(FILE_SYSTEM)
-#include "InspectorFileSystemAgent.h"
-#endif
-
-using namespace std;
namespace WebCore {
-const char* const InspectorController::ElementsPanel = "elements";
-const char* const InspectorController::ConsolePanel = "console";
-const char* const InspectorController::ScriptsPanel = "scripts";
-const char* const InspectorController::ProfilesPanel = "profiles";
-
-InspectorController::InspectorController(Page* page, InspectorClient* client)
- : m_inspectedPage(page)
- , m_client(client)
+InspectorController::InspectorController(Page* page, InspectorClient* inspectorClient)
+ : m_inspectorAgent(new InspectorAgent(page, inspectorClient))
+ , m_inspectorBackendDispatcher(new InspectorBackendDispatcher(m_inspectorAgent.get()))
+ , m_inspectorClient(inspectorClient)
, m_openingFrontend(false)
- , m_cssAgent(new InspectorCSSAgent())
- , m_state(new InspectorState(client))
- , m_inspectorBackendDispatcher(new InspectorBackendDispatcher(this))
- , m_injectedScriptHost(InjectedScriptHost::create(this))
- , m_consoleAgent(new InspectorConsoleAgent(this))
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- , m_attachDebuggerWhenShown(false)
- , m_profilerAgent(InspectorProfilerAgent::create(this))
-#endif
{
- ASSERT_ARG(page, page);
- ASSERT_ARG(client, client);
}
InspectorController::~InspectorController()
{
- // These should have been cleared in inspectedPageDestroyed().
- ASSERT(!m_client);
- ASSERT(!m_inspectedPage);
- ASSERT(!m_highlightedNode);
-}
-
-void InspectorController::inspectedPageDestroyed()
-{
- if (m_frontend)
- m_frontend->disconnectFromBackend();
-
- hideHighlight();
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- m_debuggerAgent.clear();
- m_browserDebuggerAgent.clear();
-#endif
-
- ASSERT(m_inspectedPage);
- m_inspectedPage = 0;
-
- releaseFrontendLifetimeAgents();
- m_injectedScriptHost->disconnectController();
-
- m_client->inspectorDestroyed();
- m_client = 0;
-}
-
-bool InspectorController::enabled() const
-{
- if (!m_inspectedPage)
- return false;
- return m_inspectedPage->settings()->developerExtrasEnabled();
-}
-
-bool InspectorController::inspectorStartsAttached()
-{
- return m_settings->getBoolean(InspectorSettings::InspectorStartsAttached);
-}
-
-void InspectorController::setInspectorStartsAttached(bool attached)
-{
- m_settings->setBoolean(InspectorSettings::InspectorStartsAttached, attached);
-}
-
-void InspectorController::setInspectorAttachedHeight(long height)
-{
- m_settings->setLong(InspectorSettings::InspectorAttachedHeight, height);
-}
-
-long InspectorController::inspectorAttachedHeight() const
-{
- return m_settings->getLong(InspectorSettings::InspectorAttachedHeight);
-}
-
-bool InspectorController::searchingForNodeInPage() const
-{
- return m_state->getBoolean(InspectorState::searchingForNode);
-}
-
-void InspectorController::restoreInspectorStateFromCookie(const String& inspectorStateCookie)
-{
- m_state->restoreFromInspectorCookie(inspectorStateCookie);
-
- if (!m_frontend) {
- connectFrontend();
- m_frontend->frontendReused();
- m_frontend->inspectedURLChanged(inspectedURL().string());
- m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
- pushDataCollectedOffline();
- }
-
- m_resourceAgent = InspectorResourceAgent::restore(m_inspectedPage, m_state.get(), m_frontend.get());
-
- if (m_state->getBoolean(InspectorState::timelineProfilerEnabled))
- startTimelineProfiler();
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- restoreDebugger();
- restoreProfiler(ProfilerRestoreResetAgent);
- if (m_state->getBoolean(InspectorState::userInitiatedProfiling))
- startUserInitiatedProfiling();
-#endif
-}
-
-void InspectorController::inspect(Node* node)
-{
- if (!enabled())
- return;
-
- show();
-
- if (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE)
- node = node->parentNode();
- m_nodeToFocus = node;
-
- if (!m_frontend)
- return;
-
- focusNode();
-}
-
-void InspectorController::focusNode()
-{
- if (!enabled())
- return;
-
- ASSERT(m_frontend);
- ASSERT(m_nodeToFocus);
-
- long id = m_domAgent->pushNodePathToFrontend(m_nodeToFocus.get());
- m_frontend->updateFocusedNode(id);
- m_nodeToFocus = 0;
-}
-
-void InspectorController::highlight(Node* node)
-{
- if (!enabled())
- return;
- ASSERT_ARG(node, node);
- m_highlightedNode = node;
- m_client->highlight(node);
-}
-
-void InspectorController::highlightDOMNode(long nodeId)
-{
- Node* node = 0;
- if (m_domAgent && (node = m_domAgent->nodeForId(nodeId)))
- highlight(node);
-}
-
-void InspectorController::highlightFrame(unsigned long frameId)
-{
- Frame* mainFrame = m_inspectedPage->mainFrame();
- for (Frame* frame = mainFrame; frame; frame = frame->tree()->traverseNext(mainFrame)) {
- if (reinterpret_cast<uintptr_t>(frame) == frameId && frame->ownerElement()) {
- highlight(frame->ownerElement());
- return;
- }
- }
-}
-
-void InspectorController::hideHighlight()
-{
- if (!enabled())
- return;
- m_highlightedNode = 0;
- m_client->hideHighlight();
}
-void InspectorController::mouseDidMoveOverElement(const HitTestResult& result, unsigned)
+void InspectorController::setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> inspectorFrontendClient)
{
- if (!enabled() || !searchingForNodeInPage())
- return;
-
- Node* node = result.innerNode();
- while (node && node->nodeType() == Node::TEXT_NODE)
- node = node->parentNode();
- if (node)
- highlight(node);
-}
-
-bool InspectorController::handleMousePress()
-{
- if (!enabled() || !searchingForNodeInPage())
- return false;
-
- if (m_highlightedNode) {
- RefPtr<Node> node = m_highlightedNode;
- setSearchingForNode(false);
- inspect(node.get());
- }
- return true;
+ m_inspectorFrontendClient = inspectorFrontendClient;
}
-void InspectorController::setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> client)
+bool InspectorController::hasInspectorFrontendClient() const
{
- ASSERT(!m_inspectorFrontendClient);
- m_inspectorFrontendClient = client;
+ return m_inspectorFrontendClient;
}
void InspectorController::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world)
@@ -340,1071 +76,191 @@ void InspectorController::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWo
if (world != mainThreadNormalWorld())
return;
- // If the page is supposed to serve as InspectorFrontend notify inspetor frontend
+ // If the page is supposed to serve as InspectorFrontend notify inspector frontend
// client that it's cleared so that the client can expose inspector bindings.
- if (m_inspectorFrontendClient && frame == m_inspectedPage->mainFrame())
+ if (m_inspectorFrontendClient && frame == m_inspectorAgent->inspectedPage()->mainFrame())
m_inspectorFrontendClient->windowObjectCleared();
-
- if (enabled()) {
- if (m_frontend && frame == m_inspectedPage->mainFrame())
- m_injectedScriptHost->discardInjectedScripts();
- if (m_scriptsToEvaluateOnLoad.size()) {
- ScriptState* scriptState = mainWorldScriptState(frame);
- for (Vector<String>::iterator it = m_scriptsToEvaluateOnLoad.begin();
- it != m_scriptsToEvaluateOnLoad.end(); ++it) {
- m_injectedScriptHost->injectScript(*it, scriptState);
- }
- }
- }
- if (!m_inspectorExtensionAPI.isEmpty())
- m_injectedScriptHost->injectScript(m_inspectorExtensionAPI, mainWorldScriptState(frame));
}
-void InspectorController::setSearchingForNode(bool enabled)
+void InspectorController::startTimelineProfiler()
{
- if (searchingForNodeInPage() == enabled)
- return;
- m_state->setBoolean(InspectorState::searchingForNode, enabled);
- if (!enabled)
- hideHighlight();
+ m_inspectorAgent->startTimelineProfiler();
}
-void InspectorController::setSearchingForNode(bool enabled, bool* newState)
+void InspectorController::stopTimelineProfiler()
{
- *newState = enabled;
- setSearchingForNode(enabled);
+ m_inspectorAgent->stopTimelineProfiler();
}
void InspectorController::connectFrontend()
{
m_openingFrontend = false;
- releaseFrontendLifetimeAgents();
- m_frontend = new InspectorFrontend(m_client);
- m_domAgent = InspectorDOMAgent::create(m_injectedScriptHost.get(), m_frontend.get());
- m_runtimeAgent = InspectorRuntimeAgent::create(m_injectedScriptHost.get());
- m_cssAgent->setDOMAgent(m_domAgent.get());
-
-#if ENABLE(DATABASE)
- m_databaseAgent = InspectorDatabaseAgent::create(&m_databaseResources, m_frontend.get());
-#endif
-
-#if ENABLE(DOM_STORAGE)
- m_domStorageAgent = InspectorDOMStorageAgent::create(&m_domStorageResources, m_frontend.get());
-#endif
-
- if (m_timelineAgent)
- m_timelineAgent->resetFrontendProxyObject(m_frontend.get());
-
- m_consoleAgent->setFrontend(m_frontend.get());
-
- // Initialize Web Inspector title.
- m_frontend->inspectedURLChanged(inspectedURL().string());
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- m_applicationCacheAgent = new InspectorApplicationCacheAgent(this, m_frontend.get());
-#endif
+ m_inspectorFrontend = new InspectorFrontend(m_inspectorClient);
+ m_inspectorAgent->setFrontend(m_inspectorFrontend.get());
-#if ENABLE(FILE_SYSTEM)
- m_fileSystemAgent = InspectorFileSystemAgent::create(this, m_frontend.get());
-#endif
-
if (!InspectorInstrumentation::hasFrontends())
ScriptController::setCaptureCallStackForUncaughtExceptions(true);
InspectorInstrumentation::frontendCreated();
}
-void InspectorController::show()
-{
- if (!enabled())
- return;
-
- if (m_openingFrontend)
- return;
-
- if (m_frontend)
- m_frontend->bringToFront();
- else {
- m_openingFrontend = true;
- m_client->openInspectorFrontend(this);
- }
-}
-
-void InspectorController::showPanel(const String& panel)
-{
- if (!enabled())
- return;
-
- show();
-
- if (!m_frontend) {
- m_showAfterVisible = panel;
- return;
- }
- m_frontend->showPanel(panel);
-}
-
-void InspectorController::close()
-{
- if (!m_frontend)
- return;
- m_frontend->disconnectFromBackend();
- disconnectFrontend();
-}
-
void InspectorController::disconnectFrontend()
{
- if (!m_frontend)
+ if (!m_inspectorFrontend)
return;
- m_frontend.clear();
+ m_inspectorAgent->disconnectFrontend();
+
+ m_inspectorFrontend.clear();
InspectorInstrumentation::frontendDeleted();
if (!InspectorInstrumentation::hasFrontends())
ScriptController::setCaptureCallStackForUncaughtExceptions(false);
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- // If the window is being closed with the debugger enabled,
- // remember this state to re-enable debugger on the next window
- // opening.
- bool debuggerWasEnabled = debuggerEnabled();
- disableDebugger();
- m_attachDebuggerWhenShown = debuggerWasEnabled;
-#endif
- setSearchingForNode(false);
- unbindAllResources();
- stopTimelineProfiler();
-
- hideHighlight();
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- m_profilerAgent->setFrontend(0);
- m_profilerAgent->stopUserInitiatedProfiling(true);
-#endif
- m_consoleAgent->setFrontend(0);
-
- releaseFrontendLifetimeAgents();
- m_timelineAgent.clear();
- m_extraHeaders.clear();
-}
-
-InspectorResourceAgent* InspectorController::resourceAgent()
-{
- if (!m_resourceAgent && m_frontend)
- m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_state.get(), m_frontend.get());
- return m_resourceAgent.get();
-}
-
-void InspectorController::releaseFrontendLifetimeAgents()
-{
- m_resourceAgent.clear();
- m_runtimeAgent.clear();
-
- // This should be invoked prior to m_domAgent destruction.
- m_cssAgent->setDOMAgent(0);
-
- // m_domAgent is RefPtr. Remove DOM listeners first to ensure that there are
- // no references to the DOM agent from the DOM tree.
- if (m_domAgent)
- m_domAgent->reset();
- m_domAgent.clear();
-
-#if ENABLE(DATABASE)
- if (m_databaseAgent)
- m_databaseAgent->clearFrontend();
- m_databaseAgent.clear();
-#endif
-
-#if ENABLE(DOM_STORAGE)
- m_domStorageAgent.clear();
-#endif
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- m_applicationCacheAgent.clear();
-#endif
-
-#if ENABLE(FILE_SYSTEM)
- if (m_fileSystemAgent)
- m_fileSystemAgent->stop();
- m_fileSystemAgent.clear();
-#endif
-}
-
-void InspectorController::populateScriptObjects()
-{
- ASSERT(m_frontend);
- if (!m_frontend)
- return;
-
- if (!m_showAfterVisible.isEmpty()) {
- showPanel(m_showAfterVisible);
- m_showAfterVisible = "";
- }
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (m_profilerAgent->enabled())
- m_frontend->profilerWasEnabled();
-#endif
-
- pushDataCollectedOffline();
-
- if (m_nodeToFocus)
- focusNode();
-
- // Dispatch pending frontend commands
- for (Vector<pair<long, String> >::iterator it = m_pendingEvaluateTestCommands.begin(); it != m_pendingEvaluateTestCommands.end(); ++it)
- m_frontend->evaluateForTestInFrontend((*it).first, (*it).second);
- m_pendingEvaluateTestCommands.clear();
-
- restoreDebugger();
- restoreProfiler(ProfilerRestoreNoAction);
-}
-
-void InspectorController::pushDataCollectedOffline()
-{
- m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
-
-#if ENABLE(DATABASE)
- DatabaseResourcesMap::iterator databasesEnd = m_databaseResources.end();
- for (DatabaseResourcesMap::iterator it = m_databaseResources.begin(); it != databasesEnd; ++it)
- it->second->bind(m_frontend.get());
-#endif
-#if ENABLE(DOM_STORAGE)
- DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources.end();
- for (DOMStorageResourcesMap::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
- it->second->bind(m_frontend.get());
-#endif
-#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(WORKERS)
- WorkersMap::iterator workersEnd = m_workers.end();
- for (WorkersMap::iterator it = m_workers.begin(); it != workersEnd; ++it) {
- InspectorWorkerResource* worker = it->second.get();
- m_frontend->didCreateWorker(worker->id(), worker->url(), worker->isSharedWorker());
- }
-#endif
-}
-
-void InspectorController::restoreDebugger()
-{
- ASSERT(m_frontend);
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorDebuggerAgent::isDebuggerAlwaysEnabled() || m_attachDebuggerWhenShown || m_settings->getBoolean(InspectorSettings::DebuggerAlwaysEnabled)) {
- enableDebugger(false);
- m_attachDebuggerWhenShown = false;
- }
-#endif
-}
-
-void InspectorController::restoreProfiler(ProfilerRestoreAction action)
-{
- ASSERT(m_frontend);
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- m_profilerAgent->setFrontend(m_frontend.get());
- if (!ScriptProfiler::isProfilerAlwaysEnabled() && m_settings->getBoolean(InspectorSettings::ProfilerAlwaysEnabled))
- enableProfiler();
- if (action == ProfilerRestoreResetAgent)
- m_profilerAgent->resetFrontendProfiles();
-#endif
-}
-
-void InspectorController::unbindAllResources()
-{
-#if ENABLE(DATABASE)
- DatabaseResourcesMap::iterator databasesEnd = m_databaseResources.end();
- for (DatabaseResourcesMap::iterator it = m_databaseResources.begin(); it != databasesEnd; ++it)
- it->second->unbind();
-#endif
-#if ENABLE(DOM_STORAGE)
- DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources.end();
- for (DOMStorageResourcesMap::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
- it->second->unbind();
-#endif
- if (m_timelineAgent)
- m_timelineAgent->reset();
}
-void InspectorController::didCommitLoad(DocumentLoader* loader)
+void InspectorController::show()
{
if (!enabled())
return;
- if (m_resourceAgent)
- m_resourceAgent->didCommitLoad(loader);
-
- ASSERT(m_inspectedPage);
-
- if (loader->frame() == m_inspectedPage->mainFrame()) {
- if (m_frontend)
- m_frontend->inspectedURLChanged(loader->url().string());
-
- m_injectedScriptHost->discardInjectedScripts();
- m_consoleAgent->reset();
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (m_debuggerAgent) {
- m_debuggerAgent->clearForPageNavigation();
- if (m_browserDebuggerAgent)
- m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
- }
-#endif
-
-#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
- m_profilerAgent->stopUserInitiatedProfiling(true);
- m_profilerAgent->resetState();
-#endif
-
- // unbindAllResources should be called before database and DOM storage
- // resources are cleared so that it has a chance to unbind them.
- unbindAllResources();
-
- if (m_frontend) {
- m_frontend->reset();
- m_domAgent->reset();
- m_cssAgent->reset();
- }
-#if ENABLE(WORKERS)
- m_workers.clear();
-#endif
-#if ENABLE(DATABASE)
- m_databaseResources.clear();
-#endif
-#if ENABLE(DOM_STORAGE)
- m_domStorageResources.clear();
-#endif
-
- if (m_frontend)
- m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
- }
-}
-
-void InspectorController::mainResourceFiredDOMContentEvent(DocumentLoader* loader, const KURL& url)
-{
- if (!enabled() || !isMainResourceLoader(loader, url))
- return;
-
- if (m_timelineAgent)
- m_timelineAgent->didMarkDOMContentEvent();
- if (m_frontend)
- m_frontend->domContentEventFired(currentTime());
-}
-
-void InspectorController::mainResourceFiredLoadEvent(DocumentLoader* loader, const KURL& url)
-{
- if (!enabled() || !isMainResourceLoader(loader, url))
- return;
-
- if (m_timelineAgent)
- m_timelineAgent->didMarkLoadEvent();
- if (m_frontend)
- m_frontend->loadEventFired(currentTime());
-}
-
-bool InspectorController::isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl)
-{
- return loader->frame() == m_inspectedPage->mainFrame() && requestUrl == loader->requestURL();
-}
-
-void InspectorController::willSendRequest(ResourceRequest& request)
-{
- if (!enabled())
+ if (m_openingFrontend)
return;
- if (m_frontend) {
- // Only enable load timing and raw headers if front-end is attached, as otherwise we may produce overhead.
- request.setReportLoadTiming(true);
- request.setReportRawHeaders(true);
-
- if (m_extraHeaders) {
- HTTPHeaderMap::const_iterator end = m_extraHeaders->end();
- for (HTTPHeaderMap::const_iterator it = m_extraHeaders->begin(); it != end; ++it)
- request.setHTTPHeaderField(it->first, it->second);
- }
+ if (m_inspectorFrontend)
+ m_inspectorFrontend->bringToFront();
+ else {
+ m_openingFrontend = true;
+ m_inspectorClient->openInspectorFrontend(this);
}
}
-void InspectorController::ensureSettingsLoaded()
-{
- if (m_settings)
- return;
- m_settings = new InspectorSettings(m_client);
- m_state->setBoolean(InspectorState::monitoringXHR, m_settings->getBoolean(InspectorSettings::MonitoringXHREnabled));
-}
-
-void InspectorController::startTimelineProfiler()
+void InspectorController::close()
{
- if (!enabled())
- return;
-
- if (m_timelineAgent)
+ if (!m_inspectorFrontend)
return;
-
- m_timelineAgent = new InspectorTimelineAgent(m_frontend.get());
- if (m_frontend)
- m_frontend->timelineProfilerWasStarted();
-
- m_state->setBoolean(InspectorState::timelineProfilerEnabled, true);
+ m_inspectorFrontend->disconnectFromBackend();
+ disconnectFrontend();
}
-void InspectorController::stopTimelineProfiler()
+void InspectorController::restoreInspectorStateFromCookie(const String& inspectorStateCookie)
{
- if (!enabled())
- return;
-
- if (!m_timelineAgent)
- return;
-
- m_timelineAgent = 0;
- if (m_frontend)
- m_frontend->timelineProfilerWasStopped();
-
- m_state->setBoolean(InspectorState::timelineProfilerEnabled, false);
+ ASSERT(!m_inspectorFrontend);
+ connectFrontend();
+ m_inspectorAgent->restoreInspectorStateFromCookie(inspectorStateCookie);
}
-#if ENABLE(WORKERS)
-class PostWorkerNotificationToFrontendTask : public ScriptExecutionContext::Task {
-public:
- static PassOwnPtr<PostWorkerNotificationToFrontendTask> create(PassRefPtr<InspectorWorkerResource> worker, InspectorController::WorkerAction action)
- {
- return new PostWorkerNotificationToFrontendTask(worker, action);
- }
-
-private:
- PostWorkerNotificationToFrontendTask(PassRefPtr<InspectorWorkerResource> worker, InspectorController::WorkerAction action)
- : m_worker(worker)
- , m_action(action)
- {
- }
-
- virtual void performTask(ScriptExecutionContext* scriptContext)
- {
- if (scriptContext->isDocument()) {
- if (InspectorController* inspector = static_cast<Document*>(scriptContext)->page()->inspectorController())
- inspector->postWorkerNotificationToFrontend(*m_worker, m_action);
- }
- }
-
-private:
- RefPtr<InspectorWorkerResource> m_worker;
- InspectorController::WorkerAction m_action;
-};
-
-void InspectorController::postWorkerNotificationToFrontend(const InspectorWorkerResource& worker, InspectorController::WorkerAction action)
+void InspectorController::evaluateForTestInFrontend(long callId, const String& script)
{
- if (!m_frontend)
- return;
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- switch (action) {
- case InspectorController::WorkerCreated:
- m_frontend->didCreateWorker(worker.id(), worker.url(), worker.isSharedWorker());
- break;
- case InspectorController::WorkerDestroyed:
- m_frontend->didDestroyWorker(worker.id());
- break;
- }
-#endif
+ m_inspectorAgent->evaluateForTestInFrontend(callId, script);
}
-void InspectorController::didCreateWorker(intptr_t id, const String& url, bool isSharedWorker)
+void InspectorController::drawNodeHighlight(GraphicsContext& context) const
{
- if (!enabled())
- return;
-
- RefPtr<InspectorWorkerResource> workerResource(InspectorWorkerResource::create(id, url, isSharedWorker));
- m_workers.set(id, workerResource);
- if (m_inspectedPage && m_frontend)
- m_inspectedPage->mainFrame()->document()->postTask(PostWorkerNotificationToFrontendTask::create(workerResource, InspectorController::WorkerCreated));
+ m_inspectorAgent->drawNodeHighlight(context);
}
-void InspectorController::didDestroyWorker(intptr_t id)
+void InspectorController::showConsole()
{
if (!enabled())
return;
-
- WorkersMap::iterator workerResource = m_workers.find(id);
- if (workerResource == m_workers.end())
- return;
- if (m_inspectedPage && m_frontend)
- m_inspectedPage->mainFrame()->document()->postTask(PostWorkerNotificationToFrontendTask::create(workerResource->second, InspectorController::WorkerDestroyed));
- m_workers.remove(workerResource);
+ show();
+ m_inspectorAgent->showConsole();
}
-#endif // ENABLE(WORKERS)
-#if ENABLE(DATABASE)
-void InspectorController::didOpenDatabase(PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
+void InspectorController::inspect(Node* node)
{
if (!enabled())
return;
- RefPtr<InspectorDatabaseResource> resource = InspectorDatabaseResource::create(database, domain, name, version);
-
- m_databaseResources.set(resource->id(), resource);
-
- // Resources are only bound while visible.
- if (m_frontend)
- resource->bind(m_frontend.get());
-}
-#endif
-
-void InspectorController::getCookies(RefPtr<InspectorArray>* cookies, WTF::String* cookiesString)
-{
- // If we can get raw cookies.
- ListHashSet<Cookie> rawCookiesList;
-
- // If we can't get raw cookies - fall back to String representation
- String stringCookiesList;
-
- // Return value to getRawCookies should be the same for every call because
- // the return value is platform/network backend specific, and the call will
- // always return the same true/false value.
- bool rawCookiesImplemented = false;
-
- for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
- Document* document = frame->document();
- const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
- CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
- for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) {
- Vector<Cookie> docCookiesList;
- rawCookiesImplemented = getRawCookies(document, KURL(ParsedURLString, it->second->url()), docCookiesList);
-
- if (!rawCookiesImplemented) {
- // FIXME: We need duplication checking for the String representation of cookies.
- ExceptionCode ec = 0;
- stringCookiesList += document->cookie(ec);
- // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here
- // because "document" is the document of the main frame of the page.
- ASSERT(!ec);
- } else {
- int cookiesSize = docCookiesList.size();
- for (int i = 0; i < cookiesSize; i++) {
- if (!rawCookiesList.contains(docCookiesList[i]))
- rawCookiesList.add(docCookiesList[i]);
- }
- }
- }
- }
+ show();
- if (rawCookiesImplemented)
- *cookies = buildArrayForCookies(rawCookiesList);
- else
- *cookiesString = stringCookiesList;
+ m_inspectorAgent->inspect(node);
}
-PassRefPtr<InspectorArray> InspectorController::buildArrayForCookies(ListHashSet<Cookie>& cookiesList)
+bool InspectorController::enabled() const
{
- RefPtr<InspectorArray> cookies = InspectorArray::create();
-
- ListHashSet<Cookie>::iterator end = cookiesList.end();
- ListHashSet<Cookie>::iterator it = cookiesList.begin();
- for (int i = 0; it != end; ++it, i++)
- cookies->pushObject(buildObjectForCookie(*it));
-
- return cookies;
+ return m_inspectorAgent->enabled();
}
-PassRefPtr<InspectorObject> InspectorController::buildObjectForCookie(const Cookie& cookie)
+Page* InspectorController::inspectedPage() const
{
- RefPtr<InspectorObject> value = InspectorObject::create();
- value->setString("name", cookie.name);
- value->setString("value", cookie.value);
- value->setString("domain", cookie.domain);
- value->setString("path", cookie.path);
- value->setNumber("expires", cookie.expires);
- value->setNumber("size", (cookie.name.length() + cookie.value.length()));
- value->setBoolean("httpOnly", cookie.httpOnly);
- value->setBoolean("secure", cookie.secure);
- value->setBoolean("session", cookie.session);
- return value;
+ return m_inspectorAgent->inspectedPage();
}
-void InspectorController::deleteCookie(const String& cookieName, const String& domain)
+bool InspectorController::timelineProfilerEnabled()
{
- for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
- Document* document = frame->document();
- if (document->url().host() != domain)
- continue;
- const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
- CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
- for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it)
- WebCore::deleteCookie(document, KURL(ParsedURLString, it->second->url()), cookieName);
- }
+ return m_inspectorAgent->timelineAgent();
}
-#if ENABLE(DOM_STORAGE)
-void InspectorController::didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame)
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+void InspectorController::enableProfiler()
{
- if (!enabled())
- return;
-
- DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources.end();
- for (DOMStorageResourcesMap::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
- if (it->second->isSameHostAndType(frame, isLocalStorage))
- return;
-
- RefPtr<Storage> domStorage = Storage::create(frame, storageArea);
- RefPtr<InspectorDOMStorageResource> resource = InspectorDOMStorageResource::create(domStorage.get(), isLocalStorage, frame);
-
- m_domStorageResources.set(resource->id(), resource);
-
- // Resources are only bound while visible.
- if (m_frontend)
- resource->bind(m_frontend.get());
+ m_inspectorAgent->enableProfiler();
}
-#endif
-#if ENABLE(WEB_SOCKETS)
-void InspectorController::didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
+void InspectorController::disableProfiler()
{
- if (!enabled())
- return;
- ASSERT(m_inspectedPage);
-
- if (m_resourceAgent)
- m_resourceAgent->didCreateWebSocket(identifier, requestURL);
- UNUSED_PARAM(documentURL);
+ m_inspectorAgent->disableProfiler();
}
-void InspectorController::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request)
+bool InspectorController::profilerEnabled()
{
- if (m_resourceAgent)
- m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
+ return m_inspectorAgent->profilerEnabled();
}
-void InspectorController::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response)
+bool InspectorController::debuggerEnabled()
{
- if (m_resourceAgent)
- m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
+ return m_inspectorAgent->debuggerEnabled();
}
-void InspectorController::didCloseWebSocket(unsigned long identifier)
+void InspectorController::showAndEnableDebugger()
{
- if (m_resourceAgent)
- m_resourceAgent->didCloseWebSocket(identifier);
+ m_inspectorAgent->showAndEnableDebugger();
}
-#endif // ENABLE(WEB_SOCKETS)
-#if ENABLE(JAVASCRIPT_DEBUGGER)
-bool InspectorController::isRecordingUserInitiatedProfile() const
+void InspectorController::disableDebugger()
{
- return m_profilerAgent->isRecordingUserInitiatedProfile();
+ m_inspectorAgent->disableDebugger();
}
void InspectorController::startUserInitiatedProfiling()
{
- if (!enabled())
- return;
- m_profilerAgent->startUserInitiatedProfiling();
- m_state->setBoolean(InspectorState::userInitiatedProfiling, true);
+ m_inspectorAgent->startUserInitiatedProfiling();
}
void InspectorController::stopUserInitiatedProfiling()
{
- if (!enabled())
- return;
- m_profilerAgent->stopUserInitiatedProfiling();
- m_state->setBoolean(InspectorState::userInitiatedProfiling, false);
-}
-
-bool InspectorController::profilerEnabled() const
-{
- return enabled() && m_profilerAgent->enabled();
-}
-
-void InspectorController::enableProfiler(bool always, bool skipRecompile)
-{
- if (always)
- m_settings->setBoolean(InspectorSettings::ProfilerAlwaysEnabled, true);
- m_profilerAgent->enable(skipRecompile);
-}
-
-void InspectorController::disableProfiler(bool always)
-{
- if (always)
- m_settings->setBoolean(InspectorSettings::ProfilerAlwaysEnabled, false);
- m_profilerAgent->disable();
+ m_inspectorAgent->stopUserInitiatedProfiling();
}
-#endif
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
-void InspectorController::showAndEnableDebugger()
-{
- if (!enabled())
- return;
- if (debuggerEnabled())
- return;
-
- if (!m_frontend) {
- m_attachDebuggerWhenShown = true;
- showPanel(ScriptsPanel);
- } else
- enableDebugger(false);
-}
-
-void InspectorController::enableDebugger(bool always)
+bool InspectorController::isRecordingUserInitiatedProfile() const
{
- ASSERT(!debuggerEnabled());
- if (always)
- m_settings->setBoolean(InspectorSettings::DebuggerAlwaysEnabled, true);
-
- ASSERT(m_inspectedPage);
-
- m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend.get());
- m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this);
- m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
-
- m_frontend->debuggerWasEnabled();
+ return m_inspectorAgent->isRecordingUserInitiatedProfile();
}
-void InspectorController::disableDebugger(bool always)
+void InspectorController::setInspectorExtensionAPI(const String& source)
{
- if (!enabled())
- return;
-
- if (always)
- m_settings->setBoolean(InspectorSettings::DebuggerAlwaysEnabled, false);
-
- ASSERT(m_inspectedPage);
-
- m_debuggerAgent.clear();
- m_browserDebuggerAgent.clear();
-
- m_attachDebuggerWhenShown = false;
-
- if (m_frontend)
- m_frontend->debuggerWasDisabled();
+ m_inspectorAgent->setInspectorExtensionAPI(source);
}
void InspectorController::resume()
{
- if (m_debuggerAgent)
- m_debuggerAgent->resume();
-}
-
-void InspectorController::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints)
-{
- m_state->setObject(InspectorState::browserBreakpoints, breakpoints);
-}
-#endif
-
-void InspectorController::evaluateForTestInFrontend(long callId, const String& script)
-{
- if (m_frontend)
- m_frontend->evaluateForTestInFrontend(callId, script);
- else
- m_pendingEvaluateTestCommands.append(pair<long, String>(callId, script));
-}
-
-void InspectorController::didEvaluateForTestInFrontend(long callId, const String& jsonResult)
-{
- ScriptState* scriptState = scriptStateFromPage(debuggerWorld(), m_inspectedPage);
- ScriptObject window;
- ScriptGlobalObject::get(scriptState, "window", window);
- ScriptFunctionCall function(window, "didEvaluateForTestInFrontend");
- function.appendArgument(callId);
- function.appendArgument(jsonResult);
- function.call();
-}
-
-static Path quadToPath(const FloatQuad& quad)
-{
- Path quadPath;
- quadPath.moveTo(quad.p1());
- quadPath.addLineTo(quad.p2());
- quadPath.addLineTo(quad.p3());
- quadPath.addLineTo(quad.p4());
- quadPath.closeSubpath();
- return quadPath;
-}
-
-static void drawOutlinedQuad(GraphicsContext& context, const FloatQuad& quad, const Color& fillColor)
-{
- static const int outlineThickness = 2;
- static const Color outlineColor(62, 86, 180, 228);
-
- Path quadPath = quadToPath(quad);
-
- // Clip out the quad, then draw with a 2px stroke to get a pixel
- // of outline (because inflating a quad is hard)
- {
- context.save();
- context.clipOut(quadPath);
-
- context.setStrokeThickness(outlineThickness);
- context.setStrokeColor(outlineColor, ColorSpaceDeviceRGB);
- context.strokePath(quadPath);
-
- context.restore();
- }
-
- // Now do the fill
- context.setFillColor(fillColor, ColorSpaceDeviceRGB);
- context.fillPath(quadPath);
-}
-
-static void drawOutlinedQuadWithClip(GraphicsContext& context, const FloatQuad& quad, const FloatQuad& clipQuad, const Color& fillColor)
-{
- context.save();
- Path clipQuadPath = quadToPath(clipQuad);
- context.clipOut(clipQuadPath);
- drawOutlinedQuad(context, quad, fillColor);
- context.restore();
-}
-
-static void drawHighlightForBox(GraphicsContext& context, const FloatQuad& contentQuad, const FloatQuad& paddingQuad, const FloatQuad& borderQuad, const FloatQuad& marginQuad)
-{
- static const Color contentBoxColor(125, 173, 217, 128);
- static const Color paddingBoxColor(125, 173, 217, 160);
- static const Color borderBoxColor(125, 173, 217, 192);
- static const Color marginBoxColor(125, 173, 217, 228);
-
- if (marginQuad != borderQuad)
- drawOutlinedQuadWithClip(context, marginQuad, borderQuad, marginBoxColor);
- if (borderQuad != paddingQuad)
- drawOutlinedQuadWithClip(context, borderQuad, paddingQuad, borderBoxColor);
- if (paddingQuad != contentQuad)
- drawOutlinedQuadWithClip(context, paddingQuad, contentQuad, paddingBoxColor);
-
- drawOutlinedQuad(context, contentQuad, contentBoxColor);
-}
-
-static void drawHighlightForLineBoxesOrSVGRenderer(GraphicsContext& context, const Vector<FloatQuad>& lineBoxQuads)
-{
- static const Color lineBoxColor(125, 173, 217, 128);
-
- for (size_t i = 0; i < lineBoxQuads.size(); ++i)
- drawOutlinedQuad(context, lineBoxQuads[i], lineBoxColor);
+ if (InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent())
+ debuggerAgent->resume();
}
-static inline void convertFromFrameToMainFrame(Frame* frame, IntRect& rect)
+void InspectorController::hideHighlight()
{
- rect = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(rect));
+ m_inspectorAgent->hideHighlight();
}
-static inline IntSize frameToMainFrameOffset(Frame* frame)
+void InspectorController::dispatchMessageFromFrontend(const String& message)
{
- IntPoint mainFramePoint = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(IntPoint()));
- return mainFramePoint - IntPoint();
+ m_inspectorBackendDispatcher->dispatch(message);
}
-void InspectorController::drawNodeHighlight(GraphicsContext& context) const
-{
- if (!m_highlightedNode)
- return;
-
- RenderObject* renderer = m_highlightedNode->renderer();
- Frame* containingFrame = m_highlightedNode->document()->frame();
- if (!renderer || !containingFrame)
- return;
-
- IntSize mainFrameOffset = frameToMainFrameOffset(containingFrame);
- IntRect boundingBox = renderer->absoluteBoundingBoxRect(true);
- boundingBox.move(mainFrameOffset);
-
- IntRect titleReferenceBox = boundingBox;
-
- ASSERT(m_inspectedPage);
-
- FrameView* view = m_inspectedPage->mainFrame()->view();
- FloatRect overlayRect = view->visibleContentRect();
- if (!overlayRect.contains(boundingBox) && !boundingBox.contains(enclosingIntRect(overlayRect)))
- overlayRect = view->visibleContentRect();
- context.translate(-overlayRect.x(), -overlayRect.y());
-
- // RenderSVGRoot should be highlighted through the isBox() code path, all other SVG elements should just dump their absoluteQuads().
-#if ENABLE(SVG)
- bool isSVGRenderer = renderer->node() && renderer->node()->isSVGElement() && !renderer->isSVGRoot();
-#else
- bool isSVGRenderer = false;
#endif
- if (renderer->isBox() && !isSVGRenderer) {
- RenderBox* renderBox = toRenderBox(renderer);
-
- IntRect contentBox = renderBox->contentBoxRect();
-
- IntRect paddingBox(contentBox.x() - renderBox->paddingLeft(), contentBox.y() - renderBox->paddingTop(),
- contentBox.width() + renderBox->paddingLeft() + renderBox->paddingRight(), contentBox.height() + renderBox->paddingTop() + renderBox->paddingBottom());
- IntRect borderBox(paddingBox.x() - renderBox->borderLeft(), paddingBox.y() - renderBox->borderTop(),
- paddingBox.width() + renderBox->borderLeft() + renderBox->borderRight(), paddingBox.height() + renderBox->borderTop() + renderBox->borderBottom());
- IntRect marginBox(borderBox.x() - renderBox->marginLeft(), borderBox.y() - renderBox->marginTop(),
- borderBox.width() + renderBox->marginLeft() + renderBox->marginRight(), borderBox.height() + renderBox->marginTop() + renderBox->marginBottom());
-
- titleReferenceBox = marginBox;
- titleReferenceBox.move(mainFrameOffset);
- titleReferenceBox.move(boundingBox.x(), boundingBox.y());
-
- FloatQuad absContentQuad = renderBox->localToAbsoluteQuad(FloatRect(contentBox));
- FloatQuad absPaddingQuad = renderBox->localToAbsoluteQuad(FloatRect(paddingBox));
- FloatQuad absBorderQuad = renderBox->localToAbsoluteQuad(FloatRect(borderBox));
- FloatQuad absMarginQuad = renderBox->localToAbsoluteQuad(FloatRect(marginBox));
-
- absContentQuad.move(mainFrameOffset);
- absPaddingQuad.move(mainFrameOffset);
- absBorderQuad.move(mainFrameOffset);
- absMarginQuad.move(mainFrameOffset);
-
- drawHighlightForBox(context, absContentQuad, absPaddingQuad, absBorderQuad, absMarginQuad);
- } else if (renderer->isRenderInline() || isSVGRenderer) {
- // FIXME: We should show margins/padding/border for inlines.
- Vector<FloatQuad> lineBoxQuads;
- renderer->absoluteQuads(lineBoxQuads);
- for (unsigned i = 0; i < lineBoxQuads.size(); ++i)
- lineBoxQuads[i] += mainFrameOffset;
-
- drawHighlightForLineBoxesOrSVGRenderer(context, lineBoxQuads);
- }
-
- // Draw node title if necessary.
-
- if (!m_highlightedNode->isElementNode())
- return;
-
- WebCore::Settings* settings = containingFrame->settings();
- drawElementTitle(context, titleReferenceBox, overlayRect, settings);
-}
-
-void InspectorController::drawElementTitle(GraphicsContext& context, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings* settings) const
-{
- static const int rectInflatePx = 4;
- static const int fontHeightPx = 12;
- static const int borderWidthPx = 1;
- static const Color tooltipBackgroundColor(255, 255, 194, 255);
- static const Color tooltipBorderColor(Color::black);
- static const Color tooltipFontColor(Color::black);
-
- Element* element = static_cast<Element*>(m_highlightedNode.get());
- bool isXHTML = element->document()->isXHTMLDocument();
- String nodeTitle = isXHTML ? element->nodeName() : element->nodeName().lower();
- const AtomicString& idValue = element->getIdAttribute();
- if (!idValue.isNull() && !idValue.isEmpty()) {
- nodeTitle += "#";
- nodeTitle += idValue;
- }
- if (element->hasClass() && element->isStyledElement()) {
- const SpaceSplitString& classNamesString = static_cast<StyledElement*>(element)->classNames();
- size_t classNameCount = classNamesString.size();
- if (classNameCount) {
- HashSet<AtomicString> usedClassNames;
- for (size_t i = 0; i < classNameCount; ++i) {
- const AtomicString& className = classNamesString[i];
- if (usedClassNames.contains(className))
- continue;
- usedClassNames.add(className);
- nodeTitle += ".";
- nodeTitle += className;
- }
- }
- }
-
- Element* highlightedElement = m_highlightedNode->isElementNode() ? static_cast<Element*>(m_highlightedNode.get()) : 0;
- nodeTitle += " [";
- nodeTitle += String::number(highlightedElement ? highlightedElement->offsetWidth() : boundingBox.width());
- nodeTitle.append(static_cast<UChar>(0x00D7)); // &times;
- nodeTitle += String::number(highlightedElement ? highlightedElement->offsetHeight() : boundingBox.height());
- nodeTitle += "]";
-
- FontDescription desc;
- FontFamily family;
- family.setFamily(settings->fixedFontFamily());
- desc.setFamily(family);
- desc.setComputedSize(fontHeightPx);
- Font font = Font(desc, 0, 0);
- font.update(0);
-
- TextRun nodeTitleRun(nodeTitle);
- IntPoint titleBasePoint = boundingBox.bottomLeft();
- titleBasePoint.move(rectInflatePx, rectInflatePx);
- IntRect titleRect = enclosingIntRect(font.selectionRectForText(nodeTitleRun, titleBasePoint, fontHeightPx));
- titleRect.inflate(rectInflatePx);
-
- // The initial offsets needed to compensate for a 1px-thick border stroke (which is not a part of the rectangle).
- int dx = -borderWidthPx;
- int dy = borderWidthPx;
-
- // If the tip sticks beyond the right of overlayRect, right-align the tip with the said boundary.
- if (titleRect.right() > overlayRect.right())
- dx = overlayRect.right() - titleRect.right();
-
- // If the tip sticks beyond the left of overlayRect, left-align the tip with the said boundary.
- if (titleRect.x() + dx < overlayRect.x())
- dx = overlayRect.x() - titleRect.x() - borderWidthPx;
-
- // If the tip sticks beyond the bottom of overlayRect, show the tip at top of bounding box.
- if (titleRect.bottom() > overlayRect.bottom()) {
- dy = boundingBox.y() - titleRect.bottom() - borderWidthPx;
- // If the tip still sticks beyond the bottom of overlayRect, bottom-align the tip with the said boundary.
- if (titleRect.bottom() + dy > overlayRect.bottom())
- dy = overlayRect.bottom() - titleRect.bottom();
- }
-
- // If the tip sticks beyond the top of overlayRect, show the tip at top of overlayRect.
- if (titleRect.y() + dy < overlayRect.y())
- dy = overlayRect.y() - titleRect.y() + borderWidthPx;
-
- titleRect.move(dx, dy);
- context.setStrokeColor(tooltipBorderColor, ColorSpaceDeviceRGB);
- context.setStrokeThickness(borderWidthPx);
- context.setFillColor(tooltipBackgroundColor, ColorSpaceDeviceRGB);
- context.drawRect(titleRect);
- context.setFillColor(tooltipFontColor, ColorSpaceDeviceRGB);
- context.drawText(font, nodeTitleRun, IntPoint(titleRect.x() + rectInflatePx, titleRect.y() + font.height()));
-}
-
-void InspectorController::openInInspectedWindow(const String& url)
-{
- Frame* mainFrame = m_inspectedPage->mainFrame();
-
- FrameLoadRequest request(mainFrame->document()->securityOrigin(), ResourceRequest(), "_blank");
-
- bool created;
- WindowFeatures windowFeatures;
- Frame* newFrame = WebCore::createWindow(mainFrame, mainFrame, request, windowFeatures, created);
- if (!newFrame)
- return;
-
- UserGestureIndicator indicator(DefinitelyProcessingUserGesture);
- newFrame->loader()->setOpener(mainFrame);
- newFrame->page()->setOpenedByDOM();
- newFrame->loader()->changeLocation(mainFrame->document()->securityOrigin(), newFrame->loader()->completeURL(url), "", false, false);
-}
-
-void InspectorController::addScriptToEvaluateOnLoad(const String& source)
-{
- m_scriptsToEvaluateOnLoad.append(source);
-}
-
-void InspectorController::removeAllScriptsToEvaluateOnLoad()
-{
- m_scriptsToEvaluateOnLoad.clear();
-}
-
-void InspectorController::setInspectorExtensionAPI(const String& source)
-{
- m_inspectorExtensionAPI = source;
-}
-
-KURL InspectorController::inspectedURL() const
-{
- return m_inspectedPage->mainFrame()->loader()->url();
-}
-
-void InspectorController::reloadPage()
-{
- // FIXME: Why do we set the user gesture indicator here?
- UserGestureIndicator indicator(DefinitelyProcessingUserGesture);
- m_inspectedPage->mainFrame()->navigationScheduler()->scheduleRefresh();
-}
-
-void InspectorController::setExtraHeaders(PassRefPtr<InspectorObject> headers)
-{
- m_extraHeaders = adoptPtr(new HTTPHeaderMap());
- InspectorObject::const_iterator end = headers->end();
- for (InspectorObject::const_iterator it = headers->begin(); it != end; ++it) {
- String value;
- if (!it->second->asString(&value))
- continue;
- m_extraHeaders->add(it->first, value);
- }
-}
-
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebCore/inspector/InspectorController.h b/Source/WebCore/inspector/InspectorController.h
index 90a0300..7db024c 100644
--- a/Source/WebCore/inspector/InspectorController.h
+++ b/Source/WebCore/inspector/InspectorController.h
@@ -1,365 +1,115 @@
/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * modification, are permitted provided that the following conditions are
+ * met:
*
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef InspectorController_h
#define InspectorController_h
-#include "CharacterData.h"
-#include "Console.h"
-#include "Cookie.h"
-#include "Page.h"
#include "PlatformString.h"
-#include <wtf/HashMap.h>
-#include <wtf/HashSet.h>
-#include <wtf/ListHashSet.h>
-#include <wtf/RefCounted.h>
+#include <wtf/Forward.h>
+#include <wtf/Noncopyable.h>
#include <wtf/Vector.h>
-#include <wtf/text/StringHash.h>
namespace WebCore {
-class CachedResource;
-class CharacterData;
-class Database;
class DOMWrapperWorld;
-class Document;
-class DocumentLoader;
-class FloatRect;
+class Frame;
class GraphicsContext;
-class HTTPHeaderMap;
-class HitTestResult;
-class InjectedScript;
-class InjectedScriptHost;
-class InspectorArray;
+class InspectorAgent;
class InspectorBackendDispatcher;
-class InspectorBrowserDebuggerAgent;
class InspectorClient;
-class InspectorConsoleAgent;
-class InspectorCSSAgent;
-class InspectorDOMAgent;
-class InspectorDOMStorageAgent;
-class InspectorDOMStorageResource;
-class InspectorDatabaseAgent;
-class InspectorDatabaseResource;
-class InspectorDebuggerAgent;
class InspectorFrontend;
class InspectorFrontendClient;
-class InspectorObject;
-class InspectorProfilerAgent;
-class InspectorResourceAgent;
-class InspectorRuntimeAgent;
-class InspectorSettings;
-class InspectorState;
-class InspectorStorageAgent;
-class InspectorTimelineAgent;
-class InspectorValue;
-class InspectorWorkerResource;
-class IntRect;
-class KURL;
-class Node;
class Page;
-class ResourceRequest;
-class ResourceResponse;
-class ResourceError;
-class ScriptArguments;
-class ScriptCallStack;
-class ScriptProfile;
-class SharedBuffer;
-class StorageArea;
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
-class InspectorApplicationCacheAgent;
-#endif
-
-#if ENABLE(FILE_SYSTEM)
-class InspectorFileSystemAgent;
-#endif
-
-#if ENABLE(WEB_SOCKETS)
-class WebSocketHandshakeRequest;
-class WebSocketHandshakeResponse;
-#endif
+class PostWorkerNotificationToFrontendTask;
+class Node;
class InspectorController {
- WTF_MAKE_NONCOPYABLE(InspectorController); WTF_MAKE_FAST_ALLOCATED;
+ WTF_MAKE_NONCOPYABLE(InspectorController);
+ WTF_MAKE_FAST_ALLOCATED;
public:
- static const char* const ConsolePanel;
- static const char* const ElementsPanel;
- static const char* const ProfilesPanel;
- static const char* const ScriptsPanel;
-
InspectorController(Page*, InspectorClient*);
~InspectorController();
- InspectorBackendDispatcher* inspectorBackendDispatcher() { return m_inspectorBackendDispatcher.get(); }
- InspectorClient* inspectorClient() { return m_client; }
- InjectedScriptHost* injectedScriptHost() { return m_injectedScriptHost.get(); }
-
- void inspectedPageDestroyed();
-
bool enabled() const;
-
- Page* inspectedPage() const { return m_inspectedPage; }
- KURL inspectedURL() const;
- void reloadPage();
-
- void restoreInspectorStateFromCookie(const String& inspectorCookie);
-
- void inspect(Node*);
- void highlight(Node*);
- void hideHighlight();
- void highlightDOMNode(long nodeId);
- void hideDOMNodeHighlight() { hideHighlight(); }
-
- void highlightFrame(unsigned long frameId);
- void hideFrameHighlight() { hideHighlight(); }
+ Page* inspectedPage() const;
void show();
- void showPanel(const String&);
void close();
- void connectFrontend();
- void reuseFrontend();
- void disconnectFrontend();
- InspectorFrontend* frontend() const { return m_frontend.get(); }
-
- InspectorResourceAgent* resourceAgent();
-
- InspectorController* inspectorAgent() { return this; }
- InspectorConsoleAgent* consoleAgent() { return m_consoleAgent.get(); }
- InspectorCSSAgent* cssAgent() { return m_cssAgent.get(); }
- InspectorDOMAgent* domAgent() { return m_domAgent.get(); }
- InjectedScriptHost* injectedScriptAgent() { return m_injectedScriptHost.get(); }
- InspectorRuntimeAgent* runtimeAgent() { return m_runtimeAgent.get(); }
- InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); }
-#if ENABLE(DATABASE)
- InspectorDatabaseAgent* databaseAgent() { return m_databaseAgent.get(); }
-#endif
-#if ENABLE(DOM_STORAGE)
- InspectorDOMStorageAgent* domStorageAgent() { return m_domStorageAgent.get(); }
-#endif
-#if ENABLE(FILE_SYSTEM)
- InspectorFileSystemAgent* fileSystemAgent() { return m_fileSystemAgent.get(); }
-#endif
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- InspectorBrowserDebuggerAgent* browserDebuggerAgent() const { return m_browserDebuggerAgent.get(); }
- InspectorDebuggerAgent* debuggerAgent() const { return m_debuggerAgent.get(); }
- InspectorProfilerAgent* profilerAgent() const { return m_profilerAgent.get(); }
-#endif
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- InspectorApplicationCacheAgent* applicationCacheAgent() { return m_applicationCacheAgent.get(); }
-#endif
-
-
- bool searchingForNodeInPage() const;
- void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
- bool handleMousePress();
+ void setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient>);
+ bool hasInspectorFrontendClient() const;
+ void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*);
+ void setInspectorExtensionAPI(const String& source);
- void setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> client);
- bool hasInspectorFrontendClient() const { return m_inspectorFrontendClient; }
+ void dispatchMessageFromFrontend(const String& message);
- void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*);
+ bool hasFrontend() const { return m_inspectorFrontend; }
+ void connectFrontend();
+ void disconnectFrontend();
+ void restoreInspectorStateFromCookie(const String& inspectorCookie);
- void didCommitLoad(DocumentLoader*);
+ void showConsole();
+ void inspect(Node*);
+ void drawNodeHighlight(GraphicsContext&) const;
+ void hideHighlight();
- void setExtraHeaders(PassRefPtr<InspectorObject>);
+ void evaluateForTestInFrontend(long callId, const String& script);
void startTimelineProfiler();
void stopTimelineProfiler();
-
- void getCookies(RefPtr<InspectorArray>* cookies, WTF::String* cookiesString);
- void deleteCookie(const String& cookieName, const String& domain);
-
- void mainResourceFiredLoadEvent(DocumentLoader*, const KURL&);
- void mainResourceFiredDOMContentEvent(DocumentLoader*, const KURL&);
-
-#if ENABLE(WORKERS)
- enum WorkerAction { WorkerCreated, WorkerDestroyed };
-
- void postWorkerNotificationToFrontend(const InspectorWorkerResource&, WorkerAction);
- void didCreateWorker(intptr_t, const String& url, bool isSharedWorker);
- void didDestroyWorker(intptr_t);
-#endif
-
-#if ENABLE(DATABASE)
- void didOpenDatabase(PassRefPtr<Database>, const String& domain, const String& name, const String& version);
-#endif
-
-#if ENABLE(DOM_STORAGE)
- void didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame);
-#endif
-
-#if ENABLE(WEB_SOCKETS)
- void didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
- void willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest&);
- void didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse&);
- void didCloseWebSocket(unsigned long identifier);
-#endif
-
- bool hasFrontend() const { return m_frontend; }
-
- void drawNodeHighlight(GraphicsContext&) const;
- void openInInspectedWindow(const String& url);
- void drawElementTitle(GraphicsContext&, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings*) const;
+ bool timelineProfilerEnabled();
#if ENABLE(JAVASCRIPT_DEBUGGER)
- bool isRecordingUserInitiatedProfile() const;
- void startProfiling() { startUserInitiatedProfiling(); }
+ bool profilerEnabled();
+ void enableProfiler();
void startUserInitiatedProfiling();
- void stopProfiling() { stopUserInitiatedProfiling(); }
+ bool isRecordingUserInitiatedProfile() const;
void stopUserInitiatedProfiling();
- void enableProfiler(bool always = false, bool skipRecompile = false);
- void disableProfiler(bool always = false);
- bool profilerEnabled() const;
-
+ void disableProfiler();
void showAndEnableDebugger();
- void enableDebugger(bool always);
- void disableDebugger(bool always = false);
- bool debuggerEnabled() const { return m_debuggerAgent; }
+ bool debuggerEnabled();
+ void disableDebugger();
void resume();
-
- void setAllBrowserBreakpoints(PassRefPtr<InspectorObject>);
#endif
- // Generic code called from custom implementations.
- void evaluateForTestInFrontend(long testCallId, const String& script);
-
- void addScriptToEvaluateOnLoad(const String& source);
- void removeAllScriptsToEvaluateOnLoad();
- void setInspectorExtensionAPI(const String& source);
-
- bool inspectorStartsAttached();
- void setInspectorStartsAttached(bool);
- void setInspectorAttachedHeight(long height);
- long inspectorAttachedHeight() const;
-
- InspectorState* state() { return m_state.get(); }
- InspectorSettings* settings() { return m_settings.get(); }
-
- // InspectorAgent API
- void getInspectorState(RefPtr<InspectorObject>* state);
- void setMonitoringXHREnabled(bool enabled, bool* newState);
- void populateScriptObjects();
- // Following are used from InspectorBackend and internally.
- void setSearchingForNode(bool enabled, bool* newState);
- void didEvaluateForTestInFrontend(long callId, const String& jsonResult);
-
- // InspectorInstrumentation API
- void ensureSettingsLoaded();
- void willSendRequest(ResourceRequest&);
-
private:
- void pushDataCollectedOffline();
- void restoreDebugger();
- enum ProfilerRestoreAction {
- ProfilerRestoreNoAction = 0,
- ProfilerRestoreResetAgent = 1
- };
- void restoreProfiler(ProfilerRestoreAction action);
- void unbindAllResources();
- void setSearchingForNode(bool enabled);
-
- void releaseFrontendLifetimeAgents();
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- void toggleRecordButton(bool);
-#endif
-
- PassRefPtr<InspectorObject> buildObjectForCookie(const Cookie&);
- PassRefPtr<InspectorArray> buildArrayForCookies(ListHashSet<Cookie>&);
-
- void focusNode();
- bool isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl);
+ friend class PostWorkerNotificationToFrontendTask;
- Page* m_inspectedPage;
- InspectorClient* m_client;
+ OwnPtr<InspectorAgent> m_inspectorAgent;
+ OwnPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher;
OwnPtr<InspectorFrontendClient> m_inspectorFrontendClient;
+ OwnPtr<InspectorFrontend> m_inspectorFrontend;
+ InspectorClient* m_inspectorClient;
bool m_openingFrontend;
- OwnPtr<InspectorFrontend> m_frontend;
- OwnPtr<InspectorCSSAgent> m_cssAgent;
- RefPtr<InspectorDOMAgent> m_domAgent;
-
-#if ENABLE(DATABASE)
- RefPtr<InspectorDatabaseAgent> m_databaseAgent;
-#endif
-
-#if ENABLE(DOM_STORAGE)
- RefPtr<InspectorDOMStorageAgent> m_domStorageAgent;
-#endif
-
- OwnPtr<InspectorTimelineAgent> m_timelineAgent;
- OwnPtr<InspectorState> m_state;
- OwnPtr<InspectorSettings> m_settings;
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent;
-#endif
-
-#if ENABLE(FILE_SYSTEM)
- RefPtr<InspectorFileSystemAgent> m_fileSystemAgent;
-#endif
-
- RefPtr<Node> m_nodeToFocus;
- RefPtr<InspectorResourceAgent> m_resourceAgent;
- OwnPtr<InspectorRuntimeAgent> m_runtimeAgent;
-
-#if ENABLE(DATABASE)
- typedef HashMap<int, RefPtr<InspectorDatabaseResource> > DatabaseResourcesMap;
- DatabaseResourcesMap m_databaseResources;
-#endif
-#if ENABLE(DOM_STORAGE)
- typedef HashMap<int, RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesMap;
- DOMStorageResourcesMap m_domStorageResources;
-#endif
-
- String m_showAfterVisible;
- RefPtr<Node> m_highlightedNode;
- OwnPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher;
- RefPtr<InjectedScriptHost> m_injectedScriptHost;
- OwnPtr<InspectorConsoleAgent> m_consoleAgent;
-
- Vector<pair<long, String> > m_pendingEvaluateTestCommands;
- Vector<String> m_scriptsToEvaluateOnLoad;
- String m_inspectorExtensionAPI;
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- bool m_attachDebuggerWhenShown;
- OwnPtr<InspectorDebuggerAgent> m_debuggerAgent;
- OwnPtr<InspectorBrowserDebuggerAgent> m_browserDebuggerAgent;
- OwnPtr<InspectorProfilerAgent> m_profilerAgent;
-#endif
- OwnPtr<HTTPHeaderMap> m_extraHeaders;
-#if ENABLE(WORKERS)
- typedef HashMap<intptr_t, RefPtr<InspectorWorkerResource> > WorkersMap;
-
- WorkersMap m_workers;
-#endif
};
-} // namespace WebCore
+}
#endif // !defined(InspectorController_h)
diff --git a/Source/WebCore/inspector/InspectorDOMAgent.cpp b/Source/WebCore/inspector/InspectorDOMAgent.cpp
index 6e10f09..e222edb 100644
--- a/Source/WebCore/inspector/InspectorDOMAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDOMAgent.cpp
@@ -208,8 +208,7 @@ public:
}
InspectorDOMAgent::InspectorDOMAgent(InjectedScriptHost* injectedScriptHost, InspectorFrontend* frontend)
- : EventListener(InspectorDOMAgentType)
- , m_injectedScriptHost(injectedScriptHost)
+ : m_injectedScriptHost(injectedScriptHost)
, m_frontend(frontend)
, m_domListener(0)
, m_lastNodeId(1)
@@ -222,16 +221,22 @@ InspectorDOMAgent::~InspectorDOMAgent()
reset();
}
+Vector<Document*> InspectorDOMAgent::documents()
+{
+ Vector<Document*> result;
+ for (Frame* frame = m_document->frame(); frame; frame = frame->tree()->traverseNext()) {
+ Document* document = frame->document();
+ if (!document)
+ continue;
+ result.append(document);
+ }
+ return result;
+}
+
void InspectorDOMAgent::reset()
{
searchCanceled();
discardBindings();
-
- ListHashSet<RefPtr<Document> > copy = m_documents;
- for (ListHashSet<RefPtr<Document> >::iterator it = copy.begin(); it != copy.end(); ++it)
- stopListening((*it).get());
-
- ASSERT(!m_documents.size());
}
void InspectorDOMAgent::setDOMListener(DOMListener* listener)
@@ -241,13 +246,14 @@ void InspectorDOMAgent::setDOMListener(DOMListener* listener)
void InspectorDOMAgent::setDocument(Document* doc)
{
- if (doc == mainFrameDocument())
+ if (doc == m_document.get())
return;
reset();
+ m_document = doc;
+
if (doc) {
- startListening(doc);
if (doc->documentElement())
pushDocumentToFrontend();
} else
@@ -260,66 +266,6 @@ void InspectorDOMAgent::releaseDanglingNodes()
m_danglingNodeToIdMaps.clear();
}
-void InspectorDOMAgent::startListeningFrameDocument(Node* frameOwnerNode)
-{
- ASSERT(frameOwnerNode->isFrameOwnerElement());
- HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(frameOwnerNode);
- Document* doc = frameOwner->contentDocument();
- if (doc)
- startListening(doc);
-}
-
-void InspectorDOMAgent::startListening(Document* doc)
-{
- if (m_documents.contains(doc))
- return;
-
- doc->addEventListener(eventNames().DOMContentLoadedEvent, this, false);
- doc->addEventListener(eventNames().loadEvent, this, true);
- m_documents.add(doc);
-}
-
-void InspectorDOMAgent::stopListening(Document* doc)
-{
- if (!m_documents.contains(doc))
- return;
-
- doc->removeEventListener(eventNames().DOMContentLoadedEvent, this, false);
- doc->removeEventListener(eventNames().loadEvent, this, true);
- m_documents.remove(doc);
-}
-
-void InspectorDOMAgent::handleEvent(ScriptExecutionContext*, Event* event)
-{
- AtomicString type = event->type();
- Node* node = event->target()->toNode();
-
- if (type == eventNames().DOMContentLoadedEvent) {
- // Re-push document once it is loaded.
- discardBindings();
- pushDocumentToFrontend();
- } else if (type == eventNames().loadEvent) {
- long frameOwnerId = m_documentNodeToIdMap.get(node);
- if (!frameOwnerId)
- return;
-
- if (!m_childrenRequested.contains(frameOwnerId)) {
- // No children are mapped yet -> only notify on changes of hasChildren.
- m_frontend->childNodeCountUpdated(frameOwnerId, innerChildNodeCount(node));
- } else {
- // Re-add frame owner element together with its new children.
- long parentId = m_documentNodeToIdMap.get(innerParentNode(node));
- m_frontend->childNodeRemoved(parentId, frameOwnerId);
- RefPtr<InspectorObject> value = buildObjectForNode(node, 0, &m_documentNodeToIdMap);
- Node* previousSibling = innerPreviousSibling(node);
- long prevId = previousSibling ? m_documentNodeToIdMap.get(previousSibling) : 0;
- m_frontend->childNodeInserted(parentId, prevId, value.release());
- // Invalidate children requested flag for the element.
- m_childrenRequested.remove(m_childrenRequested.find(frameOwnerId));
- }
- }
-}
-
long InspectorDOMAgent::bind(Node* node, NodeToIdMap* nodesMap)
{
long id = nodesMap->get(node);
@@ -336,7 +282,6 @@ void InspectorDOMAgent::unbind(Node* node, NodeToIdMap* nodesMap)
{
if (node->isFrameOwnerElement()) {
const HTMLFrameOwnerElement* frameOwner = static_cast<const HTMLFrameOwnerElement*>(node);
- stopListening(frameOwner->contentDocument());
if (m_domListener)
m_domListener->didRemoveDocument(frameOwner->contentDocument());
}
@@ -360,11 +305,10 @@ void InspectorDOMAgent::unbind(Node* node, NodeToIdMap* nodesMap)
bool InspectorDOMAgent::pushDocumentToFrontend()
{
- Document* document = mainFrameDocument();
- if (!document)
+ if (!m_document)
return false;
- if (!m_documentNodeToIdMap.contains(document))
- m_frontend->setDocument(buildObjectForNode(document, 2, &m_documentNodeToIdMap));
+ if (!m_documentNodeToIdMap.contains(m_document))
+ m_frontend->setDocument(buildObjectForNode(m_document.get(), 2, &m_documentNodeToIdMap));
return true;
}
@@ -537,7 +481,7 @@ void InspectorDOMAgent::getOuterHTML(long nodeId, WTF::String* outerHTML)
if (!node || !node->isHTMLElement())
return;
- *outerHTML = static_cast<HTMLElement*>(node)->outerHTML();
+ *outerHTML = toHTMLElement(node)->outerHTML();
}
void InspectorDOMAgent::setOuterHTML(long nodeId, const String& outerHTML, long* newId)
@@ -552,16 +496,16 @@ void InspectorDOMAgent::setOuterHTML(long nodeId, const String& outerHTML, long*
Node* previousSibling = node->previousSibling();
ContainerNode* parentNode = node->parentNode();
- HTMLElement* htmlElement = static_cast<HTMLElement*>(node);
+ HTMLElement* htmlElement = toHTMLElement(node);
ExceptionCode ec = 0;
htmlElement->setOuterHTML(outerHTML, ec);
if (ec)
return;
if (requiresTotalUpdate) {
- Document* document = mainFrameDocument();
+ RefPtr<Document> document = m_document;
reset();
- setDocument(document);
+ setDocument(document.get());
*newId = 0;
return;
}
@@ -693,10 +637,9 @@ void InspectorDOMAgent::performSearch(const String& whitespaceTrimmedQuery, bool
searchCanceled();
// Find all frames, iframes and object elements to search their documents.
- for (Frame* frame = mainFrameDocument()->frame(); frame; frame = frame->tree()->traverseNext()) {
- Document* document = frame->document();
- if (!document)
- continue;
+ Vector<Document*> docs = documents();
+ for (Vector<Document*>::iterator it = docs.begin(); it != docs.end(); ++it) {
+ Document* document = *it;
if (!tagNameQuery.isEmpty() && startTagFound && endTagFound) {
m_pendingMatchJobs.append(new MatchExactTagNamesJob(document, tagNameQuery));
@@ -891,9 +834,6 @@ PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForContainerChildren(Nod
depth--;
}
- if (container->isFrameOwnerElement())
- startListeningFrameDocument(container);
-
while (child) {
children->pushObject(buildObjectForNode(child, depth, nodesMap));
child = innerNextSibling(child);
@@ -974,19 +914,37 @@ bool InspectorDOMAgent::isWhitespace(Node* node)
return node && node->nodeType() == Node::TEXT_NODE && node->nodeValue().stripWhiteSpace().length() == 0;
}
-Document* InspectorDOMAgent::mainFrameDocument() const
+void InspectorDOMAgent::mainFrameDOMContentLoaded()
{
- ListHashSet<RefPtr<Document> >::const_iterator it = m_documents.begin();
- if (it != m_documents.end())
- return it->get();
- return 0;
+ // Re-push document once it is loaded.
+ discardBindings();
+ pushDocumentToFrontend();
}
-bool InspectorDOMAgent::operator==(const EventListener& listener)
+void InspectorDOMAgent::loadEventFired(Document* document)
{
- if (const InspectorDOMAgent* inspectorDOMAgentListener = InspectorDOMAgent::cast(&listener))
- return mainFrameDocument() == inspectorDOMAgentListener->mainFrameDocument();
- return false;
+ Element* frameOwner = document->ownerElement();
+ if (!frameOwner)
+ return;
+
+ long frameOwnerId = m_documentNodeToIdMap.get(frameOwner);
+ if (!frameOwnerId)
+ return;
+
+ if (!m_childrenRequested.contains(frameOwnerId)) {
+ // No children are mapped yet -> only notify on changes of hasChildren.
+ m_frontend->childNodeCountUpdated(frameOwnerId, innerChildNodeCount(frameOwner));
+ } else {
+ // Re-add frame owner element together with its new children.
+ long parentId = m_documentNodeToIdMap.get(innerParentNode(frameOwner));
+ m_frontend->childNodeRemoved(parentId, frameOwnerId);
+ RefPtr<InspectorObject> value = buildObjectForNode(frameOwner, 0, &m_documentNodeToIdMap);
+ Node* previousSibling = innerPreviousSibling(frameOwner);
+ long prevId = previousSibling ? m_documentNodeToIdMap.get(previousSibling) : 0;
+ m_frontend->childNodeInserted(parentId, prevId, value.release());
+ // Invalidate children requested flag for the element.
+ m_childrenRequested.remove(m_childrenRequested.find(frameOwnerId));
+ }
}
void InspectorDOMAgent::didInsertDOMNode(Node* node)
@@ -1062,10 +1020,10 @@ void InspectorDOMAgent::characterDataModified(CharacterData* characterData)
Node* InspectorDOMAgent::nodeForPath(const String& path)
{
// The path is of form "1,HTML,2,BODY,1,DIV"
- Node* node = mainFrameDocument();
- if (!node)
+ if (!m_document)
return 0;
+ Node* node = m_document.get();
Vector<String> pathTokens;
path.split(",", false, pathTokens);
if (!pathTokens.size())
@@ -1153,7 +1111,7 @@ InjectedScript InspectorDOMAgent::injectedScriptForNodeId(long nodeId)
frame = document->frame();
}
} else
- frame = mainFrameDocument()->frame();
+ frame = m_document->frame();
if (frame)
return m_injectedScriptHost->injectedScriptFor(mainWorldScriptState(frame));
diff --git a/Source/WebCore/inspector/InspectorDOMAgent.h b/Source/WebCore/inspector/InspectorDOMAgent.h
index e4edf5d..4e603da 100644
--- a/Source/WebCore/inspector/InspectorDOMAgent.h
+++ b/Source/WebCore/inspector/InspectorDOMAgent.h
@@ -30,29 +30,22 @@
#ifndef InspectorDOMAgent_h
#define InspectorDOMAgent_h
-#include "EventListener.h"
-#include "EventTarget.h"
#include "InjectedScript.h"
#include "InjectedScriptHost.h"
#include "InspectorValues.h"
-#include "NodeList.h"
#include "Timer.h"
#include <wtf/Deque.h>
#include <wtf/ListHashSet.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
-#include <wtf/PassRefPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
#include <wtf/text/AtomicString.h>
namespace WebCore {
class ContainerNode;
-class CSSRule;
-class CSSRuleList;
-class CSSStyleDeclaration;
-class CSSStyleRule;
-class CSSStyleSheet;
class CharacterData;
class Document;
class Element;
@@ -79,7 +72,7 @@ struct EventListenerInfo {
const EventListenerVector eventListenerVector;
};
-class InspectorDOMAgent : public EventListener {
+class InspectorDOMAgent {
public:
struct DOMListener {
virtual ~DOMListener()
@@ -90,25 +83,17 @@ public:
virtual void didModifyDOMAttr(Element*) = 0;
};
- static PassRefPtr<InspectorDOMAgent> create(InjectedScriptHost* injectedScriptHost, InspectorFrontend* frontend)
+ static PassOwnPtr<InspectorDOMAgent> create(InjectedScriptHost* injectedScriptHost, InspectorFrontend* frontend)
{
- return adoptRef(new InspectorDOMAgent(injectedScriptHost, frontend));
- }
-
- static const InspectorDOMAgent* cast(const EventListener* listener)
- {
- return listener->type() == InspectorDOMAgentType
- ? static_cast<const InspectorDOMAgent*>(listener)
- : 0;
+ return adoptPtr(new InspectorDOMAgent(injectedScriptHost, frontend));
}
InspectorDOMAgent(InjectedScriptHost*, InspectorFrontend*);
~InspectorDOMAgent();
+ Vector<Document*> documents();
void reset();
- virtual bool operator==(const EventListener& other);
-
// Methods called from the frontend for DOM nodes inspection.
void getChildNodes(long nodeId);
void setAttribute(long elementId, const String& name, const String& value, bool* success);
@@ -131,6 +116,9 @@ public:
void setDocument(Document*);
void releaseDanglingNodes();
+ void mainFrameDOMContentLoaded();
+ void loadEventFired(Document*);
+
void didInsertDOMNode(Node*);
void didRemoveDOMNode(Node*);
void didModifyDOMAttr(Element*);
@@ -142,7 +130,6 @@ public:
void pushNodeByPathToFrontend(const String& path, long* nodeId);
long inspectedNode(unsigned long num);
void copyNode(long nodeId);
- const ListHashSet<RefPtr<Document> >& documents() { return m_documents; }
void setDOMListener(DOMListener*);
String documentURLString(Document*) const;
@@ -157,12 +144,6 @@ public:
static bool isWhitespace(Node*);
private:
- void startListeningFrameDocument(Node* frameOwnerNode);
- void startListening(Document*);
- void stopListening(Document*);
-
- virtual void handleEvent(ScriptExecutionContext*, Event*);
-
// Node-related methods.
typedef HashMap<RefPtr<Node>, long> NodeToIdMap;
long bind(Node*, NodeToIdMap*);
@@ -179,8 +160,6 @@ private:
PassRefPtr<InspectorArray> buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap);
PassRefPtr<InspectorObject> buildObjectForEventListener(const RegisteredEventListener&, const AtomicString& eventType, Node*);
- Document* mainFrameDocument() const;
-
void onMatchJobsTimer(Timer<InspectorDOMAgent>*);
void reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector);
@@ -201,7 +180,7 @@ private:
HashMap<long, NodeToIdMap*> m_idToNodesMap;
HashSet<long> m_childrenRequested;
long m_lastNodeId;
- ListHashSet<RefPtr<Document> > m_documents;
+ RefPtr<Document> m_document;
Deque<MatchJob*> m_pendingMatchJobs;
Timer<InspectorDOMAgent> m_matchJobsTimer;
HashSet<RefPtr<Node> > m_searchResults;
diff --git a/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp b/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp
index 2241a16..0919b64 100644
--- a/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp
@@ -48,6 +48,9 @@ namespace WebCore {
InspectorDOMStorageAgent::~InspectorDOMStorageAgent()
{
+ DOMStorageResourcesMap::iterator domStorageEnd = m_domStorageResources->end();
+ for (DOMStorageResourcesMap::iterator it = m_domStorageResources->begin(); it != domStorageEnd; ++it)
+ it->second->unbind();
}
void InspectorDOMStorageAgent::getDOMStorageEntries(long storageId, RefPtr<InspectorArray>* entries)
diff --git a/Source/WebCore/inspector/InspectorDOMStorageAgent.h b/Source/WebCore/inspector/InspectorDOMStorageAgent.h
index f1d4d5c..987c530 100644
--- a/Source/WebCore/inspector/InspectorDOMStorageAgent.h
+++ b/Source/WebCore/inspector/InspectorDOMStorageAgent.h
@@ -30,8 +30,8 @@
#define InspectorDOMStorageAgent_h
#include "PlatformString.h"
-#include "wtf/HashMap.h"
-#include "wtf/PassRefPtr.h"
+#include <wtf/HashMap.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -40,13 +40,13 @@ class InspectorDOMStorageResource;
class InspectorFrontend;
class Storage;
-class InspectorDOMStorageAgent : public RefCounted<InspectorDOMStorageAgent> {
+class InspectorDOMStorageAgent {
public:
typedef HashMap<int, RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesMap;
- static PassRefPtr<InspectorDOMStorageAgent> create(DOMStorageResourcesMap* domStorageResources, InspectorFrontend* frontend)
+ static PassOwnPtr<InspectorDOMStorageAgent> create(DOMStorageResourcesMap* domStorageResources, InspectorFrontend* frontend)
{
- return adoptRef(new InspectorDOMStorageAgent(domStorageResources, frontend));
+ return adoptPtr(new InspectorDOMStorageAgent(domStorageResources, frontend));
}
virtual ~InspectorDOMStorageAgent();
@@ -59,8 +59,6 @@ public:
// Called from the injected script.
void selectDOMStorage(Storage* storage);
- InspectorFrontend* frontend() { return m_frontend; }
-
private:
InspectorDOMStorageAgent(DOMStorageResourcesMap*, InspectorFrontend*);
diff --git a/Source/WebCore/inspector/InspectorDOMStorageResource.h b/Source/WebCore/inspector/InspectorDOMStorageResource.h
index ee09974..f0975ba 100644
--- a/Source/WebCore/inspector/InspectorDOMStorageResource.h
+++ b/Source/WebCore/inspector/InspectorDOMStorageResource.h
@@ -51,6 +51,7 @@ namespace WebCore {
{
return adoptRef(new InspectorDOMStorageResource(domStorage, isLocalStorage, frame));
}
+
static const InspectorDOMStorageResource* cast(const EventListener* listener)
{
return listener->type() == InspectorDOMStorageResourceType ? static_cast<const InspectorDOMStorageResource*>(listener) : 0;
diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
index 36bcab8..221bdf2 100644
--- a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp
@@ -34,7 +34,7 @@
#include "Database.h"
#include "ExceptionCode.h"
-#include "InspectorController.h"
+#include "InspectorAgent.h"
#include "InspectorDatabaseResource.h"
#include "InspectorFrontend.h"
#include "InspectorValues.h"
@@ -52,32 +52,48 @@
namespace WebCore {
+class InspectorDatabaseAgent::FrontendProvider : public RefCounted<InspectorDatabaseAgent::FrontendProvider> {
+public:
+ static PassRefPtr<FrontendProvider> create(InspectorFrontend* inspectorFrontend)
+ {
+ return adoptRef(new FrontendProvider(inspectorFrontend));
+ }
+
+ virtual ~FrontendProvider() { }
+
+ InspectorFrontend* frontend() { return m_inspectorFrontend; }
+ void clearFrontend() { m_inspectorFrontend = 0; }
+private:
+ FrontendProvider(InspectorFrontend* inspectorFrontend) : m_inspectorFrontend(inspectorFrontend) { }
+ InspectorFrontend* m_inspectorFrontend;
+};
+
namespace {
long lastTransactionId = 0;
-void reportTransactionFailed(InspectorDatabaseAgent* agent, long transactionId, SQLError* error)
+void reportTransactionFailed(InspectorFrontend* frontend, long transactionId, SQLError* error)
{
- if (!agent->frontend())
+ if (!frontend)
return;
RefPtr<InspectorObject> errorObject = InspectorObject::create();
errorObject->setString("message", error->message());
errorObject->setNumber("code", error->code());
- agent->frontend()->sqlTransactionFailed(transactionId, errorObject);
+ frontend->sqlTransactionFailed(transactionId, errorObject);
}
class StatementCallback : public SQLStatementCallback {
public:
- static PassRefPtr<StatementCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ static PassRefPtr<StatementCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
{
- return adoptRef(new StatementCallback(transactionId, agent));
+ return adoptRef(new StatementCallback(transactionId, frontendProvider));
}
virtual ~StatementCallback() { }
virtual bool handleEvent(SQLTransaction*, SQLResultSet* resultSet)
{
- if (!m_agent->frontend())
+ if (!m_frontendProvider->frontend())
return true;
SQLResultSetRowList* rowList = resultSet->rows();
@@ -97,92 +113,92 @@ public:
case SQLValue::NullValue: values->pushValue(InspectorValue::null()); break;
}
}
- m_agent->frontend()->sqlTransactionSucceeded(m_transactionId, columnNames, values);
+ m_frontendProvider->frontend()->sqlTransactionSucceeded(m_transactionId, columnNames, values);
return true;
}
private:
- StatementCallback(long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ StatementCallback(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
: m_transactionId(transactionId)
- , m_agent(agent) { }
+ , m_frontendProvider(frontendProvider) { }
long m_transactionId;
- RefPtr<InspectorDatabaseAgent> m_agent;
+ RefPtr<InspectorDatabaseAgent::FrontendProvider> m_frontendProvider;
};
class StatementErrorCallback : public SQLStatementErrorCallback {
public:
- static PassRefPtr<StatementErrorCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ static PassRefPtr<StatementErrorCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
{
- return adoptRef(new StatementErrorCallback(transactionId, agent));
+ return adoptRef(new StatementErrorCallback(transactionId, frontendProvider));
}
virtual ~StatementErrorCallback() { }
virtual bool handleEvent(SQLTransaction*, SQLError* error)
{
- reportTransactionFailed(m_agent.get(), m_transactionId, error);
+ reportTransactionFailed(m_frontendProvider->frontend(), m_transactionId, error);
return true;
}
private:
- StatementErrorCallback(long transactionId, RefPtr<InspectorDatabaseAgent> agent)
+ StatementErrorCallback(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
: m_transactionId(transactionId)
- , m_agent(agent) { }
+ , m_frontendProvider(frontendProvider) { }
long m_transactionId;
- RefPtr<InspectorDatabaseAgent> m_agent;
+ RefPtr<InspectorDatabaseAgent::FrontendProvider> m_frontendProvider;
};
class TransactionCallback : public SQLTransactionCallback {
public:
- static PassRefPtr<TransactionCallback> create(const String& sqlStatement, long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ static PassRefPtr<TransactionCallback> create(const String& sqlStatement, long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
{
- return adoptRef(new TransactionCallback(sqlStatement, transactionId, agent));
+ return adoptRef(new TransactionCallback(sqlStatement, transactionId, frontendProvider));
}
virtual ~TransactionCallback() { }
virtual bool handleEvent(SQLTransaction* transaction)
{
- if (!m_agent->frontend())
+ if (!m_frontendProvider->frontend())
return true;
Vector<SQLValue> sqlValues;
- RefPtr<SQLStatementCallback> callback(StatementCallback::create(m_transactionId, m_agent));
- RefPtr<SQLStatementErrorCallback> errorCallback(StatementErrorCallback::create(m_transactionId, m_agent));
+ RefPtr<SQLStatementCallback> callback(StatementCallback::create(m_transactionId, m_frontendProvider));
+ RefPtr<SQLStatementErrorCallback> errorCallback(StatementErrorCallback::create(m_transactionId, m_frontendProvider));
ExceptionCode ec = 0;
transaction->executeSQL(m_sqlStatement, sqlValues, callback.release(), errorCallback.release(), ec);
return true;
}
private:
- TransactionCallback(const String& sqlStatement, long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ TransactionCallback(const String& sqlStatement, long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
: m_sqlStatement(sqlStatement)
, m_transactionId(transactionId)
- , m_agent(agent) { }
+ , m_frontendProvider(frontendProvider) { }
String m_sqlStatement;
long m_transactionId;
- RefPtr<InspectorDatabaseAgent> m_agent;
+ RefPtr<InspectorDatabaseAgent::FrontendProvider> m_frontendProvider;
};
class TransactionErrorCallback : public SQLTransactionErrorCallback {
public:
- static PassRefPtr<TransactionErrorCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ static PassRefPtr<TransactionErrorCallback> create(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
{
- return adoptRef(new TransactionErrorCallback(transactionId, agent));
+ return adoptRef(new TransactionErrorCallback(transactionId, frontendProvider));
}
virtual ~TransactionErrorCallback() { }
virtual bool handleEvent(SQLError* error)
{
- reportTransactionFailed(m_agent.get(), m_transactionId, error);
+ reportTransactionFailed(m_frontendProvider->frontend(), m_transactionId, error);
return true;
}
private:
- TransactionErrorCallback(long transactionId, PassRefPtr<InspectorDatabaseAgent> agent)
+ TransactionErrorCallback(long transactionId, PassRefPtr<InspectorDatabaseAgent::FrontendProvider> frontendProvider)
: m_transactionId(transactionId)
- , m_agent(agent) { }
+ , m_frontendProvider(frontendProvider) { }
long m_transactionId;
- RefPtr<InspectorDatabaseAgent> m_agent;
+ RefPtr<InspectorDatabaseAgent::FrontendProvider> m_frontendProvider;
};
class TransactionSuccessCallback : public VoidCallback {
@@ -204,6 +220,7 @@ private:
InspectorDatabaseAgent::~InspectorDatabaseAgent()
{
+ m_frontendProvider->clearFrontend();
}
void InspectorDatabaseAgent::getDatabaseTableNames(long databaseId, RefPtr<InspectorArray>* names)
@@ -226,8 +243,8 @@ void InspectorDatabaseAgent::executeSQL(long databaseId, const String& query, bo
}
*transactionId = ++lastTransactionId;
- RefPtr<SQLTransactionCallback> callback(TransactionCallback::create(query, *transactionId, this));
- RefPtr<SQLTransactionErrorCallback> errorCallback(TransactionErrorCallback::create(*transactionId, this));
+ RefPtr<SQLTransactionCallback> callback(TransactionCallback::create(query, *transactionId, m_frontendProvider));
+ RefPtr<SQLTransactionErrorCallback> errorCallback(TransactionErrorCallback::create(*transactionId, m_frontendProvider));
RefPtr<VoidCallback> successCallback(TransactionSuccessCallback::create());
database->transaction(callback.release(), errorCallback.release(), successCallback.release());
*success = true;
@@ -243,25 +260,20 @@ Database* InspectorDatabaseAgent::databaseForId(long databaseId)
void InspectorDatabaseAgent::selectDatabase(Database* database)
{
- if (!m_frontend)
+ if (!m_frontendProvider->frontend())
return;
for (DatabaseResourcesMap::iterator it = m_databaseResources->begin(); it != m_databaseResources->end(); ++it) {
if (it->second->database() == database) {
- m_frontend->selectDatabase(it->first);
+ m_frontendProvider->frontend()->selectDatabase(it->first);
break;
}
}
}
-void InspectorDatabaseAgent::clearFrontend()
-{
- m_frontend = 0;
-}
-
InspectorDatabaseAgent::InspectorDatabaseAgent(DatabaseResourcesMap* databaseResources, InspectorFrontend* frontend)
: m_databaseResources(databaseResources)
- , m_frontend(frontend)
+ , m_frontendProvider(FrontendProvider::create(frontend))
{
}
diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.h b/Source/WebCore/inspector/InspectorDatabaseAgent.h
index a9e9a5d..4ad3e62 100644
--- a/Source/WebCore/inspector/InspectorDatabaseAgent.h
+++ b/Source/WebCore/inspector/InspectorDatabaseAgent.h
@@ -30,8 +30,8 @@
#define InspectorDatabaseAgent_h
#include "PlatformString.h"
-#include "wtf/HashMap.h"
-#include "wtf/PassRefPtr.h"
+#include <wtf/HashMap.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -40,13 +40,15 @@ class InspectorArray;
class InspectorDatabaseResource;
class InspectorFrontend;
-class InspectorDatabaseAgent : public RefCounted<InspectorDatabaseAgent> {
+class InspectorDatabaseAgent {
public:
+ class FrontendProvider;
+
typedef HashMap<int, RefPtr<InspectorDatabaseResource> > DatabaseResourcesMap;
- static PassRefPtr<InspectorDatabaseAgent> create(DatabaseResourcesMap* databaseResources, InspectorFrontend* frontend)
+ static PassOwnPtr<InspectorDatabaseAgent> create(DatabaseResourcesMap* databaseResources, InspectorFrontend* frontend)
{
- return adoptRef(new InspectorDatabaseAgent(databaseResources, frontend));
+ return adoptPtr(new InspectorDatabaseAgent(databaseResources, frontend));
}
virtual ~InspectorDatabaseAgent();
@@ -59,14 +61,11 @@ public:
Database* databaseForId(long databaseId);
void selectDatabase(Database* database);
- InspectorFrontend* frontend() { return m_frontend; }
- void clearFrontend();
-
private:
InspectorDatabaseAgent(DatabaseResourcesMap*, InspectorFrontend*);
DatabaseResourcesMap* m_databaseResources;
- InspectorFrontend* m_frontend;
+ RefPtr<FrontendProvider> m_frontendProvider;
};
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorDatabaseInstrumentation.h b/Source/WebCore/inspector/InspectorDatabaseInstrumentation.h
new file mode 100644
index 0000000..0ad1460
--- /dev/null
+++ b/Source/WebCore/inspector/InspectorDatabaseInstrumentation.h
@@ -0,0 +1,52 @@
+/*
+* Copyright (C) 2011 Google Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of Google Inc. nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef InspectorDatabaseInstrumentation_h
+#define InspectorDatabaseInstrumentation_h
+
+#include "Database.h"
+#include "InspectorInstrumentation.h"
+#include <wtf/PassRefPtr.h>
+
+namespace WebCore {
+
+#if ENABLE(DATABASE)
+inline void InspectorInstrumentation::didOpenDatabase(ScriptExecutionContext* context, PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
+ didOpenDatabaseImpl(inspectorAgent, database, domain, name, version);
+#endif
+}
+#endif
+
+} // namespace WebCore
+
+#endif // !defined(InspectorDatabaseInstrumentation_h)
diff --git a/Source/WebCore/inspector/InspectorDatabaseResource.cpp b/Source/WebCore/inspector/InspectorDatabaseResource.cpp
index ba67818..e2d2f81 100644
--- a/Source/WebCore/inspector/InspectorDatabaseResource.cpp
+++ b/Source/WebCore/inspector/InspectorDatabaseResource.cpp
@@ -51,28 +51,17 @@ InspectorDatabaseResource::InspectorDatabaseResource(PassRefPtr<Database> databa
, m_domain(domain)
, m_name(name)
, m_version(version)
- , m_scriptObjectCreated(false)
{
}
void InspectorDatabaseResource::bind(InspectorFrontend* frontend)
{
- if (m_scriptObjectCreated)
- return;
-
RefPtr<InspectorObject> jsonObject = InspectorObject::create();
jsonObject->setNumber("id", m_id);
jsonObject->setString("domain", m_domain);
jsonObject->setString("name", m_name);
jsonObject->setString("version", m_version);
-
frontend->addDatabase(jsonObject);
- m_scriptObjectCreated = true;
-}
-
-void InspectorDatabaseResource::unbind()
-{
- m_scriptObjectCreated = false;
}
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorDatabaseResource.h b/Source/WebCore/inspector/InspectorDatabaseResource.h
index 203995b..24d4f1c 100644
--- a/Source/WebCore/inspector/InspectorDatabaseResource.h
+++ b/Source/WebCore/inspector/InspectorDatabaseResource.h
@@ -46,7 +46,6 @@ public:
static PassRefPtr<InspectorDatabaseResource> create(PassRefPtr<Database> database, const String& domain, const String& name, const String& version);
void bind(InspectorFrontend* frontend);
- void unbind();
Database* database() { return m_database.get(); }
long id() const { return m_id; }
private:
@@ -57,7 +56,6 @@ private:
String m_domain;
String m_name;
String m_version;
- bool m_scriptObjectCreated;
};
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorDebuggerAgent.cpp
index acfbb6e..e8b4ad5 100644
--- a/Source/WebCore/inspector/InspectorDebuggerAgent.cpp
+++ b/Source/WebCore/inspector/InspectorDebuggerAgent.cpp
@@ -34,41 +34,44 @@
#include "InjectedScript.h"
#include "InjectedScriptHost.h"
#include "InspectorFrontend.h"
+#include "InspectorState.h"
#include "InspectorValues.h"
#include "PlatformString.h"
#include "ScriptDebugServer.h"
+#include <wtf/text/StringConcatenate.h>
namespace WebCore {
-PassOwnPtr<InspectorDebuggerAgent> InspectorDebuggerAgent::create(InspectorController* inspectorController, InspectorFrontend* frontend)
+namespace DebuggerAgentState {
+static const char javaScriptBreakpoints[] = "javaScriptBreakopints";
+};
+
+PassOwnPtr<InspectorDebuggerAgent> InspectorDebuggerAgent::create(InspectorAgent* inspectorAgent, InspectorFrontend* frontend, bool eraseStickyBreakpoints)
{
- OwnPtr<InspectorDebuggerAgent> agent = adoptPtr(new InspectorDebuggerAgent(inspectorController, frontend));
+ OwnPtr<InspectorDebuggerAgent> agent = adoptPtr(new InspectorDebuggerAgent(inspectorAgent, frontend, eraseStickyBreakpoints));
ScriptDebugServer::shared().clearBreakpoints();
// FIXME(WK44513): breakpoints activated flag should be synchronized between all front-ends
ScriptDebugServer::shared().setBreakpointsActivated(true);
- ScriptDebugServer::shared().addListener(agent.get(), inspectorController->inspectedPage());
+ ScriptDebugServer::shared().addListener(agent.get(), inspectorAgent->inspectedPage());
return agent.release();
}
-InspectorDebuggerAgent::InspectorDebuggerAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
- : m_inspectorController(inspectorController)
+InspectorDebuggerAgent::InspectorDebuggerAgent(InspectorAgent* inspectorAgent, InspectorFrontend* frontend, bool eraseStickyBreakpoints)
+ : m_inspectorAgent(inspectorAgent)
, m_frontend(frontend)
, m_pausedScriptState(0)
, m_javaScriptPauseScheduled(false)
{
+ if (eraseStickyBreakpoints)
+ inspectorAgent->state()->setObject(DebuggerAgentState::javaScriptBreakpoints, InspectorObject::create());
}
InspectorDebuggerAgent::~InspectorDebuggerAgent()
{
- ScriptDebugServer::shared().removeListener(this, m_inspectorController->inspectedPage());
+ ScriptDebugServer::shared().removeListener(this, m_inspectorAgent->inspectedPage());
m_pausedScriptState = 0;
}
-bool InspectorDebuggerAgent::isDebuggerAlwaysEnabled()
-{
- return ScriptDebugServer::shared().isDebuggerAlwaysEnabled();
-}
-
void InspectorDebuggerAgent::activateBreakpoints()
{
ScriptDebugServer::shared().activateBreakpoints();
@@ -79,37 +82,107 @@ void InspectorDebuggerAgent::deactivateBreakpoints()
ScriptDebugServer::shared().deactivateBreakpoints();
}
-void InspectorDebuggerAgent::setStickyBreakpoint(const String& url, unsigned lineNumber, const String& condition, bool enabled)
+void InspectorDebuggerAgent::inspectedURLChanged(const String&)
{
- HashMap<String, ScriptBreakpoints>::iterator it = m_stickyBreakpoints.find(url);
- if (it == m_stickyBreakpoints.end())
- it = m_stickyBreakpoints.set(url, ScriptBreakpoints()).first;
- it->second.set(lineNumber, Breakpoint(condition, enabled));
+ m_scripts.clear();
+ m_breakpointIdToDebugServerBreakpointIds.clear();
+}
- URLToSourceIDsMap::iterator urlToSourceIDsIterator = m_urlToSourceIDs.find(url);
- if (urlToSourceIDsIterator == m_urlToSourceIDs.end())
+void InspectorDebuggerAgent::setJavaScriptBreakpoint(const String& url, int lineNumber, int columnNumber, const String& condition, bool enabled, String* outBreakpointId, RefPtr<InspectorArray>* locations)
+{
+ String breakpointId = makeString(url, ":", String::number(lineNumber), ":", String::number(columnNumber));
+ RefPtr<InspectorObject> breakpointsCookie = m_inspectorAgent->state()->getObject(DebuggerAgentState::javaScriptBreakpoints);
+ if (breakpointsCookie->find(breakpointId) != breakpointsCookie->end())
return;
- const Vector<String>& sourceIDs = urlToSourceIDsIterator->second;
- for (size_t i = 0; i < sourceIDs.size(); ++i)
- restoreBreakpoint(sourceIDs[i], lineNumber, condition, enabled);
+ RefPtr<InspectorObject> breakpointObject = InspectorObject::create();
+ breakpointObject->setString("url", url);
+ breakpointObject->setNumber("lineNumber", lineNumber);
+ breakpointObject->setNumber("columnNumber", columnNumber);
+ breakpointObject->setString("condition", condition);
+ breakpointObject->setBoolean("enabled", enabled);
+ breakpointsCookie->setObject(breakpointId, breakpointObject);
+ m_inspectorAgent->state()->setObject(DebuggerAgentState::javaScriptBreakpoints, breakpointsCookie);
+
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, enabled);
+ for (ScriptsMap::iterator it = m_scripts.begin(); it != m_scripts.end(); ++it) {
+ if (it->second.url != url)
+ continue;
+ int actualLineNumber = 0, actualColumnNumber = 0;
+ if (!resolveBreakpoint(breakpointId, it->first, breakpoint, &actualLineNumber, &actualColumnNumber))
+ continue;
+ RefPtr<InspectorObject> location = InspectorObject::create();
+ location->setString("sourceID", it->first);
+ location->setNumber("lineNumber", actualLineNumber);
+ location->setNumber("columnNumber", actualColumnNumber);
+ locations->get()->pushObject(location);
+ }
+ *outBreakpointId = breakpointId;
}
-void InspectorDebuggerAgent::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, String* breakpointId, unsigned int* actualLineNumber)
+void InspectorDebuggerAgent::setJavaScriptBreakpointBySourceId(const String& sourceId, int lineNumber, int columnNumber, const String& condition, bool enabled, String* outBreakpointId, int* actualLineNumber, int* actualColumnNumber)
{
- *breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, lineNumber, condition, enabled, actualLineNumber);
+ String breakpointId = makeString(sourceId, ":", String::number(lineNumber), ":", String::number(columnNumber));
+ if (m_breakpointIdToDebugServerBreakpointIds.find(breakpointId) != m_breakpointIdToDebugServerBreakpointIds.end())
+ return;
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, enabled);
+ if (!resolveBreakpoint(breakpointId, sourceId, breakpoint, actualLineNumber, actualColumnNumber))
+ return;
+ *outBreakpointId = breakpointId;
}
-void InspectorDebuggerAgent::removeBreakpoint(const String& breakpointId)
+void InspectorDebuggerAgent::removeJavaScriptBreakpoint(const String& breakpointId)
{
- ScriptDebugServer::shared().removeBreakpoint(breakpointId);
+ RefPtr<InspectorObject> breakpointsCookie = m_inspectorAgent->state()->getObject(DebuggerAgentState::javaScriptBreakpoints);
+ breakpointsCookie->remove(breakpointId);
+ m_inspectorAgent->state()->setObject(DebuggerAgentState::javaScriptBreakpoints, breakpointsCookie);
+
+ BreakpointIdToDebugServerBreakpointIdsMap::iterator debugServerBreakpointIdsIterator = m_breakpointIdToDebugServerBreakpointIds.find(breakpointId);
+ if (debugServerBreakpointIdsIterator == m_breakpointIdToDebugServerBreakpointIds.end())
+ return;
+ for (size_t i = 0; i < debugServerBreakpointIdsIterator->second.size(); ++i)
+ ScriptDebugServer::shared().removeBreakpoint(debugServerBreakpointIdsIterator->second[i]);
+ m_breakpointIdToDebugServerBreakpointIds.remove(debugServerBreakpointIdsIterator);
}
-void InspectorDebuggerAgent::restoreBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled)
+void InspectorDebuggerAgent::continueToLocation(const String& sourceId, int lineNumber, int columnNumber)
{
- unsigned actualLineNumber = 0;
- String breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, lineNumber, condition, enabled, &actualLineNumber);
- if (!breakpointId.isEmpty())
- m_frontend->breakpointResolved(breakpointId, sourceID, actualLineNumber, condition, enabled, lineNumber);
+ if (!m_continueToLocationBreakpointId.isEmpty()) {
+ ScriptDebugServer::shared().removeBreakpoint(m_continueToLocationBreakpointId);
+ m_continueToLocationBreakpointId = "";
+ }
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, "", true);
+ m_continueToLocationBreakpointId = ScriptDebugServer::shared().setBreakpoint(sourceId, breakpoint, &lineNumber, &columnNumber);
+ resume();
+}
+
+bool InspectorDebuggerAgent::resolveBreakpoint(const String& breakpointId, const String& sourceId, const ScriptBreakpoint& breakpoint, int* actualLineNumber, int* actualColumnNumber)
+{
+ ScriptsMap::iterator scriptIterator = m_scripts.find(sourceId);
+ if (scriptIterator == m_scripts.end())
+ return false;
+ Script& script = scriptIterator->second;
+ if (breakpoint.lineNumber < script.lineOffset)
+ return false;
+ if (!script.linesCount) {
+ script.linesCount = 1;
+ for (size_t i = 0; i < script.data.length(); ++i) {
+ if (script.data[i] == '\n')
+ script.linesCount += 1;
+ }
+ }
+ if (breakpoint.lineNumber >= script.lineOffset + script.linesCount)
+ return false;
+
+ String debugServerBreakpointId = ScriptDebugServer::shared().setBreakpoint(sourceId, breakpoint, actualLineNumber, actualColumnNumber);
+ if (debugServerBreakpointId.isEmpty())
+ return false;
+
+ BreakpointIdToDebugServerBreakpointIdsMap::iterator debugServerBreakpointIdsIterator = m_breakpointIdToDebugServerBreakpointIds.find(breakpointId);
+ if (debugServerBreakpointIdsIterator == m_breakpointIdToDebugServerBreakpointIds.end())
+ debugServerBreakpointIdsIterator = m_breakpointIdToDebugServerBreakpointIds.set(breakpointId, Vector<String>()).first;
+ debugServerBreakpointIdsIterator->second.append(debugServerBreakpointId);
+
+ return true;
}
void InspectorDebuggerAgent::editScriptSource(const String& sourceID, const String& newContent, bool* success, String* result, RefPtr<InspectorValue>* newCallFrames)
@@ -120,7 +193,7 @@ void InspectorDebuggerAgent::editScriptSource(const String& sourceID, const Stri
void InspectorDebuggerAgent::getScriptSource(const String& sourceID, String* scriptSource)
{
- *scriptSource = m_scriptIDToContent.get(sourceID);
+ *scriptSource = m_scripts.get(sourceID).data;
}
void InspectorDebuggerAgent::schedulePauseOnNextStatement(DebuggerEventType type, PassRefPtr<InspectorValue> data)
@@ -173,32 +246,25 @@ void InspectorDebuggerAgent::setPauseOnExceptionsState(long pauseState, long* ne
*newState = ScriptDebugServer::shared().pauseOnExceptionsState();
}
-void InspectorDebuggerAgent::evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result)
+void InspectorDebuggerAgent::evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
- InjectedScript injectedScript = m_inspectorController->injectedScriptHost()->injectedScriptForObjectId(callFrameId.get());
+ InjectedScript injectedScript = m_inspectorAgent->injectedScriptHost()->injectedScriptForObjectId(callFrameId.get());
if (!injectedScript.hasNoValue())
- injectedScript.evaluateOnCallFrame(callFrameId, expression, objectGroup, result);
+ injectedScript.evaluateOnCallFrame(callFrameId, expression, objectGroup, includeCommandLineAPI, result);
}
-void InspectorDebuggerAgent::getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result)
+void InspectorDebuggerAgent::getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
- InjectedScript injectedScript = m_inspectorController->injectedScriptHost()->injectedScriptForObjectId(callFrameId.get());
+ InjectedScript injectedScript = m_inspectorAgent->injectedScriptHost()->injectedScriptForObjectId(callFrameId.get());
if (!injectedScript.hasNoValue())
- injectedScript.getCompletionsOnCallFrame(callFrameId, expression, includeInspectorCommandLineAPI, result);
-}
-
-void InspectorDebuggerAgent::clearForPageNavigation()
-{
- m_scriptIDToContent.clear();
- m_urlToSourceIDs.clear();
- m_stickyBreakpoints.clear();
+ injectedScript.getCompletionsOnCallFrame(callFrameId, expression, includeCommandLineAPI, result);
}
PassRefPtr<InspectorValue> InspectorDebuggerAgent::currentCallFrames()
{
if (!m_pausedScriptState)
return InspectorValue::null();
- InjectedScript injectedScript = m_inspectorController->injectedScriptHost()->injectedScriptFor(m_pausedScriptState);
+ InjectedScript injectedScript = m_inspectorAgent->injectedScriptHost()->injectedScriptFor(m_pausedScriptState);
if (injectedScript.hasNoValue()) {
ASSERT_NOT_REACHED();
return InspectorValue::null();
@@ -213,24 +279,26 @@ void InspectorDebuggerAgent::didParseSource(const String& sourceID, const String
// Don't send script content to the front end until it's really needed.
m_frontend->parsedScriptSource(sourceID, url, lineOffset, columnOffset, data.length(), worldType);
- m_scriptIDToContent.set(sourceID, data);
+ m_scripts.set(sourceID, Script(url, data, lineOffset, columnOffset));
if (url.isEmpty())
return;
- URLToSourceIDsMap::iterator urlToSourceIDsIterator = m_urlToSourceIDs.find(url);
- if (urlToSourceIDsIterator == m_urlToSourceIDs.end())
- urlToSourceIDsIterator = m_urlToSourceIDs.set(url, Vector<String>()).first;
- urlToSourceIDsIterator->second.append(sourceID);
-
- HashMap<String, ScriptBreakpoints>::iterator stickyBreakpointsIterator = m_stickyBreakpoints.find(url);
- if (stickyBreakpointsIterator == m_stickyBreakpoints.end())
- return;
-
- const ScriptBreakpoints& breakpoints = stickyBreakpointsIterator->second;
- for (ScriptBreakpoints::const_iterator it = breakpoints.begin(); it != breakpoints.end(); ++it) {
- const Breakpoint& breakpoint = it->second;
- restoreBreakpoint(sourceID, it->first, breakpoint.first, breakpoint.second);
+ RefPtr<InspectorObject> breakpointsCookie = m_inspectorAgent->state()->getObject(DebuggerAgentState::javaScriptBreakpoints);
+ for (InspectorObject::iterator it = breakpointsCookie->begin(); it != breakpointsCookie->end(); ++it) {
+ RefPtr<InspectorObject> breakpointObject = it->second->asObject();
+ String breakpointURL;
+ breakpointObject->getString("url", &breakpointURL);
+ if (breakpointURL != url)
+ continue;
+ ScriptBreakpoint breakpoint;
+ breakpointObject->getNumber("lineNumber", &breakpoint.lineNumber);
+ breakpointObject->getNumber("columnNumber", &breakpoint.columnNumber);
+ breakpointObject->getString("condition", &breakpoint.condition);
+ breakpointObject->getBoolean("enabled", &breakpoint.enabled);
+ int actualLineNumber = 0, actualColumnNumber = 0;
+ if (resolveBreakpoint(it->first, sourceID, breakpoint, &actualLineNumber, &actualColumnNumber))
+ m_frontend->breakpointResolved(it->first, sourceID, actualLineNumber, actualColumnNumber);
}
}
@@ -250,6 +318,11 @@ void InspectorDebuggerAgent::didPause(ScriptState* scriptState)
m_frontend->pausedScript(m_breakProgramDetails);
m_javaScriptPauseScheduled = false;
+
+ if (!m_continueToLocationBreakpointId.isEmpty()) {
+ ScriptDebugServer::shared().removeBreakpoint(m_continueToLocationBreakpointId);
+ m_continueToLocationBreakpointId = "";
+ }
}
void InspectorDebuggerAgent::didContinue()
diff --git a/Source/WebCore/inspector/InspectorDebuggerAgent.h b/Source/WebCore/inspector/InspectorDebuggerAgent.h
index 4cb9f9c..644557f 100644
--- a/Source/WebCore/inspector/InspectorDebuggerAgent.h
+++ b/Source/WebCore/inspector/InspectorDebuggerAgent.h
@@ -32,6 +32,7 @@
#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
#include "InjectedScript.h"
+#include "ScriptBreakpoint.h"
#include "ScriptDebugListener.h"
#include "ScriptState.h"
#include <wtf/Forward.h>
@@ -42,7 +43,7 @@
namespace WebCore {
class InjectedScriptHost;
-class InspectorController;
+class InspectorAgent;
class InspectorFrontend;
class InspectorObject;
class InspectorValue;
@@ -56,17 +57,20 @@ enum DebuggerEventType {
class InspectorDebuggerAgent : public ScriptDebugListener {
WTF_MAKE_NONCOPYABLE(InspectorDebuggerAgent); WTF_MAKE_FAST_ALLOCATED;
public:
- static PassOwnPtr<InspectorDebuggerAgent> create(InspectorController*, InspectorFrontend*);
+ static PassOwnPtr<InspectorDebuggerAgent> create(InspectorAgent*, InspectorFrontend*, bool eraseStickyBreakpoints);
virtual ~InspectorDebuggerAgent();
- static bool isDebuggerAlwaysEnabled();
+ void inspectedURLChanged(const String& url);
// Part of the protocol.
void activateBreakpoints();
void deactivateBreakpoints();
- void setStickyBreakpoint(const String& url, unsigned lineNumber, const String& condition, bool enabled);
- void setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, String* breakpointId, unsigned int* actualLineNumber);
- void removeBreakpoint(const String& breakpointId);
+
+ void setJavaScriptBreakpoint(const String& url, int lineNumber, int columnNumber, const String& condition, bool enabled, String* breakpointId, RefPtr<InspectorArray>* locations);
+ void setJavaScriptBreakpointBySourceId(const String& sourceId, int lineNumber, int columnNumber, const String& condition, bool enabled, String* breakpointId, int* actualLineNumber, int* actualColumnNumber);
+ void removeJavaScriptBreakpoint(const String& breakpointId);
+ void continueToLocation(const String& sourceId, int lineNumber, int columnNumber);
+
void editScriptSource(const String& sourceID, const String& newContent, bool* success, String* result, RefPtr<InspectorValue>* newCallFrames);
void getScriptSource(const String& sourceID, String* scriptSource);
void schedulePauseOnNextStatement(DebuggerEventType type, PassRefPtr<InspectorValue> data);
@@ -78,13 +82,11 @@ public:
void stepInto();
void stepOut();
void setPauseOnExceptionsState(long pauseState, long* newState);
- void evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result);
- void getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result);
-
- void clearForPageNavigation();
+ void evaluateOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
+ void getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
private:
- InspectorDebuggerAgent(InspectorController*, InspectorFrontend*);
+ InspectorDebuggerAgent(InspectorAgent*, InspectorFrontend*, bool eraseStickyBreakpoints);
PassRefPtr<InspectorValue> currentCallFrames();
@@ -93,17 +95,42 @@ private:
virtual void didPause(ScriptState*);
virtual void didContinue();
- void restoreBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled);
-
- InspectorController* m_inspectorController;
+ bool resolveBreakpoint(const String& breakpointId, const String& sourceId, const ScriptBreakpoint&, int* actualLineNumber, int* actualColumnNumber);
+
+ class Script {
+ public:
+ Script()
+ : lineOffset(0)
+ , columnOffset(0)
+ , linesCount(0)
+ {
+ }
+
+ Script(const String& url, const String& data, int lineOffset, int columnOffset)
+ : url(url)
+ , data(data)
+ , lineOffset(lineOffset)
+ , columnOffset(columnOffset)
+ , linesCount(0)
+ {
+ }
+
+ String url;
+ String data;
+ int lineOffset;
+ int columnOffset;
+ int linesCount;
+ };
+
+ typedef HashMap<String, Script> ScriptsMap;
+ typedef HashMap<String, Vector<String> > BreakpointIdToDebugServerBreakpointIdsMap;
+
+ InspectorAgent* m_inspectorAgent;
InspectorFrontend* m_frontend;
ScriptState* m_pausedScriptState;
- HashMap<String, String> m_scriptIDToContent;
- typedef HashMap<String, Vector<String> > URLToSourceIDsMap;
- URLToSourceIDsMap m_urlToSourceIDs;
- typedef std::pair<String, bool> Breakpoint;
- typedef HashMap<unsigned, Breakpoint> ScriptBreakpoints;
- HashMap<String, ScriptBreakpoints> m_stickyBreakpoints;
+ ScriptsMap m_scripts;
+ BreakpointIdToDebugServerBreakpointIdsMap m_breakpointIdToDebugServerBreakpointIds;
+ String m_continueToLocationBreakpointId;
RefPtr<InspectorObject> m_breakProgramDetails;
bool m_javaScriptPauseScheduled;
};
diff --git a/Source/WebCore/inspector/InspectorFileSystemAgent.cpp b/Source/WebCore/inspector/InspectorFileSystemAgent.cpp
deleted file mode 100644
index 2a0df3c..0000000
--- a/Source/WebCore/inspector/InspectorFileSystemAgent.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "InspectorFileSystemAgent.h"
-
-#if ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)
-
-#include "AsyncFileWriter.h"
-#include "Document.h"
-#include "FileSystem.h"
-#include "FileSystemCallbacks.h"
-#include "Frame.h"
-#include "FrameTree.h"
-#include "InspectorController.h"
-#include "InspectorFrontend.h"
-#include "LocalFileSystem.h"
-#include "NotImplemented.h"
-#include "Page.h"
-#include "RuntimeEnabledFeatures.h"
-
-namespace WebCore {
-
-class InspectorFileSystemAgentCallbacks : public AsyncFileSystemCallbacks {
-public:
- InspectorFileSystemAgentCallbacks(InspectorFileSystemAgent* agent, AsyncFileSystem::Type type, const String& origin)
- : m_agent(agent)
- , m_type(type)
- , m_origin(origin)
- {
- }
-
- ~InspectorFileSystemAgentCallbacks()
- {
- }
-
- // FileSystemCallbacks is only used for getting filesystem. All other methods are irrelevant and will not be called.
- void didSucceed()
- {
- ASSERT_NOT_REACHED();
- }
-
- void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem> fileSystem)
- {
- // Agent will be alive even if InspectorController is destroyed until callback is run.
- m_agent->didGetFileSystemPath(fileSystem->root(), m_type, m_origin);
- }
-
- void didReadMetadata(const FileMetadata&)
- {
- ASSERT_NOT_REACHED();
- }
-
- void didReadDirectoryEntry(const String&, bool)
- {
- ASSERT_NOT_REACHED();
- }
-
- void didReadDirectoryEntries(bool)
- {
- ASSERT_NOT_REACHED();
- }
-
- void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long)
- {
- ASSERT_NOT_REACHED();
- }
-
- void didFail(int)
- {
- // FIXME: Is it useful to give back the code to Inspector UI?
- m_agent->didGetFileSystemError(m_type, m_origin);
- }
-
-private:
- RefPtr<InspectorFileSystemAgent> m_agent;
- AsyncFileSystem::Type m_type;
- String m_origin;
-};
-
-InspectorFileSystemAgent::InspectorFileSystemAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
- : m_inspectorController(inspectorController)
- , m_frontend(frontend)
-{
-}
-
-InspectorFileSystemAgent::~InspectorFileSystemAgent() { }
-
-void InspectorFileSystemAgent::stop()
-{
- m_inspectorController = 0;
-}
-
-#if PLATFORM(CHROMIUM)
-void InspectorFileSystemAgent::revealFolderInOS(const String& path)
-{
- // FIXME: Remove guard when revealFolderInOS is implemented for non-chromium platforms.
- WebCore::revealFolderInOS(path);
-}
-#else
-void InspectorFileSystemAgent::revealFolderInOS(const String&)
-{
- notImplemented();
-}
-#endif
-
-void InspectorFileSystemAgent::getFileSystemPathAsync(unsigned int type, const String& origin)
-{
- if (!RuntimeEnabledFeatures::fileSystemEnabled()) {
- m_frontend->didGetFileSystemDisabled();
- return;
- }
-
- AsyncFileSystem::Type asyncFileSystemType = static_cast<AsyncFileSystem::Type>(type);
- Frame* mainFrame = m_inspectorController->inspectedPage()->mainFrame();
- for (Frame* frame = mainFrame; frame; frame = frame->tree()->traverseNext()) {
- Document* document = frame->document();
- if (document && document->securityOrigin()->toString() == origin) {
- LocalFileSystem::localFileSystem().readFileSystem(document, asyncFileSystemType, 0, new InspectorFileSystemAgentCallbacks(this, asyncFileSystemType, origin));
- return;
- }
- }
-}
-
-void InspectorFileSystemAgent::didGetFileSystemPath(const String& root, AsyncFileSystem::Type type, const String& origin)
-{
- // When controller is being destroyed, this is set to 0. Agent can live even after m_inspectorController is destroyed.
- if (!m_inspectorController)
- return;
-
- m_frontend->didGetFileSystemPath(root, static_cast<unsigned int>(type), origin);
-}
-
-void InspectorFileSystemAgent::didGetFileSystemError(AsyncFileSystem::Type type, const String& origin)
-{
- // When controller is being destroyed, this is set to 0. Agent can live even after m_inspectorController is destroyed.
- if (!m_inspectorController)
- return;
- m_frontend->didGetFileSystemError(static_cast<unsigned int>(type), origin);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)
diff --git a/Source/WebCore/inspector/InspectorFileSystemAgent.h b/Source/WebCore/inspector/InspectorFileSystemAgent.h
deleted file mode 100644
index a85ad0f..0000000
--- a/Source/WebCore/inspector/InspectorFileSystemAgent.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef InspectorFileSystemAgent_h
-#define InspectorFileSystemAgent_h
-
-#if ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)
-
-#include "AsyncFileSystem.h"
-#include "AsyncFileSystemCallbacks.h"
-#include <wtf/PassRefPtr.h>
-
-namespace WebCore {
-
-class Document;
-class InspectorController;
-class InspectorFrontend;
-class LocalFileSystem;
-
-class InspectorFileSystemAgent : public RefCounted<InspectorFileSystemAgent> {
-public:
- static PassRefPtr<InspectorFileSystemAgent> create(InspectorController* inspectorController, InspectorFrontend* frontend)
- {
- return adoptRef(new InspectorFileSystemAgent(inspectorController, frontend));
- }
-
- ~InspectorFileSystemAgent();
- void stop();
-
- // From Frontend
- void getFileSystemPathAsync(unsigned int type, const String& origin);
- void revealFolderInOS(const String& path);
-
- // Backend to Frontend
- void didGetFileSystemPath(const String&, AsyncFileSystem::Type, const String& origin);
- void didGetFileSystemError(AsyncFileSystem::Type, const String& origin);
- void didGetFileSystemDisabled();
-
-private:
- InspectorFileSystemAgent(InspectorController*, InspectorFrontend*);
- void getFileSystemRoot(AsyncFileSystem::Type);
-
- InspectorController* m_inspectorController;
- InspectorFrontend* m_frontend;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)
-#endif // InspectorFileSystemAgent_h
diff --git a/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp b/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp
index 4812b2a..36864f3 100644
--- a/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp
+++ b/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp
@@ -47,14 +47,25 @@
namespace WebCore {
+static const char* inspectorAttachedHeightSetting = "inspectorAttachedHeight";
static const unsigned defaultAttachedHeight = 300;
static const float minimumAttachedHeight = 250.0f;
static const float maximumAttachedHeightRatio = 0.75f;
-InspectorFrontendClientLocal::InspectorFrontendClientLocal(InspectorController* inspectorController, Page* frontendPage)
+String InspectorFrontendClientLocal::Settings::getProperty(const String&)
+{
+ return String();
+}
+
+void InspectorFrontendClientLocal::Settings::setProperty(const String&, const String&)
+{
+}
+
+InspectorFrontendClientLocal::InspectorFrontendClientLocal(InspectorController* inspectorController, Page* frontendPage, PassOwnPtr<Settings> settings)
: m_inspectorController(inspectorController)
, m_frontendPage(frontendPage)
, m_frontendScriptState(0)
+ , m_settings(settings)
{
}
@@ -66,7 +77,7 @@ InspectorFrontendClientLocal::~InspectorFrontendClientLocal()
m_frontendPage = 0;
m_inspectorController = 0;
}
-
+
void InspectorFrontendClientLocal::windowObjectCleared()
{
// FIXME: don't keep reference to the script state
@@ -107,7 +118,7 @@ void InspectorFrontendClientLocal::changeAttachedWindowHeight(unsigned height)
{
unsigned totalHeight = m_frontendPage->mainFrame()->view()->visibleHeight() + m_inspectorController->inspectedPage()->mainFrame()->view()->visibleHeight();
unsigned attachedHeight = constrainedAttachedWindowHeight(height, totalHeight);
- m_inspectorController->setInspectorAttachedHeight(attachedHeight);
+ m_settings->setProperty(inspectorAttachedHeightSetting, String::number(attachedHeight));
setAttachedWindowHeight(attachedHeight);
}
@@ -133,9 +144,8 @@ void InspectorFrontendClientLocal::setAttachedWindow(bool attached)
void InspectorFrontendClientLocal::restoreAttachedWindowHeight()
{
unsigned inspectedPageHeight = m_inspectorController->inspectedPage()->mainFrame()->view()->visibleHeight();
- int attachedHeight = m_inspectorController->inspectorAttachedHeight();
- bool success = true;
- unsigned preferredHeight = success ? static_cast<unsigned>(attachedHeight) : defaultAttachedHeight;
+ String value = m_settings->getProperty(inspectorAttachedHeightSetting);
+ unsigned preferredHeight = value.isEmpty() ? defaultAttachedHeight : value.toUInt();
// This call might not go through (if the window starts out detached), but if the window is initially created attached,
// InspectorController::attachWindow is never called, so we need to make sure to set the attachedWindowHeight.
@@ -151,7 +161,7 @@ unsigned InspectorFrontendClientLocal::constrainedAttachedWindowHeight(unsigned
void InspectorFrontendClientLocal::sendMessageToBackend(const String& message)
{
- m_inspectorController->inspectorBackendDispatcher()->dispatch(message);
+ m_inspectorController->dispatchMessageFromFrontend(message);
}
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorFrontendClientLocal.h b/Source/WebCore/inspector/InspectorFrontendClientLocal.h
index 19f6ad1..238a262 100644
--- a/Source/WebCore/inspector/InspectorFrontendClientLocal.h
+++ b/Source/WebCore/inspector/InspectorFrontendClientLocal.h
@@ -33,6 +33,7 @@
#include "InspectorFrontendClient.h"
#include "ScriptState.h"
+#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
namespace WebCore {
@@ -44,7 +45,15 @@ class Page;
class InspectorFrontendClientLocal : public InspectorFrontendClient {
WTF_MAKE_NONCOPYABLE(InspectorFrontendClientLocal); WTF_MAKE_FAST_ALLOCATED;
public:
- InspectorFrontendClientLocal(InspectorController*, Page*);
+ class Settings {
+ public:
+ Settings() { }
+ virtual ~Settings() { }
+ virtual String getProperty(const String& name);
+ virtual void setProperty(const String& name, const String& value);
+ };
+
+ InspectorFrontendClientLocal(InspectorController*, Page*, PassOwnPtr<Settings>);
virtual ~InspectorFrontendClientLocal();
virtual void windowObjectCleared();
@@ -76,6 +85,7 @@ private:
ScriptState* m_frontendScriptState;
// TODO(yurys): this ref shouldn't be needed.
RefPtr<InspectorFrontendHost> m_frontendHost;
+ OwnPtr<InspectorFrontendClientLocal::Settings> m_settings;
};
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorFrontendHost.cpp b/Source/WebCore/inspector/InspectorFrontendHost.cpp
index 342af0f..f2e66bc 100644
--- a/Source/WebCore/inspector/InspectorFrontendHost.cpp
+++ b/Source/WebCore/inspector/InspectorFrontendHost.cpp
@@ -41,6 +41,7 @@
#include "FrameLoader.h"
#include "HitTestResult.h"
#include "HTMLFrameOwnerElement.h"
+#include "InspectorAgent.h"
#include "InspectorController.h"
#include "InspectorFrontendClient.h"
#include "Page.h"
@@ -200,8 +201,8 @@ void InspectorFrontendHost::moveWindowBy(float x, float y) const
void InspectorFrontendHost::setExtensionAPI(const String& script)
{
- InspectorController* inspector = m_frontendPage->inspectorController();
- inspector->setInspectorExtensionAPI(script);
+ ASSERT(m_frontendPage->inspectorController());
+ m_frontendPage->inspectorController()->setInspectorExtensionAPI(script);
}
String InspectorFrontendHost::localizedStringsURL()
diff --git a/Source/WebCore/inspector/InspectorInstrumentation.cpp b/Source/WebCore/inspector/InspectorInstrumentation.cpp
index 9ae97be..e7bb1eb 100644
--- a/Source/WebCore/inspector/InspectorInstrumentation.cpp
+++ b/Source/WebCore/inspector/InspectorInstrumentation.cpp
@@ -38,10 +38,10 @@
#include "DocumentLoader.h"
#include "Event.h"
#include "EventContext.h"
+#include "InspectorAgent.h"
#include "InspectorApplicationCacheAgent.h"
#include "InspectorBrowserDebuggerAgent.h"
#include "InspectorConsoleAgent.h"
-#include "InspectorController.h"
#include "InspectorDOMAgent.h"
#include "InspectorDebuggerAgent.h"
#include "InspectorProfilerAgent.h"
@@ -61,6 +61,12 @@ static const char* const setTimerEventName = "setTimer";
static const char* const clearTimerEventName = "clearTimer";
static const char* const timerFiredEventName = "timerFired";
+HashMap<Page*, InspectorAgent*>& InspectorInstrumentation::inspectorAgents()
+{
+ static HashMap<Page*, InspectorAgent*>& agents = *new HashMap<Page*, InspectorAgent*>;
+ return agents;
+}
+
int InspectorInstrumentation::s_frontendCounter = 0;
static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
@@ -80,119 +86,119 @@ static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window,
return false;
}
-void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InspectorController* inspectorController, Frame* frame, DOMWrapperWorld* world)
+void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InspectorAgent* inspectorAgent, Frame* frame, DOMWrapperWorld* world)
{
- inspectorController->didClearWindowObjectInWorld(frame, world);
+ inspectorAgent->didClearWindowObjectInWorld(frame, world);
}
-void InspectorInstrumentation::inspectedPageDestroyedImpl(InspectorController* inspectorController)
+void InspectorInstrumentation::inspectedPageDestroyedImpl(InspectorAgent* inspectorAgent)
{
- inspectorController->inspectedPageDestroyed();
+ inspectorAgent->inspectedPageDestroyed();
}
-void InspectorInstrumentation::willInsertDOMNodeImpl(InspectorController* inspectorController, Node* node, Node* parent)
+void InspectorInstrumentation::willInsertDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node, Node* parent)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->willInsertDOMNode(node, parent);
#endif
}
-void InspectorInstrumentation::didInsertDOMNodeImpl(InspectorController* inspectorController, Node* node)
+void InspectorInstrumentation::didInsertDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
{
- if (InspectorDOMAgent* domAgent = inspectorController->domAgent())
+ if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
domAgent->didInsertDOMNode(node);
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->didInsertDOMNode(node);
#endif
}
-void InspectorInstrumentation::willRemoveDOMNodeImpl(InspectorController* inspectorController, Node* node)
+void InspectorInstrumentation::willRemoveDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->willRemoveDOMNode(node);
#endif
}
-void InspectorInstrumentation::didRemoveDOMNodeImpl(InspectorController* inspectorController, Node* node)
+void InspectorInstrumentation::didRemoveDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->didRemoveDOMNode(node);
#endif
- if (InspectorDOMAgent* domAgent = inspectorController->domAgent())
+ if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
domAgent->didRemoveDOMNode(node);
}
-void InspectorInstrumentation::willModifyDOMAttrImpl(InspectorController* inspectorController, Element* element)
+void InspectorInstrumentation::willModifyDOMAttrImpl(InspectorAgent* inspectorAgent, Element* element)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->willModifyDOMAttr(element);
#endif
}
-void InspectorInstrumentation::didModifyDOMAttrImpl(InspectorController* inspectorController, Element* element)
+void InspectorInstrumentation::didModifyDOMAttrImpl(InspectorAgent* inspectorAgent, Element* element)
{
- if (InspectorDOMAgent* domAgent = inspectorController->domAgent())
+ if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
domAgent->didModifyDOMAttr(element);
}
-void InspectorInstrumentation::mouseDidMoveOverElementImpl(InspectorController* inspectorController, const HitTestResult& result, unsigned modifierFlags)
+void InspectorInstrumentation::mouseDidMoveOverElementImpl(InspectorAgent* inspectorAgent, const HitTestResult& result, unsigned modifierFlags)
{
- inspectorController->mouseDidMoveOverElement(result, modifierFlags);
+ inspectorAgent->mouseDidMoveOverElement(result, modifierFlags);
}
-bool InspectorInstrumentation::handleMousePressImpl(InspectorController* inspectorController)
+bool InspectorInstrumentation::handleMousePressImpl(InspectorAgent* inspectorAgent)
{
- return inspectorController->handleMousePress();
+ return inspectorAgent->handleMousePress();
}
-void InspectorInstrumentation::characterDataModifiedImpl(InspectorController* inspectorController, CharacterData* characterData)
+void InspectorInstrumentation::characterDataModifiedImpl(InspectorAgent* inspectorAgent, CharacterData* characterData)
{
- if (InspectorDOMAgent* domAgent = inspectorController->domAgent())
+ if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
domAgent->characterDataModified(characterData);
}
-void InspectorInstrumentation::willSendXMLHttpRequestImpl(InspectorController* inspectorController, const String& url)
+void InspectorInstrumentation::willSendXMLHttpRequestImpl(InspectorAgent* inspectorAgent, const String& url)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->willSendXMLHttpRequest(url);
#endif
}
-void InspectorInstrumentation::didScheduleResourceRequestImpl(InspectorController* inspectorController, const String& url)
+void InspectorInstrumentation::didScheduleResourceRequestImpl(InspectorAgent* inspectorAgent, const String& url)
{
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController))
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->didScheduleResourceRequest(url);
}
-void InspectorInstrumentation::didInstallTimerImpl(InspectorController* inspectorController, int timerId, int timeout, bool singleShot)
+void InspectorInstrumentation::didInstallTimerImpl(InspectorAgent* inspectorAgent, int timerId, int timeout, bool singleShot)
{
- pauseOnNativeEventIfNeeded(inspectorController, instrumentationEventCategoryType, setTimerEventName, true);
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController))
+ pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, setTimerEventName, true);
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->didInstallTimer(timerId, timeout, singleShot);
}
-void InspectorInstrumentation::didRemoveTimerImpl(InspectorController* inspectorController, int timerId)
+void InspectorInstrumentation::didRemoveTimerImpl(InspectorAgent* inspectorAgent, int timerId)
{
- pauseOnNativeEventIfNeeded(inspectorController, instrumentationEventCategoryType, clearTimerEventName, true);
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController))
+ pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, clearTimerEventName, true);
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->didRemoveTimer(timerId);
}
-InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InspectorController* inspectorController, const String& scriptName, int scriptLine)
+InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InspectorAgent* inspectorAgent, const String& scriptName, int scriptLine)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willCallFunction(scriptName, scriptLine);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didCallFunctionImpl(const InspectorInstrumentationCookie& cookie)
@@ -201,15 +207,15 @@ void InspectorInstrumentation::didCallFunctionImpl(const InspectorInstrumentatio
timelineAgent->didCallFunction();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyStateImpl(InspectorController* inspectorController, XMLHttpRequest* request)
+InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyStateImpl(InspectorAgent* inspectorAgent, XMLHttpRequest* request)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent && request->hasEventListeners(eventNames().readystatechangeEvent)) {
timelineAgent->willChangeXHRReadyState(request->url().string(), request->readyState());
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie& cookie)
@@ -218,17 +224,17 @@ void InspectorInstrumentation::didChangeXHRReadyStateImpl(const InspectorInstrum
timelineAgent->didChangeXHRReadyState();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorController* inspectorController, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
+InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorAgent* inspectorAgent, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
- pauseOnNativeEventIfNeeded(inspectorController, listenerEventCategoryType, event.type(), false);
+ pauseOnNativeEventIfNeeded(inspectorAgent, listenerEventCategoryType, event.type(), false);
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent && eventHasListeners(event.type(), window, node, ancestors)) {
timelineAgent->willDispatchEvent(event);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didDispatchEventImpl(const InspectorInstrumentationCookie& cookie)
@@ -239,17 +245,17 @@ void InspectorInstrumentation::didDispatchEventImpl(const InspectorInstrumentati
timelineAgent->didDispatchEvent();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InspectorController* inspectorController, const Event& event, DOMWindow* window)
+InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InspectorAgent* inspectorAgent, const Event& event, DOMWindow* window)
{
- pauseOnNativeEventIfNeeded(inspectorController, listenerEventCategoryType, event.type(), false);
+ pauseOnNativeEventIfNeeded(inspectorAgent, listenerEventCategoryType, event.type(), false);
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent && window->hasEventListeners(event.type())) {
timelineAgent->willDispatchEvent(event);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie& cookie)
@@ -260,15 +266,15 @@ void InspectorInstrumentation::didDispatchEventOnWindowImpl(const InspectorInstr
timelineAgent->didDispatchEvent();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScriptImpl(InspectorController* inspectorController, const String& url, int lineNumber)
+InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScriptImpl(InspectorAgent* inspectorAgent, const String& url, int lineNumber)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willEvaluateScript(url, lineNumber);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didEvaluateScriptImpl(const InspectorInstrumentationCookie& cookie)
@@ -277,17 +283,17 @@ void InspectorInstrumentation::didEvaluateScriptImpl(const InspectorInstrumentat
timelineAgent->didEvaluateScript();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InspectorController* inspectorController, int timerId)
+InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InspectorAgent* inspectorAgent, int timerId)
{
- pauseOnNativeEventIfNeeded(inspectorController, instrumentationEventCategoryType, timerFiredEventName, false);
+ pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, timerFiredEventName, false);
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willFireTimer(timerId);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didFireTimerImpl(const InspectorInstrumentationCookie& cookie)
@@ -298,15 +304,15 @@ void InspectorInstrumentation::didFireTimerImpl(const InspectorInstrumentationCo
timelineAgent->didFireTimer();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willLayoutImpl(InspectorController* inspectorController)
+InspectorInstrumentationCookie InspectorInstrumentation::willLayoutImpl(InspectorAgent* inspectorAgent)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willLayout();
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCookie& cookie)
@@ -315,15 +321,15 @@ void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCooki
timelineAgent->didLayout();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHRImpl(InspectorController* inspectorController, XMLHttpRequest* request)
+InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHRImpl(InspectorAgent* inspectorAgent, XMLHttpRequest* request)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent && request->hasEventListeners(eventNames().loadEvent)) {
timelineAgent->willLoadXHR(request->url());
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didLoadXHRImpl(const InspectorInstrumentationCookie& cookie)
@@ -332,15 +338,15 @@ void InspectorInstrumentation::didLoadXHRImpl(const InspectorInstrumentationCook
timelineAgent->didLoadXHR();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willPaintImpl(InspectorController* inspectorController, const IntRect& rect)
+InspectorInstrumentationCookie InspectorInstrumentation::willPaintImpl(InspectorAgent* inspectorAgent, const IntRect& rect)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willPaint(rect);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie& cookie)
@@ -349,15 +355,15 @@ void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie
timelineAgent->didPaint();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyleImpl(InspectorController* inspectorController)
+InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyleImpl(InspectorAgent* inspectorAgent)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willRecalculateStyle();
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didRecalculateStyleImpl(const InspectorInstrumentationCookie& cookie)
@@ -366,49 +372,51 @@ void InspectorInstrumentation::didRecalculateStyleImpl(const InspectorInstrument
timelineAgent->didRecalculateStyle();
}
-void InspectorInstrumentation::identifierForInitialRequestImpl(InspectorController* ic, unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request)
+void InspectorInstrumentation::identifierForInitialRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request)
{
- if (!ic->enabled())
+ if (!inspectorAgent->enabled())
return;
- ic->ensureSettingsLoaded();
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->identifierForInitialRequest(identifier, request.url(), loader);
}
-void InspectorInstrumentation::willSendRequestImpl(InspectorController* ic, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
+void InspectorInstrumentation::applyUserAgentOverrideImpl(InspectorAgent* inspectorAgent, String* userAgent)
{
- ic->willSendRequest(request);
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic))
+ inspectorAgent->applyUserAgentOverride(userAgent);
+}
+
+void InspectorInstrumentation::willSendRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
+{
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->willSendResourceRequest(identifier, request);
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->willSendRequest(identifier, request, redirectResponse);
}
-void InspectorInstrumentation::markResourceAsCachedImpl(InspectorController* ic, unsigned long identifier)
+void InspectorInstrumentation::markResourceAsCachedImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
{
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->markResourceAsCached(identifier);
}
-void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InspectorController* ic, DocumentLoader* loader, const CachedResource* cachedResource)
+void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InspectorAgent* inspectorAgent, DocumentLoader* loader, const CachedResource* cachedResource)
{
- if (!ic->enabled())
+ if (!inspectorAgent->enabled())
return;
- ic->ensureSettingsLoaded();
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource);
}
-InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceDataImpl(InspectorController* inspectorController, unsigned long identifier)
+InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceDataImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willReceiveResourceData(identifier);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didReceiveResourceDataImpl(const InspectorInstrumentationCookie& cookie)
@@ -417,93 +425,93 @@ void InspectorInstrumentation::didReceiveResourceDataImpl(const InspectorInstrum
timelineAgent->didReceiveResourceData();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponseImpl(InspectorController* inspectorController, unsigned long identifier, const ResourceResponse& response)
+InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponseImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const ResourceResponse& response)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willReceiveResourceResponse(identifier, response);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didReceiveResourceResponseImpl(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response)
{
- InspectorController* ic = cookie.first;
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ InspectorAgent* inspectorAgent = cookie.first;
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->didReceiveResponse(identifier, loader, response);
- ic->consoleAgent()->didReceiveResponse(identifier, response);
+ inspectorAgent->consoleAgent()->didReceiveResponse(identifier, response);
if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
timelineAgent->didReceiveResourceResponse();
}
-void InspectorInstrumentation::didReceiveContentLengthImpl(InspectorController* ic, unsigned long identifier, int lengthReceived)
+void InspectorInstrumentation::didReceiveContentLengthImpl(InspectorAgent* inspectorAgent, unsigned long identifier, int lengthReceived)
{
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->didReceiveContentLength(identifier, lengthReceived);
}
-void InspectorInstrumentation::didFinishLoadingImpl(InspectorController* ic, unsigned long identifier, double finishTime)
+void InspectorInstrumentation::didFinishLoadingImpl(InspectorAgent* inspectorAgent, unsigned long identifier, double finishTime)
{
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic))
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->didFinishLoadingResource(identifier, false, finishTime);
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->didFinishLoading(identifier, finishTime);
}
-void InspectorInstrumentation::didFailLoadingImpl(InspectorController* ic, unsigned long identifier, const ResourceError& error)
+void InspectorInstrumentation::didFailLoadingImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const ResourceError& error)
{
- ic->consoleAgent()->didFailLoading(identifier, error);
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic))
+ inspectorAgent->consoleAgent()->didFailLoading(identifier, error);
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
timelineAgent->didFinishLoadingResource(identifier, true, 0);
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->didFailLoading(identifier, error);
}
-void InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl(InspectorController* ic, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
+void InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
{
- ic->consoleAgent()->resourceRetrievedByXMLHttpRequest(url, sendURL, sendLineNumber);
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ inspectorAgent->consoleAgent()->resourceRetrievedByXMLHttpRequest(url, sendURL, sendLineNumber);
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->setInitialContent(identifier, sourceString, "XHR");
}
-void InspectorInstrumentation::scriptImportedImpl(InspectorController* ic, unsigned long identifier, const String& sourceString)
+void InspectorInstrumentation::scriptImportedImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const String& sourceString)
{
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->setInitialContent(identifier, sourceString, "Script");
}
-void InspectorInstrumentation::mainResourceFiredLoadEventImpl(InspectorController* inspectorController, Frame* frame, const KURL& url)
+void InspectorInstrumentation::domContentLoadedEventFiredImpl(InspectorAgent* inspectorAgent, Frame* frame, const KURL& url)
{
- inspectorController->mainResourceFiredLoadEvent(frame->loader()->documentLoader(), url);
+ inspectorAgent->domContentLoadedEventFired(frame->loader()->documentLoader(), url);
}
-void InspectorInstrumentation::mainResourceFiredDOMContentEventImpl(InspectorController* inspectorController, Frame* frame, const KURL& url)
+void InspectorInstrumentation::loadEventFiredImpl(InspectorAgent* inspectorAgent, Frame* frame, const KURL& url)
{
- inspectorController->mainResourceFiredDOMContentEvent(frame->loader()->documentLoader(), url);
+ inspectorAgent->loadEventFired(frame->loader()->documentLoader(), url);
}
-void InspectorInstrumentation::frameDetachedFromParentImpl(InspectorController* inspectorController, Frame* frame)
+void InspectorInstrumentation::frameDetachedFromParentImpl(InspectorAgent* inspectorAgent, Frame* frame)
{
- if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorController))
+ if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
resourceAgent->frameDetachedFromParent(frame);
}
-void InspectorInstrumentation::didCommitLoadImpl(InspectorController* inspectorController, DocumentLoader* loader)
+void InspectorInstrumentation::didCommitLoadImpl(InspectorAgent* inspectorAgent, DocumentLoader* loader)
{
- inspectorController->didCommitLoad(loader);
+ inspectorAgent->didCommitLoad(loader);
}
-InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTMLImpl(InspectorController* inspectorController, unsigned int length, unsigned int startLine)
+InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTMLImpl(InspectorAgent* inspectorAgent, unsigned int length, unsigned int startLine)
{
int timelineAgentId = 0;
- InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController);
+ InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
if (timelineAgent) {
timelineAgent->willWriteHTML(length, startLine);
timelineAgentId = timelineAgent->id();
}
- return InspectorInstrumentationCookie(inspectorController, timelineAgentId);
+ return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
}
void InspectorInstrumentation::didWriteHTMLImpl(const InspectorInstrumentationCookie& cookie, unsigned int endLine)
@@ -512,161 +520,154 @@ void InspectorInstrumentation::didWriteHTMLImpl(const InspectorInstrumentationCo
timelineAgent->didWriteHTML(endLine);
}
-void InspectorInstrumentation::addMessageToConsoleImpl(InspectorController* inspectorController, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptArguments* arguments, ScriptCallStack* callStack)
+void InspectorInstrumentation::addMessageToConsoleImpl(InspectorAgent* inspectorAgent, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
{
- inspectorController->consoleAgent()->addMessageToConsole(source, type, level, message, arguments, callStack);
+ inspectorAgent->consoleAgent()->addMessageToConsole(source, type, level, message, arguments, callStack);
}
-void InspectorInstrumentation::addMessageToConsoleImpl(InspectorController* inspectorController, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
+void InspectorInstrumentation::addMessageToConsoleImpl(InspectorAgent* inspectorAgent, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
{
- inspectorController->consoleAgent()->addMessageToConsole(source, type, level, message, lineNumber, sourceID);
+ inspectorAgent->consoleAgent()->addMessageToConsole(source, type, level, message, lineNumber, sourceID);
}
-void InspectorInstrumentation::consoleCountImpl(InspectorController* inspectorController, ScriptArguments* arguments, ScriptCallStack* stack)
+void InspectorInstrumentation::consoleCountImpl(InspectorAgent* inspectorAgent, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> stack)
{
- inspectorController->consoleAgent()->count(arguments, stack);
+ inspectorAgent->consoleAgent()->count(arguments, stack);
}
-void InspectorInstrumentation::startConsoleTimingImpl(InspectorController* inspectorController, const String& title)
+void InspectorInstrumentation::startConsoleTimingImpl(InspectorAgent* inspectorAgent, const String& title)
{
- inspectorController->consoleAgent()->startTiming(title);
+ inspectorAgent->consoleAgent()->startTiming(title);
}
-void InspectorInstrumentation::stopConsoleTimingImpl(InspectorController* inspectorController, const String& title, ScriptCallStack* stack)
+void InspectorInstrumentation::stopConsoleTimingImpl(InspectorAgent* inspectorAgent, const String& title, PassRefPtr<ScriptCallStack> stack)
{
- inspectorController->consoleAgent()->stopTiming(title, stack);
+ inspectorAgent->consoleAgent()->stopTiming(title, stack);
}
-void InspectorInstrumentation::consoleMarkTimelineImpl(InspectorController* inspectorController, ScriptArguments* arguments)
+void InspectorInstrumentation::consoleMarkTimelineImpl(InspectorAgent* inspectorAgent, PassRefPtr<ScriptArguments> arguments)
{
- if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController)) {
+ if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent)) {
String message;
arguments->getFirstArgumentAsString(message);
timelineAgent->didMarkTimeline(message);
- }
+ }
}
#if ENABLE(JAVASCRIPT_DEBUGGER)
-void InspectorInstrumentation::addStartProfilingMessageToConsoleImpl(InspectorController* inspectorController, const String& title, unsigned lineNumber, const String& sourceURL)
+void InspectorInstrumentation::addStartProfilingMessageToConsoleImpl(InspectorAgent* inspectorAgent, const String& title, unsigned lineNumber, const String& sourceURL)
{
- if (InspectorProfilerAgent* profilerAgent = inspectorController->profilerAgent())
+ if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent())
profilerAgent->addStartProfilingMessageToConsole(title, lineNumber, sourceURL);
}
-void InspectorInstrumentation::addProfileImpl(InspectorController* inspectorController, RefPtr<ScriptProfile> profile, ScriptCallStack* callStack)
+void InspectorInstrumentation::addProfileImpl(InspectorAgent* inspectorAgent, RefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack)
{
- if (InspectorProfilerAgent* profilerAgent = inspectorController->profilerAgent()) {
+ if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent()) {
const ScriptCallFrame& lastCaller = callStack->at(0);
profilerAgent->addProfile(profile, lastCaller.lineNumber(), lastCaller.sourceURL());
}
}
-bool InspectorInstrumentation::profilerEnabledImpl(InspectorController* inspectorController)
+String InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(InspectorAgent* inspectorAgent, bool incrementProfileNumber)
{
- if (!inspectorController->enabled())
- return false;
-
- InspectorProfilerAgent* profilerAgent = inspectorController->profilerAgent();
- if (!profilerAgent)
- return false;
-
- return profilerAgent->enabled();
+ if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent())
+ return profilerAgent->getCurrentUserInitiatedProfileName(incrementProfileNumber);
+ return "";
}
-String InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(InspectorController* inspectorController, bool incrementProfileNumber)
+bool InspectorInstrumentation::profilerEnabledImpl(InspectorAgent* inspectorAgent)
{
- if (InspectorProfilerAgent* profilerAgent = inspectorController->profilerAgent())
- return profilerAgent->getCurrentUserInitiatedProfileName(incrementProfileNumber);
- return "";
+ return inspectorAgent->profilerEnabled();
}
#endif
#if ENABLE(DATABASE)
-void InspectorInstrumentation::didOpenDatabaseImpl(InspectorController* inspectorController, Database* database, const String& domain, const String& name, const String& version)
+void InspectorInstrumentation::didOpenDatabaseImpl(InspectorAgent* inspectorAgent, PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
{
- inspectorController->didOpenDatabase(database, domain, name, version);
+ inspectorAgent->didOpenDatabase(database, domain, name, version);
}
#endif
#if ENABLE(DOM_STORAGE)
-void InspectorInstrumentation::didUseDOMStorageImpl(InspectorController* inspectorController, StorageArea* storageArea, bool isLocalStorage, Frame* frame)
+void InspectorInstrumentation::didUseDOMStorageImpl(InspectorAgent* inspectorAgent, StorageArea* storageArea, bool isLocalStorage, Frame* frame)
{
- inspectorController->didUseDOMStorage(storageArea, isLocalStorage, frame);
+ inspectorAgent->didUseDOMStorage(storageArea, isLocalStorage, frame);
}
#endif
#if ENABLE(WORKERS)
-void InspectorInstrumentation::didCreateWorkerImpl(InspectorController* inspectorController, intptr_t id, const String& url, bool isSharedWorker)
+void InspectorInstrumentation::didCreateWorkerImpl(InspectorAgent* inspectorAgent, intptr_t id, const String& url, bool isSharedWorker)
{
- inspectorController->didCreateWorker(id, url, isSharedWorker);
+ inspectorAgent->didCreateWorker(id, url, isSharedWorker);
}
-void InspectorInstrumentation::didDestroyWorkerImpl(InspectorController* inspectorController, intptr_t id)
+void InspectorInstrumentation::didDestroyWorkerImpl(InspectorAgent* inspectorAgent, intptr_t id)
{
- inspectorController->didDestroyWorker(id);
+ inspectorAgent->didDestroyWorker(id);
}
#endif
#if ENABLE(WEB_SOCKETS)
-void InspectorInstrumentation::didCreateWebSocketImpl(InspectorController* inspectorController, unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
+void InspectorInstrumentation::didCreateWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
{
- inspectorController->didCreateWebSocket(identifier, requestURL, documentURL);
+ inspectorAgent->didCreateWebSocket(identifier, requestURL, documentURL);
}
-void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InspectorController* inspectorController, unsigned long identifier, const WebSocketHandshakeRequest& request)
+void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeRequest& request)
{
- inspectorController->willSendWebSocketHandshakeRequest(identifier, request);
+ inspectorAgent->willSendWebSocketHandshakeRequest(identifier, request);
}
-void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InspectorController* inspectorController, unsigned long identifier, const WebSocketHandshakeResponse& response)
+void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeResponse& response)
{
- inspectorController->didReceiveWebSocketHandshakeResponse(identifier, response);
+ inspectorAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
}
-void InspectorInstrumentation::didCloseWebSocketImpl(InspectorController* inspectorController, unsigned long identifier)
+void InspectorInstrumentation::didCloseWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
{
- inspectorController->didCloseWebSocket(identifier);
+ inspectorAgent->didCloseWebSocket(identifier);
}
#endif
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
-void InspectorInstrumentation::networkStateChangedImpl(InspectorController* ic)
+void InspectorInstrumentation::networkStateChangedImpl(InspectorAgent* inspectorAgent)
{
- if (InspectorApplicationCacheAgent* applicationCacheAgent = ic->applicationCacheAgent())
+ if (InspectorApplicationCacheAgent* applicationCacheAgent = inspectorAgent->applicationCacheAgent())
applicationCacheAgent->networkStateChanged();
}
-void InspectorInstrumentation::updateApplicationCacheStatusImpl(InspectorController* ic, Frame* frame)
+void InspectorInstrumentation::updateApplicationCacheStatusImpl(InspectorAgent* inspectorAgent, Frame* frame)
{
- if (InspectorApplicationCacheAgent* applicationCacheAgent = ic->applicationCacheAgent())
+ if (InspectorApplicationCacheAgent* applicationCacheAgent = inspectorAgent->applicationCacheAgent())
applicationCacheAgent->updateApplicationCacheStatus(frame);
}
#endif
-bool InspectorInstrumentation::hasFrontend(InspectorController* inspectorController)
+bool InspectorInstrumentation::hasFrontend(InspectorAgent* inspectorAgent)
{
- return inspectorController->hasFrontend();
+ return inspectorAgent->hasFrontend();
}
-void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InspectorController* inspectorController, const String& categoryType, const String& eventName, bool synchronous)
+void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InspectorAgent* inspectorAgent, const String& categoryType, const String& eventName, bool synchronous)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->browserDebuggerAgent())
+ if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->browserDebuggerAgent())
browserDebuggerAgent->pauseOnNativeEventIfNeeded(categoryType, eventName, synchronous);
#endif
}
-void InspectorInstrumentation::cancelPauseOnNativeEvent(InspectorController* inspectorController)
+void InspectorInstrumentation::cancelPauseOnNativeEvent(InspectorAgent* inspectorAgent)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
- if (InspectorDebuggerAgent* debuggerAgent = inspectorController->debuggerAgent())
+ if (InspectorDebuggerAgent* debuggerAgent = inspectorAgent->debuggerAgent())
debuggerAgent->cancelPauseOnNextStatement();
#endif
}
-InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(InspectorController* inspectorController)
+InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(InspectorAgent* inspectorAgent)
{
- return inspectorController->timelineAgent();
+ return inspectorAgent->timelineAgent();
}
InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(const InspectorInstrumentationCookie& cookie)
@@ -677,9 +678,9 @@ InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(const In
return 0;
}
-InspectorResourceAgent* InspectorInstrumentation::retrieveResourceAgent(InspectorController* ic)
+InspectorResourceAgent* InspectorInstrumentation::retrieveResourceAgent(InspectorAgent* inspectorAgent)
{
- return ic->resourceAgent();
+ return inspectorAgent->resourceAgent();
}
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorInstrumentation.h b/Source/WebCore/inspector/InspectorInstrumentation.h
index 7a7ee43..e406e40 100644
--- a/Source/WebCore/inspector/InspectorInstrumentation.h
+++ b/Source/WebCore/inspector/InspectorInstrumentation.h
@@ -35,8 +35,7 @@
#include "Frame.h"
#include "Page.h"
#include "ScriptExecutionContext.h"
-
-#include <wtf/PassRefPtr.h>
+#include <wtf/HashMap.h>
namespace WebCore {
@@ -48,7 +47,7 @@ class Element;
class EventContext;
class DocumentLoader;
class HitTestResult;
-class InspectorController;
+class InspectorAgent;
class InspectorResourceAgent;
class InspectorTimelineAgent;
class KURL;
@@ -66,7 +65,7 @@ class WebSocketHandshakeRequest;
class WebSocketHandshakeResponse;
#endif
-typedef pair<InspectorController*, int> InspectorInstrumentationCookie;
+typedef pair<InspectorAgent*, int> InspectorInstrumentationCookie;
class InspectorInstrumentation {
public:
@@ -109,6 +108,7 @@ public:
static InspectorInstrumentationCookie willRecalculateStyle(Document*);
static void didRecalculateStyle(const InspectorInstrumentationCookie&);
+ static void applyUserAgentOverride(Frame*, String*);
static void identifierForInitialRequest(Frame*, unsigned long identifier, DocumentLoader*, const ResourceRequest&);
static void willSendRequest(Frame*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
static void markResourceAsCached(Page*, unsigned long identifier);
@@ -122,30 +122,30 @@ public:
static void didFailLoading(Frame*, unsigned long identifier, const ResourceError&);
static void resourceRetrievedByXMLHttpRequest(ScriptExecutionContext*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
static void scriptImported(ScriptExecutionContext*, unsigned long identifier, const String& sourceString);
- static void mainResourceFiredLoadEvent(Frame*, const KURL&);
- static void mainResourceFiredDOMContentEvent(Frame*, const KURL&);
+ static void domContentLoadedEventFired(Frame*, const KURL&);
+ static void loadEventFired(Frame*, const KURL&);
static void frameDetachedFromParent(Frame*);
static void didCommitLoad(Frame*, DocumentLoader*);
static InspectorInstrumentationCookie willWriteHTML(Document*, unsigned int length, unsigned int startLine);
static void didWriteHTML(const InspectorInstrumentationCookie&, unsigned int endLine);
- static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, ScriptArguments*, ScriptCallStack*);
+ static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&);
- static void consoleCount(Page*, ScriptArguments*, ScriptCallStack*);
+ static void consoleCount(Page*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void startConsoleTiming(Page*, const String& title);
- static void stopConsoleTiming(Page*, const String& title, ScriptCallStack*);
- static void consoleMarkTimeline(Page*, ScriptArguments*);
+ static void stopConsoleTiming(Page*, const String& title, PassRefPtr<ScriptCallStack>);
+ static void consoleMarkTimeline(Page*, PassRefPtr<ScriptArguments>);
#if ENABLE(JAVASCRIPT_DEBUGGER)
static void addStartProfilingMessageToConsole(Page*, const String& title, unsigned lineNumber, const String& sourceURL);
- static void addProfile(Page*, RefPtr<ScriptProfile>, ScriptCallStack*);
- static bool profilerEnabled(Page*);
+ static void addProfile(Page*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>);
static String getCurrentUserInitiatedProfileName(Page*, bool incrementProfileNumber);
+ static bool profilerEnabled(Page*);
#endif
#if ENABLE(DATABASE)
- static void didOpenDatabase(ScriptExecutionContext*, Database*, const String& domain, const String& name, const String& version);
+ static void didOpenDatabase(ScriptExecutionContext*, PassRefPtr<Database>, const String& domain, const String& name, const String& version);
#endif
#if ENABLE(DOM_STORAGE)
@@ -171,129 +171,136 @@ public:
#endif
#if ENABLE(INSPECTOR)
+ static void bindInspectorAgent(Page* page, InspectorAgent* inspectorAgent) { inspectorAgents().set(page, inspectorAgent); }
+ static void unbindInspectorAgent(Page* page) { inspectorAgents().remove(page); }
static void frontendCreated() { s_frontendCounter += 1; }
static void frontendDeleted() { s_frontendCounter -= 1; }
static bool hasFrontends() { return s_frontendCounter; }
+ static bool hasFrontend(Page*);
#else
static bool hasFrontends() { return false; }
+ static bool hasFrontend(Page*) { return false; }
#endif
private:
#if ENABLE(INSPECTOR)
- static void didClearWindowObjectInWorldImpl(InspectorController*, Frame*, DOMWrapperWorld*);
- static void inspectedPageDestroyedImpl(InspectorController*);
+ static void didClearWindowObjectInWorldImpl(InspectorAgent*, Frame*, DOMWrapperWorld*);
+ static void inspectedPageDestroyedImpl(InspectorAgent*);
- static void willInsertDOMNodeImpl(InspectorController*, Node* node, Node* parent);
- static void didInsertDOMNodeImpl(InspectorController*, Node*);
- static void willRemoveDOMNodeImpl(InspectorController*, Node*);
- static void didRemoveDOMNodeImpl(InspectorController*, Node*);
- static void willModifyDOMAttrImpl(InspectorController*, Element*);
- static void didModifyDOMAttrImpl(InspectorController*, Element*);
- static void characterDataModifiedImpl(InspectorController*, CharacterData*);
+ static void willInsertDOMNodeImpl(InspectorAgent*, Node* node, Node* parent);
+ static void didInsertDOMNodeImpl(InspectorAgent*, Node*);
+ static void willRemoveDOMNodeImpl(InspectorAgent*, Node*);
+ static void didRemoveDOMNodeImpl(InspectorAgent*, Node*);
+ static void willModifyDOMAttrImpl(InspectorAgent*, Element*);
+ static void didModifyDOMAttrImpl(InspectorAgent*, Element*);
+ static void characterDataModifiedImpl(InspectorAgent*, CharacterData*);
- static void mouseDidMoveOverElementImpl(InspectorController*, const HitTestResult&, unsigned modifierFlags);
- static bool handleMousePressImpl(InspectorController*);
+ static void mouseDidMoveOverElementImpl(InspectorAgent*, const HitTestResult&, unsigned modifierFlags);
+ static bool handleMousePressImpl(InspectorAgent*);
- static void willSendXMLHttpRequestImpl(InspectorController*, const String& url);
- static void didScheduleResourceRequestImpl(InspectorController*, const String& url);
- static void didInstallTimerImpl(InspectorController*, int timerId, int timeout, bool singleShot);
- static void didRemoveTimerImpl(InspectorController*, int timerId);
+ static void willSendXMLHttpRequestImpl(InspectorAgent*, const String& url);
+ static void didScheduleResourceRequestImpl(InspectorAgent*, const String& url);
+ static void didInstallTimerImpl(InspectorAgent*, int timerId, int timeout, bool singleShot);
+ static void didRemoveTimerImpl(InspectorAgent*, int timerId);
- static InspectorInstrumentationCookie willCallFunctionImpl(InspectorController*, const String& scriptName, int scriptLine);
+ static InspectorInstrumentationCookie willCallFunctionImpl(InspectorAgent*, const String& scriptName, int scriptLine);
static void didCallFunctionImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willChangeXHRReadyStateImpl(InspectorController*, XMLHttpRequest* request);
+ static InspectorInstrumentationCookie willChangeXHRReadyStateImpl(InspectorAgent*, XMLHttpRequest* request);
static void didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willDispatchEventImpl(InspectorController*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
+ static InspectorInstrumentationCookie willDispatchEventImpl(InspectorAgent*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
static void didDispatchEventImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willDispatchEventOnWindowImpl(InspectorController*, const Event& event, DOMWindow* window);
+ static InspectorInstrumentationCookie willDispatchEventOnWindowImpl(InspectorAgent*, const Event& event, DOMWindow* window);
static void didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willEvaluateScriptImpl(InspectorController*, const String& url, int lineNumber);
+ static InspectorInstrumentationCookie willEvaluateScriptImpl(InspectorAgent*, const String& url, int lineNumber);
static void didEvaluateScriptImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willFireTimerImpl(InspectorController*, int timerId);
+ static InspectorInstrumentationCookie willFireTimerImpl(InspectorAgent*, int timerId);
static void didFireTimerImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willLayoutImpl(InspectorController*);
+ static InspectorInstrumentationCookie willLayoutImpl(InspectorAgent*);
static void didLayoutImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willLoadXHRImpl(InspectorController*, XMLHttpRequest* request);
+ static InspectorInstrumentationCookie willLoadXHRImpl(InspectorAgent*, XMLHttpRequest* request);
static void didLoadXHRImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willPaintImpl(InspectorController*, const IntRect& rect);
+ static InspectorInstrumentationCookie willPaintImpl(InspectorAgent*, const IntRect& rect);
static void didPaintImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willRecalculateStyleImpl(InspectorController*);
+ static InspectorInstrumentationCookie willRecalculateStyleImpl(InspectorAgent*);
static void didRecalculateStyleImpl(const InspectorInstrumentationCookie&);
- static void identifierForInitialRequestImpl(InspectorController*, unsigned long identifier, DocumentLoader*, const ResourceRequest&);
- static void willSendRequestImpl(InspectorController*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
- static void markResourceAsCachedImpl(InspectorController*, unsigned long identifier);
- static void didLoadResourceFromMemoryCacheImpl(InspectorController*, DocumentLoader*, const CachedResource*);
- static InspectorInstrumentationCookie willReceiveResourceDataImpl(InspectorController*, unsigned long identifier);
+
+ static void applyUserAgentOverrideImpl(InspectorAgent*, String*);
+ static void identifierForInitialRequestImpl(InspectorAgent*, unsigned long identifier, DocumentLoader*, const ResourceRequest&);
+ static void willSendRequestImpl(InspectorAgent*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
+ static void markResourceAsCachedImpl(InspectorAgent*, unsigned long identifier);
+ static void didLoadResourceFromMemoryCacheImpl(InspectorAgent*, DocumentLoader*, const CachedResource*);
+ static InspectorInstrumentationCookie willReceiveResourceDataImpl(InspectorAgent*, unsigned long identifier);
static void didReceiveResourceDataImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorController*, unsigned long identifier, const ResourceResponse&);
+ static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorAgent*, unsigned long identifier, const ResourceResponse&);
static void didReceiveResourceResponseImpl(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&);
- static void didReceiveContentLengthImpl(InspectorController*, unsigned long identifier, int lengthReceived);
- static void didFinishLoadingImpl(InspectorController*, unsigned long identifier, double finishTime);
- static void didFailLoadingImpl(InspectorController*, unsigned long identifier, const ResourceError&);
- static void resourceRetrievedByXMLHttpRequestImpl(InspectorController*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
- static void scriptImportedImpl(InspectorController*, unsigned long identifier, const String& sourceString);
- static void mainResourceFiredLoadEventImpl(InspectorController*, Frame*, const KURL&);
- static void mainResourceFiredDOMContentEventImpl(InspectorController*, Frame*, const KURL&);
- static void frameDetachedFromParentImpl(InspectorController*, Frame*);
- static void didCommitLoadImpl(InspectorController*, DocumentLoader*);
-
- static InspectorInstrumentationCookie willWriteHTMLImpl(InspectorController*, unsigned int length, unsigned int startLine);
+ static void didReceiveContentLengthImpl(InspectorAgent*, unsigned long identifier, int lengthReceived);
+ static void didFinishLoadingImpl(InspectorAgent*, unsigned long identifier, double finishTime);
+ static void didFailLoadingImpl(InspectorAgent*, unsigned long identifier, const ResourceError&);
+ static void resourceRetrievedByXMLHttpRequestImpl(InspectorAgent*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
+ static void scriptImportedImpl(InspectorAgent*, unsigned long identifier, const String& sourceString);
+ static void domContentLoadedEventFiredImpl(InspectorAgent*, Frame*, const KURL&);
+ static void loadEventFiredImpl(InspectorAgent*, Frame*, const KURL&);
+ static void frameDetachedFromParentImpl(InspectorAgent*, Frame*);
+ static void didCommitLoadImpl(InspectorAgent*, DocumentLoader*);
+
+ static InspectorInstrumentationCookie willWriteHTMLImpl(InspectorAgent*, unsigned int length, unsigned int startLine);
static void didWriteHTMLImpl(const InspectorInstrumentationCookie&, unsigned int endLine);
- static void addMessageToConsoleImpl(InspectorController*, MessageSource, MessageType, MessageLevel, const String& message, ScriptArguments*, ScriptCallStack*);
- static void addMessageToConsoleImpl(InspectorController*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
- static void consoleCountImpl(InspectorController*, ScriptArguments*, ScriptCallStack*);
- static void startConsoleTimingImpl(InspectorController*, const String& title);
- static void stopConsoleTimingImpl(InspectorController*, const String& title, ScriptCallStack*);
- static void consoleMarkTimelineImpl(InspectorController*, ScriptArguments*);
+ static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
+ static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
+ static void consoleCountImpl(InspectorAgent*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
+ static void startConsoleTimingImpl(InspectorAgent*, const String& title);
+ static void stopConsoleTimingImpl(InspectorAgent*, const String& title, PassRefPtr<ScriptCallStack>);
+ static void consoleMarkTimelineImpl(InspectorAgent*, PassRefPtr<ScriptArguments>);
#if ENABLE(JAVASCRIPT_DEBUGGER)
- static void addStartProfilingMessageToConsoleImpl(InspectorController*, const String& title, unsigned lineNumber, const String& sourceURL);
- static void addProfileImpl(InspectorController*, RefPtr<ScriptProfile>, ScriptCallStack*);
- static bool profilerEnabledImpl(InspectorController*);
- static String getCurrentUserInitiatedProfileNameImpl(InspectorController*, bool incrementProfileNumber);
+ static void addStartProfilingMessageToConsoleImpl(InspectorAgent*, const String& title, unsigned lineNumber, const String& sourceURL);
+ static void addProfileImpl(InspectorAgent*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>);
+ static String getCurrentUserInitiatedProfileNameImpl(InspectorAgent*, bool incrementProfileNumber);
+ static bool profilerEnabledImpl(InspectorAgent*);
#endif
#if ENABLE(DATABASE)
- static void didOpenDatabaseImpl(InspectorController*, Database*, const String& domain, const String& name, const String& version);
+ static void didOpenDatabaseImpl(InspectorAgent*, PassRefPtr<Database>, const String& domain, const String& name, const String& version);
#endif
#if ENABLE(DOM_STORAGE)
- static void didUseDOMStorageImpl(InspectorController*, StorageArea*, bool isLocalStorage, Frame*);
+ static void didUseDOMStorageImpl(InspectorAgent*, StorageArea*, bool isLocalStorage, Frame*);
#endif
#if ENABLE(WORKERS)
- static void didCreateWorkerImpl(InspectorController*, intptr_t id, const String& url, bool isSharedWorker);
- static void didDestroyWorkerImpl(InspectorController*, intptr_t id);
+ static void didCreateWorkerImpl(InspectorAgent*, intptr_t id, const String& url, bool isSharedWorker);
+ static void didDestroyWorkerImpl(InspectorAgent*, intptr_t id);
#endif
#if ENABLE(WEB_SOCKETS)
- static void didCreateWebSocketImpl(InspectorController*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
- static void willSendWebSocketHandshakeRequestImpl(InspectorController*, unsigned long identifier, const WebSocketHandshakeRequest&);
- static void didReceiveWebSocketHandshakeResponseImpl(InspectorController*, unsigned long identifier, const WebSocketHandshakeResponse&);
- static void didCloseWebSocketImpl(InspectorController*, unsigned long identifier);
+ static void didCreateWebSocketImpl(InspectorAgent*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
+ static void willSendWebSocketHandshakeRequestImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeRequest&);
+ static void didReceiveWebSocketHandshakeResponseImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeResponse&);
+ static void didCloseWebSocketImpl(InspectorAgent*, unsigned long identifier);
#endif
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- static void networkStateChangedImpl(InspectorController*);
- static void updateApplicationCacheStatusImpl(InspectorController*, Frame*);
-#endif
-
- static InspectorController* inspectorControllerForFrame(Frame*);
- static InspectorController* inspectorControllerForContext(ScriptExecutionContext*);
- static InspectorController* inspectorControllerForPage(Page*);
- static InspectorController* inspectorControllerWithFrontendForContext(ScriptExecutionContext*);
- static InspectorController* inspectorControllerWithFrontendForDocument(Document*);
- static InspectorController* inspectorControllerWithFrontendForFrame(Frame*);
- static InspectorController* inspectorControllerWithFrontendForPage(Page*);
-
- static bool hasFrontend(InspectorController*);
- static void pauseOnNativeEventIfNeeded(InspectorController*, const String& categoryType, const String& eventName, bool synchronous);
- static void cancelPauseOnNativeEvent(InspectorController*);
- static InspectorTimelineAgent* retrieveTimelineAgent(InspectorController*);
+ static void networkStateChangedImpl(InspectorAgent*);
+ static void updateApplicationCacheStatusImpl(InspectorAgent*, Frame*);
+#endif
+
+ static InspectorAgent* inspectorAgentForFrame(Frame*);
+ static InspectorAgent* inspectorAgentForContext(ScriptExecutionContext*);
+ static InspectorAgent* inspectorAgentForPage(Page*);
+ static InspectorAgent* inspectorAgentWithFrontendForContext(ScriptExecutionContext*);
+ static InspectorAgent* inspectorAgentWithFrontendForDocument(Document*);
+ static InspectorAgent* inspectorAgentWithFrontendForFrame(Frame*);
+ static InspectorAgent* inspectorAgentWithFrontendForPage(Page*);
+
+ static bool hasFrontend(InspectorAgent*);
+ static void pauseOnNativeEventIfNeeded(InspectorAgent*, const String& categoryType, const String& eventName, bool synchronous);
+ static void cancelPauseOnNativeEvent(InspectorAgent*);
+ static InspectorTimelineAgent* retrieveTimelineAgent(InspectorAgent*);
static InspectorTimelineAgent* retrieveTimelineAgent(const InspectorInstrumentationCookie&);
- static InspectorResourceAgent* retrieveResourceAgent(InspectorController*);
+ static InspectorResourceAgent* retrieveResourceAgent(InspectorAgent*);
+ static HashMap<Page*, InspectorAgent*>& inspectorAgents();
static int s_frontendCounter;
#endif
};
@@ -301,41 +308,41 @@ private:
inline void InspectorInstrumentation::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForFrame(frame))
- didClearWindowObjectInWorldImpl(inspectorController, frame, world);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
+ didClearWindowObjectInWorldImpl(inspectorAgent, frame, world);
#endif
}
inline void InspectorInstrumentation::inspectedPageDestroyed(Page* page)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- inspectedPageDestroyedImpl(inspectorController);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ inspectedPageDestroyedImpl(inspectorAgent);
#endif
}
inline void InspectorInstrumentation::willInsertDOMNode(Document* document, Node* node, Node* parent)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- willInsertDOMNodeImpl(inspectorController, node, parent);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ willInsertDOMNodeImpl(inspectorAgent, node, parent);
#endif
}
inline void InspectorInstrumentation::didInsertDOMNode(Document* document, Node* node)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- didInsertDOMNodeImpl(inspectorController, node);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ didInsertDOMNodeImpl(inspectorAgent, node);
#endif
}
inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node* node)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) {
- willRemoveDOMNodeImpl(inspectorController, node);
- didRemoveDOMNodeImpl(inspectorController, node);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) {
+ willRemoveDOMNodeImpl(inspectorAgent, node);
+ didRemoveDOMNodeImpl(inspectorAgent, node);
}
#endif
}
@@ -343,32 +350,32 @@ inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node
inline void InspectorInstrumentation::willModifyDOMAttr(Document* document, Element* element)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- willModifyDOMAttrImpl(inspectorController, element);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ willModifyDOMAttrImpl(inspectorAgent, element);
#endif
}
inline void InspectorInstrumentation::didModifyDOMAttr(Document* document, Element* element)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- didModifyDOMAttrImpl(inspectorController, element);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ didModifyDOMAttrImpl(inspectorAgent, element);
#endif
}
inline void InspectorInstrumentation::mouseDidMoveOverElement(Page* page, const HitTestResult& result, unsigned modifierFlags)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page))
- mouseDidMoveOverElementImpl(inspectorController, result, modifierFlags);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
+ mouseDidMoveOverElementImpl(inspectorAgent, result, modifierFlags);
#endif
}
inline bool InspectorInstrumentation::handleMousePress(Page* page)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page))
- return handleMousePressImpl(inspectorController);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
+ return handleMousePressImpl(inspectorAgent);
#endif
return false;
}
@@ -376,40 +383,40 @@ inline bool InspectorInstrumentation::handleMousePress(Page* page)
inline void InspectorInstrumentation::characterDataModified(Document* document, CharacterData* characterData)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- characterDataModifiedImpl(inspectorController, characterData);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ characterDataModifiedImpl(inspectorAgent, characterData);
#endif
}
inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionContext* context, const String& url)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- willSendXMLHttpRequestImpl(inspectorController, url);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ willSendXMLHttpRequestImpl(inspectorAgent, url);
#endif
}
inline void InspectorInstrumentation::didScheduleResourceRequest(Document* document, const String& url)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- didScheduleResourceRequestImpl(inspectorController, url);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ didScheduleResourceRequestImpl(inspectorAgent, url);
#endif
}
inline void InspectorInstrumentation::didInstallTimer(ScriptExecutionContext* context, int timerId, int timeout, bool singleShot)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didInstallTimerImpl(inspectorController, timerId, timeout, singleShot);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didInstallTimerImpl(inspectorAgent, timerId, timeout, singleShot);
#endif
}
inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* context, int timerId)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didRemoveTimerImpl(inspectorController, timerId);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didRemoveTimerImpl(inspectorAgent, timerId);
#endif
}
@@ -417,8 +424,8 @@ inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* con
inline InspectorInstrumentationCookie InspectorInstrumentation::willCallFunction(Frame* frame, const String& scriptName, int scriptLine)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willCallFunctionImpl(inspectorController, scriptName, scriptLine);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willCallFunctionImpl(inspectorAgent, scriptName, scriptLine);
#endif
return InspectorInstrumentationCookie();
}
@@ -434,8 +441,8 @@ inline void InspectorInstrumentation::didCallFunction(const InspectorInstrumenta
inline InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyState(ScriptExecutionContext* context, XMLHttpRequest* request)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- return willChangeXHRReadyStateImpl(inspectorController, request);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ return willChangeXHRReadyStateImpl(inspectorAgent, request);
#endif
return InspectorInstrumentationCookie();
}
@@ -451,8 +458,8 @@ inline void InspectorInstrumentation::didChangeXHRReadyState(const InspectorInst
inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- return willDispatchEventImpl(inspectorController, event, window, node, ancestors);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ return willDispatchEventImpl(inspectorAgent, event, window, node, ancestors);
#endif
return InspectorInstrumentationCookie();
}
@@ -468,8 +475,8 @@ inline void InspectorInstrumentation::didDispatchEvent(const InspectorInstrument
inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindow(Frame* frame, const Event& event, DOMWindow* window)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willDispatchEventOnWindowImpl(inspectorController, event, window);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willDispatchEventOnWindowImpl(inspectorAgent, event, window);
#endif
return InspectorInstrumentationCookie();
}
@@ -485,8 +492,8 @@ inline void InspectorInstrumentation::didDispatchEventOnWindow(const InspectorIn
inline InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScript(Frame* frame, const String& url, int lineNumber)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willEvaluateScriptImpl(inspectorController, url, lineNumber);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willEvaluateScriptImpl(inspectorAgent, url, lineNumber);
#endif
return InspectorInstrumentationCookie();
}
@@ -502,8 +509,8 @@ inline void InspectorInstrumentation::didEvaluateScript(const InspectorInstrumen
inline InspectorInstrumentationCookie InspectorInstrumentation::willFireTimer(ScriptExecutionContext* context, int timerId)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- return willFireTimerImpl(inspectorController, timerId);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ return willFireTimerImpl(inspectorAgent, timerId);
#endif
return InspectorInstrumentationCookie();
}
@@ -519,8 +526,8 @@ inline void InspectorInstrumentation::didFireTimer(const InspectorInstrumentatio
inline InspectorInstrumentationCookie InspectorInstrumentation::willLayout(Frame* frame)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willLayoutImpl(inspectorController);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willLayoutImpl(inspectorAgent);
#endif
return InspectorInstrumentationCookie();
}
@@ -536,8 +543,8 @@ inline void InspectorInstrumentation::didLayout(const InspectorInstrumentationCo
inline InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHR(ScriptExecutionContext* context, XMLHttpRequest* request)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- return willLoadXHRImpl(inspectorController, request);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ return willLoadXHRImpl(inspectorAgent, request);
#endif
return InspectorInstrumentationCookie();
}
@@ -553,8 +560,8 @@ inline void InspectorInstrumentation::didLoadXHR(const InspectorInstrumentationC
inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame, const IntRect& rect)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willPaintImpl(inspectorController, rect);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willPaintImpl(inspectorAgent, rect);
#endif
return InspectorInstrumentationCookie();
}
@@ -570,8 +577,8 @@ inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCoo
inline InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyle(Document* document)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- return willRecalculateStyleImpl(inspectorController);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ return willRecalculateStyleImpl(inspectorAgent);
#endif
return InspectorInstrumentationCookie();
}
@@ -590,15 +597,23 @@ inline void InspectorInstrumentation::identifierForInitialRequest(Frame* frame,
// This notification should be procecessed even in cases there is no frontend.
if (!frame)
return;
- if (InspectorController* ic = inspectorControllerForPage(frame->page()))
+ if (InspectorAgent* ic = inspectorAgentForPage(frame->page()))
identifierForInitialRequestImpl(ic, identifier, loader, request);
#endif
}
+inline void InspectorInstrumentation::applyUserAgentOverride(Frame* frame, String* userAgent)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ applyUserAgentOverrideImpl(inspectorAgent, userAgent);
+#endif
+}
+
inline void InspectorInstrumentation::willSendRequest(Frame* frame, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* ic = inspectorControllerWithFrontendForFrame(frame))
+ if (InspectorAgent* ic = inspectorAgentWithFrontendForFrame(frame))
willSendRequestImpl(ic, identifier, request, redirectResponse);
#endif
}
@@ -606,22 +621,22 @@ inline void InspectorInstrumentation::willSendRequest(Frame* frame, unsigned lon
inline void InspectorInstrumentation::markResourceAsCached(Page* page, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
- markResourceAsCachedImpl(inspectorControllerForPage(page), identifier);
+ markResourceAsCachedImpl(inspectorAgentForPage(page), identifier);
#endif
}
inline void InspectorInstrumentation::didLoadResourceFromMemoryCache(Page* page, DocumentLoader* loader, const CachedResource* resource)
{
#if ENABLE(INSPECTOR)
- didLoadResourceFromMemoryCacheImpl(inspectorControllerForPage(page), loader, resource);
+ didLoadResourceFromMemoryCacheImpl(inspectorAgentForPage(page), loader, resource);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceData(Frame* frame, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willReceiveResourceDataImpl(inspectorController, identifier);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willReceiveResourceDataImpl(inspectorAgent, identifier);
#endif
return InspectorInstrumentationCookie();
}
@@ -637,8 +652,8 @@ inline void InspectorInstrumentation::didReceiveResourceData(const InspectorInst
inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponse(Frame* frame, unsigned long identifier, const ResourceResponse& response)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- return willReceiveResourceResponseImpl(inspectorController, identifier, response);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ return willReceiveResourceResponseImpl(inspectorAgent, identifier, response);
#endif
return InspectorInstrumentationCookie();
}
@@ -654,80 +669,80 @@ inline void InspectorInstrumentation::didReceiveResourceResponse(const Inspector
inline void InspectorInstrumentation::didReceiveContentLength(Frame* frame, unsigned long identifier, int lengthReceived)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- didReceiveContentLengthImpl(inspectorController, identifier, lengthReceived);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ didReceiveContentLengthImpl(inspectorAgent, identifier, lengthReceived);
#endif
}
inline void InspectorInstrumentation::didFinishLoading(Frame* frame, unsigned long identifier, double finishTime)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- didFinishLoadingImpl(inspectorController, identifier, finishTime);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ didFinishLoadingImpl(inspectorAgent, identifier, finishTime);
#endif
}
inline void InspectorInstrumentation::didFailLoading(Frame* frame, unsigned long identifier, const ResourceError& error)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- didFailLoadingImpl(inspectorController, identifier, error);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ didFailLoadingImpl(inspectorAgent, identifier, error);
#endif
}
inline void InspectorInstrumentation::resourceRetrievedByXMLHttpRequest(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForContext(context))
- resourceRetrievedByXMLHttpRequestImpl(inspectorController, identifier, sourceString, url, sendURL, sendLineNumber);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
+ resourceRetrievedByXMLHttpRequestImpl(inspectorAgent, identifier, sourceString, url, sendURL, sendLineNumber);
#endif
}
inline void InspectorInstrumentation::scriptImported(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForContext(context))
- scriptImportedImpl(inspectorController, identifier, sourceString);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
+ scriptImportedImpl(inspectorAgent, identifier, sourceString);
#endif
}
-inline void InspectorInstrumentation::mainResourceFiredLoadEvent(Frame* frame, const KURL& url)
+inline void InspectorInstrumentation::domContentLoadedEventFired(Frame* frame, const KURL& url)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- mainResourceFiredLoadEventImpl(inspectorController, frame, url);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ domContentLoadedEventFiredImpl(inspectorAgent, frame, url);
#endif
}
-inline void InspectorInstrumentation::mainResourceFiredDOMContentEvent(Frame* frame, const KURL& url)
+inline void InspectorInstrumentation::loadEventFired(Frame* frame, const KURL& url)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- mainResourceFiredDOMContentEventImpl(inspectorController, frame, url);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ loadEventFiredImpl(inspectorAgent, frame, url);
#endif
}
inline void InspectorInstrumentation::frameDetachedFromParent(Frame* frame)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- frameDetachedFromParentImpl(inspectorController, frame);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ frameDetachedFromParentImpl(inspectorAgent, frame);
#endif
}
inline void InspectorInstrumentation::didCommitLoad(Frame* frame, DocumentLoader* loader)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForFrame(frame))
- didCommitLoadImpl(inspectorController, loader);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
+ didCommitLoadImpl(inspectorAgent, loader);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTML(Document* document, unsigned int length, unsigned int startLine)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document))
- return willWriteHTMLImpl(inspectorController, length, startLine);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
+ return willWriteHTMLImpl(inspectorAgent, length, startLine);
#endif
return InspectorInstrumentationCookie();
}
@@ -740,22 +755,12 @@ inline void InspectorInstrumentation::didWriteHTML(const InspectorInstrumentatio
#endif
}
-#if ENABLE(DATABASE)
-inline void InspectorInstrumentation::didOpenDatabase(ScriptExecutionContext* context, Database* database, const String& domain, const String& name, const String& version)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForContext(context))
- didOpenDatabaseImpl(inspectorController, database, domain, name, version);
-#endif
-}
-#endif
-
#if ENABLE(DOM_STORAGE)
inline void InspectorInstrumentation::didUseDOMStorage(Page* page, StorageArea* storageArea, bool isLocalStorage, Frame* frame)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- didUseDOMStorageImpl(inspectorController, storageArea, isLocalStorage, frame);
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
+ didUseDOMStorageImpl(inspectorAgent, storageArea, isLocalStorage, frame);
#endif
}
#endif
@@ -764,16 +769,16 @@ inline void InspectorInstrumentation::didUseDOMStorage(Page* page, StorageArea*
inline void InspectorInstrumentation::didCreateWorker(ScriptExecutionContext* context, intptr_t id, const String& url, bool isSharedWorker)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didCreateWorkerImpl(inspectorController, id, url, isSharedWorker);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didCreateWorkerImpl(inspectorAgent, id, url, isSharedWorker);
#endif
}
inline void InspectorInstrumentation::didDestroyWorker(ScriptExecutionContext* context, intptr_t id)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didDestroyWorkerImpl(inspectorController, id);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didDestroyWorkerImpl(inspectorAgent, id);
#endif
}
#endif
@@ -783,32 +788,32 @@ inline void InspectorInstrumentation::didDestroyWorker(ScriptExecutionContext* c
inline void InspectorInstrumentation::didCreateWebSocket(ScriptExecutionContext* context, unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didCreateWebSocketImpl(inspectorController, identifier, requestURL, documentURL);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didCreateWebSocketImpl(inspectorAgent, identifier, requestURL, documentURL);
#endif
}
inline void InspectorInstrumentation::willSendWebSocketHandshakeRequest(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeRequest& request)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- willSendWebSocketHandshakeRequestImpl(inspectorController, identifier, request);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ willSendWebSocketHandshakeRequestImpl(inspectorAgent, identifier, request);
#endif
}
inline void InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeResponse& response)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didReceiveWebSocketHandshakeResponseImpl(inspectorController, identifier, response);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didReceiveWebSocketHandshakeResponseImpl(inspectorAgent, identifier, response);
#endif
}
inline void InspectorInstrumentation::didCloseWebSocket(ScriptExecutionContext* context, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context))
- didCloseWebSocketImpl(inspectorController, identifier);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
+ didCloseWebSocketImpl(inspectorAgent, identifier);
#endif
}
#endif
@@ -816,8 +821,8 @@ inline void InspectorInstrumentation::didCloseWebSocket(ScriptExecutionContext*
inline void InspectorInstrumentation::networkStateChanged(Page* page)
{
#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page))
- networkStateChangedImpl(inspectorController);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
+ networkStateChangedImpl(inspectorAgent);
#endif
}
@@ -825,145 +830,69 @@ inline void InspectorInstrumentation::networkStateChanged(Page* page)
inline void InspectorInstrumentation::updateApplicationCacheStatus(Frame* frame)
{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame))
- updateApplicationCacheStatusImpl(inspectorController, frame);
+ if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
+ updateApplicationCacheStatusImpl(inspectorAgent, frame);
#endif
}
#endif
-inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptArguments* arguments, ScriptCallStack* callStack)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- addMessageToConsoleImpl(inspectorController, source, type, level, message, arguments, callStack);
-#endif
-}
-
-inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
-{
#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- addMessageToConsoleImpl(inspectorController, source, type, level, message, lineNumber, sourceID);
-#endif
-}
-
-inline void InspectorInstrumentation::consoleCount(Page* page, ScriptArguments* arguments, ScriptCallStack* stack)
+inline bool InspectorInstrumentation::hasFrontend(Page* page)
{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- consoleCountImpl(inspectorController, arguments, stack);
-#endif
+ return inspectorAgentWithFrontendForPage(page);
}
-
-inline void InspectorInstrumentation::startConsoleTiming(Page* page, const String& title)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- startConsoleTimingImpl(inspectorController, title);
#endif
-}
-inline void InspectorInstrumentation::stopConsoleTiming(Page* page, const String& title, ScriptCallStack* stack)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- stopConsoleTimingImpl(inspectorController, title, stack);
-#endif
-}
-
-inline void InspectorInstrumentation::consoleMarkTimeline(Page* page, ScriptArguments* arguments)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page))
- consoleMarkTimelineImpl(inspectorController, arguments);
-#endif
-}
-
-#if ENABLE(JAVASCRIPT_DEBUGGER)
-inline void InspectorInstrumentation::addStartProfilingMessageToConsole(Page* page, const String& title, unsigned lineNumber, const String& sourceURL)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- addStartProfilingMessageToConsoleImpl(inspectorController, title, lineNumber, sourceURL);
-#endif
-}
-
-inline void InspectorInstrumentation::addProfile(Page* page, RefPtr<ScriptProfile> profile, ScriptCallStack* callStack)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- addProfileImpl(inspectorController, profile, callStack);
-#endif
-}
-
-inline bool InspectorInstrumentation::profilerEnabled(Page* page)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- return profilerEnabledImpl(inspectorController);
-#endif
- return false;
-}
-
-inline String InspectorInstrumentation::getCurrentUserInitiatedProfileName(Page* page, bool incrementProfileNumber)
-{
-#if ENABLE(INSPECTOR)
- if (InspectorController* inspectorController = inspectorControllerForPage(page))
- return InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(inspectorController, incrementProfileNumber);
-#endif
- return "";
-}
-#endif
#if ENABLE(INSPECTOR)
-inline InspectorController* InspectorInstrumentation::inspectorControllerForContext(ScriptExecutionContext* context)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentForContext(ScriptExecutionContext* context)
{
if (context && context->isDocument())
- return inspectorControllerForPage(static_cast<Document*>(context)->page());
+ return inspectorAgentForPage(static_cast<Document*>(context)->page());
return 0;
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerForFrame(Frame* frame)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentForFrame(Frame* frame)
{
if (frame)
- return inspectorControllerForPage(frame->page());
+ return inspectorAgentForPage(frame->page());
return 0;
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerForPage(Page* page)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentForPage(Page* page)
{
if (!page)
return 0;
- return page->inspectorController();
+ return inspectorAgents().get(page);
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForContext(ScriptExecutionContext* context)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForContext(ScriptExecutionContext* context)
{
if (hasFrontends() && context && context->isDocument())
- return inspectorControllerWithFrontendForPage(static_cast<Document*>(context)->page());
+ return inspectorAgentWithFrontendForPage(static_cast<Document*>(context)->page());
return 0;
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForDocument(Document* document)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForDocument(Document* document)
{
if (hasFrontends() && document)
- return inspectorControllerWithFrontendForPage(document->page());
+ return inspectorAgentWithFrontendForPage(document->page());
return 0;
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForFrame(Frame* frame)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForFrame(Frame* frame)
{
if (hasFrontends() && frame)
- return inspectorControllerWithFrontendForPage(frame->page());
+ return inspectorAgentWithFrontendForPage(frame->page());
return 0;
}
-inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForPage(Page* page)
+inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForPage(Page* page)
{
if (page) {
- if (InspectorController* inspectorController = inspectorControllerForPage(page)) {
- if (hasFrontend(inspectorController))
- return inspectorController;
+ if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) {
+ if (hasFrontend(inspectorAgent))
+ return inspectorAgent;
}
}
return 0;
diff --git a/Source/WebCore/inspector/InspectorProfilerAgent.cpp b/Source/WebCore/inspector/InspectorProfilerAgent.cpp
index 8c4f28f..550febf 100644
--- a/Source/WebCore/inspector/InspectorProfilerAgent.cpp
+++ b/Source/WebCore/inspector/InspectorProfilerAgent.cpp
@@ -33,8 +33,8 @@
#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
#include "Console.h"
+#include "InspectorAgent.h"
#include "InspectorConsoleAgent.h"
-#include "InspectorController.h"
#include "InspectorFrontend.h"
#include "InspectorValues.h"
#include "KURL.h"
@@ -56,16 +56,16 @@ static const char* const UserInitiatedProfileName = "org.webkit.profiles.user-in
static const char* const CPUProfileType = "CPU";
static const char* const HeapProfileType = "HEAP";
-PassOwnPtr<InspectorProfilerAgent> InspectorProfilerAgent::create(InspectorController* inspectorController)
+PassOwnPtr<InspectorProfilerAgent> InspectorProfilerAgent::create(InspectorAgent* inspectorAgent)
{
- OwnPtr<InspectorProfilerAgent> agent = adoptPtr(new InspectorProfilerAgent(inspectorController));
+ OwnPtr<InspectorProfilerAgent> agent = adoptPtr(new InspectorProfilerAgent(inspectorAgent));
return agent.release();
}
-InspectorProfilerAgent::InspectorProfilerAgent(InspectorController* inspectorController)
- : m_inspectorController(inspectorController)
+InspectorProfilerAgent::InspectorProfilerAgent(InspectorAgent* inspectorAgent)
+ : m_inspectorAgent(inspectorAgent)
, m_frontend(0)
- , m_enabled(ScriptProfiler::isProfilerAlwaysEnabled())
+ , m_enabled(false)
, m_recordingUserInitiatedProfile(false)
, m_currentUserInitiatedProfileNumber(-1)
, m_nextUserInitiatedProfileNumber(1)
@@ -93,7 +93,7 @@ void InspectorProfilerAgent::addProfileFinishedMessageToConsole(PassRefPtr<Scrip
RefPtr<ScriptProfile> profile = prpProfile;
String title = profile->title();
String message = makeString("Profile \"webkit-profile://", CPUProfileType, '/', encodeWithURLEscapeSequences(title), '#', String::number(profile->uid()), "\" finished.");
- m_inspectorController->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
+ m_inspectorAgent->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
}
void InspectorProfilerAgent::addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL)
@@ -101,7 +101,7 @@ void InspectorProfilerAgent::addStartProfilingMessageToConsole(const String& tit
if (!m_frontend)
return;
String message = makeString("Profile \"webkit-profile://", CPUProfileType, '/', encodeWithURLEscapeSequences(title), "#0\" started.");
- m_inspectorController->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
+ m_inspectorAgent->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL);
}
PassRefPtr<InspectorObject> InspectorProfilerAgent::createProfileHeader(const ScriptProfile& profile)
@@ -220,7 +220,9 @@ void InspectorProfilerAgent::resetState()
void InspectorProfilerAgent::resetFrontendProfiles()
{
- if (m_frontend && m_profiles.begin() == m_profiles.end())
+ if (m_frontend
+ && m_profiles.begin() == m_profiles.end()
+ && m_snapshots.begin() == m_snapshots.end())
m_frontend->resetProfiles();
}
@@ -229,13 +231,13 @@ void InspectorProfilerAgent::startUserInitiatedProfiling()
if (m_recordingUserInitiatedProfile)
return;
if (!enabled()) {
- enable(false);
+ enable(true);
ScriptDebugServer::shared().recompileAllJSFunctions();
}
m_recordingUserInitiatedProfile = true;
String title = getCurrentUserInitiatedProfileName(true);
#if USE(JSC)
- JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorController->inspectedPage()->mainFrame(), debuggerWorld())->globalExec();
+ JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorAgent->inspectedPage()->mainFrame(), debuggerWorld())->globalExec();
#else
ScriptState* scriptState = 0;
#endif
@@ -251,7 +253,7 @@ void InspectorProfilerAgent::stopUserInitiatedProfiling(bool ignoreProfile)
m_recordingUserInitiatedProfile = false;
String title = getCurrentUserInitiatedProfileName();
#if USE(JSC)
- JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorController->inspectedPage()->mainFrame(), debuggerWorld())->globalExec();
+ JSC::ExecState* scriptState = toJSDOMWindow(m_inspectorAgent->inspectedPage()->mainFrame(), debuggerWorld())->globalExec();
#else
// Use null script state to avoid filtering by context security token.
// All functions from all iframes should be visible from Inspector UI.
@@ -267,12 +269,37 @@ void InspectorProfilerAgent::stopUserInitiatedProfiling(bool ignoreProfile)
toggleRecordButton(false);
}
-void InspectorProfilerAgent::takeHeapSnapshot()
+namespace {
+
+class HeapSnapshotProgress: public ScriptProfiler::HeapSnapshotProgress {
+public:
+ explicit HeapSnapshotProgress(InspectorFrontend* frontend)
+ : m_frontend(frontend) { }
+ void Start(int totalWork)
+ {
+ m_totalWork = totalWork;
+ }
+ void Worked(int workDone)
+ {
+ if (m_frontend)
+ m_frontend->reportHeapSnapshotProgress(workDone, m_totalWork);
+ }
+ void Done() { }
+ bool isCanceled() { return false; }
+private:
+ InspectorFrontend* m_frontend;
+ int m_totalWork;
+};
+
+};
+
+void InspectorProfilerAgent::takeHeapSnapshot(bool detailed)
{
String title = makeString(UserInitiatedProfileName, '.', String::number(m_nextUserInitiatedHeapSnapshotNumber));
++m_nextUserInitiatedHeapSnapshotNumber;
- RefPtr<ScriptHeapSnapshot> snapshot = ScriptProfiler::takeHeapSnapshot(title);
+ HeapSnapshotProgress progress(m_frontend);
+ RefPtr<ScriptHeapSnapshot> snapshot = ScriptProfiler::takeHeapSnapshot(title, detailed ? &progress : 0);
if (snapshot) {
m_snapshots.add(snapshot->uid(), snapshot);
if (m_frontend)
diff --git a/Source/WebCore/inspector/InspectorProfilerAgent.h b/Source/WebCore/inspector/InspectorProfilerAgent.h
index 436ae51..93637f5 100644
--- a/Source/WebCore/inspector/InspectorProfilerAgent.h
+++ b/Source/WebCore/inspector/InspectorProfilerAgent.h
@@ -41,7 +41,7 @@
namespace WebCore {
class InspectorArray;
-class InspectorController;
+class InspectorAgent;
class InspectorFrontend;
class InspectorObject;
class ScriptHeapSnapshot;
@@ -50,7 +50,7 @@ class ScriptProfile;
class InspectorProfilerAgent {
WTF_MAKE_NONCOPYABLE(InspectorProfilerAgent); WTF_MAKE_FAST_ALLOCATED;
public:
- static PassOwnPtr<InspectorProfilerAgent> create(InspectorController*);
+ static PassOwnPtr<InspectorProfilerAgent> create(InspectorAgent*);
virtual ~InspectorProfilerAgent();
void addProfile(PassRefPtr<ScriptProfile> prpProfile, unsigned lineNumber, const String& sourceURL);
@@ -70,18 +70,18 @@ public:
void setFrontend(InspectorFrontend* frontend) { m_frontend = frontend; }
void startUserInitiatedProfiling();
void stopUserInitiatedProfiling(bool ignoreProfile = false);
- void takeHeapSnapshot();
+ void takeHeapSnapshot(bool detailed);
void toggleRecordButton(bool isProfiling);
private:
typedef HashMap<unsigned int, RefPtr<ScriptProfile> > ProfilesMap;
typedef HashMap<unsigned int, RefPtr<ScriptHeapSnapshot> > HeapSnapshotsMap;
- InspectorProfilerAgent(InspectorController*);
+ InspectorProfilerAgent(InspectorAgent*);
PassRefPtr<InspectorObject> createProfileHeader(const ScriptProfile& profile);
PassRefPtr<InspectorObject> createSnapshotHeader(const ScriptHeapSnapshot& snapshot);
- InspectorController* m_inspectorController;
+ InspectorAgent* m_inspectorAgent;
InspectorFrontend* m_frontend;
bool m_enabled;
bool m_recordingUserInitiatedProfile;
diff --git a/Source/WebCore/inspector/InspectorResourceAgent.cpp b/Source/WebCore/inspector/InspectorResourceAgent.cpp
index 029c79d..38d9e32 100644
--- a/Source/WebCore/inspector/InspectorResourceAgent.cpp
+++ b/Source/WebCore/inspector/InspectorResourceAgent.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -67,9 +67,14 @@
namespace WebCore {
+namespace ResourceAgentState {
+static const char resourceAgentEnabled[] = "resourceAgentEnabled";
+static const char extraRequestHeaders[] = "extraRequestHeaders";
+}
+
PassRefPtr<InspectorResourceAgent> InspectorResourceAgent::restore(Page* page, InspectorState* state, InspectorFrontend* frontend)
{
- if (state->getBoolean(InspectorState::resourceAgentEnabled))
+ if (state->getBoolean(ResourceAgentState::resourceAgentEnabled))
return create(page, state, frontend);
return 0;
}
@@ -95,7 +100,6 @@ bool InspectorResourceAgent::resourceContent(Frame* frame, const KURL& url, Stri
bool InspectorResourceAgent::resourceContentBase64(Frame* frame, const KURL& url, String* result)
{
- Vector<char> out;
String textEncodingName;
RefPtr<SharedBuffer> data = InspectorResourceAgent::resourceData(frame, url, &textEncodingName);
if (!data) {
@@ -103,8 +107,7 @@ bool InspectorResourceAgent::resourceContentBase64(Frame* frame, const KURL& url
return false;
}
- base64Encode(data->buffer(), out);
- *result = String(out.data(), out.size());
+ *result = base64Encode(data->buffer());
return true;
}
@@ -121,6 +124,10 @@ PassRefPtr<SharedBuffer> InspectorResourceAgent::resourceData(Frame* frame, cons
if (!cachedResource)
return 0;
+ // Zero-sized resources don't have data at all -- so fake the empty buffer, insted of indicating error by returning 0.
+ if (!cachedResource->encodedSize())
+ return SharedBuffer::create();
+
if (cachedResource->isPurgeable()) {
// If the resource is purgeable then make it unpurgeable to get
// get its data. This might fail, in which case we return an
@@ -289,7 +296,7 @@ static void populateObjectWithFrameResources(Frame* frame, PassRefPtr<InspectorO
InspectorResourceAgent::~InspectorResourceAgent()
{
- m_state->setBoolean(InspectorState::resourceAgentEnabled, false);
+ m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false);
}
void InspectorResourceAgent::identifierForInitialRequest(unsigned long identifier, const KURL& url, DocumentLoader* loader)
@@ -304,8 +311,28 @@ void InspectorResourceAgent::identifierForInitialRequest(unsigned long identifie
m_frontend->identifierForInitialRequest(identifier, url.string(), loaderObject, callStackValue);
}
+void InspectorResourceAgent::setExtraHeaders(PassRefPtr<InspectorObject> headers)
+{
+ m_state->setObject(ResourceAgentState::extraRequestHeaders, headers);
+}
+
+
void InspectorResourceAgent::willSendRequest(unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
+ RefPtr<InspectorObject> headers = m_state->getObject(ResourceAgentState::extraRequestHeaders);
+
+ if (headers) {
+ InspectorObject::const_iterator end = headers->end();
+ for (InspectorObject::const_iterator it = headers->begin(); it != end; ++it) {
+ String value;
+ if (it->second->asString(&value))
+ request.setHTTPHeaderField(it->first, value);
+ }
+ }
+
+ request.setReportLoadTiming(true);
+ request.setReportRawHeaders(true);
+
m_frontend->willSendRequest(identifier, currentTime(), buildObjectForResourceRequest(request), buildObjectForResourceResponse(redirectResponse));
}
@@ -318,23 +345,27 @@ void InspectorResourceAgent::didReceiveResponse(unsigned long identifier, Docume
{
RefPtr<InspectorObject> resourceResponse = buildObjectForResourceResponse(response);
String type = "Other";
- if (loader) {
- if (equalIgnoringFragmentIdentifier(response.url(), loader->frameLoader()->iconURL()))
- type = "Image";
- else {
- CachedResource* cachedResource = InspectorResourceAgent::cachedResource(loader->frame(), response.url());
- if (cachedResource)
- type = cachedResourceTypeString(*cachedResource);
-
- if (equalIgnoringFragmentIdentifier(response.url(), loader->url()) && type == "Other")
- type = "Document";
+ long cachedResourceSize = 0;
+ if (loader) {
+ CachedResource* cachedResource = InspectorResourceAgent::cachedResource(loader->frame(), response.url());
+ if (cachedResource) {
+ type = cachedResourceTypeString(*cachedResource);
+ cachedResourceSize = cachedResource->encodedSize();
// Use mime type from cached resource in case the one in response is empty.
- if (response.mimeType().isEmpty() && cachedResource)
+ if (response.mimeType().isEmpty())
resourceResponse->setString("mimeType", cachedResource->response().mimeType());
}
+ if (equalIgnoringFragmentIdentifier(response.url(), loader->frameLoader()->iconURL()))
+ type = "Image";
+ else if (equalIgnoringFragmentIdentifier(response.url(), loader->url()) && type == "Other")
+ type = "Document";
}
m_frontend->didReceiveResponse(identifier, currentTime(), type, resourceResponse);
+ // If we revalidated the resource and got Not modified, send content length following didReceiveResponse
+ // as there will be no calls to didReceiveContentLength from the network stack.
+ if (cachedResourceSize && response.httpStatusCode() == 304)
+ didReceiveContentLength(identifier, cachedResourceSize);
}
void InspectorResourceAgent::didReceiveContentLength(unsigned long identifier, int lengthReceived)
@@ -376,7 +407,7 @@ static PassRefPtr<InspectorObject> buildObjectForFrame(Frame* frame)
name = frame->ownerElement()->getAttribute(HTMLNames::idAttr);
frameObject->setString("name", name);
}
- frameObject->setString("url", frame->loader()->url().string());
+ frameObject->setString("url", frame->document()->url().string());
return frameObject;
}
@@ -472,17 +503,17 @@ void InspectorResourceAgent::cachedResources(RefPtr<InspectorObject>* object)
*object = buildObjectForFrameTree(m_page->mainFrame(), true);
}
-void InspectorResourceAgent::resourceContent(unsigned long id, const String& url, bool base64Encode, String* content)
+void InspectorResourceAgent::resourceContent(unsigned long frameId, const String& url, bool base64Encode, bool* success, String* content)
{
- for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext(m_page->mainFrame())) {
- if (frameId(frame) != id)
- continue;
- if (base64Encode)
- InspectorResourceAgent::resourceContentBase64(frame, KURL(ParsedURLString, url), content);
- else
- InspectorResourceAgent::resourceContent(frame, KURL(ParsedURLString, url), content);
- break;
+ Frame* frame = frameForId(frameId);
+ if (!frame) {
+ *success = false;
+ return;
}
+ if (base64Encode)
+ *success = InspectorResourceAgent::resourceContentBase64(frame, KURL(ParsedURLString, url), content);
+ else
+ *success = InspectorResourceAgent::resourceContent(frame, KURL(ParsedURLString, url), content);
}
InspectorResourceAgent::InspectorResourceAgent(Page* page, InspectorState* state, InspectorFrontend* frontend)
@@ -490,7 +521,7 @@ InspectorResourceAgent::InspectorResourceAgent(Page* page, InspectorState* state
, m_state(state)
, m_frontend(frontend)
{
- m_state->setBoolean(InspectorState::resourceAgentEnabled, true);
+ m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, true);
}
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorResourceAgent.h b/Source/WebCore/inspector/InspectorResourceAgent.h
index 6c2df24..fb24b70 100644
--- a/Source/WebCore/inspector/InspectorResourceAgent.h
+++ b/Source/WebCore/inspector/InspectorResourceAgent.h
@@ -103,7 +103,8 @@ public:
// Called from frontend
void cachedResources(RefPtr<InspectorObject>*);
- void resourceContent(unsigned long frameID, const String& url, bool base64Encode, String* content);
+ void resourceContent(unsigned long frameId, const String& url, bool base64Encode, bool* resourceFound, String* content);
+ void setExtraHeaders(PassRefPtr<InspectorObject>);
private:
InspectorResourceAgent(Page* page, InspectorState*, InspectorFrontend* frontend);
diff --git a/Source/WebCore/inspector/InspectorRuntimeAgent.cpp b/Source/WebCore/inspector/InspectorRuntimeAgent.cpp
index 0502437..7938afd 100644
--- a/Source/WebCore/inspector/InspectorRuntimeAgent.cpp
+++ b/Source/WebCore/inspector/InspectorRuntimeAgent.cpp
@@ -45,18 +45,18 @@ InspectorRuntimeAgent::InspectorRuntimeAgent(InjectedScriptHost* injectedScriptH
InspectorRuntimeAgent::~InspectorRuntimeAgent() { }
-void InspectorRuntimeAgent::evaluate(const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result)
+void InspectorRuntimeAgent::evaluate(const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
InjectedScript injectedScript = m_injectedScriptHost->injectedScriptForMainFrame();
if (!injectedScript.hasNoValue())
- injectedScript.evaluate(expression, objectGroup, result);
+ injectedScript.evaluate(expression, objectGroup, includeCommandLineAPI, result);
}
-void InspectorRuntimeAgent::getCompletions(const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result)
+void InspectorRuntimeAgent::getCompletions(const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result)
{
InjectedScript injectedScript = m_injectedScriptHost->injectedScriptForMainFrame();
if (!injectedScript.hasNoValue())
- injectedScript.getCompletions(expression, includeInspectorCommandLineAPI, result);
+ injectedScript.getCompletions(expression, includeCommandLineAPI, result);
}
void InspectorRuntimeAgent::getProperties(PassRefPtr<InspectorObject> objectId, bool ignoreHasOwnProperty, bool abbreviate, RefPtr<InspectorValue>* result)
diff --git a/Source/WebCore/inspector/InspectorRuntimeAgent.h b/Source/WebCore/inspector/InspectorRuntimeAgent.h
index 3ac2eed..9fb2716 100644
--- a/Source/WebCore/inspector/InspectorRuntimeAgent.h
+++ b/Source/WebCore/inspector/InspectorRuntimeAgent.h
@@ -57,8 +57,8 @@ public:
~InspectorRuntimeAgent();
// Part of the protocol.
- void evaluate(const String& expression, const String& objectGroup, RefPtr<InspectorValue>* result);
- void getCompletions(const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result);
+ void evaluate(const String& expression, const String& objectGroup, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
+ void getCompletions(const String& expression, bool includeCommandLineAPI, RefPtr<InspectorValue>* result);
void getProperties(PassRefPtr<InspectorObject> objectId, bool ignoreHasOwnProperty, bool abbreviate, RefPtr<InspectorValue>* result);
void setPropertyValue(PassRefPtr<InspectorObject> objectId, const String& propertyName, const String& expression, RefPtr<InspectorValue>* result);
void releaseWrapperObjectGroup(long injectedScriptId, const String& objectGroup);
diff --git a/Source/WebCore/inspector/InspectorSettings.cpp b/Source/WebCore/inspector/InspectorSettings.cpp
deleted file mode 100644
index 3ebc3ab..0000000
--- a/Source/WebCore/inspector/InspectorSettings.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "config.h"
-#include "InspectorSettings.h"
-
-#if ENABLE(INSPECTOR)
-
-#include "InspectorClient.h"
-
-namespace WebCore {
-
-const char* InspectorSettings::MonitoringXHREnabled = "xhrMonitor";
-const char* InspectorSettings::ProfilerAlwaysEnabled = "profilerEnabled";
-const char* InspectorSettings::DebuggerAlwaysEnabled = "debuggerEnabled";
-const char* InspectorSettings::InspectorStartsAttached = "inspectorStartsAttached";
-const char* InspectorSettings::InspectorAttachedHeight = "inspectorAttachedHeight";
-
-InspectorSettings::InspectorSettings(InspectorClient* client)
- : m_client(client)
-{
- registerBoolean(MonitoringXHREnabled, false);
- registerBoolean(ProfilerAlwaysEnabled, false);
- registerBoolean(DebuggerAlwaysEnabled, false);
- registerBoolean(InspectorStartsAttached, true);
- registerLong(InspectorAttachedHeight, 300);
-}
-
-bool InspectorSettings::getBoolean(const String& name)
-{
- String value;
- m_client->populateSetting(name, &value);
- if (value.isEmpty())
- value = m_defaultValues.get(name);
- return value == "true";
-}
-
-void InspectorSettings::setBoolean(const String& name, bool value)
-{
- m_client->storeSetting(name, value ? "true" : "false");
-}
-
-long InspectorSettings::getLong(const String& name)
-{
- String value;
- m_client->populateSetting(name, &value);
- if (value.isEmpty())
- value = m_defaultValues.get(name);
- return value.toInt();
-}
-
-void InspectorSettings::setLong(const String& name, long value)
-{
- m_client->storeSetting(name, String::number(value));
-}
-
-void InspectorSettings::registerBoolean(const String& name, bool defaultValue)
-{
- m_defaultValues.set(name, defaultValue ? "true" : "false");
-}
-
-void InspectorSettings::registerLong(const String& name, long defaultValue)
-{
- m_defaultValues.set(name, String::number(defaultValue));
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebCore/inspector/InspectorState.cpp b/Source/WebCore/inspector/InspectorState.cpp
index dba9e4d..290ffc2 100644
--- a/Source/WebCore/inspector/InspectorState.cpp
+++ b/Source/WebCore/inspector/InspectorState.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -37,121 +37,75 @@ namespace WebCore {
InspectorState::InspectorState(InspectorClient* client)
: m_client(client)
+ , m_properties(InspectorObject::create())
+ , m_isOnMute(false)
{
- // Pure reload state
- registerBoolean(userInitiatedProfiling, false);
- registerBoolean(timelineProfilerEnabled, false);
- registerBoolean(searchingForNode, false);
- registerObject(browserBreakpoints);
- registerBoolean(consoleMessagesEnabled, false);
- registerBoolean(monitoringXHR, false);
- registerBoolean(resourceAgentEnabled, false);
}
-void InspectorState::restoreFromInspectorCookie(const String& json)
+InspectorState::InspectorState(InspectorClient* client, const String& json)
+ : m_client(client)
+ , m_properties(InspectorObject::create())
+ , m_isOnMute(false)
{
RefPtr<InspectorValue> jsonValue = InspectorValue::parseJSON(json);
- if (!jsonValue)
- return;
-
- RefPtr<InspectorObject> jsonObject = jsonValue->asObject();
- if (!jsonObject)
- return;
+ if (jsonValue)
+ m_properties = jsonValue->asObject();
+ if (!m_properties)
+ m_properties = InspectorObject::create();
+}
- for (InspectorObject::iterator i = jsonObject->begin(); i != jsonObject->end(); ++i) {
- InspectorPropertyId id = (InspectorPropertyId)i->first.toInt();
- ASSERT(id > 0 && id < lastPropertyId);
- PropertyMap::iterator j = m_properties.find(id);
- ASSERT(j != m_properties.end());
- ASSERT(j->second.m_value->type() == i->second->type());
- j->second.m_value = i->second;
- }
+void InspectorState::mute()
+{
+ m_isOnMute = true;
}
void InspectorState::updateCookie()
{
- RefPtr<InspectorObject> cookieObject = InspectorObject::create();
- for (PropertyMap::iterator i = m_properties.begin(); i != m_properties.end(); ++i)
- cookieObject->setValue(String::number(i->first), i->second.m_value);
- m_client->updateInspectorStateCookie(cookieObject->toJSONString());
+ if (!m_isOnMute)
+ m_client->updateInspectorStateCookie(m_properties->toJSONString());
}
-void InspectorState::setValue(InspectorPropertyId id, PassRefPtr<InspectorValue> value)
+void InspectorState::setValue(const String& propertyName, PassRefPtr<InspectorValue> value)
{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
- i->second.m_value = value;
+ m_properties->setValue(propertyName, value);
updateCookie();
}
-bool InspectorState::getBoolean(InspectorPropertyId id)
+bool InspectorState::getBoolean(const String& propertyName)
{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
+ InspectorObject::iterator it = m_properties->find(propertyName);
bool value = false;
- i->second.m_value->asBoolean(&value);
+ if (it != m_properties->end())
+ it->second->asBoolean(&value);
return value;
}
-String InspectorState::getString(InspectorPropertyId id)
+String InspectorState::getString(const String& propertyName)
{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
+ InspectorObject::iterator it = m_properties->find(propertyName);
String value;
- i->second.m_value->asString(&value);
+ if (it != m_properties->end())
+ it->second->asString(&value);
return value;
}
-long InspectorState::getLong(InspectorPropertyId id)
+long InspectorState::getLong(const String& propertyName)
{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
+ InspectorObject::iterator it = m_properties->find(propertyName);
long value = 0;
- i->second.m_value->asNumber(&value);
+ if (it != m_properties->end())
+ it->second->asNumber(&value);
return value;
}
-PassRefPtr<InspectorObject> InspectorState::getObject(InspectorPropertyId id)
+PassRefPtr<InspectorObject> InspectorState::getObject(const String& propertyName)
{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
- return i->second.m_value->asObject();
-}
-
-void InspectorState::setObject(InspectorPropertyId id, PassRefPtr<InspectorObject> value)
-{
- PropertyMap::iterator i = m_properties.find(id);
- ASSERT(i != m_properties.end());
- Property& property = i->second;
- property.m_value = value;
- updateCookie();
-}
-
-void InspectorState::registerBoolean(InspectorPropertyId propertyId, bool value)
-{
- m_properties.set(propertyId, Property::create(InspectorBasicValue::create(value)));
-}
-
-void InspectorState::registerString(InspectorPropertyId propertyId, const String& value)
-{
- m_properties.set(propertyId, Property::create(InspectorString::create(value)));
-}
-
-void InspectorState::registerLong(InspectorPropertyId propertyId, long value)
-{
- m_properties.set(propertyId, Property::create(InspectorBasicValue::create((double)value)));
-}
-
-void InspectorState::registerObject(InspectorPropertyId propertyId)
-{
- m_properties.set(propertyId, Property::create(InspectorObject::create()));
-}
-
-InspectorState::Property InspectorState::Property::create(PassRefPtr<InspectorValue> value)
-{
- Property property;
- property.m_value = value;
- return property;
+ InspectorObject::iterator it = m_properties->find(propertyName);
+ if (it == m_properties->end()) {
+ m_properties->setObject(propertyName, InspectorObject::create());
+ it = m_properties->find(propertyName);
+ }
+ return it->second->asObject();
}
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorState.h b/Source/WebCore/inspector/InspectorState.h
index 6e12673..3a9c3ed 100644
--- a/Source/WebCore/inspector/InspectorState.h
+++ b/Source/WebCore/inspector/InspectorState.h
@@ -1,29 +1,31 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * modification, are permitted provided that the following conditions are
+ * met:
*
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef InspectorState_h
@@ -43,48 +45,29 @@ class InspectorClient;
class InspectorState {
public:
- enum InspectorPropertyId {
- monitoringXHR = 1,
- timelineProfilerEnabled,
- searchingForNode,
- consoleMessagesEnabled,
- userInitiatedProfiling,
- browserBreakpoints,
- resourceAgentEnabled,
- lastPropertyId
- };
+ InspectorState(InspectorClient*);
+ InspectorState(InspectorClient*, const String& jsonString);
+ virtual ~InspectorState() {}
- InspectorState(InspectorClient* client);
+ void mute();
- void restoreFromInspectorCookie(const String& jsonString);
+ bool getBoolean(const String& propertyName);
+ String getString(const String& propertyName);
+ long getLong(const String& propertyName);
+ PassRefPtr<InspectorObject> getObject(const String& propertyName);
- bool getBoolean(InspectorPropertyId);
- String getString(InspectorPropertyId);
- long getLong(InspectorPropertyId);
- PassRefPtr<InspectorObject> getObject(InspectorPropertyId);
-
- void setBoolean(InspectorPropertyId propertyId, bool value) { setValue(propertyId, InspectorBasicValue::create(value)); }
- void setString(InspectorPropertyId propertyId, const String& value) { setValue(propertyId, InspectorString::create(value)); }
- void setLong(InspectorPropertyId propertyId, long value) { setValue(propertyId, InspectorBasicValue::create((double)value)); }
- void setObject(InspectorPropertyId, PassRefPtr<InspectorObject> value);
+ void setBoolean(const String& propertyName, bool value) { setValue(propertyName, InspectorBasicValue::create(value)); }
+ void setString(const String& propertyName, const String& value) { setValue(propertyName, InspectorString::create(value)); }
+ void setLong(const String& propertyName, long value) { setValue(propertyName, InspectorBasicValue::create((double)value)); }
+ void setObject(const String& propertyName, PassRefPtr<InspectorObject> value) { setValue(propertyName, value); }
private:
void updateCookie();
- void setValue(InspectorPropertyId, PassRefPtr<InspectorValue>);
-
- struct Property {
- static Property create(PassRefPtr<InspectorValue> value);
- RefPtr<InspectorValue> m_value;
- };
- typedef HashMap<long, Property> PropertyMap;
- PropertyMap m_properties;
-
- void registerBoolean(InspectorPropertyId, bool value);
- void registerString(InspectorPropertyId, const String& value);
- void registerLong(InspectorPropertyId, long value);
- void registerObject(InspectorPropertyId);
+ void setValue(const String& propertyName, PassRefPtr<InspectorValue>);
InspectorClient* m_client;
+ RefPtr<InspectorObject> m_properties;
+ bool m_isOnMute;
};
} // namespace WebCore
diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.cpp b/Source/WebCore/inspector/InspectorTimelineAgent.cpp
index 081a5f0..dd0a119 100644
--- a/Source/WebCore/inspector/InspectorTimelineAgent.cpp
+++ b/Source/WebCore/inspector/InspectorTimelineAgent.cpp
@@ -35,6 +35,7 @@
#include "Event.h"
#include "InspectorFrontend.h"
+#include "InspectorState.h"
#include "IntRect.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
@@ -44,14 +45,17 @@
namespace WebCore {
+namespace TimelineAgentState {
+static const char timelineAgentEnabled[] = "timelineAgentEnabled";
+}
+
int InspectorTimelineAgent::s_id = 0;
-InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
- : m_frontend(frontend)
- , m_id(++s_id)
+PassOwnPtr<InspectorTimelineAgent> InspectorTimelineAgent::restore(InspectorState* state, InspectorFrontend* frontend)
{
- ScriptGCEvent::addEventListener(this);
- ASSERT(m_frontend);
+ if (state->getBoolean(TimelineAgentState::timelineAgentEnabled))
+ return create(state, frontend);
+ return 0;
}
void InspectorTimelineAgent::pushGCEventRecords()
@@ -76,7 +80,9 @@ void InspectorTimelineAgent::didGC(double startTime, double endTime, size_t coll
InspectorTimelineAgent::~InspectorTimelineAgent()
{
+ m_frontend->timelineProfilerWasStopped();
ScriptGCEvent::removeEventListener(this);
+ m_state->setBoolean(TimelineAgentState::timelineAgentEnabled, false);
}
void InspectorTimelineAgent::willCallFunction(const String& scriptName, int scriptLine)
@@ -272,15 +278,15 @@ void InspectorTimelineAgent::didMarkLoadEvent()
addRecordToTimeline(record.release(), MarkLoadEventType);
}
-void InspectorTimelineAgent::reset()
+void InspectorTimelineAgent::didCommitLoad()
{
m_recordStack.clear();
}
-void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend* frontend)
+void InspectorTimelineAgent::setFrontend(InspectorFrontend* frontend)
{
ASSERT(frontend);
- reset();
+ m_recordStack.clear();
m_frontend = frontend;
}
@@ -301,7 +307,8 @@ void InspectorTimelineAgent::setHeapSizeStatistic(InspectorObject* record)
{
size_t usedHeapSize = 0;
size_t totalHeapSize = 0;
- ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize);
+ size_t heapSizeLimit = 0;
+ ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize, heapSizeLimit);
record->setNumber("usedHeapSize", usedHeapSize);
record->setNumber("totalHeapSize", totalHeapSize);
}
@@ -322,6 +329,16 @@ void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type)
}
}
+InspectorTimelineAgent::InspectorTimelineAgent(InspectorState* state, InspectorFrontend* frontend)
+ : m_state(state)
+ , m_frontend(frontend)
+ , m_id(++s_id)
+{
+ ScriptGCEvent::addEventListener(this);
+ m_frontend->timelineProfilerWasStarted();
+ m_state->setBoolean(TimelineAgentState::timelineAgentEnabled, true);
+}
+
void InspectorTimelineAgent::pushCurrentRecord(PassRefPtr<InspectorObject> data, TimelineRecordType type)
{
pushGCEventRecords();
diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.h b/Source/WebCore/inspector/InspectorTimelineAgent.h
index cae5aad..36c2df2 100644
--- a/Source/WebCore/inspector/InspectorTimelineAgent.h
+++ b/Source/WebCore/inspector/InspectorTimelineAgent.h
@@ -36,11 +36,13 @@
#include "InspectorValues.h"
#include "ScriptGCEvent.h"
#include "ScriptGCEventListener.h"
+#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class Event;
class InspectorFrontend;
+class InspectorState;
class IntRect;
class ResourceRequest;
class ResourceResponse;
@@ -71,15 +73,21 @@ enum TimelineRecordType {
};
class InspectorTimelineAgent : ScriptGCEventListener {
- WTF_MAKE_NONCOPYABLE(InspectorTimelineAgent); WTF_MAKE_FAST_ALLOCATED;
+ WTF_MAKE_NONCOPYABLE(InspectorTimelineAgent);
public:
- InspectorTimelineAgent(InspectorFrontend* frontend);
+ static PassOwnPtr<InspectorTimelineAgent> create(InspectorState* state, InspectorFrontend* frontend)
+ {
+ return adoptPtr(new InspectorTimelineAgent(state, frontend));
+ }
+
+ static PassOwnPtr<InspectorTimelineAgent> restore(InspectorState*, InspectorFrontend*);
+
~InspectorTimelineAgent();
int id() const { return m_id; }
- void reset();
- void resetFrontendProxyObject(InspectorFrontend*);
+ void didCommitLoad();
+ void setFrontend(InspectorFrontend*);
// Methods called from WebCore.
void willCallFunction(const String& scriptName, int scriptLine);
@@ -141,6 +149,8 @@ private:
TimelineRecordType type;
};
+ InspectorTimelineAgent(InspectorState*, InspectorFrontend*);
+
void pushCurrentRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
void setHeapSizeStatistic(InspectorObject* record);
@@ -150,6 +160,7 @@ private:
void pushGCEventRecords();
+ InspectorState* m_state;
InspectorFrontend* m_frontend;
Vector<TimelineRecordEntry> m_recordStack;
diff --git a/Source/WebCore/inspector/InspectorValues.cpp b/Source/WebCore/inspector/InspectorValues.cpp
index d1b8093..09d1258 100644
--- a/Source/WebCore/inspector/InspectorValues.cpp
+++ b/Source/WebCore/inspector/InspectorValues.cpp
@@ -491,6 +491,11 @@ bool InspectorValue::asNumber(long*) const
return false;
}
+bool InspectorValue::asNumber(int*) const
+{
+ return false;
+}
+
bool InspectorValue::asNumber(unsigned long*) const
{
return false;
@@ -581,6 +586,14 @@ bool InspectorBasicValue::asNumber(long* output) const
return true;
}
+bool InspectorBasicValue::asNumber(int* output) const
+{
+ if (type() != TypeNumber)
+ return false;
+ *output = static_cast<int>(m_doubleValue);
+ return true;
+}
+
bool InspectorBasicValue::asNumber(unsigned long* output) const
{
if (type() != TypeNumber)
@@ -647,22 +660,6 @@ bool InspectorObject::getBoolean(const String& name, bool* output) const
return value->asBoolean(output);
}
-bool InspectorObject::getNumber(const String& name, long* output) const
-{
- RefPtr<InspectorValue> value = get(name);
- if (!value)
- return false;
- return value->asNumber(output);
-}
-
-bool InspectorObject::getNumber(const String& name, double* output) const
-{
- RefPtr<InspectorValue> value = get(name);
- if (!value)
- return false;
- return value->asNumber(output);
-}
-
bool InspectorObject::getString(const String& name, String* output) const
{
RefPtr<InspectorValue> value = get(name);
@@ -695,6 +692,17 @@ PassRefPtr<InspectorValue> InspectorObject::get(const String& name) const
return it->second;
}
+void InspectorObject::remove(const String& name)
+{
+ m_data.remove(name);
+ for (size_t i = 0; i < m_order.size(); ++i) {
+ if (m_order[i] == name) {
+ m_order.remove(i);
+ break;
+ }
+ }
+}
+
void InspectorObject::writeJSON(Vector<UChar>* output) const
{
output->append('{');
diff --git a/Source/WebCore/inspector/InspectorValues.h b/Source/WebCore/inspector/InspectorValues.h
index 843f369..835c982 100644
--- a/Source/WebCore/inspector/InspectorValues.h
+++ b/Source/WebCore/inspector/InspectorValues.h
@@ -72,6 +72,7 @@ public:
virtual bool asBoolean(bool* output) const;
virtual bool asNumber(double* output) const;
virtual bool asNumber(long* output) const;
+ virtual bool asNumber(int* output) const;
virtual bool asNumber(unsigned long* output) const;
virtual bool asNumber(unsigned int* output) const;
virtual bool asString(String* output) const;
@@ -114,6 +115,7 @@ public:
virtual bool asBoolean(bool* output) const;
virtual bool asNumber(double* output) const;
virtual bool asNumber(long* output) const;
+ virtual bool asNumber(int* output) const;
virtual bool asNumber(unsigned long* output) const;
virtual bool asNumber(unsigned int* output) const;
@@ -178,15 +180,23 @@ public:
void setObject(const String& name, PassRefPtr<InspectorObject>);
void setArray(const String& name, PassRefPtr<InspectorArray>);
+ iterator find(const String& name);
const_iterator find(const String& name) const;
bool getBoolean(const String& name, bool* output) const;
- bool getNumber(const String& name, long* output) const;
- bool getNumber(const String& name, double* output) const;
+ template<class T> bool getNumber(const String& name, T* output) const
+ {
+ RefPtr<InspectorValue> value = get(name);
+ if (!value)
+ return false;
+ return value->asNumber(output);
+ }
bool getString(const String& name, String* output) const;
PassRefPtr<InspectorObject> getObject(const String& name) const;
PassRefPtr<InspectorArray> getArray(const String& name) const;
PassRefPtr<InspectorValue> get(const String& name) const;
+ void remove(const String& name);
+
virtual void writeJSON(Vector<UChar>* output) const;
iterator begin() { return m_data.begin(); }
@@ -228,6 +238,11 @@ private:
Vector<RefPtr<InspectorValue> > m_data;
};
+inline InspectorObject::iterator InspectorObject::find(const String& name)
+{
+ return m_data.find(name);
+}
+
inline InspectorObject::const_iterator InspectorObject::find(const String& name) const
{
return m_data.find(name);
diff --git a/Source/WebCore/inspector/ScriptBreakpoint.cpp b/Source/WebCore/inspector/ScriptBreakpoint.cpp
deleted file mode 100644
index b7205a7..0000000
--- a/Source/WebCore/inspector/ScriptBreakpoint.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "ScriptBreakpoint.h"
-
-#if ENABLE(INSPECTOR)
-
-#include "InspectorValues.h"
-
-namespace WebCore {
-
-void ScriptBreakpoint::sourceBreakpointsFromInspectorObject(PassRefPtr<InspectorObject> breakpoints, SourceBreakpoints* sourceBreakpoints)
-{
- for (InspectorObject::iterator it = breakpoints->begin(); it != breakpoints->end(); ++it) {
- bool ok;
- int lineNumber = it->first.toInt(&ok);
- if (!ok)
- continue;
- RefPtr<InspectorObject> breakpoint = it->second->asObject();
- if (!breakpoint)
- continue;
- bool enabled;
- RefPtr<InspectorValue> enabledValue = breakpoint->get("enabled");
- if (!enabledValue || !enabledValue->asBoolean(&enabled))
- continue;
- String condition;
- RefPtr<InspectorValue> conditionValue = breakpoint->get("condition");
- if (!conditionValue || !conditionValue->asString(&condition))
- continue;
- sourceBreakpoints->set(lineNumber, ScriptBreakpoint(enabled, condition));
- }
-}
-
-PassRefPtr<InspectorObject> ScriptBreakpoint::inspectorObjectFromSourceBreakpoints(const SourceBreakpoints& sourceBreakpoints)
-{
- RefPtr<InspectorObject> breakpoints = InspectorObject::create();
- for (SourceBreakpoints::const_iterator it = sourceBreakpoints.begin(); it != sourceBreakpoints.end(); ++it) {
- RefPtr<InspectorObject> breakpoint = InspectorObject::create();
- breakpoint->setBoolean("enabled", it->second.enabled);
- breakpoint->setString("condition", it->second.condition);
- breakpoints->setObject(String::number(it->first), breakpoint);
- }
- return breakpoints.release();
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebCore/inspector/ScriptBreakpoint.h b/Source/WebCore/inspector/ScriptBreakpoint.h
index d8ac762..4917aef 100644
--- a/Source/WebCore/inspector/ScriptBreakpoint.h
+++ b/Source/WebCore/inspector/ScriptBreakpoint.h
@@ -31,33 +31,26 @@
#define ScriptBreakpoint_h
#include "PlatformString.h"
-#include <wtf/HashMap.h>
namespace WebCore {
-class InspectorObject;
-struct ScriptBreakpoint;
-
-typedef HashMap<int, ScriptBreakpoint> SourceBreakpoints;
-
struct ScriptBreakpoint {
- ScriptBreakpoint(bool enabled, const String& condition)
- : enabled(enabled)
- , condition(condition)
+ ScriptBreakpoint()
{
}
- ScriptBreakpoint()
+ ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, bool enabled)
+ : lineNumber(lineNumber)
+ , columnNumber(columnNumber)
+ , condition(condition)
+ , enabled(enabled)
{
}
- bool enabled;
+ int lineNumber;
+ int columnNumber;
String condition;
-
-#if ENABLE(INSPECTOR)
- static void sourceBreakpointsFromInspectorObject(PassRefPtr<InspectorObject>, SourceBreakpoints*);
- static PassRefPtr<InspectorObject> inspectorObjectFromSourceBreakpoints(const SourceBreakpoints&);
-#endif
+ bool enabled;
};
} // namespace WebCore
diff --git a/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js b/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js
index e7aa188..b345749 100644
--- a/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js
+++ b/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js
@@ -136,7 +136,7 @@ WebInspector.ApplicationCacheItemsView.prototype = {
_update: function()
{
- WebInspector.ApplicationCache.getApplicationCachesAsync(this._updateCallback.bind(this));
+ WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync(this._updateCallback.bind(this));
},
_updateCallback: function(applicationCaches)
diff --git a/Source/WebCore/inspector/front-end/AuditRules.js b/Source/WebCore/inspector/front-end/AuditRules.js
index c2bbcbb..c122ba4 100644
--- a/Source/WebCore/inspector/front-end/AuditRules.js
+++ b/Source/WebCore/inspector/front-end/AuditRules.js
@@ -326,7 +326,7 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
if (!unusedRules.length)
continue;
- var resource = WebInspector.resourceTreeModel.resourceForURL(styleSheet.sourceURL);
+ var resource = WebInspector.resourceForURL(styleSheet.sourceURL);
var isInlineBlock = resource && resource.type == WebInspector.Resource.Type.Document;
var url = !isInlineBlock ? WebInspector.AuditRuleResult.linkifyDisplayName(styleSheet.sourceURL) : String.sprintf("Inline block #%d", ++inlineBlockOrdinal);
var pctUnused = Math.round(100 * unusedStylesheetSize / stylesheetSize);
@@ -383,7 +383,7 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
WebInspector.CSSStyleSheet.createForId(styleSheetIds[i], styleSheetCallback.bind(null, styleSheets, i == styleSheetIds.length - 1 ? evalCallback : null));
}
- InspectorBackend.getAllStyles2(allStylesCallback);
+ InspectorBackend.getAllStyles(allStylesCallback);
}
}
diff --git a/Source/WebCore/inspector/front-end/AuditsPanel.js b/Source/WebCore/inspector/front-end/AuditsPanel.js
index f3cbfa7..47c0b30 100644
--- a/Source/WebCore/inspector/front-end/AuditsPanel.js
+++ b/Source/WebCore/inspector/front-end/AuditsPanel.js
@@ -192,7 +192,7 @@ WebInspector.AuditsPanel.prototype = {
_reloadResources: function(callback)
{
this._pageReloadCallback = callback;
- InspectorBackend.reloadPage();
+ InspectorBackend.reloadPage(false);
},
_didMainResourceLoad: function()
diff --git a/Source/WebCore/inspector/front-end/Breakpoint.js b/Source/WebCore/inspector/front-end/Breakpoint.js
index aa600a7..ebc6029 100644
--- a/Source/WebCore/inspector/front-end/Breakpoint.js
+++ b/Source/WebCore/inspector/front-end/Breakpoint.js
@@ -29,47 +29,21 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.Breakpoint = function(debuggerModel, breakpointId, sourceID, url, line, enabled, condition)
+WebInspector.Breakpoint = function(id, url, sourceID, lineNumber, columnNumber, condition, enabled)
{
- this.id = breakpointId;
+ this.id = id;
this.url = url;
- this.line = line;
this.sourceID = sourceID;
- this._enabled = enabled;
- this._condition = condition || "";
- this._debuggerModel = debuggerModel;
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ this.condition = condition;
+ this.enabled = enabled;
+ this.locations = [];
}
WebInspector.Breakpoint.prototype = {
- get enabled()
+ addLocation: function(sourceID, lineNumber, columnNumber)
{
- return this._enabled;
- },
-
- set enabled(enabled)
- {
- if (this._enabled === enabled)
- return;
- this.remove();
- WebInspector.debuggerModel.setBreakpoint(this.sourceID, this.line, enabled, this.condition);
- },
-
- get condition()
- {
- return this._condition;
- },
-
- get data()
- {
- return { id: this.id, url: this.url, sourceID: this.sourceID, lineNumber: this.line, condition: this.condition };
- },
-
- remove: function()
- {
- this._debuggerModel.removeBreakpoint(this.id);
- this.removeAllListeners();
- delete this._debuggerModel;
+ this.locations.push({ sourceID: sourceID, lineNumber: lineNumber, columnNumber: columnNumber });
}
}
-
-WebInspector.Breakpoint.prototype.__proto__ = WebInspector.Object.prototype;
diff --git a/Source/WebCore/inspector/front-end/BreakpointManager.js b/Source/WebCore/inspector/front-end/BreakpointManager.js
index d943d5b..94345d5 100644
--- a/Source/WebCore/inspector/front-end/BreakpointManager.js
+++ b/Source/WebCore/inspector/front-end/BreakpointManager.js
@@ -34,22 +34,17 @@ WebInspector.BreakpointManager = function()
var breakpoints = WebInspector.settings.findSettingForAllProjects("nativeBreakpoints");
for (var projectId in breakpoints)
this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);
- InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
this._breakpoints = {};
this._domBreakpointsRestored = false;
- this._scriptBreakpoints = {};
WebInspector.settings.addEventListener(WebInspector.Settings.Events.ProjectChanged, this._projectChanged, this);
- WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._scriptBreakpointAdded, this);
- WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointRemoved, this._scriptBreakpointRemoved, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this);
}
WebInspector.BreakpointManager.BreakpointTypes = {
DOM: "DOM",
- JS: "JS",
EventListener: "EventListener",
XHR: "XHR"
}
@@ -104,38 +99,6 @@ WebInspector.BreakpointManager.prototype = {
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, breakpoint.view);
},
- _createJavaScriptBreakpoint: function(url, lineNumber, condition, enabled, restored)
- {
- var breakpointId = this._createJavaScriptBreakpointId(url, lineNumber);
- if (breakpointId in this._breakpoints)
- return;
-
- var breakpoint = new WebInspector.JavaScriptBreakpoint(url, lineNumber, condition);
- this._setBreakpoint(breakpointId, breakpoint, enabled, restored);
- },
-
- _scriptBreakpointAdded: function(event)
- {
- var scriptBreakpoint = event.data;
-
- if (!scriptBreakpoint.url)
- return;
-
- if (!scriptBreakpoint.restored)
- this._createJavaScriptBreakpoint(scriptBreakpoint.url, scriptBreakpoint.originalLineNumber, scriptBreakpoint.condition, scriptBreakpoint.enabled, false);
- var breakpointId = this._createJavaScriptBreakpointId(scriptBreakpoint.url, scriptBreakpoint.originalLineNumber);
- this._scriptBreakpoints[scriptBreakpoint.id] = breakpointId;
- },
-
- _scriptBreakpointRemoved: function(event)
- {
- var scriptBreakpointId = event.data;
- var breakpointId = this._scriptBreakpoints[scriptBreakpointId];
- delete this._scriptBreakpoints[scriptBreakpointId];
- if (breakpointId in this._breakpoints)
- this._removeBreakpoint(breakpointId);
- },
-
createXHRBreakpoint: function(url)
{
this._createXHRBreakpoint(url, true, false);
@@ -232,7 +195,6 @@ WebInspector.BreakpointManager.prototype = {
{
this._breakpoints = {};
this._domBreakpointsRestored = false;
- this._scriptBreakpoints = {};
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.ProjectChanged);
var breakpoints = this._stickyBreakpoints[WebInspector.settings.projectId] || [];
@@ -240,11 +202,14 @@ WebInspector.BreakpointManager.prototype = {
var breakpoint = breakpoints[i];
if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.EventListener)
this._createEventListenerBreakpoint(breakpoint.condition.eventName, breakpoint.enabled, true);
- else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.JS)
- this._createJavaScriptBreakpoint(breakpoint.condition.url, breakpoint.condition.lineNumber, breakpoint.condition.condition, breakpoint.enabled, true);
else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.XHR)
this._createXHRBreakpoint(breakpoint.condition.url, breakpoint.enabled, true);
}
+
+ if (!this._breakpointsPushedToFrontend) {
+ InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
+ this._breakpointsPushedToFrontend = true;
+ }
},
restoreDOMBreakpoints: function()
@@ -324,15 +289,12 @@ WebInspector.BreakpointManager.prototype = {
if (typeof condition.eventName !== "string")
continue;
id += condition.eventName;
- } else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.JS) {
- if (typeof condition.url !== "string" || typeof condition.lineNumber !== "number" || typeof condition.condition !== "string")
- continue;
- id += condition.url + ":" + condition.lineNumber;
} else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.XHR) {
if (typeof condition.url !== "string")
continue;
id += condition.url;
- }
+ } else
+ continue;
if (id in breakpointsSet)
continue;
breakpointsSet[id] = true;
@@ -346,11 +308,6 @@ WebInspector.BreakpointManager.prototype = {
return "dom:" + nodeId + ":" + type;
},
- _createJavaScriptBreakpointId: function(url, lineNumber)
- {
- return "js:" + url + ":" + lineNumber;
- },
-
_createEventListenerBreakpointId: function(eventName)
{
return "eventListner:" + eventName;
@@ -389,29 +346,6 @@ WebInspector.DOMBreakpoint.prototype = {
}
}
-WebInspector.JavaScriptBreakpoint = function(url, lineNumber, condition)
-{
- this._url = url;
- this._lineNumber = lineNumber;
- this._condition = condition;
-}
-
-WebInspector.JavaScriptBreakpoint.prototype = {
- _enable: function()
- {
- },
-
- _disable: function()
- {
- },
-
- _serializeToJSON: function()
- {
- var type = WebInspector.BreakpointManager.BreakpointTypes.JS;
- return { type: type, condition: { url: this._url, lineNumber: this._lineNumber, condition: this._condition } };
- }
-}
-
WebInspector.EventListenerBreakpoint = function(eventName)
{
this._eventName = eventName;
diff --git a/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js b/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js
index b237ca2..0a47bf8 100644
--- a/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js
+++ b/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js
@@ -40,6 +40,8 @@ WebInspector.JavaScriptBreakpointsSidebarPane = function(title)
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointRemoved, this._breakpointRemoved, this);
+ WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointResolved, this._breakpointResolved, this);
+ WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.ProjectChanged, this._projectChanged, this);
@@ -50,7 +52,9 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
{
var breakpoint = event.data;
var breakpointId = breakpoint.id;
- var data = breakpoint.data;
+
+ if (breakpoint.url && !WebInspector.debuggerModel.scriptsForURL(breakpoint.url).length)
+ return;
var element = document.createElement("li");
@@ -64,7 +68,7 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
var label = document.createElement("span");
element.appendChild(label);
- element._data = data;
+ element._data = breakpoint;
var currentElement = this.listElement.firstChild;
while (currentElement) {
if (currentElement._data && this._compareBreakpoints(currentElement._data, element._data) > 0)
@@ -75,10 +79,9 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
element.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, breakpointId), true);
- this._setupBreakpointElement(data, element);
+ this._setupBreakpointElement(breakpoint, element);
var breakpointItem = {};
- breakpointItem.data = data;
breakpointItem.element = element;
breakpointItem.checkbox = checkbox;
this._items[breakpointId] = breakpointItem;
@@ -97,6 +100,23 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
}
},
+ _breakpointResolved: function(event)
+ {
+ var breakpoint = event.data;
+ this._breakpointRemoved({ data: breakpoint.id });
+ this._breakpointAdded({ data: breakpoint });
+ },
+
+ _parsedScriptSource: function(event)
+ {
+ var url = event.data.sourceURL;
+ var breakpoints = WebInspector.debuggerModel.breakpoints;
+ for (var id in breakpoints) {
+ if (!(id in this._items))
+ this._breakpointAdded({ data: breakpoints[id] });
+ }
+ },
+
_breakpointEnableChanged: function(enabled, event)
{
var breakpointId = event.data;
@@ -107,7 +127,8 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
_breakpointItemCheckboxClicked: function(breakpointId, event)
{
- this._setBreakpointEnabled(breakpointId, event.target.checked);
+ var breakpoint = WebInspector.debuggerModel.breakpointForId(breakpointId);
+ WebInspector.debuggerModel.updateBreakpoint(breakpointId, breakpoint.condition, event.target.checked);
// Breakpoint element may have it's own click handler.
event.stopPropagation();
@@ -186,23 +207,32 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
_setupBreakpointElement: function(data, element)
{
+ var sourceID;
+ var lineNumber = data.lineNumber;
+ if (data.locations.length) {
+ sourceID = data.locations[0].sourceID;
+ lineNumber = data.locations[0].lineNumber;
+ }
+
var displayName = data.url ? WebInspector.displayNameForURL(data.url) : WebInspector.UIString("(program)");
- var labelElement = document.createTextNode(displayName + ":" + data.lineNumber);
+ var labelElement = document.createTextNode(displayName + ":" + (lineNumber + 1));
element.appendChild(labelElement);
var sourceTextElement = document.createElement("div");
sourceTextElement.className = "source-text monospace";
element.appendChild(sourceTextElement);
- function didGetSourceLine(text)
- {
- sourceTextElement.textContent = text;
+ if (sourceID) {
+ function didGetSourceLine(text)
+ {
+ sourceTextElement.textContent = text;
+ }
+ var script = WebInspector.debuggerModel.scriptForSourceID(sourceID);
+ script.sourceLine(lineNumber, didGetSourceLine.bind(this));
}
- var script = WebInspector.debuggerModel.scriptForSourceID(data.sourceID);
- script.sourceLine(data.lineNumber, didGetSourceLine.bind(this));
element.addStyleClass("cursor-pointer");
- var clickHandler = WebInspector.panels.scripts.showSourceLine.bind(WebInspector.panels.scripts, data.url, data.lineNumber);
+ var clickHandler = WebInspector.panels.scripts.showSourceLine.bind(WebInspector.panels.scripts, data.url, lineNumber + 1);
element.addEventListener("click", clickHandler, false);
},
@@ -214,13 +244,6 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
return breakpoint.id;
},
- _setBreakpointEnabled: function(breakpointId, enabled)
- {
- var breakpoint = WebInspector.debuggerModel.breakpointForId(breakpointId);
- WebInspector.debuggerModel.removeBreakpoint(breakpointId);
- WebInspector.debuggerModel.setBreakpoint(breakpoint.sourceID, breakpoint.line, enabled, breakpoint.condition);
- },
-
_removeBreakpoint: function(breakpointId)
{
WebInspector.debuggerModel.removeBreakpoint(breakpointId);
diff --git a/Source/WebCore/inspector/front-end/CSSCompletions.js b/Source/WebCore/inspector/front-end/CSSCompletions.js
index f60c297..ba3aca2 100644
--- a/Source/WebCore/inspector/front-end/CSSCompletions.js
+++ b/Source/WebCore/inspector/front-end/CSSCompletions.js
@@ -30,10 +30,11 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.CSSCompletions = function(values)
+WebInspector.CSSCompletions = function(values, acceptEmptyPrefix)
{
this._values = values.slice();
this._values.sort();
+ this._acceptEmptyPrefix = acceptEmptyPrefix;
}
WebInspector.CSSCompletions.prototype = {
@@ -57,10 +58,10 @@ WebInspector.CSSCompletions.prototype = {
_firstIndexOfPrefix: function(prefix)
{
- if (!prefix)
- return -1;
if (!this._values.length)
return -1;
+ if (!prefix)
+ return this._acceptEmptyPrefix ? 0 : -1;
var maxIndex = this._values.length - 1;
var minIndex = 0;
diff --git a/Source/WebCore/inspector/front-end/CSSKeywordCompletions.js b/Source/WebCore/inspector/front-end/CSSKeywordCompletions.js
index ac62aff..de2072a 100755
--- a/Source/WebCore/inspector/front-end/CSSKeywordCompletions.js
+++ b/Source/WebCore/inspector/front-end/CSSKeywordCompletions.js
@@ -38,7 +38,7 @@ WebInspector.CSSKeywordCompletions = {
acceptedKeywords = acceptedKeywords.concat(WebInspector.CSSKeywordCompletions._colors);
if (propertyName in WebInspector.StylesSidebarPane.InheritedProperties)
acceptedKeywords.push("inherit");
- return new WebInspector.CSSCompletions(acceptedKeywords);
+ return new WebInspector.CSSCompletions(acceptedKeywords, true);
}
};
diff --git a/Source/WebCore/inspector/front-end/CSSStyleModel.js b/Source/WebCore/inspector/front-end/CSSStyleModel.js
index 4f20660..69bd7a9 100644
--- a/Source/WebCore/inspector/front-end/CSSStyleModel.js
+++ b/Source/WebCore/inspector/front-end/CSSStyleModel.js
@@ -83,7 +83,7 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(result);
}
- InspectorBackend.getStylesForNode2(nodeId, callback.bind(null, userCallback));
+ InspectorBackend.getStylesForNode(nodeId, callback.bind(null, userCallback));
},
getComputedStyleAsync: function(nodeId, userCallback)
@@ -96,7 +96,7 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
- InspectorBackend.getComputedStyleForNode2(nodeId, callback.bind(null, userCallback));
+ InspectorBackend.getComputedStyleForNode(nodeId, callback.bind(null, userCallback));
},
getInlineStyleAsync: function(nodeId, userCallback)
@@ -109,7 +109,7 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
- InspectorBackend.getInlineStyleForNode2(nodeId, callback.bind(null, userCallback));
+ InspectorBackend.getInlineStyleForNode(nodeId, callback.bind(null, userCallback));
},
setRuleSelector: function(ruleId, nodeId, newSelector, successCallback, failureCallback)
@@ -130,7 +130,7 @@ WebInspector.CSSStyleModel.prototype = {
InspectorBackend.querySelectorAll(nodeId, newSelector, checkAffectsCallback.bind(this, nodeId, successCallback, rulePayload));
}
- InspectorBackend.setRuleSelector2(ruleId, newSelector, callback.bind(this, nodeId, successCallback, failureCallback));
+ InspectorBackend.setRuleSelector(ruleId, newSelector, callback.bind(this, nodeId, successCallback, failureCallback));
},
addRule: function(nodeId, selector, successCallback, failureCallback)
@@ -152,7 +152,7 @@ WebInspector.CSSStyleModel.prototype = {
InspectorBackend.querySelectorAll(nodeId, selector, checkAffectsCallback.bind(this, nodeId, successCallback, rulePayload));
}
- InspectorBackend.addRule2(nodeId, selector, callback.bind(this, successCallback, failureCallback, selector));
+ InspectorBackend.addRule(nodeId, selector, callback.bind(this, successCallback, failureCallback, selector));
},
_styleSheetChanged: function(styleSheetId, majorChange)
@@ -162,11 +162,11 @@ WebInspector.CSSStyleModel.prototype = {
function callback(href, content)
{
- var resource = WebInspector.resourceTreeModel.resourceForURL(href);
+ var resource = WebInspector.resourceForURL(href);
if (resource && resource.type === WebInspector.Resource.Type.Stylesheet)
resource.setContent(content, this._onRevert.bind(this, styleSheetId));
}
- InspectorBackend.getStyleSheetText2(styleSheetId, callback.bind(this));
+ InspectorBackend.getStyleSheetText(styleSheetId, callback.bind(this));
},
_onRevert: function(styleSheetId, contentToRevertTo)
@@ -176,7 +176,7 @@ WebInspector.CSSStyleModel.prototype = {
this._styleSheetChanged(styleSheetId, true);
this.dispatchEventToListeners("stylesheet changed");
}
- InspectorBackend.setStyleSheetText2(styleSheetId, contentToRevertTo, callback.bind(this));
+ InspectorBackend.setStyleSheetText(styleSheetId, contentToRevertTo, callback.bind(this));
}
}
@@ -348,7 +348,7 @@ WebInspector.CSSStyleDeclaration.prototype = {
}
}
- InspectorBackend.setPropertyText2(this.id, index, name + ": " + value + ";", false, callback.bind(null, userCallback));
+ InspectorBackend.setPropertyText(this.id, index, name + ": " + value + ";", false, callback.bind(null, userCallback));
},
appendProperty: function(name, value, userCallback)
@@ -488,7 +488,7 @@ WebInspector.CSSProperty.prototype = {
throw "No ownerStyle for property";
// An index past all the properties adds a new property to the style.
- InspectorBackend.setPropertyText2(this.ownerStyle.id, this.index, propertyText, this.index < this.ownerStyle.pastLastSourcePropertyIndex(), callback.bind(this));
+ InspectorBackend.setPropertyText(this.ownerStyle.id, this.index, propertyText, this.index < this.ownerStyle.pastLastSourcePropertyIndex(), callback.bind(this));
},
setValue: function(newValue, userCallback)
@@ -517,7 +517,7 @@ WebInspector.CSSProperty.prototype = {
}
}
- InspectorBackend.toggleProperty2(this.ownerStyle.id, this.index, disabled, callback.bind(this));
+ InspectorBackend.toggleProperty(this.ownerStyle.id, this.index, disabled, callback.bind(this));
}
}
@@ -548,7 +548,7 @@ WebInspector.CSSStyleSheet.createForId = function(styleSheetId, userCallback)
else
userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
}
- InspectorBackend.getStyleSheet2(styleSheetId, callback.bind(this));
+ InspectorBackend.getStyleSheet(styleSheetId, callback.bind(this));
}
WebInspector.CSSStyleSheet.prototype = {
@@ -569,6 +569,6 @@ WebInspector.CSSStyleSheet.prototype = {
}
}
- InspectorBackend.setStyleSheetText2(this.id, newText, callback.bind(this));
+ InspectorBackend.setStyleSheetText(this.id, newText, callback.bind(this));
}
}
diff --git a/Source/WebCore/inspector/front-end/ChangesView.js b/Source/WebCore/inspector/front-end/ChangesView.js
deleted file mode 100644
index 5ab6942..0000000
--- a/Source/WebCore/inspector/front-end/ChangesView.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Joseph Pecoraro
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.ChangesView = function(drawer)
-{
- WebInspector.View.call(this);
- this.element.innerHTML = "<div style=\"bottom:25%;color:rgb(192,192,192);font-size:12px;height:65px;left:0px;margin:auto;position:absolute;right:0px;text-align:center;top:0px;\"><h1>Not Implemented Yet</h1></div>";
-
- this.drawer = drawer;
-
- this.clearButton = document.createElement("button");
- this.clearButton.id = "clear-changes-status-bar-item";
- this.clearButton.title = WebInspector.UIString("Clear changes log.");
- this.clearButton.className = "status-bar-item clear-status-bar-item";
- this.clearButton.addEventListener("click", this._clearButtonClicked.bind(this), false);
-
- this.toggleChangesButton = document.getElementById("changes-status-bar-item");
- this.toggleChangesButton.title = WebInspector.UIString("Show changes view.");
- this.toggleChangesButton.addEventListener("click", this._toggleChangesButtonClicked.bind(this), false);
- var anchoredStatusBar = document.getElementById("anchored-status-bar-items");
- anchoredStatusBar.appendChild(this.toggleChangesButton);
-}
-
-WebInspector.ChangesView.prototype = {
- _clearButtonClicked: function()
- {
- // Not Implemented Yet
- },
-
- _toggleChangesButtonClicked: function()
- {
- this.drawer.visibleView = this;
- },
-
- attach: function(mainElement, statusBarElement)
- {
- mainElement.appendChild(this.element);
- statusBarElement.appendChild(this.clearButton);
- },
-
- show: function()
- {
- this.toggleChangesButton.addStyleClass("toggled-on");
- this.toggleChangesButton.title = WebInspector.UIString("Hide changes view.");
- },
-
- hide: function()
- {
- this.toggleChangesButton.removeStyleClass("toggled-on");
- this.toggleChangesButton.title = WebInspector.UIString("Show changes view.");
- }
-}
-
-WebInspector.ChangesView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/Source/WebCore/inspector/front-end/ConsoleView.js b/Source/WebCore/inspector/front-end/ConsoleView.js
index bd08e60..35d1ebf 100644
--- a/Source/WebCore/inspector/front-end/ConsoleView.js
+++ b/Source/WebCore/inspector/front-end/ConsoleView.js
@@ -89,7 +89,7 @@ WebInspector.ConsoleView = function(drawer)
this.filter(this.allElement, false);
this._registerShortcuts();
- this.messagesElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true);
+ this.messagesElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false);
this._customFormatters = {
"object": this._formatobject,
@@ -150,11 +150,6 @@ WebInspector.ConsoleView.prototype = {
{
console.clearMessages();
},
-
- monitoringXHRStateChanged: function(enabled)
- {
- console._monitoringXHREnabled = enabled;
- }
}
InspectorBackend.registerDomainDispatcher("Console", dispatcher);
},
@@ -278,6 +273,7 @@ WebInspector.ConsoleView.prototype = {
if (msg instanceof WebInspector.ConsoleMessage && !(msg instanceof WebInspector.ConsoleCommandResult)) {
this._incrementErrorWarningCount(msg);
WebInspector.resourceTreeModel.addConsoleMessage(msg);
+ WebInspector.panels.scripts.addConsoleMessage(msg);
this.commandSincePreviousMessage = false;
this.previousMessage = msg;
} else if (msg instanceof WebInspector.ConsoleCommand) {
@@ -326,6 +322,7 @@ WebInspector.ConsoleView.prototype = {
clearMessages: function()
{
WebInspector.resourceTreeModel.clearConsoleMessages();
+ WebInspector.panels.scripts.clearConsoleMessages();
this.messages = [];
@@ -359,12 +356,12 @@ WebInspector.ConsoleView.prototype = {
var reportCompletions = this._reportCompletions.bind(this, bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix);
// Collect comma separated object properties for the completion.
- var includeInspectorCommandLineAPI = (!dotNotation && !bracketNotation);
+ var includeCommandLineAPI = (!dotNotation && !bracketNotation);
var injectedScriptAccess;
if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused)
- InspectorBackend.getCompletionsOnCallFrame(WebInspector.panels.scripts.selectedCallFrameId(), expressionString, includeInspectorCommandLineAPI, reportCompletions);
+ InspectorBackend.getCompletionsOnCallFrame(WebInspector.panels.scripts.selectedCallFrameId(), expressionString, includeCommandLineAPI, reportCompletions);
else
- InspectorBackend.getCompletions(expressionString, includeInspectorCommandLineAPI, reportCompletions);
+ InspectorBackend.getCompletions(expressionString, includeCommandLineAPI, reportCompletions);
},
_reportCompletions: function(bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix, result, isException) {
@@ -418,9 +415,12 @@ WebInspector.ConsoleView.prototype = {
return;
}
- var itemAction = InspectorBackend.setMonitoringXHREnabled.bind(InspectorBackend, !this._monitoringXHREnabled);
+ var itemAction = function () {
+ WebInspector.settings.monitoringXHREnabled = !WebInspector.settings.monitoringXHREnabled;
+ InspectorBackend.setMonitoringXHREnabled(WebInspector.settings.monitoringXHREnabled);
+ }.bind(this);
var contextMenu = new WebInspector.ContextMenu();
- contextMenu.appendCheckboxItem(WebInspector.UIString("XMLHttpRequest logging"), itemAction, this._monitoringXHREnabled);
+ contextMenu.appendCheckboxItem(WebInspector.UIString("XMLHttpRequest logging"), itemAction, WebInspector.settings.monitoringXHREnabled)
contextMenu.appendItem(WebInspector.UIString("Clear Console"), this.requestClearMessages.bind(this));
contextMenu.show(event);
},
@@ -510,17 +510,13 @@ WebInspector.ConsoleView.prototype = {
}
},
- evalInInspectedWindow: function(expression, objectGroup, callback)
+ evalInInspectedWindow: function(expression, objectGroup, includeCommandLineAPI, callback)
{
if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused) {
- WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, objectGroup, callback);
+ WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, objectGroup, includeCommandLineAPI, callback);
return;
}
- this.doEvalInWindow(expression, objectGroup, callback);
- },
- doEvalInWindow: function(expression, objectGroup, callback)
- {
if (!expression) {
// There is no expression, so the completion should happen against global properties.
expression = "this";
@@ -530,7 +526,7 @@ WebInspector.ConsoleView.prototype = {
{
callback(WebInspector.RemoteObject.fromPayload(result));
}
- InspectorBackend.evaluate(expression, objectGroup, evalCallback);
+ InspectorBackend.evaluate(expression, objectGroup, includeCommandLineAPI, evalCallback);
},
_enterKeyPressed: function(event)
@@ -561,7 +557,7 @@ WebInspector.ConsoleView.prototype = {
self.addMessage(new WebInspector.ConsoleCommandResult(result, commandMessage));
}
- this.evalInInspectedWindow(str, "console", printResult);
+ this.evalInInspectedWindow(str, "console", true, printResult);
},
_format: function(output, forceObjectFormat)
diff --git a/Source/WebCore/inspector/front-end/ContextMenu.js b/Source/WebCore/inspector/front-end/ContextMenu.js
index 47045a2..58810fb 100644
--- a/Source/WebCore/inspector/front-end/ContextMenu.js
+++ b/Source/WebCore/inspector/front-end/ContextMenu.js
@@ -44,6 +44,7 @@ WebInspector.ContextMenu.prototype = {
WebInspector._contextMenu = this;
InspectorFrontendHost.showContextMenu(event, this._items);
}
+ event.stopPropagation();
},
appendItem: function(label, handler, disabled)
diff --git a/Source/WebCore/inspector/front-end/DOMAgent.js b/Source/WebCore/inspector/front-end/DOMAgent.js
index e4fc7ad..3645bb9 100644
--- a/Source/WebCore/inspector/front-end/DOMAgent.js
+++ b/Source/WebCore/inspector/front-end/DOMAgent.js
@@ -502,19 +502,19 @@ WebInspector.ApplicationCacheDispatcher = function()
{
}
-WebInspector.ApplicationCacheDispatcher.prototype = {
- getApplicationCachesAsync: function(callback)
+WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync = function(callback)
+{
+ function mycallback(applicationCaches)
{
- function mycallback(applicationCaches)
- {
- // FIXME: Currently, this list only returns a single application cache.
- if (applicationCaches)
- callback(applicationCaches);
- }
-
- InspectorBackend.getApplicationCaches(mycallback);
- },
-
+ // FIXME: Currently, this list only returns a single application cache.
+ if (applicationCaches)
+ callback(applicationCaches);
+ }
+
+ InspectorBackend.getApplicationCaches(mycallback);
+}
+
+WebInspector.ApplicationCacheDispatcher.prototype = {
updateApplicationCacheStatus: function(status)
{
WebInspector.panels.resources.updateApplicationCacheStatus(status);
diff --git a/Source/WebCore/inspector/front-end/DataGrid.js b/Source/WebCore/inspector/front-end/DataGrid.js
index 5831d1e..45f0b55 100644
--- a/Source/WebCore/inspector/front-end/DataGrid.js
+++ b/Source/WebCore/inspector/front-end/DataGrid.js
@@ -493,6 +493,11 @@ WebInspector.DataGrid.prototype = {
this._columnWidthsInitialized = false;
},
+ get scrollContainer()
+ {
+ return this._scrollContainer;
+ },
+
isScrolledToLastRow: function()
{
return this._scrollContainer.isScrolledToBottom();
diff --git a/Source/WebCore/inspector/front-end/DebuggerModel.js b/Source/WebCore/inspector/front-end/DebuggerModel.js
index 717486c..1bf1e47 100644
--- a/Source/WebCore/inspector/front-end/DebuggerModel.js
+++ b/Source/WebCore/inspector/front-end/DebuggerModel.js
@@ -33,7 +33,6 @@ WebInspector.DebuggerModel = function()
this._paused = false;
this._callFrames = [];
this._breakpoints = {};
- this._sourceIDAndLineToBreakpointId = {};
this._scripts = {};
InspectorBackend.registerDomainDispatcher("Debugger", new WebInspector.DebuggerDispatcher(this));
@@ -46,64 +45,116 @@ WebInspector.DebuggerModel.Events = {
FailedToParseScriptSource: "failed-to-parse-script-source",
ScriptSourceChanged: "script-source-changed",
BreakpointAdded: "breakpoint-added",
- BreakpointRemoved: "breakpoint-removed"
+ BreakpointRemoved: "breakpoint-removed",
+ BreakpointResolved: "breakpoint-resolved"
}
WebInspector.DebuggerModel.prototype = {
+ enableDebugger: function()
+ {
+ InspectorBackend.enableDebugger();
+ if (this._breakpointsPushedToBackend)
+ return;
+ var breakpoints = WebInspector.settings.breakpoints;
+ for (var i = 0; i < breakpoints.length; ++i) {
+ var breakpoint = breakpoints[i];
+ if (typeof breakpoint.url !== "string" || typeof breakpoint.lineNumber !== "number" || typeof breakpoint.columnNumber !== "number" ||
+ typeof breakpoint.condition !== "string" || typeof breakpoint.enabled !== "boolean")
+ continue;
+ this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
+ }
+ this._breakpointsPushedToBackend = true;
+ },
+
+ disableDebugger: function()
+ {
+ InspectorBackend.disableDebugger();
+ },
+
continueToLine: function(sourceID, lineNumber)
{
- function didSetBreakpoint(breakpointId, actualLineNumber)
+ InspectorBackend.continueToLocation(sourceID, lineNumber, 0);
+ },
+
+ setBreakpoint: function(url, lineNumber, columnNumber, condition, enabled)
+ {
+ function didSetBreakpoint(breakpointsPushedToBackend, breakpointId, locations)
{
if (!breakpointId)
return;
- if (this.findBreakpoint(sourceID, actualLineNumber)) {
- InspectorBackend.removeBreakpoint(breakpointId);
- return;
- }
- if ("_continueToLineBreakpointId" in this)
- InspectorBackend.removeBreakpoint(this._continueToLineBreakpointId);
- this._continueToLineBreakpointId = breakpointId;
+ var breakpoint = new WebInspector.Breakpoint(breakpointId, url, "", lineNumber, columnNumber, condition, enabled);
+ breakpoint.locations = locations;
+ this._breakpoints[breakpointId] = breakpoint;
+ if (breakpointsPushedToBackend)
+ this._saveBreakpoints();
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
}
- InspectorBackend.setBreakpoint(sourceID, lineNumber, "", true, didSetBreakpoint.bind(this));
- if (this._paused)
- InspectorBackend.resume();
+ InspectorBackend.setJavaScriptBreakpoint(url, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this, this._breakpointsPushedToBackend));
},
- setBreakpoint: function(sourceID, lineNumber, enabled, condition)
+ setBreakpointBySourceId: function(sourceID, lineNumber, columnNumber, condition, enabled)
{
- function didSetBreakpoint(breakpointId, actualLineNumber)
+ function didSetBreakpoint(breakpointId, actualLineNumber, actualColumnNumber)
{
- if (breakpointId)
- this._breakpointSetOnBackend(breakpointId, sourceID, actualLineNumber, condition, enabled, lineNumber, false);
+ if (!breakpointId)
+ return;
+ var breakpoint = new WebInspector.Breakpoint(breakpointId, "", sourceID, lineNumber, columnNumber, condition, enabled);
+ breakpoint.addLocation(sourceID, actualLineNumber, actualColumnNumber);
+ this._breakpoints[breakpointId] = breakpoint;
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
}
- InspectorBackend.setBreakpoint(sourceID, lineNumber, condition, enabled, didSetBreakpoint.bind(this));
+ InspectorBackend.setJavaScriptBreakpointBySourceId(sourceID, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this));
},
removeBreakpoint: function(breakpointId)
{
- InspectorBackend.removeBreakpoint(breakpointId);
+ InspectorBackend.removeJavaScriptBreakpoint(breakpointId);
var breakpoint = this._breakpoints[breakpointId];
delete this._breakpoints[breakpointId];
- delete this._sourceIDAndLineToBreakpointId[this._encodeSourceIDAndLine(breakpoint.sourceID, breakpoint.line)];
+ this._saveBreakpoints();
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointRemoved, breakpointId);
- breakpoint.dispatchEventToListeners("removed");
},
- _breakpointSetOnBackend: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, restored)
+ updateBreakpoint: function(breakpointId, condition, enabled)
{
- var sourceIDAndLine = this._encodeSourceIDAndLine(sourceID, lineNumber);
- if (sourceIDAndLine in this._sourceIDAndLineToBreakpointId) {
- InspectorBackend.removeBreakpoint(breakpointId);
+ var breakpoint = this._breakpoints[breakpointId];
+ this.removeBreakpoint(breakpointId);
+ if (breakpoint.url)
+ this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
+ else
+ this.setBreakpointBySourceId(breakpoint.sourceID, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
+ },
+
+ _breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
+ {
+ var breakpoint = this._breakpoints[breakpointId];
+ if (!breakpoint)
return;
+ breakpoint.addLocation(sourceID, lineNumber, columnNumber);
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, breakpoint);
+ },
+
+ _saveBreakpoints: function()
+ {
+ var serializedBreakpoints = [];
+ for (var id in this._breakpoints) {
+ var breakpoint = this._breakpoints[id];
+ if (!breakpoint.url)
+ continue;
+ var serializedBreakpoint = {};
+ serializedBreakpoint.url = breakpoint.url;
+ serializedBreakpoint.lineNumber = breakpoint.lineNumber;
+ serializedBreakpoint.columnNumber = breakpoint.columnNumber;
+ serializedBreakpoint.condition = breakpoint.condition;
+ serializedBreakpoint.enabled = breakpoint.enabled;
+ serializedBreakpoints.push(serializedBreakpoint);
}
+ WebInspector.settings.breakpoints = serializedBreakpoints;
+ },
- var url = this._scripts[sourceID].sourceURL;
- var breakpoint = new WebInspector.Breakpoint(this, breakpointId, sourceID, url, lineNumber, enabled, condition);
- breakpoint.restored = restored;
- breakpoint.originalLineNumber = originalLineNumber;
- this._breakpoints[breakpointId] = breakpoint;
- this._sourceIDAndLineToBreakpointId[sourceIDAndLine] = breakpointId;
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
+ get breakpoints()
+ {
+ return this._breakpoints;
},
breakpointForId: function(breakpointId)
@@ -124,23 +175,26 @@ WebInspector.DebuggerModel.prototype = {
findBreakpoint: function(sourceID, lineNumber)
{
- var sourceIDAndLine = this._encodeSourceIDAndLine(sourceID, lineNumber);
- var breakpointId = this._sourceIDAndLineToBreakpointId[sourceIDAndLine];
- return this._breakpoints[breakpointId];
- },
-
- _encodeSourceIDAndLine: function(sourceID, lineNumber)
- {
- return sourceID + ":" + lineNumber;
+ for (var id in this._breakpoints) {
+ var locations = this._breakpoints[id].locations;
+ for (var i = 0; i < locations.length; ++i) {
+ if (locations[i].sourceID == sourceID && locations[i].lineNumber + 1 === lineNumber)
+ return this._breakpoints[id];
+ }
+ }
},
reset: function()
{
this._paused = false;
this._callFrames = [];
- this._breakpoints = {};
- delete this._oneTimeBreakpoint;
- this._sourceIDAndLineToBreakpointId = {};
+ for (var id in this._breakpoints) {
+ var breakpoint = this._breakpoints[id];
+ if (!breakpoint.url)
+ this.removeBreakpoint(id);
+ else
+ breakpoint.locations = [];
+ }
this._scripts = {};
},
@@ -189,10 +243,15 @@ WebInspector.DebuggerModel.prototype = {
var diff = Array.diff(oldSource.split("\n"), script.source.split("\n"));
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
- if (breakpoint.sourceID !== sourceID)
- continue;
- breakpoint.remove();
- var lineNumber = breakpoint.line - 1;
+ if (breakpoint.url) {
+ if (breakpoint.url !== script.sourceURL)
+ continue;
+ } else {
+ if (breakpoint.sourceID !== sourceID)
+ continue;
+ }
+ this.removeBreakpoint(breakpoint.id);
+ var lineNumber = breakpoint.lineNumber;
var newLineNumber = diff.left[lineNumber].row;
if (newLineNumber === undefined) {
for (var i = lineNumber - 1; i >= 0; --i) {
@@ -207,8 +266,12 @@ WebInspector.DebuggerModel.prototype = {
break;
}
}
- if (newLineNumber !== undefined)
- this.setBreakpoint(sourceID, newLineNumber + 1, breakpoint.enabled, breakpoint.condition);
+ if (newLineNumber === undefined)
+ continue;
+ if (breakpoint.url)
+ this.setBreakpoint(breakpoint.url, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
+ else
+ this.setBreakpointBySourceId(sourceID, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
}
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ScriptSourceChanged, { sourceID: sourceID, oldSource: oldSource });
@@ -223,10 +286,6 @@ WebInspector.DebuggerModel.prototype = {
{
this._paused = true;
this._callFrames = details.callFrames;
- if ("_continueToLineBreakpointId" in this) {
- InspectorBackend.removeBreakpoint(this._continueToLineBreakpointId);
- delete this._continueToLineBreakpointId;
- }
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerPaused, details);
},
@@ -241,7 +300,7 @@ WebInspector.DebuggerModel.prototype = {
{
var script = new WebInspector.Script(sourceID, sourceURL, "", lineOffset, columnOffset, length, undefined, undefined, scriptWorldType);
this._scripts[sourceID] = script;
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, sourceID);
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, script);
},
_failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage)
@@ -295,9 +354,9 @@ WebInspector.DebuggerDispatcher.prototype = {
this._debuggerModel._failedToParseScriptSource(sourceURL, source, startingLine, errorLine, errorMessage);
},
- breakpointResolved: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber)
+ breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
{
- this._debuggerModel._breakpointSetOnBackend(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, true);
+ this._debuggerModel._breakpointResolved(breakpointId, sourceID, lineNumber, columnNumber);
},
didCreateWorker: function()
diff --git a/Source/WebCore/inspector/front-end/DetailedHeapshotView.js b/Source/WebCore/inspector/front-end/DetailedHeapshotView.js
new file mode 100644
index 0000000..5291bf2
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/DetailedHeapshotView.js
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.DetailedHeapshotView = function(parent, profile)
+{
+ WebInspector.View.call(this);
+
+ this.element.addStyleClass("heap-snapshot-view");
+
+ this.parent = parent;
+ this.profile = profile;
+}
+
+WebInspector.DetailedHeapshotView.prototype = {
+ get profile()
+ {
+ return this._profile;
+ },
+
+ set profile(profile)
+ {
+ this._profile = profile;
+ }
+};
+
+WebInspector.DetailedHeapshotView.prototype.__proto__ = WebInspector.View.prototype;
+
+WebInspector.DetailedHeapshotProfileType = function()
+{
+ WebInspector.ProfileType.call(this, WebInspector.HeapSnapshotProfileType.TypeId, WebInspector.UIString("HEAP SNAPSHOTS"));
+}
+
+WebInspector.DetailedHeapshotProfileType.prototype = {
+ get buttonTooltip()
+ {
+ return WebInspector.UIString("Take heap snapshot.");
+ },
+
+ get buttonStyle()
+ {
+ return "heap-snapshot-status-bar-item status-bar-item";
+ },
+
+ buttonClicked: function()
+ {
+ WebInspector.panels.profiles.takeHeapSnapshot(true);
+ },
+
+ get welcomeMessage()
+ {
+ return WebInspector.UIString("Get a heap snapshot by pressing the %s button on the status bar.");
+ },
+
+ createSidebarTreeElementForProfile: function(profile)
+ {
+ return new WebInspector.ProfileSidebarTreeElement(profile, WebInspector.UIString("Snapshot %d"), "heap-snapshot-sidebar-tree-item");
+ },
+
+ createView: function(profile)
+ {
+ return new WebInspector.DetailedHeapshotView(WebInspector.panels.profiles, profile);
+ }
+}
+
+WebInspector.DetailedHeapshotProfileType.prototype.__proto__ = WebInspector.ProfileType.prototype;
diff --git a/Source/WebCore/inspector/front-end/Drawer.js b/Source/WebCore/inspector/front-end/Drawer.js
index 3f827fb..4861c90 100644
--- a/Source/WebCore/inspector/front-end/Drawer.js
+++ b/Source/WebCore/inspector/front-end/Drawer.js
@@ -35,11 +35,11 @@ WebInspector.Drawer = function()
this.state = WebInspector.Drawer.State.Hidden;
this.fullPanel = false;
- this.mainElement = document.getElementById("main");
- this.toolbarElement = document.getElementById("toolbar");
- this.mainStatusBar = document.getElementById("main-status-bar");
- this.mainStatusBar.addEventListener("mousedown", this._startStatusBarDragging.bind(this), true);
- this.viewStatusBar = document.getElementById("other-drawer-status-bar-items");
+ this._mainElement = document.getElementById("main");
+ this._toolbarElement = document.getElementById("toolbar");
+ this._mainStatusBar = document.getElementById("main-status-bar");
+ this._mainStatusBar.addEventListener("mousedown", this._startStatusBarDragging.bind(this), true);
+ this._viewStatusBar = document.getElementById("other-drawer-status-bar-items");
this._counters = document.getElementById("counters");
this._drawerStatusBar = document.getElementById("drawer-status-bar");
}
@@ -67,8 +67,8 @@ WebInspector.Drawer.prototype = {
if (x && !firstTime) {
this._safelyRemoveChildren();
- this.viewStatusBar.removeChildren(); // optimize this? call old.detach()
- x.attach(this.element, this.viewStatusBar);
+ this._viewStatusBar.removeChildren(); // optimize this? call old.detach()
+ x.attach(this.element, this._viewStatusBar);
x.show();
this.visible = true;
}
@@ -77,7 +77,7 @@ WebInspector.Drawer.prototype = {
get savedHeight()
{
var height = this._savedHeight || this.element.offsetHeight;
- return Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this.mainElement.totalOffsetTop - Preferences.minConsoleHeight);
+ return Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
},
showView: function(view)
@@ -101,16 +101,15 @@ WebInspector.Drawer.prototype = {
document.body.addStyleClass("drawer-visible");
var anchoredItems = document.getElementById("anchored-status-bar-items");
- var height = (this.fullPanel ? window.innerHeight - this.toolbarElement.offsetHeight : this.savedHeight);
+ var height = (this.fullPanel ? window.innerHeight - this._toolbarElement.offsetHeight : this.savedHeight);
var animations = [
{element: this.element, end: {height: height}},
- {element: document.getElementById("main"), end: {bottom: height}},
- {element: document.getElementById("main-status-bar"), start: {"padding-left": anchoredItems.offsetWidth - 1}, end: {"padding-left": 0}},
- {element: document.getElementById("other-drawer-status-bar-items"), start: {opacity: 0}, end: {opacity: 1}}
+ {element: this._mainElement, end: {bottom: height}},
+ {element: this._mainStatusBar, start: {"padding-left": anchoredItems.offsetWidth - 1}, end: {"padding-left": 0}},
+ {element: this._viewStatusBar, start: {opacity: 0}, end: {opacity: 1}}
];
- var drawerStatusBar = document.getElementById("drawer-status-bar");
- drawerStatusBar.insertBefore(anchoredItems, drawerStatusBar.firstChild);
+ this._drawerStatusBar.insertBefore(anchoredItems, this._drawerStatusBar.firstChild);
if (this._currentPanelCounters) {
var oldRight = this._drawerStatusBar.clientWidth - (this._counters.offsetLeft + this._currentPanelCounters.offsetWidth);
@@ -118,7 +117,7 @@ WebInspector.Drawer.prototype = {
var rightPadding = (oldRight - newRight);
animations.push({element: this._currentPanelCounters, start: {"padding-right": rightPadding}, end: {"padding-right": 0}});
this._currentPanelCounters.parentNode.removeChild(this._currentPanelCounters);
- this.mainStatusBar.appendChild(this._currentPanelCounters);
+ this._mainStatusBar.appendChild(this._currentPanelCounters);
}
function animationFinished()
@@ -128,13 +127,13 @@ WebInspector.Drawer.prototype = {
if (this.visibleView.afterShow)
this.visibleView.afterShow();
delete this._animating;
- delete this._currentAnimationInterval;
+ delete this._currentAnimation;
this.state = (this.fullPanel ? WebInspector.Drawer.State.Full : WebInspector.Drawer.State.Variable);
if (this._currentPanelCounters)
this._currentPanelCounters.removeAttribute("style");
}
- this._currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
+ this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
hide: function()
@@ -159,21 +158,21 @@ WebInspector.Drawer.prototype = {
// Temporarily set properties and classes to mimic the post-animation values so panels
// like Elements in their updateStatusBarItems call will size things to fit the final location.
- this.mainStatusBar.style.setProperty("padding-left", (anchoredItems.offsetWidth - 1) + "px");
+ this._mainStatusBar.style.setProperty("padding-left", (anchoredItems.offsetWidth - 1) + "px");
document.body.removeStyleClass("drawer-visible");
if ("updateStatusBarItems" in WebInspector.currentPanel)
WebInspector.currentPanel.updateStatusBarItems();
document.body.addStyleClass("drawer-visible");
var animations = [
- {element: document.getElementById("main"), end: {bottom: 0}},
- {element: document.getElementById("main-status-bar"), start: {"padding-left": 0}, end: {"padding-left": anchoredItems.offsetWidth - 1}},
- {element: document.getElementById("other-drawer-status-bar-items"), start: {opacity: 1}, end: {opacity: 0}}
+ {element: this._mainElement, end: {bottom: 0}},
+ {element: this._mainStatusBar, start: {"padding-left": 0}, end: {"padding-left": anchoredItems.offsetWidth - 1}},
+ {element: this._viewStatusBar, start: {opacity: 1}, end: {opacity: 0}}
];
if (this._currentPanelCounters) {
var newRight = this._drawerStatusBar.clientWidth - this._counters.offsetLeft;
- var oldRight = this.mainStatusBar.clientWidth - (this._currentPanelCounters.offsetLeft + this._currentPanelCounters.offsetWidth);
+ var oldRight = this._mainStatusBar.clientWidth - (this._currentPanelCounters.offsetLeft + this._currentPanelCounters.offsetWidth);
var rightPadding = (newRight - oldRight);
animations.push({element: this._currentPanelCounters, start: {"padding-right": 0}, end: {"padding-right": rightPadding}});
}
@@ -181,9 +180,8 @@ WebInspector.Drawer.prototype = {
function animationFinished()
{
WebInspector.currentPanel.resize();
- var mainStatusBar = document.getElementById("main-status-bar");
- mainStatusBar.insertBefore(anchoredItems, mainStatusBar.firstChild);
- mainStatusBar.style.removeProperty("padding-left");
+ this._mainStatusBar.insertBefore(anchoredItems, this._mainStatusBar.firstChild);
+ this._mainStatusBar.style.removeProperty("padding-left");
if (this._currentPanelCounters) {
this._currentPanelCounters.setAttribute("style", null);
@@ -193,11 +191,11 @@ WebInspector.Drawer.prototype = {
document.body.removeStyleClass("drawer-visible");
delete this._animating;
- delete this._currentAnimationInterval;
+ delete this._currentAnimation;
this.state = WebInspector.Drawer.State.Hidden;
}
- this._currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
+ this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
resize: function()
@@ -206,14 +204,13 @@ WebInspector.Drawer.prototype = {
return;
var height;
- var mainElement = document.getElementById("main");
if (this.state === WebInspector.Drawer.State.Variable) {
height = parseInt(this.element.style.height);
- height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - mainElement.totalOffsetTop - Preferences.minConsoleHeight);
+ height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
} else
- height = window.innerHeight - this.toolbarElement.offsetHeight;
+ height = window.innerHeight - this._toolbarElement.offsetHeight;
- mainElement.style.bottom = height + "px";
+ this._mainElement.style.bottom = height + "px";
this.element.style.height = height + "px";
},
@@ -224,7 +221,7 @@ WebInspector.Drawer.prototype = {
if (this.visible) {
this._savedHeight = this.element.offsetHeight;
- var height = window.innerHeight - this.toolbarElement.offsetHeight;
+ var height = window.innerHeight - this._toolbarElement.offsetHeight;
this._animateDrawerHeight(height, WebInspector.Drawer.State.Full);
}
},
@@ -249,6 +246,12 @@ WebInspector.Drawer.prototype = {
this.fullPanel = false;
},
+ immediatelyFinishAnimation: function()
+ {
+ if (this._currentAnimation)
+ this._currentAnimation.forceComplete();
+ },
+
set currentPanelCounters(x)
{
if (!x) {
@@ -260,7 +263,7 @@ WebInspector.Drawer.prototype = {
this._currentPanelCounters = x;
if (this.visible)
- this.mainStatusBar.appendChild(x);
+ this._mainStatusBar.appendChild(x);
else
this._counters.insertBefore(x, this._counters.firstChild);
},
@@ -268,9 +271,10 @@ WebInspector.Drawer.prototype = {
_cancelAnimationIfNeeded: function()
{
if (this._animating) {
- clearInterval(this._currentAnimationInterval);
+ if (this._currentAnimation)
+ this._currentAnimation.cancel();
delete this._animating;
- delete this._currentAnimationInterval;
+ delete this._currentAnimation;
}
},
@@ -279,17 +283,17 @@ WebInspector.Drawer.prototype = {
this._animating = true;
var animations = [
{element: this.element, end: {height: height}},
- {element: document.getElementById("main"), end: {bottom: height}}
+ {element: this._mainElement, end: {bottom: height}}
];
function animationFinished()
{
delete this._animating;
- delete this._currentAnimationInterval;
+ delete this._currentAnimation;
this.state = finalState;
}
- this._currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
+ this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
_animationDuration: function()
@@ -316,10 +320,10 @@ WebInspector.Drawer.prototype = {
_startStatusBarDragging: function(event)
{
- if (!this.visible || event.target !== this.mainStatusBar)
+ if (!this.visible || event.target !== this._mainStatusBar)
return;
- WebInspector.elementDragStart(this.mainStatusBar, this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, "row-resize");
+ WebInspector.elementDragStart(this._mainStatusBar, this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, "row-resize");
this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop;
@@ -328,11 +332,10 @@ WebInspector.Drawer.prototype = {
_statusBarDragging: function(event)
{
- var mainElement = document.getElementById("main");
var height = window.innerHeight - event.pageY + this._statusBarDragOffset;
- height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - mainElement.totalOffsetTop - Preferences.minConsoleHeight);
+ height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
- mainElement.style.bottom = height + "px";
+ this._mainElement.style.bottom = height + "px";
this.element.style.height = height + "px";
event.preventDefault();
diff --git a/Source/WebCore/inspector/front-end/ElementsPanel.js b/Source/WebCore/inspector/front-end/ElementsPanel.js
index 9299479..e6af93c 100644
--- a/Source/WebCore/inspector/front-end/ElementsPanel.js
+++ b/Source/WebCore/inspector/front-end/ElementsPanel.js
@@ -255,13 +255,20 @@ WebInspector.ElementsPanel.prototype = {
return false;
// Add resource-related actions.
- // Keep these consistent with those added in WebInspector.StylesSidebarPane.prototype._populateHrefContextMenu().
- contextMenu.appendItem(WebInspector.UIString("Open Link in New Window"), WebInspector.openResource.bind(null, resourceURL, false));
+ contextMenu.appendItem(WebInspector.openLinkExternallyLabel(), WebInspector.openResource.bind(null, resourceURL, false));
if (WebInspector.resourceForURL(resourceURL))
contextMenu.appendItem(WebInspector.UIString("Open Link in Resources Panel"), WebInspector.openResource.bind(null, resourceURL, true));
return true;
},
+ switchToAndFocus: function(node)
+ {
+ // Reset search restore.
+ WebInspector.cancelSearch();
+ WebInspector.currentPanel = this;
+ this.focusedDOMNode = node;
+ },
+
_updateMatchesCount: function()
{
WebInspector.updateSearchMatchesCount(this._searchResults.length, this);
diff --git a/Source/WebCore/inspector/front-end/ElementsTreeOutline.js b/Source/WebCore/inspector/front-end/ElementsTreeOutline.js
index 722c028..56c3e75 100644
--- a/Source/WebCore/inspector/front-end/ElementsTreeOutline.js
+++ b/Source/WebCore/inspector/front-end/ElementsTreeOutline.js
@@ -268,8 +268,7 @@ WebInspector.ElementsTreeOutline.prototype = {
if (this.showInElementsPanelEnabled) {
function focusElement()
{
- WebInspector.currentPanel = WebInspector.panels.elements;
- WebInspector.panels.elements.focusedDOMNode = listItem.treeElement.representedObject;
+ WebInspector.panels.elements.switchToAndFocus(listItem.treeElement.representedObject);
}
contextMenu.appendItem(WebInspector.UIString("Reveal in Elements Panel"), focusElement.bind(this));
} else {
diff --git a/Source/WebCore/inspector/front-end/ExtensionAPI.js b/Source/WebCore/inspector/front-end/ExtensionAPI.js
index b10452d..6a11d62 100644
--- a/Source/WebCore/inspector/front-end/ExtensionAPI.js
+++ b/Source/WebCore/inspector/front-end/ExtensionAPI.js
@@ -387,9 +387,9 @@ function InspectedWindow()
}
InspectedWindow.prototype = {
- reload: function()
+ reload: function(userAgent)
{
- return extensionServer.sendRequest({ command: "reload" });
+ return extensionServer.sendRequest({ command: "reload", userAgent: userAgent });
},
eval: function(expression, callback)
diff --git a/Source/WebCore/inspector/front-end/ExtensionAPISchema.json b/Source/WebCore/inspector/front-end/ExtensionAPISchema.json
new file mode 100755
index 0000000..28084ba
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/ExtensionAPISchema.json
@@ -0,0 +1,513 @@
+[
+ {
+ "namespace": "experimental.webInspector.inspectedWindow",
+ "description": "Provides access to the window being inspected.",
+ "functions": [
+ {
+ "name": "eval",
+ "type": "function",
+ "description": "Evaluates a JavaScript expression in the context of inspected page (NOTE: the expression must evaluate to a JSON-compliant object, otherwise the exception is thrown)",
+ "parameters": [
+ {
+ "name": "expression",
+ "type": "string",
+ "description": "An expression to evaluate."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function called when evaluation completes.",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "description": "The result of evaluation"
+ },
+ {
+ "name": "isException",
+ "type": "boolean",
+ "description": "Set if an exception was caught while evaluating the expression"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onDOMContentLoaded",
+ "type": "function",
+ "description": "Fired after DOMContentLoaded event on inspected page is fired."
+ },
+ {
+ "name": "onLoaded",
+ "type": "function",
+ "description": "Fired after load event on inspected page is fired."
+ },
+ {
+ "name": "onNavigated",
+ "type": "function",
+ "description": "Fired when navigation occurs in the window being inspected."
+ }
+ ]
+ },
+ {
+ "namespace": "experimental.webInspector.panels",
+ "types": [
+ {
+ "id": "PanelWithSidebars",
+ "type": "object",
+ "isInstanceOf": "Panel",
+ "description": "A panel within Web Inspector UI that has sidebars.",
+ "functions": [
+ {
+ "name": "createSidebarPane",
+ "type": "function",
+ "description": "Creates a pane within panel's sidebar.",
+ "parameters": [
+ {
+ "name": "title",
+ "type": "string",
+ "description": "A text that is displayed in sidebar caption."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "description": "An URL of the page that represents the sidebar."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A callback invoked when sidebar is created",
+ "parameters": [
+ {
+ "name": "result",
+ "description": "An ExtensionSidebarPane object for created sidebar pane",
+ "$ref": "ExtensionSidebarPane"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "createWatchExpressionSidebarPane",
+ "type": "function",
+ "description": "Creates a pane with an object property tree (similar to a watch sidebar pane).",
+ "parameters": [
+ {
+ "name": "title",
+ "type": "string",
+ "description": "A text that is displayed in sidebar caption."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A callback invoked when sidebar is created",
+ "parameters": [
+ {
+ "name": "result",
+ "description": "A WatchExpressionSidebarPane object for created sidebar pane",
+ "$ref": "WatchExpressionSidebarPane"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ElementsPanel",
+ "type": "object",
+ "isInstanceOf": "PanelWithSidebars",
+ "description": "Represents Elements panel",
+ "events": [
+ {
+ "name": "onSelectionChanged",
+ "description": "Fired when an objects is selected in the panel."
+ }
+ ]
+ },
+ {
+ "id": "ExtensionPanel",
+ "type": "object",
+ "isInstanceOf": "Panel",
+ "description": "Represents a panel created by extension",
+ "events": [
+ {
+ "name": "onSearch",
+ "description": "Fired upon a search action (start of a new search, search result navigation or search being canceled).",
+ "parameters": [
+ {
+ "name": "action",
+ "type": "string",
+ "description": "Type of search action being performed."
+ },
+ {
+ "name": "queryString",
+ "type": "string",
+ "optional": true,
+ "description": "Query string (only for 'performSearch')"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ExtensionSidebarPane",
+ "type": "object",
+ "description": "A sidebar created by the extension.",
+ "functions": [
+ {
+ "name": "setHeight",
+ "type": "function",
+ "description": "Sets the height of the sidebar.",
+ "parameters": [
+ {
+ "name": "height",
+ "type": "string",
+ "description": "A CSS-like size specification, e.g. '10px' or '12pt'"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "WatchExpressionSidebarPane",
+ "type": "object",
+ "description": "A sidebar created by the extension.",
+ "functions": [
+ {
+ "name": "setHeight",
+ "type": "function",
+ "description": "Sets the height of the sidebar.",
+ "parameters": [
+ {
+ "name": "height",
+ "type": "string",
+ "description": "A CSS-like size specification, e.g. '10px' or '12pt'"
+ }
+ ]
+ },
+ {
+ "name": "setExpression",
+ "type": "function",
+ "description": "Sets an expression that is evaluated within the inspected page. The result is displayed in the sidebar pane.",
+ "parameters": [
+ {
+ "name": "expression",
+ "type": "string",
+ "description": "An expression to be evaluated in context of the inspected page. JavaScript objects and DOM nodes are displayed in an expandable tree similar to the console/watch."
+ },
+ {
+ "name": "rootTitle",
+ "type": "string",
+ "optional": true,
+ "description": "An optional title for the root of the expression tree."
+ }
+ ]
+ },
+ {
+ "name": "setObject",
+ "type": "function",
+ "description": "Sets a JSON-compliant object to be displayed in the sidebar pane.",
+ "parameters": [
+ {
+ "name": "jsonObject",
+ "type": "string",
+ "description": "An object to be displayed in context of the inspected page. Evaluated in the context of the caller (API client)."
+ },
+ {
+ "name": "rootTitle",
+ "type": "string",
+ "optional": true,
+ "description": "An optional title for the root of the expression tree."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "scripts": {
+ "$ref": "ScriptsPanel",
+ "description": "Scripts panel"
+ }
+ },
+ "functions": [
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates an extension panel.",
+ "parameters": [
+ {
+ "name": "title",
+ "type": "string",
+ "description": "Title that is displayed under the extension icon in the toolbar."
+ },
+ {
+ "name": "iconURL",
+ "type": "string",
+ "description": "An URL of the toolbar icon."
+ },
+ {
+ "name": "pageURL",
+ "type": "string",
+ "description": "An URL of the page that represents this panel."
+ }
+ ],
+ "returns" : {
+ "$ref": "ExtensionPanel",
+ "description": "A panel that was created."
+ }
+ }
+ ]
+ },
+ {
+ "namespace": "experimental.webInspector.resources",
+ "types": [
+ {
+ "id": "Resource",
+ "type": "object",
+ "description": "Represents a resource (document, script, image etc). See HAR Specification for reference.",
+ "functions": [
+ {
+ "name": "getContent",
+ "type": "function",
+ "description": "Returns resource content.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that is called upon request completion.",
+ "parameters": [
+ {
+ "name": "content",
+ "type": "string",
+ "description": "Resource content (potentially encoded)."
+ },
+ {
+ "name": "encoding",
+ "type": "string",
+ "description": "Empty if content is not encoded, encoding name otherwise. Currently, only base64 supported."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getHAR",
+ "type": "function",
+ "description": "Returns HAR archive that contains all known resource objects.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that is called upon request completion.",
+ "parameters": [
+ {
+ "name": "har",
+ "type": "object",
+ "description": "A HAR archieve. See HAR specification for details."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onFinished",
+ "type": "function",
+ "description": "Fired when a resource request is finished and all resource data are available.",
+ "parameters": [
+ { "name": "resource", "$ref": "Resource" }
+ ]
+ }
+ ]
+ },
+ {
+ "namespace": "experimental.webInspector.audits",
+ "functions": [
+ {
+ "name": "addCategory",
+ "type": "function",
+ "description": "Adds an audit category.",
+ "parameters": [
+ { "name": "displayName", "type": "string", "description": "A display name for the category" },
+ { "name": "resultCount", "type": "number", "description": "The expected number of audit results in the category." }
+ ],
+ "returns": {
+ "$ref": "AuditCategory"
+ }
+ }
+ ],
+ "types": [
+ {
+ "id": "AuditCategory",
+ "type": "object",
+ "description": "A set of audit rules",
+ "events": [
+ {
+ "name": "onAuditStarted",
+ "type": "function",
+ "description": "Fired when the audit is started, if the category is enabled -- the extension is expected to begin executing audit rules.",
+ "parameters": [
+ { "name": "results", "$ref": "AuditResults" }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FormattedValue",
+ "type": "object",
+ "description": "A value returned from one of the formatters (an URL, code snippet etc), to be passed to createResult or addChild"
+ },
+ {
+ "id": "AuditResults",
+ "type": "object",
+ "description": "A collection of audit results for current run of the audit category",
+ "functions": [
+ {
+ "name": "addResult",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "displayName",
+ "type": "string",
+ "description": "A concise, high-level description of audit rule result"
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "description": "A detailed description of what the displayName means"
+ },
+ {
+ "name": "severity",
+ "$ref": "AuditResultSeverety"
+ },
+ {
+ "name": "details",
+ "$ref": "AuditResultNode",
+ "optional": true,
+ "description": "A subtree that appears under added result that may provide additional details on the violations found"
+ }
+ ]
+ },
+ {
+ "name": "createResult",
+ "type": "function",
+ "description": "Creates a result node that may be user as details parameters to addResult",
+ "parameters": [
+ {
+ "name": "content ...",
+ "choices": [
+ { "type": "string" },
+ { "$ref": "FormattedValue" }
+ ],
+ "description": "Either string or formatted values returned by one of AuditResult formatters (url, snippet etc)"
+ }
+ ],
+ "returns": {
+ "$ref": "AuditResultNode"
+ }
+ },
+ {
+ "name": "done",
+ "type": "function",
+ "description": "Signals the WebInspector Audits panel that the run of this category is over. Normally the run completes automatically when a number of added top-level results is equal to that declared when AuditCategory was created."
+ },
+ {
+ "name": "url",
+ "type": "function",
+ "description": "Render passed value as an URL in the Audits panel",
+ "parameters": [
+ { "name": "href", "type": "string", "description": "An URL that will appear as href value on resulting link" },
+ { "name": "displayText", "type": "string", "description": "A text that will appear to user", "optional": true }
+ ],
+ "returns": { "$ref": "FormattedValue" }
+ },
+ {
+ "name": "snippet",
+ "type": "function",
+ "description": "Render passed text as a code snippet in the Audits panel",
+ "parameters": [
+ { "name": "text", "type": "string", "description": "Snippet text" }
+ ],
+ "returns": { "$ref": "FormattedValue" }
+ }
+ ],
+ "properties": {
+ "Severity": {
+ "$ref": "AuditResultSeverity",
+ "description": "A class that contains possible values for audit result severities."
+ },
+ "text": {
+ "type": "string",
+ "description": "The contents of the node."
+ },
+ "children": {
+ "optional": true,
+ "type": "array",
+ "items": { "$ref": "AuditResultNode" },
+ "description": "Children of this node."
+ },
+ "expanded": {
+ "optional": "true",
+ "type": "boolean",
+ "description": "Whether the node is expanded by default."
+ }
+ }
+ },
+ {
+ "id": "AuditResultNode",
+ "type": "object",
+ "description": "A node in the audit result trees. Displays some content and optionally has children node",
+ "functions": [
+ {
+ "name": "addChild",
+ "description": "Adds another child node to this node",
+ "parameters": [
+ {
+ "name": "content ...",
+ "choices": [
+ { "type": "string" },
+ { "$ref": "FormattedValue" }
+ ],
+ "description": "Either string or formatted values returned by one of AuditResult formatters (url, snippet etc)"
+ }
+ ],
+ "returns": {
+ "$ref": "AuditResultNode"
+ }
+ }
+ ],
+ "properties": {
+ "expanded": {
+ "type": "boolean",
+ "description": "If set, the subtree will always be expanded"
+ }
+ }
+ },
+ {
+ "id": "AuditResultSeverity",
+ "type": "object",
+ "properties": {
+ "Info": {
+ "type": "string"
+ },
+ "Warning": {
+ "type": "string"
+ },
+ "Severe": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+]
+
diff --git a/Source/WebCore/inspector/front-end/ExtensionPanel.js b/Source/WebCore/inspector/front-end/ExtensionPanel.js
index fb98350..144d55d 100644
--- a/Source/WebCore/inspector/front-end/ExtensionPanel.js
+++ b/Source/WebCore/inspector/front-end/ExtensionPanel.js
@@ -95,7 +95,7 @@ WebInspector.ExtensionWatchSidebarPane.prototype = {
setExpression: function(expression, title)
{
- InspectorBackend.evaluate(expression, "extension-watch", this._onEvaluate.bind(this, title));
+ InspectorBackend.evaluate(expression, "extension-watch", false, this._onEvaluate.bind(this, title));
},
_onEvaluate: function(title, result)
diff --git a/Source/WebCore/inspector/front-end/ExtensionServer.js b/Source/WebCore/inspector/front-end/ExtensionServer.js
index 0924106..7d33b73 100644
--- a/Source/WebCore/inspector/front-end/ExtensionServer.js
+++ b/Source/WebCore/inspector/front-end/ExtensionServer.js
@@ -252,9 +252,12 @@ WebInspector.ExtensionServer.prototype = {
WebInspector.log(message.message);
},
- _onReload: function()
+ _onReload: function(message)
{
- InspectorBackend.reloadPage();
+ if (typeof message.userAgent === "string")
+ InspectorBackend.setUserAgentOverride(message.userAgent);
+
+ InspectorBackend.reloadPage(false);
return this._status.OK();
},
@@ -269,10 +272,8 @@ WebInspector.ExtensionServer.prototype = {
result.value = resultObject.description;
this._dispatchCallback(message.requestId, port, result);
}
- var evalExpression = "JSON.stringify(eval('" +
- "with (window.console._commandLineAPI) with (window) {' + unescape('" + escape(message.expression) +
- "') + '}'));";
- InspectorBackend.evaluate(evalExpression, "none", callback.bind(this));
+ var evalExpression = "JSON.stringify(eval(unescape('" + escape(message.expression) + "')));";
+ InspectorBackend.evaluate(evalExpression, "none", true, callback.bind(this));
},
_onRevealAndSelect: function(message)
diff --git a/Source/WebCore/inspector/front-end/FileSystemView.js b/Source/WebCore/inspector/front-end/FileSystemView.js
deleted file mode 100644
index 56f21a4..0000000
--- a/Source/WebCore/inspector/front-end/FileSystemView.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.FileSystemDispatcher = function()
-{
-}
-
-// Keep in sync with Type in AsyncFileSystem.h
-WebInspector.FileSystemDispatcher.TEMPORARY = 0;
-WebInspector.FileSystemDispatcher.PERSISTENT = 1;
-
-WebInspector.FileSystemDispatcher.prototype = {
- getFileSystemPathsAsync: function(origin)
- {
- InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystemDispatcher.PERSISTENT, origin);
- InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystemDispatcher.TEMPORARY, origin);
- },
-
- didGetFileSystemPath: function(root, type, origin)
- {
- WebInspector.panels.resources.updateFileSystemPath(root, type, origin);
- },
-
- didGetFileSystemError: function(type, origin)
- {
- WebInspector.panels.resources.updateFileSystemError(type, origin);
- },
-
- didGetFileSystemDisabled: function()
- {
- WebInspector.panels.resources.setFileSystemDisabled();
- }
-}
-
-InspectorBackend.registerDomainDispatcher("FileSystem", new WebInspector.FileSystemDispatcher());
-
-WebInspector.FileSystemView = function(treeElement, fileSystemOrigin)
-{
- WebInspector.View.call(this);
-
- this.element.addStyleClass("resource-view");
- this._treeElement = treeElement;
- this._origin = fileSystemOrigin;
- this._tabbedPane = new WebInspector.TabbedPane(this.element);
-
- this._persistentFileSystemElement = document.createElement("div");
- this._persistentFileSystemElement.className = "resource-view-headers";
- this._tabbedPane.appendTab("persistent", WebInspector.UIString("Persistent File System"), this._persistentFileSystemElement, this._selectFileSystemTab.bind(this, true));
-
- this._tempFileSystemElement = document.createElement("div");
- this._tempFileSystemElement.className = "resource-view-headers";
- this._tabbedPane.appendTab("temp", WebInspector.UIString("Temporary File System"), this._tempFileSystemElement, this.selectTemporaryFileSystemTab.bind(this, true));
-
- this._temporaryRoot = "";
- this._persistentRoot = "";
- this._isFileSystemDisabled = false;
- this._persistentRootError = false;
- this._temporaryRootError = false;
- this.fileSystemVisible = true;
- this._selectFileSystemTab();
- this.refreshFileSystem();
-}
-
-WebInspector.FileSystemView.prototype = {
- show: function(parentElement)
- {
- WebInspector.View.prototype.show.call(this, parentElement);
- this._update();
- },
-
- set fileSystemVisible(x)
- {
- if (x === this._fileSystemVisible)
- return;
- this._fileSystemVisible = x;
- if (x)
- this.element.addStyleClass("headers-visible");
- else
- this.element.removeStyleClass("headers-visible");
- this._selectFileSystemTab();
- },
-
- _update: function()
- {
- this._selectFileSystemTab();
- WebInspector.FileSystem.getFileSystemPathsAsync(this._origin);
- },
-
- updateFileSystemPath: function(root, type, origin)
- {
- if (origin == this._origin && type == WebInspector.FileSystem.PERSISTENT) {
- this._persistentRoot = root;
- this._persistentRootError = false;
- }
-
- if (origin == this._origin && type == WebInspector.FileSystem.TEMPORARY) {
- this._temporaryRoot = root;
- this._temporaryRootErrorError = false;
- }
-
- this.refreshFileSystem();
- },
-
- updateFileSystemError: function(type, origin)
- {
- if (type == WebInspector.FileSystem.PERSISTENT)
- this._persistentRootError = true;
-
- if (type == WebInspector.FileSystem.TEMPORARY)
- this._temporaryRootError = true;
-
- this.refreshFileSystem();
- },
-
- setFileSystemDisabled: function()
- {
- this._isFileSystemDisabled = true;
- this.refreshFileSystem();
- },
- _selectFileSystemTab: function()
- {
- this._tabbedPane.selectTab("persistent");
- },
-
- selectTemporaryFileSystemTab: function()
- {
- this._tabbedPane.selectTab("temp");
- },
-
- _revealPersistentFolderInOS: function()
- {
- InspectorBackend.revealFolderInOS(this._persistentRoot);
- },
-
- _revealTemporaryFolderInOS: function()
- {
- InspectorBackend.revealFolderInOS(this._temporaryRoot);
- },
-
- _createTextAndButton: function(fileSystemElement, rootPathText, type, isError)
- {
- fileSystemElement.removeChildren();
- var rootPath = WebInspector.UIString("File System root path not available.");
- if (this._isFileSystemDisabled)
- rootPath = WebInspector.UIString("File System is disabled.");
- else if (isError)
- rootPath = WebInspector.UIString("Error in fetching root path for file system.");
- else if (rootPathText)
- rootPath = rootPathText;
-
- var rootTextNode = document.createTextNode("Root: " + rootPath.escapeHTML());
- var rootSystemElement = document.createElement("div");
- rootSystemElement.className = "header-value source-code";
- rootSystemElement.appendChild(rootTextNode);
- fileSystemElement.appendChild(rootSystemElement);
-
- if (!isError && rootPathText) {
- // Append Browse button iff root path is available and it is not an error.
- var contentElement = document.createElement("div");
- contentElement.className = "panel-enabler-view-content";
- fileSystemElement.appendChild(contentElement);
- var choicesForm = document.createElement("form");
- contentElement.appendChild(choicesForm);
- var enableButton = document.createElement("button");
- enableButton.setAttribute("type", "button");
- enableButton.textContent = WebInspector.UIString("Reveal folder in OS");
- // FIXME: Bind this directly to InspectorBackend.
- if (type == WebInspector.FileSystem.PERSISTENT)
- enableButton.addEventListener("click", this._revealPersistentFolderInOS.bind(this), false);
- if (type == WebInspector.FileSystem.TEMPORARY)
- enableButton.addEventListener("click", this._revealTemporaryFolderInOS.bind(this), false);
- choicesForm.appendChild(enableButton);
- fileSystemElement.appendChild(contentElement);
- }
- },
-
- refreshFileSystem: function()
- {
- this._createTextAndButton(this._persistentFileSystemElement, this._persistentRoot, WebInspector.FileSystem.PERSISTENT, this._persistentRootError);
- this._createTextAndButton(this._tempFileSystemElement, this._temporaryRoot, WebInspector.FileSystem.TEMPORARY, this._temporaryRootError);
- },
-}
-
-WebInspector.FileSystemView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/Source/WebCore/inspector/front-end/GoToLineDialog.js b/Source/WebCore/inspector/front-end/GoToLineDialog.js
index c96344c..f246159 100644
--- a/Source/WebCore/inspector/front-end/GoToLineDialog.js
+++ b/Source/WebCore/inspector/front-end/GoToLineDialog.js
@@ -45,7 +45,7 @@ WebInspector.GoToLineDialog = function(view)
this._input = dialogWindow.createChild("input");
this._input.setAttribute("type", "text");
this._input.setAttribute("size", 6);
- var linesCount = view.sourceFrame.textModel.linesCount;
+ var linesCount = view.textModel.linesCount;
if (linesCount)
this._input.setAttribute("title", WebInspector.UIString("1 - %d", linesCount));
var blurHandler = this._onBlur.bind(this);
@@ -120,7 +120,7 @@ WebInspector.GoToLineDialog.prototype = {
var value = this._input.value;
var lineNumber = parseInt(value, 10);
if (!isNaN(lineNumber) && lineNumber > 0) {
- lineNumber = Math.min(lineNumber, this._view.sourceFrame.textModel.linesCount);
+ lineNumber = Math.min(lineNumber, this._view.textModel.linesCount);
this._view.highlightLine(lineNumber);
}
}
diff --git a/Source/WebCore/inspector/front-end/HeapSnapshot.js b/Source/WebCore/inspector/front-end/HeapSnapshot.js
new file mode 100644
index 0000000..ef450af
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/HeapSnapshot.js
@@ -0,0 +1,909 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.HeapSnapshotArraySlice = function(snapshot, arrayName, start, end)
+{
+ // Note: we don't reference snapshot contents directly to avoid
+ // holding references to big chunks of data.
+ this._snapshot = snapshot;
+ this._arrayName = arrayName;
+ this._start = start;
+ this.length = end - start;
+}
+
+WebInspector.HeapSnapshotArraySlice.prototype = {
+ item: function(index)
+ {
+ return this._snapshot[this._arrayName][this._start + index];
+ }
+}
+
+WebInspector.HeapSnapshotEdge = function(snapshot, edges, edgeIndex)
+{
+ this._snapshot = snapshot;
+ this._edges = edges;
+ this.edgeIndex = edgeIndex || 0;
+}
+
+WebInspector.HeapSnapshotEdge.prototype = {
+ clone: function()
+ {
+ return new WebInspector.HeapSnapshotEdge(this._snapshot, this._edges, this.edgeIndex);
+ },
+
+ get hasStringName()
+ {
+ if (!this.isShortcut)
+ return this._hasStringName;
+ return isNaN(parseInt(this._name, 10));
+ },
+
+ get isElement()
+ {
+ return this._type() === this._snapshot._edgeElementType;
+ },
+
+ get isHidden()
+ {
+ return this._type() === this._snapshot._edgeHiddenType;
+ },
+
+ get isInternal()
+ {
+ return this._type() === this._snapshot._edgeInternalType;
+ },
+
+ get isShortcut()
+ {
+ return this._type() === this._snapshot._edgeShortcutType;
+ },
+
+ get name()
+ {
+ if (!this.isShortcut)
+ return this._name;
+ var numName = parseInt(this._name, 10);
+ return isNaN(numName) ? this._name : numName;
+ },
+
+ get node()
+ {
+ return new WebInspector.HeapSnapshotNode(this._snapshot, this.nodeIndex);
+ },
+
+ get nodeIndex()
+ {
+ return this._edges.item(this.edgeIndex + this._snapshot._edgeToNodeOffset);
+ },
+
+ get rawEdges()
+ {
+ return this._edges;
+ },
+
+ toString: function()
+ {
+ switch (this.type) {
+ case "context": return "->" + this.name;
+ case "element": return "[" + this.name + "]";
+ case "property":
+ return this.name.indexOf(" ") === -1 ? "." + this.name : "[\"" + this.name + "\"]";
+ case "shortcut":
+ var name = this.name;
+ if (typeof name === "string")
+ return this.name.indexOf(" ") === -1 ? "." + this.name : "[\"" + this.name + "\"]";
+ else
+ return "[" + this.name + "]";
+ case "internal":
+ case "hidden":
+ return "{" + this.name + "}";
+ };
+ return "?" + this.name + "?";
+ },
+
+ get type()
+ {
+ return this._snapshot._edgeTypes[this._type()];
+ },
+
+ get _hasStringName()
+ {
+ return !this.isElement && !this.isHidden;
+ },
+
+ get _name()
+ {
+ return this._hasStringName ? this._snapshot._strings[this._nameOrIndex] : this._nameOrIndex;
+ },
+
+ get _nameOrIndex()
+ {
+ return this._edges.item(this.edgeIndex + this._snapshot._edgeNameOffset);
+ },
+
+ _type: function()
+ {
+ return this._edges.item(this.edgeIndex + this._snapshot._edgeTypeOffset);
+ }
+};
+
+WebInspector.HeapSnapshotEdgeIterator = function(edge)
+{
+ this.edge = edge;
+}
+
+WebInspector.HeapSnapshotEdgeIterator.prototype = {
+ first: function()
+ {
+ this.edge.edgeIndex = 0;
+ },
+
+ hasNext: function()
+ {
+ return this.edge.edgeIndex < this.edge._edges.length;
+ },
+
+ get index()
+ {
+ return this.edge.edgeIndex;
+ },
+
+ set index(newIndex)
+ {
+ this.edge.edgeIndex = newIndex;
+ },
+
+ get item()
+ {
+ return this.edge;
+ },
+
+ next: function()
+ {
+ this.edge.edgeIndex += this.edge._snapshot._edgeFieldsCount;
+ }
+};
+
+WebInspector.HeapSnapshotNode = function(snapshot, nodeIndex)
+{
+ this._snapshot = snapshot;
+ this._firstNodeIndex = nodeIndex;
+ this.nodeIndex = nodeIndex;
+}
+
+WebInspector.HeapSnapshotNode.prototype = {
+ get className()
+ {
+ switch (this.type) {
+ case "hidden":
+ return WebInspector.UIString("(system)");
+ case "object":
+ return this.name;
+ case "code":
+ return WebInspector.UIString("(compiled code)");
+ default:
+ return "(" + this.type + ")";
+ }
+ },
+
+ dominatorIndex: function()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._dominatorOffset];
+ },
+
+ get edges()
+ {
+ return new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(this._snapshot, this.rawEdges));
+ },
+
+ get edgesCount()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._edgesCountOffset];
+ },
+
+ get id()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeIdOffset];
+ },
+
+ get instancesCount()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeInstancesCountOffset];
+ },
+
+ get isHidden()
+ {
+ return this._type() === this._snapshot._nodeHiddenType;
+ },
+
+ get isRoot()
+ {
+ return this.nodeIndex === this._snapshot._rootNodeIndex;
+ },
+
+ get name()
+ {
+ return this._snapshot._strings[this._name()];
+ },
+
+ get rawEdges()
+ {
+ var firstEdgeIndex = this._firstEdgeIndex();
+ return new WebInspector.HeapSnapshotArraySlice(this._snapshot, "_nodes", firstEdgeIndex, firstEdgeIndex + this.edgesCount * this._snapshot._edgeFieldsCount);
+ },
+
+ get retainedSize()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeRetainedSizeOffset];
+ },
+
+ get retainers()
+ {
+ return new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(this._snapshot, this._snapshot.retainers(this)));
+ },
+
+ get selfSize()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeSelfSizeOffset];
+ },
+
+ get type()
+ {
+ return this._snapshot._nodeTypes[this._type()];
+ },
+
+ _name: function()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeNameOffset];
+ },
+
+ get _nodes()
+ {
+ return this._snapshot._nodes;
+ },
+
+ _firstEdgeIndex: function()
+ {
+ return this.nodeIndex + this._snapshot._firstEdgeOffset;
+ },
+
+ get _nextNodeIndex()
+ {
+ return this._firstEdgeIndex() + this.edgesCount * this._snapshot._edgeFieldsCount;
+ },
+
+ _type: function()
+ {
+ return this._nodes[this.nodeIndex + this._snapshot._nodeTypeOffset];
+ }
+};
+
+WebInspector.HeapSnapshotNodeIterator = function(node)
+{
+ this.node = node;
+}
+
+WebInspector.HeapSnapshotNodeIterator.prototype = {
+ first: function()
+ {
+ this.node.nodeIndex = this.node._firstNodeIndex;
+ },
+
+ hasNext: function()
+ {
+ return this.node.nodeIndex < this.node._nodes.length;
+ },
+
+ get index()
+ {
+ return this.node.nodeIndex;
+ },
+
+ set index(newIndex)
+ {
+ this.node.nodeIndex = newIndex;
+ },
+
+ get item()
+ {
+ return this.node;
+ },
+
+ next: function()
+ {
+ this.node.nodeIndex = this.node._nextNodeIndex;
+ }
+}
+
+WebInspector.HeapSnapshot = function(profile)
+{
+ this._nodes = profile.nodes;
+ this._strings = profile.strings;
+
+ this._init();
+}
+
+WebInspector.HeapSnapshot.prototype = {
+ _init: function()
+ {
+ this._metaNodeIndex = 0;
+ this._rootNodeIndex = 1;
+ var meta = this._nodes[this._metaNodeIndex];
+ this._nodeTypeOffset = meta.fields.indexOf("type");
+ this._nodeNameOffset = meta.fields.indexOf("name");
+ this._nodeIdOffset = meta.fields.indexOf("id");
+ this._nodeInstancesCountOffset = this._nodeIdOffset;
+ this._nodeSelfSizeOffset = meta.fields.indexOf("self_size");
+ this._nodeRetainedSizeOffset = meta.fields.indexOf("retained_size");
+ this._dominatorOffset = meta.fields.indexOf("dominator");
+ this._edgesCountOffset = meta.fields.indexOf("children_count");
+ this._firstEdgeOffset = meta.fields.indexOf("children");
+ this._nodeTypes = meta.types[this._nodeTypeOffset];
+ this._nodeHiddenType = this._nodeTypes.indexOf("hidden");
+ var edgesMeta = meta.types[this._firstEdgeOffset];
+ this._edgeFieldsCount = edgesMeta.fields.length;
+ this._edgeTypeOffset = edgesMeta.fields.indexOf("type");
+ this._edgeNameOffset = edgesMeta.fields.indexOf("name_or_index");
+ this._edgeToNodeOffset = edgesMeta.fields.indexOf("to_node");
+ this._edgeTypes = edgesMeta.types[this._edgeTypeOffset];
+ this._edgeElementType = this._edgeTypes.indexOf("element");
+ this._edgeHiddenType = this._edgeTypes.indexOf("hidden");
+ this._edgeInternalType = this._edgeTypes.indexOf("internal");
+ this._edgeShortcutType = this._edgeTypes.indexOf("shortcut");
+ },
+
+ dispose: function()
+ {
+ delete this._nodes;
+ delete this._strings;
+ if (this._idsMap)
+ delete this._idsMap;
+ if (this._retainers) {
+ delete this._retainers;
+ delete this._nodesToRetainers;
+ }
+ if (this._aggregates) {
+ delete this._aggregates;
+ this._aggregatesWithIndexes = false;
+ }
+ },
+
+ get allNodes()
+ {
+ return new WebInspector.HeapSnapshotNodeIterator(this.rootNode);
+ },
+
+ get nodesCount()
+ {
+ if (this._nodesCount)
+ return this._nodesCount;
+
+ this._nodesCount = 0;
+ for (var iter = this.allNodes; iter.hasNext(); iter.next())
+ ++this._nodesCount;
+ return this._nodesCount;
+ },
+
+ restore: function(profile)
+ {
+ this._nodes = profile.nodes;
+ this._strings = profile.strings;
+ },
+
+ get rootNode()
+ {
+ return new WebInspector.HeapSnapshotNode(this, this._rootNodeIndex);
+ },
+
+ get totalSize()
+ {
+ return this.rootNode.retainedSize;
+ },
+
+ get idsMap()
+ {
+ if (this._idsMap)
+ return this._idsMap;
+
+ this._idsMap = [];
+ for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
+ this._idsMap[iter.node.id] = true;
+ }
+ return this._idsMap;
+ },
+
+ retainers: function(node)
+ {
+ if (!this._retainers)
+ this._buildRetainers();
+
+ var retIndexFrom = this._nodesToRetainers[node.nodeIndex];
+ var retIndexTo = this._nodesToRetainers[node._nextNodeIndex];
+ return new WebInspector.HeapSnapshotArraySlice(this, "_retainers", retIndexFrom, retIndexTo);
+ },
+
+ aggregates: function(withNodeIndexes)
+ {
+ if (!this._aggregates)
+ this._buildAggregates();
+ if (withNodeIndexes && !this._aggregatesWithIndexes)
+ this._buildAggregatesIndexes();
+ return this._aggregates;
+ },
+
+ _buildRetainers: function()
+ {
+ this._nodesToRetainers = [];
+ for (var nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
+ var node = nodesIter.node;
+ if (!(node.nodeIndex in this._nodesToRetainers))
+ this._nodesToRetainers[node.nodeIndex] = 0;
+ for (var edgesIter = node.edges; edgesIter.hasNext(); edgesIter.next()) {
+ var edge = edgesIter.edge;
+ var nodeIndex = edge.nodeIndex;
+ if (!(nodeIndex in this._nodesToRetainers))
+ this._nodesToRetainers[nodeIndex] = 0;
+ this._nodesToRetainers[nodeIndex] += this._edgeFieldsCount;
+ }
+ }
+ nodesIter = this.allNodes;
+ var node = nodesIter.node;
+ var prevIndex = this._nodesToRetainers[node.nodeIndex] = 0;
+ var prevRetsCount = this._nodesToRetainers[node.nodeIndex];
+ nodesIter.next();
+ for (; nodesIter.hasNext(); nodesIter.next()) {
+ node = nodesIter.node;
+ var savedRefsCount = this._nodesToRetainers[node.nodeIndex];
+ this._nodesToRetainers[node.nodeIndex] = prevIndex + prevRetsCount;
+ prevIndex = this._nodesToRetainers[node.nodeIndex];
+ prevRetsCount = savedRefsCount;
+ }
+ this._retainers = new Array(prevIndex + prevRetsCount);
+ this._nodesToRetainers[this._nodes.length] = this._retainers.length;
+ for (nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
+ node = nodesIter.node;
+ var retsCount = this._nodesToRetainers[node._nextNodeIndex] - this._nodesToRetainers[node.nodeIndex];
+ if (retsCount > 0) {
+ this._retainers[this._nodesToRetainers[node.nodeIndex]] = retsCount;
+ }
+ }
+ for (nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
+ node = nodesIter.node;
+ for (var edgesIter = node.edges; edgesIter.hasNext(); edgesIter.next()) {
+ var edge = edgesIter.edge;
+ var nodeIndex = edge.nodeIndex;
+ var retIndex = this._nodesToRetainers[nodeIndex];
+ this._retainers[retIndex] -= this._edgeFieldsCount;
+ var idx = retIndex + this._retainers[retIndex];
+ this._retainers[idx + this._edgeTypeOffset] = edge._type();
+ this._retainers[idx + this._edgeNameOffset] = edge._nameOrIndex;
+ this._retainers[idx + this._edgeToNodeOffset] = node.nodeIndex;
+ }
+ }
+ },
+
+ _buildAggregates: function()
+ {
+ this._aggregates = {};
+ for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
+ var node = iter.node;
+ var className = node.className;
+ var nameMatters = node.type === "object";
+ if (node.selfSize === 0)
+ continue;
+ if (!(className in this._aggregates))
+ this._aggregates[className] = { count: 0, self: 0, maxRet: 0, type: node.type, name: nameMatters ? node.name : null, idxs: [] };
+ var clss = this._aggregates[className];
+ ++clss.count;
+ clss.self += node.selfSize;
+ if (node.retainedSize > clss.maxRet)
+ clss.maxRet = node.retainedSize;
+ }
+ },
+
+ _buildAggregatesIndexes: function()
+ {
+ for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
+ var node = iter.node;
+ var className = node.className;
+ var clss = this._aggregates[className];
+ if (clss)
+ clss.idxs.push(node.nodeIndex);
+ }
+
+ var nodeA = new WebInspector.HeapSnapshotNode(this);
+ var nodeB = new WebInspector.HeapSnapshotNode(this);
+ for (var clss in this._aggregates)
+ this._aggregates[clss].idxs.sort(
+ function(idxA, idxB) {
+ nodeA.nodeIndex = idxA;
+ nodeB.nodeIndex = idxB;
+ return nodeA.id < nodeB.id ? -1 : 1;
+ });
+
+ this._aggregatesWithIndexes = true;
+ }
+};
+
+WebInspector.HeapSnapshotFilteredOrderedIterator = function(snapshot, iterator, filter)
+{
+ this._snapshot = snapshot;
+ this._filter = filter;
+ this._iterator = iterator;
+ this._iterationOrder = null;
+ this._position = 0;
+ this._lastComparator = null;
+}
+
+WebInspector.HeapSnapshotFilteredOrderedIterator.prototype = {
+ _createIterationOrder: function()
+ {
+ this._iterationOrder = [];
+ var iterator = this._iterator;
+ if (!this._filter) {
+ for (iterator.first(); iterator.hasNext(); iterator.next())
+ this._iterationOrder.push(iterator.index);
+ } else {
+ for (iterator.first(); iterator.hasNext(); iterator.next()) {
+ if (this._filter(iterator.item))
+ this._iterationOrder.push(iterator.index);
+ }
+ }
+ },
+
+ first: function()
+ {
+ this._position = 0;
+ },
+
+ hasNext: function()
+ {
+ return this._position < this._iterationOrder.length;
+ },
+
+ get isEmpty()
+ {
+ if (this._iterationOrder)
+ return !this._iterationOrder.length;
+ var iterator = this._iterator;
+ if (!this._filter) {
+ iterator.first();
+ return !iterator.hasNext();
+ }
+ for (iterator.first(); iterator.hasNext(); iterator.next())
+ if (this._filter(iterator.item)) return false;
+ return true;
+ },
+
+ get item()
+ {
+ this._iterator.index = this._iterationOrder[this._position];
+ return this._iterator.item;
+ },
+
+ get lastComparator()
+ {
+ return this._lastComparator;
+ },
+
+ get length()
+ {
+ if (!this._iterationOrder)
+ this._createIterationOrder();
+ return this._iterationOrder.length;
+ },
+
+ next: function()
+ {
+ ++this._position;
+ }
+}
+
+WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator = function(fieldNames)
+{
+ return {fieldName1:fieldNames[0], ascending1:fieldNames[1], fieldName2:fieldNames[2], ascending2:fieldNames[3]};
+}
+
+WebInspector.HeapSnapshotEdgesProvider = function(snapshot, rawEdges, filter)
+{
+ WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot, new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(snapshot, rawEdges)), filter);
+}
+
+WebInspector.HeapSnapshotEdgesProvider.prototype = {
+ sort: function(comparator)
+ {
+ if (this._lastComparator === comparator)
+ return false;
+ this._lastComparator = comparator;
+ var fieldName1 = comparator.fieldName1;
+ var fieldName2 = comparator.fieldName2;
+ var ascending1 = comparator.ascending1;
+ var ascending2 = comparator.ascending2;
+
+ var edgeA = this._iterator.item.clone();
+ var edgeB = edgeA.clone();
+ var nodeA = new WebInspector.HeapSnapshotNode(this._snapshot);
+ var nodeB = new WebInspector.HeapSnapshotNode(this._snapshot);
+
+ function sortByEdgeFieldName(ascending, indexA, indexB)
+ {
+ edgeA.edgeIndex = indexA;
+ edgeB.edgeIndex = indexB;
+ if (edgeB.name === "__proto__") return -1;
+ if (edgeA.name === "__proto__") return 1;
+ var result =
+ edgeA.hasStringName === edgeB.hasStringName ?
+ (edgeA.name < edgeB.name ? -1 : (edgeA.name > edgeB.name ? 1 : 0)) :
+ (edgeA.hasStringName ? -1 : 1);
+ return ascending ? result : -result;
+ }
+
+ function sortByNodeField(fieldName, ascending, indexA, indexB)
+ {
+ edgeA.edgeIndex = indexA;
+ edgeB.edgeIndex = indexB;
+ nodeA.nodeIndex = edgeA.nodeIndex;
+ nodeB.nodeIndex = edgeB.nodeIndex;
+ var valueA = nodeA[fieldName];
+ var valueB = nodeB[fieldName];
+ var result = valueA < valueB ? -1 : (valueA > valueB ? 1 : 0);
+ return ascending ? result : -result;
+ }
+
+ if (!this._iterationOrder)
+ this._createIterationOrder();
+
+ function sortByEdgeAndNode(indexA, indexB) {
+ var result = sortByEdgeFieldName(ascending1, indexA, indexB);
+ if (result === 0)
+ result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
+ return result;
+ }
+
+ function sortByNodeAndEdge(indexA, indexB) {
+ var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
+ if (result === 0)
+ result = sortByEdgeFieldName(ascending2, indexA, indexB);
+ return result;
+ }
+
+ function sortByNodeAndNode(indexA, indexB) {
+ var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
+ if (result === 0)
+ result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
+ return result;
+ }
+
+ if (fieldName1 === "!edgeName")
+ this._iterationOrder.sort(sortByEdgeAndNode);
+ else if (fieldName2 === "!edgeName")
+ this._iterationOrder.sort(sortByNodeAndEdge);
+ else
+ this._iterationOrder.sort(sortByNodeAndNode);
+ return true;
+ }
+};
+
+WebInspector.HeapSnapshotEdgesProvider.prototype.__proto__ = WebInspector.HeapSnapshotFilteredOrderedIterator.prototype;
+
+WebInspector.HeapSnapshotNodesProvider = function(snapshot, nodes, filter)
+{
+ WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot, nodes, filter);
+}
+
+WebInspector.HeapSnapshotNodesProvider.prototype = {
+ sort: function(comparator)
+ {
+ if (this._lastComparator === comparator)
+ return false;
+ this._lastComparator = comparator;
+ var fieldName1 = comparator.fieldName1;
+ var fieldName2 = comparator.fieldName2;
+ var ascending1 = comparator.ascending1;
+ var ascending2 = comparator.ascending2;
+
+ var nodeA = new WebInspector.HeapSnapshotNode(this._snapshot);
+ var nodeB = new WebInspector.HeapSnapshotNode(this._snapshot);
+
+ function sortByNodeField(fieldName, ascending, indexA, indexB)
+ {
+ nodeA.nodeIndex = indexA;
+ nodeB.nodeIndex = indexB;
+ var valueA = nodeA[fieldName];
+ var valueB = nodeB[fieldName];
+ var result = valueA < valueB ? -1 : (valueA > valueB ? 1 : 0);
+ return ascending ? result : -result;
+ }
+
+ if (!this._iterationOrder)
+ this._createIterationOrder();
+
+ function sortByComparator(indexA, indexB) {
+ var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
+ if (result === 0)
+ result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
+ return result;
+ }
+
+ this._iterationOrder.sort(sortByComparator);
+ return true;
+ }
+};
+
+WebInspector.HeapSnapshotNodesProvider.prototype.__proto__ = WebInspector.HeapSnapshotFilteredOrderedIterator.prototype;
+
+WebInspector.HeapSnapshotPathFinder = function(snapshot, targetNodeIndex)
+{
+ this._snapshot = snapshot;
+ this._maxLength = 1;
+ this._lengthLimit = 15;
+ this._targetNodeIndex = targetNodeIndex;
+ this._currentPath = null;
+ this._skipHidden = !WebInspector.DetailedHeapshotView.prototype.showHiddenData;
+ this._rootChildren = this._fillRootChildren();
+}
+
+WebInspector.HeapSnapshotPathFinder.prototype = {
+ findNext: function()
+ {
+ for (var i = 0; i < 100000; ++i) {
+ if (!this._buildNextPath()) {
+ if (++this._maxLength >= this._lengthLimit)
+ return null;
+ this._currentPath = null;
+ if (!this._buildNextPath())
+ return null;
+ }
+ if (this._isPathFound())
+ return {path:this._pathToString(this._currentPath), len:this._currentPath.length};
+ }
+
+ return false;
+ },
+
+ _fillRootChildren: function()
+ {
+ var result = [];
+ for (var iter = this._snapshot.rootNode.edges; iter.hasNext(); iter.next())
+ result[iter.edge.nodeIndex] = true;
+ return result;
+ },
+
+ _appendToCurrentPath: function(iter)
+ {
+ this._currentPath._cache[this._lastEdge.nodeIndex] = true;
+ this._currentPath.push(iter);
+ },
+
+ _removeLastFromCurrentPath: function()
+ {
+ this._currentPath.pop();
+ delete this._currentPath._cache[this._lastEdge.nodeIndex];
+ },
+
+ _hasInPath: function(nodeIndex)
+ {
+ return this._targetNodeIndex === nodeIndex
+ || !!this._currentPath._cache[nodeIndex];
+ },
+
+ _isPathFound: function()
+ {
+ return this._currentPath.length === this._maxLength
+ && this._lastEdge.nodeIndex in this._rootChildren;
+ },
+
+ get _lastEdgeIter()
+ {
+ return this._currentPath[this._currentPath.length - 1];
+ },
+
+ get _lastEdge()
+ {
+ return this._lastEdgeIter.edge;
+ },
+
+ _skipEdge: function(edge)
+ {
+ return (this._skipHidden && (edge.isHidden || edge.node.isHidden))
+ || this._hasInPath(edge.nodeIndex);
+ },
+
+ _nextEdgeIter: function()
+ {
+ var iter = this._lastEdgeIter;
+ while (this._skipEdge(iter.edge) && iter.hasNext())
+ iter.next();
+ return iter;
+ },
+
+ _buildNextPath: function()
+ {
+ if (this._currentPath !== null) {
+ var iter = this._lastEdgeIter;
+ while (true) {
+ iter.next();
+ if (iter.hasNext())
+ return true;
+ while (true) {
+ if (this._currentPath.length > 1) {
+ this._removeLastFromCurrentPath();
+ iter = this._lastEdgeIter;
+ iter.next();
+ iter = this._nextEdgeIter();
+ if (iter.hasNext()) {
+ while (this._currentPath.length < this._maxLength) {
+ iter = this._nextEdgeIter();
+ if (iter.hasNext())
+ this._appendToCurrentPath(iter.edge.node.retainers);
+ else
+ return true;
+ }
+ return true;
+ }
+ } else
+ return false;
+ }
+ }
+ } else {
+ var node = new WebInspector.HeapSnapshotNode(this._snapshot, this._targetNodeIndex);
+ this._currentPath = [node.retainers];
+ this._currentPath._cache = {};
+ while (this._currentPath.length < this._maxLength) {
+ var iter = this._nextEdgeIter();
+ if (iter.hasNext())
+ this._appendToCurrentPath(iter.edge.node.retainers);
+ else
+ break;
+ }
+ return true;
+ }
+ },
+
+ _nodeToString: function(node)
+ {
+ if (node.id === 1)
+ return node.name;
+ else
+ return node.name + "@" + node.id;
+ },
+
+ _pathToString: function(path)
+ {
+ if (!path)
+ return "";
+ var sPath = [];
+ for (var j = 0; j < path.length; ++j)
+ sPath.push(path[j].edge.toString());
+ sPath.push(this._nodeToString(path[path.length - 1].edge.node));
+ sPath.reverse();
+ return sPath.join("");
+ }
+};
diff --git a/Source/WebCore/inspector/front-end/HeapSnapshotView.js b/Source/WebCore/inspector/front-end/HeapSnapshotView.js
index f349361..44b95c3 100644
--- a/Source/WebCore/inspector/front-end/HeapSnapshotView.js
+++ b/Source/WebCore/inspector/front-end/HeapSnapshotView.js
@@ -27,154 +27,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.HeapSnapshotEdgesIterator = function(snapshot, edges)
-{
- this._snapshot = snapshot;
- this._edges = edges;
- this._edgeIndex = 0;
-}
-
-WebInspector.HeapSnapshotEdgesIterator.prototype = {
- get done()
- {
- return this._edgeIndex >= this._edges.length;
- },
-
- get isElement()
- {
- return this._getType() === this._snapshot._edgeElementType;
- },
-
- get isHidden()
- {
- return this._getType() === this._snapshot._edgeHiddenType;
- },
-
- get name()
- {
- return this.isElement || this.isHidden ? this._getNameOrIndex() : this._snapshot._strings[this._getNameOrIndex()];
- },
-
- next: function()
- {
- this._edgeIndex += this._snapshot._edgeFieldsCount;
- },
-
- get node()
- {
- return new WebInspector.HeapSnapshotNodeWrapper(this._snapshot, this.nodeIndex);
- },
-
- get nodeIndex()
- {
- return this._edges[this._edgeIndex + this._snapshot._edgeToNodeOffset];
- },
-
- _getNameOrIndex: function()
- {
- return this._edges[this._edgeIndex + this._snapshot._edgeNameOffset];
- },
-
- _getType: function()
- {
- return this._edges[this._edgeIndex + this._snapshot._edgeTypeOffset];
- }
-};
-
-WebInspector.HeapSnapshotNodeWrapper = function(snapshot, nodeIndex)
-{
- this._snapshot = snapshot;
- this._nodes = snapshot._nodes;
- this._nodeIndex = nodeIndex;
-}
-
-WebInspector.HeapSnapshotNodeWrapper.prototype = {
- get edges()
- {
- return new WebInspector.HeapSnapshotEdgesIterator(this._snapshot, this._getEdges());
- },
-
- get edgesCount()
- {
- return this._nodes[this._nodeIndex + this._snapshot._edgesCountOffset];
- },
-
- get instancesCount()
- {
- return this._nodes[this._nodeIndex + this._snapshot._nodeInstancesCountOffset];
- },
-
- get isHidden()
- {
- return this._getType() === this._snapshot._nodeHiddenType;
- },
-
- get name()
- {
- return this._snapshot._strings[this._getName()];
- },
-
- get selfSize()
- {
- return this._nodes[this._nodeIndex + this._snapshot._nodeSelfSizeOffset];
- },
-
- _getName: function()
- {
- return this._nodes[this._nodeIndex + this._snapshot._nodeNameOffset];
- },
-
- _getEdges: function()
- {
- var firstEdgeIndex = this._nodeIndex + this._snapshot._firstEdgeOffset;
- return this._nodes.slice(firstEdgeIndex, firstEdgeIndex + this.edgesCount * this._snapshot._edgeFieldsCount);
- },
-
- _getType: function()
- {
- return this._nodes[this._nodeIndex + this._snapshot._nodeTypeOffset];
- }
-};
-
-WebInspector.HeapSnapshot = function(profile)
-{
- this._profile = profile;
- this._nodes = profile.nodes;
- this._strings = profile.strings;
-
- this._init();
-}
-
-WebInspector.HeapSnapshot.prototype = {
- _init: function()
- {
- this._metaNodeIndex = 0;
- this._rootNodeIndex = 1;
- var meta = this._nodes[this._metaNodeIndex];
- this._nodeTypeOffset = meta.fields.indexOf("type");
- this._nodeNameOffset = meta.fields.indexOf("name");
- this._nodeIdOffset = meta.fields.indexOf("id");
- this._nodeInstancesCountOffset = this._nodeIdOffset;
- this._nodeSelfSizeOffset = meta.fields.indexOf("self_size");
- this._edgesCountOffset = meta.fields.indexOf("children_count");
- this._firstEdgeOffset = meta.fields.indexOf("children");
- this._nodeTypes = meta.types[this._nodeTypeOffset];
- this._nodeHiddenType = this._nodeTypes.indexOf("hidden");
- var edgesMeta = meta.types[this._firstEdgeOffset];
- this._edgeFieldsCount = edgesMeta.fields.length;
- this._edgeTypeOffset = edgesMeta.fields.indexOf("type");
- this._edgeNameOffset = edgesMeta.fields.indexOf("name_or_index");
- this._edgeToNodeOffset = edgesMeta.fields.indexOf("to_node");
- this._edgeTypes = edgesMeta.types[this._edgeTypeOffset];
- this._edgeElementType = this._edgeTypes.indexOf("element");
- this._edgeHiddenType = this._edgeTypes.indexOf("hidden");
- },
-
- get rootEdges()
- {
- return (new WebInspector.HeapSnapshotNodeWrapper(this, this._rootNodeIndex)).edges;
- }
-};
WebInspector.HeapSnapshotView = function(parent, profile)
{
@@ -246,7 +98,7 @@ WebInspector.HeapSnapshotView = function(parent, profile)
function profileCallback(profile)
{
- var list = this._getProfiles();
+ var list = this._profiles();
var profileIndex;
for (var i = 0; i < list.length; ++i)
if (list[i].uid === profile.uid) {
@@ -440,7 +292,7 @@ WebInspector.HeapSnapshotView.prototype = {
_changeBase: function()
{
- if (this.baseSnapshot.uid === this._getProfiles()[this.baseSelectElement.selectedIndex].uid)
+ if (this.baseSnapshot.uid === this._profiles()[this.baseSelectElement.selectedIndex].uid)
return;
this._resetDataGridList(resetCompleted.bind(this));
@@ -468,7 +320,7 @@ WebInspector.HeapSnapshotView.prototype = {
return this._snapshotDataGridList;
},
- _getProfiles: function()
+ _profiles: function()
{
return WebInspector.panels.profiles.getProfiles(WebInspector.HeapSnapshotProfileType.TypeId);
},
@@ -530,17 +382,20 @@ WebInspector.HeapSnapshotView.prototype = {
{
var snapshot = new WebInspector.HeapSnapshot(loadedSnapshot);
var result = {lowlevels: {}, entries: {}, children: {}};
- for (var rootEdges = snapshot.rootEdges; !rootEdges.done; rootEdges.next()) {
- var node = rootEdges.node;
+ var rootEdgesIter = snapshot.rootNode.edges;
+ for (var iter = rootEdgesIter; iter.hasNext(); iter.next()) {
+ var node = iter.edge.node;
if (node.isHidden)
result.lowlevels[node.name] = {count: node.instancesCount, size: node.selfSize, type: node.name};
else if (node.instancesCount)
result.entries[node.name] = {constructorName: node.name, count: node.instancesCount, size: node.selfSize};
else {
var entry = {constructorName: node.name};
- for (var edges = node.edges; !edges.done; edges.next())
- entry[edges.nodeIndex] = {constructorName: edges.node.name, count: edges.name};
- result.children[rootEdges.nodeIndex] = entry;
+ for (var innerIter = node.edges; innerIter.hasNext(); innerIter.next()) {
+ var edge = innerIter.edge;
+ entry[edge.nodeIndex] = {constructorName: edge.node.name, count: edge.name};
+ }
+ result.children[rootEdgesIter.edge.nodeIndex] = entry;
}
}
return result;
@@ -581,7 +436,7 @@ WebInspector.HeapSnapshotView.prototype = {
_resetDataGridList: function(callback)
{
- this._loadProfile(this._getProfiles()[this.baseSelectElement.selectedIndex], profileLoaded.bind(this));
+ this._loadProfile(this._profiles()[this.baseSelectElement.selectedIndex], profileLoaded.bind(this));
function profileLoaded(profile)
{
@@ -601,10 +456,10 @@ WebInspector.HeapSnapshotView.prototype = {
var sortColumnIdentifier = this.dataGrid.sortColumnIdentifier;
var sortProperty = {
cons: ["constructorName", null],
- count: ["count", null],
- size: ["size", "count"],
- countDelta: this.showCountDeltaAsPercent ? ["countDeltaPercent", null] : ["countDelta", null],
- sizeDelta: this.showSizeDeltaAsPercent ? ["sizeDeltaPercent", "countDeltaPercent"] : ["sizeDelta", "sizeDeltaPercent"]
+ count: ["count", "constructorName"],
+ size: ["size", "constructorName"],
+ countDelta: [this.showCountDeltaAsPercent ? "countDeltaPercent" : "countDelta", "constructorName"],
+ sizeDelta: [this.showSizeDeltaAsPercent ? "sizeDeltaPercent" : "sizeDelta", "constructorName"]
}[sortColumnIdentifier];
this.snapshotDataGridList.sort(WebInspector.HeapSnapshotDataGridList.propertyComparator(sortProperty[0], sortProperty[1], sortAscending));
@@ -614,7 +469,7 @@ WebInspector.HeapSnapshotView.prototype = {
_updateBaseOptions: function()
{
- var list = this._getProfiles();
+ var list = this._profiles();
// We're assuming that snapshots can only be added.
if (this.baseSelectElement.length === list.length)
return;
@@ -1046,10 +901,17 @@ WebInspector.HeapSnapshotDataGridList.propertyComparator = function(property, pr
if (!comparator) {
comparator = function(lhs, rhs) {
var l = lhs[property], r = rhs[property];
- if ((l === null || r === null) && property2 !== null)
- l = lhs[property2], r = rhs[property2];
- var result = l < r ? -1 : (l > r ? 1 : 0);
- return isAscending ? result : -result;
+ var result = 0;
+ if (l !== null && r !== null) {
+ result = l < r ? -1 : (l > r ? 1 : 0);
+ }
+ if (result !== 0 || property2 === null) {
+ return isAscending ? result : -result;
+ } else {
+ l = lhs[property2];
+ r = rhs[property2];
+ return l < r ? -1 : (l > r ? 1 : 0);
+ }
};
this.propertyComparators[(isAscending ? 1 : 0)][propertyHash] = comparator;
}
@@ -1148,7 +1010,7 @@ WebInspector.HeapSnapshotProfileType.prototype = {
buttonClicked: function()
{
- InspectorBackend.takeHeapSnapshot();
+ InspectorBackend.takeHeapSnapshot(false);
},
get welcomeMessage()
diff --git a/Source/WebCore/inspector/front-end/NetworkManager.js b/Source/WebCore/inspector/front-end/NetworkManager.js
index ed4309e..da043fe 100644
--- a/Source/WebCore/inspector/front-end/NetworkManager.js
+++ b/Source/WebCore/inspector/front-end/NetworkManager.js
@@ -31,86 +31,114 @@
WebInspector.NetworkManager = function(resourceTreeModel)
{
WebInspector.Object.call(this);
-
- this._inflightResources = {};
this._resourceTreeModel = resourceTreeModel;
- this._lastIdentifierForCachedResource = 0;
- InspectorBackend.registerDomainDispatcher("Network", this);
+ this._dispatcher = new WebInspector.NetworkDispatcher(resourceTreeModel, this);
+ InspectorBackend.cachedResources(this._processCachedResources.bind(this));
}
-WebInspector.NetworkManager.requestContent = function(resource, base64Encode, callback)
-{
- InspectorBackend.resourceContent(resource.loader.frameId, resource.url, base64Encode, callback);
-}
-
-WebInspector.NetworkManager.updateResourceWithRequest = function(resource, request)
-{
- resource.requestMethod = request.httpMethod;
- resource.requestHeaders = request.httpHeaderFields;
- resource.requestFormData = request.requestFormData;
+WebInspector.NetworkManager.EventTypes = {
+ ResourceStarted: "ResourceStarted",
+ ResourceUpdated: "ResourceUpdated",
+ ResourceFinished: "ResourceFinished",
+ MainResourceCommitLoad: "MainResourceCommitLoad"
}
-WebInspector.NetworkManager.updateResourceWithResponse = function(resource, response)
-{
- if (resource.isNull)
- return;
+WebInspector.NetworkManager.prototype = {
+ reset: function()
+ {
+ WebInspector.panels.network.clear();
+ this._resourceTreeModel.reset();
+ InspectorBackend.cachedResources(this._processCachedResources.bind(this));
+ },
- resource.mimeType = response.mimeType;
- resource.expectedContentLength = response.expectedContentLength;
- resource.textEncodingName = response.textEncodingName;
- resource.suggestedFilename = response.suggestedFilename;
- resource.statusCode = response.httpStatusCode;
- resource.statusText = response.httpStatusText;
+ requestContent: function(resource, base64Encode, callback)
+ {
+ function callbackWrapper(success, content)
+ {
+ callback(success ? content : null);
+ }
+ InspectorBackend.resourceContent(resource.loader.frameId, resource.url, base64Encode, callbackWrapper);
+ },
- resource.responseHeaders = response.httpHeaderFields;
- resource.connectionReused = response.connectionReused;
- resource.connectionID = response.connectionID;
+ _processCachedResources: function(mainFramePayload)
+ {
+ var mainResource = this._dispatcher._addFramesRecursively(mainFramePayload);
+ WebInspector.mainResource = mainResource;
+ mainResource.isMainResource = true;
+ },
- if (response.wasCached)
- resource.cached = true;
- else
- resource.timing = response.timing;
-
- if (response.loadInfo) {
- if (response.loadInfo.httpStatusCode)
- resource.statusCode = response.loadInfo.httpStatusCode;
- if (response.loadInfo.httpStatusText)
- resource.statusText = response.loadInfo.httpStatusText;
- resource.requestHeaders = response.loadInfo.requestHeaders;
- resource.responseHeaders = response.loadInfo.responseHeaders;
+ inflightResourceForURL: function(url)
+ {
+ return this._dispatcher._inflightResourcesByURL[url];
}
}
-WebInspector.NetworkManager.updateResourceWithCachedResource = function(resource, cachedResource)
+WebInspector.NetworkManager.prototype.__proto__ = WebInspector.Object.prototype;
+
+WebInspector.NetworkDispatcher = function(resourceTreeModel, manager)
{
- resource.type = WebInspector.Resource.Type[cachedResource.type];
- resource.resourceSize = cachedResource.encodedSize;
- WebInspector.NetworkManager.updateResourceWithResponse(resource, cachedResource.response);
+ this._manager = manager;
+ this._inflightResourcesById = {};
+ this._inflightResourcesByURL = {};
+ this._resourceTreeModel = resourceTreeModel;
+ this._lastIdentifierForCachedResource = 0;
+ InspectorBackend.registerDomainDispatcher("Network", this);
}
-WebInspector.NetworkManager.EventTypes = {
- ResourceStarted: "ResourceStarted",
- ResourceUpdated: "ResourceUpdated",
- ResourceFinished: "ResourceFinished",
- MainResourceCommitLoad: "MainResourceCommitLoad"
-}
+WebInspector.NetworkDispatcher.prototype = {
+ _updateResourceWithRequest: function(resource, request)
+ {
+ resource.requestMethod = request.httpMethod;
+ resource.requestHeaders = request.httpHeaderFields;
+ resource.requestFormData = request.requestFormData;
+ },
-WebInspector.NetworkManager.prototype = {
- reset: function()
+ _updateResourceWithResponse: function(resource, response)
{
- WebInspector.panels.network.clear();
- WebInspector.panels.resources.clear();
- this._resourceTreeModel.reloadCachedResources();
+ if (resource.isNull)
+ return;
+
+ resource.mimeType = response.mimeType;
+ resource.expectedContentLength = response.expectedContentLength;
+ resource.textEncodingName = response.textEncodingName;
+ resource.suggestedFilename = response.suggestedFilename;
+ resource.statusCode = response.httpStatusCode;
+ resource.statusText = response.httpStatusText;
+
+ resource.responseHeaders = response.httpHeaderFields;
+ resource.connectionReused = response.connectionReused;
+ resource.connectionID = response.connectionID;
+
+ if (response.wasCached)
+ resource.cached = true;
+ else
+ resource.timing = response.timing;
+
+ if (response.loadInfo) {
+ if (response.loadInfo.httpStatusCode)
+ resource.statusCode = response.loadInfo.httpStatusCode;
+ if (response.loadInfo.httpStatusText)
+ resource.statusText = response.loadInfo.httpStatusText;
+ resource.requestHeaders = response.loadInfo.requestHeaders;
+ resource.responseHeaders = response.loadInfo.responseHeaders;
+ }
+ },
+
+ _updateResourceWithCachedResource: function(resource, cachedResource)
+ {
+ resource.type = WebInspector.Resource.Type[cachedResource.type];
+ resource.resourceSize = cachedResource.encodedSize;
+ this._updateResourceWithResponse(resource, cachedResource.response);
},
identifierForInitialRequest: function(identifier, url, loader, callStack)
{
- this._startResource(this._resourceTreeModel.createResource(identifier, url, loader, callStack));
+ this._startResource(this._createResource(identifier, url, loader, callStack));
},
willSendRequest: function(identifier, time, request, redirectResponse)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -122,7 +150,7 @@ WebInspector.NetworkManager.prototype = {
resource = this._appendRedirect(resource.identifier, time, request.url);
}
- WebInspector.NetworkManager.updateResourceWithRequest(resource, request);
+ this._updateResourceWithRequest(resource, request);
resource.startTime = time;
if (isRedirect)
@@ -133,7 +161,7 @@ WebInspector.NetworkManager.prototype = {
markResourceAsCached: function(identifier)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -143,14 +171,14 @@ WebInspector.NetworkManager.prototype = {
didReceiveResponse: function(identifier, time, resourceType, response)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
resource.responseReceivedTime = time;
resource.type = WebInspector.Resource.Type[resourceType];
- WebInspector.NetworkManager.updateResourceWithResponse(resource, response);
+ this._updateResourceWithResponse(resource, response);
this._updateResource(resource);
this._resourceTreeModel.addResourceToFrame(resource.loader.frameId, resource);
@@ -158,7 +186,7 @@ WebInspector.NetworkManager.prototype = {
didReceiveContentLength: function(identifier, time, lengthReceived)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -170,7 +198,7 @@ WebInspector.NetworkManager.prototype = {
didFinishLoading: function(identifier, finishTime)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -179,7 +207,7 @@ WebInspector.NetworkManager.prototype = {
didFailLoading: function(identifier, time, localizedDescription)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -190,8 +218,8 @@ WebInspector.NetworkManager.prototype = {
didLoadResourceFromMemoryCache: function(time, cachedResource)
{
- var resource = this._resourceTreeModel.createResource("cached:" + ++this._lastIdentifierForCachedResource, cachedResource.url, cachedResource.loader);
- WebInspector.NetworkManager.updateResourceWithCachedResource(resource, cachedResource);
+ var resource = this._createResource("cached:" + ++this._lastIdentifierForCachedResource, cachedResource.url, cachedResource.loader);
+ this._updateResourceWithCachedResource(resource, cachedResource);
resource.cached = true;
resource.requestMethod = "GET";
this._startResource(resource);
@@ -224,21 +252,21 @@ WebInspector.NetworkManager.prototype = {
if (mainResource) {
WebInspector.mainResource = mainResource;
mainResource.isMainResource = true;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.MainResourceCommitLoad, mainResource);
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.MainResourceCommitLoad, mainResource);
}
}
},
didCreateWebSocket: function(identifier, requestURL)
{
- var resource = this._resourceTreeModel.createResource(identifier, requestURL);
+ var resource = this._createResource(identifier, requestURL);
resource.type = WebInspector.Resource.Type.WebSocket;
this._startResource(resource);
},
willSendWebSocketHandshakeRequest: function(identifier, time, request)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -252,7 +280,7 @@ WebInspector.NetworkManager.prototype = {
didReceiveWebSocketHandshakeResponse: function(identifier, time, response)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
@@ -267,7 +295,7 @@ WebInspector.NetworkManager.prototype = {
didCloseWebSocket: function(identifier, time)
{
- var resource = this._inflightResources[identifier];
+ var resource = this._inflightResourcesById[identifier];
if (!resource)
return;
this._finishResource(resource, time);
@@ -275,40 +303,76 @@ WebInspector.NetworkManager.prototype = {
_appendRedirect: function(identifier, time, redirectURL)
{
- var originalResource = this._inflightResources[identifier];
+ var originalResource = this._inflightResourcesById[identifier];
var previousRedirects = originalResource.redirects || [];
originalResource.identifier = "redirected:" + identifier + "." + previousRedirects.length;
delete originalResource.redirects;
this._finishResource(originalResource, time);
- // We bound resource early, but it happened to be a redirect and won't make it through to
- // the resource tree -- so unbind it.
- // FIXME: we should bind upon adding to the tree only (encapsulated into ResourceTreeModel),
- // Script debugger should do explicit late binding on its own.
- this._resourceTreeModel.unbindResourceURL(originalResource);
-
- var newResource = this._resourceTreeModel.createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace);
+ var newResource = this._createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace);
newResource.redirects = previousRedirects.concat(originalResource);
return newResource;
},
_startResource: function(resource)
{
- this._inflightResources[resource.identifier] = resource;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceStarted, resource);
+ this._inflightResourcesById[resource.identifier] = resource;
+ this._inflightResourcesByURL[resource.url] = resource;
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceStarted, resource);
},
_updateResource: function(resource)
{
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceUpdated, resource);
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceUpdated, resource);
},
_finishResource: function(resource, finishTime)
{
resource.endTime = finishTime;
resource.finished = true;
- this.dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceFinished, resource);
- delete this._inflightResources[resource.identifier];
+ this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.ResourceFinished, resource);
+ delete this._inflightResourcesById[resource.identifier];
+ delete this._inflightResourcesByURL[resource.url];
+ },
+
+ _addFramesRecursively: function(framePayload)
+ {
+ var frameResource = this._createResource(null, framePayload.resource.url, framePayload.resource.loader);
+ this._updateResourceWithRequest(frameResource, framePayload.resource.request);
+ this._updateResourceWithResponse(frameResource, framePayload.resource.response);
+ frameResource.type = WebInspector.Resource.Type["Document"];
+ frameResource.finished = true;
+
+ this._resourceTreeModel.addOrUpdateFrame(framePayload);
+ this._resourceTreeModel.addResourceToFrame(framePayload.id, frameResource);
+
+ for (var i = 0; framePayload.children && i < framePayload.children.length; ++i)
+ this._addFramesRecursively(framePayload.children[i]);
+
+ if (!framePayload.subresources)
+ return;
+
+ for (var i = 0; i < framePayload.subresources.length; ++i) {
+ var cachedResource = framePayload.subresources[i];
+ var resource = this._createResource(null, cachedResource.url, cachedResource.loader);
+ this._updateResourceWithCachedResource(resource, cachedResource);
+ resource.finished = true;
+ this._resourceTreeModel.addResourceToFrame(framePayload.id, resource);
+ }
+ return frameResource;
+ },
+
+ _dispatchEventToListeners: function(eventType, resource)
+ {
+ this._manager.dispatchEventToListeners(eventType, resource);
+ },
+
+ _createResource: function(identifier, url, loader, stackTrace)
+ {
+ var resource = new WebInspector.Resource(identifier, url);
+ resource.loader = loader;
+ if (loader)
+ resource.documentURL = loader.url;
+ resource.stackTrace = stackTrace;
+ return resource;
}
}
-
-WebInspector.NetworkManager.prototype.__proto__ = WebInspector.Object.prototype;
diff --git a/Source/WebCore/inspector/front-end/NetworkPanel.js b/Source/WebCore/inspector/front-end/NetworkPanel.js
index 943ee7f..085f468 100644
--- a/Source/WebCore/inspector/front-end/NetworkPanel.js
+++ b/Source/WebCore/inspector/front-end/NetworkPanel.js
@@ -103,7 +103,7 @@ WebInspector.NetworkPanel.prototype = {
elementsToRestoreScrollPositionsFor: function()
{
- return [this.containerElement];
+ return [this.containerElement, this._dataGrid.scrollContainer];
},
resize: function()
@@ -118,8 +118,6 @@ WebInspector.NetworkPanel.prototype = {
if (!this._viewingResourceMode)
return;
WebInspector.Panel.prototype.updateSidebarWidth.call(this, width);
- if (this._summaryBarElement.parentElement === this.element)
- this._summaryBarElement.style.width = width + "px";
},
updateMainViewWidth: function(width)
@@ -147,7 +145,6 @@ WebInspector.NetworkPanel.prototype = {
delete this._summaryBarRowNode;
}
this._summaryBarElement.addStyleClass("network-summary-bar-bottom");
- this._summaryBarElement.style.setProperty("width", this.sidebarElement.offsetWidth + "px");
this.element.appendChild(this._summaryBarElement);
this._dataGrid.element.style.bottom = "20px";
return;
@@ -157,11 +154,11 @@ WebInspector.NetworkPanel.prototype = {
// Glue status to table.
this._summaryBarRowNode = new WebInspector.NetworkTotalGridNode(this._summaryBarElement);
this._summaryBarElement.removeStyleClass("network-summary-bar-bottom");
- this._summaryBarElement.style.removeProperty("width");
this._dataGrid.appendChild(this._summaryBarRowNode);
this._dataGrid.element.style.bottom = 0;
this._sortItems();
}
+ this._updateOffscreenRows();
},
_resetSummaryBar: function()
@@ -218,6 +215,7 @@ WebInspector.NetworkPanel.prototype = {
this.containerElement.appendChild(this._dataGrid.element);
this._dataGrid.addEventListener("sorting changed", this._sortItems, this);
this._dataGrid.addEventListener("width changed", this._updateDividersIfNeeded, this);
+ this._dataGrid.scrollContainer.addEventListener("scroll", this._updateOffscreenRows.bind(this));
this._patchTimelineHeader();
},
@@ -316,6 +314,7 @@ WebInspector.NetworkPanel.prototype = {
this._dataGrid.sortNodes(sortingFunction, this._dataGrid.sortOrder === "descending");
this._timelineSortSelector.selectedIndex = 0;
+ this._updateOffscreenRows();
},
_sortByTimeline: function()
@@ -334,6 +333,7 @@ WebInspector.NetworkPanel.prototype = {
else
this._timelineGrid.showEventDividers();
this._dataGrid.markColumnAsSortedBy("timeline", "ascending");
+ this._updateOffscreenRows();
},
_createFilterStatusBarItems: function()
@@ -492,6 +492,7 @@ WebInspector.NetworkPanel.prototype = {
target.addStyleClass("selected");
this._showCategory(target.category);
}
+ this._updateOffscreenRows();
},
_scheduleRefresh: function()
@@ -933,7 +934,6 @@ WebInspector.NetworkPanel.prototype = {
this._viewsContainerElement.addStyleClass("hidden");
this.sidebarElement.style.right = 0;
this.sidebarElement.style.removeProperty("width");
- this._summaryBarElement.style.removeProperty("width");
if (this._dataGrid.selectedNode)
this._dataGrid.selectedNode.selected = false;
}
@@ -1023,13 +1023,55 @@ WebInspector.NetworkPanel.prototype = {
var harArchive = {
log: (new WebInspector.HARLog()).build()
}
- offerFileForDownload(JSON.stringify(harArchive));
+ InspectorFrontendHost.copyText(JSON.stringify(harArchive));
},
_exportResource: function(resource)
{
var har = (new WebInspector.HAREntry(resource)).build();
- offerFileForDownload(JSON.stringify(har));
+ InspectorFrontendHost.copyText(JSON.stringify(har));
+ },
+
+ _updateOffscreenRows: function(e)
+ {
+ var dataTableBody = this._dataGrid.dataTableBody;
+ var rows = dataTableBody.children;
+ var recordsCount = rows.length;
+ if (recordsCount < 2)
+ return; // Filler row only.
+
+ var visibleTop = this._dataGrid.scrollContainer.scrollTop;
+ var visibleBottom = visibleTop + this._dataGrid.scrollContainer.offsetHeight;
+
+ var rowHeight = 0;
+
+ // Filler is at recordsCount - 1.
+ var unfilteredRowIndex = 0;
+ for (var i = 0; i < recordsCount - 1; ++i) {
+ var row = rows[i];
+ // Don't touch summaty - quit instead.
+ if (this._summaryBarRowNode && row === this._summaryBarRowNode.element)
+ break;
+
+ var dataGridNode = this._dataGrid.dataGridNodeFromNode(row);
+ if (dataGridNode.isFilteredOut()) {
+ row.removeStyleClass("offscreen");
+ continue;
+ }
+
+ if (!rowHeight)
+ rowHeight = row.offsetHeight;
+
+ var rowIsVisible = unfilteredRowIndex * rowHeight < visibleBottom && (unfilteredRowIndex + 1) * rowHeight > visibleTop;
+ if (rowIsVisible !== row.rowIsVisible) {
+ if (rowIsVisible)
+ row.removeStyleClass("offscreen");
+ else
+ row.addStyleClass("offscreen");
+ row.rowIsVisible = rowIsVisible;
+ }
+ unfilteredRowIndex++;
+ }
}
}
@@ -1335,6 +1377,14 @@ WebInspector.NetworkDataGridNode.prototype = {
this._timeCell = this._createDivInTD("time");
this._createTimelineCell();
this._nameCell.addEventListener("click", this.select.bind(this), false);
+ this._nameCell.addEventListener("dblclick", this._openInNewTab.bind(this), false);
+ },
+
+ isFilteredOut: function()
+ {
+ if (!this._panel._hiddenCategories.all)
+ return false;
+ return this._resource.category.name in this._panel._hiddenCategories;
},
select: function()
@@ -1343,15 +1393,16 @@ WebInspector.NetworkDataGridNode.prototype = {
WebInspector.DataGridNode.prototype.select.apply(this, arguments);
},
+ _openInNewTab: function()
+ {
+ InspectorBackend.openInInspectedWindow(this._resource.url);
+ },
+
get selectable()
{
if (!this._panel._viewingResourceMode)
return false;
- if (!this._panel._hiddenCategories.all)
- return true;
- if (this._panel._hiddenCategories[this._resource.category.name])
- return false;
- return true;
+ return !this.isFilteredOut();
},
_createDivInTD: function(columnIdentifier)
@@ -1668,6 +1719,16 @@ WebInspector.NetworkTotalGridNode = function(element)
}
WebInspector.NetworkTotalGridNode.prototype = {
+ isFilteredOut: function()
+ {
+ return false;
+ },
+
+ get selectable()
+ {
+ return false;
+ },
+
createCells: function()
{
var td = document.createElement("td");
diff --git a/Source/WebCore/inspector/front-end/ObjectPropertiesSection.js b/Source/WebCore/inspector/front-end/ObjectPropertiesSection.js
index e4794f3..88fddd6 100644
--- a/Source/WebCore/inspector/front-end/ObjectPropertiesSection.js
+++ b/Source/WebCore/inspector/front-end/ObjectPropertiesSection.js
@@ -180,7 +180,13 @@ WebInspector.ObjectPropertyTreeElement.prototype = {
this.valueElement = document.createElement("span");
this.valueElement.className = "value";
- this.valueElement.textContent = this.property.value.description;
+
+ var description = this.property.value.description;
+ // Render \n as a nice unicode cr symbol.
+ if (this.property.value.type === "string" && typeof description === "string")
+ description = description.replace(/\n/g, "\u21B5");
+ this.valueElement.textContent = description;
+
if (this.property.isGetter)
this.valueElement.addStyleClass("dimmed");
if (this.property.value.isError())
@@ -188,7 +194,7 @@ WebInspector.ObjectPropertyTreeElement.prototype = {
if (this.property.value.type)
this.valueElement.addStyleClass("console-formatted-" + this.property.value.type);
if (this.property.value.type === "node")
- this.valueElement.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), true);
+ this.valueElement.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), false);
this.listItemElement.removeChildren();
@@ -203,8 +209,7 @@ WebInspector.ObjectPropertyTreeElement.prototype = {
function selectNode(nodeId)
{
if (nodeId) {
- WebInspector.currentPanel = WebInspector.panels.elements;
- WebInspector.panels.elements.focusedDOMNode = WebInspector.domAgent.nodeForId(nodeId);
+ WebInspector.panels.elements.switchToAndFocus(WebInspector.domAgent.nodeForId(nodeId));
}
}
diff --git a/Source/WebCore/inspector/front-end/PleaseWaitMessage.js b/Source/WebCore/inspector/front-end/PleaseWaitMessage.js
new file mode 100644
index 0000000..54d805d
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/PleaseWaitMessage.js
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.PleaseWaitMessage = function()
+{
+ this.element = document.createElement("div");
+ this.element.className = "please-wait-msg";
+ this.element.textContent = WebInspector.UIString("Please wait\u2026");
+
+ this.cancelButton = document.createElement("button");
+ this.cancelButton.textContent = WebInspector.UIString("Cancel");
+ this.cancelButton.addEventListener("click", this._cancelClicked.bind(this), false);
+}
+
+WebInspector.PleaseWaitMessage.prototype = {
+ _cancelClicked: function()
+ {
+ if (this._cancelCallback) {
+ var cancelCallback = this._cancelCallback;
+ delete this._cancelCallback;
+ cancelCallback();
+ }
+ },
+
+ hide: function()
+ {
+ var instance = WebInspector.PleaseWaitMessage.prototype.instance;
+ var message = instance.element;
+ if (message.parentNode)
+ message.parentNode.removeChild(message);
+ },
+
+ get instance()
+ {
+ if (!"_instance" in WebInspector.PleaseWaitMessage.prototype)
+ WebInspector.PleaseWaitMessage.prototype._instance = new WebInspector.PleaseWaitMessage();
+ return WebInspector.PleaseWaitMessage.prototype._instance;
+ },
+
+ show: function(element, cancelCallback)
+ {
+ var instance = WebInspector.PleaseWaitMessage.prototype.instance;
+ var message = instance.element;
+ if (message.parentNode === element)
+ return;
+ else if (message.parentNode)
+ message.parentNode.removeChild(message);
+ if (message.childNodes.length > 1)
+ message.removeChild(instance.cancelButton);
+ if (cancelCallback) {
+ message.appendChild(instance.cancelButton);
+ instance._cancelCallback = cancelCallback;
+ }
+ element.appendChild(message);
+ },
+
+ startAction: function(element, actionCallback, cancelCallback)
+ {
+ var instance = WebInspector.PleaseWaitMessage.prototype.instance;
+ var message = instance.element;
+ if (message.parentNode === element) {
+ actionCallback();
+ return;
+ }
+
+ function doAction()
+ {
+ try {
+ actionCallback();
+ } finally {
+ if (message.parentNode)
+ message.parentNode.removeChild(message);
+ }
+ }
+
+ WebInspector.PleaseWaitMessage.prototype.show(element, cancelCallback);
+ setTimeout(doAction, 0);
+ }
+};
+
diff --git a/Source/WebCore/inspector/front-end/ProfilesPanel.js b/Source/WebCore/inspector/front-end/ProfilesPanel.js
index 2e0ab28..b87ea7f 100644
--- a/Source/WebCore/inspector/front-end/ProfilesPanel.js
+++ b/Source/WebCore/inspector/front-end/ProfilesPanel.js
@@ -112,7 +112,7 @@ WebInspector.ProfilesPanel = function()
this.enableToggleButton = new WebInspector.StatusBarButton("", "enable-toggle-status-bar-item");
this.enableToggleButton.addEventListener("click", this._toggleProfiling.bind(this), false);
- this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear CPU profiles."), "clear-status-bar-item");
+ this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear all profiles."), "clear-status-bar-item");
this.clearResultsButton.addEventListener("click", this._clearProfiles.bind(this), false);
this.profileViewStatusBarItemsContainer = document.createElement("div");
@@ -195,7 +195,7 @@ WebInspector.ProfilesPanel.prototype = {
this._profiles = [];
this._profilesIdMap = {};
this._profileGroups = {};
- this._profileGroupsForLinks = {}
+ this._profileGroupsForLinks = {};
this._profilesWereRequested = false;
this.sidebarTreeElement.removeStyleClass("some-expandable");
@@ -259,6 +259,13 @@ WebInspector.ProfilesPanel.prototype = {
_addProfileHeader: function(profile)
{
+ if (this.hasTemporaryProfile(profile.typeId)) {
+ if (profile.typeId === WebInspector.CPUProfileType.TypeId)
+ this._removeProfileHeader(this._temporaryRecordingProfile);
+ else
+ this._removeProfileHeader(this._temporaryTakingSnapshot);
+ }
+
var typeId = profile.typeId;
var profileType = this.getProfileType(typeId);
var sidebarParent = profileType.treeElement;
@@ -308,6 +315,7 @@ WebInspector.ProfilesPanel.prototype = {
}
var profileTreeElement = profileType.createSidebarTreeElementForProfile(profile);
+ profile.sideBarElement = profileTreeElement;
profileTreeElement.small = small;
if (alternateTitle)
profileTreeElement.mainTitle = alternateTitle;
@@ -370,17 +378,20 @@ WebInspector.ProfilesPanel.prototype = {
this.profileViewStatusBarItemsContainer.removeChildren();
var statusBarItems = view.statusBarItems;
- for (var i = 0; i < statusBarItems.length; ++i)
- this.profileViewStatusBarItemsContainer.appendChild(statusBarItems[i]);
+ if (statusBarItems)
+ for (var i = 0; i < statusBarItems.length; ++i)
+ this.profileViewStatusBarItemsContainer.appendChild(statusBarItems[i]);
},
getProfiles: function(typeId)
{
var result = [];
var profilesCount = this._profiles.length;
- for (var i = 0; i < profilesCount; ++i)
- if (this._profiles[i].typeId === typeId)
- result.push(this._profiles[i]);
+ for (var i = 0; i < profilesCount; ++i) {
+ var profile = this._profiles[i];
+ if (!profile.isTemporary && profile.typeId === typeId)
+ result.push(profile);
+ }
return result;
},
@@ -398,17 +409,6 @@ WebInspector.ProfilesPanel.prototype = {
return !!this._profilesIdMap[this._makeKey(profile.uid, profile.typeId)];
},
- updateProfile: function(profile)
- {
- var profilesCount = this._profiles.length;
- for (var i = 0; i < profilesCount; ++i)
- if (this._profiles[i].typeId === profile.typeId
- && this._profiles[i].uid === profile.uid) {
- this._profiles[i] = profile;
- break;
- }
- },
-
loadHeapSnapshot: function(uid, callback)
{
var profile = this._profilesIdMap[this._makeKey(uid, WebInspector.HeapSnapshotProfileType.TypeId)];
@@ -423,6 +423,7 @@ WebInspector.ProfilesPanel.prototype = {
profile._is_loading = true;
profile._callbacks = [callback];
profile._json = "";
+ profile.sideBarElement.subtitle = WebInspector.UIString("Loading…");
InspectorBackend.getProfile(profile.typeId, profile.uid);
}
},
@@ -444,13 +445,23 @@ WebInspector.ProfilesPanel.prototype = {
var callbacks = profile._callbacks;
delete profile._callbacks;
- var loadedSnapshot = JSON.parse(profile._json);
- delete profile._json;
- delete profile._is_loading;
- profile._loaded = true;
- WebInspector.HeapSnapshotView.prototype.processLoadedSnapshot(profile, loadedSnapshot);
- for (var i = 0; i < callbacks.length; ++i)
- callbacks[i](profile);
+ profile.sideBarElement.subtitle = WebInspector.UIString("Parsing…");
+ window.setTimeout(doParse, 0);
+
+ function doParse()
+ {
+ var loadedSnapshot = JSON.parse(profile._json);
+ delete profile._json;
+ delete profile._is_loading;
+ profile._loaded = true;
+ profile.sideBarElement.subtitle = "";
+ if (!Preferences.detailedHeapProfiles)
+ WebInspector.HeapSnapshotView.prototype.processLoadedSnapshot(profile, loadedSnapshot);
+ else
+ WebInspector.DetailedHeapshotView.prototype.processLoadedSnapshot(profile, loadedSnapshot);
+ for (var i = 0; i < callbacks.length; ++i)
+ callbacks[i](profile);
+ }
},
showView: function(view)
@@ -579,10 +590,13 @@ WebInspector.ProfilesPanel.prototype = {
_toggleProfiling: function(optionalAlways)
{
- if (this._profilerEnabled)
+ if (this._profilerEnabled) {
+ WebInspector.settings.profilerEnabled = false;
InspectorBackend.disableProfiler(true);
- else
- InspectorBackend.enableProfiler(!!optionalAlways);
+ } else {
+ WebInspector.settings.profilerEnabled = !!optionalAlways;
+ InspectorBackend.enableProfiler();
+ }
},
_populateProfiles: function()
@@ -629,6 +643,31 @@ WebInspector.ProfilesPanel.prototype = {
this._removeProfileHeader(this._temporaryRecordingProfile);
}
this.updateProfileTypeButtons();
+ },
+
+ takeHeapSnapshot: function(detailed)
+ {
+ if (!this.hasTemporaryProfile(WebInspector.HeapSnapshotProfileType.TypeId)) {
+ if (!this._temporaryTakingSnapshot) {
+ this._temporaryTakingSnapshot = {
+ typeId: WebInspector.HeapSnapshotProfileType.TypeId,
+ title: WebInspector.UIString("Snapshotting…"),
+ uid: -1,
+ isTemporary: true
+ };
+ }
+ this._addProfileHeader(this._temporaryTakingSnapshot);
+ }
+ InspectorBackend.takeHeapSnapshot(detailed);
+ },
+
+ _reportHeapSnapshotProgress: function(done, total)
+ {
+ if (this.hasTemporaryProfile(WebInspector.HeapSnapshotProfileType.TypeId)) {
+ this._temporaryTakingSnapshot.sideBarElement.subtitle = WebInspector.UIString("%.2f%%", (done / total) * 100);
+ if (done >= total)
+ this._removeProfileHeader(this._temporaryTakingSnapshot);
+ }
}
}
@@ -674,6 +713,11 @@ WebInspector.ProfilerDispatcher.prototype = {
setRecordingProfile: function(isProfiling)
{
this._profiler._setRecordingProfile(isProfiling);
+ },
+
+ reportHeapSnapshotProgress: function(done, total)
+ {
+ this._profiler._reportHeapSnapshotProgress(done, total);
}
}
@@ -717,16 +761,6 @@ WebInspector.ProfileSidebarTreeElement.prototype = {
this.refreshTitles();
},
- get subtitle()
- {
- // There is no subtitle.
- },
-
- set subtitle(x)
- {
- // Can't change subtitle.
- },
-
set searchMatches(matches)
{
if (!matches) {
diff --git a/Source/WebCore/inspector/front-end/Resource.js b/Source/WebCore/inspector/front-end/Resource.js
index 00c1fb9..6cf5b9c 100644
--- a/Source/WebCore/inspector/front-end/Resource.js
+++ b/Source/WebCore/inspector/front-end/Resource.js
@@ -31,9 +31,9 @@ WebInspector.Resource = function(identifier, url)
this.url = url;
this._startTime = -1;
this._endTime = -1;
- this._requestMethod = "";
this._category = WebInspector.resourceCategories.other;
this._pendingContentCallbacks = [];
+ this._responseHeadersSize = 0;
}
// Keep these in sync with WebCore::InspectorResource::Type
@@ -237,8 +237,21 @@ WebInspector.Resource.prototype = {
get transferSize()
{
- // FIXME: this is wrong for chunked-encoding resources.
- return this.cached ? 0 : Number(this.responseHeaders["Content-Length"] || this.resourceSize || 0);
+ if (this.cached)
+ return 0;
+ if (this.statusCode === 304) // Not modified
+ return this._responseHeadersSize;
+ // FIXME: We prefer using Content-Length over resourceSize as
+ // resourceSize may differ from actual transfer size if platform's
+ // network stack performed decoding (e.g. gzip decompression).
+ // The Content-Length, though, is expected to come from raw
+ // response headers and will reflect actual transfer length.
+ // This won't work for chunked content encoding, so fall back to
+ // resourceSize when we don't have Content-Length. This still won't
+ // work for chunks with non-trivial encodings. We need a way to
+ // get actaul transfer size from the network stack.
+ var bodySize = Number(this.responseHeaders["Content-Length"] || this.resourceSize);
+ return this._responseHeadersSize + bodySize;
},
get expectedContentLength()
@@ -303,7 +316,6 @@ WebInspector.Resource.prototype = {
delete this._timing;
},
-
get timing()
{
return this._timing;
@@ -431,6 +443,8 @@ WebInspector.Resource.prototype = {
set responseHeaders(x)
{
this._responseHeaders = x;
+ // FIXME: we should take actual headers size from network stack, when possible.
+ this._responseHeadersSize = this._headersSize(x);
delete this._sortedResponseHeaders;
delete this._responseCookies;
@@ -512,6 +526,14 @@ WebInspector.Resource.prototype = {
}
},
+ _headersSize: function(headers)
+ {
+ var size = 0;
+ for (var header in headers)
+ size += header.length + headers[header].length + 3; // _typical_ overhead per herader is ": ".length + "\n".length.
+ return size;
+ },
+
get errors()
{
return this._errors || 0;
@@ -550,9 +572,9 @@ WebInspector.Resource.prototype = {
return true;
if (typeof this.type === "undefined"
- || this.type === WebInspector.Resource.Type.Other
- || this.type === WebInspector.Resource.Type.XHR
- || this.type === WebInspector.Resource.Type.WebSocket)
+ || this.type === WebInspector.Resource.Type.Other
+ || this.type === WebInspector.Resource.Type.XHR
+ || this.type === WebInspector.Resource.Type.WebSocket)
return true;
if (!this.mimeType)
@@ -671,8 +693,8 @@ WebInspector.Resource.prototype = {
callback(null, null);
return;
}
- if (this._content) {
- callback(this._content, this._contentEncoded);
+ if (typeof this._content !== "undefined") {
+ callback(this.content, this._contentEncoded);
return;
}
this._pendingContentCallbacks.push(callback);
@@ -697,7 +719,7 @@ WebInspector.Resource.prototype = {
{
const maxDataUrlSize = 1024 * 1024;
// If resource content is not available or won't fit a data URL, fall back to using original URL.
- if (!this._content || this._content.length > maxDataUrlSize)
+ if (this._content == null || this._content.length > maxDataUrlSize)
return this.url;
return "data:" + this.mimeType + (this._contentEncoded ? ";base64," : ",") + this._content;
@@ -719,7 +741,7 @@ WebInspector.Resource.prototype = {
this._pendingContentCallbacks.length = 0;
delete this._contentRequested;
}
- WebInspector.NetworkManager.requestContent(this, this._contentEncoded, onResourceContent.bind(this));
+ WebInspector.networkManager.requestContent(this, this._contentEncoded, onResourceContent.bind(this));
}
}
diff --git a/Source/WebCore/inspector/front-end/ResourceTreeModel.js b/Source/WebCore/inspector/front-end/ResourceTreeModel.js
index b114b94..da2d47a 100644
--- a/Source/WebCore/inspector/front-end/ResourceTreeModel.js
+++ b/Source/WebCore/inspector/front-end/ResourceTreeModel.js
@@ -31,16 +31,17 @@
WebInspector.ResourceTreeModel = function()
{
- this.reloadCachedResources();
+ this.reset();
}
WebInspector.ResourceTreeModel.prototype = {
- reloadCachedResources: function()
+ reset: function()
{
this._resourcesByURL = {};
this._resourcesByFrameId = {};
this._subframes = {};
- InspectorBackend.cachedResources(this._processCachedResources.bind(this));
+ if (WebInspector.panels)
+ WebInspector.panels.resources.clear();
},
addOrUpdateFrame: function(frame)
@@ -81,6 +82,7 @@ WebInspector.ResourceTreeModel.prototype = {
this._resourcesByFrameId[frameId] = resourcesForFrame;
}
resourcesForFrame.push(resource);
+ this._bindResourceURL(resource);
WebInspector.panels.resources.addResourceToFrame(frameId, resource);
},
@@ -128,7 +130,7 @@ WebInspector.ResourceTreeModel.prototype = {
return entry;
},
- bindResourceURL: function(resource)
+ _bindResourceURL: function(resource)
{
var resourceForURL = this._resourcesByURL[resource.url];
if (!resourceForURL)
@@ -168,7 +170,7 @@ WebInspector.ResourceTreeModel.prototype = {
preservedResourcesForFrame.push(resource);
continue;
}
- this.unbindResourceURL(resource);
+ this._unbindResourceURL(resource);
}
delete this._resourcesByFrameId[frameId];
@@ -194,7 +196,7 @@ WebInspector.ResourceTreeModel.prototype = {
return false;
},
- unbindResourceURL: function(resource)
+ _unbindResourceURL: function(resource)
{
var resourceForURL = this._resourcesByURL[resource.url];
if (!resourceForURL)
@@ -208,52 +210,5 @@ WebInspector.ResourceTreeModel.prototype = {
}
delete this._resourcesByURL[resource.url];
- },
-
- _processCachedResources: function(mainFramePayload)
- {
- var mainResource = this._addFramesRecursively(mainFramePayload);
- WebInspector.mainResource = mainResource;
- mainResource.isMainResource = true;
- },
-
- _addFramesRecursively: function(framePayload)
- {
- var frameResource = this.createResource(null, framePayload.resource.url, framePayload.resource.loader);
- WebInspector.NetworkManager.updateResourceWithRequest(frameResource, framePayload.resource.request);
- WebInspector.NetworkManager.updateResourceWithResponse(frameResource, framePayload.resource.response);
- frameResource.type = WebInspector.Resource.Type["Document"];
- frameResource.finished = true;
-
- this.addOrUpdateFrame(framePayload);
- this.addResourceToFrame(framePayload.id, frameResource);
-
- for (var i = 0; framePayload.children && i < framePayload.children.length; ++i)
- this._addFramesRecursively(framePayload.children[i]);
-
- if (!framePayload.subresources)
- return;
-
- for (var i = 0; i < framePayload.subresources.length; ++i) {
- var cachedResource = framePayload.subresources[i];
- var resource = this.createResource(null, cachedResource.url, cachedResource.loader);
- WebInspector.NetworkManager.updateResourceWithCachedResource(resource, cachedResource);
- resource.finished = true;
- this.addResourceToFrame(framePayload.id, resource);
- }
- return frameResource;
- },
-
- createResource: function(identifier, url, loader, stackTrace)
- {
- var resource = new WebInspector.Resource(identifier, url);
- resource.loader = loader;
- if (loader) {
- resource.documentURL = loader.url;
- this.bindResourceURL(resource);
- }
- resource.stackTrace = stackTrace;
-
- return resource;
}
}
diff --git a/Source/WebCore/inspector/front-end/ResourceView.js b/Source/WebCore/inspector/front-end/ResourceView.js
index b69097d..e38cd0a 100644
--- a/Source/WebCore/inspector/front-end/ResourceView.js
+++ b/Source/WebCore/inspector/front-end/ResourceView.js
@@ -50,7 +50,11 @@ WebInspector.ResourceView.createResourceView = function(resource)
case WebInspector.resourceCategories.stylesheets:
case WebInspector.resourceCategories.scripts:
case WebInspector.resourceCategories.xhr:
- return new WebInspector.SourceView(resource);
+ var contentProvider = new WebInspector.SourceFrameContentProviderForResource(resource);
+ var isScript = resource.type === WebInspector.Resource.Type.Script;
+ var view = new WebInspector.SourceFrame(contentProvider, resource.url, isScript);
+ view.resource = resource;
+ return view;
case WebInspector.resourceCategories.images:
return new WebInspector.ImageView(resource);
case WebInspector.resourceCategories.fonts:
@@ -68,7 +72,7 @@ WebInspector.ResourceView.resourceViewTypeMatchesResource = function(resource)
case WebInspector.resourceCategories.stylesheets:
case WebInspector.resourceCategories.scripts:
case WebInspector.resourceCategories.xhr:
- return resourceView.__proto__ === WebInspector.SourceView.prototype;
+ return resourceView.__proto__ === WebInspector.SourceFrame.prototype;
case WebInspector.resourceCategories.images:
return resourceView.__proto__ === WebInspector.ImageView.prototype;
case WebInspector.resourceCategories.fonts:
@@ -105,7 +109,6 @@ WebInspector.ResourceView.recreateResourceView = function(resource)
if (scrollTop)
newView.scrollTop = scrollTop;
- WebInspector.panels.scripts.viewRecreated(oldView, newView);
return newView;
}
@@ -115,3 +118,37 @@ WebInspector.ResourceView.existingResourceViewForResource = function(resource)
return null;
return resource._resourcesView;
}
+
+
+WebInspector.SourceFrameContentProviderForResource = function(resource)
+{
+ WebInspector.SourceFrameContentProvider.call(this);
+ this._resource = resource;
+}
+
+//This is a map from resource.type to mime types
+//found in WebInspector.SourceTokenizer.Registry.
+WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType = {
+ 0: "text/html",
+ 1: "text/css",
+ 4: "text/javascript"
+}
+
+WebInspector.SourceFrameContentProviderForResource.prototype = {
+ requestContent: function(callback)
+ {
+ function contentLoaded(content)
+ {
+ var mimeType = WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType[this._resource.type] || this._resource.mimeType;
+ callback(mimeType, content);
+ }
+ this._resource.requestContent(contentLoaded.bind(this));
+ },
+
+ scripts: function()
+ {
+ return WebInspector.debuggerModel.scriptsForURL(this._resource.url);
+ }
+}
+
+WebInspector.SourceFrameContentProviderForResource.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype;
diff --git a/Source/WebCore/inspector/front-end/ResourcesPanel.js b/Source/WebCore/inspector/front-end/ResourcesPanel.js
index 7e1fcc0..7c0649f 100644
--- a/Source/WebCore/inspector/front-end/ResourcesPanel.js
+++ b/Source/WebCore/inspector/front-end/ResourcesPanel.js
@@ -56,12 +56,6 @@ WebInspector.ResourcesPanel = function(database)
this.applicationCacheListTreeElement = new WebInspector.StorageCategoryTreeElement(this, WebInspector.UIString("Application Cache"), "ApplicationCache", "application-cache-storage-tree-item");
this.sidebarTree.appendChild(this.applicationCacheListTreeElement);
- if (Preferences.fileSystemEnabled) {
- this.fileSystemListTreeElement = new WebInspector.StorageCategoryTreeElement(this, WebInspector.UIString("File System"), "FileSystem", "file-system-storage-tree-item");
- this.sidebarTree.appendChild(this.fileSystemListTreeElement);
- this.fileSystemListTreeElement.expand();
- }
-
this.storageViews = document.createElement("div");
this.storageViews.id = "storage-views";
this.storageViews.className = "diff-container";
@@ -102,9 +96,19 @@ WebInspector.ResourcesPanel.prototype = {
{
WebInspector.Panel.prototype.show.call(this);
- if (this.visibleView instanceof WebInspector.ResourceView)
+ if (this.visibleView && this.visibleView.resource)
this._showResourceView(this.visibleView.resource);
+ this._initDefaultSelection();
+ },
+
+ loadEventFired: function()
+ {
+ this._initDefaultSelection();
+ },
+
+ _initDefaultSelection: function()
+ {
if (this._initializedDefaultSelection)
return;
@@ -119,17 +123,14 @@ WebInspector.ResourcesPanel.prototype = {
}
}
}
- this._initDefaultSelection();
- },
- _initDefaultSelection: function()
- {
if (WebInspector.mainResource && this.resourcesListTreeElement && this.resourcesListTreeElement.expanded)
this.showResource(WebInspector.mainResource);
},
reset: function()
{
+ delete this._initializedDefaultSelection;
this._origins = {};
this._domains = {};
for (var i = 0; i < this._databases.length; ++i) {
@@ -147,7 +148,6 @@ WebInspector.ResourcesPanel.prototype = {
this._domStorage = [];
this._cookieViews = {};
- this._fileSystemView = null;
this._applicationCacheView = null;
delete this._cachedApplicationCacheViewStatus;
@@ -157,8 +157,6 @@ WebInspector.ResourcesPanel.prototype = {
this.sessionStorageListTreeElement.removeChildren();
this.cookieListTreeElement.removeChildren();
this.applicationCacheListTreeElement.removeChildren();
- if (Preferences.fileSystemEnabled)
- this.fileSystemListTreeElement.removeChildren();
this.storageViews.removeChildren();
this.storageViewStatusBarItemsContainer.removeChildren();
@@ -170,6 +168,7 @@ WebInspector.ResourcesPanel.prototype = {
clear: function()
{
this.resourcesListTreeElement.removeChildren();
+ this._treeElementForFrameId = {};
this.reset();
},
@@ -291,16 +290,6 @@ WebInspector.ResourcesPanel.prototype = {
var applicationCacheTreeElement = new WebInspector.ApplicationCacheTreeElement(this, domain);
this.applicationCacheListTreeElement.appendChild(applicationCacheTreeElement);
}
-
- if (Preferences.fileSystemEnabled) {
- // FIXME: This should match the SecurityOrigin::toString(), add a test for this.
- var securityOrigin = parsedURL.scheme + "://" + parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "");
- if (!this._origins[securityOrigin]) {
- this._origins[securityOrigin] = true;
- var fileSystemTreeElement = new WebInspector.FileSystemTreeElement(this, securityOrigin);
- this.fileSystemListTreeElement.appendChild(fileSystemTreeElement);
- }
- }
},
addDOMStorage: function(domStorage)
@@ -338,12 +327,12 @@ WebInspector.ResourcesPanel.prototype = {
canShowSourceLine: function(url, line)
{
- return !!WebInspector.resourceTreeModel.resourceForURL(url);
+ return !!WebInspector.resourceForURL(url);
},
showSourceLine: function(url, line)
{
- var resource = WebInspector.resourceTreeModel.resourceForURL(url);
+ var resource = WebInspector.resourceForURL(url);
if (resource.type === WebInspector.Resource.Type.XHR) {
// Show XHRs in the network panel only.
if (WebInspector.panels.network && WebInspector.panels.network.canShowSourceLine(url, line)) {
@@ -352,7 +341,7 @@ WebInspector.ResourcesPanel.prototype = {
}
return;
}
- this.showResource(WebInspector.resourceTreeModel.resourceForURL(url), line);
+ this.showResource(WebInspector.resourceForURL(url), line);
},
showResource: function(resource, line)
@@ -378,7 +367,7 @@ WebInspector.ResourcesPanel.prototype = {
var view = WebInspector.ResourceView.resourceViewForResource(resource);
// Consider rendering diff markup here.
- if (resource.baseRevision && view instanceof WebInspector.SourceView) {
+ if (resource.baseRevision && view instanceof WebInspector.SourceFrame) {
function callback(baseContent)
{
if (baseContent)
@@ -413,7 +402,7 @@ WebInspector.ResourcesPanel.prototype = {
} else
offset = i - right[i].row;
}
- view.sourceFrame.markDiff(diffData);
+ view.markDiff(diffData);
},
showDatabase: function(database, tableName)
@@ -481,12 +470,6 @@ WebInspector.ResourcesPanel.prototype = {
this._applicationCacheView.updateStatus(this._cachedApplicationCacheViewStatus);
},
- showFileSystem: function(treeElement, origin)
- {
- this._fileSystemView = new WebInspector.FileSystemView(treeElement, origin);
- this._innerShowView(this._fileSystemView);
- },
-
showCategoryView: function(categoryName)
{
if (!this._categoryView)
@@ -635,24 +618,6 @@ WebInspector.ResourcesPanel.prototype = {
this._applicationCacheView.updateStatus(status);
},
- updateFileSystemPath: function(root, type, origin)
- {
- if (this._fileSystemView && this._fileSystemView === this.visibleView)
- this._fileSystemView.updateFileSystemPath(root, type, origin);
- },
-
- updateFileSystemError: function(type, origin)
- {
- if (this._fileSystemView && this._fileSystemView === this.visibleView)
- this._fileSystemView.updateFileSystemError(type, origin);
- },
-
- setFileSystemDisabled: function()
- {
- if (this._fileSystemView && this._fileSystemView === this.visibleView)
- this._fileSystemView.setFileSystemDisabled();
- },
-
updateNetworkState: function(isNowOnline)
{
if (this._applicationCacheView && this._applicationCacheView === this.visibleView)
@@ -690,7 +655,7 @@ WebInspector.ResourcesPanel.prototype = {
var views = [];
const visibleView = this.visibleView;
- if (visibleView instanceof WebInspector.ResourceView && visibleView.performSearch)
+ if (visibleView.performSearch)
views.push(visibleView);
function callback(resourceTreeElement)
@@ -1076,7 +1041,7 @@ WebInspector.FrameResourceTreeElement.prototype = {
_errorsWarningsUpdated: function()
{
- // FIXME: move to the Script/SourceView.
+ // FIXME: move to the SourceFrame.
if (!this._resource.warnings && !this._resource.errors) {
var view = WebInspector.ResourceView.existingResourceViewForResource(this._resource);
if (view && view.clearMessages)
@@ -1275,27 +1240,6 @@ WebInspector.ResourceRevisionTreeElement.prototype = {
WebInspector.ResourceRevisionTreeElement.prototype.__proto__ = WebInspector.BaseStorageTreeElement.prototype;
-WebInspector.FileSystemTreeElement = function(storagePanel, origin)
-{
- WebInspector.BaseStorageTreeElement.call(this, storagePanel, null, origin, "file-system-storage-tree-item");
- this._origin = origin;
-}
-
-WebInspector.FileSystemTreeElement.prototype = {
- get itemURL()
- {
- return "file-system://" + encodeURI(this._origin);
- },
-
- onselect: function()
- {
- WebInspector.BaseStorageTreeElement.prototype.onselect.call(this);
- this._storagePanel.showFileSystem(this, this._origin);
- }
-}
-
-WebInspector.FileSystemTreeElement.prototype.__proto__ = WebInspector.BaseStorageTreeElement.prototype;
-
WebInspector.StorageCategoryView = function()
{
WebInspector.View.call(this);
diff --git a/Source/WebCore/inspector/front-end/ScopeChainSidebarPane.js b/Source/WebCore/inspector/front-end/ScopeChainSidebarPane.js
index d3190a9..bdbb0cf 100644
--- a/Source/WebCore/inspector/front-end/ScopeChainSidebarPane.js
+++ b/Source/WebCore/inspector/front-end/ScopeChainSidebarPane.js
@@ -26,6 +26,8 @@
WebInspector.ScopeChainSidebarPane = function()
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Scope Variables"));
+ this._sections = [];
+ this._expandedSections = {};
this._expandedProperties = [];
}
@@ -34,9 +36,6 @@ WebInspector.ScopeChainSidebarPane.prototype = {
{
this.bodyElement.removeChildren();
- this.sections = [];
- this.callFrame = callFrame;
-
if (!callFrame) {
var infoElement = document.createElement("div");
infoElement.className = "info";
@@ -45,6 +44,18 @@ WebInspector.ScopeChainSidebarPane.prototype = {
return;
}
+ for (var i = 0; i < this._sections.length; ++i) {
+ var section = this._sections[i];
+ if (!section.title)
+ continue;
+ if (section.expanded)
+ this._expandedSections[section.title] = true;
+ else
+ delete this._expandedSections[section.title];
+ }
+
+ this._sections = [];
+
var foundLocalScope = false;
var scopeChain = callFrame.scopeChain;
for (var i = 0; i < scopeChain.length; ++i) {
@@ -81,10 +92,10 @@ WebInspector.ScopeChainSidebarPane.prototype = {
section.editInSelectedCallFrameWhenPaused = true;
section.pane = this;
- if (!foundLocalScope || scopeObjectProxy.isLocal)
+ if (!foundLocalScope || scopeObjectProxy.isLocal || title in this._expandedSections)
section.expanded = true;
- this.sections.push(section);
+ this._sections.push(section);
this.bodyElement.appendChild(section.element);
}
}
diff --git a/Source/WebCore/inspector/front-end/Script.js b/Source/WebCore/inspector/front-end/Script.js
index 6e3b18d..8d3eabf 100644
--- a/Source/WebCore/inspector/front-end/Script.js
+++ b/Source/WebCore/inspector/front-end/Script.js
@@ -78,7 +78,7 @@ WebInspector.Script.prototype = {
{
function extractSourceLine()
{
- lineNumber -= this.startingLine;
+ lineNumber -= this.lineOffset;
callback(this._source.substring(this._lineEndings[lineNumber - 1], this._lineEndings[lineNumber]));
}
diff --git a/Source/WebCore/inspector/front-end/ScriptFormatter.js b/Source/WebCore/inspector/front-end/ScriptFormatter.js
index 69ffb74..5c00e51 100644
--- a/Source/WebCore/inspector/front-end/ScriptFormatter.js
+++ b/Source/WebCore/inspector/front-end/ScriptFormatter.js
@@ -28,107 +28,117 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.ScriptFormatter = function(source)
+WebInspector.ScriptFormatter = function()
{
- this._originalSource = source;
- this._originalLineEndings = source.findAll("\n");
- this._originalLineEndings.push(source.length);
-}
-
-WebInspector.ScriptFormatter.locationToPosition = function(lineEndings, location)
-{
- var position = location.line ? lineEndings[location.line - 1] + 1 : 0;
- return position + location.column;
-}
-
-WebInspector.ScriptFormatter.positionToLocation = function(lineEndings, position)
-{
- var location = {};
- location.line = lineEndings.upperBound(position - 1);
- if (!location.line)
- location.column = position;
- else
- location.column = position - lineEndings[location.line - 1] - 1;
- return location;
+ this._worker = new Worker("ScriptFormatterWorker.js");
+ this._worker.onmessage = this._handleMessage.bind(this);
+ this._worker.onerror = this._handleError.bind(this);
+ this._tasks = [];
}
WebInspector.ScriptFormatter.prototype = {
- format: function(callback)
+ formatContent: function(content, callback)
{
- var worker = new Worker("scriptFormatterWorker.js");
- function messageHandler(event)
+ var chunks = this._splitContentIntoChunks(content.text, content.scriptRanges);
+
+ function didFormatChunks()
{
- var formattedSource = event.data;
- this._formatted = true;
- this._formattedSource = formattedSource;
- this._formattedLineEndings = formattedSource.findAll("\n");
- this._formattedLineEndings.push(formattedSource.length);
- this._buildMapping();
- callback(formattedSource);
+ var result = this._buildContentFromChunks(chunks);
+ callback(new WebInspector.FormattedSourceFrameContent(content, result.text, result.mapping));
}
- worker.onmessage = messageHandler.bind(this);
- worker.postMessage(this._originalSource);
+ this._formatChunks(chunks, 0, didFormatChunks.bind(this));
},
- _buildMapping: function()
+ _splitContentIntoChunks: function(text, scriptRanges)
{
- this._originalSymbolPositions = [];
- this._formattedSymbolPositions = [];
- var lastCodePosition = 0;
- var regexp = /[\$\.\w]+|{|}|;/g;
- while (true) {
- var match = regexp.exec(this._formattedSource);
- if (!match)
- break;
- var position = this._originalSource.indexOf(match[0], lastCodePosition);
- if (position === -1)
- continue;
- this._originalSymbolPositions.push(position);
- this._formattedSymbolPositions.push(match.index);
- lastCodePosition = position + match[0].length;
+ var chunks = [];
+ function addChunk(start, end, isScript)
+ {
+ var chunk = {};
+ chunk.start = start;
+ chunk.end = end;
+ chunk.isScript = isScript;
+ chunk.text = text.substring(start, end);
+ chunks.push(chunk);
+ }
+ var currentPosition = 0;
+ for (var i = 0; i < scriptRanges.length; ++i) {
+ var scriptRange = scriptRanges[i];
+ if (currentPosition < scriptRange.start)
+ addChunk(currentPosition, scriptRange.start, false);
+ addChunk(scriptRange.start, scriptRange.end, true);
+ currentPosition = scriptRange.end;
}
- this._originalSymbolPositions.push(this._originalSource.length);
- this._formattedSymbolPositions.push(this._formattedSource.length);
+ if (currentPosition < text.length)
+ addChunk(currentPosition, text.length, false);
+ return chunks;
},
- originalLineNumberToFormattedLineNumber: function(originalLineNumber)
+ _formatChunks: function(chunks, index, callback)
{
- if (!this._formatted)
- return originalLineNumber;
- var originalPosition = WebInspector.ScriptFormatter.locationToPosition(this._originalLineEndings, { line: originalLineNumber, column: 0 });
- return this.originalPositionToFormattedLineNumber(originalPosition);
+ while(true) {
+ if (index === chunks.length) {
+ callback();
+ return;
+ }
+ var chunk = chunks[index++];
+ if (chunk.isScript)
+ break;
+ }
+
+ function didFormat(formattedSource, mapping)
+ {
+ chunk.text = formattedSource;
+ chunk.mapping = mapping;
+ this._formatChunks(chunks, index, callback);
+ }
+ this._formatScript(chunk.text, didFormat.bind(this));
},
- formattedLineNumberToOriginalLineNumber: function(formattedLineNumber)
+ _buildContentFromChunks: function(chunks)
{
- if (!this._formatted)
- return formattedLineNumber;
- var originalPosition = this.formattedLineNumberToOriginalPosition(formattedLineNumber);
- return WebInspector.ScriptFormatter.positionToLocation(this._originalLineEndings, originalPosition).line;
+ var text = "";
+ var mapping = { original: [], formatted: [] };
+ for (var i = 0; i < chunks.length; ++i) {
+ var chunk = chunks[i];
+ mapping.original.push(chunk.start);
+ mapping.formatted.push(text.length);
+ if (chunk.isScript) {
+ if (text)
+ text += "\n";
+ for (var j = 0; j < chunk.mapping.original.length; ++j) {
+ mapping.original.push(chunk.mapping.original[j] + chunk.start);
+ mapping.formatted.push(chunk.mapping.formatted[j] + text.length);
+ }
+ text += chunk.text;
+ } else {
+ if (text)
+ text += "\n";
+ text += chunk.text;
+ }
+ mapping.original.push(chunk.end);
+ mapping.formatted.push(text.length);
+ }
+ return { text: text, mapping: mapping };
},
- originalPositionToFormattedLineNumber: function(originalPosition)
+ _formatScript: function(source, callback)
{
- var lineEndings = this._formatted ? this._formattedLineEndings : this._originalLineEndings;
- if (this._formatted)
- formattedPosition = this._convertPosition(this._originalSymbolPositions, this._formattedSymbolPositions, originalPosition);
- return WebInspector.ScriptFormatter.positionToLocation(lineEndings, formattedPosition).line;
+ this._tasks.push({ source: source, callback: callback });
+ this._worker.postMessage(source);
},
- formattedLineNumberToOriginalPosition: function(formattedLineNumber)
+ _handleMessage: function(event)
{
- var lineEndings = this._formatted ? this._formattedLineEndings : this._originalLineEndings;
- var formattedPosition = WebInspector.ScriptFormatter.locationToPosition(lineEndings, { line: formattedLineNumber, column: 0 });
- if (!this._formatted)
- return formattedPosition;
- return this._convertPosition(this._formattedSymbolPositions, this._originalSymbolPositions, formattedPosition);
+ var task = this._tasks.shift();
+ task.callback(event.data.formattedSource, event.data.mapping);
},
- _convertPosition: function(symbolPositions1, symbolPositions2, position)
+ _handleError: function(event)
{
- var index = symbolPositions1.upperBound(position);
- if (index === symbolPositions2.length - 1)
- return symbolPositions2[index] - 1;
- return symbolPositions2[index];
+ console.warn("Error in script formatter worker:", event);
+ event.preventDefault()
+ var task = this._tasks.shift();
+ task.callback(task.source, { original: [], formatted: [] });
}
}
diff --git a/Source/WebCore/inspector/front-end/ScriptFormatterWorker.js b/Source/WebCore/inspector/front-end/ScriptFormatterWorker.js
index e900317..1a4c28e 100644
--- a/Source/WebCore/inspector/front-end/ScriptFormatterWorker.js
+++ b/Source/WebCore/inspector/front-end/ScriptFormatterWorker.js
@@ -32,7 +32,10 @@ var parse = loadModule("parse-js.js");
var process = loadModule("process.js");
onmessage = function(event) {
- postMessage(beautify(event.data));
+ var source = event.data;
+ var formattedSource = beautify(source);
+ var mapping = buildMapping(source, formattedSource);
+ postMessage({ formattedSource: formattedSource, mapping: mapping });
};
function beautify(source)
@@ -47,6 +50,25 @@ function beautify(source)
return process.gen_code(ast, beautifyOptions);
}
+function buildMapping(source, formattedSource)
+{
+ var mapping = { original: [], formatted: [] };
+ var lastCodePosition = 0;
+ var regexp = /[\$\.\w]+|{|}/g;
+ while (true) {
+ var match = regexp.exec(formattedSource);
+ if (!match)
+ break;
+ var position = source.indexOf(match[0], lastCodePosition);
+ if (position === -1)
+ continue;
+ mapping.original.push(position);
+ mapping.formatted.push(match.index);
+ lastCodePosition = position + match[0].length;
+ }
+ return mapping;
+}
+
function loadModule(src)
{
var request = new XMLHttpRequest();
diff --git a/Source/WebCore/inspector/front-end/ScriptView.js b/Source/WebCore/inspector/front-end/ScriptView.js
deleted file mode 100644
index f631fcc..0000000
--- a/Source/WebCore/inspector/front-end/ScriptView.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.ScriptView = function(script)
-{
- WebInspector.View.call(this);
-
- this.element.addStyleClass("script-view");
-
- var contentProvider = new WebInspector.SourceFrameContentProviderForScript(script);
- this.sourceFrame = new WebInspector.SourceFrame(this.element, contentProvider, "", true);
-}
-
-WebInspector.ScriptView.prototype = {
- // The following methods are pulled from SourceView, since they are
- // generic and work with ScriptView just fine.
-
- show: WebInspector.SourceView.prototype.show,
- hide: WebInspector.SourceView.prototype.hide,
- revealLine: WebInspector.SourceView.prototype.revealLine,
- highlightLine: WebInspector.SourceView.prototype.highlightLine,
- addMessage: WebInspector.SourceView.prototype.addMessage,
- clearMessages: WebInspector.SourceView.prototype.clearMessages,
- searchCanceled: WebInspector.SourceView.prototype.searchCanceled,
- performSearch: WebInspector.SourceView.prototype.performSearch,
- jumpToFirstSearchResult: WebInspector.SourceView.prototype.jumpToFirstSearchResult,
- jumpToLastSearchResult: WebInspector.SourceView.prototype.jumpToLastSearchResult,
- jumpToNextSearchResult: WebInspector.SourceView.prototype.jumpToNextSearchResult,
- jumpToPreviousSearchResult: WebInspector.SourceView.prototype.jumpToPreviousSearchResult,
- showingFirstSearchResult: WebInspector.SourceView.prototype.showingFirstSearchResult,
- showingLastSearchResult: WebInspector.SourceView.prototype.showingLastSearchResult,
- _jumpToSearchResult: WebInspector.SourceView.prototype._jumpToSearchResult,
- resize: WebInspector.SourceView.prototype.resize
-}
-
-WebInspector.ScriptView.prototype.__proto__ = WebInspector.View.prototype;
-
-
-WebInspector.SourceFrameContentProviderForScript = function(script)
-{
- WebInspector.SourceFrameContentProvider.call(this);
- this._script = script;
-}
-
-WebInspector.SourceFrameContentProviderForScript.prototype = {
- requestContent: function(callback)
- {
- if (this._script.source) {
- callback("text/javascript", this._script.source);
- return;
- }
-
- function didRequestSource(content)
- {
- var source;
- if (content) {
- var prefix = "";
- for (var i = 0; i < this._script.startingLine - 1; ++i)
- prefix += "\n";
- source = prefix + content;
- } else
- source = WebInspector.UIString("<source is not available>");
- callback("text/javascript", source);
- }
- this._script.requestSource(didRequestSource.bind(this));
- },
-
- scripts: function()
- {
- return [this._script];
- }
-}
-
-WebInspector.SourceFrameContentProviderForScript.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype;
diff --git a/Source/WebCore/inspector/front-end/ScriptsPanel.js b/Source/WebCore/inspector/front-end/ScriptsPanel.js
index a74f80d..264291f 100644
--- a/Source/WebCore/inspector/front-end/ScriptsPanel.js
+++ b/Source/WebCore/inspector/front-end/ScriptsPanel.js
@@ -242,9 +242,7 @@ WebInspector.ScriptsPanel.prototype = {
_parsedScriptSource: function(event)
{
- var sourceID = event.data;
- var script = WebInspector.debuggerModel.scriptForSourceID(sourceID);
- this._addScript(script);
+ this._addScript(event.data);
},
_failedToParseScriptSource: function(event)
@@ -257,16 +255,23 @@ WebInspector.ScriptsPanel.prototype = {
var sourceID = event.data.sourceID;
var oldSource = event.data.oldSource;
+ var oldView, newView;
var script = WebInspector.debuggerModel.scriptForSourceID(sourceID);
- var oldView = script._scriptView;
- if (oldView) {
- script._scriptView = new WebInspector.ScriptView(script);
- this.viewRecreated(oldView, script._scriptView);
- }
if (script.resource) {
+ oldView = this._urlToSourceFrame[script.resource.url];
+ delete this._urlToSourceFrame[script.resource.url];
+ newView = this._sourceFrameForResource(script.resource);
var revertHandle = WebInspector.debuggerModel.editScriptSource.bind(WebInspector.debuggerModel, sourceID, oldSource);
script.resource.setContent(script.source, revertHandle);
+ } else {
+ var oldView = script._sourceFrame;
+ delete script._sourceFrame;
+ newView = this._sourceFrameForScript(script);
}
+ newView.scrollTop = oldView.scrollTop;
+
+ if (this.visibleView === oldView)
+ this.visibleView = newView;
var callFrames = WebInspector.debuggerModel.callFrames;
if (callFrames.length)
@@ -275,7 +280,7 @@ WebInspector.ScriptsPanel.prototype = {
_addScript: function(script)
{
- var resource = WebInspector.resourceForURL(script.sourceURL);
+ var resource = WebInspector.networkManager.inflightResourceForURL(script.sourceURL) || WebInspector.resourceForURL(script.sourceURL);
if (resource) {
if (resource.finished) {
// Resource is finished, bind the script right away.
@@ -295,17 +300,41 @@ WebInspector.ScriptsPanel.prototype = {
_resourceLoadingFinished: function(e)
{
var resource = e.target;
+
+ var visible = false;
+ var select = this.filesSelectElement;
for (var i = 0; i < resource._scriptsPendingResourceLoad.length; ++i) {
// Bind script to resource.
var script = resource._scriptsPendingResourceLoad[i];
script.resource = resource;
+ if (select.options[select.selectedIndex] === script.filesSelectOption)
+ visible = true;
+
// Remove script from the files list.
script.filesSelectOption.parentElement.removeChild(script.filesSelectOption);
}
// Adding first script will add resource.
this._addScriptToFilesMenu(resource._scriptsPendingResourceLoad[0]);
delete resource._scriptsPendingResourceLoad;
+
+ if (visible)
+ this._showScriptOrResource(resource, { initialLoad: true });
+ },
+
+ addConsoleMessage: function(message)
+ {
+ this._messages.push(message);
+ var sourceFrame = this._urlToSourceFrame[message.url];
+ if (sourceFrame)
+ sourceFrame.addMessage(message);
+ },
+
+ clearConsoleMessages: function()
+ {
+ this._messages = [];
+ for (var url in this._urlToSourceFrame)
+ this._urlToSourceFrame[url].clearMessages();
},
selectedCallFrameId: function()
@@ -316,7 +345,7 @@ WebInspector.ScriptsPanel.prototype = {
return selectedCallFrame.id;
},
- evaluateInSelectedCallFrame: function(code, updateInterface, objectGroup, callback)
+ evaluateInSelectedCallFrame: function(code, updateInterface, objectGroup, includeCommandLineAPI, callback)
{
var selectedCallFrame = this.sidebarPanes.callstack.selectedCallFrame;
if (!this._paused || !selectedCallFrame)
@@ -325,24 +354,15 @@ WebInspector.ScriptsPanel.prototype = {
if (typeof updateInterface === "undefined")
updateInterface = true;
- var self = this;
function updatingCallbackWrapper(result)
{
- callback(result);
- if (updateInterface)
- self.sidebarPanes.scopechain.update(selectedCallFrame);
- }
- this.doEvalInCallFrame(selectedCallFrame, code, objectGroup, updatingCallbackWrapper);
- },
-
- doEvalInCallFrame: function(callFrame, code, objectGroup, callback)
- {
- function evalCallback(result)
- {
- if (result)
+ if (result) {
callback(WebInspector.RemoteObject.fromPayload(result));
+ if (updateInterface)
+ this.sidebarPanes.scopechain.update(selectedCallFrame);
+ }
}
- InspectorBackend.evaluateOnCallFrame(callFrame.id, code, objectGroup, evalCallback);
+ InspectorBackend.evaluateOnCallFrame(selectedCallFrame.id, code, objectGroup, includeCommandLineAPI, updatingCallbackWrapper.bind(this));
},
_debuggerPaused: function(event)
@@ -405,6 +425,8 @@ WebInspector.ScriptsPanel.prototype = {
this._currentBackForwardIndex = -1;
this._updateBackAndForwardButtons();
+ this._urlToSourceFrame = {};
+ this._messages = [];
this._resourceForURLInFilesSelect = {};
this.filesSelectElement.removeChildren();
this.functionsSelectElement.removeChildren();
@@ -434,12 +456,6 @@ WebInspector.ScriptsPanel.prototype = {
x.show(this.viewsContainerElement);
},
- viewRecreated: function(oldView, newView)
- {
- if (this.visibleView === oldView)
- this.visibleView = newView;
- },
-
canShowSourceLine: function(url, line)
{
if (!this._debuggerEnabled)
@@ -484,43 +500,37 @@ WebInspector.ScriptsPanel.prototype = {
this.sidebarPanes.callstack.handleShortcut(event);
},
- scriptViewForScript: function(script)
- {
- if (!script)
- return null;
- if (!script._scriptView)
- script._scriptView = new WebInspector.ScriptView(script);
- return script._scriptView;
- },
-
- sourceFrameForScript: function(script)
- {
- var view = this.scriptViewForScript(script);
- if (!view)
- return null;
-
- // Setting up the source frame requires that we be attached.
- if (!this.element.parentNode)
- this.attach();
-
- return view.sourceFrame;
- },
-
_sourceFrameForScriptOrResource: function(scriptOrResource)
{
if (scriptOrResource instanceof WebInspector.Resource)
return this._sourceFrameForResource(scriptOrResource);
- if (scriptOrResource instanceof WebInspector.Script)
- return this.sourceFrameForScript(scriptOrResource);
+ return this._sourceFrameForScript(scriptOrResource);
},
_sourceFrameForResource: function(resource)
{
- var view = WebInspector.ResourceView.resourceViewForResource(resource);
- if (!view)
- return null;
+ var sourceFrame = this._urlToSourceFrame[resource.url];
+ if (sourceFrame)
+ return sourceFrame;
+ var contentProvider = new WebInspector.SourceFrameContentProviderForResource(resource);
+ var isScript = resource.type === WebInspector.Resource.Type.Script;
+ sourceFrame = new WebInspector.SourceFrame(contentProvider, resource.url, isScript);
+ for (var i = 0; i < this._messages.length; ++i) {
+ var message = this._messages[i];
+ if (this._messages[i].url === resource.url)
+ sourceFrame.addMessage(message);
+ }
+ this._urlToSourceFrame[resource.url] = sourceFrame;
+ return sourceFrame;
+ },
- return view.sourceFrame;
+ _sourceFrameForScript: function(script)
+ {
+ if (script._sourceFrame)
+ return script._sourceFrame;
+ var contentProvider = new WebInspector.SourceFrameContentProviderForScript(script);
+ script._sourceFrame = new WebInspector.SourceFrame(contentProvider, script.sourceURL, true);
+ return script._sourceFrame;
},
_showScriptOrResource: function(scriptOrResource, options)
@@ -531,12 +541,7 @@ WebInspector.ScriptsPanel.prototype = {
if (!scriptOrResource)
return;
- var view;
- if (scriptOrResource instanceof WebInspector.Resource)
- view = WebInspector.ResourceView.resourceViewForResource(scriptOrResource);
- else if (scriptOrResource instanceof WebInspector.Script)
- view = this.scriptViewForScript(scriptOrResource);
-
+ var view = this._sourceFrameForScriptOrResource(scriptOrResource);
if (!view)
return;
@@ -738,7 +743,7 @@ WebInspector.ScriptsPanel.prototype = {
this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on all exceptions.\nClick to Pause on uncaught exceptions.");
else if (pauseOnExceptionsState == WebInspector.ScriptsPanel.PauseOnExceptionsState.PauseOnUncaughtExceptions)
this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on uncaught exceptions.\nClick to Not pause on exceptions.");
-
+
this._pauseOnExceptionButton.state = pauseOnExceptionsState;
WebInspector.settings.pauseOnExceptionState = pauseOnExceptionsState;
}
@@ -824,8 +829,8 @@ WebInspector.ScriptsPanel.prototype = {
_formatScript: function()
{
- if (this.visibleView && this.visibleView.sourceFrame)
- this.visibleView.sourceFrame.formatSource();
+ if (this.visibleView)
+ this.visibleView.formatSource();
},
_enableDebugging: function()
@@ -841,10 +846,13 @@ WebInspector.ScriptsPanel.prototype = {
this._waitingToPause = false;
this._stepping = false;
- if (this._debuggerEnabled)
- InspectorBackend.disableDebugger(true);
- else
- InspectorBackend.enableDebugger(!!optionalAlways);
+ if (this._debuggerEnabled) {
+ WebInspector.settings.debuggerEnabled = false;
+ WebInspector.debuggerModel.disableDebugger();
+ } else {
+ WebInspector.settings.debuggerEnabled = !!optionalAlways;
+ WebInspector.debuggerModel.enableDebugger();
+ }
},
_togglePauseOnExceptions: function()
@@ -1043,3 +1051,41 @@ WebInspector.ScriptsPanel.prototype = {
}
WebInspector.ScriptsPanel.prototype.__proto__ = WebInspector.Panel.prototype;
+
+
+WebInspector.SourceFrameContentProviderForScript = function(script)
+{
+ WebInspector.SourceFrameContentProvider.call(this);
+ this._script = script;
+}
+
+WebInspector.SourceFrameContentProviderForScript.prototype = {
+ requestContent: function(callback)
+ {
+ if (this._script.source) {
+ callback("text/javascript", this._script.source);
+ return;
+ }
+
+ function didRequestSource(content)
+ {
+ var source;
+ if (content) {
+ var prefix = "";
+ for (var i = 0; i < this._script.startingLine - 1; ++i)
+ prefix += "\n";
+ source = prefix + content;
+ } else
+ source = WebInspector.UIString("<source is not available>");
+ callback("text/javascript", source);
+ }
+ this._script.requestSource(didRequestSource.bind(this));
+ },
+
+ scripts: function()
+ {
+ return [this._script];
+ }
+}
+
+WebInspector.SourceFrameContentProviderForScript.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype;
diff --git a/Source/WebCore/inspector/front-end/Settings.js b/Source/WebCore/inspector/front-end/Settings.js
index e26b1d7..68b81a5 100644
--- a/Source/WebCore/inspector/front-end/Settings.js
+++ b/Source/WebCore/inspector/front-end/Settings.js
@@ -45,29 +45,33 @@ var Preferences = {
onlineDetectionEnabled: true,
nativeInstrumentationEnabled: false,
resourceExportEnabled: false,
- fileSystemEnabled: false,
useDataURLForResourceImageIcons: true,
showTimingTab: false,
showCookiesTab: false,
- debugMode: false
+ debugMode: false,
+ heapProfilerPresent: false,
+ detailedHeapProfiles: false
}
WebInspector.Settings = function()
{
this.installApplicationSetting("colorFormat", "hex");
this.installApplicationSetting("consoleHistory", []);
+ this.installApplicationSetting("debuggerEnabled", false);
+ this.installApplicationSetting("profilerEnabled", false);
this.installApplicationSetting("eventListenersFilter", "all");
+ this.installApplicationSetting("lastActivePanel", "elements");
this.installApplicationSetting("lastViewedScriptFile", "application");
+ this.installApplicationSetting("monitoringXHREnabled", false);
+ this.installApplicationSetting("pauseOnExceptionState", WebInspector.ScriptsPanel.PauseOnExceptionsState.DontPauseOnExceptions);
this.installApplicationSetting("resourcesLargeRows", true);
this.installApplicationSetting("resourcesSortOptions", {timeOption: "responseTime", sizeOption: "transferSize"});
this.installApplicationSetting("resourceViewTab", "content");
this.installApplicationSetting("showInheritedComputedStyleProperties", false);
this.installApplicationSetting("showUserAgentStyles", true);
this.installApplicationSetting("watchExpressions", []);
- this.installApplicationSetting("lastActivePanel", "elements");
- this.installApplicationSetting("pauseOnExceptionState", WebInspector.ScriptsPanel.PauseOnExceptionsState.DontPauseOnExceptions);
+ this.installApplicationSetting("breakpoints", []);
- this.installProjectSetting("breakpoints", {});
this.installProjectSetting("nativeBreakpoints", []);
}
diff --git a/Source/WebCore/inspector/front-end/ShowMoreDataGridNode.js b/Source/WebCore/inspector/front-end/ShowMoreDataGridNode.js
new file mode 100644
index 0000000..4fe2fef
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/ShowMoreDataGridNode.js
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ShowMoreDataGridNode = function(callback, nextCount, allCount)
+{
+ function populate(count)
+ {
+ var index = this.parent.children.indexOf(this);
+ this.parent.removeChild(this);
+ callback(count, index);
+ }
+
+ this.showNext = document.createElement("button");
+ this.showNext.setAttribute("type", "button");
+ this.showNext.textContent = WebInspector.UIString("Show next %d", nextCount);
+ this.showNext.addEventListener("click", populate.bind(this, nextCount), false);
+
+ if (allCount) {
+ this.showAll = document.createElement("button");
+ this.showAll.setAttribute("type", "button");
+ this.showAll.textContent = WebInspector.UIString("Show all %d", allCount);
+ this.showAll.addEventListener("click", populate.bind(this, allCount), false);
+ }
+
+ WebInspector.DataGridNode.call(this, {summaryRow:true}, false);
+ this.selectable = false;
+}
+
+WebInspector.ShowMoreDataGridNode.prototype = {
+ createCells: function()
+ {
+ var cell = document.createElement("td");
+ if (this.depth)
+ cell.style.setProperty("padding-left", (this.depth * this.dataGrid.indentWidth) + "px");
+ cell.appendChild(this.showNext);
+ if (this.showAll)
+ cell.appendChild(this.showAll);
+ this._element.appendChild(cell);
+
+ var columns = this.dataGrid.columns;
+ var count = 0;
+ for (var c in columns)
+ ++count;
+ while (--count > 0) {
+ cell = document.createElement("td");
+ this._element.appendChild(cell);
+ }
+ }
+};
+
+WebInspector.ShowMoreDataGridNode.prototype.__proto__ = WebInspector.DataGridNode.prototype;
diff --git a/Source/WebCore/inspector/front-end/SidebarTreeElement.js b/Source/WebCore/inspector/front-end/SidebarTreeElement.js
index c08b0ef..a27c457 100644
--- a/Source/WebCore/inspector/front-end/SidebarTreeElement.js
+++ b/Source/WebCore/inspector/front-end/SidebarTreeElement.js
@@ -164,8 +164,10 @@ WebInspector.SidebarTreeElement.prototype = {
if (this.subtitleElement.textContent !== subtitle)
this.subtitleElement.textContent = subtitle;
this.titlesElement.removeStyleClass("no-subtitle");
- } else
+ } else {
+ this.subtitleElement.textContent = "";
this.titlesElement.addStyleClass("no-subtitle");
+ }
},
isEventWithinDisclosureTriangle: function(event)
diff --git a/Source/WebCore/inspector/front-end/SourceFrame.js b/Source/WebCore/inspector/front-end/SourceFrame.js
index eb89f24..f2e0be1 100644
--- a/Source/WebCore/inspector/front-end/SourceFrame.js
+++ b/Source/WebCore/inspector/front-end/SourceFrame.js
@@ -28,17 +28,22 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.SourceFrame = function(parentElement, contentProvider, url, isScript)
+WebInspector.SourceFrame = function(contentProvider, url, isScript)
{
- this._parentElement = parentElement;
+ WebInspector.View.call(this);
+
+ this.element.addStyleClass("script-view");
+
this._contentProvider = contentProvider;
this._url = url;
this._isScript = isScript;
-
this._textModel = new WebInspector.TextEditorModel();
this._textModel.replaceTabsWithSpaces = true;
+ this._currentSearchResultIndex = -1;
+ this._searchResults = [];
+
this._messages = [];
this._rowMessages = {};
this._messageBubbles = {};
@@ -48,28 +53,41 @@ WebInspector.SourceFrame = function(parentElement, contentProvider, url, isScrip
WebInspector.SourceFrame.prototype = {
- set visible(visible)
+ show: function(parentElement)
{
+ WebInspector.View.prototype.show.call(this, parentElement);
+
if (!this._contentRequested) {
this._contentRequested = true;
this._contentProvider.requestContent(this._createTextViewer.bind(this));
}
- if (visible) {
- if (this._textViewer && this._scrollTop)
- this._textViewer.element.scrollTop = this._scrollTop;
- if (this._textViewer && this._scrollLeft)
- this._textViewer.element.scrollLeft = this._scrollLeft;
- if (this._textViewer)
- this._textViewer.resize();
- } else {
- this._hidePopup();
- if (this._textViewer) {
- this._scrollTop = this._textViewer.element.scrollTop;
- this._scrollLeft = this._textViewer.element.scrollLeft;
- this._textViewer.freeCachedElements();
- }
+ if (this._textViewer) {
+ if (this._scrollTop)
+ this._textViewer.scrollTop = this._scrollTop;
+ if (this._scrollLeft)
+ this._textViewer.scrollLeft = this._scrollLeft;
+ this._textViewer.resize();
+ }
+ },
+
+ hide: function()
+ {
+ if (this._textViewer) {
+ this._scrollTop = this._textViewer.scrollTop;
+ this._scrollLeft = this._textViewer.scrollLeft;
+ this._textViewer.freeCachedElements();
}
+
+ WebInspector.View.prototype.hide.call(this);
+
+ this._hidePopup();
+ this._clearLineHighlight();
+ },
+
+ hasContent: function()
+ {
+ return true;
},
markDiff: function(diffData)
@@ -95,7 +113,7 @@ WebInspector.SourceFrame.prototype = {
// Don't add the message if there is no message or valid line or if the msg isn't an error or warning.
if (!msg.message || msg.line <= 0 || !msg.isErrorOrWarning())
return;
- this._messages.push(msg)
+ this._messages.push(msg);
if (this._textViewer)
this._addMessageToSource(msg);
},
@@ -127,13 +145,14 @@ WebInspector.SourceFrame.prototype = {
get scrollTop()
{
- return this._textViewer ? this._textViewer.element.scrollTop : 0;
+ return this._textViewer ? this._textViewer.scrollTop : this._scrollTop;
},
set scrollTop(scrollTop)
{
+ this._scrollTop = scrollTop;
if (this._textViewer)
- this._textViewer.element.scrollTop = scrollTop;
+ this._textViewer.scrollTop = scrollTop;
},
highlightLine: function(line)
@@ -144,7 +163,7 @@ WebInspector.SourceFrame.prototype = {
this._lineToHighlight = line;
},
- clearLineHighlight: function()
+ _clearLineHighlight: function()
{
if (this._textViewer)
this._textViewer.clearLineHighlight();
@@ -152,11 +171,10 @@ WebInspector.SourceFrame.prototype = {
delete this._lineToHighlight;
},
- _createTextViewer: function(mimeType, content)
+ _createTextViewer: function(mimeType, text)
{
- this._content = content;
- this._textModel.setText(null, content);
- this._formatter = new WebInspector.ScriptFormatter(content);
+ this._content = new WebInspector.SourceFrameContent(text, this._contentProvider.scripts());
+ this._textModel.setText(null, text);
this._textViewer = new WebInspector.TextViewer(this._textModel, WebInspector.platform, this._url);
var element = this._textViewer.element;
@@ -165,7 +183,7 @@ WebInspector.SourceFrame.prototype = {
element.addEventListener("mousemove", this._mouseMove.bind(this), true);
element.addEventListener("scroll", this._scroll.bind(this), true);
element.addEventListener("dblclick", this._doubleClick.bind(this), true);
- this._parentElement.appendChild(element);
+ this.element.appendChild(element);
this._textViewer.beginUpdates();
@@ -177,12 +195,6 @@ WebInspector.SourceFrame.prototype = {
delete this._lineNumberToReveal;
}
- if (this._pendingMarkRange) {
- var range = this._pendingMarkRange;
- this.markAndRevealRange(range);
- delete this._pendingMarkRange;
- }
-
if (this._lineToHighlight) {
this.highlightLine(this._lineToHighlight);
delete this._lineToHighlight;
@@ -196,9 +208,8 @@ WebInspector.SourceFrame.prototype = {
this._textViewer.endUpdates();
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
-
- if (this._canEditScripts)
- this._textViewer.editCallback = this._editLine.bind(this);
+ WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointRemoved, this._breakpointRemoved, this);
+ WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointResolved, this._breakpointResolved, this);
},
_setTextViewerDecorations: function()
@@ -214,44 +225,108 @@ WebInspector.SourceFrame.prototype = {
if (this._executionLine)
this.setExecutionLine(this._executionLine);
- var breakpoints = this._breakpoints();
- for (var i = 0; i < breakpoints.length; ++i)
- this._addBreakpoint(breakpoints[i]);
+ this._breakpointIdToTextViewerLineNumber = {};
+ this._textViewerLineNumberToBreakpointId = {};
+ var breakpoints = WebInspector.debuggerModel.breakpoints;
+ for (var id in breakpoints)
+ this._breakpointAdded({ data: breakpoints[id] });
this._textViewer.resize();
this._textViewer.endUpdates();
},
- findSearchMatches: function(query, finishedCallback)
+ _shouldDisplayBreakpoint: function(breakpoint)
{
- function doFindSearchMatches()
+ if (this._url)
+ return this._url === breakpoint.url;
+ var scripts = this._contentProvider.scripts();
+ for (var i = 0; i < scripts.length; ++i) {
+ if (breakpoint.sourceID === scripts[i].sourceID)
+ return true;
+ }
+ return false;
+ },
+
+ performSearch: function(query, callback)
+ {
+ // Call searchCanceled since it will reset everything we need before doing a new search.
+ this.searchCanceled();
+
+ function doFindSearchMatches(query)
{
- var ranges = [];
+ this._currentSearchResultIndex = -1;
+ this._searchResults = [];
// First do case-insensitive search.
var regexObject = createSearchRegex(query);
- this._collectRegexMatches(regexObject, ranges);
+ this._collectRegexMatches(regexObject, this._searchResults);
// Then try regex search if user knows the / / hint.
try {
if (/^\/.*\/$/.test(query))
- this._collectRegexMatches(new RegExp(query.substring(1, query.length - 1)), ranges);
+ this._collectRegexMatches(new RegExp(query.substring(1, query.length - 1)), this._searchResults);
} catch (e) {
// Silent catch.
}
- finishedCallback(ranges);
+
+ callback(this, this._searchResults.length);
}
if (this._textViewer)
- doFindSearchMatches.call(this);
+ doFindSearchMatches.call(this, query);
else
- this._delayedFindSearchMatches = doFindSearchMatches.bind(this);
+ this._delayedFindSearchMatches = doFindSearchMatches.bind(this, query);
+
},
- cancelFindSearchMatches: function()
+ searchCanceled: function()
{
delete this._delayedFindSearchMatches;
+ if (!this._textViewer)
+ return;
+
+ this._currentSearchResultIndex = -1;
+ this._searchResults = [];
+ this._textViewer.markAndRevealRange(null);
+ },
+
+ jumpToFirstSearchResult: function()
+ {
+ this._jumpToSearchResult(0);
+ },
+
+ jumpToLastSearchResult: function()
+ {
+ this._jumpToSearchResult(this._searchResults.length - 1);
+ },
+
+ jumpToNextSearchResult: function()
+ {
+ this._jumpToSearchResult(this._currentSearchResultIndex + 1);
+ },
+
+ jumpToPreviousSearchResult: function()
+ {
+ this._jumpToSearchResult(this._currentSearchResultIndex - 1);
+ },
+
+ showingFirstSearchResult: function()
+ {
+ return this._searchResults.length && this._currentSearchResultIndex === 0;
+ },
+
+ showingLastSearchResult: function()
+ {
+ return this._searchResults.length && this._currentSearchResultIndex === (this._searchResults.length - 1);
+ },
+
+ _jumpToSearchResult: function(index)
+ {
+ if (!this._textViewer || !this._searchResults.length)
+ return;
+ this._currentSearchResultIndex = (index + this._searchResults.length) % this._searchResults.length;
+ this._textViewer.markAndRevealRange(this._searchResults[this._currentSearchResultIndex]);
},
_collectRegexMatches: function(regexObject, ranges)
@@ -271,22 +346,6 @@ WebInspector.SourceFrame.prototype = {
return ranges;
},
- markAndRevealRange: function(range)
- {
- if (this._textViewer)
- this._textViewer.markAndRevealRange(range);
- else
- this._pendingMarkRange = range;
- },
-
- clearMarkedRange: function()
- {
- if (this._textViewer) {
- this._textViewer.markAndRevealRange(null);
- } else
- delete this._pendingMarkRange;
- },
-
_incrementMessageRepeatCount: function(msg, repeatDelta)
{
if (!msg._resourceMessageLineElement)
@@ -307,7 +366,7 @@ WebInspector.SourceFrame.prototype = {
this._executionLine = lineNumber;
if (!this._textViewer)
return;
- var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(this._executionLine - 1);
+ var textViewerLineNumber = this._originalLocationToTextViewerLineNumber(this._executionLine - 1, 0);
this._textViewer.addDecoration(textViewerLineNumber, "webkit-execution-line");
},
@@ -315,7 +374,7 @@ WebInspector.SourceFrame.prototype = {
{
if (!this._textViewer)
return;
- var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(this._executionLine - 1);
+ var textViewerLineNumber = this._originalLocationToTextViewerLineNumber(this._executionLine - 1, 0);
this._textViewer.removeDecoration(textViewerLineNumber, "webkit-execution-line");
delete this._executionLine;
},
@@ -356,7 +415,7 @@ WebInspector.SourceFrame.prototype = {
_addMessageToSource: function(msg)
{
- if (msg.line >= this._textModel.linesCount)
+ if (msg.line > this._textModel.linesCount)
return;
var messageBubbleElement = this._messageBubbles[msg.line];
@@ -412,54 +471,55 @@ WebInspector.SourceFrame.prototype = {
{
var breakpoint = event.data;
- if (breakpoint.sourceID in this._sourceIDSet())
- this._addBreakpoint(breakpoint);
- },
+ if (!this._shouldDisplayBreakpoint(breakpoint))
+ return;
- _addBreakpoint: function(breakpoint)
- {
- var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
+ var resolved = breakpoint.locations.length;
+ var location = resolved ? breakpoint.locations[0] : breakpoint;
+
+ var textViewerLineNumber = this._originalLocationToTextViewerLineNumber(location.lineNumber, location.columnNumber);
if (textViewerLineNumber >= this._textModel.linesCount)
return;
- breakpoint.addEventListener("enable-changed", this._breakpointChanged, this);
- breakpoint.addEventListener("condition-changed", this._breakpointChanged, this);
- breakpoint.addEventListener("removed", this._breakpointRemoved, this);
+ var existingBreakpointId = this._textViewerLineNumberToBreakpointId[textViewerLineNumber];
+ if (existingBreakpointId) {
+ WebInspector.debuggerModel.removeBreakpoint(breakpoint.id);
+ return;
+ }
- this._setBreakpointDecoration(textViewerLineNumber, breakpoint.enabled, !!breakpoint.condition);
+ this._breakpointIdToTextViewerLineNumber[breakpoint.id] = textViewerLineNumber;
+ this._textViewerLineNumberToBreakpointId[textViewerLineNumber] = breakpoint.id;
+ this._setBreakpointDecoration(textViewerLineNumber, resolved, breakpoint.enabled, !!breakpoint.condition);
},
_breakpointRemoved: function(event)
{
- var breakpoint = event.target;
+ var breakpointId = event.data;
- breakpoint.removeEventListener("enable-changed", null, this);
- breakpoint.removeEventListener("condition-changed", null, this);
- breakpoint.removeEventListener("removed", null, this);
+ var textViewerLineNumber = this._breakpointIdToTextViewerLineNumber[breakpointId];
+ if (textViewerLineNumber === undefined)
+ return;
- var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
+ delete this._breakpointIdToTextViewerLineNumber[breakpointId];
+ delete this._textViewerLineNumberToBreakpointId[textViewerLineNumber];
this._removeBreakpointDecoration(textViewerLineNumber);
},
- _breakpointChanged: function(event)
+ _breakpointResolved: function(event)
{
- var breakpoint = event.target;
- var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
- this._setBreakpointDecoration(textViewerLineNumber, breakpoint.enabled, !!breakpoint.condition);
+ var breakpoint = event.data;
+ this._breakpointRemoved({ data: breakpoint.id });
+ this._breakpointAdded({ data: breakpoint });
},
- _setBreakpointDecoration: function(lineNumber, enabled, hasCondition)
+ _setBreakpointDecoration: function(lineNumber, resolved, enabled, hasCondition)
{
this._textViewer.beginUpdates();
this._textViewer.addDecoration(lineNumber, "webkit-breakpoint");
- if (enabled)
- this._textViewer.removeDecoration(lineNumber, "webkit-breakpoint-disabled");
- else
+ if (!enabled)
this._textViewer.addDecoration(lineNumber, "webkit-breakpoint-disabled");
if (hasCondition)
this._textViewer.addDecoration(lineNumber, "webkit-breakpoint-conditional");
- else
- this._textViewer.removeDecoration(lineNumber, "webkit-breakpoint-conditional");
this._textViewer.endUpdates();
},
@@ -480,49 +540,49 @@ WebInspector.SourceFrame.prototype = {
var target = event.target.enclosingNodeOrSelfWithClass("webkit-line-number");
if (!target)
return;
- var textViewerLineNumber = target.parentElement.lineNumber;
- var originalLineNumber = this._formatter.formattedLineNumberToOriginalLineNumber(textViewerLineNumber);
+ var textViewerLineNumber = target.lineNumber;
var contextMenu = new WebInspector.ContextMenu();
- contextMenu.appendItem(WebInspector.UIString("Continue to Here"), this._continueToLine.bind(this, originalLineNumber));
+ contextMenu.appendItem(WebInspector.UIString("Continue to Here"), this._continueToLine.bind(this, textViewerLineNumber));
- var breakpoint = this._findBreakpoint(originalLineNumber);
+ var breakpoint = this._findBreakpoint(textViewerLineNumber);
if (!breakpoint) {
// This row doesn't have a breakpoint: We want to show Add Breakpoint and Add and Edit Breakpoint.
- contextMenu.appendItem(WebInspector.UIString("Add Breakpoint"), this._setBreakpoint.bind(this, originalLineNumber, "", true));
+ contextMenu.appendItem(WebInspector.UIString("Add Breakpoint"), this._setBreakpoint.bind(this, textViewerLineNumber, "", true));
function addConditionalBreakpoint()
{
- this._setBreakpointDecoration(textViewerLineNumber, true, true);
+ this._setBreakpointDecoration(textViewerLineNumber, true, true, true);
function didEditBreakpointCondition(committed, condition)
{
this._removeBreakpointDecoration(textViewerLineNumber);
if (committed)
- this._setBreakpoint(originalLineNumber, true, condition);
+ this._setBreakpoint(textViewerLineNumber, condition, true);
}
this._editBreakpointCondition(textViewerLineNumber, "", didEditBreakpointCondition.bind(this));
}
contextMenu.appendItem(WebInspector.UIString("Add Conditional Breakpoint…"), addConditionalBreakpoint.bind(this));
} else {
// This row has a breakpoint, we want to show edit and remove breakpoint, and either disable or enable.
- contextMenu.appendItem(WebInspector.UIString("Remove Breakpoint"), breakpoint.remove.bind(breakpoint));
+ function removeBreakpoint()
+ {
+ WebInspector.debuggerModel.removeBreakpoint(breakpoint.id);
+ }
+ contextMenu.appendItem(WebInspector.UIString("Remove Breakpoint"), removeBreakpoint);
function editBreakpointCondition()
{
function didEditBreakpointCondition(committed, condition)
{
- if (committed) {
- breakpoint.remove();
- this._setBreakpoint(originalLineNumber, breakpoint.enabled, condition);
- }
+ if (committed)
+ WebInspector.debuggerModel.updateBreakpoint(breakpoint.id, condition, breakpoint.enabled);
}
this._editBreakpointCondition(textViewerLineNumber, breakpoint.condition, didEditBreakpointCondition.bind(this));
}
contextMenu.appendItem(WebInspector.UIString("Edit Breakpoint…"), editBreakpointCondition.bind(this));
function setBreakpointEnabled(enabled)
{
- breakpoint.remove();
- this._setBreakpoint(originalLineNumber, enabled, breakpoint.condition);
+ WebInspector.debuggerModel.updateBreakpoint(breakpoint.id, breakpoint.condition, enabled);
}
if (breakpoint.enabled)
contextMenu.appendItem(WebInspector.UIString("Disable Breakpoint"), setBreakpointEnabled.bind(this, false));
@@ -546,15 +606,16 @@ WebInspector.SourceFrame.prototype = {
var target = event.target.enclosingNodeOrSelfWithClass("webkit-line-number");
if (!target)
return;
- var originalLineNumber = this._formatter.formattedLineNumberToOriginalLineNumber(target.parentElement.lineNumber);
+ var textViewerLineNumber = target.lineNumber;
- var breakpoint = this._findBreakpoint(originalLineNumber);
+ var breakpoint = this._findBreakpoint(textViewerLineNumber);
if (breakpoint) {
- breakpoint.remove();
if (event.shiftKey)
- this._setBreakpoint(originalLineNumber, !breakpoint.enabled, breakpoint.condition);
+ WebInspector.debuggerModel.updateBreakpoint(breakpoint.id, breakpoint.condition, !breakpoint.enabled);
+ else
+ WebInspector.debuggerModel.removeBreakpoint(breakpoint.id);
} else
- this._setBreakpoint(originalLineNumber, true, "");
+ this._setBreakpoint(textViewerLineNumber, "", true);
event.preventDefault();
},
@@ -629,7 +690,7 @@ WebInspector.SourceFrame.prototype = {
if (!WebInspector.panels.scripts || !WebInspector.panels.scripts.paused)
return;
- var lineRow = element.enclosingNodeOrSelfWithNodeName("tr");
+ var lineRow = element.enclosingNodeOrSelfWithClass("webkit-line-content");
if (!lineRow)
return;
@@ -713,7 +774,7 @@ WebInspector.SourceFrame.prototype = {
return;
showObjectPopup.call(this, result);
}
- WebInspector.panels.scripts.evaluateInSelectedCallFrame(element.textContent, false, this._popoverObjectGroup, evaluateCallback.bind(this));
+ WebInspector.panels.scripts.evaluateInSelectedCallFrame(element.textContent, false, this._popoverObjectGroup, false, evaluateCallback.bind(this));
},
_editBreakpointCondition: function(lineNumber, condition, callback)
@@ -752,7 +813,7 @@ WebInspector.SourceFrame.prototype = {
var editorElement = document.createElement("input");
editorElement.id = "source-frame-breakpoint-condition";
editorElement.className = "monospace";
- editorElement.type = "text"
+ editorElement.type = "text";
conditionElement.appendChild(editorElement);
this._conditionEditorElement = editorElement;
@@ -785,23 +846,24 @@ WebInspector.SourceFrame.prototype = {
formatSource: function()
{
- if (!this._formatter)
+ if (!this._content)
return;
- function didFormat(source)
+ function didFormat(formattedContent)
{
- this._textModel.setText(null, source);
+ this._formattedContent = formattedContent;
+ this._textModel.setText(null, formattedContent.text);
this._setTextViewerDecorations();
}
- this._formatter.format(didFormat.bind(this));
+ var formatter = new WebInspector.ScriptFormatter();
+ formatter.formatContent(this._content, didFormat.bind(this))
},
_continueToLine: function(lineNumber)
{
- var sourceID = this._sourceIDForLine(lineNumber);
- if (!sourceID)
- return;
- WebInspector.debuggerModel.continueToLine(sourceID, lineNumber + 1);
+ var location = this._textViewerLineNumberToScriptLocation(lineNumber);
+ if (location.sourceID)
+ WebInspector.debuggerModel.continueToLine(location.sourceID, location.lineNumber);
},
_doubleClick: function(event)
@@ -809,79 +871,66 @@ WebInspector.SourceFrame.prototype = {
if (!Preferences.canEditScriptSource || !this._isScript)
return;
- var target = event.target.enclosingNodeOrSelfWithNodeName("TD");
- if (!target || target.parentElement.firstChild === target)
+ var lineRow = event.target.enclosingNodeOrSelfWithClass("webkit-line-content");
+ if (!lineRow)
return; // Do not trigger editing from line numbers.
- var lineRow = target.parentElement;
var lineNumber = lineRow.lineNumber;
- var sourceID = this._sourceIDForLine(lineNumber);
- if (!sourceID)
+ var location = this._textViewerLineNumberToScriptLocation(lineNumber);
+ if (!location.sourceID)
return;
function didEditLine(newContent)
{
var lines = [];
- var oldLines = this._content.split('\n');
+ var oldLines = this._content.text.split('\n');
for (var i = 0; i < oldLines.length; ++i) {
if (i === lineNumber)
lines.push(newContent);
else
lines.push(oldLines[i]);
}
- WebInspector.debuggerModel.editScriptSource(sourceID, lines.join("\n"));
+ WebInspector.debuggerModel.editScriptSource(location.sourceID, lines.join("\n"));
}
this._textViewer.editLine(lineRow, didEditLine.bind(this));
},
- _setBreakpoint: function(lineNumber, enabled, condition)
+ _setBreakpoint: function(lineNumber, condition, enabled)
{
- var sourceID = this._sourceIDForLine(lineNumber);
- if (!sourceID)
+ var location = this._textViewerLineNumberToScriptLocation(lineNumber);
+ if (this._url)
+ WebInspector.debuggerModel.setBreakpoint(this._url, location.lineNumber, location.columnNumber, condition, enabled);
+ else if (location.sourceID)
+ WebInspector.debuggerModel.setBreakpointBySourceId(location.sourceID, location.lineNumber, location.columnNumber, condition, enabled);
+ else
return;
- WebInspector.debuggerModel.setBreakpoint(sourceID, lineNumber + 1, enabled, condition);
+
if (!WebInspector.panels.scripts.breakpointsActivated)
WebInspector.panels.scripts.toggleBreakpointsClicked();
},
- _breakpoints: function()
+ _findBreakpoint: function(textViewerLineNumber)
{
- var sourceIDSet = this._sourceIDSet();
- return WebInspector.debuggerModel.queryBreakpoints(function(b) { return b.sourceID in sourceIDSet; });
+ var breakpointId = this._textViewerLineNumberToBreakpointId[textViewerLineNumber];
+ return WebInspector.debuggerModel.breakpointForId(breakpointId);
},
- _findBreakpoint: function(lineNumber)
+ _originalLocationToTextViewerLineNumber: function(lineNumber, columnNumber)
{
- var sourceID = this._sourceIDForLine(lineNumber);
- return WebInspector.debuggerModel.findBreakpoint(sourceID, lineNumber + 1);
+ if (!this._formattedContent)
+ return lineNumber;
+ return this._formattedContent.originalLocationToFormattedLocation(lineNumber, columnNumber).lineNumber;
},
- _sourceIDForLine: function(lineNumber)
+ _textViewerLineNumberToScriptLocation: function(lineNumber)
{
- var sourceIDForLine = null;
- var closestStartingLine = 0;
- var scripts = this._contentProvider.scripts();
- for (var i = 0; i < scripts.length; ++i) {
- var lineOffset = scripts[i].lineOffset;
- if (lineOffset <= lineNumber && lineOffset >= closestStartingLine) {
- closestStartingLine = lineOffset;
- sourceIDForLine = scripts[i].sourceID;
- }
- }
- return sourceIDForLine;
- },
-
- _sourceIDSet: function()
- {
- var scripts = this._contentProvider.scripts();
- var sourceIDSet = {};
- for (var i = 0; i < scripts.length; ++i)
- sourceIDSet[scripts[i].sourceID] = true;
- return sourceIDSet;
+ if (!this._formattedContent)
+ return this._content.scriptLocationForLineNumber(lineNumber);
+ return this._formattedContent.scriptLocationForFormattedLineNumber(lineNumber);
}
}
-WebInspector.SourceFrame.prototype.__proto__ = WebInspector.Object.prototype;
+WebInspector.SourceFrame.prototype.__proto__ = WebInspector.View.prototype;
WebInspector.SourceFrameContentProvider = function()
diff --git a/Source/WebCore/inspector/front-end/SourceFrameContent.js b/Source/WebCore/inspector/front-end/SourceFrameContent.js
new file mode 100644
index 0000000..e4a74ec
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/SourceFrameContent.js
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.SourceFrameContent = function(text, scripts)
+{
+ if (scripts.length && scripts[0].length < text.length) {
+ // WebKit html lexer normalizes line endings and scripts are passed to VM with "\n" line endings.
+ // However, resource content has original line endings, so we have to normalize line endings here.
+ text = text.replace(/\r\n/g, "\n");
+ }
+ this._text = text;
+ this._lineEndings = text.findAll("\n");
+ this._lineEndings.push(text.length);
+
+ this._scriptRanges = [];
+ for (var i = 0; i < scripts.length; ++i) {
+ var script = scripts[i];
+ var offset = this.locationToPosition(script.lineOffset, script.columnOffset);
+ this._scriptRanges.push({ start: offset, end: offset + script.length, script: script });
+ }
+ this._scriptRanges.sort(function(x, y) { return x.start - y.start; });
+}
+
+WebInspector.SourceFrameContent.prototype = {
+ get text()
+ {
+ return this._text;
+ },
+
+ get scriptRanges()
+ {
+ return this._scriptRanges;
+ },
+
+ locationToPosition: function(lineNumber, columnNumber)
+ {
+ var position = lineNumber ? this._lineEndings[lineNumber - 1] + 1 : 0;
+ return position + columnNumber;
+ },
+
+ positionToLocation: function(position)
+ {
+ var location = {};
+ location.lineNumber = this._lineEndings.upperBound(position - 1);
+ if (!location.lineNumber)
+ location.columnNumber = position;
+ else
+ location.columnNumber = position - this._lineEndings[location.lineNumber - 1] - 1;
+ return location;
+ },
+
+ scriptLocationForLineNumber: function(lineNumber)
+ {
+ var range = this.lineNumberToRange(lineNumber);
+ return this.scriptLocationForRange(range.start, range.end);
+ },
+
+ scriptLocationForRange: function(start, end)
+ {
+ var position = start;
+ var scriptRange = this._intersectingScriptRange(start, end);
+ if (scriptRange)
+ position = Math.max(position, scriptRange.start);
+ var scriptLocation = this.positionToLocation(position);
+ if (scriptRange)
+ scriptLocation.sourceID = scriptRange.script.sourceID;
+ return scriptLocation;
+ },
+
+ lineNumberToRange: function(lineNumber)
+ {
+ var previousLineEnd = this._lineEndings[lineNumber - 1] || 0;
+ var lineEnd = this._lineEndings[lineNumber];
+ return { start: previousLineEnd + 1, end: lineEnd };
+ },
+
+ _intersectingScriptRange: function(start, end)
+ {
+ for (var i = 0; i < this._scriptRanges.length; ++i) {
+ var scriptRange = this._scriptRanges[i];
+ if (start < scriptRange.end && end > scriptRange.start)
+ return scriptRange;
+ }
+ }
+}
+
+
+WebInspector.FormattedSourceFrameContent = function(originalContent, text, mapping)
+{
+ this._originalContent = originalContent;
+ this._formattedContent = new WebInspector.SourceFrameContent(text, []);
+ this._mapping = mapping;
+}
+
+WebInspector.FormattedSourceFrameContent.prototype = {
+ get text()
+ {
+ return this._formattedContent.text;
+ },
+
+ originalLocationToFormattedLocation: function(lineNumber, columnNumber)
+ {
+ var originalPosition = this._originalContent.locationToPosition(lineNumber, columnNumber);
+ var formattedPosition = this._convertPosition(this._mapping.original, this._mapping.formatted, originalPosition);
+ return this._formattedContent.positionToLocation(formattedPosition);
+ },
+
+ scriptLocationForFormattedLineNumber: function(lineNumber)
+ {
+ var range = this._formattedContent.lineNumberToRange(lineNumber);
+ var start = this._convertPosition(this._mapping.formatted, this._mapping.original, range.start);
+ var end = this._convertPosition(this._mapping.formatted, this._mapping.original, range.end);
+ return this._originalContent.scriptLocationForRange(start, end);
+ },
+
+ _convertPosition: function(positions1, positions2, position)
+ {
+ var index = positions1.upperBound(position);
+ var range1 = positions1[index] - positions1[index - 1];
+ var range2 = positions2[index] - positions2[index - 1];
+ var position2 = positions2[index - 1];
+ if (range1)
+ position2 += Math.round((position - positions1[index - 1]) * range2 / range1);
+ return position2;
+ }
+}
diff --git a/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.js b/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.js
index cfbc44f..48c5bd4 100644
--- a/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.js
+++ b/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.js
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Thu Feb 25 21:44:55 2010 */
+/* Generated by re2c 0.13.5 on Fri Jan 28 18:32:27 2011 */
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
*
@@ -67,7 +67,8 @@ WebInspector.SourceHTMLTokenizer = function()
ATTRIBUTE_VALUE: 2,
LINKIFY: 4,
A_NODE: 8,
- SCRIPT: 16
+ SCRIPT: 16,
+ STYLE: 32
};
this.initialCondition = { lexCondition: this._lexConditions.INITIAL, parseCondition: this._parseConditions.INITIAL };
@@ -82,6 +83,12 @@ WebInspector.SourceHTMLTokenizer.prototype = {
this._internalJavaScriptTokenizer.line = line.substring(0, match.index);
} else
this._internalJavaScriptTokenizer.line = line;
+ } else if (this._internalCSSTokenizer) {
+ var match = /<\/style/i.exec(line);
+ if (match) {
+ this._internalCSSTokenizer.line = line.substring(0, match.index);
+ } else
+ this._internalCSSTokenizer.line = line;
}
this._line = line;
},
@@ -146,6 +153,18 @@ WebInspector.SourceHTMLTokenizer.prototype = {
return result;
} else if (cursor !== this._line.length)
delete this._internalJavaScriptTokenizer;
+ } else if (this._internalCSSTokenizer) {
+ // Re-set line to force </style> detection first.
+ this.line = this._line;
+ if (cursor !== this._internalCSSTokenizer._line.length) {
+ // Tokenizer is stateless, so restore its condition before tokenizing and save it after.
+ this._internalCSSTokenizer.condition = this._condition.internalCSSTokenizerCondition;
+ var result = this._internalCSSTokenizer.nextToken(cursor);
+ this.tokenType = this._internalCSSTokenizer.tokenType;
+ this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.condition;
+ return result;
+ } else if (cursor !== this._line.length)
+ delete this._internalCSSTokenizer;
}
var cursorOnEnter = cursor;
@@ -331,8 +350,8 @@ case 39:
case 40:
this.setLexCondition(this._lexConditions.TAG);
{
- if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
- // Do not tokenize script tag contents, keep lexer state although processing "<".
+ if (this._condition.parseCondition & (this._parseConditions.SCRIPT | this._parseConditions.STYLE)) {
+ // Do not tokenize script and style tag contents, keep lexer state, even though processing "<".
this.setLexCondition(this._lexConditions.INITIAL);
this.tokenType = null;
return cursor;
@@ -345,13 +364,21 @@ case 40:
case 41:
yyaccept = 0;
yych = this._charAt(YYMARKER = ++cursor);
- if (yych == 'S') { gotoCase = 68; continue; };
- if (yych == 's') { gotoCase = 68; continue; };
+ if (yych == 'S') { gotoCase = 73; continue; };
+ if (yych == 's') { gotoCase = 73; continue; };
{ gotoCase = 40; continue; };
case 42:
yych = this._charAt(++cursor);
- if (yych == 'C') { gotoCase = 62; continue; };
- if (yych == 'c') { gotoCase = 62; continue; };
+ if (yych <= 'T') {
+ if (yych == 'C') { gotoCase = 62; continue; };
+ if (yych >= 'T') { gotoCase = 63; continue; };
+ } else {
+ if (yych <= 'c') {
+ if (yych >= 'c') { gotoCase = 62; continue; };
+ } else {
+ if (yych == 't') { gotoCase = 63; continue; };
+ }
+ }
case 43:
cursor = YYMARKER;
{ gotoCase = 40; continue; };
@@ -421,56 +448,113 @@ case 59:
{ this.tokenType = "html-comment"; return cursor; }
case 62:
yych = this._charAt(++cursor);
- if (yych == 'R') { gotoCase = 63; continue; };
- if (yych != 'r') { gotoCase = 43; continue; };
+ if (yych == 'R') { gotoCase = 68; continue; };
+ if (yych == 'r') { gotoCase = 68; continue; };
+ { gotoCase = 43; continue; };
case 63:
yych = this._charAt(++cursor);
- if (yych == 'I') { gotoCase = 64; continue; };
- if (yych != 'i') { gotoCase = 43; continue; };
+ if (yych == 'Y') { gotoCase = 64; continue; };
+ if (yych != 'y') { gotoCase = 43; continue; };
case 64:
yych = this._charAt(++cursor);
- if (yych == 'P') { gotoCase = 65; continue; };
- if (yych != 'p') { gotoCase = 43; continue; };
+ if (yych == 'L') { gotoCase = 65; continue; };
+ if (yych != 'l') { gotoCase = 43; continue; };
case 65:
yych = this._charAt(++cursor);
- if (yych == 'T') { gotoCase = 66; continue; };
- if (yych != 't') { gotoCase = 43; continue; };
+ if (yych == 'E') { gotoCase = 66; continue; };
+ if (yych != 'e') { gotoCase = 43; continue; };
case 66:
++cursor;
this.setLexCondition(this._lexConditions.TAG);
{
- if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
- // Do not tokenize script tag contents, keep lexer state although processing "<".
+ if (this._condition.parseCondition & this._parseConditions.STYLE) {
+ // Do not tokenize style tag contents, keep lexer state, even though processing "<".
this.setLexCondition(this._lexConditions.INITIAL);
this.tokenType = null;
return cursor;
}
this.tokenType = "html-tag";
- this._condition.parseCondition = this._parseConditions.SCRIPT;
+ this._condition.parseCondition = this._parseConditions.STYLE;
this._setExpectingAttribute();
return cursor;
}
case 68:
yych = this._charAt(++cursor);
- if (yych == 'C') { gotoCase = 69; continue; };
- if (yych != 'c') { gotoCase = 43; continue; };
+ if (yych == 'I') { gotoCase = 69; continue; };
+ if (yych != 'i') { gotoCase = 43; continue; };
case 69:
yych = this._charAt(++cursor);
- if (yych == 'R') { gotoCase = 70; continue; };
- if (yych != 'r') { gotoCase = 43; continue; };
+ if (yych == 'P') { gotoCase = 70; continue; };
+ if (yych != 'p') { gotoCase = 43; continue; };
case 70:
yych = this._charAt(++cursor);
- if (yych == 'I') { gotoCase = 71; continue; };
- if (yych != 'i') { gotoCase = 43; continue; };
+ if (yych == 'T') { gotoCase = 71; continue; };
+ if (yych != 't') { gotoCase = 43; continue; };
case 71:
+ ++cursor;
+ this.setLexCondition(this._lexConditions.TAG);
+ {
+ if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
+ // Do not tokenize script tag contents, keep lexer state, even though processing "<".
+ this.setLexCondition(this._lexConditions.INITIAL);
+ this.tokenType = null;
+ return cursor;
+ }
+ this.tokenType = "html-tag";
+ this._condition.parseCondition = this._parseConditions.SCRIPT;
+ this._setExpectingAttribute();
+ return cursor;
+ }
+case 73:
+ yych = this._charAt(++cursor);
+ if (yych <= 'T') {
+ if (yych == 'C') { gotoCase = 75; continue; };
+ if (yych <= 'S') { gotoCase = 43; continue; };
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') { gotoCase = 43; continue; };
+ { gotoCase = 75; continue; };
+ } else {
+ if (yych != 't') { gotoCase = 43; continue; };
+ }
+ }
+ yych = this._charAt(++cursor);
+ if (yych == 'Y') { gotoCase = 81; continue; };
+ if (yych == 'y') { gotoCase = 81; continue; };
+ { gotoCase = 43; continue; };
+case 75:
+ yych = this._charAt(++cursor);
+ if (yych == 'R') { gotoCase = 76; continue; };
+ if (yych != 'r') { gotoCase = 43; continue; };
+case 76:
+ yych = this._charAt(++cursor);
+ if (yych == 'I') { gotoCase = 77; continue; };
+ if (yych != 'i') { gotoCase = 43; continue; };
+case 77:
yych = this._charAt(++cursor);
- if (yych == 'P') { gotoCase = 72; continue; };
+ if (yych == 'P') { gotoCase = 78; continue; };
if (yych != 'p') { gotoCase = 43; continue; };
-case 72:
+case 78:
yych = this._charAt(++cursor);
- if (yych == 'T') { gotoCase = 73; continue; };
+ if (yych == 'T') { gotoCase = 79; continue; };
if (yych != 't') { gotoCase = 43; continue; };
-case 73:
+case 79:
+ ++cursor;
+ this.setLexCondition(this._lexConditions.TAG);
+ {
+ this.tokenType = "html-tag";
+ this._condition.parseCondition = this._parseConditions.INITIAL;
+ return cursor;
+ }
+case 81:
+ yych = this._charAt(++cursor);
+ if (yych == 'L') { gotoCase = 82; continue; };
+ if (yych != 'l') { gotoCase = 43; continue; };
+case 82:
+ yych = this._charAt(++cursor);
+ if (yych == 'E') { gotoCase = 83; continue; };
+ if (yych != 'e') { gotoCase = 43; continue; };
+case 83:
++cursor;
this.setLexCondition(this._lexConditions.TAG);
{
@@ -482,78 +566,78 @@ case 73:
case this.case_SSTRING:
yych = this._charAt(cursor);
if (yych <= '\f') {
- if (yych == '\n') { gotoCase = 79; continue; };
- { gotoCase = 78; continue; };
+ if (yych == '\n') { gotoCase = 89; continue; };
+ { gotoCase = 88; continue; };
} else {
- if (yych <= '\r') { gotoCase = 79; continue; };
- if (yych == '\'') { gotoCase = 81; continue; };
- { gotoCase = 78; continue; };
+ if (yych <= '\r') { gotoCase = 89; continue; };
+ if (yych == '\'') { gotoCase = 91; continue; };
+ { gotoCase = 88; continue; };
}
-case 77:
+case 87:
{ return this._stringToken(cursor); }
-case 78:
+case 88:
yych = this._charAt(++cursor);
- { gotoCase = 85; continue; };
-case 79:
+ { gotoCase = 95; continue; };
+case 89:
++cursor;
{ this.tokenType = null; return cursor; }
-case 81:
+case 91:
++cursor;
-case 82:
+case 92:
this.setLexCondition(this._lexConditions.TAG);
{ return this._stringToken(cursor, true); }
-case 83:
+case 93:
yych = this._charAt(++cursor);
- { gotoCase = 82; continue; };
-case 84:
+ { gotoCase = 92; continue; };
+case 94:
++cursor;
yych = this._charAt(cursor);
-case 85:
+case 95:
if (yych <= '\f') {
- if (yych == '\n') { gotoCase = 77; continue; };
- { gotoCase = 84; continue; };
+ if (yych == '\n') { gotoCase = 87; continue; };
+ { gotoCase = 94; continue; };
} else {
- if (yych <= '\r') { gotoCase = 77; continue; };
- if (yych == '\'') { gotoCase = 83; continue; };
- { gotoCase = 84; continue; };
+ if (yych <= '\r') { gotoCase = 87; continue; };
+ if (yych == '\'') { gotoCase = 93; continue; };
+ { gotoCase = 94; continue; };
}
/* *********************************** */
case this.case_TAG:
yych = this._charAt(cursor);
if (yych <= '&') {
if (yych <= '\r') {
- if (yych == '\n') { gotoCase = 90; continue; };
- if (yych >= '\r') { gotoCase = 90; continue; };
+ if (yych == '\n') { gotoCase = 100; continue; };
+ if (yych >= '\r') { gotoCase = 100; continue; };
} else {
if (yych <= ' ') {
- if (yych >= ' ') { gotoCase = 90; continue; };
+ if (yych >= ' ') { gotoCase = 100; continue; };
} else {
- if (yych == '"') { gotoCase = 92; continue; };
+ if (yych == '"') { gotoCase = 102; continue; };
}
}
} else {
if (yych <= '>') {
if (yych <= ';') {
- if (yych <= '\'') { gotoCase = 93; continue; };
+ if (yych <= '\'') { gotoCase = 103; continue; };
} else {
- if (yych <= '<') { gotoCase = 90; continue; };
- if (yych <= '=') { gotoCase = 94; continue; };
- { gotoCase = 96; continue; };
+ if (yych <= '<') { gotoCase = 100; continue; };
+ if (yych <= '=') { gotoCase = 104; continue; };
+ { gotoCase = 106; continue; };
}
} else {
if (yych <= '[') {
- if (yych >= '[') { gotoCase = 90; continue; };
+ if (yych >= '[') { gotoCase = 100; continue; };
} else {
- if (yych == ']') { gotoCase = 90; continue; };
+ if (yych == ']') { gotoCase = 100; continue; };
}
}
}
++cursor;
yych = this._charAt(cursor);
- { gotoCase = 109; continue; };
-case 89:
+ { gotoCase = 119; continue; };
+case 99:
{
- if (this._condition.parseCondition === this._parseConditions.SCRIPT) {
+ if (this._condition.parseCondition === this._parseConditions.SCRIPT || this._condition.parseCondition === this._parseConditions.STYLE) {
// Fall through if expecting attributes.
this.tokenType = null;
return cursor;
@@ -580,18 +664,18 @@ case 89:
this.tokenType = null;
return cursor;
}
-case 90:
+case 100:
++cursor;
{ this.tokenType = null; return cursor; }
-case 92:
+case 102:
yyaccept = 0;
yych = this._charAt(YYMARKER = ++cursor);
- { gotoCase = 105; continue; };
-case 93:
+ { gotoCase = 115; continue; };
+case 103:
yyaccept = 0;
yych = this._charAt(YYMARKER = ++cursor);
- { gotoCase = 99; continue; };
-case 94:
+ { gotoCase = 109; continue; };
+case 104:
++cursor;
{
if (this._isExpectingAttribute())
@@ -599,7 +683,7 @@ case 94:
this.tokenType = null;
return cursor;
}
-case 96:
+case 106:
++cursor;
this.setLexCondition(this._lexConditions.INITIAL);
{
@@ -613,68 +697,77 @@ case 96:
return cursor;
}
+ if (this._condition.parseCondition & this._parseConditions.STYLE) {
+ if (!this._internalCSSTokenizer) {
+ this._internalCSSTokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/css");
+ this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.initialCondition;
+ }
+ // Do not tokenize style tag contents.
+ return cursor;
+ }
+
this._condition.parseCondition = this._parseConditions.INITIAL;
return cursor;
}
-case 98:
+case 108:
++cursor;
yych = this._charAt(cursor);
-case 99:
+case 109:
if (yych <= '\f') {
- if (yych != '\n') { gotoCase = 98; continue; };
+ if (yych != '\n') { gotoCase = 108; continue; };
} else {
- if (yych <= '\r') { gotoCase = 100; continue; };
- if (yych == '\'') { gotoCase = 102; continue; };
- { gotoCase = 98; continue; };
+ if (yych <= '\r') { gotoCase = 110; continue; };
+ if (yych == '\'') { gotoCase = 112; continue; };
+ { gotoCase = 108; continue; };
}
-case 100:
+case 110:
++cursor;
this.setLexCondition(this._lexConditions.SSTRING);
{ return this._stringToken(cursor); }
-case 102:
+case 112:
++cursor;
{ return this._stringToken(cursor, true); }
-case 104:
+case 114:
++cursor;
yych = this._charAt(cursor);
-case 105:
+case 115:
if (yych <= '\f') {
- if (yych != '\n') { gotoCase = 104; continue; };
+ if (yych != '\n') { gotoCase = 114; continue; };
} else {
- if (yych <= '\r') { gotoCase = 106; continue; };
- if (yych == '"') { gotoCase = 102; continue; };
- { gotoCase = 104; continue; };
+ if (yych <= '\r') { gotoCase = 116; continue; };
+ if (yych == '"') { gotoCase = 112; continue; };
+ { gotoCase = 114; continue; };
}
-case 106:
+case 116:
++cursor;
this.setLexCondition(this._lexConditions.DSTRING);
{ return this._stringToken(cursor); }
-case 108:
+case 118:
++cursor;
yych = this._charAt(cursor);
-case 109:
+case 119:
if (yych <= '"') {
if (yych <= '\r') {
- if (yych == '\n') { gotoCase = 89; continue; };
- if (yych <= '\f') { gotoCase = 108; continue; };
- { gotoCase = 89; continue; };
+ if (yych == '\n') { gotoCase = 99; continue; };
+ if (yych <= '\f') { gotoCase = 118; continue; };
+ { gotoCase = 99; continue; };
} else {
- if (yych == ' ') { gotoCase = 89; continue; };
- if (yych <= '!') { gotoCase = 108; continue; };
- { gotoCase = 89; continue; };
+ if (yych == ' ') { gotoCase = 99; continue; };
+ if (yych <= '!') { gotoCase = 118; continue; };
+ { gotoCase = 99; continue; };
}
} else {
if (yych <= '>') {
- if (yych == '\'') { gotoCase = 89; continue; };
- if (yych <= ';') { gotoCase = 108; continue; };
- { gotoCase = 89; continue; };
+ if (yych == '\'') { gotoCase = 99; continue; };
+ if (yych <= ';') { gotoCase = 118; continue; };
+ { gotoCase = 99; continue; };
} else {
if (yych <= '[') {
- if (yych <= 'Z') { gotoCase = 108; continue; };
- { gotoCase = 89; continue; };
+ if (yych <= 'Z') { gotoCase = 118; continue; };
+ { gotoCase = 99; continue; };
} else {
- if (yych == ']') { gotoCase = 89; continue; };
- { gotoCase = 108; continue; };
+ if (yych == ']') { gotoCase = 99; continue; };
+ { gotoCase = 118; continue; };
}
}
}
diff --git a/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.re2js b/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.re2js
index 44c62b3..769e984 100644
--- a/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.re2js
+++ b/Source/WebCore/inspector/front-end/SourceHTMLTokenizer.re2js
@@ -66,7 +66,8 @@ WebInspector.SourceHTMLTokenizer = function()
ATTRIBUTE_VALUE: 2,
LINKIFY: 4,
A_NODE: 8,
- SCRIPT: 16
+ SCRIPT: 16,
+ STYLE: 32
};
this.initialCondition = { lexCondition: this._lexConditions.INITIAL, parseCondition: this._parseConditions.INITIAL };
@@ -81,6 +82,12 @@ WebInspector.SourceHTMLTokenizer.prototype = {
this._internalJavaScriptTokenizer.line = line.substring(0, match.index);
} else
this._internalJavaScriptTokenizer.line = line;
+ } else if (this._internalCSSTokenizer) {
+ var match = /<\/style/i.exec(line);
+ if (match) {
+ this._internalCSSTokenizer.line = line.substring(0, match.index);
+ } else
+ this._internalCSSTokenizer.line = line;
}
this._line = line;
},
@@ -145,6 +152,18 @@ WebInspector.SourceHTMLTokenizer.prototype = {
return result;
} else if (cursor !== this._line.length)
delete this._internalJavaScriptTokenizer;
+ } else if (this._internalCSSTokenizer) {
+ // Re-set line to force </style> detection first.
+ this.line = this._line;
+ if (cursor !== this._internalCSSTokenizer._line.length) {
+ // Tokenizer is stateless, so restore its condition before tokenizing and save it after.
+ this._internalCSSTokenizer.condition = this._condition.internalCSSTokenizerCondition;
+ var result = this._internalCSSTokenizer.nextToken(cursor);
+ this.tokenType = this._internalCSSTokenizer.tokenType;
+ this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.condition;
+ return result;
+ } else if (cursor !== this._line.length)
+ delete this._internalCSSTokenizer;
}
var cursorOnEnter = cursor;
@@ -175,6 +194,9 @@ WebInspector.SourceHTMLTokenizer.prototype = {
ScriptStart = "<" [Ss] [Cc] [Rr] [Ii] [Pp] [Tt];
ScriptEnd = "</" [Ss] [Cc] [Rr] [Ii] [Pp] [Tt];
+ StyleStart = "<" [Ss] [Tt] [Yy] [Ll] [Ee];
+ StyleEnd = "</" [Ss] [Tt] [Yy] [Ll] [Ee];
+
LT = "<" | "</";
GT = ">";
EqualSign = "=";
@@ -201,7 +223,7 @@ WebInspector.SourceHTMLTokenizer.prototype = {
<INITIAL> ScriptStart => TAG
{
if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
- // Do not tokenize script tag contents, keep lexer state although processing "<".
+ // Do not tokenize script tag contents, keep lexer state, even though processing "<".
this.setLexCondition(this._lexConditions.INITIAL);
this.tokenType = null;
return cursor;
@@ -219,10 +241,31 @@ WebInspector.SourceHTMLTokenizer.prototype = {
return cursor;
}
+ <INITIAL> StyleStart => TAG
+ {
+ if (this._condition.parseCondition & this._parseConditions.STYLE) {
+ // Do not tokenize style tag contents, keep lexer state, even though processing "<".
+ this.setLexCondition(this._lexConditions.INITIAL);
+ this.tokenType = null;
+ return cursor;
+ }
+ this.tokenType = "html-tag";
+ this._condition.parseCondition = this._parseConditions.STYLE;
+ this._setExpectingAttribute();
+ return cursor;
+ }
+
+ <INITIAL> StyleEnd => TAG
+ {
+ this.tokenType = "html-tag";
+ this._condition.parseCondition = this._parseConditions.INITIAL;
+ return cursor;
+ }
+
<INITIAL> LT => TAG
{
- if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
- // Do not tokenize script tag contents, keep lexer state although processing "<".
+ if (this._condition.parseCondition & (this._parseConditions.SCRIPT | this._parseConditions.STYLE)) {
+ // Do not tokenize script and style tag contents, keep lexer state, even though processing "<".
this.setLexCondition(this._lexConditions.INITIAL);
this.tokenType = null;
return cursor;
@@ -245,6 +288,15 @@ WebInspector.SourceHTMLTokenizer.prototype = {
return cursor;
}
+ if (this._condition.parseCondition & this._parseConditions.STYLE) {
+ if (!this._internalCSSTokenizer) {
+ this._internalCSSTokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/css");
+ this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.initialCondition;
+ }
+ // Do not tokenize style tag contents.
+ return cursor;
+ }
+
this._condition.parseCondition = this._parseConditions.INITIAL;
return cursor;
}
@@ -267,7 +319,7 @@ WebInspector.SourceHTMLTokenizer.prototype = {
<TAG> Identifier
{
- if (this._condition.parseCondition === this._parseConditions.SCRIPT) {
+ if (this._condition.parseCondition === this._parseConditions.SCRIPT || this._condition.parseCondition === this._parseConditions.STYLE) {
// Fall through if expecting attributes.
this.tokenType = null;
return cursor;
diff --git a/Source/WebCore/inspector/front-end/SourceView.js b/Source/WebCore/inspector/front-end/SourceView.js
deleted file mode 100644
index 37caabb..0000000
--- a/Source/WebCore/inspector/front-end/SourceView.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.SourceView = function(resource)
-{
- WebInspector.ResourceView.call(this, resource);
-
- this.element.addStyleClass("source");
-
- var contentProvider = new WebInspector.SourceFrameContentProviderForResource(resource);
- var isScript = resource.type === WebInspector.Resource.Type.Script;
- this.sourceFrame = new WebInspector.SourceFrame(this.element, contentProvider, resource.url, isScript);
-}
-
-WebInspector.SourceView.prototype = {
- show: function(parentElement)
- {
- WebInspector.View.prototype.show.call(this, parentElement);
- this.sourceFrame.visible = true;
- },
-
- hide: function()
- {
- this.sourceFrame.visible = false;
- this.sourceFrame.clearLineHighlight();
- WebInspector.View.prototype.hide.call(this);
- this._currentSearchResultIndex = -1;
- },
-
- resize: function()
- {
- this.sourceFrame.resize();
- },
-
- get scrollTop()
- {
- return this.sourceFrame.scrollTop;
- },
-
- set scrollTop(scrollTop)
- {
- this.sourceFrame.scrollTop = scrollTop;
- },
-
- hasContent: function()
- {
- return true;
- },
-
- // The rest of the methods in this prototype need to be generic enough to work with a ScriptView.
- // The ScriptView prototype pulls these methods into it's prototype to avoid duplicate code.
-
- searchCanceled: function()
- {
- this._currentSearchResultIndex = -1;
- this._searchResults = [];
- this.sourceFrame.clearMarkedRange();
- this.sourceFrame.cancelFindSearchMatches();
- },
-
- performSearch: function(query, finishedCallback)
- {
- // Call searchCanceled since it will reset everything we need before doing a new search.
- this.searchCanceled();
-
- function didFindSearchMatches(searchResults)
- {
- this._searchResults = searchResults;
- if (this._searchResults)
- finishedCallback(this, this._searchResults.length);
- }
- this.sourceFrame.findSearchMatches(query, didFindSearchMatches.bind(this));
- },
-
- jumpToFirstSearchResult: function()
- {
- if (!this._searchResults || !this._searchResults.length)
- return;
- this._currentSearchResultIndex = 0;
- this._jumpToSearchResult(this._currentSearchResultIndex);
- },
-
- jumpToLastSearchResult: function()
- {
- if (!this._searchResults || !this._searchResults.length)
- return;
- this._currentSearchResultIndex = (this._searchResults.length - 1);
- this._jumpToSearchResult(this._currentSearchResultIndex);
- },
-
- jumpToNextSearchResult: function()
- {
- if (!this._searchResults || !this._searchResults.length)
- return;
- if (++this._currentSearchResultIndex >= this._searchResults.length)
- this._currentSearchResultIndex = 0;
- this._jumpToSearchResult(this._currentSearchResultIndex);
- },
-
- jumpToPreviousSearchResult: function()
- {
- if (!this._searchResults || !this._searchResults.length)
- return;
- if (--this._currentSearchResultIndex < 0)
- this._currentSearchResultIndex = (this._searchResults.length - 1);
- this._jumpToSearchResult(this._currentSearchResultIndex);
- },
-
- showingFirstSearchResult: function()
- {
- return (this._currentSearchResultIndex === 0);
- },
-
- showingLastSearchResult: function()
- {
- return (this._searchResults && this._currentSearchResultIndex === (this._searchResults.length - 1));
- },
-
- revealLine: function(lineNumber)
- {
- this.sourceFrame.revealLine(lineNumber);
- },
-
- highlightLine: function(lineNumber)
- {
- this.sourceFrame.highlightLine(lineNumber);
- },
-
- addMessage: function(msg)
- {
- this.sourceFrame.addMessage(msg);
- },
-
- clearMessages: function()
- {
- this.sourceFrame.clearMessages();
- },
-
- _jumpToSearchResult: function(index)
- {
- var foundRange = this._searchResults[index];
- if (!foundRange)
- return;
-
- this.sourceFrame.markAndRevealRange(foundRange);
- }
-}
-
-WebInspector.SourceView.prototype.__proto__ = WebInspector.ResourceView.prototype;
-
-
-WebInspector.SourceFrameContentProviderForResource = function(resource)
-{
- WebInspector.SourceFrameContentProvider.call(this);
- this._resource = resource;
-}
-
-//This is a map from resource.type to mime types
-//found in WebInspector.SourceTokenizer.Registry.
-WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType = {
- 0: "text/html",
- 1: "text/css",
- 4: "text/javascript"
-}
-
-WebInspector.SourceFrameContentProviderForResource.prototype = {
- requestContent: function(callback)
- {
- function contentLoaded(content)
- {
- var mimeType = WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType[this._resource.type] || this._resource.mimeType;
- callback(mimeType, content);
- }
- this._resource.requestContent(contentLoaded.bind(this));
- },
-
- scripts: function()
- {
- return WebInspector.debuggerModel.scriptsForURL(this._resource.url);
- }
-}
-
-WebInspector.SourceFrameContentProviderForResource.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype;
diff --git a/Source/WebCore/inspector/front-end/StylesSidebarPane.js b/Source/WebCore/inspector/front-end/StylesSidebarPane.js
index 9880adc..57d3b76 100644
--- a/Source/WebCore/inspector/front-end/StylesSidebarPane.js
+++ b/Source/WebCore/inspector/front-end/StylesSidebarPane.js
@@ -1709,10 +1709,6 @@ WebInspector.StylePropertyTreeElement.prototype = {
editingEnded: function(context)
{
- if (this._prompt) {
- this._prompt.removeFromElement();
- delete this._prompt;
- }
this.hasChildren = context.hasChildren;
if (context.expanded)
this.expand();
@@ -1727,6 +1723,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
editingCancelled: function(element, context)
{
+ this._removePrompt();
if ("originalPropertyText" in this)
this.applyStyleText(this.originalPropertyText, true);
else {
@@ -1742,6 +1739,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
editingCommitted: function(element, userInput, previousContent, context, moveDirection)
{
+ this._removePrompt();
this.editingEnded(context);
var isEditingName = context.isEditingName;
@@ -1839,6 +1837,15 @@ WebInspector.StylePropertyTreeElement.prototype = {
}
},
+ _removePrompt: function()
+ {
+ // BUG 53242. This cannot go into editingEnded(), as it should always happen first for any editing outcome.
+ if (this._prompt) {
+ this._prompt.removeFromElement();
+ delete this._prompt;
+ }
+ },
+
_hasBeenAppliedToPageViaUpDown: function()
{
// New properties applied via up/down have an originalPropertyText and will be deleted later
@@ -1922,16 +1929,34 @@ WebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = {
var reverse = event.keyIdentifier === "Up";
if (this.autoCompleteElement)
this.complete(false, reverse); // Accept the current suggestion, if any.
+ else {
+ // Select the word suffix to affect it when computing the subsequent suggestion.
+ this._selectCurrentWordSuffix();
+ }
+
this.complete(false, reverse); // Actually increment/decrement the suggestion.
event.handled = true;
},
- _buildPropertyCompletions: function(wordRange, bestMatchOnly, completionsReadyCallback)
+ _selectCurrentWordSuffix: function()
{
- var prefix = wordRange.toString().toLowerCase();
- if (!prefix.length)
+ var selection = window.getSelection();
+ if (!selection.rangeCount)
return;
+ var selectionRange = selection.getRangeAt(0);
+ if (!selectionRange.commonAncestorContainer.isDescendant(this.element))
+ return;
+ var wordSuffixRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.element, "forward");
+ if (!wordSuffixRange.toString())
+ return;
+ selection.removeAllRanges();
+ selection.addRange(wordSuffixRange);
+ },
+
+ _buildPropertyCompletions: function(wordRange, bestMatchOnly, completionsReadyCallback)
+ {
+ var prefix = wordRange.toString().toLowerCase();
var results;
if (bestMatchOnly) {
results = [];
diff --git a/Source/WebCore/inspector/front-end/TextPrompt.js b/Source/WebCore/inspector/front-end/TextPrompt.js
index ac54d8c..36a38cc 100644
--- a/Source/WebCore/inspector/front-end/TextPrompt.js
+++ b/Source/WebCore/inspector/front-end/TextPrompt.js
@@ -196,7 +196,12 @@ WebInspector.TextPrompt.prototype = {
return;
var selectionRange = selection.getRangeAt(0);
- if (!selectionRange.commonAncestorContainer.isDescendant(this.element))
+ var isEmptyInput = selectionRange.commonAncestorContainer === this.element; // this.element has no child Text nodes.
+
+ // Do not attempt to auto-complete an empty input in the auto mode (only on demand).
+ if (auto && isEmptyInput)
+ return;
+ if (!auto && !isEmptyInput && !selectionRange.commonAncestorContainer.isDescendant(this.element))
return;
if (auto && !this.isCaretAtEndOfPrompt())
return;
diff --git a/Source/WebCore/inspector/front-end/TextViewer.js b/Source/WebCore/inspector/front-end/TextViewer.js
index ea36513..ce6502d 100644
--- a/Source/WebCore/inspector/front-end/TextViewer.js
+++ b/Source/WebCore/inspector/front-end/TextViewer.js
@@ -32,37 +32,23 @@
WebInspector.TextViewer = function(textModel, platform, url)
{
this._textModel = textModel;
- this._textModel.changeListener = this._buildChunks.bind(this);
- this._highlighter = new WebInspector.TextEditorHighlighter(this._textModel, this._highlightDataReady.bind(this));
+ this._textModel.changeListener = this._textChanged.bind(this);
this.element = document.createElement("div");
this.element.className = "text-editor monospace";
- this.element.tabIndex = 0;
-
- this.element.addEventListener("scroll", this._scroll.bind(this), false);
- this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
- this.element.addEventListener("beforecopy", this._beforeCopy.bind(this), false);
- this.element.addEventListener("copy", this._copy.bind(this), false);
-
- this._url = url;
-
- this._linesContainerElement = document.createElement("table");
- this._linesContainerElement.className = "text-editor-lines";
- this._linesContainerElement.setAttribute("cellspacing", 0);
- this._linesContainerElement.setAttribute("cellpadding", 0);
- this.element.appendChild(this._linesContainerElement);
-
- this._defaultChunkSize = 50;
- this._paintCoalescingLevel = 0;
- this.freeCachedElements();
- this._buildChunks();
+ var syncScrollListener = this._syncScroll.bind(this);
+ var syncDecorationsForLineListener = this._syncDecorationsForLine.bind(this);
+ this._mainPanel = new WebInspector.TextEditorMainPanel(this._textModel, url, syncScrollListener, syncDecorationsForLineListener);
+ this._gutterPanel = new WebInspector.TextEditorGutterPanel(this._textModel, syncDecorationsForLineListener);
+ this.element.appendChild(this._mainPanel.element);
+ this.element.appendChild(this._gutterPanel.element);
}
WebInspector.TextViewer.prototype = {
set mimeType(mimeType)
{
- this._highlighter.mimeType = mimeType;
+ this._mainPanel.mimeType = mimeType;
},
get textModel()
@@ -72,85 +58,190 @@ WebInspector.TextViewer.prototype = {
revealLine: function(lineNumber)
{
- if (lineNumber >= this._textModel.linesCount)
- return;
-
- var chunk = this._makeLineAChunk(lineNumber);
- chunk.element.scrollIntoViewIfNeeded();
+ this._mainPanel.revealLine(lineNumber);
},
addDecoration: function(lineNumber, decoration)
{
- var chunk = this._makeLineAChunk(lineNumber);
- chunk.addDecoration(decoration);
+ this._mainPanel.addDecoration(lineNumber, decoration);
+ this._gutterPanel.addDecoration(lineNumber, decoration);
},
removeDecoration: function(lineNumber, decoration)
{
- var chunk = this._makeLineAChunk(lineNumber);
- chunk.removeDecoration(decoration);
+ this._mainPanel.removeDecoration(lineNumber, decoration);
+ this._gutterPanel.removeDecoration(lineNumber, decoration);
},
markAndRevealRange: function(range)
{
- if (this._rangeToMark) {
- var markedLine = this._rangeToMark.startLine;
- this._rangeToMark = null;
- this._paintLines(markedLine, markedLine + 1);
- }
-
- if (range) {
- this._rangeToMark = range;
- this.revealLine(range.startLine);
- this._paintLines(range.startLine, range.startLine + 1);
- if (this._markedRangeElement)
- this._markedRangeElement.scrollIntoViewIfNeeded();
- }
- delete this._markedRangeElement;
+ this._mainPanel.markAndRevealRange(range);
},
highlightLine: function(lineNumber)
{
- this.clearLineHighlight();
- this._highlightedLine = lineNumber;
- this.revealLine(lineNumber);
- var chunk = this._makeLineAChunk(lineNumber);
- chunk.addDecoration("webkit-highlighted-line");
+ this._mainPanel.highlightLine(lineNumber);
},
clearLineHighlight: function()
{
- if (typeof this._highlightedLine === "number") {
- var chunk = this._makeLineAChunk(this._highlightedLine);
- chunk.removeDecoration("webkit-highlighted-line");
- delete this._highlightedLine;
- }
+ this._mainPanel.clearLineHighlight();
},
freeCachedElements: function()
{
- this._cachedSpans = [];
- this._cachedTextNodes = [];
- this._cachedRows = [];
+ this._mainPanel.freeCachedElements();
+ this._gutterPanel.freeCachedElements();
+ },
+
+ editLine: function(lineRow, callback)
+ {
+ this._mainPanel.editLine(lineRow, callback);
+ },
+
+ get scrollTop()
+ {
+ return this._mainPanel.element.scrollTop;
+ },
+
+ set scrollTop(scrollTop)
+ {
+ this._mainPanel.element.scrollTop = scrollTop;
+ },
+
+ get scrollLeft()
+ {
+ return this._mainPanel.element.scrollLeft;
+ },
+
+ set scrollLeft(scrollLeft)
+ {
+ this._mainPanel.element.scrollLeft = scrollLeft;
+ },
+
+ beginUpdates: function()
+ {
+ this._mainPanel.beginUpdates();
+ this._gutterPanel.beginUpdates();
+ },
+
+ endUpdates: function()
+ {
+ this._mainPanel.endUpdates();
+ this._gutterPanel.endUpdates();
+ },
+
+ resize: function()
+ {
+ this._mainPanel.resize();
+ this._gutterPanel.resize();
+ this._updatePanelOffsets();
+ },
+
+ // WebInspector.TextModel listener
+ _textChanged: function(oldRange, newRange, oldText, newText)
+ {
+ this._mainPanel.textChanged();
+ this._gutterPanel.textChanged();
+ this._updatePanelOffsets();
+ },
+
+ _updatePanelOffsets: function()
+ {
+ var lineNumbersWidth = this._gutterPanel.element.offsetWidth;
+ if (lineNumbersWidth)
+ this._mainPanel.element.style.setProperty("left", lineNumbersWidth + "px");
+ else
+ this._mainPanel.element.style.removeProperty("left"); // Use default value set in CSS.
+ },
+
+ _syncScroll: function()
+ {
+ // Async call due to performance reasons.
+ setTimeout(function() {
+ var mainElement = this._mainPanel.element;
+ var gutterElement = this._gutterPanel.element;
+
+ // Handle horizontal scroll bar at the bottom of the main panel.
+ if (gutterElement.offsetHeight > mainElement.clientHeight)
+ gutterElement.style.setProperty("padding-bottom", (gutterElement.offsetHeight - mainElement.clientHeight) + "px");
+ else
+ gutterElement.style.removeProperty("padding-bottom");
+
+ gutterElement.scrollTop = mainElement.scrollTop;
+ }.bind(this), 0);
+ },
+
+ _syncDecorationsForLine: function(lineNumber)
+ {
+ if (lineNumber >= this._textModel.linesCount)
+ return;
+
+ var mainChunk = this._mainPanel.makeLineAChunk(lineNumber);
+ var gutterChunk = this._gutterPanel.makeLineAChunk(lineNumber);
+ var height = mainChunk.height;
+ if (height)
+ gutterChunk.element.style.setProperty("height", height + "px");
+ else
+ gutterChunk.element.style.removeProperty("height");
+ }
+}
+
+WebInspector.TextEditorChunkedPanel = function(textModel)
+{
+ this._textModel = textModel;
+
+ this._defaultChunkSize = 50;
+ this._paintCoalescingLevel = 0;
+}
+
+WebInspector.TextEditorChunkedPanel.prototype = {
+ get textModel()
+ {
+ return this._textModel;
+ },
+
+ revealLine: function(lineNumber)
+ {
+ if (lineNumber >= this._textModel.linesCount)
+ return;
+
+ var chunk = this.makeLineAChunk(lineNumber);
+ chunk.element.scrollIntoViewIfNeeded();
+ },
+
+ addDecoration: function(lineNumber, decoration)
+ {
+ var chunk = this.makeLineAChunk(lineNumber);
+ chunk.addDecoration(decoration);
+ },
+
+ removeDecoration: function(lineNumber, decoration)
+ {
+ var chunk = this.makeLineAChunk(lineNumber);
+ chunk.removeDecoration(decoration);
+ },
+
+ textChanged: function(oldRange, newRange, oldText, newText)
+ {
+ this._buildChunks();
},
_buildChunks: function()
{
- this._linesContainerElement.removeChildren();
+ this.element.removeChildren();
this._textChunks = [];
for (var i = 0; i < this._textModel.linesCount; i += this._defaultChunkSize) {
- var chunk = new WebInspector.TextChunk(this, i, i + this._defaultChunkSize);
+ var chunk = this._createNewChunk(i, i + this._defaultChunkSize);
this._textChunks.push(chunk);
- this._linesContainerElement.appendChild(chunk.element);
+ this.element.appendChild(chunk.element);
}
- this._indexChunks();
- this._highlighter.reset();
this._repaintAll();
},
- _makeLineAChunk: function(lineNumber)
+ makeLineAChunk: function(lineNumber)
{
if (!this._textChunks)
this._buildChunks();
@@ -163,31 +254,30 @@ WebInspector.TextViewer.prototype = {
var wasExpanded = oldChunk.expanded;
oldChunk.expanded = false;
- var insertIndex = oldChunk.chunkNumber + 1;
+ var insertIndex = chunkNumber + 1;
// Prefix chunk.
if (lineNumber > oldChunk.startLine) {
- var prefixChunk = new WebInspector.TextChunk(this, oldChunk.startLine, lineNumber);
+ var prefixChunk = this._createNewChunk(oldChunk.startLine, lineNumber);
this._textChunks.splice(insertIndex++, 0, prefixChunk);
- this._linesContainerElement.insertBefore(prefixChunk.element, oldChunk.element);
+ this.element.insertBefore(prefixChunk.element, oldChunk.element);
}
// Line chunk.
- var lineChunk = new WebInspector.TextChunk(this, lineNumber, lineNumber + 1);
+ var lineChunk = this._createNewChunk(lineNumber, lineNumber + 1);
this._textChunks.splice(insertIndex++, 0, lineChunk);
- this._linesContainerElement.insertBefore(lineChunk.element, oldChunk.element);
+ this.element.insertBefore(lineChunk.element, oldChunk.element);
// Suffix chunk.
if (oldChunk.startLine + oldChunk.linesCount > lineNumber + 1) {
- var suffixChunk = new WebInspector.TextChunk(this, lineNumber + 1, oldChunk.startLine + oldChunk.linesCount);
+ var suffixChunk = this._createNewChunk(lineNumber + 1, oldChunk.startLine + oldChunk.linesCount);
this._textChunks.splice(insertIndex, 0, suffixChunk);
- this._linesContainerElement.insertBefore(suffixChunk.element, oldChunk.element);
+ this.element.insertBefore(suffixChunk.element, oldChunk.element);
}
// Remove enclosing chunk.
- this._textChunks.splice(oldChunk.chunkNumber, 1);
- this._linesContainerElement.removeChild(oldChunk.element);
- this._indexChunks();
+ this._textChunks.splice(chunkNumber, 1);
+ this.element.removeChild(oldChunk.element);
if (wasExpanded) {
if (prefixChunk)
@@ -200,19 +290,315 @@ WebInspector.TextViewer.prototype = {
return lineChunk;
},
- _indexChunks: function()
+ _scroll: function()
{
- for (var i = 0; i < this._textChunks.length; ++i)
- this._textChunks[i].chunkNumber = i;
+ this._scheduleRepaintAll();
+ if (this._syncScrollListener)
+ this._syncScrollListener();
},
- _scroll: function()
+ _scheduleRepaintAll: function()
{
- var scrollTop = this.element.scrollTop;
- setTimeout(function() {
- if (scrollTop === this.element.scrollTop)
- this._repaintAll();
- }.bind(this), 50);
+ if (this._repaintAllTimer)
+ clearTimeout(this._repaintAllTimer);
+ this._repaintAllTimer = setTimeout(this._repaintAll.bind(this), 50);
+ },
+
+ beginUpdates: function()
+ {
+ this._paintCoalescingLevel++;
+ },
+
+ endUpdates: function()
+ {
+ this._paintCoalescingLevel--;
+ if (!this._paintCoalescingLevel)
+ this._repaintAll();
+ },
+
+ _chunkNumberForLine: function(lineNumber)
+ {
+ for (var i = 0; i < this._textChunks.length; ++i) {
+ var line = this._textChunks[i].startLine;
+ if (lineNumber >= line && lineNumber < line + this._textChunks[i].linesCount)
+ return i;
+ }
+ return this._textChunks.length - 1;
+ },
+
+ _chunkForLine: function(lineNumber)
+ {
+ return this._textChunks[this._chunkNumberForLine(lineNumber)];
+ },
+
+ _repaintAll: function()
+ {
+ delete this._repaintAllTimer;
+
+ if (this._paintCoalescingLevel)
+ return;
+
+ if (!this._textChunks)
+ this._buildChunks();
+
+ var visibleFrom = this.element.scrollTop;
+ var visibleTo = this.element.scrollTop + this.element.clientHeight;
+
+ var offset = 0;
+ var fromIndex = -1;
+ var toIndex = 0;
+ for (var i = 0; i < this._textChunks.length; ++i) {
+ var chunk = this._textChunks[i];
+ var chunkHeight = chunk.height;
+ if (offset + chunkHeight > visibleFrom && offset < visibleTo) {
+ if (fromIndex === -1)
+ fromIndex = i;
+ toIndex = i + 1;
+ } else {
+ if (offset >= visibleTo)
+ break;
+ }
+ offset += chunkHeight;
+ }
+
+ if (toIndex)
+ this._expandChunks(fromIndex, toIndex);
+ },
+
+ _totalHeight: function(firstElement, lastElement)
+ {
+ lastElement = (lastElement || firstElement).nextElementSibling;
+ if (lastElement)
+ return lastElement.offsetTop - firstElement.offsetTop;
+ else if (firstElement.offsetParent)
+ return firstElement.offsetParent.scrollHeight - firstElement.offsetTop;
+ return firstElement.offsetHeight;
+ },
+
+ resize: function()
+ {
+ this._repaintAll();
+ }
+}
+
+WebInspector.TextEditorGutterPanel = function(textModel, syncDecorationsForLineListener)
+{
+ WebInspector.TextEditorChunkedPanel.call(this, textModel);
+
+ this._syncDecorationsForLineListener = syncDecorationsForLineListener;
+
+ this.element = document.createElement("div");
+ this.element.className = "text-editor-lines";
+
+ this.element.addEventListener("scroll", this._scroll.bind(this), false);
+
+ this.freeCachedElements();
+ this._buildChunks();
+}
+
+WebInspector.TextEditorGutterPanel.prototype = {
+ freeCachedElements: function()
+ {
+ this._cachedRows = [];
+ },
+
+ _createNewChunk: function(startLine, endLine)
+ {
+ return new WebInspector.TextEditorGutterChunk(this, startLine, endLine);
+ },
+
+ _expandChunks: function(fromIndex, toIndex)
+ {
+ for (var i = 0; i < this._textChunks.length; ++i) {
+ this._textChunks[i].expanded = (fromIndex <= i && i < toIndex);
+ }
+ }
+}
+
+WebInspector.TextEditorGutterPanel.prototype.__proto__ = WebInspector.TextEditorChunkedPanel.prototype;
+
+WebInspector.TextEditorGutterChunk = function(textViewer, startLine, endLine)
+{
+ this._textViewer = textViewer;
+ this._textModel = textViewer._textModel;
+
+ this.startLine = startLine;
+ endLine = Math.min(this._textModel.linesCount, endLine);
+ this.linesCount = endLine - startLine;
+
+ this._expanded = false;
+
+ this.element = document.createElement("div");
+ this.element.lineNumber = startLine;
+ this.element.className = "webkit-line-number";
+
+ if (this.linesCount === 1) {
+ // Single line chunks are typically created for decorations. Host line number in
+ // the sub-element in order to allow flexible border / margin management.
+ var innerSpan = document.createElement("span");
+ innerSpan.className = "webkit-line-number-inner";
+ innerSpan.textContent = startLine + 1;
+ var outerSpan = document.createElement("div");
+ outerSpan.className = "webkit-line-number-outer";
+ outerSpan.appendChild(innerSpan);
+ this.element.appendChild(outerSpan);
+ } else {
+ var lineNumbers = [];
+ for (var i = startLine; i < endLine; ++i) {
+ lineNumbers.push(i + 1);
+ }
+ this.element.textContent = lineNumbers.join("\n");
+ }
+}
+
+WebInspector.TextEditorGutterChunk.prototype = {
+ addDecoration: function(decoration)
+ {
+ if (typeof decoration === "string") {
+ this.element.addStyleClass(decoration);
+ }
+ },
+
+ removeDecoration: function(decoration)
+ {
+ if (typeof decoration === "string") {
+ this.element.removeStyleClass(decoration);
+ }
+ },
+
+ get expanded()
+ {
+ return this._expanded;
+ },
+
+ set expanded(expanded)
+ {
+ if (this.linesCount === 1)
+ this._textViewer._syncDecorationsForLineListener(this.startLine);
+
+ if (this._expanded === expanded)
+ return;
+
+ this._expanded = expanded;
+
+ if (this.linesCount === 1)
+ return;
+
+ if (expanded) {
+ this._expandedLineRows = [];
+ var parentElement = this.element.parentElement;
+ for (var i = this.startLine; i < this.startLine + this.linesCount; ++i) {
+ var lineRow = this._createRow(i);
+ parentElement.insertBefore(lineRow, this.element);
+ this._expandedLineRows.push(lineRow);
+ }
+ parentElement.removeChild(this.element);
+ } else {
+ var elementInserted = false;
+ for (var i = 0; i < this._expandedLineRows.length; ++i) {
+ var lineRow = this._expandedLineRows[i];
+ var parentElement = lineRow.parentElement;
+ if (parentElement) {
+ if (!elementInserted) {
+ elementInserted = true;
+ parentElement.insertBefore(this.element, lineRow);
+ }
+ this._textViewer._cachedRows.push(lineRow);
+ parentElement.removeChild(lineRow);
+ }
+ }
+ delete this._expandedLineRows;
+ }
+ },
+
+ get height()
+ {
+ if (!this._expandedLineRows)
+ return this._textViewer._totalHeight(this.element);
+ return this._textViewer._totalHeight(this._expandedLineRows[0], this._expandedLineRows[this._expandedLineRows.length - 1]);
+ },
+
+ _createRow: function(lineNumber)
+ {
+ var lineRow = this._textViewer._cachedRows.pop() || document.createElement("div");
+ lineRow.lineNumber = lineNumber;
+ lineRow.className = "webkit-line-number";
+ lineRow.textContent = lineNumber + 1;
+ return lineRow;
+ }
+}
+
+WebInspector.TextEditorMainPanel = function(textModel, url, syncScrollListener, syncDecorationsForLineListener)
+{
+ WebInspector.TextEditorChunkedPanel.call(this, textModel);
+
+ this._syncScrollListener = syncScrollListener;
+ this._syncDecorationsForLineListener = syncDecorationsForLineListener;
+
+ this._url = url;
+ this._highlighter = new WebInspector.TextEditorHighlighter(textModel, this._highlightDataReady.bind(this));
+
+ this.element = document.createElement("div");
+ this.element.className = "text-editor-contents";
+ this.element.tabIndex = 0;
+
+ this.element.addEventListener("scroll", this._scroll.bind(this), false);
+ this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
+
+ var handleDOMUpdates = this._handleDOMUpdates.bind(this);
+ this.element.addEventListener("DOMCharacterDataModified", handleDOMUpdates, false);
+ this.element.addEventListener("DOMNodeInserted", handleDOMUpdates, false);
+ this.element.addEventListener("DOMNodeRemoved", handleDOMUpdates, false);
+
+ this.freeCachedElements();
+ this._buildChunks();
+}
+
+WebInspector.TextEditorMainPanel.prototype = {
+ set mimeType(mimeType)
+ {
+ this._highlighter.mimeType = mimeType;
+ },
+
+ markAndRevealRange: function(range)
+ {
+ if (this._rangeToMark) {
+ var markedLine = this._rangeToMark.startLine;
+ this._rangeToMark = null;
+ this._paintLines(markedLine, markedLine + 1);
+ }
+
+ if (range) {
+ this._rangeToMark = range;
+ this.revealLine(range.startLine);
+ this._paintLines(range.startLine, range.startLine + 1);
+ if (this._markedRangeElement)
+ this._markedRangeElement.scrollIntoViewIfNeeded();
+ }
+ delete this._markedRangeElement;
+ },
+
+ highlightLine: function(lineNumber)
+ {
+ this.clearLineHighlight();
+ this._highlightedLine = lineNumber;
+ this.revealLine(lineNumber);
+ this.addDecoration(lineNumber, "webkit-highlighted-line");
+ },
+
+ clearLineHighlight: function()
+ {
+ if (typeof this._highlightedLine === "number") {
+ this.removeDecoration(this._highlightedLine, "webkit-highlighted-line");
+ delete this._highlightedLine;
+ }
+ },
+
+ freeCachedElements: function()
+ {
+ this._cachedSpans = [];
+ this._cachedTextNodes = [];
+ this._cachedRows = [];
},
_handleKeyDown: function()
@@ -248,16 +634,15 @@ WebInspector.TextViewer.prototype = {
editLine: function(lineRow, callback)
{
- var element = lineRow.lastChild;
- var oldContent = element.innerHTML;
+ var oldContent = lineRow.innerHTML;
function finishEditing(committed, e, newContent)
{
if (committed)
callback(newContent);
- element.innerHTML = oldContent;
+ lineRow.innerHTML = oldContent;
delete this._editingLine;
}
- this._editingLine = WebInspector.startEditing(element, {
+ this._editingLine = WebInspector.startEditing(lineRow, {
context: null,
commitHandler: finishEditing.bind(this, true),
cancelHandler: finishEditing.bind(this, false),
@@ -265,102 +650,21 @@ WebInspector.TextViewer.prototype = {
});
},
- _beforeCopy: function(e)
- {
- e.preventDefault();
- },
-
- _copy: function(e)
- {
- var range = this._getSelection();
- var text = this._textModel.copyRange(range);
- InspectorFrontendHost.copyText(text);
- e.preventDefault();
- },
-
- beginUpdates: function(enabled)
- {
- this._paintCoalescingLevel++;
- },
-
- endUpdates: function(enabled)
- {
- this._paintCoalescingLevel--;
- if (!this._paintCoalescingLevel)
- this._repaintAll();
- },
-
- _chunkForOffset: function(offset)
- {
- var currentOffset = 0;
- var row = this._linesContainerElement.firstChild;
- while (row) {
- var rowHeight = row.offsetHeight;
- if (offset >= currentOffset && offset < currentOffset + rowHeight)
- return row.chunkNumber;
- row = row.nextSibling;
- currentOffset += rowHeight;
- }
- return this._textChunks.length - 1;
- },
-
- _chunkNumberForLine: function(lineNumber)
- {
- for (var i = 0; i < this._textChunks.length; ++i) {
- var line = this._textChunks[i].startLine;
- if (lineNumber >= this._textChunks[i].startLine && lineNumber < this._textChunks[i].startLine + this._textChunks[i].linesCount)
- return i;
- }
- return this._textChunks.length - 1;
- },
-
- _chunkForLine: function(lineNumber)
+ _buildChunks: function()
{
- return this._textChunks[this._chunkNumberForLine(lineNumber)];
+ this._highlighter.reset();
+ WebInspector.TextEditorChunkedPanel.prototype._buildChunks.call(this);
},
- _chunkStartLine: function(chunkNumber)
+ _createNewChunk: function(startLine, endLine)
{
- var lineNumber = 0;
- for (var i = 0; i < chunkNumber && i < this._textChunks.length; ++i)
- lineNumber += this._textChunks[i].linesCount;
- return lineNumber;
+ return new WebInspector.TextEditorMainChunk(this, startLine, endLine);
},
- _repaintAll: function()
+ _expandChunks: function(fromIndex, toIndex)
{
- if (this._paintCoalescingLevel)
- return;
-
- if (!this._textChunks)
- this._buildChunks();
-
- var visibleFrom = this.element.scrollTop;
- var visibleTo = this.element.scrollTop + this.element.clientHeight;
-
- var offset = 0;
- var firstVisibleLine = -1;
- var lastVisibleLine = 0;
- var toExpand = [];
- var toCollapse = [];
- for (var i = 0; i < this._textChunks.length; ++i) {
- var chunk = this._textChunks[i];
- var chunkHeight = chunk.height;
- if (offset + chunkHeight > visibleFrom && offset < visibleTo) {
- toExpand.push(chunk);
- if (firstVisibleLine === -1)
- firstVisibleLine = chunk.startLine;
- lastVisibleLine = chunk.startLine + chunk.linesCount;
- } else {
- toCollapse.push(chunk);
- if (offset >= visibleTo)
- break;
- }
- offset += chunkHeight;
- }
-
- for (var j = i; j < this._textChunks.length; ++j)
- toCollapse.push(this._textChunks[i]);
+ var lastChunk = this._textChunks[toIndex - 1];
+ var lastVisibleLine = lastChunk.startLine + lastChunk.linesCount;
var selection = this._getSelection();
@@ -368,10 +672,9 @@ WebInspector.TextViewer.prototype = {
this._highlighter.highlight(lastVisibleLine);
delete this._muteHighlightListener;
- for (var i = 0; i < toCollapse.length; ++i)
- toCollapse[i].expanded = false;
- for (var i = 0; i < toExpand.length; ++i)
- toExpand[i].expanded = true;
+ for (var i = 0; i < this._textChunks.length; ++i) {
+ this._textChunks[i].expanded = (fromIndex <= i && i < toIndex);
+ }
this._restoreSelection(selection);
},
@@ -380,40 +683,40 @@ WebInspector.TextViewer.prototype = {
{
if (this._muteHighlightListener)
return;
+ this._paintLines(fromLine, toLine, true /*restoreSelection*/);
+ },
+ _paintLines: function(fromLine, toLine, restoreSelection)
+ {
var selection;
+ var chunk = this._chunkForLine(fromLine);
for (var i = fromLine; i < toLine; ++i) {
- var lineRow = this._textModel.getAttribute(i, "line-row");
- if (!lineRow || lineRow.highlighted)
+ if (i >= chunk.startLine + chunk.linesCount)
+ chunk = this._chunkForLine(i);
+ var lineRow = chunk.getExpandedLineRow(i);
+ if (!lineRow)
continue;
- if (!selection)
+ if (restoreSelection && !selection)
selection = this._getSelection();
this._paintLine(lineRow, i);
}
- this._restoreSelection(selection);
- },
-
- _paintLines: function(fromLine, toLine)
- {
- for (var i = fromLine; i < toLine; ++i) {
- var lineRow = this._textModel.getAttribute(i, "line-row");
- if (lineRow)
- this._paintLine(lineRow, i);
- }
+ if (restoreSelection)
+ this._restoreSelection(selection);
},
_paintLine: function(lineRow, lineNumber)
{
- var element = lineRow.lastChild;
var highlight = this._textModel.getAttribute(lineNumber, "highlight");
if (!highlight) {
if (this._rangeToMark && this._rangeToMark.startLine === lineNumber)
- this._markedRangeElement = highlightSearchResult(element, this._rangeToMark.startColumn, this._rangeToMark.endColumn - this._rangeToMark.startColumn);
+ this._markedRangeElement = highlightSearchResult(lineRow, this._rangeToMark.startColumn, this._rangeToMark.endColumn - this._rangeToMark.startColumn);
return;
}
- element.removeChildren();
+ lineRow.removeChildren();
var line = this._textModel.line(lineNumber);
+ if (!line)
+ lineRow.appendChild(document.createElement("br"));
var plainTextStart = -1;
for (var j = 0; j < line.length;) {
@@ -430,98 +733,64 @@ WebInspector.TextViewer.prototype = {
j++;
} else {
if (plainTextStart !== -1) {
- this._appendTextNode(element, line.substring(plainTextStart, j));
+ this._appendTextNode(lineRow, line.substring(plainTextStart, j));
plainTextStart = -1;
}
- this._appendSpan(element, line.substring(j, j + attribute.length), attribute.tokenType);
+ this._appendSpan(lineRow, line.substring(j, j + attribute.length), attribute.tokenType);
j += attribute.length;
}
}
if (plainTextStart !== -1)
- this._appendTextNode(element, line.substring(plainTextStart, line.length));
+ this._appendTextNode(lineRow, line.substring(plainTextStart, line.length));
if (this._rangeToMark && this._rangeToMark.startLine === lineNumber)
- this._markedRangeElement = highlightSearchResult(element, this._rangeToMark.startColumn, this._rangeToMark.endColumn - this._rangeToMark.startColumn);
+ this._markedRangeElement = highlightSearchResult(lineRow, this._rangeToMark.startColumn, this._rangeToMark.endColumn - this._rangeToMark.startColumn);
if (lineRow.decorationsElement)
- element.appendChild(lineRow.decorationsElement);
+ lineRow.appendChild(lineRow.decorationsElement);
},
- _releaseLinesHighlight: function(fromLine, toLine)
+ _releaseLinesHighlight: function(lineRow)
{
- for (var i = fromLine; i < toLine; ++i) {
- var lineRow = this._textModel.getAttribute(i, "line-row");
- if (!lineRow)
- continue;
- var element = lineRow.lastChild;
- if ("spans" in element) {
- var spans = element.spans;
- for (var j = 0; j < spans.length; ++j)
- this._cachedSpans.push(spans[j]);
- delete element.spans;
- }
- if ("textNodes" in element) {
- var textNodes = element.textNodes;
- for (var j = 0; j < textNodes.length; ++j)
- this._cachedTextNodes.push(textNodes[j]);
- delete element.textNodes;
- }
+ if (!lineRow)
+ return;
+ if ("spans" in lineRow) {
+ var spans = lineRow.spans;
+ for (var j = 0; j < spans.length; ++j)
+ this._cachedSpans.push(spans[j]);
+ delete lineRow.spans;
}
+ if ("textNodes" in lineRow) {
+ var textNodes = lineRow.textNodes;
+ for (var j = 0; j < textNodes.length; ++j)
+ this._cachedTextNodes.push(textNodes[j]);
+ delete lineRow.textNodes;
+ }
+ this._cachedRows.push(lineRow);
},
_getSelection: function()
{
var selection = window.getSelection();
- if (selection.isCollapsed)
+ if (!selection.rangeCount)
return null;
var selectionRange = selection.getRangeAt(0);
// Selection may be outside of the viewer.
if (!this.element.isAncestor(selectionRange.startContainer) || !this.element.isAncestor(selectionRange.endContainer))
return null;
var start = this._selectionToPosition(selectionRange.startContainer, selectionRange.startOffset);
- var end = this._selectionToPosition(selectionRange.endContainer, selectionRange.endOffset);
- return new WebInspector.TextRange(start.line, start.column, end.line, end.column);
+ var end = selectionRange.collapsed ? start : this._selectionToPosition(selectionRange.endContainer, selectionRange.endOffset);
+ if (selection.anchorNode === selectionRange.startContainer && selection.anchorOffset === selectionRange.startOffset)
+ return new WebInspector.TextRange(start.line, start.column, end.line, end.column);
+ else
+ return new WebInspector.TextRange(end.line, end.column, start.line, start.column);
},
_restoreSelection: function(range)
{
if (!range)
return;
- var startRow = this._textModel.getAttribute(range.startLine, "line-row");
- if (startRow)
- var start = startRow.lastChild.rangeBoundaryForOffset(range.startColumn);
- else {
- var offset = range.startColumn;
- var chunkNumber = this._chunkNumberForLine(range.startLine);
- for (var i = this._chunkStartLine(chunkNumber); i < range.startLine; ++i)
- offset += this._textModel.line(i).length + 1; // \n
- var lineCell = this._textChunks[chunkNumber].element.lastChild;
- if (lineCell.firstChild)
- var start = { container: lineCell.firstChild, offset: offset };
- else
- var start = { container: lineCell, offset: 0 };
- }
-
- var endRow = this._textModel.getAttribute(range.endLine, "line-row");
- if (endRow)
- var end = endRow.lastChild.rangeBoundaryForOffset(range.endColumn);
- else {
- var offset = range.endColumn;
- var chunkNumber = this._chunkNumberForLine(range.endLine);
- for (var i = this._chunkStartLine(chunkNumber); i < range.endLine; ++i)
- offset += this._textModel.line(i).length + 1; // \n
- var lineCell = this._textChunks[chunkNumber].element.lastChild;
- if (lineCell.firstChild)
- var end = { container: lineCell.firstChild, offset: offset };
- else
- var end = { container: lineCell, offset: 0 };
- }
-
- var selectionRange = document.createRange();
- selectionRange.setStart(start.container, start.offset);
- selectionRange.setEnd(end.container, end.offset);
-
- var selection = window.getSelection();
- selection.removeAllRanges();
- selection.addRange(selectionRange);
+ var start = this._positionToSelection(range.startLine, range.startColumn);
+ var end = range.isEmpty() ? start : this._positionToSelection(range.endLine, range.endColumn);
+ window.getSelection().setBaseAndExtent(start.container, start.offset, end.container, end.offset);
},
_selectionToPosition: function(container, offset)
@@ -531,21 +800,26 @@ WebInspector.TextViewer.prototype = {
if (container === this.element && offset === 1)
return { line: this._textModel.linesCount - 1, column: this._textModel.lineLength(this._textModel.linesCount - 1) };
- var lineRow = container.enclosingNodeOrSelfWithNodeName("tr");
+ var lineRow = container.enclosingNodeOrSelfWithNodeName("DIV");
var lineNumber = lineRow.lineNumber;
- if (container.nodeName === "TD" && offset === 0)
+ if (container === lineRow && offset === 0)
return { line: lineNumber, column: 0 };
- if (container.nodeName === "TD" && offset === 1)
- return { line: lineNumber, column: this._textModel.lineLength(lineNumber) };
+ // This may be chunk and chunks may contain \n.
var column = 0;
- var node = lineRow.lastChild.traverseNextTextNode(lineRow.lastChild);
+ var node = lineRow.traverseNextTextNode(lineRow);
while (node && node !== container) {
- column += node.textContent.length;
- node = node.traverseNextTextNode(lineRow.lastChild);
+ var text = node.textContent;
+ for (var i = 0; i < text.length; ++i) {
+ if (text.charAt(i) === "\n") {
+ lineNumber++;
+ column = 0;
+ } else
+ column++;
+ }
+ node = node.traverseNextTextNode(lineRow);
}
- // This may be chunk and chunks may contain \n.
if (node === container && offset) {
var text = node.textContent;
for (var i = 0; i < offset; ++i) {
@@ -559,6 +833,25 @@ WebInspector.TextViewer.prototype = {
return { line: lineNumber, column: column };
},
+ _positionToSelection: function(line, column)
+ {
+ var chunk = this._chunkForLine(line);
+ var lineRow = chunk.getExpandedLineRow(line);
+ if (lineRow)
+ var rangeBoundary = lineRow.rangeBoundaryForOffset(column);
+ else {
+ var offset = column;
+ for (var i = chunk.startLine; i < line; ++i)
+ offset += this._textModel.lineLength(i) + 1; // \n
+ lineRow = chunk.element;
+ if (lineRow.firstChild)
+ var rangeBoundary = { container: lineRow.firstChild, offset: offset };
+ else
+ var rangeBoundary = { container: lineRow, offset: 0 };
+ }
+ return rangeBoundary;
+ },
+
_appendSpan: function(element, content, className)
{
if (className === "html-resource-link" || className === "html-external-link") {
@@ -578,9 +871,9 @@ WebInspector.TextViewer.prototype = {
_appendTextNode: function(element, text)
{
var textNode = this._cachedTextNodes.pop();
- if (textNode) {
+ if (textNode)
textNode.nodeValue = text;
- } else
+ else
textNode = document.createTextNode(text);
element.appendChild(textNode);
if (!("textNodes" in element))
@@ -614,58 +907,52 @@ WebInspector.TextViewer.prototype = {
return WebInspector.completeURL(this._url, hrefValue);
},
- resize: function()
+ _handleDOMUpdates: function(e)
{
- this._repaintAll();
+ var target = e.target;
+ var lineRow = target.enclosingNodeOrSelfWithClass("webkit-line-content");
+ if (lineRow === target || !lineRow || !lineRow.decorationsElement || !lineRow.decorationsElement.isAncestor(target))
+ return;
+ if (this._syncDecorationsForLineListener) {
+ // Wait until this event is processed and only then sync the sizes. This is necessary in
+ // case of the DOMNodeRemoved event, because it is dispatched before the removal takes place.
+ setTimeout(function() {
+ this._syncDecorationsForLineListener(lineRow.lineNumber);
+ }.bind(this), 0);
+ }
}
}
-var cachedSpans = [];
+WebInspector.TextEditorMainPanel.prototype.__proto__ = WebInspector.TextEditorChunkedPanel.prototype;
-WebInspector.TextChunk = function(textViewer, startLine, endLine)
+WebInspector.TextEditorMainChunk = function(textViewer, startLine, endLine)
{
this._textViewer = textViewer;
- this.element = document.createElement("tr");
this._textModel = textViewer._textModel;
- this.element.chunk = this;
+
+ this.element = document.createElement("div");
this.element.lineNumber = startLine;
+ this.element.className = "webkit-line-content";
this.startLine = startLine;
endLine = Math.min(this._textModel.linesCount, endLine);
this.linesCount = endLine - startLine;
- this._lineNumberElement = document.createElement("td");
- this._lineNumberElement.className = "webkit-line-number";
- this.element.appendChild(this._lineNumberElement);
-
- this._lineContentElement = document.createElement("td");
- this._lineContentElement.className = "webkit-line-content";
- this.element.appendChild(this._lineContentElement);
-
this._expanded = false;
- var lineNumbers = [];
var lines = [];
for (var i = startLine; i < endLine; ++i) {
- lineNumbers.push(i + 1);
lines.push(this._textModel.line(i));
}
- if (this.linesCount === 1) {
- // Single line chunks are typically created for decorations. Host line number in
- // the sub-element in order to allow flexible border / margin management.
- var innerSpan = document.createElement("span");
- innerSpan.className = "webkit-line-number-inner";
- innerSpan.textContent = startLine + 1;
- var outerSpan = document.createElement("div");
- outerSpan.className = "webkit-line-number-outer";
- outerSpan.appendChild(innerSpan);
- this._lineNumberElement.appendChild(outerSpan);
- } else
- this._lineNumberElement.textContent = lineNumbers.join("\n");
- this._lineContentElement.textContent = lines.join("\n");
+
+ this.element.textContent = lines.join("\n");
+
+ // The last empty line will get swallowed otherwise.
+ if (!lines[lines.length - 1])
+ this.element.appendChild(document.createElement("br"));
}
-WebInspector.TextChunk.prototype = {
+WebInspector.TextEditorMainChunk.prototype = {
addDecoration: function(decoration)
{
if (typeof decoration === "string") {
@@ -674,7 +961,8 @@ WebInspector.TextChunk.prototype = {
}
if (!this.element.decorationsElement) {
this.element.decorationsElement = document.createElement("div");
- this._lineContentElement.appendChild(this.element.decorationsElement);
+ this.element.decorationsElement.className = "webkit-line-decorations";
+ this.element.appendChild(this.element.decorationsElement);
}
this.element.decorationsElement.appendChild(decoration);
},
@@ -703,71 +991,63 @@ WebInspector.TextChunk.prototype = {
this._expanded = expanded;
if (this.linesCount === 1) {
- this._textModel.setAttribute(this.startLine, "line-row", this.element);
if (expanded)
- this._textViewer._paintLines(this.startLine, this.startLine + 1);
+ this._textViewer._paintLine(this.element, this.startLine);
return;
}
if (expanded) {
+ this._expandedLineRows = [];
var parentElement = this.element.parentElement;
for (var i = this.startLine; i < this.startLine + this.linesCount; ++i) {
var lineRow = this._createRow(i);
- this._textModel.setAttribute(i, "line-row", lineRow);
parentElement.insertBefore(lineRow, this.element);
+ this._expandedLineRows.push(lineRow);
+ this._textViewer._paintLine(lineRow, i);
}
parentElement.removeChild(this.element);
-
- this._textViewer._paintLines(this.startLine, this.startLine + this.linesCount);
} else {
- var firstLine = this._textModel.getAttribute(this.startLine, "line-row");
- var parentElement = firstLine.parentElement;
- this._textViewer._releaseLinesHighlight(this.startLine, this.startLine + this.linesCount);
-
- parentElement.insertBefore(this.element, firstLine);
- for (var i = this.startLine; i < this.startLine + this.linesCount; ++i) {
- var lineRow = this._textModel.getAttribute(i, "line-row");
- this._textModel.removeAttribute(i, "line-row");
- this._textViewer._cachedRows.push(lineRow);
- parentElement.removeChild(lineRow);
+ var elementInserted = false;
+ for (var i = 0; i < this._expandedLineRows.length; ++i) {
+ var lineRow = this._expandedLineRows[i];
+ var parentElement = lineRow.parentElement;
+ if (parentElement) {
+ if (!elementInserted) {
+ elementInserted = true;
+ parentElement.insertBefore(this.element, lineRow);
+ }
+ this._textViewer._releaseLinesHighlight(lineRow);
+ parentElement.removeChild(lineRow);
+ }
}
+ delete this._expandedLineRows;
}
},
get height()
{
- if (!this._expanded)
- return this.element.offsetHeight;
- var result = 0;
- for (var i = this.startLine; i < this.startLine + this.linesCount; ++i) {
- var lineRow = this._textModel.getAttribute(i, "line-row");
- result += lineRow.offsetHeight;
- }
- return result;
+ if (!this._expandedLineRows)
+ return this._textViewer._totalHeight(this.element);
+ return this._textViewer._totalHeight(this._expandedLineRows[0], this._expandedLineRows[this._expandedLineRows.length - 1]);
},
_createRow: function(lineNumber)
{
- var cachedRows = this._textViewer._cachedRows;
- if (cachedRows.length) {
- var lineRow = cachedRows[cachedRows.length - 1];
- cachedRows.length--;
- var lineNumberElement = lineRow.firstChild;
- var lineContentElement = lineRow.lastChild;
- } else {
- var lineRow = document.createElement("tr");
-
- var lineNumberElement = document.createElement("td");
- lineNumberElement.className = "webkit-line-number";
- lineRow.appendChild(lineNumberElement);
-
- var lineContentElement = document.createElement("td");
- lineContentElement.className = "webkit-line-content";
- lineRow.appendChild(lineContentElement);
- }
+ var lineRow = this._textViewer._cachedRows.pop() || document.createElement("div");
lineRow.lineNumber = lineNumber;
- lineNumberElement.textContent = lineNumber + 1;
- lineContentElement.textContent = this._textModel.line(lineNumber);
+ lineRow.className = "webkit-line-content";
+ lineRow.textContent = this._textModel.line(lineNumber);
+ if (!lineRow.textContent)
+ lineRow.appendChild(document.createElement("br"));
return lineRow;
+ },
+
+ getExpandedLineRow: function(lineNumber)
+ {
+ if (!this._expanded || lineNumber < this.startLine || lineNumber >= this.startLine + this.linesCount)
+ return null;
+ if (!this._expandedLineRows)
+ return this.element;
+ return this._expandedLineRows[lineNumber - this.startLine];
}
}
diff --git a/Source/WebCore/inspector/front-end/UglifyJS/parse-js.js b/Source/WebCore/inspector/front-end/UglifyJS/parse-js.js
index a218c01..a559145 100644
--- a/Source/WebCore/inspector/front-end/UglifyJS/parse-js.js
+++ b/Source/WebCore/inspector/front-end/UglifyJS/parse-js.js
@@ -182,7 +182,6 @@ var OPERATORS = array_to_hash([
">>=",
"<<=",
">>>=",
- "~=",
"%=",
"|=",
"^=",
@@ -253,18 +252,19 @@ function is_token(token, type, val) {
var EX_EOF = {};
-function tokenizer($TEXT, skip_comments) {
+function tokenizer($TEXT) {
var S = {
- text : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''),
- pos : 0,
- tokpos : 0,
- line : 0,
- tokline : 0,
- col : 0,
- tokcol : 0,
- newline_before : false,
- regex_allowed : false
+ text : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''),
+ pos : 0,
+ tokpos : 0,
+ line : 0,
+ tokline : 0,
+ col : 0,
+ tokcol : 0,
+ newline_before : false,
+ regex_allowed : false,
+ comments_before : []
};
function peek() { return S.text.charAt(S.pos); };
@@ -299,7 +299,7 @@ function tokenizer($TEXT, skip_comments) {
S.tokpos = S.pos;
};
- function token(type, value) {
+ function token(type, value, is_comment) {
S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) ||
(type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||
(type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value)));
@@ -311,6 +311,10 @@ function tokenizer($TEXT, skip_comments) {
pos : S.tokpos,
nlb : S.newline_before
};
+ if (!is_comment) {
+ ret.comments_before = S.comments_before;
+ S.comments_before = [];
+ }
S.newline_before = false;
return ret;
};
@@ -334,7 +338,7 @@ function tokenizer($TEXT, skip_comments) {
};
function read_num(prefix) {
- var has_e = false, after_e = false, has_x = false;
+ var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
var num = read_while(function(ch, i){
if (ch == "x" || ch == "X") {
if (has_x) return false;
@@ -350,7 +354,12 @@ function tokenizer($TEXT, skip_comments) {
}
if (ch == "+") return after_e;
after_e = false;
- return is_alphanumeric_char(ch) || ch == ".";
+ if (ch == ".") {
+ if (!has_dot)
+ return has_dot = true;
+ return false;
+ }
+ return is_alphanumeric_char(ch);
});
if (prefix)
num = prefix + num;
@@ -412,7 +421,7 @@ function tokenizer($TEXT, skip_comments) {
ret = S.text.substring(S.pos, i);
S.pos = i;
}
- return token("comment1", ret);
+ return token("comment1", ret, true);
};
function read_multiline_comment() {
@@ -420,8 +429,9 @@ function tokenizer($TEXT, skip_comments) {
return with_eof_error("Unterminated multiline comment", function(){
var i = find("*/", true),
text = S.text.substring(S.pos, i),
- tok = token("comment2", text);
+ tok = token("comment2", text, true);
S.pos = i + 2;
+ S.line += text.split("\n").length - 1;
S.newline_before = text.indexOf("\n") >= 0;
return tok;
});
@@ -455,6 +465,7 @@ function tokenizer($TEXT, skip_comments) {
function read_operator(prefix) {
function grow(op) {
+ if (!peek()) return op;
var bigger = op + peek();
if (HOP(OPERATORS, bigger)) {
next();
@@ -466,19 +477,18 @@ function tokenizer($TEXT, skip_comments) {
return token("operator", grow(prefix || next()));
};
- var handle_slash = skip_comments ? function() {
+ function handle_slash() {
next();
var regex_allowed = S.regex_allowed;
switch (peek()) {
- case "/": read_line_comment(); S.regex_allowed = regex_allowed; return next_token();
- case "*": read_multiline_comment(); S.regex_allowed = regex_allowed; return next_token();
- }
- return S.regex_allowed ? read_regexp() : read_operator("/");
- } : function() {
- next();
- switch (peek()) {
- case "/": return read_line_comment();
- case "*": return read_multiline_comment();
+ case "/":
+ S.comments_before.push(read_line_comment());
+ S.regex_allowed = regex_allowed;
+ return next_token();
+ case "*":
+ S.comments_before.push(read_multiline_comment());
+ S.regex_allowed = regex_allowed;
+ return next_token();
}
return S.regex_allowed ? read_regexp() : read_operator("/");
};
@@ -559,7 +569,7 @@ var ASSIGNMENT = (function(a, ret, i){
}
return ret;
})(
- ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "~=", "%=", "|=", "^=", "&="],
+ ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="],
{ "=": true },
0
);
@@ -605,13 +615,13 @@ NodeWithToken.prototype.toString = function() { return this.name; };
function parse($TEXT, strict_mode, embed_tokens) {
var S = {
- input: tokenizer($TEXT, true),
- token: null,
- prev: null,
- peeked: null,
- in_function: 0,
- in_loop: 0,
- labels: []
+ input : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT,
+ token : null,
+ prev : null,
+ peeked : null,
+ in_function : 0,
+ in_loop : 0,
+ labels : []
};
S.token = next();
@@ -1016,20 +1026,23 @@ function parse($TEXT, strict_mode, embed_tokens) {
unexpected();
};
- function expr_list(closing, allow_trailing_comma) {
+ function expr_list(closing, allow_trailing_comma, allow_empty) {
var first = true, a = [];
while (!is("punc", closing)) {
if (first) first = false; else expect(",");
- if (allow_trailing_comma && is("punc", closing))
- break;
- a.push(expression(false));
+ if (allow_trailing_comma && is("punc", closing)) break;
+ if (is("punc", ",") && allow_empty) {
+ a.push([ "atom", "undefined" ]);
+ } else {
+ a.push(expression(false));
+ }
}
next();
return a;
};
function array_() {
- return as("array", expr_list("]", !strict_mode));
+ return as("array", expr_list("]", !strict_mode, true));
};
function object_() {
@@ -1231,3 +1244,4 @@ exports.KEYWORDS = KEYWORDS;
exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;
exports.OPERATORS = OPERATORS;
exports.is_alphanumeric_char = is_alphanumeric_char;
+exports.is_identifier_char = is_identifier_char;
diff --git a/Source/WebCore/inspector/front-end/UglifyJS/process.js b/Source/WebCore/inspector/front-end/UglifyJS/process.js
index 65dbc0e..5e32dd0 100755
--- a/Source/WebCore/inspector/front-end/UglifyJS/process.js
+++ b/Source/WebCore/inspector/front-end/UglifyJS/process.js
@@ -69,139 +69,135 @@ var jsp = require("./parse-js"),
function ast_walker(ast) {
function _vardefs(defs) {
- return MAP(defs, function(def){
+ return [ this[0], MAP(defs, function(def){
var a = [ def[0] ];
if (def.length > 1)
a[1] = walk(def[1]);
return a;
- });
+ }) ];
};
var walkers = {
"string": function(str) {
- return [ "string", str ];
+ return [ this[0], str ];
},
"num": function(num) {
- return [ "num", num ];
+ return [ this[0], num ];
},
"name": function(name) {
- return [ "name", name ];
+ return [ this[0], name ];
},
"toplevel": function(statements) {
- return [ "toplevel", MAP(statements, walk) ];
+ return [ this[0], MAP(statements, walk) ];
},
"block": function(statements) {
- var out = [ "block" ];
+ var out = [ this[0] ];
if (statements != null)
out.push(MAP(statements, walk));
return out;
},
- "var": function(defs) {
- return [ "var", _vardefs(defs) ];
- },
- "const": function(defs) {
- return [ "const", _vardefs(defs) ];
- },
+ "var": _vardefs,
+ "const": _vardefs,
"try": function(t, c, f) {
return [
- "try",
+ this[0],
MAP(t, walk),
c != null ? [ c[0], MAP(c[1], walk) ] : null,
f != null ? MAP(f, walk) : null
];
},
"throw": function(expr) {
- return [ "throw", walk(expr) ];
+ return [ this[0], walk(expr) ];
},
"new": function(ctor, args) {
- return [ "new", walk(ctor), MAP(args, walk) ];
+ return [ this[0], walk(ctor), MAP(args, walk) ];
},
"switch": function(expr, body) {
- return [ "switch", walk(expr), MAP(body, function(branch){
+ return [ this[0], walk(expr), MAP(body, function(branch){
return [ branch[0] ? walk(branch[0]) : null,
MAP(branch[1], walk) ];
}) ];
},
"break": function(label) {
- return [ "break", label ];
+ return [ this[0], label ];
},
"continue": function(label) {
- return [ "continue", label ];
+ return [ this[0], label ];
},
"conditional": function(cond, t, e) {
- return [ "conditional", walk(cond), walk(t), walk(e) ];
+ return [ this[0], walk(cond), walk(t), walk(e) ];
},
"assign": function(op, lvalue, rvalue) {
- return [ "assign", op, walk(lvalue), walk(rvalue) ];
+ return [ this[0], op, walk(lvalue), walk(rvalue) ];
},
"dot": function(expr) {
- return [ "dot", walk(expr) ].concat(slice(arguments, 1));
+ return [ this[0], walk(expr) ].concat(slice(arguments, 1));
},
"call": function(expr, args) {
- return [ "call", walk(expr), MAP(args, walk) ];
+ return [ this[0], walk(expr), MAP(args, walk) ];
},
"function": function(name, args, body) {
- return [ "function", name, args.slice(), MAP(body, walk) ];
+ return [ this[0], name, args.slice(), MAP(body, walk) ];
},
"defun": function(name, args, body) {
- return [ "defun", name, args.slice(), MAP(body, walk) ];
+ return [ this[0], name, args.slice(), MAP(body, walk) ];
},
"if": function(conditional, t, e) {
- return [ "if", walk(conditional), walk(t), walk(e) ];
+ return [ this[0], walk(conditional), walk(t), walk(e) ];
},
"for": function(init, cond, step, block) {
- return [ "for", walk(init), walk(cond), walk(step), walk(block) ];
+ return [ this[0], walk(init), walk(cond), walk(step), walk(block) ];
},
"for-in": function(has_var, key, hash, block) {
- return [ "for-in", has_var, key, walk(hash), walk(block) ];
+ return [ this[0], has_var, key, walk(hash), walk(block) ];
},
"while": function(cond, block) {
- return [ "while", walk(cond), walk(block) ];
+ return [ this[0], walk(cond), walk(block) ];
},
"do": function(cond, block) {
- return [ "do", walk(cond), walk(block) ];
+ return [ this[0], walk(cond), walk(block) ];
},
"return": function(expr) {
- return [ "return", walk(expr) ];
+ return [ this[0], walk(expr) ];
},
"binary": function(op, left, right) {
- return [ "binary", op, walk(left), walk(right) ];
+ return [ this[0], op, walk(left), walk(right) ];
},
"unary-prefix": function(op, expr) {
- return [ "unary-prefix", op, walk(expr) ];
+ return [ this[0], op, walk(expr) ];
},
"unary-postfix": function(op, expr) {
- return [ "unary-postfix", op, walk(expr) ];
+ return [ this[0], op, walk(expr) ];
},
"sub": function(expr, subscript) {
- return [ "sub", walk(expr), walk(subscript) ];
+ return [ this[0], walk(expr), walk(subscript) ];
},
"object": function(props) {
- return [ "object", MAP(props, function(p){
+ return [ this[0], MAP(props, function(p){
return p.length == 2
? [ p[0], walk(p[1]) ]
: [ p[0], walk(p[1]), p[2] ]; // get/set-ter
}) ];
},
"regexp": function(rx, mods) {
- return [ "regexp", rx, mods ];
+ return [ this[0], rx, mods ];
},
"array": function(elements) {
- return [ "array", MAP(elements, walk) ];
+ return [ this[0], MAP(elements, walk) ];
},
"stat": function(stat) {
- return [ "stat", walk(stat) ];
+ return [ this[0], walk(stat) ];
},
"seq": function() {
- return [ "seq" ].concat(MAP(slice(arguments), walk));
+ return [ this[0] ].concat(MAP(slice(arguments), walk));
},
"label": function(name, block) {
- return [ "label", name, walk(block) ];
+ return [ this[0], name, walk(block) ];
},
"with": function(expr, block) {
- return [ "with", walk(expr), walk(block) ];
+ return [ this[0], walk(expr), walk(block) ];
},
"atom": function(name) {
- return [ "atom", name ];
+ return [ this[0], name ];
}
};
@@ -405,7 +401,7 @@ function ast_add_scope(ast) {
},
"try": function(t, c, f) {
if (c != null) return [
- "try",
+ this[0],
MAP(t, walk),
[ define(c[0]), MAP(c[1], walk) ],
f != null ? MAP(f, walk) : null
@@ -491,9 +487,9 @@ function ast_mangle(ast, do_toplevel) {
};
function _vardefs(defs) {
- return MAP(defs, function(d){
+ return [ this[0], MAP(defs, function(d){
return [ get_mangled(d[0]), walk(d[1]) ];
- });
+ }) ];
};
return w.with_walkers({
@@ -510,28 +506,25 @@ function ast_mangle(ast, do_toplevel) {
}
return ast;
},
- "var": function(defs) {
- return [ "var", _vardefs(defs) ];
- },
- "const": function(defs) {
- return [ "const", _vardefs(defs) ];
- },
+ "var": _vardefs,
+ "const": _vardefs,
"name": function(name) {
- return [ "name", get_mangled(name) ];
+ return [ this[0], get_mangled(name) ];
},
"try": function(t, c, f) {
- return [ "try",
+ return [ this[0],
MAP(t, walk),
c != null ? [ get_mangled(c[0]), MAP(c[1], walk) ] : null,
f != null ? MAP(f, walk) : null ];
},
"toplevel": function(body) {
- return with_scope(this.scope, function(){
- return [ "toplevel", MAP(body, walk) ];
+ var self = this;
+ return with_scope(self.scope, function(){
+ return [ self[0], MAP(body, walk) ];
});
},
"for-in": function(has_var, name, obj, stat) {
- return [ "for-in", has_var, get_mangled(name), walk(obj), walk(stat) ];
+ return [ this[0], has_var, get_mangled(name), walk(obj), walk(stat) ];
}
}, function() {
return walk(ast_add_scope(ast));
@@ -569,28 +562,29 @@ function aborts(t) {
}
};
-function negate(c) {
- var not_c = [ "unary-prefix", "!", c ];
- switch (c[0]) {
- case "unary-prefix":
- return c[1] == "!" ? c[2] : not_c;
- case "binary":
- var op = c[1], left = c[2], right = c[3];
- switch (op) {
- case "<=": return [ "binary", ">", left, right ];
- case "<": return [ "binary", ">=", left, right ];
- case ">=": return [ "binary", "<", left, right ];
- case ">": return [ "binary", "<=", left, right ];
- case "==": return [ "binary", "!=", left, right ];
- case "!=": return [ "binary", "==", left, right ];
- case "===": return [ "binary", "!==", left, right ];
- case "!==": return [ "binary", "===", left, right ];
- case "&&": return best_of(not_c, [ "binary", "||", negate(left), negate(right) ]);
- case "||": return best_of(not_c, [ "binary", "&&", negate(left), negate(right) ]);
- }
- break;
- }
- return not_c;
+function boolean_expr(expr) {
+ return ( (expr[0] == "unary-prefix"
+ && member(expr[1], [ "!", "delete" ])) ||
+
+ (expr[0] == "binary"
+ && member(expr[1], [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ])) ||
+
+ (expr[0] == "binary"
+ && member(expr[1], [ "&&", "||" ])
+ && boolean_expr(expr[2])
+ && boolean_expr(expr[3])) ||
+
+ (expr[0] == "conditional"
+ && boolean_expr(expr[2])
+ && boolean_expr(expr[3])) ||
+
+ (expr[0] == "assign"
+ && expr[1] === true
+ && boolean_expr(expr[3])) ||
+
+ (expr[0] == "seq"
+ && boolean_expr(expr[expr.length - 1]))
+ );
};
function make_conditional(c, t, e) {
@@ -609,12 +603,44 @@ function ast_squeeze(ast, options) {
options = defaults(options, {
make_seqs : true,
dead_code : true,
- no_warnings : false,
- extra : false
+ keep_comps : true,
+ no_warnings : false
});
var w = ast_walker(), walk = w.walk, scope;
+ function negate(c) {
+ var not_c = [ "unary-prefix", "!", c ];
+ switch (c[0]) {
+ case "unary-prefix":
+ return c[1] == "!" && boolean_expr(c[2]) ? c[2] : not_c;
+ case "seq":
+ c = slice(c);
+ c[c.length - 1] = negate(c[c.length - 1]);
+ return c;
+ case "conditional":
+ return best_of(not_c, [ "conditional", c[1], negate(c[2]), negate(c[3]) ]);
+ case "binary":
+ var op = c[1], left = c[2], right = c[3];
+ if (!options.keep_comps) switch (op) {
+ case "<=" : return [ "binary", ">", left, right ];
+ case "<" : return [ "binary", ">=", left, right ];
+ case ">=" : return [ "binary", "<", left, right ];
+ case ">" : return [ "binary", "<=", left, right ];
+ }
+ switch (op) {
+ case "==" : return [ "binary", "!=", left, right ];
+ case "!=" : return [ "binary", "==", left, right ];
+ case "===" : return [ "binary", "!==", left, right ];
+ case "!==" : return [ "binary", "===", left, right ];
+ case "&&" : return best_of(not_c, [ "binary", "||", negate(left), negate(right) ]);
+ case "||" : return best_of(not_c, [ "binary", "&&", negate(left), negate(right) ]);
+ }
+ break;
+ }
+ return not_c;
+ };
+
function with_scope(s, cont) {
var _scope = scope;
scope = s;
@@ -628,87 +654,12 @@ function ast_squeeze(ast, options) {
return node[0] == "string" || node[0] == "num";
};
- function find_first_execute(node) {
- if (!node)
- return false;
-
- switch (node[0]) {
- case "num":
- case "string":
- case "name":
- return node;
- case "call":
- case "conditional":
- case "for":
- case "if":
- case "new":
- case "return":
- case "stat":
- case "switch":
- case "throw":
- return find_first_execute(node[1]);
- case "binary":
- return find_first_execute(node[2]);
- case "assign":
- if (node[1] === true)
- return find_first_execute(node[3]);
- break;
- case "var":
- if (node[1][0].length > 1)
- return find_first_execute(node[1][0][1]);
- break;
- }
- return null;
- }
-
- function find_assign_recursive(p, v) {
- if (p[0] == "assign" && p[1] != true || p[0] == "unary-prefix") {
- if (p[2][0] == "name" && v[0] == "name" && p[2][1] == v[1])
- return true;
- return false;
- }
-
- if (p[0] != "assign" || p[1] !== true)
- return false;
-
- if ((is_constant(p[3]) && p[3][0] == v[0] && p[3][1] == v[1]) ||
- (p[3][0] == "name" && v[0] == "name" && p[3][1] == v[1]) ||
- (p[2][0] == "name" && v[0] == "name" && p[2][1] == v[1]))
- return true;
-
- return find_assign_recursive(p[3], v);
- };
-
function rmblock(block) {
if (block != null && block[0] == "block" && block[1] && block[1].length == 1)
block = block[1][0];
return block;
};
- function clone(obj) {
- if (obj && obj.constructor == Array)
- return MAP(obj, clone);
- return obj;
- };
-
- function make_seq_to_statements(node) {
- if (node[0] != "seq") {
- switch (node[0]) {
- case "var":
- case "const":
- return [ node ];
- default:
- return [ [ "stat", node ] ];
- }
- }
-
- var ret = [];
- for (var i = 1; i < node.length; i++)
- ret.push.apply(ret, make_seq_to_statements(node[i]));
-
- return ret;
- };
-
function _lambda(name, args, body) {
return [ this[0], name, args, with_scope(body.scope, function(){
return tighten(MAP(body, walk), "lambda");
@@ -734,64 +685,6 @@ function ast_squeeze(ast, options) {
return a;
}, []);
- if (options.extra) {
- // Detightening things. We do this because then we can assume that the
- // statements are structured in a specific way.
- statements = (function(a, prev) {
- statements.forEach(function(cur) {
- switch (cur[0]) {
- case "for":
- if (cur[1] != null) {
- a.push.apply(a, make_seq_to_statements(cur[1]));
- cur[1] = null;
- }
- a.push(cur);
- break;
- case "stat":
- var stats = make_seq_to_statements(cur[1]);
- stats.forEach(function(s) {
- if (s[1][0] == "unary-postfix")
- s[1][0] = "unary-prefix";
- });
- a.push.apply(a, stats);
- break;
- default:
- a.push(cur);
- }
- });
- return a;
- })([]);
-
- statements = (function(a, prev) {
- statements.forEach(function(cur) {
- if (!(prev && prev[0] == "stat")) {
- a.push(cur);
- prev = cur;
- return;
- }
-
- var p = prev[1];
- var c = find_first_execute(cur);
- if (c && find_assign_recursive(p, c)) {
- var old_cur = clone(cur);
- c.splice(0, c.length);
- c.push.apply(c, p);
- var tmp_cur = best_of(cur, [ "toplevel", [ prev, old_cur ] ]);
- if (tmp_cur == cur) {
- a[a.length -1] = cur;
- } else {
- cur = old_cur;
- a.push(cur);
- }
- } else {
- a.push(cur);
- }
- prev = cur;
- });
- return a;
- })([]);
- }
-
statements = (function(a, prev){
statements.forEach(function(cur){
if (prev && ((cur[0] == "var" && prev[0] == "var") ||
@@ -835,22 +728,6 @@ function ast_squeeze(ast, options) {
return a;
})([]);
- if (options.extra) {
- statements = (function(a, prev){
- statements.forEach(function(cur){
- var replaced = false;
- if (prev && cur[0] == "for" && cur[1] == null && (prev[0] == "var" || prev[0] == "const" || prev[0] == "stat")) {
- cur[1] = prev;
- a[a.length - 1] = cur;
- } else {
- a.push(cur);
- }
- prev = cur;
- });
- return a;
- })([]);
- }
-
if (block_type == "lambda") statements = (function(i, a, stat){
while (i < statements.length) {
stat = statements[i++];
@@ -901,7 +778,10 @@ function ast_squeeze(ast, options) {
if (empty(e) && empty(t))
return [ "stat", c ];
var ret = [ "if", c, t, e ];
- if (t[0] == "stat") {
+ if (t[0] == "if" && empty(t[3]) && empty(e)) {
+ ret = best_of(ret, walk([ "if", [ "binary", "&&", c, t[1] ], t[2] ]));
+ }
+ else if (t[0] == "stat") {
if (e) {
if (e[0] == "stat") {
ret = best_of(ret, [ "stat", make_conditional(c, t[1], e[1]) ]);
@@ -972,23 +852,34 @@ function ast_squeeze(ast, options) {
left = walk(left);
right = walk(right);
var best = [ "binary", op, left, right ];
- if (is_constant(right)) {
- if (is_constant(left)) {
- var val = null;
- switch (op) {
- case "+": val = left[1] + right[1]; break;
- case "*": val = left[1] * right[1]; break;
- case "/": val = left[1] / right[1]; break;
- case "-": val = left[1] - right[1]; break;
- case "<<": val = left[1] << right[1]; break;
- case ">>": val = left[1] >> right[1]; break;
- case ">>>": val = left[1] >>> right[1]; break;
- }
- if (val != null) {
- best = best_of(best, [ typeof val == "string" ? "string" : "num", val ]);
+ if (is_constant(right) && is_constant(left)) {
+ var val = {};
+ var orig = val;
+ switch (op) {
+ case "+" : val = left[1] + right[1]; break;
+ case "*" : val = left[1] * right[1]; break;
+ case "/" : val = left[1] / right[1]; break;
+ case "-" : val = left[1] - right[1]; break;
+ case "<<" : val = left[1] << right[1]; break;
+ case ">>" : val = left[1] >> right[1]; break;
+ case ">>>" : val = left[1] >>> right[1]; break;
+ case "==" : val = left[1] == right[1]; break;
+ case "===" : val = left[1] === right[1]; break;
+ case "!=" : val = left[1] != right[1]; break;
+ case "!==" : val = left[1] !== right[1]; break;
+ case "<" : val = left[1] < right[1]; break;
+ case "<=" : val = left[1] <= right[1]; break;
+ case ">" : val = left[1] > right[1]; break;
+ case ">=" : val = left[1] >= right[1]; break;
+ }
+ if (val !== orig) {
+ switch (typeof val) {
+ case "string": val = [ "string", val ]; break;
+ case "boolean": val = [ "name", val+"" ]; break;
+ case "number": val = [ "num", val ]; break;
+ default: return best;
}
- } else if (left[0] == "binary" && left[1] == "+" && left[3][0] == "string") {
- best = best_of(best, [ "binary", "+", left[2], [ "string", left[3][1] + right[1] ] ]);
+ best = best_of(best, walk(val));
}
}
return best;
@@ -1004,17 +895,12 @@ function ast_squeeze(ast, options) {
f != null ? tighten(MAP(f, walk)) : null
];
},
- "unary-prefix": function(op, cond) {
- if (op == "!") {
- cond = walk(cond);
- if (cond[0] == "unary-prefix" && cond[1] == "!") {
- var p = w.parent();
- if (p[0] == "unary-prefix" && p[1] == "!")
- return cond[2];
- return [ "unary-prefix", "!", cond ];
- }
- return best_of(this, negate(cond));
- }
+ "unary-prefix": function(op, expr) {
+ expr = walk(expr);
+ var ret = [ "unary-prefix", op, expr ];
+ if (op == "!")
+ ret = best_of(ret, negate(expr));
+ return ret;
},
"name": function(name) {
switch (name) {
@@ -1253,7 +1139,9 @@ function gen_code(ast, beautify) {
},
"dot": function(expr) {
var out = make(expr), i = 1;
- if (needs_parens(expr))
+ if (expr[0] == "num")
+ out += ".";
+ else if (needs_parens(expr))
out = "(" + out + ")";
while (i < arguments.length)
out += "." + make_name(arguments[i++]);
@@ -1314,7 +1202,8 @@ function gen_code(ast, beautify) {
left = "(" + left + ")";
}
if (member(rvalue[0], [ "assign", "conditional", "seq" ]) ||
- rvalue[0] == "binary" && PRECEDENCE[operator] >= PRECEDENCE[rvalue[1]]) {
+ rvalue[0] == "binary" && PRECEDENCE[operator] >= PRECEDENCE[rvalue[1]] &&
+ !(rvalue[1] == operator && member(operator, [ "&&", "||", "*" ]))) {
right = "(" + right + ")";
}
return add_spaces([ left, operator, right ]);
@@ -1350,7 +1239,8 @@ function gen_code(ast, beautify) {
var key = p[0], val = make(p[1]);
if (beautify && beautify.quote_keys) {
key = make_string(key);
- } else if (typeof key == "number" || !beautify && +key + "" == key) {
+ } else if ((typeof key == "number" || !beautify && +key + "" == key)
+ && parseFloat(key) >= 0) {
key = make_num(+key);
} else if (!is_identifier(key)) {
key = make_string(key);
@@ -1367,6 +1257,7 @@ function gen_code(ast, beautify) {
"array": function(elements) {
if (elements.length == 0) return "[]";
return add_spaces([ "[", add_commas(MAP(elements, function(el){
+ if (!beautify && el[0] == "atom" && el[1] == "undefined") return "";
return parenthesize(el, "seq");
})), "]" ]);
},
@@ -1384,12 +1275,6 @@ function gen_code(ast, beautify) {
},
"atom": function(name) {
return make_name(name);
- },
- "comment1": function(text) {
- return "//" + text + "\n";
- },
- "comment2": function(text) {
- return "/*" + text + "*/";
}
};
@@ -1442,8 +1327,16 @@ function gen_code(ast, beautify) {
var stat = statements[i];
var code = make(stat);
if (code != ";") {
- if (!beautify && i == last)
- code = code.replace(/;+\s*$/, "");
+ if (!beautify && i == last) {
+ if ((stat[0] == "while" && empty(stat[2])) ||
+ (member(stat[0], [ "for", "for-in"] ) && empty(stat[4])) ||
+ (stat[0] == "if" && empty(stat[2]) && !stat[3]) ||
+ (stat[0] == "if" && stat[3] && empty(stat[3]))) {
+ code = code.replace(/;*\s*$/, ";");
+ } else {
+ code = code.replace(/;+\s*$/, "");
+ }
+ }
a.push(code);
}
}
@@ -1498,6 +1391,49 @@ function gen_code(ast, beautify) {
return make(ast);
};
+function split_lines(code, max_line_length) {
+ var splits = [ 0 ];
+ jsp.parse(function(){
+ var next_token = jsp.tokenizer(code);
+ var last_split = 0;
+ var prev_token;
+ function current_length(tok) {
+ return tok.pos - last_split;
+ };
+ function split_here(tok) {
+ last_split = tok.pos;
+ splits.push(last_split);
+ };
+ function custom(){
+ var tok = next_token.apply(this, arguments);
+ out: {
+ if (prev_token) {
+ if (prev_token.type == "keyword") break out;
+ }
+ if (current_length(tok) > max_line_length) {
+ switch (tok.type) {
+ case "keyword":
+ case "atom":
+ case "name":
+ case "punc":
+ split_here(tok);
+ break out;
+ }
+ }
+ }
+ prev_token = tok;
+ return tok;
+ };
+ custom.context = function() {
+ return next_token.context.apply(this, arguments);
+ };
+ return custom;
+ }());
+ return splits.map(function(pos, i){
+ return code.substring(pos, splits[i + 1] || code.length);
+ }).join("\n");
+};
+
/* -----[ Utilities ]----- */
function repeat_string(str, i) {
@@ -1558,3 +1494,5 @@ exports.gen_code = gen_code;
exports.ast_add_scope = ast_add_scope;
exports.ast_squeeze_more = require("./squeeze-more").ast_squeeze_more;
exports.set_logger = function(logger) { warn = logger };
+exports.make_string = make_string;
+exports.split_lines = split_lines;
diff --git a/Source/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js b/Source/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
index a01046b..a6f59ca 100644
--- a/Source/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
+++ b/Source/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
@@ -139,7 +139,7 @@ WebInspector.WatchExpressionsSection.prototype = {
if (!expression)
continue;
- WebInspector.console.evalInInspectedWindow("(" + expression + ")", this._watchObjectGroupId, appendResult.bind(this, expression, i));
+ WebInspector.console.evalInInspectedWindow("(" + expression + ")", this._watchObjectGroupId, false, appendResult.bind(this, expression, i));
}
// note this is setting the expansion of the tree, not the section;
diff --git a/Source/WebCore/inspector/front-end/WebKit.qrc b/Source/WebCore/inspector/front-end/WebKit.qrc
index edc1861..dd325ba 100644
--- a/Source/WebCore/inspector/front-end/WebKit.qrc
+++ b/Source/WebCore/inspector/front-end/WebKit.qrc
@@ -13,7 +13,6 @@
<file>BreakpointManager.js</file>
<file>BreakpointsSidebarPane.js</file>
<file>CallStackSidebarPane.js</file>
- <file>ChangesView.js</file>
<file>Checkbox.js</file>
<file>Color.js</file>
<file>ConsolePanel.js</file>
@@ -28,6 +27,7 @@
<file>Database.js</file>
<file>DatabaseQueryView.js</file>
<file>DatabaseTableView.js</file>
+ <file>DetailedHeapshotView.js</file>
<file>DataGrid.js</file>
<file>DebuggerModel.js</file>
<file>DOMAgent.js</file>
@@ -44,10 +44,10 @@
<file>ExtensionPanel.js</file>
<file>ExtensionRegistryStub.js</file>
<file>ExtensionServer.js</file>
- <file>FileSystemView.js</file>
<file>FontView.js</file>
<file>GoToLineDialog.js</file>
<file>HAREntry.js</file>
+ <file>HeapSnapshot.js</file>
<file>HeapSnapshotView.js</file>
<file>HelpScreen.js</file>
<file>ImageView.js</file>
@@ -64,6 +64,7 @@
<file>Panel.js</file>
<file>PanelEnablerView.js</file>
<file>Placard.js</file>
+ <file>PleaseWaitMessage.js</file>
<file>Popover.js</file>
<file>ProfileDataGridTree.js</file>
<file>ProfilesPanel.js</file>
@@ -84,18 +85,18 @@
<file>ScriptFormatter.js</file>
<file>ScriptFormatterWorker.js</file>
<file>ScriptsPanel.js</file>
- <file>ScriptView.js</file>
<file>Section.js</file>
<file>Settings.js</file>
<file>ShortcutsHelp.js</file>
+ <file>ShowMoreDataGridNode.js</file>
<file>SidebarPane.js</file>
<file>SidebarTreeElement.js</file>
<file>SourceCSSTokenizer.js</file>
<file>SourceFrame.js</file>
+ <file>SourceFrameContent.js</file>
<file>SourceHTMLTokenizer.js</file>
<file>SourceJavaScriptTokenizer.js</file>
<file>SourceTokenizer.js</file>
- <file>SourceView.js</file>
<file>StatusBarButton.js</file>
<file>StylesSidebarPane.js</file>
<file>SummaryBar.js</file>
diff --git a/Source/WebCore/inspector/front-end/inspector.css b/Source/WebCore/inspector/front-end/inspector.css
index f629d12..c992806 100644
--- a/Source/WebCore/inspector/front-end/inspector.css
+++ b/Source/WebCore/inspector/front-end/inspector.css
@@ -428,10 +428,6 @@ body.port-qt #dock-status-bar-item {
-webkit-mask-image: url(Images/clearConsoleButtonGlyph.png);
}
-#changes-status-bar-item .glyph {
- -webkit-mask-image: url(Images/consoleButtonGlyph.png); /* TODO: Needs Image for Changes Toggle Button */
-}
-
#counters {
position: absolute;
right: 16px;
@@ -442,22 +438,14 @@ body.port-qt #dock-status-bar-item {
height: 19px;
}
-#changes-count, #error-warning-count {
+#error-warning-count {
display: inline;
}
-#error-warning-count:hover, #changes-count:hover {
+#error-warning-count:hover {
border-bottom: 1px solid rgb(96, 96, 96);
}
-#style-changes-count::before {
- content: url(Images/styleIcon.png); /* TODO: Needs Image for Style Changes Icon */
- width: 10px;
- height: 10px;
- vertical-align: -1px;
- margin-right: 2px;
-}
-
#error-count::before {
content: url(Images/errorIcon.png);
width: 10px;
@@ -466,7 +454,7 @@ body.port-qt #dock-status-bar-item {
margin-right: 2px;
}
-#changes-count + #error-warning-count, #error-count + #warning-count {
+#error-count + #warning-count {
margin-left: 6px;
}
@@ -685,6 +673,7 @@ body.platform-linux .monospace, body.platform-linux .source-code {
.console-message-url {
float: right;
+ margin-left: 4px;
}
.console-group-messages .section {
@@ -2096,6 +2085,10 @@ li.selected .base-storage-tree-element-subtitle {
content: url(Images/treeDownTriangleBlack.png);
}
+.data-grid button {
+ line-height: 19px;
+}
+
body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-descending {
background-image: url(Images/glossyHeader.png);
border-right: 1px solid rgb(179, 179, 179);
@@ -4320,3 +4313,17 @@ a.worker-item:hover {
.cursor-auto {
cursor: auto;
}
+
+.please-wait-msg {
+ position: absolute;
+ left: 0;
+ top: 0;
+ border: 4px black solid;
+ border-radius: 4px;
+ background-color: black;
+ opacity: 0.85;
+ color: white;
+ font-size: 12px;
+ font-weight: bold;
+ z-index: 10000;
+}
diff --git a/Source/WebCore/inspector/front-end/inspector.html b/Source/WebCore/inspector/front-end/inspector.html
index 0e0b9e9..0435dc3 100644
--- a/Source/WebCore/inspector/front-end/inspector.html
+++ b/Source/WebCore/inspector/front-end/inspector.html
@@ -54,9 +54,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="Popover.js"></script>
<script type="text/javascript" src="TabbedPane.js"></script>
<script type="text/javascript" src="Placard.js"></script>
+ <script type="text/javascript" src="PleaseWaitMessage.js"></script>
<script type="text/javascript" src="View.js"></script>
<script type="text/javascript" src="Drawer.js"></script>
- <script type="text/javascript" src="ChangesView.js"></script>
<script type="text/javascript" src="ConsoleView.js"></script>
<script type="text/javascript" src="Panel.js"></script>
<script type="text/javascript" src="TimelineGrid.js"></script>
@@ -68,10 +68,10 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="DOMStorage.js"></script>
<script type="text/javascript" src="DOMStorageItemsView.js"></script>
<script type="text/javascript" src="DataGrid.js"></script>
+ <script type="text/javascript" src="ShowMoreDataGridNode.js"></script>
<script type="text/javascript" src="CookiesTable.js"></script>
<script type="text/javascript" src="CookieItemsView.js"></script>
<script type="text/javascript" src="ApplicationCacheItemsView.js"></script>
- <script type="text/javascript" src="FileSystemView.js"></script>
<script type="text/javascript" src="Script.js"></script>
<script type="text/javascript" src="Breakpoint.js"></script>
<script type="text/javascript" src="BreakpointManager.js"></script>
@@ -101,6 +101,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="ElementsPanel.js"></script>
<script type="text/javascript" src="NetworkPanel.js"></script>
<script type="text/javascript" src="InjectedFakeWorker.js"></script>
+ <script type="text/javascript" src="SourceFrame.js"></script>
+ <script type="text/javascript" src="SourceFrameContent.js"></script>
+ <script type="text/javascript" src="ResourceView.js"></script>
<script type="text/javascript" src="ScriptsPanel.js"></script>
<script type="text/javascript" src="ResourcesPanel.js"></script>
<script type="text/javascript" src="ProfilesPanel.js"></script>
@@ -120,8 +123,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="ResourceCookiesView.js"></script>
<script type="text/javascript" src="ResourceTimingView.js"></script>
<script type="text/javascript" src="NetworkItemView.js"></script>
- <script type="text/javascript" src="ResourceView.js"></script>
- <script type="text/javascript" src="SourceFrame.js"></script>
<script type="text/javascript" src="ScriptFormatter.js"></script>
<script type="text/javascript" src="DOMSyntaxHighlighter.js"></script>
<script type="text/javascript" src="TextEditorModel.js"></script>
@@ -131,17 +132,17 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="SourceCSSTokenizer.js"></script>
<script type="text/javascript" src="SourceHTMLTokenizer.js"></script>
<script type="text/javascript" src="SourceJavaScriptTokenizer.js"></script>
- <script type="text/javascript" src="SourceView.js"></script>
<script type="text/javascript" src="FontView.js"></script>
<script type="text/javascript" src="ImageView.js"></script>
<script type="text/javascript" src="DatabaseTableView.js"></script>
<script type="text/javascript" src="DatabaseQueryView.js"></script>
- <script type="text/javascript" src="ScriptView.js"></script>
<script type="text/javascript" src="ProfileDataGridTree.js"></script>
<script type="text/javascript" src="BottomUpProfileDataGridTree.js"></script>
<script type="text/javascript" src="TopDownProfileDataGridTree.js"></script>
<script type="text/javascript" src="ProfileView.js"></script>
+ <script type="text/javascript" src="HeapSnapshot.js"></script>
<script type="text/javascript" src="HeapSnapshotView.js"></script>
+ <script type="text/javascript" src="DetailedHeapshotView.js"></script>
<script type="text/javascript" src="DebuggerModel.js"></script>
<script type="text/javascript" src="DOMAgent.js"></script>
<script type="text/javascript" src="TimelineAgent.js"></script>
@@ -164,7 +165,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</div>
<div id="main">
<div id="main-panels" spellcheck="false"></div>
- <div id="main-status-bar" class="status-bar"><div id="anchored-status-bar-items"><button id="dock-status-bar-item" class="status-bar-item"><div class="glyph"></div><div class="glyph shadow"></div></button><button id="console-status-bar-item" class="status-bar-item"><div class="glyph"></div><div class="glyph shadow"></div></button><button id="changes-status-bar-item" class="status-bar-item hidden"></button><div id="counters"><div id="changes-count" class="hidden"></div><div id="error-warning-count" class="hidden"></div></div></div></div>
+ <div id="main-status-bar" class="status-bar"><div id="anchored-status-bar-items"><button id="dock-status-bar-item" class="status-bar-item"><div class="glyph"></div><div class="glyph shadow"></div></button><button id="console-status-bar-item" class="status-bar-item"><div class="glyph"></div><div class="glyph shadow"></div></button><div id="counters"><div id="error-warning-count" class="hidden"></div></div></div></div>
</div>
<div id="drawer">
<div id="console-view"><div id="console-messages" class="monospace"><div id="console-prompt" spellcheck="false"><br></div></div></div>
diff --git a/Source/WebCore/inspector/front-end/inspector.js b/Source/WebCore/inspector/front-end/inspector.js
index 77abe78..0959289 100644
--- a/Source/WebCore/inspector/front-end/inspector.js
+++ b/Source/WebCore/inspector/front-end/inspector.js
@@ -223,8 +223,12 @@ var WebInspector = {
if (hiddenPanels.indexOf("profiles") === -1) {
this.panels.profiles = new WebInspector.ProfilesPanel();
this.panels.profiles.registerProfileType(new WebInspector.CPUProfileType());
- if (Preferences.heapProfilerPresent)
- this.panels.profiles.registerProfileType(new WebInspector.HeapSnapshotProfileType());
+ if (Preferences.heapProfilerPresent) {
+ if (!Preferences.detailedHeapProfiles)
+ this.panels.profiles.registerProfileType(new WebInspector.HeapSnapshotProfileType());
+ else
+ this.panels.profiles.registerProfileType(new WebInspector.DetailedHeapshotProfileType());
+ }
}
if (hiddenPanels.indexOf("audits") === -1)
this.panels.audits = new WebInspector.AuditsPanel();
@@ -344,53 +348,6 @@ var WebInspector = {
errorWarningElement.title = null;
},
- get styleChanges()
- {
- return this._styleChanges;
- },
-
- set styleChanges(x)
- {
- x = Math.max(x, 0);
-
- if (this._styleChanges === x)
- return;
- this._styleChanges = x;
- this._updateChangesCount();
- },
-
- _updateChangesCount: function()
- {
- // TODO: Remove immediate return when enabling the Changes Panel
- return;
-
- var changesElement = document.getElementById("changes-count");
- if (!changesElement)
- return;
-
- if (!this.styleChanges) {
- changesElement.addStyleClass("hidden");
- return;
- }
-
- changesElement.removeStyleClass("hidden");
- changesElement.removeChildren();
-
- if (this.styleChanges) {
- var styleChangesElement = document.createElement("span");
- styleChangesElement.id = "style-changes-count";
- styleChangesElement.textContent = this.styleChanges;
- changesElement.appendChild(styleChangesElement);
- }
-
- if (this.styleChanges) {
- if (this.styleChanges === 1)
- changesElement.title = WebInspector.UIString("%d style change", this.styleChanges);
- else
- changesElement.title = WebInspector.UIString("%d style changes", this.styleChanges);
- }
- },
-
highlightDOMNode: function(nodeId)
{
if ("_hideDOMNodeHighlightTimeout" in this) {
@@ -445,6 +402,11 @@ var WebInspector = {
resourceForURL: function(url)
{
return this.resourceTreeModel.resourceForURL(url);
+ },
+
+ openLinkExternallyLabel: function()
+ {
+ return WebInspector.UIString("Open Link in New Window");
}
}
@@ -471,7 +433,9 @@ WebInspector.PlatformFlavor = {
WebInspector.loaded = function()
{
if ("page" in WebInspector.queryParamsObject) {
- WebInspector.socket = new WebSocket("ws://" + window.location.host + "/devtools/page/" + WebInspector.queryParamsObject.page);
+ var page = WebInspector.queryParamsObject.page;
+ var host = "host" in WebInspector.queryParamsObject ? WebInspector.queryParamsObject.host : window.location.host;
+ WebInspector.socket = new WebSocket("ws://" + host + "/devtools/page/" + page);
WebInspector.socket.onmessage = function(message) { InspectorBackend.dispatch(message.data); }
WebInspector.socket.onerror = function(error) { console.error(error); }
WebInspector.socket.onopen = function() {
@@ -506,9 +470,6 @@ WebInspector.doLoadedDone = function()
this.drawer = new WebInspector.Drawer();
this.console = new WebInspector.ConsoleView(this.drawer);
- // TODO: Uncomment when enabling the Changes Panel
- // this.changes = new WebInspector.ChangesView(this.drawer);
- // TODO: Remove class="hidden" from inspector.html on button#changes-status-bar-item
this.drawer.visibleView = this.console;
this.resourceTreeModel = new WebInspector.ResourceTreeModel();
this.networkManager = new WebInspector.NetworkManager(this.resourceTreeModel);
@@ -573,12 +534,6 @@ WebInspector.doLoadedDone = function()
errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
this._updateErrorAndWarningCounts();
- this.styleChanges = 0;
- // TODO: Uncomment when enabling the Changes Panel
- // var changesElement = document.getElementById("changes-count");
- // changesElement.addEventListener("click", this.showChanges.bind(this), false);
- // this._updateErrorAndWarningCounts();
-
var searchField = document.getElementById("search");
searchField.addEventListener("search", this.performSearch.bind(this), false); // when the search is emptied
searchField.addEventListener("mousedown", this._searchFieldManualFocus.bind(this), false); // when the search field is manually selected
@@ -597,6 +552,13 @@ WebInspector.doLoadedDone = function()
}
InspectorBackend.populateScriptObjects(onPopulateScriptObjects);
+ if (Preferences.debuggerAlwaysEnabled || WebInspector.settings.debuggerEnabled)
+ this.debuggerModel.enableDebugger();
+ if (Preferences.profilerAlwaysEnabled || WebInspector.settings.profilerEnabled)
+ InspectorBackend.enableProfiler();
+ if (WebInspector.settings.monitoringXHREnabled)
+ InspectorBackend.setMonitoringXHREnabled(true);
+
InspectorBackend.setConsoleMessagesEnabled(true);
function propertyNamesCallback(names)
@@ -913,13 +875,13 @@ WebInspector.documentKeyDown = function(event)
case "U+0052": // R key
if ((event.metaKey && isMac) || (event.ctrlKey && !isMac)) {
- InspectorBackend.reloadPage();
+ InspectorBackend.reloadPage(event.shiftKey);
event.preventDefault();
}
break;
case "F5":
if (!isMac)
- InspectorBackend.reloadPage();
+ InspectorBackend.reloadPage(event.ctrlKey || event.shiftKey);
break;
}
}
@@ -946,6 +908,7 @@ WebInspector.animateStyle = function(animations, duration, callback)
{
var interval;
var complete = 0;
+ var hasCompleted = false;
const intervalDuration = (1000 / 30); // 30 frames per second.
const animationsLength = animations.length;
@@ -1014,14 +977,32 @@ WebInspector.animateStyle = function(animations, duration, callback)
// End condition.
if (complete >= duration) {
+ hasCompleted = true;
clearInterval(interval);
if (callback)
callback();
}
}
+ function forceComplete()
+ {
+ if (!hasCompleted) {
+ complete = duration;
+ animateLoop();
+ }
+ }
+
+ function cancel()
+ {
+ hasCompleted = true;
+ clearInterval(interval);
+ }
+
interval = setInterval(animateLoop, intervalDuration);
- return interval;
+ return {
+ cancel: cancel,
+ forceComplete: forceComplete
+ };
}
WebInspector.updateSearchLabel = function()
@@ -1147,11 +1128,6 @@ WebInspector.showConsole = function()
this.drawer.showView(this.console);
}
-WebInspector.showChanges = function()
-{
- this.drawer.showView(this.changes);
-}
-
WebInspector.showPanel = function(panel)
{
if (!(panel in this.panels))
@@ -1171,8 +1147,8 @@ WebInspector.domContentEventFired = function(time)
WebInspector.loadEventFired = function(time)
{
this.panels.audits.mainResourceLoadTime = time;
- if (this.panels.network)
- this.panels.network.mainResourceLoadTime = time;
+ this.panels.network.mainResourceLoadTime = time;
+ this.panels.resources.loadEventFired();
this.extensionServer.notifyPageLoaded((time - WebInspector.mainResource.startTime) * 1000);
this.mainResourceLoadTime = time;
}
@@ -1381,6 +1357,8 @@ WebInspector.showSourceLine = function(url, line, preferredPanel)
this.currentPanel = this._choosePanelToShowSourceLine(url, line, preferredPanel);
if (!this.currentPanel)
return false;
+ if (this.drawer)
+ this.drawer.immediatelyFinishAnimation();
this.currentPanel.showSourceLine(url, line);
return true;
}
@@ -1511,7 +1489,19 @@ WebInspector.completeURL = function(baseURL, href)
var path = href;
if (path.charAt(0) !== "/") {
var basePath = parsedURL.path;
- path = basePath.substring(0, basePath.lastIndexOf("/")) + "/" + path;
+ // A href of "?foo=bar" implies "basePath?foo=bar".
+ // With "basePath?a=b" and "?foo=bar" we should get "basePath?foo=bar".
+ var prefix;
+ if (path.charAt(0) === "?") {
+ var basePathCutIndex = basePath.indexOf("?");
+ if (basePathCutIndex !== -1)
+ prefix = basePath.substring(0, basePathCutIndex);
+ else
+ prefix = basePath;
+ } else
+ prefix = basePath.substring(0, basePath.lastIndexOf("/")) + "/";
+
+ path = prefix + path;
} else if (path.length > 1 && path.charAt(1) === "/") {
// href starts with "//" which is a full URL with the protocol dropped (use the baseURL protocol).
return parsedURL.scheme + ":" + path;
@@ -1576,6 +1566,12 @@ WebInspector.performSearch = function(event)
this.doPerformSearch(event.target.value, forceSearch, event.shiftKey, false);
}
+WebInspector.cancelSearch = function()
+{
+ document.getElementById("search").value = "";
+ this.doPerformSearch("");
+}
+
WebInspector.doPerformSearch = function(query, forceSearch, isBackwardSearch, repeatSearch)
{
var isShortSearch = (query.length < 3);
@@ -1873,6 +1869,7 @@ WebInspector.MIMETypes = {
"font/opentype": {3: true},
"application/x-font-type1": {3: true},
"application/x-font-ttf": {3: true},
+ "application/x-font-woff": {3: true},
"application/x-truetype-font": {3: true},
"text/javascript": {4: true},
"text/ecmascript": {4: true},
diff --git a/Source/WebCore/inspector/front-end/networkPanel.css b/Source/WebCore/inspector/front-end/networkPanel.css
index 95ed1bf..c750323 100644
--- a/Source/WebCore/inspector/front-end/networkPanel.css
+++ b/Source/WebCore/inspector/front-end/networkPanel.css
@@ -65,6 +65,18 @@
font-weight: bold;
}
+.network-sidebar .data-grid.small tr.offscreen {
+ height: 21px;
+}
+
+.network-sidebar .data-grid tr.offscreen {
+ height: 41px;
+}
+
+.network-sidebar .data-grid tr.offscreen td {
+ display: none;
+}
+
.network-sidebar .data-grid tr.filler {
background-color: white;
}
diff --git a/Source/WebCore/inspector/front-end/textViewer.css b/Source/WebCore/inspector/front-end/textViewer.css
index bee9fe5..f6aa65e 100644
--- a/Source/WebCore/inspector/front-end/textViewer.css
+++ b/Source/WebCore/inspector/front-end/textViewer.css
@@ -9,12 +9,34 @@
}
.text-editor-lines {
- border: 0;
- -webkit-border-horizontal-spacing: 0;
- -webkit-border-vertical-spacing: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ overflow: hidden;
+ -webkit-user-select: none;
+}
+
+.text-editor-contents {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: auto;
-webkit-user-select: text;
}
+.text-editor-editable {
+ -webkit-user-modify: read-write-plaintext-only;
+}
+
+.webkit-line-decorations {
+ pointer-events: none;
+ -webkit-user-select: none;
+ -webkit-user-modify: read-only;
+}
+
.webkit-html-message-bubble {
-webkit-box-shadow: black 0px 2px 5px;
-webkit-border-radius: 9px;
@@ -63,7 +85,6 @@
text-align: right;
vertical-align: top;
word-break: normal;
- -webkit-user-select: none;
padding-right: 4px;
padding-left: 6px;
}
@@ -86,9 +107,7 @@
}
.webkit-line-content {
- width: 100%;
padding-left: 2px;
- vertical-align: top;
}
.webkit-breakpoint .webkit-line-number-outer {
@@ -136,21 +155,21 @@
opacity: 0.3;
}
-.webkit-execution-line .webkit-line-content {
+.webkit-execution-line.webkit-line-content {
background-color: rgb(171, 191, 254);
outline: 1px solid rgb(64, 115, 244);
}
-.diff-container .webkit-added-line .webkit-line-content {
+.diff-container .webkit-added-line.webkit-line-content {
background-color: rgb(220, 255, 220);
}
-.diff-container .webkit-removed-line .webkit-line-content {
+.diff-container .webkit-removed-line.webkit-line-content {
background-color: rgb(255, 220, 220);
text-decoration: line-through;
}
-.diff-container .webkit-changed-line .webkit-line-content {
+.diff-container .webkit-changed-line.webkit-line-content {
background-color: rgb(220, 220, 255);
}
@@ -164,7 +183,7 @@
color: black;
}
-.webkit-highlighted-line .webkit-line-content {
+.webkit-highlighted-line.webkit-line-content {
-webkit-animation: "fadeout" 2s 0s;
}
diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp
index 6e91107..e8a7c41 100644
--- a/Source/WebCore/loader/DocumentLoader.cpp
+++ b/Source/WebCore/loader/DocumentLoader.cpp
@@ -30,13 +30,13 @@
#include "DocumentLoader.h"
#include "ApplicationCacheHost.h"
-#include "ArchiveFactory.h"
#include "ArchiveResourceCollection.h"
#include "CachedPage.h"
#include "CachedResourceLoader.h"
#include "DOMWindow.h"
#include "Document.h"
#include "DocumentParser.h"
+#include "DocumentWriter.h"
#include "Event.h"
#include "Frame.h"
#include "FrameLoader.h"
@@ -49,11 +49,15 @@
#include "PlatformString.h"
#include "Settings.h"
#include "SharedBuffer.h"
-
+#include "TextResourceDecoder.h"
#include <wtf/Assertions.h>
#include <wtf/text/CString.h>
#include <wtf/unicode/Unicode.h>
+#if ENABLE(WEB_ARCHIVE)
+#include "ArchiveFactory.h"
+#endif
+
namespace WebCore {
static void cancelAll(const ResourceLoaderSet& loaders)
@@ -77,6 +81,7 @@ static void setAllDefersLoading(const ResourceLoaderSet& loaders, bool defers)
DocumentLoader::DocumentLoader(const ResourceRequest& req, const SubstituteData& substituteData)
: m_deferMainResourceDataLoad(true)
, m_frame(0)
+ , m_writer(m_frame)
, m_originalRequest(req)
, m_substituteData(substituteData)
, m_originalRequestCopy(req)
@@ -168,9 +173,9 @@ void DocumentLoader::setRequest(const ResourceRequest& req)
KURL oldURL = m_request.url();
m_request = req;
- // Only send webView:didReceiveServerRedirectForProvisionalLoadForFrame: if URL changed.
+ // Only send webView:didReceiveServerRedirectForProvisionalLoadForFrame: if URL changed (and is non-null).
// Also, don't send it when replacing unreachable URLs with alternate content.
- if (!handlingUnreachableURL && oldURL != req.url())
+ if (!handlingUnreachableURL && !req.url().isNull() && oldURL != req.url())
frameLoader()->didReceiveServerRedirectForProvisionalLoadForFrame();
}
@@ -276,7 +281,7 @@ void DocumentLoader::finishedLoading()
commitIfReady();
if (FrameLoader* loader = frameLoader()) {
loader->finishedLoadingDocument(this);
- loader->writer()->end();
+ m_writer.end();
}
}
@@ -290,7 +295,7 @@ void DocumentLoader::commitLoad(const char* data, int length)
FrameLoader* frameLoader = DocumentLoader::frameLoader();
if (!frameLoader)
return;
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
if (ArchiveFactory::isArchiveMimeType(response().mimeType()))
return;
#endif
@@ -306,10 +311,9 @@ void DocumentLoader::commitData(const char* bytes, int length)
userChosen = false;
encoding = response().textEncodingName();
}
- // FIXME: DocumentWriter should be owned by DocumentLoader.
- m_frame->loader()->writer()->setEncoding(encoding, userChosen);
+ m_writer.setEncoding(encoding, userChosen);
ASSERT(m_frame->document()->parsing());
- m_frame->loader()->writer()->addData(bytes, length);
+ m_writer.addData(bytes, length);
}
bool DocumentLoader::doesProgressiveLoad(const String& MIMEType) const
@@ -339,7 +343,7 @@ void DocumentLoader::setupForReplaceByMIMEType(const String& newMIMEType)
}
frameLoader()->finishedLoadingDocument(this);
- m_frame->loader()->writer()->end();
+ m_writer.end();
frameLoader()->setReplacing();
m_gotFirstByte = false;
@@ -351,7 +355,7 @@ void DocumentLoader::setupForReplaceByMIMEType(const String& newMIMEType)
stopLoadingSubresources();
stopLoadingPlugIns();
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
clearArchiveResources();
#endif
}
@@ -378,6 +382,7 @@ void DocumentLoader::setFrame(Frame* frame)
return;
ASSERT(frame && !m_frame);
m_frame = frame;
+ m_writer.setFrame(frame);
attachToFrame();
}
@@ -440,7 +445,7 @@ bool DocumentLoader::isLoadingInAPISense() const
return frameLoader()->subframeIsLoading();
}
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
void DocumentLoader::addAllArchiveResources(Archive* archive)
{
if (!m_archiveResourceCollection)
@@ -467,16 +472,6 @@ void DocumentLoader::addArchiveResource(PassRefPtr<ArchiveResource> resource)
m_archiveResourceCollection->addResource(resource);
}
-ArchiveResource* DocumentLoader::archiveResourceForURL(const KURL& url) const
-{
- if (!m_archiveResourceCollection)
- return 0;
-
- ArchiveResource* resource = m_archiveResourceCollection->archiveResourceForURL(url);
-
- return resource && !resource->shouldIgnoreWhenUnarchiving() ? resource : 0;
-}
-
PassRefPtr<Archive> DocumentLoader::popArchiveForSubframe(const String& frameName)
{
return m_archiveResourceCollection ? m_archiveResourceCollection->popSubframeArchive(frameName) : 0;
@@ -497,6 +492,17 @@ SharedBuffer* DocumentLoader::parsedArchiveData() const
{
return m_parsedArchiveData.get();
}
+#endif // ENABLE(WEB_ARCHIVE)
+
+ArchiveResource* DocumentLoader::archiveResourceForURL(const KURL& url) const
+{
+ if (!m_archiveResourceCollection)
+ return 0;
+
+ ArchiveResource* resource = m_archiveResourceCollection->archiveResourceForURL(url);
+
+ return resource && !resource->shouldIgnoreWhenUnarchiving() ? resource : 0;
+}
PassRefPtr<ArchiveResource> DocumentLoader::mainResource() const
{
@@ -546,7 +552,6 @@ void DocumentLoader::getSubresources(Vector<PassRefPtr<ArchiveResource> >& subre
return;
}
-#endif
void DocumentLoader::deliverSubstituteResourcesAfterDelay()
{
@@ -605,7 +610,7 @@ void DocumentLoader::cancelPendingSubstituteLoad(ResourceLoader* loader)
m_substituteResourceDeliveryTimer.stop();
}
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
bool DocumentLoader::scheduleArchiveLoad(ResourceLoader* loader, const ResourceRequest& request, const KURL& originalURL)
{
ArchiveResource* resource = 0;
@@ -626,7 +631,7 @@ bool DocumentLoader::scheduleArchiveLoad(ResourceLoader* loader, const ResourceR
return true;
}
-#endif
+#endif // ENABLE(WEB_ARCHIVE)
void DocumentLoader::addResponse(const ResourceResponse& r)
{
diff --git a/Source/WebCore/loader/DocumentLoader.h b/Source/WebCore/loader/DocumentLoader.h
index 241102d..b92b384 100644
--- a/Source/WebCore/loader/DocumentLoader.h
+++ b/Source/WebCore/loader/DocumentLoader.h
@@ -30,6 +30,7 @@
#define DocumentLoader_h
#include "DocumentLoadTiming.h"
+#include "DocumentWriter.h"
#include "NavigationAction.h"
#include "ResourceError.h"
#include "ResourceRequest.h"
@@ -43,11 +44,11 @@
namespace WebCore {
class ApplicationCacheHost;
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
class Archive;
+#endif
class ArchiveResource;
class ArchiveResourceCollection;
-#endif
class Frame;
class FrameLoader;
class MainResourceLoader;
@@ -77,6 +78,8 @@ namespace WebCore {
FrameLoader* frameLoader() const;
MainResourceLoader* mainResourceLoader() const { return m_mainResourceLoader.get(); }
PassRefPtr<SharedBuffer> mainResourceData() const;
+
+ DocumentWriter* writer() const { return &m_writer; }
const ResourceRequest& originalRequest() const;
const ResourceRequest& originalRequestCopy() const;
@@ -126,26 +129,29 @@ namespace WebCore {
void unschedule(SchedulePair*);
#endif
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
void addAllArchiveResources(Archive*);
void addArchiveResource(PassRefPtr<ArchiveResource>);
- // Return an ArchiveResource for the URL, either creating from live data or
- // pulling from the ArchiveResourceCollection
- PassRefPtr<ArchiveResource> subresource(const KURL&) const;
- // Return the ArchiveResource for the URL only when loading an Archive
- ArchiveResource* archiveResourceForURL(const KURL&) const;
-
PassRefPtr<Archive> popArchiveForSubframe(const String& frameName);
void clearArchiveResources();
void setParsedArchiveData(PassRefPtr<SharedBuffer>);
SharedBuffer* parsedArchiveData() const;
+ bool scheduleArchiveLoad(ResourceLoader*, const ResourceRequest&, const KURL&);
+#endif // ENABLE(WEB_ARCHIVE)
+
+ // Return the ArchiveResource for the URL only when loading an Archive
+ ArchiveResource* archiveResourceForURL(const KURL&) const;
+
PassRefPtr<ArchiveResource> mainResource() const;
+
+ // Return an ArchiveResource for the URL, either creating from live data or
+ // pulling from the ArchiveResourceCollection
+ PassRefPtr<ArchiveResource> subresource(const KURL&) const;
void getSubresources(Vector<PassRefPtr<ArchiveResource> >&) const;
-
- bool scheduleArchiveLoad(ResourceLoader*, const ResourceRequest&, const KURL&);
-#endif
+
+
#ifndef NDEBUG
bool isSubstituteLoadPending(ResourceLoader*) const;
#endif
@@ -253,6 +259,8 @@ namespace WebCore {
ResourceLoaderSet m_plugInStreamLoaders;
RefPtr<SharedBuffer> m_mainResourceData;
+
+ mutable DocumentWriter m_writer;
// A reference to actual request used to create the data source.
// This should only be used by the resourceLoadDelegate's
@@ -305,9 +313,9 @@ namespace WebCore {
typedef HashMap<RefPtr<ResourceLoader>, RefPtr<SubstituteResource> > SubstituteResourceMap;
SubstituteResourceMap m_pendingSubstituteResources;
Timer<DocumentLoader> m_substituteResourceDeliveryTimer;
-
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+
OwnPtr<ArchiveResourceCollection> m_archiveResourceCollection;
+#if ENABLE(WEB_ARCHIVE)
RefPtr<SharedBuffer> m_parsedArchiveData;
#endif
diff --git a/Source/WebCore/loader/DocumentThreadableLoader.cpp b/Source/WebCore/loader/DocumentThreadableLoader.cpp
index dee5001..0a132b1 100644
--- a/Source/WebCore/loader/DocumentThreadableLoader.cpp
+++ b/Source/WebCore/loader/DocumentThreadableLoader.cpp
@@ -144,6 +144,8 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight(const R
preflightRequest.setHTTPHeaderField("Access-Control-Request-Headers", String::adopt(headerBuffer));
}
+ preflightRequest.setPriority(request.priority());
+
loadRequest(preflightRequest, DoSecurityCheck);
}
@@ -296,6 +298,8 @@ void DocumentThreadableLoader::preflightSuccess()
OwnPtr<ResourceRequest> actualRequest;
actualRequest.swap(m_actualRequest);
+ actualRequest->setHTTPOrigin(m_document->securityOrigin()->toString());
+
// It should be ok to skip the security check since we already asked about the preflight request.
loadRequest(*actualRequest, SkipSecurityCheck);
}
diff --git a/Source/WebCore/loader/DocumentWriter.cpp b/Source/WebCore/loader/DocumentWriter.cpp
index 5b03cd7..af9ea53 100644
--- a/Source/WebCore/loader/DocumentWriter.cpp
+++ b/Source/WebCore/loader/DocumentWriter.cpp
@@ -67,7 +67,7 @@ DocumentWriter::DocumentWriter(Frame* frame)
void DocumentWriter::replaceDocument(const String& source)
{
m_frame->loader()->stopAllLoaders();
- begin(m_frame->loader()->url(), true, m_frame->document()->securityOrigin());
+ begin(m_frame->document()->url(), true, m_frame->document()->securityOrigin());
if (!source.isNull()) {
if (!m_receivedData) {
@@ -123,10 +123,11 @@ void DocumentWriter::begin(const KURL& url, bool dispatch, SecurityOrigin* origi
bool resetScripting = !(m_frame->loader()->stateMachine()->isDisplayingInitialEmptyDocument() && m_frame->document()->securityOrigin()->isSecureTransitionTo(url));
m_frame->loader()->clear(resetScripting, resetScripting);
+ clear();
if (resetScripting)
m_frame->script()->updatePlatformScriptObjects();
- m_frame->loader()->setURL(url);
+ m_frame->loader()->setOutgoingReferrer(url);
m_frame->setDocument(document);
if (m_decoder)
@@ -245,7 +246,7 @@ void DocumentWriter::setDecoder(TextResourceDecoder* decoder)
String DocumentWriter::deprecatedFrameEncoding() const
{
- return m_frame->loader()->url().isEmpty() ? m_encoding : encoding();
+ return m_frame->document()->url().isEmpty() ? m_encoding : encoding();
}
void DocumentWriter::setDocumentWasLoadedAsPartOfNavigation()
diff --git a/Source/WebCore/loader/DocumentWriter.h b/Source/WebCore/loader/DocumentWriter.h
index fb93606..9e737c1 100644
--- a/Source/WebCore/loader/DocumentWriter.h
+++ b/Source/WebCore/loader/DocumentWriter.h
@@ -53,7 +53,8 @@ public:
void addData(const char* string, int length = -1, bool flush = false);
void end();
void endIfNotLoadingMainResource();
- void clear();
+
+ void setFrame(Frame* frame) { m_frame = frame; }
String encoding() const;
void setEncoding(const String& encoding, bool userChosen);
@@ -76,6 +77,7 @@ public:
private:
PassRefPtr<Document> createDocument(const KURL&);
+ void clear();
Frame* m_frame;
diff --git a/Source/WebCore/loader/EmptyClients.h b/Source/WebCore/loader/EmptyClients.h
index d0a4350..4e8dd43 100644
--- a/Source/WebCore/loader/EmptyClients.h
+++ b/Source/WebCore/loader/EmptyClients.h
@@ -141,6 +141,7 @@ public:
virtual bool shouldInterruptJavaScript() { return false; }
virtual bool selectItemWritingDirectionIsNatural() { return false; }
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection() { return false; }
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
@@ -148,6 +149,10 @@ public:
virtual void showContextMenu() { }
#endif
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+ virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { }
+#endif
+
virtual void setStatusbarText(const String&) { }
virtual bool tabsToLinks() const { return false; }
@@ -198,8 +203,6 @@ public:
virtual void formDidFocus(const Node*) { }
virtual void formDidBlur(const Node*) { }
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
virtual void setCursor(const Cursor&) { }
virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
@@ -356,7 +359,7 @@ public:
virtual void saveViewStateToItem(HistoryItem*) { }
virtual bool canCachePage() const { return false; }
virtual void didDisplayInsecureContent() { }
- virtual void didRunInsecureContent(SecurityOrigin*) { }
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) { }
virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
virtual void didTransferChildFrameToNewDocument(Page*) { }
virtual void transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*) { }
@@ -555,7 +558,6 @@ public:
virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
- virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
virtual void dragControllerDestroyed() { }
};
#endif // ENABLE(DRAG_SUPPORT)
@@ -573,8 +575,6 @@ public:
virtual void highlight(Node*) { }
virtual void hideHighlight() { }
- virtual void populateSetting(const String&, String*) { }
- virtual void storeSetting(const String&, const String&) { }
virtual bool sendMessageToFrontend(const String&) { return false; }
};
diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp
index 3a19791..2a8d6ad 100644
--- a/Source/WebCore/loader/FrameLoader.cpp
+++ b/Source/WebCore/loader/FrameLoader.cpp
@@ -34,10 +34,6 @@
#include "FrameLoader.h"
#include "ApplicationCacheHost.h"
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
-#include "Archive.h"
-#include "ArchiveFactory.h"
-#endif
#include "BackForwardController.h"
#include "BeforeUnloadEvent.h"
#include "MemoryCache.h"
@@ -115,6 +111,11 @@
#include "SVGViewSpec.h"
#endif
+#if ENABLE(WEB_ARCHIVE)
+#include "Archive.h"
+#include "ArchiveFactory.h"
+#endif
+
#ifdef ANDROID_INSTRUMENT
#include "TimeCounter.h"
#include "RenderArena.h"
@@ -182,7 +183,6 @@ FrameLoader::FrameLoader(Frame* frame, FrameLoaderClient* client)
, m_policyChecker(frame)
, m_history(frame)
, m_notifer(frame)
- , m_writer(frame)
, m_subframeLoader(frame)
, m_state(FrameStateCommittedPage)
, m_loadType(FrameLoadTypeStandard)
@@ -236,8 +236,8 @@ void FrameLoader::init()
setState(FrameStateProvisional);
m_provisionalDocumentLoader->setResponse(ResourceResponse(KURL(), "text/html", 0, String(), String()));
m_provisionalDocumentLoader->finishedLoading();
- writer()->begin(KURL(), false);
- writer()->end();
+ m_documentLoader->writer()->begin(KURL(), false);
+ m_documentLoader->writer()->end();
m_frame->document()->cancelParsing();
m_stateMachine.advanceTo(FrameLoaderStateMachine::DisplayingInitialEmptyDocument);
m_didCallImplicitClose = true;
@@ -392,7 +392,6 @@ void FrameLoader::stopLoading(UnloadEventPolicy unloadEventPolicy, DatabasePolic
DocumentLoadTiming* timing = documentLoader->timing();
ASSERT(timing->navigationStart);
m_frame->domWindow()->dispatchTimedEvent(unloadEvent, m_frame->domWindow()->document(), &timing->unloadEventStart, &timing->unloadEventEnd);
- ASSERT(timing->unloadEventStart >= timing->navigationStart);
} else
m_frame->domWindow()->dispatchEvent(unloadEvent, m_frame->domWindow()->document());
}
@@ -483,15 +482,16 @@ KURL FrameLoader::iconURL()
return KURL(ParsedURLString, m_frame->document()->iconURL());
// Don't return a favicon iconURL unless we're http or https
- if (!m_URL.protocolInHTTPFamily())
+ KURL documentURL = m_frame->document()->url();
+ if (!documentURL.protocolInHTTPFamily())
return KURL();
KURL url;
- bool couldSetProtocol = url.setProtocol(m_URL.protocol());
+ bool couldSetProtocol = url.setProtocol(documentURL.protocol());
ASSERT_UNUSED(couldSetProtocol, couldSetProtocol);
- url.setHost(m_URL.host());
- if (m_URL.hasPort())
- url.setPort(m_URL.port());
+ url.setHost(documentURL.host());
+ if (documentURL.hasPort())
+ url.setPort(documentURL.port());
url.setPath("/favicon.ico");
return url;
}
@@ -520,10 +520,9 @@ bool FrameLoader::didOpenURL(const KURL& url)
window->setDefaultStatus(String());
}
}
- m_URL = url;
- if (m_URL.protocolInHTTPFamily() && !m_URL.host().isEmpty() && m_URL.path().isEmpty())
- m_URL.setPath("/");
- m_workingURL = m_URL;
+ m_workingURL = url;
+ if (m_workingURL.protocolInHTTPFamily() && !m_workingURL.host().isEmpty() && m_workingURL.path().isEmpty())
+ m_workingURL.setPath("/");
started();
@@ -543,9 +542,7 @@ void FrameLoader::didExplicitOpen()
// from a subsequent window.document.open / window.document.write call.
// Canceling redirection here works for all cases because document.open
// implicitly precedes document.write.
- m_frame->navigationScheduler()->cancel();
- if (m_frame->document()->url() != blankURL())
- m_URL = m_frame->document()->url();
+ m_frame->navigationScheduler()->cancel();
}
@@ -593,7 +590,6 @@ void FrameLoader::clear(bool clearWindowProperties, bool clearScriptObjects, boo
// Do not drop the document before the ScriptController and view are cleared
// as some destructors might still try to access the document.
m_frame->setDocument(0);
- writer()->clear();
m_subframeLoader.clear();
@@ -612,8 +608,8 @@ void FrameLoader::clear(bool clearWindowProperties, bool clearScriptObjects, boo
void FrameLoader::receivedFirstData()
{
- writer()->begin(m_workingURL, false);
- writer()->setDocumentWasLoadedAsPartOfNavigation();
+ activeDocumentLoader()->writer()->begin(m_workingURL, false);
+ activeDocumentLoader()->writer()->setDocumentWasLoadedAsPartOfNavigation();
dispatchDidCommitLoad();
dispatchDidClearWindowObjectsInAllWorlds();
@@ -637,21 +633,20 @@ void FrameLoader::receivedFirstData()
return;
if (url.isEmpty())
- url = m_URL.string();
+ url = m_frame->document()->url().string();
else
url = m_frame->document()->completeURL(url).string();
m_frame->navigationScheduler()->scheduleRedirect(delay, url);
}
-void FrameLoader::setURL(const KURL& url)
+void FrameLoader::setOutgoingReferrer(const KURL& url)
{
- KURL ref(url);
- ref.setUser(String());
- ref.setPass(String());
- ref.removeFragmentIdentifier();
- m_outgoingReferrer = ref.string();
- m_URL = url;
+ KURL outgoingReferrer(url);
+ outgoingReferrer.setUser(String());
+ outgoingReferrer.setPass(String());
+ outgoingReferrer.removeFragmentIdentifier();
+ m_outgoingReferrer = outgoingReferrer.string();
}
void FrameLoader::didBeginDocument(bool dispatch)
@@ -682,6 +677,10 @@ void FrameLoader::didBeginDocument(bool dispatch)
String dnsPrefetchControl = m_documentLoader->response().httpHeaderField("X-DNS-Prefetch-Control");
if (!dnsPrefetchControl.isEmpty())
m_frame->document()->parseDNSPrefetchControlHeader(dnsPrefetchControl);
+
+ String contentSecurityPolicy = m_documentLoader->response().httpHeaderField("X-WebKit-CSP");
+ if (!contentSecurityPolicy.isEmpty())
+ m_frame->document()->contentSecurityPolicy()->didReceiveHeader(contentSecurityPolicy);
}
history()->restoreDocumentState();
@@ -730,7 +729,7 @@ void FrameLoader::startIconLoader()
if (!iconDatabase()->iconDataKnownForIconURL(urlString)) {
LOG(IconDatabase, "Told not to load icon %s but icon data is not yet available - registering for notification and requesting load from disk", urlString.ascii().data());
m_client->registerForIconNotification();
- iconDatabase()->iconForPageURL(m_URL.string(), IntSize(0, 0));
+ iconDatabase()->iconForPageURL(m_frame->document()->url().string(), IntSize(0, 0));
iconDatabase()->iconForPageURL(originalRequestURL().string(), IntSize(0, 0));
} else
m_client->dispatchDidReceiveIcon();
@@ -767,8 +766,8 @@ void FrameLoader::startIconLoader()
void FrameLoader::commitIconURLToIconDatabase(const KURL& icon)
{
ASSERT(iconDatabase());
- LOG(IconDatabase, "Committing iconURL %s to database for pageURLs %s and %s", icon.string().ascii().data(), m_URL.string().ascii().data(), originalRequestURL().string().ascii().data());
- iconDatabase()->setIconURLForPageURL(icon.string(), m_URL.string());
+ LOG(IconDatabase, "Committing iconURL %s to database for pageURLs %s and %s", icon.string().ascii().data(), m_frame->document()->url().string().ascii().data(), originalRequestURL().string().ascii().data());
+ iconDatabase()->setIconURLForPageURL(icon.string(), m_frame->document()->url().string());
iconDatabase()->setIconURLForPageURL(icon.string(), originalRequestURL().string());
}
@@ -794,7 +793,7 @@ void FrameLoader::finishedParsing()
// Check if the scrollbars are really needed for the content.
// If not, remove them, relayout, and repaint.
m_frame->view()->restoreScrollbar();
- m_frame->view()->scrollToFragment(m_URL);
+ m_frame->view()->scrollToFragment(m_frame->document()->url());
}
void FrameLoader::loadDone()
@@ -923,13 +922,13 @@ void FrameLoader::loadURLIntoChildFrame(const KURL& url, const String& referer,
{
ASSERT(childFrame);
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
RefPtr<Archive> subframeArchive = activeDocumentLoader()->popArchiveForSubframe(childFrame->tree()->uniqueName());
if (subframeArchive) {
childFrame->loader()->loadArchive(subframeArchive.release());
return;
}
-#endif
+#endif // ENABLE(WEB_ARCHIVE)
HistoryItem* parentItem = history()->currentItem();
// If we're moving in the back/forward list, we might want to replace the content
@@ -945,7 +944,7 @@ void FrameLoader::loadURLIntoChildFrame(const KURL& url, const String& referer,
childFrame->loader()->loadURL(url, referer, String(), false, FrameLoadTypeRedirectWithLockedBackForwardList, 0, 0);
}
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
void FrameLoader::loadArchive(PassRefPtr<Archive> prpArchive)
{
RefPtr<Archive> archive = prpArchive;
@@ -966,7 +965,7 @@ void FrameLoader::loadArchive(PassRefPtr<Archive> prpArchive)
documentLoader->addAllArchiveResources(archive.get());
load(documentLoader.get());
}
-#endif
+#endif // ENABLE(WEB_ARCHIVE)
ObjectContentType FrameLoader::defaultObjectContentType(const KURL& url, const String& mimeTypeIn)
{
@@ -1037,7 +1036,7 @@ void FrameLoader::checkIfDisplayInsecureContent(SecurityOrigin* context, const K
if (!isMixedContent(context, url))
return;
- String message = makeString("The page at ", m_URL.string(), " displayed insecure content from ", url.string(), ".\n");
+ String message = makeString("The page at ", m_frame->document()->url().string(), " displayed insecure content from ", url.string(), ".\n");
m_frame->domWindow()->console()->addMessage(HTMLMessageSource, LogMessageType, WarningMessageLevel, message, 1, String());
m_client->didDisplayInsecureContent();
@@ -1048,10 +1047,10 @@ void FrameLoader::checkIfRunInsecureContent(SecurityOrigin* context, const KURL&
if (!isMixedContent(context, url))
return;
- String message = makeString("The page at ", m_URL.string(), " ran insecure content from ", url.string(), ".\n");
+ String message = makeString("The page at ", m_frame->document()->url().string(), " ran insecure content from ", url.string(), ".\n");
m_frame->domWindow()->console()->addMessage(HTMLMessageSource, LogMessageType, WarningMessageLevel, message, 1, String());
- m_client->didRunInsecureContent(context);
+ m_client->didRunInsecureContent(context, url);
}
Frame* FrameLoader::opener()
@@ -1129,7 +1128,7 @@ void FrameLoader::updateFirstPartyForCookies()
if (m_frame->tree()->parent())
setFirstPartyForCookies(m_frame->tree()->parent()->document()->firstPartyForCookies());
else
- setFirstPartyForCookies(m_URL);
+ setFirstPartyForCookies(m_frame->document()->url());
}
void FrameLoader::setFirstPartyForCookies(const KURL& url)
@@ -1147,6 +1146,7 @@ void FrameLoader::loadInSameDocument(const KURL& url, SerializedScriptValue* sta
ASSERT(!stateObject || (stateObject && !isNewNavigation));
// Update the data source's request with the new URL to fake the URL change
+ KURL oldURL = m_frame->document()->url();
m_frame->document()->setURL(url);
documentLoader()->replaceRequestURLForSameDocumentNavigation(url);
if (isNewNavigation && !shouldTreatURLAsSameAsCurrent(url) && !stateObject) {
@@ -1164,11 +1164,8 @@ void FrameLoader::loadInSameDocument(const KURL& url, SerializedScriptValue* sta
history()->updateBackForwardListForFragmentScroll();
}
- String oldURL;
- bool hashChange = equalIgnoringFragmentIdentifier(url, m_URL) && url.fragmentIdentifier() != m_URL.fragmentIdentifier();
- oldURL = m_URL;
+ bool hashChange = equalIgnoringFragmentIdentifier(url, oldURL) && url.fragmentIdentifier() != oldURL.fragmentIdentifier();
- m_URL = url;
history()->updateForSameDocumentNavigation();
// If we were in the autoscroll/panScroll mode we want to stop it before following the link to the anchor
@@ -1182,7 +1179,7 @@ void FrameLoader::loadInSameDocument(const KURL& url, SerializedScriptValue* sta
// We need to scroll to the fragment whether or not a hash change occurred, since
// the user might have scrolled since the previous navigation.
if (FrameView* view = m_frame->view())
- view->scrollToFragment(m_URL);
+ view->scrollToFragment(url);
m_isComplete = false;
checkCompleted();
@@ -1733,7 +1730,7 @@ void FrameLoader::stopAllLoaders(DatabasePolicy databasePolicy, ClearProvisional
setProvisionalDocumentLoader(0);
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
if (m_documentLoader)
m_documentLoader->clearArchiveResources();
#endif
@@ -1869,7 +1866,8 @@ void FrameLoader::commitProvisionalLoad()
RefPtr<CachedPage> cachedPage = m_loadingFromCachedPage ? pageCache()->get(history()->provisionalItem()) : 0;
RefPtr<DocumentLoader> pdl = m_provisionalDocumentLoader;
- LOG(PageCache, "WebCoreLoading %s: About to commit provisional load from previous URL '%s' to new URL '%s'", m_frame->tree()->uniqueName().string().utf8().data(), m_URL.string().utf8().data(),
+ LOG(PageCache, "WebCoreLoading %s: About to commit provisional load from previous URL '%s' to new URL '%s'", m_frame->tree()->uniqueName().string().utf8().data(),
+ m_frame->document() ? m_frame->document()->url().string().utf8().data() : "",
pdl ? pdl->url().string().utf8().data() : "<no provisional DocumentLoader>");
// Check to see if we need to cache the page we are navigating away from into the back/forward cache.
@@ -1923,7 +1921,8 @@ void FrameLoader::commitProvisionalLoad()
didOpenURL(url);
}
- LOG(Loading, "WebCoreLoading %s: Finished committing provisional load to URL %s", m_frame->tree()->uniqueName().string().utf8().data(), m_URL.string().utf8().data());
+ LOG(Loading, "WebCoreLoading %s: Finished committing provisional load to URL %s", m_frame->tree()->uniqueName().string().utf8().data(),
+ m_frame->document() ? m_frame->document()->url().string().utf8().data() : "");
if (m_loadType == FrameLoadTypeStandard && m_documentLoader->isClientRedirect())
history()->updateForClientRedirect();
@@ -2051,7 +2050,7 @@ void FrameLoader::transitionToCommitted(PassRefPtr<CachedPage> cachedPage)
ASSERT_NOT_REACHED();
}
- writer()->setMIMEType(dl->responseMIMEType());
+ m_documentLoader->writer()->setMIMEType(dl->responseMIMEType());
// Tell the client we've committed this URL.
ASSERT(m_frame->view());
@@ -2156,7 +2155,6 @@ void FrameLoader::open(CachedFrameBase& cachedFrame)
if (url.protocolInHTTPFamily() && !url.host().isEmpty() && url.path().isEmpty())
url.setPath("/");
- m_URL = url;
m_workingURL = url;
started();
@@ -2187,8 +2185,6 @@ void FrameLoader::open(CachedFrameBase& cachedFrame)
m_frame->domWindow()->setURL(document->url());
m_frame->domWindow()->setSecurityOrigin(document->securityOrigin());
- writer()->setDecoder(document->decoder());
-
updateFirstPartyForCookies();
cachedFrame.restore();
@@ -2253,8 +2249,9 @@ void FrameLoader::finishedLoadingDocument(DocumentLoader* loader)
return;
#endif
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
-
+#if !ENABLE(WEB_ARCHIVE)
+ m_client->finishedLoading(loader);
+#else
// Give archive machinery a crack at this document. If the MIME type is not an archive type, it will return 0.
RefPtr<Archive> archive = ArchiveFactory::create(loader->mainResourceData().get(), loader->responseMIMEType());
if (!archive) {
@@ -2269,7 +2266,7 @@ void FrameLoader::finishedLoadingDocument(DocumentLoader* loader)
ArchiveResource* mainResource = archive->mainResource();
loader->setParsedArchiveData(mainResource->data());
- writer()->setMIMEType(mainResource->mimeType());
+ loader->writer()->setMIMEType(mainResource->mimeType());
closeURL();
didOpenURL(mainResource->url());
@@ -2277,11 +2274,9 @@ void FrameLoader::finishedLoadingDocument(DocumentLoader* loader)
ASSERT(m_frame->document());
String userChosenEncoding = documentLoader()->overrideEncoding();
bool encodingIsUserChosen = !userChosenEncoding.isNull();
- writer()->setEncoding(encodingIsUserChosen ? userChosenEncoding : mainResource->textEncoding(), encodingIsUserChosen);
- writer()->addData(mainResource->data()->data(), mainResource->data()->size());
-#else
- m_client->finishedLoading(loader);
-#endif // ARCHIVE
+ loader->writer()->setEncoding(encodingIsUserChosen ? userChosenEncoding : mainResource->textEncoding(), encodingIsUserChosen);
+ loader->writer()->addData(mainResource->data()->data(), mainResource->data()->size());
+#endif // ENABLE(WEB_ARCHIVE)
}
bool FrameLoader::isReplacing() const
@@ -2591,7 +2586,9 @@ int FrameLoader::numPendingOrLoadingRequests(bool recurse) const
String FrameLoader::userAgent(const KURL& url) const
{
- return m_client->userAgent(url);
+ String userAgent = m_client->userAgent(url);
+ InspectorInstrumentation::applyUserAgentOverride(m_frame, &userAgent);
+ return userAgent;
}
void FrameLoader::handledOnloadEvents()
@@ -2710,7 +2707,7 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
// Always try UTF-8. If that fails, try frame encoding (if any) and then the default.
// For a newly opened frame with an empty URL, encoding() should not be used, because this methods asks decoder, which uses ISO-8859-1.
Settings* settings = m_frame->settings();
- request.setResponseContentDispositionEncodingFallbackArray("UTF-8", writer()->deprecatedFrameEncoding(), settings ? settings->defaultTextEncodingName() : String());
+ request.setResponseContentDispositionEncodingFallbackArray("UTF-8", activeDocumentLoader()->writer()->deprecatedFrameEncoding(), settings ? settings->defaultTextEncodingName() : String());
}
void FrameLoader::addHTTPOriginIfNeeded(ResourceRequest& request, String origin)
@@ -2893,7 +2890,7 @@ bool FrameLoader::shouldScrollToAnchor(bool isFormSubmission, const String& http
&& loadType != FrameLoadTypeReload
&& loadType != FrameLoadTypeReloadFromOrigin
&& loadType != FrameLoadTypeSame
- && !shouldReload(this->url(), url)
+ && !shouldReload(m_frame->document()->url(), url)
// We don't want to just scroll if a link from within a
// frameset is trying to reload the frameset into _top.
&& !m_frame->document()->isFrameSet();
@@ -3009,10 +3006,10 @@ void FrameLoader::continueLoadAfterNavigationPolicy(const ResourceRequest&, Pass
if (!m_frame->page())
return;
-#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) && USE(JSC)
+#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
if (Page* page = m_frame->page()) {
if (page->mainFrame() == m_frame)
- page->inspectorController()->resume();
+ m_frame->page()->inspectorController()->resume();
}
#endif
@@ -3114,7 +3111,7 @@ void FrameLoader::loadedResourceFromMemoryCache(const CachedResource* resource)
void FrameLoader::applyUserAgent(ResourceRequest& request)
{
- String userAgent = client()->userAgent(request.url());
+ String userAgent = this->userAgent(request.url());
ASSERT(!userAgent.isNull());
request.setHTTPUserAgent(userAgent);
}
@@ -3414,6 +3411,11 @@ void FrameLoader::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world)
m_client->dispatchDidClearWindowObjectInWorld(world);
+#if ENABLE(INSPECTOR)
+ if (Page* page = m_frame->page())
+ page->inspectorController()->didClearWindowObjectInWorld(m_frame, world);
+#endif
+
InspectorInstrumentation::didClearWindowObjectInWorld(m_frame, world);
}
diff --git a/Source/WebCore/loader/FrameLoader.h b/Source/WebCore/loader/FrameLoader.h
index b9eac9d..bb605e7 100644
--- a/Source/WebCore/loader/FrameLoader.h
+++ b/Source/WebCore/loader/FrameLoader.h
@@ -32,7 +32,6 @@
#define FrameLoader_h
#include "CachePolicy.h"
-#include "DocumentWriter.h"
#include "FrameLoaderStateMachine.h"
#include "FrameLoaderTypes.h"
#include "HistoryController.h"
@@ -99,7 +98,6 @@ public:
PolicyChecker* policyChecker() const { return &m_policyChecker; }
HistoryController* history() const { return &m_history; }
ResourceLoadNotifier* notifier() const { return &m_notifer; }
- DocumentWriter* writer() const { return &m_writer; }
SubframeLoader* subframeLoader() const { return &m_subframeLoader; }
// FIXME: This is not cool, people. There are too many different functions that all start loads.
@@ -118,8 +116,8 @@ public:
void load(const ResourceRequest&, bool lockHistory); // Called by WebFrame, calls load(ResourceRequest, SubstituteData).
void load(const ResourceRequest&, const SubstituteData&, bool lockHistory); // Called both by WebFrame and internally, calls load(DocumentLoader*).
void load(const ResourceRequest&, const String& frameName, bool lockHistory); // Called by WebPluginController.
-
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+
+#if ENABLE(WEB_ARCHIVE)
void loadArchive(PassRefPtr<Archive>);
#endif
@@ -269,10 +267,7 @@ public:
void frameDetached();
- const KURL& url() const { return m_URL; }
-
- // setURL is a low-level setter and does not trigger loading.
- void setURL(const KURL&);
+ void setOutgoingReferrer(const KURL&);
void loadDone();
void finishedParsing();
@@ -437,7 +432,6 @@ private:
mutable PolicyChecker m_policyChecker;
mutable HistoryController m_history;
mutable ResourceLoadNotifier m_notifer;
- mutable DocumentWriter m_writer;
mutable SubframeLoader m_subframeLoader;
mutable FrameLoaderStateMachine m_stateMachine;
@@ -470,7 +464,6 @@ private:
RefPtr<SerializedScriptValue> m_pendingStateObject;
- KURL m_URL;
KURL m_workingURL;
OwnPtr<IconLoader> m_iconLoader;
diff --git a/Source/WebCore/loader/FrameLoaderClient.h b/Source/WebCore/loader/FrameLoaderClient.h
index 73860a5..e97c1e0 100644
--- a/Source/WebCore/loader/FrameLoaderClient.h
+++ b/Source/WebCore/loader/FrameLoaderClient.h
@@ -198,7 +198,7 @@ namespace WebCore {
// The indicated security origin has run active content (such as a
// script) from an insecure source. Note that the insecure content can
// spread to other frames in the same origin.
- virtual void didRunInsecureContent(SecurityOrigin*) = 0;
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) = 0;
virtual ResourceError cancelledError(const ResourceRequest&) = 0;
virtual ResourceError blockedError(const ResourceRequest&) = 0;
diff --git a/Source/WebCore/loader/HistoryController.cpp b/Source/WebCore/loader/HistoryController.cpp
index 7c0fc97..7bfe380 100644
--- a/Source/WebCore/loader/HistoryController.cpp
+++ b/Source/WebCore/loader/HistoryController.cpp
@@ -236,7 +236,7 @@ void HistoryController::goToItem(HistoryItem* targetItem, FrameLoadType type)
// Set the BF cursor before commit, which lets the user quickly click back/forward again.
// - plus, it only makes sense for the top level of the operation through the frametree,
// as opposed to happening for some/one of the page commits that might happen soon
- HistoryItem* currentItem = page->backForward()->currentItem();
+ RefPtr<HistoryItem> currentItem = page->backForward()->currentItem();
page->backForward()->setCurrentItem(targetItem);
Settings* settings = m_frame->settings();
page->setGlobalHistoryItem((!settings || settings->privateBrowsingEnabled()) ? 0 : targetItem);
@@ -245,9 +245,9 @@ void HistoryController::goToItem(HistoryItem* targetItem, FrameLoadType type)
// This must be done before trying to navigate the desired frame, because some
// navigations can commit immediately (such as about:blank). We must be sure that
// all frames have provisional items set before the commit.
- recursiveSetProvisionalItem(targetItem, currentItem, type);
+ recursiveSetProvisionalItem(targetItem, currentItem.get(), type);
// Now that all other frames have provisional items, do the actual navigation.
- recursiveGoToItem(targetItem, currentItem, type);
+ recursiveGoToItem(targetItem, currentItem.get(), type);
}
void HistoryController::updateForBackForwardNavigation()
@@ -323,7 +323,7 @@ void HistoryController::updateForStandardLoad(HistoryUpdateType updateType)
if (Page* page = m_frame->page())
addVisitedLink(page, historyURL);
- if (!frameLoader->documentLoader()->didCreateGlobalHistoryEntry() && frameLoader->documentLoader()->unreachableURL().isEmpty() && !frameLoader->url().isEmpty())
+ if (!frameLoader->documentLoader()->didCreateGlobalHistoryEntry() && frameLoader->documentLoader()->unreachableURL().isEmpty() && !m_frame->document()->url().isEmpty())
frameLoader->client()->updateGlobalHistoryRedirectLinks();
}
}
@@ -365,7 +365,7 @@ void HistoryController::updateForRedirectWithLockedBackForwardList()
if (Page* page = m_frame->page())
addVisitedLink(page, historyURL);
- if (!m_frame->loader()->documentLoader()->didCreateGlobalHistoryEntry() && m_frame->loader()->documentLoader()->unreachableURL().isEmpty() && !m_frame->loader()->url().isEmpty())
+ if (!m_frame->loader()->documentLoader()->didCreateGlobalHistoryEntry() && m_frame->loader()->documentLoader()->unreachableURL().isEmpty() && !m_frame->document()->url().isEmpty())
m_frame->loader()->client()->updateGlobalHistoryRedirectLinks();
}
}
@@ -402,8 +402,9 @@ void HistoryController::updateForCommit()
LOG(History, "WebCoreHistory: Updating History for commit in frame %s", frameLoader->documentLoader()->title().utf8().data());
#endif
FrameLoadType type = frameLoader->loadType();
- if (isBackForwardLoadType(type) ||
- ((type == FrameLoadTypeReload || type == FrameLoadTypeReloadFromOrigin) && !frameLoader->provisionalDocumentLoader()->unreachableURL().isEmpty())) {
+ if (isBackForwardLoadType(type)
+ || isReplaceLoadTypeWithProvisionalItem(type)
+ || ((type == FrameLoadTypeReload || type == FrameLoadTypeReloadFromOrigin) && !frameLoader->provisionalDocumentLoader()->unreachableURL().isEmpty())) {
// Once committed, we want to use current item for saving DocState, and
// the provisional item for restoring state.
// Note previousItem must be set before we close the URL, which will
@@ -423,6 +424,13 @@ void HistoryController::updateForCommit()
}
}
+bool HistoryController::isReplaceLoadTypeWithProvisionalItem(FrameLoadType type)
+{
+ // Going back to an error page in a subframe can trigger a FrameLoadTypeReplace
+ // while m_provisionalItem is set, so we need to commit it.
+ return type == FrameLoadTypeReplace && m_provisionalItem;
+}
+
void HistoryController::recursiveUpdateForCommit()
{
// The frame that navigated will now have a null provisional item.
@@ -459,7 +467,7 @@ void HistoryController::recursiveUpdateForCommit()
void HistoryController::updateForSameDocumentNavigation()
{
- if (m_frame->loader()->url().isEmpty())
+ if (m_frame->document()->url().isEmpty())
return;
Settings* settings = m_frame->settings();
@@ -470,7 +478,26 @@ void HistoryController::updateForSameDocumentNavigation()
if (!page)
return;
- addVisitedLink(page, m_frame->loader()->url());
+ addVisitedLink(page, m_frame->document()->url());
+ page->mainFrame()->loader()->history()->recursiveUpdateForSameDocumentNavigation();
+}
+
+void HistoryController::recursiveUpdateForSameDocumentNavigation()
+{
+ // The frame that navigated will now have a null provisional item.
+ // Ignore it and its children.
+ if (!m_provisionalItem)
+ return;
+
+ // Commit the provisional item.
+ m_frameLoadComplete = false;
+ m_previousItem = m_currentItem;
+ m_currentItem = m_provisionalItem;
+ m_provisionalItem = 0;
+
+ // Iterate over the rest of the tree.
+ for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tree()->nextSibling())
+ child->loader()->history()->recursiveUpdateForSameDocumentNavigation();
}
void HistoryController::updateForFrameLoadCompleted()
@@ -620,6 +647,7 @@ void HistoryController::recursiveSetProvisionalItem(HistoryItem* item, HistoryIt
const HistoryItemVector& childItems = item->children();
int size = childItems.size();
+
for (int i = 0; i < size; ++i) {
String childFrameName = childItems[i]->target();
HistoryItem* fromChildItem = fromItem->childItemWithTarget(childFrameName);
@@ -658,14 +686,6 @@ void HistoryController::recursiveGoToItem(HistoryItem* item, HistoryItem* fromIt
bool HistoryController::itemsAreClones(HistoryItem* item1, HistoryItem* item2) const
{
- // It appears that one of the items can be null in release builds, leading
- // to the crashes seen in http://webkit.org/b/52819. For now, try to
- // narrow it down with a more specific crash.
- if (!item1)
- CRASH();
- if (!item2)
- CRASH();
-
// If the item we're going to is a clone of the item we're at, then we do
// not need to load it again. The current frame tree and the frame tree
// snapshot in the item have to match.
diff --git a/Source/WebCore/loader/HistoryController.h b/Source/WebCore/loader/HistoryController.h
index 061f235..9514d2f 100644
--- a/Source/WebCore/loader/HistoryController.h
+++ b/Source/WebCore/loader/HistoryController.h
@@ -91,7 +91,9 @@ private:
void recursiveSetProvisionalItem(HistoryItem*, HistoryItem*, FrameLoadType);
void recursiveGoToItem(HistoryItem*, HistoryItem*, FrameLoadType);
+ bool isReplaceLoadTypeWithProvisionalItem(FrameLoadType);
void recursiveUpdateForCommit();
+ void recursiveUpdateForSameDocumentNavigation();
bool itemsAreClones(HistoryItem*, HistoryItem*) const;
bool currentFramesMatchItem(HistoryItem*) const;
void updateBackForwardListClippedAtTarget(bool doClip);
diff --git a/Source/WebCore/loader/MainResourceLoader.cpp b/Source/WebCore/loader/MainResourceLoader.cpp
index e6abefd..4bdb9ad 100644
--- a/Source/WebCore/loader/MainResourceLoader.cpp
+++ b/Source/WebCore/loader/MainResourceLoader.cpp
@@ -31,6 +31,7 @@
#include "MainResourceLoader.h"
#include "ApplicationCacheHost.h"
+#include "Document.h"
#include "DocumentLoadTiming.h"
#include "DocumentLoader.h"
#include "FormState.h"
diff --git a/Source/WebCore/loader/NavigationScheduler.cpp b/Source/WebCore/loader/NavigationScheduler.cpp
index d51575b..65a4551 100644
--- a/Source/WebCore/loader/NavigationScheduler.cpp
+++ b/Source/WebCore/loader/NavigationScheduler.cpp
@@ -178,11 +178,10 @@ public:
{
UserGestureIndicator gestureIndicator(wasUserGesture() ? DefinitelyProcessingUserGesture : DefinitelyNotProcessingUserGesture);
- FrameLoader* loader = frame->loader();
if (!m_historySteps) {
// Special case for go(0) from a frame -> reload only the frame
// To follow Firefox and IE's behavior, history reload can only navigate the self frame.
- loader->urlSelected(loader->url(), "_self", 0, lockHistory(), lockBackForwardList(), SendReferrer);
+ frame->loader()->urlSelected(frame->document()->url(), "_self", 0, lockHistory(), lockBackForwardList(), SendReferrer);
return;
}
// go(i!=0) from a frame navigates into the history of the frame only,
@@ -322,7 +321,7 @@ void NavigationScheduler::scheduleLocationChange(PassRefPtr<SecurityOrigin> secu
// If the URL we're going to navigate to is the same as the current one, except for the
// fragment part, we don't need to schedule the location change.
KURL parsedURL(ParsedURLString, url);
- if (parsedURL.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(loader->url(), parsedURL)) {
+ if (parsedURL.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(m_frame->document()->url(), parsedURL)) {
loader->changeLocation(securityOrigin, loader->completeURL(url), referrer, lockHistory, lockBackForwardList);
return;
}
@@ -359,7 +358,7 @@ void NavigationScheduler::scheduleRefresh()
{
if (!shouldScheduleNavigation())
return;
- const KURL& url = m_frame->loader()->url();
+ const KURL& url = m_frame->document()->url();
if (url.isEmpty())
return;
diff --git a/Source/WebCore/loader/PingLoader.h b/Source/WebCore/loader/PingLoader.h
index 5988b60..252c09b 100644
--- a/Source/WebCore/loader/PingLoader.h
+++ b/Source/WebCore/loader/PingLoader.h
@@ -62,7 +62,7 @@ private:
PingLoader(Frame*, const ResourceRequest&);
void didReceiveResponse(ResourceHandle*, const ResourceResponse&) { delete this; }
- void didReceiveData(ResourceHandle*, const char*, int) { delete this; }
+ void didReceiveData(ResourceHandle*, const char*, int, int) { delete this; }
void didFinishLoading(ResourceHandle*, double) { delete this; }
void didFail(ResourceHandle*, const ResourceError&) { delete this; }
void timeout(Timer<PingLoader>*) { delete this; }
diff --git a/Source/WebCore/loader/ResourceLoadScheduler.cpp b/Source/WebCore/loader/ResourceLoadScheduler.cpp
index 8cf2c18..dbb6914 100644
--- a/Source/WebCore/loader/ResourceLoadScheduler.cpp
+++ b/Source/WebCore/loader/ResourceLoadScheduler.cpp
@@ -90,7 +90,7 @@ PassRefPtr<SubresourceLoader> ResourceLoadScheduler::scheduleSubresourceLoad(Fra
scheduleLoad(loader.get(), priority);
return loader;
}
-
+
PassRefPtr<NetscapePlugInStreamLoader> ResourceLoadScheduler::schedulePluginStreamLoad(Frame* frame, NetscapePlugInStreamLoaderClient* client, const ResourceRequest& request)
{
PassRefPtr<NetscapePlugInStreamLoader> loader = NetscapePlugInStreamLoader::create(frame, client, request);
@@ -120,11 +120,12 @@ void ResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, Resourc
if (priority > ResourceLoadPriorityLow || !resourceLoader->url().protocolInHTTPFamily() || (priority == ResourceLoadPriorityLow && !hadRequests)) {
// Try to request important resources immediately.
servePendingRequests(host, priority);
- } else {
- // Handle asynchronously so early low priority requests don't get scheduled before later high priority ones.
- InspectorInstrumentation::didScheduleResourceRequest(resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame()->document() : 0, resourceLoader->url());
- scheduleServePendingRequests();
+ return;
}
+
+ // Handle asynchronously so early low priority requests don't get scheduled before later high priority ones.
+ InspectorInstrumentation::didScheduleResourceRequest(resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame()->document() : 0, resourceLoader->url());
+ scheduleServePendingRequests();
}
void ResourceLoadScheduler::remove(ResourceLoader* resourceLoader)
diff --git a/Source/WebCore/loader/ResourceLoader.cpp b/Source/WebCore/loader/ResourceLoader.cpp
index 85216fb..78c86d9 100644
--- a/Source/WebCore/loader/ResourceLoader.cpp
+++ b/Source/WebCore/loader/ResourceLoader.cpp
@@ -145,7 +145,7 @@ void ResourceLoader::start()
ASSERT(!m_request.isNull());
ASSERT(m_deferredRequest.isNull());
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
if (m_documentLoader->scheduleArchiveLoad(this, m_request, m_request.url()))
return;
#endif
diff --git a/Source/WebCore/loader/SubframeLoader.cpp b/Source/WebCore/loader/SubframeLoader.cpp
index ae8ce98..8bfd474 100644
--- a/Source/WebCore/loader/SubframeLoader.cpp
+++ b/Source/WebCore/loader/SubframeLoader.cpp
@@ -46,7 +46,6 @@
#include "RenderEmbeddedObject.h"
#include "RenderView.h"
#include "Settings.h"
-#include "XSSAuditor.h"
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
#include "HTMLMediaElement.h"
@@ -103,11 +102,6 @@ bool SubframeLoader::requestObject(HTMLPlugInImageElement* ownerElement, const S
{
if (url.isEmpty() && mimeType.isEmpty())
return false;
-
- if (!m_frame->script()->xssAuditor()->canLoadObject(url)) {
- // It is unsafe to honor the request for this object.
- return false;
- }
// FIXME: None of this code should use renderers!
RenderEmbeddedObject* renderer = ownerElement->renderEmbeddedObject();
@@ -150,9 +144,6 @@ PassRefPtr<Widget> SubframeLoader::loadMediaPlayerProxyPlugin(Node* node, const
{
ASSERT(node->hasTagName(videoTag) || node->hasTagName(audioTag));
- if (!m_frame->script()->xssAuditor()->canLoadObject(url.string()))
- return 0;
-
KURL completedURL;
if (!url.isEmpty())
completedURL = completeURL(url);
diff --git a/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp b/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp
index 7b20775..0c00ee6 100644
--- a/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp
+++ b/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp
@@ -89,7 +89,7 @@ static unsigned urlHostHash(const KURL& url)
unsigned hostStart = url.hostStart();
unsigned hostEnd = url.hostEnd();
- return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url.string().characters() + hostStart, hostEnd - hostStart));
+ return AlreadyHashed::avoidDeletedValue(WTF::StringHasher::createHash(url.string().characters() + hostStart, hostEnd - hostStart));
}
ApplicationCacheGroup* ApplicationCacheStorage::loadCacheGroup(const KURL& manifestURL)
diff --git a/Source/WebCore/loader/appcache/ManifestParser.cpp b/Source/WebCore/loader/appcache/ManifestParser.cpp
index f58a55d..df83a96 100644
--- a/Source/WebCore/loader/appcache/ManifestParser.cpp
+++ b/Source/WebCore/loader/appcache/ManifestParser.cpp
@@ -28,9 +28,9 @@
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
-#include "CharacterNames.h"
#include "KURL.h"
#include "TextResourceDecoder.h"
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
diff --git a/Source/WebCore/loader/archive/ArchiveFactory.cpp b/Source/WebCore/loader/archive/ArchiveFactory.cpp
index 5926690..693e202 100644
--- a/Source/WebCore/loader/archive/ArchiveFactory.cpp
+++ b/Source/WebCore/loader/archive/ArchiveFactory.cpp
@@ -62,7 +62,7 @@ static ArchiveMIMETypesMap& archiveMIMETypes()
if (initialized)
return mimeTypes;
-#if PLATFORM(CF) && !PLATFORM(QT)
+#if PLATFORM(CF)
mimeTypes.set("application/x-webarchive", archiveFactoryCreate<LegacyWebArchive>);
#elif PLATFORM(ANDROID)
mimeTypes.set("application/x-webarchive-xml", archiveFactoryCreate<WebArchiveAndroid>);
diff --git a/Source/WebCore/loader/archive/android/WebArchiveAndroid.cpp b/Source/WebCore/loader/archive/android/WebArchiveAndroid.cpp
index fbb0aec..55d7cec 100644
--- a/Source/WebCore/loader/archive/android/WebArchiveAndroid.cpp
+++ b/Source/WebCore/loader/archive/android/WebArchiveAndroid.cpp
@@ -28,7 +28,7 @@
#include "config.h"
#include "WebArchiveAndroid.h"
-#if ENABLE(ARCHIVE)
+#if ENABLE(WEB_ARCHIVE)
#include "Base64.h"
#include <libxml/encoding.h>
@@ -470,4 +470,4 @@ bool WebArchiveAndroid::saveWebArchive(xmlTextWriterPtr writer)
}
-#endif // ENABLE(ARCHIVE)
+#endif // ENABLE(WEB_ARCHIVE)
diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp
index fe3281e..19eb3ba 100644
--- a/Source/WebCore/loader/cache/CachedFont.cpp
+++ b/Source/WebCore/loader/cache/CachedFont.cpp
@@ -117,7 +117,7 @@ bool CachedFont::ensureCustomFontData()
return m_fontData;
}
-FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontRenderingMode renderingMode)
+FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant widthVariant, FontRenderingMode renderingMode)
{
#if ENABLE(SVG_FONTS)
if (m_externalSVGDocument)
@@ -125,7 +125,7 @@ FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, b
#endif
#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA
ASSERT(m_fontData);
- return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, renderingMode);
+ return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, widthVariant, renderingMode);
#else
return FontPlatformData();
#endif
diff --git a/Source/WebCore/loader/cache/CachedFont.h b/Source/WebCore/loader/cache/CachedFont.h
index 5814087..cdc32ba 100644
--- a/Source/WebCore/loader/cache/CachedFont.h
+++ b/Source/WebCore/loader/cache/CachedFont.h
@@ -29,6 +29,7 @@
#include "CachedResource.h"
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Vector.h>
#if ENABLE(SVG_FONTS)
@@ -63,7 +64,7 @@ public:
void beginLoadIfNeeded(CachedResourceLoader* dl);
bool ensureCustomFontData();
- FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
#if ENABLE(SVG_FONTS)
bool isSVGFont() const { return m_isSVGFont; }
diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp
index 7d9ce3d..057b8ea 100644
--- a/Source/WebCore/loader/cache/CachedImage.cpp
+++ b/Source/WebCore/loader/cache/CachedImage.cpp
@@ -103,8 +103,7 @@ void CachedImage::didAddClient(CachedResourceClient* c)
if (m_image && !m_image->isNull())
c->imageChanged(this);
- if (!isLoading())
- c->notifyFinished(this);
+ CachedResource::didAddClient(c);
}
void CachedImage::allClientsRemoved()
diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp
index 06b3131..0f9ff45 100644
--- a/Source/WebCore/loader/cache/CachedResource.cpp
+++ b/Source/WebCore/loader/cache/CachedResource.cpp
@@ -93,8 +93,8 @@ CachedResource::CachedResource(const String& url, Type type)
, m_loading(false)
, m_type(type)
, m_status(Pending)
-#ifndef NDEBUG
, m_deleted(false)
+#ifndef NDEBUG
, m_lruIndex(0)
#endif
, m_nextInAllResourcesList(0)
@@ -117,8 +117,14 @@ CachedResource::~CachedResource()
ASSERT(!inCache());
ASSERT(!m_deleted);
ASSERT(url().isNull() || memoryCache()->resourceForURL(KURL(ParsedURLString, url())) != this);
-#ifndef NDEBUG
+
+ if (m_deleted) {
+ // FIXME: Remove when http://webkit.org/b/53045 is fixed.
+ CRASH();
+ }
+
m_deleted = true;
+#ifndef NDEBUG
cachedResourceLeakCounter.decrement();
#endif
diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h
index 5c8b38f..3379f8c 100644
--- a/Source/WebCore/loader/cache/CachedResource.h
+++ b/Source/WebCore/loader/cache/CachedResource.h
@@ -266,8 +266,9 @@ private:
unsigned m_type : 3; // Type
unsigned m_status : 3; // Status
-#ifndef NDEBUG
+ // FIXME: Move m_deleted back inside NDEBUG when http://webkit.org/b/53045 is fixed.
bool m_deleted;
+#ifndef NDEBUG
unsigned m_lruIndex;
#endif
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
index de02758..10c1b6c 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
@@ -80,12 +80,13 @@ static CachedResource* createResource(CachedResource::Type type, const KURL& url
CachedResourceLoader::CachedResourceLoader(Document* document)
: m_document(document)
, m_requestCount(0)
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- , m_blockNetworkImage(false)
-#endif
+ , m_loadDoneActionTimer(this, &CachedResourceLoader::loadDoneActionTimerFired)
, m_autoLoadImages(true)
, m_loadFinishing(false)
, m_allowStaleResources(false)
+#ifdef ANDROID_BLOCK_NETWORK_IMAGE
+ , m_blockNetworkImage(false)
+#endif
{
}
@@ -566,6 +567,25 @@ void CachedResourceLoader::loadDone(CachedResourceRequest* request)
m_requests.remove(request);
if (frame())
frame()->loader()->loadDone();
+
+ if (!request) {
+ // If the request passed to this function is null, loadDone finished synchronously from when
+ // the load was started, so we want to kick off our next set of loads (via checkForPendingPreloads
+ // and servePendingRequests) asynchronously.
+ m_loadDoneActionTimer.startOneShot(0);
+ return;
+ }
+
+ performPostLoadActions();
+}
+
+void CachedResourceLoader::loadDoneActionTimerFired(Timer<CachedResourceLoader>*)
+{
+ performPostLoadActions();
+}
+
+void CachedResourceLoader::performPostLoadActions()
+{
checkForPendingPreloads();
resourceLoadScheduler()->servePendingRequests();
}
@@ -630,11 +650,10 @@ void CachedResourceLoader::preload(CachedResource::Type type, const String& url,
void CachedResourceLoader::checkForPendingPreloads()
{
- unsigned count = m_pendingPreloads.size();
- if (!count || !m_document->body() || !m_document->body()->renderer())
+ if (m_pendingPreloads.isEmpty() || !m_document->body() || !m_document->body()->renderer())
return;
- for (unsigned i = 0; i < count; ++i) {
- PendingPreload& preload = m_pendingPreloads[i];
+ while (!m_pendingPreloads.isEmpty()) {
+ PendingPreload preload = m_pendingPreloads.takeFirst();
// Don't request preload if the resource already loaded normally (this will result in double load if the page is being reloaded with cached results ignored).
if (!cachedResource(m_document->completeURL(preload.m_url)))
requestPreload(preload.m_type, preload.m_url, preload.m_charset);
@@ -646,7 +665,7 @@ void CachedResourceLoader::requestPreload(CachedResource::Type type, const Strin
{
String encoding;
if (type == CachedResource::Script || type == CachedResource::CSSStyleSheet)
- encoding = charset.isEmpty() ? m_document->frame()->loader()->writer()->encoding() : charset;
+ encoding = charset.isEmpty() ? m_document->charset() : charset;
CachedResource* resource = requestResource(type, url, encoding, ResourceLoadPriorityUnresolved, true);
if (!resource || (m_preloads && m_preloads->contains(resource)))
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h
index 4f67e72..881ad2f 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.h
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.h
@@ -30,6 +30,8 @@
#include "CachedResourceHandle.h"
#include "CachePolicy.h"
#include "ResourceLoadPriority.h"
+#include "Timer.h"
+#include <wtf/Deque.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/ListHashSet.h>
@@ -123,6 +125,10 @@ private:
void notifyLoadedFromMemoryCache(CachedResource*);
bool canRequest(CachedResource::Type, const KURL&);
+
+ void loadDoneActionTimerFired(Timer<CachedResourceLoader>*);
+
+ void performPostLoadActions();
HashSet<String> m_validatedURLs;
mutable DocumentResourceMap m_documentResources;
@@ -139,15 +145,17 @@ private:
String m_url;
String m_charset;
};
- Vector<PendingPreload> m_pendingPreloads;
+ Deque<PendingPreload> m_pendingPreloads;
+
+ Timer<CachedResourceLoader> m_loadDoneActionTimer;
//29 bits left
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- bool m_blockNetworkImage : 1;
-#endif
bool m_autoLoadImages : 1;
bool m_loadFinishing : 1;
bool m_allowStaleResources : 1;
+#ifdef ANDROID_BLOCK_NETWORK_IMAGE
+ bool m_blockNetworkImage : 1;
+#endif
};
}
diff --git a/Source/WebCore/loader/cache/CachedResourceRequest.cpp b/Source/WebCore/loader/cache/CachedResourceRequest.cpp
index d5e1adf..1d2f706 100644
--- a/Source/WebCore/loader/cache/CachedResourceRequest.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceRequest.cpp
@@ -113,6 +113,7 @@ PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoad
#endif
ResourceLoadPriority priority = resource->loadPriority();
+ resourceRequest.setPriority(priority);
RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(cachedResourceLoader->document()->frame(),
request.get(), resourceRequest, priority, securityCheck, sendResourceLoadCallbacks);
diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp
index 8950ddb..bfd39c5 100644
--- a/Source/WebCore/loader/cache/CachedScript.cpp
+++ b/Source/WebCore/loader/cache/CachedScript.cpp
@@ -55,9 +55,18 @@ CachedScript::~CachedScript()
{
}
+void CachedScript::didAddClient(CachedResourceClient* c)
+{
+ if (m_decodedDataDeletionTimer.isActive())
+ m_decodedDataDeletionTimer.stop();
+
+ CachedResource::didAddClient(c);
+}
+
void CachedScript::allClientsRemoved()
{
- m_decodedDataDeletionTimer.startOneShot(0);
+ if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
+ m_decodedDataDeletionTimer.startOneShot(interval);
}
void CachedScript::setEncoding(const String& chs)
@@ -79,7 +88,6 @@ const String& CachedScript::script()
m_script += m_decoder->flush();
setDecodedSize(m_script.length() * sizeof(UChar));
}
- m_decodedDataDeletionTimer.startOneShot(0);
return m_script;
}
@@ -117,7 +125,9 @@ void CachedScript::destroyDecodedData()
m_script = String();
unsigned extraSize = 0;
#if USE(JSC)
- // FIXME: SourceInfoCache should be wiped out too but not this easily.
+ if (m_sourceProviderCache)
+ m_sourceProviderCache->clear();
+
extraSize = m_sourceProviderCache ? m_sourceProviderCache->byteSize() : 0;
#endif
setDecodedSize(extraSize);
diff --git a/Source/WebCore/loader/cache/CachedScript.h b/Source/WebCore/loader/cache/CachedScript.h
index 14294f2..85c3805 100644
--- a/Source/WebCore/loader/cache/CachedScript.h
+++ b/Source/WebCore/loader/cache/CachedScript.h
@@ -47,12 +47,13 @@ namespace WebCore {
const String& script();
+ virtual void didAddClient(CachedResourceClient*);
virtual void allClientsRemoved();
virtual void setEncoding(const String&);
virtual String encoding() const;
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error(CachedResource::Status);
+ virtual void error(Status);
void checkNotify();
diff --git a/Source/WebCore/loader/icon/IconDatabase.cpp b/Source/WebCore/loader/icon/IconDatabase.cpp
index 6040037..95746ae 100644
--- a/Source/WebCore/loader/icon/IconDatabase.cpp
+++ b/Source/WebCore/loader/icon/IconDatabase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com)
*
* Redistribution and use in source and binary forms, with or without
@@ -1056,7 +1056,6 @@ static int databaseVersionNumber(SQLiteDatabase& db)
static bool isValidDatabase(SQLiteDatabase& db)
{
-
// These four tables should always exist in a valid db
if (!db.tableExists("IconInfo") || !db.tableExists("IconData") || !db.tableExists("PageURL") || !db.tableExists("IconDatabaseInfo"))
return false;
@@ -1160,6 +1159,13 @@ void IconDatabase::performOpenInitialization()
// Reduce sqlite RAM cache size from default 2000 pages (~1.5kB per page). 3MB of cache for icon database is overkill
if (!SQLiteStatement(m_syncDB, "PRAGMA cache_size = 200;").executeCommand())
LOG_ERROR("SQLite database could not set cache_size");
+
+ // Tell backup software (i.e., Time Machine) to never back up the icon database, because
+ // it's a large file that changes frequently, thus using a lot of backup disk space, and
+ // it's unlikely that many users would be upset about it not being backed up. We could
+ // make this configurable on a per-client basis some day if some clients don't want this.
+ if (canExcludeFromBackup() && !wasExcludedFromBackup() && excludeFromBackup(m_completeDatabasePath))
+ setWasExcludedFromBackup();
}
bool IconDatabase::checkIntegrity()
@@ -2091,6 +2097,20 @@ void IconDatabase::writeIconSnapshotToSQLDatabase(const IconSnapshot& snapshot)
}
}
+bool IconDatabase::wasExcludedFromBackup()
+{
+ ASSERT_ICON_SYNC_THREAD();
+
+ return SQLiteStatement(m_syncDB, "SELECT value FROM IconDatabaseInfo WHERE key = 'ExcludedFromBackup';").getColumnInt(0);
+}
+
+void IconDatabase::setWasExcludedFromBackup()
+{
+ ASSERT_ICON_SYNC_THREAD();
+
+ SQLiteStatement(m_syncDB, "INSERT INTO IconDatabaseInfo (key, value) VALUES ('ExcludedFromBackup', 1)").executeCommand();
+}
+
} // namespace WebCore
#endif // ENABLE(ICONDATABASE)
diff --git a/Source/WebCore/loader/icon/IconDatabase.h b/Source/WebCore/loader/icon/IconDatabase.h
index e08dcd4..5dc8288 100644
--- a/Source/WebCore/loader/icon/IconDatabase.h
+++ b/Source/WebCore/loader/icon/IconDatabase.h
@@ -199,6 +199,9 @@ private:
bool imported();
void setImported(bool);
+ bool wasExcludedFromBackup();
+ void setWasExcludedFromBackup();
+
bool m_initialPruningComplete;
void setIconURLForPageURLInSQLDatabase(const String&, const String&);
diff --git a/Source/WebCore/loader/icon/IconLoader.cpp b/Source/WebCore/loader/icon/IconLoader.cpp
index 24562d0..bb738e8 100644
--- a/Source/WebCore/loader/icon/IconLoader.cpp
+++ b/Source/WebCore/loader/icon/IconLoader.cpp
@@ -69,7 +69,10 @@ void IconLoader::startLoading()
// SubresourceLoader::create returns.
m_loadIsInProgress = true;
- RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_frame, this, m_frame->loader()->iconURL());
+ ResourceRequest resourceRequest(m_frame->loader()->iconURL());
+ resourceRequest.setPriority(ResourceLoadPriorityLow);
+
+ RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_frame, this, resourceRequest);
if (!loader)
LOG_ERROR("Failed to start load for icon at url %s", m_frame->loader()->iconURL().string().ascii().data());
diff --git a/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html b/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html
index 185e5c6..e6af6ec 100644
--- a/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html
+++ b/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html b/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html
index 9637195..3e78bb1 100644
--- a/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html
+++ b/Source/WebCore/manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html
@@ -8,21 +8,9 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
- if (window.layoutTestController)
- layoutTestController.waitUntilDone();
-
-function keepTyping() {
- typeCharacterCommand('i');
- typeCharacterCommand('n');
- typeCharacterCommand('g');
- typeCharacterCommand(' ');
- if (window.layoutTestController)
- layoutTestController.notifyDone();
-}
-
function editingTest() {
typeCharacterCommand('t');
typeCharacterCommand('h');
@@ -35,7 +23,6 @@ function editingTest() {
typeCharacterCommand('a');
typeCharacterCommand('p');
typeCharacterCommand('s');
- setTimeout("keepTyping()", 1000);
}
</script>
@@ -43,8 +30,7 @@ function editingTest() {
<title>Autocorrection Cancellation By Typing Test</title>
</head>
<body>
-<div>This test verifies that autocorrection behaves correctly when continuing typing in a word on
-which autocorrection panel is hown. You should see correction panel showing 'collapse' after 'collaps' is entered. And after a pause, phrase 'the collapsing' is shown without underline.</div>
+<div>This test verifies that autocorrection behaves correctly when continuing typing in a word on which autocorrection panel is hown. You should see correction panel showing 'collapse' after 'collaps' is entered. Then type "ing". Phrase 'the collapsing' should be shown without underline.</div>
<p style="color:green">Note, this test can fail due to user specific spell checking data. If the user has previously dismissed 'collapse' as the correct spelling of 'collaps' several times, the spell checker will not provide 'collapse' as a suggestion anymore. To fix this, remove all files in ~/Library/Spelling.</p>
<div contenteditable id="root" class="editing">
<span id="test"></span>
diff --git a/Source/WebCore/manual-tests/autocorrection/autocorrection-contraction.html b/Source/WebCore/manual-tests/autocorrection/autocorrection-contraction.html
index ef5bb68..39ad7f7 100644
--- a/Source/WebCore/manual-tests/autocorrection/autocorrection-contraction.html
+++ b/Source/WebCore/manual-tests/autocorrection/autocorrection-contraction.html
@@ -8,15 +8,9 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
-function keepTyping() {
- typeCharacterCommand('\'');
- typeCharacterCommand('t');
- typeCharacterCommand(' ');
-}
-
function editingTest() {
typeCharacterCommand('t');
typeCharacterCommand('h');
@@ -29,7 +23,6 @@ function editingTest() {
typeCharacterCommand('l');
typeCharacterCommand('d');
typeCharacterCommand('n');
- setTimeout("keepTyping()", 1000);
}
</script>
diff --git a/Source/WebCore/manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html b/Source/WebCore/manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html
index b8521c0..a1011fa 100644
--- a/Source/WebCore/manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html
+++ b/Source/WebCore/manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/autocorrection/delete-to-dismiss-reversion.html b/Source/WebCore/manual-tests/autocorrection/delete-to-dismiss-reversion.html
index c39b2ac..bbaa77d 100644
--- a/Source/WebCore/manual-tests/autocorrection/delete-to-dismiss-reversion.html
+++ b/Source/WebCore/manual-tests/autocorrection/delete-to-dismiss-reversion.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html b/Source/WebCore/manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html
index 320ed8c..242fcb2 100644
--- a/Source/WebCore/manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html
+++ b/Source/WebCore/manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
@@ -32,10 +32,8 @@ function editingTest() {
</head>
<body>
<div><p>This test verifies that reversion panel is shown when user moves carret to previously corrected word using delete key.</p>
-<p>After seeing the reversion panel, press ESC key, then space key. You should see the phrase "the mesage"
-where "mesage" has red mispell underline. </p>
-<p style="color:green">Note, this test can fail due to user specific spell checking data. If the user has previously
-frequently revert 'message' to 'mesage'. To fix this, remove all files in ~/Library/Spelling, then kill AppleSpell.service process.</p>
+<p>After seeing the reversion panel, press ESC key, then space key. You should see the phrase "the mesage". </p>
+<p style="color:green">Note, this test can fail due to user specific spell checking data. If the user has previously frequently revert 'message' to 'mesage'. To fix this, remove all files in ~/Library/Spelling, then kill AppleSpell.service process.</p>
<div contenteditable id="root" class="editing">
<span id="test"></span>
</div>
diff --git a/Source/WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html b/Source/WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html
index 56724f1..67171b7 100644
--- a/Source/WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html
+++ b/Source/WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html b/Source/WebCore/manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html
index 8ca2a6b..5579915 100644
--- a/Source/WebCore/manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html
+++ b/Source/WebCore/manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
@@ -32,10 +32,8 @@ function editingTest() {
</head>
<body>
<div><p>This test verifies that reversion panel is shown when user moves carret to previously corrected word</p>
-<p>After seeing the reversion panel, press ESC key, then space key. You should see the phrase "the mesage"
-where "mesage" has red mispell underline. </p>
-<p style="color:green">Note, this test can fail due to user specific spell checking data. If the user has previously
-frequently revert 'message' to 'mesage'. To fix this, remove all files in ~/Library/Spelling, then kill AppleSpell.service process.</p>
+<p>After seeing the reversion panel, press ESC key, then space key. You should see the phrase "the mesage". </p>
+<p style="color:green">Note, this test can fail due to user specific spell checking data. If the user has previously frequently revert 'message' to 'mesage'. To fix this, remove all files in ~/Library/Spelling, then kill AppleSpell.service process.</p>
<div contenteditable id="root" class="editing">
<span id="test"></span>
</div>
diff --git a/Source/WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html b/Source/WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html
index dc8881f..cbd1dcd 100644
--- a/Source/WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html
+++ b/Source/WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/autocorrection/spell-checking-after-reversion.html b/Source/WebCore/manual-tests/autocorrection/spell-checking-after-reversion.html
new file mode 100644
index 0000000..9ea5f58
--- /dev/null
+++ b/Source/WebCore/manual-tests/autocorrection/spell-checking-after-reversion.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+
+<style>
+.editing {
+ border: 2px solid red;
+ padding: 12px;
+ font-size: 24px;
+}
+</style>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+
+<script>
+function editingTest() {
+ typeCharacterCommand('t');
+ typeCharacterCommand('h');
+ typeCharacterCommand('e');
+ typeCharacterCommand(' ');
+ typeCharacterCommand('c');
+ typeCharacterCommand('y');
+ typeCharacterCommand('l');
+ typeCharacterCommand('i');
+ typeCharacterCommand('n');
+ typeCharacterCommand('d');
+ typeCharacterCommand('r');
+}
+
+</script>
+
+<title>Spellchecking After Reversion Test</title>
+</head>
+<body>
+<div><p>This test verifies the behavior of spellchecking after reversion.</p>
+<ol>
+<li>After seeing the correction panel, press space to accept the correction.</li>
+<li>Press delete key to bring up reversion bubble.</li>
+<li>Press ESC key to accept the reversion suggestion.</li>
+<li>Press space key again, and verify that the word "cylindr" IS NOT marked as misspelled.</li>
+<li>Press delete key twice.</li>
+<li>Press space key again, and verify that the word "cylind" IS marked as misspelled.</li>
+</ol>
+<p style="color:green">Note, this test can fail due to user specific spell checking data. To fix this, remove all files in ~/Library/Spelling.</p>
+<div contenteditable id="root" class="editing">
+<span id="test"></span>
+</div>
+
+
+<script>
+runEditingTest();
+</script>
+
+</body>
+</html>
diff --git a/Source/WebCore/manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html b/Source/WebCore/manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html
index eeea0f7..41191fb 100644
--- a/Source/WebCore/manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html
+++ b/Source/WebCore/manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html
@@ -8,7 +8,7 @@
font-size: 24px;
}
</style>
-<script src=../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
+<script src=../../../../LayoutTests/editing/editing.js language="JavaScript" type="text/JavaScript" ></script>
<script>
function editingTest() {
diff --git a/Source/WebCore/manual-tests/pop-up-alignment-and-direction.html b/Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
new file mode 100644
index 0000000..b51798e
--- /dev/null
+++ b/Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
Binary files differ
diff --git a/Source/WebCore/manual-tests/select_webkit_appearance_off_popup_alignment.html b/Source/WebCore/manual-tests/select_webkit_appearance_off_popup_alignment.html
new file mode 100644
index 0000000..3e48852
--- /dev/null
+++ b/Source/WebCore/manual-tests/select_webkit_appearance_off_popup_alignment.html
@@ -0,0 +1,78 @@
+<html>
+
+<body>
+ <p>Manual test for popup alignment of select with no apperance.</p>
+
+ <p>All popup boxes should all align with select element on both left and right side.</p>
+
+ No scrollbar in popup:<br>
+
+ LTR: <select size="1" style="-webkit-appearance: none;">
+ <option>Item 1</option>
+ <option>Item 2</option>
+ <option>Item 3</option>
+ <option>Item 4</option>
+ <option>Item 5</option>
+ </select>
+
+ RTL: <select size="1" dir="rtl" style="-webkit-appearance: none;">
+ <option>Item 1</option>
+ <option>Item 2</option>
+ <option>Item 3</option>
+ <option>Item 4</option>
+ <option>Item 5</option>
+ </select>
+
+ <br>
+
+ Popup has scrollbar:<br>
+ LTR: <select size="1" style="-webkit-appearance: none; padding-right: 20px;">
+ <option>Item 1</option>
+ <option>Item 2</option>
+ <option>Item 3</option>
+ <option>Item 4</option>
+ <option>Item 5</option>
+ <option>Item 6</option>
+ <option>Item 7</option>
+ <option>Item 8</option>
+ <option>Item 9</option>
+ <option>Item 10</option>
+ <option>Item 11</option>
+ <option>Item 12</option>
+ <option>Item 13</option>
+ <option>Item 14</option>
+ <option>Item 15</option>
+ <option>Item 16</option>
+ <option>Item 17</option>
+ <option>Item 18</option>
+ <option>Item 19</option>
+ <option>Item 20</option>
+ <option>Item 21</option>
+ </select>
+
+ RTL: <select size="1" dir="rtL" style="-webkit-appearance: none; padding-left: 20px;">
+ <option>Item 1</option>
+ <option>Item 2</option>
+ <option>Item 3</option>
+ <option>Item 4</option>
+ <option>Item 5</option>
+ <option>Item 6</option>
+ <option>Item 7</option>
+ <option>Item 8</option>
+ <option>Item 9</option>
+ <option>Item 10</option>
+ <option>Item 11</option>
+ <option>Item 12</option>
+ <option>Item 13</option>
+ <option>Item 14</option>
+ <option>Item 15</option>
+ <option>Item 16</option>
+ <option>Item 17</option>
+ <option>Item 18</option>
+ <option>Item 19</option>
+ <option>Item 20</option>
+ <option>Item 21</option>
+ </select>
+
+</body>
+</html>
diff --git a/Source/WebCore/manual-tests/svg-filter-animation.svg b/Source/WebCore/manual-tests/svg-filter-animation.svg
index 5b7c9cc..4bca5e2 100644
--- a/Source/WebCore/manual-tests/svg-filter-animation.svg
+++ b/Source/WebCore/manual-tests/svg-filter-animation.svg
@@ -34,16 +34,16 @@
<defs>
<filter id="filt" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%">
- <feTurbulence id="turb" baseFrequency="0.03" numOctaves="4" seed="67" result="turb"/>
- <feGaussianBlur in="SourceGraphic" primitiveUnits="objectBoundingBox" id="blur" stdDeviation="1" result="blur"/>
+ <feTurbulence baseFrequency="0.03" numOctaves="4" seed="67" result="turb"/>
+ <feGaussianBlur in="SourceGraphic" primitiveUnits="objectBoundingBox" stdDeviation="1" result="blur"/>
<feComposite in="turb" in2="blur" operator="arithmetic" k2="0.3" k3="1" result="comp"/>
- <feDiffuseLighting in="comp" primitiveUnits="objectBoundingBox" id="diff" diffuseConstant="1" lighting-color="white" surfaceScale="10" result="light" >
+ <feDiffuseLighting in="comp" primitiveUnits="objectBoundingBox" diffuseConstant="1" lighting-color="white" surfaceScale="10" result="light" >
<feSpotLight id="light" x="0" y="300" z="200" pointsAtX="-200" pointsAtY="100" pointsAtZ="0" limitingConeAngle="90" specularExponent="20" />
</feDiffuseLighting>
- <feSpecularLighting in="comp" primitiveUnits="objectBoundingBox" id="diff" diffuseConstant="1" lighting-color="#A66102" surfaceScale="10" result="ambient" >
- <feDistantLight id="light" azimuth="0" elevation="90" />
+ <feSpecularLighting in="comp" primitiveUnits="objectBoundingBox" diffuseConstant="1" lighting-color="#A66102" surfaceScale="10" result="ambient" >
+ <feDistantLight azimuth="0" elevation="90" />
</feSpecularLighting>
- <feComposite in="light" in2="ambient" operator="arithmetic" k2="1.2" k3=".8"/>
+ <feComposite in="light" in2="ambient" operator="arithmetic" k2="1.2" k3=".8"/>
</filter>
</defs>
diff --git a/Source/WebCore/notifications/NotificationCenter.cpp b/Source/WebCore/notifications/NotificationCenter.cpp
index a2289ec..3d08055 100644
--- a/Source/WebCore/notifications/NotificationCenter.cpp
+++ b/Source/WebCore/notifications/NotificationCenter.cpp
@@ -42,21 +42,20 @@ namespace WebCore {
NotificationCenter::NotificationCenter(ScriptExecutionContext* context, NotificationPresenter* presenter)
: ActiveDOMObject(context, this)
- , m_scriptExecutionContext(context)
, m_notificationPresenter(presenter) {}
int NotificationCenter::checkPermission()
{
- if (!presenter())
+ if (!presenter() || !scriptExecutionContext())
return NotificationPresenter::PermissionDenied;
- return m_notificationPresenter->checkPermission(m_scriptExecutionContext);
+ return m_notificationPresenter->checkPermission(scriptExecutionContext());
}
void NotificationCenter::requestPermission(PassRefPtr<VoidCallback> callback)
{
- if (!presenter())
+ if (!presenter() || !scriptExecutionContext())
return;
- m_notificationPresenter->requestPermission(m_scriptExecutionContext, callback);
+ m_notificationPresenter->requestPermission(scriptExecutionContext(), callback);
}
void NotificationCenter::disconnectFrame()
@@ -66,9 +65,8 @@ void NotificationCenter::disconnectFrame()
ASSERT(m_notificationPresenter);
if (!m_notificationPresenter)
return;
- m_notificationPresenter->cancelRequestsForPermission(m_scriptExecutionContext);
+ m_notificationPresenter->cancelRequestsForPermission(scriptExecutionContext());
m_notificationPresenter = 0;
- m_scriptExecutionContext = 0;
}
} // namespace WebCore
diff --git a/Source/WebCore/notifications/NotificationCenter.h b/Source/WebCore/notifications/NotificationCenter.h
index adad59d..d12fbdf 100644
--- a/Source/WebCore/notifications/NotificationCenter.h
+++ b/Source/WebCore/notifications/NotificationCenter.h
@@ -58,7 +58,7 @@ namespace WebCore {
ec = SYNTAX_ERR;
return 0;
}
- return Notification::create(m_scriptExecutionContext->completeURL(URI), context(), ec, this);
+ return Notification::create(scriptExecutionContext()->completeURL(URI), scriptExecutionContext(), ec, this);
}
PassRefPtr<Notification> createNotification(const String& iconURI, const String& title, const String& body, ExceptionCode& ec)
@@ -67,11 +67,10 @@ namespace WebCore {
ec = INVALID_STATE_ERR;
return 0;
}
- NotificationContents contents(iconURI.isEmpty() ? KURL() : m_scriptExecutionContext->completeURL(iconURI), title, body);
- return Notification::create(contents, context(), ec, this);
+ NotificationContents contents(iconURI.isEmpty() ? KURL() : scriptExecutionContext()->completeURL(iconURI), title, body);
+ return Notification::create(contents, scriptExecutionContext(), ec, this);
}
- ScriptExecutionContext* context() const { return m_scriptExecutionContext; }
NotificationPresenter* presenter() const { return m_notificationPresenter; }
int checkPermission();
@@ -82,7 +81,6 @@ namespace WebCore {
private:
NotificationCenter(ScriptExecutionContext*, NotificationPresenter*);
- ScriptExecutionContext* m_scriptExecutionContext;
NotificationPresenter* m_notificationPresenter;
};
diff --git a/Source/WebCore/page/Chrome.cpp b/Source/WebCore/page/Chrome.cpp
index d96b6c9..08bf1c3 100644
--- a/Source/WebCore/page/Chrome.cpp
+++ b/Source/WebCore/page/Chrome.cpp
@@ -330,6 +330,13 @@ bool Chrome::shouldInterruptJavaScript()
return m_client->shouldInterruptJavaScript();
}
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+void Chrome::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title)
+{
+ m_client->registerProtocolHandler(scheme, baseURL, url, title);
+}
+#endif
+
IntRect Chrome::windowResizerRect() const
{
return m_client->windowResizerRect();
@@ -503,11 +510,21 @@ bool ChromeClient::paintCustomScrollCorner(GraphicsContext*, const FloatRect&)
return false;
}
+bool ChromeClient::paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&)
+{
+ return false;
+}
+
bool Chrome::selectItemWritingDirectionIsNatural()
{
return m_client->selectItemWritingDirectionIsNatural();
}
+bool Chrome::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return m_client->selectItemAlignmentFollowsMenuWritingDirection();
+}
+
PassRefPtr<PopupMenu> Chrome::createPopupMenu(PopupMenuClient* client) const
{
return m_client->createPopupMenu(client);
diff --git a/Source/WebCore/page/Chrome.h b/Source/WebCore/page/Chrome.h
index 0afd807..4d16214 100644
--- a/Source/WebCore/page/Chrome.h
+++ b/Source/WebCore/page/Chrome.h
@@ -134,6 +134,10 @@ namespace WebCore {
void setStatusbarText(Frame*, const String&);
bool shouldInterruptJavaScript();
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+ void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title);
+#endif
+
IntRect windowResizerRect() const;
void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
@@ -163,6 +167,7 @@ namespace WebCore {
#endif
bool selectItemWritingDirectionIsNatural();
+ bool selectItemAlignmentFollowsMenuWritingDirection();
PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h
index 98b56da..42ef727 100644
--- a/Source/WebCore/page/ChromeClient.h
+++ b/Source/WebCore/page/ChromeClient.h
@@ -26,7 +26,6 @@
#include "Cursor.h"
#include "FocusDirection.h"
#include "GraphicsContext.h"
-#include "HTMLParserQuirks.h"
#include "HostWindow.h"
#include "PopupMenu.h"
#include "PopupMenuClient.h"
@@ -53,7 +52,6 @@ namespace WebCore {
class FloatRect;
class Frame;
class Geolocation;
- class HTMLParserQuirks;
class HitTestResult;
class IntRect;
class NavigationAction;
@@ -136,6 +134,10 @@ namespace WebCore {
virtual bool shouldInterruptJavaScript() = 0;
virtual bool tabsToLinks() const = 0;
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+ virtual void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title) = 0;
+#endif
+
virtual IntRect windowResizerRect() const = 0;
// Methods used by HostWindow.
@@ -211,6 +213,8 @@ namespace WebCore {
float value, float proportion, ScrollbarControlPartMask);
virtual bool paintCustomScrollCorner(GraphicsContext*, const FloatRect&);
+ virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&);
+
// FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373
// For client-based geolocation, these two methods have moved to GeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061
// This can be either a synchronous or asynchronous call. The ChromeClient can display UI asking the user for permission
@@ -229,8 +233,6 @@ namespace WebCore {
virtual void formDidFocus(const Node*) { };
virtual void formDidBlur(const Node*) { };
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() = 0;
-
#if USE(ACCELERATED_COMPOSITING)
// Pass 0 as the GraphicsLayer to detatch the root layer.
virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) = 0;
@@ -292,6 +294,7 @@ namespace WebCore {
#endif
virtual bool selectItemWritingDirectionIsNatural() = 0;
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection() = 0;
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const = 0;
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const = 0;
@@ -301,6 +304,8 @@ namespace WebCore {
virtual void postAccessibilityNotification(AccessibilityObject*, AXObjectCache::AXNotification) { }
+ virtual void didCompleteRubberBandForMainFrame(const IntSize&) const { }
+
#if ENABLE(ANDROID_INSTALLABLE_WEB_APPS)
virtual void webAppCanBeInstalled() = 0;
#endif
diff --git a/Source/WebCore/page/Console.cpp b/Source/WebCore/page/Console.cpp
index 0c19421..a1b92e9 100644
--- a/Source/WebCore/page/Console.cpp
+++ b/Source/WebCore/page/Console.cpp
@@ -34,8 +34,8 @@
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameTree.h"
+#include "InspectorConsoleInstrumentation.h"
#include "InspectorController.h"
-#include "InspectorInstrumentation.h"
#include "MemoryInfo.h"
#include "Page.h"
#include "PageGroup.h"
@@ -147,7 +147,7 @@ void Console::addMessage(MessageSource source, MessageType type, MessageLevel le
page->chrome()->client()->addMessageToConsole(source, type, level, message, lineNumber, sourceURL);
if (callStack)
- InspectorInstrumentation::addMessageToConsole(page, source, type, level, message, 0, callStack.get());
+ InspectorInstrumentation::addMessageToConsole(page, source, type, level, message, 0, callStack);
else
InspectorInstrumentation::addMessageToConsole(page, source, type, level, message, lineNumber, sourceURL);
@@ -160,8 +160,11 @@ void Console::addMessage(MessageSource source, MessageType type, MessageLevel le
printf(" %s\n", message.utf8().data());
}
-void Console::addMessage(MessageType type, MessageLevel level, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack, bool acceptNoArguments)
+void Console::addMessage(MessageType type, MessageLevel level, PassRefPtr<ScriptArguments> prpArguments, PassRefPtr<ScriptCallStack> prpCallStack, bool acceptNoArguments)
{
+ RefPtr<ScriptArguments> arguments = prpArguments;
+ RefPtr<ScriptCallStack> callStack = prpCallStack;
+
Page* page = this->page();
if (!page)
return;
@@ -187,7 +190,7 @@ void Console::addMessage(MessageType type, MessageLevel level, PassRefPtr<Script
if (arguments->getFirstArgumentAsString(message))
page->chrome()->client()->addMessageToConsole(JSMessageSource, type, level, message, lastCaller.lineNumber(), lastCaller.sourceURL());
- InspectorInstrumentation::addMessageToConsole(page, JSMessageSource, type, level, message, arguments.get(), callStack.get());
+ InspectorInstrumentation::addMessageToConsole(page, JSMessageSource, type, level, message, arguments, callStack);
}
void Console::debug(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
@@ -222,8 +225,9 @@ void Console::dirxml(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCal
log(arguments, callStack);
}
-void Console::trace(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
+void Console::trace(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> prpCallStack)
{
+ RefPtr<ScriptCallStack> callStack = prpCallStack;
addMessage(TraceMessageType, LogMessageLevel, arguments, callStack, true);
if (!shouldPrintExceptions())
@@ -246,12 +250,12 @@ void Console::assertCondition(bool condition, PassRefPtr<ScriptArguments> argume
void Console::count(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
{
- InspectorInstrumentation::consoleCount(page(), arguments.get(), callStack.get());
+ InspectorInstrumentation::consoleCount(page(), arguments, callStack);
}
void Console::markTimeline(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack>)
{
- InspectorInstrumentation::consoleMarkTimeline(page(), arguments.get());
+ InspectorInstrumentation::consoleMarkTimeline(page(), arguments);
}
#if ENABLE(JAVASCRIPT_DEBUGGER)
@@ -290,7 +294,7 @@ void Console::profileEnd(const String& title, ScriptState* state, PassRefPtr<Scr
return;
m_profiles.append(profile);
- InspectorInstrumentation::addProfile(page, profile, callStack.get());
+ InspectorInstrumentation::addProfile(page, profile, callStack);
}
#endif
@@ -302,17 +306,17 @@ void Console::time(const String& title)
void Console::timeEnd(const String& title, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack> callStack)
{
- InspectorInstrumentation::stopConsoleTiming(page(), title, callStack.get());
+ InspectorInstrumentation::stopConsoleTiming(page(), title, callStack);
}
void Console::group(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
{
- InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupMessageType, LogMessageLevel, String(), arguments.get(), callStack.get());
+ InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupMessageType, LogMessageLevel, String(), arguments, callStack);
}
void Console::groupCollapsed(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
{
- InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupCollapsedMessageType, LogMessageLevel, String(), arguments.get(), callStack.get());
+ InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupCollapsedMessageType, LogMessageLevel, String(), arguments, callStack);
}
void Console::groupEnd()
diff --git a/Source/WebCore/page/ContentSecurityPolicy.cpp b/Source/WebCore/page/ContentSecurityPolicy.cpp
new file mode 100644
index 0000000..045e5aa
--- /dev/null
+++ b/Source/WebCore/page/ContentSecurityPolicy.cpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Google, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ContentSecurityPolicy.h"
+#include "Document.h"
+
+namespace WebCore {
+
+ContentSecurityPolicy::ContentSecurityPolicy()
+ : m_isEnabled(false)
+{
+}
+
+void ContentSecurityPolicy::didReceiveHeader(const String& header)
+{
+ m_isEnabled = true;
+ m_header = header;
+}
+
+bool ContentSecurityPolicy::canLoadExternalScriptFromSrc(const String&) const
+{
+ return !m_isEnabled;
+}
+
+}
diff --git a/Source/WebCore/page/ContentSecurityPolicy.h b/Source/WebCore/page/ContentSecurityPolicy.h
new file mode 100644
index 0000000..ef0d551
--- /dev/null
+++ b/Source/WebCore/page/ContentSecurityPolicy.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Google, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ContentSecurityPolicy_h
+#define ContentSecurityPolicy_h
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class ContentSecurityPolicy {
+ WTF_MAKE_NONCOPYABLE(ContentSecurityPolicy);
+public:
+ ContentSecurityPolicy();
+
+ void didReceiveHeader(const String&);
+ bool canLoadExternalScriptFromSrc(const String& url) const;
+
+private:
+ bool m_isEnabled;
+ String m_header;
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/page/ContextMenuController.cpp b/Source/WebCore/page/ContextMenuController.cpp
index 0909f70..36ac89d 100644
--- a/Source/WebCore/page/ContextMenuController.cpp
+++ b/Source/WebCore/page/ContextMenuController.cpp
@@ -207,6 +207,11 @@ void ContextMenuController::contextMenuItemSelected(ContextMenuItem* item)
// For now, call into the client. This is temporary!
frame->editor()->copyImage(m_hitTestResult);
break;
+#if PLATFORM(QT)
+ case ContextMenuItemTagCopyImageUrlToClipboard:
+ frame->editor()->copyURL(m_hitTestResult.absoluteImageURL(), m_hitTestResult.textContent());
+ break;
+#endif
case ContextMenuItemTagOpenMediaInNewWindow:
openNewWindow(m_hitTestResult.absoluteMediaURL(), frame);
break;
@@ -642,6 +647,10 @@ void ContextMenuController::populate()
contextMenuItemTagDownloadImageToDisk());
ContextMenuItem CopyImageItem(ActionType, ContextMenuItemTagCopyImageToClipboard,
contextMenuItemTagCopyImageToClipboard());
+#if PLATFORM(QT)
+ ContextMenuItem CopyImageUrlItem(ActionType, ContextMenuItemTagCopyImageUrlToClipboard,
+ contextMenuItemTagCopyImageUrlToClipboard());
+#endif
ContextMenuItem OpenMediaInNewWindowItem(ActionType, ContextMenuItemTagOpenMediaInNewWindow, String());
ContextMenuItem CopyMediaLinkItem(ActionType, ContextMenuItemTagCopyMediaLinkToClipboard,
String());
@@ -708,6 +717,10 @@ void ContextMenuController::populate()
appendItem(OpenLinkInNewWindowItem, m_contextMenu.get());
appendItem(DownloadFileItem, m_contextMenu.get());
}
+#if PLATFORM(QT)
+ if (m_hitTestResult.isSelected())
+ appendItem(CopyItem, m_contextMenu.get());
+#endif
appendItem(CopyLinkItem, m_contextMenu.get());
}
@@ -720,6 +733,9 @@ void ContextMenuController::populate()
appendItem(DownloadImageItem, m_contextMenu.get());
if (imageURL.isLocalFile() || m_hitTestResult.image())
appendItem(CopyImageItem, m_contextMenu.get());
+#if PLATFORM(QT)
+ appendItem(CopyImageUrlItem, m_contextMenu.get());
+#endif
}
KURL mediaURL = m_hitTestResult.absoluteMediaURL();
@@ -1172,6 +1188,9 @@ void ContextMenuController::checkOrEnableIfNeeded(ContextMenuItem& item) const
case ContextMenuItemTagOpenImageInNewWindow:
case ContextMenuItemTagDownloadImageToDisk:
case ContextMenuItemTagCopyImageToClipboard:
+#if PLATFORM(QT)
+ case ContextMenuItemTagCopyImageUrlToClipboard:
+#endif
break;
case ContextMenuItemTagOpenMediaInNewWindow:
if (m_hitTestResult.mediaIsVideo())
diff --git a/Source/WebCore/page/Crypto.cpp b/Source/WebCore/page/Crypto.cpp
new file mode 100644
index 0000000..5621592
--- /dev/null
+++ b/Source/WebCore/page/Crypto.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Google, Inc. ("Google") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "config.h"
+#include "Crypto.h"
+
+#include "ExceptionCode.h"
+#include "Uint8Array.h"
+#include <wtf/CryptographicallyRandomNumber.h>
+
+namespace WebCore {
+
+namespace {
+
+bool isIntegerArray(ArrayBufferView* array)
+{
+ return array->isByteArray()
+ || array->isUnsignedByteArray()
+ || array->isShortArray()
+ || array->isUnsignedShortArray()
+ || array->isIntArray()
+ || array->isUnsignedIntArray();
+}
+
+}
+
+Crypto::Crypto()
+{
+}
+
+void Crypto::getRandomValues(ArrayBufferView* array, ExceptionCode& ec)
+{
+#if USE(OS_RANDOMNESS)
+ if (!array || !isIntegerArray(array)) {
+ ec = TYPE_MISMATCH_ERR;
+ return;
+ }
+ cryptographicallyRandomValues(array->baseAddress(), array->byteLength());
+#else
+ ASSERT_UNUSED(array, array);
+ ec = NOT_SUPPORTED_ERR;
+#endif
+}
+
+}
diff --git a/Source/WebCore/page/Crypto.h b/Source/WebCore/page/Crypto.h
new file mode 100644
index 0000000..bcccd7e
--- /dev/null
+++ b/Source/WebCore/page/Crypto.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Google, Inc. ("Google") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef Crypto_h
+#define Crypto_h
+
+#include <wtf/Forward.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class ArrayBufferView;
+
+typedef int ExceptionCode;
+
+class Crypto : public RefCounted<Crypto> {
+public:
+ static PassRefPtr<Crypto> create() { return adoptRef(new Crypto()); }
+
+ void getRandomValues(ArrayBufferView*, ExceptionCode&);
+
+private:
+ Crypto();
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/page/Crypto.idl b/Source/WebCore/page/Crypto.idl
new file mode 100644
index 0000000..807b63f
--- /dev/null
+++ b/Source/WebCore/page/Crypto.idl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Googl, Inc. ("Google") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+module window {
+
+ interface [
+ OmitConstructor
+ ] Crypto {
+ void getRandomValues(in ArrayBufferView array) raises(DOMException);
+ };
+
+}
diff --git a/Source/WebCore/page/DOMWindow.cpp b/Source/WebCore/page/DOMWindow.cpp
index 0860d65..c732a10 100644
--- a/Source/WebCore/page/DOMWindow.cpp
+++ b/Source/WebCore/page/DOMWindow.cpp
@@ -37,6 +37,7 @@
#include "CSSStyleSelector.h"
#include "Chrome.h"
#include "Console.h"
+#include "Crypto.h"
#include "DOMApplicationCache.h"
#include "DOMSelection.h"
#include "DOMSettableTokenList.h"
@@ -342,8 +343,8 @@ void DOMWindow::adjustWindowRect(const FloatRect& screen, FloatRect& window, con
window.setHeight(min(max(100.0f, window.height()), screen.height()));
// Constrain the window position to the screen.
- window.setX(max(screen.x(), min(window.x(), screen.right() - window.width())));
- window.setY(max(screen.y(), min(window.y(), screen.bottom() - window.height())));
+ window.setX(max(screen.x(), min(window.x(), screen.maxX() - window.width())));
+ window.setY(max(screen.y(), min(window.y(), screen.maxY() - window.height())));
}
// FIXME: We can remove this function once V8 showModalDialog is changed to use DOMWindow.
@@ -433,6 +434,8 @@ void DOMWindow::clear()
m_history->disconnectFrame();
m_history = 0;
+ m_crypto = 0;
+
if (m_locationbar)
m_locationbar->disconnectFrame();
m_locationbar = 0;
@@ -530,6 +533,13 @@ History* DOMWindow::history() const
return m_history.get();
}
+Crypto* DOMWindow::crypto() const
+{
+ if (!m_crypto)
+ m_crypto = Crypto::create();
+ return m_crypto.get();
+}
+
BarInfo* DOMWindow::locationbar() const
{
if (!m_locationbar)
@@ -964,33 +974,17 @@ String DOMWindow::prompt(const String& message, const String& defaultValue)
return String();
}
-static bool isSafeToConvertCharList(const String& string)
-{
- for (unsigned i = 0; i < string.length(); i++) {
- if (string[i] > 0xFF)
- return false;
- }
-
- return true;
-}
-
String DOMWindow::btoa(const String& stringToEncode, ExceptionCode& ec)
{
if (stringToEncode.isNull())
return String();
- if (!isSafeToConvertCharList(stringToEncode)) {
+ if (!stringToEncode.containsOnlyLatin1()) {
ec = INVALID_CHARACTER_ERR;
return String();
}
- Vector<char> in;
- in.append(stringToEncode.characters(), stringToEncode.length());
- Vector<char> out;
-
- base64Encode(in, out);
-
- return String(out.data(), out.size());
+ return base64Encode(stringToEncode.latin1());
}
String DOMWindow::atob(const String& encodedString, ExceptionCode& ec)
@@ -998,7 +992,7 @@ String DOMWindow::atob(const String& encodedString, ExceptionCode& ec)
if (encodedString.isNull())
return String();
- if (!isSafeToConvertCharList(encodedString)) {
+ if (!encodedString.containsOnlyLatin1()) {
ec = INVALID_CHARACTER_ERR;
return String();
}
@@ -1557,7 +1551,7 @@ void DOMWindow::dispatchLoadEvent()
ownerElement->dispatchGenericEvent(ownerEvent.release());
}
- InspectorInstrumentation::mainResourceFiredLoadEvent(frame(), url());
+ InspectorInstrumentation::loadEventFired(frame(), url());
}
bool DOMWindow::dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget> prpTarget)
@@ -1585,7 +1579,6 @@ void DOMWindow::dispatchTimedEvent(PassRefPtr<Event> event, Document* target, do
*startTime = currentTime();
dispatchEvent(event, target);
*endTime = currentTime();
- ASSERT(*endTime >= *startTime);
}
void DOMWindow::removeAllEventListeners()
diff --git a/Source/WebCore/page/DOMWindow.h b/Source/WebCore/page/DOMWindow.h
index f02a7ac..8318369 100644
--- a/Source/WebCore/page/DOMWindow.h
+++ b/Source/WebCore/page/DOMWindow.h
@@ -37,6 +37,7 @@ namespace WebCore {
class CSSRuleList;
class CSSStyleDeclaration;
class Console;
+ class Crypto;
class DOMApplicationCache;
class DOMSelection;
class DOMURL;
@@ -114,6 +115,7 @@ namespace WebCore {
Screen* screen() const;
History* history() const;
+ Crypto* crypto() const;
BarInfo* locationbar() const;
BarInfo* menubar() const;
BarInfo* personalbar() const;
@@ -340,6 +342,7 @@ namespace WebCore {
Screen* optionalScreen() const { return m_screen.get(); }
DOMSelection* optionalSelection() const { return m_selection.get(); }
History* optionalHistory() const { return m_history.get(); }
+ Crypto* optionalCrypto() const { return m_crypto.get(); }
BarInfo* optionalLocationbar() const { return m_locationbar.get(); }
BarInfo* optionalMenubar() const { return m_menubar.get(); }
BarInfo* optionalPersonalbar() const { return m_personalbar.get(); }
@@ -444,6 +447,7 @@ namespace WebCore {
mutable RefPtr<Screen> m_screen;
mutable RefPtr<DOMSelection> m_selection;
mutable RefPtr<History> m_history;
+ mutable RefPtr<Crypto> m_crypto;
mutable RefPtr<BarInfo> m_locationbar;
mutable RefPtr<BarInfo> m_menubar;
mutable RefPtr<BarInfo> m_personalbar;
diff --git a/Source/WebCore/page/DOMWindow.idl b/Source/WebCore/page/DOMWindow.idl
index a814558..b04a8a2 100644
--- a/Source/WebCore/page/DOMWindow.idl
+++ b/Source/WebCore/page/DOMWindow.idl
@@ -54,11 +54,11 @@ module window {
attribute [Replaceable] BarInfo toolbar;
attribute [Replaceable] Navigator navigator;
attribute [Replaceable] Navigator clientInformation;
+ readonly attribute Crypto crypto;
attribute [DoNotCheckDomainSecurity, JSCCustom, V8CustomSetter, V8DisallowShadowing, CPPCustom] Location location;
attribute [Replaceable, CustomGetter, V8CustomSetter] Event event;
- readonly attribute [Custom] Crypto crypto;
DOMSelection getSelection();
@@ -493,28 +493,28 @@ module window {
attribute CanvasGradientConstructor CanvasGradient;
attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;
attribute ImageDataConstructor ImageData;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLActiveInfoConstructor WebGLActiveInfo;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLBufferConstructor WebGLBuffer;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLFramebufferConstructor WebGLFramebuffer;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLProgramConstructor WebGLProgram;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLRenderbufferConstructor WebGLRenderbuffer;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLRenderingContextConstructor WebGLRenderingContext;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLShaderConstructor WebGLShader;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLTextureConstructor WebGLTexture;
- attribute [Conditional=3D_CANVAS,EnabledAtRuntime] WebGLUniformLocationConstructor WebGLUniformLocation;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLActiveInfoConstructor WebGLActiveInfo;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLBufferConstructor WebGLBuffer;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLFramebufferConstructor WebGLFramebuffer;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLProgramConstructor WebGLProgram;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLRenderbufferConstructor WebGLRenderbuffer;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLRenderingContextConstructor WebGLRenderingContext;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLShaderConstructor WebGLShader;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLTextureConstructor WebGLTexture;
+ attribute [Conditional=WEBGL,EnabledAtRuntime] WebGLUniformLocationConstructor WebGLUniformLocation;
attribute TextMetricsConstructor TextMetrics;
attribute DOMStringMapConstructor DOMStringMap;
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] ArrayBufferConstructor ArrayBuffer; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Int8ArrayConstructor Int8Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Uint8ArrayConstructor Uint8Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Int16ArrayConstructor Int16Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Uint16ArrayConstructor Uint16Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Int32ArrayConstructor Int32Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Uint32ArrayConstructor Uint32Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] Float32ArrayConstructor Float32Array; // Usable with new operator
- attribute [JSCCustomGetter,Conditional=3D_CANVAS|BLOB,EnabledAtRuntime] DataViewConstructor DataView; // Usable with new operator
+ attribute [JSCCustomGetter] ArrayBufferConstructor ArrayBuffer; // Usable with new operator
+ attribute [JSCCustomGetter] Int8ArrayConstructor Int8Array; // Usable with new operator
+ attribute [JSCCustomGetter] Uint8ArrayConstructor Uint8Array; // Usable with new operator
+ attribute [JSCCustomGetter] Int16ArrayConstructor Int16Array; // Usable with new operator
+ attribute [JSCCustomGetter] Uint16ArrayConstructor Uint16Array; // Usable with new operator
+ attribute [JSCCustomGetter] Int32ArrayConstructor Int32Array; // Usable with new operator
+ attribute [JSCCustomGetter] Uint32ArrayConstructor Uint32Array; // Usable with new operator
+ attribute [JSCCustomGetter] Float32ArrayConstructor Float32Array; // Usable with new operator
+ attribute [JSCCustomGetter] DataViewConstructor DataView; // Usable with new operator
attribute [JSCCustomGetter,Conditional=WEB_AUDIO,EnabledAtRuntime] AudioContextConstructor webkitAudioContext; // Usable with new operator
attribute [Conditional=WEB_AUDIO] AudioPannerNodeConstructor webkitAudioPannerNode; // Needed for panning model constants
diff --git a/Source/WebCore/page/DragClient.h b/Source/WebCore/page/DragClient.h
index 4f343a0..8f73baa 100644
--- a/Source/WebCore/page/DragClient.h
+++ b/Source/WebCore/page/DragClient.h
@@ -62,7 +62,6 @@ namespace WebCore {
virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint& windowPoint) = 0;
virtual void startDrag(DragImageRef dragImage, const IntPoint& dragImageOrigin, const IntPoint& eventPos, Clipboard*, Frame*, bool linkDrag = false) = 0;
- virtual DragImageRef createDragImageForLink(KURL&, const String& label, Frame*) = 0;
virtual void dragControllerDestroyed() = 0;
#if PLATFORM(MAC)
diff --git a/Source/WebCore/page/DragController.cpp b/Source/WebCore/page/DragController.cpp
index 7be708c..b258e9d 100644
--- a/Source/WebCore/page/DragController.cpp
+++ b/Source/WebCore/page/DragController.cpp
@@ -644,9 +644,9 @@ static IntPoint dragLocForDHTMLDrag(const IntPoint& mouseDraggedPoint, const Int
static IntPoint dragLocForSelectionDrag(Frame* src)
{
IntRect draggingRect = enclosingIntRect(src->selection()->bounds());
- int xpos = draggingRect.right();
+ int xpos = draggingRect.maxX();
xpos = draggingRect.x() < xpos ? draggingRect.x() : xpos;
- int ypos = draggingRect.bottom();
+ int ypos = draggingRect.maxY();
#if PLATFORM(MAC)
// Deal with flipped coordinates on Mac
ypos = draggingRect.y() > ypos ? draggingRect.y() : ypos;
@@ -739,7 +739,7 @@ bool DragController::startDrag(Frame* src, Clipboard* clipboard, DragOperation s
m_client->willPerformDragSourceAction(DragSourceActionLink, dragOrigin, clipboard);
if (!dragImage) {
- dragImage = m_client->createDragImageForLink(linkURL, dragSource.textContent(), src);
+ dragImage = createDragImageForLink(linkURL, dragSource.textContent(), src);
IntSize size = dragImageSize(dragImage);
m_dragOffset = IntPoint(-size.width() / 2, -LinkDragBorderInset);
dragLoc = IntPoint(mouseDraggedPoint.x() + m_dragOffset.x(), mouseDraggedPoint.y() + m_dragOffset.y());
diff --git a/Source/WebCore/page/EditorClient.h b/Source/WebCore/page/EditorClient.h
index 71ba3dd..c805920 100644
--- a/Source/WebCore/page/EditorClient.h
+++ b/Source/WebCore/page/EditorClient.h
@@ -119,8 +119,6 @@ public:
virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity, bool stillSelecting) = 0;
virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) = 0;
-// virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) = 0;
-// virtual bool doCommandBySelector(SEL selector) = 0;
virtual bool shouldMoveRangeAfterDelete(Range*, Range*) = 0;
virtual void didBeginEditing() = 0;
@@ -129,9 +127,6 @@ public:
virtual void didEndEditing() = 0;
virtual void didWriteSelectionToPasteboard() = 0;
virtual void didSetSelectionTypesForPasteboard() = 0;
-// virtual void didChangeTypingStyle:(NSNotification *)notification = 0;
-// virtual void didChangeSelection:(NSNotification *)notification = 0;
-// virtual NSUndoManager* undoManager:(WebView *)webView = 0;
virtual void registerCommandForUndo(PassRefPtr<EditCommand>) = 0;
virtual void registerCommandForRedo(PassRefPtr<EditCommand>) = 0;
diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp
index 8432c10..b173532 100644
--- a/Source/WebCore/page/EventHandler.cpp
+++ b/Source/WebCore/page/EventHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
*
* Redistribution and use in source and binary forms, with or without
@@ -68,6 +68,7 @@
#include "RenderTextControlSingleLine.h"
#include "RenderView.h"
#include "RenderWidget.h"
+#include "ScrollAnimator.h"
#include "Scrollbar.h"
#include "SelectionController.h"
#include "Settings.h"
@@ -81,6 +82,10 @@
#include <wtf/CurrentTime.h>
#include <wtf/StdLibExtras.h>
+#if ENABLE(GESTURE_EVENTS)
+#include "PlatformGestureEvent.h"
+#endif
+
#if ENABLE(SVG)
#include "SVGDocument.h"
#include "SVGElementInstance.h"
@@ -1439,7 +1444,7 @@ bool EventHandler::handleMouseDoubleClickEvent(const PlatformMouseEvent& mouseEv
m_clickCount = mouseEvent.clickCount();
bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false);
- bool swallowClickEvent = mouseEvent.button() == LeftButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
+ bool swallowClickEvent = mouseEvent.button() != RightButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
if (m_lastScrollbarUnderMouse)
swallowMouseUpEvent = m_lastScrollbarUnderMouse->mouseUp();
@@ -1460,6 +1465,9 @@ bool EventHandler::mouseMoved(const PlatformMouseEvent& event)
if (!page)
return result;
+ if (FrameView* frameView = m_frame->view())
+ frameView->scrollAnimator()->mouseMovedInContentArea();
+
hoveredNode.setToNonShadowAncestor();
page->chrome()->mouseDidMoveOverElement(hoveredNode, event.modifierFlags());
page->chrome()->setToolTip(hoveredNode);
@@ -1557,7 +1565,7 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, Hi
// effect on plugins (which matches Firefox).
bool overPluginElement = false;
if (mev.targetNode() && mev.targetNode()->isHTMLElement()) {
- HTMLElement* el = static_cast<HTMLElement*>(mev.targetNode());
+ HTMLElement* el = toHTMLElement(mev.targetNode());
overPluginElement = el->hasTagName(appletTag) || el->hasTagName(objectTag) || el->hasTagName(embedTag);
}
if (!overPluginElement) {
@@ -1637,7 +1645,7 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent)
bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false);
- bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() == LeftButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
+ bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() != RightButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
if (m_resizeLayer) {
m_resizeLayer->setInResizeMode(false);
@@ -1881,6 +1889,23 @@ void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo
// Fire mouseout/mouseover if the mouse has shifted to a different node.
if (fireMouseOverOut) {
+ // FIXME: This code will only correctly handle transitions between frames with scrollbars,
+ // not transitions between overflow regions, or transitions between two frames
+ // that don't have scrollbars contained within a frame that does.
+ if (m_lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->document() != m_frame->document())) {
+ if (Frame* frame = m_lastNodeUnderMouse->document()->frame()) {
+ if (FrameView* frameView = frame->view())
+ frameView->scrollAnimator()->mouseExitedContentArea();
+ }
+ }
+
+ if (m_nodeUnderMouse && (!m_lastNodeUnderMouse || m_lastNodeUnderMouse->document() != m_frame->document())) {
+ if (Frame* frame = m_nodeUnderMouse->document()->frame()) {
+ if (FrameView* frameView = frame->view())
+ frameView->scrollAnimator()->mouseEnteredContentArea();
+ }
+ }
+
if (m_lastNodeUnderMouse && m_lastNodeUnderMouse->document() != m_frame->document()) {
m_lastNodeUnderMouse = 0;
m_lastScrollbarUnderMouse = 0;
@@ -2066,6 +2091,23 @@ void EventHandler::defaultWheelEventHandler(Node* startNode, WheelEvent* wheelEv
m_previousWheelScrolledNode = stopNode;
}
+#if ENABLE(GESTURE_EVENTS)
+bool EventHandler::handleGestureEvent(const PlatformGestureEvent& gestureEvent)
+{
+ // FIXME: This should hit test and go to the correct subframe rather than
+ // always sending gestures to the main frame only. We should also ensure
+ // that if a frame gets a gesture begin gesture, it gets the corresponding
+ // end gesture as well.
+
+ FrameView* view = m_frame->view();
+ if (!view)
+ return false;
+
+ view->handleGestureEvent(gestureEvent);
+ return true;
+}
+#endif
+
#if ENABLE(CONTEXT_MENUS)
bool EventHandler::sendContextMenuEvent(const PlatformMouseEvent& event)
{
@@ -2121,12 +2163,12 @@ bool EventHandler::sendContextMenuEventForKey()
RefPtr<Range> selection = selectionController->toNormalizedRange();
IntRect firstRect = m_frame->editor()->firstRectForRange(selection.get());
- int x = rightAligned ? firstRect.right() : firstRect.x();
- location = IntPoint(x, firstRect.bottom());
+ int x = rightAligned ? firstRect.maxX() : firstRect.x();
+ location = IntPoint(x, firstRect.maxY());
} else if (focusedNode) {
RenderBoxModelObject* box = focusedNode->renderBoxModelObject();
IntRect clippedRect = box->absoluteClippedOverflowRect();
- location = clippedRect.bottomLeft();
+ location = IntPoint(clippedRect.x(), clippedRect.maxY() - 1);
} else {
location = IntPoint(
rightAligned ? view->contentsWidth() - kContextMenuMargin : kContextMenuMargin,
@@ -2171,6 +2213,15 @@ void EventHandler::scheduleHoverStateUpdate()
m_hoverTimer.startOneShot(0);
}
+void EventHandler::dispatchFakeMouseMoveEventSoon()
+{
+ if (m_mousePressed)
+ return;
+
+ if (!m_fakeMouseMoveEventTimer.isActive())
+ m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveInterval);
+}
+
void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad)
{
FrameView* view = m_frame->view();
diff --git a/Source/WebCore/page/EventHandler.h b/Source/WebCore/page/EventHandler.h
index 77668f1..1e825c2 100644
--- a/Source/WebCore/page/EventHandler.h
+++ b/Source/WebCore/page/EventHandler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -53,9 +53,9 @@ class EventTarget;
class FloatPoint;
class FloatQuad;
class Frame;
+class HTMLFrameSetElement;
class HitTestRequest;
class HitTestResult;
-class HTMLFrameSetElement;
class KeyboardEvent;
class MouseEventWithHitTestResults;
class Node;
@@ -65,13 +65,17 @@ class PlatformWheelEvent;
class RenderLayer;
class RenderObject;
class RenderWidget;
-class Scrollbar;
class SVGElementInstance;
+class Scrollbar;
class TextEvent;
class TouchEvent;
class WheelEvent;
class Widget;
-
+
+#if ENABLE(GESTURE_EVENTS)
+class PlatformGestureEvent;
+#endif
+
#if ENABLE(DRAG_SUPPORT)
extern const int LinkDragHysteresis;
extern const int ImageDragHysteresis;
@@ -104,6 +108,7 @@ public:
RenderObject* autoscrollRenderer() const;
void updateAutoscrollRenderer();
+ void dispatchFakeMouseMoveEventSoon();
void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&);
HitTestResult hitTestResultAtPoint(const IntPoint&, bool allowShadowContent, bool ignoreClipping = false,
@@ -161,6 +166,10 @@ public:
bool handleWheelEvent(PlatformWheelEvent&);
void defaultWheelEventHandler(Node*, WheelEvent*);
+#if ENABLE(GESTURE_EVENTS)
+ bool handleGestureEvent(const PlatformGestureEvent&);
+#endif
+
#if ENABLE(CONTEXT_MENUS)
bool sendContextMenuEvent(const PlatformMouseEvent&);
bool sendContextMenuEventForKey();
diff --git a/Source/WebCore/page/FocusController.cpp b/Source/WebCore/page/FocusController.cpp
index eda1005..679288f 100644
--- a/Source/WebCore/page/FocusController.cpp
+++ b/Source/WebCore/page/FocusController.cpp
@@ -50,6 +50,7 @@
#include "RenderLayer.h"
#include "RenderObject.h"
#include "RenderWidget.h"
+#include "ScrollAnimator.h"
#include "SelectionController.h"
#include "Settings.h"
#include "SpatialNavigation.h"
@@ -407,6 +408,11 @@ void FocusController::setActive(bool active)
view->updateLayoutAndStyleIfNeededRecursive();
view->updateControlTints();
}
+ // FIXME: This should propogate to all ScrollableAreas.
+ if (!active)
+ view->scrollAnimator()->contentAreaDidHide();
+ else
+ view->scrollAnimator()->contentAreaDidShow();
}
focusedOrMainFrame()->selection()->pageActivationChanged();
diff --git a/Source/WebCore/page/Frame.cpp b/Source/WebCore/page/Frame.cpp
index 4c7c6b7..84df3d1 100644
--- a/Source/WebCore/page/Frame.cpp
+++ b/Source/WebCore/page/Frame.cpp
@@ -789,7 +789,7 @@ VisiblePosition Frame::visiblePositionForPoint(const IntPoint& framePoint)
return VisiblePosition();
VisiblePosition visiblePos = renderer->positionForPoint(result.localPoint());
if (visiblePos.isNull())
- visiblePos = VisiblePosition(Position(node, 0));
+ visiblePos = firstPositionInOrBeforeNode(node);
return visiblePos;
}
diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp
index 7546270..0dc71f6 100644
--- a/Source/WebCore/page/FrameView.cpp
+++ b/Source/WebCore/page/FrameView.cpp
@@ -56,6 +56,7 @@
#include "RenderScrollbarPart.h"
#include "RenderTheme.h"
#include "RenderView.h"
+#include "ScrollAnimator.h"
#include "Settings.h"
#include "TextResourceDecoder.h"
#include <wtf/CurrentTime.h>
@@ -443,7 +444,8 @@ void FrameView::setContentsSize(const IntSize& size)
m_deferSetNeedsLayouts++;
ScrollView::setContentsSize(size);
-
+ scrollAnimator()->contentsResized();
+
Page* page = frame() ? frame()->page() : 0;
if (!page)
return;
@@ -465,7 +467,7 @@ void FrameView::adjustViewSize()
IntSize size = IntSize(root->docWidth(), root->docHeight());
- ScrollView::setScrollOrigin(IntPoint(-root->docLeft(), -root->docTop()), size == contentsSize());
+ ScrollView::setScrollOrigin(IntPoint(-root->docLeft(), -root->docTop()), !m_frame->document()->printing(), size == contentsSize());
setContentsSize(size);
}
@@ -714,6 +716,7 @@ void FrameView::didMoveOnscreen()
RenderView* view = m_frame->contentRenderer();
if (view)
view->didMoveOnscreen();
+ scrollAnimator()->contentAreaDidShow();
}
void FrameView::willMoveOffscreen()
@@ -721,6 +724,7 @@ void FrameView::willMoveOffscreen()
RenderView* view = m_frame->contentRenderer();
if (view)
view->willMoveOffscreen();
+ scrollAnimator()->contentAreaDidHide();
}
RenderObject* FrameView::layoutRoot(bool onlyDuringLayout) const
@@ -733,6 +737,20 @@ void FrameView::layout(bool allowSubtree)
if (m_inLayout)
return;
+ bool inSubframeLayoutWithFrameFlattening = parent() && m_frame->settings() && m_frame->settings()->frameFlatteningEnabled();
+
+ if (inSubframeLayoutWithFrameFlattening) {
+ if (parent()->isFrameView()) {
+ FrameView* parentView = static_cast<FrameView*>(parent());
+ if (!parentView->m_nestedLayoutCount) {
+ while (parentView->parent() && parentView->parent()->isFrameView())
+ parentView = static_cast<FrameView*>(parentView->parent());
+ parentView->layout(allowSubtree);
+ return;
+ }
+ }
+ }
+
m_layoutTimer.stop();
m_delayedLayout = false;
m_setNeedsLayoutWasDeferred = false;
@@ -765,7 +783,7 @@ void FrameView::layout(bool allowSubtree)
m_layoutSchedulingEnabled = false;
- if (!m_nestedLayoutCount && !m_inSynchronousPostLayout && m_hasPendingPostLayoutTasks) {
+ if (!m_nestedLayoutCount && !m_inSynchronousPostLayout && m_hasPendingPostLayoutTasks && !inSubframeLayoutWithFrameFlattening) {
// This is a new top-level layout. If there are any remaining tasks from the previous
// layout, finish them now.
m_inSynchronousPostLayout = true;
@@ -908,9 +926,6 @@ void FrameView::layout(bool allowSubtree)
}
m_layoutRoot = 0;
- m_frame->selection()->setCaretRectNeedsUpdate();
- m_frame->selection()->updateAppearance();
-
m_layoutSchedulingEnabled = true;
if (!subtree && !toRenderView(root)->printing())
@@ -953,14 +968,14 @@ void FrameView::layout(bool allowSubtree)
layoutHeight() < contentsHeight());
if (!m_hasPendingPostLayoutTasks) {
- if (!m_inSynchronousPostLayout) {
+ if (!m_inSynchronousPostLayout && !inSubframeLayoutWithFrameFlattening) {
m_inSynchronousPostLayout = true;
// Calls resumeScheduledEvents()
performPostLayoutTasks();
m_inSynchronousPostLayout = false;
}
- if (!m_hasPendingPostLayoutTasks && (needsLayout() || m_inSynchronousPostLayout)) {
+ if (!m_hasPendingPostLayoutTasks && (needsLayout() || m_inSynchronousPostLayout || inSubframeLayoutWithFrameFlattening)) {
// If we need layout or are already in a synchronous call to postLayoutTasks(),
// defer widget updates and event dispatch until after we return. postLayoutTasks()
// can make us need to update again, and we can get stuck in a nasty cycle unless
@@ -1142,6 +1157,11 @@ void FrameView::updatePositionedObjects()
}
#endif
+IntPoint FrameView::currentMousePosition() const
+{
+ return m_frame ? m_frame->eventHandler()->currentMousePosition() : IntPoint();
+}
+
bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
{
const size_t fixedObjectThreshold = 5;
@@ -1165,8 +1185,8 @@ bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect
continue;
IntRect updateRect = renderBox->layer()->repaintRectIncludingDescendants();
updateRect = contentsToWindow(updateRect);
-
- updateRect.intersect(rectToScroll);
+ if (clipsRepaints())
+ updateRect.intersect(rectToScroll);
if (!updateRect.isEmpty()) {
if (subRectToUpdate.size() >= fixedObjectThreshold) {
updateInvalidatedSubRect = false;
@@ -1188,7 +1208,8 @@ bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect
IntRect scrolledRect = updateRect;
scrolledRect.move(scrollDelta);
updateRect.unite(scrolledRect);
- updateRect.intersect(rectToScroll);
+ if (clipsRepaints())
+ updateRect.intersect(rectToScroll);
hostWindow()->invalidateContentsAndWindow(updateRect, false);
}
return true;
@@ -1462,6 +1483,12 @@ void FrameView::repaintContentRectangle(const IntRect& r, bool immediate)
ScrollView::repaintContentRectangle(r, immediate);
}
+void FrameView::contentsResized()
+{
+ scrollAnimator()->contentsResized();
+ setNeedsLayout();
+}
+
void FrameView::visibleContentsResized()
{
// We check to make sure the view is attached to a frame() as this method can
@@ -1727,10 +1754,10 @@ void FrameView::unscheduleRelayout()
}
#if ENABLE(REQUEST_ANIMATION_FRAME)
-void FrameView::serviceScriptedAnimations()
+void FrameView::serviceScriptedAnimations(DOMTimeStamp time)
{
for (Frame* frame = m_frame.get(); frame; frame = frame->tree()->traverseNext())
- frame->document()->serviceScriptedAnimations();
+ frame->document()->serviceScriptedAnimations(time);
}
#endif
@@ -1854,11 +1881,11 @@ void FrameView::updateWidget(RenderEmbeddedObject* object)
// FIXME: This could turn into a real virtual dispatch if we defined
// updateWidget(bool) on HTMLElement.
if (ownerElement->hasTagName(objectTag) || ownerElement->hasTagName(embedTag))
- static_cast<HTMLPlugInImageElement*>(ownerElement)->updateWidget(false);
+ static_cast<HTMLPlugInImageElement*>(ownerElement)->updateWidget(CreateAnyWidgetType);
// FIXME: It is not clear that Media elements need or want this updateWidget() call.
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
else if (ownerElement->hasTagName(videoTag) || ownerElement->hasTagName(audioTag))
- static_cast<HTMLMediaElement*>(ownerElement)->updateWidget(false);
+ static_cast<HTMLMediaElement*>(ownerElement)->updateWidget(CreateAnyWidgetType);
#endif
else
ASSERT_NOT_REACHED();
@@ -1896,11 +1923,23 @@ bool FrameView::updateWidgets()
return m_widgetUpdateSet->isEmpty();
}
-
+
+void FrameView::flushAnyPendingPostLayoutTasks()
+{
+ if (!m_hasPendingPostLayoutTasks)
+ return;
+
+ m_postLayoutTasksTimer.stop();
+ performPostLayoutTasks();
+}
+
void FrameView::performPostLayoutTasks()
{
m_hasPendingPostLayoutTasks = false;
+ m_frame->selection()->setCaretRectNeedsUpdate();
+ m_frame->selection()->updateAppearance();
+
if (m_firstLayoutCallbackPending) {
m_firstLayoutCallbackPending = false;
m_frame->loader()->didFirstLayout();
@@ -2063,6 +2102,14 @@ IntRect FrameView::windowResizerRect() const
return page->chrome()->windowResizerRect();
}
+void FrameView::didCompleteRubberBand(const IntSize& initialOverhang) const
+{
+ Page* page = m_frame->page();
+ if (page->mainFrame() != m_frame)
+ return;
+ return page->chrome()->client()->didCompleteRubberBandForMainFrame(initialOverhang);
+}
+
#if ENABLE(DASHBOARD_SUPPORT)
void FrameView::updateDashboardRegions()
{
@@ -2169,7 +2216,7 @@ void FrameView::updateControlTints()
// to define when controls get the tint and to call this function when that changes.
// Optimize the common case where we bring a window to the front while it's still empty.
- if (!m_frame || m_frame->loader()->url().isEmpty())
+ if (!m_frame || m_frame->document()->url().isEmpty())
return;
if ((m_frame->contentRenderer() && m_frame->contentRenderer()->theme()->supportsControlTints()) || hasCustomScrollbars()) {
@@ -2305,6 +2352,23 @@ void FrameView::setNodeToDraw(Node* node)
m_nodeToDraw = node;
}
+void FrameView::paintOverhangAreas(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect)
+{
+ if (context->paintingDisabled())
+ return;
+
+ if (m_frame->document()->printing())
+ return;
+
+ Page* page = m_frame->page();
+ if (page->mainFrame() == m_frame) {
+ if (page->chrome()->client()->paintCustomOverhangArea(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect))
+ return;
+ }
+
+ return ScrollView::paintOverhangAreas(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect);
+}
+
void FrameView::updateLayoutAndStyleIfNeededRecursive()
{
// We have to crawl our entire tree looking for any FrameViews that need
@@ -2353,27 +2417,38 @@ void FrameView::forceLayoutForPagination(const FloatSize& pageSize, float maximu
// the state of things before and after the layout
RenderView *root = toRenderView(m_frame->document()->renderer());
if (root) {
- int pageW = ceilf(pageSize.width());
- root->setWidth(pageW);
- root->setPageLogicalHeight(pageSize.height());
+ float pageLogicalWidth = root->style()->isHorizontalWritingMode() ? pageSize.width() : pageSize.height();
+ float pageLogicalHeight = root->style()->isHorizontalWritingMode() ? pageSize.height() : pageSize.width();
+
+ int flooredPageLogicalWidth = static_cast<int>(pageLogicalWidth);
+ root->setLogicalWidth(flooredPageLogicalWidth);
+ root->setPageLogicalHeight(pageLogicalHeight);
root->setNeedsLayoutAndPrefWidthsRecalc();
forceLayout();
-
+
// If we don't fit in the given page width, we'll lay out again. If we don't fit in the
// page width when shrunk, we will lay out at maximum shrink and clip extra content.
// FIXME: We are assuming a shrink-to-fit printing implementation. A cropping
// implementation should not do this!
- int docWidth = root->docWidth();
- if (docWidth > pageSize.width()) {
- pageW = std::min<int>(docWidth, ceilf(pageSize.width() * maximumShrinkFactor));
- if (pageSize.height())
- root->setPageLogicalHeight(pageW / pageSize.width() * pageSize.height());
- root->setWidth(pageW);
+ int docLogicalWidth = root->style()->isHorizontalWritingMode() ? root->docWidth() : root->docHeight();
+ if (docLogicalWidth > pageLogicalWidth) {
+ flooredPageLogicalWidth = std::min<int>(docLogicalWidth, pageLogicalWidth * maximumShrinkFactor);
+ if (pageLogicalHeight)
+ root->setPageLogicalHeight(flooredPageLogicalWidth / pageSize.width() * pageSize.height());
+ root->setLogicalWidth(flooredPageLogicalWidth);
root->setNeedsLayoutAndPrefWidthsRecalc();
forceLayout();
- int docHeight = root->docHeight();
root->clearLayoutOverflow();
- root->addLayoutOverflow(IntRect(0, 0, pageW, docHeight)); // This is how we clip in case we overflow again.
+ int docLogicalHeight = root->style()->isHorizontalWritingMode() ? root->docHeight() : root->docWidth();
+ int docLogicalTop = root->style()->isHorizontalWritingMode() ? root->docTop() : root->docLeft();
+ int docLogicalRight = root->style()->isHorizontalWritingMode() ? root->docRight() : root->docBottom();
+ int clippedLogicalLeft = 0;
+ if (!root->style()->isLeftToRightDirection())
+ clippedLogicalLeft = docLogicalRight - flooredPageLogicalWidth;
+ IntRect overflow(clippedLogicalLeft, docLogicalTop, flooredPageLogicalWidth, docLogicalHeight);
+ if (!root->style()->isHorizontalWritingMode())
+ overflow = overflow.transposedRect();
+ root->addLayoutOverflow(overflow); // This is how we clip in case we overflow again.
}
}
@@ -2388,7 +2463,7 @@ void FrameView::adjustPageHeightDeprecated(float *newBottom, float oldTop, float
// Use a context with painting disabled.
GraphicsContext context((PlatformGraphicsContext*)0);
root->setTruncatedAt((int)floorf(oldBottom));
- IntRect dirtyRect(0, (int)floorf(oldTop), root->rightLayoutOverflow(), (int)ceilf(oldBottom - oldTop));
+ IntRect dirtyRect(0, (int)floorf(oldTop), root->maxXLayoutOverflow(), (int)ceilf(oldBottom - oldTop));
root->setPrintRect(dirtyRect);
root->layer()->paint(&context, dirtyRect);
*newBottom = root->bestTruncatedAt();
diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h
index e61099e..6c0ead2 100644
--- a/Source/WebCore/page/FrameView.h
+++ b/Source/WebCore/page/FrameView.h
@@ -45,6 +45,7 @@ class RenderLayer;
class RenderObject;
class RenderEmbeddedObject;
class RenderScrollbarPart;
+
struct ScheduledEvent;
template <typename T> class Timer;
@@ -101,7 +102,7 @@ public:
bool needsFullRepaint() const { return m_doFullRepaint; }
#if ENABLE(REQUEST_ANIMATION_FRAME)
- void serviceScriptedAnimations();
+ void serviceScriptedAnimations(DOMTimeStamp);
#endif
#if USE(ACCELERATED_COMPOSITING)
@@ -209,6 +210,8 @@ public:
bool isPainting() const;
void setNodeToDraw(Node*);
+ virtual void paintOverhangAreas(GraphicsContext*, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect);
+
static double currentPaintTimeStamp() { return sCurrentPaintTimeStamp; } // returns 0 if not painting
void updateLayoutAndStyleIfNeededRecursive();
@@ -261,6 +264,11 @@ public:
// On each repaint the delay increses by this amount
static void setRepaintThrottlingDeferredRepaintDelayIncrementDuringLoading(double p);
+ virtual IntPoint currentMousePosition() const;
+
+ // FIXME: Remove this method once plugin loading is decoupled from layout.
+ void flushAnyPendingPostLayoutTasks();
+
protected:
virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
virtual void scrollContentsSlowPath(const IntRect& updateRect);
@@ -291,7 +299,7 @@ private:
void performPostLayoutTasks();
virtual void repaintContentRectangle(const IntRect&, bool immediate);
- virtual void contentsResized() { setNeedsLayout(); }
+ virtual void contentsResized();
virtual void visibleContentsResized();
// Override ScrollView methods to do point conversion via renderers, in order to
@@ -305,8 +313,9 @@ private:
virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
virtual bool isActive() const;
virtual void getTickmarks(Vector<IntRect>&) const;
-
virtual void scrollTo(const IntSize&);
+ virtual void didCompleteRubberBand(const IntSize&) const;
+ virtual bool scrollbarWillRenderIntoCompositingLayer() const { return hasCompositedContent() || isEnclosedInCompositingLayer(); }
void deferredRepaintTimerFired(Timer<FrameView>*);
void doDeferredRepaints();
diff --git a/Source/WebCore/page/Location.cpp b/Source/WebCore/page/Location.cpp
index be185f9..4835a83 100644
--- a/Source/WebCore/page/Location.cpp
+++ b/Source/WebCore/page/Location.cpp
@@ -51,7 +51,7 @@ inline const KURL& Location::url() const
{
ASSERT(m_frame);
- const KURL& url = m_frame->loader()->url();
+ const KURL& url = m_frame->document()->url();
if (!url.isValid())
return blankURL(); // Use "about:blank" while the page is still loading (before we have a frame).
@@ -167,7 +167,7 @@ void Location::setProtocol(const String& protocol, DOMWindow* activeWindow, DOMW
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
if (!url.setProtocol(protocol)) {
ec = SYNTAX_ERR;
return;
@@ -179,7 +179,7 @@ void Location::setHost(const String& host, DOMWindow* activeWindow, DOMWindow* f
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
url.setHostAndPort(host);
m_frame->domWindow()->setLocation(url.string(), activeWindow, firstWindow);
}
@@ -188,7 +188,7 @@ void Location::setHostname(const String& hostname, DOMWindow* activeWindow, DOMW
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
url.setHost(hostname);
m_frame->domWindow()->setLocation(url.string(), activeWindow, firstWindow);
}
@@ -197,7 +197,7 @@ void Location::setPort(const String& portString, DOMWindow* activeWindow, DOMWin
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
int port = portString.toInt();
if (port < 0 || port > 0xFFFF)
url.removePort();
@@ -210,7 +210,7 @@ void Location::setPathname(const String& pathname, DOMWindow* activeWindow, DOMW
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
url.setPath(pathname);
m_frame->domWindow()->setLocation(url.string(), activeWindow, firstWindow);
}
@@ -219,7 +219,7 @@ void Location::setSearch(const String& search, DOMWindow* activeWindow, DOMWindo
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
url.setQuery(search);
m_frame->domWindow()->setLocation(url.string(), activeWindow, firstWindow);
}
@@ -228,7 +228,7 @@ void Location::setHash(const String& hash, DOMWindow* activeWindow, DOMWindow* f
{
if (!m_frame)
return;
- KURL url = m_frame->loader()->url();
+ KURL url = m_frame->document()->url();
String oldFragmentIdentifier = url.fragmentIdentifier();
String newFragmentIdentifier = hash;
if (hash[0] == '#')
@@ -268,7 +268,7 @@ void Location::reload(DOMWindow* activeWindow)
targetWindow->printErrorMessage(targetWindow->crossDomainAccessErrorMessage(activeWindow));
return;
}
- if (protocolIsJavaScript(m_frame->loader()->url()))
+ if (protocolIsJavaScript(m_frame->document()->url()))
return;
m_frame->navigationScheduler()->scheduleRefresh();
}
diff --git a/Source/WebCore/page/MemoryInfo.cpp b/Source/WebCore/page/MemoryInfo.cpp
index c2247b9..57dae2b 100644
--- a/Source/WebCore/page/MemoryInfo.cpp
+++ b/Source/WebCore/page/MemoryInfo.cpp
@@ -39,11 +39,12 @@ namespace WebCore {
MemoryInfo::MemoryInfo(Frame* frame)
: m_totalJSHeapSize(0),
- m_usedJSHeapSize(0)
+ m_usedJSHeapSize(0),
+ m_jsHeapSizeLimit(0)
{
if (frame && frame->settings() && frame->settings()->memoryInfoEnabled()) {
#if ENABLE(INSPECTOR)
- ScriptGCEvent::getHeapSize(m_usedJSHeapSize, m_totalJSHeapSize);
+ ScriptGCEvent::getHeapSize(m_usedJSHeapSize, m_totalJSHeapSize, m_jsHeapSizeLimit);
#endif
}
}
diff --git a/Source/WebCore/page/MemoryInfo.h b/Source/WebCore/page/MemoryInfo.h
index 615e952..27a7344 100644
--- a/Source/WebCore/page/MemoryInfo.h
+++ b/Source/WebCore/page/MemoryInfo.h
@@ -44,12 +44,14 @@ public:
size_t totalJSHeapSize() const { return m_totalJSHeapSize; }
size_t usedJSHeapSize() const { return m_usedJSHeapSize; }
+ size_t jsHeapSizeLimit() const { return m_jsHeapSizeLimit; }
private:
MemoryInfo(Frame*);
size_t m_totalJSHeapSize;
size_t m_usedJSHeapSize;
+ size_t m_jsHeapSizeLimit;
};
} // namespace WebCore
diff --git a/Source/WebCore/page/MemoryInfo.idl b/Source/WebCore/page/MemoryInfo.idl
index 59b0081..13965a5 100644
--- a/Source/WebCore/page/MemoryInfo.idl
+++ b/Source/WebCore/page/MemoryInfo.idl
@@ -34,6 +34,7 @@ module window {
readonly attribute unsigned long totalJSHeapSize;
readonly attribute unsigned long usedJSHeapSize;
+ readonly attribute [JSCCustomGetter] unsigned long jsHeapSizeLimit;
};
diff --git a/Source/WebCore/page/Navigator.cpp b/Source/WebCore/page/Navigator.cpp
index 5390fc9..53563b4 100644
--- a/Source/WebCore/page/Navigator.cpp
+++ b/Source/WebCore/page/Navigator.cpp
@@ -27,10 +27,12 @@
#include "CookieJar.h"
#include "DOMMimeTypeArray.h"
#include "DOMPluginArray.h"
+#include "ExceptionCode.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
#include "Geolocation.h"
+#include "KURL.h"
#include "Language.h"
#include "Page.h"
#include "PageGroup.h"
@@ -39,6 +41,7 @@
#include "ScriptController.h"
#include "Settings.h"
#include "StorageNamespace.h"
+#include <wtf/StdLibExtras.h>
#if PLATFORM(ANDROID)
#include "ApplicationInstalledCallback.h"
@@ -209,4 +212,67 @@ void Navigator::getStorageUpdates()
}
#endif
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+static bool verifyCustomHandlerURL(const String& baseURL, const String& url, ExceptionCode& ec)
+{
+ // The specification requires that it is a SYNTAX_ERR if the "%s" token is
+ // not present.
+ static const char token[] = "%s";
+ int index = url.find(token);
+ if (-1 == index) {
+ ec = SYNTAX_ERR;
+ return false;
+ }
+
+ // It is also a SYNTAX_ERR if the custom handler URL, as created by removing
+ // the "%s" token and prepending the base url, does not resolve.
+ String newURL = url;
+ newURL.remove(index, WTF_ARRAY_LENGTH(token) - 1);
+
+ KURL base(ParsedURLString, baseURL);
+ KURL kurl(base, newURL);
+
+ if (kurl.isEmpty() || !kurl.isValid()) {
+ ec = SYNTAX_ERR;
+ return false;
+ }
+
+ return true;
+}
+
+static bool verifyProtocolHandlerScheme(const String& scheme, ExceptionCode& ec)
+{
+ // It is a SECURITY_ERR for these schemes to be handled by a custom handler.
+ if (equalIgnoringCase(scheme, "http") || equalIgnoringCase(scheme, "https") || equalIgnoringCase(scheme, "file")) {
+ ec = SECURITY_ERR;
+ return false;
+ }
+ return true;
+}
+
+void Navigator::registerProtocolHandler(const String& scheme, const String& url, const String& title, ExceptionCode& ec)
+{
+ if (!verifyProtocolHandlerScheme(scheme, ec))
+ return;
+
+ if (!m_frame)
+ return;
+
+ Document* document = m_frame->document();
+ if (!document)
+ return;
+
+ String baseURL = document->baseURL().baseAsString();
+
+ if (!verifyCustomHandlerURL(baseURL, url, ec))
+ return;
+
+ Page* page = m_frame->page();
+ if (!page)
+ return;
+
+ page->chrome()->registerProtocolHandler(scheme, baseURL, url, m_frame->displayStringModifiedByEncoding(title));
+}
+#endif
+
} // namespace WebCore
diff --git a/Source/WebCore/page/Navigator.h b/Source/WebCore/page/Navigator.h
index e0801fe..f7dc543 100644
--- a/Source/WebCore/page/Navigator.h
+++ b/Source/WebCore/page/Navigator.h
@@ -42,6 +42,8 @@ class ApplicationInstalledCallback;
class Connection;
#endif
+typedef int ExceptionCode;
+
class Navigator : public NavigatorBase, public RefCounted<Navigator> {
public:
static PassRefPtr<Navigator> create(Frame* frame) { return adoptRef(new Navigator(frame)); }
@@ -77,6 +79,10 @@ public:
void getStorageUpdates();
#endif
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+ void registerProtocolHandler(const String& scheme, const String& url, const String& title, ExceptionCode&);
+#endif
+
private:
Navigator(Frame*);
Frame* m_frame;
diff --git a/Source/WebCore/page/Navigator.idl b/Source/WebCore/page/Navigator.idl
index 5699d86..b92ef4a 100644
--- a/Source/WebCore/page/Navigator.idl
+++ b/Source/WebCore/page/Navigator.idl
@@ -57,6 +57,11 @@ module window {
#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
void getStorageUpdates();
#endif
+
+#if defined(ENABLE_REGISTER_PROTOCOL_HANDLER) && ENABLE_REGISTER_PROTOCOL_HANDLER
+ void registerProtocolHandler(in DOMString scheme, in DOMString url, in DOMString title)
+ raises(DomException);
+#endif
};
}
diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp
index c4d5ca4..6ffea29 100644
--- a/Source/WebCore/page/Page.cpp
+++ b/Source/WebCore/page/Page.cpp
@@ -83,10 +83,6 @@
#include "StorageNamespace.h"
#endif
-#if ENABLE(JAVASCRIPT_DEBUGGER)
-#include "ScriptDebugServer.h"
-#endif
-
#if ENABLE(WML)
#include "WMLPageState.h"
#endif
@@ -198,10 +194,6 @@ Page::Page(const PageClients& pageClients)
m_pluginHalter->setPluginAllowedRunTime(m_settings->pluginAllowedRunTime());
}
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- ScriptDebugServer::shared().pageCreated(this);
-#endif
-
#ifndef NDEBUG
pageCounter.increment();
#endif
@@ -365,7 +357,7 @@ void Page::goToItem(HistoryItem* item, FrameLoadType type)
#if ENABLE(DATABASE)
// If we're navigating the history via a fragment on the same document, then we do not want to stop databases.
- const KURL& currentURL = m_mainFrame->loader()->url();
+ const KURL& currentURL = m_mainFrame->document()->url();
const KURL& newURL = item->url();
if (newURL.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(currentURL, newURL))
diff --git a/Source/WebCore/page/PrintContext.cpp b/Source/WebCore/page/PrintContext.cpp
index e82420d..da29f0e 100644
--- a/Source/WebCore/page/PrintContext.cpp
+++ b/Source/WebCore/page/PrintContext.cpp
@@ -55,16 +55,6 @@ PrintContext::~PrintContext()
end();
}
-size_t PrintContext::pageCount() const
-{
- return m_pageRects.size();
-}
-
-const IntRect& PrintContext::pageRect(size_t pageNumber) const
-{
- return m_pageRects[pageNumber];
-}
-
void PrintContext::computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight, bool allowHorizontalTiling)
{
m_pageRects.clear();
@@ -80,10 +70,20 @@ void PrintContext::computePageRects(const FloatRect& printRect, float headerHeig
RenderView* view = toRenderView(m_frame->document()->renderer());
- float ratio = printRect.height() / printRect.width();
+ bool isHorizontal = view->style()->isHorizontalWritingMode();
+
+ float pageWidth;
+ float pageHeight;
+ if (isHorizontal) {
+ float ratio = printRect.height() / printRect.width();
+ pageWidth = view->docWidth();
+ pageHeight = floorf(pageWidth * ratio);
+ } else {
+ float ratio = printRect.width() / printRect.height();
+ pageHeight = view->docHeight();
+ pageWidth = floorf(pageHeight * ratio);
+ }
- float pageWidth = view->docWidth();
- float pageHeight = floorf(pageWidth * ratio);
outPageHeight = pageHeight; // this is the height of the page adjusted by margins
pageHeight -= headerHeight + footerHeight;
@@ -101,7 +101,7 @@ void PrintContext::computePageRectsWithPageSize(const FloatSize& pageSizeInPixel
computePageRectsWithPageSizeInternal(pageSizeInPixels, allowHorizontalTiling);
}
-void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling)
+void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowInlineDirectionTiling)
{
if (!m_frame->document() || !m_frame->view() || !m_frame->document()->renderer())
return;
@@ -113,13 +113,60 @@ void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz
int pageWidth = pageSizeInPixels.width();
int pageHeight = pageSizeInPixels.height();
- unsigned pageCount = ceilf((float)docRect.height() / pageHeight);
+ bool isHorizontal = view->style()->isHorizontalWritingMode();
+
+ int docLogicalHeight = isHorizontal ? docRect.height() : docRect.width();
+ int pageLogicalHeight = isHorizontal ? pageHeight : pageWidth;
+ int pageLogicalWidth = isHorizontal ? pageWidth : pageHeight;
+
+ int inlineDirectionStart;
+ int inlineDirectionEnd;
+ int blockDirectionStart;
+ int blockDirectionEnd;
+ if (isHorizontal) {
+ if (view->style()->isFlippedBlocksWritingMode()) {
+ blockDirectionStart = docRect.maxY();
+ blockDirectionEnd = docRect.y();
+ } else {
+ blockDirectionStart = docRect.y();
+ blockDirectionEnd = docRect.maxY();
+ }
+ inlineDirectionStart = view->style()->isLeftToRightDirection() ? docRect.x() : docRect.maxX();
+ inlineDirectionEnd = view->style()->isLeftToRightDirection() ? docRect.maxX() : docRect.x();
+ } else {
+ if (view->style()->isFlippedBlocksWritingMode()) {
+ blockDirectionStart = docRect.maxX();
+ blockDirectionEnd = docRect.x();
+ } else {
+ blockDirectionStart = docRect.x();
+ blockDirectionEnd = docRect.maxX();
+ }
+ inlineDirectionStart = view->style()->isLeftToRightDirection() ? docRect.y() : docRect.maxY();
+ inlineDirectionEnd = view->style()->isLeftToRightDirection() ? docRect.maxY() : docRect.y();
+ }
+
+ unsigned pageCount = ceilf((float)docLogicalHeight / pageLogicalHeight);
for (unsigned i = 0; i < pageCount; ++i) {
- if (allowHorizontalTiling) {
- for (int currentX = docRect.x(); currentX < docRect.right(); currentX += pageWidth)
- m_pageRects.append(IntRect(currentX, docRect.y() + i * pageHeight, pageWidth, pageHeight));
- } else
- m_pageRects.append(IntRect(docRect.x(), docRect.y() + i * pageHeight, pageWidth, pageHeight));
+ int pageLogicalTop = blockDirectionEnd > blockDirectionStart ?
+ blockDirectionStart + i * pageLogicalHeight :
+ blockDirectionStart - (i + 1) * pageLogicalHeight;
+ if (allowInlineDirectionTiling) {
+ for (int currentInlinePosition = inlineDirectionStart;
+ inlineDirectionEnd > inlineDirectionStart ? currentInlinePosition < inlineDirectionEnd : currentInlinePosition > inlineDirectionEnd;
+ currentInlinePosition += (inlineDirectionEnd > inlineDirectionStart ? pageLogicalWidth : -pageLogicalWidth)) {
+ int pageLogicalLeft = inlineDirectionEnd > inlineDirectionStart ? currentInlinePosition : currentInlinePosition - pageLogicalWidth;
+ IntRect pageRect(pageLogicalLeft, pageLogicalTop, pageLogicalWidth, pageLogicalHeight);
+ if (!isHorizontal)
+ pageRect = pageRect.transposedRect();
+ m_pageRects.append(pageRect);
+ }
+ } else {
+ int pageLogicalLeft = inlineDirectionEnd > inlineDirectionStart ? inlineDirectionStart : inlineDirectionStart - pageLogicalWidth;
+ IntRect pageRect(pageLogicalLeft, pageLogicalTop, pageLogicalWidth, pageLogicalHeight);
+ if (!isHorizontal)
+ pageRect = pageRect.transposedRect();
+ m_pageRects.append(pageRect);
+ }
}
}
@@ -135,22 +182,27 @@ void PrintContext::begin(float width, float height)
m_frame->setPrinting(true, FloatSize(minLayoutWidth, minLayoutHeight), printingMaximumShrinkFactor / printingMinimumShrinkFactor, Frame::AdjustViewSize);
}
-float PrintContext::computeAutomaticScaleFactor(float availablePaperWidth)
+float PrintContext::computeAutomaticScaleFactor(const FloatSize& availablePaperSize)
{
if (!m_frame->view())
return 1;
- float viewWidth = m_frame->view()->contentsWidth();
- if (viewWidth < 1)
+ bool useViewWidth = true;
+ if (m_frame->document() && m_frame->document()->renderView())
+ useViewWidth = m_frame->document()->renderView()->style()->isHorizontalWritingMode();
+
+ float viewLogicalWidth = useViewWidth ? m_frame->view()->contentsWidth() : m_frame->view()->contentsHeight();
+ if (viewLogicalWidth < 1)
return 1;
float maxShrinkToFitScaleFactor = 1 / printingMaximumShrinkFactor;
- float shrinkToFitScaleFactor = availablePaperWidth / viewWidth;
+ float shrinkToFitScaleFactor = (useViewWidth ? availablePaperSize.width() : availablePaperSize.height()) / viewLogicalWidth;
return max(maxShrinkToFitScaleFactor, shrinkToFitScaleFactor);
}
void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width)
{
+ // FIXME: Not correct for vertical text.
IntRect pageRect = m_pageRects[pageNumber];
float scale = width / pageRect.width();
@@ -164,9 +216,9 @@ void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width)
void PrintContext::spoolRect(GraphicsContext& ctx, const IntRect& rect)
{
+ // FIXME: Not correct for vertical text.
ctx.save();
- ctx.scale(FloatSize(1, -1));
- ctx.translate(0, -rect.height());
+ ctx.translate(-rect.x(), -rect.y());
ctx.clip(rect);
m_frame->view()->paintContents(&ctx, rect);
ctx.restore();
@@ -212,7 +264,7 @@ int PrintContext::pageNumberForElement(Element* element, const FloatSize& pageSi
size_t pageNumber = 0;
for (; pageNumber < printContext.pageCount(); pageNumber++) {
const IntRect& page = printContext.pageRect(pageNumber);
- if (page.x() <= left && left < page.right() && page.y() <= top && top < page.bottom())
+ if (page.x() <= left && left < page.maxX() && page.y() <= top && top < page.maxY())
return pageNumber;
}
return -1;
diff --git a/Source/WebCore/page/PrintContext.h b/Source/WebCore/page/PrintContext.h
index ce2554a..873937a 100644
--- a/Source/WebCore/page/PrintContext.h
+++ b/Source/WebCore/page/PrintContext.h
@@ -50,11 +50,11 @@ public:
void computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling);
// These are only valid after page rects are computed.
- size_t pageCount() const;
- const IntRect& pageRect(size_t pageNumber) const;
+ size_t pageCount() const { return m_pageRects.size(); }
+ const IntRect& pageRect(size_t pageNumber) const { return m_pageRects[pageNumber]; }
const Vector<IntRect>& pageRects() const { return m_pageRects; }
- float computeAutomaticScaleFactor(float availablePaperWidth);
+ float computeAutomaticScaleFactor(const FloatSize& availablePaperSize);
// Enter print mode, updating layout for new page size.
// This function can be called multiple times to apply new print options without going back to screen mode.
diff --git a/Source/WebCore/page/SecurityOrigin.cpp b/Source/WebCore/page/SecurityOrigin.cpp
index 789fdf9..977e860 100644
--- a/Source/WebCore/page/SecurityOrigin.cpp
+++ b/Source/WebCore/page/SecurityOrigin.cpp
@@ -79,6 +79,18 @@ SecurityOrigin::SecurityOrigin(const KURL& url, SandboxFlags sandboxFlags)
if (m_protocol == "about" || m_protocol == "javascript")
m_protocol = "";
+#if ENABLE(FILE_SYSTEM)
+ if (m_protocol == "filesystem") {
+ KURL originURL(ParsedURLString, url.path());
+ if (originURL.isValid()) {
+ m_protocol = originURL.protocol().lower();
+ m_host = originURL.host().lower();
+ m_port = originURL.port();
+ } else
+ m_isUnique = true;
+ }
+#endif
+
// For edge case URLs that were probably misparsed, make sure that the origin is unique.
if (schemeRequiresAuthority(m_protocol) && m_host.isEmpty())
m_isUnique = true;
@@ -178,6 +190,9 @@ bool SecurityOrigin::canAccess(const SecurityOrigin* other) const
if (m_universalAccess)
return true;
+ if (this == other)
+ return true;
+
if (isUnique() || other->isUnique())
return false;
@@ -310,11 +325,8 @@ bool SecurityOrigin::canDisplay(const KURL& url) const
{
String protocol = url.protocol().lower();
-#if ENABLE(BLOB)
- // FIXME: We should generalize this check.
- if (protocol == BlobURL::blobProtocol())
+ if (SchemeRegistry::canDisplayOnlyIfCanRequest(protocol))
return canRequest(url);
-#endif
if (SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(protocol))
return m_protocol == protocol || isAccessToURLWhiteListed(url);
diff --git a/Source/WebCore/page/Settings.cpp b/Source/WebCore/page/Settings.cpp
index a88ca6b..49180f5 100644
--- a/Source/WebCore/page/Settings.cpp
+++ b/Source/WebCore/page/Settings.cpp
@@ -168,6 +168,7 @@ Settings::Settings(Page* page)
, m_showRepaintCounter(false)
, m_experimentalNotificationsEnabled(false)
, m_webGLEnabled(false)
+ , m_openGLMultisamplingEnabled(true)
, m_webAudioEnabled(false)
, m_acceleratedCanvas2dEnabled(false)
, m_loadDeferringEnabled(true)
@@ -712,10 +713,12 @@ void Settings::setFrameFlatteningEnabled(bool frameFlatteningEnabled)
m_frameFlatteningEnabled = frameFlatteningEnabled;
}
+#if ENABLE(WEB_ARCHIVE)
void Settings::setWebArchiveDebugModeEnabled(bool enabled)
{
m_webArchiveDebugModeEnabled = enabled;
}
+#endif
void Settings::setLocalFileContentSniffingEnabled(bool enabled)
{
@@ -868,6 +871,11 @@ void Settings::setWebGLEnabled(bool enabled)
m_webGLEnabled = enabled;
}
+void Settings::setOpenGLMultisamplingEnabled(bool enabled)
+{
+ m_openGLMultisamplingEnabled = enabled;
+}
+
void Settings::setAccelerated2dCanvasEnabled(bool enabled)
{
m_acceleratedCanvas2dEnabled = enabled;
diff --git a/Source/WebCore/page/Settings.h b/Source/WebCore/page/Settings.h
index 9f0982a..3b06834 100644
--- a/Source/WebCore/page/Settings.h
+++ b/Source/WebCore/page/Settings.h
@@ -302,9 +302,11 @@ namespace WebCore {
void setNeedsSiteSpecificQuirks(bool);
bool needsSiteSpecificQuirks() const { return m_needsSiteSpecificQuirks; }
-
+
+#if ENABLE(WEB_ARCHIVE)
void setWebArchiveDebugModeEnabled(bool);
bool webArchiveDebugModeEnabled() const { return m_webArchiveDebugModeEnabled; }
+#endif
void setLocalFileContentSniffingEnabled(bool);
bool localFileContentSniffingEnabled() const { return m_localFileContentSniffingEnabled; }
@@ -386,6 +388,9 @@ namespace WebCore {
void setWebGLEnabled(bool);
bool webGLEnabled() const { return m_webGLEnabled; }
+ void setOpenGLMultisamplingEnabled(bool);
+ bool openGLMultisamplingEnabled() const { return m_openGLMultisamplingEnabled; }
+
void setAccelerated2dCanvasEnabled(bool);
bool accelerated2dCanvasEnabled() const { return m_acceleratedCanvas2dEnabled; }
@@ -548,6 +553,7 @@ namespace WebCore {
bool m_showRepaintCounter : 1;
bool m_experimentalNotificationsEnabled : 1;
bool m_webGLEnabled : 1;
+ bool m_openGLMultisamplingEnabled : 1;
bool m_webAudioEnabled : 1;
bool m_acceleratedCanvas2dEnabled : 1;
bool m_loadDeferringEnabled : 1;
diff --git a/Source/WebCore/page/SpatialNavigation.cpp b/Source/WebCore/page/SpatialNavigation.cpp
index 7d8ede3..34a2c97 100644
--- a/Source/WebCore/page/SpatialNavigation.cpp
+++ b/Source/WebCore/page/SpatialNavigation.cpp
@@ -127,7 +127,7 @@ static inline int middle(FocusDirection direction, const IntRect& rect)
static inline int end(FocusDirection direction, const IntRect& rect)
{
- return isHorizontalMove(direction) ? rect.bottom() : rect.right();
+ return isHorizontalMove(direction) ? rect.maxY() : rect.maxX();
}
// This method checks if rects |a| and |b| are fully aligned either vertically or
@@ -144,11 +144,11 @@ static bool areRectsFullyAligned(FocusDirection direction, const IntRect& a, con
switch (direction) {
case FocusDirectionLeft:
aStart = a.x();
- bEnd = b.right();
+ bEnd = b.maxX();
break;
case FocusDirectionRight:
aStart = b.x();
- bEnd = a.right();
+ bEnd = a.maxX();
break;
case FocusDirectionUp:
aStart = a.y();
@@ -245,13 +245,13 @@ static bool areRectsMoreThanFullScreenApart(FocusDirection direction, const IntR
switch (direction) {
case FocusDirectionLeft:
- return curRect.x() - targetRect.right() > viewSize.width();
+ return curRect.x() - targetRect.maxX() > viewSize.width();
case FocusDirectionRight:
- return targetRect.x() - curRect.right() > viewSize.width();
+ return targetRect.x() - curRect.maxX() > viewSize.width();
case FocusDirectionUp:
- return curRect.y() - targetRect.bottom() > viewSize.height();
+ return curRect.y() - targetRect.maxY() > viewSize.height();
case FocusDirectionDown:
- return targetRect.y() - curRect.bottom() > viewSize.height();
+ return targetRect.y() - curRect.maxY() > viewSize.height();
default:
ASSERT_NOT_REACHED();
return true;
@@ -261,26 +261,26 @@ static bool areRectsMoreThanFullScreenApart(FocusDirection direction, const IntR
// Return true if rect |a| is below |b|. False otherwise.
static inline bool below(const IntRect& a, const IntRect& b)
{
- return a.y() > b.bottom();
+ return a.y() > b.maxY();
}
// Return true if rect |a| is on the right of |b|. False otherwise.
static inline bool rightOf(const IntRect& a, const IntRect& b)
{
- return a.x() > b.right();
+ return a.x() > b.maxX();
}
static bool isRectInDirection(FocusDirection direction, const IntRect& curRect, const IntRect& targetRect)
{
switch (direction) {
case FocusDirectionLeft:
- return targetRect.right() <= curRect.x();
+ return targetRect.maxX() <= curRect.x();
case FocusDirectionRight:
- return targetRect.x() >= curRect.right();
+ return targetRect.x() >= curRect.maxX();
case FocusDirectionUp:
- return targetRect.bottom() <= curRect.y();
+ return targetRect.maxY() <= curRect.y();
case FocusDirectionDown:
- return targetRect.y() >= curRect.bottom();
+ return targetRect.y() >= curRect.maxY();
default:
ASSERT_NOT_REACHED();
return false;
@@ -544,18 +544,18 @@ void entryAndExitPointsForDirection(FocusDirection direction, const IntRect& sta
switch (direction) {
case FocusDirectionLeft:
exitPoint.setX(startingRect.x());
- entryPoint.setX(potentialRect.right());
+ entryPoint.setX(potentialRect.maxX());
break;
case FocusDirectionUp:
exitPoint.setY(startingRect.y());
- entryPoint.setY(potentialRect.bottom());
+ entryPoint.setY(potentialRect.maxY());
break;
case FocusDirectionRight:
- exitPoint.setX(startingRect.right());
+ exitPoint.setX(startingRect.maxX());
entryPoint.setX(potentialRect.x());
break;
case FocusDirectionDown:
- exitPoint.setY(startingRect.bottom());
+ exitPoint.setY(startingRect.maxY());
entryPoint.setY(potentialRect.y());
break;
default:
@@ -567,9 +567,9 @@ void entryAndExitPointsForDirection(FocusDirection direction, const IntRect& sta
case FocusDirectionRight:
if (below(startingRect, potentialRect)) {
exitPoint.setY(startingRect.y());
- entryPoint.setY(potentialRect.bottom());
+ entryPoint.setY(potentialRect.maxY());
} else if (below(potentialRect, startingRect)) {
- exitPoint.setY(startingRect.bottom());
+ exitPoint.setY(startingRect.maxY());
entryPoint.setY(potentialRect.y());
} else {
exitPoint.setY(max(startingRect.y(), potentialRect.y()));
@@ -580,9 +580,9 @@ void entryAndExitPointsForDirection(FocusDirection direction, const IntRect& sta
case FocusDirectionDown:
if (rightOf(startingRect, potentialRect)) {
exitPoint.setX(startingRect.x());
- entryPoint.setX(potentialRect.right());
+ entryPoint.setX(potentialRect.maxX());
} else if (rightOf(potentialRect, startingRect)) {
- exitPoint.setX(startingRect.right());
+ exitPoint.setX(startingRect.maxX());
entryPoint.setX(potentialRect.x());
} else {
exitPoint.setX(max(startingRect.x(), potentialRect.x()));
@@ -675,11 +675,11 @@ IntRect virtualRectForDirection(FocusDirection direction, const IntRect& startin
IntRect virtualStartingRect = startingRect;
switch (direction) {
case FocusDirectionLeft:
- virtualStartingRect.setX(virtualStartingRect.right() - width);
+ virtualStartingRect.setX(virtualStartingRect.maxX() - width);
virtualStartingRect.setWidth(width);
break;
case FocusDirectionUp:
- virtualStartingRect.setY(virtualStartingRect.bottom() - width);
+ virtualStartingRect.setY(virtualStartingRect.maxY() - width);
virtualStartingRect.setHeight(width);
break;
case FocusDirectionRight:
@@ -701,7 +701,7 @@ IntRect virtualRectForAreaElementAndDirection(HTMLAreaElement* area, FocusDirect
ASSERT(area->imageElement());
// Area elements tend to overlap more than other focusable elements. We flatten the rect of the area elements
// to minimize the effect of overlapping areas.
- IntRect rect = virtualRectForDirection(direction, rectToAbsoluteCoordinates(area->document()->frame(), area->getRect(area->imageElement()->renderer())), 1);
+ IntRect rect = virtualRectForDirection(direction, rectToAbsoluteCoordinates(area->document()->frame(), area->computeRect(area->imageElement()->renderer())), 1);
return rect;
}
diff --git a/Source/WebCore/page/SuspendableTimer.cpp b/Source/WebCore/page/SuspendableTimer.cpp
index 23f00b0..2a4d2e5 100644
--- a/Source/WebCore/page/SuspendableTimer.cpp
+++ b/Source/WebCore/page/SuspendableTimer.cpp
@@ -36,6 +36,7 @@ SuspendableTimer::SuspendableTimer(ScriptExecutionContext* context)
, m_nextFireInterval(0)
, m_repeatInterval(0)
#if !ASSERT_DISABLED
+ , m_active(false)
, m_suspended(false)
#endif
{
@@ -61,9 +62,12 @@ void SuspendableTimer::suspend(ReasonForSuspension)
ASSERT(!m_suspended);
m_suspended = true;
#endif
- m_nextFireInterval = nextFireInterval();
- m_repeatInterval = repeatInterval();
- TimerBase::stop();
+ m_active = isActive();
+ if (m_active) {
+ m_nextFireInterval = nextFireInterval();
+ m_repeatInterval = repeatInterval();
+ TimerBase::stop();
+ }
}
void SuspendableTimer::resume()
@@ -72,7 +76,8 @@ void SuspendableTimer::resume()
ASSERT(m_suspended);
m_suspended = false;
#endif
- start(m_nextFireInterval, m_repeatInterval);
+ if (m_active)
+ start(m_nextFireInterval, m_repeatInterval);
}
bool SuspendableTimer::canSuspend() const
diff --git a/Source/WebCore/page/SuspendableTimer.h b/Source/WebCore/page/SuspendableTimer.h
index cc90b62..fa03d6e 100644
--- a/Source/WebCore/page/SuspendableTimer.h
+++ b/Source/WebCore/page/SuspendableTimer.h
@@ -34,7 +34,7 @@ namespace WebCore {
class SuspendableTimer : public TimerBase, public ActiveDOMObject {
public:
- SuspendableTimer(ScriptExecutionContext*);
+ explicit SuspendableTimer(ScriptExecutionContext*);
virtual ~SuspendableTimer();
// ActiveDOMObject
@@ -49,6 +49,7 @@ private:
double m_nextFireInterval;
double m_repeatInterval;
+ bool m_active;
#if !ASSERT_DISABLED
bool m_suspended;
#endif
diff --git a/Source/WebCore/page/WindowFeatures.cpp b/Source/WebCore/page/WindowFeatures.cpp
index a229ae1..7564152 100644
--- a/Source/WebCore/page/WindowFeatures.cpp
+++ b/Source/WebCore/page/WindowFeatures.cpp
@@ -186,9 +186,9 @@ WindowFeatures::WindowFeatures(const String& dialogFeaturesString, const FloatRe
width = floatFeature(features, "dialogwidth", 100, screenAvailableRect.width(), 620); // default here came from frame size of dialog in MacIE
height = floatFeature(features, "dialogheight", 100, screenAvailableRect.height(), 450); // default here came from frame size of dialog in MacIE
- x = floatFeature(features, "dialogleft", screenAvailableRect.x(), screenAvailableRect.right() - width, -1);
+ x = floatFeature(features, "dialogleft", screenAvailableRect.x(), screenAvailableRect.maxX() - width, -1);
xSet = x > 0;
- y = floatFeature(features, "dialogtop", screenAvailableRect.y(), screenAvailableRect.bottom() - height, -1);
+ y = floatFeature(features, "dialogtop", screenAvailableRect.y(), screenAvailableRect.maxY() - height, -1);
ySet = y > 0;
if (boolFeature(features, "center", true)) {
diff --git a/Source/WebCore/page/XSSAuditor.cpp b/Source/WebCore/page/XSSAuditor.cpp
deleted file mode 100644
index 1b0e83f..0000000
--- a/Source/WebCore/page/XSSAuditor.cpp
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Daniel Bates (dbates@intudata.com)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "XSSAuditor.h"
-
-#include <wtf/StdLibExtras.h>
-#include <wtf/Vector.h>
-
-#include "Console.h"
-#include "DocumentLoader.h"
-#include "DOMWindow.h"
-#include "Frame.h"
-#include "HTMLEntityParser.h"
-#include "KURL.h"
-#include "ResourceResponseBase.h"
-#include "ScriptSourceCode.h"
-#include "Settings.h"
-#include "TextResourceDecoder.h"
-#include <wtf/text/CString.h>
-#include <wtf/text/StringConcatenate.h>
-
-namespace WebCore {
-
-static bool isNonCanonicalCharacter(UChar c)
-{
- // We remove all non-ASCII characters, including non-printable ASCII characters.
- //
- // Note, we don't remove backslashes like PHP stripslashes(), which among other things converts "\\0" to the \0 character.
- // Instead, we remove backslashes and zeros (since the string "\\0" =(remove backslashes)=> "0"). However, this has the
- // adverse effect that we remove any legitimate zeros from a string.
- //
- // For instance: new String("http://localhost:8000") => new String("http://localhost:8").
- return (c == '\\' || c == '0' || c < ' ' || c >= 127);
-}
-
-static bool isIllegalURICharacter(UChar c)
-{
- // The characters described in section 2.4.3 of RFC 2396 <http://www.faqs.org/rfcs/rfc2396.html> in addition to the
- // single quote character "'" are considered illegal URI characters. That is, the following characters cannot appear
- // in a valid URI: ', ", <, >
- //
- // If the request does not contain these characters then we can assume that no inline scripts have been injected
- // into the response page, because it is impossible to write an inline script of the form <script>...</script>
- // without "<", ">".
- return (c == '\'' || c == '"' || c == '<' || c == '>');
-}
-
-String XSSAuditor::CachingURLCanonicalizer::canonicalizeURL(FormData* formData, const TextEncoding& encoding, bool decodeEntities,
- bool decodeURLEscapeSequencesTwice)
-{
- if (decodeEntities == m_decodeEntities && decodeURLEscapeSequencesTwice == m_decodeURLEscapeSequencesTwice
- && encoding == m_encoding && formData == m_formData)
- return m_cachedCanonicalizedURL;
- m_formData = formData;
- return canonicalizeURL(formData->flattenToString(), encoding, decodeEntities, decodeURLEscapeSequencesTwice);
-}
-
-String XSSAuditor::CachingURLCanonicalizer::canonicalizeURL(const String& url, const TextEncoding& encoding, bool decodeEntities,
- bool decodeURLEscapeSequencesTwice)
-{
- if (decodeEntities == m_decodeEntities && decodeURLEscapeSequencesTwice == m_decodeURLEscapeSequencesTwice
- && encoding == m_encoding && url == m_inputURL)
- return m_cachedCanonicalizedURL;
-
- m_cachedCanonicalizedURL = canonicalize(decodeURL(url, encoding, decodeEntities, decodeURLEscapeSequencesTwice));
- m_inputURL = url;
- m_encoding = encoding;
- m_decodeEntities = decodeEntities;
- m_decodeURLEscapeSequencesTwice = decodeURLEscapeSequencesTwice;
- ++m_generation;
- return m_cachedCanonicalizedURL;
-}
-
-void XSSAuditor::CachingURLCanonicalizer::clear()
-{
- m_formData.clear();
- m_inputURL = String();
-}
-
-XSSAuditor::XSSAuditor(Frame* frame)
- : m_frame(frame)
- , m_generationOfSuffixTree(-1)
-{
-}
-
-XSSAuditor::~XSSAuditor()
-{
-}
-
-bool XSSAuditor::isEnabled() const
-{
- Settings* settings = m_frame->settings();
- return (settings && settings->xssAuditorEnabled());
-}
-
-bool XSSAuditor::canEvaluate(const String& code) const
-{
- if (!isEnabled())
- return true;
-
- FindTask task;
- task.string = code;
- task.decodeEntities = false;
- task.allowRequestIfNoIllegalURICharacters = true;
-
- if (findInRequest(task)) {
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to execute a JavaScript script. Source code of script found within request.\n"));
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-bool XSSAuditor::canEvaluateJavaScriptURL(const String& code) const
-{
- if (!isEnabled())
- return true;
-
- FindTask task;
- task.string = code;
- task.decodeURLEscapeSequencesTwice = true;
-
- if (findInRequest(task)) {
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to execute a JavaScript script. Source code of script found within request.\n"));
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-bool XSSAuditor::canCreateInlineEventListener(const String&, const String& code) const
-{
- if (!isEnabled())
- return true;
-
- FindTask task;
- task.string = code;
- task.allowRequestIfNoIllegalURICharacters = true;
-
- if (findInRequest(task)) {
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to execute a JavaScript script. Source code of script found within request.\n"));
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-bool XSSAuditor::canLoadExternalScriptFromSrc(const String& url) const
-{
- if (!isEnabled())
- return true;
-
- if (isSameOriginResource(url))
- return true;
-
- FindTask task;
- task.string = url;
- task.allowRequestIfNoIllegalURICharacters = true;
-
- if (findInRequest(task)) {
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to execute a JavaScript script. Source code of script found within request.\n"));
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-bool XSSAuditor::canLoadObject(const String& url) const
-{
- if (!isEnabled())
- return true;
-
- if (isSameOriginResource(url))
- return true;
-
- FindTask task;
- task.string = url;
- task.allowRequestIfNoIllegalURICharacters = true;
-
- if (findInRequest(task)) {
- String consoleMessage = makeString("Refused to load an object. URL found within request: \"", url, "\".\n");
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-bool XSSAuditor::canSetBaseElementURL(const String& url) const
-{
- if (!isEnabled())
- return true;
-
- if (isSameOriginResource(url))
- return true;
-
- FindTask task;
- task.string = url;
- task.allowRequestIfNoIllegalURICharacters = true;
-
- if (findInRequest(task)) {
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to load from document base URL. URL found within request.\n"));
- m_frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage, 1, String());
- return false;
- }
- return true;
-}
-
-String XSSAuditor::canonicalize(const String& string)
-{
- String result = decodeHTMLEntities(string);
- return result.removeCharacters(&isNonCanonicalCharacter);
-}
-
-String XSSAuditor::decodeURL(const String& string, const TextEncoding& encoding, bool decodeEntities, bool decodeURLEscapeSequencesTwice)
-{
- String result;
- String url = string;
-
- url.replace('+', ' ');
- result = decodeURLEscapeSequences(url);
- CString utf8Url = result.utf8();
- String decodedResult = encoding.decode(utf8Url.data(), utf8Url.length());
- if (!decodedResult.isEmpty())
- result = decodedResult;
- if (decodeURLEscapeSequencesTwice) {
- result = decodeURLEscapeSequences(result);
- utf8Url = result.utf8();
- decodedResult = encoding.decode(utf8Url.data(), utf8Url.length());
- if (!decodedResult.isEmpty())
- result = decodedResult;
- }
- if (decodeEntities)
- result = decodeHTMLEntities(result);
- return result;
-}
-
-String XSSAuditor::decodeHTMLEntities(const String& string, bool leaveUndecodableEntitiesUntouched)
-{
- SegmentedString source(string);
- SegmentedString sourceShadow;
- Vector<UChar> result;
-
- while (!source.isEmpty()) {
- UChar cc = *source;
- source.advance();
-
- if (cc != '&') {
- result.append(cc);
- continue;
- }
-
- if (leaveUndecodableEntitiesUntouched)
- sourceShadow = source;
- bool notEnoughCharacters = false;
- Vector<UChar, 16> decodedEntity;
- bool success = consumeHTMLEntity(source, decodedEntity, notEnoughCharacters);
- // We ignore notEnoughCharacters because we might as well use this loop
- // to copy the remaining characters into |result|.
- if (!success || (!leaveUndecodableEntitiesUntouched && decodedEntity.size() == 1 && decodedEntity[0] == 0xFFFD)) {
- result.append('&');
- if (leaveUndecodableEntitiesUntouched)
- source = sourceShadow;
- } else {
- Vector<UChar>::const_iterator iter = decodedEntity.begin();
- for (; iter != decodedEntity.end(); ++iter)
- result.append(*iter);
- }
- }
-
- return String::adopt(result);
-}
-
-bool XSSAuditor::isSameOriginResource(const String& url) const
-{
- // If the resource is loaded from the same URL as the enclosing page, it's
- // probably not an XSS attack, so we reduce false positives by allowing the
- // request. If the resource has a query string, we're more suspicious,
- // however, because that's pretty rare and the attacker might be able to
- // trick a server-side script into doing something dangerous with the query
- // string.
- KURL resourceURL(m_frame->document()->url(), url);
- return (m_frame->document()->url().host() == resourceURL.host() && resourceURL.query().isEmpty());
-}
-
-XSSProtectionDisposition XSSAuditor::xssProtection() const
-{
- DEFINE_STATIC_LOCAL(String, XSSProtectionHeader, ("X-XSS-Protection"));
-
- Frame* frame = m_frame;
- if (frame->document()->url() == blankURL())
- frame = m_frame->tree()->parent();
-
- return parseXSSProtectionHeader(frame->loader()->documentLoader()->response().httpHeaderField(XSSProtectionHeader));
-}
-
-bool XSSAuditor::findInRequest(const FindTask& task) const
-{
- bool result = false;
- Frame* parentFrame = m_frame->tree()->parent();
- Frame* blockFrame = parentFrame;
- if (parentFrame && m_frame->document()->url() == blankURL())
- result = findInRequest(parentFrame, task);
- if (!result) {
- result = findInRequest(m_frame, task);
- blockFrame = m_frame;
- }
- if (!result)
- return false;
-
- switch (xssProtection()) {
- case XSSProtectionDisabled:
- return false;
- case XSSProtectionEnabled:
- break;
- case XSSProtectionBlockEnabled:
- if (blockFrame) {
- blockFrame->loader()->stopAllLoaders();
- blockFrame->navigationScheduler()->scheduleLocationChange(blockFrame->document()->securityOrigin(), blankURL(), String());
- }
- break;
- default:
- ASSERT_NOT_REACHED();
- }
- return true;
-}
-
-bool XSSAuditor::findInRequest(Frame* frame, const FindTask& task) const
-{
- ASSERT(frame->document());
-
- if (!frame->document()->decoder()) {
- // Note, JavaScript URLs do not have a charset.
- return false;
- }
-
- if (task.string.isEmpty())
- return false;
-
- DocumentLoader *documentLoader = frame->loader()->documentLoader();
- if (!documentLoader)
- return false;
-
- FormData* formDataObj = documentLoader->originalRequest().httpBody();
- const bool hasFormData = formDataObj && !formDataObj->isEmpty();
- String pageURL = frame->document()->url().string();
-
- if (!hasFormData) {
- // We clear out our form data caches, in case we're holding onto a bunch of memory.
- m_formDataCache.clear();
- m_formDataSuffixTree.clear();
- }
-
- String canonicalizedString;
- if (!hasFormData && task.string.length() > 2 * pageURL.length()) {
- // Q: Why do we bother to do this check at all?
- // A: Canonicalizing large inline scripts can be expensive. We want to
- // reduce the size of the string before we call canonicalize below,
- // since it could result in an unneeded allocation and memcpy.
- //
- // Q: Why do we multiply by two here?
- // A: We attempt to detect reflected XSS even when the server
- // transforms the attacker's input with addSlashes. The best the
- // attacker can do get the server to inflate his/her input by a
- // factor of two by sending " characters, which the server
- // transforms to \".
- canonicalizedString = task.string.substring(0, 2 * pageURL.length());
- } else
- canonicalizedString = task.string;
-
- if (frame->document()->url().protocolIsData())
- return false;
-
- canonicalizedString = canonicalize(canonicalizedString);
- if (canonicalizedString.isEmpty())
- return false;
-
- if (!task.context.isEmpty())
- canonicalizedString = task.context + canonicalizedString;
-
- String decodedPageURL = m_pageURLCache.canonicalizeURL(pageURL, frame->document()->decoder()->encoding(), task.decodeEntities, task.decodeURLEscapeSequencesTwice);
-
- if (task.allowRequestIfNoIllegalURICharacters && !hasFormData && decodedPageURL.find(&isIllegalURICharacter, 0) == notFound)
- return false; // Injection is impossible because the request does not contain any illegal URI characters.
-
- if (decodedPageURL.find(canonicalizedString, 0, false) != notFound)
- return true; // We've found the string in the GET data.
-
- if (hasFormData) {
- String decodedFormData = m_formDataCache.canonicalizeURL(formDataObj, frame->document()->decoder()->encoding(), task.decodeEntities, task.decodeURLEscapeSequencesTwice);
-
- if (m_generationOfSuffixTree != m_formDataCache.generation()) {
- m_formDataSuffixTree = new SuffixTree<ASCIICodebook>(decodedFormData, 5);
- m_generationOfSuffixTree = m_formDataCache.generation();
- }
-
- // Try a fast-reject via the suffixTree.
- if (m_formDataSuffixTree && !m_formDataSuffixTree->mightContain(canonicalizedString))
- return false;
-
- if (decodedFormData.find(canonicalizedString, 0, false) != notFound)
- return true; // We found the string in the POST data.
- }
-
- return false;
-}
-
-} // namespace WebCore
-
diff --git a/Source/WebCore/page/XSSAuditor.h b/Source/WebCore/page/XSSAuditor.h
deleted file mode 100644
index 5beed61..0000000
--- a/Source/WebCore/page/XSSAuditor.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Daniel Bates (dbates@intudata.com)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef XSSAuditor_h
-#define XSSAuditor_h
-
-#include "HTTPParsers.h"
-#include "PlatformString.h"
-#include "SuffixTree.h"
-#include "TextEncoding.h"
-
-namespace WebCore {
-
- class FormData;
- class Frame;
- class ScriptSourceCode;
-
- // The XSSAuditor class is used to prevent type 1 cross-site scripting
- // vulnerabilities (also known as reflected vulnerabilities).
- //
- // More specifically, the XSSAuditor class decides whether the execution of
- // a script is to be allowed or denied based on the content of any
- // user-submitted data, including:
- //
- // * the URL.
- // * the HTTP-POST data.
- //
- // If the source code of a script resembles any user-submitted data then it
- // is denied execution.
- //
- // When you instantiate the XSSAuditor you must specify the Frame of the
- // page that you wish to audit.
- //
- // Bindings
- //
- // An XSSAuditor is instantiated within the constructor of a
- // ScriptController object and passed the Frame the script originated. The
- // ScriptController calls back to the XSSAuditor to determine whether a
- // JavaScript script is safe to execute before executing it. The following
- // methods call into XSSAuditor:
- //
- // * ScriptController::evaluateInWorld - used to evaluate JavaScript scripts.
- // * ScriptController::executeIfJavaScriptURL - used to evaluate JavaScript URLs.
- // * ScriptEventListener::createAttributeEventListener - used to create JavaScript event handlers.
- // * HTMLBaseElement::process - used to set the document base URL.
- // * HTMLDocumentParser::shouldLoadExternalScriptFromSrc - used to load external JavaScript scripts.
- // * SubframeLoader::requestObject - used to load <object>/<embed> elements.
- //
- class XSSAuditor {
- WTF_MAKE_NONCOPYABLE(XSSAuditor); WTF_MAKE_FAST_ALLOCATED;
- public:
- XSSAuditor(Frame*);
- ~XSSAuditor();
-
- bool isEnabled() const;
-
- // Determines whether the script should be allowed or denied execution
- // based on the content of any user-submitted data.
- bool canEvaluate(const String& code) const;
-
- // Determines whether the JavaScript URL should be allowed or denied execution
- // based on the content of any user-submitted data.
- bool canEvaluateJavaScriptURL(const String& code) const;
-
- // Determines whether the event listener should be created based on the
- // content of any user-submitted data.
- bool canCreateInlineEventListener(const String& functionName, const String& code) const;
-
- // Determines whether the external script should be loaded based on the
- // content of any user-submitted data.
- bool canLoadExternalScriptFromSrc(const String& url) const;
-
- // Determines whether object should be loaded based on the content of
- // any user-submitted data.
- //
- // This method is called by SubframeLoader::requestObject.
- bool canLoadObject(const String& url) const;
-
- // Determines whether the base URL should be changed based on the content
- // of any user-submitted data.
- //
- // This method is called by HTMLBaseElement::process.
- bool canSetBaseElementURL(const String& url) const;
-
- private:
- class CachingURLCanonicalizer
- {
- public:
- CachingURLCanonicalizer() : m_decodeEntities(false), m_decodeURLEscapeSequencesTwice(false), m_generation(0) { }
- String canonicalizeURL(FormData*, const TextEncoding& encoding, bool decodeEntities,
- bool decodeURLEscapeSequencesTwice);
- String canonicalizeURL(const String& url, const TextEncoding& encoding, bool decodeEntities,
- bool decodeURLEscapeSequencesTwice);
-
- void clear();
-
- int generation() const { return m_generation; }
-
- private:
- // The parameters we were called with last.
- String m_inputURL;
- TextEncoding m_encoding;
- bool m_decodeEntities;
- bool m_decodeURLEscapeSequencesTwice;
- RefPtr<FormData> m_formData;
-
- // Incremented every time we see a new URL.
- int m_generation;
-
- // The cached result.
- String m_cachedCanonicalizedURL;
- };
-
- struct FindTask {
- FindTask()
- : decodeEntities(true)
- , allowRequestIfNoIllegalURICharacters(false)
- , decodeURLEscapeSequencesTwice(false)
- {
- }
-
- String context;
- String string;
- bool decodeEntities;
- bool allowRequestIfNoIllegalURICharacters;
- bool decodeURLEscapeSequencesTwice;
- };
-
- static String canonicalize(const String&);
- static String decodeURL(const String& url, const TextEncoding& encoding, bool decodeEntities,
- bool decodeURLEscapeSequencesTwice = false);
- static String decodeHTMLEntities(const String&, bool leaveUndecodableEntitiesUntouched = true);
-
- bool isSameOriginResource(const String& url) const;
- bool findInRequest(const FindTask&) const;
- bool findInRequest(Frame*, const FindTask&) const;
-
- XSSProtectionDisposition xssProtection() const;
-
- // The frame to audit.
- Frame* m_frame;
-
- // A state store to help us avoid canonicalizing the same URL repeated.
- // When a page has form data, we need two caches: one to store the
- // canonicalized URL and another to store the cannonicalized form
- // data. If we only had one cache, we'd always generate a cache miss
- // and load some pages extremely slowly.
- // https://bugs.webkit.org/show_bug.cgi?id=35373
- mutable CachingURLCanonicalizer m_pageURLCache;
- mutable CachingURLCanonicalizer m_formDataCache;
-
- mutable OwnPtr<SuffixTree<ASCIICodebook> > m_formDataSuffixTree;
- mutable int m_generationOfSuffixTree;
- };
-
-} // namespace WebCore
-
-#endif // XSSAuditor_h
diff --git a/Source/WebCore/page/animation/AnimationController.cpp b/Source/WebCore/page/animation/AnimationController.cpp
index e1281dd..dcdea03 100644
--- a/Source/WebCore/page/animation/AnimationController.cpp
+++ b/Source/WebCore/page/animation/AnimationController.cpp
@@ -145,16 +145,16 @@ void AnimationControllerPrivate::fireEventsAndUpdateStyle()
bool updateStyle = !m_eventsToDispatch.isEmpty() || !m_nodeChangesToDispatch.isEmpty();
// fire all the events
- Vector<EventToDispatch>::const_iterator eventsToDispatchEnd = m_eventsToDispatch.end();
- for (Vector<EventToDispatch>::const_iterator it = m_eventsToDispatch.begin(); it != eventsToDispatchEnd; ++it) {
+ Vector<EventToDispatch> eventsToDispatch = m_eventsToDispatch;
+ m_eventsToDispatch.clear();
+ Vector<EventToDispatch>::const_iterator eventsToDispatchEnd = eventsToDispatch.end();
+ for (Vector<EventToDispatch>::const_iterator it = eventsToDispatch.begin(); it != eventsToDispatchEnd; ++it) {
if (it->eventType == eventNames().webkitTransitionEndEvent)
it->element->dispatchEvent(WebKitTransitionEvent::create(it->eventType, it->name, it->elapsedTime));
else
it->element->dispatchEvent(WebKitAnimationEvent::create(it->eventType, it->name, it->elapsedTime));
}
- m_eventsToDispatch.clear();
-
// call setChanged on all the elements
Vector<RefPtr<Node> >::const_iterator nodeChangesToDispatchEnd = m_nodeChangesToDispatch.end();
for (Vector<RefPtr<Node> >::const_iterator it = m_nodeChangesToDispatch.begin(); it != nodeChangesToDispatchEnd; ++it)
diff --git a/Source/WebCore/page/chromium/FrameChromium.cpp b/Source/WebCore/page/chromium/FrameChromium.cpp
index f6f47a6..e9dc2a3 100644
--- a/Source/WebCore/page/chromium/FrameChromium.cpp
+++ b/Source/WebCore/page/chromium/FrameChromium.cpp
@@ -85,7 +85,7 @@ DragImageRef Frame::nodeImage(Node* node)
if (!buffer)
return 0;
buffer->context()->translate(-paintingRect.x(), -paintingRect.y());
- buffer->context()->clip(FloatRect(0, 0, paintingRect.right(), paintingRect.bottom()));
+ buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY()));
m_view->paintContents(buffer->context(), paintingRect);
@@ -108,7 +108,7 @@ DragImageRef Frame::dragImageForSelection()
if (!buffer)
return 0;
buffer->context()->translate(-paintingRect.x(), -paintingRect.y());
- buffer->context()->clip(FloatRect(0, 0, paintingRect.right(), paintingRect.bottom()));
+ buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY()));
m_view->paintContents(buffer->context(), paintingRect);
diff --git a/Source/WebCore/page/mac/WebCoreFrameView.h b/Source/WebCore/page/mac/WebCoreFrameView.h
index b76350d..93a0296 100644
--- a/Source/WebCore/page/mac/WebCoreFrameView.h
+++ b/Source/WebCore/page/mac/WebCoreFrameView.h
@@ -33,7 +33,7 @@ namespace WebCore {
- (void)setScrollingModes:(WebCore::ScrollbarMode)hMode vertical:(WebCore::ScrollbarMode)vMode andLock:(BOOL)lock;
- (void)scrollingModes:(WebCore::ScrollbarMode*)hMode vertical:(WebCore::ScrollbarMode*)vMode;
- (void)setScrollBarsSuppressed:(BOOL)suppressed repaintOnUnsuppress:(BOOL)repaint;
-- (void)setScrollOrigin:(NSPoint)origin updatePosition:(BOOL)updatePosition;
+- (void)setScrollOrigin:(NSPoint)origin updatePositionAtAll:(BOOL)updatePositionAtAll immediately:(BOOL)updatePositionImmediately;
- (NSPoint)scrollOrigin;
@end
diff --git a/Source/WebCore/page/qt/FrameQt.cpp b/Source/WebCore/page/qt/FrameQt.cpp
index bb577e0..4d1dd1d 100644
--- a/Source/WebCore/page/qt/FrameQt.cpp
+++ b/Source/WebCore/page/qt/FrameQt.cpp
@@ -52,7 +52,7 @@ DragImageRef Frame::dragImageForSelection()
GraphicsContext* context = buffer->context();
context->translate(-paintingRect.x(), -paintingRect.y());
- context->clip(FloatRect(0, 0, paintingRect.right(), paintingRect.bottom()));
+ context->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY()));
PaintBehavior previousPaintBehavior = m_view->paintBehavior();
m_view->setPaintBehavior(PaintBehaviorSelectionOnly);
diff --git a/Source/WebCore/page/wince/FrameWinCE.cpp b/Source/WebCore/page/wince/FrameWinCE.cpp
index 9eb487b..60e9aac 100644
--- a/Source/WebCore/page/wince/FrameWinCE.cpp
+++ b/Source/WebCore/page/wince/FrameWinCE.cpp
@@ -76,7 +76,7 @@ void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float head
float ratio = (float)printRect.height() / (float)printRect.width();
- float pageWidth = (float) root->rightLayoutOverflow();
+ float pageWidth = (float) root->maxXLayoutOverflow();
float pageHeight = pageWidth * ratio;
outPageHeight = (int) pageHeight; // this is the height of the page adjusted by margins
pageHeight -= (headerHeight + footerHeight);
diff --git a/Source/WebCore/page/wx/DragControllerWx.cpp b/Source/WebCore/page/wx/DragControllerWx.cpp
index 4a4d064..5c19c47 100644
--- a/Source/WebCore/page/wx/DragControllerWx.cpp
+++ b/Source/WebCore/page/wx/DragControllerWx.cpp
@@ -52,7 +52,7 @@ bool DragController::isCopyKeyDown(DragData*)
DragOperation DragController::dragOperation(DragData* dragData)
{
//FIXME: This logic is incomplete
- if (dragData->containsURL())
+ if (dragData->containsURL(0))
return DragOperationCopy;
return DragOperationNone;
diff --git a/Source/WebCore/platform/AsyncFileSystem.cpp b/Source/WebCore/platform/AsyncFileSystem.cpp
index b85a487..b1a3fe2 100644
--- a/Source/WebCore/platform/AsyncFileSystem.cpp
+++ b/Source/WebCore/platform/AsyncFileSystem.cpp
@@ -46,7 +46,7 @@ bool AsyncFileSystem::isAvailable()
return false;
}
-PassOwnPtr<AsyncFileSystem> AsyncFileSystem::create(const String&)
+PassOwnPtr<AsyncFileSystem> AsyncFileSystem::create(Type, const String&)
{
notImplemented();
return 0;
@@ -68,7 +68,7 @@ void AsyncFileSystem::openFileSystem(const String& basePath, const String& stora
rootPath += typeString;
rootPath.append(PlatformFilePathSeparator);
- callbacks->didOpenFileSystem(name, AsyncFileSystem::create(rootPath));
+ callbacks->didOpenFileSystem(name, AsyncFileSystem::create(type, rootPath));
}
#endif
diff --git a/Source/WebCore/platform/AsyncFileSystem.h b/Source/WebCore/platform/AsyncFileSystem.h
index c34a644..f5207ce 100644
--- a/Source/WebCore/platform/AsyncFileSystem.h
+++ b/Source/WebCore/platform/AsyncFileSystem.h
@@ -65,7 +65,7 @@ public:
virtual bool waitForOperationToComplete() { return false; }
// Creates and returns a new platform-specific AsyncFileSystem instance if the platform has its own implementation.
- static PassOwnPtr<AsyncFileSystem> create(const String& rootPath);
+ static PassOwnPtr<AsyncFileSystem> create(Type, const String& rootPath);
// Opens a new file system. The create parameter specifies whether or not to create the path if it does not already exists.
static void openFileSystem(const String& basePath, const String& storageIdentifier, Type, bool create, PassOwnPtr<AsyncFileSystemCallbacks>);
@@ -132,12 +132,16 @@ public:
// Getter for this file system's root path.
String root() const { return m_platformRootPath; }
+ Type type() const { return m_type; }
+
protected:
- AsyncFileSystem(const String& platformRootPath)
- : m_platformRootPath(platformRootPath)
+ AsyncFileSystem(Type type, const String& platformRootPath)
+ : m_type(type)
+ , m_platformRootPath(platformRootPath)
{
}
+ Type m_type;
String m_platformRootPath;
};
diff --git a/Source/WebCore/platform/ContextMenuItem.h b/Source/WebCore/platform/ContextMenuItem.h
index 6e84131..6595711 100644
--- a/Source/WebCore/platform/ContextMenuItem.h
+++ b/Source/WebCore/platform/ContextMenuItem.h
@@ -65,6 +65,9 @@ namespace WebCore {
ContextMenuItemTagOpenImageInNewWindow,
ContextMenuItemTagDownloadImageToDisk,
ContextMenuItemTagCopyImageToClipboard,
+#if PLATFORM(QT)
+ ContextMenuItemTagCopyImageUrlToClipboard,
+#endif
ContextMenuItemTagOpenFrameInNewWindow,
ContextMenuItemTagCopy,
ContextMenuItemTagGoBack,
diff --git a/Source/WebCore/platform/DragData.h b/Source/WebCore/platform/DragData.h
index 42d0d3a..b89748e 100644
--- a/Source/WebCore/platform/DragData.h
+++ b/Source/WebCore/platform/DragData.h
@@ -31,6 +31,7 @@
#include "IntPoint.h"
#include <wtf/Forward.h>
+#include <wtf/HashMap.h>
#include <wtf/Vector.h>
#if PLATFORM(MAC)
@@ -51,6 +52,7 @@ QT_END_NAMESPACE
typedef const QMimeData* DragDataRef;
#elif PLATFORM(WIN)
typedef struct IDataObject* DragDataRef;
+#include <wtf/text/WTFString.h>
#elif PLATFORM(WX)
typedef class wxDataObject* DragDataRef;
#elif PLATFORM(GTK)
@@ -84,7 +86,11 @@ enum DragApplicationFlags {
DragApplicationHasAttachedSheet = 4,
DragApplicationIsCopyKeyDown = 8
};
-
+
+#if PLATFORM(WIN)
+typedef HashMap<UINT, Vector<String> > DragDataMap;
+#endif
+
class DragData {
public:
enum FilenameConversionPolicy { DoNotConvertFilenames, ConvertFilenames };
@@ -92,7 +98,10 @@ public:
// clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left
DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone);
DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone);
-
+#if PLATFORM(WIN)
+ DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation sourceOperationMask, DragApplicationFlags = DragApplicationNone);
+ const DragDataMap& dragDataMap();
+#endif
const IntPoint& clientPosition() const { return m_clientPosition; }
const IntPoint& globalPosition() const { return m_globalPosition; }
DragApplicationFlags flags() { return m_applicationFlags; }
@@ -119,6 +128,9 @@ private:
#if PLATFORM(MAC)
RetainPtr<NSPasteboard> m_pasteboard;
#endif
+#if PLATFORM(WIN)
+ DragDataMap m_dragDataMap;
+#endif
};
}
diff --git a/Source/WebCore/platform/DragImage.cpp b/Source/WebCore/platform/DragImage.cpp
index 5fcafc1..64aaa0e 100644
--- a/Source/WebCore/platform/DragImage.cpp
+++ b/Source/WebCore/platform/DragImage.cpp
@@ -73,6 +73,13 @@ DragImageRef createDragImageForSelection(Frame* frame)
return image;
}
+#if !PLATFORM(MAC) && (!PLATFORM(WIN) || OS(WINCE))
+DragImageRef createDragImageForLink(KURL&, const String&, Frame*)
+{
+ return 0;
+}
+#endif
+
} // namespace WebCore
#endif // ENABLE(DRAG_SUPPORT)
diff --git a/Source/WebCore/platform/DragImage.h b/Source/WebCore/platform/DragImage.h
index a371821..fcb980a 100644
--- a/Source/WebCore/platform/DragImage.h
+++ b/Source/WebCore/platform/DragImage.h
@@ -96,6 +96,7 @@ namespace WebCore {
DragImageRef createDragImageFromImage(Image*);
DragImageRef createDragImageForSelection(Frame*);
DragImageRef createDragImageIconForCachedImage(CachedImage*);
+ DragImageRef createDragImageForLink(KURL&, const String& label, Frame*);
void deleteDragImage(DragImageRef);
}
diff --git a/Source/WebCore/platform/FileChooser.cpp b/Source/WebCore/platform/FileChooser.cpp
index 90dd567..7e6d4ae 100644
--- a/Source/WebCore/platform/FileChooser.cpp
+++ b/Source/WebCore/platform/FileChooser.cpp
@@ -42,13 +42,19 @@ inline FileChooser::FileChooser(FileChooserClient* client, const Vector<String>&
, m_isInitializing(true)
{
m_filenames = initialFilenames;
+}
+
+void FileChooser::initialize()
+{
loadIcon();
m_isInitializing = false;
}
PassRefPtr<FileChooser> FileChooser::create(FileChooserClient* client, const Vector<String>& initialFilenames)
{
- return adoptRef(new FileChooser(client, initialFilenames));
+ RefPtr<FileChooser> chooser(adoptRef(new FileChooser(client, initialFilenames)));
+ chooser->initialize();
+ return chooser;
}
FileChooser::~FileChooser()
diff --git a/Source/WebCore/platform/FileChooser.h b/Source/WebCore/platform/FileChooser.h
index fa25406..ac5e0e6 100644
--- a/Source/WebCore/platform/FileChooser.h
+++ b/Source/WebCore/platform/FileChooser.h
@@ -81,6 +81,7 @@ public:
private:
FileChooser(FileChooserClient*, const Vector<String>& initialFilenames);
+ void initialize();
void loadIcon();
FileChooserClient* m_client;
diff --git a/Source/WebCore/platform/FileSystem.cpp b/Source/WebCore/platform/FileSystem.cpp
index 511f8aa..0f69b7f 100644
--- a/Source/WebCore/platform/FileSystem.cpp
+++ b/Source/WebCore/platform/FileSystem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -101,4 +101,18 @@ String encodeForFileName(const String& inputStr)
return String(buffer.data(), p - buffer.data());
}
+#if !PLATFORM(MAC)
+
+bool canExcludeFromBackup()
+{
+ return false;
+}
+
+bool excludeFromBackup(const String&)
+{
+ return false;
+}
+
+#endif
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/FileSystem.h b/Source/WebCore/platform/FileSystem.h
index 4f088e1..d923fe6 100644
--- a/Source/WebCore/platform/FileSystem.h
+++ b/Source/WebCore/platform/FileSystem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2008 Collabora, Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,15 @@
#ifndef FileSystem_h
#define FileSystem_h
+#include "PlatformString.h"
+#include <time.h>
+#include <wtf/Forward.h>
+#include <wtf/Vector.h>
+
+#if PLATFORM(CF)
+#include <wtf/RetainPtr.h>
+#endif
+
#if PLATFORM(QT)
#include <QFile>
#include <QLibrary>
@@ -39,15 +48,9 @@
#endif
#if PLATFORM(CF) || (PLATFORM(QT) && defined(Q_WS_MAC))
-#include <CoreFoundation/CFBundle.h>
-#endif
-
-#include "PlatformString.h"
-#include <time.h>
-#include <wtf/Forward.h>
-#include <wtf/Vector.h>
-
+typedef struct __CFBundle* CFBundleRef;
typedef const struct __CFData* CFDataRef;
+#endif
#if OS(WINDOWS)
// These are to avoid including <winbase.h> in a header for Chromium
@@ -122,8 +125,6 @@ const PlatformFileHandle invalidPlatformFileHandle = reinterpret_cast<HANDLE>(-1
#elif PLATFORM(BREWMP)
typedef IFile* PlatformFileHandle;
const PlatformFileHandle invalidPlatformFileHandle = 0;
-typedef void* PlatformModule;
-typedef unsigned PlatformModuleVersion;
#elif PLATFORM(GTK)
typedef GFileIOStream* PlatformFileHandle;
const PlatformFileHandle invalidPlatformFileHandle = 0;
@@ -161,6 +162,9 @@ String homeDirectoryPath();
String pathGetFileName(const String&);
String directoryName(const String&);
+bool canExcludeFromBackup(); // Returns true if any file can ever be excluded from backup.
+bool excludeFromBackup(const String&); // Returns true if successful.
+
Vector<String> listDirectory(const String& path, const String& filter = String());
CString fileSystemRepresentation(const String&);
@@ -179,17 +183,18 @@ int writeToFile(PlatformFileHandle, const char* data, int length);
// Returns number of bytes actually written if successful, -1 otherwise.
int readFromFile(PlatformFileHandle, char* data, int length);
-// Methods for dealing with loadable modules
+// Functions for working with loadable modules.
bool unloadModule(PlatformModule);
// Encode a string for use within a file name.
String encodeForFileName(const String&);
-#if PLATFORM(WIN)
-String localUserSpecificStorageDirectory();
-String roamingUserSpecificStorageDirectory();
+#if PLATFORM(CF)
+RetainPtr<CFURLRef> pathAsURL(const String&);
+#endif
-bool safeCreateFile(const String&, CFDataRef);
+#if PLATFORM(CHROMIUM)
+String pathGetDisplayFileName(const String&);
#endif
#if PLATFORM(GTK)
@@ -198,8 +203,10 @@ String filenameForDisplay(const String&);
CString applicationDirectoryPath();
#endif
-#if PLATFORM(CHROMIUM)
-String pathGetDisplayFileName(const String&);
+#if PLATFORM(WIN) && !OS(WINCE)
+String localUserSpecificStorageDirectory();
+String roamingUserSpecificStorageDirectory();
+bool safeCreateFile(const String&, CFDataRef);
#endif
} // namespace WebCore
diff --git a/Source/WebCore/platform/KURL.cpp b/Source/WebCore/platform/KURL.cpp
index 60049df..f6a66ef 100644
--- a/Source/WebCore/platform/KURL.cpp
+++ b/Source/WebCore/platform/KURL.cpp
@@ -322,6 +322,12 @@ KURL::KURL(ParsedURLStringTag, const String& url)
ASSERT(url == m_string);
}
+KURL::KURL(ParsedURLStringTag, const URLString& url)
+{
+ parse(url.string());
+ ASSERT(url.string() == m_string);
+}
+
KURL::KURL(const KURL& base, const String& relative)
{
init(base, relative, UTF8Encoding());
@@ -921,11 +927,11 @@ String decodeURLEscapeSequences(const String& str, const TextEncoding& encoding)
&& isASCIIHexDigit(str[encodedRunEnd + 1])
&& isASCIIHexDigit(str[encodedRunEnd + 2]))
encodedRunEnd += 3;
+ searchPosition = encodedRunEnd;
if (encodedRunEnd == encodedRunPosition) {
++searchPosition;
continue;
}
- searchPosition = encodedRunEnd;
// Decode the %-escapes into bytes.
unsigned runLength = (encodedRunEnd - encodedRunPosition) / 3;
@@ -962,6 +968,14 @@ bool KURL::isLocalFile() const
return protocolIs("file");
}
+// Caution: This function does not bounds check.
+static void appendEscapedChar(char*& buffer, unsigned char c)
+{
+ *buffer++ = '%';
+ *buffer++ = hexDigits[c >> 4];
+ *buffer++ = hexDigits[c & 0xF];
+}
+
static void appendEscapingBadChars(char*& buffer, const char* strStart, size_t length)
{
char* p = buffer;
@@ -971,16 +985,37 @@ static void appendEscapingBadChars(char*& buffer, const char* strStart, size_t l
while (str < strEnd) {
unsigned char c = *str++;
if (isBadChar(c)) {
- if (c == '%' || c == '?') {
+ if (c == '%' || c == '?')
*p++ = c;
- } else if (c != 0x09 && c != 0x0a && c != 0x0d) {
- *p++ = '%';
- *p++ = hexDigits[c >> 4];
- *p++ = hexDigits[c & 0xF];
- }
- } else {
+ else if (c != 0x09 && c != 0x0a && c != 0x0d)
+ appendEscapedChar(p, c);
+ } else
*p++ = c;
+ }
+
+ buffer = p;
+}
+
+static void escapeAndAppendFragment(char*& buffer, const char* strStart, size_t length)
+{
+ char* p = buffer;
+
+ const char* str = strStart;
+ const char* strEnd = strStart + length;
+ while (str < strEnd) {
+ unsigned char c = *str++;
+ // Strip CR, LF and Tab from fragments, per:
+ // https://bugs.webkit.org/show_bug.cgi?id=8770
+ if (c == 0x09 || c == 0x0a || c == 0x0d)
+ continue;
+
+ // Chrome and IE allow non-ascii characters in fragments, however doing
+ // so would hit an ASSERT in checkEncodedString, so for now we don't.
+ if (c < 0x20 || c >= 127) {
+ appendEscapedChar(p, c);
+ continue;
}
+ *p++ = c;
}
buffer = p;
@@ -1021,11 +1056,6 @@ static int copyPathRemovingDots(char* dst, const char* src, int srcStart, int sr
baseStringPos += 3;
if (dst > bufferPathStart + 1)
dst--;
- // Note that these two while blocks differ subtly.
- // The first helps to remove multiple adjoining slashes as we rewind.
- // The +1 to bufferPathStart in the first while block prevents eating a leading slash
- while (dst > bufferPathStart + 1 && dst[-1] == '/')
- dst--;
while (dst > bufferPathStart && dst[-1] != '/')
dst--;
continue;
@@ -1070,6 +1100,38 @@ void KURL::parse(const String& string)
parse(buffer.data(), &string);
}
+static inline bool equal(const char* a, size_t lenA, const char* b, size_t lenB)
+{
+ if (lenA != lenB)
+ return false;
+ return !strncmp(a, b, lenA);
+}
+
+// List of default schemes is taken from google-url:
+// http://code.google.com/p/google-url/source/browse/trunk/src/url_canon_stdurl.cc#120
+static inline bool isDefaultPortForScheme(const char* port, size_t portLength, const char* scheme, size_t schemeLength)
+{
+ // This switch is theoretically a performance optimization. It came over when
+ // the code was moved from google-url, but may be removed later.
+ switch (schemeLength) {
+ case 2:
+ return equal("ws", 2, scheme, schemeLength) && equal("80", 2, port, portLength);
+ case 3:
+ if (equal("ftp", 3, scheme, schemeLength))
+ return equal("21", 2, port, portLength);
+ if (equal("wss", 3, scheme, schemeLength))
+ return equal("443", 3, port, portLength);
+ break;
+ case 4:
+ return equal("http", 4, scheme, schemeLength) && equal("80", 2, port, portLength);
+ case 5:
+ return equal("https", 5, scheme, schemeLength) && equal("443", 3, port, portLength);
+ case 6:
+ return equal("gopher", 6, scheme, schemeLength) && equal("70", 2, port, portLength);
+ }
+ return false;
+}
+
void KURL::parse(const char* url, const String* originalString)
{
if (!url || url[0] == '\0') {
@@ -1246,7 +1308,7 @@ void KURL::parse(const char* url, const String* originalString)
// copy in the scheme
const char *schemeEndPtr = url + schemeEnd;
while (strPtr < schemeEndPtr)
- *p++ = *strPtr++;
+ *p++ = toASCIILower(*strPtr++);
m_schemeEnd = p - buffer.data();
bool hostIsLocalHost = portEnd - userStart == 9
@@ -1305,13 +1367,16 @@ void KURL::parse(const char* url, const String* originalString)
}
m_hostEnd = p - buffer.data();
- // copy in the port
+ // Copy in the port if the URL has one (and it's not default).
if (hostEnd != portStart) {
- *p++ = ':';
- strPtr = url + portStart;
- const char *portEndPtr = url + portEnd;
- while (strPtr < portEndPtr)
- *p++ = *strPtr++;
+ const char* portStr = url + portStart;
+ size_t portLength = portEnd - portStart;
+ if (portLength && !isDefaultPortForScheme(portStr, portLength, buffer.data(), m_schemeEnd)) {
+ *p++ = ':';
+ const char* portEndPtr = url + portEnd;
+ while (portStr < portEndPtr)
+ *p++ = *portStr++;
+ }
}
m_portEnd = p - buffer.data();
} else
@@ -1349,7 +1414,7 @@ void KURL::parse(const char* url, const String* originalString)
// add fragment, escaping bad characters
if (fragmentEnd != queryEnd) {
*p++ = '#';
- appendEscapingBadChars(p, url + fragmentStart, fragmentEnd - fragmentStart);
+ escapeAndAppendFragment(p, url + fragmentStart, fragmentEnd - fragmentStart);
}
m_fragmentEnd = p - buffer.data();
@@ -1415,11 +1480,9 @@ String encodeWithURLEscapeSequences(const String& notEncodedString)
const char* strEnd = str + asUTF8.length();
while (str < strEnd) {
unsigned char c = *str++;
- if (isBadChar(c)) {
- *p++ = '%';
- *p++ = hexDigits[c >> 4];
- *p++ = hexDigits[c & 0xF];
- } else
+ if (isBadChar(c))
+ appendEscapedChar(p, c);
+ else
*p++ = c;
}
diff --git a/Source/WebCore/platform/KURL.h b/Source/WebCore/platform/KURL.h
index cbf0d8b..521e7ca 100644
--- a/Source/WebCore/platform/KURL.h
+++ b/Source/WebCore/platform/KURL.h
@@ -27,6 +27,7 @@
#define KURL_h
#include "PlatformString.h"
+#include "URLString.h"
#include <wtf/HashMap.h>
#if PLATFORM(CF)
@@ -74,6 +75,7 @@ public:
// It is usually best to avoid repeatedly parsing a string, unless memory saving outweigh the possible slow-downs.
KURL(ParsedURLStringTag, const char*);
KURL(ParsedURLStringTag, const String&);
+ KURL(ParsedURLStringTag, const URLString&);
// Resolves the relative URL with the given base URL. If provided, the
// TextEncoding is used to encode non-ASCII characers. The base URL can be
@@ -117,11 +119,13 @@ public:
bool canSetHostOrPort() const { return isHierarchical(); }
bool canSetPathname() const { return isHierarchical(); }
-
+
#if USE(GOOGLEURL)
const String& string() const { return m_url.string(); }
+ URLString urlString() const { return URLString(m_url.string()); }
#else
const String& string() const { return m_string; }
+ URLString urlString() const { return URLString(m_string); }
#endif
String protocol() const;
diff --git a/Source/WebCore/platform/KURLGoogle.cpp b/Source/WebCore/platform/KURLGoogle.cpp
index 6d63734..0697b33 100644
--- a/Source/WebCore/platform/KURLGoogle.cpp
+++ b/Source/WebCore/platform/KURLGoogle.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2004, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2008, 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -63,8 +63,7 @@ static const int invalidPortNumber = 0xFFFF;
// canonicalizer.
class KURLCharsetConverter : public url_canon::CharsetConverter {
public:
- // The encoding parameter may be NULL, but in this case the object must not
- // be called.
+ // The encoding parameter may be 0, but in this case the object must not be called.
KURLCharsetConverter(const TextEncoding* encoding)
: m_encoding(encoding)
{
@@ -96,8 +95,8 @@ static inline void assertProtocolIsGood(const char* protocol)
}
// Returns the characters for the given string, or a pointer to a static empty
-// string if the input string is NULL. This will always ensure we have a non-
-// NULL character pointer since ReplaceComponents has special meaning for NULL.
+// string if the input string is null. This will always ensure we have a non-
+// null character pointer since ReplaceComponents has special meaning for null.
static inline const url_parse::UTF16Char* CharactersOrEmpty(const String& str)
{
static const url_parse::UTF16Char zero = 0;
@@ -194,15 +193,15 @@ void KURLGooglePrivate::init(const KURL& base,
init(base, relative.characters(), relative.length(), queryEncoding);
}
-// Note: code mostly duplicated below.
-void KURLGooglePrivate::init(const KURL& base, const char* rel, int relLength,
+template <typename CHAR>
+void KURLGooglePrivate::init(const KURL& base, const CHAR* rel, int relLength,
const TextEncoding* queryEncoding)
{
- // As a performance optimization, we do not use the charset converter if
- // encoding is UTF-8 or other Unicode encodings. Note that this is
- // per HTML5 2.5.3 (resolving URL). The URL canonicalizer will be
- // more efficient with no charset converter object because it
- // can do UTF-8 internally with no extra copies.
+ // As a performance optimization, we do not use the charset converter
+ // if encoding is UTF-8 or other Unicode encodings. Note that this is
+ // per HTML5 2.5.3 (resolving URL). The URL canonicalizer will be more
+ // efficient with no charset converter object because it can do UTF-8
+ // internally with no extra copies.
// We feel free to make the charset converter object every time since it's
// just a wrapper around a reference.
@@ -233,37 +232,11 @@ void KURLGooglePrivate::init(const KURL& base, const char* rel, int relLength,
else
setAscii(CString(output.data(), output.length()));
} else {
- // WebCore expects resolved URLs to be empty rather than NULL.
+ // WebCore expects resolved URLs to be empty rather than null.
setUtf8(CString("", 0));
}
}
-// Note: code mostly duplicated above. See FIXMEs and comments there.
-void KURLGooglePrivate::init(const KURL& base, const UChar* rel, int relLength,
- const TextEncoding* queryEncoding)
-{
- KURLCharsetConverter charsetConverterObject(queryEncoding);
- KURLCharsetConverter* charsetConverter =
- (!queryEncoding || isUnicodeEncoding(queryEncoding)) ? 0 :
- &charsetConverterObject;
-
- url_canon::RawCanonOutputT<char> output;
- const CString& baseStr = base.m_url.utf8String();
- m_isValid = url_util::ResolveRelative(baseStr.data(), baseStr.length(),
- base.m_url.m_parsed, rel, relLength,
- charsetConverter,
- &output, &m_parsed);
-
-
- if (m_isValid || output.length()) {
- if (m_parsed.ref.is_nonempty())
- setUtf8(CString(output.data(), output.length()));
- else
- setAscii(CString(output.data(), output.length()));
- } else
- setUtf8(CString("", 0));
-}
-
void KURLGooglePrivate::initProtocolInHTTPFamily()
{
if (!m_isValid) {
@@ -295,8 +268,8 @@ void KURLGooglePrivate::copyTo(KURLGooglePrivate* dest) const
String KURLGooglePrivate::componentString(const url_parse::Component& comp) const
{
if (!m_isValid || comp.len <= 0) {
- // KURL returns a NULL string if the URL is itself a NULL string, and an
- // empty string for other nonexistant entities.
+ // KURL returns a null string if the URL is itself a null string, and an
+ // empty string for other nonexistent entities.
if (utf8String().isNull())
return String();
return String("", 0);
@@ -330,9 +303,9 @@ void KURLGooglePrivate::replaceComponents(const Replacements& replacements)
const String& KURLGooglePrivate::string() const
{
if (!m_stringIsValid) {
- // Must special case the NULL case, since constructing the
- // string like we do below will generate an empty rather than
- // a NULL string.
+ // Handle the null case separately. Otherwise, constructing
+ // the string like we do below would generate the empty string,
+ // not the null string.
if (m_utf8.isNull())
m_string = String();
else if (m_utf8IsASCII)
@@ -346,17 +319,17 @@ const String& KURLGooglePrivate::string() const
// KURL ------------------------------------------------------------------------
-// Creates with NULL-terminated string input representing an absolute URL.
+// Creates with null-terminated string input representing an absolute URL.
// WebCore generally calls this only with hardcoded strings, so the input is
-// ASCII. We treat is as UTF-8 just in case.
+// ASCII. We treat it as UTF-8 just in case.
KURL::KURL(ParsedURLStringTag, const char *url)
{
- // FIXME The Mac code checks for beginning with a slash and converting to a
+ // FIXME The Mac code checks for beginning with a slash and converts it to
// file: URL. We will want to add this as well once we can compile on a
// system like that.
m_url.init(KURL(), url, strlen(url), 0);
- // The one-argument constructors should never generate a NULL string.
+ // The one-argument constructors should never generate a null string.
// This is a funny quirk of KURL.cpp (probably a bug) which we preserve.
if (m_url.utf8String().isNull())
m_url.setAscii(CString("", 0));
@@ -365,7 +338,7 @@ KURL::KURL(ParsedURLStringTag, const char *url)
// Initializes with a string representing an absolute URL. No encoding
// information is specified. This generally happens when a KURL is converted
// to a string and then converted back. In this case, the URL is already
-// canonical and in proper escaped form so needs no encoding. We treat it was
+// canonical and in proper escaped form so needs no encoding. We treat it as
// UTF-8 just in case.
KURL::KURL(ParsedURLStringTag, const String& url)
{
@@ -533,8 +506,8 @@ String KURL::user() const
String KURL::fragmentIdentifier() const
{
// Empty but present refs ("foo.com/bar#") should result in the empty
- // string, which m_url.componentString will produce. Nonexistant refs should be
- // the NULL string.
+ // string, which m_url.componentString will produce. Nonexistent refs
+ // should be the null string.
if (!m_url.m_parsed.ref.is_valid())
return String();
@@ -745,7 +718,7 @@ void KURL::setQuery(const String& query)
{
KURLGooglePrivate::Replacements replacements;
if (query.isNull()) {
- // KURL.cpp sets to NULL to clear any query.
+ // KURL.cpp sets to null to clear any query.
replacements.ClearQuery();
} else if (query.length() > 0 && query[0] == '?') {
// WebCore expects the query string to begin with a question mark, but
@@ -946,7 +919,7 @@ String decodeURLEscapeSequences(const String& str)
}
// In KURL.cpp's implementation, this is called by every component getter.
-// It will unescape every character, including NULL. This is scary, and may
+// It will unescape every character, including '\0'. This is scary, and may
// cause security holes. We never call this function for components, and
// just return the ASCII versions instead.
//
@@ -1005,10 +978,10 @@ bool KURL::isLocalFile() const
// will automatically do the correct escaping, this function does not have to
// do any work.
//
-// There is a possibility that a future called may use this function in other
+// There is a possibility that a future caller may use this function in other
// ways, and may expect to get a valid URL string. The dangerous thing we want
-// to protect against here is accidentally getting NULLs in a string that is
-// not supposed to have NULLs. Therefore, we escape NULLs here to prevent this.
+// to protect against here is accidentally getting '\0' characters in a string
+// that is not supposed to have them. Therefore, we escape these characters.
String encodeWithURLEscapeSequences(const String& notEncodedString)
{
CString utf8 = UTF8Encoding().encode(
@@ -1115,7 +1088,7 @@ bool protocolIs(const String& url, const char* protocol)
// Check the scheme like GURL does.
return url_util::FindAndCompareScheme(url.characters(), url.length(),
- protocol, NULL);
+ protocol, 0);
}
inline bool KURL::protocolIs(const String& string, const char* protocol)
diff --git a/Source/WebCore/platform/KURLGooglePrivate.h b/Source/WebCore/platform/KURLGooglePrivate.h
index c71e56b..c74a6b4 100644
--- a/Source/WebCore/platform/KURLGooglePrivate.h
+++ b/Source/WebCore/platform/KURLGooglePrivate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
+ * Copyright (c) 2008, 2009, 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -41,7 +41,7 @@ namespace WebCore {
class KURL;
class TextEncoding;
- // Wraps the internals related to using Google-URL as the bnackend for KURL.
+ // Wraps the internals related to using Google-URL as the backend for KURL.
// This maintains the state and has auxiliary functions so that we don't need
// to uglify KURL.h while allowing Google-URL to be evaluated.
class KURLGooglePrivate {
@@ -49,19 +49,17 @@ namespace WebCore {
KURLGooglePrivate();
KURLGooglePrivate(const url_parse::Parsed&, bool isValid);
- // Initializes the object. This will call through to one of the backend
- // initializers below depending on whether the string's internal
- // representation is 8 or 16 bit.
+ // Initializes the object. This will call through the backend initializer
+ // below.
void init(const KURL& base, const String& relative,
const TextEncoding* queryEncoding);
- // Backend initializers. The query encoding parameters are optional and can
- // be NULL (this implies UTF-8). These initializers require that the object
- // has just been created and the strings are NULL. Do not call on an
+ // Backend initializer. The query encoding parameters are optional and can
+ // be 0 (this implies UTF-8). This initializer requires that the object
+ // has just been created and the strings are null. Do not call on an
// already-constructed object.
- void init(const KURL& base, const char* rel, int relLength,
- const TextEncoding* queryEncoding);
- void init(const KURL& base, const UChar* rel, int relLength,
+ template <typename CHAR>
+ void init(const KURL& base, const CHAR* rel, int relLength,
const TextEncoding* queryEncoding);
// Does a deep copy to the given output object.
diff --git a/Source/WebCore/platform/Length.cpp b/Source/WebCore/platform/Length.cpp
index e2fd9b8..323705a 100644
--- a/Source/WebCore/platform/Length.cpp
+++ b/Source/WebCore/platform/Length.cpp
@@ -28,6 +28,7 @@
#include "PlatformString.h"
#include <wtf/ASCIICType.h>
#include <wtf/Assertions.h>
+#include <wtf/OwnArrayPtr.h>
#include <wtf/text/StringBuffer.h>
using namespace WTF;
@@ -83,7 +84,7 @@ static int countCharacter(const UChar* data, unsigned length, UChar character)
return count;
}
-Length* newCoordsArray(const String& string, int& len)
+PassOwnArrayPtr<Length> newCoordsArray(const String& string, int& len)
{
unsigned length = string.length();
const UChar* data = string.characters();
@@ -100,7 +101,7 @@ Length* newCoordsArray(const String& string, int& len)
str = str->simplifyWhiteSpace();
len = countCharacter(str->characters(), str->length(), ' ') + 1;
- Length* r = new Length[len];
+ OwnArrayPtr<Length> r = adoptArrayPtr(new Length[len]);
int i = 0;
unsigned pos = 0;
@@ -114,10 +115,10 @@ Length* newCoordsArray(const String& string, int& len)
ASSERT(i == len - 1);
- return r;
+ return r.release();
}
-Length* newLengthArray(const String& string, int& len)
+PassOwnArrayPtr<Length> newLengthArray(const String& string, int& len)
{
RefPtr<StringImpl> str = string.impl()->simplifyWhiteSpace();
if (!str->length()) {
@@ -126,7 +127,7 @@ Length* newLengthArray(const String& string, int& len)
}
len = countCharacter(str->characters(), str->length(), ',') + 1;
- Length* r = new Length[len];
+ OwnArrayPtr<Length> r = adoptArrayPtr(new Length[len]);
int i = 0;
unsigned pos = 0;
@@ -145,7 +146,7 @@ Length* newLengthArray(const String& string, int& len)
else
len--;
- return r;
+ return r.release();
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/Length.h b/Source/WebCore/platform/Length.h
index 9da71c7..1571944 100644
--- a/Source/WebCore/platform/Length.h
+++ b/Source/WebCore/platform/Length.h
@@ -25,6 +25,7 @@
#include <wtf/FastAllocBase.h>
#include <wtf/Forward.h>
#include <wtf/MathExtras.h>
+#include <wtf/PassOwnArrayPtr.h>
namespace WebCore {
@@ -193,8 +194,8 @@ private:
int m_value;
};
-Length* newCoordsArray(const String&, int& len);
-Length* newLengthArray(const String&, int& len);
+PassOwnArrayPtr<Length> newCoordsArray(const String&, int& len);
+PassOwnArrayPtr<Length> newLengthArray(const String&, int& len);
} // namespace WebCore
diff --git a/Source/WebCore/platform/LinkHash.cpp b/Source/WebCore/platform/LinkHash.cpp
index ac3aa3c..a2acad1 100644
--- a/Source/WebCore/platform/LinkHash.cpp
+++ b/Source/WebCore/platform/LinkHash.cpp
@@ -197,7 +197,7 @@ static inline bool needsTrailingSlash(const UChar* characters, unsigned length)
static ALWAYS_INLINE LinkHash visitedLinkHashInline(const UChar* url, unsigned length)
{
- return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url, length));
+ return AlreadyHashed::avoidDeletedValue(WTF::StringHasher::createHash(url, length));
}
LinkHash visitedLinkHash(const UChar* url, unsigned length)
diff --git a/Source/WebCore/platform/LocalizationStrategy.h b/Source/WebCore/platform/LocalizationStrategy.h
index 5596c81..3ed84d9 100644
--- a/Source/WebCore/platform/LocalizationStrategy.h
+++ b/Source/WebCore/platform/LocalizationStrategy.h
@@ -55,6 +55,9 @@ public:
virtual String contextMenuItemTagOpenImageInNewWindow() = 0;
virtual String contextMenuItemTagDownloadImageToDisk() = 0;
virtual String contextMenuItemTagCopyImageToClipboard() = 0;
+#if PLATFORM(QT)
+ virtual String contextMenuItemTagCopyImageUrlToClipboard() = 0;
+#endif
virtual String contextMenuItemTagOpenFrameInNewWindow() = 0;
virtual String contextMenuItemTagCopy() = 0;
virtual String contextMenuItemTagGoBack() = 0;
diff --git a/Source/WebCore/platform/LocalizedStrings.cpp b/Source/WebCore/platform/LocalizedStrings.cpp
index f342c6d..77144a9 100644
--- a/Source/WebCore/platform/LocalizedStrings.cpp
+++ b/Source/WebCore/platform/LocalizedStrings.cpp
@@ -104,6 +104,13 @@ String contextMenuItemTagCopyImageToClipboard()
return platformStrategies()->localizationStrategy()->contextMenuItemTagCopyImageToClipboard();
}
+#if PLATFORM(QT)
+String contextMenuItemTagCopyImageUrlToClipboard()
+{
+ return platformStrategies()->localizationStrategy()->contextMenuItemTagCopyImageUrlToClipboard();
+}
+#endif
+
String contextMenuItemTagOpenFrameInNewWindow()
{
return platformStrategies()->localizationStrategy()->contextMenuItemTagOpenFrameInNewWindow();
diff --git a/Source/WebCore/platform/LocalizedStrings.h b/Source/WebCore/platform/LocalizedStrings.h
index da0fe86..812300f 100644
--- a/Source/WebCore/platform/LocalizedStrings.h
+++ b/Source/WebCore/platform/LocalizedStrings.h
@@ -51,6 +51,9 @@ namespace WebCore {
String contextMenuItemTagOpenImageInNewWindow();
String contextMenuItemTagDownloadImageToDisk();
String contextMenuItemTagCopyImageToClipboard();
+#if PLATFORM(QT)
+ String contextMenuItemTagCopyImageUrlToClipboard();
+#endif
String contextMenuItemTagOpenFrameInNewWindow();
String contextMenuItemTagCopy();
String contextMenuItemTagGoBack();
diff --git a/Source/WebCore/platform/MIMETypeRegistry.cpp b/Source/WebCore/platform/MIMETypeRegistry.cpp
index 0f4cc0e..4f9be57 100644
--- a/Source/WebCore/platform/MIMETypeRegistry.cpp
+++ b/Source/WebCore/platform/MIMETypeRegistry.cpp
@@ -27,9 +27,6 @@
#include "config.h"
#include "MIMETypeRegistry.h"
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
-#include "ArchiveFactory.h"
-#endif
#include "MediaPlayer.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
@@ -46,6 +43,10 @@
#include <qimagewriter.h>
#endif
+#if ENABLE(WEB_ARCHIVE)
+#include "ArchiveFactory.h"
+#endif
+
namespace WebCore {
static HashSet<String>* supportedImageResourceMIMETypes;
@@ -249,7 +250,7 @@ static void initializeSupportedNonImageMimeTypes()
for (size_t i = 0; i < WTF_ARRAY_LENGTH(types); ++i)
supportedNonImageMIMETypes->add(types[i]);
-#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
+#if ENABLE(WEB_ARCHIVE)
ArchiveFactory::registerKnownArchiveMIMETypes();
#endif
}
@@ -369,6 +370,13 @@ static MediaMIMETypeMap& mediaMIMETypeMap()
return mediaMIMETypeForExtensionMap;
}
+#if ENABLE(FILE_SYSTEM) && ENABLE(WORKERS)
+String MIMETypeRegistry::getMIMETypeForExtension(const String& extension)
+{
+ return getMIMETypeForExtensionThreadSafe(extension);
+}
+#endif
+
String MIMETypeRegistry::getMediaMIMETypeForExtension(const String& ext)
{
// Look in the system-specific registry first.
diff --git a/Source/WebCore/platform/MIMETypeRegistry.h b/Source/WebCore/platform/MIMETypeRegistry.h
index 64abea8..d069035 100644
--- a/Source/WebCore/platform/MIMETypeRegistry.h
+++ b/Source/WebCore/platform/MIMETypeRegistry.h
@@ -36,6 +36,9 @@ namespace WebCore {
class MIMETypeRegistry {
public:
static String getMIMETypeForExtension(const String& extension);
+#if ENABLE(FILE_SYSTEM) && ENABLE(WORKERS)
+ static String getMIMETypeForExtensionThreadSafe(const String& extension);
+#endif
static Vector<String> getExtensionsForMIMEType(const String& type);
static String getPreferredExtensionForMIMEType(const String& type);
static String getMediaMIMETypeForExtension(const String& extension);
diff --git a/Source/WebCore/platform/PlatformGestureEvent.h b/Source/WebCore/platform/PlatformGestureEvent.h
new file mode 100644
index 0000000..99157e1
--- /dev/null
+++ b/Source/WebCore/platform/PlatformGestureEvent.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PlatformGestureEvent_h
+#define PlatformGestureEvent_h
+
+#if ENABLE(GESTURE_EVENTS)
+
+#include "IntPoint.h"
+
+namespace WebCore {
+
+class PlatformGestureEvent {
+public:
+ enum Type {
+ ScrollBeginType,
+ ScrollEndType,
+ };
+
+ PlatformGestureEvent()
+ : m_type(ScrollBeginType)
+ , m_timestamp(0)
+ {
+ }
+
+ Type type() const { return m_type; }
+
+ const IntPoint& position() const { return m_position; } // PlatformWindow coordinates.
+ const IntPoint& globalPosition() const { return m_globalPosition; } // Screen coordinates.
+
+ double timestamp() const { return m_timestamp; }
+
+protected:
+ Type m_type;
+ IntPoint m_position;
+ IntPoint m_globalPosition;
+ double m_timestamp;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(GESTURE_EVENTS)
+
+#endif // PlatformGestureEvent_h
diff --git a/Source/WebCore/platform/PlatformWheelEvent.h b/Source/WebCore/platform/PlatformWheelEvent.h
index 1e5cd53..2698e6e 100644
--- a/Source/WebCore/platform/PlatformWheelEvent.h
+++ b/Source/WebCore/platform/PlatformWheelEvent.h
@@ -98,7 +98,9 @@ namespace WebCore {
, m_altKey(false)
, m_metaKey(false)
#if PLATFORM(MAC)
+ , m_hasPreciseScrollingDeltas(false)
, m_phase(PlatformWheelEventPhaseNone)
+ , m_timestamp(0)
#endif
{
}
@@ -151,6 +153,8 @@ namespace WebCore {
#endif
PlatformWheelEventPhase phase() const { return m_phase; }
+ bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
+ double timestamp() const { return m_timestamp; }
#endif
#if PLATFORM(QT)
@@ -186,7 +190,9 @@ namespace WebCore {
bool m_altKey;
bool m_metaKey;
#if PLATFORM(MAC)
+ bool m_hasPreciseScrollingDeltas;
PlatformWheelEventPhase m_phase;
+ double m_timestamp;
#endif
};
diff --git a/Source/WebCore/platform/PopupMenuStyle.h b/Source/WebCore/platform/PopupMenuStyle.h
index b9a7abc..3cb33cc 100644
--- a/Source/WebCore/platform/PopupMenuStyle.h
+++ b/Source/WebCore/platform/PopupMenuStyle.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -35,7 +35,7 @@ namespace WebCore {
class PopupMenuStyle {
public:
- PopupMenuStyle(const Color& foreground, const Color& background, const Font& font, bool visible, bool isDisplayNone, Length textIndent, TextDirection textDirection)
+ PopupMenuStyle(const Color& foreground, const Color& background, const Font& font, bool visible, bool isDisplayNone, Length textIndent, TextDirection textDirection, bool hasTextDirectionOverride)
: m_foregroundColor(foreground)
, m_backgroundColor(background)
, m_font(font)
@@ -43,6 +43,7 @@ public:
, m_isDisplayNone(isDisplayNone)
, m_textIndent(textIndent)
, m_textDirection(textDirection)
+ , m_hasTextDirectionOverride(hasTextDirectionOverride)
{
}
@@ -53,6 +54,7 @@ public:
bool isDisplayNone() const { return m_isDisplayNone; }
Length textIndent() const { return m_textIndent; }
TextDirection textDirection() const { return m_textDirection; }
+ bool hasTextDirectionOverride() const { return m_hasTextDirectionOverride; }
private:
Color m_foregroundColor;
@@ -62,6 +64,7 @@ private:
bool m_isDisplayNone;
Length m_textIndent;
TextDirection m_textDirection;
+ bool m_hasTextDirectionOverride;
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/SchemeRegistry.cpp b/Source/WebCore/platform/SchemeRegistry.cpp
index 71697cb..2bc655e 100644
--- a/Source/WebCore/platform/SchemeRegistry.cpp
+++ b/Source/WebCore/platform/SchemeRegistry.cpp
@@ -86,6 +86,24 @@ static URLSchemesMap& emptyDocumentSchemes()
return emptyDocumentSchemes;
}
+static URLSchemesMap& canDisplayOnlyIfCanRequestSchemes()
+{
+ DEFINE_STATIC_LOCAL(URLSchemesMap, canDisplayOnlyIfCanRequestSchemes, ());
+
+#if ENABLE(BLOB) || ENABLE(FILE_SYSTEM)
+ if (canDisplayOnlyIfCanRequestSchemes.isEmpty()) {
+#if ENABLE(BLOB)
+ canDisplayOnlyIfCanRequestSchemes.add("blob");
+#endif
+#if ENABLE(FILE_SYSTEM)
+ canDisplayOnlyIfCanRequestSchemes.add("filesystem");
+#endif
+ }
+#endif // ENABLE(BLOB) || ENABLE(FILE_SYSTEM)
+
+ return canDisplayOnlyIfCanRequestSchemes;
+}
+
void SchemeRegistry::registerURLSchemeAsLocal(const String& scheme)
{
localURLSchemes().add(scheme);
@@ -121,6 +139,8 @@ void SchemeRegistry::registerURLSchemeAsNoAccess(const String& scheme)
bool SchemeRegistry::shouldTreatURLSchemeAsNoAccess(const String& scheme)
{
+ if (scheme.isEmpty())
+ return false;
return schemesWithUniqueOrigins().contains(scheme);
}
@@ -131,6 +151,8 @@ void SchemeRegistry::registerURLSchemeAsDisplayIsolated(const String& scheme)
bool SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(const String& scheme)
{
+ if (scheme.isEmpty())
+ return false;
return displayIsolatedURLSchemes().contains(scheme);
}
@@ -141,6 +163,8 @@ void SchemeRegistry::registerURLSchemeAsSecure(const String& scheme)
bool SchemeRegistry::shouldTreatURLSchemeAsSecure(const String& scheme)
{
+ if (scheme.isEmpty())
+ return false;
return secureSchemes().contains(scheme);
}
@@ -151,7 +175,21 @@ void SchemeRegistry::registerURLSchemeAsEmptyDocument(const String& scheme)
bool SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument(const String& scheme)
{
+ if (scheme.isEmpty())
+ return false;
return emptyDocumentSchemes().contains(scheme);
}
+bool SchemeRegistry::canDisplayOnlyIfCanRequest(const String& scheme)
+{
+ if (scheme.isEmpty())
+ return false;
+ return canDisplayOnlyIfCanRequestSchemes().contains(scheme);
+}
+
+void SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest(const String& scheme)
+{
+ canDisplayOnlyIfCanRequestSchemes().add(scheme);
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/SchemeRegistry.h b/Source/WebCore/platform/SchemeRegistry.h
index 530fcab..c9cb476 100644
--- a/Source/WebCore/platform/SchemeRegistry.h
+++ b/Source/WebCore/platform/SchemeRegistry.h
@@ -58,6 +58,11 @@ public:
static void registerURLSchemeAsEmptyDocument(const String&);
static bool shouldLoadURLSchemeAsEmptyDocument(const String&);
+
+ // Such schemes should delegate to SecurityOrigin::canRequest for any URL
+ // passed to SecurityOrigin::canDisplay.
+ static bool canDisplayOnlyIfCanRequest(const String& scheme);
+ static void registerAsCanDisplayOnlyIfCanRequest(const String& scheme);
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/ScrollAnimator.cpp b/Source/WebCore/platform/ScrollAnimator.cpp
index 428a79d..6fc78e7 100644
--- a/Source/WebCore/platform/ScrollAnimator.cpp
+++ b/Source/WebCore/platform/ScrollAnimator.cpp
@@ -32,10 +32,13 @@
#include "ScrollAnimator.h"
#include "FloatPoint.h"
+#include "PlatformWheelEvent.h"
#include "ScrollableArea.h"
#include <algorithm>
#include <wtf/PassOwnPtr.h>
+using namespace std;
+
namespace WebCore {
#if !ENABLE(SMOOTH_SCROLLING)
@@ -78,6 +81,44 @@ void ScrollAnimator::scrollToOffsetWithoutAnimation(const FloatPoint& offset)
}
}
+void ScrollAnimator::handleWheelEvent(PlatformWheelEvent& e)
+{
+ Scrollbar* horizontalScrollbar = m_scrollableArea->horizontalScrollbar();
+ Scrollbar* verticalScrollbar = m_scrollableArea->verticalScrollbar();
+
+ // Accept the event if we have a scrollbar in that direction and can still
+ // scroll any further.
+ float deltaX = horizontalScrollbar ? e.deltaX() : 0;
+ float deltaY = verticalScrollbar ? e.deltaY() : 0;
+
+ IntSize maxForwardScrollDelta = m_scrollableArea->maximumScrollPosition() - m_scrollableArea->scrollPosition();
+ IntSize maxBackwardScrollDelta = m_scrollableArea->scrollPosition() - m_scrollableArea->minimumScrollPosition();
+ if ((deltaX < 0 && maxForwardScrollDelta.width() > 0)
+ || (deltaX > 0 && maxBackwardScrollDelta.width() > 0)
+ || (deltaY < 0 && maxForwardScrollDelta.height() > 0)
+ || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) {
+ e.accept();
+ if (e.granularity() == ScrollByPageWheelEvent) {
+ ASSERT(!e.deltaX());
+ bool negative = deltaY < 0;
+ deltaY = max(max(static_cast<float>(m_scrollableArea->visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(m_scrollableArea->visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f);
+ if (negative)
+ deltaY = -deltaY;
+ }
+
+ if (deltaY)
+ scroll(VerticalScrollbar, ScrollByPixel, verticalScrollbar->pixelStep(), -deltaY);
+ if (deltaX)
+ scroll(HorizontalScrollbar, ScrollByPixel, horizontalScrollbar->pixelStep(), -deltaX);
+ }
+}
+
+#if ENABLE(GESTURE_EVENTS)
+void ScrollAnimator::handleGestureEvent(const PlatformGestureEvent&)
+{
+}
+#endif
+
FloatPoint ScrollAnimator::currentPosition() const
{
return FloatPoint(m_currentPosX, m_currentPosY);
diff --git a/Source/WebCore/platform/ScrollAnimator.h b/Source/WebCore/platform/ScrollAnimator.h
index 155c6e5..060511c 100644
--- a/Source/WebCore/platform/ScrollAnimator.h
+++ b/Source/WebCore/platform/ScrollAnimator.h
@@ -37,7 +37,13 @@
namespace WebCore {
class FloatPoint;
+class PlatformWheelEvent;
class ScrollableArea;
+class Scrollbar;
+
+#if ENABLE(GESTURE_EVENTS)
+class PlatformGestureEvent;
+#endif
class ScrollAnimator {
public:
@@ -53,12 +59,34 @@ public:
virtual void scrollToOffsetWithoutAnimation(const FloatPoint&);
+ ScrollableArea* scrollableArea() const { return m_scrollableArea; }
+
+ virtual void handleWheelEvent(PlatformWheelEvent&);
+#if ENABLE(GESTURE_EVENTS)
+ virtual void handleGestureEvent(const PlatformGestureEvent&);
+#endif
+
FloatPoint currentPosition() const;
+ virtual void contentAreaWillPaint() const { }
+ virtual void mouseEnteredContentArea() const { }
+ virtual void mouseExitedContentArea() const { }
+ virtual void mouseMovedInContentArea() const { }
+ virtual void willStartLiveResize() { }
+ virtual void contentsResized() const { }
+ virtual void willEndLiveResize() { }
+ virtual void contentAreaDidShow() const { }
+ virtual void contentAreaDidHide() const { }
+
+ virtual void didAddVerticalScrollbar(Scrollbar*) { }
+ virtual void willRemoveVerticalScrollbar(Scrollbar*) { }
+ virtual void didAddHorizontalScrollbar(Scrollbar*) { }
+ virtual void willRemoveHorizontalScrollbar(Scrollbar*) { }
+
protected:
ScrollAnimator(ScrollableArea*);
- void notityPositionChanged();
+ virtual void notityPositionChanged();
ScrollableArea* m_scrollableArea;
float m_currentPosX; // We avoid using a FloatPoint in order to reduce
diff --git a/Source/WebCore/platform/ScrollView.cpp b/Source/WebCore/platform/ScrollView.cpp
index b07c743..cab58e4 100644
--- a/Source/WebCore/platform/ScrollView.cpp
+++ b/Source/WebCore/platform/ScrollView.cpp
@@ -31,12 +31,12 @@
#include "HostWindow.h"
#include "PlatformMouseEvent.h"
#include "PlatformWheelEvent.h"
+#include "ScrollAnimator.h"
#include "Scrollbar.h"
#include "ScrollbarTheme.h"
#include <wtf/StdLibExtras.h>
-
-using std::max;
+using namespace std;
namespace WebCore {
@@ -92,8 +92,10 @@ void ScrollView::setHasHorizontalScrollbar(bool hasBar)
if (hasBar && !m_horizontalScrollbar) {
m_horizontalScrollbar = createScrollbar(HorizontalScrollbar);
addChild(m_horizontalScrollbar.get());
+ ScrollableArea::didAddHorizontalScrollbar(m_horizontalScrollbar.get());
m_horizontalScrollbar->styleChanged();
} else if (!hasBar && m_horizontalScrollbar) {
+ ScrollableArea::willRemoveHorizontalScrollbar(m_horizontalScrollbar.get());
removeChild(m_horizontalScrollbar.get());
m_horizontalScrollbar = 0;
}
@@ -110,8 +112,10 @@ void ScrollView::setHasVerticalScrollbar(bool hasBar)
if (hasBar && !m_verticalScrollbar) {
m_verticalScrollbar = createScrollbar(VerticalScrollbar);
addChild(m_verticalScrollbar.get());
+ ScrollableArea::didAddVerticalScrollbar(m_verticalScrollbar.get());
m_verticalScrollbar->styleChanged();
} else if (!hasBar && m_verticalScrollbar) {
+ ScrollableArea::willRemoveVerticalScrollbar(m_verticalScrollbar.get());
removeChild(m_verticalScrollbar.get());
m_verticalScrollbar = 0;
}
@@ -344,16 +348,49 @@ IntPoint ScrollView::adjustScrollPositionWithinRange(const IntPoint& scrollPoint
return newScrollPosition;
}
+int ScrollView::scrollXForFixedPosition() const
+{
+ int x = scrollX();
+ if (x < 0)
+ x = 0;
+ else if (x > contentsWidth() - visibleContentRect().width())
+ x = contentsWidth() - visibleContentRect().width();
+ return x;
+}
+
+int ScrollView::scrollYForFixedPosition() const
+{
+ int y = scrollY();
+ if (y < 0)
+ y = 0;
+ else if (y > contentsHeight() - visibleContentRect().height())
+ y = contentsHeight() - visibleContentRect().height();
+ return y;
+}
+
+IntSize ScrollView::scrollOffsetForFixedPosition() const
+{
+ return IntSize(scrollXForFixedPosition(), scrollYForFixedPosition());
+}
+
int ScrollView::scrollSize(ScrollbarOrientation orientation) const
{
Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get();
return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0;
}
+void ScrollView::didCompleteRubberBand(const IntSize&) const
+{
+}
+
void ScrollView::setScrollOffset(const IntPoint& offset)
{
- int horizontalOffset = std::max(std::min(offset.x(), contentsWidth() - visibleWidth()), 0);
- int verticalOffset = std::max(std::min(offset.y(), contentsHeight() - visibleHeight()), 0);
+ int horizontalOffset = offset.x();
+ int verticalOffset = offset.y();
+ if (constrainsScrollingToContentEdge()) {
+ horizontalOffset = max(min(horizontalOffset, contentsWidth() - visibleWidth()), 0);
+ verticalOffset = max(min(verticalOffset, contentsHeight() - visibleHeight()), 0);
+ }
IntSize newOffset = m_scrollOffset;
newOffset.setWidth(horizontalOffset - m_scrollOrigin.x());
@@ -425,6 +462,22 @@ bool ScrollView::logicalScroll(ScrollLogicalDirection direction, ScrollGranulari
return scroll(logicalToPhysical(direction, isVerticalDocument(), isFlippedDocument()), granularity);
}
+IntSize ScrollView::overhangAmount() const
+{
+ IntSize stretch;
+ if (scrollY() < 0)
+ stretch.setHeight(scrollY());
+ else if (scrollY() > contentsHeight() - visibleContentRect().height())
+ stretch.setHeight(scrollY() - (contentsHeight() - visibleContentRect().height()));
+
+ if (scrollX() < 0)
+ stretch.setWidth(scrollX());
+ else if (scrollX() > contentsWidth() - visibleContentRect().width())
+ stretch.setWidth(scrollX() - (contentsWidth() - visibleContentRect().width()));
+
+ return stretch;
+}
+
void ScrollView::windowResizerRectChanged()
{
if (platformWidget())
@@ -528,7 +581,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
m_inUpdateScrollbars = true;
- IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset.width(), desiredOffset.height()));
+ IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset));
IntSize scroll(scrollPoint.x(), scrollPoint.y());
if (m_horizontalScrollbar) {
@@ -580,6 +633,12 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
ScrollableArea::scrollToOffsetWithoutAnimation(FloatPoint(scroll.width() + m_scrollOrigin.x(), scroll.height() + m_scrollOrigin.y()));
+ // Make sure the scrollbar offsets are up to date.
+ if (m_horizontalScrollbar)
+ m_horizontalScrollbar->offsetDidChange();
+ if (m_verticalScrollbar)
+ m_verticalScrollbar->offsetDidChange();
+
m_inUpdateScrollbars = false;
}
@@ -594,6 +653,14 @@ void ScrollView::scrollContents(const IntSize& scrollDelta)
// with the clip rect every time to keep it smooth.
IntRect clipRect = windowClipRect();
IntRect scrollViewRect = convertToContainingWindow(IntRect(0, 0, visibleWidth(), visibleHeight()));
+ if (ScrollbarTheme::nativeTheme()->usesOverlayScrollbars()) {
+ int verticalScrollbarWidth = verticalScrollbar() ? verticalScrollbar()->width() : 0;
+ int horizontalScrollbarHeight = horizontalScrollbar() ? horizontalScrollbar()->height() : 0;
+
+ scrollViewRect.setWidth(scrollViewRect.width() - verticalScrollbarWidth);
+ scrollViewRect.setHeight(scrollViewRect.height() - horizontalScrollbarHeight);
+ }
+
IntRect updateRect = clipRect;
updateRect.intersect(scrollViewRect);
@@ -761,32 +828,18 @@ void ScrollView::wheelEvent(PlatformWheelEvent& e)
return;
}
- // Accept the event if we have a scrollbar in that direction and can still
- // scroll any further.
- float deltaX = m_horizontalScrollbar ? e.deltaX() : 0;
- float deltaY = m_verticalScrollbar ? e.deltaY() : 0;
-
- IntSize maxForwardScrollDelta = maximumScrollPosition() - scrollPosition();
- IntSize maxBackwardScrollDelta = scrollPosition() - minimumScrollPosition();
- if ((deltaX < 0 && maxForwardScrollDelta.width() > 0)
- || (deltaX > 0 && maxBackwardScrollDelta.width() >0)
- || (deltaY < 0 && maxForwardScrollDelta.height() > 0)
- || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) {
- e.accept();
- if (e.granularity() == ScrollByPageWheelEvent) {
- ASSERT(!e.deltaX());
- bool negative = deltaY < 0;
- deltaY = max(max(static_cast<float>(visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f);
- if (negative)
- deltaY = -deltaY;
- }
+ ScrollableArea::handleWheelEvent(e);
+}
- if (deltaY)
- ScrollableArea::scroll(ScrollUp, ScrollByPixel, deltaY);
- if (deltaX)
- ScrollableArea::scroll(ScrollLeft, ScrollByPixel, deltaX);
- }
+#if ENABLE(GESTURE_EVENTS)
+void ScrollView::gestureEvent(const PlatformGestureEvent& gestureEvent)
+{
+ if (platformWidget())
+ return;
+
+ ScrollableArea::handleGestureEvent(gestureEvent);
}
+#endif
void ScrollView::setFrameRect(const IntRect& newRect)
{
@@ -898,6 +951,8 @@ void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
if (context->paintingDisabled() && !context->updatingControlTints())
return;
+ scrollAnimator()->contentAreaWillPaint();
+
IntRect documentDirtyRect = rect;
documentDirtyRect.intersect(frameRect());
@@ -917,6 +972,13 @@ void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
context->restore();
+ IntRect horizontalOverhangRect;
+ IntRect verticalOverhangRect;
+ calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect);
+
+ if (rect.intersects(horizontalOverhangRect) || rect.intersects(verticalOverhangRect))
+ paintOverhangAreas(context, horizontalOverhangRect, verticalOverhangRect, rect);
+
// Now paint the scrollbars.
if (!m_scrollbarsSuppressed && (m_horizontalScrollbar || m_verticalScrollbar)) {
context->save();
@@ -935,6 +997,55 @@ void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
paintPanScrollIcon(context);
}
+void ScrollView::calculateOverhangAreasForPainting(IntRect& horizontalOverhangRect, IntRect& verticalOverhangRect)
+{
+ bool hasOverlayScrollbars = ScrollbarTheme::nativeTheme()->usesOverlayScrollbars();
+ int verticalScrollbarWidth = (verticalScrollbar() && !hasOverlayScrollbars) ? verticalScrollbar()->width() : 0;
+ int horizontalScrollbarHeight = (horizontalScrollbar() && !hasOverlayScrollbars) ? horizontalScrollbar()->height() : 0;
+
+ if (scrollY() < 0) {
+ horizontalOverhangRect = frameRect();
+ horizontalOverhangRect.setHeight(-scrollY());
+ } else if (scrollY() > contentsHeight() - visibleContentRect().height()) {
+ int height = scrollY() - (contentsHeight() - visibleContentRect().height());
+ horizontalOverhangRect = frameRect();
+ horizontalOverhangRect.setY(frameRect().maxY() - height - horizontalScrollbarHeight);
+ horizontalOverhangRect.setHeight(height);
+ }
+
+ if (scrollX() < 0) {
+ verticalOverhangRect.setWidth(-scrollX());
+ verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhangRect.height());
+ verticalOverhangRect.setX(frameRect().x());
+ if (horizontalOverhangRect.y() == frameRect().y())
+ verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.height());
+ else
+ verticalOverhangRect.setY(frameRect().y());
+ } else if (scrollX() > contentsWidth() - visibleContentRect().width()) {
+ int width = scrollX() - (contentsWidth() - visibleContentRect().width());
+ verticalOverhangRect.setWidth(width);
+ verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhangRect.height());
+ verticalOverhangRect.setX(frameRect().maxX() - width - verticalScrollbarWidth);
+ if (horizontalOverhangRect.y() == frameRect().y())
+ verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.height());
+ else
+ verticalOverhangRect.setY(frameRect().y());
+ }
+}
+
+void ScrollView::paintOverhangAreas(GraphicsContext* context, const IntRect& horizontalOverhangRect, const IntRect& verticalOverhangRect, const IntRect&)
+{
+ // FIXME: This should be checking the dirty rect.
+
+ context->setFillColor(Color::white, ColorSpaceDeviceRGB);
+ if (!horizontalOverhangRect.isEmpty())
+ context->fillRect(horizontalOverhangRect);
+
+ context->setFillColor(Color::white, ColorSpaceDeviceRGB);
+ if (!verticalOverhangRect.isEmpty())
+ context->fillRect(verticalOverhangRect);
+}
+
bool ScrollView::isPointInScrollbarCorner(const IntPoint& windowPoint)
{
if (!scrollbarCornerPresent())
@@ -1070,7 +1181,7 @@ void ScrollView::removePanScrollIcon()
hostWindow()->invalidateContentsAndWindow(IntRect(m_panScrollIconPoint, IntSize(panIconSizeLength, panIconSizeLength)), true /*immediate*/);
}
-void ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePosition)
+void ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePositionAtAll, bool updatePositionSynchronously)
{
if (m_scrollOrigin == origin)
return;
@@ -1078,12 +1189,12 @@ void ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePosition)
m_scrollOrigin = origin;
if (platformWidget()) {
- platformSetScrollOrigin(origin, updatePosition);
+ platformSetScrollOrigin(origin, updatePositionAtAll, updatePositionSynchronously);
return;
}
// Update if the scroll origin changes, since our position will be different if the content size did not change.
- if (updatePosition)
+ if (updatePositionAtAll && updatePositionSynchronously)
updateScrollbars(scrollOffset());
}
@@ -1117,7 +1228,7 @@ void ScrollView::platformSetScrollbarsSuppressed(bool)
{
}
-void ScrollView::platformSetScrollOrigin(const IntPoint&, bool updatePosition)
+void ScrollView::platformSetScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updatePositionSynchronously)
{
}
diff --git a/Source/WebCore/platform/ScrollView.h b/Source/WebCore/platform/ScrollView.h
index cb895f6..7df735a 100644
--- a/Source/WebCore/platform/ScrollView.h
+++ b/Source/WebCore/platform/ScrollView.h
@@ -51,7 +51,6 @@ class wxScrollWinEvent;
namespace WebCore {
class HostWindow;
-class PlatformWheelEvent;
class Scrollbar;
class ScrollView : public Widget, public ScrollableArea {
@@ -62,7 +61,8 @@ public:
virtual int scrollSize(ScrollbarOrientation orientation) const;
virtual int scrollPosition(Scrollbar*) const;
virtual void setScrollOffset(const IntPoint&);
-
+ virtual void didCompleteRubberBand(const IntSize&) const;
+
// NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
virtual void scrollTo(const IntSize& newOffset);
@@ -162,7 +162,7 @@ public:
int contentsWidth() const { return contentsSize().width(); }
int contentsHeight() const { return contentsSize().height(); }
virtual void setContentsSize(const IntSize&);
-
+
#if PLATFORM(ANDROID)
int actualWidth() const;
int actualHeight() const;
@@ -179,7 +179,14 @@ public:
IntPoint adjustScrollPositionWithinRange(const IntPoint&) const;
int scrollX() const { return scrollPosition().x(); }
int scrollY() const { return scrollPosition().y(); }
-
+
+ // Functions for querying the current scrolled position, negating the effects of overhang.
+ int scrollXForFixedPosition() const;
+ int scrollYForFixedPosition() const;
+ IntSize scrollOffsetForFixedPosition() const;
+
+ IntSize overhangAmount() const;
+
// Functions for scrolling the view.
void setScrollPosition(const IntPoint&);
void scrollBy(const IntSize& s) { return setScrollPosition(scrollPosition() + s); }
@@ -235,6 +242,9 @@ public:
// On Mac the underlying NSScrollView just does the scrolling, but on other platforms
// (like Windows), we need this function in order to do the scroll ourselves.
void wheelEvent(PlatformWheelEvent&);
+#if ENABLE(GESTURE_EVENTS)
+ void gestureEvent(const PlatformGestureEvent&);
+#endif
IntPoint convertChildToSelf(const Widget* child, const IntPoint& point) const
{
@@ -282,7 +292,10 @@ protected:
virtual void repaintContentRectangle(const IntRect&, bool now = false);
virtual void paintContents(GraphicsContext*, const IntRect& damageRect) = 0;
-
+
+ void calculateOverhangAreasForPainting(IntRect& horizontalOverhangRect, IntRect& verticalOverhangRect);
+ virtual void paintOverhangAreas(GraphicsContext*, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect);
+
virtual void contentsResized() = 0;
virtual void visibleContentsResized() = 0;
@@ -299,7 +312,7 @@ protected:
// Scroll the content by invalidating everything.
virtual void scrollContentsSlowPath(const IntRect& updateRect);
- void setScrollOrigin(const IntPoint&, bool updatePosition);
+ void setScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updatePositionSynchronously);
IntPoint scrollOrigin() { return m_scrollOrigin; }
// Subclassed by FrameView to check the writing-mode of the document.
@@ -383,7 +396,7 @@ private:
void platformRepaintContentRectangle(const IntRect&, bool now);
bool platformIsOffscreen() const;
- void platformSetScrollOrigin(const IntPoint&, bool updatePosition);
+ void platformSetScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updatePositionSynchronously);
#if PLATFORM(ANDROID)
int platformActualWidth() const;
diff --git a/Source/WebCore/platform/ScrollableArea.cpp b/Source/WebCore/platform/ScrollableArea.cpp
index 176cb7e..00017bd 100644
--- a/Source/WebCore/platform/ScrollableArea.cpp
+++ b/Source/WebCore/platform/ScrollableArea.cpp
@@ -35,12 +35,15 @@
#include "FloatPoint.h"
#include "PlatformWheelEvent.h"
#include "ScrollAnimator.h"
+#include "ScrollbarTheme.h"
#include <wtf/PassOwnPtr.h>
namespace WebCore {
ScrollableArea::ScrollableArea()
: m_scrollAnimator(ScrollAnimator::create(this))
+ , m_constrainsScrollingToContentEdge(true)
+ , m_inLiveResize(false)
{
}
@@ -108,16 +111,72 @@ void ScrollableArea::scrollToYOffsetWithoutAnimation(float y)
scrollToOffsetWithoutAnimation(FloatPoint(m_scrollAnimator->currentPosition().x(), y));
}
+void ScrollableArea::handleWheelEvent(PlatformWheelEvent& wheelEvent)
+{
+ m_scrollAnimator->handleWheelEvent(wheelEvent);
+}
+
+#if ENABLE(GESTURE_EVENTS)
+void ScrollableArea::handleGestureEvent(const PlatformGestureEvent& gestureEvent)
+{
+ m_scrollAnimator->handleGestureEvent(gestureEvent);
+}
+#endif
+
void ScrollableArea::setScrollOffsetFromAnimation(const IntPoint& offset)
{
// Tell the derived class to scroll its contents.
setScrollOffset(offset);
+ bool hasOverlayScrollbars = ScrollbarTheme::nativeTheme()->usesOverlayScrollbars();
+
// Tell the scrollbars to update their thumb postions.
- if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar())
+ if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) {
horizontalScrollbar->offsetDidChange();
- if (Scrollbar* verticalScrollbar = this->verticalScrollbar())
+ if (hasOverlayScrollbars)
+ horizontalScrollbar->invalidate();
+ }
+ if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) {
verticalScrollbar->offsetDidChange();
+ if (hasOverlayScrollbars)
+ verticalScrollbar->invalidate();
+ }
+}
+
+void ScrollableArea::willStartLiveResize()
+{
+ if (m_inLiveResize)
+ return;
+ m_inLiveResize = true;
+ scrollAnimator()->willStartLiveResize();
+}
+
+void ScrollableArea::willEndLiveResize()
+{
+ if (!m_inLiveResize)
+ return;
+ m_inLiveResize = false;
+ scrollAnimator()->willEndLiveResize();
+}
+
+void ScrollableArea::didAddVerticalScrollbar(Scrollbar* scrollbar)
+{
+ scrollAnimator()->didAddVerticalScrollbar(scrollbar);
+}
+
+void ScrollableArea::willRemoveVerticalScrollbar(Scrollbar* scrollbar)
+{
+ scrollAnimator()->willRemoveVerticalScrollbar(scrollbar);
+}
+
+void ScrollableArea::didAddHorizontalScrollbar(Scrollbar* scrollbar)
+{
+ scrollAnimator()->didAddHorizontalScrollbar(scrollbar);
+}
+
+void ScrollableArea::willRemoveHorizontalScrollbar(Scrollbar* scrollbar)
+{
+ scrollAnimator()->willRemoveHorizontalScrollbar(scrollbar);
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/ScrollableArea.h b/Source/WebCore/platform/ScrollableArea.h
index 148ecdb..9839abc 100644
--- a/Source/WebCore/platform/ScrollableArea.h
+++ b/Source/WebCore/platform/ScrollableArea.h
@@ -33,6 +33,7 @@
namespace WebCore {
class FloatPoint;
+class PlatformGestureEvent;
class PlatformWheelEvent;
class ScrollAnimator;
@@ -47,6 +48,26 @@ public:
void scrollToXOffsetWithoutAnimation(float x);
void scrollToYOffsetWithoutAnimation(float x);
+ void handleWheelEvent(PlatformWheelEvent&);
+#if ENABLE(GESTURE_EVENTS)
+ void handleGestureEvent(const PlatformGestureEvent&);
+#endif
+
+ // Functions for controlling if you can scroll past the end of the document.
+ bool constrainsScrollingToContentEdge() const { return m_constrainsScrollingToContentEdge; }
+ void setConstrainsScrollingToContentEdge(bool constrainsScrollingToContentEdge) { m_constrainsScrollingToContentEdge = constrainsScrollingToContentEdge; }
+
+ bool inLiveResize() const { return m_inLiveResize; }
+ void willStartLiveResize();
+ void willEndLiveResize();
+
+ void didAddVerticalScrollbar(Scrollbar*);
+ void willRemoveVerticalScrollbar(Scrollbar*);
+ void didAddHorizontalScrollbar(Scrollbar*);
+ void willRemoveHorizontalScrollbar(Scrollbar*);
+
+ ScrollAnimator* scrollAnimator() const { return m_scrollAnimator.get(); }
+
virtual int scrollSize(ScrollbarOrientation) const = 0;
virtual int scrollPosition(Scrollbar*) const = 0;
virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) = 0;
@@ -58,7 +79,6 @@ public:
// scroll of the content.
virtual void setScrollOffset(const IntPoint&) = 0;
-
// Convert points and rects between the scrollbar and its containing view.
// The client needs to implement these in order to be aware of layout effects
// like CSS transforms.
@@ -82,12 +102,28 @@ public:
virtual Scrollbar* horizontalScrollbar() const { return 0; }
virtual Scrollbar* verticalScrollbar() const { return 0; }
+ virtual IntPoint scrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
+ virtual IntPoint minimumScrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
+ virtual IntPoint maximumScrollPosition() const { ASSERT_NOT_REACHED(); return IntPoint(); }
+ virtual IntRect visibleContentRect(bool = false) const { ASSERT_NOT_REACHED(); return IntRect(); }
+ virtual int visibleHeight() const { ASSERT_NOT_REACHED(); return 0; }
+ virtual int visibleWidth() const { ASSERT_NOT_REACHED(); return 0; }
+ virtual IntSize contentsSize() const { ASSERT_NOT_REACHED(); return IntSize(); }
+ virtual IntSize overhangAmount() const { ASSERT_NOT_REACHED(); return IntSize(); }
+ virtual IntPoint currentMousePosition() const { return IntPoint(); }
+ virtual void didCompleteRubberBand(const IntSize&) const { ASSERT_NOT_REACHED(); }
+
+ virtual bool scrollbarWillRenderIntoCompositingLayer() const { return false; }
+
private:
// NOTE: Only called from the ScrollAnimator.
friend class ScrollAnimator;
void setScrollOffsetFromAnimation(const IntPoint&);
OwnPtr<ScrollAnimator> m_scrollAnimator;
+ bool m_constrainsScrollingToContentEdge;
+
+ bool m_inLiveResize;
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/Scrollbar.cpp b/Source/WebCore/platform/Scrollbar.cpp
index 4c625f4..5d9a43d 100644
--- a/Source/WebCore/platform/Scrollbar.cpp
+++ b/Source/WebCore/platform/Scrollbar.cpp
@@ -196,7 +196,7 @@ void Scrollbar::autoscrollPressedPart(double delay)
}
// Handle the arrows and track.
- if (scrollableArea()->scroll(pressedPartScrollDirection(), pressedPartScrollGranularity()))
+ if (m_scrollableArea && m_scrollableArea->scroll(pressedPartScrollDirection(), pressedPartScrollGranularity()))
startTimerIfNeeded(delay);
}
@@ -268,7 +268,8 @@ void Scrollbar::moveThumb(int pos)
if (delta) {
float newPosition = static_cast<float>(thumbPos + delta) * maximum() / (trackLen - thumbLen);
- scrollableArea()->scrollToOffsetWithoutAnimation(m_orientation, newPosition);
+ if (m_scrollableArea)
+ m_scrollableArea->scrollToOffsetWithoutAnimation(m_orientation, newPosition);
}
}
@@ -300,9 +301,10 @@ void Scrollbar::setPressedPart(ScrollbarPart part)
bool Scrollbar::mouseMoved(const PlatformMouseEvent& evt)
{
if (m_pressedPart == ThumbPart) {
- if (theme()->shouldSnapBackToDragOrigin(this, evt))
- scrollableArea()->scrollToOffsetWithoutAnimation(m_orientation, m_dragOrigin);
- else {
+ if (theme()->shouldSnapBackToDragOrigin(this, evt)) {
+ if (m_scrollableArea)
+ m_scrollableArea->scrollToOffsetWithoutAnimation(m_orientation, m_dragOrigin);
+ } else {
moveThumb(m_orientation == HorizontalScrollbar ?
convertFromContainingWindow(evt.pos()).x() :
convertFromContainingWindow(evt.pos()).y());
@@ -393,14 +395,14 @@ void Scrollbar::setFrameRect(const IntRect& rect)
IntRect resizerRect = view->convertFromContainingWindow(view->windowResizerRect());
if (rect.intersects(resizerRect)) {
if (orientation() == HorizontalScrollbar) {
- int overlap = rect.right() - resizerRect.x();
- if (overlap > 0 && resizerRect.right() >= rect.right()) {
+ int overlap = rect.maxX() - resizerRect.x();
+ if (overlap > 0 && resizerRect.maxX() >= rect.maxX()) {
adjustedRect.setWidth(rect.width() - overlap);
overlapsResizer = true;
}
} else {
- int overlap = rect.bottom() - resizerRect.y();
- if (overlap > 0 && resizerRect.bottom() >= rect.bottom()) {
+ int overlap = rect.maxY() - resizerRect.y();
+ if (overlap > 0 && resizerRect.maxY() >= rect.maxY()) {
adjustedRect.setHeight(rect.height() - overlap);
overlapsResizer = true;
}
diff --git a/Source/WebCore/platform/ScrollbarThemeComposite.cpp b/Source/WebCore/platform/ScrollbarThemeComposite.cpp
index 7bc266f..26f1494 100644
--- a/Source/WebCore/platform/ScrollbarThemeComposite.cpp
+++ b/Source/WebCore/platform/ScrollbarThemeComposite.cpp
@@ -37,6 +37,8 @@
#include "ScrollableArea.h"
#include "Settings.h"
+using namespace std;
+
namespace WebCore {
#if PLATFORM(WIN)
@@ -246,18 +248,28 @@ void ScrollbarThemeComposite::splitTrack(Scrollbar* scrollbar, const IntRect& un
if (scrollbar->orientation() == HorizontalScrollbar) {
thumbRect = IntRect(trackRect.x() + thumbPos, trackRect.y() + (trackRect.height() - thickness) / 2, thumbLength(scrollbar), thickness);
beforeThumbRect = IntRect(trackRect.x(), trackRect.y(), thumbPos + thumbRect.width() / 2, trackRect.height());
- afterThumbRect = IntRect(trackRect.x() + beforeThumbRect.width(), trackRect.y(), trackRect.right() - beforeThumbRect.right(), trackRect.height());
+ afterThumbRect = IntRect(trackRect.x() + beforeThumbRect.width(), trackRect.y(), trackRect.maxX() - beforeThumbRect.maxX(), trackRect.height());
} else {
thumbRect = IntRect(trackRect.x() + (trackRect.width() - thickness) / 2, trackRect.y() + thumbPos, thickness, thumbLength(scrollbar));
beforeThumbRect = IntRect(trackRect.x(), trackRect.y(), trackRect.width(), thumbPos + thumbRect.height() / 2);
- afterThumbRect = IntRect(trackRect.x(), trackRect.y() + beforeThumbRect.height(), trackRect.width(), trackRect.bottom() - beforeThumbRect.bottom());
+ afterThumbRect = IntRect(trackRect.x(), trackRect.y() + beforeThumbRect.height(), trackRect.width(), trackRect.maxY() - beforeThumbRect.maxY());
}
}
+// Returns the size represented by track taking into account scrolling past
+// the end of the document.
+static float usedTotalSize(Scrollbar* scrollbar)
+{
+ float overhangAtStart = -scrollbar->currentPos();
+ float overhangAtEnd = scrollbar->currentPos() + scrollbar->visibleSize() - scrollbar->totalSize();
+ float overhang = max(0.0f, max(overhangAtStart, overhangAtEnd));
+ return scrollbar->totalSize() + overhang;
+}
+
int ScrollbarThemeComposite::thumbPosition(Scrollbar* scrollbar)
{
if (scrollbar->enabled())
- return scrollbar->currentPos() * (trackLength(scrollbar) - thumbLength(scrollbar)) / scrollbar->maximum();
+ return max(0.0f, scrollbar->currentPos()) * (trackLength(scrollbar) - thumbLength(scrollbar)) / (usedTotalSize(scrollbar) - scrollbar->visibleSize());
return 0;
}
@@ -266,7 +278,7 @@ int ScrollbarThemeComposite::thumbLength(Scrollbar* scrollbar)
if (!scrollbar->enabled())
return 0;
- float proportion = (float)scrollbar->visibleSize() / scrollbar->totalSize();
+ float proportion = scrollbar->visibleSize() / usedTotalSize(scrollbar);
int trackLen = trackLength(scrollbar);
int length = proportion * trackLen;
length = max(length, minimumThumbLength(scrollbar));
diff --git a/Source/WebCore/platform/URLString.h b/Source/WebCore/platform/URLString.h
new file mode 100644
index 0000000..78e4b33
--- /dev/null
+++ b/Source/WebCore/platform/URLString.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2011 Google, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef URLString_h
+#define URLString_h
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class KURL;
+
+class URLString {
+public:
+ const String& string() const { return m_string; }
+
+private:
+ friend class KURL;
+
+ explicit URLString(const String& string)
+ : m_string(string)
+ {
+ }
+
+ String m_string;
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/platform/android/TemporaryLinkStubs.cpp b/Source/WebCore/platform/android/TemporaryLinkStubs.cpp
index d3c8183..a046775 100644
--- a/Source/WebCore/platform/android/TemporaryLinkStubs.cpp
+++ b/Source/WebCore/platform/android/TemporaryLinkStubs.cpp
@@ -76,6 +76,8 @@
#include "Widget.h"
#include <stdio.h>
#include <stdlib.h>
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
#include <wtf/text/CString.h>
#if USE(JSC)
diff --git a/Source/WebCore/platform/audio/FFTFrame.h b/Source/WebCore/platform/audio/FFTFrame.h
index 1a82ef0..f6e2066 100644
--- a/Source/WebCore/platform/audio/FFTFrame.h
+++ b/Source/WebCore/platform/audio/FFTFrame.h
@@ -35,12 +35,18 @@
#include <Accelerate/Accelerate.h>
#endif
-#if !OS(DARWIN) && USE(WEBAUDIO_MKL)
+#if !OS(DARWIN)
+#if USE(WEBAUDIO_MKL)
#include "mkl_dfti.h"
+#endif // USE(WEBAUDIO_MKL)
+#if USE(WEBAUDIO_FFTW)
+#include "fftw3.h"
+#endif // USE(WEBAUDIO_FFTW)
#endif
#include <wtf/PassOwnPtr.h>
#include <wtf/Platform.h>
+#include <wtf/Threading.h>
namespace WebCore {
@@ -56,6 +62,7 @@ public:
FFTFrame(const FFTFrame& frame);
~FFTFrame();
+ static void initialize();
static void cleanup();
void doFFT(float* data);
void doInverseFFT(float* data);
@@ -98,8 +105,8 @@ private:
DSPSplitComplex m_frame;
AudioFloatArray m_realData;
AudioFloatArray m_imagData;
-#endif // OS(DARWIN)
-#if !OS(DARWIN) && USE(WEBAUDIO_MKL)
+#else // !OS(DARWIN)
+#if USE(WEBAUDIO_MKL)
// Interleaves the planar real and imaginary data and returns a
// pointer to the resulting storage which can be used for in-place
// or out-of-place operations. FIXME: ideally all of the MKL
@@ -115,7 +122,31 @@ private:
AudioFloatArray m_complexData;
AudioFloatArray m_realData;
AudioFloatArray m_imagData;
-#endif // !OS(DARWIN) && USE(WEBAUDIO_MKL)
+#endif // USE(WEBAUDIO_MKL)
+#if USE(WEBAUDIO_FFTW)
+ fftwf_plan m_forwardPlan;
+ fftwf_plan m_backwardPlan;
+
+ enum Direction {
+ Forward,
+ Backward
+ };
+
+ // Both the real and imaginary data are stored here.
+ // The real data is stored first, followed by three float values of padding.
+ // The imaginary data is stored after the padding and is 16-byte aligned (if m_data itself is aligned).
+ // The reason we don't use separate arrays for real and imaginary is because the FFTW plans are shared
+ // between FFTFrame instances and require that the real and imaginary data pointers be the same distance apart.
+ AudioFloatArray m_data;
+
+ static Mutex *s_planLock;
+ static fftwf_plan* fftwForwardPlans;
+ static fftwf_plan* fftwBackwardPlans;
+
+ static fftwf_plan fftwPlanForSize(unsigned fftSize, Direction,
+ float*, float*, float*);
+#endif // USE(WEBAUDIO_FFTW)
+#endif // !OS(DARWIN)
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/audio/FFTFrameStub.cpp b/Source/WebCore/platform/audio/FFTFrameStub.cpp
index 17405c9..c76c0e2 100644
--- a/Source/WebCore/platform/audio/FFTFrameStub.cpp
+++ b/Source/WebCore/platform/audio/FFTFrameStub.cpp
@@ -36,9 +36,9 @@
namespace WebCore {
// Normal constructor: allocates for a given fftSize.
-FFTFrame::FFTFrame(unsigned fftSize)
- : m_FFTSize(fftSize)
- , m_log2FFTSize(static_cast<unsigned>(log2(fftSize)))
+FFTFrame::FFTFrame(unsigned /*fftSize*/)
+ : m_FFTSize(0)
+ , m_log2FFTSize(0)
{
ASSERT_NOT_REACHED();
}
diff --git a/Source/WebCore/platform/audio/chromium/AudioBusChromium.cpp b/Source/WebCore/platform/audio/chromium/AudioBusChromium.cpp
index 83ab9bf..de44b1c 100644
--- a/Source/WebCore/platform/audio/chromium/AudioBusChromium.cpp
+++ b/Source/WebCore/platform/audio/chromium/AudioBusChromium.cpp
@@ -42,7 +42,7 @@ PassOwnPtr<AudioBus> AudioBus::loadPlatformResource(const char* name, double sam
PassOwnPtr<AudioBus> createBusFromInMemoryAudioFile(const void* data, size_t dataSize, bool mixToMono, double sampleRate)
{
OwnPtr<AudioBus> audioBus = PlatformBridge::decodeAudioFileData(static_cast<const char*>(data), dataSize, sampleRate);
- if (audioBus->numberOfChannels() == 2 && mixToMono) {
+ if (audioBus.get() && audioBus->numberOfChannels() == 2 && mixToMono) {
OwnPtr<AudioBus> monoAudioBus = adoptPtr(new AudioBus(1, audioBus->length()));
// FIXME: AudioBus::copyFrom() should be able to do a downmix to mono.
diff --git a/Source/WebCore/platform/audio/fftw/FFTFrameFFTW.cpp b/Source/WebCore/platform/audio/fftw/FFTFrameFFTW.cpp
new file mode 100644
index 0000000..878ed9f
--- /dev/null
+++ b/Source/WebCore/platform/audio/fftw/FFTFrameFFTW.cpp
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// FFTFrame implementation using the FFTW library.
+
+#include "config.h"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "FFTFrame.h"
+
+#include <wtf/MathExtras.h>
+
+namespace WebCore {
+
+const int kMaxFFTPow2Size = 24;
+
+fftwf_plan* FFTFrame::fftwForwardPlans = 0;
+fftwf_plan* FFTFrame::fftwBackwardPlans = 0;
+
+Mutex* FFTFrame::s_planLock = 0;
+
+namespace {
+
+unsigned unpackedFFTWDataSize(unsigned fftSize)
+{
+ return fftSize / 2 + 1;
+}
+
+} // anonymous namespace
+
+
+// Normal constructor: allocates for a given fftSize.
+FFTFrame::FFTFrame(unsigned fftSize)
+ : m_FFTSize(fftSize)
+ , m_log2FFTSize(static_cast<unsigned>(log2(fftSize)))
+ , m_forwardPlan(0)
+ , m_backwardPlan(0)
+ , m_data(2 * (3 + unpackedFFTWDataSize(fftSize))) // enough space for real and imaginary data plus 16-byte alignment padding
+{
+ // We only allow power of two.
+ ASSERT(1UL << m_log2FFTSize == m_FFTSize);
+
+ // FFTW won't create a plan without being able to look at non-null
+ // pointers for the input and output data; it wants to be able to
+ // see whether these arrays are aligned properly for vector
+ // operations. Ideally we would use fftw_malloc and fftw_free for
+ // the input and output arrays to ensure proper alignment for SIMD
+ // operations, so that we don't have to specify FFTW_UNALIGNED
+ // when creating the plan. However, since we don't have control
+ // over the alignment of the array passed to doFFT / doInverseFFT,
+ // we would need to memcpy it in to or out of the FFTFrame, adding
+ // overhead. For the time being, we just assume unaligned data and
+ // pass a temporary pointer down.
+
+ float temporary;
+ m_forwardPlan = fftwPlanForSize(fftSize, Forward,
+ &temporary, realData(), imagData());
+ m_backwardPlan = fftwPlanForSize(fftSize, Backward,
+ realData(), imagData(), &temporary);
+}
+
+// Creates a blank/empty frame (interpolate() must later be called).
+FFTFrame::FFTFrame()
+ : m_FFTSize(0)
+ , m_log2FFTSize(0)
+ , m_forwardPlan(0)
+ , m_backwardPlan(0)
+{
+}
+
+// Copy constructor.
+FFTFrame::FFTFrame(const FFTFrame& frame)
+ : m_FFTSize(frame.m_FFTSize)
+ , m_log2FFTSize(frame.m_log2FFTSize)
+ , m_forwardPlan(0)
+ , m_backwardPlan(0)
+ , m_data(2 * (3 + unpackedFFTWDataSize(fftSize()))) // enough space for real and imaginary data plus 16-byte alignment padding
+{
+ // See the normal constructor for an explanation of the temporary pointer.
+ float temporary;
+ m_forwardPlan = fftwPlanForSize(m_FFTSize, Forward,
+ &temporary, realData(), imagData());
+ m_backwardPlan = fftwPlanForSize(m_FFTSize, Backward,
+ realData(), imagData(), &temporary);
+
+ // Copy/setup frame data.
+ size_t nbytes = sizeof(float) * unpackedFFTWDataSize(fftSize());
+ memcpy(realData(), frame.realData(), nbytes);
+ memcpy(imagData(), frame.imagData(), nbytes);
+}
+
+FFTFrame::~FFTFrame()
+{
+}
+
+void FFTFrame::multiply(const FFTFrame& frame)
+{
+ FFTFrame& frame1 = *this;
+ FFTFrame& frame2 = const_cast<FFTFrame&>(frame);
+
+ float* realP1 = frame1.realData();
+ float* imagP1 = frame1.imagData();
+ const float* realP2 = frame2.realData();
+ const float* imagP2 = frame2.imagData();
+
+ // Scale accounts the peculiar scaling of vecLib on the Mac.
+ // This ensures the right scaling all the way back to inverse FFT.
+ // FIXME: if we change the scaling on the Mac then this scale
+ // factor will need to change too.
+ float scale = 0.5f;
+
+ // Multiply the packed DC/nyquist component
+ realP1[0] *= scale * realP2[0];
+ imagP1[0] *= scale * imagP2[0];
+
+ // Complex multiplication. If this loop turns out to be hot then
+ // we should use SSE or other intrinsics to accelerate it.
+ unsigned halfSize = fftSize() / 2;
+
+ for (unsigned i = 1; i < halfSize; ++i) {
+ float realResult = realP1[i] * realP2[i] - imagP1[i] * imagP2[i];
+ float imagResult = realP1[i] * imagP2[i] + imagP1[i] * realP2[i];
+
+ realP1[i] = scale * realResult;
+ imagP1[i] = scale * imagResult;
+ }
+}
+
+void FFTFrame::doFFT(float* data)
+{
+ fftwf_execute_split_dft_r2c(m_forwardPlan, data, realData(), imagData());
+
+ // Scale the frequency domain data to match vecLib's scale factor
+ // on the Mac. FIXME: if we change the definition of FFTFrame to
+ // eliminate this scale factor then this code will need to change.
+ // Also, if this loop turns out to be hot then we should use SSE
+ // or other intrinsics to accelerate it.
+ float scaleFactor = 2;
+ unsigned length = unpackedFFTWDataSize(fftSize());
+ float* realData = this->realData();
+ float* imagData = this->imagData();
+
+ for (unsigned i = 0; i < length; ++i) {
+ realData[i] = realData[i] * scaleFactor;
+ imagData[i] = imagData[i] * scaleFactor;
+ }
+
+ // Move the Nyquist component to the location expected by the
+ // FFTFrame API.
+ imagData[0] = realData[length - 1];
+}
+
+void FFTFrame::doInverseFFT(float* data)
+{
+ unsigned length = unpackedFFTWDataSize(fftSize());
+ float* realData = this->realData();
+ float* imagData = this->imagData();
+
+ // Move the Nyquist component to the location expected by FFTW.
+ realData[length - 1] = imagData[0];
+ imagData[length - 1] = 0;
+ imagData[0] = 0;
+
+ fftwf_execute_split_dft_c2r(m_backwardPlan, realData, imagData, data);
+
+ // Restore the original scaling of the time domain data.
+ // FIXME: if we change the definition of FFTFrame to eliminate the
+ // scale factor then this code will need to change. Also, if this
+ // loop turns out to be hot then we should use SSE or other
+ // intrinsics to accelerate it.
+ float scaleFactor = 1.0 / (2.0 * fftSize());
+ unsigned n = fftSize();
+ for (unsigned i = 0; i < n; ++i)
+ data[i] *= scaleFactor;
+
+ // Move the Nyquist component back to the location expected by the
+ // FFTFrame API.
+ imagData[0] = realData[length - 1];
+}
+
+void FFTFrame::initialize()
+{
+ if (!fftwForwardPlans) {
+ fftwForwardPlans = new fftwf_plan[kMaxFFTPow2Size];
+ fftwBackwardPlans = new fftwf_plan[kMaxFFTPow2Size];
+ for (int i = 0; i < kMaxFFTPow2Size; ++i) {
+ fftwForwardPlans[i] = 0;
+ fftwBackwardPlans[i] = 0;
+ }
+ }
+
+ if (!s_planLock)
+ s_planLock = new Mutex();
+}
+
+void FFTFrame::cleanup()
+{
+ if (!fftwForwardPlans)
+ return;
+
+ for (int i = 0; i < kMaxFFTPow2Size; ++i) {
+ if (fftwForwardPlans[i])
+ fftwf_destroy_plan(fftwForwardPlans[i]);
+ if (fftwBackwardPlans[i])
+ fftwf_destroy_plan(fftwBackwardPlans[i]);
+ }
+
+ delete[] fftwForwardPlans;
+ delete[] fftwBackwardPlans;
+
+ fftwForwardPlans = 0;
+ fftwBackwardPlans = 0;
+
+ delete s_planLock;
+ s_planLock = 0;
+}
+
+float* FFTFrame::realData() const
+{
+ return const_cast<float*>(m_data.data());
+}
+
+float* FFTFrame::imagData() const
+{
+ // Imaginary data is stored following the real data with enough padding for 16-byte alignment.
+ return const_cast<float*>(realData() + unpackedFFTWDataSize(fftSize()) + 3);
+}
+
+fftwf_plan FFTFrame::fftwPlanForSize(unsigned fftSize, Direction direction,
+ float* data1, float* data2, float* data3)
+{
+ // initialize() must be called first.
+ ASSERT(fftwForwardPlans);
+ if (!fftwForwardPlans)
+ return 0;
+
+ ASSERT(s_planLock);
+ if (!s_planLock)
+ return 0;
+ MutexLocker locker(*s_planLock);
+
+ ASSERT(fftSize);
+ int pow2size = static_cast<int>(log2(fftSize));
+ ASSERT(pow2size < kMaxFFTPow2Size);
+ fftwf_plan* plans = (direction == Forward) ? fftwForwardPlans : fftwBackwardPlans;
+ if (!plans[pow2size]) {
+ fftwf_iodim dimension;
+ dimension.n = fftSize;
+ dimension.is = 1;
+ dimension.os = 1;
+
+ // For the time being, we do not take the input data into
+ // account when choosing a plan, so that we can most easily
+ // reuse plans with different input data.
+
+ // FIXME: allocate input and output data inside this class to
+ // be able to take advantage of alignment and SIMD optimizations.
+ unsigned flags = FFTW_ESTIMATE | FFTW_PRESERVE_INPUT | FFTW_UNALIGNED;
+ switch (direction) {
+ case Forward:
+ plans[pow2size] = fftwf_plan_guru_split_dft_r2c(1, &dimension, 0, 0,
+ data1, data2, data3,
+ flags);
+ break;
+ case Backward:
+ plans[pow2size] = fftwf_plan_guru_split_dft_c2r(1, &dimension, 0, 0,
+ data1, data2, data3,
+ flags);
+ break;
+ }
+ }
+ ASSERT(plans[pow2size]);
+ return plans[pow2size];
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/Source/WebCore/platform/audio/mac/FFTFrameMac.cpp b/Source/WebCore/platform/audio/mac/FFTFrameMac.cpp
index 0f7efb7..6456da2 100644
--- a/Source/WebCore/platform/audio/mac/FFTFrameMac.cpp
+++ b/Source/WebCore/platform/audio/mac/FFTFrameMac.cpp
@@ -162,6 +162,10 @@ FFTSetup FFTFrame::fftSetupForSize(unsigned fftSize)
return fftSetups[pow2size];
}
+void FFTFrame::initialize()
+{
+}
+
void FFTFrame::cleanup()
{
if (!fftSetups)
diff --git a/Source/WebCore/platform/audio/mkl/FFTFrameMKL.cpp b/Source/WebCore/platform/audio/mkl/FFTFrameMKL.cpp
index f66a485..3ac6b36 100644
--- a/Source/WebCore/platform/audio/mkl/FFTFrameMKL.cpp
+++ b/Source/WebCore/platform/audio/mkl/FFTFrameMKL.cpp
@@ -200,6 +200,10 @@ void FFTFrame::doInverseFFT(float* data)
ASSERT(DftiErrorClass(status, DFTI_NO_ERROR));
}
+void FFTFrame::initialize()
+{
+}
+
void FFTFrame::cleanup()
{
if (!descriptorHandles)
diff --git a/Source/WebCore/platform/brew/MIMETypeRegistryBrew.cpp b/Source/WebCore/platform/brew/MIMETypeRegistryBrew.cpp
index 0a538c2..eae4e3b 100644
--- a/Source/WebCore/platform/brew/MIMETypeRegistryBrew.cpp
+++ b/Source/WebCore/platform/brew/MIMETypeRegistryBrew.cpp
@@ -30,6 +30,8 @@
#include "MIMETypeRegistry.h"
#include "PlatformString.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
namespace WebCore {
@@ -63,6 +65,8 @@ static const ExtensionMap extensionMap[] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
String str = ext.lower();
const ExtensionMap* e = extensionMap;
diff --git a/Source/WebCore/platform/brew/SystemTimeBrew.cpp b/Source/WebCore/platform/brew/SystemTimeBrew.cpp
index c1e39fb..6e2fe7e 100644
--- a/Source/WebCore/platform/brew/SystemTimeBrew.cpp
+++ b/Source/WebCore/platform/brew/SystemTimeBrew.cpp
@@ -26,15 +26,16 @@
#include "config.h"
#include "SystemTime.h"
-#include <float.h>
+#include "NotImplemented.h"
+#include <limits>
namespace WebCore {
float userIdleTime()
{
- // return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed
- return FLT_MAX;
-}
-
+ notImplemented();
+ // Return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed.
+ return std::numeric_limits<float>::max();
}
+} // namespace WebCore
diff --git a/Source/WebCore/platform/cf/BinaryPropertyList.cpp b/Source/WebCore/platform/cf/BinaryPropertyList.cpp
index 27b44d4..41769e8 100644
--- a/Source/WebCore/platform/cf/BinaryPropertyList.cpp
+++ b/Source/WebCore/platform/cf/BinaryPropertyList.cpp
@@ -92,7 +92,7 @@ struct IntegerArrayHash {
unsigned IntegerArrayHash::hash(const IntegerArray& array)
{
- return StringImpl::computeHash(reinterpret_cast<const UChar*>(array.integers()), array.size() / (sizeof(int) / sizeof(UChar)));
+ return WTF::StringHasher::createBlobHash(array.integers(), array.size());
}
bool IntegerArrayHash::equal(const IntegerArray& a, const IntegerArray& b)
diff --git a/Source/WebCore/platform/cf/FileSystemCF.cpp b/Source/WebCore/platform/cf/FileSystemCF.cpp
index e3a144c..a4b422b 100644
--- a/Source/WebCore/platform/cf/FileSystemCF.cpp
+++ b/Source/WebCore/platform/cf/FileSystemCF.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,12 +25,13 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
#import "config.h"
#import "FileSystem.h"
#import "PlatformString.h"
-#import <wtf/text/CString.h>
#import <wtf/RetainPtr.h>
+#import <wtf/text/CString.h>
namespace WebCore {
@@ -54,4 +55,16 @@ CString fileSystemRepresentation(const String& path)
return string;
}
+RetainPtr<CFURLRef> pathAsURL(const String& path)
+{
+ CFURLPathStyle pathStyle;
+#if PLATFORM(WIN)
+ pathStyle = kCFURLWindowsPathStyle;
+#else
+ pathStyle = kCFURLPOSIXPathStyle;
+#endif
+ return RetainPtr<CFURLRef>(AdoptCF, CFURLCreateWithFileSystemPath(0,
+ RetainPtr<CFStringRef>(AdoptCF, path.createCFString()).get(), pathStyle, FALSE));
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/chromium/ChromiumDataObject.cpp b/Source/WebCore/platform/chromium/ChromiumDataObject.cpp
index 78b794b..f5732df 100644
--- a/Source/WebCore/platform/chromium/ChromiumDataObject.cpp
+++ b/Source/WebCore/platform/chromium/ChromiumDataObject.cpp
@@ -56,9 +56,9 @@ PassRefPtr<ChromiumDataObject> ChromiumDataObject::create(PassRefPtr<ChromiumDat
return adoptRef(new ChromiumDataObject(data));
}
-PassRefPtr<ChromiumDataObject> ChromiumDataObject::createReadable(Clipboard::ClipboardType clipboardType)
+PassRefPtr<ChromiumDataObject> ChromiumDataObject::createReadable(const Frame* frame, Clipboard::ClipboardType clipboardType)
{
- return adoptRef(new ChromiumDataObject(ReadableDataObject::create(clipboardType)));
+ return adoptRef(new ChromiumDataObject(ReadableDataObject::create(frame, clipboardType)));
}
PassRefPtr<ChromiumDataObject> ChromiumDataObject::createWritable(Clipboard::ClipboardType clipboardType)
diff --git a/Source/WebCore/platform/chromium/ChromiumDataObject.h b/Source/WebCore/platform/chromium/ChromiumDataObject.h
index 4aac5c9..919c269 100644
--- a/Source/WebCore/platform/chromium/ChromiumDataObject.h
+++ b/Source/WebCore/platform/chromium/ChromiumDataObject.h
@@ -41,7 +41,7 @@ namespace WebCore {
class ChromiumDataObject : public RefCounted<ChromiumDataObject> {
public:
static PassRefPtr<ChromiumDataObject> create(PassRefPtr<ChromiumDataObjectLegacy> data);
- static PassRefPtr<ChromiumDataObject> createReadable(Clipboard::ClipboardType);
+ static PassRefPtr<ChromiumDataObject> createReadable(const Frame*, Clipboard::ClipboardType);
static PassRefPtr<ChromiumDataObject> createWritable(Clipboard::ClipboardType);
void clearData(const String& type);
diff --git a/Source/WebCore/platform/chromium/ClipboardChromium.cpp b/Source/WebCore/platform/chromium/ClipboardChromium.cpp
index 46b4339..d6ba2d2 100644
--- a/Source/WebCore/platform/chromium/ClipboardChromium.cpp
+++ b/Source/WebCore/platform/chromium/ClipboardChromium.cpp
@@ -91,7 +91,7 @@ PassRefPtr<ClipboardChromium> ClipboardChromium::create(ClipboardType clipboardT
RefPtr<ChromiumDataObject> dataObject =
policy == ClipboardWritable ?
ChromiumDataObject::createWritable(clipboardType) :
- ChromiumDataObject::createReadable(clipboardType);
+ ChromiumDataObject::createReadable(frame, clipboardType);
return adoptRef(new ClipboardChromium(clipboardType, dataObject, policy, frame));
}
diff --git a/Source/WebCore/platform/chromium/MIMETypeRegistryChromium.cpp b/Source/WebCore/platform/chromium/MIMETypeRegistryChromium.cpp
index fec0e9b..91bfccb 100644
--- a/Source/WebCore/platform/chromium/MIMETypeRegistryChromium.cpp
+++ b/Source/WebCore/platform/chromium/MIMETypeRegistryChromium.cpp
@@ -42,6 +42,17 @@
namespace WebCore {
+#if ENABLE(FILE_SYSTEM) && ENABLE(WORKERS)
+String MIMETypeRegistry::getMIMETypeForExtensionThreadSafe(const String &ext)
+{
+ return PlatformBridge::mimeTypeForExtension(ext);
+}
+#endif
+
+// NOTE: We have to define getMIMETypeForExtension() here though the shared
+// implementation has getMIMETypeForExtension() since we don't use the shared
+// implementation bits in MIMETypeRegistry.cpp.
+
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
return PlatformBridge::mimeTypeForExtension(ext);
diff --git a/Source/WebCore/platform/chromium/PlatformBridge.h b/Source/WebCore/platform/chromium/PlatformBridge.h
index f6a2564..9a09b90 100644
--- a/Source/WebCore/platform/chromium/PlatformBridge.h
+++ b/Source/WebCore/platform/chromium/PlatformBridge.h
@@ -109,9 +109,9 @@ public:
static void clipboardWriteData(const String& type, const String& data, const String& metadata);
// Interface for handling copy and paste, drag and drop, and selection copy.
- static HashSet<String> clipboardReadAvailableTypes(PasteboardPrivate::ClipboardBuffer, bool* containsFilenames);
- static bool clipboardReadData(PasteboardPrivate::ClipboardBuffer, const String& type, String& data, String& metadata);
- static Vector<String> clipboardReadFilenames(PasteboardPrivate::ClipboardBuffer);
+ static HashSet<String> clipboardReadAvailableTypes(const Frame*, PasteboardPrivate::ClipboardBuffer, bool* containsFilenames);
+ static bool clipboardReadData(const Frame*, PasteboardPrivate::ClipboardBuffer, const String& type, String& data, String& metadata);
+ static Vector<String> clipboardReadFilenames(const Frame*, PasteboardPrivate::ClipboardBuffer);
// Cookies ------------------------------------------------------------
static void setCookies(const Document*, const KURL&, const String& value);
@@ -171,7 +171,6 @@ public:
// IndexedDB ----------------------------------------------------------
static PassRefPtr<IDBFactoryBackendInterface> idbFactory();
- static void idbShutdown();
// Extracts keyPath from values and returns the corresponding keys.
static void createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys);
diff --git a/Source/WebCore/platform/chromium/PopupMenuChromium.cpp b/Source/WebCore/platform/chromium/PopupMenuChromium.cpp
index 075cef0..59441d0 100644
--- a/Source/WebCore/platform/chromium/PopupMenuChromium.cpp
+++ b/Source/WebCore/platform/chromium/PopupMenuChromium.cpp
@@ -32,7 +32,6 @@
#include "config.h"
#include "PopupMenuChromium.h"
-#include "CharacterNames.h"
#include "Chrome.h"
#include "ChromeClientChromium.h"
#include "Font.h"
@@ -56,8 +55,8 @@
#include "SystemTime.h"
#include "TextRun.h"
#include "UserGestureIndicator.h"
-
#include <wtf/CurrentTime.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace WTF;
using namespace Unicode;
@@ -74,17 +73,16 @@ static const int kMaxHeight = 500;
static const int kBorderSize = 1;
static const int kTextToLabelPadding = 10;
static const int kLabelToIconPadding = 5;
+static const int kMinEndOfLinePadding = 2;
static const TimeStamp kTypeAheadTimeoutMs = 1000;
// The settings used for the drop down menu.
// This is the delegate used if none is provided.
static const PopupContainerSettings dropDownSettings = {
- true, // setTextOnIndexChange
- true, // acceptOnAbandon
- false, // loopSelectionNavigation
- false, // restrictWidthOfListBox
- // display item text in its first strong directional character's directionality.
- PopupContainerSettings::FirstStrongDirectionalCharacterDirection,
+ true, // setTextOnIndexChange
+ true, // acceptOnAbandon
+ false, // loopSelectionNavigation
+ false // restrictWidthOfListBox
};
// This class uses WebCore code to paint and handle events for a drop-down list
@@ -330,7 +328,7 @@ PopupContainer::~PopupContainer()
removeChild(m_listBox.get());
}
-IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, const IntPoint& popupInitialCoordinate)
+IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, int popupInitialY)
{
// Reset the max height to its default value, it will be recomputed below
// if necessary.
@@ -350,8 +348,10 @@ IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, co
// If the popup would extend past the bottom of the screen, open upwards
// instead.
FloatRect screen = screenAvailableRect(m_frameView.get());
- widgetRect = chromeClient->windowToScreen(IntRect(popupInitialCoordinate, targetSize));
- if (widgetRect.bottom() > static_cast<int>(screen.bottom())) {
+ // Use this::x() for location because RTL position is considered
+ // in layout().
+ widgetRect = chromeClient->windowToScreen(IntRect(x(), popupInitialY, targetSize.width(), targetSize.height()));
+ if (widgetRect.maxY() > static_cast<int>(screen.maxY())) {
if (widgetRect.y() - widgetRect.height() - targetControlHeight > 0) {
// There is enough room to open upwards.
widgetRect.move(0, -(widgetRect.height() + targetControlHeight));
@@ -359,7 +359,7 @@ IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, co
// Figure whether upwards or downwards has more room and set the
// maximum number of items.
int spaceAbove = widgetRect.y() - targetControlHeight;
- int spaceBelow = screen.bottom() - widgetRect.y();
+ int spaceBelow = screen.maxY() - widgetRect.y();
if (spaceAbove > spaceBelow)
m_listBox->setMaxHeight(spaceAbove);
else
@@ -383,7 +383,7 @@ void PopupContainer::showPopup(FrameView* view)
ChromeClientChromium* chromeClient = chromeClientChromium();
if (chromeClient) {
IntRect popupRect = frameRect();
- chromeClient->popupOpened(this, layoutAndCalculateWidgetRect(popupRect.height(), popupRect.location()), false);
+ chromeClient->popupOpened(this, layoutAndCalculateWidgetRect(popupRect.height(), popupRect.y()), false);
m_popupOpen = true;
}
@@ -399,34 +399,6 @@ void PopupContainer::showPopup(FrameView* view)
invalidate();
}
-void PopupContainer::showExternal(const IntRect& rect, FrameView* v, int index)
-{
- if (!listBox())
- return;
-
- listBox()->setBaseWidth(rect.width());
- listBox()->updateFromElement();
-
- if (listBox()->numItems() < 1) {
- hidePopup();
- return;
- }
-
- // Adjust the popup position to account for scrolling.
- IntPoint location = v->contentsToWindow(rect.location());
- IntRect popupRect(location, rect.size());
-
- // Get the ChromeClient and pass it the popup menu's listbox data.
- m_frameView = v;
- chromeClientChromium()->popupOpened(this, popupRect, true);
-
- // The popup sends its "closed" notification through its parent. Set the
- // parent, even though external popups have no real on-screen widget but a
- // native menu (see |PopupListBox::hidePopup()|);
- if (!m_listBox->parent())
- addChild(m_listBox.get());
-}
-
void PopupContainer::hidePopup()
{
listBox()->hidePopup();
@@ -581,7 +553,7 @@ void PopupContainer::refresh(const IntRect& targetControlRect)
listBox()->updateFromElement();
// Store the original height to check if we need to request the location.
int originalHeight = height();
- IntRect widgetRect = layoutAndCalculateWidgetRect(targetControlRect.height(), location);
+ IntRect widgetRect = layoutAndCalculateWidgetRect(targetControlRect.height(), location.y());
if (originalHeight != widgetRect.height())
setFrameRect(widgetRect);
@@ -967,20 +939,15 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
}
// Prepare the directionality to draw text.
- bool rtl = false;
- if (m_settings.itemTextDirectionalityHint == PopupContainerSettings::DOMElementDirection)
- rtl = style.textDirection() == RTL;
- else if (m_settings.itemTextDirectionalityHint ==
- PopupContainerSettings::FirstStrongDirectionalCharacterDirection)
- rtl = itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft;
- TextRun textRun(itemText.characters(), itemText.length(), false, 0, 0, rtl);
+ bool rtl = style.textDirection() == RTL;
+ TextRun textRun(itemText.characters(), itemText.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl, style.hasTextDirectionOverride());
// If the text is right-to-left, make it right-aligned by adjusting its
// beginning position.
if (rightAligned)
textX += maxWidth - itemFont.width(textRun);
// Draw the item text.
- int textY = rowRect.y() + itemFont.ascent() + (rowRect.height() - itemFont.height()) / 2;
+ int textY = rowRect.y() + itemFont.fontMetrics().ascent() + (rowRect.height() - itemFont.fontMetrics().height()) / 2;
gc->drawBidiText(itemFont, textRun, IntPoint(textX, textY));
// We are using the left padding as the right padding includes room for the scroll-bar which
@@ -1001,7 +968,7 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
// Draw the the label if applicable.
if (itemLabel.isEmpty())
return;
- TextRun labelTextRun(itemLabel.characters(), itemLabel.length(), false, 0, 0, rtl);
+ TextRun labelTextRun(itemLabel.characters(), itemLabel.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl, style.hasTextDirectionOverride());
if (rightAligned)
textX = max(0, m_popupClient->clientPaddingLeft() - m_popupClient->clientInsetLeft());
else
@@ -1120,7 +1087,7 @@ int PopupListBox::getRowHeight(int index)
String icon = m_popupClient->itemIcon(index);
RefPtr<Image> image(Image::loadPlatformResource(icon.utf8().data()));
- int fontHeight = getRowFont(index).height();
+ int fontHeight = getRowFont(index).fontMetrics().height();
int iconHeight = (image && !image->isNull()) ? image->rect().height() : 0;
return max(fontHeight, iconHeight);
@@ -1154,9 +1121,9 @@ void PopupListBox::scrollToRevealRow(int index)
if (rowRect.y() < scrollY()) {
// Row is above current scroll position, scroll up.
ScrollView::setScrollPosition(IntPoint(0, rowRect.y()));
- } else if (rowRect.bottom() > scrollY() + visibleHeight()) {
+ } else if (rowRect.maxY() > scrollY() + visibleHeight()) {
// Row is below current scroll position, scroll down.
- ScrollView::setScrollPosition(IntPoint(0, rowRect.bottom() - visibleHeight()));
+ ScrollView::setScrollPosition(IntPoint(0, rowRect.maxY() - visibleHeight()));
}
}
@@ -1267,6 +1234,9 @@ void PopupListBox::updateFromElement()
type = PopupItem::TypeOption;
m_items.append(new PopupItem(m_popupClient->itemText(i), type));
m_items[i]->enabled = isSelectableItem(i);
+ PopupMenuStyle style = m_popupClient->itemStyle(i);
+ m_items[i]->textDirection = style.textDirection();
+ m_items[i]->hasTextDirectionOverride = style.hasTextDirectionOverride();
}
m_selectedIndex = m_popupClient->selectedIndex();
@@ -1277,9 +1247,12 @@ void PopupListBox::updateFromElement()
void PopupListBox::layout()
{
+ bool isRightAligned = m_popupClient->menuStyle().textDirection() == RTL;
+
// Size our child items.
int baseWidth = 0;
int paddingWidth = 0;
+ int lineEndPaddingWidth = 0;
int y = 0;
for (int i = 0; i < numItems(); ++i) {
// Place the item vertically.
@@ -1312,58 +1285,56 @@ void PopupListBox::layout()
// FIXME: http://b/1210481 We should get the padding of individual option elements.
paddingWidth = max(paddingWidth,
m_popupClient->clientPaddingLeft() + m_popupClient->clientPaddingRight());
+ lineEndPaddingWidth = max(lineEndPaddingWidth,
+ isRightAligned ? m_popupClient->clientPaddingLeft() : m_popupClient->clientPaddingRight());
}
// Calculate scroll bar width.
int windowHeight = 0;
-
-#if OS(DARWIN)
- // Set the popup's window to contain all available items on Mac only, which
- // uses native controls that manage their own scrolling. This allows hit
- // testing to work when selecting items in popups that have more menu entries
- // than the maximum window size.
- m_visibleRows = numItems();
-#else
m_visibleRows = min(numItems(), kMaxVisibleRows);
-#endif
for (int i = 0; i < m_visibleRows; ++i) {
int rowHeight = getRowHeight(i);
-#if !OS(DARWIN)
// Only clip the window height for non-Mac platforms.
if (windowHeight + rowHeight > m_maxHeight) {
m_visibleRows = i;
break;
}
-#endif
windowHeight += rowHeight;
}
// Set our widget and scrollable contents sizes.
int scrollbarWidth = 0;
- if (m_visibleRows < numItems())
+ if (m_visibleRows < numItems()) {
scrollbarWidth = ScrollbarTheme::nativeTheme()->scrollbarThickness();
+ // Use kMinEndOfLinePadding when there is a scrollbar so that we use
+ // as much as (lineEndPaddingWidth - kMinEndOfLinePadding) padding
+ // space for scrollbar and allow user to use CSS padding to make the
+ // popup listbox align with the select element.
+ paddingWidth = paddingWidth - lineEndPaddingWidth + kMinEndOfLinePadding;
+ }
+
int windowWidth;
int contentWidth;
if (m_settings.restrictWidthOfListBox) {
windowWidth = m_baseWidth;
- contentWidth = m_baseWidth - scrollbarWidth - paddingWidth;
+ contentWidth = m_baseWidth - scrollbarWidth;
} else {
windowWidth = baseWidth + scrollbarWidth + paddingWidth;
- contentWidth = baseWidth;
+ contentWidth = baseWidth + paddingWidth;
if (windowWidth < m_baseWidth) {
windowWidth = m_baseWidth;
- contentWidth = m_baseWidth - scrollbarWidth - paddingWidth;
+ contentWidth = m_baseWidth - scrollbarWidth;
} else
m_baseWidth = baseWidth;
}
resize(windowWidth, windowHeight);
- setContentsSize(IntSize(contentWidth, getRowBounds(numItems() - 1).bottom()));
+ setContentsSize(IntSize(contentWidth, getRowBounds(numItems() - 1).maxY()));
if (hostWindow())
scrollToRevealSelection();
@@ -1404,19 +1375,11 @@ PopupMenuChromium::~PopupMenuChromium()
hide();
}
-// The Mac Chromium implementation relies on external control (a Cocoa control)
-// to display, handle the input tracking and menu item selection for the popup.
-// Windows and Linux Chromium let our WebKit port handle the display, while
-// another process manages the popup window and input handling.
void PopupMenuChromium::show(const IntRect& r, FrameView* v, int index)
{
if (!p.popup)
p.popup = PopupContainer::create(client(), PopupContainer::Select, dropDownSettings);
-#if OS(DARWIN)
- p.popup->showExternal(r, v, index);
-#else
p.popup->show(r, v, index);
-#endif
}
void PopupMenuChromium::hide()
diff --git a/Source/WebCore/platform/chromium/PopupMenuChromium.h b/Source/WebCore/platform/chromium/PopupMenuChromium.h
index f326b48..43b8b0e 100644
--- a/Source/WebCore/platform/chromium/PopupMenuChromium.h
+++ b/Source/WebCore/platform/chromium/PopupMenuChromium.h
@@ -65,6 +65,8 @@ struct PopupItem {
String label;
Type type;
int yOffset; // y offset of this item, relative to the top of the popup.
+ TextDirection textDirection;
+ bool hasTextDirectionOverride;
bool enabled;
};
@@ -97,22 +99,6 @@ struct PopupContainerSettings {
// Whether we should restrict the width of the PopupListBox or not.
// Autocomplete popups are restricted, combo-boxes (select tags) aren't.
bool restrictWidthOfListBox;
-
- // A hint on the display directionality of the item text in popup menu.
- //
- // We could either display the items in the drop-down using its DOM element's
- // directionality, or we could display the items in the drop-down using heuristics:
- // such as in its first strong directionality character's direction.
- // Please refer to the discussion (especially comment #7 and #10) in
- // https://bugs.webkit.org/show_bug.cgi?id=27889 for details.
- enum DirectionalityHint {
- // Use the DOM element's directionality to display the item text in popup menu.
- DOMElementDirection,
- // Use the item text's first strong-directional character's directionality
- // to display the item text in popup menu.
- FirstStrongDirectionalCharacterDirection,
- };
- DirectionalityHint itemTextDirectionalityHint;
};
class PopupContainer : public FramelessScrollView {
@@ -142,9 +128,6 @@ public:
// Show the popup
void showPopup(FrameView*);
- // Used on Mac Chromium for HTML select popup menus.
- void showExternal(const IntRect&, FrameView*, int index);
-
// Show the popup in the specified rect for the specified frame.
// Note: this code was somehow arbitrarily factored-out of the Popup class
// so WebViewImpl can create a PopupContainer. This method is used for
@@ -194,7 +177,7 @@ private:
void paintBorder(GraphicsContext*, const IntRect&);
// Layout and calculate popup widget size and location and returns it as IntRect.
- IntRect layoutAndCalculateWidgetRect(int targetControlHeight, const IntPoint& popupInitialCoordinate);
+ IntRect layoutAndCalculateWidgetRect(int targetControlHeight, int popupInitialY);
// Returns the ChromeClient of the page this popup is associated with.
ChromeClientChromium* chromeClientChromium();
diff --git a/Source/WebCore/platform/chromium/ReadableDataObject.cpp b/Source/WebCore/platform/chromium/ReadableDataObject.cpp
index dbf4739..484a1b3 100644
--- a/Source/WebCore/platform/chromium/ReadableDataObject.cpp
+++ b/Source/WebCore/platform/chromium/ReadableDataObject.cpp
@@ -43,13 +43,14 @@ static PasteboardPrivate::ClipboardBuffer clipboardBuffer(Clipboard::ClipboardTy
return clipboardType == Clipboard::DragAndDrop ? PasteboardPrivate::DragBuffer : PasteboardPrivate::StandardBuffer;
}
-PassRefPtr<ReadableDataObject> ReadableDataObject::create(Clipboard::ClipboardType clipboardType)
+PassRefPtr<ReadableDataObject> ReadableDataObject::create(const Frame* frame, Clipboard::ClipboardType clipboardType)
{
- return adoptRef(new ReadableDataObject(clipboardType));
+ return adoptRef(new ReadableDataObject(frame, clipboardType));
}
-ReadableDataObject::ReadableDataObject(Clipboard::ClipboardType clipboardType)
- : m_clipboardType(clipboardType)
+ReadableDataObject::ReadableDataObject(const Frame* frame, Clipboard::ClipboardType clipboardType)
+ : m_frame(frame)
+ , m_clipboardType(clipboardType)
, m_containsFilenames(false)
, m_isTypeCacheInitialized(false)
{
@@ -93,7 +94,7 @@ String ReadableDataObject::getData(const String& type, bool& succeeded) const
return data;
}
succeeded = PlatformBridge::clipboardReadData(
- clipboardBuffer(m_clipboardType), type, data, ignoredMetadata);
+ m_frame, clipboardBuffer(m_clipboardType), type, data, ignoredMetadata);
return data;
}
@@ -102,7 +103,7 @@ String ReadableDataObject::urlTitle() const
String ignoredData;
String urlTitle;
PlatformBridge::clipboardReadData(
- clipboardBuffer(m_clipboardType), mimeTypeTextURIList, ignoredData, urlTitle);
+ m_frame, clipboardBuffer(m_clipboardType), mimeTypeTextURIList, ignoredData, urlTitle);
return urlTitle;
}
@@ -111,7 +112,7 @@ KURL ReadableDataObject::htmlBaseUrl() const
String ignoredData;
String htmlBaseUrl;
PlatformBridge::clipboardReadData(
- clipboardBuffer(m_clipboardType), mimeTypeTextHTML, ignoredData, htmlBaseUrl);
+ m_frame, clipboardBuffer(m_clipboardType), mimeTypeTextHTML, ignoredData, htmlBaseUrl);
return KURL(ParsedURLString, htmlBaseUrl);
}
@@ -123,7 +124,7 @@ bool ReadableDataObject::containsFilenames() const
Vector<String> ReadableDataObject::filenames() const
{
- return PlatformBridge::clipboardReadFilenames(clipboardBuffer(m_clipboardType));
+ return PlatformBridge::clipboardReadFilenames(m_frame, clipboardBuffer(m_clipboardType));
}
void ReadableDataObject::ensureTypeCacheInitialized() const
@@ -132,7 +133,7 @@ void ReadableDataObject::ensureTypeCacheInitialized() const
return;
m_types = PlatformBridge::clipboardReadAvailableTypes(
- clipboardBuffer(m_clipboardType), &m_containsFilenames);
+ m_frame, clipboardBuffer(m_clipboardType), &m_containsFilenames);
m_isTypeCacheInitialized = true;
}
diff --git a/Source/WebCore/platform/chromium/ReadableDataObject.h b/Source/WebCore/platform/chromium/ReadableDataObject.h
index 027e0ed..c6cc310 100644
--- a/Source/WebCore/platform/chromium/ReadableDataObject.h
+++ b/Source/WebCore/platform/chromium/ReadableDataObject.h
@@ -44,7 +44,7 @@ namespace WebCore {
// browser to the renderer.
class ReadableDataObject : public RefCounted<ReadableDataObject> {
public:
- static PassRefPtr<ReadableDataObject> create(Clipboard::ClipboardType);
+ static PassRefPtr<ReadableDataObject> create(const Frame*, Clipboard::ClipboardType);
bool hasData() const;
HashSet<String> types() const;
@@ -57,11 +57,14 @@ public:
Vector<String> filenames() const;
private:
- explicit ReadableDataObject(Clipboard::ClipboardType);
+ explicit ReadableDataObject(const Frame*, Clipboard::ClipboardType);
// This isn't always const... but most of the time it is.
void ensureTypeCacheInitialized() const;
+ // The owner frame. Used to send IPCs back to the correspdonging view via WebFrameClient.
+ const Frame* m_frame;
+
Clipboard::ClipboardType m_clipboardType;
// To avoid making a lot of IPC calls for each drag event, we cache some
diff --git a/Source/WebCore/platform/chromium/ScrollbarThemeChromium.cpp b/Source/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
index b23e625..9e700c2 100644
--- a/Source/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
+++ b/Source/WebCore/platform/chromium/ScrollbarThemeChromium.cpp
@@ -128,7 +128,7 @@ void ScrollbarThemeChromium::paintTickmarks(GraphicsContext* context, Scrollbar*
const float percent = static_cast<float>(i->y()) / scrollbar->totalSize();
// Calculate how far down (in pixels) the tick-mark should appear.
- const int yPos = rect.topLeft().y() + (rect.height() * percent);
+ const int yPos = rect.y() + (rect.height() * percent);
IntPoint tick(scrollbar->x(), yPos);
context->drawImage(dash.get(), ColorSpaceDeviceRGB, tick);
diff --git a/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm b/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm
index fe1a422..b0ba95d 100644
--- a/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm
+++ b/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm
@@ -450,11 +450,11 @@ bool ScrollbarThemeChromiumMac::paint(Scrollbar* scrollbar, GraphicsContext* con
continue;
// Calculate how far down (in pixels) the tick-mark should appear.
- const int yPos = static_cast<int>((thumbArea.topLeft().y() + (thumbArea.height() * percent))) & ~1;
+ const int yPos = static_cast<int>((thumbArea.y() + (thumbArea.height() * percent))) & ~1;
// Paint.
const int indent = 2;
- FloatRect tickRect(thumbArea.topLeft().x() + indent, yPos, thumbArea.width() - 2 * indent - 1, 2);
+ FloatRect tickRect(thumbArea.x() + indent, yPos, thumbArea.width() - 2 * indent - 1, 2);
drawingContext->fillRect(tickRect);
drawingContext->strokeRect(tickRect, 1);
}
diff --git a/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp b/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp
index d0c95bf..d883e5d 100644
--- a/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp
+++ b/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp
@@ -31,6 +31,9 @@
#include "config.h"
#include "MIMETypeRegistry.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
+
namespace WebCore {
struct ExtensionMap {
@@ -72,6 +75,8 @@ static const ExtensionMap extensionMap[] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
String s = ext.lower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
diff --git a/Source/WebCore/platform/efl/RenderThemeEfl.cpp b/Source/WebCore/platform/efl/RenderThemeEfl.cpp
index 9df12e9..9102d17 100644
--- a/Source/WebCore/platform/efl/RenderThemeEfl.cpp
+++ b/Source/WebCore/platform/efl/RenderThemeEfl.cpp
@@ -1043,4 +1043,83 @@ bool RenderThemeEfl::paintProgressBar(RenderObject* o, const PaintInfo& i, const
}
#endif
+#if ENABLE(VIDEO)
+String RenderThemeEfl::extraMediaControlsStyleSheet()
+{
+ notImplemented();
+ return String();
+}
+
+String RenderThemeEfl::formatMediaControlsCurrentTime(float currentTime, float duration) const
+{
+ notImplemented();
+ return String();
+}
+
+bool RenderThemeEfl::paintMediaFullscreenButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaMuteButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaPlayButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaSeekBackButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaSeekForwardButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaVolumeSliderTrack(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaVolumeSliderThumb(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+
+bool RenderThemeEfl::paintMediaCurrentTime(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ notImplemented();
+ return false;
+}
+#endif
}
diff --git a/Source/WebCore/platform/efl/RenderThemeEfl.h b/Source/WebCore/platform/efl/RenderThemeEfl.h
index 087e2aa..d4887cf 100644
--- a/Source/WebCore/platform/efl/RenderThemeEfl.h
+++ b/Source/WebCore/platform/efl/RenderThemeEfl.h
@@ -153,6 +153,23 @@ public:
virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&);
#endif
+#if ENABLE(VIDEO)
+ virtual String extraMediaControlsStyleSheet();
+ virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
+
+ virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&);
+#endif
+
protected:
static float defaultFontSize;
diff --git a/Source/WebCore/platform/efl/SystemTimeEfl.cpp b/Source/WebCore/platform/efl/SystemTimeEfl.cpp
index de8c87c..ec6d662 100644
--- a/Source/WebCore/platform/efl/SystemTimeEfl.cpp
+++ b/Source/WebCore/platform/efl/SystemTimeEfl.cpp
@@ -28,7 +28,9 @@
#include "config.h"
#include "SystemTime.h"
+#include "NotImplemented.h"
#include <Ecore.h>
+#include <limits>
namespace WebCore {
@@ -37,4 +39,11 @@ double currentTime()
return ecore_time_get();
}
+float userIdleTime()
+{
+ notImplemented();
+ // Return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed.
+ return std::numeric_limits<float>::max();
}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/efl/TemporaryLinkStubs.cpp b/Source/WebCore/platform/efl/TemporaryLinkStubs.cpp
index ef6e6f7..07ea2e6 100644
--- a/Source/WebCore/platform/efl/TemporaryLinkStubs.cpp
+++ b/Source/WebCore/platform/efl/TemporaryLinkStubs.cpp
@@ -56,12 +56,6 @@ String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String &ch
return String();
}
-float userIdleTime()
-{
- notImplemented();
- return FLT_MAX;
-}
-
void setCookieStoragePrivateBrowsingEnabled(bool)
{
notImplemented();
diff --git a/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp b/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp
index f416b47..9e64904 100644
--- a/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp
+++ b/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "ANGLEWebKitBridge.h"
#include <wtf/OwnArrayPtr.h>
@@ -93,7 +93,7 @@ bool ANGLEWebKitBridge::validateShaderSource(const char* shaderSource, ANGLEShad
int logSize = 0;
ShGetInfo(compiler, SH_INFO_LOG_LENGTH, &logSize);
if (logSize > 1) {
- OwnArrayPtr<char> logBuffer(new char[logSize]);
+ OwnArrayPtr<char> logBuffer = adoptArrayPtr(new char[logSize]);
if (logBuffer) {
ShGetInfoLog(compiler, logBuffer.get());
shaderValidationLog = logBuffer.get();
@@ -105,7 +105,7 @@ bool ANGLEWebKitBridge::validateShaderSource(const char* shaderSource, ANGLEShad
int translationLength = 0;
ShGetInfo(compiler, SH_OBJECT_CODE_LENGTH, &translationLength);
if (translationLength > 1) {
- OwnArrayPtr<char> translationBuffer(new char[translationLength]);
+ OwnArrayPtr<char> translationBuffer = adoptArrayPtr(new char[translationLength]);
if (!translationBuffer)
return false;
ShGetObjectCode(compiler, translationBuffer.get());
@@ -117,4 +117,4 @@ bool ANGLEWebKitBridge::validateShaderSource(const char* shaderSource, ANGLEShad
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/ContextShadow.h b/Source/WebCore/platform/graphics/ContextShadow.h
index a1fba5c..c0571f0 100644
--- a/Source/WebCore/platform/graphics/ContextShadow.h
+++ b/Source/WebCore/platform/graphics/ContextShadow.h
@@ -68,6 +68,8 @@ typedef void* PlatformContext;
// This class should be copyable since GraphicsContextQt keeps a stack of
// the shadow state for savePlatformState and restorePlatformState.
+// This class is Deprecated. Platforms should migrate to ShadowBlur.
+
class ContextShadow {
public:
enum {
diff --git a/Source/WebCore/platform/graphics/Extensions3D.h b/Source/WebCore/platform/graphics/Extensions3D.h
index 1a2b7a1..6d6efe5 100644
--- a/Source/WebCore/platform/graphics/Extensions3D.h
+++ b/Source/WebCore/platform/graphics/Extensions3D.h
@@ -52,6 +52,7 @@ public:
// GL_ANGLE_framebuffer_blit / GL_ANGLE_framebuffer_multisample
// GL_OES_texture_float
// GL_OES_standard_derivatives
+ // GL_OES_rgb8_rgba8
// Takes full name of extension; for example,
// "GL_EXT_texture_format_BGRA8888".
@@ -87,6 +88,10 @@ public:
// GL_OES_standard_derivatives names
FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B,
+
+ // GL_OES_rgb8_rgba8 names
+ RGB8_OES = 0x8051,
+ RGBA8_OES = 0x8058,
};
// GL_ARB_robustness
diff --git a/Source/WebCore/platform/graphics/FloatQuad.h b/Source/WebCore/platform/graphics/FloatQuad.h
index 6cd86f6..e913723 100644
--- a/Source/WebCore/platform/graphics/FloatQuad.h
+++ b/Source/WebCore/platform/graphics/FloatQuad.h
@@ -54,9 +54,9 @@ public:
FloatQuad(const FloatRect& inRect)
: m_p1(inRect.location())
- , m_p2(inRect.right(), inRect.y())
- , m_p3(inRect.right(), inRect.bottom())
- , m_p4(inRect.x(), inRect.bottom())
+ , m_p2(inRect.maxX(), inRect.y())
+ , m_p3(inRect.maxX(), inRect.maxY())
+ , m_p4(inRect.x(), inRect.maxY())
{
}
diff --git a/Source/WebCore/platform/graphics/FloatRect.cpp b/Source/WebCore/platform/graphics/FloatRect.cpp
index 0d8a24e..36f3d3a 100644
--- a/Source/WebCore/platform/graphics/FloatRect.cpp
+++ b/Source/WebCore/platform/graphics/FloatRect.cpp
@@ -51,22 +51,22 @@ bool FloatRect::intersects(const FloatRect& other) const
{
// Checking emptiness handles negative widths as well as zero.
return !isEmpty() && !other.isEmpty()
- && x() < other.right() && other.x() < right()
- && y() < other.bottom() && other.y() < bottom();
+ && x() < other.maxX() && other.x() < maxX()
+ && y() < other.maxY() && other.y() < maxY();
}
bool FloatRect::contains(const FloatRect& other) const
{
- return x() <= other.x() && right() >= other.right()
- && y() <= other.y() && bottom() >= other.bottom();
+ return x() <= other.x() && maxX() >= other.maxX()
+ && y() <= other.y() && maxY() >= other.maxY();
}
void FloatRect::intersect(const FloatRect& other)
{
float l = max(x(), other.x());
float t = max(y(), other.y());
- float r = min(right(), other.right());
- float b = min(bottom(), other.bottom());
+ float r = min(maxX(), other.maxX());
+ float b = min(maxY(), other.maxY());
// Return a clean empty rectangle for non-intersecting cases.
if (l >= r || t >= b) {
@@ -91,8 +91,8 @@ void FloatRect::unite(const FloatRect& other)
float l = min(x(), other.x());
float t = min(y(), other.y());
- float r = max(right(), other.right());
- float b = max(bottom(), other.bottom());
+ float r = max(maxX(), other.maxX());
+ float b = max(maxY(), other.maxY());
setLocationAndSizeFromEdges(l, t, r, b);
}
@@ -180,8 +180,8 @@ IntRect enclosingIntRect(const FloatRect& rect)
{
float left = floorf(rect.x());
float top = floorf(rect.y());
- float width = ceilf(rect.right()) - left;
- float height = ceilf(rect.bottom()) - top;
+ float width = ceilf(rect.maxX()) - left;
+ float height = ceilf(rect.maxY()) - top;
return IntRect(safeFloatToInt(left), safeFloatToInt(top),
safeFloatToInt(width), safeFloatToInt(height));
}
diff --git a/Source/WebCore/platform/graphics/FloatRect.h b/Source/WebCore/platform/graphics/FloatRect.h
index 10ad838..733f7cc 100644
--- a/Source/WebCore/platform/graphics/FloatRect.h
+++ b/Source/WebCore/platform/graphics/FloatRect.h
@@ -90,6 +90,8 @@ public:
float x() const { return m_location.x(); }
float y() const { return m_location.y(); }
+ float maxX() const { return x() + width(); }
+ float maxY() const { return y() + height(); }
float width() const { return m_size.width(); }
float height() const { return m_size.height(); }
@@ -100,11 +102,6 @@ public:
bool isEmpty() const { return m_size.isEmpty(); }
- float left() const { return x(); }
- float right() const { return x() + width(); }
- float top() const { return y(); }
- float bottom() const { return y() + height(); }
-
FloatPoint center() const { return FloatPoint(x() + width() / 2, y() + height() / 2); }
void move(const FloatSize& delta) { m_location += delta; }
@@ -119,10 +116,9 @@ public:
// Note, this doesn't match what IntRect::contains(IntPoint&) does; the int version
// is really checking for containment of 1x1 rect, but that doesn't make sense with floats.
bool contains(float px, float py) const
- { return px >= x() && px <= right() && py >= y() && py <= bottom(); }
+ { return px >= x() && px <= maxX() && py >= y() && py <= maxY(); }
bool contains(const FloatPoint& point) const { return contains(point.x(), point.y()); }
-
void inflateX(float dx) {
m_location.setX(m_location.x() - dx);
m_size.setWidth(m_size.width() + dx + dx);
diff --git a/Source/WebCore/platform/graphics/Font.cpp b/Source/WebCore/platform/graphics/Font.cpp
index 394de35..6bdddfc 100644
--- a/Source/WebCore/platform/graphics/Font.cpp
+++ b/Source/WebCore/platform/graphics/Font.cpp
@@ -2,7 +2,7 @@
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 1999 Antti Koivisto (koivisto@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2006, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -247,21 +247,15 @@ bool Font::isSVGFont() const
}
#endif
-String Font::normalizeSpaces(const String& string)
+String Font::normalizeSpaces(const UChar* characters, unsigned length)
{
- const UChar* characters = string.characters();
- unsigned length = string.length();
- Vector<UChar, 256> buffer(length);
- bool didReplacement = false;
-
- for (unsigned i = 0; i < length; ++i) {
- UChar originalCharacter = characters[i];
- buffer[i] = normalizeSpaces(originalCharacter);
- if (buffer[i] != originalCharacter)
- didReplacement = true;
- }
+ UChar* buffer;
+ String normalized = String::createUninitialized(length, buffer);
+
+ for (unsigned i = 0; i < length; ++i)
+ buffer[i] = normalizeSpaces(characters[i]);
- return didReplacement ? String(buffer.data(), length) : string;
+ return normalized;
}
static bool shouldUseFontSmoothing = true;
@@ -293,7 +287,7 @@ Font::CodePath Font::codePath(const TextRun& run) const
return s_codePath;
#if PLATFORM(QT)
- if (run.padding() || run.rtl() || isSmallCaps() || wordSpacing() || letterSpacing())
+ if (run.expansion() || run.rtl() || isSmallCaps() || wordSpacing() || letterSpacing())
return Complex;
#endif
@@ -458,6 +452,56 @@ bool Font::isCJKIdeographOrSymbol(UChar32 c)
return isCJKIdeograph(c);
}
+unsigned Font::expansionOpportunityCount(const UChar* characters, size_t length, TextDirection direction, bool& isAfterExpansion)
+{
+ static bool expandAroundIdeographs = canExpandAroundIdeographsInComplexText();
+ unsigned count = 0;
+ if (direction == LTR) {
+ for (size_t i = 0; i < length; ++i) {
+ UChar32 character = characters[i];
+ if (treatAsSpace(character)) {
+ count++;
+ isAfterExpansion = true;
+ continue;
+ }
+ if (U16_IS_LEAD(character) && i + 1 < length && U16_IS_TRAIL(characters[i + 1])) {
+ character = U16_GET_SUPPLEMENTARY(character, characters[i + 1]);
+ i++;
+ }
+ if (expandAroundIdeographs && isCJKIdeographOrSymbol(character)) {
+ if (!isAfterExpansion)
+ count++;
+ count++;
+ isAfterExpansion = true;
+ continue;
+ }
+ isAfterExpansion = false;
+ }
+ } else {
+ for (size_t i = length; i > 0; --i) {
+ UChar32 character = characters[i - 1];
+ if (treatAsSpace(character)) {
+ count++;
+ isAfterExpansion = true;
+ continue;
+ }
+ if (U16_IS_TRAIL(character) && i > 1 && U16_IS_LEAD(characters[i - 2])) {
+ character = U16_GET_SUPPLEMENTARY(characters[i - 2], character);
+ i--;
+ }
+ if (expandAroundIdeographs && isCJKIdeographOrSymbol(character)) {
+ if (!isAfterExpansion)
+ count++;
+ count++;
+ isAfterExpansion = true;
+ continue;
+ }
+ isAfterExpansion = false;
+ }
+ }
+ return count;
+}
+
bool Font::canReceiveTextEmphasis(UChar32 c)
{
CharCategory category = Unicode::category(c);
diff --git a/Source/WebCore/platform/graphics/Font.h b/Source/WebCore/platform/graphics/Font.h
index 2957c0a..258240b 100644
--- a/Source/WebCore/platform/graphics/Font.h
+++ b/Source/WebCore/platform/graphics/Font.h
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
* (C) 2000 Antti Koivisto (koivisto@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2006, 2007, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
@@ -25,14 +25,15 @@
#ifndef Font_h
#define Font_h
-#include "CharacterNames.h"
#include "FontDescription.h"
#include "FontFallbackList.h"
#include "SimpleFontData.h"
+#include "TextDirection.h"
#include "TypesettingFeatures.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/MathExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#if PLATFORM(QT)
#include <QFont>
@@ -43,7 +44,7 @@ namespace WebCore {
class FloatPoint;
class FloatRect;
class FontData;
-class FontFallbackList;
+class FontMetrics;
class FontPlatformData;
class FontSelector;
class GlyphBuffer;
@@ -54,8 +55,6 @@ class TextRun;
struct GlyphData;
-const unsigned defaultUnitsPerEm = 1000;
-
struct GlyphOverflow {
GlyphOverflow()
: left(0)
@@ -124,17 +123,12 @@ public:
bool italic() const { return m_fontDescription.italic(); }
FontWeight weight() const { return m_fontDescription.weight(); }
+ FontWidthVariant widthVariant() const { return m_fontDescription.widthVariant(); }
bool isPlatformFont() const { return m_isPlatformFont; }
// Metrics that we query the FontFallbackList for.
- int ascent(FontBaseline baselineType = AlphabeticBaseline) const { return primaryFont()->ascent(baselineType); }
- int descent(FontBaseline baselineType = AlphabeticBaseline) const { return primaryFont()->descent(baselineType); }
- int height() const { return ascent() + descent(); }
- int lineSpacing() const { return primaryFont()->lineSpacing(); }
- int lineGap() const { return primaryFont()->lineGap(); }
- float xHeight() const { return primaryFont()->xHeight(); }
- unsigned unitsPerEm() const { return primaryFont()->unitsPerEm(); }
+ const FontMetrics& fontMetrics() const { return primaryFont()->fontMetrics(); }
int spaceWidth() const { return (int)ceilf(primaryFont()->adjustedSpaceWidth() + m_letterSpacing); }
float tabWidth(const SimpleFontData& fontData) const { return 8 * ceilf(fontData.adjustedSpaceWidth() + letterSpacing()); }
int emphasisMarkAscent(const AtomicString&) const;
@@ -150,7 +144,9 @@ public:
static bool isCJKIdeograph(UChar32);
static bool isCJKIdeographOrSymbol(UChar32);
-
+
+ static unsigned expansionOpportunityCount(const UChar*, size_t length, TextDirection, bool& isAfterExpansion);
+
#if PLATFORM(QT)
QFont font() const;
#endif
@@ -185,6 +181,7 @@ private:
bool getEmphasisMarkGlyphData(const AtomicString&, GlyphData&) const;
static bool canReturnFallbackFontsForComplexText();
+ static bool canExpandAroundIdeographsInComplexText();
CodePath codePath(const TextRun&) const;
@@ -226,7 +223,7 @@ public:
return character;
}
- static String normalizeSpaces(const String&);
+ static String normalizeSpaces(const UChar*, unsigned length);
#if ENABLE(SVG_FONTS)
bool isSVGFont() const;
diff --git a/Source/WebCore/platform/graphics/FontCache.cpp b/Source/WebCore/platform/graphics/FontCache.cpp
index cfca980..ca82ebd 100644
--- a/Source/WebCore/platform/graphics/FontCache.cpp
+++ b/Source/WebCore/platform/graphics/FontCache.cpp
@@ -57,7 +57,7 @@ struct FontPlatformDataCacheKey {
WTF_MAKE_FAST_ALLOCATED;
public:
FontPlatformDataCacheKey(const AtomicString& family = AtomicString(), unsigned size = 0, unsigned weight = 0, bool italic = false,
- bool isPrinterFont = false, FontRenderingMode renderingMode = NormalRenderingMode, FontOrientation orientation = Horizontal)
+ bool isPrinterFont = false, FontRenderingMode renderingMode = NormalRenderingMode, FontOrientation orientation = Horizontal, FontWidthVariant widthVariant = RegularWidth)
: m_size(size)
, m_weight(weight)
, m_family(family)
@@ -65,6 +65,7 @@ public:
, m_printerFont(isPrinterFont)
, m_renderingMode(renderingMode)
, m_orientation(orientation)
+ , m_widthVariant(widthVariant)
{
}
@@ -75,7 +76,7 @@ public:
{
return equalIgnoringCase(m_family, other.m_family) && m_size == other.m_size &&
m_weight == other.m_weight && m_italic == other.m_italic && m_printerFont == other.m_printerFont &&
- m_renderingMode == other.m_renderingMode && m_orientation == other.m_orientation;
+ m_renderingMode == other.m_renderingMode && m_orientation == other.m_orientation && m_widthVariant == other.m_widthVariant;
}
unsigned m_size;
@@ -85,6 +86,7 @@ public:
bool m_printerFont;
FontRenderingMode m_renderingMode;
FontOrientation m_orientation;
+ FontWidthVariant m_widthVariant;
private:
static unsigned hashTableDeletedSize() { return 0xFFFFFFFFU; }
@@ -92,10 +94,11 @@ private:
inline unsigned computeHash(const FontPlatformDataCacheKey& fontKey)
{
- unsigned hashCodes[4] = {
+ unsigned hashCodes[5] = {
CaseFoldingHash::hash(fontKey.m_family),
fontKey.m_size,
fontKey.m_weight,
+ fontKey.m_widthVariant,
static_cast<unsigned>(fontKey.m_orientation) << 3 | static_cast<unsigned>(fontKey.m_italic) << 2 | static_cast<unsigned>(fontKey.m_printerFont) << 1 | static_cast<unsigned>(fontKey.m_renderingMode)
};
return WTF::StringHasher::createBlobHash<sizeof(hashCodes)>(hashCodes);
@@ -195,7 +198,7 @@ FontPlatformData* FontCache::getCachedFontPlatformData(const FontDescription& fo
}
FontPlatformDataCacheKey key(familyName, fontDescription.computedPixelSize(), fontDescription.weight(), fontDescription.italic(),
- fontDescription.usePrinterFont(), fontDescription.renderingMode(), fontDescription.orientation());
+ fontDescription.usePrinterFont(), fontDescription.renderingMode(), fontDescription.orientation(), fontDescription.widthVariant());
FontPlatformData* result = 0;
bool foundResult;
FontPlatformDataCache::iterator it = gFontPlatformDataCache->find(key);
diff --git a/Source/WebCore/platform/graphics/FontDescription.h b/Source/WebCore/platform/graphics/FontDescription.h
index 12900bf..283d297 100644
--- a/Source/WebCore/platform/graphics/FontDescription.h
+++ b/Source/WebCore/platform/graphics/FontDescription.h
@@ -30,6 +30,7 @@
#include "FontRenderingMode.h"
#include "FontSmoothingMode.h"
#include "FontTraitsMask.h"
+#include "FontWidthVariant.h"
#include "TextRenderingMode.h"
namespace WebCore {
@@ -57,6 +58,7 @@ public:
: m_specifiedSize(0)
, m_computedSize(0)
, m_orientation(Horizontal)
+ , m_widthVariant(RegularWidth)
, m_italic(false)
, m_smallCaps(false)
, m_isAbsoluteSize(false)
@@ -97,6 +99,7 @@ public:
FontTraitsMask traitsMask() const;
bool isSpecifiedFont() const { return m_isSpecifiedFont; }
FontOrientation orientation() const { return m_orientation; }
+ FontWidthVariant widthVariant() const { return m_widthVariant; }
void setFamily(const FontFamily& family) { m_familyList = family; }
void setComputedSize(float s) { m_computedSize = s; }
@@ -117,6 +120,7 @@ public:
void setTextRenderingMode(TextRenderingMode rendering) { m_textRendering = rendering; }
void setIsSpecifiedFont(bool isSpecifiedFont) { m_isSpecifiedFont = isSpecifiedFont; }
void setOrientation(FontOrientation orientation) { m_orientation = orientation; }
+ void setWidthVariant(FontWidthVariant widthVariant) { m_widthVariant = widthVariant; }
private:
FontFamily m_familyList; // The list of font families to be used.
@@ -126,6 +130,8 @@ private:
float m_computedSize; // Computed size adjusted for the minimum font size and the zoom factor.
FontOrientation m_orientation;
+
+ FontWidthVariant m_widthVariant;
bool m_italic : 1;
bool m_smallCaps : 1;
@@ -162,7 +168,8 @@ inline bool FontDescription::operator==(const FontDescription& other) const
&& m_fontSmoothing == other.m_fontSmoothing
&& m_textRendering == other.m_textRendering
&& m_isSpecifiedFont == other.m_isSpecifiedFont
- && m_orientation == other.m_orientation;
+ && m_orientation == other.m_orientation
+ && m_widthVariant == other.m_widthVariant;
}
}
diff --git a/Source/WebCore/platform/graphics/FontFastPath.cpp b/Source/WebCore/platform/graphics/FontFastPath.cpp
index f927c13..034ac22 100644
--- a/Source/WebCore/platform/graphics/FontFastPath.cpp
+++ b/Source/WebCore/platform/graphics/FontFastPath.cpp
@@ -23,7 +23,6 @@
#include "config.h"
#include "Font.h"
-#include "CharacterNames.h"
#include "FloatRect.h"
#include "FontCache.h"
#include "FontFallbackList.h"
@@ -32,8 +31,8 @@
#include "SimpleFontData.h"
#include "TextRun.h"
#include "WidthIterator.h"
-
#include <wtf/MathExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#include <wtf/unicode/Unicode.h>
using namespace WTF;
@@ -252,7 +251,7 @@ int Font::emphasisMarkAscent(const AtomicString& mark) const
if (!markFontData)
return 0;
- return markFontData->ascent();
+ return markFontData->fontMetrics().ascent();
}
int Font::emphasisMarkDescent(const AtomicString& mark) const
@@ -266,7 +265,7 @@ int Font::emphasisMarkDescent(const AtomicString& mark) const
if (!markFontData)
return 0;
- return markFontData->descent();
+ return markFontData->fontMetrics().descent();
}
int Font::emphasisMarkHeight(const AtomicString& mark) const
@@ -280,7 +279,7 @@ int Font::emphasisMarkHeight(const AtomicString& mark) const
if (!markFontData)
return 0;
- return markFontData->height();
+ return markFontData->fontMetrics().height();
}
float Font::getGlyphsAndAdvancesForSimpleText(const TextRun& run, int from, int to, GlyphBuffer& glyphBuffer, ForTextEmphasisOrNot forTextEmphasis) const
@@ -414,8 +413,8 @@ float Font::floatWidthForSimpleText(const TextRun& run, GlyphBuffer* glyphBuffer
it.advance(run.length(), glyphBuffer);
if (glyphOverflow) {
- glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-it.minGlyphBoundingBoxY()) - ascent());
- glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(it.maxGlyphBoundingBoxY()) - descent());
+ glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-it.minGlyphBoundingBoxY()) - fontMetrics().ascent());
+ glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(it.maxGlyphBoundingBoxY()) - fontMetrics().descent());
glyphOverflow->left = ceilf(it.firstGlyphOverflow());
glyphOverflow->right = ceilf(it.lastGlyphOverflow());
}
diff --git a/Source/WebCore/platform/graphics/FontMetrics.h b/Source/WebCore/platform/graphics/FontMetrics.h
new file mode 100644
index 0000000..89c5545
--- /dev/null
+++ b/Source/WebCore/platform/graphics/FontMetrics.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef FontMetrics_h
+#define FontMetrics_h
+
+#include <wtf/MathExtras.h>
+
+namespace WebCore {
+
+const unsigned gDefaultUnitsPerEm = 1000;
+
+class FontMetrics {
+public:
+ FontMetrics()
+ : m_unitsPerEm(gDefaultUnitsPerEm)
+ , m_ascent(0)
+ , m_descent(0)
+ , m_lineGap(0)
+ , m_lineSpacing(0)
+ , m_xHeight(0)
+ {
+ }
+
+ unsigned unitsPerEm() const { return m_unitsPerEm; }
+ void setUnitsPerEm(unsigned unitsPerEm) { m_unitsPerEm = unitsPerEm; }
+
+ float floatAscent(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ if (baselineType == AlphabeticBaseline)
+ return m_ascent;
+ return floatHeight() / 2;
+ }
+
+ void setAscent(float ascent) { m_ascent = ascent; }
+
+ float floatDescent(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ if (baselineType == AlphabeticBaseline)
+ return m_descent;
+ return floatHeight() / 2;
+ }
+
+ void setDescent(float descent) { m_descent = descent; }
+
+ float floatHeight(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ return floatAscent(baselineType) + floatDescent(baselineType);
+ }
+
+ float floatLineGap() const { return m_lineGap; }
+ void setLineGap(float lineGap) { m_lineGap = lineGap; }
+
+ float floatLineSpacing() const { return m_lineSpacing; }
+ void setLineSpacing(float lineSpacing) { m_lineSpacing = lineSpacing; }
+
+ float xHeight() const { return m_xHeight; }
+ void setXHeight(float xHeight) { m_xHeight = xHeight; }
+
+ // Integer variants of certain metrics, used for HTML rendering.
+ int ascent(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ if (baselineType == AlphabeticBaseline)
+ return lroundf(m_ascent);
+ return height() - height() / 2;
+ }
+
+ int descent(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ if (baselineType == AlphabeticBaseline)
+ return lroundf(m_descent);
+ return height() / 2;
+ }
+
+ int height(FontBaseline baselineType = AlphabeticBaseline) const
+ {
+ return ascent(baselineType) + descent(baselineType);
+ }
+
+ int lineGap() const { return lroundf(m_lineGap); }
+ int lineSpacing() const { return lroundf(m_lineSpacing); }
+
+private:
+ friend class SimpleFontData;
+
+ void reset()
+ {
+ m_unitsPerEm = gDefaultUnitsPerEm;
+ m_ascent = 0;
+ m_descent = 0;
+ m_lineGap = 0;
+ m_lineSpacing = 0;
+ m_xHeight = 0;
+ }
+
+ unsigned m_unitsPerEm;
+ float m_ascent;
+ float m_descent;
+ float m_lineGap;
+ float m_lineSpacing;
+ float m_xHeight;
+};
+
+} // namespace WebCore
+
+#endif // FontMetrics_h
diff --git a/Source/WebCore/platform/graphics/FontWidthVariant.h b/Source/WebCore/platform/graphics/FontWidthVariant.h
new file mode 100644
index 0000000..bbc98ee
--- /dev/null
+++ b/Source/WebCore/platform/graphics/FontWidthVariant.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FontWidthVariant_h
+#define FontWidthVariant_h
+
+namespace WebCore {
+
+enum FontWidthVariant { RegularWidth, HalfWidth, ThirdWidth, QuarterWidth };
+
+} // namespace WebCore
+
+#endif // FontWidthVariant_h
diff --git a/Source/WebCore/platform/graphics/GlyphBuffer.h b/Source/WebCore/platform/graphics/GlyphBuffer.h
index 6f1fe7b..7aac1e3 100644
--- a/Source/WebCore/platform/graphics/GlyphBuffer.h
+++ b/Source/WebCore/platform/graphics/GlyphBuffer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2009, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2007-2008 Torch Mobile Inc.
*
* Redistribution and use in source and binary forms, with or without
@@ -187,7 +187,20 @@ public:
m_advances.append(advance);
}
#endif
-
+
+ void expandLastAdvance(float width)
+ {
+ ASSERT(!isEmpty());
+ GlyphBufferAdvance& lastAdvance = m_advances.last();
+#if PLATFORM(CG) || (PLATFORM(WX) && OS(DARWIN))
+ lastAdvance.width += width;
+#elif OS(WINCE)
+ lastAdvance += width;
+#else
+ lastAdvance += FloatSize(width, 0);
+#endif
+ }
+
private:
Vector<const SimpleFontData*, 2048> m_fontData;
Vector<GlyphBufferGlyph, 2048> m_glyphs;
diff --git a/Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp b/Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp
index 3df14b9..e7ed193 100644
--- a/Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp
+++ b/Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp
@@ -29,12 +29,12 @@
#include "config.h"
#include "GlyphPageTreeNode.h"
-#include "CharacterNames.h"
#include "PlatformString.h"
#include "SegmentedFontData.h"
#include "SimpleFontData.h"
#include <stdio.h>
#include <wtf/text/CString.h>
+#include <wtf/unicode/CharacterNames.h>
#include <wtf/unicode/Unicode.h>
namespace WebCore {
diff --git a/Source/WebCore/platform/graphics/GraphicsContext.cpp b/Source/WebCore/platform/graphics/GraphicsContext.cpp
index 9f94ac9..a0a7ea9 100644
--- a/Source/WebCore/platform/graphics/GraphicsContext.cpp
+++ b/Source/WebCore/platform/graphics/GraphicsContext.cpp
@@ -142,6 +142,18 @@ void GraphicsContext::setShadow(const FloatSize& offset, float blur, const Color
setPlatformShadow(offset, blur, color, colorSpace);
}
+void GraphicsContext::setLegacyShadow(const FloatSize& offset, float blur, const Color& color, ColorSpace colorSpace)
+{
+ m_state.shadowOffset = offset;
+ m_state.shadowBlur = blur;
+ m_state.shadowColor = color;
+ m_state.shadowColorSpace = colorSpace;
+#if PLATFORM(CG)
+ m_state.shadowsUseLegacyRadius = true;
+#endif
+ setPlatformShadow(offset, blur, color, colorSpace);
+}
+
void GraphicsContext::clearShadow()
{
m_state.shadowOffset = FloatSize();
@@ -532,10 +544,10 @@ void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorS
InterpolationQuality previousInterpolationQuality = imageInterpolationQuality();
// FIXME: Should be InterpolationLow
setImageInterpolationQuality(InterpolationNone);
- image->draw(this, styleColorSpace, dest, src, op, useLowQualityScale);
+ image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale);
setImageInterpolationQuality(previousInterpolationQuality);
} else
- image->draw(this, styleColorSpace, dest, src, op, useLowQualityScale);
+ image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale);
}
void GraphicsContext::addRoundedRectClip(const RoundedIntRect& rect)
@@ -565,6 +577,14 @@ void GraphicsContext::clipToImageBuffer(ImageBuffer* buffer, const FloatRect& re
buffer->clip(this, rect);
}
+#if !PLATFORM(CG)
+IntRect GraphicsContext::clipBounds() const
+{
+ ASSERT_NOT_REACHED();
+ return IntRect();
+}
+#endif
+
TextDrawingModeFlags GraphicsContext::textDrawingMode() const
{
return m_state.textDrawingMode;
@@ -590,6 +610,34 @@ void GraphicsContext::fillRoundedRect(const RoundedIntRect& rect, const Color& c
fillRoundedRect(rect.rect(), rect.radii().topLeft(), rect.radii().topRight(), rect.radii().bottomLeft(), rect.radii().bottomRight(), color, colorSpace);
}
+#if !PLATFORM(CG)
+void GraphicsContext::fillRectWithRoundedHole(const IntRect& rect, const RoundedIntRect& roundedHoleRect, const Color& color, ColorSpace colorSpace)
+{
+ if (paintingDisabled())
+ return;
+
+ Path path;
+ path.addRect(rect);
+
+ if (!roundedHoleRect.radii().isZero())
+ path.addRoundedRect(roundedHoleRect.rect(), roundedHoleRect.radii().topLeft(), roundedHoleRect.radii().topRight(), roundedHoleRect.radii().bottomLeft(), roundedHoleRect.radii().bottomRight());
+ else
+ path.addRect(roundedHoleRect.rect());
+
+ WindRule oldFillRule = fillRule();
+ Color oldFillColor = fillColor();
+ ColorSpace oldFillColorSpace = fillColorSpace();
+
+ setFillRule(RULE_EVENODD);
+ setFillColor(color, colorSpace);
+
+ fillPath(path);
+
+ setFillRule(oldFillRule);
+ setFillColor(oldFillColor, oldFillColorSpace);
+}
+#endif
+
void GraphicsContext::setCompositeOperation(CompositeOperator compositeOperation)
{
m_state.compositeOperator = compositeOperation;
diff --git a/Source/WebCore/platform/graphics/GraphicsContext.h b/Source/WebCore/platform/graphics/GraphicsContext.h
index 77321e2..21a9067 100644
--- a/Source/WebCore/platform/graphics/GraphicsContext.h
+++ b/Source/WebCore/platform/graphics/GraphicsContext.h
@@ -176,6 +176,11 @@ namespace WebCore {
, shouldSmoothFonts(true)
, paintingDisabled(false)
, shadowsIgnoreTransforms(false)
+#if PLATFORM(CG)
+ // Core Graphics incorrectly renders shadows with radius > 8px (<rdar://problem/8103442>),
+ // but we need to preserve this buggy behavior for canvas and -webkit-box-shadow.
+ , shadowsUseLegacyRadius(false)
+#endif
{
}
@@ -212,6 +217,9 @@ namespace WebCore {
bool shouldSmoothFonts : 1;
bool paintingDisabled : 1;
bool shadowsIgnoreTransforms : 1;
+#if PLATFORM(CG)
+ bool shadowsUseLegacyRadius : 1;
+#endif
};
class GraphicsContext {
@@ -320,6 +328,7 @@ namespace WebCore {
void fillRect(const FloatRect&, Generator&);
void fillRoundedRect(const IntRect&, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color&, ColorSpace);
void fillRoundedRect(const RoundedIntRect&, const Color&, ColorSpace);
+ void fillRectWithRoundedHole(const IntRect&, const RoundedIntRect& roundedHoleRect, const Color&, ColorSpace);
void clearRect(const FloatRect&);
@@ -355,6 +364,8 @@ namespace WebCore {
void clipPath(const Path&, WindRule);
void clipConvexPolygon(size_t numPoints, const FloatPoint*, bool antialias = true);
void clipToImageBuffer(ImageBuffer*, const FloatRect&);
+
+ IntRect clipBounds() const;
TextDrawingModeFlags textDrawingMode() const;
void setTextDrawingMode(TextDrawingModeFlags);
@@ -385,6 +396,10 @@ namespace WebCore {
bool hasShadow() const;
void setShadow(const FloatSize&, float blur, const Color&, ColorSpace);
+ // Legacy shadow blur radius is used for canvas, and -webkit-box-shadow.
+ // It has different treatment of radii > 8px.
+ void setLegacyShadow(const FloatSize&, float blur, const Color&, ColorSpace);
+
bool getShadow(FloatSize&, float&, Color&, ColorSpace&) const;
void clearShadow();
@@ -404,16 +419,11 @@ namespace WebCore {
void setCompositeOperation(CompositeOperator);
CompositeOperator compositeOperation() const;
-#if PLATFORM(SKIA)
- void beginPath();
- void addPath(const Path&);
-#endif
-
void clip(const Path&);
// This clip function is used only by <canvas> code. It allows
// implementations to handle clipping on the canvas differently since
- // the disipline is different.
+ // the discipline is different.
void canvasClip(const Path&);
void clipOut(const Path&);
@@ -500,7 +510,6 @@ namespace WebCore {
bool inTransparencyLayer() const;
void pushTransparencyLayerInternal(const QRect &rect, qreal opacity, QPixmap& alphaMask);
void takeOwnershipOfPlatformContext();
- static QPainter::CompositionMode toQtCompositionMode(CompositeOperator op);
#endif
#if PLATFORM(QT) || PLATFORM(CAIRO)
diff --git a/Source/WebCore/platform/graphics/GraphicsContext3D.cpp b/Source/WebCore/platform/graphics/GraphicsContext3D.cpp
index f7c5a66..324fed8 100644
--- a/Source/WebCore/platform/graphics/GraphicsContext3D.cpp
+++ b/Source/WebCore/platform/graphics/GraphicsContext3D.cpp
@@ -26,7 +26,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
@@ -1437,4 +1437,4 @@ bool GraphicsContext3D::packPixels(const uint8_t* sourceData,
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/GraphicsContext3D.h b/Source/WebCore/platform/graphics/GraphicsContext3D.h
index 24827e5..d6c1cec 100644
--- a/Source/WebCore/platform/graphics/GraphicsContext3D.h
+++ b/Source/WebCore/platform/graphics/GraphicsContext3D.h
@@ -47,7 +47,9 @@
typedef unsigned int GC3Denum;
typedef unsigned char GC3Dboolean;
typedef unsigned int GC3Dbitfield;
+typedef signed char GC3Dbyte;
typedef unsigned char GC3Dubyte;
+typedef short GC3Dshort;
typedef unsigned short GC3Dushort;
typedef int GC3Dint;
typedef int GC3Dsizei;
@@ -117,7 +119,7 @@ class GraphicsContext3DInternal;
class GraphicsContext3D : public RefCounted<GraphicsContext3D> {
public:
- enum WebGLEnumType {
+ enum {
DEPTH_BUFFER_BIT = 0x00000100,
STENCIL_BUFFER_BIT = 0x00000400,
COLOR_BUFFER_BIT = 0x00004000,
@@ -452,6 +454,14 @@ public:
RenderDirectlyToHostWindow
};
+ class ContextLostCallback {
+ public:
+ virtual void onContextLost() = 0;
+ virtual ~ContextLostCallback() {}
+ };
+
+ void setContextLostCallback(PassOwnPtr<ContextLostCallback>);
+
static PassRefPtr<GraphicsContext3D> create(Attributes, HostWindow*, RenderStyle = RenderOffscreen);
~GraphicsContext3D();
@@ -487,10 +497,6 @@ public:
void prepareTexture();
#endif
- // Helper to return the size in bytes of OpenGL data types
- // like GL_FLOAT, GL_INT, etc.
- unsigned int sizeInBytes(GC3Denum type);
-
// Helper to texImage2D with pixel==0 case: pixels are initialized to 0.
// Return true if no GL error is synthesized.
// By default, alignment is 4, the OpenGL default setting.
diff --git a/Source/WebCore/platform/graphics/Icon.h b/Source/WebCore/platform/graphics/Icon.h
index c83685f..2797133 100644
--- a/Source/WebCore/platform/graphics/Icon.h
+++ b/Source/WebCore/platform/graphics/Icon.h
@@ -42,6 +42,7 @@ typedef struct _GdkPixbuf GdkPixbuf;
#elif PLATFORM(EFL)
typedef struct _Evas_Object Evas_Object;
#elif PLATFORM(CHROMIUM)
+#include "Image.h"
#include "PlatformIcon.h"
#endif
@@ -60,6 +61,8 @@ public:
#if PLATFORM(WIN)
static PassRefPtr<Icon> create(HICON hIcon) { return adoptRef(new Icon(hIcon)); }
+#elif PLATFORM(CHROMIUM)
+ static PassRefPtr<Icon> create(PassRefPtr<PlatformIcon> icon) { return adoptRef(new Icon(icon)); }
#endif
private:
@@ -79,8 +82,8 @@ private:
Icon();
Evas_Object* m_icon;
#elif PLATFORM(CHROMIUM)
- Icon(const PlatformIcon&);
- PlatformIcon m_icon;
+ Icon(PassRefPtr<PlatformIcon>);
+ RefPtr<PlatformIcon> m_icon;
#endif
};
diff --git a/Source/WebCore/platform/graphics/IntRect.cpp b/Source/WebCore/platform/graphics/IntRect.cpp
index 188b5f9..7591c41 100644
--- a/Source/WebCore/platform/graphics/IntRect.cpp
+++ b/Source/WebCore/platform/graphics/IntRect.cpp
@@ -44,22 +44,22 @@ bool IntRect::intersects(const IntRect& other) const
{
// Checking emptiness handles negative widths as well as zero.
return !isEmpty() && !other.isEmpty()
- && x() < other.right() && other.x() < right()
- && y() < other.bottom() && other.y() < bottom();
+ && x() < other.maxX() && other.x() < maxX()
+ && y() < other.maxY() && other.y() < maxY();
}
bool IntRect::contains(const IntRect& other) const
{
- return x() <= other.x() && right() >= other.right()
- && y() <= other.y() && bottom() >= other.bottom();
+ return x() <= other.x() && maxX() >= other.maxX()
+ && y() <= other.y() && maxY() >= other.maxY();
}
void IntRect::intersect(const IntRect& other)
{
int l = max(x(), other.x());
int t = max(y(), other.y());
- int r = min(right(), other.right());
- int b = min(bottom(), other.bottom());
+ int r = min(maxX(), other.maxX());
+ int b = min(maxY(), other.maxY());
// Return a clean empty rectangle for non-intersecting cases.
if (l >= r || t >= b) {
@@ -87,8 +87,8 @@ void IntRect::unite(const IntRect& other)
int l = min(x(), other.x());
int t = min(y(), other.y());
- int r = max(right(), other.right());
- int b = max(bottom(), other.bottom());
+ int r = max(maxX(), other.maxX());
+ int b = max(maxY(), other.maxY());
m_location.setX(l);
m_location.setY(t);
diff --git a/Source/WebCore/platform/graphics/IntRect.h b/Source/WebCore/platform/graphics/IntRect.h
index 638db75..3a2433d 100644
--- a/Source/WebCore/platform/graphics/IntRect.h
+++ b/Source/WebCore/platform/graphics/IntRect.h
@@ -91,6 +91,8 @@ public:
int x() const { return m_location.x(); }
int y() const { return m_location.y(); }
+ int maxX() const { return x() + width(); }
+ int maxY() const { return y() + height(); }
int width() const { return m_size.width(); }
int height() const { return m_size.height(); }
@@ -99,18 +101,8 @@ public:
void setWidth(int width) { m_size.setWidth(width); }
void setHeight(int height) { m_size.setHeight(height); }
- // Be careful with these functions. The point is considered to be to the right and below. These are not
- // substitutes for right() and bottom().
- IntPoint topLeft() const { return m_location; }
- IntPoint topRight() const { return IntPoint(right() - 1, y()); }
- IntPoint bottomLeft() const { return IntPoint(x(), bottom() - 1); }
- IntPoint bottomRight() const { return IntPoint(right() - 1, bottom() - 1); }
-
bool isEmpty() const { return m_size.isEmpty(); }
- int right() const { return x() + width(); }
- int bottom() const { return y() + height(); }
-
// NOTE: The result is rounded to integer values, and thus may be not the exact
// center point.
IntPoint center() const { return IntPoint(x() + width() / 2, y() + height() / 2); }
@@ -118,26 +110,26 @@ public:
void move(const IntSize& s) { m_location += s; }
void move(int dx, int dy) { m_location.move(dx, dy); }
- void shiftLeftEdgeTo(int edge)
+ void shiftXEdgeTo(int edge)
{
int delta = edge - x();
setX(edge);
setWidth(std::max(0, width() - delta));
}
- void shiftRightEdgeTo(int edge)
+ void shiftMaxXEdgeTo(int edge)
{
- int delta = edge - right();
+ int delta = edge - maxX();
setWidth(std::max(0, width() + delta));
}
- void shiftTopEdgeTo(int edge)
+ void shiftYEdgeTo(int edge)
{
int delta = edge - y();
setY(edge);
setHeight(std::max(0, height() - delta));
}
- void shiftBottomEdgeTo(int edge)
+ void shiftMaxYEdgeTo(int edge)
{
- int delta = edge - bottom();
+ int delta = edge - maxY();
setHeight(std::max(0, height() + delta));
}
@@ -147,7 +139,7 @@ public:
// This checks to see if the rect contains x,y in the traditional sense.
// Equivalent to checking if the rect contains a 1x1 rect below and to the right of (px,py).
bool contains(int px, int py) const
- { return px >= x() && px < right() && py >= y() && py < bottom(); }
+ { return px >= x() && px < maxX() && py >= y() && py < maxY(); }
bool contains(const IntPoint& point) const { return contains(point.x(), point.y()); }
void intersect(const IntRect&);
diff --git a/Source/WebCore/platform/graphics/IntRectHash.h b/Source/WebCore/platform/graphics/IntRectHash.h
new file mode 100644
index 0000000..7138f33
--- /dev/null
+++ b/Source/WebCore/platform/graphics/IntRectHash.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IntRectHash_h
+#define IntRectHash_h
+
+#include "IntPointHash.h"
+#include "IntRect.h"
+#include "IntSizeHash.h"
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
+
+namespace WTF {
+
+template<> struct IntHash<WebCore::IntRect> {
+ static unsigned hash(const WebCore::IntRect& key)
+ {
+ return intHash(static_cast<uint64_t>(DefaultHash<WebCore::IntPoint>::Hash::hash(key.location())) << 32 | DefaultHash<WebCore::IntSize>::Hash::hash(key.size()));
+ }
+ static bool equal(const WebCore::IntRect& a, const WebCore::IntRect& b)
+ {
+ return DefaultHash<WebCore::IntPoint>::Hash::equal(a.location(), b.location()) && DefaultHash<WebCore::IntSize>::Hash::equal(a.size(), b.size());
+ }
+ static const bool safeToCompareToEmptyOrDeleted = true;
+};
+template<> struct DefaultHash<WebCore::IntRect> { typedef IntHash<WebCore::IntRect> Hash; };
+
+template<> struct HashTraits<WebCore::IntRect> : GenericHashTraits<WebCore::IntRect> {
+ static const bool emptyValueIsZero = true;
+ static const bool needsDestruction = false;
+ static void constructDeletedValue(WebCore::IntRect& slot) { new (&slot) WebCore::IntRect(-1, -1, -1, -1); }
+ static bool isDeletedValue(const WebCore::IntRect& value) { return value.x() == -1 && value.y() == -1 && value.width() == -1 && value.height() == -1; }
+};
+
+}
+
+#endif
diff --git a/Source/WebCore/platform/graphics/IntSizeHash.h b/Source/WebCore/platform/graphics/IntSizeHash.h
index ad6eac3..0cca000 100644
--- a/Source/WebCore/platform/graphics/IntSizeHash.h
+++ b/Source/WebCore/platform/graphics/IntSizeHash.h
@@ -24,22 +24,20 @@
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
-using WebCore::IntSize;
-
namespace WTF {
- template<> struct IntHash<IntSize> {
- static unsigned hash(const IntSize& key) { return intHash((static_cast<uint64_t>(key.width()) << 32 | key.height())); }
- static bool equal(const IntSize& a, const IntSize& b) { return a == b; }
+ template<> struct IntHash<WebCore::IntSize> {
+ static unsigned hash(const WebCore::IntSize& key) { return intHash((static_cast<uint64_t>(key.width()) << 32 | key.height())); }
+ static bool equal(const WebCore::IntSize& a, const WebCore::IntSize& b) { return a == b; }
static const bool safeToCompareToEmptyOrDeleted = true;
};
- template<> struct DefaultHash<IntSize> { typedef IntHash<IntSize> Hash; };
+ template<> struct DefaultHash<WebCore::IntSize> { typedef IntHash<WebCore::IntSize> Hash; };
- template<> struct HashTraits<IntSize> : GenericHashTraits<IntSize> {
+ template<> struct HashTraits<WebCore::IntSize> : GenericHashTraits<WebCore::IntSize> {
static const bool emptyValueIsZero = true;
static const bool needsDestruction = false;
- static void constructDeletedValue(IntSize& slot) { new (&slot) IntSize(-1, -1); }
- static bool isDeletedValue(const IntSize& value) { return value.width() == -1 && value.height() == -1; }
+ static void constructDeletedValue(WebCore::IntSize& slot) { new (&slot) WebCore::IntSize(-1, -1); }
+ static bool isDeletedValue(const WebCore::IntSize& value) { return value.width() == -1 && value.height() == -1; }
};
} // namespace WTF
diff --git a/Source/WebCore/platform/graphics/MediaPlayer.cpp b/Source/WebCore/platform/graphics/MediaPlayer.cpp
index 60f55a5..8eed0d2 100644
--- a/Source/WebCore/platform/graphics/MediaPlayer.cpp
+++ b/Source/WebCore/platform/graphics/MediaPlayer.cpp
@@ -698,6 +698,26 @@ double MediaPlayer::maximumDurationToCacheMediaTime() const
return m_private->maximumDurationToCacheMediaTime();
}
+unsigned long MediaPlayer::decodedFrames() const
+{
+ return m_private->decodedFrames();
+}
+
+unsigned long MediaPlayer::droppedFrames() const
+{
+ return m_private->droppedFrames();
+}
+
+unsigned long MediaPlayer::audioBytesDecoded() const
+{
+ return m_private->audioBytesDecoded();
+}
+
+unsigned long MediaPlayer::videoBytesDecoded() const
+{
+ return m_private->videoBytesDecoded();
+}
+
void MediaPlayer::reloadTimerFired(Timer<MediaPlayer>*)
{
m_private->cancelLoad();
diff --git a/Source/WebCore/platform/graphics/MediaPlayer.h b/Source/WebCore/platform/graphics/MediaPlayer.h
index ef0b3eb..1112148 100644
--- a/Source/WebCore/platform/graphics/MediaPlayer.h
+++ b/Source/WebCore/platform/graphics/MediaPlayer.h
@@ -287,6 +287,11 @@ public:
double maximumDurationToCacheMediaTime() const;
+ unsigned long decodedFrames() const;
+ unsigned long droppedFrames() const;
+ unsigned long audioBytesDecoded() const;
+ unsigned long videoBytesDecoded() const;
+
private:
MediaPlayer(MediaPlayerClient*);
void loadWithNextMediaEngine(MediaPlayerFactory*);
diff --git a/Source/WebCore/platform/graphics/MediaPlayerPrivate.h b/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
index 6abe258..04b2612 100644
--- a/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
+++ b/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
@@ -136,6 +136,10 @@ public:
// it is OK to calculate movie time before refreshing the cached time.
virtual double maximumDurationToCacheMediaTime() const { return 0; }
+ virtual unsigned long decodedFrames() const { return 0; }
+ virtual unsigned long droppedFrames() const { return 0; }
+ virtual unsigned long audioBytesDecoded() const { return 0; }
+ virtual unsigned long videoBytesDecoded() const { return 0; }
};
}
diff --git a/Source/WebCore/platform/graphics/ShadowBlur.cpp b/Source/WebCore/platform/graphics/ShadowBlur.cpp
new file mode 100644
index 0000000..f61ecff
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ShadowBlur.cpp
@@ -0,0 +1,733 @@
+/*
+ * Copyright (C) 2011 Apple Inc.
+ * Copyright (C) 2010 Sencha, Inc.
+ * Copyright (C) 2010 Igalia S.L.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ShadowBlur.h"
+
+#include "AffineTransform.h"
+#include "FloatQuad.h"
+#include "GraphicsContext.h"
+#include "ImageBuffer.h"
+#include "Timer.h"
+#include <wtf/MathExtras.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/UnusedParam.h>
+
+using namespace std;
+
+namespace WebCore {
+
+static inline int roundUpToMultipleOf32(int d)
+{
+ return (1 + (d >> 5)) << 5;
+}
+
+// ShadowBlur needs a scratch image as the buffer for the blur filter.
+// Instead of creating and destroying the buffer for every operation,
+// we create a buffer which will be automatically purged via a timer.
+class ScratchBuffer {
+public:
+ ScratchBuffer()
+ : m_purgeTimer(this, &ScratchBuffer::timerFired)
+#if !ASSERT_DISABLED
+ , m_bufferInUse(false)
+#endif
+ {
+ }
+
+ ImageBuffer* getScratchBuffer(const IntSize& size)
+ {
+ ASSERT(!m_bufferInUse);
+#if !ASSERT_DISABLED
+ m_bufferInUse = true;
+#endif
+ // We do not need to recreate the buffer if the current buffer is large enough.
+ if (m_imageBuffer && m_imageBuffer->width() >= size.width() && m_imageBuffer->height() >= size.height())
+ return m_imageBuffer.get();
+
+ // Round to the nearest 32 pixels so we do not grow the buffer for similar sized requests.
+ IntSize roundedSize(roundUpToMultipleOf32(size.width()), roundUpToMultipleOf32(size.height()));
+
+ m_imageBuffer = ImageBuffer::create(roundedSize);
+ return m_imageBuffer.get();
+ }
+
+ void scheduleScratchBufferPurge()
+ {
+#if !ASSERT_DISABLED
+ m_bufferInUse = false;
+#endif
+ if (m_purgeTimer.isActive())
+ m_purgeTimer.stop();
+
+ const double scratchBufferPurgeInterval = 2;
+ m_purgeTimer.startOneShot(scratchBufferPurgeInterval);
+ }
+
+ static ScratchBuffer& shared();
+
+private:
+ void timerFired(Timer<ScratchBuffer>*)
+ {
+ clearScratchBuffer();
+ }
+
+ void clearScratchBuffer()
+ {
+ m_imageBuffer = 0;
+ }
+
+ OwnPtr<ImageBuffer> m_imageBuffer;
+ Timer<ScratchBuffer> m_purgeTimer;
+#if !ASSERT_DISABLED
+ bool m_bufferInUse;
+#endif
+};
+
+ScratchBuffer& ScratchBuffer::shared()
+{
+ DEFINE_STATIC_LOCAL(ScratchBuffer, scratchBuffer, ());
+ return scratchBuffer;
+}
+
+static const int templateSideLength = 1;
+
+ShadowBlur::ShadowBlur(float radius, const FloatSize& offset, const Color& color, ColorSpace colorSpace)
+ : m_color(color)
+ , m_colorSpace(colorSpace)
+ , m_blurRadius(radius)
+ , m_offset(offset)
+ , m_layerImage(0)
+ , m_shadowsIgnoreTransforms(false)
+{
+ // Limit blur radius to 128 to avoid lots of very expensive blurring.
+ m_blurRadius = min<float>(m_blurRadius, 128);
+
+ // The type of shadow is decided by the blur radius, shadow offset, and shadow color.
+ if (!m_color.isValid() || !color.alpha()) {
+ // Can't paint the shadow with invalid or invisible color.
+ m_type = NoShadow;
+ } else if (m_blurRadius > 0) {
+ // Shadow is always blurred, even the offset is zero.
+ m_type = BlurShadow;
+ } else if (!m_offset.width() && !m_offset.height()) {
+ // Without blur and zero offset means the shadow is fully hidden.
+ m_type = NoShadow;
+ } else
+ m_type = SolidShadow;
+}
+
+// Instead of integer division, we use 17.15 for fixed-point division.
+static const int blurSumShift = 15;
+static const float gaussianKernelFactor = 3 / 4.f * sqrtf(2 * piFloat);
+
+void ShadowBlur::blurLayerImage(unsigned char* imageData, const IntSize& size, int rowStride)
+{
+ const int channels[4] =
+#if CPU(BIG_ENDIAN)
+ { 0, 3, 2, 0 };
+#elif CPU(MIDDLE_ENDIAN)
+ { 1, 2, 3, 1 };
+#else
+ { 3, 0, 1, 3 };
+#endif
+
+ int diameter;
+ if (m_shadowsIgnoreTransforms)
+ diameter = max(2, static_cast<int>(floorf((2 / 3.f) * m_blurRadius))); // Canvas shadow. FIXME: we should adjust the blur radius higher up.
+ else {
+ // http://dev.w3.org/csswg/css3-background/#box-shadow
+ // Approximate a Gaussian blur with a standard deviation equal to half the blur radius,
+ // which http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement tell us how to do.
+ // However, shadows rendered according to that spec will extend a little further than m_blurRadius,
+ // so we apply a fudge factor to bring the radius down slightly.
+ float stdDev = m_blurRadius / 2;
+ const float fudgeFactor = 0.88f;
+ diameter = max(2, static_cast<int>(floorf(stdDev * gaussianKernelFactor * fudgeFactor + 0.5f)));
+ }
+
+ enum {
+ leftLobe = 0,
+ rightLobe = 1
+ };
+
+ int lobes[3][2]; // indexed by pass, and left/right lobe
+
+ if (diameter & 1) {
+ // if d is odd, use three box-blurs of size 'd', centered on the output pixel.
+ int lobeSize = (diameter - 1) / 2;
+ lobes[0][leftLobe] = lobeSize;
+ lobes[0][rightLobe] = lobeSize;
+ lobes[1][leftLobe] = lobeSize;
+ lobes[1][rightLobe] = lobeSize;
+ lobes[2][leftLobe] = lobeSize;
+ lobes[2][rightLobe] = lobeSize;
+ } else {
+ // if d is even, two box-blurs of size 'd' (the first one centered on the pixel boundary
+ // between the output pixel and the one to the left, the second one centered on the pixel
+ // boundary between the output pixel and the one to the right) and one box blur of size 'd+1' centered on the output pixel
+ int lobeSize = diameter / 2;
+ lobes[0][leftLobe] = lobeSize;
+ lobes[0][rightLobe] = lobeSize - 1;
+ lobes[1][leftLobe] = lobeSize - 1;
+ lobes[1][rightLobe] = lobeSize;
+ lobes[2][leftLobe] = lobeSize;
+ lobes[2][rightLobe] = lobeSize;
+ }
+
+ // First pass is horizontal.
+ int stride = 4;
+ int delta = rowStride;
+ int final = size.height();
+ int dim = size.width();
+
+ // Two stages: horizontal and vertical
+ for (int pass = 0; pass < 2; ++pass) {
+ unsigned char* pixels = imageData;
+
+ for (int j = 0; j < final; ++j, pixels += delta) {
+ // For each step, we blur the alpha in a channel and store the result
+ // in another channel for the subsequent step.
+ // We use sliding window algorithm to accumulate the alpha values.
+ // This is much more efficient than computing the sum of each pixels
+ // covered by the box kernel size for each x.
+ for (int step = 0; step < 3; ++step) {
+ int side1 = lobes[step][leftLobe];
+ int side2 = lobes[step][rightLobe];
+ int pixelCount = side1 + 1 + side2;
+ int invCount = ((1 << blurSumShift) + pixelCount - 1) / pixelCount;
+ int ofs = 1 + side2;
+ int alpha1 = pixels[channels[step]];
+ int alpha2 = pixels[(dim - 1) * stride + channels[step]];
+
+ unsigned char* ptr = pixels + channels[step + 1];
+ unsigned char* prev = pixels + stride + channels[step];
+ unsigned char* next = pixels + ofs * stride + channels[step];
+
+ int i;
+ int sum = side1 * alpha1 + alpha1;
+ int limit = (dim < side2 + 1) ? dim : side2 + 1;
+
+ for (i = 1; i < limit; ++i, prev += stride)
+ sum += *prev;
+
+ if (limit <= side2)
+ sum += (side2 - limit + 1) * alpha2;
+
+ limit = (side1 < dim) ? side1 : dim;
+ for (i = 0; i < limit; ptr += stride, next += stride, ++i, ++ofs) {
+ *ptr = (sum * invCount) >> blurSumShift;
+ sum += ((ofs < dim) ? *next : alpha2) - alpha1;
+ }
+
+ prev = pixels + channels[step];
+ for (; ofs < dim; ptr += stride, prev += stride, next += stride, ++i, ++ofs) {
+ *ptr = (sum * invCount) >> blurSumShift;
+ sum += (*next) - (*prev);
+ }
+
+ for (; i < dim; ptr += stride, prev += stride, ++i) {
+ *ptr = (sum * invCount) >> blurSumShift;
+ sum += alpha2 - (*prev);
+ }
+ }
+ }
+
+ // Last pass is vertical.
+ stride = rowStride;
+ delta = 4;
+ final = size.width();
+ dim = size.height();
+ }
+}
+
+void ShadowBlur::adjustBlurRadius(GraphicsContext* context)
+{
+ if (!m_shadowsIgnoreTransforms)
+ return;
+
+ const AffineTransform transform = context->getCTM();
+
+ // Adjust blur if we're scaling, since the radius must not be affected by transformations.
+ // FIXME: use AffineTransform::isIdentityOrTranslationOrFlipped()?
+ if (transform.isIdentity())
+ return;
+
+ // Calculate transformed unit vectors.
+ const FloatQuad unitQuad(FloatPoint(0, 0), FloatPoint(1, 0),
+ FloatPoint(0, 1), FloatPoint(1, 1));
+ const FloatQuad transformedUnitQuad = transform.mapQuad(unitQuad);
+
+ // Calculate X axis scale factor.
+ const FloatSize xUnitChange = transformedUnitQuad.p2() - transformedUnitQuad.p1();
+ const float xAxisScale = sqrtf(xUnitChange.width() * xUnitChange.width()
+ + xUnitChange.height() * xUnitChange.height());
+
+ // Calculate Y axis scale factor.
+ const FloatSize yUnitChange = transformedUnitQuad.p3() - transformedUnitQuad.p1();
+ const float yAxisScale = sqrtf(yUnitChange.width() * yUnitChange.width()
+ + yUnitChange.height() * yUnitChange.height());
+
+ // blurLayerImage() does not support per-axis blurring, so calculate a balanced scaling.
+ // FIXME: does AffineTransform.xScale()/yScale() help?
+ const float scale = sqrtf(xAxisScale * yAxisScale);
+ m_blurRadius = roundf(m_blurRadius / scale);
+}
+
+IntRect ShadowBlur::calculateLayerBoundingRect(GraphicsContext* context, const FloatRect& shadowedRect, const IntRect& clipRect)
+{
+ const float roundedRadius = ceilf(m_blurRadius);
+
+ // Calculate the destination of the blurred and/or transformed layer.
+ FloatRect layerRect;
+ float inflation = 0;
+
+ const AffineTransform transform = context->getCTM();
+ if (m_shadowsIgnoreTransforms && !transform.isIdentity()) {
+ FloatQuad transformedPolygon = transform.mapQuad(FloatQuad(shadowedRect));
+ transformedPolygon.move(m_offset);
+ layerRect = transform.inverse().mapQuad(transformedPolygon).boundingBox();
+ } else {
+ layerRect = shadowedRect;
+ layerRect.move(m_offset);
+ }
+
+ // We expand the area by the blur radius to give extra space for the blur transition.
+ if (m_type == BlurShadow) {
+ layerRect.inflate(roundedRadius);
+ inflation = roundedRadius;
+ }
+
+ FloatRect unclippedLayerRect = layerRect;
+
+ if (!clipRect.contains(enclosingIntRect(layerRect))) {
+ // If we are totally outside the clip region, we aren't painting at all.
+ if (intersection(layerRect, clipRect).isEmpty())
+ return IntRect();
+
+ IntRect inflatedClip = clipRect;
+ // Pixels at the edges can be affected by pixels outside the buffer,
+ // so intersect with the clip inflated by the blur.
+ if (m_type == BlurShadow)
+ inflatedClip.inflate(roundedRadius);
+
+ layerRect.intersect(inflatedClip);
+ }
+
+ const float frameSize = inflation * 2;
+ m_sourceRect = FloatRect(0, 0, shadowedRect.width() + frameSize, shadowedRect.height() + frameSize);
+ m_layerOrigin = FloatPoint(layerRect.x(), layerRect.y());
+ m_layerSize = layerRect.size();
+
+ const FloatPoint unclippedLayerOrigin = FloatPoint(unclippedLayerRect.x(), unclippedLayerRect.y());
+ const FloatSize clippedOut = unclippedLayerOrigin - m_layerOrigin;
+
+ // Set the origin as the top left corner of the scratch image, or, in case there's a clipped
+ // out region, set the origin accordingly to the full bounding rect's top-left corner.
+ float translationX = -shadowedRect.x() + inflation - fabsf(clippedOut.width());
+ float translationY = -shadowedRect.y() + inflation - fabsf(clippedOut.height());
+ m_layerContextTranslation = FloatSize(translationX, translationY);
+
+ return enclosingIntRect(layerRect);
+}
+
+GraphicsContext* ShadowBlur::beginShadowLayer(GraphicsContext* graphicsContext, const IntRect& layerRect)
+{
+ adjustBlurRadius(graphicsContext);
+
+ // Don't paint if we are totally outside the clip region.
+ if (layerRect.isEmpty())
+ return 0;
+
+ m_layerImage = ScratchBuffer::shared().getScratchBuffer(layerRect.size());
+ GraphicsContext* layerContext = m_layerImage->context();
+
+ layerContext->save(); // Balanced by restore() in endShadowLayer().
+
+ // Always clear the surface first. FIXME: we could avoid the clear on first allocation.
+ // Add a pixel to avoid later edge aliasing when rotated.
+ layerContext->clearRect(FloatRect(0, 0, m_layerSize.width() + 1, m_layerSize.height() + 1));
+ layerContext->translate(m_layerContextTranslation);
+
+ return layerContext;
+}
+
+void ShadowBlur::endShadowLayer(GraphicsContext* graphicsContext)
+{
+ if (!m_layerImage)
+ return;
+
+ m_layerImage->context()->restore();
+
+ if (m_type == BlurShadow) {
+ IntRect blurRect = enclosingIntRect(FloatRect(FloatPoint(), m_layerSize));
+ RefPtr<ByteArray> layerData = m_layerImage->getUnmultipliedImageData(blurRect);
+ blurLayerImage(layerData->data(), blurRect.size(), blurRect.width() * 4);
+ m_layerImage->putUnmultipliedImageData(layerData.get(), blurRect.size(), blurRect, IntPoint());
+ }
+
+ graphicsContext->save();
+
+ IntSize bufferSize = m_layerImage->size();
+ if (bufferSize != m_layerSize) {
+ // The rect passed to clipToImageBuffer() has to be the size of the entire buffer,
+ // but we may not have cleared it all, so clip to the filled part first.
+ graphicsContext->clip(FloatRect(m_layerOrigin, m_layerSize));
+ }
+ graphicsContext->clipToImageBuffer(m_layerImage, FloatRect(m_layerOrigin, bufferSize));
+ graphicsContext->setFillColor(m_color, m_colorSpace);
+
+ graphicsContext->clearShadow();
+ graphicsContext->fillRect(FloatRect(m_layerOrigin, m_sourceRect.size()));
+
+ graphicsContext->restore();
+
+ m_layerImage = 0;
+
+ // Schedule a purge of the scratch buffer. We do not need to destroy the surface.
+ ScratchBuffer::shared().scheduleScratchBufferPurge();
+}
+
+static void computeSliceSizesFromRadii(int twiceRadius, const RoundedIntRect::Radii& radii, int& leftSlice, int& rightSlice, int& topSlice, int& bottomSlice)
+{
+ leftSlice = twiceRadius + max(radii.topLeft().width(), radii.bottomLeft().width());
+ rightSlice = twiceRadius + max(radii.topRight().width(), radii.bottomRight().width());
+
+ topSlice = twiceRadius + max(radii.topLeft().height(), radii.topRight().height());
+ bottomSlice = twiceRadius + max(radii.bottomLeft().height(), radii.bottomRight().height());
+}
+
+IntSize ShadowBlur::templateSize(const RoundedIntRect::Radii& radii) const
+{
+ const int templateSideLength = 1;
+
+ int leftSlice;
+ int rightSlice;
+ int topSlice;
+ int bottomSlice;
+ computeSliceSizesFromRadii(2 * ceilf(m_blurRadius), radii, leftSlice, rightSlice, topSlice, bottomSlice);
+
+ return IntSize(templateSideLength + leftSlice + rightSlice,
+ templateSideLength + topSlice + bottomSlice);
+}
+
+void ShadowBlur::drawRectShadow(GraphicsContext* graphicsContext, const FloatRect& shadowedRect, const RoundedIntRect::Radii& radii)
+{
+ IntRect layerRect = calculateLayerBoundingRect(graphicsContext, shadowedRect, graphicsContext->clipBounds());
+ if (layerRect.isEmpty())
+ return;
+
+ // drawRectShadowWithTiling does not work with rotations.
+ // https://bugs.webkit.org/show_bug.cgi?id=45042
+ if (!graphicsContext->getCTM().isIdentityOrTranslationOrFlipped() || m_type != BlurShadow) {
+ drawRectShadowWithoutTiling(graphicsContext, shadowedRect, radii, layerRect);
+ return;
+ }
+
+ IntSize templateSize = this->templateSize(radii);
+
+ if (templateSize.width() > shadowedRect.width() || templateSize.height() > shadowedRect.height()
+ || (templateSize.width() * templateSize.height() > m_sourceRect.width() * m_sourceRect.height())) {
+ drawRectShadowWithoutTiling(graphicsContext, shadowedRect, radii, layerRect);
+ return;
+ }
+
+ drawRectShadowWithTiling(graphicsContext, shadowedRect, radii, templateSize);
+}
+
+void ShadowBlur::drawInsetShadow(GraphicsContext* graphicsContext, const FloatRect& rect, const FloatRect& holeRect, const RoundedIntRect::Radii& holeRadii)
+{
+ IntRect layerRect = calculateLayerBoundingRect(graphicsContext, rect, graphicsContext->clipBounds());
+ if (layerRect.isEmpty())
+ return;
+
+ // drawInsetShadowWithTiling does not work with rotations.
+ // https://bugs.webkit.org/show_bug.cgi?id=45042
+ if (!graphicsContext->getCTM().isIdentityOrTranslationOrFlipped() || m_type != BlurShadow) {
+ drawInsetShadowWithoutTiling(graphicsContext, rect, holeRect, holeRadii, layerRect);
+ return;
+ }
+
+ IntSize templateSize = this->templateSize(holeRadii);
+
+ if (templateSize.width() > holeRect.width() || templateSize.height() > holeRect.height()
+ || (templateSize.width() * templateSize.height() > holeRect.width() * holeRect.height())) {
+ drawInsetShadowWithoutTiling(graphicsContext, rect, holeRect, holeRadii, layerRect);
+ return;
+ }
+
+ drawInsetShadowWithTiling(graphicsContext, rect, holeRect, holeRadii, templateSize);
+}
+
+void ShadowBlur::drawRectShadowWithoutTiling(GraphicsContext* graphicsContext, const FloatRect& shadowedRect, const RoundedIntRect::Radii& radii, const IntRect& layerRect)
+{
+ GraphicsContext* shadowContext = beginShadowLayer(graphicsContext, layerRect);
+ if (!shadowContext)
+ return;
+
+ Path path;
+ path.addRoundedRect(shadowedRect, radii.topLeft(), radii.topRight(), radii.bottomLeft(), radii.bottomRight());
+
+ shadowContext->setFillColor(Color::black, ColorSpaceDeviceRGB);
+ shadowContext->fillPath(path);
+
+ endShadowLayer(graphicsContext);
+}
+
+void ShadowBlur::drawInsetShadowWithoutTiling(GraphicsContext* graphicsContext, const FloatRect& rect, const FloatRect& holeRect, const RoundedIntRect::Radii& holeRadii, const IntRect& layerRect)
+{
+ GraphicsContext* shadowContext = beginShadowLayer(graphicsContext, layerRect);
+ if (!shadowContext)
+ return;
+
+ Path path;
+ path.addRect(rect);
+ path.addRoundedRect(holeRect, holeRadii.topLeft(), holeRadii.topRight(), holeRadii.bottomLeft(), holeRadii.bottomRight());
+
+ shadowContext->setFillRule(RULE_EVENODD);
+ shadowContext->setFillColor(Color::black, ColorSpaceDeviceRGB);
+ shadowContext->fillPath(path);
+
+ endShadowLayer(graphicsContext);
+}
+
+/*
+ These functions use tiling to improve the performance of the shadow
+ drawing of rounded rectangles. The code basically does the following
+ steps:
+
+ 1. Calculate the size of the shadow template, a rectangle that
+ contains all the necessary tiles to draw the complete shadow.
+
+ 2. If that size is smaller than the real rectangle render the new
+ template rectangle and its shadow in a new surface, in other case
+ render the shadow of the real rectangle in the destination
+ surface.
+
+ 3. Calculate the sizes and positions of the tiles and their
+ destinations and use drawPattern to render the final shadow. The
+ code divides the rendering in 8 tiles:
+
+ 1 | 2 | 3
+ -----------
+ 4 | | 5
+ -----------
+ 6 | 7 | 8
+
+ The corners are directly copied from the template rectangle to the
+ real one and the side tiles are 1 pixel width, we use them as
+ tiles to cover the destination side. The corner tiles are bigger
+ than just the side of the rounded corner, we need to increase it
+ because the modifications caused by the corner over the blur
+ effect. We fill the central or outer part with solid color to complete
+ the shadow.
+ */
+
+void ShadowBlur::drawInsetShadowWithTiling(GraphicsContext* graphicsContext, const FloatRect& rect, const FloatRect& holeRect, const RoundedIntRect::Radii& radii, const IntSize& templateSize)
+{
+ graphicsContext->save();
+ graphicsContext->clearShadow();
+
+ const float roundedRadius = ceilf(m_blurRadius);
+ const float twiceRadius = roundedRadius * 2;
+
+ m_layerImage = ScratchBuffer::shared().getScratchBuffer(templateSize);
+
+ // Draw the rectangle with hole.
+ FloatRect templateBounds(0, 0, templateSize.width(), templateSize.height());
+ FloatRect templateHole = FloatRect(roundedRadius, roundedRadius, templateSize.width() - twiceRadius, templateSize.height() - twiceRadius);
+ Path path;
+ path.addRect(templateBounds);
+ path.addRoundedRect(templateHole, radii.topLeft(), radii.topRight(), radii.bottomLeft(), radii.bottomRight());
+
+ // Draw shadow into a new ImageBuffer.
+ GraphicsContext* shadowContext = m_layerImage->context();
+ shadowContext->save();
+ shadowContext->clearRect(templateBounds);
+ shadowContext->setFillRule(RULE_EVENODD);
+ shadowContext->setFillColor(Color::black, ColorSpaceDeviceRGB);
+ shadowContext->fillPath(path);
+ blurAndColorShadowBuffer(templateSize);
+ shadowContext->restore();
+
+ FloatRect boundingRect = rect;
+ boundingRect.move(m_offset);
+
+ FloatRect destHoleRect = holeRect;
+ destHoleRect.move(m_offset);
+ FloatRect destHoleBounds = destHoleRect;
+ destHoleBounds.inflate(roundedRadius);
+
+ // Fill the external part of the shadow (which may be visible because of offset).
+ Path exteriorPath;
+ exteriorPath.addRect(boundingRect);
+ exteriorPath.addRect(destHoleBounds);
+
+ graphicsContext->save();
+ graphicsContext->setFillRule(RULE_EVENODD);
+ graphicsContext->setFillColor(m_color, m_colorSpace);
+ graphicsContext->fillPath(exteriorPath);
+ graphicsContext->restore();
+
+ drawLayerPieces(graphicsContext, destHoleBounds, radii, roundedRadius, templateSize, InnerShadow);
+
+ graphicsContext->restore();
+
+ m_layerImage = 0;
+ // Schedule a purge of the scratch buffer.
+ ScratchBuffer::shared().scheduleScratchBufferPurge();
+}
+
+void ShadowBlur::drawRectShadowWithTiling(GraphicsContext* graphicsContext, const FloatRect& shadowedRect, const RoundedIntRect::Radii& radii, const IntSize& templateSize)
+{
+ graphicsContext->save();
+ graphicsContext->clearShadow();
+
+ const float roundedRadius = ceilf(m_blurRadius);
+ const float twiceRadius = roundedRadius * 2;
+
+ m_layerImage = ScratchBuffer::shared().getScratchBuffer(templateSize);
+
+ // Draw the rectangle.
+ FloatRect templateShadow = FloatRect(roundedRadius, roundedRadius, templateSize.width() - twiceRadius, templateSize.height() - twiceRadius);
+ Path path;
+ path.addRoundedRect(templateShadow, radii.topLeft(), radii.topRight(), radii.bottomLeft(), radii.bottomRight());
+
+ // Draw shadow into the ImageBuffer.
+ GraphicsContext* shadowContext = m_layerImage->context();
+ shadowContext->save();
+ shadowContext->clearRect(FloatRect(0, 0, templateSize.width(), templateSize.height()));
+ shadowContext->setFillColor(Color::black, ColorSpaceDeviceRGB);
+ shadowContext->fillPath(path);
+ blurAndColorShadowBuffer(templateSize);
+ shadowContext->restore();
+
+ FloatRect shadowBounds = shadowedRect;
+ shadowBounds.move(m_offset.width(), m_offset.height());
+ shadowBounds.inflate(roundedRadius);
+
+ drawLayerPieces(graphicsContext, shadowBounds, radii, roundedRadius, templateSize, OuterShadow);
+
+ graphicsContext->restore();
+
+ m_layerImage = 0;
+ // Schedule a purge of the scratch buffer.
+ ScratchBuffer::shared().scheduleScratchBufferPurge();
+}
+
+void ShadowBlur::drawLayerPieces(GraphicsContext* graphicsContext, const FloatRect& shadowBounds, const RoundedIntRect::Radii& radii, float roundedRadius, const IntSize& templateSize, ShadowDirection direction)
+{
+ const float twiceRadius = roundedRadius * 2;
+
+ int leftSlice;
+ int rightSlice;
+ int topSlice;
+ int bottomSlice;
+ computeSliceSizesFromRadii(twiceRadius, radii, leftSlice, rightSlice, topSlice, bottomSlice);
+
+ int centerWidth = shadowBounds.width() - leftSlice - rightSlice;
+ int centerHeight = shadowBounds.height() - topSlice - bottomSlice;
+
+ if (direction == OuterShadow) {
+ FloatRect shadowInterior(shadowBounds.x() + leftSlice, shadowBounds.y() + topSlice, centerWidth, centerHeight);
+ if (!shadowInterior.isEmpty()) {
+ graphicsContext->save();
+
+ graphicsContext->setFillColor(m_color, m_colorSpace);
+ graphicsContext->fillRect(shadowInterior);
+
+ graphicsContext->restore();
+ }
+ }
+
+ // Note that drawing the ImageBuffer is faster than creating a Image and drawing that,
+ // because ImageBuffer::draw() knows that it doesn't have to copy the image bits.
+
+ // Top side.
+ FloatRect tileRect = FloatRect(leftSlice, 0, templateSideLength, topSlice);
+ FloatRect destRect = FloatRect(shadowBounds.x() + leftSlice, shadowBounds.y(), centerWidth, topSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Draw the bottom side.
+ tileRect.setY(templateSize.height() - bottomSlice);
+ tileRect.setHeight(bottomSlice);
+ destRect.setY(shadowBounds.maxY() - bottomSlice);
+ destRect.setHeight(bottomSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Left side.
+ tileRect = FloatRect(0, topSlice, leftSlice, templateSideLength);
+ destRect = FloatRect(shadowBounds.x(), shadowBounds.y() + topSlice, leftSlice, centerHeight);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Right side.
+ tileRect.setX(templateSize.width() - rightSlice);
+ tileRect.setWidth(rightSlice);
+ destRect.setX(shadowBounds.maxX() - rightSlice);
+ destRect.setWidth(rightSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Top left corner.
+ tileRect = FloatRect(0, 0, leftSlice, topSlice);
+ destRect = FloatRect(shadowBounds.x(), shadowBounds.y(), leftSlice, topSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Top right corner.
+ tileRect = FloatRect(templateSize.width() - rightSlice, 0, rightSlice, topSlice);
+ destRect = FloatRect(shadowBounds.maxX() - rightSlice, shadowBounds.y(), rightSlice, topSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Bottom right corner.
+ tileRect = FloatRect(templateSize.width() - rightSlice, templateSize.height() - bottomSlice, rightSlice, bottomSlice);
+ destRect = FloatRect(shadowBounds.maxX() - rightSlice, shadowBounds.maxY() - bottomSlice, rightSlice, bottomSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+
+ // Bottom left corner.
+ tileRect = FloatRect(0, templateSize.height() - bottomSlice, leftSlice, bottomSlice);
+ destRect = FloatRect(shadowBounds.x(), shadowBounds.maxY() - bottomSlice, leftSlice, bottomSlice);
+ graphicsContext->drawImageBuffer(m_layerImage, ColorSpaceDeviceRGB, destRect, tileRect);
+}
+
+
+void ShadowBlur::blurAndColorShadowBuffer(const IntSize& templateSize)
+{
+ {
+ IntRect blurRect(IntPoint(), templateSize);
+ RefPtr<ByteArray> layerData = m_layerImage->getUnmultipliedImageData(blurRect);
+ blurLayerImage(layerData->data(), blurRect.size(), blurRect.width() * 4);
+ m_layerImage->putUnmultipliedImageData(layerData.get(), blurRect.size(), blurRect, IntPoint());
+ }
+
+ // Mask the image with the shadow color.
+ GraphicsContext* shadowContext = m_layerImage->context();
+ shadowContext->setCompositeOperation(CompositeSourceIn);
+ shadowContext->setFillColor(m_color, m_colorSpace);
+ shadowContext->fillRect(FloatRect(0, 0, templateSize.width(), templateSize.height()));
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/ShadowBlur.h b/Source/WebCore/platform/graphics/ShadowBlur.h
new file mode 100644
index 0000000..e52d6dc
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ShadowBlur.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2011 Apple Inc.
+ * Copyright (C) 2010 Sencha, Inc.
+ * Copyright (C) 2010 Igalia S.L.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ShadowBlur_h
+#define ShadowBlur_h
+
+#include "Color.h"
+#include "ColorSpace.h"
+#include "FloatRect.h"
+#include "RoundedIntRect.h"
+#include <wtf/Noncopyable.h>
+
+namespace WebCore {
+
+class AffineTransform;
+class GraphicsContext;
+class ImageBuffer;
+
+class ShadowBlur {
+ WTF_MAKE_NONCOPYABLE(ShadowBlur);
+public:
+ ShadowBlur(float radius, const FloatSize& offset, const Color&, ColorSpace);
+
+ void setShadowsIgnoreTransforms(bool ignoreTransforms) { m_shadowsIgnoreTransforms = ignoreTransforms; }
+ bool shadowsIgnoreTransforms() const { return m_shadowsIgnoreTransforms; }
+
+ void drawRectShadow(GraphicsContext*, const FloatRect&, const RoundedIntRect::Radii&);
+ void drawInsetShadow(GraphicsContext*, const FloatRect&, const FloatRect& holeRect, const RoundedIntRect::Radii& holeRadii);
+
+private:
+ GraphicsContext* beginShadowLayer(GraphicsContext*, const IntRect& layerRect);
+ void endShadowLayer(GraphicsContext*);
+
+ void adjustBlurRadius(GraphicsContext*);
+ void blurLayerImage(unsigned char*, const IntSize&, int stride);
+
+ enum ShadowDirection {
+ OuterShadow,
+ InnerShadow
+ };
+
+ IntRect calculateLayerBoundingRect(GraphicsContext*, const FloatRect& layerArea, const IntRect& clipRect);
+ IntSize templateSize(const RoundedIntRect::Radii&) const;
+
+ void drawRectShadowWithoutTiling(GraphicsContext*, const FloatRect&, const RoundedIntRect::Radii&, const IntRect& layerRect);
+ void drawRectShadowWithTiling(GraphicsContext*, const FloatRect&, const RoundedIntRect::Radii&, const IntSize& shadowTemplateSize);
+
+ void drawInsetShadowWithoutTiling(GraphicsContext*, const FloatRect&, const FloatRect& holeRect, const RoundedIntRect::Radii&, const IntRect& layerRect);
+ void drawInsetShadowWithTiling(GraphicsContext*, const FloatRect&, const FloatRect& holeRect, const RoundedIntRect::Radii&, const IntSize& shadowTemplateSize);
+
+ void drawLayerPieces(GraphicsContext*, const FloatRect& shadowBounds, const RoundedIntRect::Radii&, float roundedRadius, const IntSize& templateSize, ShadowDirection);
+
+ void blurAndColorShadowBuffer(const IntSize& templateSize);
+
+ enum ShadowType {
+ NoShadow,
+ SolidShadow,
+ BlurShadow
+ };
+
+ ShadowType m_type;
+
+ Color m_color;
+ ColorSpace m_colorSpace;
+ float m_blurRadius;
+ FloatSize m_offset;
+
+ ImageBuffer* m_layerImage; // Buffer to where the temporary shadow will be drawn to.
+
+ FloatRect m_sourceRect; // Sub-rect of m_layerImage that contains the shadow pixels.
+ FloatPoint m_layerOrigin; // Top-left corner of the (possibly clipped) bounding rect to draw the shadow to.
+ FloatSize m_layerSize; // Size of m_layerImage pixels that need blurring.
+ FloatSize m_layerContextTranslation; // Translation to apply to m_layerContext for the shadow to be correctly clipped.
+
+ bool m_shadowsIgnoreTransforms;
+};
+
+} // namespace WebCore
+
+#endif // ShadowBlur_h
diff --git a/Source/WebCore/platform/graphics/SimpleFontData.cpp b/Source/WebCore/platform/graphics/SimpleFontData.cpp
index e773880..2693609 100644
--- a/Source/WebCore/platform/graphics/SimpleFontData.cpp
+++ b/Source/WebCore/platform/graphics/SimpleFontData.cpp
@@ -50,7 +50,6 @@ namespace WebCore {
SimpleFontData::SimpleFontData(const FontPlatformData& platformData, bool isCustomFont, bool isLoading)
: m_maxCharWidth(-1)
, m_avgCharWidth(-1)
- , m_unitsPerEm(defaultUnitsPerEm)
, m_orientation(platformData.orientation())
, m_platformData(platformData)
, m_treatAsFixedPitch(false)
@@ -74,31 +73,36 @@ SimpleFontData::SimpleFontData(PassOwnPtr<SVGFontData> svgFontData, int size, bo
, m_isBrokenIdeographFont(false)
{
SVGFontFaceElement* svgFontFaceElement = m_svgFontData->svgFontFaceElement();
- m_unitsPerEm = svgFontFaceElement->unitsPerEm();
-
- double scale = size;
- if (m_unitsPerEm)
- scale /= m_unitsPerEm;
-
- m_ascent = static_cast<int>(svgFontFaceElement->ascent() * scale);
- m_descent = static_cast<int>(svgFontFaceElement->descent() * scale);
- m_xHeight = static_cast<int>(svgFontFaceElement->xHeight() * scale);
- m_lineGap = 0.1f * size;
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
+ unsigned unitsPerEm = svgFontFaceElement->unitsPerEm();
+
+ float scale = size;
+ if (unitsPerEm)
+ scale /= unitsPerEm;
+
+ float xHeight = svgFontFaceElement->xHeight() * scale;
+ float ascent = svgFontFaceElement->ascent() * scale;
+ float descent = svgFontFaceElement->descent() * scale;
+ float lineGap = 0.1f * size;
+ m_fontMetrics.setUnitsPerEm(unitsPerEm);
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setLineSpacing(roundf(ascent) + roundf(descent) + roundf(lineGap));
+ m_fontMetrics.setXHeight(xHeight);
SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
Vector<SVGGlyphIdentifier> spaceGlyphs;
associatedFontElement->getGlyphIdentifiersForString(String(" ", 1), spaceGlyphs);
- m_spaceWidth = spaceGlyphs.isEmpty() ? m_xHeight : static_cast<float>(spaceGlyphs.first().horizontalAdvanceX * scale);
+ m_spaceWidth = spaceGlyphs.isEmpty() ? xHeight : spaceGlyphs.first().horizontalAdvanceX * scale;
Vector<SVGGlyphIdentifier> numeralZeroGlyphs;
associatedFontElement->getGlyphIdentifiersForString(String("0", 1), numeralZeroGlyphs);
- m_avgCharWidth = numeralZeroGlyphs.isEmpty() ? m_spaceWidth : static_cast<float>(numeralZeroGlyphs.first().horizontalAdvanceX * scale);
+ m_avgCharWidth = numeralZeroGlyphs.isEmpty() ? m_spaceWidth : numeralZeroGlyphs.first().horizontalAdvanceX * scale;
Vector<SVGGlyphIdentifier> letterWGlyphs;
associatedFontElement->getGlyphIdentifiersForString(String("W", 1), letterWGlyphs);
- m_maxCharWidth = letterWGlyphs.isEmpty() ? m_ascent : static_cast<float>(letterWGlyphs.first().horizontalAdvanceX * scale);
+ m_maxCharWidth = letterWGlyphs.isEmpty() ? ascent : letterWGlyphs.first().horizontalAdvanceX * scale;
// FIXME: is there a way we can get the space glyph from the SVGGlyphIdentifier above?
m_spaceGlyph = 0;
@@ -126,10 +130,10 @@ void SimpleFontData::initCharWidths()
// If we can't retrieve the width of a '0', fall back to the x height.
if (m_avgCharWidth <= 0.f)
- m_avgCharWidth = m_xHeight;
+ m_avgCharWidth = m_fontMetrics.xHeight();
if (m_maxCharWidth <= 0.f)
- m_maxCharWidth = max<float>(m_avgCharWidth, m_ascent);
+ m_maxCharWidth = max(m_avgCharWidth, m_fontMetrics.floatAscent());
}
void SimpleFontData::platformGlyphInit()
diff --git a/Source/WebCore/platform/graphics/SimpleFontData.h b/Source/WebCore/platform/graphics/SimpleFontData.h
index 90713af..07c2bd1 100644
--- a/Source/WebCore/platform/graphics/SimpleFontData.h
+++ b/Source/WebCore/platform/graphics/SimpleFontData.h
@@ -26,6 +26,7 @@
#include "FontBaseline.h"
#include "FontData.h"
+#include "FontMetrics.h"
#include "FontPlatformData.h"
#include "FloatRect.h"
#include "GlyphMetricsMap.h"
@@ -101,15 +102,9 @@ public:
// FIXME: Use the actual metrics for fonts with vertical tables instead of just hard-coding. If the font is horizontally oriented or
// a broken ideographic font, then just hard-code to split ascent/descent down the middle. Otherwise we should actually use the metrics
// from the font itself.
- int ascent(FontBaseline baselineType = AlphabeticBaseline) const { return baselineType == AlphabeticBaseline ? m_ascent : height() - height() / 2; }
- int descent(FontBaseline baselineType = AlphabeticBaseline) const { return baselineType == AlphabeticBaseline ? m_descent : height() / 2; }
- int height() const { return m_ascent + m_descent; }
- int lineSpacing() const { return m_lineSpacing; }
- int lineGap() const { return m_lineGap; }
+ const FontMetrics& fontMetrics() const { return m_fontMetrics; }
float maxCharWidth() const { return m_maxCharWidth; }
float avgCharWidth() const { return m_avgCharWidth; }
- float xHeight() const { return m_xHeight; }
- unsigned unitsPerEm() const { return m_unitsPerEm; }
FloatRect boundsForGlyph(Glyph) const;
float widthForGlyph(Glyph glyph) const;
@@ -211,14 +206,9 @@ private:
float widthForGDIGlyph(Glyph glyph) const;
#endif
- int m_ascent;
- int m_descent;
- int m_lineSpacing;
- int m_lineGap;
+ FontMetrics m_fontMetrics;
float m_maxCharWidth;
float m_avgCharWidth;
- float m_xHeight;
- unsigned m_unitsPerEm;
FontOrientation m_orientation; // This is our supported orientation according to the tables in the font. FontPlatformData will just always have the desired orientation.
// This value represents what we actually support.
diff --git a/Source/WebCore/platform/graphics/StringTruncator.cpp b/Source/WebCore/platform/graphics/StringTruncator.cpp
index 65325f0..8468188 100644
--- a/Source/WebCore/platform/graphics/StringTruncator.cpp
+++ b/Source/WebCore/platform/graphics/StringTruncator.cpp
@@ -29,12 +29,12 @@
#include "config.h"
#include "StringTruncator.h"
-#include "CharacterNames.h"
#include "Font.h"
#include "TextBreakIterator.h"
#include "TextRun.h"
#include <wtf/Assertions.h>
#include <wtf/Vector.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/platform/graphics/TextRun.h b/Source/WebCore/platform/graphics/TextRun.h
index dce5535..ef434bd 100644
--- a/Source/WebCore/platform/graphics/TextRun.h
+++ b/Source/WebCore/platform/graphics/TextRun.h
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
* (C) 2000 Antti Koivisto (koivisto@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2006, 2007 Apple Computer, Inc.
+ * Copyright (C) 2003, 2006, 2007, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -33,12 +33,18 @@ class RenderSVGResource;
class TextRun {
public:
- TextRun(const UChar* c, int len, bool allowTabs = false, int xpos = 0, int padding = 0, bool rtl = false, bool directionalOverride = false,
+ enum TrailingExpansionBehavior {
+ AllowTrailingExpansion,
+ ForbidTrailingExpansion
+ };
+
+ TextRun(const UChar* c, int len, bool allowTabs = false, int xpos = 0, int expansion = 0, TrailingExpansionBehavior trailingExpansionBehavior = AllowTrailingExpansion, bool rtl = false, bool directionalOverride = false,
bool applyRunRounding = true, bool applyWordRounding = true)
: m_characters(c)
, m_len(len)
, m_xpos(xpos)
- , m_padding(padding)
+ , m_expansion(expansion)
+ , m_trailingExpansionBehavior(trailingExpansionBehavior)
#if ENABLE(SVG)
, m_horizontalGlyphStretch(1)
#endif
@@ -55,12 +61,13 @@ public:
{
}
- TextRun(const String& s, bool allowTabs = false, int xpos = 0, int padding = 0, bool rtl = false, bool directionalOverride = false,
+ TextRun(const String& s, bool allowTabs = false, int xpos = 0, int expansion = 0, TrailingExpansionBehavior trailingExpansionBehavior = AllowTrailingExpansion, bool rtl = false, bool directionalOverride = false,
bool applyRunRounding = true, bool applyWordRounding = true)
: m_characters(s.characters())
, m_len(s.length())
, m_xpos(xpos)
- , m_padding(padding)
+ , m_expansion(expansion)
+ , m_trailingExpansionBehavior(trailingExpansionBehavior)
#if ENABLE(SVG)
, m_horizontalGlyphStretch(1)
#endif
@@ -92,7 +99,8 @@ public:
bool allowTabs() const { return m_allowTabs; }
int xPos() const { return m_xpos; }
- int padding() const { return m_padding; }
+ int expansion() const { return m_expansion; }
+ bool allowsTrailingExpansion() const { return m_trailingExpansionBehavior == AllowTrailingExpansion; }
bool rtl() const { return m_rtl; }
bool ltr() const { return !m_rtl; }
bool directionalOverride() const { return m_directionalOverride; }
@@ -121,7 +129,8 @@ private:
// start of the containing block. In the case of right alignment or center alignment, left start of
// the text line is not the same as left start of the containing block.
int m_xpos;
- int m_padding;
+ int m_expansion;
+ TrailingExpansionBehavior m_trailingExpansionBehavior;
#if ENABLE(SVG)
float m_horizontalGlyphStretch;
#endif
diff --git a/Source/WebCore/platform/graphics/TiledBackingStore.cpp b/Source/WebCore/platform/graphics/TiledBackingStore.cpp
index 1d6f237..f6921ef 100644
--- a/Source/WebCore/platform/graphics/TiledBackingStore.cpp
+++ b/Source/WebCore/platform/graphics/TiledBackingStore.cpp
@@ -73,8 +73,8 @@ void TiledBackingStore::invalidate(const IntRect& contentsDirtyRect)
{
IntRect dirtyRect(mapFromContents(contentsDirtyRect));
- Tile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.topLeft());
- Tile::Coordinate bottomRight = tileCoordinateForPoint(dirtyRect.bottomRight());
+ Tile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.location());
+ Tile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(dirtyRect.maxX(), dirtyRect.maxY()));
for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
@@ -93,6 +93,8 @@ void TiledBackingStore::updateTileBuffers()
if (m_contentsFrozen)
return;
+ m_client->tiledBackingStorePaintBegin();
+
Vector<IntRect> paintedArea;
Vector<RefPtr<Tile> > dirtyTiles;
TileMap::iterator end = m_tiles.end();
@@ -104,10 +106,10 @@ void TiledBackingStore::updateTileBuffers()
paintedArea.append(mapToContents(it->second->rect()));
}
- if (dirtyTiles.isEmpty())
+ if (dirtyTiles.isEmpty()) {
+ m_client->tiledBackingStorePaintEnd(paintedArea);
return;
-
- m_client->tiledBackingStorePaintBegin();
+ }
// FIXME: In single threaded case, tile back buffers could be updated asynchronously
// one by one and then swapped to front in one go. This would minimize the time spent
@@ -132,8 +134,8 @@ void TiledBackingStore::paint(GraphicsContext* context, const IntRect& rect)
IntRect dirtyRect = mapFromContents(rect);
- Tile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.topLeft());
- Tile::Coordinate bottomRight = tileCoordinateForPoint(dirtyRect.bottomRight());
+ Tile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.location());
+ Tile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(dirtyRect.maxX(), dirtyRect.maxY()));
for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
@@ -227,8 +229,8 @@ void TiledBackingStore::createTiles()
double shortestDistance = std::numeric_limits<double>::infinity();
Vector<Tile::Coordinate> tilesToCreate;
unsigned requiredTileCount = 0;
- Tile::Coordinate topLeft = tileCoordinateForPoint(coverRect.topLeft());
- Tile::Coordinate bottomRight = tileCoordinateForPoint(coverRect.bottomRight());
+ Tile::Coordinate topLeft = tileCoordinateForPoint(coverRect.location());
+ Tile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(coverRect.maxX(), coverRect.maxY()));
for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
Tile::Coordinate currentCoordinate(xCoordinate, yCoordinate);
diff --git a/Source/WebCore/platform/graphics/WidthIterator.cpp b/Source/WebCore/platform/graphics/WidthIterator.cpp
index 412c86e..a1a88da 100644
--- a/Source/WebCore/platform/graphics/WidthIterator.cpp
+++ b/Source/WebCore/platform/graphics/WidthIterator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
@@ -47,6 +47,7 @@ WidthIterator::WidthIterator(const Font* font, const TextRun& run, HashSet<const
, m_end(run.length())
, m_currentCharacter(0)
, m_runWidthSoFar(0)
+ , m_isAfterExpansion(true)
, m_finalRoundingWidth(0)
, m_fallbackFonts(fallbackFonts)
, m_accountForGlyphBounds(accountForGlyphBounds)
@@ -58,20 +59,19 @@ WidthIterator::WidthIterator(const Font* font, const TextRun& run, HashSet<const
{
// If the padding is non-zero, count the number of spaces in the run
// and divide that by the padding for per space addition.
- m_padding = m_run.padding();
- if (!m_padding)
- m_padPerSpace = 0;
+ m_expansion = m_run.expansion();
+ if (!m_expansion)
+ m_expansionPerOpportunity = 0;
else {
- int numSpaces = 0;
- for (int i = 0; i < run.length(); i++) {
- if (Font::treatAsSpace(m_run[i]))
- numSpaces++;
- }
+ bool isAfterExpansion = true;
+ unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, m_run.ltr() ? LTR : RTL, isAfterExpansion);
+ if (isAfterExpansion && !m_run.allowsTrailingExpansion())
+ expansionOpportunityCount--;
- if (!numSpaces)
- m_padPerSpace = 0;
+ if (!expansionOpportunityCount)
+ m_expansionPerOpportunity = 0;
else
- m_padPerSpace = m_padding / numSpaces;
+ m_expansionPerOpportunity = m_expansion / expansionOpportunityCount;
}
}
@@ -84,7 +84,7 @@ void WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
const UChar* cp = m_run.data(currentCharacter);
bool rtl = m_run.rtl();
- bool hasExtraSpacing = (m_font->letterSpacing() || m_font->wordSpacing() || m_padding) && !m_run.spacingDisabled();
+ bool hasExtraSpacing = (m_font->letterSpacing() || m_font->wordSpacing() || m_expansion) && !m_run.spacingDisabled();
float widthSinceLastRounding = m_runWidthSoFar;
m_runWidthSoFar = floorf(m_runWidthSoFar);
@@ -173,26 +173,34 @@ void WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
if (width && m_font->letterSpacing())
width += m_font->letterSpacing();
- if (Font::treatAsSpace(c)) {
- // Account for padding. WebCore uses space padding to justify text.
- // We distribute the specified padding over the available spaces in the run.
- if (m_padding) {
- // Use left over padding if not evenly divisible by number of spaces.
- if (m_padding < m_padPerSpace) {
- width += m_padding;
- m_padding = 0;
- } else {
- float previousPadding = m_padding;
- m_padding -= m_padPerSpace;
- width += roundf(previousPadding) - roundf(m_padding);
+ static bool expandAroundIdeographs = Font::canExpandAroundIdeographsInComplexText();
+ bool treatAsSpace = Font::treatAsSpace(c);
+ if (treatAsSpace || (expandAroundIdeographs && Font::isCJKIdeographOrSymbol(c))) {
+ // Distribute the run's total expansion evenly over all expansion opportunities in the run.
+ if (m_expansion && (m_run.allowsTrailingExpansion() || (m_run.ltr() && currentCharacter + clusterLength < static_cast<size_t>(m_run.length()))
+ || (m_run.rtl() && currentCharacter))) {
+ float previousExpansion = m_expansion;
+ if (!treatAsSpace && !m_isAfterExpansion) {
+ // Take the expansion opportunity before this ideograph.
+ m_expansion -= m_expansionPerOpportunity;
+ int expansion = roundf(previousExpansion) - roundf(m_expansion);
+ m_runWidthSoFar += expansion;
+ if (glyphBuffer)
+ glyphBuffer->expandLastAdvance(expansion);
+ previousExpansion = m_expansion;
}
- }
+ m_expansion -= m_expansionPerOpportunity;
+ width += roundf(previousExpansion) - roundf(m_expansion);
+ m_isAfterExpansion = true;
+ } else
+ m_isAfterExpansion = false;
// Account for word spacing.
// We apply additional space between "words" by adding width to the space character.
- if (currentCharacter != 0 && !Font::treatAsSpace(cp[-1]) && m_font->wordSpacing())
+ if (treatAsSpace && currentCharacter && !Font::treatAsSpace(cp[-1]) && m_font->wordSpacing())
width += m_font->wordSpacing();
- }
+ } else
+ m_isAfterExpansion = false;
}
if (m_accountForGlyphBounds) {
@@ -247,9 +255,9 @@ void WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
lastRoundingWidth = width - oldWidth;
if (m_accountForGlyphBounds) {
- m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, bounds.bottom());
+ m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, bounds.maxY());
m_minGlyphBoundingBoxY = min(m_minGlyphBoundingBoxY, bounds.y());
- m_lastGlyphOverflow = max<float>(0, bounds.right() - width);
+ m_lastGlyphOverflow = max<float>(0, bounds.maxX() - width);
}
}
@@ -260,13 +268,13 @@ void WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
bool WidthIterator::advanceOneCharacter(float& width, GlyphBuffer* glyphBuffer)
{
- glyphBuffer->clear();
+ int oldSize = glyphBuffer->size();
advance(m_currentCharacter + 1, glyphBuffer);
float w = 0;
- for (int i = 0; i < glyphBuffer->size(); ++i)
+ for (int i = oldSize; i < glyphBuffer->size(); ++i)
w += glyphBuffer->advanceAt(i);
width = w;
- return !glyphBuffer->isEmpty();
+ return glyphBuffer->size() > oldSize;
}
UChar32 WidthIterator::normalizeVoicingMarks(int currentCharacter)
diff --git a/Source/WebCore/platform/graphics/WidthIterator.h b/Source/WebCore/platform/graphics/WidthIterator.h
index 8b3c067..2b4f051 100644
--- a/Source/WebCore/platform/graphics/WidthIterator.h
+++ b/Source/WebCore/platform/graphics/WidthIterator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 2008, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2008 Holger Hans Peter Freyther
*
* This library is free software; you can redistribute it and/or
@@ -50,8 +50,9 @@ struct WidthIterator {
unsigned m_currentCharacter;
float m_runWidthSoFar;
- float m_padding;
- float m_padPerSpace;
+ float m_expansion;
+ float m_expansionPerOpportunity;
+ bool m_isAfterExpansion;
float m_finalRoundingWidth;
private:
diff --git a/Source/WebCore/platform/graphics/android/FontAndroid.cpp b/Source/WebCore/platform/graphics/android/FontAndroid.cpp
index 7fcad73..af2edc7 100644
--- a/Source/WebCore/platform/graphics/android/FontAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/FontAndroid.cpp
@@ -161,6 +161,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
void Font::drawGlyphs(GraphicsContext* gc, const SimpleFontData* font,
const GlyphBuffer& glyphBuffer, int from, int numGlyphs,
const FloatPoint& point) const
@@ -918,7 +923,7 @@ void Font::drawComplexText(GraphicsContext* gc, TextRun const& run,
bool haveMultipleLayers = isCanvasMultiLayered(canvas);
TextRunWalker walker(run, point.x(), this);
walker.setWordAndLetterSpacing(wordSpacing(), letterSpacing());
- walker.setPadding(run.padding());
+ walker.setPadding(run.expansion());
while (walker.nextScriptRun()) {
if (fill) {
diff --git a/Source/WebCore/platform/graphics/android/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/android/FontCustomPlatformData.cpp
index 4795d9e..7190f32 100644
--- a/Source/WebCore/platform/graphics/android/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/android/FontCustomPlatformData.cpp
@@ -46,7 +46,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
}
FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic,
- FontOrientation, FontRenderingMode)
+ FontOrientation, FontWidthVariant, FontRenderingMode)
{
// turn bold/italic into fakeBold/fakeItalic
if (m_typeface != NULL) {
diff --git a/Source/WebCore/platform/graphics/android/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/android/FontCustomPlatformData.h
index b03afa9..f74abc5 100644
--- a/Source/WebCore/platform/graphics/android/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/android/FontCustomPlatformData.h
@@ -28,6 +28,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -46,7 +47,7 @@ public:
SkTypeface* typeface() const { return m_typeface; }
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode);
static bool supportsFormat(const String&);
private:
diff --git a/Source/WebCore/platform/graphics/android/FontDataAndroid.cpp b/Source/WebCore/platform/graphics/android/FontDataAndroid.cpp
index 545dcf7..1f19b6d 100644
--- a/Source/WebCore/platform/graphics/android/FontDataAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/FontDataAndroid.cpp
@@ -43,22 +43,20 @@ namespace WebCore {
void SimpleFontData::platformInit()
{
SkPaint paint;
- SkPaint::FontMetrics metrics;
+ SkPaint::FontMetrics skiaFontMetrics;
m_platformData.setupPaint(&paint);
- (void)paint.getFontMetrics(&metrics);
-
- // use ceil instead of round to favor descent, given a lot of accidental
- // clipping of descenders (e.g. 14pt 'g') in textedit fields
- int d = SkScalarCeil(metrics.fDescent);
- int s = SkScalarRound(metrics.fDescent - metrics.fAscent);
- int a = s - d;
-
- m_ascent = a;
- m_descent = d;
- m_xHeight = SkScalarToFloat(-metrics.fAscent) * 0.56f; // hack I stole from the window's port
- m_lineSpacing = a + d;
- m_lineGap = SkScalarRound(metrics.fLeading);
+ paint.getFontMetrics(&skiaFontMetrics);
+
+ float d = SkScalarToFloat(skiaFontMetrics.fDescent);
+ float s = SkScalarToFloat(skiaFontMetrics.fDescent - skiaFontMetrics.fAscent);
+ float a = s - d;
+
+ m_fontMetrics.setAscent(a);
+ m_fontMetrics.setDescent(d);
+ m_fontMetrics.setXHeight(SkScalarToFloat(-skiaFontMetrics.fAscent) * 0.56f); // hack I stole from the window's port
+ m_fontMetrics.setLineSpacing(a + d);
+ m_fontMetrics.setLineGap(SkScalarToFloat(skiaFontMetrics.fLeading));
}
void SimpleFontData::platformCharWidthInit()
diff --git a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
index f46d335..966670d 100644
--- a/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
+++ b/Source/WebCore/platform/graphics/android/GLWebViewState.cpp
@@ -229,7 +229,7 @@ void GLWebViewState::inval(const IntRect& rect)
rect.x(), rect.y(), rect.right(), rect.bottom());
}
} else {
- m_invalidateRegion.op(rect.x(), rect.y(), rect.right(), rect.bottom(), SkRegion::kUnion_Op);
+ m_invalidateRegion.op(rect.x(), rect.y(), rect.maxX(), rect.maxY(), SkRegion::kUnion_Op);
}
}
diff --git a/Source/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp b/Source/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
index 888be5b..012c1a8 100644
--- a/Source/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
@@ -115,7 +115,6 @@ struct ShadowRec {
class GraphicsContextPlatformPrivate {
public:
struct State {
- SkPath* path;
SkPathEffect* pathEffect;
float miterLimit;
float alpha;
@@ -133,8 +132,7 @@ public:
WTF::Vector<SkPath> antiAliasClipPaths;
State()
- : path(0) // Lazily allocated
- , pathEffect(0)
+ : pathEffect(0)
, miterLimit(4)
, alpha(1)
, strokeThickness(0) // Same as default in GraphicsContextPrivate.h
@@ -162,13 +160,11 @@ public:
, strokeColor(other.strokeColor)
, useAA(other.useAA)
{
- path = deepCopyPtr<SkPath>(other.path);
SkSafeRef(pathEffect);
}
~State()
{
- delete path;
SkSafeUnref(pathEffect);
}
@@ -273,26 +269,6 @@ public:
m_state->strokeThickness = f;
}
- void beginPath()
- {
- if (m_state->path)
- m_state->path->reset();
- }
-
- void addPath(const SkPath& other)
- {
- if (!m_state->path)
- m_state->path = new SkPath(other);
- else
- m_state->path->addPath(other);
- }
-
- // May return null
- SkPath* getPath() const
- {
- return m_state->path;
- }
-
void setupPaintCommon(SkPaint* paint) const
{
paint->setAntiAlias(m_state->useAA);
@@ -538,11 +514,6 @@ bool GraphicsContext::willStroke() const
return m_data->getState()->strokeColor;
}
-const SkPath* GraphicsContext::getCurrPath() const
-{
- return m_data->getState()->path;
-}
-
// Draws a filled rectangle with a stroked border.
void GraphicsContext::drawRect(const IntRect& rect)
{
@@ -909,12 +880,7 @@ void GraphicsContext::clipPath(const Path& pathToClip, WindRule clipRule)
if (paintingDisabled())
return;
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToClip);
-
- const SkPath* oldPath = m_data->getPath();
- SkPath path(*oldPath);
+ SkPath path = *pathToClip.platformPath();
path.setFillType(clipRule == RULE_EVENODD ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType);
GC2CANVAS(this)->clipPath(path);
}
@@ -1231,23 +1197,9 @@ AffineTransform GraphicsContext::getCTM() const
///////////////////////////////////////////////////////////////////////////////
-void GraphicsContext::beginPath()
-{
- m_data->beginPath();
-}
-
-void GraphicsContext::addPath(const Path& p)
-{
- m_data->addPath(*p.platformPath());
-}
-
void GraphicsContext::fillPath(const Path& pathToFill)
{
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToFill);
-
- SkPath* path = m_data->getPath();
+ SkPath* path = pathToFill.platformPath();
if (paintingDisabled() || !path)
return;
@@ -1272,11 +1224,7 @@ void GraphicsContext::fillPath(const Path& pathToFill)
void GraphicsContext::strokePath(const Path& pathToStroke)
{
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToStroke);
-
- const SkPath* path = m_data->getPath();
+ const SkPath* path = pathToStroke.platformPath();
if (paintingDisabled() || !path)
return;
diff --git a/Source/WebCore/platform/graphics/android/ImageBufferAndroid.cpp b/Source/WebCore/platform/graphics/android/ImageBufferAndroid.cpp
index 0a36051..5807f87 100644
--- a/Source/WebCore/platform/graphics/android/ImageBufferAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/ImageBufferAndroid.cpp
@@ -120,7 +120,7 @@ PassRefPtr<ByteArray> ImageBuffer::getUnmultipliedImageData(const IntRect& rect)
RefPtr<ByteArray> result = ByteArray::create(rect.width() * rect.height() * 4);
unsigned char* data = result->data();
- if (rect.x() < 0 || rect.y() < 0 || rect.right() > m_size.width() || rect.bottom() > m_size.height())
+ if (rect.x() < 0 || rect.y() < 0 || rect.maxX() > m_size.width() || rect.maxY() > m_size.height())
memset(data, 0, result->length());
int originx = rect.x();
@@ -189,7 +189,7 @@ void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sou
ASSERT(originx >= 0);
ASSERT(originx <= sourceRect.right());
- int endx = destPoint.x() + sourceRect.right();
+ int endx = destPoint.x() + sourceRect.maxX();
ASSERT(endx <= m_size.width());
int numColumns = endx - destx;
@@ -201,7 +201,7 @@ void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sou
ASSERT(originy >= 0);
ASSERT(originy <= sourceRect.bottom());
- int endy = destPoint.y() + sourceRect.bottom();
+ int endy = destPoint.y() + sourceRect.maxY();
ASSERT(endy <= m_size.height());
int numRows = endy - desty;
diff --git a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
index c0fbf61..34c02e9 100644
--- a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
@@ -600,7 +600,7 @@ void LayerAndroid::updateGLPositions(const TransformationMatrix& parentMatrix,
localMatrix.translate3d(originX + position.x(),
originY + position.y(),
anchorPointZ());
- localMatrix.multLeft(m_transform);
+ localMatrix.multiply(m_transform);
localMatrix.translate3d(-originX,
-originY,
-anchorPointZ());
@@ -648,7 +648,7 @@ void LayerAndroid::updateGLPositions(const TransformationMatrix& parentMatrix,
if (!m_childrenTransform.isIdentity()) {
localMatrix.translate(getSize().width() * 0.5f, getSize().height() * 0.5f);
- localMatrix.multLeft(m_childrenTransform);
+ localMatrix.multiply(m_childrenTransform);
localMatrix.translate(-getSize().width() * 0.5f, -getSize().height() * 0.5f);
}
for (int i = 0; i < count; i++)
diff --git a/Source/WebCore/platform/graphics/android/PathAndroid.cpp b/Source/WebCore/platform/graphics/android/PathAndroid.cpp
index e0d7171..ad345bb 100644
--- a/Source/WebCore/platform/graphics/android/PathAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/PathAndroid.cpp
@@ -285,35 +285,20 @@ void Path::transform(const AffineTransform& xform)
///////////////////////////////////////////////////////////////////////////////
-// Computes the bounding box for the stroke and style currently selected into
-// the given bounding box. This also takes into account the stroke width.
-static FloatRect boundingBoxForCurrentStroke(GraphicsContext* context)
-{
- const SkPath* path = context->getCurrPath();
- if (NULL == path) {
- return FloatRect();
- }
-
- SkPaint paint;
- context->setupStrokePaint(&paint);
- SkPath fillPath;
- paint.getFillPath(*path, &fillPath);
- const SkRect& r = fillPath.getBounds();
- return FloatRect(SkScalarToFloat(r.fLeft), SkScalarToFloat(r.fTop),
- SkScalarToFloat(r.width()), SkScalarToFloat(r.height()));
-}
-
FloatRect Path::strokeBoundingRect(StrokeStyleApplier* applier)
{
GraphicsContext* scratch = scratchContext();
scratch->save();
- scratch->beginPath();
- scratch->addPath(*this);
-
+
if (applier)
applier->strokeStyle(scratch);
-
- FloatRect r = boundingBoxForCurrentStroke(scratch);
+
+ SkPaint paint;
+ scratch->setupStrokePaint(&paint);
+ SkPath boundingPath;
+ paint.getFillPath(*platformPath(), &boundingPath);
+
+ FloatRect r = boundingPath.getBounds();
scratch->restore();
return r;
}
diff --git a/Source/WebCore/platform/graphics/android/PlatformGraphicsContext.h b/Source/WebCore/platform/graphics/android/PlatformGraphicsContext.h
index 0ce86d2..98fcc49 100644
--- a/Source/WebCore/platform/graphics/android/PlatformGraphicsContext.h
+++ b/Source/WebCore/platform/graphics/android/PlatformGraphicsContext.h
@@ -118,7 +118,7 @@ public:
state == WebCore::RenderSkinAndroid::kFocused)
return;
m_state = state;
- SkCanvas* canvas = m_picture->beginRecording(m_rect.right(), m_rect.bottom());
+ SkCanvas* canvas = m_picture->beginRecording(m_rect.maxX(), m_rect.maxY());
buttonSkin->draw(canvas, m_rect, state);
m_picture->endRecording();
}
diff --git a/Source/WebCore/platform/graphics/android/ShaderProgram.cpp b/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
index 0117bc0..f2b2dc8 100644
--- a/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
+++ b/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
@@ -224,9 +224,7 @@ void ShaderProgram::setProjectionMatrix(SkRect& geometry)
TransformationMatrix scale;
scale.scale3d(geometry.width(), geometry.height(), 1.0);
- TransformationMatrix total = m_projectionMatrix;
- total.multLeft(translate);
- total.multLeft(scale);
+ TransformationMatrix total = m_projectionMatrix * translate * scale;
GLfloat projectionMatrix[16];
GLUtils::toGLMatrix(projectionMatrix, total);
@@ -264,14 +262,10 @@ void ShaderProgram::setViewRect(const IntRect& viewRect)
TransformationMatrix scale;
scale.scale3d(m_viewRect.width() * 0.5f, m_viewRect.height() * 0.5f, 1);
- m_documentToScreenMatrix = m_projectionMatrix;
- m_documentToScreenMatrix.multiply(translate);
- m_documentToScreenMatrix.multiply(scale);
+ m_documentToScreenMatrix = scale * translate * m_projectionMatrix;
- m_documentToInvScreenMatrix = m_projectionMatrix;
translate.scale3d(1, -1, 1);
- m_documentToInvScreenMatrix.multiply(translate);
- m_documentToInvScreenMatrix.multiply(scale);
+ m_documentToInvScreenMatrix = scale * translate * m_projectionMatrix;
}
// This function transform a clip rect extracted from the current layer
@@ -279,8 +273,7 @@ void ShaderProgram::setViewRect(const IntRect& viewRect)
FloatRect ShaderProgram::rectInScreenCoord(const TransformationMatrix& drawMatrix, const IntSize& size)
{
FloatRect srect(0, 0, size.width(), size.height());
- TransformationMatrix renderMatrix = drawMatrix;
- renderMatrix.multiply(m_documentToScreenMatrix);
+ TransformationMatrix renderMatrix = m_documentToScreenMatrix * drawMatrix;
return renderMatrix.mapRect(srect);
}
@@ -288,8 +281,7 @@ FloatRect ShaderProgram::rectInScreenCoord(const TransformationMatrix& drawMatri
FloatRect ShaderProgram::rectInInvScreenCoord(const TransformationMatrix& drawMatrix, const IntSize& size)
{
FloatRect srect(0, 0, size.width(), size.height());
- TransformationMatrix renderMatrix = drawMatrix;
- renderMatrix.multiply(m_documentToInvScreenMatrix);
+ TransformationMatrix renderMatrix = m_documentToInvScreenMatrix * drawMatrix;
return renderMatrix.mapRect(srect);
}
@@ -372,9 +364,9 @@ IntRect ShaderProgram::clippedRectWithViewport(const IntRect& rect, int margin)
float ShaderProgram::zValue(const TransformationMatrix& drawMatrix, float w, float h)
{
- TransformationMatrix renderMatrix = drawMatrix;
- renderMatrix.scale3d(w, h, 1);
- renderMatrix.multiply(m_projectionMatrix);
+ TransformationMatrix modifiedDrawMatrix = drawMatrix;
+ modifiedDrawMatrix.scale3d(w, h, 1);
+ TransformationMatrix renderMatrix = m_projectionMatrix * modifiedDrawMatrix;
FloatPoint3D point(0.5, 0.5, 0.0);
FloatPoint3D result = renderMatrix.mapPoint(point);
return result.z();
@@ -385,11 +377,11 @@ void ShaderProgram::drawLayerQuad(const TransformationMatrix& drawMatrix,
bool forceBlending)
{
- TransformationMatrix renderMatrix = drawMatrix;
+ TransformationMatrix modifiedDrawMatrix = drawMatrix;
// move the drawing depending on where the texture is on the layer
- renderMatrix.translate(geometry.fLeft, geometry.fTop);
- renderMatrix.scale3d(geometry.width(), geometry.height(), 1);
- renderMatrix.multiply(m_projectionMatrix);
+ modifiedDrawMatrix.translate(geometry.fLeft, geometry.fTop);
+ modifiedDrawMatrix.scale3d(geometry.width(), geometry.height(), 1);
+ TransformationMatrix renderMatrix = m_projectionMatrix * modifiedDrawMatrix;
GLfloat projectionMatrix[16];
GLUtils::toGLMatrix(projectionMatrix, renderMatrix);
@@ -414,10 +406,10 @@ void ShaderProgram::drawVideoLayerQuad(const TransformationMatrix& drawMatrix,
// switch to our custom yuv video rendering program
glUseProgram(m_videoProgram);
- TransformationMatrix renderMatrix = drawMatrix;
- renderMatrix.translate(geometry.fLeft, geometry.fTop);
- renderMatrix.scale3d(geometry.width(), geometry.height(), 1);
- renderMatrix.multiply(m_projectionMatrix);
+ TransformationMatrix modifiedDrawMatrix = drawMatrix;
+ modifiedDrawMatrix.translate(geometry.fLeft, geometry.fTop);
+ modifiedDrawMatrix.scale3d(geometry.width(), geometry.height(), 1);
+ TransformationMatrix renderMatrix = m_projectionMatrix * modifiedDrawMatrix;
GLfloat projectionMatrix[16];
GLUtils::toGLMatrix(projectionMatrix, renderMatrix);
diff --git a/Source/WebCore/platform/graphics/android/TiledPage.cpp b/Source/WebCore/platform/graphics/android/TiledPage.cpp
index 5212871..0e1e947 100644
--- a/Source/WebCore/platform/graphics/android/TiledPage.cpp
+++ b/Source/WebCore/platform/graphics/android/TiledPage.cpp
@@ -122,14 +122,14 @@ void TiledPage::invalidateRect(const IntRect& inval, const unsigned int pictureC
const int firstDirtyTileX = static_cast<int>(floorf(inval.x() * invTileContentWidth));
const int firstDirtyTileY = static_cast<int>(floorf(inval.y() * invTileContentHeight));
- const int lastDirtyTileX = static_cast<int>(ceilf(inval.right() * invTileContentWidth));
- const int lastDirtyTileY = static_cast<int>(ceilf(inval.bottom() * invTileContentHeight));
+ const int lastDirtyTileX = static_cast<int>(ceilf(inval.maxX() * invTileContentWidth));
+ const int lastDirtyTileY = static_cast<int>(ceilf(inval.maxY() * invTileContentHeight));
XLOG("Marking X %d-%d and Y %d-%d dirty", firstDirtyTileX, lastDirtyTileX, firstDirtyTileY, lastDirtyTileY);
// We defer marking the tile as dirty until the next time we need to prepare
// to draw.
m_invalRegion.op(firstDirtyTileX, firstDirtyTileY, lastDirtyTileX, lastDirtyTileY, SkRegion::kUnion_Op);
- m_invalTilesRegion.op(inval.x(), inval.y(), inval.right(), inval.bottom(), SkRegion::kUnion_Op);
+ m_invalTilesRegion.op(inval.x(), inval.y(), inval.maxX(), inval.maxY(), SkRegion::kUnion_Op);
m_latestPictureInval = pictureCount;
}
diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
index 01e25e9..2b4a39e 100644
--- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
+++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
@@ -1507,7 +1507,7 @@ void GraphicsLayerCA::pauseCAAnimationOnLayer(AnimatedPropertyID property, const
return;
// Animations on the layer are immutable, so we have to clone and modify.
- RefPtr<PlatformCAAnimation> newAnim = PlatformCAAnimation::create(curAnim.get());
+ RefPtr<PlatformCAAnimation> newAnim = curAnim->copy();
newAnim->setSpeed(0);
newAnim->setTimeOffset(timeOffset);
@@ -1646,7 +1646,7 @@ void GraphicsLayerCA::setupAnimation(PlatformCAAnimation* propertyAnim, const An
float repeatCount = anim->iterationCount();
if (repeatCount == Animation::IterationCountInfinite)
- repeatCount = FLT_MAX;
+ repeatCount = numeric_limits<float>::max();
else if (anim->direction() == Animation::AnimationDirectionAlternate)
repeatCount /= 2;
diff --git a/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h b/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h
index 4bfce63..a8528fd 100644
--- a/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h
+++ b/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h
@@ -63,13 +63,14 @@ public:
enum ValueFunctionType { NoValueFunction, RotateX, RotateY, RotateZ, ScaleX, ScaleY, ScaleZ, Scale, TranslateX, TranslateY, TranslateZ, Translate };
static PassRefPtr<PlatformCAAnimation> create(AnimationType, const String& keyPath);
- static PassRefPtr<PlatformCAAnimation> create(PlatformAnimationRef animation);
- static PassRefPtr<PlatformCAAnimation> create(const PlatformCAAnimation* animation);
+ static PassRefPtr<PlatformCAAnimation> create(PlatformAnimationRef);
~PlatformCAAnimation();
static bool supportsValueFunction();
+ PassRefPtr<PlatformCAAnimation> copy() const;
+
PlatformAnimationRef platformAnimation() const;
AnimationType animationType() const { return m_type; }
@@ -136,8 +137,7 @@ public:
protected:
PlatformCAAnimation(AnimationType, const String& keyPath);
- PlatformCAAnimation(PlatformAnimationRef animation);
- PlatformCAAnimation(const PlatformCAAnimation* animation);
+ PlatformCAAnimation(PlatformAnimationRef);
private:
AnimationType m_type;
diff --git a/Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm b/Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm
index 2a00857..506bd40 100644
--- a/Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm
+++ b/Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm
@@ -159,11 +159,6 @@ PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(PlatformAnimationRef
return adoptRef(new PlatformCAAnimation(animation));
}
-PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(const PlatformCAAnimation* animation)
-{
- return adoptRef(new PlatformCAAnimation(animation));
-}
-
PlatformCAAnimation::PlatformCAAnimation(AnimationType type, const String& keyPath)
: m_type(type)
{
@@ -187,38 +182,36 @@ PlatformCAAnimation::PlatformCAAnimation(PlatformAnimationRef animation)
m_animation = static_cast<CAPropertyAnimation*>(animation);
}
-PlatformCAAnimation::PlatformCAAnimation(const PlatformCAAnimation* animation)
+PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::copy() const
{
- PlatformCAAnimation* newAnimation = new PlatformCAAnimation(animation->animationType(), animation->keyPath());
-
- newAnimation->setBeginTime(animation->beginTime());
- newAnimation->setDuration(animation->duration());
- newAnimation->setSpeed(animation->speed());
- newAnimation->setTimeOffset(animation->timeOffset());
- newAnimation->setRepeatCount(animation->repeatCount());
- newAnimation->setAutoreverses(animation->autoreverses());
- newAnimation->setFillMode(animation->fillMode());
- newAnimation->setRemovedOnCompletion(animation->isRemovedOnCompletion());
- newAnimation->setAdditive(animation->isAdditive());
- newAnimation->copyTimingFunctionFrom(animation);
-
-#if HAVE_MODERN_QUARTZCORE
- newAnimation->setValueFunction(animation->valueFunction());
-#endif
-
- setNonZeroBeginTimeFlag(newAnimation, hasNonZeroBeginTimeFlag(animation));
+ RefPtr<PlatformCAAnimation> animation = create(animationType(), keyPath());
+
+ animation->setBeginTime(beginTime());
+ animation->setDuration(duration());
+ animation->setSpeed(speed());
+ animation->setTimeOffset(timeOffset());
+ animation->setRepeatCount(repeatCount());
+ animation->setAutoreverses(autoreverses());
+ animation->setFillMode(fillMode());
+ animation->setRemovedOnCompletion(isRemovedOnCompletion());
+ animation->setAdditive(isAdditive());
+ animation->copyTimingFunctionFrom(this);
+ animation->setValueFunction(valueFunction());
+
+ setNonZeroBeginTimeFlag(animation.get(), hasNonZeroBeginTimeFlag(this));
// Copy the specific Basic or Keyframe values
- if (animation->animationType() == Keyframe) {
- newAnimation->copyValuesFrom(animation);
- newAnimation->copyKeyTimesFrom(animation);
- newAnimation->copyTimingFunctionsFrom(animation);
+ if (animationType() == Keyframe) {
+ animation->copyValuesFrom(this);
+ animation->copyKeyTimesFrom(this);
+ animation->copyTimingFunctionsFrom(this);
} else {
- newAnimation->copyFromValueFrom(animation);
- newAnimation->copyToValueFrom(animation);
+ animation->copyFromValueFrom(this);
+ animation->copyToValueFrom(this);
}
+
+ return animation;
}
-
PlatformCAAnimation::~PlatformCAAnimation()
{
}
diff --git a/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp
index 1d27608..9dc30ea 100644
--- a/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp
+++ b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp
@@ -28,49 +28,22 @@
#if USE(ACCELERATED_COMPOSITING)
+#include "CACFLayerTreeHostClient.h"
#include "LayerChangesFlusher.h"
+#include "LegacyCACFLayerTreeHost.h"
#include "PlatformCALayer.h"
+#include "WKCACFViewLayerTreeHost.h"
#include "WebCoreInstanceHandle.h"
-#include <WebKitSystemInterface/WebKitSystemInterface.h>
#include <limits.h>
#include <wtf/CurrentTime.h>
-#include <wtf/HashMap.h>
#include <wtf/OwnArrayPtr.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
-#include <wtf/StdLibExtras.h>
-#ifndef NDEBUG
-#define D3D_DEBUG_INFO
-#endif
-
-#include <d3d9.h>
-#include <d3dx9.h>
-
-using namespace std;
-
-#pragma comment(lib, "d3d9")
-#pragma comment(lib, "d3dx9")
#ifdef DEBUG_ALL
#pragma comment(lib, "QuartzCore_debug")
#else
#pragma comment(lib, "QuartzCore")
#endif
-static IDirect3D9* s_d3d = 0;
-static IDirect3D9* d3d()
-{
- if (s_d3d)
- return s_d3d;
-
- if (!LoadLibrary(TEXT("d3d9.dll")))
- return 0;
-
- s_d3d = Direct3DCreate9(D3D_SDK_VERSION);
-
- return s_d3d;
-}
-
inline static CGRect winRectToCGRect(RECT rc)
{
return CGRectMake(rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top));
@@ -83,40 +56,6 @@ inline static CGRect winRectToCGRect(RECT rc, RECT relativeToRect)
namespace WebCore {
-static D3DPRESENT_PARAMETERS initialPresentationParameters()
-{
- D3DPRESENT_PARAMETERS parameters = {0};
- parameters.Windowed = TRUE;
- parameters.SwapEffect = D3DSWAPEFFECT_COPY;
- parameters.BackBufferCount = 1;
- parameters.BackBufferFormat = D3DFMT_A8R8G8B8;
- parameters.MultiSampleType = D3DMULTISAMPLE_NONE;
-
- return parameters;
-}
-
-// FIXME: <rdar://6507851> Share this code with CoreAnimation.
-static bool hardwareCapabilitiesIndicateCoreAnimationSupport(const D3DCAPS9& caps)
-{
- // CoreAnimation needs two or more texture units.
- if (caps.MaxTextureBlendStages < 2)
- return false;
-
- // CoreAnimation needs non-power-of-two textures.
- if ((caps.TextureCaps & D3DPTEXTURECAPS_POW2) && !(caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL))
- return false;
-
- // CoreAnimation needs vertex shader 2.0 or greater.
- if (D3DSHADER_VERSION_MAJOR(caps.VertexShaderVersion) < 2)
- return false;
-
- // CoreAnimation needs pixel shader 2.0 or greater.
- if (D3DSHADER_VERSION_MAJOR(caps.PixelShaderVersion) < 2)
- return false;
-
- return true;
-}
-
bool CACFLayerTreeHost::acceleratedCompositingAvailable()
{
static bool available;
@@ -158,7 +97,7 @@ bool CACFLayerTreeHost::acceleratedCompositingAvailable()
wcex.hInstance = WebCore::instanceHandle();
wcex.lpszClassName = L"CoreAnimationTesterWindowClass";
::RegisterClassEx(&wcex);
- HWND testWindow = ::CreateWindow(L"CoreAnimationTesterWindowClass", L"CoreAnimationTesterWindow", WS_POPUP, -500, -500, 0, 0, 0, 0, 0, 0);
+ HWND testWindow = ::CreateWindow(L"CoreAnimationTesterWindowClass", L"CoreAnimationTesterWindow", WS_POPUP, -500, -500, 20, 20, 0, 0, 0, 0);
if (!testWindow) {
available = false;
@@ -168,6 +107,7 @@ bool CACFLayerTreeHost::acceleratedCompositingAvailable()
RefPtr<CACFLayerTreeHost> host = CACFLayerTreeHost::create();
host->setWindow(testWindow);
available = host->createRenderer();
+ host->setWindow(0);
::DestroyWindow(testWindow);
return available;
@@ -177,22 +117,29 @@ PassRefPtr<CACFLayerTreeHost> CACFLayerTreeHost::create()
{
if (!acceleratedCompositingAvailable())
return 0;
- return adoptRef(new CACFLayerTreeHost());
+ RefPtr<CACFLayerTreeHost> host = WKCACFViewLayerTreeHost::create();
+ if (!host)
+ host = LegacyCACFLayerTreeHost::create();
+ host->initialize();
+ return host.release();
}
CACFLayerTreeHost::CACFLayerTreeHost()
: m_client(0)
- , m_mightBeAbleToCreateDeviceLater(true)
, m_rootLayer(PlatformCALayer::create(PlatformCALayer::LayerTypeRootLayer, 0))
- , m_context(wkCACFContextCreate())
, m_window(0)
- , m_renderTimer(this, &CACFLayerTreeHost::renderTimerFired)
- , m_mustResetLostDeviceBeforeRendering(false)
, m_shouldFlushPendingGraphicsLayerChanges(false)
, m_isFlushingLayerChanges(false)
+#if !ASSERT_DISABLED
+ , m_state(WindowNotSet)
+#endif
+{
+}
+
+void CACFLayerTreeHost::initialize()
{
// Point the CACFContext to this
- wkCACFContextSetUserData(m_context, this);
+ initializeContext(this, m_rootLayer.get());
// Under the root layer, we have a clipping layer to clip the content,
// that contains a scroll layer that we use for scrolling the content.
@@ -212,20 +159,11 @@ CACFLayerTreeHost::CACFLayerTreeHost()
m_rootLayer->setBackgroundColor(debugColor);
CGColorRelease(debugColor);
#endif
-
- if (m_context)
- wkCACFContextSetLayer(m_context, m_rootLayer->platformLayer());
-
-#ifndef NDEBUG
- char* printTreeFlag = getenv("CA_PRINT_TREE");
- m_printTree = printTreeFlag && atoi(printTreeFlag);
-#endif
}
CACFLayerTreeHost::~CACFLayerTreeHost()
{
- setWindow(0);
- wkCACFContextDestroy(m_context);
+ ASSERT_WITH_MESSAGE(m_state != WindowSet, "Must call setWindow(0) before destroying CACFLayerTreeHost");
}
void CACFLayerTreeHost::setWindow(HWND window)
@@ -233,13 +171,28 @@ void CACFLayerTreeHost::setWindow(HWND window)
if (window == m_window)
return;
+#if !ASSERT_DISABLED
+ switch (m_state) {
+ case WindowNotSet:
+ ASSERT_ARG(window, window);
+ ASSERT(!m_window);
+ m_state = WindowSet;
+ break;
+ case WindowSet:
+ ASSERT_ARG(window, !window);
+ ASSERT(m_window);
+ m_state = WindowCleared;
+ break;
+ case WindowCleared:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+#endif
+
if (m_window)
destroyRenderer();
m_window = window;
-
- if (m_window)
- createRenderer();
}
PlatformCALayer* CACFLayerTreeHost::rootLayer() const
@@ -275,109 +228,11 @@ void CACFLayerTreeHost::layerTreeDidChange()
LayerChangesFlusher::shared().flushPendingLayerChangesSoon(this);
}
-bool CACFLayerTreeHost::createRenderer()
-{
- if (m_d3dDevice || !m_mightBeAbleToCreateDeviceLater)
- return m_d3dDevice;
-
- m_mightBeAbleToCreateDeviceLater = false;
- D3DPRESENT_PARAMETERS parameters = initialPresentationParameters();
-
- if (!d3d() || !::IsWindow(m_window))
- return false;
-
- // D3D doesn't like to make back buffers for 0 size windows. We skirt this problem if we make the
- // passed backbuffer width and height non-zero. The window will necessarily get set to a non-zero
- // size eventually, and then the backbuffer size will get reset.
- RECT rect;
- GetClientRect(m_window, &rect);
-
- if (rect.left-rect.right == 0 || rect.bottom-rect.top == 0) {
- parameters.BackBufferWidth = 1;
- parameters.BackBufferHeight = 1;
- }
-
- D3DCAPS9 d3dCaps;
- if (FAILED(d3d()->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps)))
- return false;
-
- DWORD behaviorFlags = D3DCREATE_FPU_PRESERVE;
- if ((d3dCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) && d3dCaps.VertexProcessingCaps)
- behaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
- else
- behaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
-
- COMPtr<IDirect3DDevice9> device;
- if (FAILED(d3d()->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_window, behaviorFlags, &parameters, &device))) {
- // In certain situations (e.g., shortly after waking from sleep), Direct3DCreate9() will
- // return an IDirect3D9 for which IDirect3D9::CreateDevice will always fail. In case we
- // have one of these bad IDirect3D9s, get rid of it so we'll fetch a new one the next time
- // we want to call CreateDevice.
- s_d3d->Release();
- s_d3d = 0;
-
- // Even if we don't have a bad IDirect3D9, in certain situations (e.g., shortly after
- // waking from sleep), CreateDevice will fail, but will later succeed if called again.
- m_mightBeAbleToCreateDeviceLater = true;
-
- return false;
- }
-
- // Now that we've created the IDirect3DDevice9 based on the capabilities we
- // got from the IDirect3D9 global object, we requery the device for its
- // actual capabilities. The capabilities returned by the device can
- // sometimes be more complete, for example when using software vertex
- // processing.
- D3DCAPS9 deviceCaps;
- if (FAILED(device->GetDeviceCaps(&deviceCaps)))
- return false;
-
- if (!hardwareCapabilitiesIndicateCoreAnimationSupport(deviceCaps))
- return false;
-
- m_d3dDevice = device;
-
- initD3DGeometry();
-
- wkCACFContextSetD3DDevice(m_context, m_d3dDevice.get());
-
- if (IsWindow(m_window))
- m_rootLayer->setBounds(bounds());
-
- return true;
-}
-
void CACFLayerTreeHost::destroyRenderer()
{
- LayerChangesFlusher::shared().cancelPendingFlush(this);
-
- wkCACFContextSetLayer(m_context, 0);
-
- wkCACFContextSetD3DDevice(m_context, 0);
- m_d3dDevice = 0;
- if (s_d3d)
- s_d3d->Release();
-
- s_d3d = 0;
m_rootLayer = 0;
m_rootChildLayer = 0;
-
- m_mightBeAbleToCreateDeviceLater = true;
-}
-
-void CACFLayerTreeHost::resize()
-{
- if (!m_d3dDevice)
- return;
-
- // Resetting the device might fail here. But that's OK, because if it does it we will attempt to
- // reset the device the next time we try to render.
- resetDevice(ChangedWindowSize);
-
- if (m_rootLayer) {
- m_rootLayer->setBounds(bounds());
- wkCACFContextFlush(m_context);
- }
+ LayerChangesFlusher::shared().cancelPendingFlush(this);
}
static void getDirtyRects(HWND window, Vector<CGRect>& outRects)
@@ -398,7 +253,7 @@ static void getDirtyRects(HWND window, Vector<CGRect>& outRects)
}
DWORD dataSize = GetRegionData(region.get(), 0, 0);
- OwnArrayPtr<unsigned char> regionDataBuffer(new unsigned char[dataSize]);
+ OwnArrayPtr<unsigned char> regionDataBuffer = adoptArrayPtr(new unsigned char[dataSize]);
RGNDATA* regionData = reinterpret_cast<RGNDATA*>(regionDataBuffer.get());
if (!GetRegionData(region.get(), dataSize, regionData))
return;
@@ -410,120 +265,13 @@ static void getDirtyRects(HWND window, Vector<CGRect>& outRects)
outRects[i] = winRectToCGRect(*rect, clientRect);
}
-void CACFLayerTreeHost::renderTimerFired(Timer<CACFLayerTreeHost>*)
-{
- paint();
-}
-
void CACFLayerTreeHost::paint()
{
- createRenderer();
- if (!m_d3dDevice) {
- if (m_mightBeAbleToCreateDeviceLater)
- renderSoon();
- return;
- }
-
Vector<CGRect> dirtyRects;
getDirtyRects(m_window, dirtyRects);
render(dirtyRects);
}
-void CACFLayerTreeHost::render(const Vector<CGRect>& windowDirtyRects)
-{
- ASSERT(m_d3dDevice);
-
- if (m_mustResetLostDeviceBeforeRendering && !resetDevice(LostDevice)) {
- // We can't reset the device right now. Try again soon.
- renderSoon();
- return;
- }
-
- // All pending animations will have been started with the flush. Fire the animationStarted calls
- double currentTime = WTF::currentTime();
- double currentMediaTime = CACurrentMediaTime();
- double t = currentTime + wkCACFContextGetLastCommitTime(m_context) - currentMediaTime;
- ASSERT(t <= currentTime);
-
- HashSet<RefPtr<PlatformCALayer> >::iterator end = m_pendingAnimatedLayers.end();
- for (HashSet<RefPtr<PlatformCALayer> >::iterator it = m_pendingAnimatedLayers.begin(); it != end; ++it) {
- PlatformCALayerClient* owner = (*it)->owner();
- owner->platformCALayerAnimationStarted(t);
- }
-
- m_pendingAnimatedLayers.clear();
-
- CGRect bounds = this->bounds();
-
- // Give the renderer some space to use. This needs to be valid until the
- // wkCACFContextFinishUpdate() call below.
- char space[4096];
- if (!wkCACFContextBeginUpdate(m_context, space, sizeof(space), currentMediaTime, bounds, windowDirtyRects.data(), windowDirtyRects.size()))
- return;
-
- HRESULT err = S_OK;
- CFTimeInterval timeToNextRender = numeric_limits<CFTimeInterval>::infinity();
-
- do {
- // FIXME: don't need to clear dirty region if layer tree is opaque.
-
- WKCACFUpdateRectEnumerator* e = wkCACFContextCopyUpdateRectEnumerator(m_context);
- if (!e)
- break;
-
- Vector<D3DRECT, 64> rects;
- for (const CGRect* r = wkCACFUpdateRectEnumeratorNextRect(e); r; r = wkCACFUpdateRectEnumeratorNextRect(e)) {
- D3DRECT rect;
- rect.x1 = r->origin.x;
- rect.x2 = rect.x1 + r->size.width;
- rect.y1 = bounds.origin.y + bounds.size.height - (r->origin.y + r->size.height);
- rect.y2 = rect.y1 + r->size.height;
-
- rects.append(rect);
- }
- wkCACFUpdateRectEnumeratorRelease(e);
-
- timeToNextRender = wkCACFContextGetNextUpdateTime(m_context);
-
- if (rects.isEmpty())
- break;
-
- m_d3dDevice->Clear(rects.size(), rects.data(), D3DCLEAR_TARGET, 0, 1.0f, 0);
-
- m_d3dDevice->BeginScene();
- wkCACFContextRenderUpdate(m_context);
- m_d3dDevice->EndScene();
-
- err = m_d3dDevice->Present(0, 0, 0, 0);
-
- if (err == D3DERR_DEVICELOST) {
- wkCACFContextAddUpdateRect(m_context, bounds);
- if (!resetDevice(LostDevice)) {
- // We can't reset the device right now. Try again soon.
- renderSoon();
- return;
- }
- }
- } while (err == D3DERR_DEVICELOST);
-
- wkCACFContextFinishUpdate(m_context);
-
-#ifndef NDEBUG
- if (m_printTree)
- m_rootLayer->printTree();
-#endif
-
- // If timeToNextRender is not infinity, it means animations are running, so queue up to render again
- if (timeToNextRender != numeric_limits<CFTimeInterval>::infinity())
- renderSoon();
-}
-
-void CACFLayerTreeHost::renderSoon()
-{
- if (!m_renderTimer.isActive())
- m_renderTimer.startOneShot(0);
-}
-
void CACFLayerTreeHost::flushPendingGraphicsLayerChangesSoon()
{
m_shouldFlushPendingGraphicsLayerChanges = true;
@@ -545,75 +293,36 @@ void CACFLayerTreeHost::flushPendingLayerChangesNow()
}
// Flush changes stored up in PlatformCALayers to the context so they will be rendered.
- wkCACFContextFlush(m_context);
-
- renderSoon();
+ flushContext();
m_isFlushingLayerChanges = false;
}
-CGRect CACFLayerTreeHost::bounds() const
+void CACFLayerTreeHost::contextDidChange()
{
- RECT clientRect;
- GetClientRect(m_window, &clientRect);
-
- return winRectToCGRect(clientRect);
+ // All pending animations will have been started with the flush. Fire the animationStarted calls.
+ notifyAnimationsStarted();
}
-void CACFLayerTreeHost::initD3DGeometry()
+void CACFLayerTreeHost::notifyAnimationsStarted()
{
- ASSERT(m_d3dDevice);
-
- CGRect bounds = this->bounds();
-
- float x0 = bounds.origin.x;
- float y0 = bounds.origin.y;
- float x1 = x0 + bounds.size.width;
- float y1 = y0 + bounds.size.height;
+ double currentTime = WTF::currentTime();
+ double time = currentTime + lastCommitTime() - CACurrentMediaTime();
+ ASSERT(time <= currentTime);
- D3DXMATRIXA16 projection;
- D3DXMatrixOrthoOffCenterRH(&projection, x0, x1, y0, y1, -1.0f, 1.0f);
+ HashSet<RefPtr<PlatformCALayer> >::iterator end = m_pendingAnimatedLayers.end();
+ for (HashSet<RefPtr<PlatformCALayer> >::iterator it = m_pendingAnimatedLayers.begin(); it != end; ++it)
+ (*it)->animationStarted(time);
- m_d3dDevice->SetTransform(D3DTS_PROJECTION, &projection);
+ m_pendingAnimatedLayers.clear();
}
-bool CACFLayerTreeHost::resetDevice(ResetReason reason)
+CGRect CACFLayerTreeHost::bounds() const
{
- ASSERT(m_d3dDevice);
- ASSERT(m_context);
-
- HRESULT hr = m_d3dDevice->TestCooperativeLevel();
-
- if (hr == D3DERR_DEVICELOST || hr == D3DERR_DRIVERINTERNALERROR) {
- // The device cannot be reset at this time. Try again soon.
- m_mustResetLostDeviceBeforeRendering = true;
- return false;
- }
-
- m_mustResetLostDeviceBeforeRendering = false;
-
- if (reason == LostDevice && hr == D3D_OK) {
- // The device wasn't lost after all.
- return true;
- }
-
- // We can reset the device.
-
- // We have to release the context's D3D resrouces whenever we reset the IDirect3DDevice9 in order to
- // destroy any D3DPOOL_DEFAULT resources that Core Animation has allocated (e.g., textures used
- // for mask layers). See <http://msdn.microsoft.com/en-us/library/bb174425(v=VS.85).aspx>.
- wkCACFContextReleaseD3DResources(m_context);
-
- D3DPRESENT_PARAMETERS parameters = initialPresentationParameters();
- hr = m_d3dDevice->Reset(&parameters);
-
- // TestCooperativeLevel told us the device may be reset now, so we should
- // not be told here that the device is lost.
- ASSERT(hr != D3DERR_DEVICELOST);
-
- initD3DGeometry();
+ RECT clientRect;
+ GetClientRect(m_window, &clientRect);
- return true;
+ return winRectToCGRect(clientRect);
}
}
diff --git a/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h
index fc61f39..6d91a73 100644
--- a/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h
+++ b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h
@@ -47,75 +47,59 @@ typedef struct CGImage* CGImageRef;
namespace WebCore {
+class CACFLayerTreeHostClient;
class PlatformCALayer;
-class CACFLayerTreeHostClient {
-public:
- virtual ~CACFLayerTreeHostClient() { }
- virtual void flushPendingGraphicsLayerChanges() { }
-};
-
-// FIXME: Currently there is a CACFLayerTreeHost for each WebView and each
-// has its own CARenderOGLContext and Direct3DDevice9, which is inefficient.
-// (https://bugs.webkit.org/show_bug.cgi?id=31855)
class CACFLayerTreeHost : public RefCounted<CACFLayerTreeHost> {
friend PlatformCALayer;
public:
static PassRefPtr<CACFLayerTreeHost> create();
- ~CACFLayerTreeHost();
+ virtual ~CACFLayerTreeHost();
static bool acceleratedCompositingAvailable();
void setClient(CACFLayerTreeHostClient* client) { m_client = client; }
void setRootChildLayer(PlatformCALayer*);
- void layerTreeDidChange();
void setWindow(HWND);
- void paint();
- void resize();
+ virtual void paint();
+ virtual void resize() = 0;
void flushPendingGraphicsLayerChangesSoon();
void flushPendingLayerChangesNow();
protected:
- PlatformCALayer* rootLayer() const;
- void addPendingAnimatedLayer(PassRefPtr<PlatformCALayer>);
-
-private:
CACFLayerTreeHost();
- bool createRenderer();
- void destroyRenderer();
- void renderSoon();
- void renderTimerFired(Timer<CACFLayerTreeHost>*);
-
CGRect bounds() const;
+ PlatformCALayer* rootLayer() const;
+ HWND window() const { return m_window; }
+ void notifyAnimationsStarted();
- void initD3DGeometry();
+ virtual bool createRenderer() = 0;
+ virtual void destroyRenderer();
+ virtual void contextDidChange();
- // Call this when the device window has changed size or when IDirect3DDevice9::Present returns
- // D3DERR_DEVICELOST. Returns true if the device was recovered, false if rendering must be
- // aborted and reattempted soon.
- enum ResetReason { ChangedWindowSize, LostDevice };
- bool resetDevice(ResetReason);
+private:
+ void initialize();
+ void addPendingAnimatedLayer(PassRefPtr<PlatformCALayer>);
+ void layerTreeDidChange();
- void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>());
+ virtual void flushContext() = 0;
+ virtual CFTimeInterval lastCommitTime() const = 0;
+ virtual void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>()) = 0;
+ virtual void initializeContext(void* userData, PlatformCALayer*) = 0;
CACFLayerTreeHostClient* m_client;
- bool m_mightBeAbleToCreateDeviceLater;
- COMPtr<IDirect3DDevice9> m_d3dDevice;
RefPtr<PlatformCALayer> m_rootLayer;
RefPtr<PlatformCALayer> m_rootChildLayer;
- WKCACFContext* m_context;
+ HashSet<RefPtr<PlatformCALayer> > m_pendingAnimatedLayers;
HWND m_window;
- Timer<CACFLayerTreeHost> m_renderTimer;
- bool m_mustResetLostDeviceBeforeRendering;
bool m_shouldFlushPendingGraphicsLayerChanges;
bool m_isFlushingLayerChanges;
- HashSet<RefPtr<PlatformCALayer> > m_pendingAnimatedLayers;
-#ifndef NDEBUG
- bool m_printTree;
+#if !ASSERT_DISABLED
+ enum { WindowNotSet, WindowSet, WindowCleared } m_state;
#endif
};
diff --git a/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHostClient.h b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHostClient.h
new file mode 100644
index 0000000..845f934
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHostClient.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CACFLayerTreeHostClient_h
+#define CACFLayerTreeHostClient_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+namespace WebCore {
+
+class CACFLayerTreeHostClient {
+public:
+ virtual ~CACFLayerTreeHostClient() { }
+ virtual void flushPendingGraphicsLayerChanges() { }
+};
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif // CACFLayerTreeHostClient_h
diff --git a/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp b/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp
new file mode 100644
index 0000000..772244b
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "LegacyCACFLayerTreeHost.h"
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "PlatformCALayer.h"
+#include <WebKitSystemInterface/WebKitSystemInterface.h>
+
+#ifndef NDEBUG
+#define D3D_DEBUG_INFO
+#endif
+
+#include <d3d9.h>
+#include <d3dx9.h>
+
+#pragma comment(lib, "d3d9")
+#pragma comment(lib, "d3dx9")
+
+using namespace std;
+
+namespace WebCore {
+
+static IDirect3D9* s_d3d = 0;
+static IDirect3D9* d3d()
+{
+ if (s_d3d)
+ return s_d3d;
+
+ if (!LoadLibrary(TEXT("d3d9.dll")))
+ return 0;
+
+ s_d3d = Direct3DCreate9(D3D_SDK_VERSION);
+
+ return s_d3d;
+}
+
+static D3DPRESENT_PARAMETERS initialPresentationParameters()
+{
+ D3DPRESENT_PARAMETERS parameters = {0};
+ parameters.Windowed = TRUE;
+ parameters.SwapEffect = D3DSWAPEFFECT_COPY;
+ parameters.BackBufferCount = 1;
+ parameters.BackBufferFormat = D3DFMT_A8R8G8B8;
+ parameters.MultiSampleType = D3DMULTISAMPLE_NONE;
+
+ return parameters;
+}
+
+// FIXME: <rdar://6507851> Share this code with CoreAnimation.
+static bool hardwareCapabilitiesIndicateCoreAnimationSupport(const D3DCAPS9& caps)
+{
+ // CoreAnimation needs two or more texture units.
+ if (caps.MaxTextureBlendStages < 2)
+ return false;
+
+ // CoreAnimation needs non-power-of-two textures.
+ if ((caps.TextureCaps & D3DPTEXTURECAPS_POW2) && !(caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL))
+ return false;
+
+ // CoreAnimation needs vertex shader 2.0 or greater.
+ if (D3DSHADER_VERSION_MAJOR(caps.VertexShaderVersion) < 2)
+ return false;
+
+ // CoreAnimation needs pixel shader 2.0 or greater.
+ if (D3DSHADER_VERSION_MAJOR(caps.PixelShaderVersion) < 2)
+ return false;
+
+ return true;
+}
+
+PassRefPtr<LegacyCACFLayerTreeHost> LegacyCACFLayerTreeHost::create()
+{
+ return adoptRef(new LegacyCACFLayerTreeHost);
+}
+
+LegacyCACFLayerTreeHost::LegacyCACFLayerTreeHost()
+ : m_renderTimer(this, &LegacyCACFLayerTreeHost::renderTimerFired)
+ , m_context(wkCACFContextCreate())
+ , m_mightBeAbleToCreateDeviceLater(true)
+ , m_mustResetLostDeviceBeforeRendering(false)
+{
+#ifndef NDEBUG
+ char* printTreeFlag = getenv("CA_PRINT_TREE");
+ m_printTree = printTreeFlag && atoi(printTreeFlag);
+#endif
+}
+
+LegacyCACFLayerTreeHost::~LegacyCACFLayerTreeHost()
+{
+ wkCACFContextDestroy(m_context);
+}
+
+void LegacyCACFLayerTreeHost::initializeContext(void* userData, PlatformCALayer* layer)
+{
+ wkCACFContextSetUserData(m_context, userData);
+ wkCACFContextSetLayer(m_context, layer->platformLayer());
+}
+
+bool LegacyCACFLayerTreeHost::createRenderer()
+{
+ if (m_d3dDevice || !m_mightBeAbleToCreateDeviceLater)
+ return m_d3dDevice;
+
+ m_mightBeAbleToCreateDeviceLater = false;
+ D3DPRESENT_PARAMETERS parameters = initialPresentationParameters();
+
+ if (!d3d() || !::IsWindow(window()))
+ return false;
+
+ // D3D doesn't like to make back buffers for 0 size windows. We skirt this problem if we make the
+ // passed backbuffer width and height non-zero. The window will necessarily get set to a non-zero
+ // size eventually, and then the backbuffer size will get reset.
+ RECT rect;
+ GetClientRect(window(), &rect);
+
+ if (rect.left-rect.right == 0 || rect.bottom-rect.top == 0) {
+ parameters.BackBufferWidth = 1;
+ parameters.BackBufferHeight = 1;
+ }
+
+ D3DCAPS9 d3dCaps;
+ if (FAILED(d3d()->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps)))
+ return false;
+
+ DWORD behaviorFlags = D3DCREATE_FPU_PRESERVE;
+ if ((d3dCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) && d3dCaps.VertexProcessingCaps)
+ behaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+ else
+ behaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+
+ COMPtr<IDirect3DDevice9> device;
+ if (FAILED(d3d()->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window(), behaviorFlags, &parameters, &device))) {
+ // In certain situations (e.g., shortly after waking from sleep), Direct3DCreate9() will
+ // return an IDirect3D9 for which IDirect3D9::CreateDevice will always fail. In case we
+ // have one of these bad IDirect3D9s, get rid of it so we'll fetch a new one the next time
+ // we want to call CreateDevice.
+ s_d3d->Release();
+ s_d3d = 0;
+
+ // Even if we don't have a bad IDirect3D9, in certain situations (e.g., shortly after
+ // waking from sleep), CreateDevice will fail, but will later succeed if called again.
+ m_mightBeAbleToCreateDeviceLater = true;
+
+ return false;
+ }
+
+ // Now that we've created the IDirect3DDevice9 based on the capabilities we
+ // got from the IDirect3D9 global object, we requery the device for its
+ // actual capabilities. The capabilities returned by the device can
+ // sometimes be more complete, for example when using software vertex
+ // processing.
+ D3DCAPS9 deviceCaps;
+ if (FAILED(device->GetDeviceCaps(&deviceCaps)))
+ return false;
+
+ if (!hardwareCapabilitiesIndicateCoreAnimationSupport(deviceCaps))
+ return false;
+
+ m_d3dDevice = device;
+
+ initD3DGeometry();
+
+ wkCACFContextSetD3DDevice(m_context, m_d3dDevice.get());
+
+ if (IsWindow(window())) {
+ rootLayer()->setBounds(bounds());
+ flushContext();
+ }
+
+ return true;
+}
+
+void LegacyCACFLayerTreeHost::destroyRenderer()
+{
+ wkCACFContextSetLayer(m_context, 0);
+
+ wkCACFContextSetD3DDevice(m_context, 0);
+ m_d3dDevice = 0;
+ if (s_d3d)
+ s_d3d->Release();
+
+ s_d3d = 0;
+ m_mightBeAbleToCreateDeviceLater = true;
+
+ CACFLayerTreeHost::destroyRenderer();
+}
+
+void LegacyCACFLayerTreeHost::resize()
+{
+ if (!m_d3dDevice)
+ return;
+
+ // Resetting the device might fail here. But that's OK, because if it does it we will attempt to
+ // reset the device the next time we try to render.
+ resetDevice(ChangedWindowSize);
+
+ if (rootLayer()) {
+ rootLayer()->setBounds(bounds());
+ flushContext();
+ }
+}
+
+void LegacyCACFLayerTreeHost::renderTimerFired(Timer<LegacyCACFLayerTreeHost>*)
+{
+ paint();
+}
+
+void LegacyCACFLayerTreeHost::paint()
+{
+ createRenderer();
+ if (!m_d3dDevice) {
+ if (m_mightBeAbleToCreateDeviceLater)
+ renderSoon();
+ return;
+ }
+
+ CACFLayerTreeHost::paint();
+}
+
+void LegacyCACFLayerTreeHost::render(const Vector<CGRect>& windowDirtyRects)
+{
+ ASSERT(m_d3dDevice);
+
+ if (m_mustResetLostDeviceBeforeRendering && !resetDevice(LostDevice)) {
+ // We can't reset the device right now. Try again soon.
+ renderSoon();
+ return;
+ }
+
+ CGRect bounds = this->bounds();
+
+ // Give the renderer some space to use. This needs to be valid until the
+ // wkCACFContextFinishUpdate() call below.
+ char space[4096];
+ if (!wkCACFContextBeginUpdate(m_context, space, sizeof(space), CACurrentMediaTime(), bounds, windowDirtyRects.data(), windowDirtyRects.size()))
+ return;
+
+ HRESULT err = S_OK;
+ CFTimeInterval timeToNextRender = numeric_limits<CFTimeInterval>::infinity();
+
+ do {
+ // FIXME: don't need to clear dirty region if layer tree is opaque.
+
+ WKCACFUpdateRectEnumerator* e = wkCACFContextCopyUpdateRectEnumerator(m_context);
+ if (!e)
+ break;
+
+ Vector<D3DRECT, 64> rects;
+ for (const CGRect* r = wkCACFUpdateRectEnumeratorNextRect(e); r; r = wkCACFUpdateRectEnumeratorNextRect(e)) {
+ D3DRECT rect;
+ rect.x1 = r->origin.x;
+ rect.x2 = rect.x1 + r->size.width;
+ rect.y1 = bounds.origin.y + bounds.size.height - (r->origin.y + r->size.height);
+ rect.y2 = rect.y1 + r->size.height;
+
+ rects.append(rect);
+ }
+ wkCACFUpdateRectEnumeratorRelease(e);
+
+ timeToNextRender = wkCACFContextGetNextUpdateTime(m_context);
+
+ if (rects.isEmpty())
+ break;
+
+ m_d3dDevice->Clear(rects.size(), rects.data(), D3DCLEAR_TARGET, 0, 1.0f, 0);
+
+ m_d3dDevice->BeginScene();
+ wkCACFContextRenderUpdate(m_context);
+ m_d3dDevice->EndScene();
+
+ err = m_d3dDevice->Present(0, 0, 0, 0);
+
+ if (err == D3DERR_DEVICELOST) {
+ wkCACFContextAddUpdateRect(m_context, bounds);
+ if (!resetDevice(LostDevice)) {
+ // We can't reset the device right now. Try again soon.
+ renderSoon();
+ return;
+ }
+ }
+ } while (err == D3DERR_DEVICELOST);
+
+ wkCACFContextFinishUpdate(m_context);
+
+#ifndef NDEBUG
+ if (m_printTree)
+ rootLayer()->printTree();
+#endif
+
+ // If timeToNextRender is not infinity, it means animations are running, so queue up to render again
+ if (timeToNextRender != numeric_limits<CFTimeInterval>::infinity())
+ renderSoon();
+}
+
+void LegacyCACFLayerTreeHost::renderSoon()
+{
+ if (!m_renderTimer.isActive())
+ m_renderTimer.startOneShot(0);
+}
+
+void LegacyCACFLayerTreeHost::flushContext()
+{
+ wkCACFContextFlush(m_context);
+ contextDidChange();
+}
+
+void LegacyCACFLayerTreeHost::contextDidChange()
+{
+ renderSoon();
+ CACFLayerTreeHost::contextDidChange();
+}
+
+CFTimeInterval LegacyCACFLayerTreeHost::lastCommitTime() const
+{
+ return wkCACFContextGetLastCommitTime(m_context);
+}
+
+void LegacyCACFLayerTreeHost::initD3DGeometry()
+{
+ ASSERT(m_d3dDevice);
+
+ CGRect bounds = this->bounds();
+
+ float x0 = bounds.origin.x;
+ float y0 = bounds.origin.y;
+ float x1 = x0 + bounds.size.width;
+ float y1 = y0 + bounds.size.height;
+
+ D3DXMATRIXA16 projection;
+ D3DXMatrixOrthoOffCenterRH(&projection, x0, x1, y0, y1, -1.0f, 1.0f);
+
+ m_d3dDevice->SetTransform(D3DTS_PROJECTION, &projection);
+}
+
+bool LegacyCACFLayerTreeHost::resetDevice(ResetReason reason)
+{
+ ASSERT(m_d3dDevice);
+ ASSERT(m_context);
+
+ HRESULT hr = m_d3dDevice->TestCooperativeLevel();
+
+ if (hr == D3DERR_DEVICELOST || hr == D3DERR_DRIVERINTERNALERROR) {
+ // The device cannot be reset at this time. Try again soon.
+ m_mustResetLostDeviceBeforeRendering = true;
+ return false;
+ }
+
+ m_mustResetLostDeviceBeforeRendering = false;
+
+ if (reason == LostDevice && hr == D3D_OK) {
+ // The device wasn't lost after all.
+ return true;
+ }
+
+ // We can reset the device.
+
+ // We have to release the context's D3D resrouces whenever we reset the IDirect3DDevice9 in order to
+ // destroy any D3DPOOL_DEFAULT resources that Core Animation has allocated (e.g., textures used
+ // for mask layers). See <http://msdn.microsoft.com/en-us/library/bb174425(v=VS.85).aspx>.
+ wkCACFContextReleaseD3DResources(m_context);
+
+ D3DPRESENT_PARAMETERS parameters = initialPresentationParameters();
+ hr = m_d3dDevice->Reset(&parameters);
+
+ // TestCooperativeLevel told us the device may be reset now, so we should
+ // not be told here that the device is lost.
+ ASSERT(hr != D3DERR_DEVICELOST);
+
+ initD3DGeometry();
+
+ return true;
+}
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h b/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h
new file mode 100644
index 0000000..bfa530b
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LegacyCACFLayerTreeHost_h
+#define LegacyCACFLayerTreeHost_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "CACFLayerTreeHost.h"
+
+namespace WebCore {
+
+// FIXME: Currently there is a LegacyCACFLayerTreeHost for each WebView and each
+// has its own WKCACFContext and Direct3DDevice9, which is inefficient.
+// (https://bugs.webkit.org/show_bug.cgi?id=31855)
+class LegacyCACFLayerTreeHost : public CACFLayerTreeHost {
+public:
+ static PassRefPtr<LegacyCACFLayerTreeHost> create();
+ virtual ~LegacyCACFLayerTreeHost();
+
+private:
+ LegacyCACFLayerTreeHost();
+
+ void initD3DGeometry();
+
+ // Call this when the device window has changed size or when IDirect3DDevice9::Present returns
+ // D3DERR_DEVICELOST. Returns true if the device was recovered, false if rendering must be
+ // aborted and reattempted soon.
+ enum ResetReason { ChangedWindowSize, LostDevice };
+ bool resetDevice(ResetReason);
+
+ void renderSoon();
+ void renderTimerFired(Timer<LegacyCACFLayerTreeHost>*);
+
+ virtual void initializeContext(void* userData, PlatformCALayer*);
+ virtual void resize();
+ virtual bool createRenderer();
+ virtual void destroyRenderer();
+ virtual CFTimeInterval lastCommitTime() const;
+ virtual void flushContext();
+ virtual void contextDidChange();
+ virtual void paint();
+ virtual void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>());
+
+ Timer<LegacyCACFLayerTreeHost> m_renderTimer;
+ COMPtr<IDirect3DDevice9> m_d3dDevice;
+ WKCACFContext* m_context;
+ bool m_mightBeAbleToCreateDeviceLater;
+ bool m_mustResetLostDeviceBeforeRendering;
+
+#ifndef NDEBUG
+ bool m_printTree;
+#endif
+};
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif // LegacyCACFLayerTreeHost_h
diff --git a/Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp b/Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp
index 228bb01..6e3011b 100644
--- a/Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp
+++ b/Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp
@@ -145,11 +145,6 @@ PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(PlatformAnimationRef
return adoptRef(new PlatformCAAnimation(animation));
}
-PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(const PlatformCAAnimation* animation)
-{
- return adoptRef(new PlatformCAAnimation(animation));
-}
-
PlatformCAAnimation::PlatformCAAnimation(AnimationType type, const String& keyPath)
: m_type(type)
{
@@ -176,33 +171,33 @@ PlatformCAAnimation::PlatformCAAnimation(PlatformAnimationRef animation)
m_animation = animation;
}
-PlatformCAAnimation::PlatformCAAnimation(const PlatformCAAnimation* animation)
+PassRefPtr<PlatformCAAnimation> PlatformCAAnimation::copy() const
{
- m_animation.adoptCF(CACFAnimationCreate((animation->animationType() == Basic) ? kCACFBasicAnimation : kCACFKeyframeAnimation));
- RetainPtr<CFStringRef> keyPath(AdoptCF, animation->keyPath().createCFString());
- CACFAnimationSetKeyPath(m_animation.get(), keyPath.get());
-
- setBeginTime(animation->beginTime());
- setDuration(animation->duration());
- setSpeed(animation->speed());
- setTimeOffset(animation->timeOffset());
- setRepeatCount(animation->repeatCount());
- setAutoreverses(animation->autoreverses());
- setFillMode(animation->fillMode());
- setRemovedOnCompletion(animation->isRemovedOnCompletion());
- setAdditive(animation->isAdditive());
- copyTimingFunctionFrom(animation);
- setValueFunction(animation->valueFunction());
-
+ RefPtr<PlatformCAAnimation> animation = create(animationType(), keyPath());
+
+ animation->setBeginTime(beginTime());
+ animation->setDuration(duration());
+ animation->setSpeed(speed());
+ animation->setTimeOffset(timeOffset());
+ animation->setRepeatCount(repeatCount());
+ animation->setAutoreverses(autoreverses());
+ animation->setFillMode(fillMode());
+ animation->setRemovedOnCompletion(isRemovedOnCompletion());
+ animation->setAdditive(isAdditive());
+ animation->copyTimingFunctionFrom(this);
+ animation->setValueFunction(valueFunction());
+
// Copy the specific Basic or Keyframe values
- if (animation->animationType() == Keyframe) {
- copyValuesFrom(animation);
- copyKeyTimesFrom(animation);
- copyTimingFunctionsFrom(animation);
+ if (animationType() == Keyframe) {
+ animation->copyValuesFrom(this);
+ animation->copyKeyTimesFrom(this);
+ animation->copyTimingFunctionsFrom(this);
} else {
- copyFromValueFrom(animation);
- copyToValueFrom(animation);
+ animation->copyFromValueFrom(this);
+ animation->copyToValueFrom(this);
}
+
+ return animation;
}
PlatformCAAnimation::~PlatformCAAnimation()
diff --git a/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp b/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp
new file mode 100644
index 0000000..e672c2d
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WKCACFViewLayerTreeHost.h"
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "PlatformCALayer.h"
+#include "SoftLinking.h"
+#include <wtf/CurrentTime.h>
+
+typedef struct _CACFLayer* CACFLayerRef;
+
+namespace WebCore {
+
+#ifdef DEBUG_ALL
+SOFT_LINK_DEBUG_LIBRARY(WebKitQuartzCoreAdditions)
+#else
+SOFT_LINK_LIBRARY(WebKitQuartzCoreAdditions)
+#endif
+
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewCreate, WKCACFViewRef, __cdecl, (), ())
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewSetLayer, void, __cdecl, (WKCACFViewRef view, CACFLayerRef layer), (view, layer))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewUpdate, void, __cdecl, (WKCACFViewRef view, HWND window, const CGRect* bounds), (view, window, bounds))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewCanDraw, bool, __cdecl, (WKCACFViewRef view), (view))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewDraw, void, __cdecl, (WKCACFViewRef view), (view))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewFlushContext, void, __cdecl, (WKCACFViewRef view), (view))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewInvalidateRects, void, __cdecl, (WKCACFViewRef view, const CGRect rects[], size_t count), (view, rects, count))
+typedef void (*WKCACFViewContextDidChangeCallback)(WKCACFViewRef view, void* info);
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewSetContextDidChangeCallback, void, __cdecl, (WKCACFViewRef view, WKCACFViewContextDidChangeCallback callback, void* info), (view, callback, info))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewGetLastCommitTime, CFTimeInterval, __cdecl, (WKCACFViewRef view), (view))
+SOFT_LINK(WebKitQuartzCoreAdditions, WKCACFViewSetContextUserData, void, __cdecl, (WKCACFViewRef view, void* userData), (view, userData))
+
+PassRefPtr<WKCACFViewLayerTreeHost> WKCACFViewLayerTreeHost::create()
+{
+ if (!WebKitQuartzCoreAdditionsLibrary())
+ return 0;
+
+ return adoptRef(new WKCACFViewLayerTreeHost);
+}
+
+WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost()
+ : m_view(AdoptCF, WKCACFViewCreate())
+ , m_viewNeedsUpdate(true)
+{
+}
+
+void WKCACFViewLayerTreeHost::updateViewIfNeeded()
+{
+ if (!m_viewNeedsUpdate)
+ return;
+ m_viewNeedsUpdate = false;
+
+ CGRect layerBounds = rootLayer()->bounds();
+
+ CGRect bounds = this->bounds();
+ WKCACFViewUpdate(m_view.get(), window(), &bounds);
+
+ if (CGRectEqualToRect(layerBounds, rootLayer()->bounds()))
+ return;
+
+ // Flush the context so the layer's rendered bounds will match our bounds.
+ flushContext();
+}
+
+void WKCACFViewLayerTreeHost::contextDidChangeCallback(WKCACFViewRef view, void* info)
+{
+ ASSERT_ARG(view, view);
+ ASSERT_ARG(info, info);
+
+ WKCACFViewLayerTreeHost* host = static_cast<WKCACFViewLayerTreeHost*>(info);
+ ASSERT_ARG(view, view == host->m_view);
+ host->contextDidChange();
+}
+
+void WKCACFViewLayerTreeHost::contextDidChange()
+{
+ // Tell the WKCACFView to start rendering now that we have some contents to render.
+ updateViewIfNeeded();
+
+ CACFLayerTreeHost::contextDidChange();
+}
+
+void WKCACFViewLayerTreeHost::initializeContext(void* userData, PlatformCALayer* layer)
+{
+ WKCACFViewSetContextUserData(m_view.get(), userData);
+ WKCACFViewSetLayer(m_view.get(), layer->platformLayer());
+ WKCACFViewSetContextDidChangeCallback(m_view.get(), contextDidChangeCallback, this);
+}
+
+void WKCACFViewLayerTreeHost::resize()
+{
+ m_viewNeedsUpdate = true;
+}
+
+bool WKCACFViewLayerTreeHost::createRenderer()
+{
+ updateViewIfNeeded();
+ return WKCACFViewCanDraw(m_view.get());
+}
+
+void WKCACFViewLayerTreeHost::destroyRenderer()
+{
+ m_viewNeedsUpdate = true;
+ WKCACFViewUpdate(m_view.get(), 0, 0);
+ WKCACFViewSetContextUserData(m_view.get(), 0);
+ WKCACFViewSetLayer(m_view.get(), 0);
+ WKCACFViewSetContextDidChangeCallback(m_view.get(), 0, 0);
+
+ CACFLayerTreeHost::destroyRenderer();
+}
+
+CFTimeInterval WKCACFViewLayerTreeHost::lastCommitTime() const
+{
+ return WKCACFViewGetLastCommitTime(m_view.get());
+}
+
+void WKCACFViewLayerTreeHost::flushContext()
+{
+ WKCACFViewFlushContext(m_view.get());
+}
+
+void WKCACFViewLayerTreeHost::paint()
+{
+ updateViewIfNeeded();
+ CACFLayerTreeHost::paint();
+}
+
+void WKCACFViewLayerTreeHost::render(const Vector<CGRect>& dirtyRects)
+{
+ WKCACFViewInvalidateRects(m_view.get(), dirtyRects.data(), dirtyRects.size());
+ WKCACFViewDraw(m_view.get());
+}
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.h b/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.h
new file mode 100644
index 0000000..af09f76
--- /dev/null
+++ b/Source/WebCore/platform/graphics/ca/win/WKCACFViewLayerTreeHost.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKCACFViewLayerTreeHost_h
+#define WKCACFViewLayerTreeHost_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "CACFLayerTreeHost.h"
+
+typedef struct _WKCACFView* WKCACFViewRef;
+
+namespace WebCore {
+
+class WKCACFViewLayerTreeHost : public CACFLayerTreeHost {
+public:
+ static PassRefPtr<WKCACFViewLayerTreeHost> create();
+
+private:
+ WKCACFViewLayerTreeHost();
+
+ void updateViewIfNeeded();
+ static void contextDidChangeCallback(WKCACFViewRef, void* info);
+
+ virtual void initializeContext(void* userData, PlatformCALayer*);
+ virtual void resize();
+ virtual bool createRenderer();
+ virtual void destroyRenderer();
+ virtual void flushContext();
+ virtual void contextDidChange();
+ virtual void paint();
+ virtual void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>());
+ virtual CFTimeInterval lastCommitTime() const;
+
+ RetainPtr<WKCACFViewRef> m_view;
+ bool m_viewNeedsUpdate;
+};
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif // WKCACFViewLayerTreeHost_h
diff --git a/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp b/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
index 013a4af..ee159a1 100644
--- a/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
+++ b/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
@@ -106,7 +106,11 @@ cairo_operator_t toCairoOperator(CompositeOperator op)
case CompositeXOR:
return CAIRO_OPERATOR_XOR;
case CompositePlusDarker:
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
+ return CAIRO_OPERATOR_DARKEN;
+#else
return CAIRO_OPERATOR_SATURATE;
+#endif
case CompositeHighlight:
// There is no Cairo equivalent for CompositeHighlight.
return CAIRO_OPERATOR_OVER;
diff --git a/Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h
index 50ea00f..5807102 100644
--- a/Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h
@@ -24,6 +24,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -40,7 +41,7 @@ struct FontCustomPlatformData {
public:
FontCustomPlatformData(FT_Face, SharedBuffer*);
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
private:
diff --git a/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp b/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
index 51b5ee6..f7d6040 100644
--- a/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
+++ b/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
@@ -173,7 +173,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& d
destx = -originx;
originx = 0;
}
- int endx = rect.right();
+ int endx = rect.maxX();
if (endx > size.width())
endx = size.width();
int numColumns = endx - originx;
@@ -184,7 +184,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& d
desty = -originy;
originy = 0;
}
- int endy = rect.bottom();
+ int endy = rect.maxY();
if (endy > size.height())
endy = size.height();
int numRows = endy - originy;
@@ -239,9 +239,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(destx >= 0);
ASSERT(destx < size.width());
ASSERT(originx >= 0);
- ASSERT(originx <= sourceRect.right());
+ ASSERT(originx <= sourceRect.maxX());
- int endx = destPoint.x() + sourceRect.right();
+ int endx = destPoint.x() + sourceRect.maxX();
ASSERT(endx <= size.width());
int numColumns = endx - destx;
@@ -251,9 +251,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(desty >= 0);
ASSERT(desty < size.height());
ASSERT(originy >= 0);
- ASSERT(originy <= sourceRect.bottom());
+ ASSERT(originy <= sourceRect.maxY());
- int endy = destPoint.y() + sourceRect.bottom();
+ int endy = destPoint.y() + sourceRect.maxY();
ASSERT(endy <= size.height());
int numRows = endy - desty;
diff --git a/Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp b/Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
index c19bd72..187d296 100644
--- a/Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
+++ b/Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
@@ -26,7 +26,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
#include "GraphicsContextCG.h"
@@ -105,7 +105,7 @@ bool GraphicsContext3D::getImageData(Image* image,
decoder.setData(image->data(), true);
if (!decoder.frameCount())
return false;
- decodedImage = decoder.createFrameAtIndex(0);
+ decodedImage.adoptCF(decoder.createFrameAtIndex(0));
cgImage = decodedImage.get();
} else
cgImage = image->nativeImageForCurrentFrame();
@@ -116,6 +116,34 @@ bool GraphicsContext3D::getImageData(Image* image,
size_t height = CGImageGetHeight(cgImage);
if (!width || !height)
return false;
+
+ // See whether the image is using an indexed color space, and if
+ // so, re-render it into an RGB color space. The image re-packing
+ // code requires color data, not color table indices, for the
+ // image data.
+ CGColorSpaceRef colorSpace = CGImageGetColorSpace(cgImage);
+ CGColorSpaceModel model = CGColorSpaceGetModel(colorSpace);
+ if (model == kCGColorSpaceModelIndexed) {
+ RetainPtr<CGContextRef> bitmapContext;
+ // FIXME: we should probably manually convert the image by indexing into
+ // the color table, which would allow us to avoid premultiplying the
+ // alpha channel. Creation of a bitmap context with an alpha channel
+ // doesn't seem to work unless it's premultiplied.
+ bitmapContext.adoptCF(CGBitmapContextCreate(0, width, height, 8, width * 4,
+ deviceRGBColorSpaceRef(),
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
+ if (!bitmapContext)
+ return false;
+
+ CGContextSetBlendMode(bitmapContext.get(), kCGBlendModeCopy);
+ CGContextSetInterpolationQuality(bitmapContext.get(), kCGInterpolationNone);
+ CGContextDrawImage(bitmapContext.get(), CGRectMake(0, 0, width, height), cgImage);
+
+ // Now discard the original CG image and replace it with a copy from the bitmap context.
+ decodedImage.adoptCF(CGBitmapContextCreateImage(bitmapContext.get()));
+ cgImage = decodedImage.get();
+ }
+
size_t bitsPerComponent = CGImageGetBitsPerComponent(cgImage);
size_t bitsPerPixel = CGImageGetBitsPerPixel(cgImage);
if (bitsPerComponent != 8 && bitsPerComponent != 16)
@@ -168,10 +196,11 @@ bool GraphicsContext3D::getImageData(Image* image,
AlphaFormat alphaFormat = AlphaFormatNone;
switch (CGImageGetAlphaInfo(cgImage)) {
case kCGImageAlphaPremultipliedFirst:
- // This path is only accessible for MacOS earlier than 10.6.4.
// This is a special case for texImage2D with HTMLCanvasElement input,
- // in which case image->data() should be null.
- ASSERT(!image->data());
+ // in which case image->data() should be null, or indexed color models,
+ // where we need premultiplied alpha to create the bitmap context
+ // successfully.
+ ASSERT(!image->data() || model == kCGColorSpaceModelIndexed);
if (!premultiplyAlpha)
neededAlphaOp = AlphaDoUnmultiply;
alphaFormat = AlphaFormatFirst;
@@ -254,4 +283,4 @@ void GraphicsContext3D::paintToCanvas(const unsigned char* imagePixels, int imag
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
index bcfc37b..3591479 100644
--- a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
+++ b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
@@ -35,6 +35,7 @@
#include "KURL.h"
#include "Path.h"
#include "Pattern.h"
+#include "ShadowBlur.h"
#include <CoreGraphics/CoreGraphics.h>
#include <wtf/MathExtras.h>
@@ -165,9 +166,9 @@ void GraphicsContext::drawRect(const IntRect& rect)
setCGFillColor(context, strokeColor(), strokeColorSpace());
CGRect rects[4] = {
FloatRect(rect.x(), rect.y(), rect.width(), 1),
- FloatRect(rect.x(), rect.bottom() - 1, rect.width(), 1),
+ FloatRect(rect.x(), rect.maxY() - 1, rect.width(), 1),
FloatRect(rect.x(), rect.y() + 1, 1, rect.height() - 2),
- FloatRect(rect.right() - 1, rect.y() + 1, 1, rect.height() - 2)
+ FloatRect(rect.maxX() - 1, rect.y() + 1, 1, rect.height() - 2)
};
CGContextFillRects(context, rects, 4);
if (oldFillColor != strokeColor())
@@ -563,7 +564,7 @@ void GraphicsContext::fillPath(const Path& path)
CGContextClip(layerContext);
m_state.fillGradient->paint(layerContext);
- CGContextDrawLayerAtPoint(context, CGPointMake(rect.left(), rect.top()), layer);
+ CGContextDrawLayerAtPoint(context, CGPointMake(rect.x(), rect.y()), layer);
CGLayerRelease(layer);
} else {
CGContextBeginPath(context);
@@ -616,6 +617,16 @@ void GraphicsContext::strokePath(const Path& path)
CGContextStrokePath(context);
}
+static float radiusToLegacyRadius(float radius)
+{
+ return radius > 8 ? 8 + 4 * sqrt((radius - 8) / 2) : radius;
+}
+
+static bool hasBlurredShadow(const GraphicsContextState& state)
+{
+ return state.shadowColor.isValid() && state.shadowColor.alpha() && state.shadowBlur;
+}
+
void GraphicsContext::fillRect(const FloatRect& rect)
{
if (paintingDisabled())
@@ -626,11 +637,16 @@ void GraphicsContext::fillRect(const FloatRect& rect)
if (m_state.fillGradient) {
CGContextSaveGState(context);
if (hasShadow()) {
- CGContextConcatCTM(context, m_state.fillGradient->gradientSpaceTransform());
CGLayerRef layer = CGLayerCreateWithContext(context, CGSizeMake(rect.width(), rect.height()), 0);
CGContextRef layerContext = CGLayerGetContext(layer);
+
+ CGContextTranslateCTM(layerContext, -rect.x(), -rect.y());
+ CGContextAddRect(layerContext, rect);
+ CGContextClip(layerContext);
+
+ CGContextConcatCTM(layerContext, m_state.fillGradient->gradientSpaceTransform());
m_state.fillGradient->paint(layerContext);
- CGContextDrawLayerAtPoint(context, CGPointMake(rect.left(), rect.top()), layer);
+ CGContextDrawLayerAtPoint(context, CGPointMake(rect.x(), rect.y()), layer);
CGLayerRelease(layer);
} else {
CGContextClipToRect(context, rect);
@@ -643,7 +659,22 @@ void GraphicsContext::fillRect(const FloatRect& rect)
if (m_state.fillPattern)
applyFillPattern();
+
+ bool drawOwnShadow = hasBlurredShadow(m_state) && !m_state.shadowsIgnoreTransforms; // Don't use ShadowBlur for canvas yet.
+ if (drawOwnShadow) {
+ float shadowBlur = m_state.shadowsUseLegacyRadius ? radiusToLegacyRadius(m_state.shadowBlur) : m_state.shadowBlur;
+ // Turn off CG shadows.
+ CGContextSaveGState(context);
+ CGContextSetShadowWithColor(platformContext(), CGSizeZero, 0, 0);
+
+ ShadowBlur contextShadow(shadowBlur, m_state.shadowOffset, m_state.shadowColor, m_state.shadowColorSpace);
+ contextShadow.drawRectShadow(this, rect, RoundedIntRect::Radii());
+ }
+
CGContextFillRect(context, rect);
+
+ if (drawOwnShadow)
+ CGContextRestoreGState(context);
}
void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace)
@@ -658,7 +689,21 @@ void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorS
if (oldFillColor != color || oldColorSpace != colorSpace)
setCGFillColor(context, color, colorSpace);
+ bool drawOwnShadow = hasBlurredShadow(m_state) && !m_state.shadowsIgnoreTransforms; // Don't use ShadowBlur for canvas yet.
+ if (drawOwnShadow) {
+ float shadowBlur = m_state.shadowsUseLegacyRadius ? radiusToLegacyRadius(m_state.shadowBlur) : m_state.shadowBlur;
+ // Turn off CG shadows.
+ CGContextSaveGState(context);
+ CGContextSetShadowWithColor(platformContext(), CGSizeZero, 0, 0);
+
+ ShadowBlur contextShadow(shadowBlur, m_state.shadowOffset, m_state.shadowColor, m_state.shadowColorSpace);
+ contextShadow.drawRectShadow(this, rect, RoundedIntRect::Radii());
+ }
+
CGContextFillRect(context, rect);
+
+ if (drawOwnShadow)
+ CGContextRestoreGState(context);
if (oldFillColor != color || oldColorSpace != colorSpace)
setCGFillColor(context, oldFillColor, oldColorSpace);
@@ -678,12 +723,72 @@ void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLef
Path path;
path.addRoundedRect(rect, topLeft, topRight, bottomLeft, bottomRight);
+
+ bool drawOwnShadow = hasBlurredShadow(m_state) && !m_state.shadowsIgnoreTransforms; // Don't use ShadowBlur for canvas yet.
+ if (drawOwnShadow) {
+ float shadowBlur = m_state.shadowsUseLegacyRadius ? radiusToLegacyRadius(m_state.shadowBlur) : m_state.shadowBlur;
+
+ // Turn off CG shadows.
+ CGContextSaveGState(context);
+ CGContextSetShadowWithColor(platformContext(), CGSizeZero, 0, 0);
+
+ ShadowBlur contextShadow(shadowBlur, m_state.shadowOffset, m_state.shadowColor, m_state.shadowColorSpace);
+ contextShadow.drawRectShadow(this, rect, RoundedIntRect::Radii(topLeft, topRight, bottomLeft, bottomRight));
+ }
+
fillPath(path);
+ if (drawOwnShadow)
+ CGContextRestoreGState(context);
+
if (oldFillColor != color || oldColorSpace != colorSpace)
setCGFillColor(context, oldFillColor, oldColorSpace);
}
+void GraphicsContext::fillRectWithRoundedHole(const IntRect& rect, const RoundedIntRect& roundedHoleRect, const Color& color, ColorSpace colorSpace)
+{
+ if (paintingDisabled())
+ return;
+
+ CGContextRef context = platformContext();
+
+ Path path;
+ path.addRect(rect);
+
+ if (!roundedHoleRect.radii().isZero())
+ path.addRoundedRect(roundedHoleRect.rect(), roundedHoleRect.radii().topLeft(), roundedHoleRect.radii().topRight(), roundedHoleRect.radii().bottomLeft(), roundedHoleRect.radii().bottomRight());
+ else
+ path.addRect(roundedHoleRect.rect());
+
+ WindRule oldFillRule = fillRule();
+ Color oldFillColor = fillColor();
+ ColorSpace oldFillColorSpace = fillColorSpace();
+
+ setFillRule(RULE_EVENODD);
+ setFillColor(color, colorSpace);
+
+ // fillRectWithRoundedHole() assumes that the edges of rect are clipped out, so we only care about shadows cast around inside the hole.
+ bool drawOwnShadow = hasBlurredShadow(m_state) && !m_state.shadowsIgnoreTransforms;
+ if (drawOwnShadow) {
+ float shadowBlur = m_state.shadowsUseLegacyRadius ? radiusToLegacyRadius(m_state.shadowBlur) : m_state.shadowBlur;
+
+ // Turn off CG shadows.
+ CGContextSaveGState(context);
+ CGContextSetShadowWithColor(platformContext(), CGSizeZero, 0, 0);
+
+ ShadowBlur contextShadow(shadowBlur, m_state.shadowOffset, m_state.shadowColor, m_state.shadowColorSpace);
+ contextShadow.drawInsetShadow(this, rect, roundedHoleRect.rect(), roundedHoleRect.radii());
+ }
+
+ fillPath(path);
+
+ if (drawOwnShadow)
+ CGContextRestoreGState(context);
+
+ setFillRule(oldFillRule);
+ setFillColor(oldFillColor, oldFillColorSpace);
+}
+
void GraphicsContext::clip(const FloatRect& rect)
{
if (paintingDisabled())
@@ -722,6 +827,11 @@ void GraphicsContext::clipPath(const Path& path, WindRule clipRule)
CGContextClip(context);
}
+IntRect GraphicsContext::clipBounds() const
+{
+ return enclosingIntRect(CGContextGetClipBoundingBox(platformContext()));
+}
+
void GraphicsContext::addInnerRoundedRectClip(const IntRect& rect, int thickness)
{
if (paintingDisabled())
@@ -766,6 +876,9 @@ void GraphicsContext::setPlatformShadow(const FloatSize& offset, float blur, con
{
if (paintingDisabled())
return;
+
+ // FIXME: we could avoid the shadow setup cost when we know we'll render the shadow ourselves.
+
CGFloat xOffset = offset.width();
CGFloat yOffset = offset.height();
CGFloat blurRadius = blur;
diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp b/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp
index 295f632..ab5907e 100644
--- a/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp
+++ b/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp
@@ -267,7 +267,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
RefPtr<ByteArray> result = ByteArray::create(rect.width() * rect.height() * 4);
unsigned char* data = result->data();
- if (rect.x() < 0 || rect.y() < 0 || rect.right() > size.width() || rect.bottom() > size.height())
+ if (rect.x() < 0 || rect.y() < 0 || rect.maxX() > size.width() || rect.maxY() > size.height())
memset(data, 0, result->length());
int originx = rect.x();
@@ -276,7 +276,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
destx = -originx;
originx = 0;
}
- int endx = rect.right();
+ int endx = rect.maxX();
if (endx > size.width())
endx = size.width();
int numColumns = endx - originx;
@@ -287,7 +287,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
desty = -originy;
originy = 0;
}
- int endy = rect.bottom();
+ int endy = rect.maxY();
if (endy > size.height())
endy = size.height();
int numRows = endy - originy;
@@ -377,9 +377,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(destx >= 0);
ASSERT(destx < size.width());
ASSERT(originx >= 0);
- ASSERT(originx <= sourceRect.right());
+ ASSERT(originx <= sourceRect.maxX());
- int endx = destPoint.x() + sourceRect.right();
+ int endx = destPoint.x() + sourceRect.maxX();
ASSERT(endx <= size.width());
int numColumns = endx - destx;
@@ -389,9 +389,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(desty >= 0);
ASSERT(desty < size.height());
ASSERT(originy >= 0);
- ASSERT(originy <= sourceRect.bottom());
+ ASSERT(originy <= sourceRect.maxY());
- int endy = destPoint.y() + sourceRect.bottom();
+ int endy = destPoint.y() + sourceRect.maxY();
ASSERT(endy <= size.height());
int numRows = endy - desty;
diff --git a/Source/WebCore/platform/graphics/cg/ImageCG.cpp b/Source/WebCore/platform/graphics/cg/ImageCG.cpp
index dfee96a..08f65bd 100644
--- a/Source/WebCore/platform/graphics/cg/ImageCG.cpp
+++ b/Source/WebCore/platform/graphics/cg/ImageCG.cpp
@@ -204,7 +204,7 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& destRect, const F
adjustedDestRect.setHeight(subimageRect.height() / yScale);
image.adoptCF(CGImageCreateWithImageInRect(image.get(), subimageRect));
- if (currHeight < srcRect.bottom()) {
+ if (currHeight < srcRect.maxY()) {
ASSERT(CGImageGetHeight(image.get()) == currHeight - CGRectIntegral(srcRect).origin.y);
adjustedDestRect.setHeight(CGImageGetHeight(image.get()) / yScale);
}
@@ -224,7 +224,7 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& destRect, const F
// Flip the coords.
CGContextScaleCTM(context, 1, -1);
- adjustedDestRect.setY(-adjustedDestRect.bottom());
+ adjustedDestRect.setY(-adjustedDestRect.maxY());
// Adjust the color space.
image = imageWithColorSpace(image.get(), styleColorSpace);
diff --git a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp
index 92861fc..4598602 100644
--- a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp
+++ b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp
@@ -146,7 +146,10 @@ void ComplexTextController::reset(unsigned offset)
// TextRun has been reached.
bool ComplexTextController::nextScriptRun()
{
- if (!hb_utf16_script_run_next(&m_numCodePoints, &m_item.item, m_run.characters(), m_run.length(), &m_indexOfNextScriptRun))
+ // Ensure we're not pointing at the small caps buffer.
+ m_item.string = m_run.characters();
+
+ if (!hb_utf16_script_run_next(0, &m_item.item, m_run.characters(), m_run.length(), &m_indexOfNextScriptRun))
return false;
// It is actually wrong to consider script runs at all in this code.
@@ -184,11 +187,33 @@ float ComplexTextController::widthOfFullRun()
void ComplexTextController::setupFontForScriptRun()
{
- const FontData* fontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false).fontData;
+ FontDataVariant fontDataVariant = AutoVariant;
+ // Determine if this script run needs to be converted to small caps.
+ // nextScriptRun() will always send us a run of the same case, because a
+ // case change while in small-caps mode always results in different
+ // FontData, so we only need to check the first character's case.
+ if (m_font->isSmallCaps() && u_islower(m_item.string[m_item.item.pos])) {
+ m_smallCapsString = String(m_run.data(m_item.item.pos), m_item.item.length);
+ m_smallCapsString.makeUpper();
+ m_item.string = m_smallCapsString.characters();
+ m_item.item.pos = 0;
+ fontDataVariant = SmallCapsVariant;
+ }
+ const FontData* fontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false, fontDataVariant).fontData;
const FontPlatformData& platformData = fontData->fontDataForCharacter(' ')->platformData();
m_item.face = platformData.harfbuzzFace();
void* opaquePlatformData = const_cast<FontPlatformData*>(&platformData);
m_item.font->userData = opaquePlatformData;
+
+ int size = platformData.size();
+ m_item.font->x_ppem = size;
+ m_item.font->y_ppem = size;
+ // x_ and y_scale are the conversion factors from font design space (fEmSize) to 1/64th of device pixels in 16.16 format.
+ const int devicePixelFraction = 64;
+ const int multiplyFor16Dot16 = 1 << 16;
+ int scale = devicePixelFraction * size * multiplyFor16Dot16 / platformData.emSizeInFontUnits();
+ m_item.font->x_scale = scale;
+ m_item.font->y_scale = scale;
}
HB_FontRec* ComplexTextController::allocHarfbuzzFont()
@@ -197,13 +222,6 @@ HB_FontRec* ComplexTextController::allocHarfbuzzFont()
memset(font, 0, sizeof(HB_FontRec));
font->klass = &harfbuzzSkiaClass;
font->userData = 0;
- // The values which harfbuzzSkiaClass returns are already scaled to
- // pixel units, so we just set all these to one to disable further
- // scaling.
- font->x_ppem = 1;
- font->y_ppem = 1;
- font->x_scale = 1;
- font->y_scale = 1;
return font;
}
@@ -369,7 +387,7 @@ const TextRun& ComplexTextController::getNormalizedTextRun(const TextRun& origin
sourceText = normalizedString.getBuffer();
}
- normalizedBuffer.set(new UChar[normalizedBufferLength + 1]);
+ normalizedBuffer = adoptArrayPtr(new UChar[normalizedBufferLength + 1]);
normalizeSpacesAndMirrorChars(sourceText, originalRun.rtl(), normalizedBuffer.get(), normalizedBufferLength);
diff --git a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h
index a2aea60..6a93878 100644
--- a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h
+++ b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h
@@ -111,7 +111,7 @@ public:
const unsigned short* logClusters() const { return m_item.log_clusters; }
// return the number of code points in the current script run
- const unsigned numCodePoints() const { return m_numCodePoints; }
+ const unsigned numCodePoints() const { return m_item.item.length; }
// Return the current pixel position of the controller.
const unsigned offsetX() const { return m_offsetX; }
@@ -141,7 +141,6 @@ private:
ssize_t m_indexOfNextScriptRun; // Indexes the script run in |m_run|.
unsigned m_offsetX; // Offset in pixels to the start of the next script run.
unsigned m_pixelWidth; // Width (in px) of the current script run.
- unsigned m_numCodePoints; // Code points in current script run.
unsigned m_glyphsArrayCapacity; // Current size of all the Harfbuzz arrays.
OwnPtr<TextRun> m_normalizedRun;
@@ -155,6 +154,7 @@ private:
// each word break we accumulate error. This is the
// number of pixels that we are behind so far.
int m_letterSpacing; // pixels to be added after each glyph.
+ String m_smallCapsString; // substring of m_run converted to small caps.
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
index d00faf8..a38f6bd 100644
--- a/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
@@ -343,7 +343,7 @@ void ContentLayerChromium::draw()
ASSERT(sv && sv->initialized());
GraphicsContext3D* context = layerRendererContext();
GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0));
- m_contentsTexture->bindTexture();
+ bindContentsTexture();
layerRenderer()->useShader(sv->contentShaderProgram());
GLC(context, context->uniform1i(sv->shaderSamplerLocation(), 0));
@@ -361,8 +361,21 @@ void ContentLayerChromium::draw()
drawOpacity(), sv->shaderMatrixLocation(),
sv->shaderAlphaLocation());
}
- m_contentsTexture->unreserve();
+ unreserveContentsTexture();
+}
+
+void ContentLayerChromium::unreserveContentsTexture()
+{
+ if (m_contentsTexture)
+ m_contentsTexture->unreserve();
}
+void ContentLayerChromium::bindContentsTexture()
+{
+ if (m_contentsTexture)
+ m_contentsTexture->bindTexture();
+}
+
+
}
#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h b/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h
index dc1630b..3363518 100644
--- a/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h
@@ -50,6 +50,9 @@ public:
virtual ~ContentLayerChromium();
virtual void updateContentsIfDirty();
+ virtual void unreserveContentsTexture();
+ virtual void bindContentsTexture();
+
virtual void draw();
virtual bool drawsContent() { return m_owner && m_owner->drawsContent(); }
diff --git a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp b/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
index 2d4ca41..d956841 100644
--- a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
@@ -36,12 +36,20 @@
#include "GraphicsContext3D.h"
#include "SharedGraphicsContext3D.h"
+#if ENABLE(SKIA_GPU)
+#include "GrContext.h"
+#endif
+
#if USE(ACCELERATED_COMPOSITING)
#include "Canvas2DLayerChromium.h"
#endif
namespace WebCore {
+#if ENABLE(SKIA_GPU)
+extern GrContext* GetGlobalGrContext();
+#endif
+
struct DrawingBufferInternal {
unsigned offscreenColorTexture;
#if USE(ACCELERATED_COMPOSITING)
@@ -72,7 +80,7 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context,
bool multisampleExtensionSupported,
bool packedDepthStencilExtensionSupported)
: m_context(context)
- , m_size(-1, -1)
+ , m_size(size)
, m_multisampleExtensionSupported(multisampleExtensionSupported)
, m_packedDepthStencilExtensionSupported(packedDepthStencilExtensionSupported)
, m_fbo(0)
@@ -119,6 +127,8 @@ void DrawingBuffer::publishToPlatformLayer()
if (m_callback)
m_callback->willPublish();
+ if (multisample())
+ commit();
unsigned parentTexture = m_internal->platformLayer->textureId();
// FIXME: We do the copy in the canvas' (child) context so that it executes in the correct order relative to
// other commands in the child context. This ensures that the parent texture always contains a complete
@@ -126,6 +136,9 @@ void DrawingBuffer::publishToPlatformLayer()
// happens before the compositor draws. This means we might draw stale frames sometimes. Ideally this
// would insert a fence into the child command stream that the compositor could wait for.
m_context->makeContextCurrent();
+#if ENABLE(SKIA_GPU)
+ GetGlobalGrContext()->flush(false);
+#endif
static_cast<Extensions3DChromium*>(m_context->getExtensions())->copyTextureToParentTextureCHROMIUM(m_colorBuffer, parentTexture);
m_context->flush();
}
diff --git a/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h b/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h
index d120424..92fb7b3 100644
--- a/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/Extensions3DChromium.h
@@ -44,8 +44,8 @@ public:
virtual bool supports(const String&);
virtual void ensureEnabled(const String&);
virtual int getGraphicsResetStatusARB();
- virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter) { }
- virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height) { }
+ virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter);
+ virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height);
enum {
// GL_CHROMIUM_map_sub (enums inherited from GL_ARB_vertex_buffer_object)
diff --git a/Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp b/Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp
index f4c0dee..33ebc59 100644
--- a/Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp
+++ b/Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp
@@ -399,6 +399,28 @@ static int CALLBACK traitsInFamilyEnumProc(CONST LOGFONT* logFont, CONST TEXTMET
return 1;
}
+struct GetLastResortFallbackFontProcData {
+ GetLastResortFallbackFontProcData(FontCache* fontCache, const FontDescription* fontDescription, wchar_t* fontName)
+ : m_fontCache(fontCache)
+ , m_fontDescription(fontDescription)
+ , m_fontName(fontName)
+ , m_fontData(0)
+ {
+ }
+
+ FontCache* m_fontCache;
+ const FontDescription* m_fontDescription;
+ wchar_t* m_fontName;
+ SimpleFontData* m_fontData;
+};
+
+static int CALLBACK getLastResortFallbackFontProc(const LOGFONT* logFont, const TEXTMETRIC* metrics, DWORD fontType, LPARAM lParam)
+{
+ GetLastResortFallbackFontProcData* procData = reinterpret_cast<GetLastResortFallbackFontProcData*>(lParam);
+ procData->m_fontData = fontDataFromDescriptionAndLogFont(procData->m_fontCache, *procData->m_fontDescription, *logFont, procData->m_fontName);
+ return !procData->m_fontData;
+}
+
void FontCache::platformInit()
{
// Not needed on Windows.
@@ -548,6 +570,21 @@ SimpleFontData* FontCache::getLastResortFallbackFont(const FontDescription& desc
return simpleFont;
}
+ // Fall back to all the fonts installed in this PC. When a font has a
+ // localized name according to the system locale as well as an English name,
+ // both GetTextFace() and EnumFontFamilies() return the localized name. So,
+ // FontCache::createFontPlatformData() does not filter out the fonts
+ // returned by this EnumFontFamilies() call.
+ HDC dc = GetDC(0);
+ if (dc) {
+ GetLastResortFallbackFontProcData procData(this, &description, fallbackFontName);
+ EnumFontFamilies(dc, 0, getLastResortFallbackFontProc, reinterpret_cast<LPARAM>(&procData));
+ ReleaseDC(0, dc);
+
+ if (procData.m_fontData)
+ return procData.m_fontData;
+ }
+
ASSERT_NOT_REACHED();
return 0;
}
diff --git a/Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp b/Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp
index 5da4d5a..e57a84c 100644
--- a/Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp
+++ b/Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp
@@ -246,10 +246,11 @@ IntRect TransparencyAwareGlyphPainter::estimateTextBounds()
for (int i = 0; i < m_numGlyphs; i++)
totalWidth += lroundf(m_glyphBuffer.advanceAt(m_from + i));
- return IntRect(m_point.x() - (m_font->ascent() + m_font->descent()) / 2,
- m_point.y() - m_font->ascent() - m_font->lineGap(),
- totalWidth + m_font->ascent() + m_font->descent(),
- m_font->lineSpacing());
+ const FontMetrics& fontMetrics = m_font->fontMetrics();
+ return IntRect(m_point.x() - (fontMetrics.ascent() + fontMetrics.descent()) / 2,
+ m_point.y() - fontMetrics.ascent() - fontMetrics.lineGap(),
+ totalWidth + fontMetrics.ascent() + fontMetrics.descent(),
+ fontMetrics.lineSpacing());
}
bool TransparencyAwareGlyphPainter::drawGlyphs(int numGlyphs,
@@ -270,7 +271,7 @@ bool TransparencyAwareGlyphPainter::drawGlyphs(int numGlyphs,
// Windows' origin is the top-left of the bounding box, so we have
// to subtract off the font ascent to get it.
int x = lroundf(m_point.x() + startAdvance);
- int y = lroundf(m_point.y() - m_font->ascent());
+ int y = lroundf(m_point.y() - m_font->fontMetrics().ascent());
// If there is a non-blur shadow and both the fill color and shadow color
// are opaque, handle without skia.
@@ -354,10 +355,11 @@ IntRect TransparencyAwareUniscribePainter::estimateTextBounds()
// This algorithm for estimating how much extra space we need (the text may
// go outside the selection rect) is based roughly on
// TransparencyAwareGlyphPainter::estimateTextBounds above.
- return IntRect(left - (m_font->ascent() + m_font->descent()) / 2,
- m_point.y() - m_font->ascent() - m_font->lineGap(),
- (right - left) + m_font->ascent() + m_font->descent(),
- m_font->lineSpacing());
+ const FontMetrics& fontMetrics = m_font->fontMetrics();
+ return IntRect(left - (fontMetrics.ascent() + fontMetrics.descent()) / 2,
+ m_point.y() - fontMetrics.ascent() - fontMetrics.lineGap(),
+ (right - left) + fontMetrics.ascent() + fontMetrics.descent(),
+ fontMetrics.lineSpacing());
}
} // namespace
@@ -367,6 +369,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
void Font::drawGlyphs(GraphicsContext* graphicsContext,
const SimpleFontData* font,
const GlyphBuffer& glyphBuffer,
@@ -496,14 +503,14 @@ void Font::drawComplexText(GraphicsContext* graphicsContext,
COLORREF savedTextColor = GetTextColor(hdc);
SetTextColor(hdc, textColor);
state.draw(graphicsContext, hdc, static_cast<int>(point.x()) + shadowOffset.width(),
- static_cast<int>(point.y() - ascent()) + shadowOffset.height(), from, to);
+ static_cast<int>(point.y() - fontMetrics().ascent()) + shadowOffset.height(), from, to);
SetTextColor(hdc, savedTextColor);
}
// Uniscribe counts the coordinates from the upper left, while WebKit uses
// the baseline, so we have to subtract off the ascent.
state.draw(graphicsContext, hdc, static_cast<int>(point.x()),
- static_cast<int>(point.y() - ascent()), from, to);
+ static_cast<int>(point.y() - fontMetrics().ascent()), from, to);
context->canvas()->endPlatformPaint();
}
diff --git a/Source/WebCore/platform/graphics/chromium/FontLinux.cpp b/Source/WebCore/platform/graphics/chromium/FontLinux.cpp
index 822bbbb..823dbc9 100644
--- a/Source/WebCore/platform/graphics/chromium/FontLinux.cpp
+++ b/Source/WebCore/platform/graphics/chromium/FontLinux.cpp
@@ -55,6 +55,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
static bool isCanvasMultiLayered(SkCanvas* canvas)
{
SkCanvas::LayerIter layerIterator(canvas, false);
@@ -204,7 +209,7 @@ void Font::drawComplexText(GraphicsContext* gc, const TextRun& run,
ComplexTextController controller(run, point.x(), this);
controller.setWordSpacingAdjustment(wordSpacing());
controller.setLetterSpacingAdjustment(letterSpacing());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
if (run.rtl()) {
// FIXME: this causes us to shape the text twice -- once to compute the width and then again
@@ -213,7 +218,7 @@ void Font::drawComplexText(GraphicsContext* gc, const TextRun& run,
controller.reset(point.x() + controller.widthOfFullRun());
// We need to set the padding again because ComplexTextController layout consumed the value.
// Fixing the above problem would help here too.
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
}
while (controller.nextScriptRun()) {
@@ -241,7 +246,7 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
ComplexTextController controller(run, 0, this);
controller.setWordSpacingAdjustment(wordSpacing());
controller.setLetterSpacingAdjustment(letterSpacing());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
return controller.widthOfFullRun();
}
@@ -275,11 +280,11 @@ int Font::offsetForPositionForComplexText(const TextRun& run, float xFloat,
ComplexTextController controller(run, 0, this);
controller.setWordSpacingAdjustment(wordSpacing());
controller.setLetterSpacingAdjustment(letterSpacing());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
if (run.rtl()) {
// See FIXME in drawComplexText.
controller.reset(controller.widthOfFullRun());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
}
unsigned basePosition = 0;
@@ -326,11 +331,11 @@ FloatRect Font::selectionRectForComplexText(const TextRun& run,
ComplexTextController controller(run, 0, this);
controller.setWordSpacingAdjustment(wordSpacing());
controller.setLetterSpacingAdjustment(letterSpacing());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
if (run.rtl()) {
// See FIXME in drawComplexText.
controller.reset(controller.widthOfFullRun());
- controller.setPadding(run.padding());
+ controller.setPadding(run.expansion());
}
// Iterate through the script runs in logical order, searching for the run covering the positions of interest.
diff --git a/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp b/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp
index a1ea012..6f9009f 100644
--- a/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp
+++ b/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp
@@ -36,6 +36,7 @@
#include "PlatformBridge.h"
#include "PlatformString.h"
+#include "SkAdvancedTypefaceMetrics.h"
#include "SkPaint.h"
#include "SkTypeface.h"
@@ -71,6 +72,7 @@ FontPlatformData::FontPlatformData(const FontPlatformData& src)
: m_typeface(src.m_typeface)
, m_family(src.m_family)
, m_textSize(src.m_textSize)
+ , m_emSizeInFontUnits(src.m_emSizeInFontUnits)
, m_fakeBold(src.m_fakeBold)
, m_fakeItalic(src.m_fakeItalic)
, m_orientation(src.m_orientation)
@@ -84,6 +86,7 @@ FontPlatformData::FontPlatformData(SkTypeface* tf, const char* family, float tex
: m_typeface(tf)
, m_family(family)
, m_textSize(textSize)
+ , m_emSizeInFontUnits(0)
, m_fakeBold(fakeBold)
, m_fakeItalic(fakeItalic)
, m_orientation(orientation)
@@ -96,6 +99,7 @@ FontPlatformData::FontPlatformData(const FontPlatformData& src, float textSize)
: m_typeface(src.m_typeface)
, m_family(src.m_family)
, m_textSize(textSize)
+ , m_emSizeInFontUnits(src.m_emSizeInFontUnits)
, m_fakeBold(src.m_fakeBold)
, m_fakeItalic(src.m_fakeItalic)
, m_harfbuzzFace(src.m_harfbuzzFace)
@@ -109,6 +113,17 @@ FontPlatformData::~FontPlatformData()
SkSafeUnref(m_typeface);
}
+int FontPlatformData::emSizeInFontUnits() const
+{
+ if (m_emSizeInFontUnits)
+ return m_emSizeInFontUnits;
+
+ SkAdvancedTypefaceMetrics* metrics = m_typeface->getAdvancedTypefaceMetrics(false);
+ m_emSizeInFontUnits = metrics->fEmSize;
+ metrics->unref();
+ return m_emSizeInFontUnits;
+}
+
FontPlatformData& FontPlatformData::operator=(const FontPlatformData& src)
{
SkRefCnt_SafeAssign(m_typeface, src.m_typeface);
@@ -120,6 +135,7 @@ FontPlatformData& FontPlatformData::operator=(const FontPlatformData& src)
m_harfbuzzFace = src.m_harfbuzzFace;
m_orientation = src.m_orientation;
m_style = src.m_style;
+ m_emSizeInFontUnits = src.m_emSizeInFontUnits;
return *this;
}
diff --git a/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h b/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
index 43771d7..d9ebb61 100644
--- a/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
+++ b/Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
@@ -63,6 +63,7 @@ public:
FontPlatformData(WTF::HashTableDeletedValueType)
: m_typeface(hashTableDeletedFontValue())
, m_textSize(0)
+ , m_emSizeInFontUnits(0)
, m_fakeBold(false)
, m_fakeItalic(false)
{ }
@@ -70,6 +71,7 @@ public:
FontPlatformData()
: m_typeface(0)
, m_textSize(0)
+ , m_emSizeInFontUnits(0)
, m_fakeBold(false)
, m_fakeItalic(false)
, m_orientation(Horizontal)
@@ -78,6 +80,7 @@ public:
FontPlatformData(float textSize, bool fakeBold, bool fakeItalic)
: m_typeface(0)
, m_textSize(textSize)
+ , m_emSizeInFontUnits(0)
, m_fakeBold(fakeBold)
, m_fakeItalic(fakeItalic)
, m_orientation(Horizontal)
@@ -107,6 +110,7 @@ public:
unsigned hash() const;
float size() const { return m_textSize; }
+ int emSizeInFontUnits() const;
FontOrientation orientation() const { return m_orientation; }
@@ -153,6 +157,7 @@ private:
SkTypeface* m_typeface;
CString m_family;
float m_textSize;
+ mutable int m_emSizeInFontUnits;
bool m_fakeBold;
bool m_fakeItalic;
FontOrientation m_orientation;
diff --git a/Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp b/Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
index 4393f97..953ee2f 100644
--- a/Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
+++ b/Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp
@@ -83,6 +83,22 @@ struct GLES2Canvas::State {
AffineTransform m_ctm;
WTF::Vector<Path> m_clippingPaths;
bool m_clippingEnabled;
+
+ // Helper function for applying the state's alpha value to the given input
+ // color to produce a new output color. The logic is the same as
+ // PlatformContextSkia::State::applyAlpha(), but the type is different.
+ Color applyAlpha(const Color& c)
+ {
+ int s = roundf(m_alpha * 256);
+ if (s >= 256)
+ return c;
+ if (s < 0)
+ return Color();
+
+ int a = (c.alpha() * s) >> 8;
+ return Color(c.red(), c.green(), c.blue(), a);
+ }
+
};
static inline FloatPoint operator*(const FloatPoint& f, float scale)
@@ -192,7 +208,7 @@ void GLES2Canvas::fillPath(const Path& path)
{
m_context->applyCompositeOperator(m_state->m_compositeOp);
applyClipping(m_state->m_clippingEnabled);
- fillPath(path, m_state->m_fillColor);
+ fillPath(path, m_state->applyAlpha(m_state->m_fillColor));
}
void GLES2Canvas::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace)
@@ -214,7 +230,7 @@ void GLES2Canvas::fillRect(const FloatRect& rect, const Color& color, ColorSpace
void GLES2Canvas::fillRect(const FloatRect& rect)
{
- fillRect(rect, m_state->m_fillColor, ColorSpaceDeviceRGB);
+ fillRect(rect, m_state->applyAlpha(m_state->m_fillColor), ColorSpaceDeviceRGB);
}
void GLES2Canvas::setFillColor(const Color& color, ColorSpace colorSpace)
@@ -322,8 +338,8 @@ void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect& srcRect, c
m_context->useQuadVertices();
m_context->setActiveTexture(GraphicsContext3D::TEXTURE0);
- for (int y = tileIdxRect.y(); y <= tileIdxRect.bottom(); y++) {
- for (int x = tileIdxRect.x(); x <= tileIdxRect.right(); x++)
+ for (int y = tileIdxRect.y(); y <= tileIdxRect.maxY(); y++) {
+ for (int x = tileIdxRect.x(); x <= tileIdxRect.maxX(); x++)
drawTexturedRectTile(texture, tiles.tileIndex(x, y), srcRect, dstRect, transform, alpha);
}
}
diff --git a/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
index 5e8d148..488230c 100644
--- a/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
@@ -263,6 +263,17 @@ void GraphicsLayerChromium::setContentsOpaque(bool opaque)
updateContentsOpaque();
}
+void GraphicsLayerChromium::setMaskLayer(GraphicsLayer* maskLayer)
+{
+ if (maskLayer == m_maskLayer)
+ return;
+
+ GraphicsLayer::setMaskLayer(maskLayer);
+
+ LayerChromium* maskLayerChromium = m_maskLayer ? m_maskLayer->platformLayer() : 0;
+ m_layer->setMaskLayer(maskLayerChromium);
+}
+
void GraphicsLayerChromium::setBackfaceVisibility(bool visible)
{
if (m_backfaceVisibility == visible)
@@ -283,6 +294,15 @@ void GraphicsLayerChromium::setOpacity(float opacity)
primaryLayer()->setOpacity(opacity);
}
+void GraphicsLayerChromium::setReplicatedByLayer(GraphicsLayer* layer)
+{
+ GraphicsLayerChromium* layerChromium = static_cast<GraphicsLayerChromium*>(layer);
+ GraphicsLayer::setReplicatedByLayer(layer);
+ LayerChromium* replicaLayer = layerChromium ? layerChromium->primaryLayer() : 0;
+ primaryLayer()->setReplicaLayer(replicaLayer);
+}
+
+
void GraphicsLayerChromium::setContentsNeedsDisplay()
{
if (m_contentsLayer)
@@ -494,6 +514,7 @@ void GraphicsLayerChromium::updateAnchorPoint()
{
primaryLayer()->setAnchorPoint(FloatPoint(m_anchorPoint.x(), m_anchorPoint.y()));
primaryLayer()->setAnchorPointZ(m_anchorPoint.z());
+
updateLayerPosition();
}
diff --git a/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h b/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
index 130c25c..92c61fe 100644
--- a/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
@@ -67,6 +67,7 @@ public:
virtual void setPreserves3D(bool);
virtual void setMasksToBounds(bool);
virtual void setDrawsContent(bool);
+ virtual void setMaskLayer(GraphicsLayer*);
virtual void setBackgroundColor(const Color&);
virtual void clearBackgroundColor();
@@ -74,6 +75,8 @@ public:
virtual void setContentsOpaque(bool);
virtual void setBackfaceVisibility(bool);
+ virtual void setReplicatedByLayer(GraphicsLayer*);
+
virtual void setOpacity(float);
virtual void setNeedsDisplay();
diff --git a/Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp b/Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp
index 056d8eb..26ca64e 100644
--- a/Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp
+++ b/Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp
@@ -94,7 +94,7 @@ static void glyphsToAdvances(HB_Font hbFont, const HB_Glyph* glyphs, hb_uint32 n
font->setupPaint(&paint);
paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
- OwnArrayPtr<uint16_t> glyphs16(new uint16_t[numGlyphs]);
+ OwnArrayPtr<uint16_t> glyphs16 = adoptArrayPtr(new uint16_t[numGlyphs]);
if (!glyphs16.get())
return;
for (unsigned i = 0; i < numGlyphs; ++i)
@@ -120,7 +120,7 @@ static HB_Bool canRender(HB_Font hbFont, const HB_UChar16* characters, hb_uint32
font->setupPaint(&paint);
paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
- OwnArrayPtr<uint16_t> glyphs16(new uint16_t[length]);
+ OwnArrayPtr<uint16_t> glyphs16 = adoptArrayPtr(new uint16_t[length]);
if (!glyphs16.get())
return 0;
int numGlyphs = paint.textToGlyphs(characters, length * sizeof(uint16_t), glyphs16.get());
diff --git a/Source/WebCore/platform/graphics/chromium/IconChromiumWin.cpp b/Source/WebCore/platform/graphics/chromium/IconChromium.cpp
index e958d4a..398cc3b 100644
--- a/Source/WebCore/platform/graphics/chromium/IconChromiumWin.cpp
+++ b/Source/WebCore/platform/graphics/chromium/IconChromium.cpp
@@ -1,10 +1,10 @@
/*
- * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
- *
+ * Copyright (c) 2011, Google Inc. All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -31,25 +31,18 @@
#include "config.h"
#include "Icon.h"
-#include <windows.h>
-#include <shellapi.h>
-
#include "GraphicsContext.h"
-#include "PlatformContextSkia.h"
#include "PlatformString.h"
-#include "SkiaUtils.h"
namespace WebCore {
-Icon::Icon(const PlatformIcon& icon)
+Icon::Icon(PassRefPtr<PlatformIcon> icon)
: m_icon(icon)
{
}
Icon::~Icon()
{
- if (m_icon)
- DestroyIcon(m_icon);
}
void Icon::paint(GraphicsContext* context, const IntRect& rect)
@@ -57,9 +50,9 @@ void Icon::paint(GraphicsContext* context, const IntRect& rect)
if (context->paintingDisabled())
return;
- HDC hdc = context->platformContext()->canvas()->beginPlatformPaint();
- DrawIconEx(hdc, rect.x(), rect.y(), m_icon, rect.width(), rect.height(), 0, 0, DI_NORMAL);
- context->platformContext()->canvas()->endPlatformPaint();
+ // An Icon doesn't know the color space of the file upload control.
+ // So use ColorSpaceDeviceRGB.
+ context->drawImage(m_icon.get(), ColorSpaceDeviceRGB, rect);
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
index b7ab098..8d01d9b 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
@@ -143,6 +143,7 @@ PassRefPtr<LayerChromium> LayerChromium::create(GraphicsLayerChromium* owner)
LayerChromium::LayerChromium(GraphicsLayerChromium* owner)
: m_owner(owner)
, m_contentsDirty(false)
+ , m_maskLayer(0)
, m_targetRenderSurface(0)
, m_superlayer(0)
, m_anchorPoint(0.5, 0.5)
@@ -162,6 +163,7 @@ LayerChromium::LayerChromium(GraphicsLayerChromium* owner)
, m_drawDepth(0)
, m_layerRenderer(0)
, m_renderSurface(0)
+ , m_replicaLayer(0)
{
}
@@ -433,9 +435,7 @@ void LayerChromium::drawTexturedQuad(GraphicsContext3D* context, const Transform
renderMatrix.scale3d(width, height, 1);
// Apply the projection matrix before sending the transform over to the shader.
- renderMatrix.multiply(projectionMatrix);
-
- toGLMatrix(&glMatrix[0], renderMatrix);
+ toGLMatrix(&glMatrix[0], projectionMatrix * renderMatrix);
GLC(context, context->uniformMatrix4fv(matrixLocation, false, &glMatrix[0], 1));
@@ -457,8 +457,7 @@ void LayerChromium::drawDebugBorder()
layerRenderer()->useShader(sv->borderShaderProgram());
TransformationMatrix renderMatrix = drawTransform();
renderMatrix.scale3d(bounds().width(), bounds().height(), 1);
- renderMatrix.multiply(layerRenderer()->projectionMatrix());
- toGLMatrix(&glMatrix[0], renderMatrix);
+ toGLMatrix(&glMatrix[0], layerRenderer()->projectionMatrix() * renderMatrix);
GraphicsContext3D* context = layerRendererContext();
GLC(context, context->uniformMatrix4fv(sv->borderShaderMatrixLocation(), false, &glMatrix[0], 1));
diff --git a/Source/WebCore/platform/graphics/chromium/LayerChromium.h b/Source/WebCore/platform/graphics/chromium/LayerChromium.h
index a0a690f..5c7e2b1 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/LayerChromium.h
@@ -112,6 +112,9 @@ public:
void setName(const String& name) { m_name = name; }
String name() const { return m_name; }
+ void setMaskLayer(LayerChromium* maskLayer) { m_maskLayer = maskLayer; }
+ LayerChromium* maskLayer() const { return m_maskLayer.get(); }
+
void setNeedsDisplay(const FloatRect& dirtyRect);
void setNeedsDisplay();
const FloatRect& dirtyRect() const { return m_dirtyRect; }
@@ -152,12 +155,17 @@ public:
void setOwner(GraphicsLayerChromium* owner) { m_owner = owner; }
+ void setReplicaLayer(LayerChromium* layer) { m_replicaLayer = layer; }
+ LayerChromium* replicaLayer() { return m_replicaLayer; }
+
// Returns the rect containtaining this layer in the current view's coordinate system.
const IntRect getDrawRect() const;
// These methods typically need to be overwritten by derived classes.
virtual bool drawsContent() { return false; }
virtual void updateContentsIfDirty() { }
+ virtual void unreserveContentsTexture() { }
+ virtual void bindContentsTexture() { }
virtual void draw() { }
void drawDebugBorder();
@@ -222,6 +230,8 @@ protected:
FloatRect m_dirtyRect;
bool m_contentsDirty;
+ RefPtr<LayerChromium> m_maskLayer;
+
// Render surface this layer draws into. This is a surface that can belong
// either to this layer (if m_targetRenderSurface == m_renderSurface) or
// to an ancestor of this layer. The target render surface determines the
@@ -298,6 +308,9 @@ private:
// Hierarchical bounding rect containing the layer and its descendants.
IntRect m_drawableContentRect;
+ // Replica layer used for reflections.
+ LayerChromium* m_replicaLayer;
+
String m_name;
};
diff --git a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
index 90eac74..f5548c9 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
@@ -143,20 +143,19 @@ void LayerRendererChromium::useShader(unsigned programId)
IntRect LayerRendererChromium::verticalScrollbarRect(const IntRect& visibleRect, const IntRect& contentRect)
{
- IntRect verticalScrollbar(IntPoint(contentRect.right(), contentRect.y()), IntSize(visibleRect.width() - contentRect.width(), visibleRect.height()));
+ IntRect verticalScrollbar(IntPoint(contentRect.maxX(), contentRect.y()), IntSize(visibleRect.width() - contentRect.width(), visibleRect.height()));
return verticalScrollbar;
}
IntRect LayerRendererChromium::horizontalScrollbarRect(const IntRect& visibleRect, const IntRect& contentRect)
{
- IntRect horizontalScrollbar(IntPoint(contentRect.x(), contentRect.bottom()), IntSize(visibleRect.width(), visibleRect.height() - contentRect.height()));
+ IntRect horizontalScrollbar(IntPoint(contentRect.x(), contentRect.maxY()), IntSize(visibleRect.width(), visibleRect.height() - contentRect.height()));
return horizontalScrollbar;
}
void LayerRendererChromium::invalidateRootLayerRect(const IntRect& dirtyRect, const IntRect& visibleRect, const IntRect& contentRect)
{
- if (contentRect.intersects(dirtyRect))
- m_rootLayerTiler->invalidateRect(dirtyRect);
+ m_rootLayerTiler->invalidateRect(dirtyRect);
if (m_horizontalScrollbarTiler) {
IntRect scrollbar = horizontalScrollbarRect(visibleRect, contentRect);
if (dirtyRect.intersects(scrollbar)) {
@@ -266,6 +265,11 @@ void LayerRendererChromium::drawLayers(const IntRect& visibleRect, const IntRect
// Re-enable color writes to layers, which may be partially transparent.
m_context->colorMask(true, true, true, true);
+ // Recheck that we still have a root layer. This may become null if
+ // compositing gets turned off during a paint operation.
+ if (!m_rootLayer)
+ return;
+
// Set the root visible/content rects --- used by subsequent drawLayers calls.
m_rootVisibleRect = visibleRect;
m_rootContentRect = contentRect;
@@ -346,8 +350,8 @@ void LayerRendererChromium::setRootLayer(PassRefPtr<LayerChromium> layer)
void LayerRendererChromium::getFramebufferPixels(void *pixels, const IntRect& rect)
{
- ASSERT(rect.right() <= rootLayerTextureSize().width()
- && rect.bottom() <= rootLayerTextureSize().height());
+ ASSERT(rect.maxX() <= rootLayerTextureSize().width()
+ && rect.maxY() <= rootLayerTextureSize().height());
if (!pixels)
return;
@@ -388,7 +392,7 @@ bool LayerRendererChromium::isLayerVisible(LayerChromium* layer, const Transform
// bounds into clip space.
TransformationMatrix renderMatrix = matrix;
renderMatrix.scale3d(layer->bounds().width(), layer->bounds().height(), 1);
- renderMatrix.multiply(m_projectionMatrix);
+ renderMatrix = m_projectionMatrix * renderMatrix;
FloatRect layerRect(-0.5, -0.5, 1, 1);
FloatRect mappedRect = renderMatrix.mapRect(layerRect);
@@ -434,12 +438,12 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
// LT = Tr[l]
layerLocalTransform.translate3d(position.x(), position.y(), layer->anchorPointZ());
// LT = Tr[l] * M[l]
- layerLocalTransform.multLeft(layer->transform());
+ layerLocalTransform.multiply(layer->transform());
// LT = Tr[l] * M[l] * Tr[c]
layerLocalTransform.translate3d(centerOffsetX, centerOffsetY, -layer->anchorPointZ());
TransformationMatrix combinedTransform = parentMatrix;
- combinedTransform = combinedTransform.multLeft(layerLocalTransform);
+ combinedTransform = combinedTransform.multiply(layerLocalTransform);
FloatRect layerRect(-0.5 * layer->bounds().width(), -0.5 * layer->bounds().height(), layer->bounds().width(), layer->bounds().height());
IntRect transformedLayerRect;
@@ -448,12 +452,17 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
// these conditions hold:
// 1. The layer clips its descendants and its transform is not a simple translation.
// 2. If the layer has opacity != 1 and does not have a preserves-3d transform style.
+ // 3. The layer uses a mask
+ // 4. The layer has a replica (used for reflections)
// If a layer preserves-3d then we don't create a RenderSurface for it to avoid flattening
// out its children. The opacity value of the children layers is multiplied by the opacity
// of their parent.
bool useSurfaceForClipping = layer->masksToBounds() && !isScaleOrTranslation(combinedTransform);
bool useSurfaceForOpacity = layer->opacity() != 1 && !layer->preserves3D();
- if ((useSurfaceForClipping || useSurfaceForOpacity) && layer->descendantsDrawContent()) {
+ bool useSurfaceForMasking = layer->maskLayer();
+ bool useSurfaceForReflection = layer->replicaLayer();
+ if (((useSurfaceForClipping || useSurfaceForOpacity) && layer->descendantsDrawContent())
+ || useSurfaceForMasking || useSurfaceForReflection) {
RenderSurfaceChromium* renderSurface = layer->m_renderSurface.get();
if (!renderSurface)
renderSurface = layer->createRenderSurface();
@@ -487,6 +496,18 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
renderSurface->m_layerList.clear();
+ if (layer->maskLayer()) {
+ renderSurface->m_maskLayer = layer->maskLayer();
+ layer->maskLayer()->setLayerRenderer(this);
+ layer->maskLayer()->m_targetRenderSurface = renderSurface;
+ } else
+ renderSurface->m_maskLayer = 0;
+
+ if (layer->replicaLayer() && layer->replicaLayer()->maskLayer()) {
+ layer->replicaLayer()->maskLayer()->setLayerRenderer(this);
+ layer->replicaLayer()->maskLayer()->m_targetRenderSurface = renderSurface;
+ }
+
renderSurfaceLayerList.append(layer);
} else {
// DT = M[p] * LT
@@ -540,7 +561,7 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
}
// Apply the sublayer transform at the center of the layer.
- sublayerMatrix.multLeft(layer->sublayerTransform());
+ sublayerMatrix.multiply(layer->sublayerTransform());
// The origin of the sublayers is the top left corner of the layer, not the
// center. The matrix passed down to the sublayers is therefore:
@@ -558,16 +579,13 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
if (sublayer->m_renderSurface) {
RenderSurfaceChromium* sublayerRenderSurface = sublayer->m_renderSurface.get();
- const IntRect& contentRect = sublayerRenderSurface->contentRect();
- FloatRect sublayerRect(-0.5 * contentRect.width(), -0.5 * contentRect.height(),
- contentRect.width(), contentRect.height());
- layer->m_drawableContentRect.unite(enclosingIntRect(sublayerRenderSurface->m_drawTransform.mapRect(sublayerRect)));
+ layer->m_drawableContentRect.unite(enclosingIntRect(sublayerRenderSurface->drawableContentRect()));
descendants.append(sublayer);
} else
layer->m_drawableContentRect.unite(sublayer->m_drawableContentRect);
}
- if (layer->masksToBounds())
+ if (layer->masksToBounds() || useSurfaceForMasking)
layer->m_drawableContentRect.intersect(transformedLayerRect);
if (layer->m_renderSurface && layer != m_rootLayer) {
@@ -577,9 +595,13 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
// Restrict the RenderSurface size to the portion that's visible.
FloatSize centerOffsetDueToClipping;
- renderSurface->m_contentRect.intersect(layer->m_scissorRect);
- FloatPoint clippedSurfaceCenter = renderSurface->contentRectCenter();
- centerOffsetDueToClipping = clippedSurfaceCenter - surfaceCenter;
+ // Don't clip if the layer is reflected as the reflection shouldn't be
+ // clipped.
+ if (!layer->replicaLayer()) {
+ renderSurface->m_contentRect.intersect(layer->m_scissorRect);
+ FloatPoint clippedSurfaceCenter = renderSurface->contentRectCenter();
+ centerOffsetDueToClipping = clippedSurfaceCenter - surfaceCenter;
+ }
// The RenderSurface backing texture cannot exceed the maximum supported
// texture size.
@@ -596,6 +618,15 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
// Adjust the origin of the transform to be the center of the render surface.
renderSurface->m_drawTransform = renderSurface->m_originTransform;
renderSurface->m_drawTransform.translate3d(surfaceCenter.x() + centerOffsetDueToClipping.width(), surfaceCenter.y() + centerOffsetDueToClipping.height(), 0);
+
+ // Compute the transformation matrix used to draw the replica of the render
+ // surface.
+ if (layer->replicaLayer()) {
+ renderSurface->m_replicaDrawTransform = renderSurface->m_originTransform;
+ renderSurface->m_replicaDrawTransform.translate3d(layer->replicaLayer()->position().x(), layer->replicaLayer()->position().y(), 0);
+ renderSurface->m_replicaDrawTransform.multiply(layer->replicaLayer()->transform());
+ renderSurface->m_replicaDrawTransform.translate3d(surfaceCenter.x() - anchorPoint.x() * bounds.width(), surfaceCenter.y() - anchorPoint.y() * bounds.height(), 0);
+ }
}
// Compute the depth value of the center of the layer which will be used when
@@ -682,10 +713,10 @@ void LayerRendererChromium::drawLayer(LayerChromium* layer, RenderSurfaceChromiu
if (!isLayerVisible)
return;
- // FIXME: Need to take into account the transform of the containing
- // RenderSurface here, otherwise single-sided layers that draw on
- // transformed surfaces won't always be culled properly.
- if (!layer->doubleSided() && layer->m_drawTransform.m33() < 0)
+ // FIXME: Need to take into account the commulative render surface transforms all the way from
+ // the default render surface in order to determine visibility.
+ TransformationMatrix combinedDrawMatrix = (layer->m_renderSurface ? layer->m_renderSurface->drawTransform().multiply(layer->m_drawTransform) : layer->m_drawTransform);
+ if (!layer->doubleSided() && combinedDrawMatrix.m33() < 0)
return;
if (layer->drawsContent()) {
@@ -711,7 +742,7 @@ void LayerRendererChromium::setScissorToRect(const IntRect& scissorRect)
// But, if rendering to offscreen texture, we reverse our sense of 'upside down'.
int scissorY;
if (m_currentRenderSurface == m_defaultRenderSurface && !m_compositeOffscreen)
- scissorY = m_currentRenderSurface->m_contentRect.height() - (scissorRect.bottom() - m_currentRenderSurface->m_contentRect.y());
+ scissorY = m_currentRenderSurface->m_contentRect.height() - (scissorRect.maxY() - m_currentRenderSurface->m_contentRect.y());
else
scissorY = scissorRect.y() - m_currentRenderSurface->m_contentRect.y();
GLC(m_context.get(), m_context->scissor(scissorX, scissorY, scissorRect.width(), scissorRect.height()));
@@ -737,9 +768,9 @@ bool LayerRendererChromium::checkTextureSize(const IntSize& textureSize)
void LayerRendererChromium::setDrawViewportRect(const IntRect& drawRect, bool flipY)
{
if (flipY)
- m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.right(), drawRect.bottom(), drawRect.y());
+ m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.maxX(), drawRect.maxY(), drawRect.y());
else
- m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.right(), drawRect.y(), drawRect.bottom());
+ m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.maxX(), drawRect.y(), drawRect.maxY());
GLC(m_context.get(), m_context->viewport(0, 0, drawRect.width(), drawRect.height()));
}
diff --git a/Source/WebCore/platform/graphics/chromium/LayerTexture.cpp b/Source/WebCore/platform/graphics/chromium/LayerTexture.cpp
index 32bfa0b..23cb4b3 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerTexture.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerTexture.cpp
@@ -79,6 +79,7 @@ void LayerTexture::unreserve()
void LayerTexture::bindTexture()
{
+ ASSERT(m_textureManager->hasTexture(m_token));
m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_textureId);
}
diff --git a/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp
index 6b65e66..e28c084 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp
@@ -145,8 +145,8 @@ void LayerTilerChromium::contentRectToTileIndices(const IntRect& contentRect, in
left = layerRect.x() / m_tileSize.width();
top = layerRect.y() / m_tileSize.height();
- right = (layerRect.right() - 1) / m_tileSize.width();
- bottom = (layerRect.bottom() - 1) / m_tileSize.height();
+ right = (layerRect.maxX() - 1) / m_tileSize.width();
+ bottom = (layerRect.maxY() - 1) / m_tileSize.height();
}
IntRect LayerTilerChromium::contentRectToLayerRect(const IntRect& contentRect) const
@@ -272,7 +272,11 @@ void LayerTilerChromium::update(TilePaintInterface& painter, const IntRect& cont
// Get the contents of the updated rect.
const SkBitmap& bitmap = canvas->getDevice()->accessBitmap(false);
ASSERT(bitmap.width() == paintRect.width() && bitmap.height() == paintRect.height());
+ if (bitmap.width() != paintRect.width() || bitmap.height() != paintRect.height())
+ CRASH();
uint8_t* paintPixels = static_cast<uint8_t*>(bitmap.getPixels());
+ if (!paintPixels)
+ CRASH();
#elif PLATFORM(CG)
Vector<uint8_t> canvasPixels;
int rowBytes = 4 * paintRect.width();
@@ -299,9 +303,15 @@ void LayerTilerChromium::update(TilePaintInterface& painter, const IntRect& cont
#error "Need to implement for your platform."
#endif
+ // Painting could cause compositing to get turned off, which may cause the tiler to become invalidated mid-update.
+ if (!m_tiles.size())
+ return;
+
for (int j = top; j <= bottom; ++j) {
for (int i = left; i <= right; ++i) {
Tile* tile = m_tiles[tileIndex(i, j)].get();
+ if (!tile)
+ CRASH();
if (!tile->dirty())
continue;
@@ -320,13 +330,21 @@ void LayerTilerChromium::update(TilePaintInterface& painter, const IntRect& cont
// Calculate tile-space rectangle to upload into.
IntRect destRect(IntPoint(sourceRect.x() - anchor.x(), sourceRect.y() - anchor.y()), sourceRect.size());
- ASSERT(destRect.x() >= 0);
- ASSERT(destRect.y() >= 0);
+ if (destRect.x() < 0)
+ CRASH();
+ if (destRect.y() < 0)
+ CRASH();
// Offset from paint rectangle to this tile's dirty rectangle.
IntPoint paintOffset(sourceRect.x() - paintRect.x(), sourceRect.y() - paintRect.y());
- ASSERT(paintOffset.x() >= 0);
- ASSERT(paintOffset.y() >= 0);
+ if (paintOffset.x() < 0)
+ CRASH();
+ if (paintOffset.y() < 0)
+ CRASH();
+ if (paintOffset.x() + destRect.width() > paintRect.width())
+ CRASH();
+ if (paintOffset.y() + destRect.height() > paintRect.height())
+ CRASH();
uint8_t* pixelSource;
if (paintRect.width() == sourceRect.width() && !paintOffset.x())
@@ -357,7 +375,7 @@ void LayerTilerChromium::setLayerPosition(const IntPoint& layerPosition)
void LayerTilerChromium::draw(const IntRect& contentRect)
{
- if (m_skipsDraw)
+ if (m_skipsDraw || !m_tiles.size())
return;
// We reuse the shader program used by ContentLayerChromium.
@@ -394,6 +412,9 @@ void LayerTilerChromium::resizeLayer(const IntSize& size)
int width = (size.width() + m_tileSize.width() - 1) / m_tileSize.width();
int height = (size.height() + m_tileSize.height() - 1) / m_tileSize.height();
+ if (height && (width > INT_MAX / height))
+ CRASH();
+
Vector<OwnPtr<Tile> > newTiles;
newTiles.resize(width * height);
for (int j = 0; j < m_layerTileSize.height(); ++j)
@@ -409,7 +430,7 @@ void LayerTilerChromium::growLayerToContain(const IntRect& contentRect)
{
// Grow the tile array to contain this content rect.
IntRect layerRect = contentRectToLayerRect(contentRect);
- IntSize layerSize = IntSize(layerRect.right(), layerRect.bottom());
+ IntSize layerSize = IntSize(layerRect.maxX(), layerRect.maxY());
IntSize newSize = layerSize.expandedTo(m_layerSize);
resizeLayer(newSize);
diff --git a/Source/WebCore/platform/graphics/chromium/PlatformIcon.h b/Source/WebCore/platform/graphics/chromium/PlatformIcon.h
index 51613b8..b485917 100644
--- a/Source/WebCore/platform/graphics/chromium/PlatformIcon.h
+++ b/Source/WebCore/platform/graphics/chromium/PlatformIcon.h
@@ -31,11 +31,11 @@
#ifndef PlatformIcon_h
#define PlatformIcon_h
-typedef struct HICON__* HICON;
-
namespace WebCore {
-typedef HICON PlatformIcon;
+class Image;
+
+typedef Image PlatformIcon;
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp
index 696828f..b3ce9d7 100644
--- a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp
@@ -38,15 +38,17 @@ namespace WebCore {
RenderSurfaceChromium::SharedValues::SharedValues(GraphicsContext3D* context)
: m_context(context)
, m_shaderProgram(0)
+ , m_maskShaderProgram(0)
, m_shaderSamplerLocation(-1)
, m_shaderMatrixLocation(-1)
, m_shaderAlphaLocation(-1)
+ , m_maskShaderSamplerLocation(-1)
+ , m_maskShaderMaskSamplerLocation(-1)
+ , m_maskShaderMatrixLocation(-1)
+ , m_maskShaderAlphaLocation(-1)
, m_initialized(false)
{
- // The following program composites layers whose contents are the results of a previous
- // render operation and therefore doesn't perform any color swizzling. It is used
- // in scrolling and for compositing offscreen textures.
- char renderSurfaceVertexShaderString[] =
+ char vertexShaderString[] =
"attribute vec4 a_position; \n"
"attribute vec2 a_texCoord; \n"
"uniform mat4 matrix; \n"
@@ -56,7 +58,7 @@ RenderSurfaceChromium::SharedValues::SharedValues(GraphicsContext3D* context)
" gl_Position = matrix * a_position; \n"
" v_texCoord = a_texCoord; \n"
"} \n";
- char renderSurfaceFragmentShaderString[] =
+ char fragmentShaderString[] =
"precision mediump float; \n"
"varying vec2 v_texCoord; \n"
"uniform sampler2D s_texture; \n"
@@ -66,9 +68,22 @@ RenderSurfaceChromium::SharedValues::SharedValues(GraphicsContext3D* context)
" vec4 texColor = texture2D(s_texture, v_texCoord); \n"
" gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha; \n"
"} \n";
+ char fragmentShaderWithMaskString[] =
+ "precision mediump float; \n"
+ "varying vec2 v_texCoord; \n"
+ "uniform sampler2D s_texture; \n"
+ "uniform sampler2D s_mask; \n"
+ "uniform float alpha; \n"
+ "void main() \n"
+ "{ \n"
+ " vec4 texColor = texture2D(s_texture, v_texCoord); \n"
+ " vec4 maskColor = texture2D(s_mask, v_texCoord); \n"
+ " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha * maskColor.w; \n"
+ "} \n";
- m_shaderProgram = LayerChromium::createShaderProgram(m_context, renderSurfaceVertexShaderString, renderSurfaceFragmentShaderString);
- if (!m_shaderProgram) {
+ m_shaderProgram = LayerChromium::createShaderProgram(m_context, vertexShaderString, fragmentShaderString);
+ m_maskShaderProgram = LayerChromium::createShaderProgram(m_context, vertexShaderString, fragmentShaderWithMaskString);
+ if (!m_shaderProgram || !m_maskShaderProgram) {
LOG_ERROR("RenderSurfaceChromium: Failed to create shader program");
return;
}
@@ -76,10 +91,24 @@ RenderSurfaceChromium::SharedValues::SharedValues(GraphicsContext3D* context)
GLC(m_context, m_shaderSamplerLocation = m_context->getUniformLocation(m_shaderProgram, "s_texture"));
GLC(m_context, m_shaderMatrixLocation = m_context->getUniformLocation(m_shaderProgram, "matrix"));
GLC(m_context, m_shaderAlphaLocation = m_context->getUniformLocation(m_shaderProgram, "alpha"));
- if (m_shaderSamplerLocation == -1 || m_shaderMatrixLocation == -1 || m_shaderAlphaLocation == -1) {
- LOG_ERROR("Failed to initialize texture layer shader.");
+
+ GLC(m_context, m_maskShaderSamplerLocation = m_context->getUniformLocation(m_maskShaderProgram, "s_texture"));
+ GLC(m_context, m_maskShaderMaskSamplerLocation = m_context->getUniformLocation(m_maskShaderProgram, "s_mask"));
+ GLC(m_context, m_maskShaderMatrixLocation = m_context->getUniformLocation(m_maskShaderProgram, "matrix"));
+ GLC(m_context, m_maskShaderAlphaLocation = m_context->getUniformLocation(m_maskShaderProgram, "alpha"));
+
+ if (m_shaderSamplerLocation == -1 || m_shaderMatrixLocation == -1 || m_shaderAlphaLocation == -1
+ || m_maskShaderSamplerLocation == -1 || m_maskShaderMaskSamplerLocation == -1 || m_maskShaderMatrixLocation == -1 || m_maskShaderAlphaLocation == -1) {
+ LOG_ERROR("Failed to initialize render surface shaders.");
return;
}
+
+ GLC(m_context, m_context->useProgram(m_shaderProgram));
+ GLC(m_context, m_context->uniform1i(m_shaderSamplerLocation, 0));
+ GLC(m_context, m_context->useProgram(m_maskShaderProgram));
+ GLC(m_context, m_context->uniform1i(m_maskShaderSamplerLocation, 0));
+ GLC(m_context, m_context->uniform1i(m_maskShaderMaskSamplerLocation, 1));
+ GLC(m_context, m_context->useProgram(0));
m_initialized = true;
}
@@ -87,10 +116,13 @@ RenderSurfaceChromium::SharedValues::~SharedValues()
{
if (m_shaderProgram)
GLC(m_context, m_context->deleteProgram(m_shaderProgram));
+ if (m_maskShaderProgram)
+ GLC(m_context, m_context->deleteProgram(m_maskShaderProgram));
}
RenderSurfaceChromium::RenderSurfaceChromium(LayerChromium* owningLayer)
: m_owningLayer(owningLayer)
+ , m_maskLayer(0)
, m_skipsDraw(false)
{
}
@@ -116,6 +148,17 @@ LayerRendererChromium* RenderSurfaceChromium::layerRenderer()
return m_owningLayer->layerRenderer();
}
+FloatRect RenderSurfaceChromium::drawableContentRect() const
+{
+ FloatRect localContentRect(-0.5 * m_contentRect.width(), -0.5 * m_contentRect.height(),
+ m_contentRect.width(), m_contentRect.height());
+ FloatRect drawableContentRect = m_drawTransform.mapRect(localContentRect);
+ if (m_owningLayer->replicaLayer())
+ drawableContentRect.unite(m_replicaDrawTransform.mapRect(localContentRect));
+
+ return drawableContentRect;
+}
+
bool RenderSurfaceChromium::prepareContentsTexture()
{
IntSize requiredSize(m_contentRect.size());
@@ -136,24 +179,69 @@ bool RenderSurfaceChromium::prepareContentsTexture()
return true;
}
-void RenderSurfaceChromium::draw()
+void RenderSurfaceChromium::drawSurface(LayerChromium* maskLayer, const TransformationMatrix& drawTransform)
{
- if (m_skipsDraw || !m_contentsTexture)
- return;
-
- m_contentsTexture->bindTexture();
+ GraphicsContext3D* context3D = layerRenderer()->context();
+ int shaderMatrixLocation = -1;
+ int shaderAlphaLocation = -1;
const RenderSurfaceChromium::SharedValues* sv = layerRenderer()->renderSurfaceSharedValues();
ASSERT(sv && sv->initialized());
+ bool useMask = false;
+ if (maskLayer && maskLayer->drawsContent()) {
+ maskLayer->updateContentsIfDirty();
+ if (!maskLayer->bounds().isEmpty()) {
+ context3D->makeContextCurrent();
+ layerRenderer()->useShader(sv->maskShaderProgram());
+ GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE0));
+ m_contentsTexture->bindTexture();
+ GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE1));
+ maskLayer->bindContentsTexture();
+ GLC(context3D, context3D->activeTexture(GraphicsContext3D::TEXTURE0));
+ shaderMatrixLocation = sv->maskShaderMatrixLocation();
+ shaderAlphaLocation = sv->maskShaderAlphaLocation();
+ useMask = true;
+ }
+ }
+
+ if (!useMask) {
+ layerRenderer()->useShader(sv->shaderProgram());
+ m_contentsTexture->bindTexture();
+ shaderMatrixLocation = sv->shaderMatrixLocation();
+ shaderAlphaLocation = sv->shaderAlphaLocation();
+ }
+
+ LayerChromium::drawTexturedQuad(layerRenderer()->context(), layerRenderer()->projectionMatrix(), drawTransform,
+ m_contentRect.width(), m_contentRect.height(), m_drawOpacity,
+ shaderMatrixLocation, shaderAlphaLocation);
+
+ m_contentsTexture->unreserve();
+
+ if (maskLayer)
+ maskLayer->unreserveContentsTexture();
+}
+
+void RenderSurfaceChromium::draw()
+{
+ if (m_skipsDraw || !m_contentsTexture)
+ return;
+ // FIXME: By using the same RenderSurface for both the content and its reflection,
+ // it's currently not possible to apply a separate mask to the reflection layer
+ // or correctly handle opacity in reflections (opacity must be applied after drawing
+ // both the layer and its reflection). The solution is to introduce yet another RenderSurface
+ // to draw the layer and its reflection in. For now we only apply a separate reflection
+ // mask if the contents don't have a mask of their own.
+ LayerChromium* replicaMaskLayer = m_maskLayer;
+ if (!m_maskLayer && m_owningLayer->replicaLayer())
+ replicaMaskLayer = m_owningLayer->replicaLayer()->maskLayer();
- layerRenderer()->useShader(sv->shaderProgram());
layerRenderer()->setScissorToRect(m_scissorRect);
- LayerChromium::drawTexturedQuad(layerRenderer()->context(), layerRenderer()->projectionMatrix(), m_drawTransform,
- m_contentRect.width(), m_contentRect.height(), m_drawOpacity,
- sv->shaderMatrixLocation(), sv->shaderAlphaLocation());
+ // Reflection draws before the layer.
+ if (m_owningLayer->replicaLayer())
+ drawSurface(replicaMaskLayer, m_replicaDrawTransform);
- m_contentsTexture->unreserve();
+ drawSurface(m_maskLayer, m_drawTransform);
}
}
diff --git a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h
index 689a6eb..b1f6a5c 100644
--- a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h
@@ -55,6 +55,11 @@ public:
FloatPoint contentRectCenter() const { return FloatRect(m_contentRect).center(); }
IntRect contentRect() const { return m_contentRect; }
+ // Returns the rect that encloses the RenderSurface including any reflection.
+ FloatRect drawableContentRect() const;
+
+ TransformationMatrix drawTransform() const { return m_drawTransform; }
+
// Stores values that are shared between instances of this class that are
// associated with the same LayerRendererChromium (and hence the same GL
// context).
@@ -64,30 +69,44 @@ public:
~SharedValues();
unsigned shaderProgram() const { return m_shaderProgram; }
+ unsigned maskShaderProgram() const { return m_maskShaderProgram; }
int shaderSamplerLocation() const { return m_shaderSamplerLocation; }
int shaderMatrixLocation() const { return m_shaderMatrixLocation; }
int shaderAlphaLocation() const { return m_shaderAlphaLocation; }
+ int maskShaderSamplerLocation() const { return m_maskShaderSamplerLocation; }
+ int maskShaderMaskSamplerLocation() const { return m_maskShaderMaskSamplerLocation; }
+ int maskShaderMatrixLocation() const { return m_maskShaderMatrixLocation; }
+ int maskShaderAlphaLocation() const { return m_maskShaderAlphaLocation; }
bool initialized() const { return m_initialized; }
private:
GraphicsContext3D* m_context;
unsigned m_shaderProgram;
+ unsigned m_maskShaderProgram;
int m_shaderSamplerLocation;
int m_shaderMatrixLocation;
int m_shaderAlphaLocation;
+ int m_maskShaderSamplerLocation;
+ int m_maskShaderMaskSamplerLocation;
+ int m_maskShaderMatrixLocation;
+ int m_maskShaderAlphaLocation;
bool m_initialized;
};
private:
LayerRendererChromium* layerRenderer();
+ void drawSurface(LayerChromium* maskLayer, const TransformationMatrix& drawTransform);
LayerChromium* m_owningLayer;
+ LayerChromium* m_maskLayer;
+
IntRect m_contentRect;
bool m_skipsDraw;
OwnPtr<LayerTexture> m_contentsTexture;
float m_drawOpacity;
TransformationMatrix m_drawTransform;
+ TransformationMatrix m_replicaDrawTransform;
TransformationMatrix m_originTransform;
IntRect m_scissorRect;
Vector<LayerChromium*> m_layerList;
diff --git a/Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp b/Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
index c23c586..1450c5a 100644
--- a/Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
+++ b/Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
@@ -54,14 +54,9 @@ static inline float scaleEmToUnits(float x, int unitsPerEm)
void SimpleFontData::platformInit()
{
if (!m_platformData.size()) {
- m_ascent = 0;
- m_descent = 0;
- m_lineGap = 0;
- m_lineSpacing = 0;
+ m_fontMetrics.reset();
m_avgCharWidth = 0;
m_maxCharWidth = 0;
- m_xHeight = 0;
- m_unitsPerEm = 0;
return;
}
@@ -82,10 +77,11 @@ void SimpleFontData::platformInit()
m_avgCharWidth = textMetric.tmAveCharWidth;
m_maxCharWidth = textMetric.tmMaxCharWidth;
- m_ascent = textMetric.tmAscent;
- m_descent = textMetric.tmDescent;
- m_lineGap = textMetric.tmExternalLeading;
- m_xHeight = m_ascent * 0.56f; // Best guess for xHeight for non-Truetype fonts.
+ // FIXME: Access ascent/descent/lineGap with floating point precision.
+ float ascent = textMetric.tmAscent;
+ float descent = textMetric.tmDescent;
+ float lineGap = textMetric.tmExternalLeading;
+ float xHeight = ascent * 0.56f; // Best guess for xHeight for non-Truetype fonts.
OUTLINETEXTMETRIC outlineTextMetric;
if (GetOutlineTextMetrics(dc, sizeof(outlineTextMetric), &outlineTextMetric) > 0) {
@@ -94,10 +90,14 @@ void SimpleFontData::platformInit()
MAT2 identityMatrix = {{0, 1}, {0, 0}, {0, 0}, {0, 1}};
DWORD len = GetGlyphOutlineW(dc, 'x', GGO_METRICS, &glyphMetrics, 0, 0, &identityMatrix);
if (len != GDI_ERROR && glyphMetrics.gmBlackBoxY > 0)
- m_xHeight = static_cast<float>(glyphMetrics.gmBlackBoxY);
+ xHeight = static_cast<float>(glyphMetrics.gmBlackBoxY);
}
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setXHeight(xHeight);
+ m_fontMetrics.setLineSpacing(ascent + descent + lineGap);
SelectObject(dc, oldFont);
ReleaseDC(0, dc);
diff --git a/Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp b/Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
index 355d837..9423d1e 100644
--- a/Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
+++ b/Source/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
@@ -55,14 +55,9 @@ static const size_t maxVDMXTableSize = 1024 * 1024; // 1 MB
void SimpleFontData::platformInit()
{
if (!m_platformData.size()) {
- m_ascent = 0;
- m_descent = 0;
- m_lineGap = 0;
- m_lineSpacing = 0;
+ m_fontMetrics.reset();
m_avgCharWidth = 0;
m_maxCharWidth = 0;
- m_xHeight = 0;
- m_unitsPerEm = 0;
return;
}
@@ -88,26 +83,35 @@ void SimpleFontData::platformInit()
fastFree(vdmxTable);
}
+ float ascent;
+ float descent;
+
// Beware those who step here: This code is designed to match Win32 font
// metrics *exactly*.
if (isVDMXValid) {
- m_ascent = vdmxAscent;
- m_descent = -vdmxDescent;
+ ascent = vdmxAscent;
+ descent = -vdmxDescent;
} else {
SkScalar height = -metrics.fAscent + metrics.fDescent + metrics.fLeading;
- m_ascent = SkScalarRound(-metrics.fAscent);
- m_descent = SkScalarRound(height) - m_ascent;
+ ascent = SkScalarRound(-metrics.fAscent);
+ descent = SkScalarRound(height) - ascent;
}
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+
+ float xHeight;
if (metrics.fXHeight)
- m_xHeight = metrics.fXHeight;
+ xHeight = metrics.fXHeight;
else {
// hack taken from the Windows port
- m_xHeight = static_cast<float>(m_ascent) * 0.56;
+ xHeight = ascent * 0.56f;
}
- m_lineGap = SkScalarRound(metrics.fLeading);
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
+ float lineGap = SkScalarToFloat(metrics.fLeading);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setXHeight(xHeight);
+ m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
if (m_orientation == Vertical) {
static const uint32_t vheaTag = SkSetFourByteTag('v', 'h', 'e', 'a');
@@ -128,7 +132,7 @@ void SimpleFontData::platformInit()
if (metrics.fAvgCharWidth)
m_avgCharWidth = SkScalarRound(metrics.fAvgCharWidth);
else {
- m_avgCharWidth = m_xHeight;
+ m_avgCharWidth = xHeight;
GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(this, 0)->page();
diff --git a/Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp b/Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp
index ba66eae..193271d 100644
--- a/Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp
+++ b/Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp
@@ -446,9 +446,9 @@ void TransparencyWin::compositeOpaqueComposite()
identity.reset();
destCanvas->setMatrix(identity);
- destRect.set(m_transformedSourceRect.x(), m_transformedSourceRect.y(), m_transformedSourceRect.right(), m_transformedSourceRect.bottom());
+ destRect.set(m_transformedSourceRect.x(), m_transformedSourceRect.y(), m_transformedSourceRect.maxX(), m_transformedSourceRect.maxY());
} else
- destRect.set(m_sourceRect.x(), m_sourceRect.y(), m_sourceRect.right(), m_sourceRect.bottom());
+ destRect.set(m_sourceRect.x(), m_sourceRect.y(), m_sourceRect.maxX(), m_sourceRect.maxY());
SkPaint paint;
paint.setFilterBitmap(true);
@@ -487,7 +487,7 @@ void TransparencyWin::compositeTextComposite()
SkMatrix identity;
identity.reset();
destCanvas->setMatrix(identity);
- SkRect destRect = { m_transformedSourceRect.x(), m_transformedSourceRect.y(), m_transformedSourceRect.right(), m_transformedSourceRect.bottom() };
+ SkRect destRect = { m_transformedSourceRect.x(), m_transformedSourceRect.y(), m_transformedSourceRect.maxX(), m_transformedSourceRect.maxY() };
// Note that we need to specify the source layer subset, since the bitmap
// may have been cached and it could be larger than what we're using.
diff --git a/Source/WebCore/platform/graphics/chromium/UniscribeHelperTextRun.cpp b/Source/WebCore/platform/graphics/chromium/UniscribeHelperTextRun.cpp
index aa18b4a..c060b43 100644
--- a/Source/WebCore/platform/graphics/chromium/UniscribeHelperTextRun.cpp
+++ b/Source/WebCore/platform/graphics/chromium/UniscribeHelperTextRun.cpp
@@ -51,14 +51,14 @@ UniscribeHelperTextRun::UniscribeHelperTextRun(const TextRun& run,
setLetterSpacing(font.letterSpacing());
setSpaceWidth(font.spaceWidth());
setWordSpacing(font.wordSpacing());
- setAscent(font.primaryFont()->ascent());
+ setAscent(font.fontMetrics().ascent());
init();
- // Padding is the amount to add to make justification happen. This
+ // Expansion is the amount to add to make justification happen. This
// should be done after Init() so all the runs are already measured.
- if (run.padding() > 0)
- justify(run.padding());
+ if (run.expansion() > 0)
+ justify(run.expansion());
}
UniscribeHelperTextRun::UniscribeHelperTextRun(
@@ -121,7 +121,7 @@ bool UniscribeHelperTextRun::nextWinFontData(
m_hfonts.append(simpleFontData->platformData().hfont());
m_scriptCaches.append(simpleFontData->platformData().scriptCache());
m_fontProperties.append(simpleFontData->platformData().scriptFontProperties());
- m_ascents.append(simpleFontData->ascent());
+ m_ascents.append(simpleFontData->fontMetrics().ascent());
}
*hfont = m_hfonts[m_fontIndex - 1];
diff --git a/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp b/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
index 776b83f..41cd180 100644
--- a/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
@@ -60,6 +60,7 @@ VideoLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
, m_rgbaShaderMatrixLocation(0)
, m_rgbaWidthScaleFactorLocation(0)
, m_ccMatrixLocation(0)
+ , m_signAdjLocation(0)
, m_yTextureLocation(0)
, m_uTextureLocation(0)
, m_vTextureLocation(0)
@@ -96,14 +97,15 @@ VideoLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
"uniform sampler2D u_texture; \n"
"uniform sampler2D v_texture; \n"
"uniform float alpha; \n"
+ "uniform float adj; \n"
"uniform mat3 cc_matrix; \n"
"void main() \n"
"{ \n"
" float y = texture2D(y_texture, v_texCoord).x; \n"
- " float u = texture2D(u_texture, v_texCoord).r - .5; \n"
- " float v = texture2D(v_texture, v_texCoord).r - .5; \n"
+ " float u = texture2D(u_texture, v_texCoord).x - adj; \n"
+ " float v = texture2D(v_texture, v_texCoord).x - adj; \n"
" vec3 rgb = cc_matrix * vec3(y, u, v); \n"
- " gl_FragColor = vec4(rgb.x, rgb.y, rgb.z, 1.0) * alpha; \n"
+ " gl_FragColor = vec4(rgb, float(1)) * alpha; \n"
"} \n";
char rgbaFragmentShaderString[] =
@@ -113,7 +115,7 @@ VideoLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
"uniform float alpha; \n"
"void main() \n"
"{ \n"
- " vec4 texColor = texture2D(rgba_texture, vec2(v_texCoord.x, 1.0 - v_texCoord.y)); \n"
+ " vec4 texColor = texture2D(rgba_texture, vec2(v_texCoord.x, float(1) - v_texCoord.y)); \n"
" gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha; \n"
"} \n";
@@ -135,6 +137,7 @@ VideoLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
m_uTextureLocation = m_context->getUniformLocation(m_yuvShaderProgram, "u_texture");
m_vTextureLocation = m_context->getUniformLocation(m_yuvShaderProgram, "v_texture");
m_ccMatrixLocation = m_context->getUniformLocation(m_yuvShaderProgram, "cc_matrix");
+ m_signAdjLocation = m_context->getUniformLocation(m_yuvShaderProgram, "adj");
m_yuvAlphaLocation = m_context->getUniformLocation(m_yuvShaderProgram, "alpha");
ASSERT(m_yuvShaderMatrixLocation != -1);
@@ -143,6 +146,7 @@ VideoLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
ASSERT(m_uTextureLocation != -1);
ASSERT(m_vTextureLocation != -1);
ASSERT(m_ccMatrixLocation != -1);
+ ASSERT(m_signAdjLocation != -1);
ASSERT(m_yuvAlphaLocation != -1);
m_rgbaShaderMatrixLocation = m_context->getUniformLocation(m_rgbaShaderProgram, "matrix");
@@ -375,6 +379,12 @@ void VideoLayerChromium::drawYUV(const SharedValues* sv)
GLC(context, context->uniform1i(sv->uTextureLocation(), 2));
GLC(context, context->uniform1i(sv->vTextureLocation(), 3));
+ // This value of 0.5 maps to 128. It is used in the YUV to RGB conversion
+ // formula to turn unsigned u and v values to signed u and v values.
+ // This is loaded as a uniform because certain drivers have problems
+ // reading literal float values.
+ GLC(context, context->uniform1f(sv->signAdjLocation(), 0.5));
+
GLC(context, context->uniformMatrix3fv(sv->ccMatrixLocation(), 0, const_cast<float*>(yuv2RGB), 1));
drawTexturedQuad(context, layerRenderer()->projectionMatrix(), drawTransform(),
diff --git a/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h b/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h
index 0992ab7..ac3bca9 100644
--- a/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h
@@ -70,6 +70,7 @@ public:
int rgbaAlphaLocation() const { return m_rgbaAlphaLocation; }
int rgbaTextureLocation() const { return m_rgbaTextureLocation; }
int ccMatrixLocation() const { return m_ccMatrixLocation; }
+ int signAdjLocation() const { return m_signAdjLocation; }
bool initialized() const { return m_initialized; }
private:
GraphicsContext3D* m_context;
@@ -80,6 +81,7 @@ public:
int m_rgbaShaderMatrixLocation;
int m_rgbaWidthScaleFactorLocation;
int m_ccMatrixLocation;
+ int m_signAdjLocation;
int m_yTextureLocation;
int m_uTextureLocation;
int m_vTextureLocation;
diff --git a/Source/WebCore/platform/graphics/cocoa/FontPlatformData.h b/Source/WebCore/platform/graphics/cocoa/FontPlatformData.h
index 8cf08fb..ca38029 100644
--- a/Source/WebCore/platform/graphics/cocoa/FontPlatformData.h
+++ b/Source/WebCore/platform/graphics/cocoa/FontPlatformData.h
@@ -25,6 +25,7 @@
#define FontPlatformData_h
#include "FontOrientation.h"
+#include "FontWidthVariant.h"
#include <wtf/text/StringImpl.h>
#ifdef __OBJC__
@@ -59,11 +60,12 @@ inline CTFontRef toCTFontRef(NSFont *nsFont) { return reinterpret_cast<CTFontRef
class FontPlatformData {
public:
- FontPlatformData(float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation = Horizontal)
+ FontPlatformData(float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation = Horizontal, FontWidthVariant widthVariant = RegularWidth)
: m_syntheticBold(syntheticBold)
, m_syntheticOblique(syntheticOblique)
, m_orientation(orientation)
, m_size(size)
+ , m_widthVariant(widthVariant)
, m_font(0)
#ifdef BUILDING_ON_TIGER
, m_cgFont(0)
@@ -72,13 +74,14 @@ class FontPlatformData {
{
}
- FontPlatformData(NSFont *nsFont, float size, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal);
+ FontPlatformData(NSFont*, float size, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
- FontPlatformData(CGFontRef cgFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation)
+ FontPlatformData(CGFontRef cgFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
: m_syntheticBold(syntheticBold)
, m_syntheticOblique(syntheticOblique)
, m_orientation(orientation)
, m_size(size)
+ , m_widthVariant(widthVariant)
, m_font(0)
, m_cgFont(cgFont)
, m_isColorBitmapFont(false)
@@ -96,17 +99,20 @@ class FontPlatformData {
bool syntheticBold() const { return m_syntheticBold; }
bool syntheticOblique() const { return m_syntheticOblique; }
FontOrientation orientation() const { return m_orientation; }
+ FontWidthVariant widthVariant() const { return m_widthVariant; }
bool m_syntheticBold;
bool m_syntheticOblique;
FontOrientation m_orientation;
float m_size;
+
+ FontWidthVariant m_widthVariant;
unsigned hash() const
{
ASSERT(m_font != 0 || m_cgFont == 0);
- uintptr_t hashCodes[2] = { (uintptr_t)m_font, m_orientation << 2 | m_syntheticBold << 1 | m_syntheticOblique };
+ uintptr_t hashCodes[3] = { (uintptr_t)m_font, m_widthVariant, m_orientation << 2 | m_syntheticBold << 1 | m_syntheticOblique };
return WTF::StringHasher::createBlobHash<sizeof(hashCodes)>(hashCodes);
}
@@ -115,7 +121,7 @@ class FontPlatformData {
bool operator==(const FontPlatformData& other) const
{
return m_font == other.m_font && m_syntheticBold == other.m_syntheticBold && m_syntheticOblique == other.m_syntheticOblique &&
- m_cgFont == other.m_cgFont && m_size == other.m_size && m_orientation == other.m_orientation;
+ m_cgFont == other.m_cgFont && m_size == other.m_size && m_orientation == other.m_orientation && m_widthVariant == other.m_widthVariant;
}
NSFont *font() const { return m_font; }
diff --git a/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm b/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
index 8dacbe3..b40f698 100644
--- a/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
+++ b/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
@@ -30,6 +30,9 @@
namespace WebCore {
+// These CoreText Text Spacing feature selectors are not defined in CoreText.
+enum TextSpacingCTFeatureSelector { TextSpacingProportional, TextSpacingFullWidth, TextSpacingHalfWidth, TextSpacingThirdWidth, TextSpacingQuarterWidth };
+
#if PLATFORM(MAC)
void FontPlatformData::loadFont(NSFont* nsFont, float, NSFont*& outNSFont, CGFontRef& cgFont)
{
@@ -42,10 +45,11 @@ void FontPlatformData::loadFont(NSFont* nsFont, float, NSFont*& outNSFont, CGFon
}
#endif // PLATFORM(MAC)
-FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation)
+FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
: m_syntheticBold(syntheticBold)
, m_syntheticOblique(syntheticOblique)
, m_size(size)
+ , m_widthVariant(widthVariant)
, m_font(nsFont)
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
// FIXME: Chromium: The following code isn't correct for the Chromium port since the sandbox might
@@ -79,6 +83,7 @@ FontPlatformData::FontPlatformData(const FontPlatformData& f)
m_syntheticBold = f.m_syntheticBold;
m_syntheticOblique = f.m_syntheticOblique;
m_size = f.m_size;
+ m_widthVariant = f.m_widthVariant;
m_cgFont = f.m_cgFont;
m_isColorBitmapFont = f.m_isColorBitmapFont;
m_orientation = f.m_orientation;
@@ -99,6 +104,7 @@ const FontPlatformData& FontPlatformData::operator=(const FontPlatformData& f)
m_syntheticBold = f.m_syntheticBold;
m_syntheticOblique = f.m_syntheticOblique;
m_size = f.m_size;
+ m_widthVariant = f.m_widthVariant;
m_cgFont = f.m_cgFont;
if (m_font == f.m_font)
return *this;
@@ -165,12 +171,48 @@ bool FontPlatformData::allowsLigatures() const
return ![[m_font coveredCharacterSet] characterIsMember:'a'];
}
+inline int mapFontWidthVariantToCTFeatureSelector(FontWidthVariant variant)
+{
+ switch(variant) {
+ case RegularWidth:
+ return TextSpacingProportional;
+
+ case HalfWidth:
+ return TextSpacingHalfWidth;
+
+ case ThirdWidth:
+ return TextSpacingThirdWidth;
+
+ case QuarterWidth:
+ return TextSpacingQuarterWidth;
+ }
+
+ ASSERT_NOT_REACHED();
+ return TextSpacingProportional;
+}
+
CTFontRef FontPlatformData::ctFont() const
{
- if (m_font)
- return toCTFontRef(m_font);
- if (!m_CTFont)
- m_CTFont.adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), m_size, 0, 0));
+ if (m_widthVariant == RegularWidth) {
+ if (m_font)
+ return toCTFontRef(m_font);
+ if (!m_CTFont)
+ m_CTFont.adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), m_size, 0, 0));
+ return m_CTFont.get();
+ }
+
+ if (!m_CTFont) {
+ int featureTypeValue = kTextSpacingType;
+ int featureSelectorValue = mapFontWidthVariantToCTFeatureSelector(m_widthVariant);
+ RetainPtr<CTFontRef> sourceFont(AdoptCF, CTFontCreateWithGraphicsFont(m_cgFont.get(), m_size, 0, 0));
+ RetainPtr<CTFontDescriptorRef> sourceDescriptor(AdoptCF, CTFontCopyFontDescriptor(sourceFont.get()));
+ RetainPtr<CFNumberRef> featureType(AdoptCF, CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &featureTypeValue));
+ RetainPtr<CFNumberRef> featureSelector(AdoptCF, CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &featureSelectorValue));
+ RetainPtr<CTFontDescriptorRef> newDescriptor(AdoptCF, CTFontDescriptorCreateCopyWithFeature(sourceDescriptor.get(), featureType.get(), featureSelector.get()));
+ RetainPtr<CTFontRef> newFont(AdoptCF, CTFontCreateWithFontDescriptor(newDescriptor.get(), m_size, 0));
+
+ m_CTFont = newFont.get() ? newFont : sourceFont;
+ }
return m_CTFont.get();
}
diff --git a/Source/WebCore/platform/graphics/efl/FontEfl.cpp b/Source/WebCore/platform/graphics/efl/FontEfl.cpp
index d3ca183..83cc7ff 100644
--- a/Source/WebCore/platform/graphics/efl/FontEfl.cpp
+++ b/Source/WebCore/platform/graphics/efl/FontEfl.cpp
@@ -50,6 +50,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
float Font::floatWidthForComplexText(const TextRun&, HashSet<const SimpleFontData*>*, GlyphOverflow*) const
{
notImplemented();
diff --git a/Source/WebCore/platform/graphics/filters/DistantLightSource.cpp b/Source/WebCore/platform/graphics/filters/DistantLightSource.cpp
new file mode 100644
index 0000000..4c3b49b
--- /dev/null
+++ b/Source/WebCore/platform/graphics/filters/DistantLightSource.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
+ * Copyright (C) 2005 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org>
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Renata Hodovan <reni@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(FILTERS)
+#include "DistantLightSource.h"
+
+#include "RenderTreeAsText.h"
+
+namespace WebCore {
+
+void DistantLightSource::initPaintingData(PaintingData& paintingData)
+{
+ float azimuth = deg2rad(m_azimuth);
+ float elevation = deg2rad(m_elevation);
+ paintingData.lightVector.setX(cosf(azimuth) * cosf(elevation));
+ paintingData.lightVector.setY(sinf(azimuth) * cosf(elevation));
+ paintingData.lightVector.setZ(sinf(elevation));
+ paintingData.lightVectorLength = 1;
+}
+
+void DistantLightSource::updatePaintingData(PaintingData&, int, int, float)
+{
+}
+
+bool DistantLightSource::setAzimuth(float azimuth)
+{
+ if (m_azimuth == azimuth)
+ return false;
+ m_azimuth = azimuth;
+ return true;
+}
+
+bool DistantLightSource::setElevation(float elevation)
+{
+ if (m_elevation == elevation)
+ return false;
+ m_elevation = elevation;
+ return true;
+}
+
+TextStream& DistantLightSource::externalRepresentation(TextStream& ts) const
+{
+ ts << "[type=DISTANT-LIGHT] ";
+ ts << "[azimuth=\"" << azimuth() << "\"]";
+ ts << "[elevation=\"" << elevation() << "\"]";
+ return ts;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS)
diff --git a/Source/WebCore/platform/graphics/filters/DistantLightSource.h b/Source/WebCore/platform/graphics/filters/DistantLightSource.h
index d5d474f..1e19c62 100644
--- a/Source/WebCore/platform/graphics/filters/DistantLightSource.h
+++ b/Source/WebCore/platform/graphics/filters/DistantLightSource.h
@@ -36,7 +36,9 @@ public:
}
float azimuth() const { return m_azimuth; }
+ bool setAzimuth(float);
float elevation() const { return m_elevation; }
+ bool setElevation(float);
virtual void initPaintingData(PaintingData&);
virtual void updatePaintingData(PaintingData&, int x, int y, float z);
diff --git a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp
index a8a825a..5f9d049 100644
--- a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp
+++ b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp
@@ -52,9 +52,12 @@ Color FEDiffuseLighting::lightingColor() const
return m_lightingColor;
}
-void FEDiffuseLighting::setLightingColor(const Color& lightingColor)
+bool FEDiffuseLighting::setLightingColor(const Color& lightingColor)
{
+ if (m_lightingColor == lightingColor)
+ return false;
m_lightingColor = lightingColor;
+ return true;
}
float FEDiffuseLighting::surfaceScale() const
@@ -62,9 +65,12 @@ float FEDiffuseLighting::surfaceScale() const
return m_surfaceScale;
}
-void FEDiffuseLighting::setSurfaceScale(float surfaceScale)
+bool FEDiffuseLighting::setSurfaceScale(float surfaceScale)
{
+ if (m_surfaceScale == surfaceScale)
+ return false;
m_surfaceScale = surfaceScale;
+ return true;
}
float FEDiffuseLighting::diffuseConstant() const
@@ -72,9 +78,12 @@ float FEDiffuseLighting::diffuseConstant() const
return m_diffuseConstant;
}
-void FEDiffuseLighting::setDiffuseConstant(float diffuseConstant)
+bool FEDiffuseLighting::setDiffuseConstant(float diffuseConstant)
{
+ if (m_diffuseConstant == diffuseConstant)
+ return false;
m_diffuseConstant = diffuseConstant;
+ return true;
}
float FEDiffuseLighting::kernelUnitLengthX() const
@@ -82,9 +91,12 @@ float FEDiffuseLighting::kernelUnitLengthX() const
return m_kernelUnitLengthX;
}
-void FEDiffuseLighting::setKernelUnitLengthX(float kernelUnitLengthX)
+bool FEDiffuseLighting::setKernelUnitLengthX(float kernelUnitLengthX)
{
+ if (m_kernelUnitLengthX == kernelUnitLengthX)
+ return false;
m_kernelUnitLengthX = kernelUnitLengthX;
+ return true;
}
float FEDiffuseLighting::kernelUnitLengthY() const
@@ -92,9 +104,12 @@ float FEDiffuseLighting::kernelUnitLengthY() const
return m_kernelUnitLengthY;
}
-void FEDiffuseLighting::setKernelUnitLengthY(float kernelUnitLengthY)
+bool FEDiffuseLighting::setKernelUnitLengthY(float kernelUnitLengthY)
{
+ if (m_kernelUnitLengthY == kernelUnitLengthY)
+ return false;
m_kernelUnitLengthY = kernelUnitLengthY;
+ return true;
}
const LightSource* FEDiffuseLighting::lightSource() const
diff --git a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h
index b58b47a..5f20651 100644
--- a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h
+++ b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h
@@ -36,19 +36,19 @@ public:
virtual ~FEDiffuseLighting();
Color lightingColor() const;
- void setLightingColor(const Color&);
+ bool setLightingColor(const Color&);
float surfaceScale() const;
- void setSurfaceScale(float);
+ bool setSurfaceScale(float);
float diffuseConstant() const;
- void setDiffuseConstant(float);
+ bool setDiffuseConstant(float);
float kernelUnitLengthX() const;
- void setKernelUnitLengthX(float);
+ bool setKernelUnitLengthX(float);
float kernelUnitLengthY() const;
- void setKernelUnitLengthY(float);
+ bool setKernelUnitLengthY(float);
const LightSource* lightSource() const;
void setLightSource(PassRefPtr<LightSource>);
diff --git a/Source/WebCore/platform/graphics/filters/FilterEffect.cpp b/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
index 85154b5..f07d00c 100644
--- a/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
+++ b/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
@@ -77,6 +77,16 @@ FilterEffect* FilterEffect::inputEffect(unsigned number) const
return m_inputEffects.at(number).get();
}
+void FilterEffect::clearResult()
+{
+ if (m_imageBufferResult)
+ m_imageBufferResult.clear();
+ if (m_unmultipliedImageResult)
+ m_unmultipliedImageResult.clear();
+ if (m_premultipliedImageResult)
+ m_premultipliedImageResult.clear();
+}
+
ImageBuffer* FilterEffect::asImageBuffer()
{
if (!hasResult())
@@ -109,7 +119,7 @@ PassRefPtr<ByteArray> FilterEffect::asPremultipliedImage(const IntRect& rect)
inline void FilterEffect::copyImageBytes(ByteArray* source, ByteArray* destination, const IntRect& rect)
{
// Copy the necessary lines.
- if (rect.x() < 0 || rect.y() < 0 || rect.bottom() > m_absolutePaintRect.width() || rect.bottom() > m_absolutePaintRect.height())
+ if (rect.x() < 0 || rect.y() < 0 || rect.maxY() > m_absolutePaintRect.width() || rect.maxY() > m_absolutePaintRect.height())
memset(destination->data(), 0, destination->length());
int xOrigin = rect.x();
@@ -118,7 +128,7 @@ inline void FilterEffect::copyImageBytes(ByteArray* source, ByteArray* destinati
xDest = -xOrigin;
xOrigin = 0;
}
- int xEnd = rect.right();
+ int xEnd = rect.maxX();
if (xEnd > m_absolutePaintRect.width())
xEnd = m_absolutePaintRect.width();
@@ -128,7 +138,7 @@ inline void FilterEffect::copyImageBytes(ByteArray* source, ByteArray* destinati
yDest = -yOrigin;
yOrigin = 0;
}
- int yEnd = rect.bottom();
+ int yEnd = rect.maxY();
if (yEnd > m_absolutePaintRect.height())
yEnd = m_absolutePaintRect.height();
diff --git a/Source/WebCore/platform/graphics/filters/FilterEffect.h b/Source/WebCore/platform/graphics/filters/FilterEffect.h
index 062dd1b..2de8ac5 100644
--- a/Source/WebCore/platform/graphics/filters/FilterEffect.h
+++ b/Source/WebCore/platform/graphics/filters/FilterEffect.h
@@ -53,6 +53,7 @@ public:
virtual ~FilterEffect();
bool hasResult() const { return m_imageBufferResult || m_unmultipliedImageResult || m_premultipliedImageResult; }
+ void clearResult();
ImageBuffer* asImageBuffer();
PassRefPtr<ByteArray> asUnmultipliedImage(const IntRect&);
PassRefPtr<ByteArray> asPremultipliedImage(const IntRect&);
diff --git a/Source/WebCore/platform/graphics/filters/LightSource.cpp b/Source/WebCore/platform/graphics/filters/LightSource.cpp
index de0691e..cf262e8 100644
--- a/Source/WebCore/platform/graphics/filters/LightSource.cpp
+++ b/Source/WebCore/platform/graphics/filters/LightSource.cpp
@@ -3,6 +3,7 @@
* Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
* Copyright (C) 2005 Eric Seidel <eric@webkit.org>
* Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org>
+ * Copyright (C) 2011 Renata Hodovan <reni@webkit.org>, University of Szeged.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -33,136 +34,80 @@
namespace WebCore {
-void PointLightSource::initPaintingData(PaintingData&)
+bool LightSource::setAzimuth(float azimuth)
{
+ if (m_type == LS_DISTANT)
+ return static_cast<DistantLightSource*>(this)->setAzimuth(azimuth);
+ return false;
}
-void PointLightSource::updatePaintingData(PaintingData& paintingData, int x, int y, float z)
+bool LightSource::setElevation(float elevation)
{
- paintingData.lightVector.setX(m_position.x() - x);
- paintingData.lightVector.setY(m_position.y() - y);
- paintingData.lightVector.setZ(m_position.z() - z);
- paintingData.lightVectorLength = paintingData.lightVector.length();
+ if (m_type == LS_DISTANT)
+ return static_cast<DistantLightSource*>(this)->setElevation(elevation);
+ return false;
}
-// spot-light edge darkening depends on an absolute treshold
-// according to the SVG 1.1 SE light regression tests
-static const float antiAliasTreshold = 0.016f;
-
-void SpotLightSource::initPaintingData(PaintingData& paintingData)
+bool LightSource::setX(float x)
{
- paintingData.privateColorVector = paintingData.colorVector;
- paintingData.directionVector.setX(m_direction.x() - m_position.x());
- paintingData.directionVector.setY(m_direction.y() - m_position.y());
- paintingData.directionVector.setZ(m_direction.z() - m_position.z());
- paintingData.directionVector.normalize();
-
- if (!m_limitingConeAngle) {
- paintingData.coneCutOffLimit = 0.0f;
- paintingData.coneFullLight = -antiAliasTreshold;
- } else {
- float limitingConeAngle = m_limitingConeAngle;
- if (limitingConeAngle < 0.0f)
- limitingConeAngle = -limitingConeAngle;
- if (limitingConeAngle > 90.0f)
- limitingConeAngle = 90.0f;
- paintingData.coneCutOffLimit = cosf(deg2rad(180.0f - limitingConeAngle));
- paintingData.coneFullLight = paintingData.coneCutOffLimit - antiAliasTreshold;
- }
-
- // Optimization for common specularExponent values
- if (!m_specularExponent)
- paintingData.specularExponent = 0;
- else if (m_specularExponent == 1.0f)
- paintingData.specularExponent = 1;
- else // It is neither 0.0f nor 1.0f
- paintingData.specularExponent = 2;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setX(x);
+ if (m_type == LS_POINT)
+ return static_cast<PointLightSource*>(this)->setX(x);
+ return false;
}
-void SpotLightSource::updatePaintingData(PaintingData& paintingData, int x, int y, float z)
+bool LightSource::setY(float y)
{
- paintingData.lightVector.setX(m_position.x() - x);
- paintingData.lightVector.setY(m_position.y() - y);
- paintingData.lightVector.setZ(m_position.z() - z);
- paintingData.lightVectorLength = paintingData.lightVector.length();
-
- float cosineOfAngle = (paintingData.lightVector * paintingData.directionVector) / paintingData.lightVectorLength;
- if (cosineOfAngle > paintingData.coneCutOffLimit) {
- // No light is produced, scanlines are not updated
- paintingData.colorVector.setX(0.0f);
- paintingData.colorVector.setY(0.0f);
- paintingData.colorVector.setZ(0.0f);
- return;
- }
-
- // Set the color of the pixel
- float lightStrength;
- switch (paintingData.specularExponent) {
- case 0:
- lightStrength = 1.0f; // -cosineOfAngle ^ 0 == 1
- break;
- case 1:
- lightStrength = -cosineOfAngle; // -cosineOfAngle ^ 1 == -cosineOfAngle
- break;
- default:
- lightStrength = powf(-cosineOfAngle, m_specularExponent);
- break;
- }
-
- if (cosineOfAngle > paintingData.coneFullLight)
- lightStrength *= (paintingData.coneCutOffLimit - cosineOfAngle) / (paintingData.coneCutOffLimit - paintingData.coneFullLight);
-
- if (lightStrength > 1.0f)
- lightStrength = 1.0f;
-
- paintingData.colorVector.setX(paintingData.privateColorVector.x() * lightStrength);
- paintingData.colorVector.setY(paintingData.privateColorVector.y() * lightStrength);
- paintingData.colorVector.setZ(paintingData.privateColorVector.z() * lightStrength);
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setY(y);
+ if (m_type == LS_POINT)
+ return static_cast<PointLightSource*>(this)->setY(y);
+ return false;
}
-void DistantLightSource::initPaintingData(PaintingData& paintingData)
+bool LightSource::setZ(float z)
{
- float azimuth = deg2rad(m_azimuth);
- float elevation = deg2rad(m_elevation);
- paintingData.lightVector.setX(cosf(azimuth) * cosf(elevation));
- paintingData.lightVector.setY(sinf(azimuth) * cosf(elevation));
- paintingData.lightVector.setZ(sinf(elevation));
- paintingData.lightVectorLength = 1;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setZ(z);
+ if (m_type == LS_POINT)
+ return static_cast<PointLightSource*>(this)->setZ(z);
+ return false;
}
-void DistantLightSource::updatePaintingData(PaintingData&, int, int, float)
+bool LightSource::setPointsAtX(float pointsAtX)
{
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setPointsAtX(pointsAtX);
+ return false;
}
-static TextStream& operator<<(TextStream& ts, const FloatPoint3D& p)
+bool LightSource::setPointsAtY(float pointsAtY)
{
- ts << "x=" << p.x() << " y=" << p.y() << " z=" << p.z();
- return ts;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setPointsAtY(pointsAtY);
+ return false;
}
-TextStream& PointLightSource::externalRepresentation(TextStream& ts) const
+bool LightSource::setPointsAtZ(float pointsAtZ)
{
- ts << "[type=POINT-LIGHT] ";
- ts << "[position=\"" << position() << "\"]";
- return ts;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setPointsAtZ(pointsAtZ);
+ return false;
}
-TextStream& SpotLightSource::externalRepresentation(TextStream& ts) const
+bool LightSource::setSpecularExponent(float specularExponent)
{
- ts << "[type=SPOT-LIGHT] ";
- ts << "[position=\"" << position() << "\"]";
- ts << "[direction=\"" << direction() << "\"]";
- ts << "[specularExponent=\"" << specularExponent() << "\"]";
- ts << "[limitingConeAngle=\"" << limitingConeAngle() << "\"]";
- return ts;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setSpecularExponent(specularExponent);
+ return false;
}
-TextStream& DistantLightSource::externalRepresentation(TextStream& ts) const
+bool LightSource::setLimitingConeAngle(float limitingConeAngle)
{
- ts << "[type=DISTANT-LIGHT] ";
- ts << "[azimuth=\"" << azimuth() << "\"]";
- ts << "[elevation=\"" << elevation() << "\"]";
- return ts;
+ if (m_type == LS_SPOT)
+ return static_cast<SpotLightSource*>(this)->setLimitingConeAngle(limitingConeAngle);
+ return false;
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/filters/LightSource.h b/Source/WebCore/platform/graphics/filters/LightSource.h
index 013e910..24c319a 100644
--- a/Source/WebCore/platform/graphics/filters/LightSource.h
+++ b/Source/WebCore/platform/graphics/filters/LightSource.h
@@ -74,6 +74,17 @@ public:
// specified "surfaceScale" constant, which type is <number> in the SVG standard
virtual void updatePaintingData(PaintingData&, int x, int y, float z) = 0;
+ bool setAzimuth(float);
+ bool setElevation(float);
+ bool setX(float);
+ bool setY(float);
+ bool setZ(float);
+ bool setPointsAtX(float);
+ bool setPointsAtY(float);
+ bool setPointsAtZ(float);
+ bool setSpecularExponent(float);
+ bool setLimitingConeAngle(float);
+
private:
LightType m_type;
};
diff --git a/Source/WebCore/platform/graphics/filters/PointLightSource.cpp b/Source/WebCore/platform/graphics/filters/PointLightSource.cpp
new file mode 100644
index 0000000..207ed8e
--- /dev/null
+++ b/Source/WebCore/platform/graphics/filters/PointLightSource.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
+ * Copyright (C) 2005 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org>
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Renata Hodovan <reni@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(FILTERS)
+#include "PointLightSource.h"
+
+#include "TextStream.h"
+
+namespace WebCore {
+
+void PointLightSource::initPaintingData(PaintingData&)
+{
+}
+
+void PointLightSource::updatePaintingData(PaintingData& paintingData, int x, int y, float z)
+{
+ paintingData.lightVector.setX(m_position.x() - x);
+ paintingData.lightVector.setY(m_position.y() - y);
+ paintingData.lightVector.setZ(m_position.z() - z);
+ paintingData.lightVectorLength = paintingData.lightVector.length();
+}
+
+bool PointLightSource::setX(float x)
+{
+ if (m_position.x() == x)
+ return false;
+ m_position.setX(x);
+ return true;
+}
+
+bool PointLightSource::setY(float y)
+{
+ if (m_position.y() == y)
+ return false;
+ m_position.setY(y);
+ return true;
+}
+
+bool PointLightSource::setZ(float z)
+{
+ if (m_position.z() == z)
+ return false;
+ m_position.setZ(z);
+ return true;
+}
+
+static TextStream& operator<<(TextStream& ts, const FloatPoint3D& p)
+{
+ ts << "x=" << p.x() << " y=" << p.y() << " z=" << p.z();
+ return ts;
+}
+
+TextStream& PointLightSource::externalRepresentation(TextStream& ts) const
+{
+ ts << "[type=POINT-LIGHT] ";
+ ts << "[position=\"" << position() << "\"]";
+ return ts;
+}
+
+}; // namespace WebCore
+
+#endif // ENABLE(FILTERS)
diff --git a/Source/WebCore/platform/graphics/filters/PointLightSource.h b/Source/WebCore/platform/graphics/filters/PointLightSource.h
index 163c829..a93bf2c 100644
--- a/Source/WebCore/platform/graphics/filters/PointLightSource.h
+++ b/Source/WebCore/platform/graphics/filters/PointLightSource.h
@@ -36,6 +36,9 @@ public:
}
const FloatPoint3D& position() const { return m_position; }
+ bool setX(float);
+ bool setY(float);
+ bool setZ(float);
virtual void initPaintingData(PaintingData&);
virtual void updatePaintingData(PaintingData&, int x, int y, float z);
diff --git a/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp b/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp
new file mode 100644
index 0000000..648fcae
--- /dev/null
+++ b/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com>
+ * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
+ * Copyright (C) 2005 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org>
+ * Copyright (C) 2011 University of Szeged
+ * Copyright (C) 2011 Renata Hodovan <reni@webkit.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(FILTERS)
+#include "SpotLightSource.h"
+
+#include "TextStream.h"
+
+namespace WebCore {
+
+// spot-light edge darkening depends on an absolute treshold
+// according to the SVG 1.1 SE light regression tests
+static const float antiAliasTreshold = 0.016f;
+
+void SpotLightSource::initPaintingData(PaintingData& paintingData)
+{
+ paintingData.privateColorVector = paintingData.colorVector;
+ paintingData.directionVector.setX(m_direction.x() - m_position.x());
+ paintingData.directionVector.setY(m_direction.y() - m_position.y());
+ paintingData.directionVector.setZ(m_direction.z() - m_position.z());
+ paintingData.directionVector.normalize();
+
+ if (!m_limitingConeAngle) {
+ paintingData.coneCutOffLimit = 0.0f;
+ paintingData.coneFullLight = -antiAliasTreshold;
+ } else {
+ float limitingConeAngle = m_limitingConeAngle;
+ if (limitingConeAngle < 0.0f)
+ limitingConeAngle = -limitingConeAngle;
+ if (limitingConeAngle > 90.0f)
+ limitingConeAngle = 90.0f;
+ paintingData.coneCutOffLimit = cosf(deg2rad(180.0f - limitingConeAngle));
+ paintingData.coneFullLight = paintingData.coneCutOffLimit - antiAliasTreshold;
+ }
+
+ // Optimization for common specularExponent values
+ if (!m_specularExponent)
+ paintingData.specularExponent = 0;
+ else if (m_specularExponent == 1.0f)
+ paintingData.specularExponent = 1;
+ else // It is neither 0.0f nor 1.0f
+ paintingData.specularExponent = 2;
+}
+
+void SpotLightSource::updatePaintingData(PaintingData& paintingData, int x, int y, float z)
+{
+ paintingData.lightVector.setX(m_position.x() - x);
+ paintingData.lightVector.setY(m_position.y() - y);
+ paintingData.lightVector.setZ(m_position.z() - z);
+ paintingData.lightVectorLength = paintingData.lightVector.length();
+
+ float cosineOfAngle = (paintingData.lightVector * paintingData.directionVector) / paintingData.lightVectorLength;
+ if (cosineOfAngle > paintingData.coneCutOffLimit) {
+ // No light is produced, scanlines are not updated
+ paintingData.colorVector.setX(0.0f);
+ paintingData.colorVector.setY(0.0f);
+ paintingData.colorVector.setZ(0.0f);
+ return;
+ }
+
+ // Set the color of the pixel
+ float lightStrength;
+ switch (paintingData.specularExponent) {
+ case 0:
+ lightStrength = 1.0f; // -cosineOfAngle ^ 0 == 1
+ break;
+ case 1:
+ lightStrength = -cosineOfAngle; // -cosineOfAngle ^ 1 == -cosineOfAngle
+ break;
+ default:
+ lightStrength = powf(-cosineOfAngle, m_specularExponent);
+ break;
+ }
+
+ if (cosineOfAngle > paintingData.coneFullLight)
+ lightStrength *= (paintingData.coneCutOffLimit - cosineOfAngle) / (paintingData.coneCutOffLimit - paintingData.coneFullLight);
+
+ if (lightStrength > 1.0f)
+ lightStrength = 1.0f;
+
+ paintingData.colorVector.setX(paintingData.privateColorVector.x() * lightStrength);
+ paintingData.colorVector.setY(paintingData.privateColorVector.y() * lightStrength);
+ paintingData.colorVector.setZ(paintingData.privateColorVector.z() * lightStrength);
+}
+
+bool SpotLightSource::setX(float x)
+{
+ if (m_position.x() == x)
+ return false;
+ m_position.setX(x);
+ return true;
+}
+
+bool SpotLightSource::setY(float y)
+{
+ if (m_position.y() == y)
+ return false;
+ m_position.setY(y);
+ return true;
+}
+
+bool SpotLightSource::setZ(float z)
+{
+ if (m_position.z() == z)
+ return false;
+ m_position.setZ(z);
+ return true;
+}
+
+bool SpotLightSource::setPointsAtX(float pointsAtX)
+{
+ if (m_direction.x() == pointsAtX)
+ return false;
+ m_direction.setX(pointsAtX);
+ return true;
+}
+
+bool SpotLightSource::setPointsAtY(float pointsAtY)
+{
+ if (m_direction.y() == pointsAtY)
+ return false;
+ m_direction.setY(pointsAtY);
+ return true;
+}
+
+bool SpotLightSource::setPointsAtZ(float pointsAtZ)
+{
+ if (m_direction.z() == pointsAtZ)
+ return false;
+ m_direction.setZ(pointsAtZ);
+ return true;
+}
+
+bool SpotLightSource::setSpecularExponent(float specularExponent)
+{
+ if (m_specularExponent == specularExponent)
+ return false;
+ m_specularExponent = specularExponent;
+ return true;
+}
+
+bool SpotLightSource::setLimitingConeAngle(float limitingConeAngle)
+{
+ if (m_limitingConeAngle == limitingConeAngle)
+ return false;
+ m_limitingConeAngle = limitingConeAngle;
+ return true;
+}
+
+static TextStream& operator<<(TextStream& ts, const FloatPoint3D& p)
+{
+ ts << "x=" << p.x() << " y=" << p.y() << " z=" << p.z();
+ return ts;
+}
+
+TextStream& SpotLightSource::externalRepresentation(TextStream& ts) const
+{
+ ts << "[type=SPOT-LIGHT] ";
+ ts << "[position=\"" << position() << "\"]";
+ ts << "[direction=\"" << direction() << "\"]";
+ ts << "[specularExponent=\"" << specularExponent() << "\"]";
+ ts << "[limitingConeAngle=\"" << limitingConeAngle() << "\"]";
+ return ts;
+}
+
+}; // namespace WebCore
+
+#endif // ENABLE(FILTERS)
diff --git a/Source/WebCore/platform/graphics/filters/SpotLightSource.h b/Source/WebCore/platform/graphics/filters/SpotLightSource.h
index cd6a614..b4f1b61 100644
--- a/Source/WebCore/platform/graphics/filters/SpotLightSource.h
+++ b/Source/WebCore/platform/graphics/filters/SpotLightSource.h
@@ -37,10 +37,18 @@ public:
}
const FloatPoint3D& position() const { return m_position; }
+ bool setX(float);
+ bool setY(float);
+ bool setZ(float);
const FloatPoint3D& direction() const { return m_direction; }
+ bool setPointsAtX(float);
+ bool setPointsAtY(float);
+ bool setPointsAtZ(float);
float specularExponent() const { return m_specularExponent; }
+ bool setSpecularExponent(float);
float limitingConeAngle() const { return m_limitingConeAngle; }
+ bool setLimitingConeAngle(float);
virtual void initPaintingData(PaintingData&);
virtual void updatePaintingData(PaintingData&, int x, int y, float z);
diff --git a/Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp b/Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
index c547224..841c8a3 100644
--- a/Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
+++ b/Source/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
@@ -59,7 +59,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
cairo_font_face_destroy(m_fontFace);
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode)
{
return FontPlatformData(m_fontFace, size, bold, italic);
}
diff --git a/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp b/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
index 97fd81a..6290eeb 100644
--- a/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
+++ b/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
@@ -50,21 +50,28 @@ void SimpleFontData::platformInit()
cairo_font_extents_t font_extents;
cairo_text_extents_t text_extents;
cairo_scaled_font_extents(m_platformData.scaledFont(), &font_extents);
- m_ascent = static_cast<int>(lroundf(font_extents.ascent));
- m_descent = static_cast<int>(lroundf(font_extents.descent));
- m_lineSpacing = static_cast<int>(lroundf(font_extents.height));
+
+ m_fontMetrics.setAscent(font_extents.ascent);
+ m_fontMetrics.setDescent(font_extents.descent);
+
// There seems to be some rounding error in cairo (or in how we
// use cairo) with some fonts, like DejaVu Sans Mono, which makes
// cairo report a height smaller than ascent + descent, which is
// wrong and confuses WebCore's layout system. Workaround this
// while we figure out what's going on.
- if (m_lineSpacing < m_ascent + m_descent)
- m_lineSpacing = m_ascent + m_descent;
+ float lineSpacing = font_extents.height;
+ if (lineSpacing < font_extents.ascent + font_extents.descent)
+ lineSpacing = font_extents.ascent + font_extents.descent;
+
+ m_fontMetrics.setLineSpacing(lroundf(lineSpacing));
+ m_fontMetrics.setLineGap(lineSpacing - font_extents.ascent - font_extents.descent);
+
cairo_scaled_font_text_extents(m_platformData.scaledFont(), "x", &text_extents);
- m_xHeight = text_extents.height;
+ m_fontMetrics.setXHeight(text_extents.height);
+
cairo_scaled_font_text_extents(m_platformData.scaledFont(), " ", &text_extents);
m_spaceWidth = static_cast<float>(text_extents.x_advance);
- m_lineGap = m_lineSpacing - m_ascent - m_descent;
+
m_syntheticBoldOffset = m_platformData.syntheticBold() ? 1.0f : 0.f;
}
diff --git a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
index dae83a2..2a83fcf 100644
--- a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(3D_CANVAS)
+#if ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(WEBGL)
#include "DrawingBuffer.h"
@@ -41,10 +41,11 @@ namespace WebCore {
PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, const IntSize& size)
{
Extensions3D* extensions = context->getExtensions();
- bool multisampleSupported = extensions->supports("GL_ANGLE_framebuffer_blit") && extensions->supports("GL_ANGLE_framebuffer_multisample");
+ bool multisampleSupported = extensions->supports("GL_ANGLE_framebuffer_blit") && extensions->supports("GL_ANGLE_framebuffer_multisample") && extensions->supports("GL_OES_rgb8_rgba8");
if (multisampleSupported) {
extensions->ensureEnabled("GL_ANGLE_framebuffer_blit");
extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample");
+ extensions->ensureEnabled("GL_OES_rgb8_rgba8");
}
bool packedDepthStencilSupported = extensions->supports("GL_OES_packed_depth_stencil");
if (packedDepthStencilSupported)
@@ -145,8 +146,6 @@ void DrawingBuffer::resizeDepthStencil(int sampleCount)
void DrawingBuffer::reset(const IntSize& newSize)
{
- if (m_size == newSize)
- return;
m_size = newSize;
if (!m_context)
@@ -155,13 +154,15 @@ void DrawingBuffer::reset(const IntSize& newSize)
m_context->makeContextCurrent();
const GraphicsContext3D::Attributes& attributes = m_context->getContextAttributes();
- unsigned long internalColorFormat, colorFormat;
+ unsigned long internalColorFormat, colorFormat, internalRenderbufferFormat;
if (attributes.alpha) {
internalColorFormat = GraphicsContext3D::RGBA;
colorFormat = GraphicsContext3D::RGBA;
+ internalRenderbufferFormat = Extensions3D::RGBA8_OES;
} else {
internalColorFormat = GraphicsContext3D::RGB;
colorFormat = GraphicsContext3D::RGB;
+ internalRenderbufferFormat = Extensions3D::RGB8_OES;
}
@@ -175,7 +176,7 @@ void DrawingBuffer::reset(const IntSize& newSize)
m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_multisampleColorBuffer);
- m_context->getExtensions()->renderbufferStorageMultisample(GraphicsContext3D::RENDERBUFFER, sampleCount, internalColorFormat, m_size.width(), m_size.height());
+ m_context->getExtensions()->renderbufferStorageMultisample(GraphicsContext3D::RENDERBUFFER, sampleCount, internalRenderbufferFormat, m_size.width(), m_size.height());
m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::RENDERBUFFER, m_multisampleColorBuffer);
resizeDepthStencil(sampleCount);
if (m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
@@ -192,7 +193,8 @@ void DrawingBuffer::reset(const IntSize& newSize)
m_context->texImage2DResourceSafe(GraphicsContext3D::TEXTURE_2D, 0, internalColorFormat, m_size.width(), m_size.height(), 0, colorFormat, GraphicsContext3D::UNSIGNED_BYTE);
m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, m_colorBuffer, 0);
m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0);
- resizeDepthStencil(0);
+ if (!multisample())
+ resizeDepthStencil(0);
if (m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
// Cleanup
clear();
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.cpp b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.cpp
new file mode 100644
index 0000000..35f15e5
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "LoopBlinnPathCache.h"
+
+namespace WebCore {
+
+LoopBlinnPathCache::LoopBlinnPathCache()
+{
+}
+
+LoopBlinnPathCache::~LoopBlinnPathCache()
+{
+}
+
+void LoopBlinnPathCache::addVertex(float x, float y,
+ float k, float l, float m)
+{
+ m_vertices.append(x);
+ m_vertices.append(y);
+ m_texcoords.append(k);
+ m_texcoords.append(l);
+ m_texcoords.append(m);
+}
+
+void LoopBlinnPathCache::clear()
+{
+ m_vertices.clear();
+ m_texcoords.clear();
+ m_interiorVertices.clear();
+#ifdef LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+ m_interiorEdgeVertices.clear();
+#endif // LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+}
+
+void LoopBlinnPathCache::addInteriorVertex(float x, float y)
+{
+ m_interiorVertices.append(x);
+ m_interiorVertices.append(y);
+}
+
+#ifdef LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+unsigned LoopBlinnPathCache::numberOfInteriorEdgeVertices() const
+{
+ return m_interiorEdgeVertices.size() / 2;
+}
+
+const float* LoopBlinnPathCache::interiorEdgeVertices() const
+{
+ if (!numberOfInteriorEdgeVertices())
+ return 0;
+ return m_interiorEdgeVertices.data();
+}
+
+void LoopBlinnPathCache::addInteriorEdgeVertex(float x, float y)
+{
+ m_interiorEdgeVertices.append(x);
+ m_interiorEdgeVertices.append(y);
+}
+#endif // LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.h b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.h
new file mode 100644
index 0000000..d21d246
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathCache.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LoopBlinnPathCache_h
+#define LoopBlinnPathCache_h
+
+#include <wtf/Noncopyable.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+// A cache of the processed triangle mesh for a given path. Because these
+// might be expensive to allocate (using malloc/free internally), it is
+// recommended to try to reuse them when possible.
+
+// Uncomment the following to obtain debugging information for the edges
+// facing the interior region of the mesh.
+// #define LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+
+class LoopBlinnPathCache {
+ WTF_MAKE_NONCOPYABLE(LoopBlinnPathCache);
+public:
+ LoopBlinnPathCache();
+ ~LoopBlinnPathCache();
+
+ unsigned numberOfVertices() const { return m_vertices.size() / 2; }
+
+ // Get the base pointer to the vertex information. There are two
+ // coordinates per vertex. This pointer is valid until the cache is
+ // cleared or another vertex is added. Returns 0 if there are no
+ // vertices in the mesh.
+ const float* vertices() const
+ {
+ if (!numberOfVertices())
+ return 0;
+ return m_vertices.data();
+ }
+
+ // Get the base pointer to the texture coordinate information. There
+ // are three coordinates per vertex. This pointer is valid until the
+ // cache is cleared or another vertex is added. Returns 0 if
+ // there are no vertices in the mesh.
+ const float* texcoords() const
+ {
+ if (!numberOfVertices())
+ return 0;
+ return m_texcoords.data();
+ }
+
+ // Adds a vertex's information to the cache. The first two arguments
+ // are the x and y coordinates of the vertex on the plane; the last
+ // three arguments are the cubic texture coordinates associated with
+ // this vertex.
+ void addVertex(float x, float y,
+ float /*k*/, float /*l*/, float /*m*/);
+
+ unsigned numberOfInteriorVertices() const { return m_interiorVertices.size() / 2; }
+
+ // Base pointer to the interior vertices; two coordinates per
+ // vertex, which can be drawn as GL_TRIANGLES. Returns 0 if there
+ // are no interior vertices in the mesh.
+ const float* interiorVertices() const
+ {
+ if (!numberOfInteriorVertices())
+ return 0;
+ return m_interiorVertices.data();
+ }
+
+ void addInteriorVertex(float x, float y);
+
+ // Clears all of the stored vertex information in this cache.
+ void clear();
+
+#ifdef LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+ // The number of interior edge vertices
+ unsigned numberOfInteriorEdgeVertices() const;
+ // Base pointer to the interior vertices; two coordinates per
+ // vertex, which can be drawn as GL_LINES. Returns 0 if there are
+ // no interior edge vertices in the mesh.
+ const float* interiorEdgeVertices() const;
+ void addInteriorEdgeVertex(float x, float y);
+#endif // LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+
+private:
+ // The two-dimensional vertices of the triangle mesh.
+ Vector<float> m_vertices;
+
+ // The three-dimensional cubic texture coordinates.
+ Vector<float> m_texcoords;
+
+ Vector<float> m_interiorVertices;
+
+#ifdef LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+ // The following is only for debugging
+ Vector<float> m_interiorEdgeVertices;
+#endif // LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+};
+
+} // namespace WebCore
+
+#endif // LoopBlinnPathCache_h
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.cpp b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.cpp
new file mode 100644
index 0000000..e84ddbf
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.cpp
@@ -0,0 +1,1228 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "LoopBlinnPathProcessor.h"
+
+#include "FloatPoint.h"
+#include "FloatRect.h"
+#include "LoopBlinnClassifier.h"
+#include "LoopBlinnConstants.h"
+#include "LoopBlinnLocalTriangulator.h"
+#include "LoopBlinnMathUtils.h"
+#include "LoopBlinnPathCache.h"
+#include "LoopBlinnTextureCoords.h"
+#include "PODArena.h"
+#include "PODIntervalTree.h"
+#include "Path.h"
+#include "internal_glu.h"
+#include <algorithm>
+#include <wtf/Assertions.h>
+#include <wtf/FastMalloc.h>
+
+#if PLATFORM(SKIA)
+#include "SkGeometry.h"
+#include "SkPath.h"
+#include "SkScalar.h"
+#else
+// Must port to your platform.
+#endif
+
+namespace WebCore {
+
+using LoopBlinnMathUtils::XRay;
+using LoopBlinnMathUtils::chopCubicAt;
+using LoopBlinnMathUtils::numXRayCrossingsForCubic;
+using LoopBlinnMathUtils::trianglesOverlap;
+using LoopBlinnMathUtils::xRayCrossesLine;
+using LoopBlinnPathProcessorImplementation::Contour;
+using LoopBlinnPathProcessorImplementation::Segment;
+
+namespace {
+
+#ifndef NDEBUG
+String valueToString(const FloatRect& arg)
+{
+ StringBuilder builder;
+ builder.append("[FloatRect x=");
+ builder.append(String::number(arg.x()));
+ builder.append(" y=");
+ builder.append(String::number(arg.y()));
+ builder.append(" maxX=");
+ builder.append(String::number(arg.maxX()));
+ builder.append(" maxY=");
+ builder.append(String::number(arg.maxY()));
+ builder.append("]");
+ return builder.toString();
+}
+#endif
+
+struct SweepData;
+
+} // anonymous namespace
+
+namespace LoopBlinnPathProcessorImplementation {
+class Segment;
+}
+
+#ifndef NDEBUG
+// Routines needed to print the types of IntervalNodes we instantiate
+// in this file.
+template <>
+struct ValueToString<float> {
+ static String string(const float& value)
+ {
+ return String::number(value);
+ }
+};
+
+template <>
+struct ValueToString<SweepData*> {
+ static String string(SweepData* const& value)
+ {
+ return String::format("0x%p", value);
+ }
+};
+
+template <>
+struct ValueToString<LoopBlinnPathProcessorImplementation::Segment*> {
+ static String string(LoopBlinnPathProcessorImplementation::Segment* const& value)
+ {
+ return String::format("0x%p", value);
+ }
+};
+#endif
+
+namespace LoopBlinnPathProcessorImplementation {
+
+//----------------------------------------------------------------------
+// Segment
+//
+
+// Describes a segment of the path: either a cubic or a line segment.
+// These are stored in a doubly linked list to speed up curve
+// subdivision, which occurs due to either rendering artifacts in the
+// loop case or due to overlapping triangles.
+class Segment {
+ WTF_MAKE_NONCOPYABLE(Segment);
+public:
+ enum Kind {
+ Cubic,
+ Line
+ };
+
+ // No-argument constructor allows construction by the PODArena class.
+ Segment()
+ : m_arena(0)
+ , m_kind(Cubic)
+ , m_prev(0)
+ , m_next(0)
+ , m_contour(0)
+ , m_triangulator(0)
+ , m_markedForSubdivision(false)
+ {
+ }
+
+ // Initializer for cubic curve segments.
+ void setup(PODArena* arena,
+ Contour* contour,
+ FloatPoint cp0,
+ FloatPoint cp1,
+ FloatPoint cp2,
+ FloatPoint cp3)
+ {
+ m_arena = arena;
+ m_contour = contour;
+ m_kind = Cubic;
+ m_points[0] = cp0;
+ m_points[1] = cp1;
+ m_points[2] = cp2;
+ m_points[3] = cp3;
+ computeBoundingBox();
+ }
+
+ // Initializer for line segments.
+ void setup(PODArena* arena,
+ Contour* contour,
+ FloatPoint p0,
+ FloatPoint p1)
+ {
+ m_arena = arena;
+ m_contour = contour;
+ m_kind = Line;
+ m_points[0] = p0;
+ m_points[1] = p1;
+ computeBoundingBox();
+ }
+
+ Kind kind() const { return m_kind; }
+
+ // Returns the i'th control point, 0 <= i < 4.
+ const FloatPoint& getPoint(int i)
+ {
+ ASSERT(i >= 0 && i < 4);
+ return m_points[i];
+ }
+
+ Segment* next() const { return m_next; }
+ Segment* prev() const { return m_prev; }
+
+ void setNext(Segment* next) { m_next = next; }
+ void setPrev(Segment* prev) { m_prev = prev; }
+
+ // The contour this segment belongs to.
+ Contour* contour() const { return m_contour; }
+
+ // Subdivides the current segment at the given parameter value (0 <=
+ // t <= 1) and replaces it with the two newly created Segments in
+ // the linked list, if possible. Returns a pointer to the leftmost
+ // Segment.
+ Segment* subdivide(float param)
+ {
+ FloatPoint dst[7];
+ chopCubicAt(m_points, dst, param);
+ Segment* left = m_arena->allocateObject<Segment>();
+ Segment* right = m_arena->allocateObject<Segment>();
+ left->setup(m_arena, m_contour, dst[0], dst[1], dst[2], dst[3]);
+ right->setup(m_arena, m_contour, dst[3], dst[4], dst[5], dst[6]);
+ left->setNext(right);
+ right->setPrev(left);
+ // Try to set up a link between "this->prev()" and "left".
+ if (prev()) {
+ left->setPrev(prev());
+ prev()->setNext(left);
+ }
+ // Try to set up a link between "this->next()" and "right".
+ Segment* n = next();
+ if (n) {
+ right->setNext(n);
+ n->setPrev(right);
+ }
+ // Set up a link between "this" and "left"; this is only to
+ // provide a certain amount of continuity during forward iteration.
+ setNext(left);
+ return left;
+ }
+
+ // Subdivides the current segment at the halfway point and replaces
+ // it with the two newly created Segments in the linked list, if
+ // possible. Returns a pointer to the leftmost Segment.
+ Segment* subdivide() { return subdivide(0.5f); }
+
+ const FloatRect& boundingBox() const { return m_boundingBox; }
+
+ // Computes the number of times a query line starting at the given
+ // point and extending to x=+infinity crosses this segment. Outgoing
+ // "ambiguous" argument indicates whether the query intersected an
+ // endpoint or tangent point of the segment, indicating that another
+ // query point is preferred.
+ int numCrossingsForXRay(const XRay& xRay, bool& ambiguous) const
+ {
+ if (m_kind == Cubic)
+ // Should consider caching the monotonic cubics.
+ return numXRayCrossingsForCubic(xRay, m_points, ambiguous);
+
+ return xRayCrossesLine(xRay, m_points, ambiguous) ? 1 : 0;
+ }
+
+ // Performs a local triangulation of the control points in this
+ // segment. This operation only makes sense for cubic type segments.
+ // texCoords may be null when the klm coordinates have not been
+ // computed yet.
+ void triangulate(LoopBlinnLocalTriangulator::InsideEdgeComputation computeInsideEdges,
+ const LoopBlinnTextureCoords::Result* texCoords);
+
+ // Returns the number of control point triangles associated with
+ // this segment.
+ int numberOfTriangles() const
+ {
+ if (!m_triangulator)
+ return 0;
+ return m_triangulator->numberOfTriangles();
+ }
+
+ // Fetches the given control point triangle for this segment.
+ LoopBlinnLocalTriangulator::Triangle* getTriangle(int index)
+ {
+ ASSERT(m_triangulator);
+ return m_triangulator->getTriangle(index);
+ }
+
+ // Number of vertices along the inside edge of this segment. This
+ // can be called either for line or cubic type segments.
+ int numberOfInteriorVertices() const
+ {
+ if (m_kind == Cubic) {
+ if (m_triangulator)
+ return m_triangulator->numberOfInteriorVertices();
+
+ return 0;
+ }
+
+ return 2;
+ }
+
+ // Returns the given interior vertex, 0 <= index < numberOfInteriorVertices().
+ FloatPoint getInteriorVertex(int index) const
+ {
+ ASSERT(index >= 0 && index < numberOfInteriorVertices());
+ if (m_kind == Cubic) {
+ FloatPoint res;
+ if (m_triangulator) {
+ LoopBlinnLocalTriangulator::Vertex* vertex = m_triangulator->getInteriorVertex(index);
+ if (vertex)
+ res.set(vertex->xyCoordinates().x(), vertex->xyCoordinates().y());
+ }
+ return res;
+ }
+
+ return m_points[index];
+ }
+
+ // State to assist with curve subdivision.
+ bool markedForSubdivision() const { return m_markedForSubdivision; }
+ void setMarkedForSubdivision(bool markedForSubdivision) { m_markedForSubdivision = markedForSubdivision; }
+
+#ifndef NDEBUG
+ // Suppport for printing Segments.
+ String toString() const
+ {
+ StringBuilder builder;
+ builder.append("[Segment kind=");
+ builder.append(kind() == Line ? "line" : "cubic");
+ builder.append(" boundingBox=");
+ builder.append(valueToString(boundingBox()));
+ builder.append(" contour=0x");
+ builder.append(String::format("%p", contour()));
+ builder.append(" markedForSubdivision=");
+ builder.append(markedForSubdivision() ? "true" : "false");
+ builder.append("]");
+ return builder.toString();
+ }
+#endif
+
+ private:
+ // Computes the bounding box of this Segment.
+ void computeBoundingBox()
+ {
+ switch (m_kind) {
+ case Cubic:
+ m_boundingBox.fitToPoints(m_points[0], m_points[1], m_points[2], m_points[3]);
+ break;
+
+ case Line:
+ m_boundingBox.fitToPoints(m_points[0], m_points[1]);
+ break;
+ }
+ }
+
+ PODArena* m_arena;
+ Kind m_kind;
+ FloatPoint m_points[4];
+ Segment* m_prev;
+ Segment* m_next;
+ Contour* m_contour;
+ FloatRect m_boundingBox;
+ LoopBlinnLocalTriangulator* m_triangulator;
+ bool m_markedForSubdivision;
+};
+
+//----------------------------------------------------------------------
+// Contour
+//
+
+// Describes a closed contour of the path.
+class Contour {
+ WTF_MAKE_NONCOPYABLE(Contour);
+public:
+ Contour()
+ {
+ m_first = &m_sentinel;
+ m_first->setNext(m_first);
+ m_first->setPrev(m_first);
+ m_isOrientedCounterClockwise = true;
+ m_boundingBoxDirty = false;
+ m_fillSide = LoopBlinnConstants::RightSide;
+ }
+
+ void add(Segment* segment)
+ {
+ if (m_first == &m_sentinel) {
+ // First element is the sentinel. Replace it with the incoming
+ // segment.
+ segment->setNext(m_first);
+ segment->setPrev(m_first);
+ m_first->setNext(segment);
+ m_first->setPrev(segment);
+ m_first = segment;
+ } else {
+ // m_first->prev() is the sentinel.
+ ASSERT(m_first->prev() == &m_sentinel);
+ Segment* last = m_sentinel.prev();
+ last->setNext(segment);
+ segment->setPrev(last);
+ segment->setNext(&m_sentinel);
+ m_sentinel.setPrev(segment);
+ }
+ m_boundingBoxDirty = true;
+ }
+
+ // Subdivides the given segment at the given parametric value.
+ // Returns a pointer to the first of the two portions of the
+ // subdivided segment.
+ Segment* subdivide(Segment* segment, float param)
+ {
+ Segment* left = segment->subdivide(param);
+ if (m_first == segment)
+ m_first = left;
+ return left;
+ }
+
+ // Subdivides the given segment at the halfway point. Returns a
+ // pointer to the first of the two portions of the subdivided
+ // segment.
+ Segment* subdivide(Segment* segment)
+ {
+ Segment* left = segment->subdivide();
+ if (m_first == segment)
+ m_first = left;
+ return left;
+ }
+
+ // Returns the first segment in the contour for iteration.
+ Segment* begin() const { return m_first; }
+
+ // Returns the last segment in the contour for iteration. Callers
+ // should not iterate over this segment. In other words:
+ // for (Segment* cur = contour->begin();
+ // cur != contour->end();
+ // cur = cur->next()) {
+ // // .. process cur ...
+ // }
+ Segment* end()
+ {
+ ASSERT(m_first->prev() == &m_sentinel);
+ return &m_sentinel;
+ }
+
+ bool isOrientedCounterClockwise() const { return m_isOrientedCounterClockwise; }
+ void setIsOrientedCounterClockwise(bool isOrientedCounterClockwise) { m_isOrientedCounterClockwise = isOrientedCounterClockwise; }
+
+ const FloatRect& boundingBox()
+ {
+ if (m_boundingBoxDirty) {
+ bool first = true;
+ for (Segment* cur = begin(); cur != end(); cur = cur->next()) {
+ if (first)
+ m_boundingBox = cur->boundingBox();
+ else
+ m_boundingBox.unite(cur->boundingBox());
+ first = false;
+ }
+
+ m_boundingBoxDirty = false;
+ }
+ return m_boundingBox;
+ }
+
+ // Returns which side of this contour is filled.
+ LoopBlinnConstants::FillSide fillSide() const
+ {
+ return m_fillSide;
+ }
+
+ void setFillSide(LoopBlinnConstants::FillSide fillSide)
+ {
+ m_fillSide = fillSide;
+ }
+
+private:
+ // The start of the segment chain. The segments are kept in a
+ // circular doubly linked list for rapid access to the beginning and
+ // end.
+ Segment* m_first;
+
+ // The sentinel element at the end of the chain, needed for
+ // reasonable iteration semantics.
+ Segment m_sentinel;
+
+ bool m_isOrientedCounterClockwise;
+
+ FloatRect m_boundingBox;
+ bool m_boundingBoxDirty;
+
+ // Which side of this contour should be filled.
+ LoopBlinnConstants::FillSide m_fillSide;
+};
+
+//----------------------------------------------------------------------
+// Segment
+//
+
+// Definition of Segment::triangulate(), which must come after
+// declaration of Contour.
+void Segment::triangulate(LoopBlinnLocalTriangulator::InsideEdgeComputation computeInsideEdges,
+ const LoopBlinnTextureCoords::Result* texCoords)
+{
+ ASSERT(m_kind == Cubic);
+ if (!m_triangulator)
+ m_triangulator = m_arena->allocateObject<LoopBlinnLocalTriangulator>();
+ m_triangulator->reset();
+ for (int i = 0; i < 4; i++) {
+ LoopBlinnLocalTriangulator::Vertex* vertex = m_triangulator->getVertex(i);
+ if (texCoords) {
+ vertex->set(getPoint(i).x(),
+ getPoint(i).y(),
+ texCoords->klmCoordinates[i].x(),
+ texCoords->klmCoordinates[i].y(),
+ texCoords->klmCoordinates[i].z());
+ } else {
+ vertex->set(getPoint(i).x(),
+ getPoint(i).y(),
+ // No texture coordinates yet
+ 0, 0, 0);
+ }
+ }
+ m_triangulator->triangulate(computeInsideEdges, contour()->fillSide());
+}
+
+} // namespace LoopBlinnPathProcessorImplementation
+
+//----------------------------------------------------------------------
+// LoopBlinnPathProcessor
+//
+
+LoopBlinnPathProcessor::LoopBlinnPathProcessor()
+ : m_arena(PODArena::create())
+#ifndef NDEBUG
+ , m_verboseLogging(false)
+#endif
+{
+}
+
+LoopBlinnPathProcessor::LoopBlinnPathProcessor(PassRefPtr<PODArena> arena)
+ : m_arena(arena)
+#ifndef NDEBUG
+ , m_verboseLogging(false)
+#endif
+{
+}
+
+LoopBlinnPathProcessor::~LoopBlinnPathProcessor()
+{
+}
+
+void LoopBlinnPathProcessor::process(const Path& path, LoopBlinnPathCache& cache)
+{
+ buildContours(path);
+
+ // Run plane-sweep algorithm to determine overlaps of control point
+ // curves and subdivide curves appropriately.
+ subdivideCurves();
+
+ // Determine orientations of countours. Based on orientation and the
+ // number of curve crossings at a random point on the contour,
+ // determine whether to fill the left or right side of the contour.
+ determineSidesToFill();
+
+ // Classify curves, compute texture coordinates and subdivide as
+ // necessary to eliminate rendering artifacts. Do the final
+ // triangulation of the curve segments, determining the path along
+ // the interior of the shape.
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ if (seg->kind() == Segment::Cubic) {
+ LoopBlinnClassifier::Result classification = LoopBlinnClassifier::classify(seg->getPoint(0),
+ seg->getPoint(1),
+ seg->getPoint(2),
+ seg->getPoint(3));
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("Classification: %d", (int) classification.curveType);
+#endif
+ LoopBlinnTextureCoords::Result texCoords =
+ LoopBlinnTextureCoords::compute(classification, cur->fillSide());
+ if (texCoords.hasRenderingArtifact) {
+ // FIXME: there is a problem where the algorithm
+ // sometimes fails to converge when splitting at the
+ // subdivision parameter value. For the time being,
+ // split halfway.
+ cur->subdivide(seg);
+ // Next iteration will handle the newly subdivided curves
+ } else {
+ if (!texCoords.isLineOrPoint) {
+ seg->triangulate(LoopBlinnLocalTriangulator::ComputeInsideEdges, &texCoords);
+ for (int i = 0; i < seg->numberOfTriangles(); i++) {
+ LoopBlinnLocalTriangulator::Triangle* triangle = seg->getTriangle(i);
+ for (int j = 0; j < 3; j++) {
+ LoopBlinnLocalTriangulator::Vertex* vert = triangle->getVertex(j);
+ cache.addVertex(vert->xyCoordinates().x(),
+ vert->xyCoordinates().y(),
+ vert->klmCoordinates().x(),
+ vert->klmCoordinates().y(),
+ vert->klmCoordinates().z());
+ }
+ }
+#ifdef LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+ // Show the end user the interior edges as well
+ for (int i = 1; i < seg->numberOfInteriorVertices(); i++) {
+ FloatPoint vert = seg->getInteriorVertex(i);
+ // Duplicate previous vertex to be able to draw GL_LINES
+ FloatPoint prev = seg->getInteriorVertex(i - 1);
+ cache.addInteriorEdgeVertex(prev.x(), prev.y());
+ cache.addInteriorEdgeVertex(vert.x(), vert.y());
+ }
+#endif // LOOP_BLINN_PATH_CACHE_DEBUG_INTERIOR_EDGES
+ }
+ }
+ }
+ }
+ }
+
+ // Run the interior paths through a tessellation algorithm
+ // supporting multiple contours.
+ tessellateInterior(cache);
+}
+
+void LoopBlinnPathProcessor::buildContours(const Path& path)
+{
+ // Clear out the contours
+ m_contours.clear();
+#if PLATFORM(SKIA)
+ SkPath::Iter iter(*path.platformPath(), false);
+ SkPoint points[4];
+ SkPath::Verb verb;
+ Contour* contour = 0;
+ SkPoint curPoint = { 0 };
+ SkPoint moveToPoint = { 0 };
+ do {
+ verb = iter.next(points);
+ if (verb != SkPath::kMove_Verb) {
+ if (!contour) {
+ contour = m_arena->allocateObject<Contour>();
+ m_contours.append(contour);
+ }
+ }
+ switch (verb) {
+ case SkPath::kMove_Verb: {
+ contour = m_arena->allocateObject<Contour>();
+ m_contours.append(contour);
+ curPoint = points[0];
+ moveToPoint = points[0];
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("MoveTo (%f, %f)", points[0].fX, points[0].fY);
+#endif
+ break;
+ }
+ case SkPath::kLine_Verb: {
+ Segment* segment = m_arena->allocateObject<Segment>();
+ if (iter.isCloseLine()) {
+ segment->setup(m_arena.get(), contour, curPoint, points[1]);
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("CloseLineTo (%f, %f), (%f, %f)", curPoint.fX, curPoint.fY, points[1].fX, points[1].fY);
+#endif
+ contour->add(segment);
+ contour = 0;
+ } else {
+ segment->setup(m_arena.get(), contour, points[0], points[1]);
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("LineTo (%f, %f), (%f, %f)", points[0].fX, points[0].fY, points[1].fX, points[1].fY);
+#endif
+ contour->add(segment);
+ curPoint = points[1];
+ }
+ break;
+ }
+ case SkPath::kQuad_Verb: {
+ // Need to degree elevate the quadratic into a cubic
+ SkPoint cubic[4];
+ SkConvertQuadToCubic(points, cubic);
+ Segment* segment = m_arena->allocateObject<Segment>();
+ segment->setup(m_arena.get(), contour,
+ cubic[0], cubic[1], cubic[2], cubic[3]);
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("Quad->CubicTo (%f, %f), (%f, %f), (%f, %f), (%f, %f)", cubic[0].fX, cubic[0].fY, cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY, cubic[3].fX, cubic[3].fY);
+#endif
+ contour->add(segment);
+ curPoint = cubic[3];
+ break;
+ }
+ case SkPath::kCubic_Verb: {
+ Segment* segment = m_arena->allocateObject<Segment>();
+ segment->setup(m_arena.get(), contour, points[0], points[1], points[2], points[3]);
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("CubicTo (%f, %f), (%f, %f), (%f, %f), (%f, %f)", points[0].fX, points[0].fY, points[1].fX, points[1].fY, points[2].fX, points[2].fY, points[3].fX, points[3].fY);
+#endif
+ contour->add(segment);
+ curPoint = points[3];
+ break;
+ }
+ case SkPath::kClose_Verb: {
+ Segment* segment = m_arena->allocateObject<Segment>();
+ segment->setup(m_arena.get(), contour, curPoint, moveToPoint);
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("Close (%f, %f) -> (%f, %f)", curPoint.fX, curPoint.fY, moveToPoint.fX, moveToPoint.fY);
+#endif
+ contour->add(segment);
+ contour = 0;
+ }
+ case SkPath::kDone_Verb:
+ break;
+ }
+ } while (verb != SkPath::kDone_Verb);
+#else // !PLATFORM(SKIA)
+ // Must port to your platform.
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+#ifndef NDEBUG
+Vector<Segment*> LoopBlinnPathProcessor::allSegmentsOverlappingY(Contour* queryContour, float x, float y)
+{
+ Vector<Segment*> res;
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ const FloatRect& boundingBox = seg->boundingBox();
+ if (boundingBox.y() <= y && y <= boundingBox.maxY())
+ res.append(seg);
+ }
+ }
+ return res;
+}
+#endif
+
+// Uncomment this to debug the orientation computation.
+// #define GPU_PATH_PROCESSOR_DEBUG_ORIENTATION
+
+void LoopBlinnPathProcessor::determineSidesToFill()
+{
+ // Loop and Blinn's algorithm can only easily emulate the even/odd
+ // fill rule, and only for non-intersecting curves. We can determine
+ // which side of each curve segment to fill based on its
+ // clockwise/counterclockwise orientation and how many other
+ // contours surround it.
+
+ // To optimize the query of all curve segments intersecting a
+ // horizontal line going to x=+infinity, we build up an interval
+ // tree whose keys are the y extents of the segments.
+ PODIntervalTree<float, Segment*> tree(m_arena);
+ typedef PODIntervalTree<float, Segment*>::IntervalType IntervalType;
+
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ determineOrientation(cur);
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ const FloatRect& boundingBox = seg->boundingBox();
+ tree.add(tree.createInterval(boundingBox.y(), boundingBox.maxY(), seg));
+ }
+ }
+
+ // Now iterate through the contours and pick a random segment (in
+ // this case we use the first) and a random point on that segment.
+ // Find all segments from other contours which intersect this one
+ // and count the number of crossings a horizontal line to
+ // x=+infinity makes with those contours. This combined with the
+ // orientation of the curve tells us which side to fill -- again,
+ // assuming an even/odd fill rule, which is all we can easily
+ // handle.
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+
+ bool ambiguous = true;
+ int numCrossings = 0;
+
+ // For each contour, attempt to find a point on the contour which,
+ // when we cast an XRay, does not intersect the other contours at
+ // an ambiguous point (the junction between two curves or at a
+ // tangent point). Ambiguous points make the determination of
+ // whether this contour is contained within another fragile. Note
+ // that this loop is only an approximation to the selection of a
+ // good casting point. We could as well evaluate a segment to
+ // determine a point upon it.
+ for (Segment* seg = cur->begin();
+ ambiguous && seg != cur->end();
+ seg = seg->next()) {
+ numCrossings = 0;
+ // We use a zero-sized vertical interval for the query.
+ Vector<IntervalType> overlaps = tree.allOverlaps(tree.createInterval(seg->getPoint(0).y(),
+ seg->getPoint(0).y(),
+ 0));
+#if defined(GPU_PATH_PROCESSOR_DEBUG_ORIENTATION) && !defined(NDEBUG)
+ Vector<Segment*> slowOverlaps = allSegmentsOverlappingY(cur, seg->getPoint(0).x(), seg->getPoint(0).y());
+ if (overlaps.size() != slowOverlaps.size()) {
+ LOG_ERROR("For query point (%f, %f) on contour 0x%p:", seg->getPoint(0).x(), seg->getPoint(0).y(), cur);
+ LOG_ERROR(" overlaps:");
+ for (size_t i = 0; i < overlaps.size(); i++)
+ LOG_ERROR(" %d: %s", i+1, overlaps[i].data()->toString().ascii().data());
+ LOG_ERROR(" slowOverlaps:");
+ for (size_t i = 0; i < slowOverlaps.size(); i++)
+ LOG_ERROR(" %d: %s", (i+1) slowOverlaps[i]->toString());
+ LOG_ERROR("Interval tree:");
+ tree.dump();
+ }
+ ASSERT(overlaps.size() == slowOverlaps.size());
+#endif // defined(GPU_PATH_PROCESSOR_DEBUG_ORIENTATION) && !defined(NDEBUG)
+ for (Vector<IntervalType>::iterator iter = overlaps.begin(); iter != overlaps.end(); ++iter) {
+ const IntervalType& interval = *iter;
+ Segment* querySegment = interval.data();
+ // Ignore segments coming from the same contour.
+ if (querySegment->contour() != cur) {
+ // Only perform queries that can affect the computation.
+ const FloatRect& boundingBox = querySegment->contour()->boundingBox();
+ if (seg->getPoint(0).x() >= boundingBox.x()
+ && seg->getPoint(0).x() <= boundingBox.maxX()) {
+ numCrossings += querySegment->numCrossingsForXRay(seg->getPoint(0),
+ ambiguous);
+ if (ambiguous) {
+#ifndef NDEBUG
+ if (m_verboseLogging) {
+ LOG_ERROR("Ambiguous intersection query at point (%f, %f)", seg->getPoint(0).x(), seg->getPoint(0).y());
+ LOG_ERROR("Query segment: %s", querySegment->toString().ascii().data());
+ }
+#endif
+ break; // Abort iteration over overlaps.
+ }
+ }
+ }
+ }
+ } // for (Segment* seg = cur->begin(); ...
+
+ cur->setFillSide((cur->isOrientedCounterClockwise() ^ (numCrossings & 1)) ? LoopBlinnConstants::LeftSide : LoopBlinnConstants::RightSide);
+ }
+}
+
+void LoopBlinnPathProcessor::determineOrientation(Contour* contour)
+{
+ // Determine signed area of the polygon represented by the points
+ // along the segments. Consider this an approximation to the true
+ // orientation of the polygon; it probably won't handle
+ // self-intersecting curves correctly.
+ //
+ // There is also a pretty basic assumption here that the contour is
+ // closed.
+ float signedArea = 0;
+ for (Segment* seg = contour->begin();
+ seg != contour->end();
+ seg = seg->next()) {
+ int limit = (seg->kind() == Segment::Cubic) ? 4 : 2;
+ for (int i = 1; i < limit; i++) {
+ const FloatPoint& prevPoint = seg->getPoint(i - 1);
+ const FloatPoint& point = seg->getPoint(i);
+ float curArea = prevPoint.x() * point.y() - prevPoint.y() * point.x();
+#ifndef NDEBUG
+ if (m_verboseLogging)
+ LOG_ERROR("Adding to signed area (%f, %f) -> (%f, %f) = %f", prevPoint.x(), prevPoint.y(), point.x(), point.y(), curArea);
+#endif
+ signedArea += curArea;
+ }
+ }
+
+ if (signedArea > 0)
+ contour->setIsOrientedCounterClockwise(true);
+ else
+ contour->setIsOrientedCounterClockwise(false);
+}
+
+namespace {
+
+//----------------------------------------------------------------------
+// Classes and typedefs needed for curve subdivision. These can't be scoped
+// within the subdivideCurves() method itself, because templates then fail
+// to instantiate.
+
+// The user data which is placed in the PODIntervalTree.
+struct SweepData {
+ SweepData()
+ : triangle(0)
+ , segment(0)
+ {
+ }
+
+ // The triangle this interval is associated with
+ LoopBlinnLocalTriangulator::Triangle* triangle;
+ // The segment the triangle is associated with
+ Segment* segment;
+};
+
+typedef PODIntervalTree<float, SweepData*> SweepTree;
+typedef SweepTree::IntervalType SweepInterval;
+
+// The entry / exit events which occur at the minimum and maximum x
+// coordinates of the control point triangles' bounding boxes.
+//
+// Note that this class requires its copy constructor and assignment
+// operator since it needs to be stored in a Vector.
+class SweepEvent {
+public:
+ SweepEvent()
+ : m_x(0)
+ , m_entry(false)
+ , m_interval(0, 0, 0)
+ {
+ }
+
+ // Initializes the SweepEvent.
+ void setup(float x, bool entry, SweepInterval interval)
+ {
+ m_x = x;
+ m_entry = entry;
+ m_interval = interval;
+ }
+
+ float x() const { return m_x; }
+ bool entry() const { return m_entry; }
+ const SweepInterval& interval() const { return m_interval; }
+
+ bool operator<(const SweepEvent& other) const
+ {
+ return m_x < other.m_x;
+ }
+
+private:
+ float m_x;
+ bool m_entry;
+ SweepInterval m_interval;
+};
+
+bool trianglesOverlap(LoopBlinnLocalTriangulator::Triangle* t0,
+ LoopBlinnLocalTriangulator::Triangle* t1)
+{
+ return trianglesOverlap(t0->getVertex(0)->xyCoordinates(),
+ t0->getVertex(1)->xyCoordinates(),
+ t0->getVertex(2)->xyCoordinates(),
+ t1->getVertex(0)->xyCoordinates(),
+ t1->getVertex(1)->xyCoordinates(),
+ t1->getVertex(2)->xyCoordinates());
+}
+
+} // anonymous namespace
+
+void LoopBlinnPathProcessor::subdivideCurves()
+{
+ // We need to determine all overlaps of all control point triangles
+ // (from different segments, not the same segment) and, if any
+ // exist, subdivide the associated curves.
+ //
+ // The plane-sweep algorithm determines all overlaps of a set of
+ // rectangles in the 2D plane. Our problem maps very well to this
+ // algorithm and significantly reduces the complexity compared to a
+ // naive implementation.
+ //
+ // Each bounding box of a control point triangle is converted into
+ // an "entry" event at its smallest X coordinate and an "exit" event
+ // at its largest X coordinate. Each event has an associated
+ // one-dimensional interval representing the Y span of the bounding
+ // box. We sort these events by increasing X coordinate. We then
+ // iterate through them. For each entry event we add the interval to
+ // a side interval tree, and query this tree for overlapping
+ // intervals. Any overlapping interval corresponds to an overlapping
+ // bounding box. For each exit event we remove the associated
+ // interval from the interval tree.
+
+ Vector<Segment*> curSegments;
+ Vector<Segment*> nextSegments;
+
+ // Start things off by considering all of the segments
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ if (seg->kind() == Segment::Cubic) {
+ seg->triangulate(LoopBlinnLocalTriangulator::DontComputeInsideEdges, 0);
+ curSegments.append(seg);
+ }
+ }
+ }
+
+ // Subdivide curves at most this many times
+ const int MaxIterations = 5;
+ Vector<SweepInterval> overlaps;
+
+ for (int currentIteration = 0; currentIteration < MaxIterations; ++currentIteration) {
+ if (!curSegments.size())
+ // Done
+ break;
+
+ Vector<SweepEvent> events;
+ SweepTree tree(m_arena);
+ for (Vector<Segment*>::iterator iter = curSegments.begin(); iter != curSegments.end(); ++iter) {
+ Segment* seg = *iter;
+ ASSERT(seg->kind() == Segment::Cubic);
+ for (int i = 0; i < seg->numberOfTriangles(); i++) {
+ LoopBlinnLocalTriangulator::Triangle* triangle = seg->getTriangle(i);
+ FloatRect boundingBox;
+ boundingBox.fitToPoints(triangle->getVertex(0)->xyCoordinates(),
+ triangle->getVertex(1)->xyCoordinates(),
+ triangle->getVertex(2)->xyCoordinates());
+ // Ignore zero-width triangles to avoid issues with
+ // coincident entry and exit events for the same triangle
+ if (boundingBox.maxX() > boundingBox.x()) {
+ SweepData* data = m_arena->allocateObject<SweepData>();
+ data->triangle = triangle;
+ data->segment = seg;
+ SweepInterval interval = tree.createInterval(boundingBox.y(), boundingBox.maxY(), data);
+ // Add entry and exit events
+ SweepEvent event;
+ event.setup(boundingBox.x(), true, interval);
+ events.append(event);
+ event.setup(boundingBox.maxX(), false, interval);
+ events.append(event);
+ }
+ }
+ }
+
+ // Sort events by increasing X coordinate
+ std::sort(events.begin(), events.end());
+#ifndef NDEBUG
+ for (size_t ii = 1; ii < events.size(); ++ii)
+ ASSERT(events[ii - 1].x() <= events[ii].x());
+#endif
+
+ // Now iterate through the events
+ for (Vector<SweepEvent>::iterator iter = events.begin(); iter != events.end(); ++iter) {
+ SweepEvent event = *iter;
+ if (event.entry()) {
+ // See whether the associated segment has been subdivided yet
+ if (!event.interval().data()->segment->markedForSubdivision()) {
+ // Query the tree
+ overlaps.clear();
+ tree.allOverlaps(event.interval(), overlaps);
+ // Now see exactly which triangles overlap this one
+ for (Vector<SweepInterval>::iterator iter = overlaps.begin(); iter != overlaps.end(); ++iter) {
+ SweepInterval overlap = *iter;
+ // Only pay attention to overlaps from a different Segment
+ if (event.interval().data()->segment != overlap.data()->segment) {
+ // See whether the triangles actually overlap
+ if (trianglesOverlap(event.interval().data()->triangle,
+ overlap.data()->triangle)) {
+ // Actually subdivide the segments.
+ // Each one might already have been subdivided.
+ Segment* seg = event.interval().data()->segment;
+ conditionallySubdivide(seg, nextSegments);
+ seg = overlap.data()->segment;
+ conditionallySubdivide(seg, nextSegments);
+ }
+ }
+ }
+ }
+ // Add this interval into the tree
+ tree.add(event.interval());
+ } else {
+ // Remove this interval from the tree
+ tree.remove(event.interval());
+ }
+ }
+
+ curSegments.swap(nextSegments);
+ nextSegments.clear();
+ }
+}
+
+void LoopBlinnPathProcessor::conditionallySubdivide(Segment* seg, Vector<Segment*>& nextSegments)
+{
+ if (!seg->markedForSubdivision()) {
+ seg->setMarkedForSubdivision(true);
+ Segment* next = seg->contour()->subdivide(seg);
+ // Triangulate the newly subdivided segments.
+ next->triangulate(LoopBlinnLocalTriangulator::DontComputeInsideEdges, 0);
+ next->next()->triangulate(LoopBlinnLocalTriangulator::DontComputeInsideEdges, 0);
+ // Add them for the next iteration.
+ nextSegments.append(next);
+ nextSegments.append(next->next());
+ }
+}
+
+#ifndef NDEBUG
+void LoopBlinnPathProcessor::subdivideCurvesSlow()
+{
+ // Alternate, significantly slower algorithm for curve subdivision
+ // for use in debugging.
+ Vector<Segment*> curSegments;
+ Vector<Segment*> nextSegments;
+
+ // Start things off by considering all of the segments
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ if (seg->kind() == Segment::Cubic) {
+ seg->triangulate(LoopBlinnLocalTriangulator::DontComputeInsideEdges, 0);
+ curSegments.append(seg);
+ }
+ }
+ }
+
+ // Subdivide curves at most this many times
+ const int MaxIterations = 5;
+
+ for (int currentIteration = 0; currentIteration < MaxIterations; ++currentIteration) {
+ if (!curSegments.size())
+ // Done
+ break;
+
+ for (Vector<Segment*>::iterator iter = curSegments.begin(); iter != curSegments.end(); ++iter) {
+ Segment* seg = *iter;
+ ASSERT(seg->kind() == Segment::Cubic);
+ for (Vector<Segment*>::iterator iter2 = curSegments.begin();
+ iter2 != curSegments.end();
+ iter2++) {
+ Segment* seg2 = *iter2;
+ ASSERT(seg2->kind() == Segment::Cubic);
+ if (seg != seg2) {
+ for (int i = 0; i < seg->numberOfTriangles(); i++) {
+ LoopBlinnLocalTriangulator::Triangle* triangle = seg->getTriangle(i);
+ for (int j = 0; j < seg2->numberOfTriangles(); j++) {
+ LoopBlinnLocalTriangulator::Triangle* triangle2 = seg2->getTriangle(j);
+ if (trianglesOverlap(triangle, triangle2)) {
+ conditionallySubdivide(seg, nextSegments);
+ conditionallySubdivide(seg2, nextSegments);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ curSegments.swap(nextSegments);
+ nextSegments.clear();
+ }
+}
+#endif
+
+namespace {
+
+//----------------------------------------------------------------------
+// Structures and callbacks for tessellation of the interior region of
+// the contours.
+
+// The user data for the GLU tessellator.
+struct TessellationState {
+ TessellationState(LoopBlinnPathCache& inputCache)
+ : cache(inputCache) { }
+
+ LoopBlinnPathCache& cache;
+ Vector<void*> allocatedPointers;
+};
+
+static void vertexCallback(void* vertexData, void* data)
+{
+ TessellationState* state = static_cast<TessellationState*>(data);
+ GLdouble* location = static_cast<GLdouble*>(vertexData);
+ state->cache.addInteriorVertex(static_cast<float>(location[0]),
+ static_cast<float>(location[1]));
+}
+
+static void combineCallback(GLdouble coords[3], void* vertexData[4],
+ GLfloat weight[4], void** outData,
+ void* polygonData)
+{
+ TessellationState* state = static_cast<TessellationState*>(polygonData);
+ GLdouble* outVertex = static_cast<GLdouble*>(fastMalloc(3 * sizeof(GLdouble)));
+ state->allocatedPointers.append(outVertex);
+ outVertex[0] = coords[0];
+ outVertex[1] = coords[1];
+ outVertex[2] = coords[2];
+ *outData = outVertex;
+}
+
+static void edgeFlagCallback(GLboolean)
+{
+ // No-op just to prevent triangle strips and fans from being passed to us.
+ // See the OpenGL Programming Guide, Chapter 11, "Tessellators and Quadrics".
+}
+
+} // anonymous namespace
+
+void LoopBlinnPathProcessor::tessellateInterior(LoopBlinnPathCache& cache)
+{
+ // Because the GLU tessellator requires its input in
+ // double-precision format, we need to make a separate copy of the
+ // data.
+ Vector<GLdouble> vertexData;
+ Vector<size_t> contourEndings;
+ // For avoiding adding coincident vertices.
+ float curX = 0, curY = 0;
+ for (Vector<Contour*>::iterator iter = m_contours.begin(); iter != m_contours.end(); ++iter) {
+ Contour* cur = *iter;
+ bool first = true;
+ for (Segment* seg = cur->begin(); seg != cur->end(); seg = seg->next()) {
+ int numberOfInteriorVertices = seg->numberOfInteriorVertices();
+ for (int i = 0; i < numberOfInteriorVertices - 1; i++) {
+ FloatPoint point = seg->getInteriorVertex(i);
+ if (first) {
+ first = false;
+ vertexData.append(point.x());
+ vertexData.append(point.y());
+ vertexData.append(0);
+ curX = point.x();
+ curY = point.y();
+ } else if (point.x() != curX || point.y() != curY) {
+ vertexData.append(point.x());
+ vertexData.append(point.y());
+ vertexData.append(0);
+ curX = point.x();
+ curY = point.y();
+ }
+ }
+ }
+ contourEndings.append(vertexData.size());
+ }
+ // Now that we have all of the vertex data in a stable location in
+ // memory, call the tessellator.
+ GLUtesselator* tess = internal_gluNewTess();
+ TessellationState state(cache);
+ internal_gluTessCallback(tess, GLU_TESS_VERTEX_DATA,
+ reinterpret_cast<GLvoid (*)()>(vertexCallback));
+ internal_gluTessCallback(tess, GLU_TESS_COMBINE_DATA,
+ reinterpret_cast<GLvoid (*)()>(combineCallback));
+ internal_gluTessCallback(tess, GLU_TESS_EDGE_FLAG,
+ reinterpret_cast<GLvoid (*)()>(edgeFlagCallback));
+ internal_gluTessBeginPolygon(tess, &state);
+ internal_gluTessBeginContour(tess);
+ GLdouble* base = vertexData.data();
+ int contourIndex = 0;
+ for (size_t i = 0; i < vertexData.size(); i += 3) {
+ if (i == contourEndings[contourIndex]) {
+ internal_gluTessEndContour(tess);
+ internal_gluTessBeginContour(tess);
+ ++contourIndex;
+ }
+ internal_gluTessVertex(tess, &base[i], &base[i]);
+ }
+ internal_gluTessEndContour(tess);
+ internal_gluTessEndPolygon(tess);
+ for (size_t i = 0; i < state.allocatedPointers.size(); i++)
+ fastFree(state.allocatedPointers[i]);
+ internal_gluDeleteTess(tess);
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.h b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.h
new file mode 100644
index 0000000..ad89bc1
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// The main entry point for Loop and Blinn's GPU accelerated curve
+// rendering algorithm.
+
+#ifndef LoopBlinnPathProcessor_h
+#define LoopBlinnPathProcessor_h
+
+#include <wtf/Noncopyable.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+// We use a namespace for classes which are simply implementation
+// details of the algorithm but which we need to reference from the
+// class definition.
+namespace LoopBlinnPathProcessorImplementation {
+
+class Contour;
+class Segment;
+
+} // namespace LoopBlinnPathProcessorImplementation
+
+class Path;
+class LoopBlinnPathCache;
+class PODArena;
+
+// The LoopBlinnPathProcessor turns a Path (assumed to contain one or
+// more closed regions) into a set of exterior and interior triangles,
+// stored in the LoopBlinnPathCache. The exterior triangles have
+// associated 3D texture coordinates which are used to evaluate the
+// curve's inside/outside function on a per-pixel basis. The interior
+// triangles are filled with 100% opacity.
+//
+// Note that the fill style and management of multiple layers are
+// separate concerns, handled at a higher level with shaders and
+// polygon offsets.
+class LoopBlinnPathProcessor {
+public:
+ LoopBlinnPathProcessor();
+ explicit LoopBlinnPathProcessor(PassRefPtr<PODArena>);
+ ~LoopBlinnPathProcessor();
+
+ // Transforms the given path into a triangle mesh for rendering
+ // using Loop and Blinn's shader, placing the result into the given
+ // LoopBlinnPathCache.
+ void process(const Path&, LoopBlinnPathCache&);
+
+#ifndef NDEBUG
+ // Enables or disables verbose logging in debug mode.
+ void setVerboseLogging(bool onOrOff);
+#endif
+
+private:
+ // Builds a list of contours for the given path.
+ void buildContours(const Path&);
+
+ // Determines whether the left or right side of each contour should
+ // be filled.
+ void determineSidesToFill();
+
+ // Determines whether the given (closed) contour is oriented
+ // clockwise or counterclockwise.
+ void determineOrientation(LoopBlinnPathProcessorImplementation::Contour*);
+
+ // Subdivides the curves so that there are no overlaps of the
+ // triangles associated with the curves' control points.
+ void subdivideCurves();
+
+ // Helper function used during curve subdivision.
+ void conditionallySubdivide(LoopBlinnPathProcessorImplementation::Segment*,
+ Vector<LoopBlinnPathProcessorImplementation::Segment*>& nextSegments);
+
+ // Tessellates the interior regions of the contours.
+ void tessellateInterior(LoopBlinnPathCache&);
+
+#ifndef NDEBUG
+ // For debugging the orientation computation. Returns all of the
+ // segments overlapping the given Y coordinate.
+ Vector<LoopBlinnPathProcessorImplementation::Segment*> allSegmentsOverlappingY(LoopBlinnPathProcessorImplementation::Contour*, float x, float y);
+
+ // For debugging the curve subdivision algorithm. Subdivides the
+ // curves using an alternate, slow (O(n^3)) algorithm.
+ void subdivideCurvesSlow();
+#endif
+
+ // PODArena from which to allocate temporary objects.
+ RefPtr<PODArena> m_arena;
+
+ // The contours described by the path.
+ Vector<LoopBlinnPathProcessorImplementation::Contour*> m_contours;
+
+#ifndef NDEBUG
+ // Whether or not to perform verbose logging in debug mode.
+ bool m_verboseLogging;
+#endif
+};
+
+} // namespace WebCore
+
+#endif // LoopBlinnPathProcessor_h
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.cpp b/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.cpp
new file mode 100644
index 0000000..364e6c8
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "LoopBlinnShader.h"
+
+#include "GraphicsContext3D.h"
+
+namespace WebCore {
+
+LoopBlinnShader::LoopBlinnShader(GraphicsContext3D* context, unsigned program)
+ : Shader(context, program)
+{
+ m_worldViewProjectionLocation = context->getUniformLocation(program, "worldViewProjection");
+ m_positionLocation = context->getAttribLocation(program, "position");
+ m_klmLocation = context->getAttribLocation(program, "klm");
+}
+
+void LoopBlinnShader::use(unsigned vertexOffset, unsigned klmOffset, const AffineTransform& transform)
+{
+ m_context->useProgram(m_program);
+
+ float matrix[16];
+ affineTo4x4(transform, matrix);
+ m_context->uniformMatrix4fv(m_worldViewProjectionLocation, false /*transpose*/, matrix, 1 /*count*/);
+
+ m_context->vertexAttribPointer(m_positionLocation, 2, GraphicsContext3D::FLOAT, false, 0, vertexOffset);
+ m_context->enableVertexAttribArray(m_positionLocation);
+
+ if (m_klmLocation != -1) {
+ m_context->vertexAttribPointer(m_klmLocation, 3, GraphicsContext3D::FLOAT, false, 0, klmOffset);
+ m_context->enableVertexAttribArray(m_klmLocation);
+ }
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.h b/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.h
new file mode 100644
index 0000000..2d24dc3
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnShader.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LoopBlinnShader_h
+#define LoopBlinnShader_h
+
+#include "Shader.h"
+
+namespace WebCore {
+
+class GraphicsContext3D;
+
+class LoopBlinnShader : public Shader {
+public:
+ enum Region {
+ Interior,
+ Exterior
+ };
+
+protected:
+ LoopBlinnShader(GraphicsContext3D*, unsigned program);
+
+ // This assumes the vertices and klm coordinates are stored in the
+ // same, currently bound, buffer object, contiguously and at the
+ // specified offsets.
+ void use(unsigned vertexOffset, unsigned klmOffset, const AffineTransform&);
+
+private:
+ int m_worldViewProjectionLocation;
+ int m_positionLocation;
+ int m_klmLocation;
+};
+
+} // namespace WebCore
+
+#endif // LoopBlinnShader_h
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.cpp b/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.cpp
new file mode 100644
index 0000000..43a97ef
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.cpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "LoopBlinnSolidFillShader.h"
+
+#include "GraphicsContext3D.h"
+
+namespace WebCore {
+
+PassOwnPtr<LoopBlinnSolidFillShader> LoopBlinnSolidFillShader::create(GraphicsContext3D* context,
+ LoopBlinnShader::Region region,
+ Shader::AntialiasType antialiasType)
+{
+ VertexType type = (region == Interior) ? LoopBlinnInterior : LoopBlinnExterior;
+ unsigned program = loadProgram(context,
+ generateVertex(type, SolidFill),
+ generateFragment(type, SolidFill, antialiasType));
+ if (!program)
+ return 0;
+ return new LoopBlinnSolidFillShader(context, program);
+}
+
+LoopBlinnSolidFillShader::LoopBlinnSolidFillShader(GraphicsContext3D* context, unsigned program)
+ : LoopBlinnShader(context, program)
+{
+ m_colorLocation = context->getUniformLocation(program, "color");
+}
+
+void LoopBlinnSolidFillShader::use(unsigned vertexOffset, unsigned klmOffset, const AffineTransform& transform, const Color& color)
+{
+ LoopBlinnShader::use(vertexOffset, klmOffset, transform);
+
+ float rgba[4];
+ color.getRGBA(rgba[0], rgba[1], rgba[2], rgba[3]);
+ m_context->uniform4f(m_colorLocation, rgba[0] * rgba[3], rgba[1] * rgba[3], rgba[2] * rgba[3], rgba[3]);
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.h b/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.h
new file mode 100644
index 0000000..36312a2
--- /dev/null
+++ b/Source/WebCore/platform/graphics/gpu/LoopBlinnSolidFillShader.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LoopBlinnSolidFillShader_h
+#define LoopBlinnSolidFillShader_h
+
+#include "LoopBlinnShader.h"
+
+namespace WebCore {
+
+class GraphicsContext3D;
+
+class LoopBlinnSolidFillShader : public LoopBlinnShader {
+public:
+ static PassOwnPtr<LoopBlinnSolidFillShader> create(GraphicsContext3D*, Region, AntialiasType);
+
+ // This assumes the vertices and klm coordinates are stored in the
+ // same, currently bound, buffer object, contiguously and at the
+ // specified offsets.
+ void use(unsigned vertexOffset, unsigned klmOffset, const AffineTransform&, const Color&);
+
+private:
+ LoopBlinnSolidFillShader(GraphicsContext3D*, unsigned program);
+
+ int m_colorLocation;
+};
+
+} // namespace WebCore
+
+#endif // LoopBlinnSolidFillShader_h
diff --git a/Source/WebCore/platform/graphics/gpu/Shader.cpp b/Source/WebCore/platform/graphics/gpu/Shader.cpp
index 6978322..1b9bfd5 100644
--- a/Source/WebCore/platform/graphics/gpu/Shader.cpp
+++ b/Source/WebCore/platform/graphics/gpu/Shader.cpp
@@ -38,6 +38,7 @@
#include "GraphicsContext3D.h"
#include <wtf/text/CString.h>
+#include <wtf/text/StringBuilder.h>
namespace WebCore {
@@ -56,14 +57,34 @@ void Shader::affineTo3x3(const AffineTransform& transform, float mat[9])
}
// static
-unsigned Shader::loadShader(GraphicsContext3D* context, unsigned type, const char* shaderSource)
+void Shader::affineTo4x4(const AffineTransform& transform, float mat[16])
+{
+ mat[0] = transform.a();
+ mat[1] = transform.b();
+ mat[2] = 0.0f;
+ mat[3] = 0.0f;
+ mat[4] = transform.c();
+ mat[5] = transform.d();
+ mat[6] = 0.0f;
+ mat[7] = 0.0f;
+ mat[8] = 0.0f;
+ mat[9] = 0.0f;
+ mat[10] = 1.0f;
+ mat[11] = 0.0f;
+ mat[12] = transform.e();
+ mat[13] = transform.f();
+ mat[14] = 0.0f;
+ mat[15] = 1.0f;
+}
+
+// static
+unsigned Shader::loadShader(GraphicsContext3D* context, unsigned type, const String& shaderSource)
{
unsigned shader = context->createShader(type);
if (!shader)
return 0;
- String shaderSourceStr(shaderSource);
- context->shaderSource(shader, shaderSourceStr);
+ context->shaderSource(shader, shaderSource);
context->compileShader(shader);
int compileStatus = 0;
context->getShaderiv(shader, GraphicsContext3D::COMPILE_STATUS, &compileStatus);
@@ -77,7 +98,7 @@ unsigned Shader::loadShader(GraphicsContext3D* context, unsigned type, const cha
}
// static
-unsigned Shader::loadProgram(GraphicsContext3D* context, const char* vertexShaderSource, const char* fragmentShaderSource)
+unsigned Shader::loadProgram(GraphicsContext3D* context, const String& vertexShaderSource, const String& fragmentShaderSource)
{
unsigned vertexShader = loadShader(context, GraphicsContext3D::VERTEX_SHADER, vertexShaderSource);
if (!vertexShader)
@@ -111,6 +132,146 @@ Shader::~Shader()
m_context->deleteProgram(m_program);
}
+// static
+String Shader::generateVertex(Shader::VertexType vertexType, Shader::FillType fillType)
+{
+ StringBuilder builder;
+ switch (vertexType) {
+ case TwoDimensional:
+ builder.append(
+ "uniform mat3 matrix;\n"
+ "attribute vec3 position;\n");
+ break;
+ case LoopBlinnInterior:
+ builder.append(
+ "uniform mat4 worldViewProjection;\n"
+ "attribute vec2 position;\n");
+ break;
+ case LoopBlinnExterior:
+ builder.append(
+ "uniform mat4 worldViewProjection;\n"
+ "attribute vec2 position;\n"
+ "attribute vec3 klm;\n"
+ "varying vec3 v_klm;\n");
+ break;
+ }
+
+ if (fillType == TextureFill) {
+ builder.append(
+ "uniform mat3 texMatrix;\n"
+ "varying vec3 texCoord;\n");
+ }
+
+ builder.append(
+ "void main() {\n");
+
+ if (vertexType == TwoDimensional) {
+ builder.append(
+ "gl_Position = vec4(matrix * position, 1.0);\n");
+ } else {
+ builder.append(
+ "gl_Position = worldViewProjection * vec4(position, 0.0, 1.0);\n");
+ if (vertexType == LoopBlinnExterior) {
+ builder.append(
+ "v_klm = klm;\n");
+ }
+ }
+
+ if (fillType == TextureFill) {
+ builder.append(
+ "texCoord = texMatrix * position;\n");
+ }
+
+ builder.append(
+ "}\n");
+
+ return builder.toString();
}
+// static
+String Shader::generateFragment(Shader::VertexType vertexType, Shader::FillType fillType, Shader::AntialiasType antialiasType)
+{
+ StringBuilder builder;
+ builder.append(
+ "#ifdef GL_ES\n"
+ "precision mediump float;\n"
+ "#endif\n");
+
+ if (vertexType == LoopBlinnExterior) {
+ if (antialiasType == Antialiased) {
+ builder.append(
+ "#extension GL_OES_standard_derivatives : enable\n");
+ }
+ builder.append(
+ "varying vec3 v_klm;\n");
+ }
+
+ switch (fillType) {
+ case SolidFill:
+ builder.append(
+ "uniform vec4 color;\n");
+ break;
+ case TextureFill:
+ builder.append(
+ "uniform sampler2D sampler;\n"
+ "uniform float globalAlpha;\n"
+ "varying vec3 texCoord;\n");
+ break;
+ }
+
+ builder.append(
+ "void main() {\n");
+
+ if (vertexType != LoopBlinnExterior) {
+ builder.append(
+ "float alpha = 1.0;\n");
+ } else {
+ if (antialiasType == Antialiased) {
+ builder.append(
+ " // Gradients\n"
+ " vec3 px = dFdx(v_klm);\n"
+ " vec3 py = dFdy(v_klm);\n"
+ "\n"
+ " // Chain rule\n"
+ " float k2 = v_klm.x * v_klm.x;\n"
+ " float c = k2 * v_klm.x - v_klm.y * v_klm.z;\n"
+ " float k23 = 3.0 * k2;\n"
+ " float cx = k23 * px.x - v_klm.z * px.y - v_klm.y * px.z;\n"
+ " float cy = k23 * py.x - v_klm.z * py.y - v_klm.y * py.z;\n"
+ "\n"
+ " // Signed distance\n"
+ " float sd = c / sqrt(cx * cx + cy * cy);\n"
+ "\n"
+ " // Linear alpha\n"
+ " // FIXME: figure out why this needs to be\n"
+ " // negated compared to the HLSL version, and also why\n"
+ " // we need an adjustment by +1.0 for it to look good.\n"
+ " // float alpha = clamp(0.5 - sd, 0.0, 1.0);\n"
+ " float alpha = clamp(sd + 0.5, 0.0, 1.0);\n");
+ } else {
+ builder.append(
+ " float t = v_klm.x * v_klm.x * v_klm.x - v_klm.y * v_klm.z;\n"
+ " float alpha = clamp(sign(t), 0.0, 1.0);\n");
+ }
+ }
+
+ switch (fillType) {
+ case SolidFill:
+ builder.append(
+ "gl_FragColor = color * alpha;\n");
+ break;
+ case TextureFill:
+ builder.append(
+ "gl_FragColor = texture2D(sampler, texCoord.xy) * alpha * globalAlpha;\n");
+ break;
+ }
+
+ builder.append(
+ "}\n");
+
+ return builder.toString();
+}
+
+} // namespace WebCore
+
#endif
diff --git a/Source/WebCore/platform/graphics/gpu/Shader.h b/Source/WebCore/platform/graphics/gpu/Shader.h
index 4f62ca9..35d1a3b 100644
--- a/Source/WebCore/platform/graphics/gpu/Shader.h
+++ b/Source/WebCore/platform/graphics/gpu/Shader.h
@@ -33,6 +33,7 @@
#include <wtf/Noncopyable.h>
#include <wtf/PassOwnPtr.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -42,13 +43,35 @@ class Color;
class Shader {
WTF_MAKE_NONCOPYABLE(Shader);
+public:
+ enum VertexType {
+ TwoDimensional,
+ LoopBlinnInterior,
+ LoopBlinnExterior
+ };
+
+ enum FillType {
+ SolidFill,
+ TextureFill
+ };
+
+ // Currently only applies to the Loop-Blinn vertex type.
+ enum AntialiasType {
+ NotAntialiased,
+ Antialiased
+ };
+
protected:
Shader(GraphicsContext3D*, unsigned program);
~Shader();
+ static String generateVertex(VertexType, FillType);
+ static String generateFragment(VertexType, FillType, AntialiasType);
+
static void affineTo3x3(const AffineTransform&, float mat[9]);
- static unsigned loadShader(GraphicsContext3D*, unsigned type, const char* shaderSource);
- static unsigned loadProgram(GraphicsContext3D*, const char* vertexShaderSource, const char* fragmentShaderSource);
+ static void affineTo4x4(const AffineTransform&, float mat[16]);
+ static unsigned loadShader(GraphicsContext3D*, unsigned type, const String& shaderSource);
+ static unsigned loadProgram(GraphicsContext3D*, const String& vertexShaderSource, const String& fragmentShaderSource);
GraphicsContext3D* m_context;
unsigned m_program;
diff --git a/Source/WebCore/platform/graphics/gpu/SolidFillShader.cpp b/Source/WebCore/platform/graphics/gpu/SolidFillShader.cpp
index 86079be..78381f0 100644
--- a/Source/WebCore/platform/graphics/gpu/SolidFillShader.cpp
+++ b/Source/WebCore/platform/graphics/gpu/SolidFillShader.cpp
@@ -49,23 +49,9 @@ SolidFillShader::SolidFillShader(GraphicsContext3D* context, unsigned program)
PassOwnPtr<SolidFillShader> SolidFillShader::create(GraphicsContext3D* context)
{
- static const char* vertexShaderSource =
- "uniform mat3 matrix;\n"
- "uniform vec4 color;\n"
- "attribute vec3 position;\n"
- "void main() {\n"
- " gl_Position = vec4(matrix * position, 1.0);\n"
- "}\n";
- static const char* fragmentShaderSource =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "#endif\n"
- "uniform mat3 matrix;\n"
- "uniform vec4 color;\n"
- "void main() {\n"
- " gl_FragColor = color;\n"
- "}\n";
- unsigned program = loadProgram(context, vertexShaderSource, fragmentShaderSource);
+ unsigned program = loadProgram(context,
+ generateVertex(Shader::TwoDimensional, Shader::SolidFill),
+ generateFragment(Shader::TwoDimensional, Shader::SolidFill, Shader::NotAntialiased));
if (!program)
return 0;
return new SolidFillShader(context, program);
diff --git a/Source/WebCore/platform/graphics/gpu/TexShader.cpp b/Source/WebCore/platform/graphics/gpu/TexShader.cpp
index d7ffa17..9eb5c16 100644
--- a/Source/WebCore/platform/graphics/gpu/TexShader.cpp
+++ b/Source/WebCore/platform/graphics/gpu/TexShader.cpp
@@ -43,33 +43,16 @@ TexShader::TexShader(GraphicsContext3D* context, unsigned program)
{
m_matrixLocation = context->getUniformLocation(program, "matrix");
m_texMatrixLocation = context->getUniformLocation(program, "texMatrix");
- m_alphaLocation = context->getUniformLocation(program, "alpha");
+ m_alphaLocation = context->getUniformLocation(program, "globalAlpha");
m_positionLocation = context->getAttribLocation(program, "position");
m_samplerLocation = context->getUniformLocation(program, "sampler");
}
PassOwnPtr<TexShader> TexShader::create(GraphicsContext3D* context)
{
- static const char* vertexShaderSource =
- "uniform mat3 matrix;\n"
- "uniform mat3 texMatrix;\n"
- "attribute vec3 position;\n"
- "varying vec3 texCoord;\n"
- "void main() {\n"
- " texCoord = texMatrix * position;\n"
- " gl_Position = vec4(matrix * position, 1.0);\n"
- "}\n";
- static const char* fragmentShaderSource =
- "#ifdef GL_ES\n"
- "precision mediump float;\n"
- "#endif\n"
- "uniform sampler2D sampler;\n"
- "uniform float alpha;\n"
- "varying vec3 texCoord;\n"
- "void main() {\n"
- " gl_FragColor = texture2D(sampler, texCoord.xy)* vec4(alpha);\n"
- "}\n";
- unsigned program = loadProgram(context, vertexShaderSource, fragmentShaderSource);
+ unsigned program = loadProgram(context,
+ generateVertex(Shader::TwoDimensional, Shader::TextureFill),
+ generateFragment(Shader::TwoDimensional, Shader::TextureFill, Shader::NotAntialiased));
if (!program)
return 0;
return new TexShader(context, program);
diff --git a/Source/WebCore/platform/graphics/gpu/Texture.cpp b/Source/WebCore/platform/graphics/gpu/Texture.cpp
index e1f8114..b1ba827 100644
--- a/Source/WebCore/platform/graphics/gpu/Texture.cpp
+++ b/Source/WebCore/platform/graphics/gpu/Texture.cpp
@@ -166,7 +166,7 @@ void Texture::updateSubRect(void* pixels, const IntRect& updateRect)
int tempBuffSize = // Temporary buffer size is the smaller of the max texture size or the updateRectSanitized
min(m_tiles.maxTextureSize(), m_tiles.borderTexels() + updateRectSanitized.width()) *
min(m_tiles.maxTextureSize(), m_tiles.borderTexels() + updateRectSanitized.height());
- OwnArrayPtr<uint32_t> tempBuff(new uint32_t[tempBuffSize]);
+ OwnArrayPtr<uint32_t> tempBuff = adoptArrayPtr(new uint32_t[tempBuffSize]);
for (int tile = 0; tile < m_tiles.numTiles(); tile++) {
// Intersect with tile
diff --git a/Source/WebCore/platform/graphics/gpu/TilingData.cpp b/Source/WebCore/platform/graphics/gpu/TilingData.cpp
index a98add7..e7c4e4c 100644
--- a/Source/WebCore/platform/graphics/gpu/TilingData.cpp
+++ b/Source/WebCore/platform/graphics/gpu/TilingData.cpp
@@ -89,9 +89,9 @@ IntRect TilingData::tileBoundsWithBorder(int tile) const
if (m_borderTexels) {
int x1 = bounds.x();
- int x2 = bounds.right();
+ int x2 = bounds.maxX();
int y1 = bounds.y();
- int y2 = bounds.bottom();
+ int y2 = bounds.maxY();
if (tileXIndex(tile) > 0)
x1--;
@@ -182,8 +182,8 @@ IntRect TilingData::overlappedTileIndices(const WebCore::IntRect &srcRect) const
{
int x = tileXIndexFromSrcCoord(srcRect.x());
int y = tileYIndexFromSrcCoord(srcRect.y());
- int r = tileXIndexFromSrcCoord(srcRect.right());
- int b = tileYIndexFromSrcCoord(srcRect.bottom());
+ int r = tileXIndexFromSrcCoord(srcRect.maxX());
+ int b = tileYIndexFromSrcCoord(srcRect.maxY());
return IntRect(x, y, r - x, b - y);
}
diff --git a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm b/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
index e6dfdb8..13c0968 100644
--- a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
+++ b/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(3D_CANVAS)
+#if ENABLE(ACCELERATED_2D_CANVAS) || ENABLE(WEBGL)
#include "DrawingBuffer.h"
diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
index c113c69..69bdeab 100644
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -1384,11 +1384,15 @@ static HashSet<String> mimeTypeCache()
// These formats are supported by GStreamer, but not
// correctly advertised.
- if (g_str_equal(name, "video/x-h264")
- || g_str_equal(name, "audio/x-m4a")) {
+ if (g_str_equal(name, "video/x-h264")) {
cache.add(String("video/mp4"));
+ cached = true;
+ }
+
+ if (g_str_equal(name, "audio/x-m4a")) {
cache.add(String("audio/aac"));
cache.add(String("audio/mp4"));
+ cache.add(String("audio/x-m4a"));
cached = true;
}
@@ -1466,6 +1470,15 @@ static HashSet<String> mimeTypeCache()
for (int index = 0; extensions[index]; index++) {
if (g_str_equal(extensions[index], "m4v"))
cache.add(String("video/x-m4v"));
+
+ // Workaround for
+ // https://bugzilla.gnome.org/show_bug.cgi?id=640709.
+ // typefindfunctions <= 0.10.32 doesn't
+ // register the H264 typefinder correctly so
+ // as a workaround we check the registered
+ // file extensions for it.
+ if (g_str_equal(extensions[index], "h264"))
+ cache.add(String("video/mp4"));
}
}
}
diff --git a/Source/WebCore/platform/graphics/gtk/FontGtk.cpp b/Source/WebCore/platform/graphics/gtk/FontGtk.cpp
index 4d6f509..216fb56 100644
--- a/Source/WebCore/platform/graphics/gtk/FontGtk.cpp
+++ b/Source/WebCore/platform/graphics/gtk/FontGtk.cpp
@@ -215,6 +215,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
static void drawGlyphsShadow(GraphicsContext* graphicsContext, cairo_t* context, const FloatPoint& point, PangoLayoutLine* layoutLine, PangoRegionType renderRegion)
{
ContextShadow* shadow = graphicsContext->contextShadow();
diff --git a/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp
index ce7ec46..017b1e4 100644
--- a/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp
@@ -31,7 +31,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
{
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode)
{
return FontPlatformData(size, bold, italic);
}
diff --git a/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.h
index 86f99b2..7ffe89a 100644
--- a/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/haiku/FontCustomPlatformData.h
@@ -23,6 +23,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Forward.h>
namespace WebCore {
@@ -38,7 +39,7 @@ namespace WebCore {
static bool supportsFormat(const String&);
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
};
FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer*);
diff --git a/Source/WebCore/platform/graphics/haiku/FontHaiku.cpp b/Source/WebCore/platform/graphics/haiku/FontHaiku.cpp
index 819fecb..5a1a1d0 100644
--- a/Source/WebCore/platform/graphics/haiku/FontHaiku.cpp
+++ b/Source/WebCore/platform/graphics/haiku/FontHaiku.cpp
@@ -65,6 +65,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
void Font::drawGlyphs(GraphicsContext* graphicsContext, const SimpleFontData* font,
const GlyphBuffer& glyphBuffer, int from, int numGlyphs, const FloatPoint& point) const
{
diff --git a/Source/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp b/Source/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
index b1e7082..4ded761 100644
--- a/Source/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
+++ b/Source/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
@@ -48,11 +48,11 @@ void SimpleFontData::platformInit()
font_height height;
font->GetHeight(&height);
- m_ascent = static_cast<int>(height.ascent);
- m_descent = static_cast<int>(height.descent);
- m_lineSpacing = m_ascent + m_descent;
- m_xHeight = height.ascent * 0.56f; // Hack taken from the win port.
- m_lineGap = height.leading;
+ m_fontMetrics.setAscent(height.ascent);
+ m_fontMetrics.setDescent(height.descent);
+ m_fontMetrics.setXHeight(height.ascent * 0.56f); // Hack taken from the win port.
+ m_fontMetrics.setLineGap(height.leading);
+ m_fontMetrics.setLineSpacing(lroundf(height.ascent) + lroundf(height.descent) + lroundf(height.leading));
}
void SimpleFontData::platformCharWidthInit()
diff --git a/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp b/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp
index 86f6bec..1fe3d28 100644
--- a/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp
+++ b/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,14 +25,13 @@
#include "config.h"
#include "ComplexTextController.h"
-#include <ApplicationServices/ApplicationServices.h>
-#include "CharacterNames.h"
#include "FloatSize.h"
#include "Font.h"
#include "TextBreakIterator.h"
#include "TextRun.h"
-
+#include <ApplicationServices/ApplicationServices.h>
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#if defined(BUILDING_ON_LEOPARD)
// Undefined when compiling agains the 10.5 SDK.
@@ -71,7 +70,8 @@ ComplexTextController::ComplexTextController(const Font* font, const TextRun& ru
, m_glyphInCurrentRun(0)
, m_characterInCurrentGlyph(0)
, m_finalRoundingWidth(0)
- , m_padding(run.padding())
+ , m_expansion(run.expansion())
+ , m_afterExpansion(true)
, m_fallbackFonts(fallbackFonts)
, m_minGlyphBoundingBoxX(numeric_limits<float>::max())
, m_maxGlyphBoundingBoxX(numeric_limits<float>::min())
@@ -79,19 +79,18 @@ ComplexTextController::ComplexTextController(const Font* font, const TextRun& ru
, m_maxGlyphBoundingBoxY(numeric_limits<float>::min())
, m_lastRoundingGlyph(0)
{
- if (!m_padding)
- m_padPerSpace = 0;
+ if (!m_expansion)
+ m_expansionPerOpportunity = 0;
else {
- int numSpaces = 0;
- for (int s = 0; s < m_run.length(); s++) {
- if (Font::treatAsSpace(m_run[s]))
- numSpaces++;
- }
+ bool isAfterExpansion = true;
+ unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, m_run.ltr() ? LTR : RTL, isAfterExpansion);
+ if (isAfterExpansion && !m_run.allowsTrailingExpansion())
+ expansionOpportunityCount--;
- if (!numSpaces)
- m_padPerSpace = 0;
+ if (!expansionOpportunityCount)
+ m_expansionPerOpportunity = 0;
else
- m_padPerSpace = m_padding / numSpaces;
+ m_expansionPerOpportunity = m_expansion / expansionOpportunityCount;
}
collectComplexTextRuns();
@@ -118,9 +117,9 @@ int ComplexTextController::offsetForPosition(float h, bool includePartialGlyphs)
CFIndex hitGlyphStart = complexTextRun.indexAt(j);
CFIndex hitGlyphEnd;
if (m_run.ltr())
- hitGlyphEnd = max<CFIndex>(hitGlyphStart, j + 1 < complexTextRun.glyphCount() ? complexTextRun.indexAt(j + 1) : static_cast<CFIndex>(complexTextRun.stringLength()));
+ hitGlyphEnd = max<CFIndex>(hitGlyphStart, j + 1 < complexTextRun.glyphCount() ? complexTextRun.indexAt(j + 1) : static_cast<CFIndex>(complexTextRun.indexEnd()));
else
- hitGlyphEnd = max<CFIndex>(hitGlyphStart, j > 0 ? complexTextRun.indexAt(j - 1) : static_cast<CFIndex>(complexTextRun.stringLength()));
+ hitGlyphEnd = max<CFIndex>(hitGlyphStart, j > 0 ? complexTextRun.indexAt(j - 1) : static_cast<CFIndex>(complexTextRun.indexEnd()));
// FIXME: Instead of dividing the glyph's advance equally between the characters, this
// could use the glyph's "ligature carets". However, there is no Core Text API to get the
@@ -311,6 +310,7 @@ ComplexTextController::ComplexTextRun::ComplexTextRun(const SimpleFontData* font
, m_characters(characters)
, m_stringLocation(stringLocation)
, m_stringLength(stringLength)
+ , m_indexEnd(stringLength)
, m_isMonotonic(true)
{
#if USE(CORE_TEXT) && USE(ATSUI)
@@ -335,7 +335,7 @@ void ComplexTextController::ComplexTextRun::setIsNonMonotonic()
m_glyphEndOffsets.grow(m_glyphCount);
for (size_t i = 0; i < m_glyphCount; ++i) {
- CFIndex nextMappedIndex = m_stringLength;
+ CFIndex nextMappedIndex = m_indexEnd;
for (size_t j = indexAt(i) + 1; j < m_stringLength; ++j) {
if (mappedIndices[j]) {
nextMappedIndex = j;
@@ -370,9 +370,9 @@ void ComplexTextController::advance(unsigned offset, GlyphBuffer* glyphBuffer)
unsigned glyphEndOffset;
if (complexTextRun.isMonotonic()) {
if (ltr)
- glyphEndOffset = max<unsigned>(glyphStartOffset, g + 1 < glyphCount ? static_cast<unsigned>(complexTextRun.indexAt(g + 1)) : complexTextRun.stringLength());
+ glyphEndOffset = max<unsigned>(glyphStartOffset, static_cast<unsigned>(g + 1 < glyphCount ? complexTextRun.indexAt(g + 1) : complexTextRun.indexEnd()));
else
- glyphEndOffset = max<unsigned>(glyphStartOffset, g > 0 ? static_cast<unsigned>(complexTextRun.indexAt(g - 1)) : complexTextRun.stringLength());
+ glyphEndOffset = max<unsigned>(glyphStartOffset, static_cast<unsigned>(g > 0 ? complexTextRun.indexAt(g - 1) : complexTextRun.indexEnd()));
} else
glyphEndOffset = complexTextRun.endOffsetAt(g);
@@ -386,7 +386,7 @@ void ComplexTextController::advance(unsigned offset, GlyphBuffer* glyphBuffer)
unsigned oldCharacterInCurrentGlyph = m_characterInCurrentGlyph;
m_characterInCurrentGlyph = min(m_currentCharacter - complexTextRun.stringLocation(), glyphEndOffset) - glyphStartOffset;
- // FIXME: Instead of dividing the glyph's advance equially between the characters, this
+ // FIXME: Instead of dividing the glyph's advance equally between the characters, this
// could use the glyph's "ligature carets". However, there is no Core Text API to get the
// ligature carets.
if (glyphStartOffset == glyphEndOffset) {
@@ -421,6 +421,7 @@ void ComplexTextController::adjustGlyphsAndAdvances()
{
CGFloat widthSinceLastRounding = 0;
size_t runCount = m_complexTextRuns.size();
+ bool hasExtraSpacing = (m_font.letterSpacing() || m_font.wordSpacing() || m_expansion) && !m_run.spacingDisabled();
for (size_t r = 0; r < runCount; ++r) {
ComplexTextRun& complexTextRun = *m_complexTextRuns[r];
unsigned glyphCount = complexTextRun.glyphCount();
@@ -433,7 +434,6 @@ void ComplexTextController::adjustGlyphsAndAdvances()
const UChar* cp = complexTextRun.characters();
CGFloat roundedSpaceWidth = roundCGFloat(fontData->spaceWidth());
bool roundsAdvances = !m_font.isPrinterFont() && fontData->platformData().roundsGlyphAdvances();
- bool hasExtraSpacing = (m_font.letterSpacing() || m_font.wordSpacing() || m_padding) && !m_run.spacingDisabled();
CGPoint glyphOrigin = CGPointZero;
CFIndex lastCharacterIndex = m_run.ltr() ? numeric_limits<CFIndex>::min() : numeric_limits<CFIndex>::max();
bool isMonotonic = true;
@@ -489,25 +489,29 @@ void ComplexTextController::adjustGlyphsAndAdvances()
advance.width += m_font.letterSpacing();
// Handle justification and word-spacing.
- if (treatAsSpace) {
- // Account for padding. WebCore uses space padding to justify text.
- // We distribute the specified padding over the available spaces in the run.
- if (m_padding) {
- // Use leftover padding if not evenly divisible by number of spaces.
- if (m_padding < m_padPerSpace) {
- advance.width += m_padding;
- m_padding = 0;
- } else {
- float previousPadding = m_padding;
- m_padding -= m_padPerSpace;
- advance.width += roundf(previousPadding) - roundf(m_padding);
+ if (treatAsSpace || Font::isCJKIdeographOrSymbol(ch)) {
+ // Distribute the run's total expansion evenly over all expansion opportunities in the run.
+ if (m_expansion && (!lastGlyph || m_run.allowsTrailingExpansion())) {
+ float previousExpansion = m_expansion;
+ if (!treatAsSpace && !m_afterExpansion) {
+ // Take the expansion opportunity before this ideograph.
+ m_expansion -= m_expansionPerOpportunity;
+ int expansion = roundf(previousExpansion) - roundf(m_expansion);
+ m_totalWidth += expansion;
+ m_adjustedAdvances.last().width += expansion;
+ previousExpansion = m_expansion;
}
- }
+ m_expansion -= m_expansionPerOpportunity;
+ advance.width += roundf(previousExpansion) - roundf(m_expansion);
+ m_afterExpansion = true;
+ } else
+ m_afterExpansion = false;
// Account for word-spacing.
- if (characterIndex > 0 && !Font::treatAsSpace(*m_run.data(characterIndex - 1)) && m_font.wordSpacing())
+ if (treatAsSpace && characterIndex > 0 && !Font::treatAsSpace(*m_run.data(characterIndex - 1)) && m_font.wordSpacing())
advance.width += m_font.wordSpacing();
- }
+ } else
+ m_afterExpansion = false;
}
// Deal with the float/integer impedance mismatch between CG and WebCore. "Words" (characters
@@ -549,9 +553,9 @@ void ComplexTextController::adjustGlyphsAndAdvances()
FloatRect glyphBounds = fontData->boundsForGlyph(glyph);
glyphBounds.move(glyphOrigin.x, glyphOrigin.y);
m_minGlyphBoundingBoxX = min(m_minGlyphBoundingBoxX, glyphBounds.x());
- m_maxGlyphBoundingBoxX = max(m_maxGlyphBoundingBoxX, glyphBounds.right());
+ m_maxGlyphBoundingBoxX = max(m_maxGlyphBoundingBoxX, glyphBounds.maxX());
m_minGlyphBoundingBoxY = min(m_minGlyphBoundingBoxY, glyphBounds.y());
- m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, glyphBounds.bottom());
+ m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, glyphBounds.maxY());
glyphOrigin.x += advance.width;
glyphOrigin.y += advance.height;
diff --git a/Source/WebCore/platform/graphics/mac/ComplexTextController.h b/Source/WebCore/platform/graphics/mac/ComplexTextController.h
index 9cf80a6..63f93a2 100644
--- a/Source/WebCore/platform/graphics/mac/ComplexTextController.h
+++ b/Source/WebCore/platform/graphics/mac/ComplexTextController.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -72,9 +72,9 @@ private:
class ComplexTextRun : public RefCounted<ComplexTextRun> {
public:
#if USE(CORE_TEXT)
- static PassRefPtr<ComplexTextRun> create(CTRunRef ctRun, const SimpleFontData* fontData, const UChar* characters, unsigned stringLocation, size_t stringLength)
+ static PassRefPtr<ComplexTextRun> create(CTRunRef ctRun, const SimpleFontData* fontData, const UChar* characters, unsigned stringLocation, size_t stringLength, CFRange runRange)
{
- return adoptRef(new ComplexTextRun(ctRun, fontData, characters, stringLocation, stringLength));
+ return adoptRef(new ComplexTextRun(ctRun, fontData, characters, stringLocation, stringLength, runRange));
}
#endif
#if USE(ATSUI)
@@ -94,6 +94,7 @@ private:
unsigned stringLocation() const { return m_stringLocation; }
size_t stringLength() const { return m_stringLength; }
ALWAYS_INLINE CFIndex indexAt(size_t i) const;
+ CFIndex indexEnd() const { return m_indexEnd; }
CFIndex endOffsetAt(size_t i) const { ASSERT(!m_isMonotonic); return m_glyphEndOffsets[i]; }
const CGGlyph* glyphs() const { return m_glyphs; }
const CGSize* advances() const { return m_advances; }
@@ -102,7 +103,7 @@ private:
private:
#if USE(CORE_TEXT)
- ComplexTextRun(CTRunRef, const SimpleFontData*, const UChar* characters, unsigned stringLocation, size_t stringLength);
+ ComplexTextRun(CTRunRef, const SimpleFontData*, const UChar* characters, unsigned stringLocation, size_t stringLength, CFRange runRange);
void createTextRunFromFontDataCoreText(bool ltr);
#endif
#if USE(ATSUI)
@@ -133,6 +134,7 @@ private:
#if USE(ATSUI)
Vector<CFIndex, 64> m_atsuiIndices;
#endif
+ CFIndex m_indexEnd;
Vector<CFIndex, 64> m_glyphEndOffsets;
Vector<CGGlyph, 64> m_glyphsVector;
const CGGlyph* m_glyphs;
@@ -175,8 +177,9 @@ private:
unsigned m_glyphInCurrentRun;
unsigned m_characterInCurrentGlyph;
float m_finalRoundingWidth;
- float m_padding;
- float m_padPerSpace;
+ float m_expansion;
+ float m_expansionPerOpportunity;
+ bool m_afterExpansion;
HashSet<const SimpleFontData*>* m_fallbackFonts;
diff --git a/Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp b/Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
index 9c2ab6b..b367fdf 100644
--- a/Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
+++ b/Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
@@ -25,10 +25,10 @@
#if USE(ATSUI)
-#include "CharacterNames.h"
#include "Font.h"
#include "ShapeArabic.h"
#include "TextRun.h"
+#include <wtf/unicode/CharacterNames.h>
#ifdef __LP64__
// ATSUTextInserted() is SPI in 64-bit.
@@ -146,6 +146,7 @@ ComplexTextController::ComplexTextRun::ComplexTextRun(ATSUTextLayout atsuTextLay
, m_characters(characters)
, m_stringLocation(stringLocation)
, m_stringLength(stringLength)
+ , m_indexEnd(stringLength)
, m_directionalOverride(directionalOverride)
, m_isMonotonic(true)
{
diff --git a/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp b/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
index 07fb153..239113f 100644
--- a/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
+++ b/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
@@ -42,12 +42,13 @@ extern const CFStringRef kCTTypesetterOptionForcedEmbeddingLevel;
namespace WebCore {
-ComplexTextController::ComplexTextRun::ComplexTextRun(CTRunRef ctRun, const SimpleFontData* fontData, const UChar* characters, unsigned stringLocation, size_t stringLength)
+ComplexTextController::ComplexTextRun::ComplexTextRun(CTRunRef ctRun, const SimpleFontData* fontData, const UChar* characters, unsigned stringLocation, size_t stringLength, CFRange runRange)
: m_coreTextRun(ctRun)
, m_fontData(fontData)
, m_characters(characters)
, m_stringLocation(stringLocation)
, m_stringLength(stringLength)
+ , m_indexEnd(runRange.location + runRange.length)
, m_isMonotonic(true)
{
m_glyphCount = CTRunGetGlyphCount(m_coreTextRun.get());
@@ -165,7 +166,8 @@ void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UC
for (CFIndex r = 0; r < runCount; r++) {
CTRunRef ctRun = static_cast<CTRunRef>(CFArrayGetValueAtIndex(runArray, r));
ASSERT(CFGetTypeID(ctRun) == CTRunGetTypeID());
- m_complexTextRuns.append(ComplexTextRun::create(ctRun, fontData, cp, stringLocation, length));
+ CFRange runRange = CTRunGetStringRange(ctRun);
+ m_complexTextRuns.append(ComplexTextRun::create(ctRun, fontData, cp, stringLocation, length, runRange));
}
}
diff --git a/Source/WebCore/platform/graphics/mac/FontCacheMac.mm b/Source/WebCore/platform/graphics/mac/FontCacheMac.mm
index 068bd8e..c254906 100644
--- a/Source/WebCore/platform/graphics/mac/FontCacheMac.mm
+++ b/Source/WebCore/platform/graphics/mac/FontCacheMac.mm
@@ -211,7 +211,7 @@ FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD
bool syntheticBold = isAppKitFontWeightBold(weight) && !isAppKitFontWeightBold(actualWeight);
bool syntheticOblique = (traits & NSFontItalicTrait) && !(actualTraits & NSFontItalicTrait);
- return new FontPlatformData(platformFont, size, syntheticBold, syntheticOblique, fontDescription.orientation());
+ return new FontPlatformData(platformFont, size, syntheticBold, syntheticOblique, fontDescription.orientation(), fontDescription.widthVariant());
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp b/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp
index 02bac9c..865051d 100644
--- a/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp
+++ b/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp
@@ -111,8 +111,8 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
{
ComplexTextController controller(this, run, true, fallbackFonts);
if (glyphOverflow) {
- glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - ascent());
- glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - descent());
+ glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - fontMetrics().ascent());
+ glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - fontMetrics().descent());
glyphOverflow->left = max<int>(0, ceilf(-controller.minGlyphBoundingBoxX()));
glyphOverflow->right = max<int>(0, ceilf(controller.maxGlyphBoundingBoxX() - controller.totalWidth()));
}
diff --git a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp
index d04d0e4..f2bc33d 100644
--- a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp
@@ -38,9 +38,9 @@ FontCustomPlatformData::~FontCustomPlatformData()
CGFontRelease(m_cgFont);
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation orientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant widthVariant, FontRenderingMode)
{
- return FontPlatformData(m_cgFont, size, bold, italic, orientation);
+ return FontPlatformData(m_cgFont, size, bold, italic, orientation, widthVariant);
}
FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer)
diff --git a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h
index 7043d7e..c7ae1ca 100644
--- a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h
@@ -23,6 +23,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <CoreFoundation/CFBase.h>
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -47,7 +48,7 @@ public:
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
diff --git a/Source/WebCore/platform/graphics/mac/FontMac.mm b/Source/WebCore/platform/graphics/mac/FontMac.mm
index 8519667..acd7562 100644
--- a/Source/WebCore/platform/graphics/mac/FontMac.mm
+++ b/Source/WebCore/platform/graphics/mac/FontMac.mm
@@ -47,6 +47,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return true;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return true;
+}
+
static void showGlyphsWithAdvances(const SimpleFontData* font, CGContextRef context, const CGGlyph* glyphs, const CGSize* advances, size_t count)
{
const FontPlatformData& platformData = font->platformData();
@@ -60,8 +65,8 @@ static void showGlyphsWithAdvances(const SimpleFontData* font, CGContextRef cont
savedMatrix = CGContextGetTextMatrix(context);
CGAffineTransform runMatrix = CGAffineTransformConcat(savedMatrix, rotateLeftTransform);
// Move start point to put glyphs into original region.
- runMatrix.tx = savedMatrix.tx + font->ascent();
- runMatrix.ty = savedMatrix.ty + font->descent();
+ runMatrix.tx = savedMatrix.tx + font->fontMetrics().ascent();
+ runMatrix.ty = savedMatrix.ty + font->fontMetrics().descent();
CGContextSetTextMatrix(context, runMatrix);
}
diff --git a/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp b/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
index 5388c24..8b04ffa 100644
--- a/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
+++ b/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
@@ -39,8 +39,8 @@ namespace WebCore {
#ifndef BUILDING_ON_TIGER
static bool shouldUseCoreText(UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
{
- if (fontData->orientation() == Vertical && !fontData->isBrokenIdeographFont()) {
- // Ideographs don't have a vertical variant.
+ if (fontData->platformData().widthVariant() != RegularWidth || (fontData->orientation() == Vertical && !fontData->isBrokenIdeographFont())) {
+ // Ideographs don't have a vertical variant or width variants.
for (unsigned i = 0; i < bufferLength; ++i) {
if (!Font::isCJKIdeograph(buffer[i]))
return true;
diff --git a/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm b/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
index 21eb59d..aaa250b 100644
--- a/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
+++ b/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
@@ -245,6 +245,10 @@ bool GraphicsContext3D::isGLES2Compliant() const
return false;
}
+void GraphicsContext3D::setContextLostCallback(PassOwnPtr<ContextLostCallback>)
+{
+}
+
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm b/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
index 2361f6a..8b1fb92 100644
--- a/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
+++ b/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
@@ -616,7 +616,7 @@ QTTime MediaPlayerPrivateQTKit::createQTTime(float time) const
if (!metaDataAvailable())
return QTMakeTime(0, 600);
long timeScale = [[m_qtMovie.get() attributeForKey:QTMovieTimeScaleAttribute] longValue];
- return QTMakeTime(time * timeScale, timeScale);
+ return QTMakeTime(lroundf(time * timeScale), timeScale);
}
void MediaPlayerPrivateQTKit::resumeLoad()
diff --git a/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm b/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
index 92585c6..3094498 100644
--- a/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
+++ b/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
@@ -218,19 +218,20 @@ void SimpleFontData::platformInit()
int iAscent;
int iDescent;
int iLineGap;
+ unsigned unitsPerEm;
#ifdef BUILDING_ON_TIGER
- wkGetFontMetrics(m_platformData.cgFont(), &iAscent, &iDescent, &iLineGap, &m_unitsPerEm);
+ wkGetFontMetrics(m_platformData.cgFont(), &iAscent, &iDescent, &iLineGap, &unitsPerEm);
#else
iAscent = CGFontGetAscent(m_platformData.cgFont());
iDescent = CGFontGetDescent(m_platformData.cgFont());
iLineGap = CGFontGetLeading(m_platformData.cgFont());
- m_unitsPerEm = CGFontGetUnitsPerEm(m_platformData.cgFont());
+ unitsPerEm = CGFontGetUnitsPerEm(m_platformData.cgFont());
#endif
float pointSize = m_platformData.m_size;
- float fAscent = scaleEmToUnits(iAscent, m_unitsPerEm) * pointSize;
- float fDescent = -scaleEmToUnits(iDescent, m_unitsPerEm) * pointSize;
- float fLineGap = scaleEmToUnits(iLineGap, m_unitsPerEm) * pointSize;
+ float ascent = scaleEmToUnits(iAscent, unitsPerEm) * pointSize;
+ float descent = -scaleEmToUnits(iDescent, unitsPerEm) * pointSize;
+ float lineGap = scaleEmToUnits(iLineGap, unitsPerEm) * pointSize;
// We need to adjust Times, Helvetica, and Courier to closely match the
// vertical metrics of their Microsoft counterparts that are the de facto
@@ -239,25 +240,23 @@ void SimpleFontData::platformInit()
// and add it to the ascent.
NSString *familyName = [m_platformData.font() familyName];
if ([familyName isEqualToString:@"Times"] || [familyName isEqualToString:@"Helvetica"] || [familyName isEqualToString:@"Courier"])
- fAscent += floorf(((fAscent + fDescent) * 0.15f) + 0.5f);
+ ascent += floorf(((ascent + descent) * 0.15f) + 0.5f);
else if ([familyName isEqualToString:@"Geeza Pro"]) {
// Geeza Pro has glyphs that draw slightly above the ascent or far below the descent. Adjust
// those vertical metrics to better match reality, so that diacritics at the bottom of one line
// do not overlap diacritics at the top of the next line.
- fAscent *= 1.08f;
- fDescent *= 2.f;
+ ascent *= 1.08f;
+ descent *= 2.f;
}
- m_ascent = lroundf(fAscent);
- m_descent = lroundf(fDescent);
- m_lineGap = lroundf(fLineGap);
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
-
+ // Compute and store line spacing, before the line metrics hacks are applied.
+ m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
+
// Hack Hiragino line metrics to allow room for marked text underlines.
// <rdar://problem/5386183>
- if (m_descent < 3 && m_lineGap >= 3 && [familyName hasPrefix:@"Hiragino"]) {
- m_lineGap -= 3 - m_descent;
- m_descent = 3;
+ if (descent < 3 && lineGap >= 3 && [familyName hasPrefix:@"Hiragino"]) {
+ lineGap -= 3 - descent;
+ descent = 3;
}
if (m_orientation == Vertical) {
@@ -278,6 +277,8 @@ void SimpleFontData::platformInit()
m_orientation = Horizontal;
}
+ float xHeight;
+
// Measure the actual character "x", because AppKit synthesizes X height rather than getting it from the font.
// Unfortunately, NSFont will round this for us so we don't quite get the right value.
GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(this, 0)->page();
@@ -288,21 +289,27 @@ void SimpleFontData::platformInit()
// and web pages that foolishly use this metric for width will be laid out
// poorly if we return an accurate height. Classic case is Times 13 point,
// which has an "x" that is 7x6 pixels.
- m_xHeight = static_cast<float>(max(CGRectGetMaxX(xBox), -CGRectGetMinY(xBox)));
+ xHeight = static_cast<float>(max(CGRectGetMaxX(xBox), -CGRectGetMinY(xBox)));
} else {
#ifndef BUILDING_ON_TIGER
- m_xHeight = static_cast<float>(CGFontGetXHeight(m_platformData.cgFont())) / m_unitsPerEm;
+ xHeight = static_cast<float>(CGFontGetXHeight(m_platformData.cgFont())) / unitsPerEm;
#else
- m_xHeight = m_platformData.font() ? [m_platformData.font() xHeight] : 0;
+ xHeight = m_platformData.font() ? [m_platformData.font() xHeight] : 0;
#endif
// CGFontGetXHeight() returns a wrong value for "Apple Symbols" font (a float close to 0, but not strictly 0).
- // The following code makes a guess for m_xHeight in that case.
+ // The following code makes a guess for xHeight in that case.
// The int cast is a workaround for the "almost" zero value returned by CGFontGetXHeight().
- if (!static_cast<int>(m_xHeight) && fAscent)
- m_xHeight = 2 * fAscent / 3;
+ if (!static_cast<int>(xHeight) && ascent)
+ xHeight = 2 * ascent / 3;
}
+
+ m_fontMetrics.setUnitsPerEm(unitsPerEm);
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setXHeight(xHeight);
}
-
+
static CFDataRef copyFontTableForTag(FontPlatformData& platformData, FourCharCode tableName)
{
#ifdef BUILDING_ON_TIGER
@@ -337,7 +344,7 @@ void SimpleFontData::platformCharWidthInit()
if (os2Table && CFDataGetLength(os2Table.get()) >= 4) {
const UInt8* os2 = CFDataGetBytePtr(os2Table.get());
SInt16 os2AvgCharWidth = os2[2] * 256 + os2[3];
- m_avgCharWidth = scaleEmToUnits(os2AvgCharWidth, m_unitsPerEm) * m_platformData.m_size;
+ m_avgCharWidth = scaleEmToUnits(os2AvgCharWidth, m_fontMetrics.unitsPerEm()) * m_platformData.m_size;
}
RetainPtr<CFDataRef> headTable(AdoptCF, copyFontTableForTag(m_platformData, 'head'));
@@ -348,7 +355,7 @@ void SimpleFontData::platformCharWidthInit()
SInt16 xMin = static_cast<SInt16>(uxMin);
SInt16 xMax = static_cast<SInt16>(uxMax);
float diff = static_cast<float>(xMax - xMin);
- m_maxCharWidth = scaleEmToUnits(diff, m_unitsPerEm) * m_platformData.m_size;
+ m_maxCharWidth = scaleEmToUnits(diff, m_fontMetrics.unitsPerEm()) * m_platformData.m_size;
}
// Fallback to a cross-platform estimate, which will populate these values if they are non-positive.
@@ -387,7 +394,7 @@ SimpleFontData* SimpleFontData::scaledFontData(const FontDescription& fontDescri
BEGIN_BLOCK_OBJC_EXCEPTIONS;
float size = m_platformData.size() * scaleFactor;
- FontPlatformData scaledFontData([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toSize:size], size);
+ FontPlatformData scaledFontData([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toSize:size], size, false, false, m_platformData.orientation());
// AppKit resets the type information (screen/printer) when you convert a font to a different size.
// We have to fix up the font that we're handed back.
@@ -470,13 +477,13 @@ FloatRect SimpleFontData::platformBoundsForGlyph(Glyph glyph) const
#ifndef BUILDING_ON_TIGER
boundingBox = CTFontGetBoundingRectsForGlyphs(m_platformData.ctFont(),
orientation() == Vertical ? kCTFontVerticalOrientation : kCTFontHorizontalOrientation, &glyph, 0, 1);
- boundingBox.setY(-boundingBox.bottom());
+ boundingBox.setY(-boundingBox.maxY());
#else
// FIXME: Custom fonts don't have NSFonts, so this function doesn't compute correct bounds for these on Tiger.
if (!m_platformData.font())
return boundingBox;
boundingBox = [m_platformData.font() boundingRectForGlyph:glyph];
- boundingBox.setY(-boundingBox.bottom());
+ boundingBox.setY(-boundingBox.maxY());
#endif
if (m_syntheticBoldOffset)
boundingBox.setWidth(boundingBox.width() + m_syntheticBoldOffset);
diff --git a/Source/WebCore/platform/graphics/mac/WebGLLayer.mm b/Source/WebCore/platform/graphics/mac/WebGLLayer.mm
index c24181b..d1007b9 100644
--- a/Source/WebCore/platform/graphics/mac/WebGLLayer.mm
+++ b/Source/WebCore/platform/graphics/mac/WebGLLayer.mm
@@ -26,7 +26,7 @@
#include "config.h"
#if USE(ACCELERATED_COMPOSITING)
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#import "WebGLLayer.h"
@@ -163,5 +163,5 @@ static void freeData(void *, const void *data, size_t /* size */)
@end
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp b/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
index 3eb5196..df45147 100644
--- a/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
+++ b/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "Extensions3DOpenGL.h"
@@ -79,6 +79,10 @@ bool Extensions3DOpenGL::supports(const String& name)
if (name == "GL_ANGLE_framebuffer_multisample")
return m_availableExtensions.contains("GL_EXT_framebuffer_multisample");
+ // Desktop GL always supports GL_OES_rgb8_rgba8.
+ if (name == "GL_OES_rgb8_rgba8")
+ return true;
+
// If GL_ARB_texture_float is available then we report GL_OES_texture_float and
// GL_OES_texture_half_float as available.
if (name == "GL_OES_texture_float" || name == "GL_OES_texture_half_float")
@@ -125,4 +129,4 @@ void Extensions3DOpenGL::renderbufferStorageMultisample(unsigned long target, un
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp b/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp
index 7c103f3..c224e20 100644
--- a/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp
+++ b/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
@@ -83,7 +83,7 @@ void GraphicsContext3D::paintRenderingResultsToCanvas(CanvasRenderingContext* co
int rowBytes = m_currentWidth * 4;
int totalBytes = rowBytes * m_currentHeight;
- OwnArrayPtr<unsigned char> pixels(new unsigned char[totalBytes]);
+ OwnArrayPtr<unsigned char> pixels = adoptArrayPtr(new unsigned char[totalBytes]);
if (!pixels)
return;
@@ -1437,28 +1437,6 @@ void GraphicsContext3D::deleteTexture(Platform3DObject texture)
glDeleteTextures(1, &texture);
}
-uint32_t GraphicsContext3D::sizeInBytes(GC3Denum type)
-{
- switch (type) {
- case GL_BYTE:
- return sizeof(GLbyte);
- case GL_UNSIGNED_BYTE:
- return sizeof(GLubyte);
- case GL_SHORT:
- return sizeof(GLshort);
- case GL_UNSIGNED_SHORT:
- return sizeof(GLushort);
- case GL_INT:
- return sizeof(GLint);
- case GL_UNSIGNED_INT:
- return sizeof(GLuint);
- case GL_FLOAT:
- return sizeof(GLfloat);
- default:
- return 0;
- }
-}
-
void GraphicsContext3D::synthesizeGLError(GC3Denum error)
{
m_syntheticErrors.add(error);
@@ -1473,4 +1451,4 @@ Extensions3D* GraphicsContext3D::getExtensions()
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp b/Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp
index 03f9b7c..2e2082d 100644
--- a/Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp
+++ b/Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp
@@ -390,7 +390,7 @@ void TextureMapperGL::drawTexture(const BitmapTexture& texture, const IntRect& t
const GLfloat unitRect[] = {0, 0, 1, 0, 1, 1, 0, 1};
GL_CMD(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, unitRect))
- TransformationMatrix matrix = TransformationMatrix(data().projectionMatrix).multLeft(modelViewMatrix).multLeft(TransformationMatrix(
+ TransformationMatrix matrix = TransformationMatrix(data().projectionMatrix).multiply(modelViewMatrix).multiply(TransformationMatrix(
targetRect.width(), 0, 0, 0,
0, targetRect.height(), 0, 0,
0, 0, 1, 0,
@@ -606,7 +606,7 @@ void TextureMapperGL::paintToTarget(const BitmapTexture& aSurface, const IntSize
const BitmapTextureGL& surface = static_cast<const BitmapTextureGL&>(aSurface);
// Create the model-view-projection matrix to display on screen.
- TransformationMatrix matrix = createProjectionMatrix(surfaceSize, true).multLeft(transform).multLeft(
+ TransformationMatrix matrix = createProjectionMatrix(surfaceSize, true).multiply(transform).multiply(
TransformationMatrix(
surface.m_actualSize.width(), 0, 0, 0,
0, surface.m_actualSize.height(), 0, 0,
diff --git a/Source/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp b/Source/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp
index a158689..f9d36d3 100644
--- a/Source/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp
+++ b/Source/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp
@@ -30,7 +30,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
{
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode)
{
return FontPlatformData(m_fontFace, size, bold, italic);
}
diff --git a/Source/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp b/Source/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
index d0bf836..3fe15b3 100644
--- a/Source/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
+++ b/Source/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
@@ -49,21 +49,27 @@ void SimpleFontData::platformInit()
cairo_font_extents_t font_extents;
cairo_text_extents_t text_extents;
cairo_scaled_font_extents(m_platformData.m_scaledFont, &font_extents);
- m_ascent = static_cast<int>(lroundf(font_extents.ascent));
- m_descent = static_cast<int>(lroundf(font_extents.descent));
- m_lineSpacing = static_cast<int>(lroundf(font_extents.height));
+
+ m_fontMetrics.setAscent(font_extents.ascent);
+ m_fontMetrics.setDescent(font_extents.descent);
+
// There seems to be some rounding error in cairo (or in how we
// use cairo) with some fonts, like DejaVu Sans Mono, which makes
// cairo report a height smaller than ascent + descent, which is
// wrong and confuses WebCore's layout system. Workaround this
// while we figure out what's going on.
- if (m_lineSpacing < m_ascent + m_descent)
- m_lineSpacing = m_ascent + m_descent;
+ float lineSpacing = font_extents.height;
+ if (lineSpacing < font_extents.ascent + font_extents.descent)
+ lineSpacing = font_extents.ascent + font_extents.descent;
+ m_fontMetrics.setLineSpacing(lroundf(lineSpacing));
+ m_fontMetrics.setLineGap(lineSpacing - font_extents.ascent - font_extents.descent);
+
cairo_scaled_font_text_extents(m_platformData.m_scaledFont, "x", &text_extents);
- m_xHeight = text_extents.height;
+ m_fontMetrics.setXHeight(text_extents.height);
+
cairo_scaled_font_text_extents(m_platformData.m_scaledFont, " ", &text_extents);
- m_spaceWidth = static_cast<float>(text_extents.x_advance);
- m_lineGap = m_lineSpacing - m_ascent - m_descent;
+ m_spaceWidth = static_cast<float>(text_extents.x_advance);
+
m_syntheticBoldOffset = m_platformData.syntheticBold() ? 1.0f : 0.f;
}
diff --git a/Source/WebCore/platform/graphics/qt/ContextShadowQt.cpp b/Source/WebCore/platform/graphics/qt/ContextShadowQt.cpp
index 37d6b44..9eb31a7 100644
--- a/Source/WebCore/platform/graphics/qt/ContextShadowQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/ContextShadowQt.cpp
@@ -57,7 +57,7 @@ private:
ShadowBuffer::ShadowBuffer(QObject* parent)
: QObject(parent)
- , timerId(0)
+ , timerId(-1)
{
}
@@ -89,7 +89,8 @@ QImage* ShadowBuffer::scratchImage(const QSize& size)
void ShadowBuffer::schedulePurge()
{
static const double BufferPurgeDelay = 2; // seconds
- killTimer(timerId);
+ if (timerId >= 0)
+ killTimer(timerId);
timerId = startTimer(BufferPurgeDelay * 1000);
}
diff --git a/Source/WebCore/platform/graphics/qt/Extensions3DQt.cpp b/Source/WebCore/platform/graphics/qt/Extensions3DQt.cpp
index cd28f0e..5238d46 100644
--- a/Source/WebCore/platform/graphics/qt/Extensions3DQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/Extensions3DQt.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "Extensions3DQt.h"
@@ -58,4 +58,4 @@ int Extensions3DQt::getGraphicsResetStatusARB()
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/qt/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/qt/FontCustomPlatformData.h
index 54fa679..e8441d2 100644
--- a/Source/WebCore/platform/graphics/qt/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/qt/FontCustomPlatformData.h
@@ -24,6 +24,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/FastAllocBase.h>
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -42,7 +43,7 @@ public:
// for use with QFontDatabase::addApplicationFont/removeApplicationFont
int m_handle;
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
};
diff --git a/Source/WebCore/platform/graphics/qt/FontCustomPlatformDataQt.cpp b/Source/WebCore/platform/graphics/qt/FontCustomPlatformDataQt.cpp
index e2f009b..ec8747d 100644
--- a/Source/WebCore/platform/graphics/qt/FontCustomPlatformDataQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/FontCustomPlatformDataQt.cpp
@@ -34,7 +34,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
QFontDatabase::removeApplicationFont(m_handle);
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode)
{
QFont font;
font.setFamily(QFontDatabase::applicationFontFamilies(m_handle)[0]);
diff --git a/Source/WebCore/platform/graphics/qt/FontQt.cpp b/Source/WebCore/platform/graphics/qt/FontQt.cpp
index 778a13f..646cd0e 100644
--- a/Source/WebCore/platform/graphics/qt/FontQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/FontQt.cpp
@@ -61,14 +61,14 @@ static const QString fromRawDataWithoutRef(const String& string, int start = 0,
static QTextLine setupLayout(QTextLayout* layout, const TextRun& style)
{
int flags = style.rtl() ? Qt::TextForceRightToLeft : Qt::TextForceLeftToRight;
- if (style.padding())
+ if (style.expansion())
flags |= Qt::TextJustificationForced;
layout->setFlags(flags);
layout->beginLayout();
QTextLine line = layout->createLine();
line.setLineWidth(INT_MAX/256);
- if (style.padding())
- line.setLineWidth(line.naturalTextWidth() + style.padding());
+ if (style.expansion())
+ line.setLineWidth(line.naturalTextWidth() + style.expansion());
layout->endLayout();
return line;
}
@@ -107,7 +107,7 @@ static void drawTextCommon(GraphicsContext* ctx, const TextRun& run, const Float
textStrokePen = QPen(QColor(ctx->strokeColor()), ctx->strokeThickness());
}
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
QPointF pt(point.x(), point.y());
@@ -196,7 +196,7 @@ static void drawTextCommon(GraphicsContext* ctx, const TextRun& run, const Float
p->save();
p->setPen(ctxShadow->m_color);
p->translate(ctxShadow->offset());
- p->drawText(pt, string, flags, run.padding());
+ p->drawText(pt, string, flags, run.expansion());
p->restore();
} else {
QFontMetrics fm(font);
@@ -210,7 +210,7 @@ static void drawTextCommon(GraphicsContext* ctx, const TextRun& run, const Float
// Since it will be blurred anyway, we don't care about render hints.
shadowPainter->setFont(p->font());
shadowPainter->setPen(ctxShadow->m_color);
- shadowPainter->drawText(pt, string, flags, run.padding());
+ shadowPainter->drawText(pt, string, flags, run.expansion());
ctxShadow->endShadowLayer(ctx);
}
}
@@ -243,7 +243,7 @@ static void drawTextCommon(GraphicsContext* ctx, const TextRun& run, const Float
if (ctx->textDrawingMode() & TextModeFill) {
QPen previousPen = p->pen();
p->setPen(textFillPen);
- p->drawText(pt, string, flags, run.padding());
+ p->drawText(pt, string, flags, run.expansion());
p->setPen(previousPen);
}
}
@@ -299,7 +299,7 @@ float Font::floatWidthForSimpleText(const TextRun& run, GlyphBuffer* glyphBuffer
if (!run.length())
return 0;
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
int w = QFontMetrics(font()).width(string, -1, Qt::TextBypassShaping);
@@ -308,7 +308,7 @@ float Font::floatWidthForSimpleText(const TextRun& run, GlyphBuffer* glyphBuffer
if (treatAsSpace(run[0]))
w -= m_wordSpacing;
- return w + run.padding();
+ return w + run.expansion();
#else
Q_ASSERT(false);
return 0;
@@ -324,9 +324,9 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
return 0;
if (run.length() == 1 && treatAsSpace(run[0]))
- return QFontMetrics(font()).width(space) + run.padding();
+ return QFontMetrics(font()).width(space) + run.expansion();
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
int w = QFontMetrics(font()).width(string);
@@ -334,13 +334,13 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
if (treatAsSpace(run[0]))
w -= m_wordSpacing;
- return w + run.padding();
+ return w + run.expansion();
}
int Font::offsetForPositionForSimpleText(const TextRun& run, float position, bool includePartialGlyphs) const
{
#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
QFontMetrics fm(font());
@@ -367,7 +367,7 @@ int Font::offsetForPositionForSimpleText(const TextRun& run, float position, boo
int Font::offsetForPositionForComplexText(const TextRun& run, float position, bool) const
{
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
QTextLayout layout(string, font());
@@ -378,7 +378,7 @@ int Font::offsetForPositionForComplexText(const TextRun& run, float position, bo
FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint& pt, int h, int from, int to) const
{
#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString wholeText = fromRawDataWithoutRef(sanitized);
QString selectedText = fromRawDataWithoutRef(sanitized, from, qMin(to - from, wholeText.length() - from));
@@ -394,7 +394,7 @@ FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint&
FloatRect Font::selectionRectForComplexText(const TextRun& run, const FloatPoint& pt, int h, int from, int to) const
{
- String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
+ String sanitized = Font::normalizeSpaces(run.characters(), run.length());
QString string = fromRawDataWithoutRef(sanitized);
QTextLayout layout(string, font());
@@ -413,6 +413,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
bool Font::primaryFontHasGlyphForCharacter(UChar32) const
{
notImplemented();
diff --git a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
index 295212c..8b87f5f 100644
--- a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
@@ -34,7 +34,7 @@
#include <wtf/UnusedParam.h>
#include <wtf/text/CString.h>
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
namespace WebCore {
@@ -1611,28 +1611,6 @@ void GraphicsContext3D::deleteTexture(Platform3DObject texture)
glDeleteTextures(1, &texture);
}
-unsigned int GraphicsContext3D::sizeInBytes(GC3Denum type)
-{
- switch (type) {
- case GraphicsContext3D::BYTE:
- return sizeof(GLbyte);
- case GraphicsContext3D::UNSIGNED_BYTE:
- return sizeof(GLubyte);
- case GraphicsContext3D::SHORT:
- return sizeof(GLshort);
- case GraphicsContext3D::UNSIGNED_SHORT:
- return sizeof(GLushort);
- case GraphicsContext3D::INT:
- return sizeof(GLint);
- case GraphicsContext3D::UNSIGNED_INT:
- return sizeof(GLuint);
- case GraphicsContext3D::FLOAT:
- return sizeof(GLfloat);
- default:
- return 0;
- }
-}
-
void GraphicsContext3D::synthesizeGLError(GC3Denum error)
{
m_internal->m_syntheticErrors.add(error);
@@ -1669,6 +1647,10 @@ bool GraphicsContext3D::getImageData(Image* image,
format, type, neededAlphaOp, outputVector.data());
}
+void GraphicsContext3D::setContextLostCallback(PassOwnPtr<ContextLostCallback>)
+{
+}
+
}
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
index 4dabe09..bf2826c 100644
--- a/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
@@ -62,14 +62,11 @@
#include <QPolygonF>
#include <QStack>
#include <QVector>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
+#include <wtf/MathExtras.h>
namespace WebCore {
-QPainter::CompositionMode GraphicsContext::toQtCompositionMode(CompositeOperator op)
+static inline QPainter::CompositionMode toQtCompositionMode(CompositeOperator op)
{
switch (op) {
case CompositeClear:
@@ -231,8 +228,15 @@ GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(QPainter* p, cons
if (!painter)
return;
+#if OS(SYMBIAN)
+ if (painter->paintEngine()->type() == QPaintEngine::OpenVG)
+ antiAliasingForRectsAndLines = true;
+ else
+ antiAliasingForRectsAndLines = painter->testRenderHint(QPainter::Antialiasing);
+#else
// Use the default the QPainter was constructed with.
antiAliasingForRectsAndLines = painter->testRenderHint(QPainter::Antialiasing);
+#endif
// Used for default image interpolation quality.
initialSmoothPixmapTransformHint = painter->testRenderHint(QPainter::SmoothPixmapTransform);
@@ -784,7 +788,7 @@ void GraphicsContext::clipPath(const Path& path, WindRule clipRule)
p->setClipPath(platformPath, Qt::IntersectClip);
}
-void drawFocusRingForPath(QPainter* p, const QPainterPath& path, int width, const Color& color, bool antiAliasing)
+void drawFocusRingForPath(QPainter* p, const QPainterPath& path, const Color& color, bool antiAliasing)
{
const bool antiAlias = p->testRenderHint(QPainter::Antialiasing);
p->setRenderHint(QPainter::Antialiasing, antiAliasing);
@@ -794,9 +798,8 @@ void drawFocusRingForPath(QPainter* p, const QPainterPath& path, int width, cons
QPen nPen = p->pen();
nPen.setColor(color);
- nPen.setWidth(width);
p->setBrush(Qt::NoBrush);
- nPen.setStyle(Qt::SolidLine);
+ nPen.setStyle(Qt::DotLine);
p->strokePath(path, nPen);
p->setBrush(oldBrush);
@@ -805,14 +808,14 @@ void drawFocusRingForPath(QPainter* p, const QPainterPath& path, int width, cons
p->setRenderHint(QPainter::Antialiasing, antiAlias);
}
-void GraphicsContext::drawFocusRing(const Path& path, int width, int offset, const Color& color)
+void GraphicsContext::drawFocusRing(const Path& path, int /* width */, int offset, const Color& color)
{
// FIXME: Use 'offset' for something? http://webkit.org/b/49909
if (paintingDisabled() || !color.isValid())
return;
- drawFocusRingForPath(m_data->p(), path.platformPath(), width, color, m_data->antiAliasingForRectsAndLines);
+ drawFocusRingForPath(m_data->p(), path.platformPath(), color, m_data->antiAliasingForRectsAndLines);
}
/**
@@ -840,8 +843,7 @@ void GraphicsContext::drawFocusRing(const Vector<IntRect>& rects, int width, int
tmpPath.addRoundedRect(rect, radius, radius);
path = path.united(tmpPath);
}
-
- drawFocusRingForPath(m_data->p(), path, width, color, m_data->antiAliasingForRectsAndLines);
+ drawFocusRingForPath(m_data->p(), path, color, m_data->antiAliasingForRectsAndLines);
}
void GraphicsContext::drawLineForText(const IntPoint& origin, int width, bool)
@@ -896,7 +898,7 @@ FloatRect GraphicsContext::roundToDevicePixels(const FloatRect& frect)
qreal deviceScaleY = sqrtf(deviceTransform.m21() * deviceTransform.m21() + deviceTransform.m22() * deviceTransform.m22());
QPoint deviceOrigin(frect.x() * deviceScaleX, frect.y() * deviceScaleY);
- QPoint deviceLowerRight(frect.right() * deviceScaleX, frect.bottom() * deviceScaleY);
+ QPoint deviceLowerRight(frect.maxX() * deviceScaleX, frect.maxY() * deviceScaleY);
// Don't let the height or width round to 0 unless either was originally 0
if (deviceOrigin.y() == deviceLowerRight.y() && frect.height())
@@ -1135,7 +1137,7 @@ void GraphicsContext::rotate(float radians)
if (paintingDisabled())
return;
- m_data->p()->rotate(180 / M_PI*radians);
+ m_data->p()->rotate(rad2deg(qreal(radians)));
}
void GraphicsContext::scale(const FloatSize& s)
diff --git a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
index 75fb427..0d7aa45 100644
--- a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
@@ -305,7 +305,7 @@ public:
}
} m_state;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
const GraphicsContext3D* m_gc3D;
#endif
@@ -335,7 +335,7 @@ GraphicsLayerQtImpl::GraphicsLayerQtImpl(GraphicsLayerQt* newLayer)
#if ENABLE(TILED_BACKING_STORE)
, m_tiledBackingStore(0)
#endif
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
, m_gc3D(0)
#endif
{
@@ -529,12 +529,12 @@ void GraphicsLayerQtImpl::updateTransform()
// have to maintain that ourselves for 3D.
localTransform
.translate3d(originX + m_state.pos.x(), originY + m_state.pos.y(), m_state.anchorPoint.z())
- .multLeft(m_baseTransform)
+ .multiply(m_baseTransform)
.translate3d(-originX, -originY, -m_state.anchorPoint.z());
// This is the actual 3D transform of this item, with the ancestors' transform baked in.
m_transformRelativeToRootLayer = TransformationMatrix(parent ? parent->m_transformRelativeToRootLayer : TransformationMatrix())
- .multLeft(localTransform);
+ .multiply(localTransform);
// Now we have enough information to determine if the layer is facing backwards.
if (!m_state.backfaceVisibility && m_transformRelativeToRootLayer.inverse().m33() < 0) {
@@ -562,7 +562,7 @@ void GraphicsLayerQtImpl::updateTransform()
if (!m_state.childrenTransform.isIdentity()) {
m_transformRelativeToRootLayer
.translate(m_size.width() / 2, m_size.height() /2)
- .multLeft(m_state.childrenTransform)
+ .multiply(m_state.childrenTransform)
.translate(-m_size.width() / 2, -m_size.height() /2);
}
@@ -647,7 +647,7 @@ void GraphicsLayerQtImpl::paint(QPainter* painter, const QStyleOptionGraphicsIte
case MediaContentType:
// we don't need to paint anything: we have a QGraphicsItem from the media element
break;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
case Canvas3DContentType:
m_gc3D->paint(painter, option->rect);
break;
@@ -791,7 +791,7 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
setFlag(ItemHasNoContents, !m_layer->drawsContent());
break;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
case Canvas3DContentType:
if (m_pendingContent.contentType != m_currentContent.contentType)
update();
@@ -1250,7 +1250,7 @@ void GraphicsLayerQt::setContentsBackgroundColor(const Color& color)
GraphicsLayer::setContentsBackgroundColor(color);
}
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
void GraphicsLayerQt::setContentsToGraphicsContext3D(const GraphicsContext3D* ctx)
{
if (ctx == m_impl->m_gc3D)
diff --git a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h
index 8027143..569bd8d 100644
--- a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h
+++ b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h
@@ -20,7 +20,7 @@
#ifndef GraphicsLayerQt_h
#define GraphicsLayerQt_h
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
#endif
#include "GraphicsLayer.h"
@@ -79,7 +79,7 @@ public:
virtual void setContentsNeedsDisplay();
virtual void setContentsToMedia(PlatformLayer*);
virtual void setContentsBackgroundColor(const Color&);
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
virtual void setContentsToGraphicsContext3D(const GraphicsContext3D*);
virtual void setGraphicsContext3DNeedsDisplay();
#endif
diff --git a/Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp b/Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp
index d1567ec..62f5c3e 100644
--- a/Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp
@@ -188,7 +188,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
RefPtr<ByteArray> result = ByteArray::create(rect.width() * rect.height() * 4);
unsigned char* data = result->data();
- if (rect.x() < 0 || rect.y() < 0 || rect.right() > size.width() || rect.bottom() > size.height())
+ if (rect.x() < 0 || rect.y() < 0 || rect.maxX() > size.width() || rect.maxY() > size.height())
memset(data, 0, result->length());
int originx = rect.x();
@@ -197,7 +197,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
destx = -originx;
originx = 0;
}
- int endx = rect.right();
+ int endx = rect.maxX();
if (endx > size.width())
endx = size.width();
int numColumns = endx - originx;
@@ -208,7 +208,7 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const ImageBufferData& i
desty = -originy;
originy = 0;
}
- int endy = rect.bottom();
+ int endy = rect.maxY();
if (endy > size.height())
endy = size.height();
int numRows = endy - originy;
@@ -302,9 +302,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(destx >= 0);
ASSERT(destx < size.width());
ASSERT(originx >= 0);
- ASSERT(originx <= sourceRect.right());
+ ASSERT(originx <= sourceRect.maxX());
- int endx = destPoint.x() + sourceRect.right();
+ int endx = destPoint.x() + sourceRect.maxX();
ASSERT(endx <= size.width());
int numColumns = endx - destx;
@@ -314,9 +314,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(desty >= 0);
ASSERT(desty < size.height());
ASSERT(originy >= 0);
- ASSERT(originy <= sourceRect.bottom());
+ ASSERT(originy <= sourceRect.maxY());
- int endy = destPoint.y() + sourceRect.bottom();
+ int endy = destPoint.y() + sourceRect.maxY();
ASSERT(endy <= size.height());
int numRows = endy - desty;
diff --git a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
index 71352e4..3540994 100644
--- a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
@@ -213,7 +213,7 @@ bool ImageDecoderQt::internalHandleCurrentImage(size_t frameIndex)
// now into the ImageFrame - even if the image is not
ImageFrame* const buffer = &m_frameBufferCache[frameIndex];
- buffer->setRect(m_reader->currentImageRect());
+ buffer->setOriginalFrameRect(m_reader->currentImageRect());
buffer->setStatus(ImageFrame::FrameComplete);
buffer->setDuration(m_reader->nextImageDelay());
buffer->setPixmap(pixmap);
diff --git a/Source/WebCore/platform/graphics/qt/ImageQt.cpp b/Source/WebCore/platform/graphics/qt/ImageQt.cpp
index 58f82ef..0c8ce9e 100644
--- a/Source/WebCore/platform/graphics/qt/ImageQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/ImageQt.cpp
@@ -120,11 +120,9 @@ void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const
CompositeOperator previousOperator = ctxt->compositeOperation();
- ctxt->setCompositeOperation(op);
- QPainter* p = ctxt->platformContext();
- if (!pixmap.hasAlpha() && p->compositionMode() == QPainter::CompositionMode_SourceOver)
- p->setCompositionMode(QPainter::CompositionMode_Source);
+ ctxt->setCompositeOperation(!pixmap.hasAlpha() && op == CompositeSourceOver ? CompositeCopy : op);
+ QPainter* p = ctxt->platformContext();
QTransform transform(patternTransform);
// If this would draw more than one scaled tile, we scale the pixmap first and then use the result to draw.
@@ -223,15 +221,8 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dst,
return;
}
- QPainter* painter(ctxt->platformContext());
-
- QPainter::CompositionMode compositionMode = GraphicsContext::toQtCompositionMode(op);
-
- if (!image->hasAlpha() && painter->compositionMode() == QPainter::CompositionMode_SourceOver)
- compositionMode = QPainter::CompositionMode_Source;
-
- QPainter::CompositionMode lastCompositionMode = painter->compositionMode();
- painter->setCompositionMode(compositionMode);
+ CompositeOperator previousOperator = ctxt->compositeOperation();
+ ctxt->setCompositeOperation(!image->hasAlpha() && op == CompositeSourceOver ? CompositeCopy : op);
ContextShadow* shadow = ctxt->contextShadow();
if (shadow->m_type != ContextShadow::NoShadow) {
@@ -243,11 +234,9 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dst,
}
}
- // Test using example site at
- // http://www.meyerweb.com/eric/css/edge/complexspiral/demo.html
- painter->drawPixmap(normalizedDst, *image, normalizedSrc);
+ ctxt->platformContext()->drawPixmap(normalizedDst, *image, normalizedSrc);
- painter->setCompositionMode(lastCompositionMode);
+ ctxt->setCompositeOperation(previousOperator);
if (imageObserver())
imageObserver()->didDraw(this);
diff --git a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
index b881036..fab4db1 100644
--- a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
+++ b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
@@ -102,7 +102,7 @@ MediaPlayerPrivatePhonon::MediaPlayerPrivatePhonon(MediaPlayer* player)
// Make sure we get updates for each frame
m_videoWidget->installEventFilter(this);
- foreach (QWidget* widget, qFindChildren<QWidget*>(m_videoWidget))
+ foreach (QWidget* widget, m_videoWidget->findChildren<QWidget*>())
widget->installEventFilter(this);
connect(m_mediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
diff --git a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
index 0a4c0f6..caf9c2d 100644
--- a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
@@ -215,7 +215,7 @@ void MediaPlayerPrivateQt::commitLoad(const String& url)
// Don't set the header if there are no cookies.
// This prevents a warning from being emitted.
if (!cookies.isEmpty())
- request.setHeader(QNetworkRequest::CookieHeader, qVariantFromValue(cookies));
+ request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookies));
// Set the refferer, but not when requesting insecure content from a secure page
QUrl documentUrl = QUrl(QString(document->documentURI()));
@@ -543,7 +543,7 @@ void MediaPlayerPrivateQt::updateStates()
m_readyState = MediaPlayer::HaveCurrentData;
} else if (currentStatus == QMediaPlayer::BufferedMedia
|| currentStatus == QMediaPlayer::EndOfMedia) {
- m_networkState = MediaPlayer::Idle;
+ m_networkState = MediaPlayer::Loaded;
m_readyState = MediaPlayer::HaveEnoughData;
} else if (currentStatus == QMediaPlayer::InvalidMedia) {
m_networkState = MediaPlayer::NetworkError;
@@ -618,6 +618,21 @@ void MediaPlayerPrivateQt::paint(GraphicsContext* context, const IntRect& rect)
m_videoScene->render(painter, QRectF(QRect(rect)), m_videoItem->sceneBoundingRect());
}
+void MediaPlayerPrivateQt::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& rect)
+{
+ if (context->paintingDisabled())
+ return;
+
+ if (!m_isVisible)
+ return;
+
+ // Grab the painter and widget
+ QPainter* painter = context->platformContext();
+
+ // Render the video, using the item as it might not be in the scene
+ m_videoItem->paint(painter, 0, 0);
+}
+
void MediaPlayerPrivateQt::repaint()
{
m_webCorePlayer->repaint();
diff --git a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h
index 2621432..e4133db 100644
--- a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h
+++ b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h
@@ -89,6 +89,8 @@ public:
void setSize(const IntSize&);
void paint(GraphicsContext*, const IntRect&);
+ // reimplemented for canvas drawImage(HTMLVideoElement)
+ void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
bool supportsFullscreen() const { return true; }
diff --git a/Source/WebCore/platform/graphics/qt/PathQt.cpp b/Source/WebCore/platform/graphics/qt/PathQt.cpp
index 571b405..ad482f7 100644
--- a/Source/WebCore/platform/graphics/qt/PathQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/PathQt.cpp
@@ -39,15 +39,9 @@
#include <QPainterPath>
#include <QTransform>
#include <QString>
+#include <wtf/MathExtras.h>
#include <wtf/OwnPtr.h>
-#define _USE_MATH_DEFINES
-#include <math.h>
-
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
namespace WebCore {
Path::Path()
@@ -263,7 +257,6 @@ void Path::closeSubpath()
m_path.closeSubpath();
}
-#define DEGREES(t) ((t) * 180.0 / M_PI)
void Path::addArc(const FloatPoint& p, float r, float sar, float ear, bool anticlockwise)
{
qreal xc = p.x();
@@ -280,8 +273,8 @@ void Path::addArc(const FloatPoint& p, float r, float sar, float ear, bool antic
anticlockwise = !anticlockwise;
//end hack
- float sa = DEGREES(sar);
- float ea = DEGREES(ear);
+ float sa = rad2deg(sar);
+ float ea = rad2deg(ear);
double span = 0;
@@ -438,6 +431,14 @@ float Path::normalAngleAtLength(float length, bool& ok)
qreal percent = m_path.percentAtLength(length);
qreal angle = m_path.angleAtPercent(percent);
+ // Normalize angle value.
+ // QPainterPath returns angle values with the origo being at the top left corner.
+ // In case of moveTo(0, 0) and addLineTo(0, 10) the angle is 270,
+ // while the caller expects it to be 90.
+ // Normalize the value by mirroring it to the x-axis.
+ // For more info look at pathLengthApplierFunction().
+ if (angle > 0)
+ angle = 360 - angle;
return angle;
}
diff --git a/Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp b/Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp
index 47ddf02..9e43558 100644
--- a/Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp
@@ -24,7 +24,7 @@
#include "config.h"
#include "SimpleFontData.h"
-#include <QFontMetrics>
+#include <QFontMetricsF>
namespace WebCore {
@@ -41,25 +41,19 @@ bool SimpleFontData::containsCharacters(const UChar*, int) const
void SimpleFontData::platformInit()
{
if (!m_platformData.size()) {
- m_ascent = 0;
- m_descent = 0;
- m_lineGap = 0;
- m_lineSpacing = 0;
+ m_fontMetrics.reset();
m_avgCharWidth = 0;
m_maxCharWidth = 0;
- m_xHeight = 0;
- m_unitsPerEm = 0;
return;
}
- QFontMetrics fm(m_platformData.font());
-
- m_ascent = fm.ascent();
- m_descent = fm.descent();
- m_lineSpacing = fm.lineSpacing();
- m_xHeight = fm.xHeight();
+ QFontMetricsF fm(m_platformData.font());
+ m_fontMetrics.setAscent(fm.ascent());
+ m_fontMetrics.setDescent(fm.descent());
+ m_fontMetrics.setXHeight(fm.xHeight());
+ m_fontMetrics.setLineGap(fm.leading());
+ m_fontMetrics.setLineSpacing(fm.lineSpacing());
m_spaceWidth = fm.width(QLatin1Char(' '));
- m_lineGap = fm.leading();
}
void SimpleFontData::platformGlyphInit()
diff --git a/Source/WebCore/platform/graphics/qt/TransparencyLayer.h b/Source/WebCore/platform/graphics/qt/TransparencyLayer.h
index ff9ef20..f13deb0 100644
--- a/Source/WebCore/platform/graphics/qt/TransparencyLayer.h
+++ b/Source/WebCore/platform/graphics/qt/TransparencyLayer.h
@@ -59,9 +59,8 @@ public:
painter.setPen(p->pen());
painter.setBrush(p->brush());
painter.setTransform(p->transform(), true);
- painter.setOpacity(p->opacity());
painter.setFont(p->font());
- painter.setCompositionMode(p->compositionMode());
+ painter.setOpacity(1);
}
TransparencyLayer()
diff --git a/Source/WebCore/platform/graphics/skia/FloatRectSkia.cpp b/Source/WebCore/platform/graphics/skia/FloatRectSkia.cpp
index a10371f..23045ba 100644
--- a/Source/WebCore/platform/graphics/skia/FloatRectSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/FloatRectSkia.cpp
@@ -43,7 +43,7 @@ FloatRect::FloatRect(const SkRect& r)
FloatRect::operator SkRect() const
{
- SkRect rect = { x(), y(), right(), bottom() };
+ SkRect rect = { x(), y(), maxX(), maxY() };
return rect;
}
diff --git a/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.cpp
index 0b31dfa..0e68c21 100644
--- a/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.cpp
@@ -65,7 +65,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
#endif
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation orientation, FontRenderingMode mode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant, FontRenderingMode mode)
{
#if OS(WINDOWS)
ASSERT(m_fontReference);
@@ -114,13 +114,12 @@ FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, b
// not allow access from CSS.
static String createUniqueFontName()
{
- Vector<char> fontUuid(sizeof(GUID));
- CoCreateGuid(reinterpret_cast<GUID*>(fontUuid.data()));
+ GUID fontUuid;
+ CoCreateGuid(&fontUuid);
- Vector<char> fontNameVector;
- base64Encode(fontUuid, fontNameVector);
- ASSERT(fontNameVector.size() < LF_FACESIZE);
- return String(fontNameVector.data(), fontNameVector.size());
+ String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid));
+ ASSERT(fontName.length() < LF_FACESIZE);
+ return fontName;
}
#endif
diff --git a/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.h
index 4228b40..2dee3ab 100644
--- a/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/skia/FontCustomPlatformData.h
@@ -34,6 +34,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -65,7 +66,7 @@ public:
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal,
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth,
FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
diff --git a/Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp b/Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
index c4b753b..5950c35 100644
--- a/Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
@@ -26,7 +26,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
@@ -87,4 +87,4 @@ bool GraphicsContext3D::getImageData(Image* image,
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp b/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
index 1a7112b..9f2ed32 100644
--- a/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
@@ -309,20 +309,6 @@ void GraphicsContext::addInnerRoundedRectClip(const IntRect& rect, int thickness
platformContext()->clipPathAntiAliased(path);
}
-void GraphicsContext::addPath(const Path& path)
-{
- if (paintingDisabled())
- return;
- platformContext()->addPath(*path.platformPath());
-}
-
-void GraphicsContext::beginPath()
-{
- if (paintingDisabled())
- return;
- platformContext()->beginPath();
-}
-
void GraphicsContext::clearPlatformShadow()
{
if (paintingDisabled())
@@ -431,11 +417,7 @@ void GraphicsContext::clipPath(const Path& pathToClip, WindRule clipRule)
if (platformContext()->useGPU())
platformContext()->gpuCanvas()->clipPath(pathToClip);
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToClip);
-
- SkPath path = platformContext()->currentPathInLocalCoordinates();
+ SkPath path = *pathToClip.platformPath();
if (!isPathSkiaSafe(getCTM(), path))
return;
@@ -738,17 +720,13 @@ void GraphicsContext::fillPath(const Path& pathToFill)
if (paintingDisabled())
return;
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToFill);
-
if (platformContext()->useGPU() && platformContext()->canAccelerate()) {
platformContext()->prepareForHardwareDraw();
platformContext()->gpuCanvas()->fillPath(pathToFill);
return;
}
- SkPath path = platformContext()->currentPathInLocalCoordinates();
+ SkPath path = *pathToFill.platformPath();
if (!isPathSkiaSafe(getCTM(), path))
return;
@@ -1204,11 +1182,7 @@ void GraphicsContext::strokePath(const Path& pathToStroke)
if (paintingDisabled())
return;
- // FIXME: Be smarter about this.
- beginPath();
- addPath(pathToStroke);
-
- SkPath path = platformContext()->currentPathInLocalCoordinates();
+ SkPath path = *pathToStroke.platformPath();
if (!isPathSkiaSafe(getCTM(), path))
return;
diff --git a/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp b/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
index 2c489ef..2721523 100644
--- a/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
@@ -2,11 +2,11 @@
* Copyright (c) 2008, Google Inc. All rights reserved.
* Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
* Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@@ -16,7 +16,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -162,12 +162,14 @@ void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable)
}
template <Multiply multiplied>
-PassRefPtr<ByteArray> getImageData(const IntRect& rect, const SkBitmap& bitmap,
+PassRefPtr<ByteArray> getImageData(const IntRect& rect, SkDevice& srcDevice,
const IntSize& size)
{
RefPtr<ByteArray> result = ByteArray::create(rect.width() * rect.height() * 4);
- if (bitmap.config() == SkBitmap::kNo_Config) {
+ SkBitmap::Config srcConfig = srcDevice.accessBitmap(false).config();
+
+ if (srcConfig == SkBitmap::kNo_Config) {
// This is an empty SkBitmap that could not be configured.
ASSERT(!size.width() || !size.height());
return result.release();
@@ -177,8 +179,8 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const SkBitmap& bitmap,
if (rect.x() < 0
|| rect.y() < 0
- || rect.right() > size.width()
- || rect.bottom() > size.height())
+ || rect.maxX() > size.width()
+ || rect.maxY() > size.height())
memset(data, 0, result->length());
int originX = rect.x();
@@ -187,12 +189,12 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const SkBitmap& bitmap,
destX = -originX;
originX = 0;
}
- int endX = rect.right();
+ int endX = rect.maxX();
if (endX > size.width())
endX = size.width();
int numColumns = endX - originX;
- if (numColumns <= 0)
+ if (numColumns <= 0)
return result.release();
int originY = rect.y();
@@ -201,38 +203,42 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const SkBitmap& bitmap,
destY = -originY;
originY = 0;
}
- int endY = rect.bottom();
+ int endY = rect.maxY();
if (endY > size.height())
endY = size.height();
int numRows = endY - originY;
- if (numRows <= 0)
+ if (numRows <= 0)
return result.release();
- ASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config);
- SkAutoLockPixels bitmapLock(bitmap);
+ ASSERT(srcConfig == SkBitmap::kARGB_8888_Config);
unsigned destBytesPerRow = 4 * rect.width();
+
+ SkBitmap srcBitmap;
+ srcDevice.readPixels(SkIRect::MakeXYWH(originX, originY, numColumns, numRows), &srcBitmap);
+
unsigned char* destRow = data + destY * destBytesPerRow + destX * 4;
+ // Do conversion of byte order and alpha divide (if necessary)
for (int y = 0; y < numRows; ++y) {
- uint32_t* srcRow = bitmap.getAddr32(originX, originY + y);
+ SkPMColor* srcBitmapRow = srcBitmap.getAddr32(0, y);
for (int x = 0; x < numColumns; ++x) {
+ SkPMColor srcPMColor = srcBitmapRow[x];
unsigned char* destPixel = &destRow[x * 4];
if (multiplied == Unmultiplied) {
- SkColor color = srcRow[x];
- unsigned a = SkColorGetA(color);
- destPixel[0] = a ? SkColorGetR(color) * 255 / a : 0;
- destPixel[1] = a ? SkColorGetG(color) * 255 / a : 0;
- destPixel[2] = a ? SkColorGetB(color) * 255 / a : 0;
+ unsigned char a = SkGetPackedA32(srcPMColor);
+ destPixel[0] = a ? SkGetPackedR32(srcPMColor) * 255 / a : 0;
+ destPixel[1] = a ? SkGetPackedG32(srcPMColor) * 255 / a : 0;
+ destPixel[2] = a ? SkGetPackedB32(srcPMColor) * 255 / a : 0;
destPixel[3] = a;
} else {
// Input and output are both pre-multiplied, we just need to re-arrange the
// bytes from the bitmap format to RGBA.
- destPixel[0] = SkGetPackedR32(srcRow[x]);
- destPixel[1] = SkGetPackedG32(srcRow[x]);
- destPixel[2] = SkGetPackedB32(srcRow[x]);
- destPixel[3] = SkGetPackedA32(srcRow[x]);
+ destPixel[0] = SkGetPackedR32(srcPMColor);
+ destPixel[1] = SkGetPackedG32(srcPMColor);
+ destPixel[2] = SkGetPackedB32(srcPMColor);
+ destPixel[3] = SkGetPackedA32(srcPMColor);
}
}
destRow += destBytesPerRow;
@@ -244,18 +250,18 @@ PassRefPtr<ByteArray> getImageData(const IntRect& rect, const SkBitmap& bitmap,
PassRefPtr<ByteArray> ImageBuffer::getUnmultipliedImageData(const IntRect& rect) const
{
context()->platformContext()->syncSoftwareCanvas();
- return getImageData<Unmultiplied>(rect, *context()->platformContext()->bitmap(), m_size);
+ return getImageData<Unmultiplied>(rect, *context()->platformContext()->canvas()->getDevice(), m_size);
}
PassRefPtr<ByteArray> ImageBuffer::getPremultipliedImageData(const IntRect& rect) const
{
context()->platformContext()->syncSoftwareCanvas();
- return getImageData<Premultiplied>(rect, *context()->platformContext()->bitmap(), m_size);
+ return getImageData<Premultiplied>(rect, *context()->platformContext()->canvas()->getDevice(), m_size);
}
template <Multiply multiplied>
-void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint,
- const SkBitmap& bitmap, const IntSize& size)
+void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint,
+ SkDevice* dstDevice, const IntSize& size)
{
ASSERT(sourceRect.width() > 0);
ASSERT(sourceRect.height() > 0);
@@ -265,9 +271,9 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(destX >= 0);
ASSERT(destX < size.width());
ASSERT(originX >= 0);
- ASSERT(originX < sourceRect.right());
+ ASSERT(originX < sourceRect.maxX());
- int endX = destPoint.x() + sourceRect.right();
+ int endX = destPoint.x() + sourceRect.maxX();
ASSERT(endX <= size.width());
int numColumns = endX - destX;
@@ -277,21 +283,33 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
ASSERT(destY >= 0);
ASSERT(destY < size.height());
ASSERT(originY >= 0);
- ASSERT(originY < sourceRect.bottom());
+ ASSERT(originY < sourceRect.maxY());
- int endY = destPoint.y() + sourceRect.bottom();
+ int endY = destPoint.y() + sourceRect.maxY();
ASSERT(endY <= size.height());
int numRows = endY - destY;
- ASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config);
- SkAutoLockPixels bitmapLock(bitmap);
-
unsigned srcBytesPerRow = 4 * sourceSize.width();
- const unsigned char* srcRow = source->data() + originY * srcBytesPerRow + originX * 4;
+ SkBitmap deviceBitmap = dstDevice->accessBitmap(true);
+ SkAutoLockPixels deviceAutoLock(deviceBitmap);
+ // If the device's bitmap doesn't have pixels we will make a temp and call writePixels on the device.
+ bool temporaryBitmap = !deviceBitmap.getPixels();
+ SkBitmap destBitmap;
+
+ if (temporaryBitmap) {
+ destBitmap.setConfig(SkBitmap::kARGB_8888_Config, numColumns, numRows, srcBytesPerRow);
+ if (!destBitmap.allocPixels())
+ CRASH();
+ } else
+ deviceBitmap.extractSubset(&destBitmap, SkIRect::MakeXYWH(destX, destY, numColumns, numRows));
+
+ // Whether we made a temporary or not destBitmap is always configured to be written at 0,0
+ SkAutoLockPixels destAutoLock(destBitmap);
+ const unsigned char* srcRow = source->data() + originY * srcBytesPerRow + originX * 4;
for (int y = 0; y < numRows; ++y) {
- uint32_t* destRow = bitmap.getAddr32(destX, destY + y);
+ SkPMColor* destRow = destBitmap.getAddr32(0, y);
for (int x = 0; x < numColumns; ++x) {
const unsigned char* srcPixel = &srcRow[x * 4];
if (multiplied == Unmultiplied) {
@@ -301,22 +319,26 @@ void putImageData(ByteArray*& source, const IntSize& sourceSize, const IntRect&
unsigned char b = SkMulDiv255Ceiling(srcPixel[2], alpha);
destRow[x] = SkPackARGB32(alpha, r, g, b);
} else
- destRow[x] = SkPackARGB32(srcPixel[3], srcPixel[0],
- srcPixel[1], srcPixel[2]);
+ destRow[x] = SkPackARGB32(srcPixel[3], srcPixel[0], srcPixel[1], srcPixel[2]);
}
srcRow += srcBytesPerRow;
}
+
+ // If we used a temporary then write it to the device
+ if (temporaryBitmap)
+ dstDevice->writePixels(destBitmap, destX, destY);
}
void ImageBuffer::putUnmultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)
{
- context()->platformContext()->prepareForSoftwareDraw();
- putImageData<Unmultiplied>(source, sourceSize, sourceRect, destPoint, *context()->platformContext()->bitmap(), m_size);
+ context()->platformContext()->syncSoftwareCanvas();
+ putImageData<Unmultiplied>(source, sourceSize, sourceRect, destPoint, context()->platformContext()->canvas()->getDevice(), m_size);
}
void ImageBuffer::putPremultipliedImageData(ByteArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint)
{
- putImageData<Premultiplied>(source, sourceSize, sourceRect, destPoint, *context()->platformContext()->bitmap(), m_size);
+ context()->platformContext()->syncSoftwareCanvas();
+ putImageData<Premultiplied>(source, sourceSize, sourceRect, destPoint, context()->platformContext()->canvas()->getDevice(), m_size);
}
String ImageBuffer::toDataURL(const String& mimeType, const double* quality) const
@@ -324,14 +346,27 @@ String ImageBuffer::toDataURL(const String& mimeType, const double* quality) con
ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType));
Vector<unsigned char> encodedImage;
+ SkDevice* device = context()->platformContext()->canvas()->getDevice();
+ SkBitmap bitmap = device->accessBitmap(false);
+
+ // if we can't see the pixels directly, call readPixels() to get a copy.
+ // this could happen if the device is backed by a GPU.
+ bitmap.lockPixels(); // balanced by our destructor, or explicitly if getPixels() fails
+ if (!bitmap.getPixels()) {
+ bitmap.unlockPixels();
+ SkIRect bounds = SkIRect::MakeWH(device->width(), device->height());
+ if (!device->readPixels(bounds, &bitmap))
+ return "data:,";
+ }
+
if (mimeType == "image/jpeg") {
int compressionQuality = JPEGImageEncoder::DefaultCompressionQuality;
if (quality && *quality >= 0.0 && *quality <= 1.0)
compressionQuality = static_cast<int>(*quality * 100 + 0.5);
- if (!JPEGImageEncoder::encode(*context()->platformContext()->bitmap(), compressionQuality, &encodedImage))
+ if (!JPEGImageEncoder::encode(bitmap, compressionQuality, &encodedImage))
return "data:,";
} else {
- if (!PNGImageEncoder::encode(*context()->platformContext()->bitmap(), &encodedImage))
+ if (!PNGImageEncoder::encode(bitmap, &encodedImage))
return "data:,";
ASSERT(mimeType == "image/png");
}
diff --git a/Source/WebCore/platform/graphics/skia/IntRectSkia.cpp b/Source/WebCore/platform/graphics/skia/IntRectSkia.cpp
index ea138ee..0024086 100644
--- a/Source/WebCore/platform/graphics/skia/IntRectSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/IntRectSkia.cpp
@@ -37,14 +37,14 @@ namespace WebCore {
IntRect::operator SkIRect() const
{
- SkIRect rect = { x(), y(), right(), bottom() };
+ SkIRect rect = { x(), y(), maxX(), maxY() };
return rect;
}
IntRect::operator SkRect() const
{
SkRect rect;
- rect.set(SkIntToScalar(x()), SkIntToScalar(y()), SkIntToScalar(right()), SkIntToScalar(bottom()));
+ rect.set(SkIntToScalar(x()), SkIntToScalar(y()), SkIntToScalar(maxX()), SkIntToScalar(maxY()));
return rect;
}
diff --git a/Source/WebCore/platform/graphics/skia/PathSkia.cpp b/Source/WebCore/platform/graphics/skia/PathSkia.cpp
index 89323c4..6318c21 100644
--- a/Source/WebCore/platform/graphics/skia/PathSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/PathSkia.cpp
@@ -227,28 +227,20 @@ void Path::transform(const AffineTransform& xform)
m_path->transform(xform);
}
-// Computes the bounding box for the stroke and style currently selected into
-// the given bounding box. This also takes into account the stroke width.
-static FloatRect boundingBoxForCurrentStroke(const GraphicsContext* context)
-{
- SkPaint paint;
- context->platformContext()->setupPaintForStroking(&paint, 0, 0);
- SkPath boundingPath;
- paint.getFillPath(context->platformContext()->currentPathInLocalCoordinates(), &boundingPath);
- return boundingPath.getBounds();
-}
-
FloatRect Path::strokeBoundingRect(StrokeStyleApplier* applier)
{
GraphicsContext* scratch = scratchContext();
scratch->save();
- scratch->beginPath();
- scratch->addPath(*this);
if (applier)
applier->strokeStyle(scratch);
- FloatRect r = boundingBoxForCurrentStroke(scratch);
+ SkPaint paint;
+ scratch->platformContext()->setupPaintForStroking(&paint, 0, 0);
+ SkPath boundingPath;
+ paint.getFillPath(*platformPath(), &boundingPath);
+
+ FloatRect r = boundingPath.getBounds();
scratch->restore();
return r;
}
diff --git a/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp b/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
index d852e9b..5e08b3c 100644
--- a/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp
@@ -51,6 +51,12 @@
#include "SkDashPathEffect.h"
#include "SkShader.h"
+#if ENABLE(SKIA_GPU)
+#include "GrContext.h"
+#include "SkGpuDevice.h"
+#include "SkGpuDeviceFactory.h"
+#endif
+
#include <wtf/MathExtras.h>
#include <wtf/OwnArrayPtr.h>
#include <wtf/Vector.h>
@@ -62,6 +68,18 @@
namespace WebCore {
+#if ENABLE(SKIA_GPU)
+GrContext* GetGlobalGrContext()
+{
+ static GrContext* gGR;
+ if (!gGR) {
+ gGR = GrContext::CreateGLShaderContext();
+ gGR->setTextureCacheLimits(512, 50 * 1024 * 1024);
+ }
+ return gGR;
+}
+#endif
+
extern bool isPathSkiaSafe(const SkMatrix& transform, const SkPath& path);
// State -----------------------------------------------------------------------
@@ -266,7 +284,7 @@ void PlatformContextSkia::beginLayerClippedToImage(const FloatRect& rect,
// create the resulting image.
m_state->m_clip = rect;
SkRect bounds = { SkFloatToScalar(rect.x()), SkFloatToScalar(rect.y()),
- SkFloatToScalar(rect.right()), SkFloatToScalar(rect.bottom()) };
+ SkFloatToScalar(rect.maxX()), SkFloatToScalar(rect.maxY()) };
canvas()->clipRect(bounds);
canvas()->saveLayerAlpha(&bounds, 255,
@@ -550,38 +568,12 @@ SkColor PlatformContextSkia::effectiveStrokeColor() const
return m_state->applyAlpha(m_state->m_strokeColor);
}
-void PlatformContextSkia::beginPath()
-{
- m_path.reset();
-}
-
-void PlatformContextSkia::addPath(const SkPath& path)
-{
- m_path.addPath(path, m_canvas->getTotalMatrix());
-}
-
-SkPath PlatformContextSkia::currentPathInLocalCoordinates() const
-{
- SkPath localPath = m_path;
- const SkMatrix& matrix = m_canvas->getTotalMatrix();
- SkMatrix inverseMatrix;
- if (!matrix.invert(&inverseMatrix))
- return SkPath();
- localPath.transform(inverseMatrix);
- return localPath;
-}
-
void PlatformContextSkia::canvasClipPath(const SkPath& path)
{
m_state->m_canvasClipApplied = true;
m_canvas->clipPath(path);
}
-void PlatformContextSkia::setFillRule(SkPath::FillType fr)
-{
- m_path.setFillType(fr);
-}
-
void PlatformContextSkia::setFillShader(SkShader* fillShader)
{
if (fillShader)
@@ -625,7 +617,11 @@ const SkBitmap* PlatformContextSkia::bitmap() const
bool PlatformContextSkia::isPrinting()
{
+#if ENABLE(SKIA_GPU)
+ return true;
+#else
return m_canvas->getTopPlatformDevice().IsVectorial();
+#endif
}
void PlatformContextSkia::getImageResamplingHint(IntSize* srcSize, FloatSize* dstSize) const
@@ -739,6 +735,19 @@ void PlatformContextSkia::setSharedGraphicsContext3D(SharedGraphicsContext3D* co
m_gpuCanvas = new GLES2Canvas(context, drawingBuffer, size);
m_uploadTexture.clear();
drawingBuffer->setWillPublishCallback(WillPublishCallbackImpl::create(this));
+
+#if ENABLE(SKIA_GPU)
+ m_useGPU = false;
+ context->makeContextCurrent();
+ m_gpuCanvas->bindFramebuffer();
+
+ GrContext* gr = GetGlobalGrContext();
+ gr->resetContext();
+ SkDeviceFactory* factory = new SkGpuDeviceFactory(gr, SkGpuDevice::Current3DApiRenderTarget());
+ SkDevice* device = factory->newDevice(m_canvas, SkBitmap::kARGB_8888_Config, drawingBuffer->size().width(), drawingBuffer->size().height(), false, false);
+ m_canvas->setDevice(device)->unref();
+ m_canvas->setDeviceFactory(factory);
+#endif
} else {
syncSoftwareCanvas();
m_uploadTexture.clear();
@@ -750,8 +759,13 @@ void PlatformContextSkia::setSharedGraphicsContext3D(SharedGraphicsContext3D* co
void PlatformContextSkia::prepareForSoftwareDraw() const
{
- if (!m_useGPU)
+ if (!m_useGPU) {
+#if ENABLE(SKIA_GPU)
+ if (m_gpuCanvas)
+ m_gpuCanvas->context()->makeContextCurrent();
+#endif
return;
+ }
if (m_backingStoreState == Hardware) {
// Depending on the blend mode we need to do one of a few things:
@@ -804,8 +818,13 @@ void PlatformContextSkia::prepareForHardwareDraw() const
void PlatformContextSkia::syncSoftwareCanvas() const
{
- if (!m_useGPU)
+ if (!m_useGPU) {
+#if ENABLE(SKIA_GPU)
+ if (m_gpuCanvas)
+ m_gpuCanvas->bindFramebuffer();
+#endif
return;
+ }
if (m_backingStoreState == Hardware)
readbackHardwareToSoftware();
@@ -865,7 +884,7 @@ void PlatformContextSkia::readbackHardwareToSoftware() const
const SkBitmap& bitmap = m_canvas->getDevice()->accessBitmap(true);
SkAutoLockPixels lock(bitmap);
int width = bitmap.width(), height = bitmap.height();
- OwnArrayPtr<uint32_t> buf(new uint32_t[width]);
+ OwnArrayPtr<uint32_t> buf = adoptArrayPtr(new uint32_t[width]);
SharedGraphicsContext3D* context = m_gpuCanvas->context();
m_gpuCanvas->bindFramebuffer();
// Flips the image vertically.
diff --git a/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h b/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h
index 0304486..d7dd6a9 100644
--- a/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h
+++ b/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h
@@ -118,7 +118,6 @@ public:
void setAlpha(float);
void setLineCap(SkPaint::Cap);
void setLineJoin(SkPaint::Join);
- void setFillRule(SkPath::FillType);
void setXfermodeMode(SkXfermode::Mode);
void setFillColor(SkColor);
void setFillShader(SkShader*);
@@ -137,10 +136,6 @@ public:
float getAlpha() const;
int getNormalizedAlpha() const;
- void beginPath();
- void addPath(const SkPath&);
- SkPath currentPathInLocalCoordinates() const;
-
void canvasClipPath(const SkPath&);
// Returns the fill color. The returned color has it's alpha adjusted
@@ -220,9 +215,6 @@ private:
// mStateStack.back().
State* m_state;
- // Current path in global coordinates.
- SkPath m_path;
-
// Stores image sizes for a hint to compute image resampling modes.
// Values are used in ImageSkia.cpp
IntSize m_imageResamplingHintSrcSize;
diff --git a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
index 85fa3ee..47a27c6 100644
--- a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
+++ b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
@@ -26,7 +26,7 @@
#include "Image.h"
#include "TextureMapperNode.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
#endif
@@ -73,7 +73,7 @@ public:
virtual void setContentsToImage(Image*);
virtual void setContentsToMedia(PlatformLayer*);
virtual void setContentsBackgroundColor(const Color&);
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
virtual void setContentsToGraphicsContext3D(const GraphicsContext3D*);
virtual void setGraphicsContext3DNeedsDisplay();
#endif
diff --git a/Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp b/Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp
index 09051f9..bf53e61 100644
--- a/Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp
+++ b/Source/WebCore/platform/graphics/texmap/TextureMapperNode.cpp
@@ -318,7 +318,7 @@ void TextureMapperNode::computeLocalTransform()
m_transforms.local =
TransformationMatrix()
.translate3d(originX + m_state.pos.x(), originY + m_state.pos.y(), m_state.anchorPoint.z())
- .multLeft(m_state.transform)
+ .multiply(m_state.transform)
.translate3d(-originX, -originY, -m_state.anchorPoint.z());
m_transforms.localDirty = false;
}
@@ -352,7 +352,7 @@ void TextureMapperNode::computeReplicaTransform()
m_nearestSurfaceSize = nearestSurfaceSize();
if (m_layerType != TransparencyLayer) {
- m_transforms.replica = TransformationMatrix(m_transforms.target).multLeft(m_state.replicaLayer->m_transforms.local);
+ m_transforms.replica = TransformationMatrix(m_transforms.target).multiply(m_state.replicaLayer->m_transforms.local);
return;
}
@@ -361,7 +361,7 @@ void TextureMapperNode::computeReplicaTransform()
m_transforms.replica =
TransformationMatrix()
.translate(originX, originY)
- .multLeft(m_state.replicaLayer->m_transforms.local)
+ .multiply(m_state.replicaLayer->m_transforms.local)
.translate(-originX, -originY);
}
@@ -377,7 +377,7 @@ void TextureMapperNode::computeTransformations()
TextureMapperNode* parent = m_parent;
computeLocalTransform();
- m_transforms.target = TransformationMatrix(parent ? parent->m_transforms.forDescendants : TransformationMatrix()).multLeft(m_transforms.local);
+ m_transforms.target = TransformationMatrix(parent ? parent->m_transforms.forDescendants : TransformationMatrix()).multiply(m_transforms.local);
m_transforms.forDescendants = (m_layerType == ClipLayer ? TransformationMatrix() : m_transforms.target);
if (m_effectTarget)
@@ -408,10 +408,10 @@ void TextureMapperNode::computeTransformations()
if (m_transforms.perspectiveDirty)
m_transforms.perspective = TransformationMatrix()
.translate(centerPoint.x(), centerPoint.y())
- .multLeft(m_state.childrenTransform)
+ .multiply(m_state.childrenTransform)
.translate(-centerPoint.x(), -centerPoint.y());
m_transforms.perspectiveDirty = false;
- m_transforms.forDescendants.multLeft(m_transforms.perspective);
+ m_transforms.forDescendants.multiply(m_transforms.perspective);
}
void TextureMapperNode::uploadTextureFromContent(TextureMapper* textureMapper, const IntRect& visibleRect, GraphicsLayer* layer)
diff --git a/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp b/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
index 3f88140..a1ffa30 100644
--- a/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
+++ b/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
@@ -222,14 +222,6 @@ AffineTransform& AffineTransform::translate(double tx, double ty)
return *this;
}
-// *this = translation * *this
-AffineTransform& AffineTransform::translateRight(double tx, double ty)
-{
- m_transform[4] += tx;
- m_transform[5] += ty;
- return *this;
-}
-
AffineTransform& AffineTransform::scaleNonUniform(double sx, double sy)
{
return scale(sx, sy);
@@ -324,9 +316,9 @@ FloatRect AffineTransform::mapRect(const FloatRect& rect) const
FloatQuad result;
result.setP1(mapPoint(rect.location()));
- result.setP2(mapPoint(FloatPoint(rect.right(), rect.y())));
- result.setP3(mapPoint(FloatPoint(rect.right(), rect.bottom())));
- result.setP4(mapPoint(FloatPoint(rect.x(), rect.bottom())));
+ result.setP2(mapPoint(FloatPoint(rect.maxX(), rect.y())));
+ result.setP3(mapPoint(FloatPoint(rect.maxX(), rect.maxY())));
+ result.setP4(mapPoint(FloatPoint(rect.x(), rect.maxY())));
return result.boundingBox();
}
diff --git a/Source/WebCore/platform/graphics/transforms/AffineTransform.h b/Source/WebCore/platform/graphics/transforms/AffineTransform.h
index 50d0655..3e3995f 100644
--- a/Source/WebCore/platform/graphics/transforms/AffineTransform.h
+++ b/Source/WebCore/platform/graphics/transforms/AffineTransform.h
@@ -103,7 +103,6 @@ public:
AffineTransform& rotate(double d);
AffineTransform& rotateFromVector(double x, double y);
AffineTransform& translate(double tx, double ty);
- AffineTransform& translateRight(double tx, double ty);
AffineTransform& shear(double sx, double sy);
AffineTransform& flipX();
AffineTransform& flipY();
@@ -172,6 +171,11 @@ public:
operator wxGraphicsMatrix() const;
#endif
+ static AffineTransform translation(double x, double y)
+ {
+ return AffineTransform(1, 0, 0, 1, x, y);
+ }
+
private:
void setMatrix(const Transform m)
{
diff --git a/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h b/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h
index 0a0aaf0..dd5dae2 100644
--- a/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h
+++ b/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h
@@ -55,7 +55,7 @@ private:
virtual bool apply(TransformationMatrix& transform, const IntSize&) const
{
- transform.multLeft(TransformationMatrix(m_matrix));
+ transform.multiply(TransformationMatrix(m_matrix));
return false;
}
diff --git a/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h b/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h
index fd9b27e..6f4e725 100644
--- a/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h
+++ b/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h
@@ -62,7 +62,7 @@ private:
virtual bool apply(TransformationMatrix& transform, const IntSize&) const
{
TransformationMatrix matrix(m_a, m_b, m_c, m_d, m_e, m_f);
- transform.multLeft(TransformationMatrix(matrix));
+ transform.multiply(matrix);
return false;
}
diff --git a/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp b/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp
index 9fd03a1..18bfe37 100644
--- a/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp
+++ b/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp
@@ -26,7 +26,7 @@
#include "config.h"
#include "PerspectiveTransformOperation.h"
-#include <algorithm>
+#include <wtf/MathExtras.h>
using namespace std;
@@ -37,22 +37,29 @@ PassRefPtr<TransformOperation> PerspectiveTransformOperation::blend(const Transf
if (from && !from->isSameType(*this))
return this;
- if (blendToIdentity)
- return PerspectiveTransformOperation::create(m_p + (1. - m_p) * progress);
+ if (blendToIdentity) {
+ double p = m_p.calcFloatValue(1);
+ p = p + (1. - p) * progress; // FIXME: this seems wrong. https://bugs.webkit.org/show_bug.cgi?id=52700
+ return PerspectiveTransformOperation::create(Length(clampToPositiveInteger(p), Fixed));
+ }
const PerspectiveTransformOperation* fromOp = static_cast<const PerspectiveTransformOperation*>(from);
- double fromP = fromOp ? fromOp->m_p : 0;
- double toP = m_p;
+ Length fromP = fromOp ? fromOp->m_p : Length(m_p.type());
+ Length toP = m_p;
TransformationMatrix fromT;
TransformationMatrix toT;
- fromT.applyPerspective(fromP);
- toT.applyPerspective(toP);
+ fromT.applyPerspective(fromP.calcFloatValue(1));
+ toT.applyPerspective(toP.calcFloatValue(1));
toT.blend(fromT, progress);
TransformationMatrix::DecomposedType decomp;
toT.decompose(decomp);
-
- return PerspectiveTransformOperation::create(decomp.perspectiveZ ? -1.0 / decomp.perspectiveZ : 0.0);
+
+ if (decomp.perspectiveZ) {
+ double val = -1.0 / decomp.perspectiveZ;
+ return PerspectiveTransformOperation::create(Length(clampToPositiveInteger(val), Fixed));
+ }
+ return PerspectiveTransformOperation::create(Length(0, Fixed));
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h b/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h
index 834cc83..886d3dc 100644
--- a/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h
+++ b/Source/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h
@@ -26,21 +26,22 @@
#ifndef PerspectiveTransformOperation_h
#define PerspectiveTransformOperation_h
+#include "Length.h"
#include "TransformOperation.h"
namespace WebCore {
class PerspectiveTransformOperation : public TransformOperation {
public:
- static PassRefPtr<PerspectiveTransformOperation> create(double p)
+ static PassRefPtr<PerspectiveTransformOperation> create(const Length& p)
{
return adoptRef(new PerspectiveTransformOperation(p));
}
- double perspective() const { return m_p; }
+ Length perspective() const { return m_p; }
private:
- virtual bool isIdentity() const { return m_p == 0; }
+ virtual bool isIdentity() const { return m_p.calcFloatValue(1) == 0; }
virtual OperationType getOperationType() const { return PERSPECTIVE; }
virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == PERSPECTIVE; }
@@ -54,18 +55,19 @@ private:
virtual bool apply(TransformationMatrix& transform, const IntSize&) const
{
- transform.applyPerspective(m_p);
+ transform.applyPerspective(m_p.calcFloatValue(1));
return false;
}
virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
- PerspectiveTransformOperation(double p)
+ PerspectiveTransformOperation(const Length& p)
: m_p(p)
{
+ ASSERT(p.isFixed());
}
- double m_p;
+ Length m_p;
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp b/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp
index 357a140..c7283a5 100644
--- a/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp
+++ b/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp
@@ -55,21 +55,17 @@ namespace WebCore {
// webmasters - are to be held responsible. Basically, don't be a jerk, and remember that anything free comes
// with no guarantee.
-// A Note About row-major vs. column major matrixes
+// A clarification about the storage of matrix elements
//
-// The clients of this class (CSSMatrix and SVGMatrix) assume a column-major ordering.
-// That means that when the matrix is initialized with 16 values, the first 4 values
-// go in the 4 rows of the first column, etc. And in the dereferencing calls, the first
-// digit is the column (e.g., m23() is column 2 row 3). Because C++ uses row-major arrays
-// the internal matrix is stored in row-major order, so m[2][0] means row 2, column 0. This
-// has no bearing on how the matrix is viewed on the outside, since all access is done
-// with function calls. But it does help make the code more clear if you know that.
+// This class uses a 2 dimensional array internally to store the elements of the matrix. The first index into
+// the array refers to the column that the element lies in; the second index refers to the row.
//
-// FIXME: Multiply calls are named for what they do in the internal, row-major world.
-// multLeft is actually a multRight in a column-major world, and multiply is a multLeft
-// in a column-major world. For now I've left it that way to avoid too many confusing
-// changes to the code. In particular AffineTransform uses these same terms for the
-// opposite operations. So we have to be VERY careful when we change them.
+// In other words, this is the layout of the matrix:
+//
+// | m_matrix[0][0] m_matrix[1][0] m_matrix[2][0] m_matrix[3][0] |
+// | m_matrix[0][1] m_matrix[1][1] m_matrix[2][1] m_matrix[3][1] |
+// | m_matrix[0][2] m_matrix[1][2] m_matrix[2][2] m_matrix[3][2] |
+// | m_matrix[0][3] m_matrix[1][3] m_matrix[2][3] m_matrix[3][3] |
typedef double Vector4[4];
typedef double Vector3[3];
@@ -634,7 +630,7 @@ TransformationMatrix& TransformationMatrix::scaleNonUniform(double sx, double sy
mat.m_matrix[0][0] = sx;
mat.m_matrix[1][1] = sy;
- multLeft(mat);
+ multiply(mat);
return *this;
}
@@ -645,7 +641,7 @@ TransformationMatrix& TransformationMatrix::scale3d(double sx, double sy, double
mat.m_matrix[1][1] = sy;
mat.m_matrix[2][2] = sz;
- multLeft(mat);
+ multiply(mat);
return *this;
}
@@ -732,7 +728,7 @@ TransformationMatrix& TransformationMatrix::rotate3d(double x, double y, double
mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0f;
mat.m_matrix[3][3] = 1.0f;
}
- multLeft(mat);
+ multiply(mat);
return *this;
}
@@ -783,7 +779,7 @@ TransformationMatrix& TransformationMatrix::rotate3d(double rx, double ry, doubl
mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0f;
mat.m_matrix[3][3] = 1.0f;
- rmat.multLeft(mat);
+ rmat.multiply(mat);
rx /= 2.0f;
sinA = sin(rx);
@@ -803,9 +799,9 @@ TransformationMatrix& TransformationMatrix::rotate3d(double rx, double ry, doubl
mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0f;
mat.m_matrix[3][3] = 1.0f;
- rmat.multLeft(mat);
+ rmat.multiply(mat);
- multLeft(rmat);
+ multiply(rmat);
return *this;
}
@@ -869,7 +865,7 @@ TransformationMatrix& TransformationMatrix::skew(double sx, double sy)
mat.m_matrix[0][1] = tan(sy); // note that the y shear goes in the first row
mat.m_matrix[1][0] = tan(sx); // and the x shear in the second row
- multLeft(mat);
+ multiply(mat);
return *this;
}
@@ -879,7 +875,7 @@ TransformationMatrix& TransformationMatrix::applyPerspective(double p)
if (p != 0)
mat.m_matrix[2][3] = -1/p;
- multLeft(mat);
+ multiply(mat);
return *this;
}
@@ -896,7 +892,7 @@ TransformationMatrix TransformationMatrix::rectToRect(const FloatRect& from, con
//
// *this = mat * *this
//
-TransformationMatrix& TransformationMatrix::multLeft(const TransformationMatrix& mat)
+TransformationMatrix& TransformationMatrix::multiply(const TransformationMatrix& mat)
{
Matrix4 tmp;
@@ -1105,25 +1101,25 @@ void TransformationMatrix::recompose(const DecomposedType& decomp)
2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0,
0, 0, 0, 1);
- multLeft(rotationMatrix);
+ multiply(rotationMatrix);
// now apply skew
if (decomp.skewYZ) {
TransformationMatrix tmp;
tmp.setM32((float) decomp.skewYZ);
- multLeft(tmp);
+ multiply(tmp);
}
if (decomp.skewXZ) {
TransformationMatrix tmp;
tmp.setM31((float) decomp.skewXZ);
- multLeft(tmp);
+ multiply(tmp);
}
if (decomp.skewXY) {
TransformationMatrix tmp;
tmp.setM21((float) decomp.skewXY);
- multLeft(tmp);
+ multiply(tmp);
}
// finally, apply scale
diff --git a/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h b/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h
index c883675..fa27c0e 100644
--- a/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h
+++ b/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h
@@ -208,11 +208,8 @@ public:
void setF(double f) { m_matrix[3][1] = f; }
// this = this * mat
- TransformationMatrix& multiply(const TransformationMatrix& t) { return *this *= t; }
+ TransformationMatrix& multiply(const TransformationMatrix&);
- // this = mat * this
- TransformationMatrix& multLeft(const TransformationMatrix& mat);
-
TransformationMatrix& scale(double);
TransformationMatrix& scaleNonUniform(double sx, double sy);
TransformationMatrix& scale3d(double sx, double sy, double sz);
@@ -296,19 +293,18 @@ public:
}
bool operator!=(const TransformationMatrix& other) const { return !(*this == other); }
-
- // *this = *this * t (i.e., a multRight)
+
+ // *this = *this * t
TransformationMatrix& operator*=(const TransformationMatrix& t)
{
- *this = *this * t;
- return *this;
+ return multiply(t);
}
- // result = *this * t (i.e., a multRight)
+ // result = *this * t
TransformationMatrix operator*(const TransformationMatrix& t) const
{
- TransformationMatrix result = t;
- result.multLeft(*this);
+ TransformationMatrix result = *this;
+ result.multiply(t);
return result;
}
diff --git a/Source/WebCore/platform/graphics/win/FontCGWin.cpp b/Source/WebCore/platform/graphics/win/FontCGWin.cpp
index 8012722..fe26c43 100644
--- a/Source/WebCore/platform/graphics/win/FontCGWin.cpp
+++ b/Source/WebCore/platform/graphics/win/FontCGWin.cpp
@@ -167,8 +167,12 @@ static void drawGDIGlyphs(GraphicsContext* graphicsContext, const SimpleFontData
drawIntoBitmap = true;
// We put slop into this rect, since glyphs can overflow the ascent/descent bounds and the left/right edges.
// FIXME: Can get glyphs' optical bounds (even from CG) to get this right.
- int lineGap = font->lineGap();
- textRect = IntRect(point.x() - (font->ascent() + font->descent()) / 2, point.y() - font->ascent() - lineGap, totalWidth + font->ascent() + font->descent(), font->lineSpacing());
+ const FontMetrics& fontMetrics = font->fontMetrics();
+ int lineGap = fontMetrics.lineGap();
+ textRect = IntRect(point.x() - (fontMetrics.ascent() + fontMetrics.descent()) / 2,
+ point.y() - fontMetrics.ascent() - lineGap,
+ totalWidth + fontMetrics.ascent() + fontMetrics.descent(),
+ fontMetrics.lineSpacing());
bitmap.set(graphicsContext->createWindowsBitmap(textRect.size()));
memset(bitmap->buffer(), 255, bitmap->bufferLength());
hdc = bitmap->hdc();
@@ -288,7 +292,7 @@ static void drawGDIGlyphs(GraphicsContext* graphicsContext, const SimpleFontData
buffer[i + 2] = fillColor.red();
buffer[i + 3] = alpha;
}
- graphicsContext->drawWindowsBitmap(bitmap.get(), textRect.topLeft());
+ graphicsContext->drawWindowsBitmap(bitmap.get(), textRect.location());
} else
graphicsContext->releaseWindowsContext(hdc, textRect, true, false);
}
diff --git a/Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp
index 9cae99b..4aee6cd 100644
--- a/Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp
@@ -59,7 +59,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
}
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode renderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode renderingMode)
{
ASSERT(m_fontReference);
ASSERT(T2embedLibrary());
@@ -154,13 +154,12 @@ static unsigned long WINAPIV readEmbedProc(void* stream, void* buffer, unsigned
// not allow access from CSS.
static String createUniqueFontName()
{
- Vector<char> fontUuid(sizeof(GUID));
- CoCreateGuid(reinterpret_cast<GUID*>(fontUuid.data()));
+ GUID fontUuid;
+ CoCreateGuid(&fontUuid);
- Vector<char> fontNameVector;
- base64Encode(fontUuid, fontNameVector);
- ASSERT(fontNameVector.size() < LF_FACESIZE);
- return String(fontNameVector.data(), fontNameVector.size());
+ String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid));
+ ASSERT(fontName.length() < LF_FACESIZE);
+ return fontName;
}
FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer)
diff --git a/Source/WebCore/platform/graphics/win/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/win/FontCustomPlatformData.h
index de33c63..abdb356 100644
--- a/Source/WebCore/platform/graphics/win/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/win/FontCustomPlatformData.h
@@ -23,6 +23,7 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include "PlatformString.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -45,7 +46,7 @@ public:
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
diff --git a/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp b/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp
index c3decbf..fd30a6d 100644
--- a/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp
+++ b/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp
@@ -32,7 +32,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
cairo_font_face_destroy(m_fontFace);
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant)
{
return FontPlatformData(m_fontFace, size, bold, italic);
}
diff --git a/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.h b/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.h
index 9c67037..ea3ae38 100644
--- a/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.h
+++ b/Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.h
@@ -42,7 +42,7 @@ public:
}
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
static bool supportsFormat(const String&);
diff --git a/Source/WebCore/platform/graphics/win/FontWin.cpp b/Source/WebCore/platform/graphics/win/FontWin.cpp
index 2ed9eb3..47c44bc 100644
--- a/Source/WebCore/platform/graphics/win/FontWin.cpp
+++ b/Source/WebCore/platform/graphics/win/FontWin.cpp
@@ -45,6 +45,11 @@ bool Font::canReturnFallbackFontsForComplexText()
return true;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
FloatRect Font::selectionRectForComplexText(const TextRun& run, const FloatPoint& point, int h,
int from, int to) const
{
@@ -122,8 +127,8 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
UniscribeController controller(this, run, fallbackFonts);
controller.advance(run.length());
if (glyphOverflow) {
- glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - ascent());
- glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - descent());
+ glyphOverflow->top = max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - fontMetrics().ascent());
+ glyphOverflow->bottom = max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - fontMetrics().descent());
glyphOverflow->left = max<int>(0, ceilf(-controller.minGlyphBoundingBoxX()));
glyphOverflow->right = max<int>(0, ceilf(controller.maxGlyphBoundingBoxX() - controller.runWidthSoFar()));
}
diff --git a/Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp b/Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp
index f1953e4..bb22024 100644
--- a/Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp
+++ b/Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp
@@ -154,7 +154,7 @@ void GraphicsContextPlatformPrivate::clip(const FloatRect& clipRect)
{
if (!m_hdc)
return;
- IntersectClipRect(m_hdc, clipRect.x(), clipRect.y(), clipRect.right(), clipRect.bottom());
+ IntersectClipRect(m_hdc, clipRect.x(), clipRect.y(), clipRect.maxX(), clipRect.maxY());
}
void GraphicsContextPlatformPrivate::clip(const Path&)
diff --git a/Source/WebCore/platform/graphics/win/IconWin.cpp b/Source/WebCore/platform/graphics/win/IconWin.cpp
index 4d4d219..7e03362 100644
--- a/Source/WebCore/platform/graphics/win/IconWin.cpp
+++ b/Source/WebCore/platform/graphics/win/IconWin.cpp
@@ -25,7 +25,6 @@
#include "GraphicsContext.h"
#include "LocalWindowsContext.h"
#include "PlatformString.h"
-#include <tchar.h>
#include <windows.h>
#if OS(WINCE)
@@ -68,16 +67,16 @@ PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames)
#if OS(WINCE)
return 0;
#else
- TCHAR buffer[MAX_PATH];
- UINT length = ::GetSystemDirectory(buffer, WTF_ARRAY_LENGTH(buffer));
+ WCHAR buffer[MAX_PATH];
+ UINT length = ::GetSystemDirectoryW(buffer, WTF_ARRAY_LENGTH(buffer));
if (!length)
return 0;
-
- if (_tcscat_s(buffer, TEXT("\\shell32.dll")))
+
+ if (wcscat_s(buffer, L"\\shell32.dll"))
return 0;
HICON hIcon;
- if (!::ExtractIconEx(buffer, shell32MultipleFileIconIndex, 0, &hIcon, 1))
+ if (!::ExtractIconExW(buffer, shell32MultipleFileIconIndex, 0, &hIcon, 1))
return 0;
return adoptRef(new Icon(hIcon));
#endif
diff --git a/Source/WebCore/platform/graphics/win/IntRectWin.cpp b/Source/WebCore/platform/graphics/win/IntRectWin.cpp
index fe25a7f..6af6735 100644
--- a/Source/WebCore/platform/graphics/win/IntRectWin.cpp
+++ b/Source/WebCore/platform/graphics/win/IntRectWin.cpp
@@ -38,7 +38,7 @@ IntRect::IntRect(const RECT& r)
IntRect::operator RECT() const
{
- RECT rect = { x(), y(), right(), bottom() };
+ RECT rect = { x(), y(), maxX(), maxY() };
return rect;
}
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
index 01db7f2..dd3cd32 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp
@@ -34,6 +34,11 @@
#include <CoreGraphics/CGColor.h>
#endif
+#if USE(ACCELERATED_COMPOSITING)
+#include "CACFLayerTreeHost.h"
+#include "PlatformCALayer.h"
+#endif
+
namespace WebCore {
MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow(MediaPlayerPrivateFullscreenClient* client)
@@ -47,8 +52,11 @@ MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow(MediaPlay
MediaPlayerPrivateFullscreenWindow::~MediaPlayerPrivateFullscreenWindow()
{
- if (m_hwnd)
- close();
+ if (!m_hwnd)
+ return;
+
+ ::DestroyWindow(m_hwnd);
+ ASSERT(!m_hwnd);
}
void MediaPlayerPrivateFullscreenWindow::createWindow(HWND parentHwnd)
@@ -65,8 +73,7 @@ void MediaPlayerPrivateFullscreenWindow::createWindow(HWND parentHwnd)
windowAtom = ::RegisterClassEx(&wcex);
}
- if (m_hwnd)
- close();
+ ASSERT(!m_hwnd);
MONITORINFO mi = {0};
mi.cbSize = sizeof(MONITORINFO);
@@ -87,12 +94,6 @@ void MediaPlayerPrivateFullscreenWindow::createWindow(HWND parentHwnd)
::SetFocus(m_hwnd);
}
-void MediaPlayerPrivateFullscreenWindow::close()
-{
- ::DestroyWindow(m_hwnd);
- ASSERT(!m_hwnd);
-}
-
#if USE(ACCELERATED_COMPOSITING)
void MediaPlayerPrivateFullscreenWindow::setRootChildLayer(PassRefPtr<PlatformCALayer> rootChild)
{
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
index c1ae762..e07bbac 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h
@@ -26,9 +26,10 @@
#ifndef MediaPlayerPrivateFullscreenWindow_h
#define MediaPlayerPrivateFullscreenWindow_h
+#include <wtf/RefPtr.h>
+
#if USE(ACCELERATED_COMPOSITING)
-#include "CACFLayerTreeHost.h"
-#include "PlatformCALayer.h"
+#include "CACFLayerTreeHostClient.h"
#endif
typedef unsigned WPARAM;
@@ -40,6 +41,11 @@ typedef unsigned int UINT;
namespace WebCore {
+#if USE(ACCELERATED_COMPOSITING)
+class CACFLayerTreeHost;
+class PlatformCALayer;
+#endif
+
class MediaPlayerPrivateFullscreenClient {
public:
virtual LRESULT fullscreenClientWndProc(HWND, UINT message, WPARAM, LPARAM) = 0;
@@ -53,13 +59,10 @@ public:
~MediaPlayerPrivateFullscreenWindow();
void createWindow(HWND ownerWindow);
- void close();
HWND hwnd() const { return m_hwnd; }
#if USE(ACCELERATED_COMPOSITING)
- CACFLayerTreeHost* layerView() const { return m_layerTreeHost.get(); }
-
PlatformCALayer* rootChildLayer() const { return m_rootChild.get(); }
void setRootChildLayer(PassRefPtr<PlatformCALayer>);
#endif
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp
index 0b91455..d47de2b 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp
@@ -1059,7 +1059,7 @@ float MediaPlayerPrivateQuickTimeVisualContext::mediaTimeForTimeValue(float time
if (m_readyState < MediaPlayer::HaveMetadata || !(timeScale = m_movie->timeScale()))
return timeValue;
- long mediaTimeValue = static_cast<long>(timeValue * timeScale);
+ long mediaTimeValue = lroundf(timeValue * timeScale);
return static_cast<float>(mediaTimeValue) / timeScale;
}
diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp
index 431d624..07b7621 100644
--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp
+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp
@@ -622,7 +622,7 @@ void MediaPlayerPrivate::paint(GraphicsContext* p, const IntRect& r)
m_qtGWorld->paint(hdc, r.x(), r.y());
if (usingTempBitmap)
- p->drawWindowsBitmap(bitmap.get(), r.topLeft());
+ p->drawWindowsBitmap(bitmap.get(), r.location());
else
p->releaseWindowsContext(hdc, r);
diff --git a/Source/WebCore/platform/graphics/win/QTMovie.cpp b/Source/WebCore/platform/graphics/win/QTMovie.cpp
index dfa1d36..4cd8161 100644
--- a/Source/WebCore/platform/graphics/win/QTMovie.cpp
+++ b/Source/WebCore/platform/graphics/win/QTMovie.cpp
@@ -33,7 +33,9 @@
#include <Movies.h>
#include <QTML.h>
#include <QuickTimeComponents.h>
+#include <WebKitSystemInterface/WebKitSystemInterface.h>
#include <wtf/Assertions.h>
+#include <wtf/MathExtras.h>
#include <wtf/Noncopyable.h>
#include <wtf/Vector.h>
@@ -46,7 +48,6 @@ static const long subTitleTrackType = 'sbtl';
static const long mpeg4ObjectDescriptionTrackType = 'odsm';
static const long mpeg4SceneDescriptionTrackType = 'sdsm';
static const long closedCaptionDisplayPropertyID = 'disp';
-static LPCTSTR fullscreenQTMoviePointerProp = TEXT("fullscreenQTMoviePointer");
// Resizing GWorlds is slow, give them a minimum size so size of small
// videos can be animated smoothly
@@ -60,7 +61,7 @@ union UppParam {
void* ptr;
};
-static Vector<CFStringRef>* gSupportedTypes = 0;
+static CFMutableArrayRef gSupportedTypes = 0;
static SInt32 quickTimeVersion = 0;
class QTMoviePrivate : public QTMovieTaskClient {
@@ -374,10 +375,10 @@ void QTMovie::setCurrentTime(float time) const
m_private->m_seeking = true;
TimeScale scale = GetMovieTimeScale(m_private->m_movie);
if (m_private->m_movieController) {
- QTRestartAtTimeRecord restart = { time * scale , 0 };
+ QTRestartAtTimeRecord restart = { lroundf(time * scale) , 0 };
MCDoAction(m_private->m_movieController, mcActionRestartAtTime, (void *)&restart);
} else
- SetMovieTimeValue(m_private->m_movie, TimeValue(time * scale));
+ SetMovieTimeValue(m_private->m_movie, TimeValue(lroundf(time * scale)));
QTMovieTask::sharedTask()->updateTaskTimer();
}
@@ -747,112 +748,59 @@ long QTMovie::timeScale() const
return GetMovieTimeScale(m_private->m_movie);
}
+static void getMIMETypeCallBack(const char* type);
+
static void initializeSupportedTypes()
{
if (gSupportedTypes)
return;
- gSupportedTypes = new Vector<CFStringRef>;
+ gSupportedTypes = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
if (quickTimeVersion < minimumQuickTimeVersion) {
LOG_ERROR("QuickTime version %x detected, at least %x required. Returning empty list of supported media MIME types.", quickTimeVersion, minimumQuickTimeVersion);
return;
}
// QuickTime doesn't have an importer for video/quicktime. Add it manually.
- gSupportedTypes->append(CFSTR("video/quicktime"));
-
- for (int index = 0; index < 2; index++) {
- ComponentDescription findCD;
-
- // look at all movie importers that can import in place and are installed.
- findCD.componentType = MovieImportType;
- findCD.componentSubType = 0;
- findCD.componentManufacturer = 0;
- findCD.componentFlagsMask = cmpIsMissing | movieImportSubTypeIsFileExtension | canMovieImportInPlace | dontAutoFileMovieImport;
-
- // look at those registered by HFS file types the first time through, by file extension the second time
- findCD.componentFlags = canMovieImportInPlace | (index ? movieImportSubTypeIsFileExtension : 0);
-
- long componentCount = CountComponents(&findCD);
- if (!componentCount)
- continue;
+ CFArrayAppendValue(gSupportedTypes, CFSTR("video/quicktime"));
+
+ wkGetQuickTimeMIMETypeList(getMIMETypeCallBack);
+}
- Component comp = 0;
- while (comp = FindNextComponent(comp, &findCD)) {
- // Does this component have a MIME type container?
- ComponentDescription infoCD;
- OSErr err = GetComponentInfo(comp, &infoCD, nil /*name*/, nil /*info*/, nil /*icon*/);
- if (err)
- continue;
- if (!(infoCD.componentFlags & hasMovieImportMIMEList))
- continue;
- QTAtomContainer mimeList = 0;
- err = MovieImportGetMIMETypeList((ComponentInstance)comp, &mimeList);
- if (err || !mimeList)
- continue;
+static void getMIMETypeCallBack(const char* type)
+{
+ ASSERT(type);
+ CFStringRef cfType = CFStringCreateWithCString(kCFAllocatorDefault, type, kCFStringEncodingMacRoman);
+ if (!cfType)
+ return;
- // Grab every type from the container.
- QTLockContainer(mimeList);
- int typeCount = QTCountChildrenOfType(mimeList, kParentAtomIsContainer, kMimeInfoMimeTypeTag);
- for (int typeIndex = 1; typeIndex <= typeCount; typeIndex++) {
- QTAtom mimeTag = QTFindChildByIndex(mimeList, 0, kMimeInfoMimeTypeTag, typeIndex, 0);
- if (!mimeTag)
- continue;
- char* atomData;
- long typeLength;
- if (noErr != QTGetAtomDataPtr(mimeList, mimeTag, &typeLength, &atomData))
- continue;
-
- char typeBuffer[256];
- if (typeLength >= sizeof(typeBuffer))
- continue;
- memcpy(typeBuffer, atomData, typeLength);
- typeBuffer[typeLength] = 0;
-
- // Only add "audio/..." and "video/..." types.
- if (strncmp(typeBuffer, "audio/", 6) && strncmp(typeBuffer, "video/", 6))
- continue;
-
- CFStringRef cfMimeType = CFStringCreateWithCString(0, typeBuffer, kCFStringEncodingUTF8);
- if (!cfMimeType)
- continue;
-
- // Only add each type once.
- bool alreadyAdded = false;
- for (int addedIndex = 0; addedIndex < gSupportedTypes->size(); addedIndex++) {
- CFStringRef type = gSupportedTypes->at(addedIndex);
- if (kCFCompareEqualTo == CFStringCompare(cfMimeType, type, kCFCompareCaseInsensitive)) {
- alreadyAdded = true;
- break;
- }
- }
- if (!alreadyAdded)
- gSupportedTypes->append(cfMimeType);
- else
- CFRelease(cfMimeType);
- }
- DisposeHandle(mimeList);
- }
+ // Filter out all non-audio or -video MIME Types, and only add each type once:
+ if (CFStringHasPrefix(cfType, CFSTR("audio/")) || CFStringHasPrefix(cfType, CFSTR("video/"))) {
+ CFRange range = CFRangeMake(0, CFArrayGetCount(gSupportedTypes));
+ if (!CFArrayContainsValue(gSupportedTypes, range, cfType))
+ CFArrayAppendValue(gSupportedTypes, cfType);
}
+
+ CFRelease(cfType);
}
unsigned QTMovie::countSupportedTypes()
{
initializeSupportedTypes();
- return static_cast<unsigned>(gSupportedTypes->size());
+ return static_cast<unsigned>(CFArrayGetCount(gSupportedTypes));
}
void QTMovie::getSupportedType(unsigned index, const UChar*& str, unsigned& len)
{
initializeSupportedTypes();
- ASSERT(index < gSupportedTypes->size());
+ ASSERT(index < CFArrayGetCount(gSupportedTypes));
// Allocate sufficient buffer to hold any MIME type
static UniChar* staticBuffer = 0;
if (!staticBuffer)
staticBuffer = new UniChar[32];
- CFStringRef cfstr = gSupportedTypes->at(index);
+ CFStringRef cfstr = (CFStringRef)CFArrayGetValueAtIndex(gSupportedTypes, index);
len = CFStringGetLength(cfstr);
CFRange range = { 0, len };
CFStringGetCharacters(cfstr, range, staticBuffer);
diff --git a/Source/WebCore/platform/graphics/win/QTMovieGWorld.cpp b/Source/WebCore/platform/graphics/win/QTMovieGWorld.cpp
index e13f732..4be1bbb 100644
--- a/Source/WebCore/platform/graphics/win/QTMovieGWorld.cpp
+++ b/Source/WebCore/platform/graphics/win/QTMovieGWorld.cpp
@@ -40,7 +40,7 @@ using namespace std;
static const long minimumQuickTimeVersion = 0x07300000; // 7.3
-static LPCTSTR fullscreenQTMovieGWorldPointerProp = TEXT("fullscreenQTMovieGWorldPointer");
+static LPCWSTR fullscreenQTMovieGWorldPointerProp = L"fullscreenQTMovieGWorldPointer";
// Resizing GWorlds is slow, give them a minimum size so size of small
// videos can be animated smoothly
@@ -378,10 +378,10 @@ bool QTMovieGWorld::isDisabled() const
LRESULT QTMovieGWorld::fullscreenWndProc(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- QTMovieGWorld* movie = static_cast<QTMovieGWorld*>(GetProp(wnd, fullscreenQTMovieGWorldPointerProp));
+ QTMovieGWorld* movie = static_cast<QTMovieGWorld*>(GetPropW(wnd, fullscreenQTMovieGWorldPointerProp));
if (message == WM_DESTROY)
- RemoveProp(wnd, fullscreenQTMovieGWorldPointerProp);
+ RemovePropW(wnd, fullscreenQTMovieGWorldPointerProp);
if (!movie)
return DefWindowProc(wnd, message, wParam, lParam);
@@ -423,7 +423,7 @@ HWND QTMovieGWorld::enterFullscreen(QTMovieGWorldFullscreenClient* client)
// Set the 'this' pointer on the HWND
HWND wnd = static_cast<HWND>(GetPortNativeWindow(m_private->m_fullscreenWindow));
- SetProp(wnd, fullscreenQTMovieGWorldPointerProp, static_cast<HANDLE>(this));
+ SetPropW(wnd, fullscreenQTMovieGWorldPointerProp, static_cast<HANDLE>(this));
return wnd;
}
diff --git a/Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp b/Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp
index 20d42ff..30a931e 100644
--- a/Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp
+++ b/Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp
@@ -29,20 +29,19 @@
#include "config.h"
#include "SimpleFontData.h"
-#include <winsock2.h>
#include "Font.h"
#include "FontCache.h"
#include "FloatRect.h"
#include "FontDescription.h"
#include "PlatformString.h"
-#include <wtf/MathExtras.h>
-#include <wtf/RetainPtr.h>
-#include <unicode/uchar.h>
-#include <unicode/unorm.h>
#include <ApplicationServices/ApplicationServices.h>
#include <WebKitSystemInterface/WebKitSystemInterface.h>
#include <mlang.h>
-#include <tchar.h>
+#include <unicode/uchar.h>
+#include <unicode/unorm.h>
+#include <winsock2.h>
+#include <wtf/MathExtras.h>
+#include <wtf/RetainPtr.h>
namespace WebCore {
@@ -64,19 +63,19 @@ void SimpleFontData::platformInit()
int iAscent = CGFontGetAscent(font);
int iDescent = CGFontGetDescent(font);
int iLineGap = CGFontGetLeading(font);
- m_unitsPerEm = CGFontGetUnitsPerEm(font);
+ unsigned unitsPerEm = CGFontGetUnitsPerEm(font);
float pointSize = m_platformData.size();
- float fAscent = scaleEmToUnits(iAscent, m_unitsPerEm) * pointSize;
- float fDescent = -scaleEmToUnits(iDescent, m_unitsPerEm) * pointSize;
- float fLineGap = scaleEmToUnits(iLineGap, m_unitsPerEm) * pointSize;
+ float fAscent = scaleEmToUnits(iAscent, unitsPerEm) * pointSize;
+ float fDescent = -scaleEmToUnits(iDescent, unitsPerEm) * pointSize;
+ float fLineGap = scaleEmToUnits(iLineGap, unitsPerEm) * pointSize;
if (!isCustomFont()) {
HDC dc = GetDC(0);
HGDIOBJ oldFont = SelectObject(dc, m_platformData.hfont());
int faceLength = GetTextFace(dc, 0, 0);
- Vector<TCHAR> faceName(faceLength);
+ Vector<WCHAR> faceName(faceLength);
GetTextFace(dc, faceLength, faceName.data());
- m_isSystemFont = !_tcscmp(faceName.data(), _T("Lucida Grande"));
+ m_isSystemFont = !wcscmp(faceName.data(), L"Lucida Grande");
SelectObject(dc, oldFont);
ReleaseDC(0, dc);
@@ -88,15 +87,15 @@ void SimpleFontData::platformInit()
// web standard. The AppKit adjustment of 20% is too big and is
// incorrectly added to line spacing, so we use a 15% adjustment instead
// and add it to the ascent.
- if (!_tcscmp(faceName.data(), _T("Times")) || !_tcscmp(faceName.data(), _T("Helvetica")) || !_tcscmp(faceName.data(), _T("Courier")))
+ if (!wcscmp(faceName.data(), L"Times") || !wcscmp(faceName.data(), L"Helvetica") || !wcscmp(faceName.data(), L"Courier"))
fAscent += floorf(((fAscent + fDescent) * 0.15f) + 0.5f);
}
}
- m_ascent = lroundf(fAscent);
- m_descent = lroundf(fDescent);
- m_lineGap = lroundf(fLineGap);
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
+ m_fontMetrics.setAscent(fAscent);
+ m_fontMetrics.setDescent(fDescent);
+ m_fontMetrics.setLineGap(fLineGap);
+ m_fontMetrics.setLineSpacing(lroundf(fAscent) + lroundf(fDescent) + lroundf(fLineGap));
// Measure the actual character "x", because AppKit synthesizes X height rather than getting it from the font.
// Unfortunately, NSFont will round this for us so we don't quite get the right value.
@@ -109,11 +108,13 @@ void SimpleFontData::platformInit()
// and web pages that foolishly use this metric for width will be laid out
// poorly if we return an accurate height. Classic case is Times 13 point,
// which has an "x" that is 7x6 pixels.
- m_xHeight = scaleEmToUnits(max(CGRectGetMaxX(xBox), CGRectGetMaxY(xBox)), m_unitsPerEm) * pointSize;
+ m_fontMetrics.setXHeight(scaleEmToUnits(max(CGRectGetMaxX(xBox), CGRectGetMaxY(xBox)), unitsPerEm) * pointSize);
} else {
int iXHeight = CGFontGetXHeight(font);
- m_xHeight = scaleEmToUnits(iXHeight, m_unitsPerEm) * pointSize;
+ m_fontMetrics.setXHeight(scaleEmToUnits(iXHeight, unitsPerEm) * pointSize);
}
+
+ m_fontMetrics.setUnitsPerEm(unitsPerEm);
}
void SimpleFontData::platformCharWidthInit()
@@ -133,7 +134,7 @@ FloatRect SimpleFontData::platformBoundsForGlyph(Glyph glyph) const
CGRect box;
CGFontGetGlyphBBoxes(m_platformData.cgFont(), &glyph, 1, &box);
float pointSize = m_platformData.size();
- CGFloat scale = pointSize / unitsPerEm();
+ CGFloat scale = pointSize / fontMetrics().unitsPerEm();
FloatRect boundingBox = CGRectApplyAffineTransform(box, CGAffineTransformMakeScale(scale, -scale));
if (m_syntheticBoldOffset)
boundingBox.setWidth(boundingBox.width() + m_syntheticBoldOffset);
diff --git a/Source/WebCore/platform/graphics/win/SimpleFontDataCairoWin.cpp b/Source/WebCore/platform/graphics/win/SimpleFontDataCairoWin.cpp
index 62ea060..277a13f 100644
--- a/Source/WebCore/platform/graphics/win/SimpleFontDataCairoWin.cpp
+++ b/Source/WebCore/platform/graphics/win/SimpleFontDataCairoWin.cpp
@@ -37,7 +37,6 @@
#include <cairo.h>
#include <cairo-win32.h>
#include <mlang.h>
-#include <tchar.h>
#include <wtf/MathExtras.h>
namespace WebCore {
@@ -63,13 +62,16 @@ void SimpleFontData::platformInit()
TEXTMETRIC textMetrics;
GetTextMetrics(hdc, &textMetrics);
- m_ascent = lroundf(textMetrics.tmAscent * metricsMultiplier);
- m_descent = lroundf(textMetrics.tmDescent * metricsMultiplier);
- m_xHeight = m_ascent * 0.56f; // Best guess for xHeight for non-Truetype fonts.
- m_lineGap = lroundf(textMetrics.tmExternalLeading * metricsMultiplier);
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
- m_avgCharWidth = lroundf(textMetrics.tmAveCharWidth * metricsMultiplier);
- m_maxCharWidth = lroundf(textMetrics.tmMaxCharWidth * metricsMultiplier);
+ float ascent = textMetrics.tmAscent * metricsMultiplier;
+ float descent = textMetrics.tmDescent * metricsMultiplier;
+ float xHeight = ascent * 0.56f; // Best guess for xHeight for non-Truetype fonts.
+ float lineGap = textMetrics.tmExternalLeading * metricsMultiplier;
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
+ m_avgCharWidth = textMetrics.tmAveCharWidth * metricsMultiplier;
+ m_maxCharWidth = textMetrics.tmMaxCharWidth * metricsMultiplier;
OUTLINETEXTMETRIC metrics;
if (GetOutlineTextMetrics(hdc, sizeof(metrics), &metrics) > 0) {
@@ -78,9 +80,10 @@ void SimpleFontData::platformInit()
MAT2 mat = { 1, 0, 0, 1 };
DWORD len = GetGlyphOutline(hdc, 'x', GGO_METRICS, &gm, 0, 0, &mat);
if (len != GDI_ERROR && gm.gmptGlyphOrigin.y > 0)
- m_xHeight = gm.gmptGlyphOrigin.y * metricsMultiplier;
+ xHeight = gm.gmptGlyphOrigin.y * metricsMultiplier;
}
+ m_fontMetrics.setXHeight(xHeight);
cairo_win32_scaled_font_done_font(scaledFont);
m_isSystemFont = false;
diff --git a/Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp b/Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
index 60afe6a..323ff73 100644
--- a/Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
+++ b/Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
@@ -29,16 +29,15 @@
#include "config.h"
#include "SimpleFontData.h"
-#include <winsock2.h>
#include "Font.h"
#include "FontCache.h"
#include "FloatRect.h"
#include "FontDescription.h"
-#include <wtf/MathExtras.h>
+#include <mlang.h>
#include <unicode/uchar.h>
#include <unicode/unorm.h>
-#include <mlang.h>
-#include <tchar.h>
+#include <winsock2.h>
+#include <wtf/MathExtras.h>
#if PLATFORM(CG)
#include <ApplicationServices/ApplicationServices.h>
@@ -66,14 +65,9 @@ bool SimpleFontData::shouldApplyMacAscentHack()
void SimpleFontData::initGDIFont()
{
if (!m_platformData.size()) {
- m_ascent = 0;
- m_descent = 0;
- m_lineGap = 0;
- m_lineSpacing = 0;
+ m_fontMetrics.reset();
m_avgCharWidth = 0;
m_maxCharWidth = 0;
- m_xHeight = 0;
- m_unitsPerEm = 0;
return;
}
@@ -82,21 +76,25 @@ void SimpleFontData::initGDIFont()
OUTLINETEXTMETRIC metrics;
GetOutlineTextMetrics(hdc, sizeof(metrics), &metrics);
TEXTMETRIC& textMetrics = metrics.otmTextMetrics;
- m_ascent = textMetrics.tmAscent;
- m_descent = textMetrics.tmDescent;
- m_lineGap = textMetrics.tmExternalLeading;
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
+ float ascent = textMetrics.tmAscent;
+ float descent = textMetrics.tmDescent;
+ float lineGap = textMetrics.tmExternalLeading;
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
m_avgCharWidth = textMetrics.tmAveCharWidth;
m_maxCharWidth = textMetrics.tmMaxCharWidth;
- m_xHeight = m_ascent * 0.56f; // Best guess for xHeight if no x glyph is present.
+ float xHeight = ascent * 0.56f; // Best guess for xHeight if no x glyph is present.
GLYPHMETRICS gm;
MAT2 mat = { 1, 0, 0, 1 };
DWORD len = GetGlyphOutline(hdc, 'x', GGO_METRICS, &gm, 0, 0, &mat);
if (len != GDI_ERROR && gm.gmptGlyphOrigin.y > 0)
- m_xHeight = gm.gmptGlyphOrigin.y;
+ xHeight = gm.gmptGlyphOrigin.y;
- m_unitsPerEm = metrics.otmEMSquare;
+ m_fontMetrics.setXHeight(xHeight);
+ m_fontMetrics.setUnitsPerEm(metrics.otmEMSquare);
SelectObject(hdc, oldFont);
ReleaseDC(0, hdc);
diff --git a/Source/WebCore/platform/graphics/win/UniscribeController.cpp b/Source/WebCore/platform/graphics/win/UniscribeController.cpp
index dac6c3e..ebbed51 100644
--- a/Source/WebCore/platform/graphics/win/UniscribeController.cpp
+++ b/Source/WebCore/platform/graphics/win/UniscribeController.cpp
@@ -49,7 +49,7 @@ UniscribeController::UniscribeController(const Font* font, const TextRun& run, H
, m_end(run.length())
, m_currentCharacter(0)
, m_runWidthSoFar(0)
- , m_padding(run.padding())
+ , m_padding(run.expansion())
, m_computingOffsetPosition(false)
, m_includePartialGlyphs(false)
, m_offsetX(0)
@@ -394,9 +394,9 @@ bool UniscribeController::shapeAndPlaceItem(const UChar* cp, unsigned i, const S
FloatRect glyphBounds = fontData->boundsForGlyph(glyph);
glyphBounds.move(m_glyphOrigin.x(), m_glyphOrigin.y());
m_minGlyphBoundingBoxX = min(m_minGlyphBoundingBoxX, glyphBounds.x());
- m_maxGlyphBoundingBoxX = max(m_maxGlyphBoundingBoxX, glyphBounds.right());
+ m_maxGlyphBoundingBoxX = max(m_maxGlyphBoundingBoxX, glyphBounds.maxX());
m_minGlyphBoundingBoxY = min(m_minGlyphBoundingBoxY, glyphBounds.y());
- m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, glyphBounds.bottom());
+ m_maxGlyphBoundingBoxY = max(m_maxGlyphBoundingBoxY, glyphBounds.maxY());
m_glyphOrigin.move(advance + offsetX, -offsetY);
// Mutate the glyph array to contain our altered advances.
diff --git a/Source/WebCore/platform/graphics/win/WKCAImageQueue.cpp b/Source/WebCore/platform/graphics/win/WKCAImageQueue.cpp
index c2a178b..c8f2116 100644
--- a/Source/WebCore/platform/graphics/win/WKCAImageQueue.cpp
+++ b/Source/WebCore/platform/graphics/win/WKCAImageQueue.cpp
@@ -24,11 +24,11 @@
*/
#include "config.h"
+#include "WKCAImageQueue.h"
#if USE(ACCELERATED_COMPOSITING)
-#include "WKCAImageQueue.h"
-
+#include <CoreFoundation/CoreFoundation.h>
#include <WebKitSystemInterface/WebKitSystemInterface.h>
#include <wtf/RetainPtr.h>
diff --git a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp
index f61ae8e..fb97fe1 100644
--- a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp
@@ -45,7 +45,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
g_customFontCache->unregisterFont(m_name);
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode renderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode renderingMode)
{
FontDescription fontDesc;
fontDesc.setComputedSize(size);
@@ -59,16 +59,14 @@ FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, b
// not allow access from CSS.
static String createUniqueFontName()
{
- Vector<char> fontUuid(sizeof(GUID));
+ GUID fontUuid;
- unsigned int* ptr = reinterpret_cast<unsigned int*>(fontUuid.data());
+ unsigned int* ptr = reinterpret_cast<unsigned int*>(&fontUuid);
for (int i = 0; i < sizeof(GUID) / sizeof(int) ; ++i)
*(ptr + i) = static_cast<unsigned int>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0));
- Vector<char> fontNameVector;
- base64Encode(fontUuid, fontNameVector);
- ASSERT(fontNameVector.size() < LF_FACESIZE);
- String fontName(fontNameVector.data(), fontNameVector.size());
+ String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid));
+ ASSERT(fontName.length() < LF_FACESIZE);
return fontName.replace('/', '_');
}
diff --git a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h
index 0508246..fe7ee94 100644
--- a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h
@@ -23,6 +23,7 @@
#include "FontDescription.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include "PlatformString.h"
#include <wtf/Noncopyable.h>
@@ -47,7 +48,7 @@ namespace WebCore {
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation fontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
static bool supportsFormat(const String&);
diff --git a/Source/WebCore/platform/graphics/wince/FontWinCE.cpp b/Source/WebCore/platform/graphics/wince/FontWinCE.cpp
index 5a4c8da..c3e6ce4 100644
--- a/Source/WebCore/platform/graphics/wince/FontWinCE.cpp
+++ b/Source/WebCore/platform/graphics/wince/FontWinCE.cpp
@@ -86,6 +86,7 @@ public:
TextRunComponent::TextRunComponent(const UChar *start, int length, const TextRun& parentTextRun, const Font &font, int o)
: m_textRun(start, length, parentTextRun.allowTabs(), 0, 0
+ , parentTextRun.allowsTrailingExpansion() ? TextRun::AllowTrailingExpansion : TextRun::ForbidTrailingExpansion
, parentTextRun.rtl()
, parentTextRun.directionalOverride()
, parentTextRun.applyRunRounding()
@@ -112,7 +113,7 @@ static int generateComponents(TextRunComponents* components, const Font &font, c
{
int letterSpacing = font.letterSpacing();
int wordSpacing = font.wordSpacing();
- int padding = run.padding();
+ int padding = run.expansion();
int numSpaces = 0;
if (padding) {
for (int i = 0; i < run.length(); i++)
@@ -340,4 +341,9 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+ return false;
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp b/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp
index 9b672d2..7b1c27b 100644
--- a/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp
+++ b/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp
@@ -23,7 +23,6 @@
#include "GraphicsContext.h"
#include "AffineTransform.h"
-#include "CharacterNames.h"
#include "Font.h"
#include "GDIExtras.h"
#include "GlyphBuffer.h"
@@ -33,9 +32,9 @@
#include "PlatformPathWinCE.h"
#include "SharedBitmap.h"
#include "SimpleFontData.h"
-#include <wtf/OwnPtr.h>
-
#include <windows.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
@@ -62,7 +61,7 @@ static inline int stableRound(double d)
// Unlike enclosingIntRect(), this function does strict rounding.
static inline IntRect roundRect(const FloatRect& r)
{
- return IntRect(stableRound(r.x()), stableRound(r.y()), stableRound(r.right()) - stableRound(r.x()), stableRound(r.bottom()) - stableRound(r.y()));
+ return IntRect(stableRound(r.x()), stableRound(r.y()), stableRound(r.maxX()) - stableRound(r.x()), stableRound(r.maxY()) - stableRound(r.y()));
}
// Rotation transformation
@@ -129,8 +128,8 @@ template<class Transform, class Rect, class Value> static inline Rect mapRect(co
{
Value x[4], y[4];
Value l, t, r, b;
- r = rect.right() - 1;
- b = rect.bottom() - 1;
+ r = rect.maxX() - 1;
+ b = rect.maxY() - 1;
transform.map(rect.x(), rect.y(), x, y);
transform.map(rect.x(), b, x + 1, y + 1);
transform.map(r, b, x + 2, y + 2);
@@ -503,10 +502,10 @@ TransparentLayerDC::TransparentLayerDC(GraphicsContextPlatformPrivate* data, Int
m_rotation.m_postShiftX -= m_origRect.x();
m_rotation.m_postShiftY -= m_origRect.y();
- FloatPoint topLeft = m_data->m_transform.mapPoint(FloatPoint(rectBeforeTransform->topLeft()));
- FloatPoint topRight(rectBeforeTransform->right() - 1, rectBeforeTransform->y());
+ FloatPoint topLeft = m_data->m_transform.mapPoint(FloatPoint(rectBeforeTransform->location()));
+ FloatPoint topRight(rectBeforeTransform->maxX() - 1, rectBeforeTransform->y());
topRight = m_data->m_transform.mapPoint(topRight);
- FloatPoint bottomLeft(rectBeforeTransform->x(), rectBeforeTransform->bottom() - 1);
+ FloatPoint bottomLeft(rectBeforeTransform->x(), rectBeforeTransform->maxY() - 1);
bottomLeft = m_data->m_transform.mapPoint(bottomLeft);
FloatSize sideTop = topRight - topLeft;
FloatSize sideLeft = bottomLeft - topLeft;
@@ -656,7 +655,7 @@ void GraphicsContext::drawRect(const IntRect& rect)
if (trRect.height() <= 0)
trRect.setHeight(1);
- Rectangle(dc, trRect.x(), trRect.y(), trRect.right(), trRect.bottom());
+ Rectangle(dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
}
SelectObject(dc, oldPen);
@@ -726,7 +725,7 @@ void GraphicsContext::drawEllipse(const IntRect& rect)
oldPen = SelectObject(dc, GetStockObject(NULL_PEN));
if (brush || pen)
- Ellipse(dc, trRect.x(), trRect.y(), trRect.right(), trRect.bottom());
+ Ellipse(dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
SelectObject(dc, oldPen);
SelectObject(dc, oldBrush);
@@ -839,7 +838,7 @@ void GraphicsContext::strokeArc(const IntRect& rect, int startAngle, int angleSp
}
HGDIOBJ oldBrush = SelectObject(dc, GetStockObject(NULL_BRUSH));
- Ellipse(dc, trRect.x(), trRect.y(), trRect.right(), trRect.bottom());
+ Ellipse(dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
SelectObject(dc, oldBrush);
if (newClip)
@@ -960,9 +959,9 @@ void GraphicsContext::clip(const FloatRect& rect)
OwnPtr<HRGN> clipRgn(CreateRectRgn(0, 0, 0, 0));
if (GetClipRgn(m_data->m_dc, clipRgn.get()) > 0)
- IntersectClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.right(), trRect.bottom());
+ IntersectClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
else {
- clipRgn.set(CreateRectRgn(trRect.x(), trRect.y(), trRect.right(), trRect.bottom()));
+ clipRgn.set(CreateRectRgn(trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY()));
SelectClipRgn(m_data->m_dc, clipRgn.get());
}
}
@@ -977,7 +976,7 @@ void GraphicsContext::clipOut(const IntRect& rect)
IntRect trRect = m_data->mapRect(rect);
- ExcludeClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.right(), trRect.bottom());
+ ExcludeClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
}
void GraphicsContext::drawFocusRing(const Path& path, int width, int offset, const Color& color)
@@ -1093,8 +1092,8 @@ void GraphicsContext::strokeRect(const FloatRect& rect, float width)
OwnPtr<HPEN> pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
HGDIOBJ oldPen = SelectObject(dc, pen.get());
- int right = trRect.right() - 1;
- int bottom = trRect.bottom() - 1;
+ int right = trRect.maxX() - 1;
+ int bottom = trRect.maxY() - 1;
const POINT intPoints[5] =
{
{ trRect.x(), trRect.y() },
@@ -1536,8 +1535,8 @@ void GraphicsContext::drawText(const Font& font, const TextRun& run, const IntPo
float oldOpacity = m_data->m_opacity;
m_data->m_opacity *= fillColor().alpha() / 255.0;
- FloatRect textRect = font.selectionRectForText(run, point, font.height(), from, to);
- textRect.setY(textRect.y() - font.ascent());
+ FloatRect textRect = font.selectionRectForText(run, point, font.fontMetrics().height(), from, to);
+ textRect.setY(textRect.y() - font.fontMetrics().ascent());
IntRect trRect = enclosingIntRect(m_data->mapRect(textRect));
RECT bmpRect;
AlphaPaintType alphaPaintType = mustSupportAlpha ? AlphaPaintOther : AlphaPaintNone;
@@ -1546,7 +1545,7 @@ void GraphicsContext::drawText(const Font& font, const TextRun& run, const IntPo
GraphicsContext gc(0);
gc.setBitmap(bmp);
gc.scale(FloatSize(m_data->m_transform.a(), m_data->m_transform.d()));
- font.drawText(&gc, run, IntPoint(0, font.ascent()), from, to);
+ font.drawText(&gc, run, IntPoint(0, font.fontMetrics().ascent()), from, to);
}
unsigned key1;
HDC memDC = bmp->getDC(&key1);
@@ -1591,7 +1590,7 @@ void GraphicsContext::drawText(const SimpleFontData* fontData, const GlyphBuffer
? fontData->platformData().getScaledFontHandle(height, scaleX == scaleY ? 0 : width)
: 0;
- FloatPoint startPoint(point.x(), point.y() - fontData->ascent());
+ FloatPoint startPoint(point.x(), point.y() - fontData->fontMetrics().ascent());
FloatPoint trPoint = m_data->mapPoint(startPoint);
int y = stableRound(trPoint.y());
diff --git a/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp b/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp
index 8534f89..8efe661 100644
--- a/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp
+++ b/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp
@@ -119,7 +119,7 @@ static inline void bezier(int segments, Vector<PathPoint>& pts, const PathPoint*
static bool containsPoint(const FloatRect& r, const FloatPoint& p)
{
- return p.x() >= r.x() && p.y() >= r.y() && p.x() < r.right() && p.y() < r.bottom();
+ return p.x() >= r.x() && p.y() >= r.y() && p.x() < r.maxX() && p.y() < r.maxY();
}
static void normalizeAngle(float& angle)
@@ -146,7 +146,7 @@ static void inflateRectToContainPoint(FloatRect& r, float x, float y)
return;
}
if (x < r.x()) {
- r.setWidth(r.right() - x);
+ r.setWidth(r.maxX() - x);
r.setX(x);
} else {
float w = x - r.x() + 1;
@@ -154,7 +154,7 @@ static void inflateRectToContainPoint(FloatRect& r, float x, float y)
r.setWidth(w);
}
if (y < r.y()) {
- r.setHeight(r.bottom() - y);
+ r.setHeight(r.maxY() - y);
r.setY(y);
} else {
float h = y - r.y() + 1;
@@ -740,8 +740,8 @@ void PlatformPath::addRect(const FloatRect& r)
{
moveTo(r.location());
- float right = r.right() - 1;
- float bottom = r.bottom() - 1;
+ float right = r.maxX() - 1;
+ float bottom = r.maxY() - 1;
addLineTo(FloatPoint(right, r.y()));
addLineTo(FloatPoint(right, bottom));
addLineTo(FloatPoint(r.x(), bottom));
diff --git a/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp b/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp
index 168a5e2..2bf0028 100644
--- a/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp
+++ b/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp
@@ -135,7 +135,7 @@ bool SharedBitmap::to16bit()
int width = newBmpInfo.width();
int paddedWidth = newBmpInfo.paddedWidth();
int bufferSize = paddedWidth * newBmpInfo.height();
- OwnArrayPtr<unsigned> newPixelData(new unsigned[bufferSize / 2]);
+ OwnArrayPtr<unsigned> newPixelData = adoptArrayPtr(new unsigned[bufferSize / 2]);
void* newPixels = newPixelData.get();
if (!newPixels)
@@ -481,8 +481,8 @@ void SharedBitmap::drawPattern(HDC hdc, const AffineTransform& transform, const
RECT dstRectWin = {
stableRound(trRect.x()),
stableRound(trRect.y()),
- stableRound(trRect.right()),
- stableRound(trRect.bottom()),
+ stableRound(trRect.maxX()),
+ stableRound(trRect.maxY()),
};
if (dstRectWin.right <= dstRectWin.left || dstRectWin.bottom <= dstRectWin.top)
return;
@@ -497,8 +497,8 @@ void SharedBitmap::drawPattern(HDC hdc, const AffineTransform& transform, const
RECT srcRectWin = {
0,
0,
- stableRound(visibleDstRect.right()) - stableRound(visibleDstRect.x()),
- stableRound(visibleDstRect.bottom()) - stableRound(visibleDstRect.y())
+ stableRound(visibleDstRect.maxX()) - stableRound(visibleDstRect.x()),
+ stableRound(visibleDstRect.maxY()) - stableRound(visibleDstRect.y())
};
if (srcRectWin.right <= 0 || srcRectWin.bottom <= 0)
return;
diff --git a/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp b/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp
index 27a021e..8abafbd 100644
--- a/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp
+++ b/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp
@@ -27,7 +27,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "config.h"
#include "SimpleFontData.h"
@@ -35,9 +34,8 @@
#include "Font.h"
#include "FontCache.h"
#include "FontDescription.h"
-#include <wtf/MathExtras.h>
#include <mlang.h>
-#include <tchar.h>
+#include <wtf/MathExtras.h>
namespace WebCore {
@@ -51,11 +49,14 @@ void SimpleFontData::platformInit()
const TEXTMETRIC& tm = m_platformData.metrics();
m_isSystemFont = m_platformData.isSystemFont();
- m_ascent = (tm.tmAscent * m_platformData.size() + 36) / 72;
- m_descent = (tm.tmDescent * m_platformData.size() + 36) / 72;
- m_lineGap = (tm.tmExternalLeading * m_platformData.size() + 36) / 72;
- m_lineSpacing = m_ascent + m_descent + m_lineGap;
- m_xHeight = m_ascent * 0.56f;
+ float ascent = (tm.tmAscent * m_platformData.size() + 36) / 72.0f;
+ float descent = (tm.tmDescent * m_platformData.size() + 36) / 72.0f;
+ float lineGap = (tm.tmExternalLeading * m_platformData.size() + 36) / 72.0f;
+ m_fontMetrics.setAscent(ascent);
+ m_fontMetrics.setDescent(descent);
+ m_fontMetrics.setLineGap(lineGap);
+ m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
+ m_fontMetrics.setXHeight(ascent * 0.56f);
}
void SimpleFontData::platformDestroy()
diff --git a/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.cpp
index 6133372..055f0fc 100644
--- a/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.cpp
+++ b/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.cpp
@@ -31,7 +31,7 @@ FontCustomPlatformData::~FontCustomPlatformData()
{
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontRenderingMode)
+FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode)
{
return FontPlatformData(size, bold, italic);
}
diff --git a/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.h
index 86f99b2..c975296 100644
--- a/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.h
+++ b/Source/WebCore/platform/graphics/wx/FontCustomPlatformData.h
@@ -23,7 +23,9 @@
#include "FontOrientation.h"
#include "FontRenderingMode.h"
+#include "FontWidthVariant.h"
#include <wtf/Forward.h>
+#include <wtf/Noncopyable.h>
namespace WebCore {
@@ -38,7 +40,7 @@ namespace WebCore {
static bool supportsFormat(const String&);
- FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode);
+ FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
};
FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer*);
diff --git a/Source/WebCore/platform/graphics/wx/FontPlatformData.h b/Source/WebCore/platform/graphics/wx/FontPlatformData.h
index 9ae8b54..3ef0179 100644
--- a/Source/WebCore/platform/graphics/wx/FontPlatformData.h
+++ b/Source/WebCore/platform/graphics/wx/FontPlatformData.h
@@ -30,6 +30,7 @@
#define FontPlatformData_h
#include "FontDescription.h"
+#include "FontWidthVariant.h"
#include "FontOrientation.h"
#include "StringImpl.h"
#include <wtf/Forward.h>
@@ -150,6 +151,9 @@ public:
FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+ // We don't support this yet, so just return the default value for now.
+ FontWidthVariant widthVariant() const { return RegularWidth; }
+
#if OS(WINDOWS)
bool useGDI() const;
HFONT hfont() const;
diff --git a/Source/WebCore/platform/graphics/wx/FontPlatformDataWx.cpp b/Source/WebCore/platform/graphics/wx/FontPlatformDataWx.cpp
index 66c69ee..c125b7c 100644
--- a/Source/WebCore/platform/graphics/wx/FontPlatformDataWx.cpp
+++ b/Source/WebCore/platform/graphics/wx/FontPlatformDataWx.cpp
@@ -126,7 +126,7 @@ unsigned FontPlatformData::computeHash() const
thisFont->GetStyle(),
thisFont->GetWeight(),
thisFont->GetUnderlined(),
- StringImpl::computeHash(thisFont->GetFaceName().utf8_str())
+ WTF::StringHasher::createHash(thisFont->GetFaceName().utf8_str().data())
};
return WTF::StringHasher::createBlobHash<sizeof(hashCodes)>(hashCodes);
diff --git a/Source/WebCore/platform/graphics/wx/FontWx.cpp b/Source/WebCore/platform/graphics/wx/FontWx.cpp
index c01e249..c48f3c7 100644
--- a/Source/WebCore/platform/graphics/wx/FontWx.cpp
+++ b/Source/WebCore/platform/graphics/wx/FontWx.cpp
@@ -32,6 +32,7 @@
#include "IntRect.h"
#include "NotImplemented.h"
#include "SimpleFontData.h"
+#include "TextRun.h"
#if OS(WINDOWS)
#include "UniscribeController.h"
@@ -57,6 +58,15 @@ bool Font::canReturnFallbackFontsForComplexText()
#endif
}
+bool Font::canExpandAroundIdeographsInComplexText()
+{
+#if OS(DARWIN)
+ return true;
+#else
+ return false;
+#endif
+}
+
void Font::drawGlyphs(GraphicsContext* graphicsContext, const SimpleFontData* font, const GlyphBuffer& glyphBuffer,
int from, int numGlyphs, const FloatPoint& point) const
{
diff --git a/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp b/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
index f1c09c5..991be79 100644
--- a/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
+++ b/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
@@ -515,7 +515,7 @@ void GraphicsContext::fillPath(const Path& path)
#if USE(WXGC)
wxGraphicsContext* gc = m_data->context->GetGraphicsContext();
if (gc)
- gc->FillPath(path.platformPath());
+ gc->FillPath(*path.platformPath());
#endif
}
@@ -524,7 +524,7 @@ void GraphicsContext::strokePath(const Path& path)
#if USE(WXGC)
wxGraphicsContext* gc = m_data->context->GetGraphicsContext();
if (gc)
- gc->StrokePath(path.platformPath());
+ gc->StrokePath(*path.platformPath());
#endif
}
diff --git a/Source/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp b/Source/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
index 0e24bfc..4f24e4c 100644
--- a/Source/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
+++ b/Source/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
@@ -53,12 +53,12 @@ void SimpleFontData::platformInit()
wxFont *font = m_platformData.font();
if (font && font->IsOk()) {
wxFontProperties props = wxFontProperties(font);
- m_ascent = props.GetAscent();
- m_descent = props.GetDescent();
- m_lineSpacing = props.GetLineSpacing();
- m_xHeight = props.GetXHeight();
- m_unitsPerEm = 1; // FIXME!
- m_lineGap = props.GetLineGap();
+ m_fontMetrics.setAscent(props.GetAscent());
+ m_fontMetrics.setDescent(props.GetDescent());
+ m_fontMetrics.setXHeight(props.GetXHeight());
+ m_fontMetrics.setUnitsPerEm(1); // FIXME!
+ m_fontMetrics.setLineGap(props.GetLineGap());
+ m_fontMetrics.setLineSpacing(props.GetLineSpacing());
}
m_syntheticBoldOffset = 0.0f;
diff --git a/Source/WebCore/platform/gtk/GtkVersioning.h b/Source/WebCore/platform/gtk/GtkVersioning.h
index 7e9fcd1..70e1bbe 100644
--- a/Source/WebCore/platform/gtk/GtkVersioning.h
+++ b/Source/WebCore/platform/gtk/GtkVersioning.h
@@ -94,7 +94,10 @@ const gchar* gtk_menu_item_get_label(GtkMenuItem*);
#define gtk_selection_data_get_length(data) (data)->length
#define gtk_selection_data_get_data(data) (data)->data
#define gtk_selection_data_get_target(data) (data)->target
-#define gtk_adjustment_set_page_size(adj, value) (adj)->page_size = value
+#define gtk_adjustment_set_page_size(adj, newValue) ((adj)->page_size = newValue)
+#define gtk_adjustment_set_value(adj, newValue) ((adj)->value = newValue)
+#define gtk_adjustment_set_lower(adj, newValue) ((adj)->lower = newValue)
+#define gtk_adjustment_set_upper(adj, newValue) ((adj)->upper = newValue)
void gtk_adjustment_configure(GtkAdjustment* adjustment, gdouble value, gdouble lower, gdouble upper,
gdouble stepIncrement, gdouble pageIncrement, gdouble pageSize);
diff --git a/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp b/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp
index 8fc3020..9f7f14c 100644
--- a/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp
+++ b/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp
@@ -28,6 +28,9 @@
#include "config.h"
#include "MIMETypeRegistry.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
+
namespace WebCore {
struct ExtensionMap {
@@ -62,6 +65,8 @@ static const ExtensionMap extensionMap [] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
String s = ext.lower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk.cpp
index bfe3901..1e9f159 100644
--- a/Source/WebCore/platform/gtk/RenderThemeGtk.cpp
+++ b/Source/WebCore/platform/gtk/RenderThemeGtk.cpp
@@ -224,15 +224,47 @@ bool RenderThemeGtk::paintTextArea(RenderObject* o, const PaintInfo& i, const In
return paintTextField(o, i, r);
}
-static void paintGdkPixbuf(GraphicsContext* context, const GdkPixbuf* icon, const IntPoint& iconPoint)
-{
+static void paintGdkPixbuf(GraphicsContext* context, const GdkPixbuf* icon, const IntRect& iconRect)
+{
+ IntSize iconSize(gdk_pixbuf_get_width(icon), gdk_pixbuf_get_height(icon));
+ if (iconRect.size() != iconSize) {
+ // We could use cairo_scale() here but cairo/pixman downscale quality is quite bad.
+ GRefPtr<GdkPixbuf> scaledIcon = gdk_pixbuf_scale_simple(icon, iconRect.width(), iconRect.height(),
+ GDK_INTERP_BILINEAR);
+ icon = scaledIcon.get();
+ }
+
cairo_t* cr = context->platformContext();
cairo_save(cr);
- gdk_cairo_set_source_pixbuf(cr, icon, iconPoint.x(), iconPoint.y());
+ gdk_cairo_set_source_pixbuf(cr, icon, iconRect.x(), iconRect.y());
cairo_paint(cr);
cairo_restore(cr);
}
+// Defined in GTK+ (gtk/gtkiconfactory.c)
+static const gint gtkIconSizeMenu = 16;
+static const gint gtkIconSizeSmallToolbar = 18;
+static const gint gtkIconSizeButton = 20;
+static const gint gtkIconSizeLargeToolbar = 24;
+static const gint gtkIconSizeDnd = 32;
+static const gint gtkIconSizeDialog = 48;
+
+static GtkIconSize getIconSizeForPixelSize(gint pixelSize)
+{
+ if (pixelSize < gtkIconSizeSmallToolbar)
+ return GTK_ICON_SIZE_MENU;
+ if (pixelSize >= gtkIconSizeSmallToolbar && pixelSize < gtkIconSizeButton)
+ return GTK_ICON_SIZE_SMALL_TOOLBAR;
+ if (pixelSize >= gtkIconSizeButton && pixelSize < gtkIconSizeLargeToolbar)
+ return GTK_ICON_SIZE_BUTTON;
+ if (pixelSize >= gtkIconSizeLargeToolbar && pixelSize < gtkIconSizeDnd)
+ return GTK_ICON_SIZE_LARGE_TOOLBAR;
+ if (pixelSize >= gtkIconSizeDnd && pixelSize < gtkIconSizeDialog)
+ return GTK_ICON_SIZE_DND;
+
+ return GTK_ICON_SIZE_DIALOG;
+}
+
void RenderThemeGtk::adjustSearchFieldResultsButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
{
adjustSearchFieldCancelButtonStyle(selector, style, e);
@@ -243,57 +275,77 @@ bool RenderThemeGtk::paintSearchFieldResultsButton(RenderObject* o, const PaintI
return paintSearchFieldResultsDecoration(o, i, rect);
}
-void RenderThemeGtk::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+static void adjustSearchFieldIconStyle(RenderStyle* style)
{
style->resetBorder();
style->resetPadding();
+ // Get the icon size based on the font size.
+ int fontSize = style->fontSize();
+ if (fontSize < gtkIconSizeMenu) {
+ style->setWidth(Length(fontSize, Fixed));
+ style->setHeight(Length(fontSize, Fixed));
+ return;
+ }
gint width = 0, height = 0;
- gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height);
+ gtk_icon_size_lookup(getIconSizeForPixelSize(fontSize), &width, &height);
style->setWidth(Length(width, Fixed));
style->setHeight(Length(height, Fixed));
}
-static IntPoint centerRectVerticallyInParentInputElement(RenderObject* object, const IntRect& rect)
+void RenderThemeGtk::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+{
+ adjustSearchFieldIconStyle(style);
+}
+
+static IntRect centerRectVerticallyInParentInputElement(RenderObject* renderObject, const IntRect& rect)
{
- Node* input = object->node()->shadowAncestorNode(); // Get the renderer of <input> element.
+ // Get the renderer of <input> element.
+ Node* input = renderObject->node()->shadowAncestorNode();
if (!input->renderer()->isBox())
- return rect.topLeft();
+ return IntRect();
// If possible center the y-coordinate of the rect vertically in the parent input element.
// We also add one pixel here to ensure that the y coordinate is rounded up for box heights
// that are even, which looks in relation to the box text.
IntRect inputContentBox = toRenderBox(input->renderer())->absoluteContentBox();
- return IntPoint(rect.x(), inputContentBox.y() + (inputContentBox.height() - rect.height() + 1) / 2);
+ // Make sure the scaled decoration stays square and will fit in its parent's box.
+ int iconSize = std::min(inputContentBox.width(), std::min(inputContentBox.height(), rect.height()));
+ IntRect scaledRect(rect.x(), inputContentBox.y() + (inputContentBox.height() - iconSize + 1) / 2, iconSize, iconSize);
+ return scaledRect;
}
bool RenderThemeGtk::paintSearchFieldResultsDecoration(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
{
+ IntRect iconRect = centerRectVerticallyInParentInputElement(renderObject, rect);
+ if (iconRect.isEmpty())
+ return false;
+
GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_ENTRY, GTK_STOCK_FIND,
gtkTextDirection(renderObject->style()->direction()),
- gtkIconState(this, renderObject), GTK_ICON_SIZE_MENU);
- paintGdkPixbuf(paintInfo.context, icon.get(), centerRectVerticallyInParentInputElement(renderObject, rect));
+ gtkIconState(this, renderObject),
+ getIconSizeForPixelSize(rect.height()));
+ paintGdkPixbuf(paintInfo.context, icon.get(), iconRect);
return false;
}
void RenderThemeGtk::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
{
- style->resetBorder();
- style->resetPadding();
-
- gint width = 0, height = 0;
- gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height);
- style->setWidth(Length(width, Fixed));
- style->setHeight(Length(height, Fixed));
+ adjustSearchFieldIconStyle(style);
}
bool RenderThemeGtk::paintSearchFieldCancelButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
{
+ IntRect iconRect = centerRectVerticallyInParentInputElement(renderObject, rect);
+ if (iconRect.isEmpty())
+ return false;
+
GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_ENTRY, GTK_STOCK_CLEAR,
gtkTextDirection(renderObject->style()->direction()),
- gtkIconState(this, renderObject), GTK_ICON_SIZE_MENU);
- paintGdkPixbuf(paintInfo.context, icon.get(), centerRectVerticallyInParentInputElement(renderObject, rect));
+ gtkIconState(this, renderObject),
+ getIconSizeForPixelSize(rect.height()));
+ paintGdkPixbuf(paintInfo.context, icon.get(), iconRect);
return false;
}
@@ -316,14 +368,21 @@ bool RenderThemeGtk::paintCapsLockIndicator(RenderObject* renderObject, const Pa
if (paintInfo.context->paintingDisabled())
return true;
+ int iconSize = std::min(rect.width(), rect.height());
GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_ENTRY, GTK_STOCK_CAPS_LOCK_WARNING,
gtkTextDirection(renderObject->style()->direction()),
- gtkIconState(this, renderObject), GTK_ICON_SIZE_MENU);
+ 0, getIconSizeForPixelSize(iconSize));
+
+ // Only re-scale the icon when it's smaller than the minimum icon size.
+ if (iconSize >= gtkIconSizeMenu)
+ iconSize = gdk_pixbuf_get_height(icon.get());
// GTK+ locates the icon right aligned in the entry. The given rectangle is already
// centered vertically by RenderTextControlSingleLine.
- IntPoint iconPosition(rect.x() + rect.width() - gdk_pixbuf_get_width(icon.get()), rect.y());
- paintGdkPixbuf(paintInfo.context, icon.get(), iconPosition);
+ IntRect iconRect(rect.x() + rect.width() - iconSize,
+ rect.y() + (rect.height() - iconSize) / 2,
+ iconSize, iconSize);
+ paintGdkPixbuf(paintInfo.context, icon.get(), iconRect);
return true;
}
@@ -421,10 +480,11 @@ bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContex
gtkTextDirection(renderObject->style()->direction()),
gtkIconState(this, renderObject),
getMediaButtonIconSize(m_mediaIconSize));
- IntPoint iconPoint(rect.x() + (rect.width() - m_mediaIconSize) / 2,
- rect.y() + (rect.height() - m_mediaIconSize) / 2);
+ IntRect iconRect(rect.x() + (rect.width() - m_mediaIconSize) / 2,
+ rect.y() + (rect.height() - m_mediaIconSize) / 2,
+ m_mediaIconSize, m_mediaIconSize);
context->fillRect(FloatRect(rect), m_panelColor, ColorSpaceDeviceRGB);
- paintGdkPixbuf(context, icon.get(), iconPoint);
+ paintGdkPixbuf(context, icon.get(), iconRect);
return false;
}
diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk.h b/Source/WebCore/platform/gtk/RenderThemeGtk.h
index 5765782..f5e03a9 100644
--- a/Source/WebCore/platform/gtk/RenderThemeGtk.h
+++ b/Source/WebCore/platform/gtk/RenderThemeGtk.h
@@ -31,11 +31,8 @@
#include "GRefPtr.h"
#include "RenderTheme.h"
-#ifdef GTK_API_VERSION_2
-#include "gtkdrawing.h"
-#endif
-
typedef gulong GType;
+typedef struct _GdkColormap GdkColormap;
namespace WebCore {
@@ -92,7 +89,8 @@ public:
#endif
#ifdef GTK_API_VERSION_2
- GtkWidget* gtkScrollbar();
+ GtkWidget* gtkVScrollbar() const;
+ GtkWidget* gtkHScrollbar() const;
static void getIndicatorMetrics(ControlPart, int& indicatorSize, int& indicatorSpacing);
#else
GtkStyleContext* gtkScrollbarStyle();
@@ -171,6 +169,9 @@ protected:
virtual bool paintCapsLockIndicator(RenderObject*, const PaintInfo&, const IntRect&);
+ virtual void adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
+ virtual bool paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&);
+
private:
void platformInit();
static void setTextInputBorders(RenderStyle*);
@@ -195,12 +196,10 @@ private:
#ifdef GTK_API_VERSION_2
void setupWidgetAndAddToContainer(GtkWidget*, GtkWidget*) const;
- bool paintRenderObject(GtkThemeWidgetType, RenderObject*, GraphicsContext*, const IntRect&, int flags = 0);
void refreshComboBoxChildren() const;
void getComboBoxPadding(RenderStyle*, int& left, int& top, int& right, int& bottom) const;
int getComboBoxSeparatorWidth() const;
int comboBoxArrowSize(RenderStyle*) const;
- GtkThemeParts m_themeParts;
GtkWidget* gtkButton() const;
GtkWidget* gtkEntry() const;
@@ -216,6 +215,7 @@ private:
GtkWidget* gtkComboBoxArrow() const;
GtkWidget* gtkComboBoxSeparator() const;
+ GdkColormap* m_colormap;
mutable GtkWidget* m_gtkWindow;
mutable GtkWidget* m_gtkContainer;
mutable GtkWidget* m_gtkButton;
@@ -230,6 +230,8 @@ private:
mutable GtkWidget* m_gtkComboBoxButton;
mutable GtkWidget* m_gtkComboBoxArrow;
mutable GtkWidget* m_gtkComboBoxSeparator;
+ mutable GtkWidget* m_gtkVScrollbar;
+ mutable GtkWidget* m_gtkHScrollbar;
bool m_themePartsHaveRGBAColormap;
friend class WidgetRenderingContext;
#endif
diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp
index de4195d..534aa97 100644
--- a/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp
+++ b/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp
@@ -41,7 +41,6 @@
#include "TextDirection.h"
#include "UserAgentStyleSheets.h"
#include "WidgetRenderingContext.h"
-#include "gtkdrawing.h"
#include <gdk/gdk.h>
#include <gtk/gtk.h>
@@ -50,7 +49,6 @@ namespace WebCore {
// This is not a static method, because we want to avoid having GTK+ headers in RenderThemeGtk.h.
extern GtkTextDirection gtkTextDirection(TextDirection);
-static int mozGtkRefCount = 0;
void RenderThemeGtk::platformInit()
{
m_themePartsHaveRGBAColormap = true;
@@ -68,30 +66,18 @@ void RenderThemeGtk::platformInit()
m_gtkComboBoxButton = 0;
m_gtkComboBoxArrow = 0;
m_gtkComboBoxSeparator = 0;
+ m_gtkVScrollbar = 0;
+ m_gtkHScrollbar = 0;
- memset(&m_themeParts, 0, sizeof(GtkThemeParts));
- GdkColormap* colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
- if (!colormap) {
+ m_colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
+ if (!m_colormap) {
m_themePartsHaveRGBAColormap = false;
- colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
+ m_colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
}
- m_themeParts.colormap = colormap;
-
- // Initialize the Mozilla theme drawing code.
- if (!mozGtkRefCount) {
- moz_gtk_init();
- moz_gtk_use_theme_parts(&m_themeParts);
- }
- ++mozGtkRefCount;
}
RenderThemeGtk::~RenderThemeGtk()
{
- --mozGtkRefCount;
-
- if (!mozGtkRefCount)
- moz_gtk_shutdown();
-
if (m_gtkWindow)
gtk_widget_destroy(m_gtkWindow);
}
@@ -147,34 +133,6 @@ static GtkStateType getGtkStateType(RenderThemeGtk* theme, RenderObject* object)
return GTK_STATE_NORMAL;
}
-bool RenderThemeGtk::paintRenderObject(GtkThemeWidgetType type, RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, int flags)
-{
- // Painting is disabled so just claim to have succeeded
- if (context->paintingDisabled())
- return false;
-
- GtkWidgetState widgetState;
- widgetState.active = isPressed(renderObject);
- widgetState.focused = isFocused(renderObject);
-
- // https://bugs.webkit.org/show_bug.cgi?id=18364
- // The Mozilla theme drawing code, only paints a button as pressed when it's pressed
- // while hovered. Until we move away from the Mozila code, work-around the issue by
- // forcing a pressed button into the hovered state. This ensures that buttons activated
- // via the keyboard have the proper rendering.
- widgetState.inHover = isHovered(renderObject) || (type == MOZ_GTK_BUTTON && isPressed(renderObject));
-
- // FIXME: Disabled does not always give the correct appearance for ReadOnly
- widgetState.disabled = !isEnabled(renderObject) || isReadOnlyControl(renderObject);
- widgetState.isDefault = false;
- widgetState.canDefault = false;
- widgetState.depressed = false;
-
- WidgetRenderingContext widgetContext(context, rect);
- return !widgetContext.paintMozillaWidget(type, &widgetState, flags,
- gtkTextDirection(renderObject->style()->direction()));
-}
-
static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, GtkWidget* widget)
{
// The width and height are both specified, so we shouldn't change them.
@@ -608,6 +566,15 @@ bool RenderThemeGtk::paintProgressBar(RenderObject* renderObject, const PaintInf
}
#endif
+void RenderThemeGtk::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const
+{
+}
+
+bool RenderThemeGtk::paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&)
+{
+ return true;
+}
+
GRefPtr<GdkPixbuf> RenderThemeGtk::getStockIcon(GType widgetType, const char* iconName, gint direction, gint state, gint iconSize)
{
ASSERT(widgetType == GTK_TYPE_CONTAINER || widgetType == GTK_TYPE_ENTRY);
@@ -708,7 +675,7 @@ GtkWidget* RenderThemeGtk::gtkContainer() const
return m_gtkContainer;
m_gtkWindow = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_widget_set_colormap(m_gtkWindow, m_themeParts.colormap);
+ gtk_widget_set_colormap(m_gtkWindow, m_colormap);
setupWidget(m_gtkWindow);
gtk_widget_set_name(m_gtkWindow, "MozillaGtkWidget");
@@ -882,9 +849,22 @@ GtkWidget* RenderThemeGtk::gtkComboBoxSeparator() const
return m_gtkComboBoxSeparator;
}
-GtkWidget* RenderThemeGtk::gtkScrollbar()
+GtkWidget* RenderThemeGtk::gtkHScrollbar() const
+{
+ if (m_gtkHScrollbar)
+ return m_gtkHScrollbar;
+ m_gtkHScrollbar = gtk_hscrollbar_new(0);
+ setupWidgetAndAddToContainer(m_gtkHScrollbar, gtkContainer());
+ return m_gtkHScrollbar;
+}
+
+GtkWidget* RenderThemeGtk::gtkVScrollbar() const
{
- return moz_gtk_get_scrollbar_widget();
+ if (m_gtkVScrollbar)
+ return m_gtkVScrollbar;
+ m_gtkVScrollbar = gtk_vscrollbar_new(0);
+ setupWidgetAndAddToContainer(m_gtkVScrollbar, gtkContainer());
+ return m_gtkVScrollbar;
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp
index 1a9f445..7fa0f04 100644
--- a/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp
+++ b/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp
@@ -45,6 +45,8 @@ namespace WebCore {
// This is the default value defined by GTK+, where it was defined as MIN_ARROW_SIZE in gtkarrow.c.
static const int minArrowSize = 15;
+// This is the default value defined by GTK+, where it was defined as MIN_ARROW_WIDTH in gtkspinbutton.c.
+static const int minSpinButtonArrowSize = 6;
typedef HashMap<GType, GRefPtr<GtkStyleContext> > StyleContextMap;
static StyleContextMap& styleContextMap();
@@ -543,7 +545,7 @@ bool RenderThemeGtk::paintMenuList(RenderObject* renderObject, const PaintInfo&
cairo_clip(cairoContext);
gtk_render_line(separatorStyleContext, cairoContext,
separatorPosition.x(), separatorPosition.y(),
- separatorPosition.x(), innerRect.bottom());
+ separatorPosition.x(), innerRect.maxY());
cairo_restore(cairoContext);
}
@@ -720,6 +722,117 @@ bool RenderThemeGtk::paintProgressBar(RenderObject* renderObject, const PaintInf
}
#endif
+static gint spinButtonArrowSize(GtkStyleContext* context)
+{
+ const PangoFontDescription* fontDescription = gtk_style_context_get_font(context, static_cast<GtkStateFlags>(0));
+ gint fontSize = pango_font_description_get_size(fontDescription);
+ gint arrowSize = max(PANGO_PIXELS(fontSize), minSpinButtonArrowSize);
+
+ return arrowSize - arrowSize % 2; // Force even.
+}
+
+void RenderThemeGtk::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
+{
+ GtkStyleContext* context = getStyleContext(GTK_TYPE_SPIN_BUTTON);
+
+ GtkBorder padding;
+ gtk_style_context_get_padding(context, static_cast<GtkStateFlags>(0), &padding);
+
+ int width = spinButtonArrowSize(context) + padding.left + padding.right;
+ style->setWidth(Length(width, Fixed));
+ style->setMinWidth(Length(width, Fixed));
+}
+
+static void paintSpinArrowButton(RenderTheme* theme, GtkStyleContext* context, RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect, GtkArrowType arrowType)
+{
+ ASSERT(arrowType == GTK_ARROW_UP || arrowType == GTK_ARROW_DOWN);
+
+ gtk_style_context_save(context);
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_BUTTON);
+
+ GtkTextDirection direction = gtk_style_context_get_direction(context);
+ guint state = static_cast<guint>(gtk_style_context_get_state(context));
+ if (!(state & GTK_STATE_FLAG_INSENSITIVE)) {
+ if (theme->isPressed(renderObject)) {
+ if ((arrowType == GTK_ARROW_UP && theme->isSpinUpButtonPartPressed(renderObject))
+ || (arrowType == GTK_ARROW_DOWN && !theme->isSpinUpButtonPartPressed(renderObject)))
+ state |= GTK_STATE_FLAG_ACTIVE;
+ } else if (theme->isHovered(renderObject)) {
+ if ((arrowType == GTK_ARROW_UP && theme->isSpinUpButtonPartHovered(renderObject))
+ || (arrowType == GTK_ARROW_DOWN && !theme->isSpinUpButtonPartHovered(renderObject)))
+ state |= GTK_STATE_FLAG_PRELIGHT;
+ }
+ }
+ gtk_style_context_set_state(context, static_cast<GtkStateFlags>(state));
+
+ // Paint button.
+ IntRect buttonRect(rect);
+ guint junction = gtk_style_context_get_junction_sides(context);
+ if (arrowType == GTK_ARROW_UP)
+ junction |= GTK_JUNCTION_BOTTOM;
+ else {
+ junction |= GTK_JUNCTION_TOP;
+ buttonRect.move(0, rect.height() / 2);
+ }
+ buttonRect.setHeight(rect.height() / 2);
+ gtk_style_context_set_junction_sides(context, static_cast<GtkJunctionSides>(junction));
+
+ gtk_render_background(context, paintInfo.context->platformContext(), buttonRect.x(), buttonRect.y(), buttonRect.width(), buttonRect.height());
+ gtk_render_frame(context, paintInfo.context->platformContext(), buttonRect.x(), buttonRect.y(), buttonRect.width(), buttonRect.height());
+
+ // Paint arrow centered inside button.
+ // This code is based on gtkspinbutton.c code.
+ IntRect arrowRect;
+ gdouble angle;
+ if (arrowType == GTK_ARROW_UP) {
+ angle = 0;
+ arrowRect.setY(rect.y());
+ arrowRect.setHeight(rect.height() / 2 - 2);
+ } else {
+ angle = G_PI;
+ arrowRect.setY(rect.y() + buttonRect.y());
+ arrowRect.setHeight(rect.height() - arrowRect.y() - 2);
+ }
+ arrowRect.setWidth(rect.width() - 3);
+ if (direction == GTK_TEXT_DIR_LTR)
+ arrowRect.setX(rect.x() + 1);
+ else
+ arrowRect.setX(rect.x() + 2);
+
+ gint width = arrowRect.width() / 2;
+ width -= width % 2 - 1; // Force odd.
+ gint height = (width + 1) / 2;
+
+ arrowRect.move((arrowRect.width() - width) / 2, (arrowRect.height() - height) / 2);
+ gtk_render_arrow(context, paintInfo.context->platformContext(), angle, arrowRect.x(), arrowRect.y(), width);
+
+ gtk_style_context_restore(context);
+}
+
+bool RenderThemeGtk::paintInnerSpinButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
+{
+ GtkStyleContext* context = getStyleContext(GTK_TYPE_SPIN_BUTTON);
+ gtk_style_context_save(context);
+
+ GtkTextDirection direction = static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction()));
+ gtk_style_context_set_direction(context, direction);
+
+ guint flags = 0;
+ if (!isEnabled(renderObject) || isReadOnlyControl(renderObject))
+ flags |= GTK_STATE_FLAG_INSENSITIVE;
+ else if (isFocused(renderObject))
+ flags |= GTK_STATE_FLAG_FOCUSED;
+ gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags));
+ gtk_style_context_remove_class(context, GTK_STYLE_CLASS_ENTRY);
+
+ paintSpinArrowButton(this, context, renderObject, paintInfo, rect, GTK_ARROW_UP);
+ paintSpinArrowButton(this, context, renderObject, paintInfo, rect, GTK_ARROW_DOWN);
+
+ gtk_style_context_restore(context);
+
+ return false;
+}
+
GRefPtr<GdkPixbuf> RenderThemeGtk::getStockIcon(GType widgetType, const char* iconName, gint direction, gint state, gint iconSize)
{
GtkStyleContext* context = getStyleContext(widgetType);
diff --git a/Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp b/Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
index cb9b0f8..7f7c269 100644
--- a/Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
+++ b/Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
@@ -228,9 +228,10 @@ bool ScrollbarThemeGtk::paint(Scrollbar* scrollbar, GraphicsContext* graphicsCon
scrollMask |= ThumbPart;
}
- paintScrollbarBackground(graphicsContext, scrollbar);
-
- if (scrollMask & TrackBGPart)
+ ScrollbarControlPartMask allButtons = BackButtonStartPart | BackButtonEndPart
+ | ForwardButtonStartPart | ForwardButtonEndPart;
+ if (scrollMask & TrackBGPart || scrollMask & ThumbPart || scrollMask & allButtons)
+ paintScrollbarBackground(graphicsContext, scrollbar);
paintTrackBackground(graphicsContext, scrollbar, trackPaintRect);
// Paint the back and forward buttons.
diff --git a/Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp b/Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp
index 79295c1..1ab8850 100644
--- a/Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp
+++ b/Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp
@@ -28,12 +28,12 @@
#ifdef GTK_API_VERSION_2
+#include "GtkVersioning.h"
#include "PlatformMouseEvent.h"
#include "RenderThemeGtk.h"
#include "ScrollView.h"
#include "Scrollbar.h"
#include "WidgetRenderingContext.h"
-#include "gtkdrawing.h"
#include <gtk/gtk.h>
namespace WebCore {
@@ -46,107 +46,169 @@ static void gtkStyleSetCallback(GtkWidget* widget, GtkStyle* previous, Scrollbar
ScrollbarThemeGtk::ScrollbarThemeGtk()
{
updateThemeProperties();
- g_signal_connect(static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->gtkScrollbar(),
+ g_signal_connect(static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->gtkHScrollbar(),
"style-set", G_CALLBACK(gtkStyleSetCallback), this);
}
void ScrollbarThemeGtk::updateThemeProperties()
{
- MozGtkScrollbarMetrics metrics;
- moz_gtk_get_scrollbar_metrics(&metrics);
-
- m_thumbFatness = metrics.slider_width;
- m_troughBorderWidth = metrics.trough_border;
- m_stepperSize = metrics.stepper_size;
- m_stepperSpacing = metrics.stepper_spacing;
- m_minThumbLength = metrics.min_slider_size;
- m_troughUnderSteppers = metrics.trough_under_steppers;
- m_hasForwardButtonStartPart = metrics.has_secondary_forward_stepper;
- m_hasBackButtonEndPart = metrics.has_secondary_backward_stepper;
-
+ GtkWidget* scrollbar = static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->gtkHScrollbar();
+ gtk_widget_style_get(scrollbar,
+ "slider_width", &m_thumbFatness,
+ "trough_border", &m_troughBorderWidth,
+ "stepper-size", &m_stepperSize,
+ "trough-under-steppers", &m_troughUnderSteppers,
+ "has-secondary-forward-stepper", &m_hasForwardButtonStartPart,
+ "has-secondary-backward-stepper", &m_hasBackButtonEndPart, NULL);
+ m_minThumbLength = gtk_range_get_min_slider_size(GTK_RANGE(scrollbar));
updateScrollbarsFrameThickness();
}
-void ScrollbarThemeGtk::paintTrackBackground(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect)
+static GtkWidget* getWidgetForScrollbar(Scrollbar* scrollbar)
{
- GtkWidgetState state;
- state.focused = FALSE;
- state.isDefault = FALSE;
- state.canDefault = FALSE;
- state.disabled = FALSE;
- state.active = FALSE;
- state.inHover = FALSE;
+ RenderThemeGtk* theme = static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get());
+ return scrollbar->orientation() == VerticalScrollbar ? theme->gtkVScrollbar() : theme->gtkHScrollbar();
+}
+void ScrollbarThemeGtk::paintTrackBackground(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect)
+{
// Paint the track background. If the trough-under-steppers property is true, this
// should be the full size of the scrollbar, but if is false, it should only be the
// track rect.
- IntRect fullScrollbarRect = rect;
+ IntRect fullScrollbarRect(rect);
if (m_troughUnderSteppers)
fullScrollbarRect = IntRect(scrollbar->x(), scrollbar->y(), scrollbar->width(), scrollbar->height());
- GtkThemeWidgetType type = scrollbar->orientation() == VerticalScrollbar ? MOZ_GTK_SCROLLBAR_TRACK_VERTICAL : MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL;
WidgetRenderingContext widgetContext(context, fullScrollbarRect);
- widgetContext.paintMozillaWidget(type, &state, 0);
+ IntRect paintRect(IntPoint(), fullScrollbarRect.size());
+ widgetContext.gtkPaintBox(paintRect, getWidgetForScrollbar(scrollbar),
+ GTK_STATE_ACTIVE, GTK_SHADOW_IN, "trough");
}
void ScrollbarThemeGtk::paintScrollbarBackground(GraphicsContext* context, Scrollbar* scrollbar)
{
- // This is unused by the moz_gtk_scrollecd_window_paint.
- GtkWidgetState state;
IntRect fullScrollbarRect = IntRect(scrollbar->x(), scrollbar->y(), scrollbar->width(), scrollbar->height());
+
WidgetRenderingContext widgetContext(context, fullScrollbarRect);
- widgetContext.paintMozillaWidget(MOZ_GTK_SCROLLED_WINDOW, &state, 0);
+ widgetContext.gtkPaintBox(fullScrollbarRect, getWidgetForScrollbar(scrollbar),
+ GTK_STATE_NORMAL, GTK_SHADOW_IN, "scrolled_window");
}
void ScrollbarThemeGtk::paintThumb(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect)
{
- GtkWidgetState state;
- state.focused = FALSE;
- state.isDefault = FALSE;
- state.canDefault = FALSE;
- state.disabled = FALSE;
- state.active = scrollbar->pressedPart() == ThumbPart;
- state.inHover = scrollbar->hoveredPart() == ThumbPart;
- state.maxpos = scrollbar->maximum();
- state.curpos = scrollbar->currentPos();
-
- GtkThemeWidgetType type = scrollbar->orientation() == VerticalScrollbar ? MOZ_GTK_SCROLLBAR_THUMB_VERTICAL : MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL;
+ GtkWidget* widget = getWidgetForScrollbar(scrollbar);
+ gboolean activateSlider;
+ gtk_widget_style_get(widget, "activate-slider", &activateSlider, NULL);
+
+ GtkStateType stateType = GTK_STATE_NORMAL;
+ GtkShadowType shadowType = GTK_SHADOW_OUT;
+ if (activateSlider && scrollbar->pressedPart() == ThumbPart) {
+ stateType = GTK_STATE_ACTIVE;
+ shadowType = GTK_SHADOW_IN;
+ } else if (scrollbar->pressedPart() == ThumbPart || scrollbar->hoveredPart() == ThumbPart)
+ stateType = GTK_STATE_PRELIGHT;
+
+ // The adjustment controls the rendering of the scrollbar thumb. If it's not set
+ // properly the theme may not draw the thumb borders properly.
+ GtkAdjustment* adjustment = gtk_range_get_adjustment(GTK_RANGE(widget));
+ gtk_adjustment_set_value(adjustment, scrollbar->currentPos());
+ gtk_adjustment_set_lower(adjustment, 0);
+ gtk_adjustment_set_upper(adjustment, scrollbar->maximum());
+
+ GtkOrientation orientation = GTK_ORIENTATION_HORIZONTAL;
+ if (scrollbar->orientation() == VerticalScrollbar) {
+ gtk_adjustment_set_page_size(adjustment, rect.height());
+ orientation = GTK_ORIENTATION_VERTICAL;
+ } else
+ gtk_adjustment_set_page_size(adjustment, rect.width());
+
WidgetRenderingContext widgetContext(context, rect);
- widgetContext.paintMozillaWidget(type, &state, 0);
+ IntRect sliderRect(IntPoint(), rect.size());
+ widgetContext.gtkPaintSlider(sliderRect, widget, stateType, shadowType, "slider", orientation);
}
void ScrollbarThemeGtk::paintButton(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect, ScrollbarPart part)
{
- int flags = 0;
- if (scrollbar->orientation() == VerticalScrollbar)
- flags |= MOZ_GTK_STEPPER_VERTICAL;
-
- if (part == ForwardButtonEndPart)
- flags |= (MOZ_GTK_STEPPER_DOWN | MOZ_GTK_STEPPER_BOTTOM);
- if (part == ForwardButtonStartPart)
- flags |= MOZ_GTK_STEPPER_DOWN;
-
- GtkWidgetState state;
- state.focused = TRUE;
- state.isDefault = TRUE;
- state.canDefault = TRUE;
- state.depressed = FALSE;
+ // The buttons will be disabled if the thumb is as the appropriate extreme.
+ GtkShadowType shadowType = GTK_SHADOW_OUT;
+ GtkStateType stateType = GTK_STATE_INSENSITIVE;
+ bool pressed = (part == scrollbar->pressedPart());
if ((BackButtonStartPart == part && scrollbar->currentPos())
|| (BackButtonEndPart == part && scrollbar->currentPos())
|| (ForwardButtonEndPart == part && scrollbar->currentPos() != scrollbar->maximum())
|| (ForwardButtonStartPart == part && scrollbar->currentPos() != scrollbar->maximum())) {
- state.disabled = FALSE;
- state.active = part == scrollbar->pressedPart();
- state.inHover = part == scrollbar->hoveredPart();
+ stateType = GTK_STATE_NORMAL;
+ if (pressed) {
+ stateType = GTK_STATE_ACTIVE;
+ shadowType = GTK_SHADOW_IN;
+ } else if (part == scrollbar->hoveredPart())
+ stateType = GTK_STATE_PRELIGHT;
+ }
+
+ // Themes determine how to draw the button (which button to draw) based on the allocation
+ // of the widget. Where the target rect is in relation to the total widget allocation
+ // determines the button.
+ ScrollbarOrientation orientation = scrollbar->orientation();
+ int buttonSize = (orientation == VerticalScrollbar) ? rect.height() : rect.width();
+ int totalAllocation = buttonSize * 5; // One space for each button and one extra.
+ int buttonOffset = 0;
+ if (ForwardButtonStartPart == part)
+ buttonOffset = buttonSize;
+ else if (BackButtonEndPart == part)
+ buttonOffset = 3 * buttonSize;
+ else if (ForwardButtonEndPart == part)
+ buttonOffset = 4 * buttonSize;
+
+ // Now we want the allocation to be relative to the origin of the painted rect.
+ GtkWidget* widget = getWidgetForScrollbar(scrollbar);
+ GtkAllocation allocation;
+ gtk_widget_get_allocation(widget, &allocation);
+ allocation.x = allocation.y = 0;
+ allocation.width = rect.width();
+ allocation.height = rect.height();
+
+ if (orientation == VerticalScrollbar) {
+ allocation.height = totalAllocation;
+ allocation.y -= buttonOffset;
} else {
- state.disabled = TRUE;
- state.active = FALSE;
- state.inHover = FALSE;
+ allocation.width = totalAllocation;
+ allocation.x -= buttonOffset;
}
+ gtk_widget_set_allocation(widget, &allocation);
+ const char* detail = orientation == VerticalScrollbar ? "vscrollbar" : "hscrollbar";
WidgetRenderingContext widgetContext(context, rect);
- widgetContext.paintMozillaWidget(MOZ_GTK_SCROLLBAR_BUTTON, &state, flags);
+
+ IntRect buttonRect(IntPoint(), rect.size());
+ widgetContext.gtkPaintBox(buttonRect, widget, stateType, shadowType, detail);
+
+ float arrowScaling;
+ gtk_widget_style_get(widget, "arrow-scaling", &arrowScaling, NULL);
+ IntSize arrowSize = rect.size();
+ arrowSize.scale(arrowScaling);
+ IntRect arrowRect(IntPoint(buttonRect.x() + (buttonRect.width() - arrowSize.width()) / 2,
+ buttonRect.y() + (buttonRect.height() - arrowSize.height()) / 2),
+ arrowSize);
+ if (pressed) {
+ int arrowDisplacementX, arrowDisplacementY;
+ gtk_widget_style_get(widget,
+ "arrow-displacement-x", &arrowDisplacementX,
+ "arrow-displacement-y", &arrowDisplacementY,
+ NULL);
+ arrowRect.move(arrowDisplacementX, arrowDisplacementY);
+ }
+
+ GtkArrowType arrowType = GTK_ARROW_DOWN;
+ if (orientation == VerticalScrollbar) {
+ if (part == BackButtonEndPart || part == BackButtonStartPart)
+ arrowType = GTK_ARROW_UP;
+ } else if (orientation == HorizontalScrollbar) {
+ arrowType = GTK_ARROW_RIGHT;
+ if (part == BackButtonEndPart || part == BackButtonStartPart)
+ arrowType = GTK_ARROW_LEFT;
+ }
+ widgetContext.gtkPaintArrow(arrowRect, widget, stateType, shadowType, arrowType, detail);
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp b/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp
index 51b32ea..9e640f6 100644
--- a/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp
+++ b/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp
@@ -103,8 +103,8 @@ WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* graphicsContext,
width = (1 + (width >> 5)) << 5;
height = (1 + (height >> 5)) << 5;
- gScratchBuffer = gdk_pixmap_new(0, width, height, gdk_colormap_get_visual(theme->m_themeParts.colormap)->depth);
- gdk_drawable_set_colormap(gScratchBuffer, theme->m_themeParts.colormap);
+ gScratchBuffer = gdk_pixmap_new(0, width, height, gdk_colormap_get_visual(theme->m_colormap)->depth);
+ gdk_drawable_set_colormap(gScratchBuffer, theme->m_colormap);
}
m_target = gScratchBuffer;
@@ -143,19 +143,19 @@ WidgetRenderingContext::~WidgetRenderingContext()
scheduleScratchBufferPurge();
}
-bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidgetState* state, int flags, GtkTextDirection textDirection)
-{
- // Sometimes moz_gtk_widget_paint modifies the clipping rectangle, so we must use a copy.
- GdkRectangle clipRect = m_paintRect;
- m_hadError = moz_gtk_widget_paint(type, m_target, &clipRect, &m_paintRect,
- state, flags, textDirection) != MOZ_GTK_SUCCESS;
- return !m_hadError;
-}
-
void WidgetRenderingContext::gtkPaintBox(const IntRect& rect, GtkWidget* widget, GtkStateType stateType, GtkShadowType shadowType, const gchar* detail)
{
GdkRectangle paintRect = { m_paintRect.x + rect.x(), m_paintRect.y + rect.y(), rect.width(), rect.height() };
- gtk_paint_box(gtk_widget_get_style(widget), m_target, stateType, shadowType, &m_paintRect,
+
+ // Some widgets also need their allocation adjusted to account for extra space.
+ // Right now only scrollbar buttons have significant allocations.
+ GtkAllocation allocation;
+ gtk_widget_get_allocation(widget, &allocation);
+ allocation.x += m_paintRect.x;
+ allocation.y += m_paintRect.y;
+ gtk_widget_set_allocation(widget, &allocation);
+
+ gtk_paint_box(gtk_widget_get_style(widget), m_target, stateType, shadowType, &paintRect,
widget, detail, paintRect.x, paintRect.y, paintRect.width, paintRect.height);
}
diff --git a/Source/WebCore/platform/gtk/WidgetRenderingContext.h b/Source/WebCore/platform/gtk/WidgetRenderingContext.h
index e248f04..8639a98 100644
--- a/Source/WebCore/platform/gtk/WidgetRenderingContext.h
+++ b/Source/WebCore/platform/gtk/WidgetRenderingContext.h
@@ -25,7 +25,11 @@
#ifdef GTK_API_VERSION_2
#include "IntRect.h"
-#include "gtkdrawing.h"
+
+// Usually this is too expensive to have in headers, but GtkStateType GtkShadowType are
+// enums and cannot be forward declared. WidgetRenderingContext.h is currently only
+// included in RenderThemeGtk2.cpp and ScrollbarThemeGtk2.cpp.
+#include <gtk/gtk.h>
namespace WebCore {
@@ -37,7 +41,6 @@ public:
WidgetRenderingContext(GraphicsContext*, const IntRect&);
~WidgetRenderingContext();
- bool paintMozillaWidget(GtkThemeWidgetType, GtkWidgetState*, int flags, GtkTextDirection = GTK_TEXT_DIR_NONE);
void gtkPaintBox(const IntRect&, GtkWidget*, GtkStateType, GtkShadowType, const gchar*);
void gtkPaintFlatBox(const IntRect&, GtkWidget*, GtkStateType, GtkShadowType, const gchar*);
void gtkPaintFocus(const IntRect&, GtkWidget*, GtkStateType, const gchar*);
diff --git a/Source/WebCore/platform/gtk/gtk2drawing.c b/Source/WebCore/platform/gtk/gtk2drawing.c
deleted file mode 100644
index 3979b7f..0000000
--- a/Source/WebCore/platform/gtk/gtk2drawing.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Brian Ryner <bryner@brianryner.com> (Original Author)
- * Pierre Chanial <p_ch@verizon.net>
- * Michael Ventnor <m.ventnor@gmail.com>
- * Alp Toker <alp@nuanti.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- * This file contains painting functions for each of the gtk2 widgets.
- * Adapted from the gtkdrawing.c, and gtk+2.0 source.
- */
-
-#ifdef GTK_API_VERSION_2
-
-#undef GTK_DISABLE_DEPRECATED
-#undef GDK_DISABLE_DEPRECATED
-
-#include <gdk/gdkprivate.h>
-#include "gtkdrawing.h"
-#include "GtkVersioning.h"
-#include <math.h>
-#include <string.h>
-
-#define XTHICKNESS(style) (style->xthickness)
-#define YTHICKNESS(style) (style->ythickness)
-
-static GtkThemeParts *gParts = NULL;
-static style_prop_t style_prop_func;
-static gboolean is_initialized;
-
-void
-moz_gtk_use_theme_parts(GtkThemeParts* parts)
-{
- gParts = parts;
-}
-
-/* Because we have such an unconventional way of drawing widgets, signal to the GTK theme engine
- that they are drawing for Mozilla instead of a conventional GTK app so they can do any specific
- things they may want to do. */
-static void
-moz_gtk_set_widget_name(GtkWidget* widget)
-{
- gtk_widget_set_name(widget, "MozillaGtkWidget");
-}
-
-gint
-moz_gtk_enable_style_props(style_prop_t styleGetProp)
-{
- style_prop_func = styleGetProp;
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-ensure_window_widget()
-{
- if (!gParts->protoWindow) {
- gParts->protoWindow = gtk_window_new(GTK_WINDOW_POPUP);
-
- if (gParts->colormap)
- gtk_widget_set_colormap(gParts->protoWindow, gParts->colormap);
-
- gtk_widget_realize(gParts->protoWindow);
- moz_gtk_set_widget_name(gParts->protoWindow);
- }
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-setup_widget_prototype(GtkWidget* widget)
-{
- ensure_window_widget();
- if (!gParts->protoLayout) {
- gParts->protoLayout = gtk_fixed_new();
- gtk_container_add(GTK_CONTAINER(gParts->protoWindow), gParts->protoLayout);
- }
-
- gtk_container_add(GTK_CONTAINER(gParts->protoLayout), widget);
- gtk_widget_realize(widget);
- g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-ensure_scrollbar_widget()
-{
- if (!gParts->vertScrollbarWidget) {
- gParts->vertScrollbarWidget = gtk_vscrollbar_new(NULL);
- setup_widget_prototype(gParts->vertScrollbarWidget);
- }
- if (!gParts->horizScrollbarWidget) {
- gParts->horizScrollbarWidget = gtk_hscrollbar_new(NULL);
- setup_widget_prototype(gParts->horizScrollbarWidget);
- }
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-ensure_scrolled_window_widget()
-{
- if (!gParts->scrolledWindowWidget) {
- gParts->scrolledWindowWidget = gtk_scrolled_window_new(NULL, NULL);
- setup_widget_prototype(gParts->scrolledWindowWidget);
- }
- return MOZ_GTK_SUCCESS;
-}
-
-static GtkStateType
-ConvertGtkState(GtkWidgetState* state)
-{
- if (state->disabled)
- return GTK_STATE_INSENSITIVE;
- else if (state->depressed)
- return (state->inHover ? GTK_STATE_PRELIGHT : GTK_STATE_ACTIVE);
- else if (state->inHover)
- return (state->active ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT);
- else
- return GTK_STATE_NORMAL;
-}
-
-static gint
-TSOffsetStyleGCArray(GdkGC** gcs, gint xorigin, gint yorigin)
-{
- int i;
- /* there are 5 gc's in each array, for each of the widget states */
- for (i = 0; i < 5; ++i)
- gdk_gc_set_ts_origin(gcs[i], xorigin, yorigin);
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-TSOffsetStyleGCs(GtkStyle* style, gint xorigin, gint yorigin)
-{
- TSOffsetStyleGCArray(style->fg_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->bg_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->light_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->dark_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->mid_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->text_gc, xorigin, yorigin);
- TSOffsetStyleGCArray(style->base_gc, xorigin, yorigin);
- gdk_gc_set_ts_origin(style->black_gc, xorigin, yorigin);
- gdk_gc_set_ts_origin(style->white_gc, xorigin, yorigin);
- return MOZ_GTK_SUCCESS;
-}
-
-gint
-moz_gtk_init()
-{
- GtkWidgetClass *entry_class;
-
- is_initialized = TRUE;
-
- /* Add style property to GtkEntry.
- * Adding the style property to the normal GtkEntry class means that it
- * will work without issues inside GtkComboBox and for Spinbuttons. */
- entry_class = g_type_class_ref(GTK_TYPE_ENTRY);
- gtk_widget_class_install_style_property(entry_class,
- g_param_spec_boolean("honors-transparent-bg-hint",
- "Transparent BG enabling flag",
- "If TRUE, the theme is able to draw the GtkEntry on non-prefilled background.",
- FALSE,
- G_PARAM_READWRITE));
-
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-moz_gtk_scrolled_window_paint(GdkDrawable* drawable, GdkRectangle* rect,
- GdkRectangle* cliprect, GtkWidgetState* state)
-{
- GtkStyle* style;
- GtkAllocation allocation;
- GtkWidget* widget;
-
- ensure_scrolled_window_widget();
- widget = gParts->scrolledWindowWidget;
-
- gtk_widget_get_allocation(widget, &allocation);
- allocation.x = rect->x;
- allocation.y = rect->y;
- allocation.width = rect->width;
- allocation.height = rect->height;
- gtk_widget_set_allocation(widget, &allocation);
-
- style = gtk_widget_get_style(widget);
- TSOffsetStyleGCs(style, rect->x - 1, rect->y - 1);
- gtk_paint_shadow(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_IN,
- cliprect, gParts->scrolledWindowWidget, "scrolled_window",
- rect->x, rect->y, rect->width, rect->height);
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-moz_gtk_scrollbar_button_paint(GdkDrawable* drawable, GdkRectangle* rect,
- GdkRectangle* cliprect, GtkWidgetState* state,
- GtkScrollbarButtonFlags flags,
- GtkTextDirection direction)
-{
- GtkStateType state_type = ConvertGtkState(state);
- GtkShadowType shadow_type = (state->active) ?
- GTK_SHADOW_IN : GTK_SHADOW_OUT;
- GdkRectangle arrow_rect;
- GtkStyle* style;
- GtkWidget *scrollbar;
- GtkAllocation allocation;
- GtkArrowType arrow_type;
- gint arrow_displacement_x, arrow_displacement_y;
- const char* detail = (flags & MOZ_GTK_STEPPER_VERTICAL) ?
- "vscrollbar" : "hscrollbar";
-
- ensure_scrollbar_widget();
-
- if (flags & MOZ_GTK_STEPPER_VERTICAL)
- scrollbar = gParts->vertScrollbarWidget;
- else
- scrollbar = gParts->horizScrollbarWidget;
-
- gtk_widget_set_direction(scrollbar, direction);
-
- /* Some theme engines (i.e., ClearLooks) check the scrollbar's allocation
- to determine where it should paint rounded corners on the buttons.
- We need to trick them into drawing the buttons the way we want them. */
-
- gtk_widget_get_allocation(scrollbar, &allocation);
- allocation.x = rect->x;
- allocation.y = rect->y;
- allocation.width = rect->width;
- allocation.height = rect->height;
-
- if (flags & MOZ_GTK_STEPPER_VERTICAL) {
- allocation.height *= 5;
- if (flags & MOZ_GTK_STEPPER_DOWN) {
- arrow_type = GTK_ARROW_DOWN;
- if (flags & MOZ_GTK_STEPPER_BOTTOM)
- allocation.y -= 4 * rect->height;
- else
- allocation.y -= rect->height;
-
- } else {
- arrow_type = GTK_ARROW_UP;
- if (flags & MOZ_GTK_STEPPER_BOTTOM)
- allocation.y -= 3 * rect->height;
- }
- } else {
- allocation.width *= 5;
- if (flags & MOZ_GTK_STEPPER_DOWN) {
- arrow_type = GTK_ARROW_RIGHT;
- if (flags & MOZ_GTK_STEPPER_BOTTOM)
- allocation.x -= 4 * rect->width;
- else
- allocation.x -= rect->width;
- } else {
- arrow_type = GTK_ARROW_LEFT;
- if (flags & MOZ_GTK_STEPPER_BOTTOM)
- allocation.x -= 3 * rect->width;
- }
- }
-
- gtk_widget_set_allocation(scrollbar, &allocation);
- style = gtk_widget_get_style(scrollbar);
-
- TSOffsetStyleGCs(style, rect->x, rect->y);
-
- gtk_paint_box(style, drawable, state_type, shadow_type, cliprect,
- scrollbar, detail, rect->x, rect->y,
- rect->width, rect->height);
-
- arrow_rect.width = rect->width / 2;
- arrow_rect.height = rect->height / 2;
- arrow_rect.x = rect->x + (rect->width - arrow_rect.width) / 2;
- arrow_rect.y = rect->y + (rect->height - arrow_rect.height) / 2;
-
- if (state_type == GTK_STATE_ACTIVE) {
- gtk_widget_style_get(scrollbar,
- "arrow-displacement-x", &arrow_displacement_x,
- "arrow-displacement-y", &arrow_displacement_y,
- NULL);
-
- arrow_rect.x += arrow_displacement_x;
- arrow_rect.y += arrow_displacement_y;
- }
-
- gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
- scrollbar, detail, arrow_type, TRUE, arrow_rect.x,
- arrow_rect.y, arrow_rect.width, arrow_rect.height);
-
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-moz_gtk_scrollbar_trough_paint(GtkThemeWidgetType widget,
- GdkDrawable* drawable, GdkRectangle* rect,
- GdkRectangle* cliprect, GtkWidgetState* state,
- GtkTextDirection direction)
-{
- GtkStyle* style;
- GtkScrollbar *scrollbar;
-
- ensure_scrollbar_widget();
-
- if (widget == MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL)
- scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget);
- else
- scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget);
-
- gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
-
- style = gtk_widget_get_style(GTK_WIDGET(scrollbar));
-
- TSOffsetStyleGCs(style, rect->x, rect->y);
- gtk_paint_box(style, drawable, GTK_STATE_ACTIVE, GTK_SHADOW_IN, cliprect,
- GTK_WIDGET(scrollbar), "trough", rect->x, rect->y,
- rect->width, rect->height);
-
- if (state->focused) {
- gtk_paint_focus(style, drawable, GTK_STATE_ACTIVE, cliprect,
- GTK_WIDGET(scrollbar), "trough",
- rect->x, rect->y, rect->width, rect->height);
- }
-
- return MOZ_GTK_SUCCESS;
-}
-
-static gint
-moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget,
- GdkDrawable* drawable, GdkRectangle* rect,
- GdkRectangle* cliprect, GtkWidgetState* state,
- GtkTextDirection direction)
-{
- GtkStateType state_type = (state->inHover || state->active) ?
- GTK_STATE_PRELIGHT : GTK_STATE_NORMAL;
- GtkShadowType shadow_type = GTK_SHADOW_OUT;
- GtkStyle* style;
- GtkScrollbar *scrollbar;
- GtkAdjustment *adj;
- gboolean activate_slider;
-
- ensure_scrollbar_widget();
-
- if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL)
- scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget);
- else
- scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget);
-
- gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
-
- /* Make sure to set the scrollbar range before painting so that
- everything is drawn properly. At least the bluecurve (and
- maybe other) themes don't draw the top or bottom black line
- surrounding the scrollbar if the theme thinks that it's butted
- up against the scrollbar arrows. Note the increases of the
- clip rect below. */
- /* Changing the cliprect is pretty bogus. This lets themes draw
- outside the frame, which means we don't invalidate them
- correctly. See bug 297508. But some themes do seem to need
- it. So we modify the frame's overflow area to account for what
- we're doing here; see nsNativeThemeGTK::GetWidgetOverflow. */
- adj = gtk_range_get_adjustment(GTK_RANGE(scrollbar));
-
- if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) {
- cliprect->x -= 1;
- cliprect->width += 2;
- gtk_adjustment_set_page_size(adj, rect->width);
- }
- else {
- cliprect->y -= 1;
- cliprect->height += 2;
- gtk_adjustment_set_page_size(adj, rect->height);
- }
-
-#if GTK_CHECK_VERSION(2, 14, 0)
- gtk_adjustment_configure(adj,
- state->curpos,
- 0,
- state->maxpos,
- gtk_adjustment_get_step_increment(adj),
- gtk_adjustment_get_page_increment(adj),
- gtk_adjustment_get_page_size(adj));
-#else
- adj->lower = 0;
- adj->value = state->curpos;
- adj->upper = state->maxpos;
- gtk_adjustment_changed(adj);
-#endif
-
- style = gtk_widget_get_style(GTK_WIDGET(scrollbar));
-
- gtk_widget_style_get(GTK_WIDGET(scrollbar), "activate-slider",
- &activate_slider, NULL);
-
- if (activate_slider && state->active) {
- shadow_type = GTK_SHADOW_IN;
- state_type = GTK_STATE_ACTIVE;
- }
-
- TSOffsetStyleGCs(style, rect->x, rect->y);
-
- gtk_paint_slider(style, drawable, state_type, shadow_type, cliprect,
- GTK_WIDGET(scrollbar), "slider", rect->x, rect->y,
- rect->width, rect->height,
- (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ?
- GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
-
- return MOZ_GTK_SUCCESS;
-}
-
-gint
-moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- gint* right, gint* bottom, GtkTextDirection direction,
- gboolean inhtml)
-{
- GtkWidget* w;
- GtkStyle *style;
-
- switch (widget) {
- /* These widgets have no borders, since they are not containers. */
- case MOZ_GTK_SCROLLBAR_BUTTON:
- case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL:
- case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL:
- case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL:
- case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL:
- *left = *top = *right = *bottom = 0;
- return MOZ_GTK_SUCCESS;
- default:
- g_warning("Unsupported widget type: %d", widget);
- return MOZ_GTK_UNKNOWN_WIDGET;
- }
-
- style = gtk_widget_get_style(w);
- *right = *left = XTHICKNESS(style);
- *bottom = *top = YTHICKNESS(style);
-
- return MOZ_GTK_SUCCESS;
-}
-
-gint
-moz_gtk_get_scrollbar_metrics(MozGtkScrollbarMetrics *metrics)
-{
- ensure_scrollbar_widget();
-
- gtk_widget_style_get (gParts->horizScrollbarWidget,
- "slider_width", &metrics->slider_width,
- "trough_border", &metrics->trough_border,
- "stepper_size", &metrics->stepper_size,
- "stepper_spacing", &metrics->stepper_spacing,
- "trough_under_steppers", &metrics->trough_under_steppers,
- "has_secondary_forward_stepper", &metrics->has_secondary_forward_stepper,
- "has_secondary_backward_stepper", &metrics->has_secondary_backward_stepper,
- NULL);
-
- metrics->min_slider_size = gtk_range_get_min_slider_size(GTK_RANGE(gParts->horizScrollbarWidget));
-
- return MOZ_GTK_SUCCESS;
-}
-
-gint
-moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable,
- GdkRectangle* rect, GdkRectangle* cliprect,
- GtkWidgetState* state, gint flags,
- GtkTextDirection direction)
-{
- switch (widget) {
- case MOZ_GTK_SCROLLBAR_BUTTON:
- return moz_gtk_scrollbar_button_paint(drawable, rect, cliprect, state,
- (GtkScrollbarButtonFlags) flags,
- direction);
- break;
- case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL:
- case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL:
- return moz_gtk_scrollbar_trough_paint(widget, drawable, rect,
- cliprect, state, direction);
- break;
- case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL:
- case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL:
- return moz_gtk_scrollbar_thumb_paint(widget, drawable, rect,
- cliprect, state, direction);
- break;
- case MOZ_GTK_SCROLLED_WINDOW:
- return moz_gtk_scrolled_window_paint(drawable, rect, cliprect, state);
- break;
- default:
- g_warning("Unknown widget type: %d", widget);
- }
-
- return MOZ_GTK_UNKNOWN_WIDGET;
-}
-
-GtkWidget* moz_gtk_get_scrollbar_widget(void)
-{
- if (!is_initialized)
- return NULL;
- ensure_scrollbar_widget();
- return gParts->horizScrollbarWidget;
-}
-
-gint
-moz_gtk_shutdown()
-{
- GtkWidgetClass *entry_class;
- entry_class = g_type_class_peek(GTK_TYPE_ENTRY);
- g_type_class_unref(entry_class);
-
- is_initialized = FALSE;
-
- return MOZ_GTK_SUCCESS;
-}
-
-void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts)
-{
- if (!parts)
- return;
-
- if (parts->protoWindow) {
- gtk_widget_destroy(parts->protoWindow);
- parts->protoWindow = NULL;
- }
-}
-
-#endif // GTK_API_VERSION_2
diff --git a/Source/WebCore/platform/gtk/gtkdrawing.h b/Source/WebCore/platform/gtk/gtkdrawing.h
deleted file mode 100644
index cdb343c..0000000
--- a/Source/WebCore/platform/gtk/gtkdrawing.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Brian Ryner <bryner@brianryner.com> (Original Author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/**
- * gtkdrawing.h: GTK widget rendering utilities
- *
- * gtkdrawing provides an API for rendering GTK widgets in the
- * current theme to a pixmap or window, without requiring an actual
- * widget instantiation, similar to the Macintosh Appearance Manager
- * or Windows XP's DrawThemeBackground() API.
- */
-
-#ifndef _GTK_DRAWING_H_
-#define _GTK_DRAWING_H_
-
-#undef GTK_DISABLE_DEPRECATED
-
-#include <gtk/gtk.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*** type definitions ***/
-typedef struct {
- guint8 active;
- guint8 focused;
- guint8 inHover;
- guint8 disabled;
- guint8 isDefault;
- guint8 canDefault;
- /* The depressed state is for buttons which remain active for a longer period:
- * activated toggle buttons or buttons showing a popup menu. */
- guint8 depressed;
- gint32 curpos; /* curpos and maxpos are used for scrollbars */
- gint32 maxpos;
-} GtkWidgetState;
-
-typedef struct {
- gint slider_width;
- gint trough_border;
- gint stepper_size;
- gint stepper_spacing;
- gint min_slider_size;
- gboolean trough_under_steppers;
- gboolean has_secondary_forward_stepper;
- gboolean has_secondary_backward_stepper;
-} MozGtkScrollbarMetrics;
-
-typedef struct _GtkThemeParts {
- GdkColormap* colormap;
- GtkWidget* protoWindow;
- GtkWidget* protoLayout;
- GtkWidget* horizScrollbarWidget;
- GtkWidget* vertScrollbarWidget;
- GtkWidget* scrolledWindowWidget;
-} GtkThemeParts;
-
-typedef enum {
- MOZ_GTK_STEPPER_DOWN = 1 << 0,
- MOZ_GTK_STEPPER_BOTTOM = 1 << 1,
- MOZ_GTK_STEPPER_VERTICAL = 1 << 2
-} GtkScrollbarButtonFlags;
-
-/* function type for moz_gtk_enable_style_props */
-typedef gint (*style_prop_t)(GtkStyle*, const gchar*, gint);
-
-/*** result/error codes ***/
-#define MOZ_GTK_SUCCESS 0
-#define MOZ_GTK_UNKNOWN_WIDGET -1
-#define MOZ_GTK_UNSAFE_THEME -2
-
-/*** widget type constants ***/
-typedef enum {
- /* Paints a GtkButton. flags is a GtkReliefStyle. */
- MOZ_GTK_BUTTON,
- /**
- * Paints the button of a GtkScrollbar. flags is a GtkArrowType giving
- * the arrow direction.
- */
- MOZ_GTK_SCROLLBAR_BUTTON,
- /* Paints the trough (track) of a GtkScrollbar. */
- MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL,
- MOZ_GTK_SCROLLBAR_TRACK_VERTICAL,
- /* Paints the slider (thumb) of a GtkScrollbar. */
- MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL,
- MOZ_GTK_SCROLLBAR_THUMB_VERTICAL,
- /* Paints the background of a scrolled window */
- MOZ_GTK_SCROLLED_WINDOW,
-} GtkThemeWidgetType;
-
-/*** General library functions ***/
-/**
- * Initializes the drawing library. You must call this function
- * prior to using any other functionality.
- * returns: MOZ_GTK_SUCCESS if there were no errors
- * MOZ_GTK_UNSAFE_THEME if the current theme engine is known
- * to crash with gtkdrawing.
- */
-gint moz_gtk_init();
-
-/**
- * Instruct the drawing library to do all rendering based on
- * the given collection of theme parts. If any members of the
- * GtkThemeParts struct are NULL, they will be created lazily.
- */
-void
-moz_gtk_use_theme_parts(GtkThemeParts* parts);
-
-/**
- * Enable GTK+ 1.2.9+ theme enhancements. You must provide a pointer
- * to the GTK+ 1.2.9+ function "gtk_style_get_prop_experimental".
- * styleGetProp: pointer to gtk_style_get_prop_experimental
- *
- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
- */
-gint moz_gtk_enable_style_props(style_prop_t styleGetProp);
-
-/**
- * Perform cleanup of the drawing library. You should call this function
- * when your program exits, or you no longer need the library.
- *
- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
- */
-gint moz_gtk_shutdown();
-
-/**
- * Destroy the widgets in the given GtkThemeParts, which should
- * be destroyed before the GtkThemeParts can be freed.
- */
-void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts);
-
-/*** Widget drawing ***/
-/**
- * Paint a widget in the current theme.
- * widget: a constant giving the widget to paint
- * rect: the bounding rectangle for the widget
- * cliprect: a clipprect rectangle for this painting operation
- * state: the state of the widget. ignored for some widgets.
- * flags: widget-dependant flags; see the GtkThemeWidgetType definition.
- * direction: the text direction, to draw the widget correctly LTR and RTL.
- */
-gint
-moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable,
- GdkRectangle* rect, GdkRectangle* cliprect,
- GtkWidgetState* state, gint flags,
- GtkTextDirection direction);
-
-/*** Widget metrics ***/
-/**
- * Get the border size of a widget
- * left/right: [OUT] the widget's left/right border
- * top/bottom: [OUT] the widget's top/bottom border
- * direction: the text direction for the widget
- * inhtml: boolean indicating whether this widget will be drawn as a HTML form control,
- * in order to workaround a size issue (MOZ_GTK_BUTTON only, ignored otherwise)
- *
- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
- */
-gint moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- gint* right, gint* bottom, GtkTextDirection direction,
- gboolean inhtml);
-/**
- * Get the desired metrics for a GtkScrollbar
- * metrics: [IN] struct which will contain the metrics
- *
- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
- */
-gint
-moz_gtk_get_scrollbar_metrics(MozGtkScrollbarMetrics* metrics);
-
-/**
- * Retrieve an actual GTK scrollbar widget for style analysis. It will not
- * be modified.
- */
-GtkWidget* moz_gtk_get_scrollbar_widget(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/Source/WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp b/Source/WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp
index 685827e..3cfddf9 100644
--- a/Source/WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp
+++ b/Source/WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp
@@ -31,6 +31,8 @@
#include "PlatformString.h"
#include <MimeType.h>
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
#include <wtf/text/CString.h>
namespace WebCore {
@@ -62,6 +64,8 @@ static const ExtensionMap extensionMap[] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String& ext)
{
+ ASSERT(isMainThread());
+
String str = ext.lower();
// Try WebCore built-in types.
diff --git a/Source/WebCore/platform/image-decoders/ImageDecoder.cpp b/Source/WebCore/platform/image-decoders/ImageDecoder.cpp
index 17208b5..840ab98 100644
--- a/Source/WebCore/platform/image-decoders/ImageDecoder.cpp
+++ b/Source/WebCore/platform/image-decoders/ImageDecoder.cpp
@@ -38,7 +38,9 @@ using namespace std;
namespace WebCore {
-static unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const SharedBuffer& sharedBuffer, unsigned offset)
+namespace {
+
+unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const SharedBuffer& sharedBuffer, unsigned offset)
{
unsigned bytesExtracted = 0;
const char* moreData;
@@ -53,55 +55,77 @@ static unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const
return bytesExtracted;
}
+bool matchesGIFSignature(char* contents)
+{
+ return !memcmp(contents, "GIF8", 4);
+}
+
+bool matchesPNGSignature(char* contents)
+{
+ return !memcmp(contents, "\x89\x50\x4E\x47", 4);
+}
+
+bool matchesJPEGSignature(char* contents)
+{
+ return !memcmp(contents, "\xFF\xD8\xFF", 3);
+}
+
+#if USE(WEBP)
+bool matchesWebPSignature(char* contents)
+{
+ return !memcmp(contents, "RIFF", 4) && !memcmp(contents + 8, "WEBPVP", 6);
+}
+#endif
+
+bool matchesBMPSignature(char* contents)
+{
+ return !memcmp(contents, "BM", 2);
+}
+
+bool matchesICOSignature(char* contents)
+{
+ return !memcmp(contents, "\x00\x00\x01\x00", 4);
+}
+
+bool matchesCURSignature(char* contents)
+{
+ return !memcmp(contents, "\x00\x00\x02\x00", 4);
+}
+
+}
+
#if !OS(ANDROID)
// This method requires BMPImageDecoder, PNGImageDecoder, ICOImageDecoder and
// JPEGDecoder, which aren't used on Android, and which don't all compile.
// TODO: Find a better fix.
ImageDecoder* ImageDecoder::create(const SharedBuffer& data, ImageSource::AlphaOption alphaOption, ImageSource::GammaAndColorProfileOption gammaAndColorProfileOption)
{
- // We need at least 4 bytes to figure out what kind of image we're dealing
- // with.
- static const unsigned maxMarkerLength = 4;
- char contents[maxMarkerLength];
- unsigned length = copyFromSharedBuffer(contents, maxMarkerLength, data, 0);
- if (length < maxMarkerLength)
+ static const unsigned lengthOfLongestSignature = 14; // To wit: "RIFF????WEBPVP"
+ char contents[lengthOfLongestSignature];
+ unsigned length = copyFromSharedBuffer(contents, lengthOfLongestSignature, data, 0);
+ if (length < lengthOfLongestSignature)
return 0;
- // GIFs begin with GIF8(7 or 9).
- if (strncmp(contents, "GIF8", 4) == 0)
+ if (matchesGIFSignature(contents))
return new GIFImageDecoder(alphaOption, gammaAndColorProfileOption);
- // Test for PNG.
- if (!memcmp(contents, "\x89\x50\x4E\x47", 4))
+ if (matchesPNGSignature(contents))
return new PNGImageDecoder(alphaOption, gammaAndColorProfileOption);
- // JPEG
- if (!memcmp(contents, "\xFF\xD8\xFF", 3))
+ if (matchesJPEGSignature(contents))
return new JPEGImageDecoder(alphaOption, gammaAndColorProfileOption);
#if USE(WEBP)
- if (!memcmp(contents, "RIFF", 4)) {
- static const unsigned webpExtraMarker = 6;
- static const unsigned webpExtraMarkeroffset = 8;
- char header[webpExtraMarker];
- unsigned length = copyFromSharedBuffer(header, webpExtraMarker, data, webpExtraMarkeroffset);
- if (length >= webpExtraMarker) {
- if (!memcmp(header, "WEBPVP", webpExtraMarker))
- return new WEBPImageDecoder(alphaOption, gammaAndColorProfileOption);
- }
- }
+ if (matchesWebPSignature(contents))
+ return new WEBPImageDecoder(alphaOption, gammaAndColorProfileOption);
#endif
- // BMP
- if (strncmp(contents, "BM", 2) == 0)
+ if (matchesBMPSignature(contents))
return new BMPImageDecoder(alphaOption, gammaAndColorProfileOption);
- // ICOs always begin with a 2-byte 0 followed by a 2-byte 1.
- // CURs begin with 2-byte 0 followed by 2-byte 2.
- if (!memcmp(contents, "\x00\x00\x01\x00", 4) || !memcmp(contents, "\x00\x00\x02\x00", 4))
+ if (matchesICOSignature(contents) || matchesCURSignature(contents))
return new ICOImageDecoder(alphaOption, gammaAndColorProfileOption);
- // Give up. We don't know what the heck this is.
return 0;
}
#endif // !OS(ANDROID)
@@ -123,7 +147,7 @@ ImageFrame& ImageFrame::operator=(const ImageFrame& other)
return *this;
copyReferenceToBitmapData(other);
- setRect(other.rect());
+ setOriginalFrameRect(other.originalFrameRect());
setStatus(other.status());
setDuration(other.duration());
setDisposalMethod(other.disposalMethod());
@@ -131,7 +155,7 @@ ImageFrame& ImageFrame::operator=(const ImageFrame& other)
return *this;
}
-void ImageFrame::clear()
+void ImageFrame::clearPixelData()
{
m_backingStore.clear();
m_bytes = 0;
@@ -142,7 +166,7 @@ void ImageFrame::clear()
// later.
}
-void ImageFrame::zeroFill()
+void ImageFrame::zeroFillPixelData()
{
memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData));
m_hasAlpha = true;
@@ -176,8 +200,7 @@ bool ImageFrame::setSize(int newWidth, int newHeight)
m_bytes = m_backingStore.data();
m_size = IntSize(newWidth, newHeight);
- // Zero the image.
- zeroFill();
+ zeroFillPixelData();
return true;
}
diff --git a/Source/WebCore/platform/image-decoders/ImageDecoder.h b/Source/WebCore/platform/image-decoders/ImageDecoder.h
index c581ba1..e07f4f2 100644
--- a/Source/WebCore/platform/image-decoders/ImageDecoder.h
+++ b/Source/WebCore/platform/image-decoders/ImageDecoder.h
@@ -50,9 +50,8 @@ namespace WebCore {
// FIXME: Do we want better encapsulation?
typedef Vector<char> ColorProfile;
- // The ImageFrame object represents the decoded image data in RGBA32
- // format. This buffer is what all decoders write a single frame into.
- // Frames are then instantiated for drawing by being handed this buffer.
+ // ImageFrame represents the decoded image data. This buffer is what all
+ // decoders write a single frame into.
class ImageFrame {
public:
enum FrameStatus { FrameEmpty, FramePartial, FrameComplete };
@@ -80,19 +79,17 @@ namespace WebCore {
// create a new copy of the image data, only increase the ref count.
ImageFrame& operator=(const ImageFrame& other);
- // Deletes the pixel data entirely; used by ImageDecoder to save memory
- // when we no longer need to display a frame and only need its metadata.
- void clear();
+ // These do not touch other metadata, only the raw pixel data.
+ void clearPixelData();
+ void zeroFillPixelData();
- // Zeroes the pixel data in the buffer, setting it to fully-transparent.
- void zeroFill();
-
- // Creates a new copy of the image data in |other|, so the two images
- // can be modified independently. Returns whether the copy succeeded.
+ // Makes this frame have an independent copy of the provided image's
+ // pixel data, so that modifications in one frame are not reflected in
+ // the other. Returns whether the copy succeeded.
bool copyBitmapData(const ImageFrame&);
- // Creates a new reference to the image data in |other|. The two images
- // share a common backing store.
+ // Makes this frame reference the provided image's pixel data, so that
+ // modifications in one frame are reflected in the other.
void copyReferenceToBitmapData(const ImageFrame&);
// Copies the pixel data at [(startX, startY), (endX, startY)) to the
@@ -116,18 +113,17 @@ namespace WebCore {
#endif
// Allocates space for the pixel data. Must be called before any pixels
- // are written. Will return true on success, false if the memory
- // allocation fails. Calling this multiple times is undefined and may
- // leak memory.
+ // are written. Must only be called once. Returns whether allocation
+ // succeeded.
bool setSize(int newWidth, int newHeight);
- // To be used by ImageSource::createFrameAtIndex(). Returns a pointer
- // to the underlying native image data. This pointer will be owned by
- // the BitmapImage and freed in FrameData::clear().
+ // Returns a caller-owned pointer to the underlying native image data.
+ // (Actual use: This pointer will be owned by BitmapImage and freed in
+ // FrameData::clear()).
NativeImagePtr asNewNativeImage() const;
bool hasAlpha() const;
- const IntRect& rect() const { return m_rect; }
+ const IntRect& originalFrameRect() const { return m_originalFrameRect; }
FrameStatus status() const { return m_status; }
unsigned duration() const { return m_duration; }
FrameDisposalMethod disposalMethod() const { return m_disposalMethod; }
@@ -135,7 +131,7 @@ namespace WebCore {
void setHasAlpha(bool alpha);
void setColorProfile(const ColorProfile&);
- void setRect(const IntRect& r) { m_rect = r; }
+ void setOriginalFrameRect(const IntRect& r) { m_originalFrameRect = r; }
void setStatus(FrameStatus status);
void setDuration(unsigned duration) { m_duration = duration; }
void setDisposalMethod(FrameDisposalMethod method) { m_disposalMethod = method; }
@@ -184,7 +180,7 @@ namespace WebCore {
g = static_cast<unsigned>(g * alphaPercent);
b = static_cast<unsigned>(b * alphaPercent);
}
-#if PLATFORM(ANDROID)
+#if PLATFORM(SKIA)
*dest = SkPackARGB32(a, r, g, b);
#else
*dest = (a << 24 | r << 16 | g << 8 | b);
@@ -202,35 +198,26 @@ namespace WebCore {
#else
NativeBackingStore m_backingStore;
PixelData* m_bytes; // The memory is backed by m_backingStore.
- IntSize m_size; // The size of the buffer. This should be the
- // same as ImageDecoder::m_size.
- bool m_hasAlpha; // Whether or not any of the pixels in the buffer
- // have transparency.
+ IntSize m_size;
+ bool m_hasAlpha;
ColorProfile m_colorProfile;
#endif
- IntRect m_rect; // The rect of the original specified frame within
- // the overall buffer. This will always just be
- // the entire buffer except for GIF frames whose
- // original rect was smaller than the overall
- // image size.
- FrameStatus m_status; // Whether or not this frame is completely
- // finished decoding.
- unsigned m_duration; // The animation delay.
- FrameDisposalMethod m_disposalMethod; // What to do with this frame's data when
- // initializing the next frame.
- bool m_premultiplyAlpha; // Whether to premultiply alpha into R, G, B
- // channels; by default it's true.
+ IntRect m_originalFrameRect; // This will always just be the entire
+ // buffer except for GIF frames whose
+ // original rect was smaller than the
+ // overall image size.
+ FrameStatus m_status;
+ unsigned m_duration;
+ FrameDisposalMethod m_disposalMethod;
+ bool m_premultiplyAlpha;
};
- // The ImageDecoder class represents a base class for specific image format
- // decoders (e.g., GIF, JPG, PNG, ICO) to derive from. All decoders decode
- // into RGBA32 format and the base class manages the RGBA32 frame cache.
+ // ImageDecoder is a base for all format-specific decoders
+ // (e.g. JPEGImageDecoder). This base manages the ImageFrame cache.
//
- // ENABLE(IMAGE_DECODER_DOWN_SAMPLING) allows image decoders to write
- // directly to scaled output buffers by down sampling. Call
- // setMaxNumPixels() to specify the biggest size that decoded images can
- // have. Image decoders will deflate those images that are bigger than
- // m_maxNumPixels. (Not supported by all image decoders yet)
+ // ENABLE(IMAGE_DECODER_DOWN_SAMPLING) allows image decoders to downsample
+ // at decode time. Image decoders will downsample any images larger than
+ // |m_maxNumPixels|. FIXME: Not yet supported by all decoders.
class ImageDecoder {
WTF_MAKE_NONCOPYABLE(ImageDecoder); WTF_MAKE_FAST_ALLOCATED;
public:
@@ -241,19 +228,15 @@ namespace WebCore {
, m_sizeAvailable(false)
, m_maxNumPixels(-1)
, m_isAllDataReceived(false)
- , m_failed(false)
- {
- }
+ , m_failed(false) { }
- virtual ~ImageDecoder() {}
+ virtual ~ImageDecoder() { }
- // Factory function to create an ImageDecoder. Ports that subclass
- // ImageDecoder can provide their own implementation of this to avoid
- // needing to write a dedicated setData() implementation.
+ // Returns a caller-owned decoder of the appropriate type. Returns 0 if
+ // we can't sniff a supported type from the provided data (possibly
+ // because there isn't enough data yet).
static ImageDecoder* create(const SharedBuffer& data, ImageSource::AlphaOption, ImageSource::GammaAndColorProfileOption);
- // The the filename extension usually associated with an undecoded image
- // of this type.
virtual String filenameExtension() const = 0;
bool isAllDataReceived() const { return m_isAllDataReceived; }
@@ -266,41 +249,33 @@ namespace WebCore {
m_isAllDataReceived = allDataReceived;
}
- // Whether or not the size information has been decoded yet. This
- // default implementation just returns true if the size has been set and
- // we have not seen a failure. Decoders may want to override this to
- // lazily decode enough of the image to get the size.
+ // Lazily-decodes enough of the image to get the size (if possible).
+ // FIXME: Right now that has to be done by each subclass; factor the
+ // decode call out and use it here.
virtual bool isSizeAvailable()
{
- return !m_failed && m_sizeAvailable;
+ return !m_failed && m_sizeAvailable;
}
- // Returns the size of the image.
- virtual IntSize size() const
- {
- return m_size;
- }
+ virtual IntSize size() const { return m_size; }
IntSize scaledSize() const
{
return m_scaled ? IntSize(m_scaledColumns.size(), m_scaledRows.size()) : size();
}
- // Returns the size of frame |index|. This will only differ from size()
- // for formats where different frames are different sizes (namely ICO,
- // where each frame represents a different icon within the master file).
- // Notably, this does not return different sizes for different GIF
- // frames, since while these may be stored as smaller rectangles, during
- // decoding they are composited to create a full-size frame.
+ // This will only differ from size() for ICO (where each frame is a
+ // different icon) or other formats where different frames are different
+ // sizes. This does NOT differ from size() for GIF, since decoding GIFs
+ // composites any smaller frames against previous frames to create full-
+ // size frames.
virtual IntSize frameSizeAtIndex(size_t) const
{
return size();
}
- // Called by the image decoders to set their decoded size, this also
- // checks the size for validity. It will return true if the size was
- // set, or false if there is an error. On error, the m_failed flag will
- // be set and the caller should immediately stop decoding.
+ // Returns whether the size is legal (i.e. not going to result in
+ // overflow elsewhere). If not, marks decoding as failed.
virtual bool setSize(unsigned width, unsigned height)
{
if (isOverSize(width, height))
@@ -310,26 +285,19 @@ namespace WebCore {
return true;
}
- // The total number of frames for the image. Classes that support
- // multiple frames will scan the image data for the answer if they need
- // to (without necessarily decoding all of the individual frames).
+ // Lazily-decodes enough of the image to get the frame count (if
+ // possible), without decoding the individual frames.
+ // FIXME: Right now that has to be done by each subclass; factor the
+ // decode call out and use it here.
virtual size_t frameCount() { return 1; }
- // The number of repetitions to perform for an animation loop.
virtual int repetitionCount() const { return cAnimationNone; }
- // Called to obtain the ImageFrame full of decoded data for rendering.
- // The decoder plugin will decode as much of the frame as it can before
- // handing back the buffer.
+ // Decodes as much of the requested frame as possible, and returns an
+ // ImageDecoder-owned pointer.
virtual ImageFrame* frameBufferAtIndex(size_t) = 0;
- // Whether or not the underlying image format even supports alpha
- // transparency.
- virtual bool supportsAlpha() const { return true; }
-
void setIgnoreGammaAndColorProfile(bool flag) { m_ignoreGammaAndColorProfile = flag; }
-
- // Whether or not the gamma and color profile are applied.
bool ignoresGammaAndColorProfile() const { return m_ignoreGammaAndColorProfile; }
// Sets the "decode failure" flag. For caller convenience (since so
@@ -344,13 +312,10 @@ namespace WebCore {
bool failed() const { return m_failed; }
- // Wipe out frames in the frame buffer cache before |clearBeforeFrame|,
- // assuming this can be done without breaking decoding. Different
- // decoders place different restrictions on what frames are safe to
- // destroy, so this is left to them to implement.
- // For convenience's sake, we provide a default (empty) implementation,
- // since in practice only GIFs will ever use this.
- virtual void clearFrameBufferCache(size_t clearBeforeFrame) { }
+ // Clears decoded pixel data from before the provided frame unless that
+ // data may be needed to decode future frames (e.g. due to GIF frame
+ // compositing).
+ virtual void clearFrameBufferCache(size_t) { }
#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
void setMaxNumPixels(int m) { m_maxNumPixels = m; }
@@ -378,8 +343,6 @@ namespace WebCore {
// and return it as a (signed) int. Avoid overflow.
static bool isOverSize(unsigned width, unsigned height)
{
- // width * height must not exceed (2 ^ 29) - 1, so that we don't
- // overflow when we multiply by 4.
unsigned long long total_size = static_cast<unsigned long long>(width)
* static_cast<unsigned long long>(height);
return total_size > ((1 << 29) - 1);
diff --git a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp
index 1805bc7..5c00553 100644
--- a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp
+++ b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp
@@ -87,7 +87,7 @@ bool BMPImageReader::decodeBMP(bool onlySize)
m_buffer->setHasAlpha(false);
// For BMPs, the frame always fills the entire image.
- m_buffer->setRect(IntRect(IntPoint(), m_parent->size()));
+ m_buffer->setOriginalFrameRect(IntRect(IntPoint(), m_parent->size()));
if (!m_isTopDown)
m_coord.setY(m_parent->size().height() - 1);
@@ -707,7 +707,7 @@ BMPImageReader::ProcessingResult BMPImageReader::processNonRLEData(bool inRLE, i
} else {
m_seenNonZeroAlphaPixel = true;
if (m_seenZeroAlphaPixel) {
- m_buffer->zeroFill();
+ m_buffer->zeroFillPixelData();
m_seenZeroAlphaPixel = false;
} else if (alpha != 255)
m_buffer->setHasAlpha(true);
diff --git a/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp b/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
index 0b90107..43d6a52 100644
--- a/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
+++ b/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
@@ -72,7 +72,7 @@ bool ImageFrame::setSize(int newWidth, int newHeight)
m_bytes = reinterpret_cast<PixelData*>(CFDataGetMutableBytePtr(m_backingStore.get()));
m_size = IntSize(newWidth, newHeight);
- zeroFill();
+ zeroFillPixelData();
return true;
}
diff --git a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
index e6de597..7e334a9 100644
--- a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -174,14 +174,14 @@ void GIFImageDecoder::clearFrameBufferCache(size_t clearBeforeFrame)
Vector<ImageFrame>::iterator i(end);
for (; (i != m_frameBufferCache.begin()) && ((i->status() == ImageFrame::FrameEmpty) || (i->disposalMethod() == ImageFrame::DisposeOverwritePrevious)); --i) {
if ((i->status() == ImageFrame::FrameComplete) && (i != end))
- i->clear();
+ i->clearPixelData();
}
// Now |i| holds the last frame we need to preserve; clear prior frames.
for (Vector<ImageFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) {
ASSERT(j->status() != ImageFrame::FramePartial);
if (j->status() != ImageFrame::FrameEmpty)
- j->clear();
+ j->clearPixelData();
}
}
@@ -266,7 +266,7 @@ bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration,
if (!m_currentBufferSawAlpha) {
// The whole frame was non-transparent, so it's possible that the entire
// resulting buffer was non-transparent, and we can setHasAlpha(false).
- if (buffer.rect().contains(IntRect(IntPoint(), scaledSize())))
+ if (buffer.originalFrameRect().contains(IntRect(IntPoint(), scaledSize())))
buffer.setHasAlpha(false);
else if (frameIndex) {
// Tricky case. This frame does not have alpha only if everywhere
@@ -289,7 +289,7 @@ bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration,
// The only remaining case is a DisposeOverwriteBgcolor frame. If
// it had no alpha, and its rect is contained in the current frame's
// rect, we know the current frame has no alpha.
- if ((prevBuffer->disposalMethod() == ImageFrame::DisposeOverwriteBgcolor) && !prevBuffer->hasAlpha() && buffer.rect().contains(prevBuffer->rect()))
+ if ((prevBuffer->disposalMethod() == ImageFrame::DisposeOverwriteBgcolor) && !prevBuffer->hasAlpha() && buffer.originalFrameRect().contains(prevBuffer->originalFrameRect()))
buffer.setHasAlpha(false);
}
}
@@ -327,17 +327,17 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex)
IntRect frameRect(frameReader->x_offset, frameReader->y_offset, frameReader->width, frameReader->height);
// Make sure the frameRect doesn't extend outside the buffer.
- if (frameRect.right() > size().width())
+ if (frameRect.maxX() > size().width())
frameRect.setWidth(size().width() - frameReader->x_offset);
- if (frameRect.bottom() > size().height())
+ if (frameRect.maxY() > size().height())
frameRect.setHeight(size().height() - frameReader->y_offset);
ImageFrame* const buffer = &m_frameBufferCache[frameIndex];
int left = upperBoundScaledX(frameRect.x());
- int right = lowerBoundScaledX(frameRect.right(), left);
+ int right = lowerBoundScaledX(frameRect.maxX(), left);
int top = upperBoundScaledY(frameRect.y());
- int bottom = lowerBoundScaledY(frameRect.bottom(), top);
- buffer->setRect(IntRect(left, top, right - left, bottom - top));
+ int bottom = lowerBoundScaledY(frameRect.maxY(), top);
+ buffer->setOriginalFrameRect(IntRect(left, top, right - left, bottom - top));
if (!frameIndex) {
// This is the first frame, so we're not relying on any previous data.
@@ -367,7 +367,7 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex)
} else {
// We want to clear the previous frame to transparent, without
// affecting pixels in the image outside of the frame.
- const IntRect& prevRect = prevBuffer->rect();
+ const IntRect& prevRect = prevBuffer->originalFrameRect();
const IntSize& bufferSize = scaledSize();
if (!frameIndex || prevRect.contains(IntRect(IntPoint(), scaledSize()))) {
// Clearing the first frame, or a frame the size of the whole
@@ -378,8 +378,8 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex)
// Copy the whole previous buffer, then clear just its frame.
if (!buffer->copyBitmapData(*prevBuffer))
return setFailed();
- for (int y = prevRect.y(); y < prevRect.bottom(); ++y) {
- for (int x = prevRect.x(); x < prevRect.right(); ++x)
+ for (int y = prevRect.y(); y < prevRect.maxY(); ++y) {
+ for (int x = prevRect.x(); x < prevRect.maxX(); ++x)
buffer->setRGBA(x, y, 0, 0, 0, 0);
}
if ((prevRect.width() > 0) && (prevRect.height() > 0))
diff --git a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index a255c25..1434c65 100644
--- a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -222,6 +222,12 @@ public:
// jpeglib cannot convert these to rgb, but it can convert ycck
// to cmyk.
m_info.out_color_space = JCS_CMYK;
+
+ // Same as with grayscale images, we convert CMYK images to RGBA
+ // ones. When we keep the color profiles of these CMYK images,
+ // CoreGraphics will convert their colors again. So, we discard
+ // their color profiles to prevent color corruption.
+ m_decoder->setIgnoreGammaAndColorProfile(true);
break;
default:
return m_decoder->setFailed();
@@ -462,7 +468,7 @@ bool JPEGImageDecoder::outputScanlines()
buffer.setColorProfile(m_colorProfile);
// For JPEGs, the frame always fills the entire image.
- buffer.setRect(IntRect(IntPoint(), size()));
+ buffer.setOriginalFrameRect(IntRect(IntPoint(), size()));
}
jpeg_decompress_struct* info = m_reader->info();
diff --git a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
index 801f1ab..d095cbb 100644
--- a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
+++ b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
@@ -45,7 +45,6 @@ namespace WebCore {
virtual bool isSizeAvailable();
virtual bool setSize(unsigned width, unsigned height);
virtual ImageFrame* frameBufferAtIndex(size_t index);
- virtual bool supportsAlpha() const { return false; }
// CAUTION: setFailed() deletes |m_reader|. Be careful to avoid
// accessing deleted memory, especially when calling this from inside
// JPEGImageReader!
diff --git a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
index 755d704..8edfe36 100644
--- a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -341,7 +341,7 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex,
buffer.setColorProfile(m_colorProfile);
// For PNGs, the frame always fills the entire image.
- buffer.setRect(IntRect(IntPoint(), size()));
+ buffer.setOriginalFrameRect(IntRect(IntPoint(), size()));
if (m_reader->pngPtr()->interlaced)
m_reader->createInterlaceBuffer((m_reader->hasAlpha() ? 4 : 3) * size().width() * size().height());
diff --git a/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp b/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp
index 81c22cf..a3cfbf6 100644
--- a/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp
+++ b/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp
@@ -50,14 +50,14 @@ ImageFrame& ImageFrame::operator=(const ImageFrame& other)
return *this;
copyBitmapData(other);
- setRect(other.rect());
+ setOriginalFrameRect(other.originalFrameRect());
setStatus(other.status());
setDuration(other.duration());
setDisposalMethod(other.disposalMethod());
return *this;
}
-void ImageFrame::clear()
+void ImageFrame::clearPixelData()
{
m_pixmap = QPixmap();
m_image = QImage();
@@ -68,7 +68,7 @@ void ImageFrame::clear()
// other metadata out of this frame later.
}
-void ImageFrame::zeroFill()
+void ImageFrame::zeroFillPixelData()
{
if (m_pixmap.isNull() && !m_image.isNull()) {
m_pixmap = QPixmap(m_image.width(), m_image.height());
@@ -101,8 +101,7 @@ bool ImageFrame::setSize(int newWidth, int newHeight)
if (m_pixmap.isNull())
return false;
- // Zero the image.
- zeroFill();
+ zeroFillPixelData();
return true;
}
diff --git a/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp b/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp
index a1c8261..c7dcc7a 100644
--- a/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp
+++ b/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp
@@ -51,7 +51,7 @@ ImageFrame& ImageFrame::operator=(const ImageFrame& other)
// Keep the pixels locked since we will be writing directly into the
// bitmap throughout this object's lifetime.
m_bitmap.lockPixels();
- setRect(other.rect());
+ setOriginalFrameRect(other.originalFrameRect());
setStatus(other.status());
setDuration(other.duration());
setDisposalMethod(other.disposalMethod());
@@ -59,7 +59,7 @@ ImageFrame& ImageFrame::operator=(const ImageFrame& other)
return *this;
}
-void ImageFrame::clear()
+void ImageFrame::clearPixelData()
{
m_bitmap.reset();
m_status = FrameEmpty;
@@ -69,7 +69,7 @@ void ImageFrame::clear()
// other metadata out of this frame later.
}
-void ImageFrame::zeroFill()
+void ImageFrame::zeroFillPixelData()
{
m_bitmap.eraseARGB(0, 0, 0, 0);
}
@@ -93,8 +93,7 @@ bool ImageFrame::setSize(int newWidth, int newHeight)
if (!m_bitmap.allocPixels())
return false;
- // Zero the image.
- zeroFill();
+ zeroFillPixelData();
return true;
}
diff --git a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
index 8045ada..3db00f6 100644
--- a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
+++ b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
@@ -116,7 +116,7 @@ bool WEBPImageDecoder::decode(bool onlySize)
}
buffer.setStatus(ImageFrame::FrameComplete);
buffer.setHasAlpha(false);
- buffer.setRect(IntRect(IntPoint(), size()));
+ buffer.setOriginalFrameRect(IntRect(IntPoint(), size()));
return true;
}
diff --git a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
index cde1bbf..c32e047 100644
--- a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
+++ b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
@@ -42,7 +42,6 @@ public:
virtual String filenameExtension() const { return "vp8"; }
virtual bool isSizeAvailable();
virtual ImageFrame* frameBufferAtIndex(size_t index);
- virtual bool supportsAlpha() const { return false; }
private:
// Returns false in case of decoding failure.
diff --git a/Source/WebCore/platform/mac/DragImageMac.mm b/Source/WebCore/platform/mac/DragImageMac.mm
index f444b6e..fc58173 100644
--- a/Source/WebCore/platform/mac/DragImageMac.mm
+++ b/Source/WebCore/platform/mac/DragImageMac.mm
@@ -28,9 +28,16 @@
#if ENABLE(DRAG_SUPPORT)
#import "CachedImage.h"
+#import "Font.h"
+#import "FontDescription.h"
+#import "FontSelector.h"
+#import "GraphicsContext.h"
#import "Image.h"
#import "KURL.h"
#import "ResourceResponse.h"
+#import "Settings.h"
+#import "StringTruncator.h"
+#import "TextRun.h"
namespace WebCore {
@@ -98,7 +105,210 @@ RetainPtr<NSImage> createDragImageIconForCachedImage(CachedImage* image)
return [[NSWorkspace sharedWorkspace] iconForFileType:extension];
}
+
+
+const float DragLabelBorderX = 4;
+//Keep border_y in synch with DragController::LinkDragBorderInset
+const float DragLabelBorderY = 2;
+const float DragLabelRadius = 5;
+const float LabelBorderYOffset = 2;
+
+const float MinDragLabelWidthBeforeClip = 120;
+const float MaxDragLabelWidth = 320;
+
+const float DragLinkLabelFontsize = 11;
+const float DragLinkUrlFontSize = 10;
+
+// FIXME - we should move all the functionality of NSString extras to WebCore
+
+static Font& fontFromNSFont(NSFont *font)
+{
+ static NSFont *currentFont;
+ DEFINE_STATIC_LOCAL(Font, currentRenderer, ());
+
+ if ([font isEqual:currentFont])
+ return currentRenderer;
+ if (currentFont)
+ CFRelease(currentFont);
+ currentFont = font;
+ CFRetain(currentFont);
+ FontPlatformData f(font, [font pointSize]);
+ currentRenderer = Font(f, ![[NSGraphicsContext currentContext] isDrawingToScreen]);
+ return currentRenderer;
+}
+
+static bool canUseFastRenderer(const UniChar* buffer, unsigned length)
+{
+ unsigned i;
+ for (i = 0; i < length; i++) {
+ UCharDirection direction = u_charDirection(buffer[i]);
+ if (direction == U_RIGHT_TO_LEFT || direction > U_OTHER_NEUTRAL)
+ return false;
+ }
+ return true;
+}
+
+static float widthWithFont(NSString *string, NSFont *font)
+{
+ unsigned length = [string length];
+ Vector<UniChar, 2048> buffer(length);
+ [string getCharacters:buffer.data()];
+
+ if (canUseFastRenderer(buffer.data(), length)) {
+ Font webCoreFont(FontPlatformData(font, [font pointSize]), ![[NSGraphicsContext currentContext] isDrawingToScreen]);
+ TextRun run(buffer.data(), length);
+ run.disableRoundingHacks();
+ return webCoreFont.floatWidth(run);
+ }
+
+ return [string sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil]].width;
+}
+
+static inline CGFloat webkit_CGCeiling(CGFloat value)
+{
+ if (sizeof(value) == sizeof(float))
+ return ceilf(value);
+ return static_cast<CGFloat>(ceil(value));
+}
+
+static void drawAtPoint(NSString *string, NSPoint point, NSFont *font, NSColor *textColor)
+{
+ unsigned length = [string length];
+ Vector<UniChar, 2048> buffer(length);
+
+ [string getCharacters:buffer.data()];
+
+ if (canUseFastRenderer(buffer.data(), length)) {
+ // The following is a half-assed attempt to match AppKit's rounding rules for drawAtPoint.
+ // It's probably incorrect for high DPI.
+ // If you change this, be sure to test all the text drawn this way in Safari, including
+ // the status bar, bookmarks bar, tab bar, and activity window.
+ point.y = webkit_CGCeiling(point.y);
+
+ NSGraphicsContext *nsContext = [NSGraphicsContext currentContext];
+ CGContextRef cgContext = static_cast<CGContextRef>([nsContext graphicsPort]);
+ GraphicsContext graphicsContext(cgContext);
+
+ // Safari doesn't flip the NSGraphicsContext before calling WebKit, yet WebCore requires a flipped graphics context.
+ BOOL flipped = [nsContext isFlipped];
+ if (!flipped)
+ CGContextScaleCTM(cgContext, 1, -1);
+
+ Font webCoreFont(FontPlatformData(font, [font pointSize]), ![nsContext isDrawingToScreen], Antialiased);
+ TextRun run(buffer.data(), length);
+ run.disableRoundingHacks();
+
+ CGFloat red;
+ CGFloat green;
+ CGFloat blue;
+ CGFloat alpha;
+ [[textColor colorUsingColorSpaceName:NSDeviceRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha];
+ graphicsContext.setFillColor(makeRGBA(red * 255, green * 255, blue * 255, alpha * 255), ColorSpaceDeviceRGB);
+
+ webCoreFont.drawText(&graphicsContext, run, FloatPoint(point.x, (flipped ? point.y : (-1 * point.y))));
+
+ if (!flipped)
+ CGContextScaleCTM(cgContext, 1, -1);
+ } else {
+ // The given point is on the baseline.
+ if ([[NSView focusView] isFlipped])
+ point.y -= [font ascender];
+ else
+ point.y += [font descender];
+
+ [string drawAtPoint:point withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, textColor, NSForegroundColorAttributeName, nil]];
+ }
+}
+
+static void drawDoubledAtPoint(NSString *string, NSPoint textPoint, NSColor *topColor, NSColor *bottomColor, NSFont *font)
+{
+ // turn off font smoothing so translucent text draws correctly (Radar 3118455)
+ drawAtPoint(string, textPoint, font, bottomColor);
+
+ textPoint.y += 1;
+ drawAtPoint(string, textPoint, font, topColor);
+}
+
+DragImageRef createDragImageForLink(KURL& url, const String& title, Frame* frame)
+{
+ if (!frame)
+ return nil;
+ NSString *label = 0;
+ if (!title.isEmpty())
+ label = title;
+ NSURL *cocoaURL = url;
+ NSString *urlString = [cocoaURL absoluteString];
+
+ BOOL drawURLString = YES;
+ BOOL clipURLString = NO;
+ BOOL clipLabelString = NO;
+
+ if (!label) {
+ drawURLString = NO;
+ label = urlString;
+ }
+
+ NSFont *labelFont = [[NSFontManager sharedFontManager] convertFont:[NSFont systemFontOfSize:DragLinkLabelFontsize]
+ toHaveTrait:NSBoldFontMask];
+ NSFont *urlFont = [NSFont systemFontOfSize:DragLinkUrlFontSize];
+ NSSize labelSize;
+ labelSize.width = widthWithFont(label, labelFont);
+ labelSize.height = [labelFont ascender] - [labelFont descender];
+ if (labelSize.width > MaxDragLabelWidth){
+ labelSize.width = MaxDragLabelWidth;
+ clipLabelString = YES;
+ }
+
+ NSSize imageSize;
+ imageSize.width = labelSize.width + DragLabelBorderX * 2;
+ imageSize.height = labelSize.height + DragLabelBorderY * 2;
+ if (drawURLString) {
+ NSSize urlStringSize;
+ urlStringSize.width = widthWithFont(urlString, urlFont);
+ urlStringSize.height = [urlFont ascender] - [urlFont descender];
+ imageSize.height += urlStringSize.height;
+ if (urlStringSize.width > MaxDragLabelWidth) {
+ imageSize.width = std::max(MaxDragLabelWidth + DragLabelBorderY * 2, MinDragLabelWidthBeforeClip);
+ clipURLString = YES;
+ } else
+ imageSize.width = std::max(labelSize.width + DragLabelBorderX * 2, urlStringSize.width + DragLabelBorderX * 2);
+ }
+ NSImage *dragImage = [[[NSImage alloc] initWithSize: imageSize] autorelease];
+ [dragImage lockFocus];
+
+ [[NSColor colorWithDeviceRed: 0.7f green: 0.7f blue: 0.7f alpha: 0.8f] set];
+
+ // Drag a rectangle with rounded corners
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path appendBezierPathWithOvalInRect: NSMakeRect(0, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
+ [path appendBezierPathWithOvalInRect: NSMakeRect(0, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
+ [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
+ [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
+
+ [path appendBezierPathWithRect: NSMakeRect(DragLabelRadius, 0, imageSize.width - DragLabelRadius * 2, imageSize.height)];
+ [path appendBezierPathWithRect: NSMakeRect(0, DragLabelRadius, DragLabelRadius + 10, imageSize.height - 2 * DragLabelRadius)];
+ [path appendBezierPathWithRect: NSMakeRect(imageSize.width - DragLabelRadius - 20, DragLabelRadius, DragLabelRadius + 20, imageSize.height - 2 * DragLabelRadius)];
+ [path fill];
+
+ NSColor *topColor = [NSColor colorWithDeviceWhite:0.0f alpha:0.75f];
+ NSColor *bottomColor = [NSColor colorWithDeviceWhite:1.0f alpha:0.5f];
+ if (drawURLString) {
+ if (clipURLString)
+ urlString = StringTruncator::centerTruncate(urlString, imageSize.width - (DragLabelBorderX * 2), fontFromNSFont(urlFont));
+
+ drawDoubledAtPoint(urlString, NSMakePoint(DragLabelBorderX, DragLabelBorderY - [urlFont descender]), topColor, bottomColor, urlFont);
+ }
+
+ if (clipLabelString)
+ label = StringTruncator::rightTruncate(label, imageSize.width - (DragLabelBorderX * 2), fontFromNSFont(labelFont));
+ drawDoubledAtPoint(label, NSMakePoint(DragLabelBorderX, imageSize.height - LabelBorderYOffset - [labelFont pointSize]), topColor, bottomColor, labelFont);
+
+ [dragImage unlockFocus];
+
+ return dragImage;
+}
+
} // namespace WebCore
#endif // ENABLE(DRAG_SUPPORT)
diff --git a/Source/WebCore/platform/mac/EmptyProtocolDefinitions.h b/Source/WebCore/platform/mac/EmptyProtocolDefinitions.h
index b73177b..04bf236 100644
--- a/Source/WebCore/platform/mac/EmptyProtocolDefinitions.h
+++ b/Source/WebCore/platform/mac/EmptyProtocolDefinitions.h
@@ -23,6 +23,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#ifndef EmptyProtocolDefinitions_h
+#define EmptyProtocolDefinitions_h
+
#if defined(__OBJC__)
#define EMPTY_PROTOCOL(NAME) \
@@ -47,3 +50,5 @@ EMPTY_PROTOCOL(NSURLDownloadDelegate)
#undef EMPTY_PROTOCOL
#endif /* defined(__OBJC__) */
+
+#endif /* EmptyProtocolDefinitions_h */
diff --git a/Source/WebCore/platform/mac/FileSystemMac.mm b/Source/WebCore/platform/mac/FileSystemMac.mm
index 0df3c89..bbeb76a 100644
--- a/Source/WebCore/platform/mac/FileSystemMac.mm
+++ b/Source/WebCore/platform/mac/FileSystemMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -25,10 +25,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
#import "config.h"
#import "FileSystem.h"
#import "PlatformString.h"
+#import <wtf/RetainPtr.h>
#import <wtf/text/CString.h>
namespace WebCore {
@@ -62,4 +64,25 @@ CString openTemporaryFile(const char* prefix, PlatformFileHandle& platformFileHa
return CString(temporaryFilePath.data());
}
+bool canExcludeFromBackup()
+{
+#ifdef BUILDING_ON_TIGER
+ return false;
+#else
+ return true;
+#endif
+}
+
+bool excludeFromBackup(const String& path)
+{
+#ifdef BUILDING_ON_TIGER
+ UNUSED_PARAM(path);
+ return false;
+#else
+ // It is critical to pass FALSE for excludeByPath because excluding by path requires root privileges.
+ CSBackupSetItemExcluded(pathAsURL(path).get(), TRUE, FALSE);
+ return true;
+#endif
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/mac/MIMETypeRegistryMac.mm b/Source/WebCore/platform/mac/MIMETypeRegistryMac.mm
index 82348e0..3792b5a 100644
--- a/Source/WebCore/platform/mac/MIMETypeRegistryMac.mm
+++ b/Source/WebCore/platform/mac/MIMETypeRegistryMac.mm
@@ -28,12 +28,15 @@
#include "MIMETypeRegistry.h"
#include "WebCoreSystemInterface.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
namespace WebCore
{
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
return wkGetMIMETypeForExtension(ext);
}
diff --git a/Source/WebCore/platform/mac/PasteboardMac.mm b/Source/WebCore/platform/mac/PasteboardMac.mm
index 71e4046..65180a0 100644
--- a/Source/WebCore/platform/mac/PasteboardMac.mm
+++ b/Source/WebCore/platform/mac/PasteboardMac.mm
@@ -27,7 +27,6 @@
#import "Pasteboard.h"
#import "CachedResource.h"
-#import "CharacterNames.h"
#import "DOMRangeInternal.h"
#import "Document.h"
#import "DocumentFragment.h"
@@ -49,10 +48,10 @@
#import "Text.h"
#import "WebCoreNSStringExtras.h"
#import "markup.h"
-
#import <wtf/StdLibExtras.h>
#import <wtf/RetainPtr.h>
#import <wtf/UnusedParam.h>
+#import <wtf/unicode/CharacterNames.h>
@interface NSAttributedString (AppKitSecretsIKnowAbout)
- (id)_initWithDOMRange:(DOMRange *)domRange;
diff --git a/Source/WebCore/platform/mac/PopupMenuMac.mm b/Source/WebCore/platform/mac/PopupMenuMac.mm
index 1bf500b..e69bcb2 100644
--- a/Source/WebCore/platform/mac/PopupMenuMac.mm
+++ b/Source/WebCore/platform/mac/PopupMenuMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2008, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
*
* This library is free software; you can redistribute it and/or
@@ -75,6 +75,11 @@ void PopupMenuMac::populate()
if (!client()->shouldPopOver())
[m_popup.get() addItemWithTitle:@""];
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+ TextDirection menuTextDirection = client()->menuStyle().textDirection();
+ [m_popup.get() setUserInterfaceLayoutDirection:menuTextDirection == LTR ? NSUserInterfaceLayoutDirectionLeftToRight : NSUserInterfaceLayoutDirectionRightToLeft];
+#endif // !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+
ASSERT(client());
int size = client()->listSize();
@@ -92,13 +97,27 @@ void PopupMenuMac::populate()
}
[attributes setObject:font forKey:NSFontAttributeName];
}
+
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+ RetainPtr<NSMutableParagraphStyle> paragraphStyle(AdoptNS, [[NSParagraphStyle defaultParagraphStyle] mutableCopy]);
+ [paragraphStyle.get() setAlignment:menuTextDirection == LTR ? NSLeftTextAlignment : NSRightTextAlignment];
+ NSWritingDirection writingDirection = style.textDirection() == LTR ? NSWritingDirectionLeftToRight : NSWritingDirectionRightToLeft;
+ [paragraphStyle.get() setBaseWritingDirection:writingDirection];
+ if (style.hasTextDirectionOverride()) {
+ RetainPtr<NSNumber> writingDirectionValue(AdoptNS, [[NSNumber alloc] initWithInteger:writingDirection + NSTextWritingDirectionOverride]);
+ RetainPtr<NSArray> writingDirectionArray(AdoptNS, [[NSArray alloc] initWithObjects:writingDirectionValue.get(), nil]);
+ [attributes setObject:writingDirectionArray.get() forKey:NSWritingDirectionAttributeName];
+ }
+ [attributes setObject:paragraphStyle.get() forKey:NSParagraphStyleAttributeName];
+#endif // !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+
// FIXME: Add support for styling the foreground and background colors.
// FIXME: Find a way to customize text color when an item is highlighted.
- NSAttributedString* string = [[NSAttributedString alloc] initWithString:client()->itemText(i) attributes:attributes];
+ NSAttributedString *string = [[NSAttributedString alloc] initWithString:client()->itemText(i) attributes:attributes];
[attributes release];
[m_popup.get() addItemWithTitle:@""];
- NSMenuItem* menuItem = [m_popup.get() lastItem];
+ NSMenuItem *menuItem = [m_popup.get() lastItem];
[menuItem setAttributedTitle:string];
[menuItem setEnabled:client()->itemIsEnabled(i)];
[menuItem setToolTip:client()->itemToolTip(i)];
diff --git a/Source/WebCore/platform/mac/ScrollAnimatorMac.h b/Source/WebCore/platform/mac/ScrollAnimatorMac.h
index f05db40..3f7612a 100644
--- a/Source/WebCore/platform/mac/ScrollAnimatorMac.h
+++ b/Source/WebCore/platform/mac/ScrollAnimatorMac.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -28,17 +28,30 @@
#if ENABLE(SMOOTH_SCROLLING)
+#include "FloatPoint.h"
+#include "FloatSize.h"
+#include "HeaderDetection.h"
#include "ScrollAnimator.h"
+#include "Timer.h"
+#include "WebCoreSystemInterface.h"
#include <wtf/RetainPtr.h>
#ifdef __OBJC__
@class ScrollAnimationHelperDelegate;
+@class ScrollbarPainterDelegate;
+@class ScrollbarPainterControllerDelegate;
+@class ScrollbarPainterDelegate;
#else
class ScrollAnimationHelperDelegate;
+class ScrollbarPainterDelegate;
+class ScrollbarPainterControllerDelegate;
+class ScrollbarPainterDelegate;
#endif
namespace WebCore {
+class Scrollbar;
+
class ScrollAnimatorMac : public ScrollAnimator {
public:
ScrollAnimatorMac(ScrollableArea*);
@@ -47,12 +60,72 @@ public:
virtual bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier);
virtual void scrollToOffsetWithoutAnimation(const FloatPoint&);
- // Called by the ScrollAnimationHelperDelegate.
- void immediateScrollToPoint(const FloatPoint& newPosition);
+#if ENABLE(RUBBER_BANDING)
+ virtual void handleWheelEvent(PlatformWheelEvent&);
+#if ENABLE(GESTURE_EVENTS)
+ virtual void handleGestureEvent(const PlatformGestureEvent&);
+#endif
+#endif
+ void immediateScrollToPoint(const FloatPoint& newPosition);
+ void immediateScrollByDeltaX(float deltaX);
+ void immediateScrollByDeltaY(float deltaY);
+
private:
RetainPtr<id> m_scrollAnimationHelper;
RetainPtr<ScrollAnimationHelperDelegate> m_scrollAnimationHelperDelegate;
+
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ RetainPtr<WKScrollbarPainterControllerRef> m_scrollbarPainterController;
+ RetainPtr<ScrollbarPainterControllerDelegate> m_scrollbarPainterControllerDelegate;
+ RetainPtr<id> m_scrollbarPainterDelegate;
+#endif
+
+ virtual void notityPositionChanged();
+ virtual void contentAreaWillPaint() const;
+ virtual void mouseEnteredContentArea() const;
+ virtual void mouseExitedContentArea() const;
+ virtual void mouseMovedInContentArea() const;
+ virtual void willStartLiveResize();
+ virtual void contentsResized() const;
+ virtual void willEndLiveResize();
+ virtual void contentAreaDidShow() const;
+ virtual void contentAreaDidHide() const;
+
+ virtual void didAddVerticalScrollbar(Scrollbar*);
+ virtual void willRemoveVerticalScrollbar(Scrollbar*);
+ virtual void didAddHorizontalScrollbar(Scrollbar*);
+ virtual void willRemoveHorizontalScrollbar(Scrollbar*);
+
+ float adjustScrollXPositionIfNecessary(float) const;
+ float adjustScrollYPositionIfNecessary(float) const;
+ FloatPoint adjustScrollPositionIfNecessary(const FloatPoint&) const;
+
+#if ENABLE(RUBBER_BANDING)
+ bool allowsVerticalStretching() const;
+ bool allowsHorizontalStretching() const;
+ bool pinnedInDirection(float deltaX, float deltaY);
+ void snapRubberBand();
+ void snapRubberBandTimerFired(Timer<ScrollAnimatorMac>*);
+ void smoothScrollWithEvent(PlatformWheelEvent&);
+ void beginScrollGesture();
+ void endScrollGesture();
+
+ bool m_inScrollGesture;
+ bool m_momentumScrollInProgress;
+ bool m_ignoreMomentumScrolls;
+ CFTimeInterval m_lastMomemtumScrollTimestamp;
+ FloatSize m_overflowScrollDelta;
+ FloatSize m_stretchScrollForce;
+ FloatSize m_momentumVelocity;
+
+ // Rubber band state.
+ CFTimeInterval m_startTime;
+ FloatSize m_startStretch;
+ FloatPoint m_origOrigin;
+ FloatSize m_origVelocity;
+ Timer<ScrollAnimatorMac> m_snapRubberBandTimer;
+#endif
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/mac/ScrollAnimatorMac.mm b/Source/WebCore/platform/mac/ScrollAnimatorMac.mm
index 59b333b..c1154d5 100644
--- a/Source/WebCore/platform/mac/ScrollAnimatorMac.mm
+++ b/Source/WebCore/platform/mac/ScrollAnimatorMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,10 +30,20 @@
#include "ScrollAnimatorMac.h"
#include "FloatPoint.h"
+#include "IntRect.h"
+#include "PlatformGestureEvent.h"
+#include "PlatformWheelEvent.h"
+#include "ScrollView.h"
#include "ScrollableArea.h"
+#include "ScrollbarTheme.h"
+#include "ScrollbarThemeMac.h"
#include <wtf/PassOwnPtr.h>
+#include <wtf/UnusedParam.h>
-@interface NSObject (NSScrollAnimationHelperDetails)
+using namespace WebCore;
+using namespace std;
+
+@interface NSObject (ScrollAnimationHelperDetails)
- (id)initWithDelegate:(id)delegate;
- (void)_stopRun;
- (BOOL)_isAnimating;
@@ -44,18 +54,7 @@
{
WebCore::ScrollAnimatorMac* _animator;
}
-
- (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator;
-
-- (NSRect)bounds;
-- (void)_immediateScrollToPoint:(NSPoint)newPosition;
-- (NSSize)convertSizeToBase:(NSSize)size;
-- (NSSize)convertSizeFromBase:(NSSize)size;
-
-- (id)superview; // Return nil.
-- (id)documentView; // Return nil.
-- (id)window; // Return nil.
-- (void)_recursiveRecomputeToolTips; // No-op.
@end
static NSSize abs(NSSize size)
@@ -80,14 +79,24 @@ static NSSize abs(NSSize size)
return self;
}
+- (void)scrollAnimatorDestroyed
+{
+ _animator = 0;
+}
+
- (NSRect)bounds
{
+ if (!_animator)
+ return NSZeroRect;
+
WebCore::FloatPoint currentPosition = _animator->currentPosition();
return NSMakeRect(currentPosition.x(), currentPosition.y(), 0, 0);
}
- (void)_immediateScrollToPoint:(NSPoint)newPosition
{
+ if (!_animator)
+ return;
_animator->immediateScrollToPoint(newPosition);
}
@@ -101,6 +110,16 @@ static NSSize abs(NSSize size)
return abs(size);
}
+- (NSSize)convertSizeToBacking:(NSSize)size
+{
+ return abs(size);
+}
+
+- (NSSize)convertSizeFromBacking:(NSSize)size
+{
+ return abs(size);
+}
+
- (id)superview
{
return nil;
@@ -122,6 +141,307 @@ static NSSize abs(NSSize size)
@end
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+
+@interface ScrollbarPainterControllerDelegate : NSObject
+{
+ WebCore::ScrollAnimatorMac* _animator;
+}
+- (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator;
+@end
+
+@implementation ScrollbarPainterControllerDelegate
+
+- (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator
+{
+ self = [super init];
+ if (!self)
+ return nil;
+
+ _animator = scrollAnimator;
+ return self;
+}
+
+- (void)scrollAnimatorDestroyed
+{
+ _animator = 0;
+}
+
+- (NSRect)contentAreaRectForScrollerImpPair:(id)scrollerImpPair
+{
+ UNUSED_PARAM(scrollerImpPair);
+ if (!_animator)
+ return NSZeroRect;
+
+ WebCore::IntSize contentsSize = _animator->scrollableArea()->contentsSize();
+ return NSMakeRect(0, 0, contentsSize.width(), contentsSize.height());
+}
+
+- (BOOL)inLiveResizeForScrollerImpPair:(id)scrollerImpPair
+{
+ UNUSED_PARAM(scrollerImpPair);
+ if (!_animator)
+ return NO;
+
+ return _animator->scrollableArea()->inLiveResize();
+}
+
+- (NSPoint)mouseLocationInContentAreaForScrollerImpPair:(id)scrollerImpPair
+{
+ UNUSED_PARAM(scrollerImpPair);
+ if (!_animator)
+ return NSZeroPoint;
+
+ return _animator->scrollableArea()->currentMousePosition();
+}
+
+- (NSPoint)scrollerImpPair:(id)scrollerImpPair convertContentPoint:(NSPoint)pointInContentArea toScrollerImp:(id)scrollerImp
+{
+ UNUSED_PARAM(scrollerImpPair);
+ if (!_animator)
+ return NSZeroPoint;
+
+ WebCore::Scrollbar* scrollbar = 0;
+ if (wkScrollbarPainterIsHorizontal((WKScrollbarPainterRef)scrollerImp))
+ scrollbar = _animator->scrollableArea()->horizontalScrollbar();
+ else
+ scrollbar = _animator->scrollableArea()->verticalScrollbar();
+
+ // It is possible to have a null scrollbar here since it is possible for this delegate
+ // method to be called between the moment when a scrollbar has been set to 0 and the
+ // moment when its destructor has been called. We should probably de-couple some
+ // of the clean-up work in ScrollbarThemeMac::unregisterScrollbar() to avoid this
+ // issue.
+ if (!scrollbar)
+ return WebCore::IntPoint();
+
+ return scrollbar->convertFromContainingView(WebCore::IntPoint(pointInContentArea));
+}
+
+- (void)scrollerImpPair:(id)scrollerImpPair setContentAreaNeedsDisplayInRect:(NSRect)rect
+{
+ UNUSED_PARAM(scrollerImpPair);
+ UNUSED_PARAM(rect);
+}
+
+- (void)scrollerImpPair:(id)scrollerImpPair updateScrollerStyleForNewRecommendedScrollerStyle:(NSScrollerStyle)newRecommendedScrollerStyle
+{
+ if (!_animator)
+ return;
+
+ WKScrollbarPainterControllerRef painterController = (WKScrollbarPainterControllerRef)scrollerImpPair;
+ WebCore::ScrollbarThemeMac* macTheme = (WebCore::ScrollbarThemeMac*)WebCore::ScrollbarTheme::nativeTheme();
+
+ WKScrollbarPainterRef oldVerticalPainter = wkVerticalScrollbarPainterForController(painterController);
+ if (oldVerticalPainter) {
+ WebCore::Scrollbar* verticalScrollbar = _animator->scrollableArea()->verticalScrollbar();
+ WKScrollbarPainterRef newVerticalPainter = wkMakeScrollbarReplacementPainter(oldVerticalPainter,
+ newRecommendedScrollerStyle,
+ verticalScrollbar->controlSize(),
+ false);
+ macTheme->setNewPainterForScrollbar(verticalScrollbar, newVerticalPainter);
+ }
+
+ WKScrollbarPainterRef oldHorizontalPainter = wkHorizontalScrollbarPainterForController(painterController);
+ if (oldHorizontalPainter) {
+ WebCore::Scrollbar* horizontalScrollbar = _animator->scrollableArea()->horizontalScrollbar();
+ WKScrollbarPainterRef newHorizontalPainter = wkMakeScrollbarReplacementPainter(oldHorizontalPainter,
+ newRecommendedScrollerStyle,
+ horizontalScrollbar->controlSize(),
+ true);
+ macTheme->setNewPainterForScrollbar(horizontalScrollbar, newHorizontalPainter);
+ }
+
+ wkSetScrollbarPainterControllerStyle(painterController, newRecommendedScrollerStyle);
+}
+
+@end
+
+@interface ScrollbarPartAnimation : NSAnimation
+{
+ RetainPtr<WKScrollbarPainterRef> _scrollerPainter;
+ WebCore::ScrollbarPart _part;
+ WebCore::ScrollAnimatorMac* _animator;
+ CGFloat _initialAlpha;
+ CGFloat _newAlpha;
+}
+- (id)initWithScrollbarPainter:(WKScrollbarPainterRef)scrollerPainter part:(WebCore::ScrollbarPart)part scrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration;
+@end
+
+@implementation ScrollbarPartAnimation
+
+- (id)initWithScrollbarPainter:(WKScrollbarPainterRef)scrollerPainter part:(WebCore::ScrollbarPart)part scrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration
+{
+ self = [super initWithDuration:duration animationCurve:NSAnimationEaseInOut];
+ if (!self)
+ return nil;
+
+ _scrollerPainter = scrollerPainter;
+ _part = part;
+ _animator = scrollAnimator;
+ _initialAlpha = _part == WebCore::ThumbPart ? wkScrollbarPainterKnobAlpha(_scrollerPainter.get()) : wkScrollbarPainterTrackAlpha(_scrollerPainter.get());
+ _newAlpha = newAlpha;
+
+ return self;
+}
+
+- (void)setCurrentProgress:(NSAnimationProgress)progress
+{
+ [super setCurrentProgress:progress];
+
+ if (!_animator)
+ return;
+
+ CGFloat currentAlpha;
+ if (_initialAlpha > _newAlpha)
+ currentAlpha = 1 - progress;
+ else
+ currentAlpha = progress;
+
+ if (_part == WebCore::ThumbPart)
+ wkSetScrollbarPainterKnobAlpha(_scrollerPainter.get(), currentAlpha);
+ else
+ wkSetScrollbarPainterTrackAlpha(_scrollerPainter.get(), currentAlpha);
+
+ // Invalidate the scrollbars so that they paint the animation
+ if (WebCore::Scrollbar* verticalScrollbar = _animator->scrollableArea()->verticalScrollbar())
+ _animator->scrollableArea()->invalidateScrollbarRect(verticalScrollbar, WebCore::IntRect(0, 0, verticalScrollbar->width(), verticalScrollbar->height()));
+ if (WebCore::Scrollbar* horizontalScrollbar = _animator->scrollableArea()->horizontalScrollbar())
+ _animator->scrollableArea()->invalidateScrollbarRect(horizontalScrollbar, WebCore::IntRect(0, 0, horizontalScrollbar->width(), horizontalScrollbar->height()));
+}
+
+- (void)scrollAnimatorDestroyed
+{
+ [self stopAnimation];
+ _animator = 0;
+}
+
+@end
+
+@interface ScrollbarPainterDelegate : NSObject<NSAnimationDelegate>
+{
+ WebCore::ScrollAnimatorMac* _animator;
+
+ RetainPtr<ScrollbarPartAnimation> _verticalKnobAnimation;
+ RetainPtr<ScrollbarPartAnimation> _horizontalKnobAnimation;
+
+ RetainPtr<ScrollbarPartAnimation> _verticalTrackAnimation;
+ RetainPtr<ScrollbarPartAnimation> _horizontalTrackAnimation;
+}
+- (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator;
+@end
+
+@implementation ScrollbarPainterDelegate
+
+- (id)initWithScrollAnimator:(WebCore::ScrollAnimatorMac*)scrollAnimator
+{
+ self = [super init];
+ if (!self)
+ return nil;
+
+ _animator = scrollAnimator;
+ return self;
+}
+
+- (NSRect)convertRectToBacking:(NSRect)aRect
+{
+ return aRect;
+}
+
+- (NSRect)convertRectFromBacking:(NSRect)aRect
+{
+ return aRect;
+}
+
+- (CALayer *)layer
+{
+ if (!_animator)
+ return nil;
+ if (!_animator->scrollableArea()->scrollbarWillRenderIntoCompositingLayer())
+ return nil;
+
+ // FIXME: This should attempt to return an actual layer.
+ static CALayer *dummyLayer = [[CALayer alloc] init];
+ return dummyLayer;
+}
+
+- (void)setUpAnimation:(RetainPtr<ScrollbarPartAnimation>&)scrollbarPartAnimation scrollerPainter:(WKScrollbarPainterRef)scrollerPainter part:(WebCore::ScrollbarPart)part animateAlphaTo:(CGFloat)newAlpha duration:(NSTimeInterval)duration
+{
+ // If we are currently animating, stop
+ if (scrollbarPartAnimation) {
+ [scrollbarPartAnimation.get() stopAnimation];
+ scrollbarPartAnimation = nil;
+ }
+
+ scrollbarPartAnimation.adoptNS([[ScrollbarPartAnimation alloc] initWithScrollbarPainter:scrollerPainter
+ part:part
+ scrollAnimator:_animator
+ animateAlphaTo:newAlpha
+ duration:duration]);
+ [scrollbarPartAnimation.get() setAnimationBlockingMode:NSAnimationNonblocking];
+ [scrollbarPartAnimation.get() startAnimation];
+}
+
+- (void)scrollerImp:(id)scrollerImp animateKnobAlphaTo:(CGFloat)newKnobAlpha duration:(NSTimeInterval)duration
+{
+ if (!_animator)
+ return;
+
+ WKScrollbarPainterRef scrollerPainter = (WKScrollbarPainterRef)scrollerImp;
+ if (newKnobAlpha == wkScrollbarPainterKnobAlpha(scrollerPainter))
+ return;
+
+ if (wkScrollbarPainterIsHorizontal(scrollerPainter))
+ [self setUpAnimation:_horizontalKnobAnimation scrollerPainter:scrollerPainter part:WebCore::ThumbPart animateAlphaTo:newKnobAlpha duration:duration];
+ else
+ [self setUpAnimation:_verticalKnobAnimation scrollerPainter:scrollerPainter part:WebCore::ThumbPart animateAlphaTo:newKnobAlpha duration:duration];
+}
+
+- (void)scrollerImp:(id)scrollerImp animateTrackAlphaTo:(CGFloat)newTrackAlpha duration:(NSTimeInterval)duration
+{
+ if (!_animator)
+ return;
+
+ WKScrollbarPainterRef scrollerPainter = (WKScrollbarPainterRef)scrollerImp;
+ if (newTrackAlpha == wkScrollbarPainterTrackAlpha(scrollerPainter))
+ return;
+
+ if (wkScrollbarPainterIsHorizontal(scrollerPainter))
+ [self setUpAnimation:_horizontalTrackAnimation scrollerPainter:scrollerPainter part:WebCore::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration];
+ else
+ [self setUpAnimation:_verticalTrackAnimation scrollerPainter:scrollerPainter part:WebCore::BackTrackPart animateAlphaTo:newTrackAlpha duration:duration];
+}
+
+- (void)scrollerImp:(id)scrollerImp overlayScrollerStateChangedTo:(NSUInteger)newOverlayScrollerState
+{
+ if (!_animator)
+ return;
+
+ WKScrollbarPainterRef scrollbarPainter = (WKScrollbarPainterRef)scrollerImp;
+ wkScrollbarPainterSetOverlayState(scrollbarPainter, newOverlayScrollerState);
+
+ if (wkScrollbarPainterIsHorizontal(scrollbarPainter)) {
+ WebCore::Scrollbar* horizontalScrollbar = _animator->scrollableArea()->horizontalScrollbar();
+ _animator->scrollableArea()->invalidateScrollbarRect(horizontalScrollbar, WebCore::IntRect(0, 0, horizontalScrollbar->width(), horizontalScrollbar->height()));
+ } else {
+ WebCore::Scrollbar* verticalScrollbar = _animator->scrollableArea()->verticalScrollbar();
+ _animator->scrollableArea()->invalidateScrollbarRect(verticalScrollbar, WebCore::IntRect(0, 0, verticalScrollbar->width(), verticalScrollbar->height()));
+
+ }
+}
+
+- (void)scrollAnimatorDestroyed
+{
+ _animator = 0;
+ [_verticalKnobAnimation.get() scrollAnimatorDestroyed];
+ [_horizontalKnobAnimation.get() scrollAnimatorDestroyed];
+ [_verticalTrackAnimation.get() scrollAnimatorDestroyed];
+ [_horizontalTrackAnimation.get() scrollAnimatorDestroyed];
+}
+
+@end
+#endif // #if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+
namespace WebCore {
PassOwnPtr<ScrollAnimator> ScrollAnimator::create(ScrollableArea* scrollableArea)
@@ -131,13 +451,33 @@ PassOwnPtr<ScrollAnimator> ScrollAnimator::create(ScrollableArea* scrollableArea
ScrollAnimatorMac::ScrollAnimatorMac(ScrollableArea* scrollableArea)
: ScrollAnimator(scrollableArea)
+#if ENABLE(RUBBER_BANDING)
+ , m_inScrollGesture(false)
+ , m_momentumScrollInProgress(false)
+ , m_ignoreMomentumScrolls(false)
+ , m_lastMomemtumScrollTimestamp(0)
+ , m_startTime(0)
+ , m_snapRubberBandTimer(this, &ScrollAnimatorMac::snapRubberBandTimerFired)
+#endif
{
m_scrollAnimationHelperDelegate.adoptNS([[ScrollAnimationHelperDelegate alloc] initWithScrollAnimator:this]);
m_scrollAnimationHelper.adoptNS([[NSClassFromString(@"NSScrollAnimationHelper") alloc] initWithDelegate:m_scrollAnimationHelperDelegate.get()]);
+
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ m_scrollbarPainterControllerDelegate.adoptNS([[ScrollbarPainterControllerDelegate alloc] initWithScrollAnimator:this]);
+ m_scrollbarPainterController = wkMakeScrollbarPainterController(m_scrollbarPainterControllerDelegate.get());
+ m_scrollbarPainterDelegate.adoptNS([[ScrollbarPainterDelegate alloc] initWithScrollAnimator:this]);
+#endif
}
ScrollAnimatorMac::~ScrollAnimatorMac()
{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ [m_scrollbarPainterControllerDelegate.get() scrollAnimatorDestroyed];
+ [(id)m_scrollbarPainterController.get() setDelegate:nil];
+ [m_scrollbarPainterDelegate.get() scrollAnimatorDestroyed];
+ [m_scrollAnimationHelperDelegate.get() scrollAnimatorDestroyed];
+#endif
}
bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier)
@@ -167,16 +507,567 @@ bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranulari
void ScrollAnimatorMac::scrollToOffsetWithoutAnimation(const FloatPoint& offset)
{
[m_scrollAnimationHelper.get() _stopRun];
- ScrollAnimator::scrollToOffsetWithoutAnimation(offset);
+ immediateScrollToPoint(offset);
+}
+
+float ScrollAnimatorMac::adjustScrollXPositionIfNecessary(float position) const
+{
+ if (!m_scrollableArea->constrainsScrollingToContentEdge())
+ return position;
+
+ return max<float>(min<float>(position, m_scrollableArea->contentsSize().width() - m_scrollableArea->visibleWidth()), 0);
+}
+
+float ScrollAnimatorMac::adjustScrollYPositionIfNecessary(float position) const
+{
+ if (!m_scrollableArea->constrainsScrollingToContentEdge())
+ return position;
+
+ return max<float>(min<float>(position, m_scrollableArea->contentsSize().height() - m_scrollableArea->visibleHeight()), 0);
+}
+
+FloatPoint ScrollAnimatorMac::adjustScrollPositionIfNecessary(const FloatPoint& position) const
+{
+ if (!m_scrollableArea->constrainsScrollingToContentEdge())
+ return position;
+
+ float newX = max<float>(min<float>(position.x(), m_scrollableArea->contentsSize().width() - m_scrollableArea->visibleWidth()), 0);
+ float newY = max<float>(min<float>(position.y(), m_scrollableArea->contentsSize().height() - m_scrollableArea->visibleHeight()), 0);
+
+ return FloatPoint(newX, newY);
}
void ScrollAnimatorMac::immediateScrollToPoint(const FloatPoint& newPosition)
{
- m_currentPosX = newPosition.x();
- m_currentPosY = newPosition.y();
+ FloatPoint adjustedPosition = adjustScrollPositionIfNecessary(newPosition);
+
+ m_currentPosX = adjustedPosition.x();
+ m_currentPosY = adjustedPosition.y();
notityPositionChanged();
}
+void ScrollAnimatorMac::immediateScrollByDeltaX(float deltaX)
+{
+ m_currentPosX = adjustScrollXPositionIfNecessary(m_currentPosX + deltaX);
+ notityPositionChanged();
+}
+
+void ScrollAnimatorMac::immediateScrollByDeltaY(float deltaY)
+{
+ m_currentPosY = adjustScrollYPositionIfNecessary(m_currentPosY + deltaY);
+ notityPositionChanged();
+}
+
+void ScrollAnimatorMac::notityPositionChanged()
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkContentAreaScrolled(m_scrollbarPainterController.get());
+#endif
+ ScrollAnimator::notityPositionChanged();
+}
+
+void ScrollAnimatorMac::contentAreaWillPaint() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkContentAreaWillPaint(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::mouseEnteredContentArea() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkMouseEnteredContentArea(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::mouseExitedContentArea() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkMouseExitedContentArea(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::mouseMovedInContentArea() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkMouseMovedInContentArea(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::willStartLiveResize()
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkWillStartLiveResize(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::contentsResized() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkContentAreaResized(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::willEndLiveResize()
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkWillEndLiveResize(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::contentAreaDidShow() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkContentAreaDidShow(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::contentAreaDidHide() const
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ wkContentAreaDidHide(m_scrollbarPainterController.get());
+#endif
+}
+
+void ScrollAnimatorMac::didAddVerticalScrollbar(Scrollbar* scrollbar)
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ WKScrollbarPainterRef painter = static_cast<WebCore::ScrollbarThemeMac*>(WebCore::ScrollbarTheme::nativeTheme())->painterForScrollbar(scrollbar);
+ wkScrollbarPainterSetDelegate(painter, m_scrollbarPainterDelegate.get());
+ wkSetPainterForPainterController(m_scrollbarPainterController.get(), painter, false);
+ if (scrollableArea()->inLiveResize())
+ wkSetScrollbarPainterKnobAlpha(painter, 1);
+#else
+ UNUSED_PARAM(scrollbar);
+#endif
+}
+
+void ScrollAnimatorMac::willRemoveVerticalScrollbar(Scrollbar* scrollbar)
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ WKScrollbarPainterRef painter = static_cast<WebCore::ScrollbarThemeMac*>(WebCore::ScrollbarTheme::nativeTheme())->painterForScrollbar(scrollbar);
+ wkScrollbarPainterSetDelegate(painter, nil);
+ wkSetPainterForPainterController(m_scrollbarPainterController.get(), nil, false);
+#else
+ UNUSED_PARAM(scrollbar);
+#endif
+}
+
+void ScrollAnimatorMac::didAddHorizontalScrollbar(Scrollbar* scrollbar)
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ WKScrollbarPainterRef painter = static_cast<WebCore::ScrollbarThemeMac*>(WebCore::ScrollbarTheme::nativeTheme())->painterForScrollbar(scrollbar);
+ wkScrollbarPainterSetDelegate(painter, m_scrollbarPainterDelegate.get());
+ wkSetPainterForPainterController(m_scrollbarPainterController.get(), painter, true);
+ if (scrollableArea()->inLiveResize())
+ wkSetScrollbarPainterKnobAlpha(painter, 1);
+#else
+ UNUSED_PARAM(scrollbar);
+#endif
+}
+
+void ScrollAnimatorMac::willRemoveHorizontalScrollbar(Scrollbar* scrollbar)
+{
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ WKScrollbarPainterRef painter = static_cast<WebCore::ScrollbarThemeMac*>(WebCore::ScrollbarTheme::nativeTheme())->painterForScrollbar(scrollbar);
+ wkScrollbarPainterSetDelegate(painter, nil);
+ wkSetPainterForPainterController(m_scrollbarPainterController.get(), nil, true);
+#else
+ UNUSED_PARAM(scrollbar);
+#endif
+}
+
+#if ENABLE(RUBBER_BANDING)
+
+static const float scrollVelocityZeroingTimeout = 0.10f;
+static const float rubberbandStiffness = 20;
+static const float rubberbandDirectionLockStretchRatio = 1;
+static const float rubberbandMinimumRequiredDeltaBeforeStretch = 10;
+static const float rubberbandAmplitude = 0.31f;
+static const float rubberbandPeriod = 1.6f;
+
+static float elasticDeltaForTimeDelta(float initialPosition, float initialVelocity, float elapsedTime)
+{
+ float amplitude = rubberbandAmplitude;
+ float period = rubberbandPeriod;
+ float criticalDampeningFactor = expf((-elapsedTime * rubberbandStiffness) / period);
+
+ return (initialPosition + (-initialVelocity * elapsedTime * amplitude)) * criticalDampeningFactor;
+}
+
+static float elasticDeltaForReboundDelta(float delta)
+{
+ float stiffness = std::max(rubberbandStiffness, 1.0f);
+ return delta / stiffness;
+}
+
+static float reboundDeltaForElasticDelta(float delta)
+{
+ return delta * rubberbandStiffness;
+}
+
+static float scrollWheelMultiplier()
+{
+ static float multiplier = -1;
+ if (multiplier < 0) {
+ multiplier = [[NSUserDefaults standardUserDefaults] floatForKey:@"NSScrollWheelMultiplier"];
+ if (multiplier <= 0)
+ multiplier = 1;
+ }
+ return multiplier;
+}
+
+void ScrollAnimatorMac::handleWheelEvent(PlatformWheelEvent& wheelEvent)
+{
+ if (!wheelEvent.hasPreciseScrollingDeltas()) {
+ ScrollAnimator::handleWheelEvent(wheelEvent);
+ return;
+ }
+
+ wheelEvent.accept();
+
+ bool isMometumScrollEvent = (wheelEvent.phase() != PlatformWheelEventPhaseNone);
+ if (m_ignoreMomentumScrolls && (isMometumScrollEvent || m_snapRubberBandTimer.isActive())) {
+ if (wheelEvent.phase() == PlatformWheelEventPhaseEnded)
+ m_ignoreMomentumScrolls = false;
+ return;
+ }
+
+ smoothScrollWithEvent(wheelEvent);
+}
+
+void ScrollAnimatorMac::handleGestureEvent(const PlatformGestureEvent& gestureEvent)
+{
+ if (gestureEvent.type() == PlatformGestureEvent::ScrollBeginType)
+ beginScrollGesture();
+ else
+ endScrollGesture();
+}
+
+bool ScrollAnimatorMac::pinnedInDirection(float deltaX, float deltaY)
+{
+ FloatSize limitDelta;
+ if (fabsf(deltaY) >= fabsf(deltaX)) {
+ if (deltaY < 0) {
+ // We are trying to scroll up. Make sure we are not pinned to the top
+ limitDelta.setHeight(m_scrollableArea->visibleContentRect().y());
+ } else {
+ // We are trying to scroll down. Make sure we are not pinned to the bottom
+ limitDelta.setHeight(m_scrollableArea->contentsSize().height() - m_scrollableArea->visibleContentRect().maxY());
+ }
+ } else if (deltaX != 0) {
+ if (deltaX < 0) {
+ // We are trying to scroll left. Make sure we are not pinned to the left
+ limitDelta.setWidth(m_scrollableArea->visibleContentRect().x());
+ } else {
+ // We are trying to scroll right. Make sure we are not pinned to the right
+ limitDelta.setWidth(m_scrollableArea->contentsSize().width() - m_scrollableArea->visibleContentRect().maxX());
+ }
+ }
+
+ if ((deltaX != 0 || deltaY != 0) && (limitDelta.width() < 1 && limitDelta.height() < 1))
+ return true;
+ return false;
+}
+
+bool ScrollAnimatorMac::allowsVerticalStretching() const
+{
+ Scrollbar* hScroller = m_scrollableArea->horizontalScrollbar();
+ Scrollbar* vScroller = m_scrollableArea->verticalScrollbar();
+ if (((vScroller && vScroller->enabled()) || (!hScroller || !hScroller->enabled())))
+ return true;
+
+ return false;
+}
+
+bool ScrollAnimatorMac::allowsHorizontalStretching() const
+{
+ Scrollbar* hScroller = m_scrollableArea->horizontalScrollbar();
+ Scrollbar* vScroller = m_scrollableArea->verticalScrollbar();
+ if (((hScroller && hScroller->enabled()) || (!vScroller || !vScroller->enabled())))
+ return true;
+
+ return false;
+}
+
+void ScrollAnimatorMac::smoothScrollWithEvent(PlatformWheelEvent& wheelEvent)
+{
+ float deltaX = m_overflowScrollDelta.width();
+ float deltaY = m_overflowScrollDelta.height();
+
+ // Reset overflow values because we may decide to remove delta at various points and put it into overflow.
+ m_overflowScrollDelta = FloatSize();
+
+ float eventCoallescedDeltaX = -wheelEvent.deltaX();
+ float eventCoallescedDeltaY = -wheelEvent.deltaY();
+
+ deltaX += eventCoallescedDeltaX;
+ deltaY += eventCoallescedDeltaY;
+
+ // Slightly prefer scrolling vertically by applying the = case to deltaY
+ if (fabsf(deltaY) >= fabsf(deltaX))
+ deltaX = 0;
+ else
+ deltaY = 0;
+
+ bool isVerticallyStretched = false;
+ bool isHorizontallyStretched = false;
+ bool shouldStretch = false;
+
+ IntSize stretchAmount = m_scrollableArea->overhangAmount();
+
+ isHorizontallyStretched = stretchAmount.width();
+ isVerticallyStretched = stretchAmount.height();
+
+ PlatformWheelEventPhase phase = wheelEvent.phase();
+
+ // If we are starting momentum scrolling then do some setup.
+ if (!m_momentumScrollInProgress && (phase == PlatformWheelEventPhaseBegan || phase == PlatformWheelEventPhaseChanged))
+ m_momentumScrollInProgress = true;
+
+ CFTimeInterval timeDelta = wheelEvent.timestamp() - m_lastMomemtumScrollTimestamp;
+ if (m_inScrollGesture || m_momentumScrollInProgress) {
+ if (m_lastMomemtumScrollTimestamp && timeDelta > 0 && timeDelta < scrollVelocityZeroingTimeout) {
+ m_momentumVelocity.setWidth(eventCoallescedDeltaX / (float)timeDelta);
+ m_momentumVelocity.setHeight(eventCoallescedDeltaY / (float)timeDelta);
+ m_lastMomemtumScrollTimestamp = wheelEvent.timestamp();
+ } else {
+ m_lastMomemtumScrollTimestamp = wheelEvent.timestamp();
+ m_momentumVelocity = FloatSize();
+ }
+
+ if (isVerticallyStretched) {
+ if (!isHorizontallyStretched && pinnedInDirection(deltaX, 0)) {
+ // Stretching only in the vertical.
+ if (deltaY != 0 && (fabsf(deltaX / deltaY) < rubberbandDirectionLockStretchRatio))
+ deltaX = 0;
+ else if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
+ m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+ deltaX = 0;
+ } else
+ m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+ }
+ } else if (isHorizontallyStretched) {
+ // Stretching only in the horizontal.
+ if (pinnedInDirection(0, deltaY)) {
+ if (deltaX != 0 && (fabsf(deltaY / deltaX) < rubberbandDirectionLockStretchRatio))
+ deltaY = 0;
+ else if (fabsf(deltaY) < rubberbandMinimumRequiredDeltaBeforeStretch) {
+ m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
+ deltaY = 0;
+ } else
+ m_overflowScrollDelta.setHeight(m_overflowScrollDelta.height() + deltaY);
+ }
+ } else {
+ // Not stretching at all yet.
+ if (pinnedInDirection(deltaX, deltaY)) {
+ if (fabsf(deltaY) >= fabsf(deltaX)) {
+ if (fabsf(deltaX) < rubberbandMinimumRequiredDeltaBeforeStretch) {
+ m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+ deltaX = 0;
+ } else
+ m_overflowScrollDelta.setWidth(m_overflowScrollDelta.width() + deltaX);
+ }
+ shouldStretch = true;
+ }
+ }
+ }
+
+ if (deltaX != 0 || deltaY != 0) {
+ if (!(shouldStretch || isVerticallyStretched || isHorizontallyStretched)) {
+ if (deltaY != 0) {
+ deltaY *= scrollWheelMultiplier();
+ immediateScrollByDeltaY(deltaY);
+ }
+ if (deltaX != 0) {
+ deltaX *= scrollWheelMultiplier();
+ immediateScrollByDeltaX(deltaX);
+ }
+ } else {
+ if (!allowsHorizontalStretching()) {
+ deltaX = 0;
+ eventCoallescedDeltaX = 0;
+ } else if ((deltaX != 0) && !isHorizontallyStretched && !pinnedInDirection(deltaX, 0)) {
+ deltaX *= scrollWheelMultiplier();
+
+ m_scrollableArea->setConstrainsScrollingToContentEdge(false);
+ immediateScrollByDeltaX(deltaX);
+ m_scrollableArea->setConstrainsScrollingToContentEdge(true);
+
+ deltaX = 0;
+ }
+
+ if (!allowsVerticalStretching()) {
+ deltaY = 0;
+ eventCoallescedDeltaY = 0;
+ } else if ((deltaY != 0) && !isVerticallyStretched && !pinnedInDirection(0, deltaY)) {
+ deltaY *= scrollWheelMultiplier();
+
+ m_scrollableArea->setConstrainsScrollingToContentEdge(false);
+ immediateScrollByDeltaY(deltaY);
+ m_scrollableArea->setConstrainsScrollingToContentEdge(true);
+
+ deltaY = 0;
+ }
+
+ IntSize stretchAmount = m_scrollableArea->overhangAmount();
+
+ if (m_momentumScrollInProgress) {
+ if ((pinnedInDirection(eventCoallescedDeltaX, eventCoallescedDeltaY) || (fabsf(eventCoallescedDeltaX) + fabsf(eventCoallescedDeltaY) <= 0)) && m_lastMomemtumScrollTimestamp) {
+ m_ignoreMomentumScrolls = true;
+ m_momentumScrollInProgress = false;
+ snapRubberBand();
+ }
+ }
+
+ m_stretchScrollForce.setWidth(m_stretchScrollForce.width() + deltaX);
+ m_stretchScrollForce.setHeight(m_stretchScrollForce.height() + deltaY);
+
+ FloatSize dampedDelta(ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.width())), ceilf(elasticDeltaForReboundDelta(m_stretchScrollForce.height())));
+ FloatPoint origOrigin = m_scrollableArea->visibleContentRect().location() - stretchAmount;
+ FloatPoint newOrigin = origOrigin + dampedDelta;
+
+ if (origOrigin != newOrigin) {
+ m_scrollableArea->setConstrainsScrollingToContentEdge(false);
+ immediateScrollToPoint(newOrigin);
+ m_scrollableArea->setConstrainsScrollingToContentEdge(true);
+ }
+ }
+ }
+
+ if (m_momentumScrollInProgress && phase == PlatformWheelEventPhaseEnded) {
+ m_momentumScrollInProgress = false;
+ m_ignoreMomentumScrolls = false;
+ m_lastMomemtumScrollTimestamp = 0;
+ }
+}
+
+void ScrollAnimatorMac::beginScrollGesture()
+{
+ m_inScrollGesture = true;
+ m_momentumScrollInProgress = false;
+ m_ignoreMomentumScrolls = false;
+ m_lastMomemtumScrollTimestamp = 0;
+ m_momentumVelocity = FloatSize();
+
+ IntSize stretchAmount = m_scrollableArea->overhangAmount();
+ m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(stretchAmount.width()));
+ m_stretchScrollForce.setHeight(reboundDeltaForElasticDelta(stretchAmount.height()));
+
+ m_overflowScrollDelta = FloatSize();
+
+ if (m_snapRubberBandTimer.isActive())
+ m_snapRubberBandTimer.stop();
+}
+
+void ScrollAnimatorMac::endScrollGesture()
+{
+ snapRubberBand();
+}
+
+void ScrollAnimatorMac::snapRubberBand()
+{
+ CFTimeInterval timeDelta = [[NSProcessInfo processInfo] systemUptime] - m_lastMomemtumScrollTimestamp;
+ if (m_lastMomemtumScrollTimestamp && timeDelta >= scrollVelocityZeroingTimeout)
+ m_momentumVelocity = FloatSize();
+
+ m_inScrollGesture = false;
+
+ if (m_snapRubberBandTimer.isActive())
+ return;
+
+ m_startTime = [NSDate timeIntervalSinceReferenceDate];
+ m_startStretch = FloatSize();
+ m_origOrigin = FloatPoint();
+ m_origVelocity = FloatSize();
+
+ m_snapRubberBandTimer.startRepeating(1.0/60.0);
+}
+
+static inline float roundTowardZero(float num)
+{
+ return num > 0 ? ceilf(num - 0.5f) : floorf(num + 0.5f);
+}
+
+static inline float roundToDevicePixelTowardZero(float num)
+{
+ float roundedNum = roundf(num);
+ if (fabs(num - roundedNum) < 0.125)
+ num = roundedNum;
+
+ return roundTowardZero(num);
+}
+
+void ScrollAnimatorMac::snapRubberBandTimerFired(Timer<ScrollAnimatorMac>*)
+{
+ if (!m_momentumScrollInProgress || m_ignoreMomentumScrolls) {
+ CFTimeInterval timeDelta = [NSDate timeIntervalSinceReferenceDate] - m_startTime;
+
+ if (m_startStretch == FloatSize()) {
+ m_startStretch = m_scrollableArea->overhangAmount();
+ if (m_startStretch == FloatSize()) {
+ m_snapRubberBandTimer.stop();
+ m_stretchScrollForce = FloatSize();
+ m_startTime = 0;
+ m_startStretch = FloatSize();
+ m_origOrigin = FloatPoint();
+ m_origVelocity = FloatSize();
+
+ return;
+ }
+
+ m_origOrigin = m_scrollableArea->visibleContentRect().location() - m_startStretch;
+ m_origVelocity = m_momentumVelocity;
+
+ // Just like normal scrolling, prefer vertical rubberbanding
+ if (fabsf(m_origVelocity.height()) >= fabsf(m_origVelocity.width()))
+ m_origVelocity.setWidth(0);
+
+ // Don't rubber-band horizontally if it's not possible to scroll horizontally
+ Scrollbar* hScroller = m_scrollableArea->horizontalScrollbar();
+ if (!hScroller || !hScroller->enabled())
+ m_origVelocity.setWidth(0);
+
+ // Don't rubber-band vertically if it's not possible to scroll horizontally
+ Scrollbar* vScroller = m_scrollableArea->verticalScrollbar();
+ if (!vScroller || !vScroller->enabled())
+ m_origVelocity.setHeight(0);
+ }
+
+ FloatPoint delta(roundToDevicePixelTowardZero(elasticDeltaForTimeDelta(m_startStretch.width(), -m_origVelocity.width(), (float)timeDelta)),
+ roundToDevicePixelTowardZero(elasticDeltaForTimeDelta(m_startStretch.height(), -m_origVelocity.height(), (float)timeDelta)));
+
+ if (fabs(delta.x()) >= 1 || fabs(delta.y()) >= 1) {
+ FloatPoint newOrigin = m_origOrigin + delta;
+
+ m_scrollableArea->setConstrainsScrollingToContentEdge(false);
+ immediateScrollToPoint(newOrigin);
+ m_scrollableArea->setConstrainsScrollingToContentEdge(true);
+
+ FloatSize newStretch = m_scrollableArea->overhangAmount();
+
+ m_stretchScrollForce.setWidth(reboundDeltaForElasticDelta(newStretch.width()));
+ m_stretchScrollForce.setHeight(reboundDeltaForElasticDelta(newStretch.height()));
+ } else {
+ immediateScrollToPoint(m_origOrigin);
+
+ m_scrollableArea->didCompleteRubberBand(roundedIntSize(m_startStretch));
+
+ m_snapRubberBandTimer.stop();
+ m_stretchScrollForce = FloatSize();
+
+ m_startTime = 0;
+ m_startStretch = FloatSize();
+ m_origOrigin = FloatPoint();
+ m_origVelocity = FloatSize();
+ }
+ } else {
+ m_startTime = [NSDate timeIntervalSinceReferenceDate];
+ m_startStretch = FloatSize();
+ }
+}
+#endif
+
} // namespace WebCore
#endif // ENABLE(SMOOTH_SCROLLING)
diff --git a/Source/WebCore/platform/mac/ScrollViewMac.mm b/Source/WebCore/platform/mac/ScrollViewMac.mm
index 93ec971..ff2e14e 100644
--- a/Source/WebCore/platform/mac/ScrollViewMac.mm
+++ b/Source/WebCore/platform/mac/ScrollViewMac.mm
@@ -203,10 +203,10 @@ bool ScrollView::platformIsOffscreen() const
return ![platformWidget() window] || ![[platformWidget() window] isVisible];
}
-void ScrollView::platformSetScrollOrigin(const IntPoint& origin, bool updatePosition)
+void ScrollView::platformSetScrollOrigin(const IntPoint& origin, bool updatePositionAtAll, bool updatePositionSynchronously)
{
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- [scrollView() setScrollOrigin:origin updatePosition:updatePosition];
+ [scrollView() setScrollOrigin:origin updatePositionAtAll:updatePositionAtAll immediately:updatePositionSynchronously];
END_BLOCK_OBJC_EXCEPTIONS;
}
diff --git a/Source/WebCore/platform/mac/ScrollbarThemeMac.h b/Source/WebCore/platform/mac/ScrollbarThemeMac.h
index 8b5412d..844a088 100644
--- a/Source/WebCore/platform/mac/ScrollbarThemeMac.h
+++ b/Source/WebCore/platform/mac/ScrollbarThemeMac.h
@@ -26,7 +26,9 @@
#ifndef ScrollbarThemeMac_h
#define ScrollbarThemeMac_h
+#include "HeaderDetection.h"
#include "ScrollbarThemeComposite.h"
+#include "WebCoreSystemInterface.h"
namespace WebCore {
@@ -50,6 +52,11 @@ public:
virtual void registerScrollbar(Scrollbar*);
virtual void unregisterScrollbar(Scrollbar*);
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+ void setNewPainterForScrollbar(Scrollbar*, WKScrollbarPainterRef);
+ WKScrollbarPainterRef painterForScrollbar(Scrollbar*);
+#endif
+
protected:
virtual bool hasButtons(Scrollbar*);
virtual bool hasThumb(Scrollbar*);
diff --git a/Source/WebCore/platform/mac/ScrollbarThemeMac.mm b/Source/WebCore/platform/mac/ScrollbarThemeMac.mm
index 032d9f3..c35dfa0 100644
--- a/Source/WebCore/platform/mac/ScrollbarThemeMac.mm
+++ b/Source/WebCore/platform/mac/ScrollbarThemeMac.mm
@@ -29,17 +29,13 @@
#include "ImageBuffer.h"
#include "LocalCurrentGraphicsContext.h"
#include "PlatformMouseEvent.h"
+#include "ScrollAnimatorMac.h"
#include "ScrollView.h"
-#include "WebCoreSystemInterface.h"
#include <Carbon/Carbon.h>
#include <wtf/HashMap.h>
#include <wtf/StdLibExtras.h>
#include <wtf/UnusedParam.h>
-#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
-#define USE_WK_SCROLLBAR_PAINTER
-#endif
-
// FIXME: There are repainting problems due to Aqua scroll bar buttons' visual overflow.
using namespace std;
@@ -47,7 +43,7 @@ using namespace WebCore;
namespace WebCore {
-#if defined(USE_WK_SCROLLBAR_PAINTER)
+#if USE(WK_SCROLLBAR_PAINTER)
typedef HashMap<Scrollbar*, RetainPtr<WKScrollbarPainterRef> > ScrollbarPainterMap;
#else
typedef HashSet<Scrollbar*> ScrollbarPainterMap;
@@ -83,7 +79,7 @@ static ScrollbarPainterMap* scrollbarMap()
return;
ScrollbarPainterMap::iterator end = scrollbarMap()->end();
for (ScrollbarPainterMap::iterator it = scrollbarMap()->begin(); it != end; ++it) {
-#if defined(USE_WK_SCROLLBAR_PAINTER)
+#if USE(WK_SCROLLBAR_PAINTER)
it->first->styleChanged();
it->first->invalidate();
#else
@@ -117,13 +113,15 @@ ScrollbarTheme* ScrollbarTheme::nativeTheme()
}
// FIXME: Get these numbers from CoreUI.
-static int cScrollbarThickness[] = { 15, 11 };
static int cRealButtonLength[] = { 28, 21 };
-static int cButtonInset[] = { 14, 11 };
static int cButtonHitInset[] = { 3, 2 };
// cRealButtonLength - cButtonInset
static int cButtonLength[] = { 14, 10 };
+#if !USE(WK_SCROLLBAR_PAINTER)
+static int cScrollbarThickness[] = { 15, 11 };
+static int cButtonInset[] = { 14, 11 };
static int cThumbMinLength[] = { 26, 20 };
+#endif
static int cOuterButtonLength[] = { 16, 14 }; // The outer button in a double button pair is a bit bigger.
static int cOuterButtonOverlap = 2;
@@ -131,13 +129,15 @@ static int cOuterButtonOverlap = 2;
static float gInitialButtonDelay = 0.5f;
static float gAutoscrollButtonDelay = 0.05f;
static bool gJumpOnTrackClick = false;
+
+#if USE(WK_SCROLLBAR_PAINTER)
+static ScrollbarButtonsPlacement gButtonPlacement = ScrollbarButtonsNone;
+#else
static ScrollbarButtonsPlacement gButtonPlacement = ScrollbarButtonsDoubleEnd;
+#endif
static void updateArrowPlacement()
{
-#if defined(USE_WK_SCROLLBAR_PAINTER)
- gButtonPlacement = ScrollbarButtonsNone;
-#else
NSString *buttonPlacement = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleScrollBarVariant"];
if ([buttonPlacement isEqualToString:@"Single"])
gButtonPlacement = ScrollbarButtonsSingle;
@@ -145,16 +145,20 @@ static void updateArrowPlacement()
gButtonPlacement = ScrollbarButtonsDoubleStart;
else if ([buttonPlacement isEqualToString:@"DoubleBoth"])
gButtonPlacement = ScrollbarButtonsDoubleBoth;
- else
- gButtonPlacement = ScrollbarButtonsDoubleEnd; // The default is ScrollbarButtonsDoubleEnd.
+ else {
+#if USE(WK_SCROLLBAR_PAINTER)
+ gButtonPlacement = ScrollbarButtonsNone;
+#else
+ gButtonPlacement = ScrollbarButtonsDoubleEnd;
#endif
+ }
}
void ScrollbarThemeMac::registerScrollbar(Scrollbar* scrollbar)
{
-#if defined(USE_WK_SCROLLBAR_PAINTER)
- WKScrollbarPainterRef scrollbarPainter = wkMakeScrollbarPainter(scrollbar->controlSize(),
- scrollbar->orientation() == HorizontalScrollbar);
+#if USE(WK_SCROLLBAR_PAINTER)
+ bool isHorizontal = scrollbar->orientation() == HorizontalScrollbar;
+ WKScrollbarPainterRef scrollbarPainter = wkMakeScrollbarPainter(scrollbar->controlSize(), isHorizontal);
scrollbarMap()->add(scrollbar, scrollbarPainter);
#else
scrollbarMap()->add(scrollbar);
@@ -163,9 +167,22 @@ void ScrollbarThemeMac::registerScrollbar(Scrollbar* scrollbar)
void ScrollbarThemeMac::unregisterScrollbar(Scrollbar* scrollbar)
{
+
scrollbarMap()->remove(scrollbar);
}
+#if defined(USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER)
+void ScrollbarThemeMac::setNewPainterForScrollbar(Scrollbar* scrollbar, WKScrollbarPainterRef newPainter)
+{
+ scrollbarMap()->set(scrollbar, newPainter);
+}
+
+WKScrollbarPainterRef ScrollbarThemeMac::painterForScrollbar(Scrollbar* scrollbar)
+{
+ return scrollbarMap()->get(scrollbar).get();
+}
+#endif
+
ScrollbarThemeMac::ScrollbarThemeMac()
{
static bool initialized;
@@ -192,13 +209,20 @@ void ScrollbarThemeMac::preferencesChanged()
int ScrollbarThemeMac::scrollbarThickness(ScrollbarControlSize controlSize)
{
+#if USE(WK_SCROLLBAR_PAINTER)
+ return wkScrollbarThickness(controlSize);
+#else
return cScrollbarThickness[controlSize];
+#endif
}
bool ScrollbarThemeMac::usesOverlayScrollbars() const
{
- // FIXME: This should be enabled when <rdar://problem/8492788> is resolved.
+#if USE(WK_SCROLLBAR_PAINTER)
+ return wkScrollbarPainterUsesOverlayScrollers();
+#else
return false;
+#endif
}
double ScrollbarThemeMac::initialAutoscrollTimerDelay()
@@ -218,20 +242,29 @@ ScrollbarButtonsPlacement ScrollbarThemeMac::buttonsPlacement() const
bool ScrollbarThemeMac::hasButtons(Scrollbar* scrollbar)
{
- return scrollbar->enabled() && (scrollbar->orientation() == HorizontalScrollbar ?
- scrollbar->width() :
- scrollbar->height()) >= 2 * (cRealButtonLength[scrollbar->controlSize()] - cButtonHitInset[scrollbar->controlSize()]);
+ return scrollbar->enabled() && gButtonPlacement != ScrollbarButtonsNone
+ && (scrollbar->orientation() == HorizontalScrollbar
+ ? scrollbar->width()
+ : scrollbar->height()) >= 2 * (cRealButtonLength[scrollbar->controlSize()] - cButtonHitInset[scrollbar->controlSize()]);
}
bool ScrollbarThemeMac::hasThumb(Scrollbar* scrollbar)
{
+ int minLengthForThumb;
+#if USE(WK_SCROLLBAR_PAINTER)
+ minLengthForThumb = wkScrollbarMinimumTotalLengthNeededForThumb(scrollbarMap()->get(scrollbar).get());
+#else
+ minLengthForThumb = 2 * cButtonInset[scrollbar->controlSize()] + cThumbMinLength[scrollbar->controlSize()] + 1;
+#endif
return scrollbar->enabled() && (scrollbar->orientation() == HorizontalScrollbar ?
scrollbar->width() :
- scrollbar->height()) >= 2 * cButtonInset[scrollbar->controlSize()] + cThumbMinLength[scrollbar->controlSize()] + 1;
+ scrollbar->height()) >= minLengthForThumb;
}
static IntRect buttonRepaintRect(const IntRect& buttonRect, ScrollbarOrientation orientation, ScrollbarControlSize controlSize, bool start)
{
+ ASSERT(gButtonPlacement != ScrollbarButtonsNone);
+
IntRect paintRect(buttonRect);
if (orientation == HorizontalScrollbar) {
paintRect.setWidth(cRealButtonLength[controlSize]);
@@ -359,7 +392,11 @@ IntRect ScrollbarThemeMac::trackRect(Scrollbar* scrollbar, bool painting)
int ScrollbarThemeMac::minimumThumbLength(Scrollbar* scrollbar)
{
+#if USE(WK_SCROLLBAR_PAINTER)
+ return wkScrollbarMinimumThumbLength(scrollbarMap()->get(scrollbar).get());
+#else
return cThumbMinLength[scrollbar->controlSize()];
+#endif
}
bool ScrollbarThemeMac::shouldCenterOnThumb(Scrollbar*, const PlatformMouseEvent& evt)
@@ -391,15 +428,32 @@ static int scrollbarPartToHIPressedState(ScrollbarPart part)
bool ScrollbarThemeMac::paint(Scrollbar* scrollbar, GraphicsContext* context, const IntRect& damageRect)
{
-#if defined(USE_WK_SCROLLBAR_PAINTER)
+#if USE(WK_SCROLLBAR_PAINTER)
+ float value = 0.0f;
+ float totalSize = 0.0f;
+
+ if (scrollbar->currentPos() < 0) {
+ // Scrolled past the top.
+ value = 0.0f;
+ totalSize = scrollbar->totalSize() - scrollbar->currentPos();
+ } else if (scrollbar->visibleSize() + scrollbar->currentPos() > scrollbar->totalSize()) {
+ // Scrolled past the bottom.
+ value = 1.0f;
+ totalSize = scrollbar->visibleSize() + scrollbar->currentPos();
+ } else {
+ // Within the bounds of the scrollable area.
+ value = scrollbar->currentPos() / scrollbar->maximum();
+ totalSize = scrollbar->totalSize();
+ }
+
context->save();
context->clip(damageRect);
context->translate(scrollbar->frameRect().x(), scrollbar->frameRect().y());
LocalCurrentGraphicsContext localContext(context);
wkScrollbarPainterPaint(scrollbarMap()->get(scrollbar).get(),
scrollbar->enabled(),
- scrollbar->currentPos() / scrollbar->maximum(),
- static_cast<CGFloat>(scrollbar->visibleSize()) / scrollbar->totalSize(),
+ value,
+ static_cast<CGFloat>(scrollbar->visibleSize()) / totalSize,
scrollbar->frameRect());
context->restore();
return true;
@@ -409,9 +463,27 @@ bool ScrollbarThemeMac::paint(Scrollbar* scrollbar, GraphicsContext* context, co
trackInfo.version = 0;
trackInfo.kind = scrollbar->controlSize() == RegularScrollbar ? kThemeMediumScrollBar : kThemeSmallScrollBar;
trackInfo.bounds = scrollbar->frameRect();
+
+ float maximum = 0.0f;
+ float position = 0.0f;
+ if (scrollbar->currentPos() < 0) {
+ // Scrolled past the top.
+ maximum = (scrollbar->totalSize() - scrollbar->currentPos()) - scrollbar->visibleSize();
+ position = 0;
+ } else if (scrollbar->visibleSize() + scrollbar->currentPos() > scrollbar->totalSize()) {
+ // Scrolled past the bottom.
+ maximum = scrollbar->currentPos();
+ position = maximum;
+ } else {
+ // Within the bounds of the scrollable area.
+ maximum = scrollbar->maximum();
+ position = scrollbar->currentPos();
+ }
+
trackInfo.min = 0;
- trackInfo.max = scrollbar->maximum();
- trackInfo.value = scrollbar->currentPos();
+ trackInfo.max = static_cast<int>(maximum);
+ trackInfo.value = static_cast<int>(position);
+
trackInfo.trackInfo.scrollbar.viewsize = scrollbar->visibleSize();
trackInfo.attributes = 0;
if (scrollbar->orientation() == HorizontalScrollbar)
diff --git a/Source/WebCore/platform/mac/WebCoreSystemInterface.h b/Source/WebCore/platform/mac/WebCoreSystemInterface.h
index 045864a..e6d6cf6 100644
--- a/Source/WebCore/platform/mac/WebCoreSystemInterface.h
+++ b/Source/WebCore/platform/mac/WebCoreSystemInterface.h
@@ -147,6 +147,8 @@ extern void (*wkSignalCFReadStreamEnd)(CFReadStreamRef stream);
extern void (*wkSignalCFReadStreamError)(CFReadStreamRef stream, CFStreamError *error);
extern void (*wkSignalCFReadStreamHasBytes)(CFReadStreamRef stream);
extern unsigned (*wkInitializeMaximumHTTPConnectionCountPerHost)(unsigned preferredConnectionCount);
+extern int (*wkGetHTTPPipeliningPriority)(NSURLRequest *);
+extern void (*wkSetHTTPPipeliningPriority)(NSMutableURLRequest *, int priority);
extern void (*wkSetCONNECTProxyForStream)(CFReadStreamRef, CFStringRef proxyHost, CFNumberRef proxyPort);
extern void (*wkSetCONNECTProxyAuthorizationForStream)(CFReadStreamRef, CFStringRef proxyAuthorizationString);
extern CFHTTPMessageRef (*wkCopyCONNECTProxyResponse)(CFReadStreamRef, CFURLRef responseURL);
@@ -189,9 +191,50 @@ extern CGImageRef (*wkIOSurfaceContextCreateImage)(CGContextRef context);
typedef struct __WKScrollbarPainter *WKScrollbarPainterRef;
extern WKScrollbarPainterRef (*wkMakeScrollbarPainter)(int controlSize, bool isHorizontal);
+extern WKScrollbarPainterRef (*wkMakeScrollbarReplacementPainter)(WKScrollbarPainterRef oldPainter, int newStyle, int controlSize, bool isHorizontal);
+extern void (*wkScrollbarPainterSetDelegate)(WKScrollbarPainterRef, id scrollbarPainterDelegate);
extern void (*wkScrollbarPainterPaint)(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, CGRect frameRect);
+extern int (*wkScrollbarThickness)(int controlSize);
+extern int (*wkScrollbarMinimumThumbLength)(WKScrollbarPainterRef);
+extern int (*wkScrollbarMinimumTotalLengthNeededForThumb)(WKScrollbarPainterRef);
+extern CGFloat (*wkScrollbarPainterKnobAlpha)(WKScrollbarPainterRef);
+extern void (*wkSetScrollbarPainterKnobAlpha)(WKScrollbarPainterRef, CGFloat);
+extern CGFloat (*wkScrollbarPainterTrackAlpha)(WKScrollbarPainterRef);
+extern void (*wkSetScrollbarPainterTrackAlpha)(WKScrollbarPainterRef, CGFloat);
+extern bool (*wkScrollbarPainterIsHorizontal)(WKScrollbarPainterRef);
+extern void (*wkScrollbarPainterSetOverlayState)(WKScrollbarPainterRef, int overlayScrollerState);
+
+typedef struct __WKScrollbarPainterController *WKScrollbarPainterControllerRef;
+extern WKScrollbarPainterControllerRef (*wkMakeScrollbarPainterController)(id painterControllerDelegate);
+extern void (*wkSetPainterForPainterController)(WKScrollbarPainterControllerRef, WKScrollbarPainterRef, bool isHorizontal);
+extern WKScrollbarPainterRef (*wkVerticalScrollbarPainterForController)(WKScrollbarPainterControllerRef);
+extern WKScrollbarPainterRef (*wkHorizontalScrollbarPainterForController)(WKScrollbarPainterControllerRef);
+extern void (*wkSetScrollbarPainterControllerStyle)(WKScrollbarPainterControllerRef, int newStyle);
+extern void (*wkContentAreaScrolled)(WKScrollbarPainterControllerRef);
+extern void (*wkContentAreaWillPaint)(WKScrollbarPainterControllerRef);
+extern void (*wkMouseEnteredContentArea)(WKScrollbarPainterControllerRef);
+extern void (*wkMouseExitedContentArea)(WKScrollbarPainterControllerRef);
+extern void (*wkMouseMovedInContentArea)(WKScrollbarPainterControllerRef);
+extern void (*wkWillStartLiveResize)(WKScrollbarPainterControllerRef);
+extern void (*wkContentAreaResized)(WKScrollbarPainterControllerRef);
+extern void (*wkWillEndLiveResize)(WKScrollbarPainterControllerRef);
+extern void (*wkContentAreaDidShow)(WKScrollbarPainterControllerRef);
+extern void (*wkContentAreaDidHide)(WKScrollbarPainterControllerRef);
+
+extern bool (*wkScrollbarPainterUsesOverlayScrollers)(void);
#endif
+extern void (*wkUnregisterUniqueIdForElement)(id element);
+extern void (*wkAccessibilityHandleFocusChanged)(void);
+extern CFTypeID (*wkGetAXTextMarkerTypeID)(void);
+extern CFTypeID (*wkGetAXTextMarkerRangeTypeID)(void);
+extern CFTypeRef (*wkCreateAXTextMarkerRange)(CFTypeRef start, CFTypeRef end);
+extern CFTypeRef (*wkCopyAXTextMarkerRangeStart)(CFTypeRef range);
+extern CFTypeRef (*wkCopyAXTextMarkerRangeEnd)(CFTypeRef range);
+extern CFTypeRef (*wkCreateAXTextMarker)(const void *bytes, size_t len);
+extern BOOL (*wkGetBytesFromAXTextMarker)(CFTypeRef textMarker, void *bytes, size_t length);
+extern AXUIElementRef (*wkCreateAXUIElementRef)(id element);
+
}
#endif
diff --git a/Source/WebCore/platform/mac/WebCoreSystemInterface.mm b/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
index 047827f..24bdcb1 100644
--- a/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
+++ b/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
@@ -89,6 +89,8 @@ void (*wkSetNSURLConnectionDefersCallbacks)(NSURLConnection *, BOOL);
void (*wkSetNSURLRequestShouldContentSniff)(NSMutableURLRequest *, BOOL);
id (*wkCreateNSURLConnectionDelegateProxy)(void);
unsigned (*wkInitializeMaximumHTTPConnectionCountPerHost)(unsigned preferredConnectionCount);
+int (*wkGetHTTPPipeliningPriority)(NSURLRequest *);
+void (*wkSetHTTPPipeliningPriority)(NSMutableURLRequest *, int priority);
void (*wkSetCONNECTProxyForStream)(CFReadStreamRef, CFStringRef proxyHost, CFNumberRef proxyPort);
void (*wkSetCONNECTProxyAuthorizationForStream)(CFReadStreamRef, CFStringRef proxyAuthorizationString);
CFHTTPMessageRef (*wkCopyCONNECTProxyResponse)(CFReadStreamRef, CFURLRef responseURL);
@@ -127,5 +129,46 @@ CGContextRef (*wkIOSurfaceContextCreate)(IOSurfaceRef surface, unsigned width, u
CGImageRef (*wkIOSurfaceContextCreateImage)(CGContextRef context);
WKScrollbarPainterRef (*wkMakeScrollbarPainter)(int controlSize, bool isHorizontal);
+WKScrollbarPainterRef (*wkMakeScrollbarReplacementPainter)(WKScrollbarPainterRef oldPainter, int newStyle, int controlSize, bool isHorizontal);
+void (*wkScrollbarPainterSetDelegate)(WKScrollbarPainterRef, id scrollbarPainterDelegate);
void (*wkScrollbarPainterPaint)(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, CGRect frameRect);
+int (*wkScrollbarThickness)(int controlSize);
+int (*wkScrollbarMinimumThumbLength)(WKScrollbarPainterRef);
+int (*wkScrollbarMinimumTotalLengthNeededForThumb)(WKScrollbarPainterRef);
+CGFloat (*wkScrollbarPainterKnobAlpha)(WKScrollbarPainterRef);
+void (*wkSetScrollbarPainterKnobAlpha)(WKScrollbarPainterRef, CGFloat);
+CGFloat (*wkScrollbarPainterTrackAlpha)(WKScrollbarPainterRef);
+void (*wkSetScrollbarPainterTrackAlpha)(WKScrollbarPainterRef, CGFloat);
+bool (*wkScrollbarPainterIsHorizontal)(WKScrollbarPainterRef);
+void (*wkScrollbarPainterSetOverlayState)(WKScrollbarPainterRef, int overlayScrollerState);
+
+WKScrollbarPainterControllerRef (*wkMakeScrollbarPainterController)(id painterControllerDelegate);
+void (*wkSetPainterForPainterController)(WKScrollbarPainterControllerRef, WKScrollbarPainterRef, bool isHorizontal);
+WKScrollbarPainterRef (*wkVerticalScrollbarPainterForController)(WKScrollbarPainterControllerRef);
+WKScrollbarPainterRef (*wkHorizontalScrollbarPainterForController)(WKScrollbarPainterControllerRef);
+void (*wkSetScrollbarPainterControllerStyle)(WKScrollbarPainterControllerRef, int newStyle);
+void (*wkContentAreaScrolled)(WKScrollbarPainterControllerRef);
+void (*wkContentAreaWillPaint)(WKScrollbarPainterControllerRef);
+void (*wkMouseEnteredContentArea)(WKScrollbarPainterControllerRef);
+void (*wkMouseExitedContentArea)(WKScrollbarPainterControllerRef);
+void (*wkMouseMovedInContentArea)(WKScrollbarPainterControllerRef);
+void (*wkWillStartLiveResize)(WKScrollbarPainterControllerRef);
+void (*wkContentAreaResized)(WKScrollbarPainterControllerRef);
+void (*wkWillEndLiveResize)(WKScrollbarPainterControllerRef);
+void (*wkContentAreaDidShow)(WKScrollbarPainterControllerRef);
+void (*wkContentAreaDidHide)(WKScrollbarPainterControllerRef);
+
+bool (*wkScrollbarPainterUsesOverlayScrollers)(void);
#endif
+
+void (*wkUnregisterUniqueIdForElement)(id element);
+void (*wkAccessibilityHandleFocusChanged)(void);
+CFTypeID (*wkGetAXTextMarkerTypeID)(void);
+CFTypeID (*wkGetAXTextMarkerRangeTypeID)(void);
+CFTypeRef (*wkCreateAXTextMarkerRange)(CFTypeRef start, CFTypeRef end);
+CFTypeRef (*wkCopyAXTextMarkerRangeStart)(CFTypeRef range);
+CFTypeRef (*wkCopyAXTextMarkerRangeEnd)(CFTypeRef range);
+CFTypeRef (*wkCreateAXTextMarker)(const void *bytes, size_t len);
+BOOL (*wkGetBytesFromAXTextMarker)(CFTypeRef textMarker, void *bytes, size_t length);
+AXUIElementRef (*wkCreateAXUIElementRef)(id element);
+
diff --git a/Source/WebCore/platform/mac/WheelEventMac.mm b/Source/WebCore/platform/mac/WheelEventMac.mm
index d4fc698..74265d1 100644
--- a/Source/WebCore/platform/mac/WheelEventMac.mm
+++ b/Source/WebCore/platform/mac/WheelEventMac.mm
@@ -64,6 +64,7 @@ PlatformWheelEvent::PlatformWheelEvent(NSEvent* event, NSView *windowView)
, m_altKey([event modifierFlags] & NSAlternateKeyMask)
, m_metaKey([event modifierFlags] & NSCommandKeyMask)
, m_phase(phaseForEvent(event))
+ , m_timestamp([event timestamp])
{
BOOL continuous;
@@ -71,11 +72,13 @@ PlatformWheelEvent::PlatformWheelEvent(NSEvent* event, NSView *windowView)
if (continuous) {
m_wheelTicksX = m_deltaX / static_cast<float>(Scrollbar::pixelsPerLineStep());
m_wheelTicksY = m_deltaY / static_cast<float>(Scrollbar::pixelsPerLineStep());
+ m_hasPreciseScrollingDeltas = true;
} else {
m_wheelTicksX = m_deltaX;
m_wheelTicksY = m_deltaY;
m_deltaX *= static_cast<float>(Scrollbar::pixelsPerLineStep());
m_deltaY *= static_cast<float>(Scrollbar::pixelsPerLineStep());
+ m_hasPreciseScrollingDeltas = false;
}
}
diff --git a/Source/WebCore/platform/mac/WidgetMac.mm b/Source/WebCore/platform/mac/WidgetMac.mm
index f3c951a..96bcde2 100644
--- a/Source/WebCore/platform/mac/WidgetMac.mm
+++ b/Source/WebCore/platform/mac/WidgetMac.mm
@@ -252,7 +252,7 @@ void Widget::paint(GraphicsContext* p, const IntRect& r)
IntRect dirtyRect = r;
dirtyRect.move(-transformOrigin.x(), -transformOrigin.y());
if (![view isFlipped])
- dirtyRect.setY([view bounds].size.height - dirtyRect.bottom());
+ dirtyRect.setY([view bounds].size.height - dirtyRect.maxY());
[view displayRectIgnoringOpacity:dirtyRect];
@@ -296,7 +296,7 @@ void Widget::paint(GraphicsContext* p, const IntRect& r)
IntRect dirtyRect = r;
dirtyRect.move(-transformOrigin.x(), -transformOrigin.y());
if (![view isFlipped])
- dirtyRect.setY([view bounds].size.height - dirtyRect.bottom());
+ dirtyRect.setY([view bounds].size.height - dirtyRect.maxY());
BEGIN_BLOCK_OBJC_EXCEPTIONS;
{
diff --git a/Source/WebCore/platform/network/BlobRegistryImpl.cpp b/Source/WebCore/platform/network/BlobRegistryImpl.cpp
index 2c4e8fa..83517f1 100644
--- a/Source/WebCore/platform/network/BlobRegistryImpl.cpp
+++ b/Source/WebCore/platform/network/BlobRegistryImpl.cpp
@@ -68,7 +68,9 @@ PassRefPtr<ResourceHandle> BlobRegistryImpl::createResourceHandle(const Resource
if (!shouldLoadResource(request))
return 0;
- return BlobResourceHandle::create(m_blobs.get(request.url().string()), request, client);
+ RefPtr<BlobResourceHandle> handle = BlobResourceHandle::create(m_blobs.get(request.url().string()), request, client);
+ handle->start();
+ return handle.release();
}
bool BlobRegistryImpl::loadResourceSynchronously(const ResourceRequest& request, ResourceError& error, ResourceResponse& response, Vector<char>& data)
diff --git a/Source/WebCore/platform/network/BlobResourceHandle.cpp b/Source/WebCore/platform/network/BlobResourceHandle.cpp
index 753052a..24c9088 100644
--- a/Source/WebCore/platform/network/BlobResourceHandle.cpp
+++ b/Source/WebCore/platform/network/BlobResourceHandle.cpp
@@ -138,11 +138,6 @@ void BlobResourceHandle::loadResourceSynchronously(PassRefPtr<BlobStorageData> b
handle->start();
}
-static void delayedStart(void* context)
-{
- static_cast<BlobResourceHandle*>(context)->start();
-}
-
BlobResourceHandle::BlobResourceHandle(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceHandleClient* client, bool async)
: ResourceHandle(request, client, false, false)
, m_blobData(blobData)
@@ -158,11 +153,9 @@ BlobResourceHandle::BlobResourceHandle(PassRefPtr<BlobStorageData> blobData, con
, m_readItemCount(0)
, m_fileOpened(false)
{
- if (m_async) {
- // We need to take a ref.
+ if (m_async)
m_asyncStream = client->createAsyncFileStream(this);
- callOnMainThread(delayedStart, this);
- } else
+ else
m_stream = FileStream::create();
}
@@ -187,10 +180,32 @@ void BlobResourceHandle::cancel()
}
m_aborted = true;
+
+ ResourceHandle::cancel();
+}
+
+void delayedStartBlobResourceHandle(void* context)
+{
+ RefPtr<BlobResourceHandle> handle = adoptRef(static_cast<BlobResourceHandle*>(context));
+ handle->doStart();
}
void BlobResourceHandle::start()
{
+ if (m_async) {
+ // Keep BlobResourceHandle alive until delayedStartBlobResourceHandle runs.
+ ref();
+
+ // Finish this async call quickly and return.
+ callOnMainThread(delayedStartBlobResourceHandle, this);
+ return;
+ }
+
+ doStart();
+}
+
+void BlobResourceHandle::doStart()
+{
// Do not continue if the request is aborted or an error occurs.
if (m_aborted || m_errorCode)
return;
@@ -578,10 +593,23 @@ void BlobResourceHandle::notifyFail(int errorCode)
client()->didFail(this, ResourceError(String(), errorCode, firstRequest().url(), String()));
}
+static void doNotifyFinish(void* context)
+{
+ BlobResourceHandle* handle = static_cast<BlobResourceHandle*>(context);
+ if (handle->client())
+ handle->client()->didFinishLoading(handle, 0);
+}
+
void BlobResourceHandle::notifyFinish()
{
- if (client())
- client()->didFinishLoading(this, 0);
+ if (m_async) {
+ // Schedule to notify the client from a standalone function because the client might dispose the handle immediately from the callback function
+ // while we still have BlobResourceHandle calls in the stack.
+ callOnMainThread(doNotifyFinish, this);
+ return;
+ }
+
+ doNotifyFinish(this);
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/BlobResourceHandle.h b/Source/WebCore/platform/network/BlobResourceHandle.h
index 63e8578..1e9e94a 100644
--- a/Source/WebCore/platform/network/BlobResourceHandle.h
+++ b/Source/WebCore/platform/network/BlobResourceHandle.h
@@ -69,9 +69,12 @@ public:
int readSync(char*, int);
private:
+ friend void delayedStartBlobResourceHandle(void*);
+
BlobResourceHandle(PassRefPtr<BlobStorageData>, const ResourceRequest&, ResourceHandleClient*, bool async);
virtual ~BlobResourceHandle();
+ void doStart();
void getSizeForNext();
void seek();
void consumeData(const char* data, int bytesRead);
diff --git a/Source/WebCore/platform/network/FormData.cpp b/Source/WebCore/platform/network/FormData.cpp
index 16f98ad..9784b7f 100644
--- a/Source/WebCore/platform/network/FormData.cpp
+++ b/Source/WebCore/platform/network/FormData.cpp
@@ -209,14 +209,16 @@ void FormData::appendKeyValuePairItems(const FormDataList& list, const TextEncod
name = file->webkitRelativePath().isEmpty() ? file->name() : file->webkitRelativePath();
#else
name = file->name();
-#endif
-
+#endif
// Let the application specify a filename if it's going to generate a replacement file for the upload.
- if (Page* page = document->page()) {
- String generatedFileName;
- shouldGenerateFile = page->chrome()->client()->shouldReplaceWithGeneratedFileForUpload(file->path(), generatedFileName);
- if (shouldGenerateFile)
- name = generatedFileName;
+ const String& path = file->path();
+ if (!path.isEmpty()) {
+ if (Page* page = document->page()) {
+ String generatedFileName;
+ shouldGenerateFile = page->chrome()->client()->shouldReplaceWithGeneratedFileForUpload(path, generatedFileName);
+ if (shouldGenerateFile)
+ name = generatedFileName;
+ }
}
} else {
// For non-file blob, use the identifier part of the URL as the name.
@@ -364,7 +366,9 @@ static void encode(Encoder& encoder, const FormDataElement& element)
static bool decode(Decoder& decoder, FormDataElement& element)
{
- uint32_t type = element.m_type;
+ uint32_t type;
+ if (!decoder.decodeUInt32(type))
+ return false;
switch (type) {
case FormDataElement::data: {
@@ -432,7 +436,7 @@ void FormData::encodeForBackForward(Encoder& encoder) const
encoder.encodeBool(m_hasGeneratedFiles);
- encoder.encodeBool(m_identifier);
+ encoder.encodeInt64(m_identifier);
}
PassRefPtr<FormData> FormData::decodeForBackForward(Decoder& decoder)
diff --git a/Source/WebCore/platform/network/FormDataBuilder.cpp b/Source/WebCore/platform/network/FormDataBuilder.cpp
index da28fc2..e973f99 100644
--- a/Source/WebCore/platform/network/FormDataBuilder.cpp
+++ b/Source/WebCore/platform/network/FormDataBuilder.cpp
@@ -94,10 +94,7 @@ TextEncoding FormDataBuilder::encodingFromAcceptCharset(const String& acceptChar
return encoding;
}
- if (Frame* frame = document->frame())
- return frame->loader()->writer()->encoding();
-
- return Latin1Encoding();
+ return document->inputEncoding();
}
Vector<char> FormDataBuilder::generateUniqueBoundaryString()
diff --git a/Source/WebCore/platform/network/ProtectionSpaceHash.h b/Source/WebCore/platform/network/ProtectionSpaceHash.h
index 08716b5..9934321 100644
--- a/Source/WebCore/platform/network/ProtectionSpaceHash.h
+++ b/Source/WebCore/platform/network/ProtectionSpaceHash.h
@@ -42,11 +42,11 @@ struct ProtectionSpaceHash {
protectionSpace.realm().impl() ? protectionSpace.realm().impl()->hash() : 0
};
- unsigned codeCount = sizeof(hashCodes) / sizeof(UChar);
+ unsigned codeCount = sizeof(hashCodes);
// Ignore realm for proxies.
if (protectionSpace.isProxy())
- codeCount -= sizeof(hashCodes[0]) / sizeof(UChar);
- return StringImpl::computeHash(reinterpret_cast<UChar*>(hashCodes), codeCount);
+ codeCount -= sizeof(hashCodes[0]);
+ return WTF::StringHasher::createBlobHash(hashCodes, codeCount);
}
static bool equal(const ProtectionSpace& a, const ProtectionSpace& b) { return a == b; }
diff --git a/Source/WebCore/platform/network/ResourceHandle.h b/Source/WebCore/platform/network/ResourceHandle.h
index bb94b59..c2a0b8e 100644
--- a/Source/WebCore/platform/network/ResourceHandle.h
+++ b/Source/WebCore/platform/network/ResourceHandle.h
@@ -41,7 +41,7 @@ typedef struct _SoupSession SoupSession;
typedef const struct __CFData * CFDataRef;
#endif
-#if PLATFORM(WIN)
+#if USE(WININET)
typedef unsigned long DWORD;
typedef unsigned long DWORD_PTR;
typedef void* LPVOID;
@@ -173,7 +173,7 @@ public:
bool hasAuthenticationChallenge() const;
void clearAuthentication();
- void cancel();
+ virtual void cancel();
// The client may be 0, in which case no callbacks will be made.
ResourceHandleClient* client() const;
diff --git a/Source/WebCore/platform/network/ResourceHandleInternal.h b/Source/WebCore/platform/network/ResourceHandleInternal.h
index ed66944..5512062 100644
--- a/Source/WebCore/platform/network/ResourceHandleInternal.h
+++ b/Source/WebCore/platform/network/ResourceHandleInternal.h
@@ -46,8 +46,9 @@
#endif
#if USE(SOUP)
-#include "soup-requester.h"
#include <GRefPtr.h>
+#define LIBSOUP_USE_UNSTABLE_REQUEST_API
+#include <libsoup/soup-request.h>
#include <libsoup/soup.h>
class Frame;
#endif
@@ -114,6 +115,8 @@ namespace WebCore {
, m_cancelled(false)
, m_buffer(0)
, m_total(0)
+ , m_bodySize(0)
+ , m_bodyDataSent(0)
, m_idleHandler(0)
, m_gotChunkHandler(0)
#endif
@@ -132,9 +135,6 @@ namespace WebCore {
m_user = url.user();
m_pass = url.pass();
m_firstRequest.removeCredentials();
-#if USE(SOUP)
- m_requester = adoptGRef(webkit_soup_requester_new());
-#endif
}
~ResourceHandleInternal();
@@ -190,12 +190,13 @@ namespace WebCore {
GRefPtr<SoupMessage> m_soupMessage;
ResourceResponse m_response;
bool m_cancelled;
- GRefPtr<WebKitSoupRequest> m_soupRequest;
- GRefPtr<WebKitSoupRequester> m_requester;
+ GRefPtr<SoupRequest> m_soupRequest;
GRefPtr<GInputStream> m_inputStream;
GRefPtr<GCancellable> m_cancellable;
char* m_buffer;
gsize m_total;
+ unsigned long m_bodySize;
+ unsigned long m_bodyDataSent;
guint m_idleHandler;
RefPtr<NetworkingContext> m_context;
gulong m_gotChunkHandler;
diff --git a/Source/WebCore/platform/network/ResourceRequestBase.cpp b/Source/WebCore/platform/network/ResourceRequestBase.cpp
index ae8316a..ba58461 100644
--- a/Source/WebCore/platform/network/ResourceRequestBase.cpp
+++ b/Source/WebCore/platform/network/ResourceRequestBase.cpp
@@ -45,6 +45,7 @@ PassOwnPtr<ResourceRequest> ResourceRequestBase::adopt(PassOwnPtr<CrossThreadRes
request->setTimeoutInterval(data->m_timeoutInterval);
request->setFirstPartyForCookies(data->m_firstPartyForCookies);
request->setHTTPMethod(data->m_httpMethod);
+ request->setPriority(data->m_priority);
request->setTargetType(data->m_targetType);
request->updateResourceRequest();
@@ -78,6 +79,7 @@ PassOwnPtr<CrossThreadResourceRequestData> ResourceRequestBase::copyData() const
data->m_firstPartyForCookies = firstPartyForCookies().copy();
data->m_httpMethod = httpMethod().crossThreadString();
data->m_httpHeaders = httpHeaderFields().copyData();
+ data->m_priority = priority();
data->m_targetType = m_targetType;
data->m_responseContentDispositionEncodingFallbackArray.reserveInitialCapacity(m_responseContentDispositionEncodingFallbackArray.size());
@@ -314,6 +316,23 @@ void ResourceRequestBase::setAllowCookies(bool allowCookies)
m_platformRequestUpdated = false;
}
+ResourceLoadPriority ResourceRequestBase::priority() const
+{
+ updateResourceRequest();
+
+ return m_priority;
+}
+
+void ResourceRequestBase::setPriority(ResourceLoadPriority priority)
+{
+ updateResourceRequest();
+
+ m_priority = priority;
+
+ if (url().protocolInHTTPFamily())
+ m_platformRequestUpdated = false;
+}
+
void ResourceRequestBase::addHTTPHeaderField(const AtomicString& name, const String& value)
{
updateResourceRequest();
@@ -352,6 +371,9 @@ bool equalIgnoringHeaderFields(const ResourceRequestBase& a, const ResourceReque
if (a.allowCookies() != b.allowCookies())
return false;
+ if (a.priority() != b.priority())
+ return false;
+
FormData* formDataA = a.httpBody();
FormData* formDataB = b.httpBody();
diff --git a/Source/WebCore/platform/network/ResourceRequestBase.h b/Source/WebCore/platform/network/ResourceRequestBase.h
index dce33db..9cc9148 100644
--- a/Source/WebCore/platform/network/ResourceRequestBase.h
+++ b/Source/WebCore/platform/network/ResourceRequestBase.h
@@ -29,8 +29,9 @@
#define ResourceRequestBase_h
#include "FormData.h"
-#include "KURL.h"
#include "HTTPHeaderMap.h"
+#include "KURL.h"
+#include "ResourceLoadPriority.h"
#include <wtf/OwnPtr.h>
@@ -128,6 +129,9 @@ namespace WebCore {
bool allowCookies() const;
void setAllowCookies(bool allowCookies);
+ ResourceLoadPriority priority() const;
+ void setPriority(ResourceLoadPriority);
+
bool isConditional() const;
// Whether the associated ResourceHandleClient needs to be notified of
@@ -157,6 +161,7 @@ namespace WebCore {
, m_reportUploadProgress(false)
, m_reportLoadTiming(false)
, m_reportRawHeaders(false)
+ , m_priority(ResourceLoadPriorityLow)
, m_targetType(TargetIsSubresource)
{
}
@@ -172,6 +177,7 @@ namespace WebCore {
, m_reportUploadProgress(false)
, m_reportLoadTiming(false)
, m_reportRawHeaders(false)
+ , m_priority(ResourceLoadPriorityLow)
, m_targetType(TargetIsSubresource)
{
}
@@ -197,6 +203,7 @@ namespace WebCore {
bool m_reportUploadProgress;
bool m_reportLoadTiming;
bool m_reportRawHeaders;
+ ResourceLoadPriority m_priority;
TargetType m_targetType;
private:
@@ -223,11 +230,20 @@ namespace WebCore {
Vector<String> m_responseContentDispositionEncodingFallbackArray;
RefPtr<FormData> m_httpBody;
bool m_allowCookies;
+ ResourceLoadPriority m_priority;
ResourceRequestBase::TargetType m_targetType;
};
unsigned initializeMaximumHTTPConnectionCountPerHost();
+#if PLATFORM(CF)
+ bool isHTTPPipeliningEnabled();
+ bool shouldForceHTTPPipeliningPriorityHigh();
+#else
+ inline bool isHTTPPipeliningEnabled() { return false; }
+ inline bool shouldForceHTTPPipeliningPriorityHigh() { return false; }
+#endif
+
} // namespace WebCore
#endif // ResourceRequestBase_h
diff --git a/Source/WebCore/platform/network/cf/DNSCFNet.cpp b/Source/WebCore/platform/network/cf/DNSCFNet.cpp
index 166abbf..b6f9922 100644
--- a/Source/WebCore/platform/network/cf/DNSCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/DNSCFNet.cpp
@@ -36,6 +36,7 @@
#if PLATFORM(WIN)
#include "LoaderRunLoopCF.h"
+#include <CFNetwork/CFNetwork.h>
#endif
#if defined(BUILDING_ON_LEOPARD)
diff --git a/Source/WebCore/platform/network/cf/DownloadBundle.h b/Source/WebCore/platform/network/cf/DownloadBundle.h
new file mode 100644
index 0000000..cf90908
--- /dev/null
+++ b/Source/WebCore/platform/network/cf/DownloadBundle.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DownloadBundle_h
+#define DownloadBundle_h
+
+#include <wtf/Forward.h>
+
+typedef const struct __CFData* CFDataRef;
+
+namespace WebCore {
+namespace DownloadBundle {
+
+bool appendResumeData(CFDataRef resumeData, const String& bundlePath);
+CFDataRef extractResumeData(const String& bundlePath);
+const String& fileExtension();
+
+} // namespace DownloadBundle
+} // namespace WebCore
+
+#endif // DownloadBundle_h
diff --git a/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp b/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp
index eb0ec3a..8bc8f08 100644
--- a/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp
@@ -145,17 +145,8 @@ static void advanceCurrentStream(FormStreamFields *form)
char* data = nextInput.m_data.releaseBuffer();
form->currentStream = CFReadStreamCreateWithBytesNoCopy(0, reinterpret_cast<const UInt8*>(data), size, kCFAllocatorNull);
form->currentData = data;
- } else {
- CFStringRef filename = nextInput.m_filename.createCFString();
-#if PLATFORM(WIN)
- CFURLRef fileURL = CFURLCreateWithFileSystemPath(0, filename, kCFURLWindowsPathStyle, FALSE);
-#else
- CFURLRef fileURL = CFURLCreateWithFileSystemPath(0, filename, kCFURLPOSIXPathStyle, FALSE);
-#endif
- CFRelease(filename);
- form->currentStream = CFReadStreamCreateWithFile(0, fileURL);
- CFRelease(fileURL);
- }
+ } else
+ form->currentStream = CFReadStreamCreateWithFile(0, pathAsURL(nextInput.m_filename).get());
form->remainingElements.removeLast();
// Set up the callback.
diff --git a/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp b/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp
index 249fe43..a7cc639 100644
--- a/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp
+++ b/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp
@@ -28,6 +28,7 @@
#if USE(CFNETWORK)
+#include <CoreFoundation/CoreFoundation.h>
#include <wtf/Threading.h>
namespace WebCore {
diff --git a/Source/WebCore/platform/network/cf/LoaderRunLoopCF.h b/Source/WebCore/platform/network/cf/LoaderRunLoopCF.h
index f66128c..e0d3ba4 100644
--- a/Source/WebCore/platform/network/cf/LoaderRunLoopCF.h
+++ b/Source/WebCore/platform/network/cf/LoaderRunLoopCF.h
@@ -32,6 +32,8 @@
#error This code is not needed on platforms other than Windows, because main thread's CFRunLoop can be used.
#endif
+typedef struct __CFRunLoop* CFRunLoopRef;
+
namespace WebCore {
CFRunLoopRef loaderRunLoop();
diff --git a/Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp b/Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp
index 3bef808..57d714b 100644
--- a/Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp
@@ -29,6 +29,10 @@
#include "KURL.h"
#include <wtf/RetainPtr.h>
+#if PLATFORM(WIN)
+#include <CFNetwork/CFNetwork.h>
+#endif
+
namespace WebCore {
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
diff --git a/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp b/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
index 66ae5a0..52b100f 100644
--- a/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
@@ -126,12 +126,7 @@ static void setDefaultMIMEType(CFURLResponseRef response)
static String encodeBasicAuthorization(const String& user, const String& password)
{
- CString unencodedString = (user + ":" + password).utf8();
- Vector<char> unencoded(unencodedString.length());
- std::copy(unencodedString.data(), unencodedString.data() + unencodedString.length(), unencoded.begin());
- Vector<char> encoded;
- base64Encode(unencoded, encoded);
- return String(encoded.data(), encoded.size());
+ return base64Encode((user + ":" + password).utf8());
}
CFURLRequestRef willSendRequest(CFURLConnectionRef conn, CFURLRequestRef cfRequest, CFURLResponseRef cfRedirectResponse, const void* clientInfo)
diff --git a/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp b/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp
index 410a649..7a1dfd5 100644
--- a/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp
@@ -26,16 +26,22 @@
#include "config.h"
#include "ResourceRequestCFNet.h"
-#if USE(CFNETWORK)
-
-#include "FormDataStreamCFNet.h"
#include "ResourceRequest.h"
+#if PLATFORM(MAC)
+#include "WebCoreSystemInterface.h"
+#endif
+
+#if USE(CFNETWORK)
+#include "FormDataStreamCFNet.h"
#include <CFNetwork/CFURLRequestPriv.h>
#include <WebKitSystemInterface/WebKitSystemInterface.h>
+#endif
namespace WebCore {
+#if USE(CFNETWORK)
+
typedef void (*CFURLRequestSetContentDispositionEncodingFallbackArrayFunction)(CFMutableURLRequestRef, CFArrayRef);
typedef CFArrayRef (*CFURLRequestCopyContentDispositionEncodingFallbackArrayFunction)(CFURLRequestRef);
@@ -189,12 +195,43 @@ void ResourceRequest::doUpdateResourceRequest()
m_httpBody = httpBodyFromRequest(m_cfRequest.get());
}
+#endif // USE(CFNETWORK)
+
unsigned initializeMaximumHTTPConnectionCountPerHost()
{
static const unsigned preferredConnectionCount = 6;
- return wkInitializeMaximumHTTPConnectionCountPerHost(preferredConnectionCount);
+ static const unsigned unlimitedConnectionCount = 10000;
+
+ // Always set the connection count per host, even when pipelining.
+ unsigned maximumHTTPConnectionCountPerHost = wkInitializeMaximumHTTPConnectionCountPerHost(preferredConnectionCount);
+
+#if PLATFORM(MAC)
+ if (isHTTPPipeliningEnabled()) {
+ // When pipelining do not rate-limit requests sent from WebCore since CFNetwork handles that.
+ return unlimitedConnectionCount;
+ }
+#endif
+
+ return maximumHTTPConnectionCountPerHost;
}
-} // namespace WebCore
+static inline bool readBooleanPreference(CFStringRef key)
+{
+ Boolean keyExistsAndHasValidFormat;
+ Boolean result = CFPreferencesGetAppBooleanValue(key, kCFPreferencesCurrentApplication, &keyExistsAndHasValidFormat);
+ return keyExistsAndHasValidFormat ? result : false;
+}
-#endif // USE(CFNETWORK)
+bool isHTTPPipeliningEnabled()
+{
+ static bool isEnabled = readBooleanPreference(CFSTR("WebKitEnableHTTPPipelining"));
+ return isEnabled;
+}
+
+bool shouldForceHTTPPipeliningPriorityHigh()
+{
+ static bool shouldForcePriorityHigh = readBooleanPreference(CFSTR("WebKitForceHTTPPipeliningPriorityHigh"));
+ return shouldForcePriorityHigh;
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h b/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h
index 39587a4..09f4cea 100644
--- a/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h
+++ b/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h
@@ -26,18 +26,55 @@
#ifndef ResourceRequestCFNet_h
#define ResourceRequestCFNet_h
-#if USE(CFNETWORK)
+#include "ResourceLoadPriority.h"
+#if USE(CFNETWORK)
typedef const struct _CFURLRequest* CFURLRequestRef;
+#endif
namespace WebCore {
- class ResourceRequest;
+class ResourceRequest;
+
+#if USE(CFNETWORK)
+void getResourceRequest(ResourceRequest&, CFURLRequestRef);
+CFURLRequestRef cfURLRequest(const ResourceRequest&);
+#endif
+
+inline ResourceLoadPriority mapHTTPPipeliningPriorityToResourceLoadPriority(int priority)
+{
+ switch (priority) {
+ case 0:
+ return ResourceLoadPriorityLow;
+ case 1:
+ return ResourceLoadPriorityMedium;
+ case 2:
+ return ResourceLoadPriorityHigh;
+ default:
+ ASSERT_NOT_REACHED();
+ return ResourceLoadPriorityLowest;
+ }
+}
+
+inline int mapResourceLoadPriorityToHTTPPipeliningPriority(ResourceLoadPriority priority)
+{
+ switch (priority) {
+ case ResourceLoadPriorityVeryLow:
+ case ResourceLoadPriorityLow:
+ return 0;
+ case ResourceLoadPriorityMedium:
+ return 1;
+ case ResourceLoadPriorityHigh:
+ return 2;
+ case ResourceLoadPriorityUnresolved:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
- void getResourceRequest(ResourceRequest&, CFURLRequestRef);
- CFURLRequestRef cfURLRequest(const ResourceRequest&);
+ ASSERT_NOT_REACHED();
+ return 0;
}
-#endif // USE(CFNETWORK)
+} // namespace WebCore
#endif // ResourceRequestCFNet_h
diff --git a/Source/WebCore/platform/network/cf/SocketStreamHandle.h b/Source/WebCore/platform/network/cf/SocketStreamHandle.h
index df1d4a3..fbda3bc 100644
--- a/Source/WebCore/platform/network/cf/SocketStreamHandle.h
+++ b/Source/WebCore/platform/network/cf/SocketStreamHandle.h
@@ -36,6 +36,7 @@
#include "SocketStreamHandleBase.h"
#include <wtf/RetainPtr.h>
+typedef struct __CFHTTPMessage* CFHTTPMessageRef;
namespace WebCore {
diff --git a/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp b/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
index 821b1ca..06454a7 100644
--- a/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
+++ b/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
@@ -47,6 +47,7 @@
#if PLATFORM(WIN)
#include "LoaderRunLoopCF.h"
+#include <CFNetwork/CFNetwork.h>
#include <WebKitSystemInterface/WebKitSystemInterface.h>
#else
#include "WebCoreSystemInterface.h"
diff --git a/Source/WebCore/platform/network/chromium/ResourceRequest.cpp b/Source/WebCore/platform/network/chromium/ResourceRequest.cpp
index 69591c1..519c63f 100644
--- a/Source/WebCore/platform/network/chromium/ResourceRequest.cpp
+++ b/Source/WebCore/platform/network/chromium/ResourceRequest.cpp
@@ -43,6 +43,7 @@ PassOwnPtr<CrossThreadResourceRequestData> ResourceRequest::doPlatformCopyData(P
data->m_requestorProcessID = m_requestorProcessID;
data->m_appCacheHostID = m_appCacheHostID;
data->m_hasUserGesture = m_hasUserGesture;
+ data->m_downloadToFile = m_downloadToFile;
return data;
}
@@ -52,6 +53,7 @@ void ResourceRequest::doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>
m_requestorProcessID = data->m_requestorProcessID;
m_appCacheHostID = data->m_appCacheHostID;
m_hasUserGesture = data->m_hasUserGesture;
+ m_downloadToFile = data->m_downloadToFile;
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/chromium/ResourceRequest.h b/Source/WebCore/platform/network/chromium/ResourceRequest.h
index 41ad6e0..07b31eb 100644
--- a/Source/WebCore/platform/network/chromium/ResourceRequest.h
+++ b/Source/WebCore/platform/network/chromium/ResourceRequest.h
@@ -42,6 +42,7 @@ namespace WebCore {
, m_requestorProcessID(0)
, m_appCacheHostID(0)
, m_hasUserGesture(false)
+ , m_downloadToFile(false)
{
}
@@ -51,6 +52,7 @@ namespace WebCore {
, m_requestorProcessID(0)
, m_appCacheHostID(0)
, m_hasUserGesture(false)
+ , m_downloadToFile(false)
{
}
@@ -60,6 +62,7 @@ namespace WebCore {
, m_requestorProcessID(0)
, m_appCacheHostID(0)
, m_hasUserGesture(false)
+ , m_downloadToFile(false)
{
setHTTPReferrer(referrer);
}
@@ -70,6 +73,7 @@ namespace WebCore {
, m_requestorProcessID(0)
, m_appCacheHostID(0)
, m_hasUserGesture(false)
+ , m_downloadToFile(false)
{
}
@@ -92,6 +96,10 @@ namespace WebCore {
bool hasUserGesture() const { return m_hasUserGesture; }
void setHasUserGesture(bool hasUserGesture) { m_hasUserGesture = hasUserGesture; }
+ // True if request should be downloaded to file.
+ bool downloadToFile() const { return m_downloadToFile; }
+ void setDownloadToFile(bool downloadToFile) { m_downloadToFile = downloadToFile; }
+
private:
friend class ResourceRequestBase;
@@ -105,6 +113,7 @@ namespace WebCore {
int m_requestorProcessID;
int m_appCacheHostID;
bool m_hasUserGesture;
+ bool m_downloadToFile;
};
struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {
@@ -112,6 +121,7 @@ namespace WebCore {
int m_requestorProcessID;
int m_appCacheHostID;
bool m_hasUserGesture;
+ bool m_downloadToFile;
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/chromium/ResourceResponse.cpp b/Source/WebCore/platform/network/chromium/ResourceResponse.cpp
index acd44d3..fc8ac62 100644
--- a/Source/WebCore/platform/network/chromium/ResourceResponse.cpp
+++ b/Source/WebCore/platform/network/chromium/ResourceResponse.cpp
@@ -39,6 +39,8 @@ PassOwnPtr<CrossThreadResourceResponseData> ResourceResponse::doPlatformCopyData
data->m_wasAlternateProtocolAvailable = m_wasAlternateProtocolAvailable;
data->m_wasFetchedViaProxy = m_wasFetchedViaProxy;
data->m_responseTime = m_responseTime;
+ data->m_socketAddress = m_socketAddress;
+ data->m_downloadFilePath = m_downloadFilePath;
return data;
}
@@ -53,6 +55,8 @@ void ResourceResponse::doPlatformAdopt(PassOwnPtr<CrossThreadResourceResponseDat
m_wasAlternateProtocolAvailable = data->m_wasAlternateProtocolAvailable;
m_wasFetchedViaProxy = data->m_wasFetchedViaProxy;
m_responseTime = data->m_responseTime;
+ m_socketAddress = data->m_socketAddress;
+ m_downloadFilePath = data->m_downloadFilePath;
}
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/chromium/ResourceResponse.h b/Source/WebCore/platform/network/chromium/ResourceResponse.h
index 5e99994..35f13d1 100644
--- a/Source/WebCore/platform/network/chromium/ResourceResponse.h
+++ b/Source/WebCore/platform/network/chromium/ResourceResponse.h
@@ -96,6 +96,12 @@ namespace WebCore {
double responseTime() const { return m_responseTime; }
void setResponseTime(double responseTime) { m_responseTime = responseTime; }
+ const String& socketAddress() const { return m_socketAddress; }
+ void setSocketAddress(const String& value) { m_socketAddress = value; }
+
+ const String& downloadFilePath() const { return m_downloadFilePath; }
+ void setDownloadFilePath(const String& downloadFilePath) { m_downloadFilePath = downloadFilePath; }
+
private:
friend class ResourceResponseBase;
@@ -143,6 +149,13 @@ namespace WebCore {
// The time at which the response headers were received. For cached
// responses, this time could be "far" in the past.
double m_responseTime;
+
+ // Remote address of the socket which fetched this resource, for presenting
+ // to inquisitive users. Can be "ipv4:port", "[ipv6]:port", or empty.
+ String m_socketAddress;
+
+ // The path to the downloaded file.
+ String m_downloadFilePath;
};
struct CrossThreadResourceResponseData : public CrossThreadResourceResponseDataBase {
@@ -155,6 +168,8 @@ namespace WebCore {
bool m_wasAlternateProtocolAvailable;
bool m_wasFetchedViaProxy;
double m_responseTime;
+ String m_socketAddress;
+ String m_downloadFilePath;
};
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/mac/AuthenticationMac.mm b/Source/WebCore/platform/network/mac/AuthenticationMac.mm
index efa42d9..a187187 100644
--- a/Source/WebCore/platform/network/mac/AuthenticationMac.mm
+++ b/Source/WebCore/platform/network/mac/AuthenticationMac.mm
@@ -31,6 +31,7 @@
#import "AuthenticationClient.h"
#import "Credential.h"
#import "ProtectionSpace.h"
+#import <wtf/UnusedParam.h>
#import <Foundation/NSURLAuthenticationChallenge.h>
#import <Foundation/NSURLCredential.h>
@@ -86,6 +87,20 @@ using namespace WebCore;
m_client->receivedCancellation(core(challenge));
}
+- (void)performDefaultHandlingForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
+{
+ // FIXME: <rdar://problem/8995483> Determine what, if anything, we should do here.
+ ASSERT_NOT_REACHED();
+ UNUSED_PARAM(challenge);
+}
+
+- (void)rejectProtectionSpaceAndContinueWithChallenge:(NSURLAuthenticationChallenge *)challenge
+{
+ // FIXME: <rdar://problem/8995483> Determine what, if anything, we should do here.
+ ASSERT_NOT_REACHED();
+ UNUSED_PARAM(challenge);
+}
+
@end
namespace WebCore {
diff --git a/Source/WebCore/platform/network/mac/FormDataStreamMac.mm b/Source/WebCore/platform/network/mac/FormDataStreamMac.mm
index 03f4579..eb6f601 100644
--- a/Source/WebCore/platform/network/mac/FormDataStreamMac.mm
+++ b/Source/WebCore/platform/network/mac/FormDataStreamMac.mm
@@ -185,9 +185,7 @@ static bool advanceCurrentStream(FormStreamFields* form)
}
#endif
const String& path = nextInput.m_shouldGenerateFile ? nextInput.m_generatedFilename : nextInput.m_filename;
- RetainPtr<CFStringRef> filename(AdoptCF, path.createCFString());
- RetainPtr<CFURLRef> fileURL(AdoptCF, CFURLCreateWithFileSystemPath(0, filename.get(), kCFURLPOSIXPathStyle, FALSE));
- form->currentStream = CFReadStreamCreateWithFile(0, fileURL.get());
+ form->currentStream = CFReadStreamCreateWithFile(0, pathAsURL(path).get());
if (!form->currentStream) {
// The file must have been removed or become unreadable.
return false;
diff --git a/Source/WebCore/platform/network/mac/ResourceHandleMac.mm b/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
index 84b656c..2d687c0 100644
--- a/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
+++ b/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
@@ -164,12 +164,7 @@ public:
#ifndef BUILDING_ON_TIGER
static String encodeBasicAuthorization(const String& user, const String& password)
{
- CString unencodedString = (user + ":" + password).utf8();
- Vector<char> unencoded(unencodedString.length());
- std::copy(unencodedString.data(), unencodedString.data() + unencodedString.length(), unencoded.begin());
- Vector<char> encoded;
- base64Encode(unencoded, encoded);
- return String(encoded.data(), encoded.size());
+ return base64Encode((user + ":" + password).utf8());
}
#endif
diff --git a/Source/WebCore/platform/network/mac/ResourceRequestMac.mm b/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
index f0357e5..640d237 100644
--- a/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
+++ b/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
@@ -31,6 +31,8 @@
#import "WebCoreSystemInterface.h"
#import "FormDataStreamMac.h"
+#import "ResourceRequestCFNet.h"
+#import "WebCoreSystemInterface.h"
#import <Foundation/Foundation.h>
@@ -65,7 +67,12 @@ void ResourceRequest::doUpdateResourceRequest()
if (NSString* method = [m_nsRequest.get() HTTPMethod])
m_httpMethod = method;
m_allowCookies = [m_nsRequest.get() HTTPShouldHandleCookies];
-
+
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+ if (isHTTPPipeliningEnabled() && !shouldForceHTTPPipeliningPriorityHigh())
+ m_priority = mapHTTPPipeliningPriorityToResourceLoadPriority(wkGetHTTPPipeliningPriority(m_nsRequest.get()));
+#endif
+
NSDictionary *headers = [m_nsRequest.get() allHTTPHeaderFields];
NSEnumerator *e = [headers keyEnumerator];
NSString *name;
@@ -111,6 +118,13 @@ void ResourceRequest::doUpdatePlatformRequest()
wkSupportsMultipartXMixedReplace(nsRequest);
#endif
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+ if (isHTTPPipeliningEnabled()) {
+ int priority = mapResourceLoadPriorityToHTTPPipeliningPriority(m_priority);
+ wkSetHTTPPipeliningPriority(nsRequest, shouldForceHTTPPipeliningPriorityHigh() ? 2 : priority);
+ }
+#endif
+
[nsRequest setCachePolicy:(NSURLRequestCachePolicy)cachePolicy()];
if (timeoutInterval() != unspecifiedTimeoutInterval)
[nsRequest setTimeoutInterval:timeoutInterval()];
@@ -154,12 +168,6 @@ void ResourceRequest::applyWebArchiveHackForMail()
// Hack because Mail checks for this property to detect data / archive loads
[NSURLProtocol setProperty:@"" forKey:@"WebDataRequest" inRequest:(NSMutableURLRequest *)nsURLRequest()];
}
-
-unsigned initializeMaximumHTTPConnectionCountPerHost()
-{
- static const unsigned preferredConnectionCount = 6;
- return wkInitializeMaximumHTTPConnectionCountPerHost(preferredConnectionCount);
-}
} // namespace WebCore
diff --git a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp
index e0d6e69..a98b4f4 100644
--- a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp
+++ b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp
@@ -35,6 +35,18 @@ QtNAMThreadSafeProxy::QtNAMThreadSafeProxy(QNetworkAccessManager *manager)
connect(this, SIGNAL(localSetCookiesRequested(const QUrl&, const QString&)), SLOT(localSetCookies(const QUrl&, const QString&)));
connect(this, SIGNAL(localCookiesForUrlRequested(const QUrl&, bool*, QList<QNetworkCookie>*)), SLOT(localCookiesForUrl(const QUrl&, bool*, QList<QNetworkCookie>*)));
connect(this, SIGNAL(localWillLoadFromCacheRequested(const QUrl&, bool*, bool*)), SLOT(localWillLoadFromCache(const QUrl&, bool*, bool*)));
+ connect(this, SIGNAL(hasCookieJarRequested(bool*, bool*)), SLOT(hasCookieJar(bool*, bool*)));
+}
+
+bool QtNAMThreadSafeProxy::hasCookieJar()
+{
+ bool result;
+ bool done = false;
+ emit hasCookieJarRequested(&done, &result);
+ QMutexLocker lock(&m_resultMutex);
+ while (!done)
+ m_resultWaitCondition.wait(&m_resultMutex);
+ return result;
}
void QtNAMThreadSafeProxy::localSetCookies(const QUrl& url, const QString& cookies)
@@ -69,6 +81,14 @@ void QtNAMThreadSafeProxy::localWillLoadFromCache(const QUrl& url, bool* done, b
m_resultWaitCondition.wakeAll();
}
+void QtNAMThreadSafeProxy::hasCookieJar(bool* done, bool* result)
+{
+ QMutexLocker lock(&m_resultMutex);
+ *result = !!m_manager->cookieJar();
+ *done = true;
+ m_resultWaitCondition.wakeAll();
+}
+
QtNetworkReplyThreadSafeProxy::QtNetworkReplyThreadSafeProxy(QNetworkAccessManager *manager)
: m_manager(manager)
, m_reply(0)
diff --git a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h
index ae963cf..4906fe2 100644
--- a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h
+++ b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h
@@ -67,15 +67,19 @@ public:
return result;
}
+ bool hasCookieJar();
+
signals:
void localSetCookiesRequested(const QUrl&, const QString& cookies);
void localCookiesForUrlRequested(const QUrl&, bool* done, QList<QNetworkCookie>* result);
void localWillLoadFromCacheRequested(const QUrl&, bool* done, bool* result);
+ void hasCookieJarRequested(bool* done, bool* result);
private slots:
void localSetCookies(const QUrl&, const QString& cookies);
void localCookiesForUrl(const QUrl&, bool* done, QList<QNetworkCookie>* result);
void localWillLoadFromCache(const QUrl&, bool* done, bool* result);
+ void hasCookieJar(bool* done, bool* result);
private:
QNetworkAccessManager* m_manager;
diff --git a/Source/WebCore/platform/network/soup/CookieJarSoup.cpp b/Source/WebCore/platform/network/soup/CookieJarSoup.cpp
index ba29622..e2c2f05 100644
--- a/Source/WebCore/platform/network/soup/CookieJarSoup.cpp
+++ b/Source/WebCore/platform/network/soup/CookieJarSoup.cpp
@@ -38,9 +38,7 @@ SoupCookieJar* defaultCookieJar()
cookiesInitialized = true;
cookieJar = soup_cookie_jar_new();
-#ifdef HAVE_LIBSOUP_2_29_90
soup_cookie_jar_set_accept_policy(cookieJar, SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
-#endif
}
return cookieJar;
@@ -67,18 +65,12 @@ void setCookies(Document* document, const KURL& url, const String& value)
GOwnPtr<SoupURI> origin(soup_uri_new(url.string().utf8().data()));
-#ifdef HAVE_LIBSOUP_2_29_90
GOwnPtr<SoupURI> firstParty(soup_uri_new(document->firstPartyForCookies().string().utf8().data()));
soup_cookie_jar_set_cookie_with_first_party(jar,
origin.get(),
firstParty.get(),
value.utf8().data());
-#else
- soup_cookie_jar_set_cookie(jar,
- origin.get(),
- value.utf8().data());
-#endif
}
String cookies(const Document* /*document*/, const KURL& url)
diff --git a/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp b/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
index a7170fe..3b1f157 100644
--- a/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
+++ b/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
@@ -45,12 +45,14 @@
#include "ResourceHandleInternal.h"
#include "ResourceResponse.h"
#include "SharedBuffer.h"
-#include "soup-request-http.h"
#include "TextEncoding.h"
#include <errno.h>
#include <fcntl.h>
#include <gio/gio.h>
#include <glib.h>
+#define LIBSOUP_USE_UNSTABLE_REQUEST_API
+#include <libsoup/soup-request-http.h>
+#include <libsoup/soup-requester.h>
#include <libsoup/soup.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -127,7 +129,7 @@ static void cleanupSoupRequestOperation(ResourceHandle*, bool isDestroying);
static void sendRequestCallback(GObject*, GAsyncResult*, gpointer);
static void readCallback(GObject*, GAsyncResult*, gpointer);
static void closeCallback(GObject*, GAsyncResult*, gpointer);
-static bool startGio(ResourceHandle*, KURL);
+static bool startNonHTTPRequest(ResourceHandle*, KURL);
ResourceHandleInternal::~ResourceHandleInternal()
{
@@ -145,14 +147,48 @@ ResourceHandle::~ResourceHandle()
cleanupSoupRequestOperation(this, true);
}
+static void ensureSessionIsInitialized(SoupSession* session)
+{
+ // Values taken from http://stevesouders.com/ua/index.php following
+ // the rule "Do What Every Other Modern Browser Is Doing". They seem
+ // to significantly improve page loading time compared to soup's
+ // default values.
+ static const int maxConnections = 60;
+ static const int maxConnectionsPerHost = 6;
+
+ if (g_object_get_data(G_OBJECT(session), "webkit-init"))
+ return;
+
+ SoupCookieJar* jar = SOUP_COOKIE_JAR(soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR));
+ if (!jar)
+ soup_session_add_feature(session, SOUP_SESSION_FEATURE(defaultCookieJar()));
+ else
+ setDefaultCookieJar(jar);
+
+ if (!soup_session_get_feature(session, SOUP_TYPE_LOGGER) && LogNetwork.state == WTFLogChannelOn) {
+ SoupLogger* logger = soup_logger_new(static_cast<SoupLoggerLogLevel>(SOUP_LOGGER_LOG_BODY), -1);
+ soup_session_add_feature(session, SOUP_SESSION_FEATURE(logger));
+ g_object_unref(logger);
+ }
+
+ SoupRequester* requester = soup_requester_new();
+ soup_session_add_feature(session, SOUP_SESSION_FEATURE(requester));
+ g_object_unref(requester);
+
+ g_object_set(session,
+ SOUP_SESSION_MAX_CONNS, maxConnections,
+ SOUP_SESSION_MAX_CONNS_PER_HOST, maxConnectionsPerHost,
+ NULL);
+
+ g_object_set_data(G_OBJECT(session), "webkit-init", reinterpret_cast<void*>(0xdeadbeef));
+}
+
void ResourceHandle::prepareForURL(const KURL &url)
{
-#ifdef HAVE_LIBSOUP_2_29_90
GOwnPtr<SoupURI> soupURI(soup_uri_new(url.prettyURL().utf8().data()));
if (!soupURI)
return;
soup_session_prepare_for_uri(ResourceHandle::defaultSession(), soupURI.get());
-#endif
}
// All other kinds of redirections, except for the *304* status code
@@ -206,14 +242,12 @@ static void restartedCallback(SoupMessage* msg, gpointer data)
if (d->m_cancelled)
return;
-#ifdef HAVE_LIBSOUP_2_29_90
// Update the first party in case the base URL changed with the redirect
String firstPartyString = request.firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
GOwnPtr<SoupURI> firstParty(soup_uri_new(firstPartyString.utf8().data()));
soup_message_set_first_party(d->m_soupMessage.get(), firstParty.get());
}
-#endif
}
static void contentSniffedCallback(SoupMessage*, const char*, GHashTable*, gpointer);
@@ -263,7 +297,26 @@ static void gotHeadersCallback(SoupMessage* msg, gpointer data)
client->didReceiveResponse(handle.get(), d->m_response);
}
-// This callback will not be called if the content sniffer is disabled in startHttp.
+static void wroteBodyDataCallback(SoupMessage*, SoupBuffer* buffer, gpointer data)
+{
+ RefPtr<ResourceHandle> handle = static_cast<ResourceHandle*>(data);
+ if (!handle)
+ return;
+
+ ASSERT(buffer);
+ ResourceHandleInternal* internal = handle->getInternal();
+ internal->m_bodyDataSent += buffer->length;
+
+ if (internal->m_cancelled)
+ return;
+ ResourceHandleClient* client = handle->client();
+ if (!client)
+ return;
+
+ client->didSendData(handle.get(), internal->m_bodyDataSent, internal->m_bodySize);
+}
+
+// This callback will not be called if the content sniffer is disabled in startHTTPRequest.
static void contentSniffedCallback(SoupMessage* msg, const char* sniffedType, GHashTable *params, gpointer data)
{
if (sniffedType) {
@@ -312,136 +365,11 @@ static void gotChunkCallback(SoupMessage* msg, SoupBuffer* chunk, gpointer data)
client->didReceiveData(handle.get(), chunk->data, chunk->length, false);
}
-static gboolean parseDataUrl(gpointer callbackData)
-{
- ResourceHandle* handle = static_cast<ResourceHandle*>(callbackData);
- ResourceHandleClient* client = handle->client();
- ResourceHandleInternal* d = handle->getInternal();
- if (d->m_cancelled)
- return false;
-
- d->m_idleHandler = 0;
-
- ASSERT(client);
- if (!client)
- return false;
-
- String url = handle->firstRequest().url().string();
- ASSERT(url.startsWith("data:", false));
-
- int index = url.find(',');
- if (index == -1) {
- client->cannotShowURL(handle);
- return false;
- }
-
- String mediaType = url.substring(5, index - 5);
-
- bool isBase64 = mediaType.endsWith(";base64", false);
- if (isBase64)
- mediaType = mediaType.left(mediaType.length() - 7);
-
- if (mediaType.isEmpty())
- mediaType = "text/plain;charset=US-ASCII";
-
- String mimeType = extractMIMETypeFromMediaType(mediaType);
- String charset = extractCharsetFromMediaType(mediaType);
-
- ASSERT(d->m_response.isNull());
-
- d->m_response.setURL(handle->firstRequest().url());
- d->m_response.setMimeType(mimeType);
-
- // For non base64 encoded data we have to convert to UTF-16 early
- // due to limitations in KURL
- d->m_response.setTextEncodingName(isBase64 ? charset : "UTF-16");
- client->didReceiveResponse(handle, d->m_response);
-
- // The load may be cancelled, and the client may be destroyed
- // by any of the client reporting calls, so we check, and bail
- // out in either of those cases.
- if (d->m_cancelled || !handle->client())
- return false;
-
- SoupSession* session = handle->defaultSession();
- GOwnPtr<GError> error;
- d->m_soupRequest = adoptGRef(webkit_soup_requester_request(d->m_requester.get(), handle->firstRequest().url().string().utf8().data(), session, &error.outPtr()));
- if (error) {
- d->m_soupRequest = 0;
- client->didFinishLoading(handle, 0);
- return false;
- }
-
- d->m_inputStream = adoptGRef(webkit_soup_request_send(d->m_soupRequest.get(), 0, &error.outPtr()));
- if (error) {
- d->m_inputStream = 0;
- client->didFinishLoading(handle, 0);
- return false;
- }
-
- d->m_buffer = static_cast<char*>(g_slice_alloc0(READ_BUFFER_SIZE));
- d->m_total = 0;
-
- g_object_set_data(G_OBJECT(d->m_inputStream.get()), "webkit-resource", handle);
- // balanced by a deref() in cleanupSoupRequestOperation, which should always run
- handle->ref();
-
- d->m_cancellable = adoptGRef(g_cancellable_new());
- g_input_stream_read_async(d->m_inputStream.get(), d->m_buffer, READ_BUFFER_SIZE, G_PRIORITY_DEFAULT,
- d->m_cancellable.get(), readCallback, GINT_TO_POINTER(!isBase64));
-
- return false;
-}
-
-static bool startData(ResourceHandle* handle, String urlString)
-{
- ASSERT(handle);
-
- ResourceHandleInternal* d = handle->getInternal();
-
- // If parseDataUrl is called synchronously the job is not yet effectively started
- // and webkit won't never know that the data has been parsed even didFinishLoading is called.
- d->m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
- return true;
-}
-
static SoupSession* createSoupSession()
{
return soup_session_async_new();
}
-// Values taken from http://stevesouders.com/ua/index.php following
-// the rule "Do What Every Other Modern Browser Is Doing". They seem
-// to significantly improve page loading time compared to soup's
-// default values.
-#define MAX_CONNECTIONS 60
-#define MAX_CONNECTIONS_PER_HOST 6
-
-static void ensureSessionIsInitialized(SoupSession* session)
-{
- if (g_object_get_data(G_OBJECT(session), "webkit-init"))
- return;
-
- SoupCookieJar* jar = reinterpret_cast<SoupCookieJar*>(soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR));
- if (!jar)
- soup_session_add_feature(session, SOUP_SESSION_FEATURE(defaultCookieJar()));
- else
- setDefaultCookieJar(jar);
-
- if (!soup_session_get_feature(session, SOUP_TYPE_LOGGER) && LogNetwork.state == WTFLogChannelOn) {
- SoupLogger* logger = soup_logger_new(static_cast<SoupLoggerLogLevel>(SOUP_LOGGER_LOG_BODY), -1);
- soup_logger_attach(logger, session);
- g_object_unref(logger);
- }
-
- g_object_set(session,
- SOUP_SESSION_MAX_CONNS, MAX_CONNECTIONS,
- SOUP_SESSION_MAX_CONNS_PER_HOST, MAX_CONNECTIONS_PER_HOST,
- NULL);
-
- g_object_set_data(G_OBJECT(session), "webkit-init", reinterpret_cast<void*>(0xdeadbeef));
-}
-
static void cleanupSoupRequestOperation(ResourceHandle* handle, bool isDestroying = false)
{
ResourceHandleInternal* d = handle->getInternal();
@@ -495,14 +423,14 @@ static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer use
}
GOwnPtr<GError> error;
- GInputStream* in = webkit_soup_request_send_finish(d->m_soupRequest.get(), res, &error.outPtr());
+ GInputStream* in = soup_request_send_finish(d->m_soupRequest.get(), res, &error.outPtr());
if (error) {
SoupMessage* soupMsg = d->m_soupMessage.get();
gboolean isTransportError = d->m_soupMessage && SOUP_STATUS_IS_TRANSPORT_ERROR(soupMsg->status_code);
if (isTransportError || (error->domain == G_IO_ERROR)) {
- SoupURI* uri = webkit_soup_request_get_uri(d->m_soupRequest.get());
+ SoupURI* uri = soup_request_get_uri(d->m_soupRequest.get());
GOwnPtr<char> uriStr(soup_uri_to_string(uri, false));
gint errorCode = isTransportError ? static_cast<gint>(soupMsg->status_code) : error->code;
const gchar* errorMsg = isTransportError ? soupMsg->reason_phrase : error->message;
@@ -550,13 +478,14 @@ static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer use
// readCallback needs it
g_object_set_data(G_OBJECT(d->m_inputStream.get()), "webkit-resource", handle.get());
- // Ensure a response is sent for any protocols that don't explicitly support responses
- // through got-headers signal or content sniffing.
- // (e.g. file and GIO based protocol).
- if (!handle->shouldContentSniff() && d->m_response.isNull()) {
+ // If not using SoupMessage we need to call didReceiveResponse now.
+ // (This will change later when SoupRequest supports content sniffing.)
+ if (!d->m_soupMessage) {
d->m_response.setURL(handle->firstRequest().url());
- d->m_response.setMimeType(webkit_soup_request_get_content_type(d->m_soupRequest.get()));
- d->m_response.setExpectedContentLength(webkit_soup_request_get_content_length(d->m_soupRequest.get()));
+ const gchar* contentType = soup_request_get_content_type(d->m_soupRequest.get());
+ d->m_response.setMimeType(extractMIMETypeFromMediaType(contentType));
+ d->m_response.setTextEncodingName(extractCharsetFromMediaType(contentType));
+ d->m_response.setExpectedContentLength(soup_request_get_content_length(d->m_soupRequest.get()));
client->didReceiveResponse(handle.get(), d->m_response);
if (d->m_cancelled) {
@@ -572,12 +501,56 @@ static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer use
G_PRIORITY_DEFAULT, d->m_cancellable.get(), readCallback, 0);
}
-static bool startHttp(ResourceHandle* handle)
+static bool addFormElementsToSoupMessage(SoupMessage* message, const char* contentType, FormData* httpBody, unsigned long& totalBodySize)
+{
+ size_t numElements = httpBody->elements().size();
+ if (numElements < 2) { // No file upload is the most common case.
+ Vector<char> body;
+ httpBody->flatten(body);
+ totalBodySize = body.size();
+ soup_message_set_request(message, contentType, SOUP_MEMORY_COPY, body.data(), body.size());
+ return true;
+ }
+
+ // We have more than one element to upload, and some may be large files,
+ // which we will want to mmap instead of copying into memory
+ soup_message_body_set_accumulate(message->request_body, FALSE);
+ for (size_t i = 0; i < numElements; i++) {
+ const FormDataElement& element = httpBody->elements()[i];
+
+ if (element.m_type == FormDataElement::data) {
+ totalBodySize += element.m_data.size();
+ soup_message_body_append(message->request_body, SOUP_MEMORY_TEMPORARY,
+ element.m_data.data(), element.m_data.size());
+ continue;
+ }
+
+ // This technique is inspired by libsoup's simple-httpd test.
+ GOwnPtr<GError> error;
+ CString fileName = fileSystemRepresentation(element.m_filename);
+ GMappedFile* fileMapping = g_mapped_file_new(fileName.data(), false, &error.outPtr());
+ if (error)
+ return false;
+
+ gsize mappedFileSize = g_mapped_file_get_length(fileMapping);
+ totalBodySize += mappedFileSize;
+ SoupBuffer* soupBuffer = soup_buffer_new_with_owner(g_mapped_file_get_contents(fileMapping),
+ mappedFileSize, fileMapping,
+ reinterpret_cast<GDestroyNotify>(g_mapped_file_unref));
+ soup_message_body_append_buffer(message->request_body, soupBuffer);
+ soup_buffer_free(soupBuffer);
+ }
+
+ return true;
+}
+
+static bool startHTTPRequest(ResourceHandle* handle)
{
ASSERT(handle);
SoupSession* session = handle->defaultSession();
ensureSessionIsInitialized(session);
+ SoupRequester* requester = SOUP_REQUESTER(soup_session_get_feature(session, SOUP_TYPE_REQUESTER));
ResourceHandleInternal* d = handle->getInternal();
@@ -587,7 +560,7 @@ static bool startHttp(ResourceHandle* handle)
request.setURL(url);
GOwnPtr<GError> error;
- d->m_soupRequest = adoptGRef(webkit_soup_requester_request(d->m_requester.get(), url.string().utf8().data(), session, &error.outPtr()));
+ d->m_soupRequest = adoptGRef(soup_requester_request(requester, url.string().utf8().data(), &error.outPtr()));
if (error) {
d->m_soupRequest = 0;
return false;
@@ -595,7 +568,7 @@ static bool startHttp(ResourceHandle* handle)
g_object_set_data(G_OBJECT(d->m_soupRequest.get()), "webkit-resource", handle);
- d->m_soupMessage = adoptGRef(webkit_soup_request_http_get_message(WEBKIT_SOUP_REQUEST_HTTP(d->m_soupRequest.get())));
+ d->m_soupMessage = adoptGRef(soup_request_http_get_message(SOUP_REQUEST_HTTP(d->m_soupRequest.get())));
if (!d->m_soupMessage)
return false;
@@ -609,65 +582,23 @@ static bool startHttp(ResourceHandle* handle)
g_signal_connect(soupMessage, "restarted", G_CALLBACK(restartedCallback), handle);
g_signal_connect(soupMessage, "got-headers", G_CALLBACK(gotHeadersCallback), handle);
+ g_signal_connect(soupMessage, "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), handle);
d->m_gotChunkHandler = g_signal_connect(soupMessage, "got-chunk", G_CALLBACK(gotChunkCallback), handle);
-#ifdef HAVE_LIBSOUP_2_29_90
String firstPartyString = request.firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
GOwnPtr<SoupURI> firstParty(soup_uri_new(firstPartyString.utf8().data()));
soup_message_set_first_party(soupMessage, firstParty.get());
}
-#endif
FormData* httpBody = d->m_firstRequest.httpBody();
- if (httpBody && !httpBody->isEmpty()) {
- size_t numElements = httpBody->elements().size();
-
- // handle the most common case (i.e. no file upload)
- if (numElements < 2) {
- Vector<char> body;
- httpBody->flatten(body);
- soup_message_set_request(soupMessage, d->m_firstRequest.httpContentType().utf8().data(),
- SOUP_MEMORY_COPY, body.data(), body.size());
- } else {
- /*
- * we have more than one element to upload, and some may
- * be (big) files, which we will want to mmap instead of
- * copying into memory; TODO: support upload of non-local
- * (think sftp://) files by using GIO?
- */
- soup_message_body_set_accumulate(soupMessage->request_body, FALSE);
- for (size_t i = 0; i < numElements; i++) {
- const FormDataElement& element = httpBody->elements()[i];
-
- if (element.m_type == FormDataElement::data)
- soup_message_body_append(soupMessage->request_body, SOUP_MEMORY_TEMPORARY, element.m_data.data(), element.m_data.size());
- else {
- /*
- * mapping for uploaded files code inspired by technique used in
- * libsoup's simple-httpd test
- */
- GOwnPtr<GError> error;
- CString fileName = fileSystemRepresentation(element.m_filename);
- GMappedFile* fileMapping = g_mapped_file_new(fileName.data(), false, &error.outPtr());
-
- if (error) {
- g_signal_handlers_disconnect_matched(soupMessage, G_SIGNAL_MATCH_DATA,
- 0, 0, 0, 0, handle);
- d->m_soupMessage.clear();
-
- return false;
- }
-
- SoupBuffer* soupBuffer = soup_buffer_new_with_owner(g_mapped_file_get_contents(fileMapping),
- g_mapped_file_get_length(fileMapping),
- fileMapping,
- reinterpret_cast<GDestroyNotify>(g_mapped_file_unref));
- soup_message_body_append_buffer(soupMessage->request_body, soupBuffer);
- soup_buffer_free(soupBuffer);
- }
- }
- }
+ CString contentType = d->m_firstRequest.httpContentType().utf8().data();
+ if (httpBody && !httpBody->isEmpty()
+ && !addFormElementsToSoupMessage(soupMessage, contentType.data(), httpBody, d->m_bodySize)) {
+ // We failed to prepare the body data, so just fail this load.
+ g_signal_handlers_disconnect_matched(soupMessage, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, handle);
+ d->m_soupMessage.clear();
+ return false;
}
// balanced by a deref() in cleanupSoupRequestOperation, which should always run
@@ -681,7 +612,7 @@ static bool startHttp(ResourceHandle* handle)
// Send the request only if it's not been explicitely deferred.
if (!d->m_defersLoading) {
d->m_cancellable = adoptGRef(g_cancellable_new());
- webkit_soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
+ soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
}
return true;
@@ -715,19 +646,13 @@ bool ResourceHandle::start(NetworkingContext* context)
// Used to set the authentication dialog toplevel; may be NULL
d->m_context = context;
- if (equalIgnoringCase(protocol, "data"))
- return startData(this, urlString);
-
if (equalIgnoringCase(protocol, "http") || equalIgnoringCase(protocol, "https")) {
- if (startHttp(this))
+ if (startHTTPRequest(this))
return true;
}
- if (equalIgnoringCase(protocol, "file") || equalIgnoringCase(protocol, "ftp") || equalIgnoringCase(protocol, "ftps")) {
- // FIXME: should we be doing any other protocols here?
- if (startGio(this, url))
- return true;
- }
+ if (startNonHTTPRequest(this, url))
+ return true;
// Error must not be reported immediately
this->scheduleFailure(InvalidURLFailure);
@@ -764,7 +689,7 @@ void ResourceHandle::platformSetDefersLoading(bool defersLoading)
if (!defersLoading && !d->m_cancellable && d->m_soupRequest.get()) {
d->m_cancellable = adoptGRef(g_cancellable_new());
- webkit_soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
+ soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
return;
}
@@ -795,11 +720,13 @@ bool ResourceHandle::willLoadFromCache(ResourceRequest&, Frame*)
void ResourceHandle::loadResourceSynchronously(NetworkingContext* context, const ResourceRequest& request, StoredCredentials /*storedCredentials*/, ResourceError& error, ResourceResponse& response, Vector<char>& data)
{
WebCoreSynchronousLoader syncLoader(error, response, data);
- // FIXME: we should use the ResourceHandle::create method here,
- // but it makes us timeout in a couple of tests. See
- // https://bugs.webkit.org/show_bug.cgi?id=41823
- RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, false /*defersLoading*/, false /*shouldContentSniff*/));
- handle->start(context);
+ RefPtr<ResourceHandle> handle = create(context, request, &syncLoader, false /*defersLoading*/, false /*shouldContentSniff*/);
+ if (!handle)
+ return;
+
+ // If the request has already failed, do not run the main loop, or else we'll block indefinitely.
+ if (handle->d->m_scheduledFailureType != NoFailure)
+ return;
syncLoader.run();
}
@@ -811,18 +738,8 @@ static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
return;
ResourceHandleInternal* d = handle->getInternal();
- ResourceHandleClient* client = handle->client();
-
g_input_stream_close_finish(d->m_inputStream.get(), res, 0);
cleanupSoupRequestOperation(handle.get());
-
- // The load may have been cancelled, the client may have been
- // destroyed already. In such cases calling didFinishLoading is a
- // bad idea.
- if (d->m_cancelled || !client)
- return;
-
- client->didFinishLoading(handle.get(), 0);
}
static void readCallback(GObject* source, GAsyncResult* asyncResult, gpointer data)
@@ -844,7 +761,7 @@ static void readCallback(GObject* source, GAsyncResult* asyncResult, gpointer da
gssize bytesRead = g_input_stream_read_finish(d->m_inputStream.get(), asyncResult, &error.outPtr());
if (error) {
- SoupURI* uri = webkit_soup_request_get_uri(d->m_soupRequest.get());
+ SoupURI* uri = soup_request_get_uri(d->m_soupRequest.get());
GOwnPtr<char> uriStr(soup_uri_to_string(uri, false));
ResourceError resourceError(g_quark_to_string(G_IO_ERROR), error->code, uriStr.get(),
error ? String::fromUTF8(error->message) : String());
@@ -854,6 +771,10 @@ static void readCallback(GObject* source, GAsyncResult* asyncResult, gpointer da
}
if (!bytesRead) {
+ // Finish the load. We do not wait for the stream to
+ // close. Instead we better notify WebCore as soon as possible
+ client->didFinishLoading(handle.get(), 0);
+
g_input_stream_close_async(d->m_inputStream.get(), G_PRIORITY_DEFAULT,
0, closeCallback, 0);
return;
@@ -881,7 +802,7 @@ static void readCallback(GObject* source, GAsyncResult* asyncResult, gpointer da
d->m_cancellable.get(), readCallback, data);
}
-static bool startGio(ResourceHandle* handle, KURL url)
+static bool startNonHTTPRequest(ResourceHandle* handle, KURL url)
{
ASSERT(handle);
@@ -889,18 +810,14 @@ static bool startGio(ResourceHandle* handle, KURL url)
return false;
SoupSession* session = handle->defaultSession();
+ ensureSessionIsInitialized(session);
+ SoupRequester* requester = SOUP_REQUESTER(soup_session_get_feature(session, SOUP_TYPE_REQUESTER));
ResourceHandleInternal* d = handle->getInternal();
- // GIO doesn't know how to handle refs and queries, so remove them
- // TODO: use KURL.fileSystemPath after KURLGtk and FileSystemGtk are
- // using GIO internally, and providing URIs instead of file paths
- url.removeFragmentIdentifier();
- url.setQuery(String());
- url.removePort();
CString urlStr = url.string().utf8();
GOwnPtr<GError> error;
- d->m_soupRequest = adoptGRef(webkit_soup_requester_request(d->m_requester.get(), urlStr.data(), session, &error.outPtr()));
+ d->m_soupRequest = adoptGRef(soup_requester_request(requester, urlStr.data(), &error.outPtr()));
if (error) {
d->m_soupRequest = 0;
return false;
@@ -912,7 +829,7 @@ static bool startGio(ResourceHandle* handle, KURL url)
handle->ref();
d->m_cancellable = adoptGRef(g_cancellable_new());
- webkit_soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
+ soup_request_send_async(d->m_soupRequest.get(), d->m_cancellable.get(), sendRequestCallback, 0);
return true;
}
diff --git a/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp b/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
index d46e47b..5016bf1 100644
--- a/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
+++ b/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
@@ -46,13 +46,11 @@ void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
soup_message_headers_append(soupHeaders, it->first.string().utf8().data(), it->second.utf8().data());
}
-#ifdef HAVE_LIBSOUP_2_29_90
String firstPartyString = firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
GOwnPtr<SoupURI> firstParty(soup_uri_new(firstPartyString.utf8().data()));
soup_message_set_first_party(soupMessage, firstParty.get());
}
-#endif
soup_message_set_flags(soupMessage, m_soupFlags);
}
@@ -71,13 +69,11 @@ SoupMessage* ResourceRequest::toSoupMessage() const
soup_message_headers_append(soupHeaders, it->first.string().utf8().data(), it->second.utf8().data());
}
-#ifdef HAVE_LIBSOUP_2_29_90
String firstPartyString = firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
GOwnPtr<SoupURI> firstParty(soup_uri_new(firstPartyString.utf8().data()));
soup_message_set_first_party(soupMessage, firstParty.get());
}
-#endif
soup_message_set_flags(soupMessage, m_soupFlags);
@@ -104,11 +100,9 @@ void ResourceRequest::updateFromSoupMessage(SoupMessage* soupMessage)
if (soupMessage->request_body->data)
m_httpBody = FormData::create(soupMessage->request_body->data, soupMessage->request_body->length);
-#ifdef HAVE_LIBSOUP_2_29_90
SoupURI* firstParty = soup_message_get_first_party(soupMessage);
if (firstParty)
m_firstPartyForCookies = soupURIToKURL(firstParty);
-#endif
m_soupFlags = soup_message_get_flags(soupMessage);
diff --git a/Source/WebCore/platform/network/soup/SocketStreamHandle.h b/Source/WebCore/platform/network/soup/SocketStreamHandle.h
index 3168fae..c8fe3b3 100644
--- a/Source/WebCore/platform/network/soup/SocketStreamHandle.h
+++ b/Source/WebCore/platform/network/soup/SocketStreamHandle.h
@@ -60,7 +60,7 @@ namespace WebCore {
private:
GRefPtr<GSocketConnection> m_socketConnection;
GRefPtr<GInputStream> m_inputStream;
- GRefPtr<GOutputStream> m_outputStream;
+ GRefPtr<GPollableOutputStream> m_outputStream;
GRefPtr<GSource> m_writeReadySource;
char* m_readBuffer;
void* m_id;
diff --git a/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp b/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp
index 841e209..34382dd 100644
--- a/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp
+++ b/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp
@@ -50,7 +50,7 @@ namespace WebCore {
// These functions immediately call the similarly named SocketStreamHandle methods.
static void connectedCallback(GSocketClient*, GAsyncResult*, void*);
static void readReadyCallback(GInputStream*, GAsyncResult*, void*);
-static gboolean writeReadyCallback(GSocket*, GIOCondition, void*);
+static gboolean writeReadyCallback(GPollableOutputStream*, void*);
// Having a list of active handles means that we do not have to worry about WebCore
// reference counting in GLib callbacks. Once the handle is off the active handles list
@@ -82,13 +82,12 @@ SocketStreamHandle::SocketStreamHandle(const KURL& url, SocketStreamHandleClient
: SocketStreamHandleBase(url, client)
, m_readBuffer(0)
{
- // No support for SSL sockets yet.
- if (url.protocolIs("wss"))
- return;
- unsigned int port = url.hasPort() ? url.port() : 80;
+ unsigned int port = url.hasPort() ? url.port() : (url.protocolIs("wss") ? 443 : 80);
m_id = activateHandle(this);
GRefPtr<GSocketClient> socketClient = adoptGRef(g_socket_client_new());
+ if (url.protocolIs("wss"))
+ g_socket_client_set_tls(socketClient.get(), TRUE);
g_socket_client_connect_to_host_async(socketClient.get(), url.host().utf8().data(), port, 0,
reinterpret_cast<GAsyncReadyCallback>(connectedCallback), m_id);
}
@@ -108,7 +107,7 @@ void SocketStreamHandle::connected(GSocketConnection* socketConnection, GError*
}
m_socketConnection = adoptGRef(socketConnection);
- m_outputStream = g_io_stream_get_output_stream(G_IO_STREAM(m_socketConnection.get()));
+ m_outputStream = G_POLLABLE_OUTPUT_STREAM(g_io_stream_get_output_stream(G_IO_STREAM(m_socketConnection.get())));
m_inputStream = g_io_stream_get_input_stream(G_IO_STREAM(m_socketConnection.get()));
m_readBuffer = new char[READ_BUFFER_SIZE];
@@ -156,14 +155,14 @@ void SocketStreamHandle::writeReady()
int SocketStreamHandle::platformSend(const char* data, int length)
{
- if (!g_socket_condition_check(g_socket_connection_get_socket(m_socketConnection.get()), G_IO_OUT)) {
+ if (!g_pollable_output_stream_is_writable(m_outputStream.get())) {
beginWaitingForSocketWritability();
return 0;
}
GOwnPtr<GError> error;
- gssize written = g_output_stream_write(m_outputStream.get(), data, length, 0, &error.outPtr());
- if (error) {
+ gssize written = g_pollable_output_stream_write_nonblocking(m_outputStream.get(), data, length, 0, &error.outPtr());
+ if (error && !g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK)) {
m_client->didFail(this, SocketStreamError(error->code)); // FIXME: Provide a sensible error.
return 0;
}
@@ -222,8 +221,7 @@ void SocketStreamHandle::beginWaitingForSocketWritability()
if (m_writeReadySource) // Already waiting.
return;
- m_writeReadySource = adoptGRef(g_socket_create_source(
- g_socket_connection_get_socket(m_socketConnection.get()), static_cast<GIOCondition>(G_IO_OUT), 0));
+ m_writeReadySource = adoptGRef(g_pollable_output_stream_create_source(m_outputStream.get(), 0));
g_source_set_callback(m_writeReadySource.get(), reinterpret_cast<GSourceFunc>(writeReadyCallback), m_id, 0);
g_source_attach(m_writeReadySource.get(), 0);
}
@@ -266,24 +264,13 @@ static void readReadyCallback(GInputStream* stream, GAsyncResult* result, void*
handle->readBytes(bytesRead, error.get());
}
-static gboolean writeReadyCallback(GSocket*, GIOCondition condition, void* id)
+static gboolean writeReadyCallback(GPollableOutputStream*, void* id)
{
SocketStreamHandle* handle = getHandleFromId(id);
if (!handle)
return FALSE;
- // G_IO_HUP and G_IO_ERR are are always active. See:
- // http://library.gnome.org/devel/gio/stable/GSocket.html#g-socket-create-source
- if (condition & G_IO_HUP) {
- handle->close();
- return FALSE;
- }
- if (condition & G_IO_ERR) {
- handle->client()->didFail(handle, SocketStreamError(0)); // FIXME: Provide a sensible error.
- return FALSE;
- }
- if (condition & G_IO_OUT)
- handle->writeReady();
+ handle->writeReady();
return TRUE;
}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.c b/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.c
deleted file mode 100644
index c14863b..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2008 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "soup-directory-input-stream.h"
-
-#include <libsoup/soup.h>
-#include <stdio.h>
-#include <string.h>
-
-#define INIT_STRING "<html><head><title>OMG!</title></head><body><table>"
-#define EXIT_STRING "</table></html>"
-
-G_DEFINE_TYPE (WebKitSoupDirectoryInputStream, webkit_soup_directory_input_stream, G_TYPE_INPUT_STREAM)
-
-static SoupBuffer *
-webkit_soup_directory_input_stream_parse_info (WebKitSoupDirectoryInputStream * stream,
- GFileInfo * info)
-{
- SoupBuffer *buffer;
- GString *string;
- const char *s;
- char *escaped, *path, *xml_string;
-
- if (!g_file_info_get_name (info))
- return NULL;
-
- s = g_file_info_get_display_name (info);
- if (!s) {
- s = g_file_info_get_name (info);
- /* FIXME: convert somehow? */
- if (!g_utf8_validate (s, -1, NULL))
- return NULL;
- }
- string = g_string_new ("<tr>");
-
- xml_string = g_markup_escape_text (s, -1);
- escaped = g_uri_escape_string (g_file_info_get_name (info), NULL, FALSE);
- path = g_strconcat (stream->uri, "/", escaped, NULL);
- g_free (escaped);
- g_string_append_printf (string, "<td><a href=\"%s\">%s</a></td>", path, xml_string);
- g_free (path);
- g_free (xml_string);
- g_string_append (string, "</tr>");
-
- buffer = soup_buffer_new (SOUP_MEMORY_TAKE, string->str, string->len);
- g_string_free (string, FALSE);
-
- return buffer;
-}
-
-static SoupBuffer *
-webkit_soup_directory_input_stream_read_next_file (WebKitSoupDirectoryInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GFileInfo *info;
- SoupBuffer *buffer;
- GError *err = NULL;
-
- do {
- info = g_file_enumerator_next_file (stream->enumerator, cancellable, &err);
- if (info == NULL) {
- if (err) {
- g_propagate_error (error, err);
- return NULL;
- } else if (!stream->done) {
- stream->done = TRUE;
- return soup_buffer_new (SOUP_MEMORY_STATIC,
- EXIT_STRING,
- sizeof (EXIT_STRING));
- } else {
- return NULL;
- }
- }
-
- buffer = webkit_soup_directory_input_stream_parse_info (stream, info);
- } while (buffer == NULL);
-
- return buffer;
-}
-
-static gssize
-webkit_soup_directory_input_stream_read (GInputStream *input,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupDirectoryInputStream *stream = WEBKIT_SOUP_DIRECTORY_INPUT_STREAM (input);
- gsize total, size;
-
- for (total = 0; total < count; total += size) {
- if (stream->buffer == NULL) {
- stream->buffer = webkit_soup_directory_input_stream_read_next_file (stream, cancellable, error);
- if (stream->buffer == NULL) {
- /* FIXME: Is this correct or should we forward the error? */
- if (total)
- g_clear_error (error);
- return total;
- }
- }
-
- size = MIN (stream->buffer->length, count - total);
- memcpy ((char *)buffer + total, stream->buffer->data, size);
- if (size == stream->buffer->length) {
- soup_buffer_free (stream->buffer);
- stream->buffer = NULL;
- } else {
- SoupBuffer *sub = soup_buffer_new_subbuffer (stream->buffer,
- size,
- stream->buffer->length - size);
- soup_buffer_free (stream->buffer);
- stream->buffer = sub;
- }
- }
-
- return total;
-}
-
-static gboolean
-webkit_soup_directory_input_stream_close (GInputStream *input,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupDirectoryInputStream *stream = WEBKIT_SOUP_DIRECTORY_INPUT_STREAM (input);
- gboolean result;
-
- if (stream->buffer) {
- soup_buffer_free (stream->buffer);
- stream->buffer = NULL;
- }
-
- result = g_file_enumerator_close (stream->enumerator,
- cancellable,
- error);
- g_object_unref (stream->enumerator);
- stream->enumerator = NULL;
-
- g_free (stream->uri);
- stream->uri = NULL;
-
- return result;
-}
-
-static void
-webkit_soup_directory_input_stream_class_init (WebKitSoupDirectoryInputStreamClass *stream_class)
-{
- GInputStreamClass *inputstream_class = G_INPUT_STREAM_CLASS (stream_class);
-
- inputstream_class->read_fn = webkit_soup_directory_input_stream_read;
- inputstream_class->close_fn = webkit_soup_directory_input_stream_close;
-}
-
-static void
-webkit_soup_directory_input_stream_init (WebKitSoupDirectoryInputStream *stream)
-{
- stream->buffer = soup_buffer_new (SOUP_MEMORY_STATIC,
- INIT_STRING,
- sizeof (INIT_STRING));
-}
-
-GInputStream *
-webkit_soup_directory_input_stream_new (GFileEnumerator *enumerator,
- SoupURI *uri)
-{
- GInputStream *stream;
-
- g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
- g_return_val_if_fail (uri != NULL, NULL);
-
- stream = g_object_new (WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM, NULL);
-
- WEBKIT_SOUP_DIRECTORY_INPUT_STREAM (stream)->enumerator = g_object_ref (enumerator);
- WEBKIT_SOUP_DIRECTORY_INPUT_STREAM (stream)->uri = soup_uri_to_string (uri, FALSE);
-
- return stream;
-}
-
diff --git a/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.h b/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.h
deleted file mode 100644
index 0c5b0be..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-directory-input-stream.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2010 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_DIRECTORY_INPUT_STREAM_H
-#define WEBKIT_SOUP_DIRECTORY_INPUT_STREAM_H 1
-
-#include <gio/gio.h>
-#include <libsoup/soup-types.h>
-#include <libsoup/soup-message-body.h>
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM (webkit_soup_directory_input_stream_get_type ())
-#define WEBKIT_SOUP_DIRECTORY_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM, WebKitSoupDirectoryInputStream))
-#define WEBKIT_SOUP_DIRECTORY_INPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM, WebKitSoupDirectoryInputStreamClass))
-#define WEBKIT_IS_SOUP_DIRECTORY_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM))
-#define WEBKIT_IS_SOUP_DIRECTORY_INPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM))
-#define WEBKIT_SOUP_DIRECTORY_INPUT_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_DIRECTORY_INPUT_STREAM, WebKitSoupDirectoryInputStreamClass))
-
-typedef struct _WebKitSoupDirectoryInputStream WebKitSoupDirectoryInputStream;
-typedef struct _WebKitSoupDirectoryInputStreamClass WebKitSoupDirectoryInputStreamClass;
-
-struct _WebKitSoupDirectoryInputStream {
- GInputStream parent;
-
- GFileEnumerator *enumerator;
- char *uri;
- SoupBuffer *buffer;
- gboolean done;
-};
-
-struct _WebKitSoupDirectoryInputStreamClass {
- GInputStreamClass parent_class;
-};
-
-GType webkit_soup_directory_input_stream_get_type (void);
-
-GInputStream *webkit_soup_directory_input_stream_new (GFileEnumerator *enumerator,
- SoupURI *uri);
-
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_DIRECTORY_INPUT_STREAM_H */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c b/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c
deleted file mode 100644
index 2a5d995..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c
+++ /dev/null
@@ -1,922 +0,0 @@
-/* soup-input-stream.c, based on gsocketinputstream.c
- *
- * Copyright (C) 2006-2007 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#include <libsoup/soup.h>
-
-#include "soup-http-input-stream.h"
-
-static void webkit_soup_http_input_stream_seekable_iface_init (GSeekableIface *seekable_iface);
-
-G_DEFINE_TYPE_WITH_CODE (WebKitSoupHTTPInputStream, webkit_soup_http_input_stream, G_TYPE_INPUT_STREAM,
- G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
- webkit_soup_http_input_stream_seekable_iface_init))
-
-typedef void (*WebKitSoupHTTPInputStreamCallback)(GInputStream *);
-
-typedef struct {
- SoupSession *session;
- GMainContext *async_context;
- SoupMessage *msg;
- gboolean got_headers, finished;
- goffset offset;
-
- GCancellable *cancellable;
- GSource *cancel_watch;
- WebKitSoupHTTPInputStreamCallback got_headers_cb;
- WebKitSoupHTTPInputStreamCallback got_chunk_cb;
- WebKitSoupHTTPInputStreamCallback finished_cb;
- WebKitSoupHTTPInputStreamCallback cancelled_cb;
-
- guchar *leftover_buffer;
- gsize leftover_bufsize, leftover_offset;
-
- guchar *caller_buffer;
- gsize caller_bufsize, caller_nread;
- GAsyncReadyCallback outstanding_callback;
- GSimpleAsyncResult *result;
-} WebKitSoupHTTPInputStreamPrivate;
-#define WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM, WebKitSoupHTTPInputStreamPrivate))
-
-
-static gssize webkit_soup_http_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean webkit_soup_http_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error);
-static void webkit_soup_http_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gssize webkit_soup_http_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-static void webkit_soup_http_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer data);
-static gboolean webkit_soup_http_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error);
-
-static goffset webkit_soup_http_input_stream_tell (GSeekable *seekable);
-
-static gboolean webkit_soup_http_input_stream_can_seek (GSeekable *seekable);
-static gboolean webkit_soup_http_input_stream_seek (GSeekable *seekable,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error);
-
-static gboolean webkit_soup_http_input_stream_can_truncate (GSeekable *seekable);
-static gboolean webkit_soup_http_input_stream_truncate (GSeekable *seekable,
- goffset offset,
- GCancellable *cancellable,
- GError **error);
-
-static void webkit_soup_http_input_stream_got_headers (SoupMessage *msg, gpointer stream);
-static void webkit_soup_http_input_stream_got_chunk (SoupMessage *msg, SoupBuffer *chunk, gpointer stream);
-static void webkit_soup_http_input_stream_finished (SoupMessage *msg, gpointer stream);
-
-static void
-webkit_soup_http_input_stream_finalize (GObject *object)
-{
- WebKitSoupHTTPInputStream *stream = WEBKIT_SOUP_HTTP_INPUT_STREAM (object);
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_object_unref (priv->session);
-
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (webkit_soup_http_input_stream_got_headers), stream);
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (webkit_soup_http_input_stream_got_chunk), stream);
- g_signal_handlers_disconnect_by_func (priv->msg, G_CALLBACK (webkit_soup_http_input_stream_finished), stream);
- g_object_unref (priv->msg);
- g_free (priv->leftover_buffer);
-
- if (G_OBJECT_CLASS (webkit_soup_http_input_stream_parent_class)->finalize)
- (*G_OBJECT_CLASS (webkit_soup_http_input_stream_parent_class)->finalize)(object);
-}
-
-static void
-webkit_soup_http_input_stream_class_init (WebKitSoupHTTPInputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (WebKitSoupHTTPInputStreamPrivate));
-
- gobject_class->finalize = webkit_soup_http_input_stream_finalize;
-
- stream_class->read_fn = webkit_soup_http_input_stream_read;
- stream_class->close_fn = webkit_soup_http_input_stream_close;
- stream_class->read_async = webkit_soup_http_input_stream_read_async;
- stream_class->read_finish = webkit_soup_http_input_stream_read_finish;
- stream_class->close_async = webkit_soup_http_input_stream_close_async;
- stream_class->close_finish = webkit_soup_http_input_stream_close_finish;
-}
-
-static void
-webkit_soup_http_input_stream_seekable_iface_init (GSeekableIface *seekable_iface)
-{
- seekable_iface->tell = webkit_soup_http_input_stream_tell;
- seekable_iface->can_seek = webkit_soup_http_input_stream_can_seek;
- seekable_iface->seek = webkit_soup_http_input_stream_seek;
- seekable_iface->can_truncate = webkit_soup_http_input_stream_can_truncate;
- seekable_iface->truncate_fn = webkit_soup_http_input_stream_truncate;
-}
-
-static void
-webkit_soup_http_input_stream_init (WebKitSoupHTTPInputStream *stream)
-{
- ;
-}
-
-static void
-webkit_soup_http_input_stream_queue_message (WebKitSoupHTTPInputStream *stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->got_headers = priv->finished = FALSE;
-
- /* Add an extra ref since soup_session_queue_message steals one */
- g_object_ref (priv->msg);
- soup_session_queue_message (priv->session, priv->msg, NULL, NULL);
-}
-
-/**
- * webkit_soup_http_input_stream_new:
- * @session: the #SoupSession to use
- * @msg: the #SoupMessage whose response will be streamed
- *
- * Prepares to send @msg over @session, and returns a #GInputStream
- * that can be used to read the response.
- *
- * @msg may not be sent until the first read call; if you need to look
- * at the status code or response headers before reading the body, you
- * can use webkit_soup_http_input_stream_send() or webkit_soup_http_input_stream_send_async()
- * to force the message to be sent and the response headers read.
- *
- * If @msg gets a non-2xx result, the first read (or send) will return
- * an error with type %WEBKIT_SOUP_HTTP_INPUT_STREAM_HTTP_ERROR.
- *
- * Internally, #WebKitSoupHTTPInputStream is implemented using asynchronous I/O,
- * so if you are using the synchronous API (eg,
- * g_input_stream_read()), you should create a new #GMainContext and
- * set it as the %SOUP_SESSION_ASYNC_CONTEXT property on @session. (If
- * you don't, then synchronous #GInputStream calls will cause the main
- * loop to be run recursively.) The async #GInputStream API works fine
- * with %SOUP_SESSION_ASYNC_CONTEXT either set or unset.
- *
- * Returns: a new #GInputStream.
- **/
-WebKitSoupHTTPInputStream *
-webkit_soup_http_input_stream_new (SoupSession *session, SoupMessage *msg)
-{
- WebKitSoupHTTPInputStream *stream;
- WebKitSoupHTTPInputStreamPrivate *priv;
-
- g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
-
- stream = g_object_new (WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM, NULL);
- priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->session = g_object_ref (session);
- priv->async_context = soup_session_get_async_context (session);
- priv->msg = g_object_ref (msg);
-
- g_signal_connect (msg, "got_headers",
- G_CALLBACK (webkit_soup_http_input_stream_got_headers), stream);
- g_signal_connect (msg, "got_chunk",
- G_CALLBACK (webkit_soup_http_input_stream_got_chunk), stream);
- g_signal_connect (msg, "finished",
- G_CALLBACK (webkit_soup_http_input_stream_finished), stream);
-
- webkit_soup_http_input_stream_queue_message (stream);
- return stream;
-}
-
-static void
-webkit_soup_http_input_stream_got_headers (SoupMessage *msg, gpointer stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- /* If the status is unsuccessful, we just ignore the signal and let
- * libsoup keep going (eventually either it will requeue the request
- * (after handling authentication/redirection), or else the
- * "finished" handler will run).
- */
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- return;
-
- priv->got_headers = TRUE;
- if (!priv->caller_buffer) {
- /* Not ready to read the body yet */
- soup_session_pause_message (priv->session, msg);
- }
-
- if (priv->got_headers_cb)
- priv->got_headers_cb (stream);
-}
-
-static void
-webkit_soup_http_input_stream_got_chunk (SoupMessage *msg, SoupBuffer *chunk_buffer,
- gpointer stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- const gchar *chunk = chunk_buffer->data;
- gsize chunk_size = chunk_buffer->length;
-
- /* We only pay attention to the chunk if it's part of a successful
- * response.
- */
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
- return;
-
- /* Sanity check */
- if (priv->caller_bufsize == 0 || priv->leftover_bufsize != 0)
- g_warning ("webkit_soup_http_input_stream_got_chunk called again before previous chunk was processed");
-
- /* Copy what we can into priv->caller_buffer */
- if (priv->caller_bufsize > priv->caller_nread) {
- gsize nread = MIN (chunk_size, priv->caller_bufsize - priv->caller_nread);
-
- memcpy (priv->caller_buffer + priv->caller_nread, chunk, nread);
- priv->caller_nread += nread;
- priv->offset += nread;
- chunk += nread;
- chunk_size -= nread;
- }
-
- if (chunk_size > 0) {
- /* Copy the rest into priv->leftover_buffer. If
- * there's already some data there, realloc and
- * append. Otherwise just copy.
- */
- if (priv->leftover_bufsize) {
- priv->leftover_buffer = g_realloc (priv->leftover_buffer,
- priv->leftover_bufsize + chunk_size);
- memcpy (priv->leftover_buffer + priv->leftover_bufsize,
- chunk, chunk_size);
- priv->leftover_bufsize += chunk_size;
- } else {
- priv->leftover_bufsize = chunk_size;
- priv->leftover_buffer = g_memdup (chunk, chunk_size);
- priv->leftover_offset = 0;
- }
- }
-
- soup_session_pause_message (priv->session, msg);
- if (priv->got_chunk_cb)
- priv->got_chunk_cb (stream);
-}
-
-static void
-webkit_soup_http_input_stream_finished (SoupMessage *msg, gpointer stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->finished = TRUE;
-
- if (priv->finished_cb)
- priv->finished_cb (stream);
-}
-
-static gboolean
-webkit_soup_http_input_stream_cancelled (GIOChannel *chan, GIOCondition condition,
- gpointer stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- priv->cancel_watch = NULL;
-
- soup_session_pause_message (priv->session, priv->msg);
- if (priv->cancelled_cb)
- priv->cancelled_cb (stream);
-
- return FALSE;
-}
-
-static void
-webkit_soup_http_input_stream_prepare_for_io (GInputStream *stream,
- GCancellable *cancellable,
- guchar *buffer,
- gsize count)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- int cancel_fd;
-
- priv->cancellable = cancellable;
- cancel_fd = g_cancellable_get_fd (cancellable);
- if (cancel_fd != -1) {
- GIOChannel *chan = g_io_channel_unix_new (cancel_fd);
- priv->cancel_watch = soup_add_io_watch (priv->async_context, chan,
- G_IO_IN | G_IO_ERR | G_IO_HUP,
- webkit_soup_http_input_stream_cancelled,
- stream);
- g_io_channel_unref (chan);
- }
-
- priv->caller_buffer = buffer;
- priv->caller_bufsize = count;
- priv->caller_nread = 0;
-
- if (priv->got_headers)
- soup_session_unpause_message (priv->session, priv->msg);
-}
-
-static void
-webkit_soup_http_input_stream_done_io (GInputStream *stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->cancel_watch) {
- g_source_destroy (priv->cancel_watch);
- priv->cancel_watch = NULL;
- g_cancellable_release_fd (priv->cancellable);
- }
- priv->cancellable = NULL;
-
- priv->caller_buffer = NULL;
- priv->caller_bufsize = 0;
-}
-
-static gboolean
-set_error_if_http_failed (SoupMessage *msg, GError **error)
-{
- if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
- g_set_error_literal (error, SOUP_HTTP_ERROR,
- msg->status_code, msg->reason_phrase);
- return TRUE;
- }
- return FALSE;
-}
-
-static gsize
-read_from_leftover (WebKitSoupHTTPInputStreamPrivate *priv,
- gpointer buffer, gsize bufsize)
-{
- gsize nread;
-
- if (priv->leftover_bufsize - priv->leftover_offset <= bufsize) {
- nread = priv->leftover_bufsize - priv->leftover_offset;
- memcpy (buffer, priv->leftover_buffer + priv->leftover_offset, nread);
-
- g_free (priv->leftover_buffer);
- priv->leftover_buffer = NULL;
- priv->leftover_bufsize = priv->leftover_offset = 0;
- } else {
- nread = bufsize;
- memcpy (buffer, priv->leftover_buffer + priv->leftover_offset, nread);
- priv->leftover_offset += nread;
- }
-
- priv->offset += nread;
- return nread;
-}
-
-/* This does the work of webkit_soup_http_input_stream_send(), assuming that the
- * GInputStream pending flag has already been set. It is also used by
- * webkit_soup_http_input_stream_send_async() in some circumstances.
- */
-static gboolean
-webkit_soup_http_input_stream_send_internal (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- webkit_soup_http_input_stream_prepare_for_io (stream, cancellable, NULL, 0);
- while (!priv->finished && !priv->got_headers &&
- !g_cancellable_is_cancelled (cancellable))
- g_main_context_iteration (priv->async_context, TRUE);
- webkit_soup_http_input_stream_done_io (stream);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return FALSE;
- else if (set_error_if_http_failed (priv->msg, error))
- return FALSE;
- return TRUE;
-}
-
-static void
-send_sync_finished (GInputStream *stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- GError *error = NULL;
-
- if (!g_cancellable_set_error_if_cancelled (priv->cancellable, &error))
- set_error_if_http_failed (priv->msg, &error);
-
- priv->got_headers_cb = NULL;
- priv->finished_cb = NULL;
-
- /* Wake up the main context iteration */
- g_source_attach (g_idle_source_new (), NULL);
-}
-
-/**
- * webkit_soup_http_input_stream_send:
- * @httpstream: a #WebKitSoupHTTPInputStream
- * @cancellable: optional #GCancellable object, %NULL to ignore.
- * @error: location to store the error occuring, or %NULL to ignore
- *
- * Synchronously sends the HTTP request associated with @stream, and
- * reads the response headers. Call this after webkit_soup_http_input_stream_new()
- * and before the first g_input_stream_read() if you want to check the
- * HTTP status code before you start reading.
- *
- * Return value: %TRUE if msg has a successful (2xx) status, %FALSE if
- * not.
- **/
-gboolean
-webkit_soup_http_input_stream_send (WebKitSoupHTTPInputStream *httpstream,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (httpstream);
- GInputStream *istream = (GInputStream *)httpstream;
- gboolean result;
-
- g_return_val_if_fail (WEBKIT_IS_SOUP_HTTP_INPUT_STREAM (httpstream), FALSE);
-
- if (!g_input_stream_set_pending (istream, error))
- return FALSE;
-
- priv->got_headers_cb = send_sync_finished;
- priv->finished_cb = send_sync_finished;
-
- result = webkit_soup_http_input_stream_send_internal (istream, cancellable, error);
- g_input_stream_clear_pending (istream);
-
- return result;
-}
-
-static gssize
-webkit_soup_http_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (priv->finished)
- return 0;
-
- /* If there is data leftover from a previous read, return it. */
- if (priv->leftover_bufsize)
- return read_from_leftover (priv, buffer, count);
-
- /* No leftover data, accept one chunk from the network */
- webkit_soup_http_input_stream_prepare_for_io (stream, cancellable, buffer, count);
- while (!priv->finished && priv->caller_nread == 0 &&
- !g_cancellable_is_cancelled (cancellable))
- g_main_context_iteration (priv->async_context, TRUE);
- webkit_soup_http_input_stream_done_io (stream);
-
- if (priv->caller_nread > 0)
- return priv->caller_nread;
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
- else if (set_error_if_http_failed (priv->msg, error))
- return -1;
- else
- return 0;
-}
-
-static gboolean
-webkit_soup_http_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- if (!priv->finished)
- soup_session_cancel_message (priv->session, priv->msg, SOUP_STATUS_CANCELLED);
-
- return TRUE;
-}
-
-static void
-wrapper_callback (GObject *source_object, GAsyncResult *res,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (source_object);
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_input_stream_clear_pending (stream);
- if (priv->outstanding_callback)
- (*priv->outstanding_callback)(source_object, res, user_data);
- priv->outstanding_callback = NULL;
- g_object_unref (stream);
-}
-
-static void
-send_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GError *error = NULL;
- gboolean success;
-
- success = webkit_soup_http_input_stream_send_internal (G_INPUT_STREAM (object),
- cancellable, &error);
- g_simple_async_result_set_op_res_gboolean (res, success);
- if (error) {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- }
-}
-
-static void
-webkit_soup_http_input_stream_send_async_in_thread (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
- webkit_soup_http_input_stream_send_async_in_thread);
- g_simple_async_result_run_in_thread (res, send_async_thread,
- io_priority, cancellable);
- g_object_unref (res);
-}
-
-static void
-send_async_finished (GInputStream *stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- if (!g_cancellable_set_error_if_cancelled (priv->cancellable, &error))
- set_error_if_http_failed (priv->msg, &error);
-
- priv->got_headers_cb = NULL;
- priv->finished_cb = NULL;
- webkit_soup_http_input_stream_done_io (stream);
-
- result = priv->result;
- priv->result = NULL;
-
- g_simple_async_result_set_op_res_gboolean (result, error == NULL);
- if (error) {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-webkit_soup_http_input_stream_send_async_internal (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
-
- g_object_ref (stream);
- priv->outstanding_callback = callback;
-
- /* If the session uses the default GMainContext, then we can do
- * async I/O directly. But if it has its own main context, it's
- * easier to just run it in another thread.
- */
- if (soup_session_get_async_context (priv->session)) {
- webkit_soup_http_input_stream_send_async_in_thread (stream, io_priority, cancellable,
- wrapper_callback, user_data);
- return;
- }
-
- priv->got_headers_cb = send_async_finished;
- priv->finished_cb = send_async_finished;
-
- webkit_soup_http_input_stream_prepare_for_io (stream, cancellable, NULL, 0);
- priv->result = g_simple_async_result_new (G_OBJECT (stream),
- wrapper_callback, user_data,
- webkit_soup_http_input_stream_send_async);
-}
-
-/**
- * webkit_soup_http_input_stream_send_async:
- * @httpstream: a #WebKitSoupHTTPInputStream
- * @io_priority: the io priority of the request.
- * @cancellable: optional #GCancellable object, %NULL to ignore.
- * @callback: callback to call when the request is satisfied
- * @user_data: the data to pass to callback function
- *
- * Asynchronously sends the HTTP request associated with @stream, and
- * reads the response headers. Call this after webkit_soup_http_input_stream_new()
- * and before the first g_input_stream_read_async() if you want to
- * check the HTTP status code before you start reading.
- **/
-void
-webkit_soup_http_input_stream_send_async (WebKitSoupHTTPInputStream *httpstream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GInputStream *istream = (GInputStream *)httpstream;
- GError *error = NULL;
-
- g_return_if_fail (WEBKIT_IS_SOUP_HTTP_INPUT_STREAM (httpstream));
-
- if (!g_input_stream_set_pending (istream, &error)) {
- g_simple_async_report_gerror_in_idle (G_OBJECT (httpstream),
- callback,
- user_data,
- error);
- g_error_free (error);
- return;
- }
- webkit_soup_http_input_stream_send_async_internal (istream, io_priority, cancellable,
- callback, user_data);
-}
-
-/**
- * webkit_soup_http_input_stream_send_finish:
- * @httpstream: a #WebKitSoupHTTPInputStream
- * @result: a #GAsyncResult.
- * @error: a #GError location to store the error occuring, or %NULL to
- * ignore.
- *
- * Finishes a webkit_soup_http_input_stream_send_async() operation.
- *
- * Return value: %TRUE if the message was sent successfully and
- * received a successful status code, %FALSE if not.
- **/
-gboolean
-webkit_soup_http_input_stream_send_finish (WebKitSoupHTTPInputStream *httpstream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- g_return_val_if_fail (g_simple_async_result_get_source_tag (simple) == webkit_soup_http_input_stream_send_async, FALSE);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return FALSE;
-
- return g_simple_async_result_get_op_res_gboolean (simple);
-}
-
-static void
-read_async_done (GInputStream *stream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- result = priv->result;
- priv->result = NULL;
-
- if (g_cancellable_set_error_if_cancelled (priv->cancellable, &error) ||
- set_error_if_http_failed (priv->msg, &error)) {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- } else
- g_simple_async_result_set_op_res_gssize (result, priv->caller_nread);
-
- priv->got_chunk_cb = NULL;
- priv->finished_cb = NULL;
- priv->cancelled_cb = NULL;
- webkit_soup_http_input_stream_done_io (stream);
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-webkit_soup_http_input_stream_read_async (GInputStream *stream,
- void *buffer,
- gsize count,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- GSimpleAsyncResult *result;
-
- /* If the session uses the default GMainContext, then we can do
- * async I/O directly. But if it has its own main context, we fall
- * back to the async-via-sync-in-another-thread implementation.
- */
- if (soup_session_get_async_context (priv->session)) {
- G_INPUT_STREAM_CLASS (webkit_soup_http_input_stream_parent_class)->
- read_async (stream, buffer, count, io_priority,
- cancellable, callback, user_data);
- return;
- }
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- webkit_soup_http_input_stream_read_async);
-
- if (priv->finished) {
- g_simple_async_result_set_op_res_gssize (result, 0);
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
- return;
- }
-
- if (priv->leftover_bufsize) {
- gsize nread = read_from_leftover (priv, buffer, count);
- g_simple_async_result_set_op_res_gssize (result, nread);
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
- return;
- }
-
- priv->result = result;
-
- priv->got_chunk_cb = read_async_done;
- priv->finished_cb = read_async_done;
- priv->cancelled_cb = read_async_done;
- webkit_soup_http_input_stream_prepare_for_io (stream, cancellable, buffer, count);
-}
-
-static gssize
-webkit_soup_http_input_stream_read_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), -1);
- simple = G_SIMPLE_ASYNC_RESULT (result);
- g_return_val_if_fail (g_simple_async_result_get_source_tag (simple) == webkit_soup_http_input_stream_read_async, -1);
-
- return g_simple_async_result_get_op_res_gssize (simple);
-}
-
-static void
-webkit_soup_http_input_stream_close_async (GInputStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- gboolean success;
- GError *error = NULL;
-
- result = g_simple_async_result_new (G_OBJECT (stream),
- callback, user_data,
- webkit_soup_http_input_stream_close_async);
- success = webkit_soup_http_input_stream_close (stream, cancellable, &error);
- g_simple_async_result_set_op_res_gboolean (result, success);
- if (error) {
- g_simple_async_result_set_from_error (result, error);
- g_error_free (error);
- }
-
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
-}
-
-static gboolean
-webkit_soup_http_input_stream_close_finish (GInputStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- /* Failures handled in generic close_finish code */
- return TRUE;
-}
-
-static goffset
-webkit_soup_http_input_stream_tell (GSeekable *seekable)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (seekable);
-
- return priv->offset;
-}
-
-static gboolean
-webkit_soup_http_input_stream_can_seek (GSeekable *seekable)
-{
- return TRUE;
-}
-
-extern void soup_message_io_cleanup (SoupMessage *msg);
-
-static gboolean
-webkit_soup_http_input_stream_seek (GSeekable *seekable,
- goffset offset,
- GSeekType type,
- GCancellable *cancellable,
- GError **error)
-{
- GInputStream *stream = G_INPUT_STREAM (seekable);
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (seekable);
- char *range;
-
- if (type == G_SEEK_END) {
- /* FIXME: we could send "bytes=-offset", but unless we
- * know the Content-Length, we wouldn't be able to
- * answer a tell() properly. We could find the
- * Content-Length by doing a HEAD...
- */
-
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "G_SEEK_END not currently supported");
- return FALSE;
- }
-
- if (!g_input_stream_set_pending (stream, error))
- return FALSE;
-
- soup_session_cancel_message (priv->session, priv->msg, SOUP_STATUS_CANCELLED);
- soup_message_io_cleanup (priv->msg);
-
- switch (type) {
- case G_SEEK_CUR:
- offset += priv->offset;
- /* fall through */
-
- case G_SEEK_SET:
- range = g_strdup_printf ("bytes=%" G_GUINT64_FORMAT "-", (guint64)offset);
- priv->offset = offset;
- break;
-
- case G_SEEK_END:
- range = NULL; /* keep compilers happy */
- g_return_val_if_reached (FALSE);
- break;
-
- default:
- g_return_val_if_reached (FALSE);
- }
-
- soup_message_headers_remove (priv->msg->request_headers, "Range");
- soup_message_headers_append (priv->msg->request_headers, "Range", range);
- g_free (range);
-
- webkit_soup_http_input_stream_queue_message (WEBKIT_SOUP_HTTP_INPUT_STREAM (stream));
-
- g_input_stream_clear_pending (stream);
- return TRUE;
-}
-
-static gboolean
-webkit_soup_http_input_stream_can_truncate (GSeekable *seekable)
-{
- return FALSE;
-}
-
-static gboolean
-webkit_soup_http_input_stream_truncate (GSeekable *seekable,
- goffset offset,
- GCancellable *cancellable,
- GError **error)
-{
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "Truncate not allowed on input stream");
- return FALSE;
-}
-
-SoupMessage *
-webkit_soup_http_input_stream_get_message (WebKitSoupHTTPInputStream *httpstream)
-{
- WebKitSoupHTTPInputStreamPrivate *priv = WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (httpstream);
- return priv->msg ? g_object_ref (priv->msg) : NULL;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.h b/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.h
deleted file mode 100644
index 6b98559..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006, 2007, 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __WEBKIT_SOUP_HTTP_INPUT_STREAM_H__
-#define __WEBKIT_SOUP_HTTP_INPUT_STREAM_H__
-
-#include <gio/gio.h>
-#include <libsoup/soup-types.h>
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM (webkit_soup_http_input_stream_get_type ())
-#define WEBKIT_SOUP_HTTP_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM, WebKitSoupHTTPInputStream))
-#define WEBKIT_SOUP_HTTP_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM, WebKitSoupHTTPInputStreamClass))
-#define WEBKIT_IS_SOUP_HTTP_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM))
-#define WEBKIT_IS_SOUP_HTTP_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM))
-#define WEBKIT_SOUP_HTTP_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), WEBKIT_TYPE_SOUP_HTTP_INPUT_STREAM, WebKitSoupHTTPInputStreamClass))
-
-typedef struct WebKitSoupHTTPInputStream WebKitSoupHTTPInputStream;
-typedef struct WebKitSoupHTTPInputStreamClass WebKitSoupHTTPInputStreamClass;
-
-struct WebKitSoupHTTPInputStream {
- GInputStream parent;
-};
-
-struct WebKitSoupHTTPInputStreamClass {
- GInputStreamClass parent_class;
-
- /* Padding for future expansion */
- void (*_g_reserved1)(void);
- void (*_g_reserved2)(void);
- void (*_g_reserved3)(void);
- void (*_g_reserved4)(void);
- void (*_g_reserved5)(void);
-};
-
-GType webkit_soup_http_input_stream_get_type (void) G_GNUC_CONST;
-
-WebKitSoupHTTPInputStream *webkit_soup_http_input_stream_new (SoupSession *session,
- SoupMessage *msg);
-
-gboolean webkit_soup_http_input_stream_send (WebKitSoupHTTPInputStream *httpstream,
- GCancellable *cancellable,
- GError **error);
-
-void webkit_soup_http_input_stream_send_async (WebKitSoupHTTPInputStream *httpstream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean webkit_soup_http_input_stream_send_finish (WebKitSoupHTTPInputStream *httpstream,
- GAsyncResult *result,
- GError **error);
-
-SoupMessage *webkit_soup_http_input_stream_get_message (WebKitSoupHTTPInputStream *httpstream);
-
-G_END_DECLS
-
-#endif /* __WEBKIT_SOUP_HTTP_INPUT_STREAM_H__ */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-data.c b/Source/WebCore/platform/network/soup/cache/soup-request-data.c
deleted file mode 100644
index ced5c4a..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-data.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-request-data.c: data: URI request object
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "soup-request-data.h"
-
-#include "soup-requester.h"
-#include <libsoup/soup.h>
-#include <glib/gi18n.h>
-
-G_DEFINE_TYPE (WebKitSoupRequestData, webkit_soup_request_data, WEBKIT_TYPE_SOUP_REQUEST)
-
-struct _WebKitSoupRequestDataPrivate {
- gsize content_length;
- char *content_type;
-};
-
-static void
-webkit_soup_request_data_init (WebKitSoupRequestData *data)
-{
- data->priv = G_TYPE_INSTANCE_GET_PRIVATE (data, WEBKIT_TYPE_SOUP_REQUEST_DATA, WebKitSoupRequestDataPrivate);
-}
-
-static void
-webkit_soup_request_data_finalize (GObject *object)
-{
- WebKitSoupRequestData *data = WEBKIT_SOUP_REQUEST_DATA (object);
-
- g_free (data->priv->content_type);
-
- G_OBJECT_CLASS (webkit_soup_request_data_parent_class)->finalize (object);
-}
-
-static gboolean
-webkit_soup_request_data_check_uri (WebKitSoupRequest *request,
- SoupURI *uri,
- GError **error)
-{
- return uri->host == NULL;
-}
-
-static GInputStream *
-webkit_soup_request_data_send (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupRequestData *data = WEBKIT_SOUP_REQUEST_DATA (request);
- SoupURI *uri = webkit_soup_request_get_uri (request);
- GInputStream *memstream;
- const char *comma, *semi, *start, *end;
- gboolean base64 = FALSE;
-
- gchar *uristr = soup_uri_to_string (uri, FALSE);
- comma = strchr (uristr, ',');
- if (comma && comma != uristr) {
- /* Deal with MIME type / params */
- semi = memchr (uristr, ';', comma - uristr);
- end = semi ? semi : comma;
-
- if (semi && !g_ascii_strncasecmp (semi, ";base64", MAX ((size_t) (comma - semi), strlen (";base64"))))
- base64 = TRUE;
-
- if (end != uristr)
- if (base64)
- data->priv->content_type = g_strndup (uristr, end - uristr);
- else
- data->priv->content_type =
- webkit_soup_request_uri_decoded_copy (uristr, end - uristr);
- }
-
- memstream = g_memory_input_stream_new ();
-
- start = comma ? comma + 1 : uristr;
-
- if (*start) {
- guchar *buf;
-
- if (base64) {
- int inlen, state = 0;
- guint save = 0;
-
- inlen = strlen (start);
- buf = g_malloc0 (inlen * 3 / 4 + 3);
- data->priv->content_length =
- g_base64_decode_step (start, inlen, buf,
- &state, &save);
- if (state != 0) {
- g_free (buf);
- goto fail;
- }
- } else {
- /* Cannot use g_uri_unescape_string nor
- soup_uri_decode because we don't want to
- fail for things like "%3E%%3C" -> ">%<" */
- buf = (guchar *)webkit_soup_request_uri_decoded_copy (start, strlen (start));
- if (!buf)
- goto fail;
- data->priv->content_length = strlen ((char *)buf);
- }
-
- g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (memstream),
- buf, data->priv->content_length,
- g_free);
- }
- g_free (uristr);
-
- return memstream;
-
- fail:
- g_free (uristr);
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_BAD_URI,
- _ ("Unable to decode URI: %s"), start);
- g_object_unref (memstream);
- return NULL;
-}
-
-static goffset
-webkit_soup_request_data_get_content_length (WebKitSoupRequest *request)
-{
- WebKitSoupRequestData *data = WEBKIT_SOUP_REQUEST_DATA (request);
-
- return data->priv->content_length;
-}
-
-static const char *
-webkit_soup_request_data_get_content_type (WebKitSoupRequest *request)
-{
- WebKitSoupRequestData *data = WEBKIT_SOUP_REQUEST_DATA (request);
-
- return data->priv->content_type;
-}
-
-static void
-webkit_soup_request_data_class_init (WebKitSoupRequestDataClass *request_data_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (request_data_class);
- WebKitSoupRequestClass *request_class =
- WEBKIT_SOUP_REQUEST_CLASS (request_data_class);
-
- g_type_class_add_private (request_data_class, sizeof (WebKitSoupRequestDataPrivate));
-
- object_class->finalize = webkit_soup_request_data_finalize;
-
- request_class->check_uri = webkit_soup_request_data_check_uri;
- request_class->send = webkit_soup_request_data_send;
- request_class->get_content_length = webkit_soup_request_data_get_content_length;
- request_class->get_content_type = webkit_soup_request_data_get_content_type;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-data.h b/Source/WebCore/platform/network/soup/cache/soup-request-data.h
deleted file mode 100644
index c9631a4..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-data.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_REQUEST_DATA_H
-#define WEBKIT_SOUP_REQUEST_DATA_H 1
-
-#include "soup-request.h"
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_REQUEST_DATA (webkit_soup_request_data_get_type ())
-#define WEBKIT_SOUP_REQUEST_DATA(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), WEBKIT_TYPE_SOUP_REQUEST_DATA, WebKitSoupRequestData))
-#define WEBKIT_SOUP_REQUEST_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_REQUEST_DATA, WebKitSoupRequestDataClass))
-#define WEBKIT_IS_SOUP_REQUEST_DATA(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), WEBKIT_TYPE_SOUP_REQUEST_DATA))
-#define WEBKIT_IS_SOUP_REQUEST_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_SOUP_REQUEST_DATA))
-#define WEBKIT_SOUP_REQUEST_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_REQUEST_DATA, WebKitSoupRequestDataClass))
-
-typedef struct _WebKitSoupRequestDataPrivate WebKitSoupRequestDataPrivate;
-
-typedef struct {
- WebKitSoupRequest parent;
-
- WebKitSoupRequestDataPrivate *priv;
-} WebKitSoupRequestData;
-
-typedef struct {
- WebKitSoupRequestClass parent;
-} WebKitSoupRequestDataClass;
-
-GType webkit_soup_request_data_get_type (void);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_REQUEST_DATA_H */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-file.c b/Source/WebCore/platform/network/soup/cache/soup-request-file.c
deleted file mode 100644
index 24ccb10..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-file.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-request-file.c: file: URI request object
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "soup-request-file.h"
-#include "soup-directory-input-stream.h"
-#include "soup-requester.h"
-#include <glib/gi18n.h>
-
-G_DEFINE_TYPE (WebKitSoupRequestFile, webkit_soup_request_file, WEBKIT_TYPE_SOUP_REQUEST)
-
-struct _WebKitSoupRequestFilePrivate {
- GFile *gfile;
-
- char *mime_type;
- goffset size;
-};
-
-GFile *
-webkit_soup_request_file_get_file (WebKitSoupRequestFile *file)
-{
- return g_object_ref (file->priv->gfile);
-}
-
-static void
-webkit_soup_request_file_init (WebKitSoupRequestFile *file)
-{
- file->priv = G_TYPE_INSTANCE_GET_PRIVATE (file, WEBKIT_TYPE_SOUP_REQUEST_FILE, WebKitSoupRequestFilePrivate);
-
- file->priv->size = -1;
-}
-
-static void
-webkit_soup_request_file_finalize (GObject *object)
-{
- WebKitSoupRequestFile *file = WEBKIT_SOUP_REQUEST_FILE (object);
-
- if (file->priv->gfile)
- g_object_unref (file->priv->gfile);
- g_free (file->priv->mime_type);
-
- G_OBJECT_CLASS (webkit_soup_request_file_parent_class)->finalize (object);
-}
-
-static gboolean
-webkit_soup_request_file_check_uri (WebKitSoupRequest *request,
- SoupURI *uri,
- GError **error)
-{
- /* "file:/foo" is not valid */
- if (!uri->host)
- return FALSE;
-
- /* but it must be "file:///..." or "file://localhost/..." */
- if (uri->scheme == SOUP_URI_SCHEME_FILE &&
- *uri->host &&
- g_ascii_strcasecmp (uri->host, "localhost") != 0)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-webkit_soup_request_file_ftp_main_loop_quit (GObject *object,
- GAsyncResult *result,
- gpointer loop)
-{
- g_main_loop_quit (loop);
-}
-
-/* This is a somewhat hacky way to get FTP to almost work. The proper way to
- * get FTP to _really_ work involves hacking GIO to have APIs to handle
- * canoncial URLs.
- */
-static GFile *
-webkit_soup_request_file_ensure_file_ftp (SoupURI *uri,
- GCancellable *cancellable,
- GError **error)
-{
- SoupURI *host;
- char *s;
- GFile *file, *result;
- GMount *mount;
-
- host = soup_uri_copy_host (uri);
- s = soup_uri_to_string (host, FALSE);
- file = g_file_new_for_uri (s);
- soup_uri_free (host);
- g_free (s);
-
- mount = g_file_find_enclosing_mount (file, cancellable, error);
- if (mount == NULL && g_file_supports_thread_contexts (file)) {
- GMainContext *context = g_main_context_new ();
- GMainLoop *loop = g_main_loop_new (context, FALSE);
-
- g_clear_error (error);
- g_main_context_push_thread_default (context);
- g_file_mount_enclosing_volume (file,
- G_MOUNT_MOUNT_NONE,
- NULL, /* FIXME! */
- cancellable,
- webkit_soup_request_file_ftp_main_loop_quit,
- loop);
- g_main_loop_run (loop);
- g_main_context_pop_thread_default (context);
- g_main_loop_unref (loop);
- g_main_context_unref (context);
- mount = g_file_find_enclosing_mount (file, cancellable, error);
- }
- if (mount == NULL)
- return NULL;
- g_object_unref (file);
-
- file = g_mount_get_default_location (mount);
- g_object_unref (mount);
-
- s = g_strdup (uri->path);
- if (strchr (s, ';'))
- *strchr (s, ';') = 0;
-
- result = g_file_resolve_relative_path (file, s);
- g_free (s);
- g_object_unref (file);
-
- return result;
-}
-
-static gboolean
-webkit_soup_request_file_ensure_file (WebKitSoupRequestFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- SoupURI *uri;
-
- if (file->priv->gfile)
- return TRUE;
-
- uri = webkit_soup_request_get_uri (WEBKIT_SOUP_REQUEST (file));
- if (uri->scheme == SOUP_URI_SCHEME_FILE) {
- /* We cannot use soup_uri_decode as it incorrectly
- * returns NULL for incorrectly encoded URIs (that
- * could be valid filenames). This will be hopefully
- * shipped in libsoup 2.32.1 but we want to land this
- * first. TODO: replace uri_decoded_copy by
- * soup_uri_decode when the required libsoup version
- * is bumped out to 2.32.1
- */
- gchar *decoded_uri = webkit_soup_request_uri_decoded_copy (uri->path, strlen (uri->path));
-
- if (decoded_uri) {
- /* Do not use new_for_uri() as the decoded URI
- * could not be a valid URI
- */
- file->priv->gfile = g_file_new_for_path (decoded_uri);
- g_free (decoded_uri);
- }
-
- return TRUE;
- } else if (uri->scheme == SOUP_URI_SCHEME_FTP) {
- file->priv->gfile = webkit_soup_request_file_ensure_file_ftp (uri,
- cancellable,
- error);
- return file->priv->gfile != NULL;
- }
-
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_UNSUPPORTED_URI_SCHEME,
- _ ("Unsupported URI scheme '%s'"), uri->scheme);
- return FALSE;
-}
-
-static GInputStream *
-webkit_soup_request_file_send (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupRequestFile *file = WEBKIT_SOUP_REQUEST_FILE (request);
- GInputStream *stream;
- GError *my_error = NULL;
-
- if (!webkit_soup_request_file_ensure_file (file, cancellable, error))
- return NULL;
-
- stream = G_INPUT_STREAM (g_file_read (file->priv->gfile,
- cancellable, &my_error));
- if (stream == NULL) {
- if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY)) {
- GFileEnumerator *enumerator;
- g_clear_error (&my_error);
- enumerator = g_file_enumerate_children (file->priv->gfile,
- "*",
- G_FILE_QUERY_INFO_NONE,
- cancellable,
- error);
- if (enumerator) {
- stream = webkit_soup_directory_input_stream_new (enumerator,
- webkit_soup_request_get_uri (request));
- g_object_unref (enumerator);
- file->priv->mime_type = g_strdup ("text/html");
- }
- } else {
- g_propagate_error (error, my_error);
- }
- } else {
- GFileInfo *info = g_file_query_info (file->priv->gfile,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_SIZE,
- 0, cancellable, NULL);
- if (info) {
- const char *content_type;
- file->priv->size = g_file_info_get_size (info);
- content_type = g_file_info_get_content_type (info);
-
- if (content_type)
- file->priv->mime_type = g_content_type_get_mime_type (content_type);
- g_object_unref (info);
- }
- }
-
- return stream;
-}
-
-static void
-webkit_soup_request_file_send_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GInputStream *stream;
- WebKitSoupRequest *request;
- GError *error = NULL;
-
- request = WEBKIT_SOUP_REQUEST (object);
-
- stream = webkit_soup_request_file_send (request, cancellable, &error);
-
- if (stream == NULL) {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- } else {
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
- }
-}
-
-static void
-webkit_soup_request_file_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (request), callback, user_data, webkit_soup_request_file_send_async);
-
- g_simple_async_result_run_in_thread (res, webkit_soup_request_file_send_async_thread, G_PRIORITY_DEFAULT, cancellable);
- g_object_unref (res);
-}
-
-static GInputStream *
-webkit_soup_request_file_send_finish (WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == webkit_soup_request_file_send_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
-}
-
-static goffset
-webkit_soup_request_file_get_content_length (WebKitSoupRequest *request)
-{
- WebKitSoupRequestFile *file = WEBKIT_SOUP_REQUEST_FILE (request);
-
- return file->priv->size;
-}
-
-static const char *
-webkit_soup_request_file_get_content_type (WebKitSoupRequest *request)
-{
- WebKitSoupRequestFile *file = WEBKIT_SOUP_REQUEST_FILE (request);
-
- if (!file->priv->mime_type)
- return "application/octet-stream";
-
- return file->priv->mime_type;
-}
-
-static void
-webkit_soup_request_file_class_init (WebKitSoupRequestFileClass *request_file_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (request_file_class);
- WebKitSoupRequestClass *request_class =
- WEBKIT_SOUP_REQUEST_CLASS (request_file_class);
-
- g_type_class_add_private (request_file_class, sizeof (WebKitSoupRequestFilePrivate));
-
- object_class->finalize = webkit_soup_request_file_finalize;
-
- request_class->check_uri = webkit_soup_request_file_check_uri;
- request_class->send = webkit_soup_request_file_send;
- request_class->send_async = webkit_soup_request_file_send_async;
- request_class->send_finish = webkit_soup_request_file_send_finish;
- request_class->get_content_length = webkit_soup_request_file_get_content_length;
- request_class->get_content_type = webkit_soup_request_file_get_content_type;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-file.h b/Source/WebCore/platform/network/soup/cache/soup-request-file.h
deleted file mode 100644
index 459e82a..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-file.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_REQUEST_FILE_H
-#define WEBKIT_SOUP_REQUEST_FILE_H 1
-
-#include "soup-request.h"
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_REQUEST_FILE (webkit_soup_request_file_get_type ())
-#define WEBKIT_SOUP_REQUEST_FILE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), WEBKIT_TYPE_SOUP_REQUEST_FILE, WebKitSoupRequestFile))
-#define WEBKIT_SOUP_REQUEST_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_REQUEST_FILE, WebKitSoupRequestFileClass))
-#define WEBKIT_IS_SOUP_REQUEST_FILE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), WEBKIT_TYPE_SOUP_REQUEST_FILE))
-#define WEBKIT_IS_SOUP_REQUEST_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_SOUP_REQUEST_FILE))
-#define WEBKIT_SOUP_REQUEST_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_REQUEST_FILE, WebKitSoupRequestFileClass))
-
-typedef struct _WebKitSoupRequestFilePrivate WebKitSoupRequestFilePrivate;
-
-typedef struct {
- WebKitSoupRequest parent;
-
- WebKitSoupRequestFilePrivate *priv;
-} WebKitSoupRequestFile;
-
-typedef struct {
- WebKitSoupRequestClass parent;
-} WebKitSoupRequestFileClass;
-
-GType webkit_soup_request_file_get_type (void);
-
-GFile *webkit_soup_request_file_get_file (WebKitSoupRequestFile *file);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_REQUEST_FILE_H */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-http.c b/Source/WebCore/platform/network/soup/cache/soup-request-http.c
deleted file mode 100644
index 777fd72..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-http.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-request-http.c: http: URI request object
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-
-#include "soup-cache.h"
-#include "soup-cache-private.h"
-#include "soup-http-input-stream.h"
-#include "soup-request-http.h"
-
-G_DEFINE_TYPE (WebKitSoupRequestHTTP, webkit_soup_request_http, WEBKIT_TYPE_SOUP_REQUEST)
-
-struct _WebKitSoupRequestHTTPPrivate {
- SoupMessage *msg;
-};
-
-/**
- * webkit_soup_request_http_get_message:
- * @http: a #WebKitSoupRequestHTTP object
- *
- * Gets a new reference to the #SoupMessage associated to this SoupRequest
- *
- * Returns: a new reference to the #SoupMessage
- **/
-SoupMessage *
-webkit_soup_request_http_get_message (WebKitSoupRequestHTTP *http)
-{
- g_return_val_if_fail (WEBKIT_IS_SOUP_REQUEST_HTTP (http), NULL);
-
- return g_object_ref (http->priv->msg);
-}
-
-static void
-webkit_soup_request_http_init (WebKitSoupRequestHTTP *http)
-{
- http->priv = G_TYPE_INSTANCE_GET_PRIVATE (http, WEBKIT_TYPE_SOUP_REQUEST_HTTP, WebKitSoupRequestHTTPPrivate);
-}
-
-static gboolean
-webkit_soup_request_http_check_uri (WebKitSoupRequest *request,
- SoupURI *uri,
- GError **error)
-{
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (request);
-
- if (!SOUP_URI_VALID_FOR_HTTP (uri))
- return FALSE;
-
- http->priv->msg = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
- return TRUE;
-}
-
-static void
-webkit_soup_request_http_finalize (GObject *object)
-{
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (object);
-
- if (http->priv->msg)
- g_object_unref (http->priv->msg);
-
- G_OBJECT_CLASS (webkit_soup_request_http_parent_class)->finalize (object);
-}
-
-static GInputStream *
-webkit_soup_request_http_send (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupHTTPInputStream *httpstream;
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (request);
-
- httpstream = webkit_soup_http_input_stream_new (webkit_soup_request_get_session (request), http->priv->msg);
- if (!webkit_soup_http_input_stream_send (httpstream, cancellable, error)) {
- g_object_unref (httpstream);
- return NULL;
- }
- return (GInputStream *)httpstream;
-}
-
-
-static void
-sent_async (GObject *source, GAsyncResult *result, gpointer user_data)
-{
- WebKitSoupHTTPInputStream *httpstream = WEBKIT_SOUP_HTTP_INPUT_STREAM (source);
- GSimpleAsyncResult *simple = user_data;
- GError *error = NULL;
-
- if (webkit_soup_http_input_stream_send_finish (httpstream, result, &error)) {
- g_simple_async_result_set_op_res_gpointer (simple, httpstream, g_object_unref);
- } else {
- g_simple_async_result_set_from_error (simple, error);
- g_error_free (error);
- g_object_unref (httpstream);
- }
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-
-typedef struct {
- WebKitSoupRequestHTTP *req;
- SoupMessage *original;
- GCancellable *cancellable;
- GAsyncReadyCallback callback;
- gpointer user_data;
-} ConditionalHelper;
-
-
-static void
-conditional_get_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
-{
- ConditionalHelper *helper = (ConditionalHelper *)user_data;
- GSimpleAsyncResult *simple;
- WebKitSoupHTTPInputStream *httpstream;
-
- simple = g_simple_async_result_new (G_OBJECT (helper->req),
- helper->callback, helper->user_data,
- conditional_get_ready_cb);
-
- if (msg->status_code == SOUP_STATUS_NOT_MODIFIED) {
- WebKitSoupCache *cache = (WebKitSoupCache *)soup_session_get_feature (session, WEBKIT_TYPE_SOUP_CACHE);
-
- httpstream = (WebKitSoupHTTPInputStream *)webkit_soup_cache_send_response (cache, msg);
- if (httpstream) {
- const gchar *content_type;
-
- g_simple_async_result_set_op_res_gpointer (simple, httpstream, g_object_unref);
-
- soup_message_got_headers (helper->original);
-
- /* FIXME: Uncomment this when this becomes part of libsoup
- * if (!soup_message_disables_feature(helper->original, SOUP_TYPE_CONTENT_SNIFFER)) {
- * const gchar *content_type = soup_message_headers_get_content_type (msg->response_headers, NULL);
- * soup_message_content_sniffed (helper->original, content_type, NULL);
- * }
- */
- content_type = soup_message_headers_get_content_type (msg->response_headers, NULL);
- soup_message_content_sniffed (helper->original, content_type, NULL);
-
- g_simple_async_result_complete (simple);
-
- soup_message_finished (helper->original);
-
- g_object_unref (simple);
- } else {
- /* Ask again for the resource, somehow the cache cannot locate it */
- httpstream = webkit_soup_http_input_stream_new (session, helper->original);
- webkit_soup_http_input_stream_send_async (httpstream, G_PRIORITY_DEFAULT,
- helper->cancellable, sent_async, simple);
- }
- } else {
- /* It is in the cache but it was modified remotely */
- httpstream = webkit_soup_http_input_stream_new (session, helper->original);
- webkit_soup_http_input_stream_send_async (httpstream, G_PRIORITY_DEFAULT,
- helper->cancellable, sent_async, simple);
- }
-
- g_object_unref (helper->req);
- g_object_unref (helper->original);
- g_slice_free (ConditionalHelper, helper);
-}
-
-typedef struct {
- WebKitSoupRequestHTTP *http;
- GAsyncReadyCallback callback;
- gpointer user_data;
- WebKitSoupHTTPInputStream *httpstream;
-} SendAsyncHelper;
-
-static void webkit_soup_request_http_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-static gboolean
-send_async_cb (gpointer data)
-{
- GSimpleAsyncResult *simple;
- SendAsyncHelper *helper = (SendAsyncHelper *)data;
- const gchar *content_type;
-
- simple = g_simple_async_result_new (G_OBJECT (helper->http),
- helper->callback, helper->user_data,
- webkit_soup_request_http_send_async);
- g_simple_async_result_set_op_res_gpointer (simple, helper->httpstream, g_object_unref);
-
- /* Update message status */
- soup_message_set_status (helper->http->priv->msg, SOUP_STATUS_OK);
-
- /* Issue signals */
- soup_message_got_headers (helper->http->priv->msg);
-
- /* FIXME: Uncomment this when this becomes part of libsoup
- * if (!soup_message_disables_feature(helper->http->priv->msg, SOUP_TYPE_CONTENT_SNIFFER)) {
- * const gchar *content_type = soup_message_headers_get_content_type (helper->http->priv->msg->response_headers, NULL);
- * soup_message_content_sniffed (helper->http->priv->msg, content_type, NULL);
- * }
- */
- content_type = soup_message_headers_get_content_type (helper->http->priv->msg->response_headers, NULL);
- soup_message_content_sniffed (helper->http->priv->msg, content_type, NULL);
-
- g_simple_async_result_complete (simple);
-
- soup_message_finished (helper->http->priv->msg);
-
- g_object_unref (simple);
-
- g_object_unref (helper->http);
- g_slice_free (SendAsyncHelper, helper);
-
- return FALSE;
-}
-
-static void
-webkit_soup_request_http_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (request);
- WebKitSoupHTTPInputStream *httpstream;
- GSimpleAsyncResult *simple;
- SoupSession *session;
- WebKitSoupCache *cache;
-
- session = webkit_soup_request_get_session (request);
- cache = (WebKitSoupCache *)soup_session_get_feature (session, WEBKIT_TYPE_SOUP_CACHE);
-
- if (cache) {
- WebKitSoupCacheResponse response;
-
- response = webkit_soup_cache_has_response (cache, http->priv->msg);
- if (response == WEBKIT_SOUP_CACHE_RESPONSE_FRESH) {
- WebKitSoupHTTPInputStream *httpstream;
-
- httpstream = (WebKitSoupHTTPInputStream *)
- webkit_soup_cache_send_response (cache, SOUP_MESSAGE (http->priv->msg));
-
- /* Cached resource file could have been deleted outside
- */
- if (httpstream) {
- /* Do return the stream asynchronously as in
- * the other cases. It's not enough to use
- * g_simple_async_result_complete_in_idle as
- * the signals must be also emitted
- * asynchronously
- */
- SendAsyncHelper *helper = g_slice_new (SendAsyncHelper);
- helper->http = g_object_ref (http);
- helper->callback = callback;
- helper->user_data = user_data;
- helper->httpstream = httpstream;
- g_timeout_add (0, send_async_cb, helper);
- return;
- }
- } else if (response == WEBKIT_SOUP_CACHE_RESPONSE_NEEDS_VALIDATION) {
- SoupMessage *conditional_msg;
- ConditionalHelper *helper;
-
- conditional_msg = webkit_soup_cache_generate_conditional_request (cache, http->priv->msg);
-
- helper = g_slice_new0 (ConditionalHelper);
- helper->req = g_object_ref (http);
- helper->original = g_object_ref (http->priv->msg);
- helper->cancellable = cancellable;
- helper->callback = callback;
- helper->user_data = user_data;
- soup_session_queue_message (session, conditional_msg,
- conditional_get_ready_cb,
- helper);
- return;
- }
- }
-
- simple = g_simple_async_result_new (G_OBJECT (http),
- callback, user_data,
- webkit_soup_request_http_send_async);
- httpstream = webkit_soup_http_input_stream_new (webkit_soup_request_get_session (request),
- http->priv->msg);
- webkit_soup_http_input_stream_send_async (httpstream, G_PRIORITY_DEFAULT,
- cancellable, sent_async, simple);
-}
-
-static GInputStream *
-webkit_soup_request_http_send_finish (WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (request), webkit_soup_request_http_send_async) || g_simple_async_result_is_valid (result, G_OBJECT (request), conditional_get_ready_cb), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
- return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
-}
-
-static goffset
-webkit_soup_request_http_get_content_length (WebKitSoupRequest *request)
-{
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (request);
-
- return soup_message_headers_get_content_length (http->priv->msg->response_headers);
-}
-
-static const char *
-webkit_soup_request_http_get_content_type (WebKitSoupRequest *request)
-{
- WebKitSoupRequestHTTP *http = WEBKIT_SOUP_REQUEST_HTTP (request);
-
- return soup_message_headers_get_content_type (http->priv->msg->response_headers, NULL);
-}
-
-static void
-webkit_soup_request_http_class_init (WebKitSoupRequestHTTPClass *request_http_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (request_http_class);
- WebKitSoupRequestClass *request_class =
- WEBKIT_SOUP_REQUEST_CLASS (request_http_class);
-
- g_type_class_add_private (request_http_class, sizeof (WebKitSoupRequestHTTPPrivate));
-
- object_class->finalize = webkit_soup_request_http_finalize;
-
- request_class->check_uri = webkit_soup_request_http_check_uri;
- request_class->send = webkit_soup_request_http_send;
- request_class->send_async = webkit_soup_request_http_send_async;
- request_class->send_finish = webkit_soup_request_http_send_finish;
- request_class->get_content_length = webkit_soup_request_http_get_content_length;
- request_class->get_content_type = webkit_soup_request_http_get_content_type;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request-http.h b/Source/WebCore/platform/network/soup/cache/soup-request-http.h
deleted file mode 100644
index a06a821..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request-http.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_REQUEST_HTTP_H
-#define WEBKIT_SOUP_REQUEST_HTTP_H 1
-
-#include "soup-request.h"
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_REQUEST_HTTP (webkit_soup_request_http_get_type ())
-#define WEBKIT_SOUP_REQUEST_HTTP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), WEBKIT_TYPE_SOUP_REQUEST_HTTP, WebKitSoupRequestHTTP))
-#define WEBKIT_SOUP_REQUEST_HTTP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_REQUEST_HTTP, WebKitSoupRequestHTTPClass))
-#define WEBKIT_IS_SOUP_REQUEST_HTTP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), WEBKIT_TYPE_SOUP_REQUEST_HTTP))
-#define WEBKIT_IS_SOUP_REQUEST_HTTP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_SOUP_REQUEST_HTTP))
-#define WEBKIT_SOUP_REQUEST_HTTP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_REQUEST_HTTP, WebKitSoupRequestHTTPClass))
-
-typedef struct _WebKitSoupRequestHTTPPrivate WebKitSoupRequestHTTPPrivate;
-
-typedef struct {
- WebKitSoupRequest parent;
-
- WebKitSoupRequestHTTPPrivate *priv;
-} WebKitSoupRequestHTTP;
-
-typedef struct {
- WebKitSoupRequestClass parent;
-} WebKitSoupRequestHTTPClass;
-
-GType webkit_soup_request_http_get_type (void);
-
-SoupMessage *webkit_soup_request_http_get_message (WebKitSoupRequestHTTP *http);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_REQUEST_HTTP_H */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request.c b/Source/WebCore/platform/network/soup/cache/soup-request.c
deleted file mode 100644
index 46b9f5a..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-request.c: Protocol-independent streaming request interface
- *
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010, Igalia S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-
-#include "soup-request.h"
-#include "soup-requester.h"
-
-/**
- * SECTION:soup-request
- * @short_description: Protocol-independent streaming request interface
- *
- * FIXME
- **/
-
-/**
- * WebKitSoupRequest:
- *
- * FIXME
- *
- * Since: 2.30
- **/
-
-static void webkit_soup_request_initable_interface_init (GInitableIface *initable_interface);
-
-G_DEFINE_TYPE_WITH_CODE (WebKitSoupRequest, webkit_soup_request, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
- webkit_soup_request_initable_interface_init))
-
-enum {
- PROP_0,
- PROP_URI,
- PROP_SESSION
-};
-
-struct _WebKitSoupRequestPrivate {
- SoupURI *uri;
- SoupSession *session;
-};
-
-static void
-webkit_soup_request_init (WebKitSoupRequest *request)
-{
- request->priv = G_TYPE_INSTANCE_GET_PRIVATE (request, WEBKIT_TYPE_SOUP_REQUEST, WebKitSoupRequestPrivate);
-}
-
-static void
-webkit_soup_request_finalize (GObject *object)
-{
- WebKitSoupRequest *request = WEBKIT_SOUP_REQUEST (object);
-
- if (request->priv->uri)
- soup_uri_free (request->priv->uri);
- if (request->priv->session)
- g_object_unref (request->priv->session);
-
- G_OBJECT_CLASS (webkit_soup_request_parent_class)->finalize (object);
-}
-
-static void
-webkit_soup_request_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- WebKitSoupRequest *request = WEBKIT_SOUP_REQUEST (object);
-
- switch (prop_id) {
- case PROP_URI:
- if (request->priv->uri)
- soup_uri_free (request->priv->uri);
- request->priv->uri = g_value_dup_boxed (value);
- break;
- case PROP_SESSION:
- if (request->priv->session)
- g_object_unref (request->priv->session);
- request->priv->session = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-webkit_soup_request_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- WebKitSoupRequest *request = WEBKIT_SOUP_REQUEST (object);
-
- switch (prop_id) {
- case PROP_URI:
- g_value_set_boxed (value, request->priv->uri);
- break;
- case PROP_SESSION:
- g_value_set_object (value, request->priv->session);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-webkit_soup_request_initable_init (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- WebKitSoupRequest *request = WEBKIT_SOUP_REQUEST (initable);
- gboolean ok;
-
- if (!request->priv->uri) {
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_BAD_URI,
- _ ("No URI provided"));
- return FALSE;
- }
-
- ok = WEBKIT_SOUP_REQUEST_GET_CLASS (initable)->
- check_uri (request, request->priv->uri, error);
-
- if (!ok && error) {
- char *uri_string = soup_uri_to_string (request->priv->uri, FALSE);
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_BAD_URI,
- _ ("Invalid '%s' URI: %s"),
- request->priv->uri->scheme,
- uri_string);
- g_free (uri_string);
- }
-
- return ok;
-}
-
-static gboolean
-webkit_soup_request_default_check_uri (WebKitSoupRequest *request,
- SoupURI *uri,
- GError **error)
-{
- return TRUE;
-}
-
-/* Default implementation: assume the sync implementation doesn't block */
-static void
-webkit_soup_request_default_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (request),
- callback, user_data,
- webkit_soup_request_default_send_async);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
-}
-
-static GInputStream *
-webkit_soup_request_default_send_finish (WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (request), webkit_soup_request_default_send_async), NULL);
-
- return webkit_soup_request_send (request, NULL, error);
-}
-
-GInputStream *
-webkit_soup_request_send (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error)
-{
- return WEBKIT_SOUP_REQUEST_GET_CLASS (request)->
- send (request, cancellable, error);
-}
-
-void
-webkit_soup_request_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- WEBKIT_SOUP_REQUEST_GET_CLASS (request)->
- send_async (request, cancellable, callback, user_data);
-}
-
-GInputStream *
-webkit_soup_request_send_finish (WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error)
-{
- return WEBKIT_SOUP_REQUEST_GET_CLASS (request)->
- send_finish (request, result, error);
-}
-
-static void
-webkit_soup_request_class_init (WebKitSoupRequestClass *request_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (request_class);
-
- g_type_class_add_private (request_class, sizeof (WebKitSoupRequestPrivate));
-
- request_class->check_uri = webkit_soup_request_default_check_uri;
- request_class->send_async = webkit_soup_request_default_send_async;
- request_class->send_finish = webkit_soup_request_default_send_finish;
-
- object_class->finalize = webkit_soup_request_finalize;
- object_class->set_property = webkit_soup_request_set_property;
- object_class->get_property = webkit_soup_request_get_property;
-
- g_object_class_install_property (
- object_class, PROP_URI,
- g_param_spec_boxed (WEBKIT_SOUP_REQUEST_URI,
- "URI",
- "The request URI",
- SOUP_TYPE_URI,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (
- object_class, PROP_SESSION,
- g_param_spec_object (WEBKIT_SOUP_REQUEST_SESSION,
- "Session",
- "The request's session",
- SOUP_TYPE_SESSION,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-}
-
-static void
-webkit_soup_request_initable_interface_init (GInitableIface *initable_interface)
-{
- initable_interface->init = webkit_soup_request_initable_init;
-}
-
-SoupURI *
-webkit_soup_request_get_uri (WebKitSoupRequest *request)
-{
- return request->priv->uri;
-}
-
-SoupSession *
-webkit_soup_request_get_session (WebKitSoupRequest *request)
-{
- return request->priv->session;
-}
-
-goffset
-webkit_soup_request_get_content_length (WebKitSoupRequest *request)
-{
- return WEBKIT_SOUP_REQUEST_GET_CLASS (request)->get_content_length (request);
-}
-
-const char *
-webkit_soup_request_get_content_type (WebKitSoupRequest *request)
-{
- return WEBKIT_SOUP_REQUEST_GET_CLASS (request)->get_content_type (request);
-}
-
-#define XDIGIT(c) ((c) <= '9' ? (c) - '0' : ((c) & 0x4F) - 'A' + 10)
-#define HEXCHAR(s) ((XDIGIT (s[1]) << 4) + XDIGIT (s[2]))
-
-/* Copy&pasted from libsoup's soup-uri.c after applying the patch in
- * https://bugzilla.gnome.org/show_bug.cgi?id=630540. We need this
- * instead of soup_uri_decode() as it incorrectly returns NULL for
- * incorrectly encoded URLs. TODO: remove this when required libsoup
- * version is bumped out to 2.32.1
- */
-gchar *
-webkit_soup_request_uri_decoded_copy (const char *part, int length)
-{
- unsigned char *s, *d;
- char *decoded = g_strndup (part, length);
-
- s = d = (unsigned char *)decoded;
- do {
- if (*s == '%') {
- if (!g_ascii_isxdigit (s[1]) ||
- !g_ascii_isxdigit (s[2])) {
- *d++ = *s;
- continue;
- }
- *d++ = HEXCHAR (s);
- s += 2;
- } else
- *d++ = *s;
- } while (*s++);
-
- return decoded;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-request.h b/Source/WebCore/platform/network/soup/cache/soup-request.h
deleted file mode 100644
index 837d8f4..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-request.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 Red Hat, Inc.
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_REQUEST_H
-#define WEBKIT_SOUP_REQUEST_H 1
-
-#include <libsoup/soup.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_REQUEST (webkit_soup_request_get_type ())
-#define WEBKIT_SOUP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_SOUP_REQUEST, WebKitSoupRequest))
-#define WEBKIT_SOUP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_REQUEST, WebKitSoupRequestClass))
-#define WEBKIT_IS_SOUP_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_SOUP_REQUEST))
-#define WEBKIT_IS_SOUP_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_SOUP_REQUEST))
-#define WEBKIT_SOUP_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_REQUEST, WebKitSoupRequestClass))
-
-typedef struct _WebKitSoupRequest WebKitSoupRequest;
-typedef struct _WebKitSoupRequestPrivate WebKitSoupRequestPrivate;
-typedef struct _WebKitSoupRequestClass WebKitSoupRequestClass;
-
-struct _WebKitSoupRequest {
- GObject parent;
-
- WebKitSoupRequestPrivate *priv;
-};
-
-struct _WebKitSoupRequestClass {
- GObjectClass parent;
-
- gboolean (*check_uri)(WebKitSoupRequest *req_base,
- SoupURI *uri,
- GError **error);
-
- GInputStream * (*send)(WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error);
- void (*send_async)(WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
- GInputStream * (*send_finish)(WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error);
-
- goffset (*get_content_length)(WebKitSoupRequest *request);
- const char * (*get_content_type)(WebKitSoupRequest *request);
-};
-
-GType webkit_soup_request_get_type (void);
-
-#define WEBKIT_SOUP_REQUEST_URI "uri"
-#define WEBKIT_SOUP_REQUEST_SESSION "session"
-
-GInputStream *webkit_soup_request_send (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GError **error);
-void webkit_soup_request_send_async (WebKitSoupRequest *request,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-GInputStream *webkit_soup_request_send_finish (WebKitSoupRequest *request,
- GAsyncResult *result,
- GError **error);
-
-SoupURI *webkit_soup_request_get_uri (WebKitSoupRequest *request);
-SoupSession *webkit_soup_request_get_session (WebKitSoupRequest *request);
-
-goffset webkit_soup_request_get_content_length (WebKitSoupRequest *request);
-const char *webkit_soup_request_get_content_type (WebKitSoupRequest *request);
-
-/* Used by WebKitSoupRequestFile and WebKitSoupRequestData. Ideally
- * should be located in some util file but I'll place it here as it
- * will be removed with libsoup 2.32.1 that will ship fixed versions
- * of soup_uri_decode/normalize
- */
-gchar *webkit_soup_request_uri_decoded_copy (const char *part, int length);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_REQUEST_H */
diff --git a/Source/WebCore/platform/network/soup/cache/soup-requester.c b/Source/WebCore/platform/network/soup/cache/soup-requester.c
deleted file mode 100644
index 4d8a860..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-requester.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-requester.c:
- *
- * Copyright (C) 2010, Igalia S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "soup-requester.h"
-
-#include "soup-request-data.h"
-#include "soup-request-file.h"
-#include "soup-request-http.h"
-#include <glib/gi18n.h>
-#include <libsoup/soup.h>
-
-struct _WebKitSoupRequesterPrivate {
- GHashTable *request_types;
-};
-
-#define WEBKIT_SOUP_REQUESTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), WEBKIT_TYPE_SOUP_REQUESTER, WebKitSoupRequesterPrivate))
-
-G_DEFINE_TYPE (WebKitSoupRequester, webkit_soup_requester, G_TYPE_OBJECT)
-
-static void webkit_soup_requester_init (WebKitSoupRequester *requester)
-{
- requester->priv = WEBKIT_SOUP_REQUESTER_GET_PRIVATE (requester);
-
- requester->priv->request_types = 0;
-}
-
-static void finalize (GObject *object)
-{
- WebKitSoupRequester *requester = WEBKIT_SOUP_REQUESTER (object);
-
- if (requester->priv->request_types)
- g_hash_table_destroy (requester->priv->request_types);
-
- G_OBJECT_CLASS (webkit_soup_requester_parent_class)->finalize (object);
-}
-
-static void webkit_soup_requester_class_init (WebKitSoupRequesterClass *requester_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (requester_class);
-
- g_type_class_add_private (requester_class, sizeof (WebKitSoupRequesterPrivate));
-
- /* virtual method override */
- object_class->finalize = finalize;
-}
-
-static void init_request_types (WebKitSoupRequesterPrivate *priv)
-{
- if (priv->request_types)
- return;
-
- priv->request_types = g_hash_table_new_full (soup_str_case_hash,
- soup_str_case_equal,
- g_free, 0);
- g_hash_table_insert (priv->request_types, g_strdup ("file"),
- GSIZE_TO_POINTER (WEBKIT_TYPE_SOUP_REQUEST_FILE));
- g_hash_table_insert (priv->request_types, g_strdup ("data"),
- GSIZE_TO_POINTER (WEBKIT_TYPE_SOUP_REQUEST_DATA));
- g_hash_table_insert (priv->request_types, g_strdup ("http"),
- GSIZE_TO_POINTER (WEBKIT_TYPE_SOUP_REQUEST_HTTP));
- g_hash_table_insert (priv->request_types, g_strdup ("https"),
- GSIZE_TO_POINTER (WEBKIT_TYPE_SOUP_REQUEST_HTTP));
- g_hash_table_insert (priv->request_types, g_strdup ("ftp"),
- GSIZE_TO_POINTER (WEBKIT_TYPE_SOUP_REQUEST_FILE));
-}
-
-WebKitSoupRequester *webkit_soup_requester_new (void)
-{
- return (WebKitSoupRequester *)g_object_new (WEBKIT_TYPE_SOUP_REQUESTER, NULL);
-}
-
-WebKitSoupRequest *webkit_soup_requester_request (WebKitSoupRequester *requester, const char *uriString, SoupSession *session, GError **error)
-{
- SoupURI *uri = NULL;
- WebKitSoupRequest *req;
-
- uri = soup_uri_new (uriString);
- if (!uri) {
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_BAD_URI,
- _ ("Could not parse URI '%s'"), uriString);
- return 0;
- }
-
- req = webkit_soup_requester_request_uri (requester, uri, session, error);
- soup_uri_free (uri);
- return req;
-}
-
-WebKitSoupRequest *webkit_soup_requester_request_uri (WebKitSoupRequester *requester, SoupURI *uri, SoupSession *session, GError **error)
-{
- GType requestType;
-
- g_return_val_if_fail (WEBKIT_IS_SOUP_REQUESTER (requester), 0);
-
- init_request_types (requester->priv);
- requestType = (GType)GPOINTER_TO_SIZE (g_hash_table_lookup (requester->priv->request_types, uri->scheme));
- if (!requestType) {
- g_set_error (error, WEBKIT_SOUP_ERROR, WEBKIT_SOUP_ERROR_UNSUPPORTED_URI_SCHEME,
- _ ("Unsupported URI scheme '%s'"), uri->scheme);
- return 0;
- }
-
- if (g_type_is_a (requestType, G_TYPE_INITABLE)) {
- return (WebKitSoupRequest *)g_initable_new (requestType, 0, error,
- "uri", uri,
- "session", session,
- NULL);
- } else {
- return (WebKitSoupRequest *)g_object_new (requestType,
- "uri", uri,
- "session", session,
- NULL);
- }
-}
-
-/* RFC 2396, 3.1 */
-static gboolean
-soup_scheme_is_valid (const char *scheme)
-{
- if (scheme == NULL ||
- !g_ascii_isalpha (*scheme))
- return FALSE;
-
- scheme++;
- while (*scheme) {
- if (!g_ascii_isalpha (*scheme) &&
- !g_ascii_isdigit (*scheme) &&
- *scheme != '+' &&
- *scheme != '-' &&
- *scheme != '.')
- return FALSE;
- scheme++;
- }
- return TRUE;
-}
-
-void
-webkit_soup_requester_add_protocol (WebKitSoupRequester *requester,
- const char *scheme,
- GType request_type)
-{
- g_return_if_fail (WEBKIT_IS_SOUP_REQUESTER (requester));
- g_return_if_fail (soup_scheme_is_valid (scheme));
-
- init_request_types (requester->priv);
- g_hash_table_insert (requester->priv->request_types, g_strdup (scheme),
- GSIZE_TO_POINTER (request_type));
-}
-
-void
-webkit_soup_requester_remove_protocol (WebKitSoupRequester *requester,
- const char *scheme)
-{
- g_return_if_fail (WEBKIT_IS_SOUP_REQUESTER (requester));
- g_return_if_fail (soup_scheme_is_valid (scheme));
-
- init_request_types (requester->priv);
- g_hash_table_remove (requester->priv->request_types, scheme);
-}
-
-GQuark
-webkit_soup_error_quark (void)
-{
- static GQuark error;
- if (!error)
- error = g_quark_from_static_string ("webkit_soup_error_quark");
- return error;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/soup-requester.h b/Source/WebCore/platform/network/soup/cache/soup-requester.h
deleted file mode 100644
index 71ff103..0000000
--- a/Source/WebCore/platform/network/soup/cache/soup-requester.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2010 Igalia S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_REQUESTER_H
-#define WEBKIT_SOUP_REQUESTER_H 1
-
-#include "soup-request.h"
-#include <libsoup/soup.h>
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_REQUESTER (webkit_soup_requester_get_type ())
-#define WEBKIT_SOUP_REQUESTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_SOUP_REQUESTER, WebKitSoupRequester))
-#define WEBKIT_SOUP_REQUESTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_REQUESTER, WebKitSoupRequesterClass))
-#define WEBKIT_IS_SOUP_REQUESTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_SOUP_REQUESTER))
-#define WEBKIT_IS_SOUP_REQUESTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), WEBKIT_TYPE_SOUP_REQUESTER))
-#define WEBKIT_SOUP_REQUESTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_REQUESTER, WebKitSoupRequesterClass))
-
-#define WEBKIT_SOUP_ERROR webkit_soup_error_quark ()
-
-typedef enum {
- WEBKIT_SOUP_ERROR_BAD_URI,
- WEBKIT_SOUP_ERROR_UNSUPPORTED_URI_SCHEME
-} WebKitSoupError;
-
-typedef struct _WebKitSoupRequester WebKitSoupRequester;
-typedef struct _WebKitSoupRequesterPrivate WebKitSoupRequesterPrivate;
-
-struct _WebKitSoupRequester {
- GObject parent;
-
- WebKitSoupRequesterPrivate *priv;
-};
-
-typedef struct {
- GObjectClass parent_class;
-} WebKitSoupRequesterClass;
-
-GType webkit_soup_requester_get_type (void);
-
-WebKitSoupRequester *webkit_soup_requester_new (void);
-
-GQuark webkit_soup_error_quark (void);
-
-WebKitSoupRequest *webkit_soup_requester_request (WebKitSoupRequester *requester,
- const char *uriString,
- SoupSession *session,
- GError **error);
-
-WebKitSoupRequest *webkit_soup_requester_request_uri (WebKitSoupRequester *requester,
- SoupURI *uri,
- SoupSession *session,
- GError **error);
-
-void webkit_soup_requester_add_protocol (WebKitSoupRequester *requester,
- const char *scheme,
- GType request_type);
-
-void webkit_soup_requester_remove_protocol (WebKitSoupRequester *requester,
- const char *scheme);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_REQUESTER_H */
diff --git a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache-private.h b/Source/WebCore/platform/network/soup/cache/webkit/soup-cache-private.h
deleted file mode 100644
index 8af8de2..0000000
--- a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache-private.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-cache-private.h:
- *
- * Copyright (C) 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_CACHE_PRIVATE_H
-#define WEBKIT_SOUP_CACHE_PRIVATE_H 1
-
-#include "soup-cache.h"
-#include <libsoup/soup-message.h>
-
-G_BEGIN_DECLS
-
-WebKitSoupCacheResponse webkit_soup_cache_has_response (WebKitSoupCache *cache,
- SoupMessage *msg);
-GInputStream *webkit_soup_cache_send_response (WebKitSoupCache *cache,
- SoupMessage *msg);
-WebKitSoupCacheability webkit_soup_cache_get_cacheability (WebKitSoupCache *cache,
- SoupMessage *msg);
-SoupMessage *webkit_soup_cache_generate_conditional_request (WebKitSoupCache *cache,
- SoupMessage *original);
-
-G_END_DECLS
-
-#endif /* WEBKIT_SOUP_CACHE_PRIVATE_H */
diff --git a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.c b/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.c
deleted file mode 100644
index b96428d..0000000
--- a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.c
+++ /dev/null
@@ -1,1677 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-cache.c
- *
- * Copyright (C) 2009, 2010 Igalia S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* TODO:
- * - Need to hook the feature in the sync SoupSession.
- * - Need more tests.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "soup-cache.h"
-#include "soup-cache-private.h"
-#include <libsoup/soup.h>
-#include <gio/gio.h>
-#include <stdlib.h>
-
-static SoupSessionFeatureInterface *webkit_soup_cache_default_feature_interface;
-static void webkit_soup_cache_session_feature_init (SoupSessionFeatureInterface *feature_interface, gpointer interface_data);
-
-#define DEFAULT_MAX_SIZE 50 * 1024 * 1024
-#define MAX_ENTRY_DATA_PERCENTAGE 10 /* Percentage of the total size
- of the cache that can be
- filled by a single entry */
-
-typedef struct _WebKitSoupCacheEntry {
- char *key;
- char *filename;
- guint freshness_lifetime;
- gboolean must_revalidate;
- GString *data;
- gsize pos;
- gsize length;
- time_t corrected_initial_age;
- time_t response_time;
- gboolean writing;
- gboolean dirty;
- gboolean got_body;
- gboolean being_validated;
- SoupMessageHeaders *headers;
- GOutputStream *stream;
- GError *error;
- guint hits;
- GCancellable *cancellable;
-} WebKitSoupCacheEntry;
-
-struct _WebKitSoupCachePrivate {
- char *cache_dir;
- GHashTable *cache;
- guint n_pending;
- SoupSession *session;
- WebKitSoupCacheType cache_type;
- guint size;
- guint max_size;
- guint max_entry_data_size; /* Computed value. Here for performance reasons */
- GList *lru_start;
-};
-
-typedef struct {
- WebKitSoupCache *cache;
- WebKitSoupCacheEntry *entry;
- SoupMessage *msg;
- gulong got_chunk_handler;
- gulong got_body_handler;
- gulong restarted_handler;
-} WebKitSoupCacheWritingFixture;
-
-enum {
- PROP_0,
- PROP_CACHE_DIR,
- PROP_CACHE_TYPE
-};
-
-#define WEBKIT_SOUP_CACHE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), WEBKIT_TYPE_SOUP_CACHE, WebKitSoupCachePrivate))
-
-G_DEFINE_TYPE_WITH_CODE (WebKitSoupCache, webkit_soup_cache, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (SOUP_TYPE_SESSION_FEATURE,
- webkit_soup_cache_session_feature_init))
-
-static gboolean webkit_soup_cache_entry_remove (WebKitSoupCache *cache, WebKitSoupCacheEntry *entry);
-static void make_room_for_new_entry (WebKitSoupCache *cache, guint length_to_add);
-static gboolean cache_accepts_entries_of_size (WebKitSoupCache *cache, guint length_to_add);
-
-static WebKitSoupCacheability
-get_cacheability (WebKitSoupCache *cache, SoupMessage *msg)
-{
- WebKitSoupCacheability cacheability;
- const char *cache_control;
-
- /* 1. The request method must be cacheable */
- if (msg->method == SOUP_METHOD_GET)
- cacheability = WEBKIT_SOUP_CACHE_CACHEABLE;
- else if (msg->method == SOUP_METHOD_HEAD ||
- msg->method == SOUP_METHOD_TRACE ||
- msg->method == SOUP_METHOD_CONNECT)
- return WEBKIT_SOUP_CACHE_UNCACHEABLE;
- else
- return (WEBKIT_SOUP_CACHE_UNCACHEABLE | WEBKIT_SOUP_CACHE_INVALIDATES);
-
- cache_control = soup_message_headers_get (msg->response_headers, "Cache-Control");
- if (cache_control) {
- GHashTable *hash;
- WebKitSoupCachePrivate *priv = WEBKIT_SOUP_CACHE_GET_PRIVATE (cache);
-
- hash = soup_header_parse_param_list (cache_control);
-
- /* Shared caches MUST NOT store private resources */
- if (priv->cache_type == WEBKIT_SOUP_CACHE_SHARED) {
- if (g_hash_table_lookup_extended (hash, "private", NULL, NULL)) {
- soup_header_free_param_list (hash);
- return WEBKIT_SOUP_CACHE_UNCACHEABLE;
- }
- }
-
- /* 2. The 'no-store' cache directive does not appear in the
- * headers
- */
- if (g_hash_table_lookup_extended (hash, "no-store", NULL, NULL)) {
- soup_header_free_param_list (hash);
- return WEBKIT_SOUP_CACHE_UNCACHEABLE;
- }
-
- /* This does not appear in section 2.1, but I think it makes
- * sense to check it too?
- */
- if (g_hash_table_lookup_extended (hash, "no-cache", NULL, NULL)) {
- soup_header_free_param_list (hash);
- return WEBKIT_SOUP_CACHE_UNCACHEABLE;
- }
-
- soup_header_free_param_list (hash);
- }
-
- switch (msg->status_code) {
- case SOUP_STATUS_PARTIAL_CONTENT:
- /* We don't cache partial responses, but they only
- * invalidate cached full responses if the headers
- * don't match.
- */
- cacheability = WEBKIT_SOUP_CACHE_UNCACHEABLE;
- break;
-
- case SOUP_STATUS_NOT_MODIFIED:
- /* A 304 response validates an existing cache entry */
- cacheability = WEBKIT_SOUP_CACHE_VALIDATES;
- break;
-
- case SOUP_STATUS_MULTIPLE_CHOICES:
- case SOUP_STATUS_MOVED_PERMANENTLY:
- case SOUP_STATUS_GONE:
- /* FIXME: cacheable unless indicated otherwise */
- cacheability = WEBKIT_SOUP_CACHE_UNCACHEABLE;
- break;
-
- case SOUP_STATUS_FOUND:
- case SOUP_STATUS_TEMPORARY_REDIRECT:
- /* FIXME: cacheable if explicitly indicated */
- cacheability = WEBKIT_SOUP_CACHE_UNCACHEABLE;
- break;
-
- case SOUP_STATUS_SEE_OTHER:
- case SOUP_STATUS_FORBIDDEN:
- case SOUP_STATUS_NOT_FOUND:
- case SOUP_STATUS_METHOD_NOT_ALLOWED:
- return (WEBKIT_SOUP_CACHE_UNCACHEABLE | WEBKIT_SOUP_CACHE_INVALIDATES);
-
- default:
- /* Any 5xx status or any 4xx status not handled above
- * is uncacheable but doesn't break the cache.
- */
- if ((msg->status_code >= SOUP_STATUS_BAD_REQUEST &&
- msg->status_code <= SOUP_STATUS_FAILED_DEPENDENCY) ||
- msg->status_code >= SOUP_STATUS_INTERNAL_SERVER_ERROR)
- return WEBKIT_SOUP_CACHE_UNCACHEABLE;
-
- /* An unrecognized 2xx, 3xx, or 4xx response breaks
- * the cache.
- */
- if ((msg->status_code > SOUP_STATUS_PARTIAL_CONTENT &&
- msg->status_code < SOUP_STATUS_MULTIPLE_CHOICES) ||
- (msg->status_code > SOUP_STATUS_TEMPORARY_REDIRECT &&
- msg->status_code < SOUP_STATUS_INTERNAL_SERVER_ERROR))
- return (WEBKIT_SOUP_CACHE_UNCACHEABLE | WEBKIT_SOUP_CACHE_INVALIDATES);
- break;
- }
-
- return cacheability;
-}
-
-static void
-webkit_soup_cache_entry_free (WebKitSoupCacheEntry *entry, gboolean purge)
-{
- if (purge) {
- GFile *file = g_file_new_for_path (entry->filename);
- g_file_delete (file, NULL, NULL);
- g_object_unref (file);
- }
-
- g_free (entry->filename);
- entry->filename = NULL;
- g_free (entry->key);
- entry->key = NULL;
-
- if (entry->headers) {
- soup_message_headers_free (entry->headers);
- entry->headers = NULL;
- }
-
- if (entry->data) {
- g_string_free (entry->data, TRUE);
- entry->data = NULL;
- }
- if (entry->error) {
- g_error_free (entry->error);
- entry->error = NULL;
- }
- if (entry->cancellable) {
- g_object_unref (entry->cancellable);
- entry->cancellable = NULL;
- }
-
- g_slice_free (WebKitSoupCacheEntry, entry);
-}
-
-static void
-copy_headers (const char *name, const char *value, SoupMessageHeaders *headers)
-{
- soup_message_headers_append (headers, name, value);
-}
-
-static void
-update_headers (const char *name, const char *value, SoupMessageHeaders *headers)
-{
- if (soup_message_headers_get (headers, name))
- soup_message_headers_replace (headers, name, value);
- else
- soup_message_headers_append (headers, name, value);
-}
-
-static guint
-webkit_soup_cache_entry_get_current_age (WebKitSoupCacheEntry *entry)
-{
- time_t now = time (NULL);
- time_t resident_time;
-
- resident_time = now - entry->response_time;
- return entry->corrected_initial_age + resident_time;
-}
-
-static gboolean
-webkit_soup_cache_entry_is_fresh_enough (WebKitSoupCacheEntry *entry, gint min_fresh)
-{
- guint limit = (min_fresh == -1) ? webkit_soup_cache_entry_get_current_age (entry) : (guint) min_fresh;
- return entry->freshness_lifetime > limit;
-}
-
-static char *
-soup_message_get_cache_key (SoupMessage *msg)
-{
- SoupURI *uri = soup_message_get_uri (msg);
- return soup_uri_to_string (uri, FALSE);
-}
-
-static void
-webkit_soup_cache_entry_set_freshness (WebKitSoupCacheEntry *entry, SoupMessage *msg, WebKitSoupCache *cache)
-{
- const char *cache_control;
- const char *expires, *date, *last_modified;
-
- cache_control = soup_message_headers_get (entry->headers, "Cache-Control");
- if (cache_control) {
- const char *max_age, *s_maxage;
- gint64 freshness_lifetime = 0;
- GHashTable *hash;
- WebKitSoupCachePrivate *priv = WEBKIT_SOUP_CACHE_GET_PRIVATE (cache);
-
- hash = soup_header_parse_param_list (cache_control);
-
- /* Should we re-validate the entry when it goes stale */
- entry->must_revalidate = g_hash_table_lookup_extended (hash, "must-revalidate", NULL, NULL);
-
- /* Section 2.3.1 */
- if (priv->cache_type == WEBKIT_SOUP_CACHE_SHARED) {
- s_maxage = g_hash_table_lookup (hash, "s-maxage");
- if (s_maxage) {
- freshness_lifetime = g_ascii_strtoll (s_maxage, NULL, 10);
- if (freshness_lifetime) {
- /* Implies proxy-revalidate. TODO: is it true? */
- entry->must_revalidate = TRUE;
- soup_header_free_param_list (hash);
- return;
- }
- }
- }
-
- /* If 'max-age' cache directive is present, use that */
- max_age = g_hash_table_lookup (hash, "max-age");
- if (max_age)
- freshness_lifetime = g_ascii_strtoll (max_age, NULL, 10);
-
- if (freshness_lifetime) {
- entry->freshness_lifetime = (guint)MIN (freshness_lifetime, G_MAXUINT32);
- soup_header_free_param_list (hash);
- return;
- }
-
- soup_header_free_param_list (hash);
- }
-
- /* If the 'Expires' response header is present, use its value
- * minus the value of the 'Date' response header
- */
- expires = soup_message_headers_get (entry->headers, "Expires");
- date = soup_message_headers_get (entry->headers, "Date");
- if (expires && date) {
- SoupDate *expires_d, *date_d;
- time_t expires_t, date_t;
-
- expires_d = soup_date_new_from_string (expires);
- if (expires_d) {
- date_d = soup_date_new_from_string (date);
-
- expires_t = soup_date_to_time_t (expires_d);
- date_t = soup_date_to_time_t (date_d);
-
- soup_date_free (expires_d);
- soup_date_free (date_d);
-
- if (expires_t && date_t) {
- entry->freshness_lifetime = (guint)MAX (expires_t - date_t, 0);
- return;
- }
- } else {
- /* If Expires is not a valid date we should
- treat it as already expired, see section
- 3.3 */
- entry->freshness_lifetime = 0;
- return;
- }
- }
-
- /* Otherwise an heuristic may be used */
-
- /* Heuristics MUST NOT be used with these status codes
- (section 2.3.1.1) */
- if (msg->status_code != SOUP_STATUS_OK &&
- msg->status_code != SOUP_STATUS_NON_AUTHORITATIVE &&
- msg->status_code != SOUP_STATUS_PARTIAL_CONTENT &&
- msg->status_code != SOUP_STATUS_MULTIPLE_CHOICES &&
- msg->status_code != SOUP_STATUS_MOVED_PERMANENTLY &&
- msg->status_code != SOUP_STATUS_GONE)
- goto expire;
-
- /* TODO: attach warning 113 if response's current_age is more
- than 24h (section 2.3.1.1) when using heuristics */
-
- /* Last-Modified based heuristic */
- last_modified = soup_message_headers_get (entry->headers, "Last-Modified");
- if (last_modified) {
- SoupDate *soup_date;
- time_t now, last_modified_t;
-
- soup_date = soup_date_new_from_string (last_modified);
- last_modified_t = soup_date_to_time_t (soup_date);
- now = time (NULL);
-
-#define HEURISTIC_FACTOR 0.1 /* From Section 2.3.1.1 */
-
- entry->freshness_lifetime = MAX (0, (now - last_modified_t) * HEURISTIC_FACTOR);
- soup_date_free (soup_date);
- }
-
- return;
-
- expire:
- /* If all else fails, make the entry expire immediately */
- entry->freshness_lifetime = 0;
-}
-
-static WebKitSoupCacheEntry *
-webkit_soup_cache_entry_new (WebKitSoupCache *cache, SoupMessage *msg, time_t request_time, time_t response_time)
-{
- WebKitSoupCacheEntry *entry;
- SoupMessageHeaders *headers;
- const char *date;
- char *md5;
-
- entry = g_slice_new0 (WebKitSoupCacheEntry);
- entry->dirty = FALSE;
- entry->writing = FALSE;
- entry->got_body = FALSE;
- entry->being_validated = FALSE;
- entry->data = g_string_new (NULL);
- entry->pos = 0;
- entry->error = NULL;
-
- /* key & filename */
- entry->key = soup_message_get_cache_key (msg);
- md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5, entry->key, -1);
- entry->filename = g_build_filename (cache->priv->cache_dir, md5, NULL);
- g_free (md5);
-
- /* Headers */
- headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_RESPONSE);
- soup_message_headers_foreach (msg->response_headers,
- (SoupMessageHeadersForeachFunc)copy_headers,
- headers);
- entry->headers = headers;
-
- /* LRU list */
- entry->hits = 0;
-
- /* Section 2.3.1, Freshness Lifetime */
- webkit_soup_cache_entry_set_freshness (entry, msg, cache);
-
- /* Section 2.3.2, Calculating Age */
- date = soup_message_headers_get (entry->headers, "Date");
-
- if (date) {
- SoupDate *soup_date;
- const char *age;
- time_t date_value, apparent_age, corrected_received_age, response_delay, age_value = 0;
-
- soup_date = soup_date_new_from_string (date);
- date_value = soup_date_to_time_t (soup_date);
- soup_date_free (soup_date);
-
- age = soup_message_headers_get (entry->headers, "Age");
- if (age)
- age_value = g_ascii_strtoll (age, NULL, 10);
-
- entry->response_time = response_time;
- apparent_age = MAX (0, entry->response_time - date_value);
- corrected_received_age = MAX (apparent_age, age_value);
- response_delay = entry->response_time - request_time;
- entry->corrected_initial_age = corrected_received_age + response_delay;
- } else {
- /* Is this correct ? */
- entry->corrected_initial_age = time (NULL);
- }
-
- return entry;
-}
-
-static void
-webkit_soup_cache_writing_fixture_free (WebKitSoupCacheWritingFixture *fixture)
-{
- /* Free fixture. And disconnect signals, we don't want to
- listen to more SoupMessage events as we're finished with
- this resource */
- if (g_signal_handler_is_connected (fixture->msg, fixture->got_chunk_handler))
- g_signal_handler_disconnect (fixture->msg, fixture->got_chunk_handler);
- if (g_signal_handler_is_connected (fixture->msg, fixture->got_body_handler))
- g_signal_handler_disconnect (fixture->msg, fixture->got_body_handler);
- if (g_signal_handler_is_connected (fixture->msg, fixture->restarted_handler))
- g_signal_handler_disconnect (fixture->msg, fixture->restarted_handler);
- g_object_unref (fixture->msg);
- g_object_unref (fixture->cache);
- g_slice_free (WebKitSoupCacheWritingFixture, fixture);
-}
-
-static void
-close_ready_cb (GObject *source, GAsyncResult *result, WebKitSoupCacheWritingFixture *fixture)
-{
- WebKitSoupCacheEntry *entry = fixture->entry;
- WebKitSoupCache *cache = fixture->cache;
- GOutputStream *stream = G_OUTPUT_STREAM (source);
- goffset content_length;
-
- g_warn_if_fail (entry->error == NULL);
-
- /* FIXME: what do we do on error ? */
-
- if (stream) {
- g_output_stream_close_finish (stream, result, NULL);
- g_object_unref (stream);
- }
- entry->stream = NULL;
-
- content_length = soup_message_headers_get_content_length (entry->headers);
-
- /* If the process was cancelled, then delete the entry from
- the cache. Do it also if the size of a chunked resource is
- too much for the cache */
- if (g_cancellable_is_cancelled (entry->cancellable)) {
- entry->dirty = FALSE;
- webkit_soup_cache_entry_remove (cache, entry);
- webkit_soup_cache_entry_free (entry, TRUE);
- entry = NULL;
- } else if ((soup_message_headers_get_encoding (entry->headers) == SOUP_ENCODING_CHUNKED) ||
- entry->length != (gsize) content_length) {
- /** Two options here:
- *
- * 1. "chunked" data, entry was temporarily added to
- * cache (as content-length is 0) and now that we have
- * the actual size we have to evaluate if we want it
- * in the cache or not
- *
- * 2. Content-Length has a different value than actual
- * length, means that the content was encoded for
- * transmission (typically compressed) and thus we
- * have to substract the content-length value that was
- * added to the cache and add the unencoded length
- **/
- gint length_to_add = entry->length - content_length;
-
- /* Make room in cache if needed */
- if (cache_accepts_entries_of_size (cache, length_to_add)) {
- make_room_for_new_entry (cache, length_to_add);
-
- cache->priv->size += length_to_add;
- } else {
- entry->dirty = FALSE;
- webkit_soup_cache_entry_remove (cache, entry);
- webkit_soup_cache_entry_free (entry, TRUE);
- entry = NULL;
- }
- }
-
- if (entry) {
- /* Get rid of the GString in memory for the resource now */
- if (entry->data) {
- g_string_free (entry->data, TRUE);
- entry->data = NULL;
- }
-
- entry->dirty = FALSE;
- entry->writing = FALSE;
- entry->got_body = FALSE;
- entry->pos = 0;
-
- g_object_unref (entry->cancellable);
- entry->cancellable = NULL;
- }
-
- cache->priv->n_pending--;
-
- /* Frees */
- webkit_soup_cache_writing_fixture_free (fixture);
-}
-
-static void
-write_ready_cb (GObject *source, GAsyncResult *result, WebKitSoupCacheWritingFixture *fixture)
-{
- GOutputStream *stream = G_OUTPUT_STREAM (source);
- GError *error = NULL;
- gssize write_size;
- WebKitSoupCacheEntry *entry = fixture->entry;
-
- if (g_cancellable_is_cancelled (entry->cancellable)) {
- g_output_stream_close_async (stream,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)close_ready_cb,
- fixture);
- return;
- }
-
- write_size = g_output_stream_write_finish (stream, result, &error);
- if (write_size <= 0 || error) {
- if (error)
- entry->error = error;
- g_output_stream_close_async (stream,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)close_ready_cb,
- fixture);
- /* FIXME: We should completely stop caching the
- resource at this point */
- } else {
- entry->pos += write_size;
-
- /* Are we still writing and is there new data to write
- already ? */
- if (entry->data && entry->pos < entry->data->len) {
- g_output_stream_write_async (entry->stream,
- entry->data->str + entry->pos,
- entry->data->len - entry->pos,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)write_ready_cb,
- fixture);
- } else {
- entry->writing = FALSE;
-
- if (entry->got_body) {
- /* If we already received 'got-body'
- and we have written all the data,
- we can close the stream */
- g_output_stream_close_async (entry->stream,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)close_ready_cb,
- fixture);
- }
- }
- }
-}
-
-static void
-msg_got_chunk_cb (SoupMessage *msg, SoupBuffer *chunk, WebKitSoupCacheWritingFixture *fixture)
-{
- WebKitSoupCacheEntry *entry = fixture->entry;
-
- g_return_if_fail (chunk->data && chunk->length);
- g_return_if_fail (entry);
-
- /* Ignore this if the writing or appending was cancelled */
- if (!g_cancellable_is_cancelled (entry->cancellable)) {
- g_string_append_len (entry->data, chunk->data, chunk->length);
- entry->length = entry->data->len;
-
- if (!cache_accepts_entries_of_size (fixture->cache, entry->length)) {
- /* Quickly cancel the caching of the resource */
- g_cancellable_cancel (entry->cancellable);
- }
- }
-
- /* FIXME: remove the error check when we cancel the caching at
- the first write error */
- /* Only write if the entry stream is ready */
- if (entry->writing == FALSE && entry->error == NULL && entry->stream) {
- GString *data = entry->data;
- entry->writing = TRUE;
- g_output_stream_write_async (entry->stream,
- data->str + entry->pos,
- data->len - entry->pos,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)write_ready_cb,
- fixture);
- }
-}
-
-static void
-msg_got_body_cb (SoupMessage *msg, WebKitSoupCacheWritingFixture *fixture)
-{
- WebKitSoupCacheEntry *entry = fixture->entry;
- g_return_if_fail (entry);
-
- entry->got_body = TRUE;
-
- if (!entry->stream && entry->pos != entry->length)
- /* The stream is not ready to be written but we still
- have data to write, we'll write it when the stream
- is opened for writing */
- return;
-
-
- if (entry->pos != entry->length) {
- /* If we still have data to write, write it,
- write_ready_cb will close the stream */
- if (entry->writing == FALSE && entry->error == NULL && entry->stream) {
- g_output_stream_write_async (entry->stream,
- entry->data->str + entry->pos,
- entry->data->len - entry->pos,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)write_ready_cb,
- fixture);
- }
- return;
- }
-
- if (entry->stream && !entry->writing)
- g_output_stream_close_async (entry->stream,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)close_ready_cb,
- fixture);
-}
-
-static gboolean
-webkit_soup_cache_entry_remove (WebKitSoupCache *cache, WebKitSoupCacheEntry *entry)
-{
- GList *lru_item;
-
- /* if (entry->dirty && !g_cancellable_is_cancelled (entry->cancellable)) { */
- if (entry->dirty) {
- g_cancellable_cancel (entry->cancellable);
- return FALSE;
- }
-
- g_assert (!entry->dirty);
- g_assert (g_list_length (cache->priv->lru_start) == g_hash_table_size (cache->priv->cache));
-
- /* Remove from cache */
- if (!g_hash_table_remove (cache->priv->cache, entry->key))
- return FALSE;
-
- /* Remove from LRU */
- lru_item = g_list_find (cache->priv->lru_start, entry);
- cache->priv->lru_start = g_list_delete_link (cache->priv->lru_start, lru_item);
-
- /* Adjust cache size */
- cache->priv->size -= entry->length;
-
- g_assert (g_list_length (cache->priv->lru_start) == g_hash_table_size (cache->priv->cache));
-
- return TRUE;
-}
-
-static gint
-lru_compare_func (gconstpointer a, gconstpointer b)
-{
- WebKitSoupCacheEntry *entry_a = (WebKitSoupCacheEntry *)a;
- WebKitSoupCacheEntry *entry_b = (WebKitSoupCacheEntry *)b;
-
- /** The rationale of this sorting func is
- *
- * 1. sort by hits -> LRU algorithm, then
- *
- * 2. sort by freshness lifetime, we better discard first
- * entries that are close to expire
- *
- * 3. sort by size, replace first small size resources as they
- * are cheaper to download
- **/
-
- /* Sort by hits */
- if (entry_a->hits != entry_b->hits)
- return entry_a->hits - entry_b->hits;
-
- /* Sort by freshness_lifetime */
- if (entry_a->freshness_lifetime != entry_b->freshness_lifetime)
- return entry_a->freshness_lifetime - entry_b->freshness_lifetime;
-
- /* Sort by size */
- return entry_a->length - entry_b->length;
-}
-
-static gboolean
-cache_accepts_entries_of_size (WebKitSoupCache *cache, guint length_to_add)
-{
- /* We could add here some more heuristics. TODO: review how
- this is done by other HTTP caches */
-
- return length_to_add <= cache->priv->max_entry_data_size;
-}
-
-static void
-make_room_for_new_entry (WebKitSoupCache *cache, guint length_to_add)
-{
- GList *lru_entry = cache->priv->lru_start;
-
- /* Check that there is enough room for the new entry. This is
- an approximation as we're not working out the size of the
- cache file or the size of the headers for performance
- reasons. TODO: check if that would be really that expensive */
-
- while (lru_entry &&
- (length_to_add + cache->priv->size > cache->priv->max_size)) {
- WebKitSoupCacheEntry *old_entry = (WebKitSoupCacheEntry *)lru_entry->data;
-
- /* Discard entries. Once cancelled resources will be
- * freed in close_ready_cb
- */
- if (webkit_soup_cache_entry_remove (cache, old_entry)) {
- webkit_soup_cache_entry_free (old_entry, TRUE);
- lru_entry = cache->priv->lru_start;
- } else
- lru_entry = g_list_next (lru_entry);
- }
-}
-
-static gboolean
-webkit_soup_cache_entry_insert_by_key (WebKitSoupCache *cache,
- const char *key,
- WebKitSoupCacheEntry *entry,
- gboolean sort)
-{
- guint length_to_add = 0;
-
- if (soup_message_headers_get_encoding (entry->headers) != SOUP_ENCODING_CHUNKED)
- length_to_add = soup_message_headers_get_content_length (entry->headers);
-
- /* Check if we are going to store the resource depending on its size */
- if (length_to_add) {
- if (!cache_accepts_entries_of_size (cache, length_to_add))
- return FALSE;
-
- /* Make room for new entry if needed */
- make_room_for_new_entry (cache, length_to_add);
- }
-
- g_hash_table_insert (cache->priv->cache, g_strdup (key), entry);
-
- /* Compute new cache size */
- cache->priv->size += length_to_add;
-
- /* Update LRU */
- if (sort)
- cache->priv->lru_start = g_list_insert_sorted (cache->priv->lru_start, entry, lru_compare_func);
- else
- cache->priv->lru_start = g_list_prepend (cache->priv->lru_start, entry);
-
- g_assert (g_list_length (cache->priv->lru_start) == g_hash_table_size (cache->priv->cache));
-
- return TRUE;
-}
-
-static void
-msg_restarted_cb (SoupMessage *msg, WebKitSoupCacheEntry *entry)
-{
- /* FIXME: What should we do here exactly? */
-}
-
-static void
-append_to_ready_cb (GObject *source, GAsyncResult *result, WebKitSoupCacheWritingFixture *fixture)
-{
- GFile *file = (GFile *)source;
- GOutputStream *stream;
- WebKitSoupCacheEntry *entry = fixture->entry;
-
- stream = (GOutputStream *)g_file_append_to_finish (file, result, &entry->error);
-
- if (g_cancellable_is_cancelled (entry->cancellable) || entry->error) {
- fixture->cache->priv->n_pending--;
- entry->dirty = FALSE;
- webkit_soup_cache_entry_remove (fixture->cache, entry);
- webkit_soup_cache_entry_free (entry, TRUE);
- webkit_soup_cache_writing_fixture_free (fixture);
- return;
- }
-
- entry->stream = g_object_ref (stream);
- g_object_unref (file);
-
- /* If we already got all the data we have to initiate the
- writing here, since we won't get more 'got-chunk'
- signals */
- if (entry->got_body) {
- GString *data = entry->data;
-
- /* It could happen that reading the data from server
- was completed before this happens. In that case
- there is no data */
- if (data) {
- entry->writing = TRUE;
- g_output_stream_write_async (entry->stream,
- data->str + entry->pos,
- data->len - entry->pos,
- G_PRIORITY_LOW,
- entry->cancellable,
- (GAsyncReadyCallback)write_ready_cb,
- fixture);
- }
- }
-}
-
-typedef struct {
- time_t request_time;
- SoupSessionFeature *feature;
- gulong got_headers_handler;
-} RequestHelper;
-
-static void
-msg_got_headers_cb (SoupMessage *msg, gpointer user_data)
-{
- WebKitSoupCache *cache;
- WebKitSoupCacheability cacheable;
- RequestHelper *helper;
- time_t request_time, response_time;
-
- response_time = time (NULL);
-
- helper = (RequestHelper *)user_data;
- cache = WEBKIT_SOUP_CACHE (helper->feature);
- request_time = helper->request_time;
- g_signal_handlers_disconnect_by_func (msg, msg_got_headers_cb, user_data);
- g_slice_free (RequestHelper, helper);
-
- cacheable = webkit_soup_cache_get_cacheability (cache, msg);
-
- if (cacheable & WEBKIT_SOUP_CACHE_CACHEABLE) {
- WebKitSoupCacheEntry *entry;
- char *key;
- GFile *file;
- WebKitSoupCacheWritingFixture *fixture;
-
- /* Check if we are already caching this resource */
- key = soup_message_get_cache_key (msg);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
-
- if (entry && entry->dirty)
- return;
-
- /* Create a new entry, deleting any old one if present */
- if (entry) {
- webkit_soup_cache_entry_remove (cache, entry);
- webkit_soup_cache_entry_free (entry, TRUE);
- }
-
- entry = webkit_soup_cache_entry_new (cache, msg, request_time, response_time);
- entry->hits = 1;
-
- /* Do not continue if it can not be stored */
- if (!webkit_soup_cache_entry_insert_by_key (cache, (const gchar *)entry->key, entry, TRUE)) {
- webkit_soup_cache_entry_free (entry, TRUE);
- return;
- }
-
- fixture = g_slice_new0 (WebKitSoupCacheWritingFixture);
- fixture->cache = g_object_ref (cache);
- fixture->entry = entry;
- fixture->msg = g_object_ref (msg);
-
- /* We connect now to these signals and buffer the data
- if it comes before the file is ready for writing */
- fixture->got_chunk_handler =
- g_signal_connect (msg, "got-chunk", G_CALLBACK (msg_got_chunk_cb), fixture);
- fixture->got_body_handler =
- g_signal_connect (msg, "got-body", G_CALLBACK (msg_got_body_cb), fixture);
- fixture->restarted_handler =
- g_signal_connect (msg, "restarted", G_CALLBACK (msg_restarted_cb), entry);
-
- /* Prepare entry */
- file = g_file_new_for_path (entry->filename);
- cache->priv->n_pending++;
-
- entry->dirty = TRUE;
- entry->cancellable = g_cancellable_new ();
- g_file_append_to_async (file, 0,
- G_PRIORITY_LOW, entry->cancellable,
- (GAsyncReadyCallback)append_to_ready_cb,
- fixture);
- } else if (cacheable & WEBKIT_SOUP_CACHE_INVALIDATES) {
- char *key;
- WebKitSoupCacheEntry *entry;
-
- key = soup_message_get_cache_key (msg);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
-
- if (entry) {
- if (webkit_soup_cache_entry_remove (cache, entry))
- webkit_soup_cache_entry_free (entry, TRUE);
- }
- } else if (cacheable & WEBKIT_SOUP_CACHE_VALIDATES) {
- char *key;
- WebKitSoupCacheEntry *entry;
-
- key = soup_message_get_cache_key (msg);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
-
- /* It's possible to get a CACHE_VALIDATES with no
- * entry in the hash table. This could happen if for
- * example the soup client is the one creating the
- * conditional request.
- */
- if (entry) {
- entry->being_validated = FALSE;
-
- /* We update the headers of the existing cache item,
- plus its age */
- soup_message_headers_foreach (msg->response_headers,
- (SoupMessageHeadersForeachFunc)update_headers,
- entry->headers);
- webkit_soup_cache_entry_set_freshness (entry, msg, cache);
- }
- }
-}
-
-GInputStream *
-webkit_soup_cache_send_response (WebKitSoupCache *cache, SoupMessage *msg)
-{
- char *key;
- WebKitSoupCacheEntry *entry;
- char *current_age;
- GInputStream *stream = NULL;
- GFile *file;
-
- g_return_val_if_fail (WEBKIT_IS_SOUP_CACHE (cache), NULL);
- g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
-
- key = soup_message_get_cache_key (msg);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
- g_return_val_if_fail (entry, NULL);
-
- /* If we are told to send a response from cache any validation
- in course is over by now */
- entry->being_validated = FALSE;
-
- /* Headers */
- soup_message_headers_foreach (entry->headers,
- (SoupMessageHeadersForeachFunc)update_headers,
- msg->response_headers);
-
- /* Add 'Age' header with the current age */
- current_age = g_strdup_printf ("%d", webkit_soup_cache_entry_get_current_age (entry));
- soup_message_headers_replace (msg->response_headers,
- "Age",
- current_age);
- g_free (current_age);
-
- /* TODO: the original idea was to save reads, but current code
- assumes that a stream is always returned. Need to reach
- some agreement here. Also we have to handle the situation
- were the file was no longer there (for example files
- removed without notifying the cache */
- file = g_file_new_for_path (entry->filename);
- stream = (GInputStream *)g_file_read (file, NULL, NULL);
-
- return stream;
-}
-
-static void
-request_started (SoupSessionFeature *feature, SoupSession *session,
- SoupMessage *msg, SoupSocket *socket)
-{
- RequestHelper *helper = g_slice_new0 (RequestHelper);
- helper->request_time = time (NULL);
- helper->feature = feature;
- helper->got_headers_handler = g_signal_connect (msg, "got-headers",
- G_CALLBACK (msg_got_headers_cb),
- helper);
-}
-
-static void
-attach (SoupSessionFeature *feature, SoupSession *session)
-{
- WebKitSoupCache *cache = WEBKIT_SOUP_CACHE (feature);
- cache->priv->session = session;
-
- webkit_soup_cache_default_feature_interface->attach (feature, session);
-}
-
-static void
-webkit_soup_cache_session_feature_init (SoupSessionFeatureInterface *feature_interface,
- gpointer interface_data)
-{
- webkit_soup_cache_default_feature_interface =
- g_type_default_interface_peek (SOUP_TYPE_SESSION_FEATURE);
-
- feature_interface->attach = attach;
- feature_interface->request_started = request_started;
-}
-
-static void
-webkit_soup_cache_init (WebKitSoupCache *cache)
-{
- WebKitSoupCachePrivate *priv;
-
- priv = cache->priv = WEBKIT_SOUP_CACHE_GET_PRIVATE (cache);
-
- priv->cache = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify)g_free,
- NULL);
-
- /* LRU */
- priv->lru_start = NULL;
-
- /* */
- priv->n_pending = 0;
-
- /* Cache size */
- priv->max_size = DEFAULT_MAX_SIZE;
- priv->max_entry_data_size = priv->max_size / MAX_ENTRY_DATA_PERCENTAGE;
- priv->size = 0;
-}
-
-static void
-remove_cache_item (gpointer data,
- gpointer user_data)
-{
- WebKitSoupCache *cache = (WebKitSoupCache *) user_data;
- WebKitSoupCacheEntry *entry = (WebKitSoupCacheEntry *) data;
-
- if (webkit_soup_cache_entry_remove (cache, entry))
- webkit_soup_cache_entry_free (entry, FALSE);
-}
-
-static void
-webkit_soup_cache_finalize (GObject *object)
-{
- WebKitSoupCachePrivate *priv;
- GList *entries;
-
- priv = WEBKIT_SOUP_CACHE (object)->priv;
-
- // Cannot use g_hash_table_foreach as callbacks must not modify the hash table
- entries = g_hash_table_get_values (priv->cache);
- g_list_foreach (entries, remove_cache_item, object);
- g_list_free (entries);
-
- g_hash_table_destroy (priv->cache);
- g_free (priv->cache_dir);
-
- g_list_free (priv->lru_start);
- priv->lru_start = NULL;
-
- G_OBJECT_CLASS (webkit_soup_cache_parent_class)->finalize (object);
-}
-
-static void
-webkit_soup_cache_set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
-{
- WebKitSoupCachePrivate *priv = WEBKIT_SOUP_CACHE (object)->priv;
-
- switch (prop_id) {
- case PROP_CACHE_DIR:
- priv->cache_dir = g_value_dup_string (value);
- /* Create directory if it does not exist (FIXME: should we?) */
- if (!g_file_test (priv->cache_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
- g_mkdir_with_parents (priv->cache_dir, 0700);
- break;
- case PROP_CACHE_TYPE:
- priv->cache_type = g_value_get_enum (value);
- /* TODO: clear private entries and issue a warning if moving to shared? */
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-webkit_soup_cache_get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
-{
- WebKitSoupCachePrivate *priv = WEBKIT_SOUP_CACHE (object)->priv;
-
- switch (prop_id) {
- case PROP_CACHE_DIR:
- g_value_set_string (value, priv->cache_dir);
- break;
- case PROP_CACHE_TYPE:
- g_value_set_enum (value, priv->cache_type);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-webkit_soup_cache_constructed (GObject *object)
-{
- WebKitSoupCachePrivate *priv;
-
- priv = WEBKIT_SOUP_CACHE (object)->priv;
-
- if (!priv->cache_dir) {
- /* Set a default cache dir, different for each user */
- priv->cache_dir = g_build_filename (g_get_user_cache_dir (),
- "httpcache",
- NULL);
- if (!g_file_test (priv->cache_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
- g_mkdir_with_parents (priv->cache_dir, 0700);
- }
-
- if (G_OBJECT_CLASS (webkit_soup_cache_parent_class)->constructed)
- G_OBJECT_CLASS (webkit_soup_cache_parent_class)->constructed (object);
-}
-
-#define WEBKIT_SOUP_CACHE_TYPE_TYPE (webkit_soup_cache_type_get_type ())
-static GType
-webkit_soup_cache_type_get_type (void)
-{
- static GType cache_type = 0;
-
- static const GEnumValue cache_types[] = {
- { WEBKIT_SOUP_CACHE_SINGLE_USER, "Single user cache", "user" },
- { WEBKIT_SOUP_CACHE_SHARED, "Shared cache", "shared" },
- { 0, NULL, NULL }
- };
-
- if (!cache_type) {
- cache_type = g_enum_register_static ("WebKitSoupCacheTypeType", cache_types);
- }
- return cache_type;
-}
-
-static void
-webkit_soup_cache_class_init (WebKitSoupCacheClass *cache_class)
-{
- GObjectClass *gobject_class = (GObjectClass *)cache_class;
-
- gobject_class->finalize = webkit_soup_cache_finalize;
- gobject_class->constructed = webkit_soup_cache_constructed;
- gobject_class->set_property = webkit_soup_cache_set_property;
- gobject_class->get_property = webkit_soup_cache_get_property;
-
- cache_class->get_cacheability = get_cacheability;
-
- g_object_class_install_property (gobject_class, PROP_CACHE_DIR,
- g_param_spec_string ("cache-dir",
- "Cache directory",
- "The directory to store the cache files",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (gobject_class, PROP_CACHE_TYPE,
- g_param_spec_enum ("cache-type",
- "Cache type",
- "Whether the cache is private or shared",
- WEBKIT_SOUP_CACHE_TYPE_TYPE,
- WEBKIT_SOUP_CACHE_SINGLE_USER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (cache_class, sizeof (WebKitSoupCachePrivate));
-}
-
-/**
- * webkit_soup_cache_new:
- * @cache_dir: the directory to store the cached data, or %NULL to use the default one
- * @cache_type: the #WebKitSoupCacheType of the cache
- *
- * Creates a new #WebKitSoupCache.
- *
- * Returns: a new #WebKitSoupCache
- *
- * Since: 2.28
- **/
-WebKitSoupCache *
-webkit_soup_cache_new (const char *cache_dir, WebKitSoupCacheType cache_type)
-{
- return g_object_new (WEBKIT_TYPE_SOUP_CACHE,
- "cache-dir", cache_dir,
- "cache-type", cache_type,
- NULL);
-}
-
-/**
- * webkit_soup_cache_has_response:
- * @cache: a #WebKitSoupCache
- * @msg: a #SoupMessage
- *
- * This function calculates whether the @cache object has a proper
- * response for the request @msg given the flags both in the request
- * and the cached reply and the time ellapsed since it was cached.
- *
- * Returns: whether or not the @cache has a valid response for @msg
- **/
-WebKitSoupCacheResponse
-webkit_soup_cache_has_response (WebKitSoupCache *cache, SoupMessage *msg)
-{
- char *key;
- WebKitSoupCacheEntry *entry;
- const char *cache_control;
- gpointer value;
- gboolean must_revalidate;
- int max_age, max_stale, min_fresh;
- GList *lru_item, *item;
-
- key = soup_message_get_cache_key (msg);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
-
- /* 1. The presented Request-URI and that of stored response
- * match
- */
- if (!entry)
- return WEBKIT_SOUP_CACHE_RESPONSE_STALE;
-
- /* Increase hit count. Take sorting into account */
- entry->hits++;
- lru_item = g_list_find (cache->priv->lru_start, entry);
- item = lru_item;
- while (item->next && lru_compare_func (item->data, item->next->data) > 0)
- item = g_list_next (item);
-
- if (item != lru_item) {
- cache->priv->lru_start = g_list_remove_link (cache->priv->lru_start, lru_item);
- item = g_list_insert_sorted (item, lru_item->data, lru_compare_func);
- g_list_free (lru_item);
- }
-
- if (entry->dirty || entry->being_validated)
- return WEBKIT_SOUP_CACHE_RESPONSE_STALE;
-
- /* 2. The request method associated with the stored response
- * allows it to be used for the presented request
- */
-
- /* In practice this means we only return our resource for GET,
- * cacheability for other methods is a TODO in the RFC
- * (TODO: although we could return the headers for HEAD
- * probably).
- */
- if (msg->method != SOUP_METHOD_GET)
- return WEBKIT_SOUP_CACHE_RESPONSE_STALE;
-
- /* 3. Selecting request-headers nominated by the stored
- * response (if any) match those presented.
- */
-
- /* TODO */
-
- /* 4. The request is a conditional request issued by the client.
- */
- if (soup_message_headers_get (msg->request_headers, "If-Modified-Since") ||
- soup_message_headers_get (msg->request_headers, "If-None-Match"))
- return WEBKIT_SOUP_CACHE_RESPONSE_STALE;
-
- /* 5. The presented request and stored response are free from
- * directives that would prevent its use.
- */
-
- must_revalidate = FALSE;
- max_age = max_stale = min_fresh = -1;
-
- cache_control = soup_message_headers_get (msg->request_headers, "Cache-Control");
- if (cache_control) {
- GHashTable *hash = soup_header_parse_param_list (cache_control);
-
- if (g_hash_table_lookup_extended (hash, "no-store", NULL, NULL)) {
- soup_header_free_param_list (hash);
- return WEBKIT_SOUP_CACHE_RESPONSE_STALE;
- }
-
- if (g_hash_table_lookup_extended (hash, "no-cache", NULL, NULL)) {
- entry->must_revalidate = TRUE;
- }
-
- if (g_hash_table_lookup_extended (hash, "max-age", NULL, &value)) {
- max_age = (int)MIN (g_ascii_strtoll (value, NULL, 10), G_MAXINT32);
- }
-
- /* max-stale can have no value set, we need to use _extended */
- if (g_hash_table_lookup_extended (hash, "max-stale", NULL, &value)) {
- if (value)
- max_stale = (int)MIN (g_ascii_strtoll (value, NULL, 10), G_MAXINT32);
- else
- max_stale = G_MAXINT32;
- }
-
- value = g_hash_table_lookup (hash, "min-fresh");
- if (value)
- min_fresh = (int)MIN (g_ascii_strtoll (value, NULL, 10), G_MAXINT32);
-
- soup_header_free_param_list (hash);
-
- if (max_age != -1) {
- guint current_age = webkit_soup_cache_entry_get_current_age (entry);
-
- /* If we are over max-age and max-stale is not
- set, do not use the value from the cache
- without validation */
- if ((guint) max_age <= current_age && max_stale == -1)
- return WEBKIT_SOUP_CACHE_RESPONSE_NEEDS_VALIDATION;
- }
- }
-
- /* 6. The stored response is either: fresh, allowed to be
- * served stale or succesfully validated
- */
- /* TODO consider also proxy-revalidate & s-maxage */
- if (entry->must_revalidate)
- return WEBKIT_SOUP_CACHE_RESPONSE_NEEDS_VALIDATION;
-
- if (!webkit_soup_cache_entry_is_fresh_enough (entry, min_fresh)) {
- /* Not fresh, can it be served stale? */
- if (max_stale != -1) {
- /* G_MAXINT32 means we accept any staleness */
- if (max_stale == G_MAXINT32)
- return WEBKIT_SOUP_CACHE_RESPONSE_FRESH;
-
- if ((webkit_soup_cache_entry_get_current_age (entry) - entry->freshness_lifetime) <= (guint) max_stale)
- return WEBKIT_SOUP_CACHE_RESPONSE_FRESH;
- }
-
- return WEBKIT_SOUP_CACHE_RESPONSE_NEEDS_VALIDATION;
- }
-
- return WEBKIT_SOUP_CACHE_RESPONSE_FRESH;
-}
-
-/**
- * webkit_soup_cache_get_cacheability:
- * @cache: a #WebKitSoupCache
- * @msg: a #SoupMessage
- *
- * Calculates whether the @msg can be cached or not.
- *
- * Returns: a #WebKitSoupCacheability value indicating whether the @msg can be cached or not.
- **/
-WebKitSoupCacheability
-webkit_soup_cache_get_cacheability (WebKitSoupCache *cache, SoupMessage *msg)
-{
- g_return_val_if_fail (WEBKIT_IS_SOUP_CACHE (cache), WEBKIT_SOUP_CACHE_UNCACHEABLE);
- g_return_val_if_fail (SOUP_IS_MESSAGE (msg), WEBKIT_SOUP_CACHE_UNCACHEABLE);
-
- return WEBKIT_SOUP_CACHE_GET_CLASS (cache)->get_cacheability (cache, msg);
-}
-
-static gboolean
-force_flush_timeout (gpointer data)
-{
- gboolean *forced = (gboolean *)data;
- *forced = TRUE;
-
- return FALSE;
-}
-
-/**
- * webkit_soup_cache_flush:
- * @cache: a #WebKitSoupCache
- * @session: the #SoupSession associated with the @cache
- *
- * This function will force all pending writes in the @cache to be
- * committed to disk. For doing so it will iterate the #GMainContext
- * associated with the @session (which can be the default one) as long
- * as needed.
- **/
-void
-webkit_soup_cache_flush (WebKitSoupCache *cache)
-{
- GMainContext *async_context;
- SoupSession *session;
- guint timeout_id;
- gboolean forced = FALSE;
-
- g_return_if_fail (WEBKIT_IS_SOUP_CACHE (cache));
-
- session = cache->priv->session;
- g_return_if_fail (SOUP_IS_SESSION (session));
- async_context = soup_session_get_async_context (session);
-
- /* We give cache 10 secs to finish */
- timeout_id = g_timeout_add (10000, force_flush_timeout, &forced);
-
- while (!forced && cache->priv->n_pending > 0)
- g_main_context_iteration (async_context, FALSE);
-
- if (!forced)
- g_source_remove (timeout_id);
- else
- g_warning ("Cache flush finished despite %d pending requests", cache->priv->n_pending);
-}
-
-static void
-clear_cache_item (gpointer data,
- gpointer user_data)
-{
- WebKitSoupCache *cache = (WebKitSoupCache *) user_data;
- WebKitSoupCacheEntry *entry = (WebKitSoupCacheEntry *) data;
-
- if (webkit_soup_cache_entry_remove (cache, entry))
- webkit_soup_cache_entry_free (entry, TRUE);
-}
-
-/**
- * webkit_soup_cache_clear:
- * @cache: a #WebKitSoupCache
- *
- * Will remove all entries in the @cache plus all the cache files
- * associated with them.
- **/
-void
-webkit_soup_cache_clear (WebKitSoupCache *cache)
-{
- GHashTable *hash;
- GList *entries;
-
- g_return_if_fail (WEBKIT_IS_SOUP_CACHE (cache));
-
- hash = cache->priv->cache;
- g_return_if_fail (hash);
-
- // Cannot use g_hash_table_foreach as callbacks must not modify the hash table
- entries = g_hash_table_get_values (hash);
- g_list_foreach (entries, clear_cache_item, cache);
- g_list_free (entries);
-}
-
-SoupMessage *
-webkit_soup_cache_generate_conditional_request (WebKitSoupCache *cache, SoupMessage *original)
-{
- SoupMessage *msg;
- SoupURI *uri;
- WebKitSoupCacheEntry *entry;
- char *key;
- const char *value;
-
- g_return_val_if_fail (WEBKIT_IS_SOUP_CACHE (cache), NULL);
- g_return_val_if_fail (SOUP_IS_MESSAGE (original), NULL);
-
- /* First copy the data we need from the original message */
- uri = soup_message_get_uri (original);
- msg = soup_message_new_from_uri (original->method, uri);
-
- soup_message_headers_foreach (original->request_headers,
- (SoupMessageHeadersForeachFunc)copy_headers,
- msg->request_headers);
-
- /* Now add the validator entries in the header from the cached
- data */
- key = soup_message_get_cache_key (original);
- entry = g_hash_table_lookup (cache->priv->cache, key);
- g_free (key);
-
- g_return_val_if_fail (entry, NULL);
-
- entry->being_validated = TRUE;
-
- value = soup_message_headers_get (entry->headers, "Last-Modified");
- if (value)
- soup_message_headers_append (msg->request_headers,
- "If-Modified-Since",
- value);
- value = soup_message_headers_get (entry->headers, "ETag");
- if (value)
- soup_message_headers_append (msg->request_headers,
- "If-None-Match",
- value);
- return msg;
-}
-
-#define WEBKIT_SOUP_CACHE_FILE "soup.cache"
-
-#define WEBKIT_SOUP_CACHE_HEADERS_FORMAT "{ss}"
-#define WEBKIT_SOUP_CACHE_PHEADERS_FORMAT "(ssbuuuuua" WEBKIT_SOUP_CACHE_HEADERS_FORMAT ")"
-#define WEBKIT_SOUP_CACHE_ENTRIES_FORMAT "a" WEBKIT_SOUP_CACHE_PHEADERS_FORMAT
-
-/* Basically the same format than above except that some strings are
- prepended with &. This way the GVariant returns a pointer to the
- data instead of duplicating the string */
-#define WEBKIT_SOUP_CACHE_DECODE_HEADERS_FORMAT "{&s&s}"
-
-static void
-pack_entry (gpointer data,
- gpointer user_data)
-{
- WebKitSoupCacheEntry *entry = (WebKitSoupCacheEntry *) data;
- SoupMessageHeadersIter iter;
- const gchar *header_key, *header_value;
- GVariantBuilder *headers_builder;
- GVariantBuilder *entries_builder = (GVariantBuilder *)user_data;
-
- /* Do not store non-consolidated entries */
- if (entry->dirty || entry->writing || !entry->key)
- return;
-
- /* Pack headers */
- headers_builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
- soup_message_headers_iter_init (&iter, entry->headers);
- while (soup_message_headers_iter_next (&iter, &header_key, &header_value)) {
- if (g_utf8_validate (header_value, -1, NULL))
- g_variant_builder_add (headers_builder, WEBKIT_SOUP_CACHE_HEADERS_FORMAT,
- header_key, header_value);
- }
-
- /* Entry data */
- g_variant_builder_add (entries_builder, WEBKIT_SOUP_CACHE_PHEADERS_FORMAT,
- entry->key, entry->filename, entry->must_revalidate,
- entry->freshness_lifetime, entry->corrected_initial_age,
- entry->response_time, entry->hits, entry->length, headers_builder);
-
- g_variant_builder_unref (headers_builder);
-}
-
-void
-webkit_soup_cache_dump (WebKitSoupCache *cache)
-{
- WebKitSoupCachePrivate *priv = WEBKIT_SOUP_CACHE_GET_PRIVATE (cache);
- gchar *filename;
- GVariantBuilder *entries_builder;
- GVariant *cache_variant;
-
- if (!g_list_length (cache->priv->lru_start))
- return;
-
- /* Create the builder and iterate over all entries */
- entries_builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
- g_list_foreach (cache->priv->lru_start, pack_entry, entries_builder);
-
- /* Serialize and dump */
- cache_variant = g_variant_new (WEBKIT_SOUP_CACHE_ENTRIES_FORMAT, entries_builder);
- g_variant_builder_unref (entries_builder);
-
- filename = g_build_filename (priv->cache_dir, WEBKIT_SOUP_CACHE_FILE, NULL);
- g_file_set_contents (filename, (const gchar *)g_variant_get_data (cache_variant),
- g_variant_get_size (cache_variant), NULL);
- g_free (filename);
- g_variant_unref (cache_variant);
-}
-
-void
-webkit_soup_cache_load (WebKitSoupCache *cache)
-{
- gchar *filename = NULL, *contents = NULL;
- GVariant *cache_variant;
- GVariantIter *entries_iter, *headers_iter;
- GVariantType *variant_format;
- gsize length;
- WebKitSoupCacheEntry *entry;
- WebKitSoupCachePrivate *priv = cache->priv;
-
- filename = g_build_filename (priv->cache_dir, WEBKIT_SOUP_CACHE_FILE, NULL);
- if (!g_file_get_contents (filename, &contents, &length, NULL)) {
- g_free (filename);
- g_free (contents);
- return;
- }
- g_free (filename);
-
- variant_format = g_variant_type_new (WEBKIT_SOUP_CACHE_ENTRIES_FORMAT);
- cache_variant = g_variant_new_from_data (variant_format, (const gchar *)contents, length, FALSE, g_free, contents);
- g_variant_type_free (variant_format);
-
- g_variant_get (cache_variant, WEBKIT_SOUP_CACHE_ENTRIES_FORMAT, &entries_iter);
- entry = g_slice_new0 (WebKitSoupCacheEntry);
-
- while (g_variant_iter_loop (entries_iter, WEBKIT_SOUP_CACHE_PHEADERS_FORMAT,
- &entry->key, &entry->filename, &entry->must_revalidate,
- &entry->freshness_lifetime, &entry->corrected_initial_age,
- &entry->response_time, &entry->hits, &entry->length,
- &headers_iter)) {
- const gchar *header_key, *header_value;
-
- /* SoupMessage Headers */
- entry->headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_RESPONSE);
- while (g_variant_iter_loop (headers_iter, WEBKIT_SOUP_CACHE_DECODE_HEADERS_FORMAT, &header_key, &header_value))
- soup_message_headers_append (entry->headers, header_key, header_value);
-
- /* Insert in cache */
- if (!webkit_soup_cache_entry_insert_by_key (cache, (const gchar *)entry->key, entry, FALSE))
- webkit_soup_cache_entry_free (entry, TRUE);
-
- /* New entry for the next iteration. This creates an
- extra object the last iteration but it's worth it
- as we save several if's */
- entry = g_slice_new0 (WebKitSoupCacheEntry);
- }
- /* Remove last created entry */
- g_slice_free (WebKitSoupCacheEntry, entry);
-
- /* Sort LRU (shouldn't be needed). First reverse as elements
- * are always prepended when inserting
- */
- cache->priv->lru_start = g_list_reverse (cache->priv->lru_start);
- cache->priv->lru_start = g_list_sort (cache->priv->lru_start, lru_compare_func);
-
- /* frees */
- g_variant_iter_free (entries_iter);
- g_variant_unref (cache_variant);
-}
-
-void
-webkit_soup_cache_set_max_size (WebKitSoupCache *cache,
- guint max_size)
-{
- cache->priv->max_size = max_size;
- cache->priv->max_entry_data_size = cache->priv->max_size / MAX_ENTRY_DATA_PERCENTAGE;
-}
-
-guint
-webkit_soup_cache_get_max_size (WebKitSoupCache *cache)
-{
- return cache->priv->max_size;
-}
diff --git a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h b/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h
deleted file mode 100644
index a926f98..0000000
--- a/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * soup-cache.h:
- *
- * Copyright (C) 2009, 2010 Igalia, S.L.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef WEBKIT_SOUP_CACHE_H
-#define WEBKIT_SOUP_CACHE_H 1
-
-#ifdef G_OS_WIN32
- #ifdef BUILDING_WEBKIT
- #define WEBKIT_API __declspec(dllexport)
- #else
- #define WEBKIT_API __declspec(dllimport)
- #endif
- #define WEBKIT_OBSOLETE_API WEBKIT_API
-#else
- #define WEBKIT_API __attribute__((visibility("default")))
- #define WEBKIT_OBSOLETE_API WEBKIT_API __attribute__((deprecated))
-#endif
-
-#include <libsoup/soup-types.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define WEBKIT_TYPE_SOUP_CACHE (webkit_soup_cache_get_type ())
-#define WEBKIT_SOUP_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_SOUP_CACHE, WebKitSoupCache))
-#define WEBKIT_SOUP_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_SOUP_CACHE, WebKitSoupCacheClass))
-#define WEBKIT_IS_SOUP_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_SOUP_CACHE))
-#define WEBKIT_IS_SOUP_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), WEBKIT_TYPE_SOUP_CACHE))
-#define WEBKIT_SOUP_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_SOUP_CACHE, WebKitSoupCacheClass))
-
-typedef struct _WebKitSoupCache WebKitSoupCache;
-typedef struct _WebKitSoupCachePrivate WebKitSoupCachePrivate;
-
-typedef enum {
- WEBKIT_SOUP_CACHE_CACHEABLE = (1 << 0),
- WEBKIT_SOUP_CACHE_UNCACHEABLE = (1 << 1),
- WEBKIT_SOUP_CACHE_INVALIDATES = (1 << 2),
- WEBKIT_SOUP_CACHE_VALIDATES = (1 << 3)
-} WebKitSoupCacheability;
-
-typedef enum {
- WEBKIT_SOUP_CACHE_RESPONSE_FRESH,
- WEBKIT_SOUP_CACHE_RESPONSE_NEEDS_VALIDATION,
- WEBKIT_SOUP_CACHE_RESPONSE_STALE
-} WebKitSoupCacheResponse;
-
-typedef enum {
- WEBKIT_SOUP_CACHE_SINGLE_USER,
- WEBKIT_SOUP_CACHE_SHARED
-} WebKitSoupCacheType;
-
-struct _WebKitSoupCache {
- GObject parent_instance;
-
- WebKitSoupCachePrivate *priv;
-};
-
-typedef struct {
- GObjectClass parent_class;
-
- /* methods */
- WebKitSoupCacheability (*get_cacheability)(WebKitSoupCache *cache, SoupMessage *msg);
-
- /* Padding for future expansion */
- void (*_libsoup_reserved1)(void);
- void (*_libsoup_reserved2)(void);
- void (*_libsoup_reserved3)(void);
-} WebKitSoupCacheClass;
-
-WEBKIT_API GType webkit_soup_cache_get_type (void);
-WEBKIT_API WebKitSoupCache *webkit_soup_cache_new (const char *cache_dir,
- WebKitSoupCacheType cache_type);
-WEBKIT_API void webkit_soup_cache_flush (WebKitSoupCache *cache);
-WEBKIT_API void webkit_soup_cache_clear (WebKitSoupCache *cache);
-
-WEBKIT_API void webkit_soup_cache_dump (WebKitSoupCache *cache);
-WEBKIT_API void webkit_soup_cache_load (WebKitSoupCache *cache);
-
-WEBKIT_API void webkit_soup_cache_set_max_size (WebKitSoupCache *cache,
- guint max_size);
-WEBKIT_API guint webkit_soup_cache_get_max_size (WebKitSoupCache *cache);
-
-G_END_DECLS
-
-
-#endif /* WEBKIT_SOUP_CACHE_H */
-
diff --git a/Source/WebCore/platform/network/win/DownloadBundleWin.cpp b/Source/WebCore/platform/network/win/DownloadBundleWin.cpp
new file mode 100644
index 0000000..f0f3027
--- /dev/null
+++ b/Source/WebCore/platform/network/win/DownloadBundleWin.cpp
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "DownloadBundle.h"
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <io.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+namespace DownloadBundle {
+
+static UInt32 magicNumber()
+{
+ return 0xDECAF4EA;
+}
+
+const String& fileExtension()
+{
+ DEFINE_STATIC_LOCAL(const String, extension, (".download"));
+ return extension;
+}
+
+bool appendResumeData(CFDataRef resumeData, const String& bundlePath)
+{
+ if (!resumeData) {
+ LOG_ERROR("Invalid resume data to write to bundle path");
+ return false;
+ }
+ if (bundlePath.isEmpty()) {
+ LOG_ERROR("Cannot write resume data to empty download bundle path");
+ return false;
+ }
+
+ String nullifiedPath = bundlePath;
+ FILE* bundle = 0;
+ if (_wfopen_s(&bundle, nullifiedPath.charactersWithNullTermination(), TEXT("ab")) || !bundle) {
+ LOG_ERROR("Failed to open file %s to append resume data", bundlePath.ascii().data());
+ return false;
+ }
+
+ bool result = false;
+
+ const UInt8* resumeBytes = CFDataGetBytePtr(resumeData);
+ ASSERT(resumeBytes);
+ if (!resumeBytes)
+ goto exit;
+
+ CFIndex resumeLength = CFDataGetLength(resumeData);
+ ASSERT(resumeLength > 0);
+ if (resumeLength < 1)
+ goto exit;
+
+ if (fwrite(resumeBytes, 1, resumeLength, bundle) != resumeLength) {
+ LOG_ERROR("Failed to write resume data to the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ if (fwrite(&resumeLength, 4, 1, bundle) != 1) {
+ LOG_ERROR("Failed to write footer length to the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ const UInt32& magic = magicNumber();
+ if (fwrite(&magic, 4, 1, bundle) != 1) {
+ LOG_ERROR("Failed to write footer magic number to the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ result = true;
+exit:
+ fclose(bundle);
+ return result;
+}
+
+CFDataRef extractResumeData(const String& bundlePath)
+{
+ if (bundlePath.isEmpty()) {
+ LOG_ERROR("Cannot create resume data from empty download bundle path");
+ return 0;
+ }
+
+ // Open a handle to the bundle file
+ String nullifiedPath = bundlePath;
+ FILE* bundle = 0;
+ if (_wfopen_s(&bundle, nullifiedPath.charactersWithNullTermination(), TEXT("r+b")) || !bundle) {
+ LOG_ERROR("Failed to open file %s to get resume data", bundlePath.ascii().data());
+ return 0;
+ }
+
+ CFDataRef result = 0;
+ Vector<UInt8> footerBuffer;
+
+ // Stat the file to get its size
+ struct _stat64 fileStat;
+ if (_fstat64(_fileno(bundle), &fileStat))
+ goto exit;
+
+ // Check for the bundle magic number at the end of the file
+ fpos_t footerMagicNumberPosition = fileStat.st_size - 4;
+ ASSERT(footerMagicNumberPosition >= 0);
+ if (footerMagicNumberPosition < 0)
+ goto exit;
+ if (fsetpos(bundle, &footerMagicNumberPosition))
+ goto exit;
+
+ UInt32 footerMagicNumber = 0;
+ if (fread(&footerMagicNumber, 4, 1, bundle) != 1) {
+ LOG_ERROR("Failed to read footer magic number from the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ if (footerMagicNumber != magicNumber()) {
+ LOG_ERROR("Footer's magic number does not match 0x%X - errno(%i)", magicNumber(), errno);
+ goto exit;
+ }
+
+ // Now we're *reasonably* sure this is a .download bundle we actually wrote.
+ // Get the length of the resume data
+ fpos_t footerLengthPosition = fileStat.st_size - 8;
+ ASSERT(footerLengthPosition >= 0);
+ if (footerLengthPosition < 0)
+ goto exit;
+
+ if (fsetpos(bundle, &footerLengthPosition))
+ goto exit;
+
+ UInt32 footerLength = 0;
+ if (fread(&footerLength, 4, 1, bundle) != 1) {
+ LOG_ERROR("Failed to read ResumeData length from the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ // Make sure theres enough bytes to read in for the resume data, and perform the read
+ fpos_t footerStartPosition = fileStat.st_size - 8 - footerLength;
+ ASSERT(footerStartPosition >= 0);
+ if (footerStartPosition < 0)
+ goto exit;
+ if (fsetpos(bundle, &footerStartPosition))
+ goto exit;
+
+ footerBuffer.resize(footerLength);
+ if (fread(footerBuffer.data(), 1, footerLength, bundle) != footerLength) {
+ LOG_ERROR("Failed to read ResumeData from the bundle - errno(%i)", errno);
+ goto exit;
+ }
+
+ // CFURLDownload will seek to the appropriate place in the file (before our footer) and start overwriting from there
+ // However, say we were within a few hundred bytes of the end of a download when it was paused -
+ // The additional footer extended the length of the file beyond its final length, and there will be junk data leftover
+ // at the end. Therefore, now that we've retrieved the footer data, we need to truncate it.
+ if (errno_t resizeError = _chsize_s(_fileno(bundle), footerStartPosition)) {
+ LOG_ERROR("Failed to truncate the resume footer off the end of the file - errno(%i)", resizeError);
+ goto exit;
+ }
+
+ // Finally, make the resume data. Now, it is possible by some twist of fate the bundle magic number
+ // was naturally at the end of the file and its not actually a valid bundle. That, or someone engineered
+ // it that way to try to attack us. In that cause, this CFData will successfully create but when we
+ // actually try to start the CFURLDownload using this bogus data, it will fail and we will handle that gracefully
+ result = CFDataCreate(0, footerBuffer.data(), footerLength);
+exit:
+ fclose(bundle);
+ return result;
+}
+
+} // namespace DownloadBundle
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/qt/ClipboardQt.h b/Source/WebCore/platform/qt/ClipboardQt.h
index fb5abef..8d78634 100644
--- a/Source/WebCore/platform/qt/ClipboardQt.h
+++ b/Source/WebCore/platform/qt/ClipboardQt.h
@@ -26,8 +26,8 @@
#ifndef ClipboardQt_h
#define ClipboardQt_h
-#include "Clipboard.h"
#include "CachedResourceClient.h"
+#include "Clipboard.h"
QT_BEGIN_NAMESPACE
class QMimeData;
@@ -35,56 +35,56 @@ QT_END_NAMESPACE
namespace WebCore {
- class CachedImage;
+class CachedImage;
- // State available during IE's events for drag and drop and copy/paste
- class ClipboardQt : public Clipboard, public CachedResourceClient {
- WTF_MAKE_FAST_ALLOCATED;
- public:
- static PassRefPtr<ClipboardQt> create(ClipboardAccessPolicy policy, const QMimeData* readableClipboard)
- {
- return adoptRef(new ClipboardQt(policy, readableClipboard));
- }
- static PassRefPtr<ClipboardQt> create(ClipboardAccessPolicy policy, ClipboardType clipboardType = CopyAndPaste)
- {
- return adoptRef(new ClipboardQt(policy, clipboardType));
- }
- virtual ~ClipboardQt();
+// State available during IE's events for drag and drop and copy/paste
+class ClipboardQt : public Clipboard, public CachedResourceClient {
+ WTF_MAKE_FAST_ALLOCATED;
+public:
+ static PassRefPtr<ClipboardQt> create(ClipboardAccessPolicy policy, const QMimeData* readableClipboard)
+ {
+ return adoptRef(new ClipboardQt(policy, readableClipboard));
+ }
+ static PassRefPtr<ClipboardQt> create(ClipboardAccessPolicy policy, ClipboardType clipboardType = CopyAndPaste)
+ {
+ return adoptRef(new ClipboardQt(policy, clipboardType));
+ }
+ virtual ~ClipboardQt();
- void clearData(const String& type);
- void clearAllData();
- String getData(const String& type, bool& success) const;
- bool setData(const String& type, const String& data);
+ void clearData(const String& type);
+ void clearAllData();
+ String getData(const String& type, bool& success) const;
+ bool setData(const String& type, const String& data);
- // extensions beyond IE's API
- virtual HashSet<String> types() const;
- virtual PassRefPtr<FileList> files() const;
+ // extensions beyond IE's API
+ virtual HashSet<String> types() const;
+ virtual PassRefPtr<FileList> files() const;
- void setDragImage(CachedImage*, const IntPoint&);
- void setDragImageElement(Node*, const IntPoint&);
+ void setDragImage(CachedImage*, const IntPoint&);
+ void setDragImageElement(Node*, const IntPoint&);
- virtual DragImageRef createDragImage(IntPoint& dragLoc) const;
- virtual void declareAndWriteDragImage(Element*, const KURL&, const String& title, Frame*);
- virtual void writeURL(const KURL&, const String&, Frame*);
- virtual void writeRange(Range*, Frame*);
- virtual void writePlainText(const String&);
+ virtual DragImageRef createDragImage(IntPoint& dragLoc) const;
+ virtual void declareAndWriteDragImage(Element*, const KURL&, const String& title, Frame*);
+ virtual void writeURL(const KURL&, const String&, Frame*);
+ virtual void writeRange(Range*, Frame*);
+ virtual void writePlainText(const String&);
- virtual bool hasData();
+ virtual bool hasData();
- QMimeData* clipboardData() const { return m_writableData; }
- void invalidateWritableData() { m_writableData = 0; }
+ QMimeData* clipboardData() const { return m_writableData; }
+ void invalidateWritableData() { m_writableData = 0; }
- private:
- ClipboardQt(ClipboardAccessPolicy, const QMimeData* readableClipboard);
+private:
+ ClipboardQt(ClipboardAccessPolicy, const QMimeData* readableClipboard);
- // Clipboard is writable so it will create its own QMimeData object
- ClipboardQt(ClipboardAccessPolicy, ClipboardType);
+ // Clipboard is writable so it will create its own QMimeData object
+ ClipboardQt(ClipboardAccessPolicy, ClipboardType);
- void setDragImage(CachedImage*, Node*, const IntPoint& loc);
+ void setDragImage(CachedImage*, Node*, const IntPoint& loc);
- const QMimeData* m_readableData;
- QMimeData* m_writableData;
- };
+ const QMimeData* m_readableData;
+ QMimeData* m_writableData;
+};
}
#endif // ClipboardQt_h
diff --git a/Source/WebCore/platform/qt/CookieJarQt.cpp b/Source/WebCore/platform/qt/CookieJarQt.cpp
index b7ff5d1..e5a2dcd 100644
--- a/Source/WebCore/platform/qt/CookieJarQt.cpp
+++ b/Source/WebCore/platform/qt/CookieJarQt.cpp
@@ -114,10 +114,12 @@ String cookieRequestHeaderFieldValue(const Document* document, const KURL &url)
bool cookiesEnabled(const Document* document)
{
- if (QNetworkAccessManager* manager = networkAccessManager(document))
- return !!manager->cookieJar();
+ QNetworkAccessManager* manager = networkAccessManager(document);
+ if (!manager)
+ return false;
- return false;
+ QtNAMThreadSafeProxy managerProxy(manager);
+ return managerProxy.hasCookieJar();
}
bool getRawCookies(const Document*, const KURL&, Vector<Cookie>& rawCookies)
diff --git a/Source/WebCore/platform/qt/DragDataQt.cpp b/Source/WebCore/platform/qt/DragDataQt.cpp
index f68ad1d..2554df4 100644
--- a/Source/WebCore/platform/qt/DragDataQt.cpp
+++ b/Source/WebCore/platform/qt/DragDataQt.cpp
@@ -125,7 +125,8 @@ String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String*)
if (urls.isEmpty())
return String();
- return encodeWithURLEscapeSequences(urls.first().toString());
+ QByteArray encodedUrl = urls.first().toEncoded();
+ return String(encodedUrl.constData(), encodedUrl.length());
}
PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const
diff --git a/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp b/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp
index 12db891..01cef12 100644
--- a/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp
+++ b/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp
@@ -29,6 +29,9 @@
#include "config.h"
#include "MIMETypeRegistry.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
+
namespace WebCore {
struct ExtensionMap {
@@ -70,6 +73,8 @@ static const ExtensionMap extensionMap[] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
String s = ext.lower();
const ExtensionMap *e = extensionMap;
diff --git a/Source/WebCore/platform/qt/RenderThemeQt.cpp b/Source/WebCore/platform/qt/RenderThemeQt.cpp
index 8d5cfcd..d4688cf 100644
--- a/Source/WebCore/platform/qt/RenderThemeQt.cpp
+++ b/Source/WebCore/platform/qt/RenderThemeQt.cpp
@@ -726,7 +726,7 @@ bool RenderThemeQt::paintMenuList(RenderObject* o, const PaintInfo& i, const Int
initStyleOption(p.widget, opt);
initializeCommonQStyleOptions(opt, o);
- const QPoint topLeft = r.topLeft();
+ const QPoint topLeft = r.location();
p.painter->translate(topLeft);
opt.rect.moveTo(QPoint(0, 0));
opt.rect.setSize(r.size());
@@ -825,7 +825,7 @@ bool RenderThemeQt::paintProgressBar(RenderObject* o, const PaintInfo& pi, const
option.minimum = 0;
option.progress = (renderProgress->position() * std::numeric_limits<int>::max());
- const QPoint topLeft = r.topLeft();
+ const QPoint topLeft = r.location();
p.painter->translate(topLeft);
option.rect.moveTo(QPoint(0, 0));
option.rect.setSize(r.size());
@@ -887,7 +887,7 @@ bool RenderThemeQt::paintSliderTrack(RenderObject* o, const PaintInfo& pi,
option.state |= QStyle::State_Sunken;
}
- const QPoint topLeft = r.topLeft();
+ const QPoint topLeft = r.location();
p.painter->translate(topLeft);
option.rect.moveTo(QPoint(0, 0));
option.rect.setSize(r.size());
@@ -1174,7 +1174,26 @@ QColor RenderThemeQt::getMediaControlForegroundColor(RenderObject* o) const
bool RenderThemeQt::paintMediaFullscreenButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
{
- return RenderTheme::paintMediaFullscreenButton(o, paintInfo, r);
+ HTMLMediaElement* mediaElement = getMediaElementFromRenderObject(o);
+ if (!mediaElement)
+ return false;
+
+ StylePainter p(this, paintInfo);
+ if (!p.isValid())
+ return true;
+
+ p.painter->setRenderHint(QPainter::Antialiasing, true);
+
+ paintMediaBackground(p.painter, r);
+
+ WorldMatrixTransformer transformer(p.painter, o, r);
+ const QPointF arrowPolygon[9] = { QPointF(20, 0), QPointF(100, 0), QPointF(100, 80),
+ QPointF(80, 80), QPointF(80, 30), QPointF(10, 100), QPointF(0, 90), QPointF(70, 20), QPointF(20, 20)};
+
+ p.painter->setBrush(getMediaControlForegroundColor(o));
+ p.painter->drawPolygon(arrowPolygon, 9);
+
+ return false;
}
bool RenderThemeQt::paintMediaMuteButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
diff --git a/Source/WebCore/platform/qt/ScrollbarQt.cpp b/Source/WebCore/platform/qt/ScrollbarQt.cpp
index dda82e9..5afb1ae6 100644
--- a/Source/WebCore/platform/qt/ScrollbarQt.cpp
+++ b/Source/WebCore/platform/qt/ScrollbarQt.cpp
@@ -74,6 +74,11 @@ bool Scrollbar::contextMenu(const PlatformMouseEvent& event)
QAction* actionSelected = menu.exec(globalPos);
if (actionSelected == actScrollHere) {
+ // Set the pressed position to the middle of the thumb so that when we
+ // do move, the delta will be from the current pixel position of the
+ // thumb to the new position
+ int position = theme()->trackPosition(this) + theme()->thumbPosition(this) + theme()->thumbLength(this) / 2;
+ setPressedPos(position);
const QPoint pos = convertFromContainingWindow(event.pos());
moveThumb(horizontal ? pos.x() : pos.y());
} else if (actionSelected == actScrollTop)
diff --git a/Source/WebCore/platform/sql/SQLiteStatement.cpp b/Source/WebCore/platform/sql/SQLiteStatement.cpp
index af9518a..d9186dc 100644
--- a/Source/WebCore/platform/sql/SQLiteStatement.cpp
+++ b/Source/WebCore/platform/sql/SQLiteStatement.cpp
@@ -176,6 +176,20 @@ int SQLiteStatement::bindBlob(int index, const void* blob, int size)
return sqlite3_bind_blob(m_statement, index, blob, size, SQLITE_TRANSIENT);
}
+int SQLiteStatement::bindBlob(int index, const String& text)
+{
+ // String::characters() returns 0 for the empty string, which SQLite
+ // treats as a null, so we supply a non-null pointer for that case.
+ UChar anyCharacter = 0;
+ const UChar* characters;
+ if (text.isEmpty() && !text.isNull())
+ characters = &anyCharacter;
+ else
+ characters = text.characters();
+
+ return bindBlob(index, characters, text.length() * sizeof(UChar));
+}
+
int SQLiteStatement::bindText(int index, const String& text)
{
ASSERT(m_isPrepared);
@@ -355,7 +369,29 @@ int64_t SQLiteStatement::getColumnInt64(int col)
return 0;
return sqlite3_column_int64(m_statement, col);
}
-
+
+String SQLiteStatement::getColumnBlobAsString(int col)
+{
+ ASSERT(col >= 0);
+
+ if (!m_statement && prepareAndStep() != SQLITE_ROW)
+ return String();
+
+ if (columnCount() <= col)
+ return String();
+
+ const void* blob = sqlite3_column_blob(m_statement, col);
+ if (!blob)
+ return String();
+
+ int size = sqlite3_column_bytes(m_statement, col);
+ if (size < 0)
+ return String();
+
+ ASSERT(!(size % sizeof(UChar)));
+ return String(static_cast<const UChar*>(blob), size / sizeof(UChar));
+}
+
void SQLiteStatement::getColumnBlobAsVector(int col, Vector<char>& result)
{
ASSERT(col >= 0);
@@ -379,7 +415,7 @@ void SQLiteStatement::getColumnBlobAsVector(int col, Vector<char>& result)
int size = sqlite3_column_bytes(m_statement, col);
result.resize((size_t)size);
for (int i = 0; i < size; ++i)
- result[i] = ((const unsigned char*)blob)[i];
+ result[i] = (static_cast<const unsigned char*>(blob))[i];
}
const void* SQLiteStatement::getColumnBlob(int col, int& size)
diff --git a/Source/WebCore/platform/sql/SQLiteStatement.h b/Source/WebCore/platform/sql/SQLiteStatement.h
index fd1abfb..35dcecf 100644
--- a/Source/WebCore/platform/sql/SQLiteStatement.h
+++ b/Source/WebCore/platform/sql/SQLiteStatement.h
@@ -42,6 +42,7 @@ public:
int prepare();
int bindBlob(int index, const void* blob, int size);
+ int bindBlob(int index, const String&);
int bindText(int index, const String&);
int bindInt(int index, int);
int bindInt64(int index, int64_t);
@@ -80,6 +81,7 @@ public:
int getColumnInt(int col);
int64_t getColumnInt64(int col);
const void* getColumnBlob(int col, int& size);
+ String getColumnBlobAsString(int col);
void getColumnBlobAsVector(int col, Vector<char>&);
bool returnTextResults(int col, Vector<String>&);
diff --git a/Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp b/Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
index 37f96be..6dbc384 100644
--- a/Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
+++ b/Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
@@ -34,938 +34,23 @@
#include "PlatformBridge.h"
#include <sqlite3.h>
-#include <errno.h>
#include <fcntl.h>
#include <string.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
#include <unistd.h>
using namespace WebCore;
-// Chromium's Posix implementation of SQLite VFS.
-// This is heavily based on SQLite's os_unix.c,
-// without parts we don't need.
-
-// Identifies a file by its device number and inode.
-struct ChromiumFileId {
- dev_t dev; // Device number.
- ino_t ino; // Inode number.
-};
-
-// Information about file locks (one per open inode). Note that many open
-// file descriptors may refer to the same inode.
-struct ChromiumLockInfo {
- ChromiumFileId lockKey; // File identifier.
- int cnt; // Number of shared locks held.
- int locktype; // Type of the lock.
- int nRef; // Reference count.
-
- // Double-linked list pointers.
- ChromiumLockInfo* pNext;
- ChromiumLockInfo* pPrev;
-};
-
-// Information about a file descriptor that cannot be closed immediately.
-struct ChromiumUnusedFd {
- int fd; // File descriptor.
- int flags; // Flags this file descriptor was opened with.
- ChromiumUnusedFd* pNext; // Next unused file descriptor on the same file.
-};
-
-// Information about an open inode. When we want to close an inode
-// that still has locks, we defer the close until all locks are cleared.
-struct ChromiumOpenInfo {
- ChromiumFileId fileId; // The lookup key.
- int nRef; // Reference count.
- int nLock; // Number of outstanding locks.
- ChromiumUnusedFd* pUnused; // List of file descriptors to close.
-
- // Double-linked list pointers.
- ChromiumOpenInfo* pNext;
- ChromiumOpenInfo* pPrev;
-};
-
-// Keep track of locks and inodes in double-linked lists.
-static struct ChromiumLockInfo* lockList = 0;
-static struct ChromiumOpenInfo* openList = 0;
-
-// Extension of sqlite3_file specific to the chromium VFS.
-struct ChromiumFile {
- sqlite3_io_methods const* pMethod; // Implementation of sqlite3_file.
- ChromiumOpenInfo* pOpen; // Information about all open file descriptors for this file.
- ChromiumLockInfo* pLock; // Information about all locks for this file.
- int h; // File descriptor.
- int dirfd; // File descriptor for the file directory.
- unsigned char locktype; // Type of the lock used for this file.
- int lastErrno; // Value of errno for last operation on this file.
- ChromiumUnusedFd* pUnused; // Information about unused file descriptors for this file.
-};
-
-// The following constants specify the range of bytes used for locking.
-// SQLiteSharedSize is the number of bytes available in the pool from which
-// a random byte is selected for a shared lock. The pool of bytes for
-// shared locks begins at SQLiteSharedFirstByte.
-// The values are the same as used by SQLite for compatibility.
-static const off_t SQLitePendingByte = 0x40000000;
-static const off_t SQLiteReservedByte = SQLitePendingByte + 1;
-static const off_t SQLiteSharedFirstByte = SQLitePendingByte + 2;
-static const off_t SQLiteSharedSize = 510;
-
-// Maps a POSIX error code to an SQLite error code.
-static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr)
-{
- switch (posixError) {
- case 0:
- return SQLITE_OK;
- case EAGAIN:
- case ETIMEDOUT:
- case EBUSY:
- case EINTR:
- case ENOLCK:
- return SQLITE_BUSY;
- case EACCES:
- // EACCES is like EAGAIN during locking operations.
- if ((sqliteIOErr == SQLITE_IOERR_LOCK) ||
- (sqliteIOErr == SQLITE_IOERR_UNLOCK) ||
- (sqliteIOErr == SQLITE_IOERR_RDLOCK) ||
- (sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK))
- return SQLITE_BUSY;
- return SQLITE_PERM;
- case EPERM:
- return SQLITE_PERM;
- case EDEADLK:
- return SQLITE_IOERR_BLOCKED;
- default:
- return sqliteIOErr;
- }
-}
-
-// Releases a ChromiumLockInfo structure previously allocated by findLockInfo().
-static void releaseLockInfo(ChromiumLockInfo* pLock)
-{
- if (!pLock)
- return;
-
- pLock->nRef--;
- if (pLock->nRef > 0)
- return;
-
- if (pLock->pPrev) {
- ASSERT(pLock->pPrev->pNext == pLock);
- pLock->pPrev->pNext = pLock->pNext;
- } else {
- ASSERT(lockList == pLock);
- lockList = pLock->pNext;
- }
- if (pLock->pNext) {
- ASSERT(pLock->pNext->pPrev == pLock);
- pLock->pNext->pPrev = pLock->pPrev;
- }
-
- sqlite3_free(pLock);
-}
-
-// Releases a ChromiumOpenInfo structure previously allocated by findLockInfo().
-static void releaseOpenInfo(ChromiumOpenInfo* pOpen)
-{
- if (!pOpen)
- return;
-
- pOpen->nRef--;
- if (pOpen->nRef > 0)
- return;
-
- if (pOpen->pPrev) {
- ASSERT(pOpen->pPrev->pNext == pOpen);
- pOpen->pPrev->pNext = pOpen->pNext;
- } else {
- ASSERT(openList == pOpen);
- openList = pOpen->pNext;
- }
- if (pOpen->pNext) {
- ASSERT(pOpen->pNext->pPrev == pOpen);
- pOpen->pNext->pPrev = pOpen->pPrev;
- }
-
- ASSERT(!pOpen->pUnused); // Make sure we're not leaking memory and file descriptors.
-
- sqlite3_free(pOpen);
-}
-
-// Locates ChromiumLockInfo and ChromiumOpenInfo for given file descriptor (creating new ones if needed).
-// Returns a SQLite error code.
-static int findLockInfo(ChromiumFile* pFile, ChromiumLockInfo** ppLock, ChromiumOpenInfo** ppOpen)
-{
- int fd = pFile->h;
- struct stat statbuf;
- int rc = fstat(fd, &statbuf);
- if (rc) {
- pFile->lastErrno = errno;
-#ifdef EOVERFLOW
- if (pFile->lastErrno == EOVERFLOW)
- return SQLITE_NOLFS;
-#endif
- return SQLITE_IOERR;
- }
-
-#if OS(DARWIN)
- // On OS X on an msdos/fat filesystems, the inode number is reported
- // incorrectly for zero-size files. See http://www.sqlite.org/cvstrac/tktview?tn=3260.
- // To work around this problem we always increase the file size to 1 by writing a single byte
- // prior to accessing the inode number. The one byte written is an ASCII 'S' character which
- // also happens to be the first byte in the header of every SQLite database. In this way,
- // if there is a race condition such that another thread has already populated the first page
- // of the database, no damage is done.
- if (!statbuf.st_size) {
- rc = write(fd, "S", 1);
- if (rc != 1)
- return SQLITE_IOERR;
- rc = fstat(fd, &statbuf);
- if (rc) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR;
- }
- }
-#endif
-
- ChromiumFileId fileId;
- memset(&fileId, 0, sizeof(fileId));
- fileId.dev = statbuf.st_dev;
- fileId.ino = statbuf.st_ino;
-
- ChromiumLockInfo* pLock = 0;
-
- if (ppLock) {
- pLock = lockList;
- while (pLock && memcmp(&fileId, &pLock->lockKey, sizeof(fileId)))
- pLock = pLock->pNext;
- if (pLock)
- pLock->nRef++;
- else {
- pLock = static_cast<ChromiumLockInfo*>(sqlite3_malloc(sizeof(*pLock)));
- if (!pLock)
- return SQLITE_NOMEM;
- pLock->lockKey = fileId;
- pLock->nRef = 1;
- pLock->cnt = 0;
- pLock->locktype = 0;
- pLock->pNext = lockList;
- pLock->pPrev = 0;
- if (lockList)
- lockList->pPrev = pLock;
- lockList = pLock;
- }
- *ppLock = pLock;
- }
-
- if (ppOpen) {
- ChromiumOpenInfo* pOpen = openList;
- while (pOpen && memcmp(&fileId, &pOpen->fileId, sizeof(fileId)))
- pOpen = pOpen->pNext;
- if (pOpen)
- pOpen->nRef++;
- else {
- pOpen = static_cast<ChromiumOpenInfo*>(sqlite3_malloc(sizeof(*pOpen)));
- if (!pOpen) {
- releaseLockInfo(pLock);
- return SQLITE_NOMEM;
- }
- memset(pOpen, 0, sizeof(*pOpen));
- pOpen->fileId = fileId;
- pOpen->nRef = 1;
- pOpen->pNext = openList;
- if (openList)
- openList->pPrev = pOpen;
- openList = pOpen;
- }
- *ppOpen = pOpen;
- }
-
- return rc;
-}
-
-// Checks if there is a RESERVED lock held on the specified file by this or any other process.
-// If the lock is held, sets pResOut to a non-zero value. Returns a SQLite error code.
-static int chromiumCheckReservedLock(sqlite3_file* id, int* pResOut)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- // Look for locks held by this process.
- int reserved = 0;
- if (pFile->pLock->locktype > SQLITE_LOCK_SHARED)
- reserved = 1;
-
- // Look for locks held by other processes.
- int rc = SQLITE_OK;
- if (!reserved) {
- struct flock lock;
- lock.l_whence = SEEK_SET;
- lock.l_start = SQLiteReservedByte;
- lock.l_len = 1;
- lock.l_type = F_WRLCK;
- if (-1 == fcntl(pFile->h, F_GETLK, &lock)) {
- int tErrno = errno;
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
- pFile->lastErrno = tErrno;
- } else if (lock.l_type != F_UNLCK)
- reserved = 1;
- }
-
- *pResOut = reserved;
- return rc;
-}
-
-// Performs a file locking operation on a range of bytes in a file.
-// The |op| parameter should be one of F_RFLCK, F_WRLCK or F_UNLCK.
-// Returns a Unix error code, and also writes it to pErrcode.
-static int rangeLock(ChromiumFile* pFile, int op, int* pErrcode)
-{
- struct flock lock;
- lock.l_type = op;
- lock.l_start = SQLiteSharedFirstByte;
- lock.l_whence = SEEK_SET;
- lock.l_len = SQLiteSharedSize;
- int rc = fcntl(pFile->h, F_SETLK, &lock);
- *pErrcode = errno;
- return rc;
-}
-
-// Locks the file with the lock specified by parameter locktype - one
-// of the following:
-//
-// (1) SQLITE_LOCK_SHARED
-// (2) SQLITE_LOCK_RESERVED
-// (3) SQLITE_LOCK_PENDING
-// (4) SQLITE_LOCK_EXCLUSIVE
-//
-// Sometimes when requesting one lock state, additional lock states
-// are inserted in between. The locking might fail on one of the later
-// transitions leaving the lock state different from what it started but
-// still short of its goal. The following chart shows the allowed
-// transitions and the inserted intermediate states:
-//
-// UNLOCKED -> SHARED
-// SHARED -> RESERVED
-// SHARED -> (PENDING) -> EXCLUSIVE
-// RESERVED -> (PENDING) -> EXCLUSIVE
-// PENDING -> EXCLUSIVE
-static int chromiumLock(sqlite3_file* id, int locktype)
-{
- // To obtain a SHARED lock, a read-lock is obtained on the 'pending
- // byte'. If this is successful, a random byte from the 'shared byte
- // range' is read-locked and the lock on the 'pending byte' released.
- //
- // A process may only obtain a RESERVED lock after it has a SHARED lock.
- // A RESERVED lock is implemented by grabbing a write-lock on the
- // 'reserved byte'.
- //
- // A process may only obtain a PENDING lock after it has obtained a
- // SHARED lock. A PENDING lock is implemented by obtaining a write-lock
- // on the 'pending byte'. This ensures that no new SHARED locks can be
- // obtained, but existing SHARED locks are allowed to persist. A process
- // does not have to obtain a RESERVED lock on the way to a PENDING lock.
- // This property is used by the algorithm for rolling back a journal file
- // after a crash.
- //
- // An EXCLUSIVE lock, obtained after a PENDING lock is held, is
- // implemented by obtaining a write-lock on the entire 'shared byte
- // range'. Since all other locks require a read-lock on one of the bytes
- // within this range, this ensures that no other locks are held on the
- // database.
-
- int rc = SQLITE_OK;
- struct flock lock;
- int s = 0;
- int tErrno;
-
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- ChromiumLockInfo* pLock = pFile->pLock;
-
- // If there is already a lock of this type or more restrictive, do nothing.
- if (pFile->locktype >= locktype)
- return SQLITE_OK;
-
- // Make sure we never move from unlocked to anything higher than shared lock.
- ASSERT(pFile->locktype != SQLITE_LOCK_NONE || locktype == SQLITE_LOCK_SHARED);
-
- // Make sure we never request a pending lock.
- ASSERT(locktype != SQLITE_LOCK_PENDING);
-
- // Make sure a shared lock is always held when a RESERVED lock is requested.
- ASSERT(locktype != SQLITE_LOCK_RESERVED || pFile->locktype == SQLITE_LOCK_SHARED);
-
- // If some thread using this PID has a lock via a different ChromiumFile
- // handle that precludes the requested lock, return BUSY.
- if (pFile->locktype != pLock->locktype &&
- (pLock->locktype >= SQLITE_LOCK_PENDING || locktype > SQLITE_LOCK_SHARED))
- return SQLITE_BUSY;
-
- // If a SHARED lock is requested, and some thread using this PID already
- // has a SHARED or RESERVED lock, then just increment reference counts.
- if (locktype == SQLITE_LOCK_SHARED &&
- (pLock->locktype == SQLITE_LOCK_SHARED || pLock->locktype == SQLITE_LOCK_RESERVED)) {
- ASSERT(!pFile->locktype);
- ASSERT(pLock->cnt > 0);
- pFile->locktype = SQLITE_LOCK_SHARED;
- pLock->cnt++;
- pFile->pOpen->nLock++;
- return SQLITE_OK;
- }
-
- // A PENDING lock is needed before acquiring a SHARED lock and before
- // acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will
- // be released.
- lock.l_len = 1;
- lock.l_whence = SEEK_SET;
- if (locktype == SQLITE_LOCK_SHARED ||
- (locktype == SQLITE_LOCK_EXCLUSIVE && pFile->locktype < SQLITE_LOCK_PENDING)) {
- lock.l_type = (locktype == SQLITE_LOCK_SHARED ? F_RDLCK : F_WRLCK);
- lock.l_start = SQLitePendingByte;
- s = fcntl(pFile->h, F_SETLK, &lock);
- if (s == -1) {
- tErrno = errno;
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- return rc;
- }
- }
-
- if (locktype == SQLITE_LOCK_SHARED) {
- ASSERT(!pLock->cnt);
- ASSERT(!pLock->locktype);
-
- s = rangeLock(pFile, F_RDLCK, &tErrno);
-
- // Drop the temporary PENDING lock.
- lock.l_start = SQLitePendingByte;
- lock.l_len = 1;
- lock.l_type = F_UNLCK;
- if (fcntl(pFile->h, F_SETLK, &lock)) {
- if (s != -1) {
- tErrno = errno;
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- return rc;
- }
- }
- if (s == -1) {
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- } else {
- pFile->locktype = SQLITE_LOCK_SHARED;
- pFile->pOpen->nLock++;
- pLock->cnt = 1;
- }
- } else if (locktype == SQLITE_LOCK_EXCLUSIVE && pLock->cnt > 1) {
- // We are trying for an exclusive lock but another thread in the
- // same process is still holding a shared lock.
- rc = SQLITE_BUSY;
- } else {
- // The request was for a RESERVED or EXCLUSIVE lock. It is
- // assumed that there is a SHARED or greater lock on the file
- // already.
- ASSERT(pFile->locktype);
- lock.l_type = F_WRLCK;
- switch (locktype) {
- case SQLITE_LOCK_RESERVED:
- lock.l_start = SQLiteReservedByte;
- s = fcntl(pFile->h, F_SETLK, &lock);
- tErrno = errno;
- break;
- case SQLITE_LOCK_EXCLUSIVE:
- s = rangeLock(pFile, F_WRLCK, &tErrno);
- break;
- default:
- ASSERT_NOT_REACHED();
- }
- if (s == -1) {
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- }
- }
-
- if (rc == SQLITE_OK) {
- pFile->locktype = locktype;
- pLock->locktype = locktype;
- } else if (locktype == SQLITE_LOCK_EXCLUSIVE) {
- pFile->locktype = SQLITE_LOCK_PENDING;
- pLock->locktype = SQLITE_LOCK_PENDING;
- }
-
- return rc;
-}
-
-// Closes all file descriptors for given ChromiumFile for which the close has been deferred.
-// Returns a SQLite error code.
-static int closePendingFds(ChromiumFile* pFile)
-{
- int rc = SQLITE_OK;
- ChromiumOpenInfo* pOpen = pFile->pOpen;
- ChromiumUnusedFd* pError = 0;
- ChromiumUnusedFd* pNext;
- for (ChromiumUnusedFd* p = pOpen->pUnused; p; p = pNext) {
- pNext = p->pNext;
- if (close(p->fd)) {
- pFile->lastErrno = errno;
- rc = SQLITE_IOERR_CLOSE;
- p->pNext = pError;
- pError = p;
- } else
- sqlite3_free(p);
- }
- pOpen->pUnused = pError;
- return rc;
-}
-
-// Lowers the locking level on file descriptor.
-// locktype must be either SQLITE_LOCK_NONE or SQLITE_LOCK_SHARED.
-static int chromiumUnlock(sqlite3_file* id, int locktype)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
- ASSERT(locktype <= SQLITE_LOCK_SHARED);
-
- if (pFile->locktype <= locktype)
- return SQLITE_OK;
-
- ChromiumLockInfo* pLock = pFile->pLock;
- ASSERT(pLock->cnt);
-
- struct flock lock;
- int rc = SQLITE_OK;
- int h = pFile->h;
- int tErrno;
-
- if (pFile->locktype > SQLITE_LOCK_SHARED) {
- ASSERT(pLock->locktype == pFile->locktype);
-
- if (locktype == SQLITE_LOCK_SHARED && rangeLock(pFile, F_RDLCK, &tErrno) == -1) {
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- if (rc == SQLITE_OK)
- pFile->locktype = locktype;
- return rc;
- }
- lock.l_type = F_UNLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = SQLitePendingByte;
- lock.l_len = 2;
- if (fcntl(h, F_SETLK, &lock) != -1)
- pLock->locktype = SQLITE_LOCK_SHARED;
- else {
- tErrno = errno;
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- if (rc == SQLITE_OK)
- pFile->locktype = locktype;
- return rc;
- }
- }
- if (locktype == SQLITE_LOCK_NONE) {
- struct ChromiumOpenInfo *pOpen;
-
- pLock->cnt--;
-
- // Release the lock using an OS call only when all threads in this same process have released the lock.
- if (!pLock->cnt) {
- lock.l_type = F_UNLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = lock.l_len = 0L;
- if (fcntl(h, F_SETLK, &lock) != -1)
- pLock->locktype = SQLITE_LOCK_NONE;
- else {
- tErrno = errno;
- rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
- if ((rc != SQLITE_OK) && (rc != SQLITE_BUSY))
- pFile->lastErrno = tErrno;
- pLock->locktype = SQLITE_LOCK_NONE;
- pFile->locktype = SQLITE_LOCK_NONE;
- }
- }
-
- pOpen = pFile->pOpen;
- pOpen->nLock--;
- ASSERT(pOpen->nLock >= 0);
- if (!pOpen->nLock) {
- int rc2 = closePendingFds(pFile);
- if (rc == SQLITE_OK)
- rc = rc2;
- }
- }
-
- if (rc == SQLITE_OK)
- pFile->locktype = locktype;
- return rc;
+// Defined in Chromium's codebase in third_party/sqlite/src/os_unix.c
+extern "C" {
+void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file);
+int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock);
+int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, const char* fileName, int flags, int* fd);
+void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, int fd, int flags);
+void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file);
}
-// Closes all file handles for given ChromiumFile and sets all its fields to 0.
-// Returns a SQLite error code.
-static int chromiumCloseNoLock(sqlite3_file* id)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- if (!pFile)
- return SQLITE_OK;
- if (pFile->dirfd >= 0) {
- if (close(pFile->dirfd)) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_DIR_CLOSE;
- }
- pFile->dirfd = -1;
- }
- if (pFile->h >= 0 && close(pFile->h)) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_CLOSE;
- }
- sqlite3_free(pFile->pUnused);
- memset(pFile, 0, sizeof(ChromiumFile));
- return SQLITE_OK;
-}
-
-// Closes a ChromiumFile, including locking operations. Returns a SQLite error code.
-static int chromiumClose(sqlite3_file* id)
-{
- if (!id)
- return SQLITE_OK;
-
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- chromiumUnlock(id, SQLITE_LOCK_NONE);
- if (pFile->pOpen && pFile->pOpen->nLock) {
- // If there are outstanding locks, do not actually close the file just
- // yet because that would clear those locks.
- ChromiumOpenInfo* pOpen = pFile->pOpen;
- ChromiumUnusedFd* p = pFile->pUnused;
- p->pNext = pOpen->pUnused;
- pOpen->pUnused = p;
- pFile->h = -1;
- pFile->pUnused = 0;
- }
- releaseLockInfo(pFile->pLock);
- releaseOpenInfo(pFile->pOpen);
- return chromiumCloseNoLock(id);
-}
-
-static int chromiumCheckReservedLockNoop(sqlite3_file*, int* pResOut)
-{
- *pResOut = 0;
- return SQLITE_OK;
-}
-
-static int chromiumLockNoop(sqlite3_file*, int)
-{
- return SQLITE_OK;
-}
-
-static int chromiumUnlockNoop(sqlite3_file*, int)
-{
- return SQLITE_OK;
-}
-
-// Seeks to the requested offset and reads up to |cnt| bytes into |pBuf|. Returns number of bytes actually read.
-static int seekAndRead(ChromiumFile* id, sqlite3_int64 offset, void* pBuf, int cnt)
-{
- sqlite_int64 newOffset = lseek(id->h, offset, SEEK_SET);
- if (newOffset != offset) {
- id->lastErrno = (newOffset == -1) ? errno : 0;
- return -1;
- }
- int got = read(id->h, pBuf, cnt);
- if (got < 0)
- id->lastErrno = errno;
- return got;
-}
-
-// Reads data from file into a buffer. Returns a SQLite error code.
-static int chromiumRead(sqlite3_file* id, void* pBuf, int amt, sqlite3_int64 offset)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- // The bytes in the locking range should never be read.
- ASSERT(!pFile->pUnused || offset >= SQLitePendingByte + 512 || offset + amt <= SQLitePendingByte);
-
- int got = seekAndRead(pFile, offset, pBuf, amt);
- if (got == amt)
- return SQLITE_OK;
-
- if (got < 0)
- return SQLITE_IOERR_READ;
-
- // Unread parts of the buffer must be zero-filled.
- memset(&(reinterpret_cast<char*>(pBuf))[got], 0, amt - got);
- pFile->lastErrno = 0;
- return SQLITE_IOERR_SHORT_READ;
-}
-
-// Seeks to the requested offset and writes up to |cnt| bytes. Returns number of bytes actually written.
-static int seekAndWrite(ChromiumFile* id, sqlite_int64 offset, const void* pBuf, int cnt)
-{
- sqlite_int64 newOffset = lseek(id->h, offset, SEEK_SET);
- if (newOffset != offset) {
- id->lastErrno = (newOffset == -1) ? errno : 0;
- return -1;
- }
- int got = write(id->h, pBuf, cnt);
- if (got < 0)
- id->lastErrno = errno;
- return got;
-}
-
-// Writes data from buffer into a file. Returns a SQLite error code.
-static int chromiumWrite(sqlite3_file* id, const void* pBuf, int amt, sqlite3_int64 offset)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
- ASSERT(amt > 0);
-
- // The bytes in the locking range should never be written.
- ASSERT(!pFile->pUnused || offset >= SQLitePendingByte + 512 || offset + amt <= SQLitePendingByte);
-
- int wrote = 0;
- while (amt > 0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt)) > 0) {
- amt -= wrote;
- offset += wrote;
- pBuf = &(reinterpret_cast<const char*>(pBuf))[wrote];
- }
- if (amt > 0) {
- if (wrote < 0)
- return SQLITE_IOERR_WRITE;
- pFile->lastErrno = 0;
- return SQLITE_FULL;
- }
- return SQLITE_OK;
-}
-
-static bool syncWrapper(int fd, bool fullSync)
-{
-#if OS(DARWIN)
- bool success = false;
- if (fullSync)
- success = !fcntl(fd, F_FULLFSYNC, 0);
- if (!success)
- success = !fsync(fd);
- return success;
-#else
- return !fdatasync(fd);
-#endif
-}
-
-// Makes sure all writes to a particular file are committed to disk. Returns a SQLite error code.
-static int chromiumSync(sqlite3_file* id, int flags)
-{
- ASSERT((flags & 0x0F) == SQLITE_SYNC_NORMAL || (flags & 0x0F) == SQLITE_SYNC_FULL);
-
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- bool isFullSync = ((flags & 0x0F) == SQLITE_SYNC_FULL);
-
- if (!syncWrapper(pFile->h, isFullSync)) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_FSYNC;
- }
-
- if (pFile->dirfd >= 0) {
-#if !OS(DARWIN)
- if (!isFullSync) {
- // Ignore directory sync failures, see http://www.sqlite.org/cvstrac/tktview?tn=1657.
- syncWrapper(pFile->dirfd, false);
- }
-#endif
- if (!close(pFile->dirfd))
- pFile->dirfd = -1;
- else {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_DIR_CLOSE;
- }
- }
-
- return SQLITE_OK;
-}
-
-// Truncates an open file to the specified size. Returns a SQLite error code.
-static int chromiumTruncate(sqlite3_file* id, sqlite_int64 nByte)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- if (ftruncate(pFile->h, nByte)) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_TRUNCATE;
- }
-
- return SQLITE_OK;
-}
-
-// Determines the size of a file in bytes. Returns a SQLite error code.
-static int chromiumFileSize(sqlite3_file* id, sqlite_int64* pSize)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- struct stat buf;
- if (fstat(pFile->h, &buf)) {
- pFile->lastErrno = errno;
- return SQLITE_IOERR_FSTAT;
- }
- *pSize = buf.st_size;
-
- // When opening a zero-size database, findLockInfo writes a single byte into that file
- // in order to work around a bug in the OS X msdos filesystem. In order to avoid problems
- // with upper layers, we need to report this file size as zero even though it is really 1.
- // See http://www.sqlite.org/cvstrac/tktview?tn=3260.
- if (*pSize == 1)
- *pSize = 0;
-
- return SQLITE_OK;
-}
-
-static int chromiumFileControl(sqlite3_file* id, int op, void* pArg)
-{
- ChromiumFile* pFile = reinterpret_cast<ChromiumFile*>(id);
- ASSERT(pFile);
-
- switch (op) {
- case SQLITE_FCNTL_LOCKSTATE:
- *reinterpret_cast<int*>(pArg) = pFile->locktype;
- return SQLITE_OK;
- case SQLITE_LAST_ERRNO:
- *reinterpret_cast<int*>(pArg) = pFile->lastErrno;
- return SQLITE_OK;
- }
- return SQLITE_ERROR;
-}
-
-// Same as SQLITE_DEFAULT_SECTOR_SIZE from sqlite's os.h.
-static const int SQLiteDefaultSectorSize = 512;
-
-static int chromiumSectorSize(sqlite3_file*)
-{
- return SQLiteDefaultSectorSize;
-}
-
-static int chromiumDeviceCharacteristics(sqlite3_file*)
-{
- return 0;
-}
-
-static const sqlite3_io_methods posixIoMethods = {
- 1,
- chromiumClose,
- chromiumRead,
- chromiumWrite,
- chromiumTruncate,
- chromiumSync,
- chromiumFileSize,
- chromiumLock,
- chromiumUnlock,
- chromiumCheckReservedLock,
- chromiumFileControl,
- chromiumSectorSize,
- chromiumDeviceCharacteristics
-};
-
-static const sqlite3_io_methods nolockIoMethods = {
- 1,
- chromiumCloseNoLock,
- chromiumRead,
- chromiumWrite,
- chromiumTruncate,
- chromiumSync,
- chromiumFileSize,
- chromiumLockNoop,
- chromiumUnlockNoop,
- chromiumCheckReservedLockNoop,
- chromiumFileControl,
- chromiumSectorSize,
- chromiumDeviceCharacteristics
-};
-
-// Initializes a ChromiumFile. Returns a SQLite error code.
-static int fillInChromiumFile(sqlite3_vfs* pVfs, int h, int dirfd, sqlite3_file* pId, const char* zFilename, int noLock)
-{
- ChromiumFile* pNew = reinterpret_cast<ChromiumFile*>(pId);
-
- ASSERT(!pNew->pLock);
- ASSERT(!pNew->pOpen);
-
- pNew->h = h;
- pNew->dirfd = dirfd;
-
- int rc = SQLITE_OK;
- const sqlite3_io_methods* pLockingStyle;
- if (noLock)
- pLockingStyle = &nolockIoMethods;
- else {
- pLockingStyle = &posixIoMethods;
- rc = findLockInfo(pNew, &pNew->pLock, &pNew->pOpen);
- if (rc != SQLITE_OK) {
- // If an error occured in findLockInfo(), close the file descriptor
- // immediately. This can happen in two scenarios:
- //
- // (a) A call to fstat() failed.
- // (b) A malloc failed.
- //
- // Scenario (b) may only occur if the process is holding no other
- // file descriptors open on the same file. If there were other file
- // descriptors on this file, then no malloc would be required by
- // findLockInfo(). If this is the case, it is quite safe to close
- // handle h - as it is guaranteed that no posix locks will be released
- // by doing so.
- //
- // If scenario (a) caused the error then things are not so safe. The
- // implicit assumption here is that if fstat() fails, things are in
- // such bad shape that dropping a lock or two doesn't matter much.
- close(h);
- h = -1;
- }
- }
-
- pNew->lastErrno = 0;
- if (rc != SQLITE_OK) {
- if (dirfd >= 0)
- close(dirfd);
- if (h >= 0)
- close(h);
- } else
- pNew->pMethod = pLockingStyle;
- return rc;
-}
-
-// Searches for an unused file descriptor that was opened on the database
-// file identified by zPath with matching flags. Returns 0 if not found.
-static ChromiumUnusedFd* findReusableFd(const char* zPath, int flags)
-{
- ChromiumUnusedFd* pUnused = 0;
-
- struct stat sStat;
- if (!stat(zPath, &sStat)) {
- ChromiumFileId id;
- id.dev = sStat.st_dev;
- id.ino = sStat.st_ino;
-
- ChromiumOpenInfo* pO = 0;
- for (pO = openList; pO && memcmp(&id, &pO->fileId, sizeof(id)); pO = pO->pNext) { }
- if (pO) {
- ChromiumUnusedFd** pp;
- for (pp = &pO->pUnused; *pp && (*pp)->flags != flags; pp = &((*pp)->pNext)) { }
- pUnused = *pp;
- if (pUnused)
- *pp = pUnused->pNext;
- }
- }
- return pUnused;
-}
+// Chromium's Posix implementation of SQLite VFS
+namespace {
// Opens a file.
//
@@ -974,26 +59,14 @@ static ChromiumUnusedFd* findReusableFd(const char* zPath, int flags)
// id - the structure that will manipulate the newly opened file.
// desiredFlags - the desired open mode flags.
// usedFlags - the actual open mode flags that were used.
-static int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
- sqlite3_file* id, int desiredFlags, int* usedFlags)
+int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
+ sqlite3_file* id, int desiredFlags, int* usedFlags)
{
- // The mask 0x00007F00 gives us the 7 bits that determine the type of the file SQLite is trying to open.
- int fileType = desiredFlags & 0x00007F00;
-
- memset(id, 0, sizeof(ChromiumFile));
- ChromiumFile* chromiumFile = reinterpret_cast<ChromiumFile*>(id);
+ chromium_sqlite3_initialize_unix_sqlite3_file(id);
int fd = -1;
- if (fileType == SQLITE_OPEN_MAIN_DB) {
- ChromiumUnusedFd* unusedFd = findReusableFd(fileName, desiredFlags);
- if (unusedFd)
- fd = unusedFd->fd;
- else {
- unusedFd = static_cast<ChromiumUnusedFd*>(sqlite3_malloc(sizeof(*unusedFd)));
- if (!unusedFd)
- return SQLITE_NOMEM;
- }
- chromiumFile->pUnused = unusedFd;
- }
+ int result = chromium_sqlite3_get_reusable_file_handle(id, fileName, desiredFlags, &fd);
+ if (result != SQLITE_OK)
+ return result;
if (fd < 0) {
fd = PlatformBridge::databaseOpenFile(fileName, desiredFlags);
@@ -1003,24 +76,23 @@ static int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
}
}
if (fd < 0) {
- sqlite3_free(chromiumFile->pUnused);
+ chromium_sqlite3_destroy_reusable_file_handle(id);
return SQLITE_CANTOPEN;
}
if (usedFlags)
*usedFlags = desiredFlags;
- if (chromiumFile->pUnused) {
- chromiumFile->pUnused->fd = fd;
- chromiumFile->pUnused->flags = desiredFlags;
- }
+ chromium_sqlite3_update_reusable_file_handle(id, fd, desiredFlags);
fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
+ // The mask 0x00007F00 gives us the 7 bits that determine the type of the file SQLite is trying to open.
+ int fileType = desiredFlags & 0x00007F00;
int noLock = (fileType != SQLITE_OPEN_MAIN_DB);
- int rc = fillInChromiumFile(vfs, fd, -1, id, fileName, noLock);
- if (rc != SQLITE_OK)
- sqlite3_free(chromiumFile->pUnused);
- return rc;
+ result = chromium_sqlite3_fill_in_unix_sqlite3_file(vfs, fd, -1, id, fileName, noLock);
+ if (result != SQLITE_OK)
+ chromium_sqlite3_destroy_reusable_file_handle(id);
+ return result;
}
// Deletes the given file.
@@ -1029,7 +101,7 @@ static int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
// fileName - the name of the file.
// syncDir - determines if the directory to which this file belongs
// should be synched after the file is deleted.
-static int chromiumDelete(sqlite3_vfs*, const char* fileName, int syncDir)
+int chromiumDelete(sqlite3_vfs*, const char* fileName, int syncDir)
{
return PlatformBridge::databaseDeleteFile(fileName, syncDir);
}
@@ -1040,7 +112,7 @@ static int chromiumDelete(sqlite3_vfs*, const char* fileName, int syncDir)
// fileName - the name of the file.
// flag - the type of test to make on this file.
// res - the result.
-static int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res)
+int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res)
{
int attr = static_cast<int>(PlatformBridge::databaseGetFileAttributes(fileName));
if (attr < 0) {
@@ -1050,7 +122,7 @@ static int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res
switch (flag) {
case SQLITE_ACCESS_EXISTS:
- *res = 1; // if the file doesn't exist, attr < 0
+ *res = 1; // if the file doesn't exist, attr < 0
break;
case SQLITE_ACCESS_READWRITE:
*res = (attr & W_OK) && (attr & R_OK);
@@ -1071,8 +143,8 @@ static int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res
// relativePath - the relative path.
// bufSize - the size of the output buffer in bytes.
// absolutePath - the output buffer where the absolute path will be stored.
-static int chromiumFullPathname(sqlite3_vfs* vfs, const char* relativePath,
- int, char* absolutePath)
+int chromiumFullPathname(sqlite3_vfs* vfs, const char* relativePath,
+ int, char* absolutePath)
{
// The renderer process doesn't need to know the absolute path of the file
sqlite3_snprintf(vfs->mxPathname, absolutePath, "%s", relativePath);
@@ -1080,107 +152,44 @@ static int chromiumFullPathname(sqlite3_vfs* vfs, const char* relativePath,
}
#ifndef SQLITE_OMIT_LOAD_EXTENSION
-// We disallow loading DSOs inside the renderer process, so the following procedures are no-op.
-static void* chromiumDlOpen(sqlite3_vfs*, const char*)
-{
- return 0;
-}
-
-static void chromiumDlError(sqlite3_vfs*, int, char*)
-{
-}
-
-static void (*chromiumDlSym(sqlite3_vfs*, void*, const char*))()
+// Returns NULL, thus disallowing loading libraries in the renderer process.
+//
+// vfs - pointer to the sqlite3_vfs object.
+// fileName - the name of the shared library file.
+void* chromiumDlOpen(sqlite3_vfs*, const char*)
{
return 0;
}
-
-static void chromiumDlClose(sqlite3_vfs*, void*)
-{
-}
#else
#define chromiumDlOpen 0
-#define chromiumDlError 0
-#define chromiumDlSym 0
-#define chromiumDlClose 0
#endif // SQLITE_OMIT_LOAD_EXTENSION
-// Generates a seed for SQLite's PRNG.
-static int chromiumRandomness(sqlite3_vfs*, int nBuf, char *zBuf)
-{
- ASSERT(static_cast<size_t>(nBuf) >= (sizeof(time_t) + sizeof(int)));
-
- memset(zBuf, 0, nBuf);
- int fd = open("/dev/urandom", O_RDONLY);
- if (fd < 0) {
- time_t t;
- time(&t);
- memcpy(zBuf, &t, sizeof(t));
- int pid = getpid();
- memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
- return sizeof(t) + sizeof(pid);
- }
- nBuf = read(fd, zBuf, nBuf);
- close(fd);
- return nBuf;
-}
-
-// Sleeps for at least |microseconds|, and returns the actual
-// amount of time spent sleeping (in microseconds).
-static int chromiumSleep(sqlite3_vfs*, int microseconds)
-{
-#if OS(DARWIN)
- usleep(microseconds);
- return microseconds;
-#else
- // Round to the nearest second.
- int seconds = (microseconds + 999999) / 1000000;
- sleep(seconds);
- return seconds * 1000000;
-#endif
-}
-
-// Retrieves the current system time (UTC).
-static int chromiumCurrentTime(sqlite3_vfs*, double* now)
-{
- struct timeval timeval;
- gettimeofday(&timeval, 0);
- *now = 2440587.5 + timeval.tv_sec / 86400.0 + timeval.tv_usec / 86400000000.0;
- return 0;
-}
-
-// This is not yet implemented in SQLite core.
-static int chromiumGetLastError(sqlite3_vfs*, int, char*)
-{
- return 0;
-}
-
-// Same as MAX_PATHNAME from sqlite's os_unix.c.
-static const int chromiumMaxPathname = 512;
+} // namespace
namespace WebCore {
void SQLiteFileSystem::registerSQLiteVFS()
{
+ sqlite3_vfs* unix_vfs = sqlite3_vfs_find("unix");
static sqlite3_vfs chromium_vfs = {
1,
- sizeof(ChromiumFile),
- chromiumMaxPathname,
+ unix_vfs->szOsFile,
+ unix_vfs->mxPathname,
0,
"chromium_vfs",
- 0,
+ unix_vfs->pAppData,
chromiumOpen,
chromiumDelete,
chromiumAccess,
chromiumFullPathname,
chromiumDlOpen,
- chromiumDlError,
- chromiumDlSym,
- chromiumDlClose,
- chromiumRandomness,
- chromiumSleep,
- chromiumCurrentTime,
- chromiumGetLastError
+ unix_vfs->xDlError,
+ unix_vfs->xDlSym,
+ unix_vfs->xDlClose,
+ unix_vfs->xRandomness,
+ unix_vfs->xSleep,
+ unix_vfs->xCurrentTime,
+ unix_vfs->xGetLastError
};
sqlite3_vfs_register(&chromium_vfs, 0);
}
diff --git a/Source/WebCore/platform/text/Base64.cpp b/Source/WebCore/platform/text/Base64.cpp
index 98b537a..bf706f6 100644
--- a/Source/WebCore/platform/text/Base64.cpp
+++ b/Source/WebCore/platform/text/Base64.cpp
@@ -60,9 +60,11 @@ static const char base64DecMap[128] = {
0x31, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00
};
-void base64Encode(const Vector<char>& in, Vector<char>& out, bool insertLFs)
+String base64Encode(const char* data, unsigned length, bool insertLFs)
{
- base64Encode(in.data(), in.size(), out, insertLFs);
+ Vector<char> result;
+ base64Encode(data, length, result, insertLFs);
+ return String(result.data(), result.size());
}
void base64Encode(const char* data, unsigned len, Vector<char>& out, bool insertLFs)
diff --git a/Source/WebCore/platform/text/Base64.h b/Source/WebCore/platform/text/Base64.h
index 211bd3c..70855de 100644
--- a/Source/WebCore/platform/text/Base64.h
+++ b/Source/WebCore/platform/text/Base64.h
@@ -27,20 +27,45 @@
#ifndef Base64_h
#define Base64_h
-#include <wtf/Forward.h>
#include <wtf/Vector.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
enum Base64DecodePolicy { FailOnInvalidCharacter, IgnoreWhitespace, IgnoreInvalidCharacters };
-void base64Encode(const Vector<char>&, Vector<char>&, bool insertLFs = false);
void base64Encode(const char*, unsigned, Vector<char>&, bool insertLFs = false);
+void base64Encode(const Vector<char>&, Vector<char>&, bool insertLFs = false);
+void base64Encode(const CString&, Vector<char>&, bool insertLFs = false);
+String base64Encode(const char*, unsigned, bool insertLFs = false);
+String base64Encode(const Vector<char>&, bool insertLFs = false);
+String base64Encode(const CString&, bool insertLFs = false);
bool base64Decode(const String&, Vector<char>&, Base64DecodePolicy = FailOnInvalidCharacter);
bool base64Decode(const Vector<char>&, Vector<char>&, Base64DecodePolicy = FailOnInvalidCharacter);
bool base64Decode(const char*, unsigned, Vector<char>&, Base64DecodePolicy = FailOnInvalidCharacter);
+inline void base64Encode(const Vector<char>& in, Vector<char>& out, bool insertLFs)
+{
+ base64Encode(in.data(), in.size(), out, insertLFs);
}
+inline void base64Encode(const CString& in, Vector<char>& out, bool insertLFs)
+{
+ base64Encode(in.data(), in.length(), out, insertLFs);
+}
+
+inline String base64Encode(const Vector<char>& in, bool insertLFs)
+{
+ return base64Encode(in.data(), in.size(), insertLFs);
+}
+
+inline String base64Encode(const CString& in, bool insertLFs)
+{
+ return base64Encode(in.data(), in.length(), insertLFs);
+}
+
+} // namespace WebCore
+
#endif // Base64_h
diff --git a/Source/WebCore/platform/text/BidiResolver.h b/Source/WebCore/platform/text/BidiResolver.h
index 8abd698..72d163c 100644
--- a/Source/WebCore/platform/text/BidiResolver.h
+++ b/Source/WebCore/platform/text/BidiResolver.h
@@ -161,7 +161,7 @@ public :
MidpointState<Iterator>& midpointState() { return m_midpointState; }
void embed(WTF::Unicode::Direction);
- void commitExplicitEmbedding();
+ bool commitExplicitEmbedding();
void createBidiRunsForLine(const Iterator& end, bool visualOrder = false, bool hardLineBreak = false);
@@ -400,7 +400,7 @@ void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(WTF::Unicode::Dire
}
template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::commitExplicitEmbedding()
+bool BidiResolver<Iterator, Run>::commitExplicitEmbedding()
{
using namespace WTF::Unicode;
@@ -440,6 +440,8 @@ void BidiResolver<Iterator, Run>::commitExplicitEmbedding()
setContext(toContext);
m_currentExplicitEmbeddingSequence.clear();
+
+ return fromLevel != toLevel;
}
template <class Iterator, class Run>
@@ -881,8 +883,8 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
increment();
if (!m_currentExplicitEmbeddingSequence.isEmpty()) {
- commitExplicitEmbedding();
- if (pastEnd) {
+ bool committed = commitExplicitEmbedding();
+ if (committed && pastEnd) {
current = end;
m_status = stateAtEnd.m_status;
sor = stateAtEnd.sor;
diff --git a/Source/WebCore/platform/text/LocalizedNumber.h b/Source/WebCore/platform/text/LocalizedNumber.h
new file mode 100644
index 0000000..45873b8
--- /dev/null
+++ b/Source/WebCore/platform/text/LocalizedNumber.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LocalizedNumber_h
+#define LocalizedNumber_h
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+// Parses a string representation of a floating point number localized
+// for the browser's current locale. If the input string is not valid
+// or an implementation doesn't support localized numbers, this
+// function returns NaN. This function doesn't need to support
+// scientific notation, NaN, +Infinity and -Infinity, and doesn't need
+// to support the standard representations of ECMAScript and HTML5.
+double parseLocalizedNumber(const String&);
+
+// Serializes the specified floating point number for the browser's
+// current locale. If an implementation doesn't support localized
+// numbers or the input value is NaN or Infinitiy, the function should
+// return an empty string.
+String formatLocalizedNumber(double);
+
+// Returns true if the input character can be used to represent a
+// number in the browser locale. For example, this should return true for 0-9 .
+// , + - for en-US locale.
+bool isLocalizedNumberCharacter(UChar32);
+
+} // namespace WebCore
+
+#endif // LocalizedNumber_h
diff --git a/Source/WebCore/platform/graphics/chromium/IconChromiumMac.cpp b/Source/WebCore/platform/text/LocalizedNumberNone.cpp
index a24afb2..6f017e9 100644
--- a/Source/WebCore/platform/graphics/chromium/IconChromiumMac.cpp
+++ b/Source/WebCore/platform/text/LocalizedNumberNone.cpp
@@ -1,10 +1,10 @@
/*
- * Copyright (c) 2008, Google Inc. All rights reserved.
- *
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -29,22 +29,27 @@
*/
#include "config.h"
-#include "Icon.h"
+#include "LocalizedNumber.h"
-#include "PassRefPtr.h"
+#include <limits>
+
+using namespace std;
-// FIXME: These are temporary stubs, we need real implementations which
-// may come in the form of IconChromium.cpp. The Windows Chromium
-// implementation is currently in IconWin.cpp.
-
namespace WebCore {
-Icon::~Icon()
+double parseLocalizedNumber(const String&)
{
+ return numeric_limits<double>::quiet_NaN();
}
-void Icon::paint(GraphicsContext*, const IntRect&)
+String formatLocalizedNumber(double)
{
+ return String();
}
+bool isLocalizedNumberCharacter(UChar32)
+{
+ return false;
}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/text/RegularExpression.cpp b/Source/WebCore/platform/text/RegularExpression.cpp
index 9b063c9..e020b91 100644
--- a/Source/WebCore/platform/text/RegularExpression.cpp
+++ b/Source/WebCore/platform/text/RegularExpression.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2004, 2008, 2009 Apple Inc. All rights reserved.
* Copyright (C) 2008 Collabora Ltd.
+ * Copyright (C) 2011 Peter Varga (pvarga@webkit.org), University of Szeged
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -27,52 +28,48 @@
#include "config.h"
#include "RegularExpression.h"
+#include <wtf/BumpPointerAllocator.h>
+#include <yarr/Yarr.h>
#include "Logging.h"
-#include <pcre/pcre.h>
namespace WebCore {
class RegularExpression::Private : public RefCounted<RegularExpression::Private> {
public:
- static PassRefPtr<Private> create(const String& pattern, TextCaseSensitivity);
- ~Private();
+ static PassRefPtr<Private> create(const String& pattern, TextCaseSensitivity caseSensitivity)
+ {
+ return adoptRef(new Private(pattern, caseSensitivity));
+ }
- JSRegExp* regexp() const { return m_regexp; }
- int lastMatchLength;
+ int lastMatchLength;
-private:
- Private(const String& pattern, TextCaseSensitivity);
- static JSRegExp* compile(const String& pattern, TextCaseSensitivity);
+ unsigned m_numSubpatterns;
+ OwnPtr<JSC::Yarr::BytecodePattern> m_regExpByteCode;
- JSRegExp* m_regexp;
-};
+private:
+ Private(const String& pattern, TextCaseSensitivity caseSensitivity)
+ : lastMatchLength(-1)
+ , m_regExpByteCode(compile(pattern, caseSensitivity))
+ , m_constructionError(0)
+ {
+ }
-inline JSRegExp* RegularExpression::Private::compile(const String& pattern, TextCaseSensitivity caseSensitivity)
-{
- const char* errorMessage;
- JSRegExp* regexp = jsRegExpCompile(pattern.characters(), pattern.length(),
- caseSensitivity == TextCaseSensitive ? JSRegExpDoNotIgnoreCase : JSRegExpIgnoreCase, JSRegExpSingleLine,
- 0, &errorMessage);
- if (!regexp)
- LOG_ERROR("RegularExpression: pcre_compile failed with '%s'", errorMessage);
- return regexp;
-}
+ PassOwnPtr<JSC::Yarr::BytecodePattern> compile(const String& patternString, TextCaseSensitivity caseSensitivity)
+ {
+ JSC::Yarr::YarrPattern pattern(JSC::UString(patternString.impl()), (caseSensitivity == TextCaseInsensitive), false, &m_constructionError);
+ if (m_constructionError) {
+ LOG_ERROR("RegularExpression: YARR compile failed with '%s'", m_constructionError);
+ return PassOwnPtr<JSC::Yarr::BytecodePattern>();
+ }
-inline RegularExpression::Private::Private(const String& pattern, TextCaseSensitivity caseSensitivity)
- : lastMatchLength(-1)
- , m_regexp(compile(pattern, caseSensitivity))
-{
-}
+ m_numSubpatterns = pattern.m_numSubpatterns;
-inline PassRefPtr<RegularExpression::Private> RegularExpression::Private::create(const String& pattern, TextCaseSensitivity caseSensitivity)
-{
- return adoptRef(new Private(pattern, caseSensitivity));
-}
+ return JSC::Yarr::byteCompile(pattern, &m_regexAllocator);
+ }
-RegularExpression::Private::~Private()
-{
- jsRegExpFree(m_regexp);
-}
+ BumpPointerAllocator m_regexAllocator;
+ const char* m_constructionError;
+};
RegularExpression::RegularExpression(const String& pattern, TextCaseSensitivity caseSensitivity)
: d(Private::create(pattern, caseSensitivity))
@@ -96,28 +93,36 @@ RegularExpression& RegularExpression::operator=(const RegularExpression& re)
int RegularExpression::match(const String& str, int startFrom, int* matchLength) const
{
- if (!d->regexp())
+ if (!d->m_regExpByteCode)
return -1;
if (str.isNull())
return -1;
- // First 2 offsets are start and end offsets; 3rd entry is used internally by pcre
- static const size_t maxOffsets = 3;
- int offsets[maxOffsets];
- int result = jsRegExpExecute(d->regexp(), str.characters(), str.length(), startFrom, offsets, maxOffsets);
+ int offsetVectorSize = (d->m_numSubpatterns + 1) * 2;
+ int* offsetVector;
+ Vector<int, 32> nonReturnedOvector;
+
+ nonReturnedOvector.resize(offsetVectorSize);
+ offsetVector = nonReturnedOvector.data();
+
+ ASSERT(offsetVector);
+ for (unsigned j = 0, i = 0; i < d->m_numSubpatterns + 1; j += 2, i++)
+ offsetVector[j] = -1;
+
+ int result = JSC::Yarr::interpret(d->m_regExpByteCode.get(), str.characters(), startFrom, str.length(), offsetVector);
+ ASSERT(result >= -1);
+
if (result < 0) {
- if (result != JSRegExpErrorNoMatch)
- LOG_ERROR("RegularExpression: pcre_exec() failed with result %d", result);
d->lastMatchLength = -1;
return -1;
}
- // 1 means 1 match; 0 means more than one match. First match is recorded in offsets.
- d->lastMatchLength = offsets[1] - offsets[0];
+ // 1 means 1 match; 0 means more than one match. First match is recorded in offsetVector.
+ d->lastMatchLength = offsetVector[1] - offsetVector[0];
if (matchLength)
*matchLength = d->lastMatchLength;
- return offsets[0];
+ return offsetVector[0];
}
int RegularExpression::searchRev(const String& str) const
diff --git a/Source/WebCore/platform/text/SegmentedString.cpp b/Source/WebCore/platform/text/SegmentedString.cpp
index 5e9755b..7c859dc 100644
--- a/Source/WebCore/platform/text/SegmentedString.cpp
+++ b/Source/WebCore/platform/text/SegmentedString.cpp
@@ -186,17 +186,6 @@ void SegmentedString::advanceSubstring()
}
}
-int SegmentedString::numberOfCharactersConsumedSlow() const
-{
- int result = m_numberOfCharactersConsumedPriorToCurrentString + m_currentString.numberOfCharactersConsumed();
- if (m_pushedChar1) {
- --result;
- if (m_pushedChar2)
- --result;
- }
- return result;
-}
-
String SegmentedString::toString() const
{
String result;
@@ -262,14 +251,14 @@ WTF::ZeroBasedNumber SegmentedString::currentLine() const
WTF::ZeroBasedNumber SegmentedString::currentColumn() const
{
- int zeroBasedColumn = numberOfCharactersConsumedSlow() - m_numberOfCharactersConsumedPriorToCurrentLine;
+ int zeroBasedColumn = numberOfCharactersConsumed() - m_numberOfCharactersConsumedPriorToCurrentLine;
return WTF::ZeroBasedNumber::fromZeroBasedInt(zeroBasedColumn);
}
void SegmentedString::setCurrentPosition(WTF::ZeroBasedNumber line, WTF::ZeroBasedNumber columnAftreProlog, int prologLength)
{
m_currentLine = line.zeroBasedInt();
- m_numberOfCharactersConsumedPriorToCurrentLine = numberOfCharactersConsumedSlow() + prologLength - columnAftreProlog.zeroBasedInt();
+ m_numberOfCharactersConsumedPriorToCurrentLine = numberOfCharactersConsumed() + prologLength - columnAftreProlog.zeroBasedInt();
}
}
diff --git a/Source/WebCore/platform/text/SegmentedString.h b/Source/WebCore/platform/text/SegmentedString.h
index 30c899d..3784b50 100644
--- a/Source/WebCore/platform/text/SegmentedString.h
+++ b/Source/WebCore/platform/text/SegmentedString.h
@@ -206,13 +206,15 @@ public:
int numberOfCharactersConsumed() const
{
- // We don't currently handle the case when there are pushed character.
- ASSERT(!m_pushedChar1);
- return m_numberOfCharactersConsumedPriorToCurrentString + m_currentString.numberOfCharactersConsumed();
+ int numberOfPushedCharacters = 0;
+ if (m_pushedChar1) {
+ ++numberOfPushedCharacters;
+ if (m_pushedChar2)
+ ++numberOfPushedCharacters;
+ }
+ return m_numberOfCharactersConsumedPriorToCurrentString + m_currentString.numberOfCharactersConsumed() - numberOfPushedCharacters;
}
- int numberOfCharactersConsumedSlow() const;
-
String toString() const;
const UChar& operator*() const { return *current(); }
diff --git a/Source/WebCore/platform/text/TextCodecICU.cpp b/Source/WebCore/platform/text/TextCodecICU.cpp
index 6a579f9..92a158a 100644
--- a/Source/WebCore/platform/text/TextCodecICU.cpp
+++ b/Source/WebCore/platform/text/TextCodecICU.cpp
@@ -27,7 +27,6 @@
#include "config.h"
#include "TextCodecICU.h"
-#include "CharacterNames.h"
#include "PlatformString.h"
#include "ThreadGlobalData.h"
#include <unicode/ucnv.h>
@@ -37,6 +36,7 @@
#include <wtf/PassOwnPtr.h>
#include <wtf/StringExtras.h>
#include <wtf/Threading.h>
+#include <wtf/unicode/CharacterNames.h>
using std::min;
diff --git a/Source/WebCore/platform/text/TextCodecUTF16.cpp b/Source/WebCore/platform/text/TextCodecUTF16.cpp
index e88e83b..4ceed23 100644
--- a/Source/WebCore/platform/text/TextCodecUTF16.cpp
+++ b/Source/WebCore/platform/text/TextCodecUTF16.cpp
@@ -71,6 +71,8 @@ String TextCodecUTF16::decode(const char* bytes, size_t length, bool, bool, bool
if (!length)
return String();
+ // FIXME: This should generate an error if there is an unpaired surrogate.
+
const unsigned char* p = reinterpret_cast<const unsigned char*>(bytes);
size_t numBytes = length + m_haveBufferedByte;
size_t numChars = numBytes / 2;
diff --git a/Source/WebCore/platform/text/TextCodecUTF8.cpp b/Source/WebCore/platform/text/TextCodecUTF8.cpp
new file mode 100644
index 0000000..8944d68
--- /dev/null
+++ b/Source/WebCore/platform/text/TextCodecUTF8.cpp
@@ -0,0 +1,276 @@
+/*
+ * Copyright (C) 2004, 2006, 2008, 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TextCodecUTF8.h"
+
+#include <wtf/text/CString.h>
+#include <wtf/text/StringBuffer.h>
+#include <wtf/unicode/UTF8.h>
+
+using namespace WTF::Unicode;
+using namespace std;
+
+namespace WebCore {
+
+// Assuming that a pointer is the size of a "machine word", then
+// uintptr_t is an integer type that is also a machine word.
+typedef uintptr_t MachineWord;
+
+// This constant has type uintptr_t since we will use it to align
+// pointers. Not because MachineWord is uintptr_t.
+const uintptr_t machineWordAlignmentMask = sizeof(MachineWord) - 1;
+
+template<size_t size> struct NonASCIIMask;
+template<> struct NonASCIIMask<4> {
+ static unsigned value() { return 0x80808080U; }
+};
+template<> struct NonASCIIMask<8> {
+ static unsigned long long value() { return 0x8080808080808080ULL; }
+};
+
+template<size_t size> struct UCharByteFiller;
+template<> struct UCharByteFiller<4> {
+ static void copy(UChar* destination, const uint8_t* source)
+ {
+ destination[0] = source[0];
+ destination[1] = source[1];
+ destination[2] = source[2];
+ destination[3] = source[3];
+ }
+};
+template<> struct UCharByteFiller<8> {
+ static void copy(UChar* destination, const uint8_t* source)
+ {
+ destination[0] = source[0];
+ destination[1] = source[1];
+ destination[2] = source[2];
+ destination[3] = source[3];
+ destination[4] = source[4];
+ destination[5] = source[5];
+ destination[6] = source[6];
+ destination[7] = source[7];
+ }
+};
+
+static inline bool isAlignedToMachineWord(const void* pointer)
+{
+ return !(reinterpret_cast<uintptr_t>(pointer) & machineWordAlignmentMask);
+}
+
+template<typename T> static inline T* alignToMachineWord(T* pointer)
+{
+ return reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(pointer) & ~machineWordAlignmentMask);
+}
+
+PassOwnPtr<TextCodec> TextCodecUTF8::create(const TextEncoding&, const void*)
+{
+ return adoptPtr(new TextCodecUTF8);
+}
+
+void TextCodecUTF8::registerEncodingNames(EncodingNameRegistrar registrar)
+{
+ registrar("UTF-8", "UTF-8");
+}
+
+void TextCodecUTF8::registerCodecs(TextCodecRegistrar registrar)
+{
+ registrar("UTF-8", create, 0);
+}
+
+static inline int nonASCIISequenceLength(unsigned char firstByte)
+{
+ ASSERT(!isASCII(firstByte));
+ switch (firstByte >> 4) {
+ case 0xF:
+ return 4;
+ case 0xE:
+ return 3;
+ }
+ return 2;
+}
+
+static inline int decodeNonASCIISequence(const unsigned char* sequence, unsigned length)
+{
+ ASSERT(!isASCII(sequence[0]));
+ if (length == 2) {
+ ASSERT(sequence[0] <= 0xDF);
+ if (sequence[0] < 0xC2)
+ return -1;
+ if (sequence[1] < 0x80 || sequence[1] > 0xBF)
+ return -1;
+ return ((sequence[0] << 6) + sequence[1]) - 0x00003080;
+ }
+ if (length == 3) {
+ ASSERT(sequence[0] >= 0xE0 && sequence[0] <= 0xEF);
+ switch (sequence[0]) {
+ case 0xE0:
+ if (sequence[1] < 0xA0 || sequence[1] > 0xBF)
+ return -1;
+ break;
+ case 0xED:
+ if (sequence[1] < 0x80 || sequence[1] > 0x9F)
+ return -1;
+ break;
+ default:
+ if (sequence[1] < 0x80 || sequence[1] > 0xBF)
+ return -1;
+ }
+ if (sequence[2] < 0x80 || sequence[2] > 0xBF)
+ return -1;
+ return ((sequence[0] << 12) + (sequence[1] << 6) + sequence[2]) - 0x000E2080;
+ }
+ ASSERT(length == 4);
+ ASSERT(sequence[0] >= 0xF0 && sequence[0] <= 0xF4);
+ switch (sequence[0]) {
+ case 0xF0:
+ if (sequence[1] < 0x90 || sequence[1] > 0xBF)
+ return -1;
+ break;
+ case 0xF4:
+ if (sequence[1] < 0x80 || sequence[1] > 0x8F)
+ return -1;
+ break;
+ default:
+ if (sequence[1] < 0x80 || sequence[1] > 0xBF)
+ return -1;
+ }
+ if (sequence[2] < 0x80 || sequence[2] > 0xBF)
+ return -1;
+ if (sequence[3] < 0x80 || sequence[3] > 0xBF)
+ return -1;
+ return ((sequence[0] << 18) + (sequence[1] << 12) + (sequence[2] << 6) + sequence[3]) - 0x03C82080;
+}
+
+String TextCodecUTF8::decode(const char* bytes, size_t length, bool flush, bool stopOnError, bool& sawError)
+{
+ StringBuffer buffer(length);
+
+ const uint8_t* source = reinterpret_cast<const uint8_t*>(bytes);
+ const uint8_t* end = source + length;
+ const uint8_t* alignedEnd = alignToMachineWord(end);
+ UChar* destination = buffer.characters();
+
+ int count;
+ int character;
+
+ if (m_partialSequenceSize) {
+ count = nonASCIISequenceLength(m_partialSequence[0]);
+ ASSERT(count > m_partialSequenceSize);
+ if (count - m_partialSequenceSize > end - source) {
+ memcpy(m_partialSequence + m_partialSequenceSize, source, end - source);
+ m_partialSequenceSize += end - source;
+ source = end;
+ } else {
+ uint8_t completeSequence[U8_MAX_LENGTH];
+ memcpy(completeSequence, m_partialSequence, m_partialSequenceSize);
+ memcpy(completeSequence + m_partialSequenceSize, source, count - m_partialSequenceSize);
+ source += count - m_partialSequenceSize;
+ m_partialSequenceSize = 0;
+ character = decodeNonASCIISequence(completeSequence, count);
+ goto decodedNonASCII;
+ }
+ }
+
+ while (source < end) {
+ if (isASCII(*source)) {
+ // Fast path for ASCII. Most UTF-8 text will be ASCII.
+ if (isAlignedToMachineWord(source)) {
+ while (source < alignedEnd) {
+ MachineWord chunk = *reinterpret_cast_ptr<const MachineWord*>(source);
+ if (chunk & NonASCIIMask<sizeof(MachineWord)>::value()) {
+ if (isASCII(*source))
+ break;
+ goto nonASCII;
+ }
+ UCharByteFiller<sizeof(MachineWord)>::copy(destination, source);
+ source += sizeof(MachineWord);
+ destination += sizeof(MachineWord);
+ }
+ if (source == end)
+ break;
+ }
+ *destination++ = *source++;
+ } else {
+nonASCII:
+ count = nonASCIISequenceLength(*source);
+ ASSERT(count >= 2);
+ ASSERT(count <= 4);
+ if (count > end - source) {
+ ASSERT(end - source <= static_cast<ptrdiff_t>(sizeof(m_partialSequence)));
+ ASSERT(!m_partialSequenceSize);
+ m_partialSequenceSize = end - source;
+ memcpy(m_partialSequence, source, m_partialSequenceSize);
+ break;
+ }
+ character = decodeNonASCIISequence(source, count);
+ source += count;
+decodedNonASCII:
+ if (character < 0) {
+ if (stopOnError) {
+ sawError = true;
+ break;
+ }
+ } else {
+ ASSERT(!U_IS_SURROGATE(character));
+ if (U_IS_BMP(character))
+ *destination++ = character;
+ else {
+ *destination++ = U16_LEAD(character);
+ *destination++ = U16_TRAIL(character);
+ }
+ }
+ }
+ }
+
+ buffer.shrink(destination - buffer.characters());
+
+ if (flush && m_partialSequenceSize)
+ sawError = true;
+
+ return String::adopt(buffer);
+}
+
+CString TextCodecUTF8::encode(const UChar* characters, size_t length, UnencodableHandling)
+{
+ // The maximum number of UTF-8 bytes needed per UTF-16 code unit is 3.
+ // BMP characters take only one UTF-16 code unit and can take up to 3 bytes (3x).
+ // Non-BMP characters take two UTF-16 code units and can take up to 4 bytes (2x).
+ if (length > numeric_limits<size_t>::max() / 3)
+ CRASH();
+ Vector<uint8_t> bytes(length * 3);
+
+ size_t i = 0;
+ size_t bytesWritten = 0;
+ while (i < length) {
+ UChar32 character;
+ U16_NEXT(characters, i, length, character);
+ U8_APPEND_UNSAFE(bytes.data(), bytesWritten, character);
+ }
+
+ return CString(reinterpret_cast<char*>(bytes.data()), bytesWritten);
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/platform/text/TextCodecUTF8.h b/Source/WebCore/platform/text/TextCodecUTF8.h
new file mode 100644
index 0000000..f3b6b7a
--- /dev/null
+++ b/Source/WebCore/platform/text/TextCodecUTF8.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TextCodecUTF8_h
+#define TextCodecUTF8_h
+
+#include "TextCodec.h"
+
+namespace WebCore {
+
+class TextCodecUTF8 : public TextCodec {
+public:
+ static void registerEncodingNames(EncodingNameRegistrar);
+ static void registerCodecs(TextCodecRegistrar);
+
+ virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool& sawError);
+ virtual CString encode(const UChar*, size_t length, UnencodableHandling);
+
+private:
+ static PassOwnPtr<TextCodec> create(const TextEncoding&, const void*);
+ TextCodecUTF8() : m_partialSequenceSize(0) { }
+
+ int m_partialSequenceSize;
+ char m_partialSequence[U8_MAX_LENGTH - 1];
+
+};
+
+} // namespace WebCore
+
+#endif // TextCodecUTF8_h
diff --git a/Source/WebCore/platform/text/TextEncodingRegistry.cpp b/Source/WebCore/platform/text/TextEncodingRegistry.cpp
index c0c0255..1dc09ee 100644
--- a/Source/WebCore/platform/text/TextEncodingRegistry.cpp
+++ b/Source/WebCore/platform/text/TextEncodingRegistry.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2007-2009 Torch Mobile, Inc.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,14 +27,12 @@
#include "config.h"
#include "TextEncodingRegistry.h"
-#include "PlatformString.h"
#include "TextCodecLatin1.h"
#include "TextCodecUserDefined.h"
#include "TextCodecUTF16.h"
+#include "TextCodecUTF8.h"
#include "TextEncoding.h"
#include <wtf/ASCIICType.h>
-#include <wtf/Assertions.h>
-#include <wtf/HashFunctions.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/StdLibExtras.h>
@@ -68,7 +66,6 @@ const size_t maxEncodingNameLength = 63;
// Hash for all-ASCII strings that does case folding.
struct TextEncodingNameHash {
-
static bool equal(const char* s1, const char* s2)
{
char c1;
@@ -129,9 +126,7 @@ static bool didExtendTextCodecMaps;
static HashSet<const char*>* japaneseEncodings;
static HashSet<const char*>* nonBackslashEncodings;
-static const char* const textEncodingNameBlacklist[] = {
- "UTF-7"
-};
+static const char* const textEncodingNameBlacklist[] = { "UTF-7" };
#if ERROR_DISABLED
@@ -268,7 +263,7 @@ static void buildQuirksSets()
ASSERT(!japaneseEncodings);
ASSERT(!nonBackslashEncodings);
- japaneseEncodings = new HashSet<const char*>();
+ japaneseEncodings = new HashSet<const char*>;
addEncodingName(japaneseEncodings, "EUC-JP");
addEncodingName(japaneseEncodings, "ISO-2022-JP");
addEncodingName(japaneseEncodings, "ISO-2022-JP-1");
@@ -284,7 +279,7 @@ static void buildQuirksSets()
addEncodingName(japaneseEncodings, "cp932");
addEncodingName(japaneseEncodings, "x-mac-japanese");
- nonBackslashEncodings = new HashSet<const char*>();
+ nonBackslashEncodings = new HashSet<const char*>;
// The text encodings below treat backslash as a currency symbol for IE compatibility.
// See http://blogs.msdn.com/michkap/archive/2005/09/17/469941.aspx for more information.
addEncodingName(nonBackslashEncodings, "x-mac-japanese");
diff --git a/Source/WebCore/platform/text/mac/TextCodecMac.cpp b/Source/WebCore/platform/text/mac/TextCodecMac.cpp
index b743f3d..64d0485 100644
--- a/Source/WebCore/platform/text/mac/TextCodecMac.cpp
+++ b/Source/WebCore/platform/text/mac/TextCodecMac.cpp
@@ -27,15 +27,15 @@
#include "config.h"
#include "TextCodecMac.h"
-#include "CharacterNames.h"
#include "CharsetData.h"
#include "PlatformString.h"
#include "ThreadGlobalData.h"
#include <wtf/Assertions.h>
-#include <wtf/text/CString.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/RetainPtr.h>
#include <wtf/Threading.h>
+#include <wtf/text/CString.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
diff --git a/Source/WebCore/platform/text/transcoder/FontTranscoder.cpp b/Source/WebCore/platform/text/transcoder/FontTranscoder.cpp
index 68601f9..4e07f50 100644
--- a/Source/WebCore/platform/text/transcoder/FontTranscoder.cpp
+++ b/Source/WebCore/platform/text/transcoder/FontTranscoder.cpp
@@ -31,9 +31,9 @@
#include "config.h"
#include "FontTranscoder.h"
-#include "CharacterNames.h"
#include "FontDescription.h"
#include "TextEncoding.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/platform/win/BString.cpp b/Source/WebCore/platform/win/BString.cpp
index 4d6d11e..6622f96 100644
--- a/Source/WebCore/platform/win/BString.cpp
+++ b/Source/WebCore/platform/win/BString.cpp
@@ -28,9 +28,8 @@
#include "KURL.h"
#include "PlatformString.h"
-#include <wtf/text/AtomicString.h>
-#include <tchar.h>
#include <windows.h>
+#include <wtf/text/AtomicString.h>
#if PLATFORM(CF)
#include <CoreFoundation/CoreFoundation.h>
@@ -102,7 +101,7 @@ BString::BString(CFStringRef cfstr)
const UniChar* uniChars = CFStringGetCharactersPtr(cfstr);
if (uniChars) {
- m_bstr = SysAllocStringLen((LPCTSTR)uniChars, CFStringGetLength(cfstr));
+ m_bstr = SysAllocStringLen((LPCWSTR)uniChars, CFStringGetLength(cfstr));
return;
}
@@ -158,7 +157,7 @@ bool operator ==(const BString& a, const BString& b)
return true;
if (!(BSTR)a || !(BSTR)b)
return false;
- return !_tcscmp((BSTR)a, (BSTR)b);
+ return !wcscmp((BSTR)a, (BSTR)b);
}
bool operator !=(const BString& a, const BString& b)
@@ -174,7 +173,7 @@ bool operator ==(const BString& a, BSTR b)
return true;
if (!(BSTR)a || !b)
return false;
- return !_tcscmp((BSTR)a, b);
+ return !wcscmp((BSTR)a, b);
}
bool operator !=(const BString& a, BSTR b)
@@ -190,7 +189,7 @@ bool operator ==(BSTR a, const BString& b)
return true;
if (!a || !(BSTR)b)
return false;
- return !_tcscmp(a, (BSTR)b);
+ return !wcscmp(a, (BSTR)b);
}
bool operator !=(BSTR a, const BString& b)
diff --git a/Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp b/Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp
index eb1e659..77b95ef 100644
--- a/Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp
+++ b/Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp
@@ -31,6 +31,7 @@
#include "PlatformString.h"
#include "TextEncoding.h"
#include "markup.h"
+#include <shlobj.h>
#include <shlwapi.h>
#include <wininet.h> // for INTERNET_MAX_URL_LENGTH
#include <wtf/StringExtras.h>
@@ -70,6 +71,15 @@ static bool urlFromPath(CFStringRef path, String& url)
}
#endif
+static bool getDataMapItem(const DragDataMap* dataObject, FORMATETC* format, String& item)
+{
+ DragDataMap::const_iterator found = dataObject->find(format->cfFormat);
+ if (found == dataObject->end())
+ return false;
+ item = found->second[0];
+ return true;
+}
+
static bool getWebLocData(IDataObject* dataObject, String& url, String* title)
{
bool succeeded = false;
@@ -111,6 +121,34 @@ exit:
return succeeded;
}
+static bool getWebLocData(const DragDataMap* dataObject, String& url, String* title)
+{
+#if PLATFORM(CF)
+ WCHAR filename[MAX_PATH];
+ WCHAR urlBuffer[INTERNET_MAX_URL_LENGTH];
+
+ if (!dataObject->contains(cfHDropFormat()->cfFormat))
+ return false;
+
+ wcscpy(filename, dataObject->get(cfHDropFormat()->cfFormat)[0].characters());
+ if (_wcsicmp(PathFindExtensionW(filename), L".url"))
+ return false;
+
+ if (!GetPrivateProfileStringW(L"InternetShortcut", L"url", 0, urlBuffer, WTF_ARRAY_LENGTH(urlBuffer), filename))
+ return false;
+
+ if (title) {
+ PathRemoveExtension(filename);
+ *title = filename;
+ }
+
+ url = urlBuffer;
+ return true;
+#else
+ return false;
+#endif
+}
+
static String extractURL(const String &inURL, String* title)
{
String url = inURL;
@@ -386,6 +424,33 @@ String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filena
return url;
}
+String getURL(const DragDataMap* data, DragData::FilenameConversionPolicy filenamePolicy, String* title)
+{
+ String url;
+
+ if (getWebLocData(data, url, title))
+ return url;
+ if (getDataMapItem(data, urlWFormat(), url))
+ return extractURL(url, title);
+ if (getDataMapItem(data, urlFormat(), url))
+ return extractURL(url, title);
+#if PLATFORM(CF)
+ if (filenamePolicy != DragData::ConvertFilenames)
+ return url;
+
+ String stringData;
+ if (!getDataMapItem(data, filenameWFormat(), stringData))
+ getDataMapItem(data, filenameFormat(), stringData);
+
+ if (stringData.isEmpty() || (!PathFileExists(stringData.charactersWithNullTermination()) && !PathIsUNC(stringData.charactersWithNullTermination())))
+ return url;
+ RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCharacters(kCFAllocatorDefault, (const UniChar *)stringData.charactersWithNullTermination(), stringData.length()));
+ if (urlFromPath(pathAsCFString.get(), url) && title)
+ *title = url;
+#endif
+ return url;
+}
+
String getPlainText(IDataObject* dataObject, bool& success)
{
STGMEDIUM store;
@@ -415,6 +480,17 @@ String getPlainText(IDataObject* dataObject, bool& success)
return text;
}
+String getPlainText(const DragDataMap* data)
+{
+ String text;
+
+ if (getDataMapItem(data, plainTextWFormat(), text))
+ return text;
+ if (getDataMapItem(data, plainTextFormat(), text))
+ return text;
+ return getURL(data, DragData::DoNotConvertFilenames);
+}
+
String getTextHTML(IDataObject* data, bool& success)
{
STGMEDIUM store;
@@ -430,6 +506,13 @@ String getTextHTML(IDataObject* data, bool& success)
return html;
}
+String getTextHTML(const DragDataMap* data)
+{
+ String text;
+ getDataMapItem(data, texthtmlFormat(), text);
+ return text;
+}
+
String getCFHTML(IDataObject* data, bool& success)
{
String cfhtml = getFullCFHTML(data, success);
@@ -438,18 +521,37 @@ String getCFHTML(IDataObject* data, bool& success)
return String();
}
+String getCFHTML(const DragDataMap* dataMap)
+{
+ String cfhtml;
+ getDataMapItem(dataMap, htmlFormat(), cfhtml);
+ return extractMarkupFromCFHTML(cfhtml);
+}
+
PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const IDataObject*)
{
// FIXME: We should be able to create fragments from files
return 0;
}
+PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const DragDataMap*)
+{
+ // FIXME: We should be able to create fragments from files
+ return 0;
+}
+
bool containsFilenames(const IDataObject*)
{
// FIXME: We'll want to update this once we can produce fragments from files
return false;
}
+bool containsFilenames(const DragDataMap*)
+{
+ // FIXME: We'll want to update this once we can produce fragments from files
+ return false;
+}
+
// Convert a String containing CF_HTML formatted text to a DocumentFragment
PassRefPtr<DocumentFragment> fragmentFromCFHTML(Document* doc, const String& cfhtml)
{
@@ -477,8 +579,8 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data)
bool success = false;
String cfhtml = getFullCFHTML(data, success);
if (success) {
- if (PassRefPtr<DocumentFragment> fragment = fragmentFromCFHTML(doc, cfhtml))
- return fragment;
+ if (RefPtr<DocumentFragment> fragment = fragmentFromCFHTML(doc, cfhtml))
+ return fragment.release();
}
String html = getTextHTML(data, success);
@@ -489,9 +591,180 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data)
return 0;
}
+PassRefPtr<DocumentFragment> fragmentFromHTML(Document* document, const DragDataMap* data)
+{
+ if (!document || !data || data->isEmpty())
+ return 0;
+
+ String stringData;
+ if (getDataMapItem(data, htmlFormat(), stringData)) {
+ if (RefPtr<DocumentFragment> fragment = fragmentFromCFHTML(document, stringData))
+ return fragment.release();
+ }
+
+ String srcURL;
+ if (getDataMapItem(data, texthtmlFormat(), stringData))
+ return createFragmentFromMarkup(document, stringData, srcURL, FragmentScriptingNotAllowed);
+
+ return 0;
+}
+
bool containsHTML(IDataObject* data)
{
return SUCCEEDED(data->QueryGetData(texthtmlFormat())) || SUCCEEDED(data->QueryGetData(htmlFormat()));
}
+bool containsHTML(const DragDataMap* data)
+{
+ return data->contains(texthtmlFormat()->cfFormat) || data->contains(htmlFormat()->cfFormat);
+}
+
+typedef void (*GetStringFunction)(IDataObject*, FORMATETC*, Vector<String>&);
+typedef void (*SetStringFunction)(IDataObject*, FORMATETC*, const Vector<String>&);
+
+struct ClipboardDataItem {
+ GetStringFunction getString;
+ SetStringFunction setString;
+ FORMATETC* format;
+
+ ClipboardDataItem(FORMATETC* format, GetStringFunction getString, SetStringFunction setString): format(format), getString(getString), setString(setString) { }
+};
+
+typedef HashMap<UINT, ClipboardDataItem*> ClipboardFormatMap;
+
+// Getter functions.
+
+template<typename T> void getStringData(IDataObject* data, FORMATETC* format, Vector<String>& dataStrings)
+{
+ STGMEDIUM store;
+ if (FAILED(data->GetData(format, &store)))
+ return;
+ dataStrings.append(String(static_cast<T*>(GlobalLock(store.hGlobal)), ::GlobalSize(store.hGlobal) / sizeof(T)));
+ GlobalUnlock(store.hGlobal);
+ ReleaseStgMedium(&store);
+}
+
+void getUtf8Data(IDataObject* data, FORMATETC* format, Vector<String>& dataStrings)
+{
+ STGMEDIUM store;
+ if (FAILED(data->GetData(format, &store)))
+ return;
+ dataStrings.append(String(UTF8Encoding().decode(static_cast<char*>(GlobalLock(store.hGlobal)), GlobalSize(store.hGlobal))));
+ GlobalUnlock(store.hGlobal);
+ ReleaseStgMedium(&store);
+}
+
+#if PLATFORM(CF)
+void getCFData(IDataObject* data, FORMATETC* format, Vector<String>& dataStrings)
+{
+ STGMEDIUM store;
+ if (FAILED(data->GetData(format, &store)))
+ return;
+
+ HDROP hdrop = reinterpret_cast<HDROP>(GlobalLock(store.hGlobal));
+ if (!hdrop)
+ return;
+
+ WCHAR filename[MAX_PATH];
+ UINT fileCount = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
+ for (UINT i = 0; i < fileCount; i++) {
+ if (!DragQueryFileW(hdrop, i, filename, WTF_ARRAY_LENGTH(filename)))
+ continue;
+ dataStrings.append(static_cast<UChar*>(filename));
+ }
+
+ GlobalUnlock(store.hGlobal);
+ ReleaseStgMedium(&store);
+}
+#endif
+
+// Setter functions.
+
+void setUCharData(IDataObject* data, FORMATETC* format, const Vector<String>& dataStrings)
+{
+ STGMEDIUM medium = {0};
+ medium.tymed = TYMED_HGLOBAL;
+
+ medium.hGlobal = createGlobalData(dataStrings.first());
+ if (!medium.hGlobal)
+ return;
+ data->SetData(format, &medium, FALSE);
+ ::GlobalFree(medium.hGlobal);
+}
+
+void setUtf8Data(IDataObject* data, FORMATETC* format, const Vector<String>& dataStrings)
+{
+ STGMEDIUM medium = {0};
+ medium.tymed = TYMED_HGLOBAL;
+
+ CString charString = dataStrings.first().utf8();
+ size_t stringLength = charString.length();
+ medium.hGlobal = ::GlobalAlloc(GPTR, stringLength + 1);
+ if (!medium.hGlobal)
+ return;
+ char* buffer = static_cast<char*>(GlobalLock(medium.hGlobal));
+ memcpy(buffer, charString.data(), stringLength);
+ buffer[stringLength] = 0;
+ GlobalUnlock(medium.hGlobal);
+ data->SetData(format, &medium, FALSE);
+ ::GlobalFree(medium.hGlobal);
+}
+
+#if PLATFORM(CF)
+void setCFData(IDataObject* data, FORMATETC* format, const Vector<String>& dataStrings)
+{
+ STGMEDIUM medium = {0};
+ SIZE_T dropFilesSize = sizeof(DROPFILES) + (sizeof(WCHAR) * (dataStrings.first().length() + 2));
+ medium.hGlobal = ::GlobalAlloc(GHND | GMEM_SHARE, dropFilesSize);
+ if (!medium.hGlobal)
+ return;
+
+ DROPFILES* dropFiles = reinterpret_cast<DROPFILES *>(GlobalLock(medium.hGlobal));
+ dropFiles->pFiles = sizeof(DROPFILES);
+ dropFiles->fWide = TRUE;
+ String filename = dataStrings.first();
+ wcscpy(reinterpret_cast<LPWSTR>(dropFiles + 1), filename.charactersWithNullTermination());
+ GlobalUnlock(medium.hGlobal);
+ data->SetData(format, &medium, FALSE);
+ ::GlobalFree(medium.hGlobal);
+}
+#endif
+
+static const ClipboardFormatMap& getClipboardMap()
+{
+ static ClipboardFormatMap formatMap;
+ if (formatMap.isEmpty()) {
+ formatMap.add(htmlFormat()->cfFormat, new ClipboardDataItem(htmlFormat(), getUtf8Data, setUtf8Data));
+ formatMap.add(texthtmlFormat()->cfFormat, new ClipboardDataItem(texthtmlFormat(), getStringData<UChar>, setUCharData));
+ formatMap.add(plainTextFormat()->cfFormat, new ClipboardDataItem(plainTextFormat(), getStringData<char>, setUtf8Data));
+ formatMap.add(plainTextWFormat()->cfFormat, new ClipboardDataItem(plainTextWFormat(), getStringData<UChar>, setUCharData));
+#if PLATFORM(CF)
+ formatMap.add(cfHDropFormat()->cfFormat, new ClipboardDataItem(cfHDropFormat(), getCFData, setCFData));
+#endif
+ formatMap.add(filenameFormat()->cfFormat, new ClipboardDataItem(filenameFormat(), getStringData<char>, setUtf8Data));
+ formatMap.add(filenameWFormat()->cfFormat, new ClipboardDataItem(filenameWFormat(), getStringData<UChar>, setUCharData));
+ formatMap.add(urlFormat()->cfFormat, new ClipboardDataItem(urlFormat(), getStringData<char>, setUtf8Data));
+ formatMap.add(urlWFormat()->cfFormat, new ClipboardDataItem(urlWFormat(), getStringData<UChar>, setUCharData));
+ }
+ return formatMap;
+}
+
+void getClipboardData(IDataObject* dataObject, FORMATETC* format, Vector<String>& dataStrings)
+{
+ const ClipboardFormatMap& formatMap = getClipboardMap();
+ ClipboardFormatMap::const_iterator found = formatMap.find(format->cfFormat);
+ if (found == formatMap.end())
+ return;
+ found->second->getString(dataObject, found->second->format, dataStrings);
+}
+
+void setClipboardData(IDataObject* dataObject, UINT format, const Vector<String>& dataStrings)
+{
+ const ClipboardFormatMap& formatMap = getClipboardMap();
+ ClipboardFormatMap::const_iterator found = formatMap.find(format);
+ if (found == formatMap.end())
+ return;
+ found->second->setString(dataObject, found->second->format, dataStrings);
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/platform/win/ClipboardUtilitiesWin.h b/Source/WebCore/platform/win/ClipboardUtilitiesWin.h
index 1a29e7e..36508d4 100644
--- a/Source/WebCore/platform/win/ClipboardUtilitiesWin.h
+++ b/Source/WebCore/platform/win/ClipboardUtilitiesWin.h
@@ -55,16 +55,27 @@ void replaceNewlinesWithWindowsStyleNewlines(String&);
void replaceNBSPWithSpace(String&);
bool containsFilenames(const IDataObject*);
+bool containsFilenames(const DragDataMap*);
bool containsHTML(IDataObject*);
+bool containsHTML(const DragDataMap*);
PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const IDataObject*);
+PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const DragDataMap*);
PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, IDataObject*);
+PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, const DragDataMap*);
PassRefPtr<DocumentFragment> fragmentFromCFHTML(Document*, const String& cfhtml);
String getURL(IDataObject*, DragData::FilenameConversionPolicy, bool& success, String* title = 0);
+String getURL(const DragDataMap*, DragData::FilenameConversionPolicy, String* title = 0);
String getPlainText(IDataObject*, bool& success);
+String getPlainText(const DragDataMap*);
String getTextHTML(IDataObject*, bool& success);
+String getTextHTML(const DragDataMap*);
String getCFHTML(IDataObject*, bool& success);
+String getCFHTML(const DragDataMap*);
+
+void getClipboardData(IDataObject*, FORMATETC* fetc, Vector<String>& dataStrings);
+void setClipboardData(IDataObject*, UINT format, const Vector<String>& dataStrings);
} // namespace WebCore
diff --git a/Source/WebCore/platform/win/ClipboardWin.cpp b/Source/WebCore/platform/win/ClipboardWin.cpp
index 58cfe44..c0af712 100644
--- a/Source/WebCore/platform/win/ClipboardWin.cpp
+++ b/Source/WebCore/platform/win/ClipboardWin.cpp
@@ -115,7 +115,7 @@ static inline void pathRemoveBadFSCharacters(PWSTR psz, size_t length)
}
#endif
-static String filesystemPathFromUrlOrTitle(const String& url, const String& title, TCHAR* extension, bool isLink)
+static String filesystemPathFromUrlOrTitle(const String& url, const String& title, const UChar* extension, bool isLink)
{
#if OS(WINCE)
notImplemented();
@@ -163,7 +163,7 @@ static String filesystemPathFromUrlOrTitle(const String& url, const String& titl
}
String result(static_cast<UChar*>(fsPathBuffer));
- result += String(static_cast<UChar*>(extension));
+ result += String(extension);
return result;
#endif
}
@@ -195,7 +195,7 @@ static HGLOBAL createGlobalHDropContent(const KURL& url, String& fileName, Share
// windows does not enjoy a leading slash on paths
if (localPath[0] == '/')
localPath = localPath.substring(1);
- LPCTSTR localPathStr = localPath.charactersWithNullTermination();
+ LPCWSTR localPathStr = localPath.charactersWithNullTermination();
if (wcslen(localPathStr) + 1 < MAX_PATH)
wcscpy_s(filePath, MAX_PATH, localPathStr);
else
@@ -277,7 +277,7 @@ static HGLOBAL createGlobalImageFileDescriptor(const String& url, const String&
return 0;
}
extension.insert(".", 0);
- fsPath = filesystemPathFromUrlOrTitle(url, preferredTitle, (TCHAR*)extension.charactersWithNullTermination(), false);
+ fsPath = filesystemPathFromUrlOrTitle(url, preferredTitle, extension.charactersWithNullTermination(), false);
if (fsPath.length() <= 0) {
GlobalUnlock(memObj);
@@ -340,7 +340,9 @@ exit:
PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
{
- return ClipboardWin::create(DragAndDrop, dragData->platformData(), policy, frame);
+ if (dragData->platformData())
+ return ClipboardWin::create(DragAndDrop, dragData->platformData(), policy, frame);
+ return ClipboardWin::create(DragAndDrop, dragData->dragDataMap(), policy, frame);
}
ClipboardWin::ClipboardWin(ClipboardType clipboardType, IDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
@@ -359,6 +361,15 @@ ClipboardWin::ClipboardWin(ClipboardType clipboardType, WCDataObject* dataObject
{
}
+ClipboardWin::ClipboardWin(ClipboardType clipboardType, const DragDataMap& dataMap, ClipboardAccessPolicy policy, Frame* frame)
+ : Clipboard(policy, clipboardType)
+ , m_dataObject(0)
+ , m_writableDataObject(0)
+ , m_frame(frame)
+ , m_dragDataMap(dataMap)
+{
+}
+
ClipboardWin::~ClipboardWin()
{
}
@@ -442,19 +453,19 @@ void ClipboardWin::clearAllData()
String ClipboardWin::getData(const String& type, bool& success) const
{
success = false;
- if (policy() != ClipboardReadable || !m_dataObject)
+ if (policy() != ClipboardReadable || (!m_dataObject && m_dragDataMap.isEmpty()))
return "";
ClipboardDataType dataType = clipboardTypeFromMIMEType(type);
if (dataType == ClipboardDataTypeText)
- return getPlainText(m_dataObject.get(), success);
+ return m_dataObject ? getPlainText(m_dataObject.get(), success) : getPlainText(&m_dragDataMap);
if (dataType == ClipboardDataTypeURL)
- return getURL(m_dataObject.get(), DragData::DoNotConvertFilenames, success);
+ return m_dataObject ? getURL(m_dataObject.get(), DragData::DoNotConvertFilenames, success) : getURL(&m_dragDataMap, DragData::DoNotConvertFilenames);
else if (dataType == ClipboardDataTypeTextHTML) {
- String data = getTextHTML(m_dataObject.get(), success);
+ String data = m_dataObject ? getTextHTML(m_dataObject.get(), success) : getTextHTML(&m_dragDataMap);
if (success)
return data;
- return getCFHTML(m_dataObject.get(), success);
+ return m_dataObject ? getCFHTML(m_dataObject.get(), success) : getCFHTML(&m_dragDataMap);
}
return "";
@@ -510,22 +521,30 @@ HashSet<String> ClipboardWin::types() const
if (policy() != ClipboardReadable && policy() != ClipboardTypesReadable)
return results;
- if (!m_dataObject)
+ if (!m_dataObject && m_dragDataMap.isEmpty())
return results;
- COMPtr<IEnumFORMATETC> itr;
+ if (m_dataObject) {
+ COMPtr<IEnumFORMATETC> itr;
- if (FAILED(m_dataObject->EnumFormatEtc(DATADIR_GET, &itr)))
- return results;
+ if (FAILED(m_dataObject->EnumFormatEtc(DATADIR_GET, &itr)))
+ return results;
- if (!itr)
- return results;
+ if (!itr)
+ return results;
- FORMATETC data;
+ FORMATETC data;
- // IEnumFORMATETC::Next returns S_FALSE if there are no more items.
- while (itr->Next(1, &data, 0) == S_OK)
- addMimeTypesForFormat(results, data);
+ // IEnumFORMATETC::Next returns S_FALSE if there are no more items.
+ while (itr->Next(1, &data, 0) == S_OK)
+ addMimeTypesForFormat(results, data);
+ } else {
+ for (DragDataMap::const_iterator it = m_dragDataMap.begin(); it != m_dragDataMap.end(); ++it) {
+ FORMATETC data;
+ data.cfFormat = (*it).first;
+ addMimeTypesForFormat(results, data);
+ }
+ }
return results;
}
@@ -540,27 +559,35 @@ PassRefPtr<FileList> ClipboardWin::files() const
if (policy() != ClipboardReadable && policy() != ClipboardTypesReadable)
return files.release();
- if (!m_dataObject)
+ if (!m_dataObject && m_dragDataMap.isEmpty())
return files.release();
- STGMEDIUM medium;
- if (FAILED(m_dataObject->GetData(cfHDropFormat(), &medium)))
- return files.release();
+ if (m_dataObject) {
+ STGMEDIUM medium;
+ if (FAILED(m_dataObject->GetData(cfHDropFormat(), &medium)))
+ return files.release();
+
+ HDROP hdrop = reinterpret_cast<HDROP>(GlobalLock(medium.hGlobal));
+ if (!hdrop)
+ return files.release();
+
+ WCHAR filename[MAX_PATH];
+ UINT fileCount = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
+ for (UINT i = 0; i < fileCount; i++) {
+ if (!DragQueryFileW(hdrop, i, filename, WTF_ARRAY_LENGTH(filename)))
+ continue;
+ files->append(File::create(reinterpret_cast<UChar*>(filename)));
+ }
- HDROP hdrop = reinterpret_cast<HDROP>(GlobalLock(medium.hGlobal));
- if (!hdrop)
+ GlobalUnlock(medium.hGlobal);
+ ReleaseStgMedium(&medium);
return files.release();
-
- WCHAR filename[MAX_PATH];
- UINT fileCount = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
- for (UINT i = 0; i < fileCount; i++) {
- if (!DragQueryFileW(hdrop, i, filename, WTF_ARRAY_LENGTH(filename)))
- continue;
- files->append(File::create(reinterpret_cast<UChar*>(filename)));
}
-
- GlobalUnlock(medium.hGlobal);
- ReleaseStgMedium(&medium);
+ if (!m_dragDataMap.contains(cfHDropFormat()->cfFormat))
+ return files.release();
+ Vector<String> filesVector = m_dragDataMap.get(cfHDropFormat()->cfFormat);
+ for (Vector<String>::iterator it = filesVector.begin(); it != filesVector.end(); ++it)
+ files->append(File::create((*it).characters()));
return files.release();
#endif
}
@@ -778,25 +805,28 @@ void ClipboardWin::writePlainText(const String& text)
bool ClipboardWin::hasData()
{
- if (!m_dataObject)
+ if (!m_dataObject && m_dragDataMap.isEmpty())
return false;
- COMPtr<IEnumFORMATETC> itr;
- if (FAILED(m_dataObject->EnumFormatEtc(DATADIR_GET, &itr)))
- return false;
+ if (m_dataObject) {
+ COMPtr<IEnumFORMATETC> itr;
+ if (FAILED(m_dataObject->EnumFormatEtc(DATADIR_GET, &itr)))
+ return false;
- if (!itr)
- return false;
+ if (!itr)
+ return false;
- FORMATETC data;
+ FORMATETC data;
- // IEnumFORMATETC::Next returns S_FALSE if there are no more items.
- if (itr->Next(1, &data, 0) == S_OK) {
- // There is at least one item in the IDataObject
- return true;
- }
+ // IEnumFORMATETC::Next returns S_FALSE if there are no more items.
+ if (itr->Next(1, &data, 0) == S_OK) {
+ // There is at least one item in the IDataObject
+ return true;
+ }
- return false;
+ return false;
+ }
+ return !m_dragDataMap.isEmpty();
}
void ClipboardWin::setExternalDataObject(IDataObject *dataObject)
diff --git a/Source/WebCore/platform/win/ClipboardWin.h b/Source/WebCore/platform/win/ClipboardWin.h
index 779da26..7530eeb 100644
--- a/Source/WebCore/platform/win/ClipboardWin.h
+++ b/Source/WebCore/platform/win/ClipboardWin.h
@@ -29,6 +29,7 @@
#include "COMPtr.h"
#include "CachedResourceClient.h"
#include "Clipboard.h"
+#include "DragData.h"
struct IDataObject;
@@ -51,6 +52,10 @@ public:
{
return adoptRef(new ClipboardWin(clipboardType, dataObject, policy, frame));
}
+ static PassRefPtr<ClipboardWin> create(ClipboardType clipboardType, const DragDataMap& dataMap, ClipboardAccessPolicy policy, Frame* frame)
+ {
+ return adoptRef(new ClipboardWin(clipboardType, dataMap, policy, frame));
+ }
~ClipboardWin();
void clearData(const String& type);
@@ -80,12 +85,14 @@ public:
private:
ClipboardWin(ClipboardType, IDataObject*, ClipboardAccessPolicy, Frame*);
ClipboardWin(ClipboardType, WCDataObject*, ClipboardAccessPolicy, Frame*);
+ ClipboardWin(ClipboardType, const DragDataMap&, ClipboardAccessPolicy, Frame*);
void resetFromClipboard();
void setDragImage(CachedImage*, Node*, const IntPoint&);
COMPtr<IDataObject> m_dataObject;
COMPtr<WCDataObject> m_writableDataObject;
+ DragDataMap m_dragDataMap;
Frame* m_frame;
};
diff --git a/Source/WebCore/platform/win/ContextMenuWin.cpp b/Source/WebCore/platform/win/ContextMenuWin.cpp
index ed1b895..dad0f2e 100644
--- a/Source/WebCore/platform/win/ContextMenuWin.cpp
+++ b/Source/WebCore/platform/win/ContextMenuWin.cpp
@@ -31,7 +31,6 @@
#include "FrameView.h"
#include "Node.h"
#include "NotImplemented.h"
-#include <tchar.h>
#include <windows.h>
#include <wtf/Vector.h>
#include <wtf/text/CString.h>
@@ -73,7 +72,7 @@ void ContextMenu::getContextMenuItems(HMENU menu, Vector<ContextMenuItem>& items
}
int menuStringLength = info.cch + 1;
- OwnArrayPtr<WCHAR> menuString(new WCHAR[menuStringLength]);
+ OwnArrayPtr<WCHAR> menuString = adoptArrayPtr(new WCHAR[menuStringLength]);
info.dwTypeData = menuString.get();
info.cch = menuStringLength;
diff --git a/Source/WebCore/platform/win/CursorWin.cpp b/Source/WebCore/platform/win/CursorWin.cpp
index 2dd1452..0036388 100644
--- a/Source/WebCore/platform/win/CursorWin.cpp
+++ b/Source/WebCore/platform/win/CursorWin.cpp
@@ -123,9 +123,9 @@ static PassRefPtr<SharedCursor> createSharedCursor(Image* img, const IntPoint& h
return impl.release();
}
-static PassRefPtr<SharedCursor> loadSharedCursor(HINSTANCE hInstance, LPCTSTR lpCursorName)
+static PassRefPtr<SharedCursor> loadSharedCursor(HINSTANCE hInstance, LPCWSTR lpCursorName)
{
- return SharedCursor::create(::LoadCursor(hInstance, lpCursorName));
+ return SharedCursor::create(::LoadCursorW(hInstance, lpCursorName));
}
static PassRefPtr<SharedCursor> loadCursorByName(char* name, int x, int y)
diff --git a/Source/WebCore/platform/win/DragDataWin.cpp b/Source/WebCore/platform/win/DragDataWin.cpp
index 906119d..c5b99ea 100644
--- a/Source/WebCore/platform/win/DragDataWin.cpp
+++ b/Source/WebCore/platform/win/DragDataWin.cpp
@@ -26,6 +26,7 @@
#include "config.h"
#include "DragData.h"
+#include "COMPtr.h"
#include "ClipboardUtilitiesWin.h"
#include "Frame.h"
#include "DocumentFragment.h"
@@ -35,65 +36,109 @@
#include <objidl.h>
#include <shlwapi.h>
#include <wininet.h>
+#include <wtf/Forward.h>
+#include <wtf/Hashmap.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
namespace WebCore {
+DragData::DragData(const DragDataMap& data, const IntPoint& clientPosition, const IntPoint& globalPosition,
+ DragOperation sourceOperationMask, DragApplicationFlags flags)
+ : m_clientPosition(clientPosition)
+ , m_globalPosition(globalPosition)
+ , m_platformDragData(0)
+ , m_draggingSourceOperationMask(sourceOperationMask)
+ , m_applicationFlags(flags)
+ , m_dragDataMap(data)
+{
+}
+
bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const
{
- return SUCCEEDED(m_platformDragData->QueryGetData(urlWFormat()))
- || SUCCEEDED(m_platformDragData->QueryGetData(urlFormat()))
- || (filenamePolicy == ConvertFilenames
- && (SUCCEEDED(m_platformDragData->QueryGetData(filenameWFormat()))
- || SUCCEEDED(m_platformDragData->QueryGetData(filenameFormat()))));
+ if (m_platformDragData)
+ return SUCCEEDED(m_platformDragData->QueryGetData(urlWFormat()))
+ || SUCCEEDED(m_platformDragData->QueryGetData(urlFormat()))
+ || (filenamePolicy == ConvertFilenames
+ && (SUCCEEDED(m_platformDragData->QueryGetData(filenameWFormat()))
+ || SUCCEEDED(m_platformDragData->QueryGetData(filenameFormat()))));
+ return m_dragDataMap.contains(urlWFormat()->cfFormat) || m_dragDataMap.contains(urlFormat()->cfFormat)
+ || (filenamePolicy == ConvertFilenames && (m_dragDataMap.contains(filenameWFormat()->cfFormat) || m_dragDataMap.contains(filenameFormat()->cfFormat)));
+}
+
+const DragDataMap& DragData::dragDataMap()
+{
+ if (!m_dragDataMap.isEmpty() || !m_platformDragData)
+ return m_dragDataMap;
+ // Enumerate clipboard content and load it in the map.
+ COMPtr<IEnumFORMATETC> itr;
+
+ if (FAILED(m_platformDragData->EnumFormatEtc(DATADIR_GET, &itr)) || !itr)
+ return m_dragDataMap;
+
+ FORMATETC dataFormat;
+ while (itr->Next(1, &dataFormat, 0) == S_OK) {
+ Vector<String> dataStrings;
+ getClipboardData(m_platformDragData, &dataFormat, dataStrings);
+ if (!dataStrings.isEmpty())
+ m_dragDataMap.set(dataFormat.cfFormat, dataStrings);
+ }
+ return m_dragDataMap;
}
String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const
{
bool success;
- return getURL(m_platformDragData, filenamePolicy, success, title);
+ return (m_platformDragData) ? getURL(m_platformDragData, filenamePolicy, success, title) : getURL(&m_dragDataMap, filenamePolicy, title);
}
bool DragData::containsFiles() const
{
- return SUCCEEDED(m_platformDragData->QueryGetData(cfHDropFormat()));
+ return (m_platformDragData) ? SUCCEEDED(m_platformDragData->QueryGetData(cfHDropFormat())) : m_dragDataMap.contains(cfHDropFormat()->cfFormat);
}
void DragData::asFilenames(Vector<String>& result) const
{
- WCHAR filename[MAX_PATH];
-
- STGMEDIUM medium;
- if (FAILED(m_platformDragData->GetData(cfHDropFormat(), &medium)))
- return;
-
- HDROP hdrop = (HDROP)GlobalLock(medium.hGlobal);
-
- if (!hdrop)
- return;
+ if (m_platformDragData) {
+ WCHAR filename[MAX_PATH];
+
+ STGMEDIUM medium;
+ if (FAILED(m_platformDragData->GetData(cfHDropFormat(), &medium)))
+ return;
+
+ HDROP hdrop = (HDROP)GlobalLock(medium.hGlobal);
+
+ if (!hdrop)
+ return;
- const unsigned numFiles = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
- for (unsigned i = 0; i < numFiles; i++) {
- if (!DragQueryFileW(hdrop, 0, filename, WTF_ARRAY_LENGTH(filename)))
- continue;
- result.append((UChar*)filename);
- }
+ const unsigned numFiles = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
+ for (unsigned i = 0; i < numFiles; i++) {
+ if (!DragQueryFileW(hdrop, 0, filename, WTF_ARRAY_LENGTH(filename)))
+ continue;
+ result.append((UChar*)filename);
+ }
- // Free up memory from drag
- DragFinish(hdrop);
+ // Free up memory from drag
+ DragFinish(hdrop);
- GlobalUnlock(medium.hGlobal);
+ GlobalUnlock(medium.hGlobal);
+ return;
+ }
+ result = m_dragDataMap.get(cfHDropFormat()->cfFormat);
}
bool DragData::containsPlainText() const
{
- return SUCCEEDED(m_platformDragData->QueryGetData(plainTextWFormat()))
- || SUCCEEDED(m_platformDragData->QueryGetData(plainTextFormat()));
+ if (m_platformDragData)
+ return SUCCEEDED(m_platformDragData->QueryGetData(plainTextWFormat()))
+ || SUCCEEDED(m_platformDragData->QueryGetData(plainTextFormat()));
+ return m_dragDataMap.contains(plainTextWFormat()->cfFormat) || m_dragDataMap.contains(plainTextFormat()->cfFormat);
}
String DragData::asPlainText(Frame*) const
{
bool success;
- return getPlainText(m_platformDragData, success);
+ return (m_platformDragData) ? getPlainText(m_platformDragData, success) : getPlainText(&m_dragDataMap);
}
bool DragData::containsColor() const
@@ -103,14 +148,16 @@ bool DragData::containsColor() const
bool DragData::canSmartReplace() const
{
- return SUCCEEDED(m_platformDragData->QueryGetData(smartPasteFormat()));
+ if (m_platformDragData)
+ return SUCCEEDED(m_platformDragData->QueryGetData(smartPasteFormat()));
+ return m_dragDataMap.contains(smartPasteFormat()->cfFormat);
}
bool DragData::containsCompatibleContent() const
{
return containsPlainText() || containsURL(0)
- || containsHTML(m_platformDragData)
- || containsFilenames(m_platformDragData)
+ || ((m_platformDragData) ? (containsHTML(m_platformDragData) || containsFilenames(m_platformDragData))
+ : (containsHTML(&m_dragDataMap) || containsFilenames(&m_dragDataMap)))
|| containsColor();
}
@@ -125,16 +172,29 @@ PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range
* * TIFF
* * PICT
*/
-
- if (containsFilenames(m_platformDragData))
- if (PassRefPtr<DocumentFragment> fragment = fragmentFromFilenames(frame->document(), m_platformDragData))
- return fragment;
-
- if (containsHTML(m_platformDragData))
- if (PassRefPtr<DocumentFragment> fragment = fragmentFromHTML(frame->document(), m_platformDragData))
- return fragment;
-
- return 0;
+
+ if (m_platformDragData) {
+ if (containsFilenames(m_platformDragData)) {
+ if (PassRefPtr<DocumentFragment> fragment = fragmentFromFilenames(frame->document(), m_platformDragData))
+ return fragment;
+ }
+
+ if (containsHTML(m_platformDragData)) {
+ if (PassRefPtr<DocumentFragment> fragment = fragmentFromHTML(frame->document(), m_platformDragData))
+ return fragment;
+ }
+ } else {
+ if (containsFilenames(&m_dragDataMap)) {
+ if (PassRefPtr<DocumentFragment> fragment = fragmentFromFilenames(frame->document(), &m_dragDataMap))
+ return fragment;
+ }
+
+ if (containsHTML(&m_dragDataMap)) {
+ if (PassRefPtr<DocumentFragment> fragment = fragmentFromHTML(frame->document(), &m_dragDataMap))
+ return fragment;
+ }
+ }
+ return 0;
}
Color DragData::asColor() const
@@ -143,4 +203,3 @@ Color DragData::asColor() const
}
}
-
diff --git a/Source/WebCore/platform/win/DragImageWin.cpp b/Source/WebCore/platform/win/DragImageWin.cpp
index 135e9d0..4e5d168 100644
--- a/Source/WebCore/platform/win/DragImageWin.cpp
+++ b/Source/WebCore/platform/win/DragImageWin.cpp
@@ -27,14 +27,25 @@
#include "DragImage.h"
#include "CachedImage.h"
+#include "Font.h"
+#include "FontDescription.h"
+#include "FontSelector.h"
+#include "Frame.h"
#include "GraphicsContext.h"
#include "Image.h"
#include "RetainPtr.h"
+#include "Settings.h"
+#include "StringTruncator.h"
+#include "TextRun.h"
+#include "WebCoreTextRenderer.h"
#include <windows.h>
namespace WebCore {
+HBITMAP allocImage(HDC, IntSize, PlatformGraphicsContext** targetRef);
+void deallocContext(PlatformGraphicsContext* target);
+
IntSize dragImageSize(DragImageRef image)
{
if (!image)
@@ -79,5 +90,141 @@ DragImageRef createDragImageIconForCachedImage(CachedImage* image)
return iconInfo.hbmColor;
}
+
+const float DragLabelBorderX = 4;
+// Keep border_y in synch with DragController::LinkDragBorderInset.
+const float DragLabelBorderY = 2;
+const float DragLabelRadius = 5;
+const float LabelBorderYOffset = 2;
+
+const float MinDragLabelWidthBeforeClip = 120;
+const float MaxDragLabelWidth = 200;
+const float MaxDragLabelStringWidth = (MaxDragLabelWidth - 2 * DragLabelBorderX);
+
+const float DragLinkLabelFontsize = 11;
+const float DragLinkUrlFontSize = 10;
+
+static Font dragLabelFont(int size, bool bold, FontRenderingMode renderingMode)
+{
+ NONCLIENTMETRICS metrics;
+ metrics.cbSize = sizeof(metrics);
+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0);
+
+ FontDescription description;
+ description.setWeight(bold ? FontWeightBold : FontWeightNormal);
+
+ FontFamily family;
+ family.setFamily(metrics.lfSmCaptionFont.lfFaceName);
+ description.setFamily(family);
+ description.setSpecifiedSize((float)size);
+ description.setComputedSize((float)size);
+ description.setRenderingMode(renderingMode);
+ Font result = Font(description, 0, 0);
+ result.update(0);
+ return result;
+}
+
+DragImageRef createDragImageForLink(KURL& url, const String& inLabel, Frame* frame)
+{
+ // This is more or less an exact match for the Mac OS X code.
+
+ const Font* labelFont;
+ const Font* urlFont;
+
+ if (frame->settings() && frame->settings()->fontRenderingMode() == AlternateRenderingMode) {
+ static const Font alternateRenderingModeLabelFont = dragLabelFont(DragLinkLabelFontsize, true, AlternateRenderingMode);
+ static const Font alternateRenderingModeURLFont = dragLabelFont(DragLinkUrlFontSize, false, AlternateRenderingMode);
+ labelFont = &alternateRenderingModeLabelFont;
+ urlFont = &alternateRenderingModeURLFont;
+ } else {
+ static const Font normalRenderingModeLabelFont = dragLabelFont(DragLinkLabelFontsize, true, NormalRenderingMode);
+ static const Font normalRenderingModeURLFont = dragLabelFont(DragLinkUrlFontSize, false, NormalRenderingMode);
+ labelFont = &normalRenderingModeLabelFont;
+ urlFont = &normalRenderingModeURLFont;
+ }
+
+ bool drawURLString = true;
+ bool clipURLString = false;
+ bool clipLabelString = false;
+
+ String urlString = url.string();
+ String label = inLabel;
+ if (label.isEmpty()) {
+ drawURLString = false;
+ label = urlString;
+ }
+
+ // First step in drawing the link drag image width.
+ TextRun labelRun(label.impl());
+ TextRun urlRun(urlString.impl());
+ IntSize labelSize(labelFont->width(labelRun), labelFont->fontMetrics().ascent() + labelFont->fontMetrics().descent());
+
+ if (labelSize.width() > MaxDragLabelStringWidth) {
+ labelSize.setWidth(MaxDragLabelStringWidth);
+ clipLabelString = true;
+ }
+
+ IntSize urlStringSize;
+ IntSize imageSize(labelSize.width() + DragLabelBorderX * 2, labelSize.height() + DragLabelBorderY * 2);
+
+ if (drawURLString) {
+ urlStringSize.setWidth(urlFont->width(urlRun));
+ urlStringSize.setHeight(urlFont->fontMetrics().ascent() + urlFont->fontMetrics().descent());
+ imageSize.setHeight(imageSize.height() + urlStringSize.height());
+ if (urlStringSize.width() > MaxDragLabelStringWidth) {
+ imageSize.setWidth(MaxDragLabelWidth);
+ clipURLString = true;
+ } else
+ imageSize.setWidth(std::max(labelSize.width(), urlStringSize.width()) + DragLabelBorderX * 2);
+ }
+
+ // We now know how big the image needs to be, so we create and
+ // fill the background
+ HBITMAP image = 0;
+ HDC dc = GetDC(0);
+ HDC workingDC = CreateCompatibleDC(dc);
+ if (!workingDC) {
+ ReleaseDC(0, dc);
+ return 0;
+ }
+
+ PlatformGraphicsContext* contextRef;
+ image = allocImage(workingDC, imageSize, &contextRef);
+ if (!image) {
+ DeleteDC(workingDC);
+ ReleaseDC(0, dc);
+ return 0;
+ }
+
+ SelectObject(workingDC, image);
+ GraphicsContext context(contextRef);
+ // On Mac alpha is {0.7, 0.7, 0.7, 0.8}, however we can't control alpha
+ // for drag images on win, so we use 1
+ static const Color backgroundColor(140, 140, 140);
+ static const IntSize radii(DragLabelRadius, DragLabelRadius);
+ IntRect rect(0, 0, imageSize.width(), imageSize.height());
+ context.fillRoundedRect(rect, radii, radii, radii, radii, backgroundColor, ColorSpaceDeviceRGB);
+
+ // Draw the text
+ static const Color topColor(0, 0, 0, 255); // original alpha = 0.75
+ static const Color bottomColor(255, 255, 255, 127); // original alpha = 0.5
+ if (drawURLString) {
+ if (clipURLString)
+ urlString = StringTruncator::rightTruncate(urlString, imageSize.width() - (DragLabelBorderX * 2.0f), *urlFont, false);
+ IntPoint textPos(DragLabelBorderX, imageSize.height() - (LabelBorderYOffset + urlFont->fontMetrics().descent()));
+ WebCoreDrawDoubledTextAtPoint(context, urlString, textPos, *urlFont, topColor, bottomColor);
+ }
+ if (clipLabelString)
+ label = StringTruncator::rightTruncate(label, imageSize.width() - (DragLabelBorderX * 2.0f), *labelFont, false);
+
+ IntPoint textPos(DragLabelBorderX, DragLabelBorderY + labelFont->pixelSize());
+ WebCoreDrawDoubledTextAtPoint(context, label, textPos, *labelFont, topColor, bottomColor);
+
+ deallocContext(contextRef);
+ DeleteDC(workingDC);
+ ReleaseDC(0, dc);
+ return image;
+}
+
}
diff --git a/Source/WebCore/platform/win/FileChooserWin.cpp b/Source/WebCore/platform/win/FileChooserWin.cpp
index 7d07b5d..195b8eb 100644
--- a/Source/WebCore/platform/win/FileChooserWin.cpp
+++ b/Source/WebCore/platform/win/FileChooserWin.cpp
@@ -29,7 +29,6 @@
#include "LocalizedStrings.h"
#include "StringTruncator.h"
#include <shlwapi.h>
-#include <tchar.h>
#include <windows.h>
namespace WebCore {
@@ -44,7 +43,7 @@ String FileChooser::basenameForWidth(const Font& font, int width) const
string = fileButtonNoFileSelectedLabel();
else if (m_filenames.size() == 1) {
String tmpFilename = m_filenames[0];
- LPTSTR basename = PathFindFileName(tmpFilename.charactersWithNullTermination());
+ LPWSTR basename = PathFindFileNameW(tmpFilename.charactersWithNullTermination());
string = String(basename);
} else
return StringTruncator::rightTruncate(String::number(m_filenames.size()) + " files", width, font, false);
diff --git a/Source/WebCore/platform/win/LoggingWin.cpp b/Source/WebCore/platform/win/LoggingWin.cpp
index fe237e5..1d051ae 100644
--- a/Source/WebCore/platform/win/LoggingWin.cpp
+++ b/Source/WebCore/platform/win/LoggingWin.cpp
@@ -37,7 +37,7 @@ static inline void initializeWithUserDefault(WTFLogChannel& channel)
if (!length)
return;
- OwnArrayPtr<char> buffer(new char[length]);
+ OwnArrayPtr<char> buffer = adoptArrayPtr(new char[length]);
if (!GetEnvironmentVariableA(channel.defaultName, buffer.get(), length))
return;
diff --git a/Source/WebCore/platform/win/MIMETypeRegistryWin.cpp b/Source/WebCore/platform/win/MIMETypeRegistryWin.cpp
index 980742a..56ddab1 100644
--- a/Source/WebCore/platform/win/MIMETypeRegistryWin.cpp
+++ b/Source/WebCore/platform/win/MIMETypeRegistryWin.cpp
@@ -27,7 +27,9 @@
#include "MIMETypeRegistry.h"
#include <shlwapi.h>
+#include <wtf/Assertions.h>
#include <wtf/HashMap.h>
+#include <wtf/MainThread.h>
namespace WebCore
{
@@ -64,6 +66,8 @@ String MIMETypeRegistry::getPreferredExtensionForMIMEType(const String& type)
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
if (ext.isEmpty())
return String();
diff --git a/Source/WebCore/platform/win/PopupMenuWin.cpp b/Source/WebCore/platform/win/PopupMenuWin.cpp
index 15871e6..3f3afa2 100644
--- a/Source/WebCore/platform/win/PopupMenuWin.cpp
+++ b/Source/WebCore/platform/win/PopupMenuWin.cpp
@@ -42,7 +42,6 @@
#include "SimpleFontData.h"
#include "TextRun.h"
#include "WebCoreInstanceHandle.h"
-#include <tchar.h>
#include <windows.h>
#include <windowsx.h>
#if OS(WINCE)
@@ -64,7 +63,7 @@ static const int maxPopupHeight = 320;
const int optionSpacingMiddle = 1;
const int popupWindowBorderWidth = 1;
-static LPCTSTR kPopupWindowClassName = _T("PopupWindowClass");
+static LPCWSTR kPopupWindowClassName = L"PopupWindowClass";
// This is used from within our custom message pump when we want to send a
// message to the web view and not have our message stolen and sent to
@@ -121,7 +120,7 @@ void PopupMenuWin::disconnectClient()
m_popupClient = 0;
}
-LPCTSTR PopupMenuWin::popupClassName()
+LPCWSTR PopupMenuWin::popupClassName()
{
return kPopupWindowClassName;
}
@@ -145,7 +144,7 @@ void PopupMenuWin::show(const IntRect& r, FrameView* view, int index)
DWORD exStyle = WS_EX_LTRREADING;
- m_popup = ::CreateWindowEx(exStyle, kPopupWindowClassName, _T("PopupMenu"),
+ m_popup = ::CreateWindowExW(exStyle, kPopupWindowClassName, L"PopupMenu",
WS_POPUP | WS_BORDER,
m_windowRect.x(), m_windowRect.y(), m_windowRect.width(), m_windowRect.height(),
hostWindow, 0, WebCore::instanceHandle(), this);
@@ -306,7 +305,7 @@ void PopupMenuWin::calculatePositionAndSize(const IntRect& r, FrameView* v)
// First, determine the popup's height
int itemCount = client()->listSize();
- m_itemHeight = client()->menuStyle().font().height() + optionSpacingMiddle;
+ m_itemHeight = client()->menuStyle().font().fontMetrics().height() + optionSpacingMiddle;
int naturalHeight = m_itemHeight * itemCount;
int popupHeight = min(maxPopupHeight, naturalHeight);
// The popup should show an integral number of items (i.e. no partial items should be visible)
@@ -347,13 +346,13 @@ void PopupMenuWin::calculatePositionAndSize(const IntRect& r, FrameView* v)
// Always left-align items in the popup. This matches popup menus on the mac.
int popupX = rScreenCoords.x() + client()->clientInsetLeft();
- IntRect popupRect(popupX, rScreenCoords.bottom(), popupWidth, popupHeight);
+ IntRect popupRect(popupX, rScreenCoords.maxY(), popupWidth, popupHeight);
// The popup needs to stay within the bounds of the screen and not overlap any toolbars
FloatRect screen = screenAvailableRect(v);
// Check that we don't go off the screen vertically
- if (popupRect.bottom() > screen.height()) {
+ if (popupRect.maxY() > screen.height()) {
// The popup will go off the screen, so try placing it above the client
if (rScreenCoords.y() - popupRect.height() < 0) {
// The popup won't fit above, either, so place it whereever's bigger and resize it to fit
@@ -602,7 +601,7 @@ void PopupMenuWin::paint(const IntRect& damageRect, HDC hdc)
IntRect listRect = damageRect;
listRect.move(IntSize(0, m_scrollOffset * m_itemHeight));
- for (int y = listRect.y(); y < listRect.bottom(); y += m_itemHeight) {
+ for (int y = listRect.y(); y < listRect.maxY(); y += m_itemHeight) {
int index = y / m_itemHeight;
Color optionBackgroundColor, optionTextColor;
@@ -632,7 +631,7 @@ void PopupMenuWin::paint(const IntRect& damageRect, HDC hdc)
unsigned length = itemText.length();
const UChar* string = itemText.characters();
- TextRun textRun(string, length, false, 0, 0, itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft);
+ TextRun textRun(string, length, false, 0, 0, TextRun::AllowTrailingExpansion, itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft);
context.setFillColor(optionTextColor, ColorSpaceDeviceRGB);
@@ -649,7 +648,7 @@ void PopupMenuWin::paint(const IntRect& damageRect, HDC hdc)
int textX = max(0, client()->clientPaddingLeft() - client()->clientInsetLeft());
if (RenderTheme::defaultTheme()->popupOptionSupportsTextIndent() && itemStyle.textDirection() == LTR)
textX += itemStyle.textIndent().calcMinValue(itemRect.width());
- int textY = itemRect.y() + itemFont.ascent() + (itemRect.height() - itemFont.height()) / 2;
+ int textY = itemRect.y() + itemFont.fontMetrics().ascent() + (itemRect.height() - itemFont.fontMetrics().height()) / 2;
context.drawBidiText(itemFont, textRun, IntPoint(textX, textY));
}
}
diff --git a/Source/WebCore/platform/win/PopupMenuWin.h b/Source/WebCore/platform/win/PopupMenuWin.h
index 0d7630c..05edb07 100644
--- a/Source/WebCore/platform/win/PopupMenuWin.h
+++ b/Source/WebCore/platform/win/PopupMenuWin.h
@@ -49,7 +49,7 @@ public:
virtual void updateFromElement();
virtual void disconnectClient();
- static LPCTSTR popupClassName();
+ static LPCWSTR popupClassName();
private:
PopupMenuClient* client() const { return m_popupClient; }
diff --git a/Source/WebCore/platform/win/SystemTimeWin.cpp b/Source/WebCore/platform/win/SystemTimeWin.cpp
index 451262d..547decc 100644
--- a/Source/WebCore/platform/win/SystemTimeWin.cpp
+++ b/Source/WebCore/platform/win/SystemTimeWin.cpp
@@ -26,13 +26,9 @@
#include "config.h"
#include "SystemTime.h"
+#include <limits>
#include <windows.h>
-#if COMPILER(MINGW) || (PLATFORM(QT) && COMPILER(MSVC))
-#include <float.h>
-#define FLOAT_MAX FLT_MAX
-#endif
-
namespace WebCore {
float userIdleTime()
@@ -43,7 +39,8 @@ float userIdleTime()
if (::GetLastInputInfo(&lastInputInfo))
return (GetTickCount() - lastInputInfo.dwTime) * 0.001; // ::GetTickCount returns ms of uptime valid for up to 49.7 days.
#endif
- return FLT_MAX; // return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed.
+ // Return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed.
+ return std::numeric_limits<float>::max();
}
-}
+} // namespace WebCore
diff --git a/Source/WebCore/platform/win/WCDataObject.cpp b/Source/WebCore/platform/win/WCDataObject.cpp
index 6b4c859..0c03ce0 100644
--- a/Source/WebCore/platform/win/WCDataObject.cpp
+++ b/Source/WebCore/platform/win/WCDataObject.cpp
@@ -26,6 +26,8 @@
#include "config.h"
#include "WCDataObject.h"
+#include "ClipboardUtilitiesWin.h"
+#include "DragData.h"
#include "PlatformString.h"
namespace WebCore {
@@ -160,6 +162,17 @@ HRESULT WCDataObject::createInstance(WCDataObject** result)
return S_OK;
}
+HRESULT WCDataObject::createInstance(WCDataObject** result, const DragDataMap& dataMap)
+{
+ if (!result)
+ return E_POINTER;
+ *result = new WCDataObject;
+
+ for (DragDataMap::const_iterator it = dataMap.begin(); it != dataMap.end(); ++it)
+ setClipboardData(*result, it->first, it->second);
+ return S_OK;
+}
+
WCDataObject::WCDataObject()
: m_ref(1)
{
@@ -380,5 +393,4 @@ void WCDataObject::clearData(CLIPFORMAT format)
}
}
-
}
diff --git a/Source/WebCore/platform/win/WCDataObject.h b/Source/WebCore/platform/win/WCDataObject.h
index 133115d..e5fa298 100644
--- a/Source/WebCore/platform/win/WCDataObject.h
+++ b/Source/WebCore/platform/win/WCDataObject.h
@@ -26,10 +26,11 @@
#ifndef WCDataObject_h
#define WCDataObject_h
-#include <wtf/Forward.h>
-#include <wtf/Vector.h>
+#include "DragData.h"
#include <ShlObj.h>
#include <objidl.h>
+#include <wtf/Forward.h>
+#include <wtf/Vector.h>
namespace WebCore {
@@ -56,6 +57,7 @@ public:
void clearData(CLIPFORMAT);
static HRESULT createInstance(WCDataObject**);
+ static HRESULT createInstance(WCDataObject**, const DragDataMap&);
private:
WCDataObject();
virtual ~WCDataObject();
diff --git a/Source/WebCore/platform/wince/DragDataWinCE.cpp b/Source/WebCore/platform/wince/DragDataWinCE.cpp
index 8f531c7..679229d 100644
--- a/Source/WebCore/platform/wince/DragDataWinCE.cpp
+++ b/Source/WebCore/platform/wince/DragDataWinCE.cpp
@@ -32,6 +32,11 @@ bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) cons
return false;
}
+const DragDataMap& DragData::dragDataMap()
+{
+ return m_dragDataMap;
+}
+
String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const
{
return String();
diff --git a/Source/WebCore/platform/wince/KeygenWinCE.cpp b/Source/WebCore/platform/wince/KeygenWinCE.cpp
index 0c1b3c6..8537f44 100644
--- a/Source/WebCore/platform/wince/KeygenWinCE.cpp
+++ b/Source/WebCore/platform/wince/KeygenWinCE.cpp
@@ -80,10 +80,7 @@ String WebCore::signedPublicKeyAndChallengeString(unsigned index, const String&
if (!CryptSignAndEncodeCertificate(hContext, AT_KEYEXCHANGE, X509_ASN_ENCODING, X509_KEYGEN_REQUEST_TO_BE_SIGNED, &requestInfo, &signAlgo, 0, reinterpret_cast<LPBYTE>(binary.data()), &dwEncodedLength))
break;
- Vector<char> base64;
- base64Encode(binary, base64);
- keyString = String(base64.data(), base64.size());
-
+ keyString = base64Encode(binary);
} while(0);
if (pPubInfo)
diff --git a/Source/WebCore/platform/wince/MIMETypeRegistryWinCE.cpp b/Source/WebCore/platform/wince/MIMETypeRegistryWinCE.cpp
index 7534b91..8a7ac8f 100644
--- a/Source/WebCore/platform/wince/MIMETypeRegistryWinCE.cpp
+++ b/Source/WebCore/platform/wince/MIMETypeRegistryWinCE.cpp
@@ -27,7 +27,9 @@
#include "config.h"
#include "MIMETypeRegistry.h"
+#include <wtf/Assertions.h>
#include <wtf/HashMap.h>
+#include <wtf/MainThread.h>
#include <windows.h>
#include <winreg.h>
@@ -119,6 +121,8 @@ String MIMETypeRegistry::getPreferredExtensionForMIMEType(const String& type)
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
if (ext.isEmpty())
return String();
diff --git a/Source/WebCore/platform/wx/MimeTypeRegistryWx.cpp b/Source/WebCore/platform/wx/MimeTypeRegistryWx.cpp
index e7cc0e2..94a815e 100644
--- a/Source/WebCore/platform/wx/MimeTypeRegistryWx.cpp
+++ b/Source/WebCore/platform/wx/MimeTypeRegistryWx.cpp
@@ -28,6 +28,9 @@
#include "config.h"
#include "MIMETypeRegistry.h"
+#include <wtf/Assertions.h>
+#include <wtf/MainThread.h>
+
namespace WebCore {
struct ExtensionMap {
@@ -59,6 +62,8 @@ static const ExtensionMap extensionMap [] = {
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
+ ASSERT(isMainThread());
+
String s = ext.lower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
diff --git a/Source/WebCore/platform/wx/RenderThemeWx.cpp b/Source/WebCore/platform/wx/RenderThemeWx.cpp
index c68bde9..a34e2d4 100644
--- a/Source/WebCore/platform/wx/RenderThemeWx.cpp
+++ b/Source/WebCore/platform/wx/RenderThemeWx.cpp
@@ -31,6 +31,7 @@
#include "GraphicsContext.h"
#include "HostWindow.h"
#include "NotImplemented.h"
+#include "PaintInfo.h"
#include "RenderView.h"
#include <wx/defs.h>
diff --git a/Source/WebCore/platform/wx/SystemTimeWx.cpp b/Source/WebCore/platform/wx/SystemTimeWx.cpp
index f607cba..668ec00 100644
--- a/Source/WebCore/platform/wx/SystemTimeWx.cpp
+++ b/Source/WebCore/platform/wx/SystemTimeWx.cpp
@@ -26,18 +26,16 @@
#include "config.h"
#include "SystemTime.h"
-#include <float.h>
-
#include "NotImplemented.h"
+#include <limits>
namespace WebCore {
float userIdleTime()
{
notImplemented();
- // return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed
- return FLT_MAX;
-}
-
+ // Return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed.
+ return std::numeric_limits<float>::max();
}
+} // namespace WebCore
diff --git a/Source/WebCore/plugins/IFrameShimSupport.cpp b/Source/WebCore/plugins/IFrameShimSupport.cpp
new file mode 100644
index 0000000..3deaf09
--- /dev/null
+++ b/Source/WebCore/plugins/IFrameShimSupport.cpp
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "IFrameShimSupport.h"
+
+#include "Element.h"
+#include "FrameView.h"
+#include "HTMLElement.h"
+#include "HTMLFrameOwnerElement.h"
+#include "HTMLNames.h"
+#include "RenderBox.h"
+#include "RenderObject.h"
+#include "Widget.h"
+
+#include <wtf/HashSet.h>
+
+// This file provides plugin-related utility functions for iframe shims and is shared by platforms that inherit
+// from PluginView (e.g. Qt) and those that do not (e.g. Chromium).
+
+namespace WebCore {
+
+static void getObjectStack(const RenderObject* ro, Vector<const RenderObject*>* roStack)
+{
+ roStack->clear();
+ while (ro) {
+ roStack->append(ro);
+ ro = ro->parent();
+ }
+}
+
+// Returns true if stack1 is at or above stack2
+static bool iframeIsAbovePlugin(const Vector<const RenderObject*>& iframeZstack, const Vector<const RenderObject*>& pluginZstack)
+{
+ for (size_t i = 0; i < iframeZstack.size() && i < pluginZstack.size(); i++) {
+ // The root is at the end of these stacks. We want to iterate
+ // root-downwards so we index backwards from the end.
+ const RenderObject* ro1 = iframeZstack[iframeZstack.size() - 1 - i];
+ const RenderObject* ro2 = pluginZstack[pluginZstack.size() - 1 - i];
+
+ if (ro1 != ro2) {
+ // When we find nodes in the stack that are not the same, then
+ // we've found the nodes just below the lowest comment ancestor.
+ // Determine which should be on top.
+
+ // See if z-index determines an order.
+ if (ro1->style() && ro2->style()) {
+ int z1 = ro1->style()->zIndex();
+ int z2 = ro2->style()->zIndex();
+ if (z1 > z2)
+ return true;
+ if (z1 < z2)
+ return false;
+ }
+
+ // If the plugin does not have an explicit z-index it stacks behind the iframe.
+ // This is for maintaining compatibility with IE.
+ if (ro2->style()->position() == StaticPosition) {
+ // The 0'th elements of these RenderObject arrays represent the plugin node and
+ // the iframe.
+ const RenderObject* pluginRenderObject = pluginZstack[0];
+ const RenderObject* iframeRenderObject = iframeZstack[0];
+
+ if (pluginRenderObject->style() && iframeRenderObject->style()) {
+ if (pluginRenderObject->style()->zIndex() > iframeRenderObject->style()->zIndex())
+ return false;
+ }
+ return true;
+ }
+
+ // Inspect the document order. Later order means higher stacking.
+ const RenderObject* parent = ro1->parent();
+ if (!parent)
+ return false;
+ ASSERT(parent == ro2->parent());
+
+ for (const RenderObject* ro = parent->firstChild(); ro; ro = ro->nextSibling()) {
+ if (ro == ro1)
+ return false;
+ if (ro == ro2)
+ return true;
+ }
+ ASSERT(false); // We should have seen ro1 and ro2 by now.
+ return false;
+ }
+ }
+ return true;
+}
+
+// Return a set of rectangles that should not be overdrawn by the
+// plugin ("cutouts"). This helps implement the "iframe shim"
+// technique of overlaying a windowed plugin with content from the
+// page. In a nutshell, iframe elements should occlude plugins when
+// they occur higher in the stacking order.
+void getPluginOcclusions(Element* element, Widget* parentWidget, const IntRect& frameRect, Vector<IntRect>& occlusions)
+{
+ RenderObject* pluginNode = element->renderer();
+ ASSERT(pluginNode);
+ if (!pluginNode->style())
+ return;
+ Vector<const RenderObject*> pluginZstack;
+ Vector<const RenderObject*> iframeZstack;
+ getObjectStack(pluginNode, &pluginZstack);
+
+ if (!parentWidget->isFrameView())
+ return;
+
+ FrameView* parentFrameView = static_cast<FrameView*>(parentWidget);
+
+ const HashSet<RefPtr<Widget> >* children = parentFrameView->children();
+ for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(); it != children->end(); ++it) {
+ // We only care about FrameView's because iframes show up as FrameViews.
+ if (!(*it)->isFrameView())
+ continue;
+
+ const FrameView* frameView = static_cast<const FrameView*>((*it).get());
+ // Check to make sure we can get both the element and the RenderObject
+ // for this FrameView, if we can't just move on to the next object.
+ if (!frameView->frame() || !frameView->frame()->ownerElement()
+ || !frameView->frame()->ownerElement()->renderer())
+ continue;
+
+ HTMLElement* element = frameView->frame()->ownerElement();
+ RenderObject* iframeRenderer = element->renderer();
+
+ if (element->hasTagName(HTMLNames::iframeTag)
+ && iframeRenderer->absoluteBoundingBoxRect().intersects(frameRect)
+ && (!iframeRenderer->style() || iframeRenderer->style()->visibility() == VISIBLE)) {
+ getObjectStack(iframeRenderer, &iframeZstack);
+ if (iframeIsAbovePlugin(iframeZstack, pluginZstack)) {
+ IntPoint point = roundedIntPoint(iframeRenderer->localToAbsolute());
+ RenderBox* rbox = toRenderBox(iframeRenderer);
+ IntSize size(rbox->width(), rbox->height());
+ occlusions.append(IntRect(point, size));
+ }
+ }
+ }
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/plugins/IFrameShimSupport.h b/Source/WebCore/plugins/IFrameShimSupport.h
new file mode 100644
index 0000000..6e55126
--- /dev/null
+++ b/Source/WebCore/plugins/IFrameShimSupport.h
@@ -0,0 +1,34 @@
+/*
+ Copyright (C) 2011 Robert Hogan <robert@roberthogan.net>.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef IFrameShimSupport_h
+#define IFrameShimSupport_h
+
+#include <wtf/Vector.h>
+
+namespace WebCore {
+class Element;
+class Widget;
+class IntRect;
+
+void getPluginOcclusions(Element*, Widget* parentWidget, const IntRect& frameRect, Vector<IntRect>& occlusions);
+
+} // namespace WebCore
+
+#endif // IFrameShimSupport_h
diff --git a/Source/WebCore/plugins/gtk/PluginPackageGtk.cpp b/Source/WebCore/plugins/gtk/PluginPackageGtk.cpp
index a702296..26409a7 100644
--- a/Source/WebCore/plugins/gtk/PluginPackageGtk.cpp
+++ b/Source/WebCore/plugins/gtk/PluginPackageGtk.cpp
@@ -104,6 +104,22 @@ bool PluginPackage::fetchInfo()
#endif
}
+#if defined(XP_UNIX)
+static int webkitgtkXError(Display* xdisplay, XErrorEvent* error)
+{
+ gchar errorMessage[64];
+ XGetErrorText(xdisplay, error->error_code, errorMessage, 63);
+ g_warning("The program '%s' received an X Window System error.\n"
+ "This probably reflects a bug in the Adobe Flash plugin.\n"
+ "The error was '%s'.\n"
+ " (Details: serial %ld error_code %d request_code %d minor_code %d)\n",
+ g_get_prgname(), errorMessage,
+ error->serial, error->error_code,
+ error->request_code, error->minor_code);
+ return 0;
+}
+#endif
+
bool PluginPackage::load()
{
if (m_isLoaded) {
@@ -137,6 +153,15 @@ bool PluginPackage::load()
m_isLoaded = true;
+#if defined(XP_UNIX)
+ if (!g_strcmp0(baseName.get(), "libflashplayer.so")) {
+ // Flash plugin can produce X errors that are handled by the GDK X error handler, which
+ // exits the process. Since we don't want to crash due to flash bugs, we install a
+ // custom error handler to show a warning when a X error happens without aborting.
+ XSetErrorHandler(webkitgtkXError);
+ }
+#endif
+
NP_InitializeFuncPtr NP_Initialize = 0;
m_NPP_Shutdown = 0;
diff --git a/Source/WebCore/plugins/gtk/gtk2xtbin.c b/Source/WebCore/plugins/gtk/gtk2xtbin.c
index e03fad3..605e42c 100644
--- a/Source/WebCore/plugins/gtk/gtk2xtbin.c
+++ b/Source/WebCore/plugins/gtk/gtk2xtbin.c
@@ -46,7 +46,9 @@
#include "xembed.h"
#include "gtk2xtbin.h"
#include <gtk/gtk.h>
+#ifdef GTK_API_VERSION_2
#include <gdk/gdkx.h>
+#endif
#include <glib.h>
#include <assert.h>
#include <sys/time.h>
diff --git a/Source/WebCore/plugins/gtk/gtk2xtbin.h b/Source/WebCore/plugins/gtk/gtk2xtbin.h
index 11f6e06..937cd77 100644
--- a/Source/WebCore/plugins/gtk/gtk2xtbin.h
+++ b/Source/WebCore/plugins/gtk/gtk2xtbin.h
@@ -41,6 +41,9 @@
#define __GTK_XTBIN_H__
#include <gtk/gtk.h>
+#ifndef GTK_API_VERSION_2
+#include <gtk/gtkx.h>
+#endif
#include <X11/Intrinsic.h>
#include <X11/Xutil.h>
#include <X11/Xlib.h>
diff --git a/Source/WebCore/plugins/qt/PluginViewQt.cpp b/Source/WebCore/plugins/qt/PluginViewQt.cpp
index 579f77d..4dc4e15 100644
--- a/Source/WebCore/plugins/qt/PluginViewQt.cpp
+++ b/Source/WebCore/plugins/qt/PluginViewQt.cpp
@@ -47,6 +47,7 @@
#include "HTMLNames.h"
#include "HTMLPlugInElement.h"
#include "HostWindow.h"
+#include "IFrameShimSupport.h"
#include "Image.h"
#if USE(JSC)
#include "JSDOMBinding.h"
@@ -627,10 +628,19 @@ void PluginView::setNPWindowIfNeeded()
if (m_isWindowed) {
platformPluginWidget()->setGeometry(m_windowRect);
+
+ // Cut out areas of the plugin occluded by iframe shims
+ Vector<IntRect> cutOutRects;
+ QRegion clipRegion = QRegion(m_clipRect);
+ getPluginOcclusions(m_element, this->parent(), frameRect(), cutOutRects);
+ for (size_t i = 0; i < cutOutRects.size(); i++) {
+ cutOutRects[i].move(-frameRect().x(), -frameRect().y());
+ clipRegion = clipRegion.subtracted(QRegion(cutOutRects[i]));
+ }
// if setMask is set with an empty QRegion, no clipping will
// be performed, so in that case we hide the plugin view
- platformPluginWidget()->setVisible(!m_clipRect.isEmpty());
- platformPluginWidget()->setMask(QRegion(m_clipRect));
+ platformPluginWidget()->setVisible(!clipRegion.isEmpty());
+ platformPluginWidget()->setMask(clipRegion);
m_npWindow.x = m_windowRect.x();
m_npWindow.y = m_windowRect.y();
diff --git a/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp b/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp
index a14ac20..34aec4c 100644
--- a/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp
+++ b/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp
@@ -29,6 +29,7 @@
namespace WebCore {
+#if ENABLE(NETSCAPE_PLUGIN_API)
bool PluginPackage::fetchInfo()
{
if (!load())
@@ -169,6 +170,7 @@ bool PluginPackage::load()
m_loadCount++;
return true;
}
+#endif
void PluginPackage::unload()
{
@@ -186,9 +188,11 @@ void PluginPackage::unload()
m_pluginLoader = 0;
}
+#if ENABLE(NETSCAPE_PLUGIN_API)
uint16_t PluginPackage::NPVersion() const
{
return NP_VERSION_MINOR;
}
+#endif
}
diff --git a/Source/WebCore/plugins/win/PluginPackageWin.cpp b/Source/WebCore/plugins/win/PluginPackageWin.cpp
index 74bd2a9..e06d1f4 100644
--- a/Source/WebCore/plugins/win/PluginPackageWin.cpp
+++ b/Source/WebCore/plugins/win/PluginPackageWin.cpp
@@ -168,7 +168,7 @@ bool PluginPackage::fetchInfo()
if (versionInfoSize == 0)
return false;
- OwnArrayPtr<char> versionInfoData(new char[versionInfoSize]);
+ OwnArrayPtr<char> versionInfoData = adoptArrayPtr(new char[versionInfoSize]);
if (!GetFileVersionInfoW(const_cast<UChar*>(m_path.charactersWithNullTermination()),
0, versionInfoSize, versionInfoData.get()))
diff --git a/Source/WebCore/plugins/win/PluginViewWin.cpp b/Source/WebCore/plugins/win/PluginViewWin.cpp
index 3cd1902..208121e 100644
--- a/Source/WebCore/plugins/win/PluginViewWin.cpp
+++ b/Source/WebCore/plugins/win/PluginViewWin.cpp
@@ -448,7 +448,7 @@ void PluginView::updatePluginWidget()
rgn = ::CreateRectRgn(0, 0, 0, 0);
::SetWindowRgn(platformPluginWidget(), rgn, FALSE);
} else {
- rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.right(), m_clipRect.bottom());
+ rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
::SetWindowRgn(platformPluginWidget(), rgn, TRUE);
}
@@ -456,7 +456,7 @@ void PluginView::updatePluginWidget()
::MoveWindow(platformPluginWidget(), m_windowRect.x(), m_windowRect.y(), m_windowRect.width(), m_windowRect.height(), TRUE);
if (clipToZeroRect) {
- rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.right(), m_clipRect.bottom());
+ rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
::SetWindowRgn(platformPluginWidget(), rgn, TRUE);
}
@@ -896,7 +896,7 @@ bool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* re
void PluginView::invalidateRect(const IntRect& rect)
{
if (m_isWindowed) {
- RECT invalidRect = { rect.x(), rect.y(), rect.right(), rect.bottom() };
+ RECT invalidRect = { rect.x(), rect.y(), rect.maxX(), rect.maxY() };
::InvalidateRect(platformPluginWidget(), &invalidRect, false);
return;
}
@@ -914,7 +914,7 @@ void PluginView::invalidateRect(NPRect* rect)
IntRect r(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top);
if (m_isWindowed) {
- RECT invalidRect = { r.x(), r.y(), r.right(), r.bottom() };
+ RECT invalidRect = { r.x(), r.y(), r.maxX(), r.maxY() };
InvalidateRect(platformPluginWidget(), &invalidRect, FALSE);
} else {
if (m_plugin->quirks().contains(PluginQuirkThrottleInvalidate)) {
diff --git a/Source/WebCore/rendering/CounterNode.cpp b/Source/WebCore/rendering/CounterNode.cpp
index fe2148a..eadd386 100644
--- a/Source/WebCore/rendering/CounterNode.cpp
+++ b/Source/WebCore/rendering/CounterNode.cpp
@@ -263,7 +263,7 @@ static void showTreeAndMark(const CounterNode* node)
#ifndef NDEBUG
-void showTree(const WebCore::CounterNode* counter)
+void showCounterTree(const WebCore::CounterNode* counter)
{
if (counter)
showTreeAndMark(counter);
diff --git a/Source/WebCore/rendering/CounterNode.h b/Source/WebCore/rendering/CounterNode.h
index 529d409..639946c 100644
--- a/Source/WebCore/rendering/CounterNode.h
+++ b/Source/WebCore/rendering/CounterNode.h
@@ -94,7 +94,7 @@ private:
#ifndef NDEBUG
// Outside the WebCore namespace for ease of invocation from gdb.
-void showTree(const WebCore::CounterNode*);
+void showCounterTree(const WebCore::CounterNode*);
#endif
#endif // CounterNode_h
diff --git a/Source/WebCore/rendering/EllipsisBox.cpp b/Source/WebCore/rendering/EllipsisBox.cpp
index d367c07..db66b43 100644
--- a/Source/WebCore/rendering/EllipsisBox.cpp
+++ b/Source/WebCore/rendering/EllipsisBox.cpp
@@ -53,7 +53,7 @@ void EllipsisBox::paint(PaintInfo& paintInfo, int tx, int ty)
}
const String& str = m_str;
- context->drawText(style->font(), TextRun(str.characters(), str.length(), false, 0, 0, false, style->visuallyOrdered()), IntPoint(m_x + tx, m_y + ty + style->font().ascent()));
+ context->drawText(style->font(), TextRun(str.characters(), str.length(), false, 0, 0, TextRun::AllowTrailingExpansion, false, style->visuallyOrdered()), IntPoint(m_x + tx, m_y + ty + style->fontMetrics().ascent()));
// Restore the regular fill color.
if (textColor != context->fillColor())
@@ -65,7 +65,7 @@ void EllipsisBox::paint(PaintInfo& paintInfo, int tx, int ty)
if (m_markupBox) {
// Paint the markup box
tx += m_x + m_logicalWidth - m_markupBox->x();
- ty += m_y + style->font().ascent() - (m_markupBox->y() + m_markupBox->renderer()->style(m_firstLine)->font().ascent());
+ ty += m_y + style->fontMetrics().ascent() - (m_markupBox->y() + m_markupBox->renderer()->style(m_firstLine)->fontMetrics().ascent());
m_markupBox->paint(paintInfo, tx, ty);
}
}
@@ -74,7 +74,7 @@ IntRect EllipsisBox::selectionRect(int tx, int ty)
{
RenderStyle* style = m_renderer->style(m_firstLine);
const Font& f = style->font();
- return enclosingIntRect(f.selectionRectForText(TextRun(m_str.characters(), m_str.length(), false, 0, 0, false, style->visuallyOrdered()),
+ return enclosingIntRect(f.selectionRectForText(TextRun(m_str.characters(), m_str.length(), false, 0, 0, TextRun::AllowTrailingExpansion, false, style->visuallyOrdered()),
IntPoint(m_x + tx, m_y + ty + root()->selectionTop()), root()->selectionHeight()));
}
@@ -94,7 +94,7 @@ void EllipsisBox::paintSelection(GraphicsContext* context, int tx, int ty, Rende
int y = root()->selectionTop();
int h = root()->selectionHeight();
context->clip(IntRect(m_x + tx, y + ty, m_logicalWidth, h));
- context->drawHighlightForText(font, TextRun(m_str.characters(), m_str.length(), false, 0, 0, false, style->visuallyOrdered()),
+ context->drawHighlightForText(font, TextRun(m_str.characters(), m_str.length(), false, 0, 0, TextRun::AllowTrailingExpansion, false, style->visuallyOrdered()),
IntPoint(m_x + tx, m_y + ty + y), h, c, style->colorSpace());
context->restore();
}
@@ -108,7 +108,7 @@ bool EllipsisBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
if (m_markupBox) {
RenderStyle* style = m_renderer->style(m_firstLine);
int mtx = tx + m_logicalWidth - m_markupBox->x();
- int mty = ty + style->font().ascent() - (m_markupBox->y() + m_markupBox->renderer()->style(m_firstLine)->font().ascent());
+ int mty = ty + style->fontMetrics().ascent() - (m_markupBox->y() + m_markupBox->renderer()->style(m_firstLine)->fontMetrics().ascent());
if (m_markupBox->nodeAtPoint(request, result, x, y, mtx, mty)) {
renderer()->updateHitTestResult(result, IntPoint(x - mtx, y - mty));
return true;
diff --git a/Source/WebCore/rendering/InlineBox.cpp b/Source/WebCore/rendering/InlineBox.cpp
index bbf5a748..4fcbe2d 100644
--- a/Source/WebCore/rendering/InlineBox.cpp
+++ b/Source/WebCore/rendering/InlineBox.cpp
@@ -94,14 +94,14 @@ int InlineBox::logicalHeight() const
#endif
if (renderer()->isText())
- return m_isText ? renderer()->style(m_firstLine)->font().height() : 0;
+ return m_isText ? renderer()->style(m_firstLine)->fontMetrics().height() : 0;
if (renderer()->isBox() && parent())
return isHorizontal() ? toRenderBox(m_renderer)->height() : toRenderBox(m_renderer)->width();
ASSERT(isInlineFlowBox());
RenderBoxModelObject* flowObject = boxModelObject();
- const Font& font = renderer()->style(m_firstLine)->font();
- int result = font.height();
+ const FontMetrics& fontMetrics = renderer()->style(m_firstLine)->fontMetrics();
+ int result = fontMetrics.height();
if (parent())
result += flowObject->borderAndPaddingLogicalHeight();
return result;
diff --git a/Source/WebCore/rendering/InlineBox.h b/Source/WebCore/rendering/InlineBox.h
index 5b3f682..d486ec0 100644
--- a/Source/WebCore/rendering/InlineBox.h
+++ b/Source/WebCore/rendering/InlineBox.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -61,7 +61,7 @@ public:
, m_determinedIfPrevOnLineExists(false)
, m_nextOnLineExists(false)
, m_prevOnLineExists(false)
- , m_toAdd(0)
+ , m_expansion(0)
#ifndef NDEBUG
, m_hasBadParent(false)
#endif
@@ -95,7 +95,7 @@ public:
, m_determinedIfPrevOnLineExists(false)
, m_nextOnLineExists(false)
, m_prevOnLineExists(false)
- , m_toAdd(0)
+ , m_expansion(0)
#ifndef NDEBUG
, m_hasBadParent(false)
#endif
@@ -290,7 +290,7 @@ public:
void setHasBadParent();
- int toAdd() const { return m_toAdd; }
+ int expansion() const { return m_expansion; }
bool visibleToHitTesting() const { return renderer()->style()->visibility() == VISIBLE && renderer()->style()->pointerEvents() != PE_NONE; }
@@ -348,7 +348,7 @@ protected:
mutable bool m_determinedIfPrevOnLineExists : 1;
mutable bool m_nextOnLineExists : 1;
mutable bool m_prevOnLineExists : 1;
- int m_toAdd : 11; // for justified text
+ int m_expansion : 11; // for justified text
#ifndef NDEBUG
private:
diff --git a/Source/WebCore/rendering/InlineFlowBox.cpp b/Source/WebCore/rendering/InlineFlowBox.cpp
index 75b23c5..aa9fcb5 100644
--- a/Source/WebCore/rendering/InlineFlowBox.cpp
+++ b/Source/WebCore/rendering/InlineFlowBox.cpp
@@ -408,6 +408,7 @@ static int verticalPositionForBox(InlineBox* box, FontBaseline baselineType, boo
if (verticalAlign != BASELINE) {
const Font& font = parent->style(firstLine)->font();
+ const FontMetrics& fontMetrics = font.fontMetrics();
int fontSize = font.pixelSize();
LineDirectionMode lineDirection = parent->style()->isHorizontalWritingMode() ? HorizontalLine : VerticalLine;
@@ -417,11 +418,11 @@ static int verticalPositionForBox(InlineBox* box, FontBaseline baselineType, boo
else if (verticalAlign == SUPER)
verticalPosition -= fontSize / 3 + 1;
else if (verticalAlign == TEXT_TOP)
- verticalPosition += renderer->baselinePosition(baselineType, firstLine, lineDirection) - font.ascent(baselineType);
+ verticalPosition += renderer->baselinePosition(baselineType, firstLine, lineDirection) - fontMetrics.ascent(baselineType);
else if (verticalAlign == MIDDLE)
- verticalPosition += -static_cast<int>(font.xHeight() / 2) - renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType, firstLine, lineDirection);
+ verticalPosition += -static_cast<int>(fontMetrics.xHeight() / 2) - renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType, firstLine, lineDirection);
else if (verticalAlign == TEXT_BOTTOM) {
- verticalPosition += font.descent(baselineType);
+ verticalPosition += fontMetrics.descent(baselineType);
// lineHeight - baselinePosition is always 0 for replaced elements (except inline blocks), so don't bother wasting time in that case.
if (!renderer->isReplaced() || renderer->isInlineBlockOrInlineTable())
verticalPosition -= (renderer->lineHeight(firstLine, lineDirection) - renderer->baselinePosition(baselineType, firstLine, lineDirection));
@@ -503,9 +504,10 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
baseline = 0;
int baselineToBottom = 0;
for (size_t i = 0; i < usedFonts->size(); ++i) {
- int halfLeading = (usedFonts->at(i)->lineSpacing() - usedFonts->at(i)->height()) / 2;
- int usedFontBaseline = halfLeading + usedFonts->at(i)->ascent(baselineType);
- int usedFontBaselineToBottom = usedFonts->at(i)->lineSpacing() - usedFontBaseline;
+ const FontMetrics& fontMetrics = usedFonts->at(i)->fontMetrics();
+ int halfLeading = (fontMetrics.lineSpacing() - fontMetrics.height()) / 2;
+ int usedFontBaseline = halfLeading + fontMetrics.ascent(baselineType);
+ int usedFontBaselineToBottom = fontMetrics.lineSpacing() - usedFontBaseline;
if (!baselineSet) {
baselineSet = true;
baseline = usedFontBaseline;
@@ -515,9 +517,9 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
baselineToBottom = max(baselineToBottom, usedFontBaselineToBottom);
}
if (!affectsAscent)
- affectsAscent = usedFonts->at(i)->ascent() - curr->logicalTop() > 0;
+ affectsAscent = fontMetrics.ascent() - curr->logicalTop() > 0;
if (!affectsDescent)
- affectsDescent = usedFonts->at(i)->descent() + curr->logicalTop() > 0;
+ affectsDescent = fontMetrics.descent() + curr->logicalTop() > 0;
}
lineHeight = baseline + baselineToBottom;
} else {
@@ -527,11 +529,12 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
// Examine the font box for inline flows and text boxes to see if any part of it is above the baseline.
// If the top of our font box relative to the root box baseline is above the root box baseline, then
// we are contributing to the maxAscent value.
- affectsAscent = curr->renderer()->style(m_firstLine)->font().ascent(baselineType) - curr->logicalTop() > 0;
+ const FontMetrics& fontMetrics = curr->renderer()->style(m_firstLine)->fontMetrics();
+ affectsAscent = fontMetrics.ascent(baselineType) - curr->logicalTop() > 0;
// Descent is similar. If any part of our font box is below the root box's baseline, then
// we contribute to the maxDescent value.
- affectsDescent = curr->renderer()->style(m_firstLine)->font().descent(baselineType) + curr->logicalTop() > 0;
+ affectsDescent = fontMetrics.descent(baselineType) + curr->logicalTop() > 0;
} else {
// Replaced elements always affect both the ascent and descent.
affectsAscent = true;
@@ -601,13 +604,13 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
}
int newLogicalTop = curr->logicalTop();
- int newLogicalTopIncludingMargins;
+ int newLogicalTopIncludingMargins = newLogicalTop;
int boxHeight = curr->logicalHeight();
int boxHeightIncludingMargins = boxHeight;
if (curr->isText() || curr->isInlineFlowBox()) {
- const Font& font = curr->renderer()->style(m_firstLine)->font();
- newLogicalTop += curr->baselinePosition(baselineType) - font.ascent(baselineType);
+ const FontMetrics& fontMetrics = curr->renderer()->style(m_firstLine)->fontMetrics();
+ newLogicalTop += curr->baselinePosition(baselineType) - fontMetrics.ascent(baselineType);
if (curr->isInlineFlowBox()) {
RenderBoxModelObject* boxObject = toRenderBoxModelObject(curr->renderer());
newLogicalTop -= boxObject->style(m_firstLine)->isHorizontalWritingMode() ? boxObject->borderTop() + boxObject->paddingTop() :
@@ -668,8 +671,8 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
}
if (isRootInlineBox()) {
- const Font& font = renderer()->style(m_firstLine)->font();
- setLogicalTop(logicalTop() + baselinePosition(baselineType) - font.ascent(baselineType));
+ const FontMetrics& fontMetrics = renderer()->style(m_firstLine)->fontMetrics();
+ setLogicalTop(logicalTop() + baselinePosition(baselineType) - fontMetrics.ascent(baselineType));
if (hasTextChildren() || strictMode) {
if (!setLineTop) {
@@ -715,14 +718,14 @@ void InlineFlowBox::addBoxShadowVisualOverflow(IntRect& logicalVisualOverflow)
renderer()->style(m_firstLine)->getBoxShadowBlockDirectionExtent(boxShadowLogicalTop, boxShadowLogicalBottom);
int logicalTopVisualOverflow = min(logicalTop() + boxShadowLogicalTop, logicalVisualOverflow.y());
- int logicalBottomVisualOverflow = max(logicalBottom() + boxShadowLogicalBottom, logicalVisualOverflow.bottom());
+ int logicalBottomVisualOverflow = max(logicalBottom() + boxShadowLogicalBottom, logicalVisualOverflow.maxY());
int boxShadowLogicalLeft;
int boxShadowLogicalRight;
renderer()->style(m_firstLine)->getBoxShadowInlineDirectionExtent(boxShadowLogicalLeft, boxShadowLogicalRight);
int logicalLeftVisualOverflow = min(logicalLeft() + boxShadowLogicalLeft, logicalVisualOverflow.x());
- int logicalRightVisualOverflow = max(logicalRight() + boxShadowLogicalRight, logicalVisualOverflow.right());
+ int logicalRightVisualOverflow = max(logicalRight() + boxShadowLogicalRight, logicalVisualOverflow.maxX());
logicalVisualOverflow = IntRect(logicalLeftVisualOverflow, logicalTopVisualOverflow,
logicalRightVisualOverflow - logicalLeftVisualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow);
@@ -777,9 +780,9 @@ void InlineFlowBox::addTextBoxVisualOverflow(const InlineTextBox* textBox, Glyph
int childOverflowLogicalRight = max(textShadowLogicalRight + rightGlyphOverflow, rightGlyphOverflow);
int logicalTopVisualOverflow = min(textBox->logicalTop() + childOverflowLogicalTop, logicalVisualOverflow.y());
- int logicalBottomVisualOverflow = max(textBox->logicalBottom() + childOverflowLogicalBottom, logicalVisualOverflow.bottom());
+ int logicalBottomVisualOverflow = max(textBox->logicalBottom() + childOverflowLogicalBottom, logicalVisualOverflow.maxY());
int logicalLeftVisualOverflow = min(textBox->logicalLeft() + childOverflowLogicalLeft, logicalVisualOverflow.x());
- int logicalRightVisualOverflow = max(textBox->logicalRight() + childOverflowLogicalRight, logicalVisualOverflow.right());
+ int logicalRightVisualOverflow = max(textBox->logicalRight() + childOverflowLogicalRight, logicalVisualOverflow.maxX());
logicalVisualOverflow = IntRect(logicalLeftVisualOverflow, logicalTopVisualOverflow,
logicalRightVisualOverflow - logicalLeftVisualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow);
@@ -1005,14 +1008,21 @@ void InlineFlowBox::paintFillLayer(const PaintInfo& paintInfo, const Color& c, c
// strip. Even though that strip has been broken up across multiple lines, you still paint it
// as though you had one single line. This means each line has to pick up the background where
// the previous line left off.
- // FIXME: What the heck do we do with RTL here? The math we're using is obviously not right,
- // but it isn't even clear how this should work at all.
int logicalOffsetOnLine = 0;
- for (InlineFlowBox* curr = prevLineBox(); curr; curr = curr->prevLineBox())
- logicalOffsetOnLine += curr->logicalWidth();
- int totalLogicalWidth = logicalOffsetOnLine;
- for (InlineFlowBox* curr = this; curr; curr = curr->nextLineBox())
- totalLogicalWidth += curr->logicalWidth();
+ int totalLogicalWidth;
+ if (renderer()->style()->direction() == LTR) {
+ for (InlineFlowBox* curr = prevLineBox(); curr; curr = curr->prevLineBox())
+ logicalOffsetOnLine += curr->logicalWidth();
+ totalLogicalWidth = logicalOffsetOnLine;
+ for (InlineFlowBox* curr = this; curr; curr = curr->nextLineBox())
+ totalLogicalWidth += curr->logicalWidth();
+ } else {
+ for (InlineFlowBox* curr = nextLineBox(); curr; curr = curr->nextLineBox())
+ logicalOffsetOnLine += curr->logicalWidth();
+ totalLogicalWidth = logicalOffsetOnLine;
+ for (InlineFlowBox* curr = this; curr; curr = curr->prevLineBox())
+ totalLogicalWidth += curr->logicalWidth();
+ }
int stripX = tx - (isHorizontal() ? logicalOffsetOnLine : 0);
int stripY = ty - (isHorizontal() ? 0 : logicalOffsetOnLine);
int stripWidth = isHorizontal() ? totalLogicalWidth : width();
diff --git a/Source/WebCore/rendering/InlineFlowBox.h b/Source/WebCore/rendering/InlineFlowBox.h
index 232c3b7..d47111f8 100644
--- a/Source/WebCore/rendering/InlineFlowBox.h
+++ b/Source/WebCore/rendering/InlineFlowBox.h
@@ -183,19 +183,18 @@ public:
void checkConsistency() const;
void setHasBadChildList();
- // Line visual and layout overflow are in the coordinate space of the block. This means that - unlike other unprefixed uses of the words
- // top/right/bottom/left in the code - these aren't purely physical directions. For horizontal-tb and vertical-lr they will match physical
- // directions, but for horizontal-bt and vertical-rl, the top/bottom and left/right respectively are inverted when compared to
- // their physical counterparts.
- int topLayoutOverflow() const { return m_overflow ? m_overflow->topLayoutOverflow() : m_y; }
- int bottomLayoutOverflow() const { return m_overflow ? m_overflow->bottomLayoutOverflow() : m_y + height(); }
- int leftLayoutOverflow() const { return m_overflow ? m_overflow->leftLayoutOverflow() : m_x; }
- int rightLayoutOverflow() const { return m_overflow ? m_overflow->rightLayoutOverflow() : m_x + width(); }
+ // Line visual and layout overflow are in the coordinate space of the block. This means that they aren't purely physical directions.
+ // For horizontal-tb and vertical-lr they will match physical directions, but for horizontal-bt and vertical-rl, the top/bottom and left/right
+ // respectively are flipped when compared to their physical counterparts. For example minX is on the left in vertical-lr, but it is on the right in vertical-rl.
+ int minYLayoutOverflow() const { return m_overflow ? m_overflow->minYLayoutOverflow() : m_y; }
+ int maxYLayoutOverflow() const { return m_overflow ? m_overflow->maxYLayoutOverflow() : m_y + height(); }
+ int minXLayoutOverflow() const { return m_overflow ? m_overflow->minXLayoutOverflow() : m_x; }
+ int maxXLayoutOverflow() const { return m_overflow ? m_overflow->maxXLayoutOverflow() : m_x + width(); }
IntRect layoutOverflowRect() const { return m_overflow ? m_overflow->layoutOverflowRect() : IntRect(m_x, m_y, width(), height()); }
- int logicalLeftLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? leftLayoutOverflow() : topLayoutOverflow(); }
- int logicalRightLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? rightLayoutOverflow() : bottomLayoutOverflow(); }
- int logicalTopLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? topVisualOverflow() : leftVisualOverflow(); }
- int logicalBottomLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? bottomLayoutOverflow() : rightLayoutOverflow(); }
+ int logicalLeftLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? minXLayoutOverflow() : minYLayoutOverflow(); }
+ int logicalRightLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? maxXLayoutOverflow() : maxYLayoutOverflow(); }
+ int logicalTopLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? minYVisualOverflow() : minXVisualOverflow(); }
+ int logicalBottomLayoutOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? maxYLayoutOverflow() : maxXLayoutOverflow(); }
IntRect logicalLayoutOverflowRect() const
{
IntRect result = layoutOverflowRect();
@@ -204,15 +203,15 @@ public:
return result;
}
- int topVisualOverflow() const { return m_overflow ? m_overflow->topVisualOverflow() : m_y; }
- int bottomVisualOverflow() const { return m_overflow ? m_overflow->bottomVisualOverflow() : m_y + height(); }
- int leftVisualOverflow() const { return m_overflow ? m_overflow->leftVisualOverflow() : m_x; }
- int rightVisualOverflow() const { return m_overflow ? m_overflow->rightVisualOverflow() : m_x + width(); }
+ int minYVisualOverflow() const { return m_overflow ? m_overflow->minYVisualOverflow() : m_y; }
+ int maxYVisualOverflow() const { return m_overflow ? m_overflow->maxYVisualOverflow() : m_y + height(); }
+ int minXVisualOverflow() const { return m_overflow ? m_overflow->minXVisualOverflow() : m_x; }
+ int maxXVisualOverflow() const { return m_overflow ? m_overflow->maxXVisualOverflow() : m_x + width(); }
IntRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : IntRect(m_x, m_y, width(), height()); }
- int logicalLeftVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? leftVisualOverflow() : topVisualOverflow(); }
- int logicalRightVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? rightVisualOverflow() : bottomVisualOverflow(); }
- int logicalTopVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? topVisualOverflow() : leftVisualOverflow(); }
- int logicalBottomVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? bottomVisualOverflow() : rightVisualOverflow(); }
+ int logicalLeftVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? minXVisualOverflow() : minYVisualOverflow(); }
+ int logicalRightVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? maxXVisualOverflow() : maxYVisualOverflow(); }
+ int logicalTopVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? minYVisualOverflow() : minXVisualOverflow(); }
+ int logicalBottomVisualOverflow() const { return renderer()->style()->isHorizontalWritingMode() ? maxYVisualOverflow() : maxXVisualOverflow(); }
IntRect logicalVisualOverflowRect() const
{
IntRect result = visualOverflowRect();
diff --git a/Source/WebCore/rendering/InlineTextBox.cpp b/Source/WebCore/rendering/InlineTextBox.cpp
index 8992964..4802f02 100644
--- a/Source/WebCore/rendering/InlineTextBox.cpp
+++ b/Source/WebCore/rendering/InlineTextBox.cpp
@@ -1,7 +1,7 @@
/*
* (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -36,11 +36,11 @@
#include "PaintInfo.h"
#include "RenderArena.h"
#include "RenderBlock.h"
+#include "RenderCombineText.h"
#include "RenderRubyRun.h"
#include "RenderRubyText.h"
#include "RenderTheme.h"
#include "Text.h"
-#include "TextRun.h"
#include "break_lines.h"
#include <wtf/AlwaysInline.h>
@@ -164,19 +164,19 @@ IntRect InlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos)
}
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
- TextRun textRun = TextRun(characters, len, textObj->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride);
+ TextRun textRun = TextRun(characters, len, textObj->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride);
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
IntRect r = enclosingIntRect(f.selectionRectForText(textRun, IntPoint(), selHeight, sPos, ePos));
#else
- IntRect r = enclosingIntRect(f.selectionRectForText(TextRun(characters, len, textObj->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride),
+ IntRect r = enclosingIntRect(f.selectionRectForText(TextRun(characters, len, textObj->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride),
IntPoint(), selHeight, sPos, ePos));
#endif
int logicalWidth = r.width();
if (r.x() > m_logicalWidth)
logicalWidth = 0;
- else if (r.right() > m_logicalWidth)
+ else if (r.maxX() > m_logicalWidth)
logicalWidth = m_logicalWidth - r.x();
IntPoint topPoint = isHorizontal() ? IntPoint(tx + m_x + r.x(), ty + selTop) : IntPoint(tx + selTop, ty + m_y + r.x());
@@ -449,7 +449,7 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
int logicalStart = logicalLeft() - logicalLeftOverflow + (isHorizontal() ? tx : ty);
int logicalExtent = logicalWidth() + logicalLeftOverflow + logicalRightOverflow;
- int paintEnd = isHorizontal() ? paintInfo.rect.right() : paintInfo.rect.bottom();
+ int paintEnd = isHorizontal() ? paintInfo.rect.maxX() : paintInfo.rect.maxY();
int paintStart = isHorizontal() ? paintInfo.rect.x() : paintInfo.rect.y();
if (logicalStart >= paintEnd || logicalStart + logicalExtent <= paintStart)
@@ -492,13 +492,15 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
IntPoint boxOrigin = locationIncludingFlipping();
boxOrigin.move(tx, ty);
IntRect boxRect(boxOrigin, IntSize(logicalWidth(), logicalHeight()));
- IntPoint textOrigin = IntPoint(boxOrigin.x(), boxOrigin.y() + styleToUse->font().ascent());
+ IntPoint textOrigin = IntPoint(boxOrigin.x(), boxOrigin.y() + styleToUse->fontMetrics().ascent());
- if (!isHorizontal()) {
+ RenderCombineText* combinedText = styleToUse->hasTextCombine() ? toRenderCombineText(textRenderer()) : 0;
+ bool shouldRotate = !isHorizontal() && (!combinedText || !combinedText->isCombined());
+ if (shouldRotate) {
context->save();
- context->translate(boxRect.x(), boxRect.bottom());
+ context->translate(boxRect.x(), boxRect.maxY());
context->rotate(static_cast<float>(deg2rad(90.)));
- context->translate(-boxRect.x(), -boxRect.bottom());
+ context->translate(-boxRect.x(), -boxRect.maxY());
}
@@ -510,6 +512,9 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
int d = styleToUse->textDecorationsInEffect();
const Font& font = styleToUse->font();
+ if (combinedText)
+ combinedText->adjustTextOrigin(textOrigin, boxRect);
+
// 1. Paint backgrounds behind text if needed. Examples of such backgrounds include selection
// and composition underlines.
if (paintInfo.phase != PaintPhaseSelection && paintInfo.phase != PaintPhaseTextClip && !isPrinting) {
@@ -609,13 +614,18 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
}
}
- const UChar* characters = textRenderer()->text()->characters() + m_start;
int length = m_len;
+ const UChar* characters;
+ if (!combinedText)
+ characters = textRenderer()->text()->characters() + m_start;
+ else
+ combinedText->charactersToRender(m_start, characters, length);
+
BufferForAppendingHyphen charactersWithHyphen;
if (hasHyphen())
adjustCharactersAndLengthForHyphen(charactersWithHyphen, styleToUse, characters, length);
- TextRun textRun(characters, length, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || styleToUse->visuallyOrdered());
+ TextRun textRun(characters, length, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || styleToUse->visuallyOrdered());
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
@@ -637,7 +647,7 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
bool hasTextEmphasis = getEmphasisMarkPosition(styleToUse, emphasisMarkPosition);
const AtomicString& emphasisMark = hasTextEmphasis ? styleToUse->textEmphasisMarkString() : nullAtom;
if (!emphasisMark.isEmpty())
- emphasisMarkOffset = emphasisMarkPosition == TextEmphasisPositionOver ? -font.ascent() - font.emphasisMarkDescent(emphasisMark) : font.descent() + font.emphasisMarkAscent(emphasisMark);
+ emphasisMarkOffset = emphasisMarkPosition == TextEmphasisPositionOver ? -font.fontMetrics().ascent() - font.emphasisMarkDescent(emphasisMark) : font.fontMetrics().descent() + font.emphasisMarkAscent(emphasisMark);
if (!paintSelectedTextOnly) {
// For stroked painting, we have to change the text drawing mode. It's probably dangerous to leave that mutated as a side
@@ -715,7 +725,7 @@ void InlineTextBox::paint(PaintInfo& paintInfo, int tx, int ty)
}
}
- if (!isHorizontal())
+ if (shouldRotate)
context->restore();
}
@@ -774,13 +784,13 @@ void InlineTextBox::paintSelection(GraphicsContext* context, const IntPoint& box
IntPoint localOrigin(boxOrigin.x(), boxOrigin.y() - deltaY);
context->clip(IntRect(localOrigin, IntSize(m_logicalWidth, selHeight)));
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
- TextRun textRun = TextRun(characters, length, textRenderer()->allowTabs(), textPos(), m_toAdd,
+ TextRun textRun = TextRun(characters, length, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(),
!isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
context->drawHighlightForText(font, textRun, localOrigin, selHeight, c, style->colorSpace(), sPos, ePos);
#else
- context->drawHighlightForText(font, TextRun(characters, length, textRenderer()->allowTabs(), textPos(), m_toAdd,
+ context->drawHighlightForText(font, TextRun(characters, length, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(),
!isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered()),
localOrigin, selHeight, c, style->colorSpace(), sPos, ePos);
#endif
@@ -806,13 +816,13 @@ void InlineTextBox::paintCompositionBackground(GraphicsContext* context, const I
int selHeight = selectionHeight();
IntPoint localOrigin(boxOrigin.x(), boxOrigin.y() - deltaY);
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
- TextRun textRun = TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd,
+ TextRun textRun = TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(),
!isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
context->drawHighlightForText(font, textRun, localOrigin, selHeight, c, style->colorSpace(), sPos, ePos);
#else
- context->drawHighlightForText(font, TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd,
+ context->drawHighlightForText(font, TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(),
!isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered()),
localOrigin, selHeight, c, style->colorSpace(), sPos, ePos);
#endif
@@ -864,7 +874,7 @@ void InlineTextBox::paintDecoration(GraphicsContext* context, const IntPoint& bo
bool linesAreOpaque = !isPrinting && (!(deco & UNDERLINE) || underline.alpha() == 255) && (!(deco & OVERLINE) || overline.alpha() == 255) && (!(deco & LINE_THROUGH) || linethrough.alpha() == 255);
RenderStyle* styleToUse = renderer()->style(m_firstLine);
- int baseline = styleToUse->font().ascent();
+ int baseline = styleToUse->fontMetrics().ascent();
bool setClip = false;
int extraOffset = 0;
@@ -975,7 +985,7 @@ void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, const IntP
int deltaY = renderer()->style()->isFlippedLinesWritingMode() ? selectionBottom() - logicalBottom() : logicalTop() - selectionTop();
int selHeight = selectionHeight();
IntPoint startPoint(boxOrigin.x(), boxOrigin.y() - deltaY);
- TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
+ TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
if (m_disableRoundingHacks)
run.disableRoundingHacks();
@@ -1001,7 +1011,7 @@ void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, const IntP
// So, we generally place the underline at the bottom of the text, but in larger fonts that's not so good so
// we pin to two pixels under the baseline.
int lineThickness = cMisspellingLineThickness;
- int baseline = renderer()->style(m_firstLine)->font().ascent();
+ int baseline = renderer()->style(m_firstLine)->fontMetrics().ascent();
int descent = logicalHeight() - baseline;
int underlineOffset;
if (descent <= (2 + lineThickness)) {
@@ -1023,7 +1033,7 @@ void InlineTextBox::paintTextMatchMarker(GraphicsContext* pt, const IntPoint& bo
int sPos = max(marker.startOffset - m_start, (unsigned)0);
int ePos = min(marker.endOffset - m_start, (unsigned)m_len);
- TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
+ TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
if (m_disableRoundingHacks)
run.disableRoundingHacks();
@@ -1055,7 +1065,7 @@ void InlineTextBox::computeRectForReplacementMarker(const DocumentMarker& marker
int sPos = max(marker.startOffset - m_start, (unsigned)0);
int ePos = min(marker.endOffset - m_start, (unsigned)m_len);
- TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
+ TextRun run(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
if (m_disableRoundingHacks)
run.disableRoundingHacks();
@@ -1085,9 +1095,7 @@ void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, const IntPoint& bo
switch (marker.type) {
case DocumentMarker::Grammar:
case DocumentMarker::Spelling:
- case DocumentMarker::Replacement:
case DocumentMarker::CorrectionIndicator:
- case DocumentMarker::RejectedCorrection:
if (background)
continue;
break;
@@ -1095,9 +1103,8 @@ void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, const IntPoint& bo
if (!background)
continue;
break;
-
default:
- ASSERT_NOT_REACHED();
+ continue;
}
if (marker.endOffset <= start())
@@ -1124,9 +1131,6 @@ void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, const IntPoint& bo
computeRectForReplacementMarker(marker, style, font);
paintSpellingOrGrammarMarker(pt, boxOrigin, marker, style, font, false);
break;
- case DocumentMarker::Replacement:
- case DocumentMarker::RejectedCorrection:
- break;
default:
ASSERT_NOT_REACHED();
}
@@ -1166,7 +1170,7 @@ void InlineTextBox::paintCompositionUnderline(GraphicsContext* ctx, const IntPoi
// All other marked text underlines are 1px thick.
// If there's not enough space the underline will touch or overlap characters.
int lineThickness = 1;
- int baseline = renderer()->style(m_firstLine)->font().ascent();
+ int baseline = renderer()->style(m_firstLine)->fontMetrics().ascent();
if (underline.thick && logicalHeight() - baseline >= 2)
lineThickness = 2;
@@ -1224,13 +1228,13 @@ int InlineTextBox::offsetForPosition(int lineOffset, bool includePartialGlyphs)
RenderStyle* style = text->style(m_firstLine);
const Font* f = &style->font();
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
- TextRun textRun = TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
+ TextRun textRun = TextRun(textRenderer()->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered());
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
int offset = f->offsetForPosition(textRun, lineOffset - logicalLeft(), includePartialGlyphs);
#else
int offset = f->offsetForPosition(TextRun(textRenderer()->text()->characters() + m_start, m_len,
- textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered()),
+ textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride || style->visuallyOrdered()),
lineOffset - logicalLeft(), includePartialGlyphs);
#endif
if (blockIsInOppositeDirection && (!offset || offset == m_len))
@@ -1252,13 +1256,13 @@ int InlineTextBox::positionForOffset(int offset) const
int to = !isLeftToRightDirection() ? m_len : offset - m_start;
// FIXME: Do we need to add rightBearing here?
#ifdef ANDROID_DISABLE_ROUNDING_HACKS
- TextRun textRun = TextRun(text->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride);
+ TextRun textRun = TextRun(text->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride);
if (m_disableRoundingHacks)
textRun.disableRoundingHacks();
- return enclosingIntRect(f.selectionRectForText(textRun, IntPoint(logicalLeft(), 0), 0, from, to)).right();
+ return enclosingIntRect(f.selectionRectForText(textRun, IntPoint(logicalLeft(), 0), 0, from, to)).maxX();
#else
- return enclosingIntRect(f.selectionRectForText(TextRun(text->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride),
- IntPoint(logicalLeft(), 0), 0, from, to)).right();
+ return enclosingIntRect(f.selectionRectForText(TextRun(text->text()->characters() + m_start, m_len, textRenderer()->allowTabs(), textPos(), m_expansion, trailingExpansionBehavior(), !isLeftToRightDirection(), m_dirOverride),
+ IntPoint(logicalLeft(), 0), 0, from, to)).maxX();
#endif
}
diff --git a/Source/WebCore/rendering/InlineTextBox.h b/Source/WebCore/rendering/InlineTextBox.h
index ee75f06..095fa16 100644
--- a/Source/WebCore/rendering/InlineTextBox.h
+++ b/Source/WebCore/rendering/InlineTextBox.h
@@ -1,7 +1,7 @@
/*
* (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -25,6 +25,7 @@
#include "InlineBox.h"
#include "RenderText.h" // so textRenderer() can be inline
+#include "TextRun.h"
namespace WebCore {
@@ -88,7 +89,7 @@ private:
int selectionHeight();
public:
- virtual IntRect calculateBoundaries() const { return IntRect(x(), y(), logicalWidth(), logicalHeight()); }
+ virtual IntRect calculateBoundaries() const { return IntRect(x(), y(), width(), height()); }
virtual IntRect selectionRect(int absx, int absy, int startPos, int endPos);
bool isSelected(int startPos, int endPos) const;
@@ -116,7 +117,7 @@ private:
public:
virtual bool isLineBreak() const;
- void setSpaceAdd(int add) { m_logicalWidth -= m_toAdd; m_toAdd = add; m_logicalWidth += m_toAdd; }
+ void setExpansion(int expansion) { m_logicalWidth -= m_expansion; m_expansion = expansion; m_logicalWidth += m_expansion; }
private:
virtual bool isInlineTextBox() const { return true; }
@@ -166,6 +167,8 @@ private:
void paintSpellingOrGrammarMarker(GraphicsContext*, const IntPoint& boxOrigin, const DocumentMarker&, RenderStyle*, const Font&, bool grammar);
void paintTextMatchMarker(GraphicsContext*, const IntPoint& boxOrigin, const DocumentMarker&, RenderStyle*, const Font&);
void computeRectForReplacementMarker(const DocumentMarker&, RenderStyle*, const Font&);
+
+ TextRun::TrailingExpansionBehavior trailingExpansionBehavior() const { return m_expansion && nextLeafChild() ? TextRun::AllowTrailingExpansion : TextRun::ForbidTrailingExpansion; }
};
inline RenderText* InlineTextBox::textRenderer() const
diff --git a/Source/WebCore/rendering/LayoutState.cpp b/Source/WebCore/rendering/LayoutState.cpp
index aeba416..8e4201e 100644
--- a/Source/WebCore/rendering/LayoutState.cpp
+++ b/Source/WebCore/rendering/LayoutState.cpp
@@ -167,11 +167,11 @@ int LayoutState::pageLogicalOffset(int childLogicalOffset) const
return m_layoutOffset.height() + childLogicalOffset - m_pageOffset.height();
}
-void LayoutState::addForcedColumnBreak(int childY)
+void LayoutState::addForcedColumnBreak(int childLogicalOffset)
{
if (!m_columnInfo || m_columnInfo->columnHeight())
return;
- m_columnInfo->addForcedBreak(pageLogicalOffset(childY));
+ m_columnInfo->addForcedBreak(pageLogicalOffset(childLogicalOffset));
}
} // namespace WebCore
diff --git a/Source/WebCore/rendering/LayoutState.h b/Source/WebCore/rendering/LayoutState.h
index c499435..f14c9ff 100644
--- a/Source/WebCore/rendering/LayoutState.h
+++ b/Source/WebCore/rendering/LayoutState.h
@@ -71,7 +71,7 @@ public:
// direction (so an x-offset in vertical text and a y-offset for horizontal text).
int pageLogicalOffset(int childLogicalOffset) const;
- void addForcedColumnBreak(int childY);
+ void addForcedColumnBreak(int childLogicalOffset);
bool pageLogicalHeight() const { return m_pageLogicalHeight; }
bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; }
diff --git a/Source/WebCore/rendering/MediaControlElements.cpp b/Source/WebCore/rendering/MediaControlElements.cpp
index 1f66719..6defbb7 100644
--- a/Source/WebCore/rendering/MediaControlElements.cpp
+++ b/Source/WebCore/rendering/MediaControlElements.cpp
@@ -32,11 +32,13 @@
#include "MediaControlElements.h"
+#include "CSSStyleSelector.h"
#include "EventNames.h"
#include "FloatConversion.h"
#include "Frame.h"
#include "HTMLNames.h"
#include "LocalizedStrings.h"
+#include "MediaControls.h"
#include "MouseEvent.h"
#include "Page.h"
#include "RenderMedia.h"
@@ -88,14 +90,6 @@ PassRefPtr<MediaControlShadowRootElement> MediaControlShadowRootElement::create(
return element.release();
}
-void MediaControlShadowRootElement::updateStyle()
-{
- if (renderer()) {
- RenderStyle* timelineContainerStyle = shadowHost()->renderer()->getCachedPseudoStyle(MEDIA_CONTROLS_TIMELINE_CONTAINER);
- renderer()->setStyle(timelineContainerStyle);
- }
-}
-
void MediaControlShadowRootElement::detach()
{
HTMLDivElement::detach();
@@ -105,40 +99,11 @@ void MediaControlShadowRootElement::detach()
// ----------------------------
-MediaControlElement::MediaControlElement(HTMLMediaElement* mediaElement, PseudoId pseudo)
+MediaControlElement::MediaControlElement(HTMLMediaElement* mediaElement)
: HTMLDivElement(divTag, mediaElement->document())
, m_mediaElement(mediaElement)
- , m_pseudoStyleId(pseudo)
{
setInDocument();
- switch (pseudo) {
- case MEDIA_CONTROLS_CURRENT_TIME_DISPLAY:
- m_displayType = MediaCurrentTimeDisplay;
- break;
- case MEDIA_CONTROLS_TIME_REMAINING_DISPLAY:
- m_displayType = MediaTimeRemainingDisplay;
- break;
- case MEDIA_CONTROLS_TIMELINE_CONTAINER:
- m_displayType = MediaTimelineContainer;
- break;
- case MEDIA_CONTROLS_STATUS_DISPLAY:
- m_displayType = MediaStatusDisplay;
- break;
- case MEDIA_CONTROLS_PANEL:
- m_displayType = MediaControlsPanel;
- break;
- case MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER:
- m_displayType = MediaVolumeSliderContainer;
- break;
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-}
-
-PassRefPtr<MediaControlElement> MediaControlElement::create(HTMLMediaElement* mediaElement, PseudoId pseudoStyleId)
-{
- return adoptRef(new MediaControlElement(mediaElement, pseudoStyleId));
}
void MediaControlElement::attachToParent(Element* parent)
@@ -157,7 +122,8 @@ void MediaControlElement::update()
PassRefPtr<RenderStyle> MediaControlElement::styleForElement()
{
- RenderStyle* style = m_mediaElement->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
+ ASSERT(m_mediaElement->renderer());
+ RefPtr<RenderStyle> style = document()->styleSelector()->styleForElement(this, m_mediaElement->renderer()->style(), true);
if (!style)
return 0;
@@ -225,8 +191,31 @@ void MediaControlElement::updateStyle()
// ----------------------------
+inline MediaControlPanelElement::MediaControlPanelElement(HTMLMediaElement* mediaElement)
+ : MediaControlElement(mediaElement)
+{
+}
+
+PassRefPtr<MediaControlPanelElement> MediaControlPanelElement::create(HTMLMediaElement* mediaElement)
+{
+ return adoptRef(new MediaControlPanelElement(mediaElement));
+}
+
+MediaControlElementType MediaControlPanelElement::displayType() const
+{
+ return MediaControlsPanel;
+}
+
+const AtomicString& MediaControlPanelElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-panel"));
+ return id;
+}
+
+// ----------------------------
+
inline MediaControlTimelineContainerElement::MediaControlTimelineContainerElement(HTMLMediaElement* mediaElement)
- : MediaControlElement(mediaElement, MEDIA_CONTROLS_TIMELINE_CONTAINER)
+ : MediaControlElement(mediaElement)
{
}
@@ -240,20 +229,29 @@ bool MediaControlTimelineContainerElement::rendererIsNeeded(RenderStyle* style)
if (!MediaControlElement::rendererIsNeeded(style))
return false;
- // This is for MediaControllerThemeClassic:
- // If there is no style for MediaControlStatusDisplayElement style, don't hide
- // the timeline.
- if (!mediaElement()->renderer()->getCachedPseudoStyle(MEDIA_CONTROLS_STATUS_DISPLAY))
+ // Always show the timeline if the theme doesn't use status display (MediaControllerThemeClassic, for instance).
+ if (!document()->page()->theme()->usesMediaControlStatusDisplay())
return true;
float duration = mediaElement()->duration();
return !isnan(duration) && !isinf(duration);
}
+MediaControlElementType MediaControlTimelineContainerElement::displayType() const
+{
+ return MediaTimelineContainer;
+}
+
+const AtomicString& MediaControlTimelineContainerElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline-container"));
+ return id;
+}
+
// ----------------------------
inline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement(HTMLMediaElement* mediaElement)
- : MediaControlElement(mediaElement, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER)
+ : MediaControlElement(mediaElement)
, m_isVisible(false)
, m_x(0)
, m_y(0)
@@ -298,10 +296,21 @@ bool MediaControlVolumeSliderContainerElement::hitTest(const IntPoint& absPoint)
return false;
}
+MediaControlElementType MediaControlVolumeSliderContainerElement::displayType() const
+{
+ return MediaVolumeSliderContainer;
+}
+
+const AtomicString& MediaControlVolumeSliderContainerElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider-container"));
+ return id;
+}
+
// ----------------------------
inline MediaControlStatusDisplayElement::MediaControlStatusDisplayElement(HTMLMediaElement* mediaElement)
- : MediaControlElement(mediaElement, MEDIA_CONTROLS_STATUS_DISPLAY)
+ : MediaControlElement(mediaElement)
, m_stateBeingDisplayed(Nothing)
{
}
@@ -344,59 +353,30 @@ void MediaControlStatusDisplayElement::update()
bool MediaControlStatusDisplayElement::rendererIsNeeded(RenderStyle* style)
{
- if (!MediaControlElement::rendererIsNeeded(style))
+ if (!MediaControlElement::rendererIsNeeded(style) || !document()->page()->theme()->usesMediaControlStatusDisplay())
return false;
float duration = mediaElement()->duration();
return (isnan(duration) || isinf(duration));
}
+MediaControlElementType MediaControlStatusDisplayElement::displayType() const
+{
+ return MediaStatusDisplay;
+}
+
+const AtomicString& MediaControlStatusDisplayElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-status-display"));
+ return id;
+}
+
// ----------------------------
-MediaControlInputElement::MediaControlInputElement(HTMLMediaElement* mediaElement, PseudoId pseudo)
- : HTMLInputElement(inputTag, mediaElement->document())
+MediaControlInputElement::MediaControlInputElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType)
+ : HTMLInputElement(inputTag, mediaElement->document(), 0, false)
, m_mediaElement(mediaElement)
- , m_pseudoStyleId(pseudo)
+ , m_displayType(displayType)
{
- setInDocument();
-
- switch (pseudo) {
- case MEDIA_CONTROLS_MUTE_BUTTON:
- m_displayType = MediaMuteButton;
- break;
- case MEDIA_CONTROLS_PLAY_BUTTON:
- m_displayType = MediaPlayButton;
- break;
- case MEDIA_CONTROLS_SEEK_FORWARD_BUTTON:
- m_displayType = MediaSeekForwardButton;
- break;
- case MEDIA_CONTROLS_SEEK_BACK_BUTTON:
- m_displayType = MediaSeekBackButton;
- break;
- case MEDIA_CONTROLS_FULLSCREEN_BUTTON:
- m_displayType = MediaFullscreenButton;
- break;
- case MEDIA_CONTROLS_TIMELINE:
- m_displayType = MediaSlider;
- break;
- case MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON:
- m_displayType = MediaReturnToRealtimeButton;
- break;
- case MEDIA_CONTROLS_REWIND_BUTTON:
- m_displayType = MediaRewindButton;
- break;
- case MEDIA_CONTROLS_VOLUME_SLIDER:
- m_displayType = MediaVolumeSlider;
- break;
- case MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON:
- m_displayType = MediaVolumeSliderMuteButton;
- break;
- case MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON:
- m_displayType = MediaShowClosedCaptionsButton;
- break;
- default:
- ASSERT_NOT_REACHED();
- break;
- }
}
void MediaControlInputElement::attachToParent(Element* parent)
@@ -416,7 +396,7 @@ void MediaControlInputElement::update()
PassRefPtr<RenderStyle> MediaControlInputElement::styleForElement()
{
- return mediaElement()->renderer()->getCachedPseudoStyle(m_pseudoStyleId);
+ return document()->styleSelector()->styleForElement(this, 0, true);
}
bool MediaControlInputElement::rendererIsNeeded(RenderStyle* style)
@@ -481,7 +461,7 @@ void MediaControlInputElement::updateStyle()
if (Node* shadowNode = shadowRoot())
shadowNode->recalcStyle(Node::Force);
}
-
+
bool MediaControlInputElement::hitTest(const IntPoint& absPoint)
{
if (renderer() && renderer()->style()->hasAppearance())
@@ -502,14 +482,14 @@ void MediaControlInputElement::setDisplayType(MediaControlElementType displayTyp
// ----------------------------
-inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement, ButtonLocation location)
- : MediaControlInputElement(mediaElement, location == Controller ? MEDIA_CONTROLS_MUTE_BUTTON : MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON)
+inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType)
+ : MediaControlInputElement(mediaElement, displayType)
{
}
-PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement, ButtonLocation location)
+PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement)
{
- RefPtr<MediaControlMuteButtonElement> button = adoptRef(new MediaControlMuteButtonElement(mediaElement, location));
+ RefPtr<MediaControlMuteButtonElement> button = adoptRef(new MediaControlMuteButtonElement(mediaElement, MediaMuteButton));
button->setType("button");
return button.release();
}
@@ -523,15 +503,39 @@ void MediaControlMuteButtonElement::defaultEventHandler(Event* event)
HTMLInputElement::defaultEventHandler(event);
}
+const AtomicString& MediaControlMuteButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-mute-button"));
+ return id;
+}
+
void MediaControlMuteButtonElement::updateDisplayType()
{
setDisplayType(mediaElement()->muted() ? MediaUnMuteButton : MediaMuteButton);
}
+inline MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement(HTMLMediaElement* mediaElement)
+ : MediaControlMuteButtonElement(mediaElement, MediaVolumeSliderMuteButton)
+{
+}
+
+PassRefPtr<MediaControlVolumeSliderMuteButtonElement> MediaControlVolumeSliderMuteButtonElement::create(HTMLMediaElement* mediaElement)
+{
+ RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(mediaElement));
+ button->setType("button");
+ return button.release();
+}
+
+const AtomicString& MediaControlVolumeSliderMuteButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider-mute-button"));
+ return id;
+}
+
// ----------------------------
inline MediaControlPlayButtonElement::MediaControlPlayButtonElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_PLAY_BUTTON)
+ : MediaControlInputElement(mediaElement, MediaPlayButton)
{
}
@@ -556,28 +560,22 @@ void MediaControlPlayButtonElement::updateDisplayType()
setDisplayType(mediaElement()->canPlay() ? MediaPlayButton : MediaPauseButton);
}
+const AtomicString& MediaControlPlayButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-play-button"));
+ return id;
+}
+
// ----------------------------
-inline MediaControlSeekButtonElement::MediaControlSeekButtonElement(HTMLMediaElement* mediaElement, PseudoId pseudoId)
- : MediaControlInputElement(mediaElement, pseudoId)
+inline MediaControlSeekButtonElement::MediaControlSeekButtonElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType)
+ : MediaControlInputElement(mediaElement, displayType)
, m_seeking(false)
, m_capturing(false)
, m_seekTimer(this, &MediaControlSeekButtonElement::seekTimerFired)
{
}
-PassRefPtr<MediaControlSeekButtonElement> MediaControlSeekButtonElement::create(HTMLMediaElement* mediaElement, PseudoId pseudoStyleId)
-{
- RefPtr<MediaControlSeekButtonElement> button = adoptRef(new MediaControlSeekButtonElement(mediaElement, pseudoStyleId));
- button->setType("button");
- return button.release();
-}
-
-inline bool MediaControlSeekButtonElement::isForwardButton() const
-{
- return pseudoStyleId() == MEDIA_CONTROLS_SEEK_FORWARD_BUTTON;
-}
-
void MediaControlSeekButtonElement::defaultEventHandler(Event* event)
{
if (event->type() == eventNames().mousedownEvent) {
@@ -627,8 +625,48 @@ void MediaControlSeekButtonElement::detach()
// ----------------------------
+inline MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement(HTMLMediaElement* mediaElement)
+ : MediaControlSeekButtonElement(mediaElement, MediaSeekForwardButton)
+{
+}
+
+PassRefPtr<MediaControlSeekForwardButtonElement> MediaControlSeekForwardButtonElement::create(HTMLMediaElement* mediaElement)
+{
+ RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement(mediaElement));
+ button->setType("button");
+ return button.release();
+}
+
+const AtomicString& MediaControlSeekForwardButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-seek-forward-button"));
+ return id;
+}
+
+// ----------------------------
+
+inline MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement(HTMLMediaElement* mediaElement)
+ : MediaControlSeekButtonElement(mediaElement, MediaSeekBackButton)
+{
+}
+
+PassRefPtr<MediaControlSeekBackButtonElement> MediaControlSeekBackButtonElement::create(HTMLMediaElement* mediaElement)
+{
+ RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement(mediaElement));
+ button->setType("button");
+ return button.release();
+}
+
+const AtomicString& MediaControlSeekBackButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-seek-back-button"));
+ return id;
+}
+
+// ----------------------------
+
inline MediaControlRewindButtonElement::MediaControlRewindButtonElement(HTMLMediaElement* element)
- : MediaControlInputElement(element, MEDIA_CONTROLS_REWIND_BUTTON)
+ : MediaControlInputElement(element, MediaRewindButton)
{
}
@@ -648,10 +686,16 @@ void MediaControlRewindButtonElement::defaultEventHandler(Event* event)
HTMLInputElement::defaultEventHandler(event);
}
+const AtomicString& MediaControlRewindButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-rewind-button"));
+ return id;
+}
+
// ----------------------------
inline MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON)
+ : MediaControlInputElement(mediaElement, MediaReturnToRealtimeButton)
{
}
@@ -671,11 +715,16 @@ void MediaControlReturnToRealtimeButtonElement::defaultEventHandler(Event* event
HTMLInputElement::defaultEventHandler(event);
}
+const AtomicString& MediaControlReturnToRealtimeButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-return-to-realtime-button"));
+ return id;
+}
// ----------------------------
inline MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON)
+ : MediaControlInputElement(mediaElement, MediaShowClosedCaptionsButton)
{
}
@@ -701,10 +750,16 @@ void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType()
setDisplayType(mediaElement()->closedCaptionsVisible() ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton);
}
+const AtomicString& MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-toggle-closed-captions-button"));
+ return id;
+}
+
// ----------------------------
MediaControlTimelineElement::MediaControlTimelineElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_TIMELINE)
+ : MediaControlInputElement(mediaElement, MediaSlider)
{
}
@@ -740,9 +795,9 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event)
RenderSlider* slider = toRenderSlider(renderer());
if (slider && slider->inDragMode()) {
- toRenderMedia(mediaElement()->renderer())->updateTimeDisplay();
+ toRenderMedia(mediaElement()->renderer())->controls()->updateTimeDisplay();
#if PLATFORM(ANDROID)
- toRenderMedia(mediaElement()->renderer())->updateLastTouch();
+ toRenderMedia(mediaElement()->renderer())->controls()->updateLastTouch();
#endif
}
@@ -760,10 +815,16 @@ void MediaControlTimelineElement::update(bool updateDuration)
MediaControlInputElement::update();
}
+const AtomicString& MediaControlTimelineElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline"));
+ return id;
+}
+
// ----------------------------
inline MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_VOLUME_SLIDER)
+ : MediaControlInputElement(mediaElement, MediaVolumeSlider)
{
}
@@ -804,10 +865,16 @@ void MediaControlVolumeSliderElement::update()
MediaControlInputElement::update();
}
+const AtomicString& MediaControlVolumeSliderElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider"));
+ return id;
+}
+
// ----------------------------
inline MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_FULLSCREEN_BUTTON)
+ : MediaControlInputElement(mediaElement, MediaFullscreenButton)
{
}
@@ -840,20 +907,21 @@ void MediaControlFullscreenButtonElement::defaultEventHandler(Event* event)
HTMLInputElement::defaultEventHandler(event);
}
+const AtomicString& MediaControlFullscreenButtonElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-button"));
+ return id;
+}
+
// ----------------------------
-inline MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(HTMLMediaElement* mediaElement, PseudoId pseudo)
- : MediaControlElement(mediaElement, pseudo)
+inline MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(HTMLMediaElement* mediaElement)
+ : MediaControlElement(mediaElement)
, m_currentValue(0)
, m_isVisible(true)
{
}
-PassRefPtr<MediaControlTimeDisplayElement> MediaControlTimeDisplayElement::create(HTMLMediaElement* mediaElement, PseudoId pseudoStyleId)
-{
- return adoptRef(new MediaControlTimeDisplayElement(mediaElement, pseudoStyleId));
-}
-
PassRefPtr<RenderStyle> MediaControlTimeDisplayElement::styleForElement()
{
RefPtr<RenderStyle> style = MediaControlElement::styleForElement();
@@ -884,6 +952,52 @@ void MediaControlTimeDisplayElement::setCurrentValue(float time)
m_currentValue = time;
}
+// ----------------------------
+
+PassRefPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(HTMLMediaElement* mediaElement)
+{
+ return adoptRef(new MediaControlTimeRemainingDisplayElement(mediaElement));
+}
+
+MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(HTMLMediaElement* mediaElement)
+ : MediaControlTimeDisplayElement(mediaElement)
+{
+}
+
+MediaControlElementType MediaControlTimeRemainingDisplayElement::displayType() const
+{
+ return MediaTimeRemainingDisplay;
+}
+
+const AtomicString& MediaControlTimeRemainingDisplayElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-time-remaining-display"));
+ return id;
+}
+
+// ----------------------------
+
+PassRefPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(HTMLMediaElement* mediaElement)
+{
+ return adoptRef(new MediaControlCurrentTimeDisplayElement(mediaElement));
+}
+
+MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(HTMLMediaElement* mediaElement)
+ : MediaControlTimeDisplayElement(mediaElement)
+{
+}
+
+MediaControlElementType MediaControlCurrentTimeDisplayElement::displayType() const
+{
+ return MediaCurrentTimeDisplay;
+}
+
+const AtomicString& MediaControlCurrentTimeDisplayElement::shadowPseudoId() const
+{
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-current-time-display"));
+ return id;
+}
+
} // namespace WebCore
#endif // ENABLE(VIDEO)
diff --git a/Source/WebCore/rendering/MediaControlElements.h b/Source/WebCore/rendering/MediaControlElements.h
index b2d063d..ff9541d 100644
--- a/Source/WebCore/rendering/MediaControlElements.h
+++ b/Source/WebCore/rendering/MediaControlElements.h
@@ -75,7 +75,6 @@ class MediaControlShadowRootElement : public HTMLDivElement {
public:
static PassRefPtr<MediaControlShadowRootElement> create(HTMLMediaElement*);
- void updateStyle();
virtual void detach();
private:
@@ -86,19 +85,17 @@ private:
class MediaControlElement : public HTMLDivElement {
public:
- static PassRefPtr<MediaControlElement> create(HTMLMediaElement*, PseudoId);
-
virtual void attach();
void attachToParent(Element*);
void update();
void updateStyle();
- MediaControlElementType displayType() const { return m_displayType; }
+ virtual MediaControlElementType displayType() const = 0;
HTMLMediaElement* mediaElement() const { return m_mediaElement; }
protected:
- MediaControlElement(HTMLMediaElement*, PseudoId);
+ MediaControlElement(HTMLMediaElement*);
virtual bool rendererIsNeeded(RenderStyle*);
@@ -108,19 +105,32 @@ private:
virtual bool isMediaControlElement() const { return true; }
HTMLMediaElement* m_mediaElement;
- PseudoId m_pseudoStyleId;
- MediaControlElementType m_displayType; // some elements can show multiple types (e.g. play/pause)
};
// ----------------------------
+class MediaControlPanelElement : public MediaControlElement {
+public:
+ static PassRefPtr<MediaControlPanelElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlPanelElement(HTMLMediaElement*);
+ virtual MediaControlElementType displayType() const;
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
+
+// ----------------------------
+
class MediaControlTimelineContainerElement : public MediaControlElement {
public:
static PassRefPtr<MediaControlTimelineContainerElement> create(HTMLMediaElement*);
private:
MediaControlTimelineContainerElement(HTMLMediaElement*);
+ virtual MediaControlElementType displayType() const;
virtual bool rendererIsNeeded(RenderStyle*);
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -137,6 +147,8 @@ public:
private:
MediaControlVolumeSliderContainerElement(HTMLMediaElement*);
+ virtual MediaControlElementType displayType() const;
+ virtual const AtomicString& shadowPseudoId() const;
bool m_isVisible;
int m_x, m_y;
@@ -153,7 +165,9 @@ public:
private:
MediaControlStatusDisplayElement(HTMLMediaElement*);
+ virtual MediaControlElementType displayType() const;
virtual bool rendererIsNeeded(RenderStyle*);
+ virtual const AtomicString& shadowPseudoId() const;
enum StateBeingDisplayed { Nothing, Loading, LiveBroadcast };
StateBeingDisplayed m_stateBeingDisplayed;
@@ -174,12 +188,10 @@ public:
HTMLMediaElement* mediaElement() const { return m_mediaElement; }
protected:
- MediaControlInputElement(HTMLMediaElement*, PseudoId);
+ MediaControlInputElement(HTMLMediaElement*, MediaControlElementType);
void setDisplayType(MediaControlElementType);
- PseudoId pseudoStyleId() const { return m_pseudoStyleId; }
-
private:
virtual void attach();
virtual bool rendererIsNeeded(RenderStyle*);
@@ -190,8 +202,7 @@ private:
virtual void updateDisplayType() { }
- HTMLMediaElement* m_mediaElement;
- PseudoId m_pseudoStyleId;
+ HTMLMediaElement* m_mediaElement;
MediaControlElementType m_displayType;
};
@@ -199,17 +210,31 @@ private:
class MediaControlMuteButtonElement : public MediaControlInputElement {
public:
- enum ButtonLocation { Controller, VolumeSlider };
- static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*, ButtonLocation);
+ static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*);
virtual void defaultEventHandler(Event*);
-private:
- MediaControlMuteButtonElement(HTMLMediaElement*, ButtonLocation);
+protected:
+ MediaControlMuteButtonElement(HTMLMediaElement*, MediaControlElementType);
+private:
virtual void updateDisplayType();
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
+// ----------------------------
+
+class MediaControlVolumeSliderMuteButtonElement : public MediaControlMuteButtonElement {
+public:
+ static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlVolumeSliderMuteButtonElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
+
// ----------------------------
class MediaControlPlayButtonElement : public MediaControlInputElement {
@@ -222,20 +247,20 @@ private:
MediaControlPlayButtonElement(HTMLMediaElement*);
virtual void updateDisplayType();
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
class MediaControlSeekButtonElement : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlSeekButtonElement> create(HTMLMediaElement*, PseudoId);
-
virtual void defaultEventHandler(Event*);
-private:
- MediaControlSeekButtonElement(HTMLMediaElement*, PseudoId);
+protected:
+ MediaControlSeekButtonElement(HTMLMediaElement*, MediaControlElementType);
- bool isForwardButton() const;
+private:
+ virtual bool isForwardButton() const = 0;
virtual void detach();
void seekTimerFired(Timer<MediaControlSeekButtonElement>*);
@@ -244,7 +269,33 @@ private:
bool m_capturing;
Timer<MediaControlSeekButtonElement> m_seekTimer;
};
-
+
+// ----------------------------
+
+class MediaControlSeekForwardButtonElement : public MediaControlSeekButtonElement {
+public:
+ static PassRefPtr<MediaControlSeekForwardButtonElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlSeekForwardButtonElement(HTMLMediaElement*);
+
+ virtual bool isForwardButton() const { return true; }
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
+// ----------------------------
+
+class MediaControlSeekBackButtonElement : public MediaControlSeekButtonElement {
+public:
+ static PassRefPtr<MediaControlSeekBackButtonElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlSeekBackButtonElement(HTMLMediaElement*);
+
+ virtual bool isForwardButton() const { return false; }
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
// ----------------------------
class MediaControlRewindButtonElement : public MediaControlInputElement {
@@ -255,6 +306,8 @@ public:
private:
MediaControlRewindButtonElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -267,6 +320,8 @@ public:
private:
MediaControlReturnToRealtimeButtonElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -281,6 +336,7 @@ private:
MediaControlToggleClosedCaptionsButtonElement(HTMLMediaElement*);
virtual void updateDisplayType();
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -294,6 +350,8 @@ public:
private:
MediaControlTimelineElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -307,6 +365,8 @@ public:
private:
MediaControlVolumeSliderElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
@@ -319,22 +379,23 @@ public:
private:
MediaControlFullscreenButtonElement(HTMLMediaElement*);
+
+ virtual const AtomicString& shadowPseudoId() const;
};
// ----------------------------
class MediaControlTimeDisplayElement : public MediaControlElement {
public:
- static PassRefPtr<MediaControlTimeDisplayElement> create(HTMLMediaElement*, PseudoId);
-
void setVisible(bool);
void setCurrentValue(float);
float currentValue() const { return m_currentValue; }
-private:
- MediaControlTimeDisplayElement(HTMLMediaElement*, PseudoId);
+protected:
+ MediaControlTimeDisplayElement(HTMLMediaElement*);
+private:
virtual PassRefPtr<RenderStyle> styleForElement();
float m_currentValue;
bool m_isVisible;
@@ -342,6 +403,32 @@ private:
// ----------------------------
+class MediaControlTimeRemainingDisplayElement : public MediaControlTimeDisplayElement {
+public:
+ static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlTimeRemainingDisplayElement(HTMLMediaElement*);
+
+ virtual MediaControlElementType displayType() const;
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
+// ----------------------------
+
+class MediaControlCurrentTimeDisplayElement : public MediaControlTimeDisplayElement {
+public:
+ static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(HTMLMediaElement*);
+
+private:
+ MediaControlCurrentTimeDisplayElement(HTMLMediaElement*);
+
+ virtual MediaControlElementType displayType() const;
+ virtual const AtomicString& shadowPseudoId() const;
+};
+
+// ----------------------------
+
class RenderMediaControlShadowRoot : public RenderBlock {
public:
RenderMediaControlShadowRoot(Element* e) : RenderBlock(e) { }
diff --git a/Source/WebCore/rendering/RenderBR.h b/Source/WebCore/rendering/RenderBR.h
index 7216b5a..72a4514 100644
--- a/Source/WebCore/rendering/RenderBR.h
+++ b/Source/WebCore/rendering/RenderBR.h
@@ -40,8 +40,8 @@ public:
virtual IntRect selectionRectForRepaint(RenderBoxModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/) { return IntRect(); }
- virtual unsigned width(unsigned /*from*/, unsigned /*len*/, const Font&, int /*xpos*/) const { return 0; }
- virtual unsigned width(unsigned /*from*/, unsigned /*len*/, int /*xpos*/, bool /*firstLine = false*/) const { return 0; }
+ virtual unsigned width(unsigned /*from*/, unsigned /*len*/, const Font&, int /*xPos*/, HashSet<const SimpleFontData*>* = 0 /*fallbackFonts*/ , GlyphOverflow* = 0) const { return 0; }
+ virtual unsigned width(unsigned /*from*/, unsigned /*len*/, int /*xpos*/, bool = false /*firstLine*/, HashSet<const SimpleFontData*>* = 0 /*fallbackFonts*/, GlyphOverflow* = 0) const { return 0; }
int lineHeight(bool firstLine) const;
diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp
index 7275461..87aa630 100644
--- a/Source/WebCore/rendering/RenderBlock.cpp
+++ b/Source/WebCore/rendering/RenderBlock.cpp
@@ -36,6 +36,7 @@
#include "HitTestResult.h"
#include "InlineTextBox.h"
#include "PaintInfo.h"
+#include "RenderCombineText.h"
#include "RenderFlexibleBox.h"
#include "RenderImage.h"
#include "RenderInline.h"
@@ -1267,7 +1268,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren, int pageLogicalHeight)
statePusher.pop();
if (view()->layoutState()->m_pageLogicalHeight)
- setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+ setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
updateLayerTransform();
@@ -1330,10 +1331,18 @@ void RenderBlock::addOverflowFromChildren()
ColumnInfo* colInfo = columnInfo();
if (columnCount(colInfo)) {
IntRect lastRect = columnRectAt(colInfo, columnCount(colInfo) - 1);
- int overflowLeft = !style()->isLeftToRightDirection() ? min(0, lastRect.x()) : 0;
- int overflowRight = style()->isLeftToRightDirection() ? max(width(), lastRect.x() + lastRect.width()) : 0;
- int overflowHeight = borderTop() + paddingTop() + colInfo->columnHeight();
- addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
+ if (style()->isHorizontalWritingMode()) {
+ int overflowLeft = !style()->isLeftToRightDirection() ? min(0, lastRect.x()) : 0;
+ int overflowRight = style()->isLeftToRightDirection() ? max(width(), lastRect.maxX()) : 0;
+ int overflowHeight = borderBefore() + paddingBefore() + colInfo->columnHeight();
+ addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
+ } else {
+ IntRect lastRect = columnRectAt(colInfo, columnCount(colInfo) - 1);
+ int overflowTop = !style()->isLeftToRightDirection() ? min(0, lastRect.y()) : 0;
+ int overflowBottom = style()->isLeftToRightDirection() ? max(height(), lastRect.maxY()) : 0;
+ int overflowWidth = borderBefore() + paddingBefore() + colInfo->columnHeight();
+ addLayoutOverflow(IntRect(0, overflowTop, overflowWidth, overflowBottom - overflowTop));
+ }
}
}
}
@@ -1376,14 +1385,13 @@ void RenderBlock::addOverflowFromBlockChildren()
void RenderBlock::addOverflowFromFloats()
{
- IntRect result;
if (!m_floatingObjects)
return;
FloatingObject* r;
DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
for (; (r = it.current()); ++it) {
if (r->m_isDescendant)
- addOverflowFromChild(r->m_renderer, IntSize(r->left() + r->m_renderer->marginLeft(), r->top() + r->m_renderer->marginTop()));
+ addOverflowFromChild(r->m_renderer, IntSize(xPositionForFloatIncludingMargin(r), yPositionForFloatIncludingMargin(r)));
}
return;
}
@@ -1649,7 +1657,7 @@ int RenderBlock::collapseMargins(RenderBox* child, MarginInfo& marginInfo)
bool paginated = view()->layoutState()->isPaginated();
if (paginated && logicalTop > beforeCollapseLogicalTop) {
int oldLogicalTop = logicalTop;
- logicalTop = min(logicalTop, nextPageTop(beforeCollapseLogicalTop));
+ logicalTop = min(logicalTop, nextPageLogicalTop(beforeCollapseLogicalTop));
setLogicalHeight(logicalHeight() + (logicalTop - oldLogicalTop));
}
return logicalTop;
@@ -1719,7 +1727,7 @@ int RenderBlock::estimateLogicalTopPosition(RenderBox* child, const MarginInfo&
// Adjust logicalTopEstimate down to the next page if the margins are so large that we don't fit on the current
// page.
if (paginated && logicalTopEstimate > logicalHeight())
- logicalTopEstimate = min(logicalTopEstimate, nextPageTop(logicalHeight()));
+ logicalTopEstimate = min(logicalTopEstimate, nextPageLogicalTop(logicalHeight()));
logicalTopEstimate += getClearDelta(child, logicalTopEstimate);
@@ -2062,7 +2070,7 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
if (paginated) {
// Check for an after page/column break.
- int newHeight = applyAfterBreak(child, height(), marginInfo);
+ int newHeight = applyAfterBreak(child, logicalHeight(), marginInfo);
if (newHeight != height())
setLogicalHeight(newHeight);
}
@@ -2166,7 +2174,7 @@ void RenderBlock::markForPaginationRelayoutIfNeeded()
if (needsLayout())
return;
- if (view()->layoutState()->pageLogicalHeightChanged() || (view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(y()) != pageLogicalOffset()))
+ if (view()->layoutState()->pageLogicalHeightChanged() || (view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(logicalTop()) != pageLogicalOffset()))
setChildNeedsLayout(true, false);
}
@@ -2243,32 +2251,34 @@ void RenderBlock::paintColumnRules(PaintInfo& paintInfo, int tx, int ty)
// We need to do multiple passes, breaking up our child painting into strips.
ColumnInfo* colInfo = columnInfo();
unsigned colCount = columnCount(colInfo);
- int currXOffset = style()->isLeftToRightDirection() ? 0 : contentWidth();
- int ruleAdd = borderLeft() + paddingLeft();
- int ruleX = style()->isLeftToRightDirection() ? 0 : contentWidth();
+ int currLogicalLeftOffset = style()->isLeftToRightDirection() ? 0 : contentLogicalWidth();
+ int ruleAdd = logicalLeftOffsetForContent();
+ int ruleLogicalLeft = style()->isLeftToRightDirection() ? 0 : contentLogicalWidth();
for (unsigned i = 0; i < colCount; i++) {
IntRect colRect = columnRectAt(colInfo, i);
+ int inlineDirectionSize = style()->isHorizontalWritingMode() ? colRect.width() : colRect.height();
+
// Move to the next position.
if (style()->isLeftToRightDirection()) {
- ruleX += colRect.width() + colGap / 2;
- currXOffset += colRect.width() + colGap;
+ ruleLogicalLeft += inlineDirectionSize + colGap / 2;
+ currLogicalLeftOffset += inlineDirectionSize + colGap;
} else {
- ruleX -= (colRect.width() + colGap / 2);
- currXOffset -= (colRect.width() + colGap);
+ ruleLogicalLeft -= (inlineDirectionSize + colGap / 2);
+ currLogicalLeftOffset -= (inlineDirectionSize + colGap);
}
// Now paint the column rule.
if (i < colCount - 1) {
- int ruleStart = tx + ruleX - ruleWidth / 2 + ruleAdd;
- int ruleEnd = ruleStart + ruleWidth;
- int ruleTop = ty + borderTop() + paddingTop();
- int ruleBottom = ruleTop + contentHeight();
- drawLineForBoxSide(paintInfo.context, ruleStart, ruleTop, ruleEnd, ruleBottom,
+ int ruleLeft = style()->isHorizontalWritingMode() ? tx + ruleLogicalLeft - ruleWidth / 2 + ruleAdd : tx + borderBefore() + paddingBefore();
+ int ruleRight = style()->isHorizontalWritingMode() ? ruleLeft + ruleWidth : ruleLeft + contentWidth();
+ int ruleTop = style()->isHorizontalWritingMode() ? ty + borderTop() + paddingTop() : ty + ruleLogicalLeft - ruleWidth / 2 + ruleAdd;
+ int ruleBottom = style()->isHorizontalWritingMode() ? ruleTop + contentHeight() : ruleTop + ruleWidth;
+ drawLineForBoxSide(paintInfo.context, ruleLeft, ruleTop, ruleRight, ruleBottom,
style()->isLeftToRightDirection() ? BSLeft : BSRight, ruleColor, ruleStyle, 0, 0);
}
- ruleX = currXOffset;
+ ruleLogicalLeft = currLogicalLeftOffset;
}
}
@@ -2276,16 +2286,17 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
{
// We need to do multiple passes, breaking up our child painting into strips.
GraphicsContext* context = paintInfo.context;
- int colGap = columnGap();
ColumnInfo* colInfo = columnInfo();
unsigned colCount = columnCount(colInfo);
if (!colCount)
return;
- int currXOffset = style()->isLeftToRightDirection() ? 0 : contentWidth() - columnRectAt(colInfo, 0).width();
- int currYOffset = 0;
+ int currLogicalTopOffset = 0;
for (unsigned i = 0; i < colCount; i++) {
// For each rect, we clip to the rect, and then we adjust our coords.
IntRect colRect = columnRectAt(colInfo, i);
+ flipForWritingMode(colRect);
+ int logicalLeftOffset = (style()->isHorizontalWritingMode() ? colRect.x() : colRect.y()) - logicalLeftOffsetForContent();
+ IntSize offset = style()->isHorizontalWritingMode() ? IntSize(logicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, logicalLeftOffset);
colRect.move(tx, ty);
PaintInfo info(paintInfo);
info.rect.intersect(colRect);
@@ -2296,10 +2307,10 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
// Each strip pushes a clip, since column boxes are specified as being
// like overflow:hidden.
context->clip(colRect);
-
+
// Adjust our x and y when painting.
- int finalX = tx + currXOffset;
- int finalY = ty + currYOffset;
+ int finalX = tx + offset.width();
+ int finalY = ty + offset.height();
if (paintingFloats)
paintFloats(info, finalX, finalY, paintInfo.phase == PaintPhaseSelection || paintInfo.phase == PaintPhaseTextClip);
else
@@ -2307,14 +2318,12 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
context->restore();
}
-
- // Move to the next position.
- if (style()->isLeftToRightDirection())
- currXOffset += colRect.width() + colGap;
+
+ int blockDelta = (style()->isHorizontalWritingMode() ? colRect.height() : colRect.width());
+ if (style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset += blockDelta;
else
- currXOffset -= (colRect.width() + colGap);
-
- currYOffset -= colRect.height();
+ currLogicalTopOffset -= blockDelta;
}
}
@@ -2352,14 +2361,14 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty)
bool checkBeforeAlways = !childrenInline() && (usePrintRect && child->style()->pageBreakBefore() == PBALWAYS);
if (checkBeforeAlways
&& (ty + child->y()) > paintInfo.rect.y()
- && (ty + child->y()) < paintInfo.rect.bottom()) {
+ && (ty + child->y()) < paintInfo.rect.maxY()) {
view()->setBestTruncatedAt(ty + child->y(), this, true);
return;
}
if (!child->isFloating() && child->isReplaced() && usePrintRect && child->height() <= renderView->printRect().height()) {
// Paginate block-level replaced elements.
- if (ty + child->y() + child->height() > renderView->printRect().bottom()) {
+ if (ty + child->y() + child->height() > renderView->printRect().maxY()) {
if (ty + child->y() < renderView->truncatedAt())
renderView->setBestTruncatedAt(ty + child->y(), child);
// If we were able to truncate, don't paint.
@@ -2376,7 +2385,7 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty)
bool checkAfterAlways = !childrenInline() && (usePrintRect && child->style()->pageBreakAfter() == PBALWAYS);
if (checkAfterAlways
&& (ty + child->y() + child->height()) > paintInfo.rect.y()
- && (ty + child->y() + child->height()) < paintInfo.rect.bottom()) {
+ && (ty + child->y() + child->height()) < paintInfo.rect.maxY()) {
view()->setBestTruncatedAt(ty + child->y() + child->height() + max(0, child->collapsedMarginAfter()), this, true);
return;
}
@@ -2491,6 +2500,19 @@ void RenderBlock::paintObject(PaintInfo& paintInfo, int tx, int ty)
}
}
+IntPoint RenderBlock::flipFloatForWritingMode(const FloatingObject* child, const IntPoint& point) const
+{
+ if (!style()->isFlippedBlocksWritingMode())
+ return point;
+
+ // This is similar to the ParentToChildFlippingAdjustment in RenderBox::flipForWritingMode. We have to subtract out our left/top offsets twice, since
+ // it's going to get added back in. We hide this complication here so that the calling code looks normal for the unflipped
+ // case.
+ if (style()->isHorizontalWritingMode())
+ return IntPoint(point.x(), point.y() + height() - child->renderer()->height() - 2 * yPositionForFloatIncludingMargin(child));
+ return IntPoint(point.x() + width() - child->width() - 2 * xPositionForFloatIncludingMargin(child), point.y());
+}
+
void RenderBlock::paintFloats(PaintInfo& paintInfo, int tx, int ty, bool preservePhase)
{
if (!m_floatingObjects)
@@ -2503,7 +2525,7 @@ void RenderBlock::paintFloats(PaintInfo& paintInfo, int tx, int ty, bool preserv
if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer()) {
PaintInfo currentPaintInfo(paintInfo);
currentPaintInfo.phase = preservePhase ? paintInfo.phase : PaintPhaseBlockBackground;
- IntPoint childPoint = flipForWritingMode(r->m_renderer, IntPoint(tx + r->left() + r->m_renderer->marginLeft() - r->m_renderer->x(), ty + r->top() + r->m_renderer->marginTop() - r->m_renderer->y()), ParentToChildFlippingAdjustment);
+ IntPoint childPoint = flipFloatForWritingMode(r, IntPoint(tx + xPositionForFloatIncludingMargin(r) - r->m_renderer->x(), ty + yPositionForFloatIncludingMargin(r) - r->m_renderer->y()));
r->m_renderer->paint(currentPaintInfo, childPoint.x(), childPoint.y());
if (!preservePhase) {
currentPaintInfo.phase = PaintPhaseChildBlockBackgrounds;
@@ -2529,7 +2551,7 @@ void RenderBlock::paintEllipsisBoxes(PaintInfo& paintInfo, int tx, int ty)
// intersect.
int yPos = ty + firstLineBox()->y();
int h = lastLineBox()->y() + lastLineBox()->logicalHeight() - firstLineBox()->y();
- if (yPos >= paintInfo.rect.bottom() || yPos + h <= paintInfo.rect.y())
+ if (yPos >= paintInfo.rect.maxY() || yPos + h <= paintInfo.rect.y())
return;
// See if our boxes intersect with the dirty rect. If so, then we paint
@@ -2538,7 +2560,7 @@ void RenderBlock::paintEllipsisBoxes(PaintInfo& paintInfo, int tx, int ty)
for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBox()) {
yPos = ty + curr->y();
h = curr->logicalHeight();
- if (curr->ellipsisBox() && yPos < paintInfo.rect.bottom() && yPos + h > paintInfo.rect.y())
+ if (curr->ellipsisBox() && yPos < paintInfo.rect.maxY() && yPos + h > paintInfo.rect.y())
curr->paintEllipsisBox(paintInfo, tx, ty);
}
}
@@ -2737,8 +2759,8 @@ GapRects RenderBlock::selectionGaps(RenderBlock* rootBlock, const IntPoint& root
if (m_floatingObjects) {
for (DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects); it.current(); ++it) {
FloatingObject* r = it.current();
- IntRect floatBox = IntRect(offsetFromRootBlock.width() + r->left() + r->m_renderer->marginLeft(),
- offsetFromRootBlock.height() + r->top() + r->m_renderer->marginTop(),
+ IntRect floatBox = IntRect(offsetFromRootBlock.width() + xPositionForFloatIncludingMargin(r),
+ offsetFromRootBlock.height() + yPositionForFloatIncludingMargin(r),
r->m_renderer->width(), r->m_renderer->height());
rootBlock->flipForWritingMode(floatBox);
floatBox.move(rootBlockPhysicalPosition.x(), rootBlockPhysicalPosition.y());
@@ -2808,8 +2830,8 @@ GapRects RenderBlock::inlineSelectionGaps(RenderBlock* rootBlock, const IntPoint
IntRect logicalRect(curr->logicalLeft(), selTop, curr->logicalWidth(), selTop + selHeight);
logicalRect.move(style()->isHorizontalWritingMode() ? offsetFromRootBlock : IntSize(offsetFromRootBlock.height(), offsetFromRootBlock.width()));
IntRect physicalRect = rootBlock->logicalRectToPhysicalRect(rootBlockPhysicalPosition, logicalRect);
- if (!paintInfo || (style()->isHorizontalWritingMode() && physicalRect.y() < paintInfo->rect.bottom() && physicalRect.bottom() > paintInfo->rect.y())
- || (!style()->isHorizontalWritingMode() && physicalRect.x() < paintInfo->rect.right() && physicalRect.right() > paintInfo->rect.x()))
+ if (!paintInfo || (style()->isHorizontalWritingMode() && physicalRect.y() < paintInfo->rect.maxY() && physicalRect.maxY() > paintInfo->rect.y())
+ || (!style()->isHorizontalWritingMode() && physicalRect.x() < paintInfo->rect.maxX() && physicalRect.maxX() > paintInfo->rect.x()))
result.unite(curr->lineSelectionGap(rootBlock, rootBlockPhysicalPosition, offsetFromRootBlock, selTop, selHeight, paintInfo));
lastSelectedLine = curr;
@@ -3098,7 +3120,7 @@ void RenderBlock::removeFloatingObject(RenderBox* o)
// Special-case zero- and less-than-zero-height floats: those don't touch
// the line that they're on, but it still needs to be dirtied. This is
// accomplished by pretending they have a height of 1.
- logicalBottom = max(logicalBottom, logicalTop + 1);
+ logicalBottom = max(logicalBottom, logicalTop == numeric_limits<int>::max() ? logicalTop : logicalTop + 1);
markLinesDirtyInBlockRange(0, logicalBottom);
}
m_floatingObjects->removeRef(it.current());
@@ -3108,13 +3130,13 @@ void RenderBlock::removeFloatingObject(RenderBox* o)
}
}
-void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int y)
+void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int logicalOffset)
{
if (!m_floatingObjects)
return;
FloatingObject* curr = m_floatingObjects->last();
- while (curr != lastFloat && (!curr->isPlaced() || curr->top() >= y)) {
+ while (curr != lastFloat && (!curr->isPlaced() || logicalTopForFloat(curr) >= logicalOffset)) {
m_floatingObjects->removeLast();
curr = m_floatingObjects->last();
}
@@ -3460,7 +3482,7 @@ void RenderBlock::markLinesDirtyInBlockRange(int logicalTop, int logicalBottom,
RootInlineBox* lowestDirtyLine = lastRootBox();
RootInlineBox* afterLowest = lowestDirtyLine;
- while (lowestDirtyLine && lowestDirtyLine->blockLogicalHeight() >= logicalBottom) {
+ while (lowestDirtyLine && lowestDirtyLine->blockLogicalHeight() >= logicalBottom && logicalBottom < numeric_limits<int>::max()) {
afterLowest = lowestDirtyLine;
lowestDirtyLine = lowestDirtyLine->prevRootBox();
}
@@ -3591,7 +3613,7 @@ int RenderBlock::addOverhangingFloats(RenderBlock* child, int logicalLeftOffset,
if (!containsFloat(r->m_renderer)) {
int leftOffset = style()->isHorizontalWritingMode() ? logicalLeftOffset : logicalTopOffset;
int topOffset = style()->isHorizontalWritingMode() ? logicalTopOffset : logicalLeftOffset;
- FloatingObject* floatingObj = new FloatingObject(r->type(), IntRect(r->left() - leftOffset, r->top() - topOffset, r->width(), r->height()));
+ FloatingObject* floatingObj = new FloatingObject(r->type(), IntRect(r->x() - leftOffset, r->y() - topOffset, r->width(), r->height()));
floatingObj->m_renderer = r->m_renderer;
// The nearest enclosing layer always paints the float (so that zindex and stacking
@@ -3626,7 +3648,7 @@ int RenderBlock::addOverhangingFloats(RenderBlock* child, int logicalLeftOffset,
// Since the float doesn't overhang, it didn't get put into our list. We need to go ahead and add its overflow in to the
// child now.
if (r->m_isDescendant)
- child->addOverflowFromChild(r->m_renderer, IntSize(r->left() + r->m_renderer->marginLeft(), r->top() + r->m_renderer->marginTop()));
+ child->addOverflowFromChild(r->m_renderer, IntSize(xPositionForFloatIncludingMargin(r), yPositionForFloatIncludingMargin(r)));
}
}
return lowestFloatLogicalBottom;
@@ -3658,7 +3680,7 @@ void RenderBlock::addIntrudingFloats(RenderBlock* prev, int logicalLeftOffset, i
int leftOffset = style()->isHorizontalWritingMode() ? logicalLeftOffset : logicalTopOffset;
int topOffset = style()->isHorizontalWritingMode() ? logicalTopOffset : logicalLeftOffset;
- FloatingObject* floatingObj = new FloatingObject(r->type(), IntRect(r->left() - leftOffset, r->top() - topOffset, r->width(), r->height()));
+ FloatingObject* floatingObj = new FloatingObject(r->type(), IntRect(r->x() - leftOffset, r->y() - topOffset, r->width(), r->height()));
// Applying the child's margin makes no sense in the case where the child was passed in.
// since this margin was added already through the modification of the |logicalLeftOffset| variable
@@ -3667,9 +3689,9 @@ void RenderBlock::addIntrudingFloats(RenderBlock* prev, int logicalLeftOffset, i
// will get applied twice.
if (prev != parent()) {
if (style()->isHorizontalWritingMode())
- floatingObj->setLeft(floatingObj->left() + prev->marginLeft());
+ floatingObj->setX(floatingObj->x() + prev->marginLeft());
else
- floatingObj->setTop(floatingObj->top() + prev->marginTop());
+ floatingObj->setY(floatingObj->y() + prev->marginTop());
}
floatingObj->m_shouldPaint = false; // We are not in the direct inheritance chain for this float. We will never paint it.
@@ -3864,9 +3886,9 @@ bool RenderBlock::hitTestFloats(const HitTestRequest& request, HitTestResult& re
DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
for (it.toLast(); (floatingObject = it.current()); --it) {
if (floatingObject->m_shouldPaint && !floatingObject->m_renderer->hasSelfPaintingLayer()) {
- int xOffset = floatingObject->left() + floatingObject->m_renderer->marginLeft() - floatingObject->m_renderer->x();
- int yOffset = floatingObject->top() + floatingObject->m_renderer->marginTop() - floatingObject->m_renderer->y();
- IntPoint childPoint = flipForWritingMode(floatingObject->m_renderer, IntPoint(tx + xOffset, ty + yOffset), ParentToChildFlippingAdjustment);
+ int xOffset = xPositionForFloatIncludingMargin(floatingObject) - floatingObject->m_renderer->x();
+ int yOffset = yPositionForFloatIncludingMargin(floatingObject) - floatingObject->m_renderer->y();
+ IntPoint childPoint = flipFloatForWritingMode(floatingObject, IntPoint(tx + xOffset, ty + yOffset));
if (floatingObject->m_renderer->hitTest(request, result, IntPoint(x, y), childPoint.x(), childPoint.y())) {
updateHitTestResult(result, IntPoint(x - childPoint.x(), y - childPoint.y()));
return true;
@@ -3884,23 +3906,36 @@ bool RenderBlock::hitTestColumns(const HitTestRequest& request, HitTestResult& r
int colCount = columnCount(colInfo);
if (!colCount)
return false;
- int left = borderLeft() + paddingLeft();
- int currYOffset = 0;
+ int logicalLeft = logicalLeftOffsetForContent();
+ int currLogicalTopOffset = 0;
int i;
- for (i = 0; i < colCount; i++)
- currYOffset -= columnRectAt(colInfo, i).height();
+ bool isHorizontal = style()->isHorizontalWritingMode();
+ for (i = 0; i < colCount; i++) {
+ IntRect colRect = columnRectAt(colInfo, i);
+ int blockDelta = (isHorizontal ? colRect.height() : colRect.width());
+ if (style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset += blockDelta;
+ else
+ currLogicalTopOffset -= blockDelta;
+ }
for (i = colCount - 1; i >= 0; i--) {
IntRect colRect = columnRectAt(colInfo, i);
- int currXOffset = colRect.x() - left;
- currYOffset += colRect.height();
+ flipForWritingMode(colRect);
+ int currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
+ int blockDelta = (isHorizontal ? colRect.height() : colRect.width());
+ if (style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset -= blockDelta;
+ else
+ currLogicalTopOffset += blockDelta;
colRect.move(tx, ty);
if (colRect.intersects(result.rectForPoint(x, y))) {
// The point is inside this column.
// Adjust tx and ty to change where we hit test.
- int finalX = tx + currXOffset;
- int finalY = ty + currYOffset;
+ IntSize offset = isHorizontal ? IntSize(currLogicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, currLogicalLeftOffset);
+ int finalX = tx + offset.width();
+ int finalY = ty + offset.height();
if (result.isRectBasedTest() && !colRect.contains(result.rectForPoint(x, y)))
hitTestContents(request, result, x, y, finalX, finalY, hitTestAction);
else
@@ -3947,25 +3982,6 @@ Position RenderBlock::positionForBox(InlineBox *box, bool start) const
return Position(box->renderer()->node(), start ? textBox->start() : textBox->start() + textBox->len());
}
-Position RenderBlock::positionForRenderer(RenderObject* renderer, bool start) const
-{
- if (!renderer)
- return Position(node(), 0);
-
- Node* n = renderer->node() ? renderer->node() : node();
- if (!n)
- return Position();
-
- ASSERT(renderer == n->renderer());
-
- int offset = start ? renderer->caretMinOffset() : renderer->caretMaxOffset();
-
- // FIXME: This was a runtime check that seemingly couldn't fail; changed it to an assertion for now.
- ASSERT(!n->isCharacterDataNode() || renderer->isText());
-
- return Position(n, offset);
-}
-
// FIXME: This function should go on RenderObject as an instance method. Then
// all cases in which positionForPoint recurs could call this instead to
// prevent crossing editable boundaries. This would require many tests.
@@ -4139,7 +4155,7 @@ void RenderBlock::calcColumnWidth()
{
// Calculate our column width and column count.
unsigned desiredColumnCount = 1;
- int desiredColumnWidth = contentWidth();
+ int desiredColumnWidth = contentLogicalWidth();
// For now, we don't support multi-column layouts when printing, since we have to do a lot of work for proper pagination.
if (document()->paginated() || (style()->hasAutoColumnCount() && style()->hasAutoColumnWidth())) {
@@ -4214,7 +4230,7 @@ void RenderBlock::setDesiredColumnCountAndWidth(int count, int width)
int RenderBlock::desiredColumnWidth() const
{
if (!hasColumns())
- return contentWidth();
+ return contentLogicalWidth();
return gColumnInfoMap->get(this)->desiredColumnWidth();
}
@@ -4243,14 +4259,17 @@ IntRect RenderBlock::columnRectAt(ColumnInfo* colInfo, unsigned index) const
ASSERT(hasColumns() && gColumnInfoMap->get(this) == colInfo);
// Compute the appropriate rect based off our information.
- int colWidth = colInfo->desiredColumnWidth();
- int colHeight = colInfo->columnHeight();
- int colTop = borderTop() + paddingTop();
+ int colLogicalWidth = colInfo->desiredColumnWidth();
+ int colLogicalHeight = colInfo->columnHeight();
+ int colLogicalTop = borderBefore() + paddingBefore();
int colGap = columnGap();
- int colLeft = style()->isLeftToRightDirection() ?
- borderLeft() + paddingLeft() + (index * (colWidth + colGap))
- : borderLeft() + paddingLeft() + contentWidth() - colWidth - (index * (colWidth + colGap));
- return IntRect(colLeft, colTop, colWidth, colHeight);
+ int colLogicalLeft = style()->isLeftToRightDirection() ?
+ logicalLeftOffsetForContent() + (index * (colLogicalWidth + colGap))
+ : logicalLeftOffsetForContent() + contentLogicalWidth() - colLogicalWidth - (index * (colLogicalWidth + colGap));
+ IntRect rect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight);
+ if (style()->isHorizontalWritingMode())
+ return IntRect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight);
+ return IntRect(colLogicalTop, colLogicalLeft, colLogicalHeight, colLogicalWidth);
}
bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogicalHeight, LayoutStateMaintainer& statePusher)
@@ -4270,12 +4289,12 @@ bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogi
// maximum page break distance.
if (!pageLogicalHeight) {
int distanceBetweenBreaks = max(colInfo->maximumDistanceBetweenForcedBreaks(),
- view()->layoutState()->pageLogicalOffset(borderTop() + paddingTop() + contentHeight()) - colInfo->forcedBreakOffset());
+ view()->layoutState()->pageLogicalOffset(borderBefore() + paddingBefore() + contentLogicalHeight()) - colInfo->forcedBreakOffset());
columnHeight = max(colInfo->minimumColumnHeight(), distanceBetweenBreaks);
}
- } else if (contentHeight() > pageLogicalHeight * desiredColumnCount) {
+ } else if (contentLogicalHeight() > pageLogicalHeight * desiredColumnCount) {
// Now that we know the intrinsic height of the columns, we have to rebalance them.
- columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentHeight() / desiredColumnCount));
+ columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentLogicalHeight() / desiredColumnCount));
}
if (columnHeight && columnHeight != pageLogicalHeight) {
@@ -4287,10 +4306,10 @@ bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogi
}
if (pageLogicalHeight)
- colInfo->setColumnCountAndHeight(ceilf((float)contentHeight() / pageLogicalHeight), pageLogicalHeight);
+ colInfo->setColumnCountAndHeight(ceilf((float)contentLogicalHeight() / pageLogicalHeight), pageLogicalHeight);
if (columnCount(colInfo)) {
- setLogicalHeight(borderTop() + paddingTop() + colInfo->columnHeight() + borderBottom() + paddingBottom() + horizontalScrollbarHeight());
+ setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeight() + borderAfter() + paddingAfter() + scrollbarLogicalHeight());
m_overflow.clear();
}
@@ -4309,34 +4328,57 @@ void RenderBlock::adjustPointToColumnContents(IntPoint& point) const
// Determine which columns we intersect.
int colGap = columnGap();
- int leftGap = colGap / 2;
+ int halfColGap = colGap / 2;
IntPoint columnPoint(columnRectAt(colInfo, 0).location());
- int yOffset = 0;
+ int logicalOffset = 0;
for (unsigned i = 0; i < colInfo->columnCount(); i++) {
// Add in half the column gap to the left and right of the rect.
IntRect colRect = columnRectAt(colInfo, i);
- IntRect gapAndColumnRect(colRect.x() - leftGap, colRect.y(), colRect.width() + colGap, colRect.height());
-
- if (point.x() >= gapAndColumnRect.x() && point.x() < gapAndColumnRect.right()) {
- // FIXME: The clamping that follows is not completely right for right-to-left
- // content.
- // Clamp everything above the column to its top left.
- if (point.y() < gapAndColumnRect.y())
- point = gapAndColumnRect.location();
- // Clamp everything below the column to the next column's top left. If there is
- // no next column, this still maps to just after this column.
- else if (point.y() >= gapAndColumnRect.bottom()) {
- point = gapAndColumnRect.location();
- point.move(0, gapAndColumnRect.height());
+ if (style()->isHorizontalWritingMode()) {
+ IntRect gapAndColumnRect(colRect.x() - halfColGap, colRect.y(), colRect.width() + colGap, colRect.height());
+ if (point.x() >= gapAndColumnRect.x() && point.x() < gapAndColumnRect.maxX()) {
+ // FIXME: The clamping that follows is not completely right for right-to-left
+ // content.
+ // Clamp everything above the column to its top left.
+ if (point.y() < gapAndColumnRect.y())
+ point = gapAndColumnRect.location();
+ // Clamp everything below the column to the next column's top left. If there is
+ // no next column, this still maps to just after this column.
+ else if (point.y() >= gapAndColumnRect.maxY()) {
+ point = gapAndColumnRect.location();
+ point.move(0, gapAndColumnRect.height());
+ }
+
+ // We're inside the column. Translate the x and y into our column coordinate space.
+ point.move(columnPoint.x() - colRect.x(), logicalOffset);
+ return;
}
+
+ // Move to the next position.
+ logicalOffset += colRect.height();
+ } else {
+ IntRect gapAndColumnRect(colRect.x(), colRect.y() - halfColGap, colRect.width(), colRect.height() + colGap);
+ if (point.y() >= gapAndColumnRect.y() && point.y() < gapAndColumnRect.maxY()) {
+ // FIXME: The clamping that follows is not completely right for right-to-left
+ // content.
+ // Clamp everything above the column to its top left.
+ if (point.x() < gapAndColumnRect.x())
+ point = gapAndColumnRect.location();
+ // Clamp everything below the column to the next column's top left. If there is
+ // no next column, this still maps to just after this column.
+ else if (point.x() >= gapAndColumnRect.maxX()) {
+ point = gapAndColumnRect.location();
+ point.move(gapAndColumnRect.width(), 0);
+ }
- // We're inside the column. Translate the x and y into our column coordinate space.
- point.move(columnPoint.x() - colRect.x(), yOffset);
- return;
+ // We're inside the column. Translate the x and y into our column coordinate space.
+ point.move(logicalOffset, columnPoint.y() - colRect.y());
+ return;
+ }
+
+ // Move to the next position.
+ logicalOffset += colRect.width();
}
-
- // Move to the next position.
- yOffset += colRect.height();
}
}
@@ -4356,27 +4398,56 @@ void RenderBlock::adjustRectForColumns(IntRect& r) const
if (!colCount)
return;
- int left = borderLeft() + paddingLeft();
-
- int currYOffset = 0;
+ int logicalLeft = logicalLeftOffsetForContent();
+ int currLogicalOffset = 0;
+
for (unsigned i = 0; i < colCount; i++) {
IntRect colRect = columnRectAt(colInfo, i);
- int currXOffset = colRect.x() - left;
-
IntRect repaintRect = r;
- repaintRect.move(currXOffset, currYOffset);
-
+ if (style()->isHorizontalWritingMode()) {
+ int currXOffset = colRect.x() - logicalLeft;
+ repaintRect.move(currXOffset, currLogicalOffset);
+ currLogicalOffset -= colRect.height();
+ } else {
+ int currYOffset = colRect.y() - logicalLeft;
+ repaintRect.move(currLogicalOffset, currYOffset);
+ currLogicalOffset -= colRect.width();
+ }
repaintRect.intersect(colRect);
-
result.unite(repaintRect);
-
- // Move to the next position.
- currYOffset -= colRect.height();
}
r = result;
}
+IntPoint RenderBlock::flipForWritingModeIncludingColumns(const IntPoint& point) const
+{
+ ASSERT(hasColumns());
+ if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+ return point;
+ ColumnInfo* colInfo = columnInfo();
+ int columnLogicalHeight = colInfo->columnHeight();
+ int expandedLogicalHeight = borderBefore() + paddingBefore() + columnCount(colInfo) * columnLogicalHeight + borderAfter() + paddingAfter() + scrollbarLogicalHeight();
+ if (style()->isHorizontalWritingMode())
+ return IntPoint(point.x(), expandedLogicalHeight - point.y());
+ return IntPoint(expandedLogicalHeight - point.x(), point.y());
+}
+
+void RenderBlock::flipForWritingModeIncludingColumns(IntRect& rect) const
+{
+ ASSERT(hasColumns());
+ if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+ return;
+
+ ColumnInfo* colInfo = columnInfo();
+ int columnLogicalHeight = colInfo->columnHeight();
+ int expandedLogicalHeight = borderBefore() + paddingBefore() + columnCount(colInfo) * columnLogicalHeight + borderAfter() + paddingAfter() + scrollbarLogicalHeight();
+ if (style()->isHorizontalWritingMode())
+ rect.setY(expandedLogicalHeight - rect.maxY());
+ else
+ rect.setX(expandedLogicalHeight - rect.maxX());
+}
+
void RenderBlock::adjustForColumns(IntSize& offset, const IntPoint& point) const
{
if (!hasColumns())
@@ -4384,18 +4455,34 @@ void RenderBlock::adjustForColumns(IntSize& offset, const IntPoint& point) const
ColumnInfo* colInfo = columnInfo();
- int left = borderLeft() + paddingLeft();
- int yOffset = 0;
+ int logicalLeft = logicalLeftOffsetForContent();
size_t colCount = columnCount(colInfo);
+ int colLogicalWidth = colInfo->desiredColumnWidth();
+ int colLogicalHeight = colInfo->columnHeight();
+
for (size_t i = 0; i < colCount; ++i) {
- IntRect columnRect = columnRectAt(colInfo, i);
- int xOffset = columnRect.x() - left;
- if (point.y() < columnRect.bottom() + yOffset) {
- offset.expand(xOffset, -yOffset);
- return;
- }
+ // Compute the edges for a given column in the block progression direction.
+ IntRect sliceRect = IntRect(logicalLeft, borderBefore() + paddingBefore() + i * colLogicalHeight, colLogicalWidth, colLogicalHeight);
+ if (!style()->isHorizontalWritingMode())
+ sliceRect = sliceRect.transposedRect();
+
+ // If we have a flipped blocks writing mode, then convert the column so that it's coming from the after edge (either top or left edge).
+ flipForWritingModeIncludingColumns(sliceRect);
+
+ int logicalOffset = style()->isFlippedBlocksWritingMode() ? (colCount - 1 - i) * colLogicalHeight : i * colLogicalHeight;
- yOffset += columnRect.height();
+ // Now we're in the same coordinate space as the point. See if it is inside the rectangle.
+ if (style()->isHorizontalWritingMode()) {
+ if (point.y() >= sliceRect.y() && point.y() < sliceRect.maxY()) {
+ offset.expand(columnRectAt(colInfo, i).x() - logicalLeft, -logicalOffset);
+ return;
+ }
+ } else {
+ if (point.x() >= sliceRect.x() && point.x() < sliceRect.maxX()) {
+ offset.expand(-logicalOffset, columnRectAt(colInfo, i).y() - logicalLeft);
+ return;
+ }
+ }
}
}
@@ -4535,16 +4622,13 @@ static int getBPMWidth(int childValue, Length cssUnit)
static int getBorderPaddingMargin(const RenderBoxModelObject* child, bool endOfInline)
{
RenderStyle* cstyle = child->style();
- int result = 0;
- bool leftSide = (cstyle->isLeftToRightDirection()) ? !endOfInline : endOfInline;
- result += getBPMWidth((leftSide ? child->marginLeft() : child->marginRight()),
- (leftSide ? cstyle->marginLeft() :
- cstyle->marginRight()));
- result += getBPMWidth((leftSide ? child->paddingLeft() : child->paddingRight()),
- (leftSide ? cstyle->paddingLeft() :
- cstyle->paddingRight()));
- result += leftSide ? child->borderLeft() : child->borderRight();
- return result;
+ if (endOfInline)
+ return getBPMWidth(child->marginEnd(), cstyle->marginEnd()) +
+ getBPMWidth(child->paddingEnd(), cstyle->paddingEnd()) +
+ child->borderEnd();
+ return getBPMWidth(child->marginStart(), cstyle->marginStart()) +
+ getBPMWidth(child->paddingStart(), cstyle->paddingStart()) +
+ child->borderStart();
}
static inline void stripTrailingSpace(int& inlineMax, int& inlineMin,
@@ -4567,7 +4651,7 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
int inlineMax = 0;
int inlineMin = 0;
- int cw = containingBlock()->contentWidth();
+ int cw = containingBlock()->contentLogicalWidth();
// If we are at the start of a line, we want to ignore all white-space.
// Also strip spaces if we previously had text that ended in a trailing space.
@@ -4577,7 +4661,7 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
// Firefox and Opera will allow a table cell to grow to fit an image inside it under
// very specific cirucumstances (in order to match common WinIE renderings).
// Not supporting the quirk has caused us to mis-render some real sites. (See Bugzilla 10517.)
- bool allowImagesToBreak = !document()->inQuirksMode() || !isTableCell() || !style()->width().isIntrinsicOrAuto();
+ bool allowImagesToBreak = !document()->inQuirksMode() || !isTableCell() || !style()->logicalWidth().isIntrinsicOrAuto();
bool autoWrap, oldAutoWrap;
autoWrap = oldAutoWrap = style()->autoWrap();
@@ -4645,12 +4729,12 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
} else {
// Inline replaced elts add in their margins to their min/max values.
int margins = 0;
- Length leftMargin = cstyle->marginLeft();
- Length rightMargin = cstyle->marginRight();
- if (leftMargin.isFixed())
- margins += leftMargin.value();
- if (rightMargin.isFixed())
- margins += rightMargin.value();
+ Length startMargin = cstyle->marginStart();
+ Length endMargin = cstyle->marginEnd();
+ if (startMargin.isFixed())
+ margins += startMargin.value();
+ if (endMargin.isFixed())
+ margins += endMargin.value();
childMin += margins;
childMax += margins;
}
@@ -4689,8 +4773,8 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
if (!addedTextIndent) {
addedTextIndent = true;
ti = style()->textIndent().calcMinValue(cw);
- childMin+=ti;
- childMax+=ti;
+ childMin += ti;
+ childMax += ti;
}
// Add our width to the max.
@@ -4725,6 +4809,9 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
continue;
}
+ if (t->style()->hasTextCombine())
+ toRenderCombineText(t)->combineText();
+
// Determine if we have a breakable character. Pass in
// whether or not we should ignore any spaces at the front
// of the string. If those are going to be stripped out,
@@ -4852,14 +4939,16 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
// A margin basically has three types: fixed, percentage, and auto (variable).
// Auto and percentage margins simply become 0 when computing min/max width.
// Fixed margins can be added in as is.
- Length ml = child->style()->marginLeft();
- Length mr = child->style()->marginRight();
- int margin = 0, marginLeft = 0, marginRight = 0;
- if (ml.isFixed())
- marginLeft += ml.value();
- if (mr.isFixed())
- marginRight += mr.value();
- margin = marginLeft + marginRight;
+ Length startMarginLength = child->style()->marginStart();
+ Length endMarginLength = child->style()->marginEnd();
+ int margin = 0;
+ int marginStart = 0;
+ int marginEnd = 0;
+ if (startMarginLength.isFixed())
+ marginStart += startMarginLength.value();
+ if (endMarginLength.isFixed())
+ marginEnd += endMarginLength.value();
+ margin = marginStart + marginEnd;
int w = child->minPreferredLogicalWidth() + margin;
m_minPreferredLogicalWidth = max(w, m_minPreferredLogicalWidth);
@@ -4875,8 +4964,11 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
// Determine a left and right max value based off whether or not the floats can fit in the
// margins of the object. For negative margins, we will attempt to overlap the float if the negative margin
// is smaller than the float width.
- int maxLeft = marginLeft > 0 ? max(floatLeftWidth, marginLeft) : floatLeftWidth + marginLeft;
- int maxRight = marginRight > 0 ? max(floatRightWidth, marginRight) : floatRightWidth + marginRight;
+ bool ltr = containingBlock()->style()->isLeftToRightDirection();
+ int marginLogicalLeft = ltr ? marginStart : marginEnd;
+ int marginLogicalRight = ltr ? marginEnd : marginStart;
+ int maxLeft = marginLogicalLeft > 0 ? max(floatLeftWidth, marginLogicalLeft) : floatLeftWidth + marginLogicalLeft;
+ int maxRight = marginLogicalRight > 0 ? max(floatRightWidth, marginLogicalRight) : floatRightWidth + marginLogicalRight;
w = child->maxPreferredLogicalWidth() + maxLeft + maxRight;
w = max(w, floatLeftWidth + floatRightWidth);
}
@@ -4906,7 +4998,7 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
// of 100px because of the table.
// We can achieve this effect by making the maxwidth of blocks that contain tables
// with percentage widths be infinite (as long as they are not inside a table cell).
- if (document()->inQuirksMode() && child->style()->width().isPercent() &&
+ if (document()->inQuirksMode() && child->style()->logicalWidth().isPercent() &&
!isTableCell() && child->isTable() && m_maxPreferredLogicalWidth < BLOCK_MAX_WIDTH) {
RenderBlock* cb = containingBlock();
while (!cb->isRenderView() && !cb->isTableCell())
@@ -4992,8 +5084,8 @@ int RenderBlock::baselinePosition(FontBaseline baselineType, bool firstLine, Lin
return RenderBox::baselinePosition(baselineType, firstLine, direction, linePositionMode);
}
- const Font& f = style(firstLine)->font();
- return f.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
+ const FontMetrics& fontMetrics = style(firstLine)->fontMetrics();
+ return fontMetrics.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - fontMetrics.height()) / 2;
}
int RenderBlock::firstLineBoxBaseline() const
@@ -5003,7 +5095,7 @@ int RenderBlock::firstLineBoxBaseline() const
if (childrenInline()) {
if (firstLineBox())
- return firstLineBox()->logicalTop() + style(true)->font().ascent(firstRootBox()->baselineType());
+ return firstLineBox()->logicalTop() + style(true)->fontMetrics().ascent(firstRootBox()->baselineType());
else
return -1;
}
@@ -5029,11 +5121,13 @@ int RenderBlock::lastLineBoxBaseline() const
if (childrenInline()) {
if (!firstLineBox() && hasLineIfEmpty()) {
- const Font& f = firstLineStyle()->font();
- return f.ascent() + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - f.height()) / 2 + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight());
+ const FontMetrics& fontMetrics = firstLineStyle()->fontMetrics();
+ return fontMetrics.ascent()
+ + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - fontMetrics.height()) / 2
+ + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight());
}
if (lastLineBox())
- return lastLineBox()->logicalTop() + style(lastLineBox() == firstLineBox())->font().ascent(lastRootBox()->baselineType());
+ return lastLineBox()->logicalTop() + style(lastLineBox() == firstLineBox())->fontMetrics().ascent(lastRootBox()->baselineType());
return -1;
} else {
bool haveNormalFlowChild = false;
@@ -5046,8 +5140,10 @@ int RenderBlock::lastLineBoxBaseline() const
}
}
if (!haveNormalFlowChild && hasLineIfEmpty()) {
- const Font& f = firstLineStyle()->font();
- return f.ascent() + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - f.height()) / 2 + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight());
+ const FontMetrics& fontMetrics = firstLineStyle()->fontMetrics();
+ return fontMetrics.ascent()
+ + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - fontMetrics.height()) / 2
+ + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight());
}
}
@@ -5400,7 +5496,7 @@ void RenderBlock::adjustForBorderFit(int x, int& left, int& right) const
for (; (r = it.current()); ++it) {
// Only examine the object if our m_shouldPaint flag is set.
if (r->m_shouldPaint) {
- int floatLeft = r->left() - r->m_renderer->x() + r->m_renderer->marginLeft();
+ int floatLeft = xPositionForFloatIncludingMargin(r) - r->m_renderer->x();
int floatRight = floatLeft + r->m_renderer->width();
left = min(left, floatLeft);
right = max(right, floatRight);
@@ -5755,16 +5851,18 @@ RenderBlock* RenderBlock::createAnonymousColumnSpanBlock() const
return newBox;
}
-int RenderBlock::nextPageTop(int yPos) const
+int RenderBlock::nextPageLogicalTop(int logicalOffset) const
{
LayoutState* layoutState = view()->layoutState();
if (!layoutState->m_pageLogicalHeight)
- return yPos;
+ return logicalOffset;
- // The yPos is in our coordinate space. We can add in our pushed offset.
+ // The logicalOffset is in our coordinate space. We can add in our pushed offset.
int pageLogicalHeight = layoutState->m_pageLogicalHeight;
- int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight;
- return yPos + remainingHeight;
+ IntSize delta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+ int offset = style()->isHorizontalWritingMode() ? delta.height() : delta.width();
+ int remainingLogicalHeight = (pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight) % pageLogicalHeight;
+ return logicalOffset + remainingLogicalHeight;
}
static bool inNormalFlow(RenderBox* child)
@@ -5781,7 +5879,7 @@ static bool inNormalFlow(RenderBox* child)
return true;
}
-int RenderBlock::applyBeforeBreak(RenderBox* child, int yPos)
+int RenderBlock::applyBeforeBreak(RenderBox* child, int logicalOffset)
{
// FIXME: Add page break checking here when we support printing.
bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
@@ -5789,13 +5887,13 @@ int RenderBlock::applyBeforeBreak(RenderBox* child, int yPos)
bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS);
if (checkBeforeAlways && inNormalFlow(child)) {
if (checkColumnBreaks)
- view()->layoutState()->addForcedColumnBreak(yPos);
- return nextPageTop(yPos);
+ view()->layoutState()->addForcedColumnBreak(logicalOffset);
+ return nextPageLogicalTop(logicalOffset);
}
- return yPos;
+ return logicalOffset;
}
-int RenderBlock::applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo)
+int RenderBlock::applyAfterBreak(RenderBox* child, int logicalOffset, MarginInfo& marginInfo)
{
// FIXME: Add page break checking here when we support printing.
bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
@@ -5804,28 +5902,30 @@ int RenderBlock::applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginI
if (checkAfterAlways && inNormalFlow(child)) {
marginInfo.setMarginAfterQuirk(true); // Cause margins to be discarded for any following content.
if (checkColumnBreaks)
- view()->layoutState()->addForcedColumnBreak(yPos);
- return nextPageTop(yPos);
+ view()->layoutState()->addForcedColumnBreak(logicalOffset);
+ return nextPageLogicalTop(logicalOffset);
}
- return yPos;
+ return logicalOffset;
}
-int RenderBlock::adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins)
+int RenderBlock::adjustForUnsplittableChild(RenderBox* child, int logicalOffset, bool includeMargins)
{
bool isUnsplittable = child->isReplaced() || child->scrollsOverflow();
if (!isUnsplittable)
- return yPos;
- int childHeight = child->height() + (includeMargins ? child->marginTop() + child->marginBottom() : 0);
+ return logicalOffset;
+ int childLogicalHeight = logicalHeightForChild(child) + (includeMargins ? marginBeforeForChild(child) + marginAfterForChild(child) : 0);
LayoutState* layoutState = view()->layoutState();
if (layoutState->m_columnInfo)
- layoutState->m_columnInfo->updateMinimumColumnHeight(childHeight);
+ layoutState->m_columnInfo->updateMinimumColumnHeight(childLogicalHeight);
int pageLogicalHeight = layoutState->m_pageLogicalHeight;
- if (!pageLogicalHeight || childHeight > pageLogicalHeight)
- return yPos;
- int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight;
- if (remainingHeight < childHeight)
- return yPos + remainingHeight;
- return yPos;
+ if (!pageLogicalHeight || childLogicalHeight > pageLogicalHeight)
+ return logicalOffset;
+ IntSize delta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+ int offset = style()->isHorizontalWritingMode() ? delta.height() : delta.width();
+ int remainingLogicalHeight = (pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight) % pageLogicalHeight;
+ if (remainingLogicalHeight < childLogicalHeight)
+ return logicalOffset + remainingLogicalHeight;
+ return logicalOffset;
}
void RenderBlock::adjustLinePositionForPagination(RootInlineBox* lineBox, int& delta)
@@ -5848,22 +5948,24 @@ void RenderBlock::adjustLinePositionForPagination(RootInlineBox* lineBox, int& d
// line and all following lines.
LayoutState* layoutState = view()->layoutState();
int pageLogicalHeight = layoutState->m_pageLogicalHeight;
- int yPos = lineBox->topVisualOverflow();
- int lineHeight = lineBox->bottomVisualOverflow() - yPos;
+ int logicalOffset = lineBox->logicalTopVisualOverflow();
+ int lineHeight = lineBox->logicalBottomVisualOverflow() - logicalOffset;
if (layoutState->m_columnInfo)
layoutState->m_columnInfo->updateMinimumColumnHeight(lineHeight);
- yPos += delta;
+ logicalOffset += delta;
lineBox->setPaginationStrut(0);
if (!pageLogicalHeight || lineHeight > pageLogicalHeight)
return;
- int remainingHeight = pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight;
- if (remainingHeight < lineHeight) {
- int totalHeight = lineHeight + max(0, yPos);
- if (lineBox == firstRootBox() && totalHeight < pageLogicalHeight && !isPositioned() && !isTableCell())
- setPaginationStrut(remainingHeight + max(0, yPos));
+ IntSize offsetDelta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+ int offset = style()->isHorizontalWritingMode() ? offsetDelta.height() : offsetDelta.width();
+ int remainingLogicalHeight = pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight;
+ if (remainingLogicalHeight < lineHeight) {
+ int totalLogicalHeight = lineHeight + max(0, logicalOffset);
+ if (lineBox == firstRootBox() && totalLogicalHeight < pageLogicalHeight && !isPositioned() && !isTableCell())
+ setPaginationStrut(remainingLogicalHeight + max(0, logicalOffset));
else {
- delta += remainingHeight;
- lineBox->setPaginationStrut(remainingHeight);
+ delta += remainingLogicalHeight;
+ lineBox->setPaginationStrut(remainingLogicalHeight);
}
}
}
diff --git a/Source/WebCore/rendering/RenderBlock.h b/Source/WebCore/rendering/RenderBlock.h
index f8829ee..2c61331 100644
--- a/Source/WebCore/rendering/RenderBlock.h
+++ b/Source/WebCore/rendering/RenderBlock.h
@@ -106,6 +106,9 @@ public:
// Block flows subclass availableWidth to handle multi column layout (shrinking the width available to children when laying out.)
virtual int availableLogicalWidth() const;
+ IntPoint flipForWritingModeIncludingColumns(const IntPoint&) const;
+ void flipForWritingModeIncludingColumns(IntRect&) const;
+
RootInlineBox* firstRootBox() const { return static_cast<RootInlineBox*>(firstLineBox()); }
RootInlineBox* lastRootBox() const { return static_cast<RootInlineBox*>(lastLineBox()); }
@@ -212,6 +215,9 @@ public:
virtual void scrollbarsChanged(bool /*horizontalScrollbarChanged*/, bool /*verticalScrollbarChanged*/) { };
+ int logicalRightOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() + availableLogicalWidth() : borderTop() + paddingTop() + availableLogicalWidth(); }
+ int logicalLeftOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); }
+
protected:
// These functions are only used internally to manipulate the render tree structure via remove/insert/appendChildNode.
// Since they are typically called only to move objects around within anonymous blocks (which only have layers in
@@ -261,8 +267,6 @@ protected:
virtual void paint(PaintInfo&, int tx, int ty);
virtual void paintObject(PaintInfo&, int tx, int ty);
- int logicalRightOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() + availableLogicalWidth() : borderTop() + paddingTop() + availableLogicalWidth(); }
- int logicalLeftOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); }
int logicalRightOffsetForLine(int position, int fixedOffset, bool applyTextIndent = true, int* logicalHeightRemaining = 0) const;
int logicalLeftOffsetForLine(int position, int fixedOffset, bool applyTextIndent = true, int* logicalHeightRemaining = 0) const;
@@ -393,15 +397,15 @@ private:
bool isPlaced() const { return m_isPlaced; }
void setIsPlaced(bool placed = true) { m_isPlaced = placed; }
- int left() const { ASSERT(isPlaced()); return m_frameRect.x(); }
- int right() const { ASSERT(isPlaced()); return m_frameRect.right(); }
- int top() const { ASSERT(isPlaced()); return m_frameRect.y(); }
- int bottom() const { ASSERT(isPlaced()); return m_frameRect.bottom(); }
+ int x() const { ASSERT(isPlaced()); return m_frameRect.x(); }
+ int maxX() const { ASSERT(isPlaced()); return m_frameRect.maxX(); }
+ int y() const { ASSERT(isPlaced()); return m_frameRect.y(); }
+ int maxY() const { ASSERT(isPlaced()); return m_frameRect.maxY(); }
int width() const { return m_frameRect.width(); }
int height() const { return m_frameRect.height(); }
-
- void setLeft(int left) { m_frameRect.setX(left); }
- void setTop(int top) { m_frameRect.setY(top); }
+
+ void setX(int x) { m_frameRect.setX(x); }
+ void setY(int y) { m_frameRect.setY(y); }
void setWidth(int width) { m_frameRect.setWidth(width); }
void setHeight(int height) { m_frameRect.setHeight(height); }
@@ -417,24 +421,26 @@ private:
bool m_isPlaced : 1;
};
- int logicalTopForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->top() : child->left(); }
- int logicalBottomForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->bottom() : child->right(); }
- int logicalLeftForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->left() : child->top(); }
- int logicalRightForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->right() : child->bottom(); }
- int logicalWidthForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->width() : child->height(); }
+ IntPoint flipFloatForWritingMode(const FloatingObject*, const IntPoint&) const;
+
+ int logicalTopForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->y() : child->x(); }
+ int logicalBottomForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->maxY() : child->maxX(); }
+ int logicalLeftForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->x() : child->y(); }
+ int logicalRightForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->maxX() : child->maxY(); }
+ int logicalWidthForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->width() : child->height(); }
void setLogicalTopForFloat(FloatingObject* child, int logicalTop)
{
if (style()->isHorizontalWritingMode())
- child->setTop(logicalTop);
+ child->setY(logicalTop);
else
- child->setLeft(logicalTop);
+ child->setX(logicalTop);
}
void setLogicalLeftForFloat(FloatingObject* child, int logicalLeft)
{
if (style()->isHorizontalWritingMode())
- child->setLeft(logicalLeft);
+ child->setX(logicalLeft);
else
- child->setTop(logicalLeft);
+ child->setY(logicalLeft);
}
void setLogicalHeightForFloat(FloatingObject* child, int logicalHeight)
{
@@ -451,6 +457,22 @@ private:
child->setHeight(logicalWidth);
}
+ int xPositionForFloatIncludingMargin(const FloatingObject* child) const
+ {
+ if (style()->isHorizontalWritingMode())
+ return child->x() + child->renderer()->marginLeft();
+ else
+ return child->x() + marginBeforeForChild(child->renderer());
+ }
+
+ int yPositionForFloatIncludingMargin(const FloatingObject* child) const
+ {
+ if (style()->isHorizontalWritingMode())
+ return child->y() + marginBeforeForChild(child->renderer());
+ else
+ return child->y() + child->renderer()->marginTop();
+ }
+
// The following functions' implementations are in RenderBlockLineLayout.cpp.
RootInlineBox* determineStartPosition(bool& firstLine, bool& fullLayout, bool& previousLineBrokeCleanly,
InlineBidiResolver&, Vector<FloatWithRect>& floats, unsigned& numCleanFloats,
@@ -488,7 +510,7 @@ private:
FloatingObject* insertFloatingObject(RenderBox*);
void removeFloatingObject(RenderBox*);
- void removeFloatingObjectsBelow(FloatingObject*, int y);
+ void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset);
// Called from lineWidth, to position the floats added in the last line.
// Returns true if and only if it has positioned any floats.
@@ -568,7 +590,6 @@ private:
void newLine(EClear);
Position positionForBox(InlineBox*, bool start = true) const;
- Position positionForRenderer(RenderObject*, bool start = true) const;
VisiblePosition positionForPointWithInlineChildren(const IntPoint&);
// Adjust tx and ty from painting offsets to the local coords of this renderer
@@ -668,11 +689,11 @@ private:
// End helper functions and structs used by layoutBlockChildren.
// Pagination routines.
- int nextPageTop(int yPos) const; // Returns the top of the next page following yPos.
- int applyBeforeBreak(RenderBox* child, int yPos); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
- int applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo); // If the child has an after break, then return a new yPos that shifts to the top of the next page/column.
- int adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins = false); // If the child is unsplittable and can't fit on the current page, return the top of the next page/column.
- void adjustLinePositionForPagination(RootInlineBox*, int& deltaY); // Computes a deltaY value that put a line at the top of the next page if it doesn't fit on the current page.
+ int nextPageLogicalTop(int logicalOffset) const; // Returns the top of the next page following logicalOffset.
+ int applyBeforeBreak(RenderBox* child, int logicalOffset); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
+ int applyAfterBreak(RenderBox* child, int logicalOffset, MarginInfo& marginInfo); // If the child has an after break, then return a new offset that shifts to the top of the next page/column.
+ int adjustForUnsplittableChild(RenderBox* child, int logicalOffset, bool includeMargins = false); // If the child is unsplittable and can't fit on the current page, return the top of the next page/column.
+ void adjustLinePositionForPagination(RootInlineBox*, int& deltaOffset); // Computes a deltaOffset value that put a line at the top of the next page if it doesn't fit on the current page.
typedef PositionedObjectsListHashSet::const_iterator Iterator;
DeprecatedPtrList<FloatingObject>* m_floatingObjects;
diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
index 5e16931..5e2b52d 100644
--- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All right reserved.
+ * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All right reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
@@ -23,12 +23,12 @@
#include "config.h"
#include "BidiResolver.h"
-#include "CharacterNames.h"
#include "Hyphenation.h"
#include "InlineIterator.h"
#include "InlineTextBox.h"
#include "Logging.h"
#include "RenderArena.h"
+#include "RenderCombineText.h"
#include "RenderInline.h"
#include "RenderLayer.h"
#include "RenderListMarker.h"
@@ -42,6 +42,13 @@
#include <wtf/RefCountedLeakCounter.h>
#include <wtf/StdLibExtras.h>
#include <wtf/Vector.h>
+#include <wtf/unicode/CharacterNames.h>
+
+#if ENABLE(SVG)
+#include "RenderSVGInlineText.h"
+#include "SVGRootInlineBox.h"
+#endif
+
#ifdef ANDROID_LAYOUT
#include "Frame.h"
#include "FrameTree.h"
@@ -50,11 +57,6 @@
#include "HTMLNames.h"
#endif // ANDROID_LAYOUT
-#if ENABLE(SVG)
-#include "RenderSVGInlineText.h"
-#include "SVGRootInlineBox.h"
-#endif
-
using namespace std;
using namespace WTF;
using namespace Unicode;
@@ -190,6 +192,16 @@ static inline void dirtyLineBoxesForRenderer(RenderObject* o, bool fullLayout)
toRenderInline(o)->dirtyLineBoxes(fullLayout);
}
+static bool parentIsConstructedOrHaveNext(InlineFlowBox* parentBox)
+{
+ do {
+ if (parentBox->isConstructed() || parentBox->nextOnLine())
+ return true;
+ parentBox = parentBox->parent();
+ } while (parentBox);
+ return false;
+}
+
InlineFlowBox* RenderBlock::createLineBoxes(RenderObject* obj, bool firstLine)
{
// See if we have an unconstructed line box for this object that is also
@@ -204,13 +216,13 @@ InlineFlowBox* RenderBlock::createLineBoxes(RenderObject* obj, bool firstLine)
// Get the last box we made for this render object.
parentBox = obj->isRenderInline() ? toRenderInline(obj)->lastLineBox() : toRenderBlock(obj)->lastLineBox();
- // If this box is constructed then it is from a previous line, and we need
- // to make a new box for our line. If this box is unconstructed but it has
+ // If this box or its ancestor is constructed then it is from a previous line, and we need
+ // to make a new box for our line. If this box or its ancestor is unconstructed but it has
// something following it on the line, then we know we have to make a new box
// as well. In this situation our inline has actually been split in two on
// the same line (this can happen with very fancy language mixtures).
bool constructedNewBox = false;
- if (!parentBox || parentBox->isConstructed() || parentBox->nextOnLine()) {
+ if (!parentBox || parentIsConstructedOrHaveNext(parentBox)) {
// We need to make a new box for this render object. Once
// made, we need to place it at the end of the current line.
InlineBox* newBox = createInlineBoxForRenderer(obj, obj == this);
@@ -317,7 +329,9 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
int availableLogicalWidth = availableLogicalWidthForLine(logicalHeight(), firstLine);
int totalLogicalWidth = lineBox->getFlowSpacingLogicalWidth();
bool needsWordSpacing = false;
- unsigned numSpaces = 0;
+ unsigned expansionOpportunityCount = 0;
+ bool isAfterExpansion = true;
+ Vector<unsigned, 16> expansionOpportunities;
ETextAlign textAlign = style()->textAlign();
for (BidiRun* r = firstRun; r; r = r->next()) {
@@ -329,12 +343,9 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
RenderText* rt = toRenderText(r->m_object);
if (textAlign == JUSTIFY && r != trailingSpaceRun) {
- const UChar* characters = rt->characters();
- for (int i = r->m_start; i < r->m_stop; i++) {
- UChar c = characters[i];
- if (c == ' ' || c == '\n' || c == '\t')
- numSpaces++;
- }
+ unsigned opportunitiesInRun = Font::expansionOpportunityCount(rt->characters() + r->m_start, r->m_stop - r->m_start, r->m_box->direction(), isAfterExpansion);
+ expansionOpportunities.append(opportunitiesInRun);
+ expansionOpportunityCount += opportunitiesInRun;
}
if (int length = rt->textLength()) {
@@ -361,16 +372,24 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.add(static_cast<InlineTextBox*>(r->m_box), make_pair(Vector<const SimpleFontData*>(), GlyphOverflow())).first;
it->second.second = glyphOverflow;
}
- } else if (!r->m_object->isRenderInline()) {
- RenderBox* renderBox = toRenderBox(r->m_object);
- renderBox->computeLogicalWidth();
- r->m_box->setLogicalWidth(logicalWidthForChild(renderBox));
- totalLogicalWidth += marginStartForChild(renderBox) + marginEndForChild(renderBox);
+ } else {
+ isAfterExpansion = false;
+ if (!r->m_object->isRenderInline()) {
+ RenderBox* renderBox = toRenderBox(r->m_object);
+ renderBox->computeLogicalWidth();
+ r->m_box->setLogicalWidth(logicalWidthForChild(renderBox));
+ totalLogicalWidth += marginStartForChild(renderBox) + marginEndForChild(renderBox);
+ }
}
totalLogicalWidth += r->m_box->logicalWidth();
}
+ if (isAfterExpansion && !expansionOpportunities.isEmpty()) {
+ expansionOpportunities.last()--;
+ expansionOpportunityCount--;
+ }
+
// Armed with the total width of the line (without justification),
// we now examine our text-align property in order to determine where to position the
// objects horizontally. The total width of the line can be increased if we end up
@@ -392,7 +411,7 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
}
break;
case JUSTIFY:
- if (numSpaces && !reachedEnd && !lineBox->endsWithBreak()) {
+ if (expansionOpportunityCount && !reachedEnd && !lineBox->endsWithBreak()) {
if (trailingSpaceRun) {
totalLogicalWidth -= trailingSpaceRun->m_box->logicalWidth();
trailingSpaceRun->m_box->setLogicalWidth(0);
@@ -401,7 +420,7 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
}
// fall through
case TAAUTO:
- numSpaces = 0;
+ expansionOpportunityCount = 0;
// for right to left fall through to right aligned
if (style()->isLeftToRightDirection()) {
if (totalLogicalWidth > availableLogicalWidth && trailingSpaceRun)
@@ -443,31 +462,26 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
break;
}
- if (numSpaces) {
+ if (expansionOpportunityCount) {
+ size_t i = 0;
for (BidiRun* r = firstRun; r; r = r->next()) {
if (!r->m_box || r == trailingSpaceRun)
continue;
- int spaceAdd = 0;
if (r->m_object->isText()) {
- unsigned spaces = 0;
- const UChar* characters = toRenderText(r->m_object)->characters();
- for (int i = r->m_start; i < r->m_stop; i++) {
- UChar c = characters[i];
- if (c == ' ' || c == '\n' || c == '\t')
- spaces++;
- }
+ unsigned opportunitiesInRun = expansionOpportunities[i++];
- ASSERT(spaces <= numSpaces);
+ ASSERT(opportunitiesInRun <= expansionOpportunityCount);
// Only justify text if whitespace is collapsed.
if (r->m_object->style()->collapseWhiteSpace()) {
- spaceAdd = (availableLogicalWidth - totalLogicalWidth) * spaces / numSpaces;
- static_cast<InlineTextBox*>(r->m_box)->setSpaceAdd(spaceAdd);
- totalLogicalWidth += spaceAdd;
+ InlineTextBox* textBox = static_cast<InlineTextBox*>(r->m_box);
+ int expansion = (availableLogicalWidth - totalLogicalWidth) * opportunitiesInRun / expansionOpportunityCount;
+ textBox->setExpansion(expansion);
+ totalLogicalWidth += expansion;
}
- numSpaces -= spaces;
- if (!numSpaces)
+ expansionOpportunityCount -= opportunitiesInRun;
+ if (!expansionOpportunityCount)
break;
}
}
@@ -909,7 +923,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
adjustLinePositionForPagination(lineBox, adjustment);
if (adjustment) {
int oldLineWidth = availableLogicalWidthForLine(oldLogicalHeight, firstLine);
- lineBox->adjustPosition(0, adjustment);
+ lineBox->adjustBlockDirectionPosition(adjustment);
if (useRepaintBounds) // This can only be a positive adjustment, so no need to update repaintTop.
repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(lineBox));
@@ -967,7 +981,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
if (delta) {
repaintLogicalTop = min(repaintLogicalTop, beforeSideVisualOverflowForLine(line) + min(delta, 0));
repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(line) + max(delta, 0));
- line->adjustPosition(0, delta);
+ line->adjustBlockDirectionPosition(delta);
}
if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) {
Vector<RenderBox*>::iterator end = cleanLineFloats->end();
@@ -1084,7 +1098,7 @@ RootInlineBox* RenderBlock::determineStartPosition(bool& firstLine, bool& fullLa
repaintLogicalTop = min(repaintLogicalTop, beforeSideVisualOverflowForLine(curr) + min(paginationDelta, 0));
repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(curr) + max(paginationDelta, 0));
- curr->adjustPosition(0, paginationDelta);
+ curr->adjustBlockDirectionPosition(paginationDelta);
}
}
@@ -1500,7 +1514,7 @@ void RenderBlock::fitBelowFloats(int widthToFit, bool firstLine, int& availableW
static inline unsigned textWidth(RenderText* text, unsigned from, unsigned len, const Font& font, int xPos, bool isFixedPitch, bool collapseWhiteSpace)
{
- if (isFixedPitch || (!from && len == text->textLength()))
+ if (isFixedPitch || (!from && len == text->textLength()) || text->style()->hasTextCombine())
return text->width(from, len, font, xPos);
return font.width(TextRun(text->characters() + from, len, !collapseWhiteSpace, xPos));
}
@@ -1752,11 +1766,14 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
bool isSVGText = t->isSVGInlineText();
#endif
+ RenderStyle* style = t->style(firstLine);
+ if (style->hasTextCombine())
+ toRenderCombineText(o)->combineText();
+
int strlen = t->textLength();
int len = strlen - pos;
const UChar* str = t->characters();
- RenderStyle* style = t->style(firstLine);
const Font& f = style->font();
bool isFixedPitch = f.isFixedPitch();
bool canHyphenate = style->hyphens() == HyphensAuto && WebCore::canHyphenate(style->hyphenationLocale());
@@ -2169,38 +2186,34 @@ void RenderBlock::addOverflowFromInlineChildren()
int RenderBlock::beforeSideVisualOverflowForLine(RootInlineBox* line) const
{
- // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
- // we continue to use top and left overflow even though physically it's bottom and right.
+ // Overflow is in the block's coordinate space, which means it isn't purely physical.
if (style()->isHorizontalWritingMode())
- return line->topVisualOverflow();
- return line->leftVisualOverflow();
+ return line->minYVisualOverflow();
+ return line->minXVisualOverflow();
}
int RenderBlock::afterSideVisualOverflowForLine(RootInlineBox* line) const
{
- // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
- // we continue to use bottom and right overflow even though physically it's top and left.
+ // Overflow is in the block's coordinate space, which means it isn't purely physical.
if (style()->isHorizontalWritingMode())
- return line->bottomVisualOverflow();
- return line->rightVisualOverflow();
+ return line->maxYVisualOverflow();
+ return line->maxXVisualOverflow();
}
int RenderBlock::beforeSideLayoutOverflowForLine(RootInlineBox* line) const
{
- // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
- // we continue to use top and left overflow even though physically it's bottom and right.
+ // Overflow is in the block's coordinate space, which means it isn't purely physical.
if (style()->isHorizontalWritingMode())
- return line->topLayoutOverflow();
- return line->leftLayoutOverflow();
+ return line->minYLayoutOverflow();
+ return line->minXLayoutOverflow();
}
int RenderBlock::afterSideLayoutOverflowForLine(RootInlineBox* line) const
{
- // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
- // we continue to use bottom and right overflow even though physically it's top and left.
+ // Overflow is in the block's coordinate space, which means it isn't purely physical.
if (style()->isHorizontalWritingMode())
- return line->bottomLayoutOverflow();
- return line->rightLayoutOverflow();
+ return line->maxYLayoutOverflow();
+ return line->maxXLayoutOverflow();
}
void RenderBlock::deleteEllipsisLineBoxes()
diff --git a/Source/WebCore/rendering/RenderBox.cpp b/Source/WebCore/rendering/RenderBox.cpp
index 265c46a..39c80d4 100644
--- a/Source/WebCore/rendering/RenderBox.cpp
+++ b/Source/WebCore/rendering/RenderBox.cpp
@@ -425,8 +425,8 @@ int RenderBox::scrollWidth() const
// For objects with visible overflow, this matches IE.
// FIXME: Need to work right with writing modes.
if (style()->isLeftToRightDirection())
- return max(clientWidth(), rightLayoutOverflow() - borderLeft());
- return clientWidth() - min(0, leftLayoutOverflow() - borderLeft());
+ return max(clientWidth(), maxXLayoutOverflow() - borderLeft());
+ return clientWidth() - min(0, minXLayoutOverflow() - borderLeft());
}
int RenderBox::scrollHeight() const
@@ -435,7 +435,7 @@ int RenderBox::scrollHeight() const
return layer()->scrollHeight();
// For objects with visible overflow, this matches IE.
// FIXME: Need to work right with writing modes.
- return max(clientHeight(), bottomLayoutOverflow() - borderTop());
+ return max(clientHeight(), maxYLayoutOverflow() - borderTop());
}
int RenderBox::scrollLeft() const
@@ -559,16 +559,16 @@ IntRect RenderBox::reflectedRect(const IntRect& r) const
IntRect result = r;
switch (style()->boxReflect()->direction()) {
case ReflectionBelow:
- result.setY(box.bottom() + reflectionOffset() + (box.bottom() - r.bottom()));
+ result.setY(box.maxY() + reflectionOffset() + (box.maxY() - r.maxY()));
break;
case ReflectionAbove:
- result.setY(box.y() - reflectionOffset() - box.height() + (box.bottom() - r.bottom()));
+ result.setY(box.y() - reflectionOffset() - box.height() + (box.maxY() - r.maxY()));
break;
case ReflectionLeft:
- result.setX(box.x() - reflectionOffset() - box.width() + (box.right() - r.right()));
+ result.setX(box.x() - reflectionOffset() - box.width() + (box.maxX() - r.maxX()));
break;
case ReflectionRight:
- result.setX(box.right() + reflectionOffset() + (box.right() - r.right()));
+ result.setX(box.maxX() + reflectionOffset() + (box.maxX() - r.maxX()));
break;
}
return result;
@@ -1279,8 +1279,14 @@ IntSize RenderBox::offsetFromContainer(RenderObject* o, const IntPoint& point) c
if (!isInline() || isReplaced()) {
if (style()->position() != AbsolutePosition && style()->position() != FixedPosition) {
- o->adjustForColumns(offset, IntPoint(point.x() + x(), point.y() + y()));
- offset += locationOffsetIncludingFlipping();
+ if (o->hasColumns()) {
+ IntRect columnRect(frameRect());
+ toRenderBlock(o)->flipForWritingModeIncludingColumns(columnRect);
+ offset += IntSize(columnRect.location().x(), columnRect.location().y());
+ columnRect.move(point.x(), point.y());
+ o->adjustForColumns(offset, columnRect.location());
+ } else
+ offset += locationOffsetIncludingFlipping();
} else
offset += locationOffset();
}
@@ -3067,12 +3073,12 @@ IntRect RenderBox::localCaretRect(InlineBox* box, int caretOffset, int* extraWid
// <rdar://problem/3777804> Deleting all content in a document can result in giant tall-as-window insertion point
//
// FIXME: ignoring :first-line, missing good reason to take care of
- int fontHeight = style()->font().height();
+ int fontHeight = style()->fontMetrics().height();
if (fontHeight > rect.height() || (!isReplaced() && !isTable()))
rect.setHeight(fontHeight);
if (extraWidthToEndOfLine)
- *extraWidthToEndOfLine = x() + width() - rect.right();
+ *extraWidthToEndOfLine = x() + width() - rect.maxX();
// Move to local coords
rect.move(-x(), -y());
@@ -3193,9 +3199,9 @@ void RenderBox::addShadowOverflow()
style()->getBoxShadowExtent(shadowTop, shadowRight, shadowBottom, shadowLeft);
IntRect borderBox = borderBoxRect();
int overflowLeft = borderBox.x() + shadowLeft;
- int overflowRight = borderBox.right() + shadowRight;
+ int overflowRight = borderBox.maxX() + shadowRight;
int overflowTop = borderBox.y() + shadowTop;
- int overflowBottom = borderBox.bottom() + shadowBottom;
+ int overflowBottom = borderBox.maxY() + shadowBottom;
addVisualOverflow(IntRect(overflowLeft, overflowTop, overflowRight - overflowLeft, overflowBottom - overflowTop));
}
@@ -3234,13 +3240,13 @@ void RenderBox::addLayoutOverflow(const IntRect& rect)
bool hasLeftOverflow = !style()->isLeftToRightDirection() && style()->isHorizontalWritingMode();
if (!hasTopOverflow)
- overflowRect.shiftTopEdgeTo(max(overflowRect.y(), clientBox.y()));
+ overflowRect.shiftYEdgeTo(max(overflowRect.y(), clientBox.y()));
else
- overflowRect.shiftBottomEdgeTo(min(overflowRect.bottom(), clientBox.bottom()));
+ overflowRect.shiftMaxYEdgeTo(min(overflowRect.maxY(), clientBox.maxY()));
if (!hasLeftOverflow)
- overflowRect.shiftLeftEdgeTo(max(overflowRect.x(), clientBox.x()));
+ overflowRect.shiftXEdgeTo(max(overflowRect.x(), clientBox.x()));
else
- overflowRect.shiftRightEdgeTo(min(overflowRect.right(), clientBox.right()));
+ overflowRect.shiftMaxXEdgeTo(min(overflowRect.maxX(), clientBox.maxX()));
// Now re-test with the adjusted rectangle and see if it has become unreachable or fully
// contained.
@@ -3329,9 +3335,9 @@ IntRect RenderBox::visualOverflowRectForPropagation(RenderStyle* parentStyle) co
// We are putting ourselves into our parent's coordinate space. If there is a flipped block mismatch
// in a particular axis, then we have to flip the rect along that axis.
if (style()->writingMode() == RightToLeftWritingMode || parentStyle->writingMode() == RightToLeftWritingMode)
- rect.setX(width() - rect.right());
+ rect.setX(width() - rect.maxX());
else if (style()->writingMode() == BottomToTopWritingMode || parentStyle->writingMode() == BottomToTopWritingMode)
- rect.setY(height() - rect.bottom());
+ rect.setY(height() - rect.maxY());
return rect;
}
@@ -3375,9 +3381,9 @@ IntRect RenderBox::layoutOverflowRectForPropagation(RenderStyle* parentStyle) co
// We are putting ourselves into our parent's coordinate space. If there is a flipped block mismatch
// in a particular axis, then we have to flip the rect along that axis.
if (style()->writingMode() == RightToLeftWritingMode || parentStyle->writingMode() == RightToLeftWritingMode)
- rect.setX(width() - rect.right());
+ rect.setX(width() - rect.maxX());
else if (style()->writingMode() == BottomToTopWritingMode || parentStyle->writingMode() == BottomToTopWritingMode)
- rect.setY(height() - rect.bottom());
+ rect.setY(height() - rect.maxY());
return rect;
}
@@ -3400,9 +3406,9 @@ void RenderBox::flipForWritingMode(IntRect& rect) const
return;
if (style()->isHorizontalWritingMode())
- rect.setY(height() - rect.bottom());
+ rect.setY(height() - rect.maxY());
else
- rect.setX(width() - rect.right());
+ rect.setX(width() - rect.maxX());
}
int RenderBox::flipForWritingMode(int position) const
@@ -3419,6 +3425,13 @@ IntPoint RenderBox::flipForWritingMode(const IntPoint& position) const
return style()->isHorizontalWritingMode() ? IntPoint(position.x(), height() - position.y()) : IntPoint(width() - position.x(), position.y());
}
+IntPoint RenderBox::flipForWritingModeIncludingColumns(const IntPoint& point) const
+{
+ if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+ return flipForWritingMode(point);
+ return toRenderBlock(this)->flipForWritingModeIncludingColumns(point);
+}
+
IntSize RenderBox::flipForWritingMode(const IntSize& offset) const
{
if (!style()->isFlippedBlocksWritingMode())
diff --git a/Source/WebCore/rendering/RenderBox.h b/Source/WebCore/rendering/RenderBox.h
index acbcc29..7241ed1 100644
--- a/Source/WebCore/rendering/RenderBox.h
+++ b/Source/WebCore/rendering/RenderBox.h
@@ -127,21 +127,25 @@ public:
RenderBox* nextSiblingBox() const;
RenderBox* parentBox() const;
+ // Visual and layout overflow are in the coordinate space of the box. This means that they aren't purely physical directions.
+ // For horizontal-tb and vertical-lr they will match physical directions, but for horizontal-bt and vertical-rl, the top/bottom and left/right
+ // respectively are flipped when compared to their physical counterparts. For example minX is on the left in vertical-lr,
+ // but it is on the right in vertical-rl.
IntRect layoutOverflowRect() const { return m_overflow ? m_overflow->layoutOverflowRect() : clientBoxRect(); }
- int topLayoutOverflow() const { return m_overflow? m_overflow->topLayoutOverflow() : borderTop(); }
- int bottomLayoutOverflow() const { return m_overflow ? m_overflow->bottomLayoutOverflow() : borderTop() + clientHeight(); }
- int leftLayoutOverflow() const { return m_overflow ? m_overflow->leftLayoutOverflow() : borderLeft(); }
- int rightLayoutOverflow() const { return m_overflow ? m_overflow->rightLayoutOverflow() : borderLeft() + clientWidth(); }
- int logicalLeftLayoutOverflow() const { return style()->isHorizontalWritingMode() ? leftLayoutOverflow() : topLayoutOverflow(); }
- int logicalRightLayoutOverflow() const { return style()->isHorizontalWritingMode() ? rightLayoutOverflow() : bottomLayoutOverflow(); }
+ int minYLayoutOverflow() const { return m_overflow? m_overflow->minYLayoutOverflow() : borderTop(); }
+ int maxYLayoutOverflow() const { return m_overflow ? m_overflow->maxYLayoutOverflow() : borderTop() + clientHeight(); }
+ int minXLayoutOverflow() const { return m_overflow ? m_overflow->minXLayoutOverflow() : borderLeft(); }
+ int maxXLayoutOverflow() const { return m_overflow ? m_overflow->maxXLayoutOverflow() : borderLeft() + clientWidth(); }
+ int logicalLeftLayoutOverflow() const { return style()->isHorizontalWritingMode() ? minXLayoutOverflow() : minYLayoutOverflow(); }
+ int logicalRightLayoutOverflow() const { return style()->isHorizontalWritingMode() ? maxXLayoutOverflow() : maxYLayoutOverflow(); }
IntRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : borderBoxRect(); }
- int topVisualOverflow() const { return m_overflow? m_overflow->topVisualOverflow() : 0; }
- int bottomVisualOverflow() const { return m_overflow ? m_overflow->bottomVisualOverflow() : height(); }
- int leftVisualOverflow() const { return m_overflow ? m_overflow->leftVisualOverflow() : 0; }
- int rightVisualOverflow() const { return m_overflow ? m_overflow->rightVisualOverflow() : width(); }
- int logicalLeftVisualOverflow() const { return style()->isHorizontalWritingMode() ? leftVisualOverflow() : topVisualOverflow(); }
- int logicalRightVisualOverflow() const { return style()->isHorizontalWritingMode() ? rightVisualOverflow() : bottomVisualOverflow(); }
+ int minYVisualOverflow() const { return m_overflow? m_overflow->minYVisualOverflow() : 0; }
+ int maxYVisualOverflow() const { return m_overflow ? m_overflow->maxYVisualOverflow() : height(); }
+ int minXVisualOverflow() const { return m_overflow ? m_overflow->minXVisualOverflow() : 0; }
+ int maxXVisualOverflow() const { return m_overflow ? m_overflow->maxXVisualOverflow() : width(); }
+ int logicalLeftVisualOverflow() const { return style()->isHorizontalWritingMode() ? minXVisualOverflow() : minYVisualOverflow(); }
+ int logicalRightVisualOverflow() const { return style()->isHorizontalWritingMode() ? maxXVisualOverflow() : maxYVisualOverflow(); }
void addLayoutOverflow(const IntRect&);
void addVisualOverflow(const IntRect&);
@@ -172,7 +176,7 @@ public:
int clientTop() const { return borderTop(); }
int clientWidth() const;
int clientHeight() const;
- int clientLogicalBottom() const { return style()->isHorizontalWritingMode() ? clientTop() + clientHeight() : clientLeft() + clientWidth(); }
+ int clientLogicalBottom() const { return borderBefore() + (style()->isHorizontalWritingMode() ? clientHeight() : clientWidth()); }
IntRect clientBoxRect() const { return IntRect(clientLeft(), clientTop(), clientWidth(), clientHeight()); }
// scrollWidth/scrollHeight will be the same as clientWidth/clientHeight unless the
@@ -378,6 +382,7 @@ public:
IntPoint flipForWritingMode(const RenderBox* child, const IntPoint&, FlippingAdjustment) const;
int flipForWritingMode(int position) const; // The offset is in the block direction (y for horizontal writing modes, x for vertical writing modes).
IntPoint flipForWritingMode(const IntPoint&) const;
+ IntPoint flipForWritingModeIncludingColumns(const IntPoint&) const;
IntSize flipForWritingMode(const IntSize&) const;
void flipForWritingMode(IntRect&) const;
IntSize locationOffsetIncludingFlipping() const;
diff --git a/Source/WebCore/rendering/RenderBoxModelObject.cpp b/Source/WebCore/rendering/RenderBoxModelObject.cpp
index f2412a1..ffbecce 100644
--- a/Source/WebCore/rendering/RenderBoxModelObject.cpp
+++ b/Source/WebCore/rendering/RenderBoxModelObject.cpp
@@ -50,8 +50,8 @@ bool RenderBoxModelObject::s_layerWasSelfPainting = false;
static const double cInterpolationCutoff = 800. * 800.;
static const double cLowQualityTimeThreshold = 0.500; // 500 ms
-typedef pair<RenderBoxModelObject*, const void*> LastPaintSizeMapKey;
-typedef HashMap<LastPaintSizeMapKey, IntSize> LastPaintSizeMap;
+typedef HashMap<const void*, IntSize> LayerSizeMap;
+typedef HashMap<RenderBoxModelObject*, LayerSizeMap> ObjectLayerSizeMap;
// The HashMap for storing continuation pointers.
// An inline can be split with blocks occuring in between the inline content.
@@ -68,14 +68,16 @@ class ImageQualityController {
public:
ImageQualityController();
bool shouldPaintAtLowQuality(GraphicsContext*, RenderBoxModelObject*, Image*, const void* layer, const IntSize&);
- void keyDestroyed(LastPaintSizeMapKey key);
+ void removeLayer(RenderBoxModelObject*, LayerSizeMap* innerMap, const void* layer);
+ void set(RenderBoxModelObject*, LayerSizeMap* innerMap, const void* layer, const IntSize&);
void objectDestroyed(RenderBoxModelObject*);
+ bool isEmpty() { return m_objectLayerSizeMap.isEmpty(); }
private:
void highQualityRepaintTimerFired(Timer<ImageQualityController>*);
void restartTimer();
- LastPaintSizeMap m_lastPaintSizeMap;
+ ObjectLayerSizeMap m_objectLayerSizeMap;
Timer<ImageQualityController> m_timer;
bool m_animatedResizeIsActive;
};
@@ -86,31 +88,41 @@ ImageQualityController::ImageQualityController()
{
}
-void ImageQualityController::keyDestroyed(LastPaintSizeMapKey key)
+void ImageQualityController::removeLayer(RenderBoxModelObject* object, LayerSizeMap* innerMap, const void* layer)
{
- m_lastPaintSizeMap.remove(key);
- if (m_lastPaintSizeMap.isEmpty()) {
- m_animatedResizeIsActive = false;
- m_timer.stop();
+ if (innerMap) {
+ innerMap->remove(layer);
+ if (innerMap->isEmpty())
+ objectDestroyed(object);
}
}
-void ImageQualityController::objectDestroyed(RenderBoxModelObject* object)
+void ImageQualityController::set(RenderBoxModelObject* object, LayerSizeMap* innerMap, const void* layer, const IntSize& size)
{
- Vector<LastPaintSizeMapKey> keysToDie;
- for (LastPaintSizeMap::iterator it = m_lastPaintSizeMap.begin(); it != m_lastPaintSizeMap.end(); ++it)
- if (it->first.first == object)
- keysToDie.append(it->first);
- for (Vector<LastPaintSizeMapKey>::iterator it = keysToDie.begin(); it != keysToDie.end(); ++it)
- keyDestroyed(*it);
+ if (innerMap)
+ innerMap->set(layer, size);
+ else {
+ LayerSizeMap newInnerMap;
+ newInnerMap.set(layer, size);
+ m_objectLayerSizeMap.set(object, newInnerMap);
+ }
}
+void ImageQualityController::objectDestroyed(RenderBoxModelObject* object)
+{
+ m_objectLayerSizeMap.remove(object);
+ if (m_objectLayerSizeMap.isEmpty()) {
+ m_animatedResizeIsActive = false;
+ m_timer.stop();
+ }
+}
+
void ImageQualityController::highQualityRepaintTimerFired(Timer<ImageQualityController>*)
{
if (m_animatedResizeIsActive) {
m_animatedResizeIsActive = false;
- for (LastPaintSizeMap::iterator it = m_lastPaintSizeMap.begin(); it != m_lastPaintSizeMap.end(); ++it)
- it->first.first->repaint();
+ for (ObjectLayerSizeMap::iterator it = m_objectLayerSizeMap.begin(); it != m_objectLayerSizeMap.end(); ++it)
+ it->first->repaint();
}
}
@@ -130,17 +142,24 @@ bool ImageQualityController::shouldPaintAtLowQuality(GraphicsContext* context, R
// is actually being scaled.
IntSize imageSize(image->width(), image->height());
- // Look ourselves up in the hashtable.
- LastPaintSizeMapKey key(object, layer);
- LastPaintSizeMap::iterator i = m_lastPaintSizeMap.find(key);
+ // Look ourselves up in the hashtables.
+ ObjectLayerSizeMap::iterator i = m_objectLayerSizeMap.find(object);
+ LayerSizeMap* innerMap = i != m_objectLayerSizeMap.end() ? &i->second : 0;
+ IntSize oldSize;
+ bool isFirstResize = true;
+ if (innerMap) {
+ LayerSizeMap::iterator j = innerMap->find(layer);
+ if (j != innerMap->end()) {
+ isFirstResize = false;
+ oldSize = j->second;
+ }
+ }
const AffineTransform& currentTransform = context->getCTM();
bool contextIsScaled = !currentTransform.isIdentityOrTranslationOrFlipped();
if (!contextIsScaled && imageSize == size) {
// There is no scale in effect. If we had a scale in effect before, we can just remove this object from the list.
- if (i != m_lastPaintSizeMap.end())
- m_lastPaintSizeMap.remove(key);
-
+ removeLayer(object, innerMap, layer);
return false;
}
@@ -150,39 +169,44 @@ bool ImageQualityController::shouldPaintAtLowQuality(GraphicsContext* context, R
if (totalPixels > cInterpolationCutoff)
return true;
}
+
// If an animated resize is active, paint in low quality and kick the timer ahead.
if (m_animatedResizeIsActive) {
- m_lastPaintSizeMap.set(key, size);
+ set(object, innerMap, layer, size);
restartTimer();
return true;
}
// If this is the first time resizing this image, or its size is the
// same as the last resize, draw at high res, but record the paint
// size and set the timer.
- if (i == m_lastPaintSizeMap.end() || size == i->second) {
+ if (isFirstResize || oldSize == size) {
restartTimer();
- m_lastPaintSizeMap.set(key, size);
+ set(object, innerMap, layer, size);
return false;
}
// If the timer is no longer active, draw at high quality and don't
// set the timer.
if (!m_timer.isActive()) {
- keyDestroyed(key);
+ removeLayer(object, innerMap, layer);
return false;
}
// This object has been resized to two different sizes while the timer
// is active, so draw at low quality, set the flag for animated resizes and
// the object to the list for high quality redraw.
- m_lastPaintSizeMap.set(key, size);
+ set(object, innerMap, layer, size);
m_animatedResizeIsActive = true;
restartTimer();
return true;
}
+static ImageQualityController* gImageQualityController = 0;
+
static ImageQualityController* imageQualityController()
{
- static ImageQualityController* controller = new ImageQualityController;
- return controller;
+ if (!gImageQualityController)
+ gImageQualityController = new ImageQualityController;
+
+ return gImageQualityController;
}
void RenderBoxModelObject::setSelectionState(SelectionState s)
@@ -223,7 +247,13 @@ RenderBoxModelObject::~RenderBoxModelObject()
// Our layer should have been destroyed and cleared by now
ASSERT(!hasLayer());
ASSERT(!m_layer);
- imageQualityController()->objectDestroyed(this);
+ if (gImageQualityController) {
+ gImageQualityController->objectDestroyed(this);
+ if (gImageQualityController->isEmpty()) {
+ delete gImageQualityController;
+ gImageQualityController = 0;
+ }
+ }
}
void RenderBoxModelObject::destroyLayer()
@@ -351,7 +381,7 @@ int RenderBoxModelObject::relativePositionOffsetX() const
// call availableWidth on our containing block.
if (!style()->left().isAuto()) {
RenderBlock* cb = containingBlock();
- if (!style()->right().isAuto() && !containingBlock()->style()->isLeftToRightDirection())
+ if (!style()->right().isAuto() && !cb->style()->isLeftToRightDirection())
return -style()->right().calcValue(cb->availableWidth());
return style()->left().calcValue(cb->availableWidth());
}
@@ -693,9 +723,9 @@ void RenderBoxModelObject::paintFillLayerExtended(const PaintInfo& paintInfo, co
phase += destRect.location() - destOrigin;
CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer->composite() : op;
RenderObject* clientForBackgroundImage = backgroundObject ? backgroundObject : this;
- Image* image = bg->image(clientForBackgroundImage, tileSize);
- bool useLowQualityScaling = shouldPaintAtLowQuality(context, image, bgLayer, tileSize);
- context->drawTiledImage(image, style()->colorSpace(), destRect, phase, tileSize, compositeOp, useLowQualityScaling);
+ RefPtr<Image> image = bg->image(clientForBackgroundImage, tileSize);
+ bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.get(), bgLayer, tileSize);
+ context->drawTiledImage(image.get(), style()->colorSpace(), destRect, phase, tileSize, compositeOp, useLowQualityScaling);
}
}
@@ -897,7 +927,7 @@ bool RenderBoxModelObject::paintNinePieceImage(GraphicsContext* graphicsContext,
bool drawMiddle = (imageWidth - leftSlice - rightSlice) > 0 && (w - leftWidth - rightWidth) > 0 &&
(imageHeight - topSlice - bottomSlice) > 0 && (h - topWidth - bottomWidth) > 0;
- Image* image = styleImage->image(this, imageSize);
+ RefPtr<Image> image = styleImage->image(this, imageSize);
ColorSpace colorSpace = style->colorSpace();
if (drawLeft) {
@@ -906,18 +936,18 @@ bool RenderBoxModelObject::paintNinePieceImage(GraphicsContext* graphicsContext,
// The top left corner rect is (tx, ty, leftWidth, topWidth)
// The rect to use from within the image is obtained from our slice, and is (0, 0, leftSlice, topSlice)
if (drawTop)
- graphicsContext->drawImage(image, colorSpace, IntRect(tx, ty, leftWidth, topWidth),
+ graphicsContext->drawImage(image.get(), colorSpace, IntRect(tx, ty, leftWidth, topWidth),
IntRect(0, 0, leftSlice, topSlice), op);
// The bottom left corner rect is (tx, ty + h - bottomWidth, leftWidth, bottomWidth)
// The rect to use from within the image is (0, imageHeight - bottomSlice, leftSlice, botomSlice)
if (drawBottom)
- graphicsContext->drawImage(image, colorSpace, IntRect(tx, ty + h - bottomWidth, leftWidth, bottomWidth),
+ graphicsContext->drawImage(image.get(), colorSpace, IntRect(tx, ty + h - bottomWidth, leftWidth, bottomWidth),
IntRect(0, imageHeight - bottomSlice, leftSlice, bottomSlice), op);
// Paint the left edge.
// Have to scale and tile into the border rect.
- graphicsContext->drawTiledImage(image, colorSpace, IntRect(tx, ty + topWidth, leftWidth,
+ graphicsContext->drawTiledImage(image.get(), colorSpace, IntRect(tx, ty + topWidth, leftWidth,
h - topWidth - bottomWidth),
IntRect(0, topSlice, leftSlice, imageHeight - topSlice - bottomSlice),
Image::StretchTile, (Image::TileRule)vRule, op);
@@ -928,17 +958,17 @@ bool RenderBoxModelObject::paintNinePieceImage(GraphicsContext* graphicsContext,
// The top right corner rect is (tx + w - rightWidth, ty, rightWidth, topWidth)
// The rect to use from within the image is obtained from our slice, and is (imageWidth - rightSlice, 0, rightSlice, topSlice)
if (drawTop)
- graphicsContext->drawImage(image, colorSpace, IntRect(tx + w - rightWidth, ty, rightWidth, topWidth),
+ graphicsContext->drawImage(image.get(), colorSpace, IntRect(tx + w - rightWidth, ty, rightWidth, topWidth),
IntRect(imageWidth - rightSlice, 0, rightSlice, topSlice), op);
// The bottom right corner rect is (tx + w - rightWidth, ty + h - bottomWidth, rightWidth, bottomWidth)
// The rect to use from within the image is (imageWidth - rightSlice, imageHeight - bottomSlice, rightSlice, bottomSlice)
if (drawBottom)
- graphicsContext->drawImage(image, colorSpace, IntRect(tx + w - rightWidth, ty + h - bottomWidth, rightWidth, bottomWidth),
+ graphicsContext->drawImage(image.get(), colorSpace, IntRect(tx + w - rightWidth, ty + h - bottomWidth, rightWidth, bottomWidth),
IntRect(imageWidth - rightSlice, imageHeight - bottomSlice, rightSlice, bottomSlice), op);
// Paint the right edge.
- graphicsContext->drawTiledImage(image, colorSpace, IntRect(tx + w - rightWidth, ty + topWidth, rightWidth,
+ graphicsContext->drawTiledImage(image.get(), colorSpace, IntRect(tx + w - rightWidth, ty + topWidth, rightWidth,
h - topWidth - bottomWidth),
IntRect(imageWidth - rightSlice, topSlice, rightSlice, imageHeight - topSlice - bottomSlice),
Image::StretchTile, (Image::TileRule)vRule, op);
@@ -946,20 +976,20 @@ bool RenderBoxModelObject::paintNinePieceImage(GraphicsContext* graphicsContext,
// Paint the top edge.
if (drawTop)
- graphicsContext->drawTiledImage(image, colorSpace, IntRect(tx + leftWidth, ty, w - leftWidth - rightWidth, topWidth),
+ graphicsContext->drawTiledImage(image.get(), colorSpace, IntRect(tx + leftWidth, ty, w - leftWidth - rightWidth, topWidth),
IntRect(leftSlice, 0, imageWidth - rightSlice - leftSlice, topSlice),
(Image::TileRule)hRule, Image::StretchTile, op);
// Paint the bottom edge.
if (drawBottom)
- graphicsContext->drawTiledImage(image, colorSpace, IntRect(tx + leftWidth, ty + h - bottomWidth,
+ graphicsContext->drawTiledImage(image.get(), colorSpace, IntRect(tx + leftWidth, ty + h - bottomWidth,
w - leftWidth - rightWidth, bottomWidth),
IntRect(leftSlice, imageHeight - bottomSlice, imageWidth - rightSlice - leftSlice, bottomSlice),
(Image::TileRule)hRule, Image::StretchTile, op);
// Paint the middle.
if (drawMiddle)
- graphicsContext->drawTiledImage(image, colorSpace, IntRect(tx + leftWidth, ty + topWidth, w - leftWidth - rightWidth,
+ graphicsContext->drawTiledImage(image.get(), colorSpace, IntRect(tx + leftWidth, ty + topWidth, w - leftWidth - rightWidth,
h - topWidth - bottomWidth),
IntRect(leftSlice, topSlice, imageWidth - rightSlice - leftSlice, imageHeight - topSlice - bottomSlice),
(Image::TileRule)hRule, (Image::TileRule)vRule, op);
@@ -1545,6 +1575,20 @@ void RenderBoxModelObject::clipBorderSidePolygon(GraphicsContext* graphicsContex
graphicsContext->clipConvexPolygon(4, secondQuad, !secondEdgeMatches);
}
+static inline IntRect areaCastingShadowInHole(const IntRect& holeRect, int shadowBlur, int shadowSpread, const IntSize& shadowOffset)
+{
+ IntRect bounds(holeRect);
+
+ bounds.inflate(shadowBlur);
+
+ if (shadowSpread < 0)
+ bounds.inflate(-shadowSpread);
+
+ IntRect offsetBounds = bounds;
+ offsetBounds.move(-shadowOffset);
+ return unionRect(bounds, offsetBounds);
+}
+
void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int ty, int w, int h, const RenderStyle* s, ShadowStyle shadowStyle, bool includeLogicalLeftEdge, bool includeLogicalRightEdge)
{
// FIXME: Deal with border-image. Would be great to use border-image as a mask.
@@ -1555,17 +1599,18 @@ void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int
RoundedIntRect border(tx, ty, w, h);
bool hasBorderRadius = s->hasBorderRadius();
bool isHorizontal = s->isHorizontalWritingMode();
- if (hasBorderRadius && (includeLogicalLeftEdge || includeLogicalRightEdge)) {
- RoundedIntRect::Radii radii = ((shadowStyle == Inset) ? s->getRoundedInnerBorderWithBorderWidths(border.rect(), borderTop(), borderBottom(), borderLeft(), borderRight()) : s->getRoundedBorderFor(border.rect())).radii();
- border.includeLogicalEdges(radii, isHorizontal, includeLogicalLeftEdge, includeLogicalRightEdge);
- }
-
+
if (shadowStyle == Inset)
border.setRect(IntRect(border.rect().x() + (includeLogicalLeftEdge || !isHorizontal ? borderLeft() : 0),
border.rect().y() + (includeLogicalLeftEdge || isHorizontal ? borderTop() : 0),
border.rect().width() - ((includeLogicalLeftEdge || !isHorizontal) ? borderLeft() : 0) - ((includeLogicalRightEdge || !isHorizontal) ? borderRight() : 0),
border.rect().height() - ((includeLogicalLeftEdge || isHorizontal) ? borderTop() : 0) - ((includeLogicalRightEdge || isHorizontal) ? borderBottom() : 0)));
+ if (hasBorderRadius && (includeLogicalLeftEdge || includeLogicalRightEdge)) {
+ RoundedIntRect::Radii radii = ((shadowStyle == Inset) ? s->getRoundedInnerBorderWithBorderWidths(border.rect(), borderTop(), borderBottom(), borderLeft(), borderRight()) : s->getRoundedBorderFor(border.rect())).radii();
+ border.includeLogicalEdges(radii, isHorizontal, includeLogicalLeftEdge, includeLogicalRightEdge);
+ }
+
bool hasOpaqueBackground = s->visitedDependentColor(CSSPropertyBackgroundColor).isValid() && s->visitedDependentColor(CSSPropertyBackgroundColor).alpha() == 255;
for (const ShadowData* shadow = s->boxShadow(); shadow; shadow = shadow->next()) {
if (shadow->style() != shadowStyle)
@@ -1595,7 +1640,11 @@ void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int
shadowOffset -= extraOffset;
fillRect.move(extraOffset);
- context->setShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
+ if (shadow->isWebkitBoxShadow())
+ context->setLegacyShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
+ else
+ context->setShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
+
if (hasBorderRadius) {
RoundedIntRect rectToClipOut = border;
@@ -1611,6 +1660,7 @@ void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int
if (shadowSpread < 0)
fillRect.expandRadii(shadowSpread);
+
context->fillRoundedRect(fillRect, Color::black, s->colorSpace());
} else {
IntRect rectToClipOut = border.rect();
@@ -1663,17 +1713,14 @@ void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int
Color fillColor(shadowColor.red(), shadowColor.green(), shadowColor.blue(), 255);
- IntRect outerRect(border.rect());
- outerRect.inflateX(w - 2 * shadowSpread);
- outerRect.inflateY(h - 2 * shadowSpread);
-
+ IntRect outerRect = areaCastingShadowInHole(border.rect(), shadowBlur, shadowSpread, shadowOffset);
context->save();
Path path;
if (hasBorderRadius) {
+ Path path;
path.addRoundedRect(border.rect(), border.radii().topLeft(), border.radii().topRight(), border.radii().bottomLeft(), border.radii().bottomRight());
context->clip(path);
- path.clear();
} else
context->clip(border.rect());
@@ -1681,19 +1728,16 @@ void RenderBoxModelObject::paintBoxShadow(GraphicsContext* context, int tx, int
context->translate(extraOffset.width(), extraOffset.height());
shadowOffset -= extraOffset;
- path.addRect(outerRect);
-
- if (hasBorderRadius) {
- if (shadowSpread > 0)
- border.shrinkRadii(shadowSpread);
- path.addRoundedRect(holeRect, border.radii().topLeft(), border.radii().topRight(), border.radii().bottomLeft(), border.radii().bottomRight());
- } else
- path.addRect(holeRect);
+ if (hasBorderRadius && shadowSpread > 0)
+ border.shrinkRadii(shadowSpread);
+
+ if (shadow->isWebkitBoxShadow())
+ context->setLegacyShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
+ else
+ context->setShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
- context->setFillRule(RULE_EVENODD);
- context->setFillColor(fillColor, s->colorSpace());
- context->setShadow(shadowOffset, shadowBlur, shadowColor, s->colorSpace());
- context->fillPath(path);
+ RoundedIntRect roundedHole(holeRect, border.radii());
+ context->fillRectWithRoundedHole(outerRect, roundedHole, fillColor, s->colorSpace());
context->restore();
}
diff --git a/Source/WebCore/rendering/RenderCombineText.cpp b/Source/WebCore/rendering/RenderCombineText.cpp
new file mode 100644
index 0000000..1b20bd8
--- /dev/null
+++ b/Source/WebCore/rendering/RenderCombineText.cpp
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "RenderCombineText.h"
+
+#include "TextRun.h"
+
+namespace WebCore {
+
+const float textCombineMargin = 1.1f; // Allow em + 10% margin
+
+RenderCombineText::RenderCombineText(Node* node, PassRefPtr<StringImpl> string)
+ : RenderText(node, string)
+ , m_combinedTextWidth(0)
+ , m_isCombined(false)
+ , m_needsFontUpdate(false)
+{
+}
+
+void RenderCombineText::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ RenderText::styleDidChange(diff, oldStyle);
+
+ if (m_isCombined)
+ RenderText::setTextInternal(originalText()); // This RenderCombineText has been combined once. Restore the original text for the next combineText().
+
+ m_needsFontUpdate = true;
+}
+
+void RenderCombineText::setTextInternal(PassRefPtr<StringImpl> text)
+{
+ RenderText::setTextInternal(text);
+
+ m_needsFontUpdate = true;
+}
+
+unsigned RenderCombineText::width(unsigned from, unsigned length, const Font& font, int xPosition, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
+{
+ if (!characters())
+ return 0;
+
+ if (m_isCombined)
+ return font.size();
+
+ return RenderText::width(from, length, font, xPosition, fallbackFonts, glyphOverflow);
+}
+
+void RenderCombineText::adjustTextOrigin(IntPoint& textOrigin, const IntRect& boxRect) const
+{
+ if (m_isCombined)
+ textOrigin.move(boxRect.height() / 2 - ceilf(m_combinedTextWidth) / 2, style()->font().pixelSize());
+}
+
+void RenderCombineText::charactersToRender(int start, const UChar*& characters, int& length) const
+{
+ if (m_isCombined) {
+ length = originalText()->length();
+ characters = originalText()->characters();
+ return;
+ }
+
+ characters = text()->characters() + start;
+}
+
+void RenderCombineText::combineText()
+{
+ if (!m_needsFontUpdate)
+ return;
+
+ m_isCombined = false;
+ m_needsFontUpdate = false;
+
+ // CSS3 spec says text-combine works only in vertical writing mode.
+ if (style()->isHorizontalWritingMode())
+ return;
+
+ TextRun run = TextRun(String(text()));
+ FontDescription description = style()->font().fontDescription();
+ float emWidth = description.computedSize() * textCombineMargin;
+ bool shouldUpdateFont = false;
+
+ description.setOrientation(Horizontal); // We are going to draw combined text horizontally.
+ m_combinedTextWidth = style()->font().floatWidth(run);
+ m_isCombined = m_combinedTextWidth <= emWidth;
+
+ if (m_isCombined)
+ shouldUpdateFont = style()->setFontDescription(description); // Need to change font orientation to horizontal.
+ else {
+ // Need to try compressed glyphs.
+ static const FontWidthVariant widthVariants[] = { HalfWidth, ThirdWidth, QuarterWidth };
+ for (size_t i = 0 ; i < WTF_ARRAY_LENGTH(widthVariants) ; ++i) {
+ description.setWidthVariant(widthVariants[i]);
+ Font compressedFont = Font(description, style()->font().letterSpacing(), style()->font().wordSpacing());
+ compressedFont.update(style()->font().fontSelector());
+ float runWidth = compressedFont.floatWidth(run);
+ if (runWidth <= emWidth) {
+ m_combinedTextWidth = runWidth;
+ m_isCombined = true;
+
+ // Replace my font with the new one.
+ shouldUpdateFont = style()->setFontDescription(description);
+ break;
+ }
+ }
+ }
+
+ if (shouldUpdateFont)
+ style()->font().update(style()->font().fontSelector());
+
+ if (m_isCombined) {
+ static const UChar newCharacter = objectReplacementCharacter;
+ DEFINE_STATIC_LOCAL(String, objectReplacementCharacterString, (&newCharacter, 1));
+ RenderText::setTextInternal(objectReplacementCharacterString.impl());
+ }
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/rendering/RenderCombineText.h b/Source/WebCore/rendering/RenderCombineText.h
new file mode 100644
index 0000000..582cbd6
--- /dev/null
+++ b/Source/WebCore/rendering/RenderCombineText.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef RenderCombineText_h
+#define RenderCombineText_h
+
+#include "RenderText.h"
+
+namespace WebCore {
+
+class RenderCombineText : public RenderText {
+public:
+ RenderCombineText(Node*, PassRefPtr<StringImpl>);
+
+ void combineText();
+ void adjustTextOrigin(IntPoint& textOrigin, const IntRect& boxRect) const;
+ void charactersToRender(int start, const UChar*& characters, int& length) const;
+ bool isCombined() const { return m_isCombined; }
+ int combinedTextWidth(const Font& font) const { return font.size(); }
+
+private:
+ virtual unsigned width(unsigned from, unsigned length, const Font&, int xPosition, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
+ virtual const char* renderName() const { return "RenderCombineText"; }
+ virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+ virtual void setTextInternal(PassRefPtr<StringImpl>);
+
+ float m_combinedTextWidth;
+ bool m_isCombined : 1;
+ bool m_needsFontUpdate : 1;
+};
+
+inline RenderCombineText* toRenderCombineText(RenderObject* object)
+{
+ ASSERT(!object || object->isText());
+ return static_cast<RenderCombineText*>(object);
+}
+
+inline const RenderCombineText* toRenderCombineText(const RenderObject* object)
+{
+ ASSERT(!object || object->isText());
+ return static_cast<const RenderCombineText*>(object);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toRenderCombineText(const RenderCombineText*);
+
+} // namespace WebCore
+
+#endif // RenderCombineText_h
diff --git a/Source/WebCore/rendering/RenderCounter.cpp b/Source/WebCore/rendering/RenderCounter.cpp
index 57c54f8..fbd5545 100644
--- a/Source/WebCore/rendering/RenderCounter.cpp
+++ b/Source/WebCore/rendering/RenderCounter.cpp
@@ -24,6 +24,7 @@
#include "CounterNode.h"
#include "Document.h"
+#include "Element.h"
#include "HTMLNames.h"
#include "HTMLOListElement.h"
#include "RenderListItem.h"
@@ -46,11 +47,157 @@ static CounterMaps& counterMaps()
return staticCounterMaps;
}
-static inline RenderObject* previousSiblingOrParent(RenderObject* object)
+// This function processes the renderer tree in the order of the DOM tree
+// including pseudo elements as defined in CSS 2.1.
+// Anonymous renderers are skipped except for those representing pseudo elements.
+static RenderObject* previousInPreOrder(const RenderObject* object)
{
- if (RenderObject* sibling = object->previousSibling())
- return sibling;
- return object->parent();
+ Element* parent;
+ Element* sibling;
+ switch (object->style()->styleType()) {
+ case NOPSEUDO:
+ ASSERT(!object->isAnonymous());
+ parent = toElement(object->node());
+ sibling = parent->previousElementSibling();
+ parent = parent->parentElement();
+ break;
+ case BEFORE:
+ return object->generatingNode()->renderer(); // It is always the generating node's renderer
+ case AFTER:
+ parent = toElement(object->generatingNode());
+ sibling = parent->lastElementChild();
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+ while (sibling) {
+ if (RenderObject* renderer = sibling->renderer()) {
+ if (RenderObject* after = renderer->afterPseudoElementRenderer())
+ return after;
+ parent = sibling;
+ sibling = sibling->lastElementChild();
+ if (!sibling) {
+ if (RenderObject* before = renderer->beforePseudoElementRenderer())
+ return before;
+ return renderer;
+ }
+ } else
+ sibling = sibling->previousElementSibling();
+ }
+ if (!parent)
+ return 0;
+ RenderObject* renderer = parent->renderer(); // Should never be null
+ if (RenderObject* before = renderer->beforePseudoElementRenderer())
+ return before;
+ return renderer;
+}
+
+// This function processes the renderer tree in the order of the DOM tree
+// including pseudo elements as defined in CSS 2.1.
+// Anonymous renderers are skipped except for those representing pseudo elements.
+static RenderObject* previousSiblingOrParent(const RenderObject* object)
+{
+ Element* parent;
+ Element* sibling;
+ switch (object->style()->styleType()) {
+ case NOPSEUDO:
+ ASSERT(!object->isAnonymous());
+ parent = toElement(object->node());
+ sibling = parent->previousElementSibling();
+ parent = parent->parentElement();
+ break;
+ case BEFORE:
+ return object->generatingNode()->renderer(); // It is always the generating node's renderer
+ case AFTER:
+ parent = toElement(object->generatingNode());
+ sibling = parent->lastElementChild();
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+ while (sibling) {
+ if (RenderObject* renderer = sibling->renderer()) // This skips invisible nodes
+ return renderer;
+ sibling = sibling->previousElementSibling();
+ }
+ if (parent) {
+ RenderObject* renderer = parent->renderer();
+ if (RenderObject* before = renderer->virtualChildren()->beforePseudoElementRenderer(renderer))
+ return before;
+ return renderer;
+ }
+ return 0;
+}
+
+static Element* parentElement(RenderObject* object)
+{
+ switch (object->style()->styleType()) {
+ case NOPSEUDO:
+ ASSERT(!object->isAnonymous());
+ return toElement(object->node())->parentElement();
+ case BEFORE:
+ case AFTER:
+ return toElement(object->generatingNode());
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+}
+
+static inline bool areRenderersElementsSiblings(RenderObject* first, RenderObject* second)
+{
+ return parentElement(first) == parentElement(second);
+}
+
+// This function processes the renderer tree in the order of the DOM tree
+// including pseudo elements as defined in CSS 2.1.
+// Anonymous renderers are skipped except for those representing pseudo elements.
+static RenderObject* nextInPreOrder(const RenderObject* object, const Element* stayWithin, bool skipDescendants = false)
+{
+ Element* self;
+ Element* child;
+ RenderObject* result;
+ self = toElement(object->generatingNode());
+ if (skipDescendants)
+ goto nextsibling;
+ switch (object->style()->styleType()) {
+ case NOPSEUDO:
+ ASSERT(!object->isAnonymous());
+ result = object->beforePseudoElementRenderer();
+ if (result)
+ return result;
+ break;
+ case BEFORE:
+ break;
+ case AFTER:
+ goto nextsibling;
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+ child = self->firstElementChild();
+ while (true) {
+ while (child) {
+ result = child->renderer();
+ if (result)
+ return result;
+ child = child->nextElementSibling();
+ }
+ result = self->renderer()->afterPseudoElementRenderer();
+ if (result)
+ return result;
+nextsibling:
+ if (self == stayWithin)
+ return 0;
+ child = self->nextElementSibling();
+ self = self->parentElement();
+ if (!self) {
+ ASSERT(!child); // We can only reach this if we are searching beyond the root element
+ return 0; // which cannot have siblings
+ }
+ }
}
static bool planCounter(RenderObject* object, const AtomicString& identifier, bool& isReset, int& value)
@@ -61,10 +208,27 @@ static bool planCounter(RenderObject* object, const AtomicString& identifier, bo
// We can't even look at their styles or we'll see extra resets and increments!
if (object->isText() && !object->isBR())
return false;
-
+ Node* generatingNode = object->generatingNode();
+ // We must have a generating node or else we cannot have a counter.
+ if (!generatingNode)
+ return false;
RenderStyle* style = object->style();
ASSERT(style);
+ switch (style->styleType()) {
+ case NOPSEUDO:
+ // Sometimes nodes have more then one renderer. Only the first one gets the counter
+ // LayoutTests/http/tests/css/counter-crash.html
+ if (generatingNode->renderer() != object)
+ return false;
+ break;
+ case BEFORE:
+ case AFTER:
+ break;
+ default:
+ return false; // Counters are forbidden from all other pseudo elements.
+ }
+
if (const CounterDirectiveMap* directivesMap = style->counterDirectives()) {
CounterDirectives directives = directivesMap->get(identifier.impl());
if (directives.m_reset) {
@@ -133,14 +297,9 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
// We check renderers in preOrder from the renderer that our counter is attached to
// towards the begining of the document for counters with the same identifier as the one
// we are trying to find a place for. This is the next renderer to be checked.
- RenderObject* currentRenderer = counterOwner->previousInPreOrder();
+ RenderObject* currentRenderer = previousInPreOrder(counterOwner);
previousSibling = 0;
while (currentRenderer) {
- // A sibling without a parent means that the counter node tree was not constructed correctly so we stop
- // traversing. In the future RenderCounter should handle RenderObjects that are not connected to the
- // render tree at counter node creation. See bug 43812.
- if (previousSibling && !previousSibling->parent())
- return false;
CounterNode* currentCounter = makeCounterNode(currentRenderer, identifier, false);
if (searchEndRenderer == currentRenderer) {
// We may be at the end of our search.
@@ -149,7 +308,7 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
if (previousSibling) { // But we already found another counter that we come after.
if (currentCounter->actsAsReset()) {
// We found a reset counter that is on a renderer that is a sibling of ours or a parent.
- if (isReset && currentRenderer->parent() == counterOwner->parent()) {
+ if (isReset && areRenderersElementsSiblings(currentRenderer, counterOwner)) {
// We are also a reset counter and the previous reset was on a sibling renderer
// hence we are the next sibling of that counter if that reset is not a root or
// we are a root node if that reset is a root.
@@ -164,7 +323,7 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
return true;
}
// CurrentCounter, the counter at the EndSearchRenderer, is not reset.
- if (!isReset || currentRenderer->parent() != counterOwner->parent()) {
+ if (!isReset || !areRenderersElementsSiblings(currentRenderer, counterOwner)) {
// If the node we are placing is not reset or we have found a counter that is attached
// to an ancestor of the placed counter's renderer we know we are a sibling of that node.
ASSERT(currentCounter->parent() == previousSibling->parent());
@@ -177,7 +336,7 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
// previousSibling, and when we are a sibling of the end counter we must set previousSibling
// to currentCounter.
if (currentCounter->actsAsReset()) {
- if (isReset && currentRenderer->parent() == counterOwner->parent()) {
+ if (isReset && areRenderersElementsSiblings(currentRenderer, counterOwner)) {
parent = currentCounter->parent();
previousSibling = currentCounter;
return parent;
@@ -185,7 +344,7 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
parent = currentCounter;
return true;
}
- if (!isReset || currentRenderer->parent() != counterOwner->parent()) {
+ if (!isReset || !areRenderersElementsSiblings(currentRenderer, counterOwner)) {
parent = currentCounter->parent();
previousSibling = currentCounter;
return true;
@@ -210,7 +369,7 @@ static bool findPlaceForCounter(RenderObject* counterOwner, const AtomicString&
previousSibling = currentCounter;
// We are no longer interested in previous siblings of the currentRenderer or their children
// as counters they may have attached cannot be the previous sibling of the counter we are placing.
- currentRenderer = currentRenderer->parent();
+ currentRenderer = parentElement(currentRenderer)->renderer();
continue;
}
} else
@@ -261,28 +420,28 @@ static CounterNode* makeCounterNode(RenderObject* object, const AtomicString& id
object->m_hasCounterNodeMap = true;
}
nodeMap->set(identifier.impl(), newNode);
- if (newNode->parent() || !object->nextInPreOrder(object->parent()))
+ if (newNode->parent())
return newNode.get();
// Checking if some nodes that were previously counter tree root nodes
// should become children of this node now.
CounterMaps& maps = counterMaps();
- RenderObject* stayWithin = object->parent();
- for (RenderObject* currentRenderer = object->nextInPreOrder(stayWithin); currentRenderer; currentRenderer = currentRenderer->nextInPreOrder(stayWithin)) {
+ Element* stayWithin = parentElement(object);
+ bool skipDescendants;
+ for (RenderObject* currentRenderer = nextInPreOrder(object, stayWithin); currentRenderer; currentRenderer = nextInPreOrder(currentRenderer, stayWithin, skipDescendants)) {
+ skipDescendants = false;
if (!currentRenderer->m_hasCounterNodeMap)
continue;
CounterNode* currentCounter = maps.get(currentRenderer)->get(identifier.impl()).get();
if (!currentCounter)
continue;
+ skipDescendants = true;
if (currentCounter->parent()) {
ASSERT(newNode->firstChild());
- if (currentRenderer->lastChild())
- currentRenderer = currentRenderer->lastChild();
continue;
}
- if (stayWithin != currentRenderer->parent() || !currentCounter->hasResetType())
- newNode->insertAfter(currentCounter, newNode->lastChild(), identifier);
- if (currentRenderer->lastChild())
- currentRenderer = currentRenderer->lastChild();
+ if (stayWithin == parentElement(currentRenderer) && currentCounter->hasResetType())
+ break;
+ newNode->insertAfter(currentCounter, newNode->lastChild(), identifier);
}
return newNode.get();
}
@@ -449,12 +608,22 @@ static void updateCounters(RenderObject* renderer)
void RenderCounter::rendererSubtreeAttached(RenderObject* renderer)
{
+ Node* node = renderer->node();
+ if (node)
+ node = node->parentNode();
+ else
+ node = renderer->generatingNode();
+ if (node && !node->attached())
+ return; // No need to update if the parent is not attached yet
for (RenderObject* descendant = renderer; descendant; descendant = descendant->nextInPreOrder(renderer))
updateCounters(descendant);
}
void RenderCounter::rendererStyleChanged(RenderObject* renderer, const RenderStyle* oldStyle, const RenderStyle* newStyle)
{
+ Node* node = renderer->generatingNode();
+ if (!node || !node->attached())
+ return; // cannot have generated content or if it can have, it will be handled during attaching
const CounterDirectiveMap* newCounterDirectives;
const CounterDirectiveMap* oldCounterDirectives;
if (oldStyle && (oldCounterDirectives = oldStyle->counterDirectives())) {
@@ -494,3 +663,27 @@ void RenderCounter::rendererStyleChanged(RenderObject* renderer, const RenderSty
}
} // namespace WebCore
+
+#ifndef NDEBUG
+
+void showCounterRendererTree(const WebCore::RenderObject* renderer, const char* counterName)
+{
+ if (!renderer)
+ return;
+ const WebCore::RenderObject* root = renderer;
+ while (root->parent())
+ root = root->parent();
+
+ AtomicString identifier(counterName);
+ for (const WebCore::RenderObject* current = root; current; current = current->nextInPreOrder()) {
+ fprintf(stderr, "%c", (current == renderer) ? '*' : ' ');
+ for (const WebCore::RenderObject* parent = current; parent && parent != root; parent = parent->parent())
+ fprintf(stderr, " ");
+ fprintf(stderr, "%p N:%p P:%p PS:%p NS:%p C:%p\n",
+ current, current->node(), current->parent(), current->previousSibling(),
+ current->nextSibling(), current->m_hasCounterNodeMap?
+ counterName ? WebCore::counterMaps().get(current)->get(identifier.impl()).get() : (WebCore::CounterNode*)1 : (WebCore::CounterNode*)0);
+ }
+}
+
+#endif // NDEBUG
diff --git a/Source/WebCore/rendering/RenderCounter.h b/Source/WebCore/rendering/RenderCounter.h
index 9373193..de0ee1b 100644
--- a/Source/WebCore/rendering/RenderCounter.h
+++ b/Source/WebCore/rendering/RenderCounter.h
@@ -67,4 +67,9 @@ void toRenderCounter(const RenderCounter*);
} // namespace WebCore
+#ifndef NDEBUG
+// Outside the WebCore namespace for ease of invocation from gdb.
+void showCounterRendererTree(const WebCore::RenderObject*, const char* counterName = 0);
+#endif
+
#endif // RenderCounter_h
diff --git a/Source/WebCore/rendering/RenderEmbeddedObject.cpp b/Source/WebCore/rendering/RenderEmbeddedObject.cpp
index 5486d51..cdd6c55 100644
--- a/Source/WebCore/rendering/RenderEmbeddedObject.cpp
+++ b/Source/WebCore/rendering/RenderEmbeddedObject.cpp
@@ -172,8 +172,9 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
context->setFillColor(m_missingPluginIndicatorIsPressed ? replacementTextRoundedRectPressedColor() : Color::white, style()->colorSpace());
context->fillPath(path);
+ const FontMetrics& fontMetrics = font.fontMetrics();
float labelX = roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2);
- float labelY = roundf(replacementTextRect.location().y() + (replacementTextRect.size().height() - font.height()) / 2 + font.ascent());
+ float labelY = roundf(replacementTextRect.location().y() + (replacementTextRect.size().height() - fontMetrics.height()) / 2 + fontMetrics.ascent());
context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedTextOpacity : replacementTextTextOpacity);
context->setFillColor(Color::black, style()->colorSpace());
context->drawBidiText(font, run, FloatPoint(labelX, labelY));
diff --git a/Source/WebCore/rendering/RenderFileUploadControl.cpp b/Source/WebCore/rendering/RenderFileUploadControl.cpp
index aec55a8..f72edad 100644
--- a/Source/WebCore/rendering/RenderFileUploadControl.cpp
+++ b/Source/WebCore/rendering/RenderFileUploadControl.cpp
@@ -216,7 +216,7 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, int tx, int ty)
const String& displayedFilename = fileTextValue();
unsigned length = displayedFilename.length();
const UChar* string = displayedFilename.characters();
- TextRun textRun(string, length, false, 0, 0, !style()->isLeftToRightDirection(), style()->unicodeBidi() == Override);
+ TextRun textRun(string, length, false, 0, 0, TextRun::AllowTrailingExpansion, !style()->isLeftToRightDirection(), style()->unicodeBidi() == Override);
// Determine where the filename should be placed
int contentLeft = tx + borderLeft() + paddingLeft();
@@ -273,7 +273,7 @@ void RenderFileUploadControl::computePreferredLogicalWidths()
// Figure out how big the filename space needs to be for a given number of characters
// (using "0" as the nominal character).
const UChar ch = '0';
- float charWidth = style()->font().floatWidth(TextRun(&ch, 1, false, 0, 0, false, false, false));
+ float charWidth = style()->font().floatWidth(TextRun(&ch, 1, false, 0, 0, TextRun::AllowTrailingExpansion, false, false, false));
m_maxPreferredLogicalWidth = (int)ceilf(charWidth * defaultWidthNumChars);
}
@@ -297,6 +297,11 @@ void RenderFileUploadControl::computePreferredLogicalWidths()
setPreferredLogicalWidthsDirty(false);
}
+VisiblePosition RenderFileUploadControl::positionForPoint(const IntPoint&)
+{
+ return VisiblePosition();
+}
+
void RenderFileUploadControl::receiveDroppedFiles(const Vector<String>& paths)
{
if (allowsMultipleFiles())
diff --git a/Source/WebCore/rendering/RenderFileUploadControl.h b/Source/WebCore/rendering/RenderFileUploadControl.h
index c96800c..22974fe 100644
--- a/Source/WebCore/rendering/RenderFileUploadControl.h
+++ b/Source/WebCore/rendering/RenderFileUploadControl.h
@@ -28,7 +28,7 @@ namespace WebCore {
class Chrome;
class HTMLInputElement;
-
+
// Each RenderFileUploadControl contains a RenderButton (for opening the file chooser), and
// sufficient space to draw a file icon and filename. The RenderButton has a shadow node
// associated with it to receive click/hover events.
@@ -71,6 +71,8 @@ private:
Chrome* chrome() const;
int maxFilenameWidth() const;
PassRefPtr<RenderStyle> createButtonStyle(const RenderStyle* parentStyle) const;
+
+ virtual VisiblePosition positionForPoint(const IntPoint&);
RefPtr<HTMLInputElement> m_button;
RefPtr<FileChooser> m_fileChooser;
diff --git a/Source/WebCore/rendering/RenderFlexibleBox.cpp b/Source/WebCore/rendering/RenderFlexibleBox.cpp
index 5af5733..9ab3c3f 100644
--- a/Source/WebCore/rendering/RenderFlexibleBox.cpp
+++ b/Source/WebCore/rendering/RenderFlexibleBox.cpp
@@ -25,11 +25,11 @@
#include "config.h"
#include "RenderFlexibleBox.h"
-#include "CharacterNames.h"
#include "RenderLayer.h"
#include "RenderView.h"
#include "TextRun.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#ifdef ANDROID_LAYOUT
#include "Document.h"
@@ -288,7 +288,7 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren, int /*pageHeight FIXM
updateLayerTransform();
if (view()->layoutState()->pageLogicalHeight())
- setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+ setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
// Update our scrollbars if we're overflow:auto/scroll/hidden now that we know if
// we overflow or not.
diff --git a/Source/WebCore/rendering/RenderFrameSet.cpp b/Source/WebCore/rendering/RenderFrameSet.cpp
index 06b2a7a..e4eee6e 100644
--- a/Source/WebCore/rendering/RenderFrameSet.cpp
+++ b/Source/WebCore/rendering/RenderFrameSet.cpp
@@ -96,8 +96,8 @@ void RenderFrameSet::paintColumnBorder(const PaintInfo& paintInfo, const IntRect
// Now stroke the edges but only if we have enough room to paint both edges with a little
// bit of the fill color showing through.
if (borderRect.width() >= 3) {
- context->fillRect(IntRect(borderRect.topLeft(), IntSize(1, height())), borderStartEdgeColor(), colorSpace);
- context->fillRect(IntRect(borderRect.topRight(), IntSize(1, height())), borderEndEdgeColor(), colorSpace);
+ context->fillRect(IntRect(borderRect.location(), IntSize(1, height())), borderStartEdgeColor(), colorSpace);
+ context->fillRect(IntRect(IntPoint(borderRect.maxX() - 1, borderRect.y()), IntSize(1, height())), borderEndEdgeColor(), colorSpace);
}
}
@@ -116,8 +116,8 @@ void RenderFrameSet::paintRowBorder(const PaintInfo& paintInfo, const IntRect& b
// Now stroke the edges but only if we have enough room to paint both edges with a little
// bit of the fill color showing through.
if (borderRect.height() >= 3) {
- context->fillRect(IntRect(borderRect.topLeft(), IntSize(width(), 1)), borderStartEdgeColor(), colorSpace);
- context->fillRect(IntRect(borderRect.bottomLeft(), IntSize(width(), 1)), borderEndEdgeColor(), colorSpace);
+ context->fillRect(IntRect(borderRect.location(), IntSize(width(), 1)), borderStartEdgeColor(), colorSpace);
+ context->fillRect(IntRect(IntPoint(borderRect.x(), borderRect.maxY() - 1), IntSize(width(), 1)), borderEndEdgeColor(), colorSpace);
}
}
diff --git a/Source/WebCore/rendering/RenderImage.cpp b/Source/WebCore/rendering/RenderImage.cpp
index 839328e..7369f4e 100644
--- a/Source/WebCore/rendering/RenderImage.cpp
+++ b/Source/WebCore/rendering/RenderImage.cpp
@@ -4,7 +4,7 @@
* (C) 2000 Dirk Mueller (mueller@kde.org)
* (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com)
* (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
- * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
@@ -30,7 +30,6 @@
#include "Frame.h"
#include "GraphicsContext.h"
#include "HTMLAreaElement.h"
-#include "HTMLCollection.h"
#include "HTMLImageElement.h"
#include "HTMLInputElement.h"
#include "HTMLMapElement.h"
@@ -38,11 +37,9 @@
#include "HitTestResult.h"
#include "Page.h"
#include "RenderLayer.h"
-#include "RenderTheme.h"
#include "RenderView.h"
#include "SelectionController.h"
#include "TextRun.h"
-#include <wtf/CurrentTime.h>
#include <wtf/UnusedParam.h>
#ifdef ANDROID_LAYOUT
@@ -116,7 +113,7 @@ bool RenderImage::setImageSizeForAltText(CachedImage* newImage /* = 0 */)
// we have an alt and the user meant it (its not a text we invented)
if (!m_altText.isEmpty()) {
const Font& font = style()->font();
- IntSize textSize(min(font.width(TextRun(m_altText.characters(), m_altText.length())), maxAltTextWidth), min(font.height(), maxAltTextHeight));
+ IntSize textSize(min(font.width(TextRun(m_altText.characters(), m_altText.length())), maxAltTextWidth), min(font.fontMetrics().height(), maxAltTextHeight));
imageSize = imageSize.expandedTo(textSize);
}
@@ -277,7 +274,7 @@ void RenderImage::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
int usableWidth = cWidth - 2;
int usableHeight = cHeight - 2;
- Image* image = m_imageResource->image();
+ RefPtr<Image> image = m_imageResource->image();
if (m_imageResource->errorOccurred() && !image->isNull() && usableWidth >= image->width() && usableHeight >= image->height()) {
// Center the error image, accounting for border and padding.
@@ -289,7 +286,7 @@ void RenderImage::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
centerY = 0;
imageX = leftBorder + leftPad + centerX + 1;
imageY = topBorder + topPad + centerY + 1;
- context->drawImage(image, style()->colorSpace(), IntPoint(tx + imageX, ty + imageY));
+ context->drawImage(image.get(), style()->colorSpace(), IntPoint(tx + imageX, ty + imageY));
errorPictureDrawn = true;
}
@@ -299,21 +296,22 @@ void RenderImage::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
int ax = tx + leftBorder + leftPad;
int ay = ty + topBorder + topPad;
const Font& font = style()->font();
- int ascent = font.ascent();
+ const FontMetrics& fontMetrics = font.fontMetrics();
+ int ascent = fontMetrics.ascent();
// Only draw the alt text if it'll fit within the content box,
// and only if it fits above the error image.
TextRun textRun(text.characters(), text.length());
int textWidth = font.width(textRun);
if (errorPictureDrawn) {
- if (usableWidth >= textWidth && font.height() <= imageY)
- context->drawText(style()->font(), textRun, IntPoint(ax, ay + ascent));
- } else if (usableWidth >= textWidth && cHeight >= font.height())
- context->drawText(style()->font(), textRun, IntPoint(ax, ay + ascent));
+ if (usableWidth >= textWidth && fontMetrics.height() <= imageY)
+ context->drawText(font, textRun, IntPoint(ax, ay + ascent));
+ } else if (usableWidth >= textWidth && cHeight >= fontMetrics.height())
+ context->drawText(font, textRun, IntPoint(ax, ay + ascent));
}
}
} else if (m_imageResource->hasImage() && cWidth > 0 && cHeight > 0) {
- Image* img = m_imageResource->image(cWidth, cHeight);
+ RefPtr<Image> img = m_imageResource->image(cWidth, cHeight);
if (!img || img->isNull())
return;
@@ -333,60 +331,65 @@ void RenderImage::paint(PaintInfo& paintInfo, int tx, int ty)
RenderReplaced::paint(paintInfo, tx, ty);
if (paintInfo.phase == PaintPhaseOutline)
- paintFocusRing(paintInfo, style());
+ paintAreaElementFocusRing(paintInfo);
}
-void RenderImage::paintFocusRing(PaintInfo& paintInfo, const RenderStyle*)
+void RenderImage::paintAreaElementFocusRing(PaintInfo& paintInfo)
{
- // Don't draw focus rings if printing.
- if (document()->printing() || !frame()->selection()->isFocusedAndActive())
+ Document* document = this->document();
+
+ if (document->printing() || !document->frame()->selection()->isFocusedAndActive())
return;
if (paintInfo.context->paintingDisabled() && !paintInfo.context->updatingControlTints())
return;
- HTMLMapElement* mapElement = imageMap();
- if (!mapElement)
+ Node* focusedNode = document->focusedNode();
+ if (!focusedNode || !focusedNode->hasTagName(areaTag))
return;
-
- Document* document = mapElement->document();
- if (!document)
+
+ HTMLAreaElement* areaElement = static_cast<HTMLAreaElement*>(focusedNode);
+ if (areaElement->imageElement() != node())
return;
-
- Node* focusedNode = document->focusedNode();
- if (!focusedNode)
+
+ // Even if the theme handles focus ring drawing for entire elements, it won't do it for
+ // an area within an image, so we don't call RenderTheme::supportsFocusRing here.
+
+ Path path = areaElement->computePath(this);
+ if (path.isEmpty())
return;
-
- RefPtr<HTMLCollection> areas = mapElement->areas();
- unsigned numAreas = areas->length();
-
- // FIXME: Clip the paths to the image bounding box.
- for (unsigned k = 0; k < numAreas; ++k) {
- HTMLAreaElement* areaElement = static_cast<HTMLAreaElement*>(areas->item(k));
- if (focusedNode != areaElement)
- continue;
-
- RenderStyle* styleToUse = areaElement->computedStyle();
- if (theme()->supportsFocusRing(styleToUse))
- return; // The theme draws the focus ring.
- paintInfo.context->drawFocusRing(areaElement->getPath(this), styleToUse->outlineWidth(), styleToUse->outlineOffset(), styleToUse->visitedDependentColor(CSSPropertyOutlineColor));
- break;
- }
+
+ // FIXME: Do we need additional code to clip the path to the image's bounding box?
+
+ RenderStyle* areaElementStyle = areaElement->computedStyle();
+ paintInfo.context->drawFocusRing(path, areaElementStyle->outlineWidth(), areaElementStyle->outlineOffset(),
+ areaElementStyle->visitedDependentColor(CSSPropertyOutlineColor));
}
-
+
+void RenderImage::areaElementFocusChanged(HTMLAreaElement* element)
+{
+ ASSERT_UNUSED(element, element->imageElement() == node());
+
+ // It would be more efficient to only repaint the focus ring rectangle
+ // for the passed-in area element. That would require adding functions
+ // to the area element class.
+ repaint();
+}
+
void RenderImage::paintIntoRect(GraphicsContext* context, const IntRect& rect)
{
if (!m_imageResource->hasImage() || m_imageResource->errorOccurred() || rect.width() <= 0 || rect.height() <= 0)
return;
- Image* img = m_imageResource->image(rect.width(), rect.height());
+ RefPtr<Image> img = m_imageResource->image(rect.width(), rect.height());
if (!img || img->isNull())
return;
HTMLImageElement* imageElt = (node() && node()->hasTagName(imgTag)) ? static_cast<HTMLImageElement*>(node()) : 0;
CompositeOperator compositeOperator = imageElt ? imageElt->compositeOperator() : CompositeSourceOver;
- bool useLowQualityScaling = shouldPaintAtLowQuality(context, m_imageResource->image(), 0, rect.size());
- context->drawImage(m_imageResource->image(rect.width(), rect.height()), style()->colorSpace(), rect, compositeOperator, useLowQualityScaling);
+ Image* image = m_imageResource->image().get();
+ bool useLowQualityScaling = shouldPaintAtLowQuality(context, image, image, rect.size());
+ context->drawImage(m_imageResource->image(rect.width(), rect.height()).get(), style()->colorSpace(), rect, compositeOperator, useLowQualityScaling);
}
int RenderImage::minimumReplacedHeight() const
diff --git a/Source/WebCore/rendering/RenderImage.h b/Source/WebCore/rendering/RenderImage.h
index 16ae7ec..e3f743c 100644
--- a/Source/WebCore/rendering/RenderImage.h
+++ b/Source/WebCore/rendering/RenderImage.h
@@ -3,7 +3,7 @@
* (C) 1999 Antti Koivisto (koivisto@kde.org)
* (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com)
* (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
- * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -30,6 +30,7 @@
namespace WebCore {
+class HTMLAreaElement;
class HTMLMapElement;
class RenderImage : public RenderReplaced {
@@ -48,6 +49,7 @@ public:
void updateAltText();
HTMLMapElement* imageMap() const;
+ void areaElementFocusChanged(HTMLAreaElement*);
void highQualityRepaintTimerFired(Timer<RenderImage>*);
@@ -57,7 +59,6 @@ protected:
virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
virtual void paintIntoRect(GraphicsContext*, const IntRect&);
- void paintFocusRing(PaintInfo&, const RenderStyle*);
virtual void paint(PaintInfo&, int tx, int ty);
bool isLogicalWidthSpecified() const;
@@ -91,6 +92,8 @@ private:
int calcAspectRatioLogicalWidth() const;
int calcAspectRatioLogicalHeight() const;
+ void paintAreaElementFocusRing(PaintInfo&);
+
// Text to display as long as the image isn't available.
String m_altText;
OwnPtr<RenderImageResource> m_imageResource;
diff --git a/Source/WebCore/rendering/RenderImageResource.h b/Source/WebCore/rendering/RenderImageResource.h
index a20c55a..f1ec75b 100644
--- a/Source/WebCore/rendering/RenderImageResource.h
+++ b/Source/WebCore/rendering/RenderImageResource.h
@@ -28,6 +28,7 @@
#include "CachedImage.h"
#include "CachedResourceHandle.h"
+#include "Image.h"
#include "StyleImage.h"
namespace WebCore {
@@ -53,7 +54,7 @@ public:
void resetAnimation();
- virtual Image* image(int /* width */ = 0, int /* height */ = 0) { return m_cachedImage ? m_cachedImage->image() : nullImage(); }
+ virtual PassRefPtr<Image> image(int /* width */ = 0, int /* height */ = 0) const { return m_cachedImage ? m_cachedImage->image() : nullImage(); }
virtual bool errorOccurred() const { return m_cachedImage && m_cachedImage->errorOccurred(); }
virtual void setImageContainerSize(const IntSize& size) const;
diff --git a/Source/WebCore/rendering/RenderImageResourceStyleImage.h b/Source/WebCore/rendering/RenderImageResourceStyleImage.h
index d91aaa8..278a82c 100644
--- a/Source/WebCore/rendering/RenderImageResourceStyleImage.h
+++ b/Source/WebCore/rendering/RenderImageResourceStyleImage.h
@@ -46,7 +46,7 @@ public:
virtual void shutdown();
virtual bool hasImage() const { return true; }
- virtual Image* image(int width = 0, int height = 0) { return m_styleImage->image(m_renderer, IntSize(width, height)); }
+ virtual PassRefPtr<Image> image(int width = 0, int height = 0) const { return m_styleImage->image(m_renderer, IntSize(width, height)); }
virtual bool errorOccurred() const { return m_styleImage->errorOccurred(); }
virtual void setImageContainerSize(const IntSize& size) const { m_styleImage->setImageContainerSize(size); }
diff --git a/Source/WebCore/rendering/RenderIndicator.cpp b/Source/WebCore/rendering/RenderIndicator.cpp
index b03dfba..8f34a40 100644
--- a/Source/WebCore/rendering/RenderIndicator.cpp
+++ b/Source/WebCore/rendering/RenderIndicator.cpp
@@ -25,12 +25,51 @@
#include "RenderIndicator.h"
#include "RenderTheme.h"
-#include "ShadowElement.h"
+#include "RenderView.h"
using namespace std;
namespace WebCore {
+RenderIndicatorPart::RenderIndicatorPart(Node* node)
+ : RenderBlock(node)
+ , m_originalVisibility(HIDDEN)
+{
+}
+
+RenderIndicatorPart::~RenderIndicatorPart()
+{
+}
+
+void RenderIndicatorPart::layout()
+{
+ RenderBox* parentRenderer = toRenderBox(parent());
+ IntRect oldRect = frameRect();
+ IntRect newRect = preferredFrameRect();
+
+ LayoutStateMaintainer statePusher(parentRenderer->view(), parentRenderer, parentRenderer->size(), parentRenderer->style()->isFlippedBlocksWritingMode());
+
+ if (oldRect.size() != newRect.size())
+ setChildNeedsLayout(true, false);
+ if (needsLayout())
+ RenderBlock::layout();
+ setFrameRect(newRect);
+
+ if (checkForRepaintDuringLayout())
+ repaintDuringLayoutIfMoved(oldRect);
+
+ statePusher.pop();
+ parentRenderer->addOverflowFromChild(this);
+ style()->setVisibility(shouldBeHidden() ? HIDDEN : originalVisibility());
+}
+
+void RenderIndicatorPart::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ m_originalVisibility = style()->visibility();
+ RenderBlock::styleDidChange(diff, oldStyle);
+}
+
+
RenderIndicator::RenderIndicator(Node* node)
: RenderBlock(node)
{
diff --git a/Source/WebCore/rendering/RenderIndicator.h b/Source/WebCore/rendering/RenderIndicator.h
index 50d819d..7c2a346 100644
--- a/Source/WebCore/rendering/RenderIndicator.h
+++ b/Source/WebCore/rendering/RenderIndicator.h
@@ -26,6 +26,24 @@
namespace WebCore {
+class RenderIndicatorPart : public RenderBlock {
+public:
+ RenderIndicatorPart(Node*);
+ virtual ~RenderIndicatorPart();
+
+protected:
+ EVisibility originalVisibility() const { return m_originalVisibility; }
+ virtual IntRect preferredFrameRect() = 0;
+ virtual bool shouldBeHidden() = 0;
+private:
+ virtual void layout();
+ virtual bool requiresForcedStyleRecalcPropagation() const { return true; }
+ virtual bool canHaveChildren() const { return false; }
+ virtual void styleDidChange(StyleDifference, const RenderStyle*);
+
+ EVisibility m_originalVisibility;
+};
+
class RenderIndicator : public RenderBlock {
public:
RenderIndicator(Node*);
diff --git a/Source/WebCore/rendering/RenderInline.cpp b/Source/WebCore/rendering/RenderInline.cpp
index 7466ace..3768774 100644
--- a/Source/WebCore/rendering/RenderInline.cpp
+++ b/Source/WebCore/rendering/RenderInline.cpp
@@ -595,10 +595,10 @@ IntRect RenderInline::linesVisualOverflowBoundingBox() const
bool isHorizontal = style()->isHorizontalWritingMode();
- int x = isHorizontal ? logicalLeftSide : firstLineBox()->leftVisualOverflow();
- int y = isHorizontal ? firstLineBox()->topVisualOverflow() : logicalLeftSide;
- int width = isHorizontal ? logicalRightSide - logicalLeftSide : lastLineBox()->rightVisualOverflow() - firstLineBox()->leftVisualOverflow();
- int height = isHorizontal ? lastLineBox()->bottomVisualOverflow() - firstLineBox()->topVisualOverflow() : logicalRightSide - logicalLeftSide;
+ int x = isHorizontal ? logicalLeftSide : firstLineBox()->minXVisualOverflow();
+ int y = isHorizontal ? firstLineBox()->minYVisualOverflow() : logicalLeftSide;
+ int width = isHorizontal ? logicalRightSide - logicalLeftSide : lastLineBox()->maxXVisualOverflow() - firstLineBox()->minXVisualOverflow();
+ int height = isHorizontal ? lastLineBox()->maxYVisualOverflow() - firstLineBox()->minYVisualOverflow() : logicalRightSide - logicalLeftSide;
return IntRect(x, y, width, height);
}
@@ -749,7 +749,7 @@ void RenderInline::computeRectForRepaint(RenderBoxModelObject* repaintContainer,
IntSize RenderInline::offsetFromContainer(RenderObject* container, const IntPoint& point) const
{
ASSERT(container == this->container());
-
+
IntSize offset;
if (isRelPositioned())
offset += relativePositionOffset();
@@ -783,6 +783,10 @@ void RenderInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b
if (!o)
return;
+ IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint());
+ if (o->isBox() && o->style()->isFlippedBlocksWritingMode())
+ transformState.move(toRenderBox(o)->flipForWritingModeIncludingColumns(roundedIntPoint(transformState.mappedPoint())) - centerPoint);
+
IntSize containerOffset = offsetFromContainer(o, roundedIntPoint(transformState.mappedPoint()));
bool preserve3D = useTransforms && (o->style()->preserves3D() || style()->preserves3D());
@@ -905,8 +909,8 @@ int RenderInline::lineHeight(bool firstLine, LineDirectionMode /*direction*/, Li
int RenderInline::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
- const Font& f = style(firstLine)->font();
- return f.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
+ const FontMetrics& fontMetrics = style(firstLine)->fontMetrics();
+ return fontMetrics.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - fontMetrics.height()) / 2;
}
IntSize RenderInline::relativePositionedInlineOffset(const RenderBox* child) const
@@ -1033,30 +1037,30 @@ void RenderInline::paintOutlineForLine(GraphicsContext* graphicsContext, int tx,
int t = ty + thisline.y() - offset;
int l = tx + thisline.x() - offset;
- int b = ty + thisline.bottom() + offset;
- int r = tx + thisline.right() + offset;
+ int b = ty + thisline.maxY() + offset;
+ int r = tx + thisline.maxX() + offset;
// left edge
drawLineForBoxSide(graphicsContext,
l - ow,
- t - (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.right() - 1) <= thisline.x() ? ow : 0),
+ t - (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? ow : 0),
l,
- b + (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.right() - 1) <= thisline.x() ? ow : 0),
+ b + (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? ow : 0),
BSLeft,
oc, os,
- (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.right() - 1) <= thisline.x() ? ow : -ow),
- (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.right() - 1) <= thisline.x() ? ow : -ow));
+ (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.maxX() - 1) <= thisline.x() ? ow : -ow),
+ (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.maxX() - 1) <= thisline.x() ? ow : -ow));
// right edge
drawLineForBoxSide(graphicsContext,
r,
- t - (lastline.isEmpty() || lastline.right() < thisline.right() || (thisline.right() - 1) <= lastline.x() ? ow : 0),
+ t - (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? ow : 0),
r + ow,
- b + (nextline.isEmpty() || nextline.right() <= thisline.right() || (thisline.right() - 1) <= nextline.x() ? ow : 0),
+ b + (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? ow : 0),
BSRight,
oc, os,
- (lastline.isEmpty() || lastline.right() < thisline.right() || (thisline.right() - 1) <= lastline.x() ? ow : -ow),
- (nextline.isEmpty() || nextline.right() <= thisline.right() || (thisline.right() - 1) <= nextline.x() ? ow : -ow));
+ (lastline.isEmpty() || lastline.maxX() < thisline.maxX() || (thisline.maxX() - 1) <= lastline.x() ? ow : -ow),
+ (nextline.isEmpty() || nextline.maxX() <= thisline.maxX() || (thisline.maxX() - 1) <= nextline.x() ? ow : -ow));
// upper edge
if (thisline.x() < lastline.x())
drawLineForBoxSide(graphicsContext,
@@ -1068,14 +1072,14 @@ void RenderInline::paintOutlineForLine(GraphicsContext* graphicsContext, int tx,
ow,
(!lastline.isEmpty() && tx + lastline.x() + 1 < r + ow) ? -ow : ow);
- if (lastline.right() < thisline.right())
+ if (lastline.maxX() < thisline.maxX())
drawLineForBoxSide(graphicsContext,
- max(lastline.isEmpty() ? -1000000 : tx + lastline.right(), l - ow),
+ max(lastline.isEmpty() ? -1000000 : tx + lastline.maxX(), l - ow),
t - ow,
r + ow,
t ,
BSTop, oc, os,
- (!lastline.isEmpty() && l - ow < tx + lastline.right()) ? -ow : ow,
+ (!lastline.isEmpty() && l - ow < tx + lastline.maxX()) ? -ow : ow,
ow);
// lower edge
@@ -1089,14 +1093,14 @@ void RenderInline::paintOutlineForLine(GraphicsContext* graphicsContext, int tx,
ow,
(!nextline.isEmpty() && tx + nextline.x() + 1 < r + ow) ? -ow : ow);
- if (nextline.right() < thisline.right())
+ if (nextline.maxX() < thisline.maxX())
drawLineForBoxSide(graphicsContext,
- max(!nextline.isEmpty() ? tx + nextline.right() : -1000000, l - ow),
+ max(!nextline.isEmpty() ? tx + nextline.maxX() : -1000000, l - ow),
b,
r + ow,
b + ow,
BSBottom, oc, os,
- (!nextline.isEmpty() && l - ow < tx + nextline.right()) ? -ow : ow,
+ (!nextline.isEmpty() && l - ow < tx + nextline.maxX()) ? -ow : ow,
ow);
}
diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
index 29a6fc9..e278c75 100644
--- a/Source/WebCore/rendering/RenderLayer.cpp
+++ b/Source/WebCore/rendering/RenderLayer.cpp
@@ -188,6 +188,8 @@ RenderLayer::RenderLayer(RenderBoxModelObject* renderer)
, m_scrollCorner(0)
, m_resizer(0)
{
+ ScrollableArea::setConstrainsScrollingToContentEdge(false);
+
if (!renderer->firstChild() && renderer->style()) {
m_visibleContentStatusDirty = false;
m_hasVisibleContent = renderer->style()->visibility() == VISIBLE;
@@ -960,7 +962,7 @@ static IntRect transparencyClipBox(const RenderLayer* l, const RenderLayer* root
TransformationMatrix transform;
transform.translate(x, y);
- transform = *l->transform() * transform;
+ transform = transform * *l->transform();
IntRect clipRect = l->boundingBox(l);
expandClipRectForDescendantsAndReflection(clipRect, l, l, paintBehavior);
@@ -1532,7 +1534,7 @@ IntRect RenderLayer::getRectToExpose(const IntRect &visibleRect, const IntRect &
scrollX = ScrollAlignment::getHiddenBehavior(alignX);
// If we're trying to align to the closest edge, and the exposeRect is further right
// than the visibleRect, and not bigger than the visible area, then align with the right.
- if (scrollX == alignToClosestEdge && exposeRect.right() > visibleRect.right() && exposeRect.width() < visibleRect.width())
+ if (scrollX == alignToClosestEdge && exposeRect.maxX() > visibleRect.maxX() && exposeRect.width() < visibleRect.width())
scrollX = alignRight;
// Given the X behavior, compute the X coordinate.
@@ -1540,7 +1542,7 @@ IntRect RenderLayer::getRectToExpose(const IntRect &visibleRect, const IntRect &
if (scrollX == noScroll)
x = visibleRect.x();
else if (scrollX == alignRight)
- x = exposeRect.right() - visibleRect.width();
+ x = exposeRect.maxX() - visibleRect.width();
else if (scrollX == alignCenter)
x = exposeRect.x() + (exposeRect.width() - visibleRect.width()) / 2;
else
@@ -1565,7 +1567,7 @@ IntRect RenderLayer::getRectToExpose(const IntRect &visibleRect, const IntRect &
scrollY = ScrollAlignment::getHiddenBehavior(alignY);
// If we're trying to align to the closest edge, and the exposeRect is further down
// than the visibleRect, and not bigger than the visible area, then align with the bottom.
- if (scrollY == alignToClosestEdge && exposeRect.bottom() > visibleRect.bottom() && exposeRect.height() < visibleRect.height())
+ if (scrollY == alignToClosestEdge && exposeRect.maxY() > visibleRect.maxY() && exposeRect.height() < visibleRect.height())
scrollY = alignBottom;
// Given the Y behavior, compute the Y coordinate.
@@ -1573,7 +1575,7 @@ IntRect RenderLayer::getRectToExpose(const IntRect &visibleRect, const IntRect &
if (scrollY == noScroll)
y = visibleRect.y();
else if (scrollY == alignBottom)
- y = exposeRect.bottom() - visibleRect.height();
+ y = exposeRect.maxY() - visibleRect.height();
else if (scrollY == alignCenter)
y = exposeRect.y() + (exposeRect.height() - visibleRect.height()) / 2;
else
@@ -1681,7 +1683,7 @@ int RenderLayer::scrollPosition(Scrollbar* scrollbar) const
if (scrollbar->orientation() == HorizontalScrollbar)
return scrollXOffset();
if (scrollbar->orientation() == VerticalScrollbar)
- return m_scrollY;
+ return scrollYOffset();
return 0;
}
@@ -1710,8 +1712,8 @@ static IntRect cornerRect(const RenderLayer* layer, const IntRect& bounds)
horizontalThickness = layer->verticalScrollbar()->width();
verticalThickness = layer->horizontalScrollbar()->height();
}
- return IntRect(bounds.right() - horizontalThickness - layer->renderer()->style()->borderRightWidth(),
- bounds.bottom() - verticalThickness - layer->renderer()->style()->borderBottomWidth(),
+ return IntRect(bounds.maxX() - horizontalThickness - layer->renderer()->style()->borderRightWidth(),
+ bounds.maxY() - verticalThickness - layer->renderer()->style()->borderBottomWidth(),
horizontalThickness, verticalThickness);
}
@@ -1789,6 +1791,21 @@ IntPoint RenderLayer::convertFromContainingViewToScrollbar(const Scrollbar* scro
return point;
}
+IntSize RenderLayer::contentsSize() const
+{
+ return IntSize(const_cast<RenderLayer*>(this)->scrollWidth(), const_cast<RenderLayer*>(this)->scrollHeight());
+}
+
+int RenderLayer::visibleHeight() const
+{
+ return m_height;
+}
+
+int RenderLayer::visibleWidth() const
+{
+ return m_width;
+}
+
IntSize RenderLayer::scrollbarOffset(const Scrollbar* scrollbar) const
{
RenderBox* box = renderBox();
@@ -1846,10 +1863,13 @@ void RenderLayer::setHasHorizontalScrollbar(bool hasScrollbar)
if (hasScrollbar == (m_hBar != 0))
return;
- if (hasScrollbar)
+ if (hasScrollbar) {
m_hBar = createScrollbar(HorizontalScrollbar);
- else
+ ScrollableArea::didAddHorizontalScrollbar(m_hBar.get());
+ } else {
+ ScrollableArea::willRemoveHorizontalScrollbar(m_hBar.get());
destroyScrollbar(HorizontalScrollbar);
+ }
// Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
if (m_hBar)
@@ -1869,10 +1889,13 @@ void RenderLayer::setHasVerticalScrollbar(bool hasScrollbar)
if (hasScrollbar == (m_vBar != 0))
return;
- if (hasScrollbar)
+ if (hasScrollbar) {
m_vBar = createScrollbar(VerticalScrollbar);
- else
+ ScrollableArea::didAddVerticalScrollbar(m_vBar.get());
+ } else {
+ ScrollableArea::willRemoveVerticalScrollbar(m_vBar.get());
destroyScrollbar(VerticalScrollbar);
+ }
// Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
if (m_hBar)
@@ -1936,14 +1959,14 @@ void RenderLayer::positionOverflowControls(int tx, int ty)
IntRect scrollCorner(scrollCornerRect(this, borderBox));
IntRect absBounds(borderBox.x() + tx, borderBox.y() + ty, borderBox.width(), borderBox.height());
if (m_vBar)
- m_vBar->setFrameRect(IntRect(absBounds.right() - box->borderRight() - m_vBar->width(),
+ m_vBar->setFrameRect(IntRect(absBounds.maxX() - box->borderRight() - m_vBar->width(),
absBounds.y() + box->borderTop(),
m_vBar->width(),
absBounds.height() - (box->borderTop() + box->borderBottom()) - scrollCorner.height()));
if (m_hBar)
m_hBar->setFrameRect(IntRect(absBounds.x() + box->borderLeft(),
- absBounds.bottom() - box->borderBottom() - m_hBar->height(),
+ absBounds.maxY() - box->borderBottom() - m_hBar->height(),
absBounds.width() - (box->borderLeft() + box->borderRight()) - scrollCorner.width(),
m_hBar->height()));
@@ -2000,7 +2023,7 @@ int RenderLayer::overflowBottom() const
RenderBox* box = renderBox();
IntRect overflowRect(box->layoutOverflowRect());
box->flipForWritingMode(overflowRect);
- return overflowRect.bottom();
+ return overflowRect.maxY();
}
int RenderLayer::overflowLeft() const
@@ -2016,7 +2039,7 @@ int RenderLayer::overflowRight() const
RenderBox* box = renderBox();
IntRect overflowRect(box->layoutOverflowRect());
box->flipForWritingMode(overflowRect);
- return overflowRect.right();
+ return overflowRect.maxX();
}
void RenderLayer::computeScrollDimensions(bool* needHBar, bool* needVBar)
@@ -2078,8 +2101,8 @@ void RenderLayer::updateScrollInfoAfterLayout()
// Layout may cause us to be in an invalid scroll position. In this case we need
// to pull our scroll offsets back to the max (or push them up to the min).
int newX = max(0, min(scrollXOffset(), scrollWidth() - box->clientWidth()));
- int newY = max(0, min(m_scrollY, scrollHeight() - box->clientHeight()));
- if (newX != scrollXOffset() || newY != m_scrollY) {
+ int newY = max(0, min(scrollYOffset(), scrollHeight() - box->clientHeight()));
+ if (newX != scrollXOffset() || newY != scrollYOffset()) {
RenderView* view = renderer()->view();
ASSERT(view);
// scrollToOffset() may call updateLayerPositions(), which doesn't work
@@ -2163,7 +2186,10 @@ void RenderLayer::updateScrollInfoAfterLayout()
m_vBar->setProportion(clientHeight, m_scrollHeight);
}
+ RenderView* view = renderer()->view();
+ view->disableLayoutState();
scrollToOffset(scrollXOffset(), scrollYOffset());
+ view->enableLayoutState();
if (renderer()->node() && renderer()->document()->hasListenerType(Document::OVERFLOWCHANGED_LISTENER))
updateOverflowStatus(horizontalOverflow, verticalOverflow);
@@ -2256,7 +2282,7 @@ void RenderLayer::paintResizer(GraphicsContext* context, int tx, int ty, const I
// Paint the resizer control.
DEFINE_STATIC_LOCAL(RefPtr<Image>, resizeCornerImage, (Image::loadPlatformResource("textAreaResizeCorner")));
- IntPoint imagePoint(absRect.right() - resizeCornerImage->width(), absRect.bottom() - resizeCornerImage->height());
+ IntPoint imagePoint(absRect.maxX() - resizeCornerImage->width(), absRect.maxY() - resizeCornerImage->height());
context->drawImage(resizeCornerImage.get(), box->style()->colorSpace(), imagePoint);
// Draw a frame around the resizer (1px grey line) if there are any scrollbars present.
@@ -2634,13 +2660,18 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
int layerY = 0;
columnBlock->layer()->convertToLayerCoords(rootLayer, layerX, layerY);
+ bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
+
ColumnInfo* colInfo = columnBlock->columnInfo();
unsigned colCount = columnBlock->columnCount(colInfo);
- int currYOffset = 0;
+ int currLogicalTopOffset = 0;
for (unsigned i = 0; i < colCount; i++) {
// For each rect, we clip to the rect, and then we adjust our coords.
IntRect colRect = columnBlock->columnRectAt(colInfo, i);
- int currXOffset = colRect.x() - (columnBlock->borderLeft() + columnBlock->paddingLeft());
+ columnBlock->flipForWritingMode(colRect);
+ int logicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - columnBlock->logicalLeftOffsetForContent();
+ IntSize offset = isHorizontal ? IntSize(logicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, logicalLeftOffset);
+
colRect.move(layerX, layerY);
IntRect localDirtyRect(paintDirtyRect);
@@ -2660,7 +2691,7 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
if (oldHasTransform)
oldTransform = *childLayer->transform();
TransformationMatrix newTransform(oldTransform);
- newTransform.translateRight(currXOffset, currYOffset);
+ newTransform.translateRight(offset.width(), offset.height());
childLayer->m_transform.set(new TransformationMatrix(newTransform));
childLayer->paintLayer(rootLayer, context, localDirtyRect, paintBehavior, paintingRoot, overlapTestRequests, paintFlags);
@@ -2675,7 +2706,7 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
int childY = 0;
columnLayers[colIndex - 1]->convertToLayerCoords(rootLayer, childX, childY);
TransformationMatrix transform;
- transform.translateRight(childX + currXOffset, childY + currYOffset);
+ transform.translateRight(childX + offset.width(), childY + offset.height());
// Apply the transform.
context->concatCTM(transform.toAffineTransform());
@@ -2690,7 +2721,11 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
}
// Move to the next position.
- currYOffset -= colRect.height();
+ int blockDelta = isHorizontal ? colRect.height() : colRect.width();
+ if (columnBlock->style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset += blockDelta;
+ else
+ currLogicalTopOffset -= blockDelta;
}
}
@@ -3111,21 +3146,35 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
int colCount = columnBlock->columnCount(colInfo);
// We have to go backwards from the last column to the first.
- int left = columnBlock->borderLeft() + columnBlock->paddingLeft();
- int currYOffset = 0;
+ bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
+ int logicalLeft = columnBlock->logicalLeftOffsetForContent();
+ int currLogicalTopOffset = 0;
int i;
- for (i = 0; i < colCount; i++)
- currYOffset -= columnBlock->columnRectAt(colInfo, i).height();
+ for (i = 0; i < colCount; i++) {
+ IntRect colRect = columnBlock->columnRectAt(colInfo, i);
+ int blockDelta = (isHorizontal ? colRect.height() : colRect.width());
+ if (columnBlock->style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset += blockDelta;
+ else
+ currLogicalTopOffset -= blockDelta;
+ }
for (i = colCount - 1; i >= 0; i--) {
// For each rect, we clip to the rect, and then we adjust our coords.
IntRect colRect = columnBlock->columnRectAt(colInfo, i);
- int currXOffset = colRect.x() - left;
- currYOffset += colRect.height();
+ columnBlock->flipForWritingMode(colRect);
+ int currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
+ int blockDelta = (isHorizontal ? colRect.height() : colRect.width());
+ if (columnBlock->style()->isFlippedBlocksWritingMode())
+ currLogicalTopOffset -= blockDelta;
+ else
+ currLogicalTopOffset += blockDelta;
colRect.move(layerX, layerY);
IntRect localClipRect(hitTestRect);
localClipRect.intersect(colRect);
+ IntSize offset = isHorizontal ? IntSize(currLogicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, currLogicalLeftOffset);
+
if (!localClipRect.isEmpty() && localClipRect.intersects(result.rectForPoint(hitTestPoint))) {
RenderLayer* hitLayer = 0;
if (!columnIndex) {
@@ -3135,7 +3184,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
if (oldHasTransform)
oldTransform = *childLayer->transform();
TransformationMatrix newTransform(oldTransform);
- newTransform.translateRight(currXOffset, currYOffset);
+ newTransform.translateRight(offset.width(), offset.height());
childLayer->m_transform.set(new TransformationMatrix(newTransform));
hitLayer = childLayer->hitTestLayer(rootLayer, columnLayers[0], request, result, localClipRect, hitTestPoint, false, transformState, zOffset);
@@ -3148,7 +3197,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
// This involves subtracting out the position of the layer in our current coordinate space.
RenderLayer* nextLayer = columnLayers[columnIndex - 1];
RefPtr<HitTestingTransformState> newTransformState = nextLayer->createLocalTransformState(rootLayer, nextLayer, localClipRect, hitTestPoint, transformState);
- newTransformState->translate(currXOffset, currYOffset, HitTestingTransformState::AccumulateTransform);
+ newTransformState->translate(offset.width(), offset.height(), HitTestingTransformState::AccumulateTransform);
IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint());
IntRect localHitTestRect = newTransformState->mappedQuad().enclosingBoundingBox();
newTransformState->flatten();
@@ -3437,19 +3486,9 @@ IntRect RenderLayer::localBoundingBox() const
// as part of our bounding box. We do this because we are the responsible layer for both hit testing and painting those
// floats.
IntRect result;
- if (renderer()->isRenderInline()) {
- // Go from our first line box to our last line box.
- RenderInline* inlineFlow = toRenderInline(renderer());
- InlineFlowBox* firstBox = inlineFlow->firstLineBox();
- if (!firstBox)
- return result;
- int top = firstBox->topVisualOverflow();
- int bottom = inlineFlow->lastLineBox()->bottomVisualOverflow();
- int left = firstBox->x();
- for (InlineFlowBox* curr = firstBox->nextLineBox(); curr; curr = curr->nextLineBox())
- left = min(left, curr->x());
- result = IntRect(left, top, width(), bottom - top);
- } else if (renderer()->isTableRow()) {
+ if (renderer()->isRenderInline())
+ result = toRenderInline(renderer())->linesVisualOverflowBoundingBox();
+ else if (renderer()->isTableRow()) {
// Our bounding box is just the union of all of our cells' border/overflow rects.
for (RenderObject* child = renderer()->firstChild(); child; child = child->nextSibling()) {
if (child->isTableCell()) {
@@ -3485,7 +3524,10 @@ IntRect RenderLayer::localBoundingBox() const
IntRect RenderLayer::boundingBox(const RenderLayer* ancestorLayer) const
{
IntRect result = localBoundingBox();
-
+ if (renderer()->isBox())
+ renderBox()->flipForWritingMode(result);
+ else
+ renderer()->containingBlock()->flipForWritingMode(result);
int deltaX = 0, deltaY = 0;
convertToLayerCoords(ancestorLayer, deltaX, deltaY);
result.move(deltaX, deltaY);
@@ -3538,6 +3580,26 @@ bool RenderLayer::hasCompositedMask() const
}
#endif
+bool RenderLayer::scrollbarWillRenderIntoCompositingLayer() const
+{
+#if USE(ACCELERATED_COMPOSITING)
+ if (enclosingCompositingLayer())
+ return true;
+
+ RenderView* view = renderer()->view();
+ if (!view)
+ return false;
+
+ FrameView* frameView = view->frameView();
+ if (!frameView)
+ return false;
+
+ return frameView->isEnclosedInCompositingLayer();
+#else
+ return false;
+#endif
+}
+
bool RenderLayer::paintsWithTransform(PaintBehavior paintBehavior) const
{
#if USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebCore/rendering/RenderLayer.h b/Source/WebCore/rendering/RenderLayer.h
index 57cb4de..66281ce 100644
--- a/Source/WebCore/rendering/RenderLayer.h
+++ b/Source/WebCore/rendering/RenderLayer.h
@@ -483,6 +483,7 @@ public:
bool isComposited() const { return false; }
bool hasCompositedMask() const { return false; }
#endif
+ virtual bool scrollbarWillRenderIntoCompositingLayer() const;
bool paintsWithTransparency(PaintBehavior paintBehavior) const
{
@@ -495,7 +496,6 @@ private:
// The normal operator new is disallowed on all render objects.
void* operator new(size_t) throw();
-private:
void setNextSibling(RenderLayer* next) { m_next = next; }
void setPreviousSibling(RenderLayer* prev) { m_previous = prev; }
void setParent(RenderLayer* parent);
@@ -571,6 +571,9 @@ private:
virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const;
virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const;
virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const;
+ virtual IntSize contentsSize() const;
+ virtual int visibleHeight() const;
+ virtual int visibleWidth() const;
// NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
void scrollTo(int x, int y);
@@ -624,7 +627,6 @@ private:
void updateContentsScale(float);
-private:
friend class RenderLayerBacking;
friend class RenderLayerCompositor;
friend class RenderBoxModelObject;
diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp
index 8001c42..d0a36c7 100644
--- a/Source/WebCore/rendering/RenderLayerBacking.cpp
+++ b/Source/WebCore/rendering/RenderLayerBacking.cpp
@@ -70,7 +70,7 @@ static IntRect clipBox(RenderBox* renderer);
static inline bool isAcceleratedCanvas(RenderObject* renderer)
{
-#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
if (renderer->isCanvas()) {
HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
if (CanvasRenderingContext* context = canvas->renderingContext())
@@ -287,7 +287,7 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
m_graphicsLayer->setContentsToMedia(mediaElement->platformLayer());
}
#endif
-#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
else if (isAcceleratedCanvas(renderer)) {
HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(renderer->node());
if (CanvasRenderingContext* context = canvas->renderingContext())
@@ -803,7 +803,7 @@ bool RenderLayerBacking::containsPaintedContent() const
return hasBoxDecorationsOrBackground(renderer());
#endif
#if PLATFORM(MAC) && PLATFORM(CA) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
-#elif ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+#elif ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
if (isAcceleratedCanvas(renderer()))
return hasBoxDecorationsOrBackground(renderer());
#endif
@@ -843,7 +843,7 @@ void RenderLayerBacking::contentChanged(RenderLayer::ContentChangeType changeTyp
updateAfterLayout(CompositingChildren, isUpdateRoot);
}
-#if ENABLE(3D_CANVAS) || ENABLE(ACCELERATED_2D_CANVAS)
+#if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)
if ((changeType == RenderLayer::CanvasChanged) && isAcceleratedCanvas(renderer())) {
m_graphicsLayer->setContentsNeedsDisplay();
return;
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index 9a5dda7..f9c0f32 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -1483,7 +1483,7 @@ void RenderLayerCompositor::ensureRootPlatformLayer()
#ifndef NDEBUG
m_rootPlatformLayer->setName("Root platform");
#endif
- m_rootPlatformLayer->setSize(FloatSize(m_renderView->rightLayoutOverflow(), m_renderView->bottomLayoutOverflow()));
+ m_rootPlatformLayer->setSize(FloatSize(m_renderView->maxXLayoutOverflow(), m_renderView->maxYLayoutOverflow()));
m_rootPlatformLayer->setPosition(FloatPoint());
// Need to clip to prevent transformed content showing outside this frame
diff --git a/Source/WebCore/rendering/RenderLineBoxList.cpp b/Source/WebCore/rendering/RenderLineBoxList.cpp
index 1488ecc..274905e 100644
--- a/Source/WebCore/rendering/RenderLineBoxList.cpp
+++ b/Source/WebCore/rendering/RenderLineBoxList.cpp
@@ -160,11 +160,11 @@ bool RenderLineBoxList::rangeIntersectsRect(RenderBoxModelObject* renderer, int
if (renderer->style()->isHorizontalWritingMode()) {
physicalStart += ty;
- if (physicalStart >= rect.bottom() || physicalStart + physicalExtent <= rect.y())
+ if (physicalStart >= rect.maxY() || physicalStart + physicalExtent <= rect.y())
return false;
} else {
physicalStart += tx;
- if (physicalStart >= rect.right() || physicalStart + physicalExtent <= rect.x())
+ if (physicalStart >= rect.maxX() || physicalStart + physicalExtent <= rect.x())
return false;
}
@@ -231,19 +231,19 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, PaintInfo& paintIn
// FIXME: This is the deprecated pagination model that is still needed
// for embedded views inside AppKit. AppKit is incapable of paginating vertical
// text pages, so we don't have to deal with vertical lines at all here.
- int topForPaginationCheck = curr->topVisualOverflow();
- int bottomForPaginationCheck = curr->bottomVisualOverflow();
+ int topForPaginationCheck = curr->minYVisualOverflow();
+ int bottomForPaginationCheck = curr->maxYVisualOverflow();
if (!curr->parent()) {
// We're a root box. Use lineTop and lineBottom as well here.
topForPaginationCheck = min(topForPaginationCheck, curr->root()->lineTop());
bottomForPaginationCheck = max(bottomForPaginationCheck, curr->root()->lineBottom());
}
if (bottomForPaginationCheck - topForPaginationCheck <= v->printRect().height()) {
- if (ty + bottomForPaginationCheck > v->printRect().bottom()) {
+ if (ty + bottomForPaginationCheck > v->printRect().maxY()) {
if (RootInlineBox* nextRootBox = curr->root()->nextRootBox())
- bottomForPaginationCheck = min(bottomForPaginationCheck, min(nextRootBox->topVisualOverflow(), nextRootBox->lineTop()));
+ bottomForPaginationCheck = min(bottomForPaginationCheck, min(nextRootBox->minYVisualOverflow(), nextRootBox->lineTop()));
}
- if (ty + bottomForPaginationCheck > v->printRect().bottom()) {
+ if (ty + bottomForPaginationCheck > v->printRect().maxY()) {
if (ty + topForPaginationCheck < v->truncatedAt())
v->setBestTruncatedAt(ty + topForPaginationCheck, renderer);
// If we were able to truncate, don't paint.
diff --git a/Source/WebCore/rendering/RenderListBox.cpp b/Source/WebCore/rendering/RenderListBox.cpp
index 90f13da..13e8e58 100644
--- a/Source/WebCore/rendering/RenderListBox.cpp
+++ b/Source/WebCore/rendering/RenderListBox.cpp
@@ -1,7 +1,5 @@
/*
- * This file is part of the select element renderer in WebCore.
- *
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
* 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
*
* Redistribution and use in source and binary forms, with or without
@@ -48,6 +46,7 @@
#include "OptionElement.h"
#include "Page.h"
#include "PaintInfo.h"
+#include "RenderLayer.h"
#include "RenderScrollbar.h"
#include "RenderTheme.h"
#include "RenderView.h"
@@ -112,7 +111,7 @@ void RenderListBox::updateFromElement()
}
if (!text.isEmpty()) {
- float textWidth = itemFont.floatWidth(TextRun(text.impl(), 0, 0, 0, false, false, false, false));
+ float textWidth = itemFont.floatWidth(TextRun(text.impl(), false, 0, 0, TextRun::AllowTrailingExpansion, false, false, false, false));
width = max(width, textWidth);
}
}
@@ -142,8 +141,11 @@ void RenderListBox::selectionChanged()
void RenderListBox::layout()
{
RenderBlock::layout();
- if (m_scrollToRevealSelectionAfterLayout)
+ if (m_scrollToRevealSelectionAfterLayout) {
+ view()->disableLayoutState();
scrollToRevealSelection();
+ view()->enableLayoutState();
+ }
}
void RenderListBox::scrollToRevealSelection()
@@ -303,7 +305,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, int tx, int ty, in
// Determine where the item text should be placed
IntRect r = itemBoundingBoxRect(tx, ty, listIndex);
- r.move(optionsSpacingHorizontal, style()->font().ascent());
+ r.move(optionsSpacingHorizontal, style()->fontMetrics().ascent());
RenderStyle* itemStyle = element->renderStyle();
if (!itemStyle)
@@ -331,7 +333,7 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, int tx, int ty, in
unsigned length = itemText.length();
const UChar* string = itemText.characters();
- TextRun textRun(string, length, 0, 0, 0, !itemStyle->isLeftToRightDirection(), itemStyle->unicodeBidi() == Override, false, false);
+ TextRun textRun(string, length, false, 0, 0, TextRun::AllowTrailingExpansion, !itemStyle->isLeftToRightDirection(), itemStyle->unicodeBidi() == Override, false, false);
// Draw the item text
if (itemStyle->visibility() != HIDDEN)
@@ -550,7 +552,7 @@ void RenderListBox::scrollTo(int newOffset)
int RenderListBox::itemHeight() const
{
- return style()->font().height() + rowSpacing;
+ return style()->fontMetrics().height() + rowSpacing;
}
int RenderListBox::verticalScrollbarWidth() const
@@ -696,6 +698,37 @@ IntPoint RenderListBox::convertFromContainingViewToScrollbar(const Scrollbar* sc
return point;
}
+IntSize RenderListBox::contentsSize() const
+{
+ return IntSize(scrollWidth(), scrollHeight());
+}
+
+int RenderListBox::visibleHeight() const
+{
+ return height();
+}
+
+int RenderListBox::visibleWidth() const
+{
+ return width();
+}
+
+IntPoint RenderListBox::currentMousePosition() const
+{
+ RenderView* view = this->view();
+ if (!view)
+ return IntPoint();
+ return view->frameView()->currentMousePosition();
+}
+
+bool RenderListBox::scrollbarWillRenderIntoCompositingLayer() const
+{
+ RenderLayer* layer = this->enclosingLayer();
+ if (!layer)
+ return false;
+ return layer->scrollbarWillRenderIntoCompositingLayer();
+}
+
PassRefPtr<Scrollbar> RenderListBox::createScrollbar()
{
RefPtr<Scrollbar> widget;
@@ -723,10 +756,13 @@ void RenderListBox::setHasVerticalScrollbar(bool hasScrollbar)
if (hasScrollbar == (m_vBar != 0))
return;
- if (hasScrollbar)
+ if (hasScrollbar) {
m_vBar = createScrollbar();
- else
+ ScrollableArea::didAddVerticalScrollbar(m_vBar.get());
+ } else {
+ ScrollableArea::willRemoveVerticalScrollbar(m_vBar.get());
destroyScrollbar();
+ }
if (m_vBar)
m_vBar->styleChanged();
diff --git a/Source/WebCore/rendering/RenderListBox.h b/Source/WebCore/rendering/RenderListBox.h
index 1ba2b94..1eb2036 100644
--- a/Source/WebCore/rendering/RenderListBox.h
+++ b/Source/WebCore/rendering/RenderListBox.h
@@ -106,6 +106,11 @@ private:
virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const;
virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const;
virtual Scrollbar* verticalScrollbar() const { return m_vBar.get(); }
+ virtual IntSize contentsSize() const;
+ virtual int visibleHeight() const;
+ virtual int visibleWidth() const;
+ virtual IntPoint currentMousePosition() const;
+ virtual bool scrollbarWillRenderIntoCompositingLayer() const;
// NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
void scrollTo(int newOffset);
diff --git a/Source/WebCore/rendering/RenderListItem.cpp b/Source/WebCore/rendering/RenderListItem.cpp
index 65606f3..5cfb522 100644
--- a/Source/WebCore/rendering/RenderListItem.cpp
+++ b/Source/WebCore/rendering/RenderListItem.cpp
@@ -297,12 +297,12 @@ void RenderListItem::positionListMarker()
for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); box; box = box->parent()) {
IntRect newLogicalVisualOverflowRect = box->logicalVisualOverflowRect();
IntRect newLogicalLayoutOverflowRect = box->logicalLayoutOverflowRect();
- if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalVisualOverflowRect.right() && !hitSelfPaintingLayer) {
+ if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalVisualOverflowRect.maxX() && !hitSelfPaintingLayer) {
newLogicalVisualOverflowRect.setWidth(markerLogicalLeft + m_marker->logicalWidth() - box->logicalLeftVisualOverflow());
if (box == root)
adjustOverflow = true;
}
- if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalLayoutOverflowRect.right()) {
+ if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalLayoutOverflowRect.maxX()) {
newLogicalLayoutOverflowRect.setWidth(markerLogicalLeft + m_marker->logicalWidth() - box->logicalLeftLayoutOverflow());
if (box == root)
adjustOverflow = true;
diff --git a/Source/WebCore/rendering/RenderListMarker.cpp b/Source/WebCore/rendering/RenderListMarker.cpp
index cd41c75..c1c7245 100644
--- a/Source/WebCore/rendering/RenderListMarker.cpp
+++ b/Source/WebCore/rendering/RenderListMarker.cpp
@@ -26,13 +26,13 @@
#include "RenderListMarker.h"
#include "CachedImage.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "GraphicsContext.h"
#include "RenderLayer.h"
#include "RenderListItem.h"
#include "RenderView.h"
#include "TextRun.h"
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
using namespace WTF;
@@ -1130,7 +1130,7 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
if (style()->highlight() != nullAtom && !paintInfo.context->paintingDisabled())
paintCustomHighlight(tx, ty, style()->highlight(), true);
#endif
- context->drawImage(m_image->image(this, marker.size()), style()->colorSpace(), marker);
+ context->drawImage(m_image->image(this, marker.size()).get(), style()->colorSpace(), marker);
if (selectionState() != SelectionNone) {
IntRect selRect = localSelectionRect();
selRect.move(boxOrigin.x(), boxOrigin.y());
@@ -1260,12 +1260,12 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
marker = marker.transposedRect();
marker.move(box.x(), box.y() - logicalHeight());
context->save();
- context->translate(marker.x(), marker.bottom());
+ context->translate(marker.x(), marker.maxY());
context->rotate(static_cast<float>(deg2rad(90.)));
- context->translate(-marker.x(), -marker.bottom());
+ context->translate(-marker.x(), -marker.maxY());
}
- IntPoint textOrigin = IntPoint(marker.x(), marker.y() + style()->font().ascent());
+ IntPoint textOrigin = IntPoint(marker.x(), marker.y() + style()->fontMetrics().ascent());
if (type == Asterisks || type == Footnotes)
context->drawText(style()->font(), textRun, textOrigin);
@@ -1311,7 +1311,7 @@ void RenderListMarker::layout()
setHeight(m_image->imageSize(this, style()->effectiveZoom()).height());
} else {
setLogicalWidth(minPreferredLogicalWidth());
- setLogicalHeight(style()->font().height());
+ setLogicalHeight(style()->fontMetrics().height());
}
setMarginStart(0);
@@ -1346,11 +1346,12 @@ void RenderListMarker::computePreferredLogicalWidths()
m_text = "";
const Font& font = style()->font();
+ const FontMetrics& fontMetrics = font.fontMetrics();
if (isImage()) {
// FIXME: This is a somewhat arbitrary width. Generated images for markers really won't become particularly useful
// until we support the CSS3 marker pseudoclass to allow control over the width and height of the marker box.
- int bulletWidth = font.ascent() / 2;
+ int bulletWidth = fontMetrics.ascent() / 2;
m_image->setImageContainerSize(IntSize(bulletWidth, bulletWidth));
IntSize imageSize = m_image->imageSize(this, style()->effectiveZoom());
m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = style()->isHorizontalWritingMode() ? imageSize.width() : imageSize.height();
@@ -1373,7 +1374,7 @@ void RenderListMarker::computePreferredLogicalWidths()
case Disc:
case Square:
m_text = listMarkerText(type, 0); // value is ignored for these types
- logicalWidth = (font.ascent() * 2 / 3 + 1) / 2 + 2;
+ logicalWidth = (fontMetrics.ascent() * 2 / 3 + 1) / 2 + 2;
break;
case Afar:
case Amharic:
@@ -1472,7 +1473,7 @@ void RenderListMarker::computePreferredLogicalWidths()
void RenderListMarker::updateMargins()
{
- const Font& font = style()->font();
+ const FontMetrics& fontMetrics = style()->fontMetrics();
int marginStart = 0;
int marginEnd = 0;
@@ -1485,7 +1486,7 @@ void RenderListMarker::updateMargins()
case Circle:
case Square:
marginStart = -1;
- marginEnd = font.ascent() - minPreferredLogicalWidth() + 1;
+ marginEnd = fontMetrics.ascent() - minPreferredLogicalWidth() + 1;
break;
default:
break;
@@ -1495,7 +1496,7 @@ void RenderListMarker::updateMargins()
if (isImage())
marginStart = -minPreferredLogicalWidth() - cMarkerPadding;
else {
- int offset = font.ascent() * 2 / 3;
+ int offset = fontMetrics.ascent() * 2 / 3;
switch (style()->listStyleType()) {
case Disc:
case Circle:
@@ -1513,7 +1514,7 @@ void RenderListMarker::updateMargins()
if (isImage())
marginEnd = cMarkerPadding;
else {
- int offset = font.ascent() * 2 / 3;
+ int offset = fontMetrics.ascent() * 2 / 3;
switch (style()->listStyleType()) {
case Disc:
case Circle:
@@ -1584,15 +1585,15 @@ IntRect RenderListMarker::getRelativeMarkerRect()
case Asterisks:
case Footnotes: {
const Font& font = style()->font();
- relativeRect = IntRect(0, 0, font.width(m_text), font.height());
+ relativeRect = IntRect(0, 0, font.width(m_text), font.fontMetrics().height());
break;
}
case Disc:
case Circle:
case Square: {
// FIXME: Are these particular rounding rules necessary?
- const Font& font = style()->font();
- int ascent = font.ascent();
+ const FontMetrics& fontMetrics = style()->fontMetrics();
+ int ascent = fontMetrics.ascent();
int bulletWidth = (ascent * 2 / 3 + 1) / 2;
relativeRect = IntRect(1, 3 * (ascent - ascent * 2 / 3) / 2, bulletWidth, bulletWidth);
break;
@@ -1680,7 +1681,7 @@ IntRect RenderListMarker::getRelativeMarkerRect()
int itemWidth = font.width(m_text);
UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->value()), ' ' };
int suffixSpaceWidth = font.width(TextRun(suffixSpace, 2));
- relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.height());
+ relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.fontMetrics().height());
}
if (!style()->isHorizontalWritingMode()) {
diff --git a/Source/WebCore/rendering/RenderMarquee.cpp b/Source/WebCore/rendering/RenderMarquee.cpp
index 9b58118..6f59340 100644
--- a/Source/WebCore/rendering/RenderMarquee.cpp
+++ b/Source/WebCore/rendering/RenderMarquee.cpp
@@ -116,7 +116,7 @@ int RenderMarquee::computePosition(EMarqueeDirection dir, bool stopAtContentEdge
if (isHorizontal()) {
bool ltr = s->isLeftToRightDirection();
int clientWidth = box->clientWidth();
- int contentWidth = ltr ? box->rightLayoutOverflow() : box->leftLayoutOverflow();
+ int contentWidth = ltr ? box->maxXLayoutOverflow() : box->minXLayoutOverflow();
if (ltr)
contentWidth += (box->paddingRight() - box->borderLeft());
else {
@@ -137,7 +137,7 @@ int RenderMarquee::computePosition(EMarqueeDirection dir, bool stopAtContentEdge
}
}
else {
- int contentHeight = box->bottomLayoutOverflow() - box->borderTop() + box->paddingBottom();
+ int contentHeight = box->maxYLayoutOverflow() - box->borderTop() + box->paddingBottom();
int clientHeight = box->clientHeight();
if (dir == MUP) {
if (stopAtContentEdge)
diff --git a/Source/WebCore/rendering/RenderMedia.cpp b/Source/WebCore/rendering/RenderMedia.cpp
index 0b913ee..16cd874 100644
--- a/Source/WebCore/rendering/RenderMedia.cpp
+++ b/Source/WebCore/rendering/RenderMedia.cpp
@@ -28,59 +28,22 @@
#if ENABLE(VIDEO)
#include "RenderMedia.h"
-#include "EventNames.h"
-#include "FloatConversion.h"
-#include "HTMLNames.h"
+#include "HTMLMediaElement.h"
#include "MediaControlElements.h"
-#include "MouseEvent.h"
-#include "Page.h"
-#include "RenderLayer.h"
-#include "RenderTheme.h"
-#include <wtf/CurrentTime.h>
-#include <wtf/MathExtras.h>
-
-#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS)
-#include "TouchEvent.h"
-#define TOUCH_DELAY 4
-#endif
-
-using namespace std;
+#include "MediaControls.h"
namespace WebCore {
-using namespace HTMLNames;
-
-static const double cTimeUpdateRepeatDelay = 0.2;
-static const double cOpacityAnimationRepeatDelay = 0.05;
-
RenderMedia::RenderMedia(HTMLMediaElement* video)
: RenderImage(video)
- , m_timeUpdateTimer(this, &RenderMedia::timeUpdateTimerFired)
- , m_opacityAnimationTimer(this, &RenderMedia::opacityAnimationTimerFired)
- , m_mouseOver(false)
- , m_opacityAnimationStartTime(0)
- , m_opacityAnimationDuration(0)
- , m_opacityAnimationFrom(0)
- , m_opacityAnimationTo(1.0f)
-#if PLATFORM(ANDROID)
- , m_lastTouch(0)
-#endif
+ , m_controls(new MediaControls(video))
{
setImageResource(RenderImageResource::create());
}
RenderMedia::RenderMedia(HTMLMediaElement* video, const IntSize& intrinsicSize)
: RenderImage(video)
- , m_timeUpdateTimer(this, &RenderMedia::timeUpdateTimerFired)
- , m_opacityAnimationTimer(this, &RenderMedia::opacityAnimationTimerFired)
- , m_mouseOver(false)
- , m_opacityAnimationStartTime(0)
- , m_opacityAnimationDuration(0)
- , m_opacityAnimationFrom(0)
- , m_opacityAnimationTo(1.0f)
-#if PLATFORM(ANDROID)
- , m_lastTouch(0)
-#endif
+ , m_controls(new MediaControls(video))
{
setImageResource(RenderImageResource::create());
setIntrinsicSize(intrinsicSize);
@@ -92,16 +55,7 @@ RenderMedia::~RenderMedia()
void RenderMedia::destroy()
{
- if (m_controlsShadowRoot && m_controlsShadowRoot->renderer()) {
-
- // detach the panel before removing the shadow renderer to prevent a crash in m_controlsShadowRoot->detach()
- // when display: style changes
- m_panel->detach();
-
- removeChild(m_controlsShadowRoot->renderer());
- m_controlsShadowRoot->detach();
- m_controlsShadowRoot = 0;
- }
+ m_controls->destroy();
RenderImage::destroy();
}
@@ -110,51 +64,10 @@ HTMLMediaElement* RenderMedia::mediaElement() const
return static_cast<HTMLMediaElement*>(node());
}
-MediaPlayer* RenderMedia::player() const
-{
- return mediaElement()->player();
-}
-
void RenderMedia::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderImage::styleDidChange(diff, oldStyle);
-
- if (m_controlsShadowRoot) {
- if (m_panel)
- m_panel->updateStyle();
- if (m_muteButton)
- m_muteButton->updateStyle();
- if (m_playButton)
- m_playButton->updateStyle();
- if (m_seekBackButton)
- m_seekBackButton->updateStyle();
- if (m_seekForwardButton)
- m_seekForwardButton->updateStyle();
- if (m_rewindButton)
- m_rewindButton->updateStyle();
- if (m_returnToRealtimeButton)
- m_returnToRealtimeButton->updateStyle();
- if (m_toggleClosedCaptionsButton)
- m_toggleClosedCaptionsButton->updateStyle();
- if (m_statusDisplay)
- m_statusDisplay->updateStyle();
- if (m_timelineContainer)
- m_timelineContainer->updateStyle();
- if (m_timeline)
- m_timeline->updateStyle();
- if (m_fullscreenButton)
- m_fullscreenButton->updateStyle();
- if (m_currentTimeDisplay)
- m_currentTimeDisplay->updateStyle();
- if (m_timeRemainingDisplay)
- m_timeRemainingDisplay->updateStyle();
- if (m_volumeSliderContainer)
- m_volumeSliderContainer->updateStyle();
- if (m_volumeSliderMuteButton)
- m_volumeSliderMuteButton->updateStyle();
- if (m_volumeSlider)
- m_volumeSlider->updateStyle();
- }
+ m_controls->updateStyle();
}
void RenderMedia::layout()
@@ -163,17 +76,13 @@ void RenderMedia::layout()
RenderImage::layout();
- RenderBox* controlsRenderer = m_controlsShadowRoot ? m_controlsShadowRoot->renderBox() : 0;
+ RenderBox* controlsRenderer = m_controls->renderBox();
if (!controlsRenderer)
return;
IntSize newSize = contentBoxRect().size();
if (newSize != oldSize || controlsRenderer->needsLayout()) {
- if (m_currentTimeDisplay && m_timeRemainingDisplay) {
- bool shouldShowTimeDisplays = shouldShowTimeDisplayControls();
- m_currentTimeDisplay->setVisible(shouldShowTimeDisplays);
- m_timeRemainingDisplay->setVisible(shouldShowTimeDisplays);
- }
+ m_controls->updateTimeDisplayVisibility();
controlsRenderer->setLocation(borderLeft() + paddingLeft(), borderTop() + paddingTop());
controlsRenderer->style()->setHeight(Length(newSize.height(), Fixed));
@@ -184,480 +93,9 @@ void RenderMedia::layout()
}
}
-void RenderMedia::createControlsShadowRoot()
-{
- ASSERT(!m_controlsShadowRoot);
- m_controlsShadowRoot = MediaControlShadowRootElement::create(mediaElement());
- addChild(m_controlsShadowRoot->renderer());
-}
-
-void RenderMedia::createPanel()
-{
- ASSERT(!m_panel);
- m_panel = MediaControlElement::create(mediaElement(), MEDIA_CONTROLS_PANEL);
- m_panel->attachToParent(m_controlsShadowRoot.get());
-}
-
-void RenderMedia::createMuteButton()
-{
- ASSERT(!m_muteButton);
- m_muteButton = MediaControlMuteButtonElement::create(mediaElement(), MediaControlMuteButtonElement::Controller);
- m_muteButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createPlayButton()
-{
- ASSERT(!m_playButton);
- m_playButton = MediaControlPlayButtonElement::create(mediaElement());
- m_playButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createSeekBackButton()
-{
- ASSERT(!m_seekBackButton);
- m_seekBackButton = MediaControlSeekButtonElement::create(mediaElement(), MEDIA_CONTROLS_SEEK_BACK_BUTTON);
- m_seekBackButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createSeekForwardButton()
-{
- ASSERT(!m_seekForwardButton);
- m_seekForwardButton = MediaControlSeekButtonElement::create(mediaElement(), MEDIA_CONTROLS_SEEK_FORWARD_BUTTON);
- m_seekForwardButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createRewindButton()
-{
- ASSERT(!m_rewindButton);
- m_rewindButton = MediaControlRewindButtonElement::create(mediaElement());
- m_rewindButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createReturnToRealtimeButton()
-{
- ASSERT(!m_returnToRealtimeButton);
- m_returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create(mediaElement());
- m_returnToRealtimeButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createToggleClosedCaptionsButton()
-{
- ASSERT(!m_toggleClosedCaptionsButton);
- m_toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(mediaElement());
- m_toggleClosedCaptionsButton->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createStatusDisplay()
-{
- ASSERT(!m_statusDisplay);
- m_statusDisplay = MediaControlStatusDisplayElement::create(mediaElement());
- m_statusDisplay->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createTimelineContainer()
-{
- ASSERT(!m_timelineContainer);
- m_timelineContainer = MediaControlTimelineContainerElement::create(mediaElement());
- m_timelineContainer->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createTimeline()
-{
- ASSERT(!m_timeline);
- m_timeline = MediaControlTimelineElement::create(mediaElement());
- m_timeline->setAttribute(precisionAttr, "float");
- m_timeline->attachToParent(m_timelineContainer.get());
-}
-
-void RenderMedia::createVolumeSliderContainer()
-{
- ASSERT(!m_volumeSliderContainer);
- m_volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(mediaElement());
- m_volumeSliderContainer->attachToParent(m_panel.get());
-}
-
-void RenderMedia::createVolumeSlider()
-{
- ASSERT(!m_volumeSlider);
- m_volumeSlider = MediaControlVolumeSliderElement::create(mediaElement());
- m_volumeSlider->setAttribute(precisionAttr, "float");
- m_volumeSlider->setAttribute(maxAttr, "1");
- m_volumeSlider->setAttribute(valueAttr, String::number(mediaElement()->volume()));
- m_volumeSlider->attachToParent(m_volumeSliderContainer.get());
-}
-
-void RenderMedia::createVolumeSliderMuteButton()
-{
- ASSERT(!m_volumeSliderMuteButton);
- m_volumeSliderMuteButton = MediaControlMuteButtonElement::create(mediaElement(), MediaControlMuteButtonElement::VolumeSlider);
- m_volumeSliderMuteButton->attachToParent(m_volumeSliderContainer.get());
-
-}
-
-void RenderMedia::createCurrentTimeDisplay()
-{
- ASSERT(!m_currentTimeDisplay);
- m_currentTimeDisplay = MediaControlTimeDisplayElement::create(mediaElement(), MEDIA_CONTROLS_CURRENT_TIME_DISPLAY);
- m_currentTimeDisplay->attachToParent(m_timelineContainer.get());
-}
-
-void RenderMedia::createTimeRemainingDisplay()
-{
- ASSERT(!m_timeRemainingDisplay);
- m_timeRemainingDisplay = MediaControlTimeDisplayElement::create(mediaElement(), MEDIA_CONTROLS_TIME_REMAINING_DISPLAY);
- m_timeRemainingDisplay->attachToParent(m_timelineContainer.get());
-}
-
-void RenderMedia::createFullscreenButton()
-{
- ASSERT(!m_fullscreenButton);
- m_fullscreenButton = MediaControlFullscreenButtonElement::create(mediaElement());
- m_fullscreenButton->attachToParent(m_panel.get());
-}
-
void RenderMedia::updateFromElement()
{
- updateControls();
-}
-
-void RenderMedia::updateControls()
-{
- HTMLMediaElement* media = mediaElement();
- if (!media->controls() || !media->inActiveDocument()) {
- if (m_controlsShadowRoot) {
- m_controlsShadowRoot->detach();
- m_panel = 0;
- m_muteButton = 0;
- m_playButton = 0;
- m_statusDisplay = 0;
- m_timelineContainer = 0;
- m_timeline = 0;
- m_seekBackButton = 0;
- m_seekForwardButton = 0;
- m_rewindButton = 0;
- m_returnToRealtimeButton = 0;
- m_currentTimeDisplay = 0;
- m_timeRemainingDisplay = 0;
- m_fullscreenButton = 0;
- m_volumeSliderContainer = 0;
- m_volumeSlider = 0;
- m_volumeSliderMuteButton = 0;
- m_controlsShadowRoot = 0;
- m_toggleClosedCaptionsButton = 0;
- }
- m_opacityAnimationTo = 1.0f;
- m_opacityAnimationTimer.stop();
- m_timeUpdateTimer.stop();
- return;
- }
-
- if (!m_controlsShadowRoot) {
- createControlsShadowRoot();
- createPanel();
- if (m_panel) {
- createRewindButton();
- createPlayButton();
- createReturnToRealtimeButton();
- createStatusDisplay();
- createTimelineContainer();
- if (m_timelineContainer) {
- createCurrentTimeDisplay();
- createTimeline();
- createTimeRemainingDisplay();
- }
- createSeekBackButton();
- createSeekForwardButton();
- createToggleClosedCaptionsButton();
- createFullscreenButton();
- createMuteButton();
- createVolumeSliderContainer();
- if (m_volumeSliderContainer) {
- createVolumeSlider();
- createVolumeSliderMuteButton();
- }
- m_panel->attach();
- }
- }
-
- if (media->canPlay()) {
- if (m_timeUpdateTimer.isActive())
- m_timeUpdateTimer.stop();
- } else if (style()->visibility() == VISIBLE && m_timeline && m_timeline->renderer() && m_timeline->renderer()->style()->display() != NONE) {
- m_timeUpdateTimer.startRepeating(cTimeUpdateRepeatDelay);
- }
-
-
- if (m_panel) {
- // update() might alter the opacity of the element, especially if we are in the middle
- // of an animation. This is the only element concerned as we animate only this element.
- float opacityBeforeChangingStyle = m_panel->renderer() ? m_panel->renderer()->style()->opacity() : 0;
- m_panel->update();
- changeOpacity(m_panel.get(), opacityBeforeChangingStyle);
- }
- if (m_muteButton)
- m_muteButton->update();
- if (m_playButton)
- m_playButton->update();
- if (m_timelineContainer)
- m_timelineContainer->update();
- if (m_volumeSliderContainer)
- m_volumeSliderContainer->update();
- if (m_timeline)
- m_timeline->update();
- if (m_currentTimeDisplay)
- m_currentTimeDisplay->update();
- if (m_timeRemainingDisplay)
- m_timeRemainingDisplay->update();
- if (m_seekBackButton)
- m_seekBackButton->update();
- if (m_seekForwardButton)
- m_seekForwardButton->update();
- if (m_rewindButton)
- m_rewindButton->update();
- if (m_returnToRealtimeButton)
- m_returnToRealtimeButton->update();
- if (m_toggleClosedCaptionsButton)
- m_toggleClosedCaptionsButton->update();
- if (m_statusDisplay)
- m_statusDisplay->update();
- if (m_fullscreenButton)
- m_fullscreenButton->update();
- if (m_volumeSlider)
- m_volumeSlider->update();
- if (m_volumeSliderMuteButton)
- m_volumeSliderMuteButton->update();
-
- updateTimeDisplay();
- updateControlVisibility();
-}
-
-void RenderMedia::timeUpdateTimerFired(Timer<RenderMedia>*)
-{
- if (m_timeline)
- m_timeline->update(false);
- updateTimeDisplay();
-}
-
-void RenderMedia::updateTimeDisplay()
-{
- if (!m_currentTimeDisplay || !m_currentTimeDisplay->renderer() || m_currentTimeDisplay->renderer()->style()->display() == NONE || style()->visibility() != VISIBLE)
- return;
-
- float now = mediaElement()->currentTime();
- float duration = mediaElement()->duration();
-
- // Allow the theme to format the time
- ExceptionCode ec;
- m_currentTimeDisplay->setInnerText(theme()->formatMediaControlsCurrentTime(now, duration), ec);
- m_currentTimeDisplay->setCurrentValue(now);
- m_timeRemainingDisplay->setInnerText(theme()->formatMediaControlsRemainingTime(now, duration), ec);
- m_timeRemainingDisplay->setCurrentValue(now - duration);
-}
-
-void RenderMedia::updateControlVisibility()
-{
- if (!m_panel || !m_panel->renderer())
- return;
-
- // Don't fade for audio controls.
- HTMLMediaElement* media = mediaElement();
- if (!media->hasVideo())
- return;
-
- // Don't fade if the media element is not visible
- if (style()->visibility() != VISIBLE)
- return;
-
-#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS)
- if (WTF::currentTime() - m_lastTouch > TOUCH_DELAY)
- m_mouseOver = false;
- else
- m_mouseOver = true;
-#endif
-
- bool shouldHideController = !m_mouseOver && !media->canPlay();
-
- // Do fading manually, css animations don't work with shadow trees
-
- float animateFrom = m_panel->renderer()->style()->opacity();
- float animateTo = shouldHideController ? 0.0f : 1.0f;
-
- if (animateFrom == animateTo)
- return;
-
- if (m_opacityAnimationTimer.isActive()) {
- if (m_opacityAnimationTo == animateTo)
- return;
- m_opacityAnimationTimer.stop();
- }
-
- if (animateFrom < animateTo)
- m_opacityAnimationDuration = m_panel->renderer()->theme()->mediaControlsFadeInDuration();
- else
- m_opacityAnimationDuration = m_panel->renderer()->theme()->mediaControlsFadeOutDuration();
-
- m_opacityAnimationFrom = animateFrom;
- m_opacityAnimationTo = animateTo;
-
- m_opacityAnimationStartTime = currentTime();
- m_opacityAnimationTimer.startRepeating(cOpacityAnimationRepeatDelay);
-}
-
-void RenderMedia::changeOpacity(HTMLElement* e, float opacity)
-{
- if (!e || !e->renderer() || !e->renderer()->style())
- return;
- RefPtr<RenderStyle> s = RenderStyle::clone(e->renderer()->style());
- s->setOpacity(opacity);
- // z-index can't be auto if opacity is used
- s->setZIndex(0);
- e->renderer()->setStyle(s.release());
-}
-
-void RenderMedia::opacityAnimationTimerFired(Timer<RenderMedia>*)
-{
- double time = currentTime() - m_opacityAnimationStartTime;
- if (time >= m_opacityAnimationDuration) {
- time = m_opacityAnimationDuration;
- m_opacityAnimationTimer.stop();
- }
- float opacity = narrowPrecisionToFloat(m_opacityAnimationFrom + (m_opacityAnimationTo - m_opacityAnimationFrom) * time / m_opacityAnimationDuration);
- changeOpacity(m_panel.get(), opacity);
-}
-
-void RenderMedia::updateVolumeSliderContainer(bool visible)
-{
- if (!mediaElement()->hasAudio() || !m_volumeSliderContainer || !m_volumeSlider)
- return;
-
- if (visible && !m_volumeSliderContainer->isVisible()) {
- if (!m_muteButton || !m_muteButton->renderer() || !m_muteButton->renderBox())
- return;
-
- RefPtr<RenderStyle> s = m_volumeSliderContainer->styleForElement();
- int height = s->height().isPercent() ? 0 : s->height().value();
- int width = s->width().isPercent() ? 0 : s->width().value();
- IntPoint offset = document()->page()->theme()->volumeSliderOffsetFromMuteButton(m_muteButton->renderer()->node(), IntSize(width, height));
- int x = offset.x() + m_muteButton->renderBox()->offsetLeft();
- int y = offset.y() + m_muteButton->renderBox()->offsetTop();
-
- m_volumeSliderContainer->setPosition(x, y);
- m_volumeSliderContainer->setVisible(true);
- m_volumeSliderContainer->update();
- m_volumeSlider->update();
- } else if (!visible && m_volumeSliderContainer->isVisible()) {
- m_volumeSliderContainer->setVisible(false);
- m_volumeSliderContainer->updateStyle();
- }
-}
-
-#if PLATFORM(ANDROID)
-void RenderMedia::updateLastTouch()
-{
- m_lastTouch = WTF::currentTime();
-}
-#endif
-
-void RenderMedia::forwardEvent(Event* event)
-{
-#if PLATFORM(ANDROID)
- if (event->isMouseEvent())
- updateLastTouch();
-#if ENABLE(TOUCH_EVENTS)
- if (event->isTouchEvent())
- updateLastTouch();
-#endif
-#endif
-
- if (event->isMouseEvent() && m_controlsShadowRoot) {
- MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
- IntPoint point(mouseEvent->absoluteLocation());
-
- bool defaultHandled = false;
- if (m_volumeSliderMuteButton && m_volumeSliderMuteButton->hitTest(point)) {
- m_volumeSliderMuteButton->defaultEventHandler(event);
- defaultHandled = event->defaultHandled();
- }
-
- bool showVolumeSlider = false;
- if (!defaultHandled && m_muteButton && m_muteButton->hitTest(point)) {
- m_muteButton->defaultEventHandler(event);
- if (event->type() != eventNames().mouseoutEvent)
- showVolumeSlider = true;
- }
-
- if (m_volumeSliderContainer && m_volumeSliderContainer->hitTest(point))
- showVolumeSlider = true;
-
- if (m_volumeSlider && m_volumeSlider->hitTest(point)) {
- m_volumeSlider->defaultEventHandler(event);
- showVolumeSlider = true;
- }
-
- updateVolumeSliderContainer(showVolumeSlider);
-
- if (m_playButton && m_playButton->hitTest(point))
- m_playButton->defaultEventHandler(event);
-
- if (m_seekBackButton && m_seekBackButton->hitTest(point))
- m_seekBackButton->defaultEventHandler(event);
-
- if (m_seekForwardButton && m_seekForwardButton->hitTest(point))
- m_seekForwardButton->defaultEventHandler(event);
-
- if (m_rewindButton && m_rewindButton->hitTest(point))
- m_rewindButton->defaultEventHandler(event);
-
- if (m_returnToRealtimeButton && m_returnToRealtimeButton->hitTest(point))
- m_returnToRealtimeButton->defaultEventHandler(event);
-
- if (m_toggleClosedCaptionsButton && m_toggleClosedCaptionsButton->hitTest(point))
- m_toggleClosedCaptionsButton->defaultEventHandler(event);
-
- if (m_timeline && m_timeline->hitTest(point))
- m_timeline->defaultEventHandler(event);
-
- if (m_fullscreenButton && m_fullscreenButton->hitTest(point))
- m_fullscreenButton->defaultEventHandler(event);
-
- if (event->type() == eventNames().mouseoverEvent) {
- m_mouseOver = true;
- updateControlVisibility();
- }
- if (event->type() == eventNames().mouseoutEvent) {
- // When the scrollbar thumb captures mouse events, we should treat the mouse as still being over our renderer if the new target is a descendant
- Node* mouseOverNode = mouseEvent->relatedTarget() ? mouseEvent->relatedTarget()->toNode() : 0;
- RenderObject* mouseOverRenderer = mouseOverNode ? mouseOverNode->renderer() : 0;
- m_mouseOver = mouseOverRenderer && mouseOverRenderer->isDescendantOf(this);
- updateControlVisibility();
- }
- }
-#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS)
- // We want to process touch events landing on the timeline so that the user
- // can drag the scrollbar thumb with their finger.
- else if (event->isTouchEvent() && m_controlsShadowRoot) {
- TouchEvent* touchEvent = static_cast<TouchEvent*>(event);
- if (touchEvent->touches() && touchEvent->touches()->item(0)) {
- IntPoint point;
- point.setX(touchEvent->touches()->item(0)->pageX());
- point.setY(touchEvent->touches()->item(0)->pageY());
- if (m_timeline && m_timeline->hitTest(point))
- m_timeline->defaultEventHandler(event);
- }
- }
-#endif
-}
-
-// We want the timeline slider to be at least 100 pixels wide.
-static const int minWidthToDisplayTimeDisplays = 16 + 16 + 45 + 100 + 45 + 16 + 1;
-
-bool RenderMedia::shouldShowTimeDisplayControls() const
-{
- if (!m_currentTimeDisplay && !m_timeRemainingDisplay)
- return false;
-
- int width = mediaElement()->renderBox()->width();
- return width >= minWidthToDisplayTimeDisplays * style()->effectiveZoom();
+ m_controls->update();
}
} // namespace WebCore
diff --git a/Source/WebCore/rendering/RenderMedia.h b/Source/WebCore/rendering/RenderMedia.h
index 817252d..7658ef6 100644
--- a/Source/WebCore/rendering/RenderMedia.h
+++ b/Source/WebCore/rendering/RenderMedia.h
@@ -29,27 +29,11 @@
#if ENABLE(VIDEO)
#include "RenderImage.h"
-#include "Timer.h"
namespace WebCore {
-
-class HTMLInputElement;
+
class HTMLMediaElement;
-class MediaControlMuteButtonElement;
-class MediaControlPlayButtonElement;
-class MediaControlSeekButtonElement;
-class MediaControlRewindButtonElement;
-class MediaControlReturnToRealtimeButtonElement;
-class MediaControlToggleClosedCaptionsButtonElement;
-class MediaControlTimelineElement;
-class MediaControlVolumeSliderElement;
-class MediaControlFullscreenButtonElement;
-class MediaControlTimeDisplayElement;
-class MediaControlStatusDisplayElement;
-class MediaControlTimelineContainerElement;
-class MediaControlVolumeSliderContainerElement;
-class MediaControlElement;
-class MediaPlayer;
+class MediaControls;
class RenderMedia : public RenderImage {
public:
@@ -61,19 +45,9 @@ public:
RenderObjectChildList* children() { return &m_children; }
HTMLMediaElement* mediaElement() const;
- MediaPlayer* player() const;
+ MediaControls* controls() const;
- bool shouldShowTimeDisplayControls() const;
-
- void updateFromElement();
- void updatePlayer();
- void updateControls();
- void updateTimeDisplay();
-
- void forwardEvent(Event*);
-#if PLATFORM(ANDROID)
- void updateLastTouch();
-#endif
+ virtual void updateFromElement();
protected:
virtual void layout();
@@ -88,70 +62,13 @@ private:
virtual bool isMedia() const { return true; }
virtual bool isImage() const { return false; }
- void createControlsShadowRoot();
- void destroyControlsShadowRoot();
- void createPanel();
- void createMuteButton();
- void createPlayButton();
- void createSeekBackButton();
- void createSeekForwardButton();
- void createRewindButton();
- void createReturnToRealtimeButton();
- void createToggleClosedCaptionsButton();
- void createStatusDisplay();
- void createTimelineContainer();
- void createTimeline();
- void createVolumeSliderContainer();
- void createVolumeSlider();
- void createVolumeSliderMuteButton();
- void createCurrentTimeDisplay();
- void createTimeRemainingDisplay();
- void createFullscreenButton();
-
- void timeUpdateTimerFired(Timer<RenderMedia>*);
-
- void updateControlVisibility();
- void changeOpacity(HTMLElement*, float opacity);
- void opacityAnimationTimerFired(Timer<RenderMedia>*);
-
- void updateVolumeSliderContainer(bool visible);
virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
virtual bool requiresForcedStyleRecalcPropagation() const { return true; }
- RefPtr<HTMLElement> m_controlsShadowRoot;
- RefPtr<MediaControlElement> m_panel;
- RefPtr<MediaControlMuteButtonElement> m_muteButton;
- RefPtr<MediaControlPlayButtonElement> m_playButton;
- RefPtr<MediaControlSeekButtonElement> m_seekBackButton;
- RefPtr<MediaControlSeekButtonElement> m_seekForwardButton;
- RefPtr<MediaControlRewindButtonElement> m_rewindButton;
- RefPtr<MediaControlReturnToRealtimeButtonElement> m_returnToRealtimeButton;
- RefPtr<MediaControlToggleClosedCaptionsButtonElement> m_toggleClosedCaptionsButton;
- RefPtr<MediaControlTimelineElement> m_timeline;
- RefPtr<MediaControlVolumeSliderElement> m_volumeSlider;
- RefPtr<MediaControlMuteButtonElement> m_volumeSliderMuteButton;
- RefPtr<MediaControlFullscreenButtonElement> m_fullscreenButton;
- RefPtr<MediaControlTimelineContainerElement> m_timelineContainer;
- RefPtr<MediaControlVolumeSliderContainerElement> m_volumeSliderContainer;
- RefPtr<MediaControlTimeDisplayElement> m_currentTimeDisplay;
- RefPtr<MediaControlTimeDisplayElement> m_timeRemainingDisplay;
- RefPtr<MediaControlStatusDisplayElement> m_statusDisplay;
+ OwnPtr<MediaControls> m_controls;
RenderObjectChildList m_children;
- Node* m_lastUnderNode;
- Node* m_nodeUnderMouse;
-
- Timer<RenderMedia> m_timeUpdateTimer;
- Timer<RenderMedia> m_opacityAnimationTimer;
- bool m_mouseOver;
- double m_opacityAnimationStartTime;
- double m_opacityAnimationDuration;
- float m_opacityAnimationFrom;
- float m_opacityAnimationTo;
-#if PLATFORM(ANDROID)
- double m_lastTouch;
-#endif
};
inline RenderMedia* toRenderMedia(RenderObject* object)
@@ -160,6 +77,11 @@ inline RenderMedia* toRenderMedia(RenderObject* object)
return static_cast<RenderMedia*>(object);
}
+inline MediaControls* RenderMedia::controls() const
+{
+ return m_controls.get();
+}
+
// This will catch anyone doing an unnecessary cast.
void toRenderMedia(const RenderMedia*);
diff --git a/Source/WebCore/rendering/RenderMenuList.cpp b/Source/WebCore/rendering/RenderMenuList.cpp
index e55b5ca..3e9d198 100644
--- a/Source/WebCore/rendering/RenderMenuList.cpp
+++ b/Source/WebCore/rendering/RenderMenuList.cpp
@@ -2,7 +2,7 @@
* This file is part of the select element renderer in WebCore.
*
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
*
* This library is free software; you can redistribute it and/or
@@ -55,7 +55,6 @@ RenderMenuList::RenderMenuList(Element* element)
, m_optionsChanged(true)
, m_optionsWidth(0)
, m_lastSelectedIndex(-1)
- , m_popup(0)
, m_popupIsVisible(false)
{
}
@@ -84,19 +83,26 @@ void RenderMenuList::createInnerBlock()
void RenderMenuList::adjustInnerStyle()
{
- m_innerBlock->style()->setBoxFlex(1.0f);
+ RenderStyle* innerStyle = m_innerBlock->style();
+ innerStyle->setBoxFlex(1);
- m_innerBlock->style()->setPaddingLeft(Length(theme()->popupInternalPaddingLeft(style()), Fixed));
- m_innerBlock->style()->setPaddingRight(Length(theme()->popupInternalPaddingRight(style()), Fixed));
- m_innerBlock->style()->setPaddingTop(Length(theme()->popupInternalPaddingTop(style()), Fixed));
- m_innerBlock->style()->setPaddingBottom(Length(theme()->popupInternalPaddingBottom(style()), Fixed));
+ innerStyle->setPaddingLeft(Length(theme()->popupInternalPaddingLeft(style()), Fixed));
+ innerStyle->setPaddingRight(Length(theme()->popupInternalPaddingRight(style()), Fixed));
+ innerStyle->setPaddingTop(Length(theme()->popupInternalPaddingTop(style()), Fixed));
+ innerStyle->setPaddingBottom(Length(theme()->popupInternalPaddingBottom(style()), Fixed));
if (document()->page()->chrome()->selectItemWritingDirectionIsNatural()) {
// Items in the popup will not respect the CSS text-align and direction properties,
// so we must adjust our own style to match.
- m_innerBlock->style()->setTextAlign(LEFT);
+ innerStyle->setTextAlign(LEFT);
TextDirection direction = (m_buttonText && m_buttonText->text()->defaultWritingDirection() == WTF::Unicode::RightToLeft) ? RTL : LTR;
- m_innerBlock->style()->setDirection(direction);
+ innerStyle->setDirection(direction);
+ } else if (m_optionStyle && document()->page()->chrome()->selectItemAlignmentFollowsMenuWritingDirection()) {
+ if ((m_optionStyle->direction() != innerStyle->direction() || m_optionStyle->unicodeBidi() != innerStyle->unicodeBidi()))
+ m_innerBlock->setNeedsLayoutAndPrefWidthsRecalc();
+ innerStyle->setTextAlign(style()->isLeftToRightDirection() ? LEFT : RIGHT);
+ innerStyle->setDirection(m_optionStyle->direction());
+ innerStyle->setUnicodeBidi(m_optionStyle->unicodeBidi());
}
}
@@ -184,8 +190,11 @@ void RenderMenuList::setTextFromOption(int optionIndex)
int i = select->optionToListIndex(optionIndex);
String text = "";
if (i >= 0 && i < size) {
- if (OptionElement* optionElement = toOptionElement(listItems[i]))
+ Element* element = listItems[i];
+ if (OptionElement* optionElement = toOptionElement(element)) {
text = optionElement->textIndentedToRespectGroupLabel();
+ m_optionStyle = element->renderStyle();
+ }
}
setText(text.stripWhiteSpace());
@@ -418,7 +427,7 @@ PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
Element* element = listItems[listIndex];
RenderStyle* style = element->renderStyle() ? element->renderStyle() : element->computedStyle();
- return style ? PopupMenuStyle(style->visitedDependentColor(CSSPropertyColor), itemBackgroundColor(listIndex), style->font(), style->visibility() == VISIBLE, style->display() == NONE, style->textIndent(), style->direction()) : menuStyle();
+ return style ? PopupMenuStyle(style->visitedDependentColor(CSSPropertyColor), itemBackgroundColor(listIndex), style->font(), style->visibility() == VISIBLE, style->display() == NONE, style->textIndent(), style->direction(), style->unicodeBidi() == Override) : menuStyle();
}
Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const
@@ -448,7 +457,7 @@ Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const
PopupMenuStyle RenderMenuList::menuStyle() const
{
RenderStyle* s = m_innerBlock ? m_innerBlock->style() : style();
- return PopupMenuStyle(s->visitedDependentColor(CSSPropertyColor), s->visitedDependentColor(CSSPropertyBackgroundColor), s->font(), s->visibility() == VISIBLE, s->display() == NONE, s->textIndent(), s->direction());
+ return PopupMenuStyle(s->visitedDependentColor(CSSPropertyColor), s->visitedDependentColor(CSSPropertyBackgroundColor), s->font(), s->visibility() == VISIBLE, s->display() == NONE, s->textIndent(), style()->direction(), style()->unicodeBidi() == Override);
}
HostWindow* RenderMenuList::hostWindow() const
@@ -479,7 +488,7 @@ int RenderMenuList::clientInsetRight() const
int RenderMenuList::clientPaddingLeft() const
{
- return paddingLeft();
+ return paddingLeft() + m_innerBlock->paddingLeft();
}
const int endOfLinePadding = 2;
@@ -495,7 +504,7 @@ int RenderMenuList::clientPaddingRight() const
// If the appearance isn't MenulistPart, then the select is styled (non-native), so
// we want to return the user specified padding.
- return paddingRight();
+ return paddingRight() + m_innerBlock->paddingRight();
}
int RenderMenuList::listSize() const
diff --git a/Source/WebCore/rendering/RenderMenuList.h b/Source/WebCore/rendering/RenderMenuList.h
index b84b799..cd6e561 100644
--- a/Source/WebCore/rendering/RenderMenuList.h
+++ b/Source/WebCore/rendering/RenderMenuList.h
@@ -2,7 +2,7 @@
* This file is part of the select element renderer in WebCore.
*
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -132,6 +132,8 @@ private:
int m_lastSelectedIndex;
+ RefPtr<RenderStyle> m_optionStyle;
+
RefPtr<PopupMenu> m_popup;
bool m_popupIsVisible;
};
diff --git a/Source/WebCore/rendering/RenderMeter.cpp b/Source/WebCore/rendering/RenderMeter.cpp
index 6439651..f3ada0b 100644
--- a/Source/WebCore/rendering/RenderMeter.cpp
+++ b/Source/WebCore/rendering/RenderMeter.cpp
@@ -107,7 +107,7 @@ RenderMeter::~RenderMeter()
PassRefPtr<MeterPartElement> RenderMeter::createPart(PseudoId pseudoId)
{
- RefPtr<MeterPartElement> element = MeterPartElement::createForPart(static_cast<HTMLElement*>(node()), pseudoId);
+ RefPtr<MeterPartElement> element = MeterPartElement::createForPart(toHTMLElement(node()), pseudoId);
if (element->renderer())
addChild(element->renderer());
return element;
diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp
index 9a1233e..ebab355 100644
--- a/Source/WebCore/rendering/RenderObject.cpp
+++ b/Source/WebCore/rendering/RenderObject.cpp
@@ -3,7 +3,7 @@
* (C) 1999 Antti Koivisto (koivisto@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
* (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2009 Google Inc. All rights reserved.
* Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
*
@@ -31,6 +31,7 @@
#include "CSSStyleSelector.h"
#include "Chrome.h"
#include "ContentData.h"
+#include "CursorList.h"
#include "DashArray.h"
#include "EditingBoundary.h"
#include "FloatQuad.h"
@@ -319,7 +320,6 @@ void RenderObject::addChild(RenderObject* newChild, RenderObject* beforeChild)
// Just add it...
children->insertChildNode(this, newChild, beforeChild);
}
- RenderCounter::rendererSubtreeAttached(newChild);
if (newChild->isText() && newChild->style()->textTransform() == CAPITALIZE) {
RefPtr<StringImpl> textToTransform = toRenderText(newChild)->originalText();
if (textToTransform)
@@ -1381,11 +1381,11 @@ bool RenderObject::repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintConta
else if (deltaLeft < 0)
repaintUsingContainer(repaintContainer, IntRect(newBounds.x(), newBounds.y(), -deltaLeft, newBounds.height()));
- int deltaRight = newBounds.right() - oldBounds.right();
+ int deltaRight = newBounds.maxX() - oldBounds.maxX();
if (deltaRight > 0)
- repaintUsingContainer(repaintContainer, IntRect(oldBounds.right(), newBounds.y(), deltaRight, newBounds.height()));
+ repaintUsingContainer(repaintContainer, IntRect(oldBounds.maxX(), newBounds.y(), deltaRight, newBounds.height()));
else if (deltaRight < 0)
- repaintUsingContainer(repaintContainer, IntRect(newBounds.right(), oldBounds.y(), -deltaRight, oldBounds.height()));
+ repaintUsingContainer(repaintContainer, IntRect(newBounds.maxX(), oldBounds.y(), -deltaRight, oldBounds.height()));
int deltaTop = newBounds.y() - oldBounds.y();
if (deltaTop > 0)
@@ -1393,11 +1393,11 @@ bool RenderObject::repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintConta
else if (deltaTop < 0)
repaintUsingContainer(repaintContainer, IntRect(newBounds.x(), newBounds.y(), newBounds.width(), -deltaTop));
- int deltaBottom = newBounds.bottom() - oldBounds.bottom();
+ int deltaBottom = newBounds.maxY() - oldBounds.maxY();
if (deltaBottom > 0)
- repaintUsingContainer(repaintContainer, IntRect(newBounds.x(), oldBounds.bottom(), newBounds.width(), deltaBottom));
+ repaintUsingContainer(repaintContainer, IntRect(newBounds.x(), oldBounds.maxY(), newBounds.width(), deltaBottom));
else if (deltaBottom < 0)
- repaintUsingContainer(repaintContainer, IntRect(oldBounds.x(), newBounds.bottom(), oldBounds.width(), -deltaBottom));
+ repaintUsingContainer(repaintContainer, IntRect(oldBounds.x(), newBounds.maxY(), oldBounds.width(), -deltaBottom));
if (newOutlineBox == oldOutlineBox)
return false;
@@ -1419,7 +1419,7 @@ bool RenderObject::repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintConta
newOutlineBox.y(),
width + borderWidth,
max(newOutlineBox.height(), oldOutlineBox.height()));
- int right = min(newBounds.right(), oldBounds.right());
+ int right = min(newBounds.maxX(), oldBounds.maxX());
if (rightRect.x() < right) {
rightRect.setWidth(min(rightRect.width(), right - rightRect.x()));
repaintUsingContainer(repaintContainer, rightRect);
@@ -1435,10 +1435,10 @@ bool RenderObject::repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintConta
int boxHeight = isBox() ? toRenderBox(this)->height() : 0;
int borderHeight = max(-outlineStyle->outlineOffset(), max(borderBottom, max(style()->borderBottomLeftRadius().height().calcValue(boxHeight), style()->borderBottomRightRadius().height().calcValue(boxHeight)))) + max(ow, shadowBottom);
IntRect bottomRect(newOutlineBox.x(),
- min(newOutlineBox.bottom(), oldOutlineBox.bottom()) - borderHeight,
+ min(newOutlineBox.maxY(), oldOutlineBox.maxY()) - borderHeight,
max(newOutlineBox.width(), oldOutlineBox.width()),
height + borderHeight);
- int bottom = min(newBounds.bottom(), oldBounds.bottom());
+ int bottom = min(newBounds.maxY(), oldBounds.maxY());
if (bottomRect.y() < bottom) {
bottomRect.setHeight(min(bottomRect.height(), bottom - bottomRect.y()));
repaintUsingContainer(repaintContainer, bottomRect);
@@ -1863,6 +1863,17 @@ void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle* newS
}
}
+static bool areNonIdenticalCursorListsEqual(const RenderStyle* a, const RenderStyle* b)
+{
+ ASSERT(a->cursors() != b->cursors());
+ return a->cursors() && b->cursors() && *a->cursors() == *b->cursors();
+}
+
+static inline bool areCursorsEqual(const RenderStyle* a, const RenderStyle* b)
+{
+ return a->cursor() == b->cursor() && (a->cursors() == b->cursors() || areNonIdenticalCursorListsEqual(a, b));
+}
+
void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
if (s_affectsParentBlock)
@@ -1888,6 +1899,11 @@ void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
// Don't check for repaint here; we need to wait until the layer has been
// updated by subclasses before we know if we have to repaint (in setStyle()).
+
+ if (oldStyle && !areCursorsEqual(oldStyle, style())) {
+ if (Frame* frame = this->frame())
+ frame->eventHandler()->dispatchFakeMouseMoveEventSoon();
+ }
}
void RenderObject::updateFillImages(const FillLayer* oldLayers, const FillLayer* newLayers)
@@ -1950,6 +1966,10 @@ void RenderObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b
if (!o)
return;
+ IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint());
+ if (o->isBox() && o->style()->isFlippedBlocksWritingMode())
+ transformState.move(toRenderBox(o)->flipForWritingModeIncludingColumns(roundedIntPoint(transformState.mappedPoint())) - centerPoint);
+
IntSize columnOffset;
o->adjustForColumns(columnOffset, roundedIntPoint(transformState.mappedPoint()));
if (!columnOffset.isZero())
@@ -1989,7 +2009,7 @@ void RenderObject::getTransformFromContainer(const RenderObject* containerObject
transform.translate(offsetInContainer.width(), offsetInContainer.height());
RenderLayer* layer;
if (hasLayer() && (layer = toRenderBoxModelObject(this)->layer()) && layer->transform())
- transform.multLeft(layer->currentTransform());
+ transform.multiply(layer->currentTransform());
#if ENABLE(3D_RENDERING)
if (containerObject && containerObject->hasLayer() && containerObject->style()->hasPerspective()) {
@@ -2001,7 +2021,7 @@ void RenderObject::getTransformFromContainer(const RenderObject* containerObject
perspectiveMatrix.applyPerspective(containerObject->style()->perspective());
transform.translateRight3d(-perspectiveOrigin.x(), -perspectiveOrigin.y(), 0);
- transform.multiply(perspectiveMatrix);
+ transform = perspectiveMatrix * transform;
transform.translateRight3d(perspectiveOrigin.x(), perspectiveOrigin.y(), 0);
}
#else
@@ -2157,9 +2177,6 @@ void RenderObject::destroy()
if (frame() && frame()->eventHandler()->autoscrollRenderer() == this)
frame()->eventHandler()->stopAutoscrollTimer(true);
- if (m_hasCounterNodeMap)
- RenderCounter::destroyCounterNodes(this);
-
if (AXObjectCache::accessibilityEnabled()) {
document()->axObjectCache()->childrenChanged(this->parent());
document()->axObjectCache()->remove(this);
@@ -2172,6 +2189,14 @@ void RenderObject::destroy()
remove();
+ // If this renderer had a parent, remove should have destroyed any counters
+ // attached to this renderer and marked the affected other counters for
+ // reevaluation. This apparently redundant check is here for the case when
+ // this renderer had no parent at the time remove() was called.
+
+ if (m_hasCounterNodeMap)
+ RenderCounter::destroyCounterNodes(this);
+
// FIXME: Would like to do this in RenderBoxModelObject, but the timing is so complicated that this can't easily
// be moved into RenderBoxModelObject::destroy.
if (hasLayer()) {
diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h
index f2e7f13..43e6bea 100644
--- a/Source/WebCore/rendering/RenderObject.h
+++ b/Source/WebCore/rendering/RenderObject.h
@@ -143,6 +143,18 @@ public:
return children->lastChild();
return 0;
}
+ RenderObject* beforePseudoElementRenderer() const
+ {
+ if (const RenderObjectChildList* children = virtualChildren())
+ return children->beforePseudoElementRenderer(this);
+ return 0;
+ }
+ RenderObject* afterPseudoElementRenderer() const
+ {
+ if (const RenderObjectChildList* children = virtualChildren())
+ return children->afterPseudoElementRenderer(this);
+ return 0;
+ }
virtual RenderObjectChildList* virtualChildren() { return 0; }
virtual const RenderObjectChildList* virtualChildren() const { return 0; }
@@ -332,6 +344,7 @@ public:
virtual bool isSVGImage() const { return false; }
virtual bool isSVGForeignObject() const { return false; }
virtual bool isSVGResourceContainer() const { return false; }
+ virtual bool isSVGResourceFilter() const { return false; }
virtual bool isSVGResourceFilterPrimitive() const { return false; }
virtual bool isSVGShadowTreeRootContainer() const { return false; }
@@ -444,6 +457,11 @@ public:
bool isRooted(RenderView** = 0);
Node* node() const { return m_isAnonymous ? 0 : m_node; }
+
+ // Returns the styled node that caused the generation of this renderer.
+ // This is the same as node() except for renderers of :before and :after
+ // pseudo elements for which their parent node is returned.
+ Node* generatingNode() const { return m_node == document() ? 0 : m_node; }
void setNode(Node* node) { m_node = node; }
Document* document() const { return m_node->document(); }
diff --git a/Source/WebCore/rendering/RenderObjectChildList.cpp b/Source/WebCore/rendering/RenderObjectChildList.cpp
index fa4f902..6a773dc 100644
--- a/Source/WebCore/rendering/RenderObjectChildList.cpp
+++ b/Source/WebCore/rendering/RenderObjectChildList.cpp
@@ -128,6 +128,9 @@ RenderObject* RenderObjectChildList::removeChildNode(RenderObject* owner, Render
oldChild->setNextSibling(0);
oldChild->setParent(0);
+ if (oldChild->m_hasCounterNodeMap)
+ RenderCounter::destroyCounterNodes(oldChild);
+
if (AXObjectCache::accessibilityEnabled())
owner->document()->axObjectCache()->childrenChanged(owner);
@@ -175,6 +178,7 @@ void RenderObjectChildList::appendChildNode(RenderObject* owner, RenderObject* n
owner->dirtyLinesFromChangedChild(newChild);
}
+ RenderCounter::rendererSubtreeAttached(newChild);
newChild->setNeedsLayoutAndPrefWidthsRecalc(); // Goes up the containing block hierarchy.
if (!owner->normalChildNeedsLayout())
owner->setChildNeedsLayout(true); // We may supply the static position for an absolute positioned child.
@@ -234,6 +238,7 @@ void RenderObjectChildList::insertChildNode(RenderObject* owner, RenderObject* c
owner->dirtyLinesFromChangedChild(child);
}
+ RenderCounter::rendererSubtreeAttached(child);
child->setNeedsLayoutAndPrefWidthsRecalc();
if (!owner->normalChildNeedsLayout())
owner->setChildNeedsLayout(true); // We may supply the static position for an absolute positioned child.
@@ -242,59 +247,6 @@ void RenderObjectChildList::insertChildNode(RenderObject* owner, RenderObject* c
owner->document()->axObjectCache()->childrenChanged(owner);
}
-static RenderObject* beforeAfterContainer(RenderObject* container, PseudoId type)
-{
- if (type == BEFORE) {
- // An anonymous (generated) inline run-in that has PseudoId BEFORE must come from a grandparent.
- // Therefore we should skip these generated run-ins when checking our immediate children.
- // If we don't find our :before child immediately, then we should check if we own a
- // generated inline run-in in the next level of children.
- RenderObject* first = container;
- do {
- // Skip list markers and generated run-ins
- first = first->firstChild();
- while (first && (first->isListMarker() || (first->isRenderInline() && first->isRunIn() && first->isAnonymous())))
- first = first->nextSibling();
- } while (first && first->isAnonymous() && first->style()->styleType() == NOPSEUDO);
-
- if (!first)
- return 0;
-
- if (first->style()->styleType() == type)
- return first;
-
- // Check for a possible generated run-in, using run-in positioning rules.
- // Skip inlines and floating / positioned blocks, and place as the first child.
- first = container->firstChild();
- if (!first->isRenderBlock())
- return 0;
- while (first && first->isFloatingOrPositioned())
- first = first->nextSibling();
- if (first) {
- first = first->firstChild();
- // We still need to skip any list markers that could exist before the run-in.
- while (first && first->isListMarker())
- first = first->nextSibling();
- if (first && first->style()->styleType() == type && first->isRenderInline() && first->isRunIn() && first->isAnonymous())
- return first;
- }
- return 0;
- }
-
- if (type == AFTER) {
- RenderObject* last = container;
- do {
- last = last->lastChild();
- } while (last && last->isAnonymous() && last->style()->styleType() == NOPSEUDO && !last->isListMarker());
- if (last && last->style()->styleType() != type)
- return 0;
- return last;
- }
-
- ASSERT_NOT_REACHED();
- return 0;
-}
-
static RenderObject* findBeforeAfterParent(RenderObject* object)
{
// Only table parts need to search for the :before or :after parent
@@ -325,14 +277,63 @@ static void invalidateCountersInContainer(RenderObject* container, const AtomicS
}
}
-void RenderObjectChildList::invalidateCounters(RenderObject* owner, const AtomicString& identifier)
+void RenderObjectChildList::invalidateCounters(const RenderObject* owner, const AtomicString& identifier)
{
ASSERT(!owner->documentBeingDestroyed());
- invalidateCountersInContainer(beforeAfterContainer(owner, BEFORE), identifier);
- invalidateCountersInContainer(beforeAfterContainer(owner, AFTER), identifier);
+ invalidateCountersInContainer(beforePseudoElementRenderer(owner), identifier);
+ invalidateCountersInContainer(afterPseudoElementRenderer(owner), identifier);
}
-void RenderObjectChildList::updateBeforeAfterContent(RenderObject* owner, PseudoId type, RenderObject* styledObject)
+RenderObject* RenderObjectChildList::beforePseudoElementRenderer(const RenderObject* owner) const
+{
+ // An anonymous (generated) inline run-in that has PseudoId BEFORE must come from a grandparent.
+ // Therefore we should skip these generated run-ins when checking our immediate children.
+ // If we don't find our :before child immediately, then we should check if we own a
+ // generated inline run-in in the next level of children.
+ RenderObject* first = const_cast<RenderObject*>(owner);
+ do {
+ // Skip list markers and generated run-ins
+ first = first->firstChild();
+ while (first && (first->isListMarker() || (first->isRenderInline() && first->isRunIn() && first->isAnonymous())))
+ first = first->nextSibling();
+ } while (first && first->isAnonymous() && first->style()->styleType() == NOPSEUDO);
+
+ if (!first)
+ return 0;
+
+ if (first->style()->styleType() == BEFORE)
+ return first;
+
+ // Check for a possible generated run-in, using run-in positioning rules.
+ // Skip inlines and floating / positioned blocks, and place as the first child.
+ first = owner->firstChild();
+ if (!first->isRenderBlock())
+ return 0;
+ while (first && first->isFloatingOrPositioned())
+ first = first->nextSibling();
+ if (first) {
+ first = first->firstChild();
+ // We still need to skip any list markers that could exist before the run-in.
+ while (first && first->isListMarker())
+ first = first->nextSibling();
+ if (first && first->style()->styleType() == BEFORE && first->isRenderInline() && first->isRunIn() && first->isAnonymous())
+ return first;
+ }
+ return 0;
+}
+
+RenderObject* RenderObjectChildList::afterPseudoElementRenderer(const RenderObject* owner) const
+{
+ RenderObject* last = const_cast<RenderObject*>(owner);
+ do {
+ last = last->lastChild();
+ } while (last && last->isAnonymous() && last->style()->styleType() == NOPSEUDO && !last->isListMarker());
+ if (last && last->style()->styleType() != AFTER)
+ return 0;
+ return last;
+}
+
+void RenderObjectChildList::updateBeforeAfterContent(RenderObject* owner, PseudoId type, const RenderObject* styledObject)
{
// Double check that the document did in fact use generated content rules. Otherwise we should not have been called.
ASSERT(owner->document()->usesBeforeAfterRules());
@@ -345,7 +346,18 @@ void RenderObjectChildList::updateBeforeAfterContent(RenderObject* owner, Pseudo
styledObject = owner;
RenderStyle* pseudoElementStyle = styledObject->getCachedPseudoStyle(type);
- RenderObject* child = beforeAfterContainer(owner, type);
+ RenderObject* child;
+ switch (type) {
+ case BEFORE:
+ child = beforePseudoElementRenderer(owner);
+ break;
+ case AFTER:
+ child = afterPseudoElementRenderer(owner);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ return;
+ }
// Whether or not we currently have generated content attached.
bool oldContentPresent = child;
@@ -459,6 +471,8 @@ void RenderObjectChildList::updateBeforeAfterContent(RenderObject* owner, Pseudo
// Make a generated box that might be any display type now that we are able to drill down into children
// to find the original content properly.
generatedContentContainer = RenderObject::createObject(owner->document(), pseudoElementStyle);
+ ASSERT(styledObject->node()); // The styled object cannot be anonymous or else it could not have ':before' or ':after' pseudo elements.
+ generatedContentContainer->setNode(styledObject->node()); // This allows access to the generatingNode.
generatedContentContainer->setStyle(pseudoElementStyle);
owner->addChild(generatedContentContainer, insertBefore);
}
diff --git a/Source/WebCore/rendering/RenderObjectChildList.h b/Source/WebCore/rendering/RenderObjectChildList.h
index 8b80f37..087adfb 100644
--- a/Source/WebCore/rendering/RenderObjectChildList.h
+++ b/Source/WebCore/rendering/RenderObjectChildList.h
@@ -55,8 +55,10 @@ public:
void appendChildNode(RenderObject* owner, RenderObject*, bool fullAppend = true);
void insertChildNode(RenderObject* owner, RenderObject* child, RenderObject* before, bool fullInsert = true);
- void updateBeforeAfterContent(RenderObject* owner, PseudoId type, RenderObject* styledObject = 0);
- void invalidateCounters(RenderObject* owner, const AtomicString& identifier);
+ void updateBeforeAfterContent(RenderObject* owner, PseudoId type, const RenderObject* styledObject = 0);
+ RenderObject* beforePseudoElementRenderer(const RenderObject* owner) const;
+ RenderObject* afterPseudoElementRenderer(const RenderObject* owner) const;
+ void invalidateCounters(const RenderObject* owner, const AtomicString& identifier);
private:
RenderObject* m_firstChild;
diff --git a/Source/WebCore/rendering/RenderOverflow.h b/Source/WebCore/rendering/RenderOverflow.h
index 33e8cff..48fe2bb 100644
--- a/Source/WebCore/rendering/RenderOverflow.h
+++ b/Source/WebCore/rendering/RenderOverflow.h
@@ -41,38 +41,38 @@ class RenderOverflow {
WTF_MAKE_NONCOPYABLE(RenderOverflow); WTF_MAKE_FAST_ALLOCATED;
public:
RenderOverflow(const IntRect& layoutRect, const IntRect& visualRect)
- : m_topLayoutOverflow(layoutRect.y())
- , m_bottomLayoutOverflow(layoutRect.bottom())
- , m_leftLayoutOverflow(layoutRect.x())
- , m_rightLayoutOverflow(layoutRect.right())
- , m_topVisualOverflow(visualRect.y())
- , m_bottomVisualOverflow(visualRect.bottom())
- , m_leftVisualOverflow(visualRect.x())
- , m_rightVisualOverflow(visualRect.right())
+ : m_minYLayoutOverflow(layoutRect.y())
+ , m_maxYLayoutOverflow(layoutRect.maxY())
+ , m_minXLayoutOverflow(layoutRect.x())
+ , m_maxXLayoutOverflow(layoutRect.maxX())
+ , m_minYVisualOverflow(visualRect.y())
+ , m_maxYVisualOverflow(visualRect.maxY())
+ , m_minXVisualOverflow(visualRect.x())
+ , m_maxXVisualOverflow(visualRect.maxX())
{
}
- int topLayoutOverflow() const { return m_topLayoutOverflow; }
- int bottomLayoutOverflow() const { return m_bottomLayoutOverflow; }
- int leftLayoutOverflow() const { return m_leftLayoutOverflow; }
- int rightLayoutOverflow() const { return m_rightLayoutOverflow; }
+ int minYLayoutOverflow() const { return m_minYLayoutOverflow; }
+ int maxYLayoutOverflow() const { return m_maxYLayoutOverflow; }
+ int minXLayoutOverflow() const { return m_minXLayoutOverflow; }
+ int maxXLayoutOverflow() const { return m_maxXLayoutOverflow; }
IntRect layoutOverflowRect() const;
- int topVisualOverflow() const { return m_topVisualOverflow; }
- int bottomVisualOverflow() const { return m_bottomVisualOverflow; }
- int leftVisualOverflow() const { return m_leftVisualOverflow; }
- int rightVisualOverflow() const { return m_rightVisualOverflow; }
+ int minYVisualOverflow() const { return m_minYVisualOverflow; }
+ int maxYVisualOverflow() const { return m_maxYVisualOverflow; }
+ int minXVisualOverflow() const { return m_minXVisualOverflow; }
+ int maxXVisualOverflow() const { return m_maxXVisualOverflow; }
IntRect visualOverflowRect() const;
- void setTopLayoutOverflow(int overflow) { m_topLayoutOverflow = overflow; }
- void setBottomLayoutOverflow(int overflow) { m_bottomLayoutOverflow = overflow; }
- void setLeftLayoutOverflow(int overflow) { m_leftLayoutOverflow = overflow; }
- void setRightLayoutOverflow(int overflow) { m_rightLayoutOverflow = overflow; }
+ void setMinYLayoutOverflow(int overflow) { m_minYLayoutOverflow = overflow; }
+ void setMaxYLayoutOverflow(int overflow) { m_maxYLayoutOverflow = overflow; }
+ void setMinXLayoutOverflow(int overflow) { m_minXLayoutOverflow = overflow; }
+ void setMaxXLayoutOverflow(int overflow) { m_maxXLayoutOverflow = overflow; }
- void setTopVisualOverflow(int overflow) { m_topVisualOverflow = overflow; }
- void setBottomVisualOverflow(int overflow) { m_bottomVisualOverflow = overflow; }
- void setLeftVisualOverflow(int overflow) { m_leftVisualOverflow = overflow; }
- void setRightVisualOverflow(int overflow) { m_rightVisualOverflow = overflow; }
+ void setMinYVisualOverflow(int overflow) { m_minYVisualOverflow = overflow; }
+ void setMaxYVisualOverflow(int overflow) { m_maxYVisualOverflow = overflow; }
+ void setMinXVisualOverflow(int overflow) { m_minXVisualOverflow = overflow; }
+ void setMaxXVisualOverflow(int overflow) { m_maxXVisualOverflow = overflow; }
void move(int dx, int dy);
@@ -85,78 +85,78 @@ public:
void resetLayoutOverflow(const IntRect& defaultRect);
private:
- int m_topLayoutOverflow;
- int m_bottomLayoutOverflow;
- int m_leftLayoutOverflow;
- int m_rightLayoutOverflow;
-
- int m_topVisualOverflow;
- int m_bottomVisualOverflow;
- int m_leftVisualOverflow;
- int m_rightVisualOverflow;
+ int m_minYLayoutOverflow;
+ int m_maxYLayoutOverflow;
+ int m_minXLayoutOverflow;
+ int m_maxXLayoutOverflow;
+
+ int m_minYVisualOverflow;
+ int m_maxYVisualOverflow;
+ int m_minXVisualOverflow;
+ int m_maxXVisualOverflow;
};
inline IntRect RenderOverflow::layoutOverflowRect() const
{
- return IntRect(m_leftLayoutOverflow, m_topLayoutOverflow, m_rightLayoutOverflow - m_leftLayoutOverflow, m_bottomLayoutOverflow - m_topLayoutOverflow);
+ return IntRect(m_minXLayoutOverflow, m_minYLayoutOverflow, m_maxXLayoutOverflow - m_minXLayoutOverflow, m_maxYLayoutOverflow - m_minYLayoutOverflow);
}
inline IntRect RenderOverflow::visualOverflowRect() const
{
- return IntRect(m_leftVisualOverflow, m_topVisualOverflow, m_rightVisualOverflow - m_leftVisualOverflow, m_bottomVisualOverflow - m_topVisualOverflow);
+ return IntRect(m_minXVisualOverflow, m_minYVisualOverflow, m_maxXVisualOverflow - m_minXVisualOverflow, m_maxYVisualOverflow - m_minYVisualOverflow);
}
inline void RenderOverflow::move(int dx, int dy)
{
- m_topLayoutOverflow += dy;
- m_bottomLayoutOverflow += dy;
- m_leftLayoutOverflow += dx;
- m_rightLayoutOverflow += dx;
+ m_minYLayoutOverflow += dy;
+ m_maxYLayoutOverflow += dy;
+ m_minXLayoutOverflow += dx;
+ m_maxXLayoutOverflow += dx;
- m_topVisualOverflow += dy;
- m_bottomVisualOverflow += dy;
- m_leftVisualOverflow += dx;
- m_rightVisualOverflow += dx;
+ m_minYVisualOverflow += dy;
+ m_maxYVisualOverflow += dy;
+ m_minXVisualOverflow += dx;
+ m_maxXVisualOverflow += dx;
}
inline void RenderOverflow::addLayoutOverflow(const IntRect& rect)
{
- m_topLayoutOverflow = std::min(rect.y(), m_topLayoutOverflow);
- m_bottomLayoutOverflow = std::max(rect.bottom(), m_bottomLayoutOverflow);
- m_leftLayoutOverflow = std::min(rect.x(), m_leftLayoutOverflow);
- m_rightLayoutOverflow = std::max(rect.right(), m_rightLayoutOverflow);
+ m_minYLayoutOverflow = std::min(rect.y(), m_minYLayoutOverflow);
+ m_maxYLayoutOverflow = std::max(rect.maxY(), m_maxYLayoutOverflow);
+ m_minXLayoutOverflow = std::min(rect.x(), m_minXLayoutOverflow);
+ m_maxXLayoutOverflow = std::max(rect.maxX(), m_maxXLayoutOverflow);
}
inline void RenderOverflow::addVisualOverflow(const IntRect& rect)
{
- m_topVisualOverflow = std::min(rect.y(), m_topVisualOverflow);
- m_bottomVisualOverflow = std::max(rect.bottom(), m_bottomVisualOverflow);
- m_leftVisualOverflow = std::min(rect.x(), m_leftVisualOverflow);
- m_rightVisualOverflow = std::max(rect.right(), m_rightVisualOverflow);
+ m_minYVisualOverflow = std::min(rect.y(), m_minYVisualOverflow);
+ m_maxYVisualOverflow = std::max(rect.maxY(), m_maxYVisualOverflow);
+ m_minXVisualOverflow = std::min(rect.x(), m_minXVisualOverflow);
+ m_maxXVisualOverflow = std::max(rect.maxX(), m_maxXVisualOverflow);
}
inline void RenderOverflow::setLayoutOverflow(const IntRect& rect)
{
- m_topLayoutOverflow = rect.y();
- m_bottomLayoutOverflow = rect.bottom();
- m_leftLayoutOverflow = rect.x();
- m_rightLayoutOverflow = rect.right();
+ m_minYLayoutOverflow = rect.y();
+ m_maxYLayoutOverflow = rect.maxY();
+ m_minXLayoutOverflow = rect.x();
+ m_maxXLayoutOverflow = rect.maxX();
}
inline void RenderOverflow::setVisualOverflow(const IntRect& rect)
{
- m_topVisualOverflow = rect.y();
- m_bottomVisualOverflow = rect.bottom();
- m_leftVisualOverflow = rect.x();
- m_rightVisualOverflow = rect.right();
+ m_minYVisualOverflow = rect.y();
+ m_maxYVisualOverflow = rect.maxY();
+ m_minXVisualOverflow = rect.x();
+ m_maxXVisualOverflow = rect.maxX();
}
inline void RenderOverflow::resetLayoutOverflow(const IntRect& rect)
{
- m_topLayoutOverflow = rect.y();
- m_bottomLayoutOverflow = rect.bottom();
- m_leftLayoutOverflow = rect.x();
- m_rightLayoutOverflow = rect.right();
+ m_minYLayoutOverflow = rect.y();
+ m_maxYLayoutOverflow = rect.maxY();
+ m_minXLayoutOverflow = rect.x();
+ m_maxXLayoutOverflow = rect.maxX();
}
} // namespace WebCore
diff --git a/Source/WebCore/rendering/RenderProgress.cpp b/Source/WebCore/rendering/RenderProgress.cpp
index 4194e2b..2a8e6f3 100644
--- a/Source/WebCore/rendering/RenderProgress.cpp
+++ b/Source/WebCore/rendering/RenderProgress.cpp
@@ -36,6 +36,16 @@ using namespace std;
namespace WebCore {
+IntRect RenderProgressBarValuePart::preferredFrameRect()
+{
+ return toRenderProgress(parent())->valuePartRect();
+}
+
+bool RenderProgressBarValuePart::shouldBeHidden()
+{
+ return !toRenderProgress(parent())->shouldHaveParts();
+}
+
RenderProgress::RenderProgress(HTMLProgressElement* element)
: RenderIndicator(element)
, m_position(-1)
@@ -49,23 +59,10 @@ RenderProgress::RenderProgress(HTMLProgressElement* element)
RenderProgress::~RenderProgress()
{
- if (m_valuePart)
- m_valuePart->detach();
}
void RenderProgress::updateFromElement()
{
- if (!m_valuePart) {
- m_valuePart = ShadowBlockElement::createForPart(static_cast<HTMLElement*>(node()), PROGRESS_BAR_VALUE);
- if (m_valuePart->renderer())
- addChild(m_valuePart->renderer());
- }
-
- if (shouldHaveParts())
- style()->setAppearance(NoControlPart);
- else if (m_valuePart->renderer())
- m_valuePart->renderer()->style()->setVisibility(HIDDEN);
-
HTMLProgressElement* element = progressElement();
if (m_position == element->position())
return;
@@ -102,7 +99,8 @@ void RenderProgress::paint(PaintInfo& paintInfo, int tx, int ty)
void RenderProgress::layoutParts()
{
- m_valuePart->layoutAsPart(valuePartRect());
+ for (RenderObject* child = firstChild(); child; child = child->nextSibling())
+ child->layout();
updateAnimationState();
}
@@ -110,8 +108,6 @@ bool RenderProgress::shouldHaveParts() const
{
if (!style()->hasAppearance())
return true;
- if (ShadowBlockElement::partShouldHaveStyle(this, PROGRESS_BAR_VALUE))
- return true;
return false;
}
diff --git a/Source/WebCore/rendering/RenderProgress.h b/Source/WebCore/rendering/RenderProgress.h
index 9ed5741..78cf359 100644
--- a/Source/WebCore/rendering/RenderProgress.h
+++ b/Source/WebCore/rendering/RenderProgress.h
@@ -28,7 +28,14 @@
namespace WebCore {
class HTMLProgressElement;
-class ShadowBlockElement;
+
+class RenderProgressBarValuePart : public RenderIndicatorPart {
+public:
+ RenderProgressBarValuePart(Node* node) : RenderIndicatorPart(node) {}
+private:
+ virtual IntRect preferredFrameRect();
+ virtual bool shouldBeHidden();
+};
class RenderProgress : public RenderIndicator {
public:
@@ -40,6 +47,8 @@ public:
double animationStartTime() const { return m_animationStartTime; }
bool isDeterminate() const;
+ IntRect valuePartRect() const;
+ bool shouldHaveParts() const;
HTMLProgressElement* progressElement() const;
@@ -48,12 +57,8 @@ private:
virtual bool isProgress() const { return true; }
virtual void updateFromElement();
virtual void paint(PaintInfo&, int tx, int ty);
-
virtual void layoutParts();
- IntRect valuePartRect() const;
- bool shouldHaveParts() const;
-
void animationTimerFired(Timer<RenderProgress>*);
void updateAnimationState();
@@ -63,7 +68,6 @@ private:
double m_animationDuration;
bool m_animating;
Timer<RenderProgress> m_animationTimer;
- RefPtr<ShadowBlockElement> m_valuePart;
};
inline RenderProgress* toRenderProgress(RenderObject* object)
diff --git a/Source/WebCore/rendering/RenderReplaced.cpp b/Source/WebCore/rendering/RenderReplaced.cpp
index 0d72f95..c27d336 100644
--- a/Source/WebCore/rendering/RenderReplaced.cpp
+++ b/Source/WebCore/rendering/RenderReplaced.cpp
@@ -172,8 +172,8 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
int currentTY = ty + y();
// Early exit if the element touches the edges.
- int top = currentTY + topVisualOverflow();
- int bottom = currentTY + bottomVisualOverflow();
+ int top = currentTY + minYVisualOverflow();
+ int bottom = currentTY + maxYVisualOverflow();
if (isSelected() && m_inlineBoxWrapper) {
int selTop = ty + m_inlineBoxWrapper->root()->selectionTop();
int selBottom = ty + selTop + m_inlineBoxWrapper->root()->selectionHeight();
@@ -182,9 +182,9 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
}
int os = 2 * maximalOutlineSize(paintInfo.phase);
- if (currentTX + leftVisualOverflow() >= paintInfo.rect.right() + os || currentTX + rightVisualOverflow() <= paintInfo.rect.x() - os)
+ if (currentTX + minXVisualOverflow() >= paintInfo.rect.maxX() + os || currentTX + maxXVisualOverflow() <= paintInfo.rect.x() - os)
return false;
- if (top >= paintInfo.rect.bottom() + os || bottom <= paintInfo.rect.y() - os)
+ if (top >= paintInfo.rect.maxY() + os || bottom <= paintInfo.rect.y() - os)
return false;
return true;
diff --git a/Source/WebCore/rendering/RenderRubyRun.cpp b/Source/WebCore/rendering/RenderRubyRun.cpp
index c12e543..f2e30eb 100644
--- a/Source/WebCore/rendering/RenderRubyRun.cpp
+++ b/Source/WebCore/rendering/RenderRubyRun.cpp
@@ -42,7 +42,6 @@ namespace WebCore {
RenderRubyRun::RenderRubyRun(Node* node)
: RenderBlock(node)
- , m_beingDestroyed(false)
{
setReplaced(true);
setInline(true);
@@ -52,13 +51,6 @@ RenderRubyRun::~RenderRubyRun()
{
}
-void RenderRubyRun::destroy()
-{
- // Mark if the run is being destroyed to avoid trouble in removeChild().
- m_beingDestroyed = true;
- RenderBlock::destroy();
-}
-
bool RenderRubyRun::hasRubyText() const
{
// The only place where a ruby text can be is in the first position
@@ -165,7 +157,7 @@ void RenderRubyRun::removeChild(RenderObject* child)
{
// If the child is a ruby text, then merge the ruby base with the base of
// the right sibling run, if possible.
- if (!m_beingDestroyed && !documentBeingDestroyed() && child->isRubyText()) {
+ if (!beingDestroyed() && !documentBeingDestroyed() && child->isRubyText()) {
RenderRubyBase* base = rubyBase();
RenderObject* rightNeighbour = nextSibling();
if (base && rightNeighbour && rightNeighbour->isRubyRun()) {
@@ -184,7 +176,7 @@ void RenderRubyRun::removeChild(RenderObject* child)
RenderBlock::removeChild(child);
- if (!m_beingDestroyed && !documentBeingDestroyed()) {
+ if (!beingDestroyed() && !documentBeingDestroyed()) {
// Check if our base (if any) is now empty. If so, destroy it.
RenderBlock* base = rubyBase();
if (base && !base->firstChild()) {
diff --git a/Source/WebCore/rendering/RenderRubyRun.h b/Source/WebCore/rendering/RenderRubyRun.h
index d844bff..53209bc 100644
--- a/Source/WebCore/rendering/RenderRubyRun.h
+++ b/Source/WebCore/rendering/RenderRubyRun.h
@@ -46,8 +46,6 @@ public:
RenderRubyRun(Node*);
virtual ~RenderRubyRun();
- virtual void destroy();
-
bool hasRubyText() const;
bool hasRubyBase() const;
bool isEmpty() const;
@@ -75,8 +73,6 @@ private:
virtual const char* renderName() const { return "RenderRubyRun (anonymous)"; }
virtual bool createsAnonymousWrapper() const { return true; }
virtual void removeLeftoverAnonymousBlock(RenderBlock*) { }
-
- bool m_beingDestroyed;
};
} // namespace WebCore
diff --git a/Source/WebCore/rendering/RenderScrollbarTheme.cpp b/Source/WebCore/rendering/RenderScrollbarTheme.cpp
index e32d87a..87309d4 100644
--- a/Source/WebCore/rendering/RenderScrollbarTheme.cpp
+++ b/Source/WebCore/rendering/RenderScrollbarTheme.cpp
@@ -98,10 +98,10 @@ IntRect RenderScrollbarTheme::constrainTrackRectToTrackPieces(Scrollbar* scrollb
IntRect result = rect;
if (scrollbar->orientation() == HorizontalScrollbar) {
result.setX(backRect.x());
- result.setWidth(forwardRect.right() - backRect.x());
+ result.setWidth(forwardRect.maxX() - backRect.x());
} else {
result.setY(backRect.y());
- result.setHeight(forwardRect.bottom() - backRect.y());
+ result.setHeight(forwardRect.maxY() - backRect.y());
}
return result;
}
diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp
index 3fc1c72..bb90e97 100644
--- a/Source/WebCore/rendering/RenderTable.cpp
+++ b/Source/WebCore/rendering/RenderTable.cpp
@@ -168,7 +168,7 @@ void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild)
if (!wrapInAnonymousSection) {
// If the next renderer is actually wrapped in an anonymous table section, we need to go up and find that.
- while (beforeChild && !beforeChild->isTableSection() && !beforeChild->isTableCol() && beforeChild->style()->display() != TABLE_CAPTION)
+ while (beforeChild && beforeChild->parent() != this)
beforeChild = beforeChild->parent();
RenderBox::addChild(child, beforeChild);
@@ -419,7 +419,7 @@ void RenderTable::layout()
while (section) {
if (!sectionMoved && section->logicalTop() != logicalHeight()) {
sectionMoved = true;
- movedSectionLogicalTop = min(logicalHeight(), section->logicalTop()) + (style()->isHorizontalWritingMode() ? section->topVisualOverflow() : section->leftVisualOverflow());
+ movedSectionLogicalTop = min(logicalHeight(), section->logicalTop()) + (style()->isHorizontalWritingMode() ? section->minYVisualOverflow() : section->minXVisualOverflow());
}
section->setLogicalLocation(sectionLogicalLeft, logicalHeight());
@@ -453,15 +453,15 @@ void RenderTable::layout()
statePusher.pop();
if (view()->layoutState()->pageLogicalHeight())
- setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+ setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
bool didFullRepaint = repainter.repaintAfterLayout();
// Repaint with our new bounds if they are different from our old bounds.
if (!didFullRepaint && sectionMoved) {
if (style()->isHorizontalWritingMode())
- repaintRectangle(IntRect(leftVisualOverflow(), movedSectionLogicalTop, rightVisualOverflow() - leftVisualOverflow(), bottomVisualOverflow() - movedSectionLogicalTop));
+ repaintRectangle(IntRect(minXVisualOverflow(), movedSectionLogicalTop, maxXVisualOverflow() - minXVisualOverflow(), maxYVisualOverflow() - movedSectionLogicalTop));
else
- repaintRectangle(IntRect(movedSectionLogicalTop, topVisualOverflow(), rightVisualOverflow() - movedSectionLogicalTop, bottomVisualOverflow() - topVisualOverflow()));
+ repaintRectangle(IntRect(movedSectionLogicalTop, minYVisualOverflow(), maxXVisualOverflow() - movedSectionLogicalTop, maxYVisualOverflow() - minYVisualOverflow()));
}
setNeedsLayout(false);
@@ -513,9 +513,9 @@ void RenderTable::paint(PaintInfo& paintInfo, int tx, int ty)
PaintPhase paintPhase = paintInfo.phase;
int os = 2 * maximalOutlineSize(paintPhase);
- if (ty + topVisualOverflow() >= paintInfo.rect.bottom() + os || ty + bottomVisualOverflow() <= paintInfo.rect.y() - os)
+ if (ty + minYVisualOverflow() >= paintInfo.rect.maxY() + os || ty + maxYVisualOverflow() <= paintInfo.rect.y() - os)
return;
- if (tx + leftVisualOverflow() >= paintInfo.rect.right() + os || tx + rightVisualOverflow() <= paintInfo.rect.x() - os)
+ if (tx + minXVisualOverflow() >= paintInfo.rect.maxX() + os || tx + maxXVisualOverflow() <= paintInfo.rect.x() - os)
return;
bool pushedClip = pushContentsClip(paintInfo, tx, ty);
@@ -1185,6 +1185,8 @@ int RenderTable::firstLineBoxBaseline() const
if (isWritingModeRoot())
return -1;
+ recalcSectionsIfNeeded();
+
RenderTableSection* firstNonEmptySection = m_head ? m_head : (m_firstBody ? m_firstBody : m_foot);
if (firstNonEmptySection && !firstNonEmptySection->numRows())
firstNonEmptySection = sectionBelow(firstNonEmptySection, true);
diff --git a/Source/WebCore/rendering/RenderTableCell.cpp b/Source/WebCore/rendering/RenderTableCell.cpp
index 8549f49..1593a5c 100644
--- a/Source/WebCore/rendering/RenderTableCell.cpp
+++ b/Source/WebCore/rendering/RenderTableCell.cpp
@@ -276,9 +276,9 @@ IntRect RenderTableCell::clippedOverflowRectForRepaint(RenderBoxModelObject* rep
right = max(right, below->borderHalfRight(true));
}
}
- left = max(left, -leftVisualOverflow());
- top = max(top, -topVisualOverflow());
- IntRect r(-left, - top, left + max(width() + right, rightVisualOverflow()), top + max(height() + bottom, bottomVisualOverflow()));
+ left = max(left, -minXVisualOverflow());
+ top = max(top, -minYVisualOverflow());
+ IntRect r(-left, - top, left + max(width() + right, maxXVisualOverflow()), top + max(height() + bottom, maxYVisualOverflow()));
if (RenderView* v = view()) {
// FIXME: layoutDelta needs to be applied in parts before/after transforms and
@@ -812,8 +812,8 @@ void RenderTableCell::paint(PaintInfo& paintInfo, int tx, int ty)
tx += x();
ty += y();
int os = 2 * maximalOutlineSize(paintInfo.phase);
- if (ty - table()->outerBorderTop() < paintInfo.rect.bottom() + os &&
- ty + height() + table()->outerBorderBottom() > paintInfo.rect.y() - os)
+ if (ty - table()->outerBorderTop() < paintInfo.rect.maxY() + os
+ && ty + height() + table()->outerBorderBottom() > paintInfo.rect.y() - os)
paintCollapsedBorder(paintInfo.context, tx, ty, width(), height());
return;
}
diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp
index 595e156..7300c19 100644
--- a/Source/WebCore/rendering/RenderTableRow.cpp
+++ b/Source/WebCore/rendering/RenderTableRow.cpp
@@ -125,7 +125,7 @@ void RenderTableRow::layout()
for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
if (child->isTableCell()) {
RenderTableCell* cell = toRenderTableCell(child);
- if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->y()) != cell->pageLogicalOffset())
+ if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->logicalTop()) != cell->pageLogicalOffset())
cell->setChildNeedsLayout(true, false);
if (child->needsLayout()) {
diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp
index 265d2ef..f20c236 100644
--- a/Source/WebCore/rendering/RenderTableSection.cpp
+++ b/Source/WebCore/rendering/RenderTableSection.cpp
@@ -704,7 +704,7 @@ int RenderTableSection::layoutRows(int toAdd)
if (intrinsicPaddingBefore != oldIntrinsicPaddingBefore || intrinsicPaddingAfter != oldIntrinsicPaddingAfter)
cell->setNeedsLayout(true, false);
- if (!cell->needsLayout() && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->y()) != cell->pageLogicalOffset())
+ if (!cell->needsLayout() && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->logicalTop()) != cell->pageLogicalOffset())
cell->setChildNeedsLayout(true, false);
cell->layoutIfNeeded();
@@ -1068,9 +1068,9 @@ void RenderTableSection::paintObject(PaintInfo& paintInfo, int tx, int ty)
localRepaintRect.move(-tx, -ty);
if (style()->isFlippedBlocksWritingMode()) {
if (style()->isHorizontalWritingMode())
- localRepaintRect.setY(height() - localRepaintRect.bottom());
+ localRepaintRect.setY(height() - localRepaintRect.maxY());
else
- localRepaintRect.setX(width() - localRepaintRect.right());
+ localRepaintRect.setX(width() - localRepaintRect.maxX());
}
// If some cell overflows, just paint all of them.
@@ -1085,7 +1085,7 @@ void RenderTableSection::paintObject(PaintInfo& paintInfo, int tx, int ty)
if (startrow == m_rowPos.size() || (startrow > 0 && (m_rowPos[startrow] > before)))
--startrow;
- int after = (style()->isHorizontalWritingMode() ? localRepaintRect.bottom() : localRepaintRect.right()) + os;
+ int after = (style()->isHorizontalWritingMode() ? localRepaintRect.maxY() : localRepaintRect.maxX()) + os;
endrow = std::lower_bound(m_rowPos.begin(), m_rowPos.end(), after) - m_rowPos.begin();
if (endrow == m_rowPos.size())
--endrow;
@@ -1104,7 +1104,7 @@ void RenderTableSection::paintObject(PaintInfo& paintInfo, int tx, int ty)
if ((startcol == columnPos.size()) || (startcol > 0 && (columnPos[startcol] > start)))
--startcol;
- int end = (style()->isHorizontalWritingMode() ? localRepaintRect.right() : localRepaintRect.bottom()) + os;
+ int end = (style()->isHorizontalWritingMode() ? localRepaintRect.maxX() : localRepaintRect.maxY()) + os;
endcol = std::lower_bound(columnPos.begin(), columnPos.end(), end) - columnPos.begin();
if (endcol == columnPos.size())
--endcol;
diff --git a/Source/WebCore/rendering/RenderText.cpp b/Source/WebCore/rendering/RenderText.cpp
index 86b32d5..1b05af2 100644
--- a/Source/WebCore/rendering/RenderText.cpp
+++ b/Source/WebCore/rendering/RenderText.cpp
@@ -26,7 +26,6 @@
#include "RenderText.h"
#include "AXObjectCache.h"
-#include "CharacterNames.h"
#include "EllipsisBox.h"
#include "FloatQuad.h"
#include "FontTranscoder.h"
@@ -35,6 +34,7 @@
#include "Range.h"
#include "RenderArena.h"
#include "RenderBlock.h"
+#include "RenderCombineText.h"
#include "RenderLayer.h"
#include "RenderView.h"
#include "Text.h"
@@ -45,6 +45,7 @@
#include "break_lines.h"
#include <wtf/AlwaysInline.h>
#include <wtf/text/StringBuffer.h>
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
using namespace WTF;
@@ -345,8 +346,12 @@ void RenderText::absoluteQuads(Vector<FloatQuad>& quads, ClippingOption option)
// Shorten the width of this text box if it ends in an ellipsis.
IntRect ellipsisRect = (option == ClipToEllipsis) ? ellipsisRectForBox(box, 0, textLength()) : IntRect();
- if (!ellipsisRect.isEmpty())
- boundaries.setWidth(ellipsisRect.right() - boundaries.x());
+ if (!ellipsisRect.isEmpty()) {
+ if (style()->isHorizontalWritingMode())
+ boundaries.setWidth(ellipsisRect.maxX() - boundaries.x());
+ else
+ boundaries.setHeight(ellipsisRect.maxY() - boundaries.y());
+ }
quads.append(localToAbsoluteQuad(FloatRect(boundaries)));
}
}
@@ -374,8 +379,13 @@ void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start,
IntRect r(box->calculateBoundaries());
if (useSelectionHeight) {
IntRect selectionRect = box->selectionRect(0, 0, start, end);
- r.setHeight(selectionRect.height());
- r.setY(selectionRect.y());
+ if (box->isHorizontal()) {
+ r.setHeight(selectionRect.height());
+ r.setY(selectionRect.y());
+ } else {
+ r.setWidth(selectionRect.width());
+ r.setX(selectionRect.x());
+ }
}
quads.append(localToAbsoluteQuad(FloatRect(r)));
} else {
@@ -384,8 +394,13 @@ void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start,
if (r.height()) {
if (!useSelectionHeight) {
// change the height and y position because selectionRect uses selection-specific values
- r.setHeight(box->logicalHeight());
- r.setY(box->y());
+ if (box->isHorizontal()) {
+ r.setHeight(box->logicalHeight());
+ r.setY(box->y());
+ } else {
+ r.setWidth(box->logicalHeight());
+ r.setX(box->x());
+ }
}
quads.append(localToAbsoluteQuad(FloatRect(r)));
}
@@ -547,6 +562,12 @@ IntRect RenderText::localCaretRect(InlineBox* inlineBox, int caretOffset, int* e
ALWAYS_INLINE int RenderText::widthFromCache(const Font& f, int start, int len, int xPos, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
{
+ if (style()->hasTextCombine()) {
+ const RenderCombineText* combineText = toRenderCombineText(this);
+ if (combineText->isCombined())
+ return combineText->combinedTextWidth(f);
+ }
+
if (f.isFixedPitch() && !f.isSmallCaps() && m_isAllASCII) {
int monospaceCharacterWidth = f.spaceWidth();
int tabWidth = allowTabs() ? monospaceCharacterWidth * 8 : 0;
diff --git a/Source/WebCore/rendering/RenderTextControl.cpp b/Source/WebCore/rendering/RenderTextControl.cpp
index cac8113..72b20ec 100644
--- a/Source/WebCore/rendering/RenderTextControl.cpp
+++ b/Source/WebCore/rendering/RenderTextControl.cpp
@@ -23,7 +23,6 @@
#include "RenderTextControl.h"
#include "AXObjectCache.h"
-#include "CharacterNames.h"
#include "Editor.h"
#include "Event.h"
#include "EventNames.h"
@@ -42,6 +41,7 @@
#include "TextControlInnerElements.h"
#include "TextIterator.h"
#include "TextRun.h"
+#include <wtf/unicode/CharacterNames.h>
using namespace std;
@@ -146,7 +146,7 @@ void RenderTextControl::createSubtreeIfNeeded(TextControlInnerElement* innerBloc
// For non-search fields, there is no intermediate innerBlock as the shadow node.
// m_innerText will be the shadow node in that case.
RenderStyle* parentStyle = innerBlock ? innerBlock->renderer()->style() : style();
- m_innerText = TextControlInnerTextElement::create(document(), innerBlock ? 0 : static_cast<HTMLElement*>(node()));
+ m_innerText = TextControlInnerTextElement::create(document(), innerBlock ? 0 : toHTMLElement(node()));
m_innerText->attachInnerElement(innerBlock ? innerBlock : node(), createInnerTextStyle(parentStyle), renderArena());
}
}
@@ -544,7 +544,7 @@ float RenderTextControl::getAvgCharWidth(AtomicString family)
return roundf(style()->font().primaryFont()->avgCharWidth());
const UChar ch = '0';
- return style()->font().floatWidth(TextRun(&ch, 1, false, 0, 0, false, false, false));
+ return style()->font().floatWidth(TextRun(&ch, 1, false, 0, 0, TextRun::AllowTrailingExpansion, false, false, false));
}
float RenderTextControl::scaleEmToUnits(int x) const
@@ -639,12 +639,12 @@ void RenderTextControl::paintPlaceholder(PaintInfo& paintInfo, int tx, int ty)
paintInfo.context->setFillColor(placeholderStyle->visitedDependentColor(CSSPropertyColor), placeholderStyle->colorSpace());
String placeholderText = static_cast<HTMLTextFormControlElement*>(node())->strippedPlaceholder();
- TextRun textRun(placeholderText.characters(), placeholderText.length(), 0, 0, 0, !placeholderStyle->isLeftToRightDirection(), placeholderStyle->unicodeBidi() == Override, false, false);
+ TextRun textRun(placeholderText.characters(), placeholderText.length(), false, 0, 0, TextRun::AllowTrailingExpansion, !placeholderStyle->isLeftToRightDirection(), placeholderStyle->unicodeBidi() == Override, false, false);
RenderBox* textRenderer = innerTextElement() ? innerTextElement()->renderBox() : 0;
if (textRenderer) {
IntPoint textPoint;
- textPoint.setY(ty + textBlockInsetTop() + placeholderStyle->font().ascent());
+ textPoint.setY(ty + textBlockInsetTop() + placeholderStyle->fontMetrics().ascent());
if (placeholderStyle->isLeftToRightDirection())
textPoint.setX(tx + textBlockInsetLeft());
else
diff --git a/Source/WebCore/rendering/RenderTextControlMultiLine.cpp b/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
index d0b0cbc..cf32f68 100644
--- a/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
+++ b/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
@@ -41,7 +41,7 @@ RenderTextControlMultiLine::RenderTextControlMultiLine(Node* node, bool placehol
RenderTextControlMultiLine::~RenderTextControlMultiLine()
{
- if (node())
+ if (node() && node()->inDocument())
static_cast<HTMLTextAreaElement*>(node())->rendererWillBeDestroyed();
}
diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
index 95f209a..de8fb0d 100644
--- a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
+++ b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp
@@ -397,7 +397,7 @@ void RenderTextControlSingleLine::forwardEvent(Event* event)
#endif
FloatPoint localPoint = innerTextRenderer->absoluteToLocal(static_cast<MouseEvent*>(event)->absoluteLocation(), false, true);
- int textRight = innerTextRenderer->borderBoxRect().right();
+ int textRight = innerTextRenderer->borderBoxRect().maxX();
if (m_resultsButton && localPoint.x() < innerTextRenderer->borderBoxRect().x())
m_resultsButton->defaultEventHandler(event);
@@ -564,9 +564,6 @@ int RenderTextControlSingleLine::preferredContentWidth(float charWidth) const
result += cancelRenderer->borderLeft() + cancelRenderer->borderRight() +
cancelRenderer->paddingLeft() + cancelRenderer->paddingRight();
- if (RenderBox* spinRenderer = m_innerSpinButton ? m_innerSpinButton->renderBox() : 0)
- result += spinRenderer->minPreferredLogicalWidth();
-
#if ENABLE(INPUT_SPEECH)
if (RenderBox* speechRenderer = m_speechButton ? m_speechButton->renderBox() : 0) {
result += speechRenderer->borderLeft() + speechRenderer->borderRight() +
@@ -618,17 +615,17 @@ void RenderTextControlSingleLine::createSubtreeIfNeeded()
#if ENABLE(INPUT_SPEECH)
if (inputElement()->isSpeechEnabled() && !m_speechButton) {
// Create the speech button element.
- m_speechButton = InputFieldSpeechButtonElement::create(static_cast<HTMLElement*>(node()));
+ m_speechButton = InputFieldSpeechButtonElement::create(toHTMLElement(node()));
m_speechButton->attachInnerElement(node(), createSpeechButtonStyle(), renderArena());
}
#endif
bool hasSpinButton = inputElement()->hasSpinButton();
if (hasSpinButton && !m_innerSpinButton) {
- m_innerSpinButton = SpinButtonElement::create(static_cast<HTMLElement*>(node()));
+ m_innerSpinButton = SpinButtonElement::create(toHTMLElement(node()));
m_innerSpinButton->attachInnerElement(node(), createInnerSpinButtonStyle(), renderArena());
}
if (hasSpinButton && !m_outerSpinButton) {
- m_outerSpinButton = SpinButtonElement::create(static_cast<HTMLElement*>(node()));
+ m_outerSpinButton = SpinButtonElement::create(toHTMLElement(node()));
m_outerSpinButton->attachInnerElement(node(), createOuterSpinButtonStyle(), renderArena());
}
return;
@@ -636,18 +633,18 @@ void RenderTextControlSingleLine::createSubtreeIfNeeded()
if (!m_innerBlock) {
// Create the inner block element
- m_innerBlock = TextControlInnerElement::create(static_cast<HTMLElement*>(node()));
+ m_innerBlock = TextControlInnerElement::create(toHTMLElement(node()));
m_innerBlock->attachInnerElement(node(), createInnerBlockStyle(style()), renderArena());
}
#if ENABLE(INPUT_SPEECH)
if (inputElement()->isSpeechEnabled() && !m_speechButton) {
// Create the speech button element.
- m_speechButton = InputFieldSpeechButtonElement::create(static_cast<HTMLElement*>(node()));
+ m_speechButton = InputFieldSpeechButtonElement::create(toHTMLElement(node()));
m_speechButton->attachInnerElement(node(), createSpeechButtonStyle(), renderArena());
}
#endif
if (inputElement()->hasSpinButton() && !m_outerSpinButton) {
- m_outerSpinButton = SpinButtonElement::create(static_cast<HTMLElement*>(node()));
+ m_outerSpinButton = SpinButtonElement::create(toHTMLElement(node()));
m_outerSpinButton->attachInnerElement(node(), createOuterSpinButtonStyle(), renderArena());
}
@@ -687,7 +684,7 @@ void RenderTextControlSingleLine::updateFromElement()
// flag is false. It protects an unacceptable renderer value from
// being overwritten with the DOM value.
if (!static_cast<HTMLInputElement*>(node())->formControlValueMatchesRenderer())
- setInnerTextValue(inputElement()->value());
+ setInnerTextValue(inputElement()->visibleValue());
}
}
@@ -712,7 +709,7 @@ PassRefPtr<RenderStyle> RenderTextControlSingleLine::createInnerTextStyle(const
textBlockStyle->setOverflowY(OHIDDEN);
// Do not allow line-height to be smaller than our default.
- if (textBlockStyle->font().lineSpacing() > lineHeight(true, HorizontalLine, PositionOfInteriorLineBoxes))
+ if (textBlockStyle->fontMetrics().lineSpacing() > lineHeight(true, HorizontalLine, PositionOfInteriorLineBoxes))
textBlockStyle->setLineHeight(Length(-100.0f, Percent));
WebCore::EDisplay display = (m_innerBlock || inputElement()->hasSpinButton() ? INLINE_BLOCK : BLOCK);
@@ -931,7 +928,7 @@ PopupMenuStyle RenderTextControlSingleLine::itemStyle(unsigned) const
PopupMenuStyle RenderTextControlSingleLine::menuStyle() const
{
- return PopupMenuStyle(style()->visitedDependentColor(CSSPropertyColor), style()->visitedDependentColor(CSSPropertyBackgroundColor), style()->font(), style()->visibility() == VISIBLE, style()->display() == NONE, style()->textIndent(), style()->direction());
+ return PopupMenuStyle(style()->visitedDependentColor(CSSPropertyColor), style()->visitedDependentColor(CSSPropertyBackgroundColor), style()->font(), style()->visibility() == VISIBLE, style()->display() == NONE, style()->textIndent(), style()->direction(), style()->unicodeBidi() == Override);
}
int RenderTextControlSingleLine::clientInsetLeft() const
diff --git a/Source/WebCore/rendering/RenderTheme.h b/Source/WebCore/rendering/RenderTheme.h
index 13c69e6..e2b9c78 100644
--- a/Source/WebCore/rendering/RenderTheme.h
+++ b/Source/WebCore/rendering/RenderTheme.h
@@ -180,6 +180,7 @@ public:
// Media controls
virtual bool hitTestMediaControlPart(RenderObject*, const IntPoint& absPoint);
virtual bool shouldRenderMediaControlPart(ControlPart, Element*);
+ virtual bool usesMediaControlStatusDisplay() { return false; }
virtual double mediaControlsFadeInDuration() { return 0.1; }
virtual double mediaControlsFadeOutDuration() { return 0.3; }
virtual String formatMediaControlsTime(float time) const;
@@ -194,6 +195,8 @@ public:
virtual IntSize meterSizeForBounds(const RenderMeter*, const IntRect&) const;
virtual bool supportsMeter(ControlPart, bool isHorizontal) const;
#endif
+
+ virtual bool shouldShowPlaceholderWhenFocused() const { return false; }
protected:
// The platform selection color.
diff --git a/Source/WebCore/rendering/RenderThemeChromiumMac.h b/Source/WebCore/rendering/RenderThemeChromiumMac.h
index d1875fc..80bbae4 100644
--- a/Source/WebCore/rendering/RenderThemeChromiumMac.h
+++ b/Source/WebCore/rendering/RenderThemeChromiumMac.h
@@ -46,6 +46,7 @@ protected:
virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const;
+ virtual bool usesMediaControlStatusDisplay() { return false; }
#endif
diff --git a/Source/WebCore/rendering/RenderThemeChromiumWin.cpp b/Source/WebCore/rendering/RenderThemeChromiumWin.cpp
index bba0520..d538050 100644
--- a/Source/WebCore/rendering/RenderThemeChromiumWin.cpp
+++ b/Source/WebCore/rendering/RenderThemeChromiumWin.cpp
@@ -479,15 +479,15 @@ bool RenderThemeChromiumWin::paintMenuList(RenderObject* o, const PaintInfo& i,
int spacingBottom = borderBottom + box->paddingBottom();
int buttonX;
- if (r.right() - r.x() < buttonWidth)
+ if (r.maxX() - r.x() < buttonWidth)
buttonX = r.x();
else
- buttonX = o->style()->direction() == LTR ? r.right() - spacingRight - buttonWidth : r.x() + spacingLeft;
+ buttonX = o->style()->direction() == LTR ? r.maxX() - spacingRight - buttonWidth : r.x() + spacingLeft;
// Compute the rectangle of the button in the destination image.
IntRect rect(buttonX,
r.y() + spacingTop,
- std::min(buttonWidth, r.right() - r.x()),
+ std::min(buttonWidth, r.maxX() - r.x()),
r.height() - (spacingTop + spacingBottom));
// Get the correct theme data for a textfield and paint the menu.
diff --git a/Source/WebCore/rendering/RenderThemeMac.h b/Source/WebCore/rendering/RenderThemeMac.h
index 95661b8..9837c2a 100644
--- a/Source/WebCore/rendering/RenderThemeMac.h
+++ b/Source/WebCore/rendering/RenderThemeMac.h
@@ -164,9 +164,12 @@ protected:
virtual String extraMediaControlsStyleSheet();
virtual bool shouldRenderMediaControlPart(ControlPart, Element*);
+ virtual bool usesMediaControlStatusDisplay();
virtual void adjustMediaSliderThumbSize(RenderObject*) const;
virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const;
#endif
+
+ virtual bool shouldShowPlaceholderWhenFocused() const;
private:
diff --git a/Source/WebCore/rendering/RenderThemeMac.mm b/Source/WebCore/rendering/RenderThemeMac.mm
index 605e958..e3c75c5 100644
--- a/Source/WebCore/rendering/RenderThemeMac.mm
+++ b/Source/WebCore/rendering/RenderThemeMac.mm
@@ -1041,20 +1041,20 @@ void RenderThemeMac::paintMenuListButtonGradients(RenderObject* o, const PaintIn
FloatRect topGradient(r.x(), r.y(), r.width(), r.height() / 2.0f);
struct CGFunctionCallbacks topCallbacks = { 0, TopGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> topFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &topCallbacks));
- RetainPtr<CGShadingRef> topShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(topGradient.x(), topGradient.y()), CGPointMake(topGradient.x(), topGradient.bottom()), topFunction.get(), false, false));
+ RetainPtr<CGShadingRef> topShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(topGradient.x(), topGradient.y()), CGPointMake(topGradient.x(), topGradient.maxY()), topFunction.get(), false, false));
FloatRect bottomGradient(r.x() + radius, r.y() + r.height() / 2.0f, r.width() - 2.0f * radius, r.height() / 2.0f);
struct CGFunctionCallbacks bottomCallbacks = { 0, BottomGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> bottomFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &bottomCallbacks));
- RetainPtr<CGShadingRef> bottomShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(bottomGradient.x(), bottomGradient.y()), CGPointMake(bottomGradient.x(), bottomGradient.bottom()), bottomFunction.get(), false, false));
+ RetainPtr<CGShadingRef> bottomShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(bottomGradient.x(), bottomGradient.y()), CGPointMake(bottomGradient.x(), bottomGradient.maxY()), bottomFunction.get(), false, false));
struct CGFunctionCallbacks mainCallbacks = { 0, MainGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> mainFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &mainCallbacks));
- RetainPtr<CGShadingRef> mainShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x(), r.bottom()), mainFunction.get(), false, false));
+ RetainPtr<CGShadingRef> mainShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x(), r.maxY()), mainFunction.get(), false, false));
RetainPtr<CGShadingRef> leftShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x() + radius, r.y()), mainFunction.get(), false, false));
- RetainPtr<CGShadingRef> rightShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.right(), r.y()), CGPointMake(r.right() - radius, r.y()), mainFunction.get(), false, false));
+ RetainPtr<CGShadingRef> rightShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.maxX(), r.y()), CGPointMake(r.maxX() - radius, r.y()), mainFunction.get(), false, false));
paintInfo.context->save();
CGContextClipToRect(context, r);
paintInfo.context->addRoundedRectClip(border);
@@ -1099,7 +1099,7 @@ bool RenderThemeMac::paintMenuListButton(RenderObject* o, const PaintInfo& paint
float centerY = bounds.y() + bounds.height() / 2.0f;
float arrowHeight = baseArrowHeight * fontScale;
float arrowWidth = baseArrowWidth * fontScale;
- float leftEdge = bounds.right() - arrowPaddingRight * o->style()->effectiveZoom() - arrowWidth;
+ float leftEdge = bounds.maxX() - arrowPaddingRight * o->style()->effectiveZoom() - arrowWidth;
float spaceBetweenArrows = baseSpaceBetweenArrows * fontScale;
if (bounds.width() < arrowWidth + arrowPaddingLeft * o->style()->effectiveZoom())
@@ -1138,11 +1138,11 @@ bool RenderThemeMac::paintMenuListButton(RenderObject* o, const PaintInfo& paint
paintInfo.context->setStrokeStyle(SolidStroke);
paintInfo.context->setStrokeColor(leftSeparatorColor, ColorSpaceDeviceRGB);
paintInfo.context->drawLine(IntPoint(leftEdgeOfSeparator, bounds.y()),
- IntPoint(leftEdgeOfSeparator, bounds.bottom()));
+ IntPoint(leftEdgeOfSeparator, bounds.maxY()));
paintInfo.context->setStrokeColor(rightSeparatorColor, ColorSpaceDeviceRGB);
paintInfo.context->drawLine(IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.y()),
- IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.bottom()));
+ IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.maxY()));
paintInfo.context->restore();
return false;
@@ -1293,9 +1293,9 @@ bool RenderThemeMac::paintSliderTrack(RenderObject* o, const PaintInfo& paintInf
RetainPtr<CGFunctionRef> mainFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &mainCallbacks));
RetainPtr<CGShadingRef> mainShading;
if (o->style()->appearance() == SliderVerticalPart)
- mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.x(), bounds.bottom()), CGPointMake(bounds.right(), bounds.bottom()), mainFunction.get(), false, false));
+ mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.x(), bounds.maxY()), CGPointMake(bounds.maxX(), bounds.maxY()), mainFunction.get(), false, false));
else
- mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.x(), bounds.y()), CGPointMake(bounds.x(), bounds.bottom()), mainFunction.get(), false, false));
+ mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.x(), bounds.y()), CGPointMake(bounds.x(), bounds.maxY()), mainFunction.get(), false, false));
IntSize radius(trackRadius, trackRadius);
paintInfo.context->addRoundedRectClip(RoundedIntRect(bounds, radius, radius, radius, radius));
@@ -1981,6 +1981,11 @@ bool RenderThemeMac::shouldRenderMediaControlPart(ControlPart part, Element* ele
return RenderTheme::shouldRenderMediaControlPart(part, element);
}
+bool RenderThemeMac::usesMediaControlStatusDisplay()
+{
+ return mediaControllerTheme() == MediaControllerThemeQuickTime;
+}
+
IntPoint RenderThemeMac::volumeSliderOffsetFromMuteButton(Node* muteButton, const IntSize& size) const
{
static const int xOffset = -4;
@@ -1994,6 +1999,15 @@ IntPoint RenderThemeMac::volumeSliderOffsetFromMuteButton(Node* muteButton, cons
return IntPoint(xOffset * zoomLevel, y);
}
+bool RenderThemeMac::shouldShowPlaceholderWhenFocused() const
+{
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+ return true;
+#else
+ return false;
+#endif
+}
+
#endif // ENABLE(VIDEO)
NSPopUpButtonCell* RenderThemeMac::popupButton() const
diff --git a/Source/WebCore/rendering/RenderThemeSafari.cpp b/Source/WebCore/rendering/RenderThemeSafari.cpp
index 47f627e..a2f9ed1 100644
--- a/Source/WebCore/rendering/RenderThemeSafari.cpp
+++ b/Source/WebCore/rendering/RenderThemeSafari.cpp
@@ -760,20 +760,20 @@ void RenderThemeSafari::paintMenuListButtonGradients(RenderObject* o, const Pain
FloatRect topGradient(r.x(), r.y(), r.width(), r.height() / 2.0f);
struct CGFunctionCallbacks topCallbacks = { 0, TopGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> topFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &topCallbacks));
- RetainPtr<CGShadingRef> topShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(topGradient.x(), topGradient.y()), CGPointMake(topGradient.x(), topGradient.bottom()), topFunction.get(), false, false));
+ RetainPtr<CGShadingRef> topShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(topGradient.x(), topGradient.y()), CGPointMake(topGradient.x(), topGradient.maxY()), topFunction.get(), false, false));
FloatRect bottomGradient(r.x() + radius, r.y() + r.height() / 2.0f, r.width() - 2.0f * radius, r.height() / 2.0f);
struct CGFunctionCallbacks bottomCallbacks = { 0, BottomGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> bottomFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &bottomCallbacks));
- RetainPtr<CGShadingRef> bottomShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(bottomGradient.x(), bottomGradient.y()), CGPointMake(bottomGradient.x(), bottomGradient.bottom()), bottomFunction.get(), false, false));
+ RetainPtr<CGShadingRef> bottomShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(bottomGradient.x(), bottomGradient.y()), CGPointMake(bottomGradient.x(), bottomGradient.maxY()), bottomFunction.get(), false, false));
struct CGFunctionCallbacks mainCallbacks = { 0, MainGradientInterpolate, NULL };
RetainPtr<CGFunctionRef> mainFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &mainCallbacks));
- RetainPtr<CGShadingRef> mainShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x(), r.bottom()), mainFunction.get(), false, false));
+ RetainPtr<CGShadingRef> mainShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x(), r.maxY()), mainFunction.get(), false, false));
RetainPtr<CGShadingRef> leftShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.x(), r.y()), CGPointMake(r.x() + radius, r.y()), mainFunction.get(), false, false));
- RetainPtr<CGShadingRef> rightShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.right(), r.y()), CGPointMake(r.right() - radius, r.y()), mainFunction.get(), false, false));
+ RetainPtr<CGShadingRef> rightShading(AdoptCF, CGShadingCreateAxial(cspace, CGPointMake(r.maxX(), r.y()), CGPointMake(r.maxX() - radius, r.y()), mainFunction.get(), false, false));
paintInfo.context->save();
CGContextClipToRect(context, bound.rect());
paintInfo.context->addRoundedRectClip(bound);
@@ -818,7 +818,7 @@ bool RenderThemeSafari::paintMenuListButton(RenderObject* o, const PaintInfo& pa
float centerY = bounds.y() + bounds.height() / 2.0f;
float arrowHeight = baseArrowHeight * fontScale;
float arrowWidth = baseArrowWidth * fontScale;
- float leftEdge = bounds.right() - arrowPaddingRight - arrowWidth;
+ float leftEdge = bounds.maxX() - arrowPaddingRight - arrowWidth;
if (bounds.width() < arrowWidth + arrowPaddingLeft)
return false;
@@ -848,11 +848,11 @@ bool RenderThemeSafari::paintMenuListButton(RenderObject* o, const PaintInfo& pa
paintInfo.context->setStrokeStyle(SolidStroke);
paintInfo.context->setStrokeColor(leftSeparatorColor, ColorSpaceDeviceRGB);
paintInfo.context->drawLine(IntPoint(leftEdgeOfSeparator, bounds.y()),
- IntPoint(leftEdgeOfSeparator, bounds.bottom()));
+ IntPoint(leftEdgeOfSeparator, bounds.maxY()));
paintInfo.context->setStrokeColor(rightSeparatorColor, ColorSpaceDeviceRGB);
paintInfo.context->drawLine(IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.y()),
- IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.bottom()));
+ IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.maxY()));
paintInfo.context->restore();
return false;
@@ -976,9 +976,9 @@ bool RenderThemeSafari::paintSliderTrack(RenderObject* o, const PaintInfo& paint
RetainPtr<CGFunctionRef> mainFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &mainCallbacks));
RetainPtr<CGShadingRef> mainShading;
if (o->style()->appearance() == SliderVerticalPart)
- mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.rect().x(), bounds.rect().bottom()), CGPointMake(bounds.rect().right(), bounds.rect().bottom()), mainFunction.get(), false, false));
+ mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.rect().x(), bounds.rect().maxY()), CGPointMake(bounds.rect().maxX(), bounds.rect().maxY()), mainFunction.get(), false, false));
else
- mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.rect().x(), bounds.rect().y()), CGPointMake(bounds.rect().x(), bounds.rect().bottom()), mainFunction.get(), false, false));
+ mainShading.adoptCF(CGShadingCreateAxial(cspace, CGPointMake(bounds.rect().x(), bounds.rect().y()), CGPointMake(bounds.rect().x(), bounds.rect().maxY()), mainFunction.get(), false, false));
paintInfo.context->addRoundedRectClip(bounds);
CGContextDrawShading(context, mainShading.get());
diff --git a/Source/WebCore/rendering/RenderThemeWin.cpp b/Source/WebCore/rendering/RenderThemeWin.cpp
index f0f8268..5581db8 100644
--- a/Source/WebCore/rendering/RenderThemeWin.cpp
+++ b/Source/WebCore/rendering/RenderThemeWin.cpp
@@ -27,6 +27,7 @@
#include "Frame.h"
#include "GraphicsContext.h"
#include "LocalWindowsContext.h"
+#include "PaintInfo.h"
#include "RenderSlider.h"
#include "Settings.h"
#include "SoftLinking.h"
@@ -694,7 +695,7 @@ bool RenderThemeWin::paintInnerSpinButton(RenderObject* o, const PaintInfo& i, c
IntRect upRect(r);
upRect.setHeight(r.height() / 2);
IntRect downRect(r);
- downRect.setY(upRect.bottom());
+ downRect.setY(upRect.maxY());
downRect.setHeight(r.height() - upRect.height());
drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonUp), upRect);
drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonDown), downRect);
@@ -769,7 +770,7 @@ void RenderThemeWin::adjustMenuListButtonStyle(CSSStyleSelector* selector, Rende
style->setHeight(Length(Auto));
// Calculate our min-height
- int minHeight = style->font().height();
+ int minHeight = style->fontMetrics().height();
minHeight = max(minHeight, dropDownBoxMinHeight);
style->setMinHeight(Length(minHeight, Fixed));
@@ -788,7 +789,7 @@ bool RenderThemeWin::paintMenuListButton(RenderObject* o, const PaintInfo& i, co
IntRect buttonRect(r);
buttonRect.inflate(-borderThickness);
if (o->style()->direction() == LTR)
- buttonRect.setX(buttonRect.right() - dropDownButtonWidth);
+ buttonRect.setX(buttonRect.maxX() - dropDownButtonWidth);
buttonRect.setWidth(dropDownButtonWidth);
if (isRunningOnVistaOrLater()) {
diff --git a/Source/WebCore/rendering/RenderThemeWinCE.cpp b/Source/WebCore/rendering/RenderThemeWinCE.cpp
index d4bff96..a56ab3e 100644
--- a/Source/WebCore/rendering/RenderThemeWinCE.cpp
+++ b/Source/WebCore/rendering/RenderThemeWinCE.cpp
@@ -250,7 +250,7 @@ bool RenderThemeWinCE::paintMenuList(RenderObject* o, const PaintInfo& i, const
bool RenderThemeWinCE::paintMenuListButton(RenderObject* o, const PaintInfo& i, const IntRect& r)
{
- IntRect buttonRect(r.right() - dropDownButtonWidth - 1, r.y(), dropDownButtonWidth, r.height());
+ IntRect buttonRect(r.maxX() - dropDownButtonWidth - 1, r.y(), dropDownButtonWidth, r.height());
buttonRect.inflateY(-1);
i.context->drawFrameControl(buttonRect, DFC_SCROLL, DFCS_SCROLLCOMBOBOX | determineClassicState(o));
return true;
@@ -386,7 +386,7 @@ bool RenderThemeWinCE::paintSearchFieldCancelButton(RenderObject* o, const Paint
IntRect xBounds(cancelBounds.location() + IntSize(3, 3), xSize);
paintInfo.context->setStrokeColor(Color::white, ColorSpaceDeviceRGB);
paintInfo.context->drawLine(xBounds.location(), xBounds.location() + xBounds.size());
- paintInfo.context->drawLine(IntPoint(xBounds.right(), xBounds.y()), IntPoint(xBounds.x(), xBounds.bottom()));
+ paintInfo.context->drawLine(IntPoint(xBounds.maxX(), xBounds.y()), IntPoint(xBounds.x(), xBounds.maxY()));
paintInfo.context->restore();
return false;
@@ -452,7 +452,7 @@ void RenderThemeWinCE::adjustMenuListButtonStyle(CSSStyleSelector* selector, Ren
style->setHeight(Length(Auto));
// Calculate our min-height
- int minHeight = style->font().height();
+ int minHeight = style->fontMetrics().height();
minHeight = max(minHeight, dropDownBoxMinHeight);
style->setMinHeight(Length(minHeight, Fixed));
@@ -489,7 +489,7 @@ static HTMLMediaElement* mediaElementParent(Node* node)
bool RenderThemeWinCE::paintSliderTrack(RenderObject* o, const PaintInfo& i, const IntRect& r)
{
bool rc = RenderTheme::paintSliderTrack(o, i, r);
- IntPoint left = IntPoint(r.x() + 2, (r.y() + r.bottom()) / 2);
+ IntPoint left = IntPoint(r.x() + 2, (r.y() + r.maxY()) / 2);
i.context->save();
i.context->setStrokeColor(Color::gray, ColorSpaceDeviceRGB);
i.context->setFillColor(Color::gray, ColorSpaceDeviceRGB);
@@ -498,13 +498,13 @@ bool RenderThemeWinCE::paintSliderTrack(RenderObject* o, const PaintInfo& i, con
HTMLMediaElement* mediaElement = mediaElementParent(o->node());
if (mediaElement) {
i.context->setStrokeColor(Color(0, 0xff, 0));
- IntPoint right = IntPoint(left.x() + mediaElement->percentLoaded() * (r.right() - r.x() - 4), (r.y() + r.bottom()) / 2);
+ IntPoint right = IntPoint(left.x() + mediaElement->percentLoaded() * (r.maxX() - r.x() - 4), (r.y() + r.maxY()) / 2);
i.context->drawLine(left, right);
left = right;
}
#endif
i.context->setStrokeColor(Color::black, ColorSpaceDeviceRGB);
- i.context->drawLine(left, IntPoint(r.right() - 2, left.y()));
+ i.context->drawLine(left, IntPoint(r.maxX() - 2, left.y()));
i.context->restore();
return rc;
}
@@ -566,14 +566,14 @@ bool RenderThemeWinCE::paintMediaMuteButton(RenderObject* o, const PaintInfo& pa
FloatPoint pts[6] = {
FloatPoint(imRect.x() + 1, imRect.y() + imRect.height() / 3.0),
FloatPoint(imRect.x() + 1 + imRect.width() / 2.0, imRect.y() + imRect.height() / 3.0),
- FloatPoint(imRect.right() - 1, imRect.y()),
- FloatPoint(imRect.right() - 1, imRect.bottom()),
+ FloatPoint(imRect.maxX() - 1, imRect.y()),
+ FloatPoint(imRect.maxX() - 1, imRect.maxY()),
FloatPoint(imRect.x() + 1 + imRect.width() / 2.0, imRect.y() + 2.0 * imRect.height() / 3.0),
FloatPoint(imRect.x() + 1, imRect.y() + 2.0 * imRect.height() / 3.0)
};
paintInfo.context->drawConvexPolygon(6, pts);
if (muted)
- paintInfo.context->drawLine(IntPoint(imRect.right(), imRect.y()), IntPoint(imRect.x(), imRect.bottom()));
+ paintInfo.context->drawLine(IntPoint(imRect.maxX(), imRect.y()), IntPoint(imRect.x(), imRect.maxY()));
paintInfo.context->restore();
return rc;
}
@@ -595,7 +595,7 @@ bool RenderThemeWinCE::paintMediaPlayButton(RenderObject* o, const PaintInfo& pa
imRect.move(2.0 * width / 3.0, 0);
paintInfo.context->fillRect(imRect);
} else {
- FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint(imRect.right(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.x(), imRect.bottom()) };
+ FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint(imRect.maxX(), (imRect.y() + imRect.maxY()) / 2.0), FloatPoint(imRect.x(), imRect.maxY()) };
paintInfo.context->drawConvexPolygon(3, pts);
}
paintInfo.context->restore();
@@ -607,8 +607,8 @@ bool RenderThemeWinCE::paintMediaSeekBackButton(RenderObject* o, const PaintInfo
bool rc = paintButton(o, paintInfo, r);
FloatRect imRect = r;
imRect.inflate(-3);
- FloatPoint pts[3] = { FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.y()), FloatPoint(imRect.x(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.bottom()) };
- FloatPoint pts2[3] = { FloatPoint(imRect.right(), imRect.y()), FloatPoint((imRect.x() + imRect.right()) / 2.0, (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.right(), imRect.bottom()) };
+ FloatPoint pts[3] = { FloatPoint((imRect.x() + imRect.maxX()) / 2.0, imRect.y()), FloatPoint(imRect.x(), (imRect.y() + imRect.maxY()) / 2.0), FloatPoint((imRect.x() + imRect.maxX()) / 2.0, imRect.maxY()) };
+ FloatPoint pts2[3] = { FloatPoint(imRect.maxX(), imRect.y()), FloatPoint((imRect.x() + imRect.maxX()) / 2.0, (imRect.y() + imRect.maxY()) / 2.0), FloatPoint(imRect.maxX(), imRect.maxY()) };
paintInfo.context->save();
paintInfo.context->setStrokeColor(Color::black);
paintInfo.context->setFillColor(Color::black);
@@ -623,8 +623,8 @@ bool RenderThemeWinCE::paintMediaSeekForwardButton(RenderObject* o, const PaintI
bool rc = paintButton(o, paintInfo, r);
FloatRect imRect = r;
imRect.inflate(-3);
- FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint((imRect.x() + imRect.right()) / 2.0, (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.x(), imRect.bottom()) };
- FloatPoint pts2[3] = { FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.y()), FloatPoint(imRect.right(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.bottom()) };
+ FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint((imRect.x() + imRect.maxX()) / 2.0, (imRect.y() + imRect.maxY()) / 2.0), FloatPoint(imRect.x(), imRect.maxY()) };
+ FloatPoint pts2[3] = { FloatPoint((imRect.x() + imRect.maxX()) / 2.0, imRect.y()), FloatPoint(imRect.maxX(), (imRect.y() + imRect.maxY()) / 2.0), FloatPoint((imRect.x() + imRect.maxX()) / 2.0, imRect.maxY()) };
paintInfo.context->save();
paintInfo.context->setStrokeColor(Color::black);
paintInfo.context->setFillColor(Color::black);
diff --git a/Source/WebCore/rendering/RenderTreeAsText.cpp b/Source/WebCore/rendering/RenderTreeAsText.cpp
index 2e64999..a81163b 100644
--- a/Source/WebCore/rendering/RenderTreeAsText.cpp
+++ b/Source/WebCore/rendering/RenderTreeAsText.cpp
@@ -27,7 +27,6 @@
#include "RenderTreeAsText.h"
#include "CSSMutableStyleDeclaration.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "Frame.h"
#include "FrameView.h"
@@ -48,6 +47,7 @@
#include "SelectionController.h"
#include <wtf/UnusedParam.h>
#include <wtf/Vector.h>
+#include <wtf/unicode/CharacterNames.h>
#if ENABLE(SVG)
#include "RenderSVGContainer.h"
@@ -621,10 +621,10 @@ static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLaye
// FIXME: Apply overflow to the root layer to not break every test. Complete hack. Sigh.
IntRect paintDirtyRect(paintRect);
if (rootLayer == l) {
- paintDirtyRect.setWidth(max(paintDirtyRect.width(), rootLayer->renderBox()->rightLayoutOverflow()));
- paintDirtyRect.setHeight(max(paintDirtyRect.height(), rootLayer->renderBox()->bottomLayoutOverflow()));
- l->setWidth(max(l->width(), l->renderBox()->rightLayoutOverflow()));
- l->setHeight(max(l->height(), l->renderBox()->bottomLayoutOverflow()));
+ paintDirtyRect.setWidth(max(paintDirtyRect.width(), rootLayer->renderBox()->maxXLayoutOverflow()));
+ paintDirtyRect.setHeight(max(paintDirtyRect.height(), rootLayer->renderBox()->maxYLayoutOverflow()));
+ l->setWidth(max(l->width(), l->renderBox()->maxXLayoutOverflow()));
+ l->setHeight(max(l->height(), l->renderBox()->maxYLayoutOverflow()));
}
// Calculate the clip rects we should use.
@@ -769,13 +769,12 @@ String counterValueForElement(Element* element)
element->document()->updateLayout();
TextStream stream;
bool isFirstCounter = true;
- // The counter renderers should be children of anonymous children
- // (i.e., :before or :after pseudo-elements).
+ // The counter renderers should be children of :before or :after pseudo-elements.
if (RenderObject* renderer = element->renderer()) {
- for (RenderObject* child = renderer->firstChild(); child; child = child->nextSibling()) {
- if (child->isAnonymous())
- writeCounterValuesFromChildren(stream, child, isFirstCounter);
- }
+ if (RenderObject* pseudoElement = renderer->beforePseudoElementRenderer())
+ writeCounterValuesFromChildren(stream, pseudoElement, isFirstCounter);
+ if (RenderObject* pseudoElement = renderer->afterPseudoElementRenderer())
+ writeCounterValuesFromChildren(stream, pseudoElement, isFirstCounter);
}
return stream.release();
}
diff --git a/Source/WebCore/rendering/RenderVideo.cpp b/Source/WebCore/rendering/RenderVideo.cpp
index 0f3b551..1ae736b 100644
--- a/Source/WebCore/rendering/RenderVideo.cpp
+++ b/Source/WebCore/rendering/RenderVideo.cpp
@@ -56,7 +56,7 @@ RenderVideo::RenderVideo(HTMLVideoElement* video)
RenderVideo::~RenderVideo()
{
- if (MediaPlayer* p = player()) {
+ if (MediaPlayer* p = mediaElement()->player()) {
p->setVisible(false);
p->setFrameView(0);
}
@@ -108,9 +108,9 @@ IntSize RenderVideo::calculateIntrinsicSize()
// The intrinsic height of a video element's playback area is the intrinsic height
// of the video resource, if that is available; otherwise it is the intrinsic
// height of the poster frame, if that is available; otherwise it is 150 CSS pixels.
-
- if (player() && video->readyState() >= HTMLVideoElement::HAVE_METADATA)
- return player()->naturalSize();
+ MediaPlayer* player = mediaElement()->player();
+ if (player && video->readyState() >= HTMLVideoElement::HAVE_METADATA)
+ return player->naturalSize();
if (video->shouldDisplayPosterImage() && !m_cachedImageSize.isEmpty() && !imageResource()->errorOccurred())
return m_cachedImageSize;
@@ -186,7 +186,7 @@ bool RenderVideo::shouldDisplayVideo() const
void RenderVideo::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
{
- MediaPlayer* mediaPlayer = player();
+ MediaPlayer* mediaPlayer = mediaElement()->player();
bool displayingPoster = videoElement()->shouldDisplayPosterImage();
if (!displayingPoster) {
@@ -228,7 +228,7 @@ void RenderVideo::updatePlayer()
{
updateIntrinsicSize();
- MediaPlayer* mediaPlayer = player();
+ MediaPlayer* mediaPlayer = mediaElement()->player();
if (!mediaPlayer)
return;
@@ -265,7 +265,7 @@ int RenderVideo::minimumReplacedHeight() const
#if USE(ACCELERATED_COMPOSITING)
bool RenderVideo::supportsAcceleratedRendering() const
{
- MediaPlayer* p = player();
+ MediaPlayer* p = mediaElement()->player();
if (p)
return p->supportsAcceleratedRendering();
@@ -274,7 +274,7 @@ bool RenderVideo::supportsAcceleratedRendering() const
void RenderVideo::acceleratedRenderingStateChanged()
{
- MediaPlayer* p = player();
+ MediaPlayer* p = mediaElement()->player();
if (p)
p->acceleratedRenderingStateChanged();
}
diff --git a/Source/WebCore/rendering/RenderView.cpp b/Source/WebCore/rendering/RenderView.cpp
index cdd21fa..d25240b 100644
--- a/Source/WebCore/rendering/RenderView.cpp
+++ b/Source/WebCore/rendering/RenderView.cpp
@@ -112,7 +112,7 @@ void RenderView::layout()
setPageLogicalHeight(0);
if (printing())
- m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = width();
+ m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = logicalWidth();
// Use calcWidth/Height to get the new width/height, since this will take the full page zoom factor into account.
bool relayoutChildren = !printing() && (!m_frameView || width() != viewWidth() || height() != viewHeight());
@@ -156,13 +156,13 @@ void RenderView::mapLocalToContainer(RenderBoxModelObject* repaintContainer, boo
}
if (fixed && m_frameView)
- transformState.move(m_frameView->scrollOffset());
+ transformState.move(m_frameView->scrollOffsetForFixedPosition());
}
void RenderView::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState& transformState) const
{
if (fixed && m_frameView)
- transformState.move(-m_frameView->scrollOffset());
+ transformState.move(-m_frameView->scrollOffsetForFixedPosition());
if (useTransforms && shouldUseTransformFromContainer(0)) {
TransformationMatrix t;
@@ -311,13 +311,13 @@ void RenderView::computeRectForRepaint(RenderBoxModelObject* repaintContainer, I
// We have to flip by hand since the view's logical height has not been determined. We
// can use the viewport width and height.
if (style()->isHorizontalWritingMode())
- rect.setY(viewHeight() - rect.bottom());
+ rect.setY(viewHeight() - rect.maxY());
else
- rect.setX(viewWidth() - rect.right());
+ rect.setX(viewWidth() - rect.maxX());
}
if (fixed && m_frameView)
- rect.move(m_frameView->scrollX(), m_frameView->scrollY());
+ rect.move(m_frameView->scrollXForFixedPosition(), m_frameView->scrollYForFixedPosition());
// Apply our transform if we have one (because of full page zooming).
if (m_layer && m_layer->transform())
@@ -658,7 +658,7 @@ IntRect RenderView::viewRect() const
int RenderView::docTop() const
{
- IntRect overflowRect(0, topLayoutOverflow(), 0, bottomLayoutOverflow() - topLayoutOverflow());
+ IntRect overflowRect(0, minYLayoutOverflow(), 0, maxYLayoutOverflow() - minYLayoutOverflow());
flipForWritingMode(overflowRect);
if (hasTransform())
overflowRect = layer()->currentTransform().mapRect(overflowRect);
@@ -671,7 +671,7 @@ int RenderView::docBottom() const
flipForWritingMode(overflowRect);
if (hasTransform())
overflowRect = layer()->currentTransform().mapRect(overflowRect);
- return overflowRect.bottom();
+ return overflowRect.maxY();
}
int RenderView::docLeft() const
@@ -689,7 +689,7 @@ int RenderView::docRight() const
flipForWritingMode(overflowRect);
if (hasTransform())
overflowRect = layer()->currentTransform().mapRect(overflowRect);
- return overflowRect.right();
+ return overflowRect.maxX();
}
int RenderView::viewHeight() const
diff --git a/Source/WebCore/rendering/RenderWidget.cpp b/Source/WebCore/rendering/RenderWidget.cpp
index d4b8ba6..13b572d 100644
--- a/Source/WebCore/rendering/RenderWidget.cpp
+++ b/Source/WebCore/rendering/RenderWidget.cpp
@@ -120,8 +120,6 @@ void RenderWidget::destroy()
if (RenderView* v = view())
v->removeWidget(this);
- if (m_hasCounterNodeMap)
- RenderCounter::destroyCounterNodes(this);
if (AXObjectCache::accessibilityEnabled()) {
document()->axObjectCache()->childrenChanged(this->parent());
@@ -129,6 +127,9 @@ void RenderWidget::destroy()
}
remove();
+ if (m_hasCounterNodeMap)
+ RenderCounter::destroyCounterNodes(this);
+
setWidget(0);
// removes from override size map
diff --git a/Source/WebCore/rendering/RenderingAllInOne.cpp b/Source/WebCore/rendering/RenderingAllInOne.cpp
index faa3566..760f02d 100644
--- a/Source/WebCore/rendering/RenderingAllInOne.cpp
+++ b/Source/WebCore/rendering/RenderingAllInOne.cpp
@@ -45,6 +45,7 @@
#include "RenderBox.cpp"
#include "RenderBoxModelObject.cpp"
#include "RenderButton.cpp"
+#include "RenderCombineText.cpp"
#include "RenderCounter.cpp"
#include "RenderDataGrid.cpp"
#include "RenderDetails.cpp"
diff --git a/Source/WebCore/rendering/RootInlineBox.cpp b/Source/WebCore/rendering/RootInlineBox.cpp
index e9e2029..aa87683 100644
--- a/Source/WebCore/rendering/RootInlineBox.cpp
+++ b/Source/WebCore/rendering/RootInlineBox.cpp
@@ -544,14 +544,14 @@ IntRect RootInlineBox::paddedLayoutOverflowRect(int endPadding) const
if (isHorizontal()) {
if (isLeftToRightDirection())
- lineLayoutOverflow.shiftRightEdgeTo(max(lineLayoutOverflow.right(), logicalRight() + endPadding));
+ lineLayoutOverflow.shiftMaxXEdgeTo(max(lineLayoutOverflow.maxX(), logicalRight() + endPadding));
else
- lineLayoutOverflow.shiftLeftEdgeTo(min(lineLayoutOverflow.x(), logicalLeft() - endPadding));
+ lineLayoutOverflow.shiftXEdgeTo(min(lineLayoutOverflow.x(), logicalLeft() - endPadding));
} else {
if (isLeftToRightDirection())
- lineLayoutOverflow.shiftBottomEdgeTo(max(lineLayoutOverflow.bottom(), logicalRight() + endPadding));
+ lineLayoutOverflow.shiftMaxYEdgeTo(max(lineLayoutOverflow.maxY(), logicalRight() + endPadding));
else
- lineLayoutOverflow.shiftTopEdgeTo(min(lineLayoutOverflow.y(), logicalRight() - endPadding));
+ lineLayoutOverflow.shiftYEdgeTo(min(lineLayoutOverflow.y(), logicalRight() - endPadding));
}
return lineLayoutOverflow;
diff --git a/Source/WebCore/rendering/ShadowElement.cpp b/Source/WebCore/rendering/ShadowElement.cpp
index e1b247c..5b1a962 100644
--- a/Source/WebCore/rendering/ShadowElement.cpp
+++ b/Source/WebCore/rendering/ShadowElement.cpp
@@ -114,7 +114,7 @@ PassRefPtr<ShadowInputElement> ShadowInputElement::create(HTMLElement* shadowPar
}
ShadowInputElement::ShadowInputElement(HTMLElement* shadowParent)
- : ShadowElement<HTMLInputElement>(inputTag, shadowParent)
+ : ShadowElement<HTMLInputElement>(inputTag, shadowParent, 0, false)
{
}
diff --git a/Source/WebCore/rendering/ShadowElement.h b/Source/WebCore/rendering/ShadowElement.h
index 8bcb34e..9a5d118 100644
--- a/Source/WebCore/rendering/ShadowElement.h
+++ b/Source/WebCore/rendering/ShadowElement.h
@@ -43,6 +43,12 @@ protected:
BaseElement::setShadowHost(shadowParent);
}
+ ShadowElement(const QualifiedName& name, HTMLElement* shadowParent, HTMLFormElement* form, bool createdByParser)
+ : BaseElement(name, shadowParent->document(), form, createdByParser)
+ {
+ BaseElement::setShadowHost(shadowParent);
+ }
+
public:
virtual void detach();
};
diff --git a/Source/WebCore/rendering/TextControlInnerElements.cpp b/Source/WebCore/rendering/TextControlInnerElements.cpp
index 7b1b36f..1162999 100644
--- a/Source/WebCore/rendering/TextControlInnerElements.cpp
+++ b/Source/WebCore/rendering/TextControlInnerElements.cpp
@@ -77,7 +77,6 @@ VisiblePosition RenderTextControlInnerBlock::positionForPoint(const IntPoint& po
TextControlInnerElement::TextControlInnerElement(Document* document, HTMLElement* shadowParent)
: HTMLDivElement(divTag, document)
- , m_shadowParent(shadowParent)
{
setShadowHost(shadowParent);
}
@@ -220,7 +219,7 @@ void SearchFieldCancelButtonElement::detach()
void SearchFieldCancelButtonElement::defaultEventHandler(Event* event)
{
// If the element is visible, on mouseup, clear the value, and set selection
- HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowAncestorNode());
+ RefPtr<HTMLInputElement> input(static_cast<HTMLInputElement*>(shadowAncestorNode()));
if (event->type() == eventNames().mousedownEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton) {
if (renderer() && renderer()->visibleToHitTesting()) {
if (Frame* frame = document()->frame()) {
@@ -233,13 +232,12 @@ void SearchFieldCancelButtonElement::defaultEventHandler(Event* event)
event->setDefaultHandled();
}
if (event->type() == eventNames().mouseupEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton) {
- if (m_capturing && renderer() && renderer()->visibleToHitTesting()) {
+ if (m_capturing) {
if (Frame* frame = document()->frame()) {
frame->eventHandler()->setCapturingMouseEventsNode(0);
m_capturing = false;
}
if (hovered()) {
- RefPtr<HTMLInputElement> protector(input);
String oldValue = input->value();
input->setValue("");
if (!oldValue.isEmpty()) {
@@ -272,6 +270,18 @@ PassRefPtr<SpinButtonElement> SpinButtonElement::create(HTMLElement* shadowParen
return adoptRef(new SpinButtonElement(shadowParent));
}
+void SpinButtonElement::detach()
+{
+ stopRepeatingTimer();
+ if (m_capturing) {
+ if (Frame* frame = document()->frame()) {
+ frame->eventHandler()->setCapturingMouseEventsNode(0);
+ m_capturing = false;
+ }
+ }
+ TextControlInnerElement::detach();
+}
+
void SpinButtonElement::defaultEventHandler(Event* event)
{
if (!event->isMouseEvent()) {
@@ -287,7 +297,7 @@ void SpinButtonElement::defaultEventHandler(Event* event)
return;
}
- HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowAncestorNode());
+ RefPtr<HTMLInputElement> input(static_cast<HTMLInputElement*>(shadowAncestorNode()));
if (input->disabled() || input->isReadOnlyFormControl()) {
if (!event->defaultHandled())
HTMLDivElement::defaultEventHandler(event);
@@ -298,12 +308,18 @@ void SpinButtonElement::defaultEventHandler(Event* event)
IntPoint local = roundedIntPoint(box->absoluteToLocal(mouseEvent->absoluteLocation(), false, true));
if (mouseEvent->type() == eventNames().mousedownEvent && mouseEvent->button() == LeftButton) {
if (box->borderBoxRect().contains(local)) {
- RefPtr<Node> protector(input);
+ // The following functions of HTMLInputElement may run JavaScript
+ // code which detaches this shadow node. We need to take a reference
+ // and check renderer() after such function calls.
+ RefPtr<Node> protector(this);
input->focus();
input->select();
- input->stepUpFromRenderer(m_upDownState == Up ? 1 : -1);
+ if (renderer()) {
+ input->stepUpFromRenderer(m_upDownState == Up ? 1 : -1);
+ if (renderer())
+ startRepeatingTimer();
+ }
event->setDefaultHandled();
- startRepeatingTimer();
}
} else if (mouseEvent->type() == eventNames().mouseupEvent && mouseEvent->button() == LeftButton)
stopRepeatingTimer();
@@ -404,8 +420,12 @@ void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
return;
}
+ // The call to focus() below dispatches a focus event, and an event handler in the page might
+ // remove the input element from DOM. To make sure it remains valid until we finish our work
+ // here, we take a temporary reference.
+ RefPtr<HTMLInputElement> input(static_cast<HTMLInputElement*>(shadowAncestorNode()));
+
// On mouse down, select the text and set focus.
- HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowAncestorNode());
if (event->type() == eventNames().mousedownEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton) {
if (renderer() && renderer()->visibleToHitTesting()) {
if (Frame* frame = document()->frame()) {
@@ -413,10 +433,6 @@ void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
m_capturing = true;
}
}
- // The call to focus() below dispatches a focus event, and an event handler in the page might
- // remove the input element from DOM. To make sure it remains valid until we finish our work
- // here, we take a temporary reference.
- RefPtr<HTMLInputElement> holdRef(input);
RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
input->focus();
input->select();
@@ -483,11 +499,10 @@ void InputFieldSpeechButtonElement::setRecognitionResult(int, const SpeechInputR
{
m_results = results;
- HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowAncestorNode());
// The call to setValue() below dispatches an event, and an event handler in the page might
// remove the input element from DOM. To make sure it remains valid until we finish our work
// here, we take a temporary reference.
- RefPtr<HTMLInputElement> holdRef(input);
+ RefPtr<HTMLInputElement> input(static_cast<HTMLInputElement*>(shadowAncestorNode()));
RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
input->setValue(results.isEmpty() ? "" : results[0]->utterance());
input->dispatchEvent(SpeechInputEvent::create(eventNames().webkitspeechchangeEvent, results));
diff --git a/Source/WebCore/rendering/TextControlInnerElements.h b/Source/WebCore/rendering/TextControlInnerElements.h
index bb77dcd..4ba7857 100644
--- a/Source/WebCore/rendering/TextControlInnerElements.h
+++ b/Source/WebCore/rendering/TextControlInnerElements.h
@@ -48,8 +48,6 @@ protected:
private:
virtual bool isMouseFocusable() const { return false; }
-
- RefPtr<HTMLElement> m_shadowParent;
};
class TextControlInnerTextElement : public TextControlInnerElement {
@@ -101,6 +99,7 @@ public:
private:
SpinButtonElement(HTMLElement*);
+ virtual void detach();
virtual bool isSpinButtonElement() const { return true; }
// FIXME: shadowAncestorNode() should be const.
virtual bool isEnabledFormControl() const { return static_cast<Element*>(const_cast<SpinButtonElement*>(this)->shadowAncestorNode())->isEnabledFormControl(); }
diff --git a/Source/WebCore/rendering/TransformState.cpp b/Source/WebCore/rendering/TransformState.cpp
index ecc614e..9f177ea 100644
--- a/Source/WebCore/rendering/TransformState.cpp
+++ b/Source/WebCore/rendering/TransformState.cpp
@@ -60,9 +60,9 @@ void TransformState::applyTransform(const TransformationMatrix& transformFromCon
// If we have an accumulated transform from last time, multiply in this transform
if (m_accumulatedTransform) {
if (m_direction == ApplyTransformDirection)
- m_accumulatedTransform->multiply(transformFromContainer);
+ m_accumulatedTransform.set(new TransformationMatrix(transformFromContainer * *m_accumulatedTransform));
else
- m_accumulatedTransform->multLeft(transformFromContainer);
+ m_accumulatedTransform->multiply(transformFromContainer);
} else if (accumulate == AccumulateTransform) {
// Make one if we started to accumulate
m_accumulatedTransform.set(new TransformationMatrix(transformFromContainer));
@@ -140,7 +140,7 @@ void HitTestingTransformState::translate(int x, int y, TransformAccumulation acc
void HitTestingTransformState::applyTransform(const TransformationMatrix& transformFromContainer, TransformAccumulation accumulate)
{
- m_accumulatedTransform.multLeft(transformFromContainer);
+ m_accumulatedTransform.multiply(transformFromContainer);
if (accumulate == FlattenTransform)
flattenWithTransform(m_accumulatedTransform);
diff --git a/Source/WebCore/rendering/break_lines.cpp b/Source/WebCore/rendering/break_lines.cpp
index 16bfcc2..b888fb8 100644
--- a/Source/WebCore/rendering/break_lines.cpp
+++ b/Source/WebCore/rendering/break_lines.cpp
@@ -26,9 +26,9 @@
#include "config.h"
#include "break_lines.h"
-#include "CharacterNames.h"
#include "TextBreakIterator.h"
#include <wtf/StdLibExtras.h>
+#include <wtf/unicode/CharacterNames.h>
#if PLATFORM(MAC)
#include <CoreServices/CoreServices.h>
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
index 9d80fbe..48d3f39 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
+++ b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
@@ -176,7 +176,7 @@ int RenderMathMLFraction::baselinePosition(FontBaseline, bool firstLine, LineDir
refStyle = previousSibling()->style();
else if (nextSibling())
refStyle = nextSibling()->style();
- int shift = int(ceil((refStyle->font().xHeight() + 1) / 2));
+ int shift = int(ceil((refStyle->fontMetrics().xHeight() + 1) / 2));
return numerator->offsetHeight() + shift;
}
return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode);
diff --git a/Source/WebCore/rendering/mathml/RenderMathMLOperator.h b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
index 6501494..3ef15c5 100644
--- a/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
+++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h
@@ -28,8 +28,8 @@
#if ENABLE(MATHML)
-#include "CharacterNames.h"
#include "RenderMathMLBlock.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/rendering/style/RenderStyle.cpp b/Source/WebCore/rendering/style/RenderStyle.cpp
index 2836fb9..b76a350 100644
--- a/Source/WebCore/rendering/style/RenderStyle.cpp
+++ b/Source/WebCore/rendering/style/RenderStyle.cpp
@@ -462,7 +462,8 @@ StyleDifference RenderStyle::diff(const RenderStyle* other, unsigned& changedCon
inherited_flags._text_transform != other->inherited_flags._text_transform ||
inherited_flags._direction != other->inherited_flags._direction ||
inherited_flags._white_space != other->inherited_flags._white_space ||
- noninherited_flags._clear != other->noninherited_flags._clear)
+ noninherited_flags._clear != other->noninherited_flags._clear ||
+ noninherited_flags._unicodeBidi != other->noninherited_flags._unicodeBidi)
return StyleDifferenceLayout;
// Check block flow direction.
diff --git a/Source/WebCore/rendering/style/RenderStyle.h b/Source/WebCore/rendering/style/RenderStyle.h
index 9d5239b..7b79db1 100644
--- a/Source/WebCore/rendering/style/RenderStyle.h
+++ b/Source/WebCore/rendering/style/RenderStyle.h
@@ -165,7 +165,6 @@ protected:
(_text_align == other._text_align) &&
(_text_transform == other._text_transform) &&
(_text_decorations == other._text_decorations) &&
- (_text_transform == other._text_transform) &&
(_cursor_style == other._cursor_style) &&
(_direction == other._direction) &&
(_border_collapse == other._border_collapse) &&
@@ -463,6 +462,7 @@ public:
ETableLayout tableLayout() const { return static_cast<ETableLayout>(noninherited_flags._table_layout); }
const Font& font() const { return inherited->font; }
+ const FontMetrics& fontMetrics() const { return inherited->font.fontMetrics(); }
const FontDescription& fontDescription() const { return inherited->font.fontDescription(); }
int fontSize() const { return inherited->font.pixelSize(); }
@@ -487,7 +487,7 @@ public:
// Negative value means the line height is not set. Use the font's built-in spacing.
if (lh.isNegative())
- return font().lineSpacing();
+ return fontMetrics().lineSpacing();
if (lh.isPercent())
return lh.calcMinValue(fontSize());
@@ -727,6 +727,7 @@ public:
bool hasMask() const { return rareNonInheritedData->m_mask.hasImage() || rareNonInheritedData->m_maskBoxImage.hasImage(); }
TextCombine textCombine() const { return static_cast<TextCombine>(rareNonInheritedData->m_textCombine); }
+ bool hasTextCombine() const { return textCombine() != TextCombineNone; }
// End CSS3 Getters
// Apple-specific property getter methods
diff --git a/Source/WebCore/rendering/style/RenderStyleConstants.h b/Source/WebCore/rendering/style/RenderStyleConstants.h
index 7cd4903..44cd3f5 100644
--- a/Source/WebCore/rendering/style/RenderStyleConstants.h
+++ b/Source/WebCore/rendering/style/RenderStyleConstants.h
@@ -68,14 +68,9 @@ enum StyleDifferenceContextSensitiveProperty {
enum PseudoId {
// The order must be NOP ID, public IDs, and then internal IDs.
NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR, FILE_UPLOAD_BUTTON, INPUT_PLACEHOLDER,
- SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON, MEDIA_CONTROLS_PANEL,
- MEDIA_CONTROLS_PLAY_BUTTON, MEDIA_CONTROLS_MUTE_BUTTON, MEDIA_CONTROLS_TIMELINE, MEDIA_CONTROLS_TIMELINE_CONTAINER,
- MEDIA_CONTROLS_VOLUME_SLIDER, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER, MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON,
- MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY,
- MEDIA_CONTROLS_SEEK_BACK_BUTTON, MEDIA_CONTROLS_SEEK_FORWARD_BUTTON, MEDIA_CONTROLS_FULLSCREEN_BUTTON, MEDIA_CONTROLS_REWIND_BUTTON,
- MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON, MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON,
- MEDIA_CONTROLS_STATUS_DISPLAY, SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
- INPUT_LIST_BUTTON, INPUT_SPEECH_BUTTON, INNER_SPIN_BUTTON, OUTER_SPIN_BUTTON, VISITED_LINK, PROGRESS_BAR_VALUE,
+ SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON,
+ SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
+ INPUT_LIST_BUTTON, INPUT_SPEECH_BUTTON, INNER_SPIN_BUTTON, OUTER_SPIN_BUTTON, VISITED_LINK,
METER_HORIZONTAL_BAR, METER_HORIZONTAL_OPTIMUM, METER_HORIZONTAL_SUBOPTIMAL, METER_HORIZONTAL_EVEN_LESS_GOOD,
METER_VERTICAL_BAR, METER_VERTICAL_OPTIMUM, METER_VERTICAL_SUBOPTIMAL, METER_VERTICAL_EVEN_LESS_GOOD,
AFTER_LAST_INTERNAL_PSEUDOID,
diff --git a/Source/WebCore/rendering/style/StyleCachedImage.cpp b/Source/WebCore/rendering/style/StyleCachedImage.cpp
index 1d7aba8..05cb0ea 100644
--- a/Source/WebCore/rendering/style/StyleCachedImage.cpp
+++ b/Source/WebCore/rendering/style/StyleCachedImage.cpp
@@ -84,7 +84,7 @@ void StyleCachedImage::removeClient(RenderObject* renderer)
return m_image->removeClient(renderer);
}
-Image* StyleCachedImage::image(RenderObject*, const IntSize&) const
+PassRefPtr<Image> StyleCachedImage::image(RenderObject*, const IntSize&) const
{
return m_image->image();
}
diff --git a/Source/WebCore/rendering/style/StyleCachedImage.h b/Source/WebCore/rendering/style/StyleCachedImage.h
index 3d6e1a2..2be6f4c 100644
--- a/Source/WebCore/rendering/style/StyleCachedImage.h
+++ b/Source/WebCore/rendering/style/StyleCachedImage.h
@@ -52,7 +52,7 @@ public:
virtual void setImageContainerSize(const IntSize&);
virtual void addClient(RenderObject*);
virtual void removeClient(RenderObject*);
- virtual Image* image(RenderObject*, const IntSize&) const;
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) const;
private:
StyleCachedImage(CachedImage* image)
diff --git a/Source/WebCore/rendering/style/StyleGeneratedImage.cpp b/Source/WebCore/rendering/style/StyleGeneratedImage.cpp
index 2322f5f..fa0aad7 100644
--- a/Source/WebCore/rendering/style/StyleGeneratedImage.cpp
+++ b/Source/WebCore/rendering/style/StyleGeneratedImage.cpp
@@ -72,7 +72,7 @@ void StyleGeneratedImage::removeClient(RenderObject* renderer)
m_generator->removeClient(renderer);
}
-Image* StyleGeneratedImage::image(RenderObject* renderer, const IntSize& size) const
+PassRefPtr<Image> StyleGeneratedImage::image(RenderObject* renderer, const IntSize& size) const
{
return m_generator->image(renderer, size);
}
diff --git a/Source/WebCore/rendering/style/StyleGeneratedImage.h b/Source/WebCore/rendering/style/StyleGeneratedImage.h
index 7be1f6a..8e6076a 100644
--- a/Source/WebCore/rendering/style/StyleGeneratedImage.h
+++ b/Source/WebCore/rendering/style/StyleGeneratedImage.h
@@ -51,7 +51,7 @@ public:
virtual void setImageContainerSize(const IntSize&);
virtual void addClient(RenderObject*);
virtual void removeClient(RenderObject*);
- virtual Image* image(RenderObject*, const IntSize&) const;
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) const;
private:
StyleGeneratedImage(CSSImageGeneratorValue* val, bool fixedSize)
diff --git a/Source/WebCore/rendering/style/StyleImage.h b/Source/WebCore/rendering/style/StyleImage.h
index ead8d4a..2c844f6 100644
--- a/Source/WebCore/rendering/style/StyleImage.h
+++ b/Source/WebCore/rendering/style/StyleImage.h
@@ -25,6 +25,7 @@
#define StyleImage_h
#include "CSSValue.h"
+#include "Image.h"
#include "IntSize.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -33,7 +34,6 @@
namespace WebCore {
class CSSValue;
-class Image;
class RenderObject;
typedef void* WrappedImagePtr;
@@ -59,7 +59,7 @@ public:
virtual void setImageContainerSize(const IntSize&) = 0;
virtual void addClient(RenderObject*) = 0;
virtual void removeClient(RenderObject*) = 0;
- virtual Image* image(RenderObject*, const IntSize&) const = 0;
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) const = 0;
virtual WrappedImagePtr data() const = 0;
virtual bool isCachedImage() const { return false; }
diff --git a/Source/WebCore/rendering/style/StylePendingImage.h b/Source/WebCore/rendering/style/StylePendingImage.h
index b0c9b01..60c993c 100644
--- a/Source/WebCore/rendering/style/StylePendingImage.h
+++ b/Source/WebCore/rendering/style/StylePendingImage.h
@@ -26,6 +26,7 @@
#ifndef StylePendingImage_h
#define StylePendingImage_h
+#include "Image.h"
#include "StyleImage.h"
namespace WebCore {
@@ -52,7 +53,7 @@ public:
virtual void setImageContainerSize(const IntSize&) { }
virtual void addClient(RenderObject*) { }
virtual void removeClient(RenderObject*) { }
- virtual Image* image(RenderObject*, const IntSize&) const
+ virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) const
{
ASSERT_NOT_REACHED();
return 0;
diff --git a/Source/WebCore/rendering/svg/RenderSVGImage.cpp b/Source/WebCore/rendering/svg/RenderSVGImage.cpp
index 0f5a55e..81a5cea 100644
--- a/Source/WebCore/rendering/svg/RenderSVGImage.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGImage.cpp
@@ -122,7 +122,7 @@ void RenderSVGImage::paint(PaintInfo& paintInfo, int, int)
PaintInfo savedInfo(childPaintInfo);
if (SVGRenderSupport::prepareToRenderSVGContent(this, childPaintInfo)) {
- Image* image = m_imageResource->image();
+ RefPtr<Image> image = m_imageResource->image();
FloatRect destRect = m_objectBoundingBox;
FloatRect srcRect(0, 0, image->width(), image->height());
@@ -130,7 +130,7 @@ void RenderSVGImage::paint(PaintInfo& paintInfo, int, int)
if (imageElement->preserveAspectRatio().align() != SVGPreserveAspectRatio::SVG_PRESERVEASPECTRATIO_NONE)
imageElement->preserveAspectRatio().transformRect(destRect, srcRect);
- childPaintInfo.context->drawImage(image, ColorSpaceDeviceRGB, destRect, srcRect);
+ childPaintInfo.context->drawImage(image.get(), ColorSpaceDeviceRGB, destRect, srcRect);
}
SVGRenderSupport::finishRenderSVGContent(this, childPaintInfo, savedInfo.context);
diff --git a/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp b/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
index 91ffb5c..a8aa0c8 100644
--- a/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
@@ -26,11 +26,14 @@
#if ENABLE(SVG)
#include "RenderSVGInlineText.h"
+#include "CSSStyleSelector.h"
#include "FloatConversion.h"
#include "FloatQuad.h"
#include "RenderBlock.h"
#include "RenderSVGRoot.h"
#include "RenderSVGText.h"
+#include "Settings.h"
+#include "SVGImageBufferTools.h"
#include "SVGInlineTextBox.h"
#include "SVGRootInlineBox.h"
#include "VisiblePosition.h"
@@ -63,6 +66,7 @@ static PassRefPtr<StringImpl> applySVGWhitespaceRules(PassRefPtr<StringImpl> str
RenderSVGInlineText::RenderSVGInlineText(Node* n, PassRefPtr<StringImpl> string)
: RenderText(n, applySVGWhitespaceRules(string, false))
+ , m_scalingFactor(1)
{
}
@@ -74,6 +78,8 @@ void RenderSVGInlineText::styleDidChange(StyleDifference diff, const RenderStyle
// The text metrics may be influenced by style changes.
if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAncestor(this))
textRenderer->setNeedsPositioningValuesUpdate();
+
+ updateScaledFont();
}
const RenderStyle* newStyle = style();
@@ -103,12 +109,12 @@ IntRect RenderSVGInlineText::localCaretRect(InlineBox* box, int caretOffset, int
// Use the edge of the selection rect to determine the caret rect.
if (static_cast<unsigned>(caretOffset) < textBox->start() + textBox->len()) {
IntRect rect = textBox->selectionRect(0, 0, caretOffset, caretOffset + 1);
- int x = box->isLeftToRightDirection() ? rect.x() : rect.right();
+ int x = box->isLeftToRightDirection() ? rect.x() : rect.maxX();
return IntRect(x, rect.y(), caretWidth, rect.height());
}
IntRect rect = textBox->selectionRect(0, 0, caretOffset - 1, caretOffset);
- int x = box->isLeftToRightDirection() ? rect.right() : rect.x();
+ int x = box->isLeftToRightDirection() ? rect.maxX() : rect.x();
return IntRect(x, rect.y(), caretWidth, rect.height());
}
@@ -159,9 +165,7 @@ VisiblePosition RenderSVGInlineText::positionForPoint(const IntPoint& point)
if (!firstTextBox() || !textLength())
return createVisiblePosition(0, DOWNSTREAM);
- RenderStyle* style = this->style();
- ASSERT(style);
- int baseline = style->font().ascent();
+ float baseline = m_scaledFont.fontMetrics().floatAscent();
RenderBlock* containingBlock = this->containingBlock();
ASSERT(containingBlock);
@@ -206,6 +210,39 @@ VisiblePosition RenderSVGInlineText::positionForPoint(const IntPoint& point)
return createVisiblePosition(offset + closestDistanceBox->start(), offset > 0 ? VP_UPSTREAM_IF_POSSIBLE : DOWNSTREAM);
}
+void RenderSVGInlineText::updateScaledFont()
+{
+ computeNewScaledFontForStyle(this, style(), m_scalingFactor, m_scaledFont);
+}
+
+void RenderSVGInlineText::computeNewScaledFontForStyle(RenderObject* renderer, const RenderStyle* style, float& scalingFactor, Font& scaledFont)
+{
+ ASSERT(style);
+ ASSERT(renderer);
+
+ Document* document = renderer->document();
+ ASSERT(document);
+
+ CSSStyleSelector* styleSelector = document->styleSelector();
+ ASSERT(styleSelector);
+
+ // Alter font-size to the right on-screen value, to avoid scaling the glyphs themselves.
+ AffineTransform ctm;
+ SVGImageBufferTools::calculateTransformationToOutermostSVGCoordinateSystem(renderer, ctm);
+ scalingFactor = narrowPrecisionToFloat(sqrt((pow(ctm.xScale(), 2) + pow(ctm.yScale(), 2)) / 2));
+ if (scalingFactor == 1 || !scalingFactor) {
+ scalingFactor = 1;
+ scaledFont = style->font();
+ return;
+ }
+
+ FontDescription fontDescription(style->fontDescription());
+ fontDescription.setComputedSize(fontDescription.computedSize() * scalingFactor);
+
+ scaledFont = Font(fontDescription, 0, 0);
+ scaledFont.update(styleSelector->fontSelector());
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/rendering/svg/RenderSVGInlineText.h b/Source/WebCore/rendering/svg/RenderSVGInlineText.h
index f5247f6..9eed8cd 100644
--- a/Source/WebCore/rendering/svg/RenderSVGInlineText.h
+++ b/Source/WebCore/rendering/svg/RenderSVGInlineText.h
@@ -40,6 +40,11 @@ public:
const SVGTextLayoutAttributes& layoutAttributes() const { return m_attributes; }
void storeLayoutAttributes(const SVGTextLayoutAttributes& attributes) { m_attributes = attributes; }
+ float scalingFactor() const { return m_scalingFactor; }
+ const Font& scaledFont() const { return m_scaledFont; }
+ void updateScaledFont();
+ static void computeNewScaledFontForStyle(RenderObject*, const RenderStyle*, float& scalingFactor, Font& scaledFont);
+
private:
virtual const char* renderName() const { return "RenderSVGInlineText"; }
@@ -57,6 +62,8 @@ private:
virtual IntRect linesBoundingBox() const;
virtual InlineTextBox* createTextBox();
+ float m_scalingFactor;
+ Font m_scaledFont;
SVGTextLayoutAttributes m_attributes;
};
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
index 4ba4e0a..96514af 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
@@ -111,7 +111,7 @@ PassRefPtr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(Filter* fi
builder->clearEffects();
return 0;
}
- builder->appendEffectToEffectReferences(effect);
+ builder->appendEffectToEffectReferences(effect, effectElement->renderer());
effectElement->setStandardAttributes(primitiveBoundingBoxMode, effect.get());
builder->add(effectElement->result(), effect);
}
@@ -208,13 +208,13 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*,
if (!lastEffect)
return false;
- RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(lastEffect, filterData->filter.get());
+ RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(lastEffect);
FloatRect subRegion = lastEffect->maxEffectRect();
// At least one FilterEffect has a too big image size,
// recalculate the effect sizes with new scale factors.
if (!fitsInMaximumImageSize(subRegion.size(), scale)) {
filterData->filter->setFilterResolution(scale);
- RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(lastEffect, filterData->filter.get());
+ RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(lastEffect);
}
// If the drawingRegion is empty, we have something like <g filter=".."/>.
@@ -290,16 +290,19 @@ void RenderSVGResourceFilter::postApplyResource(RenderObject* object, GraphicsCo
// This is the real filtering of the object. It just needs to be called on the
// initial filtering process. We just take the stored filter result on a
// second drawing.
- if (!filterData->builded) {
+ if (!filterData->builded)
filterData->filter->setSourceImage(filterData->sourceGraphicBuffer.release());
+
+ // Always true if filterData is just built (filterData->builded is false).
+ if (!lastEffect->hasResult()) {
lastEffect->apply();
#if !PLATFORM(CG)
ImageBuffer* resultImage = lastEffect->asImageBuffer();
if (resultImage)
resultImage->transformColorSpace(ColorSpaceLinearRGB, ColorSpaceDeviceRGB);
#endif
- filterData->builded = true;
}
+ filterData->builded = true;
ImageBuffer* resultImage = lastEffect->asImageBuffer();
if (resultImage) {
@@ -324,5 +327,31 @@ FloatRect RenderSVGResourceFilter::resourceBoundingBox(RenderObject* object)
return FloatRect();
}
+void RenderSVGResourceFilter::primitiveAttributeChanged(RenderObject* object, const QualifiedName& attribute)
+{
+ HashMap<RenderObject*, FilterData*>::iterator it = m_filter.begin();
+ HashMap<RenderObject*, FilterData*>::iterator end = m_filter.end();
+ SVGFilterPrimitiveStandardAttributes* primitve = static_cast<SVGFilterPrimitiveStandardAttributes*>(object->node());
+
+ for (; it != end; ++it) {
+ FilterData* filterData = it->second;
+ if (!filterData->builded)
+ continue;
+
+ SVGFilterBuilder* builder = filterData->builder.get();
+ FilterEffect* effect = builder->effectByRenderer(object);
+ if (!effect)
+ continue;
+ // Since all effects shares the same attribute value, all
+ // or none of them will be changed.
+ if (!primitve->setFilterEffectAttribute(effect, attribute))
+ return;
+ builder->clearResultsRecursive(effect);
+
+ // Repaint the image on the screen.
+ markClientForInvalidation(it->first, RepaintInvalidation);
+ }
+}
+
}
#endif
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
index f9a15ce..c809f23 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
@@ -64,6 +64,7 @@ public:
virtual ~RenderSVGResourceFilter();
virtual const char* renderName() const { return "RenderSVGResourceFilter"; }
+ virtual bool isSVGResourceFilter() const { return true; }
virtual void removeAllClientsFromCache(bool markForInvalidation = true);
virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
@@ -78,6 +79,8 @@ public:
SVGUnitTypes::SVGUnitType filterUnits() const { return toUnitType(static_cast<SVGFilterElement*>(node())->filterUnits()); }
SVGUnitTypes::SVGUnitType primitiveUnits() const { return toUnitType(static_cast<SVGFilterElement*>(node())->primitiveUnits()); }
+ void primitiveAttributeChanged(RenderObject*, const QualifiedName&);
+
virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
static RenderSVGResourceType s_resourceType;
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
index fc7362e..64df700 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
@@ -29,25 +29,29 @@
#if ENABLE(SVG) && ENABLE(FILTERS)
#include "RenderSVGResourceFilterPrimitive.h"
+#include "RenderSVGResource.h"
#include "SVGFEImage.h"
+#include "SVGFilter.h"
namespace WebCore {
-FloatRect RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(FilterEffect* effect, SVGFilter* filter)
+FloatRect RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(FilterEffect* effect)
{
FloatRect uniteRect;
FloatRect subregionBoundingBox = effect->effectBoundaries();
FloatRect subregion = subregionBoundingBox;
+ SVGFilter* filter = static_cast<SVGFilter*>(effect->filter());
+ ASSERT(filter);
if (effect->filterEffectType() != FilterEffectTypeTile) {
// FETurbulence, FEImage and FEFlood don't have input effects, take the filter region as unite rect.
if (unsigned numberOfInputEffects = effect->inputEffects().size()) {
for (unsigned i = 0; i < numberOfInputEffects; ++i)
- uniteRect.unite(determineFilterPrimitiveSubregion(effect->inputEffect(i), filter));
+ uniteRect.unite(determineFilterPrimitiveSubregion(effect->inputEffect(i)));
} else
uniteRect = filter->filterRegionInUserSpace();
} else {
- determineFilterPrimitiveSubregion(effect->inputEffect(0), filter);
+ determineFilterPrimitiveSubregion(effect->inputEffect(0));
uniteRect = filter->filterRegionInUserSpace();
}
@@ -90,7 +94,7 @@ FloatRect RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(Fi
// FEImage needs the unclipped subregion in absolute coordinates to determine the correct
// destination rect in combination with preserveAspectRatio.
if (effect->filterEffectType() == FilterEffectTypeImage)
- reinterpret_cast<FEImage*>(effect)->setAbsoluteSubregion(absoluteSubregion);
+ static_cast<FEImage*>(effect)->setAbsoluteSubregion(absoluteSubregion);
// Clip every filter effect to the filter region.
FloatRect absoluteScaledFilterRegion = filter->filterRegion();
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
index f25f62e..8176d29 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
@@ -30,25 +30,32 @@
#if ENABLE(SVG) && ENABLE(FILTERS)
#include "RenderSVGHiddenContainer.h"
-#include "SVGFilter.h"
-#include "SVGFilterPrimitiveStandardAttributes.h"
+#include "RenderSVGResourceFilter.h"
namespace WebCore {
+class FilterEffect;
+
class RenderSVGResourceFilterPrimitive : public RenderSVGHiddenContainer {
public:
-
- explicit RenderSVGResourceFilterPrimitive(SVGFilterPrimitiveStandardAttributes* filterPrimitiveElement)
+ explicit RenderSVGResourceFilterPrimitive(SVGStyledElement* filterPrimitiveElement)
: RenderSVGHiddenContainer(filterPrimitiveElement)
{
}
- // They depend on the RenderObject argument of RenderSVGResourceFilter::applyResource.
- static FloatRect determineFilterPrimitiveSubregion(FilterEffect*, SVGFilter*);
-
-private:
virtual const char* renderName() const { return "RenderSVGResourceFilterPrimitive"; }
virtual bool isSVGResourceFilterPrimitive() const { return true; }
+
+ // They depend on the RenderObject argument of RenderSVGResourceFilter::applyResource.
+ static FloatRect determineFilterPrimitiveSubregion(FilterEffect*);
+
+ inline void primitiveAttributeChanged(const QualifiedName& attribute)
+ {
+ RenderObject* filter = parent();
+ if (!filter || !filter->isSVGResourceFilter())
+ return;
+ static_cast<RenderSVGResourceFilter*>(filter)->primitiveAttributeChanged(this, attribute);
+ }
};
} // namespace WebCore
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
index 2a68d92..fcad27f 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
@@ -86,11 +86,10 @@ FloatRect RenderSVGResourceMarker::markerBoundaries(const AffineTransform& marke
const AffineTransform& RenderSVGResourceMarker::localToParentTransform() const
{
- AffineTransform viewportTranslation(viewportTransform());
- m_localToParentTransform = viewportTranslation.translateRight(m_viewport.x(), m_viewport.y());
+ m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_viewport.y()) * viewportTransform();
return m_localToParentTransform;
// If this class were ever given a localTransform(), then the above would read:
- // return viewportTransform() * localTransform() * viewportTranslation;
+ // return viewportTranslation * localTransform() * viewportTransform();
}
FloatPoint RenderSVGResourceMarker::referencePoint() const
diff --git a/Source/WebCore/rendering/svg/RenderSVGRoot.cpp b/Source/WebCore/rendering/svg/RenderSVGRoot.cpp
index 3a8dce9..30f72b9 100644
--- a/Source/WebCore/rendering/svg/RenderSVGRoot.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGRoot.cpp
@@ -261,18 +261,15 @@ IntSize RenderSVGRoot::borderOriginToContentBox() const
AffineTransform RenderSVGRoot::localToRepaintContainerTransform(const IntPoint& parentOriginInContainer) const
{
- AffineTransform parentToContainer(localToParentTransform());
- return parentToContainer.translateRight(parentOriginInContainer.x(), parentOriginInContainer.y());
+ return AffineTransform::translation(parentOriginInContainer.x(), parentOriginInContainer.y()) * localToParentTransform();
}
const AffineTransform& RenderSVGRoot::localToParentTransform() const
{
IntSize parentToBorderBoxOffset = parentOriginToBorderBox();
- AffineTransform borderBoxOriginToParentOrigin(localToBorderBoxTransform());
- borderBoxOriginToParentOrigin.translateRight(parentToBorderBoxOffset.width(), parentToBorderBoxOffset.height());
+ m_localToParentTransform = AffineTransform::translation(parentToBorderBoxOffset.width(), parentToBorderBoxOffset.height()) * localToBorderBoxTransform();
- m_localToParentTransform = borderBoxOriginToParentOrigin;
return m_localToParentTransform;
}
diff --git a/Source/WebCore/rendering/svg/RenderSVGText.cpp b/Source/WebCore/rendering/svg/RenderSVGText.cpp
index dad0b70..56d9306 100644
--- a/Source/WebCore/rendering/svg/RenderSVGText.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGText.cpp
@@ -33,7 +33,7 @@
#include "GraphicsContext.h"
#include "HitTestRequest.h"
#include "PointerEventsHitRules.h"
-#include "RenderLayer.h"
+#include "RenderSVGInlineText.h"
#include "RenderSVGResource.h"
#include "RenderSVGRoot.h"
#include "SVGLengthList.h"
@@ -91,6 +91,18 @@ void RenderSVGText::mapLocalToContainer(RenderBoxModelObject* repaintContainer,
SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState);
}
+static inline void recursiveUpdateScaledFont(RenderObject* start)
+{
+ for (RenderObject* child = start->firstChild(); child; child = child->nextSibling()) {
+ if (child->isSVGInlineText()) {
+ toRenderSVGInlineText(child)->updateScaledFont();
+ continue;
+ }
+
+ recursiveUpdateScaledFont(child);
+ }
+}
+
void RenderSVGText::layout()
{
ASSERT(needsLayout());
@@ -104,6 +116,13 @@ void RenderSVGText::layout()
updateCachedBoundariesInParents = true;
}
+ // If the root layout size changed (eg. window size changes) or the positioning values change, recompute the on-screen font size.
+ if (m_needsPositioningValuesUpdate || SVGRenderSupport::findTreeRootObject(this)->isLayoutSizeChanged()) {
+ recursiveUpdateScaledFont(this);
+ m_needsPositioningValuesUpdate = true;
+ updateCachedBoundariesInParents = true;
+ }
+
if (m_needsPositioningValuesUpdate) {
// Perform SVG text layout phase one (see SVGTextLayoutAttributesBuilder for details).
SVGTextLayoutAttributesBuilder layoutAttributesBuilder;
diff --git a/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
index 7f4b6f7..0f2f273 100644
--- a/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
@@ -72,11 +72,10 @@ AffineTransform RenderSVGViewportContainer::viewportTransform() const
const AffineTransform& RenderSVGViewportContainer::localToParentTransform() const
{
- AffineTransform viewportTranslation(viewportTransform());
- m_localToParentTransform = viewportTranslation.translateRight(m_viewport.x(), m_viewport.y());
+ m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_viewport.y()) * viewportTransform();
return m_localToParentTransform;
// If this class were ever given a localTransform(), then the above would read:
- // return viewportTransform() * localTransform() * viewportTranslation;
+ // return viewportTranslation * localTransform() * viewportTransform()
}
bool RenderSVGViewportContainer::pointIsInsideViewportClip(const FloatPoint& pointInParent)
diff --git a/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp b/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
index 2879f20..52976f2 100644
--- a/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
+++ b/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
@@ -30,6 +30,7 @@
#include "RenderSVGInlineText.h"
#include "RenderSVGResource.h"
#include "RenderSVGResourceSolidColor.h"
+#include "SVGImageBufferTools.h"
#include "SVGRootInlineBox.h"
#include "TextRun.h"
@@ -56,9 +57,12 @@ int SVGInlineTextBox::offsetForPosition(int, bool) const
int SVGInlineTextBox::offsetForPositionInFragment(const SVGTextFragment& fragment, float position, bool includePartialGlyphs) const
{
- RenderText* textRenderer = this->textRenderer();
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
ASSERT(textRenderer);
+ float scalingFactor = textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
+
RenderStyle* style = textRenderer->style();
ASSERT(style);
@@ -69,7 +73,7 @@ int SVGInlineTextBox::offsetForPositionInFragment(const SVGTextFragment& fragmen
if (!fragment.transform.isIdentity())
textRun.setHorizontalGlyphStretch(narrowPrecisionToFloat(fragment.transform.xScale()));
- return fragment.positionListOffset - start() + style->font().offsetForPosition(textRun, position, includePartialGlyphs);
+ return fragment.positionListOffset - start() + textRenderer->scaledFont().offsetForPosition(textRun, position * scalingFactor, includePartialGlyphs);
}
int SVGInlineTextBox::positionForOffset(int) const
@@ -82,10 +86,28 @@ int SVGInlineTextBox::positionForOffset(int) const
FloatRect SVGInlineTextBox::selectionRectForTextFragment(const SVGTextFragment& fragment, int startPosition, int endPosition, RenderStyle* style)
{
ASSERT(startPosition < endPosition);
+ ASSERT(style);
+
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
+ ASSERT(textRenderer);
+
+ float scalingFactor = textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
- const Font& font = style->font();
- FloatPoint textOrigin(fragment.x, fragment.y - font.ascent());
- return font.selectionRectForText(constructTextRun(style, fragment), textOrigin, fragment.height, startPosition, endPosition);
+ const Font& scaledFont = textRenderer->scaledFont();
+ const FontMetrics& scaledFontMetrics = scaledFont.fontMetrics();
+ FloatPoint textOrigin(fragment.x, fragment.y);
+ if (scalingFactor != 1)
+ textOrigin.scale(scalingFactor, scalingFactor);
+
+ textOrigin.move(0, -scaledFontMetrics.floatAscent());
+
+ FloatRect selectionRect = scaledFont.selectionRectForText(constructTextRun(style, fragment), textOrigin, fragment.height * scalingFactor, startPosition, endPosition);
+ if (scalingFactor == 1)
+ return selectionRect;
+
+ selectionRect.scale(1 / scalingFactor);
+ return selectionRect;
}
IntRect SVGInlineTextBox::selectionRect(int, int, int startPosition, int endPosition)
@@ -125,6 +147,13 @@ IntRect SVGInlineTextBox::selectionRect(int, int, int startPosition, int endPosi
return enclosingIntRect(selectionRect);
}
+static inline bool textShouldBePainted(RenderSVGInlineText* textRenderer)
+{
+ // Font::pixelSize(), returns FontDescription::computedPixelSize(), which returns "int(x + 0.5)".
+ // If the absolute font size on screen is below x=0.5, don't render anything.
+ return textRenderer->scaledFont().pixelSize();
+}
+
void SVGInlineTextBox::paintSelectionBackground(PaintInfo& paintInfo)
{
ASSERT(paintInfo.shouldPaintWithinRoot(renderer()));
@@ -148,6 +177,11 @@ void SVGInlineTextBox::paintSelectionBackground(PaintInfo& paintInfo)
if (!backgroundColor.isValid() || !backgroundColor.alpha())
return;
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
+ ASSERT(textRenderer);
+ if (!textShouldBePainted(textRenderer))
+ return;
+
RenderStyle* style = parentRenderer->style();
ASSERT(style);
@@ -222,6 +256,11 @@ void SVGInlineTextBox::paint(PaintInfo& paintInfo, int, int)
if (!hasSelection && paintSelectedTextOnly)
return;
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
+ ASSERT(textRenderer);
+ if (!textShouldBePainted(textRenderer))
+ return;
+
RenderStyle* style = parentRenderer->style();
ASSERT(style);
@@ -286,8 +325,9 @@ void SVGInlineTextBox::paint(PaintInfo& paintInfo, int, int)
ASSERT(!m_paintingResource);
}
-bool SVGInlineTextBox::acquirePaintingResource(GraphicsContext*& context, RenderObject* renderer, RenderStyle* style)
+bool SVGInlineTextBox::acquirePaintingResource(GraphicsContext*& context, float scalingFactor, RenderObject* renderer, RenderStyle* style)
{
+ ASSERT(scalingFactor);
ASSERT(renderer);
ASSERT(style);
ASSERT(m_paintingResourceMode != ApplyToDefaultMode);
@@ -315,6 +355,9 @@ bool SVGInlineTextBox::acquirePaintingResource(GraphicsContext*& context, Render
}
}
+ if (scalingFactor != 1 && m_paintingResourceMode & ApplyToStrokeMode)
+ context->setStrokeThickness(context->strokeThickness() * scalingFactor);
+
return true;
}
@@ -329,9 +372,9 @@ void SVGInlineTextBox::releasePaintingResource(GraphicsContext*& context, const
m_paintingResource = 0;
}
-bool SVGInlineTextBox::prepareGraphicsContextForTextPainting(GraphicsContext*& context, TextRun& textRun, RenderStyle* style)
+bool SVGInlineTextBox::prepareGraphicsContextForTextPainting(GraphicsContext*& context, float scalingFactor, TextRun& textRun, RenderStyle* style)
{
- bool acquiredResource = acquirePaintingResource(context, parent()->renderer(), style);
+ bool acquiredResource = acquirePaintingResource(context, scalingFactor, parent()->renderer(), style);
#if ENABLE(SVG_FONTS)
// SVG Fonts need access to the painting resource used to draw the current text chunk.
@@ -364,14 +407,12 @@ TextRun SVGInlineTextBox::constructTextRun(RenderStyle* style, const SVGTextFrag
, false /* allowTabs */
, 0 /* xPos, only relevant with allowTabs=true */
, 0 /* padding, only relevant for justified text, not relevant for SVG */
+ , TextRun::AllowTrailingExpansion
, direction() == RTL
, m_dirOverride || style->visuallyOrdered() /* directionalOverride */);
#if ENABLE(SVG_FONTS)
- RenderObject* parentRenderer = parent()->renderer();
- ASSERT(parentRenderer);
-
- run.setReferencingRenderObject(parentRenderer);
+ run.setReferencingRenderObject(text);
#endif
// Disable any word/character rounding.
@@ -409,16 +450,16 @@ bool SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates(const SVGText
return true;
}
-static inline float positionOffsetForDecoration(ETextDecoration decoration, const Font& font, float thickness)
+static inline float positionOffsetForDecoration(ETextDecoration decoration, const FontMetrics& fontMetrics, float thickness)
{
// FIXME: For SVG Fonts we need to use the attributes defined in the <font-face> if specified.
// Compatible with Batik/Opera.
if (decoration == UNDERLINE)
- return font.ascent() + thickness * 1.5f;
+ return fontMetrics.floatAscent() + thickness * 1.5f;
if (decoration == OVERLINE)
return thickness;
if (decoration == LINE_THROUGH)
- return font.ascent() * 5.0f / 8.0f;
+ return fontMetrics.floatAscent() * 5 / 8.0f;
ASSERT_NOT_REACHED();
return 0.0f;
@@ -486,22 +527,34 @@ void SVGInlineTextBox::paintDecorationWithStyle(GraphicsContext* context, ETextD
RenderStyle* decorationStyle = decorationRenderer->style();
ASSERT(decorationStyle);
- const Font& font = decorationStyle->font();
+ float scalingFactor = 1;
+ Font scaledFont;
+ RenderSVGInlineText::computeNewScaledFontForStyle(decorationRenderer, decorationStyle, scalingFactor, scaledFont);
+ ASSERT(scalingFactor);
// The initial y value refers to overline position.
- float thickness = thicknessForDecoration(decoration, font);
+ float thickness = thicknessForDecoration(decoration, scaledFont);
if (fragment.width <= 0 && thickness <= 0)
return;
- float y = fragment.y - font.ascent() + positionOffsetForDecoration(decoration, font, thickness);
-
- Path path;
- path.addRect(FloatRect(fragment.x, y, fragment.width, thickness));
+ FloatPoint decorationOrigin(fragment.x, fragment.y);
+ float width = fragment.width;
+ const FontMetrics& scaledFontMetrics = scaledFont.fontMetrics();
context->save();
+ if (scalingFactor != 1) {
+ width *= scalingFactor;
+ decorationOrigin.scale(scalingFactor, scalingFactor);
+ context->scale(FloatSize(1 / scalingFactor, 1 / scalingFactor));
+ }
- if (acquirePaintingResource(context, decorationRenderer, decorationStyle))
+ decorationOrigin.move(0, -scaledFontMetrics.floatAscent() + positionOffsetForDecoration(decoration, scaledFontMetrics, thickness));
+
+ Path path;
+ path.addRect(FloatRect(decorationOrigin, FloatSize(width, thickness)));
+
+ if (acquirePaintingResource(context, scalingFactor, decorationRenderer, decorationStyle))
releasePaintingResource(context, &path);
context->restore();
@@ -509,21 +562,41 @@ void SVGInlineTextBox::paintDecorationWithStyle(GraphicsContext* context, ETextD
void SVGInlineTextBox::paintTextWithShadows(GraphicsContext* context, RenderStyle* style, TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int endPosition)
{
- const Font& font = style->font();
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
+ ASSERT(textRenderer);
+
+ float scalingFactor = textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
+
+ const Font& scaledFont = textRenderer->scaledFont();
const ShadowData* shadow = style->textShadow();
FloatPoint textOrigin(fragment.x, fragment.y);
- FloatRect shadowRect(FloatPoint(textOrigin.x(), textOrigin.y() - font.ascent()), FloatSize(fragment.width, fragment.height));
+ FloatSize textSize(fragment.width, fragment.height);
+
+ if (scalingFactor != 1) {
+ textOrigin.scale(scalingFactor, scalingFactor);
+ textSize.scale(scalingFactor);
+ }
+
+ FloatRect shadowRect(FloatPoint(textOrigin.x(), textOrigin.y() - scaledFont.fontMetrics().floatAscent()), textSize);
do {
- if (!prepareGraphicsContextForTextPainting(context, textRun, style))
+ if (!prepareGraphicsContextForTextPainting(context, scalingFactor, textRun, style))
break;
FloatSize extraOffset;
if (shadow)
extraOffset = applyShadowToGraphicsContext(context, shadow, shadowRect, false /* stroked */, true /* opaque */, true /* horizontal */);
- font.drawText(context, textRun, textOrigin + extraOffset, startPosition, endPosition);
+ if (scalingFactor != 1)
+ context->scale(FloatSize(1 / scalingFactor, 1 / scalingFactor));
+
+ scaledFont.drawText(context, textRun, textOrigin + extraOffset, startPosition, endPosition);
+
+ if (scalingFactor != 1)
+ context->scale(FloatSize(scalingFactor, scalingFactor));
+
restoreGraphicsContextAfterTextPainting(context, textRun);
if (!shadow)
@@ -580,19 +653,18 @@ IntRect SVGInlineTextBox::calculateBoundaries() const
{
FloatRect textRect;
- RenderText* textRenderer = this->textRenderer();
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(this->textRenderer());
ASSERT(textRenderer);
- RenderStyle* style = textRenderer->style();
- ASSERT(style);
+ float scalingFactor = textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
- int baseline = baselinePosition(AlphabeticBaseline);
- int heightDifference = baseline - style->font().ascent();
+ float baseline = textRenderer->scaledFont().fontMetrics().floatAscent() / scalingFactor;
unsigned textFragmentsSize = m_textFragments.size();
for (unsigned i = 0; i < textFragmentsSize; ++i) {
const SVGTextFragment& fragment = m_textFragments.at(i);
- FloatRect fragmentRect(fragment.x, fragment.y - baseline, fragment.width, fragment.height + heightDifference);
+ FloatRect fragmentRect(fragment.x, fragment.y - baseline, fragment.width, fragment.height);
if (!fragment.transform.isIdentity())
fragmentRect = fragment.transform.mapRect(fragmentRect);
diff --git a/Source/WebCore/rendering/svg/SVGInlineTextBox.h b/Source/WebCore/rendering/svg/SVGInlineTextBox.h
index 0458de0..f2ca303 100644
--- a/Source/WebCore/rendering/svg/SVGInlineTextBox.h
+++ b/Source/WebCore/rendering/svg/SVGInlineTextBox.h
@@ -66,10 +66,10 @@ public:
private:
TextRun constructTextRun(RenderStyle*, const SVGTextFragment&) const;
- bool acquirePaintingResource(GraphicsContext*&, RenderObject*, RenderStyle*);
+ bool acquirePaintingResource(GraphicsContext*&, float scalingFactor, RenderObject*, RenderStyle*);
void releasePaintingResource(GraphicsContext*&, const Path*);
- bool prepareGraphicsContextForTextPainting(GraphicsContext*&, TextRun&, RenderStyle*);
+ bool prepareGraphicsContextForTextPainting(GraphicsContext*&, float scalingFactor, TextRun&, RenderStyle*);
void restoreGraphicsContextAfterTextPainting(GraphicsContext*&, TextRun&);
void paintDecoration(GraphicsContext*, ETextDecoration, const SVGTextFragment&);
diff --git a/Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp b/Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp
index 3b28d2b..c25ed79 100644
--- a/Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp
+++ b/Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp
@@ -310,7 +310,7 @@ void SVGTextLayoutEngine::finalizeTransformMatrices(Vector<SVGInlineTextBox*>& b
SVGTextFragment& fragment = fragments.at(i);
AffineTransform& transform = fragment.transform;
if (!transform.isIdentity()) {
- transform.translateRight(fragment.x, fragment.y);
+ transform = AffineTransform::translation(fragment.x, fragment.y) * transform;
transform.translate(-fragment.x, -fragment.y);
}
diff --git a/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp b/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp
index 3863322..4221f26 100644
--- a/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp
+++ b/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp
@@ -49,9 +49,9 @@ float SVGTextLayoutEngineBaseline::calculateBaselineShift(const SVGRenderStyle*
case BS_BASELINE:
return 0;
case BS_SUB:
- return -m_font.height() / 2;
+ return -m_font.fontMetrics().floatHeight() / 2;
case BS_SUPER:
- return m_font.height() / 2;
+ return m_font.fontMetrics().floatHeight() / 2;
default:
ASSERT_NOT_REACHED();
return 0;
@@ -122,27 +122,29 @@ float SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift(bool isVertic
ASSERT(baseline != AB_AUTO);
}
+ const FontMetrics& fontMetrics = m_font.fontMetrics();
+
// Note: http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling
switch (baseline) {
case AB_BASELINE:
return dominantBaselineToAlignmentBaseline(isVerticalText, textRendererParent);
case AB_BEFORE_EDGE:
case AB_TEXT_BEFORE_EDGE:
- return m_font.ascent();
+ return fontMetrics.floatAscent();
case AB_MIDDLE:
- return m_font.xHeight() / 2;
+ return fontMetrics.xHeight() / 2;
case AB_CENTRAL:
- return (m_font.ascent() - m_font.descent()) / 2;
+ return (fontMetrics.floatAscent() - fontMetrics.floatDescent()) / 2;
case AB_AFTER_EDGE:
case AB_TEXT_AFTER_EDGE:
case AB_IDEOGRAPHIC:
- return m_font.descent();
+ return fontMetrics.floatDescent();
case AB_ALPHABETIC:
return 0;
case AB_HANGING:
- return m_font.ascent() * 8 / 10.f;
+ return fontMetrics.floatAscent() * 8 / 10.f;
case AB_MATHEMATICAL:
- return m_font.ascent() / 2;
+ return fontMetrics.floatAscent() / 2;
default:
ASSERT_NOT_REACHED();
return 0;
@@ -192,12 +194,14 @@ float SVGTextLayoutEngineBaseline::calculateGlyphAdvanceAndOrientation(bool isVe
// Spec: If if the 'glyph-orientation-vertical' results in an orientation angle that is not a multiple of
// 180 degrees, then the current text position is incremented according to the horizontal metrics of the glyph.
+ const FontMetrics& fontMetrics = m_font.fontMetrics();
+
// Vertical orientation handling.
if (isVerticalText) {
- float ascentMinusDescent = m_font.ascent() - m_font.descent();
+ float ascentMinusDescent = fontMetrics.floatAscent() - fontMetrics.floatDescent();
if (!angle) {
xOrientationShift = (ascentMinusDescent - metrics.width()) / 2;
- yOrientationShift = m_font.ascent();
+ yOrientationShift = fontMetrics.floatAscent();
} else if (angle == 180)
xOrientationShift = (ascentMinusDescent + metrics.width()) / 2;
else if (angle == 270) {
@@ -217,7 +221,7 @@ float SVGTextLayoutEngineBaseline::calculateGlyphAdvanceAndOrientation(bool isVe
yOrientationShift = -metrics.width();
else if (angle == 180) {
xOrientationShift = metrics.width();
- yOrientationShift = -m_font.ascent();
+ yOrientationShift = -fontMetrics.floatAscent();
} else if (angle == 270)
xOrientationShift = metrics.width();
diff --git a/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp b/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp
index 6c54b67..e9aa127 100644
--- a/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp
+++ b/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp
@@ -58,7 +58,7 @@ float SVGTextLayoutEngineSpacing::calculateSVGKerning(bool isVerticalText, const
m_lastGlyph = currentGlyph;
m_lastGlyph.isValid = true;
- kerning *= m_font.size() / m_font.primaryFont()->unitsPerEm();
+ kerning *= m_font.size() / m_font.fontMetrics().unitsPerEm();
return kerning;
#else
UNUSED_PARAM(isVerticalText);
diff --git a/Source/WebCore/rendering/svg/SVGTextMetrics.cpp b/Source/WebCore/rendering/svg/SVGTextMetrics.cpp
index ec8c2c6..ca20d3d 100644
--- a/Source/WebCore/rendering/svg/SVGTextMetrics.cpp
+++ b/Source/WebCore/rendering/svg/SVGTextMetrics.cpp
@@ -34,16 +34,21 @@ SVGTextMetrics::SVGTextMetrics()
{
}
-SVGTextMetrics::SVGTextMetrics(const Font& font, const TextRun& run, unsigned position, unsigned textLength)
- : m_width(0)
- , m_height(0)
- , m_length(0)
+SVGTextMetrics::SVGTextMetrics(RenderSVGInlineText* textRenderer, const TextRun& run, unsigned position, unsigned textLength)
{
+ ASSERT(textRenderer);
+
+ float scalingFactor = textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
+
+ const Font& scaledFont = textRenderer->scaledFont();
+
int extraCharsAvailable = textLength - (position + run.length());
int length = 0;
- m_width = font.floatWidth(run, extraCharsAvailable, length, m_glyph.name);
- m_height = font.height();
+ // Calculate width/height using the scaled font, divide this result by the scalingFactor afterwards.
+ m_width = scaledFont.floatWidth(run, extraCharsAvailable, length, m_glyph.name) / scalingFactor;
+ m_height = scaledFont.fontMetrics().floatHeight() / scalingFactor;
m_glyph.unicodeString = String(run.characters(), length);
m_glyph.isValid = true;
@@ -71,8 +76,7 @@ static TextRun constructTextRun(RenderSVGInlineText* text, const UChar* characte
TextRun run(characters + position, length);
#if ENABLE(SVG_FONTS)
- ASSERT(text->parent());
- run.setReferencingRenderObject(text->parent());
+ run.setReferencingRenderObject(text);
#endif
// Disable any word/character rounding.
@@ -86,18 +90,13 @@ static TextRun constructTextRun(RenderSVGInlineText* text, const UChar* characte
SVGTextMetrics SVGTextMetrics::measureCharacterRange(RenderSVGInlineText* text, unsigned position, unsigned length)
{
ASSERT(text);
- ASSERT(text->style());
-
TextRun run(constructTextRun(text, text->characters(), position, length));
- return SVGTextMetrics(text->style()->font(), run, position, text->textLength());
+ return SVGTextMetrics(text, run, position, text->textLength());
}
void SVGTextMetrics::measureAllCharactersIndividually(RenderSVGInlineText* text, Vector<SVGTextMetrics>& allMetrics)
{
ASSERT(text);
- ASSERT(text->style());
-
- const Font& font = text->style()->font();
const UChar* characters = text->characters();
unsigned length = text->textLength();
@@ -105,7 +104,7 @@ void SVGTextMetrics::measureAllCharactersIndividually(RenderSVGInlineText* text,
for (unsigned position = 0; position < length; ) {
run.setText(characters + position, 1);
- SVGTextMetrics metrics(font, run, position, text->textLength());
+ SVGTextMetrics metrics(text, run, position, text->textLength());
allMetrics.append(metrics);
position += metrics.length();
}
diff --git a/Source/WebCore/rendering/svg/SVGTextMetrics.h b/Source/WebCore/rendering/svg/SVGTextMetrics.h
index ba18589..7ef0f7d 100644
--- a/Source/WebCore/rendering/svg/SVGTextMetrics.h
+++ b/Source/WebCore/rendering/svg/SVGTextMetrics.h
@@ -25,7 +25,6 @@
namespace WebCore {
-class Font;
class RenderSVGInlineText;
class TextRun;
@@ -64,7 +63,7 @@ public:
private:
SVGTextMetrics();
- SVGTextMetrics(const Font&, const TextRun&, unsigned position, unsigned textLength);
+ SVGTextMetrics(RenderSVGInlineText*, const TextRun&, unsigned position, unsigned textLength);
float m_width;
float m_height;
diff --git a/Source/WebCore/rendering/svg/SVGTextQuery.cpp b/Source/WebCore/rendering/svg/SVGTextQuery.cpp
index 42d511b..1a4cdab 100644
--- a/Source/WebCore/rendering/svg/SVGTextQuery.cpp
+++ b/Source/WebCore/rendering/svg/SVGTextQuery.cpp
@@ -472,7 +472,10 @@ struct ExtentOfCharacterData : SVGTextQuery::Data {
static inline void calculateGlyphBoundaries(SVGTextQuery::Data* queryData, const SVGTextFragment& fragment, int startPosition, FloatRect& extent)
{
- extent.setLocation(FloatPoint(fragment.x, fragment.y - queryData->textRenderer->style()->font().ascent()));
+ float scalingFactor = queryData->textRenderer->scalingFactor();
+ ASSERT(scalingFactor);
+
+ extent.setLocation(FloatPoint(fragment.x, fragment.y - queryData->textRenderer->scaledFont().fontMetrics().floatAscent() / scalingFactor));
if (startPosition) {
SVGTextMetrics metrics = SVGTextMetrics::measureCharacterRange(queryData->textRenderer, fragment.positionListOffset, startPosition);
diff --git a/Source/WebCore/storage/Database.cpp b/Source/WebCore/storage/Database.cpp
index 8ef780e..75f616a 100644
--- a/Source/WebCore/storage/Database.cpp
+++ b/Source/WebCore/storage/Database.cpp
@@ -36,7 +36,7 @@
#include "DatabaseThread.h"
#include "DatabaseTracker.h"
#include "Document.h"
-#include "InspectorInstrumentation.h"
+#include "InspectorDatabaseInstrumentation.h"
#include "Logging.h"
#include "NotImplemented.h"
#include "Page.h"
@@ -107,7 +107,7 @@ PassRefPtr<Database> Database::openDatabase(ScriptExecutionContext* context, con
context->setHasOpenDatabases();
- InspectorInstrumentation::didOpenDatabase(context, database.get(), context->securityOrigin()->host(), name, expectedVersion);
+ InspectorInstrumentation::didOpenDatabase(context, database, context->securityOrigin()->host(), name, expectedVersion);
// If it's a new database and a creation callback was provided, reset the expected
// version to "" and schedule the creation callback. Because of some subtle String
diff --git a/Source/WebCore/storage/IDBAbortEvent.cpp b/Source/WebCore/storage/IDBAbortEvent.cpp
index 21760f8..980d656 100644
--- a/Source/WebCore/storage/IDBAbortEvent.cpp
+++ b/Source/WebCore/storage/IDBAbortEvent.cpp
@@ -36,13 +36,13 @@
namespace WebCore {
-PassRefPtr<IDBAbortEvent> IDBAbortEvent::create()
+PassRefPtr<IDBAbortEvent> IDBAbortEvent::create(PassRefPtr<IDBAny> source)
{
- return adoptRef(new IDBAbortEvent());
+ return adoptRef(new IDBAbortEvent(source));
}
-IDBAbortEvent::IDBAbortEvent()
- : IDBEvent(eventNames().abortEvent, 0) // FIXME: set the source to the transaction
+IDBAbortEvent::IDBAbortEvent(PassRefPtr<IDBAny> source)
+ : IDBEvent(eventNames().abortEvent, source, true)
{
}
diff --git a/Source/WebCore/storage/IDBAbortEvent.h b/Source/WebCore/storage/IDBAbortEvent.h
index bdc2202..fc27989 100644
--- a/Source/WebCore/storage/IDBAbortEvent.h
+++ b/Source/WebCore/storage/IDBAbortEvent.h
@@ -40,14 +40,14 @@ namespace WebCore {
class IDBAbortEvent : public IDBEvent {
public:
- static PassRefPtr<IDBAbortEvent> create();
+ static PassRefPtr<IDBAbortEvent> create(PassRefPtr<IDBAny> source);
// FIXME: Need to allow creation of these events from JS.
virtual ~IDBAbortEvent();
virtual bool isIDBAbortEvent() const { return true; }
private:
- IDBAbortEvent();
+ IDBAbortEvent(PassRefPtr<IDBAny> source);
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBCallbacks.h b/Source/WebCore/storage/IDBCallbacks.h
index e62c085..29fb1c4 100644
--- a/Source/WebCore/storage/IDBCallbacks.h
+++ b/Source/WebCore/storage/IDBCallbacks.h
@@ -49,7 +49,6 @@ public:
virtual ~IDBCallbacks() { }
virtual void onError(PassRefPtr<IDBDatabaseError>) = 0;
- virtual void onSuccess() = 0; // For "null".
virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>) = 0;
virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>) = 0;
virtual void onSuccess(PassRefPtr<IDBIndexBackendInterface>) = 0;
diff --git a/Source/WebCore/storage/IDBCompleteEvent.cpp b/Source/WebCore/storage/IDBCompleteEvent.cpp
index f0ad9fc..20ee57a 100644
--- a/Source/WebCore/storage/IDBCompleteEvent.cpp
+++ b/Source/WebCore/storage/IDBCompleteEvent.cpp
@@ -36,13 +36,13 @@
namespace WebCore {
-PassRefPtr<IDBCompleteEvent> IDBCompleteEvent::create()
+PassRefPtr<IDBCompleteEvent> IDBCompleteEvent::create(PassRefPtr<IDBAny> source)
{
- return adoptRef(new IDBCompleteEvent());
+ return adoptRef(new IDBCompleteEvent(source));
}
-IDBCompleteEvent::IDBCompleteEvent()
- : IDBEvent(eventNames().completeEvent, 0) // FIXME: set the source to the transaction
+IDBCompleteEvent::IDBCompleteEvent(PassRefPtr<IDBAny> source)
+ : IDBEvent(eventNames().completeEvent, source, false)
{
}
diff --git a/Source/WebCore/storage/IDBCompleteEvent.h b/Source/WebCore/storage/IDBCompleteEvent.h
index c407096..c004a72 100644
--- a/Source/WebCore/storage/IDBCompleteEvent.h
+++ b/Source/WebCore/storage/IDBCompleteEvent.h
@@ -40,14 +40,14 @@ namespace WebCore {
class IDBCompleteEvent : public IDBEvent {
public:
- static PassRefPtr<IDBCompleteEvent> create();
+ static PassRefPtr<IDBCompleteEvent> create(PassRefPtr<IDBAny> source);
// FIXME: Need to allow creation of these events from JS.
virtual ~IDBCompleteEvent();
virtual bool isIDBCompleteEvent() const { return true; }
private:
- IDBCompleteEvent();
+ IDBCompleteEvent(PassRefPtr<IDBAny> source);
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBCursor.cpp b/Source/WebCore/storage/IDBCursor.cpp
index 444c109..531cae1 100644
--- a/Source/WebCore/storage/IDBCursor.cpp
+++ b/Source/WebCore/storage/IDBCursor.cpp
@@ -33,13 +33,13 @@
#include "IDBCursorBackendInterface.h"
#include "IDBKey.h"
#include "IDBRequest.h"
-#include "IDBTransactionBackendInterface.h"
+#include "IDBTransaction.h"
#include "ScriptExecutionContext.h"
#include "SerializedScriptValue.h"
namespace WebCore {
-IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransactionBackendInterface* transaction)
+IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
: m_backend(backend)
, m_request(request)
, m_transaction(transaction)
@@ -84,7 +84,7 @@ void IDBCursor::continueFunction(PassRefPtr<IDBKey> key, ExceptionCode& ec)
if (m_request->resetReadyState(m_transaction.get()))
m_backend->continueFunction(key, m_request, ec);
else
- ASSERT_NOT_REACHED();
+ ec = IDBDatabaseException::NOT_ALLOWED_ERR;
}
PassRefPtr<IDBRequest> IDBCursor::deleteFunction(ScriptExecutionContext* context, ExceptionCode& ec)
diff --git a/Source/WebCore/storage/IDBCursor.h b/Source/WebCore/storage/IDBCursor.h
index 54bf51a..9f5ffad 100644
--- a/Source/WebCore/storage/IDBCursor.h
+++ b/Source/WebCore/storage/IDBCursor.h
@@ -40,9 +40,9 @@ class IDBCallbacks;
class IDBCursorBackendInterface;
class IDBKey;
class IDBRequest;
+class IDBTransaction;
class ScriptExecutionContext;
class SerializedScriptValue;
-class IDBTransactionBackendInterface;
class IDBCursor : public RefCounted<IDBCursor> {
public:
@@ -52,7 +52,7 @@ public:
PREV = 2,
PREV_NO_DUPLICATE = 3,
};
- static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransactionBackendInterface* transaction)
+ static PassRefPtr<IDBCursor> create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
{
return adoptRef(new IDBCursor(backend, request, transaction));
}
@@ -70,11 +70,11 @@ public:
PassRefPtr<IDBRequest> deleteFunction(ScriptExecutionContext*, ExceptionCode&);
private:
- explicit IDBCursor(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransactionBackendInterface*);
+ explicit IDBCursor(PassRefPtr<IDBCursorBackendInterface>, IDBRequest*, IDBTransaction*);
RefPtr<IDBCursorBackendInterface> m_backend;
RefPtr<IDBRequest> m_request;
- RefPtr<IDBTransactionBackendInterface> m_transaction;
+ RefPtr<IDBTransaction> m_transaction;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBCursor.idl b/Source/WebCore/storage/IDBCursor.idl
index 12d0baf..2e1459f 100644
--- a/Source/WebCore/storage/IDBCursor.idl
+++ b/Source/WebCore/storage/IDBCursor.idl
@@ -37,9 +37,8 @@ module storage {
readonly attribute IDBKey key;
readonly attribute IDBAny value;
- // FIXME: Implement.
- //[CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
- // raises (IDBDatabaseException);
+ [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
+ raises (IDBDatabaseException);
[ImplementationFunction=continueFunction] void continue(in [Optional] IDBKey key)
raises (IDBDatabaseException);
[CallWith=ScriptExecutionContext, ImplementationFunction=deleteFunction] IDBRequest delete()
diff --git a/Source/WebCore/storage/IDBCursorBackendImpl.cpp b/Source/WebCore/storage/IDBCursorBackendImpl.cpp
index d75e28d..089bb67 100644
--- a/Source/WebCore/storage/IDBCursorBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBCursorBackendImpl.cpp
@@ -68,7 +68,6 @@ unsigned short IDBCursorBackendImpl::direction() const
PassRefPtr<IDBKey> IDBCursorBackendImpl::key() const
{
-
return m_currentKey;
}
@@ -79,43 +78,15 @@ PassRefPtr<IDBAny> IDBCursorBackendImpl::value() const
return IDBAny::create(m_currentIDBKeyValue.get());
}
-void IDBCursorBackendImpl::update(PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBCallbacks> prpCallbacks, ExceptionCode& ec)
+void IDBCursorBackendImpl::update(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBCallbacks> callbacks, ExceptionCode& ec)
{
- RefPtr<IDBCursorBackendImpl> cursor = this;
- RefPtr<SerializedScriptValue> value = prpValue;
- RefPtr<IDBCallbacks> callbacks = prpCallbacks;
- // FIXME: Throw DATA_ERR and SERIAL_ERR when appropriate.
- if (!m_transaction->scheduleTask(createCallbackTask(&IDBCursorBackendImpl::updateInternal, cursor, value, callbacks)))
+ if (!m_query || m_currentId == InvalidId || !m_isSerializedScriptValueCursor) {
ec = IDBDatabaseException::NOT_ALLOWED_ERR;
-}
-
-void IDBCursorBackendImpl::updateInternal(ScriptExecutionContext*, PassRefPtr<IDBCursorBackendImpl> cursor, PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBCallbacks> callbacks)
-{
- // FIXME: This method doesn't update indexes. It's dangerous to call in its current state.
- callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Not implemented."));
- return;
-
- RefPtr<SerializedScriptValue> value = prpValue;
-
- if (!cursor->m_query || cursor->m_currentId == InvalidId) {
- // FIXME: Use the proper error code when it's specced.
- callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Operation not possible."));
return;
}
- String sql = "UPDATE ObjectStoreData SET value = ? WHERE id = ?";
- SQLiteStatement updateQuery(cursor->database(), sql);
-
- bool ok = updateQuery.prepare() == SQLResultOk;
- ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
- updateQuery.bindText(1, value->toWireString());
- updateQuery.bindInt64(2, cursor->m_currentId);
- ok = updateQuery.step() == SQLResultDone;
- ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
-
- if (cursor->m_isSerializedScriptValueCursor)
- cursor->m_currentSerializedScriptValue = value.release();
- callbacks->onSuccess();
+ RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
+ m_objectStore->put(value, key.release(), IDBObjectStoreBackendInterface::CursorUpdate, callbacks, m_transaction.get(), ec);
}
void IDBCursorBackendImpl::continueFunction(PassRefPtr<IDBKey> prpKey, PassRefPtr<IDBCallbacks> prpCallbacks, ExceptionCode& ec)
@@ -127,6 +98,20 @@ void IDBCursorBackendImpl::continueFunction(PassRefPtr<IDBKey> prpKey, PassRefPt
ec = IDBDatabaseException::NOT_ALLOWED_ERR;
}
+bool IDBCursorBackendImpl::currentRowExists()
+{
+ String sql = m_currentIDBKeyValue ? "SELECT id FROM IndexData WHERE id = ?" : "SELECT id FROM ObjectStoreData WHERE id = ?";
+ SQLiteStatement statement(m_database->db(), sql);
+
+ bool ok = statement.prepare() == SQLResultOk;
+ ASSERT_UNUSED(ok, ok);
+
+ statement.bindInt64(1, m_currentId);
+ return statement.step() == SQLResultRow;
+}
+
+// IMPORTANT: If this ever 1) fires an 'error' event and 2) it's possible to fire another event afterwards,
+// IDBRequest::hasPendingActivity() will need to be modified to handle this!!!
void IDBCursorBackendImpl::continueFunctionInternal(ScriptExecutionContext*, PassRefPtr<IDBCursorBackendImpl> prpCursor, PassRefPtr<IDBKey> prpKey, PassRefPtr<IDBCallbacks> callbacks)
{
RefPtr<IDBCursorBackendImpl> cursor = prpCursor;
@@ -138,13 +123,17 @@ void IDBCursorBackendImpl::continueFunctionInternal(ScriptExecutionContext*, Pas
cursor->m_currentKey = 0;
cursor->m_currentSerializedScriptValue = 0;
cursor->m_currentIDBKeyValue = 0;
- callbacks->onSuccess();
+ callbacks->onSuccess(SerializedScriptValue::nullValue());
return;
}
RefPtr<IDBKey> oldKey = cursor->m_currentKey;
cursor->loadCurrentRow();
+ // Skip if this entry has been deleted from the object store.
+ if (!cursor->currentRowExists())
+ continue;
+
// If a key was supplied, we must loop until we find that key (or hit the end).
if (key && !key->isEqual(cursor->m_currentKey.get()))
continue;
@@ -178,7 +167,7 @@ void IDBCursorBackendImpl::loadCurrentRow()
m_currentId = m_query->getColumnInt64(0);
m_currentKey = IDBKey::fromQuery(*m_query, 1);
if (m_isSerializedScriptValueCursor)
- m_currentSerializedScriptValue = SerializedScriptValue::createFromWire(m_query->getColumnText(4));
+ m_currentSerializedScriptValue = SerializedScriptValue::createFromWire(m_query->getColumnBlobAsString(4));
m_currentIDBKeyValue = IDBKey::fromQuery(*m_query, 5);
}
diff --git a/Source/WebCore/storage/IDBCursorBackendImpl.h b/Source/WebCore/storage/IDBCursorBackendImpl.h
index e3a8995..f459139 100644
--- a/Source/WebCore/storage/IDBCursorBackendImpl.h
+++ b/Source/WebCore/storage/IDBCursorBackendImpl.h
@@ -65,10 +65,10 @@ public:
private:
IDBCursorBackendImpl(IDBSQLiteDatabase*, PassRefPtr<IDBKeyRange>, IDBCursor::Direction, PassOwnPtr<SQLiteStatement> query, bool isSerializedScriptValueCursor, IDBTransactionBackendInterface*, IDBObjectStoreBackendInterface*);
+ bool currentRowExists();
void loadCurrentRow();
SQLiteDatabase& database() const;
- static void updateInternal(ScriptExecutionContext*, PassRefPtr<IDBCursorBackendImpl>, PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBCallbacks>);
static void continueFunctionInternal(ScriptExecutionContext*, PassRefPtr<IDBCursorBackendImpl>, PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>);
static const int64_t InvalidId = -1;
@@ -80,11 +80,15 @@ private:
OwnPtr<SQLiteStatement> m_query;
bool m_isSerializedScriptValueCursor;
int64_t m_currentId;
+
+ // The key in the objectStore or index that this cursor iterates over.
RefPtr<IDBKey> m_currentKey;
// m_isSerializedScriptValueCursor will only be available for object cursors.
RefPtr<SerializedScriptValue> m_currentSerializedScriptValue;
+
// FIXME: make the primary key available via script for all types of cursors.
+ // For cursors on indices, this is the key in the objectstore that corresponds to the current entry in the index.
RefPtr<IDBKey> m_currentIDBKeyValue;
RefPtr<IDBTransactionBackendInterface> m_transaction;
diff --git a/Source/WebCore/storage/IDBDatabase.cpp b/Source/WebCore/storage/IDBDatabase.cpp
index 33f004b..9a5eb6c 100644
--- a/Source/WebCore/storage/IDBDatabase.cpp
+++ b/Source/WebCore/storage/IDBDatabase.cpp
@@ -41,11 +41,16 @@
namespace WebCore {
-// FIXME: We need to spec this differently.
-const unsigned long defaultTimeout = 0; // Infinite.
+PassRefPtr<IDBDatabase> IDBDatabase::create(ScriptExecutionContext* context, PassRefPtr<IDBDatabaseBackendInterface> database)
+{
+ return adoptRef(new IDBDatabase(context, database));
+}
-IDBDatabase::IDBDatabase(PassRefPtr<IDBDatabaseBackendInterface> backend)
- : m_backend(backend)
+IDBDatabase::IDBDatabase(ScriptExecutionContext* context, PassRefPtr<IDBDatabaseBackendInterface> backend)
+ : ActiveDOMObject(context, this)
+ , m_backend(backend)
+ , m_noNewTransactions(false)
+ , m_stopped(false)
{
// We pass a reference of this object before it can be adopted.
relaxAdoptionRequirement();
@@ -53,9 +58,10 @@ IDBDatabase::IDBDatabase(PassRefPtr<IDBDatabaseBackendInterface> backend)
IDBDatabase::~IDBDatabase()
{
+ ASSERT(m_stopped);
}
-void IDBDatabase::setSetVersionTransaction(IDBTransactionBackendInterface* transaction)
+void IDBDatabase::setSetVersionTransaction(IDBTransaction* transaction)
{
m_setVersionTransaction = transaction;
}
@@ -73,7 +79,7 @@ PassRefPtr<IDBObjectStore> IDBDatabase::createObjectStore(const String& name, co
options.getKeyBool("autoIncrement", autoIncrement);
// FIXME: Look up evictable and pass that on as well.
- RefPtr<IDBObjectStoreBackendInterface> objectStore = m_backend->createObjectStore(name, keyPath, autoIncrement, m_setVersionTransaction.get(), ec);
+ RefPtr<IDBObjectStoreBackendInterface> objectStore = m_backend->createObjectStore(name, keyPath, autoIncrement, m_setVersionTransaction->backend(), ec);
if (!objectStore) {
ASSERT(ec);
return 0;
@@ -88,7 +94,7 @@ void IDBDatabase::deleteObjectStore(const String& name, ExceptionCode& ec)
return;
}
- m_backend->deleteObjectStore(name, m_setVersionTransaction.get(), ec);
+ m_backend->deleteObjectStore(name, m_setVersionTransaction->backend(), ec);
}
PassRefPtr<IDBRequest> IDBDatabase::setVersion(ScriptExecutionContext* context, const String& version, ExceptionCode& ec)
@@ -98,38 +104,27 @@ PassRefPtr<IDBRequest> IDBDatabase::setVersion(ScriptExecutionContext* context,
return request;
}
-PassRefPtr<IDBTransaction> IDBDatabase::transaction(ScriptExecutionContext* context, const OptionsObject& options, ExceptionCode& ec)
+PassRefPtr<IDBTransaction> IDBDatabase::transaction(ScriptExecutionContext* context, PassRefPtr<DOMStringList> prpStoreNames, unsigned short mode, ExceptionCode& ec)
{
- RefPtr<DOMStringList> storeNames = options.getKeyDOMStringList("objectStoreNames");
- if (!storeNames) {
+ RefPtr<DOMStringList> storeNames = prpStoreNames;
+ if (!storeNames)
storeNames = DOMStringList::create();
- String storeName;
- if (options.getKeyString("objectStoreNames", storeName))
- storeNames->append(storeName);
- }
- // Gets cast to an unsigned short.
- int32_t mode = IDBTransaction::READ_ONLY;
- options.getKeyInt32("mode", mode);
if (mode != IDBTransaction::READ_WRITE && mode != IDBTransaction::READ_ONLY) {
// FIXME: May need to change when specced: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11406
ec = IDBDatabaseException::CONSTRAINT_ERR;
return 0;
}
-
- // Gets cast to an unsigned long.
- // FIXME: The spec needs to be updated on this. It should probably take a double.
- int32_t timeout = defaultTimeout;
- options.getKeyInt32("timeout", timeout);
- int64_t unsignedLongMax = std::numeric_limits<unsigned long>::max();
- if (timeout < 0 || timeout > unsignedLongMax)
- timeout = defaultTimeout; // Ignore illegal values.
+ if (m_noNewTransactions) {
+ ec = IDBDatabaseException::NOT_ALLOWED_ERR;
+ return 0;
+ }
// We need to create a new transaction synchronously. Locks are acquired asynchronously. Operations
// can be queued against the transaction at any point. They will start executing as soon as the
// appropriate locks have been acquired.
// Also note that each backend object corresponds to exactly one IDBTransaction object.
- RefPtr<IDBTransactionBackendInterface> transactionBackend = m_backend->transaction(storeNames.get(), mode, timeout, ec);
+ RefPtr<IDBTransactionBackendInterface> transactionBackend = m_backend->transaction(storeNames.get(), mode, ec);
if (!transactionBackend) {
ASSERT(ec);
return 0;
@@ -141,7 +136,40 @@ PassRefPtr<IDBTransaction> IDBDatabase::transaction(ScriptExecutionContext* cont
void IDBDatabase::close()
{
- m_backend->close();
+ m_noNewTransactions = true;
+}
+
+bool IDBDatabase::hasPendingActivity() const
+{
+ // FIXME: Try to find some way not to just leak this object until page navigation.
+ // FIXME: In an ideal world, we should return true as long as anyone has or can
+ // get a handle to us or any derivative transaction/request object and any
+ // of those have event listeners. This is in order to handle user generated
+ // events properly.
+ return !m_stopped || ActiveDOMObject::hasPendingActivity();
+}
+
+void IDBDatabase::stop()
+{
+ // Stop fires at a deterministic time, so we need to call close in it.
+ close();
+
+ m_stopped = true;
+}
+
+ScriptExecutionContext* IDBDatabase::scriptExecutionContext() const
+{
+ return ActiveDOMObject::scriptExecutionContext();
+}
+
+EventTargetData* IDBDatabase::eventTargetData()
+{
+ return &m_eventTargetData;
+}
+
+EventTargetData* IDBDatabase::ensureEventTargetData()
+{
+ return &m_eventTargetData;
}
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBDatabase.h b/Source/WebCore/storage/IDBDatabase.h
index 9ebbf00..f90ddd3 100644
--- a/Source/WebCore/storage/IDBDatabase.h
+++ b/Source/WebCore/storage/IDBDatabase.h
@@ -26,7 +26,10 @@
#ifndef IDBDatabase_h
#define IDBDatabase_h
+#include "ActiveDOMObject.h"
#include "DOMStringList.h"
+#include "Event.h"
+#include "EventTarget.h"
#include "ExceptionCode.h"
#include "IDBDatabaseBackendInterface.h"
#include "IDBObjectStore.h"
@@ -42,17 +45,13 @@ namespace WebCore {
class IDBAny;
class IDBRequest;
-class ScriptExecutionContext;
-class IDBDatabase : public RefCounted<IDBDatabase> {
+class IDBDatabase : public RefCounted<IDBDatabase>, public EventTarget, public ActiveDOMObject {
public:
- static PassRefPtr<IDBDatabase> create(PassRefPtr<IDBDatabaseBackendInterface> database)
- {
- return adoptRef(new IDBDatabase(database));
- }
+ static PassRefPtr<IDBDatabase> create(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendInterface>);
~IDBDatabase();
- void setSetVersionTransaction(IDBTransactionBackendInterface*);
+ void setSetVersionTransaction(IDBTransaction*);
// Implement the IDL
String name() const { return m_backend->name(); }
@@ -61,19 +60,45 @@ public:
// FIXME: Try to modify the code generator so this is unneeded.
PassRefPtr<IDBObjectStore> createObjectStore(const String& name, ExceptionCode& ec) { return createObjectStore(name, OptionsObject(), ec); }
- PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext* context, ExceptionCode& ec) { return transaction(context, OptionsObject(), ec); }
+ PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext* context, ExceptionCode& ec) { return transaction(context, 0, ec); }
+ PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext* context, PassRefPtr<DOMStringList> storeNames, ExceptionCode& ec) { return transaction(context, storeNames, IDBTransaction::READ_ONLY, ec); }
+ PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext*, PassRefPtr<DOMStringList>, unsigned short mode, ExceptionCode&);
PassRefPtr<IDBObjectStore> createObjectStore(const String& name, const OptionsObject&, ExceptionCode&);
void deleteObjectStore(const String& name, ExceptionCode&);
PassRefPtr<IDBRequest> setVersion(ScriptExecutionContext*, const String& version, ExceptionCode&);
- PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext*, const OptionsObject&, ExceptionCode&);
void close();
+ DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
+ DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
+
+ // ActiveDOMObject
+ virtual bool hasPendingActivity() const;
+ virtual void stop();
+
+ // EventTarget
+ virtual IDBDatabase* toIDBDatabase() { return this; }
+ virtual ScriptExecutionContext* scriptExecutionContext() const;
+
+ using RefCounted<IDBDatabase>::ref;
+ using RefCounted<IDBDatabase>::deref;
+
private:
- IDBDatabase(PassRefPtr<IDBDatabaseBackendInterface>);
+ IDBDatabase(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendInterface>);
+
+ // EventTarget
+ virtual void refEventTarget() { ref(); }
+ virtual void derefEventTarget() { deref(); }
+ virtual EventTargetData* eventTargetData();
+ virtual EventTargetData* ensureEventTargetData();
RefPtr<IDBDatabaseBackendInterface> m_backend;
- RefPtr<IDBTransactionBackendInterface> m_setVersionTransaction;
+ RefPtr<IDBTransaction> m_setVersionTransaction;
+
+ bool m_noNewTransactions;
+ bool m_stopped;
+
+ EventTargetData m_eventTargetData;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBDatabase.idl b/Source/WebCore/storage/IDBDatabase.idl
index 7eb43e9..3922144 100644
--- a/Source/WebCore/storage/IDBDatabase.idl
+++ b/Source/WebCore/storage/IDBDatabase.idl
@@ -26,22 +26,35 @@
module storage {
interface [
- Conditional=INDEXED_DATABASE
+ Conditional=INDEXED_DATABASE,
+ EventTarget
] IDBDatabase {
readonly attribute DOMString name;
readonly attribute DOMString version;
readonly attribute DOMStringList objectStoreNames;
+ attribute EventListener onabort;
+ attribute EventListener onerror;
+
IDBObjectStore createObjectStore(in DOMString name, in [Optional] OptionsObject options)
raises (IDBDatabaseException);
void deleteObjectStore(in DOMString name)
raises (IDBDatabaseException);
[CallWith=ScriptExecutionContext] IDBRequest setVersion(in DOMString version)
raises (IDBDatabaseException);
- [CallWith=ScriptExecutionContext] IDBTransaction transaction(in [Optional] OptionsObject optionsObject)
+ [CallWith=ScriptExecutionContext] IDBTransaction transaction(in [Optional] DOMStringList storeNames, in [Optional] unsigned short mode)
raises (IDBDatabaseException);
- // FIXME: Implement.
- //void close();
+ void close();
+
+ // EventTarget interface
+ void addEventListener(in DOMString type,
+ in EventListener listener,
+ in boolean useCapture);
+ void removeEventListener(in DOMString type,
+ in EventListener listener,
+ in boolean useCapture);
+ boolean dispatchEvent(in Event evt)
+ raises(EventException);
};
}
diff --git a/Source/WebCore/storage/IDBDatabaseBackendImpl.cpp b/Source/WebCore/storage/IDBDatabaseBackendImpl.cpp
index fa9a336..133c5ae 100644
--- a/Source/WebCore/storage/IDBDatabaseBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBDatabaseBackendImpl.cpp
@@ -214,7 +214,7 @@ void IDBDatabaseBackendImpl::setVersion(const String& version, PassRefPtr<IDBCal
RefPtr<IDBDatabaseBackendImpl> database = this;
RefPtr<IDBCallbacks> callbacks = prpCallbacks;
RefPtr<DOMStringList> objectStoreNames = DOMStringList::create();
- RefPtr<IDBTransactionBackendInterface> transaction = IDBTransactionBackendImpl::create(objectStoreNames.get(), IDBTransaction::VERSION_CHANGE, 0, this);
+ RefPtr<IDBTransactionBackendInterface> transaction = IDBTransactionBackendImpl::create(objectStoreNames.get(), IDBTransaction::VERSION_CHANGE, this);
if (!transaction->scheduleTask(createCallbackTask(&IDBDatabaseBackendImpl::setVersionInternal, database, version, callbacks, transaction),
createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_version))) {
ec = IDBDatabaseException::NOT_ALLOWED_ERR;
@@ -234,7 +234,7 @@ void IDBDatabaseBackendImpl::setVersionInternal(ScriptExecutionContext*, PassRef
callbacks->onSuccess(transaction);
}
-PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseBackendImpl::transaction(DOMStringList* objectStoreNames, unsigned short mode, unsigned long timeout, ExceptionCode& ec)
+PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseBackendImpl::transaction(DOMStringList* objectStoreNames, unsigned short mode, ExceptionCode& ec)
{
for (size_t i = 0; i < objectStoreNames->length(); ++i) {
if (!m_objectStores.contains(objectStoreNames->item(i))) {
@@ -244,7 +244,7 @@ PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseBackendImpl::transaction(D
}
// FIXME: Return not allowed err if close has been called.
- return IDBTransactionBackendImpl::create(objectStoreNames, mode, timeout, this);
+ return IDBTransactionBackendImpl::create(objectStoreNames, mode, this);
}
void IDBDatabaseBackendImpl::close()
diff --git a/Source/WebCore/storage/IDBDatabaseBackendImpl.h b/Source/WebCore/storage/IDBDatabaseBackendImpl.h
index 570f6a5..8942968 100644
--- a/Source/WebCore/storage/IDBDatabaseBackendImpl.h
+++ b/Source/WebCore/storage/IDBDatabaseBackendImpl.h
@@ -61,7 +61,7 @@ public:
virtual PassRefPtr<IDBObjectStoreBackendInterface> createObjectStore(const String& name, const String& keyPath, bool autoIncrement, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void deleteObjectStore(const String& name, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void setVersion(const String& version, PassRefPtr<IDBCallbacks>, ExceptionCode&);
- virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* objectStoreNames, unsigned short mode, unsigned long timeout, ExceptionCode&);
+ virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* objectStoreNames, unsigned short mode, ExceptionCode&);
virtual void close();
PassRefPtr<IDBObjectStoreBackendInterface> objectStore(const String& name);
diff --git a/Source/WebCore/storage/IDBDatabaseBackendInterface.h b/Source/WebCore/storage/IDBDatabaseBackendInterface.h
index 0dc59b1..9cc7230 100644
--- a/Source/WebCore/storage/IDBDatabaseBackendInterface.h
+++ b/Source/WebCore/storage/IDBDatabaseBackendInterface.h
@@ -57,7 +57,7 @@ public:
virtual PassRefPtr<IDBObjectStoreBackendInterface> createObjectStore(const String& name, const String& keyPath, bool autoIncrement, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
virtual void deleteObjectStore(const String& name, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
virtual void setVersion(const String& version, PassRefPtr<IDBCallbacks>, ExceptionCode&) = 0;
- virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* storeNames, unsigned short mode, unsigned long timeout, ExceptionCode&) = 0;
+ virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* storeNames, unsigned short mode, ExceptionCode&) = 0;
virtual void close() = 0;
};
diff --git a/Source/WebCore/storage/IDBErrorEvent.cpp b/Source/WebCore/storage/IDBErrorEvent.cpp
index cba980d..e576fa8 100644
--- a/Source/WebCore/storage/IDBErrorEvent.cpp
+++ b/Source/WebCore/storage/IDBErrorEvent.cpp
@@ -43,7 +43,7 @@ PassRefPtr<IDBErrorEvent> IDBErrorEvent::create(PassRefPtr<IDBAny> source, const
}
IDBErrorEvent::IDBErrorEvent(PassRefPtr<IDBAny> source, const IDBDatabaseError& error)
- : IDBEvent(eventNames().errorEvent, source)
+ : IDBEvent(eventNames().errorEvent, source, true)
, m_code(error.code())
, m_message(error.message())
{
diff --git a/Source/WebCore/storage/IDBEvent.cpp b/Source/WebCore/storage/IDBEvent.cpp
index f9f6060..a7f3db1 100644
--- a/Source/WebCore/storage/IDBEvent.cpp
+++ b/Source/WebCore/storage/IDBEvent.cpp
@@ -35,8 +35,8 @@
namespace WebCore {
-IDBEvent::IDBEvent(const AtomicString& type, PassRefPtr<IDBAny> source)
- : Event(type, false, false)
+IDBEvent::IDBEvent(const AtomicString& type, PassRefPtr<IDBAny> source, bool canBubble)
+ : Event(type, canBubble, true)
, m_source(source)
{
}
@@ -50,6 +50,57 @@ PassRefPtr<IDBAny> IDBEvent::source()
return m_source;
}
+bool IDBEvent::dispatch(Vector<RefPtr<EventTarget> >& eventTargets)
+{
+ size_t size = eventTargets.size();
+ ASSERT(size);
+
+ setEventPhase(Event::CAPTURING_PHASE);
+ for (size_t i = size - 1; i; --i) { // Don't do the first element.
+ setCurrentTarget(eventTargets[i].get());
+ eventTargets[i]->fireEventListeners(this);
+ if (propagationStopped())
+ goto doneDispatching;
+ }
+
+ setEventPhase(Event::AT_TARGET);
+ setCurrentTarget(eventTargets[0].get());
+ eventTargets[0]->fireEventListeners(this);
+ if (propagationStopped() || !bubbles() || cancelBubble())
+ goto doneDispatching;
+
+ setEventPhase(Event::BUBBLING_PHASE);
+ for (size_t i = 1; i < size; ++i) { // Don't do the first element.
+ setCurrentTarget(eventTargets[i].get());
+ eventTargets[i]->fireEventListeners(this);
+ if (propagationStopped() || cancelBubble())
+ goto doneDispatching;
+ }
+
+ // FIXME: "...However, we also wanted to integrate the window.onerror feature in
+ // HTML5. So after we've fired an "error" event, if .preventDefault() was
+ // never called on the event, we fire an error event on the window (can't
+ // remember if this happens before or after we abort the transaction).
+ // This is a separate event, which for example means that even if you
+ // attach a capturing "error" handler on window, you won't see any events
+ // unless an error really went unhandled. And you also can't call
+ // .preventDefault on the error event fired on the window in order to
+ // prevent the transaction from being aborted. It's purely there for
+ // error reporting and distinctly different from the event propagating to
+ // the window.
+ //
+ // This is similar to how "error" events are handled in workers.
+ //
+ // (I think that so far webkit hasn't implemented the window.onerror
+ // feature yet, so you probably don't want to fire the separate error
+ // event on the window until that has been implemented)."
+
+doneDispatching:
+ setCurrentTarget(0);
+ setEventPhase(0);
+ return !defaultPrevented();
+}
+
} // namespace WebCore
#endif
diff --git a/Source/WebCore/storage/IDBEvent.h b/Source/WebCore/storage/IDBEvent.h
index c44e449..d28885b 100644
--- a/Source/WebCore/storage/IDBEvent.h
+++ b/Source/WebCore/storage/IDBEvent.h
@@ -32,8 +32,10 @@
#if ENABLE(INDEXED_DATABASE)
#include "Event.h"
+#include "EventTarget.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
namespace WebCore {
@@ -44,9 +46,10 @@ public:
virtual ~IDBEvent();
PassRefPtr<IDBAny> source();
+ bool dispatch(Vector<RefPtr<EventTarget> >&); // The target first and then its ancestors in order of how the event bubbles.
protected:
- IDBEvent(const AtomicString& type, PassRefPtr<IDBAny> source);
+ IDBEvent(const AtomicString& type, PassRefPtr<IDBAny> source, bool canBubble);
private:
RefPtr<IDBAny> m_source;
diff --git a/Source/WebCore/storage/IDBFactoryBackendImpl.cpp b/Source/WebCore/storage/IDBFactoryBackendImpl.cpp
index 45cffeb..0e883cf 100644
--- a/Source/WebCore/storage/IDBFactoryBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBFactoryBackendImpl.cpp
@@ -49,7 +49,7 @@ IDBFactoryBackendImpl::IDBFactoryBackendImpl()
: m_transactionCoordinator(IDBTransactionCoordinator::create())
{
}
-
+
IDBFactoryBackendImpl::~IDBFactoryBackendImpl()
{
}
@@ -93,11 +93,24 @@ static PassRefPtr<IDBSQLiteDatabase> openSQLiteDatabase(SecurityOrigin* security
return sqliteDatabase.release();
}
+static bool runCommands(SQLiteDatabase& sqliteDatabase, const char** commands, size_t numberOfCommands)
+{
+ SQLiteTransaction transaction(sqliteDatabase, false);
+ transaction.begin();
+ for (size_t i = 0; i < numberOfCommands; ++i) {
+ if (!sqliteDatabase.executeCommand(commands[i])) {
+ LOG_ERROR("Failed to run the following command for IndexedDB: %s", commands[i]);
+ return false;
+ }
+ }
+ transaction.commit();
+ return true;
+}
+
static bool createTables(SQLiteDatabase& sqliteDatabase)
{
if (sqliteDatabase.tableExists("Databases"))
return true;
-
static const char* commands[] = {
"CREATE TABLE Databases (id INTEGER PRIMARY KEY, name TEXT NOT NULL, description TEXT NOT NULL, version TEXT NOT NULL)",
"CREATE UNIQUE INDEX Databases_name ON Databases(name)",
@@ -117,17 +130,7 @@ static bool createTables(SQLiteDatabase& sqliteDatabase)
"CREATE INDEX IndexData_indexId ON IndexData(indexId)",
};
- SQLiteTransaction transaction(sqliteDatabase, false);
- transaction.begin();
- for (size_t i = 0; i < arraysize(commands); ++i) {
- if (!sqliteDatabase.executeCommand(commands[i])) {
- // FIXME: We should try to recover from this situation. Maybe nuke the database and start over?
- LOG_ERROR("Failed to run the following command for IndexedDB: %s", commands[i]);
- return false;
- }
- }
- transaction.commit();
- return true;
+ return runCommands(sqliteDatabase, commands, sizeof(commands) / sizeof(commands[0]));
}
static bool createMetaDataTable(SQLiteDatabase& sqliteDatabase)
@@ -137,14 +140,7 @@ static bool createMetaDataTable(SQLiteDatabase& sqliteDatabase)
"INSERT INTO MetaData VALUES ('version', 1)",
};
- SQLiteTransaction transaction(sqliteDatabase, false);
- transaction.begin();
- for (size_t i = 0; i < arraysize(commands); ++i) {
- if (!sqliteDatabase.executeCommand(commands[i]))
- return false;
- }
- transaction.commit();
- return true;
+ return runCommands(sqliteDatabase, commands, sizeof(commands) / sizeof(commands[0]));
}
static bool getDatabaseVersion(SQLiteDatabase& sqliteDatabase, int* databaseVersion)
@@ -187,19 +183,27 @@ static bool migrateDatabase(SQLiteDatabase& sqliteDatabase)
"UPDATE MetaData SET value = 2 WHERE name = 'version'",
};
- SQLiteTransaction transaction(sqliteDatabase, false);
- transaction.begin();
- for (size_t i = 0; i < arraysize(commands); ++i) {
- if (!sqliteDatabase.executeCommand(commands[i])) {
- LOG_ERROR("Failed to run the following command for IndexedDB: %s", commands[i]);
- return false;
- }
- }
- transaction.commit();
+ if (!runCommands(sqliteDatabase, commands, sizeof(commands) / sizeof(commands[0])))
+ return false;
databaseVersion = 2;
}
+ if (databaseVersion == 2) {
+ // We need to make the ObjectStoreData.value be a BLOB instead of TEXT.
+ static const char* commands[] = {
+ "DROP TABLE IF EXISTS ObjectStoreData", // This drops associated indices.
+ "CREATE TABLE ObjectStoreData (id INTEGER PRIMARY KEY, objectStoreId INTEGER NOT NULL REFERENCES ObjectStore(id), keyString TEXT, keyDate REAL, keyNumber REAL, value BLOB NOT NULL)",
+ "CREATE UNIQUE INDEX ObjectStoreData_composit ON ObjectStoreData(keyString, keyDate, keyNumber, objectStoreId)",
+ "UPDATE MetaData SET value = 3 WHERE name = 'version'",
+ };
+
+ if (!runCommands(sqliteDatabase, commands, sizeof(commands) / sizeof(commands[0])))
+ return false;
+
+ databaseVersion = 3;
+ }
+
return true;
}
diff --git a/Source/WebCore/storage/IDBFactoryBackendInterface.cpp b/Source/WebCore/storage/IDBFactoryBackendInterface.cpp
index 935ccac..ac13652 100644
--- a/Source/WebCore/storage/IDBFactoryBackendInterface.cpp
+++ b/Source/WebCore/storage/IDBFactoryBackendInterface.cpp
@@ -43,10 +43,6 @@ PassRefPtr<IDBFactoryBackendInterface> IDBFactoryBackendInterface::create()
return IDBFactoryBackendImpl::create();
}
-IDBFactoryBackendInterface::~IDBFactoryBackendInterface()
-{
-}
-
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
diff --git a/Source/WebCore/storage/IDBFactoryBackendInterface.h b/Source/WebCore/storage/IDBFactoryBackendInterface.h
index 166d517..e05f316 100644
--- a/Source/WebCore/storage/IDBFactoryBackendInterface.h
+++ b/Source/WebCore/storage/IDBFactoryBackendInterface.h
@@ -49,7 +49,7 @@ class SecurityOrigin;
class IDBFactoryBackendInterface : public ThreadSafeShared<IDBFactoryBackendInterface> {
public:
static PassRefPtr<IDBFactoryBackendInterface> create();
- virtual ~IDBFactoryBackendInterface();
+ virtual ~IDBFactoryBackendInterface() { }
virtual void open(const String& name, PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir, int64_t maximumSize) = 0;
};
diff --git a/Source/WebCore/storage/IDBIndex.cpp b/Source/WebCore/storage/IDBIndex.cpp
index 8a38a27..615767b 100644
--- a/Source/WebCore/storage/IDBIndex.cpp
+++ b/Source/WebCore/storage/IDBIndex.cpp
@@ -34,13 +34,13 @@
#include "IDBKey.h"
#include "IDBKeyRange.h"
#include "IDBRequest.h"
-#include "IDBTransactionBackendInterface.h"
+#include "IDBTransaction.h"
namespace WebCore {
static const unsigned short defaultDirection = IDBCursor::NEXT;
-IDBIndex::IDBIndex(PassRefPtr<IDBIndexBackendInterface> backend, IDBTransactionBackendInterface* transaction)
+IDBIndex::IDBIndex(PassRefPtr<IDBIndexBackendInterface> backend, IDBTransaction* transaction)
: m_backend(backend)
, m_transaction(transaction)
{
@@ -52,13 +52,8 @@ IDBIndex::~IDBIndex()
{
}
-PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, const OptionsObject& options, ExceptionCode& ec)
+PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, unsigned short direction, ExceptionCode& ec)
{
- RefPtr<IDBKeyRange> keyRange = options.getKeyKeyRange("range");
-
- // Converted to an unsigned short.
- int32_t direction = defaultDirection;
- options.getKeyInt32("direction", direction);
if (direction != IDBCursor::NEXT && direction != IDBCursor::NEXT_NO_DUPLICATE && direction != IDBCursor::PREV && direction != IDBCursor::PREV_NO_DUPLICATE) {
// FIXME: May need to change when specced: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11406
ec = IDBDatabaseException::CONSTRAINT_ERR;
@@ -66,19 +61,14 @@ PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, con
}
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_backend->openCursor(keyRange, direction, request, m_transaction.get(), ec);
+ m_backend->openCursor(keyRange, direction, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
}
-PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context, const OptionsObject& options, ExceptionCode& ec)
+PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, unsigned short direction, ExceptionCode& ec)
{
- RefPtr<IDBKeyRange> keyRange = options.getKeyKeyRange("range");
-
- // Converted to an unsigned short.
- int32_t direction = defaultDirection;
- options.getKeyInt32("direction", direction);
if (direction != IDBCursor::NEXT && direction != IDBCursor::NEXT_NO_DUPLICATE && direction != IDBCursor::PREV && direction != IDBCursor::PREV_NO_DUPLICATE) {
// FIXME: May need to change when specced: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11406
ec = IDBDatabaseException::CONSTRAINT_ERR;
@@ -86,7 +76,7 @@ PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context,
}
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_backend->openKeyCursor(keyRange, direction, request, m_transaction.get(), ec);
+ m_backend->openKeyCursor(keyRange, direction, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
@@ -95,7 +85,7 @@ PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context,
PassRefPtr<IDBRequest> IDBIndex::get(ScriptExecutionContext* context, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_backend->get(key, request, m_transaction.get(), ec);
+ m_backend->get(key, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
@@ -104,7 +94,7 @@ PassRefPtr<IDBRequest> IDBIndex::get(ScriptExecutionContext* context, PassRefPtr
PassRefPtr<IDBRequest> IDBIndex::getKey(ScriptExecutionContext* context, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_backend->getKey(key, request, m_transaction.get(), ec);
+ m_backend->getKey(key, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
diff --git a/Source/WebCore/storage/IDBIndex.h b/Source/WebCore/storage/IDBIndex.h
index 7f1aae3..10b46f1 100644
--- a/Source/WebCore/storage/IDBIndex.h
+++ b/Source/WebCore/storage/IDBIndex.h
@@ -30,7 +30,6 @@
#include "IDBIndexBackendInterface.h"
#include "IDBKeyRange.h"
#include "IDBRequest.h"
-#include "OptionsObject.h"
#include "PlatformString.h"
#include <wtf/Forward.h>
@@ -40,7 +39,7 @@ namespace WebCore {
class IDBIndex : public RefCounted<IDBIndex> {
public:
- static PassRefPtr<IDBIndex> create(PassRefPtr<IDBIndexBackendInterface> backend, IDBTransactionBackendInterface* transaction)
+ static PassRefPtr<IDBIndex> create(PassRefPtr<IDBIndexBackendInterface> backend, IDBTransaction* transaction)
{
return adoptRef(new IDBIndex(backend, transaction));
}
@@ -53,19 +52,22 @@ public:
bool unique() const { return m_backend->unique(); }
// FIXME: Try to modify the code generator so this is unneeded.
- PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openCursor(context, OptionsObject(), ec); }
- PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openKeyCursor(context, OptionsObject(), ec); }
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openCursor(context, 0, ec); }
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, ExceptionCode& ec) { return openCursor(context, keyRange, IDBCursor::NEXT, ec); }
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, unsigned short direction, ExceptionCode&);
+
+ PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openKeyCursor(context, 0, ec); }
+ PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, ExceptionCode& ec) { return openKeyCursor(context, keyRange, IDBCursor::NEXT, ec); }
+ PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, unsigned short direction, ExceptionCode&);
- PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, const OptionsObject&, ExceptionCode&);
- PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext*, const OptionsObject&, ExceptionCode&);
PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<IDBKey>, ExceptionCode&);
PassRefPtr<IDBRequest> getKey(ScriptExecutionContext*, PassRefPtr<IDBKey>, ExceptionCode&);
private:
- IDBIndex(PassRefPtr<IDBIndexBackendInterface>, IDBTransactionBackendInterface* transaction);
+ IDBIndex(PassRefPtr<IDBIndexBackendInterface>, IDBTransaction*);
RefPtr<IDBIndexBackendInterface> m_backend;
- RefPtr<IDBTransactionBackendInterface> m_transaction;
+ RefPtr<IDBTransaction> m_transaction;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBIndex.idl b/Source/WebCore/storage/IDBIndex.idl
index e6ba1e6..13089cc 100644
--- a/Source/WebCore/storage/IDBIndex.idl
+++ b/Source/WebCore/storage/IDBIndex.idl
@@ -33,9 +33,9 @@ module storage {
readonly attribute DOMString keyPath;
readonly attribute boolean unique;
- [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] OptionsObject options)
+ [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] IDBKeyRange range, in [Optional] unsigned short direction)
raises (IDBDatabaseException);
- [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in [Optional] OptionsObject options)
+ [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in [Optional] IDBKeyRange range, in [Optional] unsigned short direction))
raises (IDBDatabaseException);
[CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key)
raises (IDBDatabaseException);
diff --git a/Source/WebCore/storage/IDBIndexBackendImpl.cpp b/Source/WebCore/storage/IDBIndexBackendImpl.cpp
index df88fdb..6eba189 100644
--- a/Source/WebCore/storage/IDBIndexBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBIndexBackendImpl.cpp
@@ -100,7 +100,7 @@ void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr
query->bindInt64(indexColumn, index->id());
if (query->step() != SQLResultRow) {
- callbacks->onSuccess();
+ callbacks->onSuccess(SerializedScriptValue::nullValue());
return;
}
diff --git a/Source/WebCore/storage/IDBObjectStore.cpp b/Source/WebCore/storage/IDBObjectStore.cpp
index ed5c96a..53ae279 100644
--- a/Source/WebCore/storage/IDBObjectStore.cpp
+++ b/Source/WebCore/storage/IDBObjectStore.cpp
@@ -34,7 +34,7 @@
#include "IDBIndex.h"
#include "IDBKey.h"
#include "IDBKeyRange.h"
-#include "IDBTransactionBackendInterface.h"
+#include "IDBTransaction.h"
#include "SerializedScriptValue.h"
#include <wtf/UnusedParam.h>
@@ -42,7 +42,7 @@ namespace WebCore {
static const unsigned short defaultDirection = IDBCursor::NEXT;
-IDBObjectStore::IDBObjectStore(PassRefPtr<IDBObjectStoreBackendInterface> idbObjectStore, IDBTransactionBackendInterface* transaction)
+IDBObjectStore::IDBObjectStore(PassRefPtr<IDBObjectStoreBackendInterface> idbObjectStore, IDBTransaction* transaction)
: m_objectStore(idbObjectStore)
, m_transaction(transaction)
{
@@ -70,7 +70,7 @@ PassRefPtr<DOMStringList> IDBObjectStore::indexNames() const
PassRefPtr<IDBRequest> IDBObjectStore::get(ScriptExecutionContext* context, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_objectStore->get(key, request, m_transaction.get(), ec);
+ m_objectStore->get(key, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request.release();
@@ -79,7 +79,7 @@ PassRefPtr<IDBRequest> IDBObjectStore::get(ScriptExecutionContext* context, Pass
PassRefPtr<IDBRequest> IDBObjectStore::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_objectStore->put(value, key, true, request, m_transaction.get(), ec);
+ m_objectStore->put(value, key, IDBObjectStoreBackendInterface::AddOnly, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
@@ -88,7 +88,7 @@ PassRefPtr<IDBRequest> IDBObjectStore::add(ScriptExecutionContext* context, Pass
PassRefPtr<IDBRequest> IDBObjectStore::put(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_objectStore->put(value, key, false, request, m_transaction.get(), ec);
+ m_objectStore->put(value, key, IDBObjectStoreBackendInterface::AddOrUpdate, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
@@ -97,7 +97,16 @@ PassRefPtr<IDBRequest> IDBObjectStore::put(ScriptExecutionContext* context, Pass
PassRefPtr<IDBRequest> IDBObjectStore::deleteFunction(ScriptExecutionContext* context, PassRefPtr<IDBKey> key, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_objectStore->deleteFunction(key, request, m_transaction.get(), ec);
+ m_objectStore->deleteFunction(key, request, m_transaction->backend(), ec);
+ if (ec)
+ return 0;
+ return request;
+}
+
+PassRefPtr<IDBRequest> IDBObjectStore::clear(ScriptExecutionContext* context, ExceptionCode& ec)
+{
+ RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
+ m_objectStore->clear(request, m_transaction->backend(), ec);
if (ec)
return 0;
return request;
@@ -108,7 +117,7 @@ PassRefPtr<IDBIndex> IDBObjectStore::createIndex(const String& name, const Strin
bool unique = false;
options.getKeyBool("unique", unique);
- RefPtr<IDBIndexBackendInterface> index = m_objectStore->createIndex(name, keyPath, unique, m_transaction.get(), ec);
+ RefPtr<IDBIndexBackendInterface> index = m_objectStore->createIndex(name, keyPath, unique, m_transaction->backend(), ec);
ASSERT(!index != !ec); // If we didn't get an index, we should have gotten an exception code. And vice versa.
if (!index)
return 0;
@@ -126,16 +135,11 @@ PassRefPtr<IDBIndex> IDBObjectStore::index(const String& name, ExceptionCode& ec
void IDBObjectStore::deleteIndex(const String& name, ExceptionCode& ec)
{
- m_objectStore->deleteIndex(name, m_transaction.get(), ec);
+ m_objectStore->deleteIndex(name, m_transaction->backend(), ec);
}
-PassRefPtr<IDBRequest> IDBObjectStore::openCursor(ScriptExecutionContext* context, const OptionsObject& options, ExceptionCode& ec)
+PassRefPtr<IDBRequest> IDBObjectStore::openCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> range, unsigned short direction, ExceptionCode& ec)
{
- RefPtr<IDBKeyRange> range = options.getKeyKeyRange("range");
-
- // Converted to an unsigned short.
- int32_t direction = defaultDirection;
- options.getKeyInt32("direction", direction);
if (direction != IDBCursor::NEXT && direction != IDBCursor::NEXT_NO_DUPLICATE && direction != IDBCursor::PREV && direction != IDBCursor::PREV_NO_DUPLICATE) {
// FIXME: May need to change when specced: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11406
ec = IDBDatabaseException::CONSTRAINT_ERR;
@@ -143,7 +147,7 @@ PassRefPtr<IDBRequest> IDBObjectStore::openCursor(ScriptExecutionContext* contex
}
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
- m_objectStore->openCursor(range, direction, request, m_transaction.get(), ec);
+ m_objectStore->openCursor(range, direction, request, m_transaction->backend(), ec);
if (ec)
return 0;
return request.release();
diff --git a/Source/WebCore/storage/IDBObjectStore.h b/Source/WebCore/storage/IDBObjectStore.h
index 0e9a4a9..f0c5ebf 100644
--- a/Source/WebCore/storage/IDBObjectStore.h
+++ b/Source/WebCore/storage/IDBObjectStore.h
@@ -45,11 +45,10 @@ namespace WebCore {
class DOMStringList;
class IDBAny;
-class IDBTransactionBackendInterface;
class IDBObjectStore : public RefCounted<IDBObjectStore> {
public:
- static PassRefPtr<IDBObjectStore> create(PassRefPtr<IDBObjectStoreBackendInterface> idbObjectStore, IDBTransactionBackendInterface* transaction)
+ static PassRefPtr<IDBObjectStore> create(PassRefPtr<IDBObjectStoreBackendInterface> idbObjectStore, IDBTransaction* transaction)
{
return adoptRef(new IDBObjectStore(idbObjectStore, transaction));
}
@@ -63,25 +62,27 @@ public:
PassRefPtr<IDBRequest> add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, ExceptionCode& ec) { return add(context, value, 0, ec); }
PassRefPtr<IDBRequest> put(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, ExceptionCode& ec) { return put(context, value, 0, ec); }
PassRefPtr<IDBIndex> createIndex(const String& name, const String& keyPath, ExceptionCode& ec) { return createIndex(name, keyPath, OptionsObject(), ec); }
- PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openCursor(context, OptionsObject(), ec); }
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openCursor(context, 0, ec); }
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, ExceptionCode& ec) { return openCursor(context, keyRange, IDBCursor::NEXT, ec); }
PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<IDBKey>, ExceptionCode&);
PassRefPtr<IDBRequest> add(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, ExceptionCode&);
PassRefPtr<IDBRequest> put(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, ExceptionCode&);
PassRefPtr<IDBRequest> deleteFunction(ScriptExecutionContext*, PassRefPtr<IDBKey> key, ExceptionCode&);
+ PassRefPtr<IDBRequest> clear(ScriptExecutionContext*, ExceptionCode&);
PassRefPtr<IDBIndex> createIndex(const String& name, const String& keyPath, const OptionsObject&, ExceptionCode&);
PassRefPtr<IDBIndex> index(const String& name, ExceptionCode&);
void deleteIndex(const String& name, ExceptionCode&);
- PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, const OptionsObject&, ExceptionCode&);
+ PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, unsigned short direction, ExceptionCode&);
private:
- IDBObjectStore(PassRefPtr<IDBObjectStoreBackendInterface>, IDBTransactionBackendInterface* transaction);
+ IDBObjectStore(PassRefPtr<IDBObjectStoreBackendInterface>, IDBTransaction*);
void removeTransactionFromPendingList();
RefPtr<IDBObjectStoreBackendInterface> m_objectStore;
- RefPtr<IDBTransactionBackendInterface> m_transaction;
+ RefPtr<IDBTransaction> m_transaction;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBObjectStore.idl b/Source/WebCore/storage/IDBObjectStore.idl
index f023dbe..c95fb9d 100644
--- a/Source/WebCore/storage/IDBObjectStore.idl
+++ b/Source/WebCore/storage/IDBObjectStore.idl
@@ -38,9 +38,11 @@ module storage {
raises (IDBDatabaseException);
[CallWith=ScriptExecutionContext, ImplementationFunction=deleteFunction] IDBRequest delete(in IDBKey key)
raises (IDBDatabaseException);
+ [CallWith=ScriptExecutionContext] IDBRequest clear()
+ raises (IDBDatabaseException);
[CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key)
raises (IDBDatabaseException);
- [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] OptionsObject options)
+ [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] IDBKeyRange range, in [Optional] unsigned short direction)
raises (IDBDatabaseException);
IDBIndex createIndex(in DOMString name, in [ConvertNullToNullString] DOMString keyPath, in [Optional] OptionsObject options)
raises (IDBDatabaseException);
diff --git a/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp b/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp
index 6b162ef..921bbab 100644
--- a/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp
@@ -118,7 +118,7 @@ void IDBObjectStoreBackendImpl::getInternal(ScriptExecutionContext*, PassRefPtr<
ASSERT((key->type() == IDBKey::DateType) != query.isColumnNull(1));
ASSERT((key->type() == IDBKey::NumberType) != query.isColumnNull(2));
- callbacks->onSuccess(SerializedScriptValue::createFromWire(query.getColumnText(3)));
+ callbacks->onSuccess(SerializedScriptValue::createFromWire(query.getColumnBlobAsString(3)));
ASSERT(query.step() != SQLResultRow);
}
@@ -142,7 +142,7 @@ static bool putObjectStoreData(SQLiteDatabase& db, IDBKey* key, SerializedScript
if (query.prepare() != SQLResultOk)
return false;
key->bindWithNulls(query, 1);
- query.bindText(4, value->toWireString());
+ query.bindBlob(4, value->toWireString());
if (dataRowId != IDBDatabaseBackendImpl::InvalidId)
query.bindInt64(5, dataRowId);
else
@@ -179,7 +179,7 @@ static bool putIndexData(SQLiteDatabase& db, IDBKey* key, int64_t indexId, int64
return putQuery.step() == SQLResultDone;
}
-void IDBObjectStoreBackendImpl::put(PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBKey> prpKey, bool addOnly, PassRefPtr<IDBCallbacks> prpCallbacks, IDBTransactionBackendInterface* transactionPtr, ExceptionCode& ec)
+void IDBObjectStoreBackendImpl::put(PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBKey> prpKey, PutMode putMode, PassRefPtr<IDBCallbacks> prpCallbacks, IDBTransactionBackendInterface* transactionPtr, ExceptionCode& ec)
{
if (transactionPtr->mode() == IDBTransaction::READ_ONLY) {
ec = IDBDatabaseException::READ_ONLY_ERR;
@@ -193,45 +193,75 @@ void IDBObjectStoreBackendImpl::put(PassRefPtr<SerializedScriptValue> prpValue,
RefPtr<IDBTransactionBackendInterface> transaction = transactionPtr;
// FIXME: This should throw a SERIAL_ERR on structured clone problems.
// FIXME: This should throw a DATA_ERR when the wrong key/keyPath data is supplied.
- if (!transaction->scheduleTask(createCallbackTask(&IDBObjectStoreBackendImpl::putInternal, objectStore, value, key, addOnly, callbacks, transaction)))
+ if (!transaction->scheduleTask(createCallbackTask(&IDBObjectStoreBackendImpl::putInternal, objectStore, value, key, putMode, callbacks, transaction)))
ec = IDBDatabaseException::NOT_ALLOWED_ERR;
}
-void IDBObjectStoreBackendImpl::putInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl> objectStore, PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBKey> prpKey, bool addOnly, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
+PassRefPtr<IDBKey> IDBObjectStoreBackendImpl::selectKeyForPut(IDBObjectStoreBackendImpl* objectStore, SerializedScriptValue* value, IDBKey* key, PutMode putMode, IDBCallbacks* callbacks)
{
- RefPtr<SerializedScriptValue> value = prpValue;
- RefPtr<IDBKey> key = prpKey;
+ if (putMode == CursorUpdate)
+ ASSERT(key);
- if (!objectStore->m_keyPath.isNull() && key) {
+ const bool autoIncrement = objectStore->autoIncrement();
+ const bool hasKeyPath = !objectStore->m_keyPath.isNull();
+
+ if (hasKeyPath && key && putMode != CursorUpdate) {
callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "A key was supplied for an objectStore that has a keyPath."));
- return;
+ return 0;
}
- if (objectStore->autoIncrement() && key) {
- callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "A key was supplied for an objectStore that is using auto increment."));
- return;
+ if (autoIncrement && key) {
+ objectStore->resetAutoIncrementKeyCache();
+ return key;
}
- if (objectStore->autoIncrement()) {
- key = objectStore->genAutoIncrementKey();
+ if (autoIncrement) {
+ ASSERT(!key);
+ if (!hasKeyPath)
+ return objectStore->genAutoIncrementKey();
- if (!objectStore->m_keyPath.isNull()) {
- // FIXME: Inject the generated key into the object.
- callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Adding data to object stores with auto increment and in-line keys not yet supported."));
- return;
+ RefPtr<IDBKey> keyPathKey = fetchKeyFromKeyPath(value, objectStore->m_keyPath);
+ if (keyPathKey) {
+ objectStore->resetAutoIncrementKeyCache();
+ return keyPathKey;
}
- } else if (!objectStore->m_keyPath.isNull()) {
- key = fetchKeyFromKeyPath(value.get(), objectStore->m_keyPath);
- if (!key) {
+ // FIXME: Generate auto increment key, and inject it through the key path.
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Adding data to object stores with auto increment and in-line keys not yet supported."));
+ return 0;
+ }
+
+ if (hasKeyPath) {
+ RefPtr<IDBKey> keyPathKey = fetchKeyFromKeyPath(value, objectStore->m_keyPath);
+
+ if (!keyPathKey) {
callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "The key could not be fetched from the keyPath."));
- return;
+ return 0;
}
- } else if (!key) {
- callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "No key supplied."));
- return;
+
+ if (putMode == CursorUpdate && !keyPathKey->isEqual(key)) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "The key fetched from the keyPath does not match the key of the cursor."));
+ return 0;
+ }
+
+ return keyPathKey.release();
+ }
+
+ if (!key) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "No key supplied"));
+ return 0;
}
+ return key;
+}
+
+void IDBObjectStoreBackendImpl::putInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl> objectStore, PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBKey> prpKey, PutMode putMode, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
+{
+ RefPtr<SerializedScriptValue> value = prpValue;
+ RefPtr<IDBKey> key = selectKeyForPut(objectStore.get(), value.get(), prpKey.get(), putMode, callbacks.get());
+ if (!key)
+ return;
+
if (key->type() == IDBKey::NullType) {
callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "NULL key is not allowed."));
return;
@@ -261,7 +291,7 @@ void IDBObjectStoreBackendImpl::putInternal(ScriptExecutionContext*, PassRefPtr<
bindWhereClause(getQuery, objectStore->id(), key.get());
bool isExistingValue = getQuery.step() == SQLResultRow;
- if (addOnly && isExistingValue) {
+ if (putMode == AddOnly && isExistingValue) {
callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::CONSTRAINT_ERR, "Key already exists in the object store."));
return;
}
@@ -342,7 +372,39 @@ void IDBObjectStoreBackendImpl::deleteInternal(ScriptExecutionContext*, PassRefP
ok = indexQuery.step() == SQLResultDone;
ASSERT_UNUSED(ok, ok);
- callbacks->onSuccess();
+ callbacks->onSuccess(SerializedScriptValue::nullValue());
+}
+
+void IDBObjectStoreBackendImpl::clear(PassRefPtr<IDBCallbacks> prpCallbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
+{
+ if (transaction->mode() == IDBTransaction::READ_ONLY) {
+ ec = IDBDatabaseException::READ_ONLY_ERR;
+ return;
+ }
+
+ RefPtr<IDBObjectStoreBackendImpl> objectStore = this;
+ RefPtr<IDBCallbacks> callbacks = prpCallbacks;
+
+ if (!transaction->scheduleTask(createCallbackTask(&IDBObjectStoreBackendImpl::clearInternal, objectStore, callbacks)))
+ ec = IDBDatabaseException::NOT_ALLOWED_ERR;
+}
+
+static void doDelete(SQLiteDatabase& db, const char* sql, int64_t id)
+{
+ SQLiteStatement deleteQuery(db, sql);
+ bool ok = deleteQuery.prepare() == SQLResultOk;
+ ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
+ deleteQuery.bindInt64(1, id);
+ ok = deleteQuery.step() == SQLResultDone;
+ ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
+}
+
+void IDBObjectStoreBackendImpl::clearInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl> objectStore, PassRefPtr<IDBCallbacks> callbacks)
+{
+ doDelete(objectStore->sqliteDatabase(), "DELETE FROM IndexData WHERE objectStoreDataId IN (SELECT id FROM ObjectStoreData WHERE objectStoreId = ?)", objectStore->id());
+ doDelete(objectStore->sqliteDatabase(), "DELETE FROM ObjectStoreData WHERE objectStoreId = ?", objectStore->id());
+
+ callbacks->onSuccess(SerializedScriptValue::undefinedValue());
}
PassRefPtr<IDBIndexBackendInterface> IDBObjectStoreBackendImpl::createIndex(const String& name, const String& keyPath, bool unique, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
@@ -401,16 +463,6 @@ PassRefPtr<IDBIndexBackendInterface> IDBObjectStoreBackendImpl::index(const Stri
return index.release();
}
-static void doDelete(SQLiteDatabase& db, const char* sql, int64_t id)
-{
- SQLiteStatement deleteQuery(db, sql);
- bool ok = deleteQuery.prepare() == SQLResultOk;
- ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
- deleteQuery.bindInt64(1, id);
- ok = deleteQuery.step() == SQLResultDone;
- ASSERT_UNUSED(ok, ok); // FIXME: Better error handling.
-}
-
void IDBObjectStoreBackendImpl::deleteIndex(const String& name, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
{
if (transaction->mode() != IDBTransaction::VERSION_CHANGE) {
@@ -483,7 +535,7 @@ void IDBObjectStoreBackendImpl::openCursorInternal(ScriptExecutionContext*, Pass
query->bindInt64(currentColumn, objectStore->id());
if (query->step() != SQLResultRow) {
- callbacks->onSuccess();
+ callbacks->onSuccess(SerializedScriptValue::nullValue());
return;
}
diff --git a/Source/WebCore/storage/IDBObjectStoreBackendImpl.h b/Source/WebCore/storage/IDBObjectStoreBackendImpl.h
index 9fb1b7c..b54f9fd 100644
--- a/Source/WebCore/storage/IDBObjectStoreBackendImpl.h
+++ b/Source/WebCore/storage/IDBObjectStoreBackendImpl.h
@@ -67,8 +67,9 @@ public:
virtual bool autoIncrement() const { return m_autoIncrement; }
virtual void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
- virtual void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
+ virtual void put(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, PutMode, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void deleteFunction(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
+ virtual void clear(PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
virtual PassRefPtr<IDBIndexBackendInterface> createIndex(const String& name, const String& keyPath, bool unique, IDBTransactionBackendInterface*, ExceptionCode&);
virtual PassRefPtr<IDBIndexBackendInterface> index(const String& name, ExceptionCode&);
@@ -83,10 +84,13 @@ private:
void loadIndexes();
SQLiteDatabase& sqliteDatabase() const;
PassRefPtr<IDBKey> genAutoIncrementKey();
+ void resetAutoIncrementKeyCache() { m_autoIncrementNumber = -1; }
+ static PassRefPtr<IDBKey> selectKeyForPut(IDBObjectStoreBackendImpl*, SerializedScriptValue*, IDBKey*, PutMode, IDBCallbacks*);
static void getInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
- static void putInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
+ static void putInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, PutMode, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
static void deleteInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
+ static void clearInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBCallbacks>);
static void createIndexInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBTransactionBackendInterface>);
static void deleteIndexInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBIndexBackendImpl>, PassRefPtr<IDBTransactionBackendInterface>);
static void openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl>, PassRefPtr<IDBKeyRange> range, unsigned short direction, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBTransactionBackendInterface>);
diff --git a/Source/WebCore/storage/IDBObjectStoreBackendInterface.h b/Source/WebCore/storage/IDBObjectStoreBackendInterface.h
index 02ceb27..177701c 100644
--- a/Source/WebCore/storage/IDBObjectStoreBackendInterface.h
+++ b/Source/WebCore/storage/IDBObjectStoreBackendInterface.h
@@ -51,9 +51,17 @@ public:
virtual PassRefPtr<DOMStringList> indexNames() const = 0;
virtual void get(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
- virtual void put(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, bool addOnly, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
+
+ enum PutMode {
+ AddOrUpdate,
+ AddOnly,
+ CursorUpdate
+ };
+ virtual void put(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, PutMode, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
virtual void deleteFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
+ virtual void clear(PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
+
virtual PassRefPtr<IDBIndexBackendInterface> createIndex(const String& name, const String& keyPath, bool unique, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
virtual PassRefPtr<IDBIndexBackendInterface> index(const String& name, ExceptionCode&) = 0;
virtual void deleteIndex(const String& name, IDBTransactionBackendInterface*, ExceptionCode&) = 0;
@@ -66,4 +74,3 @@ public:
#endif
#endif // IDBObjectStoreBackendInterface_h
-
diff --git a/Source/WebCore/storage/IDBRequest.cpp b/Source/WebCore/storage/IDBRequest.cpp
index cbd635c..e7498ec 100644
--- a/Source/WebCore/storage/IDBRequest.cpp
+++ b/Source/WebCore/storage/IDBRequest.cpp
@@ -31,10 +31,11 @@
#if ENABLE(INDEXED_DATABASE)
-#include "Event.h"
+#include "Document.h"
#include "EventException.h"
#include "EventListener.h"
#include "EventNames.h"
+#include "EventQueue.h"
#include "IDBCursor.h"
#include "IDBDatabase.h"
#include "IDBIndex.h"
@@ -42,163 +43,169 @@
#include "IDBObjectStore.h"
#include "IDBPendingTransactionMonitor.h"
#include "IDBSuccessEvent.h"
-#include "ScriptExecutionContext.h"
namespace WebCore {
-IDBRequest::IDBRequest(ScriptExecutionContext* context, PassRefPtr<IDBAny> source, IDBTransactionBackendInterface* transaction)
+PassRefPtr<IDBRequest> IDBRequest::create(ScriptExecutionContext* context, PassRefPtr<IDBAny> source, IDBTransaction* transaction)
+{
+ return adoptRef(new IDBRequest(context, source, transaction));
+}
+
+IDBRequest::IDBRequest(ScriptExecutionContext* context, PassRefPtr<IDBAny> source, IDBTransaction* transaction)
: ActiveDOMObject(context, this)
, m_source(source)
, m_transaction(transaction)
- , m_timer(this, &IDBRequest::timerFired)
, m_readyState(LOADING)
+ , m_finished(false)
{
if (m_transaction)
- IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
+ IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
}
IDBRequest::~IDBRequest()
{
}
-bool IDBRequest::resetReadyState(IDBTransactionBackendInterface* transaction)
+bool IDBRequest::resetReadyState(IDBTransaction* transaction)
{
- ASSERT(m_readyState == DONE);
- m_readyState = LOADING;
- ASSERT(!m_transaction);
+ ASSERT(!m_finished);
+ ASSERT(scriptExecutionContext());
+ if (m_readyState != DONE)
+ return false;
+
m_transaction = transaction;
- IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
+ m_readyState = LOADING;
+
+ IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
+
return true;
}
void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
{
- scheduleEvent(0, error);
-}
-
-void IDBRequest::onSuccess()
-{
- scheduleEvent(IDBAny::createNull(), 0);
+ enqueueEvent(IDBErrorEvent::create(m_source, *error));
}
void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
{
- scheduleEvent(IDBAny::create(IDBCursor::create(backend, this, m_transaction.get())), 0);
+ enqueueEvent(IDBSuccessEvent::create(m_source, IDBAny::create(IDBCursor::create(backend, this, m_transaction.get()))));
}
void IDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
{
- scheduleEvent(IDBAny::create(IDBDatabase::create(backend)), 0);
+ enqueueEvent(IDBSuccessEvent::create(m_source, IDBAny::create(IDBDatabase::create(scriptExecutionContext(), backend))));
}
void IDBRequest::onSuccess(PassRefPtr<IDBIndexBackendInterface> backend)
{
- scheduleEvent(IDBAny::create(IDBIndex::create(backend, m_transaction.get())), 0);
+ ASSERT_NOT_REACHED(); // FIXME: This method should go away.
}
void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
{
- scheduleEvent(IDBAny::create(idbKey), 0);
+ enqueueEvent(IDBSuccessEvent::create(m_source, IDBAny::create(idbKey)));
}
void IDBRequest::onSuccess(PassRefPtr<IDBObjectStoreBackendInterface> backend)
{
- // FIXME: This function should go away once createObjectStore is sync.
- scheduleEvent(IDBAny::create(IDBObjectStore::create(backend, m_transaction.get())), 0);
+ ASSERT_NOT_REACHED(); // FIXME: This method should go away.
}
void IDBRequest::onSuccess(PassRefPtr<IDBTransactionBackendInterface> prpBackend)
{
+ if (!scriptExecutionContext())
+ return;
+
RefPtr<IDBTransactionBackendInterface> backend = prpBackend;
- // This is only used by setVersion which will always have a source that's an IDBDatabase.
- m_source->idbDatabase()->setSetVersionTransaction(backend.get());
RefPtr<IDBTransaction> frontend = IDBTransaction::create(scriptExecutionContext(), backend, m_source->idbDatabase().get());
backend->setCallbacks(frontend.get());
- m_transaction = backend;
- IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
- scheduleEvent(IDBAny::create(frontend.release()), 0);
-}
+ m_transaction = frontend;
-void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptValue)
-{
- scheduleEvent(IDBAny::create(serializedScriptValue), 0);
-}
+ ASSERT(m_source->type() == IDBAny::IDBDatabaseType);
+ m_source->idbDatabase()->setSetVersionTransaction(frontend.get());
-ScriptExecutionContext* IDBRequest::scriptExecutionContext() const
-{
- return ActiveDOMObject::scriptExecutionContext();
+ IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
+ enqueueEvent(IDBSuccessEvent::create(m_source, IDBAny::create(frontend.release())));
}
-bool IDBRequest::canSuspend() const
+void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptValue)
{
- // IDBTransactions cannot be suspended at the moment. We therefore
- // disallow the back/forward cache for pages that use IndexedDatabase.
- return false;
+ enqueueEvent(IDBSuccessEvent::create(m_source, IDBAny::create(serializedScriptValue)));
}
-EventTargetData* IDBRequest::eventTargetData()
+bool IDBRequest::hasPendingActivity() const
{
- return &m_eventTargetData;
+ // FIXME: In an ideal world, we should return true as long as anyone has a or can
+ // get a handle to us and we have event listeners. This is order to handle
+ // user generated events properly.
+ return !m_finished || ActiveDOMObject::hasPendingActivity();
}
-EventTargetData* IDBRequest::ensureEventTargetData()
+ScriptExecutionContext* IDBRequest::scriptExecutionContext() const
{
- return &m_eventTargetData;
+ return ActiveDOMObject::scriptExecutionContext();
}
-void IDBRequest::timerFired(Timer<IDBRequest>*)
+bool IDBRequest::dispatchEvent(PassRefPtr<Event> event)
{
- ASSERT(m_selfRef);
- ASSERT(m_pendingEvents.size());
- // FIXME: We should handle the stop event and stop any timers when we see it. We can then assert here that scriptExecutionContext is non-null.
-
- // We need to keep self-referencing ourself, otherwise it's possible we'll be deleted.
- // But in some cases, suspend() could be called while we're dispatching an event, so we
- // need to make sure that resume() doesn't re-start the timer based on m_selfRef being set.
- RefPtr<IDBRequest> selfRef = m_selfRef.release();
-
- // readyStateReset can be called synchronously while we're dispatching the event.
- RefPtr<IDBTransactionBackendInterface> transaction = m_transaction;
- m_transaction.clear();
-
- Vector<PendingEvent> pendingEvents;
- pendingEvents.swap(m_pendingEvents);
- for (size_t i = 0; i < pendingEvents.size(); ++i) {
- // It's possible we've navigated in which case we'll crash.
- if (!scriptExecutionContext())
- return;
+ ASSERT(!m_finished);
+ ASSERT(scriptExecutionContext());
+ ASSERT(event->target() == this);
+ ASSERT(m_readyState < DONE);
+ m_readyState = DONE;
- if (pendingEvents[i].m_error) {
- ASSERT(!pendingEvents[i].m_result);
- dispatchEvent(IDBErrorEvent::create(m_source, *pendingEvents[i].m_error));
- } else {
- ASSERT(pendingEvents[i].m_result->type() != IDBAny::UndefinedType);
- dispatchEvent(IDBSuccessEvent::create(m_source, pendingEvents[i].m_result));
- }
+ Vector<RefPtr<EventTarget> > targets;
+ targets.append(this);
+ if (m_transaction) {
+ targets.append(m_transaction);
+ // If there ever are events that are associated with a database but
+ // that do not have a transaction, then this will not work and we need
+ // this object to actually hold a reference to the database (to ensure
+ // it stays alive).
+ targets.append(m_transaction->db());
}
- if (transaction) {
- // Now that we processed all pending events, let the transaction monitor check if
- // it can commit the current transaction or if there's anything new pending.
- // FIXME: Handle the workers case.
- transaction->didCompleteTaskEvents();
+
+ ASSERT(event->isIDBErrorEvent() || event->isIDBSuccessEvent());
+ bool dontPreventDefault = static_cast<IDBEvent*>(event.get())->dispatch(targets);
+
+ // If the event's result was of type IDBCursor, then it's possible for us to
+ // fire again (unless the transaction completes).
+ if (event->isIDBSuccessEvent()) {
+ RefPtr<IDBAny> any = static_cast<IDBSuccessEvent*>(event.get())->result();
+ if (any->type() != IDBAny::IDBCursorType)
+ m_finished = true;
+ } else
+ m_finished = true;
+
+ if (m_transaction) {
+ if (dontPreventDefault && event->isIDBErrorEvent())
+ m_transaction->backend()->abort();
+ m_transaction->backend()->didCompleteTaskEvents();
}
+ return dontPreventDefault;
}
-void IDBRequest::scheduleEvent(PassRefPtr<IDBAny> result, PassRefPtr<IDBDatabaseError> error)
+void IDBRequest::enqueueEvent(PassRefPtr<Event> event)
{
+ ASSERT(!m_finished);
ASSERT(m_readyState < DONE);
- ASSERT(!!m_selfRef == m_timer.isActive());
+ if (!scriptExecutionContext())
+ return;
- PendingEvent pendingEvent;
- pendingEvent.m_result = result;
- pendingEvent.m_error = error;
- m_pendingEvents.append(pendingEvent);
+ ASSERT(scriptExecutionContext()->isDocument());
+ EventQueue* eventQueue = static_cast<Document*>(scriptExecutionContext())->eventQueue();
+ event->setTarget(this);
+ eventQueue->enqueueEvent(event);
+}
- m_readyState = DONE;
- if (!m_timer.isActive()) {
- m_selfRef = this;
- m_timer.startOneShot(0);
- }
+EventTargetData* IDBRequest::eventTargetData()
+{
+ return &m_eventTargetData;
+}
+
+EventTargetData* IDBRequest::ensureEventTargetData()
+{
+ return &m_eventTargetData;
}
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBRequest.h b/Source/WebCore/storage/IDBRequest.h
index fa68208..5c31318 100644
--- a/Source/WebCore/storage/IDBRequest.h
+++ b/Source/WebCore/storage/IDBRequest.h
@@ -32,21 +32,21 @@
#if ENABLE(INDEXED_DATABASE)
#include "ActiveDOMObject.h"
+#include "Event.h"
#include "EventListener.h"
#include "EventNames.h"
#include "EventTarget.h"
#include "IDBAny.h"
#include "IDBCallbacks.h"
-#include "Timer.h"
-#include <wtf/Vector.h>
namespace WebCore {
-class IDBTransactionBackendInterface;
+class IDBEvent;
+class IDBTransaction;
class IDBRequest : public IDBCallbacks, public EventTarget, public ActiveDOMObject {
public:
- static PassRefPtr<IDBRequest> create(ScriptExecutionContext* context, PassRefPtr<IDBAny> source, IDBTransactionBackendInterface* transaction) { return adoptRef(new IDBRequest(context, source, transaction)); }
+ static PassRefPtr<IDBRequest> create(ScriptExecutionContext*, PassRefPtr<IDBAny> source, IDBTransaction*);
virtual ~IDBRequest();
// Defined in the IDL
@@ -58,11 +58,10 @@ public:
DEFINE_ATTRIBUTE_EVENT_LISTENER(success);
DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
- bool resetReadyState(IDBTransactionBackendInterface*);
+ bool resetReadyState(IDBTransaction*);
// IDBCallbacks
virtual void onError(PassRefPtr<IDBDatabaseError>);
- virtual void onSuccess(); // For "null".
virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>);
virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>);
virtual void onSuccess(PassRefPtr<IDBIndexBackendInterface>);
@@ -71,21 +70,22 @@ public:
virtual void onSuccess(PassRefPtr<IDBTransactionBackendInterface>);
virtual void onSuccess(PassRefPtr<SerializedScriptValue>);
+ // ActiveDOMObject
+ virtual bool hasPendingActivity() const;
+
// EventTarget
virtual IDBRequest* toIDBRequest() { return this; }
-
- // ActiveDOMObject
virtual ScriptExecutionContext* scriptExecutionContext() const;
- virtual bool canSuspend() const;
+ virtual bool dispatchEvent(PassRefPtr<Event>);
+ bool dispatchEvent(PassRefPtr<Event> event, ExceptionCode& ec) { return EventTarget::dispatchEvent(event, ec); }
using ThreadSafeShared<IDBCallbacks>::ref;
using ThreadSafeShared<IDBCallbacks>::deref;
private:
- IDBRequest(ScriptExecutionContext*, PassRefPtr<IDBAny> source, IDBTransactionBackendInterface* transaction);
+ IDBRequest(ScriptExecutionContext*, PassRefPtr<IDBAny> source, IDBTransaction*);
- void timerFired(Timer<IDBRequest>*);
- void scheduleEvent(PassRefPtr<IDBAny> result, PassRefPtr<IDBDatabaseError>);
+ void enqueueEvent(PassRefPtr<Event>);
// EventTarget
virtual void refEventTarget() { ref(); }
@@ -94,19 +94,11 @@ private:
virtual EventTargetData* ensureEventTargetData();
RefPtr<IDBAny> m_source;
- RefPtr<IDBTransactionBackendInterface> m_transaction;
-
- struct PendingEvent {
- RefPtr<IDBAny> m_result;
- RefPtr<IDBDatabaseError> m_error;
- };
- Vector<PendingEvent> m_pendingEvents;
-
- // Used to fire events asynchronously.
- Timer<IDBRequest> m_timer;
- RefPtr<IDBRequest> m_selfRef; // This is set to us iff there's an event pending.
+ RefPtr<IDBTransaction> m_transaction;
ReadyState m_readyState;
+ bool m_finished; // Is it possible that we'll fire any more events? If not, we're finished.
+
EventTargetData m_eventTargetData;
};
diff --git a/Source/WebCore/storage/IDBSuccessEvent.cpp b/Source/WebCore/storage/IDBSuccessEvent.cpp
index 2dcd964..110b78b 100644
--- a/Source/WebCore/storage/IDBSuccessEvent.cpp
+++ b/Source/WebCore/storage/IDBSuccessEvent.cpp
@@ -42,7 +42,7 @@ PassRefPtr<IDBSuccessEvent> IDBSuccessEvent::create(PassRefPtr<IDBAny> source, P
}
IDBSuccessEvent::IDBSuccessEvent(PassRefPtr<IDBAny> source, PassRefPtr<IDBAny> result)
- : IDBEvent(eventNames().successEvent, source)
+ : IDBEvent(eventNames().successEvent, source, false)
, m_result(result)
{
}
diff --git a/Source/WebCore/storage/IDBTransaction.cpp b/Source/WebCore/storage/IDBTransaction.cpp
index e3625d4..1f696b3 100644
--- a/Source/WebCore/storage/IDBTransaction.cpp
+++ b/Source/WebCore/storage/IDBTransaction.cpp
@@ -28,8 +28,9 @@
#if ENABLE(INDEXED_DATABASE)
-#include "Event.h"
+#include "Document.h"
#include "EventException.h"
+#include "EventQueue.h"
#include "IDBAbortEvent.h"
#include "IDBCompleteEvent.h"
#include "IDBDatabase.h"
@@ -38,20 +39,22 @@
#include "IDBObjectStore.h"
#include "IDBObjectStoreBackendInterface.h"
#include "IDBPendingTransactionMonitor.h"
-#include "IDBTimeoutEvent.h"
-#include "ScriptExecutionContext.h"
namespace WebCore {
+PassRefPtr<IDBTransaction> IDBTransaction::create(ScriptExecutionContext* context, PassRefPtr<IDBTransactionBackendInterface> backend, IDBDatabase* db)
+{
+ return adoptRef(new IDBTransaction(context, backend, db));
+}
+
IDBTransaction::IDBTransaction(ScriptExecutionContext* context, PassRefPtr<IDBTransactionBackendInterface> backend, IDBDatabase* db)
: ActiveDOMObject(context, this)
, m_backend(backend)
, m_database(db)
, m_mode(m_backend->mode())
- , m_onAbortTimer(this, &IDBTransaction::onAbortTimerFired)
- , m_onCompleteTimer(this, &IDBTransaction::onCompleteTimerFired)
- , m_onTimeoutTimer(this, &IDBTransaction::onTimeoutTimerFired)
+ , m_finished(false)
{
+ ASSERT(m_backend);
IDBPendingTransactionMonitor::addPendingTransaction(m_backend.get());
}
@@ -59,19 +62,29 @@ IDBTransaction::~IDBTransaction()
{
}
+IDBTransactionBackendInterface* IDBTransaction::backend() const
+{
+ return m_backend.get();
+}
+
+bool IDBTransaction::finished() const
+{
+ return m_finished;
+}
+
unsigned short IDBTransaction::mode() const
{
return m_mode;
}
-IDBDatabase* IDBTransaction::db()
+IDBDatabase* IDBTransaction::db() const
{
return m_database.get();
}
PassRefPtr<IDBObjectStore> IDBTransaction::objectStore(const String& name, ExceptionCode& ec)
{
- if (!m_backend) {
+ if (m_finished) {
ec = IDBDatabaseException::NOT_ALLOWED_ERR;
return 0;
}
@@ -80,94 +93,96 @@ PassRefPtr<IDBObjectStore> IDBTransaction::objectStore(const String& name, Excep
ASSERT(ec);
return 0;
}
- RefPtr<IDBObjectStore> objectStore = IDBObjectStore::create(objectStoreBackend, m_backend.get());
+ RefPtr<IDBObjectStore> objectStore = IDBObjectStore::create(objectStoreBackend, this);
return objectStore.release();
}
void IDBTransaction::abort()
{
+ RefPtr<IDBTransaction> selfRef = this;
if (m_backend)
m_backend->abort();
}
-ScriptExecutionContext* IDBTransaction::scriptExecutionContext() const
-{
- return ActiveDOMObject::scriptExecutionContext();
-}
-
void IDBTransaction::onAbort()
{
- ASSERT(!m_onAbortTimer.isActive());
- ASSERT(!m_onCompleteTimer.isActive());
- ASSERT(!m_onTimeoutTimer.isActive());
- m_selfRef = this;
- m_onAbortTimer.startOneShot(0);
- m_backend.clear(); // Release the backend as it holds a (circular) reference back to us.
+ enqueueEvent(IDBAbortEvent::create(IDBAny::create(this)));
}
void IDBTransaction::onComplete()
{
- ASSERT(!m_onAbortTimer.isActive());
- ASSERT(!m_onCompleteTimer.isActive());
- ASSERT(!m_onTimeoutTimer.isActive());
- m_selfRef = this;
- m_onCompleteTimer.startOneShot(0);
- m_backend.clear(); // Release the backend as it holds a (circular) reference back to us.
+ enqueueEvent(IDBCompleteEvent::create(IDBAny::create(this)));
}
-void IDBTransaction::onTimeout()
+bool IDBTransaction::hasPendingActivity() const
{
- ASSERT(!m_onAbortTimer.isActive());
- ASSERT(!m_onCompleteTimer.isActive());
- ASSERT(!m_onTimeoutTimer.isActive());
- m_selfRef = this;
- m_onTimeoutTimer.startOneShot(0);
- m_backend.clear(); // Release the backend as it holds a (circular) reference back to us.
+ // FIXME: In an ideal world, we should return true as long as anyone has a or can
+ // get a handle to us or any child request object and any of those have
+ // event listeners. This is in order to handle user generated events properly.
+ return !m_finished || ActiveDOMObject::hasPendingActivity();
}
-bool IDBTransaction::canSuspend() const
+ScriptExecutionContext* IDBTransaction::scriptExecutionContext() const
{
- // We may be in the middle of a transaction so we cannot suspend our object.
- // Instead, we simply don't allow the owner page to go into the back/forward cache.
- return false;
+ return ActiveDOMObject::scriptExecutionContext();
}
-void IDBTransaction::stop()
+bool IDBTransaction::dispatchEvent(PassRefPtr<Event> event)
{
- if (m_backend)
- m_backend->abort();
+ ASSERT(!m_finished);
+ ASSERT(scriptExecutionContext());
+ ASSERT(event->target() == this);
+ ASSERT(!m_finished);
+ m_finished = true;
+
+ Vector<RefPtr<EventTarget> > targets;
+ targets.append(this);
+ targets.append(db());
+
+ ASSERT(event->isIDBAbortEvent() || event->isIDBCompleteEvent());
+ return static_cast<IDBEvent*>(event.get())->dispatch(targets);
}
-EventTargetData* IDBTransaction::eventTargetData()
+bool IDBTransaction::canSuspend() const
{
- return &m_eventTargetData;
+ // FIXME: Technically we can suspend before the first request is schedule
+ // and after the complete/abort event is enqueued.
+ return m_finished;
}
-EventTargetData* IDBTransaction::ensureEventTargetData()
+void IDBTransaction::contextDestroyed()
{
- return &m_eventTargetData;
+ ActiveDOMObject::contextDestroyed();
+
+ // Must happen in contextDestroyed since it can result in ActiveDOMObjects being destructed
+ // (and contextDestroyed is the only one resilient against this).
+ RefPtr<IDBTransaction> selfRef = this;
+ if (m_backend)
+ m_backend->abort();
+
+ m_finished = true;
}
-void IDBTransaction::onAbortTimerFired(Timer<IDBTransaction>* transaction)
+void IDBTransaction::enqueueEvent(PassRefPtr<Event> event)
{
- ASSERT(m_selfRef);
- RefPtr<IDBTransaction> selfRef = m_selfRef.release();
- dispatchEvent(IDBAbortEvent::create());
+ ASSERT(!m_finished);
+ if (!scriptExecutionContext())
+ return;
+
+ ASSERT(scriptExecutionContext()->isDocument());
+ EventQueue* eventQueue = static_cast<Document*>(scriptExecutionContext())->eventQueue();
+ event->setTarget(this);
+ eventQueue->enqueueEvent(event);
}
-void IDBTransaction::onCompleteTimerFired(Timer<IDBTransaction>* transaction)
+EventTargetData* IDBTransaction::eventTargetData()
{
- ASSERT(m_selfRef);
- RefPtr<IDBTransaction> selfRef = m_selfRef.release();
- dispatchEvent(IDBCompleteEvent::create());
+ return &m_eventTargetData;
}
-
-void IDBTransaction::onTimeoutTimerFired(Timer<IDBTransaction>* transaction)
+EventTargetData* IDBTransaction::ensureEventTargetData()
{
- ASSERT(m_selfRef);
- RefPtr<IDBTransaction> selfRef = m_selfRef.release();
- dispatchEvent(IDBTimeoutEvent::create());
+ return &m_eventTargetData;
}
}
diff --git a/Source/WebCore/storage/IDBTransaction.h b/Source/WebCore/storage/IDBTransaction.h
index d0a9f0f..ff4feb6 100644
--- a/Source/WebCore/storage/IDBTransaction.h
+++ b/Source/WebCore/storage/IDBTransaction.h
@@ -30,12 +30,12 @@
#include "ActiveDOMObject.h"
#include "DOMStringList.h"
+#include "Event.h"
#include "EventListener.h"
#include "EventNames.h"
#include "EventTarget.h"
#include "IDBTransactionBackendInterface.h"
#include "IDBTransactionCallbacks.h"
-#include "Timer.h"
#include <wtf/RefCounted.h>
namespace WebCore {
@@ -45,10 +45,7 @@ class IDBObjectStore;
class IDBTransaction : public IDBTransactionCallbacks, public EventTarget, public ActiveDOMObject {
public:
- static PassRefPtr<IDBTransaction> create(ScriptExecutionContext* context, PassRefPtr<IDBTransactionBackendInterface> backend, IDBDatabase* db)
- {
- return adoptRef(new IDBTransaction(context, backend, db));
- }
+ static PassRefPtr<IDBTransaction> create(ScriptExecutionContext*, PassRefPtr<IDBTransactionBackendInterface>, IDBDatabase*);
virtual ~IDBTransaction();
enum Mode {
@@ -57,27 +54,32 @@ public:
VERSION_CHANGE = 2
};
+ IDBTransactionBackendInterface* backend() const;
+ bool finished() const;
+
unsigned short mode() const;
- IDBDatabase* db();
+ IDBDatabase* db() const;
PassRefPtr<IDBObjectStore> objectStore(const String& name, ExceptionCode&);
void abort();
DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
DEFINE_ATTRIBUTE_EVENT_LISTENER(complete);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(timeout);
+ DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
// IDBTransactionCallbacks
virtual void onAbort();
virtual void onComplete();
- virtual void onTimeout();
// EventTarget
virtual IDBTransaction* toIDBTransaction() { return this; }
+ virtual ScriptExecutionContext* scriptExecutionContext() const;
+ virtual bool dispatchEvent(PassRefPtr<Event>);
+ bool dispatchEvent(PassRefPtr<Event> event, ExceptionCode& ec) { return EventTarget::dispatchEvent(event, ec); }
// ActiveDOMObject
- virtual ScriptExecutionContext* scriptExecutionContext() const;
+ virtual bool hasPendingActivity() const;
virtual bool canSuspend() const;
- virtual void stop();
+ virtual void contextDestroyed();
using RefCounted<IDBTransactionCallbacks>::ref;
using RefCounted<IDBTransactionCallbacks>::deref;
@@ -85,25 +87,20 @@ public:
private:
IDBTransaction(ScriptExecutionContext*, PassRefPtr<IDBTransactionBackendInterface>, IDBDatabase*);
+ void enqueueEvent(PassRefPtr<Event>);
+
// EventTarget
virtual void refEventTarget() { ref(); }
virtual void derefEventTarget() { deref(); }
virtual EventTargetData* eventTargetData();
virtual EventTargetData* ensureEventTargetData();
- void onAbortTimerFired(Timer<IDBTransaction>*);
- void onCompleteTimerFired(Timer<IDBTransaction>*);
- void onTimeoutTimerFired(Timer<IDBTransaction>*);
-
- EventTargetData m_eventTargetData;
RefPtr<IDBTransactionBackendInterface> m_backend;
RefPtr<IDBDatabase> m_database;
unsigned short m_mode;
+ bool m_finished; // Is it possible that we'll fire any more events or allow any new transactions? If not, we're finished.
- Timer<IDBTransaction> m_onAbortTimer;
- Timer<IDBTransaction> m_onCompleteTimer;
- Timer<IDBTransaction> m_onTimeoutTimer;
- RefPtr<IDBTransaction> m_selfRef; // This is set to us iff there's an event pending.
+ EventTargetData m_eventTargetData;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/IDBTransaction.idl b/Source/WebCore/storage/IDBTransaction.idl
index b57ac4a..2f02195 100644
--- a/Source/WebCore/storage/IDBTransaction.idl
+++ b/Source/WebCore/storage/IDBTransaction.idl
@@ -44,7 +44,7 @@ module storage {
// Events
attribute EventListener onabort;
attribute EventListener oncomplete;
- attribute EventListener ontimeout;
+ attribute EventListener onerror;
// EventTarget interface
void addEventListener(in DOMString type,
in EventListener listener,
diff --git a/Source/WebCore/storage/IDBTransactionBackendImpl.cpp b/Source/WebCore/storage/IDBTransactionBackendImpl.cpp
index 0012231..1357838 100644
--- a/Source/WebCore/storage/IDBTransactionBackendImpl.cpp
+++ b/Source/WebCore/storage/IDBTransactionBackendImpl.cpp
@@ -35,15 +35,14 @@
namespace WebCore {
-PassRefPtr<IDBTransactionBackendImpl> IDBTransactionBackendImpl::create(DOMStringList* objectStores, unsigned short mode, unsigned long timeout, IDBDatabaseBackendImpl* database)
+PassRefPtr<IDBTransactionBackendImpl> IDBTransactionBackendImpl::create(DOMStringList* objectStores, unsigned short mode, IDBDatabaseBackendImpl* database)
{
- return adoptRef(new IDBTransactionBackendImpl(objectStores, mode, timeout, database));
+ return adoptRef(new IDBTransactionBackendImpl(objectStores, mode, database));
}
-IDBTransactionBackendImpl::IDBTransactionBackendImpl(DOMStringList* objectStores, unsigned short mode, unsigned long timeout, IDBDatabaseBackendImpl* database)
+IDBTransactionBackendImpl::IDBTransactionBackendImpl(DOMStringList* objectStores, unsigned short mode, IDBDatabaseBackendImpl* database)
: m_objectStoreNames(objectStores)
, m_mode(mode)
- , m_timeout(timeout) // FIXME: Implement timeout.
, m_state(Unused)
, m_database(database)
, m_transaction(new SQLiteTransaction(database->sqliteDatabase()))
@@ -180,12 +179,12 @@ void IDBTransactionBackendImpl::taskTimerFired(Timer<IDBTransactionBackendImpl>*
if (m_state == StartPending) {
m_transaction->begin();
m_state = Running;
- } else
- ASSERT(m_state == Running);
+ }
TaskQueue queue;
queue.swap(m_taskQueue);
while (!queue.isEmpty() && m_state != Finished) {
+ ASSERT(m_state == Running);
OwnPtr<ScriptExecutionContext::Task> task(queue.first().release());
queue.removeFirst();
m_pendingEvents++;
diff --git a/Source/WebCore/storage/IDBTransactionBackendImpl.h b/Source/WebCore/storage/IDBTransactionBackendImpl.h
index f4dfaa8..1297e74 100644
--- a/Source/WebCore/storage/IDBTransactionBackendImpl.h
+++ b/Source/WebCore/storage/IDBTransactionBackendImpl.h
@@ -42,7 +42,7 @@ class IDBDatabaseBackendImpl;
class IDBTransactionBackendImpl : public IDBTransactionBackendInterface {
public:
- static PassRefPtr<IDBTransactionBackendImpl> create(DOMStringList* objectStores, unsigned short mode, unsigned long timeout, IDBDatabaseBackendImpl*);
+ static PassRefPtr<IDBTransactionBackendImpl> create(DOMStringList* objectStores, unsigned short mode, IDBDatabaseBackendImpl*);
virtual ~IDBTransactionBackendImpl();
virtual PassRefPtr<IDBObjectStoreBackendInterface> objectStore(const String& name, ExceptionCode&);
@@ -55,7 +55,7 @@ public:
void run();
private:
- IDBTransactionBackendImpl(DOMStringList* objectStores, unsigned short mode, unsigned long timeout, IDBDatabaseBackendImpl*);
+ IDBTransactionBackendImpl(DOMStringList* objectStores, unsigned short mode, IDBDatabaseBackendImpl*);
enum State {
Unused, // Created, but no tasks yet.
@@ -72,7 +72,6 @@ private:
RefPtr<DOMStringList> m_objectStoreNames;
unsigned short m_mode;
- unsigned long m_timeout;
State m_state;
RefPtr<IDBTransactionCallbacks> m_callbacks;
diff --git a/Source/WebCore/storage/IDBTransactionCallbacks.h b/Source/WebCore/storage/IDBTransactionCallbacks.h
index 348608d..8d906a6 100644
--- a/Source/WebCore/storage/IDBTransactionCallbacks.h
+++ b/Source/WebCore/storage/IDBTransactionCallbacks.h
@@ -42,7 +42,6 @@ public:
virtual void onAbort() = 0;
virtual void onComplete() = 0;
- virtual void onTimeout() = 0;
};
} // namespace WebCore
diff --git a/Source/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp b/Source/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
index 92e9a7b..81eeb3e 100644
--- a/Source/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
+++ b/Source/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
@@ -39,11 +39,6 @@ PassRefPtr<IDBFactoryBackendInterface> IDBFactoryBackendInterface::create()
return PlatformBridge::idbFactory();
}
-IDBFactoryBackendInterface::~IDBFactoryBackendInterface()
-{
- PlatformBridge::idbShutdown();
-}
-
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
diff --git a/Source/WebCore/svg/SVGAElement.cpp b/Source/WebCore/svg/SVGAElement.cpp
index 8fbfc01..601b432 100644
--- a/Source/WebCore/svg/SVGAElement.cpp
+++ b/Source/WebCore/svg/SVGAElement.cpp
@@ -105,6 +105,21 @@ void SVGAElement::svgAttributeChanged(const QualifiedName& attrName)
}
}
+AttributeToPropertyTypeMap& SVGAElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGAElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::targetAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGAElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGStyledTransformableElement::synchronizeProperty(attrName);
diff --git a/Source/WebCore/svg/SVGAElement.h b/Source/WebCore/svg/SVGAElement.h
index 20a4e07..6d9cd43 100644
--- a/Source/WebCore/svg/SVGAElement.h
+++ b/Source/WebCore/svg/SVGAElement.h
@@ -52,6 +52,9 @@ private:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
+
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual void defaultEventHandler(Event*);
diff --git a/Source/WebCore/svg/SVGAltGlyphElement.cpp b/Source/WebCore/svg/SVGAltGlyphElement.cpp
index ca13740..96fbac6 100644
--- a/Source/WebCore/svg/SVGAltGlyphElement.cpp
+++ b/Source/WebCore/svg/SVGAltGlyphElement.cpp
@@ -54,6 +54,20 @@ void SVGAltGlyphElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGAltGlyphElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGAltGlyphElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGAltGlyphElement::setGlyphRef(const AtomicString&, ExceptionCode& ec)
{
ec = NO_MODIFICATION_ALLOWED_ERR;
diff --git a/Source/WebCore/svg/SVGAltGlyphElement.h b/Source/WebCore/svg/SVGAltGlyphElement.h
index 0cbee79..114e666 100644
--- a/Source/WebCore/svg/SVGAltGlyphElement.h
+++ b/Source/WebCore/svg/SVGAltGlyphElement.h
@@ -47,6 +47,9 @@ private:
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
+
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual bool childShouldCreateRenderer(Node*) const;
diff --git a/Source/WebCore/svg/SVGAnimateElement.cpp b/Source/WebCore/svg/SVGAnimateElement.cpp
index 7fe4c87..0dfe086 100644
--- a/Source/WebCore/svg/SVGAnimateElement.cpp
+++ b/Source/WebCore/svg/SVGAnimateElement.cpp
@@ -24,8 +24,11 @@
#if ENABLE(SVG) && ENABLE(SVG_ANIMATION)
#include "SVGAnimateElement.h"
+#include "CSSPropertyNames.h"
#include "ColorDistance.h"
#include "FloatConversion.h"
+#include "QualifiedName.h"
+#include "RenderObject.h"
#include "SVGColor.h"
#include "SVGNames.h"
#include "SVGParserUtilities.h"
@@ -82,17 +85,31 @@ static bool parseNumberValueAndUnit(const String& in, double& value, String& uni
return ok;
}
+static inline bool adjustForCurrentColor(Color& color, const String& value, SVGElement* target)
+{
+ if (!target || !target->isStyled() || value != "currentColor")
+ return false;
+
+ if (RenderObject* targetRenderer = target->renderer())
+ color = targetRenderer->style()->visitedDependentColor(CSSPropertyColor);
+
+ return true;
+}
+
SVGAnimateElement::PropertyType SVGAnimateElement::determinePropertyType(const String& attribute) const
{
- // FIXME: We need a full property table for figuring this out reliably.
+ // FIXME: We should not allow animation of attribute types other than AnimatedColor for <animateColor>.
if (hasTagName(SVGNames::animateColorTag))
return ColorProperty;
- if (attribute == "d")
+
+ // FIXME: Now that we have a full property table we need a more granular type specific animation.
+ AnimatedAttributeType type = targetElement()->animatedPropertyTypeForAttribute(QualifiedName(nullAtom, attribute, nullAtom));
+ if (type == AnimatedColor)
+ return ColorProperty;
+ if (type == AnimatedPath)
return PathProperty;
- if (attribute == "points")
+ if (type == AnimatedPoints)
return PointsProperty;
- if (attribute == "color" || attribute == "fill" || attribute == "stroke")
- return ColorProperty;
return NumberProperty;
}
@@ -100,6 +117,9 @@ void SVGAnimateElement::calculateAnimatedValue(float percentage, unsigned repeat
{
ASSERT(percentage >= 0.f && percentage <= 1.f);
ASSERT(resultElement);
+ bool isInFirstHalfOfAnimation = percentage < 0.5;
+ AnimationMode animationMode = this->animationMode();
+
if (hasTagName(SVGNames::setTag))
percentage = 1.f;
if (!resultElement->hasTagName(SVGNames::animateTag) && !resultElement->hasTagName(SVGNames::animateColorTag)
@@ -111,33 +131,45 @@ void SVGAnimateElement::calculateAnimatedValue(float percentage, unsigned repeat
return;
if (m_propertyType == NumberProperty) {
// To animation uses contributions from the lower priority animations as the base value.
- if (animationMode() == ToAnimation)
+ if (animationMode == ToAnimation)
m_fromNumber = results->m_animatedNumber;
-
- double number = (m_toNumber - m_fromNumber) * percentage + m_fromNumber;
+
+ double number;
+ if (calcMode() == CalcModeDiscrete)
+ number = isInFirstHalfOfAnimation ? m_fromNumber : m_toNumber;
+ else
+ number = (m_toNumber - m_fromNumber) * percentage + m_fromNumber;
// FIXME: This is not correct for values animation.
if (isAccumulated() && repeat)
number += m_toNumber * repeat;
- if (isAdditive() && animationMode() != ToAnimation)
+ if (isAdditive() && animationMode != ToAnimation)
results->m_animatedNumber += number;
else
results->m_animatedNumber = number;
return;
}
if (m_propertyType == ColorProperty) {
- if (animationMode() == ToAnimation)
+ if (animationMode == ToAnimation)
m_fromColor = results->m_animatedColor;
- Color color = ColorDistance(m_fromColor, m_toColor).scaledDistance(percentage).addToColorAndClamp(m_fromColor);
+ Color color;
+ if (calcMode() == CalcModeDiscrete)
+ color = isInFirstHalfOfAnimation ? m_fromColor : m_toColor;
+ else
+ color = ColorDistance(m_fromColor, m_toColor).scaledDistance(percentage).addToColorAndClamp(m_fromColor);
+
// FIXME: Accumulate colors.
- if (isAdditive() && animationMode() != ToAnimation)
+ if (isAdditive() && animationMode != ToAnimation)
results->m_animatedColor = ColorDistance::addColorsAndClamp(results->m_animatedColor, color);
else
results->m_animatedColor = color;
return;
}
- AnimationMode animationMode = this->animationMode();
if (m_propertyType == PathProperty) {
+ if (animationMode == ToAnimation) {
+ ASSERT(results->m_animatedPathPointer);
+ m_fromPath = results->m_animatedPathPointer->copy();
+ }
if (!percentage) {
ASSERT(m_fromPath);
ASSERT(percentage >= 0);
@@ -197,8 +229,11 @@ bool SVGAnimateElement::calculateFromAndToValues(const String& fromString, const
// FIXME: Needs more solid way determine target attribute type.
m_propertyType = determinePropertyType(attributeName());
if (m_propertyType == ColorProperty) {
- m_fromColor = SVGColor::colorFromRGBColorString(fromString);
- m_toColor = SVGColor::colorFromRGBColorString(toString);
+ SVGElement* targetElement = this->targetElement();
+ if (!adjustForCurrentColor(m_fromColor, fromString, targetElement))
+ m_fromColor = SVGColor::colorFromRGBColorString(fromString);
+ if (!adjustForCurrentColor(m_toColor, toString, targetElement))
+ m_toColor = SVGColor::colorFromRGBColorString(toString);
if ((m_fromColor.isValid() && m_toColor.isValid()) || (m_toColor.isValid() && animationMode() == ToAnimation))
return true;
} else if (m_propertyType == NumberProperty) {
@@ -210,8 +245,9 @@ bool SVGAnimateElement::calculateFromAndToValues(const String& fromString, const
}
} else if (m_propertyType == PathProperty) {
SVGPathParserFactory* factory = SVGPathParserFactory::self();
- if (factory->buildSVGPathByteStreamFromString(fromString, m_fromPath, UnalteredParsing)) {
- if (factory->buildSVGPathByteStreamFromString(toString, m_toPath, UnalteredParsing))
+ if (factory->buildSVGPathByteStreamFromString(toString, m_toPath, UnalteredParsing)) {
+ // For to-animations the from number is calculated later
+ if (animationMode() == ToAnimation || factory->buildSVGPathByteStreamFromString(fromString, m_fromPath, UnalteredParsing))
return true;
}
m_fromPath.clear();
@@ -235,8 +271,12 @@ bool SVGAnimateElement::calculateFromAndByValues(const String& fromString, const
ASSERT(!hasTagName(SVGNames::setTag));
m_propertyType = determinePropertyType(attributeName());
if (m_propertyType == ColorProperty) {
- m_fromColor = fromString.isEmpty() ? Color() : SVGColor::colorFromRGBColorString(fromString);
- m_toColor = ColorDistance::addColorsAndClamp(m_fromColor, SVGColor::colorFromRGBColorString(byString));
+ SVGElement* targetElement = this->targetElement();
+ if (!adjustForCurrentColor(m_fromColor, fromString, targetElement))
+ m_fromColor = fromString.isEmpty() ? Color() : SVGColor::colorFromRGBColorString(fromString);
+ if (!adjustForCurrentColor(m_toColor, byString, targetElement))
+ m_toColor = SVGColor::colorFromRGBColorString(byString);
+ m_toColor = ColorDistance::addColorsAndClamp(m_fromColor, m_toColor);
if (!m_fromColor.isValid() || !m_toColor.isValid())
return false;
} else {
@@ -272,7 +312,9 @@ void SVGAnimateElement::resetToBaseValue(const String& baseString)
return;
} else if (m_propertyType == PathProperty) {
m_animatedPath.clear();
- m_animatedPathPointer = 0;
+ SVGPathParserFactory* factory = SVGPathParserFactory::self();
+ factory->buildSVGPathByteStreamFromString(baseString, m_animatedPath, UnalteredParsing);
+ m_animatedPathPointer = m_animatedPath.get();
return;
} else if (m_propertyType == PointsProperty) {
m_animatedPoints.clear();
diff --git a/Source/WebCore/svg/SVGAnimationElement.cpp b/Source/WebCore/svg/SVGAnimationElement.cpp
index 0fcda6d..c56e3b6 100644
--- a/Source/WebCore/svg/SVGAnimationElement.cpp
+++ b/Source/WebCore/svg/SVGAnimationElement.cpp
@@ -38,7 +38,6 @@
#include "FloatConversion.h"
#include "HTMLNames.h"
#include "PlatformString.h"
-#include "RenderObject.h"
#include "SVGElementInstance.h"
#include "SVGNames.h"
#include "SVGParserUtilities.h"
@@ -499,14 +498,6 @@ void SVGAnimationElement::currentValuesForValuesAnimation(float percent, float&
effectivePercent = calculatePercentForSpline(effectivePercent, index);
}
}
-static inline void adjustForCurrentColor(String& value, SVGElement* target)
-{
- if (!target || !target->isStyled() || value != "currentColor")
- return;
-
- if (RenderObject* targetRenderer = target->renderer())
- value = targetRenderer->style()->visitedDependentColor(CSSPropertyColor).name();
-}
void SVGAnimationElement::startedActiveInterval()
{
@@ -531,29 +522,22 @@ void SVGAnimationElement::startedActiveInterval()
String from = fromValue();
String to = toValue();
String by = byValue();
- SVGElement* target = targetElement();
if (animationMode == NoAnimation)
return;
- if (animationMode == FromToAnimation) {
- adjustForCurrentColor(from, target);
- adjustForCurrentColor(to, target);
+ if (animationMode == FromToAnimation)
m_animationValid = calculateFromAndToValues(from, to);
- } else if (animationMode == ToAnimation) {
+ else if (animationMode == ToAnimation) {
// For to-animations the from value is the current accumulated value from lower priority animations.
// The value is not static and is determined during the animation.
- adjustForCurrentColor(to, target);
m_animationValid = calculateFromAndToValues(String(), to);
- } else if (animationMode == FromByAnimation) {
- adjustForCurrentColor(from, target);
- adjustForCurrentColor(by, target);
+ } else if (animationMode == FromByAnimation)
m_animationValid = calculateFromAndByValues(from, by);
- } else if (animationMode == ByAnimation) {
- adjustForCurrentColor(by, target);
+ else if (animationMode == ByAnimation)
m_animationValid = calculateFromAndByValues(String(), by);
- } else if (animationMode == ValuesAnimation) {
+ else if (animationMode == ValuesAnimation) {
m_animationValid = m_values.size() > 1
&& (calcMode == CalcModePaced || !hasAttribute(SVGNames::keyTimesAttr) || hasAttribute(SVGNames::keyPointsAttr) || (m_values.size() == m_keyTimes.size()))
- && (calcMode == CalcModeDiscrete || !m_keyTimes.size() || m_keyTimes.last() == 1.0)
+ && (calcMode == CalcModeDiscrete || !m_keyTimes.size() || m_keyTimes.last() == 1)
&& (calcMode != CalcModeSpline || ((m_keySplines.size() && (m_keySplines.size() == m_values.size() - 1)) || m_keySplines.size() == m_keyPoints.size() - 1))
&& (!hasAttribute(SVGNames::keyPointsAttr) || (m_keyTimes.size() > 1 && m_keyTimes.size() == m_keyPoints.size()));
if (calcMode == CalcModePaced && m_animationValid)
diff --git a/Source/WebCore/svg/SVGCircleElement.cpp b/Source/WebCore/svg/SVGCircleElement.cpp
index 0ac4600..6a3a0d4 100644
--- a/Source/WebCore/svg/SVGCircleElement.cpp
+++ b/Source/WebCore/svg/SVGCircleElement.cpp
@@ -132,6 +132,22 @@ void SVGCircleElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGCircleElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGCircleElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::cxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::cyAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::rAttr, AnimatedLength);
+}
+
void SVGCircleElement::toPathData(Path& path) const
{
ASSERT(path.isEmpty());
diff --git a/Source/WebCore/svg/SVGCircleElement.h b/Source/WebCore/svg/SVGCircleElement.h
index f6946dd..32d3a22 100644
--- a/Source/WebCore/svg/SVGCircleElement.h
+++ b/Source/WebCore/svg/SVGCircleElement.h
@@ -47,6 +47,9 @@ private:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
+
virtual void toPathData(Path&) const;
virtual bool selfHasRelativeLengths() const;
diff --git a/Source/WebCore/svg/SVGClipPathElement.cpp b/Source/WebCore/svg/SVGClipPathElement.cpp
index d86370d..74727ee 100644
--- a/Source/WebCore/svg/SVGClipPathElement.cpp
+++ b/Source/WebCore/svg/SVGClipPathElement.cpp
@@ -102,6 +102,20 @@ void SVGClipPathElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGClipPathElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGClipPathElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::clipPathUnitsAttr, AnimatedEnumeration);
+}
+
void SVGClipPathElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledTransformableElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGClipPathElement.h b/Source/WebCore/svg/SVGClipPathElement.h
index 23242e8..ed2e13c 100644
--- a/Source/WebCore/svg/SVGClipPathElement.h
+++ b/Source/WebCore/svg/SVGClipPathElement.h
@@ -49,6 +49,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp b/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp
index 142d82d..c35a344 100644
--- a/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp
+++ b/Source/WebCore/svg/SVGComponentTransferFunctionElement.cpp
@@ -112,6 +112,24 @@ void SVGComponentTransferFunctionElement::synchronizeProperty(const QualifiedNam
synchronizeOffset();
}
+AttributeToPropertyTypeMap& SVGComponentTransferFunctionElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGComponentTransferFunctionElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+ attributeToPropertyTypeMap.set(SVGNames::typeAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::tableValuesAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::slopeAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::interceptAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::amplitudeAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::exponentAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::offsetAttr, AnimatedNumber);
+}
+
ComponentTransferFunction SVGComponentTransferFunctionElement::transferFunction() const
{
ComponentTransferFunction func;
diff --git a/Source/WebCore/svg/SVGComponentTransferFunctionElement.h b/Source/WebCore/svg/SVGComponentTransferFunctionElement.h
index 5f836f7..2be693b 100644
--- a/Source/WebCore/svg/SVGComponentTransferFunctionElement.h
+++ b/Source/WebCore/svg/SVGComponentTransferFunctionElement.h
@@ -38,6 +38,8 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
private:
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGCursorElement.cpp b/Source/WebCore/svg/SVGCursorElement.cpp
index 0c6a5d9..c49f799 100644
--- a/Source/WebCore/svg/SVGCursorElement.cpp
+++ b/Source/WebCore/svg/SVGCursorElement.cpp
@@ -72,6 +72,20 @@ void SVGCursorElement::parseMappedAttribute(Attribute* attr)
}
}
+AttributeToPropertyTypeMap& SVGCursorElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGCursorElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGCursorElement::addClient(SVGElement* element)
{
m_clients.add(element);
diff --git a/Source/WebCore/svg/SVGCursorElement.h b/Source/WebCore/svg/SVGCursorElement.h
index cd4a44e..c670009 100644
--- a/Source/WebCore/svg/SVGCursorElement.h
+++ b/Source/WebCore/svg/SVGCursorElement.h
@@ -53,6 +53,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
diff --git a/Source/WebCore/svg/SVGDocumentExtensions.cpp b/Source/WebCore/svg/SVGDocumentExtensions.cpp
index 3fd9761..7f7ba67 100644
--- a/Source/WebCore/svg/SVGDocumentExtensions.cpp
+++ b/Source/WebCore/svg/SVGDocumentExtensions.cpp
@@ -93,8 +93,12 @@ void SVGDocumentExtensions::startAnimations()
// FIXME: Eventually every "Time Container" will need a way to latch on to some global timer
// starting animations for a document will do this "latching"
#if ENABLE(SVG_ANIMATION)
- HashSet<SVGSVGElement*>::iterator end = m_timeContainers.end();
- for (HashSet<SVGSVGElement*>::iterator itr = m_timeContainers.begin(); itr != end; ++itr)
+ // FIXME: We hold a ref pointers to prevent a shadow tree from getting removed out from underneath us.
+ // In the future we should refactor the use-element to avoid this. See https://webkit.org/b/53704
+ Vector<RefPtr<SVGSVGElement> > timeContainers;
+ timeContainers.appendRange(m_timeContainers.begin(), m_timeContainers.end());
+ Vector<RefPtr<SVGSVGElement> >::iterator end = timeContainers.end();
+ for (Vector<RefPtr<SVGSVGElement> >::iterator itr = timeContainers.begin(); itr != end; ++itr)
(*itr)->timeContainer()->begin();
#endif
}
diff --git a/Source/WebCore/svg/SVGElement.cpp b/Source/WebCore/svg/SVGElement.cpp
index c9efae8..99134b2 100644
--- a/Source/WebCore/svg/SVGElement.cpp
+++ b/Source/WebCore/svg/SVGElement.cpp
@@ -256,6 +256,25 @@ void SVGElement::parseMappedAttribute(Attribute* attr)
StyledElement::parseMappedAttribute(attr);
}
+AttributeToPropertyTypeMap& SVGElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+AnimatedAttributeType SVGElement::animatedPropertyTypeForAttribute(const QualifiedName& attrName)
+{
+ AttributeToPropertyTypeMap& animatedAttributeMap = attributeToPropertyTypeMap();
+ if (animatedAttributeMap.isEmpty())
+ fillAttributeToPropertyTypeMap();
+ if (animatedAttributeMap.contains(attrName))
+ return animatedAttributeMap.get(attrName);
+ if (isStyled())
+ return static_cast<SVGStyledElement*>(this)->animatedPropertyTypeForCSSProperty(attrName);
+
+ return AnimatedUnknown;
+}
+
bool SVGElement::haveLoadedRequiredResources()
{
Node* child = firstChild();
diff --git a/Source/WebCore/svg/SVGElement.h b/Source/WebCore/svg/SVGElement.h
index 2c87f6e..ceb0973 100644
--- a/Source/WebCore/svg/SVGElement.h
+++ b/Source/WebCore/svg/SVGElement.h
@@ -25,9 +25,32 @@
#if ENABLE(SVG)
#include "SVGLocatable.h"
#include "StyledElement.h"
+#include <wtf/HashMap.h>
namespace WebCore {
+enum AnimatedAttributeType {
+ AnimatedAngle,
+ AnimatedBoolean,
+ AnimatedColor,
+ AnimatedEnumeration,
+ AnimatedInteger,
+ AnimatedLength,
+ AnimatedLengthList,
+ AnimatedNumber,
+ AnimatedNumberList,
+ AnimatedNumberOptionalNumber,
+ AnimatedPath,
+ AnimatedPoints,
+ AnimatedPreserveAspectRatio,
+ AnimatedRect,
+ AnimatedString,
+ AnimatedTransformList,
+ AnimatedUnknown
+};
+
+typedef HashMap<QualifiedName, AnimatedAttributeType> AttributeToPropertyTypeMap;
+
class CSSCursorImageValue;
class Document;
class SVGCursorElement;
@@ -64,6 +87,11 @@ public:
virtual void svgAttributeChanged(const QualifiedName&) { }
virtual void synchronizeProperty(const QualifiedName&) { }
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
+ AnimatedAttributeType animatedPropertyTypeForAttribute(const QualifiedName&);
+
+ virtual void fillAttributeToPropertyTypeMap() { }
+
void sendSVGLoadEventIfPossible(bool sendParentLoadEvents = false);
virtual AffineTransform* supplementalTransform() { return 0; }
diff --git a/Source/WebCore/svg/SVGEllipseElement.cpp b/Source/WebCore/svg/SVGEllipseElement.cpp
index 4a12aa7..129e1cd 100644
--- a/Source/WebCore/svg/SVGEllipseElement.cpp
+++ b/Source/WebCore/svg/SVGEllipseElement.cpp
@@ -142,6 +142,23 @@ void SVGEllipseElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGEllipseElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGEllipseElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::cxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::cyAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::rxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::ryAttr, AnimatedLength);
+}
+
void SVGEllipseElement::toPathData(Path& path) const
{
ASSERT(path.isEmpty());
diff --git a/Source/WebCore/svg/SVGEllipseElement.h b/Source/WebCore/svg/SVGEllipseElement.h
index 7ba2085..2c8a864 100644
--- a/Source/WebCore/svg/SVGEllipseElement.h
+++ b/Source/WebCore/svg/SVGEllipseElement.h
@@ -46,6 +46,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void toPathData(Path&) const;
diff --git a/Source/WebCore/svg/SVGFEBlendElement.cpp b/Source/WebCore/svg/SVGFEBlendElement.cpp
index 4128232..b0f580c 100644
--- a/Source/WebCore/svg/SVGFEBlendElement.cpp
+++ b/Source/WebCore/svg/SVGFEBlendElement.cpp
@@ -97,6 +97,22 @@ void SVGFEBlendElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeIn2();
}
+AttributeToPropertyTypeMap& SVGFEBlendElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEBlendElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::in2Attr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::modeAttr, AnimatedEnumeration);
+}
+
PassRefPtr<FilterEffect> SVGFEBlendElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEBlendElement.h b/Source/WebCore/svg/SVGFEBlendElement.h
index 292f385..c579ac5 100644
--- a/Source/WebCore/svg/SVGFEBlendElement.h
+++ b/Source/WebCore/svg/SVGFEBlendElement.h
@@ -38,6 +38,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp
index 4c7ac0b..d3229d0 100644
--- a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp
+++ b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp
@@ -98,6 +98,22 @@ void SVGFEColorMatrixElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeValues();
}
+AttributeToPropertyTypeMap& SVGFEColorMatrixElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEColorMatrixElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::typeAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::valuesAttr, AnimatedNumberList);
+}
+
PassRefPtr<FilterEffect> SVGFEColorMatrixElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEColorMatrixElement.h b/Source/WebCore/svg/SVGFEColorMatrixElement.h
index 04a8966..7bff011 100644
--- a/Source/WebCore/svg/SVGFEColorMatrixElement.h
+++ b/Source/WebCore/svg/SVGFEColorMatrixElement.h
@@ -39,6 +39,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFEComponentTransferElement.cpp b/Source/WebCore/svg/SVGFEComponentTransferElement.cpp
index 243f856..1b62ed9 100644
--- a/Source/WebCore/svg/SVGFEComponentTransferElement.cpp
+++ b/Source/WebCore/svg/SVGFEComponentTransferElement.cpp
@@ -64,6 +64,20 @@ void SVGFEComponentTransferElement::synchronizeProperty(const QualifiedName& att
synchronizeIn1();
}
+AttributeToPropertyTypeMap& SVGFEComponentTransferElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEComponentTransferElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+}
+
PassRefPtr<FilterEffect> SVGFEComponentTransferElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEComponentTransferElement.h b/Source/WebCore/svg/SVGFEComponentTransferElement.h
index ea7f84d..0b3608c 100644
--- a/Source/WebCore/svg/SVGFEComponentTransferElement.h
+++ b/Source/WebCore/svg/SVGFEComponentTransferElement.h
@@ -36,6 +36,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFECompositeElement.cpp b/Source/WebCore/svg/SVGFECompositeElement.cpp
index 4c83d4f..af738a9 100644
--- a/Source/WebCore/svg/SVGFECompositeElement.cpp
+++ b/Source/WebCore/svg/SVGFECompositeElement.cpp
@@ -127,6 +127,26 @@ void SVGFECompositeElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeK4();
}
+AttributeToPropertyTypeMap& SVGFECompositeElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFECompositeElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::in2Attr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::operatorAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::k1Attr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::k2Attr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::k3Attr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::k4Attr, AnimatedNumber);
+}
+
PassRefPtr<FilterEffect> SVGFECompositeElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFECompositeElement.h b/Source/WebCore/svg/SVGFECompositeElement.h
index 6892220..a4a9617 100644
--- a/Source/WebCore/svg/SVGFECompositeElement.h
+++ b/Source/WebCore/svg/SVGFECompositeElement.h
@@ -39,6 +39,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp
index 301e351..07ebc41 100644
--- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp
+++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp
@@ -159,6 +159,29 @@ void SVGFEConvolveMatrixElement::svgAttributeChanged(const QualifiedName& attrNa
invalidate();
}
+AttributeToPropertyTypeMap& SVGFEConvolveMatrixElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEConvolveMatrixElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::orderAttr, AnimatedNumberOptionalNumber);
+ attributeToPropertyTypeMap.set(SVGNames::kernelMatrixAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::divisorAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::biasAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::targetXAttr, AnimatedInteger);
+ attributeToPropertyTypeMap.set(SVGNames::targetYAttr, AnimatedInteger);
+ attributeToPropertyTypeMap.set(SVGNames::operatorAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::kernelUnitLengthAttr, AnimatedNumberOptionalNumber);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAlphaAttr, AnimatedBoolean);
+}
+
PassRefPtr<FilterEffect> SVGFEConvolveMatrixElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h
index 87709ab..ccc45ce 100644
--- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h
+++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h
@@ -43,6 +43,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& orderXIdentifier();
diff --git a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp
index 49888da..1e86097 100644
--- a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp
+++ b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp
@@ -84,18 +84,69 @@ void SVGFEDiffuseLightingElement::parseMappedAttribute(Attribute* attr)
SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
}
+bool SVGFEDiffuseLightingElement::setFilterEffectAttribute(FilterEffect* effect, const QualifiedName& attrName)
+{
+ FEDiffuseLighting* diffuseLighting = static_cast<FEDiffuseLighting*>(effect);
+ if (attrName == SVGNames::surfaceScaleAttr)
+ return diffuseLighting->setSurfaceScale(surfaceScale());
+ if (attrName == SVGNames::diffuseConstantAttr)
+ return diffuseLighting->setDiffuseConstant(diffuseConstant());
+ if (attrName == SVGNames::lighting_colorAttr) {
+ RefPtr<RenderStyle> filterStyle = styleForRenderer();
+ return diffuseLighting->setLightingColor(filterStyle->svgStyle()->lightingColor());
+ }
+
+ LightSource* lightSource = const_cast<LightSource*>(diffuseLighting->lightSource());
+ const SVGFELightElement* lightElement = findLightElement();
+
+ if (attrName == SVGNames::azimuthAttr)
+ return lightSource->setAzimuth(lightElement->azimuth());
+ if (attrName == SVGNames::elevationAttr)
+ return lightSource->setElevation(lightElement->elevation());
+ if (attrName == SVGNames::xAttr)
+ return lightSource->setX(lightElement->x());
+ if (attrName == SVGNames::yAttr)
+ return lightSource->setY(lightElement->y());
+ if (attrName == SVGNames::zAttr)
+ return lightSource->setZ(lightElement->z());
+ if (attrName == SVGNames::pointsAtXAttr)
+ return lightSource->setPointsAtX(lightElement->pointsAtX());
+ if (attrName == SVGNames::pointsAtYAttr)
+ return lightSource->setPointsAtY(lightElement->pointsAtY());
+ if (attrName == SVGNames::pointsAtZAttr)
+ return lightSource->setPointsAtZ(lightElement->pointsAtZ());
+ if (attrName == SVGNames::specularExponentAttr)
+ return lightSource->setSpecularExponent(lightElement->specularExponent());
+ if (attrName == SVGNames::limitingConeAngleAttr)
+ return lightSource->setLimitingConeAngle(lightElement->limitingConeAngle());
+
+ ASSERT_NOT_REACHED();
+ return false;
+}
+
void SVGFEDiffuseLightingElement::svgAttributeChanged(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
- if (attrName == SVGNames::inAttr
- || attrName == SVGNames::surfaceScaleAttr
+ if (attrName == SVGNames::surfaceScaleAttr
|| attrName == SVGNames::diffuseConstantAttr
|| attrName == SVGNames::kernelUnitLengthAttr
|| attrName == SVGNames::lighting_colorAttr)
+ primitiveAttributeChanged(attrName);
+
+ if (attrName == SVGNames::inAttr)
invalidate();
}
+void SVGFEDiffuseLightingElement::lightElementAttributeChanged(const SVGFELightElement* lightElement, const QualifiedName& attrName)
+{
+ if (findLightElement() != lightElement)
+ return;
+
+ // The light element has different attribute names.
+ primitiveAttributeChanged(attrName);
+}
+
void SVGFEDiffuseLightingElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
@@ -121,6 +172,23 @@ void SVGFEDiffuseLightingElement::synchronizeProperty(const QualifiedName& attrN
}
}
+AttributeToPropertyTypeMap& SVGFEDiffuseLightingElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEDiffuseLightingElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::diffuseConstantAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::surfaceScaleAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::kernelUnitLengthAttr, AnimatedNumberOptionalNumber);
+}
+
PassRefPtr<FilterEffect> SVGFEDiffuseLightingElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
@@ -132,25 +200,31 @@ PassRefPtr<FilterEffect> SVGFEDiffuseLightingElement::build(SVGFilterBuilder* fi
Color color = filterStyle->svgStyle()->lightingColor();
RefPtr<FilterEffect> effect = FEDiffuseLighting::create(filter, color, surfaceScale(), diffuseConstant(),
- kernelUnitLengthX(), kernelUnitLengthY(), findLights());
+ kernelUnitLengthX(), kernelUnitLengthY(), findLight());
effect->inputEffects().append(input1);
return effect.release();
}
-PassRefPtr<LightSource> SVGFEDiffuseLightingElement::findLights() const
+SVGFELightElement* SVGFEDiffuseLightingElement::findLightElement() const
{
for (Node* node = firstChild(); node; node = node->nextSibling()) {
if (node->hasTagName(SVGNames::feDistantLightTag)
|| node->hasTagName(SVGNames::fePointLightTag)
|| node->hasTagName(SVGNames::feSpotLightTag)) {
- SVGFELightElement* lightNode = static_cast<SVGFELightElement*>(node);
- return lightNode->lightSource();
+ return static_cast<SVGFELightElement*>(node);
}
}
-
return 0;
}
+PassRefPtr<LightSource> SVGFEDiffuseLightingElement::findLight() const
+{
+ SVGFELightElement* lightNode = findLightElement();
+ if (!lightNode)
+ return 0;
+ return lightNode->lightSource();
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGFEDiffuseLightingElement.h b/Source/WebCore/svg/SVGFEDiffuseLightingElement.h
index d56ced9..5f698c2 100644
--- a/Source/WebCore/svg/SVGFEDiffuseLightingElement.h
+++ b/Source/WebCore/svg/SVGFEDiffuseLightingElement.h
@@ -34,13 +34,17 @@ class SVGColor;
class SVGFEDiffuseLightingElement : public SVGFilterPrimitiveStandardAttributes {
public:
static PassRefPtr<SVGFEDiffuseLightingElement> create(const QualifiedName&, Document*);
+ void lightElementAttributeChanged(const SVGFELightElement*, const QualifiedName&);
private:
SVGFEDiffuseLightingElement(const QualifiedName&, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& kernelUnitLengthXIdentifier();
@@ -53,7 +57,8 @@ private:
DECLARE_ANIMATED_NUMBER(KernelUnitLengthX, kernelUnitLengthX)
DECLARE_ANIMATED_NUMBER(KernelUnitLengthY, kernelUnitLengthY)
- PassRefPtr<LightSource> findLights() const;
+ SVGFELightElement* findLightElement() const;
+ PassRefPtr<LightSource> findLight() const;
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp b/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp
index 56315b6..b5f2e32 100644
--- a/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp
+++ b/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp
@@ -116,6 +116,24 @@ void SVGFEDisplacementMapElement::synchronizeProperty(const QualifiedName& attrN
synchronizeScale();
}
+AttributeToPropertyTypeMap& SVGFEDisplacementMapElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEDisplacementMapElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::in2Attr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::xChannelSelectorAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::yChannelSelectorAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::scaleAttr, AnimatedNumber);
+}
+
PassRefPtr<FilterEffect> SVGFEDisplacementMapElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEDisplacementMapElement.h b/Source/WebCore/svg/SVGFEDisplacementMapElement.h
index 3af378c..c211de5 100644
--- a/Source/WebCore/svg/SVGFEDisplacementMapElement.h
+++ b/Source/WebCore/svg/SVGFEDisplacementMapElement.h
@@ -40,6 +40,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFEFloodElement.cpp b/Source/WebCore/svg/SVGFEFloodElement.cpp
index 53ad910..eb20927 100644
--- a/Source/WebCore/svg/SVGFEFloodElement.cpp
+++ b/Source/WebCore/svg/SVGFEFloodElement.cpp
@@ -49,6 +49,17 @@ PassRefPtr<FilterEffect> SVGFEFloodElement::build(SVGFilterBuilder*, Filter* fil
return FEFlood::create(filter, color, opacity);
}
+AttributeToPropertyTypeMap& SVGFEFloodElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEFloodElement::fillAttributeToPropertyTypeMap()
+{
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG) && ENABLE(FILTERS)
diff --git a/Source/WebCore/svg/SVGFEFloodElement.h b/Source/WebCore/svg/SVGFEFloodElement.h
index 1485ddd..f7c7987 100644
--- a/Source/WebCore/svg/SVGFEFloodElement.h
+++ b/Source/WebCore/svg/SVGFEFloodElement.h
@@ -34,6 +34,8 @@ public:
private:
SVGFEFloodElement(const QualifiedName&, Document*);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
};
diff --git a/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp b/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp
index 03368ac..4bbfc3d 100644
--- a/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp
+++ b/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp
@@ -107,6 +107,21 @@ void SVGFEGaussianBlurElement::synchronizeProperty(const QualifiedName& attrName
synchronizeIn1();
}
+AttributeToPropertyTypeMap& SVGFEGaussianBlurElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEGaussianBlurElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::stdDeviationAttr, AnimatedNumberOptionalNumber);
+}
+
PassRefPtr<FilterEffect> SVGFEGaussianBlurElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEGaussianBlurElement.h b/Source/WebCore/svg/SVGFEGaussianBlurElement.h
index 1b04658..0c8d8a3 100644
--- a/Source/WebCore/svg/SVGFEGaussianBlurElement.h
+++ b/Source/WebCore/svg/SVGFEGaussianBlurElement.h
@@ -40,6 +40,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& stdDeviationXIdentifier();
diff --git a/Source/WebCore/svg/SVGFEImageElement.cpp b/Source/WebCore/svg/SVGFEImageElement.cpp
index 0fd4763..f33cd36 100644
--- a/Source/WebCore/svg/SVGFEImageElement.cpp
+++ b/Source/WebCore/svg/SVGFEImageElement.cpp
@@ -122,6 +122,21 @@ void SVGFEImageElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeExternalResourcesRequired();
}
+AttributeToPropertyTypeMap& SVGFEImageElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEImageElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGFEImageElement::notifyFinished(CachedResource*)
{
if (!inDocument())
diff --git a/Source/WebCore/svg/SVGFEImageElement.h b/Source/WebCore/svg/SVGFEImageElement.h
index 3f22805..8a63fc9 100644
--- a/Source/WebCore/svg/SVGFEImageElement.h
+++ b/Source/WebCore/svg/SVGFEImageElement.h
@@ -51,6 +51,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void notifyFinished(CachedResource*);
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
diff --git a/Source/WebCore/svg/SVGFELightElement.cpp b/Source/WebCore/svg/SVGFELightElement.cpp
index 8ff8eb1..58a2f26 100644
--- a/Source/WebCore/svg/SVGFELightElement.cpp
+++ b/Source/WebCore/svg/SVGFELightElement.cpp
@@ -27,7 +27,9 @@
#include "Attribute.h"
#include "RenderObject.h"
#include "RenderSVGResource.h"
+#include "SVGFEDiffuseLightingElement.h"
#include "SVGFilterElement.h"
+#include "SVGFilterPrimitiveStandardAttributes.h"
#include "SVGNames.h"
namespace WebCore {
@@ -91,11 +93,21 @@ void SVGFELightElement::svgAttributeChanged(const QualifiedName& attrName)
|| attrName == SVGNames::pointsAtZAttr
|| attrName == SVGNames::specularExponentAttr
|| attrName == SVGNames::limitingConeAngleAttr) {
- if (ContainerNode* parent = parentNode()) {
- RenderObject* renderer = parent->renderer();
- if (renderer && renderer->isSVGResourceFilterPrimitive())
- RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
+ ContainerNode* parent = parentNode();
+ if (!parent)
+ return;
+
+ RenderObject* renderer = parent->renderer();
+ if (!renderer || !renderer->isSVGResourceFilterPrimitive())
+ return;
+
+ if (parent->hasTagName(SVGNames::feDiffuseLightingTag)) {
+ SVGFEDiffuseLightingElement* diffuseLighting = static_cast<SVGFEDiffuseLightingElement*>(parent);
+ diffuseLighting->lightElementAttributeChanged(this, attrName);
+ return;
}
+ // Handler for SpecularLighting has not implemented yet.
+ RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
}
@@ -139,6 +151,27 @@ void SVGFELightElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeLimitingConeAngle();
}
+AttributeToPropertyTypeMap& SVGFELightElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFELightElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+ attributeToPropertyTypeMap.set(SVGNames::azimuthAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::elevationAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::zAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::pointsAtXAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::pointsAtYAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::pointsAtZAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::specularExponentAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::limitingConeAngleAttr, AnimatedNumber);
+}
+
void SVGFELightElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGFELightElement.h b/Source/WebCore/svg/SVGFELightElement.h
index 2f6e687..606a499 100644
--- a/Source/WebCore/svg/SVGFELightElement.h
+++ b/Source/WebCore/svg/SVGFELightElement.h
@@ -40,6 +40,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFEMergeElement.cpp b/Source/WebCore/svg/SVGFEMergeElement.cpp
index 8b1c753..f94acaa 100644
--- a/Source/WebCore/svg/SVGFEMergeElement.cpp
+++ b/Source/WebCore/svg/SVGFEMergeElement.cpp
@@ -59,6 +59,17 @@ PassRefPtr<FilterEffect> SVGFEMergeElement::build(SVGFilterBuilder* filterBuilde
return effect.release();
}
+AttributeToPropertyTypeMap& SVGFEMergeElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEMergeElement::fillAttributeToPropertyTypeMap()
+{
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGFEMergeElement.h b/Source/WebCore/svg/SVGFEMergeElement.h
index 2495a56..8241ea8 100644
--- a/Source/WebCore/svg/SVGFEMergeElement.h
+++ b/Source/WebCore/svg/SVGFEMergeElement.h
@@ -34,6 +34,8 @@ public:
private:
SVGFEMergeElement(const QualifiedName&, Document*);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
};
diff --git a/Source/WebCore/svg/SVGFEMergeNodeElement.cpp b/Source/WebCore/svg/SVGFEMergeNodeElement.cpp
index 83739de..b6e9f84 100644
--- a/Source/WebCore/svg/SVGFEMergeNodeElement.cpp
+++ b/Source/WebCore/svg/SVGFEMergeNodeElement.cpp
@@ -71,6 +71,17 @@ void SVGFEMergeNodeElement::svgAttributeChanged(const QualifiedName& attrName)
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
+AttributeToPropertyTypeMap& SVGFEMergeNodeElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEMergeNodeElement::fillAttributeToPropertyTypeMap()
+{
+ attributeToPropertyTypeMap().set(SVGNames::inAttr, AnimatedString);
+}
+
void SVGFEMergeNodeElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGElement::synchronizeProperty(attrName);
diff --git a/Source/WebCore/svg/SVGFEMergeNodeElement.h b/Source/WebCore/svg/SVGFEMergeNodeElement.h
index 14f0e8e..d986829 100644
--- a/Source/WebCore/svg/SVGFEMergeNodeElement.h
+++ b/Source/WebCore/svg/SVGFEMergeNodeElement.h
@@ -37,6 +37,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
// Animated property declarations
DECLARE_ANIMATED_STRING(In1, in1)
diff --git a/Source/WebCore/svg/SVGFEMorphologyElement.cpp b/Source/WebCore/svg/SVGFEMorphologyElement.cpp
index caf8e7b..1a44e3c 100644
--- a/Source/WebCore/svg/SVGFEMorphologyElement.cpp
+++ b/Source/WebCore/svg/SVGFEMorphologyElement.cpp
@@ -118,6 +118,22 @@ void SVGFEMorphologyElement::synchronizeProperty(const QualifiedName& attrName)
}
}
+AttributeToPropertyTypeMap& SVGFEMorphologyElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEMorphologyElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::operatorAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::radiusAttr, AnimatedNumberOptionalNumber);
+}
+
PassRefPtr<FilterEffect> SVGFEMorphologyElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEMorphologyElement.h b/Source/WebCore/svg/SVGFEMorphologyElement.h
index 77190e6..931288f 100644
--- a/Source/WebCore/svg/SVGFEMorphologyElement.h
+++ b/Source/WebCore/svg/SVGFEMorphologyElement.h
@@ -40,6 +40,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& radiusXIdentifier();
diff --git a/Source/WebCore/svg/SVGFEOffsetElement.cpp b/Source/WebCore/svg/SVGFEOffsetElement.cpp
index 2bd8aee..03b3be3 100644
--- a/Source/WebCore/svg/SVGFEOffsetElement.cpp
+++ b/Source/WebCore/svg/SVGFEOffsetElement.cpp
@@ -87,6 +87,22 @@ void SVGFEOffsetElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeIn1();
}
+AttributeToPropertyTypeMap& SVGFEOffsetElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFEOffsetElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::dxAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::dyAttr, AnimatedNumber);
+}
+
PassRefPtr<FilterEffect> SVGFEOffsetElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFEOffsetElement.h b/Source/WebCore/svg/SVGFEOffsetElement.h
index 2092df2..e5b6fd1 100644
--- a/Source/WebCore/svg/SVGFEOffsetElement.h
+++ b/Source/WebCore/svg/SVGFEOffsetElement.h
@@ -38,6 +38,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp
index 9298b3c..f4f2648 100644
--- a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp
+++ b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp
@@ -89,6 +89,18 @@ void SVGFESpecularLightingElement::parseMappedAttribute(Attribute* attr)
SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
}
+void SVGFESpecularLightingElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+ SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
+
+ if (attrName == SVGNames::inAttr
+ || attrName == SVGNames::surfaceScaleAttr
+ || attrName == SVGNames::specularConstantAttr
+ || attrName == SVGNames::specularExponentAttr
+ || attrName == SVGNames::kernelUnitLengthAttr)
+ invalidate();
+}
+
void SVGFESpecularLightingElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
@@ -117,6 +129,24 @@ void SVGFESpecularLightingElement::synchronizeProperty(const QualifiedName& attr
}
}
+AttributeToPropertyTypeMap& SVGFESpecularLightingElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFESpecularLightingElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::specularConstantAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::specularExponentAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::surfaceScaleAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::kernelUnitLengthAttr, AnimatedNumberOptionalNumber);
+}
+
PassRefPtr<LightSource> SVGFESpecularLightingElement::findLights() const
{
for (Node* node = firstChild(); node; node = node->nextSibling()) {
diff --git a/Source/WebCore/svg/SVGFESpecularLightingElement.h b/Source/WebCore/svg/SVGFESpecularLightingElement.h
index ace3a3e..9914123 100644
--- a/Source/WebCore/svg/SVGFESpecularLightingElement.h
+++ b/Source/WebCore/svg/SVGFESpecularLightingElement.h
@@ -37,7 +37,10 @@ private:
SVGFESpecularLightingElement(const QualifiedName&, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& kernelUnitLengthXIdentifier();
diff --git a/Source/WebCore/svg/SVGFETileElement.cpp b/Source/WebCore/svg/SVGFETileElement.cpp
index 6fc19e6..7ed6ca0 100644
--- a/Source/WebCore/svg/SVGFETileElement.cpp
+++ b/Source/WebCore/svg/SVGFETileElement.cpp
@@ -69,6 +69,20 @@ void SVGFETileElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeIn1();
}
+AttributeToPropertyTypeMap& SVGFETileElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFETileElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::inAttr, AnimatedString);
+}
+
PassRefPtr<FilterEffect> SVGFETileElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
FilterEffect* input1 = filterBuilder->getEffectById(in1());
diff --git a/Source/WebCore/svg/SVGFETileElement.h b/Source/WebCore/svg/SVGFETileElement.h
index f47d355..447827c 100644
--- a/Source/WebCore/svg/SVGFETileElement.h
+++ b/Source/WebCore/svg/SVGFETileElement.h
@@ -37,6 +37,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGFETurbulenceElement.cpp b/Source/WebCore/svg/SVGFETurbulenceElement.cpp
index 0f59bf7..2eaf1fc 100644
--- a/Source/WebCore/svg/SVGFETurbulenceElement.cpp
+++ b/Source/WebCore/svg/SVGFETurbulenceElement.cpp
@@ -128,6 +128,24 @@ void SVGFETurbulenceElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeNumOctaves();
}
+AttributeToPropertyTypeMap& SVGFETurbulenceElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFETurbulenceElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::baseFrequencyAttr, AnimatedNumberOptionalNumber);
+ attributeToPropertyTypeMap.set(SVGNames::numOctavesAttr, AnimatedInteger);
+ attributeToPropertyTypeMap.set(SVGNames::seedAttr, AnimatedNumber);
+ attributeToPropertyTypeMap.set(SVGNames::stitchTilesAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::typeAttr, AnimatedEnumeration);
+}
+
PassRefPtr<FilterEffect> SVGFETurbulenceElement::build(SVGFilterBuilder*, Filter* filter)
{
if (baseFrequencyX() < 0 || baseFrequencyY() < 0)
diff --git a/Source/WebCore/svg/SVGFETurbulenceElement.h b/Source/WebCore/svg/SVGFETurbulenceElement.h
index f9d86cb..5e8a8b6 100644
--- a/Source/WebCore/svg/SVGFETurbulenceElement.h
+++ b/Source/WebCore/svg/SVGFETurbulenceElement.h
@@ -46,6 +46,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*);
static const AtomicString& baseFrequencyXIdentifier();
diff --git a/Source/WebCore/svg/SVGFilterElement.cpp b/Source/WebCore/svg/SVGFilterElement.cpp
index 03ff7fa..539d4df 100644
--- a/Source/WebCore/svg/SVGFilterElement.cpp
+++ b/Source/WebCore/svg/SVGFilterElement.cpp
@@ -196,6 +196,27 @@ void SVGFilterElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGFilterElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFilterElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::filterUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::primitiveUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::filterResAttr, AnimatedNumberOptionalNumber);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedEnumeration);
+}
+
void SVGFilterElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGFilterElement.h b/Source/WebCore/svg/SVGFilterElement.h
index a438625..4851296 100644
--- a/Source/WebCore/svg/SVGFilterElement.h
+++ b/Source/WebCore/svg/SVGFilterElement.h
@@ -53,6 +53,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp
index 00f99c5..d34a130 100644
--- a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp
+++ b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp
@@ -70,6 +70,13 @@ void SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(Attribute* attr)
return SVGStyledElement::parseMappedAttribute(attr);
}
+bool SVGFilterPrimitiveStandardAttributes::setFilterEffectAttribute(FilterEffect*, const QualifiedName&)
+{
+ // When all filters support this method, it will be changed to a pure virtual method.
+ ASSERT_NOT_REACHED();
+ return false;
+}
+
void SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(const QualifiedName& attrName)
{
SVGStyledElement::svgAttributeChanged(attrName);
@@ -145,6 +152,17 @@ void SVGFilterPrimitiveStandardAttributes::setStandardAttributes(bool primitiveB
filterEffect->setEffectBoundaries(effectBBox);
}
+void SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::resultAttr, AnimatedString);
+}
+
RenderObject* SVGFilterPrimitiveStandardAttributes::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGResourceFilterPrimitive(this);
diff --git a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
index 34e19ea..526592a 100644
--- a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
+++ b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
@@ -22,7 +22,8 @@
#define SVGFilterPrimitiveStandardAttributes_h
#if ENABLE(SVG) && ENABLE(FILTERS)
-#include "RenderSVGResource.h"
+#include "RenderSVGResourceFilter.h"
+#include "RenderSVGResourceFilterPrimitive.h"
#include "SVGAnimatedLength.h"
#include "SVGAnimatedString.h"
#include "SVGStyledElement.h"
@@ -41,6 +42,8 @@ public:
void setStandardAttributes(bool, FilterEffect*) const;
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter* filter) = 0;
+ // Returns true, if the new value is different from the old one.
+ virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&);
protected:
SVGFilterPrimitiveStandardAttributes(const QualifiedName&, Document*);
@@ -48,15 +51,21 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
-protected:
inline void invalidate()
{
if (RenderObject* primitiveRenderer = renderer())
RenderSVGResource::markForLayoutAndParentResourceInvalidation(primitiveRenderer);
}
+ inline void primitiveAttributeChanged(const QualifiedName& attribute)
+ {
+ if (RenderObject* primitiveRenderer = renderer())
+ static_cast<RenderSVGResourceFilterPrimitive*>(primitiveRenderer)->primitiveAttributeChanged(attribute);
+ }
+
private:
virtual bool isFilterEffect() const { return true; }
diff --git a/Source/WebCore/svg/SVGFont.cpp b/Source/WebCore/svg/SVGFont.cpp
index e5164c0..a92b9b6 100644
--- a/Source/WebCore/svg/SVGFont.cpp
+++ b/Source/WebCore/svg/SVGFont.cpp
@@ -26,6 +26,7 @@
#include "CSSFontSelector.h"
#include "GraphicsContext.h"
#include "RenderObject.h"
+#include "RenderSVGInlineText.h"
#include "RenderSVGResourceSolidColor.h"
#include "SVGAltGlyphElement.h"
#include "SVGFontData.h"
@@ -243,7 +244,7 @@ struct SVGTextRunWalker {
{
ASSERT(0 <= from && from <= to && to - from <= run.length());
- const String text = Font::normalizeSpaces(String(run.data(from), run.length()));
+ const String text = Font::normalizeSpaces(run.data(from), to - from);
Vector<SVGGlyphIdentifier::ArabicForm> chars(charactersWithArabicForm(text, run.rtl()));
SVGGlyphIdentifier identifier;
@@ -254,8 +255,10 @@ struct SVGTextRunWalker {
bool haveAltGlyph = false;
SVGGlyphIdentifier altGlyphIdentifier;
if (RenderObject* renderObject = run.referencingRenderObject()) {
- if (renderObject->node() && renderObject->node()->hasTagName(SVGNames::altGlyphTag)) {
- SVGGlyphElement* glyphElement = static_cast<SVGAltGlyphElement*>(renderObject->node())->glyphElement();
+ RenderObject* parentRenderer = renderObject->parent();
+ ASSERT(parentRenderer);
+ if (parentRenderer->node() && parentRenderer->node()->hasTagName(SVGNames::altGlyphTag)) {
+ SVGGlyphElement* glyphElement = static_cast<SVGAltGlyphElement*>(parentRenderer->node())->glyphElement();
if (glyphElement) {
haveAltGlyph = true;
altGlyphIdentifier = glyphElement->buildGlyphIdentifier();
@@ -271,7 +274,7 @@ struct SVGTextRunWalker {
// extended to the n-th next character (where n is 'characterLookupRange'), to check for any possible ligature.
characterLookupRange = endOfScanRange - i;
- String lookupString = Font::normalizeSpaces(String(run.data(i), characterLookupRange));
+ String lookupString = Font::normalizeSpaces(run.data(i), characterLookupRange);
Vector<SVGGlyphIdentifier> glyphs;
if (haveAltGlyph)
@@ -407,9 +410,11 @@ static float floatWidthOfSubStringUsingSVGFont(const Font* font, const TextRun&
// TODO: language matching & svg glyphs should be possible for HTML text, too.
if (RenderObject* renderObject = run.referencingRenderObject()) {
- isVerticalText = isVerticalWritingMode(renderObject->style()->svgStyle());
+ RenderObject* parentRenderer = renderObject->parent();
+ ASSERT(parentRenderer);
+ isVerticalText = isVerticalWritingMode(parentRenderer->style()->svgStyle());
- if (SVGElement* element = static_cast<SVGElement*>(renderObject->node()))
+ if (SVGElement* element = static_cast<SVGElement*>(parentRenderer->node()))
language = element->getAttribute(XMLNames::langAttr);
}
@@ -495,10 +500,15 @@ void Font::drawTextUsingSVGFont(GraphicsContext* context, const TextRun& run,
String language;
// TODO: language matching & svg glyphs should be possible for HTML text, too.
- if (run.referencingRenderObject()) {
- isVerticalText = isVerticalWritingMode(run.referencingRenderObject()->style()->svgStyle());
-
- if (SVGElement* element = static_cast<SVGElement*>(run.referencingRenderObject()->node()))
+ RenderObject* referencingRenderObject = run.referencingRenderObject();
+ RenderObject* referencingRenderObjectParent = referencingRenderObject ? referencingRenderObject->parent() : 0;
+ RenderStyle* referencingRenderObjectParentStyle = 0;
+ if (referencingRenderObject) {
+ ASSERT(referencingRenderObjectParent);
+ referencingRenderObjectParentStyle = referencingRenderObjectParent->style();
+
+ isVerticalText = isVerticalWritingMode(referencingRenderObjectParentStyle->svgStyle());
+ if (SVGElement* element = static_cast<SVGElement*>(referencingRenderObjectParent->node()))
language = element->getAttribute(XMLNames::langAttr);
}
@@ -536,9 +546,13 @@ void Font::drawTextUsingSVGFont(GraphicsContext* context, const TextRun& run,
Path glyphPath = identifier.pathData;
glyphPath.transform(glyphPathTransform);
- RenderStyle* style = run.referencingRenderObject() ? run.referencingRenderObject()->style() : 0;
- if (activePaintingResource->applyResource(run.referencingRenderObject(), style, context, resourceMode))
- activePaintingResource->postApplyResource(run.referencingRenderObject(), context, resourceMode, &glyphPath);
+ if (activePaintingResource->applyResource(referencingRenderObjectParent, referencingRenderObjectParentStyle, context, resourceMode)) {
+ if (referencingRenderObject) {
+ RenderSVGInlineText* textRenderer = toRenderSVGInlineText(referencingRenderObject);
+ context->setStrokeThickness(context->strokeThickness() * textRenderer->scalingFactor());
+ }
+ activePaintingResource->postApplyResource(referencingRenderObjectParent, context, resourceMode, &glyphPath);
+ }
context->restore();
}
diff --git a/Source/WebCore/svg/SVGFontElement.cpp b/Source/WebCore/svg/SVGFontElement.cpp
index d70d46a..2d67c51 100644
--- a/Source/WebCore/svg/SVGFontElement.cpp
+++ b/Source/WebCore/svg/SVGFontElement.cpp
@@ -179,6 +179,17 @@ void SVGFontElement::getGlyphIdentifiersForString(const String& string, Vector<S
m_glyphMap.get(string, glyphs);
}
+AttributeToPropertyTypeMap& SVGFontElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGFontElement::fillAttributeToPropertyTypeMap()
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG_FONTS)
diff --git a/Source/WebCore/svg/SVGFontElement.h b/Source/WebCore/svg/SVGFontElement.h
index b2de38c..1559f43 100644
--- a/Source/WebCore/svg/SVGFontElement.h
+++ b/Source/WebCore/svg/SVGFontElement.h
@@ -70,7 +70,9 @@ private:
SVGFontElement(const QualifiedName&, Document*);
virtual void synchronizeProperty(const QualifiedName&);
- virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+ virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
void ensureGlyphCache() const;
diff --git a/Source/WebCore/svg/SVGFontFaceElement.cpp b/Source/WebCore/svg/SVGFontFaceElement.cpp
index ef7f5bd..68be2c6 100644
--- a/Source/WebCore/svg/SVGFontFaceElement.cpp
+++ b/Source/WebCore/svg/SVGFontFaceElement.cpp
@@ -125,7 +125,7 @@ unsigned SVGFontFaceElement::unitsPerEm() const
{
const AtomicString& value = getAttribute(units_per_emAttr);
if (value.isEmpty())
- return defaultUnitsPerEm;
+ return gDefaultUnitsPerEm;
return static_cast<unsigned>(ceilf(value.toFloat()));
}
@@ -261,6 +261,11 @@ String SVGFontFaceElement::fontFamily() const
return m_styleDeclaration->getPropertyValue(CSSPropertyFontFamily);
}
+SVGFontElement* SVGFontFaceElement::associatedFontElement() const
+{
+ return m_fontElement.get();
+}
+
void SVGFontFaceElement::rebuildFontFace()
{
if (!inDocument())
diff --git a/Source/WebCore/svg/SVGFontFaceElement.h b/Source/WebCore/svg/SVGFontFaceElement.h
index 5e974a7..168f21c 100644
--- a/Source/WebCore/svg/SVGFontFaceElement.h
+++ b/Source/WebCore/svg/SVGFontFaceElement.h
@@ -47,7 +47,7 @@ public:
int descent() const;
String fontFamily() const;
- SVGFontElement* associatedFontElement() const { return m_fontElement; }
+ SVGFontElement* associatedFontElement() const;
void rebuildFontFace();
void removeFromMappedElementSheet();
@@ -63,7 +63,7 @@ private:
RefPtr<CSSFontFaceRule> m_fontFaceRule;
RefPtr<CSSMutableStyleDeclaration> m_styleDeclaration;
- SVGFontElement* m_fontElement;
+ RefPtr<SVGFontElement> m_fontElement;
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGForeignObjectElement.cpp b/Source/WebCore/svg/SVGForeignObjectElement.cpp
index 6b5cd41..f2175ac 100644
--- a/Source/WebCore/svg/SVGForeignObjectElement.cpp
+++ b/Source/WebCore/svg/SVGForeignObjectElement.cpp
@@ -137,6 +137,24 @@ void SVGForeignObjectElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGForeignObjectElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGForeignObjectElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
RenderObject* SVGForeignObjectElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGForeignObject(this);
diff --git a/Source/WebCore/svg/SVGForeignObjectElement.h b/Source/WebCore/svg/SVGForeignObjectElement.h
index 687d089..82f21b4 100644
--- a/Source/WebCore/svg/SVGForeignObjectElement.h
+++ b/Source/WebCore/svg/SVGForeignObjectElement.h
@@ -45,6 +45,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool childShouldCreateRenderer(Node*) const;
virtual RenderObject* createRenderer(RenderArena* arena, RenderStyle* style);
diff --git a/Source/WebCore/svg/SVGGlyphElement.cpp b/Source/WebCore/svg/SVGGlyphElement.cpp
index a64d833..9913f5f 100644
--- a/Source/WebCore/svg/SVGGlyphElement.cpp
+++ b/Source/WebCore/svg/SVGGlyphElement.cpp
@@ -132,6 +132,20 @@ static inline float parseSVGGlyphAttribute(const SVGElement* element, const WebC
return value.toFloat();
}
+AttributeToPropertyTypeMap& SVGGlyphElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGGlyphElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::dAttr, AnimatedPath);
+}
+
SVGGlyphIdentifier SVGGlyphElement::buildGenericGlyphIdentifier(const SVGElement* element)
{
SVGGlyphIdentifier identifier;
diff --git a/Source/WebCore/svg/SVGGlyphElement.h b/Source/WebCore/svg/SVGGlyphElement.h
index 4ac5d9b..a79da4b 100644
--- a/Source/WebCore/svg/SVGGlyphElement.h
+++ b/Source/WebCore/svg/SVGGlyphElement.h
@@ -117,6 +117,8 @@ private:
SVGGlyphElement(const QualifiedName&, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void insertedIntoDocument();
virtual void removedFromDocument();
diff --git a/Source/WebCore/svg/SVGGradientElement.cpp b/Source/WebCore/svg/SVGGradientElement.cpp
index f36fea5..67eb8fb 100644
--- a/Source/WebCore/svg/SVGGradientElement.cpp
+++ b/Source/WebCore/svg/SVGGradientElement.cpp
@@ -124,6 +124,16 @@ void SVGGradientElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+void SVGGradientElement::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+
+ attributeToPropertyTypeMap.set(SVGNames::spreadMethodAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::gradientUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::gradientTransformAttr, AnimatedTransformList);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGGradientElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGGradientElement.h b/Source/WebCore/svg/SVGGradientElement.h
index 1fd1f0b..09da5b0 100644
--- a/Source/WebCore/svg/SVGGradientElement.h
+++ b/Source/WebCore/svg/SVGGradientElement.h
@@ -44,6 +44,7 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
private:
virtual bool needsPendingResourceHandling() const { return false; }
diff --git a/Source/WebCore/svg/SVGImageElement.cpp b/Source/WebCore/svg/SVGImageElement.cpp
index 80bf34b..784c1ab 100644
--- a/Source/WebCore/svg/SVGImageElement.cpp
+++ b/Source/WebCore/svg/SVGImageElement.cpp
@@ -164,6 +164,25 @@ void SVGImageElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGImageElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGImageElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
bool SVGImageElement::selfHasRelativeLengths() const
{
return x().isRelative()
diff --git a/Source/WebCore/svg/SVGImageElement.h b/Source/WebCore/svg/SVGImageElement.h
index 06e6490..ec67823 100644
--- a/Source/WebCore/svg/SVGImageElement.h
+++ b/Source/WebCore/svg/SVGImageElement.h
@@ -50,6 +50,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void attach();
virtual void insertedIntoDocument();
diff --git a/Source/WebCore/svg/SVGLength.cpp b/Source/WebCore/svg/SVGLength.cpp
index 6d75f8b..281ee14 100644
--- a/Source/WebCore/svg/SVGLength.cpp
+++ b/Source/WebCore/svg/SVGLength.cpp
@@ -438,7 +438,7 @@ float SVGLength::convertValueFromUserUnitsToEXS(float value, const SVGElement* c
// Use of ceil allows a pixel match to the W3Cs expected output of coords-units-03-b.svg
// if this causes problems in real world cases maybe it would be best to remove this
- float xHeight = ceilf(style->font().xHeight());
+ float xHeight = ceilf(style->fontMetrics().xHeight());
if (!xHeight) {
ec = NOT_SUPPORTED_ERR;
return 0;
@@ -457,7 +457,7 @@ float SVGLength::convertValueFromEXSToUserUnits(float value, const SVGElement* c
RenderStyle* style = context->renderer()->style();
// Use of ceil allows a pixel match to the W3Cs expected output of coords-units-03-b.svg
// if this causes problems in real world cases maybe it would be best to remove this
- return value * ceilf(style->font().xHeight());
+ return value * ceilf(style->fontMetrics().xHeight());
}
SVGLength SVGLength::fromCSSPrimitiveValue(CSSPrimitiveValue* value)
diff --git a/Source/WebCore/svg/SVGLineElement.cpp b/Source/WebCore/svg/SVGLineElement.cpp
index cfe43da..2e435c5 100644
--- a/Source/WebCore/svg/SVGLineElement.cpp
+++ b/Source/WebCore/svg/SVGLineElement.cpp
@@ -138,6 +138,23 @@ void SVGLineElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGLineElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGLineElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::x1Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::y1Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::x2Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::y2Attr, AnimatedLength);
+}
+
void SVGLineElement::toPathData(Path& path) const
{
ASSERT(path.isEmpty());
diff --git a/Source/WebCore/svg/SVGLineElement.h b/Source/WebCore/svg/SVGLineElement.h
index ad60a95..4ba4ec1 100644
--- a/Source/WebCore/svg/SVGLineElement.h
+++ b/Source/WebCore/svg/SVGLineElement.h
@@ -46,6 +46,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void toPathData(Path&) const;
diff --git a/Source/WebCore/svg/SVGLinearGradientElement.cpp b/Source/WebCore/svg/SVGLinearGradientElement.cpp
index 5bece06..c109b4f 100644
--- a/Source/WebCore/svg/SVGLinearGradientElement.cpp
+++ b/Source/WebCore/svg/SVGLinearGradientElement.cpp
@@ -114,6 +114,23 @@ void SVGLinearGradientElement::synchronizeProperty(const QualifiedName& attrName
synchronizeY2();
}
+AttributeToPropertyTypeMap& SVGLinearGradientElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGLinearGradientElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGGradientElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::x1Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::y1Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::x2Attr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::y2Attr, AnimatedLength);
+}
+
RenderObject* SVGLinearGradientElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGResourceLinearGradient(this);
diff --git a/Source/WebCore/svg/SVGLinearGradientElement.h b/Source/WebCore/svg/SVGLinearGradientElement.h
index 198f0ee..1c91556 100644
--- a/Source/WebCore/svg/SVGLinearGradientElement.h
+++ b/Source/WebCore/svg/SVGLinearGradientElement.h
@@ -42,6 +42,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGMPathElement.cpp b/Source/WebCore/svg/SVGMPathElement.cpp
index 0df262e..9cc3c56 100644
--- a/Source/WebCore/svg/SVGMPathElement.cpp
+++ b/Source/WebCore/svg/SVGMPathElement.cpp
@@ -65,6 +65,17 @@ void SVGMPathElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGMPathElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGMPathElement::fillAttributeToPropertyTypeMap()
+{
+ attributeToPropertyTypeMap().set(XLinkNames::hrefAttr, AnimatedString);
+}
+
SVGPathElement* SVGMPathElement::pathElement()
{
Element* target = document()->getElementById(getTarget(href()));
diff --git a/Source/WebCore/svg/SVGMPathElement.h b/Source/WebCore/svg/SVGMPathElement.h
index 2fa7c28..ad59650 100644
--- a/Source/WebCore/svg/SVGMPathElement.h
+++ b/Source/WebCore/svg/SVGMPathElement.h
@@ -43,6 +43,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGMarkerElement.cpp b/Source/WebCore/svg/SVGMarkerElement.cpp
index 3174711..c255a9b 100644
--- a/Source/WebCore/svg/SVGMarkerElement.cpp
+++ b/Source/WebCore/svg/SVGMarkerElement.cpp
@@ -183,6 +183,26 @@ void SVGMarkerElement::synchronizeProperty(const QualifiedName& attrName)
}
}
+AttributeToPropertyTypeMap& SVGMarkerElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGMarkerElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::refXAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::refYAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::markerWidthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::markerHeightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::markerUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::orientAttr, AnimatedAngle);
+ attributeToPropertyTypeMap.set(SVGNames::viewBoxAttr, AnimatedRect);
+}
+
void SVGMarkerElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGMarkerElement.h b/Source/WebCore/svg/SVGMarkerElement.h
index 472baa6..2275480 100644
--- a/Source/WebCore/svg/SVGMarkerElement.h
+++ b/Source/WebCore/svg/SVGMarkerElement.h
@@ -67,6 +67,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGMaskElement.cpp b/Source/WebCore/svg/SVGMaskElement.cpp
index ec23e29..d5df621 100644
--- a/Source/WebCore/svg/SVGMaskElement.cpp
+++ b/Source/WebCore/svg/SVGMaskElement.cpp
@@ -148,6 +148,25 @@ void SVGMaskElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGMaskElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGMaskElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledLocatableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::maskUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::maskContentUnitsAttr, AnimatedEnumeration);
+}
+
void SVGMaskElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGMaskElement.h b/Source/WebCore/svg/SVGMaskElement.h
index 87e91ff..1add472 100644
--- a/Source/WebCore/svg/SVGMaskElement.h
+++ b/Source/WebCore/svg/SVGMaskElement.h
@@ -49,6 +49,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGMissingGlyphElement.cpp b/Source/WebCore/svg/SVGMissingGlyphElement.cpp
index 4c80494..9741231 100644
--- a/Source/WebCore/svg/SVGMissingGlyphElement.cpp
+++ b/Source/WebCore/svg/SVGMissingGlyphElement.cpp
@@ -34,6 +34,17 @@ PassRefPtr<SVGMissingGlyphElement> SVGMissingGlyphElement::create(const Qualifie
return adoptRef(new SVGMissingGlyphElement(tagName, document));
}
+AttributeToPropertyTypeMap& SVGMissingGlyphElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGMissingGlyphElement::fillAttributeToPropertyTypeMap()
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG_FONTS)
diff --git a/Source/WebCore/svg/SVGMissingGlyphElement.h b/Source/WebCore/svg/SVGMissingGlyphElement.h
index a133d6d..528c53c 100644
--- a/Source/WebCore/svg/SVGMissingGlyphElement.h
+++ b/Source/WebCore/svg/SVGMissingGlyphElement.h
@@ -32,6 +32,9 @@ public:
private:
SVGMissingGlyphElement(const QualifiedName&, Document*);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
+
virtual bool rendererIsNeeded(RenderStyle*) { return false; }
};
diff --git a/Source/WebCore/svg/SVGPathBlender.cpp b/Source/WebCore/svg/SVGPathBlender.cpp
index d46e24a..6de783d 100644
--- a/Source/WebCore/svg/SVGPathBlender.cpp
+++ b/Source/WebCore/svg/SVGPathBlender.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2010, 2011. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -34,14 +34,60 @@ SVGPathBlender::SVGPathBlender()
{
}
-float SVGPathBlender::blendAnimatedFloat(float from, float to)
+// Helper functions
+static inline FloatPoint blendFloatPoint(const FloatPoint& a, const FloatPoint& b, float progress)
{
- return (to - from) * m_progress + from;
+ return FloatPoint((b.x() - a.x()) * progress + a.x(), (b.y() - a.y()) * progress + a.y());
}
-FloatPoint SVGPathBlender::blendAnimatedFloatPoint(FloatPoint& from, FloatPoint& to)
+static inline float blendAnimatedFloat(float from, float to, float progress)
{
- return FloatPoint((to.x() - from.x()) * m_progress + from.x(), (to.y() - from.y()) * m_progress + from.y());
+ return (to - from) * progress + from;
+}
+
+float SVGPathBlender::blendAnimatedDimensonalFloat(float from, float to, FloatBlendMode blendMode)
+{
+ if (m_fromMode == m_toMode)
+ return blendAnimatedFloat(from, to, m_progress);
+
+ float fromValue = blendMode == BlendHorizontal ? m_fromCurrentPoint.x() : m_fromCurrentPoint.y();
+ float toValue = blendMode == BlendHorizontal ? m_toCurrentPoint.x() : m_toCurrentPoint.y();
+
+ // Transform toY to the coordinate mode of fromY
+ float animValue = blendAnimatedFloat(from, m_fromMode == AbsoluteCoordinates ? to + toValue : to - toValue, m_progress);
+
+ if (m_isInFirstHalfOfAnimation)
+ return animValue;
+
+ // Transform the animated point to the coordinate mode, needed for the current progress.
+ float currentValue = blendAnimatedFloat(fromValue, toValue, m_progress);
+ return m_toMode == AbsoluteCoordinates ? animValue + currentValue : animValue - currentValue;
+}
+
+FloatPoint SVGPathBlender::blendAnimatedFloatPoint(const FloatPoint& fromPoint, const FloatPoint& toPoint)
+{
+ if (m_fromMode == m_toMode)
+ return blendFloatPoint(fromPoint, toPoint, m_progress);
+
+ // Transform toPoint to the coordinate mode of fromPoint
+ FloatPoint animatedPoint = toPoint;
+ if (m_fromMode == AbsoluteCoordinates)
+ animatedPoint += m_toCurrentPoint;
+ else
+ animatedPoint.move(-m_toCurrentPoint.x(), -m_toCurrentPoint.y());
+
+ animatedPoint = blendFloatPoint(fromPoint, animatedPoint, m_progress);
+
+ if (m_isInFirstHalfOfAnimation)
+ return animatedPoint;
+
+ // Transform the animated point to the coordinate mode, needed for the current progress.
+ FloatPoint currentPoint = blendFloatPoint(m_fromCurrentPoint, m_toCurrentPoint, m_progress);
+ if (m_toMode == AbsoluteCoordinates)
+ return animatedPoint + currentPoint;
+
+ animatedPoint.move(-currentPoint.x(), -currentPoint.y());
+ return animatedPoint;
}
bool SVGPathBlender::blendMoveToSegment()
@@ -52,7 +98,9 @@ bool SVGPathBlender::blendMoveToSegment()
|| !m_toSource->parseMoveToSegment(toTargetPoint))
return false;
- m_consumer->moveTo(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), false, m_mode);
+ m_consumer->moveTo(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), false, m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -64,7 +112,9 @@ bool SVGPathBlender::blendLineToSegment()
|| !m_toSource->parseLineToSegment(toTargetPoint))
return false;
- m_consumer->lineTo(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), m_mode);
+ m_consumer->lineTo(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -76,7 +126,9 @@ bool SVGPathBlender::blendLineToHorizontalSegment()
|| !m_toSource->parseLineToHorizontalSegment(toX))
return false;
- m_consumer->lineToHorizontal(blendAnimatedFloat(fromX, toX), m_mode);
+ m_consumer->lineToHorizontal(blendAnimatedDimensonalFloat(fromX, toX, BlendHorizontal), m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint.setX(m_fromMode == AbsoluteCoordinates ? fromX : m_fromCurrentPoint.x() + fromX);
+ m_toCurrentPoint.setX(m_toMode == AbsoluteCoordinates ? toX : m_toCurrentPoint.x() + toX);
return true;
}
@@ -88,7 +140,9 @@ bool SVGPathBlender::blendLineToVerticalSegment()
|| !m_toSource->parseLineToVerticalSegment(toY))
return false;
- m_consumer->lineToVertical(blendAnimatedFloat(fromY, toY), m_mode);
+ m_consumer->lineToVertical(blendAnimatedDimensonalFloat(fromY, toY, BlendVertical), m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint.setY(m_fromMode == AbsoluteCoordinates ? fromY : m_fromCurrentPoint.y() + fromY);
+ m_toCurrentPoint.setY(m_toMode == AbsoluteCoordinates ? toY : m_toCurrentPoint.y() + toY);
return true;
}
@@ -107,7 +161,9 @@ bool SVGPathBlender::blendCurveToCubicSegment()
m_consumer->curveToCubic(blendAnimatedFloatPoint(fromPoint1, toPoint1),
blendAnimatedFloatPoint(fromPoint2, toPoint2),
blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint),
- m_mode);
+ m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -123,7 +179,9 @@ bool SVGPathBlender::blendCurveToCubicSmoothSegment()
m_consumer->curveToCubicSmooth(blendAnimatedFloatPoint(fromPoint2, toPoint2),
blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint),
- m_mode);
+ m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -139,7 +197,9 @@ bool SVGPathBlender::blendCurveToQuadraticSegment()
m_consumer->curveToQuadratic(blendAnimatedFloatPoint(fromPoint1, toPoint1),
blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint),
- m_mode);
+ m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -151,7 +211,9 @@ bool SVGPathBlender::blendCurveToQuadraticSmoothSegment()
|| !m_toSource->parseCurveToQuadraticSmoothSegment(toTargetPoint))
return false;
- m_consumer->curveToQuadraticSmooth(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), m_mode);
+ m_consumer->curveToQuadraticSmooth(blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint), m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
@@ -173,16 +235,44 @@ bool SVGPathBlender::blendArcToSegment()
|| !m_toSource->parseArcToSegment(toRx, toRy, toAngle, toLargeArc, toSweep, toTargetPoint))
return false;
- m_consumer->arcTo(blendAnimatedFloat(fromRx, toRx),
- blendAnimatedFloat(fromRy, toRy),
- blendAnimatedFloat(fromAngle, toAngle),
- m_progress < 0.5 ? fromLargeArc : toLargeArc,
- m_progress < 0.5 ? fromSweep : toSweep,
+ m_consumer->arcTo(blendAnimatedFloat(fromRx, toRx, m_progress),
+ blendAnimatedFloat(fromRy, toRy, m_progress),
+ blendAnimatedFloat(fromAngle, toAngle, m_progress),
+ m_isInFirstHalfOfAnimation ? fromLargeArc : toLargeArc,
+ m_isInFirstHalfOfAnimation ? fromSweep : toSweep,
blendAnimatedFloatPoint(fromTargetPoint, toTargetPoint),
- m_mode);
+ m_isInFirstHalfOfAnimation ? m_fromMode : m_toMode);
+ m_fromCurrentPoint = m_fromMode == AbsoluteCoordinates ? fromTargetPoint : m_fromCurrentPoint + fromTargetPoint;
+ m_toCurrentPoint = m_toMode == AbsoluteCoordinates ? toTargetPoint : m_toCurrentPoint + toTargetPoint;
return true;
}
+static inline PathCoordinateMode coordinateModeOfCommand(const SVGPathSegType& type)
+{
+ if (type < PathSegMoveToAbs)
+ return AbsoluteCoordinates;
+
+ // Odd number = relative command
+ if (type % 2)
+ return RelativeCoordinates;
+
+ return AbsoluteCoordinates;
+}
+
+static inline bool isSegmentEqual(const SVGPathSegType& fromType, const SVGPathSegType& toType, const PathCoordinateMode& fromMode, const PathCoordinateMode& toMode)
+{
+ if (fromType == toType && (fromType == PathSegUnknown || fromType == PathSegClosePath))
+ return true;
+
+ unsigned short from = fromType;
+ unsigned short to = toType;
+ if (fromMode == toMode)
+ return from == to;
+ if (fromMode == AbsoluteCoordinates)
+ return from == to - 1;
+ return to == from - 1;
+}
+
bool SVGPathBlender::blendAnimatedPath(float progress, SVGPathSource* fromSource, SVGPathSource* toSource, SVGPathConsumer* consumer)
{
ASSERT(fromSource);
@@ -191,6 +281,7 @@ bool SVGPathBlender::blendAnimatedPath(float progress, SVGPathSource* fromSource
m_fromSource = fromSource;
m_toSource = toSource;
m_consumer = consumer;
+ m_isInFirstHalfOfAnimation = progress < 0.5f;
m_progress = progress;
while (true) {
@@ -198,31 +289,29 @@ bool SVGPathBlender::blendAnimatedPath(float progress, SVGPathSource* fromSource
SVGPathSegType toCommand;
if (!m_fromSource->parseSVGSegmentType(fromCommand) || !m_toSource->parseSVGSegmentType(toCommand))
return false;
- if (fromCommand != toCommand)
+
+ m_fromMode = coordinateModeOfCommand(fromCommand);
+ m_toMode = coordinateModeOfCommand(toCommand);
+ if (!isSegmentEqual(fromCommand, toCommand, m_fromMode, m_toMode))
return false;
- m_mode = AbsoluteCoordinates;
switch (fromCommand) {
case PathSegMoveToRel:
- m_mode = RelativeCoordinates;
case PathSegMoveToAbs:
if (!blendMoveToSegment())
return false;
break;
case PathSegLineToRel:
- m_mode = RelativeCoordinates;
case PathSegLineToAbs:
if (!blendLineToSegment())
return false;
break;
case PathSegLineToHorizontalRel:
- m_mode = RelativeCoordinates;
case PathSegLineToHorizontalAbs:
if (!blendLineToHorizontalSegment())
return false;
break;
case PathSegLineToVerticalRel:
- m_mode = RelativeCoordinates;
case PathSegLineToVerticalAbs:
if (!blendLineToVerticalSegment())
return false;
@@ -231,31 +320,26 @@ bool SVGPathBlender::blendAnimatedPath(float progress, SVGPathSource* fromSource
m_consumer->closePath();
break;
case PathSegCurveToCubicRel:
- m_mode = RelativeCoordinates;
case PathSegCurveToCubicAbs:
if (!blendCurveToCubicSegment())
return false;
break;
case PathSegCurveToCubicSmoothRel:
- m_mode = RelativeCoordinates;
case PathSegCurveToCubicSmoothAbs:
if (!blendCurveToCubicSmoothSegment())
return false;
break;
case PathSegCurveToQuadraticRel:
- m_mode = RelativeCoordinates;
case PathSegCurveToQuadraticAbs:
if (!blendCurveToQuadraticSegment())
return false;
break;
case PathSegCurveToQuadraticSmoothRel:
- m_mode = RelativeCoordinates;
case PathSegCurveToQuadraticSmoothAbs:
if (!blendCurveToQuadraticSmoothSegment())
return false;
break;
case PathSegArcRel:
- m_mode = RelativeCoordinates;
case PathSegArcAbs:
if (!blendArcToSegment())
return false;
@@ -281,6 +365,8 @@ void SVGPathBlender::cleanup()
m_toSource = 0;
m_fromSource = 0;
m_consumer = 0;
+ m_fromCurrentPoint = FloatPoint();
+ m_toCurrentPoint = FloatPoint();
}
}
diff --git a/Source/WebCore/svg/SVGPathBlender.h b/Source/WebCore/svg/SVGPathBlender.h
index 8e43b94..2290fbb 100644
--- a/Source/WebCore/svg/SVGPathBlender.h
+++ b/Source/WebCore/svg/SVGPathBlender.h
@@ -26,6 +26,11 @@
namespace WebCore {
+enum FloatBlendMode {
+ BlendHorizontal,
+ BlendVertical
+};
+
class SVGPathBlender {
WTF_MAKE_NONCOPYABLE(SVGPathBlender); WTF_MAKE_FAST_ALLOCATED;
public:
@@ -45,14 +50,20 @@ private:
bool blendCurveToQuadraticSmoothSegment();
bool blendArcToSegment();
- float blendAnimatedFloat(float, float);
- FloatPoint blendAnimatedFloatPoint(FloatPoint&, FloatPoint&);
+ float blendAnimatedDimensonalFloat(float, float, FloatBlendMode);
+ FloatPoint blendAnimatedFloatPoint(const FloatPoint& from, const FloatPoint& to);
SVGPathSource* m_fromSource;
SVGPathSource* m_toSource;
SVGPathConsumer* m_consumer;
- PathCoordinateMode m_mode;
+
+ FloatPoint m_fromCurrentPoint;
+ FloatPoint m_toCurrentPoint;
+
+ PathCoordinateMode m_fromMode;
+ PathCoordinateMode m_toMode;
float m_progress;
+ bool m_isInFirstHalfOfAnimation;
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGPathByteStream.h b/Source/WebCore/svg/SVGPathByteStream.h
index a444ac0..af283f7 100644
--- a/Source/WebCore/svg/SVGPathByteStream.h
+++ b/Source/WebCore/svg/SVGPathByteStream.h
@@ -51,6 +51,11 @@ public:
return adoptPtr(new SVGPathByteStream);
}
+ PassOwnPtr<SVGPathByteStream> copy()
+ {
+ return adoptPtr(new SVGPathByteStream(m_data));
+ }
+
typedef Vector<unsigned char> Data;
typedef Data::const_iterator DataIterator;
@@ -62,6 +67,11 @@ public:
private:
SVGPathByteStream() { }
+ SVGPathByteStream(Data& data)
+ : m_data(data)
+ {
+ }
+
Data m_data;
};
diff --git a/Source/WebCore/svg/SVGPathElement.cpp b/Source/WebCore/svg/SVGPathElement.cpp
index 77b543f..c56873b 100644
--- a/Source/WebCore/svg/SVGPathElement.cpp
+++ b/Source/WebCore/svg/SVGPathElement.cpp
@@ -272,6 +272,21 @@ void SVGPathElement::synchronizeD()
SVGAnimatedPropertySynchronizer<true>::synchronize(this, SVGNames::dAttr, m_pathSegList.value.valueAsString());
}
+AttributeToPropertyTypeMap& SVGPathElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGPathElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::dAttr, AnimatedPath);
+ attributeToPropertyTypeMap.set(SVGNames::pathLengthAttr, AnimatedNumber);
+}
+
SVGPathSegListPropertyTearOff* SVGPathElement::pathSegList()
{
if (!m_animatablePathSegList) {
diff --git a/Source/WebCore/svg/SVGPathElement.h b/Source/WebCore/svg/SVGPathElement.h
index 6ea7d55..7f836c4 100644
--- a/Source/WebCore/svg/SVGPathElement.h
+++ b/Source/WebCore/svg/SVGPathElement.h
@@ -104,6 +104,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
virtual void svgAttributeChanged(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool supportsMarkers() const { return true; }
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGPatternElement.cpp b/Source/WebCore/svg/SVGPatternElement.cpp
index 60dfeaf..97e505e 100644
--- a/Source/WebCore/svg/SVGPatternElement.cpp
+++ b/Source/WebCore/svg/SVGPatternElement.cpp
@@ -194,6 +194,29 @@ void SVGPatternElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGPatternElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGPatternElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::patternUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::patternContentUnitsAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::patternTransformAttr, AnimatedTransformList);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+ attributeToPropertyTypeMap.set(SVGNames::viewBoxAttr, AnimatedRect);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+}
+
void SVGPatternElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
diff --git a/Source/WebCore/svg/SVGPatternElement.h b/Source/WebCore/svg/SVGPatternElement.h
index e581308..e7bfd80 100644
--- a/Source/WebCore/svg/SVGPatternElement.h
+++ b/Source/WebCore/svg/SVGPatternElement.h
@@ -59,6 +59,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGPolyElement.cpp b/Source/WebCore/svg/SVGPolyElement.cpp
index 0fb48d7..8a70347 100644
--- a/Source/WebCore/svg/SVGPolyElement.cpp
+++ b/Source/WebCore/svg/SVGPolyElement.cpp
@@ -112,6 +112,20 @@ void SVGPolyElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGPolyElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGPolyElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::pointsAttr, AnimatedPoints);
+}
+
void SVGPolyElement::synchronizePoints()
{
if (!m_points.shouldSynchronize)
diff --git a/Source/WebCore/svg/SVGPolyElement.h b/Source/WebCore/svg/SVGPolyElement.h
index 3af8a79..7e3248e 100644
--- a/Source/WebCore/svg/SVGPolyElement.h
+++ b/Source/WebCore/svg/SVGPolyElement.h
@@ -50,6 +50,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool supportsMarkers() const { return true; }
diff --git a/Source/WebCore/svg/SVGRadialGradientElement.cpp b/Source/WebCore/svg/SVGRadialGradientElement.cpp
index d525531..4f0f203 100644
--- a/Source/WebCore/svg/SVGRadialGradientElement.cpp
+++ b/Source/WebCore/svg/SVGRadialGradientElement.cpp
@@ -124,6 +124,24 @@ void SVGRadialGradientElement::synchronizeProperty(const QualifiedName& attrName
synchronizeR();
}
+AttributeToPropertyTypeMap& SVGRadialGradientElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGRadialGradientElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGGradientElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::cxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::cyAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::rAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::fxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::fyAttr, AnimatedLength);
+}
+
RenderObject* SVGRadialGradientElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGResourceRadialGradient(this);
diff --git a/Source/WebCore/svg/SVGRadialGradientElement.h b/Source/WebCore/svg/SVGRadialGradientElement.h
index 199eaba..40af133 100644
--- a/Source/WebCore/svg/SVGRadialGradientElement.h
+++ b/Source/WebCore/svg/SVGRadialGradientElement.h
@@ -42,6 +42,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGRectElement.cpp b/Source/WebCore/svg/SVGRectElement.cpp
index d5db5b9..10c5743 100644
--- a/Source/WebCore/svg/SVGRectElement.cpp
+++ b/Source/WebCore/svg/SVGRectElement.cpp
@@ -161,6 +161,25 @@ void SVGRectElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGRectElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGRectElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::rxAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::ryAttr, AnimatedLength);
+}
+
void SVGRectElement::toPathData(Path& path) const
{
ASSERT(path.isEmpty());
diff --git a/Source/WebCore/svg/SVGRectElement.h b/Source/WebCore/svg/SVGRectElement.h
index 0c30378..08ab4bf 100644
--- a/Source/WebCore/svg/SVGRectElement.h
+++ b/Source/WebCore/svg/SVGRectElement.h
@@ -46,6 +46,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void toPathData(Path&) const;
diff --git a/Source/WebCore/svg/SVGSVGElement.cpp b/Source/WebCore/svg/SVGSVGElement.cpp
index 483e45f..e2540e3 100644
--- a/Source/WebCore/svg/SVGSVGElement.cpp
+++ b/Source/WebCore/svg/SVGSVGElement.cpp
@@ -379,6 +379,23 @@ void SVGSVGElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGSVGElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGSVGElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::viewBoxAttr, AnimatedRect);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+}
+
unsigned SVGSVGElement::suspendRedraw(unsigned /* maxWaitMilliseconds */)
{
// FIXME: Implement me (see bug 11275)
diff --git a/Source/WebCore/svg/SVGSVGElement.h b/Source/WebCore/svg/SVGSVGElement.h
index 0995c67..edb56d7 100644
--- a/Source/WebCore/svg/SVGSVGElement.h
+++ b/Source/WebCore/svg/SVGSVGElement.h
@@ -144,6 +144,8 @@ private:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool selfHasRelativeLengths() const;
diff --git a/Source/WebCore/svg/SVGScriptElement.cpp b/Source/WebCore/svg/SVGScriptElement.cpp
index 6452700..babb1e7 100644
--- a/Source/WebCore/svg/SVGScriptElement.cpp
+++ b/Source/WebCore/svg/SVGScriptElement.cpp
@@ -97,6 +97,17 @@ void SVGScriptElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGScriptElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGScriptElement::fillAttributeToPropertyTypeMap()
+{
+ attributeToPropertyTypeMap().set(XLinkNames::hrefAttr, AnimatedString);
+}
+
void SVGScriptElement::insertedIntoDocument()
{
SVGElement::insertedIntoDocument();
diff --git a/Source/WebCore/svg/SVGScriptElement.h b/Source/WebCore/svg/SVGScriptElement.h
index df502e0..dabec79 100644
--- a/Source/WebCore/svg/SVGScriptElement.h
+++ b/Source/WebCore/svg/SVGScriptElement.h
@@ -51,6 +51,8 @@ private:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool isURLAttribute(Attribute*) const;
virtual void finishParsingChildren();
diff --git a/Source/WebCore/svg/SVGStopElement.cpp b/Source/WebCore/svg/SVGStopElement.cpp
index 10bd9ae..c6f5f98 100644
--- a/Source/WebCore/svg/SVGStopElement.cpp
+++ b/Source/WebCore/svg/SVGStopElement.cpp
@@ -77,6 +77,20 @@ void SVGStopElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeOffset();
}
+AttributeToPropertyTypeMap& SVGStopElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGStopElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::offsetAttr, AnimatedLength);
+}
+
RenderObject* SVGStopElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGGradientStop(this);
diff --git a/Source/WebCore/svg/SVGStopElement.h b/Source/WebCore/svg/SVGStopElement.h
index 907afae..8ea1cf5 100644
--- a/Source/WebCore/svg/SVGStopElement.h
+++ b/Source/WebCore/svg/SVGStopElement.h
@@ -39,6 +39,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool isGradientStop() const { return true; }
diff --git a/Source/WebCore/svg/SVGStyledElement.cpp b/Source/WebCore/svg/SVGStyledElement.cpp
index 58248d8..7f3b041 100644
--- a/Source/WebCore/svg/SVGStyledElement.cpp
+++ b/Source/WebCore/svg/SVGStyledElement.cpp
@@ -43,6 +43,7 @@
#include "SVGSVGElement.h"
#include "SVGUseElement.h"
#include <wtf/Assertions.h>
+#include <wtf/HashMap.h>
namespace WebCore {
@@ -200,6 +201,83 @@ int SVGStyledElement::cssPropertyIdForSVGAttributeName(const QualifiedName& attr
return propertyNameToIdMap->get(attrName.localName().impl());
}
+static inline AttributeToPropertyTypeMap& cssPropertyToTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_cssPropertyMap, ());
+
+ if (!s_cssPropertyMap.isEmpty())
+ return s_cssPropertyMap;
+
+ // Fill the map for the first use.
+ s_cssPropertyMap.set(alignment_baselineAttr, AnimatedString);
+ s_cssPropertyMap.set(baseline_shiftAttr, AnimatedString);
+ s_cssPropertyMap.set(clipAttr, AnimatedRect);
+ s_cssPropertyMap.set(clip_pathAttr, AnimatedString);
+ s_cssPropertyMap.set(clip_ruleAttr, AnimatedString);
+ s_cssPropertyMap.set(SVGNames::colorAttr, AnimatedColor);
+ s_cssPropertyMap.set(color_interpolationAttr, AnimatedString);
+ s_cssPropertyMap.set(color_interpolation_filtersAttr, AnimatedString);
+ s_cssPropertyMap.set(color_profileAttr, AnimatedString);
+ s_cssPropertyMap.set(color_renderingAttr, AnimatedString);
+ s_cssPropertyMap.set(cursorAttr, AnimatedString);
+ s_cssPropertyMap.set(displayAttr, AnimatedString);
+ s_cssPropertyMap.set(dominant_baselineAttr, AnimatedString);
+ s_cssPropertyMap.set(fillAttr, AnimatedColor);
+ s_cssPropertyMap.set(fill_opacityAttr, AnimatedNumber);
+ s_cssPropertyMap.set(fill_ruleAttr, AnimatedString);
+ s_cssPropertyMap.set(filterAttr, AnimatedString);
+ s_cssPropertyMap.set(flood_colorAttr, AnimatedColor);
+ s_cssPropertyMap.set(flood_opacityAttr, AnimatedNumber);
+ s_cssPropertyMap.set(font_familyAttr, AnimatedString);
+ s_cssPropertyMap.set(font_sizeAttr, AnimatedLength);
+ s_cssPropertyMap.set(font_stretchAttr, AnimatedString);
+ s_cssPropertyMap.set(font_styleAttr, AnimatedString);
+ s_cssPropertyMap.set(font_variantAttr, AnimatedString);
+ s_cssPropertyMap.set(font_weightAttr, AnimatedString);
+ s_cssPropertyMap.set(image_renderingAttr, AnimatedString);
+ s_cssPropertyMap.set(kerningAttr, AnimatedLength);
+ s_cssPropertyMap.set(letter_spacingAttr, AnimatedLength);
+ s_cssPropertyMap.set(lighting_colorAttr, AnimatedColor);
+ s_cssPropertyMap.set(marker_endAttr, AnimatedString);
+ s_cssPropertyMap.set(marker_midAttr, AnimatedString);
+ s_cssPropertyMap.set(marker_startAttr, AnimatedString);
+ s_cssPropertyMap.set(maskAttr, AnimatedString);
+ s_cssPropertyMap.set(opacityAttr, AnimatedNumber);
+ s_cssPropertyMap.set(overflowAttr, AnimatedString);
+ s_cssPropertyMap.set(pointer_eventsAttr, AnimatedString);
+ s_cssPropertyMap.set(shape_renderingAttr, AnimatedString);
+ s_cssPropertyMap.set(stop_colorAttr, AnimatedColor);
+ s_cssPropertyMap.set(stop_opacityAttr, AnimatedNumber);
+ s_cssPropertyMap.set(strokeAttr, AnimatedColor);
+ s_cssPropertyMap.set(stroke_dasharrayAttr, AnimatedLengthList);
+ s_cssPropertyMap.set(stroke_dashoffsetAttr, AnimatedLength);
+ s_cssPropertyMap.set(stroke_linecapAttr, AnimatedString);
+ s_cssPropertyMap.set(stroke_linejoinAttr, AnimatedString);
+ s_cssPropertyMap.set(stroke_miterlimitAttr, AnimatedNumber);
+ s_cssPropertyMap.set(stroke_opacityAttr, AnimatedNumber);
+ s_cssPropertyMap.set(stroke_widthAttr, AnimatedLength);
+ s_cssPropertyMap.set(text_anchorAttr, AnimatedString);
+ s_cssPropertyMap.set(text_decorationAttr, AnimatedString);
+ s_cssPropertyMap.set(text_renderingAttr, AnimatedString);
+ s_cssPropertyMap.set(vector_effectAttr, AnimatedString);
+ s_cssPropertyMap.set(visibilityAttr, AnimatedString);
+ s_cssPropertyMap.set(word_spacingAttr, AnimatedLength);
+ return s_cssPropertyMap;
+}
+
+AnimatedAttributeType SVGStyledElement::animatedPropertyTypeForCSSProperty(const QualifiedName& attrName)
+{
+ AttributeToPropertyTypeMap& cssPropertyTypeMap = cssPropertyToTypeMap();
+ if (cssPropertyTypeMap.contains(attrName))
+ return cssPropertyTypeMap.get(attrName);
+ return AnimatedUnknown;
+}
+
+void SVGStyledElement::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
+{
+ attributeToPropertyTypeMap.set(HTMLNames::classAttr, AnimatedString);
+}
+
bool SVGStyledElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const
{
if (SVGStyledElement::cssPropertyIdForSVGAttributeName(attrName) > 0) {
diff --git a/Source/WebCore/svg/SVGStyledElement.h b/Source/WebCore/svg/SVGStyledElement.h
index 0714d43..85a2b5a 100644
--- a/Source/WebCore/svg/SVGStyledElement.h
+++ b/Source/WebCore/svg/SVGStyledElement.h
@@ -52,6 +52,8 @@ public:
bool instanceUpdatesBlocked() const;
void setInstanceUpdatesBlocked(bool);
+ AnimatedAttributeType animatedPropertyTypeForCSSProperty(const QualifiedName&);
+
virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const;
virtual CSSStyleDeclaration* style() { return StyledElement::style(); }
@@ -66,6 +68,8 @@ protected:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
+
virtual void attach();
virtual void insertedIntoDocument();
virtual void removedFromDocument();
diff --git a/Source/WebCore/svg/SVGStyledTransformableElement.cpp b/Source/WebCore/svg/SVGStyledTransformableElement.cpp
index 15528e0..ce1c5fd 100644
--- a/Source/WebCore/svg/SVGStyledTransformableElement.cpp
+++ b/Source/WebCore/svg/SVGStyledTransformableElement.cpp
@@ -114,6 +114,13 @@ RenderObject* SVGStyledTransformableElement::createRenderer(RenderArena* arena,
return new (arena) RenderSVGPath(this);
}
+void SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+
+ attributeToPropertyTypeMap.set(SVGNames::transformAttr, AnimatedTransformList);
+}
+
void SVGStyledTransformableElement::toClipPath(Path& path) const
{
toPathData(path);
diff --git a/Source/WebCore/svg/SVGStyledTransformableElement.h b/Source/WebCore/svg/SVGStyledTransformableElement.h
index 1d882e5..cbd70ed 100644
--- a/Source/WebCore/svg/SVGStyledTransformableElement.h
+++ b/Source/WebCore/svg/SVGStyledTransformableElement.h
@@ -59,6 +59,7 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
// Animated property declarations
DECLARE_ANIMATED_TRANSFORM_LIST(Transform, transform)
diff --git a/Source/WebCore/svg/SVGSwitchElement.cpp b/Source/WebCore/svg/SVGSwitchElement.cpp
index c225053..fb89f6f 100644
--- a/Source/WebCore/svg/SVGSwitchElement.cpp
+++ b/Source/WebCore/svg/SVGSwitchElement.cpp
@@ -80,6 +80,17 @@ void SVGSwitchElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGSwitchElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGSwitchElement::fillAttributeToPropertyTypeMap()
+{
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGSwitchElement.h b/Source/WebCore/svg/SVGSwitchElement.h
index 937a1e4..b52a30d 100644
--- a/Source/WebCore/svg/SVGSwitchElement.h
+++ b/Source/WebCore/svg/SVGSwitchElement.h
@@ -46,6 +46,9 @@ private:
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual void synchronizeProperty(const QualifiedName&);
+
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
// Animated property declarations
diff --git a/Source/WebCore/svg/SVGSymbolElement.cpp b/Source/WebCore/svg/SVGSymbolElement.cpp
index ee4278d..31bb9a9 100644
--- a/Source/WebCore/svg/SVGSymbolElement.cpp
+++ b/Source/WebCore/svg/SVGSymbolElement.cpp
@@ -88,6 +88,21 @@ void SVGSymbolElement::synchronizeProperty(const QualifiedName& attrName)
}
}
+AttributeToPropertyTypeMap& SVGSymbolElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGSymbolElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::viewBoxAttr, AnimatedRect);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+}
+
bool SVGSymbolElement::selfHasRelativeLengths() const
{
return hasAttribute(SVGNames::viewBoxAttr);
diff --git a/Source/WebCore/svg/SVGSymbolElement.h b/Source/WebCore/svg/SVGSymbolElement.h
index e049f0d..8f3f251 100644
--- a/Source/WebCore/svg/SVGSymbolElement.h
+++ b/Source/WebCore/svg/SVGSymbolElement.h
@@ -45,6 +45,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool rendererIsNeeded(RenderStyle*) { return false; }
virtual bool selfHasRelativeLengths() const;
diff --git a/Source/WebCore/svg/SVGTRefElement.cpp b/Source/WebCore/svg/SVGTRefElement.cpp
index 14c4700..1161ffe 100644
--- a/Source/WebCore/svg/SVGTRefElement.cpp
+++ b/Source/WebCore/svg/SVGTRefElement.cpp
@@ -84,6 +84,20 @@ void SVGTRefElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGTRefElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGTRefElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
RenderObject* SVGTRefElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGInline(this);
diff --git a/Source/WebCore/svg/SVGTRefElement.h b/Source/WebCore/svg/SVGTRefElement.h
index 8b98383..2e7d005 100644
--- a/Source/WebCore/svg/SVGTRefElement.h
+++ b/Source/WebCore/svg/SVGTRefElement.h
@@ -38,6 +38,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual bool childShouldCreateRenderer(Node*) const;
diff --git a/Source/WebCore/svg/SVGTSpanElement.cpp b/Source/WebCore/svg/SVGTSpanElement.cpp
index 8fe30e2..24c979a 100644
--- a/Source/WebCore/svg/SVGTSpanElement.cpp
+++ b/Source/WebCore/svg/SVGTSpanElement.cpp
@@ -73,6 +73,17 @@ bool SVGTSpanElement::rendererIsNeeded(RenderStyle* style)
return false;
}
+AttributeToPropertyTypeMap& SVGTSpanElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGTSpanElement::fillAttributeToPropertyTypeMap()
+{
+ SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGTSpanElement.h b/Source/WebCore/svg/SVGTSpanElement.h
index 58a7990..ac02b57 100644
--- a/Source/WebCore/svg/SVGTSpanElement.h
+++ b/Source/WebCore/svg/SVGTSpanElement.h
@@ -36,6 +36,9 @@ private:
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual bool childShouldCreateRenderer(Node*) const;
virtual bool rendererIsNeeded(RenderStyle*);
+
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGTextContentElement.cpp b/Source/WebCore/svg/SVGTextContentElement.cpp
index f723ecc..0bb8b3b 100644
--- a/Source/WebCore/svg/SVGTextContentElement.cpp
+++ b/Source/WebCore/svg/SVGTextContentElement.cpp
@@ -221,6 +221,14 @@ void SVGTextContentElement::svgAttributeChanged(const QualifiedName& attrName)
// FIXME: also handle attribute changes for lengthAdjust and textLength
}
+void SVGTextContentElement::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+
+ attributeToPropertyTypeMap.set(SVGNames::textLengthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::lengthAdjustAttr, AnimatedEnumeration);
+}
+
bool SVGTextContentElement::isKnownAttribute(const QualifiedName& attrName)
{
return attrName.matches(SVGNames::lengthAdjustAttr)
@@ -232,7 +240,10 @@ bool SVGTextContentElement::isKnownAttribute(const QualifiedName& attrName)
bool SVGTextContentElement::selfHasRelativeLengths() const
{
- return textLength().isRelative();
+ // Any element of the <text> subtree is advertized as using relative lengths.
+ // On any window size change, we have to relayout the text subtree, as the
+ // effective 'on-screen' font size may change.
+ return true;
}
SVGTextContentElement* SVGTextContentElement::elementFromRenderer(RenderObject* renderer)
diff --git a/Source/WebCore/svg/SVGTextContentElement.h b/Source/WebCore/svg/SVGTextContentElement.h
index 60b023b..7abffd8 100644
--- a/Source/WebCore/svg/SVGTextContentElement.h
+++ b/Source/WebCore/svg/SVGTextContentElement.h
@@ -65,6 +65,7 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
virtual bool selfHasRelativeLengths() const;
diff --git a/Source/WebCore/svg/SVGTextElement.cpp b/Source/WebCore/svg/SVGTextElement.cpp
index b6094c9..3bb9b5e 100644
--- a/Source/WebCore/svg/SVGTextElement.cpp
+++ b/Source/WebCore/svg/SVGTextElement.cpp
@@ -143,6 +143,20 @@ void SVGTextElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeTransform();
}
+AttributeToPropertyTypeMap& SVGTextElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGTextElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::transformAttr, AnimatedTransformList);
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGTextElement.h b/Source/WebCore/svg/SVGTextElement.h
index 8dda8c6..1c57f82 100644
--- a/Source/WebCore/svg/SVGTextElement.h
+++ b/Source/WebCore/svg/SVGTextElement.h
@@ -54,6 +54,8 @@ private:
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
// Animated property declarations
DECLARE_ANIMATED_TRANSFORM_LIST(Transform, transform)
diff --git a/Source/WebCore/svg/SVGTextPathElement.cpp b/Source/WebCore/svg/SVGTextPathElement.cpp
index 9935b43..1bfc12c 100644
--- a/Source/WebCore/svg/SVGTextPathElement.cpp
+++ b/Source/WebCore/svg/SVGTextPathElement.cpp
@@ -110,6 +110,23 @@ void SVGTextPathElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeHref();
}
+AttributeToPropertyTypeMap& SVGTextPathElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGTextPathElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGTextContentElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::startOffsetAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::methodAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(SVGNames::spacingAttr, AnimatedEnumeration);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);
+}
+
RenderObject* SVGTextPathElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderSVGTextPath(this);
diff --git a/Source/WebCore/svg/SVGTextPathElement.h b/Source/WebCore/svg/SVGTextPathElement.h
index 6c372f9..b113718 100644
--- a/Source/WebCore/svg/SVGTextPathElement.h
+++ b/Source/WebCore/svg/SVGTextPathElement.h
@@ -62,6 +62,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual bool childShouldCreateRenderer(Node*) const;
diff --git a/Source/WebCore/svg/SVGTextPositioningElement.cpp b/Source/WebCore/svg/SVGTextPositioningElement.cpp
index 544d192..a96f0cb 100644
--- a/Source/WebCore/svg/SVGTextPositioningElement.cpp
+++ b/Source/WebCore/svg/SVGTextPositioningElement.cpp
@@ -161,31 +161,15 @@ void SVGTextPositioningElement::synchronizeProperty(const QualifiedName& attrNam
synchronizeRotate();
}
-static inline bool listContainsRelativeValue(const SVGLengthList& list)
+void SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap& attributeToPropertyTypeMap)
{
- unsigned size = list.size();
- for (unsigned i = 0; i < size; ++i) {
- const SVGLength& length = list.at(i);
- if (length.isRelative())
- return true;
- }
-
- return false;
-}
+ SVGTextContentElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
-bool SVGTextPositioningElement::selfHasRelativeLengths() const
-{
- if (SVGTextContentElement::selfHasRelativeLengths())
- return true;
- if (listContainsRelativeValue(x()))
- return true;
- if (listContainsRelativeValue(y()))
- return true;
- if (listContainsRelativeValue(dx()))
- return true;
- if (listContainsRelativeValue(dy()))
- return true;
- return false;
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::dxAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::dyAttr, AnimatedNumberList);
+ attributeToPropertyTypeMap.set(SVGNames::rotateAttr, AnimatedNumberList);
}
SVGTextPositioningElement* SVGTextPositioningElement::elementFromRenderer(RenderObject* renderer)
diff --git a/Source/WebCore/svg/SVGTextPositioningElement.h b/Source/WebCore/svg/SVGTextPositioningElement.h
index e4bc4ea..5e6dadc 100644
--- a/Source/WebCore/svg/SVGTextPositioningElement.h
+++ b/Source/WebCore/svg/SVGTextPositioningElement.h
@@ -39,8 +39,7 @@ protected:
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
-
- virtual bool selfHasRelativeLengths() const;
+ void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&);
// Animated property declarations
DECLARE_ANIMATED_LENGTH_LIST(X, x)
diff --git a/Source/WebCore/svg/SVGTitleElement.cpp b/Source/WebCore/svg/SVGTitleElement.cpp
index 5eb2204..6281f10 100644
--- a/Source/WebCore/svg/SVGTitleElement.cpp
+++ b/Source/WebCore/svg/SVGTitleElement.cpp
@@ -56,6 +56,17 @@ void SVGTitleElement::childrenChanged(bool changedByParser, Node* beforeChange,
document()->setTitle(textContent(), this);
}
+AttributeToPropertyTypeMap& SVGTitleElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGTitleElement::fillAttributeToPropertyTypeMap()
+{
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap());
+}
+
}
// vim:ts=4:noet
diff --git a/Source/WebCore/svg/SVGTitleElement.h b/Source/WebCore/svg/SVGTitleElement.h
index 5d0762f..c1cec49 100644
--- a/Source/WebCore/svg/SVGTitleElement.h
+++ b/Source/WebCore/svg/SVGTitleElement.h
@@ -40,6 +40,9 @@ private:
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
virtual bool rendererIsNeeded(RenderStyle*) { return false; }
+
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGUseElement.cpp b/Source/WebCore/svg/SVGUseElement.cpp
index 9f43f82..cc53bda 100644
--- a/Source/WebCore/svg/SVGUseElement.cpp
+++ b/Source/WebCore/svg/SVGUseElement.cpp
@@ -227,6 +227,24 @@ void SVGUseElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGUseElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGUseElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedLength);
+}
+
static void updateContainerSize(SVGUseElement* useElement, SVGElementInstance* targetInstance)
{
// Depth-first used to write the method in early exit style, no particular other reason.
@@ -716,6 +734,8 @@ void SVGUseElement::buildInstanceTree(SVGElement* target, SVGElementInstance* ta
// Enter recursion, appending new instance tree nodes to the "instance" object.
buildInstanceTree(element, instancePtr, foundProblem);
+ if (foundProblem)
+ return;
}
if (!targetHasUseTag || !newTarget)
diff --git a/Source/WebCore/svg/SVGUseElement.h b/Source/WebCore/svg/SVGUseElement.h
index c1095ed..10c9be9 100644
--- a/Source/WebCore/svg/SVGUseElement.h
+++ b/Source/WebCore/svg/SVGUseElement.h
@@ -62,6 +62,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual void recalcStyle(StyleChange = NoChange);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
diff --git a/Source/WebCore/svg/SVGViewElement.cpp b/Source/WebCore/svg/SVGViewElement.cpp
index ee3c8d1..2dcf674 100644
--- a/Source/WebCore/svg/SVGViewElement.cpp
+++ b/Source/WebCore/svg/SVGViewElement.cpp
@@ -80,6 +80,21 @@ void SVGViewElement::synchronizeProperty(const QualifiedName& attrName)
}
}
+AttributeToPropertyTypeMap& SVGViewElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGViewElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::viewBoxAttr, AnimatedRect);
+ attributeToPropertyTypeMap.set(SVGNames::preserveAspectRatioAttr, AnimatedPreserveAspectRatio);
+}
+
}
#endif // ENABLE(SVG)
diff --git a/Source/WebCore/svg/SVGViewElement.h b/Source/WebCore/svg/SVGViewElement.h
index 0e2e4fd..b371774 100644
--- a/Source/WebCore/svg/SVGViewElement.h
+++ b/Source/WebCore/svg/SVGViewElement.h
@@ -47,6 +47,8 @@ private:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
+ virtual void fillAttributeToPropertyTypeMap();
+ virtual AttributeToPropertyTypeMap& attributeToPropertyTypeMap();
virtual bool rendererIsNeeded(RenderStyle*) { return false; }
diff --git a/Source/WebCore/svg/graphics/SVGImage.cpp b/Source/WebCore/svg/graphics/SVGImage.cpp
index fc2fd08..2d400a4 100644
--- a/Source/WebCore/svg/graphics/SVGImage.cpp
+++ b/Source/WebCore/svg/graphics/SVGImage.cpp
@@ -279,10 +279,10 @@ bool SVGImage::dataChanged(bool allDataReceived)
loader->load(fakeRequest, false); // Make sure the DocumentLoader is created
loader->policyChecker()->cancelCheck(); // cancel any policy checks
loader->commitProvisionalLoad();
- loader->writer()->setMIMEType("image/svg+xml");
- loader->writer()->begin(KURL()); // create the empty document
- loader->writer()->addData(data()->data(), data()->size());
- loader->writer()->end();
+ loader->activeDocumentLoader()->writer()->setMIMEType("image/svg+xml");
+ loader->activeDocumentLoader()->writer()->begin(KURL()); // create the empty document
+ loader->activeDocumentLoader()->writer()->addData(data()->data(), data()->size());
+ loader->activeDocumentLoader()->writer()->end();
frame->view()->setTransparent(true); // SVG Images are transparent.
}
diff --git a/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp b/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
index b31b994..e6d0e65 100644
--- a/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
+++ b/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
@@ -68,10 +68,11 @@ FilterEffect* SVGFilterBuilder::getEffectById(const AtomicString& id) const
return m_namedEffects.get(id).get();
}
-void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr<FilterEffect> effectReference)
+void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr<FilterEffect> effectReference, RenderObject* object)
{
// The effect must be a newly created filter effect.
ASSERT(!m_effectReferences.contains(effectReference));
+ ASSERT(object && !m_effectRenderer.contains(object));
m_effectReferences.add(effectReference, FilterEffectSet());
FilterEffect* effect = effectReference.get();
@@ -79,7 +80,8 @@ void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr<FilterEffect> effec
// It is not possible to add the same value to a set twice.
for (unsigned i = 0; i < numberOfInputEffects; ++i)
- getEffectReferences(effect->inputEffect(i)).add(effect);
+ effectReferences(effect->inputEffect(i)).add(effect);
+ m_effectRenderer.add(object, effectReference.get());
}
void SVGFilterBuilder::clearEffects()
@@ -87,9 +89,23 @@ void SVGFilterBuilder::clearEffects()
m_lastEffect = 0;
m_namedEffects.clear();
m_effectReferences.clear();
+ m_effectRenderer.clear();
addBuiltinEffects();
}
+void SVGFilterBuilder::clearResultsRecursive(FilterEffect* effect)
+{
+ if (!effect->hasResult())
+ return;
+
+ effect->clearResult();
+
+ HashSet<FilterEffect*>& effectReferences = this->effectReferences(effect);
+ HashSet<FilterEffect*>::iterator end = effectReferences.end();
+ for (HashSet<FilterEffect*>::iterator it = effectReferences.begin(); it != end; ++it)
+ clearResultsRecursive(*it);
+}
+
} // namespace WebCore
#endif // ENABLE(SVG) && ENABLE(FILTERS)
diff --git a/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h b/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h
index a3c1244..9e7b2fe 100644
--- a/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h
+++ b/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h
@@ -24,6 +24,7 @@
#if ENABLE(SVG) && ENABLE(FILTERS)
#include "FilterEffect.h"
#include "PlatformString.h"
+#include "RenderObject.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
@@ -43,16 +44,20 @@ public:
FilterEffect* getEffectById(const AtomicString& id) const;
FilterEffect* lastEffect() const { return m_lastEffect.get(); }
- void appendEffectToEffectReferences(RefPtr<FilterEffect>);
+ void appendEffectToEffectReferences(RefPtr<FilterEffect>, RenderObject*);
- inline FilterEffectSet& getEffectReferences(FilterEffect* effect)
+ inline FilterEffectSet& effectReferences(FilterEffect* effect)
{
// Only allowed for effects belongs to this builder.
ASSERT(m_effectReferences.contains(effect));
return m_effectReferences.find(effect)->second;
}
+ // Required to change the attributes of a filter during an svgAttributeChanged.
+ inline FilterEffect* effectByRenderer(RenderObject* object) { return m_effectRenderer.get(object); }
+
void clearEffects();
+ void clearResultsRecursive(FilterEffect*);
private:
SVGFilterBuilder(Filter*);
@@ -69,6 +74,7 @@ private:
// The value is a list, which contains those filter effects,
// which depends on the key filter effect.
HashMap<RefPtr<FilterEffect>, FilterEffectSet> m_effectReferences;
+ HashMap<RenderObject*, FilterEffect*> m_effectRenderer;
RefPtr<FilterEffect> m_lastEffect;
};
diff --git a/Source/WebCore/webaudio/AudioBuffer.cpp b/Source/WebCore/webaudio/AudioBuffer.cpp
index f46d153..7075752 100644
--- a/Source/WebCore/webaudio/AudioBuffer.cpp
+++ b/Source/WebCore/webaudio/AudioBuffer.cpp
@@ -28,7 +28,7 @@
#include "config.h"
-#if ENABLE(WEB_AUDIO) & ENABLE(3D_CANVAS)
+#if ENABLE(WEB_AUDIO) & ENABLE(WEBGL)
#include "AudioBuffer.h"
@@ -107,4 +107,4 @@ void AudioBuffer::zero()
} // namespace WebCore
-#endif // ENABLE(WEB_AUDIO) & ENABLE(3D_CANVAS)
+#endif // ENABLE(WEB_AUDIO) & ENABLE(WEBGL)
diff --git a/Source/WebCore/webaudio/AudioBuffer.idl b/Source/WebCore/webaudio/AudioBuffer.idl
index e7353bf..594ee69 100644
--- a/Source/WebCore/webaudio/AudioBuffer.idl
+++ b/Source/WebCore/webaudio/AudioBuffer.idl
@@ -28,7 +28,7 @@
module audio {
interface [
- Conditional=WEB_AUDIO & 3D_CANVAS
+ Conditional=WEB_AUDIO & WEBGL
] AudioBuffer {
readonly attribute long length; // in sample-frames
readonly attribute float duration; // in seconds
diff --git a/Source/WebCore/webaudio/AudioContext.cpp b/Source/WebCore/webaudio/AudioContext.cpp
index a452775..f25b494 100644
--- a/Source/WebCore/webaudio/AudioContext.cpp
+++ b/Source/WebCore/webaudio/AudioContext.cpp
@@ -41,6 +41,7 @@
#include "ConvolverNode.h"
#include "DelayNode.h"
#include "Document.h"
+#include "FFTFrame.h"
#include "HRTFDatabaseLoader.h"
#include "HRTFPanner.h"
#include "HighPass2FilterNode.h"
@@ -79,6 +80,8 @@ AudioContext::AudioContext(Document* document)
// relax the check.
relaxAdoptionRequirement();
+ FFTFrame::initialize();
+
m_destinationNode = AudioDestinationNode::create(this);
m_listener = AudioListener::create();
m_temporaryMonoBus = adoptPtr(new AudioBus(1, AudioNode::ProcessingSizeInFrames));
diff --git a/Source/WebCore/webaudio/AudioContext.idl b/Source/WebCore/webaudio/AudioContext.idl
index 9f0f49c..531774e 100644
--- a/Source/WebCore/webaudio/AudioContext.idl
+++ b/Source/WebCore/webaudio/AudioContext.idl
@@ -41,8 +41,10 @@ module webaudio {
// All panning is relative to this listener.
readonly attribute AudioListener listener;
- AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
- AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono);
+ // AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
+ // AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono);
+ [Custom] AudioBuffer createBuffer()
+ raises(DOMException);
// Source
AudioBufferSourceNode createBufferSource();
diff --git a/Source/WebCore/webaudio/RealtimeAnalyser.cpp b/Source/WebCore/webaudio/RealtimeAnalyser.cpp
index 30a7de1..1a1e920 100644
--- a/Source/WebCore/webaudio/RealtimeAnalyser.cpp
+++ b/Source/WebCore/webaudio/RealtimeAnalyser.cpp
@@ -32,7 +32,7 @@
#include "AudioUtilities.h"
#include "FFTFrame.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "Float32Array.h"
#include "Uint8Array.h"
#endif
@@ -193,7 +193,7 @@ void RealtimeAnalyser::doFFTAnalysis()
}
}
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
void RealtimeAnalyser::getFloatFrequencyData(Float32Array* destinationArray)
{
@@ -294,7 +294,7 @@ void RealtimeAnalyser::getByteTimeDomainData(Uint8Array* destinationArray)
}
}
-#endif // 3D_CANVAS
+#endif // WEBGL
} // namespace WebCore
diff --git a/Source/WebCore/webaudio/RealtimeAnalyser.h b/Source/WebCore/webaudio/RealtimeAnalyser.h
index c6ec2c0..84d2992 100644
--- a/Source/WebCore/webaudio/RealtimeAnalyser.h
+++ b/Source/WebCore/webaudio/RealtimeAnalyser.h
@@ -34,7 +34,7 @@ namespace WebCore {
class AudioBus;
class FFTFrame;
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
class Float32Array;
class Uint8Array;
#endif
@@ -61,7 +61,7 @@ public:
void setSmoothingTimeConstant(float k) { m_smoothingTimeConstant = k; }
float smoothingTimeConstant() const { return static_cast<float>(m_smoothingTimeConstant); }
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
void getFloatFrequencyData(Float32Array*);
void getByteFrequencyData(Uint8Array*);
void getByteTimeDomainData(Uint8Array*);
diff --git a/Source/WebCore/webaudio/RealtimeAnalyserNode.h b/Source/WebCore/webaudio/RealtimeAnalyserNode.h
index 9f62464..07488ee 100644
--- a/Source/WebCore/webaudio/RealtimeAnalyserNode.h
+++ b/Source/WebCore/webaudio/RealtimeAnalyserNode.h
@@ -59,7 +59,7 @@ public:
void setSmoothingTimeConstant(float k) { m_analyser.setSmoothingTimeConstant(k); }
float smoothingTimeConstant() const { return m_analyser.smoothingTimeConstant(); }
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
void getFloatFrequencyData(Float32Array* array) { m_analyser.getFloatFrequencyData(array); }
void getByteFrequencyData(Uint8Array* array) { m_analyser.getByteFrequencyData(array); }
void getByteTimeDomainData(Uint8Array* array) { m_analyser.getByteTimeDomainData(array); }
diff --git a/Source/WebCore/webaudio/RealtimeAnalyserNode.idl b/Source/WebCore/webaudio/RealtimeAnalyserNode.idl
index 5b2b223..fdd8819 100644
--- a/Source/WebCore/webaudio/RealtimeAnalyserNode.idl
+++ b/Source/WebCore/webaudio/RealtimeAnalyserNode.idl
@@ -39,10 +39,10 @@ module audio {
// Copies the current frequency data into the passed array.
// If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped.
- [Conditional=3D_CANVAS] void getFloatFrequencyData(in Float32Array array);
- [Conditional=3D_CANVAS] void getByteFrequencyData(in Uint8Array array);
+ [Conditional=WEBGL] void getFloatFrequencyData(in Float32Array array);
+ [Conditional=WEBGL] void getByteFrequencyData(in Uint8Array array);
// Real-time waveform data
- [Conditional=3D_CANVAS] void getByteTimeDomainData(in Uint8Array array);
+ [Conditional=WEBGL] void getByteTimeDomainData(in Uint8Array array);
};
}
diff --git a/Source/WebCore/websockets/WebSocketHandshake.cpp b/Source/WebCore/websockets/WebSocketHandshake.cpp
index f653415..84779f5 100644
--- a/Source/WebCore/websockets/WebSocketHandshake.cpp
+++ b/Source/WebCore/websockets/WebSocketHandshake.cpp
@@ -35,7 +35,6 @@
#include "WebSocketHandshake.h"
-#include "CharacterNames.h"
#include "Cookie.h"
#include "CookieJar.h"
#include "Document.h"
@@ -45,7 +44,6 @@
#include "ScriptCallStack.h"
#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
-
#include <wtf/MD5.h>
#include <wtf/RandomNumber.h>
#include <wtf/StdLibExtras.h>
@@ -55,6 +53,7 @@
#include <wtf/text/CString.h>
#include <wtf/text/StringBuilder.h>
#include <wtf/text/StringConcatenate.h>
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/wml/WMLInputElement.h b/Source/WebCore/wml/WMLInputElement.h
index df7f497..6c66410 100644
--- a/Source/WebCore/wml/WMLInputElement.h
+++ b/Source/WebCore/wml/WMLInputElement.h
@@ -63,6 +63,7 @@ public:
virtual String value() const;
virtual void setValue(const String&, bool sendChangeEvent = false);
virtual void setValueForUser(const String&);
+ virtual String visibleValue() const { return value(); }
virtual void setValueFromRenderer(const String&);
virtual bool saveFormControlState(String& value) const;
diff --git a/Source/WebCore/wml/WMLTableElement.cpp b/Source/WebCore/wml/WMLTableElement.cpp
index ed3522d..7501e24 100644
--- a/Source/WebCore/wml/WMLTableElement.cpp
+++ b/Source/WebCore/wml/WMLTableElement.cpp
@@ -26,7 +26,6 @@
#include "Attribute.h"
#include "CSSPropertyNames.h"
#include "CSSValueKeywords.h"
-#include "CharacterNames.h"
#include "Document.h"
#include "HTMLNames.h"
#include "NodeList.h"
@@ -34,6 +33,7 @@
#include "Text.h"
#include "WMLErrorHandling.h"
#include "WMLNames.h"
+#include <wtf/unicode/CharacterNames.h>
namespace WebCore {
diff --git a/Source/WebCore/workers/WorkerContext.cpp b/Source/WebCore/workers/WorkerContext.cpp
index 36c4215..acf7f04 100644
--- a/Source/WebCore/workers/WorkerContext.cpp
+++ b/Source/WebCore/workers/WorkerContext.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
- * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -249,7 +249,7 @@ void WorkerContext::importScripts(const Vector<String>& urls, ExceptionCode& ec)
InspectorInstrumentation::scriptImported(scriptExecutionContext(), scriptLoader.identifier(), scriptLoader.script());
ScriptValue exception;
- m_script->evaluate(ScriptSourceCode(scriptLoader.script(), *it), &exception);
+ m_script->evaluate(ScriptSourceCode(scriptLoader.script(), scriptLoader.responseURL()), &exception);
if (!exception.hasNoValue()) {
m_script->setException(exception);
return;
diff --git a/Source/WebCore/workers/WorkerContext.idl b/Source/WebCore/workers/WorkerContext.idl
index ccbd964..179221e 100644
--- a/Source/WebCore/workers/WorkerContext.idl
+++ b/Source/WebCore/workers/WorkerContext.idl
@@ -114,14 +114,14 @@ module threads {
attribute [EnabledAtRuntime=FileSystem] FlagsConstructor Flags;
#endif
- attribute [Conditional=BLOB,EnabledAtRuntime] ArrayBufferConstructor ArrayBuffer; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Int8ArrayConstructor Int8Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Uint8ArrayConstructor Uint8Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Int16ArrayConstructor Int16Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Uint16ArrayConstructor Uint16Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Int32ArrayConstructor Int32Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Uint32ArrayConstructor Uint32Array; // Usable with new operator
- attribute [Conditional=BLOB,EnabledAtRuntime] Float32ArrayConstructor Float32Array; // Usable with new operator
+ attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
+ attribute Int8ArrayConstructor Int8Array; // Usable with new operator
+ attribute Uint8ArrayConstructor Uint8Array; // Usable with new operator
+ attribute Int16ArrayConstructor Int16Array; // Usable with new operator
+ attribute Uint16ArrayConstructor Uint16Array; // Usable with new operator
+ attribute Int32ArrayConstructor Int32Array; // Usable with new operator
+ attribute Uint32ArrayConstructor Uint32Array; // Usable with new operator
+ attribute Float32ArrayConstructor Float32Array; // Usable with new operator
};
}
diff --git a/Source/WebCore/workers/WorkerScriptLoader.cpp b/Source/WebCore/workers/WorkerScriptLoader.cpp
index 1786b89..2224d87 100644
--- a/Source/WebCore/workers/WorkerScriptLoader.cpp
+++ b/Source/WebCore/workers/WorkerScriptLoader.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All Rights Reserved.
- * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -87,6 +87,12 @@ void WorkerScriptLoader::loadAsynchronously(ScriptExecutionContext* scriptExecut
m_threadableLoader = ThreadableLoader::create(scriptExecutionContext, this, *request, options);
}
+const KURL& WorkerScriptLoader::responseURL() const
+{
+ ASSERT(!failed());
+ return m_responseURL;
+}
+
PassOwnPtr<ResourceRequest> WorkerScriptLoader::createResourceRequest()
{
OwnPtr<ResourceRequest> request(new ResourceRequest(m_url));
@@ -101,6 +107,7 @@ void WorkerScriptLoader::didReceiveResponse(const ResourceResponse& response)
m_failed = true;
return;
}
+ m_responseURL = response.url();
m_responseEncoding = response.textEncodingName();
if (m_client)
m_client->didReceiveResponse(response);
diff --git a/Source/WebCore/workers/WorkerScriptLoader.h b/Source/WebCore/workers/WorkerScriptLoader.h
index fc8b0b4..98e21e1 100644
--- a/Source/WebCore/workers/WorkerScriptLoader.h
+++ b/Source/WebCore/workers/WorkerScriptLoader.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All Rights Reserved.
- * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -53,6 +53,7 @@ namespace WebCore {
const String& script() const { return m_script; }
const KURL& url() const { return m_url; }
+ const KURL& responseURL() const;
bool failed() const { return m_failed; }
unsigned long identifier() const { return m_identifier; }
@@ -73,6 +74,7 @@ namespace WebCore {
RefPtr<TextResourceDecoder> m_decoder;
String m_script;
KURL m_url;
+ KURL m_responseURL;
bool m_failed;
unsigned long m_identifier;
ResourceRequestBase::TargetType m_targetType;
diff --git a/Source/WebCore/xml/XMLHttpRequest.cpp b/Source/WebCore/xml/XMLHttpRequest.cpp
index c05ab29..a548ebc 100644
--- a/Source/WebCore/xml/XMLHttpRequest.cpp
+++ b/Source/WebCore/xml/XMLHttpRequest.cpp
@@ -56,6 +56,7 @@
#if USE(JSC)
#include "JSDOMBinding.h"
#include "JSDOMWindow.h"
+#include <runtime/JSLock.h>
#include <runtime/Protect.h>
#endif
@@ -249,6 +250,7 @@ Document* XMLHttpRequest::responseXML(ExceptionCode& ec)
m_responseXML = Document::create(0, m_url);
// FIXME: Set Last-Modified.
m_responseXML->setContent(m_responseBuilder.toStringPreserveCapacity());
+ m_responseXML->setSecurityOrigin(document()->securityOrigin());
if (!m_responseXML->wellFormed())
m_responseXML = 0;
}
@@ -269,7 +271,7 @@ Blob* XMLHttpRequest::responseBlob(ExceptionCode& ec) const
}
#endif
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
ArrayBuffer* XMLHttpRequest::responseArrayBuffer(ExceptionCode& ec)
{
if (m_responseTypeCode != ResponseTypeArrayBuffer) {
@@ -310,7 +312,7 @@ void XMLHttpRequest::setResponseType(const String& responseType, ExceptionCode&
m_responseTypeCode = ResponseTypeBlob;
#endif
} else if (responseType == "arraybuffer") {
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
m_responseTypeCode = ResponseTypeArrayBuffer;
#endif
} else
@@ -584,7 +586,7 @@ void XMLHttpRequest::send(DOMFormData* body, ExceptionCode& ec)
createRequest(ec);
}
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
void XMLHttpRequest::send(ArrayBuffer* body, ExceptionCode& ec)
{
if (!initSend(ec))
@@ -737,7 +739,7 @@ void XMLHttpRequest::clearResponse()
#if ENABLE(XHR_RESPONSE_BLOB)
m_responseBlob = 0;
#endif
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
m_binaryResponseBuilder.clear();
m_responseArrayBuffer.clear();
#endif
@@ -791,8 +793,10 @@ void XMLHttpRequest::dropProtection()
// can't be recouped until the load is done, so only
// report the extra cost at that point.
JSC::JSGlobalData* globalData = scriptExecutionContext()->globalData();
- if (hasCachedDOMObjectWrapper(globalData, this))
+ if (hasCachedDOMObjectWrapper(globalData, this)) {
+ JSC::JSLock lock(JSC::SilenceAssertionsOnly);
globalData->heap.reportExtraMemoryCost(m_responseBuilder.length() * 2);
+ }
#endif
unsetPendingActivity(this);
@@ -1072,7 +1076,7 @@ void XMLHttpRequest::didReceiveData(const char* data, int len)
if (useDecoder)
m_responseBuilder.append(m_decoder->decode(data, len));
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
else if (responseTypeCode() == ResponseTypeArrayBuffer) {
// Buffer binary data.
if (!m_binaryResponseBuilder)
diff --git a/Source/WebCore/xml/XMLHttpRequest.h b/Source/WebCore/xml/XMLHttpRequest.h
index b15d358..384a846 100644
--- a/Source/WebCore/xml/XMLHttpRequest.h
+++ b/Source/WebCore/xml/XMLHttpRequest.h
@@ -95,7 +95,7 @@ public:
void send(const String&, ExceptionCode&);
void send(Blob*, ExceptionCode&);
void send(DOMFormData*, ExceptionCode&);
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
void send(ArrayBuffer*, ExceptionCode&);
#endif
void abort();
@@ -115,7 +115,7 @@ public:
String responseType();
ResponseTypeCode responseTypeCode() const { return m_responseTypeCode; }
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
// response attribute has custom getter.
ArrayBuffer* responseArrayBuffer(ExceptionCode&);
ArrayBuffer* optionalResponseArrayBuffer() const { return m_responseArrayBuffer.get(); }
@@ -206,7 +206,7 @@ private:
mutable bool m_createdDocument;
mutable RefPtr<Document> m_responseXML;
-#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+#if ENABLE(WEBGL) || ENABLE(BLOB)
RefPtr<SharedBuffer> m_binaryResponseBuilder;
mutable RefPtr<ArrayBuffer> m_responseArrayBuffer;
#endif
diff --git a/Source/WebCore/xml/XSLStyleSheet.h b/Source/WebCore/xml/XSLStyleSheet.h
index 4312771..b36ac1d 100644
--- a/Source/WebCore/xml/XSLStyleSheet.h
+++ b/Source/WebCore/xml/XSLStyleSheet.h
@@ -79,7 +79,8 @@ public:
CachedResourceLoader* cachedResourceLoader();
- Document* ownerDocument() { return m_ownerDocument; }
+ Document* ownerDocument();
+ XSLStyleSheet* parentStyleSheet() const { return m_parentStyleSheet; }
void setParentStyleSheet(XSLStyleSheet* parent);
#if USE(QXMLQUERY)
diff --git a/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp b/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
index eb735f4..a519023 100644
--- a/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
+++ b/Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
@@ -56,7 +56,6 @@ namespace WebCore {
XSLStyleSheet::XSLStyleSheet(XSLImportRule* parentRule, const String& originalURL, const KURL& finalURL)
: StyleSheet(parentRule, originalURL, finalURL)
- , m_ownerDocument(0)
, m_embedded(false)
, m_processed(false) // Child sheets get marked as processed when the libxslt engine has finally seen them.
, m_stylesheetDoc(0)
@@ -67,7 +66,6 @@ XSLStyleSheet::XSLStyleSheet(XSLImportRule* parentRule, const String& originalUR
XSLStyleSheet::XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded)
: StyleSheet(parentNode, originalURL, finalURL)
- , m_ownerDocument(parentNode->document())
, m_embedded(embedded)
, m_processed(true) // The root sheet starts off processed.
, m_stylesheetDoc(0)
@@ -129,9 +127,10 @@ void XSLStyleSheet::clearDocuments()
CachedResourceLoader* XSLStyleSheet::cachedResourceLoader()
{
- if (!m_ownerDocument)
+ Document* document = ownerDocument();
+ if (!document)
return 0;
- return m_ownerDocument->cachedResourceLoader();
+ return document->cachedResourceLoader();
}
bool XSLStyleSheet::parseString(const String& string, bool)
@@ -257,8 +256,16 @@ xsltStylesheetPtr XSLStyleSheet::compileStyleSheet()
void XSLStyleSheet::setParentStyleSheet(XSLStyleSheet* parent)
{
m_parentStyleSheet = parent;
- if (parent)
- m_ownerDocument = parent->ownerDocument();
+}
+
+Document* XSLStyleSheet::ownerDocument()
+{
+ for (XSLStyleSheet* styleSheet = this; styleSheet; styleSheet = styleSheet->parentStyleSheet()) {
+ Node* node = styleSheet->ownerNode();
+ if (node)
+ return node->document();
+ }
+ return 0;
}
xmlDocPtr XSLStyleSheet::locateStylesheetSubResource(xmlDocPtr parentDoc, const xmlChar* uri)
diff --git a/Source/WebCore/xml/XSLStyleSheetQt.cpp b/Source/WebCore/xml/XSLStyleSheetQt.cpp
index 855d6ba..6026285 100644
--- a/Source/WebCore/xml/XSLStyleSheetQt.cpp
+++ b/Source/WebCore/xml/XSLStyleSheetQt.cpp
@@ -34,7 +34,6 @@ namespace WebCore {
XSLStyleSheet::XSLStyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL, bool embedded)
: StyleSheet(parentNode, originalURL, finalURL)
- , m_ownerDocument(parentNode->document())
, m_embedded(embedded)
{
}
@@ -62,9 +61,10 @@ void XSLStyleSheet::clearDocuments()
CachedResourceLoader* XSLStyleSheet::cachedResourceLoader()
{
- if (!m_ownerDocument)
+ Document* document = ownerDocument();
+ if (!document)
return 0;
- return m_ownerDocument->cachedResourceLoader();
+ return document->cachedResourceLoader();
}
bool XSLStyleSheet::parseString(const String& string, bool)
@@ -87,6 +87,12 @@ void XSLStyleSheet::loadChildSheet(const String&)
notImplemented();
}
+Document* XSLStyleSheet::ownerDocument()
+{
+ Node* node = ownerNode();
+ return node ? node->document() : 0;
+}
+
void XSLStyleSheet::setParentStyleSheet(XSLStyleSheet*)
{
notImplemented();
diff --git a/Source/WebKit.pri b/Source/WebKit.pri
new file mode 100644
index 0000000..e7a3b20
--- /dev/null
+++ b/Source/WebKit.pri
@@ -0,0 +1,138 @@
+# Include file to make it easy to include WebKit into Qt projects
+
+# Detect that we are building as a standalone package by the presence of
+# either the generated files directory or as part of the Qt package through
+# QTDIR_build
+CONFIG(QTDIR_build): CONFIG += standalone_package
+else:exists($$PWD/WebCore/generated): CONFIG += standalone_package
+
+CONFIG += depend_includepath
+DEPENDPATH += $$OUT_PWD
+
+DEFINES += BUILDING_QT__=1
+building-libs {
+ win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+} else {
+ CONFIG(QTDIR_build) {
+ QT += webkit
+ } else {
+ QMAKE_LIBDIR = $$OUTPUT_DIR/lib $$QMAKE_LIBDIR
+ QTWEBKITLIBNAME = QtWebKit
+ mac:!static:contains(QT_CONFIG, qt_framework):!CONFIG(webkit_no_framework) {
+ LIBS += -framework $$QTWEBKITLIBNAME
+ QMAKE_FRAMEWORKPATH = $$OUTPUT_DIR/lib $$QMAKE_FRAMEWORKPATH
+ } else {
+ build_pass: win32-*|wince* {
+ !CONFIG(release, debug|release): QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}d
+ QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}$${QT_MAJOR_VERSION}
+ win32-g++*: LIBS += -l$$QTWEBKITLIBNAME
+ else: LIBS += $${QTWEBKITLIBNAME}.lib
+ } else {
+ LIBS += -lQtWebKit
+ symbian {
+ TARGET.EPOCSTACKSIZE = 0x14000 // 80 kB
+ # For EXEs only: set heap to usable value
+ TARGET.EPOCHEAPSIZE =
+ heapSizeRule = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "EPOCHEAPSIZE 0x40000 0x2000000 // Min 256kB, Max 32MB" \
+ "$${LITERAL_HASH}else" \
+ "EPOCHEAPSIZE 0x40000 0x10000000 // Min 256kB, Max 256MB" \
+ "$${LITERAL_HASH}endif"
+ MMP_RULES += heapSizeRule
+ }
+ }
+ }
+ }
+ DEPENDPATH += $$PWD/WebKit/qt/Api
+}
+
+CONFIG(release, debug|release) {
+ DEFINES += NDEBUG
+}
+
+INCLUDEPATH += $$OUTPUT_DIR/include/QtWebKit
+INCLUDEPATH += $$QT.script.includes
+
+CONFIG -= warn_on
+*-g++*:QMAKE_CXXFLAGS += -Wall -Wextra -Wreturn-type -fno-strict-aliasing -Wcast-align -Wchar-subscripts -Wformat-security -Wreturn-type -Wno-unused-parameter -Wno-sign-compare -Wno-switch -Wno-switch-enum -Wundef -Wmissing-noreturn -Winit-self
+
+# Treat warnings as errors on x86/Linux/GCC
+linux-g++* {
+ isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386): QMAKE_CXXFLAGS += -Werror
+}
+
+symbian|*-armcc {
+ # Enable GNU compiler extensions to the ARM compiler for all Qt ports using RVCT
+ RVCT_COMMON_CFLAGS = --gnu --diag_suppress 68,111,177,368,830,1293
+ RVCT_COMMON_CXXFLAGS = $$RVCT_COMMON_CFLAGS --no_parse_templates
+ # Make debug symbols leaner in RVCT4.x. Ignored by compiler for release builds
+ QMAKE_CXXFLAGS.ARMCC_4_0 += --remove_unneeded_entities
+}
+
+*-armcc {
+ QMAKE_CFLAGS += $$RVCT_COMMON_CFLAGS
+ QMAKE_CXXFLAGS += $$RVCT_COMMON_CXXFLAGS
+}
+
+symbian {
+ QMAKE_CXXFLAGS.ARMCC += $$RVCT_COMMON_CXXFLAGS
+}
+
+valgrind {
+ contains(JAVASCRIPTCORE_JIT,yes): error("'JAVASCRIPTCORE_JIT=yes' not supported with valgrind")
+ QMAKE_CXXFLAGS += -g
+ QMAKE_LFLAGS += -g
+ DEFINES += USE_SYSTEM_MALLOC=1
+ DEFINES += ENABLE_JIT=0
+ JAVASCRIPTCORE_JIT = no
+}
+
+##### Defaults for some mobile platforms
+symbian|maemo5|maemo6 {
+ CONFIG += disable_uitools
+ CONFIG += enable_fast_mobile_scrolling
+ CONFIG += use_qt_mobile_theme
+ maemo6: CONFIG += include_webinspector
+} else {
+ CONFIG += include_webinspector
+}
+
+####
+
+disable_uitools: DEFINES *= QT_NO_UITOOLS
+
+# Disable a few warnings on Windows. The warnings are also
+# disabled in WebKitLibraries/win/tools/vsprops/common.vsprops
+win32-msvc*|wince*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996
+
+CONFIG(qt_minimal) {
+ DEFINES *= QT_NO_ANIMATION
+ DEFINES *= QT_NO_BEARERMANAGEMENT
+ DEFINES *= QT_NO_CLIPBOARD
+ DEFINES *= QT_NO_COMBOBOX
+ DEFINES *= QT_NO_CONCURRENT
+ DEFINES *= QT_NO_CRASHHANDLER
+ DEFINES *= QT_NO_CURSOR
+ DEFINES *= QT_NO_DESKTOPSERVICES
+ DEFINES *= QT_NO_FILEDIALOG
+ DEFINES *= QT_NO_GRAPHICSEFFECT
+ DEFINES *= QT_NO_IM
+ DEFINES *= QT_NO_INPUTDIALOG
+ DEFINES *= QT_NO_LINEEDIT
+ DEFINES *= QT_NO_MESSAGEBOX
+ DEFINES *= QT_NO_OPENSSL
+ DEFINES *= QT_NO_PRINTER
+ DEFINES *= QT_NO_QUUID_STRING
+ DEFINES *= QT_NO_SHORTCUT
+ DEFINES *= QT_NO_STYLE_STYLESHEET
+ DEFINES *= QT_NO_SYSTEMTRAYICON
+ DEFINES *= QT_NO_TEMPORARYFILE
+ DEFINES *= QT_NO_TOOLTIP
+ DEFINES *= QT_NO_UITOOLS
+ DEFINES *= QT_NO_UNDOCOMMAND
+ DEFINES *= QT_NO_UNDOSTACK
+ DEFINES *= QT_NO_XRENDER
+}
+
+contains(DEFINES, QT_NO_UITOOLS): CONFIG -= uitools
diff --git a/Source/WebKit.pro b/Source/WebKit.pro
new file mode 100644
index 0000000..a6be4b6
--- /dev/null
+++ b/Source/WebKit.pro
@@ -0,0 +1,36 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+include(WebKit.pri)
+
+!v8 {
+ exists($$PWD/JavaScriptCore/JavaScriptCore.pro): SUBDIRS += JavaScriptCore/JavaScriptCore.pro
+ exists($$PWD/JavaScriptCore/jsc.pro): SUBDIRS += JavaScriptCore/jsc.pro
+}
+
+webkit2:exists($$PWD/WebKit2/WebKit2.pro): SUBDIRS += WebKit2/WebKit2.pro
+
+SUBDIRS += WebCore
+
+webkit2:exists($$PWD/WebKit2/WebProcess.pro): SUBDIRS += WebKit2/WebProcess.pro
+
+contains(QT_CONFIG, declarative) {
+ exists($$PWD/WebKit/qt/declarative): SUBDIRS += WebKit/qt/declarative
+}
+
+exists($$PWD/WebKit/qt/tests): SUBDIRS += WebKit/qt/tests
+
+build-qtscript {
+ SUBDIRS += \
+ JavaScriptCore/qt/api/QtScript.pro \
+ JavaScriptCore/qt/tests \
+ JavaScriptCore/qt/benchmarks
+}
+
+symbian {
+ # Forward the install target to WebCore. A workaround since INSTALLS is not implemented for symbian
+ install.commands = $(MAKE) -C WebCore install
+ QMAKE_EXTRA_TARGETS += install
+}
+
+include(WebKit/qt/docs/docs.pri)
diff --git a/Source/WebKit/CMakeLists.txt b/Source/WebKit/CMakeLists.txt
index 5de532d..db0650a 100644
--- a/Source/WebKit/CMakeLists.txt
+++ b/Source/WebKit/CMakeLists.txt
@@ -57,7 +57,6 @@ IF (WTF_USE_CURL)
ENDIF ()
SET(WebKit_LIBRARIES
- ${JavaScriptCore_LIBRARY_NAME}
${WebCore_LIBRARY_NAME}
)
@@ -67,6 +66,7 @@ INCLUDE_IF_EXISTS(${WEBKIT_DIR}/${WEBKIT_PORT_DIR}/CMakeLists${PORT}.txt)
ADD_DEFINITIONS(-DBUILDING_WebKit)
INCLUDE_DIRECTORIES(${WebKit_INCLUDE_DIRECTORIES})
ADD_LIBRARY(${WebKit_LIBRARY_NAME} ${WebKit_LIBRARY_TYPE} ${WebKit_SOURCES})
+ADD_DEPENDENCIES(${WebKit_LIBRARY_NAME} ${WebCore_LIBRARY_NAME})
TARGET_LINK_LIBRARIES(${WebKit_LIBRARY_NAME} ${WebKit_LIBRARIES})
IF (WebKit_LINK_FLAGS)
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index ef70b92..3149b8b 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,29 @@
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Add dependencies for Visual Studio projects
+ https://bugs.webkit.org/show_bug.cgi?id=53773
+
+ Add a WebCore dependecy to WebKit, so CMake can
+ generate the correct build order for the solution.
+
+ Remove JavaScriptCore dependecy, since WebCore already depends on it.
+
+ * CMakeLists.txt:
+
+2011-01-23 Mark Rowe <mrowe@apple.com>
+
+ Follow-up to r76477.
+
+ Fix the scripts that detect problematic code such as static initializers
+ and destructors, weak vtables, inappropriate files in the framework wrappers,
+ and public headers including private headers. These had all been broken
+ since the projects were moved in to the Source directory as the paths to the
+ scripts were not updated at that time.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
2011-01-20 Zoltan Horvath <zoltan@webkit.org>
Reviewed by Csaba Osztrogonác.
diff --git a/Source/WebKit/WebKit.xcodeproj/project.pbxproj b/Source/WebKit/WebKit.xcodeproj/project.pbxproj
index d47bce4..649bf16 100644
--- a/Source/WebKit/WebKit.xcodeproj/project.pbxproj
+++ b/Source/WebKit/WebKit.xcodeproj/project.pbxproj
@@ -1748,7 +1748,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
5D2F7DB70C687A5A00B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
@@ -1778,7 +1778,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-webkit-framework-include-consistency ]; then\n ../Tools/Scripts/check-for-webkit-framework-include-consistency || exit $?\nfi\n";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-webkit-framework-include-consistency ]; then\n ../../Tools/Scripts/check-for-webkit-framework-include-consistency || exit $?\nfi\n";
};
5DE6D18C0FCF231B002DE28C /* Symlink WebKitPluginHost in to place */ = {
isa = PBXShellScriptBuildPhase;
@@ -1808,7 +1808,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-exit-time-destructors ]; then\n ../../Tools/Scripts/check-for-exit-time-destructors || exit $?\nfi";
};
939811300824BF01008DF038 /* Make Frameworks Symbolic Link */ = {
isa = PBXShellScriptBuildPhase;
@@ -1839,7 +1839,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../Tools/Scripts/check-for-global-initializers ]; then\n ../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../../Tools/Scripts/check-for-global-initializers ]; then\n ../../Tools/Scripts/check-for-global-initializers || exit $?\nfi";
};
/* End PBXShellScriptBuildPhase section */
diff --git a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
index c3732e7..60f6263 100644
--- a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
+++ b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
@@ -538,6 +538,11 @@ bool ChromeClientAndroid::selectItemWritingDirectionIsNatural()
return false;
}
+bool ChromeClientAndroid::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> ChromeClientAndroid::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuAndroid(static_cast<ListPopupMenuClient*>(client)));
diff --git a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
index 81b3d49..6d8f6f3 100644
--- a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
+++ b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
@@ -160,8 +160,6 @@ namespace android {
// will be called frequently, so handling should be very fast.
virtual void formStateDidChange(const Node*);
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
// Android-specific
void setWebFrame(android::WebFrame* webframe);
android::WebFrame* webFrame() { return m_webFrame; }
@@ -176,6 +174,7 @@ namespace android {
#endif
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
diff --git a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
index 946a4a7..86588ee 100644
--- a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
+++ b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp
@@ -249,7 +249,7 @@ void FrameLoaderClientAndroid::dispatchDidReceiveIcon() {
ASSERT(m_frame);
if (m_frame->tree() && m_frame->tree()->parent())
return;
- WTF::String url(m_frame->loader()->url().string());
+ WTF::String url(m_frame->document()->url().string());
// Try to obtain the icon image.
WebCore::Image* icon = WebCore::iconDatabase()->iconForPageURL(
url, WebCore::IntSize(16, 16));
@@ -706,7 +706,7 @@ void FrameLoaderClientAndroid::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClientAndroid::didRunInsecureContent(SecurityOrigin*)
+void FrameLoaderClientAndroid::didRunInsecureContent(SecurityOrigin*, const KURL&)
{
notImplemented();
}
@@ -761,7 +761,7 @@ bool FrameLoaderClientAndroid::shouldFallBack(const ResourceError&) {
bool FrameLoaderClientAndroid::canHandleRequest(const ResourceRequest& request) const {
ASSERT(m_frame);
// Don't allow hijacking of intrapage navigation
- if (WebCore::equalIgnoringFragmentIdentifier(request.url(), m_frame->loader()->url()))
+ if (WebCore::equalIgnoringFragmentIdentifier(request.url(), m_frame->document()->url()))
return true;
// Don't allow hijacking of iframe urls that are http or https
@@ -1334,7 +1334,7 @@ void FrameLoaderClientAndroid::didAddIconForPageUrl(const String& pageUrl) {
// to be read from disk.
registerForIconNotification(false);
KURL u(ParsedURLString, pageUrl);
- if (equalIgnoringFragmentIdentifier(u, m_frame->loader()->url())) {
+ if (equalIgnoringFragmentIdentifier(u, m_frame->document()->url())) {
dispatchDidReceiveIcon();
}
}
diff --git a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
index 25561a8..046fc73 100644
--- a/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
+++ b/Source/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h
@@ -135,7 +135,7 @@ namespace android {
virtual bool shouldGoToHistoryItem(HistoryItem*) const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(SecurityOrigin*);
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&);
virtual void dispatchDidAddBackForwardItem(HistoryItem*) const;
virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const;
diff --git a/Source/WebKit/android/jni/MIMETypeRegistry.cpp b/Source/WebKit/android/jni/MIMETypeRegistry.cpp
index 40f8cef..cbfef6c 100644
--- a/Source/WebKit/android/jni/MIMETypeRegistry.cpp
+++ b/Source/WebKit/android/jni/MIMETypeRegistry.cpp
@@ -41,6 +41,7 @@ namespace WebCore {
String MIMETypeRegistry::getMIMETypeForExtension(const String& ext)
{
+ ASSERT(isMainThread());
JNIEnv* env = JSC::Bindings::getJNIEnv();
jclass mimeClass = env->FindClass("android/webkit/MimeTypeMap");
LOG_ASSERT(mimeClass, "Could not find class MimeTypeMap");
diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
index 21ac8ef..5caf633 100644
--- a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -78,6 +78,7 @@
#include "SubstituteData.h"
#include "UrlInterceptResponse.h"
#include "UserGestureIndicator.h"
+#include "WebArchiveAndroid.h"
#include "WebCache.h"
#include "WebCoreJni.h"
#include "WebCoreResourceLoader.h"
@@ -119,10 +120,6 @@
#include "TimeCounter.h"
#endif
-#if ENABLE(ARCHIVE)
-#include "WebArchiveAndroid.h"
-#endif
-
#if ENABLE(WEB_AUTOFILL)
#include "autofill/WebAutoFill.h"
#endif
@@ -1422,7 +1419,7 @@ static void StopLoading(JNIEnv *env, jobject obj)
pFrame->loader()->stopForUserCancel();
}
-#if ENABLE(ARCHIVE)
+#if ENABLE(WEB_ARCHIVE)
static String saveArchiveAutoname(String basename, String name, String extension) {
if (name.isNull() || name.isEmpty()) {
name = String("index");
@@ -1458,11 +1455,11 @@ static String saveArchiveAutoname(String basename, String name, String extension
return String();
}
-#endif
+#endif // ENABLE(WEB_ARCHIVE)
static jstring SaveWebArchive(JNIEnv *env, jobject obj, jstring basename, jboolean autoname)
{
-#if ENABLE(ARCHIVE)
+#if ENABLE(WEB_ARCHIVE)
WebCore::Frame* pFrame = GET_NATIVE_FRAME(env, obj);
LOG_ASSERT(pFrame, "nativeSaveWebArchive must take a valid frame pointer!");
String mimeType = pFrame->loader()->documentLoader()->mainResource()->mimeType();
@@ -1504,7 +1501,7 @@ static jstring SaveWebArchive(JNIEnv *env, jobject obj, jstring basename, jboole
if (result)
return wtfStringToJstring(env, filename);
-#endif
+#endif // ENABLE(WEB_ARCHIVE)
return NULL;
}
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index d7f60d3..f4ef9a5 100644
--- a/Source/WebKit/android/jni/WebViewCore.cpp
+++ b/Source/WebKit/android/jni/WebViewCore.cpp
@@ -974,7 +974,7 @@ void WebViewCore::viewInvalidate(const WebCore::IntRect& rect)
JNIEnv* env = JSC::Bindings::getJNIEnv();
env->CallVoidMethod(m_javaGlue->object(env).get(),
m_javaGlue->m_sendViewInvalidate,
- rect.x(), rect.y(), rect.right(), rect.bottom());
+ rect.x(), rect.y(), rect.maxX(), rect.maxY());
checkException(env);
}
@@ -1035,13 +1035,12 @@ void WebViewCore::didFirstLayout()
DEBUG_NAV_UI_LOGD("%s", __FUNCTION__);
LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!");
- WebCore::FrameLoader* loader = m_mainFrame->loader();
- const WebCore::KURL& url = loader->url();
+ const WebCore::KURL& url = m_mainFrame->document()->url();
if (url.isEmpty())
return;
LOGV("::WebCore:: didFirstLayout %s", url.string().ascii().data());
- WebCore::FrameLoadType loadType = loader->loadType();
+ WebCore::FrameLoadType loadType = m_mainFrame->loader()->loadType();
JNIEnv* env = JSC::Bindings::getJNIEnv();
env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_didFirstLayout,
@@ -1767,32 +1766,32 @@ Vector<IntRect> WebViewCore::getTouchHighlightRects(int x, int y, int slop)
inside = true;
continue;
}
- if (x >= rects[i].x() && x < rects[i].right()) {
+ if (x >= rects[i].x() && x < rects[i].maxX()) {
if (y < rects[i].y()) {
if (rects[i].y() - y < distance) {
newx = x;
newy = rects[i].y();
distance = rects[i].y() - y;
}
- } else if (y >= rects[i].bottom()) {
- if (y - rects[i].bottom() + 1 < distance) {
+ } else if (y >= rects[i].maxY()) {
+ if (y - rects[i].maxY() + 1 < distance) {
newx = x;
- newy = rects[i].bottom() - 1;
- distance = y - rects[i].bottom() + 1;
+ newy = rects[i].maxY() - 1;
+ distance = y - rects[i].maxY() + 1;
}
}
- } else if (y >= rects[i].y() && y < rects[i].bottom()) {
+ } else if (y >= rects[i].y() && y < rects[i].maxY()) {
if (x < rects[i].x()) {
if (rects[i].x() - x < distance) {
newx = rects[i].x();
newy = y;
distance = rects[i].x() - x;
}
- } else if (x >= rects[i].right()) {
- if (x - rects[i].right() + 1 < distance) {
- newx = rects[i].right() - 1;
+ } else if (x >= rects[i].maxX()) {
+ if (x - rects[i].maxX() + 1 < distance) {
+ newx = rects[i].maxX() - 1;
newy = y;
- distance = x - rects[i].right() + 1;
+ distance = x - rects[i].maxX() + 1;
}
}
}
@@ -4387,7 +4386,7 @@ static jobject GetTouchHighlightRects(JNIEnv* env, jobject obj, jint x, jint y,
for (size_t i = 0; i < rects.size(); i++) {
jobject rect = env->NewObject(rectClass, rectinit, rects[i].x(),
- rects[i].y(), rects[i].right(), rects[i].bottom());
+ rects[i].y(), rects[i].maxX(), rects[i].maxY());
if (rect) {
env->CallBooleanMethod(array, add, rect);
env->DeleteLocalRef(rect);
diff --git a/Source/WebKit/android/nav/CacheBuilder.cpp b/Source/WebKit/android/nav/CacheBuilder.cpp
index e7691d7..019ac49 100644
--- a/Source/WebKit/android/nav/CacheBuilder.cpp
+++ b/Source/WebKit/android/nav/CacheBuilder.cpp
@@ -2560,7 +2560,7 @@ IntRect CacheBuilder::getAreaRect(const HTMLAreaElement* area)
if (n == area) {
if (area->isDefault())
return image->absoluteBoundingBoxRect();
- return area->getRect(image);
+ return area->computeRect(image);
}
}
}
@@ -2998,7 +2998,7 @@ bool CacheBuilder::AddPartRect(IntRect& bounds, int x, int y,
if (bounds.isEmpty())
return true;
bounds.move(x, y);
- if (bounds.right() <= 0 || bounds.bottom() <= 0)
+ if (bounds.maxX() <= 0 || bounds.maxY() <= 0)
return true;
IntRect* work = result->begin() - 1;
IntRect* end = result->end();
@@ -3090,14 +3090,11 @@ bool CacheBuilder::ConstructPartRects(Node* node, const IntRect& bounds,
if (hasClip == false) {
if (nodeIsAnchor && test->hasTagName(HTMLNames::divTag)) {
IntRect bounds = renderer->absoluteBoundingBoxRect(); // x, y fixup done by AddPartRect
- int left = bounds.x() + ((RenderBox*)renderer)->paddingLeft()
- + ((RenderBox*)renderer)->borderLeft();
- int top = bounds.y() + ((RenderBox*)renderer)->paddingTop()
- + ((RenderBox*)renderer)->borderTop();
- int right = bounds.right() - ((RenderBox*)renderer)->paddingRight()
- - ((RenderBox*)renderer)->borderRight();
- int bottom = bounds.bottom() - ((RenderBox*)renderer)->paddingBottom()
- - ((RenderBox*)renderer)->borderBottom();
+ RenderBox* renderBox = static_cast<RenderBox*>(renderer);
+ int left = bounds.x() + renderBox->paddingLeft() + renderBox->borderLeft();
+ int top = bounds.y() + renderBox->paddingTop() + renderBox->borderTop();
+ int right = bounds.maxX() - renderBox->paddingRight() - renderBox->borderRight();
+ int bottom = bounds.maxY() - renderBox->paddingBottom() - renderBox->borderBottom();
if (left >= right || top >= bottom)
continue;
bounds = IntRect(left, top, right - left, bottom - top);
diff --git a/Source/WebKit/android/nav/CachedFrame.cpp b/Source/WebKit/android/nav/CachedFrame.cpp
index b26e24b..4d245d2 100644
--- a/Source/WebKit/android/nav/CachedFrame.cpp
+++ b/Source/WebKit/android/nav/CachedFrame.cpp
@@ -70,7 +70,7 @@ bool CachedFrame::CheckBetween(Direction direction, const WebCore::IntRect& best
{
int left, top, width, height;
if (direction & UP_DOWN) {
- top = direction == UP ? bestRect.bottom() : prior.bottom();
+ top = direction == UP ? bestRect.maxY() : prior.maxY();
int bottom = direction == UP ? prior.y() : bestRect.y();
height = bottom - top;
if (height < 0)
@@ -79,13 +79,13 @@ bool CachedFrame::CheckBetween(Direction direction, const WebCore::IntRect& best
int testLeft = bestRect.x();
if (left > testLeft)
left = testLeft;
- int right = prior.right();
- int testRight = bestRect.right();
+ int right = prior.maxX();
+ int testRight = bestRect.maxX();
if (right < testRight)
right = testRight;
width = right - left;
} else {
- left = direction == LEFT ? bestRect.right() : prior.right();
+ left = direction == LEFT ? bestRect.maxX() : prior.maxX();
int right = direction == LEFT ? prior.x() : bestRect.x();
width = right - left;
if (width < 0)
@@ -94,8 +94,8 @@ bool CachedFrame::CheckBetween(Direction direction, const WebCore::IntRect& best
int testTop = bestRect.y();
if (top > testTop)
top = testTop;
- int bottom = prior.bottom();
- int testBottom = bestRect.bottom();
+ int bottom = prior.maxY();
+ int testBottom = bestRect.maxY();
if (bottom < testBottom)
bottom = testBottom;
height = bottom - top;
@@ -590,18 +590,35 @@ void CachedFrame::findClosest(BestData* bestData, Direction originalDirection,
// clip bottom' -- keep the old code but try this instead
switch (direction) {
#if 0
- case LEFT: distance = testBounds.x() - clip->x(); break;
- case RIGHT: distance = clip->right() - testBounds.right(); break;
- case UP: distance = testBounds.y() - clip->y(); break;
- case DOWN: distance = clip->bottom() - testBounds.bottom(); break;
+ case LEFT:
+ distance = testBounds.x() - clip->x();
+ break;
+ case RIGHT:
+ distance = clip->right() - testBounds.right();
+ break;
+ case UP:
+ distance = testBounds.y() - clip->y();
+ break;
+ case DOWN:
+ distance = clip->bottom() - testBounds.bottom();
+ break;
#else
- case LEFT: distance = clip->right() - testBounds.x(); break;
- case RIGHT: distance = testBounds.right() - clip->x(); break;
- case UP: distance = clip->bottom() - testBounds.y(); break;
- case DOWN: distance = testBounds.bottom() - clip->y(); break;
+ case LEFT:
+ distance = clip->maxX() - testBounds.x();
+ break;
+ case RIGHT:
+ distance = testBounds.maxX() - clip->x();
+ break;
+ case UP:
+ distance = clip->maxY() - testBounds.y();
+ break;
+ case DOWN:
+ distance = testBounds.maxY() - clip->y();
+ break;
#endif
- default:
- distance = 0; ASSERT(0);
+ default:
+ distance = 0;
+ ASSERT(false);
}
if (distance < bestData->mDistance) {
bestData->mNode = test;
@@ -1227,10 +1244,10 @@ void CachedFrame::BestData::setDistances()
bool CachedFrame::BestData::setDownDirection(const CachedHistory* history)
{
const WebCore::IntRect& navBounds = history->navBounds();
- mMajorButt = mNodeBounds.y() - navBounds.bottom();
+ mMajorButt = mNodeBounds.y() - navBounds.maxY();
int testX = mNodeBounds.x();
- int testRight = mNodeBounds.right();
- setNavOverlap(navBounds.width(), navBounds.right() - testX,
+ int testRight = mNodeBounds.maxX();
+ setNavOverlap(navBounds.width(), navBounds.maxX() - testX,
testRight - navBounds.x());
if (canBeReachedByAnotherDirection()) {
mNode->setCondition(CachedNode::BEST_DIRECTION);
@@ -1244,8 +1261,8 @@ bool CachedFrame::BestData::setDownDirection(const CachedHistory* history)
mNode->setCondition(CachedNode::CENTER_FURTHER); // never move up or sideways
return REJECT_TEST;
}
- int inNavBottom = navBounds.bottom() - mNodeBounds.bottom();
- setNavInclusion(testRight - navBounds.right(), navBounds.x() - testX);
+ int inNavBottom = navBounds.maxY() - mNodeBounds.maxY();
+ setNavInclusion(testRight - navBounds.maxX(), navBounds.x() - testX);
bool subsumes = navBounds.height() > 0 && inOrSubsumesNav();
if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
@@ -1267,16 +1284,16 @@ bool CachedFrame::BestData::setDownDirection(const CachedHistory* history)
bool CachedFrame::BestData::setLeftDirection(const CachedHistory* history)
{
const WebCore::IntRect& navBounds = history->navBounds();
- mMajorButt = navBounds.x() - mNodeBounds.right();
+ mMajorButt = navBounds.x() - mNodeBounds.maxX();
int testY = mNodeBounds.y();
- int testBottom = mNodeBounds.bottom();
- setNavOverlap(navBounds.height(), navBounds.bottom() - testY,
+ int testBottom = mNodeBounds.maxY();
+ setNavOverlap(navBounds.height(), navBounds.maxY() - testY,
testBottom - navBounds.y());
if (canBeReachedByAnotherDirection()) {
mNode->setCondition(CachedNode::BEST_DIRECTION);
return REJECT_TEST;
}
- int inNavRight = navBounds.right() - mNodeBounds.right();
+ int inNavRight = navBounds.maxX() - mNodeBounds.maxX();
mMajorDelta2 = inNavRight;
mMajorDelta = mMajorDelta2 - ((navBounds.width() -
mNodeBounds.width()) >> 1);
@@ -1285,7 +1302,7 @@ bool CachedFrame::BestData::setLeftDirection(const CachedHistory* history)
return REJECT_TEST;
}
int inNavLeft = mNodeBounds.x() - navBounds.x();
- setNavInclusion(navBounds.y() - testY, testBottom - navBounds.bottom());
+ setNavInclusion(navBounds.y() - testY, testBottom - navBounds.maxY());
bool subsumes = navBounds.width() > 0 && inOrSubsumesNav();
if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
@@ -1307,10 +1324,10 @@ bool CachedFrame::BestData::setLeftDirection(const CachedHistory* history)
bool CachedFrame::BestData::setRightDirection(const CachedHistory* history)
{
const WebCore::IntRect& navBounds = history->navBounds();
- mMajorButt = mNodeBounds.x() - navBounds.right();
+ mMajorButt = mNodeBounds.x() - navBounds.maxX();
int testY = mNodeBounds.y();
- int testBottom = mNodeBounds.bottom();
- setNavOverlap(navBounds.height(), navBounds.bottom() - testY,
+ int testBottom = mNodeBounds.maxY();
+ setNavOverlap(navBounds.height(), navBounds.maxY() - testY,
testBottom - navBounds.y());
if (canBeReachedByAnotherDirection()) {
mNode->setCondition(CachedNode::BEST_DIRECTION);
@@ -1324,8 +1341,8 @@ bool CachedFrame::BestData::setRightDirection(const CachedHistory* history)
mNode->setCondition(CachedNode::CENTER_FURTHER); // never move left or sideways
return REJECT_TEST;
}
- int inNavRight = navBounds.right() - mNodeBounds.right();
- setNavInclusion(testBottom - navBounds.bottom(), navBounds.y() - testY);
+ int inNavRight = navBounds.maxX() - mNodeBounds.maxX();
+ setNavInclusion(testBottom - navBounds.maxY(), navBounds.y() - testY);
bool subsumes = navBounds.width() > 0 && inOrSubsumesNav();
if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
@@ -1347,16 +1364,16 @@ bool CachedFrame::BestData::setRightDirection(const CachedHistory* history)
bool CachedFrame::BestData::setUpDirection(const CachedHistory* history)
{
const WebCore::IntRect& navBounds = history->navBounds();
- mMajorButt = navBounds.y() - mNodeBounds.bottom();
+ mMajorButt = navBounds.y() - mNodeBounds.maxY();
int testX = mNodeBounds.x();
- int testRight = mNodeBounds.right();
- setNavOverlap(navBounds.width(), navBounds.right() - testX,
+ int testRight = mNodeBounds.maxX();
+ setNavOverlap(navBounds.width(), navBounds.maxX() - testX,
testRight - navBounds.x());
if (canBeReachedByAnotherDirection()) {
mNode->setCondition(CachedNode::BEST_DIRECTION);
return REJECT_TEST;
}
- int inNavBottom = navBounds.bottom() - mNodeBounds.bottom();
+ int inNavBottom = navBounds.maxY() - mNodeBounds.maxY();
mMajorDelta2 = inNavBottom;
mMajorDelta = mMajorDelta2 - ((navBounds.height() -
mNodeBounds.height()) >> 1);
@@ -1365,7 +1382,7 @@ bool CachedFrame::BestData::setUpDirection(const CachedHistory* history)
return REJECT_TEST;
}
int inNavTop = mNodeBounds.y() - navBounds.y();
- setNavInclusion(navBounds.x() - testX, testRight - navBounds.right());
+ setNavInclusion(navBounds.x() - testX, testRight - navBounds.maxX());
bool subsumes = navBounds.height() > 0 && inOrSubsumesNav();
if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
diff --git a/Source/WebKit/android/nav/CachedFrame.h b/Source/WebKit/android/nav/CachedFrame.h
index 039a0ee..5802e36 100644
--- a/Source/WebKit/android/nav/CachedFrame.h
+++ b/Source/WebKit/android/nav/CachedFrame.h
@@ -173,7 +173,7 @@ protected:
bool mInNav;
bool mNavOutside;
bool mWorkingOutside;
- int bottom() const { return bounds().bottom(); }
+ int bottom() const { return bounds().maxY(); }
const WebCore::IntRect& bounds() const { return mNodeBounds; }
bool canBeReachedByAnotherDirection();
int height() const { return bounds().height(); }
@@ -183,7 +183,7 @@ protected:
const WebCore::IntRect& mouseBounds() const { return mMouseBounds; }
static SkFixed Overlap(int span, int left, int right);
void reset() { mNode = NULL; }
- int right() const { return bounds().right(); }
+ int right() const { return bounds().maxX(); }
void setMouseBounds(const WebCore::IntRect& b) { mMouseBounds = b; }
void setNodeBounds(const WebCore::IntRect& b) { mNodeBounds = b; }
void setDistances();
diff --git a/Source/WebKit/android/nav/CachedHistory.cpp b/Source/WebKit/android/nav/CachedHistory.cpp
index 9066412..d132cc3 100644
--- a/Source/WebKit/android/nav/CachedHistory.cpp
+++ b/Source/WebKit/android/nav/CachedHistory.cpp
@@ -64,18 +64,14 @@ bool CachedHistory::checkVisited(const CachedNode* node, CachedFrame::Direction
void CachedHistory::pinMaxMin(const WebCore::IntRect& viewBounds)
{
- if (mMinWorkingHorizontal < viewBounds.y() ||
- mMinWorkingHorizontal >= viewBounds.bottom())
+ if (mMinWorkingHorizontal < viewBounds.y() || mMinWorkingHorizontal >= viewBounds.maxY())
mMinWorkingHorizontal = viewBounds.y();
- if (mMaxWorkingHorizontal > viewBounds.bottom() ||
- mMaxWorkingHorizontal <= viewBounds.y())
- mMaxWorkingHorizontal = viewBounds.bottom();
- if (mMinWorkingVertical < viewBounds.x() ||
- mMinWorkingVertical >= viewBounds.right())
+ if (mMaxWorkingHorizontal > viewBounds.maxY() || mMaxWorkingHorizontal <= viewBounds.y())
+ mMaxWorkingHorizontal = viewBounds.maxY();
+ if (mMinWorkingVertical < viewBounds.x() || mMinWorkingVertical >= viewBounds.maxX())
mMinWorkingVertical = viewBounds.x();
- if (mMaxWorkingVertical > viewBounds.right() ||
- mMaxWorkingVertical <= viewBounds.x())
- mMaxWorkingVertical = viewBounds.right();
+ if (mMaxWorkingVertical > viewBounds.maxX() || mMaxWorkingVertical <= viewBounds.x())
+ mMaxWorkingVertical = viewBounds.maxX();
}
void CachedHistory::reset()
@@ -111,11 +107,11 @@ void CachedHistory::setWorking(CachedFrame::Direction newMove,
if (change) { // uninitialized or change in direction
if (lastAxis != CachedFrame::LEFT && navBounds->height() > 0) {
mMinWorkingHorizontal = navBounds->y();
- mMaxWorkingHorizontal = navBounds->bottom();
+ mMaxWorkingHorizontal = navBounds->maxY();
}
if (lastAxis != CachedFrame::UP && navBounds->width() > 0) {
mMinWorkingVertical = navBounds->x();
- mMaxWorkingVertical = navBounds->right();
+ mMaxWorkingVertical = navBounds->maxX();
}
}
pinMaxMin(viewBounds);
diff --git a/Source/WebKit/android/nav/CachedNode.cpp b/Source/WebKit/android/nav/CachedNode.cpp
index e3ba34d..86c2a38 100644
--- a/Source/WebKit/android/nav/CachedNode.cpp
+++ b/Source/WebKit/android/nav/CachedNode.cpp
@@ -147,17 +147,17 @@ void CachedNode::fixUpCursorRects(const CachedFrame* frame)
while (++unitBoundsPtr < unitBoundsEnd) {
// any other unitBounds to the left or right of this one?
int unitTop = unitBoundsPtr->y();
- int unitBottom = unitBoundsPtr->bottom();
+ int unitBottom = unitBoundsPtr->maxY();
int unitLeft = unitBoundsPtr->x();
- int unitRight = unitBoundsPtr->right();
+ int unitRight = unitBoundsPtr->maxX();
WebCore::IntRect* testBoundsPtr = mCursorRing.begin() - 1;
while (++testBoundsPtr < unitBoundsEnd) {
if (unitBoundsPtr == testBoundsPtr)
continue;
int testTop = testBoundsPtr->y();
- int testBottom = testBoundsPtr->bottom();
+ int testBottom = testBoundsPtr->maxY();
int testLeft = testBoundsPtr->x();
- int testRight = testBoundsPtr->right();
+ int testRight = testBoundsPtr->maxX();
int candidateTop = unitTop > testTop ? unitTop : testTop;
int candidateBottom = unitBottom < testBottom ? unitBottom : testBottom;
int candidateLeft = unitRight < testLeft ? unitRight : testRight;
@@ -184,19 +184,19 @@ void CachedNode::fixUpCursorRects(const CachedFrame* frame)
continue;
if (leftRight) {
if (candidateTop >= checkBoundsPtr->y() &&
- candidateBottom > checkBoundsPtr->bottom())
- candidateTop = checkBoundsPtr->bottom();
+ candidateBottom > checkBoundsPtr->maxY())
+ candidateTop = checkBoundsPtr->maxY();
else if (candidateTop < checkBoundsPtr->y() &&
- candidateBottom <= checkBoundsPtr->bottom())
+ candidateBottom <= checkBoundsPtr->maxY())
candidateBottom = checkBoundsPtr->y();
else
goto nextCheck;
} else {
if (candidateLeft >= checkBoundsPtr->x() &&
- candidateRight > checkBoundsPtr->right())
- candidateLeft = checkBoundsPtr->right();
+ candidateRight > checkBoundsPtr->maxX())
+ candidateLeft = checkBoundsPtr->maxX();
else if (candidateLeft < checkBoundsPtr->x() &&
- candidateRight <= checkBoundsPtr->right())
+ candidateRight <= checkBoundsPtr->maxX())
candidateRight = checkBoundsPtr->x();
else
goto nextCheck;
diff --git a/Source/WebKit/android/nav/CachedRoot.cpp b/Source/WebKit/android/nav/CachedRoot.cpp
index 64bf19a..e841683 100644
--- a/Source/WebKit/android/nav/CachedRoot.cpp
+++ b/Source/WebKit/android/nav/CachedRoot.cpp
@@ -589,7 +589,7 @@ public:
{
const WebCore::IntRect* r;
for (r = rings.begin(); r != rings.end(); r++) {
- SkIRect fatter = {r->x(), r->y(), r->right(), r->bottom()};
+ SkIRect fatter = {r->x(), r->y(), r->maxX(), r->maxY()};
fatter.inset(-CURSOR_RING_HIT_TEST_RADIUS, -CURSOR_RING_HIT_TEST_RADIUS);
DBG_NAV_LOGD("RingCheck fat=(%d,%d,r=%d,b=%d)", fatter.fLeft, fatter.fTop,
fatter.fRight, fatter.fBottom);
@@ -1285,15 +1285,15 @@ bool CachedRoot::innerDown(const CachedNode* test, BestData* bestData) const
// (line up)
mScrolledBounds.setHeight(mScrolledBounds.height() + mMaxYScroll);
int testTop = mScrolledBounds.y();
- int viewBottom = mViewBounds.bottom();
+ int viewBottom = mViewBounds.maxY();
const WebCore::IntRect& navBounds = mHistory->mNavBounds;
if (navBounds.isEmpty() == false &&
- navBounds.bottom() > viewBottom && viewBottom < mContents.height())
+ navBounds.maxY() > viewBottom && viewBottom < mContents.height())
return false;
if (navBounds.isEmpty() == false) {
int navTop = navBounds.y();
int scrollBottom;
- if (testTop < navTop && navTop < (scrollBottom = mScrolledBounds.bottom())) {
+ if (testTop < navTop && navTop < (scrollBottom = mScrolledBounds.maxY())) {
mScrolledBounds.setHeight(scrollBottom - navTop);
mScrolledBounds.setY(navTop);
}
@@ -1310,14 +1310,14 @@ bool CachedRoot::innerLeft(const CachedNode* test, BestData* bestData) const
setupScrolledBounds();
mScrolledBounds.setX(mScrolledBounds.x() - mMaxXScroll);
mScrolledBounds.setWidth(mScrolledBounds.width() + mMaxXScroll);
- int testRight = mScrolledBounds.right();
+ int testRight = mScrolledBounds.maxX();
int viewLeft = mViewBounds.x();
const WebCore::IntRect& navBounds = mHistory->mNavBounds;
if (navBounds.isEmpty() == false &&
navBounds.x() < viewLeft && viewLeft > mContents.x())
return false;
if (navBounds.isEmpty() == false) {
- int navRight = navBounds.right();
+ int navRight = navBounds.maxX();
int scrollLeft;
if (testRight > navRight && navRight > (scrollLeft = mScrolledBounds.x()))
mScrolledBounds.setWidth(navRight - scrollLeft);
@@ -1347,7 +1347,7 @@ void CachedRoot::innerMove(const CachedNode* node, BestData* bestData,
switch (direction) {
case LEFT:
if (outOfCursor)
- mHistory->mNavBounds = WebCore::IntRect(mViewBounds.right(),
+ mHistory->mNavBounds = WebCore::IntRect(mViewBounds.maxX(),
mViewBounds.y(), 1, mViewBounds.height());
findClosest = innerLeft(node, bestData);
break;
@@ -1360,7 +1360,7 @@ void CachedRoot::innerMove(const CachedNode* node, BestData* bestData,
case UP:
if (outOfCursor)
mHistory->mNavBounds = WebCore::IntRect(mViewBounds.x(),
- mViewBounds.bottom(), mViewBounds.width(), 1);
+ mViewBounds.maxY(), mViewBounds.width(), 1);
findClosest = innerUp(node, bestData);
break;
case DOWN:
@@ -1390,12 +1390,12 @@ void CachedRoot::innerMove(const CachedNode* node, BestData* bestData,
newBounds.move(offsetX, offsetY);
if (mViewBounds.x() > newBounds.x())
offsetX = mViewBounds.x() - mHistory->mNavBounds.x();
- else if (mViewBounds.right() < newBounds.right())
- offsetX = mViewBounds.right() - mHistory->mNavBounds.right();
+ else if (mViewBounds.maxX() < newBounds.maxX())
+ offsetX = mViewBounds.maxX() - mHistory->mNavBounds.maxX();
if (mViewBounds.y() > newBounds.y())
offsetY = mViewBounds.y() - mHistory->mNavBounds.y();
- else if (mViewBounds.bottom() < newBounds.bottom())
- offsetY = mViewBounds.bottom() - mHistory->mNavBounds.bottom();
+ else if (mViewBounds.maxY() < newBounds.maxY())
+ offsetY = mViewBounds.maxY() - mHistory->mNavBounds.maxY();
mHistory->mNavBounds.move(offsetX, offsetY);
}
mHistory->setDidFirstLayout(false);
@@ -1409,15 +1409,15 @@ bool CachedRoot::innerRight(const CachedNode* test, BestData* bestData) const
// (align)
mScrolledBounds.setWidth(mScrolledBounds.width() + mMaxXScroll);
int testLeft = mScrolledBounds.x();
- int viewRight = mViewBounds.right();
+ int viewRight = mViewBounds.maxX();
const WebCore::IntRect& navBounds = mHistory->mNavBounds;
if (navBounds.isEmpty() == false &&
- navBounds.right() > viewRight && viewRight < mContents.width())
+ navBounds.maxX() > viewRight && viewRight < mContents.width())
return false;
if (navBounds.isEmpty() == false) {
int navLeft = navBounds.x();
int scrollRight;
- if (testLeft < navLeft && navLeft < (scrollRight = mScrolledBounds.right())) {
+ if (testLeft < navLeft && navLeft < (scrollRight = mScrolledBounds.maxX())) {
mScrolledBounds.setWidth(scrollRight - navLeft);
mScrolledBounds.setX(navLeft);
}
@@ -1434,14 +1434,14 @@ bool CachedRoot::innerUp(const CachedNode* test, BestData* bestData) const
setupScrolledBounds();
mScrolledBounds.setY(mScrolledBounds.y() - mMaxYScroll);
mScrolledBounds.setHeight(mScrolledBounds.height() + mMaxYScroll);
- int testBottom = mScrolledBounds.bottom();
+ int testBottom = mScrolledBounds.maxY();
int viewTop = mViewBounds.y();
const WebCore::IntRect& navBounds = mHistory->mNavBounds;
if (navBounds.isEmpty() == false &&
navBounds.y() < viewTop && viewTop > mContents.y())
return false;
if (navBounds.isEmpty() == false) {
- int navBottom = navBounds.bottom();
+ int navBottom = navBounds.maxY();
int scrollTop;
if (testBottom > navBottom && navBottom > (scrollTop = mScrolledBounds.y()))
mScrolledBounds.setHeight(navBottom - scrollTop);
@@ -1657,13 +1657,13 @@ bool CachedRoot::scrollDelta(WebCore::IntRect& newOutset, Direction direction, i
return newOutset.x() >= mViewBounds.x();
case RIGHT:
*delta = mMaxXScroll;
- return newOutset.right() <= mViewBounds.right();
+ return newOutset.maxX() <= mViewBounds.maxX();
case UP:
*delta = -mMaxYScroll;
return newOutset.y() >= mViewBounds.y();
case DOWN:
*delta = mMaxYScroll;
- return newOutset.bottom() <= mViewBounds.bottom();
+ return newOutset.maxY() <= mViewBounds.maxY();
default:
*delta = 0;
ASSERT(0);
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp
index ff5d73d..f56cd69 100644
--- a/Source/WebKit/android/nav/WebView.cpp
+++ b/Source/WebKit/android/nav/WebView.cpp
@@ -321,7 +321,7 @@ void nativeRecordButtons(bool hasFocus, bool pressed, bool invalidate)
m_viewImpl->gButtonMutex.unlock();
if (invalidate && cachedCursor && cursorIsOnButton) {
const WebCore::IntRect& b = cachedCursor->bounds(cachedFrame);
- viewInvalidateRect(b.x(), b.y(), b.right(), b.bottom());
+ viewInvalidateRect(b.x(), b.y(), b.maxX(), b.maxY());
}
}
@@ -335,7 +335,7 @@ void scrollRectOnScreen(const IntRect& rect)
calcOurContentVisibleRect(&visible);
int dx = 0;
int left = rect.x();
- int right = rect.right();
+ int right = rect.maxX();
if (left < visible.fLeft) {
dx = left - visible.fLeft;
// Only scroll right if the entire width can fit on screen.
@@ -344,7 +344,7 @@ void scrollRectOnScreen(const IntRect& rect)
}
int dy = 0;
int top = rect.y();
- int bottom = rect.bottom();
+ int bottom = rect.maxY();
if (top < visible.fTop) {
dy = top - visible.fTop;
// Only scroll down if the entire height can fit on screen
@@ -649,9 +649,9 @@ void fixCursor()
return;
if (abs(bounds.y() - newBounds.y()) > 4)
return;
- if (abs(bounds.right() - newBounds.right()) > 4)
+ if (abs(bounds.maxX() - newBounds.maxX()) > 4)
return;
- if (abs(bounds.bottom() - newBounds.bottom()) > 4)
+ if (abs(bounds.maxY() - newBounds.maxY()) > 4)
return;
DBG_NAV_LOGD("node=%p frame=%p x=%d y=%d bounds=(%d,%d,w=%d,h=%d)",
node, frame, x, y, bounds.x(), bounds.y(), bounds.width(),
@@ -882,12 +882,12 @@ bool moveCursor(int keyCode, int count, bool ignoreScroll)
} else {
int docHeight = root->documentHeight();
int docWidth = root->documentWidth();
- if (visibleRect.bottom() + dy > docHeight)
- dy = docHeight - visibleRect.bottom();
+ if (visibleRect.maxY() + dy > docHeight)
+ dy = docHeight - visibleRect.maxY();
else if (visibleRect.y() + dy < 0)
dy = -visibleRect.y();
- if (visibleRect.right() + dx > docWidth)
- dx = docWidth - visibleRect.right();
+ if (visibleRect.maxX() + dx > docWidth)
+ dx = docWidth - visibleRect.maxX();
else if (visibleRect.x() < 0)
dx = -visibleRect.x();
result = direction == CachedFrame::LEFT ? dx >= 0 :
@@ -1345,7 +1345,7 @@ void postInvalidateDelayed(int64_t delay, const WebCore::IntRect& bounds)
{
JNIEnv* env = JSC::Bindings::getJNIEnv();
env->CallVoidMethod(m_javaGlue.object(env).get(), m_javaGlue.m_postInvalidateDelayed,
- delay, bounds.x(), bounds.y(), bounds.right(), bounds.bottom());
+ delay, bounds.x(), bounds.y(), bounds.maxX(), bounds.maxY());
checkException(env);
}
@@ -1520,8 +1520,8 @@ class GLDrawFunctor : Functor {
}
info->dirtyLeft = finalInval.x();
info->dirtyTop = finalInval.y();
- info->dirtyRight = finalInval.right();
- info->dirtyBottom = finalInval.bottom();
+ info->dirtyRight = finalInval.maxX();
+ info->dirtyBottom = finalInval.maxY();
}
// return 1 if invalidation needed, 0 otherwise
return retVal ? 1 : 0;
@@ -1557,7 +1557,7 @@ static jobject nativeCacheHitNodeBounds(JNIEnv *env, jobject obj)
jclass rectClass = env->FindClass("android/graphics/Rect");
jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V");
jobject rect = env->NewObject(rectClass, init, bounds.x(),
- bounds.y(), bounds.right(), bounds.bottom());
+ bounds.y(), bounds.maxX(), bounds.maxY());
env->DeleteLocalRef(rectClass);
return rect;
}
@@ -1692,7 +1692,7 @@ static jobject nativeCursorNodeBounds(JNIEnv *env, jobject obj)
jclass rectClass = env->FindClass("android/graphics/Rect");
jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V");
jobject rect = env->NewObject(rectClass, init, bounds.x(),
- bounds.y(), bounds.right(), bounds.bottom());
+ bounds.y(), bounds.maxX(), bounds.maxY());
env->DeleteLocalRef(rectClass);
return rect;
}
@@ -1930,7 +1930,7 @@ static jobject nativeFocusCandidateNodeBounds(JNIEnv *env, jobject obj)
const CachedNode* node = getFocusCandidate(env, obj, &frame);
WebCore::IntRect bounds = node ? node->bounds(frame)
: WebCore::IntRect(0, 0, 0, 0);
- return createJavaRect(env, bounds.x(), bounds.y(), bounds.right(), bounds.bottom());
+ return createJavaRect(env, bounds.x(), bounds.y(), bounds.maxX(), bounds.maxY());
}
static jobject nativeFocusCandidatePaddingRect(JNIEnv *env, jobject obj)
@@ -1998,7 +1998,7 @@ static jobject nativeFocusNodeBounds(JNIEnv *env, jobject obj)
jclass rectClass = env->FindClass("android/graphics/Rect");
jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V");
jobject rect = env->NewObject(rectClass, init, bounds.x(),
- bounds.y(), bounds.right(), bounds.bottom());
+ bounds.y(), bounds.maxX(), bounds.maxY());
env->DeleteLocalRef(rectClass);
return rect;
}
@@ -2169,7 +2169,7 @@ static jobject nativeGetCursorRingBounds(JNIEnv *env, jobject obj)
WebCore::IntRect webRect;
view->cursorRingBounds(&webRect);
jobject rect = env->NewObject(rectClass, init, webRect.x(),
- webRect.y(), webRect.right(), webRect.bottom());
+ webRect.y(), webRect.maxX(), webRect.maxY());
env->DeleteLocalRef(rectClass);
return rect;
}
diff --git a/Source/WebKit/cf/ChangeLog b/Source/WebKit/cf/ChangeLog
index f712c97..b418540 100644
--- a/Source/WebKit/cf/ChangeLog
+++ b/Source/WebKit/cf/ChangeLog
@@ -1,3 +1,38 @@
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCoreSupport/WebInspectorClientCF.cpp:
+ (populateSetting):
+ (storeSetting):
+ (WebInspectorClient::createFrontendSettings):
+
+2011-01-26 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: inspector should start in attached state by default
+ https://bugs.webkit.org/show_bug.cgi?id=53165
+
+ * WebCoreSupport/WebInspectorClientCF.cpp:
+ (WebInspectorClient::inspectorStartsAttached):
+
+2011-01-25 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove "attached" state related methods from InspectorAgent
+ https://bugs.webkit.org/show_bug.cgi?id=53086
+
+ * WebCoreSupport/WebInspectorClientCF.cpp:
+ (WebInspectorClient::sendMessageToFrontend):
+ (WebInspectorClient::inspectorStartsAttached):
+ (WebInspectorClient::setInspectorStartsAttached):
+ (WebInspectorClient::releaseFrontendPage):
+
2011-01-03 Pratik Solanki <psolanki@apple.com>
Mac build fix. Define WTF_USE_CFNETWORK for Windows build only.
diff --git a/Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp b/Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
index 9183fa4..b9afa1a 100644
--- a/Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
+++ b/Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
@@ -57,21 +57,25 @@
#include <CoreFoundation/CoreFoundation.h>
#include <WebCore/Frame.h>
+#include <WebCore/InspectorFrontendClientLocal.h>
#include <WebCore/Page.h>
#include <WebCore/PlatformString.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RetainPtr.h>
#include <wtf/Vector.h>
using namespace WebCore;
+static const char* inspectorStartsAttachedSetting = "inspectorStartsAttached";
+
static inline CFStringRef createKeyForPreferences(const String& key)
{
RetainPtr<CFStringRef> keyCFString(AdoptCF, key.createCFString());
return CFStringCreateWithFormat(0, 0, CFSTR("WebKit Web Inspector Setting - %@"), keyCFString.get());
}
-void WebInspectorClient::populateSetting(const String& key, String* setting)
+static void populateSetting(const String& key, String* setting)
{
RetainPtr<CFStringRef> preferencesKey(AdoptCF, createKeyForPreferences(key));
RetainPtr<CFPropertyListRef> value(AdoptCF, CFPreferencesCopyAppValue(preferencesKey.get(), kCFPreferencesCurrentApplication));
@@ -88,7 +92,7 @@ void WebInspectorClient::populateSetting(const String& key, String* setting)
*setting = "";
}
-void WebInspectorClient::storeSetting(const String& key, const String& setting)
+static void storeSetting(const String& key, const String& setting)
{
RetainPtr<CFPropertyListRef> objectToStore;
objectToStore.adoptCF(setting.createCFString());
@@ -98,12 +102,46 @@ void WebInspectorClient::storeSetting(const String& key, const String& setting)
CFPreferencesSetAppValue(preferencesKey.get(), objectToStore.get(), kCFPreferencesCurrentApplication);
}
+bool WebInspectorClient::sendMessageToFrontend(const String& message)
+{
+ return doDispatchMessageOnFrontendPage(m_frontendPage, message);
+}
+
+bool WebInspectorClient::inspectorStartsAttached()
+{
+ String value;
+ populateSetting(inspectorStartsAttachedSetting, &value);
+ if (value.isEmpty())
+ return true;
+ return value == "true";
+}
+
+void WebInspectorClient::setInspectorStartsAttached(bool attached)
+{
+ storeSetting(inspectorStartsAttachedSetting, attached ? "true" : "false");
+}
+
void WebInspectorClient::releaseFrontendPage()
{
m_frontendPage = 0;
}
-bool WebInspectorClient::sendMessageToFrontend(const String& message)
+WTF::PassOwnPtr<WebCore::InspectorFrontendClientLocal::Settings> WebInspectorClient::createFrontendSettings()
{
- return doDispatchMessageOnFrontendPage(m_frontendPage, message);
+ class InspectorFrontendSettingsCF : public WebCore::InspectorFrontendClientLocal::Settings {
+ public:
+ virtual ~InspectorFrontendSettingsCF() { }
+ virtual String getProperty(const String& name)
+ {
+ String value;
+ populateSetting(name, &value);
+ return value;
+ }
+
+ virtual void setProperty(const String& name, const String& value)
+ {
+ storeSetting(name, value);
+ }
+ };
+ return adoptPtr<WebCore::InspectorFrontendClientLocal::Settings>(new InspectorFrontendSettingsCF());
}
diff --git a/Source/WebKit/chromium/ChangeLog b/Source/WebKit/chromium/ChangeLog
index e2d81f7..1cb0068 100644
--- a/Source/WebKit/chromium/ChangeLog
+++ b/Source/WebKit/chromium/ChangeLog
@@ -1,3 +1,1095 @@
+2011-02-11 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Allow turning off multisampling through web preference settings
+ https://bugs.webkit.org/show_bug.cgi?id=54321
+
+ * public/WebSettings.h: Add a flag for multisampling setting.
+ * src/WebSettingsImpl.cpp: Ditto.
+ (WebKit::WebSettingsImpl::setOpenGLMultisamplingEnabled):
+ * src/WebSettingsImpl.h: Ditto.
+
+2011-02-12 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Implement IDBObjectStore::clear
+ https://bugs.webkit.org/show_bug.cgi?id=54193
+
+ * src/IDBObjectStoreProxy.cpp:
+ (WebCore::IDBObjectStoreProxy::clear):
+ * src/IDBObjectStoreProxy.h:
+ * src/WebIDBObjectStoreImpl.cpp:
+ (WebKit::WebIDBObjectStoreImpl::clear):
+ * src/WebIDBObjectStoreImpl.h:
+
+2011-02-11 David Grogan <dgrogan@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ indexeddb: add onBlocked to WebKit::WebIDBCallbacks
+ https://bugs.webkit.org/show_bug.cgi?id=54329
+
+ * public/WebIDBCallbacks.h:
+ (WebKit::WebIDBCallbacks::onBlocked):
+
+2011-02-11 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [fileapi] Add support for filesystem: URI handling
+ https://bugs.webkit.org/show_bug.cgi?id=53529
+
+ Changes to Chromium WebKit API required to expose
+ the FileSystem type to WebCore's fileapi code, since the
+ type is part of the filesystem URI.
+
+ * src/AsyncFileSystemChromium.cpp:
+ (WebCore::AsyncFileSystemChromium::AsyncFileSystemChromium):
+ * src/AsyncFileSystemChromium.h:
+ (WebCore::AsyncFileSystemChromium::create):
+ * src/LocalFileSystemChromium.cpp:
+ (WebCore::LocalFileSystem::readFileSystem):
+ (WebCore::LocalFileSystem::requestFileSystem):
+ * src/WebFileSystemCallbacksImpl.cpp:
+ (WebKit::WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl):
+ (WebKit::WebFileSystemCallbacksImpl::didOpenFileSystem):
+ * src/WebFileSystemCallbacksImpl.h:
+ * src/WorkerAsyncFileSystemChromium.cpp:
+ (WebCore::WorkerAsyncFileSystemChromium::WorkerAsyncFileSystemChromium):
+ * src/WorkerAsyncFileSystemChromium.h:
+ (WebCore::WorkerAsyncFileSystemChromium::create):
+
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * src/ContextMenuClientImpl.cpp:
+ (WebKit::ContextMenuClientImpl::getCustomMenuFromDefaultItems):
+ * src/FrameLoaderClientImpl.cpp:
+ (WebKit::FrameLoaderClientImpl::finishedLoading):
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::encoding):
+ (WebKit::WebFrameImpl::loadJavaScriptURL):
+ * src/WebPageSerializerImpl.cpp:
+ (WebKit::WebPageSerializerImpl::preActionBeforeSerializeOpenTag):
+ (WebKit::WebPageSerializerImpl::serialize):
+ * src/WebSearchableFormData.cpp:
+ (HTMLNames::GetFormEncoding):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::pageEncoding):
+
+2011-02-10 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed: chromium build fix.
+
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgent::shouldInterruptForMessage):
+
+2011-02-10 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ [chromium] add WebIDBObjectStore::clear method
+
+ https://bugs.webkit.org/show_bug.cgi?id=54149
+
+ * public/WebIDBObjectStore.h:
+ (WebKit::WebIDBObjectStore::put):
+ (WebKit::WebIDBObjectStore::deleteFunction):
+ (WebKit::WebIDBObjectStore::clear):
+
+2011-02-10 Avi Drissman <avi@google.com>
+
+ Reviewed by Darin Fisher.
+
+ <option> should implement the dir attribute. Mac Chromium version, followup to r76983, r77654.
+ https://bugs.webkit.org/show_bug.cgi?id=50969
+
+ Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html added in r76983.
+
+ * public/WebMenuItemInfo.h:
+ * public/WebPopupMenuInfo.h:
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::getPopupMenuInfo):
+ * src/ExternalPopupMenu.cpp:
+ (WebKit::ExternalPopupMenu::getPopupMenuInfo):
+
+2011-02-09 David Holloway <dhollowa@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Removes deprecated interface WebAutoFillClient::didAcceptAutocompleteSuggestion(). This interface has been replaced by the more general WebAutoFillClient::didAcceptAutoFillSuggestion() method.
+ https://bugs.webkit.org/show_bug.cgi?id=54125
+
+ * public/WebAutoFillClient.h:
+ * src/EditorClientImpl.cpp:
+ * src/EditorClientImpl.h:
+
+2011-02-09 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Export WebInputElement::defaultMaxLength as a function rather than a constant.
+ Needed because the order of initialization of static constants
+ is not guaranteed across compilation units.
+ https://bugs.webkit.org/show_bug.cgi?id=54056
+
+ * public/WebInputElement.h:
+ * src/WebInputElement.cpp:
+ (WebKit::WebInputElement::defaultMaxLength): Now a static function.
+
+2011-02-09 Sailesh Agrawal <sail@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Search/replace references to gfx/* with ui/gfx/*
+
+ * public/WebPoint.h:
+ * public/WebRect.h:
+ * public/WebSize.h:
+
+2011-02-09 Nebojsa Ciric <cira@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Implements Locale object of JavaScript internationalization API proposal, as an
+ v8 extension. Extension code is hosted in v8 project (src/extensions/experimental/i18n-extension.{cc,h})
+ and in this patch we just provide flags, tests and build rules for chromium port.
+ https://bugs.webkit.org/show_bug.cgi?id=49414
+
+ * features.gypi:
+ * public/WebRuntimeFeatures.h:
+ * src/WebRuntimeFeatures.cpp:
+ (WebKit::WebRuntimeFeatures::enableExperimentalI18NAPI):
+ (WebKit::WebRuntimeFeatures::isExperimentalI18NAPIEnabled):
+
+2011-02-09 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Shinichiro Hamaji.
+
+ [Chromium] WebTextCheckingResult should have a default constructor.
+ https://bugs.webkit.org/show_bug.cgi?id=54075
+
+ Gave default parameters to WebTextCheckingResult constructor.
+
+ * public/WebTextCheckingResult.h:
+ (WebKit::WebTextCheckingResult::WebTextCheckingResult):
+
+2011-02-08 Sailesh Agrawal <sail@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Invalidate rect doesn't work for windowless plugins on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=53117
+
+ Invalidate rect for windowless plugins wasn't working if the web page was composited.
+
+ The problem was that the invalidate call was causing simply dirtying the LayerChromium layers. Since the plugin was windowless this didn't cause the plugin to be repainted.
+
+ Fix was to copy the invalidate code from WebCore/plugins/PluginView.cpp/PluginView::invalidateWindowlessPluginRect() which does the correct thing.
+
+ Tested my fix on Windows and Mac and verified that the movie on http://apple.com/appltv correctly plays. Verified that windowed plugins still correctly draw as well.
+
+ * src/WebPluginContainerImpl.cpp:
+ (WebKit::WebPluginContainerImpl::invalidateRect):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * src/ChromeClientImpl.h:
+
+2011-02-08 Tony Chang <tony@chromium.org>
+
+ Unreviewed, build fix for clobber builds of DRT on mac/linux.
+
+ This file moved in chromium r73530 and this path wasn't changed.
+
+ * WebKit.gyp:
+
+2011-02-02 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53169
+
+ Minor change enforced by major changes in WebCore/inspector/InspectorController.
+
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgentImpl::dispatchOnInspectorBackend):
+ * src/WebViewImpl.h:
+
+2011-02-07 Alexey Marinichev <amarinichev@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Hook up WebGraphicsContext3D::setContextLostCallback.
+ https://bugs.webkit.org/show_bug.cgi?id=53722
+
+ Test: fast/canvas/webgl/context-lost.html, comment out the line with
+ extension.loseContext() and kill the GPU process "Lose context"
+ message shows up.
+
+ * public/WebGraphicsContext3D.h:
+ (WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback::~WebGraphicsContextLostCallback):
+ * src/GraphicsContext3DChromium.cpp:
+ (WebCore::GraphicsContextLostCallbackAdapter::~GraphicsContextLostCallbackAdapter):
+ (WebCore::GraphicsContextLostCallbackAdapter::GraphicsContextLostCallbackAdapter):
+ (WebCore::GraphicsContextLostCallbackAdapter::onContextLost):
+ (WebCore::GraphicsContextLostCallbackAdapter::create):
+ (WebCore::GraphicsContext3DInternal::setContextLostCallback):
+ * src/GraphicsContext3DInternal.h:
+
+2011-02-07 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Jian Li.
+
+ [chromium] Remove deprecated method WebNotification::dir
+ https://bugs.webkit.org/show_bug.cgi?id=53735
+
+ * public/WebNotification.h:
+ * src/WebNotification.cpp:
+
+2011-02-03 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Should implement EditorClientImpl::requestCheckingOfString()
+ https://bugs.webkit.org/show_bug.cgi?id=51013
+
+ - Added WebTextCheckingCompletion to receive the checked result asynchronously.
+ - Added WebViewClient::requestCheckingOfText() and related classes.
+ - Implemented EditorClientImpl::requestCheckingOfString().
+
+ * WebKit.gyp:
+ * public/WebSettings.h:
+ * public/WebTextCheckingCompletion.h: Added.
+ (WebKit::WebTextCheckingCompletion::~WebTextCheckingCompletion):
+ * public/WebTextCheckingResult.h: Added.
+ (WebKit::WebTextCheckingResult::error):
+ (WebKit::WebTextCheckingResult::position):
+ (WebKit::WebTextCheckingResult::length):
+ (WebKit::WebTextCheckingResult::WebTextCheckingResult):
+ * public/WebViewClient.h:
+ (WebKit::WebViewClient::requestCheckingOfText): Gave an implementation
+ * src/AssertMatchingEnums.cpp:
+ * src/EditorClientImpl.cpp:
+ (WebKit::EditorClientImpl::requestCheckingOfString):
+ * src/EditorClientImpl.h:
+ * src/WebSettingsImpl.cpp:
+ (WebKit::WebSettingsImpl::setAsynchronousSpellCheckingEnabled):
+ * src/WebSettingsImpl.h:
+ * src/WebTextCheckingCompletionImpl.cpp: Added.
+ (WebKit::toCoreResults):
+ (WebKit::WebTextCheckingCompletionImpl::didFinishCheckingText):
+ * src/WebTextCheckingCompletionImpl.h: Added.
+ (WebKit::WebTextCheckingCompletionImpl::WebTextCheckingCompletionImpl):
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * src/DragClientImpl.cpp:
+ * src/DragClientImpl.h:
+
+2011-02-04 Charlie Reis <creis@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Crash in WebCore::HistoryController::itemsAreClones
+ https://bugs.webkit.org/show_bug.cgi?id=52819
+
+ Removes unneeded sanity checks used for diagnosing a memory error.
+
+ * src/WebFrameImpl.cpp:
+
+2011-02-04 Daniel Cheng <dcheng@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Clone WebClipboard to be frame-specific.
+ https://bugs.webkit.org/show_bug.cgi?id=53727
+
+ For drop operations, Chrome currently snapshots the data and copies it
+ into the renderer process. As we add more supported drag data types, the
+ copy will become increasingly expensive. Instead, we'd like to snapshot
+ data in the browser to reduce the amount of data copied and to support
+ Blob in DataTransferItem. In order to allow this, we associated
+ WebClipboard with a frame so it can correctly route its IPCs to the
+ corresponding Chromium host.
+
+ * public/WebFrameClient.h:
+ (WebKit::WebFrameClient::clipboard):
+ * src/PlatformBridge.cpp:
+ (WebCore::getClipboard):
+ (WebCore::PlatformBridge::clipboardReadAvailableTypes):
+ (WebCore::PlatformBridge::clipboardReadData):
+ (WebCore::PlatformBridge::clipboardReadFilenames):
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::fromFrame):
+ * src/WebFrameImpl.h:
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::dragTargetDragEnterNew):
+
+2011-02-04 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Darin Fisher.
+
+ Move chromium iframe shim code to cross-platform file
+ https://bugs.webkit.org/show_bug.cgi?id=52594
+
+ * src/WebPluginContainerImpl.cpp: Move code to WebCore/plugin/IFrameShimSupport.cpp
+
+2011-02-04 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by David Levin.
+
+ Implement "<option> should implement the dir attribute" for chromium port after r76983.
+ https://bugs.webkit.org/show_bug.cgi?id=50969
+
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection): Override as true.
+ * src/WebViewImpl.cpp: Remove directionality hint from autofill drop-down setting.
+
+2011-02-01 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Remove the timeout event from IndexedDB
+ https://bugs.webkit.org/show_bug.cgi?id=53521
+
+ * public/WebIDBDatabase.h:
+ (WebKit::WebIDBDatabase::transaction):
+ * public/WebIDBTransactionCallbacks.h:
+ * src/IDBDatabaseProxy.cpp:
+ (WebCore::IDBDatabaseProxy::transaction):
+ * src/IDBDatabaseProxy.h:
+ * src/IDBTransactionCallbacksProxy.cpp:
+ * src/IDBTransactionCallbacksProxy.h:
+ * src/WebIDBDatabaseImpl.cpp:
+ (WebKit::WebIDBDatabaseImpl::transaction):
+ * src/WebIDBDatabaseImpl.h:
+ * src/WebIDBTransactionCallbacksImpl.cpp:
+ * src/WebIDBTransactionCallbacksImpl.h:
+
+2011-02-04 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed.
+
+ Roll chromium to 73764.
+
+ * DEPS:
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * features.gypi:
+ * public/WebViewClient.h:
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::registerProtocolHandler):
+ * src/ChromeClientImpl.h:
+
+2011-02-03 Brian Ryner <bryner@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Add a field to the ResourceResponse for tracking the socket address
+ of the host that the resource was fetched from. Patch was originally
+ by Paul Marks.
+ https://bugs.webkit.org/show_bug.cgi?id=53699
+
+ * public/WebURLResponse.h:
+ * src/WebURLResponse.cpp:
+ (WebKit::WebURLResponse::socketAddress):
+ (WebKit::WebURLResponse::setSocketAddress):
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * public/WebFrameClient.h:
+ (WebKit::WebFrameClient::didRunInsecureContent):
+ * src/FrameLoaderClientImpl.cpp:
+ (WebKit::FrameLoaderClientImpl::didRunInsecureContent):
+ * src/FrameLoaderClientImpl.h:
+
+2011-02-03 Victoria Kirst <vrk@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Fix redundant video frame paint on CSS LayerChromium for <video>
+ https://bugs.webkit.org/show_bug.cgi?id=52868
+
+ * src/WebMediaPlayerClientImpl.cpp:
+ (WebKit::WebMediaPlayerClientImpl::paint):
+ (WebKit::WebMediaPlayerClientImpl::paintCurrentFrameInContext):
+ (WebKit::WebMediaPlayerClientImpl::acceleratedRenderingInUse):
+ * src/WebMediaPlayerClientImpl.h:
+
+2011-02-03 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Don't clear the callbacks ref in the proxy layer for IndexedDB
+ https://bugs.webkit.org/show_bug.cgi?id=53535
+
+ Clearing the callbacks doesn't actually solve any problems and makes
+ this code behave subtly differently than how it would in Safari and
+ other single process environments. Let's remove the difference.
+
+ * src/IDBCallbacksProxy.cpp:
+ (WebCore::IDBCallbacksProxy::onError):
+ (WebCore::IDBCallbacksProxy::onSuccess):
+ * src/IDBTransactionCallbacksProxy.cpp:
+ (WebCore::IDBTransactionCallbacksProxy::onAbort):
+ (WebCore::IDBTransactionCallbacksProxy::onComplete):
+ (WebCore::IDBTransactionCallbacksProxy::onTimeout):
+
+2011-02-03 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Chromium: Remove deprecated WebIDBObjectStore::put() function
+ https://bugs.webkit.org/show_bug.cgi?id=53669
+
+ Remove deprecated put() function. Chromium side code now overrides
+ the new version.
+
+ * public/WebIDBObjectStore.h:
+ (WebKit::WebIDBObjectStore::put):
+
+2011-02-01 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: introduce new api for managing JavaScript breakpoints.
+ https://bugs.webkit.org/show_bug.cgi?id=53235
+
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgent::shouldInterruptForMessage):
+
+2011-02-02 Evan Martin <evan@chromium.org>
+
+ Unreviewed, DEPS change.
+
+ * DEPS: update to pick up newer Skia.
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Update more references to right() and bottom() in Chromium.
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::doPixelReadbackToCanvas): Replaced bottom/right with maxY/maxX.
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Update more references to right() and bottom() in Chromium Win.
+
+ * tests/TransparencyWinTest.cpp:
+ (WebCore::TEST): Replaced bottom/right with maxY/maxX.
+
+2011-02-02 Matthew Vosburgh <maf@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Some favicons not correctly decoded by Chromium/Mac
+ https://bugs.webkit.org/show_bug.cgi?id=53448
+
+ * src/WebImageCG.cpp:
+ (WebKit::WebImage::fromData):
+
+2011-02-02 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Dave Hyatt.
+
+ Remove remaining references to right() and bottom() from Chromium build.
+ https://bugs.webkit.org/show_bug.cgi?id=53613
+
+ * src/DragScrollTimer.cpp:
+ (WebKit::distanceToRect): Replaced right/bottom with maxX/maxY.
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::doPixelReadbackToCanvas): Ditto.
+
+2011-02-01 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Avoid #ifdefs in code that constructs a GraphicsContext by
+ adding a helper class.
+ https://bugs.webkit.org/show_bug.cgi?id=53575
+
+ * WebKit.gyp:
+ * src/WebFontImpl.cpp:
+ (WebKit::WebFontImpl::drawText):
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::printPage):
+ (WebKit::WebFrameImpl::paint):
+ * src/WebPopupMenuImpl.cpp:
+ (WebKit::WebPopupMenuImpl::paint):
+ * src/WebScrollbarImpl.cpp:
+ (WebKit::WebScrollbarImpl::paint):
+ * src/painting: Added.
+ * src/painting/GraphicsContextBuilder.h: Added.
+ (WebKit::GraphicsContextBuilder::GraphicsContextBuilder):
+ (WebKit::GraphicsContextBuilder::context):
+
+2011-02-02 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Implement support for cursor updates
+ https://bugs.webkit.org/show_bug.cgi?id=53421
+
+ Mirror the update to the IDBObjectStoreInterface::put() signature in
+ the WebKit layer wrappers.
+
+ * public/WebIDBObjectStore.h:
+ (WebKit::WebIDBObjectStore::put):
+ * src/IDBObjectStoreProxy.cpp:
+ (WebCore::IDBObjectStoreProxy::put):
+ * src/IDBObjectStoreProxy.h:
+ * src/WebIDBObjectStoreImpl.cpp:
+ (WebKit::WebIDBObjectStoreImpl::put):
+ * src/WebIDBObjectStoreImpl.h:
+
+2011-02-02 Chris Evans <cevans@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [Chromium] Propagate the accurate gesture status when calling into FrameLoader
+ https://bugs.webkit.org/show_bug.cgi?id=53571
+
+ * src/WebPluginContainerImpl.cpp:
+ (WebKit::WebPluginContainerImpl::loadFrameRequest): FrameLoader might decide the target is a new window, so make such the UserGestureIndicator is fully accurate before calling into it.
+
+2011-02-01 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Roll Chromium revision for the WebKitWeightWatcher change
+ https://bugs.webkit.org/show_bug.cgi?id=53563
+
+ * DEPS: Roll to crrev.com/73378 to have the WebKitWeightWatcher change of webkit_support.
+
+2011-02-01 Darin Fisher <darin@chromium.org>
+
+ Reviewed by David Levin.
+
+ [chromium] Remove unnecessary WebCore:: prefixing in a few places and fix-up some indentation.
+ https://bugs.webkit.org/show_bug.cgi?id=53523
+
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgentImpl::attach):
+ (WebKit::WebDevToolsAgentImpl::inspectNode):
+ (WebKit::WebDevToolsAgentImpl::inspectorController):
+ (WebKit::WebDevToolsAgentImpl::mainFrame):
+ (WebKit::WebDevToolsAgentImpl::identifierForInitialRequest):
+ (WebKit::WebDevToolsAgentImpl::sendMessageToFrontend):
+ (WebKit::WebDevToolsAgentImpl::updateInspectorStateCookie):
+ (WebKit::WebDevToolsAgent::interruptAndDispatch):
+ (WebKit::WebDevToolsAgent::processPendingMessages):
+ * src/WebPopupMenuImpl.cpp:
+ (WebKit::WebPopupMenuImpl::resize):
+ * src/WebScrollbarImpl.cpp:
+ (WebKit::WebScrollbarImpl::setLocation):
+ (WebKit::WebScrollbarImpl::setValue):
+ (WebKit::WebScrollbarImpl::onMouseWheel):
+ (WebKit::WebScrollbarImpl::onKeyDown):
+ (WebKit::WebScrollbarImpl::scrollPosition):
+ (WebKit::WebScrollbarImpl::setScrollOffset):
+ (WebKit::WebScrollbarImpl::invalidateScrollbarRect):
+ (WebKit::WebScrollbarImpl::getTickmarks):
+
+2011-02-01 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed roll of Chromium deps to r73306. This picks up a fix to get
+ the WebKit root dir correctly after the move to Source/. This allows
+ tests like http/tests/security/frame-loading-via-document-write.html
+ (which use LayoutTestController.pathToLocalResource) to pass with the
+ Chromium DRT.
+
+ * DEPS:
+
+2011-02-01 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [Chromium] Wrongly labelled context-menu item for links in Web Inspector's side-pane
+ https://bugs.webkit.org/show_bug.cgi?id=53482
+
+ * src/js/DevTools.js:
+ (WebInspector.openLinkExternallyLabel): Override to customize a context menu item label
+
+2011-02-01 Darin Fisher <darin@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Fix some Visual Studio compiler warnings.
+ https://bugs.webkit.org/show_bug.cgi?id=53476
+
+ * src/GraphicsContext3DChromium.cpp:
+ (WebCore::GraphicsContext3DInternal::paintRenderingResultsToCanvas):
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::forms):
+ * src/WebMediaPlayerClientImpl.cpp:
+ (WebKit::WebMediaPlayerClientImpl::repaint):
+ * src/WebScrollbarImpl.cpp:
+ (WebKit::WebScrollbarImpl::setValue):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::doPixelReadbackToCanvas):
+ (WebKit::WebViewImpl::setZoomLevel):
+ (WebKit::WebViewImplScrollbarPaintInterface::paint):
+
+2011-02-01 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Chromium: remove WebIDBCallbacks::onSucces()
+ https://bugs.webkit.org/show_bug.cgi?id=53415
+
+ Remove un-used function.
+
+ * public/WebIDBCallbacks.h:
+
+2011-02-01 Yury Semikhatsky <yurys@chromium.org>
+
+ Unreviewed. Fix Chromium Debug compilation broken by r77228.
+
+ [Chromium] Autofill should work with HTML5 form elements
+ https://bugs.webkit.org/show_bug.cgi?id=51809
+
+ * src/WebInputElement.cpp:
+ (WebKit::toWebInputElement):
+
+2011-02-01 Naoki Takano <takano.naoki@gmail.com>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Autofill should work with HTML5 form elements
+ https://bugs.webkit.org/show_bug.cgi?id=51809
+ http://crbug.com/65654
+
+ No new tests, because this fix is for Chromium project and hard to test only in WebKit project.
+
+ * public/WebInputElement.h: Added toWebInputElement() declarations and implemented const version of toWebInputElement().
+ * src/WebInputElement.cpp:
+ (WebKit::WebInputElement::toWebInputElement): Implemented a convert function to cast no-const WebElement* to no-const WebInputElement*. Because Chrome needs safe cast for autofill completion.
+
+2011-01-31 Chris Rogers <crogers@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ Improve audio latency on Mac OS X for chromium port
+ https://bugs.webkit.org/show_bug.cgi?id=53452
+
+ * src/AudioDestinationChromium.cpp:
+
+2011-01-29 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by David Kilzer.
+
+ Move CharacterNames.h into WTF directory
+ https://bugs.webkit.org/show_bug.cgi?id=49618
+
+ * src/ChromeClientImpl.cpp:
+
+2011-01-28 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed; roll WebKit Chromium revision from 72894 to 73048.
+
+ * DEPS:
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * src/AutoFillPopupMenuClient.cpp:
+ (WebKit::AutoFillPopupMenuClient::initialize): Pass hasTextDirectionOverride to the PopupMenuStyle
+ constructor.
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * src/ChromeClientImpl.h:
+ * tests/PopupMenuTest.cpp:
+ (WebKit::TestPopupMenuClient::itemStyle): Pass hasTextDirectionOverride to the PopupMenuStyle
+ constructor.
+
+2011-01-28 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ [Chromium] Remove deprecated openFileSystem method signature
+ https://bugs.webkit.org/show_bug.cgi?id=53262
+
+ Chromium still builds after this patch.
+
+ * public/WebFrameClient.h:
+
+2011-01-28 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ Const-correct HTMLSelectElement and WebSelectElement
+ https://bugs.webkit.org/show_bug.cgi?id=53293
+
+ * public/WebSelectElement.h:
+ * src/WebSelectElement.cpp:
+ (WebKit::WebSelectElement::value): const.
+ (WebKit::WebSelectElement::listItems): const.
+
+2011-01-27 Finnur Thorarinsson <finnur.webkit@gmail.com>
+
+ Reviewed by Ojan Vafai.
+
+ This addresses a regression introduced by r75784, as described in:
+ https://bugs.webkit.org/show_bug.cgi?id=53176
+
+ The problem is that originalEndContainer and originalEndOffset was
+ meant to capture the end of the document, but was being assigned after
+ a call to searchRange->setStart() (when scoping is restarted), which can
+ result in the Range being collapsed to start (thereby assigning the
+ wrong value to the Container/Offset pair).
+
+ This code is never triggered by layout tests, but I'm adding a regressiono
+ test on the Chromium side for this.
+
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::scopeStringMatches):
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Define GC3D types to match GL types and use them in WebGraphicsContext3D
+ https://bugs.webkit.org/show_bug.cgi?id=51947
+
+ * public/WebGraphicsContext3D.h:
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, roll webkit chromium rev from 72673 to 72894.
+ Also, added gmock section in DEPS to pull down gmock.
+
+ * DEPS:
+
+2011-01-27 Alexey Marinichev <amarinichev@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Add a callback to WebGraphicsContext3D that is called when a context is lost
+ https://bugs.webkit.org/show_bug.cgi?id=53153
+
+ * public/WebGraphicsContext3D.h:
+ (WebKit::WebGraphicsContext3D::setContextLostCallback):
+
+2011-01-27 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed, fixed upstream Chromium build
+
+ r76844 should have rolled back Chromium DEPS to 72673, not 72637.
+
+ * DEPS:
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, roll back webkit chromium rev to 72637.
+
+ * DEPS:
+
+2011-01-27 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed.
+
+ Roll Webkit Chromium rev from 72637 to 72868.
+
+ * DEPS:
+
+2011-01-27 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Remove IDBCallbacks::onSuccess() used for null values.
+ https://bugs.webkit.org/show_bug.cgi?id=53178
+
+ Remove the IDBCallbacks::onSuccess() function that was used for
+ null values, and replace such calls with calls to
+ IDBCallBacks::onSuccess(SerializedScriptValue::nullValue())
+ instead.
+
+ * public/WebIDBCallbacks.h:
+ (WebKit::WebIDBCallbacks::onSuccess):
+ * src/IDBCallbacksProxy.cpp:
+ * src/IDBCallbacksProxy.h:
+ * src/WebIDBCallbacksImpl.cpp:
+ * src/WebIDBCallbacksImpl.h:
+
+2011-01-26 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Chromium] WebFrame::forms() should not return empty WebFormElements
+ https://bugs.webkit.org/show_bug.cgi?id=53204
+
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::forms):
+ - Should iterate by forms->length(), not the number of HTMLElements.
+ - Do not increment the index for "temp" if a node is not an HTMLElement.
+
+2011-01-26 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ <rdar://problem/8446709> Allow inter-ideograph justification for CJK
+ https://bugs.webkit.org/show_bug.cgi?id=53184
+
+ * src/WebTextRun.cpp:
+ (WebKit::WebTextRun::operator WebCore::TextRun): Added a TrailingExpansionBehavior parameter to the
+ RenderText constructor.
+
+2011-01-26 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ Fix multisampling support in DrawingBuffer
+ https://bugs.webkit.org/show_bug.cgi?id=53154
+
+ Plumbed GL_ANGLE_framebuffer_multisample and
+ GL_ANGLE_framebuffer_blit (exposed as the unified extension
+ GL_CHROMIUM_framebuffer_multisample) through WebGraphicsContext3D.
+
+ * public/WebGraphicsContext3D.h:
+ * src/Extensions3DChromium.cpp:
+ (WebCore::Extensions3DChromium::blitFramebuffer):
+ (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
+ * src/GraphicsContext3DChromium.cpp:
+ (WebCore::GraphicsContext3DInternal::supportsExtension):
+ (WebCore::GraphicsContext3DInternal::ensureExtensionEnabled):
+ * src/GraphicsContext3DInternal.h:
+
+2011-01-26 Tony Chang <tony@chromium.org>
+
+ Unreviewed.
+
+ [chromium] revert r68310 because of race conditions detected by tsans
+ https://bugs.webkit.org/show_bug.cgi?id=53185
+
+ * DEPS: Roll chromium to 72673 to pick up sqlite revert.
+
+2011-01-26 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Add a DOMTimeStamp parameter to the requestAnimationFrame callback
+ https://bugs.webkit.org/show_bug.cgi?id=53142
+
+ Provides a timestamp to use for imperative animation callbacks. In this patch the timestamp is
+ just the current time at the start of the callback invocation algorithm. In the future we
+ could enhance this to try to take the compositing delay into effect to try to synchronize
+ imperative animations more closely with declarative ones, but this should do for now.
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::animate):
+
+2011-01-25 Kent Tamura <tkent@chromium.org>
+
+ Unreviewed trivial change.
+
+ * DEPS: Roll to r72581 to have a webkit_support fix.
+
+2011-01-25 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: Remove PlatformBridge::idbShutdown()
+ https://bugs.webkit.org/show_bug.cgi?id=53077
+
+ Since Chromium r72157, this is not used anymore. Chromium keeps track
+ of when it shuts down IndexedDB itself.
+
+ * public/WebKitClient.h:
+ * src/PlatformBridge.cpp:
+
+2011-01-25 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Chromium WebKit API: Move dispatchFormControlChangeEvent() from WebInputElement to WebFormControlElement
+ In service of https://code.google.com/p/chromium/issues/detail?id=42716
+ https://bugs.webkit.org/show_bug.cgi?id=53069
+
+ * public/WebFormControlElement.h:
+ * public/WebInputElement.h:
+ * src/WebFormControlElement.cpp:
+ (WebKit::WebFormControlElement::dispatchFormControlChangeEvent): Moved from WebInputElement
+ * src/WebInputElement.cpp:
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * WebKit.gyp:
+ * features.gypi:
+ * src/Extensions3DChromium.cpp:
+ * src/GraphicsContext3DChromium.cpp:
+ * src/WebRuntimeFeatures.cpp:
+ (WebKit::WebRuntimeFeatures::enableWebGL):
+ (WebKit::WebRuntimeFeatures::isWebGLEnabled):
+
+2011-01-25 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [Chromium] Prepare for landing of detailed heap snapshots.
+
+ - Introduce Preferences.detailedHeapProfiles flag for controlling
+ querying of detailed heap snapshots.
+ - Add boilerplate code for the new view.
+ - Factor out common code.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52624
+
+ * src/js/DevTools.js:
+ ():
+
+2011-01-25 Pavel Podivilov <podivilov@chromium.org>
+
+ Unreviewed, trivial debugger test fix.
+
+ * src/js/Tests.js:
+
+2011-01-24 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Darin Adler.
+
+ Remove sizeInBytes from GraphicsContext3D's various implementations
+ https://bugs.webkit.org/show_bug.cgi?id=52339
+
+ * src/GraphicsContext3DChromium.cpp:
+ * src/GraphicsContext3DInternal.h:
+
+2011-01-24 Tony Chang <tony@chromium.org>
+
+ Reviewed by James Robinson.
+
+ [chromium] turn off gyp circular dependency checking and roll chromium deps
+ https://bugs.webkit.org/show_bug.cgi?id=52935
+
+ * DEPS:
+ * gyp_webkit: Turn off gyp circular dependency checking on Linux
+ and Win since we don't do these checks in gyp_chromium. It's
+ just making it harder for us to roll DEPS and have something
+ explode.
+
+2011-01-24 Satish Sampath <satish@chromium.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Remove obsolete public/API method in chromium port
+ https://bugs.webkit.org/show_bug.cgi?id=53015
+
+ * public/WebSpeechInputController.h:
+ (WebKit::WebSpeechInputController::startRecognition): Removed obsolete method
+
+2010-01-24 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Support icon loading for <input type=file>
+ https://bugs.webkit.org/show_bug.cgi?id=38982
+
+ Implement ChromeClientImpl::chooseIconForFiles(). It delegates loading
+ to WebViewClient::queryIconForFiles(), and an implementation of
+ WebViewClient::queryIconForFiles() loads an icon and passes it to a
+ FileChooser through WebIconLoadingCompletion.
+
+ * WebKit.gyp:
+ * public/WebIconLoadingCompletion.h: Added.
+ (WebKit::WebIconLoadingCompletion::~WebIconLoadingCompletion):
+ * public/WebViewClient.h:
+ (WebKit::WebViewClient::queryIconForFiles):
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::chooseIconForFiles):
+ * src/WebIconLoadingCompletionImpl.cpp: Added.
+ (WebKit::WebIconLoadingCompletionImpl::WebIconLoadingCompletionImpl):
+ (WebKit::WebIconLoadingCompletionImpl::~WebIconLoadingCompletionImpl):
+ (WebKit::WebIconLoadingCompletionImpl::didLoadIcon):
+ * src/WebIconLoadingCompletionImpl.h: Added.
+
+2011-01-22 John Abd-El-Malek <jam@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [chromium]: Fix WebScrollbarImpl not getting scroll events after recent scrollbar refactoring
+ https://bugs.webkit.org/show_bug.cgi?id=52967
+
+ * src/WebScrollbarImpl.cpp:
+ (WebKit::WebScrollbarImpl::horizontalScrollbar):
+ (WebKit::WebScrollbarImpl::verticalScrollbar):
+ * src/WebScrollbarImpl.h:
+
+2011-01-21 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ * src/ExternalPopupMenu.cpp: Use FontMetrics instead of Font to access the metrics.
+ (WebKit::ExternalPopupMenu::getPopupMenuInfo):
+ * src/WebFontImpl.cpp: Ditto.
+ (WebKit::WebFontImpl::ascent):
+ (WebKit::WebFontImpl::descent):
+ (WebKit::WebFontImpl::height):
+ (WebKit::WebFontImpl::lineSpacing):
+ (WebKit::WebFontImpl::xHeight):
+
+2011-01-21 Chris Rogers <crogers@google.com>
+
+ Unreviewed
+
+ define HAS_WEBAUDIO_RUNTIMEFEATURES for synchronization with chromium patch landing
+ https://bugs.webkit.org/show_bug.cgi?id=52941
+
+ * public/WebRuntimeFeatures.h:
+
+2011-01-21 Chris Rogers <crogers@google.com>
+
+ Unreviewed
+
+ Add HAS_WEBAUDIO_FEATURE_ENABLE define to synchronize with chromium-side patch
+ https://bugs.webkit.org/show_bug.cgi?id=52939
+
+ * public/WebSettings.h:
+
2011-01-21 Charlie Reis <creis@chromium.org>
Reviewed by Darin Fisher.
diff --git a/Source/WebKit/chromium/DEPS b/Source/WebKit/chromium/DEPS
index 8d08c3f..8ad3c5e 100644
--- a/Source/WebKit/chromium/DEPS
+++ b/Source/WebKit/chromium/DEPS
@@ -32,7 +32,7 @@
vars = {
'chromium_svn': 'http://src.chromium.org/svn/trunk/src',
- 'chromium_rev': '71969'
+ 'chromium_rev': '73764'
}
deps = {
@@ -56,6 +56,8 @@ deps = {
# skia dependencies
'skia':
Var('chromium_svn')+'/skia@'+Var('chromium_rev'),
+ 'third_party/skia/gpu':
+ From('chromium_deps', 'src/third_party/skia/gpu'),
'third_party/skia/src':
From('chromium_deps', 'src/third_party/skia/src'),
'third_party/skia/include':
@@ -66,6 +68,8 @@ deps = {
Var('chromium_svn')+'/testing@'+Var('chromium_rev'),
'testing/gtest':
From('chromium_deps', 'src/testing/gtest'),
+ 'testing/gmock':
+ From('chromium_deps', 'src/testing/gmock'),
# v8 javascript engine
'v8': From('chromium_deps', 'src/v8'),
diff --git a/Source/WebKit/chromium/WebKit.gyp b/Source/WebKit/chromium/WebKit.gyp
index 3a3672c..f2aa107 100644
--- a/Source/WebKit/chromium/WebKit.gyp
+++ b/Source/WebKit/chromium/WebKit.gyp
@@ -188,6 +188,7 @@
'public/WebHistoryItem.h',
'public/WebHTTPBody.h',
'public/WebHTTPLoadInfo.h',
+ 'public/WebIconLoadingCompletion.h',
'public/WebImage.h',
'public/WebImageDecoder.h',
'public/WebIDBCallbacks.h',
@@ -272,6 +273,8 @@
'public/WebString.h',
'public/WebTextAffinity.h',
'public/WebTextCaseSensitivity.h',
+ 'public/WebTextCheckingResult.h',
+ 'public/WebTextCheckingCompletion.h',
'public/WebTextDirection.h',
'public/WebTextInputType.h',
'public/WebTextRun.h',
@@ -383,6 +386,7 @@
'src/MediaPlayerPrivateChromium.cpp',
'src/NotificationPresenterImpl.h',
'src/NotificationPresenterImpl.cpp',
+ 'src/painting/GraphicsContextBuilder.h',
'src/PlatformBridge.cpp',
'src/PlatformMessagePortChannel.cpp',
'src/PlatformMessagePortChannel.h',
@@ -399,6 +403,8 @@
'src/StorageNamespaceProxy.cpp',
'src/StorageNamespaceProxy.h',
'src/TemporaryGlue.h',
+ 'src/WebTextCheckingCompletionImpl.h',
+ 'src/WebTextCheckingCompletionImpl.cpp',
'src/VideoFrameChromiumImpl.cpp',
'src/VideoFrameChromiumImpl.h',
'src/WebAccessibilityCache.cpp',
@@ -463,6 +469,8 @@
'src/WebHistoryItem.cpp',
'src/WebHTTPBody.cpp',
'src/WebHTTPLoadInfo.cpp',
+ 'src/WebIconLoadingCompletionImpl.cpp',
+ 'src/WebIconLoadingCompletionImpl.h',
'src/WebIDBCallbacksImpl.cpp',
'src/WebIDBCallbacksImpl.h',
'src/WebIDBCursorImpl.cpp',
@@ -660,7 +668,7 @@
'chromium_code': 1,
}
}],
- ['"ENABLE_3D_CANVAS=1" in feature_defines', {
+ ['"ENABLE_WEBGL=1" in feature_defines', {
'conditions': [
['OS=="mac"', {
'link_settings': {
@@ -952,8 +960,8 @@
'variables': {
'repack_path': '<(chromium_src_dir)/tools/data_pack/repack.py',
'pak_inputs': [
- '<(SHARED_INTERMEDIATE_DIR)/gfx/gfx_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/net/net_resources.pak',
+ '<(SHARED_INTERMEDIATE_DIR)/ui/gfx/gfx_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.pak',
'<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_en-US.pak',
'<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_resources.pak',
diff --git a/Source/WebKit/chromium/features.gypi b/Source/WebKit/chromium/features.gypi
index 7f4cda6..8944fde 100644
--- a/Source/WebKit/chromium/features.gypi
+++ b/Source/WebKit/chromium/features.gypi
@@ -39,7 +39,7 @@
# chromium build, overrides this list with its own values. See
# features_override.gypi inline documentation for more details.
'feature_defines': [
- 'ENABLE_3D_CANVAS=1',
+ 'ENABLE_WEBGL=1',
'ENABLE_3D_RENDERING=1',
'ENABLE_ACCELERATED_2D_CANVAS=1',
'ENABLE_BLOB=1',
@@ -53,6 +53,7 @@
'ENABLE_DIRECTORY_UPLOAD=1',
'ENABLE_DOM_STORAGE=1',
'ENABLE_EVENTSOURCE=1',
+ 'ENABLE_JAVASCRIPT_I18N_API=1',
'ENABLE_FILE_SYSTEM=1',
'ENABLE_FILTERS=1',
'ENABLE_GEOLOCATION=1',
@@ -69,6 +70,7 @@
'ENABLE_OPENTYPE_SANITIZER=1',
'ENABLE_ORIENTATION_EVENTS=0',
'ENABLE_PROGRESS_TAG=1',
+ 'ENABLE_REGISTER_PROTOCOL_HANDLER=0',
'ENABLE_REQUEST_ANIMATION_FRAME=1',
'ENABLE_SHARED_WORKERS=1',
'ENABLE_SVG=1',
diff --git a/Source/WebKit/chromium/gyp_webkit b/Source/WebKit/chromium/gyp_webkit
index 29e3e7c..768acac 100755
--- a/Source/WebKit/chromium/gyp_webkit
+++ b/Source/WebKit/chromium/gyp_webkit
@@ -76,6 +76,15 @@ if __name__ == '__main__':
# Add includes.
args.extend(['-I' + i for i in additional_include_files(args)])
+ # There shouldn't be a circular dependency relationship between .gyp files,
+ # but in Chromium's .gyp files, on non-Mac platforms, circular relationships
+ # currently exist. The check for circular dependencies is currently
+ # bypassed on other platforms, but is left enabled on the Mac, where a
+ # violation of the rule causes Xcode to misbehave badly.
+ # http://crbug.com/35878.
+ if sys.platform not in ('darwin',):
+ args.append('--no-circular-check')
+
# On linux, we want gyp to output a makefile (default is scons).
if sys.platform == 'linux2':
args.extend(['-fmake',
diff --git a/Source/WebKit/chromium/public/WebAutoFillClient.h b/Source/WebKit/chromium/public/WebAutoFillClient.h
index 4e73be0..63b39a8 100644
--- a/Source/WebKit/chromium/public/WebAutoFillClient.h
+++ b/Source/WebKit/chromium/public/WebAutoFillClient.h
@@ -70,11 +70,6 @@ public:
virtual void removeAutocompleteSuggestion(const WebString& name,
const WebString& value) { }
- // Informs the browser that the user has selected an autocomplete (password
- // or field) suggestion from the drop-down. The input element text has
- // already been set to the selected suggestion.
- virtual void didAcceptAutocompleteSuggestion(const WebInputElement&) { }
-
// These methods are called when the users edits a text-field.
virtual void textFieldDidBeginEditing(const WebInputElement&) { }
virtual void textFieldDidEndEditing(const WebInputElement&) { }
diff --git a/Source/WebKit/chromium/public/WebFormControlElement.h b/Source/WebKit/chromium/public/WebFormControlElement.h
index 56a02dd..e70b995 100644
--- a/Source/WebKit/chromium/public/WebFormControlElement.h
+++ b/Source/WebKit/chromium/public/WebFormControlElement.h
@@ -57,6 +57,8 @@ public:
WEBKIT_API WebString formControlName() const;
WEBKIT_API WebString formControlType() const;
+ WEBKIT_API void dispatchFormControlChangeEvent();
+
// Returns the name that should be used for the specified |element| when
// storing autofill data. This is either the field name or its id, an empty
// string if it has no name and no id.
diff --git a/Source/WebKit/chromium/public/WebFrameClient.h b/Source/WebKit/chromium/public/WebFrameClient.h
index 2e1890a..d1fe751 100644
--- a/Source/WebKit/chromium/public/WebFrameClient.h
+++ b/Source/WebKit/chromium/public/WebFrameClient.h
@@ -41,6 +41,7 @@ namespace WebKit {
class WebApplicationCacheHost;
class WebApplicationCacheHostClient;
+class WebClipboard;
class WebCookieJar;
class WebDataSource;
class WebFormElement;
@@ -88,6 +89,10 @@ public:
// WebKitClient::cookieJar() will be called to access cookies.
virtual WebCookieJar* cookieJar(WebFrame*) { return 0; }
+ // A frame specific clipboard. May return null, in which case the caller
+ // should assume there is no data in the clipboard.
+ virtual WebClipboard* clipboard() { return 0; }
+
// General notifications -----------------------------------------------
@@ -279,7 +284,7 @@ public:
// The indicated security origin has run active content (such as a
// script) from an insecure source. Note that the insecure content can
// spread to other frames in the same origin.
- virtual void didRunInsecureContent(WebFrame*, const WebSecurityOrigin&) { }
+ virtual void didRunInsecureContent(WebFrame*, const WebSecurityOrigin&, const WebURL& insecureURL) { }
// Script notifications ------------------------------------------------
@@ -362,9 +367,6 @@ public:
WebFrame*, WebFileSystem::Type, long long size,
bool create, WebFileSystemCallbacks*) { }
- // FIXME: This method should be deleted once chromium implements the new method above.
- virtual void openFileSystem(WebFrame* frame, WebFileSystem::Type type, long long size, WebFileSystemCallbacks* callbacks) { return openFileSystem(frame, type, size, true, callbacks); }
-
protected:
~WebFrameClient() { }
};
diff --git a/Source/WebKit/chromium/public/WebGraphicsContext3D.h b/Source/WebKit/chromium/public/WebGraphicsContext3D.h
index 6568d1c..984f79d 100644
--- a/Source/WebKit/chromium/public/WebGraphicsContext3D.h
+++ b/Source/WebKit/chromium/public/WebGraphicsContext3D.h
@@ -35,10 +35,30 @@
#include "WebNonCopyable.h"
#include "WebString.h"
+#define USE_WGC3D_TYPES
+
namespace WebKit {
+// WGC3D types match the corresponding GL types as defined in OpenGL ES 2.0
+// header file gl2.h from khronos.org.
+typedef char WGC3Dchar;
+typedef unsigned int WGC3Denum;
+typedef unsigned char WGC3Dboolean;
+typedef unsigned int WGC3Dbitfield;
+typedef signed char WGC3Dbyte;
+typedef unsigned char WGC3Dubyte;
+typedef short WGC3Dshort;
+typedef unsigned short WGC3Dushort;
+typedef int WGC3Dint;
+typedef int WGC3Dsizei;
+typedef unsigned int WGC3Duint;
+typedef float WGC3Dfloat;
+typedef float WGC3Dclampf;
+typedef signed long int WGC3Dintptr;
+typedef signed long int WGC3Dsizeiptr;
+
// Typedef for server-side objects like OpenGL textures and program objects.
-typedef unsigned int WebGLId;
+typedef WGC3Duint WebGLId;
class WebView;
@@ -52,8 +72,8 @@ public:
// Return value from getActiveUniform and getActiveAttrib.
struct ActiveInfo {
WebString name;
- unsigned type;
- int size;
+ WGC3Denum type;
+ WGC3Dint size;
};
// Context creation attributes.
@@ -76,6 +96,12 @@ public:
bool canRecoverFromContextLoss;
};
+ class WebGraphicsContextLostCallback {
+ public:
+ virtual void onContextLost() = 0;
+ virtual ~WebGraphicsContextLostCallback() {}
+ };
+
// This destructor needs to be public so that using classes can destroy instances if initialization fails.
virtual ~WebGraphicsContext3D() {}
@@ -92,10 +118,6 @@ public:
virtual int width() = 0;
virtual int height() = 0;
- // Helper to return the size in bytes of OpenGL data types
- // like GL_FLOAT, GL_INT, etc.
- virtual int sizeInBytes(int type) = 0;
-
// Resizes the region into which this WebGraphicsContext3D is drawing.
virtual void reshape(int width, int height) = 0;
@@ -111,7 +133,7 @@ public:
// Returns the id of the texture which is used for storing the contents of
// the framebuffer associated with this context. This texture is accessible
// by the gpu-based page compositor.
- virtual unsigned getPlatformTextureId() = 0;
+ virtual WebGLId getPlatformTextureId() = 0;
// Copies the contents of the off-screen render target used by the WebGL
// context to the corresponding texture used by the compositor.
@@ -125,205 +147,193 @@ public:
// Per the behavior of glGetError, this stores at most one
// instance of any given error, and returns them from calls to
// getError in the order they were added.
- virtual void synthesizeGLError(unsigned long error) = 0;
+ virtual void synthesizeGLError(WGC3Denum) = 0;
+
+ virtual bool isContextLost() = 0;
// GL_CHROMIUM_map_sub
- virtual void* mapBufferSubDataCHROMIUM(unsigned target, int offset, int size, unsigned access) = 0;
+ virtual void* mapBufferSubDataCHROMIUM(WGC3Denum target, WGC3Dintptr offset, WGC3Dsizeiptr size, WGC3Denum access) = 0;
virtual void unmapBufferSubDataCHROMIUM(const void*) = 0;
- virtual void* mapTexSubImage2DCHROMIUM(unsigned target, int level, int xoffset, int yoffset, int width, int height, unsigned format, unsigned type, unsigned access) = 0;
+ virtual void* mapTexSubImage2DCHROMIUM(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, WGC3Denum access) = 0;
virtual void unmapTexSubImage2DCHROMIUM(const void*) = 0;
// GL_CHROMIUM_copy_texture_to_parent_texture
- virtual void copyTextureToParentTextureCHROMIUM(unsigned texture, unsigned parentTexture) = 0;
+ virtual void copyTextureToParentTextureCHROMIUM(WebGLId texture, WebGLId parentTexture) = 0;
// GL_CHROMIUM_request_extension
virtual WebString getRequestableExtensionsCHROMIUM() = 0;
virtual void requestExtensionCHROMIUM(const char*) = 0;
+ // GL_CHROMIUM_framebuffer_multisample
+ virtual void blitFramebufferCHROMIUM(WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1, WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1, WGC3Dbitfield mask, WGC3Denum filter) = 0;
+ virtual void renderbufferStorageMultisampleCHROMIUM(WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height) = 0;
+
// The entry points below map directly to the OpenGL ES 2.0 API.
// See: http://www.khronos.org/registry/gles/
// and: http://www.khronos.org/opengles/sdk/docs/man/
- virtual void activeTexture(unsigned long texture) = 0;
+ virtual void activeTexture(WGC3Denum texture) = 0;
virtual void attachShader(WebGLId program, WebGLId shader) = 0;
- virtual void bindAttribLocation(WebGLId program, unsigned long index, const char* name) = 0;
- virtual void bindBuffer(unsigned long target, WebGLId buffer) = 0;
- virtual void bindFramebuffer(unsigned long target, WebGLId framebuffer) = 0;
- virtual void bindRenderbuffer(unsigned long target, WebGLId renderbuffer) = 0;
- virtual void bindTexture(unsigned long target, WebGLId texture) = 0;
- virtual void blendColor(double red, double green, double blue, double alpha) = 0;
- virtual void blendEquation(unsigned long mode) = 0;
- virtual void blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha) = 0;
- virtual void blendFunc(unsigned long sfactor, unsigned long dfactor) = 0;
- virtual void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha) = 0;
-
- virtual void bufferData(unsigned long target, int size, const void* data, unsigned long usage) = 0;
- virtual void bufferSubData(unsigned long target, long offset, int size, const void* data) = 0;
-
- virtual unsigned long checkFramebufferStatus(unsigned long target) = 0;
- virtual void clear(unsigned long mask) = 0;
- virtual void clearColor(double red, double green, double blue, double alpha) = 0;
- virtual void clearDepth(double depth) = 0;
- virtual void clearStencil(long s) = 0;
- virtual void colorMask(bool red, bool green, bool blue, bool alpha) = 0;
+ virtual void bindAttribLocation(WebGLId program, WGC3Duint index, const WGC3Dchar* name) = 0;
+ virtual void bindBuffer(WGC3Denum target, WebGLId buffer) = 0;
+ virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer) = 0;
+ virtual void bindRenderbuffer(WGC3Denum target, WebGLId renderbuffer) = 0;
+ virtual void bindTexture(WGC3Denum target, WebGLId texture) = 0;
+ virtual void blendColor(WGC3Dclampf red, WGC3Dclampf green, WGC3Dclampf blue, WGC3Dclampf alpha) = 0;
+ virtual void blendEquation(WGC3Denum mode) = 0;
+ virtual void blendEquationSeparate(WGC3Denum modeRGB, WGC3Denum modeAlpha) = 0;
+ virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor) = 0;
+ virtual void blendFuncSeparate(WGC3Denum srcRGB, WGC3Denum dstRGB, WGC3Denum srcAlpha, WGC3Denum dstAlpha) = 0;
+
+ virtual void bufferData(WGC3Denum target, WGC3Dsizeiptr size, const void* data, WGC3Denum usage) = 0;
+ virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset, WGC3Dsizeiptr size, const void* data) = 0;
+
+ virtual WGC3Denum checkFramebufferStatus(WGC3Denum target) = 0;
+ virtual void clear(WGC3Dbitfield mask) = 0;
+ virtual void clearColor(WGC3Dclampf red, WGC3Dclampf green, WGC3Dclampf blue, WGC3Dclampf alpha) = 0;
+ virtual void clearDepth(WGC3Dclampf depth) = 0;
+ virtual void clearStencil(WGC3Dint s) = 0;
+ virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green, WGC3Dboolean blue, WGC3Dboolean alpha) = 0;
virtual void compileShader(WebGLId shader) = 0;
- virtual void copyTexImage2D(unsigned long target, long level, unsigned long internalformat, long x, long y, unsigned long width, unsigned long height, long border) = 0;
- virtual void copyTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, long x, long y, unsigned long width, unsigned long height) = 0;
- virtual void cullFace(unsigned long mode) = 0;
- virtual void depthFunc(unsigned long func) = 0;
- virtual void depthMask(bool flag) = 0;
- virtual void depthRange(double zNear, double zFar) = 0;
+ virtual void copyTexImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internalformat, WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border) = 0;
+ virtual void copyTexSubImage2D(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height) = 0;
+ virtual void cullFace(WGC3Denum mode) = 0;
+ virtual void depthFunc(WGC3Denum func) = 0;
+ virtual void depthMask(WGC3Dboolean flag) = 0;
+ virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar) = 0;
virtual void detachShader(WebGLId program, WebGLId shader) = 0;
- virtual void disable(unsigned long cap) = 0;
- virtual void disableVertexAttribArray(unsigned long index) = 0;
- virtual void drawArrays(unsigned long mode, long first, long count) = 0;
- virtual void drawElements(unsigned long mode, unsigned long count, unsigned long type, long offset) = 0;
+ virtual void disable(WGC3Denum cap) = 0;
+ virtual void disableVertexAttribArray(WGC3Duint index) = 0;
+ virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count) = 0;
+ virtual void drawElements(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset) = 0;
- virtual void enable(unsigned long cap) = 0;
- virtual void enableVertexAttribArray(unsigned long index) = 0;
+ virtual void enable(WGC3Denum cap) = 0;
+ virtual void enableVertexAttribArray(WGC3Duint index) = 0;
virtual void finish() = 0;
virtual void flush() = 0;
- virtual void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, WebGLId renderbuffer) = 0;
- virtual void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, WebGLId texture, long level) = 0;
- virtual void frontFace(unsigned long mode) = 0;
- virtual void generateMipmap(unsigned long target) = 0;
-
- virtual bool getActiveAttrib(WebGLId program, unsigned long index, ActiveInfo&) = 0;
- virtual bool getActiveUniform(WebGLId program, unsigned long index, ActiveInfo&) = 0;
-
- virtual void getAttachedShaders(WebGLId program, int maxCount, int* count, unsigned int* shaders) = 0;
-
- virtual int getAttribLocation(WebGLId program, const char* name) = 0;
-
- virtual void getBooleanv(unsigned long pname, unsigned char* value) = 0;
-
- virtual void getBufferParameteriv(unsigned long target, unsigned long pname, int* value) = 0;
-
+ virtual void framebufferRenderbuffer(WGC3Denum target, WGC3Denum attachment, WGC3Denum renderbuffertarget, WebGLId renderbuffer) = 0;
+ virtual void framebufferTexture2D(WGC3Denum target, WGC3Denum attachment, WGC3Denum textarget, WebGLId texture, WGC3Dint level) = 0;
+ virtual void frontFace(WGC3Denum mode) = 0;
+ virtual void generateMipmap(WGC3Denum target) = 0;
+
+ virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&) = 0;
+ virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&) = 0;
+ virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Dsizei* count, WebGLId* shaders) = 0;
+ virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) = 0;
+ virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) = 0;
+ virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) = 0;
virtual Attributes getContextAttributes() = 0;
-
- virtual unsigned long getError() = 0;
-
- virtual bool isContextLost() = 0;
-
- virtual void getFloatv(unsigned long pname, float* value) = 0;
-
- virtual void getFramebufferAttachmentParameteriv(unsigned long target, unsigned long attachment, unsigned long pname, int* value) = 0;
-
- virtual void getIntegerv(unsigned long pname, int* value) = 0;
-
- virtual void getProgramiv(WebGLId program, unsigned long pname, int* value) = 0;
-
+ virtual WGC3Denum getError() = 0;
+ virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value) = 0;
+ virtual void getFramebufferAttachmentParameteriv(WGC3Denum target, WGC3Denum attachment, WGC3Denum pname, WGC3Dint* value) = 0;
+ virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) = 0;
+ virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value) = 0;
virtual WebString getProgramInfoLog(WebGLId program) = 0;
-
- virtual void getRenderbufferParameteriv(unsigned long target, unsigned long pname, int* value) = 0;
-
- virtual void getShaderiv(WebGLId shader, unsigned long pname, int* value) = 0;
-
+ virtual void getRenderbufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) = 0;
+ virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value) = 0;
virtual WebString getShaderInfoLog(WebGLId shader) = 0;
// TBD
// void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
virtual WebString getShaderSource(WebGLId shader) = 0;
- virtual WebString getString(unsigned long name) = 0;
-
- virtual void getTexParameterfv(unsigned long target, unsigned long pname, float* value) = 0;
- virtual void getTexParameteriv(unsigned long target, unsigned long pname, int* value) = 0;
-
- virtual void getUniformfv(WebGLId program, long location, float* value) = 0;
- virtual void getUniformiv(WebGLId program, long location, int* value) = 0;
-
- virtual long getUniformLocation(WebGLId program, const char* name) = 0;
-
- virtual void getVertexAttribfv(unsigned long index, unsigned long pname, float* value) = 0;
- virtual void getVertexAttribiv(unsigned long index, unsigned long pname, int* value) = 0;
-
- virtual long getVertexAttribOffset(unsigned long index, unsigned long pname) = 0;
-
- virtual void hint(unsigned long target, unsigned long mode) = 0;
- virtual bool isBuffer(WebGLId buffer) = 0;
- virtual bool isEnabled(unsigned long cap) = 0;
- virtual bool isFramebuffer(WebGLId framebuffer) = 0;
- virtual bool isProgram(WebGLId program) = 0;
- virtual bool isRenderbuffer(WebGLId renderbuffer) = 0;
- virtual bool isShader(WebGLId shader) = 0;
- virtual bool isTexture(WebGLId texture) = 0;
- virtual void lineWidth(double) = 0;
+ virtual WebString getString(WGC3Denum name) = 0;
+ virtual void getTexParameterfv(WGC3Denum target, WGC3Denum pname, WGC3Dfloat* value) = 0;
+ virtual void getTexParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) = 0;
+ virtual void getUniformfv(WebGLId program, WGC3Dint location, WGC3Dfloat* value) = 0;
+ virtual void getUniformiv(WebGLId program, WGC3Dint location, WGC3Dint* value) = 0;
+ virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name) = 0;
+ virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname, WGC3Dfloat* value) = 0;
+ virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname, WGC3Dint* value) = 0;
+ virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname) = 0;
+
+ virtual void hint(WGC3Denum target, WGC3Denum mode) = 0;
+ virtual WGC3Dboolean isBuffer(WebGLId buffer) = 0;
+ virtual WGC3Dboolean isEnabled(WGC3Denum cap) = 0;
+ virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer) = 0;
+ virtual WGC3Dboolean isProgram(WebGLId program) = 0;
+ virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer) = 0;
+ virtual WGC3Dboolean isShader(WebGLId shader) = 0;
+ virtual WGC3Dboolean isTexture(WebGLId texture) = 0;
+ virtual void lineWidth(WGC3Dfloat) = 0;
virtual void linkProgram(WebGLId program) = 0;
- virtual void pixelStorei(unsigned long pname, long param) = 0;
- virtual void polygonOffset(double factor, double units) = 0;
+ virtual void pixelStorei(WGC3Denum pname, WGC3Dint param) = 0;
+ virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units) = 0;
- virtual void readPixels(long x, long y, unsigned long width, unsigned long height, unsigned long format, unsigned long type, void* pixels) = 0;
+ virtual void readPixels(WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, void* pixels) = 0;
virtual void releaseShaderCompiler() = 0;
- virtual void renderbufferStorage(unsigned long target, unsigned long internalformat, unsigned long width, unsigned long height) = 0;
- virtual void sampleCoverage(double value, bool invert) = 0;
- virtual void scissor(long x, long y, unsigned long width, unsigned long height) = 0;
- virtual void shaderSource(WebGLId shader, const char* string) = 0;
- virtual void stencilFunc(unsigned long func, long ref, unsigned long mask) = 0;
- virtual void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask) = 0;
- virtual void stencilMask(unsigned long mask) = 0;
- virtual void stencilMaskSeparate(unsigned long face, unsigned long mask) = 0;
- virtual void stencilOp(unsigned long fail, unsigned long zfail, unsigned long zpass) = 0;
- virtual void stencilOpSeparate(unsigned long face, unsigned long fail, unsigned long zfail, unsigned long zpass) = 0;
-
- virtual void texImage2D(unsigned target, unsigned level, unsigned internalformat, unsigned width, unsigned height, unsigned border, unsigned format, unsigned type, const void* pixels) = 0;
-
- virtual void texParameterf(unsigned target, unsigned pname, float param) = 0;
- virtual void texParameteri(unsigned target, unsigned pname, int param) = 0;
-
- virtual void texSubImage2D(unsigned target, unsigned level, unsigned xoffset, unsigned yoffset, unsigned width, unsigned height, unsigned format, unsigned type, const void* pixels) = 0;
-
- virtual void uniform1f(long location, float x) = 0;
- virtual void uniform1fv(long location, int count, float* v) = 0;
- virtual void uniform1i(long location, int x) = 0;
- virtual void uniform1iv(long location, int count, int* v) = 0;
- virtual void uniform2f(long location, float x, float y) = 0;
- virtual void uniform2fv(long location, int count, float* v) = 0;
- virtual void uniform2i(long location, int x, int y) = 0;
- virtual void uniform2iv(long location, int count, int* v) = 0;
- virtual void uniform3f(long location, float x, float y, float z) = 0;
- virtual void uniform3fv(long location, int count, float* v) = 0;
- virtual void uniform3i(long location, int x, int y, int z) = 0;
- virtual void uniform3iv(long location, int count, int* v) = 0;
- virtual void uniform4f(long location, float x, float y, float z, float w) = 0;
- virtual void uniform4fv(long location, int count, float* v) = 0;
- virtual void uniform4i(long location, int x, int y, int z, int w) = 0;
- virtual void uniform4iv(long location, int count, int* v) = 0;
- virtual void uniformMatrix2fv(long location, int count, bool transpose, const float* value) = 0;
- virtual void uniformMatrix3fv(long location, int count, bool transpose, const float* value) = 0;
- virtual void uniformMatrix4fv(long location, int count, bool transpose, const float* value) = 0;
+
+ virtual void renderbufferStorage(WGC3Denum target, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height) = 0;
+ virtual void sampleCoverage(WGC3Dclampf value, WGC3Dboolean invert) = 0;
+ virtual void scissor(WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height) = 0;
+ virtual void shaderSource(WebGLId shader, const WGC3Dchar* string) = 0;
+ virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask) = 0;
+ virtual void stencilFuncSeparate(WGC3Denum face, WGC3Denum func, WGC3Dint ref, WGC3Duint mask) = 0;
+ virtual void stencilMask(WGC3Duint mask) = 0;
+ virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask) = 0;
+ virtual void stencilOp(WGC3Denum fail, WGC3Denum zfail, WGC3Denum zpass) = 0;
+ virtual void stencilOpSeparate(WGC3Denum face, WGC3Denum fail, WGC3Denum zfail, WGC3Denum zpass) = 0;
+
+ virtual void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denum type, const void* pixels) = 0;
+
+ virtual void texParameterf(WGC3Denum target, WGC3Denum pname, WGC3Dfloat param) = 0;
+ virtual void texParameteri(WGC3Denum target, WGC3Denum pname, WGC3Dint param) = 0;
+
+ virtual void texSubImage2D(WGC3Denum target, WGC3Dint level, WGC3Dint xoffset, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3Denum type, const void* pixels) = 0;
+
+ virtual void uniform1f(WGC3Dint location, WGC3Dfloat x) = 0;
+ virtual void uniform1fv(WGC3Dint location, WGC3Dsizei count, const WGC3Dfloat* v) = 0;
+ virtual void uniform1i(WGC3Dint location, WGC3Dint x) = 0;
+ virtual void uniform1iv(WGC3Dint location, WGC3Dsizei count, const WGC3Dint* v) = 0;
+ virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y) = 0;
+ virtual void uniform2fv(WGC3Dint location, WGC3Dsizei count, const WGC3Dfloat* v) = 0;
+ virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y) = 0;
+ virtual void uniform2iv(WGC3Dint location, WGC3Dsizei count, const WGC3Dint* v) = 0;
+ virtual void uniform3f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z) = 0;
+ virtual void uniform3fv(WGC3Dint location, WGC3Dsizei count, const WGC3Dfloat* v) = 0;
+ virtual void uniform3i(WGC3Dint location, WGC3Dint x, WGC3Dint y, WGC3Dint z) = 0;
+ virtual void uniform3iv(WGC3Dint location, WGC3Dsizei count, const WGC3Dint* v) = 0;
+ virtual void uniform4f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z, WGC3Dfloat w) = 0;
+ virtual void uniform4fv(WGC3Dint location, WGC3Dsizei count, const WGC3Dfloat* v) = 0;
+ virtual void uniform4i(WGC3Dint location, WGC3Dint x, WGC3Dint y, WGC3Dint z, WGC3Dint w) = 0;
+ virtual void uniform4iv(WGC3Dint location, WGC3Dsizei count, const WGC3Dint* v) = 0;
+ virtual void uniformMatrix2fv(WGC3Dint location, WGC3Dsizei count, WGC3Dboolean transpose, const WGC3Dfloat* value) = 0;
+ virtual void uniformMatrix3fv(WGC3Dint location, WGC3Dsizei count, WGC3Dboolean transpose, const WGC3Dfloat* value) = 0;
+ virtual void uniformMatrix4fv(WGC3Dint location, WGC3Dsizei count, WGC3Dboolean transpose, const WGC3Dfloat* value) = 0;
virtual void useProgram(WebGLId program) = 0;
virtual void validateProgram(WebGLId program) = 0;
- virtual void vertexAttrib1f(unsigned long indx, float x) = 0;
- virtual void vertexAttrib1fv(unsigned long indx, const float* values) = 0;
- virtual void vertexAttrib2f(unsigned long indx, float x, float y) = 0;
- virtual void vertexAttrib2fv(unsigned long indx, const float* values) = 0;
- virtual void vertexAttrib3f(unsigned long indx, float x, float y, float z) = 0;
- virtual void vertexAttrib3fv(unsigned long indx, const float* values) = 0;
- virtual void vertexAttrib4f(unsigned long indx, float x, float y, float z, float w) = 0;
- virtual void vertexAttrib4fv(unsigned long indx, const float* values) = 0;
- virtual void vertexAttribPointer(unsigned long indx, int size, int type, bool normalized,
- unsigned long stride, unsigned long offset) = 0;
+ virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x) = 0;
+ virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values) = 0;
+ virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y) = 0;
+ virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values) = 0;
+ virtual void vertexAttrib3f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z) = 0;
+ virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values) = 0;
+ virtual void vertexAttrib4f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z, WGC3Dfloat w) = 0;
+ virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values) = 0;
+ virtual void vertexAttribPointer(WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized,
+ WGC3Dsizei stride, WGC3Dintptr offset) = 0;
- virtual void viewport(long x, long y, unsigned long width, unsigned long height) = 0;
+ virtual void viewport(WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height) = 0;
// Support for buffer creation and deletion.
- virtual unsigned createBuffer() = 0;
- virtual unsigned createFramebuffer() = 0;
- virtual unsigned createProgram() = 0;
- virtual unsigned createRenderbuffer() = 0;
- virtual unsigned createShader(unsigned long) = 0;
- virtual unsigned createTexture() = 0;
-
- virtual void deleteBuffer(unsigned) = 0;
- virtual void deleteFramebuffer(unsigned) = 0;
- virtual void deleteProgram(unsigned) = 0;
- virtual void deleteRenderbuffer(unsigned) = 0;
- virtual void deleteShader(unsigned) = 0;
- virtual void deleteTexture(unsigned) = 0;
+ virtual WebGLId createBuffer() = 0;
+ virtual WebGLId createFramebuffer() = 0;
+ virtual WebGLId createProgram() = 0;
+ virtual WebGLId createRenderbuffer() = 0;
+ virtual WebGLId createShader(WGC3Denum) = 0;
+ virtual WebGLId createTexture() = 0;
+
+ virtual void deleteBuffer(WebGLId) = 0;
+ virtual void deleteFramebuffer(WebGLId) = 0;
+ virtual void deleteProgram(WebGLId) = 0;
+ virtual void deleteRenderbuffer(WebGLId) = 0;
+ virtual void deleteShader(WebGLId) = 0;
+ virtual void deleteTexture(WebGLId) = 0;
+
+ virtual void setContextLostCallback(WebGraphicsContextLostCallback* callback) {}
};
} // namespace WebKit
diff --git a/Source/WebKit/chromium/public/WebIDBCallbacks.h b/Source/WebKit/chromium/public/WebIDBCallbacks.h
index 64ffc08..1eb6d3a 100644
--- a/Source/WebKit/chromium/public/WebIDBCallbacks.h
+++ b/Source/WebKit/chromium/public/WebIDBCallbacks.h
@@ -46,7 +46,6 @@ public:
// For classes that follow the PImpl pattern, pass a const reference.
// For the rest, pass ownership to the callee via a pointer.
virtual void onError(const WebIDBDatabaseError&) { WEBKIT_ASSERT_NOT_REACHED(); }
- virtual void onSuccess() { WEBKIT_ASSERT_NOT_REACHED(); } // For "null".
virtual void onSuccess(WebIDBCursor*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(WebIDBDatabase*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(const WebIDBKey&) { WEBKIT_ASSERT_NOT_REACHED(); }
@@ -54,6 +53,7 @@ public:
virtual void onSuccess(WebIDBObjectStore*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(WebIDBTransaction*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(const WebSerializedScriptValue&) { WEBKIT_ASSERT_NOT_REACHED(); }
+ virtual void onBlocked() { WEBKIT_ASSERT_NOT_REACHED(); }
};
} // namespace WebKit
diff --git a/Source/WebKit/chromium/public/WebIDBDatabase.h b/Source/WebKit/chromium/public/WebIDBDatabase.h
index 5ed8052..df4217b 100644
--- a/Source/WebKit/chromium/public/WebIDBDatabase.h
+++ b/Source/WebKit/chromium/public/WebIDBDatabase.h
@@ -65,10 +65,14 @@ public:
virtual void deleteObjectStore(const WebString& name, const WebIDBTransaction& transaction, WebExceptionCode& ec) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void setVersion(const WebString& version, WebIDBCallbacks* callbacks, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
// Transfers ownership of the WebIDBTransaction to the caller.
- virtual WebIDBTransaction* transaction(const WebDOMStringList& names, unsigned short mode, unsigned long timeout, WebExceptionCode&)
+ virtual WebIDBTransaction* transaction(const WebDOMStringList& names, unsigned short mode, WebExceptionCode& ec)
{
- WEBKIT_ASSERT_NOT_REACHED();
- return 0;
+ return transaction(names, mode, 0, ec);
+ }
+ // FIXME: Remove.
+ virtual WebIDBTransaction* transaction(const WebDOMStringList& names, unsigned short mode, unsigned long, WebExceptionCode& ec)
+ {
+ return transaction(names, mode, ec);
}
virtual void close() { WEBKIT_ASSERT_NOT_REACHED(); }
diff --git a/Source/WebKit/chromium/public/WebIDBObjectStore.h b/Source/WebKit/chromium/public/WebIDBObjectStore.h
index 8f2247f..152dfc9 100755
--- a/Source/WebKit/chromium/public/WebIDBObjectStore.h
+++ b/Source/WebKit/chromium/public/WebIDBObjectStore.h
@@ -60,8 +60,16 @@ public:
}
virtual void get(const WebIDBKey&, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
- virtual void put(const WebSerializedScriptValue&, const WebIDBKey&, bool addOnly, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
- virtual void deleteFunction(const WebIDBKey& key, WebIDBCallbacks* callbacks, const WebIDBTransaction& transaction, WebExceptionCode& ec) { WEBKIT_ASSERT_NOT_REACHED(); }
+
+ enum PutMode {
+ AddOrUpdate,
+ AddOnly,
+ CursorUpdate
+ };
+
+ virtual void put(const WebSerializedScriptValue&, const WebIDBKey&, PutMode, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
+ virtual void deleteFunction(const WebIDBKey&, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
+ virtual void clear(WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual WebIDBIndex* createIndex(const WebString& name, const WebString& keyPath, bool unique, const WebIDBTransaction&, WebExceptionCode&)
{
WEBKIT_ASSERT_NOT_REACHED();
diff --git a/Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h b/Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h
index c9b6b05..93099f1 100644
--- a/Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h
+++ b/Source/WebKit/chromium/public/WebIDBTransactionCallbacks.h
@@ -35,6 +35,8 @@ public:
virtual void onAbort() { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onComplete() { WEBKIT_ASSERT_NOT_REACHED(); }
+
+ // FIXME: Remove.
virtual void onTimeout() { WEBKIT_ASSERT_NOT_REACHED(); }
};
diff --git a/Source/WebKit/chromium/public/WebIconLoadingCompletion.h b/Source/WebKit/chromium/public/WebIconLoadingCompletion.h
new file mode 100644
index 0000000..b6229aa
--- /dev/null
+++ b/Source/WebKit/chromium/public/WebIconLoadingCompletion.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebIconLoadingCompletion_h
+#define WebIconLoadingCompletion_h
+
+namespace WebKit {
+
+class WebData;
+class WebString;
+
+// Gets called back when WebViewClient finished loading an icon.
+class WebIconLoadingCompletion {
+public:
+ // Called with the loaded icon data, which is an image data stream
+ // WebCore can decode, such as PNG. A null WebData means a failure of
+ // loading. The callback instance is destroyed when this method is called.
+ virtual void didLoadIcon(const WebData&) = 0;
+
+protected:
+ virtual ~WebIconLoadingCompletion() { }
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/Source/WebKit/chromium/public/WebInputElement.h b/Source/WebKit/chromium/public/WebInputElement.h
index be8623c..81c397c 100644
--- a/Source/WebKit/chromium/public/WebInputElement.h
+++ b/Source/WebKit/chromium/public/WebInputElement.h
@@ -74,14 +74,13 @@ namespace WebKit {
WEBKIT_API WebString placeholder() const;
WEBKIT_API bool isAutofilled() const;
WEBKIT_API void setAutofilled(bool);
- WEBKIT_API void dispatchFormControlChangeEvent();
WEBKIT_API void setSelectionRange(int, int);
WEBKIT_API int selectionStart() const;
WEBKIT_API int selectionEnd() const;
WEBKIT_API bool isValidValue(const WebString&) const;
// Exposes the default value of the maxLength attribute.
- WEBKIT_API static const int defaultMaxLength;
+ WEBKIT_API static int defaultMaxLength();
#if WEBKIT_IMPLEMENTATION
WebInputElement(const WTF::PassRefPtr<WebCore::HTMLInputElement>&);
@@ -90,6 +89,13 @@ namespace WebKit {
#endif
};
+ WEBKIT_API WebInputElement* toWebInputElement(WebElement*);
+
+ inline const WebInputElement* toWebInputElement(const WebElement* element)
+ {
+ return toWebInputElement(const_cast<WebElement*>(element));
+ }
+
} // namespace WebKit
#endif
diff --git a/Source/WebKit/chromium/public/WebKitClient.h b/Source/WebKit/chromium/public/WebKitClient.h
index ae7892d..d8ead23 100644
--- a/Source/WebKit/chromium/public/WebKitClient.h
+++ b/Source/WebKit/chromium/public/WebKitClient.h
@@ -143,7 +143,6 @@ public:
// Indexed Database ----------------------------------------------------
virtual WebIDBFactory* idbFactory() { return 0; }
- virtual void idbShutdown() { };
virtual void createIDBKeysFromSerializedValuesAndKeyPath(const WebVector<WebSerializedScriptValue>& values, const WebString& keyPath, WebVector<WebIDBKey>& keys) { }
diff --git a/Source/WebKit/chromium/public/WebMenuItemInfo.h b/Source/WebKit/chromium/public/WebMenuItemInfo.h
index 445dfb4..f6e622a 100644
--- a/Source/WebKit/chromium/public/WebMenuItemInfo.h
+++ b/Source/WebKit/chromium/public/WebMenuItemInfo.h
@@ -33,6 +33,7 @@
#include "WebCommon.h"
#include "WebString.h"
+#include "WebTextDirection.h"
#include "WebVector.h"
namespace WebKit {
@@ -56,6 +57,8 @@ struct WebMenuItemInfo {
WebString label;
Type type;
unsigned action;
+ WebTextDirection textDirection;
+ bool hasTextDirectionOverride;
bool enabled;
bool checked;
};
diff --git a/Source/WebKit/chromium/public/WebNotification.h b/Source/WebKit/chromium/public/WebNotification.h
index dbbde02..a84a058 100644
--- a/Source/WebKit/chromium/public/WebNotification.h
+++ b/Source/WebKit/chromium/public/WebNotification.h
@@ -75,10 +75,6 @@ public:
WEBKIT_API WebURL iconURL() const;
WEBKIT_API WebString title() const;
WEBKIT_API WebString body() const;
-
- // FIXME: Remove dir() when no longer referenced.
- // dir() is deprecated; use direction().
- WEBKIT_API WebString dir() const;
WEBKIT_API WebTextDirection direction() const;
WEBKIT_API WebString replaceId() const;
diff --git a/Source/WebKit/chromium/public/WebPoint.h b/Source/WebKit/chromium/public/WebPoint.h
index 20c52c2..7662363 100644
--- a/Source/WebKit/chromium/public/WebPoint.h
+++ b/Source/WebKit/chromium/public/WebPoint.h
@@ -36,7 +36,7 @@
#if WEBKIT_IMPLEMENTATION
#include "IntPoint.h"
#else
-#include <gfx/point.h>
+#include <ui/gfx/point.h>
#endif
namespace WebKit {
diff --git a/Source/WebKit/chromium/public/WebPopupMenuInfo.h b/Source/WebKit/chromium/public/WebPopupMenuInfo.h
index 7cf1b63..8824846 100644
--- a/Source/WebKit/chromium/public/WebPopupMenuInfo.h
+++ b/Source/WebKit/chromium/public/WebPopupMenuInfo.h
@@ -38,8 +38,6 @@ namespace WebKit {
// Describes the contents of a popup menu.
struct WebPopupMenuInfo {
- // FIXME: migrate clients to WebMenuItemInfo and remove this temporary Item typedef.
- typedef WebMenuItemInfo Item;
int itemHeight;
int itemFontSize;
int selectedIndex;
diff --git a/Source/WebKit/chromium/public/WebRect.h b/Source/WebKit/chromium/public/WebRect.h
index 30381d7..045b7a8 100644
--- a/Source/WebKit/chromium/public/WebRect.h
+++ b/Source/WebKit/chromium/public/WebRect.h
@@ -36,7 +36,7 @@
#if WEBKIT_IMPLEMENTATION
#include "IntRect.h"
#else
-#include <gfx/rect.h>
+#include <ui/gfx/rect.h>
#endif
namespace WebKit {
diff --git a/Source/WebKit/chromium/public/WebRuntimeFeatures.h b/Source/WebKit/chromium/public/WebRuntimeFeatures.h
index 097e95b..c9e32f5 100644
--- a/Source/WebKit/chromium/public/WebRuntimeFeatures.h
+++ b/Source/WebKit/chromium/public/WebRuntimeFeatures.h
@@ -31,6 +31,8 @@
#ifndef WebRuntimeFeatures_h
#define WebRuntimeFeatures_h
+#define HAS_WEBAUDIO_RUNTIMEFEATURES 1
+
#include "WebCommon.h"
namespace WebKit {
@@ -94,6 +96,9 @@ public:
WEBKIT_API static void enableFileSystem(bool);
WEBKIT_API static bool isFileSystemEnabled();
+
+ WEBKIT_API static void enableJavaScriptI18NAPI(bool);
+ WEBKIT_API static bool isJavaScriptI18NAPIEnabled();
private:
WebRuntimeFeatures();
diff --git a/Source/WebKit/chromium/public/WebSelectElement.h b/Source/WebKit/chromium/public/WebSelectElement.h
index 97d3a78..5cea39a 100644
--- a/Source/WebKit/chromium/public/WebSelectElement.h
+++ b/Source/WebKit/chromium/public/WebSelectElement.h
@@ -55,8 +55,8 @@ public:
void assign(const WebSelectElement& element) { WebFormControlElement::assign(element); }
WEBKIT_API void setValue(const WebString&);
- WEBKIT_API WebString value();
- WEBKIT_API WebVector<WebElement> listItems();
+ WEBKIT_API WebString value() const;
+ WEBKIT_API WebVector<WebElement> listItems() const;
#if WEBKIT_IMPLEMENTATION
WebSelectElement(const WTF::PassRefPtr<WebCore::HTMLSelectElement>&);
diff --git a/Source/WebKit/chromium/public/WebSettings.h b/Source/WebKit/chromium/public/WebSettings.h
index bfb5122..bea9cee 100644
--- a/Source/WebKit/chromium/public/WebSettings.h
+++ b/Source/WebKit/chromium/public/WebSettings.h
@@ -33,6 +33,8 @@
#include "WebCommon.h"
+#define HAS_WEBAUDIO_FEATURE_ENABLE 1
+
namespace WebKit {
class WebString;
@@ -91,6 +93,7 @@ public:
virtual void setOfflineWebApplicationCacheEnabled(bool) = 0;
virtual void setWebAudioEnabled(bool) = 0;
virtual void setExperimentalWebGLEnabled(bool) = 0;
+ virtual void setOpenGLMultisamplingEnabled(bool) = 0;
virtual void setShowDebugBorders(bool) = 0;
virtual void setEditingBehavior(EditingBehavior) = 0;
virtual void setAcceleratedCompositingEnabled(bool) = 0;
@@ -102,6 +105,7 @@ public:
virtual void setAccelerated2dCanvasEnabled(bool) = 0;
virtual void setMemoryInfoEnabled(bool) = 0;
virtual void setHyperlinkAuditingEnabled(bool) = 0;
+ virtual void setAsynchronousSpellCheckingEnabled(bool) = 0;
virtual void setCaretBrowsingEnabled(bool) = 0;
virtual void setInteractiveFormValidationEnabled(bool) = 0;
diff --git a/Source/WebKit/chromium/public/WebSize.h b/Source/WebKit/chromium/public/WebSize.h
index a7159b2..94a5365 100644
--- a/Source/WebKit/chromium/public/WebSize.h
+++ b/Source/WebKit/chromium/public/WebSize.h
@@ -36,7 +36,7 @@
#if WEBKIT_IMPLEMENTATION
#include "IntSize.h"
#else
-#include <gfx/size.h>
+#include <ui/gfx/size.h>
#endif
namespace WebKit {
diff --git a/Source/WebKit/chromium/public/WebSpeechInputController.h b/Source/WebKit/chromium/public/WebSpeechInputController.h
index eb83ec7..577c5e2 100644
--- a/Source/WebKit/chromium/public/WebSpeechInputController.h
+++ b/Source/WebKit/chromium/public/WebSpeechInputController.h
@@ -47,11 +47,6 @@ public:
// text are returned via the listener interface.
virtual bool startRecognition(int requestId, const WebRect& elementRect, const WebString& language, const WebString& grammar, const WebSecurityOrigin& origin)
{
- return startRecognition(requestId, elementRect, language, grammar);
- }
- // TODO(satish): Remove this once chromium has rolled past the above change.
- virtual bool startRecognition(int requestId, const WebRect& elementRect, const WebString& language, const WebString& grammar)
- {
WEBKIT_ASSERT_NOT_REACHED();
return false;
}
diff --git a/Source/WebKit/chromium/public/WebTextCheckingCompletion.h b/Source/WebKit/chromium/public/WebTextCheckingCompletion.h
new file mode 100644
index 0000000..7e6526d
--- /dev/null
+++ b/Source/WebKit/chromium/public/WebTextCheckingCompletion.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebTextCheckingCompletion_h
+#define WebTextCheckingCompletion_h
+
+#include "WebCommon.h"
+
+namespace WebKit {
+
+class WebTextCheckingResult;
+template <typename T> class WebVector;
+
+// Gets called back when WebViewClient finished an asynchronous spell checking.
+class WebTextCheckingCompletion {
+public:
+ virtual void didFinishCheckingText(const WebVector<WebTextCheckingResult>&) = 0;
+protected:
+ ~WebTextCheckingCompletion() { }
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/Source/WebKit/chromium/public/WebTextCheckingResult.h b/Source/WebKit/chromium/public/WebTextCheckingResult.h
new file mode 100644
index 0000000..4d16d31
--- /dev/null
+++ b/Source/WebKit/chromium/public/WebTextCheckingResult.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebTextCheckingResult_h
+#define WebTextCheckingResult_h
+
+#include "WebCommon.h"
+
+namespace WebKit {
+
+// A checked entry of text checking.
+class WebTextCheckingResult {
+public:
+ enum Error {
+ ErrorSpelling = 1 << 0,
+ ErrorGrammar = 1 << 1
+ };
+
+ Error error() const { return m_error; }
+ int position() const { return m_position; }
+ int length() const { return m_length; }
+
+ explicit WebTextCheckingResult(Error error = ErrorSpelling, int position = 0, int length = 0)
+ : m_error(error)
+ , m_position(position)
+ , m_length(length)
+ {
+ }
+
+private:
+ Error m_error;
+ int m_position;
+ int m_length;
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/Source/WebKit/chromium/public/WebURLResponse.h b/Source/WebKit/chromium/public/WebURLResponse.h
index c50f88e..4ecee17 100644
--- a/Source/WebKit/chromium/public/WebURLResponse.h
+++ b/Source/WebKit/chromium/public/WebURLResponse.h
@@ -169,6 +169,11 @@ public:
WEBKIT_API WebString downloadFilePath() const;
WEBKIT_API void setDownloadFilePath(const WebString&);
+ // Remote address of the socket which fetched this resource, for presenting
+ // to inquisitive users. Can be "ipv4:port", "[ipv6]:port", or empty.
+ WEBKIT_API WebString socketAddress() const;
+ WEBKIT_API void setSocketAddress(const WebString&);
+
protected:
void assign(WebURLResponsePrivate*);
diff --git a/Source/WebKit/chromium/public/WebViewClient.h b/Source/WebKit/chromium/public/WebViewClient.h
index 08fb942..2588788 100644
--- a/Source/WebKit/chromium/public/WebViewClient.h
+++ b/Source/WebKit/chromium/public/WebViewClient.h
@@ -54,6 +54,7 @@ class WebFileChooserCompletion;
class WebFrame;
class WebGeolocationClient;
class WebGeolocationService;
+class WebIconLoadingCompletion;
class WebImage;
class WebInputElement;
class WebKeyboardEvent;
@@ -63,6 +64,7 @@ class WebRange;
class WebSpeechInputController;
class WebSpeechInputListener;
class WebStorageNamespace;
+class WebTextCheckingCompletion;
class WebURL;
class WebURLRequest;
class WebView;
@@ -117,6 +119,10 @@ public:
// Called to retrieve the provider of desktop notifications.
virtual WebNotificationPresenter* notificationPresenter() { return 0; }
+ // Called to request an icon for the specified filenames.
+ // The icon is shown in a file upload control.
+ virtual bool queryIconForFiles(const WebVector<WebString>& filenames, WebIconLoadingCompletion*) { return false; }
+
// Navigational --------------------------------------------------------
@@ -173,7 +179,9 @@ public:
// error, then upon return misspelledLength is 0.
virtual void spellCheck(
const WebString& text, int& misspelledOffset, int& misspelledLength) { }
-
+ // Requests asynchronous spelling and grammar checking, whose result should be
+ // returned by passed completion object.
+ virtual void requestCheckingOfText(const WebString&, WebTextCheckingCompletion*) { }
// Computes an auto-corrected replacement for a misspelled word. If no
// replacement is found, then an empty string is returned.
virtual WebString autoCorrectWord(const WebString& misspelledWord) { return WebString(); }
@@ -322,6 +330,12 @@ public:
// action that wasn't initiated by the client.
virtual void zoomLevelChanged() { }
+ // Registers a new URL handler for the given protocol.
+ virtual void registerProtocolHandler(const WebString& scheme,
+ const WebString& baseUrl,
+ const WebString& url,
+ const WebString& title) { }
+
protected:
~WebViewClient() { }
};
diff --git a/Source/WebKit/chromium/src/AssertMatchingEnums.cpp b/Source/WebKit/chromium/src/AssertMatchingEnums.cpp
index e89fb74..aaaa4a5 100644
--- a/Source/WebKit/chromium/src/AssertMatchingEnums.cpp
+++ b/Source/WebKit/chromium/src/AssertMatchingEnums.cpp
@@ -36,6 +36,7 @@
#include "AccessibilityObject.h"
#include "ApplicationCacheHost.h"
#include "AsyncFileSystem.h"
+#include "DocumentMarker.h"
#include "EditorInsertAction.h"
#include "FileError.h"
#include "FileMetadata.h"
@@ -74,6 +75,7 @@
#include "WebSettings.h"
#include "WebTextAffinity.h"
#include "WebTextCaseSensitivity.h"
+#include "WebTextCheckingResult.h"
#include "WebVideoFrame.h"
#include "WebView.h"
#include <wtf/Assertions.h>
@@ -397,6 +399,9 @@ COMPILE_ASSERT_MATCHING_ENUM(WebFileErrorPathExists, FileError::PATH_EXISTS_ERR)
COMPILE_ASSERT_MATCHING_ENUM(WebGeolocationError::ErrorPermissionDenied, GeolocationError::PermissionDenied);
COMPILE_ASSERT_MATCHING_ENUM(WebGeolocationError::ErrorPositionUnavailable, GeolocationError::PositionUnavailable);
+COMPILE_ASSERT_MATCHING_ENUM(WebTextCheckingResult::ErrorSpelling, DocumentMarker::Spelling);
+COMPILE_ASSERT_MATCHING_ENUM(WebTextCheckingResult::ErrorGrammar, DocumentMarker::Grammar);
+
#if OS(DARWIN)
COMPILE_ASSERT_MATCHING_ENUM(WebThemeEngine::StateDisabled, PlatformBridge::StateDisabled);
COMPILE_ASSERT_MATCHING_ENUM(WebThemeEngine::StateInactive, PlatformBridge::StateInactive);
diff --git a/Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp b/Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp
index 5975e72..ef1f616 100644
--- a/Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp
+++ b/Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp
@@ -50,8 +50,8 @@ bool AsyncFileSystem::isAvailable()
return true;
}
-AsyncFileSystemChromium::AsyncFileSystemChromium(const String& rootPath)
- : AsyncFileSystem(rootPath)
+AsyncFileSystemChromium::AsyncFileSystemChromium(AsyncFileSystem::Type type, const String& rootPath)
+ : AsyncFileSystem(type, rootPath)
, m_webFileSystem(WebKit::webKitClient()->fileSystem())
{
ASSERT(m_webFileSystem);
diff --git a/Source/WebKit/chromium/src/AsyncFileSystemChromium.h b/Source/WebKit/chromium/src/AsyncFileSystemChromium.h
index 6205609..da98a33 100644
--- a/Source/WebKit/chromium/src/AsyncFileSystemChromium.h
+++ b/Source/WebKit/chromium/src/AsyncFileSystemChromium.h
@@ -46,9 +46,9 @@ class AsyncFileSystemCallbacks;
class AsyncFileSystemChromium : public AsyncFileSystem {
public:
- static PassOwnPtr<AsyncFileSystem> create(const String& rootPath)
+ static PassOwnPtr<AsyncFileSystem> create(AsyncFileSystem::Type type, const String& rootPath)
{
- return adoptPtr(new AsyncFileSystemChromium(rootPath));
+ return adoptPtr(new AsyncFileSystemChromium(type, rootPath));
}
virtual ~AsyncFileSystemChromium();
@@ -66,7 +66,7 @@ public:
virtual void createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks>);
private:
- explicit AsyncFileSystemChromium(const String& rootPath);
+ AsyncFileSystemChromium(AsyncFileSystem::Type, const String& rootPath);
WebKit::WebFileSystem* m_webFileSystem;
};
diff --git a/Source/WebKit/chromium/src/AudioDestinationChromium.cpp b/Source/WebKit/chromium/src/AudioDestinationChromium.cpp
index bed2562..a483308 100644
--- a/Source/WebKit/chromium/src/AudioDestinationChromium.cpp
+++ b/Source/WebKit/chromium/src/AudioDestinationChromium.cpp
@@ -41,10 +41,15 @@ using namespace WebKit;
namespace WebCore {
// Buffer size that the Chromium audio system will call us back with.
+#if OS(DARWIN)
+// For Mac OS X the chromium audio backend uses a low-latency CoreAudio API, so a low buffer size is possible.
+const unsigned callbackBufferSize = 128;
+#else
// This value may need to be tuned based on the OS.
// FIXME: It may be possible to reduce this value once real-time threads
// and other Chromium audio improvements are made.
const unsigned callbackBufferSize = 2048;
+#endif
// Buffer size at which the web audio engine will render.
const unsigned renderBufferSize = 128;
diff --git a/Source/WebKit/chromium/src/AutoFillPopupMenuClient.cpp b/Source/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
index 2ce31a9..d04c57c 100644
--- a/Source/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
+++ b/Source/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
@@ -293,7 +293,7 @@ void AutoFillPopupMenuClient::initialize(
// the input element: textField.
m_regularStyle.set(new PopupMenuStyle(Color::black, Color::white, regularFont,
true, false, Length(WebCore::Fixed),
- textField->renderer()->style()->direction()));
+ textField->renderer()->style()->direction(), textField->renderer()->style()->unicodeBidi() == Override));
FontDescription warningFontDescription = regularFont.fontDescription();
warningFontDescription.setItalic(true);
@@ -305,7 +305,8 @@ void AutoFillPopupMenuClient::initialize(
m_regularStyle->isVisible(),
m_regularStyle->isDisplayNone(),
m_regularStyle->textIndent(),
- m_regularStyle->textDirection()));
+ m_regularStyle->textDirection(),
+ m_regularStyle->hasTextDirectionOverride()));
}
void AutoFillPopupMenuClient::setSuggestions(const WebVector<WebString>& names,
diff --git a/Source/WebKit/chromium/src/ChromeClientImpl.cpp b/Source/WebKit/chromium/src/ChromeClientImpl.cpp
index a63a625..4b68c18 100644
--- a/Source/WebKit/chromium/src/ChromeClientImpl.cpp
+++ b/Source/WebKit/chromium/src/ChromeClientImpl.cpp
@@ -34,7 +34,6 @@
#include "AXObjectCache.h"
#include "AccessibilityObject.h"
-#include "CharacterNames.h"
#include "Console.h"
#include "Cursor.h"
#include "DatabaseTracker.h"
@@ -70,6 +69,7 @@
#include "WebFileChooserCompletionImpl.h"
#include "WebFrameClient.h"
#include "WebFrameImpl.h"
+#include "WebIconLoadingCompletionImpl.h"
#include "WebInputEvent.h"
#include "WebKit.h"
#include "WebNode.h"
@@ -86,6 +86,7 @@
#include "WebWindowFeatures.h"
#include "WindowFeatures.h"
#include "WrappedResourceRequest.h"
+#include <wtf/unicode/CharacterNames.h>
using namespace WebCore;
@@ -501,6 +502,13 @@ IntRect ChromeClientImpl::windowResizerRect() const
return result;
}
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+void ChromeClientImpl::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title)
+{
+ notImplemented();
+}
+#endif
+
void ChromeClientImpl::invalidateWindow(const IntRect&, bool)
{
notImplemented();
@@ -669,9 +677,13 @@ void ChromeClientImpl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> fileCh
chooserCompletion->didChooseFile(WebVector<WebString>());
}
-void ChromeClientImpl::chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*)
+void ChromeClientImpl::chooseIconForFiles(const Vector<String>& filenames, FileChooser* fileChooser)
{
- notImplemented();
+ if (!m_webView->client())
+ return;
+ WebIconLoadingCompletionImpl* iconCompletion = new WebIconLoadingCompletionImpl(fileChooser);
+ if (!m_webView->client()->queryIconForFiles(filenames, iconCompletion))
+ iconCompletion->didLoadIcon(WebData());
}
void ChromeClientImpl::popupOpened(PopupContainer* popupContainer,
@@ -732,24 +744,29 @@ void ChromeClientImpl::getPopupMenuInfo(PopupContainer* popupContainer,
{
const Vector<PopupItem*>& inputItems = popupContainer->popupData();
- WebVector<WebPopupMenuInfo::Item> outputItems(inputItems.size());
+ WebVector<WebMenuItemInfo> outputItems(inputItems.size());
for (size_t i = 0; i < inputItems.size(); ++i) {
const PopupItem& inputItem = *inputItems[i];
- WebPopupMenuInfo::Item& outputItem = outputItems[i];
+ WebMenuItemInfo& outputItem = outputItems[i];
outputItem.label = inputItem.label;
outputItem.enabled = inputItem.enabled;
+ if (inputItem.textDirection == WebCore::RTL)
+ outputItem.textDirection = WebTextDirectionRightToLeft;
+ else
+ outputItem.textDirection = WebTextDirectionLeftToRight;
+ outputItem.hasTextDirectionOverride = inputItem.hasTextDirectionOverride;
switch (inputItem.type) {
case PopupItem::TypeOption:
- outputItem.type = WebPopupMenuInfo::Item::Option;
+ outputItem.type = WebMenuItemInfo::Option;
break;
case PopupItem::TypeGroup:
- outputItem.type = WebPopupMenuInfo::Item::Group;
+ outputItem.type = WebMenuItemInfo::Group;
break;
case PopupItem::TypeSeparator:
- outputItem.type = WebPopupMenuInfo::Item::Separator;
+ outputItem.type = WebMenuItemInfo::Separator;
break;
default:
ASSERT_NOT_REACHED();
@@ -848,6 +865,11 @@ bool ChromeClientImpl::selectItemWritingDirectionIsNatural()
return false;
}
+bool ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return true;
+}
+
PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(PopupMenuClient* client) const
{
if (WebViewImpl::useExternalPopupMenus())
diff --git a/Source/WebKit/chromium/src/ChromeClientImpl.h b/Source/WebKit/chromium/src/ChromeClientImpl.h
index 07f7d1f..d3ccb75 100644
--- a/Source/WebKit/chromium/src/ChromeClientImpl.h
+++ b/Source/WebKit/chromium/src/ChromeClientImpl.h
@@ -39,7 +39,6 @@
namespace WebCore {
class AccessibilityObject;
class FileChooser;
-class HTMLParserQuirks;
class PopupContainer;
class PopupMenuClient;
class SecurityOrigin;
@@ -102,6 +101,9 @@ public:
virtual bool shouldInterruptJavaScript();
virtual bool tabsToLinks() const;
virtual WebCore::IntRect windowResizerRect() const;
+#if ENABLE(REGISTER_PROTOCOL_HANDLER)
+ virtual void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title);
+#endif
virtual void invalidateWindow(const WebCore::IntRect&, bool);
virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
@@ -137,7 +139,6 @@ public:
virtual void chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*);
virtual void setCursor(const WebCore::Cursor&);
virtual void formStateDidChange(const WebCore::Node*);
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
#if ENABLE(TOUCH_EVENTS)
// FIXME: All touch events are forwarded regardless of whether or not they are needed.
virtual void needTouchEvents(bool needTouchEvents) { }
@@ -173,6 +174,7 @@ public:
void setCursorForPlugin(const WebCursorInfo&);
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
diff --git a/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp b/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp
index d166d9d..49de043 100644
--- a/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp
+++ b/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp
@@ -236,7 +236,7 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems(
// If it's not a link, an image, a media element, or an image/media link,
// show a selection menu or a more generic page menu.
- data.frameEncoding = selectedFrame->loader()->writer()->encoding();
+ data.frameEncoding = selectedFrame->document()->loader()->writer()->encoding();
// Send the frame and page URLs in any case.
data.pageURL = urlFromFrame(m_webView->mainFrameImpl()->frame());
diff --git a/Source/WebKit/chromium/src/DragClientImpl.cpp b/Source/WebKit/chromium/src/DragClientImpl.cpp
index 9874401..4c896a7 100644
--- a/Source/WebKit/chromium/src/DragClientImpl.cpp
+++ b/Source/WebKit/chromium/src/DragClientImpl.cpp
@@ -96,12 +96,6 @@ void DragClientImpl::startDrag(DragImageRef dragImage,
offsetPoint);
}
-DragImageRef DragClientImpl::createDragImageForLink(KURL&, const String& label, Frame*)
-{
- // FIXME
- return 0;
-}
-
void DragClientImpl::dragControllerDestroyed()
{
// Our lifetime is bound to the WebViewImpl.
diff --git a/Source/WebKit/chromium/src/DragClientImpl.h b/Source/WebKit/chromium/src/DragClientImpl.h
index dac7acd..b48206a 100644
--- a/Source/WebKit/chromium/src/DragClientImpl.h
+++ b/Source/WebKit/chromium/src/DragClientImpl.h
@@ -62,8 +62,6 @@ public:
WebCore::Clipboard* clipboard,
WebCore::Frame* frame,
bool isLinkDrag = false);
- virtual WebCore::DragImageRef createDragImageForLink(
- WebCore::KURL&, const WTF::String& label, WebCore::Frame*);
virtual void dragControllerDestroyed();
private:
diff --git a/Source/WebKit/chromium/src/DragScrollTimer.cpp b/Source/WebKit/chromium/src/DragScrollTimer.cpp
index 83b81b7..c994cd7 100644
--- a/Source/WebKit/chromium/src/DragScrollTimer.cpp
+++ b/Source/WebKit/chromium/src/DragScrollTimer.cpp
@@ -43,12 +43,12 @@ static IntSize distanceToRect(const IntPoint& point, const IntRect& rect)
int dx = 0, dy = 0;
if (point.x() < rect.x())
dx = point.x() - rect.x();
- else if (rect.right() < point.x())
- dx = point.x() - rect.right();
+ else if (rect.maxX() < point.x())
+ dx = point.x() - rect.maxX();
if (point.y() < rect.y())
dy = point.y() - rect.y();
- else if (rect.bottom() < point.y())
- dy = point.y() - rect.bottom();
+ else if (rect.maxY() < point.y())
+ dy = point.y() - rect.maxY();
return IntSize(dx, dy);
}
diff --git a/Source/WebKit/chromium/src/EditorClientImpl.cpp b/Source/WebKit/chromium/src/EditorClientImpl.cpp
index 68694c2..3dc3a6a 100644
--- a/Source/WebKit/chromium/src/EditorClientImpl.cpp
+++ b/Source/WebKit/chromium/src/EditorClientImpl.cpp
@@ -40,6 +40,7 @@
#include "PlatformKeyboardEvent.h"
#include "PlatformString.h"
#include "RenderObject.h"
+#include "SpellChecker.h"
#include "DOMUtilitiesPrivate.h"
#include "WebAutoFillClient.h"
@@ -54,6 +55,7 @@
#include "WebPasswordAutocompleteListener.h"
#include "WebRange.h"
#include "WebTextAffinity.h"
+#include "WebTextCheckingCompletionImpl.h"
#include "WebViewClient.h"
#include "WebViewImpl.h"
@@ -800,18 +802,6 @@ void EditorClientImpl::cancelPendingAutofill()
m_autofillTimer.stop();
}
-void EditorClientImpl::onAutocompleteSuggestionAccepted(HTMLInputElement* textField)
-{
- if (m_webView->autoFillClient())
- m_webView->autoFillClient()->didAcceptAutocompleteSuggestion(WebInputElement(textField));
-
- WebFrameImpl* webframe = WebFrameImpl::fromFrame(textField->document()->frame());
- if (!webframe)
- return;
-
- webframe->notifiyPasswordListenerOfAutocomplete(WebInputElement(textField));
-}
-
bool EditorClientImpl::doTextFieldCommandFromEvent(Element* element,
KeyboardEvent* event)
{
@@ -876,6 +866,11 @@ void EditorClientImpl::checkSpellingOfString(const UChar* text, int length,
*misspellingLength = spellLength;
}
+void EditorClientImpl::requestCheckingOfString(SpellChecker* sender, int identifier, const String& text)
+{
+ m_webView->client()->requestCheckingOfText(text, new WebTextCheckingCompletionImpl(identifier, sender));
+}
+
String EditorClientImpl::getAutoCorrectSuggestionForMisspelledWord(const String& misspelledWord)
{
if (!(isContinuousSpellCheckingEnabled() && m_webView->client()))
diff --git a/Source/WebKit/chromium/src/EditorClientImpl.h b/Source/WebKit/chromium/src/EditorClientImpl.h
index 9dbd6af..8c40f3c 100644
--- a/Source/WebKit/chromium/src/EditorClientImpl.h
+++ b/Source/WebKit/chromium/src/EditorClientImpl.h
@@ -37,6 +37,7 @@
namespace WebCore {
class HTMLInputElement;
+class SpellChecker;
}
namespace WebKit {
@@ -111,7 +112,7 @@ public:
WTF::Vector<WTF::String>& guesses);
virtual void willSetInputMethodState();
virtual void setInputMethodState(bool enabled);
- virtual void requestCheckingOfString(WebCore::SpellChecker*, int, const WTF::String&) {}
+ virtual void requestCheckingOfString(WebCore::SpellChecker*, int, const WTF::String&);
// Shows the form autofill popup for |node| if it is an HTMLInputElement and
// it is empty. This is called when you press the up or down arrow in a
@@ -120,12 +121,6 @@ public:
// otherwise.
virtual bool showFormAutofillForNode(WebCore::Node*);
- // Notification that the text changed due to acceptance of a suggestion
- // provided by an Autocomplete popup. Having a separate callback in this
- // case is a simple way to break the cycle that would otherwise occur if
- // textDidChangeInTextField was called.
- virtual void onAutocompleteSuggestionAccepted(WebCore::HTMLInputElement*);
-
private:
void modifySelection(WebCore::Frame*, WebCore::KeyboardEvent*);
diff --git a/Source/WebKit/chromium/src/Extensions3DChromium.cpp b/Source/WebKit/chromium/src/Extensions3DChromium.cpp
index ca2215e..52c2e12 100644
--- a/Source/WebKit/chromium/src/Extensions3DChromium.cpp
+++ b/Source/WebKit/chromium/src/Extensions3DChromium.cpp
@@ -25,7 +25,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "Extensions3DChromium.h"
@@ -62,6 +62,16 @@ int Extensions3DChromium::getGraphicsResetStatusARB()
return m_internal->isContextLost() ? static_cast<int>(Extensions3D::UNKNOWN_CONTEXT_RESET_ARB) : static_cast<int>(GraphicsContext3D::NO_ERROR);
}
+void Extensions3DChromium::blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter)
+{
+ m_internal->blitFramebufferCHROMIUM(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+}
+
+void Extensions3DChromium::renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height)
+{
+ m_internal->renderbufferStorageMultisampleCHROMIUM(target, samples, internalformat, width, height);
+}
+
void* Extensions3DChromium::mapBufferSubDataCHROMIUM(unsigned target, int offset, int size, unsigned access)
{
return m_internal->mapBufferSubDataCHROMIUM(target, offset, size, access);
@@ -89,4 +99,4 @@ void Extensions3DChromium::copyTextureToParentTextureCHROMIUM(unsigned texture,
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebKit/chromium/src/ExternalPopupMenu.cpp b/Source/WebKit/chromium/src/ExternalPopupMenu.cpp
index f7f9862..5808003 100644
--- a/Source/WebKit/chromium/src/ExternalPopupMenu.cpp
+++ b/Source/WebKit/chromium/src/ExternalPopupMenu.cpp
@@ -128,10 +128,10 @@ void ExternalPopupMenu::didCancel()
void ExternalPopupMenu::getPopupMenuInfo(WebPopupMenuInfo* info)
{
int itemCount = m_popupMenuClient->listSize();
- WebVector<WebPopupMenuInfo::Item> items(
+ WebVector<WebMenuItemInfo> items(
static_cast<size_t>(itemCount));
for (int i = 0; i < itemCount; ++i) {
- WebPopupMenuInfo::Item& popupItem = items[i];
+ WebMenuItemInfo& popupItem = items[i];
popupItem.label = m_popupMenuClient->itemText(i);
if (m_popupMenuClient->itemIsSeparator(i))
popupItem.type = WebMenuItemInfo::Separator;
@@ -140,9 +140,15 @@ void ExternalPopupMenu::getPopupMenuInfo(WebPopupMenuInfo* info)
else
popupItem.type = WebMenuItemInfo::Option;
popupItem.enabled = m_popupMenuClient->itemIsEnabled(i);
+ PopupMenuStyle style = m_popupMenuClient->itemStyle(i);
+ if (style.textDirection() == WebCore::RTL)
+ popupItem.textDirection = WebTextDirectionRightToLeft;
+ else
+ popupItem.textDirection = WebTextDirectionLeftToRight;
+ popupItem.hasTextDirectionOverride = style.hasTextDirectionOverride();
}
- info->itemHeight = m_popupMenuClient->menuStyle().font().height();
+ info->itemHeight = m_popupMenuClient->menuStyle().font().fontMetrics().height();
info->itemFontSize =
static_cast<int>(m_popupMenuClient->menuStyle().font().size());
info->selectedIndex = m_popupMenuClient->selectedIndex();
diff --git a/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp b/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp
index b767450..34c53cf 100644
--- a/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp
+++ b/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp
@@ -1099,7 +1099,7 @@ void FrameLoaderClientImpl::finishedLoading(DocumentLoader* dl)
// However, we only want to do this if makeRepresentation has been called, to
// match the behavior on the Mac.
if (m_hasRepresentation)
- dl->frameLoader()->writer()->setEncoding("", false);
+ dl->writer()->setEncoding("", false);
}
}
@@ -1153,10 +1153,10 @@ void FrameLoaderClientImpl::didDisplayInsecureContent()
m_webFrame->client()->didDisplayInsecureContent(m_webFrame);
}
-void FrameLoaderClientImpl::didRunInsecureContent(SecurityOrigin* origin)
+void FrameLoaderClientImpl::didRunInsecureContent(SecurityOrigin* origin, const KURL& insecureURL)
{
if (m_webFrame->client())
- m_webFrame->client()->didRunInsecureContent(m_webFrame, WebSecurityOrigin(origin));
+ m_webFrame->client()->didRunInsecureContent(m_webFrame, WebSecurityOrigin(origin), insecureURL);
}
ResourceError FrameLoaderClientImpl::blockedError(const ResourceRequest&)
diff --git a/Source/WebKit/chromium/src/FrameLoaderClientImpl.h b/Source/WebKit/chromium/src/FrameLoaderClientImpl.h
index 1d7a741..925b759 100644
--- a/Source/WebKit/chromium/src/FrameLoaderClientImpl.h
+++ b/Source/WebKit/chromium/src/FrameLoaderClientImpl.h
@@ -142,7 +142,7 @@ public:
virtual void dispatchDidRemoveBackForwardItem(WebCore::HistoryItem*) const;
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL& insecureURL);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
diff --git a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp b/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
index 8148ff6..0751785 100644
--- a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
+++ b/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
@@ -30,7 +30,7 @@
#include "config.h"
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
#include "GraphicsContext3D.h"
@@ -205,7 +205,7 @@ void GraphicsContext3DInternal::paintRenderingResultsToCanvas(CanvasRenderingCon
// We need to draw the resizing bitmap into the canvas's backing store.
SkCanvas canvas(*canvasBitmap);
SkRect dst;
- dst.set(SkIntToScalar(0), SkIntToScalar(0), canvasBitmap->width(), canvasBitmap->height());
+ dst.set(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(canvasBitmap->width()), SkIntToScalar(canvasBitmap->height()));
canvas.drawBitmapRect(m_resizingBitmap, 0, dst);
}
#elif PLATFORM(CG)
@@ -364,8 +364,13 @@ rt GraphicsContext3DInternal::name(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7
return m_impl->name(a1, a2, a3, a4, a5, a6, a7, a8, a9); \
}
+#define DELEGATE_TO_IMPL_10(name, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) \
+void GraphicsContext3DInternal::name(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7, t8 a8, t9 a9, t10 a10) \
+{ \
+ m_impl->name(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); \
+}
+
DELEGATE_TO_IMPL_R(makeContextCurrent, bool)
-DELEGATE_TO_IMPL_1R(sizeInBytes, GC3Denum, unsigned int)
bool GraphicsContext3DInternal::isGLES2Compliant() const
{
@@ -692,6 +697,14 @@ void splitStringHelper(const String& str, HashSet<String>& set)
set.add(substrings[i]);
}
+String mapExtensionName(const String& name)
+{
+ if (name == "GL_ANGLE_framebuffer_blit"
+ || name == "GL_ANGLE_framebuffer_multisample")
+ return "GL_CHROMIUM_framebuffer_multisample";
+ return name;
+}
+
} // anonymous namespace
void GraphicsContext3DInternal::initializeExtensions()
@@ -711,25 +724,27 @@ void GraphicsContext3DInternal::initializeExtensions()
bool GraphicsContext3DInternal::supportsExtension(const String& name)
{
initializeExtensions();
- return m_enabledExtensions.contains(name) || m_requestableExtensions.contains(name);
+ String mappedName = mapExtensionName(name);
+ return m_enabledExtensions.contains(mappedName) || m_requestableExtensions.contains(mappedName);
}
bool GraphicsContext3DInternal::ensureExtensionEnabled(const String& name)
{
initializeExtensions();
- if (m_enabledExtensions.contains(name))
+ String mappedName = mapExtensionName(name);
+ if (m_enabledExtensions.contains(mappedName))
return true;
- if (m_requestableExtensions.contains(name)) {
- m_impl->requestExtensionCHROMIUM(name.ascii().data());
+ if (m_requestableExtensions.contains(mappedName)) {
+ m_impl->requestExtensionCHROMIUM(mappedName.ascii().data());
m_enabledExtensions.clear();
m_requestableExtensions.clear();
m_initializedAvailableExtensions = false;
}
initializeExtensions();
- return m_enabledExtensions.contains(name);
+ return m_enabledExtensions.contains(mappedName);
}
DELEGATE_TO_IMPL_4R(mapBufferSubDataCHROMIUM, GC3Denum, GC3Dsizeiptr, GC3Dsizei, GC3Denum, void*)
@@ -737,6 +752,8 @@ DELEGATE_TO_IMPL_1(unmapBufferSubDataCHROMIUM, const void*)
DELEGATE_TO_IMPL_9R(mapTexSubImage2DCHROMIUM, GC3Denum, GC3Dint, GC3Dint, GC3Dint, GC3Dsizei, GC3Dsizei, GC3Denum, GC3Denum, GC3Denum, void*)
DELEGATE_TO_IMPL_1(unmapTexSubImage2DCHROMIUM, const void*)
DELEGATE_TO_IMPL_2(copyTextureToParentTextureCHROMIUM, Platform3DObject, Platform3DObject)
+DELEGATE_TO_IMPL_10(blitFramebufferCHROMIUM, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dint, GC3Dbitfield, GC3Denum)
+DELEGATE_TO_IMPL_5(renderbufferStorageMultisampleCHROMIUM, GC3Denum, GC3Dsizei, GC3Denum, GC3Dsizei, GC3Dsizei)
//----------------------------------------------------------------------
// GraphicsContext3D
@@ -897,7 +914,6 @@ PlatformLayer* GraphicsContext3D::platformLayer() const
#endif
DELEGATE_TO_INTERNAL(makeContextCurrent)
-DELEGATE_TO_INTERNAL_1R(sizeInBytes, GC3Denum, unsigned int)
DELEGATE_TO_INTERNAL_2(reshape, int, int)
DELEGATE_TO_INTERNAL_R(getInternalFramebufferSize, IntSize)
@@ -1066,6 +1082,35 @@ DELEGATE_TO_INTERNAL_1(deleteTexture, Platform3DObject)
DELEGATE_TO_INTERNAL_1(synthesizeGLError, GC3Denum)
DELEGATE_TO_INTERNAL_R(getExtensions, Extensions3D*)
+DELEGATE_TO_INTERNAL_1(setContextLostCallback, PassOwnPtr<GraphicsContext3D::ContextLostCallback>)
+
+class GraphicsContextLostCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback {
+public:
+ virtual void onContextLost();
+ static PassOwnPtr<GraphicsContextLostCallbackAdapter> create(PassOwnPtr<GraphicsContext3D::ContextLostCallback>);
+ virtual ~GraphicsContextLostCallbackAdapter() {}
+private:
+ GraphicsContextLostCallbackAdapter(PassOwnPtr<GraphicsContext3D::ContextLostCallback> cb) : m_contextLostCallback(cb) {}
+ OwnPtr<GraphicsContext3D::ContextLostCallback> m_contextLostCallback;
+};
+
+void GraphicsContextLostCallbackAdapter::onContextLost()
+{
+ if (m_contextLostCallback)
+ m_contextLostCallback->onContextLost();
+}
+
+PassOwnPtr<GraphicsContextLostCallbackAdapter> GraphicsContextLostCallbackAdapter::create(PassOwnPtr<GraphicsContext3D::ContextLostCallback> cb)
+{
+ return adoptPtr(new GraphicsContextLostCallbackAdapter(cb));
+}
+
+void GraphicsContext3DInternal::setContextLostCallback(PassOwnPtr<GraphicsContext3D::ContextLostCallback> cb)
+{
+ m_contextLostCallbackAdapter = GraphicsContextLostCallbackAdapter::create(cb);
+ m_impl->setContextLostCallback(m_contextLostCallbackAdapter.get());
+}
+
bool GraphicsContext3D::isGLES2Compliant() const
{
return m_internal->isGLES2Compliant();
@@ -1073,4 +1118,4 @@ bool GraphicsContext3D::isGLES2Compliant() const
} // namespace WebCore
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
diff --git a/Source/WebKit/chromium/src/GraphicsContext3DInternal.h b/Source/WebKit/chromium/src/GraphicsContext3DInternal.h
index 30a8e57..be9ce16 100644
--- a/Source/WebKit/chromium/src/GraphicsContext3DInternal.h
+++ b/Source/WebKit/chromium/src/GraphicsContext3DInternal.h
@@ -44,6 +44,7 @@ class Extensions3DChromium;
#if USE(ACCELERATED_COMPOSITING)
class WebGLLayerChromium;
#endif
+class GraphicsContextLostCallbackAdapter;
class GraphicsContext3DInternal {
public:
@@ -62,8 +63,6 @@ public:
bool makeContextCurrent();
- unsigned int sizeInBytes(GC3Denum type);
-
void reshape(int width, int height);
IntSize getInternalFramebufferSize();
@@ -241,6 +240,8 @@ public:
void synthesizeGLError(GC3Denum error);
+ void setContextLostCallback(PassOwnPtr<GraphicsContext3D::ContextLostCallback>);
+
// Extensions3D support.
Extensions3D* getExtensions();
bool supportsExtension(const String& name);
@@ -260,9 +261,14 @@ public:
bool supportsCopyTextureToParentTextureCHROMIUM();
void copyTextureToParentTextureCHROMIUM(Platform3DObject texture, Platform3DObject parentTexture);
+ // GL_CHROMIUM_framebuffer_multisample
+ void blitFramebufferCHROMIUM(GC3Dint srcX0, GC3Dint srcY0, GC3Dint srcX1, GC3Dint srcY1, GC3Dint dstX0, GC3Dint dstY0, GC3Dint dstX1, GC3Dint dstY1, GC3Dbitfield mask, GC3Denum filter);
+ void renderbufferStorageMultisampleCHROMIUM(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);
+
private:
OwnPtr<WebKit::WebGraphicsContext3D> m_impl;
OwnPtr<Extensions3DChromium> m_extensions;
+ OwnPtr<GraphicsContextLostCallbackAdapter> m_contextLostCallbackAdapter;
WebKit::WebViewImpl* m_webViewImpl;
bool m_initializedAvailableExtensions;
HashSet<String> m_enabledExtensions;
diff --git a/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp b/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp
index 69051d0..dba28d9 100644
--- a/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp
+++ b/Source/WebKit/chromium/src/IDBCallbacksProxy.cpp
@@ -62,55 +62,41 @@ IDBCallbacksProxy::~IDBCallbacksProxy()
void IDBCallbacksProxy::onError(PassRefPtr<IDBDatabaseError> idbDatabaseError)
{
m_callbacks->onError(WebKit::WebIDBDatabaseError(idbDatabaseError));
- m_callbacks.clear();
-}
-
-void IDBCallbacksProxy::onSuccess()
-{
- m_callbacks->onSuccess();
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBCursorBackendInterface> idbCursorBackend)
{
m_callbacks->onSuccess(new WebKit::WebIDBCursorImpl(idbCursorBackend));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
{
m_callbacks->onSuccess(new WebKit::WebIDBDatabaseImpl(backend));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBIndexBackendInterface> backend)
{
m_callbacks->onSuccess(new WebKit::WebIDBIndexImpl(backend));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBKey> idbKey)
{
m_callbacks->onSuccess(WebKit::WebIDBKey(idbKey));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBObjectStoreBackendInterface> backend)
{
m_callbacks->onSuccess(new WebKit::WebIDBObjectStoreImpl(backend));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBTransactionBackendInterface> backend)
{
m_callbacks->onSuccess(new WebKit::WebIDBTransactionImpl(backend));
- m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptValue)
{
m_callbacks->onSuccess(WebKit::WebSerializedScriptValue(serializedScriptValue));
- m_callbacks.clear();
}
} // namespace WebCore
diff --git a/Source/WebKit/chromium/src/IDBCallbacksProxy.h b/Source/WebKit/chromium/src/IDBCallbacksProxy.h
index 8c26161..e1db23d 100644
--- a/Source/WebKit/chromium/src/IDBCallbacksProxy.h
+++ b/Source/WebKit/chromium/src/IDBCallbacksProxy.h
@@ -48,7 +48,6 @@ public:
virtual ~IDBCallbacksProxy();
virtual void onError(PassRefPtr<IDBDatabaseError>);
- virtual void onSuccess(); // For "null".
virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>);
virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>);
virtual void onSuccess(PassRefPtr<IDBIndexBackendInterface>);
diff --git a/Source/WebKit/chromium/src/IDBDatabaseProxy.cpp b/Source/WebKit/chromium/src/IDBDatabaseProxy.cpp
index f070d64..6355a2a 100644
--- a/Source/WebKit/chromium/src/IDBDatabaseProxy.cpp
+++ b/Source/WebKit/chromium/src/IDBDatabaseProxy.cpp
@@ -95,10 +95,10 @@ void IDBDatabaseProxy::setVersion(const String& version, PassRefPtr<IDBCallbacks
m_webIDBDatabase->setVersion(version, new WebIDBCallbacksImpl(callbacks), ec);
}
-PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseProxy::transaction(DOMStringList* storeNames, unsigned short mode, unsigned long timeout, ExceptionCode& ec)
+PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseProxy::transaction(DOMStringList* storeNames, unsigned short mode, ExceptionCode& ec)
{
WebKit::WebDOMStringList names(storeNames);
- WebKit::WebIDBTransaction* transaction = m_webIDBDatabase->transaction(names, mode, timeout, ec);
+ WebKit::WebIDBTransaction* transaction = m_webIDBDatabase->transaction(names, mode, ec);
if (!transaction) {
ASSERT(ec);
return 0;
diff --git a/Source/WebKit/chromium/src/IDBDatabaseProxy.h b/Source/WebKit/chromium/src/IDBDatabaseProxy.h
index c51a604..2ceb77e 100644
--- a/Source/WebKit/chromium/src/IDBDatabaseProxy.h
+++ b/Source/WebKit/chromium/src/IDBDatabaseProxy.h
@@ -49,7 +49,7 @@ public:
virtual PassRefPtr<IDBObjectStoreBackendInterface> createObjectStore(const String& name, const String& keyPath, bool autoIncrement, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void deleteObjectStore(const String& name, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void setVersion(const String& version, PassRefPtr<IDBCallbacks>, ExceptionCode&);
- virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* storeNames, unsigned short mode, unsigned long timeout, ExceptionCode&);
+ virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* storeNames, unsigned short mode, ExceptionCode&);
virtual void close();
private:
diff --git a/Source/WebKit/chromium/src/IDBObjectStoreProxy.cpp b/Source/WebKit/chromium/src/IDBObjectStoreProxy.cpp
index e03cdc8..d6871e0 100755
--- a/Source/WebKit/chromium/src/IDBObjectStoreProxy.cpp
+++ b/Source/WebKit/chromium/src/IDBObjectStoreProxy.cpp
@@ -80,12 +80,12 @@ void IDBObjectStoreProxy::get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> c
m_webIDBObjectStore->get(key, new WebIDBCallbacksImpl(callbacks), *transactionProxy->getWebIDBTransaction(), ec);
}
-void IDBObjectStoreProxy::put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks> callbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
+void IDBObjectStoreProxy::put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, PutMode putMode, PassRefPtr<IDBCallbacks> callbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
{
// The transaction pointer is guaranteed to be a pointer to a proxy object as, in the renderer,
// all implementations of IDB interfaces are proxy objects.
IDBTransactionBackendProxy* transactionProxy = static_cast<IDBTransactionBackendProxy*>(transaction);
- m_webIDBObjectStore->put(value, key, addOnly, new WebIDBCallbacksImpl(callbacks), *transactionProxy->getWebIDBTransaction(), ec);
+ m_webIDBObjectStore->put(value, key, static_cast<WebKit::WebIDBObjectStore::PutMode>(putMode), new WebIDBCallbacksImpl(callbacks), *transactionProxy->getWebIDBTransaction(), ec);
}
void IDBObjectStoreProxy::deleteFunction(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
@@ -96,6 +96,14 @@ void IDBObjectStoreProxy::deleteFunction(PassRefPtr<IDBKey> key, PassRefPtr<IDBC
m_webIDBObjectStore->deleteFunction(key, new WebIDBCallbacksImpl(callbacks), *transactionProxy->getWebIDBTransaction(), ec);
}
+void IDBObjectStoreProxy::clear(PassRefPtr<IDBCallbacks> callbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
+{
+ // The transaction pointer is guaranteed to be a pointer to a proxy object as, in the renderer,
+ // all implementations of IDB interfaces are proxy objects.
+ IDBTransactionBackendProxy* transactionProxy = static_cast<IDBTransactionBackendProxy*>(transaction);
+ m_webIDBObjectStore->clear(new WebIDBCallbacksImpl(callbacks), *transactionProxy->getWebIDBTransaction(), ec);
+}
+
PassRefPtr<IDBIndexBackendInterface> IDBObjectStoreProxy::createIndex(const String& name, const String& keyPath, bool unique, IDBTransactionBackendInterface* transaction, ExceptionCode& ec)
{
// The transaction pointer is guaranteed to be a pointer to a proxy object as, in the renderer,
diff --git a/Source/WebKit/chromium/src/IDBObjectStoreProxy.h b/Source/WebKit/chromium/src/IDBObjectStoreProxy.h
index 348c794..a6e3748 100755
--- a/Source/WebKit/chromium/src/IDBObjectStoreProxy.h
+++ b/Source/WebKit/chromium/src/IDBObjectStoreProxy.h
@@ -47,8 +47,9 @@ public:
virtual PassRefPtr<DOMStringList> indexNames() const;
virtual void get(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
- virtual void put(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, bool addOnly, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
+ virtual void put(PassRefPtr<SerializedScriptValue>, PassRefPtr<IDBKey>, PutMode, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
virtual void deleteFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
+ virtual void clear(PassRefPtr<IDBCallbacks>, IDBTransactionBackendInterface*, ExceptionCode&);
PassRefPtr<IDBIndexBackendInterface> createIndex(const String& name, const String& keyPath, bool unique, IDBTransactionBackendInterface*, ExceptionCode&);
PassRefPtr<IDBIndexBackendInterface> index(const String& name, ExceptionCode&);
@@ -67,4 +68,3 @@ private:
#endif
#endif // IDBObjectStoreProxy_h
-
diff --git a/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.cpp b/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.cpp
index 3a19fe2..ebda1dd 100644
--- a/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.cpp
+++ b/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.cpp
@@ -52,19 +52,11 @@ IDBTransactionCallbacksProxy::~IDBTransactionCallbacksProxy()
void IDBTransactionCallbacksProxy::onAbort()
{
m_callbacks->onAbort();
- m_callbacks.clear();
}
void IDBTransactionCallbacksProxy::onComplete()
{
m_callbacks->onComplete();
- m_callbacks.clear();
-}
-
-void IDBTransactionCallbacksProxy::onTimeout()
-{
- m_callbacks->onTimeout();
- m_callbacks.clear();
}
} // namespace WebCore
diff --git a/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.h b/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.h
index 891d5c9..79c32f6 100644
--- a/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.h
+++ b/Source/WebKit/chromium/src/IDBTransactionCallbacksProxy.h
@@ -47,7 +47,6 @@ public:
virtual void onAbort();
virtual void onComplete();
- virtual void onTimeout();
private:
IDBTransactionCallbacksProxy(PassOwnPtr<WebKit::WebIDBTransactionCallbacks>);
diff --git a/Source/WebKit/chromium/src/InspectorClientImpl.cpp b/Source/WebKit/chromium/src/InspectorClientImpl.cpp
index 77150bb..1ed5284 100644
--- a/Source/WebKit/chromium/src/InspectorClientImpl.cpp
+++ b/Source/WebKit/chromium/src/InspectorClientImpl.cpp
@@ -81,18 +81,6 @@ void InspectorClientImpl::hideHighlight()
agent->hideHighlight();
}
-void InspectorClientImpl::populateSetting(const String& key, String* value)
-{
- if (WebDevToolsAgentImpl* agent = devToolsAgent())
- agent->populateSetting(key, value);
-}
-
-void InspectorClientImpl::storeSetting(const String& key, const String& value)
-{
- if (WebDevToolsAgentImpl* agent = devToolsAgent())
- agent->storeSetting(key, value);
-}
-
bool InspectorClientImpl::sendMessageToFrontend(const WTF::String& message)
{
if (WebDevToolsAgentImpl* agent = devToolsAgent())
diff --git a/Source/WebKit/chromium/src/InspectorClientImpl.h b/Source/WebKit/chromium/src/InspectorClientImpl.h
index 78d34e3..cc91454 100644
--- a/Source/WebKit/chromium/src/InspectorClientImpl.h
+++ b/Source/WebKit/chromium/src/InspectorClientImpl.h
@@ -53,9 +53,6 @@ public:
virtual void highlight(WebCore::Node*);
virtual void hideHighlight();
- virtual void populateSetting(const WTF::String& key, WTF::String* value);
- virtual void storeSetting(const WTF::String& key, const WTF::String& value);
-
virtual bool sendMessageToFrontend(const WTF::String&);
virtual void updateInspectorStateCookie(const WTF::String&);
diff --git a/Source/WebKit/chromium/src/LocalFileSystemChromium.cpp b/Source/WebKit/chromium/src/LocalFileSystemChromium.cpp
index a9c61d0..ae2eb1d 100644
--- a/Source/WebKit/chromium/src/LocalFileSystemChromium.cpp
+++ b/Source/WebKit/chromium/src/LocalFileSystemChromium.cpp
@@ -62,7 +62,7 @@ void LocalFileSystem::readFileSystem(ScriptExecutionContext* context, AsyncFileS
ASSERT(context && context->isDocument());
Document* document = static_cast<Document*>(context);
WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame());
- webFrame->client()->openFileSystem(webFrame, static_cast<WebFileSystem::Type>(type), size, false, new WebFileSystemCallbacksImpl(callbacks));
+ webFrame->client()->openFileSystem(webFrame, static_cast<WebFileSystem::Type>(type), size, false, new WebFileSystemCallbacksImpl(callbacks, type));
}
void LocalFileSystem::requestFileSystem(ScriptExecutionContext* context, AsyncFileSystem::Type type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks, bool synchronous)
@@ -71,12 +71,12 @@ void LocalFileSystem::requestFileSystem(ScriptExecutionContext* context, AsyncFi
if (context->isDocument()) {
Document* document = static_cast<Document*>(context);
WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame());
- webFrame->client()->openFileSystem(webFrame, static_cast<WebFileSystem::Type>(type), size, true, new WebFileSystemCallbacksImpl(callbacks));
+ webFrame->client()->openFileSystem(webFrame, static_cast<WebFileSystem::Type>(type), size, true, new WebFileSystemCallbacksImpl(callbacks, type));
} else {
WorkerContext* workerContext = static_cast<WorkerContext*>(context);
WorkerLoaderProxy* workerLoaderProxy = &workerContext->thread()->workerLoaderProxy();
WebWorkerBase* webWorker = static_cast<WebWorkerBase*>(workerLoaderProxy);
- webWorker->openFileSystem(static_cast<WebFileSystem::Type>(type), size, new WebFileSystemCallbacksImpl(callbacks, context, synchronous), synchronous);
+ webWorker->openFileSystem(static_cast<WebFileSystem::Type>(type), size, new WebFileSystemCallbacksImpl(callbacks, type, context, synchronous), synchronous);
}
}
diff --git a/Source/WebKit/chromium/src/PlatformBridge.cpp b/Source/WebKit/chromium/src/PlatformBridge.cpp
index 04016fc..b09d150 100644
--- a/Source/WebKit/chromium/src/PlatformBridge.cpp
+++ b/Source/WebKit/chromium/src/PlatformBridge.cpp
@@ -132,6 +132,14 @@ static WebWidgetClient* toWebWidgetClient(Widget* widget)
return chromeClientImpl->webView()->client();
}
+static WebClipboard* getClipboard(const Frame* frame)
+{
+ WebFrameImpl* frameImpl = WebFrameImpl::fromFrame(frame);
+ if (!frameImpl || !frameImpl->client())
+ return 0;
+ return frameImpl->client()->clipboard();
+}
+
static WebCookieJar* getCookieJar(const Document* document)
{
WebFrameImpl* frameImpl = WebFrameImpl::fromFrame(document->frame());
@@ -217,9 +225,15 @@ void PlatformBridge::clipboardWriteData(const String& type,
}
HashSet<String> PlatformBridge::clipboardReadAvailableTypes(
- PasteboardPrivate::ClipboardBuffer buffer, bool* containsFilenames)
+ const Frame* frame,
+ PasteboardPrivate::ClipboardBuffer buffer,
+ bool* containsFilenames)
{
- WebVector<WebString> result = webKitClient()->clipboard()->readAvailableTypes(
+ WebClipboard* clipboard = getClipboard(frame);
+ if (!clipboard)
+ return HashSet<String>();
+
+ WebVector<WebString> result = clipboard->readAvailableTypes(
static_cast<WebClipboard::Buffer>(buffer), containsFilenames);
HashSet<String> types;
for (size_t i = 0; i < result.size(); ++i)
@@ -227,12 +241,19 @@ HashSet<String> PlatformBridge::clipboardReadAvailableTypes(
return types;
}
-bool PlatformBridge::clipboardReadData(PasteboardPrivate::ClipboardBuffer buffer,
- const String& type, String& data, String& metadata)
+bool PlatformBridge::clipboardReadData(const Frame* frame,
+ PasteboardPrivate::ClipboardBuffer buffer,
+ const String& type,
+ String& data,
+ String& metadata)
{
+ WebClipboard* clipboard = getClipboard(frame);
+ if (!clipboard)
+ return false;
+
WebString resultData;
WebString resultMetadata;
- bool succeeded = webKitClient()->clipboard()->readData(
+ bool succeeded = clipboard->readData(
static_cast<WebClipboard::Buffer>(buffer), type, &resultData, &resultMetadata);
if (succeeded) {
data = resultData;
@@ -241,9 +262,14 @@ bool PlatformBridge::clipboardReadData(PasteboardPrivate::ClipboardBuffer buffer
return succeeded;
}
-Vector<String> PlatformBridge::clipboardReadFilenames(PasteboardPrivate::ClipboardBuffer buffer)
+Vector<String> PlatformBridge::clipboardReadFilenames(const Frame* frame,
+ PasteboardPrivate::ClipboardBuffer buffer)
{
- WebVector<WebString> result = webKitClient()->clipboard()->readFilenames(
+ WebClipboard* clipboard = getClipboard(frame);
+ if (!clipboard)
+ return Vector<String>();
+
+ WebVector<WebString> result = clipboard->readFilenames(
static_cast<WebClipboard::Buffer>(buffer));
Vector<String> convertedResult;
for (size_t i = 0; i < result.size(); ++i)
@@ -509,12 +535,6 @@ PassRefPtr<IDBFactoryBackendInterface> PlatformBridge::idbFactory()
return IDBFactoryBackendProxy::create();
}
-void PlatformBridge::idbShutdown()
-{
- // In the browser process, this shuts down the utility process. In the renderer process, it does nothing.
- webKitClient()->idbShutdown();
-}
-
void PlatformBridge::createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys)
{
WebVector<WebSerializedScriptValue> webValues = values;
diff --git a/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp b/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
index 11ce797..6329d76 100644
--- a/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
+++ b/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
@@ -64,23 +64,7 @@
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
-using WebCore::DocumentLoader;
-using WebCore::FrameLoader;
-using WebCore::InjectedScriptHost;
-using WebCore::InspectorArray;
-using WebCore::InspectorBackendDispatcher;
-using WebCore::InspectorController;
-using WebCore::InspectorInstrumentation;
-using WebCore::InspectorInstrumentationCookie;
-using WebCore::Node;
-using WebCore::Page;
-using WebCore::ResourceError;
-using WebCore::ResourceRequest;
-using WebCore::ResourceResponse;
-using WTF::String;
-using WebCore::V8DOMWrapper;
-using WebCore::V8Node;
-using WebCore::V8Proxy;
+using namespace WebCore;
namespace WebKit {
@@ -89,14 +73,14 @@ namespace {
static const char kFrontendConnectedFeatureName[] = "frontend-connected";
static const char kInspectorStateFeatureName[] = "inspector-state";
-class ClientMessageLoopAdapter : public WebCore::ScriptDebugServer::ClientMessageLoop {
+class ClientMessageLoopAdapter : public ScriptDebugServer::ClientMessageLoop {
public:
static void ensureClientMessageLoopCreated(WebDevToolsAgentClient* client)
{
if (s_instance)
return;
s_instance = new ClientMessageLoopAdapter(client->createClientMessageLoop());
- WebCore::ScriptDebugServer::shared().setClientMessageLoop(s_instance);
+ ScriptDebugServer::shared().setClientMessageLoop(s_instance);
}
static void inspectedViewClosed(WebViewImpl* view)
@@ -109,7 +93,7 @@ public:
{
// Release render thread if necessary.
if (s_instance && s_instance->m_running)
- WebCore::ScriptDebugServer::shared().continueProgram();
+ ScriptDebugServer::shared().continueProgram();
}
private:
@@ -204,8 +188,8 @@ void WebDevToolsAgentImpl::attach()
m_debuggerAgentImpl.set(
new DebuggerAgentImpl(m_webViewImpl, this, m_client));
WebCString debuggerScriptJs = m_client->debuggerScriptSource();
- WebCore::ScriptDebugServer::shared().setDebuggerScriptSource(
- WTF::String(debuggerScriptJs.data(), debuggerScriptJs.length()));
+ ScriptDebugServer::shared().setDebuggerScriptSource(
+ String(debuggerScriptJs.data(), debuggerScriptJs.length()));
m_attached = true;
}
@@ -238,7 +222,7 @@ void WebDevToolsAgentImpl::didClearWindowObject(WebFrameImpl* webframe)
void WebDevToolsAgentImpl::dispatchOnInspectorBackend(const WebString& message)
{
- inspectorController()->inspectorBackendDispatcher()->dispatch(message);
+ inspectorController()->dispatchMessageFromFrontend(message);
}
void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& point)
@@ -249,7 +233,7 @@ void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& point)
void WebDevToolsAgentImpl::inspectNode(v8::Handle<v8::Value> node)
{
if (!V8Node::HasInstance(node))
- V8Proxy::setDOMException(WebCore::TYPE_MISMATCH_ERR);
+ V8Proxy::setDOMException(TYPE_MISMATCH_ERR);
else
inspectorController()->inspect(V8Node::toNative(v8::Handle<v8::Object>::Cast(node)));
}
@@ -262,14 +246,14 @@ void WebDevToolsAgentImpl::setRuntimeProperty(const WebString& name, const WebSt
}
}
-WebCore::InspectorController* WebDevToolsAgentImpl::inspectorController()
+InspectorController* WebDevToolsAgentImpl::inspectorController()
{
if (Page* page = m_webViewImpl->page())
return page->inspectorController();
return 0;
}
-WebCore::Frame* WebDevToolsAgentImpl::mainFrame()
+Frame* WebDevToolsAgentImpl::mainFrame()
{
if (Page* page = m_webViewImpl->page())
return page->mainFrame();
@@ -284,7 +268,7 @@ void WebDevToolsAgentImpl::identifierForInitialRequest(
const WebURLRequest& request)
{
WebFrameImpl* webFrameImpl = static_cast<WebFrameImpl*>(webFrame);
- WebCore::Frame* frame = webFrameImpl->frame();
+ Frame* frame = webFrameImpl->frame();
DocumentLoader* loader = frame->loader()->activeDocumentLoader();
InspectorInstrumentation::identifierForInitialRequest(frame, resourceId, loader, request.toResourceRequest());
}
@@ -348,19 +332,7 @@ void WebDevToolsAgentImpl::hideHighlight()
m_webViewImpl->client()->didInvalidateRect(damagedRect);
}
-void WebDevToolsAgentImpl::populateSetting(const String& key, String* value)
-{
- WebString string;
- m_webViewImpl->inspectorSetting(key, &string);
- *value = string;
-}
-
-void WebDevToolsAgentImpl::storeSetting(const String& key, const String& value)
-{
- m_webViewImpl->setInspectorSetting(key, value);
-}
-
-bool WebDevToolsAgentImpl::sendMessageToFrontend(const WTF::String& message)
+bool WebDevToolsAgentImpl::sendMessageToFrontend(const String& message)
{
WebDevToolsAgentImpl* devToolsAgent = static_cast<WebDevToolsAgentImpl*>(m_webViewImpl->devToolsAgent());
if (!devToolsAgent)
@@ -370,7 +342,7 @@ bool WebDevToolsAgentImpl::sendMessageToFrontend(const WTF::String& message)
return true;
}
-void WebDevToolsAgentImpl::updateInspectorStateCookie(const WTF::String& state)
+void WebDevToolsAgentImpl::updateInspectorStateCookie(const String& state)
{
m_client->runtimePropertyChanged(kInspectorStateFeatureName, state);
}
@@ -402,7 +374,7 @@ void WebDevToolsAgent::debuggerPauseScript()
void WebDevToolsAgent::interruptAndDispatch(MessageDescriptor* d)
{
- class DebuggerTask : public WebCore::ScriptDebugServer::Task {
+ class DebuggerTask : public ScriptDebugServer::Task {
public:
DebuggerTask(WebDevToolsAgent::MessageDescriptor* descriptor) : m_descriptor(descriptor) { }
virtual ~DebuggerTask() { }
@@ -414,7 +386,7 @@ void WebDevToolsAgent::interruptAndDispatch(MessageDescriptor* d)
private:
OwnPtr<WebDevToolsAgent::MessageDescriptor> m_descriptor;
};
- WebCore::ScriptDebugServer::interruptAndRun(new DebuggerTask(d));
+ ScriptDebugServer::interruptAndRun(new DebuggerTask(d));
}
bool WebDevToolsAgent::shouldInterruptForMessage(const WebString& message)
@@ -422,19 +394,19 @@ bool WebDevToolsAgent::shouldInterruptForMessage(const WebString& message)
String commandName;
if (!InspectorBackendDispatcher::getCommandName(message, &commandName))
return false;
- return commandName == InspectorBackendDispatcher::pauseCmd
- || commandName == InspectorBackendDispatcher::setBreakpointCmd
- || commandName == InspectorBackendDispatcher::removeBreakpointCmd
- || commandName == InspectorBackendDispatcher::activateBreakpointsCmd
- || commandName == InspectorBackendDispatcher::deactivateBreakpointsCmd
- || commandName == InspectorBackendDispatcher::startProfilingCmd
- || commandName == InspectorBackendDispatcher::stopProfilingCmd
- || commandName == InspectorBackendDispatcher::getProfileCmd;
+ return commandName == InspectorBackendDispatcher::Debugger_pauseCmd
+ || commandName == InspectorBackendDispatcher::Debugger_setJavaScriptBreakpointCmd
+ || commandName == InspectorBackendDispatcher::Debugger_removeJavaScriptBreakpointCmd
+ || commandName == InspectorBackendDispatcher::Debugger_activateBreakpointsCmd
+ || commandName == InspectorBackendDispatcher::Debugger_deactivateBreakpointsCmd
+ || commandName == InspectorBackendDispatcher::Inspector_startProfilingCmd
+ || commandName == InspectorBackendDispatcher::Inspector_stopProfilingCmd
+ || commandName == InspectorBackendDispatcher::Profiler_getProfileCmd;
}
void WebDevToolsAgent::processPendingMessages()
{
- WebCore::ScriptDebugServer::shared().runPendingTasks();
+ ScriptDebugServer::shared().runPendingTasks();
}
void WebDevToolsAgent::setMessageLoopDispatchHandler(MessageLoopDispatchHandler handler)
diff --git a/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h b/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h
index 681eedb..2bc197d 100644
--- a/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h
+++ b/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h
@@ -93,8 +93,6 @@ public:
virtual void openInspectorFrontend(WebCore::InspectorController*);
virtual void highlight(WebCore::Node*);
virtual void hideHighlight();
- virtual void populateSetting(const WTF::String& key, WTF::String* value);
- virtual void storeSetting(const WTF::String& key, const WTF::String& value);
virtual void updateInspectorStateCookie(const WTF::String&);
virtual bool sendMessageToFrontend(const WTF::String&);
diff --git a/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp b/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp
index 52a4032..0c71f80 100644
--- a/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp
+++ b/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp
@@ -36,8 +36,9 @@
#include "AsyncFileSystemChromium.h"
#include "FileMetadata.h"
#include "ScriptExecutionContext.h"
-#include "WebFileSystemEntry.h"
#include "WebFileInfo.h"
+#include "WebFileSystem.h"
+#include "WebFileSystemEntry.h"
#include "WebString.h"
#include "WorkerAsyncFileSystemChromium.h"
#include <wtf/Vector.h>
@@ -46,8 +47,9 @@ using namespace WebCore;
namespace WebKit {
-WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr<AsyncFileSystemCallbacks> callbacks, WebCore::ScriptExecutionContext* context, bool synchronous)
+WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr<AsyncFileSystemCallbacks> callbacks, AsyncFileSystem::Type type, WebCore::ScriptExecutionContext* context, bool synchronous)
: m_callbacks(callbacks)
+ , m_type(type)
, m_context(context)
, m_synchronous(synchronous)
{
@@ -85,9 +87,9 @@ void WebFileSystemCallbacksImpl::didReadDirectory(const WebVector<WebFileSystemE
void WebFileSystemCallbacksImpl::didOpenFileSystem(const WebString& name, const WebString& path)
{
if (m_context && m_context->isWorkerContext())
- m_callbacks->didOpenFileSystem(name, WorkerAsyncFileSystemChromium::create(m_context, path, m_synchronous));
+ m_callbacks->didOpenFileSystem(name, WorkerAsyncFileSystemChromium::create(m_context, m_type, path, m_synchronous));
else
- m_callbacks->didOpenFileSystem(name, AsyncFileSystemChromium::create(path));
+ m_callbacks->didOpenFileSystem(name, AsyncFileSystemChromium::create(m_type, path));
delete this;
}
diff --git a/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h b/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h
index 75fa2bb..3e2192e 100644
--- a/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h
+++ b/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h
@@ -31,6 +31,8 @@
#ifndef WebFileSystemCallbacksImpl_h
#define WebFileSystemCallbacksImpl_h
+#include "AsyncFileSystem.h"
+#include "WebFileSystem.h"
#include "WebFileSystemCallbacks.h"
#include "WebVector.h"
#include <wtf/OwnPtr.h>
@@ -49,7 +51,7 @@ class WebString;
class WebFileSystemCallbacksImpl : public WebFileSystemCallbacks {
public:
- WebFileSystemCallbacksImpl(PassOwnPtr<WebCore::AsyncFileSystemCallbacks>, WebCore::ScriptExecutionContext* = 0, bool synchronous = false);
+ WebFileSystemCallbacksImpl(PassOwnPtr<WebCore::AsyncFileSystemCallbacks>, WebCore::AsyncFileSystem::Type = WebCore::AsyncFileSystem::Temporary, WebCore::ScriptExecutionContext* = 0, bool synchronous = false);
virtual ~WebFileSystemCallbacksImpl();
virtual void didSucceed();
@@ -61,6 +63,9 @@ public:
private:
OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks;
+ // Used for openFileSystem callbacks.
+ WebCore::AsyncFileSystem::Type m_type;
+
// Used for worker's openFileSystem callbacks.
WebCore::ScriptExecutionContext* m_context;
bool m_synchronous;
diff --git a/Source/WebKit/chromium/src/WebFontImpl.cpp b/Source/WebKit/chromium/src/WebFontImpl.cpp
index e1fa0e7..d3555f2 100644
--- a/Source/WebKit/chromium/src/WebFontImpl.cpp
+++ b/Source/WebKit/chromium/src/WebFontImpl.cpp
@@ -34,7 +34,7 @@
#include "Font.h"
#include "FontDescription.h"
#include "GraphicsContext.h"
-#include "PlatformContextSkia.h"
+#include "painting/GraphicsContextBuilder.h"
#include "TextRun.h"
#include "WebFloatPoint.h"
#include "WebFloatRect.h"
@@ -64,27 +64,27 @@ WebFontDescription WebFontImpl::fontDescription() const
int WebFontImpl::ascent() const
{
- return m_font.ascent();
+ return m_font.fontMetrics().ascent();
}
int WebFontImpl::descent() const
{
- return m_font.descent();
+ return m_font.fontMetrics().descent();
}
int WebFontImpl::height() const
{
- return m_font.height();
+ return m_font.fontMetrics().height();
}
int WebFontImpl::lineSpacing() const
{
- return m_font.lineSpacing();
+ return m_font.fontMetrics().lineSpacing();
}
float WebFontImpl::xHeight() const
{
- return m_font.xHeight();
+ return m_font.fontMetrics().xHeight();
}
void WebFontImpl::drawText(WebCanvas* canvas, const WebTextRun& run, const WebFloatPoint& leftBaseline,
@@ -94,15 +94,9 @@ void WebFontImpl::drawText(WebCanvas* canvas, const WebTextRun& run, const WebFl
// FIXME hook canvasIsOpaque up to the platform-specific indicators for
// whether subpixel AA can be used for this draw. On Windows, this is
// PlatformContextSkia::setDrawingToImageBuffer.
-#if WEBKIT_USING_CG
- GraphicsContext gc(canvas);
-#elif WEBKIT_USING_SKIA
- PlatformContextSkia context(canvas);
- // PlatformGraphicsContext is actually a pointer to PlatformContextSkia.
- GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context));
-#else
- notImplemented();
-#endif
+
+ GraphicsContextBuilder builder(canvas);
+ GraphicsContext& gc = builder.context();
gc.save();
gc.setFillColor(color, ColorSpaceDeviceRGB);
diff --git a/Source/WebKit/chromium/src/WebFormControlElement.cpp b/Source/WebKit/chromium/src/WebFormControlElement.cpp
index a75fe5c..d2bc8ab 100644
--- a/Source/WebKit/chromium/src/WebFormControlElement.cpp
+++ b/Source/WebKit/chromium/src/WebFormControlElement.cpp
@@ -53,6 +53,11 @@ WebString WebFormControlElement::formControlType() const
return constUnwrap<HTMLFormControlElement>()->type();
}
+void WebFormControlElement::dispatchFormControlChangeEvent()
+{
+ unwrap<HTMLFormControlElement>()->dispatchFormControlChangeEvent();
+}
+
WebString WebFormControlElement::nameForAutofill() const
{
String name = constUnwrap<HTMLFormControlElement>()->name();
diff --git a/Source/WebKit/chromium/src/WebFrameImpl.cpp b/Source/WebKit/chromium/src/WebFrameImpl.cpp
index 8651fa8..c86e715 100644
--- a/Source/WebKit/chromium/src/WebFrameImpl.cpp
+++ b/Source/WebKit/chromium/src/WebFrameImpl.cpp
@@ -90,7 +90,6 @@
#include "FrameLoader.h"
#include "FrameTree.h"
#include "FrameView.h"
-#include "GraphicsContext.h"
#include "HTMLCollection.h"
#include "HTMLFormElement.h"
#include "HTMLFrameOwnerElement.h"
@@ -101,9 +100,9 @@
#include "HistoryItem.h"
#include "InspectorController.h"
#include "Page.h"
+#include "painting/GraphicsContextBuilder.h"
#include "Performance.h"
#include "PlatformBridge.h"
-#include "PlatformContextSkia.h"
#include "PluginDocument.h"
#include "PrintContext.h"
#include "RenderFrame.h"
@@ -155,10 +154,6 @@
#include <algorithm>
#include <wtf/CurrentTime.h>
-#if OS(DARWIN)
-#include "LocalCurrentGraphicsContext.h"
-#endif
-
#if OS(LINUX) || OS(FREEBSD)
#include <gdk/gdk.h>
#endif
@@ -537,7 +532,7 @@ WebURL WebFrameImpl::openSearchDescriptionURL() const
WebString WebFrameImpl::encoding() const
{
- return frame()->loader()->writer()->encoding();
+ return frame()->document()->loader()->writer()->encoding();
}
WebSize WebFrameImpl::scrollOffset() const
@@ -685,12 +680,14 @@ void WebFrameImpl::forms(WebVector<WebFormElement>& results) const
}
WebVector<WebFormElement> temp(formCount);
- for (size_t i = 0; i < formCount; ++i) {
- Node* node = forms->item(i);
+ size_t j = 0;
+ for (size_t sourceIndex = 0; j < forms->length(); ++sourceIndex) {
+ Node* node = forms->item(sourceIndex);
// Strange but true, sometimes item can be 0.
if (node && node->isHTMLElement())
- temp[i] = static_cast<HTMLFormElement*>(node);
+ temp[j++] = static_cast<HTMLFormElement*>(node);
}
+ ASSERT(j == formCount);
results.swap(temp);
}
@@ -884,17 +881,6 @@ void WebFrameImpl::loadHistoryItem(const WebHistoryItem& item)
RefPtr<HistoryItem> historyItem = PassRefPtr<HistoryItem>(item);
ASSERT(historyItem.get());
- // Sanity check for http://webkit.org/b/52819. It appears that some child
- // items of this item might be null. Try validating just the first set of
- // children in an attempt to catch it early.
- const HistoryItemVector& childItems = historyItem->children();
- int size = childItems.size();
- for (int i = 0; i < size; ++i) {
- RefPtr<HistoryItem> childItem = childItems[i].get();
- if (!childItem.get())
- CRASH();
- }
-
// If there is no currentItem, which happens when we are navigating in
// session history after a crash, we need to manufacture one otherwise WebKit
// hoarks. This is probably the wrong thing to do, but it seems to work.
@@ -1349,15 +1335,7 @@ float WebFrameImpl::printPage(int page, WebCanvas* canvas)
return 0;
}
-#if OS(WINDOWS) || OS(LINUX) || OS(FREEBSD) || OS(SOLARIS)
- PlatformContextSkia context(canvas);
- GraphicsContext spool(&context);
-#elif OS(DARWIN)
- GraphicsContext spool(canvas);
- LocalCurrentGraphicsContext localContext(&spool);
-#endif
-
- return m_printContext->spoolPage(spool, page);
+ return m_printContext->spoolPage(GraphicsContextBuilder(canvas).context(), page);
}
void WebFrameImpl::printEnd()
@@ -1542,6 +1520,9 @@ void WebFrameImpl::scopeStringMatches(int identifier,
RefPtr<Range> searchRange(rangeOfContents(frame()->document()));
+ Node* originalEndContainer = searchRange->endContainer();
+ int originalEndOffset = searchRange->endOffset();
+
ExceptionCode ec = 0, ec2 = 0;
if (m_resumeScopingFromRange.get()) {
// This is a continuation of a scoping operation that timed out and didn't
@@ -1556,9 +1537,6 @@ void WebFrameImpl::scopeStringMatches(int identifier,
}
}
- Node* originalEndContainer = searchRange->endContainer();
- int originalEndOffset = searchRange->endOffset();
-
// This timeout controls how long we scope before releasing control. This
// value does not prevent us from running for longer than this, but it is
// periodically checked to see if we have exceeded our allocated time.
@@ -1932,18 +1910,7 @@ void WebFrameImpl::paint(WebCanvas* canvas, const WebRect& rect)
{
if (rect.isEmpty())
return;
-#if WEBKIT_USING_CG
- GraphicsContext gc(canvas);
- LocalCurrentGraphicsContext localContext(&gc);
-#elif WEBKIT_USING_SKIA
- PlatformContextSkia context(canvas);
-
- // PlatformGraphicsContext is actually a pointer to PlatformContextSkia
- GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context));
-#else
- notImplemented();
-#endif
- paintWithContext(gc, rect);
+ paintWithContext(GraphicsContextBuilder(canvas).context(), rect);
}
void WebFrameImpl::createFrameView()
@@ -1985,7 +1952,7 @@ void WebFrameImpl::createFrameView()
view->setParentVisible(true);
}
-WebFrameImpl* WebFrameImpl::fromFrame(Frame* frame)
+WebFrameImpl* WebFrameImpl::fromFrame(const Frame* frame)
{
if (!frame)
return 0;
@@ -2133,7 +2100,7 @@ void WebFrameImpl::invalidateArea(AreaToInvalidate area)
IntRect contentArea(
view->x(), view->y(), view->visibleWidth(), view->visibleHeight());
IntRect frameRect = view->frameRect();
- contentArea.move(-frameRect.topLeft().x(), -frameRect.topLeft().y());
+ contentArea.move(-frameRect.x(), -frameRect.y());
view->invalidateRect(contentArea);
}
@@ -2144,7 +2111,7 @@ void WebFrameImpl::invalidateArea(AreaToInvalidate area)
ScrollbarTheme::nativeTheme()->scrollbarThickness(),
view->visibleHeight());
IntRect frameRect = view->frameRect();
- scrollBarVert.move(-frameRect.topLeft().x(), -frameRect.topLeft().y());
+ scrollBarVert.move(-frameRect.x(), -frameRect.y());
view->invalidateRect(scrollBarVert);
}
}
@@ -2298,7 +2265,7 @@ void WebFrameImpl::loadJavaScriptURL(const KURL& url)
return;
if (!m_frame->navigationScheduler()->locationChangePending())
- m_frame->loader()->writer()->replaceDocument(scriptResult);
+ m_frame->document()->loader()->writer()->replaceDocument(scriptResult);
}
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebFrameImpl.h b/Source/WebKit/chromium/src/WebFrameImpl.h
index b7ac100..e7c92b0 100644
--- a/Source/WebKit/chromium/src/WebFrameImpl.h
+++ b/Source/WebKit/chromium/src/WebFrameImpl.h
@@ -209,7 +209,7 @@ public:
void paintWithContext(WebCore::GraphicsContext&, const WebRect&);
void createFrameView();
- static WebFrameImpl* fromFrame(WebCore::Frame* frame);
+ static WebFrameImpl* fromFrame(const WebCore::Frame*);
static WebFrameImpl* fromFrameOwnerElement(WebCore::Element* element);
// If the frame hosts a PluginDocument, this method returns the WebPluginContainerImpl
diff --git a/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp b/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
index 14ed02e..bb7a19b 100644
--- a/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
+++ b/Source/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
@@ -61,11 +61,6 @@ void WebIDBCallbacksImpl::onError(const WebKit::WebIDBDatabaseError& error)
m_callbacks->onError(error);
}
-void WebIDBCallbacksImpl::onSuccess()
-{
- m_callbacks->onSuccess();
-}
-
void WebIDBCallbacksImpl::onSuccess(WebKit::WebIDBCursor* cursor)
{
m_callbacks->onSuccess(IDBCursorBackendProxy::create(cursor));
diff --git a/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h b/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h
index 33a72f4..d2ae255 100644
--- a/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h
+++ b/Source/WebKit/chromium/src/WebIDBCallbacksImpl.h
@@ -42,7 +42,6 @@ public:
virtual ~WebIDBCallbacksImpl();
virtual void onError(const WebKit::WebIDBDatabaseError&);
- virtual void onSuccess(); // For "null".
virtual void onSuccess(WebKit::WebIDBCursor*);
virtual void onSuccess(WebKit::WebIDBDatabase*);
virtual void onSuccess(const WebKit::WebIDBKey&);
diff --git a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp
index fa7a200..7f794d9 100644
--- a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp
+++ b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp
@@ -84,10 +84,10 @@ void WebIDBDatabaseImpl::setVersion(const WebString& version, WebIDBCallbacks* c
m_databaseBackend->setVersion(version, IDBCallbacksProxy::create(callbacks), ec);
}
-WebIDBTransaction* WebIDBDatabaseImpl::transaction(const WebDOMStringList& names, unsigned short mode, unsigned long timeout, WebExceptionCode& ec)
+WebIDBTransaction* WebIDBDatabaseImpl::transaction(const WebDOMStringList& names, unsigned short mode, WebExceptionCode& ec)
{
RefPtr<DOMStringList> nameList = PassRefPtr<DOMStringList>(names);
- RefPtr<IDBTransactionBackendInterface> transaction = m_databaseBackend->transaction(nameList.get(), mode, timeout, ec);
+ RefPtr<IDBTransactionBackendInterface> transaction = m_databaseBackend->transaction(nameList.get(), mode, ec);
if (!transaction) {
ASSERT(ec);
return 0;
diff --git a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h
index 64e0b2e..2dc27d5 100644
--- a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h
+++ b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h
@@ -52,7 +52,7 @@ public:
virtual WebIDBObjectStore* createObjectStore(const WebString& name, const WebString& keyPath, bool autoIncrement, const WebIDBTransaction&, WebExceptionCode&);
virtual void deleteObjectStore(const WebString& name, const WebIDBTransaction&, WebExceptionCode&);
virtual void setVersion(const WebString& version, WebIDBCallbacks* callbacks, WebExceptionCode&);
- virtual WebIDBTransaction* transaction(const WebDOMStringList& names, unsigned short mode, unsigned long timeout, WebExceptionCode&);
+ virtual WebIDBTransaction* transaction(const WebDOMStringList& names, unsigned short mode, WebExceptionCode&);
virtual void close();
private:
diff --git a/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp b/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
index 0503ede..9fe6166 100755
--- a/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
+++ b/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
@@ -71,9 +71,9 @@ void WebIDBObjectStoreImpl::get(const WebIDBKey& key, WebIDBCallbacks* callbacks
m_objectStore->get(key, IDBCallbacksProxy::create(callbacks), transaction.getIDBTransactionBackendInterface(), ec);
}
-void WebIDBObjectStoreImpl::put(const WebSerializedScriptValue& value, const WebIDBKey& key, bool addOnly, WebIDBCallbacks* callbacks, const WebIDBTransaction& transaction, WebExceptionCode& ec)
+void WebIDBObjectStoreImpl::put(const WebSerializedScriptValue& value, const WebIDBKey& key, PutMode putMode, WebIDBCallbacks* callbacks, const WebIDBTransaction& transaction, WebExceptionCode& ec)
{
- m_objectStore->put(value, key, addOnly, IDBCallbacksProxy::create(callbacks), transaction.getIDBTransactionBackendInterface(), ec);
+ m_objectStore->put(value, key, static_cast<IDBObjectStoreBackendInterface::PutMode>(putMode), IDBCallbacksProxy::create(callbacks), transaction.getIDBTransactionBackendInterface(), ec);
}
void WebIDBObjectStoreImpl::deleteFunction(const WebIDBKey& key, WebIDBCallbacks* callbacks, const WebIDBTransaction& transaction, WebExceptionCode& ec)
@@ -81,6 +81,11 @@ void WebIDBObjectStoreImpl::deleteFunction(const WebIDBKey& key, WebIDBCallbacks
m_objectStore->deleteFunction(key, IDBCallbacksProxy::create(callbacks), transaction.getIDBTransactionBackendInterface(), ec);
}
+void WebIDBObjectStoreImpl::clear(WebIDBCallbacks* callbacks, const WebIDBTransaction& transaction, WebExceptionCode& ec)
+{
+ m_objectStore->clear(IDBCallbacksProxy::create(callbacks), transaction.getIDBTransactionBackendInterface(), ec);
+}
+
WebIDBIndex* WebIDBObjectStoreImpl::createIndex(const WebString& name, const WebString& keyPath, bool unique, const WebIDBTransaction& transaction, WebExceptionCode& ec)
{
RefPtr<IDBIndexBackendInterface> index = m_objectStore->createIndex(name, keyPath, unique, transaction.getIDBTransactionBackendInterface(), ec);
diff --git a/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.h b/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.h
index f9cd776..3e2dfab 100755
--- a/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.h
+++ b/Source/WebKit/chromium/src/WebIDBObjectStoreImpl.h
@@ -48,8 +48,9 @@ public:
WebDOMStringList indexNames() const;
void get(const WebIDBKey& key, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&);
- void put(const WebSerializedScriptValue&, const WebIDBKey& key, bool addOnly, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&);
+ void put(const WebSerializedScriptValue&, const WebIDBKey&, PutMode, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&);
void deleteFunction(const WebIDBKey& key, WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&);
+ void clear(WebIDBCallbacks*, const WebIDBTransaction&, WebExceptionCode&);
WebIDBIndex* createIndex(const WebString& name, const WebString& keyPath, bool unique, const WebIDBTransaction&, WebExceptionCode&);
WebIDBIndex* index(const WebString& name, WebExceptionCode&);
diff --git a/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.cpp b/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.cpp
index 96924cf..848182e 100644
--- a/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.cpp
+++ b/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.cpp
@@ -51,11 +51,6 @@ void WebIDBTransactionCallbacksImpl::onComplete()
m_callbacks->onComplete();
}
-void WebIDBTransactionCallbacksImpl::onTimeout()
-{
- m_callbacks->onTimeout();
-}
-
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
diff --git a/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.h b/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.h
index 89b9cbe..416ac3c 100644
--- a/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.h
+++ b/Source/WebKit/chromium/src/WebIDBTransactionCallbacksImpl.h
@@ -43,7 +43,6 @@ public:
virtual void onAbort();
virtual void onComplete();
- virtual void onTimeout();
private:
RefPtr<IDBTransactionCallbacks> m_callbacks;
diff --git a/Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.cpp b/Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.cpp
new file mode 100644
index 0000000..c1dd321
--- /dev/null
+++ b/Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.cpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebIconLoadingCompletionImpl.h"
+
+#include "BitmapImage.h"
+#include "Icon.h"
+#include "SharedBuffer.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebIconLoadingCompletionImpl::WebIconLoadingCompletionImpl(FileChooser* chooser)
+ : m_fileChooser(chooser)
+{
+}
+
+WebIconLoadingCompletionImpl::~WebIconLoadingCompletionImpl()
+{
+}
+
+void WebIconLoadingCompletionImpl::didLoadIcon(const WebData& iconData)
+{
+ if (!iconData.isEmpty()) {
+ RefPtr<Image> image = BitmapImage::create();
+ image->setData(iconData, true);
+ m_fileChooser->iconLoaded(Icon::create(image));
+ }
+ // This object is no longer needed.
+ delete this;
+}
+
+} // namespace WebKit
diff --git a/Source/WebCore/inspector/InspectorSettings.h b/Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.h
index 717d11f..6e6f3a8 100644
--- a/Source/WebCore/inspector/InspectorSettings.h
+++ b/Source/WebKit/chromium/src/WebIconLoadingCompletionImpl.h
@@ -28,46 +28,30 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef InspectorSettings_h
-#define InspectorSettings_h
+#ifndef WebIconLoadingCompletionImpl_h
+#define WebIconLoadingCompletionImpl_h
-#if ENABLE(INSPECTOR)
+#include "FileChooser.h"
+#include "WebData.h"
+#include "WebIconLoadingCompletion.h"
+#include <wtf/PassRefPtr.h>
-#include "PlatformString.h"
+using WebKit::WebIconLoadingCompletion;
+using WebKit::WebData;
-#include <wtf/HashMap.h>
-#include <wtf/text/StringHash.h>
+namespace WebKit {
-namespace WebCore {
-
-class InspectorClient;
-
-class InspectorSettings {
+class WebIconLoadingCompletionImpl : public WebIconLoadingCompletion {
public:
- static const char* MonitoringXHREnabled;
- static const char* ProfilerAlwaysEnabled;
- static const char* DebuggerAlwaysEnabled;
- static const char* InspectorStartsAttached;
- static const char* InspectorAttachedHeight;
-
- InspectorSettings(InspectorClient* client);
-
- bool getBoolean(const String& name);
- void setBoolean(const String& name, bool value);
-
- long getLong(const String& name);
- void setLong(const String& name, long value);
+ WebIconLoadingCompletionImpl(WebCore::FileChooser*);
+ virtual void didLoadIcon(const WebData&);
private:
- void registerBoolean(const String& name, bool defaultValue);
- void registerLong(const String& name, long defaultValue);
+ ~WebIconLoadingCompletionImpl();
- typedef HashMap<String, String> Dictionary;
- Dictionary m_defaultValues;
- InspectorClient* m_client;
+ RefPtr<WebCore::FileChooser> m_fileChooser;
};
-} // namespace WebCore
+} // namespace WebKit
-#endif // ENABLE(INSPECTOR)
-#endif // !defined(InspectorSettings_h)
+#endif
diff --git a/Source/WebKit/chromium/src/WebImageCG.cpp b/Source/WebKit/chromium/src/WebImageCG.cpp
index 045c8be..dda829f 100644
--- a/Source/WebKit/chromium/src/WebImageCG.cpp
+++ b/Source/WebKit/chromium/src/WebImageCG.cpp
@@ -49,20 +49,38 @@ namespace WebKit {
WebImage WebImage::fromData(const WebData& data, const WebSize& desiredSize)
{
- // FIXME: Do something like what WebImageSkia.cpp does to enumerate frames.
- // Not sure whether the CG decoder uses the same frame ordering rules (if so
- // we can just use the same logic).
-
ImageSource source;
source.setData(PassRefPtr<SharedBuffer>(data).get(), true);
if (!source.isSizeAvailable())
return WebImage();
- RetainPtr<CGImageRef> frame0(AdoptCF, source.createFrameAtIndex(0));
- if (!frame0)
+ // Frames are arranged by decreasing size, then decreasing bit depth.
+ // Pick the frame closest to |desiredSize|'s area without being smaller,
+ // which has the highest bit depth.
+ const size_t frameCount = source.frameCount();
+ size_t index = 0; // Default to first frame if none are large enough.
+ int frameAreaAtIndex = 0;
+ for (size_t i = 0; i < frameCount; ++i) {
+ const IntSize frameSize = source.frameSizeAtIndex(i);
+ if (WebSize(frameSize) == desiredSize) {
+ index = i;
+ break; // Perfect match.
+ }
+ const int frameArea = frameSize.width() * frameSize.height();
+ if (frameArea < (desiredSize.width * desiredSize.height))
+ break; // No more frames that are large enough.
+
+ if (!i || (frameArea < frameAreaAtIndex)) {
+ index = i; // Closer to desired area than previous best match.
+ frameAreaAtIndex = frameArea;
+ }
+ }
+
+ RetainPtr<CGImageRef> frame(AdoptCF, source.createFrameAtIndex(index));
+ if (!frame)
return WebImage();
- return WebImage(frame0.get());
+ return WebImage(frame.get());
}
void WebImage::reset()
diff --git a/Source/WebKit/chromium/src/WebInputElement.cpp b/Source/WebKit/chromium/src/WebInputElement.cpp
index 8d89c60..7e91a17 100644
--- a/Source/WebKit/chromium/src/WebInputElement.cpp
+++ b/Source/WebKit/chromium/src/WebInputElement.cpp
@@ -135,11 +135,6 @@ void WebInputElement::setAutofilled(bool autoFilled)
unwrap<HTMLInputElement>()->setAutofilled(autoFilled);
}
-void WebInputElement::dispatchFormControlChangeEvent()
-{
- unwrap<HTMLInputElement>()->dispatchFormControlChangeEvent();
-}
-
void WebInputElement::setSelectionRange(int start, int end)
{
unwrap<HTMLInputElement>()->setSelectionRange(start, end);
@@ -160,7 +155,10 @@ bool WebInputElement::isValidValue(const WebString& value) const
return constUnwrap<HTMLInputElement>()->isValidValue(value);
}
-const int WebInputElement::defaultMaxLength = HTMLInputElement::s_maximumLength;
+int WebInputElement::defaultMaxLength()
+{
+ return HTMLInputElement::s_maximumLength;
+}
WebInputElement::WebInputElement(const PassRefPtr<HTMLInputElement>& elem)
: WebFormControlElement(elem)
@@ -178,4 +176,15 @@ WebInputElement::operator PassRefPtr<HTMLInputElement>() const
return static_cast<HTMLInputElement*>(m_private.get());
}
+WebInputElement* toWebInputElement(WebElement* webElement)
+{
+ InputElement* inputElement = toInputElement(webElement->unwrap<Element>());
+ if (!inputElement)
+ return 0;
+
+ ASSERT(webElement->unwrap<Element>()->isHTMLElement());
+
+ return static_cast<WebInputElement*>(webElement);
+}
+
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp b/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp
index 65f0fde..853cbcf 100644
--- a/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp
+++ b/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp
@@ -144,7 +144,7 @@ void WebMediaPlayerClientImpl::repaint()
ASSERT(m_mediaPlayer);
#if USE(ACCELERATED_COMPOSITING)
if (m_videoLayer.get() && supportsAcceleratedRendering())
- m_videoLayer->setNeedsDisplay(FloatRect(0, 0, m_videoLayer->bounds().width(), m_videoLayer->bounds().height()));
+ m_videoLayer->setNeedsDisplay(IntRect(0, 0, m_videoLayer->bounds().width(), m_videoLayer->bounds().height()));
#endif
m_mediaPlayer->repaint();
}
@@ -397,6 +397,17 @@ void WebMediaPlayerClientImpl::setSize(const IntSize& size)
void WebMediaPlayerClientImpl::paint(GraphicsContext* context, const IntRect& rect)
{
+#if USE(ACCELERATED_COMPOSITING)
+ // If we are using GPU to render video, ignore requests to paint frames into
+ // canvas because it will be taken care of by VideoLayerChromium.
+ if (acceleratedRenderingInUse())
+ return;
+#endif
+ paintCurrentFrameInContext(context, rect);
+}
+
+void WebMediaPlayerClientImpl::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& rect)
+{
// Normally GraphicsContext operations do nothing when painting is disabled.
// Since we're accessing platformContext() directly we have to manually
// check.
@@ -445,6 +456,11 @@ bool WebMediaPlayerClientImpl::supportsAcceleratedRendering() const
return m_supportsAcceleratedCompositing;
}
+bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
+{
+ return m_videoLayer.get() && m_videoLayer->layerRenderer();
+}
+
VideoFrameChromium* WebMediaPlayerClientImpl::getCurrentFrame()
{
VideoFrameChromium* videoFrame = 0;
diff --git a/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h b/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h
index ca7c43c..fcdb219 100644
--- a/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h
+++ b/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h
@@ -111,6 +111,7 @@ public:
virtual unsigned bytesLoaded() const;
virtual void setSize(const WebCore::IntSize&);
virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&);
+ virtual void paintCurrentFrameInContext(WebCore::GraphicsContext*, const WebCore::IntRect&);
virtual bool hasSingleSecurityOrigin() const;
virtual WebCore::MediaPlayer::MovieLoadType movieLoadType() const;
#if USE(ACCELERATED_COMPOSITING)
@@ -128,6 +129,9 @@ private:
static void getSupportedTypes(WTF::HashSet<WTF::String>&);
static WebCore::MediaPlayer::SupportsType supportsType(
const WTF::String& type, const WTF::String& codecs);
+#if USE(ACCELERATED_COMPOSITING)
+ bool acceleratedRenderingInUse();
+#endif
WebCore::MediaPlayer* m_mediaPlayer;
OwnPtr<WebMediaPlayer> m_webMediaPlayer;
diff --git a/Source/WebKit/chromium/src/WebNotification.cpp b/Source/WebKit/chromium/src/WebNotification.cpp
index c3b1f51..1f2640c 100644
--- a/Source/WebKit/chromium/src/WebNotification.cpp
+++ b/Source/WebKit/chromium/src/WebNotification.cpp
@@ -96,12 +96,6 @@ WebString WebNotification::body() const
return m_private->contents().body();
}
-// FIXME: remove dir() when unreferenced. Being replaced by direction().
-WebString WebNotification::dir() const
-{
- return m_private->dir();
-}
-
WebTextDirection WebNotification::direction() const
{
return (m_private->direction() == RTL) ?
diff --git a/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp b/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp
index 0d85d78..7ea9a8c 100644
--- a/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp
+++ b/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp
@@ -168,7 +168,7 @@ String WebPageSerializerImpl::preActionBeforeSerializeOpenTag(
// Get encoding info.
String xmlEncoding = param->document->xmlEncoding();
if (xmlEncoding.isEmpty())
- xmlEncoding = param->document->frame()->loader()->writer()->encoding();
+ xmlEncoding = param->document->loader()->writer()->encoding();
if (xmlEncoding.isEmpty())
xmlEncoding = UTF8Encoding().name();
result.append("<?xml version=\"");
@@ -505,7 +505,7 @@ bool WebPageSerializerImpl::serialize()
didSerialization = true;
- String encoding = webFrame->frame()->loader()->writer()->encoding();
+ String encoding = document->loader()->writer()->encoding();
const TextEncoding& textEncoding = encoding.isEmpty() ? UTF8Encoding() : TextEncoding(encoding);
String directoryName = url == mainURL ? m_localDirectoryName : "";
diff --git a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
index 5f62077..bb1b083 100644
--- a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
+++ b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
@@ -63,12 +63,14 @@
#include "HTMLFormElement.h"
#include "HTMLNames.h"
#include "HTMLPlugInElement.h"
+#include "IFrameShimSupport.h"
#include "KeyboardCodes.h"
#include "KeyboardEvent.h"
#include "MouseEvent.h"
#include "Page.h"
#include "RenderBox.h"
#include "ScrollView.h"
+#include "UserGestureIndicator.h"
#include "WheelEvent.h"
#if WEBKIT_USING_SKIA
@@ -127,14 +129,12 @@ void WebPluginContainerImpl::invalidateRect(const IntRect& rect)
if (!parent())
return;
- IntRect damageRect = convertToContainingWindow(rect);
+ RenderBox* renderer = toRenderBox(m_element->renderer());
- // Get our clip rect and intersect with it to ensure we don't invalidate
- // too much.
- IntRect clipRect = parent()->windowClipRect();
- damageRect.intersect(clipRect);
-
- parent()->hostWindow()->invalidateContentsAndWindow(damageRect, false /*immediate*/);
+ IntRect dirtyRect = rect;
+ dirtyRect.move(renderer->borderLeft() + renderer->paddingLeft(),
+ renderer->borderTop() + renderer->paddingTop());
+ renderer->repaintRectangle(dirtyRect);
}
void WebPluginContainerImpl::setFocus(bool focused)
@@ -368,6 +368,9 @@ void WebPluginContainerImpl::loadFrameRequest(
FrameLoadRequest frameRequest(frame->document()->securityOrigin(),
request.toResourceRequest(), target);
+ UserGestureIndicator gestureIndicator(request.hasUserGesture() ?
+ DefinitelyProcessingUserGesture : DefinitelyNotProcessingUserGesture);
+
frame->loader()->loadFrameRequest(
frameRequest,
false, // lock history
@@ -552,7 +555,7 @@ void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect,
clipRect = windowClipRect();
clipRect.move(-windowRect.x(), -windowRect.y());
- windowCutOutRects(frameRect, cutOutRects);
+ getPluginOcclusions(m_element, this->parent(), frameRect, cutOutRects);
// Convert to the plugin position.
for (size_t i = 0; i < cutOutRects.size(); i++)
cutOutRects[i].move(-frameRect.x(), -frameRect.y());
@@ -577,132 +580,4 @@ WebCore::IntRect WebPluginContainerImpl::windowClipRect() const
return clipRect;
}
-static void getObjectStack(const RenderObject* ro,
- Vector<const RenderObject*>* roStack)
-{
- roStack->clear();
- while (ro) {
- roStack->append(ro);
- ro = ro->parent();
- }
-}
-
-// Returns true if stack1 is at or above stack2
-static bool checkStackOnTop(
- const Vector<const RenderObject*>& iframeZstack,
- const Vector<const RenderObject*>& pluginZstack)
-{
- for (size_t i1 = 0, i2 = 0;
- i1 < iframeZstack.size() && i2 < pluginZstack.size();
- i1++, i2++) {
- // The root is at the end of these stacks. We want to iterate
- // root-downwards so we index backwards from the end.
- const RenderObject* ro1 = iframeZstack[iframeZstack.size() - 1 - i1];
- const RenderObject* ro2 = pluginZstack[pluginZstack.size() - 1 - i2];
-
- if (ro1 != ro2) {
- // When we find nodes in the stack that are not the same, then
- // we've found the nodes just below the lowest comment ancestor.
- // Determine which should be on top.
-
- // See if z-index determines an order.
- if (ro1->style() && ro2->style()) {
- int z1 = ro1->style()->zIndex();
- int z2 = ro2->style()->zIndex();
- if (z1 > z2)
- return true;
- if (z1 < z2)
- return false;
- }
-
- // If the plugin does not have an explicit z-index it stacks behind the iframe.
- // This is for maintaining compatibility with IE.
- if (ro2->style()->position() == StaticPosition) {
- // The 0'th elements of these RenderObject arrays represent the plugin node and
- // the iframe.
- const RenderObject* pluginRenderObject = pluginZstack[0];
- const RenderObject* iframeRenderObject = iframeZstack[0];
-
- if (pluginRenderObject->style() && iframeRenderObject->style()) {
- if (pluginRenderObject->style()->zIndex() > iframeRenderObject->style()->zIndex())
- return false;
- }
- return true;
- }
-
- // Inspect the document order. Later order means higher
- // stacking.
- const RenderObject* parent = ro1->parent();
- if (!parent)
- return false;
- ASSERT(parent == ro2->parent());
-
- for (const RenderObject* ro = parent->firstChild(); ro; ro = ro->nextSibling()) {
- if (ro == ro1)
- return false;
- if (ro == ro2)
- return true;
- }
- ASSERT(false); // We should have seen ro1 and ro2 by now.
- return false;
- }
- }
- return true;
-}
-
-// Return a set of rectangles that should not be overdrawn by the
-// plugin ("cutouts"). This helps implement the "iframe shim"
-// technique of overlaying a windowed plugin with content from the
-// page. In a nutshell, iframe elements should occlude plugins when
-// they occur higher in the stacking order.
-void WebPluginContainerImpl::windowCutOutRects(const IntRect& frameRect,
- Vector<IntRect>& cutOutRects)
-{
- RenderObject* pluginNode = m_element->renderer();
- ASSERT(pluginNode);
- if (!pluginNode->style())
- return;
- Vector<const RenderObject*> pluginZstack;
- Vector<const RenderObject*> iframeZstack;
- getObjectStack(pluginNode, &pluginZstack);
-
- // Get the parent widget
- Widget* parentWidget = this->parent();
- if (!parentWidget->isFrameView())
- return;
-
- FrameView* parentFrameView = static_cast<FrameView*>(parentWidget);
-
- const HashSet<RefPtr<Widget> >* children = parentFrameView->children();
- for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(); it != children->end(); ++it) {
- // We only care about FrameView's because iframes show up as FrameViews.
- if (!(*it)->isFrameView())
- continue;
-
- const FrameView* frameView =
- static_cast<const FrameView*>((*it).get());
- // Check to make sure we can get both the element and the RenderObject
- // for this FrameView, if we can't just move on to the next object.
- if (!frameView->frame() || !frameView->frame()->ownerElement()
- || !frameView->frame()->ownerElement()->renderer())
- continue;
-
- HTMLElement* element = frameView->frame()->ownerElement();
- RenderObject* iframeRenderer = element->renderer();
-
- if (element->hasTagName(HTMLNames::iframeTag)
- && iframeRenderer->absoluteBoundingBoxRect().intersects(frameRect)
- && (!iframeRenderer->style() || iframeRenderer->style()->visibility() == VISIBLE)) {
- getObjectStack(iframeRenderer, &iframeZstack);
- if (checkStackOnTop(iframeZstack, pluginZstack)) {
- IntPoint point =
- roundedIntPoint(iframeRenderer->localToAbsolute());
- RenderBox* rbox = toRenderBox(iframeRenderer);
- IntSize size(rbox->width(), rbox->height());
- cutOutRects.append(IntRect(point, size));
- }
- }
- }
-}
-
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp b/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp
index a209e6a..b4d4246 100644
--- a/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp
+++ b/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp
@@ -35,7 +35,7 @@
#include "FramelessScrollView.h"
#include "FrameView.h"
#include "IntRect.h"
-#include "PlatformContextSkia.h"
+#include "painting/GraphicsContextBuilder.h"
#include "PlatformKeyboardEvent.h"
#include "PlatformMouseEvent.h"
#include "PlatformWheelEvent.h"
@@ -141,13 +141,13 @@ void WebPopupMenuImpl::resize(const WebSize& newSize)
m_size = newSize;
if (m_widget) {
- IntRect newGeometry(0, 0, m_size.width, m_size.height);
- m_widget->setFrameRect(newGeometry);
+ IntRect newGeometry(0, 0, m_size.width, m_size.height);
+ m_widget->setFrameRect(newGeometry);
}
if (m_client) {
- WebRect damagedRect(0, 0, m_size.width, m_size.height);
- m_client->didInvalidateRect(damagedRect);
+ WebRect damagedRect(0, 0, m_size.width, m_size.height);
+ m_client->didInvalidateRect(damagedRect);
}
}
@@ -164,18 +164,8 @@ void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect& rect)
if (!m_widget)
return;
- if (!rect.isEmpty()) {
-#if WEBKIT_USING_CG
- GraphicsContext gc(canvas);
-#elif WEBKIT_USING_SKIA
- PlatformContextSkia context(canvas);
- // PlatformGraphicsContext is actually a pointer to PlatformContextSkia.
- GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context));
-#else
- notImplemented();
-#endif
- m_widget->paint(&gc, rect);
- }
+ if (!rect.isEmpty())
+ m_widget->paint(&GraphicsContextBuilder(canvas).context(), rect);
}
void WebPopupMenuImpl::themeChanged()
diff --git a/Source/WebKit/chromium/src/WebRuntimeFeatures.cpp b/Source/WebKit/chromium/src/WebRuntimeFeatures.cpp
index 0b5d397..e3ece6e 100644
--- a/Source/WebKit/chromium/src/WebRuntimeFeatures.cpp
+++ b/Source/WebKit/chromium/src/WebRuntimeFeatures.cpp
@@ -202,14 +202,14 @@ bool WebRuntimeFeatures::isWebAudioEnabled()
void WebRuntimeFeatures::enableWebGL(bool enable)
{
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
RuntimeEnabledFeatures::setWebGLEnabled(enable);
#endif
}
bool WebRuntimeFeatures::isWebGLEnabled()
{
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
return RuntimeEnabledFeatures::webGLRenderingContextEnabled();
#else
return false;
@@ -304,4 +304,20 @@ bool WebRuntimeFeatures::isFileSystemEnabled()
#endif
}
+void WebRuntimeFeatures::enableJavaScriptI18NAPI(bool enable)
+{
+#if ENABLE(JAVASCRIPT_I18N_API)
+ RuntimeEnabledFeatures::setJavaScriptI18NAPIEnabled(enable);
+#endif
+}
+
+bool WebRuntimeFeatures::isJavaScriptI18NAPIEnabled()
+{
+#if ENABLE(JAVASCRIPT_I18N_API)
+ return RuntimeEnabledFeatures::javaScriptI18NAPIEnabled();
+#else
+ return false;
+#endif
+}
+
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebScrollbarImpl.cpp b/Source/WebKit/chromium/src/WebScrollbarImpl.cpp
index 05d2d1f..57ea92e 100644
--- a/Source/WebKit/chromium/src/WebScrollbarImpl.cpp
+++ b/Source/WebKit/chromium/src/WebScrollbarImpl.cpp
@@ -33,7 +33,7 @@
#include "GraphicsContext.h"
#include "KeyboardCodes.h"
-#include "PlatformContextSkia.h"
+#include "painting/GraphicsContextBuilder.h"
#include "Scrollbar.h"
#include "ScrollbarTheme.h"
#include "ScrollTypes.h"
@@ -76,7 +76,7 @@ WebScrollbarImpl::~WebScrollbarImpl()
void WebScrollbarImpl::setLocation(const WebRect& rect)
{
- WebCore::IntRect oldRect = m_scrollbar->frameRect();
+ IntRect oldRect = m_scrollbar->frameRect();
m_scrollbar->setFrameRect(rect);
if (WebRect(oldRect) != rect)
m_scrollbar->invalidate();
@@ -95,7 +95,7 @@ int WebScrollbarImpl::value() const
void WebScrollbarImpl::setValue(int position)
{
- WebCore::ScrollableArea::scrollToOffsetWithoutAnimation(m_scrollbar->orientation(), position);
+ ScrollableArea::scrollToOffsetWithoutAnimation(m_scrollbar->orientation(), static_cast<float>(position));
}
void WebScrollbarImpl::setDocumentSize(int size)
@@ -119,18 +119,7 @@ void WebScrollbarImpl::scroll(ScrollDirection direction, ScrollGranularity granu
void WebScrollbarImpl::paint(WebCanvas* canvas, const WebRect& rect)
{
-#if WEBKIT_USING_CG
- GraphicsContext gc(canvas);
-#elif WEBKIT_USING_SKIA
- PlatformContextSkia context(canvas);
-
- // PlatformGraphicsContext is actually a pointer to PlatformContextSkia
- GraphicsContext gc(reinterpret_cast<PlatformGraphicsContext*>(&context));
-#else
- notImplemented();
-#endif
-
- m_scrollbar->paint(&gc, rect);
+ m_scrollbar->paint(&GraphicsContextBuilder(canvas).context(), rect);
}
bool WebScrollbarImpl::handleInputEvent(const WebInputEvent& event)
@@ -220,7 +209,7 @@ bool WebScrollbarImpl::onMouseWheel(const WebInputEvent& event)
if (negative)
delta *= -1;
}
- WebCore::ScrollableArea::scroll((m_scrollbar->orientation() == HorizontalScrollbar) ? WebCore::ScrollLeft : WebCore::ScrollUp, WebCore::ScrollByPixel, delta);
+ ScrollableArea::scroll((m_scrollbar->orientation() == HorizontalScrollbar) ? WebCore::ScrollLeft : WebCore::ScrollUp, WebCore::ScrollByPixel, delta);
return true;
}
@@ -259,7 +248,7 @@ bool WebScrollbarImpl::onKeyDown(const WebInputEvent& event)
WebCore::ScrollGranularity scrollGranularity;
if (WebViewImpl::mapKeyCodeForScroll(keyCode, &scrollDirection, &scrollGranularity)) {
// Will return false if scroll direction wasn't compatible with this scrollbar.
- return WebCore::ScrollableArea::scroll(scrollDirection, scrollGranularity);
+ return ScrollableArea::scroll(scrollDirection, scrollGranularity);
}
return false;
}
@@ -269,12 +258,12 @@ int WebScrollbarImpl::scrollSize(WebCore::ScrollbarOrientation orientation) cons
return (orientation == m_scrollbar->orientation()) ? (m_scrollbar->totalSize() - m_scrollbar->visibleSize()) : 0;
}
-int WebScrollbarImpl::scrollPosition(WebCore::Scrollbar*) const
+int WebScrollbarImpl::scrollPosition(Scrollbar*) const
{
return m_scrollOffset;
}
-void WebScrollbarImpl::setScrollOffset(const WebCore::IntPoint& offset)
+void WebScrollbarImpl::setScrollOffset(const IntPoint& offset)
{
if (m_scrollbar->orientation() == HorizontalScrollbar)
m_scrollOffset = offset.x();
@@ -284,7 +273,7 @@ void WebScrollbarImpl::setScrollOffset(const WebCore::IntPoint& offset)
m_client->valueChanged(this);
}
-void WebScrollbarImpl::invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect& rect)
+void WebScrollbarImpl::invalidateScrollbarRect(Scrollbar*, const IntRect& rect)
{
WebRect webrect(rect);
webrect.x += m_scrollbar->x();
@@ -302,7 +291,7 @@ bool WebScrollbarImpl::scrollbarCornerPresent() const
return false;
}
-void WebScrollbarImpl::getTickmarks(Vector<WebCore::IntRect>& tickmarks) const
+void WebScrollbarImpl::getTickmarks(Vector<IntRect>& tickmarks) const
{
WebVector<WebRect> ticks;
m_client->getTickmarks(const_cast<WebScrollbarImpl*>(this), &ticks);
@@ -311,4 +300,14 @@ void WebScrollbarImpl::getTickmarks(Vector<WebCore::IntRect>& tickmarks) const
tickmarks[i] = ticks[i];
}
+Scrollbar* WebScrollbarImpl::horizontalScrollbar() const
+{
+ return m_scrollbar->orientation() == HorizontalScrollbar ? m_scrollbar.get() : 0;
+}
+
+Scrollbar* WebScrollbarImpl::verticalScrollbar() const
+{
+ return m_scrollbar->orientation() == VerticalScrollbar ? m_scrollbar.get() : 0;
+}
+
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebScrollbarImpl.h b/Source/WebKit/chromium/src/WebScrollbarImpl.h
index 4dcfd5d..ac120cf 100644
--- a/Source/WebKit/chromium/src/WebScrollbarImpl.h
+++ b/Source/WebKit/chromium/src/WebScrollbarImpl.h
@@ -65,6 +65,8 @@ public:
virtual bool isActive() const;
virtual bool scrollbarCornerPresent() const;
virtual void getTickmarks(Vector<WebCore::IntRect>&) const;
+ virtual WebCore::Scrollbar* horizontalScrollbar() const;
+ virtual WebCore::Scrollbar* verticalScrollbar() const;
private:
bool onMouseDown(const WebInputEvent& event);
diff --git a/Source/WebKit/chromium/src/WebSearchableFormData.cpp b/Source/WebKit/chromium/src/WebSearchableFormData.cpp
index 8e27a67..647f20d 100644
--- a/Source/WebKit/chromium/src/WebSearchableFormData.cpp
+++ b/Source/WebKit/chromium/src/WebSearchableFormData.cpp
@@ -62,8 +62,7 @@ void GetFormEncoding(const HTMLFormElement* form, TextEncoding* encoding)
if (encoding->isValid())
return;
}
- const Frame* frame = form->document()->frame();
- *encoding = frame ? TextEncoding(frame->loader()->writer()->encoding()) : Latin1Encoding();
+ *encoding = TextEncoding(form->document()->loader()->writer()->encoding());
}
// Returns true if the submit request results in an HTTP URL.
diff --git a/Source/WebKit/chromium/src/WebSelectElement.cpp b/Source/WebKit/chromium/src/WebSelectElement.cpp
index 79a4d85..7aac44a 100644
--- a/Source/WebKit/chromium/src/WebSelectElement.cpp
+++ b/Source/WebKit/chromium/src/WebSelectElement.cpp
@@ -46,14 +46,14 @@ void WebSelectElement::setValue(const WebString& value)
unwrap<HTMLSelectElement>()->setValue(value);
}
-WebString WebSelectElement::value()
+WebString WebSelectElement::value() const
{
- return unwrap<HTMLSelectElement>()->value();
+ return constUnwrap<HTMLSelectElement>()->value();
}
-WebVector<WebElement> WebSelectElement::listItems()
+WebVector<WebElement> WebSelectElement::listItems() const
{
- const Vector<Element*>& sourceItems = unwrap<HTMLSelectElement>()->listItems();
+ const Vector<Element*>& sourceItems = constUnwrap<HTMLSelectElement>()->listItems();
WebVector<WebElement> items(sourceItems.size());
for (size_t i = 0; i < sourceItems.size(); ++i)
items[i] = WebElement(static_cast<HTMLElement*>(sourceItems[i]));
diff --git a/Source/WebKit/chromium/src/WebSettingsImpl.cpp b/Source/WebKit/chromium/src/WebSettingsImpl.cpp
index 0457f77..dd82fa6 100644
--- a/Source/WebKit/chromium/src/WebSettingsImpl.cpp
+++ b/Source/WebKit/chromium/src/WebSettingsImpl.cpp
@@ -274,6 +274,11 @@ void WebSettingsImpl::setExperimentalWebGLEnabled(bool enabled)
m_settings->setWebGLEnabled(enabled);
}
+void WebSettingsImpl::setOpenGLMultisamplingEnabled(bool enabled)
+{
+ m_settings->setOpenGLMultisamplingEnabled(enabled);
+}
+
void WebSettingsImpl::setShowDebugBorders(bool show)
{
m_settings->setShowDebugBorders(show);
@@ -329,6 +334,11 @@ void WebSettingsImpl::setHyperlinkAuditingEnabled(bool enabled)
m_settings->setHyperlinkAuditingEnabled(enabled);
}
+void WebSettingsImpl::setAsynchronousSpellCheckingEnabled(bool enabled)
+{
+ m_settings->setAsynchronousSpellCheckingEnabled(enabled);
+}
+
void WebSettingsImpl::setCaretBrowsingEnabled(bool enabled)
{
m_settings->setCaretBrowsingEnabled(enabled);
diff --git a/Source/WebKit/chromium/src/WebSettingsImpl.h b/Source/WebKit/chromium/src/WebSettingsImpl.h
index 4960bb9..b52a364 100644
--- a/Source/WebKit/chromium/src/WebSettingsImpl.h
+++ b/Source/WebKit/chromium/src/WebSettingsImpl.h
@@ -86,6 +86,7 @@ public:
virtual void setOfflineWebApplicationCacheEnabled(bool);
virtual void setWebAudioEnabled(bool);
virtual void setExperimentalWebGLEnabled(bool);
+ virtual void setOpenGLMultisamplingEnabled(bool);
virtual void setShowDebugBorders(bool);
virtual void setEditingBehavior(EditingBehavior);
virtual void setAcceleratedCompositingEnabled(bool);
@@ -97,6 +98,7 @@ public:
virtual void setAccelerated2dCanvasEnabled(bool);
virtual void setMemoryInfoEnabled(bool);
virtual void setHyperlinkAuditingEnabled(bool);
+ virtual void setAsynchronousSpellCheckingEnabled(bool);
virtual void setCaretBrowsingEnabled(bool);
virtual void setInteractiveFormValidationEnabled(bool);
diff --git a/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.cpp b/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.cpp
new file mode 100644
index 0000000..2759790
--- /dev/null
+++ b/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebTextCheckingCompletionImpl.h"
+
+#include "SpellChecker.h"
+#include "WebTextCheckingResult.h"
+#include "WebVector.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+static Vector<SpellCheckingResult> toCoreResults(const WebVector<WebTextCheckingResult>& results)
+{
+ Vector<SpellCheckingResult> coreResults;
+ for (size_t i = 0; i < results.size(); ++i)
+ coreResults.append(SpellCheckingResult(static_cast<DocumentMarker::MarkerType>(results[i].error()), results[i].position(), results[i].length()));
+ return coreResults;
+}
+
+void WebTextCheckingCompletionImpl::didFinishCheckingText(const WebVector<WebTextCheckingResult>& results)
+{
+ m_spellChecker->didCheck(m_identifier, toCoreResults(results));
+ delete this;
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.h b/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.h
new file mode 100644
index 0000000..f1017c7
--- /dev/null
+++ b/Source/WebKit/chromium/src/WebTextCheckingCompletionImpl.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebTextCheckingCompletionImpl_h
+#define WebTextCheckingCompletionImpl_h
+
+#include "WebTextCheckingCompletion.h"
+
+namespace WebCore {
+class SpellChecker;
+}
+
+namespace WebKit {
+
+class WebTextCheckingCompletionImpl : public WebTextCheckingCompletion {
+public:
+ WebTextCheckingCompletionImpl(int identifier, WebCore::SpellChecker* spellchecker)
+ : m_identifier(identifier), m_spellChecker(spellchecker)
+ {
+ }
+
+ virtual void didFinishCheckingText(const WebVector<WebTextCheckingResult>&);
+
+private:
+ int m_identifier;
+ WebCore::SpellChecker* m_spellChecker;
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/Source/WebKit/chromium/src/WebTextRun.cpp b/Source/WebKit/chromium/src/WebTextRun.cpp
index 58d9fac..b8c6ccb 100644
--- a/Source/WebKit/chromium/src/WebTextRun.cpp
+++ b/Source/WebKit/chromium/src/WebTextRun.cpp
@@ -39,7 +39,7 @@ namespace WebKit {
WebTextRun::operator WebCore::TextRun() const
{
- return TextRun(text, false, 0, 0, rtl, directionalOverride);
+ return TextRun(text, false, 0, 0, TextRun::AllowTrailingExpansion, rtl, directionalOverride);
}
} // namespace WebKit
diff --git a/Source/WebKit/chromium/src/WebURLResponse.cpp b/Source/WebKit/chromium/src/WebURLResponse.cpp
index bf3c521..7917298 100644
--- a/Source/WebKit/chromium/src/WebURLResponse.cpp
+++ b/Source/WebKit/chromium/src/WebURLResponse.cpp
@@ -384,6 +384,16 @@ void WebURLResponse::setDownloadFilePath(const WebString& downloadFilePath)
m_private->m_downloadFilePath = downloadFilePath;
}
+WebString WebURLResponse::socketAddress() const
+{
+ return m_private->m_resourceResponse->socketAddress();
+}
+
+void WebURLResponse::setSocketAddress(const WebString& socketAddress)
+{
+ m_private->m_resourceResponse->setSocketAddress(socketAddress);
+}
+
void WebURLResponse::assign(WebURLResponsePrivate* p)
{
// Subclasses may call this directly so a self-assignment check is needed
diff --git a/Source/WebKit/chromium/src/WebViewImpl.cpp b/Source/WebKit/chromium/src/WebViewImpl.cpp
index 798e5ff..18a953e 100644
--- a/Source/WebKit/chromium/src/WebViewImpl.cpp
+++ b/Source/WebKit/chromium/src/WebViewImpl.cpp
@@ -121,6 +121,7 @@
#include "WebVector.h"
#include "WebViewClient.h"
#include <wtf/ByteArray.h>
+#include <wtf/CurrentTime.h>
#include <wtf/RefPtr.h>
#if PLATFORM(CG)
@@ -200,13 +201,9 @@ COMPILE_ASSERT_MATCHING_ENUM(DragOperationEvery);
static const PopupContainerSettings autoFillPopupSettings = {
false, // setTextOnIndexChange
false, // acceptOnAbandon
- true, // loopSelectionNavigation
- false, // restrictWidthOfListBox (For security reasons show the entire entry
- // so the user doesn't enter information he did not intend to.)
- // For suggestions, we use the direction of the input field as the direction
- // of the popup items. The main reason is to keep the display of items in
- // drop-down the same as the items in the input field.
- PopupContainerSettings::DOMElementDirection,
+ true, // loopSelectionNavigation
+ false // restrictWidthOfListBox (For security reasons show the entire entry
+ // so the user doesn't enter information he did not intend to.)
};
static bool shouldUseExternalPopupMenus = false;
@@ -979,7 +976,7 @@ void WebViewImpl::animate()
if (webframe) {
FrameView* view = webframe->frameView();
if (view)
- view->serviceScriptedAnimations();
+ view->serviceScriptedAnimations(convertSecondsToDOMTimeStamp(currentTime()));
}
#endif
}
@@ -1008,8 +1005,8 @@ void WebViewImpl::layout()
#if USE(ACCELERATED_COMPOSITING)
void WebViewImpl::doPixelReadbackToCanvas(WebCanvas* canvas, const IntRect& rect)
{
- ASSERT(rect.right() <= m_layerRenderer->rootLayerTextureSize().width()
- && rect.bottom() <= m_layerRenderer->rootLayerTextureSize().height());
+ ASSERT(rect.maxX() <= m_layerRenderer->rootLayerTextureSize().width()
+ && rect.maxY() <= m_layerRenderer->rootLayerTextureSize().height());
#if PLATFORM(SKIA)
PlatformContextSkia context(canvas);
@@ -1024,7 +1021,7 @@ void WebViewImpl::doPixelReadbackToCanvas(WebCanvas* canvas, const IntRect& rect
notImplemented();
#endif
// Compute rect to sample from inverted GPU buffer.
- IntRect invertRect(rect.x(), bitmapHeight - rect.bottom(), rect.width(), rect.height());
+ IntRect invertRect(rect.x(), bitmapHeight - rect.maxY(), rect.width(), rect.height());
OwnPtr<ImageBuffer> imageBuffer(ImageBuffer::create(rect.size()));
RefPtr<ByteArray> pixelArray(ByteArray::create(rect.width() * rect.height() * 4));
@@ -1032,7 +1029,7 @@ void WebViewImpl::doPixelReadbackToCanvas(WebCanvas* canvas, const IntRect& rect
m_layerRenderer->getFramebufferPixels(pixelArray->data(), invertRect);
imageBuffer->putPremultipliedImageData(pixelArray.get(), rect.size(), IntRect(IntPoint(), rect.size()), IntPoint());
gc.save();
- gc.translate(FloatSize(0.0f, bitmapHeight));
+ gc.translate(IntSize(0, bitmapHeight));
gc.scale(FloatSize(1.0f, -1.0f));
// Use invertRect in next line, so that transform above inverts it back to
// desired destination rect.
@@ -1461,7 +1458,7 @@ WebString WebViewImpl::pageEncoding() const
if (!m_page.get())
return WebString();
- return m_page->mainFrame()->loader()->writer()->encoding();
+ return m_page->mainFrame()->document()->loader()->writer()->encoding();
}
void WebViewImpl::setPageEncoding(const WebString& encodingName)
@@ -1615,7 +1612,7 @@ double WebViewImpl::setZoomLevel(bool textOnly, double zoomLevel)
if (pluginContainer)
pluginContainer->plugin()->setZoomLevel(m_zoomLevel, textOnly);
else {
- double zoomFactor = zoomLevelToZoomFactor(m_zoomLevel);
+ float zoomFactor = static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel));
if (textOnly)
frame->setPageAndTextZoomFactors(1, zoomFactor);
else
@@ -1760,7 +1757,7 @@ WebDragOperation WebViewImpl::dragTargetDragEnterNew(
{
ASSERT(!m_currentDragData.get());
- m_currentDragData = ChromiumDataObject::createReadable(Clipboard::DragAndDrop);
+ m_currentDragData = ChromiumDataObject::createReadable(m_page->mainFrame(), Clipboard::DragAndDrop);
m_dragIdentity = identity;
m_operationsAllowed = operationsAllowed;
@@ -2372,7 +2369,7 @@ public:
return;
FrameView* view = page->mainFrame()->view();
- context.translate(view->scrollX(), view->scrollY());
+ context.translate(static_cast<float>(view->scrollX()), static_cast<float>(view->scrollY()));
IntRect windowRect = view->contentsToWindow(contentRect);
view->paintScrollbars(&context, windowRect);
}
diff --git a/Source/WebKit/chromium/src/WebViewImpl.h b/Source/WebKit/chromium/src/WebViewImpl.h
index d164a48..7640ceb 100644
--- a/Source/WebKit/chromium/src/WebViewImpl.h
+++ b/Source/WebKit/chromium/src/WebViewImpl.h
@@ -53,6 +53,7 @@
namespace WebCore {
class ChromiumDataObject;
+class DocumentLoader;
class Frame;
class HistoryItem;
class HitTestResult;
diff --git a/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp b/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
index 058e947..faea40b 100644
--- a/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
+++ b/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
@@ -56,8 +56,8 @@ namespace WebCore {
static const char fileSystemOperationsMode[] = "fileSystemOperationsMode";
-WorkerAsyncFileSystemChromium::WorkerAsyncFileSystemChromium(ScriptExecutionContext* context, const String& rootPath, bool synchronous)
- : AsyncFileSystem(rootPath)
+WorkerAsyncFileSystemChromium::WorkerAsyncFileSystemChromium(ScriptExecutionContext* context, AsyncFileSystem::Type type, const String& rootPath, bool synchronous)
+ : AsyncFileSystem(type, rootPath)
, m_scriptExecutionContext(context)
, m_webFileSystem(WebKit::webKitClient()->fileSystem())
, m_workerContext(static_cast<WorkerContext*>(context))
diff --git a/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.h b/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.h
index 0b4b708..7e3316b 100644
--- a/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.h
+++ b/Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.h
@@ -52,9 +52,9 @@ class WorkerContext;
class WorkerAsyncFileSystemChromium : public AsyncFileSystem {
public:
- static PassOwnPtr<AsyncFileSystem> create(ScriptExecutionContext* context, const String& rootPath, bool synchronous)
+ static PassOwnPtr<AsyncFileSystem> create(ScriptExecutionContext* context, AsyncFileSystem::Type type, const String& rootPath, bool synchronous)
{
- return adoptPtr(new WorkerAsyncFileSystemChromium(context, rootPath, synchronous));
+ return adoptPtr(new WorkerAsyncFileSystemChromium(context, type, rootPath, synchronous));
}
virtual ~WorkerAsyncFileSystemChromium();
@@ -75,7 +75,7 @@ public:
virtual void createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks>);
private:
- WorkerAsyncFileSystemChromium(ScriptExecutionContext*, const String& rootPath, bool synchronous);
+ WorkerAsyncFileSystemChromium(ScriptExecutionContext*, AsyncFileSystem::Type, const String& rootPath, bool synchronous);
PassRefPtr<WebKit::WorkerFileSystemCallbacksBridge> createWorkerFileSystemCallbacksBridge(PassOwnPtr<AsyncFileSystemCallbacks>);
diff --git a/Source/WebKit/chromium/src/js/DevTools.js b/Source/WebKit/chromium/src/js/DevTools.js
index d6536bc..3d61be7 100644
--- a/Source/WebKit/chromium/src/js/DevTools.js
+++ b/Source/WebKit/chromium/src/js/DevTools.js
@@ -41,6 +41,7 @@ var context = {}; // Used by WebCore's inspector routines.
Preferences.ignoreWhitespace = false;
Preferences.samplingCPUProfiler = true;
Preferences.heapProfilerPresent = true;
+ Preferences.detailedHeapProfiles = false;
Preferences.debuggerAlwaysEnabled = true;
Preferences.profilerAlwaysEnabled = true;
Preferences.canEditScriptSource = true;
@@ -88,6 +89,18 @@ WebInspector.UIString = function(string)
};
+/*
+ * This label must be kept consistent with that in English.lproj/localizedStrings.js
+ *
+ * http://code.google.com/p/chromium/issues/detail?id=61302 requires a custom label for Chromium,
+ * since its behavior is different.
+ */
+WebInspector.openLinkExternallyLabel = function()
+{
+ return WebInspector.UIString("Open Link in New Tab");
+};
+
+
/** Pending WebKit upstream by apavlov). Fixes iframe vs drag problem. */
(function()
{
diff --git a/Source/WebKit/chromium/src/js/Tests.js b/Source/WebKit/chromium/src/js/Tests.js
index 900d79e..f155e08 100644
--- a/Source/WebKit/chromium/src/js/Tests.js
+++ b/Source/WebKit/chromium/src/js/Tests.js
@@ -685,7 +685,7 @@ TestSuite.prototype._checkSourceFrameWhenLoaded = function(expectations, callbac
{
var test = this;
- var frame = WebInspector.currentPanel.visibleView.sourceFrame;
+ var frame = WebInspector.currentPanel.visibleView;
if (frame._textViewer)
checkExecLine();
diff --git a/Source/WebKit/chromium/src/painting/GraphicsContextBuilder.h b/Source/WebKit/chromium/src/painting/GraphicsContextBuilder.h
new file mode 100644
index 0000000..5ffae8e
--- /dev/null
+++ b/Source/WebKit/chromium/src/painting/GraphicsContextBuilder.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef GraphicsContextBuilder_h
+#define GraphicsContextBuilder_h
+
+#include "GraphicsContext.h"
+
+#if WEBKIT_USING_CG
+#include "LocalCurrentGraphicsContext.h"
+#elif WEBKIT_USING_SKIA
+#include "PlatformContextSkia.h"
+#endif
+
+namespace WebKit {
+
+#if WEBKIT_USING_CG
+
+class GraphicsContextBuilder {
+public:
+ GraphicsContextBuilder(WebCanvas* canvas)
+ : m_graphicsContext(canvas)
+ , m_localContext(&m_graphicsContext)
+ {
+ }
+
+ WebCore::GraphicsContext& context() { return m_graphicsContext; }
+
+private:
+ WebCore::GraphicsContext m_graphicsContext;
+ WebCore::LocalCurrentGraphicsContext m_localContext;
+};
+
+#elif WEBKIT_USING_SKIA
+
+class GraphicsContextBuilder {
+public:
+ GraphicsContextBuilder(WebCanvas* canvas)
+ : m_platformContext(canvas)
+ , m_graphicsContext(&m_platformContext)
+ {
+ }
+
+ WebCore::GraphicsContext& context() { return m_graphicsContext; }
+
+private:
+ WebCore::PlatformContextSkia m_platformContext;
+ WebCore::GraphicsContext m_graphicsContext;
+};
+
+#else
+#error "Need to define GraphicsContextBuilder!"
+#endif
+
+} // namespace WebKit
+
+#endif
diff --git a/Source/WebKit/chromium/tests/PopupMenuTest.cpp b/Source/WebKit/chromium/tests/PopupMenuTest.cpp
index 4c9a149..acfcda5 100644
--- a/Source/WebKit/chromium/tests/PopupMenuTest.cpp
+++ b/Source/WebKit/chromium/tests/PopupMenuTest.cpp
@@ -76,7 +76,7 @@ public:
virtual PopupMenuStyle itemStyle(unsigned listIndex) const
{
Font font(FontPlatformData(12.0, false, false), false);
- return PopupMenuStyle(Color::black, Color::white, font, true, false, Length(), TextDirection());
+ return PopupMenuStyle(Color::black, Color::white, font, true, false, Length(), TextDirection(), false /* has text direction override */);
}
virtual PopupMenuStyle menuStyle() const { return itemStyle(0); }
virtual int clientInsetLeft() const { return 0; }
diff --git a/Source/WebKit/chromium/tests/TransparencyWinTest.cpp b/Source/WebKit/chromium/tests/TransparencyWinTest.cpp
index ed7f12f..ee3307f 100644
--- a/Source/WebKit/chromium/tests/TransparencyWinTest.cpp
+++ b/Source/WebKit/chromium/tests/TransparencyWinTest.cpp
@@ -552,8 +552,8 @@ TEST(TransparencyWin, Scale)
EXPECT_TRUE(helper.context()->getCTM().isIdentity());
EXPECT_EQ(2, helper.drawRect().x());
EXPECT_EQ(2, helper.drawRect().y());
- EXPECT_EQ(8, helper.drawRect().right());
- EXPECT_EQ(8, helper.drawRect().bottom());
+ EXPECT_EQ(8, helper.drawRect().maxX());
+ EXPECT_EQ(8, helper.drawRect().maxY());
// Set the pixel at (2, 2) to be transparent. This should be fixed when
// the helper goes out of scope. We don't want to call
diff --git a/Source/WebKit/efl/ChangeLog b/Source/WebKit/efl/ChangeLog
index 5dcc5cf..2068ccc 100644
--- a/Source/WebKit/efl/ChangeLog
+++ b/Source/WebKit/efl/ChangeLog
@@ -1,3 +1,105 @@
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/ChromeClientEfl.h:
+
+2011-02-08 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix.
+
+ [EFL] Fix when building with curl backend.
+
+ * ewk/ewk_settings.cpp:
+ (ewk_settings_proxy_uri_get):
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/DragClientEfl.cpp:
+ * WebCoreSupport/DragClientEfl.h:
+
+2011-02-07 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [EFL] FrameLoaderClient calls loadURLInChildFrame on the child's frame loader
+ https://bugs.webkit.org/show_bug.cgi?id=53892
+
+ * ewk/ewk_frame.cpp:
+ (ewk_frame_child_add): Use the loader of the core frame instead.
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/FrameLoaderClientEfl.cpp:
+ (WebCore::FrameLoaderClientEfl::didRunInsecureContent):
+ * WebCoreSupport/FrameLoaderClientEfl.h:
+
+2011-02-01 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Antonio Gomes.
+
+ [EFL] Add an API to get proxy address.
+ https://bugs.webkit.org/show_bug.cgi?id=52990
+
+ Gets the proxy URI from network backend. This API returns a proxy URI
+ which is set up by ewk_settings_proxy_uri_set(). But, it only implements
+ this API for libsoup backend.
+
+ * ewk/ewk_settings.cpp:
+ (ewk_settings_proxy_uri_get):
+ * ewk/ewk_settings.h:
+
+2011-01-29 Dan Winship <danw@gnome.org>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Remove HAVE_LIBSOUP_2_29_90 conditionals; we depend on
+ libsoup 2.33.1 now.
+ https://bugs.webkit.org/show_bug.cgi?id=50675
+
+ * ewk/ewk_cookies.cpp:
+ (ewk_cookies_file_set):
+ (ewk_cookies_policy_set):
+ (ewk_cookies_policy_get):
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/ChromeClientEfl.cpp:
+ (WebCore::ChromeClientEfl::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/ChromeClientEfl.h:
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * ewk/ewk_frame.cpp:
+ (ewk_frame_uri_changed):
+
2011-01-14 Patrick Gansterer <paroga@webkit.org>
Unreviewed. Try to fix EFL build.
diff --git a/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp b/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
index e9904c6..6425c39 100644
--- a/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
+++ b/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
@@ -532,6 +532,11 @@ bool ChromeClientEfl::selectItemWritingDirectionIsNatural()
return true;
}
+bool ChromeClientEfl::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> ChromeClientEfl::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuEfl(client));
diff --git a/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h b/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
index a714dd4..c17fe10 100644
--- a/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
+++ b/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
@@ -128,8 +128,6 @@ public:
virtual void chooseIconForFiles(const Vector<String>&, FileChooser*);
virtual void formStateDidChange(const Node*);
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
virtual void setCursor(const Cursor&);
virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
@@ -149,6 +147,7 @@ public:
virtual void dispatchViewportDataDidChange(const ViewportArguments&) const;
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
diff --git a/Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp b/Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp
index d6610e1..b1f68e0 100644
--- a/Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp
+++ b/Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp
@@ -60,11 +60,6 @@ void DragClientEfl::startDrag(DragImageRef, const IntPoint&, const IntPoint&, Cl
notImplemented();
}
-DragImageRef DragClientEfl::createDragImageForLink(KURL&, const String& label, Frame*)
-{
- return 0;
-}
-
void DragClientEfl::dragControllerDestroyed()
{
delete this;
diff --git a/Source/WebKit/efl/WebCoreSupport/DragClientEfl.h b/Source/WebKit/efl/WebCoreSupport/DragClientEfl.h
index f73116c..ff098a9 100644
--- a/Source/WebKit/efl/WebCoreSupport/DragClientEfl.h
+++ b/Source/WebKit/efl/WebCoreSupport/DragClientEfl.h
@@ -45,7 +45,6 @@ public:
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint);
virtual void startDrag(WebCore::DragImageRef dragImage, const WebCore::IntPoint& dragImageOrigin, const WebCore::IntPoint& eventPos, WebCore::Clipboard*, WebCore::Frame*, bool linkDrag = false);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const WTF::String& label, WebCore::Frame*);
virtual void dragControllerDestroyed();
};
diff --git a/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp b/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
index 929b269..acbab30 100644
--- a/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
+++ b/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
@@ -515,7 +515,7 @@ void FrameLoaderClientEfl::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClientEfl::didRunInsecureContent(SecurityOrigin*)
+void FrameLoaderClientEfl::didRunInsecureContent(SecurityOrigin*, const KURL&)
{
notImplemented();
}
diff --git a/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h b/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
index cf7bdf0..14ebc1c 100644
--- a/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
+++ b/Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
@@ -165,7 +165,7 @@ class FrameLoaderClientEfl : public FrameLoaderClient {
virtual void updateGlobalHistoryRedirectLinks();
virtual bool shouldGoToHistoryItem(HistoryItem*) const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(SecurityOrigin*);
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&);
virtual ResourceError cancelledError(const ResourceRequest&);
virtual ResourceError blockedError(const ResourceRequest&);
diff --git a/Source/WebKit/efl/ewk/ewk_cookies.cpp b/Source/WebKit/efl/ewk/ewk_cookies.cpp
index 421f8dc..2564fc7 100644
--- a/Source/WebKit/efl/ewk/ewk_cookies.cpp
+++ b/Source/WebKit/efl/ewk/ewk_cookies.cpp
@@ -57,9 +57,7 @@ EAPI Eina_Bool ewk_cookies_file_set(const char *filename)
if (!cookieJar)
return EINA_FALSE;
-#ifdef HAVE_LIBSOUP_2_29_90
soup_cookie_jar_set_accept_policy(cookieJar, SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
-#endif
SoupSession* session = WebCore::ResourceHandle::defaultSession();
SoupSessionFeature* oldjar = soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR);
@@ -187,7 +185,6 @@ EAPI void ewk_cookies_cookie_free(Ewk_Cookie *cookie)
EAPI void ewk_cookies_policy_set(Ewk_Cookie_Policy p)
{
#ifdef WTF_USE_SOUP
-#ifdef HAVE_LIBSOUP_2_29_90
SoupCookieJar* cookieJar = WebCore::defaultCookieJar();
SoupCookieJarAcceptPolicy policy;
@@ -206,7 +203,6 @@ EAPI void ewk_cookies_policy_set(Ewk_Cookie_Policy p)
soup_cookie_jar_set_accept_policy(cookieJar, policy);
#endif
-#endif
}
/*
@@ -218,7 +214,6 @@ EAPI Ewk_Cookie_Policy ewk_cookies_policy_get()
{
Ewk_Cookie_Policy ewk_policy = EWK_COOKIE_JAR_ACCEPT_ALWAYS;
#ifdef WTF_USE_SOUP
-#ifdef HAVE_LIBSOUP_2_29_90
SoupCookieJar* cookieJar = WebCore::defaultCookieJar();
SoupCookieJarAcceptPolicy policy;
@@ -235,7 +230,6 @@ EAPI Ewk_Cookie_Policy ewk_cookies_policy_get()
break;
}
#endif
-#endif
return ewk_policy;
}
diff --git a/Source/WebKit/efl/ewk/ewk_frame.cpp b/Source/WebKit/efl/ewk/ewk_frame.cpp
index f41caae..1a159c5 100644
--- a/Source/WebKit/efl/ewk/ewk_frame.cpp
+++ b/Source/WebKit/efl/ewk/ewk_frame.cpp
@@ -1681,7 +1681,7 @@ Evas_Object* ewk_frame_child_add(Evas_Object* o, WTF::PassRefPtr<WebCore::Frame>
if (!cf->page())
goto died;
- cf->loader()->loadURLIntoChildFrame(url, referrer, cf);
+ sd->frame->loader()->loadURLIntoChildFrame(url, referrer, cf);
if (!cf->tree()->parent())
goto died;
@@ -2008,7 +2008,7 @@ Eina_Bool ewk_frame_uri_changed(Evas_Object* o)
{
EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE);
- WTF::CString uri(sd->frame->loader()->url().prettyURL().utf8());
+ WTF::CString uri(sd->frame->document()->url().prettyURL().utf8());
INF("uri=%s", uri.data());
if (!uri.data()) {
diff --git a/Source/WebKit/efl/ewk/ewk_settings.cpp b/Source/WebKit/efl/ewk/ewk_settings.cpp
index 20051ea..54e6645 100644
--- a/Source/WebKit/efl/ewk/ewk_settings.cpp
+++ b/Source/WebKit/efl/ewk/ewk_settings.cpp
@@ -291,6 +291,30 @@ void ewk_settings_proxy_uri_set(const char* proxy)
}
/**
+ * Gets the proxy URI from the network backend.
+ *
+ * @return current proxy URI or @c 0 if it's not set.
+ */
+const char* ewk_settings_proxy_uri_get()
+{
+#if USE(SOUP)
+ SoupURI* uri;
+ SoupSession* session = WebCore::ResourceHandle::defaultSession();
+ g_object_get(session, SOUP_SESSION_PROXY_URI, &uri, NULL);
+
+ if (!uri) {
+ ERR("no proxy uri");
+ return 0;
+ }
+
+ WTF::String proxy = soup_uri_to_string(uri, EINA_FALSE);
+ return eina_stringshare_add(proxy.utf8().data());
+#elif USE(CURL)
+ EINA_SAFETY_ON_TRUE_RETURN_VAL(1, NULL);
+#endif
+}
+
+/**
* @internal
* Gets the default user agent string.
*
diff --git a/Source/WebKit/efl/ewk/ewk_settings.h b/Source/WebKit/efl/ewk/ewk_settings.h
index 3c1668f..d1e12c0 100644
--- a/Source/WebKit/efl/ewk/ewk_settings.h
+++ b/Source/WebKit/efl/ewk/ewk_settings.h
@@ -49,6 +49,7 @@ EAPI cairo_surface_t *ewk_settings_icon_database_icon_surface_get(const char *ur
EAPI Evas_Object *ewk_settings_icon_database_icon_object_add(const char *url, Evas *canvas);
EAPI void ewk_settings_proxy_uri_set(const char* proxy);
+EAPI const char* ewk_settings_proxy_uri_get();
#ifdef __cplusplus
}
diff --git a/Source/WebKit/gtk/ChangeLog b/Source/WebKit/gtk/ChangeLog
index 912c948..2fefd5d 100644
--- a/Source/WebKit/gtk/ChangeLog
+++ b/Source/WebKit/gtk/ChangeLog
@@ -1,3 +1,398 @@
+2011-02-11 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r78331.
+ http://trac.webkit.org/changeset/78331
+ https://bugs.webkit.org/show_bug.cgi?id=54295
+
+ This patch broke 11 tests in GTK bots (Requested by svillar on
+ #webkit).
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::notifyStatus):
+
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::FrameLoaderClient):
+ (WebKit::FrameLoaderClient::didRunInsecureContent):
+ (WebKit::FrameLoaderClient::dispatchDidLoadMainResource):
+ (WebKit::FrameLoaderClient::finishedLoading):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_get_encoding):
+
+2011-02-11 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] events missing when a document is (re)loaded
+ https://bugs.webkit.org/show_bug.cgi?id=25831
+
+ Emit the right signals when reloading a document.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::notifyAccessibilityStatus): New function, to make sure
+ the signals involved in reloading a document are properly emitted.
+ (WebKit::notifyStatus): Also notify accessibility if enabled.
+
+2011-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] DRT needs an implementation of LayoutTestController.setIconDatabaseEnabled
+ https://bugs.webkit.org/show_bug.cgi?id=54033
+
+ Add a DumpRenderTreeSupportGtk method for turning the icon database on and off.
+ This is a likely candidate for a new API point.
+
+ * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+ (DumpRenderTreeSupportGtk::setIconDatabaseEnabled): Added.
+ * WebCoreSupport/DumpRenderTreeSupportGtk.h:
+ * webkit/webkitglobals.cpp:
+ (webkitInit): Call setIconDatabaseEnabled(true) on startup, instead
+ of initializing the database manually.
+ (WebKit::setIconDatabaseEnabled): Added.
+ * webkit/webkitglobalsprivate.h: Added declarations.
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/ChromeClientGtk.h:
+
+2011-02-02 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53169
+
+ Minor change enforced by major changes in WebCore/inspector/InspectorController.
+
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ * webkit/webkitwebinspector.cpp:
+ (webkit_web_inspector_get_property):
+
+2011-02-08 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] DRT's TextInputController is unimplemented on GTK
+ https://bugs.webkit.org/show_bug.cgi?id=52997
+
+ * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+ (DumpRenderTreeSupportGtk::setComposition):
+ (DumpRenderTreeSupportGtk::confirmComposition):
+ (DumpRenderTreeSupportGtk::firstRectForCharacterRange):
+ (DumpRenderTreeSupportGtk::selectedRange): New methods needed by
+ TextInputController.
+ * WebCoreSupport/DumpRenderTreeSupportGtk.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/DragClientGtk.cpp:
+ * WebCoreSupport/DragClientGtk.h:
+
+2011-02-07 Joone Hur <joone.hur@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] Implement layoutTestController.findString
+ https://bugs.webkit.org/show_bug.cgi?id=50237
+
+ * GNUmakefile.am: Add AssertMatchingEnums.cpp.
+ * WebCoreSupport/AssertMatchingEnums.cpp: Add this file to assert that various
+ WebKit API enum values continue matching WebCore defined enum values.
+ * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+ (DumpRenderTreeSupportGtk::findString):
+ * WebCoreSupport/DumpRenderTreeSupportGtk.h:
+
+2011-02-07 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Daniel Bates.
+
+ [GTK] fast/history/history-subframe-with-name.html fails with GTK DRT
+ https://bugs.webkit.org/show_bug.cgi?id=44784
+
+ Call FrameLoader::loadURLIntoChildFrame on the parent frame's loader, not the child's.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::createFrame): Fix the call to FrameLoader::loadURLIntoChildFrame.
+
+2011-02-07 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [Gtk] atk_text_get_caret_offset fails for list items
+ https://bugs.webkit.org/show_bug.cgi?id=53436
+
+ Update unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkCaretOffsets): Check that the caret offset returned
+ match the value previously set.
+
+2011-02-04 Joone Hur <joone.hur@collabora.co.uk>
+
+ Unreviewed, Fix compilation warning.
+
+ Constructor initialization list should follow the declaration order.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::FrameLoaderClient): m_hasRepresentation is moved to
+ the last position in the initialization list.
+
+2011-02-04 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] WebKitWebFrame can return a stale frame name when calling webkit_web_frame_get_name
+ https://bugs.webkit.org/show_bug.cgi?id=53797
+
+ When the frame name changes between different calls to webkit_web_frame_get_name
+ on the same frame, return the new frame name instead of the one valid during the
+ previous call.
+
+ * webkit/webkitwebframe.cpp:
+ (webkit_web_frame_init): Initialize the frame name to 0.
+ (webkit_web_frame_get_name): Check the current frame name first before
+ returning the cached value.
+
+2011-02-04 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] fast/events/pagehide-timeout.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53771
+
+ Add the document browser cache model. This model is optimized for viewing
+ a series of local files, while the document viewer is optimized for only
+ viewing one local file. Improve the documentation on the mapping of these
+ enum values to actual cache settings.
+
+ * webkit/webkitglobals.cpp:
+ (webkit_set_cache_model): Add support for the document browser cache model and
+ improve comments in this section better explaining where the magic numbers come from.
+ * webkit/webkitglobals.h: Added an enum value for the document browser cache model.
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorFrontendClient::InspectorFrontendClient):
+ * WebCoreSupport/InspectorClientGtk.h:
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::didRunInsecureContent):
+ * WebCoreSupport/FrameLoaderClientGtk.h:
+
+2011-02-03 Joone Hur <joone.hur@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] No need to set text encoding in the provisional phase
+ https://bugs.webkit.org/show_bug.cgi?id=53487
+
+ According to changeset 67253, setEncoding could be called multiple times from
+ committedLoad, finishedLoading, dispatchDidFailLoading, and setMainDocumentError
+ in FrameLoaderClient. To fix this, the relevant code was removed from
+ FrameLoaderClient and moved to DocumentLoader::commitData. However, that
+ code was not removed from FrameLoaderClient::finishedLoading in WebKitGtk+.
+
+ Due to this reason, after loading a html document, other ports initialize the
+ text encoding from FrameLoaderClient::finishedLoading, but WebKitGtk+ sets
+ the same encoding again, even tries to set encoding in the provisional phase.
+ This causes unnecessary encoding setting.
+
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::FrameLoaderClient::FrameLoaderClient): Set m_hasRepresentation to false.
+ (WebKit::FrameLoaderClient::makeRepresentation): Set m_hasRepresentation to true.
+ (WebKit::FrameLoaderClient::revertToProvisionalState): Set m_hasRepresentation to true.
+ (WebKit::FrameLoaderClient::finishedLoading): Skip the encoding setting when
+ m_hasRepresentation is false.
+ * WebCoreSupport/FrameLoaderClientGtk.h: Added m_hasRepresentation.
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ Update the NEWS file in preparation for the 1.3.11 release.
+
+ * NEWS: Update the NEWS.
+
+2011-02-02 Dan Winship <danw@gnome.org>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] drop soup cache stuff, which has been moved to libsoup
+ https://bugs.webkit.org/show_bug.cgi?id=50747
+
+ * GNUmakefile.am: Remove old cache files.
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Removal of right()/bottom(), converting to maxX()/maxY().
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_popup_menu_handler):
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] atk_text_set_caret_offset fails for list items
+ https://bugs.webkit.org/show_bug.cgi?id=53388
+
+ Update unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkCaretOffsets): Ensure setting the caret in a list
+ item through the AtkText interface is possible.
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] character range extents is off when the end of a wrapped line is included
+ https://bugs.webkit.org/show_bug.cgi?id=53323
+
+ Update unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkGetExtents): Check that the extent for a full line
+ are the same height than for a partial section of the same line.
+
+2011-02-01 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Caret Offset is one off at the end of wrapped lines
+ https://bugs.webkit.org/show_bug.cgi?id=53300
+
+ Update unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces): Set and get
+ the caret offset at the edge of the line.
+
+2011-01-31 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] atk_text_set_caret_offset returns True even when it is unsuccessful
+ https://bugs.webkit.org/show_bug.cgi?id=53389
+
+ New unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkCaretOffsets): New.
+ (main): Add new test.
+
+2011-01-29 Dan Winship <danw@gnome.org>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Remove HAVE_LIBSOUP_2_29_90 and HAVE_GSETTINGS conditionals;
+ we depend on glib 2.27.4 and libsoup 2.33.1 now.
+ https://bugs.webkit.org/show_bug.cgi?id=50675
+
+ * GNUmakefile.am:
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorClient::storeSetting):
+ * webkit/webkitprivate.cpp:
+ (inspectorGSettings):
+ * webkit/webkitprivate.h:
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/ChromeClientGtk.h:
+
+2011-01-28 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Fix compilation warning
+ https://bugs.webkit.org/show_bug.cgi?id=53292
+
+ * webkit/webkitwebframe.cpp:
+ (draw_page_callback): Cast the pageCount from size_t to int, it
+ should be safe considering page_nr is the number of pages,
+ 0-based.
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_get_icon_uri):
+
+2011-01-27 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Space characters in source document interfere with reported caret offset
+ https://bugs.webkit.org/show_bug.cgi?id=53033
+
+ New unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces): New.
+ (main): Add new unit test.
+
+2011-01-26 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Reliable crash with getTextAtOffset()
+ https://bugs.webkit.org/show_bug.cgi?id=53131
+
+ New unit test to check the fix for this bug.
+
+ * tests/testatk.c:
+ (testWebkitAtkGetTextAtOffsetWithSpecialCharacters): New.
+ (main): Add new unit test.
+
2011-01-21 Carlos Garcia Campos <cgarcia@igalia.com>
Reviewed by Martin Robinson.
diff --git a/Source/WebKit/gtk/GNUmakefile.am b/Source/WebKit/gtk/GNUmakefile.am
index c69d6ea..d207e00 100644
--- a/Source/WebKit/gtk/GNUmakefile.am
+++ b/Source/WebKit/gtk/GNUmakefile.am
@@ -98,7 +98,6 @@ libwebkitgtk_@WEBKITGTK_API_MAJOR_VERSION@_@WEBKITGTK_API_MINOR_VERSION@_la_LIBA
$(OLE32_LIBS)
webkitgtk_static_h_api += \
- $(srcdir)/Source/WebCore/platform/network/soup/cache/webkit/soup-cache.h \
$(srcdir)/Source/WebKit/gtk/webkit/webkit.h \
$(srcdir)/Source/WebKit/gtk/webkit/webkitdefines.h \
$(srcdir)/Source/WebKit/gtk/webkit/webkitdownload.h \
@@ -160,6 +159,7 @@ webkitgtk_sources += \
Source/WebCore/bindings/gobject/WebKitDOMObject.h \
Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp \
Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.h \
+ Source/WebKit/gtk/WebCoreSupport/AssertMatchingEnums.cpp \
Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp \
Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h \
Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp \
@@ -261,7 +261,6 @@ $(WEBKIT_GIRSOURCES): $(G_IR_SCANNER) $(JSCORE_GIRSOURCES) libwebkitgtk-@WEBKITG
--add-include-path=$(WebKit) \
--add-include-path=$(top_builddir) \
-I$(srcdir)/Source \
- -I$(top_srcdir)/Source/WebCore/platform/network/soup/cache \
-I$(WebKit) \
-I$(GENSOURCES) \
-I$(GENSOURCES_WEBKIT) \
@@ -349,10 +348,8 @@ $(GENSOURCES_WEBKIT)/webkitenumtypes.cpp: $(webkitgtk_h_api) $(WebKit)/GNUmakefi
&& rm -f xgen-gtc
# GSettings
-if USE_GSETTINGS
gsettings_SCHEMAS = $(top_builddir)/Source/WebKit/gtk/org.webkitgtk-@WEBKITGTK_API_VERSION@.gschema.xml
@GSETTINGS_RULES@
-endif
EXTRA_DIST += \
$(WebKit)/ChangeLog \
@@ -379,7 +376,6 @@ noinst_PROGRAMS += $(TEST_PROGS)
webkit_tests_cflags = \
-fno-strict-aliasing \
-I$(srcdir)/Source/JavaScriptCore/ForwardingHeaders \
- -I$(WebCore)/platform/network/soup/cache \
-I$(WebKit) \
-I$(GENSOURCES) \
-I$(top_builddir)/Source/WebKit/gtk \
diff --git a/Source/WebKit/gtk/NEWS b/Source/WebKit/gtk/NEWS
index cf77371..8d6e88e 100644
--- a/Source/WebKit/gtk/NEWS
+++ b/Source/WebKit/gtk/NEWS
@@ -1,4 +1,17 @@
=================
+WebKitGTK+ 1.3.11
+=================
+
+What's new in WebKitGTK+ 1.3.11?
+
+ - Add a beginDragWithFiles implementation for the GTK+ event sender.
+ - ResourceHandleSoup do not wait for streams to close to issue
+ didFinishLoading.
+ - Move the request/cache code to libsoup.
+ - A11y bugfixes.
+ - Many other bugfixes.
+
+=================
WebKitGTK+ 1.3.10
=================
diff --git a/Source/WebKit/gtk/WebCoreSupport/AssertMatchingEnums.cpp b/Source/WebKit/gtk/WebCoreSupport/AssertMatchingEnums.cpp
new file mode 100644
index 0000000..9c596f8
--- /dev/null
+++ b/Source/WebKit/gtk/WebCoreSupport/AssertMatchingEnums.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2011 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+// Use this file to assert that various WebKit API enum values continue
+// matching WebCore defined enum values.
+
+#include "config.h"
+
+#include "DumpRenderTreeSupportGtk.h"
+#include "FindOptions.h"
+#include <wtf/Assertions.h>
+
+#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, webcore_name) \
+ COMPILE_ASSERT(int(WebKit::webkit_name) == int(WebCore::webcore_name), mismatching_enums)
+
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsCaseInsensitive , CaseInsensitive);
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsAtWordStarts, AtWordStarts);
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsTreatMedialCapitalAsWordStart, TreatMedialCapitalAsWordStart);
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsBackwards, Backwards);
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsWrapAround, WrapAround);
+COMPILE_ASSERT_MATCHING_ENUM(WebFindOptionsStartInSelection, StartInSelection);
diff --git a/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp b/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
index 04ee8ba..bbfdd72 100644
--- a/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
+++ b/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
@@ -674,6 +674,11 @@ bool ChromeClient::selectItemWritingDirectionIsNatural()
return true;
}
+bool ChromeClient::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<WebCore::PopupMenu> ChromeClient::createPopupMenu(WebCore::PopupMenuClient* client) const
{
return adoptRef(new PopupMenuGtk(client));
diff --git a/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h b/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
index d607c54..d7644eb 100644
--- a/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
+++ b/Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
@@ -128,8 +128,6 @@ namespace WebKit {
virtual void formStateDidChange(const WebCore::Node*) { }
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
virtual void setCursor(const WebCore::Cursor&);
virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const {}
@@ -137,6 +135,7 @@ namespace WebKit {
virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*);
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
#if ENABLE(VIDEO)
diff --git a/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp b/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
index 836ec28..33ab4fa 100644
--- a/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
+++ b/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
@@ -151,12 +151,6 @@ void DragClient::drawDragIconWindow(GtkWidget* widget, cairo_t* context)
cairo_fill(context);
}
-DragImageRef DragClient::createDragImageForLink(KURL&, const String&, Frame*)
-{
- notImplemented();
- return 0;
-}
-
void DragClient::dragControllerDestroyed()
{
delete this;
diff --git a/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h b/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h
index 3a16ae5..4135ea3 100644
--- a/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h
+++ b/Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h
@@ -50,7 +50,6 @@ namespace WebKit {
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint);
virtual void startDrag(WebCore::DragImageRef dragImage, const WebCore::IntPoint& dragImageOrigin, const WebCore::IntPoint& eventPos, WebCore::Clipboard*, WebCore::Frame*, bool linkDrag = false);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const WTF::String& label, WebCore::Frame*);
virtual void dragControllerDestroyed();
diff --git a/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp b/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
index 6f31887..83f7c21 100644
--- a/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
+++ b/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
@@ -2,6 +2,7 @@
* Copyright (C) Research In Motion Limited 2010. All rights reserved.
* Copyright (C) 2010 Joone Hur <joone@kldp.org>
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -47,7 +48,9 @@
#include "RenderTreeAsText.h"
#include "RenderView.h"
#include "SecurityOrigin.h"
+#include "TextIterator.h"
#include "WorkerThread.h"
+#include "webkitglobalsprivate.h"
#include "webkitwebframe.h"
#include "webkitwebframeprivate.h"
#include "webkitwebview.h"
@@ -93,6 +96,11 @@ bool DumpRenderTreeSupportGtk::linksIncludedInFocusChain()
return s_linksIncludedInTabChain;
}
+void DumpRenderTreeSupportGtk::setIconDatabaseEnabled(bool enabled)
+{
+ WebKit::setIconDatabaseEnabled(enabled);
+}
+
JSValueRef DumpRenderTreeSupportGtk::nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping)
{
JSLock lock(SilenceAssertionsOnly);
@@ -466,6 +474,102 @@ bool DumpRenderTreeSupportGtk::isCommandEnabled(WebKitWebView* webView, const gc
return core(webView)->focusController()->focusedOrMainFrame()->editor()->command(name).isEnabled();
}
+void DumpRenderTreeSupportGtk::setComposition(WebKitWebView* webView, const char* text, int start, int end)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+ g_return_if_fail(text);
+
+ Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!frame)
+ return;
+
+ Editor* editor = frame->editor();
+ if (!editor)
+ return;
+ if (!editor->canEdit() && !editor->hasComposition())
+ return;
+
+ String compositionString = String::fromUTF8(text);
+ Vector<CompositionUnderline> underlines;
+ underlines.append(CompositionUnderline(0, compositionString.length(), Color(0, 0, 0), false));
+ editor->setComposition(compositionString, underlines, start, end);
+}
+
+void DumpRenderTreeSupportGtk::confirmComposition(WebKitWebView* webView, const char* text)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+ Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!frame)
+ return;
+
+ Editor* editor = frame->editor();
+ if (!editor || (!editor->hasComposition() && !text))
+ return;
+
+ if (editor->hasComposition()) {
+ if (text)
+ editor->confirmComposition(String::fromUTF8(text));
+ else
+ editor->confirmComposition();
+ } else
+ editor->insertText(String::fromUTF8(text), 0);
+}
+
+bool DumpRenderTreeSupportGtk::firstRectForCharacterRange(WebKitWebView* webView, int location, int length, GdkRectangle* rect)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), false);
+ g_return_val_if_fail(rect, false);
+
+ if ((location + length < location) && (location + length))
+ length = 0;
+
+ Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!frame)
+ return false;
+
+ Editor* editor = frame->editor();
+ if (!editor)
+ return false;
+
+ Element* selectionRoot = frame->selection()->rootEditableElement();
+ Element* scope = selectionRoot ? selectionRoot : frame->document()->documentElement();
+ RefPtr<Range> range = TextIterator::rangeFromLocationAndLength(scope, location, length);
+ if (!range)
+ return false;
+
+ *rect = editor->firstRectForRange(range.get());
+
+ return true;
+}
+
+bool DumpRenderTreeSupportGtk::selectedRange(WebKitWebView* webView, int* start, int* end)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), false);
+ g_return_val_if_fail(start, false);
+ g_return_val_if_fail(end, false);
+
+ Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!frame)
+ return false;
+
+ RefPtr<Range> range = frame->selection()->toNormalizedRange().get();
+
+ Element* selectionRoot = frame->selection()->rootEditableElement();
+ Element* scope = selectionRoot ? selectionRoot : frame->document()->documentElement();
+
+ RefPtr<Range> testRange = Range::create(scope->document(), scope, 0, range->startContainer(), range->startOffset());
+ ASSERT(testRange->startContainer() == scope);
+ *start = TextIterator::rangeLength(testRange.get());
+
+ ExceptionCode ec;
+ testRange->setEnd(range->endContainer(), range->endOffset(), ec);
+ ASSERT(testRange->startContainer() == scope);
+ *end = TextIterator::rangeLength(testRange.get());
+
+ return true;
+}
+
void DumpRenderTreeSupportGtk::whiteListAccessFromOrigin(const gchar* sourceOrigin, const gchar* destinationProtocol, const gchar* destinationHost, bool allowDestinationSubdomains)
{
SecurityOrigin::addOriginAccessWhitelistEntry(*SecurityOrigin::createFromString(sourceOrigin), destinationProtocol, destinationHost, allowDestinationSubdomains);
@@ -532,3 +636,9 @@ bool DumpRenderTreeSupportGtk::webkitWebFrameSelectionHasSpellingMarker(WebKitWe
return core(frame)->editor()->selectionStartHasSpellingMarkerFor(from, length);
}
+
+bool DumpRenderTreeSupportGtk::findString(WebKitWebView* webView, const gchar* targetString, WebKitFindOptions findOptions)
+{
+ return core(webView)->findString(String::fromUTF8(targetString), findOptions);
+}
+
diff --git a/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h b/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
index 663f13a..553d7bb 100644
--- a/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
+++ b/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
@@ -19,7 +19,6 @@
#ifndef DumpRenderTreeSupportGtk_h
#define DumpRenderTreeSupportGtk_h
-
#include "JSStringRef.h"
#include <webkit/webkitdefines.h>
@@ -29,6 +28,20 @@
#include <webkit/webkitwebframe.h>
#include <wtf/text/CString.h>
+namespace WebKit {
+
+enum {
+ WebFindOptionsCaseInsensitive = 1 << 0,
+ WebFindOptionsAtWordStarts = 1 << 1,
+ WebFindOptionsTreatMedialCapitalAsWordStart = 1 << 2,
+ WebFindOptionsBackwards = 1 << 3,
+ WebFindOptionsWrapAround = 1 << 4,
+ WebFindOptionsStartInSelection = 1 << 5
+};
+
+}
+typedef unsigned WebKitFindOptions;
+
class DumpRenderTreeSupportGtk {
public:
@@ -40,6 +53,7 @@ public:
static void setLinksIncludedInFocusChain(bool);
static bool linksIncludedInFocusChain();
+ static void setIconDatabaseEnabled(bool);
static JSValueRef nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping);
static void dumpConfigurationForViewport(WebKitWebView* webView, gint availableWidth, gint availableHeight);
@@ -70,6 +84,11 @@ public:
// WebKitWebView
static void executeCoreCommandByName(WebKitWebView*, const gchar* name, const gchar* value);
static bool isCommandEnabled(WebKitWebView*, const gchar* name);
+ static bool findString(WebKitWebView*, const gchar*, WebKitFindOptions);
+ static void setComposition(WebKitWebView*, const char* text, int start, int end);
+ static void confirmComposition(WebKitWebView*, const char* text);
+ static bool firstRectForCharacterRange(WebKitWebView*, int location, int length, GdkRectangle*);
+ static bool selectedRange(WebKitWebView*, int* start, int* end);
// GC
static void gcCollectJavascriptObjects();
diff --git a/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp b/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
index 8f1a819..875455a 100644
--- a/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
+++ b/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
@@ -98,6 +98,7 @@ FrameLoaderClient::FrameLoaderClient(WebKitWebFrame* frame)
, m_loadingErrorPage(false)
, m_pluginView(0)
, m_hasSentResponseToPlugin(false)
+ , m_hasRepresentation(false)
{
ASSERT(m_frame);
}
@@ -606,7 +607,7 @@ PassRefPtr<Frame> FrameLoaderClient::createFrame(const KURL& url, const String&
g_signal_emit_by_name(webView, "frame-created", kitFrame);
- childFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
+ parentFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
// The frame's onload handler may have removed it from the document.
if (!childFrame->tree()->parent())
@@ -773,14 +774,14 @@ void FrameLoaderClient::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClient::didRunInsecureContent(SecurityOrigin*)
+void FrameLoaderClient::didRunInsecureContent(SecurityOrigin*, const KURL&)
{
notImplemented();
}
void FrameLoaderClient::makeRepresentation(WebCore::DocumentLoader*)
{
- notImplemented();
+ m_hasRepresentation = true;
}
void FrameLoaderClient::forceLayout()
@@ -834,7 +835,7 @@ void FrameLoaderClient::dispatchDidChangeLocationWithinPage()
{
WebKitWebFramePrivate* priv = m_frame->priv;
g_free(priv->uri);
- priv->uri = g_strdup(core(m_frame)->loader()->url().prettyURL().utf8().data());
+ priv->uri = g_strdup(core(m_frame)->document()->url().prettyURL().utf8().data());
g_object_notify(G_OBJECT(m_frame), "uri");
WebKitWebView* webView = getViewFromFrame(m_frame);
if (m_frame == webkit_web_view_get_main_frame(webView))
@@ -980,7 +981,7 @@ void FrameLoaderClient::dispatchDidLoadMainResource(WebCore::DocumentLoader*)
void FrameLoaderClient::revertToProvisionalState(WebCore::DocumentLoader*)
{
- notImplemented();
+ m_hasRepresentation = true;
}
void FrameLoaderClient::willChangeTitle(WebCore::DocumentLoader*)
@@ -1028,8 +1029,10 @@ String FrameLoaderClient::generatedMIMETypeForURLScheme(const String&) const
void FrameLoaderClient::finishedLoading(WebCore::DocumentLoader* documentLoader)
{
if (!m_pluginView) {
- FrameLoader* loader = documentLoader->frameLoader();
- loader->writer()->setEncoding(m_response.textEncodingName(), false);
+ // This is necessary to create an empty document,
+ // but it has to be skipped in the provisional phase.
+ if (m_hasRepresentation)
+ documentLoader->writer()->setEncoding("", false);
} else {
m_pluginView->didFinishLoading();
m_pluginView = 0;
diff --git a/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h b/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
index d8d3684..2e8a2dd 100644
--- a/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
+++ b/Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
@@ -146,7 +146,7 @@ namespace WebKit {
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
@@ -201,6 +201,8 @@ namespace WebKit {
// Plugin view to redirect data to
WebCore::PluginView* m_pluginView;
bool m_hasSentResponseToPlugin;
+
+ bool m_hasRepresentation;
};
}
diff --git a/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp b/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
index 31af243..66f375a 100644
--- a/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
+++ b/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
@@ -23,6 +23,7 @@
#include "Frame.h"
#include "InspectorController.h"
#include "NotImplemented.h"
+#include "Page.h"
#include "PlatformString.h"
#include "webkitversion.h"
#include "webkitwebinspector.h"
@@ -40,6 +41,64 @@ static void notifyWebViewDestroyed(WebKitWebView* webView, InspectorFrontendClie
inspectorFrontendClient->destroyInspectorWindow(true);
}
+namespace {
+
+class InspectorFrontendSettingsGtk : public InspectorFrontendClientLocal::Settings {
+private:
+ virtual ~InspectorFrontendSettingsGtk() { }
+#ifdef HAVE_GSETTINGS
+ static bool shouldIgnoreSetting(const String& key)
+ {
+ // GSettings considers trying to fetch or set a setting that is
+ // not backed by a schema as programmer error, and aborts the
+ // program's execution. We check here to avoid having an unhandled
+ // setting as a fatal error.
+ LOG_VERBOSE(NotYetImplemented, "Unknown key ignored: %s", key.ascii().data());
+ return true;
+ }
+
+ virtual String getProperty(const String& name)
+ {
+ if (shouldIgnoreSetting(name))
+ return String();
+
+ GSettings* settings = inspectorGSettings();
+ if (!settings)
+ return String();
+
+ GRefPtr<GVariant> variant = adoptGRef(g_settings_get_value(settings, name.utf8().data()));
+ return String(g_variant_get_string(variant.get(), 0));
+ }
+
+ virtual void setProperty(const String& name, const String& value)
+ {
+ // Avoid setting unknown keys to avoid aborting the execution.
+ if (shouldIgnoreSetting(name))
+ return;
+
+ GSettings* settings = inspectorGSettings();
+ if (!settings)
+ return;
+
+ GRefPtr<GVariant> variant = adoptGRef(g_variant_new_string(value.utf8().data()));
+ g_settings_set_value(settings, name.utf8().data(), variant.get());
+ }
+#else
+ virtual String getProperty(const String&)
+ {
+ notImplemented();
+ return String();
+ }
+
+ virtual void setProperty(const String&, const String&)
+ {
+ notImplemented();
+ }
+#endif // HAVE_GSETTINGS
+};
+
+} // namespace
+
InspectorClient::InspectorClient(WebKitWebView* webView)
: m_inspectedWebView(webView)
, m_frontendPage(0)
@@ -113,117 +172,6 @@ void InspectorClient::hideHighlight()
gtk_widget_queue_draw(GTK_WIDGET(m_inspectedWebView));
}
-#ifdef HAVE_GSETTINGS
-static String toGSettingName(String inspectorSettingName)
-{
- if (inspectorSettingName == "resourceTrackingEnabled")
- return String("resource-tracking-enabled");
-
- if (inspectorSettingName == "xhrMonitor")
- return String("xhr-monitor-enabled");
-
- if (inspectorSettingName == "frontendSettings")
- return String("frontend-settings");
-
- if (inspectorSettingName == "debuggerEnabled")
- return String("debugger-enabled");
-
- if (inspectorSettingName == "profilerEnabled")
- return String("profiler-enabled");
-
- return inspectorSettingName;
-}
-
-static String truthStringFromVariant(GVariant* variant)
-{
- if (g_variant_get_boolean(variant))
- return String("true");
-
- return String("false");
-}
-
-static GVariant* variantFromTruthString(const String& truth)
-{
- if (truth == "true")
- return g_variant_new_boolean(TRUE);
-
- return g_variant_new_boolean(FALSE);
-}
-
-static bool shouldIgnoreSetting(const String& key)
-{
- // Ignore this setting for now, it doesn't seem to be used for
- // anything right now.
- if (key == "lastActivePanel")
- return true;
-
- // GSettings considers trying to fetch or set a setting that is
- // not backed by a schema as programmer error, and aborts the
- // program's execution. We check here to avoid having an unhandled
- // setting as a fatal error.
- if (key == "resourceTrackingEnabled" || key == "xhrMonitor"
- || key == "frontendSettings" || key == "debuggerEnabled"
- || key == "profilerEnabled")
- return false;
-
- LOG_VERBOSE(NotYetImplemented, "Unknown key ignored: %s", key.ascii().data());
- return true;
-}
-
-void InspectorClient::populateSetting(const String& key, String* value)
-{
- if (shouldIgnoreSetting(key))
- return;
-
- GSettings* settings = inspectorGSettings();
- if (!settings)
- return;
-
- GRefPtr<GVariant> variant = adoptGRef(g_settings_get_value(settings, toGSettingName(key).utf8().data()));
-
- if (key == "resourceTrackingEnabled" || key == "xhrMonitor"
- || key == "debuggerEnabled" || key == "profilerEnabled")
- *value = truthStringFromVariant(variant.get());
- else if (key == "frontendSettings")
- *value = String(g_variant_get_string(variant.get(), 0));
-}
-
-void InspectorClient::storeSetting(const String& key, const String& value)
-{
- if (shouldIgnoreSetting(key))
- return;
-
- GSettings* settings = inspectorGSettings();
- if (!settings)
- return;
-
- GRefPtr<GVariant> variant(0);
-
- // Set the key with the appropriate type, and also avoid setting
- // unknown keys to avoid aborting the execution.
- if (key == "resourceTrackingEnabled" || key == "xhrMonitor"
- || key == "debuggerEnabled" || key == "profilerEnabled")
- variant = adoptGRef(variantFromTruthString(value));
- else if (key == "frontendSettings")
- variant = adoptGRef(g_variant_new_string(value.utf8().data()));
-
- if (!variant)
- return;
-
- g_settings_set_value(settings, toGSettingName(key).utf8().data(), variant.get());
-}
-#else
-void InspectorClient::populateSetting(const String&, String*)
-{
- notImplemented();
-}
-
-void InspectorClient::storeSetting(const String&, const String&)
-{
- notImplemented();
-}
-#endif // HAVE_GSETTINGS
-
bool InspectorClient::sendMessageToFrontend(const String& message)
{
return doDispatchMessageOnFrontendPage(m_frontendPage, message);
@@ -244,7 +192,7 @@ const char* InspectorClient::inspectorFilesPath()
}
InspectorFrontendClient::InspectorFrontendClient(WebKitWebView* inspectedWebView, WebKitWebView* inspectorWebView, WebKitWebInspector* webInspector, Page* inspectorPage, InspectorClient* inspectorClient)
- : InspectorFrontendClientLocal(core(inspectedWebView)->inspectorController(), inspectorPage)
+ : InspectorFrontendClientLocal(core(inspectedWebView)->inspectorController(), inspectorPage, new InspectorFrontendSettingsGtk())
, m_inspectorWebView(inspectorWebView)
, m_inspectedWebView(inspectedWebView)
, m_webInspector(webInspector)
diff --git a/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.h b/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.h
index 08038f6..d5918ba 100644
--- a/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.h
+++ b/Source/WebKit/gtk/WebCoreSupport/InspectorClientGtk.h
@@ -59,9 +59,6 @@ namespace WebKit {
virtual void highlight(WebCore::Node*);
virtual void hideHighlight();
- virtual void populateSetting(const WTF::String& key, WTF::String* value);
- virtual void storeSetting(const WTF::String& key, const WTF::String& value);
-
virtual bool sendMessageToFrontend(const WTF::String&);
void releaseFrontendPage();
diff --git a/Source/WebKit/gtk/po/ChangeLog b/Source/WebKit/gtk/po/ChangeLog
index d65468e..891c4ef 100644
--- a/Source/WebKit/gtk/po/ChangeLog
+++ b/Source/WebKit/gtk/po/ChangeLog
@@ -1,3 +1,82 @@
+2011-02-10 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ French translation for Webkit/GTK
+ https://bugs.webkit.org/show_bug.cgi?id=26108
+
+ * fr.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ Update Simplified Chinese (zh_CN) translation of WebKitGtk
+ https://bugs.webkit.org/show_bug.cgi?id=42496
+
+ * zh_CN.po: Updated.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Please add Greek translation of WebkitGTK+
+ https://bugs.webkit.org/show_bug.cgi?id=34482
+
+ * gr.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ Arabic translation
+ https://bugs.webkit.org/show_bug.cgi?id=36340
+
+ * ar.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ Attached is the Bulgarian translation of WebKit Gtk
+ https://bugs.webkit.org/show_bug.cgi?id=44400
+
+ * bg.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ [l10n] Indonesian translation
+ https://bugs.webkit.org/show_bug.cgi?id=46455
+
+ * id.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ [l10n] Polish translation of WebKitGTK+
+ https://bugs.webkit.org/show_bug.cgi?id=46567
+
+ * pl.po: Added.
+
+2011-02-09 Christian Dywan <christian@lanedo.com>
+
+ Unreviewed translation file.
+
+ [Gtk] Please add Hungarian translation
+ https://bugs.webkit.org/show_bug.cgi?id=34543
+
+ * hu.po: Added.
+
+2011-02-02 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] po files path update after the code moved to Source
+ https://bugs.webkit.org/show_bug.cgi?id=53599
+
+ * POTFILES: Add Source to the path of the files.
+
2011-01-16 Adam Barth <abarth@webkit.org>
Rubber-stamped by Eric Seidel.
diff --git a/Source/WebKit/gtk/po/POTFILES b/Source/WebKit/gtk/po/POTFILES
index ffd0015..fe3167c 100644
--- a/Source/WebKit/gtk/po/POTFILES
+++ b/Source/WebKit/gtk/po/POTFILES
@@ -1,13 +1,13 @@
# List of source files which contain translatable strings.
-WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
-WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp
-WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp
-WebKit/gtk/webkit/webkitdownload.cpp
-WebKit/gtk/webkit/webkitsoupauthdialog.c
-WebKit/gtk/webkit/webkitwebframe.cpp
-WebKit/gtk/webkit/webkitwebhistoryitem.cpp
-WebKit/gtk/webkit/webkitwebinspector.cpp
-WebKit/gtk/webkit/webkitwebnavigationaction.cpp
-WebKit/gtk/webkit/webkitwebsettings.cpp
-WebKit/gtk/webkit/webkitwebview.cpp
-WebCore/platform/gtk/LocalizedStringsGtk.cpp
+Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
+Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp
+Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp
+Source/WebKit/gtk/webkit/webkitdownload.cpp
+Source/WebKit/gtk/webkit/webkitsoupauthdialog.c
+Source/WebKit/gtk/webkit/webkitwebframe.cpp
+Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp
+Source/WebKit/gtk/webkit/webkitwebinspector.cpp
+Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
+Source/WebKit/gtk/webkit/webkitwebsettings.cpp
+Source/WebKit/gtk/webkit/webkitwebview.cpp
+Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp
diff --git a/Source/WebKit/gtk/po/ar.po b/Source/WebKit/gtk/po/ar.po
new file mode 100644
index 0000000..fa7b6ca
--- /dev/null
+++ b/Source/WebKit/gtk/po/ar.po
@@ -0,0 +1,1080 @@
+# This file is put in the public domain.
+# Khaled Hosny <khaledhosny@eglug.org>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: webkit 1.1.4\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
+"POT-Creation-Date: 2010-02-25 15:53-0300\n"
+"PO-Revision-Date: 2010-03-19 06:43+0300\n"
+"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Virtaal 0.5.2\n"
+
+#: WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:535
+msgid "Upload File"
+msgstr "ارÙع ملÙا"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:61
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:143
+msgid "Input _Methods"
+msgstr "طرق ال_إدخال"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:78
+msgid "LRM _Left-to-right mark"
+msgstr "علامة يسار إلى _يمين (LRM)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "RLM _Right-to-left mark"
+msgstr "علامة ي_مين إلى يسار (RLM)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRE Left-to-right _embedding"
+msgstr "_غرس يسار إلى يمين (LRE)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLE Right-to-left e_mbedding"
+msgstr "غ_رس يمين إلى يسار (RLE)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRO Left-to-right _override"
+msgstr "_تخطي يسار إلى يمين (LRO)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLO Right-to-left o_verride"
+msgstr "ت_خطي يمين إلى يسار (RLO)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "PDF _Pop directional formatting"
+msgstr "أزل تن_سيق الاتجاه (PDF)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "ZWS _Zero width space"
+msgstr "مساÙØ© _صÙرية العرض (ZWS)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWJ Zero width _joiner"
+msgstr "_واصل صÙري العرض (ZWJ)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "_Ùاصل صÙري العرض (ZWNJ)"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:109
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:138
+msgid "_Insert Unicode Control Character"
+msgstr "أ_درج محر٠تحكم يونيكود"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:266
+msgid "Network Request"
+msgstr "طلب الشبكة"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:267
+msgid "The network request for the URI that should be downloaded"
+msgstr "طلب الشبكة للمسار الذي سيÙنزّل"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:281
+msgid "Network Response"
+msgstr "استجابة الشبكة"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:282
+msgid "The network response for the URI that should be downloaded"
+msgstr "استجابة الشبكة للمسار الذي سيÙنزّل"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:296
+msgid "Destination URI"
+msgstr "المسار المقصÙد"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:297
+msgid "The destination URI where to save the file"
+msgstr "مسار Ø­Ùظ الملÙ"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:311
+msgid "Suggested Filename"
+msgstr "اسم المل٠المقترح"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:312
+msgid "The filename suggested as default when saving"
+msgstr "اسم المل٠المقترح مبدئيا عند الحÙظ"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:329
+msgid "Progress"
+msgstr "التقدّم"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:330
+msgid "Determines the current progress of the download"
+msgstr "يحدد التقدم الحالي للتنزيل"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:343
+msgid "Status"
+msgstr "الحالة"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:344
+msgid "Determines the current status of the download"
+msgstr "يحدد الحالة الحالية للتنزيل"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:359
+msgid "Current Size"
+msgstr "الحجم الحالي"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:360
+msgid "The length of the data already downloaded"
+msgstr "حجم البيانات التي Ù†ÙزّÙلت بالÙعل"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:374
+msgid "Total Size"
+msgstr "الحجم الكلي"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:375
+msgid "The total size of the file"
+msgstr "الحجم الكلي للملÙ"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:526
+msgid "User cancelled the download"
+msgstr "ألغى المستخدم التنزيل"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:248
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "يطلب الموقع %s اسم مستخدم وكلمة سر"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:278
+msgid "Server message:"
+msgstr "رسالة الخادوم:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:291
+msgid "Username:"
+msgstr "اسم المستخدم:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:293
+msgid "Password:"
+msgstr "كلمة السر:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:302
+msgid "_Remember password"
+msgstr "ت_ذكّر كلمة السر"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:298
+msgid "Name"
+msgstr "الاسم"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:299
+msgid "The name of the frame"
+msgstr "اسم الإطار"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:305
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:146
+#: WebKit/gtk/webkit/webkitwebview.cpp:2318
+msgid "Title"
+msgstr "العنوان"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:306
+msgid "The document title of the frame"
+msgstr "عنوان المستند للإطار"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:312
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:178
+#: WebKit/gtk/webkit/webkitwebview.cpp:2332
+msgid "URI"
+msgstr "المسار"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:313
+msgid "The current URI of the contents displayed by the frame"
+msgstr "المسار الحالي للمحتوى المعروض ÙÙŠ الإطار"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:344
+msgid "Horizontal Scrollbar Policy"
+msgstr "سياسة عمود الل٠الأÙقي"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:345
+msgid ""
+"Determines the current policy for the horizontal scrollbar of the frame."
+msgstr "تحدد سياسة عمود الل٠الأÙقي الحالية للإطار."
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:362
+msgid "Vertical Scrollbar Policy"
+msgstr "سياسة عمود الل٠الرأسي"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:363
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr "تحدد سياسة عمود الل٠الرأسي الحالية للإطار."
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:147
+msgid "The title of the history item"
+msgstr "عنوان عنصر التأريخ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:162
+msgid "Alternate Title"
+msgstr "العنوان البديل"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:163
+msgid "The alternate title of the history item"
+msgstr "العنوان البديل لعنصر التأريخ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:179
+msgid "The URI of the history item"
+msgstr "مسار عنصر التأريخ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:194
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:173
+msgid "Original URI"
+msgstr "المسار الأصلي"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:195
+msgid "The original URI of the history item"
+msgstr "المسار الأصلي لعنصر التأريخ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:210
+msgid "Last visited Time"
+msgstr "وقت آخر زيارة"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:211
+msgid "The time at which the history item was last visited"
+msgstr "وقت آخر زيارة لعنصر التأريخ"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:268
+msgid "Web View"
+msgstr "منظور الوب"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:269
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "منظور الوب الذي يعرض ÙاحÙص الوب ذاته"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:282
+msgid "Inspected URI"
+msgstr "المسار المÙحوص"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:283
+msgid "The URI that is currently being inspected"
+msgstr "المسار الذي ÙŠÙÙحص حاليا"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:299
+msgid "Enable JavaScript profiling"
+msgstr "Ùعّل تحسين جاÙاسكربت"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:300
+msgid "Profile the executed JavaScript."
+msgstr "حسّ ونÙّذ جاÙاسكربت"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:315
+msgid "Enable Timeline profiling"
+msgstr "Ùعّل تحسين الخط الزمني"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:316
+msgid "Profile the WebCore instrumentation."
+msgstr "حسّن أداء وب‌كور."
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:158
+msgid "Reason"
+msgstr "السبب"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:159
+msgid "The reason why this navigation is occurring"
+msgstr "سبب حدوث هذا التصÙØ­"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:174
+msgid "The URI that was requested as the target for the navigation"
+msgstr "المسار الذي Ø·Ùلب مصدرا للتصÙØ­"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:188
+msgid "Button"
+msgstr "زر"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:189
+msgid "The button used to click"
+msgstr "الزر المستخدم للنقر"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:204
+msgid "Modifier state"
+msgstr "حالة المÙغيّر"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:205
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "قناع البت الممثل لحالة المÙغيّر"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:220
+msgid "Target frame"
+msgstr "الإطار الهدÙ"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:221
+msgid "The target frame for the navigation"
+msgstr "الإطار هد٠الإبحار"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:237
+msgid "Default Encoding"
+msgstr "الترميز المبدئي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:238
+msgid "The default encoding used to display text."
+msgstr "الترميز المبدئي المستخدم لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:246
+msgid "Cursive Font Family"
+msgstr "عائلة الخط المتصل"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:247
+msgid "The default Cursive font family used to display text."
+msgstr "عائلة الخط المتصل المبدئية المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:255
+msgid "Default Font Family"
+msgstr "عائلة الخط المبدئية"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:256
+msgid "The default font family used to display text."
+msgstr "عائلة الخط المبدئية المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:264
+msgid "Fantasy Font Family"
+msgstr "عائلة الخط الخيالي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:265
+msgid "The default Fantasy font family used to display text."
+msgstr "عائلة الخط الخيالي المبدئية المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:273
+msgid "Monospace Font Family"
+msgstr "عائلة الخط ثابت العرض"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:274
+msgid "The default font family used to display monospace text."
+msgstr "عائلة الخط ثابت العرض المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:282
+msgid "Sans Serif Font Family"
+msgstr "عائلة الخط غير المذيّل"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:283
+msgid "The default Sans Serif font family used to display text."
+msgstr "عائلة الخط غير المذيل المبدئية المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:291
+msgid "Serif Font Family"
+msgstr "عائلة الخط المذيّل"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:292
+msgid "The default Serif font family used to display text."
+msgstr "عائلة الخط المذيل المبدئية المستخدمة لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:300
+msgid "Default Font Size"
+msgstr "حجم الخط المبدئي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:301
+msgid "The default font size used to display text."
+msgstr "حجم الخط المبدئي المستخدم لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:309
+msgid "Default Monospace Font Size"
+msgstr "حجم الخط ثابت العرض المبدئي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:310
+msgid "The default font size used to display monospace text."
+msgstr "حجم الخط المبدئي المستخدم لعرض النص ثابت العرض."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:318
+msgid "Minimum Font Size"
+msgstr "الحد الأدنى لحجم خط"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:319
+msgid "The minimum font size used to display text."
+msgstr "الحد الأدنى لحجم الخط المستخدم لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:327
+msgid "Minimum Logical Font Size"
+msgstr "حجم الخط المنطقي الأدنى"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:328
+msgid "The minimum logical font size used to display text."
+msgstr "الحد الأدنى لحجم الخط المنطقي المستخدم لعرض النص."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:347
+msgid "Enforce 96 DPI"
+msgstr "اÙرض 96 نقطة\\بوصة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:348
+msgid "Enforce a resolution of 96 DPI"
+msgstr "اÙرض ميز 96 نقطة\\بوصة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:356
+msgid "Auto Load Images"
+msgstr "حمّل الصور تلقائيا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:357
+msgid "Load images automatically."
+msgstr "حمّل الصور تلقائيا."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:365
+msgid "Auto Shrink Images"
+msgstr "اكمش الصور تلقائيا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:366
+msgid "Automatically shrink standalone images to fit."
+msgstr "اكمش الصور المستقلة بذاتها تلقائيا لتناسب الصÙحة."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:374
+msgid "Print Backgrounds"
+msgstr "اطبع الخلÙيات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:375
+msgid "Whether background images should be printed."
+msgstr "ما إذا كانت صور الخلÙية ستÙطبع."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:383
+msgid "Enable Scripts"
+msgstr "Ùعّل السكربتات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:384
+msgid "Enable embedded scripting languages."
+msgstr "ما إذا كانت ستÙعل لغات البرمجة المضمنة."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:392
+msgid "Enable Plugins"
+msgstr "Ùعّل الملحقات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:393
+msgid "Enable embedded plugin objects."
+msgstr "ما إذا كانت ستÙعل عناصر الملحقات المضمنة."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:401
+msgid "Resizable Text Areas"
+msgstr "مناطق النص قابلة للتحجين"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:402
+msgid "Whether text areas are resizable."
+msgstr "ما إذا كانت مناطق النص قابلة للتحجيم."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:409
+msgid "User Stylesheet URI"
+msgstr "مسار صÙحة طراز المستخدم"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:410
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "مسار صÙحة طراز تطبّق على كل صÙحة."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:425
+msgid "Zoom Stepping Value"
+msgstr "قيمة زيادة التقريب"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:426
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr "القيمة التي يتغير بها مستوى التقريب مع كل رÙع أو Ø®Ùض."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:444
+msgid "Enable Developer Extras"
+msgstr "Ùعّل إضاÙيات المطورين"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:445
+msgid "Enables special extensions that help developers"
+msgstr "Ùعّل امتدادات خاصة تÙيد المطورين"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:465
+msgid "Enable Private Browsing"
+msgstr "Ùعّل التصÙØ­ الخاص"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:466
+msgid "Enables private browsing mode"
+msgstr "Ùعّل وضع التصÙØ­ الخاص"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:481
+msgid "Enable Spell Checking"
+msgstr "Ùعّل التدقيق الإملائي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:482
+msgid "Enables spell checking while typing"
+msgstr "Ùعّل التدقيق الإملائي أثناء الكتابة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:505
+msgid "Languages to use for spell checking"
+msgstr "اللغات التي ستستخدم ÙÙŠ التدقيق الإملائي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:506
+msgid "Comma separated list of languages to use for spell checking"
+msgstr "قائمة Ù…Ùصولة بÙاصلة من اللغات التي ستستخدم ÙÙŠ التدقيق الإملائي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:520
+msgid "Enable Caret Browsing"
+msgstr "Ùعّل التصÙØ­ بالمؤشر"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:521
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr "ما إذا سيÙÙعّل التصÙØ­ بÙأرة المÙاتيح المحسّن للإتاحة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:536
+msgid "Enable HTML5 Database"
+msgstr "Ùعّل قاعدة بيانات HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:537
+msgid "Whether to enable HTML5 database support"
+msgstr "ما إذا سيÙعل دعم قاعدة بيانات HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:552
+msgid "Enable HTML5 Local Storage"
+msgstr "Ùعّل تخزين HTML5 المحلي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:553
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr "ما إذا سيÙعل دعم تخزين HTML5 المحلي"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:567
+msgid "Enable XSS Auditor"
+msgstr "Ùعّل مراجع XSS"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:568
+msgid "Whether to enable teh XSS auditor"
+msgstr "ما إذا سيÙعل مراجع XSS"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:586
+msgid "User Agent"
+msgstr "عميل المستخدم"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:587
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "مقطع عميل المستخدم الذي تستخدمه WebKitGtk"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:602
+msgid "JavaScript can open windows automatically"
+msgstr "يمكن لجاÙاسكربت Ùتح النواÙØ° تلقائيا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:603
+msgid "Whether JavaScript can open windows automatically"
+msgstr "ما إذا كان يمكن لجاÙاسكربت Ùتح النواÙØ° تلقائيا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:618
+msgid "Enable offline web application cache"
+msgstr "Ùعّل خبيئة تطبيقات الوب المحلية"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:619
+msgid "Whether to enable offline web application cache"
+msgstr "ما إذا ستÙÙعل خبيئة تطبيقات الوب المحلية"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:646
+msgid "Editing behavior"
+msgstr "سلوك التحرير"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:647
+msgid "The behavior mode to use in editing mode"
+msgstr "نمط التحرير المستخدم ÙÙŠ وضع التحرير"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:663
+msgid "Enable universal access from file URIs"
+msgstr "Ùعّل الوصول العام من مسارات الملÙات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:664
+msgid "Whether to allow universal access from file URIs"
+msgstr "ما إذا سيÙسمح بالوصول العام من مسارات الملÙات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:679
+msgid "Enable DOM paste"
+msgstr "Ùعّل لصق DOM"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:680
+msgid "Whether to enable DOM paste"
+msgstr "ما إذا سيÙعل لصق DOM"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:698
+msgid "Tab key cycles through elements"
+msgstr "زر التبويب يتنقل بين العناصر"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:699
+msgid "Whether the tab key cycles through elements on the page."
+msgstr "ما إذا كان زر التبويب يتنقل بين عناصر الصÙحة."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:719
+msgid "Enable Default Context Menu"
+msgstr "Ùعّل قائمة السياق المبدئية"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:720
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr "ÙŠÙعّل معالجة النقر الأيمن لإنشاء قائمة السياق المبدئية"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:740
+msgid "Enable Site Specific Quirks"
+msgstr "Ùعّل الحيل الخاصة بمواقع معينة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:741
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Ùعّل حيل التواÙقية الخاصة بمواقع معينة"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:763
+msgid "Enable page cache"
+msgstr "Ùعّل خبيئة الصÙحات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:764
+msgid "Whether the page cache should be used"
+msgstr "ما إذا وجب استخدام خبيئة للصÙحات"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:784
+msgid "Auto Resize Window"
+msgstr "غيّر حجم الناÙذة تلقائيا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:785
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr "غيّر حجم الناÙذة الأساسية تلقائيا عندما تطلب صÙحة ذلك."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:817
+msgid "Enable Java Applet"
+msgstr "Ùعل بريمج جاÙا"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:818
+msgid "Whether Java Applet support through <applet> should be enabled"
+msgstr "ما إذا سيÙعل دعم بريمج جاÙا عبر <applet>"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2319
+msgid "Returns the @web_view's document title"
+msgstr "يعيد عنوان مستند @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2333
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "يعيد المسار الحالي للمحتوى المعرض ÙÙŠ @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2346
+msgid "Copy target list"
+msgstr "قائمة مقاصÙد النسخ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2347
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr "قائمة المقاصÙد الذي يدعم منظور الوب هذا نسخها إلى الحاÙظة"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2360
+msgid "Paste target list"
+msgstr "قائمة مقاصÙد اللصق"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2361
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr "قائمة المقاصÙد الذي يدعم منظور الوب هذا لصقها من الحاÙظة"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2367
+msgid "Settings"
+msgstr "الإعدادات"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2368
+msgid "An associated WebKitWebSettings instance"
+msgstr "سيرورة WebKitWebSettings مرتبطة"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2381
+msgid "Web Inspector"
+msgstr "ÙاحÙص الوÙب"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2382
+msgid "The associated WebKitWebInspector instance"
+msgstr "سيرورة WebKitWebInspector المرتبطة"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2402
+msgid "Editable"
+msgstr "قابل للتّحرير"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2403
+msgid "Whether content can be modified by the user"
+msgstr "Ùيما إذا يمكن للمستخدم تعديل النص"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2409
+msgid "Transparent"
+msgstr "Ø´ÙّاÙØ©"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2410
+msgid "Whether content has a transparent background"
+msgstr "Ùيما إذا كانت خلÙية النص Ø´ÙاÙØ©"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2423
+msgid "Zoom level"
+msgstr "مستوى التقريب"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2424
+msgid "The level of zoom of the content"
+msgstr "مستوى تقريب المحتوى"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2439
+msgid "Full content zoom"
+msgstr "تقريب كامل للمحتوى"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2440
+msgid "Whether the full content is scaled when zooming"
+msgstr "ما إذا كان كل المحتوى سيÙقرّب"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2453
+msgid "Encoding"
+msgstr "الترميز"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2454
+msgid "The default encoding of the web view"
+msgstr "الترميز المبدئي لمنظور الوب"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2467
+msgid "Custom Encoding"
+msgstr "ترميز مطوع"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2468
+msgid "The custom encoding of the web view"
+msgstr "الترميز المطوع لمنظور الوب"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2520
+msgid "Icon URI"
+msgstr "مسار الأيقونة"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2521
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "مسار أيقونة #WebKitWebView المÙضلة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:55
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:60
+msgid "Submit"
+msgstr "أرسل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:65
+msgid "Reset"
+msgstr "صÙّر"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:70
+msgid "This is a searchable index. Enter search keywords: "
+msgstr "هذا Ùهرس قابل للبحث. أدخل عبارات البحث: "
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:75
+msgid "Choose File"
+msgstr "اختر ملÙا"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:80
+msgid "(None)"
+msgstr "(لا شيء)"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:85
+msgid "Open Link in New _Window"
+msgstr "اÙتح الوص_لة ÙÙŠ ناÙذة جديدة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:90
+msgid "_Download Linked File"
+msgstr "_نزّل المل٠المرتبط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:95
+msgid "Copy Link Loc_ation"
+msgstr "ا_نسخ موقع الوصلة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:100
+msgid "Open _Image in New Window"
+msgstr "اÙتح ال_صورة ÙÙŠ ناÙذة جديدة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:105
+msgid "Sa_ve Image As"
+msgstr "ا&Ø­ÙØ· الصورة Ùƒâ€"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:110
+msgid "Cop_y Image"
+msgstr "ان_سخ الصورة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:115
+msgid "Open _Frame in New Window"
+msgstr "اÙتح الإ_طار ÙÙŠ ناÙذة جديدة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "_Reload"
+msgstr "أ_عد التحميل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:183
+msgid "No Guesses Found"
+msgstr "لا تخمينات"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:188
+msgid "_Ignore Spelling"
+msgstr "تجا_هل الإملاء"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:193
+msgid "_Learn Spelling"
+msgstr "ت_علّم الإملاء"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:198
+msgid "_Search the Web"
+msgstr "اب_حث ÙÙŠ الوÙب"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:203
+msgid "_Look Up in Dictionary"
+msgstr "اب_حث ÙÙŠ القاموس"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:208
+msgid "_Open Link"
+msgstr "ا_Ùتح الرابط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:213
+msgid "Ignore _Grammar"
+msgstr "تجاهل ال_قواعد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:218
+msgid "Spelling and _Grammar"
+msgstr "الإملاء وال_قواعد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Show Spelling and Grammar"
+msgstr "أ_ظهر الإملاء والقواعد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Hide Spelling and Grammar"
+msgstr "Ø£_Ø®Ù٠الإملاء والقواعد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:228
+msgid "_Check Document Now"
+msgstr "_دقق المستند الآن"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:233
+msgid "Check Spelling While _Typing"
+msgstr "دقق الإ_ملاء أثناء الكتابة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:238
+msgid "Check _Grammar With Spelling"
+msgstr "دقق ال_قواعد والإملاء أثناء"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:243
+msgid "_Font"
+msgstr "ال_خط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:266
+msgid "_Outline"
+msgstr "ال_حدود"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:271
+msgid "Inspect _Element"
+msgstr "اÙحص ال_عنصر"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:276
+msgid "No recent searches"
+msgstr "لا بحوث حديثة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:281
+msgid "Recent searches"
+msgstr "البحوث الحديثة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:286
+msgid "_Clear recent searches"
+msgstr "ام_سح البحوث الحديثة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:291
+msgid "term"
+msgstr "مصطلح"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:296
+msgid "definition"
+msgstr "تعريÙ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:301
+msgid "press"
+msgstr "ضغط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:306
+msgid "select"
+msgstr "اختيار"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:311
+msgid "activate"
+msgstr "تنشيط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:316
+msgid "uncheck"
+msgstr "رÙع التحديد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:321
+msgid "check"
+msgstr "تحديد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:326
+msgid "jump"
+msgstr "Ù‚Ùز"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:342
+msgid " files"
+msgstr "ملÙات "
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "Unknown"
+msgstr "مجهول"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:364
+msgid "Loading..."
+msgstr "يحمّل..."
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:369
+msgid "Live Broadcast"
+msgstr "إذاعة حية"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:375
+msgid "audio element controller"
+msgstr "متحكم عنصر صوت"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
+msgid "video element controller"
+msgstr "متحكم عنصر Ùديو"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:379
+msgid "mute"
+msgstr "أصمÙت"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:381
+msgid "unmute"
+msgstr "اÙتح"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:383
+msgid "play"
+msgstr "شغّل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:385
+msgid "pause"
+msgstr "ألبÙØ«"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:387
+msgid "movie time"
+msgstr "وقت الÙلم"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:389
+msgid "timeline slider thumb"
+msgstr "مصغرة شريط الوقت الجانبي"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:391
+msgid "back 30 seconds"
+msgstr "للخل٠30 ثانية"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:393
+msgid "return to realtime"
+msgstr "ارجع للوقت الحقيقي"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:395
+msgid "elapsed time"
+msgstr "الوقت المنقضي"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:397
+msgid "remaining time"
+msgstr "الوقت المتبÙÙŠ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:399
+msgid "status"
+msgstr "الحالة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:401
+msgid "fullscreen"
+msgstr "ملء الشاشة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:403
+msgid "fast forward"
+msgstr "تقدم سريع"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:405
+msgid "fast reverse"
+msgstr "رجوع سريع"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:407
+msgid "show closed captions"
+msgstr "أظهر العناوين المغلقة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
+msgid "hide closed captions"
+msgstr "أخÙ٠العناوين المغلقة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:418
+msgid "audio element playback controls and status display"
+msgstr "عرض متحكم وحالة عنصر الصوت"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:420
+msgid "video element playback controls and status display"
+msgstr "عرض متحكم وحالة عنصر الÙديو"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:422
+msgid "mute audio tracks"
+msgstr "أصمÙت مقاطع الصوت"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:424
+msgid "unmute audio tracks"
+msgstr "اÙتح مقاطع الصوت"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
+msgid "begin playback"
+msgstr "ابدأ التشغيل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:428
+msgid "pause playback"
+msgstr "ألبÙØ« التشغيل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:430
+msgid "movie time scrubber"
+msgstr "مسرع وقت الÙلم"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:432
+msgid "movie time scrubber thumb"
+msgstr "أصبع مسرع وقت الÙلم"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:434
+msgid "seek movie back 30 seconds"
+msgstr "تقدم ÙÙŠ الÙلم 30 ثانية"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:436
+msgid "return streaming movie to real time"
+msgstr "أعÙد الÙلم المبثّ ÙÙŠ الوقت الحقيقي"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:438
+msgid "current movie time in seconds"
+msgstr "وقت الÙلم الحالي بالثواني"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:440
+msgid "number of seconds of movie remaining"
+msgstr "عدد الثواني المتبقية ÙÙŠ الÙلم"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:442
+msgid "current movie status"
+msgstr "حالة الÙلم الحالية"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:444
+msgid "seek quickly back"
+msgstr "ارجع ÙÙŠ الÙلم بسرعة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:446
+msgid "seek quickly forward"
+msgstr "تقدم ÙÙŠ الÙلم بسرعة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:448
+msgid "Play movie in fullscreen mode"
+msgstr "شغّل الÙلم ÙÙŠ نمط ملء الشاشة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:450
+msgid "start displaying closed captions"
+msgstr "ابدأ عرض العناوين المغلقة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:452
+msgid "stop displaying closed captions"
+msgstr "أوق٠عرض العناوين المغلقة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "indefinite time"
+msgstr "وقت غير محدد"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:491
+msgid "value missing"
+msgstr "القيمة ناقصة"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:497
+msgid "type mismatch"
+msgstr "اختلا٠ÙÙŠ النوع"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "pattern mismatch"
+msgstr "اختلا٠ÙÙŠ النمط"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:507
+msgid "too long"
+msgstr "طويل جدا"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
+msgid "range underflow"
+msgstr "المدى قليل"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:517
+msgid "range overflow"
+msgstr "المدى Ùائض"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:522
+msgid "step mismatch"
+msgstr "اختلا٠ÙÙŠ الخطوة"
+
+#~ msgid "_Searchable Index"
+#~ msgstr "Ùهرس قابل للب_حث"
diff --git a/Source/WebKit/gtk/po/bg.po b/Source/WebKit/gtk/po/bg.po
new file mode 100644
index 0000000..efa7c52
--- /dev/null
+++ b/Source/WebKit/gtk/po/bg.po
@@ -0,0 +1,1162 @@
+# Bulgarian translation for webkit.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the webkit package.
+# Ivaylo Valkov <ivaylo@e-valkov.org>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: webkit HEAD\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
+"POT-Creation-Date: 2010-08-21 15:55+0300\n"
+"PO-Revision-Date: 2010-08-22 12:15+0300\n"
+"Last-Translator: Ivaylo Valkov <ivaylo@e-valkov.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:569
+msgid "Upload File"
+msgstr "Качване на файл"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:61
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:143
+msgid "Input _Methods"
+msgstr "_Методи за вход"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:78
+msgid "LRM _Left-to-right mark"
+msgstr "Маркер за от_лÑво-надÑÑно — LRM"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "RLM _Right-to-left mark"
+msgstr "Маркер за от_дÑÑно-налÑво — RLM"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRE Left-to-right _embedding"
+msgstr "_Вмъкване отлÑво-надÑÑно — LRE"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLE Right-to-left e_mbedding"
+msgstr "Ð’_мъкване отдÑÑно-налÑво — RLE"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRO Left-to-right _override"
+msgstr "_Задаване отлÑво-надÑÑно — LRO"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLO Right-to-left o_verride"
+msgstr "З_адаване отдÑÑно-налÑво — RLO"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "PDF _Pop directional formatting"
+msgstr "Връ_щане на предишната поÑока — PDF"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "ZWS _Zero width space"
+msgstr "_Интервал Ñ Ð½ÑƒÐ»ÐµÐ²Ð° широчина — ZWS"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWJ Zero width _joiner"
+msgstr "_Свръзка Ñ Ð½ÑƒÐ»ÐµÐ²Ð° широчина — ZWJ"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "_Развръзка Ñ Ð½ÑƒÐ»ÐµÐ²Ð° широчина — ZWNJ"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:109
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:138
+msgid "_Insert Unicode Control Character"
+msgstr "_Вмъкване на контролен знак за Уникод"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:385
+msgid "Play"
+msgstr "Изпълнение"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:387
+msgid "Pause"
+msgstr "Пауза"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:533
+msgid "Play / Pause"
+msgstr "Изпълнение/пауза"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:533
+msgid "Play or pause the media"
+msgstr "Изпълнение на медиÑта или пауза"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:541
+msgid "Time:"
+msgstr "Време:"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:565
+msgid "Exit Fullscreen"
+msgstr "Изход от цÑл екран"
+
+#: WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:565
+msgid "Exit from fullscreen mode"
+msgstr "Изход от режима на цÑл екран"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:272
+msgid "Network Request"
+msgstr "Мрежова заÑвка"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:273
+msgid "The network request for the URI that should be downloaded"
+msgstr "Мрежовата заÑвка за адреÑа, който ще бъде изтеглен"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:287
+msgid "Network Response"
+msgstr "Мрежов отговор"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:288
+msgid "The network response for the URI that should be downloaded"
+msgstr "МрежовиÑÑ‚ отговор за адреÑа, който ще бъде изтеглен"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:302
+msgid "Destination URI"
+msgstr "Целеви адреÑ"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:303
+msgid "The destination URI where to save the file"
+msgstr "ЦелевиÑÑ‚ адреÑ, където ще бъде запазен файлът"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:317
+msgid "Suggested Filename"
+msgstr "Предложение за името на файла"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:318
+msgid "The filename suggested as default when saving"
+msgstr "Предложение за Ñтандартното име на файла при запазване"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:335
+msgid "Progress"
+msgstr "Ðапредък"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:336
+msgid "Determines the current progress of the download"
+msgstr "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸ÑÑ‚ напредък на изтеглÑнето"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:349
+msgid "Status"
+msgstr "СъÑтоÑние"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:350
+msgid "Determines the current status of the download"
+msgstr "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¾Ñ‚Ð¾ ÑÑŠÑтоÑние на изтеглÑнето"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:365
+msgid "Current Size"
+msgstr "Текущ размер"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:366
+msgid "The length of the data already downloaded"
+msgstr "Размерът на вече изтеглените данни"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:380
+msgid "Total Size"
+msgstr "Общ размер"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:381
+msgid "The total size of the file"
+msgstr "ОбщиÑÑ‚ размер на файла"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:532
+msgid "User cancelled the download"
+msgstr "ПотребителÑÑ‚ отмени изтеглÑнето"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:249
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "Страницата „%s“ изиÑква потребителÑко име и парола"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:279
+msgid "Server message:"
+msgstr "Съобщение от Ñървъра:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:292
+msgid "Username:"
+msgstr "ПотребителÑко име:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:294
+msgid "Password:"
+msgstr "Парола:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:303
+msgid "_Remember password"
+msgstr "ЗапомнÑне на па_ролата"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:301
+msgid "Name"
+msgstr "Ðаименование"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:302
+msgid "The name of the frame"
+msgstr "Ðаименованието на рамката"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:308
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:146
+#: WebKit/gtk/webkit/webkitwebview.cpp:2645
+msgid "Title"
+msgstr "Заглавие"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:309
+msgid "The document title of the frame"
+msgstr "Заглавието на документа в рамката"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:315
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:178
+#: WebKit/gtk/webkit/webkitwebview.cpp:2659
+msgid "URI"
+msgstr "ÐдреÑ"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:316
+msgid "The current URI of the contents displayed by the frame"
+msgstr "ТекущиÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ñъдържанието, което Ñе изобразÑва от рамката"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:347
+msgid "Horizontal Scrollbar Policy"
+msgstr "Правила за хоризонталната лента за придвижване"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:348
+msgid ""
+"Determines the current policy for the horizontal scrollbar of the frame."
+msgstr ""
+"ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ‚Ðµ правилата за хоризонталната лента за придвижване на "
+"рамката."
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:365
+msgid "Vertical Scrollbar Policy"
+msgstr "Правила за вертикалната лента за придвижване"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:366
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr ""
+"ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ‚Ðµ правила за вертикалната лента за придвижване на рамката."
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:147
+msgid "The title of the history item"
+msgstr "Заглавието на обекта от иÑториÑта"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:162
+msgid "Alternate Title"
+msgstr "Ðлтернативно заглавие"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:163
+msgid "The alternate title of the history item"
+msgstr "Ðлтернативното заглавие на обекта от иÑториÑта"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:179
+msgid "The URI of the history item"
+msgstr "ÐдреÑÑŠÑ‚ на обекта от иÑториÑта"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:194
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:173
+msgid "Original URI"
+msgstr "Първоначален адреÑ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:195
+msgid "The original URI of the history item"
+msgstr "ПървоначалниÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð½Ð° обекта от иÑториÑта"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:210
+msgid "Last visited Time"
+msgstr "Време на поÑледно поÑещение"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:211
+msgid "The time at which the history item was last visited"
+msgstr "Времето, в което обектът от иÑториÑта е бил поÑетен поÑледно"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:269
+msgid "Web View"
+msgstr "Уеб изглед"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:270
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "Уеб изгледът, който изобразÑва уеб инÑпектора"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:283
+msgid "Inspected URI"
+msgstr "ИзÑледван адреÑ"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:284
+msgid "The URI that is currently being inspected"
+msgstr "ÐдреÑÑŠÑ‚, който Ñе изÑледва в момента"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:300
+msgid "Enable JavaScript profiling"
+msgstr "Включване на отчети за JavaScript"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:301
+msgid "Profile the executed JavaScript."
+msgstr "Отчети за изпълнÑÐ²Ð°Ð½Ð¸Ñ JavaScript"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:316
+msgid "Enable Timeline profiling"
+msgstr "Включване на отчети по време"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:317
+msgid "Profile the WebCore instrumentation."
+msgstr "Отчет на производителноÑтта чрез диагноÑтичните инÑтрументи на WebCore"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:158
+msgid "Reason"
+msgstr "Причина"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:159
+msgid "The reason why this navigation is occurring"
+msgstr "Причина, поради коÑто Ñе оÑъщеÑтвÑва навигациÑта"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:174
+msgid "The URI that was requested as the target for the navigation"
+msgstr "ÐдреÑÑŠÑ‚, който е бил заÑвен като цел за навигациÑта"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:188
+msgid "Button"
+msgstr "Бутон"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:189
+msgid "The button used to click"
+msgstr "Бутонът, който Ñе използва за натиÑкане"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:204
+msgid "Modifier state"
+msgstr "СъÑтоÑние на модификатор"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:205
+msgid "A bitmask representing the state of the modifier keys"
+msgstr ""
+"МаÑка от битове, коÑто предÑÑ‚Ð°Ð²Ñ ÑÑŠÑтоÑнието на модификаторите на клавиши"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:220
+msgid "Target frame"
+msgstr "Целева рамка"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:221
+msgid "The target frame for the navigation"
+msgstr "Целевата рамка за навигациÑта"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:241
+msgid "Default Encoding"
+msgstr "Стандартно кодиране"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:242
+msgid "The default encoding used to display text."
+msgstr "Стандартното кодиране, което Ñе използва за показване на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:250
+msgid "Cursive Font Family"
+msgstr "СемейÑтво от курÑивни шрифтове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:251
+msgid "The default Cursive font family used to display text."
+msgstr ""
+"Стандартното ÑемейÑтво от курÑивни шрифтове, което Ñе използва за показване "
+"на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:259
+msgid "Default Font Family"
+msgstr "Стандартно ÑемейÑтво от шрифтове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:260
+msgid "The default font family used to display text."
+msgstr ""
+"Стандартното ÑемейÑтво от шрифтове, което Ñе използва за показване на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:268
+msgid "Fantasy Font Family"
+msgstr "СемейÑтво от шрифтове „Fantasy“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:269
+msgid "The default Fantasy font family used to display text."
+msgstr ""
+"Стандартното ÑемейÑтво от шрифтове „Fantasy“, което Ñе използва за показване "
+"на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:277
+msgid "Monospace Font Family"
+msgstr "СемейÑтво от равношироки шрифтове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:278
+msgid "The default font family used to display monospace text."
+msgstr ""
+"Стандартното ÑемейÑтво от шрифтове, което Ñе използва за показване на "
+"равноширок текÑÑ‚."
+
+#
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:286
+msgid "Sans Serif Font Family"
+msgstr "СемейÑтво от шрифтове „Sans Serif“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:287
+msgid "The default Sans Serif font family used to display text."
+msgstr ""
+"Стандартното ÑемейÑтво от шрифтове „Sans Serif“, което Ñе използва за "
+"показване на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:295
+msgid "Serif Font Family"
+msgstr "СемейÑтво от шрифтове „Serif“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:296
+msgid "The default Serif font family used to display text."
+msgstr ""
+"Стандартното ÑемейÑтво от шрифтове „Serif“, което Ñе използва за показване "
+"на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:304
+msgid "Default Font Size"
+msgstr "Стандартен размер на шрифта"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:305
+msgid "The default font size used to display text."
+msgstr ""
+"СтандартниÑÑ‚ размер на шрифта, който Ñе използва за показване на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:313
+msgid "Default Monospace Font Size"
+msgstr "Стандартен размер на равноширок шрифт"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:314
+msgid "The default font size used to display monospace text."
+msgstr ""
+"СтандартниÑÑ‚ размер, който Ñе използва за показване на равноширок текÑÑ‚"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:322
+msgid "Minimum Font Size"
+msgstr "Ðай-малък размер на шрифта"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:323
+msgid "The minimum font size used to display text."
+msgstr "Ðай-малкиÑÑ‚ размер на шрифта, който Ñе използва за показване на текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:331
+msgid "Minimum Logical Font Size"
+msgstr "Ðай-малък логичеÑки размер на шрифта"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:332
+msgid "The minimum logical font size used to display text."
+msgstr ""
+"Ðай-малкиÑÑ‚ логичеÑки размер на шрифта, който Ñе използва за показване на "
+"текÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:351
+msgid "Enforce 96 DPI"
+msgstr "Използване на 96 DPI (тчк./инч)"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:352
+msgid "Enforce a resolution of 96 DPI"
+msgstr "Използване на разделителна ÑпоÑобноÑÑ‚ Ñ 96 DPI (тчк./инч)"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:360
+msgid "Auto Load Images"
+msgstr "Ðвтоматично зареждане на изображениÑ"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:361
+msgid "Load images automatically."
+msgstr "ИзображениÑта да Ñе зареждат автоматично."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:369
+msgid "Auto Shrink Images"
+msgstr "Ðвтоматично ÑмалÑване на изображениÑ"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:370
+msgid "Automatically shrink standalone images to fit."
+msgstr "Ðвтоматично ÑмалÑване на отделни Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° да Ñе вмеÑÑ‚ÑÑ‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:378
+msgid "Print Backgrounds"
+msgstr "Печат на фонове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:379
+msgid "Whether background images should be printed."
+msgstr "Дали да Ñе отпечатват фоновите изображениÑ."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:387
+msgid "Enable Scripts"
+msgstr "Включване на Ñкриптовете"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:388
+msgid "Enable embedded scripting languages."
+msgstr "Включване на вградените Ñкриптови езици."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:396
+msgid "Enable Plugins"
+msgstr "Включване на приÑтавките"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:397
+msgid "Enable embedded plugin objects."
+msgstr "Включване на обектите, които Ñе обработват от вградени приÑтавки."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:405
+msgid "Resizable Text Areas"
+msgstr "ТекÑтови полета Ñ Ð²ÑŠÐ·Ð¼Ð¾Ð¶Ð½Ð° промÑна на размера"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:406
+msgid "Whether text areas are resizable."
+msgstr "Дали размерът на текÑтовите полета може да бъде променÑн."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:413
+msgid "User Stylesheet URI"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð·Ð° потребителÑки набор от Ñтилове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:414
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "ÐдреÑÑŠÑ‚ на набора от Ñтилове, прилагани към вÑÑка Ñтраница."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:429
+msgid "Zoom Stepping Value"
+msgstr "СтойноÑÑ‚ на Ñтъпката за промÑна на мащаба"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:430
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr "СтойноÑтта, Ñ ÐºÐ¾Ñто мащабът Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð¿Ñ€Ð¸ увеличаване или намалÑване."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:448
+msgid "Enable Developer Extras"
+msgstr "Включване на разширениÑта за разработчици"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:449
+msgid "Enables special extensions that help developers"
+msgstr "Включване на Ñпециални разширениÑ, които Ñа в помощ на разработчици"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:469
+msgid "Enable Private Browsing"
+msgstr "Включване на „Поверително Ñърфиране“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:470
+msgid "Enables private browsing mode"
+msgstr "Включва режим „Поверително Ñърфиране“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:485
+msgid "Enable Spell Checking"
+msgstr "Включване на проверка на правопиÑа"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:486
+msgid "Enables spell checking while typing"
+msgstr "Включва проверката на правопиÑа докато въвеждате"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:509
+msgid "Languages to use for spell checking"
+msgstr "Езици, които да Ñе използват при проверка на правопиÑа"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:510
+msgid "Comma separated list of languages to use for spell checking"
+msgstr ""
+"СпиÑък от езици, които да Ñе използват при проверка на правопиÑа. "
+"Използвайте запетаи за разделител."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:524
+msgid "Enable Caret Browsing"
+msgstr "ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ñ ÐºÑƒÑ€Ñор"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:525
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr "Дали да бъде включена Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ñ‡Ñ€ÐµÐ· клавиатура Ñ Ð¿Ð¾Ð²Ð¸ÑˆÐµÐ½Ð° доÑтъпноÑÑ‚"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:540
+msgid "Enable HTML5 Database"
+msgstr "Включване на базата от данни на HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:541
+msgid "Whether to enable HTML5 database support"
+msgstr "Дали да бъде включена поддръжката за база от данни на HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:556
+msgid "Enable HTML5 Local Storage"
+msgstr "Включване на меÑтното хранилище на HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:557
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr "Дали да бъде включена поддръжката за меÑтно хранилище на HTML5"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:571
+msgid "Enable XSS Auditor"
+msgstr "Включване на проверка за XSS"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:572
+msgid "Whether to enable the XSS auditor"
+msgstr "Дали да бъде включена проверката за атаки чрез XSS"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:590
+msgid "Enable Spatial Navigation"
+msgstr "Включване на Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:591
+msgid "Whether to enable Spatial Navigation"
+msgstr "Дали да бъде включена навигациÑта Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:608
+msgid "User Agent"
+msgstr "ПотребителÑки агент"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:609
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "Ðизът за потребителÑÐºÐ¸Ñ Ð°Ð³ÐµÐ½Ñ‚, използван от WebKitGtk"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:624
+msgid "JavaScript can open windows automatically"
+msgstr "Ðвтоматично отварÑне на прозорци чрез JavaScript"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:625
+msgid "Whether JavaScript can open windows automatically"
+msgstr "Дали прозорци могат да Ñе отварÑÑ‚ автоматично чрез JavaScript"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:639
+msgid "JavaScript can access Clipboard"
+msgstr "JavaScript да има доÑтъп до буфера за обмен"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:640
+msgid "Whether JavaScript can access Clipboard"
+msgstr "Дали JavaScript да има доÑтъп до буфера за обмен"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:656
+msgid "Enable offline web application cache"
+msgstr "Използване на временни файлове за уеб Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² режим „Изключен“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:657
+msgid "Whether to enable offline web application cache"
+msgstr ""
+"Дали да Ñе използват временни файлове за уеб Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² режим „Изключен“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:684
+msgid "Editing behavior"
+msgstr "Режим на работа при редактиране"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:685
+msgid "The behavior mode to use in editing mode"
+msgstr "Режимът на работа, който да Ñе използва при редактиране"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:701
+msgid "Enable universal access from file URIs"
+msgstr "Включване на универÑален доÑтъп от адреÑи към файлове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:702
+msgid "Whether to allow universal access from file URIs"
+msgstr "Дали да бъде разрешен универÑалниÑÑ‚ доÑтъп от адреÑи към файлове"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:717
+msgid "Enable DOM paste"
+msgstr "Включване на поÑтавÑне в DOM"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:718
+msgid "Whether to enable DOM paste"
+msgstr "Дали да Ñе включи възможноÑтта за поÑтавÑне в DOM"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:736
+msgid "Tab key cycles through elements"
+msgstr "Придвижване през елементи Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° „Tab“"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:737
+msgid "Whether the tab key cycles through elements on the page."
+msgstr ""
+"Дали да Ñе оÑъщеÑтвÑва придвижване през елементите в Ñтраницата Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° "
+"„Tab“."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:757
+msgid "Enable Default Context Menu"
+msgstr "Включване на Ñтандартно контекÑтно меню"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:758
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr ""
+"Включва обработката на натиÑÐºÐ°Ð½Ð¸Ñ Ñ Ð´ÐµÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката, за Ñъздаване на "
+"Ñтандартно контекÑтно меню"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:778
+msgid "Enable Site Specific Quirks"
+msgstr "Включване на оÑобеноÑтите („quircks“) на определени Ñтраници"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:779
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Включва временните Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° ÑъвмеÑтимоÑÑ‚ на определени Ñтраници"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:801
+msgid "Enable page cache"
+msgstr "Включване на временни файлове за Ñтраницата"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:802
+msgid "Whether the page cache should be used"
+msgstr "Дали да Ñе използват временни файлове за Ñтраницата"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:822
+msgid "Auto Resize Window"
+msgstr "Ðвтоматично оразмерÑване на прозореца"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:823
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr ""
+"Ðвтоматично оразмерÑване на най-Ð³Ð¾Ñ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†, при заÑвка от Ñтраницата"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:855
+msgid "Enable Java Applet"
+msgstr "Включване на аплетите на Java"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:856
+msgid "Whether Java Applet support through <applet> should be enabled"
+msgstr "Дали да Ñе включи поддръжката за аплети на Java, чрез елемента <applet>"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2646
+msgid "Returns the @web_view's document title"
+msgstr "Връща заглавието на документа за обекта @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2660
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr ""
+"Връща Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ñъдържанието, което Ñе показва от обекта @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2673
+msgid "Copy target list"
+msgstr "СпиÑък от цели за копиране"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2674
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr ""
+"СпиÑъкът от цели, които този уеб изглед поддържа за копиране в буфера за "
+"обмен"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2687
+msgid "Paste target list"
+msgstr "СпиÑък от цели за поÑтавÑне"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2688
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr ""
+"СпиÑъкът от цели, които този уеб изглед поддържа за поÑтавÑне от буфера за "
+"обмен"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2694
+msgid "Settings"
+msgstr "ÐаÑтройки"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2695
+msgid "An associated WebKitWebSettings instance"
+msgstr "Копие на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ „WebKitWebSettings“"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2708
+msgid "Web Inspector"
+msgstr "Уеб инÑпектор"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2709
+msgid "The associated WebKitWebInspector instance"
+msgstr "Копие на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ „WebKitWebInspector“"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2729
+msgid "Editable"
+msgstr "Редактируемо"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2730
+msgid "Whether content can be modified by the user"
+msgstr "Дали Ñъдържанието може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð¾Ñ‚ потребителÑ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2736
+msgid "Transparent"
+msgstr "ПрозрачноÑÑ‚"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2737
+msgid "Whether content has a transparent background"
+msgstr "Дали Ñъдържанието има прозрачен фон"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2750
+msgid "Zoom level"
+msgstr "Ðиво на мащабиране"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2751
+msgid "The level of zoom of the content"
+msgstr "Ðивото на увеличаване/намалÑване на Ñъдържанието"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2766
+msgid "Full content zoom"
+msgstr "Мащабиране на цÑлото Ñъдържание"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2767
+msgid "Whether the full content is scaled when zooming"
+msgstr "Дали да Ñе мащабира цÑлото Ñъдържание, при увеличаване/намалÑване"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2780
+msgid "Encoding"
+msgstr "Кодиране"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2781
+msgid "The default encoding of the web view"
+msgstr "Стандартното кодиране на уеб изгледа"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2794
+msgid "Custom Encoding"
+msgstr "ПотребителÑко кодиране"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2795
+msgid "The custom encoding of the web view"
+msgstr "ПотребителÑкото кодиране на уеб изгледа"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2847
+msgid "Icon URI"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° икона"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2848
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "ÐдреÑÑŠÑ‚ на иконата („favicon“) за обекта „#WebKitWebView“"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:55
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:60
+msgid "Submit"
+msgstr "Изпращане"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:65
+msgid "Reset"
+msgstr "ИзчиÑтване"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:70
+msgid "This is a searchable index. Enter search keywords: "
+msgstr "Ð’ този Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ðµ да Ñе Ñ‚ÑŠÑ€Ñи. Въведете ключови думи за Ñ‚ÑŠÑ€Ñене:"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:75
+msgid "Choose File"
+msgstr "Избор на файл"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:80
+msgid "(None)"
+msgstr "(нÑма избран файл)"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:85
+msgid "Open Link in New _Window"
+msgstr "ОтварÑне на връзката в нов _прозорец"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:90
+msgid "_Download Linked File"
+msgstr "И_зтеглÑне на ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:95
+msgid "Copy Link Loc_ation"
+msgstr "Копиране на _адреÑа на връзката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:100
+msgid "Open _Image in New Window"
+msgstr "ОтварÑне на _изображението в нов прозорец"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:105
+msgid "Sa_ve Image As"
+msgstr "За_пазване на изображението като"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:110
+msgid "Cop_y Image"
+msgstr "_Копиране на изображението"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:115
+msgid "Open _Frame in New Window"
+msgstr "ОтварÑне на _рамката в нов прозорец"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "_Reload"
+msgstr "_Презареждане"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:183
+msgid "No Guesses Found"
+msgstr "Ðе Ñа намерени предложениÑ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:188
+msgid "_Ignore Spelling"
+msgstr "_Пренебрегване на правопиÑа"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:193
+msgid "_Learn Spelling"
+msgstr "Запо_мнÑне на правопиÑа"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:198
+msgid "_Search the Web"
+msgstr "_ТърÑене в Интернет"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:203
+msgid "_Look Up in Dictionary"
+msgstr "Тъ_Ñ€Ñене в речник"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:208
+msgid "_Open Link"
+msgstr "_ОтварÑне на връзката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:213
+msgid "Ignore _Grammar"
+msgstr "Пренебрегване на _граматиката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:218
+msgid "Spelling and _Grammar"
+msgstr "ÐŸÑ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð¸ _граматика"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Show Spelling and Grammar"
+msgstr "_Показване на правопиÑа и граматиката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Hide Spelling and Grammar"
+msgstr "_Скриване на правопиÑа и граматиката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:228
+msgid "_Check Document Now"
+msgstr "_Проверка на документа в момента"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:233
+msgid "Check Spelling While _Typing"
+msgstr "Проверка на правопиÑа докато _въвеждате"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:238
+msgid "Check _Grammar With Spelling"
+msgstr "Проверка на _граматиката заедно Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñа"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:243
+msgid "_Font"
+msgstr "_Шрифт"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:266
+msgid "_Outline"
+msgstr "_ОчертаниÑ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:271
+msgid "Inspect _Element"
+msgstr "_ИзÑледване на елемент"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:276
+msgid "No recent searches"
+msgstr "ÐÑма Ñкоро направени Ñ‚ÑŠÑ€ÑениÑ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:281
+msgid "Recent searches"
+msgstr "Скоро направени Ñ‚ÑŠÑ€ÑениÑ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:286
+msgid "_Clear recent searches"
+msgstr "_ИзчиÑтване на Ñкоро направените Ñ‚ÑŠÑ€ÑениÑ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:291
+msgid "term"
+msgstr "термин"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:296
+msgid "definition"
+msgstr "определение"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:301
+msgid "press"
+msgstr "натиÑкане"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:306
+msgid "select"
+msgstr "избиране"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:311
+msgid "activate"
+msgstr "включване"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:316
+msgid "uncheck"
+msgstr "премахване на маркирането"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:321
+msgid "check"
+msgstr "маркиране"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:326
+msgid "jump"
+msgstr "поÑещаване на връзката"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:341
+msgid "Missing Plug-in"
+msgstr "ЛипÑваща приÑтавка"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "Plug-in Failure"
+msgstr "Проблем в приÑтавка"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:353
+msgid " files"
+msgstr "файлове"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:358
+msgid "Unknown"
+msgstr "ÐеизвеÑтен"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:375
+msgid "Loading..."
+msgstr "Зареждане…"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:380
+msgid "Live Broadcast"
+msgstr "Живо предаване"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:386
+msgid "audio element controller"
+msgstr "управлÑващ елемент за звука"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:388
+msgid "video element controller"
+msgstr "управлÑващ елемент за картината"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:390
+msgid "mute"
+msgstr "заглушаване"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:392
+msgid "unmute"
+msgstr "премахване на заглушаването"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:394
+msgid "play"
+msgstr "Ñтартиране"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:396
+msgid "pause"
+msgstr "пауза"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:398
+msgid "movie time"
+msgstr "време на филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:400
+msgid "timeline slider thumb"
+msgstr "показалец на плъзгача за времевата Ñкала"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:402
+msgid "back 30 seconds"
+msgstr "30 Ñекунди назад"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:404
+msgid "return to realtime"
+msgstr "връщане към реално време"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:406
+msgid "elapsed time"
+msgstr "изминало време"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:408
+msgid "remaining time"
+msgstr "оÑтаващо време"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:410
+msgid "status"
+msgstr "ÑÑŠÑтоÑние"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:412
+msgid "fullscreen"
+msgstr "на цÑл екран"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:414
+msgid "fast forward"
+msgstr "бързо напред"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:416
+msgid "fast reverse"
+msgstr "бързо назад"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:418
+msgid "show closed captions"
+msgstr "показване на Ñубтитри"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:420
+msgid "hide closed captions"
+msgstr "Ñкриване на Ñубтитри"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:429
+msgid "audio element playback controls and status display"
+msgstr "бутони за управление на звука и показване на ÑÑŠÑтоÑнието"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:431
+msgid "video element playback controls and status display"
+msgstr "бутони за управление на картината и показване на ÑÑŠÑтоÑнието"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:433
+msgid "mute audio tracks"
+msgstr "заглушаване на пиÑтите ÑÑŠÑ Ð·Ð²ÑƒÐºÐ°"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:435
+msgid "unmute audio tracks"
+msgstr "премахване на заглушаването на пиÑтите ÑÑŠÑ Ð·Ð²ÑƒÐºÐ°"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:437
+msgid "begin playback"
+msgstr "изпълнение"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:439
+msgid "pause playback"
+msgstr "пауза"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:441
+msgid "movie time scrubber"
+msgstr "плъзгач за времевата Ñкала на филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:443
+msgid "movie time scrubber thumb"
+msgstr "показалец на плъзгача за времевата Ñкала на филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:445
+msgid "seek movie back 30 seconds"
+msgstr "Ñ‚ÑŠÑ€Ñене 30 Ñекунди назад във филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:447
+msgid "return streaming movie to real time"
+msgstr "връщане на Ñ„Ð¸Ð»Ð¼Ð¾Ð²Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº към реално време"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:449
+msgid "current movie time in seconds"
+msgstr "текущо време на филма в Ñекунди"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:451
+msgid "number of seconds of movie remaining"
+msgstr "оÑтаващите Ñекунди от филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:453
+msgid "current movie status"
+msgstr "текущо ÑÑŠÑтоÑние на филма"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:455
+msgid "seek quickly back"
+msgstr "бързо Ñ‚ÑŠÑ€Ñене назад"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:457
+msgid "seek quickly forward"
+msgstr "бързо Ñ‚ÑŠÑ€Ñене напред"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:459
+msgid "Play movie in fullscreen mode"
+msgstr "Изпълнение на филма на цÑл екран"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "start displaying closed captions"
+msgstr "показване на Ñубтитри"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:463
+msgid "stop displaying closed captions"
+msgstr "без Ñубтитри"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:472
+msgid "indefinite time"
+msgstr "неопределено време"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "value missing"
+msgstr "ÑтойноÑтта липÑва"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:508
+msgid "type mismatch"
+msgstr "неÑъответÑтвие на вида"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:513
+msgid "pattern mismatch"
+msgstr "неÑъответÑтвие на шаблона"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:518
+msgid "too long"
+msgstr "текÑÑ‚ÑŠÑ‚ е прекалено дълъг"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:523
+msgid "range underflow"
+msgstr "отрицателно препълване на обхвата"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:528
+msgid "range overflow"
+msgstr "препълване на обхвата"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:533
+msgid "step mismatch"
+msgstr "неÑъответÑтвие на Ñтъпката"
diff --git a/Source/WebKit/gtk/po/fr.po b/Source/WebKit/gtk/po/fr.po
new file mode 100644
index 0000000..670ac6e
--- /dev/null
+++ b/Source/WebKit/gtk/po/fr.po
@@ -0,0 +1,1229 @@
+# French translation of totem.
+# Copyright (C) 2009-2010 Listed translators.
+# This file is distributed under the same license as the webkitgtk+ package.
+#
+# Guillaume Lanquepin <guyomel@gmail.com>, 2009
+# Claude Paroz <claude@2xlibre.net>, 2010
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: webkitgtk+ HEAD fr\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
+"POT-Creation-Date: 2011-02-02 17:51+0100\n"
+"PO-Revision-Date: 2011-02-10 15:22+0100\n"
+"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:605
+msgid "Upload File"
+msgstr "Envoyer un fichier"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:62
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:194
+msgid "Input _Methods"
+msgstr "_Méthodes de saisie"
+
+# Voir chaînes identiques dans fr.po de gtk+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "LRM _Left-to-right mark"
+msgstr "LRM Marque _gauche-à-droite"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "RLM _Right-to-left mark"
+msgstr "RLM Marque _droite-à-gauche"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "LRE Left-to-right _embedding"
+msgstr "LRE _Enchâssement gauche-à-droite"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "RLE Right-to-left e_mbedding"
+msgstr "RLE E_nchâssement droite-à-gauche"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "LRO Left-to-right _override"
+msgstr "LRO _Forçage gauche-à-droite"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "RLO Right-to-left o_verride"
+msgstr "RLO F_orçage droite-à-gauche"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "PDF _Pop directional formatting"
+msgstr "PDF _Dépilement de formatage directionnel"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWS _Zero width space"
+msgstr "ZWS E_space sans chasse"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWJ Zero width _joiner"
+msgstr "ZWJ _Liant sans chasse"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:88
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "ZWNJ _Anti-liant sans chasse"
+
+#: Source/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:110
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:189
+msgid "_Insert Unicode Control Character"
+msgstr "_Insérer un caractère de contrôle Unicode"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:389
+msgid "Play"
+msgstr "Lire"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:391
+msgid "Pause"
+msgstr "Pause"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:537
+msgid "Play / Pause"
+msgstr "Lire / Pause"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:537
+msgid "Play or pause the media"
+msgstr "Lire ou mettre en pause le média"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:545
+msgid "Time:"
+msgstr "Minutage :"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:568
+msgid "Exit Fullscreen"
+msgstr "Quitter le plein écran"
+
+#: Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp:568
+msgid "Exit from fullscreen mode"
+msgstr "Quitte le mode plein écran"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:274
+msgid "Network Request"
+msgstr "Requête réseau"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:275
+msgid "The network request for the URI that should be downloaded"
+msgstr "La requête réseau pour l'URI qui doit être téléchargé"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:289
+msgid "Network Response"
+msgstr "Réponse réseau"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:290
+msgid "The network response for the URI that should be downloaded"
+msgstr "La réponse réseau pour l'URI qui doit être téléchargé"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:304
+msgid "Destination URI"
+msgstr "URI de destination"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:305
+msgid "The destination URI where to save the file"
+msgstr "L'URI de destination pour l'enregistrement du fichier"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:319
+msgid "Suggested Filename"
+msgstr "Nom de fichier suggéré"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:320
+msgid "The filename suggested as default when saving"
+msgstr "Le nom de fichier suggéré par défaut lors de l'enregistrement"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:337
+msgid "Progress"
+msgstr "Progression"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:338
+msgid "Determines the current progress of the download"
+msgstr "Détermine la progression du téléchargement"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:351
+msgid "Status"
+msgstr "État"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:352
+msgid "Determines the current status of the download"
+msgstr "Détermine l'état actuel du téléchargement"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:367
+msgid "Current Size"
+msgstr "Taille actuelle"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:368
+msgid "The length of the data already downloaded"
+msgstr "La taille des données déjà téléchargées"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:382
+msgid "Total Size"
+msgstr "Taille totale"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:383
+msgid "The total size of the file"
+msgstr "La taille totale du fichier"
+
+#: Source/WebKit/gtk/webkit/webkitdownload.cpp:535
+msgid "User cancelled the download"
+msgstr "L'utilisateur a annulé le téléchargement"
+
+#: Source/WebKit/gtk/webkit/webkitsoupauthdialog.c:261
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "Un identifiant et un mot de passe sont demandés par le site %s"
+
+#: Source/WebKit/gtk/webkit/webkitsoupauthdialog.c:291
+msgid "Server message:"
+msgstr "Message du serveur :"
+
+#: Source/WebKit/gtk/webkit/webkitsoupauthdialog.c:304
+msgid "Username:"
+msgstr "Identifiant :"
+
+#: Source/WebKit/gtk/webkit/webkitsoupauthdialog.c:306
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: Source/WebKit/gtk/webkit/webkitsoupauthdialog.c:315
+msgid "_Remember password"
+msgstr "Se _souvenir du mot de passe"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:309
+msgid "Name"
+msgstr "Nom"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:310
+msgid "The name of the frame"
+msgstr "Le nom du cadre"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:316
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:143
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3013
+msgid "Title"
+msgstr "Titre"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:317
+msgid "The document title of the frame"
+msgstr "Le titre du document du cadre"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:323
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:175
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3027
+msgid "URI"
+msgstr "URI"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:324
+msgid "The current URI of the contents displayed by the frame"
+msgstr "L'URI actuelle du contenu affiché par le cadre"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:355
+msgid "Horizontal Scrollbar Policy"
+msgstr "Politique de défilement horizontal"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:356
+msgid ""
+"Determines the current policy for the horizontal scrollbar of the frame."
+msgstr ""
+"Indique la politique actuelle de la barre de défilement horizontale du cadre."
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:373
+msgid "Vertical Scrollbar Policy"
+msgstr "Politique de défilement vertical"
+
+#: Source/WebKit/gtk/webkit/webkitwebframe.cpp:374
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr ""
+"Indique la politique actuelle de la barre de défilement horizontale du cadre."
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:144
+msgid "The title of the history item"
+msgstr "Le titre de l'élément de l'historique"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:159
+msgid "Alternate Title"
+msgstr "Titre alternatif"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:160
+msgid "The alternate title of the history item"
+msgstr "Le titre alternatif de l'élément de l'historique"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:176
+msgid "The URI of the history item"
+msgstr "L'URI de l'élément de l'historique"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:191
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:169
+msgid "Original URI"
+msgstr "URI d'origine"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:192
+msgid "The original URI of the history item"
+msgstr "L'URI d'origine de l'élément de l'historique"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:207
+msgid "Last visited Time"
+msgstr "Heure de la dernière visite"
+
+#: Source/WebKit/gtk/webkit/webkitwebhistoryitem.cpp:208
+msgid "The time at which the history item was last visited"
+msgstr ""
+"L'heure à laquelle l'élément de l'historique a été visité pour la dernière "
+"fois"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:272
+msgid "Web View"
+msgstr "Vue Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:273
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "La vue Web qui contient l'inspecteur Web lui-même"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:286
+msgid "Inspected URI"
+msgstr "URI inspectée"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:287
+msgid "The URI that is currently being inspected"
+msgstr "L'URI qui est actuellement inspectée"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:303
+msgid "Enable JavaScript profiling"
+msgstr "Activer le profilage JavaScript"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:304
+msgid "Profile the executed JavaScript."
+msgstr "Analyse la performance du JavaScript qui est exécuté."
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:319
+msgid "Enable Timeline profiling"
+msgstr "Activer le profilage temporel"
+
+#: Source/WebKit/gtk/webkit/webkitwebinspector.cpp:320
+msgid "Profile the WebCore instrumentation."
+msgstr "Profile l'instrumentation WebCore."
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:154
+msgid "Reason"
+msgstr "Raison"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:155
+msgid "The reason why this navigation is occurring"
+msgstr "La raison qui provoque cette navigation"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:170
+msgid "The URI that was requested as the target for the navigation"
+msgstr "L'URI qui a été demandée comme destination de la navigation"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:184
+msgid "Button"
+msgstr "Bouton"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:185
+msgid "The button used to click"
+msgstr "Le bouton utilisé pour cliquer"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:200
+msgid "Modifier state"
+msgstr "État des modificateurs"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:201
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "Un masque de bits représentant l'état des touches de modification"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:216
+msgid "Target frame"
+msgstr "Cadre de destination"
+
+#: Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp:217
+msgid "The target frame for the navigation"
+msgstr "Le cadre de destination de la navigation"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:255
+msgid "Default Encoding"
+msgstr "Codage par défaut"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:256
+msgid "The default encoding used to display text."
+msgstr "Codage par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:264
+msgid "Cursive Font Family"
+msgstr "Famille de police cursive"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:265
+msgid "The default Cursive font family used to display text."
+msgstr "La famille de police cursive par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:273
+msgid "Default Font Family"
+msgstr "Famille de police par défault"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:274
+msgid "The default font family used to display text."
+msgstr "La famille de police par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:282
+msgid "Fantasy Font Family"
+msgstr "Famille de police fantaisiste"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:283
+msgid "The default Fantasy font family used to display text."
+msgstr "Famille de police fantaisiste par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:291
+msgid "Monospace Font Family"
+msgstr "Famille de police à chasse fixe"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:292
+msgid "The default font family used to display monospace text."
+msgstr ""
+"La famille de police par défaut pour l'affichage du texte à chasse fixe."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:300
+msgid "Sans Serif Font Family"
+msgstr "Famille de police Sans Serif"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:301
+msgid "The default Sans Serif font family used to display text."
+msgstr "La famille de police Sans Serif par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:309
+msgid "Serif Font Family"
+msgstr "Famille de police Serif"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:310
+msgid "The default Serif font family used to display text."
+msgstr "La famille de police Serif par défaut pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:318
+msgid "Default Font Size"
+msgstr "Taille par défaut de la police"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:319
+msgid "The default font size used to display text."
+msgstr "La taille par défaut de la police pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:327
+msgid "Default Monospace Font Size"
+msgstr "Taille par défaut de la police à chasse fixe"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:328
+msgid "The default font size used to display monospace text."
+msgstr ""
+"La taille par défaut de la police pour l'affichage du texte à chasse fixe."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:336
+msgid "Minimum Font Size"
+msgstr "Taille minimum de la police"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:337
+msgid "The minimum font size used to display text."
+msgstr "La taille de police minimum pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:345
+msgid "Minimum Logical Font Size"
+msgstr "Taille logique minimum de la police"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:346
+msgid "The minimum logical font size used to display text."
+msgstr "La taille logique minimum de la police pour l'affichage du texte."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:365
+msgid "Enforce 96 DPI"
+msgstr "Forcer 96 PPP"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:366
+msgid "Enforce a resolution of 96 DPI"
+msgstr "Forcer la résolution à 96 PPP"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:374
+msgid "Auto Load Images"
+msgstr "Chargement automatique des images"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:375
+msgid "Load images automatically."
+msgstr "Charge automatiquement les images."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:383
+msgid "Auto Shrink Images"
+msgstr "Réduction automatique des images"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:384
+msgid "Automatically shrink standalone images to fit."
+msgstr "Réduit automatiquement les images indépendantes pour les adapter."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:392
+msgid "Print Backgrounds"
+msgstr "Imprimer les arrière-plans"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:393
+msgid "Whether background images should be printed."
+msgstr "Indique si les images d'arrière-plan doivent être imprimées."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:401
+msgid "Enable Scripts"
+msgstr "Activer les scripts"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:402
+msgid "Enable embedded scripting languages."
+msgstr "Active les langages de script incorporés."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:410
+msgid "Enable Plugins"
+msgstr "Activer les greffons"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:411
+msgid "Enable embedded plugin objects."
+msgstr "Active les objets greffons incorporés."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:419
+msgid "Resizable Text Areas"
+msgstr "Zones de texte redimensionnables"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:420
+msgid "Whether text areas are resizable."
+msgstr "Indique si les zones de texte peuvent être redimensionnées."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:427
+msgid "User Stylesheet URI"
+msgstr "URI de la feuille de style utilisateur"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:428
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "L'URI d'une feuille de style qui est appliquée à chaque page."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:443
+msgid "Zoom Stepping Value"
+msgstr "Incrément du zoom"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:444
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr ""
+"La valeur d'incrément du niveau de zoom lors d'un zoom avant ou arrière."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:462
+msgid "Enable Developer Extras"
+msgstr "Activer les extensions pour développeurs"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:463
+msgid "Enables special extensions that help developers"
+msgstr "Active les extensions destinées à aider les développeurs"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:483
+msgid "Enable Private Browsing"
+msgstr "Activer la navigation privée"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:484
+msgid "Enables private browsing mode"
+msgstr "Active le mode de navigation privée"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:499
+msgid "Enable Spell Checking"
+msgstr "Activer la correction orthographique"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:500
+msgid "Enables spell checking while typing"
+msgstr "Active la vérification orthographique en cours de frappe"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:523
+msgid "Languages to use for spell checking"
+msgstr "Langues de vérification orthographique"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:524
+msgid "Comma separated list of languages to use for spell checking"
+msgstr ""
+"Liste de langues séparées par des virgules qui seront utilisées pour la "
+"vérification orthographique"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:538
+msgid "Enable Caret Browsing"
+msgstr "Activer la navigation au curseur"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:539
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr ""
+"Indique s'il faut activer la navigation au clavier pour favoriser "
+"l'accessibilité"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:554
+msgid "Enable HTML5 Database"
+msgstr "Activer les base de données HTML5"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:555
+msgid "Whether to enable HTML5 database support"
+msgstr ""
+"Indique s'il faut activer la prise en charge des bases de données HTML5"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:570
+msgid "Enable HTML5 Local Storage"
+msgstr "Activer l'enregistrement local HTML5"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:571
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr ""
+"Indique s'il faut activer la prise en charge de l'enregistrement local HTML5"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:585
+msgid "Enable XSS Auditor"
+msgstr "Activer l'auditeur XSS"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:586
+msgid "Whether to enable the XSS auditor"
+msgstr "Indique s'il faut activer l'auditeur XSS"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:604
+msgid "Enable Spatial Navigation"
+msgstr "Activer la navigation spatiale"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:605
+msgid "Whether to enable Spatial Navigation"
+msgstr "Indique s'il faut activer la navigation spatiale"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:623
+msgid "Enable Frame Flattening"
+msgstr "Activer la fusion des cadres"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:624
+msgid "Whether to enable Frame Flattening"
+msgstr "Indique s'il faut activer la fusion des cadres"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:641
+msgid "User Agent"
+msgstr "Agent utilisateur"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:642
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "L'agent utilisateur (« User-Agent ») utilisé par WebKitGtk"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:657
+msgid "JavaScript can open windows automatically"
+msgstr "JavaScript peut ouvrir automatiquement des fenêtres"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:658
+msgid "Whether JavaScript can open windows automatically"
+msgstr "Indique si JavaScript peut ouvrir automatiquement des fenêtres"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:672
+msgid "JavaScript can access Clipboard"
+msgstr "JavaScript peut accéder au presse-papiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:673
+msgid "Whether JavaScript can access Clipboard"
+msgstr "Indique si JavaScript peut accéder au presse-papiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:689
+msgid "Enable offline web application cache"
+msgstr "Activer le cache hors ligne des applications Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:690
+msgid "Whether to enable offline web application cache"
+msgstr "Indique s'il faut activer le cache hors ligne des applications Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:718
+msgid "Editing behavior"
+msgstr "Comportement d'édition"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:719
+msgid "The behavior mode to use in editing mode"
+msgstr "Le mode de comportement utilisé en mode d'édition"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:735
+msgid "Enable universal access from file URIs"
+msgstr "Activer l'accès universel à partir d'URI de fichiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:736
+msgid "Whether to allow universal access from file URIs"
+msgstr ""
+"Indique s'il faut autoriser l'accès universel à partir d'URI de fichiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:751
+msgid "Enable DOM paste"
+msgstr "Activer le « coller » du DOM"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:752
+msgid "Whether to enable DOM paste"
+msgstr "Indique s'il faut activer le « coller » du DOM"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:770
+msgid "Tab key cycles through elements"
+msgstr "La touche tabulation passe d'un élément à l'autre"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:771
+msgid "Whether the tab key cycles through elements on the page."
+msgstr "Indique si la touche tabulation passe d'un élément de page à un autre."
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:791
+msgid "Enable Default Context Menu"
+msgstr "Activer le menu contextuel par défaut"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:792
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr ""
+"Active la gestion des clics droits pour la création du menu contextuel par "
+"défaut"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:812
+msgid "Enable Site Specific Quirks"
+msgstr "Activer les astuces spécifiques aux sites"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:813
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Active les contournements de compatibilité spécifiques aux sites"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:835
+msgid "Enable page cache"
+msgstr "Activer le cache des pages"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:836
+msgid "Whether the page cache should be used"
+msgstr "Indique si le cache des pages doit être utilisé"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:856
+msgid "Auto Resize Window"
+msgstr "Redimensionnement automatique des fenêtres"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:857
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr ""
+"Redimensionne automatiquement la fenêtre de premier niveau lorsqu'une page "
+"le demande"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:889
+msgid "Enable Java Applet"
+msgstr "Activer les applets Java"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:890
+msgid "Whether Java Applet support through <applet> should be enabled"
+msgstr ""
+"Indique s'il faut activer la prise en charge des applets Java par la balise "
+"<applet>"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:904
+msgid "Enable Hyperlink Auditing"
+msgstr "Activer l'audit des hyperliens"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:905
+msgid "Whether <a ping> should be able to send pings"
+msgstr "Indique si <a ping> doit pouvoir envoyer des pings"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:913
+msgid "Enable Fullscreen"
+msgstr "Activer le mode plein écran"
+
+#: Source/WebKit/gtk/webkit/webkitwebsettings.cpp:914
+msgid "Whether the Mozilla style API should be enabled."
+msgstr "Indique si l'API de style de Mozilla doit être activée."
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3014
+msgid "Returns the @web_view's document title"
+msgstr "Renvoie le titre du document de @web_view"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3028
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "Renvoie l'URI actuel du contenu affiché par le @web_view"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3041
+msgid "Copy target list"
+msgstr "Liste des cibles de copie"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3042
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr ""
+"La liste des cibles prises en charge par cette vue Web pour la copie dans le "
+"presse-papiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3055
+msgid "Paste target list"
+msgstr "Liste des cibles de collage"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3056
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr ""
+"La liste des cibles prises en charge par cette vue Web pour le collage "
+"depuis le presse-papiers"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3062
+msgid "Settings"
+msgstr "Paramètres"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3063
+msgid "An associated WebKitWebSettings instance"
+msgstr "Une instance WebKitWebSettings associée"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3076
+msgid "Web Inspector"
+msgstr "Inspecteur Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3077
+msgid "The associated WebKitWebInspector instance"
+msgstr "L'instance WebKitWebInspector associée"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3090
+msgid "Viewport Attributes"
+msgstr "Attributs de la zone d'affichage"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3091
+msgid "The associated WebKitViewportAttributes instance"
+msgstr "L'instance WebKitViewportAttributes associée"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3111
+msgid "Editable"
+msgstr "Modifiable"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3112
+msgid "Whether content can be modified by the user"
+msgstr "Indique si le contenu peut être modifié par l'utilisateur"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3118
+msgid "Transparent"
+msgstr "Transparent"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3119
+msgid "Whether content has a transparent background"
+msgstr "Indique si l'arrière-plan du contenu est transparent"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3132
+msgid "Zoom level"
+msgstr "Niveau du zoom"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3133
+msgid "The level of zoom of the content"
+msgstr "Le niveau du zoom pour le contenu"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3148
+msgid "Full content zoom"
+msgstr "Zoom de tout le contenu"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3149
+msgid "Whether the full content is scaled when zooming"
+msgstr "Indique si tout le contenu est redimensionné lors d'un zoom"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3162
+msgid "Encoding"
+msgstr "Codage"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3163
+msgid "The default encoding of the web view"
+msgstr "Le codage de caractères par défaut de la vue Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3176
+msgid "Custom Encoding"
+msgstr "Codage personnalisé"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3177
+msgid "The custom encoding of the web view"
+msgstr "Le codage de caractères personnalisé de la vue Web"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3229
+msgid "Icon URI"
+msgstr "URI d'icône"
+
+#: Source/WebKit/gtk/webkit/webkitwebview.cpp:3230
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "L'URI de l'icône « favicon » du #WebKitWebView."
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:56
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:61
+msgid "Submit"
+msgstr "Envoyer"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:66
+msgid "Reset"
+msgstr "Réinitialiser"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:71
+msgid "This is a searchable index. Enter search keywords: "
+msgstr ""
+"Ceci est un index de recherche. Saisissez des mots-clés de recherche : "
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:76
+msgid "Choose File"
+msgstr "Choisir un fichier"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:81
+msgid "(None)"
+msgstr "(aucun)"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:86
+msgid "Open Link in New _Window"
+msgstr "Ouvrir le lien dans une nouvelle _fenêtre"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:91
+msgid "_Download Linked File"
+msgstr "_Télécharger la cible du lien"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:96
+msgid "Copy Link Loc_ation"
+msgstr "Copier l'_adresse du lien"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:101
+msgid "Open _Image in New Window"
+msgstr "Ouvrir l'_image dans une nouvelle fenêtre"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:106
+msgid "Sa_ve Image As"
+msgstr "_Enregistrer l'image sous"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:111
+msgid "Cop_y Image"
+msgstr "_Copier l'image"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:116
+msgid "Open _Video in New Window"
+msgstr "Ouvrir la _vidéo dans une nouvelle fenêtre"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:121
+msgid "Open _Audio in New Window"
+msgstr "Ouvrir l'a_udio dans une nouvelle fenêtre"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:126
+msgid "Cop_y Video Link Location"
+msgstr "Copier l'_adresse du lien de la vidéo"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:131
+msgid "Cop_y Audio Link Location"
+msgstr "Copier l'_adresse du lien de l'audio"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:136
+msgid "_Toggle Media Controls"
+msgstr "Afficher/masquer les contrôles de _média"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:141
+msgid "Toggle Media _Loop Playback"
+msgstr "Activer/désactiver la lecture en _boucle du média"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:146
+msgid "Switch Video to _Fullscreen"
+msgstr "Passer la vidéo en _plein écran"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:151
+msgid "_Play"
+msgstr "_Lire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:156
+msgid "_Pause"
+msgstr "_Pause"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:161
+msgid "_Mute"
+msgstr "_Couper le son"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "Open _Frame in New Window"
+msgstr "Ouvrir le ca_dre dans une nouvelle fenêtre"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:217
+msgid "_Reload"
+msgstr "_Recharger"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:234
+msgid "No Guesses Found"
+msgstr "Aucun suggestion trouvée"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:239
+msgid "_Ignore Spelling"
+msgstr "_Ignorer la correction"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:244
+msgid "_Learn Spelling"
+msgstr "_Ajouter le mot"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:249
+msgid "_Search the Web"
+msgstr "_Rechercher sur le Web"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:254
+msgid "_Look Up in Dictionary"
+msgstr "Rechercher dans le _dictionnaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:259
+msgid "_Open Link"
+msgstr "_Ouvrir le lien"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:264
+msgid "Ignore _Grammar"
+msgstr "Ignorer la _grammaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:269
+msgid "Spelling and _Grammar"
+msgstr "Orthographe et _grammaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Show Spelling and Grammar"
+msgstr "_Afficher l'orthographe et la grammaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Hide Spelling and Grammar"
+msgstr "_Masquer l'orthographe et la grammaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:279
+msgid "_Check Document Now"
+msgstr "_Vérifier le document maintenant"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:284
+msgid "Check Spelling While _Typing"
+msgstr "Vérifier l'orthographe pendant la _frappe"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:289
+msgid "Check _Grammar With Spelling"
+msgstr "Vérifier aussi la _grammaire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:294
+msgid "_Font"
+msgstr "_Police"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:317
+msgid "_Outline"
+msgstr "_Encadrements"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:322
+msgid "Inspect _Element"
+msgstr "_Inspecter l'élément"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:327
+msgid "No recent searches"
+msgstr "Pas de recherche récente"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:332
+msgid "Recent searches"
+msgstr "Recherches récentes"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:337
+msgid "_Clear recent searches"
+msgstr "_Effacer les recherches récentes"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:342
+msgid "term"
+msgstr "terme"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "definition"
+msgstr "définition"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:352
+msgid "press"
+msgstr "cliquer"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:357
+msgid "select"
+msgstr "sélectionner"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:362
+msgid "activate"
+msgstr "activer"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:367
+msgid "uncheck"
+msgstr "décocher"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:372
+msgid "check"
+msgstr "cocher"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
+msgid "jump"
+msgstr "sauter"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:392
+msgid "Missing Plug-in"
+msgstr "Greffon manquant"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:398
+msgid "Plug-in Failure"
+msgstr "Échec de greffon"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:404
+msgid " files"
+msgstr " fichiers"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
+msgid "Loading..."
+msgstr "Chargement..."
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:431
+msgid "Live Broadcast"
+msgstr "Diffusion en direct"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:437
+msgid "audio element controller"
+msgstr "contrôleur d'élément audio"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:439
+msgid "video element controller"
+msgstr "contrôleur d'élément vidéo"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:441
+msgid "mute"
+msgstr "sourdine"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:443
+msgid "unmute"
+msgstr "activer le son"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:445
+msgid "play"
+msgstr "lire"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:447
+msgid "pause"
+msgstr "pause"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:449
+msgid "movie time"
+msgstr "déroulement du film"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:451
+msgid "timeline slider thumb"
+msgstr "curseur de glissière chronologique"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:453
+msgid "back 30 seconds"
+msgstr "30 secondes plus tôt"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:455
+msgid "return to realtime"
+msgstr "retour au temps réel"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:457
+msgid "elapsed time"
+msgstr "temps écoulé"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:459
+msgid "remaining time"
+msgstr "temps restant"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "status"
+msgstr "état"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:463
+msgid "fullscreen"
+msgstr "plein écran"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:465
+msgid "fast forward"
+msgstr "avance rapide"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:467
+msgid "fast reverse"
+msgstr "recul rapide"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:469
+msgid "show closed captions"
+msgstr "afficher les sous-titres codés"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:471
+msgid "hide closed captions"
+msgstr "masquer les sous-titres codés"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:480
+msgid "audio element playback controls and status display"
+msgstr "contrôles de lecture audio et affichage d'état"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:482
+msgid "video element playback controls and status display"
+msgstr "contrôles de lecture vidéo et affichage d'état"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:484
+msgid "mute audio tracks"
+msgstr "désactiver les pistes audio"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:486
+msgid "unmute audio tracks"
+msgstr "activer les pistes audio"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:488
+msgid "begin playback"
+msgstr "démarrer la lecture"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:490
+msgid "pause playback"
+msgstr "mettre en pause"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:492
+msgid "movie time scrubber"
+msgstr "glissière temporelle"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:494
+msgid "movie time scrubber thumb"
+msgstr "curseur de la glissière temporelle"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:496
+msgid "seek movie back 30 seconds"
+msgstr "reculer de 30 secondes dans le film"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:498
+msgid "return streaming movie to real time"
+msgstr "revenir au temps réel du film diffusé"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:500
+msgid "current movie time in seconds"
+msgstr "position dans le film actuel en secondes"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "number of seconds of movie remaining"
+msgstr "nombre de secondes restantes du film"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:504
+msgid "current movie status"
+msgstr "état du film actuel"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:506
+msgid "seek quickly back"
+msgstr "retour rapide"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:508
+msgid "seek quickly forward"
+msgstr "avance rapide"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:510
+msgid "Play movie in fullscreen mode"
+msgstr "Voir le film en mode plein écran"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
+msgid "start displaying closed captions"
+msgstr "lancer l'affichage des sous-titres codés"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:514
+msgid "stop displaying closed captions"
+msgstr "stopper l'affichage des sous-titres codés"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:523
+msgid "indefinite time"
+msgstr "temps indéterminé"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:553
+msgid "value missing"
+msgstr "valeur manquante"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:589
+msgid "type mismatch"
+msgstr "types incompatibles"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:612
+msgid "pattern mismatch"
+msgstr "motifs incompatibles"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:617
+msgid "too long"
+msgstr "trop long"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:622
+msgid "range underflow"
+msgstr "dépassement inférieur d'intervalle"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:627
+msgid "range overflow"
+msgstr "dépassement d'intervalle"
+
+#: Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp:632
+msgid "step mismatch"
+msgstr "erreur d'incrément"
diff --git a/Source/WebKit/gtk/po/gr.po b/Source/WebKit/gtk/po/gr.po
new file mode 100644
index 0000000..ed7a255
--- /dev/null
+++ b/Source/WebKit/gtk/po/gr.po
@@ -0,0 +1,695 @@
+# translation of webkit.HEAD.po to Greek
+# This file is put in the public domain.
+#
+# Jennie Petoumenou <epetoumenou@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: webkit.HEAD\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
+"POT-Creation-Date: 2009-04-09 19:09-0300\n"
+"PO-Revision-Date: 2009-07-24 08:35+0200\n"
+"Last-Translator: Jennie Petoumenou <epetoumenou@gmail.com>\n"
+"Language-Team: Greek <team@gnome.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:425
+msgid "Upload File"
+msgstr "Αποστολή αÏχείου"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:61
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:139
+msgid "Input _Methods"
+msgstr "_Μέθοδοι εισαγωγής"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:78
+msgid "LRM _Left-to-right mark"
+msgstr "_LRM Σημείο αÏιστεÏά Ï€Ïος δεξιά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "RLM _Right-to-left mark"
+msgstr "_RLM Σημείο δεξιά Ï€Ïος αÏιστεÏά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRE Left-to-right _embedding"
+msgstr "LRE _Ενσωμάτωση αÏιστεÏά Ï€Ïος δεξιά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLE Right-to-left e_mbedding"
+msgstr "RLE Ενσω_μάτωση δεξιά Ï€Ïος αÏιστεÏά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRO Left-to-right _override"
+msgstr "LRO _Αναγκαστικά αÏιστεÏά Ï€Ïος δεξιά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLO Right-to-left o_verride"
+msgstr "RLO Αναγκαστι_κά δεξιά Ï€Ïος αÏιστεÏά"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "PDF _Pop directional formatting"
+msgstr "_PDF ΑναίÏεση τελευταίας ÏÏθμισης κατεÏθυνσης"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "ZWS _Zero width space"
+msgstr "_ZWS Διάστημα Î¼Î·Î´ÎµÎ½Î¹ÎºÎ¿Ï Ï€Î»Î¬Ï„Î¿Ï…Ï‚"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWJ Zero width _joiner"
+msgstr "ZW_J Συνδετικό Î¼Î·Î´ÎµÎ½Î¹ÎºÎ¿Ï Ï€Î»Î¬Ï„Î¿Ï…Ï‚"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "ZW_NJ Μη συνδετικό Î¼Î·Î´ÎµÎ½Î¹ÎºÎ¿Ï Ï€Î»Î¬Ï„Î¿Ï…Ï‚"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:109
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:134
+msgid "_Insert Unicode Control Character"
+msgstr "_Εισαγωγή χαÏακτήÏα ελέγχου Unicode"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:250
+msgid "Network Request"
+msgstr "Αίτημα δικτÏου"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:251
+msgid "The network request for the URI that should be downloaded"
+msgstr "Το αίτημα δικτÏου για το URI που Ï€Ïόκειται να ληφθεί"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:265
+msgid "Destination URI"
+msgstr "URI Ï€ÏοοÏισμοÏ"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:266
+msgid "The destination URI where to save the file"
+msgstr "Το URI Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÏŒÏ€Î¿Ï… θα αποθηκευτεί το αÏχείο"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:280
+msgid "Suggested Filename"
+msgstr "ΠÏοτεινόμενο όνομα αÏχείου"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:281
+msgid "The filename suggested as default when saving"
+msgstr "Το όνομα αÏχείου που Ï€Ïοτείνεται αυτόματα κατά την αποθήκευση"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:294
+msgid "Progress"
+msgstr "ΠÏόοδος"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:295
+msgid "Determines the current progress of the download"
+msgstr "Η Ï„Ïέχουσα Ï€Ïόοδος της λήψης"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:308
+msgid "Status"
+msgstr "Κατάσταση"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:309
+msgid "Determines the current status of the download"
+msgstr "Η Ï„Ïέχουσα κατάσταση της λήψης"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:324
+msgid "Current Size"
+msgstr "ΤÏέχον μέγεθος"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:325
+msgid "The length of the data already downloaded"
+msgstr "Το μέγεθος των δεδομένων που έχουν ήδη ληφθεί"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:339
+msgid "Total Size"
+msgstr "Συνολικό μέγεθος"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:340
+msgid "The total size of the file"
+msgstr "Το συνολικό μέγεθος του αÏχείου"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:469
+msgid "User cancelled the download"
+msgstr "Η λήψη ακυÏώθηκε από το χÏήστη"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:244
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "Ο ιστότοπος %s απαιτεί όνομα χÏήστη και συνθηματικό"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:269
+msgid "Username:"
+msgstr "Όνομα χÏήστη:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:271
+msgid "Password:"
+msgstr "Συνθηματικό:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:281
+msgid "Remember password"
+msgstr "Απομνημόνευση συνθηματικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:211
+msgid "Name"
+msgstr "Όνομα"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:212
+msgid "The name of the frame"
+msgstr "Το όνομα του πλαισίου"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:218
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:154
+#: WebKit/gtk/webkit/webkitwebview.cpp:1715
+msgid "Title"
+msgstr "Τίτλος"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:219
+msgid "The document title of the frame"
+msgstr "Ο τίτλος εγγÏάφου του πλαισίου"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:225
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:186
+#: WebKit/gtk/webkit/webkitwebview.cpp:1729
+msgid "URI"
+msgstr "URI"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:226
+msgid "The current URI of the contents displayed by the frame"
+msgstr "Το Ï„Ïέχον URI των πεÏιεχομένων που εμφανίζονται στο πλαίσιο"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:155
+msgid "The title of the history item"
+msgstr "Ο τίτλος του αντικειμένου του ιστοÏικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:170
+msgid "Alternate Title"
+msgstr "Εναλλακτικός τίτλος"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:171
+msgid "The alternate title of the history item"
+msgstr "Ο εναλλακτικός τίτλος του αντικειμένου του ιστοÏικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:187
+msgid "The URI of the history item"
+msgstr "Το URI του αντικειμένου του ιστοÏικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:202
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:167
+msgid "Original URI"
+msgstr "ΑÏχικό URI"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:203
+msgid "The original URI of the history item"
+msgstr "Το αÏχικό URI του αντικειμένου του ιστοÏικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:218
+msgid "Last visited Time"
+msgstr "ΧÏόνος τελευταίας επίσκεψης"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:219
+msgid "The time at which the history item was last visited"
+msgstr "Η χÏονική στιγμή της τελευταίας επίσκεψης στο αντικείμενο του ιστοÏικοÏ"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:260
+msgid "Web View"
+msgstr "ΠÏοβολή ιστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:261
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "Η ΠÏοβολή Î¹ÏƒÏ„Î¿Ï Ï€Î¿Ï… εμφανίζει τον ίδιο τον ΕπιθεωÏητή ΙστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:274
+msgid "Inspected URI"
+msgstr "ΕπιθεωÏοÏμενο URI"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:275
+msgid "The URI that is currently being inspected"
+msgstr "Το URI του οποίου γίνεται επιθεώÏηση"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:291
+msgid "Enable JavaScript profiling"
+msgstr "ΕνεÏγοποίηση Ï€Ïοφίλ JavaScript"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:292
+msgid "Profile the executed JavaScript."
+msgstr "ΔημιουÏγία Ï€Ïοφίλ του εκτελοÏμενου κώδικα JavaScript."
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:152
+msgid "Reason"
+msgstr "Αιτία"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:153
+msgid "The reason why this navigation is occurring"
+msgstr "Η αιτία που Ï€Ïοκάλεσε την πλοήγηση"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:168
+msgid "The URI that was requested as the target for the navigation"
+msgstr "Το URI που ζητήθηκε ως Ï€ÏοοÏισμός της πλοήγησης"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:180
+msgid "Button"
+msgstr "Κουμπί"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:181
+msgid "The button used to click"
+msgstr "Το κουμπί που χÏησιμοποιείται για τα κλικ"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:196
+msgid "Modifier state"
+msgstr "Κατάσταση Ï„Ïοποποιητή"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:197
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "Bitmask που αντιστοιχεί στην κατάσταση των πλήκτÏων Ï„Ïοποποίησης"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:129
+msgid "Default Encoding"
+msgstr "ΠÏοεπιλεγμένη κωδικοποίηση"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:130
+msgid "The default encoding used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη κωδικοποίηση που χÏησιμοποιείται για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:138
+msgid "Cursive Font Family"
+msgstr "Cursive οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:139
+msgid "The default Cursive font family used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη Cursive οικογένεια γÏαμματοσειÏών για την εμφάνιση πλάγιου κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:147
+msgid "Default Font Family"
+msgstr "ΠÏοεπιλεγμένη οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:148
+msgid "The default font family used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη οικογένεια γÏαμματοσειÏών για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:156
+msgid "Fantasy Font Family"
+msgstr "Fantasy οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:157
+msgid "The default Fantasy font family used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη Fantasy οικογένεια γÏαμματοσειÏών για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:165
+msgid "Monospace Font Family"
+msgstr "Monospace οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:166
+msgid "The default font family used to display monospace text."
+msgstr "Η Ï€Ïοεπιλεγμένη οικογένεια γÏαμματοσειÏών για την εμφάνιση κειμένου.σταθεÏÎ¿Ï Ï€Î»Î¬Ï„Î¿Ï…Ï‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:174
+msgid "Sans Serif Font Family"
+msgstr "Sans Serif οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:175
+msgid "The default Sans Serif font family used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη Sans Serif οικογένεια γÏαμματοσειÏών για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:183
+msgid "Serif Font Family"
+msgstr "Serif οικογένεια γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:184
+msgid "The default Serif font family used to display text."
+msgstr "Η Ï€Ïοεπιλεγμένη Serif οικογένεια γÏαμματοσειÏών για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:192
+msgid "Default Font Size"
+msgstr "Μέγεθος Ï€Ïοεπιλεγμένης γÏαμματοσειÏάς"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:193
+msgid "The default font size used to display text."
+msgstr "Το Ï€Ïοεπιλεγμένο μέγεθος γÏαμματοσειÏάς που χÏησιμοποιείται για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:201
+msgid "Default Monospace Font Size"
+msgstr "Μέγεθος Ï€Ïοεπιλεγμένης Monospace γÏαμματοσειÏάς"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:202
+msgid "The default font size used to display monospace text."
+msgstr "Το Ï€Ïοεπιλεγμένο μέγεθος γÏαμματοσειÏάς που χÏησιμοποιείται για την εμφάνιση κειμένου σταθεÏÎ¿Ï Ï€Î»Î¬Ï„Î¿Ï…Ï‚."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:210
+msgid "Minimum Font Size"
+msgstr "Ελάχιστο μέγεθος γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:211
+msgid "The minimum font size used to display text."
+msgstr "Το ελάχιστο μέγεθος των γÏαμματοσειÏών που χÏησιμοποιοÏνται για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:219
+msgid "Minimum Logical Font Size"
+msgstr "Ελάχιστο μέγεθος λογικών γÏαμματοσειÏών"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:220
+msgid "The minimum logical font size used to display text."
+msgstr "Το ελάχιστο μέγεθος των λογικών γÏαμματοσειÏών που χÏησιμοποιοÏνται για την εμφάνιση κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:239
+msgid "Enforce 96 DPI"
+msgstr "Επιβολή 96 DPI"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:240
+msgid "Enforce a resolution of 96 DPI"
+msgstr "Επιβολή ανάλυσης 96 DPI"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:248
+msgid "Auto Load Images"
+msgstr "Αυτόματη φόÏτωση εικόνων"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:249
+msgid "Load images automatically."
+msgstr "Αυτόματη φόÏτωση εικόνων."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:257
+msgid "Auto Shrink Images"
+msgstr "Αυτόματη σμίκÏυνση εικόνων"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:258
+msgid "Automatically shrink standalone images to fit."
+msgstr "Αυτόματη σμίκÏυνση των αυτοτελών εικόνων ώστε να χωÏοÏν."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:266
+msgid "Print Backgrounds"
+msgstr "ΕκτÏπωση παÏασκηνίου"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:267
+msgid "Whether background images should be printed."
+msgstr "Αν θα εκτυπώνονται οι εικόνες παÏασκηνίου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:275
+msgid "Enable Scripts"
+msgstr "ΕνεÏγοποίηση σεναÏίων"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:276
+msgid "Enable embedded scripting languages."
+msgstr "ΕνεÏγοποίηση ενσωματωμένων γλωσσών σεναÏίων."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:284
+msgid "Enable Plugins"
+msgstr "ΕνεÏγοποίηση Ï€Ïόσθετων"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:285
+msgid "Enable embedded plugin objects."
+msgstr "ΕνεÏγοποίηση ενσωματωμένων Ï€Ïόσθετων αντικειμένων."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:293
+msgid "Resizable Text Areas"
+msgstr "ΠÏοσαÏμόσιμες πεÏιοχές κειμένου"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:294
+msgid "Whether text areas are resizable."
+msgstr "Αν θα επιτÏέπεται η αλλαγή μεγέθους των πεÏιοχών κειμένου."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:301
+msgid "User Stylesheet URI"
+msgstr "URI φÏλλου στυλ χÏήστη"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:302
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "Το URI του φÏλλου στυλ που θα εφαÏμόζεται σε όλες τις σελίδες."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:317
+msgid "Zoom Stepping Value"
+msgstr "Τιμή βήματος μεγέθυνσης"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:318
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr "Το ποσό κατά το οποίο αλλάζει κάθε φοÏά το επίπεδο μεγέθυνσης/σμίκÏυνσης."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:336
+msgid "Enable Developer Extras"
+msgstr "ΕνεÏγοποίηση Ï€Ïοσθέτων Ï€ÏογÏαμματισμοÏ"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:337
+msgid "Enables special extensions that help developers"
+msgstr "ΕνεÏγοποιεί τις ειδικές επεκτάσεις για Ï€ÏογÏαμματιστές"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:357
+msgid "Enable Private Browsing"
+msgstr "ΕνεÏγοποίηση ιδιωτικής πεÏιήγησης"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:358
+msgid "Enables private browsing mode"
+msgstr "ΕνεÏγοποιεί τη λειτουÏγία ιδιωτικής πεÏιήγησης"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1716
+msgid "Returns the @web_view's document title"
+msgstr "ΕπιστÏέφει τον τίτλο εγγÏάφου της @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1730
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "ΕπιστÏέφει το Ï„Ïέχον URI του πεÏιεχομένου που εμφανίζεται στην @web_view"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1743
+msgid "Copy target list"
+msgstr "Λίστα Ï€ÏοοÏισμών αντιγÏαφής"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1744
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr "Η λίστα Ï€ÏοοÏισμών για αντιγÏαφή στο Ï€ÏόχειÏο που υποστηÏίζει αυτή η Ï€Ïοβολή ΙστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1757
+msgid "Paste target list"
+msgstr "Λίστα Ï€ÏοοÏισμών επικόλλησης"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1758
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr "Η λίστα Ï€ÏοοÏισμών για επικόλληση στο Ï€ÏόχειÏο που υποστηÏίζει αυτή η Ï€Ïοβολή ΙστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1764
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1765
+msgid "An associated WebKitWebSettings instance"
+msgstr "Μια συνδεδεμένη διεÏγασία WebKitWebSettings"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1778
+msgid "Web Inspector"
+msgstr "ΕπιθεωÏητής ΙστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1779
+msgid "The associated WebKitWebInspector instance"
+msgstr "Η συνδεδεμένη διεÏγασία WebKitWebInspector"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1799
+msgid "Editable"
+msgstr "ΕπεξεÏγάσιμο"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1800
+msgid "Whether content can be modified by the user"
+msgstr "Αν επιτÏέπεται η Ï„Ïοποποίηση του πεÏιεχομένου από το χÏήστη"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1806
+msgid "Transparent"
+msgstr "Διάφανο"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1807
+msgid "Whether content has a transparent background"
+msgstr "Αν το παÏασκήνιο του πεÏιεχομένου θα είναι διαφανές"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1820
+msgid "Zoom level"
+msgstr "Επίπεδο μεγέθυνσης"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1821
+msgid "The level of zoom of the content"
+msgstr "Το επίπεδο μεγέθυνσης/σμίκÏυνσης του πεÏιεχομένου"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1836
+msgid "Full content zoom"
+msgstr "Μεγέθυνση πλήÏους πεÏιεχομένου"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1837
+msgid "Whether the full content is scaled when zooming"
+msgstr "Αν η μεγέθυνση/σμίκÏυνση θα εφαÏμόζεται σε όλο το πεÏιεχόμενο"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1850
+msgid "Encoding"
+msgstr "Κωδικοποίηση"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1851
+msgid "The default encoding of the web view"
+msgstr "Η Ï€Ïοεπιλεγμένη κωδικοποίηση για την Ï€Ïοβολή ΙστοÏ"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1864
+msgid "Custom Encoding"
+msgstr "ΠÏοσαÏμοσμένη κωδικοποίηση"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:1865
+msgid "The custom encoding of the web view"
+msgstr "Η Ï€ÏοσαÏμοσμένη κωδικοποίηση για την Ï€Ïοβολή ΙστοÏ"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:51
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:56
+msgid "Submit"
+msgstr "Υποβολή"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:61
+msgid "Reset"
+msgstr "ΕπαναφοÏά"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:66
+msgid "_Searchable Index"
+msgstr "_ΕυÏετήÏιο"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:71
+msgid "Choose File"
+msgstr "Επιλογή αÏχείου"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:76
+msgid "(None)"
+msgstr "(Κανένα)"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:81
+msgid "Open Link in New _Window"
+msgstr "Άνοιγμα συνδέσμου σε _νέο παÏάθυÏο"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:86
+msgid "_Download Linked File"
+msgstr "_Λήψη αÏχείου συνδέσμου"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:91
+msgid "Copy Link Loc_ation"
+msgstr "ΑντιγÏαφή _τοποθεσίας συνδέσμου"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:96
+msgid "Open _Image in New Window"
+msgstr "Άνοιγμα _εικόνας σε νέο παÏάθυÏο"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:101
+msgid "Sa_ve Image As"
+msgstr "Απο_θήκευση εικόνας"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:106
+msgid "Cop_y Image"
+msgstr "ΑντιγÏα_φή εικόνας"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:111
+msgid "Open _Frame in New Window"
+msgstr "Άνοιγμα _πλαισίου σε νέο παÏάθυÏο"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:162
+msgid "_Reload"
+msgstr "_ΕπαναφόÏτωση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:179
+msgid "No Guesses Found"
+msgstr "Δε βÏέθηκαν υποδείξεις"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:184
+msgid "_Ignore Spelling"
+msgstr "_Αγνόηση οÏθογÏαφίας"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:189
+msgid "_Learn Spelling"
+msgstr "Εκ_μάθηση οÏθογÏαφίας"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:194
+msgid "_Search the Web"
+msgstr "Αναζήτηση στον _Ιστό"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:199
+msgid "_Look Up in Dictionary"
+msgstr "Αναζήτηση στο _λεξικό"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:204
+msgid "_Open Link"
+msgstr "Άν_οιγμα συνδέσμου"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:209
+msgid "Ignore _Grammar"
+msgstr "Αγνόηση _γÏαμματικών λαθών"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:214
+msgid "Spelling and _Grammar"
+msgstr "ΟÏθογÏαφικός και _γÏαμματικός έλεγχος"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:219
+msgid "_Show Spelling and Grammar"
+msgstr "_Εμφάνιση οÏθογÏαφικών και γÏαμματικών λαθών"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:219
+msgid "_Hide Spelling and Grammar"
+msgstr "_ΑπόκÏυψη οÏθογÏαφικών και γÏαμματικών λαθών"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:224
+msgid "_Check Document Now"
+msgstr "Έλεγχος εγγÏάφου _Ï„ÏŽÏα"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:229
+msgid "Check Spelling While _Typing"
+msgstr "ΟÏθογÏαφικός έλεγχος κατά την _πληκτÏολόγηση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:234
+msgid "Check _Grammar With Spelling"
+msgstr "ΤαυτόχÏονος _γÏαμματικός και οÏθογÏαφικός έλεγχος"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:239
+msgid "_Font"
+msgstr "_ΓÏαμματοσειÏά"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:262
+msgid "_Outline"
+msgstr "Επ_ισκόπηση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:267
+msgid "Inspect _Element"
+msgstr "ΕπιθεώÏηση στοι_χείου"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:272
+msgid "No recent searches"
+msgstr "Καμία Ï€Ïόσφατη αναζήτηση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:277
+msgid "Recent searches"
+msgstr "ΠÏόσφατες αναζητήσεις"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:282
+msgid "_Clear recent searches"
+msgstr "Εκκα_θάÏιση Ï€Ïόσφατων αναζητήσεων"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:287
+msgid "term"
+msgstr "ÏŒÏος"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:292
+msgid "definition"
+msgstr "οÏισμός"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:297
+msgid "press"
+msgstr "πάτημα"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:302
+msgid "select"
+msgstr "επιλογή"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:307
+msgid "activate"
+msgstr "ενεÏγοποίηση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:312
+msgid "uncheck"
+msgstr "αποεπιλογή"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:317
+msgid "check"
+msgstr "επιλογή"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:322
+msgid "jump"
+msgstr "μετάβαση"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:328
+msgid " files"
+msgstr "αÏχεία"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:333
+msgid "Unknown"
+msgstr "Άγνωστο"
+
diff --git a/Source/WebKit/gtk/po/hu.po b/Source/WebKit/gtk/po/hu.po
new file mode 100644
index 0000000..1549430
--- /dev/null
+++ b/Source/WebKit/gtk/po/hu.po
@@ -0,0 +1,1073 @@
+# Hungarian translation of webkit-gtk
+# This file is put in the public domain.
+#
+# Gabor Kelemen <kelemeng at gnome dot hu>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: webkit 1.1.20\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
+"POT-Creation-Date: 2010-02-16 15:01-0200\n"
+"PO-Revision-Date: 2010-02-22 17:10+0100\n"
+"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
+"Language-Team: Hungarian <gnome at fsf dot hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:535
+msgid "Upload File"
+msgstr "Fájl feltöltése"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:61
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:143
+msgid "Input _Methods"
+msgstr "Beviteli mó_dok"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:78
+msgid "LRM _Left-to-right mark"
+msgstr "LRM _Balról-jobbra jel"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "RLM _Right-to-left mark"
+msgstr "RLM J_obbról-balra jel"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRE Left-to-right _embedding"
+msgstr "LRE Balról-jobbra beá_gyazás"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLE Right-to-left e_mbedding"
+msgstr "RLE Jobbról-balra b_eágyazás"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRO Left-to-right _override"
+msgstr "LRO Balról-jobbra _felülbírálás"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLO Right-to-left o_verride"
+msgstr "RLO Jobbról-balra f_elülbírálás"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "PDF _Pop directional formatting"
+msgstr "PDF Irányformázás _visszakapása"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "ZWS _Zero width space"
+msgstr "ZWS N_ull szélességű szóköz"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWJ Zero width _joiner"
+msgstr "ZWJ Null szélességű ö_sszekötő"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "ZWNJ Null szélességű _nem-összekötő"
+
+#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:109
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:138
+msgid "_Insert Unicode Control Character"
+msgstr "_Unicode vezérlőkarakter beszúrása"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:262
+msgid "Network Request"
+msgstr "Hálózati kérés"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:263
+msgid "The network request for the URI that should be downloaded"
+msgstr "A hálózati kérés a letöltendő URI-címhez"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:277
+msgid "Network Response"
+msgstr "Hálózati válasz"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:278
+msgid "The network response for the URI that should be downloaded"
+msgstr "A hálózati válasz a letöltendő URI-címhez"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:292
+msgid "Destination URI"
+msgstr "Cél URI"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:293
+msgid "The destination URI where to save the file"
+msgstr "A cél URI, ahova a fájl mentendő"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:307
+msgid "Suggested Filename"
+msgstr "Javasolt fájlnév"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:308
+msgid "The filename suggested as default when saving"
+msgstr "A mentéskor alapértelmezettként javasolt fájlnév"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:325
+msgid "Progress"
+msgstr "Folyamatjelző"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:326
+msgid "Determines the current progress of the download"
+msgstr "Meghatározza a letöltés jelenlegi előrehaladását"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:339
+msgid "Status"
+msgstr "Ãllapot"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:340
+msgid "Determines the current status of the download"
+msgstr "Meghatározza a letöltés jelenlegi állapotát"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:355
+msgid "Current Size"
+msgstr "Jelenlegi méret"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:356
+msgid "The length of the data already downloaded"
+msgstr "A már letöltött adatok hossza"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:370
+msgid "Total Size"
+msgstr "Teljes méret"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:371
+msgid "The total size of the file"
+msgstr "A fájl teljes mérete"
+
+#: WebKit/gtk/webkit/webkitdownload.cpp:522
+msgid "User cancelled the download"
+msgstr "A felhasználó megszakította a letöltést"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:244
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "A(z) %s oldal felhasználónevet és jelszót kér"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:269
+msgid "Username:"
+msgstr "Felhasználónév:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:271
+msgid "Password:"
+msgstr "Jelszó:"
+
+#: WebKit/gtk/webkit/webkitsoupauthdialog.c:280
+msgid "_Remember password"
+msgstr "Jelszó _megjegyzése"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:298
+msgid "Name"
+msgstr "Név"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:299
+msgid "The name of the frame"
+msgstr "A keret neve"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:305
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:146
+#: WebKit/gtk/webkit/webkitwebview.cpp:2315
+msgid "Title"
+msgstr "Cím"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:306
+msgid "The document title of the frame"
+msgstr "A keret dokumentumcíme"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:312
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:178
+#: WebKit/gtk/webkit/webkitwebview.cpp:2329
+msgid "URI"
+msgstr "URI"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:313
+msgid "The current URI of the contents displayed by the frame"
+msgstr "A keretben megjelenő tartalom jelenlegi URI-címe"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:344
+msgid "Horizontal Scrollbar Policy"
+msgstr "Vízszintes görgetősáv irányelv"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:345
+msgid "Determines the current policy for the horizontal scrollbar of the frame."
+msgstr "Meghatározza a keret vízszintes görgetősávjának irányelvét."
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:362
+msgid "Vertical Scrollbar Policy"
+msgstr "Függőleges görgetősáv irányelv"
+
+#: WebKit/gtk/webkit/webkitwebframe.cpp:363
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr "Meghatározza a keret függőleges görgetősávjának irányelvét."
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:147
+msgid "The title of the history item"
+msgstr "Az előzményelem címe"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:162
+msgid "Alternate Title"
+msgstr "Alternatív cím"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:163
+msgid "The alternate title of the history item"
+msgstr "Az előzményelem alternatív címe"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:179
+msgid "The URI of the history item"
+msgstr "Az előzményelem URI-címe"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:194
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:173
+msgid "Original URI"
+msgstr "Eredeti URI"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:195
+msgid "The original URI of the history item"
+msgstr "Az előzményelem eredeti URI-címe"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:210
+msgid "Last visited Time"
+msgstr "Utolsó látogatás ideje"
+
+#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:211
+msgid "The time at which the history item was last visited"
+msgstr "Az előzményelem utolsó meglátogatásának ideje"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:268
+msgid "Web View"
+msgstr "Webnézet"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:269
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "A magát a webvizsgálót megjelenítő webnézet"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:282
+msgid "Inspected URI"
+msgstr "Vizsgált URI"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:283
+msgid "The URI that is currently being inspected"
+msgstr "A jelenleg vizsgált URI"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:299
+msgid "Enable JavaScript profiling"
+msgstr "JavaScript profilozás engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:300
+msgid "Profile the executed JavaScript."
+msgstr "A végrehajtott JavaScript profilozása."
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:315
+msgid "Enable Timeline profiling"
+msgstr "Idővonal-profilozás engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebinspector.cpp:316
+msgid "Profile the WebCore instrumentation."
+msgstr "A WebCore rendszerállapotának profilozása."
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:158
+msgid "Reason"
+msgstr "Ok"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:159
+msgid "The reason why this navigation is occurring"
+msgstr "A navigáció előfordulásának oka"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:174
+msgid "The URI that was requested as the target for the navigation"
+msgstr "A navigáció céljaként kért URI"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:188
+msgid "Button"
+msgstr "Gomb"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:189
+msgid "The button used to click"
+msgstr "A kattintáshoz használt gomb"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:204
+msgid "Modifier state"
+msgstr "Módosítóállapot"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:205
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "A módosítóbillentyűk állapotát ábrázoló bitmaszk"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:220
+msgid "Target frame"
+msgstr "Cél keret"
+
+#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:221
+msgid "The target frame for the navigation"
+msgstr "A navigáció cél kerete"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:233
+msgid "Default Encoding"
+msgstr "Alapértelmezett kódolás"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:234
+msgid "The default encoding used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett kódolás."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:242
+msgid "Cursive Font Family"
+msgstr "Dőlt betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:243
+msgid "The default Cursive font family used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett dőlt betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:251
+msgid "Default Font Family"
+msgstr "Alapértelmezett betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:252
+msgid "The default font family used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:260
+msgid "Fantasy Font Family"
+msgstr "Fantázia betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:261
+msgid "The default Fantasy font family used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett fantázia betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:269
+msgid "Monospace Font Family"
+msgstr "Rögzített szélességű betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:270
+msgid "The default font family used to display monospace text."
+msgstr ""
+"A szöveg megjelenítésére használt alapértelmezett rögzített szélességű "
+"betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:278
+msgid "Sans Serif Font Family"
+msgstr "Sans Serif betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:279
+msgid "The default Sans Serif font family used to display text."
+msgstr ""
+"A szöveg megjelenítésére használt alapértelmezett Sans Serif "
+"betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:287
+msgid "Serif Font Family"
+msgstr "Serif betűkészletcsalád"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:288
+msgid "The default Serif font family used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett Serif betűkészletcsalád."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:296
+msgid "Default Font Size"
+msgstr "Alapértelmezett betűméret"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:297
+msgid "The default font size used to display text."
+msgstr "A szöveg megjelenítésére használt alapértelmezett betűméret."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:305
+msgid "Default Monospace Font Size"
+msgstr "Alapértelmezett rögzített szélességű betűméret"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:306
+msgid "The default font size used to display monospace text."
+msgstr ""
+"A rögzített szélességű szöveg megjelenítésére használt alapértelmezett "
+"betűméret."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:314
+msgid "Minimum Font Size"
+msgstr "Minimális betűméret"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:315
+msgid "The minimum font size used to display text."
+msgstr "A szöveg megjelenítésére használt minimális betűméret."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:323
+msgid "Minimum Logical Font Size"
+msgstr "Minimális logikai betűméret"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:324
+msgid "The minimum logical font size used to display text."
+msgstr "A szöveg megjelenítésére használt minimális logikai betűméret."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:343
+msgid "Enforce 96 DPI"
+msgstr "96 DPI kikényszerítése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:344
+msgid "Enforce a resolution of 96 DPI"
+msgstr "96 DPI-s felbontás kikényszerítése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:352
+msgid "Auto Load Images"
+msgstr "Képek automatikus betöltése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:353
+msgid "Load images automatically."
+msgstr "Képek automatikus betöltése."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:361
+msgid "Auto Shrink Images"
+msgstr "Képek automatikus zsugorítása"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:362
+msgid "Automatically shrink standalone images to fit."
+msgstr "Képek automatikus zsugorítása, hogy elférjenek."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:370
+msgid "Print Backgrounds"
+msgstr "Hátterek nyomtatása"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:371
+msgid "Whether background images should be printed."
+msgstr "A háttérképeket ki kell-e nyomtatni."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:379
+msgid "Enable Scripts"
+msgstr "Parancsfájlok engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:380
+msgid "Enable embedded scripting languages."
+msgstr "Beágyazott parancsnyelvek engedélyezése."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:388
+msgid "Enable Plugins"
+msgstr "Bővítmények engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:389
+msgid "Enable embedded plugin objects."
+msgstr "Beágyazott bővítményobjektumok engedélyezése."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:397
+msgid "Resizable Text Areas"
+msgstr "ÃtméretezhetÅ‘ szövegterületek"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:398
+msgid "Whether text areas are resizable."
+msgstr "A szövegterületek átméretezhetők-e."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:405
+msgid "User Stylesheet URI"
+msgstr "Felhasználói stíluslap URI-címe"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:406
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "A minden oldalra alkalmazott stíluslap URI-címe."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:421
+msgid "Zoom Stepping Value"
+msgstr "Nagyítás lépésköze"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:422
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr ""
+"A nagyítási szint módosítása ezzel az értékkel nagyításkor vagy "
+"kicsinyítéskor."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:440
+msgid "Enable Developer Extras"
+msgstr "Fejlesztői extrák engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:441
+msgid "Enables special extensions that help developers"
+msgstr "Fejlesztőket segítő speciális kiterjesztések engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:461
+msgid "Enable Private Browsing"
+msgstr "Privát böngészés engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:462
+msgid "Enables private browsing mode"
+msgstr "Engedélyezi a privát böngészés módot"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:477
+msgid "Enable Spell Checking"
+msgstr "Helyesírás-ellenőrzés engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:478
+msgid "Enables spell checking while typing"
+msgstr "Engedélyezi a helyesírás ellenőrzését gépeléskor"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:501
+msgid "Languages to use for spell checking"
+msgstr "A helyesírás-ellenőrzéshez használandó nyelvek"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:502
+msgid "Comma separated list of languages to use for spell checking"
+msgstr "A helyesírás-ellenőrzéshez használandó nyelvek vesszővel elválasztott listája"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:516
+msgid "Enable Caret Browsing"
+msgstr "Kurzoros böngészés engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:517
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr "Akadálymentes billentyűzetnavigáció engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:532
+msgid "Enable HTML5 Database"
+msgstr "HTML5 adatbázis engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:533
+msgid "Whether to enable HTML5 database support"
+msgstr "A HTML5 adatbázis-támogatás engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:548
+msgid "Enable HTML5 Local Storage"
+msgstr "HTML5 helyi tárolás engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:549
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr "HTML5 helyi tárolás támogatásának engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:563
+msgid "Enable XSS Auditor"
+msgstr "XSS-auditáló engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:564
+msgid "Whether to enable teh XSS auditor"
+msgstr "Az XSS-auditáló engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:582
+msgid "User Agent"
+msgstr "Felhasználói ügynök"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:583
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "A WebKitGtk által használandó felhasználói ügynök karakterlánc"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:598
+msgid "JavaScript can open windows automatically"
+msgstr "A JavaScript automatikusan megnyithat ablakokat"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:599
+msgid "Whether JavaScript can open windows automatically"
+msgstr "A JavaScript megnyithat-e automatikusan ablakokat"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:614
+msgid "Enable offline web application cache"
+msgstr "Kapcsolat nélküli webalkalmazás-gyorsítótár engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:615
+msgid "Whether to enable offline web application cache"
+msgstr "Webalkalmazások kapcsolat nélküli gyorsítótárának engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:642
+msgid "Editing behavior"
+msgstr "Szerkesztés viselkedése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:643
+msgid "The behavior mode to use in editing mode"
+msgstr "A szerkesztési módban használandó viselkedésmód"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:659
+msgid "Enable universal access from file URIs"
+msgstr "Akadálymentesítés engedélyezése fájl URI-címekből"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:660
+msgid "Whether to allow universal access from file URIs"
+msgstr "Akadálymentesítés engedélyezése fájl URI-címekből"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:675
+msgid "Enable DOM paste"
+msgstr "DOM beillesztés engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:676
+msgid "Whether to enable DOM paste"
+msgstr "DOM beillesztés engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:694
+msgid "Tab key cycles through elements"
+msgstr "A Tab billentyű vált az elemek között"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:695
+msgid "Whether the tab key cycles through elements on the page."
+msgstr "A Tab billentyű váltogat az oldal elemei között."
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:715
+msgid "Enable Default Context Menu"
+msgstr "Alapértelmezett helyi menü engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:716
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr "Engedélyezi a jobb kattintások kezelését az alapértelmezett helyi menü létrehozásához"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:736
+msgid "Enable Site Specific Quirks"
+msgstr "Oldalspecifikus kerülő megoldások engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:737
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Engedélyezi az oldalspecifikus kompatibilitási kerülő megoldásokat"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:759
+msgid "Enable page cache"
+msgstr "Oldalgyorsítótár engedélyezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:760
+msgid "Whether the page cache should be used"
+msgstr "Az oldalgyorsítótár használható-e"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:780
+msgid "Auto Resize Window"
+msgstr "Ablak automatikus átméretezése"
+
+#: WebKit/gtk/webkit/webkitwebsettings.cpp:781
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr "A felső szintű ablak automatikus átméretezése, ha az oldal kéri"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2316
+msgid "Returns the @web_view's document title"
+msgstr "Visszaadja a @web_view dokumentumcímét"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2330
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "Visszaadja a @web_view által megjelenített tartalmak jelenlegi URL-címét"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2343
+msgid "Copy target list"
+msgstr "Másolási céllista"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2344
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr "A webnézet által vágólapra másoláshoz támogatott célok listája"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2357
+msgid "Paste target list"
+msgstr "Beillesztési céllista"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2358
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr "A webnézet által vágólapról beillesztéshez támogatott célok listája"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2364
+msgid "Settings"
+msgstr "Beállítások"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2365
+msgid "An associated WebKitWebSettings instance"
+msgstr "Egy társított WebKitWebSettings példány"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2378
+msgid "Web Inspector"
+msgstr "Webfigyelő"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2379
+msgid "The associated WebKitWebInspector instance"
+msgstr "A társított WebKitWebInspector példány"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2399
+msgid "Editable"
+msgstr "Szerkeszthető"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2400
+msgid "Whether content can be modified by the user"
+msgstr "A tartalom módosítható-e a felhasználó által"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2406
+msgid "Transparent"
+msgstr "Ãtlátszó"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2407
+msgid "Whether content has a transparent background"
+msgstr "A tartalomnak átlátszó-e a háttere"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2420
+msgid "Zoom level"
+msgstr "Nagyítás mértéke"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2421
+msgid "The level of zoom of the content"
+msgstr "A tartalom nagyítási szintje"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2436
+msgid "Full content zoom"
+msgstr "Teljes tartalom nagyítása"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2437
+msgid "Whether the full content is scaled when zooming"
+msgstr "A teljes tartalom át van-e méretezve nagyításkor"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2450
+msgid "Encoding"
+msgstr "Kódolás"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2451
+msgid "The default encoding of the web view"
+msgstr "A webnézet alapértelmezett kódolása"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2464
+msgid "Custom Encoding"
+msgstr "Egyéni kódolás"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2465
+msgid "The custom encoding of the web view"
+msgstr "A webnézet egyéni kódolása"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2517
+msgid "Icon URI"
+msgstr "Ikon URI"
+
+#: WebKit/gtk/webkit/webkitwebview.cpp:2518
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "A weblapikon URI-címe a #WebKitWebView-hoz."
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:55
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:60
+msgid "Submit"
+msgstr "Elküldés"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:65
+msgid "Reset"
+msgstr "Visszaállítás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:70
+msgid "_Searchable Index"
+msgstr "_Kereshető index"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:75
+msgid "Choose File"
+msgstr "Válasszon fájlt"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:80
+msgid "(None)"
+msgstr "(Nincs)"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:85
+msgid "Open Link in New _Window"
+msgstr "Hivatkozás megnyitása új _ablakban"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:90
+msgid "_Download Linked File"
+msgstr "Hi_vatkozott fájl letöltése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:95
+msgid "Copy Link Loc_ation"
+msgstr "Link _helyének másolása"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:100
+msgid "Open _Image in New Window"
+msgstr "Ké_p megnyitása új ablakban"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:105
+msgid "Sa_ve Image As"
+msgstr "Kép _mentése másként"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:110
+msgid "Cop_y Image"
+msgstr "Kép má_solása"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:115
+msgid "Open _Frame in New Window"
+msgstr "Keret megnyitása új _ablakban"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "_Reload"
+msgstr "Új_ratöltés"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:183
+msgid "No Guesses Found"
+msgstr "Nincsenek tippek"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:188
+msgid "_Ignore Spelling"
+msgstr "Ãrásmó_d mellÅ‘zése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:193
+msgid "_Learn Spelling"
+msgstr "Ãrásmód megtan_ulása"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:198
+msgid "_Search the Web"
+msgstr "Keresés a _weben"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:203
+msgid "_Look Up in Dictionary"
+msgstr "Keresés s_zótárban"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:208
+msgid "_Open Link"
+msgstr "_Hivatkozás megnyitása"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:213
+msgid "Ignore _Grammar"
+msgstr "N_yelvhelyesség mellőzése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:218
+msgid "Spelling and _Grammar"
+msgstr "Helyesírás és nyel_vhelyesség"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Show Spelling and Grammar"
+msgstr "Helyesírás és nyel_vhelyesség megjelenítése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:223
+msgid "_Hide Spelling and Grammar"
+msgstr "Helyesírás és nyelvhelyesség _elrejtése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:228
+msgid "_Check Document Now"
+msgstr "_Dokumentum ellenőrzése most"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:233
+msgid "Check Spelling While _Typing"
+msgstr "Helyesírás ellenőrzése _gépeléskor"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:238
+msgid "Check _Grammar With Spelling"
+msgstr "_Nyelvhelyesség ellenőrzése a helyesírással"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:243
+msgid "_Font"
+msgstr "_Betűkészlet"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:266
+msgid "_Outline"
+msgstr "_Körvonal"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:271
+msgid "Inspect _Element"
+msgstr "Elem _vizsgálata"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:276
+msgid "No recent searches"
+msgstr "Nincsenek legutóbbi keresések"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:281
+msgid "Recent searches"
+msgstr "Legutóbbi keresések"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:286
+msgid "_Clear recent searches"
+msgstr "Legutóbbi keresések _törlése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:291
+msgid "term"
+msgstr "kifejezés"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:296
+msgid "definition"
+msgstr "meghatározás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:301
+msgid "press"
+msgstr "nyomja meg"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:306
+msgid "select"
+msgstr "válassza ki"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:311
+msgid "activate"
+msgstr "aktiválja"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:316
+msgid "uncheck"
+msgstr "törölje"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:321
+msgid "check"
+msgstr "jelölje be"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:326
+msgid "jump"
+msgstr "ugrás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:342
+msgid " files"
+msgstr " fájl"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:364
+msgid "Loading..."
+msgstr "Betöltés…"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:369
+msgid "Live Broadcast"
+msgstr "Élő műsorszórás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:375
+msgid "audio element controller"
+msgstr "hangelem vezérlője"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
+msgid "video element controller"
+msgstr "videoelem vezérlője"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:379
+msgid "mute"
+msgstr "némítás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:381
+msgid "unmute"
+msgstr "hang be"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:383
+msgid "play"
+msgstr "lejátszás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:385
+msgid "pause"
+msgstr "szünet"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:387
+msgid "movie time"
+msgstr "film ideje"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:389
+msgid "timeline slider thumb"
+msgstr "idővonal-csúszka gombja"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:391
+msgid "back 30 seconds"
+msgstr "vissza 30 másodpercet"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:393
+msgid "return to realtime"
+msgstr "vissza valós időbe"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:395
+msgid "elapsed time"
+msgstr "eltelt idő"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:397
+msgid "remaining time"
+msgstr "fennmaradó idő"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:399
+msgid "status"
+msgstr "állapot"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:401
+msgid "fullscreen"
+msgstr "teljes képernyő"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:403
+msgid "fast forward"
+msgstr "gyorsan előre"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:405
+msgid "fast reverse"
+msgstr "gyorsan vissza"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:407
+msgid "show closed captions"
+msgstr "zárt fejezetek megjelenítése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
+msgid "hide closed captions"
+msgstr "zárt fejezetek elrejtése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:418
+msgid "audio element playback controls and status display"
+msgstr "hangelem lejátszási vezérlőelemei és állapotkijelzése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:420
+msgid "video element playback controls and status display"
+msgstr "videoelem lejátszási vezérlőelemei és állapotkijelzése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:422
+msgid "mute audio tracks"
+msgstr "hangsávok némítása"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:424
+msgid "unmute audio tracks"
+msgstr "hangsávok némítása ki"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
+msgid "begin playback"
+msgstr "lejátszás elkezdése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:428
+msgid "pause playback"
+msgstr "lejátszás szüneteltetése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:430
+msgid "movie time scrubber"
+msgstr "filmidő-csúszka"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:432
+msgid "movie time scrubber thumb"
+msgstr "filmidő-csúszka gombja"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:434
+msgid "seek movie back 30 seconds"
+msgstr "film visszatekerése 30 másodperccel"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:436
+msgid "return streaming movie to real time"
+msgstr "sugárzott film visszaállítása valós időre"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:438
+msgid "current movie time in seconds"
+msgstr "aktuális film ideje másodpercben"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:440
+msgid "number of seconds of movie remaining"
+msgstr "a filmből hátralévő másodpercek száma"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:442
+msgid "current movie status"
+msgstr "aktuális film állapota"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:444
+msgid "seek quickly back"
+msgstr "gyors visszatekerés"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:446
+msgid "seek quickly forward"
+msgstr "gyors előretekerés"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:448
+msgid "Play movie in fullscreen mode"
+msgstr "Film lejátszása teljes képernyőn"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:450
+msgid "start displaying closed captions"
+msgstr "zárt fejezetek megjelenítésének megkezdése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:452
+msgid "stop displaying closed captions"
+msgstr "zárt fejezetek megjelenítésének befejezése"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "indefinite time"
+msgstr "meghatározatlan idő"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:491
+msgid "value missing"
+msgstr "hiányzik az érték"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:497
+msgid "type mismatch"
+msgstr "nem megfelelő típus"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "pattern mismatch"
+msgstr "nem megfelelő minta"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:507
+msgid "too long"
+msgstr "túl hosszú"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
+msgid "range underflow"
+msgstr "tartomány-alulcsordulás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:517
+msgid "range overflow"
+msgstr "tartomány-túlcsordulás"
+
+#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:522
+msgid "step mismatch"
+msgstr "nem megfelelő lépés"
+
diff --git a/Source/WebKit/gtk/po/id.po b/Source/WebKit/gtk/po/id.po
new file mode 100644
index 0000000..fb3a8a9
--- /dev/null
+++ b/Source/WebKit/gtk/po/id.po
@@ -0,0 +1,1385 @@
+# Indonesian translation for webkit.
+# Copyright (C) 2010 webkit's COPYRIGHT HOLDER
+# This file is distributed under the same license as the webkit package.
+# Andika Triwidada <andika@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: webkit HEAD\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org\n"
+"POT-Creation-Date: 2010-09-22 03:26+0000\n"
+"PO-Revision-Date: 2010-09-24 14:25+0700\n"
+"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"Language-Team: GNOME Indonesian Translation Team <gnome@i15n.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Indonesian\n"
+"X-Poedit-Country: Indonesia\n"
+
+#: ../WebCoreSupport/ChromeClientGtk.cpp:569
+msgid "Upload File"
+msgstr "Unggah Berkas"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:61
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:194
+msgid "Input _Methods"
+msgstr "_Metoda Masukan"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:78
+msgid "LRM _Left-to-right mark"
+msgstr "LRM _Left-to-right mark"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:79
+msgid "RLM _Right-to-left mark"
+msgstr "RLM _Right-to-left mark"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRE Left-to-right _embedding"
+msgstr "LRE Left-to-right _embedding"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLE Right-to-left e_mbedding"
+msgstr "RLE Right-to-left e_mbedding"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRO Left-to-right _override"
+msgstr "LRO Left-to-right _override"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLO Right-to-left o_verride"
+msgstr "RLO Right-to-left o_verride"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "PDF _Pop directional formatting"
+msgstr "PDF _Pop directional formatting"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "ZWS _Zero width space"
+msgstr "ZWS _Zero width space"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "ZWJ Zero width _joiner"
+msgstr "ZWJ Zero width _joiner"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "ZWNJ Zero width _non-joiner"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:109
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:189
+msgid "_Insert Unicode Control Character"
+msgstr "S_isipkan karakter Kontrol Unicode"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1140
+msgid "Load request cancelled"
+msgstr "Permintaan memuat dibatalkan"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1146
+msgid "Not allowed to use restricted network port"
+msgstr "Tak diijinkan memakai port jaringan yang dibatasi"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1152
+msgid "URL cannot be shown"
+msgstr "URL tak bisa ditampilkan"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1158
+msgid "Frame load was interrupted"
+msgstr "Pemuatan rangka terputus"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1164
+msgid "Content with the specified MIME type cannot be shown"
+msgstr "Isi dengan jenis MIME yang dinyatakan tidak dapat ditampilkan"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1170
+msgid "File does not exist"
+msgstr "Berkas tak ada"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1176
+msgid "Plugin will handle load"
+msgstr "Plugin akan menangani beban"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:386
+msgid "Play"
+msgstr "Putar"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:388
+msgid "Pause"
+msgstr "Jeda"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:534
+msgid "Play / Pause"
+msgstr "Putar / Jeda"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:534
+msgid "Play or pause the media"
+msgstr "Putar atau tahan media"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:542
+msgid "Time:"
+msgstr "Waktu:"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:566
+msgid "Exit Fullscreen"
+msgstr "Keluar Mode Layar Penuh"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:566
+msgid "Exit from fullscreen mode"
+msgstr "Keluar dari mode layar penuh"
+
+#: ../webkit/webkitdownload.cpp:272
+msgid "Network Request"
+msgstr "Request Jaringan"
+
+#: ../webkit/webkitdownload.cpp:273
+msgid "The network request for the URI that should be downloaded"
+msgstr "Request jaringan bagi URI yang mesti diunduh"
+
+#: ../webkit/webkitdownload.cpp:287
+msgid "Network Response"
+msgstr "Respon Jaringan"
+
+#: ../webkit/webkitdownload.cpp:288
+msgid "The network response for the URI that should be downloaded"
+msgstr "Respon jaringan bagi URI yang mesti diunduh"
+
+#: ../webkit/webkitdownload.cpp:302
+msgid "Destination URI"
+msgstr "URI tujuan"
+
+#: ../webkit/webkitdownload.cpp:303
+msgid "The destination URI where to save the file"
+msgstr "URI tujuan tempat menyimpan berkas"
+
+#: ../webkit/webkitdownload.cpp:317
+msgid "Suggested Filename"
+msgstr "Nama Berkas Yang Disarankan"
+
+#: ../webkit/webkitdownload.cpp:318
+msgid "The filename suggested as default when saving"
+msgstr "Nama berkas yang disarankan sebagai bawaan ketika menyimpan"
+
+#: ../webkit/webkitdownload.cpp:335
+msgid "Progress"
+msgstr "Kemajuan"
+
+#: ../webkit/webkitdownload.cpp:336
+msgid "Determines the current progress of the download"
+msgstr "Menyatakan tingkat kemajuan pengunduhan"
+
+#: ../webkit/webkitdownload.cpp:349
+msgid "Status"
+msgstr "Status"
+
+#: ../webkit/webkitdownload.cpp:350
+msgid "Determines the current status of the download"
+msgstr "Menyatakan status pengunduhan kini"
+
+#: ../webkit/webkitdownload.cpp:365
+msgid "Current Size"
+msgstr "Ukuran Kini"
+
+#: ../webkit/webkitdownload.cpp:366
+msgid "The length of the data already downloaded"
+msgstr "Panjang data yang telah diunduh"
+
+#: ../webkit/webkitdownload.cpp:380
+msgid "Total Size"
+msgstr "Ukuran Total"
+
+#: ../webkit/webkitdownload.cpp:381
+msgid "The total size of the file"
+msgstr "Ukuran total berkas"
+
+#: ../webkit/webkitdownload.cpp:533
+msgid "User cancelled the download"
+msgstr "Pengguna membatalkan pengunduhan"
+
+#: ../webkit/webkithittestresult.cpp:148
+msgid "Context"
+msgstr "Konteks"
+
+#: ../webkit/webkithittestresult.cpp:149
+msgid "Flags indicating the kind of target that received the event."
+msgstr "Flag yang mengindikasikan jenis target yang menerima kejadian."
+
+#: ../webkit/webkithittestresult.cpp:163
+msgid "Link URI"
+msgstr "URI Taut"
+
+#: ../webkit/webkithittestresult.cpp:164
+msgid "The URI to which the target that received the event points, if any."
+msgstr ""
+"URI tautan yang menjadi bagian dari target yang menerima kejadian, bila ada."
+
+#: ../webkit/webkithittestresult.cpp:177
+msgid "Image URI"
+msgstr "URI Gambar"
+
+#: ../webkit/webkithittestresult.cpp:178
+msgid ""
+"The URI of the image that is part of the target that received the event, if "
+"any."
+msgstr ""
+"URI gambar yang menjadi bagian dari target yang menerima kejadian, bila ada."
+
+#: ../webkit/webkithittestresult.cpp:191
+msgid "Media URI"
+msgstr "URI Media"
+
+#: ../webkit/webkithittestresult.cpp:192
+msgid ""
+"The URI of the media that is part of the target that received the event, if "
+"any."
+msgstr ""
+"URI media yang menjadi bagian dari target yang menerima kejadian, bila ada."
+
+#: ../webkit/webkithittestresult.cpp:213
+msgid "Inner node"
+msgstr "Node dalam"
+
+#: ../webkit/webkithittestresult.cpp:214
+msgid "The inner DOM node associated with the hit test result."
+msgstr "Node DOM dalam yang terkait dengan hasil uji hit."
+
+#: ../webkit/webkitnetworkrequest.cpp:136
+#: ../webkit/webkitnetworkresponse.cpp:134 ../webkit/webkitwebframe.cpp:315
+#: ../webkit/webkitwebhistoryitem.cpp:178 ../webkit/webkitwebresource.cpp:126
+#: ../webkit/webkitwebview.cpp:2603
+msgid "URI"
+msgstr "URI"
+
+#: ../webkit/webkitnetworkrequest.cpp:137
+msgid "The URI to which the request will be made."
+msgstr "URI kemana permintaan akan dibuat."
+
+#: ../webkit/webkitnetworkrequest.cpp:150
+#: ../webkit/webkitnetworkresponse.cpp:148
+msgid "Message"
+msgstr "Pesan"
+
+#: ../webkit/webkitnetworkrequest.cpp:151
+msgid "The SoupMessage that backs the request."
+msgstr "SoupMessage yang mendukung permintaan."
+
+#: ../webkit/webkitnetworkresponse.cpp:135
+msgid "The URI to which the response will be made."
+msgstr "URI kemana respon akan dibuat."
+
+#: ../webkit/webkitnetworkresponse.cpp:149
+msgid "The SoupMessage that backs the response."
+msgstr "SoupMessage yang mendukung respon."
+
+#: ../webkit/webkitsecurityorigin.cpp:151
+msgid "Protocol"
+msgstr "Protokol"
+
+#: ../webkit/webkitsecurityorigin.cpp:152
+msgid "The protocol of the security origin"
+msgstr "Protokol dari asal keamanan"
+
+#: ../webkit/webkitsecurityorigin.cpp:165
+msgid "Host"
+msgstr "Host"
+
+#: ../webkit/webkitsecurityorigin.cpp:166
+msgid "The host of the security origin"
+msgstr "Host dari asal keamanan"
+
+#: ../webkit/webkitsecurityorigin.cpp:179
+msgid "Port"
+msgstr "Port"
+
+#: ../webkit/webkitsecurityorigin.cpp:180
+msgid "The port of the security origin"
+msgstr "Port dari asal keamanan"
+
+#: ../webkit/webkitsecurityorigin.cpp:193
+msgid "Web Database Usage"
+msgstr "Penggunaan Basis Data Web"
+
+#: ../webkit/webkitsecurityorigin.cpp:194
+msgid "The cumulative size of all web databases in the security origin"
+msgstr "Ukuran kumulatif dari semua basis data web dalam asal keamanan"
+
+#: ../webkit/webkitsecurityorigin.cpp:206
+msgid "Web Database Quota"
+msgstr "Kuota Basis Data Web"
+
+#: ../webkit/webkitsecurityorigin.cpp:207
+msgid "The web database quota of the security origin in bytes"
+msgstr "Kuota basis data web dari asal keamanan dalam byte"
+
+#: ../webkit/webkitsoupauthdialog.c:251
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "Suatu nama pengguna dan kata sandi sedang diminta oleh situs %s"
+
+#: ../webkit/webkitsoupauthdialog.c:281
+msgid "Server message:"
+msgstr "Pesan server:"
+
+#: ../webkit/webkitsoupauthdialog.c:294
+msgid "Username:"
+msgstr "Nama Pengguna:"
+
+#: ../webkit/webkitsoupauthdialog.c:296
+msgid "Password:"
+msgstr "Kata Sandi:"
+
+#: ../webkit/webkitsoupauthdialog.c:305
+msgid "_Remember password"
+msgstr "Ingat _sandi"
+
+#: ../webkit/webkitwebdatabase.cpp:176
+msgid "Security Origin"
+msgstr "Asal Keamanan"
+
+#: ../webkit/webkitwebdatabase.cpp:177
+msgid "The security origin of the database"
+msgstr "Asal keamanan dari basis data"
+
+#: ../webkit/webkitwebdatabase.cpp:190 ../webkit/webkitwebframe.cpp:301
+msgid "Name"
+msgstr "Nama"
+
+#: ../webkit/webkitwebdatabase.cpp:191
+msgid "The name of the Web Database database"
+msgstr "Nama dari basis data Basis Data Web"
+
+#: ../webkit/webkitwebdatabase.cpp:204
+msgid "Display Name"
+msgstr "Nama Tampilan"
+
+#: ../webkit/webkitwebdatabase.cpp:205
+msgid "The display name of the Web Storage database"
+msgstr "Nama tampilan dari basis data Penyimpanan Web"
+
+#: ../webkit/webkitwebdatabase.cpp:218
+msgid "Expected Size"
+msgstr "Ukuran Diharapkan"
+
+#: ../webkit/webkitwebdatabase.cpp:219
+msgid "The expected size of the Web Database database"
+msgstr "Ukuran yang diharapkan dari basis data Basis Data Web"
+
+#: ../webkit/webkitwebdatabase.cpp:231
+msgid "Size"
+msgstr "Ukuran"
+
+#: ../webkit/webkitwebdatabase.cpp:232
+msgid "The current size of the Web Database database"
+msgstr "Ukuran kini dari basis data Basis Data Web"
+
+#: ../webkit/webkitwebdatabase.cpp:244
+msgid "Filename"
+msgstr "Nama berkas"
+
+#: ../webkit/webkitwebdatabase.cpp:245
+msgid "The absolute filename of the Web Storage database"
+msgstr "Nama berkas absolut dari basis data Penyimpanan Web"
+
+#: ../webkit/webkitwebframe.cpp:302
+msgid "The name of the frame"
+msgstr "Nama rangka"
+
+#: ../webkit/webkitwebframe.cpp:308 ../webkit/webkitwebhistoryitem.cpp:146
+#: ../webkit/webkitwebview.cpp:2589
+msgid "Title"
+msgstr "Judul"
+
+#: ../webkit/webkitwebframe.cpp:309
+msgid "The document title of the frame"
+msgstr "Judul dokumen dari rangka"
+
+#: ../webkit/webkitwebframe.cpp:316
+msgid "The current URI of the contents displayed by the frame"
+msgstr "URI kini dari isi yang ditampilkan oleh rangka"
+
+#: ../webkit/webkitwebframe.cpp:347
+msgid "Horizontal Scrollbar Policy"
+msgstr "Kebijakan Penggulungan Horisontal"
+
+#: ../webkit/webkitwebframe.cpp:348
+msgid ""
+"Determines the current policy for the horizontal scrollbar of the frame."
+msgstr ""
+"Menentukan kebijakan kini bagi bilah penggulung horisontal dari bingkai. "
+
+#: ../webkit/webkitwebframe.cpp:365
+msgid "Vertical Scrollbar Policy"
+msgstr "Kebijakan Penggulungan Vertikal"
+
+#: ../webkit/webkitwebframe.cpp:366
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr ""
+"Menentukan kebijakan kini bagi bilah penggulung horisontal dari bingkai."
+
+#: ../webkit/webkitwebhistoryitem.cpp:147
+msgid "The title of the history item"
+msgstr "Judul butir riwayat"
+
+#: ../webkit/webkitwebhistoryitem.cpp:162
+msgid "Alternate Title"
+msgstr "Judul Alternatif"
+
+#: ../webkit/webkitwebhistoryitem.cpp:163
+msgid "The alternate title of the history item"
+msgstr "Judul alternatif dari butir riwayat"
+
+#: ../webkit/webkitwebhistoryitem.cpp:179
+msgid "The URI of the history item"
+msgstr "URI dari butir riwayat"
+
+#: ../webkit/webkitwebhistoryitem.cpp:194
+#: ../webkit/webkitwebnavigationaction.cpp:173
+msgid "Original URI"
+msgstr "URI Asli"
+
+#: ../webkit/webkitwebhistoryitem.cpp:195
+msgid "The original URI of the history item"
+msgstr "URI asli dari butir riwayat"
+
+#: ../webkit/webkitwebhistoryitem.cpp:210
+msgid "Last visited Time"
+msgstr "Waktu kunjungan terakhir"
+
+#: ../webkit/webkitwebhistoryitem.cpp:211
+msgid "The time at which the history item was last visited"
+msgstr "Waktu saat butir riwayat terakhir kali dikunjungi"
+
+#: ../webkit/webkitwebinspector.cpp:269
+msgid "Web View"
+msgstr "Tilikan Web"
+
+#: ../webkit/webkitwebinspector.cpp:270
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "Tilikan Web yang merender Pemeriksa Web itu sendiri"
+
+#: ../webkit/webkitwebinspector.cpp:283
+msgid "Inspected URI"
+msgstr "URI yang diperiksa"
+
+#: ../webkit/webkitwebinspector.cpp:284
+msgid "The URI that is currently being inspected"
+msgstr "URI yang kini sedang diperiksa"
+
+#: ../webkit/webkitwebinspector.cpp:300
+msgid "Enable JavaScript profiling"
+msgstr "Aktifkan pemrofilan JavaScript"
+
+#: ../webkit/webkitwebinspector.cpp:301
+msgid "Profile the executed JavaScript."
+msgstr "Profilkan JavaScript yang dieksekusi."
+
+#: ../webkit/webkitwebinspector.cpp:316
+msgid "Enable Timeline profiling"
+msgstr "Aktifkan pemrofilan Timeline"
+
+#: ../webkit/webkitwebinspector.cpp:317
+msgid "Profile the WebCore instrumentation."
+msgstr "Profilkan instrumentasi WebCore."
+
+#: ../webkit/webkitwebnavigationaction.cpp:158
+msgid "Reason"
+msgstr "Alasan"
+
+#: ../webkit/webkitwebnavigationaction.cpp:159
+msgid "The reason why this navigation is occurring"
+msgstr "Alasan kenapa navigasi ini terjadi"
+
+#: ../webkit/webkitwebnavigationaction.cpp:174
+msgid "The URI that was requested as the target for the navigation"
+msgstr "URI yang diminta sebagai target navigasi"
+
+#: ../webkit/webkitwebnavigationaction.cpp:188
+msgid "Button"
+msgstr "Tombol"
+
+#: ../webkit/webkitwebnavigationaction.cpp:189
+msgid "The button used to click"
+msgstr "Tombol yang dipakai untuk mengklik"
+
+#: ../webkit/webkitwebnavigationaction.cpp:204
+msgid "Modifier state"
+msgstr "Keadaan perubah"
+
+#: ../webkit/webkitwebnavigationaction.cpp:205
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "Suatu bitmask yang mewakili keadaan dari kunci pengubah"
+
+#: ../webkit/webkitwebnavigationaction.cpp:220
+msgid "Target frame"
+msgstr "Bingkai target"
+
+#: ../webkit/webkitwebnavigationaction.cpp:221
+msgid "The target frame for the navigation"
+msgstr "Bingkai target bagi navigasi"
+
+#: ../webkit/webkitwebresource.cpp:127
+msgid "The uri of the resource"
+msgstr "URI dari sumber daya"
+
+#: ../webkit/webkitwebresource.cpp:141
+msgid "MIME Type"
+msgstr "Jenis MIME"
+
+#: ../webkit/webkitwebresource.cpp:142
+msgid "The MIME type of the resource"
+msgstr "Jenis MIME dari sumber daya"
+
+#: ../webkit/webkitwebresource.cpp:156 ../webkit/webkitwebview.cpp:2724
+msgid "Encoding"
+msgstr "Pengkodean"
+
+#: ../webkit/webkitwebresource.cpp:157
+msgid "The text encoding name of the resource"
+msgstr "Nama pengkodean teks dari sumber daya"
+
+#: ../webkit/webkitwebresource.cpp:172
+msgid "Frame Name"
+msgstr "Nama Rangka"
+
+#: ../webkit/webkitwebresource.cpp:173
+msgid "The frame name of the resource"
+msgstr "Nama rangka dari sumber daya"
+
+#: ../webkit/webkitwebsettings.cpp:247
+msgid "Default Encoding"
+msgstr "Pengkodean Bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:248
+msgid "The default encoding used to display text."
+msgstr "Pengkodean bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:256
+msgid "Cursive Font Family"
+msgstr "Keluarga Fonta Cursive"
+
+#: ../webkit/webkitwebsettings.cpp:257
+msgid "The default Cursive font family used to display text."
+msgstr "Keluarga fonta Cursive bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:265
+msgid "Default Font Family"
+msgstr "Keluarga Fonta Bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:266
+msgid "The default font family used to display text."
+msgstr "Keluarga fonta bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:274
+msgid "Fantasy Font Family"
+msgstr "Keluarga Fonta Fantasy"
+
+#: ../webkit/webkitwebsettings.cpp:275
+msgid "The default Fantasy font family used to display text."
+msgstr "Keluarga fonta Fantasy bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:283
+msgid "Monospace Font Family"
+msgstr "Keluarga Fonta Monospace"
+
+#: ../webkit/webkitwebsettings.cpp:284
+msgid "The default font family used to display monospace text."
+msgstr ""
+"Keluarga fonta bawaan yang dipakai untuk menampilkan teks lebar-seragam."
+
+#: ../webkit/webkitwebsettings.cpp:292
+msgid "Sans Serif Font Family"
+msgstr "Keluarga Fonta Sans Serif"
+
+#: ../webkit/webkitwebsettings.cpp:293
+msgid "The default Sans Serif font family used to display text."
+msgstr "Keluarga fonta Sans Serif bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:301
+msgid "Serif Font Family"
+msgstr "Keluarga Fonta Serif"
+
+#: ../webkit/webkitwebsettings.cpp:302
+msgid "The default Serif font family used to display text."
+msgstr "Keluarga fonta Serif bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:310
+msgid "Default Font Size"
+msgstr "Ukuran Fonta Bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:311
+msgid "The default font size used to display text."
+msgstr "Ukuran fonta bawaan yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:319
+msgid "Default Monospace Font Size"
+msgstr "Ukuran Fonta Lebar-Seragam Bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:320
+msgid "The default font size used to display monospace text."
+msgstr "Ukuran fonta bawaan yang dipakai untuk menampilkan teks lebar-seragam."
+
+#: ../webkit/webkitwebsettings.cpp:328
+msgid "Minimum Font Size"
+msgstr "Ukuran Fonta Minimum"
+
+#: ../webkit/webkitwebsettings.cpp:329
+msgid "The minimum font size used to display text."
+msgstr "Ukuran fonta minimum yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:337
+msgid "Minimum Logical Font Size"
+msgstr "Ukuran Fonta Lojik Minimum"
+
+#: ../webkit/webkitwebsettings.cpp:338
+msgid "The minimum logical font size used to display text."
+msgstr "Ukuran fonta lojik minimum yang dipakai untuk menampilkan teks."
+
+#: ../webkit/webkitwebsettings.cpp:357
+msgid "Enforce 96 DPI"
+msgstr "Paksakan 96 DPI"
+
+#: ../webkit/webkitwebsettings.cpp:358
+msgid "Enforce a resolution of 96 DPI"
+msgstr "Paksakan resolusi 96 DPI"
+
+#: ../webkit/webkitwebsettings.cpp:366
+msgid "Auto Load Images"
+msgstr "Muat Otomatis Gambar"
+
+#: ../webkit/webkitwebsettings.cpp:367
+msgid "Load images automatically."
+msgstr "Muat gambar secara otomatis."
+
+#: ../webkit/webkitwebsettings.cpp:375
+msgid "Auto Shrink Images"
+msgstr "Perkecil Gambar Otomatis"
+
+#: ../webkit/webkitwebsettings.cpp:376
+msgid "Automatically shrink standalone images to fit."
+msgstr "Otomatis memperkecil gambar agar pas."
+
+#: ../webkit/webkitwebsettings.cpp:384
+msgid "Print Backgrounds"
+msgstr "Cetak Latar"
+
+#: ../webkit/webkitwebsettings.cpp:385
+msgid "Whether background images should be printed."
+msgstr "Apakah gambar latar mesti dicetak."
+
+#: ../webkit/webkitwebsettings.cpp:393
+msgid "Enable Scripts"
+msgstr "Aktifkan Skrip"
+
+#: ../webkit/webkitwebsettings.cpp:394
+msgid "Enable embedded scripting languages."
+msgstr "Aktifkan bahasa skrip tertempel."
+
+#: ../webkit/webkitwebsettings.cpp:402
+msgid "Enable Plugins"
+msgstr "Aktifkan Pengaya"
+
+#: ../webkit/webkitwebsettings.cpp:403
+msgid "Enable embedded plugin objects."
+msgstr "Aktifkan objek pengaya tertempel."
+
+#: ../webkit/webkitwebsettings.cpp:411
+msgid "Resizable Text Areas"
+msgstr "Wilayah Teks Yang Dapat Diubah Ukurannya"
+
+#: ../webkit/webkitwebsettings.cpp:412
+msgid "Whether text areas are resizable."
+msgstr "Apakah wilayah teks dapat diubah ukurannya."
+
+#: ../webkit/webkitwebsettings.cpp:419
+msgid "User Stylesheet URI"
+msgstr "URI Stylesheet Pengguna"
+
+#: ../webkit/webkitwebsettings.cpp:420
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "URI dari stylesheet yang diterapkan pada setiap halaman."
+
+#: ../webkit/webkitwebsettings.cpp:435
+msgid "Zoom Stepping Value"
+msgstr "Nilai Langkah Zum"
+
+#: ../webkit/webkitwebsettings.cpp:436
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr "Nilai perubahan aras zum ketika memperbesar atau memperkecil."
+
+#: ../webkit/webkitwebsettings.cpp:454
+msgid "Enable Developer Extras"
+msgstr "Aktifkan Tambahan Bagi Pengembang"
+
+#: ../webkit/webkitwebsettings.cpp:455
+msgid "Enables special extensions that help developers"
+msgstr "Aktifkan perluasan khusus untuk membantu para pengembang"
+
+#: ../webkit/webkitwebsettings.cpp:475
+msgid "Enable Private Browsing"
+msgstr "Aktifkan Penjelajahan Privat"
+
+#: ../webkit/webkitwebsettings.cpp:476
+msgid "Enables private browsing mode"
+msgstr "Aktifkan mode penjelajahan privat"
+
+#: ../webkit/webkitwebsettings.cpp:491
+msgid "Enable Spell Checking"
+msgstr "Aktifkan Pemeriksaan Ejaan"
+
+#: ../webkit/webkitwebsettings.cpp:492
+msgid "Enables spell checking while typing"
+msgstr "Aktifkan pemeriksaan ejaan ketika mengetik"
+
+#: ../webkit/webkitwebsettings.cpp:515
+msgid "Languages to use for spell checking"
+msgstr "Bahasa yang dipakai untuk memeriksa ejaan"
+
+#: ../webkit/webkitwebsettings.cpp:516
+msgid "Comma separated list of languages to use for spell checking"
+msgstr "Daftar bahasa, dipisah dengan koma, yang dipakai untuk memeriksa ejaan"
+
+#: ../webkit/webkitwebsettings.cpp:530
+msgid "Enable Caret Browsing"
+msgstr "Aktifkan Perambanan Caret"
+
+#: ../webkit/webkitwebsettings.cpp:531
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr "Apakah mengaktifkan navigasi papan tik bagi aksesabilitas"
+
+#: ../webkit/webkitwebsettings.cpp:546
+msgid "Enable HTML5 Database"
+msgstr "Aktifkan Basis Data HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:547
+msgid "Whether to enable HTML5 database support"
+msgstr "Apakah mengaktifkan dukungan basis data HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:562
+msgid "Enable HTML5 Local Storage"
+msgstr "Aktifkan Penyimpanan Lokal HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:563
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr "Apakah mengaktifkan dukungan Penyimpanan Lokal HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:577
+msgid "Enable XSS Auditor"
+msgstr "Aktifkan Auditor XSS"
+
+#: ../webkit/webkitwebsettings.cpp:578
+msgid "Whether to enable the XSS auditor"
+msgstr "Apakah auditor XSS diaktifkan"
+
+#: ../webkit/webkitwebsettings.cpp:596
+msgid "Enable Spatial Navigation"
+msgstr "Aktifkan Navigasi Spasial"
+
+#: ../webkit/webkitwebsettings.cpp:597
+msgid "Whether to enable Spatial Navigation"
+msgstr "Apakah mengaktifkan Navigasi Spasial"
+
+#: ../webkit/webkitwebsettings.cpp:614
+msgid "User Agent"
+msgstr "User Agent"
+
+#: ../webkit/webkitwebsettings.cpp:615
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "String User-Agent yang dipakai oleh WebKitGtk"
+
+#: ../webkit/webkitwebsettings.cpp:630
+msgid "JavaScript can open windows automatically"
+msgstr "JavaScript dapat otomatis membuka jendela"
+
+#: ../webkit/webkitwebsettings.cpp:631
+msgid "Whether JavaScript can open windows automatically"
+msgstr "Apakah JavaScript dapat otomatis membuka jendela"
+
+#: ../webkit/webkitwebsettings.cpp:645
+msgid "JavaScript can access Clipboard"
+msgstr "JavaScript dapat mengakses Papan Klip"
+
+#: ../webkit/webkitwebsettings.cpp:646
+msgid "Whether JavaScript can access Clipboard"
+msgstr "Apakah JavaScript dapat mengakses Papan Klip"
+
+#: ../webkit/webkitwebsettings.cpp:662
+msgid "Enable offline web application cache"
+msgstr "Aktifkan singgahan aplikasi web luring"
+
+#: ../webkit/webkitwebsettings.cpp:663
+msgid "Whether to enable offline web application cache"
+msgstr "Apakah mengaktifkan singgahan aplikasi web luring"
+
+#: ../webkit/webkitwebsettings.cpp:690
+msgid "Editing behavior"
+msgstr "Perilaku penyuntingan"
+
+#: ../webkit/webkitwebsettings.cpp:691
+msgid "The behavior mode to use in editing mode"
+msgstr "Mode perilaku yang dipakai pada mode penyuntingan"
+
+#: ../webkit/webkitwebsettings.cpp:707
+msgid "Enable universal access from file URIs"
+msgstr "Aktifkan akses universal dari URI berkas"
+
+#: ../webkit/webkitwebsettings.cpp:708
+msgid "Whether to allow universal access from file URIs"
+msgstr "Apakah mengaktifkan akses universal dari URI berkas"
+
+#: ../webkit/webkitwebsettings.cpp:723
+msgid "Enable DOM paste"
+msgstr "Aktifkan tempel DOM"
+
+#: ../webkit/webkitwebsettings.cpp:724
+msgid "Whether to enable DOM paste"
+msgstr "Apakah mengaktifkan penempelan DOM"
+
+#: ../webkit/webkitwebsettings.cpp:742
+msgid "Tab key cycles through elements"
+msgstr "Kunci tab menggilir antar elemen"
+
+#: ../webkit/webkitwebsettings.cpp:743
+msgid "Whether the tab key cycles through elements on the page."
+msgstr "Apakah kunci tab menggilir antar elemen pada halaman itu."
+
+#: ../webkit/webkitwebsettings.cpp:763
+msgid "Enable Default Context Menu"
+msgstr "Aktifkan Menu Konteks Bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:764
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr "Mengaktifkan penanganan klik kanan untuk pembuatan menu konteks bawaan"
+
+#: ../webkit/webkitwebsettings.cpp:784
+msgid "Enable Site Specific Quirks"
+msgstr "Aktifkan Perilaku Khusus Situs"
+
+#: ../webkit/webkitwebsettings.cpp:785
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Aktifkan pengakalan kompatibilitas spesifik situs"
+
+#: ../webkit/webkitwebsettings.cpp:807
+msgid "Enable page cache"
+msgstr "Aktifkan singgahan halaman"
+
+#: ../webkit/webkitwebsettings.cpp:808
+msgid "Whether the page cache should be used"
+msgstr "Apakah mengaktifkan singgahan halaman"
+
+#: ../webkit/webkitwebsettings.cpp:828
+msgid "Auto Resize Window"
+msgstr "Otomatis Ubah Ukuran Jendela"
+
+#: ../webkit/webkitwebsettings.cpp:829
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr ""
+"Otomatis ubah ukuran jendela aras puncak ketika suatu halaman memintanya"
+
+#: ../webkit/webkitwebsettings.cpp:861
+msgid "Enable Java Applet"
+msgstr "Aktifkan Aplet Java"
+
+#: ../webkit/webkitwebsettings.cpp:862
+msgid "Whether Java Applet support through <applet> should be enabled"
+msgstr "Apakah dukungan Aplet Java melalui <applet> mesti diaktifkan"
+
+#: ../webkit/webkitwebview.cpp:2590
+msgid "Returns the @web_view's document title"
+msgstr "Mengembalikan judul dokumen @web_view"
+
+#: ../webkit/webkitwebview.cpp:2604
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "Mengembalikan URI kini dari isi yang ditampilkan oleh @web_view"
+
+#: ../webkit/webkitwebview.cpp:2617
+msgid "Copy target list"
+msgstr "Daftar target salin"
+
+#: ../webkit/webkitwebview.cpp:2618
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr "Daftar target yang didukung tilikan web ini bagi penyalinan clipboard"
+
+#: ../webkit/webkitwebview.cpp:2631
+msgid "Paste target list"
+msgstr "Daftar target tempel"
+
+#: ../webkit/webkitwebview.cpp:2632
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr "Daftar target yang didukung tilikan web ini bagi penempelan clipboard"
+
+#: ../webkit/webkitwebview.cpp:2638
+msgid "Settings"
+msgstr "Tatanan"
+
+#: ../webkit/webkitwebview.cpp:2639
+msgid "An associated WebKitWebSettings instance"
+msgstr "Instansi WebKitWebSettings yang terkait"
+
+#: ../webkit/webkitwebview.cpp:2652
+msgid "Web Inspector"
+msgstr "Pemeriksa Web"
+
+#: ../webkit/webkitwebview.cpp:2653
+msgid "The associated WebKitWebInspector instance"
+msgstr "Instansi WebKitWebInspector yang terkait"
+
+#: ../webkit/webkitwebview.cpp:2673
+msgid "Editable"
+msgstr "Dapat diedit"
+
+#: ../webkit/webkitwebview.cpp:2674
+msgid "Whether content can be modified by the user"
+msgstr "Apakah isi dapat diubah oleh pengguna"
+
+#: ../webkit/webkitwebview.cpp:2680
+msgid "Transparent"
+msgstr "Transparan"
+
+#: ../webkit/webkitwebview.cpp:2681
+msgid "Whether content has a transparent background"
+msgstr "Apakah isi memiliki latar transparan"
+
+#: ../webkit/webkitwebview.cpp:2694
+msgid "Zoom level"
+msgstr "Tingkat zum"
+
+#: ../webkit/webkitwebview.cpp:2695
+msgid "The level of zoom of the content"
+msgstr "Aras zum dari isi"
+
+#: ../webkit/webkitwebview.cpp:2710
+msgid "Full content zoom"
+msgstr "Zum seluruh isi"
+
+#: ../webkit/webkitwebview.cpp:2711
+msgid "Whether the full content is scaled when zooming"
+msgstr "Apakah seluruh isi diskalakan ketika dizum"
+
+#: ../webkit/webkitwebview.cpp:2725
+msgid "The default encoding of the web view"
+msgstr "Pengkodean bawaan dari tilikan web"
+
+#: ../webkit/webkitwebview.cpp:2738
+msgid "Custom Encoding"
+msgstr "Pengkodean Gubahan"
+
+#: ../webkit/webkitwebview.cpp:2739
+msgid "The custom encoding of the web view"
+msgstr "Pengkodean gubahan dari tilikan web"
+
+#: ../webkit/webkitwebview.cpp:2791
+msgid "Icon URI"
+msgstr "URI Ikon"
+
+#: ../webkit/webkitwebview.cpp:2792
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "URI bagi favicon bagi #WebKitWebView."
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:56
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:61
+msgid "Submit"
+msgstr "Kirim"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:66
+msgid "Reset"
+msgstr "Reset"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:71
+msgid "This is a searchable index. Enter search keywords: "
+msgstr "Ini adalah indeks yang dapat dicari. Masukkan kata kunci pencarian:"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:76
+msgid "Choose File"
+msgstr "Pilih Berkas"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:81
+msgid "(None)"
+msgstr "(Tidak ada)"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:86
+msgid "Open Link in New _Window"
+msgstr "Buka Taut di _Jendela Baru"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:91
+msgid "_Download Linked File"
+msgstr "Un_duh Berkas Tertaut"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:96
+msgid "Copy Link Loc_ation"
+msgstr "Salin Lokasi T_aut"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:101
+msgid "Open _Image in New Window"
+msgstr "Buka Gambar d_i Jendela Baru"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:106
+msgid "Sa_ve Image As"
+msgstr "Sim_pan Gambar Sebagai"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:111
+msgid "Cop_y Image"
+msgstr "Sal_in Gambar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:116
+msgid "Open _Video in New Window"
+msgstr "Buka _Video pada Jendela Baru"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:121
+msgid "Open _Audio in New Window"
+msgstr "Buka Suar_a pada Jendela Baru"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:126
+msgid "Cop_y Video Link Location"
+msgstr "Salin Lokasi T_aut Video"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:131
+msgid "Cop_y Audio Link Location"
+msgstr "Salin Lokasi T_aut Suara"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:136
+msgid "_Toggle Media Controls"
+msgstr "Jungki_tkan Kendali Media"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:141
+msgid "Toggle Media _Loop Playback"
+msgstr "Jungkitkan Pengu_langan Memutar Media"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:146
+msgid "Switch Video to _Fullscreen"
+msgstr "Tukar Video ke Mode Layar _Penuh"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:151
+msgid "_Play"
+msgstr "_Putar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:156
+msgid "_Pause"
+msgstr "_Jeda"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:161
+msgid "_Mute"
+msgstr "_Senyap"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "Open _Frame in New Window"
+msgstr "Buka _Frame di Jendela Baru"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:217
+msgid "_Reload"
+msgstr "_Muat Ulang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:234
+msgid "No Guesses Found"
+msgstr "Tebakan Tak Ditemukan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:239
+msgid "_Ignore Spelling"
+msgstr "Aba_ikan Ejaan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:244
+msgid "_Learn Spelling"
+msgstr "Pe_lajari Ejaan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:249
+msgid "_Search the Web"
+msgstr "_Cari Web"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:254
+msgid "_Look Up in Dictionary"
+msgstr "_Lihat Di Kamus"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:259
+msgid "_Open Link"
+msgstr "_Buka Taut"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:264
+msgid "Ignore _Grammar"
+msgstr "Abaikan Tata _Bahasa"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:269
+msgid "Spelling and _Grammar"
+msgstr "Ejaan dan Tata _Bahasa"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Show Spelling and Grammar"
+msgstr "Tampilkan Ejaan dan Tata Baha_sa"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Hide Spelling and Grammar"
+msgstr "Sembunyikan Ejaan dan Tata Ba_hasa"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:279
+msgid "_Check Document Now"
+msgstr "Periksa Do_kumen Sekarang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:284
+msgid "Check Spelling While _Typing"
+msgstr "Periksa Ejaan Ketika Menge_tik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:289
+msgid "Check _Grammar With Spelling"
+msgstr "Periksa Tata _Bahasa Bersama Dengan Ejaan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:294
+msgid "_Font"
+msgstr "_Fonta"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:317
+msgid "_Outline"
+msgstr "_Outline"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:322
+msgid "Inspect _Element"
+msgstr "Periksa _Elemen"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:327
+msgid "No recent searches"
+msgstr "Tak ada pencarian terkini"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:332
+msgid "Recent searches"
+msgstr "Pencarian terkini"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:337
+msgid "_Clear recent searches"
+msgstr "_Bersihkan pencarian terkini"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:342
+msgid "term"
+msgstr "istilah"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "definition"
+msgstr "definisi"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:352
+msgid "press"
+msgstr "tekan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:357
+msgid "select"
+msgstr "pilih"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:362
+msgid "activate"
+msgstr "aktifkan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:367
+msgid "uncheck"
+msgstr "hapus contreng"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:372
+msgid "check"
+msgstr "contreng"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
+msgid "jump"
+msgstr "lompat"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:392
+msgid "Missing Plug-in"
+msgstr "Kehilangan Plug-in"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:398
+msgid "Plug-in Failure"
+msgstr "Kegagalan Plug-in"
+
+#. FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:404
+msgid " files"
+msgstr " berkas"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
+msgid "Unknown"
+msgstr "Tidak dikenal"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:414
+#, c-format
+msgctxt "Title string for images"
+msgid "%s (%dx%d pixels)"
+msgstr "%s (%dx%d piksel)"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
+msgid "Loading..."
+msgstr "Sedang memuat..."
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:431
+msgid "Live Broadcast"
+msgstr "Siaran Langsung"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:437
+msgid "audio element controller"
+msgstr "pengendali elemen audio"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:439
+msgid "video element controller"
+msgstr "pengendali elemen video"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:441
+msgid "mute"
+msgstr "senyap"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:443
+msgid "unmute"
+msgstr "usai senyap"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:445
+msgid "play"
+msgstr "putar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:447
+msgid "pause"
+msgstr "jeda"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:449
+msgid "movie time"
+msgstr "waktu film"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:451
+msgid "timeline slider thumb"
+msgstr "jempol penggeser waktu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:453
+msgid "back 30 seconds"
+msgstr "mundur 30 detik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:455
+msgid "return to realtime"
+msgstr "kembali ke waktu nyata"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:457
+msgid "elapsed time"
+msgstr "waktu berjalan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:459
+msgid "remaining time"
+msgstr "sisa waktu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "status"
+msgstr "status"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:463
+msgid "fullscreen"
+msgstr "layar penuh"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:465
+msgid "fast forward"
+msgstr "maju cepat"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:467
+msgid "fast reverse"
+msgstr "mundur cepat"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:469
+msgid "show closed captions"
+msgstr "tampilkan takarir gambar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:471
+msgid "hide closed captions"
+msgstr "sembunyikan takarir gambar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:480
+msgid "audio element playback controls and status display"
+msgstr "tampilan status dan kendali main ulang elemen suara"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:482
+msgid "video element playback controls and status display"
+msgstr "tampilan status dan kendali main ulang elemen video"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:484
+msgid "mute audio tracks"
+msgstr "bisukan trek suara"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:486
+msgid "unmute audio tracks"
+msgstr "bunyikan trek suara"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:488
+msgid "begin playback"
+msgstr "mulai memutar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:490
+msgid "pause playback"
+msgstr "jeda memutar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:492
+msgid "movie time scrubber"
+msgstr "pembersih waktu film"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:494
+msgid "movie time scrubber thumb"
+msgstr "jempol pembersih waktu film"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:496
+msgid "seek movie back 30 seconds"
+msgstr "seem film mundur 30 detik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:498
+msgid "return streaming movie to real time"
+msgstr "kembalikan film mengalir ke waktu nyata"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:500
+msgid "current movie time in seconds"
+msgstr "waktu film kini dalam detik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "number of seconds of movie remaining"
+msgstr "cacah detik sisa film"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:504
+msgid "current movie status"
+msgstr "status film kini"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:506
+msgid "seek quickly back"
+msgstr "seek mundur cepat"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:508
+msgid "seek quickly forward"
+msgstr "seek maju cepat"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:510
+msgid "Play movie in fullscreen mode"
+msgstr "Mainkan film pada mode layar penuh"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
+msgid "start displaying closed captions"
+msgstr "mulai tampilkan takarir gambar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:514
+msgid "stop displaying closed captions"
+msgstr "tak tampilkan lagi takarir gambar"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:523
+msgid "indefinite time"
+msgstr "waktu tak tentu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:553
+msgid "value missing"
+msgstr "nilai hilang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:559
+msgid "type mismatch"
+msgstr "jenis tak cocok"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:564
+msgid "pattern mismatch"
+msgstr "pola tak cocok"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:569
+msgid "too long"
+msgstr "terlalu panjang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:574
+msgid "range underflow"
+msgstr "limpah bawah rentang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:579
+msgid "range overflow"
+msgstr "limpah atas rentang"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:584
+msgid "step mismatch"
+msgstr "langkah tak cocok"
diff --git a/Source/WebKit/gtk/po/pl.po b/Source/WebKit/gtk/po/pl.po
new file mode 100644
index 0000000..e7a2a3c
--- /dev/null
+++ b/Source/WebKit/gtk/po/pl.po
@@ -0,0 +1,1433 @@
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# Aviary.pl
+# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
+# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
+# gnomepl@aviary.pl
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+msgid ""
+msgstr ""
+"Project-Id-Version: webkitgtk\n"
+"Report-Msgid-Bugs-To: http://bugs.webkit.org\n"
+"POT-Creation-Date: 2010-12-27 15:26+0000\n"
+"PO-Revision-Date: 2011-01-10 08:59+0100\n"
+"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
+"Language-Team: Polish <gnomepl@aviary.pl>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Poedit-Language: Polish\n"
+"X-Poedit-Country: Poland\n"
+
+#: ../WebCoreSupport/ChromeClientGtk.cpp:589
+msgid "Upload File"
+msgstr "Wyślij plik"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:63
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:194
+msgid "Input _Methods"
+msgstr "_Metody wprowadzania"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:80
+msgid "LRM _Left-to-right mark"
+msgstr "LRM znacznik od l_ewej do prawej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:81
+msgid "RLM _Right-to-left mark"
+msgstr "RLM znacznik od p_rawej do lewej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:82
+msgid "LRE Left-to-right _embedding"
+msgstr "LRE _osadzanie od lewej do prawej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:83
+msgid "RLE Right-to-left e_mbedding"
+msgstr "RLE o_sadzanie od prawej do lewej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:84
+msgid "LRO Left-to-right _override"
+msgstr "LRO _zastÄ…pienie od lewej do prawej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:85
+msgid "RLO Right-to-left o_verride"
+msgstr "LRO z_astÄ…pienie od prawej do lewej"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:86
+msgid "PDF _Pop directional formatting"
+msgstr "PDF formatowanie kierunkowe _Pop"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:87
+msgid "ZWS _Zero width space"
+msgstr "ZWS spacja o _zerowej szerokości"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:88
+msgid "ZWJ Zero width _joiner"
+msgstr "ZWJ łą_cznik o zerowej szerokości"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:89
+msgid "ZWNJ Zero width _non-joiner"
+msgstr "ZWNJ _bezłącznik o zerowej szerokości"
+
+#: ../WebCoreSupport/ContextMenuClientGtk.cpp:111
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:189
+msgid "_Insert Unicode Control Character"
+msgstr "_Wstaw znak kontrolny unikodu"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1180
+msgid "Load request cancelled"
+msgstr "Anulowano żądanie wczytania"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1186
+msgid "Not allowed to use restricted network port"
+msgstr "Użycie zastrzeżonego portu sieciowego jest niedozwolone"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1192
+msgid "URL cannot be shown"
+msgstr "Nie można wyświetlić adresu URL"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1198
+msgid "Frame load was interrupted"
+msgstr "Przerwano wczytywanie ramki"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1204
+msgid "Content with the specified MIME type cannot be shown"
+msgstr "Nie można wyświetlić treści o podanym typie MIME"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1210
+msgid "File does not exist"
+msgstr "Plik nie istnieje"
+
+#: ../WebCoreSupport/FrameLoaderClientGtk.cpp:1216
+msgid "Plugin will handle load"
+msgstr "Wtyczka obsłuży wczytanie"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:385
+msgid "Play"
+msgstr "Odtwórz"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:387
+msgid "Pause"
+msgstr "Wstrzymaj"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:533
+msgid "Play / Pause"
+msgstr "Odtwórz/wstrzymaj"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:533
+msgid "Play or pause the media"
+msgstr "Odtwarza lub wstrzymuje multimedia"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:541
+msgid "Time:"
+msgstr "Czas:"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:565
+msgid "Exit Fullscreen"
+msgstr "Opuść pełny ekran"
+
+#: ../WebCoreSupport/FullscreenVideoController.cpp:565
+msgid "Exit from fullscreen mode"
+msgstr "Opuszcza tryb pełnego ekranu"
+
+#: ../webkit/webkitdownload.cpp:273
+msgid "Network Request"
+msgstr "Żądanie sieciowe"
+
+#: ../webkit/webkitdownload.cpp:274
+msgid "The network request for the URI that should be downloaded"
+msgstr "Żądanie sieciowe dla adresu URI, który powinien zostać pobrany"
+
+#: ../webkit/webkitdownload.cpp:288
+msgid "Network Response"
+msgstr "Odpowiedź sieciowa"
+
+#: ../webkit/webkitdownload.cpp:289
+msgid "The network response for the URI that should be downloaded"
+msgstr "Odpowiedź sieciowa dla adresu URI, który powinien zostać pobrany"
+
+#: ../webkit/webkitdownload.cpp:303
+msgid "Destination URI"
+msgstr "Docelowy adres URI"
+
+#: ../webkit/webkitdownload.cpp:304
+msgid "The destination URI where to save the file"
+msgstr "Docelowy adres URI, gdzie zapisać plik"
+
+#: ../webkit/webkitdownload.cpp:318
+msgid "Suggested Filename"
+msgstr "Sugerowana nazwa pliku"
+
+#: ../webkit/webkitdownload.cpp:319
+msgid "The filename suggested as default when saving"
+msgstr "Domyślnie sugerowana nazwa pliku podczas zapisywania"
+
+#: ../webkit/webkitdownload.cpp:336
+msgid "Progress"
+msgstr "Postęp"
+
+#: ../webkit/webkitdownload.cpp:337
+msgid "Determines the current progress of the download"
+msgstr "Określa obecny postęp pobierania"
+
+#: ../webkit/webkitdownload.cpp:350
+msgid "Status"
+msgstr "Stan"
+
+#: ../webkit/webkitdownload.cpp:351
+msgid "Determines the current status of the download"
+msgstr "Określa obecny stan pobierania"
+
+#: ../webkit/webkitdownload.cpp:366
+msgid "Current Size"
+msgstr "Bieżący rozmiar"
+
+#: ../webkit/webkitdownload.cpp:367
+msgid "The length of the data already downloaded"
+msgstr "Wielkość już pobranych danych"
+
+#: ../webkit/webkitdownload.cpp:381
+msgid "Total Size"
+msgstr "Całkowity rozmiar"
+
+#: ../webkit/webkitdownload.cpp:382
+msgid "The total size of the file"
+msgstr "Całkowity rozmiar pliku"
+
+#: ../webkit/webkitdownload.cpp:534
+msgid "User cancelled the download"
+msgstr "Użytkownik anulował pobieranie"
+
+#: ../webkit/webkithittestresult.cpp:156
+msgid "Context"
+msgstr "Kontekst"
+
+#: ../webkit/webkithittestresult.cpp:157
+msgid "Flags indicating the kind of target that received the event."
+msgstr "Flagi wskazujące rodzaj celu, który odebrał zdarzenie."
+
+#: ../webkit/webkithittestresult.cpp:171
+msgid "Link URI"
+msgstr "Adres URI odnośnika"
+
+#: ../webkit/webkithittestresult.cpp:172
+msgid "The URI to which the target that received the event points, if any."
+msgstr ""
+"Adres URI, do którego wskazuje cel, który odebrał zdarzenie, jeśli istnieje."
+
+#: ../webkit/webkithittestresult.cpp:185
+msgid "Image URI"
+msgstr "Adres URI obrazu"
+
+#: ../webkit/webkithittestresult.cpp:186
+msgid ""
+"The URI of the image that is part of the target that received the event, if "
+"any."
+msgstr ""
+"Adres URI obrazu będącego częścią celu, który odebrał zdarzenie, jeśli "
+"istnieje."
+
+#: ../webkit/webkithittestresult.cpp:199
+msgid "Media URI"
+msgstr "Adres URI multimediów"
+
+#: ../webkit/webkithittestresult.cpp:200
+msgid ""
+"The URI of the media that is part of the target that received the event, if "
+"any."
+msgstr ""
+"Adres URI multimediów będących częścią celu, który odebrał zdarzenie, jeśli "
+"istnieje."
+
+#: ../webkit/webkithittestresult.cpp:221
+msgid "Inner node"
+msgstr "Węzeł wewnętrzny"
+
+#: ../webkit/webkithittestresult.cpp:222
+msgid "The inner DOM node associated with the hit test result."
+msgstr "Wewnętrzny węzeł DOM powiązany z wynikiem testu trafienia."
+
+#: ../webkit/webkitnetworkrequest.cpp:134
+#: ../webkit/webkitnetworkresponse.cpp:134 ../webkit/webkitwebframe.cpp:323
+#: ../webkit/webkitwebhistoryitem.cpp:176 ../webkit/webkitwebresource.cpp:126
+#: ../webkit/webkitwebview.cpp:2997
+msgid "URI"
+msgstr "Adres URI"
+
+#: ../webkit/webkitnetworkrequest.cpp:135
+msgid "The URI to which the request will be made."
+msgstr "Adres URI, do którego jest wysyłane żądanie."
+
+#: ../webkit/webkitnetworkrequest.cpp:148
+#: ../webkit/webkitnetworkresponse.cpp:148
+msgid "Message"
+msgstr "Komunikat"
+
+#: ../webkit/webkitnetworkrequest.cpp:149
+msgid "The SoupMessage that backs the request."
+msgstr "Komunikat Soup, który wspiera żądanie."
+
+#: ../webkit/webkitnetworkresponse.cpp:135
+msgid "The URI to which the response will be made."
+msgstr "Adres URI, do którego jest wysyłana odpowiedź."
+
+#: ../webkit/webkitnetworkresponse.cpp:149
+msgid "The SoupMessage that backs the response."
+msgstr "Komunikat Soup, który wspiera odpowiedź."
+
+#: ../webkit/webkitsecurityorigin.cpp:150
+msgid "Protocol"
+msgstr "Protokół"
+
+#: ../webkit/webkitsecurityorigin.cpp:151
+msgid "The protocol of the security origin"
+msgstr "Protokół ośrodka bezpieczeństwa"
+
+#: ../webkit/webkitsecurityorigin.cpp:164
+msgid "Host"
+msgstr "Komputer"
+
+#: ../webkit/webkitsecurityorigin.cpp:165
+msgid "The host of the security origin"
+msgstr "Komputer ośrodka bezpieczeństwa"
+
+#: ../webkit/webkitsecurityorigin.cpp:178
+msgid "Port"
+msgstr "Port"
+
+#: ../webkit/webkitsecurityorigin.cpp:179
+msgid "The port of the security origin"
+msgstr "Port ośrodka bezpieczeństwa"
+
+#: ../webkit/webkitsecurityorigin.cpp:192
+msgid "Web Database Usage"
+msgstr "Użycie bazy danych WWW"
+
+#: ../webkit/webkitsecurityorigin.cpp:193
+msgid "The cumulative size of all web databases in the security origin"
+msgstr "Całkowity rozmiar wszystkich baz danych WWW w ośrodku bezpieczeństwa"
+
+#: ../webkit/webkitsecurityorigin.cpp:205
+msgid "Web Database Quota"
+msgstr "Przydział bazy danych WWW"
+
+#: ../webkit/webkitsecurityorigin.cpp:206
+msgid "The web database quota of the security origin in bytes"
+msgstr "Przydział bazy danych WWW ośrodka bezpieczeństwa w bajtach"
+
+#: ../webkit/webkitsoupauthdialog.c:264
+#, c-format
+msgid "A username and password are being requested by the site %s"
+msgstr "Witryna %s żąda nazwy użytkownika i hasła"
+
+#: ../webkit/webkitsoupauthdialog.c:294
+msgid "Server message:"
+msgstr "Komunikat serwera:"
+
+#: ../webkit/webkitsoupauthdialog.c:307
+msgid "Username:"
+msgstr "Nazwa użytkownika:"
+
+#: ../webkit/webkitsoupauthdialog.c:309
+msgid "Password:"
+msgstr "Hasło:"
+
+#: ../webkit/webkitsoupauthdialog.c:318
+msgid "_Remember password"
+msgstr "_Pamiętanie hasła"
+
+#: ../webkit/webkitwebdatabase.cpp:173
+msgid "Security Origin"
+msgstr "Ośrodek bezpieczeństwa"
+
+#: ../webkit/webkitwebdatabase.cpp:174
+msgid "The security origin of the database"
+msgstr "Ośrodek bezpieczeństwa bazy danych"
+
+#: ../webkit/webkitwebdatabase.cpp:187 ../webkit/webkitwebframe.cpp:309
+msgid "Name"
+msgstr "Nazwa"
+
+#: ../webkit/webkitwebdatabase.cpp:188
+msgid "The name of the Web Database database"
+msgstr "Nazwa bazy danych WWW"
+
+#: ../webkit/webkitwebdatabase.cpp:201
+msgid "Display Name"
+msgstr "Wyświetlana nazwa"
+
+#: ../webkit/webkitwebdatabase.cpp:202
+msgid "The display name of the Web Storage database"
+msgstr "Wyświetlana nazwa bazy danych WWW"
+
+#: ../webkit/webkitwebdatabase.cpp:215
+msgid "Expected Size"
+msgstr "Oczekiwany rozmiar"
+
+#: ../webkit/webkitwebdatabase.cpp:216
+msgid "The expected size of the Web Database database"
+msgstr "Oczekiwany rozmiar bazy danych WWW"
+
+#: ../webkit/webkitwebdatabase.cpp:228
+msgid "Size"
+msgstr "Rozmiar"
+
+#: ../webkit/webkitwebdatabase.cpp:229
+msgid "The current size of the Web Database database"
+msgstr "Bieżący rozmiar bazy danych WWW"
+
+#: ../webkit/webkitwebdatabase.cpp:241
+msgid "Filename"
+msgstr "Nazwa pliku"
+
+#: ../webkit/webkitwebdatabase.cpp:242
+msgid "The absolute filename of the Web Storage database"
+msgstr "Bezwzględna nazwa pliku bazy danych WWW"
+
+#: ../webkit/webkitwebframe.cpp:310
+msgid "The name of the frame"
+msgstr "Nazwa ramki"
+
+#: ../webkit/webkitwebframe.cpp:316 ../webkit/webkitwebhistoryitem.cpp:144
+#: ../webkit/webkitwebview.cpp:2983
+msgid "Title"
+msgstr "Tytuł"
+
+#: ../webkit/webkitwebframe.cpp:317
+msgid "The document title of the frame"
+msgstr "Tytuł dokumentu ramki"
+
+#: ../webkit/webkitwebframe.cpp:324
+msgid "The current URI of the contents displayed by the frame"
+msgstr "Bieżący adres URI treści wyświetlanej w ramce"
+
+#: ../webkit/webkitwebframe.cpp:355
+msgid "Horizontal Scrollbar Policy"
+msgstr "Polityka poziomego paska przewijania"
+
+#: ../webkit/webkitwebframe.cpp:356
+msgid ""
+"Determines the current policy for the horizontal scrollbar of the frame."
+msgstr "Określa bieżącą politykę poziomego paska przewijania ramki."
+
+#: ../webkit/webkitwebframe.cpp:373
+msgid "Vertical Scrollbar Policy"
+msgstr "Polityka pionowego paska przewijania"
+
+#: ../webkit/webkitwebframe.cpp:374
+msgid "Determines the current policy for the vertical scrollbar of the frame."
+msgstr "Określa bieżącą politykę pionowego paska przewijania ramki."
+
+#: ../webkit/webkitwebhistoryitem.cpp:145
+msgid "The title of the history item"
+msgstr "Tytuł elementu historii"
+
+#: ../webkit/webkitwebhistoryitem.cpp:160
+msgid "Alternate Title"
+msgstr "Tytuł alternatywny"
+
+#: ../webkit/webkitwebhistoryitem.cpp:161
+msgid "The alternate title of the history item"
+msgstr "Alternatywny tytuł elementu historii"
+
+#: ../webkit/webkitwebhistoryitem.cpp:177
+msgid "The URI of the history item"
+msgstr "Adres URI elementu historii"
+
+#: ../webkit/webkitwebhistoryitem.cpp:192
+#: ../webkit/webkitwebnavigationaction.cpp:171
+msgid "Original URI"
+msgstr "Pierwotny adres URI"
+
+#: ../webkit/webkitwebhistoryitem.cpp:193
+msgid "The original URI of the history item"
+msgstr "Pierwotny adres URI elementu historii"
+
+#: ../webkit/webkitwebhistoryitem.cpp:208
+msgid "Last visited Time"
+msgstr "Czas ostatniej wizyty"
+
+#: ../webkit/webkitwebhistoryitem.cpp:209
+msgid "The time at which the history item was last visited"
+msgstr "Czas, kiedy element historii został ostatnio odwiedzony"
+
+#: ../webkit/webkitwebinspector.cpp:270
+msgid "Web View"
+msgstr "Widok WWW"
+
+#: ../webkit/webkitwebinspector.cpp:271
+msgid "The Web View that renders the Web Inspector itself"
+msgstr "Widok WWW wyświetlający program Web Inspector"
+
+#: ../webkit/webkitwebinspector.cpp:284
+msgid "Inspected URI"
+msgstr "Badany adres URI"
+
+#: ../webkit/webkitwebinspector.cpp:285
+msgid "The URI that is currently being inspected"
+msgstr "Obecnie badany adres URI"
+
+#: ../webkit/webkitwebinspector.cpp:301
+msgid "Enable JavaScript profiling"
+msgstr "Włączenie profilowania języka JavaScript"
+
+#: ../webkit/webkitwebinspector.cpp:302
+msgid "Profile the executed JavaScript."
+msgstr "Profilowanie wykonanego skryptu JavaScript."
+
+#: ../webkit/webkitwebinspector.cpp:317
+msgid "Enable Timeline profiling"
+msgstr "WÅ‚Ä…czenie profilowania osi czasu"
+
+#: ../webkit/webkitwebinspector.cpp:318
+msgid "Profile the WebCore instrumentation."
+msgstr "Profilowanie instrumentacji mechanizmu WebCore."
+
+#: ../webkit/webkitwebnavigationaction.cpp:156
+msgid "Reason"
+msgstr "Przyczyna"
+
+#: ../webkit/webkitwebnavigationaction.cpp:157
+msgid "The reason why this navigation is occurring"
+msgstr "Przyczyna tej nawigacji"
+
+#: ../webkit/webkitwebnavigationaction.cpp:172
+msgid "The URI that was requested as the target for the navigation"
+msgstr "Adres URI żądany jako cel nawigacji"
+
+#: ../webkit/webkitwebnavigationaction.cpp:186
+msgid "Button"
+msgstr "Przycisk"
+
+#: ../webkit/webkitwebnavigationaction.cpp:187
+msgid "The button used to click"
+msgstr "Przycisk używany do klikania"
+
+#: ../webkit/webkitwebnavigationaction.cpp:202
+msgid "Modifier state"
+msgstr "Stan modyfikatora"
+
+#: ../webkit/webkitwebnavigationaction.cpp:203
+msgid "A bitmask representing the state of the modifier keys"
+msgstr "Mapa bitów przedstawiająca stan klawiszy modyfikatorów"
+
+#: ../webkit/webkitwebnavigationaction.cpp:218
+msgid "Target frame"
+msgstr "Ramka docelowa"
+
+#: ../webkit/webkitwebnavigationaction.cpp:219
+msgid "The target frame for the navigation"
+msgstr "Ramka docelowa dla nawigacji"
+
+#: ../webkit/webkitwebresource.cpp:127
+msgid "The uri of the resource"
+msgstr "Adres URI zasobu"
+
+#: ../webkit/webkitwebresource.cpp:141
+msgid "MIME Type"
+msgstr "Typ MIME"
+
+#: ../webkit/webkitwebresource.cpp:142
+msgid "The MIME type of the resource"
+msgstr "Typ MIME zasobu"
+
+#: ../webkit/webkitwebresource.cpp:156 ../webkit/webkitwebview.cpp:3132
+msgid "Encoding"
+msgstr "Kodowanie"
+
+#: ../webkit/webkitwebresource.cpp:157
+msgid "The text encoding name of the resource"
+msgstr "Nazwa kodowania tekstu zasobu"
+
+#: ../webkit/webkitwebresource.cpp:172
+msgid "Frame Name"
+msgstr "Nazwa ramki"
+
+#: ../webkit/webkitwebresource.cpp:173
+msgid "The frame name of the resource"
+msgstr "Nazwa ramki zasobu"
+
+#: ../webkit/webkitwebsettings.cpp:252
+msgid "Default Encoding"
+msgstr "Domyślne kodowanie"
+
+#: ../webkit/webkitwebsettings.cpp:253
+msgid "The default encoding used to display text."
+msgstr "Domyślne kodowanie używane do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:261
+msgid "Cursive Font Family"
+msgstr "Rodzina czcionek pochylonych"
+
+#: ../webkit/webkitwebsettings.cpp:262
+msgid "The default Cursive font family used to display text."
+msgstr "Domyślna rodzina czcionek pochylonych używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:270
+msgid "Default Font Family"
+msgstr "Domyślna rodzina czcionek"
+
+#: ../webkit/webkitwebsettings.cpp:271
+msgid "The default font family used to display text."
+msgstr "Domyślna rodzina czcionek używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:279
+msgid "Fantasy Font Family"
+msgstr "Rodzina czcionek fantastycznych"
+
+#: ../webkit/webkitwebsettings.cpp:280
+msgid "The default Fantasy font family used to display text."
+msgstr ""
+"Domyślna rodzina czcionek fantastycznych używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:288
+msgid "Monospace Font Family"
+msgstr "Rodzina czcionek o stałej szerokości"
+
+#: ../webkit/webkitwebsettings.cpp:289
+msgid "The default font family used to display monospace text."
+msgstr ""
+"Domyślna rodzina czcionek o stałej szerokości używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:297
+msgid "Sans Serif Font Family"
+msgstr "Rodzina czcionek bezszeryfowych"
+
+#: ../webkit/webkitwebsettings.cpp:298
+msgid "The default Sans Serif font family used to display text."
+msgstr ""
+"Domyślna rodzina czcionek bezszeryfowych używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:306
+msgid "Serif Font Family"
+msgstr "Rodzina czcionek szeryfowych"
+
+#: ../webkit/webkitwebsettings.cpp:307
+msgid "The default Serif font family used to display text."
+msgstr "Domyślna rodzina czcionek szeryfowych używana do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:315
+msgid "Default Font Size"
+msgstr "Domyślny rozmiar czcionki"
+
+#: ../webkit/webkitwebsettings.cpp:316
+msgid "The default font size used to display text."
+msgstr "Domyślny rozmiar czcionki używanej do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:324
+msgid "Default Monospace Font Size"
+msgstr "Domyślny rozmiar czcionki o stałej szerokości"
+
+#: ../webkit/webkitwebsettings.cpp:325
+msgid "The default font size used to display monospace text."
+msgstr ""
+"Domyślny rozmiar czcionki o stałej szerokości używanej do wyświetlania "
+"tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:333
+msgid "Minimum Font Size"
+msgstr "Minimalny rozmiar czcionki"
+
+#: ../webkit/webkitwebsettings.cpp:334
+msgid "The minimum font size used to display text."
+msgstr "Minimalny rozmiar czcionki używanej do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:342
+msgid "Minimum Logical Font Size"
+msgstr "Minimalny rozmiar czcionki logicznej"
+
+#: ../webkit/webkitwebsettings.cpp:343
+msgid "The minimum logical font size used to display text."
+msgstr "Minimalny rozmiar czcionki logicznej używanej do wyświetlania tekstu."
+
+#: ../webkit/webkitwebsettings.cpp:362
+msgid "Enforce 96 DPI"
+msgstr "Wymuszanie 96 DPI"
+
+#: ../webkit/webkitwebsettings.cpp:363
+msgid "Enforce a resolution of 96 DPI"
+msgstr "Wymuszanie rozdzielczości 96 DPI"
+
+#: ../webkit/webkitwebsettings.cpp:371
+msgid "Auto Load Images"
+msgstr "Automatyczne wczytywanie obrazów"
+
+#: ../webkit/webkitwebsettings.cpp:372
+msgid "Load images automatically."
+msgstr "Automatyczne wczytywanie obrazów."
+
+#: ../webkit/webkitwebsettings.cpp:380
+msgid "Auto Shrink Images"
+msgstr "Automatyczne zmniejszanie obrazów"
+
+#: ../webkit/webkitwebsettings.cpp:381
+msgid "Automatically shrink standalone images to fit."
+msgstr "Automatyczne zmniejszanie pojedynczych obrazów, aby pasowały."
+
+#: ../webkit/webkitwebsettings.cpp:389
+msgid "Print Backgrounds"
+msgstr "Drukowanie teł"
+
+#: ../webkit/webkitwebsettings.cpp:390
+msgid "Whether background images should be printed."
+msgstr "Określa, czy obrazy tła powinny być drukowane."
+
+#: ../webkit/webkitwebsettings.cpp:398
+msgid "Enable Scripts"
+msgstr "Włączenie skryptów"
+
+#: ../webkit/webkitwebsettings.cpp:399
+msgid "Enable embedded scripting languages."
+msgstr "Włączenie osadzonych języków skryptowych."
+
+#: ../webkit/webkitwebsettings.cpp:407
+msgid "Enable Plugins"
+msgstr "WÅ‚Ä…czenie wtyczek"
+
+#: ../webkit/webkitwebsettings.cpp:408
+msgid "Enable embedded plugin objects."
+msgstr "Włączenie osadzonych obiektów wtyczek."
+
+#: ../webkit/webkitwebsettings.cpp:416
+msgid "Resizable Text Areas"
+msgstr "Zmiana rozmiaru obszarów tekstowych"
+
+#: ../webkit/webkitwebsettings.cpp:417
+msgid "Whether text areas are resizable."
+msgstr "Określa, czy można zmieniać rozmiar obszarów tekstowych."
+
+#: ../webkit/webkitwebsettings.cpp:424
+msgid "User Stylesheet URI"
+msgstr "Adres URI arkusza stylów użytkownika"
+
+#: ../webkit/webkitwebsettings.cpp:425
+msgid "The URI of a stylesheet that is applied to every page."
+msgstr "Adres URI arkusza stylów zastosowywanego na każdej stronie."
+
+#: ../webkit/webkitwebsettings.cpp:440
+msgid "Zoom Stepping Value"
+msgstr "Wartość kroku powiększenia"
+
+#: ../webkit/webkitwebsettings.cpp:441
+msgid "The value by which the zoom level is changed when zooming in or out."
+msgstr ""
+"Wartość, o jaką zmieniany jest poziom powiększenia podczas przybliżania lub "
+"oddalania."
+
+#: ../webkit/webkitwebsettings.cpp:459
+msgid "Enable Developer Extras"
+msgstr "Włączenie dodatków programistycznych"
+
+#: ../webkit/webkitwebsettings.cpp:460
+msgid "Enables special extensions that help developers"
+msgstr "Włączenie specjalnych rozszerzeń pomagającym programistom"
+
+#: ../webkit/webkitwebsettings.cpp:480
+msgid "Enable Private Browsing"
+msgstr "WÅ‚Ä…czenie przeglÄ…dania prywatnego"
+
+#: ../webkit/webkitwebsettings.cpp:481
+msgid "Enables private browsing mode"
+msgstr "WÅ‚Ä…czenie trybu przeglÄ…dania prywatnego"
+
+#: ../webkit/webkitwebsettings.cpp:496
+msgid "Enable Spell Checking"
+msgstr "WÅ‚Ä…czenie sprawdzania pisowni"
+
+#: ../webkit/webkitwebsettings.cpp:497
+msgid "Enables spell checking while typing"
+msgstr "WÅ‚Ä…czenie sprawdzania pisowni podczas pisania"
+
+#: ../webkit/webkitwebsettings.cpp:520
+msgid "Languages to use for spell checking"
+msgstr "Języki używane przy sprawdzaniu pisowni"
+
+#: ../webkit/webkitwebsettings.cpp:521
+msgid "Comma separated list of languages to use for spell checking"
+msgstr ""
+"Lista języków oddzielonych przecinkami do używania przy sprawdzaniu pisowni"
+
+#: ../webkit/webkitwebsettings.cpp:535
+msgid "Enable Caret Browsing"
+msgstr "WÅ‚Ä…czenie przeglÄ…dania w trybie karetki"
+
+#: ../webkit/webkitwebsettings.cpp:536
+msgid "Whether to enable accesibility enhanced keyboard navigation"
+msgstr ""
+"Określa, czy włączyć nawigację klawiaturą usprawnioną pod kątem dostępności"
+
+#: ../webkit/webkitwebsettings.cpp:551
+msgid "Enable HTML5 Database"
+msgstr "WÅ‚Ä…czenie bazy danych HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:552
+msgid "Whether to enable HTML5 database support"
+msgstr "Określa, czy włączyć obsługę bazy danych HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:567
+msgid "Enable HTML5 Local Storage"
+msgstr "WÅ‚Ä…czenie lokalnego przechowywania danych HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:568
+msgid "Whether to enable HTML5 Local Storage support"
+msgstr "Określa, czy włączyć obsługę lokalnego przechowywania danych HTML5"
+
+#: ../webkit/webkitwebsettings.cpp:582
+msgid "Enable XSS Auditor"
+msgstr "WÅ‚Ä…czenie audytu XSS"
+
+#: ../webkit/webkitwebsettings.cpp:583
+msgid "Whether to enable the XSS auditor"
+msgstr "Określa, czy włączyć audyt XSS"
+
+#: ../webkit/webkitwebsettings.cpp:601
+msgid "Enable Spatial Navigation"
+msgstr "WÅ‚Ä…czenie nawigacji przestrzennej"
+
+#: ../webkit/webkitwebsettings.cpp:602
+msgid "Whether to enable Spatial Navigation"
+msgstr "Określa, czy włączyć nawigację przestrzenną"
+
+#: ../webkit/webkitwebsettings.cpp:620
+msgid "Enable Frame Flattening"
+msgstr "Włączenie spłaszczania ramek"
+
+#: ../webkit/webkitwebsettings.cpp:621
+msgid "Whether to enable Frame Flattening"
+msgstr "Określa, czy włączać spłaszczanie ramek"
+
+#: ../webkit/webkitwebsettings.cpp:638
+msgid "User Agent"
+msgstr "Agent użytkownika"
+
+#: ../webkit/webkitwebsettings.cpp:639
+msgid "The User-Agent string used by WebKitGtk"
+msgstr "Ciąg agenta użytkownika używany przez mechanizm WebKitGTK+"
+
+#: ../webkit/webkitwebsettings.cpp:654
+msgid "JavaScript can open windows automatically"
+msgstr "Automatyczne otwieranie okien przez skrypty JavaScript"
+
+#: ../webkit/webkitwebsettings.cpp:655
+msgid "Whether JavaScript can open windows automatically"
+msgstr "Określa, czy skrypty JavaScript mogą automatycznie otwierać okna"
+
+#: ../webkit/webkitwebsettings.cpp:669
+msgid "JavaScript can access Clipboard"
+msgstr "Dostęp do schowka ze skryptów JavaScript"
+
+#: ../webkit/webkitwebsettings.cpp:670
+msgid "Whether JavaScript can access Clipboard"
+msgstr "Określa, czy skrypty JavaScript mogą mieć dostęp do schowka"
+
+#: ../webkit/webkitwebsettings.cpp:686
+msgid "Enable offline web application cache"
+msgstr "Włączenie pamięci podręcznej aplikacji WWW w trybie offline"
+
+#: ../webkit/webkitwebsettings.cpp:687
+msgid "Whether to enable offline web application cache"
+msgstr "Określa, czy włączyć pamięć podręczną aplikacji WWW w trybie offline"
+
+#: ../webkit/webkitwebsettings.cpp:715
+msgid "Editing behavior"
+msgstr "Zachowanie modyfikowania"
+
+#: ../webkit/webkitwebsettings.cpp:716
+msgid "The behavior mode to use in editing mode"
+msgstr "Tryb zachowania używany w trybie modyfikowania"
+
+#: ../webkit/webkitwebsettings.cpp:732
+msgid "Enable universal access from file URIs"
+msgstr "Włączenie uniwersalnego dostępu z adresów URI do plików"
+
+#: ../webkit/webkitwebsettings.cpp:733
+msgid "Whether to allow universal access from file URIs"
+msgstr "Określa, czy włączyć uniwersalny dostęp z adresów URI do plików"
+
+#: ../webkit/webkitwebsettings.cpp:748
+msgid "Enable DOM paste"
+msgstr "WÅ‚Ä…czenie wklejania DOM"
+
+#: ../webkit/webkitwebsettings.cpp:749
+msgid "Whether to enable DOM paste"
+msgstr "Określa, czy włączać wklejanie DOM"
+
+#: ../webkit/webkitwebsettings.cpp:767
+msgid "Tab key cycles through elements"
+msgstr "Klawisza Tab przewija przez elementy"
+
+#: ../webkit/webkitwebsettings.cpp:768
+msgid "Whether the tab key cycles through elements on the page."
+msgstr "Określa, czy klawisz Tab ma przewijać przez elementy na stronie."
+
+#: ../webkit/webkitwebsettings.cpp:788
+msgid "Enable Default Context Menu"
+msgstr "Włączenie domyślnego menu kontekstowego"
+
+#: ../webkit/webkitwebsettings.cpp:789
+msgid ""
+"Enables the handling of right-clicks for the creation of the default context "
+"menu"
+msgstr ""
+"Włączenie obsługi kliknięć prawym przyciskiem myszy do tworzenia domyślnego "
+"menu kontekstowego"
+
+#: ../webkit/webkitwebsettings.cpp:809
+msgid "Enable Site Specific Quirks"
+msgstr "Włączenie obejść dla konkretnych wirtyn"
+
+#: ../webkit/webkitwebsettings.cpp:810
+msgid "Enables the site-specific compatibility workarounds"
+msgstr "Włączenie obejść zgodności dla konkretnych witryn"
+
+#: ../webkit/webkitwebsettings.cpp:832
+msgid "Enable page cache"
+msgstr "Włączenie pamięci podręcznej stron"
+
+#: ../webkit/webkitwebsettings.cpp:833
+msgid "Whether the page cache should be used"
+msgstr "Określa, czy używać pamięci podręcznej stron"
+
+#: ../webkit/webkitwebsettings.cpp:853
+msgid "Auto Resize Window"
+msgstr "Automatyczna zmiana rozmiaru okna"
+
+#: ../webkit/webkitwebsettings.cpp:854
+msgid "Automatically resize the toplevel window when a page requests it"
+msgstr "Automatyczna zmiana rozmiaru okna głównego, kiedy zażąda tego strona"
+
+#: ../webkit/webkitwebsettings.cpp:886
+msgid "Enable Java Applet"
+msgstr "Włączenie apletów języka Java"
+
+#: ../webkit/webkitwebsettings.cpp:887
+msgid "Whether Java Applet support through <applet> should be enabled"
+msgstr ""
+"Określa, czy obsługa apletów języka Java przez znacznik <applet> powinna być "
+"włączona"
+
+#: ../webkit/webkitwebsettings.cpp:901
+msgid "Enable Hyperlink Auditing"
+msgstr "Włączenie audytu odnośników"
+
+#: ../webkit/webkitwebsettings.cpp:902
+msgid "Whether <a ping> should be able to send pings"
+msgstr "Określa, czy znacznik <a ping> powinien móc wysyłać sygnały ping"
+
+#: ../webkit/webkitwebsettings.cpp:910
+msgid "Enable Fullscreen"
+msgstr "Włączenie pełnego ekranu"
+
+#: ../webkit/webkitwebsettings.cpp:911
+msgid "Whether the Mozilla style API should be enabled."
+msgstr "Określa, czy API w stylu Mozilli powinno być włączone."
+
+#: ../webkit/webkitwebview.cpp:2984
+msgid "Returns the @web_view's document title"
+msgstr "Zwraca tytuł dokumentu @web_view"
+
+#: ../webkit/webkitwebview.cpp:2998
+msgid "Returns the current URI of the contents displayed by the @web_view"
+msgstr "Zwraca bieżący adres URI treści wyświetlanej przez @web_view"
+
+#: ../webkit/webkitwebview.cpp:3011
+msgid "Copy target list"
+msgstr "Lista celów kopiowania"
+
+#: ../webkit/webkitwebview.cpp:3012
+msgid "The list of targets this web view supports for clipboard copying"
+msgstr "Lista celów, które obsługuje ten widok WWW dla kopiowania do schowka"
+
+#: ../webkit/webkitwebview.cpp:3025
+msgid "Paste target list"
+msgstr "Lista celów wklejania"
+
+#: ../webkit/webkitwebview.cpp:3026
+msgid "The list of targets this web view supports for clipboard pasting"
+msgstr "Lista celów, które obsługuje ten widok WWW dla wklejania ze schowka"
+
+#: ../webkit/webkitwebview.cpp:3032
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: ../webkit/webkitwebview.cpp:3033
+msgid "An associated WebKitWebSettings instance"
+msgstr "PowiÄ…zana instancja WebKitWebSettings"
+
+#: ../webkit/webkitwebview.cpp:3046
+msgid "Web Inspector"
+msgstr "Web Inspector"
+
+#: ../webkit/webkitwebview.cpp:3047
+msgid "The associated WebKitWebInspector instance"
+msgstr "PowiÄ…zana instancja WebKitWebInspector"
+
+#: ../webkit/webkitwebview.cpp:3060
+msgid "Viewport Attributes"
+msgstr "Atrybuty Viewport"
+
+#: ../webkit/webkitwebview.cpp:3061
+msgid "The associated WebKitViewportAttributes instance"
+msgstr "PowiÄ…zana instancja WebKitViewportAttributes"
+
+#: ../webkit/webkitwebview.cpp:3081
+msgid "Editable"
+msgstr "Modyfikowalne"
+
+#: ../webkit/webkitwebview.cpp:3082
+msgid "Whether content can be modified by the user"
+msgstr "Określa, czy treść może być modyfikowana przez użytkownika"
+
+#: ../webkit/webkitwebview.cpp:3088
+msgid "Transparent"
+msgstr "Przezroczyste"
+
+#: ../webkit/webkitwebview.cpp:3089
+msgid "Whether content has a transparent background"
+msgstr "Określa, czy treść posiada przezroczyste tło"
+
+#: ../webkit/webkitwebview.cpp:3102
+msgid "Zoom level"
+msgstr "Poziom powiększenia"
+
+#: ../webkit/webkitwebview.cpp:3103
+msgid "The level of zoom of the content"
+msgstr "Poziom powiększenia treści"
+
+#: ../webkit/webkitwebview.cpp:3118
+msgid "Full content zoom"
+msgstr "Powiększanie pełnej treści"
+
+#: ../webkit/webkitwebview.cpp:3119
+msgid "Whether the full content is scaled when zooming"
+msgstr "Określa, czy pełna treść jest skalowana podczas powiększania"
+
+#: ../webkit/webkitwebview.cpp:3133
+msgid "The default encoding of the web view"
+msgstr "Domyślne kodowanie widoku WWW"
+
+#: ../webkit/webkitwebview.cpp:3146
+msgid "Custom Encoding"
+msgstr "WÅ‚asne kodowanie"
+
+#: ../webkit/webkitwebview.cpp:3147
+msgid "The custom encoding of the web view"
+msgstr "WÅ‚asne kodowanie widoku WWW"
+
+#: ../webkit/webkitwebview.cpp:3199
+msgid "Icon URI"
+msgstr "Adres URI ikony"
+
+#: ../webkit/webkitwebview.cpp:3200
+msgid "The URI for the favicon for the #WebKitWebView."
+msgstr "Adres URI ikony favicon dla #WebKitWebView."
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:56
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:61
+msgid "Submit"
+msgstr "Wyślij"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:66
+msgid "Reset"
+msgstr "Przywróć"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:71
+msgid "This is a searchable index. Enter search keywords: "
+msgstr ""
+"To jest wyszukiwalny indeks. Proszę wprowadzić słowa kluczowe wyszukiwania: "
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:76
+msgid "Choose File"
+msgstr "Wybór pliku"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:81
+msgid "(None)"
+msgstr "(Brak)"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:86
+msgid "Open Link in New _Window"
+msgstr "Otwórz odnośnik w nowym _oknie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:91
+msgid "_Download Linked File"
+msgstr "_Pobierz plik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:96
+msgid "Copy Link Loc_ation"
+msgstr "Skopiuj położenie o_dnośnika"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:101
+msgid "Open _Image in New Window"
+msgstr "Otwórz o_braz w nowym oknie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:106
+msgid "Sa_ve Image As"
+msgstr "Zapis_z obraz jako"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:111
+msgid "Cop_y Image"
+msgstr "Skopi_uj obraz"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:116
+msgid "Open _Video in New Window"
+msgstr "Otwórz nagranie _wideo w nowym oknie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:121
+msgid "Open _Audio in New Window"
+msgstr "Odtwórz nagranie _dźwiękowe w nowym oknie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:126
+msgid "Cop_y Video Link Location"
+msgstr "Skopiu_j położenie odnośnika nagrania wideo"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:131
+msgid "Cop_y Audio Link Location"
+msgstr "Skopiu_j położenie odnośnika nagrania dźwiękowego"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:136
+msgid "_Toggle Media Controls"
+msgstr "P_rzełącz kontrolę multimediów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:141
+msgid "Toggle Media _Loop Playback"
+msgstr "Przełącz p_owtarzanie odtwarzania multimediów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:146
+msgid "Switch Video to _Fullscreen"
+msgstr "Przełącz nagranie wideo na pełny _ekran"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:151
+msgid "_Play"
+msgstr "_Odtwórz"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:156
+msgid "_Pause"
+msgstr "_Wstrzymaj"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:161
+msgid "_Mute"
+msgstr "Wy_cisz"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:166
+msgid "Open _Frame in New Window"
+msgstr "Otwórz _ramkę w nowym oknie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:217
+msgid "_Reload"
+msgstr "_Wczytaj ponownie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:234
+msgid "No Guesses Found"
+msgstr "Nie odnaleziono gości"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:239
+msgid "_Ignore Spelling"
+msgstr "_Ignorowanie pisowni"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:244
+msgid "_Learn Spelling"
+msgstr "_Nauczanie pisowni"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:249
+msgid "_Search the Web"
+msgstr "Wy_szukaj w sieci"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:254
+msgid "_Look Up in Dictionary"
+msgstr "_Znajdź w słowniku"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:259
+msgid "_Open Link"
+msgstr "_Otwórz odnośnik"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:264
+msgid "Ignore _Grammar"
+msgstr "Ignorowanie _gramatyki"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:269
+msgid "Spelling and _Grammar"
+msgstr "Pisownia i _gramatyka"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Show Spelling and Grammar"
+msgstr "_Wyświetlanie pisowni i gramatyki"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:274
+msgid "_Hide Spelling and Grammar"
+msgstr "_Ukrywanie pisowni i gramatyki"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:279
+msgid "_Check Document Now"
+msgstr "_Sprawdź dokument"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:284
+msgid "Check Spelling While _Typing"
+msgstr "Sprawdzanie pisowni podczas pi_sania"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:289
+msgid "Check _Grammar With Spelling"
+msgstr "Sprawdzanie _gramatyki razem z pisowniÄ…"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:294
+msgid "_Font"
+msgstr "_Czcionka"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:317
+msgid "_Outline"
+msgstr "_Obrys"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:322
+msgid "Inspect _Element"
+msgstr "Zbadaj _element"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:327
+msgid "No recent searches"
+msgstr "Brak ostatnich wyszukiwań"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:332
+msgid "Recent searches"
+msgstr "Ostatnie wyszukiwania"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:337
+msgid "_Clear recent searches"
+msgstr "Wy_czyść ostatnie wyszukiwania"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:342
+msgid "term"
+msgstr "termin"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:347
+msgid "definition"
+msgstr "definicja"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:352
+msgid "press"
+msgstr "naciśnięcie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:357
+msgid "select"
+msgstr "wybór"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:362
+msgid "activate"
+msgstr "aktywacja"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:367
+msgid "uncheck"
+msgstr "odznaczenie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:372
+msgid "check"
+msgstr "zaznaczenie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
+msgid "jump"
+msgstr "skok"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:392
+msgid "Missing Plug-in"
+msgstr "Brak wtyczki"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:398
+msgid "Plug-in Failure"
+msgstr "Niepowodzenie wtyczki"
+
+#. FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:404
+msgid " files"
+msgstr " plików"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
+msgid "Unknown"
+msgstr "Nieznane"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:414
+#, c-format
+msgctxt "Title string for images"
+msgid "%s (%dx%d pixels)"
+msgstr "%s (%dx%d pikseli)"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
+msgid "Loading..."
+msgstr "Wczytywanie..."
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:431
+msgid "Live Broadcast"
+msgstr "Nadawanie na żywo"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:437
+msgid "audio element controller"
+msgstr "kontroler elementu dźwiękowego"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:439
+msgid "video element controller"
+msgstr "kontroler elementu wideo"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:441
+msgid "mute"
+msgstr "wyciszenie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:443
+msgid "unmute"
+msgstr "wyłączenie wyciszenia"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:445
+msgid "play"
+msgstr "odtworzenie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:447
+msgid "pause"
+msgstr "wstrzymanie"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:449
+msgid "movie time"
+msgstr "czas filmu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:451
+msgid "timeline slider thumb"
+msgstr "miniaturka paska osi czasu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:453
+msgid "back 30 seconds"
+msgstr "wstecz 30 sekund"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:455
+msgid "return to realtime"
+msgstr "powrót do czasu rzeczywistego"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:457
+msgid "elapsed time"
+msgstr "czas, jaki upłynął"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:459
+msgid "remaining time"
+msgstr "pozostały czas"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
+msgid "status"
+msgstr "stan"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:463
+msgid "fullscreen"
+msgstr "pełny ekran"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:465
+msgid "fast forward"
+msgstr "szybkie przewijanie do przodu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:467
+msgid "fast reverse"
+msgstr "szybkie przewijanie do tyłu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:469
+msgid "show closed captions"
+msgstr "wyświetlenie zamkniętych napisów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:471
+msgid "hide closed captions"
+msgstr "ukrycie zamkniętych napisów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:480
+msgid "audio element playback controls and status display"
+msgstr "wyświetlanie kontrolek i stanu odtwarzania elementu dźwiękowego"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:482
+msgid "video element playback controls and status display"
+msgstr "wyświetlanie kontrolek i stanu odtwarzania elementu wideo"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:484
+msgid "mute audio tracks"
+msgstr "wyciszenie ścieżek dźwiękowych"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:486
+msgid "unmute audio tracks"
+msgstr "wyłączenie wyciszenia ścieżek dźwiękowych"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:488
+msgid "begin playback"
+msgstr "rozpoczęcie odtwarzania"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:490
+msgid "pause playback"
+msgstr "wstrzymanie odtwarzania"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:492
+msgid "movie time scrubber"
+msgstr "licznik czasu filmu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:494
+msgid "movie time scrubber thumb"
+msgstr "miniaturka licznika czasu filmu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:496
+msgid "seek movie back 30 seconds"
+msgstr "przewinięcie filmu do tyłu o 30 sekund"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:498
+msgid "return streaming movie to real time"
+msgstr "powrót pobieranego filmu do czasu rzeczywistego"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:500
+msgid "current movie time in seconds"
+msgstr "bieżący czas filmu w sekundach"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
+msgid "number of seconds of movie remaining"
+msgstr "liczba pozostałych sekund filmu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:504
+msgid "current movie status"
+msgstr "bieżący stan filmu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:506
+msgid "seek quickly back"
+msgstr "szybkie przewijanie do tyłu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:508
+msgid "seek quickly forward"
+msgstr "szybkie przewijanie do przodu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:510
+msgid "Play movie in fullscreen mode"
+msgstr "Odtwarzanie filmu w trybie pełnego ekranu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
+msgid "start displaying closed captions"
+msgstr "rozpoczęcie wyświetlania zamkniętych napisów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:514
+msgid "stop displaying closed captions"
+msgstr "zatrzymanie wyświetlania zamkniętych napisów"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:523
+msgid "indefinite time"
+msgstr "czas nieskończony"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:553
+msgid "value missing"
+msgstr "brak wartości"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:589
+msgid "type mismatch"
+msgstr "typ siÄ™ nie zgadza"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:612
+msgid "pattern mismatch"
+msgstr "wzór się nie zgadza"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:617
+msgid "too long"
+msgstr "za długo"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:622
+msgid "range underflow"
+msgstr "zakres jest poniżej poziomu"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:627
+msgid "range overflow"
+msgstr "zakres jest ponad poziomem"
+
+#: ../../../WebCore/platform/gtk/LocalizedStringsGtk.cpp:632
+msgid "step mismatch"
+msgstr "krok siÄ™ nie zgadza"
diff --git a/Source/WebKit/gtk/po/zh_CN.po b/Source/WebKit/gtk/po/zh_CN.po
index 8561fd8..148b671 100644
--- a/Source/WebKit/gtk/po/zh_CN.po
+++ b/Source/WebKit/gtk/po/zh_CN.po
@@ -2,15 +2,15 @@
# WebKit 软件包的简体中文翻译.
# This file is put in public domain.
#
-# Aron Xu <aronmalache@163.com>, 2009.
+# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: webkit 1.1.4\n"
+"Project-Id-Version: webkit HEAD\n"
"Report-Msgid-Bugs-To: http://bugs.webkit.org/\n"
"POT-Creation-Date: 2010-02-25 15:53-0300\n"
-"PO-Revision-Date: 2009-07-14 18:11+0800\n"
-"Last-Translator: Aron Xu <aronmalache@163.com>\n"
+"PO-Revision-Date: 2010-07-17 14:37+0800\n"
+"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,43 +27,43 @@ msgstr "输入方å¼(_M)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:78
msgid "LRM _Left-to-right mark"
-msgstr ""
+msgstr "LRM 左至å³æ ‡è®°"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:79
msgid "RLM _Right-to-left mark"
-msgstr ""
+msgstr "RLM å³è‡³å·¦æ ‡è®°"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:80
msgid "LRE Left-to-right _embedding"
-msgstr ""
+msgstr "LRE 左至å³åµŒå…¥(_E)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:81
msgid "RLE Right-to-left e_mbedding"
-msgstr ""
+msgstr "RLE å³è‡³å·¦åµŒå…¥(_M)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:82
msgid "LRO Left-to-right _override"
-msgstr ""
+msgstr "LRO 左至å³è¦†ç›–(_O)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:83
msgid "RLO Right-to-left o_verride"
-msgstr ""
+msgstr "RLO å³è‡³å·¦è¦†ç›–(_V)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:84
msgid "PDF _Pop directional formatting"
-msgstr ""
+msgstr "PDF 顶部方å‘æ ¼å¼(_P)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:85
msgid "ZWS _Zero width space"
-msgstr ""
+msgstr "ZWS 零宽度空格(_Z)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:86
msgid "ZWJ Zero width _joiner"
-msgstr ""
+msgstr "ZWJ 零宽度连接符(_J)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:87
msgid "ZWNJ Zero width _non-joiner"
-msgstr ""
+msgstr "ZWNJ 零宽度éžè¿žæŽ¥ç¬¦(_N)"
#: WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp:109
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:138
@@ -76,17 +76,15 @@ msgstr "网络请求"
#: WebKit/gtk/webkit/webkitdownload.cpp:267
msgid "The network request for the URI that should be downloaded"
-msgstr "网络请求该 URI 应当被下载"
+msgstr "应被下载的该 URI 的网络请求"
#: WebKit/gtk/webkit/webkitdownload.cpp:281
-#, fuzzy
msgid "Network Response"
-msgstr "网络请求"
+msgstr "网络å“应"
#: WebKit/gtk/webkit/webkitdownload.cpp:282
-#, fuzzy
msgid "The network response for the URI that should be downloaded"
-msgstr "网络请求该 URI 应当被下载"
+msgstr "应被下载的该 URI 的网络å“应"
#: WebKit/gtk/webkit/webkitdownload.cpp:296
msgid "Destination URI"
@@ -147,7 +145,7 @@ msgstr "站点 %s 请求用户å和密ç "
#: WebKit/gtk/webkit/webkitsoupauthdialog.c:278
msgid "Server message:"
-msgstr ""
+msgstr "æœåŠ¡å™¨æ¶ˆæ¯ï¼š"
#: WebKit/gtk/webkit/webkitsoupauthdialog.c:291
msgid "Username:"
@@ -158,9 +156,8 @@ msgid "Password:"
msgstr "密ç ï¼š"
#: WebKit/gtk/webkit/webkitsoupauthdialog.c:302
-#, fuzzy
msgid "_Remember password"
-msgstr "è®°ä½å¯†ç "
+msgstr "è®°ä½å¯†ç (_R)"
#: WebKit/gtk/webkit/webkitwebframe.cpp:298
msgid "Name"
@@ -192,22 +189,20 @@ msgstr "框架中当å‰æ˜¾ç¤ºå†…容的 URI"
#: WebKit/gtk/webkit/webkitwebframe.cpp:344
msgid "Horizontal Scrollbar Policy"
-msgstr ""
+msgstr "水平滚动æ¡è§„则"
#: WebKit/gtk/webkit/webkitwebframe.cpp:345
-#, fuzzy
msgid ""
"Determines the current policy for the horizontal scrollbar of the frame."
-msgstr "显示当å‰ä¸‹è½½è¿›åº¦"
+msgstr "确定框架的水平滚动æ¡è§„则"
#: WebKit/gtk/webkit/webkitwebframe.cpp:362
msgid "Vertical Scrollbar Policy"
-msgstr ""
+msgstr "竖直滚动æ¡è§„则"
#: WebKit/gtk/webkit/webkitwebframe.cpp:363
-#, fuzzy
msgid "Determines the current policy for the vertical scrollbar of the frame."
-msgstr "显示当å‰ä¸‹è½½è¿›åº¦"
+msgstr "确定框架的竖直滚动æ¡è§„则"
#: WebKit/gtk/webkit/webkitwebhistoryitem.cpp:147
msgid "The title of the history item"
@@ -267,13 +262,12 @@ msgid "Profile the executed JavaScript."
msgstr "记录已执行的 JavaScript 的摘è¦ä¿¡æ¯ã€‚"
#: WebKit/gtk/webkit/webkitwebinspector.cpp:315
-#, fuzzy
msgid "Enable Timeline profiling"
-msgstr "å¯ç”¨ JavaScript 摘è¦"
+msgstr "å¯ç”¨æ—¶é—´è½´åˆ†æž"
#: WebKit/gtk/webkit/webkitwebinspector.cpp:316
msgid "Profile the WebCore instrumentation."
-msgstr ""
+msgstr "åˆ†æž WebCore 构件"
#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:158
msgid "Reason"
@@ -304,14 +298,12 @@ msgid "A bitmask representing the state of the modifier keys"
msgstr "一个代表当å‰ä¿®é¥°é”®çŠ¶æ€çš„ä½æŽ©ç "
#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:220
-#, fuzzy
msgid "Target frame"
-msgstr "框架å称"
+msgstr "目标框架"
#: WebKit/gtk/webkit/webkitwebnavigationaction.cpp:221
-#, fuzzy
msgid "The target frame for the navigation"
-msgstr "此 URI 是被作为导航目标而请求的"
+msgstr "导航的目标框架"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:237
msgid "Default Encoding"
@@ -491,155 +483,150 @@ msgstr "å¯ç”¨éšç§æµè§ˆæ¨¡å¼"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:481
msgid "Enable Spell Checking"
-msgstr ""
+msgstr "å¯ç”¨æ‹¼å†™æ£€æŸ¥"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:482
-#, fuzzy
msgid "Enables spell checking while typing"
-msgstr "输入时检查拼写(_T)"
+msgstr "输入时检查拼写"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:505
msgid "Languages to use for spell checking"
-msgstr ""
+msgstr "拼写检查的语言"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:506
msgid "Comma separated list of languages to use for spell checking"
-msgstr ""
+msgstr "è¦æ‹¼å†™æ£€æŸ¥çš„语言,以åŠè§’逗å·åˆ†éš”"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:520
-#, fuzzy
msgid "Enable Caret Browsing"
-msgstr "å¯ç”¨éšç§æµè§ˆ"
+msgstr "å¯ç”¨å…‰æ ‡å¯¼èˆª"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:521
msgid "Whether to enable accesibility enhanced keyboard navigation"
-msgstr ""
+msgstr "是å¦å¯ç”¨è¾…助功能增强型键盘导航"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:536
msgid "Enable HTML5 Database"
-msgstr ""
+msgstr "å¯ç”¨ HTML5 æ•°æ®åº“"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:537
msgid "Whether to enable HTML5 database support"
-msgstr ""
+msgstr "是å¦å¯ç”¨ HTML5 æ•°æ®åº“支æŒ"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:552
msgid "Enable HTML5 Local Storage"
-msgstr ""
+msgstr "å¯ç”¨ HTML5 本地存储"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:553
msgid "Whether to enable HTML5 Local Storage support"
-msgstr ""
+msgstr "是å¦å¯ç”¨ HTML5 本地存储支æŒ"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:567
-#, fuzzy
msgid "Enable XSS Auditor"
-msgstr "å¯ç”¨è„šæœ¬"
+msgstr "å¯ç”¨ XSS 审计"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:568
msgid "Whether to enable teh XSS auditor"
-msgstr ""
+msgstr "是å¦å¯ç”¨ XSS 审计"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:586
msgid "User Agent"
-msgstr ""
+msgstr "User Agent"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:587
msgid "The User-Agent string used by WebKitGtk"
-msgstr ""
+msgstr "WebKitGTK 使用的 User-Agent 串"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:602
msgid "JavaScript can open windows automatically"
-msgstr ""
+msgstr "JavaScript å¯ä»¥è‡ªåŠ¨æ‰“开窗å£"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:603
msgid "Whether JavaScript can open windows automatically"
-msgstr ""
+msgstr "是å¦å…许 JavaScript 自动打开窗å£"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:618
msgid "Enable offline web application cache"
-msgstr ""
+msgstr "å¯ç”¨ç¦»çº¿ Web 应用程åºç¼“å­˜"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:619
msgid "Whether to enable offline web application cache"
-msgstr ""
+msgstr "是å¦å¯ç”¨ç¦»çº¿ Web 应用程åºç¼“å­˜"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:646
msgid "Editing behavior"
-msgstr ""
+msgstr "编辑行为"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:647
msgid "The behavior mode to use in editing mode"
-msgstr ""
+msgstr "在编辑模å¼ä¸­ä½¿ç”¨çš„行为模å¼"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:663
msgid "Enable universal access from file URIs"
-msgstr ""
+msgstr "å¯ç”¨ä»Žæ–‡ä»¶ URI 的通用访问"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:664
msgid "Whether to allow universal access from file URIs"
-msgstr ""
+msgstr "是å¦å…许从文件 URI 的通用访问"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:679
-#, fuzzy
msgid "Enable DOM paste"
-msgstr "å¯ç”¨è„šæœ¬"
+msgstr "å¯ç”¨ DOM 粘贴"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:680
msgid "Whether to enable DOM paste"
-msgstr ""
+msgstr "是å¦å¯ç”¨ DOM 粘贴"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:698
msgid "Tab key cycles through elements"
-msgstr ""
+msgstr "元素间 Tab 键循环"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:699
msgid "Whether the tab key cycles through elements on the page."
-msgstr ""
+msgstr "是å¦å…许元素间 Tab 键循环。"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:719
msgid "Enable Default Context Menu"
-msgstr ""
+msgstr "å¯ç”¨é»˜è®¤çŽ¯å¢ƒèœå•"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:720
msgid ""
"Enables the handling of right-clicks for the creation of the default context "
"menu"
msgstr ""
+"å¯ç”¨å³é”®åˆ›å»ºçŽ¯å¢ƒèœå•çš„处ç†"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:740
msgid "Enable Site Specific Quirks"
-msgstr ""
+msgstr "å¯ç”¨ç‰¹å®šç«™ç‚¹è®¾ç½®"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:741
msgid "Enables the site-specific compatibility workarounds"
-msgstr ""
+msgstr "å¯ç”¨é’ˆå¯¹ç‰¹å®šç«™ç‚¹çš„兼容性临时解决办法"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:763
msgid "Enable page cache"
-msgstr ""
+msgstr "å¯ç”¨é¡µé¢ç¼“å­˜"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:764
-#, fuzzy
msgid "Whether the page cache should be used"
-msgstr "是å¦æ‰“å°èƒŒæ™¯ã€‚"
+msgstr "是å¦ä½¿ç”¨é¡µé¢ç¼“å­˜"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:784
msgid "Auto Resize Window"
-msgstr ""
+msgstr "自动调整窗å£å¤§å°"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:785
msgid "Automatically resize the toplevel window when a page requests it"
-msgstr ""
+msgstr "当页é¢å‘出请求时自动调整顶层窗å£å¤§å°"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:817
-#, fuzzy
msgid "Enable Java Applet"
-msgstr "å¯ç”¨ JavaScript 摘è¦"
+msgstr "å¯ç”¨ Java å°ç¨‹åº"
#: WebKit/gtk/webkit/webkitwebsettings.cpp:818
msgid "Whether Java Applet support through <applet> should be enabled"
-msgstr ""
+msgstr "是å¦é€šè¿‡ <applet> 标签è¿è¡Œ Java å°ç¨‹åº"
#: WebKit/gtk/webkit/webkitwebview.cpp:2319
msgid "Returns the @web_view's document title"
@@ -731,11 +718,11 @@ msgstr "Web View的自定义编ç "
#: WebKit/gtk/webkit/webkitwebview.cpp:2520
msgid "Icon URI"
-msgstr ""
+msgstr "图标 URI"
#: WebKit/gtk/webkit/webkitwebview.cpp:2521
msgid "The URI for the favicon for the #WebKitWebView."
-msgstr ""
+msgstr "#WebKitWebView 的 favicon URI。"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:55
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:60
@@ -748,7 +735,7 @@ msgstr "é‡ç½®"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:70
msgid "This is a searchable index. Enter search keywords: "
-msgstr ""
+msgstr "这是一个å¯æœç´¢çš„索引。请输入æœç´¢å…³é”®å­—:"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:75
msgid "Choose File"
@@ -908,189 +895,187 @@ msgstr "未知"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:364
msgid "Loading..."
-msgstr ""
+msgstr "正在载入..."
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:369
msgid "Live Broadcast"
-msgstr ""
+msgstr "ç›´æ’­"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:375
msgid "audio element controller"
-msgstr ""
+msgstr "音频元素控制"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:377
msgid "video element controller"
-msgstr ""
+msgstr "视频元素控制"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:379
msgid "mute"
-msgstr ""
+msgstr "é™éŸ³"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:381
msgid "unmute"
-msgstr ""
+msgstr "解除é™éŸ³"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:383
msgid "play"
-msgstr ""
+msgstr "播放"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:385
msgid "pause"
-msgstr ""
+msgstr "æš‚åœ"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:387
msgid "movie time"
-msgstr ""
+msgstr "影片时长"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:389
msgid "timeline slider thumb"
-msgstr ""
+msgstr "时间轴滑动预览"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:391
msgid "back 30 seconds"
-msgstr ""
+msgstr "åŽé€€ 30 秒"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:393
msgid "return to realtime"
-msgstr ""
+msgstr "返回实时状æ€"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:395
msgid "elapsed time"
-msgstr ""
+msgstr "播放时间"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:397
msgid "remaining time"
-msgstr ""
+msgstr "剩余时间"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:399
-#, fuzzy
msgid "status"
msgstr "状æ€"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:401
msgid "fullscreen"
-msgstr ""
+msgstr "å…¨å±"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:403
msgid "fast forward"
-msgstr ""
+msgstr "å¿«è¿›"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:405
msgid "fast reverse"
-msgstr ""
+msgstr "快退"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:407
msgid "show closed captions"
-msgstr ""
+msgstr "显示常闭å¼å­—幕"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:409
msgid "hide closed captions"
-msgstr ""
+msgstr "éšè—常闭å¼å­—幕"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:418
msgid "audio element playback controls and status display"
-msgstr ""
+msgstr "音频元素回放控制和状æ€æ˜¾ç¤º"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:420
msgid "video element playback controls and status display"
-msgstr ""
+msgstr "视频元素回访控制和状æ€æ˜¾ç¤º"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:422
msgid "mute audio tracks"
-msgstr ""
+msgstr "é™éŸ³éŸ³è½¨"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:424
msgid "unmute audio tracks"
-msgstr ""
+msgstr "解除音轨é™éŸ³"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:426
msgid "begin playback"
-msgstr ""
+msgstr "开始回放"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:428
msgid "pause playback"
-msgstr ""
+msgstr "æš‚åœå›žæ”¾"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:430
msgid "movie time scrubber"
-msgstr ""
+msgstr "影片时间刷"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:432
msgid "movie time scrubber thumb"
-msgstr ""
+msgstr "影片时间刷缩略图"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:434
msgid "seek movie back 30 seconds"
-msgstr ""
+msgstr "å‘å‰ 30 秒查找影片"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:436
msgid "return streaming movie to real time"
-msgstr ""
+msgstr "å°†æµå½±ç‰‡è¿”回实时状æ€"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:438
msgid "current movie time in seconds"
-msgstr ""
+msgstr "以秒显示当å‰å½±ç‰‡æ—¶é—´"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:440
msgid "number of seconds of movie remaining"
-msgstr ""
+msgstr "影片剩余秒数"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:442
msgid "current movie status"
-msgstr ""
+msgstr "当å‰å½±ç‰‡çŠ¶æ€"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:444
msgid "seek quickly back"
-msgstr ""
+msgstr "快退查找"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:446
msgid "seek quickly forward"
-msgstr ""
+msgstr "快进查找"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:448
msgid "Play movie in fullscreen mode"
-msgstr ""
+msgstr "以全å±æ¨¡å¼æ’­æ”¾å½±ç‰‡"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:450
msgid "start displaying closed captions"
-msgstr ""
+msgstr "开始显示常闭å¼å­—幕"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:452
msgid "stop displaying closed captions"
-msgstr ""
+msgstr "åœæ­¢æ˜¾ç¤ºå¸¸é—­å¼å­—幕"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:461
-#, fuzzy
msgid "indefinite time"
-msgstr "定义"
+msgstr "模糊时间"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:491
msgid "value missing"
-msgstr ""
+msgstr "缺少值"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:497
msgid "type mismatch"
-msgstr ""
+msgstr "类型ä¸åŒ¹é…"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:502
msgid "pattern mismatch"
-msgstr ""
+msgstr "æ ·å¼ä¸åŒ¹é…"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:507
msgid "too long"
-msgstr ""
+msgstr "太长"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:512
msgid "range underflow"
-msgstr ""
+msgstr "范围下溢"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:517
msgid "range overflow"
-msgstr ""
+msgstr "范围上溢"
#: WebCore/platform/gtk/LocalizedStringsGtk.cpp:522
msgid "step mismatch"
-msgstr ""
+msgstr "步骤ä¸åŒ¹é…"
#~ msgid "_Searchable Index"
#~ msgstr "å¯æœç´¢ç´¢å¼•(_S)"
diff --git a/Source/WebKit/gtk/tests/testatk.c b/Source/WebKit/gtk/tests/testatk.c
index 1ee6c55..6508638 100644
--- a/Source/WebKit/gtk/tests/testatk.c
+++ b/Source/WebKit/gtk/tests/testatk.c
@@ -32,6 +32,8 @@ static const char* contents = "<html><body><p>This is a test. This is the second
static const char* contentsWithNewlines = "<html><body><p>This is a test. \n\nThis\n is the second sentence. And this the third.</p></body></html>";
+static const char* contentsWithSpecialChars = "<html><body><p>&laquo;&nbsp;This is a paragraph with &ldquo;special&rdquo; characters inside.&nbsp;&raquo;</p></body></html>";
+
static const char* contentsInTextarea = "<html><body><textarea cols='80'>This is a test. This is the second sentence. And this the third.</textarea></body></html>";
static const char* contentsInTextInput = "<html><body><input type='text' size='80' value='This is a test. This is the second sentence. And this the third.'/></body></html>";
@@ -44,6 +46,8 @@ static const char* contentsInTable = "<html><body><table><tr><td>foo</td><td>bar
static const char* contentsInTableWithHeaders = "<html><body><table><tr><th>foo</th><th>bar</th><th colspan='2'>baz</th></tr><tr><th>qux</th><td>1</td><td>2</td><td>3</td></tr><tr><th rowspan='2'>quux</th><td>4</td><td>5</td><td>6</td></tr><tr><td>6</td><td>7</td><td>8</td></tr><tr><th>corge</th><td>9</td><td>10</td><td>11</td></tr></table><table><tr><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td></tr></table></body></html>";
+static const char* contentsWithExtraneousWhiteSpaces = "<html><head><body><p>This\n paragraph\n is\n borked!</p></body></html>";
+
static const char* comboBoxSelector = "<html><body><select><option selected value='foo'>foo</option><option value='bar'>bar</option></select></body></html>";
static const char* formWithTextInputs = "<html><body><form><input type='text' name='entry' /></form></body></html>";
@@ -56,6 +60,8 @@ static const char* linksWithInlineImages = "<html><head><style>a.http:before {co
static const char* listsOfItems = "<html><body><ul><li>text only</li><li><a href='foo'>link only</a></li><li>text and a <a href='bar'>link</a></li></ul><ol><li>text only</li><li><a href='foo'>link only</a></li><li>text and a <a href='bar'>link</a></li></ol></body></html>";
+static const char* textForCaretBrowsing = "<html><body><h1>A text header</h1><p>A paragraph <a href='http://foo.bar.baz/'>with a link</a> in the middle</p><ol><li>A list item</li></ol><select><option selected value='foo'>An option in a combo box</option></select></body></html>";
+
static const char* textForSelections = "<html><body><p>A paragraph with plain text</p><p>A paragraph with <a href='http://webkit.org'>a link</a> in the middle</p></body></html>";
static const char* textWithAttributes = "<html><head><style>.st1 {font-family: monospace; color:rgb(120,121,122);} .st2 {text-decoration:underline; background-color:rgb(80,81,82);}</style></head><body><p style=\"font-size:14; text-align:right;\">This is the <i>first</i><b> sentence of this text.</b></p><p class=\"st1\">This sentence should have an style applied <span class=\"st2\">and this part should have another one</span>.</p><p>x<sub>1</sub><sup>2</sup>=x<sub>2</sub><sup>3</sup></p><p style=\"text-align:center;\">This sentence is the <strike>last</strike> one.</p></body></html>";
@@ -223,6 +229,156 @@ static void runGetTextTests(AtkText* textObject)
0, "This is a test. This is the second sentence. And this the third.", 0, 64);
}
+static void testWebkitAtkCaretOffsets()
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
+ g_object_ref_sink(webView);
+ GtkAllocation allocation = { 0, 0, 800, 600 };
+ gtk_widget_size_allocate(GTK_WIDGET(webView), &allocation);
+ webkit_web_view_load_string(webView, textForCaretBrowsing, 0, 0, 0);
+
+ /* Wait for the accessible objects to be created. */
+ waitForAccessibleObjects();
+
+ AtkObject* object = gtk_widget_get_accessible(GTK_WIDGET(webView));
+ g_assert(object);
+
+ AtkObject* header = atk_object_ref_accessible_child(object, 0);
+ g_assert(ATK_IS_TEXT(header));
+ gchar* text = atk_text_get_text(ATK_TEXT(header), 0, -1);
+ g_assert_cmpstr(text, ==, "A text header");
+ g_free (text);
+
+ /* It should be possible to place the caret inside a header. */
+ gboolean result = atk_text_set_caret_offset(ATK_TEXT(header), 5);
+ g_assert_cmpint(result, ==, TRUE);
+ gint offset = atk_text_get_caret_offset(ATK_TEXT(header));
+ g_assert_cmpint(offset, ==, 5);
+
+ AtkObject* paragraph = atk_object_ref_accessible_child(object, 1);
+ g_assert(ATK_IS_TEXT(paragraph));
+ text = atk_text_get_text(ATK_TEXT(paragraph), 0, -1);
+ g_assert_cmpstr(text, ==, "A paragraph with a link in the middle");
+ g_free (text);
+
+ /* It should be possible to place the caret inside a paragraph and a link. */
+ result = atk_text_set_caret_offset(ATK_TEXT(paragraph), 5);
+ g_assert_cmpint(result, ==, TRUE);
+ offset = atk_text_get_caret_offset(ATK_TEXT(paragraph));
+ g_assert_cmpint(offset, ==, 5);
+
+ result = atk_text_set_caret_offset(ATK_TEXT(paragraph), 20);
+ g_assert_cmpint(result, ==, TRUE);
+ offset = atk_text_get_caret_offset(ATK_TEXT(paragraph));
+ g_assert_cmpint(offset, ==, 20);
+
+ result = atk_text_set_caret_offset(ATK_TEXT(paragraph), 30);
+ g_assert_cmpint(result, ==, TRUE);
+ offset = atk_text_get_caret_offset(ATK_TEXT(paragraph));
+ g_assert_cmpint(offset, ==, 30);
+
+ AtkObject* list = atk_object_ref_accessible_child(object, 2);
+ g_assert(ATK_OBJECT(list));
+ g_assert(atk_object_get_role(list) == ATK_ROLE_LIST);
+ g_assert_cmpint(atk_object_get_n_accessible_children(list), ==, 1);
+
+ AtkObject* listItem = atk_object_ref_accessible_child(list, 0);
+ g_assert(ATK_IS_TEXT(listItem));
+ text = atk_text_get_text(ATK_TEXT(listItem), 0, -1);
+ g_assert_cmpstr(text, ==, "1. A list item");
+ g_free (text);
+
+ /* It's not possible to place the caret inside an item's marker. */
+ result = atk_text_set_caret_offset(ATK_TEXT(listItem), 1);
+ g_assert_cmpint(result, ==, FALSE);
+
+ /* It should be possible to place the caret inside an item's text. */
+ result = atk_text_set_caret_offset(ATK_TEXT(listItem), 5);
+ g_assert_cmpint(result, ==, TRUE);
+ offset = atk_text_get_caret_offset(ATK_TEXT(listItem));
+ g_assert_cmpint(offset, ==, 5);
+
+ AtkObject* panel = atk_object_ref_accessible_child(object, 3);
+ g_assert(ATK_IS_OBJECT(panel));
+ g_assert(atk_object_get_role(panel) == ATK_ROLE_PANEL);
+
+ AtkObject* comboBox = atk_object_ref_accessible_child(panel, 0);
+ g_assert(ATK_IS_OBJECT(comboBox));
+ g_assert(atk_object_get_role(comboBox) == ATK_ROLE_COMBO_BOX);
+
+ AtkObject* menuPopup = atk_object_ref_accessible_child(comboBox, 0);
+ g_assert(ATK_IS_OBJECT(menuPopup));
+ g_assert(atk_object_get_role(menuPopup) == ATK_ROLE_MENU);
+
+ AtkObject* comboBoxOption = atk_object_ref_accessible_child(menuPopup, 0);
+ g_assert(ATK_IS_OBJECT(comboBoxOption));
+ g_assert(atk_object_get_role(comboBoxOption) == ATK_ROLE_MENU_ITEM);
+ g_assert(ATK_IS_TEXT(comboBoxOption));
+ text = atk_text_get_text(ATK_TEXT(comboBoxOption), 0, -1);
+ g_assert_cmpstr(text, ==, "An option in a combo box");
+
+ /* It's not possible to place the caret inside an option for a combobox. */
+ result = atk_text_set_caret_offset(ATK_TEXT(comboBoxOption), 1);
+ g_assert_cmpint(result, ==, FALSE);
+
+ g_object_unref(header);
+ g_object_unref(paragraph);
+ g_object_unref(list);
+ g_object_unref(listItem);
+ g_object_unref(panel);
+ g_object_unref(comboBox);
+ g_object_unref(menuPopup);
+ g_object_unref(comboBoxOption);
+ g_object_unref(webView);
+}
+
+static void testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces()
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
+ g_object_ref_sink(webView);
+ GtkAllocation allocation = { 0, 0, 800, 600 };
+ gtk_widget_size_allocate(GTK_WIDGET(webView), &allocation);
+ webkit_web_view_load_string(webView, contentsWithExtraneousWhiteSpaces, 0, 0, 0);
+
+ /* Wait for the accessible objects to be created. */
+ waitForAccessibleObjects();
+
+ /* Enable caret browsing. */
+ WebKitWebSettings* settings = webkit_web_view_get_settings(webView);
+ g_object_set(G_OBJECT(settings), "enable-caret-browsing", TRUE, NULL);
+ webkit_web_view_set_settings(webView, settings);
+
+ /* Get to the inner AtkText object. */
+ AtkObject* object = gtk_widget_get_accessible(GTK_WIDGET(webView));
+ g_assert(object);
+ object = atk_object_ref_accessible_child(object, 0);
+ g_assert(object);
+
+ AtkText* textObject = ATK_TEXT(object);
+ g_assert(ATK_IS_TEXT(textObject));
+
+ gchar* text = atk_text_get_text(textObject, 0, -1);
+ g_assert_cmpstr(text, ==, "This paragraph is borked!");
+ g_free(text);
+
+ gint characterCount = atk_text_get_character_count(textObject);
+ g_assert_cmpint(characterCount, ==, 25);
+
+ gboolean result = atk_text_set_caret_offset(textObject, characterCount - 1);
+ g_assert_cmpint(result, ==, TRUE);
+
+ gint caretOffset = atk_text_get_caret_offset(textObject);
+ g_assert_cmpint(caretOffset, ==, characterCount - 1);
+
+ result = atk_text_set_caret_offset(textObject, characterCount);
+ g_assert_cmpint(result, ==, TRUE);
+
+ caretOffset = atk_text_get_caret_offset(textObject);
+ g_assert_cmpint(caretOffset, ==, characterCount);
+
+ g_object_unref(webView);
+}
+
static void testWebkitAtkComboBox()
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
@@ -453,6 +609,40 @@ static void testWebkitAtkGetTextAtOffsetTextInput()
g_object_unref(webView);
}
+static void testWebkitAtkGetTextAtOffsetWithSpecialCharacters()
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
+ g_object_ref_sink(webView);
+ GtkAllocation allocation = { 0, 0, 800, 600 };
+ gtk_widget_size_allocate(GTK_WIDGET(webView), &allocation);
+ webkit_web_view_load_string(webView, contentsWithSpecialChars, 0, 0, 0);
+
+ /* Wait for the accessible objects to be created. */
+ waitForAccessibleObjects();
+
+ /* Get to the inner AtkText object. */
+ AtkObject* object = gtk_widget_get_accessible(GTK_WIDGET(webView));
+ g_assert(object);
+ object = atk_object_ref_accessible_child(object, 0);
+ g_assert(object);
+
+ AtkText* textObject = ATK_TEXT(object);
+ g_assert(ATK_IS_TEXT(textObject));
+
+ const gchar* expectedText = "\302\253\302\240This is a paragraph with \342\200\234special\342\200\235 characters inside.\302\240\302\273";
+ char* text = atk_text_get_text(textObject, 0, -1);
+ g_assert_cmpstr(text, ==, expectedText);
+ g_free(text);
+
+ /* Check that getting the text with ATK_TEXT_BOUNDARY_LINE_START
+ and ATK_TEXT_BOUNDARY_LINE_END does not crash because of not
+ properly handling characters inside the UTF-8 string. */
+ testGetTextFunction(textObject, atk_text_get_text_at_offset, ATK_TEXT_BOUNDARY_LINE_START, 0, expectedText, 0, 57);
+ testGetTextFunction(textObject, atk_text_get_text_at_offset, ATK_TEXT_BOUNDARY_LINE_END, 0, expectedText, 0, 57);
+
+ g_object_unref(webView);
+}
+
static void testWebkitAtkGetTextInParagraphAndBodySimple()
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
@@ -1005,6 +1195,21 @@ static void testWebkitAtkGetExtents()
g_assert_cmpint(y, ==, mline_window.y + mline_window.height - height);
g_assert_cmpint(height, <=, mline_window.height);
+ /* Check that extent for a full line are the same height than for
+ a partial section of the same line */
+ gint startOffset;
+ gint endOffset;
+ gchar* text = atk_text_get_text_at_offset(multilineText, 0, ATK_TEXT_BOUNDARY_LINE_START, &startOffset, &endOffset);
+ g_free(text);
+
+ AtkTextRectangle fline_window;
+ AtkTextRectangle afline_window;
+ atk_text_get_range_extents(multilineText, startOffset, endOffset, ATK_XY_WINDOW, &fline_window);
+ atk_text_get_range_extents(multilineText, startOffset, endOffset - 1, ATK_XY_WINDOW, &afline_window);
+ g_assert_cmpint(fline_window.x, ==, afline_window.x);
+ g_assert_cmpint(fline_window.y, ==, afline_window.y);
+ g_assert_cmpint(fline_window.height, ==, afline_window.height);
+
g_object_unref(shortText1);
g_object_unref(shortText2);
g_object_unref(longText);
@@ -1314,12 +1519,15 @@ int main(int argc, char** argv)
gtk_test_init(&argc, &argv, 0);
g_test_bug_base("https://bugs.webkit.org/");
+ g_test_add_func("/webkit/atk/caretOffsets", testWebkitAtkCaretOffsets);
+ g_test_add_func("/webkit/atk/caretOffsetsAndExtranousWhiteSpaces", testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces);
g_test_add_func("/webkit/atk/comboBox", testWebkitAtkComboBox);
g_test_add_func("/webkit/atk/getTextAtOffset", testWebkitAtkGetTextAtOffset);
g_test_add_func("/webkit/atk/getTextAtOffsetForms", testWebkitAtkGetTextAtOffsetForms);
g_test_add_func("/webkit/atk/getTextAtOffsetNewlines", testWebkitAtkGetTextAtOffsetNewlines);
g_test_add_func("/webkit/atk/getTextAtOffsetTextarea", testWebkitAtkGetTextAtOffsetTextarea);
g_test_add_func("/webkit/atk/getTextAtOffsetTextInput", testWebkitAtkGetTextAtOffsetTextInput);
+ g_test_add_func("/webkit/atk/getTextAtOffsetWithSpecialCharacters", testWebkitAtkGetTextAtOffsetWithSpecialCharacters);
g_test_add_func("/webkit/atk/getTextInParagraphAndBodySimple", testWebkitAtkGetTextInParagraphAndBodySimple);
g_test_add_func("/webkit/atk/getTextInParagraphAndBodyModerate", testWebkitAtkGetTextInParagraphAndBodyModerate);
g_test_add_func("/webkit/atk/getTextInTable", testWebkitAtkGetTextInTable);
diff --git a/Source/WebKit/gtk/webkit/webkitglobals.cpp b/Source/WebKit/gtk/webkit/webkitglobals.cpp
index a97d53f..c23824c 100644
--- a/Source/WebKit/gtk/webkit/webkitglobals.cpp
+++ b/Source/WebKit/gtk/webkit/webkitglobals.cpp
@@ -117,14 +117,24 @@ void webkit_set_cache_model(WebKitCacheModel model)
gdouble deadDecodedDataDeletionInterval;
guint pageCacheCapacity;
+ // FIXME: The Mac port calculates these values based on the amount of physical memory that's
+ // installed on the system. Currently these values match the Mac port for users with more than
+ // 512 MB and less than 1024 MB of physical memory.
switch (model) {
case WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER:
pageCacheCapacity = 0;
- cacheTotalCapacity = 0;
+ cacheTotalCapacity = 0; // FIXME: The Mac port actually sets this to larger than 0.
cacheMinDeadCapacity = 0;
cacheMaxDeadCapacity = 0;
deadDecodedDataDeletionInterval = 0;
break;
+ case WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER:
+ pageCacheCapacity = 2;
+ cacheTotalCapacity = 16 * 1024 * 1024;
+ cacheMinDeadCapacity = cacheTotalCapacity / 8;
+ cacheMaxDeadCapacity = cacheTotalCapacity / 4;
+ deadDecodedDataDeletionInterval = 0;
+ break;
case WEBKIT_CACHE_MODEL_WEB_BROWSER:
// Page cache capacity (in pages). Comment from Mac port:
// (Research indicates that value / page drops substantially after 3 pages.)
@@ -248,13 +258,7 @@ void webkitInit()
PageGroup::setShouldTrackVisitedLinks(true);
Pasteboard::generalPasteboard()->setHelper(WebKit::pasteboardHelperInstance());
-
- iconDatabase()->setEnabled(true);
-
- GOwnPtr<gchar> iconDatabasePath(g_build_filename(g_get_user_data_dir(), "webkit", "icondatabase", NULL));
- iconDatabase()->open(iconDatabasePath.get());
-
- atexit(closeIconDatabaseOnExit);
+ WebKit::setIconDatabaseEnabled(true);
SoupSession* session = webkit_get_default_session();
@@ -278,5 +282,25 @@ PasteboardHelperGtk* pasteboardHelperInstance()
return helper;
}
+void setIconDatabaseEnabled(bool enabled)
+{
+ static bool initialized = false;
+ if (enabled && !initialized) {
+ initialized = true;
+ atexit(closeIconDatabaseOnExit);
+ }
+
+ if (enabled) {
+ iconDatabase()->setEnabled(true);
+ GOwnPtr<gchar> iconDatabasePath(g_build_filename(g_get_user_data_dir(), "webkit", "icondatabase", NULL));
+ iconDatabase()->open(iconDatabasePath.get());
+ return;
+ }
+
+ iconDatabase()->setEnabled(false);
+ iconDatabase()->close();
+}
+
+
} /** end namespace WebKit */
diff --git a/Source/WebKit/gtk/webkit/webkitglobals.h b/Source/WebKit/gtk/webkit/webkitglobals.h
index 6d144fc..612c195 100644
--- a/Source/WebKit/gtk/webkit/webkitglobals.h
+++ b/Source/WebKit/gtk/webkit/webkitglobals.h
@@ -35,16 +35,21 @@ G_BEGIN_DECLS
* WEBKIT_CACHE_MODEL_WEB_BROWSER.
* @WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER: Disable the cache completely, which
* substantially reduces memory usage. Useful for applications that only
- * access local files.
+ * access a single local file, with no navigation to other pages. No remote
+ * resources will be cached.
+ * @WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER: A cache model optimized for viewing
+ * a series of local files -- for example, a documentation viewer or a website
+ * designer. WebKit will cache a moderate number of resources.
* @WEBKIT_CACHE_MODEL_WEB_BROWSER: Improve document load speed substantially
- * by caching previously viewed content.
+ * by caching a very large number of resources and previously viewed content.
*
* Enum values used for determining the webview cache model.
*/
typedef enum {
WEBKIT_CACHE_MODEL_DEFAULT,
WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER,
- WEBKIT_CACHE_MODEL_WEB_BROWSER
+ WEBKIT_CACHE_MODEL_WEB_BROWSER,
+ WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER,
} WebKitCacheModel;
WEBKIT_API SoupSession*
diff --git a/Source/WebKit/gtk/webkit/webkitglobalsprivate.h b/Source/WebKit/gtk/webkit/webkitglobalsprivate.h
index 5923f2e..7eb3aae 100644
--- a/Source/WebKit/gtk/webkit/webkitglobalsprivate.h
+++ b/Source/WebKit/gtk/webkit/webkitglobalsprivate.h
@@ -33,6 +33,7 @@ namespace WebKit {
class PasteboardHelperGtk;
PasteboardHelperGtk* pasteboardHelperInstance();
+void setIconDatabaseEnabled(bool);
}
extern "C" {
diff --git a/Source/WebKit/gtk/webkit/webkitwebframe.cpp b/Source/WebKit/gtk/webkit/webkitwebframe.cpp
index d0ea875..fd90a6c 100644
--- a/Source/WebKit/gtk/webkit/webkitwebframe.cpp
+++ b/Source/WebKit/gtk/webkit/webkitwebframe.cpp
@@ -474,23 +474,24 @@ WebKitWebView* webkit_web_frame_get_web_view(WebKitWebFrame* frame)
*
* Returns the @frame's name
*
- * Return value: the name of @frame
+ * Return value: the name of @frame. This method will return NULL if
+ * the #WebKitWebFrame is invalid or an empty string if it is not backed
+ * by a live WebCore frame.
*/
G_CONST_RETURN gchar* webkit_web_frame_get_name(WebKitWebFrame* frame)
{
g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), 0);
-
- WebKitWebFramePrivate* priv = frame->priv;
-
- if (priv->name)
- return priv->name;
-
Frame* coreFrame = core(frame);
if (!coreFrame)
return "";
- String string = coreFrame->tree()->uniqueName();
- priv->name = g_strdup(string.utf8().data());
+ WebKitWebFramePrivate* priv = frame->priv;
+ CString frameName = coreFrame->tree()->uniqueName().string().utf8();
+ if (!g_strcmp0(frameName.data(), priv->name))
+ return priv->name;
+
+ g_free(priv->name);
+ priv->name = g_strdup(frameName.data());
return priv->name;
}
@@ -768,7 +769,7 @@ static void draw_page_callback(GtkPrintOperation* op, GtkPrintContext* context,
{
PrintContext* printContext = reinterpret_cast<PrintContext*>(user_data);
- if (page_nr >= printContext->pageCount())
+ if (page_nr >= static_cast<gint>(printContext->pageCount()))
return;
cairo_t* cr = gtk_print_context_get_cairo_context(context);
diff --git a/Source/WebKit/gtk/webkit/webkitwebinspector.cpp b/Source/WebKit/gtk/webkit/webkitwebinspector.cpp
index df63c63..8b5b5ac 100644
--- a/Source/WebKit/gtk/webkit/webkitwebinspector.cpp
+++ b/Source/WebKit/gtk/webkit/webkitwebinspector.cpp
@@ -29,6 +29,7 @@
#include "HitTestResult.h"
#include "InspectorClientGtk.h"
#include "InspectorController.h"
+#include "InspectorInstrumentation.h"
#include "IntPoint.h"
#include "Page.h"
#include "RenderLayer.h"
@@ -397,7 +398,7 @@ static void webkit_web_inspector_get_property(GObject* object, guint prop_id, GV
#endif
break;
case PROP_TIMELINE_PROFILING_ENABLED:
- g_value_set_boolean(value, priv->page->inspectorController()->timelineAgent() != 0);
+ g_value_set_boolean(value, priv->page->inspectorController()->timelineProfilerEnabled());
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
diff --git a/Source/WebKit/gtk/webkit/webkitwebview.cpp b/Source/WebKit/gtk/webkit/webkitwebview.cpp
index c855507..d2b0ae0 100644
--- a/Source/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/Source/WebKit/gtk/webkit/webkitwebview.cpp
@@ -402,7 +402,7 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
// If there's a focused elment, use its location.
if (Node* focusedNode = getFocusedNode(frame)) {
IntRect focusedNodeRect = focusedNode->getRect();
- location = IntPoint(rightAligned ? focusedNodeRect.right() : focusedNodeRect.x(), focusedNodeRect.bottom());
+ location = IntPoint(rightAligned ? focusedNodeRect.maxX() : focusedNodeRect.x(), focusedNodeRect.maxY());
} else
location = IntPoint(rightAligned ? view->contentsWidth() - contextMenuMargin : contextMenuMargin, contextMenuMargin);
} else {
@@ -440,7 +440,7 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
startCaretRect.width() + extraWidthToEndOfLine,
startCaretRect.height());
- location = IntPoint(rightAligned ? firstRect.right() : firstRect.x(), firstRect.bottom());
+ location = IntPoint(rightAligned ? firstRect.maxX() : firstRect.x(), firstRect.maxY());
}
// FIXME: The IntSize(0, -1) is a hack to get the hit-testing to result in the selected element.
@@ -4671,7 +4671,7 @@ gdouble webkit_web_view_get_progress(WebKitWebView* webView)
const gchar* webkit_web_view_get_encoding(WebKitWebView* webView)
{
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
- String encoding = core(webView)->mainFrame()->loader()->writer()->encoding();
+ String encoding = core(webView)->mainFrame()->document()->loader()->writer()->encoding();
if (encoding.isEmpty())
return 0;
webView->priv->encoding = encoding.utf8();
@@ -5051,7 +5051,7 @@ WebKitHitTestResult* webkit_web_view_get_hit_test_result(WebKitWebView* webView,
G_CONST_RETURN gchar* webkit_web_view_get_icon_uri(WebKitWebView* webView)
{
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
- String iconURL = iconDatabase()->iconURLForPageURL(core(webView)->mainFrame()->loader()->url().prettyURL());
+ String iconURL = iconDatabase()->iconURLForPageURL(core(webView)->mainFrame()->document()->url().prettyURL());
webView->priv->iconURI = iconURL.utf8();
return webView->priv->iconURI.data();
}
diff --git a/Source/WebKit/haiku/ChangeLog b/Source/WebKit/haiku/ChangeLog
index 4315bb5..669aae4 100644
--- a/Source/WebKit/haiku/ChangeLog
+++ b/Source/WebKit/haiku/ChangeLog
@@ -1,3 +1,56 @@
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/ChromeClientHaiku.cpp:
+ * WebCoreSupport/ChromeClientHaiku.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/DragClientHaiku.cpp:
+ * WebCoreSupport/DragClientHaiku.h:
+
+2011-02-07 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Haiku] FrameLoaderClient calls loadURLInChildFrame on the child's frame loader
+ https://bugs.webkit.org/show_bug.cgi?id=53893
+
+ * WebCoreSupport/FrameLoaderClientHaiku.cpp:
+ (WebCore::FrameLoaderClientHaiku::createFrame): Use m_frame instead of childFrame.
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/ChromeClientHaiku.cpp:
+ (WebCore::ChromeClientHaiku::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/ChromeClientHaiku.h:
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * WebCoreSupport/FrameLoaderClientHaiku.cpp:
+ (WebCore::FrameLoaderClientHaiku::dispatchDidFinishDocumentLoad):
+
2010-12-22 Sam Weinig <sam@webkit.org>
Reviewed by Darin Adler.
diff --git a/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp b/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp
index 01b9c1d..6ed11ea 100644
--- a/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp
+++ b/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp
@@ -388,13 +388,12 @@ void ChromeClientHaiku::formStateDidChange(const Node*)
notImplemented();
}
-PassOwnPtr<HTMLParserQuirks> ChromeClientHaiku::createHTMLParserQuirks()
+bool ChromeClientHaiku::selectItemWritingDirectionIsNatural()
{
- notImplemented();
- return 0;
+ return false;
}
-bool ChromeClientHaiku::selectItemWritingDirectionIsNatural()
+bool ChromeClientHaiku::selectItemAlignmentFollowsMenuWritingDirection()
{
return false;
}
diff --git a/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h b/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h
index deb3678..3298c37 100644
--- a/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h
+++ b/Source/WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h
@@ -133,6 +133,7 @@ namespace WebCore {
#endif
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
@@ -157,8 +158,6 @@ namespace WebCore {
// Notification that the given form element has changed. This function
// will be called frequently, so handling should be very fast.
virtual void formStateDidChange(const Node*);
-
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks();
};
} // namespace WebCore
diff --git a/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.cpp b/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.cpp
index 8964c69..4a8f9f4 100644
--- a/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.cpp
+++ b/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.cpp
@@ -64,11 +64,5 @@ void DragClientHaiku::startDrag(DragImageRef dragImage, const IntPoint&, const I
notImplemented();
}
-DragImageRef DragClientHaiku::createDragImageForLink(KURL&, const String&, Frame*)
-{
- notImplemented();
- return 0;
-}
-
} // namespace WebCore
diff --git a/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.h b/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.h
index b184322..40860e3 100644
--- a/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.h
+++ b/Source/WebKit/haiku/WebCoreSupport/DragClientHaiku.h
@@ -39,7 +39,6 @@ namespace WebCore {
virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*);
virtual void startDrag(DragImageRef dragImage, const IntPoint& dragImageOrigin,
const IntPoint& eventPos, Clipboard*, Frame*, bool linkDrag = false);
- virtual DragImageRef createDragImageForLink(KURL&, const String& label, Frame*);
};
} // namespace WebCore
diff --git a/Source/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp b/Source/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp
index 48c65a1..46ac489 100644
--- a/Source/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp
+++ b/Source/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp
@@ -261,7 +261,7 @@ void FrameLoaderClientHaiku::dispatchDidFinishDocumentLoad()
{
if (m_webView) {
BMessage message(LOAD_DOC_COMPLETED);
- message.AddString("url", m_frame->loader()->url().string());
+ message.AddString("url", m_frame->document()->url().string());
m_messenger->SendMessage(&message);
}
}
@@ -323,7 +323,7 @@ void FrameLoaderClientHaiku::postProgressFinishedNotification()
{
if (m_webView) {
BMessage message(LOAD_DL_COMPLETED);
- message.AddString("url", m_frame->loader()->url().string());
+ message.AddString("url", m_frame->document()->url().string());
m_messenger->SendMessage(&message);
}
}
@@ -729,7 +729,7 @@ PassRefPtr<Frame> FrameLoaderClientHaiku::createFrame(const KURL& url, const Str
childFrame->tree()->setName(name);
m_frame->tree()->appendChild(childFrame);
- childFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
+ m_frame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
// The frame's onload handler may have removed it from the document.
if (!childFrame->tree()->parent())
diff --git a/Source/WebKit/mac/ChangeLog b/Source/WebKit/mac/ChangeLog
index 121250d..4a3c74f 100644
--- a/Source/WebKit/mac/ChangeLog
+++ b/Source/WebKit/mac/ChangeLog
@@ -1,3 +1,467 @@
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A little more encapsulation for the heap: Removed CollectorHeapIterator
+ https://bugs.webkit.org/show_bug.cgi?id=54298
+
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
+ (+[WebCoreStatistics javaScriptObjectTypeCounts]): Updated for new typedef.
+
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _canProvideDocumentSource]):
+
+2011-02-10 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ AX: AX needs to stop using WebCoreViewFactory
+ https://bugs.webkit.org/show_bug.cgi?id=54153
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-10 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Remove PCRE source from trunk
+ https://bugs.webkit.org/show_bug.cgi?id=54188
+
+ * ForwardingHeaders/pcre/pcre.h: Removed.
+
+2011-02-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: follow up on InspectorAgent split -
+ removing unnecessary methods from InspectorController.
+ https://bugs.webkit.org/show_bug.cgi?id=54093
+
+ * WebInspector/WebInspector.mm:
+ (-[WebInspector showConsole:]):
+ (-[WebInspector stopProfilingJavaScript:]):
+
+2011-02-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Jon Honeycutt and Maciej Stachowiak.
+
+ <rdar://problem/8959420> Find in Mail no longer cycles around
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Set
+ the wrap option according to the flag.
+
+2011-02-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77980.
+ http://trac.webkit.org/changeset/77980
+ https://bugs.webkit.org/show_bug.cgi?id=54043
+
+ "Crashes on Windows and Linux..." (Requested by leviw on
+ #webkit).
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _caretRectAtNode:offset:affinity:]):
+ * WebView/WebFrameInternal.h:
+ * WebView/WebTextCompletionController.mm:
+ (-[WebTextCompletionController doCompletion]):
+
+2011-02-08 Levi Weintraub <leviw@chromium.org>
+
+ Reviewed by Ryosuke Niwa.
+
+ Stop instantiating legacy editing Positions in VisiblePosition
+ https://bugs.webkit.org/show_bug.cgi?id=52919
+
+ Changing usage of legacy VisiblePosition constructor. Since we were dealing
+ with positions from DOM Ranges, we're guaranteed a parent-anchored position.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _caretRectAtPosition:affinity:]):
+ * WebView/WebFrameInternal.h:
+ * WebView/WebTextCompletionController.mm:
+ (-[WebTextCompletionController doCompletion]):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/WebChromeClient.h:
+
+2011-02-02 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53169
+
+ Minor change enforced by major changes in WebCore/inspector/InspectorController.
+
+ * WebInspector/WebInspector.mm:
+ (-[WebInspector isTimelineProfilingEnabled]):
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/WebDragClient.h:
+ * WebCoreSupport/WebDragClient.mm:
+ (WebDragClient::startDrag):
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCoreSupport/WebInspectorClient.h:
+ * WebCoreSupport/WebInspectorClient.mm:
+ (WebInspectorClient::openInspectorFrontend):
+ (WebInspectorFrontendClient::WebInspectorFrontendClient):
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/WebFrameLoaderClient.h:
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::didRunInsecureContent):
+
+2011-02-03 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8944544> Ability to animate track
+ for WKPainter scrollers
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-02 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ <rdar://problem/8928367> Crash when loading canvas pages inside HTMLCanvasElement::createImageBuffer().
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface): Add some missing initializers.
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Part 2 for <rdar://problem/8492788>
+ Adopt WKScrollbarPainterController
+
+ Use header detection to define scrollbar painting controller #define.
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-01 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+
+ Remove the physical terminology from IntRect and FloatRect.
+
+ Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
+ we need to update our terminology to be more accurate.
+
+ I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
+ renaming right() and bottom() to maxX() and maxY(). These terms remain accurate
+ even for flipped rectangles.
+
+ * WebView/WebHTMLView.mm:
+ (setNeedsDisplayInRect):
+
+2011-02-01 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-01 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
+ with vertical text.
+
+ Change printing functions to check writing-mode and properly swap width and height
+ as needed.
+
+ * WebView/WebDynamicScrollBarsView.mm:
+ (-[WebDynamicScrollBarsView setScrollOrigin:updatePositionAtAll:immediately:]):
+ * WebView/WebFrame.mm:
+ (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]):
+ * WebView/WebFrameInternal.h:
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _web_setPrintingModeRecursive]):
+ (-[WebHTMLView _web_clearPrintingModeRecursive]):
+ (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
+ (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]):
+ (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
+ (-[WebHTMLView _endPrintMode]):
+ (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
+ (-[WebHTMLView _endScreenPaginationMode]):
+ (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):
+ (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:maximumPageLogicalWidth:adjustViewSize:paginateScreenContent:]):
+ (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
+ (-[WebHTMLView _scaleFactorForPrintOperation:]):
+ (-[WebHTMLView setPageWidthForPrinting:]):
+ (-[WebHTMLView knowsPageRange:]):
+
+2011-01-31 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77098, r77099, r77100, r77109, and
+ r77111 back in, along with a few more Qt fix attempts.
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]):
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed, rolling out r77098, r77099, r77100, r77109, and
+ r77111.
+ http://trac.webkit.org/changeset/77098
+ http://trac.webkit.org/changeset/77099
+ http://trac.webkit.org/changeset/77100
+ http://trac.webkit.org/changeset/77109
+ http://trac.webkit.org/changeset/77111
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Qt build is broken
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]):
+
+2011-01-30 Oliver Hunt <oliver@apple.com>
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ rolling r77006 and r77020 back in.
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]):
+
+2011-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Some more Heap cleanup.
+ https://bugs.webkit.org/show_bug.cgi?id=53357
+
+ Updated for JavaScriptCore changes.
+
+ * Misc/WebCoreStatistics.mm:
+ (+[WebCoreStatistics memoryStatistics]):
+
+2011-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77006 and r77020.
+ http://trac.webkit.org/changeset/77006
+ http://trac.webkit.org/changeset/77020
+ https://bugs.webkit.org/show_bug.cgi?id=53360
+
+ "Broke Windows tests" (Requested by rniwa on #webkit).
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]):
+
+2011-01-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Convert markstack to a slot visitor API
+ https://bugs.webkit.org/show_bug.cgi?id=53219
+
+ Update to new marking api
+
+ * WebView/WebScriptDebugDelegate.mm:
+ (-[WebScriptCallFrame scopeChain]):
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::selectItemWritingDirectionIsNatural): Changed to return false.
+ (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added. Returns true.
+
+2011-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76891.
+ http://trac.webkit.org/changeset/76891
+ https://bugs.webkit.org/show_bug.cgi?id=53280
+
+ Makes every layout test crash (Requested by othermaciej on
+ #webkit).
+
+ * Misc/WebIconDatabase.mm:
+ (-[ThreadEnabler threadEnablingSelector:]):
+ (importToWebCoreFormat):
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * WebView/WebView.mm:
+ (-[WebView _dispatchDidReceiveIconFromWebFrame:]):
+
+2011-01-27 Dan Bernstein <mitz@apple.com>
+
+ Rubber-stamped by Anders Carlsson.
+
+ Reverted an accidental change in r76561.
+
+ * WebView/WebHTMLView.mm:
+
+2011-01-26 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
+ <rdar://problem/8821760>
+
+ Reviewed by Antti Koivisto.
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface): Added initialization for
+ GetHTTPPipeliningPriority and SetHTTPPipeliningPriority.
+
+2011-01-26 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics
+ when using WKScrollbars.
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-01-25 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ WebKit is using CSBackupSetItemExcluded incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=53095
+ rdar://problem/8790540
+
+ * Misc/WebIconDatabase.mm:
+ (importToWebCoreFormat): Removed code that was calling CSBackupSetItemExcluded.
+ It was incorrect, and this responsibility has been moved to WebCore.
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-01-25 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove "attached" state related methods from InspectorAgent
+ https://bugs.webkit.org/show_bug.cgi?id=53086
+
+ * WebCoreSupport/WebInspectorClient.h:
+ * WebCoreSupport/WebInspectorClient.mm:
+ (-[WebInspectorWindowController showWindow:]):
+ (-[WebInspectorWindowController attach]):
+ (-[WebInspectorWindowController detach]):
+
+2011-01-23 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ <rdar://problem/6097826> Mail's cursor does not become a resize cursor when moving mouse from scrolled email to the horizontal splitter
+
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::setCursor): If the current cursor comes from a cursor rect, do not override it.
+
+2011-01-22 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52473
+ Auto-scaling to avoid orphans is broken, remove dysfunctional code
+
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
+ (-[WebHTMLView _scaleFactorForPrintOperation:]):
+ (-[WebHTMLView knowsPageRange:]):
+
+2011-01-21 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Jon Honeycutt.
+
+ Fix the build when using Clang by removing some unused variables.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView updateAndSetWindow]):
+ * WebView/WebFullScreenController.mm:
+ (-[WebFullScreenController enterFullscreen:]):
+ (-[WebFullScreenController exitFullscreen]):
+
2011-01-21 Chris Rogers <crogers@google.com>
Reviewed by Darin Fisher.
diff --git a/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig b/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig
index 46d5de4..3971037 100644
--- a/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig
+++ b/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig
@@ -38,10 +38,10 @@ ENABLE_ACCELERATED_2D_CANVAS_macosx = $(ENABLE_ACCELERATED_2D_CANVAS_macosx_$(TA
ENABLE_ACCELERATED_2D_CANVAS_macosx_1060 = ;
ENABLE_ACCELERATED_2D_CANVAS_macosx_1070 = ;
-ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(REAL_PLATFORM_NAME));
-ENABLE_3D_CANVAS_macosx = $(ENABLE_3D_CANVAS_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
-ENABLE_3D_CANVAS_macosx_1060 = ENABLE_3D_CANVAS;
-ENABLE_3D_CANVAS_macosx_1070 = ENABLE_3D_CANVAS;
+ENABLE_WEBGL = $(ENABLE_WEBGL_$(REAL_PLATFORM_NAME));
+ENABLE_WEBGL_macosx = $(ENABLE_WEBGL_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+ENABLE_WEBGL_macosx_1060 = ENABLE_WEBGL;
+ENABLE_WEBGL_macosx_1070 = ENABLE_WEBGL;
ENABLE_3D_RENDERING = $(ENABLE_3D_RENDERING_$(REAL_PLATFORM_NAME));
ENABLE_3D_RENDERING_iphoneos = ENABLE_3D_RENDERING;
@@ -91,6 +91,8 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
+ENABLE_REGISTER_PROTOCOL_HANDLER = ;
+
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -106,6 +108,8 @@ ENABLE_SVG_FOREIGN_OBJECT = ENABLE_SVG_FOREIGN_OBJECT;
ENABLE_SVG_USE = ENABLE_SVG_USE;
ENABLE_VIDEO = ENABLE_VIDEO;
+ENABLE_MEDIA_STATISTICS = ;
+
ENABLE_WEB_AUDIO = ;
ENABLE_WEB_SOCKETS = $(ENABLE_WEB_SOCKETS_$(REAL_PLATFORM_NAME));
@@ -121,4 +125,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/Source/WebKit/mac/Configurations/Version.xcconfig b/Source/WebKit/mac/Configurations/Version.xcconfig
index f0d3c1f..e74bd18 100644
--- a/Source/WebKit/mac/Configurations/Version.xcconfig
+++ b/Source/WebKit/mac/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 16;
+MINOR_VERSION = 20;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/Source/WebKit/mac/ForwardingHeaders/pcre/pcre.h b/Source/WebKit/mac/ForwardingHeaders/pcre/pcre.h
deleted file mode 100644
index 47c0d3d..0000000
--- a/Source/WebKit/mac/ForwardingHeaders/pcre/pcre.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <JavaScriptCore/pcre.h>
diff --git a/Source/WebKit/mac/Misc/WebCoreStatistics.mm b/Source/WebKit/mac/Misc/WebCoreStatistics.mm
index 5d96c95..c3c3687 100644
--- a/Source/WebKit/mac/Misc/WebCoreStatistics.mm
+++ b/Source/WebKit/mac/Misc/WebCoreStatistics.mm
@@ -86,7 +86,7 @@ using namespace WebCore;
NSCountedSet *result = [NSCountedSet set];
- OwnPtr<HashCountedSet<const char*> > counts(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts());
+ OwnPtr<TypeCountSet> counts(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts());
HashCountedSet<const char*>::iterator end = counts->end();
for (HashCountedSet<const char*>::iterator it = counts->begin(); it != end; ++it)
for (unsigned i = 0; i < it->second; ++i)
@@ -101,7 +101,7 @@ using namespace WebCore;
NSCountedSet *result = [NSCountedSet set];
- OwnPtr<HashCountedSet<const char*> > counts(JSDOMWindow::commonJSGlobalData()->heap.objectTypeCounts());
+ OwnPtr<TypeCountSet> counts(JSDOMWindow::commonJSGlobalData()->heap.objectTypeCounts());
HashCountedSet<const char*>::iterator end = counts->end();
for (HashCountedSet<const char*>::iterator it = counts->begin(); it != end; ++it)
for (unsigned i = 0; i < it->second; ++i)
@@ -197,15 +197,16 @@ using namespace WebCore;
WTF::FastMallocStatistics fastMallocStatistics = WTF::fastMallocStatistics();
JSLock lock(SilenceAssertionsOnly);
- MarkedSpace::Statistics heapMemoryStats = heapStatistics(JSDOMWindow::commonJSGlobalData());
+ size_t heapSize = JSDOMWindow::commonJSGlobalData()->heap.size();
+ size_t heapFree = JSDOMWindow::commonJSGlobalData()->heap.capacity() - heapSize;
GlobalMemoryStatistics globalMemoryStats = globalMemoryStatistics();
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:fastMallocStatistics.reservedVMBytes], @"FastMallocReservedVMBytes",
[NSNumber numberWithInt:fastMallocStatistics.committedVMBytes], @"FastMallocCommittedVMBytes",
[NSNumber numberWithInt:fastMallocStatistics.freeListBytes], @"FastMallocFreeListBytes",
- [NSNumber numberWithInt:heapMemoryStats.size], @"JavaScriptHeapSize",
- [NSNumber numberWithInt:heapMemoryStats.free], @"JavaScriptFreeSize",
+ [NSNumber numberWithInt:heapSize], @"JavaScriptHeapSize",
+ [NSNumber numberWithInt:heapFree], @"JavaScriptFreeSize",
[NSNumber numberWithUnsignedInt:(unsigned int)globalMemoryStats.stackBytes], @"JavaScriptStackSize",
[NSNumber numberWithUnsignedInt:(unsigned int)globalMemoryStats.JITBytes], @"JavaScriptJITSize",
nil];
diff --git a/Source/WebKit/mac/Misc/WebIconDatabase.mm b/Source/WebKit/mac/Misc/WebIconDatabase.mm
index 7d0a350..14ef037 100644
--- a/Source/WebKit/mac/Misc/WebIconDatabase.mm
+++ b/Source/WebKit/mac/Misc/WebIconDatabase.mm
@@ -590,24 +590,6 @@ bool importToWebCoreFormat()
[ThreadEnabler enableThreading];
ASSERT([NSThread isMultiThreaded]);
-#ifndef BUILDING_ON_TIGER
- // Tell backup software (i.e., Time Machine) to never back up the icon database, because
- // it's a large file that changes frequently, thus using a lot of backup disk space, and
- // it's unlikely that many users would be upset about it not being backed up. We do this
- // here because this code is only executed once for each icon database instance. We could
- // make this configurable on a per-client basis someday if that seemed useful.
- // See <rdar://problem/5320208>.
- // FIXME: This has nothing to do with importing from the old to the new database format and should be moved elsewhere,
- // especially because we might eventually delete all of this legacy importing code and we shouldn't delete this.
- CFStringRef databasePath = iconDatabase()->databasePath().createCFString();
- if (databasePath) {
- CFURLRef databasePathURL = CFURLCreateWithFileSystemPath(0, databasePath, kCFURLPOSIXPathStyle, FALSE);
- CFRelease(databasePath);
- CSBackupSetItemExcluded(databasePathURL, true, true);
- CFRelease(databasePathURL);
- }
-#endif
-
// Get the directory the old icon database *should* be in
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *databaseDirectory = [defaults objectForKey:WebIconDatabaseImportDirectoryDefaultsKey];
diff --git a/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm b/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
index c3ee98b..d3cce46 100644
--- a/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
+++ b/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
@@ -209,7 +209,6 @@ extern "C" {
_proxy->resize(boundsInWindow, visibleRectInWindow);
- CGRect layerBounds = NSRectToCGRect(boundsInWindow);
CGRect bounds = NSRectToCGRect([self bounds]);
CGRect frame = NSRectToCGRect([self frame]);
diff --git a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h
index 05db524..dda0bb1 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h
+++ b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h
@@ -152,8 +152,6 @@ public:
virtual void formDidFocus(const WebCore::Node*);
virtual void formDidBlur(const WebCore::Node*);
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
#if USE(ACCELERATED_COMPOSITING)
virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
virtual void setNeedsOneShotDrawingSynchronization();
@@ -179,6 +177,7 @@ public:
virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*) { }
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
diff --git a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm
index 74c513d..0e7e2f2 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm
+++ b/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm
@@ -80,6 +80,10 @@
#import "NetscapePluginHostManager.h"
#endif
+@interface NSApplication (WebNSApplicationDetails)
+- (NSCursor *)_cursorRectCursor;
+@end
+
@interface NSView (WebNSViewDetails)
- (NSView *)_findLastViewInKeyViewLoop;
@end
@@ -678,6 +682,9 @@ void WebChromeClient::chooseIconForFiles(const Vector<String>& filenames, FileCh
void WebChromeClient::setCursor(const WebCore::Cursor& cursor)
{
+ if ([NSApp _cursorRectCursor])
+ return;
+
NSCursor *platformCursor = cursor.platformCursor();
if ([NSCursor currentCursor] == platformCursor)
return;
@@ -742,7 +749,20 @@ void WebChromeClient::formDidBlur(const WebCore::Node* node)
bool WebChromeClient::selectItemWritingDirectionIsNatural()
{
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
+ return false;
+#else
+ return true;
+#endif
+}
+
+bool WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection()
+{
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
return true;
+#else
+ return false;
+#endif
}
PassRefPtr<WebCore::PopupMenu> WebChromeClient::createPopupMenu(WebCore::PopupMenuClient* client) const
diff --git a/Source/WebKit/mac/WebCoreSupport/WebDragClient.h b/Source/WebKit/mac/WebCoreSupport/WebDragClient.h
index 216a2fb..34a5c2e 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebDragClient.h
+++ b/Source/WebKit/mac/WebCoreSupport/WebDragClient.h
@@ -36,7 +36,6 @@ public:
virtual void dragControllerDestroyed();
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint);
virtual void startDrag(WebCore::DragImageRef dragImage, const WebCore::IntPoint& dragPos, const WebCore::IntPoint& eventPos, WebCore::Clipboard*, WebCore::Frame*, bool linkDrag);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL& url, const WTF::String& label, WebCore::Frame*);
virtual void declareAndWriteDragImage(NSPasteboard*, DOMElement*, NSURL*, NSString*, WebCore::Frame*);
private:
WebView* m_webView;
diff --git a/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm b/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm
index b3af658..5a7d597 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm
+++ b/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm
@@ -51,18 +51,6 @@
using namespace WebCore;
-const float DragLabelBorderX = 4;
-//Keep border_y in synch with DragController::LinkDragBorderInset
-const float DragLabelBorderY = 2;
-const float DragLabelRadius = 5;
-const float LabelBorderYOffset = 2;
-
-const float MinDragLabelWidthBeforeClip = 120;
-const float MaxDragLabelWidth = 320;
-
-const float DragLinkLabelFontsize = 11;
-const float DragLinkUrlFontSize = 10;
-
WebDragClient::WebDragClient(WebView* webView)
: m_webView(webView)
{
@@ -132,87 +120,6 @@ void WebDragClient::startDrag(DragImageRef dragImage, const IntPoint& at, const
[topHTMLView dragImage:dragNSImage at:at offset:NSZeroSize event:event pasteboard:pasteboard source:sourceHTMLView slideBack:YES];
}
-DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& title, Frame* frame)
-{
- if (!frame)
- return nil;
- NSString *label = 0;
- if (!title.isEmpty())
- label = title;
- NSURL *cocoaURL = url;
- NSString *urlString = [cocoaURL _web_userVisibleString];
-
- BOOL drawURLString = YES;
- BOOL clipURLString = NO;
- BOOL clipLabelString = NO;
-
- if (!label) {
- drawURLString = NO;
- label = urlString;
- }
-
- NSFont *labelFont = [[NSFontManager sharedFontManager] convertFont:[NSFont systemFontOfSize:DragLinkLabelFontsize]
- toHaveTrait:NSBoldFontMask];
- NSFont *urlFont = [NSFont systemFontOfSize:DragLinkUrlFontSize];
- NSSize labelSize;
- labelSize.width = [label _web_widthWithFont: labelFont];
- labelSize.height = [labelFont ascender] - [labelFont descender];
- if (labelSize.width > MaxDragLabelWidth){
- labelSize.width = MaxDragLabelWidth;
- clipLabelString = YES;
- }
-
- NSSize imageSize;
- imageSize.width = labelSize.width + DragLabelBorderX * 2;
- imageSize.height = labelSize.height + DragLabelBorderY * 2;
- if (drawURLString) {
- NSSize urlStringSize;
- urlStringSize.width = [urlString _web_widthWithFont: urlFont];
- urlStringSize.height = [urlFont ascender] - [urlFont descender];
- imageSize.height += urlStringSize.height;
- if (urlStringSize.width > MaxDragLabelWidth) {
- imageSize.width = max(MaxDragLabelWidth + DragLabelBorderY * 2, MinDragLabelWidthBeforeClip);
- clipURLString = YES;
- } else
- imageSize.width = max(labelSize.width + DragLabelBorderX * 2, urlStringSize.width + DragLabelBorderX * 2);
- }
- NSImage *dragImage = [[[NSImage alloc] initWithSize: imageSize] autorelease];
- [dragImage lockFocus];
-
- [[NSColor colorWithDeviceRed: 0.7f green: 0.7f blue: 0.7f alpha: 0.8f] set];
-
- // Drag a rectangle with rounded corners
- NSBezierPath *path = [NSBezierPath bezierPath];
- [path appendBezierPathWithOvalInRect: NSMakeRect(0, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(0, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
-
- [path appendBezierPathWithRect: NSMakeRect(DragLabelRadius, 0, imageSize.width - DragLabelRadius * 2, imageSize.height)];
- [path appendBezierPathWithRect: NSMakeRect(0, DragLabelRadius, DragLabelRadius + 10, imageSize.height - 2 * DragLabelRadius)];
- [path appendBezierPathWithRect: NSMakeRect(imageSize.width - DragLabelRadius - 20, DragLabelRadius, DragLabelRadius + 20, imageSize.height - 2 * DragLabelRadius)];
- [path fill];
-
- NSColor *topColor = [NSColor colorWithDeviceWhite:0.0f alpha:0.75f];
- NSColor *bottomColor = [NSColor colorWithDeviceWhite:1.0f alpha:0.5f];
- if (drawURLString) {
- if (clipURLString)
- urlString = [WebStringTruncator centerTruncateString: urlString toWidth:imageSize.width - (DragLabelBorderX * 2) withFont:urlFont];
-
- [urlString _web_drawDoubledAtPoint:NSMakePoint(DragLabelBorderX, DragLabelBorderY - [urlFont descender])
- withTopColor:topColor bottomColor:bottomColor font:urlFont];
- }
-
- if (clipLabelString)
- label = [WebStringTruncator rightTruncateString: label toWidth:imageSize.width - (DragLabelBorderX * 2) withFont:labelFont];
- [label _web_drawDoubledAtPoint:NSMakePoint (DragLabelBorderX, imageSize.height - LabelBorderYOffset - [labelFont pointSize])
- withTopColor:topColor bottomColor:bottomColor font:labelFont];
-
- [dragImage unlockFocus];
-
- return dragImage;
-}
-
void WebDragClient::declareAndWriteDragImage(NSPasteboard* pasteboard, DOMElement* element, NSURL* URL, NSString* title, WebCore::Frame* frame)
{
ASSERT(pasteboard);
diff --git a/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h b/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
index 9de4246..f29ba72 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
+++ b/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
@@ -156,7 +156,7 @@ private:
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
diff --git a/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm b/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
index f3cdff6..6484584 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
+++ b/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
@@ -957,7 +957,7 @@ void WebFrameLoaderClient::didDisplayInsecureContent()
CallFrameLoadDelegate(implementations->didDisplayInsecureContentFunc, webView, @selector(webViewDidDisplayInsecureContent:));
}
-void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin* origin)
+void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin* origin, const KURL& insecureURL)
{
RetainPtr<WebSecurityOrigin> webSecurityOrigin(AdoptNS, [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin]);
diff --git a/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h b/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h
index 75a3cc6..108c2cc 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h
+++ b/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h
@@ -30,6 +30,7 @@
#import <WebCore/InspectorFrontendClientLocal.h>
#import <WebCore/PlatformString.h>
+#import <wtf/Forward.h>
#import <wtf/RetainPtr.h>
#ifdef __OBJC__
@@ -59,14 +60,16 @@ public:
virtual void highlight(WebCore::Node*);
virtual void hideHighlight();
- virtual void populateSetting(const WTF::String& key, WTF::String* value);
- virtual void storeSetting(const WTF::String& key, const WTF::String& value);
-
virtual bool sendMessageToFrontend(const WTF::String&);
+ bool inspectorStartsAttached();
+ void setInspectorStartsAttached(bool);
+
void releaseFrontendPage();
private:
+ WTF::PassOwnPtr<WebCore::InspectorFrontendClientLocal::Settings> createFrontendSettings();
+
WebView *m_webView;
RetainPtr<WebNodeHighlighter> m_highlighter;
WebCore::Page* m_frontendPage;
@@ -75,7 +78,7 @@ private:
class WebInspectorFrontendClient : public WebCore::InspectorFrontendClientLocal {
public:
- WebInspectorFrontendClient(WebView*, WebInspectorWindowController*, WebCore::InspectorController*, WebCore::Page*);
+ WebInspectorFrontendClient(WebView*, WebInspectorWindowController*, WebCore::InspectorController*, WebCore::Page*, WTF::PassOwnPtr<Settings>);
virtual void frontendLoaded();
diff --git a/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm b/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm
index 5beedcf..d47784f 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm
+++ b/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm
@@ -102,7 +102,7 @@ void WebInspectorClient::openInspectorFrontend(InspectorController* inspectorCon
[windowController.get() setInspectorClient:this];
m_frontendPage = core([windowController.get() webView]);
- WebInspectorFrontendClient* frontendClient = new WebInspectorFrontendClient(m_webView, windowController.get(), inspectorController, m_frontendPage);
+ WebInspectorFrontendClient* frontendClient = new WebInspectorFrontendClient(m_webView, windowController.get(), inspectorController, m_frontendPage, createFrontendSettings());
m_frontendPage->inspectorController()->setInspectorFrontendClient(frontendClient);
[[m_webView inspector] setFrontend:[[WebInspectorFrontend alloc] initWithFrontendClient:frontendClient]];
@@ -118,8 +118,8 @@ void WebInspectorClient::hideHighlight()
[m_highlighter.get() hideHighlight];
}
-WebInspectorFrontendClient::WebInspectorFrontendClient(WebView* inspectedWebView, WebInspectorWindowController* windowController, InspectorController* inspectorController, Page* frontendPage)
- : InspectorFrontendClientLocal(inspectorController, frontendPage)
+WebInspectorFrontendClient::WebInspectorFrontendClient(WebView* inspectedWebView, WebInspectorWindowController* windowController, InspectorController* inspectorController, Page* frontendPage, WTF::PassOwnPtr<Settings> settings)
+ : InspectorFrontendClientLocal(inspectorController, frontendPage, settings)
, m_inspectedWebView(inspectedWebView)
, m_windowController(windowController)
{
@@ -355,9 +355,7 @@ void WebInspectorFrontendClient::updateWindowTitle() const
_visible = YES;
- // If no preference is set - default to an attached window. This is important for inspector LayoutTests.
- // FIXME: This flag can be fetched directly from the flags storage.
- _shouldAttach = [_inspectedWebView page]->inspectorController()->inspectorStartsAttached();
+ _shouldAttach = _inspectorClient->inspectorStartsAttached();
if (_shouldAttach && !_frontendClient->canAttachWindow())
_shouldAttach = NO;
@@ -392,8 +390,7 @@ void WebInspectorFrontendClient::updateWindowTitle() const
if (_attachedToInspectedWebView)
return;
- // FIXME: This flag can be saved directly to the flags storage.
- [_inspectedWebView page]->inspectorController()->setInspectorStartsAttached(true);
+ _inspectorClient->setInspectorStartsAttached(true);
[self close];
[self showWindow:nil];
@@ -404,8 +401,7 @@ void WebInspectorFrontendClient::updateWindowTitle() const
if (!_attachedToInspectedWebView)
return;
- // FIXME: This flag can be saved to the flags storage directly.
- [_inspectedWebView page]->inspectorController()->setInspectorStartsAttached(false);
+ _inspectorClient->setInspectorStartsAttached(false);
[self close];
[self showWindow:nil];
diff --git a/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm b/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
index 70767ee..c39576b 100644
--- a/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
+++ b/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
@@ -60,6 +60,7 @@ void InitWebCoreSystemInterface(void)
INIT(GetFontInLanguageForCharacter);
INIT(GetFontInLanguageForRange);
INIT(GetGlyphTransformedAdvances);
+ INIT(GetHTTPPipeliningPriority);
INIT(GetMIMETypeForExtension);
INIT(GetNSURLResponseLastModifiedDate);
INIT(GetPreferredExtensionForMIMEType);
@@ -75,6 +76,7 @@ void InitWebCoreSystemInterface(void)
INIT(SetCONNECTProxyForStream);
INIT(SetCookieStoragePrivateBrowsingEnabled);
INIT(SetDragImage);
+ INIT(SetHTTPPipeliningPriority);
INIT(SetNSURLConnectionDefersCallbacks);
INIT(SetNSURLRequestShouldContentSniff);
INIT(SetPatternBaseCTM);
@@ -120,12 +122,50 @@ void InitWebCoreSystemInterface(void)
INIT(CreateCTLineWithUniCharProvider);
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
- INIT(CreateCTTypesetterWithUniCharProviderAndOptions);
INIT(IOSurfaceContextCreate);
INIT(IOSurfaceContextCreateImage);
+ INIT(CreateCTTypesetterWithUniCharProviderAndOptions);
INIT(MakeScrollbarPainter);
+ INIT(ScrollbarPainterSetDelegate);
INIT(ScrollbarPainterPaint);
+ INIT(ScrollbarThickness);
+ INIT(ScrollbarMinimumThumbLength);
+ INIT(ScrollbarMinimumTotalLengthNeededForThumb);
+ INIT(ScrollbarPainterKnobAlpha);
+ INIT(SetScrollbarPainterKnobAlpha);
+ INIT(ScrollbarPainterTrackAlpha);
+ INIT(SetScrollbarPainterTrackAlpha);
+ INIT(ScrollbarPainterIsHorizontal);
+ INIT(ScrollbarPainterSetOverlayState);
+ INIT(MakeScrollbarPainterController);
+ INIT(MakeScrollbarReplacementPainter);
+ INIT(SetPainterForPainterController);
+ INIT(VerticalScrollbarPainterForController);
+ INIT(HorizontalScrollbarPainterForController);
+ INIT(SetScrollbarPainterControllerStyle);
+ INIT(ContentAreaScrolled);
+ INIT(ContentAreaWillPaint);
+ INIT(MouseEnteredContentArea);
+ INIT(MouseExitedContentArea);
+ INIT(MouseMovedInContentArea);
+ INIT(WillStartLiveResize);
+ INIT(ContentAreaResized);
+ INIT(WillEndLiveResize);
+ INIT(ContentAreaDidShow);
+ INIT(ContentAreaDidHide);
+ INIT(ScrollbarPainterUsesOverlayScrollers);
#endif
+ INIT(GetAXTextMarkerTypeID);
+ INIT(GetAXTextMarkerRangeTypeID);
+ INIT(CreateAXTextMarker);
+ INIT(GetBytesFromAXTextMarker);
+ INIT(CreateAXTextMarkerRange);
+ INIT(CopyAXTextMarkerRangeStart);
+ INIT(CopyAXTextMarkerRangeEnd);
+ INIT(AccessibilityHandleFocusChanged);
+ INIT(CreateAXUIElementRef);
+ INIT(UnregisterUniqueIdForElement);
+
didInit = true;
}
diff --git a/Source/WebKit/mac/WebInspector/WebInspector.mm b/Source/WebKit/mac/WebInspector/WebInspector.mm
index 8ab049f..f38c7ef 100644
--- a/Source/WebKit/mac/WebInspector/WebInspector.mm
+++ b/Source/WebKit/mac/WebInspector/WebInspector.mm
@@ -68,7 +68,7 @@ using namespace WebCore;
- (void)showConsole:(id)sender
{
if (Page* page = core(_webView))
- page->inspectorController()->showPanel(InspectorController::ConsolePanel);
+ page->inspectorController()->showConsole();
}
- (void)showTimeline:(id)sender
@@ -132,7 +132,6 @@ using namespace WebCore;
if (!page)
return;
page->inspectorController()->stopUserInitiatedProfiling();
- page->inspectorController()->showPanel(InspectorController::ProfilesPanel);
}
- (BOOL)isJavaScriptProfilingEnabled
@@ -157,7 +156,7 @@ using namespace WebCore;
- (BOOL)isTimelineProfilingEnabled
{
if (Page* page = core(_webView))
- return page->inspectorController()->timelineAgent() ? YES : NO;
+ return page->inspectorController()->timelineProfilerEnabled() ? YES : NO;
return NO;
}
diff --git a/Source/WebKit/mac/WebView/WebDynamicScrollBarsView.mm b/Source/WebKit/mac/WebView/WebDynamicScrollBarsView.mm
index b8edef8..610cd40 100644
--- a/Source/WebKit/mac/WebView/WebDynamicScrollBarsView.mm
+++ b/Source/WebKit/mac/WebView/WebDynamicScrollBarsView.mm
@@ -568,7 +568,7 @@ static const unsigned cMaxUpdateScrollbarsPass = 2;
return YES;
}
-- (void)setScrollOrigin:(NSPoint)scrollOrigin updatePosition:(BOOL)updatePosition
+- (void)setScrollOrigin:(NSPoint)scrollOrigin updatePositionAtAll:(BOOL)updatePositionAtAll immediately:(BOOL)updatePositionSynchronously
{
// The cross-platform ScrollView call already checked to see if the old/new scroll origins were the same or not
// so we don't have to check for equivalence here.
@@ -579,12 +579,13 @@ static const unsigned cMaxUpdateScrollbarsPass = 2;
[docView setBoundsOrigin:NSMakePoint(-scrollOrigin.x, -scrollOrigin.y)];
- _private->scrollOriginChanged = true;
+ if (updatePositionAtAll)
+ _private->scrollOriginChanged = true;
// Maintain our original position in the presence of the new scroll origin.
_private->scrollPositionExcludingOrigin = NSMakePoint(visibleRect.origin.x + scrollOrigin.x, visibleRect.origin.y + scrollOrigin.y);
- if (updatePosition) // Otherwise we'll just let the snap happen when we update for the resize.
+ if (updatePositionAtAll && updatePositionSynchronously) // Otherwise we'll just let the snap happen when we update for the resize.
[self adjustForScrollOriginChange];
}
diff --git a/Source/WebKit/mac/WebView/WebFrame.mm b/Source/WebKit/mac/WebView/WebFrame.mm
index 154156a..4d1c752 100644
--- a/Source/WebKit/mac/WebView/WebFrame.mm
+++ b/Source/WebKit/mac/WebView/WebFrame.mm
@@ -587,16 +587,11 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
}
// Used by pagination code called from AppKit when a standalone web page is printed.
-- (NSArray*)_computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight
+- (NSArray*)_computePageRectsWithPrintScaleFactor:(float)printScaleFactor pageSize:(NSSize)pageSize
{
NSMutableArray* pages = [NSMutableArray arrayWithCapacity:5];
- if (printWidthScaleFactor <= 0) {
- LOG_ERROR("printWidthScaleFactor has bad value %.2f", printWidthScaleFactor);
- return pages;
- }
-
- if (printHeight <= 0) {
- LOG_ERROR("printHeight has bad value %.2f", printHeight);
+ if (printScaleFactor <= 0) {
+ LOG_ERROR("printScaleFactor has bad value %.2f", printScaleFactor);
return pages;
}
@@ -612,8 +607,11 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
if (!documentView)
return pages;
- float docWidth = root->layer()->width();
- float printWidth = docWidth / printWidthScaleFactor;
+ float docWidth = root->docWidth();
+ float docHeight = root->docHeight();
+
+ float printWidth = root->style()->isHorizontalWritingMode() ? docWidth / printScaleFactor : pageSize.width;
+ float printHeight = root->style()->isHorizontalWritingMode() ? pageSize.height : docHeight / printScaleFactor;
PrintContext printContext(_private->coreFrame);
printContext.computePageRectsWithPageSize(FloatSize(printWidth, printHeight), true);
@@ -915,7 +913,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
- (BOOL)_canProvideDocumentSource
{
Frame* frame = _private->coreFrame;
- String mimeType = frame->loader()->writer()->mimeType();
+ String mimeType = frame->document()->loader()->writer()->mimeType();
PluginData* pluginData = frame->page() ? frame->page()->pluginData() : 0;
if (WebCore::DOMImplementation::isTextMIMEType(mimeType) ||
diff --git a/Source/WebKit/mac/WebView/WebFrameInternal.h b/Source/WebKit/mac/WebView/WebFrameInternal.h
index 7ff5e75..83870ec 100644
--- a/Source/WebKit/mac/WebView/WebFrameInternal.h
+++ b/Source/WebKit/mac/WebView/WebFrameInternal.h
@@ -124,7 +124,7 @@ WebView *getWebView(WebFrame *webFrame);
- (BOOL)_needsLayout;
- (void)_drawRect:(NSRect)rect contentsOnly:(BOOL)contentsOnly;
- (BOOL)_getVisibleRect:(NSRect*)rect;
-- (NSArray*)_computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight;
+- (NSArray*)_computePageRectsWithPrintScaleFactor:(float)printWidthScaleFactor pageSize:(NSSize)pageSize;
- (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string;
- (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture;
diff --git a/Source/WebKit/mac/WebView/WebFullScreenController.mm b/Source/WebKit/mac/WebView/WebFullScreenController.mm
index 6529435..5b8b496 100644
--- a/Source/WebKit/mac/WebView/WebFullScreenController.mm
+++ b/Source/WebKit/mac/WebView/WebFullScreenController.mm
@@ -397,7 +397,6 @@ private:
[[self window] setCollectionBehavior:behavior];
NSView* animationView = [[self _fullscreenWindow] animationView];
- NSRect viewBounds = [animationView bounds];
NSRect backgroundBounds = {[[self window] convertScreenToBase:screenFrame.origin], screenFrame.size};
backgroundBounds = [animationView convertRectFromBase:backgroundBounds];
@@ -462,8 +461,7 @@ private:
CATransform3D moveTransform = CATransform3DMakeTranslation(_initialFrame.origin.x - shrunkDestinationFrame.origin.x, _initialFrame.origin.y - shrunkDestinationFrame.origin.y, 0);
CATransform3D finalTransform = CATransform3DConcat(shrinkTransform, moveTransform);
[rendererLayer setTransform:finalTransform];
- CGRect translatedDestinationFrame = [rendererLayer convertRect:destinationFrame toLayer:[animationView layer]];
-
+
CALayer* backgroundLayer = [[self _fullscreenWindow] backgroundLayer];
// Start the opacity animation. We can use implicit animations here because we don't care when
@@ -600,10 +598,9 @@ private:
CATransform3D moveTransform = CATransform3DMakeTranslation(layerEndFrame.origin.x - shrunkDestinationFrame.origin.x, layerEndFrame.origin.y - shrunkDestinationFrame.origin.y, 0);
CATransform3D finalTransform = CATransform3DConcat(shrinkTransform, moveTransform);
[rendererLayer setTransform:finalTransform];
- CGRect translatedDestinationFrame = [rendererLayer convertRect:layerStartFrame toLayer:[animationView layer]];
-
+
CFTimeInterval duration = [self _animationDuration];
-
+
CALayer* backgroundLayer = [[self _fullscreenWindow] backgroundLayer];
[CATransaction begin];
[CATransaction setAnimationDuration:duration];
diff --git a/Source/WebKit/mac/WebView/WebHTMLView.mm b/Source/WebKit/mac/WebView/WebHTMLView.mm
index ec5ff51..ff1c400 100644
--- a/Source/WebKit/mac/WebView/WebHTMLView.mm
+++ b/Source/WebKit/mac/WebView/WebHTMLView.mm
@@ -104,6 +104,7 @@
#import <WebCore/PlatformKeyboardEvent.h>
#import <WebCore/Range.h>
#import <WebCore/RenderWidget.h>
+#import <WebCore/RenderView.h>
#import <WebCore/RuntimeApplicationChecks.h>
#import <WebCore/SelectionController.h>
#import <WebCore/SharedBuffer.h>
@@ -311,7 +312,7 @@ static void setNeedsDisplayInRect(NSView *self, SEL cmd, NSRect invalidRect)
NSRect invalidRectInWebFrameViewCoordinates = [enclosingWebFrameView convertRect:invalidRect fromView:self];
IntRect invalidRectInFrameViewCoordinates(invalidRectInWebFrameViewCoordinates);
if (![enclosingWebFrameView isFlipped])
- invalidRectInFrameViewCoordinates.setY(frameView->frameRect().size().height() - invalidRectInFrameViewCoordinates.bottom());
+ invalidRectInFrameViewCoordinates.setY(frameView->frameRect().size().height() - invalidRectInFrameViewCoordinates.maxY());
frameView->invalidateRect(invalidRectInFrameViewCoordinates);
}
@@ -347,16 +348,6 @@ const float _WebHTMLViewPrintingMinimumShrinkFactor = 1.25;
// behavior matches MacIE and Mozilla, at least)
const float _WebHTMLViewPrintingMaximumShrinkFactor = 2;
-// This number determines how short the last printed page of a multi-page print session
-// can be before we try to shrink the scale in order to reduce the number of pages, and
-// thus eliminate the orphan.
-#define LastPrintedPageOrphanRatio 0.1f
-
-// This number determines the amount the scale factor is adjusted to try to eliminate orphans.
-// It has no direct mathematical relationship to LastPrintedPageOrphanRatio, due to variable
-// numbers of pages, logic to avoid breaking elements, and CSS-supplied hard page breaks.
-#define PrintingOrphanShrinkAdjustment 1.1f
-
#define AUTOSCROLL_INTERVAL 0.1f
// Any non-zero value will do, but using something recognizable might help us debug some day.
@@ -438,7 +429,7 @@ static CachedResourceClient* promisedDataClient()
#endif
@interface WebHTMLView (WebForwardDeclaration) // FIXME: Put this in a normal category and stop doing the forward declaration trick.
-- (void)_setPrinting:(BOOL)printing minimumPageWidth:(float)minPageWidth height:(float)minPageHeight maximumPageWidth:(float)maxPageWidth adjustViewSize:(BOOL)adjustViewSize paginateScreenContent:(BOOL)paginateScreenContent;
+- (void)_setPrinting:(BOOL)printing minimumPageLogicalWidth:(float)minPageWidth logicalHeight:(float)minPageHeight maximumPageLogicalWidth:(float)maxPageWidth adjustViewSize:(BOOL)adjustViewSize paginateScreenContent:(BOOL)paginateScreenContent;
@end
@class NSTextInputContext;
@@ -482,7 +473,6 @@ struct WebHTMLViewInterpretKeyEventsParameters {
BOOL closed;
BOOL ignoringMouseDraggedEvents;
BOOL printing;
- BOOL avoidingPrintOrphan;
BOOL paginateScreenContent;
BOOL observingMouseMovedNotifications;
BOOL observingSuperviewNotifications;
@@ -1091,7 +1081,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
- (void)_web_setPrintingModeRecursive
{
- [self _setPrinting:YES minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
#ifndef NDEBUG
_private->enumeratingSubviews = YES;
@@ -1103,7 +1093,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
unsigned count = [descendantWebHTMLViews count];
for (unsigned i = 0; i < count; ++i)
- [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:YES minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:YES minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
[descendantWebHTMLViews release];
@@ -1114,7 +1104,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
- (void)_web_clearPrintingModeRecursive
{
- [self _setPrinting:NO minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:NO minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
#ifndef NDEBUG
_private->enumeratingSubviews = YES;
@@ -1126,7 +1116,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
unsigned count = [descendantWebHTMLViews count];
for (unsigned i = 0; i < count; ++i)
- [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:NO minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:NO minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
[descendantWebHTMLViews release];
@@ -1137,7 +1127,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
- (void)_web_setPrintingModeRecursiveAndAdjustViewSize
{
- [self _setPrinting:YES minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
#ifndef NDEBUG
_private->enumeratingSubviews = YES;
@@ -1149,7 +1139,7 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart)
unsigned count = [descendantWebHTMLViews count];
for (unsigned i = 0; i < count; ++i)
- [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:YES minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [[descendantWebHTMLViews objectAtIndex:i] _setPrinting:YES minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
[descendantWebHTMLViews release];
@@ -2212,7 +2202,7 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
maximumPageWidth = 0;
}
- [self _setPrinting:YES minimumPageWidth:minimumPageWidth height:minimumPageHeight maximumPageWidth:maximumPageWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:minimumPageWidth logicalHeight:minimumPageHeight maximumPageLogicalWidth:maximumPageWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
return YES;
}
@@ -2222,25 +2212,28 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
if (!frame)
return NO;
- float minLayoutWidth = 0;
- float minLayoutHeight = 0;
- float maxLayoutWidth = 0;
+ Document* document = frame->document();
+ bool isHorizontal = !document || !document->renderView() || document->renderView()->style()->isHorizontalWritingMode();
+
+ float minLayoutLogicalWidth = isHorizontal ? pageWidth : pageHeight;
+ float minLayoutLogicalHeight = isHorizontal ? pageHeight : pageWidth;
+ float maxLayoutLogicalWidth = minLayoutLogicalWidth;
// If we are a frameset just print with the layout we have onscreen, otherwise relayout
// according to the page width.
- if (!frame->document() || !frame->document()->isFrameSet()) {
- minLayoutWidth = shrinkToFit ? pageWidth * _WebHTMLViewPrintingMinimumShrinkFactor : pageWidth;
- minLayoutHeight = shrinkToFit ? pageHeight * _WebHTMLViewPrintingMinimumShrinkFactor : pageHeight;
- maxLayoutWidth = shrinkToFit ? pageWidth * _WebHTMLViewPrintingMaximumShrinkFactor : pageWidth;
+ if (shrinkToFit && (!frame->document() || !frame->document()->isFrameSet())) {
+ minLayoutLogicalWidth *= _WebHTMLViewPrintingMinimumShrinkFactor;
+ minLayoutLogicalHeight *= _WebHTMLViewPrintingMinimumShrinkFactor;
+ maxLayoutLogicalWidth *= _WebHTMLViewPrintingMaximumShrinkFactor;
}
- [self _setPrinting:YES minimumPageWidth:minLayoutWidth height:minLayoutHeight maximumPageWidth:maxLayoutWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:minLayoutLogicalWidth logicalHeight:minLayoutLogicalHeight maximumPageLogicalWidth:maxLayoutLogicalWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
return YES;
}
- (void)_endPrintMode
{
- [self _setPrinting:NO minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:NO minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
}
- (BOOL)_isInScreenPaginationMode
@@ -2254,25 +2247,28 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
if (!frame)
return NO;
- CGFloat minLayoutWidth = 0;
- CGFloat minLayoutHeight = 0;
- CGFloat maxLayoutWidth = 0;
+ Document* document = frame->document();
+ bool isHorizontal = !document || !document->renderView() || document->renderView()->style()->isHorizontalWritingMode();
+
+ float minLayoutLogicalWidth = isHorizontal ? pageSize.width : pageSize.height;
+ float minLayoutLogicalHeight = isHorizontal ? pageSize.height : pageSize.width;
+ float maxLayoutLogicalWidth = minLayoutLogicalWidth;
- // If we are a frameset just print with the layout we have on the screen. Otherwise do a relayout
+ // If we are a frameset just print with the layout we have onscreen, otherwise relayout
// according to the page width.
- if (!frame->document() || !frame->document()->isFrameSet()) {
- minLayoutWidth = shrinkToFit ? pageSize.width * _WebHTMLViewPrintingMinimumShrinkFactor : pageSize.width;
- minLayoutHeight = shrinkToFit ? pageSize.height * _WebHTMLViewPrintingMinimumShrinkFactor : pageSize.height;
- maxLayoutWidth = shrinkToFit ? pageSize.width * _WebHTMLViewPrintingMaximumShrinkFactor : pageSize.width;
+ if (shrinkToFit && (!frame->document() || !frame->document()->isFrameSet())) {
+ minLayoutLogicalWidth *= _WebHTMLViewPrintingMinimumShrinkFactor;
+ minLayoutLogicalHeight *= _WebHTMLViewPrintingMinimumShrinkFactor;
+ maxLayoutLogicalWidth *= _WebHTMLViewPrintingMaximumShrinkFactor;
}
- [self _setPrinting:[self _isInPrintMode] minimumPageWidth:minLayoutWidth height:minLayoutHeight maximumPageWidth:maxLayoutWidth adjustViewSize:YES paginateScreenContent:YES];
+ [self _setPrinting:[self _isInPrintMode] minimumPageLogicalWidth:minLayoutLogicalWidth logicalHeight:minLayoutLogicalHeight maximumPageLogicalWidth:maxLayoutLogicalWidth adjustViewSize:YES paginateScreenContent:YES];
return YES;
}
- (void)_endScreenPaginationMode
{
- [self _setPrinting:[self _isInPrintMode] minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:YES paginateScreenContent:NO];
+ [self _setPrinting:[self _isInPrintMode] minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:YES paginateScreenContent:NO];
}
- (CGFloat)_adjustedBottomOfPageWithTop:(CGFloat)top bottom:(CGFloat)bottom limit:(CGFloat)bottomLimit
@@ -3128,7 +3124,7 @@ WEBCORE_COMMAND(yankAndSelect)
// Do a layout, but set up a new fixed width for the purposes of doing printing layout.
// minPageWidth==0 implies a non-printing layout
-- (void)layoutToMinimumPageWidth:(float)minPageWidth height:(float)minPageHeight maximumPageWidth:(float)maxPageWidth adjustingViewSize:(BOOL)adjustViewSize
+- (void)layoutToMinimumPageWidth:(float)minPageLogicalWidth height:(float)minPageLogicalHeight maximumPageWidth:(float)maxPageLogicalWidth adjustingViewSize:(BOOL)adjustViewSize
{
if (![self _needsLayout])
return;
@@ -3144,9 +3140,12 @@ WEBCORE_COMMAND(yankAndSelect)
return;
if (FrameView* coreView = coreFrame->view()) {
- if (minPageWidth > 0.0)
- coreView->forceLayoutForPagination(FloatSize(minPageWidth, minPageHeight), maxPageWidth / minPageWidth, adjustViewSize ? Frame::AdjustViewSize : Frame::DoNotAdjustViewSize);
- else {
+ if (minPageLogicalWidth > 0.0) {
+ FloatSize pageSize(minPageLogicalWidth, minPageLogicalHeight);
+ if (coreFrame->document() && coreFrame->document()->renderView() && !coreFrame->document()->renderView()->style()->isHorizontalWritingMode())
+ pageSize = FloatSize(minPageLogicalHeight, minPageLogicalWidth);
+ coreView->forceLayoutForPagination(pageSize, maxPageLogicalWidth / minPageLogicalWidth, adjustViewSize ? Frame::AdjustViewSize : Frame::DoNotAdjustViewSize);
+ } else {
coreView->forceLayout(!adjustViewSize);
if (adjustViewSize)
coreView->adjustViewSize();
@@ -3888,7 +3887,7 @@ static BOOL isInPasswordField(Frame* coreFrame)
// Does setNeedsDisplay:NO as a side effect when printing is ending.
// pageWidth != 0 implies we will relayout to a new width
-- (void)_setPrinting:(BOOL)printing minimumPageWidth:(float)minPageWidth height:(float)minPageHeight maximumPageWidth:(float)maxPageWidth adjustViewSize:(BOOL)adjustViewSize paginateScreenContent:(BOOL)paginateScreenContent
+- (void)_setPrinting:(BOOL)printing minimumPageLogicalWidth:(float)minPageLogicalWidth logicalHeight:(float)minPageLogicalHeight maximumPageLogicalWidth:(float)maxPageLogicalWidth adjustViewSize:(BOOL)adjustViewSize paginateScreenContent:(BOOL)paginateScreenContent
{
if (printing == _private->printing && paginateScreenContent == _private->paginateScreenContent)
return;
@@ -3901,7 +3900,7 @@ static BOOL isInPasswordField(Frame* coreFrame)
WebFrame *subframe = [subframes objectAtIndex:i];
WebFrameView *frameView = [subframe frameView];
if ([[subframe _dataSource] _isDocumentHTML]) {
- [(WebHTMLView *)[frameView documentView] _setPrinting:printing minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:adjustViewSize paginateScreenContent:paginateScreenContent];
+ [(WebHTMLView *)[frameView documentView] _setPrinting:printing minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:adjustViewSize paginateScreenContent:paginateScreenContent];
}
}
@@ -3909,8 +3908,6 @@ static BOOL isInPasswordField(Frame* coreFrame)
_private->pageRects = nil;
_private->printing = printing;
_private->paginateScreenContent = paginateScreenContent;
- if (!printing && !paginateScreenContent)
- _private->avoidingPrintOrphan = NO;
Frame* coreFrame = core([self _frame]);
if (coreFrame) {
@@ -3924,7 +3921,7 @@ static BOOL isInPasswordField(Frame* coreFrame)
}
[self setNeedsLayout:YES];
- [self layoutToMinimumPageWidth:minPageWidth height:minPageHeight maximumPageWidth:maxPageWidth adjustingViewSize:adjustViewSize];
+ [self layoutToMinimumPageWidth:minPageLogicalWidth height:minPageLogicalHeight maximumPageWidth:maxPageLogicalWidth adjustingViewSize:adjustViewSize];
if (!printing) {
// Can't do this when starting printing or nested printing won't work, see 3491427.
[self setNeedsDisplay:NO];
@@ -3944,7 +3941,7 @@ static BOOL isInPasswordField(Frame* coreFrame)
// If the WebHTMLView itself is what we're printing, then we will never have to do this.
BOOL wasInPrintingMode = _private->printing;
if (!wasInPrintingMode)
- [self _setPrinting:YES minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
*newBottom = [self _adjustedBottomOfPageWithTop:oldTop bottom:oldBottom limit:bottomLimit];
@@ -3955,23 +3952,30 @@ static BOOL isInPasswordField(Frame* coreFrame)
[self performSelector:@selector(_delayedEndPrintMode:) withObject:currenPrintOperation afterDelay:0];
else
// not sure if this is actually ever invoked, it probably shouldn't be
- [self _setPrinting:NO minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:NO minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
}
}
- (float)_scaleFactorForPrintOperation:(NSPrintOperation *)printOperation
{
- float viewWidth = NSWidth([self bounds]);
- if (viewWidth < 1) {
- LOG_ERROR("%@ has no width when printing", self);
+ bool useViewWidth = true;
+ Frame* coreFrame = core([self _frame]);
+ if (coreFrame) {
+ Document* document = coreFrame->document();
+ if (document && document->renderView())
+ useViewWidth = document->renderView()->style()->isHorizontalWritingMode();
+ }
+
+ float viewLogicalWidth = useViewWidth ? NSWidth([self bounds]) : NSHeight([self bounds]);
+ if (viewLogicalWidth < 1) {
+ LOG_ERROR("%@ has no logical width when printing", self);
return 1.0f;
}
float userScaleFactor = [printOperation _web_pageSetupScaleFactor];
float maxShrinkToFitScaleFactor = 1.0f / _WebHTMLViewPrintingMaximumShrinkFactor;
- float shrinkToFitScaleFactor = [printOperation _web_availablePaperWidth] / viewWidth;
- float shrinkToAvoidOrphan = _private->avoidingPrintOrphan ? (1.0f / PrintingOrphanShrinkAdjustment) : 1.0f;
- return userScaleFactor * max(maxShrinkToFitScaleFactor, shrinkToFitScaleFactor) * shrinkToAvoidOrphan;
+ float shrinkToFitScaleFactor = (useViewWidth ? [printOperation _web_availablePaperWidth] : [printOperation _web_availablePaperHeight]) / viewLogicalWidth;
+ return userScaleFactor * max(maxShrinkToFitScaleFactor, shrinkToFitScaleFactor);
}
// FIXME 3491344: This is a secret AppKit-internal method that we need to override in order
@@ -3985,8 +3989,8 @@ static BOOL isInPasswordField(Frame* coreFrame)
// This is used for Carbon printing. At some point we might want to make this public API.
- (void)setPageWidthForPrinting:(float)pageWidth
{
- [self _setPrinting:NO minimumPageWidth:0 height:0 maximumPageWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
- [self _setPrinting:YES minimumPageWidth:pageWidth height:0 maximumPageWidth:pageWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:NO minimumPageLogicalWidth:0 logicalHeight:0 maximumPageLogicalWidth:0 adjustViewSize:NO paginateScreenContent:[self _isInScreenPaginationMode]];
+ [self _setPrinting:YES minimumPageLogicalWidth:pageWidth logicalHeight:0 maximumPageLogicalWidth:pageWidth adjustViewSize:YES paginateScreenContent:[self _isInScreenPaginationMode]];
}
- (void)_endPrintModeAndRestoreWindowAutodisplay
@@ -4050,9 +4054,10 @@ static BOOL isInPasswordField(Frame* coreFrame)
float totalScaleFactor = [self _scaleFactorForPrintOperation:printOperation];
float userScaleFactor = [printOperation _web_pageSetupScaleFactor];
[_private->pageRects release];
+ float fullPageWidth = floorf([printOperation _web_availablePaperWidth] / totalScaleFactor);
float fullPageHeight = floorf([printOperation _web_availablePaperHeight] / totalScaleFactor);
WebFrame *frame = [self _frame];
- NSArray *newPageRects = [frame _computePageRectsWithPrintWidthScaleFactor:userScaleFactor printHeight:fullPageHeight];
+ NSArray *newPageRects = [frame _computePageRectsWithPrintScaleFactor:userScaleFactor pageSize:NSMakeSize(fullPageWidth, fullPageHeight)];
// AppKit gets all messed up if you give it a zero-length page count (see 3576334), so if we
// hit that case we'll pass along a degenerate 1 pixel square to print. This will print
@@ -4060,19 +4065,6 @@ static BOOL isInPasswordField(Frame* coreFrame)
// the behavior of IE and Camino at least.
if ([newPageRects count] == 0)
newPageRects = [NSArray arrayWithObject:[NSValue valueWithRect:NSMakeRect(0, 0, 1, 1)]];
- else if ([newPageRects count] > 1) {
- // If the last page is a short orphan, try adjusting the print height slightly to see if this will squeeze the
- // content onto one fewer page. If it does, use the adjusted scale. If not, use the original scale.
- float lastPageHeight = NSHeight([[newPageRects lastObject] rectValue]);
- if (lastPageHeight/fullPageHeight < LastPrintedPageOrphanRatio) {
- NSArray *adjustedPageRects = [frame _computePageRectsWithPrintWidthScaleFactor:userScaleFactor printHeight:fullPageHeight * PrintingOrphanShrinkAdjustment];
- // Use the adjusted rects only if the page count went down
- if ([adjustedPageRects count] < [newPageRects count]) {
- newPageRects = adjustedPageRects;
- _private->avoidingPrintOrphan = YES;
- }
- }
- }
_private->pageRects = [newPageRects retain];
@@ -6200,7 +6192,7 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
- (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag startInSelection:(BOOL)startInSelection
{
- return [self _findString:string options:(forward ? 0 : WebFindOptionsBackwards) | (caseFlag ? 0 : WebFindOptionsCaseInsensitive) | (startInSelection ? WebFindOptionsStartInSelection : 0)];
+ return [self _findString:string options:(forward ? 0 : WebFindOptionsBackwards) | (caseFlag ? 0 : WebFindOptionsCaseInsensitive) | (wrapFlag ? WebFindOptionsWrapAround : 0) | (startInSelection ? WebFindOptionsStartInSelection : 0)];
}
@end
diff --git a/Source/WebKit/mac/WebView/WebScriptDebugDelegate.mm b/Source/WebKit/mac/WebView/WebScriptDebugDelegate.mm
index 63a91a9..96a1a42 100644
--- a/Source/WebKit/mac/WebView/WebScriptDebugDelegate.mm
+++ b/Source/WebKit/mac/WebView/WebScriptDebugDelegate.mm
@@ -184,9 +184,9 @@ NSString * const WebScriptErrorLineNumberKey = @"WebScriptErrorLineNumber";
ScopeChainIterator end = scopeChain->end();
for (ScopeChainIterator it = scopeChain->begin(); it != end; ++it) {
- JSObject* object = *it;
+ JSObject* object = it->get();
if (object->isActivationObject())
- object = new (scopeChain->globalData) DebuggerActivation(object);
+ object = new (scopeChain->globalData) DebuggerActivation(*scopeChain->globalData, object);
[scopes addObject:[self _convertValueToObjcValue:object]];
}
diff --git a/Source/WebKit/mac/WebView/WebView.mm b/Source/WebKit/mac/WebView/WebView.mm
index 82e4f2c..e01877b 100644
--- a/Source/WebKit/mac/WebView/WebView.mm
+++ b/Source/WebKit/mac/WebView/WebView.mm
@@ -5834,7 +5834,7 @@ static inline uint64_t roundUpToPowerOf2(uint64_t num)
WebFrameLoadDelegateImplementationCache* cache = &_private->frameLoadDelegateImplementations;
if (cache->didReceiveIconForFrameFunc) {
- Image* image = iconDatabase()->iconForPageURL(core(webFrame)->loader()->url().string(), IntSize(16, 16));
+ Image* image = iconDatabase()->iconForPageURL(core(webFrame)->document()->url().string(), IntSize(16, 16));
if (NSImage *icon = webGetNSImage(image, NSMakeSize(16, 16)))
CallFrameLoadDelegate(cache->didReceiveIconForFrameFunc, self, @selector(webView:didReceiveIcon:forFrame:), icon, webFrame);
}
diff --git a/Source/WebKit/qt/Api/qwebframe.cpp b/Source/WebKit/qt/Api/qwebframe.cpp
index 391ff26..dce0137 100644
--- a/Source/WebKit/qt/Api/qwebframe.cpp
+++ b/Source/WebKit/qt/Api/qwebframe.cpp
@@ -357,11 +357,10 @@ void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame:
view->updateLayoutAndStyleIfNeededRecursive();
if (layer & QWebFrame::ContentsLayer) {
- painter->save();
for (int i = 0; i < vector.size(); ++i) {
const QRect& clipRect = vector.at(i);
- QRect intersectedRect = clipRect.intersected(view->frameRect());
+ QRect rect = clipRect.intersected(view->frameRect());
context->save();
painter->setClipRect(clipRect, Qt::IntersectClip);
@@ -372,7 +371,6 @@ void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame:
int scrollX = view->scrollX();
int scrollY = view->scrollY();
- QRect rect = intersectedRect;
context->translate(x, y);
rect.translate(-x, -y);
context->translate(-scrollX, -scrollY);
@@ -383,7 +381,6 @@ void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame:
context->restore();
}
- painter->restore();
#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
renderCompositedLayers(context, IntRect(clip.boundingRect()));
#endif
@@ -403,15 +400,13 @@ void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame:
if (layer & QWebFrame::ScrollBarLayer
&& !view->scrollbarsSuppressed()
&& (view->horizontalScrollbar() || view->verticalScrollbar())) {
- context->save();
-
QRect rect = intersectedRect;
context->translate(x, y);
rect.translate(-x, -y);
view->paintScrollbars(context, rect);
- context->restore();
+ context->translate(-x, -y);
}
#if ENABLE(PAN_SCROLLING)
@@ -754,14 +749,14 @@ static inline QUrl ensureAbsoluteUrl(const QUrl &url)
void QWebFrame::setUrl(const QUrl &url)
{
const QUrl absolute = ensureAbsoluteUrl(url);
- d->frame->loader()->writer()->begin(absolute);
- d->frame->loader()->writer()->end();
+ d->frame->loader()->activeDocumentLoader()->writer()->begin(absolute);
+ d->frame->loader()->activeDocumentLoader()->writer()->end();
load(absolute);
}
QUrl QWebFrame::url() const
{
- return d->frame->loader()->url();
+ return d->frame->document()->url();
}
/*!
@@ -817,7 +812,7 @@ QUrl QWebFrame::baseUrl() const
QIcon QWebFrame::icon() const
{
- return QWebSettings::iconForUrl(d->frame->loader()->url());
+ return QWebSettings::iconForUrl(d->frame->document()->url());
}
/*!
@@ -1309,7 +1304,7 @@ QPoint QWebFrame::pos() const
if (!d->frame->view())
return QPoint();
- return d->frame->view()->frameRect().topLeft();
+ return d->frame->view()->frameRect().location();
}
/*!
diff --git a/Source/WebKit/qt/Api/qwebpage.cpp b/Source/WebKit/qt/Api/qwebpage.cpp
index e80aac5..075756d 100644
--- a/Source/WebKit/qt/Api/qwebpage.cpp
+++ b/Source/WebKit/qt/Api/qwebpage.cpp
@@ -162,6 +162,7 @@ static const char* editorCommandWebActions[] =
0, // OpenImageInNewWindow,
0, // DownloadImageToDisk,
0, // CopyImageToClipboard,
+ 0, // CopyImageUrlToClipboard,
0, // Back,
0, // Forward,
@@ -404,6 +405,7 @@ static QWebPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAct
case WebCore::ContextMenuItemTagOpenImageInNewWindow: return QWebPage::OpenImageInNewWindow;
case WebCore::ContextMenuItemTagDownloadImageToDisk: return QWebPage::DownloadImageToDisk;
case WebCore::ContextMenuItemTagCopyImageToClipboard: return QWebPage::CopyImageToClipboard;
+ case WebCore::ContextMenuItemTagCopyImageUrlToClipboard: return QWebPage::CopyImageUrlToClipboard;
case WebCore::ContextMenuItemTagOpenFrameInNewWindow: return QWebPage::OpenFrameInNewWindow;
case WebCore::ContextMenuItemTagCopy: return QWebPage::Copy;
case WebCore::ContextMenuItemTagGoBack: return QWebPage::Back;
@@ -431,7 +433,7 @@ static QWebPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAct
QMenu *QWebPagePrivate::createContextMenu(const WebCore::ContextMenu *webcoreMenu,
const QList<WebCore::ContextMenuItem> *items, QBitArray *visitedWebActions)
{
- if (!client)
+ if (!client || !webcoreMenu)
return 0;
QMenu* menu = new QMenu(client->ownerWidget());
@@ -1680,6 +1682,7 @@ IntPoint QWebPagePrivate::TouchAdjuster::findCandidatePointForTouch(const IntPoi
\value OpenImageInNewWindow Open the highlighted image in a new window.
\value DownloadImageToDisk Download the highlighted image to the disk.
\value CopyImageToClipboard Copy the highlighted image to the clipboard.
+ \value CopyImageUrlToClipboard Copy the highlighted image's URL to the clipboard.
\value Back Navigate back in the history of navigated links.
\value Forward Navigate forward in the history of navigated links.
\value Stop Stop loading the current page.
@@ -1883,9 +1886,10 @@ QWebPage::ViewportAttributes& QWebPage::ViewportAttributes::operator=(const QWeb
The loadStarted() signal is emitted when the page begins to load.The
loadProgress() signal, on the other hand, is emitted whenever an element
of the web page completes loading, such as an embedded image, a script,
- etc. Finally, the loadFinished() signal is emitted when the page has
- loaded completely. Its argument, either true or false, indicates whether
- or not the load operation succeeded.
+ etc. Finally, the loadFinished() signal is emitted when the page contents
+ are loaded completely, independent of script execution or page rendering.
+ Its argument, either true or false, indicates whether or not the load
+ operation succeeded.
\section1 Using QWebPage in a Widget-less Environment
@@ -2342,6 +2346,9 @@ void QWebPage::triggerAction(WebAction action, bool)
case CopyImageToClipboard:
QApplication::clipboard()->setPixmap(d->hitTestResult.pixmap());
break;
+ case CopyImageUrlToClipboard:
+ QApplication::clipboard()->setText(d->hitTestResult.imageUrl().toString());
+ break;
#endif
case Back:
d->page->goBack();
@@ -2730,6 +2737,9 @@ QAction *QWebPage::action(WebAction action) const
case CopyImageToClipboard:
text = contextMenuItemTagCopyImageToClipboard();
break;
+ case CopyImageUrlToClipboard:
+ text = contextMenuItemTagCopyImageUrlToClipboard();
+ break;
case Back:
text = contextMenuItemTagGoBack();
@@ -3979,7 +3989,7 @@ quint64 QWebPage::bytesReceived() const
/*!
\fn void QWebPage::loadStarted()
- This signal is emitted when a new load of the page is started.
+ This signal is emitted when a page starts loading content.
\sa loadFinished()
*/
@@ -3998,7 +4008,8 @@ quint64 QWebPage::bytesReceived() const
/*!
\fn void QWebPage::loadFinished(bool ok)
- This signal is emitted when a load of the page is finished.
+ This signal is emitted when the page finishes loading content. This signal
+ is independant of script execution or page rendering.
\a ok will indicate whether the load was successful or any error occurred.
\sa loadStarted(), ErrorPageExtension
diff --git a/Source/WebKit/qt/Api/qwebpage.h b/Source/WebKit/qt/Api/qwebpage.h
index b66adb2..e12b460 100644
--- a/Source/WebKit/qt/Api/qwebpage.h
+++ b/Source/WebKit/qt/Api/qwebpage.h
@@ -105,6 +105,7 @@ public:
OpenImageInNewWindow,
DownloadImageToDisk,
CopyImageToClipboard,
+ CopyImageUrlToClipboard,
Back,
Forward,
diff --git a/Source/WebKit/qt/Api/qwebsettings.cpp b/Source/WebKit/qt/Api/qwebsettings.cpp
index 9bb187e..e2d6061 100644
--- a/Source/WebKit/qt/Api/qwebsettings.cpp
+++ b/Source/WebKit/qt/Api/qwebsettings.cpp
@@ -171,7 +171,7 @@ void QWebSettingsPrivate::apply()
settings->setAcceleratedCompositingEnabled(value);
#endif
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
value = attributes.value(QWebSettings::WebGLEnabled,
global->attributes.value(QWebSettings::WebGLEnabled));
diff --git a/Source/WebKit/qt/ChangeLog b/Source/WebKit/qt/ChangeLog
index aec5b45..e4c8cef 100644
--- a/Source/WebKit/qt/ChangeLog
+++ b/Source/WebKit/qt/ChangeLog
@@ -1,3 +1,477 @@
+2011-02-11 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] wmode gets overridden even if already windowless in QGraphicsWebView
+ Do not override wmode if it is not set to "window".
+ https://bugs.webkit.org/show_bug.cgi?id=50495
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::setUrl):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::finishedLoading):
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Ensure WebView press delay timer is cancelled when grab is taken
+ https://bugs.webkit.org/show_bug.cgi?id=54242
+
+ As reported in:
+ http://bugreports.qt.nokia.com/browse/QTBUG-15529
+
+ Flickable steals the grab, but the timer was not stopped and the
+ keepGrab flag is set and the mouse grabbed. This means that the WebView
+ now has the grab and subsequent clicks on another element are ignored.
+
+ Original patch from Martin Jones <martin.jones@nokia.com>
+ reviewed (there) by Joona Petrell
+ 52068f57f9c32098a90cc217730a530f85590f65
+
+ * declarative/qdeclarativewebview.cpp:
+ (GraphicsWebView::sceneEvent):
+ * declarative/qdeclarativewebview_p.h:
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Fix assert in QDeclarativeWebView
+ https://bugs.webkit.org/show_bug.cgi?id=54240
+
+ As reported in:
+ http://bugreports.qt.nokia.com/browse/QTBUG-14278
+
+ Instantiating a QDeclarativeWebView twice will trigger an assertion
+ when in debug mode.
+
+ Original patch from Thomas Hartmann <Thomas.Hartmann@nokia.com>,
+ reviewed (there) by Aaron Kennedy
+ f532679ca11914b453e22342f2ae5e9f790ce47a
+
+ * declarative/qdeclarativewebview.cpp:
+ (QDeclarativeWebView::init):
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Misc documentation fixes/updates
+ https://bugs.webkit.org/show_bug.cgi?id=54236
+
+ There are a few commits in the Qt repository (master and 4.7 branches)
+ with QtWebKit documentation fixes:
+
+ 84d278501a19eaccf9a77cccd95ca5d17a2dcd2b
+ Clarified documentation of loadFinished() signal
+
+ eebe205b306daaa3674d9746de11a73bef4bd0de
+ Doc: Fixed QML, unindented snippet
+
+ b0d64717d2c541976dc5524e4100c62f060e206f
+ doc: Changed a table into 3 tables to eliminate a \raw.
+
+ As these are all minor doc changes, I decided to group them
+ into one single patch.
+
+ * Api/qwebpage.cpp:
+ * declarative/qdeclarativewebview.cpp:
+ * docs/qtwebkit.qdoc:
+
+2011-02-10 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove the use of deprecated qVariant*
+ https://bugs.webkit.org/show_bug.cgi?id=54229
+
+ This was applied on the Qt repository and affects QtWebKit there.
+ (633f3f45e5420663cf4ceadea79e62fea44cd2eb)
+
+ The side effect of this change is that we won't be able to build
+ QtWebKit with MSVC 6, as it doesn't support member template functions
+ (not sure if it's possible today anyway).
+
+ Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
+ review reported as being from the mailing list.
+
+ The changes are result of the following commands:
+
+ git grep -O"sed -i 's/qVariantValue</qvariant_cast</'" qVariantValue
+ git grep -O"sed -i 's/qVariantSetValue(\([^&*\(),]*\), */\\1.setValue(/'" qVariantSetValue
+ git grep -O"sed -i 's/qVariantSetValue *<\([^>]*\)> *(\([^&*\(),]*\), */\\2.setValue<\\1>(/'" qVariantSetValue
+ git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
+ git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*([^&*\(),]*)\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
+ git grep -O"sed -i 's/qVariantFromValue\( *[(<]\)/QVariant::fromValue\\1/'" qVariantFromValue
+
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (DumpRenderTreeSupportQt::nodesFromRect):
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyQObject::myInvokableWithQObjectListArg):
+ (MyQObject::myInvokableWithListOfIntArg):
+ (MyQObject::myInvokableWithQObjectStarArg):
+ (MyQObject::myInvokableWithQBrushArg):
+ (MyQObject::myInvokableWithBrushStyleArg):
+ (MyQObject::myInvokableWithVoidStarArg):
+ (MyQObject::myInvokableWithAmbiguousArg):
+ (MyQObject::myInvokableWithDefaultArgs):
+ (MyQObject::myInvokableWithPointArg):
+ (MyQObject::myOverloadedSlot):
+
+2011-02-10 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Return menu items from eventSender.contextMenu()
+ https://bugs.webkit.org/show_bug.cgi?id=53039
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (iterateContextMenu):
+ (DumpRenderTreeSupportQt::contextMenu):
+ * WebCoreSupport/DumpRenderTreeSupportQt.h:
+
+2011-02-10 Alexis Menard <alexis.menard@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] In trunk with Qt Multimedia the full screen mode doesn't work.
+ https://bugs.webkit.org/show_bug.cgi?id=54201
+
+ Add a default fullscreen handler when there is no plaftform plugin
+ installed. This handler creates a fullscreen QVideoWidget and plays
+ the video. Space pause/resume the video playback and esc quit the
+ fullscreen mode.
+
+ * WebCoreSupport/FullScreenVideoQt.cpp:
+ (WebCore::DefaultFullScreenVideoHandler::DefaultFullScreenVideoHandler):
+ (WebCore::DefaultFullScreenVideoHandler::~DefaultFullScreenVideoHandler):
+ (WebCore::DefaultFullScreenVideoHandler::requiresFullScreenForVideoPlayback):
+ (WebCore::DefaultFullScreenVideoHandler::enterFullScreen):
+ (WebCore::DefaultFullScreenVideoHandler::exitFullScreen):
+ (WebCore::FullScreenVideoQt::FullScreenVideoQt):
+ * WebCoreSupport/FullScreenVideoQt.h:
+ * WebCoreSupport/FullScreenVideoWidget.cpp: Added.
+ (WebCore::FullScreenVideoWidget::FullScreenVideoWidget):
+ (WebCore::FullScreenVideoWidget::~FullScreenVideoWidget):
+ (WebCore::FullScreenVideoWidget::show):
+ (WebCore::FullScreenVideoWidget::closeEvent):
+ (WebCore::FullScreenVideoWidget::event):
+ (WebCore::FullScreenVideoWidget::keyPressEvent):
+ (WebCore::FullScreenVideoWidget::hideCursor):
+ (WebCore::FullScreenVideoWidget::showCursor):
+ * WebCoreSupport/FullScreenVideoWidget.h: Added.
+
+2011-02-10 kasthuri <kasthuri.n-s@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] QWebFrame::setHtml doesn't emit loadFinished signal
+ https://bugs.webkit.org/show_bug.cgi?id=38634
+
+ QWebView->page()->mainFrame()->setHtml(html) is always emitting
+ the loadFinished() signal for all types of html files.
+ But the proposed test content was trying to catch the signal after
+ calling setHtml() api and becuase of this the emitted signal for a
+ simple html page is never caught as its emitted before even the connect
+ call was successful.
+
+ updated the tst_QWebFrame::setHtml() in tst_qwebframe.cpp to check for
+ signal using the QSignalSpy.
+
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2011-02-09 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] REGRESSION (r73535): tst_QWebPage fails
+ https://bugs.webkit.org/show_bug.cgi?id=51331
+
+ Since r73535 a ContextMenu is only created when a context menu
+ event is received, so QWebPage::updatePositionDependentActions()
+ can't depend on one being there if it is called directly by
+ the client. QtWebKit itself only ever calls updatePositionDependentActions()
+ when a context menu event has been received.
+
+ Update tst_QWebPage:contextMenuCrash to create a context menu.
+ Add tst_QWebPage:updatePositionDependentActionsCrash to test for this crash.
+
+ There doesn't seem to be a good reason for creating a context menu if
+ clients call QWebPage::updatePositionDependentActions() when no
+ context menu event has ever been received.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::createContextMenu):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::contextMenuCrash):
+
+2011-02-09 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] fast/dom/nodesFromRect-links-and-text.html crashes in debug mode
+ https://bugs.webkit.org/show_bug.cgi?id=53921
+
+ QDRTNode needs a copy constructor and an operator= in order to keep
+ proper refcounts.
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (:m_node):
+ (QDRTNode::operator=):
+ (DumpRenderTreeSupportQt::nodesFromRect):
+ * WebCoreSupport/DumpRenderTreeSupportQt.h:
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/ChromeClientQt.h:
+
+2011-02-07 Aparna Nandyal <aparna.nand@wipro.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] - Context menu needs "Copy" as well when the selected text is a link.
+ https://bugs.webkit.org/show_bug.cgi?id=40983
+
+ Added a test case to create a context sensitive menu.
+ A check is made if it has Copy menu item when user
+ selects a link and opens context menu.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::contextMenuCopy):
+
+2011-02-07 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] cookiesEnabled could create the cookieJar on the wrong thread.
+ https://bugs.webkit.org/show_bug.cgi?id=52289
+
+ Test if the cookie jar is created in the right thread when accessed from
+ the navigator object.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::navigatorCookieEnabledForNetworkAccessManagerOnDifferentThread):
+
+2011-02-07 Qi Zhang <qi.2.zhang@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
+ https://bugs.webkit.org/show_bug.cgi?id=52974
+
+ Add QWebPage::CopyImageUrlToClipboard into QWebPage::WebAction.
+
+ * Api/qwebpage.cpp:
+ (webActionForContextMenuAction):
+ (QWebPage::triggerAction):
+ (QWebPage::action):
+ * Api/qwebpage.h:
+ * WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard):
+ * WebCoreSupport/WebPlatformStrategies.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/DragClientQt.cpp:
+ * WebCoreSupport/DragClientQt.h:
+
+2011-02-06 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove unnecessary QRect assignment
+ https://bugs.webkit.org/show_bug.cgi?id=53873
+
+ * Api/qwebframe.cpp:
+ (QWebFramePrivate::renderRelativeCoords):
+
+2011-02-06 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Clear page's groupName even when not in DRT
+ https://bugs.webkit.org/show_bug.cgi?id=53874
+
+ Matches behaviour of other ports.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::closeWindowSoon):
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorFrontendClientQt::InspectorFrontendClientQt):
+ * WebCoreSupport/InspectorClientQt.h:
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::didRunInsecureContent):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
+2011-02-01 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed Qt buildfix after r77286.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+ Remove the physical terminology from IntRect and FloatRect.
+
+ * WebCoreSupport/PopupMenuQt.cpp:
+ (WebCore::PopupMenuQt::show):
+
+2011-01-31 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] QWebElements example from QtWebKit Bridge documentation does not work at all
+ https://bugs.webkit.org/show_bug.cgi?id=46748
+
+ Problem was that we need to register QWebElement's variant-type to Qt's meta type system at some point.
+ This wasn't caught by previous tests inside tst_QWebFrame because it only appears when there's also a QWebElement property.
+ Added a regression test to tst_QWebFrame.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyWebElementSlotOnlyObject::doSomethingWithWebElement):
+ (MyWebElementSlotOnlyObject::tagName):
+
+2011-01-31 Srikumar Bonda <srikumar.b@gmail.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] ContextMenuClientQt.cpp has coding-style errors
+ "RefCounted.h" header inclusion style changed to <wtf/RefCounted.h>
+ https://bugs.webkit.org/show_bug.cgi?id=40243
+
+ * WebCoreSupport/ContextMenuClientQt.cpp:
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/ChromeClientQt.h:
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::url):
+
+2011-01-27 Robert Hogan <robert@webkit.org>
+
+ Rubber-stamped by Andreas Kling.
+
+ [Qt] Style Fix: correct indentation in FrameLoadeClientQt:createPlugin
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * Api/qwebsettings.cpp:
+ (QWebSettingsPrivate::apply):
+
+2011-01-24 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] QWebFramePrivate::renderRelativeCoords() calls QPainter::save/restore more than necessary
+ https://bugs.webkit.org/show_bug.cgi?id=49915
+
+ In the first loop of renderRelativeCoords() the call of QPainter::save/restore is useless, because
+ the context is saved/stored within the loop.
+ In the second loop the calls are also avoidable by using inverse translation on context.
+
+ * Api/qwebframe.cpp:
+ (QWebFramePrivate::renderRelativeCoords):
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * declarative/declarative.pro:
+ * docs/docs.pri:
+ * tests/tests.pri:
+
+2011-01-22 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: next step in splitting InspectorController.
+
+ #include "InspectorController.h" was added.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52955
+
+ * WebCoreSupport/InspectorServerQt.cpp:
+
+2011-01-22 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Support layoutTestController.addURLToRedirect()
+ https://bugs.webkit.org/show_bug.cgi?id=52956
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (DumpRenderTreeSupportQt::addURLToRedirect):
+ * WebCoreSupport/DumpRenderTreeSupportQt.h:
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
+ * WebCoreSupport/FrameLoaderClientQt.h:
+
2011-01-21 Sam Weinig <sam@webkit.org>
Reviewed by Anders Carlsson.
diff --git a/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
index acb136a..b7a0350 100644
--- a/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
@@ -307,6 +307,7 @@ bool ChromeClientQt::runBeforeUnloadConfirmPanel(const String& message, Frame* f
void ChromeClientQt::closeWindowSoon()
{
+ m_webPage->d->page->setGroupName(String());
m_webPage->mainFrame()->d->frame->loader()->stopAllLoaders();
emit m_webPage->windowCloseRequested();
}
@@ -736,6 +737,11 @@ bool ChromeClientQt::selectItemWritingDirectionIsNatural()
return false;
}
+bool ChromeClientQt::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> ChromeClientQt::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuQt(client, this));
diff --git a/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h
index d8c2f57..684ece8 100644
--- a/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h
@@ -179,8 +179,6 @@ namespace WebCore {
virtual void formStateDidChange(const Node*) { }
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
virtual void setCursor(const Cursor&);
virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
@@ -189,6 +187,7 @@ namespace WebCore {
virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*);
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
virtual void populateVisitedLinks();
diff --git a/Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp
index b4400ff..29180e0 100644
--- a/Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp
@@ -29,8 +29,8 @@
#include "ContextMenu.h"
#include "HitTestResult.h"
#include "KURL.h"
-#include "RefCounted.h"
#include "NotImplemented.h"
+#include <wtf/RefCounted.h>
#include <stdio.h>
diff --git a/Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp
index f136328..8996b52 100644
--- a/Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp
@@ -110,9 +110,4 @@ void DragClientQt::startDrag(DragImageRef dragImage, const IntPoint&, const IntP
}
-DragImageRef DragClientQt::createDragImageForLink(KURL&, const String&, Frame*)
-{
- return 0;
-}
-
} // namespace WebCore
diff --git a/Source/WebKit/qt/WebCoreSupport/DragClientQt.h b/Source/WebKit/qt/WebCoreSupport/DragClientQt.h
index 4c83191..38b463b 100644
--- a/Source/WebKit/qt/WebCoreSupport/DragClientQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/DragClientQt.h
@@ -37,7 +37,6 @@ public:
virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&);
virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*);
virtual void startDrag(DragImageRef dragImage, const IntPoint& dragImageOrigin, const IntPoint& eventPos, Clipboard*, Frame*, bool linkDrag = false);
- virtual DragImageRef createDragImageForLink(KURL&, const String& label, Frame*);
private:
QWebPage* m_webPage;
};
diff --git a/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp b/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
index a7a495a..1b6a4d4 100644
--- a/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
@@ -104,6 +104,26 @@ QDRTNode::~QDRTNode()
m_node->deref();
}
+QDRTNode::QDRTNode(const QDRTNode& other)
+ :m_node(other.m_node)
+{
+ if (m_node)
+ m_node->ref();
+}
+
+QDRTNode& QDRTNode::operator=(const QDRTNode& other)
+{
+ if (this != &other) {
+ Node* otherNode = other.m_node;
+ if (otherNode)
+ otherNode->ref();
+ if (m_node)
+ m_node->deref();
+ m_node = otherNode;
+ }
+ return *this;
+}
+
DumpRenderTreeSupportQt::DumpRenderTreeSupportQt()
{
@@ -875,13 +895,11 @@ QVariantList DumpRenderTreeSupportQt::nodesFromRect(const QWebElement& document,
return res;
RefPtr<NodeList> nodes = doc->nodesFromRect(x, y, top, right, bottom, left, ignoreClipping);
for (int i = 0; i < nodes->length(); i++) {
- QVariant v;
// QWebElement will be null if the Node is not an HTML Element
if (nodes->item(i)->isHTMLElement())
- v.setValue(QWebElement(nodes->item(i)));
+ res << QVariant::fromValue(QWebElement(nodes->item(i)));
else
- v.setValue(QDRTNode(nodes->item(i)));
- res << v;
+ res << QVariant::fromValue(QDRTNode(nodes->item(i)));
}
return res;
}
@@ -893,6 +911,37 @@ QString DumpRenderTreeSupportQt::responseMimeType(QWebFrame* frame)
return docLoader->responseMIMEType();
}
+void DumpRenderTreeSupportQt::addURLToRedirect(const QString& origin, const QString& destination)
+{
+ FrameLoaderClientQt::URLsToRedirect[origin] = destination;
+}
+
+static QStringList iterateContextMenu(QMenu* menu)
+{
+ if (!menu)
+ return QStringList();
+
+ QStringList items;
+ QList<QAction *> actions = menu->actions();
+ for (int i = 0; i < actions.count(); ++i) {
+ if (actions.at(i)->isSeparator())
+ items << QLatin1String("<separator>");
+ else
+ items << actions.at(i)->text();
+ if (actions.at(i)->menu())
+ items << iterateContextMenu(actions.at(i)->menu());
+ }
+ return items;
+}
+
+QStringList DumpRenderTreeSupportQt::contextMenu(QWebPage* page)
+{
+#ifndef QT_NO_CONTEXTMENU
+ return iterateContextMenu(page->d->currentContextMenu);
+#else
+ return QStringList();
+#endif
+}
// Provide a backward compatibility with previously exported private symbols as of QtWebKit 4.6 release
void QWEBKIT_EXPORT qt_resumeActiveDOMObjects(QWebFrame* frame)
diff --git a/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h b/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
index dd84e76..685d724 100644
--- a/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
@@ -58,6 +58,8 @@ extern QMap<int, QWebScriptWorld*> m_worldMap;
class QWEBKIT_EXPORT QDRTNode {
public:
QDRTNode();
+ QDRTNode(const QDRTNode&);
+ QDRTNode &operator=(const QDRTNode&);
~QDRTNode();
private:
@@ -185,6 +187,8 @@ public:
static QVariantList nodesFromRect(const QWebElement& document, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping);
static QString responseMimeType(QWebFrame*);
+ static void addURLToRedirect(const QString& origin, const QString& destination);
+ static QStringList contextMenu(QWebPage*);
};
#endif
diff --git a/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 474b768..22e2ac9 100644
--- a/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -180,6 +180,7 @@ QStringList FrameLoaderClientQt::sendRequestClearHeaders;
QString FrameLoaderClientQt::dumpResourceLoadCallbacksPath;
bool FrameLoaderClientQt::policyDelegateEnabled = false;
bool FrameLoaderClientQt::policyDelegatePermissive = false;
+QMap<QString, QString> FrameLoaderClientQt::URLsToRedirect = QMap<QString, QString>();
// Taken from DumpRenderTree/chromium/WebViewHost.cpp
static const char* navigationTypeToString(NavigationType type)
@@ -629,7 +630,7 @@ void FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
// However, we only want to do this if makeRepresentation has been called, to
// match the behavior on the Mac.
if (m_hasRepresentation)
- loader->frameLoader()->writer()->setEncoding("", false);
+ loader->writer()->setEncoding("", false);
return;
}
if (m_pluginView->isPluginView())
@@ -846,7 +847,7 @@ void FrameLoaderClientQt::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClientQt::didRunInsecureContent(WebCore::SecurityOrigin*)
+void FrameLoaderClientQt::didRunInsecureContent(WebCore::SecurityOrigin*, const KURL&)
{
if (dumpFrameLoaderCallbacks)
printf("didRunInsecureContent\n");
@@ -1021,6 +1022,11 @@ void FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsi
for (int i = 0; i < sendRequestClearHeaders.size(); ++i)
newRequest.setHTTPHeaderField(sendRequestClearHeaders.at(i).toLocal8Bit().constData(), QString());
+ if (QWebPagePrivate::drtRun) {
+ QString url = newRequest.url().string();
+ if (URLsToRedirect.contains(url))
+ newRequest.setURL(QUrl(URLsToRedirect[url]));
+ }
// seems like the Mac code doesn't do anything here by default neither
//qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << request.url().string`();
}
@@ -1510,46 +1516,46 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize,
#endif // QT_NO_STYLE_STYLESHEET
}
- if (!object) {
- QWebPluginFactory* factory = m_webFrame->page()->pluginFactory();
- if (factory)
- object = factory->create(mimeType, qurl, params, values);
- }
+ if (!object) {
+ QWebPluginFactory* factory = m_webFrame->page()->pluginFactory();
+ if (factory)
+ object = factory->create(mimeType, qurl, params, values);
+ }
- if (object) {
- QWidget* widget = qobject_cast<QWidget*>(object);
- if (widget) {
- QWidget* parentWidget = 0;
- if (m_webFrame->page()->d->client)
- parentWidget = qobject_cast<QWidget*>(m_webFrame->page()->d->client->pluginParent());
- if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
- widget->setParent(parentWidget);
- widget->hide();
- RefPtr<QtPluginWidget> w = adoptRef(new QtPluginWidget());
- w->setPlatformWidget(widget);
- // Make sure it's invisible until properly placed into the layout
- w->setFrameRect(IntRect(0, 0, 0, 0));
- return w;
- }
+ if (object) {
+ QWidget* widget = qobject_cast<QWidget*>(object);
+ if (widget) {
+ QWidget* parentWidget = 0;
+ if (m_webFrame->page()->d->client)
+ parentWidget = qobject_cast<QWidget*>(m_webFrame->page()->d->client->pluginParent());
+ if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
+ widget->setParent(parentWidget);
+ widget->hide();
+ RefPtr<QtPluginWidget> w = adoptRef(new QtPluginWidget());
+ w->setPlatformWidget(widget);
+ // Make sure it's invisible until properly placed into the layout
+ w->setFrameRect(IntRect(0, 0, 0, 0));
+ return w;
+ }
#if !defined(QT_NO_GRAPHICSVIEW)
- QGraphicsWidget* graphicsWidget = qobject_cast<QGraphicsWidget*>(object);
- if (graphicsWidget) {
- QGraphicsObject* parentWidget = 0;
- if (m_webFrame->page()->d->client)
- parentWidget = qobject_cast<QGraphicsObject*>(m_webFrame->page()->d->client->pluginParent());
- graphicsWidget->hide();
- if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
- graphicsWidget->setParentItem(parentWidget);
- RefPtr<QtPluginGraphicsWidget> w = QtPluginGraphicsWidget::create(graphicsWidget);
- // Make sure it's invisible until properly placed into the layout
- w->setFrameRect(IntRect(0, 0, 0, 0));
- return w;
- }
+ QGraphicsWidget* graphicsWidget = qobject_cast<QGraphicsWidget*>(object);
+ if (graphicsWidget) {
+ QGraphicsObject* parentWidget = 0;
+ if (m_webFrame->page()->d->client)
+ parentWidget = qobject_cast<QGraphicsObject*>(m_webFrame->page()->d->client->pluginParent());
+ graphicsWidget->hide();
+ if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
+ graphicsWidget->setParentItem(parentWidget);
+ RefPtr<QtPluginGraphicsWidget> w = QtPluginGraphicsWidget::create(graphicsWidget);
+ // Make sure it's invisible until properly placed into the layout
+ w->setFrameRect(IntRect(0, 0, 0, 0));
+ return w;
+ }
#endif // QT_NO_GRAPHICSVIEW
- // FIXME: make things work for widgetless plugins as well
- delete object;
+ // FIXME: make things work for widgetless plugins as well
+ delete object;
}
#if ENABLE(NETSCAPE_PLUGIN_API)
else { // NPAPI Plugins
@@ -1575,7 +1581,7 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize,
if (wmodeIndex == -1) {
params.append("wmode");
values.append("opaque");
- } else
+ } else if (equalIgnoringCase(values[wmodeIndex], "window"))
values[wmodeIndex] = "opaque";
}
#endif
diff --git a/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h b/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
index 3d93eaf..09a26ea 100644
--- a/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h
@@ -158,7 +158,7 @@ public:
virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const;
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(SecurityOrigin*);
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&);
virtual ResourceError cancelledError(const ResourceRequest&);
virtual ResourceError blockedError(const ResourceRequest&);
@@ -250,6 +250,7 @@ public:
static bool policyDelegatePermissive;
static bool deferMainResourceDataLoad;
static bool dumpHistoryCallbacks;
+ static QMap<QString, QString> URLsToRedirect;
private:
Frame *m_frame;
diff --git a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
index bdc22e5..ccca43c 100644
--- a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp
@@ -22,16 +22,57 @@
#include "FullScreenVideoQt.h"
#include "ChromeClientQt.h"
+#include "FullScreenVideoWidget.h"
#include "HTMLNames.h"
#include "HTMLVideoElement.h"
#include "MediaPlayerPrivateQt.h"
#include "Node.h"
-#include "qwebkitplatformplugin.h"
+
#include <QGraphicsVideoItem>
+#include <QMediaPlayer>
namespace WebCore {
+bool DefaultFullScreenVideoHandler::s_shouldForceFullScreenVideoPlayback = false;
+
+DefaultFullScreenVideoHandler::DefaultFullScreenVideoHandler()
+ : QWebFullScreenVideoHandler()
+ , m_fullScreenWidget(new FullScreenVideoWidget)
+{
+ connect(m_fullScreenWidget, SIGNAL(didExitFullScreen()), this, SIGNAL(fullScreenClosed()));
+ m_fullScreenWidget->hide();
+}
+
+DefaultFullScreenVideoHandler::~DefaultFullScreenVideoHandler()
+{
+ delete m_fullScreenWidget;
+}
+
+bool DefaultFullScreenVideoHandler::requiresFullScreenForVideoPlayback() const
+{
+ static bool initialized = false;
+ if (!initialized) {
+ QByteArray forceFullScreen = qgetenv("QT_WEBKIT_FORCE_FULLSCREEN_VIDEO");
+ if (!forceFullScreen.isEmpty())
+ s_shouldForceFullScreenVideoPlayback = true;
+
+ initialized = true;
+ }
+
+ return s_shouldForceFullScreenVideoPlayback;
+}
+
+void DefaultFullScreenVideoHandler::enterFullScreen(QMediaPlayer* player)
+{
+ m_fullScreenWidget->show(player);
+}
+
+void DefaultFullScreenVideoHandler::exitFullScreen()
+{
+ m_fullScreenWidget->close();
+}
+
FullScreenVideoQt::FullScreenVideoQt(ChromeClientQt* chromeClient)
: m_chromeClient(chromeClient)
, m_videoElement(0)
@@ -39,6 +80,9 @@ FullScreenVideoQt::FullScreenVideoQt(ChromeClientQt* chromeClient)
Q_ASSERT(m_chromeClient);
m_FullScreenVideoHandler = m_chromeClient->m_platformPlugin.createFullScreenVideoHandler();
+ if (!m_FullScreenVideoHandler)
+ m_FullScreenVideoHandler = new DefaultFullScreenVideoHandler;
+
if (m_FullScreenVideoHandler)
connect(m_FullScreenVideoHandler, SIGNAL(fullScreenClosed()), this, SLOT(aboutToClose()));
}
diff --git a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h
index 637da70..a48a882 100644
--- a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h
@@ -20,21 +20,38 @@
#ifndef FullScreenVideoQt_h
#define FullScreenVideoQt_h
+#include "qwebkitplatformplugin.h"
#include <QObject>
QT_BEGIN_NAMESPACE
class QGraphicsVideoItem;
+class QMediaPlayer;
QT_END_NAMESPACE
-class QWebFullScreenVideoHandler;
-
namespace WebCore {
class ChromeClientQt;
+class FullScreenVideoWidget;
class HTMLVideoElement;
class Node;
class MediaPlayerPrivateQt;
+class DefaultFullScreenVideoHandler : public QWebFullScreenVideoHandler {
+ Q_OBJECT
+public:
+ DefaultFullScreenVideoHandler();
+ virtual ~DefaultFullScreenVideoHandler();
+ bool requiresFullScreenForVideoPlayback() const;
+
+public Q_SLOTS:
+ void enterFullScreen(QMediaPlayer*);
+ void exitFullScreen();
+
+private:
+ static bool s_shouldForceFullScreenVideoPlayback;
+ FullScreenVideoWidget *m_fullScreenWidget;
+};
+
class FullScreenVideoQt : public QObject {
Q_OBJECT
public:
@@ -61,4 +78,4 @@ private:
}
-#endif // PopupMenuQt_h
+#endif // FullScreenVideoQt_h
diff --git a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp
new file mode 100644
index 0000000..4922cd7
--- /dev/null
+++ b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.cpp
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "FullScreenVideoWidget.h"
+
+#include <QApplication>
+#include <QCloseEvent>
+#include <QDesktopWidget>
+#include <QKeyEvent>
+#include <QMediaPlayer>
+
+static const int gHideMouseCursorDelay = 3000;
+
+namespace WebCore {
+
+FullScreenVideoWidget::FullScreenVideoWidget()
+ : QVideoWidget()
+ , m_mediaPlayer(0)
+{
+ QPalette palette(this->palette());
+ palette.setColor(QPalette::Base, Qt::black);
+ palette.setColor(QPalette::Background, Qt::black);
+ setPalette(palette);
+
+ setWindowModality(Qt::ApplicationModal);
+ setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
+
+ setGeometry(QApplication::desktop()->screenGeometry());
+
+ m_cursorTimer.setSingleShot(true);
+ connect(&m_cursorTimer, SIGNAL(timeout()), this, SLOT(hideCursor()));
+}
+
+FullScreenVideoWidget::~FullScreenVideoWidget()
+{
+}
+
+void FullScreenVideoWidget::show(QMediaPlayer* player)
+{
+ m_mediaPlayer = player;
+ showFullScreen();
+ setMouseTracking(true);
+ raise();
+ m_mediaPlayer->setVideoOutput(this);
+ grabMouse();
+ hideCursor();
+}
+
+void FullScreenVideoWidget::closeEvent(QCloseEvent* event)
+{
+ m_mediaPlayer = 0;
+ setMouseTracking(false);
+ releaseMouse();
+ QApplication::restoreOverrideCursor();
+ event->ignore();
+ hide();
+ emit didExitFullScreen();
+}
+
+bool FullScreenVideoWidget::event(QEvent* ev)
+{
+ switch (ev->type()) {
+ case QEvent::MouseMove:
+ showCursor();
+ ev->accept();
+ return true;
+ case QEvent::MouseButtonDblClick:
+ close();
+ ev->accept();
+ return true;
+ default:
+ return QVideoWidget::event(ev);
+ }
+}
+
+void FullScreenVideoWidget::keyPressEvent(QKeyEvent* ev)
+{
+ if (m_mediaPlayer && ev->key() == Qt::Key_Space) {
+ if (m_mediaPlayer->state() == QMediaPlayer::PlayingState)
+ m_mediaPlayer->pause();
+ else
+ m_mediaPlayer->play();
+ } else if (ev->key() == Qt::Key_Escape)
+ close();
+}
+
+void FullScreenVideoWidget::hideCursor()
+{
+ QApplication::setOverrideCursor(QCursor(Qt::BlankCursor));
+}
+
+void FullScreenVideoWidget::showCursor()
+{
+ QApplication::restoreOverrideCursor();
+ m_cursorTimer.start(gHideMouseCursorDelay);
+}
+
+}
diff --git a/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h
new file mode 100644
index 0000000..466042c
--- /dev/null
+++ b/Source/WebKit/qt/WebCoreSupport/FullScreenVideoWidget.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FullScreenVideoWidget_h
+#define FullScreenVideoWidget_h
+
+#include <QTimer>
+#include <QVideoWidget>
+
+QT_BEGIN_NAMESPACE
+class QMediaPlayer;
+QT_END_NAMESPACE
+
+namespace WebCore {
+
+class FullScreenVideoWidget : public QVideoWidget {
+ Q_OBJECT
+public:
+ FullScreenVideoWidget();
+ virtual ~FullScreenVideoWidget();
+ void show(QMediaPlayer*);
+
+Q_SIGNALS:
+ void didExitFullScreen();
+
+protected:
+ virtual void closeEvent(QCloseEvent*);
+ virtual bool event(QEvent*);
+ virtual void keyPressEvent(QKeyEvent*);
+
+private slots:
+ void hideCursor();
+
+private:
+ void showCursor();
+ QMediaPlayer* m_mediaPlayer;
+ QTimer m_cursorTimer;
+};
+
+}
+
+#endif // FullScreenVideoWidget_h
diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
index 1b06e2e..f364b28 100644
--- a/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
@@ -32,7 +32,6 @@
#include "InspectorClientQt.h"
#include "Frame.h"
-#include "InspectorBackendDispatcher.h"
#include "InspectorController.h"
#include "InspectorFrontend.h"
#include "InspectorServerQt.h"
@@ -55,9 +54,6 @@ namespace WebCore {
static const QLatin1String settingStoragePrefix("Qt/QtWebKit/QWebInspector/");
static const QLatin1String settingStorageTypeSuffix(".type");
-static String variantToSetting(const QVariant& qvariant);
-static QVariant settingToVariant(const String& value);
-
class InspectorClientWebPage : public QWebPage {
Q_OBJECT
friend class InspectorClientQt;
@@ -97,6 +93,85 @@ public slots:
}
};
+namespace {
+
+#if ENABLE(INSPECTOR)
+class InspectorFrontendSettingsQt : public InspectorFrontendClientLocal::Settings {
+public:
+ virtual ~InspectorFrontendSettingsQt() { }
+ virtual String getProperty(const String& name)
+ {
+#ifdef QT_NO_SETTINGS
+ Q_UNUSED(name)
+ Q_UNUSED(value)
+ qWarning("QWebInspector: QSettings is not supported by Qt.");
+ return String();
+#else
+ QSettings qsettings;
+ if (qsettings.status() == QSettings::AccessError) {
+ // QCoreApplication::setOrganizationName and QCoreApplication::setApplicationName haven't been called
+ qWarning("QWebInspector: QSettings couldn't read configuration setting [%s].",
+ qPrintable(static_cast<QString>(name)));
+ return String();
+ }
+
+ QString settingKey(settingStoragePrefix + QString(name));
+ QString storedValueType = qsettings.value(settingKey + settingStorageTypeSuffix).toString();
+ QVariant storedValue = qsettings.value(settingKey);
+ storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data()));
+ return variantToSetting(storedValue);
+#endif // QT_NO_SETTINGS
+ }
+
+ virtual void setProperty(const String& name, const String& value)
+ {
+#ifdef QT_NO_SETTINGS
+ Q_UNUSED(name)
+ Q_UNUSED(value)
+ qWarning("QWebInspector: QSettings is not supported by Qt.");
+#else
+ QSettings qsettings;
+ if (qsettings.status() == QSettings::AccessError) {
+ qWarning("QWebInspector: QSettings couldn't persist configuration setting [%s].",
+ qPrintable(static_cast<QString>(name)));
+ return;
+ }
+
+ QVariant valueToStore = settingToVariant(value);
+ QString settingKey(settingStoragePrefix + QString(name));
+ qsettings.setValue(settingKey, valueToStore);
+ qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type()));
+#endif // QT_NO_SETTINGS
+ }
+
+private:
+ static String variantToSetting(const QVariant& qvariant)
+ {
+ String retVal;
+
+ switch (qvariant.type()) {
+ case QVariant::Bool:
+ retVal = qvariant.toBool() ? "true" : "false";
+ case QVariant::String:
+ retVal = qvariant.toString();
+ default:
+ break;
+ }
+
+ return retVal;
+ }
+
+ static QVariant settingToVariant(const String& setting)
+ {
+ QVariant retVal;
+ retVal.setValue(static_cast<QString>(setting));
+ return retVal;
+ }
+};
+#endif // ENABLE(INSPECTOR)
+
+}
+
#if USE(V8)
static void ensureDebuggerScriptLoaded()
{
@@ -213,50 +288,6 @@ void InspectorClientQt::hideHighlight()
notImplemented();
}
-void InspectorClientQt::populateSetting(const String& key, String* setting)
-{
-#ifdef QT_NO_SETTINGS
- Q_UNUSED(key)
- Q_UNUSED(setting)
- qWarning("QWebInspector: QSettings is not supported by Qt.");
-#else
- QSettings qsettings;
- if (qsettings.status() == QSettings::AccessError) {
- // QCoreApplication::setOrganizationName and QCoreApplication::setApplicationName haven't been called
- qWarning("QWebInspector: QSettings couldn't read configuration setting [%s].",
- qPrintable(static_cast<QString>(key)));
- return;
- }
-
- QString settingKey(settingStoragePrefix + QString(key));
- QString storedValueType = qsettings.value(settingKey + settingStorageTypeSuffix).toString();
- QVariant storedValue = qsettings.value(settingKey);
- storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data()));
- *setting = variantToSetting(storedValue);
-#endif // QT_NO_SETTINGS
-}
-
-void InspectorClientQt::storeSetting(const String& key, const String& setting)
-{
-#ifdef QT_NO_SETTINGS
- Q_UNUSED(key)
- Q_UNUSED(setting)
- qWarning("QWebInspector: QSettings is not supported by Qt.");
-#else
- QSettings qsettings;
- if (qsettings.status() == QSettings::AccessError) {
- qWarning("QWebInspector: QSettings couldn't persist configuration setting [%s].",
- qPrintable(static_cast<QString>(key)));
- return;
- }
-
- QVariant valueToStore = settingToVariant(setting);
- QString settingKey(settingStoragePrefix + QString(key));
- qsettings.setValue(settingKey, valueToStore);
- qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type()));
-#endif // QT_NO_SETTINGS
-}
-
bool InspectorClientQt::sendMessageToFrontend(const String& message)
{
#if ENABLE(INSPECTOR)
@@ -276,32 +307,9 @@ bool InspectorClientQt::sendMessageToFrontend(const String& message)
#endif
}
-static String variantToSetting(const QVariant& qvariant)
-{
- String retVal;
-
- switch (qvariant.type()) {
- case QVariant::Bool:
- retVal = qvariant.toBool() ? "true" : "false";
- case QVariant::String:
- retVal = qvariant.toString();
- default:
- break;
- }
-
- return retVal;
-}
-
-static QVariant settingToVariant(const String& setting)
-{
- QVariant retVal;
- retVal.setValue(static_cast<QString>(setting));
- return retVal;
-}
-
#if ENABLE(INSPECTOR)
InspectorFrontendClientQt::InspectorFrontendClientQt(QWebPage* inspectedWebPage, PassOwnPtr<QWebView> inspectorView, InspectorClientQt* inspectorClient)
- : InspectorFrontendClientLocal(inspectedWebPage->d->page->inspectorController(), inspectorView->page()->d->page)
+ : InspectorFrontendClientLocal(inspectedWebPage->d->page->inspectorController(), inspectorView->page()->d->page, new InspectorFrontendSettingsQt())
, m_inspectedWebPage(inspectedWebPage)
, m_inspectorView(inspectorView)
, m_destroyingInspectorView(false)
diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h b/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h
index 64a2d0c..c16fabe 100644
--- a/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/InspectorClientQt.h
@@ -58,9 +58,6 @@ public:
virtual void highlight(Node*);
virtual void hideHighlight();
- virtual void populateSetting(const String& key, String* value);
- virtual void storeSetting(const String& key, const String& value);
-
virtual bool sendMessageToFrontend(const String&);
void releaseFrontendPage();
diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
index 7002dce..f83deb2 100644
--- a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
@@ -20,8 +20,8 @@
#include "config.h"
#include "InspectorServerQt.h"
-#include "InspectorBackendDispatcher.h"
#include "InspectorClientQt.h"
+#include "InspectorController.h"
#include "MD5.h"
#include "Page.h"
#include "qwebpage.h"
@@ -363,7 +363,7 @@ void InspectorServerRequestHandlerQt::webSocketReadyRead()
#if ENABLE(INSPECTOR)
if (m_inspectorClient) {
InspectorController* inspectorController = m_inspectorClient->m_inspectedWebPage->d->page->inspectorController();
- inspectorController->inspectorBackendDispatcher()->dispatch(QString::fromUtf8(payload));
+ inspectorController->dispatchMessageFromFrontend(QString::fromUtf8(payload));
}
#endif
diff --git a/Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp b/Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp
index 0c0f2d7..f7c4edc 100644
--- a/Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp
@@ -109,7 +109,7 @@ void PopupMenuQt::show(const IntRect& rect, FrameView* view, int index)
if (QtFallbackWebPopup* fallback = qobject_cast<QtFallbackWebPopup*>(m_popup)) {
QRect geometry(rect);
- geometry.moveTopLeft(view->contentsToWindow(rect.topLeft()));
+ geometry.moveTopLeft(view->contentsToWindow(rect.location()));
fallback->setGeometry(geometry);
fallback->setFont(m_popupClient->menuStyle().font().font());
}
diff --git a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
index c67ec2f..de4de3e 100644
--- a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp
@@ -200,6 +200,11 @@ String WebPlatformStrategies::contextMenuItemTagCopyImageToClipboard()
return QCoreApplication::translate("QWebPage", "Copy Image", "Copy Link context menu item");
}
+String WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard()
+{
+ return QCoreApplication::translate("QWebPage", "Copy Image Address", "Copy Image Address menu item");
+}
+
String WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow()
{
return QCoreApplication::translate("QWebPage", "Open Video", "Open Video in New Window");
diff --git a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
index 5f72f46..b760045 100644
--- a/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
+++ b/Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h
@@ -66,6 +66,7 @@ private:
virtual WTF::String contextMenuItemTagOpenImageInNewWindow();
virtual WTF::String contextMenuItemTagDownloadImageToDisk();
virtual WTF::String contextMenuItemTagCopyImageToClipboard();
+ virtual WTF::String contextMenuItemTagCopyImageUrlToClipboard();
virtual WTF::String contextMenuItemTagOpenFrameInNewWindow();
virtual WTF::String contextMenuItemTagCopy();
virtual WTF::String contextMenuItemTagGoBack();
diff --git a/Source/WebKit/qt/declarative/declarative.pro b/Source/WebKit/qt/declarative/declarative.pro
index bc94eed..526cf06 100644
--- a/Source/WebKit/qt/declarative/declarative.pro
+++ b/Source/WebKit/qt/declarative/declarative.pro
@@ -33,7 +33,7 @@ symbian: {
TARGET = $$TARGET$${QT_LIBINFIX}
}
-include(../../../../WebKit.pri)
+include(../../../WebKit.pri)
QT += declarative
diff --git a/Source/WebKit/qt/declarative/qdeclarativewebview.cpp b/Source/WebKit/qt/declarative/qdeclarativewebview.cpp
index e26889e..bcc1f1c 100644
--- a/Source/WebKit/qt/declarative/qdeclarativewebview.cpp
+++ b/Source/WebKit/qt/declarative/qdeclarativewebview.cpp
@@ -141,6 +141,16 @@ void GraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
QGraphicsWebView::mouseMoveEvent(event);
}
+bool GraphicsWebView::sceneEvent(QEvent *event)
+{
+ bool rv = QGraphicsWebView::sceneEvent(event);
+ if (event->type() == QEvent::UngrabMouse) {
+ pressTimer.stop();
+ parent->setKeepMouseGrab(false);
+ }
+ return rv;
+}
+
/*!
\qmlclass WebView QDeclarativeWebView
\ingroup qml-view-elements
@@ -249,7 +259,11 @@ void QDeclarativeWebView::init()
{
d = new QDeclarativeWebViewPrivate(this);
- QWebSettings::enablePersistentStorage();
+ if (QWebSettings::iconDatabasePath().isNull() &&
+ QWebSettings::globalSettings()->localStoragePath().isNull() &&
+ QWebSettings::offlineStoragePath().isNull() &&
+ QWebSettings::offlineWebApplicationCachePath().isNull())
+ QWebSettings::enablePersistentStorage();
setAcceptedMouseButtons(Qt::LeftButton);
setFlag(QGraphicsItem::ItemHasNoContents, true);
@@ -730,11 +744,11 @@ QWebPage* QDeclarativeWebView::page() const
See QWebSettings for details of these properties.
\qml
- WebView {
- settings.pluginsEnabled: true
- settings.standardFontFamily: "Arial"
- ...
- }
+ WebView {
+ settings.pluginsEnabled: true
+ settings.standardFontFamily: "Arial"
+ // ...
+ }
\endqml
*/
QDeclarativeWebSettings* QDeclarativeWebView::settingsObject() const
diff --git a/Source/WebKit/qt/declarative/qdeclarativewebview_p.h b/Source/WebKit/qt/declarative/qdeclarativewebview_p.h
index b2055bf..ca15a1e 100644
--- a/Source/WebKit/qt/declarative/qdeclarativewebview_p.h
+++ b/Source/WebKit/qt/declarative/qdeclarativewebview_p.h
@@ -70,6 +70,8 @@ protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
void timerEvent(QTimerEvent* event);
+ bool sceneEvent(QEvent *event);
+
Q_SIGNALS:
void doubleClick(int clickX, int clickY);
private:
diff --git a/Source/WebKit/qt/docs/docs.pri b/Source/WebKit/qt/docs/docs.pri
index d87dcd6..a56ddb4 100644
--- a/Source/WebKit/qt/docs/docs.pri
+++ b/Source/WebKit/qt/docs/docs.pri
@@ -1,4 +1,4 @@
-include(../../../../WebKit.pri)
+include(../../../WebKit.pri)
unix {
QDOC = SRCDIR=$$PWD/../../.. OUTPUT_DIR=$$OUTPUT_DIR $$(QTDIR)/bin/qdoc3
diff --git a/Source/WebKit/qt/docs/qtwebkit.qdoc b/Source/WebKit/qt/docs/qtwebkit.qdoc
index df22e65..1e76901 100644
--- a/Source/WebKit/qt/docs/qtwebkit.qdoc
+++ b/Source/WebKit/qt/docs/qtwebkit.qdoc
@@ -103,8 +103,8 @@
The following locations are searched for plugins:
\table
- \header \o Linux/Unix (X11) \o Windows
- \row \o{1,3}
+ \header \o Linux/Unix (X11)
+ \row \o
\list
\o \c{.mozilla/plugins} in the user's home directory
\o \c{.netscape/plugins} in the user's home directory
@@ -134,19 +134,20 @@
\o \c{$QTWEBKIT_PLUGIN_PATH}
\endlist
\endlist
+ \endtable
- \o
+ \table
+ \header \o Windows
+ \row \o
\list
\o The user's \c{Application Data\Mozilla\plugins} directory
\o Standard system locations of plugins for Quicktime, Flash, etc.
\endlist
+ \endtable
- \row
- \raw HTML
- <th class="qt-style">Mac OS X</th>
- \endraw
- \row
- \o
+ \table
+ \header \o Mac OS X
+ \row \o
\list
\o \c{Library/Internet Plug-Ins} in the user's home directory
\o The system \c{/Library/Internet Plug-Ins} directory
diff --git a/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index 6b0b58d..3c47d1c 100644
--- a/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -308,7 +308,7 @@ public:
}
Q_INVOKABLE QObjectList myInvokableWithQObjectListArg(const QObjectList &lst) {
m_qtFunctionInvoked = 14;
- m_actuals << qVariantFromValue(lst);
+ m_actuals << QVariant::fromValue(lst);
return lst;
}
Q_INVOKABLE QVariant myInvokableWithVariantArg(const QVariant &v) {
@@ -323,38 +323,38 @@ public:
}
Q_INVOKABLE QList<int> myInvokableWithListOfIntArg(const QList<int> &lst) {
m_qtFunctionInvoked = 17;
- m_actuals << qVariantFromValue(lst);
+ m_actuals << QVariant::fromValue(lst);
return lst;
}
Q_INVOKABLE QObject* myInvokableWithQObjectStarArg(QObject* obj) {
m_qtFunctionInvoked = 18;
- m_actuals << qVariantFromValue(obj);
+ m_actuals << QVariant::fromValue(obj);
return obj;
}
Q_INVOKABLE QBrush myInvokableWithQBrushArg(const QBrush &brush) {
m_qtFunctionInvoked = 19;
- m_actuals << qVariantFromValue(brush);
+ m_actuals << QVariant::fromValue(brush);
return brush;
}
Q_INVOKABLE void myInvokableWithBrushStyleArg(Qt::BrushStyle style) {
m_qtFunctionInvoked = 43;
- m_actuals << qVariantFromValue(style);
+ m_actuals << QVariant::fromValue(style);
}
Q_INVOKABLE void myInvokableWithVoidStarArg(void* arg) {
m_qtFunctionInvoked = 44;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
Q_INVOKABLE void myInvokableWithAmbiguousArg(int arg) {
m_qtFunctionInvoked = 45;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
Q_INVOKABLE void myInvokableWithAmbiguousArg(uint arg) {
m_qtFunctionInvoked = 46;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
Q_INVOKABLE void myInvokableWithDefaultArgs(int arg1, const QString &arg2 = "") {
m_qtFunctionInvoked = 47;
- m_actuals << qVariantFromValue(arg1) << qVariantFromValue(arg2);
+ m_actuals << QVariant::fromValue(arg1) << qVariantFromValue(arg2);
}
Q_INVOKABLE QObject& myInvokableReturningRef() {
m_qtFunctionInvoked = 48;
@@ -366,11 +366,11 @@ public:
}
Q_INVOKABLE void myInvokableWithPointArg(const QPoint &arg) {
const_cast<MyQObject*>(this)->m_qtFunctionInvoked = 50;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
Q_INVOKABLE void myInvokableWithPointArg(const QPointF &arg) {
const_cast<MyQObject*>(this)->m_qtFunctionInvoked = 51;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
Q_INVOKABLE void myInvokableWithBoolArg(bool arg) {
m_qtFunctionInvoked = 52;
@@ -418,7 +418,7 @@ public Q_SLOTS:
}
void myOverloadedSlot(QObject* arg) {
m_qtFunctionInvoked = 41;
- m_actuals << qVariantFromValue(arg);
+ m_actuals << QVariant::fromValue(arg);
}
void myOverloadedSlot(bool arg) {
m_qtFunctionInvoked = 25;
@@ -514,6 +514,24 @@ private:
QVariantList m_actuals;
};
+class MyWebElementSlotOnlyObject : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString tagName READ tagName)
+public slots:
+ void doSomethingWithWebElement(const QWebElement& element)
+ {
+ m_tagName = element.tagName();
+ }
+
+public:
+ QString tagName() const
+ {
+ return m_tagName;
+ }
+private:
+ QString m_tagName;
+};
+
class MyOtherQObject : public MyQObject
{
public:
@@ -584,6 +602,7 @@ private slots:
void findChild();
void findChildren();
void overloadedSlots();
+ void webElementSlotOnly();
void enumerate_data();
void enumerate();
void objectDeleted();
@@ -824,7 +843,7 @@ void tst_QWebFrame::getSetStaticProperty()
QCOMPARE(evalJS("myObject.variantProperty === 'bar'"), sTrue);
m_myObject->setVariantProperty(42);
QCOMPARE(evalJS("myObject.variantProperty === 42"), sTrue);
- m_myObject->setVariantProperty(qVariantFromValue(QBrush()));
+ m_myObject->setVariantProperty(QVariant::fromValue(QBrush()));
//XFAIL
// QCOMPARE(evalJS("typeof myObject.variantProperty"), sVariant);
@@ -1246,7 +1265,7 @@ void tst_QWebFrame::callQtInvokable()
/* XFAIL - variant support
m_myObject->resetQtFunctionInvoked();
{
- m_myObject->setVariantProperty(qVariantFromValue(QBrush()));
+ m_myObject->setVariantProperty(QVariant::fromValue(QBrush()));
QVariant ret = evalJS("myObject.myInvokableWithVariantArg(myObject.variantProperty)");
QVERIFY(ret.isVariant());
QCOMPARE(m_myObject->qtFunctionInvoked(), 15);
@@ -2427,8 +2446,10 @@ void tst_QWebFrame::javaScriptWindowObjectClearedOnEvaluate()
void tst_QWebFrame::setHtml()
{
QString html("<html><head></head><body><p>hello world</p></body></html>");
+ QSignalSpy spy(m_view->page(), SIGNAL(loadFinished(bool)));
m_view->page()->mainFrame()->setHtml(html);
QCOMPARE(m_view->page()->mainFrame()->toHtml(), html);
+ QCOMPARE(spy.count(), 1);
}
void tst_QWebFrame::setHtmlWithResource()
@@ -3257,5 +3278,14 @@ void tst_QWebFrame::setCacheLoadControlAttribute()
QCOMPARE(manager->lastCacheLoad(), QNetworkRequest::PreferNetwork);
}
+void tst_QWebFrame::webElementSlotOnly()
+{
+ MyWebElementSlotOnlyObject object;
+ m_page->mainFrame()->setHtml("<html><head><body></body></html>");
+ m_page->mainFrame()->addToJavaScriptWindowObject("myWebElementSlotObject", &object);
+ evalJS("myWebElementSlotObject.doSomethingWithWebElement(document.body)");
+ QCOMPARE(evalJS("myWebElementSlotObject.tagName"), QString("BODY"));
+}
+
QTEST_MAIN(tst_QWebFrame)
#include "tst_qwebframe.moc"
diff --git a/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
index ec1f336..c9c409d 100644
--- a/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -78,6 +78,7 @@ private slots:
void initTestCase();
void cleanupTestCase();
+ void contextMenuCopy();
void acceptNavigationRequest();
void geolocationRequestJS();
void loadFinished();
@@ -85,6 +86,7 @@ private slots:
void userStyleSheet();
void modified();
void contextMenuCrash();
+ void updatePositionDependentActionsCrash();
void database();
void createPluginWithPluginsEnabled();
void createPluginWithPluginsDisabled();
@@ -133,6 +135,7 @@ private slots:
void infiniteLoopJS();
void networkAccessManagerOnDifferentThread();
void navigatorCookieEnabled();
+ void navigatorCookieEnabledForNetworkAccessManagerOnDifferentThread();
#ifdef Q_OS_MAC
void macCopyUnicodeToClipboard();
@@ -495,11 +498,31 @@ void tst_QWebPage::modified()
QVERIFY(::waitForSignal(m_page, SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*))));
}
+// https://bugs.webkit.org/show_bug.cgi?id=51331
+void tst_QWebPage::updatePositionDependentActionsCrash()
+{
+ QWebView view;
+ view.setHtml("<p>test");
+ QPoint pos(0, 0);
+ view.page()->updatePositionDependentActions(pos);
+ QMenu* contextMenu = 0;
+ foreach (QObject* child, view.children()) {
+ contextMenu = qobject_cast<QMenu*>(child);
+ if (contextMenu)
+ break;
+ }
+ QVERIFY(!contextMenu);
+}
+
+// https://bugs.webkit.org/show_bug.cgi?id=20357
void tst_QWebPage::contextMenuCrash()
{
QWebView view;
view.setHtml("<p>test");
- view.page()->updatePositionDependentActions(QPoint(0, 0));
+ QPoint pos(0, 0);
+ QContextMenuEvent event(QContextMenuEvent::Mouse, pos);
+ view.page()->swallowContextMenuEvent(&event);
+ view.page()->updatePositionDependentActions(pos);
QMenu* contextMenu = 0;
foreach (QObject* child, view.children()) {
contextMenu = qobject_cast<QMenu*>(child);
@@ -2740,6 +2763,19 @@ void tst_QWebPage::navigatorCookieEnabled()
QVERIFY(m_page->mainFrame()->evaluateJavaScript("navigator.cookieEnabled").toBool());
}
+void tst_QWebPage::navigatorCookieEnabledForNetworkAccessManagerOnDifferentThread()
+{
+ QtNAMThread qnamThread;
+ qnamThread.start();
+ m_page->setNetworkAccessManager(qnamThread.networkAccessManager());
+
+ // This call access the cookie jar, the cookie jar must be in the same thread as
+ // the network access manager.
+ QVERIFY(m_page->mainFrame()->evaluateJavaScript("navigator.cookieEnabled").toBool());
+
+ QCOMPARE(qnamThread.networkAccessManager()->cookieJar()->thread(), &qnamThread);
+}
+
#ifdef Q_OS_MAC
void tst_QWebPage::macCopyUnicodeToClipboard()
{
@@ -2755,5 +2791,29 @@ void tst_QWebPage::macCopyUnicodeToClipboard()
}
#endif
+void tst_QWebPage::contextMenuCopy()
+{
+ QWebView view;
+
+ view.setHtml("<a href=\"http://www.google.com\">You cant miss this</a>");
+
+ view.page()->triggerAction(QWebPage::SelectAll);
+ QVERIFY(!view.page()->selectedText().isEmpty());
+
+ QWebElement link = view.page()->mainFrame()->findFirstElement("a");
+ QPoint pos(link.geometry().center());
+ QContextMenuEvent event(QContextMenuEvent::Mouse, pos);
+ view.page()->swallowContextMenuEvent(&event);
+ view.page()->updatePositionDependentActions(pos);
+
+ QList<QMenu*> contextMenus = view.findChildren<QMenu*>();
+ QVERIFY(!contextMenus.isEmpty());
+ QMenu* contextMenu = contextMenus.first();
+ QVERIFY(contextMenu);
+
+ QList<QAction *> list = contextMenu->actions();
+ int index = list.indexOf(view.page()->action(QWebPage::Copy));
+ QVERIFY(index != -1);
+}
QTEST_MAIN(tst_QWebPage)
#include "tst_qwebpage.moc"
diff --git a/Source/WebKit/qt/tests/tests.pri b/Source/WebKit/qt/tests/tests.pri
index 2e30dd0..a795ff8 100644
--- a/Source/WebKit/qt/tests/tests.pri
+++ b/Source/WebKit/qt/tests/tests.pri
@@ -10,7 +10,7 @@ INCLUDEPATH += \
$$PWD \
$$PWD/../Api
-include(../../../../WebKit.pri)
+include(../../../WebKit.pri)
QT += testlib network
QMAKE_RPATHDIR = $$OUTPUT_DIR/lib $$QMAKE_RPATHDIR
diff --git a/Source/WebKit/win/ChangeLog b/Source/WebKit/win/ChangeLog
index 6a3b53c..a24c061 100644
--- a/Source/WebKit/win/ChangeLog
+++ b/Source/WebKit/win/ChangeLog
@@ -1,3 +1,268 @@
+2011-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A little more encapsulation for the heap: Removed CollectorHeapIterator
+ https://bugs.webkit.org/show_bug.cgi?id=54298
+
+ * WebCoreStatistics.cpp:
+ (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
+
+2011-02-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: follow up on InspectorAgent split -
+ removing unnecessary methods from InspectorController.
+ https://bugs.webkit.org/show_bug.cgi?id=54093
+
+ * WebInspector.cpp:
+ (WebInspector::showConsole):
+ (WebInspector::toggleProfilingJavaScript):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/WebChromeClient.h:
+
+2011-02-08 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Adam Roben.
+
+ <rdar://problem/8932077> REGRESSION (5.0.3-ToT): United boarding pass has wrong layout when printed
+
+ Windows never got patched to pass in the page height to WebCore, so when WebCore's pagination got re-written to depend on this
+ value, Windows got broken. Patch setPrinting to be identical to WebKit1 on OS X and to have it take an extra minimum page height
+ argument.
+
+ * WebFrame.cpp:
+ (WebFrame::setPrinting):
+ (WebFrame::setInPrintingMode):
+ * WebFrame.h:
+
+2011-02-02 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53169
+
+ Minor change enforced by major changes in WebCore/inspector/InspectorController.
+
+ * WebInspector.cpp:
+ (WebInspector::isTimelineProfilingEnabled):
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/WebDragClient.cpp:
+ (WebDragClient::startDrag):
+ * WebCoreSupport/WebDragClient.h:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ * WebHistory.cpp:
+ (WebHistory::orderedLastVisitedDays): Calls adoptArrayPtr.
+ * WebPreferences.cpp:
+ (WebPreferences::copyWebKitPreferencesToCFPreferences): Ditto.
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebCoreSupport/WebInspectorClient.cpp:
+ (WebInspectorClient::openInspectorFrontend):
+ (WebInspectorFrontendClient::WebInspectorFrontendClient):
+ * WebCoreSupport/WebInspectorClient.h:
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebFrameLoaderClient::didRunInsecureContent):
+ * WebCoreSupport/WebFrameLoaderClient.h:
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Removal of right()/bottom(), converting to maxX()/maxY().
+
+ * DOMHTMLClasses.cpp:
+ (DOMHTMLInputElement::rectOnScreen):
+ * WebCoreSupport/EmbeddedWidget.cpp:
+ (EmbeddedWidget::frameRectsChanged):
+ * WebFrame.cpp:
+ (WebFrame::computePageRects):
+ * WebScrollBar.cpp:
+ (WebScrollBar::frameRect):
+ * WebView.cpp:
+ (WebView::addToDirtyRegion):
+ (WebView::visibleContentRect):
+ (WebView::prepareCandidateWindow):
+
+2011-01-31 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Fix the clean Windows build.
+
+ * WebKitGraphics.cpp:
+ (WebDrawText):
+
+2011-01-28 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Downloads in WK2 on Windows should write resume data to bundle
+ https://bugs.webkit.org/show_bug.cgi?id=53282
+ <rdar://problem/8753077>
+
+ Reviewed by Alice Liu.
+
+ * WebDownload.cpp:
+ (WebDownload::bundlePathForTargetPath):
+ Use the new WebCore::DownloadBundle function.
+ (WebDownload::request):
+
+ * WebDownload.h:
+ Removed declarations for functions that were moved to a new location.
+
+ * WebDownloadCFNet.cpp:
+ (WebDownload::initToResumeWithBundle):
+ Use the new WebCore::DownloadBundle function.
+ (WebDownload::cancelForResume):
+ Fix a leak of the resume data CFDataRef by using adoptCF(). Use the new
+ WebCore::DownloadBundle function.
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/WebChromeClient.cpp:
+ (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/WebChromeClient.h:
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * WebFrame.cpp:
+ (WebFrame::url):
+
+2011-01-27 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Fix scrollbars in Safari's Downloads window and Bookmarks view by
+ implementing two needed functions from ScrollableArea.
+
+ * WebScrollBar.cpp:
+ (WebScrollBar::horizontalScrollbar): Return the WebCore::Scrollbar if
+ we are a horizontal scrollbar.
+ (WebScrollBar::verticalScrollbar): Return the WebCore::Scrollbar if we
+ are a vertical scrollbar.
+ * WebScrollBar.h:
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Trim down #includes in WebView.h
+
+ Rubber-stamped by Steve Falkenburg.
+
+ * WebView.cpp: Moved some #includes here from the header file.
+
+ * WebView.h: Replaced some broader #includes with more specific ones, plus a
+ forward-declaration.
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Windows production build fix.
+ Build correct configuration of Interfaces for Debug_All.
+
+ * WebKit.vcproj/WebKit.submit.sln:
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber-stamped by Adam Roben.
+
+ Windows production build fix.
+ Use correct environment variable escaping
+
+ * WebKit.vcproj/WebKit.make:
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * WebView.cpp:
+ (WebView::notifyPreferencesChanged):
+
+2011-01-25 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove "attached" state related methods from InspectorAgent
+ https://bugs.webkit.org/show_bug.cgi?id=53086
+
+ * WebCoreSupport/WebInspectorClient.cpp:
+ (WebInspectorFrontendClient::attachWindow):
+ (WebInspectorFrontendClient::detachWindow):
+ (WebInspectorFrontendClient::showWindowWithoutNotifications):
+ * WebCoreSupport/WebInspectorClient.h:
+
+2011-01-24 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * WebKit.vcproj/WebKit.make: Update for move of WebKit into Source.
+
+2011-01-21 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ * FullscreenVideoController.cpp: Use FontMetrics instead of Font to access the metrics.
+ (FullscreenVideoController::draw):
+ * WebCoreSupport/WebDragClient.cpp: Ditto.
+ (WebDragClient::createDragImageForLink):
+ * WebKitGraphics.cpp: Ditto.
+ (FontMetrics):
+
2011-01-21 Chris Rogers <crogers@google.com>
Reviewed by Darin Fisher.
diff --git a/Source/WebKit/win/DOMHTMLClasses.cpp b/Source/WebKit/win/DOMHTMLClasses.cpp
index 2dd6deb..7fe2748 100644
--- a/Source/WebKit/win/DOMHTMLClasses.cpp
+++ b/Source/WebKit/win/DOMHTMLClasses.cpp
@@ -1314,8 +1314,8 @@ HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::rectOnScreen(
IntRect coreRect = view->contentsToScreen(renderer->absoluteBoundingBoxRect());
rect->left = coreRect.x();
rect->top = coreRect.y();
- rect->right = coreRect.right();
- rect->bottom = coreRect.bottom();
+ rect->right = coreRect.maxX();
+ rect->bottom = coreRect.maxY();
return S_OK;
}
diff --git a/Source/WebKit/win/FullscreenVideoController.cpp b/Source/WebKit/win/FullscreenVideoController.cpp
index ab954f8..6adbcaa 100644
--- a/Source/WebKit/win/FullscreenVideoController.cpp
+++ b/Source/WebKit/win/FullscreenVideoController.cpp
@@ -532,15 +532,16 @@ void FullscreenVideoController::draw()
// the text at the center of the slider.
// Left string
s = timeToString(currentTime());
+ int fontHeight = font.fontMetrics().height();
TextRun leftText(s);
context.setFillColor(Color(textColor), ColorSpaceDeviceRGB);
- context.drawText(font, leftText, IntPoint(windowWidth / 2 - timeSliderWidth / 2 - margin - font.width(leftText), windowHeight - margin - sliderHeight / 2 + font.height() / 4));
+ context.drawText(font, leftText, IntPoint(windowWidth / 2 - timeSliderWidth / 2 - margin - font.width(leftText), windowHeight - margin - sliderHeight / 2 + fontHeight / 4));
// Right string
s = timeToString(currentTime() - duration());
TextRun rightText(s);
context.setFillColor(Color(textColor), ColorSpaceDeviceRGB);
- context.drawText(font, rightText, IntPoint(windowWidth / 2 + timeSliderWidth / 2 + margin, windowHeight - margin - sliderHeight / 2 + font.height() / 4));
+ context.drawText(font, rightText, IntPoint(windowWidth / 2 + timeSliderWidth / 2 + margin, windowHeight - margin - sliderHeight / 2 + fontHeight / 4));
// Copy to the window
BLENDFUNCTION blendFunction = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
diff --git a/Source/WebKit/win/WebCoreStatistics.cpp b/Source/WebKit/win/WebCoreStatistics.cpp
index 29feea5..f5c399f 100644
--- a/Source/WebKit/win/WebCoreStatistics.cpp
+++ b/Source/WebKit/win/WebCoreStatistics.cpp
@@ -139,8 +139,8 @@ HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptProtectedObjectTypeCounts
/* [retval][out] */ IPropertyBag2** typeNamesAndCounts)
{
JSLock lock(SilenceAssertionsOnly);
- OwnPtr<HashCountedSet<const char*> > jsObjectTypeNames(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts());
- typedef HashCountedSet<const char*>::const_iterator Iterator;
+ OwnPtr<TypeCountSet> jsObjectTypeNames(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts());
+ typedef TypeCountSet::const_iterator Iterator;
Iterator end = jsObjectTypeNames->end();
HashMap<String, int> typeCountMap;
for (Iterator current = jsObjectTypeNames->begin(); current != end; ++current)
diff --git a/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp b/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
index 371ff3a..fb2b564 100644
--- a/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
+++ b/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
@@ -120,7 +120,7 @@ void EmbeddedWidget::frameRectsChanged()
rgn = ::CreateRectRgn(0, 0, 0, 0);
::SetWindowRgn(m_window, rgn, FALSE);
} else {
- rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.right(), m_clipRect.bottom());
+ rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
::SetWindowRgn(m_window, rgn, TRUE);
}
@@ -128,7 +128,7 @@ void EmbeddedWidget::frameRectsChanged()
::MoveWindow(m_window, m_windowRect.x(), m_windowRect.y(), m_windowRect.width(), m_windowRect.height(), TRUE);
if (clipToZeroRect) {
- rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.right(), m_clipRect.bottom());
+ rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
::SetWindowRgn(m_window, rgn, TRUE);
}
}
diff --git a/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp
index f5cce4e..47ca713 100644
--- a/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp
+++ b/Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp
@@ -862,6 +862,11 @@ bool WebChromeClient::selectItemWritingDirectionIsNatural()
return true;
}
+bool WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> WebChromeClient::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuWin(client));
diff --git a/Source/WebKit/win/WebCoreSupport/WebChromeClient.h b/Source/WebKit/win/WebCoreSupport/WebChromeClient.h
index b6c2525..9298f1c 100644
--- a/Source/WebKit/win/WebCoreSupport/WebChromeClient.h
+++ b/Source/WebKit/win/WebCoreSupport/WebChromeClient.h
@@ -144,8 +144,6 @@ public:
virtual void formStateDidChange(const WebCore::Node*) { }
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
#if USE(ACCELERATED_COMPOSITING)
// Pass 0 as the GraphicsLayer to detatch the root layer.
virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
@@ -175,6 +173,7 @@ public:
#endif
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
diff --git a/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp b/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp
index 184df95..c232867 100644
--- a/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp
+++ b/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp
@@ -35,39 +35,11 @@
#include <WebCore/ClipboardWin.h>
#include <WebCore/DragController.h>
#include <WebCore/DragData.h>
-#include <WebCore/Font.h>
-#include <WebCore/FontDescription.h>
-#include <WebCore/FontSelector.h>
#include <WebCore/FrameView.h>
#include <WebCore/GraphicsContext.h>
#include <WebCore/Page.h>
-#include <WebCore/Settings.h>
-#include <WebCore/StringTruncator.h>
-#include <WebCore/TextRun.h>
-#include <WebCore/WebCoreTextRenderer.h>
#pragma warning(pop)
-namespace WebCore {
- HBITMAP allocImage(HDC dc, IntSize size, PlatformGraphicsContext** targetRef);
- void deallocContext(PlatformGraphicsContext* target);
-}
-
-
-#define DRAG_LABEL_BORDER_X 4
-// Keep border_y in synch with DragController::LinkDragBorderInset
-#define DRAG_LABEL_BORDER_Y 2
-#define DRAG_LABEL_RADIUS 5
-#define DRAG_LABEL_BORDER_Y_OFFSET 2
-
-#define MIN_DRAG_LABEL_WIDTH_BEFORE_CLIP 120
-
-// Observation says max size is 200x200
-#define MAX_DRAG_LABEL_WIDTH 200
-#define MAX_DRAG_LABEL_STRING_WIDTH (MAX_DRAG_LABEL_WIDTH - 2 * DRAG_LABEL_BORDER_X)
-
-#define DRAG_LINK_LABEL_FONT_SIZE 11
-#define DRAG_LINK_URL_FONT_SIZE 10
-
using namespace WebCore;
static DWORD draggingSourceOperationMaskToDragCursors(DragOperation op)
@@ -197,129 +169,6 @@ void WebDragClient::startDrag(DragImageRef image, const IntPoint& imageOrigin, c
}
}
-static Font dragLabelFont(int size, bool bold, FontRenderingMode renderingMode)
-{
- NONCLIENTMETRICS metrics;
- metrics.cbSize = sizeof(metrics);
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0);
- FontDescription desc;
- desc.setWeight(bold ? FontWeightBold : FontWeightNormal);
- FontFamily family;
- family.setFamily(metrics.lfSmCaptionFont.lfFaceName);
- desc.setFamily(family);
- desc.setSpecifiedSize((float)size);
- desc.setComputedSize((float)size);
- desc.setRenderingMode(renderingMode);
- Font result = Font(desc, 0, 0);
- result.update(0);
- return result;
-}
-
-DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& inLabel, Frame* frame)
-{
- // This is more or less an exact match for the Mac OS X code.
-
- const Font* labelFont;
- const Font* urlFont;
-
- if (frame->settings() && frame->settings()->fontRenderingMode() == AlternateRenderingMode) {
- static const Font alternateRenderingModeLabelFont = dragLabelFont(DRAG_LINK_LABEL_FONT_SIZE, true, AlternateRenderingMode);
- static const Font alternateRenderingModeURLFont = dragLabelFont(DRAG_LINK_URL_FONT_SIZE, false, AlternateRenderingMode);
- labelFont = &alternateRenderingModeLabelFont;
- urlFont = &alternateRenderingModeURLFont;
- } else {
- static const Font normalRenderingModeLabelFont = dragLabelFont(DRAG_LINK_LABEL_FONT_SIZE, true, NormalRenderingMode);
- static const Font normalRenderingModeURLFont = dragLabelFont(DRAG_LINK_URL_FONT_SIZE, false, NormalRenderingMode);
- labelFont = &normalRenderingModeLabelFont;
- urlFont = &normalRenderingModeURLFont;
- }
-
- bool drawURLString = true;
- bool clipURLString = false;
- bool clipLabelString = false;
-
- String urlString = url.string();
- String label = inLabel;
- if (label.isEmpty()) {
- drawURLString = false;
- label = urlString;
- }
-
- //First step in drawing the link drag image width
- TextRun labelRun(label.impl());
- TextRun urlRun(urlString.impl());
- IntSize labelSize(labelFont->width(labelRun), labelFont->ascent() + labelFont->descent());
-
- if (labelSize.width() > MAX_DRAG_LABEL_STRING_WIDTH){
- labelSize.setWidth(MAX_DRAG_LABEL_STRING_WIDTH);
- clipLabelString = true;
- }
-
- IntSize urlStringSize;
- IntSize imageSize(labelSize.width() + DRAG_LABEL_BORDER_X * 2,
- labelSize.height() + DRAG_LABEL_BORDER_Y * 2);
-
- if (drawURLString) {
- urlStringSize.setWidth(urlFont->width(urlRun));
- urlStringSize.setHeight(urlFont->ascent() + urlFont->descent());
- imageSize.setHeight(imageSize.height() + urlStringSize.height());
- if (urlStringSize.width() > MAX_DRAG_LABEL_STRING_WIDTH) {
- imageSize.setWidth(MAX_DRAG_LABEL_WIDTH);
- clipURLString = true;
- } else {
- imageSize.setWidth(std::max(labelSize.width(), urlStringSize.width()) + DRAG_LABEL_BORDER_X * 2);
- }
- }
-
- // We now know how big the image needs to be, so we create and
- // fill the background
- HBITMAP image = 0;
- HDC dc = GetDC(0);
- HDC workingDC = CreateCompatibleDC(dc);
- if (!workingDC) {
- ReleaseDC(0, dc);
- return 0;
- }
-
- PlatformGraphicsContext* contextRef;
- image = allocImage(workingDC, imageSize, &contextRef);
- if (!image) {
- DeleteDC(workingDC);
- ReleaseDC(0, dc);
- return 0;
- }
-
- ::SelectObject(workingDC, image);
- GraphicsContext context(contextRef);
- // On Mac alpha is {0.7, 0.7, 0.7, 0.8}, however we can't control alpha
- // for drag images on win, so we use 1
- static const Color backgroundColor(140, 140, 140);
- static const IntSize radii(DRAG_LABEL_RADIUS, DRAG_LABEL_RADIUS);
- IntRect rect(0, 0, imageSize.width(), imageSize.height());
- context.fillRoundedRect(rect, radii, radii, radii, radii, backgroundColor, ColorSpaceDeviceRGB);
-
- // Draw the text
- static const Color topColor(0, 0, 0, 255); //original alpha = 0.75
- static const Color bottomColor(255, 255, 255, 127); //original alpha = 0.5
- if (drawURLString) {
- if (clipURLString)
- urlString = StringTruncator::rightTruncate(urlString, imageSize.width() - (DRAG_LABEL_BORDER_X * 2.0f), *urlFont, false);
- IntPoint textPos(DRAG_LABEL_BORDER_X, imageSize.height() - (DRAG_LABEL_BORDER_Y_OFFSET + urlFont->descent()));
- WebCoreDrawDoubledTextAtPoint(context, urlString, textPos, *urlFont, topColor, bottomColor);
- }
-
- if (clipLabelString)
- label = StringTruncator::rightTruncate(label, imageSize.width() - (DRAG_LABEL_BORDER_X * 2.0f), *labelFont, false);
-
- IntPoint textPos(DRAG_LABEL_BORDER_X, DRAG_LABEL_BORDER_Y + labelFont->pixelSize());
- WebCoreDrawDoubledTextAtPoint(context, label, textPos, *labelFont, topColor, bottomColor);
-
- deallocContext(contextRef);
- DeleteDC(workingDC);
- ReleaseDC(0, dc);
- return image;
-}
-
void WebDragClient::dragControllerDestroyed()
{
delete this;
diff --git a/Source/WebKit/win/WebCoreSupport/WebDragClient.h b/Source/WebKit/win/WebCoreSupport/WebDragClient.h
index da2d208..303edd6 100644
--- a/Source/WebKit/win/WebCoreSupport/WebDragClient.h
+++ b/Source/WebKit/win/WebCoreSupport/WebDragClient.h
@@ -39,7 +39,6 @@ public:
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint&);
virtual void willPerformDragSourceAction(WebCore::DragSourceAction, const WebCore::IntPoint&, WebCore::Clipboard*);
virtual void startDrag(WebCore::DragImageRef, const WebCore::IntPoint&, const WebCore::IntPoint&, WebCore::Clipboard*, WebCore::Frame*, bool);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const WTF::String&, WebCore::Frame*);
private:
WebView* m_webView;
};
diff --git a/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp b/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
index 7fd2b98..710fec2 100644
--- a/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
+++ b/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
@@ -628,7 +628,7 @@ void WebFrameLoaderClient::didDisplayInsecureContent()
frameLoadDelegatePriv2->didDisplayInsecureContent(webView);
}
-void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin* origin)
+void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin* origin, const KURL& insecureURL)
{
COMPtr<IWebSecurityOrigin> webSecurityOrigin = WebSecurityOrigin::createInstance(origin);
diff --git a/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h b/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
index 573b58f..5fada31 100644
--- a/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
+++ b/Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
@@ -99,7 +99,7 @@ public:
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
virtual void setTitle(const WTF::String& title, const WebCore::KURL&);
diff --git a/Source/WebKit/win/WebCoreSupport/WebInspectorClient.cpp b/Source/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
index 76ebc8f..2922485 100644
--- a/Source/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
+++ b/Source/WebKit/win/WebCoreSupport/WebInspectorClient.cpp
@@ -173,7 +173,7 @@ void WebInspectorClient::openInspectorFrontend(InspectorController* inspectorCon
return;
m_frontendPage = core(frontendWebView.get());
- WebInspectorFrontendClient* frontendClient = new WebInspectorFrontendClient(m_inspectedWebView, m_inspectedWebViewHwnd, frontendHwnd, frontendWebView, frontendWebViewHwnd, this);
+ WebInspectorFrontendClient* frontendClient = new WebInspectorFrontendClient(m_inspectedWebView, m_inspectedWebViewHwnd, frontendHwnd, frontendWebView, frontendWebViewHwnd, this, createFrontendSettings());
m_frontendPage->inspectorController()->setInspectorFrontendClient(frontendClient);
m_frontendHwnd = frontendHwnd;
}
@@ -206,8 +206,8 @@ void WebInspectorClient::updateHighlight()
m_highlight->update();
}
-WebInspectorFrontendClient::WebInspectorFrontendClient(WebView* inspectedWebView, HWND inspectedWebViewHwnd, HWND frontendHwnd, const COMPtr<WebView>& frontendWebView, HWND frontendWebViewHwnd, WebInspectorClient* inspectorClient)
- : InspectorFrontendClientLocal(inspectedWebView->page()->inspectorController(), core(frontendWebView.get()))
+WebInspectorFrontendClient::WebInspectorFrontendClient(WebView* inspectedWebView, HWND inspectedWebViewHwnd, HWND frontendHwnd, const COMPtr<WebView>& frontendWebView, HWND frontendWebViewHwnd, WebInspectorClient* inspectorClient, PassOwnPtr<Settings> settings)
+ : InspectorFrontendClientLocal(inspectedWebView->page()->inspectorController(), core(frontendWebView.get()), settings)
, m_inspectedWebView(inspectedWebView)
, m_inspectedWebViewHwnd(inspectedWebViewHwnd)
, m_inspectorClient(inspectorClient)
@@ -271,8 +271,7 @@ void WebInspectorFrontendClient::attachWindow()
if (m_attached)
return;
- // FIXME: This flag can be saved to the flags storage directly.
- m_inspectedWebView->page()->inspectorController()->setInspectorStartsAttached(true);
+ m_inspectorClient->setInspectorStartsAttached(true);
closeWindowWithoutNotifications();
showWindowWithoutNotifications();
@@ -283,8 +282,7 @@ void WebInspectorFrontendClient::detachWindow()
if (!m_attached)
return;
- // FIXME: This flag can be saved to the flags storage directly.
- m_inspectedWebView->page()->inspectorController()->setInspectorStartsAttached(false);
+ m_inspectorClient->setInspectorStartsAttached(false);
closeWindowWithoutNotifications();
showWindowWithoutNotifications();
@@ -365,7 +363,7 @@ void WebInspectorFrontendClient::showWindowWithoutNotifications()
else {
// If no preference is set - default to an attached window. This is important for inspector LayoutTests.
// FIXME: This flag can be fetched directly from the flags storage.
- shouldAttach = m_inspectedWebView->page()->inspectorController()->inspectorStartsAttached();
+ shouldAttach = m_inspectorClient->inspectorStartsAttached();
if (shouldAttach && !canAttachWindow())
shouldAttach = false;
diff --git a/Source/WebKit/win/WebCoreSupport/WebInspectorClient.h b/Source/WebKit/win/WebCoreSupport/WebInspectorClient.h
index 0c38247..a059559 100644
--- a/Source/WebKit/win/WebCoreSupport/WebInspectorClient.h
+++ b/Source/WebKit/win/WebCoreSupport/WebInspectorClient.h
@@ -34,6 +34,7 @@
#include <WebCore/InspectorFrontendClientLocal.h>
#include <WebCore/PlatformString.h>
#include <WebCore/WindowMessageListener.h>
+#include <wtf/Forward.h>
#include <wtf/OwnPtr.h>
#include <windows.h>
@@ -58,11 +59,13 @@ public:
virtual void highlight(WebCore::Node*);
virtual void hideHighlight();
- virtual void populateSetting(const WTF::String& key, WTF::String* value);
- virtual void storeSetting(const WTF::String& key, const WTF::String& value);
-
virtual bool sendMessageToFrontend(const WTF::String&);
+ bool inspectorStartsAttached();
+ void setInspectorStartsAttached(bool);
+
+ void releaseFrontendPage();
+
void updateHighlight();
void frontendClosing()
{
@@ -70,9 +73,9 @@ public:
releaseFrontendPage();
}
- void releaseFrontendPage();
private:
~WebInspectorClient();
+ WTF::PassOwnPtr<WebCore::InspectorFrontendClientLocal::Settings> createFrontendSettings();
WebView* m_inspectedWebView;
WebCore::Page* m_frontendPage;
@@ -84,7 +87,7 @@ private:
class WebInspectorFrontendClient : public WebCore::InspectorFrontendClientLocal, WebCore::WindowMessageListener {
public:
- WebInspectorFrontendClient(WebView* inspectedWebView, HWND inspectedWebViewHwnd, HWND frontendHwnd, const COMPtr<WebView>& frotnendWebView, HWND frontendWebViewHwnd, WebInspectorClient* inspectorClient);
+ WebInspectorFrontendClient(WebView* inspectedWebView, HWND inspectedWebViewHwnd, HWND frontendHwnd, const COMPtr<WebView>& frotnendWebView, HWND frontendWebViewHwnd, WebInspectorClient*, WTF::PassOwnPtr<Settings>);
virtual void frontendLoaded();
diff --git a/Source/WebKit/win/WebDownload.cpp b/Source/WebKit/win/WebDownload.cpp
index fc72232..45e36cc 100644
--- a/Source/WebKit/win/WebDownload.cpp
+++ b/Source/WebKit/win/WebDownload.cpp
@@ -38,12 +38,9 @@
#include "WebURLResponse.h"
#include <wtf/text/CString.h>
-#include <io.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
#pragma warning(push, 0)
#include <WebCore/BString.h>
+#include <WebCore/DownloadBundle.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceHandle.h>
@@ -55,18 +52,6 @@
using namespace WebCore;
-// Download Bundle file utilities ----------------------------------------------------------------
-const String& WebDownload::bundleExtension()
-{
- DEFINE_STATIC_LOCAL(const String, bundleExtension, (".download"));
- return bundleExtension;
-}
-
-UInt32 WebDownload::bundleMagicNumber()
-{
- return 0xDECAF4EA;
-}
-
// WebDownload ----------------------------------------------------------------
WebDownload::WebDownload()
@@ -165,7 +150,7 @@ HRESULT STDMETHODCALLTYPE WebDownload::bundlePathForTargetPath(
if (bundle[bundle.length()-1] == '/')
bundle.truncate(1);
- bundle += bundleExtension();
+ bundle += DownloadBundle::fileExtension();
*bundlePath = SysAllocStringLen(bundle.characters(), bundle.length());
if (!*bundlePath)
return E_FAIL;
@@ -182,148 +167,3 @@ HRESULT STDMETHODCALLTYPE WebDownload::request(
}
return S_OK;
}
-
-// Download Bundle file utilities ----------------------------------------------------------------
-
-CFDataRef WebDownload::extractResumeDataFromBundle(const String& bundlePath)
-{
- if (bundlePath.isEmpty()) {
- LOG_ERROR("Cannot create resume data from empty download bundle path");
- return 0;
- }
-
- // Open a handle to the bundle file
- String nullifiedPath = bundlePath;
- FILE* bundle = 0;
- if (_wfopen_s(&bundle, nullifiedPath.charactersWithNullTermination(), TEXT("r+b")) || !bundle) {
- LOG_ERROR("Failed to open file %s to get resume data", bundlePath.ascii().data());
- return 0;
- }
-
- CFDataRef result = 0;
- Vector<UInt8> footerBuffer;
-
- // Stat the file to get its size
- struct _stat64 fileStat;
- if (_fstat64(_fileno(bundle), &fileStat))
- goto exit;
-
- // Check for the bundle magic number at the end of the file
- fpos_t footerMagicNumberPosition = fileStat.st_size - 4;
- ASSERT(footerMagicNumberPosition >= 0);
- if (footerMagicNumberPosition < 0)
- goto exit;
- if (fsetpos(bundle, &footerMagicNumberPosition))
- goto exit;
-
- UInt32 footerMagicNumber = 0;
- if (fread(&footerMagicNumber, 4, 1, bundle) != 1) {
- LOG_ERROR("Failed to read footer magic number from the bundle - errno(%i)", errno);
- goto exit;
- }
-
- if (footerMagicNumber != bundleMagicNumber()) {
- LOG_ERROR("Footer's magic number does not match 0x%X - errno(%i)", bundleMagicNumber(), errno);
- goto exit;
- }
-
- // Now we're *reasonably* sure this is a .download bundle we actually wrote.
- // Get the length of the resume data
- fpos_t footerLengthPosition = fileStat.st_size - 8;
- ASSERT(footerLengthPosition >= 0);
- if (footerLengthPosition < 0)
- goto exit;
-
- if (fsetpos(bundle, &footerLengthPosition))
- goto exit;
-
- UInt32 footerLength = 0;
- if (fread(&footerLength, 4, 1, bundle) != 1) {
- LOG_ERROR("Failed to read ResumeData length from the bundle - errno(%i)", errno);
- goto exit;
- }
-
- // Make sure theres enough bytes to read in for the resume data, and perform the read
- fpos_t footerStartPosition = fileStat.st_size - 8 - footerLength;
- ASSERT(footerStartPosition >= 0);
- if (footerStartPosition < 0)
- goto exit;
- if (fsetpos(bundle, &footerStartPosition))
- goto exit;
-
- footerBuffer.resize(footerLength);
- if (fread(footerBuffer.data(), 1, footerLength, bundle) != footerLength) {
- LOG_ERROR("Failed to read ResumeData from the bundle - errno(%i)", errno);
- goto exit;
- }
-
- // CFURLDownload will seek to the appropriate place in the file (before our footer) and start overwriting from there
- // However, say we were within a few hundred bytes of the end of a download when it was paused -
- // The additional footer extended the length of the file beyond its final length, and there will be junk data leftover
- // at the end. Therefore, now that we've retrieved the footer data, we need to truncate it.
- if (errno_t resizeError = _chsize_s(_fileno(bundle), footerStartPosition)) {
- LOG_ERROR("Failed to truncate the resume footer off the end of the file - errno(%i)", resizeError);
- goto exit;
- }
-
- // Finally, make the resume data. Now, it is possible by some twist of fate the bundle magic number
- // was naturally at the end of the file and its not actually a valid bundle. That, or someone engineered
- // it that way to try to attack us. In that cause, this CFData will successfully create but when we
- // actually try to start the CFURLDownload using this bogus data, it will fail and we will handle that gracefully
- result = CFDataCreate(0, footerBuffer.data(), footerLength);
-exit:
- fclose(bundle);
- return result;
-}
-
-HRESULT WebDownload::appendResumeDataToBundle(CFDataRef resumeData, const String& bundlePath)
-{
- if (!resumeData) {
- LOG_ERROR("Invalid resume data to write to bundle path");
- return E_FAIL;
- }
- if (bundlePath.isEmpty()) {
- LOG_ERROR("Cannot write resume data to empty download bundle path");
- return E_FAIL;
- }
-
- String nullifiedPath = bundlePath;
- FILE* bundle = 0;
- if (_wfopen_s(&bundle, nullifiedPath.charactersWithNullTermination(), TEXT("ab")) || !bundle) {
- LOG_ERROR("Failed to open file %s to append resume data", bundlePath.ascii().data());
- return E_FAIL;
- }
-
- HRESULT hr = E_FAIL;
-
- const UInt8* resumeBytes = CFDataGetBytePtr(resumeData);
- ASSERT(resumeBytes);
- if (!resumeBytes)
- goto exit;
-
- UInt32 resumeLength = CFDataGetLength(resumeData);
- ASSERT(resumeLength > 0);
- if (resumeLength < 1)
- goto exit;
-
- if (fwrite(resumeBytes, 1, resumeLength, bundle) != resumeLength) {
- LOG_ERROR("Failed to write resume data to the bundle - errno(%i)", errno);
- goto exit;
- }
-
- if (fwrite(&resumeLength, 4, 1, bundle) != 1) {
- LOG_ERROR("Failed to write footer length to the bundle - errno(%i)", errno);
- goto exit;
- }
-
- const UInt32& magic = bundleMagicNumber();
- if (fwrite(&magic, 4, 1, bundle) != 1) {
- LOG_ERROR("Failed to write footer magic number to the bundle - errno(%i)", errno);
- goto exit;
- }
-
- hr = S_OK;
-exit:
- fclose(bundle);
- return hr;
-}
diff --git a/Source/WebKit/win/WebDownload.h b/Source/WebKit/win/WebDownload.h
index bbb645e..3e8e734 100644
--- a/Source/WebKit/win/WebDownload.h
+++ b/Source/WebKit/win/WebDownload.h
@@ -122,11 +122,6 @@ public:
#endif
protected:
- static CFDataRef extractResumeDataFromBundle(const WTF::String&);
- static HRESULT appendResumeDataToBundle(CFDataRef, const WTF::String&);
- static const WTF::String& bundleExtension();
- static UInt32 bundleMagicNumber();
-
ULONG m_refCount;
WTF::String m_destination;
diff --git a/Source/WebKit/win/WebDownloadCFNet.cpp b/Source/WebKit/win/WebDownloadCFNet.cpp
index a199315..5a1f1bc 100644
--- a/Source/WebKit/win/WebDownloadCFNet.cpp
+++ b/Source/WebKit/win/WebDownloadCFNet.cpp
@@ -48,6 +48,7 @@
#include <WebCore/AuthenticationCF.h>
#include <WebCore/BString.h>
#include <WebCore/CredentialStorage.h>
+#include <WebCore/DownloadBundle.h>
#include <WebCore/LoaderRunLoopCF.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceHandle.h>
@@ -167,8 +168,8 @@ HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
{
LOG(Download, "Attempting resume of download bundle %s", String(bundlePath, SysStringLen(bundlePath)).ascii().data());
- RetainPtr<CFDataRef> resumeData(AdoptCF, extractResumeDataFromBundle(String(bundlePath, SysStringLen(bundlePath))));
-
+ RetainPtr<CFDataRef> resumeData(AdoptCF, DownloadBundle::extractResumeData(String(bundlePath, SysStringLen(bundlePath))));
+
if (!resumeData)
return E_FAIL;
@@ -194,9 +195,9 @@ HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
m_bundlePath = String(bundlePath, SysStringLen(bundlePath));
// Attempt to remove the ".download" extension from the bundle for the final file destination
// Failing that, we clear m_destination and will ask the delegate later once the download starts
- if (m_bundlePath.endsWith(bundleExtension(), false)) {
+ if (m_bundlePath.endsWith(DownloadBundle::fileExtension(), false)) {
m_destination = m_bundlePath.threadsafeCopy();
- m_destination.truncate(m_destination.length() - bundleExtension().length());
+ m_destination.truncate(m_destination.length() - DownloadBundle::fileExtension().length());
} else
m_destination = String();
@@ -249,14 +250,14 @@ HRESULT STDMETHODCALLTYPE WebDownload::cancelForResume()
CFURLDownloadSetDeletesUponFailure(m_download.get(), false);
CFURLDownloadCancel(m_download.get());
- resumeData = CFURLDownloadCopyResumeData(m_download.get());
+ resumeData.adoptCF(CFURLDownloadCopyResumeData(m_download.get()));
if (!resumeData) {
LOG(Download, "WebDownload - Unable to create resume data for download (%p)", this);
goto exit;
}
- appendResumeDataToBundle(resumeData.get(), m_bundlePath);
-
+ DownloadBundle::appendResumeData(resumeData.get(), m_bundlePath);
+
exit:
m_download = 0;
return hr;
@@ -288,7 +289,7 @@ HRESULT STDMETHODCALLTYPE WebDownload::setDestination(
return E_FAIL;
m_destination = String(path, SysStringLen(path));
- m_bundlePath = m_destination + bundleExtension();
+ m_bundlePath = m_destination + DownloadBundle::fileExtension();
CFURLRef pathURL = MarshallingHelpers::PathStringToFileCFURLRef(m_bundlePath);
CFURLDownloadSetDestination(m_download.get(), pathURL, !!allowOverwrite);
diff --git a/Source/WebKit/win/WebFrame.cpp b/Source/WebKit/win/WebFrame.cpp
index 05ee075..80b91cd 100644
--- a/Source/WebKit/win/WebFrame.cpp
+++ b/Source/WebKit/win/WebFrame.cpp
@@ -703,7 +703,7 @@ KURL WebFrame::url() const
if (!coreFrame)
return KURL();
- return coreFrame->loader()->url();
+ return coreFrame->document()->url();
}
HRESULT STDMETHODCALLTYPE WebFrame::stopLoading( void)
@@ -1966,11 +1966,11 @@ static IntRect printerRect(HDC printDC)
GetDeviceCaps(printDC, PHYSICALHEIGHT) - 2 * GetDeviceCaps(printDC, PHYSICALOFFSETY));
}
-void WebFrame::setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize)
+void WebFrame::setPrinting(bool printing, float minPageWidth, float maxPageWidth, float minPageHeight, bool adjustViewSize)
{
Frame* coreFrame = core(this);
ASSERT(coreFrame);
- coreFrame->setPrinting(printing, FloatSize(minPageWidth, 0), maxPageWidth / minPageWidth, adjustViewSize ? Frame::AdjustViewSize : Frame::DoNotAdjustViewSize);
+ coreFrame->setPrinting(printing, FloatSize(minPageWidth, minPageHeight), maxPageWidth / minPageWidth, adjustViewSize ? Frame::AdjustViewSize : Frame::DoNotAdjustViewSize);
}
HRESULT STDMETHODCALLTYPE WebFrame::setInPrintingMode(
@@ -1990,20 +1990,25 @@ HRESULT STDMETHODCALLTYPE WebFrame::setInPrintingMode(
// according to the paper size
float minLayoutWidth = 0.0f;
float maxLayoutWidth = 0.0f;
+ float minLayoutHeight = 0.0f;
if (m_inPrintingMode && !coreFrame->document()->isFrameSet()) {
if (!printDC) {
ASSERT_NOT_REACHED();
return E_POINTER;
}
- const int desiredHorizontalPixelsPerInch = 72;
+ const int desiredPixelsPerInch = 72;
+ IntRect printRect = printerRect(printDC);
int paperHorizontalPixelsPerInch = ::GetDeviceCaps(printDC, LOGPIXELSX);
- int paperWidth = printerRect(printDC).width() * desiredHorizontalPixelsPerInch / paperHorizontalPixelsPerInch;
+ int paperWidth = printRect.width() * desiredPixelsPerInch / paperHorizontalPixelsPerInch;
+ int paperVerticalPixelsPerInch = ::GetDeviceCaps(printDC, LOGPIXELSY);
+ int paperHeight = printRect.height() * desiredPixelsPerInch / paperVerticalPixelsPerInch;
minLayoutWidth = paperWidth * PrintingMinimumShrinkFactor;
maxLayoutWidth = paperWidth * PrintingMaximumShrinkFactor;
+ minLayoutHeight = paperHeight * PrintingMinimumShrinkFactor;
}
- setPrinting(m_inPrintingMode, minLayoutWidth, maxLayoutWidth, true);
+ setPrinting(m_inPrintingMode, minLayoutWidth, maxLayoutWidth, minLayoutHeight, true);
if (!m_inPrintingMode)
m_pageRects.clear();
@@ -2066,8 +2071,8 @@ const Vector<WebCore::IntRect>& WebFrame::computePageRects(HDC printDC)
IntRect adjustedRect = IntRect(
pageRect.x() + marginRect.x(),
pageRect.y() + marginRect.y(),
- pageRect.width() - marginRect.x() - marginRect.right(),
- pageRect.height() - marginRect.y() - marginRect.bottom());
+ pageRect.width() - marginRect.x() - marginRect.maxX(),
+ pageRect.height() - marginRect.y() - marginRect.maxY());
computePageRectsForFrame(coreFrame, adjustedRect, headerHeight, footerHeight, 1.0,m_pageRects, m_pageHeight);
diff --git a/Source/WebKit/win/WebFrame.h b/Source/WebKit/win/WebFrame.h
index bdc28ab..0095590 100644
--- a/Source/WebKit/win/WebFrame.h
+++ b/Source/WebKit/win/WebFrame.h
@@ -384,7 +384,7 @@ protected:
void loadHTMLString(BSTR string, BSTR baseURL, BSTR unreachableURL);
void loadData(PassRefPtr<WebCore::SharedBuffer>, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL);
const Vector<WebCore::IntRect>& computePageRects(HDC printDC);
- void setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize);
+ void setPrinting(bool printing, float minPageWidth, float maxPageWidth, float minPageHeight, bool adjustViewSize);
void headerAndFooterHeights(float*, float*);
WebCore::IntRect printerMarginRect(HDC);
void spoolPage (PlatformGraphicsContext* pctx, WebCore::GraphicsContext* spoolCtx, HDC printDC, IWebUIDelegate*, float headerHeight, float footerHeight, UINT page, UINT pageCount);
diff --git a/Source/WebKit/win/WebHistory.cpp b/Source/WebKit/win/WebHistory.cpp
index 5383a0c..4caa554 100644
--- a/Source/WebKit/win/WebHistory.cpp
+++ b/Source/WebKit/win/WebHistory.cpp
@@ -476,7 +476,7 @@ HRESULT STDMETHODCALLTYPE WebHistory::orderedLastVisitedDays(
*count = dateCount;
if (!m_orderedLastVisitedDays) {
- m_orderedLastVisitedDays.set(new DATE[dateCount]);
+ m_orderedLastVisitedDays = adoptArrayPtr(new DATE[dateCount]);
DateToEntriesMap::const_iterator::Keys end = m_entriesByDate.end().keys();
int i = 0;
for (DateToEntriesMap::const_iterator::Keys it = m_entriesByDate.begin().keys(); it != end; ++it, ++i)
diff --git a/Source/WebKit/win/WebInspector.cpp b/Source/WebKit/win/WebInspector.cpp
index c3823b2..ec35099 100644
--- a/Source/WebKit/win/WebInspector.cpp
+++ b/Source/WebKit/win/WebInspector.cpp
@@ -110,7 +110,7 @@ HRESULT STDMETHODCALLTYPE WebInspector::showConsole()
{
if (m_webView)
if (Page* page = m_webView->page())
- page->inspectorController()->showPanel(InspectorController::ConsolePanel);
+ page->inspectorController()->showConsole();
return S_OK;
}
@@ -205,10 +205,9 @@ HRESULT STDMETHODCALLTYPE WebInspector::toggleProfilingJavaScript()
InspectorController* inspector = page->inspectorController();
- if (inspector->isRecordingUserInitiatedProfile()) {
+ if (inspector->isRecordingUserInitiatedProfile())
inspector->stopUserInitiatedProfiling();
- inspector->showPanel(InspectorController::ProfilesPanel);
- } else
+ else
inspector->startUserInitiatedProfiling();
return S_OK;
@@ -277,7 +276,7 @@ HRESULT STDMETHODCALLTYPE WebInspector::isTimelineProfilingEnabled(BOOL* isEnabl
if (!page)
return S_OK;
- *isEnabled = page->inspectorController()->timelineAgent() != 0;
+ *isEnabled = page->inspectorController()->timelineProfilerEnabled();
return S_OK;
}
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKit.make b/Source/WebKit/win/WebKit.vcproj/WebKit.make
index ef8e7a6..b777d2f 100755
--- a/Source/WebKit/win/WebKit.vcproj/WebKit.make
+++ b/Source/WebKit/win/WebKit.vcproj/WebKit.make
@@ -8,12 +8,12 @@ install:
set WebKitLibrariesDir=$(SRCROOT)\AppleInternal
set WebKitOutputDir=$(OBJROOT)
set ConfigurationBuildDir=$(OBJROOT)\$(BUILDSTYLE)
- set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
+ set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\4\
set PRODUCTION=1
devenv "WebKit.submit.sln" /rebuild $(BUILDSTYLE)
- -xcopy "$(ConfigurationBuildDir)\bin\*.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\WebKit.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit.resources" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\*.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\WebKit.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit.resources" /e/v/i/h/y
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKit.submit.sln b/Source/WebKit/win/WebKit.vcproj/WebKit.submit.sln
index c4830fc..8f431f1 100644
--- a/Source/WebKit/win/WebKit.vcproj/WebKit.submit.sln
+++ b/Source/WebKit/win/WebKit.vcproj/WebKit.submit.sln
@@ -38,8 +38,8 @@ Global
{B8437A41-67BC-4769-9452-45203827F821}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.ActiveCfg = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.Build.0 = Release|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.ActiveCfg = Debug|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.Build.0 = Debug|Win32
+ {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.Build.0 = Debug_All|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.ActiveCfg = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.Build.0 = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
diff --git a/Source/WebKit/win/WebKitGraphics.cpp b/Source/WebKit/win/WebKitGraphics.cpp
index 5343608..1907050 100644
--- a/Source/WebKit/win/WebKitGraphics.cpp
+++ b/Source/WebKit/win/WebKitGraphics.cpp
@@ -32,7 +32,6 @@
#include "WebPreferences.h"
#pragma warning(push, 0)
-#include <WebCore/CharacterNames.h>
#include <WebCore/Font.h>
#include <WebCore/FontDescription.h>
#include <WebCore/FontSelector.h>
@@ -40,6 +39,7 @@
#include <WebCore/PlatformString.h>
#include <WebCore/StringTruncator.h>
#include <WebCore/WebCoreTextRenderer.h>
+#include <wtf/unicode/CharacterNames.h>
#include <CoreGraphics/CoreGraphics.h>
#pragma warning(pop)
@@ -105,7 +105,7 @@ void WebDrawText(WebTextRenderInfo* info)
GraphicsContext context(info->cgContext);
String drawString(info->text, info->length);
if (info->drawAsPassword)
- drawString = drawString.impl()->secure(WebCore::bullet);
+ drawString = drawString.impl()->secure(WTF::Unicode::bullet);
context.save();
@@ -133,15 +133,16 @@ void FontMetrics(const WebFontDescription& description, int* ascent, int* descen
return;
Font font(makeFont(description));
+ const WebCore::FontMetrics& fontMetrics(font.fontMetrics());
if (ascent)
- *ascent = font.ascent();
+ *ascent = fontMetrics.ascent();
if (descent)
- *descent = font.descent();
+ *descent = fontMetrics.descent();
if (lineSpacing)
- *lineSpacing = font.lineSpacing();
+ *lineSpacing = fontMetrics.lineSpacing();
}
unsigned CenterTruncateStringToWidth(LPCTSTR text, int length, const WebFontDescription& description, float width, WCHAR* buffer)
diff --git a/Source/WebKit/win/WebPreferences.cpp b/Source/WebKit/win/WebPreferences.cpp
index a962471..01cab2b 100644
--- a/Source/WebKit/win/WebPreferences.cpp
+++ b/Source/WebKit/win/WebPreferences.cpp
@@ -463,8 +463,8 @@ void WebPreferences::copyWebKitPreferencesToCFPreferences(CFDictionaryRef dict)
CFStringRef didRemoveDefaultsKey = CFSTR(WebKitDidMigrateDefaultSettingsFromSafari3BetaPreferenceKey);
bool omitDefaults = !booleanValueForPreferencesValue(CFDictionaryGetValue(dict, didRemoveDefaultsKey));
- OwnArrayPtr<CFTypeRef> keys(new CFTypeRef[count]);
- OwnArrayPtr<CFTypeRef> values(new CFTypeRef[count]);
+ OwnArrayPtr<CFTypeRef> keys = adoptArrayPtr(new CFTypeRef[count]);
+ OwnArrayPtr<CFTypeRef> values = adoptArrayPtr(new CFTypeRef[count]);
CFDictionaryGetKeysAndValues(dict, keys.get(), values.get());
for (int i = 0; i < count; ++i) {
diff --git a/Source/WebKit/win/WebScrollBar.cpp b/Source/WebKit/win/WebScrollBar.cpp
index 45bc8f3..9f0131b 100644
--- a/Source/WebKit/win/WebScrollBar.cpp
+++ b/Source/WebKit/win/WebScrollBar.cpp
@@ -174,9 +174,9 @@ HRESULT STDMETHODCALLTYPE WebScrollBar::frameRect(
return E_POINTER;
IntRect rect = m_scrollBar->frameRect();
bounds->left = rect.x();
- bounds->right = rect.right();
+ bounds->right = rect.maxX();
bounds->top = rect.y();
- bounds->bottom = rect.bottom();
+ bounds->bottom = rect.maxY();
return S_OK;
}
@@ -275,3 +275,13 @@ void WebScrollBar::invalidateScrollbarRect(Scrollbar*, const IntRect& rect)
RECT r = rect;
::InvalidateRect(m_containingWindow, &r, false);
}
+
+Scrollbar* WebScrollBar::horizontalScrollbar() const
+{
+ return m_scrollBar->orientation() == HorizontalScrollbar ? m_scrollBar.get() : 0;
+}
+
+Scrollbar* WebScrollBar::verticalScrollbar() const
+{
+ return m_scrollBar->orientation() == VerticalScrollbar ? m_scrollBar.get() : 0;
+}
diff --git a/Source/WebKit/win/WebScrollBar.h b/Source/WebKit/win/WebScrollBar.h
index ca44e8b..39457d4 100644
--- a/Source/WebKit/win/WebScrollBar.h
+++ b/Source/WebKit/win/WebScrollBar.h
@@ -123,6 +123,9 @@ protected:
virtual bool scrollbarCornerPresent() const { return false; }
+ virtual WebCore::Scrollbar* horizontalScrollbar() const;
+ virtual WebCore::Scrollbar* verticalScrollbar() const;
+
ULONG m_refCount;
HWND m_containingWindow;
int m_currentPosition;
diff --git a/Source/WebKit/win/WebView.cpp b/Source/WebKit/win/WebView.cpp
index da88be4..a85b23d 100644
--- a/Source/WebKit/win/WebView.cpp
+++ b/Source/WebKit/win/WebView.cpp
@@ -152,6 +152,11 @@
#include <WebKitSystemInterface/WebKitSystemInterface.h>
#endif
+#if USE(ACCELERATED_COMPOSITING)
+#include <WebCore/CACFLayerTreeHost.h>
+#include <WebCore/PlatformCALayer.h>
+#endif
+
#include <ShlObj.h>
#include <comutil.h>
#include <dimm.h>
@@ -797,7 +802,7 @@ void WebView::addToDirtyRegion(const IntRect& dirtyRect)
#endif
HRGN newRegion = ::CreateRectRgn(dirtyRect.x(), dirtyRect.y(),
- dirtyRect.right(), dirtyRect.bottom());
+ dirtyRect.maxX(), dirtyRect.maxY());
addToDirtyRegion(newRegion);
}
@@ -4806,9 +4811,9 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
settings->setWebAudioEnabled(true);
#endif // ENABLE(WEB_AUDIO)
-#if ENABLE(3D_CANVAS)
+#if ENABLE(WEBGL)
settings->setWebGLEnabled(true);
-#endif // ENABLE(3D_CANVAS)
+#endif // ENABLE(WEBGL)
hr = prefsPrivate->isDNSPrefetchingEnabled(&enabled);
if (FAILED(hr))
@@ -4975,8 +4980,8 @@ HRESULT STDMETHODCALLTYPE WebView::visibleContentRect(
FloatRect visibleContent = m_page->mainFrame()->view()->visibleContentRect();
rect->left = (LONG) visibleContent.x();
rect->top = (LONG) visibleContent.y();
- rect->right = (LONG) visibleContent.right();
- rect->bottom = (LONG) visibleContent.bottom();
+ rect->right = (LONG) visibleContent.maxX();
+ rect->bottom = (LONG) visibleContent.maxY();
return S_OK;
}
@@ -5340,9 +5345,9 @@ void WebView::prepareCandidateWindow(Frame* targetFrame, HIMC hInputContext)
form.ptCurrentPos.x = caret.x();
form.ptCurrentPos.y = caret.y() + caret.height();
form.rcArea.top = caret.y();
- form.rcArea.bottom = caret.bottom();
+ form.rcArea.bottom = caret.maxY();
form.rcArea.left = caret.x();
- form.rcArea.right = caret.right();
+ form.rcArea.right = caret.maxX();
IMMDict::dict().setCandidateWindow(hInputContext, &form);
}
diff --git a/Source/WebKit/win/WebView.h b/Source/WebKit/win/WebView.h
index 1a993c6..ddfb6db 100644
--- a/Source/WebKit/win/WebView.h
+++ b/Source/WebKit/win/WebView.h
@@ -40,8 +40,12 @@
#include <wtf/RefPtr.h>
#if USE(ACCELERATED_COMPOSITING)
-#include <WebCore/CACFLayerTreeHost.h>
-#include <WebCore/PlatformCALayer.h>
+#include <WebCore/CACFLayerTreeHostClient.h>
+#include <WebCore/GraphicsLayerClient.h>
+
+namespace WebCore {
+ class CACFLayerTreeHost;
+}
#endif
class FullscreenVideoController;
diff --git a/Source/WebKit/wince/ChangeLog b/Source/WebKit/wince/ChangeLog
index f44bddf..77d6ef3 100644
--- a/Source/WebKit/wince/ChangeLog
+++ b/Source/WebKit/wince/ChangeLog
@@ -1,3 +1,86 @@
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * WebCoreSupport/FrameLoaderClientWinCE.cpp:
+ (WebKit::FrameLoaderClientWinCE::finishedLoading):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebCoreSupport/ChromeClientWinCE.cpp:
+ * WebCoreSupport/ChromeClientWinCE.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebCoreSupport/DragClientWinCE.cpp:
+ * WebCoreSupport/DragClientWinCE.h:
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Martin Robinson.
+
+ [WINCE] FrameLoaderClient calls loadURLInChildFrame on the child's frame loader
+ https://bugs.webkit.org/show_bug.cgi?id=53896
+
+ * WebView.cpp:
+ (WebView::createFrame): Use coreFrame instead of childFrame.
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebCoreSupport/FrameLoaderClientWinCE.cpp:
+ (WebKit::FrameLoaderClientWinCE::didRunInsecureContent):
+ * WebCoreSupport/FrameLoaderClientWinCE.h:
+
+2011-02-02 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed WinCE build fix for r77398.
+
+ * WebView.cpp:
+ (WebView::paint):
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebCoreSupport/ChromeClientWinCE.cpp:
+ (WebKit::ChromeClientWinCE::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebCoreSupport/ChromeClientWinCE.h:
+
+2011-01-25 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WINCE] Ensure layouted frame when painting
+ https://bugs.webkit.org/show_bug.cgi?id=53108
+
+ * WebView.cpp:
+ (WebView::paint):
+
2011-01-04 Patrick Gansterer <paroga@webkit.org>
Unreviewed WinCE build fix.
diff --git a/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp b/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp
index 659d246..3430c66 100644
--- a/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp
+++ b/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp
@@ -370,11 +370,6 @@ void ChromeClientWinCE::formStateDidChange(const Node*)
notImplemented();
}
-PassOwnPtr<HTMLParserQuirks> ChromeClientWinCE::createHTMLParserQuirks()
-{
- return 0;
-}
-
void ChromeClientWinCE::requestGeolocationPermissionForFrame(Frame*, Geolocation*)
{
notImplemented();
@@ -390,6 +385,11 @@ bool ChromeClientWinCE::selectItemWritingDirectionIsNatural()
return false;
}
+bool ChromeClientWinCE::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> ChromeClientWinCE::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuWin(client));
diff --git a/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h b/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
index 4e7fb28..781989d 100644
--- a/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
+++ b/Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
@@ -154,8 +154,6 @@ public:
// will be called frequently, so handling should be very fast.
virtual void formStateDidChange(const WebCore::Node*);
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks();
-
#if USE(ACCELERATED_COMPOSITING)
// Pass 0 as the GraphicsLayer to detatch the root layer.
virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
@@ -174,6 +172,7 @@ public:
#endif
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
diff --git a/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp b/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp
index 1fc4379..904c61a 100644
--- a/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp
+++ b/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp
@@ -58,12 +58,6 @@ void DragClientWinCE::startDrag(DragImageRef, const IntPoint&, const IntPoint&,
notImplemented();
}
-DragImageRef DragClientWinCE::createDragImageForLink(KURL&, const String& label, Frame*)
-{
- notImplemented();
- return 0;
-}
-
void DragClientWinCE::dragControllerDestroyed()
{
delete this;
diff --git a/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h b/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h
index dc5168c..ec81f30 100644
--- a/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h
+++ b/Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h
@@ -38,7 +38,6 @@ public:
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint&);
virtual void startDrag(WebCore::DragImageRef, const WebCore::IntPoint&, const WebCore::IntPoint&, WebCore::Clipboard*, WebCore::Frame*, bool = false);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const WTF::String&, WebCore::Frame*);
virtual void dragControllerDestroyed();
};
diff --git a/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp b/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp
index 6a8fb74..7d8f614 100644
--- a/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp
+++ b/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp
@@ -265,7 +265,7 @@ void FrameLoaderClientWinCE::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClientWinCE::didRunInsecureContent(SecurityOrigin*)
+void FrameLoaderClientWinCE::didRunInsecureContent(SecurityOrigin*, const KURL&)
{
notImplemented();
}
@@ -450,8 +450,7 @@ String FrameLoaderClientWinCE::generatedMIMETypeForURLScheme(const String&) cons
void FrameLoaderClientWinCE::finishedLoading(DocumentLoader* documentLoader)
{
if (!m_pluginView) {
- FrameLoader* loader = documentLoader->frameLoader();
- loader->writer()->setEncoding(m_response.textEncodingName(), false);
+ documentLoader->writer()->setEncoding(m_response.textEncodingName(), false);
return;
}
diff --git a/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h b/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h
index c4dcf6d..ed49d89 100644
--- a/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h
+++ b/Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h
@@ -140,7 +140,7 @@ public:
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
diff --git a/Source/WebKit/wince/WebView.cpp b/Source/WebKit/wince/WebView.cpp
index ce90149..c21a7fd 100644
--- a/Source/WebKit/wince/WebView.cpp
+++ b/Source/WebKit/wince/WebView.cpp
@@ -169,7 +169,7 @@ PassRefPtr<Frame> WebView::createFrame(const KURL& url, const String& name, HTML
if (!childFrame->page())
return 0;
- childFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
+ coreFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
// The frame's onload handler may have removed it from the document.
if (!childFrame->tree()->parent())
@@ -232,11 +232,17 @@ void WebView::stop()
void WebView::paint(HDC hDC, const IntRect& clipRect)
{
- OwnPtr<HRGN> clipRgn(CreateRectRgn(clipRect.x(), clipRect.y(), clipRect.right(), clipRect.bottom()));
+ FrameView* frameView = view();
+ if (!frameView)
+ return;
+
+ OwnPtr<HRGN> clipRgn(CreateRectRgn(clipRect.x(), clipRect.y(), clipRect.maxX(), clipRect.maxY()));
SelectClipRgn(hDC, clipRgn.get());
+ frameView->updateLayoutAndStyleIfNeededRecursive();
+
GraphicsContext gc(hDC);
- view()->paint(&gc, clipRect);
+ frameView->paint(&gc, clipRect);
}
bool WebView::handlePaint(HWND hWnd)
diff --git a/Source/WebKit/wx/ChangeLog b/Source/WebKit/wx/ChangeLog
index 4862225..13ab1b8 100644
--- a/Source/WebKit/wx/ChangeLog
+++ b/Source/WebKit/wx/ChangeLog
@@ -1,3 +1,84 @@
+2011-02-10 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Update calls to DocumentWriter.
+ https://bugs.webkit.org/show_bug.cgi?id=50489
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::finishedLoading):
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebKitSupport/ChromeClientWx.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+
+ Removed createDragImageForLink from DragClient.
+
+ * WebKitSupport/DragClientWx.cpp:
+ * WebKitSupport/DragClientWx.h:
+
+2011-02-07 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [wx] FrameLoaderClient calls loadURLInChildFrame on the child's frame loader
+ https://bugs.webkit.org/show_bug.cgi?id=53895
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::createFrame): Use m_frame instead of childFrame.
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::didRunInsecureContent):
+ * WebKitSupport/FrameLoaderClientWx.h:
+
+2011-02-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fixes for wxWebKit.
+
+ * bindings/python/wscript:
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * WebKitSupport/ChromeClientWx.cpp:
+ (WebCore::ChromeClientWx::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebKitSupport/ChromeClientWx.h:
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * WebKitSupport/FrameLoaderClientWx.cpp:
+ (WebCore::FrameLoaderClientWx::dispatchDidFinishDocumentLoad):
+
2011-01-14 Yuzo Fujishima <yuzo@google.com>
Reviewed by Antti Koivisto.
diff --git a/Source/WebKit/wx/WebKitSupport/ChromeClientWx.cpp b/Source/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
index c89bb17..026d8a6 100644
--- a/Source/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
+++ b/Source/WebKit/wx/WebKitSupport/ChromeClientWx.cpp
@@ -476,6 +476,11 @@ bool ChromeClientWx::selectItemWritingDirectionIsNatural()
return false;
}
+bool ChromeClientWx::selectItemAlignmentFollowsMenuWritingDirection()
+{
+ return false;
+}
+
PassRefPtr<PopupMenu> ChromeClientWx::createPopupMenu(PopupMenuClient* client) const
{
return adoptRef(new PopupMenuWx(client));
diff --git a/Source/WebKit/wx/WebKitSupport/ChromeClientWx.h b/Source/WebKit/wx/WebKitSupport/ChromeClientWx.h
index 2ccad43..94e6504 100644
--- a/Source/WebKit/wx/WebKitSupport/ChromeClientWx.h
+++ b/Source/WebKit/wx/WebKitSupport/ChromeClientWx.h
@@ -139,8 +139,6 @@ public:
virtual void formStateDidChange(const Node*) { }
- virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
-
virtual void setCursor(const Cursor&);
virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
@@ -149,6 +147,7 @@ public:
virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) { }
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
diff --git a/Source/WebKit/wx/WebKitSupport/DragClientWx.cpp b/Source/WebKit/wx/WebKitSupport/DragClientWx.cpp
index fb6905b..75744ba 100644
--- a/Source/WebKit/wx/WebKitSupport/DragClientWx.cpp
+++ b/Source/WebKit/wx/WebKitSupport/DragClientWx.cpp
@@ -68,10 +68,4 @@ void DragClientWx::startDrag(DragImageRef dragImage,
notImplemented();
}
-DragImageRef DragClientWx::createDragImageForLink(KURL&, const String& label, Frame*)
-{
- notImplemented();
- return 0;
-}
-
}
diff --git a/Source/WebKit/wx/WebKitSupport/DragClientWx.h b/Source/WebKit/wx/WebKitSupport/DragClientWx.h
index afb54fb..45425c4 100644
--- a/Source/WebKit/wx/WebKitSupport/DragClientWx.h
+++ b/Source/WebKit/wx/WebKitSupport/DragClientWx.h
@@ -39,7 +39,6 @@ public:
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint&);
virtual void startDrag(WebCore::DragImageRef dragImage, const WebCore::IntPoint& dragImageOrigin, const WebCore::IntPoint& eventPos, WebCore::Clipboard*, WebCore::Frame*, bool linkDrag = false);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const WTF::String& label, WebCore::Frame*);
};
}
diff --git a/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp b/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
index 362c726..a10df7d 100644
--- a/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
+++ b/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp
@@ -320,7 +320,7 @@ void FrameLoaderClientWx::dispatchDidFinishDocumentLoad()
if (m_webView) {
wxWebViewLoadEvent wkEvent(m_webView);
wkEvent.SetState(wxWEBVIEW_LOAD_DOC_COMPLETED);
- wkEvent.SetURL(m_frame->loader()->url().string());
+ wkEvent.SetURL(m_frame->document()->url().string());
m_webView->GetEventHandler()->ProcessEvent(wkEvent);
}
}
@@ -394,7 +394,7 @@ void FrameLoaderClientWx::postProgressFinishedNotification()
if (m_webView) {
wxWebViewLoadEvent wkEvent(m_webView);
wkEvent.SetState(wxWEBVIEW_LOAD_DL_COMPLETED);
- wkEvent.SetURL(m_frame->loader()->url().string());
+ wkEvent.SetURL(m_frame->document()->url().string());
m_webView->GetEventHandler()->ProcessEvent(wkEvent);
}
}
@@ -434,8 +434,7 @@ void FrameLoaderClientWx::finishedLoading(DocumentLoader* loader)
{
if (!m_pluginView) {
if (m_firstData) {
- FrameLoader* fl = loader->frameLoader();
- fl->writer()->setEncoding(m_response.textEncodingName(), false);
+ loader->writer()->setEncoding(m_response.textEncodingName(), false);
m_firstData = false;
}
} else {
@@ -595,7 +594,7 @@ void FrameLoaderClientWx::didDisplayInsecureContent()
notImplemented();
}
-void FrameLoaderClientWx::didRunInsecureContent(WebCore::SecurityOrigin*)
+void FrameLoaderClientWx::didRunInsecureContent(WebCore::SecurityOrigin*, const KURL&)
{
notImplemented();
}
@@ -850,7 +849,7 @@ PassRefPtr<Frame> FrameLoaderClientWx::createFrame(const KURL& url, const String
if (!childFrame->page())
return 0;
- childFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
+ m_frame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
// The frame's onload handler may have removed it from the document.
if (!childFrame->tree()->parent())
diff --git a/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h b/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
index b56a900..e26cbe2 100644
--- a/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
+++ b/Source/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h
@@ -167,7 +167,7 @@ namespace WebCore {
virtual bool canCachePage() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(SecurityOrigin*);
+ virtual void didRunInsecureContent(SecurityOrigin*, const KURL&);
virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
virtual void committedLoad(DocumentLoader*, const char*, int);
diff --git a/Source/WebKit/wx/bindings/python/wscript b/Source/WebKit/wx/bindings/python/wscript
index 0a1df31..5e1dfc1 100644
--- a/Source/WebKit/wx/bindings/python/wscript
+++ b/Source/WebKit/wx/bindings/python/wscript
@@ -33,7 +33,7 @@ include_paths = [
os.path.join(wk_root, 'Source', 'JavaScriptCore'),
os.path.join(wk_root, 'Source', 'WebCore', 'bindings', 'cpp'),
os.path.join(wk_root, 'Source', 'WebCore', 'DerivedSources'),
- os.path.join(wk_root, 'WebKit', 'wx'),
+ os.path.join(wk_root, 'Source', 'WebKit', 'wx'),
os.path.join(wx_root, 'wxPython', 'include'),
os.path.join(wx_root, '..', 'wxPython', 'include'),
]
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index e83c4ed..9f916ac 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,5475 @@
+2011-02-13 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Speculative fix for
+
+ <rdar://problem/8995361>
+ CrashTracer: [USER] 47 crashes in WebProcess at com.apple.WebKit2: WebKit::WebPage::layoutIfNeeded + 4
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
+ Invalidate the layer tree host.
+
+2011-02-13 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ The plug-in process heap should be executable by default
+ https://bugs.webkit.org/show_bug.cgi?id=54364
+ <rdar://problem/8990563>
+
+ * UIProcess/Launcher/ProcessLauncher.h:
+ Add executableHeap flag.
+
+ * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
+ (WebKit::ProcessLauncher::launchProcess):
+ Set the right posix_spawn flag if executableHeap is true.
+
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit::PluginProcessProxy::PluginProcessProxy):
+ Initialize executableHeap to true.
+
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::connect):
+ Initialize executableHeap to false.
+
+2011-02-13 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Messages waited on are never dispatched
+ https://bugs.webkit.org/show_bug.cgi?id=54362
+ <rdar://problem/8995051>
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::processIncomingMessage):
+ Get the argument encoder from the incoming message.
+
+2011-02-13 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Add a compile-time option to completely disable WebArchive support.
+ https://bugs.webkit.org/show_bug.cgi?id=52712
+
+ Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updatePreferences):
+
+2011-02-13 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54348
+ Crash when printing a document with no pages
+
+ * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawPagesToPDF): Don't fail on a fake
+ page that computePagesForPrinting() added to a pageless document.
+
+2011-02-13 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed and landed by Sam Weinig.
+
+ AX: Update WK2 usage of remote accessibility api
+ https://bugs.webkit.org/show_bug.cgi?id=54220
+
+ Rename some of the remote accessibility methods to be more accurate.
+ Make sure to unregister the AccessibilityWebPageObject on dealloc.
+ Send the window remote token along with the WKView remote token.
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _updateRemoteAccessibilityRegistration:]):
+ (-[WKView initWithFrame:contextRef:pageGroupRef:]):
+ (-[WKView viewDidMoveToWindow]):
+ (-[WKView _processDidCrash]):
+ (-[WKView _pageClosed]):
+ (-[WKView _setAccessibilityWebProcessToken:]):
+ * UIProcess/API/mac/WKViewInternal.h:
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
+ (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
+ (-[AccessibilityWebPageObject dealloc]):
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::platformInitialize):
+ (WebKit::WebPage::registerUIProcessAccessibilityTokens):
+
+2011-02-11 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54335
+ <rdar://problem/8895141> Make window.print() work with WebKit2
+
+ * Platform/CoreIPC/Connection.h: Corrected a typo in FIXME comment.
+
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::update):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::sizeDidChange):
+ (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
+ (WebKit::TiledDrawingAreaProxy::takeSnapshot):
+ (WebKit::TiledDrawingAreaProxy::removeTile):
+ * UIProcess/LayerBackedDrawingAreaProxy.cpp:
+ (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
+ (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
+ (WebKit::LayerBackedDrawingAreaProxy::update):
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::ensureWebProcess):
+ (WebKit::WebContext::postMessageToInjectedBundle):
+ Updated for send() -> deprecatedSend() rename.
+
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy): Added a flag that's true while serving window.print().
+ (WebKit::WebPageProxy::printFrame): Set and unset m_isPerformingDOMPrintOperation.
+ (WebKit::WebPageProxy::beginPrinting): Force message processing in web process when serving
+ window.print().
+ (WebKit::WebPageProxy::endPrinting): Ditto.
+ (WebKit::WebPageProxy::computePagesForPrinting): Ditto.
+ (WebKit::WebPageProxy::drawRectToPDF): Ditto.
+ (WebKit::WebPageProxy::drawPagesToPDF): Ditto.
+
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::~WebProcessProxy):
+ (WebKit::WebProcessProxy::sendMessage):
+ (WebKit::WebProcessProxy::didFinishLaunching):
+ When waiting for a web process to launch, store message flags, too. This is not practically
+ important for DispatchMessageEvenWhenWaitingForSyncReply, but it's easier to store flags
+ than to remember about this pitfall.
+
+ * UIProcess/WebProcessProxy.h:
+ (WebKit::WebProcessProxy::send): Added a flags argument, matching Connection::send().
+ (WebKit::WebProcessProxy::deprecatedSend): Renamed one of send() overloads, because it was
+ conflicting with the other one after adding a flags argument. This matches a change previously
+ made to CoreIPC::Connection.
+
+2011-02-12 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Crash in RenderLayerCompositor::updateCompositingLayers when loading some sites
+ https://bugs.webkit.org/show_bug.cgi?id=54345
+
+ Some sites flip between composited and non-comosited state while loading. When the timing is
+ right, when we flip out of compositing we will need to do a display while tossing all the
+ compositing layers. This causes us to reenter RenderLayerCompositor::computeCompositingRequirements()
+ while we are in the middle of tossing layers, which leads to a crash.
+
+ The solution is to defer the logic of exiting compositing mode until the DrawingArea is finished
+ doing its display, using a timer.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::DrawingAreaImpl):
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModeSoon):
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+
+2011-02-12 Kevin Decker <kdecker@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Follow up fix to:
+ https://bugs.webkit.org/show_bug.cgi?id=54341 - optionally scale snapshots in document view coordinates
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::scaledSnapshotInDocumentCoordinates): Fixed the order of the scale and translate.
+
+2011-02-12 Kevin Decker <kdecker@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54341 - optionally scale snapshots in document view coordinates
+ <rdar://problem/8990069>
+
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+ (WKBundlePageCreateScaledSnapshotInDocumentCoordinates): Added.
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Added above new function.
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::scaledSnapshotInDocumentCoordinates): Added.
+ (WebKit::WebPage::snapshotInDocumentCoordinates): Call scaledSnapshotInDocumentCoordinates with a scale of 1.
+ * WebProcess/WebPage/WebPage.h: Added scaledSnapshotInDocumentCoordinates().
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Can’t open local files on reload or navigation from the back/forward cache
+ https://bugs.webkit.org/show_bug.cgi?id=54332
+ <rdar://problem/8903076>
+
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::WebInspectorProxy::isInspectorPage):
+ * UIProcess/WebInspectorProxy.h:
+ Check whether the given page is a web inspector page.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::initializeSandboxExtensionHandle):
+ If this is a web inspector page, we don't want to make a sandbox extension.
+
+ (WebKit::WebPageProxy::reattachToWebProcessWithItem):
+ (WebKit::WebPageProxy::goForward):
+ (WebKit::WebPageProxy::goBack):
+ (WebKit::WebPageProxy::goToBackForwardItem):
+ Pass a sandbox extension along when sending the message.
+
+ * UIProcess/WebPageProxy.h:
+ Make initializeSandboxExtensionHandle a member function.
+
+ * UIProcess/cf/WebPageProxyCF.cpp:
+ (WebKit::WebPageProxy::restoreFromSessionStateData):
+ Pass a sandbox extension along.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::goForward):
+ (WebKit::WebPage::goBack):
+ (WebKit::WebPage::goToBackForwardItem):
+ Hand the sandbox extension to the sandbox extension tracker.
+
+ (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem):
+ Pass the sandbox extension to goToBackForwardItem.
+
+ (WebKit::shouldReuseCommittedSandboxExtension):
+ New function that checks whether a committed sandbox extension should be re-used. We
+ do this for page reloads, as well as regular page navigations when both the committed
+ and provisional documents have file URLs.
+
+ (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
+ Reuse the committed sandbox extension if necessary.
+
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Fix Snow Leopard build.
+
+ * PluginProcess/PluginProcess.cpp:
+ (WebKit::PluginProcess::didFailToSendSyncMessage):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::didFailToSendSyncMessage):
+
+2011-02-11 Yael Aharon <yael.aharon@nokia.com>
+
+ Unreviewed Qt webkit2 build fix after r78392.
+
+ * WebProcess/WebProcess.h:
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ WebProcess hung communicating with the plug-in process
+ https://bugs.webkit.org/show_bug.cgi?id=54328
+ <rdar://problem/8854075>
+
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit::PluginProcessProxy::createWebProcessConnection):
+ Add the DispatchMessageEvenWhenWaitingForSyncReply message send flag when sending the
+ PluginProcess::CreateWebProcessConnection message, since the plug-in process can be busy waiting
+ for a sync reply from the web process.
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Incoming synchronous messages should always be processed regardless of connection waiting for a reply
+ https://bugs.webkit.org/show_bug.cgi?id=54326
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::SyncMessageState::getOrCreate):
+ Assert that the map has a non-null SyncMessageState object.
+
+ (CoreIPC::Connection::SyncMessageState::SyncMessageState):
+ Initialize m_waitForSyncReplyCount.
+
+ (CoreIPC::Connection::SyncMessageState::beginWaitForSyncReply):
+ Increment m_waitForSyncReplyCount.
+
+ (CoreIPC::Connection::SyncMessageState::endWaitForSyncReply):
+ Decrement m_waitForSyncReplyCount. If it's 0, enqueue any incoming sync messages.
+
+ (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
+ If this is a message that needs to be dispatched, add it to the queue and wake up the client run loop.
+
+ (CoreIPC::Connection::SyncMessageState::dispatchMessages):
+ Go through the queue of incoming messages and dispatch them.
+
+ (CoreIPC::Connection::sendSyncMessage):
+ call beginWaitForSyncReply/endWaitForSyncReply.
+
+ (CoreIPC::Connection::waitForSyncReply):
+ Dispatch messages.
+
+ (CoreIPC::Connection::processIncomingMessage):
+ Call SyncMessageState::processIncomingMessage.
+
+ (CoreIPC::Connection::enqueueIncomingMessage):
+ Add helper function for enqueuing an incoming message.
+
+ * Platform/CoreIPC/Connection.h:
+ (CoreIPC::Connection::Message::destinationID):
+
+2011-02-11 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ WebKit2: Going to Ars Technica crashes WebProcess in WebCore::ResourceRequestBase::url() const + 9
+ <rdar://problem/8978832>
+
+ Speculative fix for crash accessing a bad ResourceRequest in policy
+ client code. Remove early returns from dispatchDecidePolicyForMIMEType
+ and dispatchDecidePolicyForNavigationAction that are not present in the WebKit1
+ equivalent code. This should be safe, now that the IPC calls are synchronous.
+
+ Also removes some invalid assertions in WebFrameProxy that were getting hit. It is okay
+ for the url to empty.
+
+ * UIProcess/WebFrameProxy.cpp:
+ (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad):
+ (WebKit::WebFrameProxy::didFailProvisionalLoad):
+ (WebKit::WebFrameProxy::didFailLoad):
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+
+2011-02-11 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler and Anders Carlsson.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53593
+ <rdar://problem/8948380> Crash beneath HistoryController::recursiveSetProvisionalItem in web
+ process (preceded by assertion failure) if UI process exits while
+ Messages::WebPage::RestoreSessionAndNavigateToCurrentItem is being handled
+
+ Can't test exiting the UI process.
+
+ * Platform/CoreIPC/Connection.cpp: (CoreIPC::Connection::sendSyncMessage):
+ * Platform/CoreIPC/Connection.h: (CoreIPC::Connection::Client::didFailToSendSyncMessage):
+ Notify connection client when the connection fails to send a sync message.
+
+ * WebProcess/WebProcess.cpp: (WebKit::WebProcess::didFailToSendSyncMessage):
+ * WebProcess/WebProcess.h:
+ Quit the web process immediately if it tried to send a sync message to a dead UI process.
+ It never needs to continue and handle an unexpected null "reply".
+
+ * PluginProcess/PluginProcess.cpp: (WebKit::PluginProcess::didFailToSendSyncMessage):
+ * PluginProcess/PluginProcess.h:
+ Ditto. There is no need for a plug-in to keep running even briefly if it couldn't get a
+ reply to a sync message.
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add a way to send async messages that can't get out of order with sync ones
+ https://bugs.webkit.org/show_bug.cgi?id=54319
+ <rdar://problem/8894844>
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::sendMessage):
+ sendMessage now takes a messageSendFlags. Update the messageID if the
+ messageSendFlags contain DispatchMessageEvenWhenWaitingForSyncReply.
+
+ (CoreIPC::Connection::waitForSyncReply):
+ Process asynchronous messages as well.
+
+ (CoreIPC::Connection::processIncomingMessage):
+ Check if a message should be dispatched even when we're waiting for a
+ synchronous reply.
+
+ * Platform/CoreIPC/Connection.h:
+ (CoreIPC::Connection::send):
+ Send now takes a messageSendFlags parameter.
+
+ * Platform/CoreIPC/MessageID.h:
+ (CoreIPC::MessageID::messageIDWithAddedFlags):
+ Return a new MessageID object with the given flags added.
+
+ (CoreIPC::MessageID::shouldDispatchMessageWhenWaitingForSyncReply):
+ Add getter.
+
+2011-02-11 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Crash with dynamic popup menu use
+ <rdar://problem/8716952>
+
+ Invalidate popup menus when forcing them closed, since they might still be
+ in their tracking loop.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::showPopupMenu):
+ (WebKit::WebPageProxy::hidePopupMenu):
+ * UIProcess/WebPopupMenuProxy.h:
+ (WebKit::WebPopupMenuProxy::invalidate):
+ * UIProcess/mac/WebPopupMenuProxyMac.mm:
+ (WebKit::WebPopupMenuProxyMac::showPopupMenu):
+ * UIProcess/win/WebPopupMenuProxyWin.cpp:
+ (WebKit::WebPopupMenuProxyWin::showPopupMenu):
+ (WebKit::WebPopupMenuProxyWin::setFocusedIndex):
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Actually initialize m_syncMessageState.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::Connection):
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Move the binary semaphore into SyncMessageState
+ https://bugs.webkit.org/show_bug.cgi?id=54311
+
+ With this change, all connections that belong to the same run loop will use same binary semaphore.
+ This is in preparation for making any connection be able to wakeup the client run loop.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::SyncMessageState::wakeUpClientRunLoop):
+ (CoreIPC::Connection::SyncMessageState::wait):
+ (CoreIPC::Connection::waitForSyncReply):
+ (CoreIPC::Connection::processIncomingMessage):
+ (CoreIPC::Connection::connectionDidClose):
+ * Platform/CoreIPC/Connection.h:
+
+2011-02-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add a SyncMessageState class to CoreIPC::Connection
+ https://bugs.webkit.org/show_bug.cgi?id=54309
+
+ SyncMessageState objects are shared between all connections scheduled on
+ a given run loop. It will be used to keep track of state when waiting
+ for replies for a synchronous message.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::SyncMessageState::syncMessageStateMap):
+ (CoreIPC::Connection::SyncMessageState::syncMessageStateMapMutex):
+ Add a global RunLoop -> SyncMessageState map and a mutex for locking.
+
+ (CoreIPC::Connection::SyncMessageState::getOrCreate):
+ Look in the map for an existing SyncMessageState object and create a new
+ one if none is found.
+
+ (CoreIPC::Connection::SyncMessageState::SyncMessageState):
+ Initialize m_runLoop.
+
+ (CoreIPC::Connection::SyncMessageState::~SyncMessageState):
+ Remove the object from the map.
+
+2011-02-11 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Darin Adler.
+
+ crashes in WebProcess at WebCore::Range::startPosition const + 16
+ https://bugs.webkit.org/show_bug.cgi?id=54294
+ <rdar://problem/8982710>
+
+ I don't have a repro case for this bugs, but the side-by-side
+ comparison of the IME support implementation in WebKit and WebKi2
+ shows a missing null check on a Range that could very well explain
+ this crash.
+ I tried running platform/mac/editing/input tests with a version of WebKit
+ without the null check and I can reproduce a crash with the same signature.
+ These tests are not yet enabled for WebKit2.
+
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::firstRectForCharacterRange):
+
+2011-02-11 Jeff Miller <jeffm@apple.com>
+
+ Reviewed by Steve Falkenburg.
+
+ Eliminate /DELAYLOAD:msimg32.dll ignored warning when building WebKit project
+ https://bugs.webkit.org/show_bug.cgi?id=54296
+
+ * win/WebKit2Common.vsprops: Remove msimg32.dll from the list of DelayLoadDLLs.
+
+2011-02-11 Chandra Vallala <chandra.vallala@motorola.com> and Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Implement UpdateChunk, ChunkedUpdateDrawingArea/Proxy
+ classes for WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=54080
+
+ * GNUmakefile.am:
+ * Shared/gtk/UpdateChunk.cpp: Added.
+ (WebKit::UpdateChunk::UpdateChunk):
+ (WebKit::UpdateChunk::~UpdateChunk):
+ (WebKit::UpdateChunk::encode):
+ (WebKit::UpdateChunk::decode):
+ (WebKit::UpdateChunk::createImage):
+ * Shared/gtk/UpdateChunk.h: Added.
+ (WebKit::UpdateChunk::rect):
+ (WebKit::UpdateChunk::isEmpty):
+ (WebKit::UpdateChunk::size):
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
+ Initialize the surface.
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
+ * UIProcess/DrawingAreaProxy.h: Added cairo variables.
+ * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Added.
+ (WebKit::ChunkedUpdateDrawingAreaProxy::page):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::invalidateBackingStore):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
+ * WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp: Added.
+ (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Repro crash with Sony Google TV ad at Gizmodo
+ https://bugs.webkit.org/show_bug.cgi?id=54150
+ <rdar://problem/8782346>
+
+ Re-landing this fix, bug without the test case, since it causes hangs on the bots.
+ https://bugs.webkit.org/show_bug.cgi?id=54171 tracks adding back the test.
+
+ Since PluginView::evaluate can cause the plug-in element to go away, we need to protect it.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::~PluginView):
+ Null out m_pluginElement here so we'll catch crashes earlier.
+
+ (WebKit::PluginView::evaluate):
+ Add a plug-in protector.
+
+2011-02-10 Alice Liu <alice.liu@apple.com>
+
+ Reviewed by Enrica Casucci and Adele Peterson.
+
+ WebKit2 pages gobble up cmd-I as an editing command in some cases where it shouldn't
+ https://bugs.webkit.org/show_bug.cgi?id=54254
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _handleStyleKeyEquivalent:]):
+ Return early if we're not in an editable region.
+
+2011-02-10 Andreas Kling <kling@webkit.org>
+
+ Unreviewed Qt build fix.
+
+ waitFor() -> deprecatedWaitFor()
+
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Move code to dispatch an incoming message out into a new function
+ https://bugs.webkit.org/show_bug.cgi?id=54239
+
+ This also fixes a leak where we wouldn't free ArgumentDecoder objects
+ after a connection has been invalidated.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::dispatchMessage):
+ (CoreIPC::Connection::dispatchMessages):
+ * Platform/CoreIPC/Connection.h:
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Try again to fix the Qt build.
+
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::sizeDidChange):
+ (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
+ (WebKit::TiledDrawingAreaProxy::takeSnapshot):
+ (WebKit::TiledDrawingAreaProxy::removeTile):
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Attempt to fix the Qt build.
+
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::sizeDidChange):
+ (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
+ (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
+ (WebKit::TiledDrawingAreaProxy::takeSnapshot):
+ (WebKit::TiledDrawingAreaProxy::removeTile):
+ * WebProcess/WebPage/TiledDrawingArea.cpp:
+ (WebKit::TiledDrawingArea::display):
+ (WebKit::TiledDrawingArea::setSize):
+ (WebKit::TiledDrawingArea::updateTile):
+ (WebKit::TiledDrawingArea::tileUpdateTimerFired):
+ (WebKit::TiledDrawingArea::didReceiveMessage):
+
+2011-02-10 Adam Roben <aroben@apple.com>
+
+ Handle a null FindIndicator correctly
+
+ We are passed a null FindIndicator when the find indicator becomes hidden.
+
+ Fixes <http://webkit.org/b/54213> <rdar://problem/8983261> REGRESSION (r78198): Crash in
+ FindIndicator::contentImage when scrolling page
+
+ Reviewed by Steve Falkenburg.
+
+ * Platform/win/SharedMemoryWin.cpp:
+ (WebKit::SharedMemory::Handle::isNull): Implemented.
+ (WebKit::SharedMemory::create): Bail out if the handle is null, just like Mac does.
+ Otherwise assert that ::MapViewOfFile succeeded. This doesn't fix the bug, but should help
+ catch other errors.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::setFindIndicator): Null-check the FindIndicator before dereferencing it.
+ Also changed the function to store the FindIndicator in a RefPtr.
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add 'deprecated' to the deprecated CoreIPC functions
+ https://bugs.webkit.org/show_bug.cgi?id=54223
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::sendMessage):
+ * Platform/CoreIPC/Connection.h:
+ (CoreIPC::Connection::send):
+ (CoreIPC::Connection::deprecatedSendSync):
+ (CoreIPC::Connection::deprecatedSend):
+ (CoreIPC::Connection::deprecatedWaitFor):
+ * Platform/CoreIPC/mac/ConnectionMac.cpp:
+ (CoreIPC::Connection::open):
+ * PluginProcess/PluginProcess.cpp:
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit::PluginProcessProxy::createWebProcessConnection):
+ * WebProcess/InjectedBundle/InjectedBundle.cpp:
+ (WebKit::InjectedBundle::postMessage):
+ (WebKit::InjectedBundle::postSynchronousMessage):
+ * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
+ (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
+ * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
+ (WebKit::ChunkedUpdateDrawingArea::display):
+ (WebKit::ChunkedUpdateDrawingArea::setSize):
+ * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
+ (WebKit::LayerBackedDrawingArea::setSize):
+ * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
+ (WebKit::LayerBackedDrawingArea::attachCompositingContext):
+
+2011-02-10 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Window resizer does not have a border when there are scrollbars in WebKit2 windows
+ <rdar://problem/8488476>
+ https://bugs.webkit.org/show_bug.cgi?id=54222
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _updateGrowBoxForWindowFrameChange]):
+ (-[WKView _didChangeScrollbarsForMainFrame]):
+ * UIProcess/API/mac/WKViewInternal.h:
+ * UIProcess/API/qt/qwkpage_p.h:
+ (QWKPagePrivate::didChangeScrollbarsForMainFrame):
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::didChangeScrollbarsForMainFrame):
+ * UIProcess/win/WebView.h:
+
+2011-02-10 Ivan Krstić <ike@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Rename remaining instances of _HOME sandbox parameter.
+ <rdar://problem/8983428>
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-10 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ AX: AX needs to stop using WebCoreViewFactory
+ https://bugs.webkit.org/show_bug.cgi?id=54153
+
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-10 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Sandbox violations trying to read crypto preferences.
+ <rdar://problem/8981151>
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-10 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Remove PCRE source from trunk
+ https://bugs.webkit.org/show_bug.cgi?id=54188
+
+ * WebKit2.pro:
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Turn on the new drawing area on Windows
+
+ Fixes <http://webkit.org/b/53805> <rdar://problem/8960666> WebKit2 on Windows should use
+ DrawingAreaProxyImpl
+
+ Reviewed by Darin Adler.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::useNewDrawingArea): Return true!
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Hook up WM_PRINT to the new drawing area
+
+ Fixes <http://webkit.org/b/54145> <rdar://problem/8979559> WM_PRINT doesn't work with new
+ drawing area (assertion failure in DrawingAreaProxyImpl in Debug builds)
+
+ Reviewed by Darin Adler.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::paint): Added. Code came from onPaintEvent.
+
+ (WebKit::WebView::onPaintEvent):
+ (WebKit::WebView::onPrintClientEvent):
+ Changed to call paint.
+
+ * UIProcess/win/WebView.h: Added paint. Also separated message handler functions into their
+ own paragraph.
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Notice when the backing store goes away after DidSetSize
+
+ Fixes <http://webkit.org/b/54142> <rdar://problem/8979365> Crash in
+ DrawingAreaProxyImpl::paint when WKView paints after being resized while hidden
+
+ Reviewed by Darin Adler.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::paint): Null-check m_backingStore after waiting for
+ DidSetSize, as m_backingStore can go away when we receive that message. This is the bug fix.
+ Also moved the accelerated compositing check inside the block where we wait for DidSetSize.
+ If we didn't wait for DidSetSize, we already know that we're not in accelerated compositing
+ mode (and asserted so earlier in this function).
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Decode a null SharedMemory::Handle correctly on Windows
+
+ Fixes <http://webkit.org/b/54141> <rdar://problem/8979195> WKView draws at wrong size,
+ performs badly if is resized while hidden (assertion fails in
+ BackingStore::incorporateUpdate in Debug builds)
+
+ Reviewed by Darin Adler.
+
+ * Platform/win/SharedMemoryWin.cpp:
+ (WebKit::getDuplicatedHandle): Added. Code came from decode. The only changes were to
+ null-check sourceHandle (this is the bug fix) and to assert when ::DuplicateHandle fails
+ (which would have caught the bug earlier).
+ (WebKit::SharedMemory::Handle::decode): Changed to use getDuplicatedHandle.
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Don't invalidate outside of the WebPage's bounds
+
+ Fixes <http://webkit.org/b/54123> <rdar://problem/8978383> Assertion failure in
+ BackingStore::BackingStore if a new WebPage becomes active before receiving a size
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setNeedsDisplay): Intersect the dirty rect with our bounds before
+ doing anything else.
+ (WebKit::DrawingAreaImpl::display): Added an assertion to help catch the bad case a little
+ earlier.
+
+2011-02-10 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r78157.
+ http://trac.webkit.org/changeset/78157
+ https://bugs.webkit.org/show_bug.cgi?id=54150
+
+ Fails on a bunch of bots
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::~PluginView):
+ (WebKit::PluginView::evaluate):
+
+2011-02-09 Brian Weinstein <bweinstein@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Fix a typo in WebSecurityOrigin::protocol.
+
+ * Shared/WebSecurityOrigin.h:
+ (WebKit::WebSecurityOrigin::protocol): This should return the protocol, not the domain.
+
+2011-02-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ File uploads do not work within the sandbox
+ <rdar://problem/8950518>
+ https://bugs.webkit.org/show_bug.cgi?id=54154
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::extendSandboxForFileFromOpenPanel):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
+2011-02-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54148
+ <rdar://problem/8973887> REGRESSION (WebKit2): Opening two print dialogs causes havoc
+
+ * UIProcess/API/mac/WKPrintingView.h: Moved _isForcingPreviewUpdate into a static variable,
+ because dispatching a notification affects all WKPrintingViews at once.
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (-[WKPrintingView _updatePreview]): Updated for new variable name.
+ (-[WKPrintingView knowsPageRange:]): Don't break if the method is called twice in a row
+ (we already had this logic when printing from separate thread, but not for preview).
+ (-[WKPrintingView drawRect:]): Changed all LOG messages to have view object address for
+ easier matching.
+ (-[WKPrintingView rectForPage:]): Ditto.
+ (-[WKPrintingView beginDocument]): Ditto.
+ (-[WKPrintingView endDocument]): Ditto.
+
+2011-02-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Repro crash with Sony Google TV ad at Gizmodo
+ https://bugs.webkit.org/show_bug.cgi?id=54150
+
+ Since PluginView::evaluate can cause the plug-in element to go away, we need to protect it.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::~PluginView):
+ Null out m_pluginElement here so we'll catch crashes earlier.
+
+ (WebKit::PluginView::evaluate):
+ Add a plug-in protector.
+
+2011-02-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Google Maps says it has horizontal scrollbars when it doesn't
+ <rdar://problem/8978005>
+
+ We were updating the main frame's scrollbar state for changes to
+ frames other than the main frame.
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::contentsSizeChanged):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ (WebKit::WebChromeClient::WebChromeClient):
+ Change to bail out early if we are not looking at the main frame. Also
+ fix some silly typos and rename the variables to be more specific.
+
+2011-02-09 Ivan Krstić <ike@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Allow read-only access to mouse preferences from sandboxed WebProcess.
+ <rdar://problem/8975279>
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-09 Steve Falkenburg <sfalken@apple.com>
+
+ Build fix.
+
+ * win/MainWin.cpp:
+ (wWinMain):
+
+2011-02-09 Amruth Raj <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Implement Module class for WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=48510
+
+ * GNUmakefile.am:
+ * Platform/Module.h: Added GModule handle for GTK port.
+ * Platform/gtk/ModuleGtk.cpp: Initial code using GModule calls.
+ (WebKit::Module::load):
+ (WebKit::Module::unload):
+ (WebKit::Module::platformFunctionPointer):
+
+2011-02-09 Chandra Vallala <chandra.vallala@motorola.com> and Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Implement WKBaseGtk API for Webkit2
+ https://bugs.webkit.org/show_bug.cgi?id=54081
+
+ * GNUmakefile.am: Added new files to compilation.
+ * Shared/API/c/WKBase.h: Included WKBaseGtk.h in this file.
+ * Shared/API/c/gtk: Added.
+ * Shared/API/c/gtk/WKBaseGtk.h: Added. Declaration of WKViewRef
+ for GTK port.
+ * UIProcess/API/C/WKAPICast.h: Included WKAPICastGtk.h in this
+ file.
+ * UIProcess/API/C/gtk: Added.
+ * UIProcess/API/C/gtk/WKAPICastGtk.h: Added. Type definition
+ template for WKViewRef to WebView and vice-versa.
+ * UIProcess/API/C/gtk/WKView.cpp: Added. Implementation of WKView
+ API interface.
+ (WKViewCreate):
+ (WKViewGetWindow):
+ (WKViewGetPage):
+ (WKURLCreateWithURL):
+ * UIProcess/API/C/gtk/WKView.h: Added. Declaration of WKView API
+ interface.
+
+2011-02-09 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Add WebGraphicsContext stub to the compilation
+ https://bugs.webkit.org/show_bug.cgi?id=54078
+
+ * GNUmakefile.am:
+ * Shared/API/c/gtk/WKGraphicsContextGtk.cpp: Added stub just for
+ compilation.
+ (WKGraphicsContextGetGtkContext):
+ * Shared/API/c/gtk/WKGraphicsContextGtk.h: Added stub just for
+ compilation.
+ * Shared/WebGraphicsContext.cpp:
+ (WebKit::WebGraphicsContext::WebGraphicsContext):
+ * Shared/WebGraphicsContext.h:
+ (WebKit::WebGraphicsContext::platformContext):
+
+2011-02-09 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Add geolocation support to the webkit2 compilation
+ https://bugs.webkit.org/show_bug.cgi?id=54077
+
+ Add Geolocation files to the GTK compilation.
+
+ * GNUmakefile.am:
+
+2011-02-09 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt][WK2] Don't generate superfluous forwarding header for config.h.
+
+ * Scripts/generate-forwarding-headers.pl:
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Hide the ugly details of WebView::m_window initialization from WebPageProxy, and make it
+ less ugly
+
+ WebView::WebView was initially creating a hidden window, then showing it. It would tell
+ WebPageProxy about the window while it was still hidden, and then have to inform
+ WebPageProxy that the window had become shown. This resulted in WebPageProxy sending
+ unnecessary messages to the web process, and confused code that assumed that the window
+ would be in the same state after WebView's constructor exited as it was when WebPageProxy
+ first found out about the window.
+
+ We now don't hide the window when creating it, which simplifies the code, and only tell
+ WebPageProxy about the window after we're done modifying it, which fixes the bug.
+
+ Fixes <http://webkit.org/b/53878> <rdar://problem/8977306> Assertion failure in
+ DrawingAreaImpl::resumePainting after window.open or when opening Web Inspector
+
+ Reviewed by Anders Carlsson.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::WebView): Changed ::CreateWindowEx to ::CreateWindowExW, to match other
+ Win32 API calls in WebKit2. Pass WS_VISIBLE to ::CreateWindowExW rather than waiting until
+ later to show the window. Added an assertion that m_isVisible matches the window's visible
+ state. Don't even create our WebPageProxy, or tell it about our window, until we're done
+ initializing our window, so that it doesn't get informed about our window's internal state
+ changes that happen beneath ::CreateWindowExW.
+ (WebKit::WebView::onSizeEvent): Null-check m_page since we can receive this message beneath
+ ::CreateWindowExW.
+ (WebKit::WebView::onShowWindowEvent): Ditto. Replaced one FIXME with another. Always set
+ handled to false so that ::DefWindowProcW can do its thing. (MSDN says this is when it
+ actually shows/hides the window, though I couldn't find any consequences of not calling
+ ::DefWindowProcW here.)
+
+2011-02-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: follow up on InspectorAgent split -
+ removing unnecessary methods from InspectorController.
+ https://bugs.webkit.org/show_bug.cgi?id=54093
+
+ * WebProcess/WebPage/WebInspector.cpp:
+ (WebKit::WebInspector::showConsole):
+ (WebKit::WebInspector::stopJavaScriptProfiling):
+
+2011-02-09 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Avoid WebProcessMain compilation, we are used a gtk specific main
+ https://bugs.webkit.org/show_bug.cgi?id=54015
+
+ Avoided the compilation of the general WebProcessMain, and added
+ soup initialization to WebProcessMainGtk.cpp.
+
+ * GNUmakefile.am:
+ * WebProcess/gtk/WebProcessMainGtk.cpp:
+ (WebKit::WebProcessMainGtk):
+
+2011-02-08 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Incorrect assertion in WorkQueueGtk, we need to register
+ more than one handle
+ https://bugs.webkit.org/show_bug.cgi?id=54014
+
+ Fixed assertion condition we need to register more than one
+ handler for the same file descriptor.
+
+ * Platform/gtk/WorkQueueGtk.cpp:
+ (WorkQueue::registerEventSourceHandler):
+
+2011-02-08 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ Fix typo in the include guards name in ChunkedUpdateDrawingAreaProxy.h
+ https://bugs.webkit.org/show_bug.cgi?id=54013
+
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
+
+2011-02-08 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Fix after r77874, m_isConnected is initialized before the
+ socket is opened
+ https://bugs.webkit.org/show_bug.cgi?id=54011
+
+ Fixed connection breakage after r77874, we have to wait until open
+ the socket to open the connection.
+
+ * Platform/CoreIPC/gtk/ConnectionGtk.cpp:
+ (CoreIPC::Connection::platformInitialize):
+ (CoreIPC::Connection::open):
+
+2011-02-08 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [WK2] LayerTreeContext is used outside the ACCELERATED_COMPOSITING
+ guards but not defined in DrawingAreaProxy.h
+ https://bugs.webkit.org/show_bug.cgi?id=54009
+
+ Removed the guards in the forward declaration, this will fail if
+ the class is finally used in the function, but it works for the
+ moment.
+
+ * UIProcess/DrawingAreaProxy.h:
+
+2011-02-08 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ WebKit2 GTK Fails to Build #include nested too deeply
+ https://bugs.webkit.org/show_bug.cgi?id=52219
+
+ * GNUmakefile.am: Removed the commands to create the directories
+ for the forwarding headers, the script already does it for us.
+ * config.h: Removed the config.h inclusion and added the
+ autotoolsconfig.h directly, also added a condition to share the
+ defines with QT.
+
+2011-02-08 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Crash when going back/forward when back/forward list is in a bad state.
+ https://bugs.webkit.org/show_bug.cgi?id=54059
+ <rdar://problem/8975244>
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::goForward): Add a null check.
+ (WebKit::WebPageProxy::goBack): ditto
+
+2011-02-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Assertion failure !isInAcceleratedCompositingMode() in DrawingAreaProxyImpl::incorporateUpdate()
+ https://bugs.webkit.org/show_bug.cgi?id=54046
+ <rdar://problem/8973960>
+
+ DrawingAreaImpl::setRootCompositingLayer can be called with a new layer even when already
+ in accelerated compositing mode. Similarly, it can be called with a null layer even when not
+ in accelerated compositing mode. Make the drawing area and layer tree host handle both these cases.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ Only call enterAcceleratedCompositingMode if there is no layer tree host, otherwise
+ just call LayerTreeHost::setRootCompositingLayer.
+
+ (WebKit::DrawingAreaImpl::setSize):
+ Add an assert.
+
+ (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
+ Assert that we don't have a layer tree host.
+
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ Assert that we do have a layer tree host.
+
+ (WebKit::DrawingAreaImpl::display):
+ If the call to display caused the page to enter accelerated compositing mode, we don't
+ want to send back an Update message.
+
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ (WebKit::LayerTreeHost::create):
+ * WebProcess/WebPage/LayerTreeHost.h:
+ Create no longer takes a graphics layer.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::create):
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Create no longer takes a graphics layer.
+
+ (WebKit::LayerTreeHostMac::setRootCompositingLayer):
+ Set the new root compositing layer.
+
+2011-02-08 Adam Roben <aroben@apple.com>
+
+ Implement WorkQueue::scheduleWorkAfterDelay on Windows
+
+ Each WorkQueue now owns its own timer queue. When scheduleWorkAfterDelay is called, we
+ create a timer-queue timer with the given delay. When the timer fires, we schedule the work
+ on the queue and clean up the timer.
+
+ Fixes <http://webkit.org/b/54040> <rdar://problem/8974230> Web process sticks around forever
+ if it's hung when UI process goes away
+
+ Reviewed by Anders Carlsson.
+
+ * Platform/WorkQueue.h: Added timerCallback and m_timerQueue.
+
+ * Platform/win/WorkQueueWin.cpp:
+ (WorkQueue::platformInitialize): Initialize m_timerQueue.
+ (WorkQueue::platformInvalidate): Clean up m_timerQueue.
+ (TimerContext::TimerContext): Added this helper object to hold the context needed by the
+ timer callback.
+ (WorkQueue::timerCallback): Added. Schedules the WorkItem on the WorkQueue and cleans up the
+ timer.
+ (WorkQueue::scheduleWorkAfterDelay): Create a timer-queue timer on our timer queue that will
+ fire after the given delay. Pass a new TimerContext object to the timer callback that
+ contains the information it needs.
+
+2011-02-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Rename PluginProcess::initializeConnection to PluginProcess::initialize
+ https://bugs.webkit.org/show_bug.cgi?id=54039
+
+ * PluginProcess/PluginProcess.cpp:
+ (WebKit::PluginProcess::initialize):
+ * PluginProcess/PluginProcess.h:
+ * PluginProcess/mac/PluginProcessMainMac.mm:
+ (WebKit::PluginProcessMain):
+ * WebProcess/WebProcess.h:
+
+2011-02-08 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8972913> and https://bugs.webkit.org/show_bug.cgi?id=54036
+ didChangeBackForwardList should include some context about what changed
+
+ Update the implementation of this API to include the new item (if any) and removed items (if any):
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebLoaderClient.cpp:
+ (WebKit::WebLoaderClient::didChangeBackForwardList):
+ * UIProcess/WebLoaderClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didChangeBackForwardList):
+ * UIProcess/WebPageProxy.h:
+
+ Have WebBackForwardList pass the new items and/or removed items when calling the notifier:
+ * UIProcess/WebBackForwardList.cpp:
+ (WebKit::WebBackForwardList::addItem):
+ (WebKit::WebBackForwardList::goToItem):
+ (WebKit::WebBackForwardList::clear):
+
+2011-02-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Sandbox violations visiting MobileMe.
+ <rdar://problem/8961330>
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Rename PluginProcess::initialize to PluginProcess::initializePluginProcess
+ https://bugs.webkit.org/show_bug.cgi?id=54037
+
+ Rename PluginProcess::initialize to PluginProcess::initializePluginProcess to better
+ match the WebProcess initialization code, in preparation of sharing more code.
+
+ * PluginProcess/PluginProcess.cpp:
+ (WebKit::PluginProcess::initializePluginProcess):
+ * PluginProcess/PluginProcess.h:
+ * PluginProcess/PluginProcess.messages.in:
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit::PluginProcessProxy::didFinishLaunching):
+
+2011-02-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ WK2: Add ability to pass context to policy delegate methods
+ https://bugs.webkit.org/show_bug.cgi?id=54031
+
+ * Platform/CoreIPC/HandleMessage.h:
+ (CoreIPC::callMemberFunction):
+ (CoreIPC::handleMessageVariadic):
+ * Scripts/webkit2/messages.py:
+ Add ability to pass variadic messages to sync messages.
+
+ * Shared/API/c/WKBase.h:
+ * Shared/APIObject.h:
+ Add WKBundleNavigation type.
+
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+ (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
+ (WebKit::WebPageProxy::decidePolicyForMIMEType):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/WebPolicyClient.cpp:
+ (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
+ (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
+ (WebKit::WebPolicyClient::decidePolicyForMIMEType):
+ * UIProcess/WebPolicyClient.h:
+ Update policy client for new data.
+
+ * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
+ * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp: Added.
+ (WKBundleNavigationActionGetTypeID):
+ (WKBundleNavigationActionGetNavigationType):
+ (WKBundleNavigationActionGetEventModifiers):
+ (WKBundleNavigationActionGetEventMouseButton):
+ (WKBundleNavigationActionCopyHitTestResult):
+ (WKBundleNavigationActionCopyFormElement):
+ * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h: Added.
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+ (WKBundlePageSetPolicyClient):
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
+ * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp: Added.
+ (WebKit::mouseEventForNavigationAction):
+ (WebKit::mouseButtonForMouseEvent):
+ (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):
+ (WebKit::InjectedBundleNavigationAction::mouseButtonForNavigationAction):
+ (WebKit::InjectedBundleNavigationAction::create):
+ (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
+ * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h: Added.
+ (WebKit::InjectedBundleNavigationAction::navigationType):
+ (WebKit::InjectedBundleNavigationAction::modifiers):
+ (WebKit::InjectedBundleNavigationAction::mouseButton):
+ (WebKit::InjectedBundleNavigationAction::hitTestResult):
+ (WebKit::InjectedBundleNavigationAction::formElement):
+ (WebKit::InjectedBundleNavigationAction::type):
+ * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp: Added.
+ (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNavigationAction):
+ (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction):
+ (WebKit::InjectedBundlePagePolicyClient::decidePolicyForMIMEType):
+ * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h: Added.
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::createWindow):
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::initializeInjectedBundlePolicyClient):
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::injectedBundlePolicyClient):
+ Pipe the policy client through the bundle to allow setting user data.
+
+ * WebKit2.pro:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * win/WebKit2.vcproj:
+ * win/WebKit2Generated.make:
+ Add new files.
+
+2011-02-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Crash calling -setFrame:andScrollBy: in windowDidResize
+ https://bugs.webkit.org/show_bug.cgi?id=54030
+ <rdar://problem/8969760>
+
+ * Platform/mac/SharedMemoryMac.cpp:
+ (WebKit::SharedMemory::create):
+ Assert that size is not zero here; we never want to try to create shared memory with a zero size.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setSize):
+ Always invalidate the entire visible page when resizing.
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove orphan code from old parser
+ https://bugs.webkit.org/show_bug.cgi?id=53984
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp
+ * WebProcess/WebCoreSupport/WebChromeClient.h
+
+2011-02-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ UI process crashes if web process crashes while web inspector is focused
+ https://bugs.webkit.org/show_bug.cgi?id=53965
+ <rdar://problem/8961633>
+
+ Make sure to close the web inspector web page proxy before calling platformClose, since
+ platformClose can cause the web page proxy to try to send messages (such as SetActive)
+ to the web process while it's in a bad state.
+
+ The original fix, http://trac.webkit.org/changeset/77866, put the call to m_page->close() in
+ WebInspectorProxy::didClose, which was wrong and lead to crashes. The right place to close the page
+ is in WebInspectorProxy::invalidate.
+
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::WebInspectorProxy::invalidate):
+
+2011-02-08 Jessie Berlin <jberlin@apple.com>
+
+ Reviewed by Adam Roben.
+
+ ASSERTION FAILURE: ASSERT_NOT_REACHED() in Connection::writeEventHandler() after the Web
+ Process crashes.
+ https://bugs.webkit.org/show_bug.cgi?id=54005
+
+ * Platform/CoreIPC/win/ConnectionWin.cpp:
+ (CoreIPC::Connection::writeEventHandler):
+ Handle ERROR_BROKEN_PIPE by calling connectionDidClose() and returning early.
+
+2011-02-08 Adam Roben <aroben@apple.com>
+
+ Handle WM_TIMER messages for stopped timers
+
+ Whenever we stop a timer, we call ::KillTimer to cancel any future firings of the timer. But
+ ::KillTimer doesn't do anything about WM_TIMER messages that have already been posted to the
+ message queue. We need to handle those, too.
+
+ Fixes <http://webkit.org/b/53999> Occasional assertion failures in
+ RunLoop::TimerBase::timerFired
+
+ Reviewed by Darin Adler.
+
+ * Platform/win/RunLoopWin.cpp:
+ (RunLoop::TimerBase::timerFired): Just bail if the timer has already been stopped.
+
+2011-02-08 Adam Roben <aroben@apple.com>
+
+ Don't mark a Connection as connected until open() is called on Windows
+
+ This matches Mac. Even though the Connection's pipe is connected before open() is called,
+ the Connection itself isn't really connected to the pipe until then, and we won't actually
+ read any data from before that point.
+
+ Fixes <http://webkit.org/b/53998> <rdar://problem/8971207> REGRESSION (r77874): Assertion
+ failure on launch in Connection::setDidCloseOnConnectionWorkQueueCallback on Windows
+
+ Reviewed by Darin Adler.
+
+ * Platform/CoreIPC/win/ConnectionWin.cpp:
+ (CoreIPC::Connection::platformInitialize): Moved code to set m_isConnected from here to
+ open.
+ (CoreIPC::Connection::platformInvalidate): Unset m_isConnected, to match Mac. (This isn't
+ part of the bug fix, but seemed worthwhile.)
+ (CoreIPC::Connection::open): Set m_isConnected now that we're going to listen on the pipe.
+
+2011-02-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77866.
+ http://trac.webkit.org/changeset/77866
+ https://bugs.webkit.org/show_bug.cgi?id=53981
+
+ caused all WebKit2 inspector tests to crash (Requested by
+ othermaciej on #webkit).
+
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::WebInspectorProxy::didClose):
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add resource load client for injected bundle and move willSendRequest there
+ https://bugs.webkit.org/show_bug.cgi?id=53972
+
+ * GNUmakefile.am:
+ * WebKit2.pro:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+ (WKBundlePageSetPageLoaderClient):
+ (WKBundlePageSetResourceLoadClient):
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
+ * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp: Added.
+ (WebKit::InjectedBundlePageResourceLoadClient::didInitiateLoadForResource):
+ (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
+ (WebKit::InjectedBundlePageResourceLoadClient::didReceiveResponseForResource):
+ (WebKit::InjectedBundlePageResourceLoadClient::didReceiveContentLengthForResource):
+ (WebKit::InjectedBundlePageResourceLoadClient::didFinishLoadForResource):
+ (WebKit::InjectedBundlePageResourceLoadClient::didFailLoadForResource):
+ * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h: Added.
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
+ (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
+ (WebKit::WebFrameLoaderClient::dispatchDidReceiveResponse):
+ (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
+ (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
+ (WebKit::WebFrameLoaderClient::dispatchDidFailLoading):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::initializeInjectedBundleResourceLoadClient):
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::injectedBundleResourceLoadClient):
+ * win/WebKit2.vcproj:
+
+2011-02-07 Mark Rowe <mrowe@apple.com>
+
+ Fix the 32-bit build.
+
+ * UIProcess/cf/WebBackForwardListCF.cpp:
+ (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Add some casts
+ to prevent warnings about mixing signed and unsigned comparisons.
+
+2011-02-07 Qi Zhang <qi.2.zhang@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
+ https://bugs.webkit.org/show_bug.cgi?id=52974
+
+ Add ContextMenuItemTagCopyImageUrlToClipboard into standard action but Qt platform specific.
+
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebKit::WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard):
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixing a build break on Mac caused by http://trac.webkit.org/changeset/77874
+
+ Removed unused static function.
+
+ * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/8969888>
+ The WebProcess should set LSFileQuarantineEnabled to true
+
+ * WebProcess/Info.plist:
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Crash in web process after the connection had been closed
+ https://bugs.webkit.org/show_bug.cgi?id=51115
+ <rdar://problem/8964255>
+
+ Remove didCloseOnConnectionWorkQueue from Connection::Client and add
+ Connection::setDidCloseOnConnectionWorkQueueCallback which takes a static
+ function, eliminating the race condition in connectionDidClose where m_client could be
+ nulled out in the client thread right before we try to dereference it.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::Connection):
+ Initialize m_didCloseOnConnectionWorkQueueCallback.
+
+ (CoreIPC::Connection::setDidCloseOnConnectionWorkQueueCallback):
+ Update m_didCloseOnConnectionWorkQueueCallback.
+
+ (CoreIPC::Connection::connectionDidClose):
+ Call m_didCloseOnConnectionWorkQueueCallback.
+
+ * Platform/WorkQueue.h:
+ Make WorkQueue noncopyable.
+
+ * PluginProcess/PluginProcess.cpp:
+ (WebKit::PluginProcess::initializeConnection):
+ Call setDidCloseOnConnectionWorkQueueCallback.
+
+ * Shared/ChildProcess.cpp:
+ (WebKit::ChildProcess::didCloseOnConnectionWorkQueue):
+ * Shared/ChildProcess.h:
+ didCloseOnConnectionWorkQueue is now a static member function.
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::initialize):
+ Call setDidCloseOnConnectionWorkQueueCallback.
+
+2011-02-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed Adam Roben and Darin Adler.
+
+ WebKit2: drag and drop support on Windows.
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+ <rdar://problem/8514409>
+
+ This patch contains the remaining work to support
+ a WebKit window as drag source on Windows.
+ I've added the code to generate the image for dragging a link as
+ well as the steps necessary to package the HBITMAP into a SharedMemory
+ object and send it over to the UI process where DoDragDrop is performed.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setDragImage):
+ (WebKit::WebPageProxy::startDragDrop):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebDragClient.cpp:
+ (WebKit::WebDragClient::startDrag): Made startDrag for
+ platforms other than Windows and Mac.
+ * WebProcess/WebCoreSupport/WebDragClient.h:
+ * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
+ (WebKit::WebDragClient::startDrag):
+ * WebProcess/WebCoreSupport/win/WebDragClientWin.cpp: Added.
+ (WebKit::draggingSourceOperationMaskToDragCursors):
+ (WebKit::WebDragClient::startDrag):
+ * WebProcess/WebCoreSupport/win/WebDragSource.cpp: Added.
+ This object implements the IDropSource interface.
+ (WebDragSource::createInstance):
+ (WebDragSource::WebDragSource):
+ (WebDragSource::QueryInterface):
+ (WebDragSource::AddRef):
+ (WebDragSource::Release):
+ (WebDragSource::QueryContinueDrag):
+ (WebDragSource::GiveFeedback):
+ * WebProcess/WebCoreSupport/win/WebDragSource.h: Added.
+ * win/WebKit2.vcproj:
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ UI process crashes if web process crashes while web inspector is focused
+ https://bugs.webkit.org/show_bug.cgi?id=53965
+ <rdar://problem/8961633>
+
+ Make sure to close the web inspector web page proxy before calling platformClose, since
+ platformClose can cause the web page proxy to try to send messages (such as SetActive)
+ to the web process while it's in a bad state.
+
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::WebInspectorProxy::didClose):
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Find bouncy is missing content on pages with framesets
+ https://bugs.webkit.org/show_bug.cgi?id=53958
+ <rdar://problem/8904447>
+
+ Fix paint rect computation; FrameView::paint expects the paint rect to be in the
+ parent widget's coordinate system.
+
+ * WebProcess/WebPage/FindController.cpp:
+ (WebKit::FindController::updateFindIndicator):
+
+2011-02-07 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ <rdar://problem/8960434> and https://bugs.webkit.org/show_bug.cgi?id=53957
+ Crash after incorrectly restoring bogus session state.
+
+ In some cases we're writing an invalid session state for a back/forward list where the current entry is 0
+ but the number of entries is also 0.
+ In such cases the current entry should be "NoCurrentEntryIndex."
+
+ When we later read this state in, we set ourselves up to crash later.
+
+ Amusingly an ASSERT caught this, but we should've rejected it before the ASSERT fired.
+
+ * UIProcess/cf/WebBackForwardListCF.cpp:
+ (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Fail the restore if the "current index past the end
+ of the list" case occurs, and speculatively bail out of the case where we have no current index but do have a list.
+ Also remove the unhelpful ASSERT.
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add bundle API to get the background color of a frame
+ <rdar://problem/8962670>
+ https://bugs.webkit.org/show_bug.cgi?id=53952
+
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
+ (WKBundleFrameGetBodyBackgroundColor):
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
+ Add API function.
+
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::getDocumentBackgroundColor):
+ * WebProcess/WebPage/WebFrame.h:
+ Call down into the document to get either the body's, or if there is no body,
+ the root element's, background color.
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Fix typo. vectical -> vertical.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
+
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Inform the UIProcess when main frame scrollbars change
+ <rdar://problem/8967496>
+ https://bugs.webkit.org/show_bug.cgi?id=53941
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageHasHorizontalScrollbar):
+ (WKPageHasVerticalScrollbar):
+ * UIProcess/API/C/WKPage.h:
+ Add API to query whether the main frame has scrollbars.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ (WebKit::WebPageProxy::close):
+ (WebKit::WebPageProxy::processDidCrash):
+ (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::hasHorizontalScrollbar):
+ (WebKit::WebPageProxy::hasVerticalScrollbar):
+ Store/update main frame scrollbar state.
+
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::contentsSizeChanged):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ (WebKit::WebChromeClient::WebChromeClient):
+ Post message when main frame scrollbar state changes.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Some content is not covered by Find-on-page overlay
+ https://bugs.webkit.org/show_bug.cgi?id=53937
+ <rdar://problem/8711353>
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::didInstallPageOverlay):
+ Call LayerTreeHost::didInstallPageOverlay.
+
+ (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
+ Call LayerTreeHost::didUninstallPageOverlay.
+
+ (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
+ Call LayerTreeHost::setPageOverlayNeedsDisplay.
+
+ * WebProcess/WebPage/FindController.cpp:
+ (WebKit::FindController::drawRect):
+ Remove a bogus assertion.
+
+ * WebProcess/WebPage/LayerTreeHost.h:
+ Add new pure virtual member functions.
+
+ * WebProcess/WebPage/PageOverlay.cpp:
+ (WebKit::PageOverlay::setNeedsDisplay):
+ Call DrawingArea::setPageOverlayNeedsDisplay.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::installPageOverlay):
+ Make sure to call PageOverlay::setNeedsDisplay after the page overlay has been installed.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Create the page overlay layer if needed.
+
+ (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
+ Invalidate the page overlay layer as well.
+
+ (WebKit::LayerTreeHostMac::sizeDidChange):
+ Resize the page overlay layer.
+
+ (WebKit::LayerTreeHostMac::didInstallPageOverlay):
+ Create the page overlay layer.
+
+ (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
+ Destroy the page overlay layer.
+
+ (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
+ Call setNeedsDisplay on the page overlay layer.
+
+ (WebKit::LayerTreeHostMac::paintContents):
+ Handle painting the page overlay layer.
+
+ (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
+ Flush the page overlay layer changes as well.
+
+ (WebKit::LayerTreeHostMac::createPageOverlayLayer):
+ Create a layer and add it as a sublayer of the root layer.
+
+ (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
+ Destroy the page overlay layer.
+
+2011-02-06 Adam Roben <aroben@apple.com>
+
+ Make it possible to use DrawingAreaProxyImpl on Windows
+
+ It can be optionally turned on by setting the WEBKIT2_USE_NEW_DRAWING_AREA environment
+ variable. Turning it on by default is covered by <http://webkit.org/b/53805>.
+
+ Fixes <http://webkit.org/b/53879>.
+
+ Reviewed by Anders Carlsson.
+
+ * UIProcess/BackingStore.h: Add an m_bitmap member on Windows.
+
+ * UIProcess/win/BackingStoreWin.cpp:
+ (WebKit::BitmapDC::operator HDC):
+ (WebKit::BitmapDC::BitmapDC):
+ (WebKit::BitmapDC::~BitmapDC):
+ Added this helper class, which uses RAII to select a bitmap into a new memory DC.
+ (WebKit::BackingStore::paint): Wrap our bitmap in a BitmapDC and use ::BitBlt to copy the
+ specified rect into the destination DC.
+ (WebKit::createBitmap): New helper function, just creates a DIB section with the specified
+ size.
+ (WebKit::BackingStore::incorporateUpdate): Ported from BackingStoreMac.mm. It seems like
+ this code could be shared at some point.
+ (WebKit::BackingStore::scroll): Wrap our bitmap in a BitmapDC and use ::ScrollDC to scroll
+ the specified rect.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::useNewDrawingArea): Added. Returns true if the WEBKIT2_USE_NEW_DRAWING_AREA
+ environment variable is set.
+ (WebKit::drawPageBackground): New helper function. Code came from onPaintEvent.
+ (WebKit::WebView::onPaintEvent): Ported from -[WKView drawRect:].
+ (WebKit::WebView::createDrawingAreaProxy): Create a DrawingAreaProxyImpl if we're using the
+ new drawing area.
+
+ (WebKit::WebView::enterAcceleratedCompositingMode):
+ (WebKit::WebView::exitAcceleratedCompositingMode):
+ (WebKit::WebView::pageDidEnterAcceleratedCompositing):
+ (WebKit::WebView::pageDidLeaveAcceleratedCompositing):
+ Added some assertions to make sure these are only called when expected. We don't expect
+ enter/exitAcceleratedCompositingMode to be called at all right now, because accelerated
+ compositing is turned off in WebKit2 on Windows.
+
+ (WebKit::WebView::switchToDrawingAreaTypeIfNecessary): Ditto, and added a case for the
+ DrawingAreaInfo::Impl constant.
+
+2011-02-07 Adam Roben <aroben@apple.com>
+
+ Start compiling DrawingArea[Proxy]Impl and dependencies on Windows
+
+ Fixes <http://webkit.org/b/53875> WebKit2 on Windows should build DrawingArea[Proxy]Impl
+
+ Reviewed by Sam Weinig and Darin Adler.
+
+ * Platform/Region.cpp:
+ (WebKit::Region::Shape::shapeOperation): Initialize variable to avoid a bogus "potentially
+ uninitialized variable" warning.
+
+ * UIProcess/BackingStore.cpp: Removed #error for non-Mac platforms.
+
+ * UIProcess/BackingStore.h: Added a PlatformGraphicsContext typedef for Windows.
+
+ * UIProcess/DrawingAreaProxy.h:
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didReceiveMessage):
+ Allow Windows to compile the new drawing area code.
+
+ * WebProcess/WebPage/DrawingArea.cpp:
+ (WebKit::DrawingArea::create): Allow creating a DrawingAreaImpl on Windows, too.
+
+ * WebProcess/WebPage/DrawingArea.h:
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::didReceiveMessage):
+ Allow Windows to compile the new drawing area code.
+
+ * Shared/win/LayerTreeContextWin.cpp: Added.
+ * UIProcess/win/BackingStoreWin.cpp: Added.
+ Stubbed out these files.
+
+ * win/WebKit2.vcproj: Added new files.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Rename some drawing area related member functions
+ https://bugs.webkit.org/show_bug.cgi?id=53935
+
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::setPageOverlayNeedsDisplay):
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setNeedsDisplay):
+ (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ * WebProcess/WebPage/LayerTreeHost.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
+ (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
+
+2011-02-07 Adam Roben <aroben@apple.com>
+
+ Use the right calling convention when calling WebKitMain
+
+ Fixes <http://webkit.org/b/53923> REGRESSION (r77678): Crash on quit in web process in
+ wWinMain
+
+ Reviewed by Steve Falkenburg.
+
+ * win/MainWin.cpp:
+ (wWinMain): Use __cdecl instead of WINAPI (__stdcall) when calling WebKitMain, since that is
+ how that function is declared.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ The drawing area should be in charge of drawing the page overlay
+ https://bugs.webkit.org/show_bug.cgi?id=53927
+
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::didInstallPageOverlay):
+ (WebKit::DrawingArea::didUninstallPageOverlay):
+ (WebKit::DrawingArea::setOverlayNeedsDisplay):
+ Add empty stubs.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::didInstallPageOverlay):
+ Add empty function. This will eventually ask the layer tree host to
+ create a GraphicsLayer for the page overlay.
+
+ (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
+ Tell the page that it needs to be repainted.
+
+ (WebKit::DrawingAreaImpl::setOverlayNeedsDisplay):
+ Just call setNeedsDisplay for now.
+
+ (WebKit::DrawingAreaImpl::display):
+ Paint the page overlay too.
+
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::drawRect):
+ Only call drawPageOverlay if we have an old drawing area.
+
+ (WebKit::WebPage::drawPageOverlay):
+ Draw the page overlay. Code moved here from WebPage::drawRect.
+
+ (WebKit::WebPage::installPageOverlay):
+ Call DrawingArea::installPageOverlay.
+
+ (WebKit::WebPage::uninstallPageOverlay):
+ Call DrawingArea::uninstallPageOverlay.
+
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::hasPageOverlay):
+ Add getter.
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add WebPage::bounds and use it
+ https://bugs.webkit.org/show_bug.cgi?id=53926
+
+ * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
+ (WebKit::ChunkedUpdateDrawingArea::resumePainting):
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::resumePainting):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::bounds):
+
+2011-02-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Don't exclude overlay scrollers from the page overlay bounds
+ https://bugs.webkit.org/show_bug.cgi?id=53924
+
+ Don't subtract the scrollbars from the page overlay bounds if
+ overlay scrollers are enabled.
+
+ * WebProcess/WebPage/PageOverlay.cpp:
+ (WebKit::PageOverlay::bounds):
+
+2011-02-07 Adam Roben <aroben@apple.com>
+
+ Windows build fix after r77794
+
+ * win/WebKit2.def: Export WebCore symbols used by WebKitTestRunner.
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Add WKURLRequestCopyURL API (needed for tests and also generally useful)
+ https://bugs.webkit.org/show_bug.cgi?id=53909
+
+ * Shared/API/c/WKURLRequest.cpp:
+ (WKURLRequestCopyURL):
+ * Shared/API/c/WKURLRequest.h:
+ * Shared/WebURLRequest.h:
+ (WebKit::WebURLRequest::url):
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed; speculative Qt build fix.
+
+ * WebKit2.pro:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
+ (WebKit::NetscapePluginModule::getPluginInfo): Calls adoptArrayPtr.
+
+2011-02-06 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] WebKit does not build on Mac with WebKit 2
+ https://bugs.webkit.org/show_bug.cgi?id=53380
+
+ * Platform/CoreIPC/qt/ConnectionQt.cpp: Use fcntl() to set close on exec so
+ we do not rely on recent kernel.
+ (CoreIPC::Connection::readyReadHandler):
+ * Platform/qt/SharedMemoryQt.cpp: ditto
+ (WebKit::SharedMemory::create):
+ (WebKit::SharedMemory::createHandle):
+ * UIProcess/Launcher/qt/ProcessLauncherQt.cpp: Guard prctl() since it is
+ a Linux specific function.
+ (WebKit::QtWebProcess::setupChildProcess):
+ * UIProcess/DrawingAreaProxy.h: Differentiate between building on Mac
+ and the Mac port.
+ * UIProcess/DrawingAreaProxyImpl.cpp: ditto
+ * UIProcess/WebPageProxy.cpp: ditto
+ (WebKit::WebPageProxy::didReceiveMessage):
+ * WebProcess/WebPage/DrawingArea.cpp: ditto
+ (WebKit::DrawingArea::create):
+ * WebProcess/WebPage/DrawingArea.h:
+ * WebProcess/WebPage/DrawingAreaImpl.cpp: ditto
+ * WebProcess/WebPage/WebPage.cpp: ditto
+ (WebKit::WebPage::didReceiveMessage):
+
+2011-02-05 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION: New drawing area is causing some WebProcess crashes in layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=53865
+ <rdar://problem/8963148>
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): Handle the case
+ where this is called repeatedly without exiting accelerated composting mode
+ first.
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Handle the case
+ of being called more than once.
+
+2011-02-05 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Need a way to resize and scroll the page at the same time
+ https://bugs.webkit.org/show_bug.cgi?id=53814
+ <rdar://problem/8498008>
+
+ Add -[WKView setFrame:andScrollBy:].
+
+ * UIProcess/API/mac/WKView.h:
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView setFrame:andScrollBy:]):
+ Stash away the scroll offset and call setFrame:.
+
+ (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::]):
+ (-[WKView _setDrawingAreaSize:]):
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPage::setViewportSize):
+ DrawingAreaProxy::setSize now takes a scroll offset.
+
+ * UIProcess/DrawingAreaProxy.cpp:
+ (WebKit::DrawingAreaProxy::setSize):
+ This now takes a scroll offset and stores it in m_scrollOffset.
+
+ * UIProcess/DrawingAreaProxy.h:
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::sendSetSize):
+ Send along the scroll offset and set it back to zero.
+
+ * UIProcess/LayerBackedDrawingAreaProxy.cpp:
+ (WebKit::LayerBackedDrawingAreaProxy::didSetSize):
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::didSetSize):
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::onSizeEvent):
+ (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):
+ DrawingAreaProxy::setSize now takes a scroll offset.
+
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::setSize):
+ Add a scrollOffset parameter.
+
+ * WebProcess/WebPage/DrawingArea.messages.in:
+ Add a scroll offset parameter to the SetSize message.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setSize):
+ Call WebPage::scrollMainFrameIfNotAtMaxScrollPosition.
+
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::scrollMainFrameIfNotAtMaxScrollPosition):
+ Compute a scroll offset and call setScrollPosition on the main frame view.
+
+2011-02-04 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ WebKit2: Crash when InjectedBundlePageLoaderClient::willSendRequestForFrame returns a null WKURLRequestRef
+ https://bugs.webkit.org/show_bug.cgi?id=53829
+
+ Store the result of m_client.willSendRequestForFrame in a RefPtr, and null check it before
+ calling resourceRequest() on it.
+
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
+ (WebKit::InjectedBundlePageLoaderClient::willSendRequestForFrame):
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * WebProcess/mac/WebProcessMac.mm:
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Link opened in background tab fails to paint when activated if it completes loading before tab is selected
+ https://bugs.webkit.org/show_bug.cgi?id=53827
+ <rdar://problem/8962355>
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::resumePainting):
+ Invalidate the entire page.
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix <rdar://problem/8961227> WebKit2 does not work with symlinked home directories.
+
+ * WebProcess/mac/WebProcessMac.mm:
+ (WebKit::WebProcess::platformSetCacheModel):
+ Don't adopt an autoreleased pointer, this would lead to a crash.
+
+ (WebKit::appendSandboxParameterPath):
+ (WebKit::appendSandboxParameterConfPath):
+ (WebKit::initializeSandbox):
+ Clean up the sandbox parameter code and make sure that realpath is called for all parameters.
+
+2011-02-04 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Sandbox violations when visiting a site using HTTP authentication
+ <rdar://problem/8951079>
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-04 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53823
+ Print layout sometimes seen on screen
+
+ <rdar://problem/8948742> REGRESSION (WebKit2) - When I print a page, I visually see it re-layout
+ <rdar://problem/8899389> REGRESSION(WebKit2): Wrong content can appear when print dialog is up
+
+ * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::setAutodisplay): Removed a
+ branch that didn't do anything useful.
+
+ * UIProcess/API/mac/WKPrintingView.h:
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (-[WKPrintingView _suspendAutodisplay]):
+ (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
+ (-[WKPrintingView _delayedResumeAutodisplay]):
+ (-[WKPrintingView knowsPageRange:]):
+ (-[WKPrintingView beginDocument]):
+ (-[WKPrintingView endDocument]):
+ When page setup changes, or when going from print preview to actual printing, AppKit calls
+ -endDocument just to begin it again. Delay resuming autodisplay until the next run loop
+ iteration.
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::invalidateContentsAndWindow):
+ (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
+ Tightened it up from other side - we should never send pixels to UI process while in
+ printing mode. This is not 100% reliable, because relayout doesn't happen immediately,
+ and we can still have print layout in screen mode - but it helps.
+
+2011-02-04 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Fix for <rdar://problem/8961580>.
+ Work around for <rdar://problem/8957845>.
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-04 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKit2 doesn't hide mouse pointer on keypress
+ https://bugs.webkit.org/show_bug.cgi?id=53821
+ rdar://problem/8630895
+
+ * UIProcess/PageClient.h: Renamed didNotHandleKeyEvent to
+ doneWithKeyEvent and added a bool wasEventHandled argument.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didReceiveEvent): Changed code to call
+ doneWithKeyEvent and call even if event was handled.
+
+ * UIProcess/API/mac/PageClientImpl.h: Updated for above change.
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::doneWithKeyEvent): Ditto. But also
+ call [NSCursor setHiddenUntilMouseMoves:YES] when a key down
+ event was handled. This matches what -[WebHTMLView keyDown:] does.
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPagePrivate::doneWithKeyEvent): Ditto.
+ * UIProcess/API/qt/qwkpage_p.h: Ditto.
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::doneWithKeyEvent): Ditto.
+ * UIProcess/win/WebView.h: Ditto.
+
+2011-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WebKit2 clients fail to launch on Windows if client exe is in a different directory from WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=53810
+ <rdar://problem/8946085>
+
+ If WebKit2WebProcess.exe is in a different directory from the client process, and that
+ client process uses CreateProcess to launch WebKit2WebProcess, the DLL search path may
+ end up excluding the directory containing WebKit. To address this, we use SetDllDirectory
+ to explicitly include the WebKit directory in the DLL search path.
+
+ * win/MainWin.cpp:
+ (wWinMain): Use SetDllDirectory and LoadLibrary to load WebKit.dll from WebKit2WebProcess.exe
+ * win/WebKit2WebProcessCommon.vsprops: Don't link directly to WebKit. Link against shlwapi.
+
+2011-02-04 Adam Roben <aroben@apple.com>
+
+ Allow passing a null filter callback to WKPageCopySessionState
+
+ WebKit2 part of <http://webkit.org/b/53616> <rdar://problem/8949883>.
+
+ Reviewed by Sam Weinig.
+
+ * UIProcess/cf/WebBackForwardListCF.cpp:
+ (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Check if the filter is null
+ before calling it.
+
+2011-02-04 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by John Sullivan.
+
+ WebKit2: DidInitiateLoadForResource needs to know if the resource is being loaded by a committed or provisional frame
+ https://bugs.webkit.org/show_bug.cgi?id=53794
+
+ When we navigate from one page to another, there can be multiple subresource requests between when
+ the new page has started its provisional load and when it has committed the load.
+
+ There can be:
+
+ - The main resource load of the provisional page
+ - Synchronous XHR from the unload event of the loaded page.
+
+ WebKit clients need to be able to differentiate between these loads.
+
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didInitiateLoadForResource): Pass whether or not the page is provisionally loading
+ to the client.
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in: Add a new parameter to DidInitiateLoadForResource.
+ * UIProcess/WebResourceLoadClient.cpp:
+ (WebKit::WebResourceLoadClient::didInitiateLoadForResource): a new parameter to didInitiateLoadForResource.
+ * UIProcess/WebResourceLoadClient.h:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest): Pass whether or not the page is currently
+ in a provisional load (checked by seeing if the DocumentLoader matches the FrameLoader's provisionalDocumentLoader)
+ to the UI Process.
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Mac WebKit2 should use the new drawing area
+ https://bugs.webkit.org/show_bug.cgi?id=53802
+ <rdar://problem/7881419>
+ <rdar://problem/7881447>
+ <rdar://problem/8252632>
+ <rdar://problem/8479422>
+ <rdar://problem/8633813>
+ <rdar://problem/8734512>
+ <rdar://problem/8787660>
+
+ * UIProcess/API/mac/WKView.mm:
+ (useNewDrawingArea):
+ Return true. Eventually this function should be removed, but let's keep it for now so
+ we can go back to the old drawing area if necessary.
+
+2011-02-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ WebKit2: Crash in WebPageProxy::setPendingAPIRequestURL after web process crashed
+ https://bugs.webkit.org/show_bug.cgi?id=53799
+ <rdar://problem/8943956>
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::reload):
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fix a shared memory leak
+ https://bugs.webkit.org/show_bug.cgi?id=53800
+
+ Move the send right representing the shared memory.
+
+ * Platform/mac/SharedMemoryMac.cpp:
+ (WebKit::SharedMemory::Handle::encode):
+
+2011-02-04 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ <rdar://problem/8636239> and https://bugs.webkit.org/show_bug.cgi?id=53785
+ WebKit2: Pages with dynamically inserted iframes can add extraneous back/forward items.
+
+ WebCore doesn't gracefully handle the case where the decidePolicyForNavigationAction callback
+ does not occur synchronously. Let's make it synchronous.
+
+ Change WebPageProxy to handle this message reply synchronously:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in: Make the navigation policy action message be synchronous.
+
+ * Platform/CoreIPC/HandleMessage.h:
+ (CoreIPC::callMemberFunction): Add a 6-argument varient
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the message synchronously.
+
+2011-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+ Correct prebuild build-stopping rule to allow project only rebuilds.
+
+ * win/WebKit2WebProcessPreBuild.cmd:
+
+2011-02-04 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Assertion failure in WebInspectorProxy::platformClose closing main window when inspecting a popup
+ window, or when running regression tests.
+ https://bugs.webkit.org/show_bug.cgi?id=53798
+ <rdar://problem/8814364>
+
+ Only assert about the state of m_inspectorWindow and m_inspectorView if the inspector is visible.
+ Also, only call ::DestroyWindow if the HWND is non-null, just to be safe.
+
+ * UIProcess/win/WebInspectorProxyWin.cpp:
+ (WebKit::WebInspectorProxy::platformClose):
+
+2011-02-04 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Go out of accelerated compositing mode when the drawing area is destroyed
+ https://bugs.webkit.org/show_bug.cgi?id=53788
+
+ This fixes a crash in the UI process if a web process crashes while in accelerated compositing mode.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl):
+
+2011-02-03 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: remove settings related methods from InspectorClient
+ https://bugs.webkit.org/show_bug.cgi?id=53686
+
+ * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
+ (WebKit::WebInspectorFrontendClient::WebInspectorFrontendClient):
+
+2011-02-03 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
+ https://bugs.webkit.org/show_bug.cgi?id=52897
+ <rdar://problem/8898294>
+
+ * Shared/API/c/WKSharedAPICast.h:
+ (WebKit::toAPI):
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
+ (WebKit::InjectedBundlePageLoaderClient::willSendRequestForFrame):
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
+
+2011-02-03 Ivan Krstić <ike@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Make WebProcess pass explicit homedir parameter to the sandbox
+ <rdar://problem/8405760>
+ <https://webkit.org/b/53558>
+
+ * WebProcess/com.apple.WebProcess.sb:
+ * WebProcess/mac/WebProcessMac.mm:
+ (WebKit::initializeSandbox):
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-03 Adam Langley <agl@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Plumb mixed script URL to FrameLoaderClient
+ https://bugs.webkit.org/show_bug.cgi?id=52384
+
+ Regressions covered by http/tests/security/mixedContent/*
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::didRunInsecureContent):
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+
+2011-02-03 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Download bundles should be moved to their final destination when they
+ finish.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53668
+
+ Reviewed by Adam Roben.
+
+ * WebProcess/Downloads/Download.cpp:
+ (WebKit::Download::Download):
+ Initialize m_allowOverwrite.
+ (WebKit::Download::retrieveDestinationWithSuggestedFilename):
+ Return the result of requesting the destination filename from the UI
+ process.
+ (WebKit::Download::decideDestinationWithSuggestedFilename):
+ Call retrieveDestinationWithSuggestedFilename().
+ (WebKit::Download::didFinish):
+ Call platformDidFinish().
+
+ * WebProcess/Downloads/Download.h:
+ Declare retrieveDestinationWithSuggestedFilename() and
+ platformDidFinish(). Add a member variable to store whether the UI
+ process would like us to overwrite existing files.
+
+ * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+ (WebKit::willResumeWithResponseCallback):
+ Remove some trailing whitespace.
+
+ * WebProcess/Downloads/curl/DownloadCurl.cpp:
+ (WebKit::Download::platformDidFinish):
+ Stubbed.
+
+ * WebProcess/Downloads/mac/DownloadMac.mm:
+ (WebKit::Download::platformDidFinish):
+ Stubbed.
+
+ * WebProcess/Downloads/qt/DownloadQt.cpp:
+ (WebKit::Download::platformDidFinish):
+ Stubbed.
+
+ * WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp:
+ (WebKit::Download::didDecideDestination):
+ Store whether the UI process would like us to overwrite existing files.
+ (WebKit::Download::platformDidFinish):
+ Try to move the bundle to the final destination. If that fails, ask the
+ UI process for a new destination. If we receive one, try again to move
+ the bundle. Call didCreateDestination() to report the updated path of
+ file whether it's the bundle that we failed to move, or the new final
+ destination.
+
+ This is similar to what is done by WebKit 1's CFNetwork port.
+
+ * win/WebKit2.vcproj:
+ Add DownloadWin.cpp.
+
+2011-02-01 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Small clean-up in DownloadCFNet.cpp.
+
+ Rubber-stamped by Mark Rowe.
+
+ * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+ (WebKit::Download::didDecideDestination):
+ Moved out of the section labeled "CFURLDownload callbacks" and up near
+ the other member functions.
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Paint non-composited contents in a layer
+ https://bugs.webkit.org/show_bug.cgi?id=53742
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setNeedsDisplay):
+ Call LayerTreeHost::setNonCompositedContentsNeedDisplayInRect.
+
+ (WebKit::DrawingAreaImpl::scroll):
+ Call LayerTreeHost::scrollNonCompositedContents.
+
+ (WebKit::DrawingAreaImpl::setSize):
+ Call LayerTreeHost::sizeDidChange.
+
+ * WebProcess/WebPage/LayerTreeHost.h:
+ Add new pure virtual member functions.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Create the non-composited content layer.
+
+ (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
+ Call setNeedsDisplay on the GraphicsLayer.
+
+ (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
+ Just call setNonCompositedContentsNeedDisplayInRect.
+
+ (WebKit::LayerTreeHostMac::sizeDidChange):
+ Resize the layers and flush any changes.
+
+ (WebKit::LayerTreeHostMac::paintContents):
+ Call WebPage::drawRect.
+
+ (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
+ Lay out the web page.
+
+ (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
+ Call syncCompositingStateForThisLayerOnly on the non-composited content layer.
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ When in accelerated compositing mode, wait for DidSetSize messages
+ https://bugs.webkit.org/show_bug.cgi?id=53736
+
+ Normally we wait for DidSetSize messages from ::paint, but that's never called in
+ accelerated compositing mode so we just do it right after sending the SetSize message.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::paint):
+ Call waitForAndDispatchDidSetSize.
+
+ (WebKit::DrawingAreaProxyImpl::sendSetSize):
+ Call waitForAndDispatchDidSetSize when in accelerated compositing mode.
+
+ (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidSetSize):
+ New utility function which waits for and dispatches a DidSetSize message.
+
+ * UIProcess/DrawingAreaProxyImpl.h:
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Pass along an UpdateInfo object to the ExitAcceleratedCompositingMode message
+ https://bugs.webkit.org/show_bug.cgi?id=53734
+
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
+ Add an UpdateInfo parameter.
+
+ * UIProcess/DrawingAreaProxy.messages.in:
+ Add an UpdateInfo parameter to the ExitAcceleratedCompositingMode message.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ Incorporate the passed in update.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ Create a new UpdateInfo object, paint into it and pass it along as a parameter
+ to the ExitAcceleratedCompositingMode message.
+
+2011-02-03 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8944544> Ability to animate track
+ for WKPainter scrollers
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Change DidSetSize to take a LayerTreeContext parameter
+ https://bugs.webkit.org/show_bug.cgi?id=53724
+
+ Since SetSize can cause layout to happen, we need to pass along a layer tree context to
+ the DidSetSize message so the UI process can enter/exit accelerated compositing mode appropriately.
+
+ * Shared/LayerTreeContext.h:
+ * Shared/mac/LayerTreeContextMac.mm:
+ Add equality operators to LayerTreeContext.
+
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::didSetSize):
+ This now takes a LayerTreeContext parameter.
+
+ * UIProcess/DrawingAreaProxy.messages.in:
+ Add LayerTreeContext parameter.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ Get rid of m_isInAcceleratedCompositingMode and use the current layer context instead.
+
+ (WebKit::DrawingAreaProxyImpl::paint):
+ Bail if the call to DidSetSize ended up entering accelerated compositing mode.
+
+ (WebKit::DrawingAreaProxyImpl::didSetSize):
+ If the new layer tree context is different, enter/exit accelerated compositing mode accordingly.
+
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ Update the layer tree context.
+
+ * UIProcess/DrawingAreaProxyImpl.h:
+ (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode):
+ Add simple getter.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setSize):
+ Pass along the layer tree context.
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Get rid of LayerTreeContext::seed on Mac.
+ Add sequence checks to enterAcceleratedCompositingMode and exitAcceleratedCompositingMode and
+ have them call newly added overloads that don't have the checks.
+
+ * Shared/LayerTreeContext.h:
+ * Shared/mac/LayerTreeContextMac.mm:
+ (WebKit::LayerTreeContext::LayerTreeContext):
+ (WebKit::LayerTreeContext::encode):
+ (WebKit::LayerTreeContext::decode):
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ * UIProcess/DrawingAreaProxyImpl.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Get rid of timestamps in UpdateInfo
+ https://bugs.webkit.org/show_bug.cgi?id=53713
+
+ Add a 64-bit sequence number to all DrawingAreaProxy messages, and use it to
+ check whether Update messages should be handled or not.
+
+ * Shared/UpdateInfo.cpp:
+ (WebKit::UpdateInfo::encode):
+ (WebKit::UpdateInfo::decode):
+ * Shared/UpdateInfo.h:
+ (WebKit::UpdateInfo::UpdateInfo):
+ * UIProcess/BackingStore.cpp:
+ (WebKit::BackingStore::BackingStore):
+ (WebKit::BackingStore::incorporateUpdate):
+ * UIProcess/BackingStore.h:
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::update):
+ (WebKit::DrawingAreaProxy::didSetSize):
+ (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
+ * UIProcess/DrawingAreaProxy.messages.in:
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
+ (WebKit::DrawingAreaProxyImpl::update):
+ (WebKit::DrawingAreaProxyImpl::didSetSize):
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ * UIProcess/DrawingAreaProxyImpl.h:
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::generateSequenceNumber):
+ (WebKit::DrawingAreaImpl::setSize):
+ (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::display):
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Don't send enter/exit accelerated compositing mode messages when handling setSize
+ https://bugs.webkit.org/show_bug.cgi?id=53706
+
+ Don't send EnterAcceleratedCompositingMode/ExitAcceleratedCompositing mode when
+ the mode changes happen as a result of relayout in setSize, since an updated state
+ is going to be sent back in the DidSetSize message.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::didSetSize):
+ Add an assert.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::DrawingAreaImpl):
+ Initialize m_inSetSize.
+
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ Factor out code into enterAcceleratedCompositingMode and exitAcceleratedCompositingMode.
+
+ (WebKit::DrawingAreaImpl::setSize):
+ Set m_inSetSize to true while handling setSize.
+
+ (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ Take over the message sending responsibility from LayerTreeHostMac, and don't send messages
+ if we're currently handling a SetSize message.
+
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ Add m_inSetSize.
+
+ * WebProcess/WebPage/LayerTreeHost.h:
+ Add layerTreeHost getter.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Don't send EnterAcceleratedCompositingMode messages.
+
+ (WebKit::LayerTreeHostMac::layerTreeContext):
+ Add getter for the current layer tree context.
+
+ (WebKit::LayerTreeHostMac::invalidate):
+ Don't send ExitAcceleratedCompositingMode messages.
+
+2011-02-03 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make the layer tree host keep track of the layer tree context
+ https://bugs.webkit.org/show_bug.cgi?id=53698
+
+ Add a LayerTreeContext member variable to the LayerTreeHost object,
+ and also add a seed count to the LayerTreeContext so we can keep track of
+ how layer tree contexts relate to each other.
+
+ * Shared/LayerTreeContext.h:
+ * Shared/mac/LayerTreeContextMac.mm:
+ (WebKit::LayerTreeContext::LayerTreeContext):
+ (WebKit::LayerTreeContext::makeWithSeed):
+ (WebKit::LayerTreeContext::encode):
+ (WebKit::LayerTreeContext::decode):
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ Add the layer tree context as a member variable.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Initialize the layer tree context.
+
+2011-02-03 Sam Weinig <sam@webkit.org>
+
+ Fix Qt build.
+
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPage::QWKPage):
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add notification of the end of a rubber band.
+ <rdar://problem/8940648>
+
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::drawHeader):
+ (WebKit::WebPageProxy::drawFooter):
+ (WebKit::WebPageProxy::didCompleteRubberBandForMainFrame):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/WebUIClient.cpp:
+ (WebKit::WebUIClient::didCompleteRubberBandForMainFrame):
+ * UIProcess/WebUIClient.h:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::didCompleteRubberBandForMainFrame):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ Pipe the notification up to the WKUIClient.
+
+2011-02-03 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77449.
+ http://trac.webkit.org/changeset/77449
+ https://bugs.webkit.org/show_bug.cgi?id=53663
+
+ causes many WebKit2 tests to crash (Requested by othermaciej
+ on #webkit).
+
+ * Shared/API/c/WKSharedAPICast.h:
+ (WebKit::toAPI):
+ (WebKit::toCopiedAPI):
+ (WebKit::toURLRef):
+ (WebKit::toCopiedURLAPI):
+ * Shared/WebString.h:
+ (WebKit::WebString::isNull):
+ (WebKit::WebString::WebString):
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Fix license block issues pointed out by Daniel Bates.
+
+ * Shared/API/c/WKGraphicsContext.cpp:
+ * Shared/API/c/WKGraphicsContext.h:
+ * Shared/API/c/cg/WKGraphicsContextCG.cpp:
+ * Shared/API/c/cg/WKGraphicsContextCG.h:
+ * Shared/WebGraphicsContext.cpp:
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Dan Bernstein.
+
+ Add WKBundleFrameGetVisibleContentBoundsExcludingScrollbars API for WebKit2.
+
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
+ (WKBundleFrameGetContentBounds):
+ (WKBundleFrameGetVisibleContentBounds):
+ (WKBundleFrameGetVisibleContentBoundsExcludingScrollbars):
+ (WKBundleFrameGetScrollOffset):
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::contentBounds):
+ (WebKit::WebFrame::visibleContentBounds):
+ (WebKit::WebFrame::visibleContentBoundsExcludingScrollbars):
+ (WebKit::WebFrame::scrollOffset):
+ * WebProcess/WebPage/WebFrame.h:
+ Move implementation of frame geometry to the implementation file
+ instead of keeping it in the API file.
+
+2011-02-02 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53361
+ <rdar://problem/8921729> REGRESSION: Membuster accumulates 1GB+ memory due to autorelease
+ pools not being drained.
+ Call into AppKit to add observers that push and pop autorelease pools on entry
+ and exit from the CFRunLoop. This will prevent memory from accumulating.
+
+ * WebProcess/mac/WebProcessMainMac.mm:
+ (WebKit::WebProcessMain):
+
+2011-02-02 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make null WTF::String objects turn into 0 pointers for WKStringRef and WKURLRef.
+ rdar://problem/8948688
+
+ * Shared/API/c/WKSharedAPICast.h:
+ (WebKit::toAPI): Return 0 if the passed in string is 0.
+ (WebKit::toCopiedAPI): Ditto.
+ (WebKit::toURLRef): Ditto. Old code was trying to do this but was missing a return.
+ (WebKit::toCopiedURLAPI): Ditto. Old code was trying to do this but had incorrect
+ nll check.
+
+ * Shared/WebString.h: Removed isNull function. It can never return true.
+ Removed constructor code that turns the null string into the empty string.
+ Instead assert that the passed in string is not null.
+
+2011-02-02 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ <rdar://problem/8928367> Crash when loading canvas pages inside HTMLCanvasElement::createImageBuffer().
+
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface): Add some missing initializers.
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Add ChromeClient function to paint custom overhang areas.
+ https://bugs.webkit.org/show_bug.cgi?id=53639
+
+ * Shared/API/c/WKBase.h:
+ * Shared/API/c/WKGraphicsContext.cpp: Added.
+ (WKGraphicsContextGetTypeID):
+ * Shared/API/c/WKGraphicsContext.h: Added.
+ * Shared/API/c/WKSharedAPICast.h:
+ * Shared/API/c/cg/WKGraphicsContextCG.cpp: Added.
+ (WKGraphicsContextGetCGContext):
+ * Shared/API/c/cg/WKGraphicsContextCG.h: Added.
+ * Shared/APIObject.h:
+ * Shared/WebGraphicsContext.cpp: Added.
+ (WebKit::WebGraphicsContext::WebGraphicsContext):
+ * Shared/WebGraphicsContext.h: Added.
+ (WebKit::WebGraphicsContext::create):
+ (WebKit::WebGraphicsContext::platformContext):
+ (WebKit::WebGraphicsContext::type):
+ Add WebGraphicsContext API type.
+
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
+ * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
+ (WebKit::InjectedBundlePageUIClient::pageDidScroll):
+ (WebKit::InjectedBundlePageUIClient::shouldPaintCustomOverhangArea):
+ (WebKit::InjectedBundlePageUIClient::paintCustomOverhangArea):
+ * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::paintCustomOverhangArea):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ Pipe paintCustomOverhangArea to the InjectedBundlePageUIClient.
+
+ * UIProcess/API/C/WebKit2.h:
+ * WebKit2.pro:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * win/WebKit2.vcproj:
+ * win/WebKit2Generated.make:
+ Add new files.
+
+2011-02-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Work towards making the layer tree host be in charge of all painting
+ https://bugs.webkit.org/show_bug.cgi?id=53636
+
+ Make sure that DrawingAreaImpl::display is never called when in accelerated compositing mode,
+ since the layer tree host is supposed to handle all drawing in that case.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::scroll):
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ (WebKit::DrawingAreaImpl::setSize):
+ (WebKit::DrawingAreaImpl::didUpdate):
+
+2011-02-02 Mark Rowe <mrowe@apple.com>
+
+ Fix the 32-bit build.
+
+ * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
+ (WebKit::computeFakeWindowBoundsRect):
+
+2011-02-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make sure that we don't try to call display() when in accelerated compositing mode
+ https://bugs.webkit.org/show_bug.cgi?id=53629
+
+ When in accelerated compositing mode, the layer tree host should handle all painting, so make sure that display() is never called.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setNeedsDisplay):
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ (WebKit::DrawingAreaImpl::display):
+
+2011-02-02 Adam Roben <aroben@apple.com>
+
+ Assert WebBackForwardList's current index is valid to help catch errors
+
+ Hopefully this will help catch a crash I saw once but haven't yet been able to reproduce.
+
+ Fixes <http://webkit.org/b/53622>.
+
+ Reviewed by Brady Eidson.
+
+ * UIProcess/WebBackForwardList.cpp:
+ (WebKit::WebBackForwardList::WebBackForwardList):
+ (WebKit::WebBackForwardList::addItem):
+ (WebKit::WebBackForwardList::goToItem):
+ (WebKit::WebBackForwardList::currentItem):
+ (WebKit::WebBackForwardList::backItem):
+ (WebKit::WebBackForwardList::forwardItem):
+ (WebKit::WebBackForwardList::itemAtIndex):
+ (WebKit::WebBackForwardList::backListCount):
+ (WebKit::WebBackForwardList::forwardListCount):
+ (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
+ (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
+ (WebKit::WebBackForwardList::clear):
+ * UIProcess/cf/WebBackForwardListCF.cpp:
+ (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
+ (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):
+ Assert that m_current is valid.
+
+ * UIProcess/WebBackForwardList.h: Moved the NoCurrentItemIndex to a static data member so
+ that it can be used from WebBackForwardListCF.cpp.
+
+2011-02-02 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ The drawing area proxy should keep track of the accelerated compositing state
+ https://bugs.webkit.org/show_bug.cgi?id=53624
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
+ Initialize m_isInAcceleratedCompositingMode to false.
+
+ (WebKit::DrawingAreaProxyImpl::paint):
+ Don't try to paint if we're in accelerated compositing mode.
+
+ (WebKit::DrawingAreaProxyImpl::didSetSize):
+ Bail if we're in accelerated compositing mode.
+
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ Set m_isInAcceleratedCompositingMode to true, null out the backing store.
+
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ Set m_isInAcceleratedCompositingMode back to false.
+
+ (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
+ Assert that we're not in accelerated compositing mode.
+
+ * UIProcess/DrawingAreaProxyImpl.h:
+
+2011-02-02 Timothy Hatcher <timothy@apple.com>
+
+ Give the Web Process access to the Safari RSS preferences.
+
+ <rdar://problem/8916870> Sandbox violation related to RSS during initial
+ page load with WebKit2 (prevents RSS from working)
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/com.apple.WebProcess.sb:
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-02-01 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53561
+ <rdar://problem/8900228> Stepping through print previews in WebKit2 mode steps in and out of
+ printing mode a lot
+
+ Disable NSView autodisplay, so that -[WKView drawRect:] isn't called (other than when
+ resizing the window), so that we don't have to switch modes all the time.
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::setAutodisplay):
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setAutodisplay):
+ * UIProcess/WebPageProxy.h:
+ Pipe the call from WKPrintingView down to WKView.
+
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (-[WKPrintingView beginDocument]): Added. We don't want to autodisplay WKView while printing,
+ because layout is changed to print at the time, and drawing to screen requires relayout.
+
+ (-[WKPrintingView endDocument]): When not printing, turn autodisplay back on. Also, call
+ -[super endDocument] for unknown but definitive good (oops!).
+
+2011-02-02 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Conversion of right()/bottom() to maxX()/maxY() as part of the removal of those accessors.
+
+ * UIProcess/win/WebPopupMenuProxyWin.cpp:
+ (WebKit::WebPopupMenuProxyWin::calculatePositionAndSize):
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::prepareCandidateWindow):
+ * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
+ (WebKit::NetscapePlugin::platformGeometryDidChange):
+
+2011-02-01 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Overflow in WebKit2 argument decoder buffer checking
+ https://bugs.webkit.org/show_bug.cgi?id=53536
+
+ * Platform/CoreIPC/ArgumentDecoder.cpp:
+ (CoreIPC::roundUpToAlignment): Tweak code a bit for clarity and to replace
+ C casts with C++ casts.
+ (CoreIPC::ArgumentDecoder::alignBufferPosition): Rearrange buffer calculation
+ so we don't do any math with the passed-in size, because that could overflow.
+ (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain): Ditto.
+
+2011-02-01 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed.
+
+ Fix Qt build after r77339.
+
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPagePrivate::enterAcceleratedCompositingMode):
+ (QWKPagePrivate::exitAcceleratedCompositingMode):
+ * UIProcess/API/qt/qwkpage_p.h:
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Attach the layer tree in the UI process
+ https://bugs.webkit.org/show_bug.cgi?id=53560
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _enterAcceleratedCompositingMode:]):
+ Make a render layer and add it as a sublayer of our root layer.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ Make LayerTreeHostMac a GraphicsLayerClient.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ Create a root layer, add the layer subtree as a child of the root layer.
+
+ (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
+ Assert that m_rootLayer is null.
+
+ (WebKit::LayerTreeHostMac::invalidate):
+ Null out m_rootLayer.
+
+ (WebKit::LayerTreeHostMac::notifyAnimationStarted):
+ (WebKit::LayerTreeHostMac::notifySyncRequired):
+ (WebKit::LayerTreeHostMac::paintContents):
+ Add stubs.
+
+ (WebKit::LayerTreeHostMac::showDebugBorders):
+ (WebKit::LayerTreeHostMac::showRepaintCounter):
+ Return the correct settings.
+
+ (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
+ Flush the root layer changes.
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Fix Windows build.
+
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::enterAcceleratedCompositingMode):
+ (WebKit::WebView::exitAcceleratedCompositingMode):
+ * UIProcess/win/WebView.h:
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add a layer backed NSView for accelerated content
+ https://bugs.webkit.org/show_bug.cgi?id=53555
+
+ Rename the current _layerHostingView to _oldLayerHostingView and
+ add a new _layerHostingView to be used with the new drawing area.
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView hitTest:]):
+ (-[WKView _startAcceleratedCompositing:]):
+ (-[WKView _stopAcceleratedCompositing]):
+ (-[WKView _enterAcceleratedCompositingMode:]):
+ (-[WKView _exitAcceleratedCompositingMode]):
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Pass enter/exit accelerated compositing mode to the WKView
+ https://bugs.webkit.org/show_bug.cgi?id=53552
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
+ (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _enterAcceleratedCompositingMode:]):
+ (-[WKView _exitAcceleratedCompositingMode]):
+ * UIProcess/API/mac/WKViewInternal.h:
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
+ (WebKit::WebPageProxy::exitAcceleratedCompositingMode):
+ * UIProcess/WebPageProxy.h:
+
+2011-02-01 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed Qt buildfix after r77286.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+ Remove the physical terminology from IntRect and FloatRect.
+
+ * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Send messages when entering/exiting accelerated compositing
+ https://bugs.webkit.org/show_bug.cgi?id=53534
+
+ * Shared/LayerTreeContext.h: Added.
+ * Shared/mac/LayerTreeContextMac.mm: Added.
+ Add new LayerTreeContext which holds all information needed to enter
+ accelerated compositing mode.
+
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
+ Add empty stubs.
+
+ * UIProcess/DrawingAreaProxy.messages.in:
+ Add new messgaes.
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
+ (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
+ * UIProcess/DrawingAreaProxyImpl.h:
+ Add empty stubs.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add new files.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ (WebKit::LayerTreeHostMac::invalidate):
+ Send messages.
+
+2011-02-01 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein and Darin Adler.
+
+ <rdar://problem/8830594> Printed page is sometimes shifted down, making footer invisible
+
+ * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView locationOfPrintRect:]): Instead of
+ letting AppKit compute content position on page, make the view provide it. We can do this
+ because WK(Printing)Views are always printed on their own, not as part of other views.
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Make LayerTreeHost ref counted
+ https://bugs.webkit.org/show_bug.cgi?id=53530
+
+ LayerTreeHostMac will soon be able to trigger layout, which could cause
+ the page to leave accelerated compositing mode and free the LayerTreeHostMac object.
+
+ Making LayerTreeHost ref counted will let LayerTreeHostMac protect itself while triggering layout.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ (WebKit::LayerTreeHost::create):
+ * WebProcess/WebPage/LayerTreeHost.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::create):
+ (WebKit::LayerTreeHostMac::LayerTreeHostMac):
+ (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
+ (WebKit::LayerTreeHostMac::invalidate):
+
+2011-02-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Part 2 for <rdar://problem/8492788>
+ Adopt WKScrollbarPainterController
+
+ Use header detection to define scrollbar painting controller #define.
+
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-01 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53520
+
+ Remove the physical terminology from IntRect and FloatRect.
+
+ Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
+ we need to update our terminology to be more accurate.
+
+ I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
+ renaming right() and bottom() to maxX() and maxY(). These terms remain accurate
+ even for flipped rectangles.
+
+ * Platform/Region.cpp:
+ (WebKit::Region::Shape::Shape):
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (pageDidComputePageRects):
+ * UIProcess/FindIndicator.cpp:
+ (WebKit::FindIndicator::draw):
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ (WebKit::TiledDrawingAreaProxy::invalidate):
+ (WebKit::TiledDrawingAreaProxy::paint):
+ (WebKit::TiledDrawingAreaProxy::createTiles):
+ * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ (WebKit::NetscapePlugin::callSetWindow):
+
+2011-02-01 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Move flushPendingLayerChanges to LayerTreeHostMac
+ https://bugs.webkit.org/show_bug.cgi?id=53525
+
+ In preparation for adding more Mac specific code to flushPendingLayerChanges.
+
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ * WebProcess/WebPage/LayerTreeHost.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
+
+2011-02-01 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController
+
+ Implement NSView's viewWillStartLiveResize and
+ viewDidEndLiveResize and propagate the messages down
+ to WebCore.
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView viewWillStartLiveResize]):
+ (-[WKView viewDidEndLiveResize]):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::viewWillStartLiveResize):
+ (WebKit::WebPageProxy::viewWillEndLiveResize):
+ * UIProcess/WebPageProxy.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::viewWillStartLiveResize):
+ (WebKit::WebPage::viewWillEndLiveResize):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
+ A bunch of new WebKitSystemInterface functions.
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-02-01 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
+ with vertical text.
+
+ Change printing functions to check writing-mode and properly swap width and height
+ as needed.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::computePagesForPrinting):
+
+2011-01-31 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53466
+ Move WebKit2 to printing via API methods
+
+ Also fixes <rdar://problem/8933724> REGRESSION: Wrong pages are printed when not printing from page 1
+
+ Also fixes horizontal tiling (no bug filed).
+
+ The main idea here is that we don't force AppKit to use a different scaling factor when
+ a Web view can't be resized to exact page size, and scale when drawing instead.
+
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (-[WKPrintingView _firstPrintedPageNumber]): Factored out into a separate method.
+ (-[WKPrintingView _lastPrintedPageNumber]): Ditto.
+ (pageDidDrawToPDF): Avoid crashing if data is null.
+ (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Use -_firstPrintedPageNumber
+ and -_lastPrintedPageNumber.
+ (pageDidComputePageRects): Set frame size to what it would have been for a normal NSView
+ that's been asked to resize.
+ (-[WKPrintingView _pageForRect:]): Check x(), because several pages can be at the same y()
+ when tiling horizontally.
+ (-[WKPrintingView _drawPDFDocument:page:atPoint:]): Point to draw at and frame size are
+ now using different units, translate as appropriate.
+ (-[WKPrintingView _drawPreview:]): Scale the rect to WebCore units.
+ (-[WKPrintingView drawRect:]): Correctly calculate page number when the first page to print
+ isn't page 1.
+ (-[WKPrintingView rectForPage:]): Scale the rect to AppKit units.
+
+2011-01-31 Darin Adler <darin@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ WKView should support scrollPageDown:, scrollPageUp:, scrollToBeg and other similar selectors
+ https://bugs.webkit.org/show_bug.cgi?id=53460
+
+ * UIProcess/API/mac/WKView.mm: Added WEBCORE_COMMAND macro for lots of editor commands that
+ are implemented in WebCore so they will get forwarded. Many of these will probably work without
+ any further changes required. Added comments about the methods that we do not yet forward.
+ (createSelectorExceptionMap): Map scrollPageDown: to ScrollPageForward and
+ scrollPageUp: to ScrollPageBackward because we want the page up and page down
+ keys to follow the document logical order, not physical order. This is equivalent
+ to what we do in WebPage::performDefaultBehaviorForKeyEvent.
+
+2011-01-31 Jessie Berlin <jberlin@apple.com>
+
+ Reviewed by Steve Falkenburg.
+
+ WebKit2: the cookies used by the WebKit2 Web Process should not go in a top-level
+ directory.
+ https://bugs.webkit.org/show_bug.cgi?id=53278
+
+ Use the name WebKit2WebProcess since the default location for the cookies is determined
+ based on the process name (which is WebKit2WebProcess.exe on Windows).
+
+ * win/WebKit2.make:
+ Copy the WebKit2WebProcess.resources directory into the AppleInternal bin.
+
+ * win/WebKit2WebProcess.resources: Added.
+ * win/WebKit2WebProcess.resources/Info.plist: Added.
+ Copied from the WebKit version of Info.plist.
+
+ * win/WebKit2WebProcessPostBuild.cmd:
+ Copy the WebKit2WebProcess.resources directory into the WebKitOutPutDir's bin.
+
+2011-01-31 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Make LayerTreeHost an abstract base class and make LayerTreeHostMac inherit from it
+ https://bugs.webkit.org/show_bug.cgi?id=53432
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add LayerTreeHostMac.h.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+ Make m_layerTreeHost an OwnPtr and initialize/destroy it appropriately.
+
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ (WebKit::LayerTreeHost::create):
+ On Mac, create a LayerTreeHostMac instance.
+
+ (WebKit::LayerTreeHost::~LayerTreeHost):
+ No need to call platformInvalidate anymore.
+
+ * WebProcess/WebPage/LayerTreeHost.h:
+ * WebProcess/WebPage/mac/LayerTreeHostMac.h: Added.
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
+ (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
+ Invalidate the run loop observer here instead of in platformInvalidate.
+
+ (WebKit::LayerTreeHostMac::scheduleLayerFlush):
+ (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
+ These are now members of LayerTreeHostMac.
+
+2011-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ [Take 2!]
+ Fixed crash on window close (maybe crash on launch?) due to missing frame null checks
+ https://bugs.webkit.org/show_bug.cgi?id=53408
+
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::didNavigateWithNavigationData):
+ (WebKit::WebContext::didPerformClientRedirect):
+ (WebKit::WebContext::didPerformServerRedirect):
+ (WebKit::WebContext::didUpdateHistoryTitle): Use MESSAGE_CHECK because
+ we don't think we should be able to reach this state under normal conditions.
+
+2011-01-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fixed crash on window close (maybe crash on launch?) due to missing
+ frame null checks
+ https://bugs.webkit.org/show_bug.cgi?id=53408
+
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::didNavigateWithNavigationData):
+ (WebKit::WebContext::didPerformClientRedirect):
+ (WebKit::WebContext::didPerformServerRedirect):
+ (WebKit::WebContext::didUpdateHistoryTitle): Check for NULL, since we're
+ calling a function that can return it.
+
+2011-01-30 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt][WK2]REGRESSION (r76991): Fix build errors
+ https://bugs.webkit.org/show_bug.cgi?id=53400
+
+ Revert the temporary build fix (http://trac.webkit.org/changeset/77088)
+ and remove WebKit2Prefix.h from the build.
+ * UIProcess/API/qt/qwkhistory.h:
+ * UIProcess/API/qt/qwkpage.h:
+ * WebKit2.pro:
+
+2011-01-30 Jeff Miller <jeffm@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ FindController::updateFindIndicator() crashes if selection isn't visible
+ https://bugs.webkit.org/show_bug.cgi?id=53399
+
+ * WebProcess/WebPage/FindController.cpp:
+ (WebKit::FindController::updateFindIndicator): Return false if ShareableBitmap::createShareable() returns null (typically because the selection rect is empty).
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed.
+
+ [Qt][WK2] Buildfix.
+
+ * UIProcess/API/qt/qwkhistory.h:
+ * UIProcess/API/qt/qwkpage.h:
+
+2011-01-29 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Add WKPageCopyPendingAPIRequestURL API
+ https://bugs.webkit.org/show_bug.cgi?id=53383
+
+ This API returns the last URL requested for load via API, if neither that load nor any
+ other load subsequently reaches the provisional state.
+
+ This is useful to be able to track loads initiated via the API
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageCopyPendingAPIRequestURL): Retrieve the pending URL.
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::loadURL): Set pending URL.
+ (WebKit::WebPageProxy::loadURLRequest): ditto
+ (WebKit::WebPageProxy::reload): ditto
+ (WebKit::WebPageProxy::goForward): ditto
+ (WebKit::WebPageProxy::goBack): ditto
+ (WebKit::WebPageProxy::estimatedProgress): Assume the initial
+ progress value when there is a pending URL.
+ (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Clear
+ pending URL; clients should look at the provisional URL now.
+ (WebKit::WebPageProxy::decidePolicyForNavigationAction): Clear
+ pending URL if it doesn't match the policy URL; this means we
+ were interrupted by another load.
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::pendingAPIRequestURL): Helper function.
+ (WebKit::WebPageProxy::clearPendingAPIRequestURL): ditto
+ (WebKit::WebPageProxy::setPendingAPIRequestURL): ditto
+
+2011-01-28 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Downloads in WK2 on Windows should write resume data to bundle
+ https://bugs.webkit.org/show_bug.cgi?id=53282
+ <rdar://problem/8753077>
+
+ Reviewed by Alice Liu.
+
+ * WebProcess/Downloads/Download.cpp:
+ (WebKit::Download::decideDestinationWithSuggestedFilename):
+ Call didDecideDestination(), now that the destination is decided.
+
+ * WebProcess/Downloads/Download.h:
+ Declare didDecideDestination(). Added member variables to hold the
+ destination file path and the download bundle path.
+ (WebKit::Download::destination):
+ Return the path to the final destination for this download.
+
+ * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+ (WebKit::Download::start):
+ Remove the name of an unused param.
+ (WebKit::Download::startWithHandle):
+ Ditto.
+ (WebKit::Download::cancel):
+ Tell CFNetwork not to delete the file upon failure, and tell it to
+ cancel the download. Copy the resume data for the download, and append
+ it to the download bundle. Call didCancel() with an empty
+ DataReference, since we have written our own resume data.
+ (WebKit::decideDestinationWithSuggestedObjectNameCallback):
+ Remove some unused param names. Removed the call to
+ CFURLDownloadSetDestination() - this is now handled in
+ Download::didDecideDestination().
+ (WebKit::didCreateDestinationCallback):
+ Report that the final destination was created, rather than the download
+ bundle, matching old WebKit.
+ (WebKit::Download::didDecideDestination):
+ Store the final destination and the download bundle paths, and call
+ CFURLDownloadSetDestination(), passing the path to the download bundle.
+
+ * WebProcess/Downloads/curl/DownloadCurl.cpp:
+ (WebKit::Download::didDecideDestination):
+ Stubbed.
+
+ * WebProcess/Downloads/mac/DownloadMac.mm:
+ (WebKit::Download::didDecideDestination):
+ Stubbed - unneeded on the Mac.
+
+ * WebProcess/Downloads/qt/DownloadQt.cpp:
+ (WebKit::Download::didDecideDestination):
+ Stubbed.
+
+2011-01-29 Jeff Miller <jeffm@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Support find bouncy in WebKit2 on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=53329
+ <rdar://problem/8565843>
+ The Mac implements the find bouncy inside of WebKit in the UI process for WebKit2, but we need to do this inside Safari for WebKit2 on Windows.
+ Add infrastructure to call back into the app when the find indicator changes.
+
+ * UIProcess/API/C/win/WKView.cpp: Cleanup some code style violations.
+ (WKViewSetFindIndicatorCallback): Added.
+ (WKViewGetFindIndicatorCallback): Added.
+ * UIProcess/API/C/win/WKView.h: Cleanup some code style violations.
+ * UIProcess/FindIndicator.cpp:
+ (WebKit::FindIndicator::create):
+ (WebKit::FindIndicator::FindIndicator):
+ (WebKit::FindIndicator::frameRect):
+ (WebKit::FindIndicator::draw):
+ Rename m_selectionRect to m_selectionRectInWindowCoordinates and m_textRects to m_textRectsInSelectionRectCoordinates (along with similarly named local variables) to be more explict about the coordinate system.
+ * UIProcess/FindIndicator.h:
+ (WebKit::FindIndicator::selectionRectInWindowCoordinates): Added.
+ (WebKit::FindIndicator::textRects): Rename m_textRects to m_textRectsInSelectionRectCoordinates.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setFindIndicator): Rename selectionRect to selectionRectInWindowCoordinates and textRects to textRectsInSelectionRectCoordinates to be more explict about the coordinate system.
+ * UIProcess/WebPageProxy.h: Ditto.
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::WebView):
+ (WebKit::WebView::setFindIndicator): Added.
+ (WebKit::WebView::setFindIndicatorCallback): Added.
+ (WebKit::WebView::getFindIndicatorCallback): Added.
+ * UIProcess/win/WebView.h:
+
+2011-01-28 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53367
+ <rdar://problem/8926460> Remove dysfunctional code from -[WKPrintingView _isPrintingPreview].
+
+ * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _isPrintingPreview]): The common
+ branch works fine for now, no need to make platforms different.
+
+2011-01-28 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WKPageGetEstimatedProgress returns wrong value after a mainframe provisional load has started
+ https://bugs.webkit.org/show_bug.cgi?id=53358
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::didStartProgress): Start progress at the magic initial value, not 0.
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Yet another build fix (What was I thinking?)
+
+ * WebProcess/Downloads/Download.h:
+ * WebProcess/Plugins/PluginProxy.h:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Fix Windows build.
+
+ * Shared/PrintInfo.h:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Fix tyop.
+
+ * Shared/mac/CoreAnimationRenderer.mm:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add CoreAnimationRenderer class
+ https://bugs.webkit.org/show_bug.cgi?id=53343
+
+ * Shared/mac/CoreAnimationRenderer.h: Added.
+ * Shared/mac/CoreAnimationRenderer.mm: Added.
+
+ (WebKit::CoreAnimationRenderer::CoreAnimationRenderer):
+ Initialize the underlying CARenderer object and hook up a notification observer.
+
+ (WebKit::CoreAnimationRenderer::~CoreAnimationRenderer):
+ Assert that the client is null. It has been set to null by the call to invalidate().
+
+ (WebKit::CoreAnimationRenderer::setBounds):
+ Update the bounds on the CARenderer and the root layer.
+
+ (WebKit::CoreAnimationRenderer::render):
+ Ask the renderer to render and return the next frame time.
+
+ (WebKit::CoreAnimationRenderer::invalidate):
+ Remove the change observer and reset the client.
+
+ (WebKit::CoreAnimationRenderer::rendererDidChange):
+ Call the client member function.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add new files.
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add an OBJC_CLASS macro for forward declaring an Objective-C class
+ https://bugs.webkit.org/show_bug.cgi?id=53337
+
+ * Shared/NativeWebKeyboardEvent.h:
+ * Shared/PrintInfo.h:
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
+ * UIProcess/LayerBackedDrawingAreaProxy.h:
+ * UIProcess/WebInspectorProxy.h:
+ * UIProcess/mac/WebContextMenuProxyMac.h:
+ * UIProcess/mac/WebPopupMenuProxyMac.h:
+ * WebProcess/Downloads/Download.h:
+ * WebProcess/Plugins/PluginProxy.h:
+ * WebProcess/WebPage/LayerBackedDrawingArea.h:
+ * WebProcess/WebPage/WebPage.h:
+ * config.h:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't put config.h in the message headers.
+
+ * Scripts/webkit2/messages.py:
+ * Scripts/webkit2/messages_unittest.py:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * Shared/mac/ShareableSurface.cpp:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Try to unbreak the Windows build.
+
+ * UIProcess/cf/WebPageProxyCF.cpp:
+
+2011-01-28 Brady Eidson <beidson@apple.com>
+
+ Reviewed by John Sullivan.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53330
+ Need InjectedBundle API to get the response MIMEType for a URL
+
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
+ (WKBundleFrameCopyMIMETypeForResourceWithURL):
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
+
+ Get the MIMEType from the in-memory cache, or cachedResponseMIMETypeForURL() if not available:
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::mimeTypeForResourceWithURL):
+ * WebProcess/WebPage/WebFrame.h:
+
+ Get the MIMEType from the platform's disk cache if available:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::cachedResponseMIMETypeForURL):
+ * WebProcess/WebPage/qt/WebPageQt.cpp:
+ (WebKit::WebPage::cachedResponseMIMETypeForURL):
+ * WebProcess/WebPage/win/WebPageWin.cpp:
+ (WebKit::WebPage::cachedResponseMIMETypeForURL):
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Clean up the mess introduced when config.h was added to the project:
+
+ - Remove the contents of WebKit2Prefix.h that is now in config.h, to avoid including everything
+ twice in each file, probably slowing down compile time.
+
+ - Add config.h to all the files that were forgotten in order to keep the build from breaking.
+
+ - Added trap to ensure that config.h is included at the top of every implementation file. If this
+ had been added it would have caught the previous issue.
+
+2011-01-28 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ <rdar://problem/8857651> Implement unregisterWorld for WebKit2
+ Rename unregisterWorld to clearWrappers. Clearing the wrappers reduces the
+ memory use of isolated worlds.
+
+ * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
+ (WKBundleScriptWorldClearWrappers):
+ * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
+ * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
+ (WebKit::InjectedBundleScriptWorld::clearWrappers):
+ * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
+
+2011-01-28 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <select> can't display right-to-left (rtl) languages
+ https://bugs.webkit.org/show_bug.cgi?id=19785
+
+ * Shared/WebPopupItem.cpp:
+ (WebKit::WebPopupItem::WebPopupItem): Added initializers for m_textDirection and m_hasTextDirectionOverride.
+ (WebKit::WebPopupItem::encode): Encode the item's writing direction and direction override values.
+ (WebKit::WebPopupItem::decode): Decode the item's writing direction and direction override values.
+ * Shared/WebPopupItem.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::showPopupMenu): Added a parameter for the menu's text direction.
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in: Ditto.
+ * UIProcess/WebPopupMenuProxy.h:
+ * UIProcess/mac/WebPopupMenuProxyMac.h:
+ * UIProcess/mac/WebPopupMenuProxyMac.mm:
+ (WebKit::WebPopupMenuProxyMac::populate): Added a parameter for the menu's text direction.
+ Set items' text alignment to match the menu's writing direction. Set items' writing direction
+ and direction override according to their styles.
+ (WebKit::WebPopupMenuProxyMac::showPopupMenu): Set the pop-up's layout direction.
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural): Changed to return false.
+ (WebKit::WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
+ (WebKit::WebPopupMenu::populateItems): Initialize items' writing direction and direction override
+ values.
+ (WebKit::WebPopupMenu::show): Pass the menu's writing direction.
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add ShareableSurface class
+ https://bugs.webkit.org/show_bug.cgi?id=53313
+
+ * Shared/mac/ShareableSurface.cpp: Added.
+ (WebKit::ShareableSurface::Handle::Handle):
+ Initialize the mach port.
+
+ (WebKit::ShareableSurface::Handle::~Handle):
+ Deallocate our send right if needed.
+
+ (WebKit::ShareableSurface::Handle::encode):
+ Encode the send right, and then null it out.
+
+ (WebKit::ShareableSurface::Handle::decode):
+ Decode the send right.
+
+ (WebKit::createIOSurface):
+ Create an IOSurface with the given size.
+
+ (WebKit::ShareableSurface::create):
+ Create an IOSurface, either from a size or from a handle.
+
+ (WebKit::ShareableSurface::~ShareableSurface):
+ Delete the texture and framebuffer.
+
+ (WebKit::ShareableSurface::createHandle):
+ Create a mach port from the surface.
+
+ (WebKit::ShareableSurface::attach):
+ Create an FBO if needed and bind it.
+
+ (WebKit::ShareableSurface::detach):
+ Unbind the FBO.
+
+ (WebKit::ShareableSurface::textureID):
+ Generate a new texture and bind it to the IOSurface.
+
+ * Shared/mac/ShareableSurface.h: Added.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add new files.
+
+2011-01-27 Adam Roben <aroben@apple.com>
+
+ Change BinarySemaphore to wrap an auto-reset Win32 event on Windows
+
+ Fixes <http://webkit.org/b/53208> <rdar://problem/8922490>.
+
+ Reviewed by Dave Hyatt.
+
+ * Platform/CoreIPC/BinarySemaphore.cpp: Wrap this implementation in #if !PLATFORM(WIN).
+
+ * Platform/CoreIPC/BinarySemaphore.h: Make the Windows implementation have a single HANDLE
+ member that holds the event.
+
+ * Platform/CoreIPC/win/BinarySemaphoreWin.cpp: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp.
+ (CoreIPC::BinarySemaphore::BinarySemaphore): Create our event.
+ (CoreIPC::BinarySemaphore::~BinarySemaphore): Destory our event.
+ (CoreIPC::BinarySemaphore::signal): Signal the event.
+ (CoreIPC::BinarySemaphore::wait): Convert the absolute time to a wait interval, then wait
+ for the event to be signaled or for the interval to elapse.
+
+ * win/WebKit2.vcproj: Added BinarySemaphoreWin.cpp. Also let VS have its way with the file.
+
+2011-01-27 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ WebKit2: Page flashes just before accelerated compositing animation
+ https://bugs.webkit.org/show_bug.cgi?id=53274
+
+ When switching out of compositing mode, the new ChunkedUpdateDrawingAreaProxy
+ is getting created with the current page size. When the setSize() call is
+ subsequently made, the sizeDidChange() call is not made (which does the initial
+ render of the page) because the old size and new size are the same. The solution
+ is to skip the setting of the size in the ctor and let it go through a size
+ change sequence.
+
+ * UIProcess/DrawingAreaProxy.cpp:
+ (WebKit::DrawingAreaProxy::DrawingAreaProxy):
+
+2011-01-28 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Fix dist compilation for the release
+ https://bugs.webkit.org/show_bug.cgi?id=53290
+
+ * GNUmakefile.am: Remove a file that is not in the repository
+ anymore.
+
+
+2011-01-28 Andreas Kling <kling@webkit.org>
+
+ Rubber-stamped by Simon Hausmann.
+
+ [Qt][WK2] Combine QWKPage::engine{Connected,Disconnected} into one signal.
+
+ Having two signals for this is redundant, combine them into
+ QWKPage::engineConnectionChanged(bool connected).
+
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPagePrivate::didRelaunchProcess):
+ (QWKPagePrivate::processDidCrash):
+ * UIProcess/API/qt/qwkpage.h:
+
+2011-01-27 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Build fix for Mac Intel Debug after r76916
+ https://bugs.webkit.org/show_bug.cgi?id=53284
+
+ Fix macro redefinition by guarding the redefined macros.
+
+ * config.h:
+
+2011-01-27 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed build fix for Mac Intel Debug after r76916.
+
+ Fix macro redefinition by guarding the redefined macros.
+
+ Check if the macro is already defined before defininig it.
+ c++config.h has the same macros with the same values.
+
+ * config.h:
+
+2011-01-27 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Adam Barth.
+
+ Update the expected results for test-webkitpy after r76916.
+
+ Include "config.h" in the expected results as well.
+
+ * Scripts/webkit2/messages_unittest.py:
+
+2011-01-27 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed buildfix for SnowLeopard Intel Debug.
+
+ Fix macro redefinition by not including config.h.
+
+ Revert previous change in WebPageProxyCF.cpp.
+
+ * UIProcess/cf/WebPageProxyCF.cpp:
+
+2011-01-27 Greg Coletta <greg.coletta@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Get rid of prefix header dependency for WebKit2 build system.
+ https://bugs.webkit.org/show_bug.cgi?id=50174
+
+ Add config.h include explicitelly.
+
+ * Platform/CoreIPC/ArgumentDecoder.cpp:
+ * Platform/CoreIPC/ArgumentEncoder.cpp:
+ * Platform/CoreIPC/Attachment.cpp:
+ * Platform/CoreIPC/BinarySemaphore.cpp:
+ * Platform/CoreIPC/Connection.cpp:
+ * Platform/CoreIPC/DataReference.cpp:
+ * Platform/CoreIPC/gtk/ConnectionGtk.cpp:
+ * Platform/CoreIPC/mac/ConnectionMac.cpp:
+ * Platform/CoreIPC/qt/ConnectionQt.cpp:
+ * Platform/CoreIPC/win/ConnectionWin.cpp:
+ * Platform/Logging.cpp:
+ * Platform/Module.cpp:
+ * Platform/Region.cpp:
+ * Platform/RunLoop.cpp:
+ * Platform/WorkQueue.cpp:
+ * Platform/cg/CGUtilities.cpp:
+ * Platform/gtk/RunLoopGtk.cpp:
+ * Platform/gtk/SharedMemoryGtk.cpp:
+ * Platform/gtk/WorkQueueGtk.cpp:
+ * Platform/mac/MachUtilities.cpp:
+ * Platform/mac/SharedMemoryMac.cpp:
+ * Platform/mac/WorkQueueMac.cpp:
+ * Platform/qt/MappedMemoryPool.cpp:
+ * Platform/qt/ModuleQt.cpp:
+ * Platform/qt/RunLoopQt.cpp:
+ * Platform/qt/WorkQueueQt.cpp:
+ * Platform/win/ModuleWin.cpp:
+ * Platform/win/RunLoopWin.cpp:
+ * Platform/win/SharedMemoryWin.cpp:
+ * Platform/win/WorkQueueWin.cpp:
+ * PluginProcess/PluginControllerProxy.cpp:
+ * PluginProcess/PluginProcess.cpp:
+ * PluginProcess/WebProcessConnection.cpp:
+ * Scripts/webkit2/messages.py:
+ * Shared/API/c/WKArray.cpp:
+ * Shared/API/c/WKCertificateInfo.cpp:
+ * Shared/API/c/WKContextMenuItem.cpp:
+ * Shared/API/c/WKData.cpp:
+ * Shared/API/c/WKDictionary.cpp:
+ * Shared/API/c/WKError.cpp:
+ * Shared/API/c/WKImage.cpp:
+ * Shared/API/c/WKMutableArray.cpp:
+ * Shared/API/c/WKMutableDictionary.cpp:
+ * Shared/API/c/WKNumber.cpp:
+ * Shared/API/c/WKSecurityOrigin.cpp:
+ * Shared/API/c/WKSerializedScriptValue.cpp:
+ * Shared/API/c/WKString.cpp:
+ * Shared/API/c/WKType.cpp:
+ * Shared/API/c/WKURL.cpp:
+ * Shared/API/c/WKURLRequest.cpp:
+ * Shared/API/c/WKURLResponse.cpp:
+ * Shared/API/c/WKUserContentURLPattern.cpp:
+ * Shared/API/c/cf/WKStringCF.cpp:
+ * Shared/API/c/cf/WKURLCF.cpp:
+ * Shared/API/c/cf/WKURLRequestCF.cpp:
+ * Shared/API/c/cf/WKURLResponseCF.cpp:
+ * Shared/API/c/cg/WKImageCG.cpp:
+ * Shared/API/c/win/WKCertificateInfoWin.cpp:
+ * Shared/ChildProcess.cpp:
+ * Shared/ImmutableArray.cpp:
+ * Shared/ImmutableDictionary.cpp:
+ * Shared/MutableArray.cpp:
+ * Shared/MutableDictionary.cpp:
+ * Shared/OriginAndDatabases.cpp:
+ * Shared/PlatformPopupMenuData.cpp:
+ * Shared/Plugins/NPIdentifierData.cpp:
+ * Shared/Plugins/NPObjectMessageReceiver.cpp:
+ * Shared/Plugins/NPObjectProxy.cpp:
+ * Shared/Plugins/NPRemoteObjectMap.cpp:
+ * Shared/Plugins/NPVariantData.cpp:
+ * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
+ * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
+ * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
+ * Shared/Plugins/PluginProcessCreationParameters.cpp:
+ * Shared/PrintInfo.cpp:
+ * Shared/SessionState.cpp:
+ * Shared/ShareableBitmap.cpp:
+ * Shared/UpdateInfo.cpp:
+ * Shared/VisitedLinkTable.cpp:
+ * Shared/WebBackForwardListItem.cpp:
+ * Shared/WebContextMenuItem.cpp:
+ * Shared/WebContextMenuItemData.cpp:
+ * Shared/WebError.cpp:
+ * Shared/WebEvent.cpp:
+ * Shared/WebEventConversion.cpp:
+ * Shared/WebGeolocationPosition.cpp:
+ * Shared/WebImage.cpp:
+ * Shared/WebKeyboardEvent.cpp:
+ * Shared/WebMemorySampler.cpp:
+ * Shared/WebMouseEvent.cpp:
+ * Shared/WebOpenPanelParameters.cpp:
+ * Shared/WebPageCreationParameters.cpp:
+ * Shared/WebPageGroupData.cpp:
+ * Shared/WebPlatformTouchPoint.cpp:
+ * Shared/WebPopupItem.cpp:
+ * Shared/WebPreferencesStore.cpp:
+ * Shared/WebProcessCreationParameters.cpp:
+ * Shared/WebTouchEvent.cpp:
+ * Shared/WebURLRequest.cpp:
+ * Shared/WebURLResponse.cpp:
+ * Shared/WebWheelEvent.cpp:
+ * Shared/cairo/ShareableBitmapCairo.cpp:
+ * Shared/cf/ArgumentCodersCF.cpp:
+ * Shared/cg/ShareableBitmapCG.cpp:
+ * Shared/gtk/ShareableBitmapGtk.cpp:
+ * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
+ * Shared/mac/CommandLineMac.cpp:
+ * Shared/mac/UpdateChunk.cpp:
+ * Shared/qt/CleanupHandler.cpp:
+ * Shared/qt/NativeWebKeyboardEventQt.cpp:
+ * Shared/qt/ShareableBitmapQt.cpp:
+ * Shared/qt/UpdateChunk.cpp:
+ * Shared/qt/WebCoreArgumentCodersQt.cpp:
+ * Shared/qt/WebEventFactoryQt.cpp:
+ * Shared/qt/WebURLRequestQt.cpp:
+ * Shared/qt/WebURLResponseQt.cpp:
+ * Shared/win/CommandLineWin.cpp:
+ * Shared/win/NativeWebKeyboardEventWin.cpp:
+ * Shared/win/PlatformCertificateInfo.cpp:
+ * Shared/win/UpdateChunk.cpp:
+ * Shared/win/WebCoreArgumentCodersWin.cpp:
+ * Shared/win/WebEventFactory.cpp:
+ * Shared/win/WebURLRequestWin.cpp:
+ * Shared/win/WebURLResponseWin.cpp:
+ * UIProcess/API/C/WKAuthenticationChallenge.cpp:
+ * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
+ * UIProcess/API/C/WKBackForwardList.cpp:
+ * UIProcess/API/C/WKBackForwardListItem.cpp:
+ * UIProcess/API/C/WKContext.cpp:
+ * UIProcess/API/C/WKCredential.cpp:
+ * UIProcess/API/C/WKDatabaseManager.cpp:
+ * UIProcess/API/C/WKDownload.cpp:
+ * UIProcess/API/C/WKFormSubmissionListener.cpp:
+ * UIProcess/API/C/WKFrame.cpp:
+ * UIProcess/API/C/WKFramePolicyListener.cpp:
+ * UIProcess/API/C/WKGeolocationManager.cpp:
+ * UIProcess/API/C/WKGeolocationPermissionRequest.cpp:
+ * UIProcess/API/C/WKGeolocationPosition.cpp:
+ * UIProcess/API/C/WKInspector.cpp:
+ * UIProcess/API/C/WKNavigationData.cpp:
+ * UIProcess/API/C/WKOpenPanelParameters.cpp:
+ * UIProcess/API/C/WKOpenPanelResultListener.cpp:
+ * UIProcess/API/C/WKPage.cpp:
+ * UIProcess/API/C/WKPageGroup.cpp:
+ * UIProcess/API/C/WKPreferences.cpp:
+ * UIProcess/API/C/WKProtectionSpace.cpp:
+ * UIProcess/API/C/win/WKContextWin.cpp:
+ * UIProcess/API/C/win/WKView.cpp:
+ * UIProcess/API/C/win/WKViewPrivate.cpp:
+ * UIProcess/API/cpp/qt/WKStringQt.cpp:
+ * UIProcess/API/cpp/qt/WKURLQt.cpp:
+ * UIProcess/API/qt/ClientImpl.cpp:
+ * UIProcess/API/qt/qgraphicswkview.cpp:
+ * UIProcess/API/qt/qwkcontext.cpp:
+ * UIProcess/API/qt/qwkpage.cpp:
+ * UIProcess/API/qt/qwkpreferences.cpp:
+ * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
+ * UIProcess/Authentication/AuthenticationDecisionListener.cpp:
+ * UIProcess/Authentication/WebCredential.cpp:
+ * UIProcess/Authentication/WebProtectionSpace.cpp:
+ * UIProcess/BackingStore.cpp:
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ * UIProcess/DrawingAreaProxy.cpp:
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ * UIProcess/FindIndicator.cpp:
+ * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
+ * UIProcess/GeolocationPermissionRequestProxy.cpp:
+ * UIProcess/Launcher/ProcessLauncher.cpp:
+ * UIProcess/Launcher/ThreadLauncher.cpp:
+ * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
+ * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
+ * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
+ * UIProcess/Launcher/qt/ThreadLauncherQt.cpp:
+ * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
+ * UIProcess/Launcher/win/ThreadLauncherWin.cpp:
+ * UIProcess/LayerBackedDrawingAreaProxy.cpp:
+ * UIProcess/Plugins/PluginInfoStore.cpp:
+ * UIProcess/Plugins/PluginProcessManager.cpp:
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
+ * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
+ * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
+ * UIProcess/ResponsivenessTimer.cpp:
+ * UIProcess/TiledDrawingAreaProxy.cpp:
+ * UIProcess/VisitedLinkProvider.cpp:
+ * UIProcess/WebBackForwardList.cpp:
+ * UIProcess/WebContext.cpp:
+ * UIProcess/WebContextInjectedBundleClient.cpp:
+ * UIProcess/WebContextMenuProxy.cpp:
+ * UIProcess/WebDatabaseManagerProxy.cpp:
+ * UIProcess/WebDatabaseManagerProxyClient.cpp:
+ * UIProcess/WebDownloadClient.cpp:
+ * UIProcess/WebEditCommandProxy.cpp:
+ * UIProcess/WebFindClient.cpp:
+ * UIProcess/WebFormClient.cpp:
+ * UIProcess/WebFormSubmissionListenerProxy.cpp:
+ * UIProcess/WebFrameListenerProxy.cpp:
+ * UIProcess/WebFramePolicyListenerProxy.cpp:
+ * UIProcess/WebFrameProxy.cpp:
+ * UIProcess/WebGeolocationManagerProxy.cpp:
+ * UIProcess/WebGeolocationProvider.cpp:
+ * UIProcess/WebHistoryClient.cpp:
+ * UIProcess/WebInspectorProxy.cpp:
+ * UIProcess/WebLoaderClient.cpp:
+ * UIProcess/WebNavigationData.cpp:
+ * UIProcess/WebOpenPanelResultListenerProxy.cpp:
+ * UIProcess/WebPageContextMenuClient.cpp:
+ * UIProcess/WebPageGroup.cpp:
+ * UIProcess/WebPageProxy.cpp:
+ * UIProcess/WebPolicyClient.cpp:
+ * UIProcess/WebPreferences.cpp:
+ * UIProcess/WebProcessManager.cpp:
+ * UIProcess/WebProcessProxy.cpp:
+ * UIProcess/WebResourceLoadClient.cpp:
+ * UIProcess/WebUIClient.cpp:
+ * UIProcess/cf/WebBackForwardListCF.cpp:
+ * UIProcess/cf/WebPageProxyCF.cpp:
+ * UIProcess/cf/WebPreferencesCF.cpp:
+ * UIProcess/gtk/TextCheckerGtk.cpp:
+ * UIProcess/gtk/WebInspectorGtk.cpp:
+ * UIProcess/gtk/WebPageProxyGtk.cpp:
+ * UIProcess/gtk/WebPreferencesGtk.cpp:
+ * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
+ * UIProcess/qt/TextCheckerQt.cpp:
+ * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
+ * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
+ * UIProcess/qt/WebContextMenuProxyQt.cpp:
+ * UIProcess/qt/WebContextQt.cpp:
+ * UIProcess/qt/WebInspectorProxyQt.cpp:
+ * UIProcess/qt/WebPageProxyQt.cpp:
+ * UIProcess/qt/WebPopupMenuProxyQt.cpp:
+ * UIProcess/qt/WebPreferencesQt.cpp:
+ * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
+ * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp:
+ * UIProcess/win/TextCheckerWin.cpp:
+ * UIProcess/win/WebContextMenuProxyWin.cpp:
+ * UIProcess/win/WebContextWin.cpp:
+ * UIProcess/win/WebInspectorProxyWin.cpp:
+ * UIProcess/win/WebPageProxyWin.cpp:
+ * UIProcess/win/WebPopupMenuProxyWin.cpp:
+ * UIProcess/win/WebView.cpp:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/Authentication/AuthenticationManager.cpp:
+ * WebProcess/Downloads/Download.cpp:
+ * WebProcess/Downloads/DownloadManager.cpp:
+ * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+ * WebProcess/Downloads/curl/DownloadCurl.cpp:
+ * WebProcess/Downloads/qt/DownloadQt.cpp:
+ * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
+ * WebProcess/Geolocation/WebGeolocationManager.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
+ * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
+ * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
+ * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
+ * WebProcess/InjectedBundle/InjectedBundle.cpp:
+ * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
+ * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
+ * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
+ * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
+ * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
+ * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
+ * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
+ * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
+ * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
+ * WebProcess/Plugins/Netscape/JSNPObject.cpp:
+ * WebProcess/Plugins/Netscape/NPJSObject.cpp:
+ * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
+ * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp:
+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
+ * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
+ * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
+ * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
+ * WebProcess/Plugins/Plugin.cpp:
+ * WebProcess/Plugins/PluginProcessConnection.cpp:
+ * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
+ * WebProcess/Plugins/PluginProxy.cpp:
+ * WebProcess/Plugins/PluginView.cpp:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
+ * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
+ * WebProcess/WebCoreSupport/WebDragClient.cpp:
+ * WebProcess/WebCoreSupport/WebEditorClient.cpp:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
+ * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
+ * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
+ * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
+ * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
+ * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
+ * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
+ * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
+ * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
+ * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp:
+ * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp:
+ * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
+ * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
+ * WebProcess/WebKitMain.cpp:
+ * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
+ * WebProcess/WebPage/DecoderAdapter.cpp:
+ * WebProcess/WebPage/DrawingArea.cpp:
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ * WebProcess/WebPage/EncoderAdapter.cpp:
+ * WebProcess/WebPage/FindController.cpp:
+ * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
+ * WebProcess/WebPage/PageOverlay.cpp:
+ * WebProcess/WebPage/TiledDrawingArea.cpp:
+ * WebProcess/WebPage/WebBackForwardListProxy.cpp:
+ * WebProcess/WebPage/WebContextMenu.cpp:
+ * WebProcess/WebPage/WebEditCommand.cpp:
+ * WebProcess/WebPage/WebFrame.cpp:
+ * WebProcess/WebPage/WebInspector.cpp:
+ * WebProcess/WebPage/WebOpenPanelResultListener.cpp:
+ * WebProcess/WebPage/WebPage.cpp:
+ * WebProcess/WebPage/WebPageGroupProxy.cpp:
+ * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
+ * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp:
+ * WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp:
+ * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp:
+ * WebProcess/WebPage/qt/WebInspectorQt.cpp:
+ * WebProcess/WebPage/qt/WebPageQt.cpp:
+ * WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp:
+ * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp:
+ * WebProcess/WebPage/win/WebInspectorWin.cpp:
+ * WebProcess/WebPage/win/WebPageWin.cpp:
+ * WebProcess/WebProcess.cpp:
+ * WebProcess/gtk/WebProcessGtk.cpp:
+ * WebProcess/gtk/WebProcessMainGtk.cpp:
+ * WebProcess/qt/WebProcessMainQt.cpp:
+ * WebProcess/qt/WebProcessQt.cpp:
+ * WebProcess/win/WebProcessMainWin.cpp:
+ * WebProcess/win/WebProcessWin.cpp:
+ * config.h: Copied from Source/WebKit2/WebKit2Prefix.h.
+ * win/WebKit2Common.vsprops:
+
+2011-01-27 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Adler.
+
+ execCommand("Paste") doesn't work in WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=52785
+
+ Thread through the new JavaScriptCanAccessClipboard setting.
+
+ * Shared/WebPreferencesStore.h:
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetJavaScriptCanAccessClipboard):
+ (WKPreferencesGetJavaScriptCanAccessClipboard):
+ * UIProcess/API/C/WKPreferences.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updatePreferences):
+
+2011-01-27 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use Document::url() instead of FrameLoader::url().
+ https://bugs.webkit.org/show_bug.cgi?id=41165
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
+ (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage):
+ (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
+ (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage):
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::url):
+
+2011-01-27 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Encode/Decode hasPreciseScrollingDeltas bit in WebWheelEvent
+ https://bugs.webkit.org/show_bug.cgi?id=53254
+
+ * Shared/WebWheelEvent.cpp:
+ (WebKit::WebWheelEvent::WebWheelEvent):
+ Initialize m_phase and m_hasPreciseScrollingDeltas.
+
+ (WebKit::WebWheelEvent::encode):
+ (WebKit::WebWheelEvent::decode):
+ Add missing coding for m_hasPreciseScrollingDeltas.
+
+2011-01-26 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Darin Adler and Adam Roben.
+
+ WebKit2: add support for drag and drop on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=52775
+ <rdar://problem/8514409>
+
+ On Windows the access to the content being dragged is
+ provided via the IDataObject interface that is made available
+ to the window that registers itself as drop target.
+ Since this interface cannot be accessed from the WebProcess,
+ in every call to one of the methods of the IDropTarget interface
+ we serialize the content of the drag clipboard and send it over to
+ the WebProcess. The implementation uses the same messages as the
+ Mac one, with slightly different parameters to pass the serialized
+ clipboard.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::performDragControllerAction): Added Windows
+ specific implementation.
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::WebView): Added dropTargetHelper object creation.
+ (WebKit::WebView::initialize): Added to register for drag/drop with out
+ refcount issues.
+ (WebKit::WebView::close):
+ (WebKit::WebView::windowReceivedMessage):
+ (WebKit::WebView::QueryInterface):
+ (WebKit::WebView::AddRef):
+ (WebKit::WebView::Release):
+ (WebKit::dragOperationToDragCursor):
+ (WebKit::WebView::keyStateToDragOperation):
+ (WebKit::WebView::DragEnter):
+ (WebKit::WebView::DragOver):
+ (WebKit::WebView::DragLeave):
+ (WebKit::WebView::Drop):
+ * UIProcess/win/WebView.h:
+ (WebKit::WebView::create):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::performDragControllerAction):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
+2011-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53197
+ <rdar://problem/8895682> Make WebKit2 printing asynchronous
+
+ <rdar://problem/8899988> REGRESSION(WebKit2): Attempting to print WHATWG HTML spec shows
+ 1-page blank preview
+
+ <rdar://problem/8900078> WebKit2 printing has a separate message exchange per page when
+ printing instead of printing all at once
+
+ * UIProcess/API/mac/WKPrintingView.h: Store a lot more cached information.
+
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]): Use PrintOperation stored in
+ class. We generally want that now, because current operation will not be set up on other threads.
+ (-[WKPrintingView _isPrintingPreview]): Added. Preview is different, because it can draw
+ a placeholder - but actual printing need to wait until UI process has data.
+ (-[WKPrintingView _updatePreview]): Force AppKit to update print preview when we have real
+ data to replace placeholder with.
+ (-[WKPrintingView _hasPageRects]): Return if page rects have already been computed.
+ (-[WKPrintingView _expectedPreviewCallbackForRect:]): Find an existing request for this rect,
+ if any.
+ (pageDidDrawToPDF): Update preview - or if actually printing, release control to printing thread.
+ (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Ask for a PDF document with
+ pages the user asked to print.
+ (pageDidComputePageRects): When web process returns page geometry data, we update preview to display
+ a page count (which indirectly triggers a request for a preview). When actually printing,
+ request a PDF right away, we'll need it later.
+ (-[WKPrintingView _askPageToComputePageRects]): Ask web process for page geometry.
+ (prepareDataForPrintingOnSecondaryThread): This function starts preparing all data necessary
+ for actual printing on main thread.
+ (-[WKPrintingView knowsPageRange:]): Changed to be async for preview, and to call main
+ thread for actual printing.
+ (-[WKPrintingView _pageForRect:]): Find page number for a given range, assuming that AppKit
+ always asks for full pages.
+ (-[WKPrintingView _drawPDFDocument:page:atPoint:]): A helper function to draw a PDF document.
+ (-[WKPrintingView _drawPreview:]): Draw the whole page for preview.
+ (-[WKPrintingView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
+ Draw the whole page for actual printing.
+ (-[WKPrintingView _drawPageBorderWithSizeOnMainThread:]): Call drawPageBorderWithSize: with
+ correct graphics context and print operation.
+ (-[WKPrintingView drawPageBorderWithSize:]): Delegate work to main thread when called from a
+ secondary one.
+ (-[WKPrintingView _provideTotalScaleFactorForPrintOperation:]): Added an assertion that
+ our stored NSPrintOperation isn't out of sync with reality.
+ (-[WKPrintingView rectForPage:]): Handle the case where we don't have the data yet, drawing
+ a placeholder.
+ (-[WKPrintingView endDocument]): When page setup changes, we must reset all state.
+
+ * UIProcess/API/mac/WKView.mm: (-[WKView printOperationWithPrintInfo:forFrame:]): Tell
+ NSPrintingView which operation it's serving, so that it knows it even when current operation
+ isn't set.
+
+ * UIProcess/GenericCallback.h:
+ (WebKit::ComputedPagesCallback::create):
+ (WebKit::ComputedPagesCallback::~ComputedPagesCallback):
+ (WebKit::ComputedPagesCallback::performCallbackWithReturnValue):
+ (WebKit::ComputedPagesCallback::invalidate):
+ (WebKit::ComputedPagesCallback::callbackID):
+ (WebKit::ComputedPagesCallback::generateCallbackID):
+ (WebKit::ComputedPagesCallback::ComputedPagesCallback):
+ Added ComputedPagesCallback, which returns a vector of IntRects and a double. Hopefully,
+ it will become a specialization of GenericCallback one day.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::close): Added m_voidCallbacks - it looks like they were omitted
+ by accident.
+ (WebKit::WebPageProxy::computedPagesCallback): Added.
+ (WebKit::WebPageProxy::processDidCrash): Added m_computedPagesCallbacks.
+ (WebKit::WebPageProxy::computePagesForPrinting): Async now!
+ (WebKit::WebPageProxy::drawRectToPDF): Ditto.
+ (WebKit::WebPageProxy::drawPagesToPDF): Added.
+ * UIProcess/WebPageProxy.h:
+
+ * UIProcess/WebPageProxy.messages.in: Added ComputedPagesCallback.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::beginPriting): Compute page rects right away - we'll need them in
+ drawPagesToPDF(), which doesn't have a PrintInfo.
+ (WebKit::WebPage::computePagesForPrinting): Send async response.
+ (WebKit::WebPage::drawRectToPDF): This function used to draw into original
+ location at frame coordinates, and now it draws at (0, 0).
+ (WebKit::WebPage::drawPagesToPDF): Added - make a multi-page PDF.
+ * WebProcess/WebPage/WebPage.h:
+
+ * WebProcess/WebPage/WebPage.messages.in: Added DrawPagesToPDF.
+
+2011-01-27 Alejandro G. Castro <alex@igalia.com>
+
+ Unreviewed GTK build fix after r76797.
+
+ * Shared/WebPreferencesStore.h: Use Qt fonts preference for the moment.
+
+2011-01-27 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Allow pop-up menus to contain multiple items that have the same title.
+
+ * UIProcess/mac/WebPopupMenuProxyMac.mm:
+ (WebKit::WebPopupMenuProxyMac::populate): Set the item’s title after adding it rather than
+ when adding it, so that it will not replace any existing item with the same title.
+
+2011-01-27 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt][WK2] Add QWKPage APIs regarding engine process availability
+ https://bugs.webkit.org/show_bug.cgi?id=53237
+
+ QWKPage will now emit engineConnected() and engineDisconnected()
+ when the web process crashes and is relaunched respectively.
+
+ Also added QWKPage::isConnectedToEngine() for convenience.
+
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPagePrivate::QWKPagePrivate):
+ (QWKPagePrivate::didRelaunchProcess):
+ (QWKPagePrivate::processDidCrash):
+ (QWKPage::isConnectedToEngine):
+ * UIProcess/API/qt/qwkpage.h:
+ * UIProcess/API/qt/qwkpage_p.h:
+
+2011-01-27 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Lots of layout test failures due to wrong font type
+ https://bugs.webkit.org/show_bug.cgi?id=53233
+
+ * Shared/WebPreferencesStore.h:
+ Specialize default font families for Qt.
+
+2011-01-26 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKitTestRunner needs to support layoutTestController.evaluateInWebInspector
+ https://bugs.webkit.org/show_bug.cgi?id=42319
+
+ Add WKBundleInspector and APIs needed to implement WebKitTestRunner APIs.
+
+ * GNUmakefile.am:
+ * Shared/API/c/WKBase.h:
+ * Shared/APIObject.h:
+ * WebKit2.pro:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
+ * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp: Added.
+ (WKBundleInspectorGetTypeID):
+ (WKBundleInspectorShow):
+ (WKBundleInspectorClose):
+ (WKBundleInspectorEvaluateScriptForTest):
+ (WKBundleInspectorSetPageProfilingEnabled):
+ * WebProcess/InjectedBundle/API/c/WKBundleInspector.h: Added.
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+ (WKBundlePageGetInspector):
+ * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
+ * WebProcess/WebPage/WebInspector.cpp:
+ (WebKit::WebInspector::create):
+ (WebKit::WebInspector::evaluateScriptForTest):
+ * WebProcess/WebPage/WebInspector.h:
+ (WebKit::WebInspector::type):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::inspector):
+ * WebProcess/WebPage/WebPage.h:
+ * win/WebKit2.vcproj:
+ * win/WebKit2Generated.make:
+
+2011-01-26 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
+ <rdar://problem/8821760>
+
+ Reviewed by Antti Koivisto.
+
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface): Added initialization for
+ GetHTTPPipeliningPriority and SetHTTPPipeliningPriority.
+
+2011-01-26 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics
+ when using WKScrollbars.
+
+ * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2011-01-26 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add events to represent the start/end of a gesture scroll
+ https://bugs.webkit.org/show_bug.cgi?id=53215
+
+ * Scripts/webkit2/messages.py:
+ * Shared/WebEvent.h:
+ (WebKit::WebGestureEvent::WebGestureEvent):
+ (WebKit::WebGestureEvent::position):
+ (WebKit::WebGestureEvent::globalPosition):
+ * Shared/WebEventConversion.cpp:
+ (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
+ (WebKit::platform):
+ * Shared/WebEventConversion.h:
+ * Shared/WebGestureEvent.cpp: Added.
+ (WebKit::WebGestureEvent::WebGestureEvent):
+ (WebKit::WebGestureEvent::encode):
+ (WebKit::WebGestureEvent::decode):
+ (WebKit::WebGestureEvent::isGestureEventType):
+ * Shared/mac/WebEventFactory.h:
+ * Shared/mac/WebEventFactory.mm:
+ (WebKit::gestureEventTypeForEvent):
+ (WebKit::WebEventFactory::createWebGestureEvent):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView shortCircuitedEndGestureWithEvent:]):
+ (-[WKView beginGestureWithEvent:]):
+ (-[WKView viewDidMoveToWindow]):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::handleGestureEvent):
+ (WebKit::WebPageProxy::didReceiveEvent):
+ * UIProcess/WebPageProxy.h:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::handleGestureEvent):
+ (WebKit::WebPage::gestureEvent):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ Pipe gesture events down to WebCore.
+
+2011-01-26 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ <rdar://problem/8446709> Allow inter-ideograph justification for CJK
+ https://bugs.webkit.org/show_bug.cgi?id=53184
+
+ * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
+ (WebKit::WebPopupMenu::setUpPlatformData): Added a TrailingExpansionBehavior parameter to the
+ RenderText constructor.
+
+2011-01-26 Jing Jin <jjin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Methods to temporarily disable size updates to the page drawing area in WKView.
+ https://bugs.webkit.org/show_bug.cgi?id=53206
+ Part of <rdar://problem/8818585>
+
+ * UIProcess/API/mac/WKView.h: Added _frameSizeUpdateDisabledCount.
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView setFrameSize:]): Only update page size if frame size updates are enabled.
+ (-[WKView _setDrawingAreaSize:]): Helper method to set the page's drawing area's size.
+ (-[WKView disableFrameSizeUpdates]): Increment _frameSizeUpdateDisabledCount
+ (-[WKView enableFrameSizeUpdates]): Decrement _frameSizeUpdateDisabledCount, and if the count is 0, meaning
+ that no one is disabling frame size updates anymore, update the drawing area's size to match the current frame.
+ (-[WKView frameSizeUpdatesDisabled]): Returns YES if at least one caller is disabling frame size updates.
+ * UIProcess/API/mac/WKViewInternal.h: Declared -disableFrameSizeUpdates, -enableFrameSizeUpdates, and -frameSizeUpdatesDisabled.
+ * UIProcess/API/mac/WKViewPrivate.h: Added.
+ * WebKit2.xcodeproj/project.pbxproj: Added WKViewPrivate.h
+
+2011-01-26 Jing Jin <jjin@apple.com>
+
+ Rubber-stamped by Dan Bernstein.
+
+ Several WKView Internal category methods are implemented in the main category.
+ https://bugs.webkit.org/show_bug.cgi?id=53195
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _setEventBeingResent:]): Moved into implementation of WKView (Internal).
+ (-[WKView _interceptKeyEvent:]): Moved into implementation of WKView (Internal).
+ (-[WKView _getTextInputState:selectionEnd:underlines:WebCore::]): Moved into implementation of WKView (Internal).
+ (-[WKView _setAccessibilityChildToken:]): Moved into implementation of WKView (Internal).
+
+2011-01-26 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by John Sullivan.
+
+ WebKit2: Need API to get the frame load state of a BundleFrame
+ https://bugs.webkit.org/show_bug.cgi?id=53193
+
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
+ (WKBundleFrameGetFrameLoadState): Call through to the FrameLoader to get the frame load state.
+ * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
+
+2011-01-25 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Crashes loading pages when cancelling subresource loads through WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=53123
+ <rdar://problem/8914361>
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType): If our URL is null, return early instead of dispatching
+ a message.
+
+2011-01-25 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WK2 leaks when a page is closed
+ https://bugs.webkit.org/show_bug.cgi?id=53100
+
+ Allow the WKView a chance to clean up on a page close. In this case,
+ cleaning up means removing the references the accessibility token has
+ to the window.
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::pageClosed):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _setRemoteAccessibilityWindow:]):
+ (-[WKView _setAccessibilityChildToken:]):
+ (-[WKView _processDidCrash]):
+ (-[WKView _pageClosed]):
+ * UIProcess/API/mac/WKViewInternal.h:
+ * UIProcess/API/qt/qwkpage_p.h:
+ (QWKPagePrivate::pageClosed):
+ * UIProcess/PageClient.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::close):
+ * UIProcess/win/WebView.cpp:
+ (WebKit::WebView::pageClosed):
+ * UIProcess/win/WebView.h:
+
+2011-01-25 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Expose WebGL flag set/get in WK2
+ https://bugs.webkit.org/show_bug.cgi?id=53096
+
+ * Shared/WebPreferencesStore.h:
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetWebGLEnabled):
+ (WKPreferencesGetWebGLEnabled):
+ * UIProcess/API/C/WKPreferencesPrivate.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updatePreferences):
+
+2011-01-25 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add and implement LayerTreeHost::scheduleLayerFlush
+ https://bugs.webkit.org/show_bug.cgi?id=53135
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add LayerTreeHostMac.mm.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::scheduleCompositingLayerSync):
+ Call LayerTreeHost::scheduleLayerFlush.
+
+ * WebProcess/WebPage/LayerTreeHost.cpp:
+ (WebKit::LayerTreeHost::~LayerTreeHost):
+ Call platformInvalidate().
+
+ (WebKit::LayerTreeHost::flushPendingLayerChanges):
+ Rename from syncCompositingLayers.
+
+ * WebProcess/WebPage/mac/LayerTreeHostMac.mm: Added.
+ (WebKit::LayerTreeHost::scheduleLayerFlush):
+ Create a run loop observer if needed. This code is copied from LayerBackedDrawingAreaMac.mm
+
+ (WebKit::LayerTreeHost::platformInvalidate):
+ Invalidate the run loop observer.
+
+ (WebKit::LayerTreeHost::flushPendingLayerChangesRunLoopObserverCallback):
+ Call flushPendingChanges() and remove the run loop observer if it succeeded.
+
+2011-01-25 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Add LayerTreeHost class
+ https://bugs.webkit.org/show_bug.cgi?id=53132
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Add LayerTreeHost files.
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::DrawingAreaImpl):
+ Initialize m_layerTreeHost.
+
+ (WebKit::DrawingAreaImpl::setRootCompositingLayer):
+ Call the m_layerTreeHost.
+
+ * WebProcess/WebPage/LayerTreeHost.cpp: Added.
+ (WebKit::LayerTreeHost::attachRootCompositingLayer):
+ (WebKit::LayerTreeHost::detachRootCompositingLayer):
+ Add stubbed out functions.
+
+ (WebKit::LayerTreeHost::syncCompositingLayers):
+ Sync the compositing layers in the main frame.
+
+ * WebProcess/WebPage/LayerTreeHost.h: Added.
+
+2011-01-25 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber-stamped by Adam Roben.
+
+ Windows production build fix.
+ Use correct environment variable escaping
+
+ * win/WebKit2.make:
+ * win/WebKit2Generated.make:
+
+2011-01-25 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't inform the UI process about compositing changes when using the new drawing area
+ https://bugs.webkit.org/show_bug.cgi?id=53120
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::changeAcceleratedCompositingMode):
+ Return early if we're using the new drawing area.
+
+ (WebKit::WebPage::exitAcceleratedCompositingMode):
+ Call setRootCompositingLayer(0) so the drawing area knows when we leave accelerated compositing.
+
+2011-01-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Pipe a timestamp down into the PlatformWheelEvent for the Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=53111
+
+ * Shared/WebEventConversion.cpp:
+ (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
+ Assign the timestamp.
+
+2011-01-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add hasPreciseScrollingDeltas bit to PlatformWheelEvent on the Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=53107
+
+ * Shared/WebEvent.h:
+ (WebKit::WebWheelEvent::hasPreciseScrollingDeltas):
+ * Shared/WebEventConversion.cpp:
+ (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
+ * Shared/WebWheelEvent.cpp:
+ (WebKit::WebWheelEvent::WebWheelEvent):
+ * Shared/mac/WebEventFactory.mm:
+ (WebKit::WebEventFactory::createWebWheelEvent):
+
+2011-01-25 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ need a way to request the host CALayer render server port
+ https://bugs.webkit.org/show_bug.cgi?id=53101
+ <rdar://problem/8913620>
+
+ * PluginProcess/PluginControllerProxy.cpp:
+ (WebKit::PluginControllerProxy::compositingRenderServerPort):
+ Get the render server port from the plug-in process.
+
+ * PluginProcess/PluginControllerProxy.h:
+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+ (WebKit::NPN_GetValue):
+ Call NetscapePlugin::compositingRenderServerPort.
+
+ * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
+ (WebKit::NetscapePlugin::compositingRenderServerPort):
+ Call PluginController::compositingRenderServerPort.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::compositingRenderServerPort):
+ Get the render server port from the web process.
+
+ * WebProcess/Plugins/PluginView.h:
+ Add compositingRenderServerPort.
+
+2011-01-25 Maciej Stachowiak <mjs@apple.com>
+
+ Rubber stamped by Dan Bernstein.
+
+ Change some floating point constants from 1.0 to 1.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
+
+2011-01-25 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Improve scale factor resetting
+ https://bugs.webkit.org/show_bug.cgi?id=53093
+
+ Two key changes:
+ - Don't set the scale factor to what it already is, as this causes an
+ uneeded force layout and scroll
+ - Don't ever set the scale factor based on a non-main frame committing
+
+ This fixes two WebKit2 layout tests.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
+
+2011-01-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53041
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2011-01-25 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt][WK2] Add QWKPage::processCrashed() signal
+ https://bugs.webkit.org/show_bug.cgi?id=53076
+
+ * UIProcess/API/qt/qwkpage.cpp:
+ (QWKPagePrivate::processDidCrash):
+ * UIProcess/API/qt/qwkpage.h:
+ * UIProcess/API/qt/qwkpage_p.h:
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Fix build.
+
+ * WebProcess/mac/WebProcessMac.mm:
+ (WebKit::initializeSandbox):
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Reset the page scale factor on standard frame loads
+ https://bugs.webkit.org/show_bug.cgi?id=53058
+ <rdar://problem/8908844>
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::scaleWebView):
+ Don't set m_viewScaleFactor here. It will be set in viewScaleFactorDidChange.
+
+ (WebKit::WebPageProxy::viewScaleFactorDidChange):
+ Update m_viewScaleFactor.
+
+ * UIProcess/WebPageProxy.h:
+ Add viewScaleFactorDidChange.
+
+ * UIProcess/WebPageProxy.messages.in:
+ Add ViewScaleFactorDidChange message.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
+ Set the scale factor.
+
+ (WebKit::WebFrameLoaderClient::restoreViewState):
+ Inform the UI process about the new view scale factor.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::scaleWebView):
+ Send a ViewScaleFactorDidChange message.
+
+2011-01-24 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Use designated temp directory for the database for WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=53052
+
+ Add the API necessary to support this. Database path is now
+ determined on the UI process side and passed to the Web process.
+ Reviewed by Anders Carlsson.
+
+ * GNUmakefile.am:
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::encode):
+ (WebKit::WebProcessCreationParameters::decode):
+ * Shared/WebProcessCreationParameters.h:
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextSetDatabaseDirectory):
+ * UIProcess/API/C/WKContextPrivate.h:
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::ensureWebProcess):
+ (WebKit::WebContext::databaseDirectory):
+ * UIProcess/WebContext.h:
+ (WebKit::WebContext::setDatabaseDirectory):
+ * UIProcess/mac/WebContextMac.mm:
+ (WebKit::WebContext::platformDefaultDatabaseDirectory):
+ * UIProcess/qt/WebContextQt.cpp:
+ (WebKit::WebContext::platformDefaultDatabaseDirectory):
+ * UIProcess/win/WebContextWin.cpp:
+ (WebKit::WebContext::platformDefaultDatabaseDirectory):
+ * WebKit2.pro:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
+ (WebKit::WebDatabaseManager::initialize):
+ (WebKit::WebDatabaseManager::WebDatabaseManager):
+ * WebProcess/WebCoreSupport/WebDatabaseManager.h:
+ * WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp: Removed.
+ * WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm: Removed.
+ * WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp: Removed.
+ * WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp: Removed.
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::WebProcess):
+ (WebKit::WebProcess::initializeWebProcess):
+ * WebProcess/com.apple.WebProcess.sb:
+ * WebProcess/mac/WebProcessMac.mm:
+ (WebKit::initializeSandbox):
+ * win/WebKit2.vcproj:
+
+2011-01-24 Brent Fulgham <bfulgham@webkit.org>
+
+ Unreviewed build fix.
+
+ * win/WebKit2.vcproj: Don't build the CG Utilities when building
+ without CG support.
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by John Sullivan.
+
+ Don't use the timeout checker for non-user-interaction messages
+ https://bugs.webkit.org/show_bug.cgi?id=53046
+
+ * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
+ (WebKit::ChunkedUpdateDrawingAreaProxy::didSetSize):
+ (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
+ * UIProcess/LayerBackedDrawingAreaProxy.cpp:
+ (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
+ (WebKit::LayerBackedDrawingAreaProxy::didSetSize):
+
+2011-01-24 Adam Roben <aroben@apple.com>
+
+ Windows Production build fix
+
+ * win/WebKit2.make: Update for move of WebKit2 into Source.
+
+2011-01-24 Jessie Berlin <jberlin@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WebKit2: LayoutTests: The UNIMPLEMENTED warnings in TextCheckerWin should be disabled
+ https://bugs.webkit.org/show_bug.cgi?id=53029
+
+ * UIProcess/win/TextCheckerWin.cpp:
+ Disable the warnings for this file.
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Wait for half a second if we're asked to paint when receiving a DidSetSize message
+ https://bugs.webkit.org/show_bug.cgi?id=53028
+
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::paint):
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement forceRedisplay in the new drawing area
+ https://bugs.webkit.org/show_bug.cgi?id=53026
+
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::forceRepaint):
+ * WebProcess/WebPage/DrawingAreaImpl.h:
+
+2011-01-24 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fill unpainted rects with the background color.
+ https://bugs.webkit.org/show_bug.cgi?id=53025
+
+ * UIProcess/API/mac/WKView.mm:
+ (drawPageBackground):
+ Add new helper function.
+
+ (-[WKView drawRect:]):
+ Iterate over the unpainted rects and fill them with the background color.
+
+2011-01-24 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by John Sullivan.
+
+ WebKit2 version of <rdar://problem/6097826> Mail's cursor does not become a resize cursor when moving mouse from scrolled email to the horizontal splitter
+
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::setCursor): If the current cursor comes from a cursor rect, do not override it.
+
+2011-01-24 Balazs Kelemen <kbalazs@webkit.org>
+
+ Rubber-stamped by Csaba Osztrogonác.
+
+ Typo fix.
+
+ * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
+ (WebKit::ProcessLauncher::launchProcess): Move the bracket to the right place.
+
+2011-01-24 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove CleanupHandler by passing file descriptors.
+
+ Deleting files in signal handler of UI process is not a good idea,
+ because the memory where filenames are stored might not be valid
+ after a crash.
+
+ To avoid the need of using signal handlers for cleanup,
+ change following:
+ 1) Avoid passing filenames between processes, pass fds
+ 2) When mmap'ing files, delete them immediately after
+ opening and mmap'ing them.
+ 3) Pass sockets with fds during fork+exec instead of
+ passing them via the filesystem.
+ 4) Use mmap'ed files for implementation of SharedMemory.
+ QSharedMemory does not support cleanup correctly.
+
+ Consquences:
+ - Move MappedMemory to SharedMemory, make UpdateChunk use this.
+ - Implement CoreIPC::Attachment using mmaped files.
+ - Send messages using datagram socket. This solution works
+ similiarly to Mach ports on Mac.
+ - Send big messages out-of-line and thus avoid increasing
+ the receive buffer.
+ - Remove MemoryMappedPool and rely on libc/kernel caching
+ of mmapped areas.
+ - Unmap memory areas after use.
+ - When UI process crashes, kill the web process using SIGKILL.
+ This is possible again because cleanup handler is not needed.
+
+ [WK2][Qt] Multiple problems with MemoryMappedPool
+ https://bugs.webkit.org/show_bug.cgi?id=51984
+
+ * Platform/CoreIPC/Attachment.cpp:
+ (CoreIPC::Attachment::Attachment):
+ * Platform/CoreIPC/Attachment.h:
+ (CoreIPC::Attachment::size):
+ (CoreIPC::Attachment::releaseFileDescriptor):
+ (CoreIPC::Attachment::fileDescriptor):
+ * Platform/CoreIPC/Connection.h:
+ * Platform/CoreIPC/qt/ConnectionQt.cpp:
+ (CoreIPC::MessageInfo::MessageInfo):
+ (CoreIPC::MessageInfo::setMessageBodyOOL):
+ (CoreIPC::MessageInfo::isMessageBodyOOL):
+ (CoreIPC::MessageInfo::bodySize):
+ (CoreIPC::MessageInfo::messageID):
+ (CoreIPC::MessageInfo::attachmentCount):
+ (CoreIPC::Connection::platformInitialize):
+ (CoreIPC::Connection::platformInvalidate):
+ (CoreIPC::SocketNotifierDisableGuard::SocketNotifierDisableGuard):
+ (CoreIPC::SocketNotifierDisableGuard::~SocketNotifierDisableGuard):
+ (CoreIPC::Connection::readyReadHandler):
+ (CoreIPC::Connection::open):
+ (CoreIPC::Connection::platformCanSendOutgoingMessages):
+ (CoreIPC::Connection::sendOutgoingMessage):
+ * Platform/SharedMemory.h:
+ * Platform/WorkQueue.h:
+ * Platform/qt/MappedMemoryPool.cpp: Removed.
+ * Platform/qt/MappedMemoryPool.h: Removed.
+ * Platform/qt/SharedMemoryQt.cpp:
+ (WebKit::SharedMemory::Handle::Handle):
+ (WebKit::SharedMemory::Handle::~Handle):
+ (WebKit::SharedMemory::Handle::isNull):
+ (WebKit::SharedMemory::Handle::encode):
+ (WebKit::SharedMemory::Handle::decode):
+ (WebKit::SharedMemory::Handle::releaseToAttachment):
+ (WebKit::SharedMemory::Handle::adoptFromAttachment):
+ (WebKit::SharedMemory::create):
+ (WebKit::accessModeMMap):
+ (WebKit::SharedMemory::~SharedMemory):
+ (WebKit::accessModeFile):
+ (WebKit::SharedMemory::createHandle):
+ * Platform/qt/WorkQueueQt.cpp:
+ (WorkQueue::registerSocketEventHandler):
+ * Shared/qt/UpdateChunk.cpp:
+ (WebKit::UpdateChunk::UpdateChunk):
+ (WebKit::UpdateChunk::~UpdateChunk):
+ (WebKit::UpdateChunk::encode):
+ (WebKit::UpdateChunk::decode):
+ (WebKit::UpdateChunk::createImage):
+ * Shared/qt/UpdateChunk.h:
+ * UIProcess/Launcher/ProcessLauncher.h:
+ * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
+ (WebKit::QtWebProcess::QtWebProcess):
+ (WebKit::QtWebProcess::setupChildProcess):
+ (WebKit::ProcessLauncher::launchProcess):
+ (WebKit::ProcessLauncher::platformInvalidate):
+ * UIProcess/Launcher/qt/ThreadLauncherQt.cpp:
+ (WebKit::webThreadBody):
+ (WebKit::ThreadLauncher::createWebThread):
+ * WebKit2.pro:
+ * WebProcess/qt/WebProcessMainQt.cpp:
+ (WebKit::WebProcessMainQt):
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * DerivedSources.pro:
+ * WebKit2.pro:
+ * WebProcess.pro:
+
+2011-01-23 Damian Kaleta <dkaleta@apple.com>
+
+ Reviewed by Kevin Decker.
+
+ <rdar://problem/8905171>
+ https://bugs.webkit.org/show_bug.cgi?id=52985
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::scaleWebView): Eliminated early return inside WebPageProxy::scaleWebView, making it
+ consistent with WebKit1.
+
+2011-01-23 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52968
+ Use a separate NSView for printing
+
+ Also addresses <rdar://problem/8900148> Improper check for
+ -[NSGraphicsContext currentContextDrawingToScreen]
+
+ * UIProcess/API/mac/WKPrintingView.h: Added.
+ * UIProcess/API/mac/WKPrintingView.mm: Added.
+ (-[WKPrintingView initWithFrameProxy:]):
+ (-[WKPrintingView isFlipped]):
+ (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]):
+ (-[WKPrintingView knowsPageRange:]):
+ (-[WKPrintingView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
+ (-[WKPrintingView drawPageBorderWithSize:]):
+ (-[WKPrintingView _provideTotalScaleFactorForPrintOperation:]):
+ (-[WKPrintingView rectForPage:]):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView drawRect:]):
+ (-[WKView canChangeFrameLayout:]):
+ (-[WKView printOperationWithPrintInfo:forFrame:]):
+ * WebKit2.xcodeproj/project.pbxproj:
+ Moved printing code to a separate view, simplifying as appropriate. The view is currently not
+ referenced by anything in WebKit2 directly, being owned by NSPrintOperation.
+
+2011-01-22 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Transparent windows with compositing WebKit2 content show garbage
+ https://bugs.webkit.org/show_bug.cgi?id=52966
+ <rdar://problem/8765051>
+
+ * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
+ (WebKit::LayerBackedDrawingAreaProxy::paint):
+ If the WKView should draw transparent background, do so.
+
+2011-01-22 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add an asynchronous WKPageForceRepaint
+ https://bugs.webkit.org/show_bug.cgi?id=52964
+ <rdar://problem/8898527>
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageForceRepaint):
+ Call WebPageProxy::forceRepaint.
+
+ * UIProcess/API/C/WKPage.h:
+ Add WKPageForceRepaint.
+
+ * UIProcess/GenericCallback.h:
+ Add a "generic" VoidCallback class.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::forceRepaint):
+ Insert the callback in the m_voidCallbacks map and send a forceRepaint message.
+
+ (WebKit::WebPageProxy::voidCallback):
+ Call the right void callback.
+
+ (WebKit::WebPageProxy::processDidCrash):
+ Invalidate m_voidCallbacks.
+
+ * UIProcess/WebPageProxy.messages.in:
+ Add a VoidCallback message.
+
+ * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
+ (WebKit::ChunkedUpdateDrawingArea::forceRepaint):
+ Force a repaint.
+
+ * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
+ Add forceRepaint.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::forceRepaint):
+ Call forceRepaint on the drawing area.
+
+ * WebProcess/WebPage/WebPage.messages.in:
+ Add a ForceRepaint message.
+
+2011-01-21 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Introduce FontMetrics abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=51456
+
+ * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Use FontMetrics instead of Font to access the metrics.
+ (WebKit::WebPopupMenu::setUpPlatformData):
+
+2011-01-22 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52950
+ Leak in WebPage::drawRectToPDF
+
+ * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawRectToPDF): Use RetainPtr here, too.
+
+2011-01-22 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52951
+ WebKit2 generates a bad PDF for cross process messaging
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
+ Use a correct offset when flipping.
+
+2011-01-21 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52943
+ Objective-C files should use #import, not #include
+
+ * UIProcess/API/C/WebKit2.h: This is an interesting one, because it's cross-platform, and
+ there is more than one WKView.h.
+
+ * Platform/mac/ModuleMac.mm:
+ * Platform/mac/RunLoopMac.mm:
+ * PluginProcess/mac/PluginControllerProxyMac.mm:
+ * PluginProcess/mac/PluginProcessMac.mm:
+ * PluginProcess/mac/PluginProcessMainMac.mm:
+ * Shared/API/c/mac/WKCertificateInfoMac.mm:
+ * Shared/API/c/mac/WKURLRequestNS.mm:
+ * Shared/API/c/mac/WKURLResponseNS.mm:
+ * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
+ * Shared/mac/PlatformCertificateInfo.mm:
+ * Shared/mac/SandboxExtensionMac.mm:
+ * Shared/mac/WebCoreArgumentCodersMac.mm:
+ * Shared/mac/WebMemorySampler.mac.mm:
+ * Shared/mac/WebURLRequestMac.mm:
+ * Shared/mac/WebURLResponseMac.mm:
+ * UIProcess/API/mac/FindIndicatorWindow.mm:
+ * UIProcess/API/mac/WKTextInputWindowController.mm:
+ * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
+ * UIProcess/Launcher/mac/ThreadLauncherMac.mm:
+ * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
+ * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
+ * UIProcess/mac/BackingStoreMac.mm:
+ * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
+ * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
+ * UIProcess/mac/TextCheckerMac.mm:
+ * UIProcess/mac/WebContextMac.mm:
+ * UIProcess/mac/WebContextMenuProxyMac.mm:
+ * UIProcess/mac/WebPageProxyMac.mm:
+ * UIProcess/mac/WebPopupMenuProxyMac.mm:
+ * UIProcess/mac/WebPreferencesMac.mm:
+ * WebProcess/Downloads/mac/DownloadMac.mm:
+ * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
+ * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
+ * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
+ * WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm:
+ * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
+ * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
+ * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
+ * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ * WebProcess/mac/WebProcessMac.mm:
+
+2011-01-21 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix the WebKit2 build with clang.
+
+ * Scripts/webkit2/messages.py: Add some more structs to the list.
+ * UIProcess/DrawingAreaProxy.h: Forward-declare UpdateInfo as a class.
+ * UIProcess/TextChecker.h: Forward-declare TextCheckerState as a struct.
+ * UIProcess/WebPageProxy.h: Forward-declare ContextMenuState as a struct.
+ * UIProcess/mac/TextCheckerMac.mm: Fix the type of the string constants so that they can be passed to
+ functions expecting NSString* without generating warnings.
+ * WebProcess/WebPage/DrawingArea.h: Forward-declare WebPageCreationParameters as a struct.
+ * WebProcess/WebPage/DrawingAreaImpl.h: Forward-declare UpdateInfo as a class.
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::getResourceDataFromFrame): Add parens around the assignment in the condition of
+ the if statement to suppress a warning.
+
2011-01-21 Brian Weinstein <bweinstein@apple.com>
Reviewed by Adam Roben.
diff --git a/Source/WebKit2/Configurations/FeatureDefines.xcconfig b/Source/WebKit2/Configurations/FeatureDefines.xcconfig
index 46d5de4..3971037 100644
--- a/Source/WebKit2/Configurations/FeatureDefines.xcconfig
+++ b/Source/WebKit2/Configurations/FeatureDefines.xcconfig
@@ -38,10 +38,10 @@ ENABLE_ACCELERATED_2D_CANVAS_macosx = $(ENABLE_ACCELERATED_2D_CANVAS_macosx_$(TA
ENABLE_ACCELERATED_2D_CANVAS_macosx_1060 = ;
ENABLE_ACCELERATED_2D_CANVAS_macosx_1070 = ;
-ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(REAL_PLATFORM_NAME));
-ENABLE_3D_CANVAS_macosx = $(ENABLE_3D_CANVAS_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
-ENABLE_3D_CANVAS_macosx_1060 = ENABLE_3D_CANVAS;
-ENABLE_3D_CANVAS_macosx_1070 = ENABLE_3D_CANVAS;
+ENABLE_WEBGL = $(ENABLE_WEBGL_$(REAL_PLATFORM_NAME));
+ENABLE_WEBGL_macosx = $(ENABLE_WEBGL_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+ENABLE_WEBGL_macosx_1060 = ENABLE_WEBGL;
+ENABLE_WEBGL_macosx_1070 = ENABLE_WEBGL;
ENABLE_3D_RENDERING = $(ENABLE_3D_RENDERING_$(REAL_PLATFORM_NAME));
ENABLE_3D_RENDERING_iphoneos = ENABLE_3D_RENDERING;
@@ -91,6 +91,8 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
+ENABLE_REGISTER_PROTOCOL_HANDLER = ;
+
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -106,6 +108,8 @@ ENABLE_SVG_FOREIGN_OBJECT = ENABLE_SVG_FOREIGN_OBJECT;
ENABLE_SVG_USE = ENABLE_SVG_USE;
ENABLE_VIDEO = ENABLE_VIDEO;
+ENABLE_MEDIA_STATISTICS = ;
+
ENABLE_WEB_AUDIO = ;
ENABLE_WEB_SOCKETS = $(ENABLE_WEB_SOCKETS_$(REAL_PLATFORM_NAME));
@@ -121,4 +125,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_WEBGL) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_REGISTER_PROTOCOL_HANDLER) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/Source/WebKit2/Configurations/Version.xcconfig b/Source/WebKit2/Configurations/Version.xcconfig
index d9d6bbc..527486d 100644
--- a/Source/WebKit2/Configurations/Version.xcconfig
+++ b/Source/WebKit2/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 16;
+MINOR_VERSION = 20;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/Source/WebKit2/DerivedSources.pro b/Source/WebKit2/DerivedSources.pro
index 4164203..d7d4a7b 100644
--- a/Source/WebKit2/DerivedSources.pro
+++ b/Source/WebKit2/DerivedSources.pro
@@ -41,7 +41,7 @@ SBOX_CHECK = $$(_SBOX_DIR)
PYTHON = python
}
-SRC_ROOT_DIR = $$replace(PWD, /Source/WebKit2, /)
+SRC_ROOT_DIR = $$replace(PWD, /Source/WebKit2, "")
defineTest(addExtraCompiler) {
eval($${1}.CONFIG = target_predeps no_link)
@@ -111,19 +111,19 @@ SCRIPTS = \
$$PWD/Scripts/webkit2/__init__.py \
$$PWD/Scripts/webkit2/messages.py
-message_header_generator.commands = $${PYTHON} $${SRC_ROOT_DIR}Source/WebKit2/Scripts/generate-messages-header.py ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT}
+message_header_generator.commands = $${PYTHON} $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-messages-header.py ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT}
message_header_generator.input = MESSAGE_RECEIVERS
message_header_generator.depends = $$SCRIPTS
message_header_generator.output_function = message_header_generator_output
addExtraCompiler(message_header_generator)
-message_receiver_generator.commands = $${PYTHON} $${SRC_ROOT_DIR}Source/WebKit2/Scripts/generate-message-receiver.py ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT}
+message_receiver_generator.commands = $${PYTHON} $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-message-receiver.py ${QMAKE_FILE_IN} > ${QMAKE_FILE_OUT}
message_receiver_generator.input = MESSAGE_RECEIVERS
message_receiver_generator.depends = $$SCRIPTS
message_receiver_generator.output_function = message_receiver_generator_output
addExtraCompiler(message_receiver_generator)
-fwheader_generator.commands = perl $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-forwarding-headers.pl $${SRC_ROOT_DIR}/Source/WebKit2 ../../include qt
+fwheader_generator.commands = perl $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-forwarding-headers.pl $${SRC_ROOT_DIR}/Source/WebKit2 ../include qt
fwheader_generator.depends = $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-forwarding-headers.pl
generated_files.depends += fwheader_generator
QMAKE_EXTRA_TARGETS += fwheader_generator
diff --git a/Source/WebKit2/GNUmakefile.am b/Source/WebKit2/GNUmakefile.am
index be64c8e..7874c64 100644
--- a/Source/WebKit2/GNUmakefile.am
+++ b/Source/WebKit2/GNUmakefile.am
@@ -4,6 +4,8 @@ noinst_LTLIBRARIES += \
libWebKit2_ladir = $(prefix)/include/webkit2-@WEBKITGTK_API_VERSION@/WebKit2
libWebKit2_la_HEADERS = \
+ $(WebKit2)/Shared/API/c/gtk/WKBaseGtk.h \
+ $(WebKit2)/Shared/API/c/gtk/WKGraphicsContextGtk.h \
$(WebKit2)/Shared/API/c/WKArray.h \
$(WebKit2)/Shared/API/c/WKBase.h \
$(WebKit2)/Shared/API/c/WKCertificateInfo.h \
@@ -15,6 +17,7 @@ libWebKit2_la_HEADERS = \
$(WebKit2)/Shared/API/c/WKEvent.h \
$(WebKit2)/Shared/API/c/WKFindOptions.h \
$(WebKit2)/Shared/API/c/WKGeometry.h \
+ $(WebKit2)/Shared/API/c/WKGraphicsContext.h \
$(WebKit2)/Shared/API/c/WKImage.h \
$(WebKit2)/Shared/API/c/WKMutableArray.h \
$(WebKit2)/Shared/API/c/WKMutableDictionary.h \
@@ -31,7 +34,8 @@ libWebKit2_la_HEADERS = \
$(WebKit2)/Shared/API/c/WKURLRequest.h \
$(WebKit2)/Shared/API/c/WKURLResponse.h \
$(WebKit2)/Shared/API/c/WKUserContentURLPattern.h \
- $(WebKit2)/UIProcess/API/cpp/WKRetainPtr.h \
+ $(WebKit2)/UIProcess/API/C/gtk/WKAPICastGtk.h \
+ $(WebKit2)/UIProcess/API/C/gtk/WKView.h \
$(WebKit2)/UIProcess/API/C/WebKit2.h \
$(WebKit2)/UIProcess/API/C/WKAPICast.h \
$(WebKit2)/UIProcess/API/C/WKAuthenticationChallenge.h \
@@ -58,7 +62,8 @@ libWebKit2_la_HEADERS = \
$(WebKit2)/UIProcess/API/C/WKPreferences.h \
$(WebKit2)/UIProcess/API/C/WKPreferencesPrivate.h \
$(WebKit2)/UIProcess/API/C/WKProtectionSpace.h \
- $(WebKit2)/UIProcess/API/C/WKProtectionSpaceTypes.h
+ $(WebKit2)/UIProcess/API/C/WKProtectionSpaceTypes.h \
+ $(WebKit2)/UIProcess/API/cpp/WKRetainPtr.h
nodist_libWebKit2_la_SOURCES = \
$(webkit2_built_sources)
@@ -84,6 +89,7 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/Platform/CoreIPC/HandleMessage.h \
Source/WebKit2/Platform/CoreIPC/MessageID.h \
Source/WebKit2/Platform/CoreIPC/MessageSender.h \
+ Source/WebKit2/Platform/gtk/ModuleGtk.cpp \
Source/WebKit2/Platform/gtk/RunLoopGtk.cpp \
Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp \
Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp \
@@ -106,6 +112,9 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/PluginProcess/WebProcessConnection.cpp \
Source/WebKit2/PluginProcess/WebProcessConnection.h \
Source/WebKit2/Shared/APIClient.h \
+ Source/WebKit2/Shared/API/c/gtk/WKBaseGtk.h \
+ Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.h \
+ Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.cpp \
Source/WebKit2/Shared/API/c/WKArray.cpp \
Source/WebKit2/Shared/API/c/WKArray.h \
Source/WebKit2/Shared/API/c/WKBase.h \
@@ -123,6 +132,8 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/Shared/API/c/WKEvent.h \
Source/WebKit2/Shared/API/c/WKFindOptions.h \
Source/WebKit2/Shared/API/c/WKGeometry.h \
+ Source/WebKit2/Shared/API/c/WKGraphicsContext.cpp \
+ Source/WebKit2/Shared/API/c/WKGraphicsContext.h \
Source/WebKit2/Shared/API/c/WKImage.cpp \
Source/WebKit2/Shared/API/c/WKImage.h \
Source/WebKit2/Shared/API/c/WKMutableArray.cpp \
@@ -168,6 +179,8 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/Shared/FontSmoothingLevel.h \
Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp \
Source/WebKit2/Shared/gtk/PlatformCertificateInfo.h \
+ Source/WebKit2/Shared/gtk/UpdateChunk.cpp \
+ Source/WebKit2/Shared/gtk/UpdateChunk.h \
Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp \
Source/WebKit2/Shared/ImageOptions.h \
Source/WebKit2/Shared/ImmutableArray.cpp \
@@ -228,6 +241,10 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/Shared/WebEvent.cpp \
Source/WebKit2/Shared/WebEvent.h \
Source/WebKit2/Shared/WebFindOptions.h \
+ Source/WebKit2/Shared/WebGeolocationPosition.cpp \
+ Source/WebKit2/Shared/WebGeolocationPosition.h \
+ Source/WebKit2/Shared/WebGraphicsContext.cpp \
+ Source/WebKit2/Shared/WebGraphicsContext.h \
Source/WebKit2/Shared/WebImage.cpp \
Source/WebKit2/Shared/WebImage.h \
Source/WebKit2/Shared/WebKeyboardEvent.cpp \
@@ -258,7 +275,9 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/Shared/WebURLResponse.h \
Source/WebKit2/Shared/WebUserContentURLPattern.h \
Source/WebKit2/Shared/WebWheelEvent.cpp \
- Source/WebKit2/UIProcess/API/cpp/WKRetainPtr.h \
+ Source/WebKit2/UIProcess/API/C/gtk/WKAPICastGtk.h \
+ Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp \
+ Source/WebKit2/UIProcess/API/C/gtk/WKView.h \
Source/WebKit2/UIProcess/API/C/WebKit2.h \
Source/WebKit2/UIProcess/API/C/WKAPICast.h \
Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp \
@@ -305,6 +324,7 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp \
Source/WebKit2/UIProcess/API/C/WKProtectionSpace.h \
Source/WebKit2/UIProcess/API/C/WKProtectionSpaceTypes.h \
+ Source/WebKit2/UIProcess/API/cpp/WKRetainPtr.h \
Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp \
Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.h \
Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp \
@@ -322,6 +342,11 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/UIProcess/FindIndicator.cpp \
Source/WebKit2/UIProcess/FindIndicator.h \
Source/WebKit2/UIProcess/GenericCallback.h \
+ Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp \
+ Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.h \
+ Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp \
+ Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.h \
+ Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp \
Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp \
Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp \
Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp \
@@ -380,6 +405,10 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.h \
Source/WebKit2/UIProcess/WebFrameProxy.cpp \
Source/WebKit2/UIProcess/WebFrameProxy.h \
+ Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp \
+ Source/WebKit2/UIProcess/WebGeolocationManagerProxy.h \
+ Source/WebKit2/UIProcess/WebGeolocationProvider.cpp \
+ Source/WebKit2/UIProcess/WebGeolocationProvider.h \
Source/WebKit2/UIProcess/WebHistoryClient.cpp \
Source/WebKit2/UIProcess/WebHistoryClient.h \
Source/WebKit2/UIProcess/WebInspectorProxy.cpp \
@@ -416,6 +445,10 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/Downloads/Download.h \
Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp \
Source/WebKit2/WebProcess/Downloads/DownloadManager.h \
+ Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp \
+ Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.h \
+ Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp \
+ Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.h \
Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp \
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp \
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.h \
@@ -432,6 +465,8 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInitialize.h \
+ Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp \
+ Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.h \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h \
Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h \
@@ -470,6 +505,8 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.h \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h \
+ Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp \
+ Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h \
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp \
@@ -504,7 +541,6 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/Plugins/PluginView.cpp \
Source/WebKit2/WebProcess/Plugins/PluginView.h \
Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp \
- Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp \
Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebFrameNetworkingContext.h \
Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp \
Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp \
@@ -520,6 +556,8 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/WebCoreSupport/WebErrors.h \
Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp \
Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h \
+ Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp \
+ Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.h \
Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp \
Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.h \
Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp \
@@ -530,7 +568,6 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.h \
Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp \
Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.h \
- Source/WebKit2/WebProcess/WebKitMain.cpp \
Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp \
Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h \
Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp \
@@ -541,6 +578,7 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/WebPage/EncoderAdapter.h \
Source/WebKit2/WebProcess/WebPage/FindController.cpp \
Source/WebKit2/WebProcess/WebPage/FindController.h \
+ Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp \
Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp \
Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp \
Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h \
@@ -565,8 +603,7 @@ libWebKit2_la_SOURCES = \
Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.h \
Source/WebKit2/WebProcess/WebPage/WebPage.h \
Source/WebKit2/WebProcess/WebProcess.cpp \
- Source/WebKit2/WebProcess/WebProcess.h \
- Source/WebKit2/WebProcess/WebProcessMain.h
+ Source/WebKit2/WebProcess/WebProcess.h
libWebKit2_la_CPPFLAGS = \
-fno-strict-aliasing \
@@ -603,6 +640,7 @@ libWebKit2_la_CPPFLAGS = \
-I$(srcdir)/Source/WebKit2/WebProcess \
-I$(srcdir)/Source/WebKit2/WebProcess/Authentication \
-I$(srcdir)/Source/WebKit2/WebProcess/Downloads \
+ -I$(srcdir)/Source/WebKit2/WebProcess/Geolocation \
-I$(srcdir)/Source/WebKit2/WebProcess/gtk \
-I$(srcdir)/Source/WebKit2/WebProcess/InjectedBundle \
-I$(srcdir)/Source/WebKit2/WebProcess/InjectedBundle/API \
@@ -755,6 +793,10 @@ webkit2_built_sources += \
DerivedSources/WebKit2/WebDatabaseManagerMessages.h \
DerivedSources/WebKit2/WebDatabaseManagerProxyMessageReceiver.cpp \
DerivedSources/WebKit2/WebDatabaseManagerProxyMessages.h \
+ DerivedSources/WebKit2/WebGeolocationManagerMessageReceiver.cpp \
+ DerivedSources/WebKit2/WebGeolocationManagerMessages.h \
+ DerivedSources/WebKit2/WebGeolocationManagerProxyMessageReceiver.cpp \
+ DerivedSources/WebKit2/WebGeolocationManagerProxyMessages.h \
DerivedSources/WebKit2/WebInspectorMessageReceiver.cpp \
DerivedSources/WebKit2/WebInspectorMessages.h \
DerivedSources/WebKit2/WebInspectorProxyMessageReceiver.cpp \
@@ -776,9 +818,6 @@ BUILT_SOURCES += \
forwarding_headers := $(GENSOURCES_WEBKIT2)/include
generate-webkit2-forwarding-headers: $(WebKit2)/Scripts/generate-forwarding-headers.pl $(libWebKit2_la_SOURCES)
- $(AM_V_at)$(mkdir_p) $(forwarding_headers)/JavaScriptCore
- $(AM_V_at)$(mkdir_p) $(forwarding_headers)/WebCore
- $(AM_V_at)$(mkdir_p) $(forwarding_headers)/WebKit2
$(AM_V_GEN)$(PERL) $< $(WebKit2) $(forwarding_headers) gtk
$(AM_V_GEN)$(PERL) $< $(WebKit2) $(forwarding_headers) soup
@@ -787,9 +826,11 @@ vpath %.messages.in = \
$(WebKit2)/Shared/Plugins \
$(WebKit2)/UIProcess \
$(WebKit2)/UIProcess/Downloads \
+ $(WebKit2)/UIProcess/Geolocation \
$(WebKit2)/UIProcess/Plugins \
$(WebKit2)/WebProcess \
$(WebKit2)/WebProcess/Authentication \
+ $(WebKit2)/WebProcess/Geolocation \
$(WebKit2)/WebProcess/Plugins \
$(WebKit2)/WebProcess/WebCoreSupport \
$(WebKit2)/WebProcess/WebPage
diff --git a/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp b/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp
index 336f72f..4664806 100644
--- a/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ArgumentDecoder.h"
#include "DataReference.h"
@@ -46,7 +47,13 @@ ArgumentDecoder::~ArgumentDecoder()
{
ASSERT(m_buffer);
fastFree(m_buffer);
+#if !PLATFORM(QT)
// FIXME: We need to dispose of the mach ports in cases of failure.
+#else
+ Deque<Attachment>::iterator end = m_attachments.end();
+ for (Deque<Attachment>::iterator it = m_attachments.begin(); it != end; ++it)
+ it->dispose();
+#endif
}
void ArgumentDecoder::initialize(const uint8_t* buffer, size_t bufferSize)
@@ -62,13 +69,15 @@ void ArgumentDecoder::initialize(const uint8_t* buffer, size_t bufferSize)
static inline uint8_t* roundUpToAlignment(uint8_t* ptr, unsigned alignment)
{
- return (uint8_t*)(((uintptr_t)ptr + alignment - 1) & ~(uintptr_t)(alignment - 1));
+ ASSERT(alignment);
+ uintptr_t alignmentMask = alignment - 1;
+ return reinterpret_cast<uint8_t*>((reinterpret_cast<uintptr_t>(ptr) + alignmentMask) & ~alignmentMask);
}
bool ArgumentDecoder::alignBufferPosition(unsigned alignment, size_t size)
{
uint8_t* buffer = roundUpToAlignment(m_bufferPos, alignment);
- if (buffer + size > m_bufferEnd) {
+ if (static_cast<size_t>(m_bufferEnd - buffer) < size) {
// We've walked off the end of this buffer.
markInvalid();
return false;
@@ -80,7 +89,7 @@ bool ArgumentDecoder::alignBufferPosition(unsigned alignment, size_t size)
bool ArgumentDecoder::bufferIsLargeEnoughToContain(unsigned alignment, size_t size) const
{
- return roundUpToAlignment(m_bufferPos, alignment) + size <= m_bufferEnd;
+ return static_cast<size_t>(m_bufferEnd - roundUpToAlignment(m_bufferPos, alignment)) >= size;
}
bool ArgumentDecoder::decodeBytes(Vector<uint8_t>& buffer)
diff --git a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp
index 1340c0a..aa71b0f 100644
--- a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ArgumentEncoder.h"
#include <algorithm>
@@ -49,7 +50,12 @@ ArgumentEncoder::~ArgumentEncoder()
{
if (m_buffer)
fastFree(m_buffer);
+#if !PLATFORM(QT)
// FIXME: We need to dispose of the attachments in cases of failure.
+#else
+ for (int i = 0; i < m_attachments.size(); ++i)
+ m_attachments[i].dispose();
+#endif
}
static inline size_t roundUpToAlignment(size_t value, unsigned alignment)
diff --git a/Source/WebKit2/Platform/CoreIPC/Attachment.cpp b/Source/WebKit2/Platform/CoreIPC/Attachment.cpp
index c8d35f4..646b64c 100644
--- a/Source/WebKit2/Platform/CoreIPC/Attachment.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/Attachment.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Attachment.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Platform/CoreIPC/Attachment.h b/Source/WebKit2/Platform/CoreIPC/Attachment.h
index 55a09c9..c057714 100644
--- a/Source/WebKit2/Platform/CoreIPC/Attachment.h
+++ b/Source/WebKit2/Platform/CoreIPC/Attachment.h
@@ -40,12 +40,16 @@ public:
#if PLATFORM(MAC)
MachPortType,
MachOOLMemoryType
+#elif PLATFORM(QT)
+ MappedMemory
#endif
};
#if PLATFORM(MAC)
Attachment(mach_port_name_t port, mach_msg_type_name_t disposition);
Attachment(void* address, mach_msg_size_t size, mach_msg_copy_options_t copyOptions, bool deallocate);
+#elif PLATFORM(QT)
+ Attachment(int fileDescriptor, size_t);
#endif
Type type() const { return m_type; }
@@ -62,6 +66,13 @@ public:
mach_msg_size_t size() const { ASSERT(m_type == MachOOLMemoryType); return m_oolMemory.size; }
mach_msg_copy_options_t copyOptions() const { ASSERT(m_type == MachOOLMemoryType); return m_oolMemory.copyOptions; }
bool deallocate() const { ASSERT(m_type == MachOOLMemoryType); return m_oolMemory.deallocate; }
+#elif PLATFORM(QT)
+ size_t size() const { return m_size; }
+
+ int releaseFileDescriptor() { int temp = m_fileDescriptor; m_fileDescriptor = -1; return temp; }
+ int fileDescriptor() const { return m_fileDescriptor; }
+
+ void dispose();
#endif
void encode(ArgumentEncoder*) const;
@@ -83,6 +94,9 @@ private:
bool deallocate;
} m_oolMemory;
};
+#elif PLATFORM(QT)
+ int m_fileDescriptor;
+ size_t m_size;
#endif
};
diff --git a/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp b/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp
index c975dff..d4d9e7d 100644
--- a/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp
@@ -23,10 +23,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "BinarySemaphore.h"
namespace CoreIPC {
+#if !PLATFORM(WIN)
+
BinarySemaphore::BinarySemaphore()
: m_isSet(false)
{
@@ -60,5 +63,6 @@ bool BinarySemaphore::wait(double absoluteTime)
return true;
}
+#endif // !PLATFORM(WIN)
} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h b/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h
index 8113236..32b5b02 100644
--- a/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h
+++ b/Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h
@@ -42,10 +42,14 @@ public:
bool wait(double absoluteTime);
private:
+#if PLATFORM(WIN)
+ HANDLE m_event;
+#else
bool m_isSet;
Mutex m_mutex;
ThreadCondition m_condition;
+#endif
};
} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/Connection.cpp b/Source/WebKit2/Platform/CoreIPC/Connection.cpp
index da92ce4..5cbd4bc 100644
--- a/Source/WebKit2/Platform/CoreIPC/Connection.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/Connection.cpp
@@ -23,8 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Connection.h"
+#include "BinarySemaphore.h"
#include "CoreIPCMessageKinds.h"
#include "RunLoop.h"
#include "WorkItem.h"
@@ -34,6 +36,156 @@ using namespace std;
namespace CoreIPC {
+class Connection::SyncMessageState : public RefCounted<Connection::SyncMessageState> {
+public:
+ static PassRefPtr<SyncMessageState> getOrCreate(RunLoop*);
+ ~SyncMessageState();
+
+ void beginWaitForSyncReply();
+ void endWaitForSyncReply();
+
+ void wakeUpClientRunLoop()
+ {
+ m_waitForSyncReplySemaphore.signal();
+ }
+
+ bool wait(double absoluteTime)
+ {
+ return m_waitForSyncReplySemaphore.wait(absoluteTime);
+ }
+
+ // Returns true if this message will be handled on a client thread that is currently
+ // waiting for a reply to a synchronous message.
+ bool processIncomingMessage(Connection*, IncomingMessage&);
+
+ void dispatchMessages();
+
+private:
+ explicit SyncMessageState(RunLoop*);
+
+ typedef HashMap<RunLoop*, SyncMessageState*> SyncMessageStateMap;
+ static SyncMessageStateMap& syncMessageStateMap()
+ {
+ DEFINE_STATIC_LOCAL(SyncMessageStateMap, syncMessageStateMap, ());
+ return syncMessageStateMap;
+ }
+
+ static Mutex& syncMessageStateMapMutex()
+ {
+ DEFINE_STATIC_LOCAL(Mutex, syncMessageStateMapMutex, ());
+ return syncMessageStateMapMutex;
+ }
+
+ RunLoop* m_runLoop;
+ BinarySemaphore m_waitForSyncReplySemaphore;
+
+ // Protects m_waitForSyncReplyCount and m_messagesToDispatchWhileWaitingForSyncReply.
+ Mutex m_mutex;
+
+ unsigned m_waitForSyncReplyCount;
+
+ struct ConnectionAndIncomingMessage {
+ Connection* connection;
+ IncomingMessage incomingMessage;
+ };
+ Vector<ConnectionAndIncomingMessage> m_messagesToDispatchWhileWaitingForSyncReply;
+};
+
+PassRefPtr<Connection::SyncMessageState> Connection::SyncMessageState::getOrCreate(RunLoop* runLoop)
+{
+ MutexLocker locker(syncMessageStateMapMutex());
+ pair<SyncMessageStateMap::iterator, bool> result = syncMessageStateMap().add(runLoop, 0);
+
+ if (!result.second) {
+ ASSERT(result.first->second);
+ return result.first->second;
+ }
+
+ RefPtr<SyncMessageState> syncMessageState = adoptRef(new SyncMessageState(runLoop));
+ result.first->second = syncMessageState.get();
+
+ return syncMessageState.release();
+}
+
+Connection::SyncMessageState::SyncMessageState(RunLoop* runLoop)
+ : m_runLoop(runLoop)
+ , m_waitForSyncReplyCount(0)
+{
+}
+
+Connection::SyncMessageState::~SyncMessageState()
+{
+ MutexLocker locker(syncMessageStateMapMutex());
+
+ ASSERT(syncMessageStateMap().contains(m_runLoop));
+ syncMessageStateMap().remove(m_runLoop);
+}
+
+void Connection::SyncMessageState::beginWaitForSyncReply()
+{
+ ASSERT(RunLoop::current() == m_runLoop);
+
+ MutexLocker locker(m_mutex);
+ m_waitForSyncReplyCount++;
+}
+
+void Connection::SyncMessageState::endWaitForSyncReply()
+{
+ ASSERT(RunLoop::current() == m_runLoop);
+
+ MutexLocker locker(m_mutex);
+ ASSERT(m_waitForSyncReplyCount);
+ --m_waitForSyncReplyCount;
+
+ if (m_waitForSyncReplyCount)
+ return;
+
+ // Dispatch any remaining incoming sync messages.
+ for (size_t i = 0; i < m_messagesToDispatchWhileWaitingForSyncReply.size(); ++i) {
+ ConnectionAndIncomingMessage& connectionAndIncomingMessage = m_messagesToDispatchWhileWaitingForSyncReply[i];
+ connectionAndIncomingMessage.connection->enqueueIncomingMessage(connectionAndIncomingMessage.incomingMessage);
+ }
+
+ m_messagesToDispatchWhileWaitingForSyncReply.clear();
+}
+
+bool Connection::SyncMessageState::processIncomingMessage(Connection* connection, IncomingMessage& incomingMessage)
+{
+ MessageID messageID = incomingMessage.messageID();
+ if (!messageID.isSync() && !messageID.shouldDispatchMessageWhenWaitingForSyncReply())
+ return false;
+
+ MutexLocker locker(m_mutex);
+ if (!m_waitForSyncReplyCount)
+ return false;
+
+ ConnectionAndIncomingMessage connectionAndIncomingMessage;
+ connectionAndIncomingMessage.connection = connection;
+ connectionAndIncomingMessage.incomingMessage = incomingMessage;
+
+ m_messagesToDispatchWhileWaitingForSyncReply.append(connectionAndIncomingMessage);
+ wakeUpClientRunLoop();
+
+ return true;
+}
+
+void Connection::SyncMessageState::dispatchMessages()
+{
+ ASSERT(m_runLoop == RunLoop::current());
+
+ Vector<ConnectionAndIncomingMessage> messagesToDispatchWhileWaitingForSyncReply;
+
+ {
+ MutexLocker locker(m_mutex);
+ m_messagesToDispatchWhileWaitingForSyncReply.swap(messagesToDispatchWhileWaitingForSyncReply);
+ }
+
+ for (size_t i = 0; i < messagesToDispatchWhileWaitingForSyncReply.size(); ++i) {
+ ConnectionAndIncomingMessage& connectionAndIncomingMessage = messagesToDispatchWhileWaitingForSyncReply[i];
+ connectionAndIncomingMessage.connection->dispatchMessage(connectionAndIncomingMessage.incomingMessage);
+ }
+}
+
PassRefPtr<Connection> Connection::createServerConnection(Identifier identifier, Client* client, RunLoop* clientRunLoop)
{
return adoptRef(new Connection(identifier, true, client, clientRunLoop));
@@ -48,11 +200,13 @@ Connection::Connection(Identifier identifier, bool isServer, Client* client, Run
: m_client(client)
, m_isServer(isServer)
, m_syncRequestID(0)
+ , m_didCloseOnConnectionWorkQueueCallback(0)
, m_isConnected(false)
, m_connectionQueue("com.apple.CoreIPC.ReceiveQueue")
, m_clientRunLoop(clientRunLoop)
, m_inDispatchMessageCount(0)
, m_didReceiveInvalidMessage(false)
+ , m_syncMessageState(SyncMessageState::getOrCreate(clientRunLoop))
, m_shouldWaitForSyncReplies(true)
{
ASSERT(m_client);
@@ -67,6 +221,13 @@ Connection::~Connection()
m_connectionQueue.invalidate();
}
+void Connection::setDidCloseOnConnectionWorkQueueCallback(DidCloseOnConnectionWorkQueueCallback callback)
+{
+ ASSERT(!m_isConnected);
+
+ m_didCloseOnConnectionWorkQueueCallback = callback;
+}
+
void Connection::invalidate()
{
if (!isValid()) {
@@ -99,11 +260,14 @@ PassOwnPtr<ArgumentEncoder> Connection::createSyncMessageArgumentEncoder(uint64_
return argumentEncoder.release();
}
-bool Connection::sendMessage(MessageID messageID, PassOwnPtr<ArgumentEncoder> arguments)
+bool Connection::sendMessage(MessageID messageID, PassOwnPtr<ArgumentEncoder> arguments, unsigned messageSendFlags)
{
if (!isValid())
return false;
+ if (messageSendFlags & DispatchMessageEvenWhenWaitingForSyncReply)
+ messageID = messageID.messageIDWithAddedFlags(MessageID::DispatchMessageWhenWaitingForSyncReply);
+
MutexLocker locker(m_outgoingMessagesLock);
m_outgoingMessages.append(OutgoingMessage(messageID, arguments));
@@ -179,21 +343,27 @@ PassOwnPtr<ArgumentDecoder> Connection::sendSyncMessage(MessageID messageID, uin
// We only allow sending sync messages from the client run loop.
ASSERT(RunLoop::current() == m_clientRunLoop);
- if (!isValid())
+ if (!isValid()) {
+ m_client->didFailToSendSyncMessage(this);
return 0;
+ }
// Push the pending sync reply information on our stack.
{
MutexLocker locker(m_syncReplyStateMutex);
- if (!m_shouldWaitForSyncReplies)
+ if (!m_shouldWaitForSyncReplies) {
+ m_client->didFailToSendSyncMessage(this);
return 0;
+ }
m_pendingSyncReplies.append(PendingSyncReply(syncRequestID));
}
// First send the message.
sendMessage(messageID, encoder);
-
+
+ m_syncMessageState->beginWaitForSyncReply();
+
// Then wait for a reply. Waiting for a reply could involve dispatching incoming sync messages, so
// keep an extra reference to the connection here in case it's invalidated.
RefPtr<Connection> protect(this);
@@ -204,22 +374,13 @@ PassOwnPtr<ArgumentDecoder> Connection::sendSyncMessage(MessageID messageID, uin
MutexLocker locker(m_syncReplyStateMutex);
ASSERT(m_pendingSyncReplies.last().syncRequestID == syncRequestID);
m_pendingSyncReplies.removeLast();
-
- if (m_pendingSyncReplies.isEmpty()) {
- // This was the bottom-most sendSyncMessage call in the stack. If we have any pending incoming
- // sync messages, they need to be dispatched.
- if (!m_syncMessagesReceivedWhileWaitingForSyncReply.isEmpty()) {
- // Add the messages.
- MutexLocker locker(m_incomingMessagesLock);
- m_incomingMessages.append(m_syncMessagesReceivedWhileWaitingForSyncReply);
- m_syncMessagesReceivedWhileWaitingForSyncReply.clear();
-
- // Schedule for the messages to be sent.
- m_clientRunLoop->scheduleWork(WorkItem::create(this, &Connection::dispatchMessages));
- }
- }
}
-
+
+ m_syncMessageState->endWaitForSyncReply();
+
+ if (!reply)
+ m_client->didFailToSendSyncMessage(this);
+
return reply.release();
}
@@ -229,27 +390,12 @@ PassOwnPtr<ArgumentDecoder> Connection::waitForSyncReply(uint64_t syncRequestID,
bool timedOut = false;
while (!timedOut) {
+ // First, check if we have any messages that we need to process.
+ m_syncMessageState->dispatchMessages();
+
{
MutexLocker locker(m_syncReplyStateMutex);
- // First, check if we have any incoming sync messages that we need to process.
- Vector<IncomingMessage> syncMessagesReceivedWhileWaitingForSyncReply;
- m_syncMessagesReceivedWhileWaitingForSyncReply.swap(syncMessagesReceivedWhileWaitingForSyncReply);
-
- if (!syncMessagesReceivedWhileWaitingForSyncReply.isEmpty()) {
- // Make sure to unlock the mutex here because we're calling out to client code which could in turn send
- // another sync message and we don't want that to deadlock.
- m_syncReplyStateMutex.unlock();
-
- for (size_t i = 0; i < syncMessagesReceivedWhileWaitingForSyncReply.size(); ++i) {
- IncomingMessage& message = syncMessagesReceivedWhileWaitingForSyncReply[i];
- OwnPtr<ArgumentDecoder> arguments = message.releaseArguments();
-
- dispatchSyncMessage(message.messageID(), arguments.get());
- }
- m_syncReplyStateMutex.lock();
- }
-
// Second, check if there is a sync reply at the top of the stack.
ASSERT(!m_pendingSyncReplies.isEmpty());
@@ -262,7 +408,7 @@ PassOwnPtr<ArgumentDecoder> Connection::waitForSyncReply(uint64_t syncRequestID,
}
// We didn't find a sync reply yet, keep waiting.
- timedOut = !m_waitForSyncReplySemaphore.wait(absoluteTime);
+ timedOut = !m_syncMessageState->wait(absoluteTime);
}
// We timed out.
@@ -281,42 +427,33 @@ void Connection::processIncomingMessage(MessageID messageID, PassOwnPtr<Argument
pendingSyncReply.replyDecoder = arguments.leakPtr();
pendingSyncReply.didReceiveReply = true;
-
- m_waitForSyncReplySemaphore.signal();
+ m_syncMessageState->wakeUpClientRunLoop();
return;
}
- // Check if this is a sync message. If it is, and we're waiting for a sync reply this message
- // needs to be dispatched. If we don't we'll end up with a deadlock where both sync message senders are
- // stuck waiting for a reply.
- if (messageID.isSync()) {
- MutexLocker locker(m_syncReplyStateMutex);
- if (!m_pendingSyncReplies.isEmpty()) {
- m_syncMessagesReceivedWhileWaitingForSyncReply.append(IncomingMessage(messageID, arguments));
+ IncomingMessage incomingMessage(messageID, arguments);
+
+ // Check if this is a sync message or if it's a message that should be dispatched even when waiting for
+ // a sync reply. If it is, and we're waiting for a sync reply this message needs to be dispatched.
+ // If we don't we'll end up with a deadlock where both sync message senders are stuck waiting for a reply.
+ if (m_syncMessageState->processIncomingMessage(this, incomingMessage))
+ return;
- // The message has been added, now wake up the client thread.
- m_waitForSyncReplySemaphore.signal();
- return;
- }
- }
-
// Check if we're waiting for this message.
{
MutexLocker locker(m_waitForMessageMutex);
- HashMap<std::pair<unsigned, uint64_t>, ArgumentDecoder*>::iterator it = m_waitForMessageMap.find(std::make_pair(messageID.toInt(), arguments->destinationID()));
+ HashMap<std::pair<unsigned, uint64_t>, ArgumentDecoder*>::iterator it = m_waitForMessageMap.find(std::make_pair(messageID.toInt(), incomingMessage.destinationID()));
if (it != m_waitForMessageMap.end()) {
- it->second = arguments.leakPtr();
+ it->second = incomingMessage.releaseArguments().leakPtr();
+ ASSERT(it->second);
m_waitForMessageCondition.signal();
return;
}
}
- MutexLocker locker(m_incomingMessagesLock);
- m_incomingMessages.append(IncomingMessage(messageID, arguments));
-
- m_clientRunLoop->scheduleWork(WorkItem::create(this, &Connection::dispatchMessages));
+ enqueueIncomingMessage(incomingMessage);
}
void Connection::connectionDidClose()
@@ -331,10 +468,11 @@ void Connection::connectionDidClose()
m_shouldWaitForSyncReplies = false;
if (!m_pendingSyncReplies.isEmpty())
- m_waitForSyncReplySemaphore.signal();
+ m_syncMessageState->wakeUpClientRunLoop();
}
- m_client->didCloseOnConnectionWorkQueue(&m_connectionQueue, this);
+ if (m_didCloseOnConnectionWorkQueueCallback)
+ m_didCloseOnConnectionWorkQueueCallback(m_connectionQueue, this);
m_clientRunLoop->scheduleWork(WorkItem::create(this, &Connection::dispatchConnectionDidClose));
}
@@ -412,42 +550,53 @@ void Connection::dispatchSyncMessage(MessageID messageID, ArgumentDecoder* argum
sendSyncReply(replyEncoder);
}
-void Connection::dispatchMessages()
+void Connection::enqueueIncomingMessage(IncomingMessage& incomingMessage)
{
- Vector<IncomingMessage> incomingMessages;
-
- {
- MutexLocker locker(m_incomingMessagesLock);
- m_incomingMessages.swap(incomingMessages);
- }
+ MutexLocker locker(m_incomingMessagesLock);
+ m_incomingMessages.append(incomingMessage);
- // Dispatch messages.
- for (size_t i = 0; i < incomingMessages.size(); ++i) {
- // If someone calls invalidate while we're invalidating messages, we should stop.
- if (!m_client)
- return;
-
- IncomingMessage& message = incomingMessages[i];
- OwnPtr<ArgumentDecoder> arguments = message.releaseArguments();
+ m_clientRunLoop->scheduleWork(WorkItem::create(this, &Connection::dispatchMessages));
+}
+
+void Connection::dispatchMessage(IncomingMessage& message)
+{
+ OwnPtr<ArgumentDecoder> arguments = message.releaseArguments();
+
+ // If there's no client, return. We do this after calling releaseArguments so that
+ // the ArgumentDecoder message will be freed.
+ if (!m_client)
+ return;
- m_inDispatchMessageCount++;
+ m_inDispatchMessageCount++;
- bool oldDidReceiveInvalidMessage = m_didReceiveInvalidMessage;
- m_didReceiveInvalidMessage = false;
+ bool oldDidReceiveInvalidMessage = m_didReceiveInvalidMessage;
+ m_didReceiveInvalidMessage = false;
- if (message.messageID().isSync())
- dispatchSyncMessage(message.messageID(), arguments.get());
- else
- m_client->didReceiveMessage(this, message.messageID(), arguments.get());
+ if (message.messageID().isSync())
+ dispatchSyncMessage(message.messageID(), arguments.get());
+ else
+ m_client->didReceiveMessage(this, message.messageID(), arguments.get());
- m_didReceiveInvalidMessage |= arguments->isInvalid();
- m_inDispatchMessageCount--;
+ m_didReceiveInvalidMessage |= arguments->isInvalid();
+ m_inDispatchMessageCount--;
- if (m_didReceiveInvalidMessage)
- m_client->didReceiveInvalidMessage(this, message.messageID());
+ if (m_didReceiveInvalidMessage && m_client)
+ m_client->didReceiveInvalidMessage(this, message.messageID());
+
+ m_didReceiveInvalidMessage = oldDidReceiveInvalidMessage;
+}
- m_didReceiveInvalidMessage = oldDidReceiveInvalidMessage;
+void Connection::dispatchMessages()
+{
+ Vector<IncomingMessage> incomingMessages;
+
+ {
+ MutexLocker locker(m_incomingMessagesLock);
+ m_incomingMessages.swap(incomingMessages);
}
+
+ for (size_t i = 0; i < incomingMessages.size(); ++i)
+ dispatchMessage(incomingMessages[i]);
}
} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/Connection.h b/Source/WebKit2/Platform/CoreIPC/Connection.h
index 1b009cf..eaa2ab9 100644
--- a/Source/WebKit2/Platform/CoreIPC/Connection.h
+++ b/Source/WebKit2/Platform/CoreIPC/Connection.h
@@ -31,7 +31,6 @@
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
#include "Arguments.h"
-#include "BinarySemaphore.h"
#include "MessageID.h"
#include "WorkQueue.h"
#include <wtf/HashMap.h>
@@ -44,9 +43,8 @@
#elif PLATFORM(WIN)
#include <string>
#elif PLATFORM(QT)
-#include <QString>
-class QLocalServer;
-class QLocalSocket;
+class QSocketNotifier;
+#include "PlatformProcessIdentifier.h"
#endif
class RunLoop;
@@ -60,6 +58,12 @@ enum SyncReplyMode {
ManualReply
};
+enum MessageSendFlags {
+ // Whether this message should be dispatched when waiting for a sync reply.
+ // This is the default for synchronous messages.
+ DispatchMessageEvenWhenWaitingForSyncReply = 1 << 0,
+};
+
#define MESSAGE_CHECK_BASE(assertion, connection) do \
if (!(assertion)) { \
ASSERT(assertion); \
@@ -86,10 +90,7 @@ public:
public:
virtual void didClose(Connection*) = 0;
virtual void didReceiveInvalidMessage(Connection*, MessageID) = 0;
-
- // Called on the connection work queue when the connection is closed, before
- // didCall is called on the client thread.
- virtual void didCloseOnConnectionWorkQueue(WorkQueue*, Connection*) { }
+ virtual void didFailToSendSyncMessage(Connection*) { }
};
#if PLATFORM(MAC)
@@ -98,7 +99,7 @@ public:
typedef HANDLE Identifier;
static bool createServerAndClientIdentifiers(Identifier& serverIdentifier, Identifier& clientIdentifier);
#elif PLATFORM(QT)
- typedef const QString Identifier;
+ typedef int Identifier;
#elif PLATFORM(GTK)
typedef int Identifier;
#endif
@@ -109,27 +110,37 @@ public:
#if PLATFORM(MAC)
void setShouldCloseConnectionOnMachExceptions();
+#elif PLATFORM(QT)
+ void setShouldCloseConnectionOnProcessTermination(WebKit::PlatformProcessIdentifier);
#endif
+ // The set callback will be called on the connection work queue when the connection is closed,
+ // before didCall is called on the client thread. Must be called before the connection is opened.
+ // In the future we might want a more generic way to handle sync or async messages directly
+ // on the work queue, for example if we want to handle them on some other thread we could avoid
+ // handling the message on the client thread first.
+ typedef void (*DidCloseOnConnectionWorkQueueCallback)(WorkQueue&, Connection*);
+ void setDidCloseOnConnectionWorkQueueCallback(DidCloseOnConnectionWorkQueueCallback callback);
+
bool open();
void invalidate();
void markCurrentlyDispatchedMessageAsInvalid();
static const unsigned long long NoTimeout = 10000000000ULL;
- template<typename T> bool send(const T& message, uint64_t destinationID);
+ template<typename T> bool send(const T& message, uint64_t destinationID, unsigned messageSendFlags = 0);
template<typename T> bool sendSync(const T& message, const typename T::Reply& reply, uint64_t destinationID, double timeout = NoTimeout);
template<typename T> bool waitForAndDispatchImmediately(uint64_t destinationID, double timeout);
PassOwnPtr<ArgumentEncoder> createSyncMessageArgumentEncoder(uint64_t destinationID, uint64_t& syncRequestID);
- bool sendMessage(MessageID, PassOwnPtr<ArgumentEncoder>);
+ bool sendMessage(MessageID, PassOwnPtr<ArgumentEncoder>, unsigned messageSendFlags = 0);
bool sendSyncReply(PassOwnPtr<ArgumentEncoder>);
- // FIXME: These variants of senc, sendSync and waitFor are all deprecated.
+ // FIXME: These variants of send, sendSync and waitFor are all deprecated.
// All clients should move to the overloads that take a message type.
- template<typename E, typename T> bool send(E messageID, uint64_t destinationID, const T& arguments);
- template<typename E, typename T, typename U> bool sendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout = NoTimeout);
- template<typename E> PassOwnPtr<ArgumentDecoder> waitFor(E messageID, uint64_t destinationID, double timeout);
+ template<typename E, typename T> bool deprecatedSend(E messageID, uint64_t destinationID, const T& arguments);
+ template<typename E, typename T, typename U> bool deprecatedSendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout = NoTimeout);
+ template<typename E> PassOwnPtr<ArgumentDecoder> deprecatedWaitFor(E messageID, uint64_t destinationID, double timeout);
private:
template<typename T> class Message {
@@ -146,6 +157,8 @@ private:
}
MessageID messageID() const { return m_messageID; }
+ uint64_t destinationID() const { return m_arguments->destinationID(); }
+
T* arguments() const { return m_arguments; }
PassOwnPtr<T> releaseArguments()
@@ -184,15 +197,23 @@ private:
bool sendOutgoingMessage(MessageID, PassOwnPtr<ArgumentEncoder>);
void connectionDidClose();
+ typedef Message<ArgumentDecoder> IncomingMessage;
+
// Called on the listener thread.
void dispatchConnectionDidClose();
+ void dispatchMessage(IncomingMessage&);
void dispatchMessages();
void dispatchSyncMessage(MessageID, ArgumentDecoder*);
-
+
+ // Can be called on any thread.
+ void enqueueIncomingMessage(IncomingMessage&);
+
Client* m_client;
bool m_isServer;
uint64_t m_syncRequestID;
+ DidCloseOnConnectionWorkQueueCallback m_didCloseOnConnectionWorkQueueCallback;
+
bool m_isConnected;
WorkQueue m_connectionQueue;
RunLoop* m_clientRunLoop;
@@ -201,8 +222,6 @@ private:
bool m_didReceiveInvalidMessage;
// Incoming messages.
- typedef Message<ArgumentDecoder> IncomingMessage;
-
Mutex m_incomingMessagesLock;
Vector<IncomingMessage> m_incomingMessages;
@@ -249,12 +268,13 @@ private:
}
};
- BinarySemaphore m_waitForSyncReplySemaphore;
+ class SyncMessageState;
+ friend class SyncMessageState;
+ RefPtr<SyncMessageState> m_syncMessageState;
Mutex m_syncReplyStateMutex;
bool m_shouldWaitForSyncReplies;
Vector<PendingSyncReply> m_pendingSyncReplies;
- Vector<IncomingMessage> m_syncMessagesReceivedWhileWaitingForSyncReply;
#if PLATFORM(MAC)
// Called on the connection queue.
@@ -285,8 +305,8 @@ private:
Vector<uint8_t> m_readBuffer;
size_t m_currentMessageSize;
- QLocalSocket* m_socket;
- QString m_serverName;
+ QSocketNotifier* m_socketNotifier;
+ int m_socketDescriptor;
#elif PLATFORM(GTK)
void readEventHandler();
void processCompletedMessage();
@@ -299,12 +319,12 @@ private:
#endif
};
-template<typename T> bool Connection::send(const T& message, uint64_t destinationID)
+template<typename T> bool Connection::send(const T& message, uint64_t destinationID, unsigned messageSendFlags)
{
OwnPtr<ArgumentEncoder> argumentEncoder = ArgumentEncoder::create(destinationID);
argumentEncoder->encode(message);
- return sendMessage(MessageID(T::messageID), argumentEncoder.release());
+ return sendMessage(MessageID(T::messageID), argumentEncoder.release(), messageSendFlags);
}
template<typename T> bool Connection::sendSync(const T& message, const typename T::Reply& reply, uint64_t destinationID, double timeout)
@@ -338,7 +358,7 @@ template<typename T> bool Connection::waitForAndDispatchImmediately(uint64_t des
// These three member functions are all deprecated.
template<typename E, typename T, typename U>
-inline bool Connection::sendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout)
+inline bool Connection::deprecatedSendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout)
{
uint64_t syncRequestID = 0;
OwnPtr<ArgumentEncoder> argumentEncoder = createSyncMessageArgumentEncoder(destinationID, syncRequestID);
@@ -356,7 +376,7 @@ inline bool Connection::sendSync(E messageID, uint64_t destinationID, const T& a
}
template<typename E, typename T>
-bool Connection::send(E messageID, uint64_t destinationID, const T& arguments)
+bool Connection::deprecatedSend(E messageID, uint64_t destinationID, const T& arguments)
{
OwnPtr<ArgumentEncoder> argumentEncoder = ArgumentEncoder::create(destinationID);
argumentEncoder->encode(arguments);
@@ -364,7 +384,7 @@ bool Connection::send(E messageID, uint64_t destinationID, const T& arguments)
return sendMessage(MessageID(messageID), argumentEncoder.release());
}
-template<typename E> inline PassOwnPtr<ArgumentDecoder> Connection::waitFor(E messageID, uint64_t destinationID, double timeout)
+template<typename E> inline PassOwnPtr<ArgumentDecoder> Connection::deprecatedWaitFor(E messageID, uint64_t destinationID, double timeout)
{
return waitForMessage(MessageID(messageID), destinationID, timeout);
}
diff --git a/Source/WebKit2/Platform/CoreIPC/DataReference.cpp b/Source/WebKit2/Platform/CoreIPC/DataReference.cpp
index 308fd6e..f186a35 100644
--- a/Source/WebKit2/Platform/CoreIPC/DataReference.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/DataReference.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DataReference.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Platform/CoreIPC/HandleMessage.h b/Source/WebKit2/Platform/CoreIPC/HandleMessage.h
index 534e825..abbe089 100644
--- a/Source/WebKit2/Platform/CoreIPC/HandleMessage.h
+++ b/Source/WebKit2/Platform/CoreIPC/HandleMessage.h
@@ -159,6 +159,11 @@ void callMemberFunction(const Arguments5<P1, P2, P3, P4, P5>& args, Arguments2<R
(object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, args.argument5, replyArgs.argument1, replyArgs.argument2);
}
+template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename R1, typename R2>
+void callMemberFunction(const Arguments6<P1, P2, P3, P4, P5, P6>& args, Arguments2<R1, R2>& replyArgs, C* object, MF function)
+{
+ (object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, args.argument5, args.argument6, replyArgs.argument1, replyArgs.argument2);
+}
template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename R1, typename R2, typename R3>
void callMemberFunction(const Arguments4<P1, P2, P3, P4>& args, Arguments3<R1, R2, R3>& replyArgs, C* object, MF function)
@@ -210,6 +215,25 @@ void callMemberFunction(const Arguments6<P1, P2, P3, P4, P5, P6>& args, Argument
(object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, args.argument5, args.argument6, argumentDecoder);
}
+template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
+void callMemberFunction(const Arguments7<P1, P2, P3, P4, P5, P6, P7>& args, ArgumentDecoder* argumentDecoder, C* object, MF function)
+{
+ (object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, args.argument5, args.argument6, args.argument7, argumentDecoder);
+}
+
+// Variadic dispatch functions with non-variadic reply arguments.
+
+template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename R1, typename R2, typename R3>
+void callMemberFunction(const Arguments4<P1, P2, P3, P4>& args, ArgumentDecoder* argumentDecoder, Arguments3<R1, R2, R3>& replyArgs, C* object, MF function)
+{
+ (object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, argumentDecoder, replyArgs.argument1, replyArgs.argument2, replyArgs.argument3);
+}
+
+template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename R1, typename R2>
+void callMemberFunction(const Arguments6<P1, P2, P3, P4, P5, P6>& args, ArgumentDecoder* argumentDecoder, Arguments2<R1, R2>& replyArgs, C* object, MF function)
+{
+ (object->*function)(args.argument1, args.argument2, args.argument3, args.argument4, args.argument5, args.argument6, argumentDecoder, replyArgs.argument1, replyArgs.argument2);
+}
// Main dispatch functions
@@ -243,6 +267,19 @@ void handleMessageVariadic(ArgumentDecoder* argumentDecoder, C* object, MF funct
callMemberFunction(arguments, argumentDecoder, object, function);
}
+
+template<typename T, typename C, typename MF>
+void handleMessageVariadic(ArgumentDecoder* argumentDecoder, ArgumentEncoder* replyEncoder, C* object, MF function)
+{
+ typename T::DecodeType::ValueType arguments;
+ if (!argumentDecoder->decode(arguments))
+ return;
+
+ typename T::Reply::ValueType replyArguments;
+ callMemberFunction(arguments, argumentDecoder, replyArguments, object, function);
+ replyEncoder->encode(replyArguments);
+}
+
} // namespace CoreIPC
#endif // HandleMessage_h
diff --git a/Source/WebKit2/Platform/CoreIPC/MessageID.h b/Source/WebKit2/Platform/CoreIPC/MessageID.h
index 724302c..bd8180a 100644
--- a/Source/WebKit2/Platform/CoreIPC/MessageID.h
+++ b/Source/WebKit2/Platform/CoreIPC/MessageID.h
@@ -95,6 +95,7 @@ class MessageID {
public:
enum Flags {
SyncMessage = 1 << 0,
+ DispatchMessageWhenWaitingForSyncReply = 1 << 1,
};
MessageID()
@@ -108,6 +109,14 @@ public:
{
}
+ MessageID messageIDWithAddedFlags(unsigned char flags)
+ {
+ MessageID messageID;
+
+ messageID.m_messageID = stripMostSignificantBit(m_messageID | (flags << 24));
+ return messageID;
+ }
+
template <typename EnumType>
EnumType get() const
{
@@ -137,6 +146,7 @@ public:
unsigned toInt() const { return m_messageID; }
+ bool shouldDispatchMessageWhenWaitingForSyncReply() const { return getFlags() & DispatchMessageWhenWaitingForSyncReply; }
bool isSync() const { return getFlags() & SyncMessage; }
private:
diff --git a/Source/WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp b/Source/WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp
index d561110..4b140ee 100644
--- a/Source/WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Connection.h"
#include "ArgumentEncoder.h"
@@ -98,7 +99,6 @@ void Connection::platformInitialize(Identifier identifier)
m_pendingBytes = 0;
m_readBuffer.resize(initialMessageBufferSize);
m_socket = identifier;
- m_isConnected = true;
}
void Connection::platformInvalidate()
@@ -171,6 +171,8 @@ bool Connection::open()
int flags = fcntl(m_socket, F_GETFL, 0);
fcntl(m_socket, F_SETFL, flags | O_NONBLOCK);
+ m_isConnected = true;
+
// Register callbacks for connection termination and input data on the WorkQueue.
m_connectionQueue.registerEventSourceHandler(m_socket, (G_IO_HUP | G_IO_ERR), WorkItem::create(this, &Connection::connectionDidClose));
m_connectionQueue.registerEventSourceHandler(m_socket, G_IO_IN, WorkItem::create(this, &Connection::readEventHandler));
diff --git a/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp b/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp
index 5e7bbbc..5c4b5d1 100644
--- a/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Connection.h"
#include "CoreIPCMessageKinds.h"
@@ -93,7 +94,7 @@ bool Connection::open()
m_isConnected = true;
// Send the initialize message, which contains a send right for the server to use.
- send(CoreIPCMessage::InitializeConnection, 0, MachPort(m_receivePort, MACH_MSG_TYPE_MAKE_SEND));
+ deprecatedSend(CoreIPCMessage::InitializeConnection, 0, MachPort(m_receivePort, MACH_MSG_TYPE_MAKE_SEND));
// Set the dead name handler for our send port.
initializeDeadNameSource();
@@ -109,7 +110,7 @@ bool Connection::open()
if (m_exceptionPort) {
m_connectionQueue.registerMachPortEventHandler(m_exceptionPort, WorkQueue::MachPortDataAvailable, WorkItem::create(this, &Connection::exceptionSourceEventHandler));
- send(CoreIPCMessage::SetExceptionPort, 0, MachPort(m_exceptionPort, MACH_MSG_TYPE_MAKE_SEND));
+ deprecatedSend(CoreIPCMessage::SetExceptionPort, 0, MachPort(m_exceptionPort, MACH_MSG_TYPE_MAKE_SEND));
}
return true;
diff --git a/Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp b/Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp
new file mode 100644
index 0000000..4c0ebc0
--- /dev/null
+++ b/Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "Attachment.h"
+
+#if PLATFORM(QT)
+#include <unistd.h>
+#include <errno.h>
+#endif
+
+
+namespace CoreIPC {
+
+Attachment::Attachment(int fileDescriptor, size_t size)
+ : m_type(MappedMemory)
+ , m_fileDescriptor(fileDescriptor)
+ , m_size(size)
+{
+ ASSERT(m_fileDescriptor);
+ ASSERT(m_size);
+}
+
+void Attachment::dispose()
+{
+ if (m_fileDescriptor != -1)
+ while (close(m_fileDescriptor) == -1 && (errno == EINTR)) { }
+}
+
+} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp b/Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp
index c0736b8..225d7dc 100644
--- a/Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp
@@ -24,119 +24,346 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Connection.h"
#include "ArgumentEncoder.h"
#include "ProcessLauncher.h"
#include "WorkItem.h"
+#include "SharedMemory.h"
+#include "WebProcessProxy.h"
#include <QApplication>
-#include <QLocalServer>
-#include <QLocalSocket>
+#include <QSocketNotifier>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <wtf/Assertions.h>
using namespace std;
namespace CoreIPC {
-// This is what other ports use...
static const size_t messageMaxSize = 4096;
+static const size_t attachmentMaxAmount = 255;
+
+enum {
+ MessageBodyIsOOL = 1 << 31
+};
+
+class MessageInfo {
+public:
+ MessageInfo() { }
+
+ MessageInfo(MessageID messageID, size_t bodySize, size_t initialAttachmentCount)
+ : m_messageID(messageID.toInt())
+ , m_bodySize(bodySize)
+ , m_attachmentCount(initialAttachmentCount)
+ {
+ ASSERT(!(m_messageID & MessageBodyIsOOL));
+ }
+
+ void setMessageBodyOOL()
+ {
+ ASSERT(!isMessageBodyOOL());
+
+ m_messageID |= MessageBodyIsOOL;
+ m_attachmentCount++;
+ }
+
+ bool isMessageBodyOOL() const { return m_messageID & MessageBodyIsOOL; }
+
+ size_t bodySize() const { return m_bodySize; }
+
+ MessageID messageID() const { return MessageID::fromInt(m_messageID & ~MessageBodyIsOOL); }
+
+ size_t attachmentCount() const { return m_attachmentCount; }
+
+private:
+ uint32_t m_messageID;
+ size_t m_bodySize;
+ size_t m_attachmentCount;
+};
void Connection::platformInitialize(Identifier identifier)
{
- m_serverName = identifier;
- m_socket = 0;
+ m_socketDescriptor = identifier;
+ m_socketNotifier = 0;
m_readBuffer.resize(messageMaxSize);
m_currentMessageSize = 0;
}
void Connection::platformInvalidate()
{
- m_socket->disconnect();
- if (!m_isServer)
- m_socket->deleteLater();
- m_socket = 0;
+ if (m_socketDescriptor != -1)
+ while (close(m_socketDescriptor) == -1 && errno == EINTR) { }
+
+ if (!m_isConnected)
+ return;
+
+ delete m_socketNotifier;
+ m_socketNotifier = 0;
+ m_socketDescriptor = -1;
+ m_isConnected = false;
}
+class SocketNotifierResourceGuard {
+public:
+ SocketNotifierResourceGuard(QSocketNotifier* socketNotifier)
+ : m_socketNotifier(socketNotifier)
+ {
+ m_socketNotifier->setEnabled(false);
+ }
+
+ ~SocketNotifierResourceGuard()
+ {
+ m_socketNotifier->setEnabled(true);
+ }
+
+private:
+ QSocketNotifier* const m_socketNotifier;
+};
+
+template<class T, class iterator>
+class AttachmentResourceGuard {
+public:
+ AttachmentResourceGuard(T& attachments)
+ : m_attachments(attachments)
+ {
+ }
+ ~AttachmentResourceGuard()
+ {
+ iterator end = m_attachments.end();
+ for (iterator i = m_attachments.begin(); i != end; ++i)
+ i->dispose();
+ }
+private:
+ T& m_attachments;
+};
+
void Connection::readyReadHandler()
{
- while (m_socket->bytesAvailable()) {
- if (!m_currentMessageSize) {
- size_t numberOfBytesRead = m_socket->read(reinterpret_cast<char*>(m_readBuffer.data()), sizeof(size_t));
- ASSERT_UNUSED(numberOfBytesRead, numberOfBytesRead);
- m_currentMessageSize = *reinterpret_cast<size_t*>(m_readBuffer.data());
- }
+ Deque<Attachment> attachments;
+ SocketNotifierResourceGuard socketNotifierEnabler(m_socketNotifier);
+ AttachmentResourceGuard<Deque<Attachment>, Deque<Attachment>::iterator> attachementDisposer(attachments);
+
+ char attachmentDescriptorBuffer[CMSG_SPACE(sizeof(int) * (attachmentMaxAmount))];
+ struct msghdr message;
+ memset(&message, 0, sizeof(message));
+
+ struct iovec iov[1];
+ memset(&iov, 0, sizeof(iov));
- if (m_socket->bytesAvailable() < m_currentMessageSize)
+ message.msg_control = attachmentDescriptorBuffer;
+ message.msg_controllen = CMSG_SPACE(sizeof(int) * (attachmentMaxAmount));
+
+ iov[0].iov_base = m_readBuffer.data();
+ iov[0].iov_len = m_readBuffer.size();
+
+ message.msg_iov = iov;
+ message.msg_iovlen = 1;
+
+
+ int messageLength = 0;
+ while ((messageLength = recvmsg(m_socketDescriptor, &message, 0)) == -1) {
+ if (errno != EINTR)
return;
+ }
+
+ struct cmsghdr* controlMessage = CMSG_FIRSTHDR(&message);
+
+ MessageInfo messageInfo;
+ unsigned char* messageData = m_readBuffer.data();
+
+ memcpy(&messageInfo, messageData, sizeof(messageInfo));
+ ASSERT(messageLength == sizeof(messageInfo) + messageInfo.attachmentCount() * sizeof(size_t) + (messageInfo.isMessageBodyOOL() ? 0 : messageInfo.bodySize()));
+
+ messageData += sizeof(messageInfo);
+
+ RefPtr<WebKit::SharedMemory> oolMessageBody;
+
+ if (messageInfo.attachmentCount()) {
+ if (controlMessage && controlMessage->cmsg_level == SOL_SOCKET && controlMessage->cmsg_type == SCM_RIGHTS) {
+ size_t attachmentSizes[messageInfo.attachmentCount()];
+ memcpy(attachmentSizes, messageData, sizeof(attachmentSizes));
+
+ messageData += sizeof(attachmentSizes);
+
+ int fileDescriptors[messageInfo.attachmentCount()];
+ memcpy(fileDescriptors, CMSG_DATA(controlMessage), sizeof(fileDescriptors));
+
+ int attachmentCount = messageInfo.attachmentCount();
- if (m_readBuffer.size() < m_currentMessageSize)
- m_readBuffer.grow(m_currentMessageSize);
+ if (messageInfo.isMessageBodyOOL())
+ attachmentCount--;
- size_t numberOfBytesRead = m_socket->read(reinterpret_cast<char*>(m_readBuffer.data()), m_currentMessageSize);
- ASSERT_UNUSED(numberOfBytesRead, numberOfBytesRead);
+ for (int i = 0; i < attachmentCount; ++i) {
+ while (fcntl(fileDescriptors[i], F_SETFL, FD_CLOEXEC) == -1) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+ }
+ }
- // The messageID is encoded at the end of the buffer.
- size_t realBufferSize = m_currentMessageSize - sizeof(uint32_t);
- uint32_t messageID = *reinterpret_cast<uint32_t*>(m_readBuffer.data() + realBufferSize);
+ for (int i = 0; i < attachmentCount; ++i)
+ attachments.append(Attachment(fileDescriptors[i], attachmentSizes[i]));
- processIncomingMessage(MessageID::fromInt(messageID), adoptPtr(new ArgumentDecoder(m_readBuffer.data(), realBufferSize)));
+ if (messageInfo.isMessageBodyOOL()) {
+ ASSERT(messageInfo.bodySize());
- m_currentMessageSize = 0;
+ WebKit::SharedMemory::Handle handle;
+ handle.adoptFromAttachment(fileDescriptors[attachmentCount], attachmentSizes[attachmentCount]);
+ if (handle.isNull()) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+
+ oolMessageBody = WebKit::SharedMemory::create(handle, WebKit::SharedMemory::ReadOnly);
+ if (!oolMessageBody) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+ }
+
+ controlMessage = CMSG_NXTHDR(&message, controlMessage);
+ } else {
+ ASSERT_NOT_REACHED();
+ return;
+ }
}
+
+ ASSERT(attachments.size() == messageInfo.isMessageBodyOOL() ? messageInfo.attachmentCount() - 1 : messageInfo.attachmentCount());
+
+ unsigned char* messageBody = messageData;
+
+ if (messageInfo.isMessageBodyOOL())
+ messageBody = reinterpret_cast<unsigned char*>(oolMessageBody->data());
+
+ ArgumentDecoder* argumentDecoder;
+ if (attachments.isEmpty())
+ argumentDecoder = new ArgumentDecoder(messageBody, messageInfo.bodySize());
+ else
+ argumentDecoder = new ArgumentDecoder(messageBody, messageInfo.bodySize(), attachments);
+
+ processIncomingMessage(messageInfo.messageID(), adoptPtr(argumentDecoder));
+
+ ASSERT(!controlMessage);
}
bool Connection::open()
{
- ASSERT(!m_socket);
-
- if (m_isServer) {
- m_socket = WebKit::ProcessLauncher::takePendingConnection();
- m_isConnected = m_socket;
- if (m_isConnected) {
- m_connectionQueue.moveSocketToWorkThread(m_socket);
- m_connectionQueue.connectSignal(m_socket, SIGNAL(readyRead()), WorkItem::create(this, &Connection::readyReadHandler));
+ ASSERT(!m_socketNotifier);
+ int flags = fcntl(m_socketDescriptor, F_GETFL, 0);
+ while (fcntl(m_socketDescriptor, F_SETFL, flags | O_NONBLOCK) == -1) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ return false;
}
- } else {
- m_socket = new QLocalSocket();
- m_socket->connectToServer(m_serverName);
- m_connectionQueue.moveSocketToWorkThread(m_socket);
- m_connectionQueue.connectSignal(m_socket, SIGNAL(readyRead()), WorkItem::create(this, &Connection::readyReadHandler));
- m_connectionQueue.connectSignal(m_socket, SIGNAL(disconnected()), WorkItem::create(this, &Connection::connectionDidClose));
- m_isConnected = m_socket->waitForConnected();
}
- return m_isConnected;
+
+ m_isConnected = true;
+ m_socketNotifier = m_connectionQueue.registerSocketEventHandler(m_socketDescriptor, QSocketNotifier::Read, WorkItem::create(this, &Connection::readyReadHandler));
+
+ // Schedule a call to readyReadHandler. Data may have arrived before installation of the signal
+ // handler.
+ m_connectionQueue.scheduleWork(WorkItem::create(this, &Connection::readyReadHandler));
+
+ return true;
}
bool Connection::platformCanSendOutgoingMessages() const
{
- return m_socket;
+ return m_socketNotifier;
}
bool Connection::sendOutgoingMessage(MessageID messageID, PassOwnPtr<ArgumentEncoder> arguments)
{
- ASSERT(m_socket);
-
- // We put the message ID last.
- arguments->encodeUInt32(messageID.toInt());
+ ASSERT(m_socketNotifier);
+ COMPILE_ASSERT(sizeof(MessageInfo) + attachmentMaxAmount * sizeof(size_t) <= messageMaxSize, AttachmentsFitToMessageInline);
- size_t bufferSize = arguments->bufferSize();
+ Vector<Attachment> attachments = arguments->releaseAttachments();
+ AttachmentResourceGuard<Vector<Attachment>, Vector<Attachment>::iterator> attachementDisposer(attachments);
- // Write message size first
- // FIXME: Should just do a single write.
- qint64 bytesWrittenForSize = m_socket->write(reinterpret_cast<char*>(&bufferSize), sizeof(bufferSize));
- if (bytesWrittenForSize != sizeof(bufferSize)) {
- connectionDidClose();
+ if (attachments.size() > (attachmentMaxAmount - 1)) {
+ ASSERT_NOT_REACHED();
return false;
}
- qint64 bytesWrittenForBuffer = m_socket->write(reinterpret_cast<char*>(arguments->buffer()), arguments->bufferSize());
- if (bytesWrittenForBuffer != arguments->bufferSize()) {
- connectionDidClose();
- return false;
+ MessageInfo messageInfo(messageID, arguments->bufferSize(), attachments.size());
+ size_t messageSizeWithBodyInline = sizeof(messageInfo) + (attachments.size() * sizeof(size_t)) + arguments->bufferSize();
+ if (messageSizeWithBodyInline > messageMaxSize && arguments->bufferSize()) {
+ RefPtr<WebKit::SharedMemory> oolMessageBody = WebKit::SharedMemory::create(arguments->bufferSize());
+ if (!oolMessageBody)
+ return false;
+
+ WebKit::SharedMemory::Handle handle;
+ if (!oolMessageBody->createHandle(handle, WebKit::SharedMemory::ReadOnly))
+ return false;
+
+ messageInfo.setMessageBodyOOL();
+
+ memcpy(oolMessageBody->data(), arguments->buffer(), arguments->bufferSize());
+
+ attachments.append(handle.releaseToAttachment());
}
- m_socket->flush();
+ struct msghdr message;
+ memset(&message, 0, sizeof(message));
+
+ struct iovec iov[3];
+ memset(&iov, 0, sizeof(iov));
+
+ message.msg_iov = iov;
+ int iovLength = 1;
+
+ iov[0].iov_base = reinterpret_cast<void*>(&messageInfo);
+ iov[0].iov_len = sizeof(messageInfo);
+
+ char attachmentFDBuffer[CMSG_SPACE(sizeof(int) * (attachments.size()))];
+ size_t attachmentSizes[attachments.size()];
+
+ if (!attachments.isEmpty()) {
+ message.msg_control = attachmentFDBuffer;
+ message.msg_controllen = sizeof(attachmentFDBuffer);
+
+ struct cmsghdr* cmsg = CMSG_FIRSTHDR(&message);
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = SCM_RIGHTS;
+ cmsg->cmsg_len = CMSG_LEN(sizeof(int) * attachments.size());
+
+ int* fdptr = reinterpret_cast<int*>(CMSG_DATA(cmsg));
+ for (int i = 0; i < attachments.size(); ++i) {
+ attachmentSizes[i] = attachments[i].size();
+ fdptr[i] = attachments[i].fileDescriptor();
+ }
+
+ message.msg_controllen = cmsg->cmsg_len;
+ iov[iovLength].iov_base = attachmentSizes;
+ iov[iovLength].iov_len = sizeof(attachmentSizes);
+ ++iovLength;
+ }
+
+ if (!messageInfo.isMessageBodyOOL() && arguments->bufferSize()) {
+ iov[iovLength].iov_base = reinterpret_cast<void*>(arguments->buffer());
+ iov[iovLength].iov_len = arguments->bufferSize();
+ ++iovLength;
+ }
+
+ message.msg_iovlen = iovLength;
+
+ int bytesSent = 0;
+ while ((bytesSent = sendmsg(m_socketDescriptor, &message, 0)) == -1) {
+ if (errno != EINTR)
+ return false;
+ }
return true;
}
+void Connection::setShouldCloseConnectionOnProcessTermination(WebKit::PlatformProcessIdentifier process)
+{
+ m_connectionQueue.scheduleWorkOnTermination(process, WorkItem::create(this, &Connection::connectionDidClose));
+}
+
} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp b/Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp
new file mode 100644
index 0000000..9b26a9a
--- /dev/null
+++ b/Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "BinarySemaphore.h"
+
+namespace CoreIPC {
+
+BinarySemaphore::BinarySemaphore()
+ : m_event(::CreateEventW(0, FALSE, FALSE, 0))
+{
+}
+
+BinarySemaphore::~BinarySemaphore()
+{
+ ::CloseHandle(m_event);
+}
+
+void BinarySemaphore::signal()
+{
+ ::SetEvent(m_event);
+}
+
+bool BinarySemaphore::wait(double absoluteTime)
+{
+ DWORD interval = absoluteTimeToWaitTimeoutInterval(absoluteTime);
+ if (!interval) {
+ // Consider the wait to have timed out, even if the event has already been signaled, to
+ // match the WTF::ThreadCondition implementation.
+ return false;
+ }
+
+ DWORD result = ::WaitForSingleObjectEx(m_event, interval, FALSE);
+ switch (result) {
+ case WAIT_OBJECT_0:
+ // The event was signaled.
+ return true;
+
+ case WAIT_TIMEOUT:
+ // The wait timed out.
+ return false;
+
+ case WAIT_FAILED:
+ ASSERT_WITH_MESSAGE(false, "::WaitForSingleObjectEx failed with error %lu", ::GetLastError());
+ return false;
+ default:
+ ASSERT_WITH_MESSAGE(false, "::WaitForSingleObjectEx returned unexpected result %lu", result);
+ return false;
+ }
+}
+
+} // namespace CoreIPC
diff --git a/Source/WebKit2/Platform/CoreIPC/win/ConnectionWin.cpp b/Source/WebKit2/Platform/CoreIPC/win/ConnectionWin.cpp
index 695da78..ab44658 100644
--- a/Source/WebKit2/Platform/CoreIPC/win/ConnectionWin.cpp
+++ b/Source/WebKit2/Platform/CoreIPC/win/ConnectionWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Connection.h"
#include "ArgumentEncoder.h"
@@ -88,9 +89,6 @@ void Connection::platformInitialize(Identifier identifier)
m_writeState.hEvent = ::CreateEventW(0, FALSE, FALSE, 0);
m_connectionPipe = identifier;
-
- // We connected the two ends of the pipe in createServerAndClientIdentifiers.
- m_isConnected = true;
}
void Connection::platformInvalidate()
@@ -98,6 +96,8 @@ void Connection::platformInvalidate()
if (m_connectionPipe == INVALID_HANDLE_VALUE)
return;
+ m_isConnected = false;
+
m_connectionQueue.unregisterAndCloseHandle(m_readState.hEvent);
m_readState.hEvent = 0;
@@ -242,6 +242,10 @@ void Connection::writeEventHandler()
// FIXME: We should figure out why we're getting this error.
return;
}
+ if (error == ERROR_BROKEN_PIPE) {
+ connectionDidClose();
+ return;
+ }
ASSERT_NOT_REACHED();
}
@@ -255,6 +259,9 @@ void Connection::writeEventHandler()
bool Connection::open()
{
+ // We connected the two ends of the pipe in createServerAndClientIdentifiers.
+ m_isConnected = true;
+
// Start listening for read and write state events.
m_connectionQueue.registerHandle(m_readState.hEvent, WorkItem::create(this, &Connection::readEventHandler));
m_connectionQueue.registerHandle(m_writeState.hEvent, WorkItem::create(this, &Connection::writeEventHandler));
diff --git a/Source/WebKit2/Platform/Logging.cpp b/Source/WebKit2/Platform/Logging.cpp
index ca312ef..184821c 100644
--- a/Source/WebKit2/Platform/Logging.cpp
+++ b/Source/WebKit2/Platform/Logging.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Logging.h"
#if !LOG_DISABLED
diff --git a/Source/WebKit2/Platform/Module.cpp b/Source/WebKit2/Platform/Module.cpp
index 7a2def5..33ffbe0 100644
--- a/Source/WebKit2/Platform/Module.cpp
+++ b/Source/WebKit2/Platform/Module.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Module.h"
namespace WebKit {
diff --git a/Source/WebKit2/Platform/Module.h b/Source/WebKit2/Platform/Module.h
index ec7523c..47899e9 100644
--- a/Source/WebKit2/Platform/Module.h
+++ b/Source/WebKit2/Platform/Module.h
@@ -37,6 +37,10 @@
#include <QLibrary>
#endif
+#if PLATFORM(GTK)
+typedef struct _GModule GModule;
+#endif
+
namespace WebKit {
class Module {
@@ -62,6 +66,8 @@ private:
HMODULE m_module;
#elif PLATFORM(QT)
QLibrary m_lib;
+#elif PLATFORM(GTK)
+ GModule* m_handle;
#endif
};
diff --git a/Source/WebKit2/Platform/Region.cpp b/Source/WebKit2/Platform/Region.cpp
index a1cc24c..bd89065 100644
--- a/Source/WebKit2/Platform/Region.cpp
+++ b/Source/WebKit2/Platform/Region.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Region.h"
// A region class based on the paper "Scanline Coherent Shape Algebra"
@@ -72,8 +73,8 @@ Region::Shape::Shape(const IntRect& rect)
{
appendSpan(rect.y());
appendSegment(rect.x());
- appendSegment(rect.right());
- appendSpan(rect.bottom());
+ appendSegment(rect.maxX());
+ appendSpan(rect.maxY());
}
void Region::Shape::appendSpan(int y)
@@ -254,7 +255,7 @@ Region::Shape Region::Shape::shapeOperation(const Shape& shape1, const Shape& sh
// Iterate over all spans.
while (spans1 != spans1End && spans2 != spans2End) {
- int y;
+ int y = 0;
int test = spans1->y - spans2->y;
if (test <= 0) {
diff --git a/Source/WebKit2/Platform/RunLoop.cpp b/Source/WebKit2/Platform/RunLoop.cpp
index 606aba1..ea81fc1 100644
--- a/Source/WebKit2/Platform/RunLoop.cpp
+++ b/Source/WebKit2/Platform/RunLoop.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "RunLoop.h"
#include "WorkItem.h"
diff --git a/Source/WebKit2/Platform/SharedMemory.h b/Source/WebKit2/Platform/SharedMemory.h
index 9854132..fd1d60c 100644
--- a/Source/WebKit2/Platform/SharedMemory.h
+++ b/Source/WebKit2/Platform/SharedMemory.h
@@ -31,10 +31,7 @@
#include <wtf/RefCounted.h>
#if PLATFORM(QT)
-#include <QtGlobal>
-QT_BEGIN_NAMESPACE
-class QSharedMemory;
-QT_END_NAMESPACE
+#include "Attachment.h"
#include <wtf/text/WTFString.h>
#endif
@@ -63,6 +60,10 @@ public:
void encode(CoreIPC::ArgumentEncoder*) const;
static bool decode(CoreIPC::ArgumentDecoder*, Handle&);
+#if PLATFORM(QT)
+ CoreIPC::Attachment releaseToAttachment() const;
+ void adoptFromAttachment(int fileDescriptor, size_t);
+#endif
private:
friend class SharedMemory;
#if PLATFORM(MAC)
@@ -70,7 +71,7 @@ public:
#elif PLATFORM(WIN)
mutable HANDLE m_handle;
#elif PLATFORM(QT)
- mutable String m_key;
+ mutable int m_fileDescriptor;
#endif
size_t m_size;
};
@@ -97,7 +98,7 @@ private:
#if PLATFORM(WIN)
HANDLE m_handle;
#elif PLATFORM(QT)
- QSharedMemory* m_impl;
+ int m_fileDescriptor;
#endif
};
diff --git a/Source/WebKit2/Platform/WorkQueue.cpp b/Source/WebKit2/Platform/WorkQueue.cpp
index de82c80..6bcdd22 100644
--- a/Source/WebKit2/Platform/WorkQueue.cpp
+++ b/Source/WebKit2/Platform/WorkQueue.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WorkQueue.h"
WorkQueue::WorkQueue(const char* name)
diff --git a/Source/WebKit2/Platform/WorkQueue.h b/Source/WebKit2/Platform/WorkQueue.h
index 78fa8b7..441d625 100644
--- a/Source/WebKit2/Platform/WorkQueue.h
+++ b/Source/WebKit2/Platform/WorkQueue.h
@@ -41,7 +41,8 @@
#include <wtf/Vector.h>
#if PLATFORM(QT)
-class QLocalSocket;
+#include <QSocketNotifier>
+#include "PlatformProcessIdentifier.h"
class QObject;
class QThread;
#elif PLATFORM(GTK)
@@ -50,6 +51,8 @@ typedef struct _GMainLoop GMainLoop;
#endif
class WorkQueue {
+ WTF_MAKE_NONCOPYABLE(WorkQueue);
+
public:
explicit WorkQueue(const char* name);
~WorkQueue();
@@ -79,10 +82,8 @@ public:
void registerHandle(HANDLE, PassOwnPtr<WorkItem>);
void unregisterAndCloseHandle(HANDLE);
#elif PLATFORM(QT)
- void connectSignal(QObject*, const char* signal, PassOwnPtr<WorkItem>);
- void disconnectSignal(QObject*, const char* signal);
-
- void moveSocketToWorkThread(QLocalSocket*);
+ QSocketNotifier* registerSocketEventHandler(int, QSocketNotifier::Type, PassOwnPtr<WorkItem>);
+ void scheduleWorkOnTermination(WebKit::PlatformProcessIdentifier, PassOwnPtr<WorkItem>);
#elif PLATFORM(GTK)
void registerEventSourceHandler(int, int, PassOwnPtr<WorkItem>);
void unregisterEventSourceHandler(int);
@@ -137,6 +138,7 @@ private:
};
static void CALLBACK handleCallback(void* context, BOOLEAN timerOrWaitFired);
+ static void CALLBACK timerCallback(void* context, BOOLEAN timerOrWaitFired);
static DWORD WINAPI workThreadCallback(void* context);
bool tryRegisterAsWorkThread();
@@ -153,6 +155,8 @@ private:
Mutex m_handlesLock;
HashMap<HANDLE, RefPtr<HandleWorkItem> > m_handles;
+
+ HANDLE m_timerQueue;
#elif PLATFORM(QT)
class WorkItemQt;
HashMap<QObject*, WorkItemQt*> m_signalListeners;
diff --git a/Source/WebKit2/Platform/cg/CGUtilities.cpp b/Source/WebKit2/Platform/cg/CGUtilities.cpp
index 1e5dd33..e57206d 100644
--- a/Source/WebKit2/Platform/cg/CGUtilities.cpp
+++ b/Source/WebKit2/Platform/cg/CGUtilities.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "CGUtilities.h"
#include <wtf/RetainPtr.h>
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm b/Source/WebKit2/Platform/gtk/ModuleGtk.cpp
index d4eb3ac..9b00d20 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm
+++ b/Source/WebKit2/Platform/gtk/ModuleGtk.cpp
@@ -1,5 +1,7 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,20 +25,30 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebDatabaseManager.h"
+#include "config.h"
+#include "Module.h"
+
+#include <gmodule.h>
+#include <wtf/text/CString.h>
namespace WebKit {
-NSString *WebDatabaseDirectoryDefaultsKey = @"WebDatabaseDirectory";
+bool Module::load()
+{
+ m_handle = g_module_open(m_path.utf8().data(), G_MODULE_BIND_LAZY);
+ return !m_handle;
+}
-String WebDatabaseManager::databaseDirectory() const
+void Module::unload()
{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- NSString *databasesDirectory = [defaults objectForKey:WebDatabaseDirectoryDefaultsKey];
- if (!databasesDirectory || ![databasesDirectory isKindOfClass:[NSString class]])
- databasesDirectory = @"~/Library/WebKit/Databases";
+ g_module_close(m_handle);
+}
- return [databasesDirectory stringByStandardizingPath];
+void* Module::platformFunctionPointer(const char* functionName) const
+{
+ gpointer symbol = 0;
+ g_module_symbol(m_handle, functionName, &symbol);
+ return symbol;
}
-} // namespace WebKit
+}
diff --git a/Source/WebKit2/Platform/gtk/RunLoopGtk.cpp b/Source/WebKit2/Platform/gtk/RunLoopGtk.cpp
index 2c183fa..70b0552 100644
--- a/Source/WebKit2/Platform/gtk/RunLoopGtk.cpp
+++ b/Source/WebKit2/Platform/gtk/RunLoopGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "RunLoop.h"
#include "WKBase.h"
diff --git a/Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp b/Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp
index 93fda95..3900e20 100644
--- a/Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp
+++ b/Source/WebKit2/Platform/gtk/SharedMemoryGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "SharedMemory.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp b/Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp
index 995b531..3d59c80 100644
--- a/Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp
+++ b/Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WorkQueue.h"
#include "NotImplemented.h"
@@ -144,7 +145,6 @@ void WorkQueue::registerEventSourceHandler(int fileDescriptor, int condition, Pa
// Set up the event sources under the mutex since this is shared across multiple threads.
{
MutexLocker locker(m_eventSourcesLock);
- ASSERT(!m_eventSources.contains(fileDescriptor));
Vector<EventSource*> sources;
EventSourceIterator it = m_eventSources.find(fileDescriptor);
if (it != m_eventSources.end())
diff --git a/Source/WebKit2/Platform/mac/MachUtilities.cpp b/Source/WebKit2/Platform/mac/MachUtilities.cpp
index edb17dc..a989dbf 100644
--- a/Source/WebKit2/Platform/mac/MachUtilities.cpp
+++ b/Source/WebKit2/Platform/mac/MachUtilities.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "MachUtilities.h"
#include <mach/task.h>
diff --git a/Source/WebKit2/Platform/mac/ModuleMac.mm b/Source/WebKit2/Platform/mac/ModuleMac.mm
index fa38745..078e7ee 100644
--- a/Source/WebKit2/Platform/mac/ModuleMac.mm
+++ b/Source/WebKit2/Platform/mac/ModuleMac.mm
@@ -23,7 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "Module.h"
+#import "config.h"
+#import "Module.h"
namespace WebKit {
diff --git a/Source/WebKit2/Platform/mac/RunLoopMac.mm b/Source/WebKit2/Platform/mac/RunLoopMac.mm
index ca044f3..8258550 100644
--- a/Source/WebKit2/Platform/mac/RunLoopMac.mm
+++ b/Source/WebKit2/Platform/mac/RunLoopMac.mm
@@ -23,9 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "RunLoop.h"
+#import "config.h"
+#import "RunLoop.h"
-#include "WorkItem.h"
+#import "WorkItem.h"
void RunLoop::performWork(void* context)
{
diff --git a/Source/WebKit2/Platform/mac/SharedMemoryMac.cpp b/Source/WebKit2/Platform/mac/SharedMemoryMac.cpp
index 07f942c..198ba69 100644
--- a/Source/WebKit2/Platform/mac/SharedMemoryMac.cpp
+++ b/Source/WebKit2/Platform/mac/SharedMemoryMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "SharedMemory.h"
#include "ArgumentDecoder.h"
@@ -56,7 +57,7 @@ bool SharedMemory::Handle::isNull() const
void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const
{
encoder->encodeUInt64(m_size);
- encoder->encode(CoreIPC::MachPort(m_port, MACH_MSG_TYPE_COPY_SEND));
+ encoder->encode(CoreIPC::MachPort(m_port, MACH_MSG_TYPE_MOVE_SEND));
m_port = MACH_PORT_NULL;
}
@@ -90,6 +91,8 @@ static inline mach_vm_address_t toVMAddress(void* pointer)
PassRefPtr<SharedMemory> SharedMemory::create(size_t size)
{
+ ASSERT(size);
+
mach_vm_address_t address;
kern_return_t kr = mach_vm_allocate(mach_task_self(), &address, round_page(size), VM_FLAGS_ANYWHERE);
if (kr != KERN_SUCCESS)
diff --git a/Source/WebKit2/Platform/mac/WorkQueueMac.cpp b/Source/WebKit2/Platform/mac/WorkQueueMac.cpp
index 3651f8c..0303f7d 100644
--- a/Source/WebKit2/Platform/mac/WorkQueueMac.cpp
+++ b/Source/WebKit2/Platform/mac/WorkQueueMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WorkQueue.h"
#include <mach/mach_port.h>
diff --git a/Source/WebKit2/Platform/qt/MappedMemoryPool.cpp b/Source/WebKit2/Platform/qt/MappedMemoryPool.cpp
deleted file mode 100644
index d36d82b..0000000
--- a/Source/WebKit2/Platform/qt/MappedMemoryPool.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2010 University of Szeged
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "MappedMemoryPool.h"
-
-#include "CleanupHandler.h"
-#include "StdLibExtras.h"
-#include <QDir>
-#include <QIODevice>
-#include <QTemporaryFile>
-
-namespace WebKit {
-
-MappedMemoryPool* MappedMemoryPool::theInstance = 0;
-
-MappedMemoryPool* MappedMemoryPool::instance()
-{
- if (!theInstance) {
- theInstance = new MappedMemoryPool;
-
- // Do not leave mapping files on the disk.
- CleanupHandler::instance()->markForCleanup(theInstance);
- }
-
- return theInstance;
-}
-
-MappedMemoryPool::~MappedMemoryPool()
-{
- CleanupHandler::instance()->unmark(theInstance);
-
- for (unsigned n = 0; n < m_pool.size(); ++n) {
- MappedMemory& current = m_pool.at(n);
- if (!current.file)
- continue;
- current.file->remove();
- delete current.file;
- }
- m_pool.clear();
-}
-
-MappedMemory* MappedMemoryPool::mapMemory(size_t size)
-{
- for (unsigned n = 0; n < m_pool.size(); ++n) {
- MappedMemory& current = m_pool.at(n);
- if (current.dataSize >= size && current.isFree()) {
- current.markUsed();
- return &current;
- }
- }
-
- MappedMemory newMap;
- newMap.dataSize = size;
- newMap.file = new QTemporaryFile(QDir::tempPath() + "/WebKit2UpdateChunk");
- newMap.file->open(QIODevice::ReadWrite);
- newMap.fileName = newMap.file->fileName();
- newMap.file->resize(newMap.mapSize());
- newMap.mappedBytes = newMap.file->map(0, newMap.mapSize());
- newMap.file->close();
- newMap.markUsed();
- m_pool.append(newMap);
- return &m_pool.last();
-}
-
-MappedMemory* MappedMemoryPool::mapFile(QString fileName, size_t size)
-{
- for (unsigned n = 0; n < m_pool.size(); ++n) {
- MappedMemory& current = m_pool.at(n);
- if (current.fileName == fileName) {
- ASSERT(!current.isFree());
- return &current;
- }
- }
-
- MappedMemory newMap;
- newMap.file = new QFile(fileName);
- newMap.fileName = fileName;
- newMap.dataSize = size;
- ASSERT(newMap.file->exists());
- ASSERT(newMap.file->size() >= newMap.mapSize());
- newMap.file->open(QIODevice::ReadWrite);
- newMap.mappedBytes = newMap.file->map(0, newMap.mapSize());
- ASSERT(newMap.mappedBytes);
- ASSERT(!newMap.isFree());
- newMap.file->close();
- m_pool.append(newMap);
- return &m_pool.last();
-}
-
-} // namespace WebKit
diff --git a/Source/WebKit2/Platform/qt/MappedMemoryPool.h b/Source/WebKit2/Platform/qt/MappedMemoryPool.h
deleted file mode 100644
index 8d6af8c..0000000
--- a/Source/WebKit2/Platform/qt/MappedMemoryPool.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- * Copyright (C) 2010 University of Szeged
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef MappedMemoryPool_h
-#define MappedMemoryPool_h
-
-#include <QFile>
-#include <QObject>
-#include <wtf/StdLibExtras.h>
-#include <wtf/Vector.h>
-
-namespace WebKit {
-
-class MappedMemoryPool;
-
-struct MappedMemory {
-
- QString mappedFileName() const
- {
- ASSERT(file);
- ASSERT(mappedBytes);
- return fileName;
- }
-
- void markFree()
- {
- ASSERT(mappedBytes);
- dataPtr->isFree = true;
- }
-
- uchar* data() const
- {
- ASSERT(mappedBytes);
- return dataPtr->bytes;
- }
-
-private:
- friend class MappedMemoryPool;
-
- MappedMemory()
- : file(0)
- , mappedBytes(0)
- , dataSize(0)
- {
- }
-
- void markUsed() { dataPtr->isFree = false; }
-
- size_t mapSize() const { return dataSize + sizeof(Data); }
- bool isFree() const { return dataPtr->isFree; }
-
- struct Data {
- uint32_t isFree; // keep bytes aligned
- uchar bytes[];
- };
-
- QFile* file;
- QString fileName;
- union {
- uchar* mappedBytes;
- Data* dataPtr;
- };
- size_t dataSize;
-};
-
-class MappedMemoryPool : QObject {
- Q_OBJECT
-public:
- static MappedMemoryPool* instance();
-
- MappedMemory* mapMemory(size_t size);
- MappedMemory* mapFile(QString fileName, size_t size);
-
-private:
- MappedMemoryPool() { }
- ~MappedMemoryPool();
-
- static MappedMemoryPool* theInstance;
-
- Vector<MappedMemory> m_pool;
-};
-
-} // namespace WebKit
-
-#endif // MappedMemoryPool_h
diff --git a/Source/WebKit2/Platform/qt/ModuleQt.cpp b/Source/WebKit2/Platform/qt/ModuleQt.cpp
index 8a68cf4..de83691 100644
--- a/Source/WebKit2/Platform/qt/ModuleQt.cpp
+++ b/Source/WebKit2/Platform/qt/ModuleQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Module.h"
namespace WebKit {
diff --git a/Source/WebKit2/Platform/qt/RunLoopQt.cpp b/Source/WebKit2/Platform/qt/RunLoopQt.cpp
index d7d859d..b7aea2f 100644
--- a/Source/WebKit2/Platform/qt/RunLoopQt.cpp
+++ b/Source/WebKit2/Platform/qt/RunLoopQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "RunLoop.h"
#include "WorkItem.h"
diff --git a/Source/WebKit2/Platform/qt/SharedMemoryQt.cpp b/Source/WebKit2/Platform/qt/SharedMemoryQt.cpp
index f5fecfc..91af533 100644
--- a/Source/WebKit2/Platform/qt/SharedMemoryQt.cpp
+++ b/Source/WebKit2/Platform/qt/SharedMemoryQt.cpp
@@ -25,143 +25,193 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "SharedMemory.h"
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
-#include "CleanupHandler.h"
#include "WebCoreArgumentCoders.h"
+#include <QDir>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <unistd.h>
-#include <QCoreApplication>
-#include <QLatin1String>
-#include <QSharedMemory>
-#include <QString>
-#include <QUuid>
#include <wtf/Assertions.h>
#include <wtf/CurrentTime.h>
namespace WebKit {
SharedMemory::Handle::Handle()
- : m_key()
+ : m_fileDescriptor(-1)
, m_size(0)
{
}
SharedMemory::Handle::~Handle()
{
+ if (!isNull())
+ while (close(m_fileDescriptor) == -1 && errno == EINTR) { }
}
bool SharedMemory::Handle::isNull() const
{
- return m_key.isNull();
+ return m_fileDescriptor == -1;
}
void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const
{
- encoder->encodeUInt64(m_size);
- encoder->encode(m_key);
- m_key = String();
+ ASSERT(!isNull());
+
+ encoder->encode(releaseToAttachment());
}
bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle& handle)
{
ASSERT_ARG(handle, !handle.m_size);
- ASSERT_ARG(handle, handle.m_key.isNull());
+ ASSERT_ARG(handle, handle.isNull());
- uint64_t size;
- if (!decoder->decodeUInt64(size))
+ CoreIPC::Attachment attachment;
+ if (!decoder->decode(attachment))
return false;
- String key;
- if (!decoder->decode(key))
- return false;
+ handle.adoptFromAttachment(attachment.releaseFileDescriptor(), attachment.size());
+ return true;
+}
- handle.m_size = size;
- handle.m_key = key;
+CoreIPC::Attachment SharedMemory::Handle::releaseToAttachment() const
+{
+ ASSERT(!isNull());
- return true;
+ int temp = m_fileDescriptor;
+ m_fileDescriptor = -1;
+ return CoreIPC::Attachment(temp, m_size);
}
-static QString createUniqueKey()
+void SharedMemory::Handle::adoptFromAttachment(int fileDescriptor, size_t size)
{
- return QLatin1String("QWKSharedMemoryKey") + QUuid::createUuid().toString();
+ ASSERT(!m_size);
+ ASSERT(isNull());
+
+ m_fileDescriptor = fileDescriptor;
+ m_size = size;
}
PassRefPtr<SharedMemory> SharedMemory::create(size_t size)
{
- RefPtr<SharedMemory> sharedMemory(adoptRef(new SharedMemory));
- QSharedMemory* impl = new QSharedMemory(createUniqueKey());
- bool created = impl->create(size);
- ASSERT_UNUSED(created, created);
+ QString tempName = QDir::temp().filePath("qwkshm.XXXXXX");
+ QByteArray tempNameCSTR = tempName.toLocal8Bit();
+ char* tempNameC = tempNameCSTR.data();
+
+ int fileDescriptor;
+ while ((fileDescriptor = mkstemp(tempNameC)) == -1) {
+ if (errno != EINTR)
+ return 0;
+ }
+ while (fcntl(fileDescriptor, F_SETFD, FD_CLOEXEC) == -1) {
+ if (errno != EINTR) {
+ while (close(fileDescriptor) == -1 && errno == EINTR) { }
+ unlink(tempNameC);
+ return 0;
+ }
+ }
- sharedMemory->m_impl = impl;
- sharedMemory->m_size = size;
- sharedMemory->m_data = impl->data();
+ while (ftruncate(fileDescriptor, size) == -1) {
+ if (errno != EINTR) {
+ while (close(fileDescriptor) == -1 && errno == EINTR) { }
+ unlink(tempNameC);
+ return 0;
+ }
+ }
- // Do not leave the shared memory segment behind.
- CleanupHandler::instance()->markForCleanup(impl);
+ void* data = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileDescriptor, 0);
+ if (data == MAP_FAILED) {
+ while (close(fileDescriptor) == -1 && errno == EINTR) { }
+ unlink(tempNameC);
+ return 0;
+ }
- return sharedMemory.release();
+ unlink(tempNameC);
+
+ RefPtr<SharedMemory> instance = adoptRef(new SharedMemory());
+ instance->m_data = data;
+ instance->m_fileDescriptor = fileDescriptor;
+ instance->m_size = size;
+ return instance.release();
}
-static inline QSharedMemory::AccessMode accessMode(SharedMemory::Protection protection)
+static inline int accessModeMMap(SharedMemory::Protection protection)
{
switch (protection) {
case SharedMemory::ReadOnly:
- return QSharedMemory::ReadOnly;
+ return PROT_READ;
case SharedMemory::ReadWrite:
- return QSharedMemory::ReadWrite;
+ return PROT_READ | PROT_WRITE;
}
ASSERT_NOT_REACHED();
- return QSharedMemory::ReadWrite;
+ return PROT_READ | PROT_WRITE;
}
PassRefPtr<SharedMemory> SharedMemory::create(const Handle& handle, Protection protection)
{
- if (handle.isNull())
- return 0;
+ ASSERT(!handle.isNull());
- QSharedMemory* impl = new QSharedMemory(QString(handle.m_key));
- bool attached = impl->attach(accessMode(protection));
- if (!attached) {
- delete impl;
+ void* data = mmap(0, handle.m_size, accessModeMMap(protection), MAP_SHARED, handle.m_fileDescriptor, 0);
+ if (data == MAP_FAILED)
return 0;
- }
- RefPtr<SharedMemory> sharedMemory(adoptRef(new SharedMemory));
- sharedMemory->m_impl = impl;
- ASSERT(handle.m_size == impl->size());
- sharedMemory->m_size = handle.m_size;
- sharedMemory->m_data = impl->data();
-
- // Do not leave the shared memory segment behind.
- CleanupHandler::instance()->markForCleanup(impl);
-
- return sharedMemory.release();
+ RefPtr<SharedMemory> instance = adoptRef(new SharedMemory());
+ instance->m_data = data;
+ instance->m_fileDescriptor = handle.m_fileDescriptor;
+ instance->m_size = handle.m_size;
+ handle.m_fileDescriptor = -1;
+ return instance;
}
SharedMemory::~SharedMemory()
{
- if (CleanupHandler::instance()->hasStartedDeleting())
- return;
+ munmap(m_data, m_size);
+ while (close(m_fileDescriptor) == -1 && errno == EINTR) { }
+}
+
+static inline int accessModeFile(SharedMemory::Protection protection)
+{
+ switch (protection) {
+ case SharedMemory::ReadOnly:
+ return O_RDONLY;
+ case SharedMemory::ReadWrite:
+ return O_RDWR;
+ }
- CleanupHandler::instance()->unmark(m_impl);
- delete m_impl;
+ ASSERT_NOT_REACHED();
+ return O_RDWR;
}
bool SharedMemory::createHandle(Handle& handle, Protection protection)
{
- ASSERT_ARG(handle, handle.m_key.isNull());
ASSERT_ARG(handle, !handle.m_size);
+ ASSERT_ARG(handle, handle.isNull());
+
+ int duplicatedHandle;
+ while ((duplicatedHandle = dup(m_fileDescriptor)) == -1) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ return false;
+ }
+ }
- QString key = m_impl->key();
- if (key.isNull())
- return false;
- handle.m_key = String(key);
+ while ((fcntl(duplicatedHandle, F_SETFD, FD_CLOEXEC | accessModeFile(protection)) == -1)) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ while (close(duplicatedHandle) == -1 && errno == EINTR) { }
+ return false;
+ }
+ }
+ handle.m_fileDescriptor = duplicatedHandle;
handle.m_size = m_size;
-
return true;
}
diff --git a/Source/WebKit2/Platform/qt/WorkQueueQt.cpp b/Source/WebKit2/Platform/qt/WorkQueueQt.cpp
index 271984f..24af404 100644
--- a/Source/WebKit2/Platform/qt/WorkQueueQt.cpp
+++ b/Source/WebKit2/Platform/qt/WorkQueueQt.cpp
@@ -24,11 +24,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WorkQueue.h"
#include <QLocalSocket>
#include <QObject>
#include <QThread>
+#include <QProcess>
#include <wtf/Threading.h>
#include "NotImplemented.h"
@@ -75,32 +77,17 @@ public:
WorkItem* m_workItem;
};
-void WorkQueue::connectSignal(QObject* o, const char* signal, PassOwnPtr<WorkItem> workItem)
-{
- WorkQueue::WorkItemQt* itemQt = new WorkQueue::WorkItemQt(this, o, signal, workItem.leakPtr());
- itemQt->moveToThread(m_workThread);
- m_signalListeners.add(o, itemQt);
-}
-
-void WorkQueue::disconnectSignal(QObject* o, const char* name)
-{
- HashMap<QObject*, WorkItemQt*>::iterator it = m_signalListeners.find(o);
- for (; it != m_signalListeners.end(); ++it) {
- if (strcmp(it->second->m_signal, name))
- continue;
- delete it->second;
- m_signalListeners.remove(it);
- return;
- }
-}
-
-void WorkQueue::moveSocketToWorkThread(QLocalSocket* socket)
+QSocketNotifier* WorkQueue::registerSocketEventHandler(int socketDescriptor, QSocketNotifier::Type type, PassOwnPtr<WorkItem> workItem)
{
ASSERT(m_workThread);
- ASSERT(socket);
- socket->setParent(0);
- socket->moveToThread(m_workThread);
+ QSocketNotifier* notifier = new QSocketNotifier(socketDescriptor, type, 0);
+ notifier->setEnabled(false);
+ notifier->moveToThread(m_workThread);
+ WorkQueue::WorkItemQt* itemQt = new WorkQueue::WorkItemQt(this, notifier, SIGNAL(activated(int)), workItem.leakPtr());
+ itemQt->moveToThread(m_workThread);
+ notifier->setEnabled(true);
+ return notifier;
}
void WorkQueue::platformInitialize(const char*)
@@ -129,4 +116,10 @@ void WorkQueue::scheduleWorkAfterDelay(PassOwnPtr<WorkItem>, double)
notImplemented();
}
+void WorkQueue::scheduleWorkOnTermination(WebKit::PlatformProcessIdentifier process, PassOwnPtr<WorkItem> workItem)
+{
+ WorkQueue::WorkItemQt* itemQt = new WorkQueue::WorkItemQt(this, process, SIGNAL(finished(int, QProcess::ExitStatus)), workItem.leakPtr());
+ itemQt->moveToThread(m_workThread);
+}
+
#include "WorkQueueQt.moc"
diff --git a/Source/WebKit2/Platform/win/ModuleWin.cpp b/Source/WebKit2/Platform/win/ModuleWin.cpp
index 2c2250d..923fffd 100644
--- a/Source/WebKit2/Platform/win/ModuleWin.cpp
+++ b/Source/WebKit2/Platform/win/ModuleWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Module.h"
#include <shlwapi.h>
diff --git a/Source/WebKit2/Platform/win/RunLoopWin.cpp b/Source/WebKit2/Platform/win/RunLoopWin.cpp
index 4dfb4b5..7980e36 100644
--- a/Source/WebKit2/Platform/win/RunLoopWin.cpp
+++ b/Source/WebKit2/Platform/win/RunLoopWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "RunLoop.h"
#include "WorkItem.h"
@@ -118,7 +119,11 @@ void RunLoop::wakeUp()
void RunLoop::TimerBase::timerFired(RunLoop* runLoop, uint64_t ID)
{
TimerMap::iterator it = runLoop->m_activeTimers.find(ID);
- ASSERT(it != runLoop->m_activeTimers.end());
+ if (it == runLoop->m_activeTimers.end()) {
+ // The timer must have been stopped after the WM_TIMER message was posted to the message queue.
+ return;
+ }
+
TimerBase* timer = it->second;
if (!timer->m_isRepeating) {
diff --git a/Source/WebKit2/Platform/win/SharedMemoryWin.cpp b/Source/WebKit2/Platform/win/SharedMemoryWin.cpp
index 260783a..ef83de7 100644
--- a/Source/WebKit2/Platform/win/SharedMemoryWin.cpp
+++ b/Source/WebKit2/Platform/win/SharedMemoryWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "SharedMemory.h"
#include "ArgumentDecoder.h"
@@ -45,6 +46,11 @@ SharedMemory::Handle::~Handle()
::CloseHandle(m_handle);
}
+bool SharedMemory::Handle::isNull() const
+{
+ return !m_handle;
+}
+
void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const
{
encoder->encodeUInt64(m_size);
@@ -59,6 +65,25 @@ void SharedMemory::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const
encoder->encodeUInt32(::GetCurrentProcessId());
}
+static bool getDuplicatedHandle(HANDLE sourceHandle, DWORD sourcePID, HANDLE& duplicatedHandle)
+{
+ duplicatedHandle = 0;
+ if (!sourceHandle)
+ return true;
+
+ HANDLE sourceProcess = ::OpenProcess(PROCESS_DUP_HANDLE, FALSE, sourcePID);
+ if (!sourceProcess)
+ return false;
+
+ // Copy the handle into our process and close the handle that the sending process created for us.
+ BOOL success = ::DuplicateHandle(sourceProcess, sourceHandle, ::GetCurrentProcess(), &duplicatedHandle, 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+ ASSERT_WITH_MESSAGE(success, "::DuplicateHandle failed with error %lu", ::GetLastError());
+
+ ::CloseHandle(sourceProcess);
+
+ return success;
+}
+
bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle& handle)
{
ASSERT_ARG(handle, !handle.m_handle);
@@ -76,17 +101,8 @@ bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle& han
if (!decoder->decodeUInt32(sourcePID))
return false;
- HANDLE sourceProcess = ::OpenProcess(PROCESS_DUP_HANDLE, FALSE, sourcePID);
- if (!sourceProcess)
- return false;
-
- // Copy the handle into our process and close the handle that the sending process created for us.
HANDLE duplicatedHandle;
- BOOL success = ::DuplicateHandle(sourceProcess, reinterpret_cast<HANDLE>(sourceHandle), ::GetCurrentProcess(), &duplicatedHandle, 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
- ::CloseHandle(sourceProcess);
-
- if (!success)
+ if (!getDuplicatedHandle(reinterpret_cast<HANDLE>(sourceHandle), sourcePID, duplicatedHandle))
return false;
handle.m_handle = duplicatedHandle;
@@ -130,9 +146,13 @@ static DWORD accessRights(SharedMemory::Protection protection)
PassRefPtr<SharedMemory> SharedMemory::create(const Handle& handle, Protection protection)
{
+ if (handle.isNull())
+ return 0;
+
DWORD desiredAccess = accessRights(protection);
void* baseAddress = ::MapViewOfFile(handle.m_handle, desiredAccess, 0, 0, handle.m_size);
+ ASSERT_WITH_MESSAGE(baseAddress, "::MapViewOfFile failed with error %lu", ::GetLastError());
if (!baseAddress)
return 0;
diff --git a/Source/WebKit2/Platform/win/WorkQueueWin.cpp b/Source/WebKit2/Platform/win/WorkQueueWin.cpp
index f527432..f751b5d 100644
--- a/Source/WebKit2/Platform/win/WorkQueueWin.cpp
+++ b/Source/WebKit2/Platform/win/WorkQueueWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WorkQueue.h"
#include <wtf/Threading.h>
@@ -164,6 +165,8 @@ void WorkQueue::performWorkOnRegisteredWorkThread()
void WorkQueue::platformInitialize(const char* name)
{
m_isWorkThreadRegistered = 0;
+ m_timerQueue = ::CreateTimerQueue();
+ ASSERT_WITH_MESSAGE(m_timerQueue, "::CreateTimerQueue failed with error %lu", ::GetLastError());
}
bool WorkQueue::tryRegisterAsWorkThread()
@@ -185,6 +188,10 @@ void WorkQueue::platformInvalidate()
MutexLocker lock(m_handlesLock);
ASSERT(m_handles.isEmpty());
#endif
+
+ // FIXME: We need to ensure that any timer-queue timers that fire after this point don't try to
+ // access this WorkQueue <http://webkit.org/b/44690>.
+ ::DeleteTimerQueueEx(m_timerQueue, 0);
}
void WorkQueue::scheduleWork(PassOwnPtr<WorkItem> item)
@@ -203,9 +210,59 @@ void WorkQueue::scheduleWork(PassOwnPtr<WorkItem> item)
::QueueUserWorkItem(workThreadCallback, this, WT_EXECUTEDEFAULT);
}
-void WorkQueue::scheduleWorkAfterDelay(PassOwnPtr<WorkItem>, double)
+struct TimerContext : public ThreadSafeShared<TimerContext> {
+ static PassRefPtr<TimerContext> create() { return adoptRef(new TimerContext); }
+
+ WorkQueue* queue;
+ OwnPtr<WorkItem> item;
+ Mutex timerMutex;
+ HANDLE timer;
+
+private:
+ TimerContext() : queue(0), timer(0) { }
+};
+
+void WorkQueue::timerCallback(void* context, BOOLEAN timerOrWaitFired)
+{
+ ASSERT_ARG(context, context);
+ ASSERT_UNUSED(timerOrWaitFired, timerOrWaitFired);
+
+ // Balanced by leakRef in scheduleWorkAfterDelay.
+ RefPtr<TimerContext> timerContext = adoptRef(static_cast<TimerContext*>(context));
+
+ timerContext->queue->scheduleWork(timerContext->item.release());
+
+ MutexLocker lock(timerContext->timerMutex);
+ ASSERT(timerContext->timer);
+ ASSERT(timerContext->queue->m_timerQueue);
+ if (!::DeleteTimerQueueTimer(timerContext->queue->m_timerQueue, timerContext->timer, 0))
+ ASSERT_WITH_MESSAGE(false, "::DeleteTimerQueueTimer failed with error %lu", ::GetLastError());
+}
+
+void WorkQueue::scheduleWorkAfterDelay(PassOwnPtr<WorkItem> item, double delay)
{
- notImplemented();
+ ASSERT(m_timerQueue);
+
+ RefPtr<TimerContext> context = TimerContext::create();
+ context->queue = this;
+ context->item = item;
+
+ {
+ // The timer callback could fire before ::CreateTimerQueueTimer even returns, so we protect
+ // context->timer with a mutex to ensure the timer callback doesn't access it before the
+ // timer handle has been stored in it.
+ MutexLocker lock(context->timerMutex);
+
+ // Since our timer callback is quick, we can execute in the timer thread itself and avoid
+ // an extra thread switch over to a worker thread.
+ if (!::CreateTimerQueueTimer(&context->timer, m_timerQueue, timerCallback, context.get(), delay * 1000, 0, WT_EXECUTEINTIMERTHREAD)) {
+ ASSERT_WITH_MESSAGE(false, "::CreateTimerQueueTimer failed with error %lu", ::GetLastError());
+ return;
+ }
+ }
+
+ // The timer callback will handle destroying context.
+ context.release().leakRef();
}
void WorkQueue::unregisterWaitAndDestroyItemSoon(PassRefPtr<HandleWorkItem> item)
diff --git a/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp b/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp
index 42e9e6d..3dc7e8e 100644
--- a/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp
+++ b/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginControllerProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "DataReference.h"
#include "NPObjectProxy.h"
#include "NPRemoteObjectMap.h"
@@ -249,6 +250,11 @@ void PluginControllerProxy::setComplexTextInputEnabled(bool complexTextInputEnab
m_connection->connection()->send(Messages::PluginProxy::SetComplexTextInputEnabled(complexTextInputEnabled), m_pluginInstanceID);
}
+mach_port_t PluginControllerProxy::compositingRenderServerPort()
+{
+ return PluginProcess::shared().compositingRenderServerPort();
+}
+
String PluginControllerProxy::proxiesForURL(const String& urlString)
{
String proxyString;
diff --git a/Source/WebKit2/PluginProcess/PluginControllerProxy.h b/Source/WebKit2/PluginProcess/PluginControllerProxy.h
index 339c151..c39542a 100644
--- a/Source/WebKit2/PluginProcess/PluginControllerProxy.h
+++ b/Source/WebKit2/PluginProcess/PluginControllerProxy.h
@@ -90,6 +90,7 @@ private:
#if PLATFORM(MAC)
virtual void setComplexTextInputEnabled(bool);
+ virtual mach_port_t compositingRenderServerPort();
#endif
virtual String proxiesForURL(const String&);
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.cpp b/Source/WebKit2/PluginProcess/PluginProcess.cpp
index 6124f9a..58eedba 100644
--- a/Source/WebKit2/PluginProcess/PluginProcess.cpp
+++ b/Source/WebKit2/PluginProcess/PluginProcess.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcess.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "MachPort.h"
#include "NetscapePluginModule.h"
#include "PluginProcessProxyMessages.h"
@@ -55,11 +56,12 @@ PluginProcess::~PluginProcess()
{
}
-void PluginProcess::initializeConnection(CoreIPC::Connection::Identifier serverIdentifier)
+void PluginProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, RunLoop* runLoop)
{
ASSERT(!m_connection);
- m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, RunLoop::main());
+ m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, runLoop);
+ m_connection->setDidCloseOnConnectionWorkQueueCallback(didCloseOnConnectionWorkQueue);
m_connection->open();
}
@@ -109,7 +111,14 @@ void PluginProcess::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::Mess
{
}
-void PluginProcess::initialize(const PluginProcessCreationParameters& parameters)
+NO_RETURN void PluginProcess::didFailToSendSyncMessage(CoreIPC::Connection*)
+{
+ // We were making a synchronous call to a web process that doesn't exist any more.
+ // Callers are unlikely to be prepared for an error like this, so it's best to exit immediately.
+ exit(0);
+}
+
+void PluginProcess::initializePluginProcess(const PluginProcessCreationParameters& parameters)
{
ASSERT(!m_pluginModule);
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.h b/Source/WebKit2/PluginProcess/PluginProcess.h
index 6c221e7..89d4bcd 100644
--- a/Source/WebKit2/PluginProcess/PluginProcess.h
+++ b/Source/WebKit2/PluginProcess/PluginProcess.h
@@ -44,7 +44,7 @@ class PluginProcess : ChildProcess {
public:
static PluginProcess& shared();
- void initializeConnection(CoreIPC::Connection::Identifier);
+ void initialize(CoreIPC::Connection::Identifier, RunLoop*);
void removeWebProcessConnection(WebProcessConnection* webProcessConnection);
NetscapePluginModule* netscapePluginModule();
@@ -65,10 +65,11 @@ private:
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
virtual void didClose(CoreIPC::Connection*);
virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
+ virtual void didFailToSendSyncMessage(CoreIPC::Connection*);
// Message handlers.
void didReceivePluginProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
- void initialize(const PluginProcessCreationParameters&);
+ void initializePluginProcess(const PluginProcessCreationParameters&);
void createWebProcessConnection();
void shutdownTimerFired();
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.messages.in b/Source/WebKit2/PluginProcess/PluginProcess.messages.in
index e9b0fd3..3d45e0e 100644
--- a/Source/WebKit2/PluginProcess/PluginProcess.messages.in
+++ b/Source/WebKit2/PluginProcess/PluginProcess.messages.in
@@ -23,8 +23,8 @@
#if ENABLE(PLUGIN_PROCESS)
messages -> PluginProcess {
- # Initializes the plug-in.
- Initialize(WebKit::PluginProcessCreationParameters processCreationParameters)
+ # Initializes the plug-in process.
+ InitializePluginProcess(WebKit::PluginProcessCreationParameters processCreationParameters)
# Creates a web process connection. When the connection has been created,
# The plug-in process sends back a DidCreateWebProcessConnection message with
diff --git a/Source/WebKit2/PluginProcess/WebProcessConnection.cpp b/Source/WebKit2/PluginProcess/WebProcessConnection.cpp
index ae5d7ca..b58f4d0 100644
--- a/Source/WebKit2/PluginProcess/WebProcessConnection.cpp
+++ b/Source/WebKit2/PluginProcess/WebProcessConnection.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "WebProcessConnection.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "NPRemoteObjectMap.h"
#include "PluginControllerProxy.h"
#include "PluginProcess.h"
diff --git a/Source/WebKit2/PluginProcess/mac/PluginControllerProxyMac.mm b/Source/WebKit2/PluginProcess/mac/PluginControllerProxyMac.mm
index 40d4f6d..610ca32 100644
--- a/Source/WebKit2/PluginProcess/mac/PluginControllerProxyMac.mm
+++ b/Source/WebKit2/PluginProcess/mac/PluginControllerProxyMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
+#import "config.h"
+#import "PluginControllerProxy.h"
-#include "PluginControllerProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
-#include <QuartzCore/QuartzCore.h>
-#include "PluginProcess.h"
-#include "WebKitSystemInterface.h"
+#import <QuartzCore/QuartzCore.h>
+#import "PluginProcess.h"
+#import "WebKitSystemInterface.h"
using namespace WebCore;
diff --git a/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm b/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm
index 3919c8b..5a54719 100644
--- a/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm
+++ b/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm
@@ -23,18 +23,19 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
+#import "PluginProcess.h"
+
#if ENABLE(PLUGIN_PROCESS)
// FIXME (WebKit2) <rdar://problem/8728860> WebKit2 needs to be localized
#define UI_STRING(__str, __desc) [NSString stringWithUTF8String:__str]
-
-#include "PluginProcess.h"
-#include "NetscapePlugin.h"
-#include "PluginProcessShim.h"
-#include "PluginProcessCreationParameters.h"
-#include <WebKitSystemInterface.h>
-#include <dlfcn.h>
+#import "NetscapePlugin.h"
+#import "PluginProcessShim.h"
+#import "PluginProcessCreationParameters.h"
+#import <WebKitSystemInterface.h>
+#import <dlfcn.h>
namespace WebKit {
diff --git a/Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm b/Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm
index 36cc2a1..d39353a 100644
--- a/Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm
+++ b/Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm
@@ -23,18 +23,19 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
+#import "config.h"
+#import "PluginProcessMain.h"
-#include "PluginProcessMain.h"
+#if ENABLE(PLUGIN_PROCESS)
-#include "CommandLine.h"
-#include "PluginProcess.h"
-#include "RunLoop.h"
-#include <runtime/InitializeThreading.h>
-#include <servers/bootstrap.h>
-#include <wtf/text/CString.h>
-#include <wtf/text/WTFString.h>
-#include <WebKitSystemInterface.h>
+#import "CommandLine.h"
+#import "PluginProcess.h"
+#import "RunLoop.h"
+#import <runtime/InitializeThreading.h>
+#import <servers/bootstrap.h>
+#import <wtf/text/CString.h>
+#import <wtf/text/WTFString.h>
+#import <WebKitSystemInterface.h>
// FIXME: We should be doing this another way.
extern "C" kern_return_t bootstrap_look_up2(mach_port_t, const name_t, mach_port_t*, pid_t, uint64_t);
@@ -84,7 +85,7 @@ int PluginProcessMain(const CommandLine& commandLine)
PluginProcess::shared().initializeShim();
// Initialize the plug-in process connection.
- PluginProcess::shared().initializeConnection(serverPort);
+ PluginProcess::shared().initialize(serverPort, RunLoop::main());
[NSApplication sharedApplication];
diff --git a/Source/WebKit2/Scripts/generate-forwarding-headers.pl b/Source/WebKit2/Scripts/generate-forwarding-headers.pl
index 6e2b2c2..738d413 100755
--- a/Source/WebKit2/Scripts/generate-forwarding-headers.pl
+++ b/Source/WebKit2/Scripts/generate-forwarding-headers.pl
@@ -78,7 +78,7 @@ sub collectFameworkHeaderPaths {
my $file = $_;
if ($filePath =~ '\.h$' && $filePath !~ "ForwardingHeaders" && grep{$file eq $_} keys %neededHeaders) {
my $headerPath = substr($filePath, length(File::Spec->catfile($srcRoot, $framework)) + 1 );
- push(@frameworkHeaders, $headerPath) unless (grep($headerPath =~ "$_/", @skippedPrefixes));
+ push(@frameworkHeaders, $headerPath) unless (grep($headerPath =~ "$_/", @skippedPrefixes) || $headerPath =~ "config.h");
}
}
diff --git a/Source/WebKit2/Scripts/webkit2/messages.py b/Source/WebKit2/Scripts/webkit2/messages.py
index 8fc0eaa..800dc39 100644
--- a/Source/WebKit2/Scripts/webkit2/messages.py
+++ b/Source/WebKit2/Scripts/webkit2/messages.py
@@ -48,6 +48,7 @@ _license_header = """/*
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
"""
class MessageReceiver(object):
@@ -255,9 +256,13 @@ def struct_or_class(namespace, type):
'WebCore::PrintInfo',
'WebCore::ViewportArguments',
'WebCore::WindowFeatures',
+ 'WebKit::ContextMenuState',
'WebKit::DrawingAreaInfo',
'WebKit::PlatformPopupMenuData',
'WebKit::PluginProcessCreationParameters',
+ 'WebKit::PrintInfo',
+ 'WebKit::SelectionState',
+ 'WebKit::TextCheckerState',
'WebKit::WebNavigationDataStore',
'WebKit::WebOpenPanelParameters::Data',
'WebKit::WebPageCreationParameters',
@@ -318,7 +323,6 @@ def generate_messages_header(file):
result = []
result.append(_license_header)
- result.append('\n')
result.append('#ifndef %s\n' % header_guard)
result.append('#define %s\n\n' % header_guard)
@@ -371,9 +375,13 @@ def async_case_statement(receiver, message):
def sync_case_statement(receiver, message):
+ dispatch_function = 'handleMessage'
+ if message.is_variadic:
+ dispatch_function += 'Variadic'
+
result = []
result.append(' case Messages::%s::%s:\n' % (receiver.name, message.id()))
- result.append(' CoreIPC::handleMessage<Messages::%s::%s>(arguments, reply, this, &%s);\n' % (receiver.name, message.name, handler_function(receiver, message)))
+ result.append(' CoreIPC::%s<Messages::%s::%s>(arguments, reply, this, &%s);\n' % (dispatch_function, receiver.name, message.name, handler_function(receiver, message)))
# FIXME: Handle delayed replies
result.append(' return CoreIPC::AutomaticReply;\n')
return surround_in_condition(''.join(result), message.condition)
@@ -417,6 +425,7 @@ def headers_for_type(type):
'WebCore::KeypressCommand': '<WebCore/KeyboardEvent.h>',
'WebCore::PluginInfo': '<WebCore/PluginData.h>',
'WebCore::TextCheckingResult': '<WebCore/EditorClient.h>',
+ 'WebKit::WebGestureEvent': '"WebEvent.h"',
'WebKit::WebKeyboardEvent': '"WebEvent.h"',
'WebKit::WebMouseEvent': '"WebEvent.h"',
'WebKit::WebTouchEvent': '"WebEvent.h"',
@@ -468,6 +477,7 @@ def generate_message_handler(file):
result = []
result.append(_license_header)
+ result.append('#include "config.h"\n')
result.append('\n')
if receiver.condition:
diff --git a/Source/WebKit2/Scripts/webkit2/messages_unittest.py b/Source/WebKit2/Scripts/webkit2/messages_unittest.py
index 25123c0..8ed8cee 100644
--- a/Source/WebKit2/Scripts/webkit2/messages_unittest.py
+++ b/Source/WebKit2/Scripts/webkit2/messages_unittest.py
@@ -47,6 +47,8 @@ _messages_file_contents = """# Copyright (C) 2010 Apple Inc. All rights reserved
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#include "config.h"
+
#if ENABLE(WEBKIT2)
messages -> WebPage {
@@ -478,6 +480,8 @@ _expected_receiver_implementation = """/*
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
+
#if ENABLE(WEBKIT2)
#include "WebPage.h"
diff --git a/Source/WebKit2/Shared/API/c/WKArray.cpp b/Source/WebKit2/Shared/API/c/WKArray.cpp
index 9e20b7e..3cc98b8 100644
--- a/Source/WebKit2/Shared/API/c/WKArray.cpp
+++ b/Source/WebKit2/Shared/API/c/WKArray.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKArray.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/Shared/API/c/WKBase.h b/Source/WebKit2/Shared/API/c/WKBase.h
index f906f9f..1db647a 100644
--- a/Source/WebKit2/Shared/API/c/WKBase.h
+++ b/Source/WebKit2/Shared/API/c/WKBase.h
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,6 +33,10 @@
#include <WebKit2/WKBaseWin.h>
#endif
+#if defined(BUILDING_GTK__)
+#include <WebKit2/WKBaseGtk.h>
+#endif
+
/* WebKit2 shared types */
typedef uint32_t WKTypeID;
@@ -49,6 +54,7 @@ typedef const struct OpaqueWKContextMenuItem* WKContextMenuItemRef;
typedef const struct OpaqueWKData* WKDataRef;
typedef const struct OpaqueWKDouble* WKDoubleRef;
typedef const struct OpaqueWKError* WKErrorRef;
+typedef const struct OpaqueWKGraphicsContext* WKGraphicsContextRef;
typedef const struct OpaqueWKImage* WKImageRef;
typedef const struct OpaqueWKSecurityOrigin* WKSecurityOriginRef;
typedef const struct OpaqueWKSerializedScriptValue* WKSerializedScriptValueRef;
@@ -92,6 +98,8 @@ typedef const struct OpaqueWKBundleBackForwardListItem* WKBundleBackForwardListI
typedef const struct OpaqueWKBundleDOMCSSStyleDeclaration* WKBundleCSSStyleDeclarationRef;
typedef const struct OpaqueWKBundleFrame* WKBundleFrameRef;
typedef const struct OpaqueWKBundleHitTestResult* WKBundleHitTestResultRef;
+typedef const struct OpaqueWKBundleInspector* WKBundleInspectorRef;
+typedef const struct OpaqueWKBundleNavigationAction* WKBundleNavigationActionRef;
typedef const struct OpaqueWKBundleNodeHandle* WKBundleNodeHandleRef;
typedef const struct OpaqueWKBundlePage* WKBundlePageRef;
typedef const struct OpaqueWKBundlePageGroup* WKBundlePageGroupRef;
@@ -99,8 +107,6 @@ typedef const struct OpaqueWKBundlePageOverlay* WKBundlePageOverlayRef;
typedef const struct OpaqueWKBundleRangeHandle* WKBundleRangeHandleRef;
typedef const struct OpaqueWKBundleScriptWorld* WKBundleScriptWorldRef;
-/* These rules should stay the same as in JavaScriptCore/API/JSBase.h */
-
#undef WK_EXPORT
#if defined(WK_NO_EXPORT)
#define WK_EXPORT
diff --git a/Source/WebKit2/Shared/API/c/WKCertificateInfo.cpp b/Source/WebKit2/Shared/API/c/WKCertificateInfo.cpp
index c5a3ad9..45ec627 100644
--- a/Source/WebKit2/Shared/API/c/WKCertificateInfo.cpp
+++ b/Source/WebKit2/Shared/API/c/WKCertificateInfo.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKCertificateInfo.h"
#include "WebCertificateInfo.h"
diff --git a/Source/WebKit2/Shared/API/c/WKContextMenuItem.cpp b/Source/WebKit2/Shared/API/c/WKContextMenuItem.cpp
index a4eaa53..c04aab1 100644
--- a/Source/WebKit2/Shared/API/c/WKContextMenuItem.cpp
+++ b/Source/WebKit2/Shared/API/c/WKContextMenuItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKContextMenuItem.h"
#include "MutableArray.h"
diff --git a/Source/WebKit2/Shared/API/c/WKData.cpp b/Source/WebKit2/Shared/API/c/WKData.cpp
index aefe795..b8253aa 100644
--- a/Source/WebKit2/Shared/API/c/WKData.cpp
+++ b/Source/WebKit2/Shared/API/c/WKData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKData.h"
#include "WebData.h"
diff --git a/Source/WebKit2/Shared/API/c/WKDictionary.cpp b/Source/WebKit2/Shared/API/c/WKDictionary.cpp
index 6b336bf..dc423de 100644
--- a/Source/WebKit2/Shared/API/c/WKDictionary.cpp
+++ b/Source/WebKit2/Shared/API/c/WKDictionary.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKDictionary.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/Shared/API/c/WKError.cpp b/Source/WebKit2/Shared/API/c/WKError.cpp
index 395cf3a..148bd62 100644
--- a/Source/WebKit2/Shared/API/c/WKError.cpp
+++ b/Source/WebKit2/Shared/API/c/WKError.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKError.h"
#include "WebError.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp b/Source/WebKit2/Shared/API/c/WKGraphicsContext.cpp
index 11f929c..5d80dfa 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp
+++ b/Source/WebKit2/Shared/API/c/WKGraphicsContext.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,14 +23,15 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebDatabaseManager.h"
+#include "config.h"
+#include "WKGraphicsContext.h"
-namespace WebKit {
+#include "WKSharedAPICast.h"
+#include "WebGraphicsContext.h"
-String WebDatabaseManager::databaseDirectory() const
+using namespace WebKit;
+
+WKTypeID WKGraphicsContextGetTypeID()
{
- // FIXME: Implement.
- return "";
+ return toAPI(WebGraphicsContext::APIType);
}
-
-} // namespace WebKit
diff --git a/Source/WebKit2/Shared/API/c/WKGraphicsContext.h b/Source/WebKit2/Shared/API/c/WKGraphicsContext.h
new file mode 100644
index 0000000..c9d0a52
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/WKGraphicsContext.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKGraphicsContext_h
+#define WKGraphicsContext_h
+
+#include <WebKit2/WKBase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT WKTypeID WKGraphicsContextGetTypeID();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKGraphicsContext_h */
diff --git a/Source/WebKit2/Shared/API/c/WKImage.cpp b/Source/WebKit2/Shared/API/c/WKImage.cpp
index 0bf21df..23278b3 100644
--- a/Source/WebKit2/Shared/API/c/WKImage.cpp
+++ b/Source/WebKit2/Shared/API/c/WKImage.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKImage.h"
#include "WKSharedAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/WKMutableArray.cpp b/Source/WebKit2/Shared/API/c/WKMutableArray.cpp
index 56bd72f..1ae65c1 100644
--- a/Source/WebKit2/Shared/API/c/WKMutableArray.cpp
+++ b/Source/WebKit2/Shared/API/c/WKMutableArray.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKMutableArray.h"
#include "MutableArray.h"
diff --git a/Source/WebKit2/Shared/API/c/WKMutableDictionary.cpp b/Source/WebKit2/Shared/API/c/WKMutableDictionary.cpp
index df9f5a7..0d96ca1 100644
--- a/Source/WebKit2/Shared/API/c/WKMutableDictionary.cpp
+++ b/Source/WebKit2/Shared/API/c/WKMutableDictionary.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKMutableDictionary.h"
#include "MutableDictionary.h"
diff --git a/Source/WebKit2/Shared/API/c/WKNumber.cpp b/Source/WebKit2/Shared/API/c/WKNumber.cpp
index 4a413e1..f2cf0f8 100644
--- a/Source/WebKit2/Shared/API/c/WKNumber.cpp
+++ b/Source/WebKit2/Shared/API/c/WKNumber.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKNumber.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp b/Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp
index 761cbf8..ef51335 100644
--- a/Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp
+++ b/Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKSecurityOrigin.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/WKSerializedScriptValue.cpp b/Source/WebKit2/Shared/API/c/WKSerializedScriptValue.cpp
index 4c642f0..f45c388 100644
--- a/Source/WebKit2/Shared/API/c/WKSerializedScriptValue.cpp
+++ b/Source/WebKit2/Shared/API/c/WKSerializedScriptValue.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKSerializedScriptValue.h"
#include "WKSerializedScriptValuePrivate.h"
diff --git a/Source/WebKit2/Shared/API/c/WKSharedAPICast.h b/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
index 6dc80e8..ac3b420 100644
--- a/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
+++ b/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
@@ -41,6 +41,8 @@
#include "WebNumber.h"
#include "WebString.h"
#include "WebURL.h"
+#include "WebURLRequest.h"
+#include "WebURLResponse.h"
#include <WebCore/ContextMenuItem.h>
#include <WebCore/FloatRect.h>
#include <WebCore/FrameLoaderTypes.h>
@@ -56,6 +58,7 @@ class MutableDictionary;
class WebCertificateInfo;
class WebContextMenuItem;
class WebData;
+class WebGraphicsContext;
class WebImage;
class WebSecurityOrigin;
class WebSerializedScriptValue;
@@ -78,6 +81,7 @@ WK_ADD_API_MAPPING(WKDataRef, WebData)
WK_ADD_API_MAPPING(WKDictionaryRef, ImmutableDictionary)
WK_ADD_API_MAPPING(WKDoubleRef, WebDouble)
WK_ADD_API_MAPPING(WKErrorRef, WebError)
+WK_ADD_API_MAPPING(WKGraphicsContextRef, WebGraphicsContext)
WK_ADD_API_MAPPING(WKImageRef, WebImage)
WK_ADD_API_MAPPING(WKMutableArrayRef, MutableArray)
WK_ADD_API_MAPPING(WKMutableDictionaryRef, MutableDictionary)
@@ -172,6 +176,16 @@ inline ProxyingRefPtr<WebError> toAPI(const WebCore::ResourceError& error)
return ProxyingRefPtr<WebError>(WebError::create(error));
}
+inline ProxyingRefPtr<WebURLRequest> toAPI(const WebCore::ResourceRequest& request)
+{
+ return ProxyingRefPtr<WebURLRequest>(WebURLRequest::create(request));
+}
+
+inline ProxyingRefPtr<WebURLResponse> toAPI(const WebCore::ResourceResponse& response)
+{
+ return ProxyingRefPtr<WebURLResponse>(WebURLResponse::create(response));
+}
+
/* Geometry conversions */
inline WebCore::FloatRect toFloatRect(const WKRect& wkRect)
diff --git a/Source/WebKit2/Shared/API/c/WKString.cpp b/Source/WebKit2/Shared/API/c/WKString.cpp
index 14f40fa..72841a4 100644
--- a/Source/WebKit2/Shared/API/c/WKString.cpp
+++ b/Source/WebKit2/Shared/API/c/WKString.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKString.h"
#include "WKStringPrivate.h"
diff --git a/Source/WebKit2/Shared/API/c/WKType.cpp b/Source/WebKit2/Shared/API/c/WKType.cpp
index a499737..f0e4ea8 100644
--- a/Source/WebKit2/Shared/API/c/WKType.cpp
+++ b/Source/WebKit2/Shared/API/c/WKType.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKType.h"
#include "APIObject.h"
diff --git a/Source/WebKit2/Shared/API/c/WKURL.cpp b/Source/WebKit2/Shared/API/c/WKURL.cpp
index 0060b34..6b7e567 100644
--- a/Source/WebKit2/Shared/API/c/WKURL.cpp
+++ b/Source/WebKit2/Shared/API/c/WKURL.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURL.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/WKURLRequest.cpp b/Source/WebKit2/Shared/API/c/WKURLRequest.cpp
index 6ea66ec..433db05 100644
--- a/Source/WebKit2/Shared/API/c/WKURLRequest.cpp
+++ b/Source/WebKit2/Shared/API/c/WKURLRequest.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURLRequest.h"
#include "WKAPICast.h"
@@ -41,3 +42,8 @@ WKURLRequestRef WKURLRequestCreateWithWKURL(WKURLRef url)
{
return toAPI(WebURLRequest::create(KURL(KURL(), toImpl(url)->string())).leakRef());
}
+
+WKURLRef WKURLRequestCopyURL(WKURLRequestRef requestRef)
+{
+ return toCopiedURLAPI(toImpl(requestRef)->url());
+}
diff --git a/Source/WebKit2/Shared/API/c/WKURLRequest.h b/Source/WebKit2/Shared/API/c/WKURLRequest.h
index d78968d..7d146f2 100644
--- a/Source/WebKit2/Shared/API/c/WKURLRequest.h
+++ b/Source/WebKit2/Shared/API/c/WKURLRequest.h
@@ -36,6 +36,8 @@ WK_EXPORT WKTypeID WKURLRequestGetTypeID();
WK_EXPORT WKURLRequestRef WKURLRequestCreateWithWKURL(WKURLRef);
+WK_EXPORT WKURLRef WKURLRequestCopyURL(WKURLRequestRef);
+
#ifdef __cplusplus
}
#endif
diff --git a/Source/WebKit2/Shared/API/c/WKURLResponse.cpp b/Source/WebKit2/Shared/API/c/WKURLResponse.cpp
index 12537bd..7d8d68b 100644
--- a/Source/WebKit2/Shared/API/c/WKURLResponse.cpp
+++ b/Source/WebKit2/Shared/API/c/WKURLResponse.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURLResponse.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/WKUserContentURLPattern.cpp b/Source/WebKit2/Shared/API/c/WKUserContentURLPattern.cpp
index 3eb24c4..f09610f 100644
--- a/Source/WebKit2/Shared/API/c/WKUserContentURLPattern.cpp
+++ b/Source/WebKit2/Shared/API/c/WKUserContentURLPattern.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKUserContentURLPattern.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/cf/WKStringCF.cpp b/Source/WebKit2/Shared/API/c/cf/WKStringCF.cpp
index b89110e..9a49e5a 100644
--- a/Source/WebKit2/Shared/API/c/cf/WKStringCF.cpp
+++ b/Source/WebKit2/Shared/API/c/cf/WKStringCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKStringCF.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/cf/WKURLCF.cpp b/Source/WebKit2/Shared/API/c/cf/WKURLCF.cpp
index a4627ce..e1d4ee7 100644
--- a/Source/WebKit2/Shared/API/c/cf/WKURLCF.cpp
+++ b/Source/WebKit2/Shared/API/c/cf/WKURLCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURLCF.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/cf/WKURLRequestCF.cpp b/Source/WebKit2/Shared/API/c/cf/WKURLRequestCF.cpp
index 98c801a..7422fd2 100644
--- a/Source/WebKit2/Shared/API/c/cf/WKURLRequestCF.cpp
+++ b/Source/WebKit2/Shared/API/c/cf/WKURLRequestCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURLRequestCF.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/cf/WKURLResponseCF.cpp b/Source/WebKit2/Shared/API/c/cf/WKURLResponseCF.cpp
index 36d3f00..42473c8 100644
--- a/Source/WebKit2/Shared/API/c/cf/WKURLResponseCF.cpp
+++ b/Source/WebKit2/Shared/API/c/cf/WKURLResponseCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKURLResponseCF.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.cpp b/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.cpp
new file mode 100644
index 0000000..aa7a77e
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "config.h"
+#include "WKGraphicsContextCG.h"
+
+#include "WKSharedAPICast.h"
+#include "WebGraphicsContext.h"
+
+using namespace WebKit;
+
+CGContextRef WKGraphicsContextGetCGContext(WKGraphicsContextRef graphicsContextRef)
+{
+ return toImpl(graphicsContextRef)->platformContext();
+}
diff --git a/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.h b/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.h
new file mode 100644
index 0000000..06e9df0
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/cg/WKGraphicsContextCG.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKGraphicsContextCG_h
+#define WKGraphicsContextCG_h
+
+#include <CoreGraphics/CGContext.h>
+#include <WebKit2/WKBase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT CGContextRef WKGraphicsContextGetCGContext(WKGraphicsContextRef graphicsContext);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKGraphicsContextCG_h */
diff --git a/Source/WebKit2/Shared/API/c/cg/WKImageCG.cpp b/Source/WebKit2/Shared/API/c/cg/WKImageCG.cpp
index 34a8bf1..61b5f17 100644
--- a/Source/WebKit2/Shared/API/c/cg/WKImageCG.cpp
+++ b/Source/WebKit2/Shared/API/c/cg/WKImageCG.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKImageCG.h"
#include "ShareableBitmap.h"
diff --git a/Source/JavaScriptCore/wtf/OwnArrayPtrCommon.h b/Source/WebKit2/Shared/API/c/gtk/WKBaseGtk.h
index 0113aff..8f34ed3 100644
--- a/Source/JavaScriptCore/wtf/OwnArrayPtrCommon.h
+++ b/Source/WebKit2/Shared/API/c/gtk/WKBaseGtk.h
@@ -1,5 +1,7 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,18 +25,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WTF_OwnArrayPtrCommon_h
-#define WTF_OwnArrayPtrCommon_h
+#ifndef WKBaseGtk_h
+#define WKBaseGtk_h
-namespace WTF {
+#ifndef WKBase_h
+#error "Please #include \"WKBase.h\" instead of this file directly."
+#endif
-template<typename T> inline void deleteOwnedArrayPtr(T* ptr)
-{
- typedef char known[sizeof(T) ? 1 : -1];
- if (sizeof(known))
- delete [] ptr;
-}
+typedef const struct OpaqueWKView* WKViewRef;
-} // namespace WTF
-
-#endif // WTF_OwnArrayPtrCommon_h
+#endif /* WKBaseGtk_h */
diff --git a/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.cpp b/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.cpp
new file mode 100644
index 0000000..69695f1
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 Igalia SL All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "config.h"
+#include "WKGraphicsContextGtk.h"
+
+#include "WKSharedAPICast.h"
+#include "WebGraphicsContext.h"
+
+using namespace WebKit;
+
+cairo_t* WKGraphicsContextGetGtkContext(WKGraphicsContextRef graphicsContextRef)
+{
+ return toImpl(graphicsContextRef)->platformContext();
+}
diff --git a/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.h b/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.h
new file mode 100644
index 0000000..25fcfc4
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/gtk/WKGraphicsContextGtk.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2011 Igalia SL All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKGraphicsContextGtk_h
+#define WKGraphicsContextGtk_h
+
+#include <WebKit2/WKBase.h>
+
+#include <cairo.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT cairo_t* WKGraphicsContextGetGtkContext(WKGraphicsContextRef);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKGraphicsContextGtk_h */
diff --git a/Source/WebKit2/Shared/API/c/mac/WKCertificateInfoMac.mm b/Source/WebKit2/Shared/API/c/mac/WKCertificateInfoMac.mm
index 2ffc1f5..a2f348d 100644
--- a/Source/WebKit2/Shared/API/c/mac/WKCertificateInfoMac.mm
+++ b/Source/WebKit2/Shared/API/c/mac/WKCertificateInfoMac.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WKCertificateInfoMac.h"
+#import "config.h"
+#import "WKCertificateInfoMac.h"
-#include "WKAPICast.h"
-#include "WebCertificateInfo.h"
+#import "WKAPICast.h"
+#import "WebCertificateInfo.h"
using namespace WebKit;
diff --git a/Source/WebKit2/Shared/API/c/mac/WKURLRequestNS.mm b/Source/WebKit2/Shared/API/c/mac/WKURLRequestNS.mm
index 7cc69fa..081bbd7 100644
--- a/Source/WebKit2/Shared/API/c/mac/WKURLRequestNS.mm
+++ b/Source/WebKit2/Shared/API/c/mac/WKURLRequestNS.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WKURLRequestNS.h"
+#import "config.h"
+#import "WKURLRequestNS.h"
-#include "WKAPICast.h"
-#include "WebURLRequest.h"
+#import "WKAPICast.h"
+#import "WebURLRequest.h"
using namespace WebKit;
diff --git a/Source/WebKit2/Shared/API/c/mac/WKURLResponseNS.mm b/Source/WebKit2/Shared/API/c/mac/WKURLResponseNS.mm
index 79b874d..f19883e 100644
--- a/Source/WebKit2/Shared/API/c/mac/WKURLResponseNS.mm
+++ b/Source/WebKit2/Shared/API/c/mac/WKURLResponseNS.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WKURLResponseNS.h"
+#import "config.h"
+#import "WKURLResponseNS.h"
-#include "WKAPICast.h"
-#include "WebURLResponse.h"
+#import "WKAPICast.h"
+#import "WebURLResponse.h"
using namespace WebKit;
diff --git a/Source/WebKit2/Shared/API/c/win/WKCertificateInfoWin.cpp b/Source/WebKit2/Shared/API/c/win/WKCertificateInfoWin.cpp
index f4c7bb2..ada20ef 100644
--- a/Source/WebKit2/Shared/API/c/win/WKCertificateInfoWin.cpp
+++ b/Source/WebKit2/Shared/API/c/win/WKCertificateInfoWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKCertificateInfoWin.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/Shared/APIObject.h b/Source/WebKit2/Shared/APIObject.h
index 70ed0ba..10149b0 100644
--- a/Source/WebKit2/Shared/APIObject.h
+++ b/Source/WebKit2/Shared/APIObject.h
@@ -44,6 +44,7 @@ public:
TypeData,
TypeDictionary,
TypeError,
+ TypeGraphicsContext,
TypeImage,
TypeProtectionSpace,
TypeSecurityOrigin,
@@ -85,6 +86,8 @@ public:
TypeBundleBackForwardListItem,
TypeBundleFrame,
TypeBundleHitTestResult,
+ TypeBundleInspector,
+ TypeBundleNavigationAction,
TypeBundleNodeHandle,
TypeBundlePage,
TypeBundlePageGroup,
diff --git a/Source/WebKit2/Shared/ChildProcess.cpp b/Source/WebKit2/Shared/ChildProcess.cpp
index 06217fd..d45f4f2 100644
--- a/Source/WebKit2/Shared/ChildProcess.cpp
+++ b/Source/WebKit2/Shared/ChildProcess.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChildProcess.h"
#if !OS(WINDOWS)
@@ -47,13 +48,13 @@ NO_RETURN static void watchdogCallback()
_exit(EXIT_FAILURE);
}
-void ChildProcess::didCloseOnConnectionWorkQueue(WorkQueue* workQueue, CoreIPC::Connection*)
+void ChildProcess::didCloseOnConnectionWorkQueue(WorkQueue& workQueue, CoreIPC::Connection*)
{
// If the connection has been closed and we haven't responded in the main thread for 10 seconds
// the process will exit forcibly.
static const double watchdogDelay = 10.0;
- workQueue->scheduleWorkAfterDelay(WorkItem::create(watchdogCallback), watchdogDelay);
+ workQueue.scheduleWorkAfterDelay(WorkItem::create(watchdogCallback), watchdogDelay);
}
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/ChildProcess.h b/Source/WebKit2/Shared/ChildProcess.h
index 8c5e8e3..7286d52 100644
--- a/Source/WebKit2/Shared/ChildProcess.h
+++ b/Source/WebKit2/Shared/ChildProcess.h
@@ -36,8 +36,7 @@ protected:
ChildProcess();
~ChildProcess();
-private:
- void didCloseOnConnectionWorkQueue(WorkQueue*, CoreIPC::Connection*);
+ static void didCloseOnConnectionWorkQueue(WorkQueue&, CoreIPC::Connection*);
};
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/ImmutableArray.cpp b/Source/WebKit2/Shared/ImmutableArray.cpp
index 2be62fd..67b2a34 100644
--- a/Source/WebKit2/Shared/ImmutableArray.cpp
+++ b/Source/WebKit2/Shared/ImmutableArray.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ImmutableArray.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/ImmutableDictionary.cpp b/Source/WebKit2/Shared/ImmutableDictionary.cpp
index 488da2d..1af988e 100644
--- a/Source/WebKit2/Shared/ImmutableDictionary.cpp
+++ b/Source/WebKit2/Shared/ImmutableDictionary.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ImmutableDictionary.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/Shared/LayerTreeContext.h b/Source/WebKit2/Shared/LayerTreeContext.h
new file mode 100644
index 0000000..e2938aa
--- /dev/null
+++ b/Source/WebKit2/Shared/LayerTreeContext.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LayerTreeContext_h
+#define LayerTreeContext_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+namespace CoreIPC {
+ class ArgumentDecoder;
+ class ArgumentEncoder;
+}
+
+namespace WebKit {
+
+class LayerTreeContext {
+public:
+ LayerTreeContext();
+ ~LayerTreeContext();
+
+ void encode(CoreIPC::ArgumentEncoder*) const;
+ static bool decode(CoreIPC::ArgumentDecoder*, LayerTreeContext&);
+
+ bool isEmpty() const;
+
+#if PLATFORM(MAC)
+ uint32_t contextID;
+#endif
+};
+
+bool operator==(const LayerTreeContext&, const LayerTreeContext&);
+
+inline bool operator!=(const LayerTreeContext& a, const LayerTreeContext& b)
+{
+ return !(a == b);
+}
+
+};
+
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif // LayerTreeContext_h
diff --git a/Source/WebKit2/Shared/MutableArray.cpp b/Source/WebKit2/Shared/MutableArray.cpp
index 00f718e..0f3138f 100644
--- a/Source/WebKit2/Shared/MutableArray.cpp
+++ b/Source/WebKit2/Shared/MutableArray.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "MutableArray.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/MutableDictionary.cpp b/Source/WebKit2/Shared/MutableDictionary.cpp
index c151dd6..222caf3 100644
--- a/Source/WebKit2/Shared/MutableDictionary.cpp
+++ b/Source/WebKit2/Shared/MutableDictionary.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "MutableDictionary.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/NativeWebKeyboardEvent.h b/Source/WebKit2/Shared/NativeWebKeyboardEvent.h
index 9c4e480..cdf1aef 100644
--- a/Source/WebKit2/Shared/NativeWebKeyboardEvent.h
+++ b/Source/WebKit2/Shared/NativeWebKeyboardEvent.h
@@ -30,11 +30,7 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSView;
-#else
-class NSView;
-#endif
+OBJC_CLASS NSView;
#elif PLATFORM(QT)
#include <QKeyEvent>
#endif
diff --git a/Source/WebKit2/Shared/OriginAndDatabases.cpp b/Source/WebKit2/Shared/OriginAndDatabases.cpp
index 4db7bf0..7286e5e 100644
--- a/Source/WebKit2/Shared/OriginAndDatabases.cpp
+++ b/Source/WebKit2/Shared/OriginAndDatabases.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "OriginAndDatabases.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/PlatformPopupMenuData.cpp b/Source/WebKit2/Shared/PlatformPopupMenuData.cpp
index 6d90ce5..51e0e6c 100644
--- a/Source/WebKit2/Shared/PlatformPopupMenuData.cpp
+++ b/Source/WebKit2/Shared/PlatformPopupMenuData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PlatformPopupMenuData.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/Plugins/NPIdentifierData.cpp b/Source/WebKit2/Shared/Plugins/NPIdentifierData.cpp
index 51dd6be..eeb8914 100644
--- a/Source/WebKit2/Shared/Plugins/NPIdentifierData.cpp
+++ b/Source/WebKit2/Shared/Plugins/NPIdentifierData.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "NPIdentifierData.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp b/Source/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
index 013d849..2fd7244 100644
--- a/Source/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
+++ b/Source/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "NPObjectMessageReceiver.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "NPIdentifierData.h"
#include "NPRemoteObjectMap.h"
#include "NPRuntimeUtilities.h"
diff --git a/Source/WebKit2/Shared/Plugins/NPObjectProxy.cpp b/Source/WebKit2/Shared/Plugins/NPObjectProxy.cpp
index e7fc47f..04a6e7d 100644
--- a/Source/WebKit2/Shared/Plugins/NPObjectProxy.cpp
+++ b/Source/WebKit2/Shared/Plugins/NPObjectProxy.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "NPObjectProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "ArgumentCoders.h"
#include "Connection.h"
#include "NPIdentifierData.h"
diff --git a/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp b/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
index 5fea618..bcf2a7c 100644
--- a/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
+++ b/Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "NPRemoteObjectMap.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "NPObjectMessageReceiver.h"
#include "NPObjectProxy.h"
#include "NPRuntimeUtilities.h"
diff --git a/Source/WebKit2/Shared/Plugins/NPVariantData.cpp b/Source/WebKit2/Shared/Plugins/NPVariantData.cpp
index b100589..5e4392b 100644
--- a/Source/WebKit2/Shared/Plugins/NPVariantData.cpp
+++ b/Source/WebKit2/Shared/Plugins/NPVariantData.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "NPVariantData.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
index fec00b3..a1f0833 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
+++ b/Source/WebKit2/Shared/Plugins/Netscape/NetscapePluginModule.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePluginModule.h"
#include "Module.h"
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm b/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
index 6ecacf0..544def3 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
+++ b/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "NetscapePluginModule.h"
+#import "config.h"
+#import "NetscapePluginModule.h"
-#include <WebCore/WebCoreNSStringExtras.h>
-#include <wtf/HashSet.h>
+#import <WebCore/WebCoreNSStringExtras.h>
+#import <wtf/HashSet.h>
using namespace WebCore;
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp b/Source/WebKit2/Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp
index f969ba4..d6287e3 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp
+++ b/Source/WebKit2/Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePluginModule.h"
#include <WebCore/FileSystem.h>
@@ -59,7 +60,7 @@ bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginInfoSto
if (!versionInfoSize)
return false;
- OwnArrayPtr<char> versionInfoData(new char[versionInfoSize]);
+ OwnArrayPtr<char> versionInfoData = adoptArrayPtr(new char[versionInfoSize]);
if (!::GetFileVersionInfoW(pathCopy.charactersWithNullTermination(), 0, versionInfoSize, versionInfoData.get()))
return false;
diff --git a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
index a02cdad..a651d3b 100644
--- a/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
+++ b/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePluginModule.h"
#include "PluginDatabase.h"
diff --git a/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp b/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp
index c95a825..06014a9 100644
--- a/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp
+++ b/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcessCreationParameters.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "ArgumentCoders.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/PrintInfo.cpp b/Source/WebKit2/Shared/PrintInfo.cpp
index 2a9c5e0..23d3ef9 100644
--- a/Source/WebKit2/Shared/PrintInfo.cpp
+++ b/Source/WebKit2/Shared/PrintInfo.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PrintInfo.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/PrintInfo.h b/Source/WebKit2/Shared/PrintInfo.h
index d6ccd4a..502be93 100644
--- a/Source/WebKit2/Shared/PrintInfo.h
+++ b/Source/WebKit2/Shared/PrintInfo.h
@@ -28,9 +28,10 @@
#include <wtf/Platform.h>
-#ifdef __OBJC__
-@class NSPrintInfo;
+#if PLATFORM(MAC)
+OBJC_CLASS NSPrintInfo;
#else
+// FIXME: This should use the windows equivalent.
class NSPrintInfo;
#endif
diff --git a/Source/WebKit2/Shared/SessionState.cpp b/Source/WebKit2/Shared/SessionState.cpp
index 109805f..b25289a 100644
--- a/Source/WebKit2/Shared/SessionState.cpp
+++ b/Source/WebKit2/Shared/SessionState.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "SessionState.h"
namespace CoreIPC {
diff --git a/Source/WebKit2/Shared/ShareableBitmap.cpp b/Source/WebKit2/Shared/ShareableBitmap.cpp
index 90fa0d8..e89cdb7 100644
--- a/Source/WebKit2/Shared/ShareableBitmap.cpp
+++ b/Source/WebKit2/Shared/ShareableBitmap.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ShareableBitmap.h"
#include "SharedMemory.h"
diff --git a/Source/WebKit2/Shared/UpdateInfo.cpp b/Source/WebKit2/Shared/UpdateInfo.cpp
index 182f75b..4afd693 100644
--- a/Source/WebKit2/Shared/UpdateInfo.cpp
+++ b/Source/WebKit2/Shared/UpdateInfo.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "UpdateInfo.h"
#include "WebCoreArgumentCoders.h"
@@ -31,7 +32,6 @@ namespace WebKit {
void UpdateInfo::encode(CoreIPC::ArgumentEncoder* encoder) const
{
- encoder->encode(timestamp);
encoder->encode(viewSize);
encoder->encode(scrollRect);
encoder->encode(scrollOffset);
@@ -42,8 +42,6 @@ void UpdateInfo::encode(CoreIPC::ArgumentEncoder* encoder) const
bool UpdateInfo::decode(CoreIPC::ArgumentDecoder* decoder, UpdateInfo& result)
{
- if (!decoder->decode(result.timestamp))
- return false;
if (!decoder->decode(result.viewSize))
return false;
if (!decoder->decode(result.scrollRect))
diff --git a/Source/WebKit2/Shared/UpdateInfo.h b/Source/WebKit2/Shared/UpdateInfo.h
index 2ceb164..7b5454e 100644
--- a/Source/WebKit2/Shared/UpdateInfo.h
+++ b/Source/WebKit2/Shared/UpdateInfo.h
@@ -41,14 +41,11 @@ class UpdateInfo {
WTF_MAKE_NONCOPYABLE(UpdateInfo);
public:
- UpdateInfo() : timestamp(0) { }
+ UpdateInfo() { }
void encode(CoreIPC::ArgumentEncoder*) const;
static bool decode(CoreIPC::ArgumentDecoder*, UpdateInfo&);
- // The timestamp of this update.
- double timestamp;
-
// The size of the web view.
WebCore::IntSize viewSize;
diff --git a/Source/WebKit2/Shared/VisitedLinkTable.cpp b/Source/WebKit2/Shared/VisitedLinkTable.cpp
index 746ec3e..09b7cc8 100644
--- a/Source/WebKit2/Shared/VisitedLinkTable.cpp
+++ b/Source/WebKit2/Shared/VisitedLinkTable.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "VisitedLinkTable.h"
#include "SharedMemory.h"
diff --git a/Source/WebKit2/Shared/WebBackForwardListItem.cpp b/Source/WebKit2/Shared/WebBackForwardListItem.cpp
index 07061e9..5f3ef94 100644
--- a/Source/WebKit2/Shared/WebBackForwardListItem.cpp
+++ b/Source/WebKit2/Shared/WebBackForwardListItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebBackForwardListItem.h"
#include "DataReference.h"
diff --git a/Source/WebKit2/Shared/WebContextMenuItem.cpp b/Source/WebKit2/Shared/WebContextMenuItem.cpp
index 55fa70a..a3322bb 100644
--- a/Source/WebKit2/Shared/WebContextMenuItem.cpp
+++ b/Source/WebKit2/Shared/WebContextMenuItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuItem.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/Shared/WebContextMenuItemData.cpp b/Source/WebKit2/Shared/WebContextMenuItemData.cpp
index aec8fa0..e872047 100644
--- a/Source/WebKit2/Shared/WebContextMenuItemData.cpp
+++ b/Source/WebKit2/Shared/WebContextMenuItemData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuItemData.h"
#include "APIObject.h"
diff --git a/Source/WebKit2/Shared/WebError.cpp b/Source/WebKit2/Shared/WebError.cpp
index a401d71..88204dd 100644
--- a/Source/WebKit2/Shared/WebError.cpp
+++ b/Source/WebKit2/Shared/WebError.cpp
@@ -23,7 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-
+#include "config.h"
#include "WebError.h"
#include <wtf/text/WTFString.h>
diff --git a/Source/WebKit2/Shared/WebEvent.cpp b/Source/WebKit2/Shared/WebEvent.cpp
index 429622c..f6738fa 100644
--- a/Source/WebKit2/Shared/WebEvent.cpp
+++ b/Source/WebKit2/Shared/WebEvent.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEvent.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/WebEvent.h b/Source/WebKit2/Shared/WebEvent.h
index f048d6e..361aa46 100644
--- a/Source/WebKit2/Shared/WebEvent.h
+++ b/Source/WebKit2/Shared/WebEvent.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -55,13 +55,20 @@ public:
KeyDown,
KeyUp,
RawKeyDown,
- Char
+ Char,
+
+#if ENABLE(GESTURE_EVENTS)
+ // WebGestureEvent
+ GestureScrollBegin,
+ GestureScrollEnd,
+#endif
+
#if ENABLE(TOUCH_EVENTS)
- ,
+ // WebTouchEvent
TouchStart,
TouchMove,
TouchEnd,
- TouchCancel
+ TouchCancel,
#endif
};
@@ -166,7 +173,7 @@ public:
WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Modifiers, double timestamp);
#if PLATFORM(MAC)
- WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Phase, Modifiers, double timestamp);
+ WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Phase, bool hasPreciseScrollingDeltas, Modifiers, double timestamp);
#endif
const WebCore::IntPoint position() const { return m_position; }
@@ -176,6 +183,7 @@ public:
Granularity granularity() const { return static_cast<Granularity>(m_granularity); }
#if PLATFORM(MAC)
Phase phase() const { return static_cast<Phase>(m_phase); }
+ bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
#endif
void encode(CoreIPC::ArgumentEncoder*) const;
@@ -191,6 +199,7 @@ private:
uint32_t m_granularity; // Granularity
#if PLATFORM(MAC)
uint32_t m_phase; // Phase
+ bool m_hasPreciseScrollingDeltas;
#endif
};
@@ -228,8 +237,30 @@ private:
bool m_isSystemKey;
};
-#if ENABLE(TOUCH_EVENTS)
+#if ENABLE(GESTURE_EVENTS)
+// FIXME: Move this class to its own header file.
+class WebGestureEvent : public WebEvent {
+public:
+ WebGestureEvent() { }
+ WebGestureEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, Modifiers, double timestamp);
+
+ const WebCore::IntPoint position() const { return m_position; }
+ const WebCore::IntPoint globalPosition() const { return m_globalPosition; }
+
+ void encode(CoreIPC::ArgumentEncoder*) const;
+ static bool decode(CoreIPC::ArgumentDecoder*, WebGestureEvent&);
+
+private:
+ static bool isGestureEventType(Type);
+
+ WebCore::IntPoint m_position;
+ WebCore::IntPoint m_globalPosition;
+};
+#endif // ENABLE(GESTURE_EVENTS)
+
+
+#if ENABLE(TOUCH_EVENTS)
// FIXME: Move this class to its own header file.
// FIXME: Having "Platform" in the name makes it sound like this event is platform-specific or low-
// level in some way. That doesn't seem to be the case.
diff --git a/Source/WebKit2/Shared/WebEventConversion.cpp b/Source/WebKit2/Shared/WebEventConversion.cpp
index 14c51b7..62147d0 100644
--- a/Source/WebKit2/Shared/WebEventConversion.cpp
+++ b/Source/WebKit2/Shared/WebEventConversion.cpp
@@ -23,10 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEventConversion.h"
#include "WebEvent.h"
-#include <WebCore/IntPoint.h>
namespace WebKit {
@@ -112,6 +112,8 @@ public:
m_metaKey = webEvent.metaKey();
#if PLATFORM(MAC)
m_phase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.phase());
+ m_hasPreciseScrollingDeltas = webEvent.hasPreciseScrollingDeltas();
+ m_timestamp = webEvent.timestamp();
#endif
}
};
@@ -166,6 +168,34 @@ WebCore::PlatformKeyboardEvent platform(const WebKeyboardEvent& webEvent)
return WebKit2PlatformKeyboardEvent(webEvent);
}
+#if ENABLE(GESTURE_EVENTS)
+class WebKit2PlatformGestureEvent : public WebCore::PlatformGestureEvent {
+public:
+ WebKit2PlatformGestureEvent(const WebGestureEvent& webEvent)
+ {
+ switch (webEvent.type()) {
+ case WebEvent::GestureScrollBegin:
+ m_type = PlatformGestureEvent::ScrollBeginType;
+ break;
+ case WebEvent::GestureScrollEnd:
+ m_type = PlatformGestureEvent::ScrollEndType;
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+
+ m_position = webEvent.position();
+ m_globalPosition = webEvent.globalPosition();
+ m_timestamp = webEvent.timestamp();
+ }
+};
+
+WebCore::PlatformGestureEvent platform(const WebGestureEvent& webEvent)
+{
+ return WebKit2PlatformGestureEvent(webEvent);
+}
+#endif
+
#if ENABLE(TOUCH_EVENTS)
class WebKit2PlatformTouchPoint : public WebCore::PlatformTouchPoint {
public:
diff --git a/Source/WebKit2/Shared/WebEventConversion.h b/Source/WebKit2/Shared/WebEventConversion.h
index 8fa0813..1fe87bc 100644
--- a/Source/WebKit2/Shared/WebEventConversion.h
+++ b/Source/WebKit2/Shared/WebEventConversion.h
@@ -29,6 +29,11 @@
#include <WebCore/PlatformKeyboardEvent.h>
#include <WebCore/PlatformMouseEvent.h>
#include <WebCore/PlatformWheelEvent.h>
+
+#if ENABLE(GESTURE_EVENTS)
+#include <WebCore/PlatformGestureEvent.h>
+#endif
+
#if ENABLE(TOUCH_EVENTS)
#include <WebCore/PlatformTouchEvent.h>
#include <WebCore/PlatformTouchPoint.h>
@@ -39,17 +44,29 @@ namespace WebKit {
class WebMouseEvent;
class WebWheelEvent;
class WebKeyboardEvent;
+
+#if ENABLE(GESTURE_EVENTS)
+class WebGestureEvent;
+#endif
+
#if ENABLE(TOUCH_EVENTS)
class WebTouchEvent;
class WebTouchPoint;
#endif
+
WebCore::PlatformMouseEvent platform(const WebMouseEvent&);
WebCore::PlatformWheelEvent platform(const WebWheelEvent&);
WebCore::PlatformKeyboardEvent platform(const WebKeyboardEvent&);
+
+#if ENABLE(GESTURE_EVENTS)
+WebCore::PlatformGestureEvent platform(const WebGestureEvent&);
+#endif
+
#if ENABLE(TOUCH_EVENTS)
WebCore::PlatformTouchEvent platform(const WebTouchEvent&);
WebCore::PlatformTouchPoint platform(const WebTouchPoint&);
#endif
+
} // namespace WebKit
#endif // WebEventConversion_h
diff --git a/Source/WebKit2/Shared/WebGeolocationPosition.cpp b/Source/WebKit2/Shared/WebGeolocationPosition.cpp
index 9cda350..01fdfb8 100644
--- a/Source/WebKit2/Shared/WebGeolocationPosition.cpp
+++ b/Source/WebKit2/Shared/WebGeolocationPosition.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebGeolocationPosition.h"
#include "ArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebGestureEvent.cpp b/Source/WebKit2/Shared/WebGestureEvent.cpp
new file mode 100644
index 0000000..bbf8f83
--- /dev/null
+++ b/Source/WebKit2/Shared/WebGestureEvent.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebEvent.h"
+
+#if ENABLE(GESTURE_EVENTS)
+
+#include "Arguments.h"
+#include "WebCoreArgumentCoders.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebGestureEvent::WebGestureEvent(Type type, const IntPoint& position, const IntPoint& globalPosition, Modifiers modifiers, double timestamp)
+ : WebEvent(type, modifiers, timestamp)
+ , m_position(position)
+ , m_globalPosition(globalPosition)
+{
+ ASSERT(isGestureEventType(type));
+}
+
+void WebGestureEvent::encode(CoreIPC::ArgumentEncoder* encoder) const
+{
+ WebEvent::encode(encoder);
+
+ encoder->encode(m_position);
+ encoder->encode(m_globalPosition);
+}
+
+bool WebGestureEvent::decode(CoreIPC::ArgumentDecoder* decoder, WebGestureEvent& t)
+{
+ if (!WebEvent::decode(decoder, t))
+ return false;
+ if (!decoder->decode(t.m_position))
+ return false;
+ if (!decoder->decode(t.m_globalPosition))
+ return false;
+ return true;
+}
+
+bool WebGestureEvent::isGestureEventType(Type type)
+{
+ return type == GestureScrollBegin || type == GestureScrollEnd;
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GESTURE_EVENTS)
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp b/Source/WebKit2/Shared/WebGraphicsContext.cpp
index b6d15fd..3d319e4 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp
+++ b/Source/WebKit2/Shared/WebGraphicsContext.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,17 +23,20 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebDatabaseManager.h"
-
-#include <WebCore/FileSystem.h>
+#include "config.h"
+#include "WebGraphicsContext.h"
using namespace WebCore;
namespace WebKit {
-String WebDatabaseManager::databaseDirectory() const
+WebGraphicsContext::WebGraphicsContext(GraphicsContext* graphicsContext)
+#if PLATFORM(CG)
+ : m_platformContext(graphicsContext->platformContext())
+#elif PLATFORM(GTK)
+ : m_platformContext(graphicsContext->platformContext())
+#endif
{
- return WebCore::pathByAppendingComponent(WebCore::localUserSpecificStorageDirectory(), "Databases");
}
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/WebGraphicsContext.h b/Source/WebKit2/Shared/WebGraphicsContext.h
new file mode 100644
index 0000000..ddb2e34
--- /dev/null
+++ b/Source/WebKit2/Shared/WebGraphicsContext.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebGraphicsContext_h
+#define WebGraphicsContext_h
+
+#include "APIObject.h"
+#include <WebCore/GraphicsContext.h>
+#include <wtf/PassRefPtr.h>
+
+#if PLATFORM(CG)
+#include <wtf/RetainPtr.h>
+#elif PLATFORM(GTK)
+#include "RefPtrCairo.h"
+#endif
+
+namespace WebKit {
+
+class WebGraphicsContext : public APIObject {
+public:
+ static const Type APIType = TypeGraphicsContext;
+
+ static PassRefPtr<WebGraphicsContext> create(WebCore::GraphicsContext* graphicsContext)
+ {
+ return adoptRef(new WebGraphicsContext(graphicsContext));
+ }
+
+#if PLATFORM(CG)
+ CGContextRef platformContext() { return m_platformContext.get(); }
+#elif PLATFORM(GTK)
+ cairo_t* platformContext() { return m_platformContext.get(); }
+#endif
+
+
+private:
+ explicit WebGraphicsContext(WebCore::GraphicsContext*);
+
+ virtual Type type() const { return APIType; }
+
+#if PLATFORM(CG)
+ RetainPtr<CGContextRef> m_platformContext;
+#elif PLATFORM(GTK)
+ RefPtr<cairo_t> m_platformContext;
+#endif
+};
+
+} // namespace WebKit
+
+#endif // WebGraphicsContext_h
diff --git a/Source/WebKit2/Shared/WebImage.cpp b/Source/WebKit2/Shared/WebImage.cpp
index 1426690..e245268 100644
--- a/Source/WebKit2/Shared/WebImage.cpp
+++ b/Source/WebKit2/Shared/WebImage.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebImage.h"
#include "ShareableBitmap.h"
diff --git a/Source/WebKit2/Shared/WebKeyboardEvent.cpp b/Source/WebKit2/Shared/WebKeyboardEvent.cpp
index 08aaab8..7e65ef1 100644
--- a/Source/WebKit2/Shared/WebKeyboardEvent.cpp
+++ b/Source/WebKit2/Shared/WebKeyboardEvent.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEvent.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebMemorySampler.cpp b/Source/WebKit2/Shared/WebMemorySampler.cpp
index 7b5c487..82b2be9 100644
--- a/Source/WebKit2/Shared/WebMemorySampler.cpp
+++ b/Source/WebKit2/Shared/WebMemorySampler.cpp
@@ -23,10 +23,11 @@
*
*/
-#if ENABLE(MEMORY_SAMPLER)
-
+#include "config.h"
#include "WebMemorySampler.h"
+#if ENABLE(MEMORY_SAMPLER)
+
#include <wtf/text/CString.h>
using namespace WebCore;
diff --git a/Source/WebKit2/Shared/WebMouseEvent.cpp b/Source/WebKit2/Shared/WebMouseEvent.cpp
index fe30290..16e5057 100644
--- a/Source/WebKit2/Shared/WebMouseEvent.cpp
+++ b/Source/WebKit2/Shared/WebMouseEvent.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEvent.h"
#include "Arguments.h"
diff --git a/Source/WebKit2/Shared/WebOpenPanelParameters.cpp b/Source/WebKit2/Shared/WebOpenPanelParameters.cpp
index 821477b..13b3d0b 100644
--- a/Source/WebKit2/Shared/WebOpenPanelParameters.cpp
+++ b/Source/WebKit2/Shared/WebOpenPanelParameters.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebOpenPanelParameters.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebPageCreationParameters.cpp b/Source/WebKit2/Shared/WebPageCreationParameters.cpp
index 5ab1212..45fa5a4 100644
--- a/Source/WebKit2/Shared/WebPageCreationParameters.cpp
+++ b/Source/WebKit2/Shared/WebPageCreationParameters.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageCreationParameters.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebPageGroupData.cpp b/Source/WebKit2/Shared/WebPageGroupData.cpp
index f01f4a6..e8df62f 100644
--- a/Source/WebKit2/Shared/WebPageGroupData.cpp
+++ b/Source/WebKit2/Shared/WebPageGroupData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageGroupData.h"
#include "ArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebPlatformTouchPoint.cpp b/Source/WebKit2/Shared/WebPlatformTouchPoint.cpp
index 3954368..e23830f 100644
--- a/Source/WebKit2/Shared/WebPlatformTouchPoint.cpp
+++ b/Source/WebKit2/Shared/WebPlatformTouchPoint.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(TOUCH_EVENTS)
-
+#include "config.h"
#include "WebEvent.h"
+#if ENABLE(TOUCH_EVENTS)
+
#include "Arguments.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/Shared/WebPopupItem.cpp b/Source/WebKit2/Shared/WebPopupItem.cpp
index 3a5f178..a9ac032 100644
--- a/Source/WebKit2/Shared/WebPopupItem.cpp
+++ b/Source/WebKit2/Shared/WebPopupItem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,29 +23,39 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
+
#include "WebPopupItem.h"
#include "ArgumentCoders.h"
#include "Arguments.h"
+using namespace WebCore;
+
namespace WebKit {
WebPopupItem::WebPopupItem()
: m_type(Item)
+ , m_textDirection(LTR)
+ , m_hasTextDirectionOverride(false)
, m_isEnabled(true)
{
}
WebPopupItem::WebPopupItem(Type type)
: m_type(type)
+ , m_textDirection(LTR)
+ , m_hasTextDirectionOverride(false)
, m_isEnabled(true)
, m_isLabel(false)
{
}
-WebPopupItem::WebPopupItem(Type type, const String& text, const String& toolTip, const String& accessibilityText, bool isEnabled, bool isLabel)
+WebPopupItem::WebPopupItem(Type type, const String& text, TextDirection textDirection, bool hasTextDirectionOverride, const String& toolTip, const String& accessibilityText, bool isEnabled, bool isLabel)
: m_type(type)
, m_text(text)
+ , m_textDirection(textDirection)
+ , m_hasTextDirectionOverride(hasTextDirectionOverride)
, m_toolTip(toolTip)
, m_accessibilityText(accessibilityText)
, m_isEnabled(isEnabled)
@@ -55,21 +65,23 @@ WebPopupItem::WebPopupItem(Type type, const String& text, const String& toolTip,
void WebPopupItem::encode(CoreIPC::ArgumentEncoder* encoder) const
{
- encoder->encode(CoreIPC::In(static_cast<uint32_t>(m_type), m_text, m_toolTip, m_accessibilityText, m_isEnabled, m_isLabel));
+ encoder->encode(CoreIPC::In(static_cast<uint32_t>(m_type), m_text, static_cast<uint64_t>(m_textDirection), m_hasTextDirectionOverride, m_toolTip, m_accessibilityText, m_isEnabled, m_isLabel));
}
bool WebPopupItem::decode(CoreIPC::ArgumentDecoder* decoder, WebPopupItem& item)
{
uint32_t type;
String text;
+ uint64_t textDirection;
+ bool hasTextDirectionOverride;
String toolTip;
String accessibilityText;
bool isEnabled;
bool isLabel;
- if (!decoder->decode(CoreIPC::Out(type, text, toolTip, accessibilityText, isEnabled, isLabel)))
+ if (!decoder->decode(CoreIPC::Out(type, text, textDirection, hasTextDirectionOverride, toolTip, accessibilityText, isEnabled, isLabel)))
return false;
- item = WebPopupItem(static_cast<Type>(type), text, toolTip, accessibilityText, isEnabled, isLabel);
+ item = WebPopupItem(static_cast<Type>(type), text, static_cast<TextDirection>(textDirection), hasTextDirectionOverride, toolTip, accessibilityText, isEnabled, isLabel);
return true;
}
diff --git a/Source/WebKit2/Shared/WebPopupItem.h b/Source/WebKit2/Shared/WebPopupItem.h
index c6874f8..85495a3 100644
--- a/Source/WebKit2/Shared/WebPopupItem.h
+++ b/Source/WebKit2/Shared/WebPopupItem.h
@@ -26,6 +26,7 @@
#ifndef WebPopupItem_h
#define WebPopupItem_h
+#include <WebCore/TextDirection.h>
#include <wtf/text/WTFString.h>
namespace CoreIPC {
@@ -43,13 +44,15 @@ struct WebPopupItem {
WebPopupItem();
WebPopupItem(Type);
- WebPopupItem(Type, const String& text, const String& toolTip, const String& accessibilityText, bool isEnabled, bool m_isLabel);
+ WebPopupItem(Type, const String& text, WebCore::TextDirection, bool hasTextDirectionOverride, const String& toolTip, const String& accessibilityText, bool isEnabled, bool m_isLabel);
void encode(CoreIPC::ArgumentEncoder*) const;
static bool decode(CoreIPC::ArgumentDecoder*, WebPopupItem&);
Type m_type;
String m_text;
+ WebCore::TextDirection m_textDirection;
+ bool m_hasTextDirectionOverride;
String m_toolTip;
String m_accessibilityText;
bool m_isEnabled;
diff --git a/Source/WebKit2/Shared/WebPreferencesStore.cpp b/Source/WebKit2/Shared/WebPreferencesStore.cpp
index 82b422b..c215782 100644
--- a/Source/WebKit2/Shared/WebPreferencesStore.cpp
+++ b/Source/WebKit2/Shared/WebPreferencesStore.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPreferencesStore.h"
#include "FontSmoothingLevel.h"
diff --git a/Source/WebKit2/Shared/WebPreferencesStore.h b/Source/WebKit2/Shared/WebPreferencesStore.h
index e8cf244..c9624df 100644
--- a/Source/WebKit2/Shared/WebPreferencesStore.h
+++ b/Source/WebKit2/Shared/WebPreferencesStore.h
@@ -55,6 +55,7 @@ namespace WebKit {
macro(AcceleratedCompositingEnabled, acceleratedCompositingEnabled, Bool, bool, true) \
macro(CompositingBordersVisible, compositingBordersVisible, Bool, bool, false) \
macro(CompositingRepaintCountersVisible, compositingRepaintCountersVisible, Bool, bool, false) \
+ macro(WebGLEnabled, webGLEnabled, Bool, bool, false) \
macro(ForceFTPDirectoryListings, forceFTPDirectoryListings, Bool, bool, false) \
macro(TabsToLinks, tabsToLinks, Bool, bool, false) \
macro(DNSPrefetchingEnabled, dnsPrefetchingEnabled, Bool, bool, false) \
@@ -64,6 +65,7 @@ namespace WebKit {
macro(AuthorAndUserStylesEnabled, authorAndUserStylesEnabled, Bool, bool, true) \
macro(PaginateDuringLayoutEnabled, paginateDuringLayoutEnabled, Bool, bool, false) \
macro(DOMPasteAllowed, domPasteAllowed, Bool, bool, false) \
+ macro(JavaScriptCanAccessClipboard, javaScriptCanAccessClipboard, Bool, bool, false) \
macro(ShouldPrintBackgrounds, shouldPrintBackgrounds, Bool, bool, false) \
\
@@ -91,7 +93,7 @@ namespace WebKit {
macro(SerifFontFamily, serifFontFamily, String, String, "Times New Roman") \
\
-#else
+#elif PLATFORM(MAC)
#define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
macro(StandardFontFamily, standardFontFamily, String, String, "Times") \
@@ -102,6 +104,17 @@ namespace WebKit {
macro(SerifFontFamily, serifFontFamily, String, String, "Times") \
\
+#elif PLATFORM(QT) || PLATFORM(GTK)
+
+#define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
+ macro(StandardFontFamily, standardFontFamily, String, String, "Times") \
+ macro(CursiveFontFamily, cursiveFontFamily, String, String, "Comic Sans MS") \
+ macro(FantasyFontFamily, fantasyFontFamily, String, String, "Impact") \
+ macro(FixedFontFamily, fixedFontFamily, String, String, "Courier New") \
+ macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Helvetica") \
+ macro(SerifFontFamily, serifFontFamily, String, String, "Times") \
+ \
+
#endif
#define FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
index 77e3a82..89b1009 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcessCreationParameters.h"
#include "ArgumentCoders.h"
@@ -46,6 +47,7 @@ void WebProcessCreationParameters::encode(CoreIPC::ArgumentEncoder* encoder) con
encoder->encode(injectedBundlePath);
encoder->encode(injectedBundlePathExtensionHandle);
encoder->encode(applicationCacheDirectory);
+ encoder->encode(databaseDirectory);
encoder->encode(urlSchemesRegistererdAsEmptyDocument);
encoder->encode(urlSchemesRegisteredAsSecure);
encoder->encode(urlSchemesForWhichDomainRelaxationIsForbidden);
@@ -76,6 +78,8 @@ bool WebProcessCreationParameters::decode(CoreIPC::ArgumentDecoder* decoder, Web
return false;
if (!decoder->decode(parameters.applicationCacheDirectory))
return false;
+ if (!decoder->decode(parameters.databaseDirectory))
+ return false;
if (!decoder->decode(parameters.urlSchemesRegistererdAsEmptyDocument))
return false;
if (!decoder->decode(parameters.urlSchemesRegisteredAsSecure))
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.h b/Source/WebKit2/Shared/WebProcessCreationParameters.h
index 50d8a90..b157c94 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.h
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.h
@@ -53,6 +53,7 @@ struct WebProcessCreationParameters {
SandboxExtension::Handle injectedBundlePathExtensionHandle;
String applicationCacheDirectory;
+ String databaseDirectory;
Vector<String> urlSchemesRegistererdAsEmptyDocument;
Vector<String> urlSchemesRegisteredAsSecure;
Vector<String> urlSchemesForWhichDomainRelaxationIsForbidden;
diff --git a/Source/WebKit2/Shared/WebSecurityOrigin.h b/Source/WebKit2/Shared/WebSecurityOrigin.h
index be684ab..347f83e 100644
--- a/Source/WebKit2/Shared/WebSecurityOrigin.h
+++ b/Source/WebKit2/Shared/WebSecurityOrigin.h
@@ -52,7 +52,7 @@ public:
return adoptRef(new WebSecurityOrigin(securityOrigin.release()));
}
- const String protocol() const { return m_securityOrigin->domain(); }
+ const String protocol() const { return m_securityOrigin->protocol(); }
const String host() const { return m_securityOrigin->host(); }
unsigned short port() const { return m_securityOrigin->port(); }
diff --git a/Source/WebKit2/Shared/WebTouchEvent.cpp b/Source/WebKit2/Shared/WebTouchEvent.cpp
index f42f48c..2ffca38 100644
--- a/Source/WebKit2/Shared/WebTouchEvent.cpp
+++ b/Source/WebKit2/Shared/WebTouchEvent.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(TOUCH_EVENTS)
-
+#include "config.h"
#include "WebEvent.h"
+#if ENABLE(TOUCH_EVENTS)
+
#include "ArgumentCoders.h"
#include "Arguments.h"
diff --git a/Source/WebKit2/Shared/WebURLRequest.cpp b/Source/WebKit2/Shared/WebURLRequest.cpp
index 1e255c2..586bbb4 100644
--- a/Source/WebKit2/Shared/WebURLRequest.cpp
+++ b/Source/WebKit2/Shared/WebURLRequest.cpp
@@ -7,6 +7,7 @@
*
*/
+#include "config.h"
#include "WebURLRequest.h"
using namespace WebCore;
diff --git a/Source/WebKit2/Shared/WebURLRequest.h b/Source/WebKit2/Shared/WebURLRequest.h
index 6cb5ba8..ab167b8 100644
--- a/Source/WebKit2/Shared/WebURLRequest.h
+++ b/Source/WebKit2/Shared/WebURLRequest.h
@@ -59,6 +59,8 @@ public:
PlatformRequest platformRequest() const;
const WebCore::ResourceRequest& resourceRequest() const { return m_request; }
+ const String& url() const { return m_request.url(); }
+
private:
explicit WebURLRequest(const WebCore::ResourceRequest&);
explicit WebURLRequest(PlatformRequest);
diff --git a/Source/WebKit2/Shared/WebURLResponse.cpp b/Source/WebKit2/Shared/WebURLResponse.cpp
index 8f8ec14..223b55b 100644
--- a/Source/WebKit2/Shared/WebURLResponse.cpp
+++ b/Source/WebKit2/Shared/WebURLResponse.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebURLResponse.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/WebWheelEvent.cpp b/Source/WebKit2/Shared/WebWheelEvent.cpp
index 570b8e0..26f2337 100644
--- a/Source/WebKit2/Shared/WebWheelEvent.cpp
+++ b/Source/WebKit2/Shared/WebWheelEvent.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEvent.h"
#include "Arguments.h"
@@ -39,12 +40,16 @@ WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint
, m_delta(delta)
, m_wheelTicks(wheelTicks)
, m_granularity(granularity)
+#if PLATFORM(MAC)
+ , m_phase(PhaseNone)
+ , m_hasPreciseScrollingDeltas(false)
+#endif
{
ASSERT(isWheelEventType(type));
}
#if PLATFORM(MAC)
-WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint& globalPosition, const FloatSize& delta, const FloatSize& wheelTicks, Granularity granularity, Phase phase, Modifiers modifiers, double timestamp)
+WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint& globalPosition, const FloatSize& delta, const FloatSize& wheelTicks, Granularity granularity, Phase phase, bool hasPreciseScrollingDeltas, Modifiers modifiers, double timestamp)
: WebEvent(type, modifiers, timestamp)
, m_position(position)
, m_globalPosition(globalPosition)
@@ -52,6 +57,7 @@ WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint
, m_wheelTicks(wheelTicks)
, m_granularity(granularity)
, m_phase(phase)
+ , m_hasPreciseScrollingDeltas(hasPreciseScrollingDeltas)
{
ASSERT(isWheelEventType(type));
}
@@ -68,6 +74,7 @@ void WebWheelEvent::encode(CoreIPC::ArgumentEncoder* encoder) const
encoder->encode(m_granularity);
#if PLATFORM(MAC)
encoder->encode(m_phase);
+ encoder->encode(m_hasPreciseScrollingDeltas);
#endif
}
@@ -88,6 +95,8 @@ bool WebWheelEvent::decode(CoreIPC::ArgumentDecoder* decoder, WebWheelEvent& t)
#if PLATFORM(MAC)
if (!decoder->decode(t.m_phase))
return false;
+ if (!decoder->decode(t.m_hasPreciseScrollingDeltas))
+ return false;
#endif
return true;
}
diff --git a/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp b/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp
index f5dbbc4..555eab5 100644
--- a/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp
+++ b/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ShareableBitmap.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/cf/ArgumentCodersCF.cpp b/Source/WebKit2/Shared/cf/ArgumentCodersCF.cpp
index 4edf46f..936b6b3 100644
--- a/Source/WebKit2/Shared/cf/ArgumentCodersCF.cpp
+++ b/Source/WebKit2/Shared/cf/ArgumentCodersCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ArgumentCodersCF.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/cg/ShareableBitmapCG.cpp b/Source/WebKit2/Shared/cg/ShareableBitmapCG.cpp
index 08c5dc3..e9ca723 100644
--- a/Source/WebKit2/Shared/cg/ShareableBitmapCG.cpp
+++ b/Source/WebKit2/Shared/cg/ShareableBitmapCG.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ShareableBitmap.h"
#include <WebCore/GraphicsContext.h>
diff --git a/Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp b/Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp
index b84f05c..50c7b57 100644
--- a/Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp
+++ b/Source/WebKit2/Shared/gtk/ShareableBitmapGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ShareableBitmap.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/gtk/UpdateChunk.cpp b/Source/WebKit2/Shared/gtk/UpdateChunk.cpp
new file mode 100644
index 0000000..fb3573c
--- /dev/null
+++ b/Source/WebKit2/Shared/gtk/UpdateChunk.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "UpdateChunk.h"
+
+#include "WebCoreArgumentCoders.h"
+#include <gdk/gdkx.h>
+
+using namespace WebCore;
+
+static cairo_format_t imageFormat = CAIRO_FORMAT_ARGB32;
+
+namespace WebKit {
+
+UpdateChunk::UpdateChunk()
+ : m_sharedMemory(0)
+{
+}
+
+UpdateChunk::UpdateChunk(const IntRect& rect)
+ : m_rect(rect)
+ , m_sharedMemory(SharedMemory::create(size()))
+{
+}
+
+UpdateChunk::~UpdateChunk()
+{
+}
+
+size_t UpdateChunk::size() const
+{
+ return cairo_format_stride_for_width(imageFormat, m_rect.width()) * m_rect.height();
+}
+
+void UpdateChunk::encode(CoreIPC::ArgumentEncoder* encoder) const
+{
+ encoder->encode(m_rect);
+ if (!m_sharedMemory) {
+ encoder->encode(false);
+ return;
+ }
+
+ SharedMemory::Handle handle;
+ if (m_sharedMemory->createHandle(handle, SharedMemory::ReadOnly)) {
+ encoder->encode(true);
+ encoder->encode(handle);
+ } else
+ encoder->encode(false);
+
+ m_sharedMemory = 0;
+}
+
+bool UpdateChunk::decode(CoreIPC::ArgumentDecoder* decoder, UpdateChunk& chunk)
+{
+ ASSERT_ARG(chunk, chunk.isEmpty());
+
+ IntRect rect;
+ if (!decoder->decode(rect))
+ return false;
+
+ chunk.m_rect = rect;
+
+ bool hasSharedMemory;
+ if (!decoder->decode(hasSharedMemory))
+ return false;
+
+ if (!hasSharedMemory) {
+ chunk.m_sharedMemory = 0;
+ return true;
+ }
+
+ SharedMemory::Handle handle;
+ if (!decoder->decode(handle))
+ return false;
+
+ chunk.m_sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly);
+ return true;
+}
+
+cairo_surface_t* UpdateChunk::createImage() const
+{
+ ASSERT(m_sharedMemory);
+ if (!m_sharedMemory)
+ return 0;
+
+ int stride = cairo_format_stride_for_width(imageFormat, m_rect.width());
+ return cairo_image_surface_create_for_data(static_cast<unsigned char*>(m_sharedMemory->data()),
+ imageFormat, m_rect.width(), m_rect.height(), stride);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/Shared/gtk/UpdateChunk.h b/Source/WebKit2/Shared/gtk/UpdateChunk.h
new file mode 100644
index 0000000..6242add
--- /dev/null
+++ b/Source/WebKit2/Shared/gtk/UpdateChunk.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UpdateChunk_h
+#define UpdateChunk_h
+
+#include "IntRect.h"
+#include "SharedMemory.h"
+
+#include <cairo.h>
+
+namespace CoreIPC {
+class ArgumentEncoder;
+class ArgumentDecoder;
+}
+
+namespace WebKit {
+
+class UpdateChunk {
+public:
+ UpdateChunk();
+ UpdateChunk(const WebCore::IntRect&);
+ ~UpdateChunk();
+
+ const WebCore::IntRect& rect() const { return m_rect; }
+ bool isEmpty() { return m_rect.isEmpty(); }
+
+ void encode(CoreIPC::ArgumentEncoder*) const;
+ static bool decode(CoreIPC::ArgumentDecoder*, UpdateChunk&);
+
+ cairo_surface_t* createImage() const;
+
+private:
+ size_t size() const;
+ int m_stride;
+ WebCore::IntRect m_rect;
+ mutable RefPtr<SharedMemory> m_sharedMemory;
+};
+
+} // namespace WebKit
+
+
+#endif // UpdateChunk_h
diff --git a/Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp b/Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp
index 95d6286..515966c 100644
--- a/Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp
+++ b/Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebCoreArgumentCoders.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/mac/CommandLineMac.cpp b/Source/WebKit2/Shared/mac/CommandLineMac.cpp
index 185aaea..d48a401 100644
--- a/Source/WebKit2/Shared/mac/CommandLineMac.cpp
+++ b/Source/WebKit2/Shared/mac/CommandLineMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "CommandLine.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/mac/CoreAnimationRenderer.h b/Source/WebKit2/Shared/mac/CoreAnimationRenderer.h
new file mode 100644
index 0000000..482f579
--- /dev/null
+++ b/Source/WebKit2/Shared/mac/CoreAnimationRenderer.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CoreAnimationRenderer_h
+#define CoreAnimationRenderer_h
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RetainPtr.h>
+
+OBJC_CLASS CALayer;
+OBJC_CLASS CARenderer;
+
+typedef struct _CGLContextObject* CGLContextObj;
+
+namespace WebKit {
+
+class CoreAnimationRenderer : public RefCounted<CoreAnimationRenderer> {
+public:
+ class Client {
+ public:
+ virtual ~Client() { }
+ virtual void rendererDidChange(CoreAnimationRenderer*) = 0;
+ };
+
+ static PassRefPtr<CoreAnimationRenderer> create(Client*, CGLContextObj, CALayer *);
+ ~CoreAnimationRenderer();
+
+ void invalidate();
+
+ void setBounds(CGRect);
+ void render(CFTimeInterval frameTime, CVTimeStamp*, CFTimeInterval& nextFrameTime);
+
+private:
+ CoreAnimationRenderer(Client*, CGLContextObj, CALayer *);
+
+ static void rendererDidChange(void*);
+ void rendererDidChange();
+
+ Client* m_client;
+ CGLContextObj m_cglContext;
+ RetainPtr<CARenderer> m_renderer;
+};
+
+} // namespace WebKit
+
+#endif // CoreAnimationRenderer_h
diff --git a/Source/WebKit2/Shared/mac/CoreAnimationRenderer.mm b/Source/WebKit2/Shared/mac/CoreAnimationRenderer.mm
new file mode 100644
index 0000000..97276f6
--- /dev/null
+++ b/Source/WebKit2/Shared/mac/CoreAnimationRenderer.mm
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "CoreAnimationRenderer.h"
+
+#import <WebKitSystemInterface.h>
+#import <QuartzCore/QuartzCore.h>
+#import <OpenGL/CGLMacro.h>
+
+// The CGLMacro.h header adds an implicit CGLContextObj parameter to all OpenGL calls,
+// which is good because it allows us to make OpenGL calls without saving and restoring the
+// current context. The context argument is named "cgl_ctx" by default, so we use the macro
+// below to declare this variable.
+#define DECLARE_GL_CONTEXT_VARIABLE(name) \
+ CGLContextObj cgl_ctx = (name)
+
+namespace WebKit {
+
+PassRefPtr<CoreAnimationRenderer> CoreAnimationRenderer::create(Client* client, CGLContextObj cglContextObj, CALayer *layer)
+{
+ return adoptRef(new CoreAnimationRenderer(client, cglContextObj, layer));
+}
+
+CoreAnimationRenderer::CoreAnimationRenderer(Client* client, CGLContextObj cglContextObj, CALayer *layer)
+ : m_client(client)
+ , m_cglContext(cglContextObj)
+ , m_renderer([CARenderer rendererWithCGLContext:m_cglContext options:nil])
+{
+ [m_renderer.get() setLayer:layer];
+
+ WKCARendererAddChangeNotificationObserver(m_renderer.get(), rendererDidChange, this);
+}
+
+CoreAnimationRenderer::~CoreAnimationRenderer()
+{
+ ASSERT(!m_client);
+}
+
+void CoreAnimationRenderer::setBounds(CGRect bounds)
+{
+ [m_renderer.get() setBounds:bounds];
+
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ [[m_renderer.get() layer] setFrame:bounds];
+ [CATransaction commit];
+}
+
+void CoreAnimationRenderer::render(CFTimeInterval frameTime, CVTimeStamp* timeStamp, CFTimeInterval& nextFrameTime)
+{
+ [m_renderer.get() beginFrameAtTime:frameTime timeStamp:timeStamp];
+ [m_renderer.get() render];
+ nextFrameTime = [m_renderer.get() nextFrameTime];
+ [m_renderer.get() endFrame];
+}
+
+void CoreAnimationRenderer::invalidate()
+{
+ ASSERT(m_client);
+
+ WKCARendererRemoveChangeNotificationObserver(m_renderer.get(), rendererDidChange, this);
+ m_client = 0;
+}
+
+void CoreAnimationRenderer::rendererDidChange(void* context)
+{
+ static_cast<CoreAnimationRenderer*>(context)->rendererDidChange();
+}
+
+void CoreAnimationRenderer::rendererDidChange()
+{
+ ASSERT(m_client);
+
+ m_client->rendererDidChange(this);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/Shared/mac/LayerTreeContextMac.mm b/Source/WebKit2/Shared/mac/LayerTreeContextMac.mm
new file mode 100644
index 0000000..e4ad1ce
--- /dev/null
+++ b/Source/WebKit2/Shared/mac/LayerTreeContextMac.mm
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "LayerTreeContext.h"
+
+#include "ArgumentDecoder.h"
+#include "ArgumentEncoder.h"
+
+namespace WebKit {
+
+LayerTreeContext::LayerTreeContext()
+ : contextID(0)
+{
+}
+
+LayerTreeContext::~LayerTreeContext()
+{
+}
+
+void LayerTreeContext::encode(CoreIPC::ArgumentEncoder* encoder) const
+{
+ encoder->encode(contextID);
+}
+
+bool LayerTreeContext::decode(CoreIPC::ArgumentDecoder* decoder, LayerTreeContext& result)
+{
+ if (!decoder->decode(result.contextID))
+ return false;
+
+ return true;
+}
+
+bool LayerTreeContext::isEmpty() const
+{
+ return !contextID;
+}
+
+bool operator==(const LayerTreeContext& a, const LayerTreeContext& b)
+{
+ return a.contextID == b.contextID;
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/Shared/mac/NativeWebKeyboardEventMac.mm b/Source/WebKit2/Shared/mac/NativeWebKeyboardEventMac.mm
index d69082d..c9f2a0a 100644
--- a/Source/WebKit2/Shared/mac/NativeWebKeyboardEventMac.mm
+++ b/Source/WebKit2/Shared/mac/NativeWebKeyboardEventMac.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "NativeWebKeyboardEvent.h"
#import "WebEventFactory.h"
diff --git a/Source/WebKit2/Shared/mac/PasteboardTypes.mm b/Source/WebKit2/Shared/mac/PasteboardTypes.mm
index 380e24c..0d48464 100644
--- a/Source/WebKit2/Shared/mac/PasteboardTypes.mm
+++ b/Source/WebKit2/Shared/mac/PasteboardTypes.mm
@@ -23,7 +23,9 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "PasteboardTypes.h"
+
#import <wtf/RetainPtr.h>
namespace WebKit {
diff --git a/Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm b/Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm
index 0f3fee7..0c0b737 100644
--- a/Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm
+++ b/Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm
@@ -23,12 +23,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "PlatformCertificateInfo.h"
+#import "config.h"
+#import "PlatformCertificateInfo.h"
-#include "ArgumentDecoder.h"
-#include "ArgumentEncoder.h"
-#include <WebKitSystemInterface.h>
-#include <Security/Security.h>
+#import "ArgumentDecoder.h"
+#import "ArgumentEncoder.h"
+#import <WebKitSystemInterface.h>
+#import <Security/Security.h>
using namespace WebCore;
diff --git a/Source/WebKit2/Shared/mac/PrintInfoMac.mm b/Source/WebKit2/Shared/mac/PrintInfoMac.mm
index 78cf9df..bb7792c 100644
--- a/Source/WebKit2/Shared/mac/PrintInfoMac.mm
+++ b/Source/WebKit2/Shared/mac/PrintInfoMac.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "PrintInfo.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm b/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm
index 68b5849..54cf5d3 100644
--- a/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm
+++ b/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm
@@ -23,16 +23,17 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(WEB_PROCESS_SANDBOX)
+#import "config.h"
+#import "SandboxExtension.h"
-#include "SandboxExtension.h"
+#if ENABLE(WEB_PROCESS_SANDBOX)
-#include "ArgumentDecoder.h"
-#include "ArgumentEncoder.h"
-#include "DataReference.h"
-#include "WebKitSystemInterface.h"
-#include <WebCore/FileSystem.h>
-#include <wtf/text/CString.h>
+#import "ArgumentDecoder.h"
+#import "ArgumentEncoder.h"
+#import "DataReference.h"
+#import "WebKitSystemInterface.h"
+#import <WebCore/FileSystem.h>
+#import <wtf/text/CString.h>
using namespace WebCore;
diff --git a/Source/WebKit2/Shared/mac/ShareableSurface.cpp b/Source/WebKit2/Shared/mac/ShareableSurface.cpp
new file mode 100644
index 0000000..4c15f5e
--- /dev/null
+++ b/Source/WebKit2/Shared/mac/ShareableSurface.cpp
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ShareableSurface.h"
+
+#include "ArgumentDecoder.h"
+#include "ArgumentEncoder.h"
+#include "MachPort.h"
+#include <IOSurface/IOSurface.h>
+#include <OpenGL/CGLIOSurface.h>
+#include <OpenGL/CGLMacro.h>
+#include <OpenGL/OpenGL.h>
+#include <mach/mach_port.h>
+
+// The CGLMacro.h header adds an implicit CGLContextObj parameter to all OpenGL calls,
+// which is good because it allows us to make OpenGL calls without saving and restoring the
+// current context. The context argument is named "cgl_ctx" by default, so we the macro
+// below to declare this variable.
+#define DECLARE_GL_CONTEXT_VARIABLE(name) \
+ CGLContextObj cgl_ctx = (name)
+
+// It expects a context named "
+using namespace WebCore;
+
+namespace WebKit {
+
+ShareableSurface::Handle::Handle()
+ : m_port(MACH_PORT_NULL)
+{
+}
+
+ShareableSurface::Handle::~Handle()
+{
+ if (m_port != MACH_PORT_NULL)
+ mach_port_deallocate(mach_task_self(), m_port);
+}
+
+void ShareableSurface::Handle::encode(CoreIPC::ArgumentEncoder* encoder) const
+{
+ encoder->encode(CoreIPC::MachPort(m_port, MACH_MSG_TYPE_MOVE_SEND));
+ m_port = MACH_PORT_NULL;
+}
+
+bool ShareableSurface::Handle::decode(CoreIPC::ArgumentDecoder* decoder, Handle& handle)
+{
+ ASSERT_ARG(handle, handle.m_port == MACH_PORT_NULL);
+
+ CoreIPC::MachPort machPort;
+ if (!decoder->decode(machPort))
+ return false;
+
+ handle.m_port = machPort.port();
+ return false;
+}
+
+static RetainPtr<IOSurfaceRef> createIOSurface(const IntSize& size)
+{
+ int width = size.width();
+ int height = size.height();
+
+ unsigned bytesPerElement = 4;
+ unsigned long bytesPerRow = IOSurfaceAlignProperty(kIOSurfaceBytesPerRow, width * bytesPerElement);
+ if (!bytesPerRow)
+ return 0;
+
+ unsigned long allocSize = IOSurfaceAlignProperty(kIOSurfaceAllocSize, height * bytesPerRow);
+ if (!allocSize)
+ return 0;
+
+ unsigned pixelFormat = 'BGRA';
+
+ static const size_t numKeys = 6;
+ const void *keys[numKeys];
+ const void *values[numKeys];
+ keys[0] = kIOSurfaceWidth;
+ values[0] = CFNumberCreate(0, kCFNumberIntType, &width);
+ keys[1] = kIOSurfaceHeight;
+ values[1] = CFNumberCreate(0, kCFNumberIntType, &height);
+ keys[2] = kIOSurfacePixelFormat;
+ values[2] = CFNumberCreate(0, kCFNumberIntType, &pixelFormat);
+ keys[3] = kIOSurfaceBytesPerElement;
+ values[3] = CFNumberCreate(0, kCFNumberIntType, &bytesPerElement);
+ keys[4] = kIOSurfaceBytesPerRow;
+ values[4] = CFNumberCreate(0, kCFNumberLongType, &bytesPerRow);
+ keys[5] = kIOSurfaceAllocSize;
+ values[5] = CFNumberCreate(0, kCFNumberLongType, &allocSize);
+
+ RetainPtr<CFDictionaryRef> dictionary(AdoptCF, CFDictionaryCreate(0, keys, values, numKeys, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ for (unsigned i = 0; i < numKeys; i++)
+ CFRelease(values[i]);
+
+ return RetainPtr<IOSurfaceRef>(AdoptCF, IOSurfaceCreate(dictionary.get()));
+}
+
+PassRefPtr<ShareableSurface> ShareableSurface::create(CGLContextObj cglContextObj, const IntSize& size)
+{
+ RetainPtr<IOSurfaceRef> ioSurface = createIOSurface(size);
+ if (!ioSurface)
+ return 0;
+
+ return adoptRef(new ShareableSurface(cglContextObj, size, ioSurface.get()));
+}
+
+PassRefPtr<ShareableSurface> ShareableSurface::create(CGLContextObj cglContextObj, const Handle& handle)
+{
+ ASSERT_ARG(handle, handle.m_port != MACH_PORT_NULL);
+
+ RetainPtr<IOSurfaceRef> ioSurface(AdoptCF, IOSurfaceLookupFromMachPort(handle.m_port));
+ if (!ioSurface)
+ return 0;
+
+ IntSize size = IntSize(IOSurfaceGetWidth(ioSurface.get()), IOSurfaceGetHeight(ioSurface.get()));
+
+ return adoptRef(new ShareableSurface(cglContextObj, size, ioSurface.get()));
+}
+
+ShareableSurface::ShareableSurface(CGLContextObj cglContextObj, const IntSize& size, IOSurfaceRef ioSurface)
+ : m_cglContextObj(CGLRetainContext(cglContextObj))
+ , m_size(size)
+ , m_textureID(0)
+ , m_frameBufferObjectID(0)
+ , m_ioSurface(ioSurface)
+{
+}
+
+ShareableSurface::~ShareableSurface()
+{
+ DECLARE_GL_CONTEXT_VARIABLE(m_cglContextObj);
+
+ if (m_textureID)
+ glDeleteTextures(1, &m_textureID);
+
+ if (m_frameBufferObjectID)
+ glDeleteFramebuffersEXT(1, &m_frameBufferObjectID);
+
+ CGLReleaseContext(m_cglContextObj);
+}
+
+bool ShareableSurface::createHandle(Handle& handle)
+{
+ ASSERT_ARG(handle, handle.m_port == MACH_PORT_NULL);
+
+ mach_port_t port = IOSurfaceCreateMachPort(m_ioSurface.get());
+ if (port == MACH_PORT_NULL)
+ return false;
+
+ handle.m_port = port;
+ return true;
+}
+
+void ShareableSurface::attach()
+{
+ DECLARE_GL_CONTEXT_VARIABLE(m_cglContextObj);
+
+ if (!m_frameBufferObjectID) {
+ // Generate a frame buffer object.
+ glGenFramebuffersEXT(1, &m_frameBufferObjectID);
+
+ // Associate it with the texture.
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObjectID);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_EXT, textureID(), 0);
+ } else
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBufferObjectID);
+}
+
+void ShareableSurface::detach()
+{
+ DECLARE_GL_CONTEXT_VARIABLE(m_cglContextObj);
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+}
+
+unsigned ShareableSurface::textureID()
+{
+ if (m_textureID)
+ return m_textureID;
+
+ DECLARE_GL_CONTEXT_VARIABLE(m_cglContextObj);
+
+ // Generate a texture.
+ glGenTextures(1, &m_textureID);
+
+ // Associate it with our IOSurface.
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, m_textureID);
+ CGLTexImageIOSurface2D(cgl_ctx, GL_TEXTURE_RECTANGLE_EXT, GL_RGBA8, m_size.width(), m_size.height(), GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, m_ioSurface.get(), 0);
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, 0);
+
+ return m_textureID;
+}
+
+} // namespace WebKit
+
diff --git a/Source/WebKit2/Shared/mac/ShareableSurface.h b/Source/WebKit2/Shared/mac/ShareableSurface.h
new file mode 100644
index 0000000..dda1364
--- /dev/null
+++ b/Source/WebKit2/Shared/mac/ShareableSurface.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ShareableSurface_h
+#define ShareableSurface_h
+
+#include <WebCore/IntSize.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RetainPtr.h>
+
+typedef struct _CGLContextObject* CGLContextObj;
+typedef struct __IOSurface* IOSurfaceRef;
+
+namespace CoreIPC {
+ class ArgumentDecoder;
+ class ArgumentEncoder;
+}
+
+namespace WebKit {
+
+class ShareableSurface : public RefCounted<ShareableSurface> {
+public:
+ class Handle {
+ WTF_MAKE_NONCOPYABLE(Handle);
+
+ public:
+ Handle();
+ ~Handle();
+
+ void encode(CoreIPC::ArgumentEncoder*) const;
+ static bool decode(CoreIPC::ArgumentDecoder*, Handle&);
+
+ private:
+ friend class ShareableSurface;
+
+ mutable mach_port_t m_port;
+ };
+
+ // Create a shareable surface with the given size. Returns 0 on failure.
+ static PassRefPtr<ShareableSurface> create(CGLContextObj, const WebCore::IntSize&);
+
+ // Create a shareable surface from a handle. Returns 0 on failure.
+ static PassRefPtr<ShareableSurface> create(CGLContextObj, const Handle&);
+
+ ~ShareableSurface();
+
+ bool createHandle(Handle&);
+
+ unsigned textureID();
+
+ void attach();
+ void detach();
+
+private:
+ ShareableSurface(CGLContextObj, const WebCore::IntSize&, IOSurfaceRef);
+
+ // The OpenGL context.
+ CGLContextObj m_cglContextObj;
+
+ // The size of the surface.
+ WebCore::IntSize m_size;
+
+ // The ID of the texture.
+ unsigned m_textureID;
+
+ // The frame buffer object ID of the texture; used when the surface is used as a render destination.
+ unsigned m_frameBufferObjectID;
+
+ RetainPtr<IOSurfaceRef> m_ioSurface;
+};
+
+} // namespace WebKit
+
+#endif // ShareableSurface_h
diff --git a/Source/WebKit2/Shared/mac/UpdateChunk.cpp b/Source/WebKit2/Shared/mac/UpdateChunk.cpp
index a9376db..76206fb 100644
--- a/Source/WebKit2/Shared/mac/UpdateChunk.cpp
+++ b/Source/WebKit2/Shared/mac/UpdateChunk.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "UpdateChunk.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm b/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
index 8ffba8a..63dd20d 100644
--- a/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
+++ b/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebCoreArgumentCoders.h"
+#import "config.h"
+#import "WebCoreArgumentCoders.h"
-#include "ArgumentCodersCF.h"
-#include "WebKitSystemInterface.h"
+#import "ArgumentCodersCF.h"
+#import "WebKitSystemInterface.h"
namespace CoreIPC {
diff --git a/Source/WebKit2/Shared/mac/WebEventFactory.h b/Source/WebKit2/Shared/mac/WebEventFactory.h
index 7bc8d97..73fbed0 100644
--- a/Source/WebKit2/Shared/mac/WebEventFactory.h
+++ b/Source/WebKit2/Shared/mac/WebEventFactory.h
@@ -38,6 +38,10 @@ public:
static WebMouseEvent createWebMouseEvent(NSEvent *event, NSView *windowView);
static WebWheelEvent createWebWheelEvent(NSEvent *event, NSView *windowView);
static WebKeyboardEvent createWebKeyboardEvent(NSEvent *event, NSView *windowView);
+
+#if ENABLE(GESTURE_EVENTS)
+ static WebGestureEvent createWebGestureEvent(NSEvent *event, NSView *windowView);
+#endif
};
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/mac/WebEventFactory.mm b/Source/WebKit2/Shared/mac/WebEventFactory.mm
index 46ff906..e31c62e 100644
--- a/Source/WebKit2/Shared/mac/WebEventFactory.mm
+++ b/Source/WebKit2/Shared/mac/WebEventFactory.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebEventFactory.h"
#import "WebKitSystemInterface.h"
@@ -188,7 +189,22 @@ static WebWheelEvent::Phase phaseForEvent(NSEvent *event)
return WebWheelEvent::PhaseNone;
#endif
}
-
+
+#if ENABLE(GESTURE_EVENTS)
+static WebEvent::Type gestureEventTypeForEvent(NSEvent *event)
+{
+ switch ([event type]) {
+ case NSEventTypeBeginGesture:
+ return WebEvent::GestureScrollBegin;
+ case NSEventTypeEndGesture:
+ return WebEvent::GestureScrollEnd;
+ default:
+ ASSERT_NOT_REACHED();
+ return WebEvent::GestureScrollEnd;
+ }
+}
+#endif
+
static inline String textFromEvent(NSEvent* event)
{
if ([event type] == NSFlagsChanged)
@@ -1020,10 +1036,11 @@ WebWheelEvent WebEventFactory::createWebWheelEvent(NSEvent *event, NSView *windo
}
WebWheelEvent::Phase phase = phaseForEvent(event);
+ bool hasPreciseScrollingDeltas = continuous;
WebEvent::Modifiers modifiers = modifiersForEvent(event);
double timestamp = [event timestamp];
- return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, phase, modifiers, timestamp);
+ return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, phase, hasPreciseScrollingDeltas, modifiers, timestamp);
}
WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(NSEvent *event, NSView *)
@@ -1044,4 +1061,17 @@ WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(NSEvent *event, NSView
return WebKeyboardEvent(type, text, unmodifiedText, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, macCharCode, autoRepeat, isKeypad, isSystemKey, modifiers, timestamp);
}
+#if ENABLE(GESTURE_EVENTS)
+WebGestureEvent WebEventFactory::createWebGestureEvent(NSEvent *event, NSView *windowView)
+{
+ WebEvent::Type type = gestureEventTypeForEvent(event);
+ NSPoint position = pointForEvent(event, windowView);
+ NSPoint globalPosition = globalPointForEvent(event);
+ WebEvent::Modifiers modifiers = modifiersForEvent(event);
+ double timestamp = [event timestamp];
+
+ return WebGestureEvent(type, IntPoint(position), IntPoint(globalPosition), modifiers, timestamp);
+}
+#endif
+
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm b/Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm
index 5be52d4..ed12cc4 100644
--- a/Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm
+++ b/Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm
@@ -23,18 +23,19 @@
*
*/
-#if ENABLE(MEMORY_SAMPLER)
+#import "config.h"
+#import "WebMemorySampler.h"
-#include "WebMemorySampler.h"
+#if ENABLE(MEMORY_SAMPLER)
-#include <JavaScriptCore/MemoryStatistics.h>
-#include <mach/mach.h>
-#include <mach/task.h>
-#include <mach/mach_types.h>
-#include <malloc/malloc.h>
-#include <runtime/JSLock.h>
-#include <WebCore/JSDOMWindow.h>
-#include <wtf/CurrentTime.h>
+#import <JavaScriptCore/MemoryStatistics.h>
+#import <mach/mach.h>
+#import <mach/task.h>
+#import <mach/mach_types.h>
+#import <malloc/malloc.h>
+#import <runtime/JSLock.h>
+#import <WebCore/JSDOMWindow.h>
+#import <wtf/CurrentTime.h>
using namespace WebCore;
using namespace JSC;
@@ -115,9 +116,8 @@ WebMemoryStatistics WebMemorySampler::sampleWebKit() const
totalBytesCommitted += fastMallocBytesCommitted;
JSLock lock(SilenceAssertionsOnly);
- MarkedSpace::Statistics heapMemoryStats = heapStatistics(JSDOMWindow::commonJSGlobalData());
- size_t jscHeapBytesInUse = heapMemoryStats.size - heapMemoryStats.free;
- size_t jscHeapBytesCommitted = heapMemoryStats.size;
+ size_t jscHeapBytesInUse = JSDOMWindow::commonJSGlobalData()->heap.size();
+ size_t jscHeapBytesCommitted = JSDOMWindow::commonJSGlobalData()->heap.capacity();
totalBytesInUse += jscHeapBytesInUse;
totalBytesCommitted += jscHeapBytesCommitted;
diff --git a/Source/WebKit2/Shared/mac/WebURLRequestMac.mm b/Source/WebKit2/Shared/mac/WebURLRequestMac.mm
index a7196f7..4eda378 100644
--- a/Source/WebKit2/Shared/mac/WebURLRequestMac.mm
+++ b/Source/WebKit2/Shared/mac/WebURLRequestMac.mm
@@ -23,7 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebURLRequest.h"
+#import "config.h"
+#import "WebURLRequest.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/mac/WebURLResponseMac.mm b/Source/WebKit2/Shared/mac/WebURLResponseMac.mm
index ff5b6e6..6f44afc 100644
--- a/Source/WebKit2/Shared/mac/WebURLResponseMac.mm
+++ b/Source/WebKit2/Shared/mac/WebURLResponseMac.mm
@@ -23,7 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebURLResponse.h"
+#import "config.h"
+#import "WebURLResponse.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/qt/CleanupHandler.cpp b/Source/WebKit2/Shared/qt/CleanupHandler.cpp
index 74c1d4c..1ec44d4 100644
--- a/Source/WebKit2/Shared/qt/CleanupHandler.cpp
+++ b/Source/WebKit2/Shared/qt/CleanupHandler.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "CleanupHandler.h"
#include "MappedMemoryPool.h"
diff --git a/Source/WebKit2/Shared/qt/NativeWebKeyboardEventQt.cpp b/Source/WebKit2/Shared/qt/NativeWebKeyboardEventQt.cpp
index d0d247c..9a2d666 100644
--- a/Source/WebKit2/Shared/qt/NativeWebKeyboardEventQt.cpp
+++ b/Source/WebKit2/Shared/qt/NativeWebKeyboardEventQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NativeWebKeyboardEvent.h"
#include "WebEventFactoryQt.h"
diff --git a/Source/WebKit2/Shared/qt/ShareableBitmapQt.cpp b/Source/WebKit2/Shared/qt/ShareableBitmapQt.cpp
index 184b0f8..36c45a2 100644
--- a/Source/WebKit2/Shared/qt/ShareableBitmapQt.cpp
+++ b/Source/WebKit2/Shared/qt/ShareableBitmapQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ShareableBitmap.h"
#include <QImage>
diff --git a/Source/WebKit2/Shared/qt/UpdateChunk.cpp b/Source/WebKit2/Shared/qt/UpdateChunk.cpp
index 4d8e62d..772d499 100644
--- a/Source/WebKit2/Shared/qt/UpdateChunk.cpp
+++ b/Source/WebKit2/Shared/qt/UpdateChunk.cpp
@@ -25,11 +25,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "UpdateChunk.h"
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
-#include "MappedMemoryPool.h"
#include "WebCoreArgumentCoders.h"
#include <QIODevice>
#include <QImage>
@@ -43,28 +43,35 @@ using namespace std;
namespace WebKit {
UpdateChunk::UpdateChunk()
- : m_mappedMemory(0)
{
}
UpdateChunk::UpdateChunk(const IntRect& rect)
: m_rect(rect)
- , m_mappedMemory(MappedMemoryPool::instance()->mapMemory(size()))
+ , m_sharedMemory(SharedMemory::create(size()))
{
}
UpdateChunk::~UpdateChunk()
{
- if (m_mappedMemory)
- m_mappedMemory->markFree();
}
void UpdateChunk::encode(CoreIPC::ArgumentEncoder* encoder) const
{
encoder->encode(m_rect);
- encoder->encode(String(m_mappedMemory->mappedFileName()));
+ if (!m_sharedMemory) {
+ encoder->encode(false);
+ return;
+ }
+
+ SharedMemory::Handle handle;
+ if (m_sharedMemory->createHandle(handle, SharedMemory::ReadOnly)) {
+ encoder->encode(true);
+ encoder->encode(handle);
+ } else
+ encoder->encode(false);
- m_mappedMemory = 0;
+ m_sharedMemory = 0;
}
bool UpdateChunk::decode(CoreIPC::ArgumentDecoder* decoder, UpdateChunk& chunk)
@@ -74,16 +81,23 @@ bool UpdateChunk::decode(CoreIPC::ArgumentDecoder* decoder, UpdateChunk& chunk)
IntRect rect;
if (!decoder->decode(rect))
return false;
+
chunk.m_rect = rect;
- if (chunk.isEmpty())
- return true; // Successfully decoded empty chunk.
+ bool hasSharedMemory;
+ if (!decoder->decode(hasSharedMemory))
+ return false;
- String fileName;
- if (!decoder->decode(fileName))
+ if (!hasSharedMemory) {
+ chunk.m_sharedMemory = 0;
+ return true;
+ }
+
+ SharedMemory::Handle handle;
+ if (!decoder->decode(handle))
return false;
- chunk.m_mappedMemory = MappedMemoryPool::instance()->mapFile(fileName, chunk.size());
+ chunk.m_sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly);
return true;
}
@@ -101,7 +115,10 @@ size_t UpdateChunk::size() const
QImage UpdateChunk::createImage() const
{
- ASSERT(m_mappedMemory);
+ ASSERT(m_sharedMemory);
+ if (!m_sharedMemory)
+ return QImage();
+
QImage::Format format;
int bpp;
if (QPixmap::defaultDepth() == 16) {
@@ -112,7 +129,7 @@ QImage UpdateChunk::createImage() const
bpp = 4;
}
- return QImage(m_mappedMemory->data(), m_rect.width(), m_rect.height(), (m_rect.width() * bpp + 3) & ~0x3, format);
+ return QImage(reinterpret_cast<unsigned char*>(m_sharedMemory->data()), m_rect.width(), m_rect.height(), (m_rect.width() * bpp + 3) & ~0x3, format);
}
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/qt/UpdateChunk.h b/Source/WebKit2/Shared/qt/UpdateChunk.h
index f506ba7..664056a 100644
--- a/Source/WebKit2/Shared/qt/UpdateChunk.h
+++ b/Source/WebKit2/Shared/qt/UpdateChunk.h
@@ -29,6 +29,7 @@
#include <QImage>
#include <WebCore/IntRect.h>
+#include "SharedMemory.h"
namespace CoreIPC {
class ArgumentEncoder;
@@ -37,8 +38,6 @@ class ArgumentDecoder;
namespace WebKit {
-class MappedMemory;
-
class UpdateChunk {
public:
UpdateChunk();
@@ -58,7 +57,7 @@ private:
WebCore::IntRect m_rect;
- mutable MappedMemory* m_mappedMemory;
+ mutable RefPtr<SharedMemory> m_sharedMemory;
};
} // namespace WebKit
diff --git a/Source/WebKit2/Shared/qt/WebCoreArgumentCodersQt.cpp b/Source/WebKit2/Shared/qt/WebCoreArgumentCodersQt.cpp
index 80ab3f9..44cdbea 100644
--- a/Source/WebKit2/Shared/qt/WebCoreArgumentCodersQt.cpp
+++ b/Source/WebKit2/Shared/qt/WebCoreArgumentCodersQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebCoreArgumentCoders.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp b/Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp
index 39a6455..8edc03c 100644
--- a/Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp
+++ b/Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEventFactoryQt.h"
#include <qgraphicssceneevent.h>
#include <QApplication>
diff --git a/Source/WebKit2/Shared/qt/WebURLRequestQt.cpp b/Source/WebKit2/Shared/qt/WebURLRequestQt.cpp
index 834353a..717a4cc 100644
--- a/Source/WebKit2/Shared/qt/WebURLRequestQt.cpp
+++ b/Source/WebKit2/Shared/qt/WebURLRequestQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebURLRequest.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/qt/WebURLResponseQt.cpp b/Source/WebKit2/Shared/qt/WebURLResponseQt.cpp
index abc0c29..35625e3 100644
--- a/Source/WebKit2/Shared/qt/WebURLResponseQt.cpp
+++ b/Source/WebKit2/Shared/qt/WebURLResponseQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebURLResponse.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/win/CommandLineWin.cpp b/Source/WebKit2/Shared/win/CommandLineWin.cpp
index 7d6c9e3..2e2798f 100644
--- a/Source/WebKit2/Shared/win/CommandLineWin.cpp
+++ b/Source/WebKit2/Shared/win/CommandLineWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "CommandLine.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/win/LayerTreeContextWin.cpp b/Source/WebKit2/Shared/win/LayerTreeContextWin.cpp
new file mode 100644
index 0000000..f1bf1b4
--- /dev/null
+++ b/Source/WebKit2/Shared/win/LayerTreeContextWin.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "LayerTreeContext.h"
+
+#include "NotImplemented.h"
+
+namespace WebKit {
+
+LayerTreeContext::LayerTreeContext()
+{
+ notImplemented();
+}
+
+LayerTreeContext::~LayerTreeContext()
+{
+ notImplemented();
+}
+
+void LayerTreeContext::encode(CoreIPC::ArgumentEncoder*) const
+{
+ notImplemented();
+}
+
+bool LayerTreeContext::decode(CoreIPC::ArgumentDecoder*, LayerTreeContext&)
+{
+ notImplemented();
+ return true;
+}
+
+bool LayerTreeContext::isEmpty() const
+{
+ notImplemented();
+ return true;
+}
+
+bool operator==(const LayerTreeContext&, const LayerTreeContext&)
+{
+ notImplemented();
+ return true;
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/Shared/win/NativeWebKeyboardEventWin.cpp b/Source/WebKit2/Shared/win/NativeWebKeyboardEventWin.cpp
index d947b87..37aaf5d 100644
--- a/Source/WebKit2/Shared/win/NativeWebKeyboardEventWin.cpp
+++ b/Source/WebKit2/Shared/win/NativeWebKeyboardEventWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NativeWebKeyboardEvent.h"
#include "WebEventFactory.h"
diff --git a/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp b/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp
index b88a7ef..ade2291 100644
--- a/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp
+++ b/Source/WebKit2/Shared/win/PlatformCertificateInfo.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PlatformCertificateInfo.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/win/UpdateChunk.cpp b/Source/WebKit2/Shared/win/UpdateChunk.cpp
index 2aabead..236e279 100644
--- a/Source/WebKit2/Shared/win/UpdateChunk.cpp
+++ b/Source/WebKit2/Shared/win/UpdateChunk.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "UpdateChunk.h"
#include "ArgumentDecoder.h"
diff --git a/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp b/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp
index 95d7de2..684378a 100644
--- a/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp
+++ b/Source/WebKit2/Shared/win/WebCoreArgumentCodersWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebCoreArgumentCoders.h"
#if USE(CFNETWORK)
diff --git a/Source/WebKit2/Shared/win/WebEventFactory.cpp b/Source/WebKit2/Shared/win/WebEventFactory.cpp
index a4081fc..44a67fc 100644
--- a/Source/WebKit2/Shared/win/WebEventFactory.cpp
+++ b/Source/WebKit2/Shared/win/WebEventFactory.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEventFactory.h"
#include <windowsx.h>
diff --git a/Source/WebKit2/Shared/win/WebURLRequestWin.cpp b/Source/WebKit2/Shared/win/WebURLRequestWin.cpp
index e64d451..4bbc10c 100644
--- a/Source/WebKit2/Shared/win/WebURLRequestWin.cpp
+++ b/Source/WebKit2/Shared/win/WebURLRequestWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebURLRequest.h"
namespace WebKit {
diff --git a/Source/WebKit2/Shared/win/WebURLResponseWin.cpp b/Source/WebKit2/Shared/win/WebURLResponseWin.cpp
index 3b3f24c..e41c0f3 100644
--- a/Source/WebKit2/Shared/win/WebURLResponseWin.cpp
+++ b/Source/WebKit2/Shared/win/WebURLResponseWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebURLResponse.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/API/C/WKAPICast.h b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
index 15cb7ee..5ce3b1f 100644
--- a/Source/WebKit2/UIProcess/API/C/WKAPICast.h
+++ b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -230,4 +231,7 @@ inline WebCore::CredentialPersistence toCredentialPersistence(WKCredentialPersis
#include "WKAPICastWin.h"
#endif
+#if defined(BUILDING_GTK__)
+#include "WKAPICastGtk.h"
+#endif
#endif // WKAPICast_h
diff --git a/Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp b/Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp
index 0997577..5319c2a 100644
--- a/Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKAuthenticationChallenge.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKAuthenticationChallenge.h"
#include "AuthenticationChallengeProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKAuthenticationDecisionListener.cpp b/Source/WebKit2/UIProcess/API/C/WKAuthenticationDecisionListener.cpp
index 959f5c2..bcb175d 100644
--- a/Source/WebKit2/UIProcess/API/C/WKAuthenticationDecisionListener.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKAuthenticationDecisionListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKAuthenticationDecisionListener.h"
#include "AuthenticationDecisionListener.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKBackForwardList.cpp b/Source/WebKit2/UIProcess/API/C/WKBackForwardList.cpp
index c2343ca..d7af883 100644
--- a/Source/WebKit2/UIProcess/API/C/WKBackForwardList.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKBackForwardList.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBackForwardList.h"
#include "WebBackForwardList.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp b/Source/WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp
index 2165737..5f6a222 100644
--- a/Source/WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBackForwardListItem.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKContext.cpp b/Source/WebKit2/UIProcess/API/C/WKContext.cpp
index c207225..82bd13d 100644
--- a/Source/WebKit2/UIProcess/API/C/WKContext.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKContext.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKContext.h"
#include "WKContextPrivate.h"
@@ -176,3 +177,8 @@ void WKContextStopMemorySampler(WKContextRef contextRef)
{
toImpl(contextRef)->stopMemorySampler();
}
+
+void WKContextSetDatabaseDirectory(WKContextRef contextRef, WKStringRef databaseDirectory)
+{
+ toImpl(contextRef)->setDatabaseDirectory(toImpl(databaseDirectory)->string());
+}
diff --git a/Source/WebKit2/UIProcess/API/C/WKContextPrivate.h b/Source/WebKit2/UIProcess/API/C/WKContextPrivate.h
index 8bcb1b6..bcd24a5 100644
--- a/Source/WebKit2/UIProcess/API/C/WKContextPrivate.h
+++ b/Source/WebKit2/UIProcess/API/C/WKContextPrivate.h
@@ -54,6 +54,10 @@ WK_EXPORT void WKContextRegisterURLSchemeAsSecure(WKContextRef context, WKString
WK_EXPORT void WKContextSetDomainRelaxationForbiddenForURLScheme(WKContextRef context, WKStringRef urlScheme);
+// FIXME: This function is only effective if called before the Web process is launched. But
+// we should really change this setting to be on WebPreferences and changeable at runtime.
+WK_EXPORT void WKContextSetDatabaseDirectory(WKContextRef context, WKStringRef databaseDirectory);
+
#ifdef __cplusplus
}
#endif
diff --git a/Source/WebKit2/UIProcess/API/C/WKCredential.cpp b/Source/WebKit2/UIProcess/API/C/WKCredential.cpp
index 25e1185..997fd7a 100644
--- a/Source/WebKit2/UIProcess/API/C/WKCredential.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKCredential.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKCredential.h"
#include "WebCredential.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp b/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp
index 226ef8c..c29d63c 100644
--- a/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKDatabaseManager.h"
#include "WebDatabaseManagerProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKDownload.cpp b/Source/WebKit2/UIProcess/API/C/WKDownload.cpp
index 8960e2a..45dea68 100644
--- a/Source/WebKit2/UIProcess/API/C/WKDownload.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKDownload.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKDownload.h"
#include "DownloadProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKFormSubmissionListener.cpp b/Source/WebKit2/UIProcess/API/C/WKFormSubmissionListener.cpp
index ae98831..842c534 100644
--- a/Source/WebKit2/UIProcess/API/C/WKFormSubmissionListener.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKFormSubmissionListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKFormSubmissionListener.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKFrame.cpp b/Source/WebKit2/UIProcess/API/C/WKFrame.cpp
index cce572a..af4006e 100644
--- a/Source/WebKit2/UIProcess/API/C/WKFrame.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKFrame.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKFrame.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp b/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp
index d44d0d3..3bb6730 100644
--- a/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKFramePolicyListener.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKGeolocationManager.cpp b/Source/WebKit2/UIProcess/API/C/WKGeolocationManager.cpp
index ed399ad..3b75855 100644
--- a/Source/WebKit2/UIProcess/API/C/WKGeolocationManager.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKGeolocationManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKGeolocationManager.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp b/Source/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp
index ca52798..cd1757c 100644
--- a/Source/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKGeolocationPermissionRequest.h"
#include "GeolocationPermissionRequestProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp b/Source/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp
index 7977369..5ce85c1 100644
--- a/Source/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKGeolocationPosition.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKInspector.cpp b/Source/WebKit2/UIProcess/API/C/WKInspector.cpp
index 7a87265..325db5a 100644
--- a/Source/WebKit2/UIProcess/API/C/WKInspector.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKInspector.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKInspector.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/UIProcess/API/C/WKNavigationData.cpp b/Source/WebKit2/UIProcess/API/C/WKNavigationData.cpp
index 90eb142..fd0ddab 100644
--- a/Source/WebKit2/UIProcess/API/C/WKNavigationData.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKNavigationData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKNavigationData.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp b/Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp
index 3cf89cf..8b78d6d 100644
--- a/Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKOpenPanelParameters.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKOpenPanelResultListener.cpp b/Source/WebKit2/UIProcess/API/C/WKOpenPanelResultListener.cpp
index 5b143f2..8c79318 100644
--- a/Source/WebKit2/UIProcess/API/C/WKOpenPanelResultListener.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKOpenPanelResultListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKOpenPanelResultListener.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.cpp b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
index 82daa4b..1d5763f 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKPage.h"
#include "WKPagePrivate.h"
@@ -290,6 +291,16 @@ WKSize WKPageFixedLayoutSize(WKPageRef pageRef)
return toAPI(toImpl(pageRef)->fixedLayoutSize());
}
+bool WKPageHasHorizontalScrollbar(WKPageRef pageRef)
+{
+ return toImpl(pageRef)->hasHorizontalScrollbar();
+}
+
+bool WKPageHasVerticalScrollbar(WKPageRef pageRef)
+{
+ return toImpl(pageRef)->hasVerticalScrollbar();
+}
+
void WKPageFindString(WKPageRef pageRef, WKStringRef string, WKFindOptions options, unsigned maxMatchCount)
{
toImpl(pageRef)->findString(toImpl(string)->string(), toFindOptions(options), maxMatchCount);
@@ -429,3 +440,15 @@ void WKPageGetContentsAsString_b(WKPageRef pageRef, WKPageGetSourceForFrameBlock
WKPageGetContentsAsString(pageRef, Block_copy(block), callContentsAsStringBlockBlockAndDispose);
}
#endif
+
+void WKPageForceRepaint(WKPageRef pageRef, void* context, WKPageForceRepaintFunction callback)
+{
+ toImpl(pageRef)->forceRepaint(VoidCallback::create(context, callback));
+}
+
+WK_EXPORT WKURLRef WKPageCopyPendingAPIRequestURL(WKPageRef pageRef)
+{
+ if (toImpl(pageRef)->pendingAPIRequestURL().isNull())
+ return 0;
+ return toCopiedURLAPI(toImpl(pageRef)->pendingAPIRequestURL());
+}
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.h b/Source/WebKit2/UIProcess/API/C/WKPage.h
index e4bf162..e6ebc5c 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.h
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.h
@@ -60,6 +60,7 @@ typedef void (*WKPageDidDisplayInsecureContentForFrameCallback)(WKPageRef page,
typedef void (*WKPageDidRunInsecureContentForFrameCallback)(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo);
typedef bool (*WKPageCanAuthenticateAgainstProtectionSpaceInFrameCallback)(WKPageRef page, WKFrameRef frame, WKProtectionSpaceRef protectionSpace, const void *clientInfo);
typedef void (*WKPageDidReceiveAuthenticationChallengeInFrameCallback)(WKPageRef page, WKFrameRef frame, WKAuthenticationChallengeRef authenticationChallenge, const void *clientInfo);
+typedef void (*WKPageDidChangeBackForwardListCallback)(WKPageRef page, WKBackForwardListItemRef addedItem, WKArrayRef removedItems, const void *clientInfo);
struct WKPageLoaderClient {
int version;
@@ -91,14 +92,14 @@ struct WKPageLoaderClient {
WKPageCallback processDidBecomeResponsive;
WKPageCallback processDidCrash;
- WKPageCallback didChangeBackForwardList;
+ WKPageDidChangeBackForwardListCallback didChangeBackForwardList;
};
typedef struct WKPageLoaderClient WKPageLoaderClient;
// Policy Client.
-typedef void (*WKPageDecidePolicyForNavigationActionCallback)(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo);
-typedef void (*WKPageDecidePolicyForNewWindowActionCallback)(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo);
-typedef void (*WKPageDecidePolicyForMIMETypeCallback)(WKPageRef page, WKStringRef MIMEType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo);
+typedef void (*WKPageDecidePolicyForNavigationActionCallback)(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo);
+typedef void (*WKPageDecidePolicyForNewWindowActionCallback)(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo);
+typedef void (*WKPageDecidePolicyForMIMETypeCallback)(WKPageRef page, WKFrameRef frame, WKStringRef MIMEType, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo);
struct WKPagePolicyClient {
int version;
@@ -120,7 +121,7 @@ struct WKPageFormClient {
typedef struct WKPageFormClient WKPageFormClient;
// Resource Load Client.
-typedef void (*WKPageDidInitiateLoadForResourceCallback)(WKPageRef page, WKFrameRef frame, uint64_t resourceIdentifier, WKURLRequestRef request, const void* clientInfo);
+typedef void (*WKPageDidInitiateLoadForResourceCallback)(WKPageRef page, WKFrameRef frame, uint64_t resourceIdentifier, WKURLRequestRef request, bool pageIsProvisionallyLoading, const void* clientInfo);
typedef void (*WKPageDidSendRequestForResourceCallback)(WKPageRef page, WKFrameRef frame, uint64_t resourceIdentifier, WKURLRequestRef request, WKURLResponseRef redirectResponse, const void* clientInfo);
typedef void (*WKPageDidReceiveResponseForResourceCallback)(WKPageRef page, WKFrameRef frame, uint64_t resourceIdentifier, WKURLResponseRef response, const void* clientInfo);
typedef void (*WKPageDidReceiveContentLengthForResourceCallback)(WKPageRef page, WKFrameRef frame, uint64_t resourceIdentifier, uint64_t contentLength, const void* clientInfo);
@@ -167,6 +168,7 @@ typedef float (*WKPageFooterHeightCallback)(WKPageRef page, WKFrameRef frame, co
typedef void (*WKPageDrawHeaderCallback)(WKPageRef page, WKFrameRef frame, WKRect rect, const void* clientInfo);
typedef void (*WKPageDrawFooterCallback)(WKPageRef page, WKFrameRef frame, WKRect rect, const void* clientInfo);
typedef void (*WKPagePrintFrameCallback)(WKPageRef page, WKFrameRef frame, const void* clientInfo);
+typedef void (*WKPageDidCompleteRubberBandForMainFrameCallback)(WKPageRef page, WKSize initialOverhang, const void* clientInfo);
struct WKPageUIClient {
int version;
@@ -203,6 +205,7 @@ struct WKPageUIClient {
WKPageDrawFooterCallback drawFooter;
WKPagePrintFrameCallback printFrame;
WKPageCallback runModal;
+ WKPageDidCompleteRubberBandForMainFrameCallback didCompleteRubberBandForMainFrame;
};
typedef struct WKPageUIClient WKPageUIClient;
@@ -305,8 +308,11 @@ WK_EXPORT double WKPageGetScaleFactor(WKPageRef page);
WK_EXPORT void WKPageSetUseFixedLayout(WKPageRef page, bool fixed);
WK_EXPORT void WKPageSetFixedLayoutSize(WKPageRef page, WKSize size);
-WK_EXPORT bool WKPageUseFixedLayout(WKPageRef pageRef);
-WK_EXPORT WKSize WKPageFixedLayoutSize(WKPageRef pageRef);
+WK_EXPORT bool WKPageUseFixedLayout(WKPageRef page);
+WK_EXPORT WKSize WKPageFixedLayoutSize(WKPageRef page);
+
+WK_EXPORT bool WKPageHasHorizontalScrollbar(WKPageRef page);
+WK_EXPORT bool WKPageHasVerticalScrollbar(WKPageRef page);
WK_EXPORT void WKPageFindString(WKPageRef page, WKStringRef string, WKFindOptions findOptions, unsigned maxMatchCount);
WK_EXPORT void WKPageHideFindUI(WKPageRef page);
@@ -341,6 +347,11 @@ typedef void (^WKPageGetContentsAsStringBlock)(WKStringRef, WKErrorRef);
WK_EXPORT void WKPageGetContentsAsString_b(WKPageRef page, WKPageGetContentsAsStringBlock block);
#endif
+typedef void (*WKPageForceRepaintFunction)(WKErrorRef, void*);
+WK_EXPORT void WKPageForceRepaint(WKPageRef page, void* context, WKPageForceRepaintFunction function);
+
+WK_EXPORT WKURLRef WKPageCopyPendingAPIRequestURL(WKPageRef page);
+
#ifdef __cplusplus
}
#endif
diff --git a/Source/WebKit2/UIProcess/API/C/WKPageGroup.cpp b/Source/WebKit2/UIProcess/API/C/WKPageGroup.cpp
index 6c10014..8a4d86a 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPageGroup.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKPageGroup.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKPageGroup.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
index 379859c..97e9403 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKPreferences.h"
#include "WKPreferencesPrivate.h"
@@ -330,6 +331,16 @@ bool WKPreferencesGetCompositingRepaintCountersVisible(WKPreferencesRef preferen
return toImpl(preferencesRef)->compositingRepaintCountersVisible();
}
+void WKPreferencesSetWebGLEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+ toImpl(preferencesRef)->setWebGLEnabled(flag);
+}
+
+bool WKPreferencesGetWebGLEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->webGLEnabled();
+}
+
void WKPreferencesSetNeedsSiteSpecificQuirks(WKPreferencesRef preferencesRef, bool flag)
{
toImpl(preferencesRef)->setNeedsSiteSpecificQuirks(flag);
@@ -449,3 +460,13 @@ bool WKPreferencesGetDOMPasteAllowed(WKPreferencesRef preferencesRef)
{
return toImpl(preferencesRef)->domPasteAllowed();
}
+
+void WKPreferencesSetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef, bool enabled)
+{
+ toImpl(preferencesRef)->setJavaScriptCanAccessClipboard(enabled);
+}
+
+bool WKPreferencesGetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->javaScriptCanAccessClipboard();
+}
diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferences.h b/Source/WebKit2/UIProcess/API/C/WKPreferences.h
index 8116575..5c6c478 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPreferences.h
+++ b/Source/WebKit2/UIProcess/API/C/WKPreferences.h
@@ -146,6 +146,10 @@ WK_EXPORT bool WKPreferencesGetAuthorAndUserStylesEnabled(WKPreferencesRef prefe
WK_EXPORT void WKPreferencesSetShouldPrintBackgrounds(WKPreferencesRef preferences, bool shouldPrintBackgrounds);
WK_EXPORT bool WKPreferencesGetShouldPrintBackgrounds(WKPreferencesRef preferences);
+// Defaults to false.
+WK_EXPORT void WKPreferencesSetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT bool WKPreferencesGetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef);
+
#ifdef __cplusplus
}
#endif
diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h b/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h
index 7408c8e..ff9beec 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h
+++ b/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h
@@ -60,6 +60,10 @@ WK_EXPORT void WKPreferencesSetCompositingRepaintCountersVisible(WKPreferencesRe
WK_EXPORT bool WKPreferencesGetCompositingRepaintCountersVisible(WKPreferencesRef);
// Defaults to false.
+WK_EXPORT void WKPreferencesSetWebGLEnabled(WKPreferencesRef, bool);
+WK_EXPORT bool WKPreferencesGetWebGLEnabled(WKPreferencesRef);
+
+// Defaults to false.
WK_EXPORT void WKPreferencesSetNeedsSiteSpecificQuirks(WKPreferencesRef, bool);
WK_EXPORT bool WKPreferencesGetNeedsSiteSpecificQuirks(WKPreferencesRef);
diff --git a/Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp b/Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp
index c72ee98..7e764b9 100644
--- a/Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKProtectionSpace.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKProtectionSpace.h"
#include "WebProtectionSpace.h"
diff --git a/Source/WebKit2/UIProcess/API/C/WebKit2.h b/Source/WebKit2/UIProcess/API/C/WebKit2.h
index 02a339f..47d7c7b 100644
--- a/Source/WebKit2/UIProcess/API/C/WebKit2.h
+++ b/Source/WebKit2/UIProcess/API/C/WebKit2.h
@@ -42,6 +42,7 @@
#include <WebKit2/WKGeolocationManager.h>
#include <WebKit2/WKGeolocationPermissionRequest.h>
#include <WebKit2/WKGeolocationPosition.h>
+#include <WebKit2/WKGraphicsContext.h>
#include <WebKit2/WKMutableArray.h>
#include <WebKit2/WKMutableDictionary.h>
#include <WebKit2/WKNavigationData.h>
@@ -56,7 +57,9 @@
#include <WebKit2/WKURLRequest.h>
#include <WebKit2/WKURLResponse.h>
-#if !(defined(__APPLE__) && __APPLE__) || (defined(__OBJC__) && __OBJC__)
+#if defined(__OBJC__) && __OBJC__
+#import <WebKit2/WKView.h>
+#elif !(defined(__APPLE__) && __APPLE__)
#include <WebKit2/WKView.h>
#endif
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp b/Source/WebKit2/UIProcess/API/C/gtk/WKAPICastGtk.h
index b3c1289..79c1133 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp
+++ b/Source/WebKit2/UIProcess/API/C/gtk/WKAPICastGtk.h
@@ -24,16 +24,19 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebDatabaseManager.h"
+#ifndef WKAPICastGtk_h
+#define WKAPICastGtk_h
-#include "NotImplemented.h"
+#ifndef WKAPICast_h
+#error "Please #include \"WKAPICast.h\" instead of this file directly."
+#endif
namespace WebKit {
-String WebDatabaseManager::databaseDirectory() const
-{
- notImplemented();
- return String();
+class WebView;
+
+WK_ADD_API_MAPPING(WKViewRef, WebView)
+
}
-} // namespace WebKit
+#endif // WKAPICastGtk_h
diff --git a/Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp b/Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp
new file mode 100644
index 0000000..aa88151
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WKView.h"
+
+#include "WKAPICast.h"
+#include "WebView.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+#include <wtf/text/StringImpl.h>
+
+using namespace WebKit;
+using namespace WebCore;
+
+WKViewRef WKViewCreate(GdkRectangle rect, WKContextRef contextRef, WKPageGroupRef pageGroupRef)
+{
+ RefPtr<WebView> view = WebView::create(rect, toImpl(contextRef), toImpl(pageGroupRef));
+ return toAPI(view.release().leakRef());
+}
+
+GtkWidget* WKViewGetWindow(WKViewRef viewRef)
+{
+ return toImpl(viewRef)->window();
+}
+
+WKPageRef WKViewGetPage(WKViewRef viewRef)
+{
+ return toAPI(toImpl(viewRef)->page());
+}
+
+WKURLRef WKURLCreateWithURL(const char* url)
+{
+ return toCopiedURLAPI(StringImpl::create(url).leakRef());
+}
diff --git a/Source/WebKit2/UIProcess/API/C/gtk/WKView.h b/Source/WebKit2/UIProcess/API/C/gtk/WKView.h
new file mode 100644
index 0000000..5415fd3
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/C/gtk/WKView.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKView_h
+#define WKView_h
+
+#include <WebKit2/WKBase.h>
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT WKViewRef WKViewCreate(GdkRectangle rect, WKContextRef context, WKPageGroupRef pageGroup);
+
+WK_EXPORT GtkWidget* WKViewGetWindow(WKViewRef view);
+
+WK_EXPORT WKPageRef WKViewGetPage(WKViewRef view);
+
+WK_EXPORT WKURLRef WKURLCreateWithURL(const char*);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKView_h */
diff --git a/Source/WebKit2/UIProcess/API/C/win/WKContextWin.cpp b/Source/WebKit2/UIProcess/API/C/win/WKContextWin.cpp
index 9906c81..110951f 100644
--- a/Source/WebKit2/UIProcess/API/C/win/WKContextWin.cpp
+++ b/Source/WebKit2/UIProcess/API/C/win/WKContextWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKContext.h"
#include "WKContextPrivateWin.h"
diff --git a/Source/WebKit2/UIProcess/API/C/win/WKView.cpp b/Source/WebKit2/UIProcess/API/C/win/WKView.cpp
index 612661e..62603fe 100644
--- a/Source/WebKit2/UIProcess/API/C/win/WKView.cpp
+++ b/Source/WebKit2/UIProcess/API/C/win/WKView.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKView.h"
#include "WKAPICast.h"
@@ -70,3 +71,13 @@ void WKViewSetInitialFocus(WKViewRef viewRef, bool forward)
{
toImpl(viewRef)->setInitialFocus(forward);
}
+
+void WKViewSetFindIndicatorCallback(WKViewRef viewRef, WKViewFindIndicatorCallback callback, void* context)
+{
+ toImpl(viewRef)->setFindIndicatorCallback(callback, context);
+}
+
+WKViewFindIndicatorCallback WKViewGetFindIndicatorCallback(WKViewRef viewRef, void** context)
+{
+ return toImpl(viewRef)->getFindIndicatorCallback(context);
+}
diff --git a/Source/WebKit2/UIProcess/API/C/win/WKView.h b/Source/WebKit2/UIProcess/API/C/win/WKView.h
index f4226cd..213897e 100644
--- a/Source/WebKit2/UIProcess/API/C/win/WKView.h
+++ b/Source/WebKit2/UIProcess/API/C/win/WKView.h
@@ -46,6 +46,10 @@ WK_EXPORT void WKViewWindowAncestryDidChange(WKViewRef view);
WK_EXPORT void WKViewSetIsInWindow(WKViewRef view, bool isInWindow);
WK_EXPORT void WKViewSetInitialFocus(WKViewRef view, bool forward);
+typedef void (*WKViewFindIndicatorCallback)(WKViewRef, HBITMAP selectionBitmap, RECT selectionRectInWindowCoordinates, bool fadeout, void*);
+WK_EXPORT void WKViewSetFindIndicatorCallback(WKViewRef view, WKViewFindIndicatorCallback callback, void* context);
+WK_EXPORT WKViewFindIndicatorCallback WKViewGetFindIndicatorCallback(WKViewRef view, void** context);
+
#ifdef __cplusplus
}
#endif
diff --git a/Source/WebKit2/UIProcess/API/C/win/WKViewPrivate.cpp b/Source/WebKit2/UIProcess/API/C/win/WKViewPrivate.cpp
index 00c3595..7b3cf6e 100644
--- a/Source/WebKit2/UIProcess/API/C/win/WKViewPrivate.cpp
+++ b/Source/WebKit2/UIProcess/API/C/win/WKViewPrivate.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKViewPrivate.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/cpp/qt/WKStringQt.cpp b/Source/WebKit2/UIProcess/API/cpp/qt/WKStringQt.cpp
index 0f2c946..f2f1883 100644
--- a/Source/WebKit2/UIProcess/API/cpp/qt/WKStringQt.cpp
+++ b/Source/WebKit2/UIProcess/API/cpp/qt/WKStringQt.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "config.h"
#include "WKStringQt.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/cpp/qt/WKURLQt.cpp b/Source/WebKit2/UIProcess/API/cpp/qt/WKURLQt.cpp
index 74eca86..f9111f7 100644
--- a/Source/WebKit2/UIProcess/API/cpp/qt/WKURLQt.cpp
+++ b/Source/WebKit2/UIProcess/API/cpp/qt/WKURLQt.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "config.h"
#include "WKURLQt.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm b/Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm
index 5b93a9e..e622c9d 100644
--- a/Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm
+++ b/Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "FindIndicatorWindow.h"
+#import "config.h"
+#import "FindIndicatorWindow.h"
-#include "FindIndicator.h"
-#include <WebCore/GraphicsContext.h>
+#import "FindIndicator.h"
+#import <WebCore/GraphicsContext.h>
static const double bounceAnimationDuration = 0.12;
static const double timeBeforeFadeStarts = bounceAnimationDuration + 0.2;
diff --git a/Source/WebKit2/UIProcess/API/mac/PDFViewController.mm b/Source/WebKit2/UIProcess/API/mac/PDFViewController.mm
index a92c2d4..6ab425d 100644
--- a/Source/WebKit2/UIProcess/API/mac/PDFViewController.mm
+++ b/Source/WebKit2/UIProcess/API/mac/PDFViewController.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "PDFViewController.h"
#import "DataReference.h"
diff --git a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
index 625b8f6..b557c1a 100644
--- a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
+++ b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
@@ -60,6 +60,7 @@ private:
virtual bool isViewInWindow();
virtual void processDidCrash();
+ virtual void pageClosed();
virtual void didRelaunchProcess();
virtual void takeFocus(bool direction);
virtual void toolTipChanged(const String& oldToolTip, const String& newToolTip);
@@ -75,23 +76,29 @@ private:
virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
- virtual void didNotHandleKeyEvent(const NativeWebKeyboardEvent&);
+ virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled);
virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut);
+ virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
+ virtual void exitAcceleratedCompositingMode();
+
#if USE(ACCELERATED_COMPOSITING)
virtual void pageDidEnterAcceleratedCompositing();
virtual void pageDidLeaveAcceleratedCompositing();
#endif
- virtual void accessibilityChildTokenReceived(const CoreIPC::DataReference&);
+ virtual void accessibilityWebProcessTokenReceived(const CoreIPC::DataReference&);
virtual void setComplexTextInputEnabled(uint64_t pluginComplexTextInputIdentifier, bool complexTextInputEnabled);
+ virtual void setAutodisplay(bool);
virtual CGContextRef containingWindowGraphicsContext();
+ virtual void didChangeScrollbarsForMainFrame() const;
+
virtual void didCommitLoadForMainFrame(bool useCustomRepresentation);
virtual void didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference&);
diff --git a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
index 60be5bc..fd70a67 100644
--- a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
+++ b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
@@ -23,11 +23,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "NativeWebKeyboardEvent.h"
+#import "config.h"
#import "PageClientImpl.h"
#import "DataReference.h"
#import "FindIndicator.h"
+#import "NativeWebKeyboardEvent.h"
#import "WKAPICast.h"
#import "WKStringCF.h"
#import "WKViewInternal.h"
@@ -43,6 +44,10 @@
#import <wtf/text/CString.h>
#import <wtf/text/WTFString.h>
+@interface NSApplication (WebNSApplicationDetails)
+- (NSCursor *)_cursorRectCursor;
+@end
+
using namespace WebCore;
@interface WebEditCommandObjC : NSObject
@@ -177,6 +182,11 @@ void PageClientImpl::processDidCrash()
{
[m_wkView _processDidCrash];
}
+
+void PageClientImpl::pageClosed()
+{
+ [m_wkView _pageClosed];
+}
void PageClientImpl::didRelaunchProcess()
{
@@ -195,7 +205,8 @@ void PageClientImpl::toolTipChanged(const String& oldToolTip, const String& newT
void PageClientImpl::setCursor(const WebCore::Cursor& cursor)
{
- [m_wkView _setCursor:cursor.platformCursor()];
+ if (![NSApp _cursorRectCursor])
+ [m_wkView _setCursor:cursor.platformCursor()];
}
void PageClientImpl::setViewportArguments(const WebCore::ViewportArguments&)
@@ -297,10 +308,14 @@ FloatRect PageClientImpl::convertToUserSpace(const FloatRect& rect)
return [m_wkView _convertToUserSpace:rect];
}
-void PageClientImpl::didNotHandleKeyEvent(const NativeWebKeyboardEvent& event)
+void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent& event, bool wasEventHandled)
{
NSEvent* nativeEvent = event.nativeEvent();
- if ([nativeEvent type] == NSKeyDown) {
+ if ([nativeEvent type] != NSKeyDown)
+ return;
+ if (wasEventHandled)
+ [NSCursor setHiddenUntilMouseMoves:YES];
+ else {
[m_wkView _setEventBeingResent:nativeEvent];
[[NSApplication sharedApplication] sendEvent:nativeEvent];
}
@@ -321,13 +336,23 @@ void PageClientImpl::setFindIndicator(PassRefPtr<FindIndicator> findIndicator, b
[m_wkView _setFindIndicator:findIndicator fadeOut:fadeOut];
}
-void PageClientImpl::accessibilityChildTokenReceived(const CoreIPC::DataReference& data)
+void PageClientImpl::accessibilityWebProcessTokenReceived(const CoreIPC::DataReference& data)
{
NSData* remoteToken = [NSData dataWithBytes:data.data() length:data.size()];
- [m_wkView _setAccessibilityChildToken:remoteToken];
+ [m_wkView _setAccessibilityWebProcessToken:remoteToken];
}
#if USE(ACCELERATED_COMPOSITING)
+void PageClientImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
+{
+ [m_wkView _enterAcceleratedCompositingMode:layerTreeContext];
+}
+
+void PageClientImpl::exitAcceleratedCompositingMode()
+{
+ [m_wkView _exitAcceleratedCompositingMode];
+}
+
void PageClientImpl::pageDidEnterAcceleratedCompositing()
{
[m_wkView _pageDidEnterAcceleratedCompositing];
@@ -344,11 +369,24 @@ void PageClientImpl::setComplexTextInputEnabled(uint64_t pluginComplexTextInputI
[m_wkView _setComplexTextInputEnabled:complexTextInputEnabled pluginComplexTextInputIdentifier:pluginComplexTextInputIdentifier];
}
+void PageClientImpl::setAutodisplay(bool newState)
+{
+ if (!newState && [[m_wkView window] isAutodisplay])
+ [m_wkView displayIfNeeded];
+
+ [[m_wkView window] setAutodisplay:newState];
+}
+
CGContextRef PageClientImpl::containingWindowGraphicsContext()
{
return static_cast<CGContextRef>([[[m_wkView window] graphicsContext] graphicsPort]);
}
+void PageClientImpl::didChangeScrollbarsForMainFrame() const
+{
+ [m_wkView _didChangeScrollbarsForMainFrame];
+}
+
void PageClientImpl::didCommitLoadForMainFrame(bool useCustomRepresentation)
{
[m_wkView _setPageHasCustomRepresentation:useCustomRepresentation];
diff --git a/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h
new file mode 100644
index 0000000..3f7a692
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <WebCore/IntRectHash.h>
+#import <wtf/RetainPtr.h>
+
+@class WKPrintingViewData;
+
+namespace WebKit {
+ class WebFrameProxy;
+}
+
+@interface WKPrintingView : NSView {
+@public
+ NSPrintOperation *_printOperation; // WKPrintingView is owned by the operation.
+
+ RefPtr<WebKit::WebFrameProxy> _webFrame;
+ Vector<WebCore::IntRect> _printingPageRects;
+ double _totalScaleFactorForPrinting;
+ HashMap<WebCore::IntRect, Vector<uint8_t> > _pagePreviews;
+
+ Vector<uint8_t> _printedPagesData;
+ RetainPtr<CGPDFDocumentRef> _printedPagesPDFDocument;
+
+ uint64_t _expectedComputedPagesCallback;
+ HashMap<uint64_t, WebCore::IntRect> _expectedPreviewCallbacks;
+ uint64_t _latestExpectedPreviewCallback;
+ uint64_t _expectedPrintCallback;
+
+ BOOL _isPrintingFromSecondaryThread;
+ Mutex _printingCallbackMutex;
+ ThreadCondition _printingCallbackCondition;
+
+ NSTimer *_autodisplayResumeTimer;
+}
+
+- (id)initWithFrameProxy:(WebKit::WebFrameProxy*)frame;
+
+@end
diff --git a/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm
new file mode 100644
index 0000000..28ba153
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm
@@ -0,0 +1,585 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "WKPrintingView.h"
+
+#import "Logging.h"
+#import "PrintInfo.h"
+#import "WebData.h"
+#import "WebPageProxy.h"
+
+using namespace WebKit;
+using namespace WebCore;
+
+NSString * const WebKitOriginalTopPrintingMarginKey = @"WebKitOriginalTopMargin";
+NSString * const WebKitOriginalBottomPrintingMarginKey = @"WebKitOriginalBottomMargin";
+
+NSString * const NSPrintInfoDidChangeNotification = @"NSPrintInfoDidChange";
+
+static BOOL isForcingPreviewUpdate;
+
+@implementation WKPrintingView
+
+- (id)initWithFrameProxy:(WebFrameProxy*)frame
+{
+ self = [super init]; // No frame rect to pass to NSView.
+ if (!self)
+ return nil;
+
+ _webFrame = frame;
+
+ return self;
+}
+
+- (BOOL)isFlipped
+{
+ return YES;
+}
+
+- (void)_suspendAutodisplay
+{
+ // A drawRect: call on WKView causes a switch to screen mode, which is slow due to relayout, and we want to avoid that.
+ // Disabling autodisplay will prevent random updates from causing this, but resizing the window will still work.
+ if (_autodisplayResumeTimer) {
+ [_autodisplayResumeTimer invalidate];
+ _autodisplayResumeTimer = nil;
+ } else
+ _webFrame->page()->setAutodisplay(false);
+}
+
+- (void)_delayedResumeAutodisplayTimerFired
+{
+ ASSERT(isMainThread());
+
+ _autodisplayResumeTimer = nil;
+ _webFrame->page()->setAutodisplay(true);
+}
+
+- (void)_delayedResumeAutodisplay
+{
+ // AppKit calls endDocument/beginDocument when print option change. We don't want to switch between print and screen mode just for that,
+ // and enabling autodisplay may result in switching into screen mode. So, autodisplay is only resumed on next run loop iteration.
+ if (!_autodisplayResumeTimer) {
+ _autodisplayResumeTimer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(_delayedResumeAutodisplayTimerFired) userInfo:nil repeats:NO];
+ // The timer must be scheduled on main thread, because printing thread may finish before it fires.
+ [[NSRunLoop mainRunLoop] addTimer:_autodisplayResumeTimer forMode:NSDefaultRunLoopMode];
+ }
+}
+
+- (void)_adjustPrintingMarginsForHeaderAndFooter
+{
+ NSPrintInfo *info = [_printOperation printInfo];
+ NSMutableDictionary *infoDictionary = [info dictionary];
+
+ // We need to modify the top and bottom margins in the NSPrintInfo to account for the space needed by the
+ // header and footer. Because this method can be called more than once on the same NSPrintInfo (see 5038087),
+ // we stash away the unmodified top and bottom margins the first time this method is called, and we read from
+ // those stashed-away values on subsequent calls.
+ double originalTopMargin;
+ double originalBottomMargin;
+ NSNumber *originalTopMarginNumber = [infoDictionary objectForKey:WebKitOriginalTopPrintingMarginKey];
+ if (!originalTopMarginNumber) {
+ ASSERT(![infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey]);
+ originalTopMargin = [info topMargin];
+ originalBottomMargin = [info bottomMargin];
+ [infoDictionary setObject:[NSNumber numberWithDouble:originalTopMargin] forKey:WebKitOriginalTopPrintingMarginKey];
+ [infoDictionary setObject:[NSNumber numberWithDouble:originalBottomMargin] forKey:WebKitOriginalBottomPrintingMarginKey];
+ } else {
+ ASSERT([originalTopMarginNumber isKindOfClass:[NSNumber class]]);
+ ASSERT([[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] isKindOfClass:[NSNumber class]]);
+ originalTopMargin = [originalTopMarginNumber doubleValue];
+ originalBottomMargin = [[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] doubleValue];
+ }
+
+ CGFloat scale = [info scalingFactor];
+ [info setTopMargin:originalTopMargin + _webFrame->page()->headerHeight(_webFrame.get()) * scale];
+ [info setBottomMargin:originalBottomMargin + _webFrame->page()->footerHeight(_webFrame.get()) * scale];
+}
+
+- (BOOL)_isPrintingPreview
+{
+ // <rdar://problem/8901041> Please add an API returning whether the current print operation is for preview.
+ // Assuming that if NSPrintOperation is allowed to spawn a thread for printing, it will. Print preview doesn't spawn a thread.
+ return !_isPrintingFromSecondaryThread;
+}
+
+- (void)_updatePreview
+{
+ // <rdar://problem/8900923> Please add an API to force print preview update.
+ ASSERT(!isForcingPreviewUpdate);
+ isForcingPreviewUpdate = YES;
+ [[NSNotificationCenter defaultCenter] postNotificationName:NSPrintInfoDidChangeNotification object:nil];
+ isForcingPreviewUpdate = NO;
+}
+
+- (BOOL)_hasPageRects
+{
+ // WebCore always prints at least one page.
+ return !_printingPageRects.isEmpty();
+}
+
+- (NSUInteger)_firstPrintedPageNumber
+{
+ // Need to directly access the dictionary because -[NSPrintOperation pageRange] verifies pagination, potentially causing recursion.
+ return [[[[_printOperation printInfo] dictionary] objectForKey:NSPrintFirstPage] unsignedIntegerValue];
+}
+
+- (NSUInteger)_lastPrintedPageNumber
+{
+ ASSERT([self _hasPageRects]);
+
+ // Need to directly access the dictionary because -[NSPrintOperation pageRange] verifies pagination, potentially causing recursion.
+ NSUInteger firstPage = [[[[_printOperation printInfo] dictionary] objectForKey:NSPrintFirstPage] unsignedIntegerValue];
+ NSUInteger lastPage = [[[[_printOperation printInfo] dictionary] objectForKey:NSPrintLastPage] unsignedIntegerValue];
+ if (lastPage - firstPage >= _printingPageRects.size())
+ return _printingPageRects.size();
+ return lastPage;
+}
+
+- (uint64_t)_expectedPreviewCallbackForRect:(const IntRect&)rect
+{
+ for (HashMap<uint64_t, WebCore::IntRect>::iterator iter = _expectedPreviewCallbacks.begin(); iter != _expectedPreviewCallbacks.end(); ++iter) {
+ if (iter->second == rect)
+ return iter->first;
+ }
+ return 0;
+}
+
+struct IPCCallbackContext {
+ RetainPtr<WKPrintingView> view;
+ uint64_t callbackID;
+};
+
+static void pageDidDrawToPDF(WKDataRef dataRef, WKErrorRef, void* untypedContext)
+{
+ ASSERT(isMainThread());
+
+ OwnPtr<IPCCallbackContext> context = adoptPtr(static_cast<IPCCallbackContext*>(untypedContext));
+ WKPrintingView *view = context->view.get();
+ WebData* data = toImpl(dataRef);
+
+ if (context->callbackID == view->_expectedPrintCallback) {
+ ASSERT(![view _isPrintingPreview]);
+ ASSERT(view->_printedPagesData.isEmpty());
+ ASSERT(!view->_printedPagesPDFDocument);
+ if (data)
+ view->_printedPagesData.append(data->bytes(), data->size());
+ view->_expectedPrintCallback = 0;
+ view->_printingCallbackCondition.signal();
+ } else {
+ // If the user has already changed print setup, then this response is obsolete. And this callback is not in response to the latest request,
+ // then the user has already moved to another page - we'll cache the response, but won't draw it.
+ HashMap<uint64_t, WebCore::IntRect>::iterator iter = view->_expectedPreviewCallbacks.find(context->callbackID);
+ if (iter != view->_expectedPreviewCallbacks.end()) {
+ ASSERT([view _isPrintingPreview]);
+
+ if (data) {
+ pair<HashMap<WebCore::IntRect, Vector<uint8_t> >::iterator, bool> entry = view->_pagePreviews.add(iter->second, Vector<uint8_t>());
+ entry.first->second.append(data->bytes(), data->size());
+ }
+ bool receivedResponseToLatestRequest = view->_latestExpectedPreviewCallback == context->callbackID;
+ view->_latestExpectedPreviewCallback = 0;
+ view->_expectedPreviewCallbacks.remove(context->callbackID);
+ if (receivedResponseToLatestRequest)
+ [view _updatePreview];
+ }
+ }
+}
+
+- (void)_preparePDFDataForPrintingOnSecondaryThread
+{
+ ASSERT(isMainThread());
+
+ if (!_webFrame->page()) {
+ _printingCallbackCondition.signal();
+ return;
+ }
+
+ MutexLocker lock(_printingCallbackMutex);
+
+ ASSERT([self _hasPageRects]);
+ ASSERT(_printedPagesData.isEmpty());
+ ASSERT(!_printedPagesPDFDocument);
+ ASSERT(!_expectedPrintCallback);
+
+ NSUInteger firstPage = [self _firstPrintedPageNumber];
+ NSUInteger lastPage = [self _lastPrintedPageNumber];
+
+ ASSERT(firstPage > 0);
+ ASSERT(firstPage <= lastPage);
+ LOG(View, "WKPrintingView requesting PDF data for pages %u...%u", firstPage, lastPage);
+
+ // Return to printing mode if we're already back to screen (e.g. due to window resizing).
+ _webFrame->page()->beginPrinting(_webFrame.get(), PrintInfo([_printOperation printInfo]));
+
+ IPCCallbackContext* context = new IPCCallbackContext;
+ RefPtr<DataCallback> callback = DataCallback::create(context, pageDidDrawToPDF);
+ _expectedPrintCallback = callback->callbackID();
+
+ context->view = self;
+ context->callbackID = callback->callbackID();
+
+ _webFrame->page()->drawPagesToPDF(_webFrame.get(), firstPage - 1, lastPage - firstPage + 1, callback.get());
+}
+
+static void pageDidComputePageRects(const Vector<WebCore::IntRect>& pageRects, double totalScaleFactorForPrinting, WKErrorRef, void* untypedContext)
+{
+ ASSERT(isMainThread());
+
+ OwnPtr<IPCCallbackContext> context = adoptPtr(static_cast<IPCCallbackContext*>(untypedContext));
+ WKPrintingView *view = context->view.get();
+
+ // If the user has already changed print setup, then this response is obsolete.
+ if (context->callbackID == view->_expectedComputedPagesCallback) {
+ ASSERT(isMainThread());
+ ASSERT(view->_expectedPreviewCallbacks.isEmpty());
+ ASSERT(!view->_latestExpectedPreviewCallback);
+ ASSERT(!view->_expectedPrintCallback);
+ ASSERT(view->_pagePreviews.isEmpty());
+ view->_expectedComputedPagesCallback = 0;
+
+ view->_printingPageRects = pageRects;
+ view->_totalScaleFactorForPrinting = totalScaleFactorForPrinting;
+
+ const IntRect& lastPrintingPageRect = view->_printingPageRects[view->_printingPageRects.size() - 1];
+ NSRect newFrameSize = NSMakeRect(0, 0,
+ ceil(lastPrintingPageRect.maxX() * view->_totalScaleFactorForPrinting),
+ ceil(lastPrintingPageRect.maxY() * view->_totalScaleFactorForPrinting));
+ LOG(View, "WKPrintingView setting frame size to x:%g y:%g width:%g height:%g", newFrameSize.origin.x, newFrameSize.origin.y, newFrameSize.size.width, newFrameSize.size.height);
+ [view setFrame:newFrameSize];
+
+ if ([view _isPrintingPreview]) {
+ // Show page count, and ask for an actual image to replace placeholder.
+ [view _updatePreview];
+ } else {
+ // When printing, request everything we'll need beforehand.
+ [view _preparePDFDataForPrintingOnSecondaryThread];
+ }
+ }
+}
+
+- (BOOL)_askPageToComputePageRects
+{
+ ASSERT(isMainThread());
+
+ if (!_webFrame->page())
+ return NO;
+
+ ASSERT(!_expectedComputedPagesCallback);
+
+ IPCCallbackContext* context = new IPCCallbackContext;
+ RefPtr<ComputedPagesCallback> callback = ComputedPagesCallback::create(context, pageDidComputePageRects);
+ _expectedComputedPagesCallback = callback->callbackID();
+ context->view = self;
+ context->callbackID = _expectedComputedPagesCallback;
+
+ _webFrame->page()->computePagesForPrinting(_webFrame.get(), PrintInfo([_printOperation printInfo]), callback.release());
+ return YES;
+}
+
+static void prepareDataForPrintingOnSecondaryThread(void* untypedContext)
+{
+ ASSERT(isMainThread());
+
+ WKPrintingView *view = static_cast<WKPrintingView *>(untypedContext);
+ MutexLocker lock(view->_printingCallbackMutex);
+
+ // We may have received page rects while a message to call this function traveled from secondary thread to main one.
+ if ([view _hasPageRects]) {
+ [view _preparePDFDataForPrintingOnSecondaryThread];
+ return;
+ }
+
+ // A request for pages has already been made, just wait for it to finish.
+ if (view->_expectedComputedPagesCallback)
+ return;
+
+ [view _askPageToComputePageRects];
+}
+
+- (BOOL)knowsPageRange:(NSRangePointer)range
+{
+ LOG(View, "-[WKPrintingView %p knowsPageRange:], %s, %s", self, [self _hasPageRects] ? "print data is available" : "print data is not available yet", isMainThread() ? "on main thread" : "on secondary thread");
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+
+ // Assuming that once we switch to printing from a secondary thread, we don't go back.
+ ASSERT(!_isPrintingFromSecondaryThread || !isMainThread());
+ if (!isMainThread())
+ _isPrintingFromSecondaryThread = YES;
+
+ [self _suspendAutodisplay];
+
+ [self _adjustPrintingMarginsForHeaderAndFooter];
+
+ if ([self _hasPageRects])
+ *range = NSMakeRange(1, _printingPageRects.size());
+ else if (!isMainThread()) {
+ ASSERT(![self _isPrintingPreview]);
+ MutexLocker lock(_printingCallbackMutex);
+ callOnMainThread(prepareDataForPrintingOnSecondaryThread, self);
+ _printingCallbackCondition.wait(_printingCallbackMutex);
+ *range = NSMakeRange(1, _printingPageRects.size());
+ } else {
+ ASSERT([self _isPrintingPreview]);
+
+ // If a request for pages hasn't already been made, make it now.
+ if (!_expectedComputedPagesCallback)
+ [self _askPageToComputePageRects];
+
+ *range = NSMakeRange(1, NSIntegerMax);
+ }
+ return YES;
+}
+
+- (unsigned)_pageForRect:(NSRect)rect
+{
+ // Assuming that rect exactly matches one of the pages.
+ for (size_t i = 0; i < _printingPageRects.size(); ++i) {
+ IntRect currentRect(_printingPageRects[i]);
+ currentRect.scale(_totalScaleFactorForPrinting);
+ if (rect.origin.y == currentRect.y() && rect.origin.x == currentRect.x())
+ return i + 1;
+ }
+ ASSERT_NOT_REACHED();
+ return 0; // Invalid page number.
+}
+
+- (void)_drawPDFDocument:(CGPDFDocumentRef)pdfDocument page:(unsigned)page atPoint:(NSPoint)point
+{
+ if (!pdfDocument) {
+ LOG_ERROR("Couldn't create a PDF document with data passed for preview");
+ return;
+ }
+
+ CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument, page);
+ if (!pdfPage) {
+ LOG_ERROR("Preview data doesn't have page %d", page);
+ return;
+ }
+
+ NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext];
+ CGContextRef context = static_cast<CGContextRef>([nsGraphicsContext graphicsPort]);
+
+ CGContextSaveGState(context);
+ CGContextTranslateCTM(context, point.x, point.y);
+ CGContextScaleCTM(context, _totalScaleFactorForPrinting, -_totalScaleFactorForPrinting);
+ CGContextTranslateCTM(context, 0, -CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox).size.height);
+ CGContextDrawPDFPage(context, pdfPage);
+ CGContextRestoreGState(context);
+}
+
+- (void)_drawPreview:(NSRect)nsRect
+{
+ ASSERT(isMainThread());
+
+ IntRect rect(nsRect);
+ rect.scale(1 / _totalScaleFactorForPrinting);
+ HashMap<WebCore::IntRect, Vector<uint8_t> >::iterator pagePreviewIterator = _pagePreviews.find(rect);
+ if (pagePreviewIterator == _pagePreviews.end()) {
+ // It's too early to ask for page preview if we don't even know page size and scale.
+ if ([self _hasPageRects]) {
+ if (uint64_t existingCallback = [self _expectedPreviewCallbackForRect:rect]) {
+ // We've already asked for a preview of this page, and are waiting for response.
+ // There is no need to ask again.
+ _latestExpectedPreviewCallback = existingCallback;
+ } else {
+ // Preview isn't available yet, request it asynchronously.
+ if (!_webFrame->page())
+ return;
+
+ // Return to printing mode if we're already back to screen (e.g. due to window resizing).
+ _webFrame->page()->beginPrinting(_webFrame.get(), PrintInfo([_printOperation printInfo]));
+
+ IPCCallbackContext* context = new IPCCallbackContext;
+ RefPtr<DataCallback> callback = DataCallback::create(context, pageDidDrawToPDF);
+ _latestExpectedPreviewCallback = callback->callbackID();
+ _expectedPreviewCallbacks.add(_latestExpectedPreviewCallback, rect);
+
+ context->view = self;
+ context->callbackID = callback->callbackID();
+
+ _webFrame->page()->drawRectToPDF(_webFrame.get(), rect, callback.get());
+ return;
+ }
+ }
+
+ // FIXME: Draw a placeholder
+ return;
+ }
+
+ const Vector<uint8_t>& pdfData = pagePreviewIterator->second;
+ RetainPtr<CGDataProviderRef> pdfDataProvider(AdoptCF, CGDataProviderCreateWithData(0, pdfData.data(), pdfData.size(), 0));
+ RetainPtr<CGPDFDocumentRef> pdfDocument(AdoptCF, CGPDFDocumentCreateWithProvider(pdfDataProvider.get()));
+
+ [self _drawPDFDocument:pdfDocument.get() page:1 atPoint:NSMakePoint(nsRect.origin.x, nsRect.origin.y)];
+}
+
+- (void)drawRect:(NSRect)nsRect
+{
+ LOG(View, "WKPrintingView %p printing rect x:%g, y:%g, width:%g, height:%g%s", self, nsRect.origin.x, nsRect.origin.y, nsRect.size.width, nsRect.size.height, [self _isPrintingPreview] ? " for preview" : "");
+
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+
+ if (!_webFrame->page())
+ return;
+
+ if ([self _isPrintingPreview]) {
+ [self _drawPreview:nsRect];
+ return;
+ }
+
+ ASSERT(!isMainThread());
+ ASSERT(!_printedPagesData.isEmpty()); // Prepared by knowsPageRange:
+
+ if (!_printedPagesPDFDocument) {
+ RetainPtr<CGDataProviderRef> pdfDataProvider(AdoptCF, CGDataProviderCreateWithData(0, _printedPagesData.data(), _printedPagesData.size(), 0));
+ _printedPagesPDFDocument.adoptCF(CGPDFDocumentCreateWithProvider(pdfDataProvider.get()));
+ }
+
+ unsigned printedPageNumber = [self _pageForRect:nsRect] - [self _firstPrintedPageNumber] + 1;
+ [self _drawPDFDocument:_printedPagesPDFDocument.get() page:printedPageNumber atPoint:NSMakePoint(nsRect.origin.x, nsRect.origin.y)];
+}
+
+- (void)_drawPageBorderWithSizeOnMainThread:(NSSize)borderSize
+{
+ ASSERT(isMainThread());
+
+ // When printing from a secondary thread, the main thread doesn't have graphics context and printing operation set up.
+ NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
+ [NSGraphicsContext setCurrentContext:[_printOperation context]];
+
+ ASSERT(![NSPrintOperation currentOperation]);
+ [NSPrintOperation setCurrentOperation:_printOperation];
+
+ [self drawPageBorderWithSize:borderSize];
+
+ [NSPrintOperation setCurrentOperation:nil];
+ [NSGraphicsContext setCurrentContext:currentContext];
+}
+
+- (void)drawPageBorderWithSize:(NSSize)borderSize
+{
+ ASSERT(NSEqualSizes(borderSize, [[_printOperation printInfo] paperSize]));
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+
+ if (!isMainThread()) {
+ // Don't call the client from a secondary thread.
+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[WKPrintingView instanceMethodSignatureForSelector:@selector(_drawPageBorderWithSizeOnMainThread:)]];
+ [invocation setSelector:@selector(_drawPageBorderWithSizeOnMainThread:)];
+ [invocation setArgument:&borderSize atIndex:2];
+ [invocation performSelectorOnMainThread:@selector(invokeWithTarget:) withObject:self waitUntilDone:YES];
+ return;
+ }
+
+ if (!_webFrame->page())
+ return;
+
+ // The header and footer rect height scales with the page, but the width is always
+ // all the way across the printed page (inset by printing margins).
+ NSPrintInfo *printInfo = [_printOperation printInfo];
+ CGFloat scale = [printInfo scalingFactor];
+ NSSize paperSize = [printInfo paperSize];
+ CGFloat headerFooterLeft = [printInfo leftMargin] / scale;
+ CGFloat headerFooterWidth = (paperSize.width - ([printInfo leftMargin] + [printInfo rightMargin])) / scale;
+ NSRect footerRect = NSMakeRect(headerFooterLeft, [printInfo bottomMargin] / scale - _webFrame->page()->footerHeight(_webFrame.get()), headerFooterWidth, _webFrame->page()->footerHeight(_webFrame.get()));
+ NSRect headerRect = NSMakeRect(headerFooterLeft, (paperSize.height - [printInfo topMargin]) / scale, headerFooterWidth, _webFrame->page()->headerHeight(_webFrame.get()));
+
+ NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
+ [currentContext saveGraphicsState];
+ NSRectClip(headerRect);
+ _webFrame->page()->drawHeader(_webFrame.get(), headerRect);
+ [currentContext restoreGraphicsState];
+
+ [currentContext saveGraphicsState];
+ NSRectClip(footerRect);
+ _webFrame->page()->drawFooter(_webFrame.get(), footerRect);
+ [currentContext restoreGraphicsState];
+}
+
+- (NSRect)rectForPage:(NSInteger)page
+{
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+ if (![self _hasPageRects]) {
+ LOG(View, "-[WKPrintingView %p rectForPage:%d] - data is not yet available", self, (int)page);
+ // We must be still calculating the page range.
+ ASSERT(_expectedComputedPagesCallback);
+ return NSMakeRect(0, 0, 1, 1);
+ }
+
+ IntRect rect = _printingPageRects[page - 1];
+ rect.scale(_totalScaleFactorForPrinting);
+ LOG(View, "-[WKPrintingView %p rectForPage:%d] -> x %d, y %d, width %d, height %d", self, (int)page, rect.x(), rect.y(), rect.width(), rect.height());
+ return rect;
+}
+
+// Temporary workaround for <rdar://problem/8944535>. Force correct printout positioning.
+- (NSPoint)locationOfPrintRect:(NSRect)aRect
+{
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+ return NSMakePoint([[_printOperation printInfo] leftMargin], [[_printOperation printInfo] bottomMargin]);
+}
+
+- (void)beginDocument
+{
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+
+ // Forcing preview update gets us here, but page setup hasn't actually changed.
+ if (isForcingPreviewUpdate)
+ return;
+
+ LOG(View, "-[WKPrintingView %p beginDocument]", self);
+
+ [super beginDocument];
+
+ [self _suspendAutodisplay];
+}
+
+- (void)endDocument
+{
+ ASSERT(_printOperation == [NSPrintOperation currentOperation]);
+
+ // Forcing preview update gets us here, but page setup hasn't actually changed.
+ if (isForcingPreviewUpdate)
+ return;
+
+ LOG(View, "-[WKPrintingView %p endDocument] - clearing cached data", self);
+
+ // Both existing data and pending responses are now obsolete.
+ _printingPageRects.clear();
+ _totalScaleFactorForPrinting = 1;
+ _pagePreviews.clear();
+ _printedPagesData.clear();
+ _printedPagesPDFDocument = nullptr;
+ _expectedComputedPagesCallback = 0;
+ _expectedPreviewCallbacks.clear();
+ _latestExpectedPreviewCallback = 0;
+ _expectedPrintCallback = 0;
+
+ [self _delayedResumeAutodisplay];
+
+ [super endDocument];
+}
+@end
diff --git a/Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm b/Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm
index b7dae31..3b69a1d 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm
+++ b/Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm
@@ -23,9 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WKTextInputWindowController.h"
+#import "config.h"
+#import "WKTextInputWindowController.h"
-#include <WebKitSystemInterface.h>
+#import <WebKitSystemInterface.h>
@interface WKTextInputPanel : NSPanel {
NSTextView *_inputTextView;
diff --git a/Source/WebKit2/UIProcess/API/mac/WKView.h b/Source/WebKit2/UIProcess/API/mac/WKView.h
index 618bbc4..8c1826c 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKView.h
+++ b/Source/WebKit2/UIProcess/API/mac/WKView.h
@@ -31,6 +31,7 @@
WK_EXPORT
@interface WKView : NSView <NSTextInput> {
WKViewData *_data;
+ unsigned _frameSizeUpdatesDisabledCount;
}
- (id)initWithFrame:(NSRect)frame contextRef:(WKContextRef)contextRef;
@@ -39,6 +40,8 @@ WK_EXPORT
- (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo forFrame:(WKFrameRef)frameRef;
- (BOOL)canChangeFrameLayout:(WKFrameRef)frameRef;
+- (void)setFrame:(NSRect)rect andScrollBy:(NSSize)offset;
+
@property(readonly) WKPageRef pageRef;
@property BOOL drawsBackground;
diff --git a/Source/WebKit2/UIProcess/API/mac/WKView.mm b/Source/WebKit2/UIProcess/API/mac/WKView.mm
index 400239d..da29e04 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKView.mm
+++ b/Source/WebKit2/UIProcess/API/mac/WKView.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WKView.h"
#import "ChunkedUpdateDrawingAreaProxy.h"
@@ -31,19 +32,22 @@
#import "FindIndicator.h"
#import "FindIndicatorWindow.h"
#import "LayerBackedDrawingAreaProxy.h"
+#import "LayerTreeContext.h"
#import "Logging.h"
#import "NativeWebKeyboardEvent.h"
#import "PDFViewController.h"
#import "PageClientImpl.h"
#import "PasteboardTypes.h"
-#import "PrintInfo.h"
#import "Region.h"
#import "RunLoop.h"
#import "TextChecker.h"
#import "TextCheckerState.h"
#import "WKAPICast.h"
+#import "WKPrintingView.h"
#import "WKStringCF.h"
#import "WKTextInputWindowController.h"
+#import "WKViewInternal.h"
+#import "WKViewPrivate.h"
#import "WebContext.h"
#import "WebEventFactory.h"
#import "WebPage.h"
@@ -71,12 +75,9 @@
- (void)speakString:(NSString *)string;
@end
-@interface NSView (Details)
-- (void)_recursiveDisplayRectIfNeededIgnoringOpacity:(NSRect)rect isVisibleRect:(BOOL)isVisibleRect rectIsVisibleRectForView:(NSView *)visibleView topView:(BOOL)topView;
-@end
-
@interface NSWindow (Details)
- (NSRect)_growBoxRect;
+- (void)_setShowOpaqueGrowBoxForOwner:(id)owner;
- (BOOL)_updateGrowBoxForWindowFrameChange;
@end
@@ -97,9 +98,6 @@ typedef HashMap<String, ValidationVector> ValidationMap;
}
-NSString* const WebKitOriginalTopPrintingMarginKey = @"WebKitOriginalTopMargin";
-NSString* const WebKitOriginalBottomPrintingMarginKey = @"WebKitOriginalBottomMargin";
-
@interface WKViewData : NSObject {
@public
OwnPtr<PageClientImpl> _pageClient;
@@ -110,8 +108,11 @@ NSString* const WebKitOriginalBottomPrintingMarginKey = @"WebKitOriginalBottomMa
id _trackingRectOwner;
void* _trackingRectUserData;
+ RetainPtr<NSView> _layerHostingView;
+
+ // FIXME: Remove _oldLayerHostingView.
#if USE(ACCELERATED_COMPOSITING)
- NSView *_layerHostingView;
+ NSView *_oldLayerHostingView;
#endif
RetainPtr<id> _remoteAccessibilityChild;
@@ -128,6 +129,8 @@ NSString* const WebKitOriginalBottomPrintingMarginKey = @"WebKitOriginalBottomMa
NSEvent *_keyDownEventBeingResent;
Vector<KeypressCommand> _commandsList;
+ NSSize _resizeScrollOffset;
+
// The identifier of the plug-in we want to send complex text input to, or 0 if there is none.
uint64_t _pluginComplexTextInputIdentifier;
@@ -135,50 +138,21 @@ NSString* const WebKitOriginalBottomPrintingMarginKey = @"WebKitOriginalBottomMa
unsigned _selectionStart;
unsigned _selectionEnd;
- Vector<IntRect> _printingPageRects;
- double _totalScaleFactorForPrinting;
-
bool _inBecomeFirstResponder;
bool _inResignFirstResponder;
NSEvent *_mouseDownEvent;
BOOL _ignoringMouseDraggedEvents;
BOOL _dragHasStarted;
-}
-@end
-@implementation WKViewData
-@end
-
-@interface WebFrameWrapper : NSObject {
-@public
- RefPtr<WebFrameProxy> _frame;
+#if ENABLE(GESTURE_EVENTS)
+ id _endGestureMonitor;
+#endif
}
-
-- (id)initWithFrameProxy:(WebFrameProxy*)frame;
-- (WebFrameProxy*)webFrame;
@end
-@implementation WebFrameWrapper
-
-- (id)initWithFrameProxy:(WebFrameProxy*)frame
-{
- self = [super init];
- if (!self)
- return nil;
-
- _frame = frame;
- return self;
-}
-
-- (WebFrameProxy*)webFrame
-{
- return _frame.get();
-}
-
+@implementation WKViewData
@end
-NSString * const PrintedFrameKey = @"WebKitPrintedFrameKey";
-
@interface NSObject (NSTextInputContextDetails)
- (BOOL)wantsToHandleMouseEvents;
- (BOOL)handleMouseEvent:(NSEvent *)event;
@@ -186,11 +160,10 @@ NSString * const PrintedFrameKey = @"WebKitPrintedFrameKey";
@implementation WKView
+// FIXME: Remove this once we no longer want to be able to go back to the old drawing area.
static bool useNewDrawingArea()
{
- static bool useNewDrawingArea = getenv("USE_NEW_DRAWING_AREA");
-
- return useNewDrawingArea;
+ return true;
}
- (id)initWithFrame:(NSRect)frame
@@ -211,6 +184,24 @@ static bool useNewDrawingArea()
[types release];
}
+- (void)_updateRemoteAccessibilityRegistration:(BOOL)registerProcess
+{
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+ // When the tree is connected/disconnected, the remote accessibility registration
+ // needs to be updated with the pid of the remote process. If the process is going
+ // away, that information is not present in WebProcess
+ pid_t pid = 0;
+ if (registerProcess && _data->_page->process())
+ pid = _data->_page->process()->processIdentifier();
+ else if (!registerProcess) {
+ pid = WKAXRemoteProcessIdentifier(_data->_remoteAccessibilityChild.get());
+ _data->_remoteAccessibilityChild = nil;
+ }
+ if (pid)
+ WKAXRegisterRemoteProcess(registerProcess, pid);
+#endif
+}
+
- (id)initWithFrame:(NSRect)frame contextRef:(WKContextRef)contextRef pageGroupRef:(WKPageGroupRef)pageGroupRef
{
self = [super initWithFrame:frame];
@@ -239,12 +230,6 @@ static bool useNewDrawingArea()
WebContext::statistics().wkViewCount++;
-#if !defined(BUILDING_ON_SNOW_LEOPARD)
- NSData *remoteToken = (NSData *)WKAXRemoteTokenForElement(self);
- CoreIPC::DataReference dataToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteToken bytes]), [remoteToken length]);
- _data->_page->sendAccessibilityPresenterToken(dataToken);
-#endif
-
return self;
}
@@ -312,19 +297,35 @@ static bool useNewDrawingArea()
return YES;
}
+- (void)viewWillStartLiveResize
+{
+ _data->_page->viewWillStartLiveResize();
+}
+
+- (void)viewDidEndLiveResize
+{
+ _data->_page->viewWillEndLiveResize();
+}
+
- (BOOL)isFlipped
{
return YES;
}
+- (void)setFrame:(NSRect)rect andScrollBy:(NSSize)offset
+{
+ ASSERT(NSEqualSizes(_data->_resizeScrollOffset, NSZeroSize));
+
+ _data->_resizeScrollOffset = offset;
+ [self setFrame:rect];
+}
+
- (void)setFrameSize:(NSSize)size
{
[super setFrameSize:size];
-
- if (!_data->_page->drawingArea())
- return;
- _data->_page->drawingArea()->setSize(IntSize(size));
+ if (![self frameSizeUpdatesDisabled])
+ [self _setDrawingAreaSize:size];
}
- (void)_updateWindowAndViewFrames
@@ -366,6 +367,8 @@ static const SelectorNameMap* createSelectorExceptionMap()
map->add(@selector(pageDownAndModifySelection:), "MovePageDownAndModifySelection");
map->add(@selector(pageUp:), "MovePageUp");
map->add(@selector(pageUpAndModifySelection:), "MovePageUpAndModifySelection");
+ map->add(@selector(scrollPageDown:), "ScrollPageForward");
+ map->add(@selector(scrollPageUp:), "ScrollPageBackward");
return map;
}
@@ -392,16 +395,143 @@ static String commandNameForSelector(SEL selector)
#define WEBCORE_COMMAND(command) - (void)command:(id)sender { _data->_page->executeEditCommand(commandNameForSelector(_cmd)); }
+WEBCORE_COMMAND(alignCenter)
+WEBCORE_COMMAND(alignJustified)
+WEBCORE_COMMAND(alignLeft)
+WEBCORE_COMMAND(alignRight)
WEBCORE_COMMAND(copy)
WEBCORE_COMMAND(cut)
-WEBCORE_COMMAND(paste)
WEBCORE_COMMAND(delete)
+WEBCORE_COMMAND(deleteBackward)
+WEBCORE_COMMAND(deleteBackwardByDecomposingPreviousCharacter)
+WEBCORE_COMMAND(deleteForward)
+WEBCORE_COMMAND(deleteToBeginningOfLine)
+WEBCORE_COMMAND(deleteToBeginningOfParagraph)
+WEBCORE_COMMAND(deleteToEndOfLine)
+WEBCORE_COMMAND(deleteToEndOfParagraph)
+WEBCORE_COMMAND(deleteToMark)
+WEBCORE_COMMAND(deleteWordBackward)
+WEBCORE_COMMAND(deleteWordForward)
+WEBCORE_COMMAND(ignoreSpelling)
+WEBCORE_COMMAND(indent)
+WEBCORE_COMMAND(insertBacktab)
+WEBCORE_COMMAND(insertLineBreak)
+WEBCORE_COMMAND(insertNewline)
+WEBCORE_COMMAND(insertNewlineIgnoringFieldEditor)
+WEBCORE_COMMAND(insertParagraphSeparator)
+WEBCORE_COMMAND(insertTab)
+WEBCORE_COMMAND(insertTabIgnoringFieldEditor)
+WEBCORE_COMMAND(makeTextWritingDirectionLeftToRight)
+WEBCORE_COMMAND(makeTextWritingDirectionNatural)
+WEBCORE_COMMAND(makeTextWritingDirectionRightToLeft)
+WEBCORE_COMMAND(moveBackward)
+WEBCORE_COMMAND(moveBackwardAndModifySelection)
+WEBCORE_COMMAND(moveDown)
+WEBCORE_COMMAND(moveDownAndModifySelection)
+WEBCORE_COMMAND(moveForward)
+WEBCORE_COMMAND(moveForwardAndModifySelection)
+WEBCORE_COMMAND(moveLeft)
+WEBCORE_COMMAND(moveLeftAndModifySelection)
+WEBCORE_COMMAND(moveParagraphBackwardAndModifySelection)
+WEBCORE_COMMAND(moveParagraphForwardAndModifySelection)
+WEBCORE_COMMAND(moveRight)
+WEBCORE_COMMAND(moveRightAndModifySelection)
+WEBCORE_COMMAND(moveToBeginningOfDocument)
+WEBCORE_COMMAND(moveToBeginningOfDocumentAndModifySelection)
+WEBCORE_COMMAND(moveToBeginningOfLine)
+WEBCORE_COMMAND(moveToBeginningOfLineAndModifySelection)
+WEBCORE_COMMAND(moveToBeginningOfParagraph)
+WEBCORE_COMMAND(moveToBeginningOfParagraphAndModifySelection)
+WEBCORE_COMMAND(moveToBeginningOfSentence)
+WEBCORE_COMMAND(moveToBeginningOfSentenceAndModifySelection)
+WEBCORE_COMMAND(moveToEndOfDocument)
+WEBCORE_COMMAND(moveToEndOfDocumentAndModifySelection)
+WEBCORE_COMMAND(moveToEndOfLine)
+WEBCORE_COMMAND(moveToEndOfLineAndModifySelection)
+WEBCORE_COMMAND(moveToEndOfParagraph)
+WEBCORE_COMMAND(moveToEndOfParagraphAndModifySelection)
+WEBCORE_COMMAND(moveToEndOfSentence)
+WEBCORE_COMMAND(moveToEndOfSentenceAndModifySelection)
+WEBCORE_COMMAND(moveToLeftEndOfLine)
+WEBCORE_COMMAND(moveToLeftEndOfLineAndModifySelection)
+WEBCORE_COMMAND(moveToRightEndOfLine)
+WEBCORE_COMMAND(moveToRightEndOfLineAndModifySelection)
+WEBCORE_COMMAND(moveUp)
+WEBCORE_COMMAND(moveUpAndModifySelection)
+WEBCORE_COMMAND(moveWordBackward)
+WEBCORE_COMMAND(moveWordBackwardAndModifySelection)
+WEBCORE_COMMAND(moveWordForward)
+WEBCORE_COMMAND(moveWordForwardAndModifySelection)
+WEBCORE_COMMAND(moveWordLeft)
+WEBCORE_COMMAND(moveWordLeftAndModifySelection)
+WEBCORE_COMMAND(moveWordRight)
+WEBCORE_COMMAND(moveWordRightAndModifySelection)
+WEBCORE_COMMAND(outdent)
+WEBCORE_COMMAND(pageDown)
+WEBCORE_COMMAND(pageDownAndModifySelection)
+WEBCORE_COMMAND(pageUp)
+WEBCORE_COMMAND(pageUpAndModifySelection)
+WEBCORE_COMMAND(paste)
WEBCORE_COMMAND(pasteAsPlainText)
+WEBCORE_COMMAND(scrollPageDown)
+WEBCORE_COMMAND(scrollPageUp)
+WEBCORE_COMMAND(scrollToBeginningOfDocument)
+WEBCORE_COMMAND(scrollToEndOfDocument)
WEBCORE_COMMAND(selectAll)
+WEBCORE_COMMAND(selectLine)
+WEBCORE_COMMAND(selectParagraph)
+WEBCORE_COMMAND(selectSentence)
+WEBCORE_COMMAND(selectToMark)
+WEBCORE_COMMAND(selectWord)
+WEBCORE_COMMAND(setMark)
+WEBCORE_COMMAND(subscript)
+WEBCORE_COMMAND(superscript)
+WEBCORE_COMMAND(swapWithMark)
WEBCORE_COMMAND(takeFindStringFromSelection)
+WEBCORE_COMMAND(transpose)
+WEBCORE_COMMAND(underline)
+WEBCORE_COMMAND(unscript)
+WEBCORE_COMMAND(yank)
+WEBCORE_COMMAND(yankAndSelect)
#undef WEBCORE_COMMAND
+/*
+
+When possible, editing-related methods should be implemented in WebCore with the
+EditorCommand mechanism and invoked via WEBCORE_COMMAND, rather than implementing
+individual methods here with Mac-specific code.
+
+Editing-related methods still unimplemented that are implemented in WebKit1:
+
+- (void)capitalizeWord:(id)sender;
+- (void)centerSelectionInVisibleArea:(id)sender;
+- (void)changeFont:(id)sender;
+- (void)complete:(id)sender;
+- (void)copyFont:(id)sender;
+- (void)lowercaseWord:(id)sender;
+- (void)makeBaseWritingDirectionLeftToRight:(id)sender;
+- (void)makeBaseWritingDirectionNatural:(id)sender;
+- (void)makeBaseWritingDirectionRightToLeft:(id)sender;
+- (void)pasteFont:(id)sender;
+- (void)scrollLineDown:(id)sender;
+- (void)scrollLineUp:(id)sender;
+- (void)showGuessPanel:(id)sender;
+- (void)uppercaseWord:(id)sender;
+
+Some other editing-related methods still unimplemented:
+
+- (void)changeCaseOfLetter:(id)sender;
+- (void)copyRuler:(id)sender;
+- (void)insertContainerBreak:(id)sender;
+- (void)insertDoubleQuoteIgnoringSubstitution:(id)sender;
+- (void)insertSingleQuoteIgnoringSubstitution:(id)sender;
+- (void)pasteRuler:(id)sender;
+- (void)toggleRuler:(id)sender;
+- (void)transposeWords:(id)sender;
+
+*/
+
// Menu items validation
static NSMenuItem *menuItem(id <NSValidatedUserInterfaceItem> item)
@@ -791,6 +921,41 @@ EVENT_HANDLER(scrollWheel, Wheel)
[self _mouseHandler:event];
}
+#if ENABLE(GESTURE_EVENTS)
+
+static const short kIOHIDEventTypeScroll = 6;
+
+- (void)shortCircuitedEndGestureWithEvent:(NSEvent *)event
+{
+ if ([event subtype] != kIOHIDEventTypeScroll)
+ return;
+
+ WebGestureEvent webEvent = WebEventFactory::createWebGestureEvent(event, self);
+ _data->_page->handleGestureEvent(webEvent);
+
+ if (_data->_endGestureMonitor) {
+ [NSEvent removeMonitor:_data->_endGestureMonitor];
+ _data->_endGestureMonitor = nil;
+ }
+}
+
+- (void)beginGestureWithEvent:(NSEvent *)event
+{
+ if ([event subtype] != kIOHIDEventTypeScroll)
+ return;
+
+ WebGestureEvent webEvent = WebEventFactory::createWebGestureEvent(event, self);
+ _data->_page->handleGestureEvent(webEvent);
+
+ if (!_data->_endGestureMonitor) {
+ _data->_endGestureMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskEndGesture handler:^(NSEvent *blockEvent) {
+ [self shortCircuitedEndGestureWithEvent:blockEvent];
+ return blockEvent;
+ }];
+ }
+}
+#endif
+
- (void)doCommandBySelector:(SEL)selector
{
if (selector != @selector(noop:))
@@ -830,6 +995,9 @@ EVENT_HANDLER(scrollWheel, Wheel)
- (BOOL)_handleStyleKeyEquivalent:(NSEvent *)event
{
+ if (!_data->_page->selectionState().isContentEditable)
+ return NO;
+
if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) != NSCommandKeyMask)
return NO;
@@ -875,27 +1043,6 @@ EVENT_HANDLER(scrollWheel, Wheel)
return [self _handleStyleKeyEquivalent:event] || [super performKeyEquivalent:event];
}
-- (void)_setEventBeingResent:(NSEvent *)event
-{
- _data->_keyDownEventBeingResent = [event retain];
-}
-
-- (Vector<KeypressCommand>&)_interceptKeyEvent:(NSEvent *)theEvent
-{
- _data->_commandsList.clear();
- // interpretKeyEvents will trigger one or more calls to doCommandBySelector or setText
- // that will populate the commandsList vector.
- [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
- return _data->_commandsList;
-}
-
-- (void)_getTextInputState:(unsigned)start selectionEnd:(unsigned)end underlines:(Vector<WebCore::CompositionUnderline>&)lines
-{
- start = _data->_selectionStart;
- end = _data->_selectionEnd;
- lines = _data->_underlines;
-}
-
- (void)keyUp:(NSEvent *)theEvent
{
_data->_page->handleKeyboardEvent(NativeWebKeyboardEvent(theEvent, self));
@@ -1165,15 +1312,22 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
{
// Temporarily enable the resize indicator to make a the _ownsWindowGrowBox calculation work.
BOOL wasShowingIndicator = [[self window] showsResizeIndicator];
- [[self window] setShowsResizeIndicator:YES];
+ if (!wasShowingIndicator)
+ [[self window] setShowsResizeIndicator:YES];
BOOL ownsGrowBox = [self _ownsWindowGrowBox];
_data->_page->setWindowResizerSize(ownsGrowBox ? enclosingIntRect([[self window] _growBoxRect]).size() : IntSize());
-
+
+ if (ownsGrowBox)
+ [[self window] _setShowOpaqueGrowBoxForOwner:(_data->_page->hasHorizontalScrollbar() || _data->_page->hasVerticalScrollbar() ? self : nil)];
+ else
+ [[self window] _setShowOpaqueGrowBoxForOwner:nil];
+
// Once WebCore can draw the window resizer, this should read:
// if (wasShowingIndicator)
// [[self window] setShowsResizeIndicator:!ownsGrowBox];
- [[self window] setShowsResizeIndicator:wasShowingIndicator];
+ if (!wasShowingIndicator)
+ [[self window] setShowsResizeIndicator:NO];
return ownsGrowBox;
}
@@ -1228,11 +1382,27 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
_data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible | WebPageProxy::ViewIsInWindow);
[self _updateWindowVisibility];
[self _updateWindowAndViewFrames];
+
+ // Initialize remote accessibility when the window connection has been established.
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+ NSData *remoteElementToken = WKAXRemoteTokenForElement(self);
+ NSData *remoteWindowToken = WKAXRemoteTokenForElement([self window]);
+ CoreIPC::DataReference elementToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteElementToken bytes]), [remoteElementToken length]);
+ CoreIPC::DataReference windowToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteWindowToken bytes]), [remoteWindowToken length]);
+ _data->_page->registerUIProcessAccessibilityTokens(elementToken, windowToken);
+#endif
+
} else {
_data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
_data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow);
- }
+#if ENABLE(GESTURE_EVENTS)
+ if (_data->_endGestureMonitor) {
+ [NSEvent removeMonitor:_data->_endGestureMonitor];
+ _data->_endGestureMonitor = nil;
+ }
+#endif
+ }
}
- (void)_windowDidBecomeKey:(NSNotification *)notification
@@ -1264,13 +1434,34 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
[self _updateWindowAndViewFrames];
}
+static void drawPageBackground(CGContextRef context, WebPageProxy* page, const IntRect& rect)
+{
+ if (!page->drawsBackground())
+ return;
+
+ CGContextSaveGState(context);
+ CGContextSetBlendMode(context, kCGBlendModeCopy);
+
+ CGColorRef backgroundColor;
+ if (page->drawsTransparentBackground())
+ backgroundColor = CGColorGetConstantColor(kCGColorClear);
+ else
+ backgroundColor = CGColorGetConstantColor(kCGColorWhite);
+
+ CGContextSetFillColorWithColor(context, backgroundColor);
+ CGContextFillRect(context, rect);
+
+ CGContextRestoreGState(context);
+}
+
- (void)drawRect:(NSRect)rect
{
LOG(View, "drawRect: x:%g, y:%g, width:%g, height:%g", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
+ _data->_page->endPrinting();
if (useNewDrawingArea()) {
- if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(_data->_page->drawingArea())) {
- CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]);
+ CGContextRef context = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]);
+ if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(_data->_page->drawingArea())) {
const NSRect *rectsBeingDrawn;
NSInteger numRectsBeingDrawn;
[self getRectsBeingDrawn:&rectsBeingDrawn count:&numRectsBeingDrawn];
@@ -1278,11 +1469,13 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
Region unpaintedRegion;
IntRect rect = enclosingIntRect(rectsBeingDrawn[i]);
drawingArea->paint(context, rect, unpaintedRegion);
+
+ Vector<IntRect> unpaintedRects = unpaintedRegion.rects();
+ for (size_t i = 0; i < unpaintedRects.size(); ++i)
+ drawPageBackground(context, _data->_page.get(), unpaintedRects[i]);
}
- } else if (_data->_page->drawsBackground()) {
- [_data->_page->drawsTransparentBackground() ? [NSColor clearColor] : [NSColor whiteColor] set];
- NSRectFill(rect);
- }
+ } else
+ drawPageBackground(context, _data->_page.get(), enclosingIntRect(rect));
_data->_page->didDraw();
return;
@@ -1313,14 +1506,6 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
_data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
}
-- (void)_setAccessibilityChildToken:(NSData *)data
-{
-#if !defined(BUILDING_ON_SNOW_LEOPARD)
- _data->_remoteAccessibilityChild = WKAXRemoteElementForToken((CFDataRef)data);
- WKAXInitializeRemoteElementWithWindow(_data->_remoteAccessibilityChild.get(), [self window]);
-#endif
-}
-
- (BOOL)accessibilityIsIgnored
{
return NO;
@@ -1353,9 +1538,12 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
- (NSView *)hitTest:(NSPoint)point
{
NSView *hitView = [super hitTest:point];
-#if USE(ACCELERATED_COMPOSITING)
if (hitView && _data && hitView == _data->_layerHostingView)
hitView = self;
+
+#if USE(ACCELERATED_COMPOSITING)
+ if (hitView && _data && hitView == _data->_oldLayerHostingView)
+ hitView = self;
#endif
return hitView;
}
@@ -1365,190 +1553,30 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
return (NSInteger)self;
}
-static void setFrameBeingPrinted(NSPrintOperation *printOperation, WebFrameProxy* frame)
-{
- RetainPtr<WebFrameWrapper> frameWrapper(AdoptNS, [[WebFrameWrapper alloc] initWithFrameProxy:frame]);
- [[[printOperation printInfo] dictionary] setObject:frameWrapper.get() forKey:PrintedFrameKey];
-}
-
-static WebFrameProxy* frameBeingPrinted()
-{
- return [[[[[NSPrintOperation currentOperation] printInfo] dictionary] objectForKey:PrintedFrameKey] webFrame];
-}
-static float currentPrintOperationScale()
-{
- ASSERT([NSPrintOperation currentOperation]);
- ASSERT([[[[NSPrintOperation currentOperation] printInfo] dictionary] objectForKey:NSPrintScalingFactor]);
- return [[[[[NSPrintOperation currentOperation] printInfo] dictionary] objectForKey:NSPrintScalingFactor] floatValue];
-}
-
-- (void)_adjustPrintingMarginsForHeaderAndFooter
+- (BOOL)canChangeFrameLayout:(WKFrameRef)frameRef
{
- NSPrintOperation *printOperation = [NSPrintOperation currentOperation];
- NSPrintInfo *info = [printOperation printInfo];
- NSMutableDictionary *infoDictionary = [info dictionary];
-
- // We need to modify the top and bottom margins in the NSPrintInfo to account for the space needed by the
- // header and footer. Because this method can be called more than once on the same NSPrintInfo (see 5038087),
- // we stash away the unmodified top and bottom margins the first time this method is called, and we read from
- // those stashed-away values on subsequent calls.
- float originalTopMargin;
- float originalBottomMargin;
- NSNumber *originalTopMarginNumber = [infoDictionary objectForKey:WebKitOriginalTopPrintingMarginKey];
- if (!originalTopMarginNumber) {
- ASSERT(![infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey]);
- originalTopMargin = [info topMargin];
- originalBottomMargin = [info bottomMargin];
- [infoDictionary setObject:[NSNumber numberWithFloat:originalTopMargin] forKey:WebKitOriginalTopPrintingMarginKey];
- [infoDictionary setObject:[NSNumber numberWithFloat:originalBottomMargin] forKey:WebKitOriginalBottomPrintingMarginKey];
- } else {
- ASSERT([originalTopMarginNumber isKindOfClass:[NSNumber class]]);
- ASSERT([[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] isKindOfClass:[NSNumber class]]);
- originalTopMargin = [originalTopMarginNumber floatValue];
- originalBottomMargin = [[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] floatValue];
- }
-
- float scale = currentPrintOperationScale();
- [info setTopMargin:originalTopMargin + _data->_page->headerHeight(frameBeingPrinted()) * scale];
- [info setBottomMargin:originalBottomMargin + _data->_page->footerHeight(frameBeingPrinted()) * scale];
+ // PDF documents are already paginated, so we can't change them to add headers and footers.
+ return !toImpl(frameRef)->isMainFrame() || !_data->_pdfViewController;
}
- (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo forFrame:(WKFrameRef)frameRef
{
LOG(View, "Creating an NSPrintOperation for frame '%s'", toImpl(frameRef)->url().utf8().data());
- NSPrintOperation *printOperation;
// Only the top frame can currently contain a PDF view.
if (_data->_pdfViewController) {
- ASSERT(toImpl(frameRef)->isMainFrame());
- printOperation = _data->_pdfViewController->makePrintOperation(printInfo);
- } else
- printOperation = [NSPrintOperation printOperationWithView:self printInfo:printInfo];
-
- setFrameBeingPrinted(printOperation, toImpl(frameRef));
- return printOperation;
-}
-
-- (BOOL)canChangeFrameLayout:(WKFrameRef)frameRef
-{
- // PDF documents are already paginated, so we can't change them to add headers and footers.
- return !toImpl(frameRef)->isMainFrame() || !_data->_pdfViewController;
-}
-
-// Return the number of pages available for printing
-- (BOOL)knowsPageRange:(NSRangePointer)range
-{
- LOG(View, "knowsPageRange:");
- WebFrameProxy* frame = frameBeingPrinted();
- ASSERT(frame);
-
- if (frame->isMainFrame() && _data->_pdfViewController)
- return [super knowsPageRange:range];
-
- [self _adjustPrintingMarginsForHeaderAndFooter];
-
- _data->_page->computePagesForPrinting(frame, PrintInfo([[NSPrintOperation currentOperation] printInfo]), _data->_printingPageRects, _data->_totalScaleFactorForPrinting);
-
- *range = NSMakeRange(1, _data->_printingPageRects.size());
- return YES;
-}
-
-// Take over printing. AppKit applies incorrect clipping, and doesn't print pages beyond the first one.
-- (void)_recursiveDisplayRectIfNeededIgnoringOpacity:(NSRect)rect isVisibleRect:(BOOL)isVisibleRect rectIsVisibleRectForView:(NSView *)visibleView topView:(BOOL)topView
-{
- // FIXME: This check isn't right for some non-printing cases, such as capturing into a buffer using cacheDisplayInRect:toBitmapImageRep:.
- if ([NSGraphicsContext currentContextDrawingToScreen]) {
- _data->_page->endPrinting();
- [super _recursiveDisplayRectIfNeededIgnoringOpacity:rect isVisibleRect:isVisibleRect rectIsVisibleRectForView:visibleView topView:topView];
- return;
- }
-
- LOG(View, "Printing rect x:%g, y:%g, width:%g, height:%g", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
-
- ASSERT(self == visibleView);
- ASSERT(frameBeingPrinted());
-
- WebFrameProxy* frame = frameBeingPrinted();
- ASSERT(frame);
-
- _data->_page->beginPrinting(frame, PrintInfo([[NSPrintOperation currentOperation] printInfo]));
-
- // FIXME: This is optimized for print preview. Get the whole document at once when actually printing.
- Vector<uint8_t> pdfData;
- _data->_page->drawRectToPDF(frame, IntRect(rect), pdfData);
-
- RetainPtr<CGDataProviderRef> pdfDataProvider(AdoptCF, CGDataProviderCreateWithData(0, pdfData.data(), pdfData.size(), 0));
- RetainPtr<CGPDFDocumentRef> pdfDocument(AdoptCF, CGPDFDocumentCreateWithProvider(pdfDataProvider.get()));
- if (!pdfDocument) {
- LOG_ERROR("Couldn't create a PDF document with data passed for printing");
- return;
- }
-
- CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument.get(), 1);
- if (!pdfPage) {
- LOG_ERROR("Printing data doesn't have page 1");
- return;
+ if (!toImpl(frameRef)->isMainFrame())
+ return 0;
+ return _data->_pdfViewController->makePrintOperation(printInfo);
+ } else {
+ RetainPtr<WKPrintingView> printingView(AdoptNS, [[WKPrintingView alloc] initWithFrameProxy:toImpl(frameRef)]);
+ // NSPrintOperation takes ownership of the view.
+ NSPrintOperation *printOperation = [NSPrintOperation printOperationWithView:printingView.get()];
+ [printOperation setCanSpawnSeparateThread:YES];
+ printingView->_printOperation = printOperation;
+ return printOperation;
}
-
- NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext];
- CGContextRef context = static_cast<CGContextRef>([nsGraphicsContext graphicsPort]);
-
- CGContextSaveGState(context);
- // Flip the destination.
- CGContextScaleCTM(context, 1, -1);
- CGContextTranslateCTM(context, 0, -rect.size.height);
- CGContextDrawPDFPage(context, pdfPage);
- CGContextRestoreGState(context);
-}
-
-- (void)drawPageBorderWithSize:(NSSize)borderSize
-{
- ASSERT(NSEqualSizes(borderSize, [[[NSPrintOperation currentOperation] printInfo] paperSize]));
-
- // The header and footer rect height scales with the page, but the width is always
- // all the way across the printed page (inset by printing margins).
- NSPrintOperation *printOperation = [NSPrintOperation currentOperation];
- NSPrintInfo *printInfo = [printOperation printInfo];
- float scale = currentPrintOperationScale();
- NSSize paperSize = [printInfo paperSize];
- float headerFooterLeft = [printInfo leftMargin] / scale;
- float headerFooterWidth = (paperSize.width - ([printInfo leftMargin] + [printInfo rightMargin])) / scale;
- WebFrameProxy* frame = frameBeingPrinted();
- NSRect footerRect = NSMakeRect(headerFooterLeft, [printInfo bottomMargin] / scale - _data->_page->footerHeight(frame), headerFooterWidth, _data->_page->footerHeight(frame));
- NSRect headerRect = NSMakeRect(headerFooterLeft, (paperSize.height - [printInfo topMargin]) / scale, headerFooterWidth, _data->_page->headerHeight(frame));
-
- NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
- [currentContext saveGraphicsState];
- NSRectClip(headerRect);
- _data->_page->drawHeader(frame, headerRect);
- [currentContext restoreGraphicsState];
-
- [currentContext saveGraphicsState];
- NSRectClip(footerRect);
- _data->_page->drawFooter(frame, footerRect);
- [currentContext restoreGraphicsState];
-}
-
-// FIXME 3491344: This is an AppKit-internal method that we need to override in order
-// to get our shrink-to-fit to work with a custom pagination scheme. We can do this better
-// if AppKit makes it SPI/API.
-- (CGFloat)_provideTotalScaleFactorForPrintOperation:(NSPrintOperation *)printOperation
-{
- return _data->_totalScaleFactorForPrinting;
-}
-
-// Return the drawing rectangle for a particular page number
-- (NSRect)rectForPage:(NSInteger)page
-{
- WebFrameProxy* frame = frameBeingPrinted();
- ASSERT(frame);
-
- if (frame->isMainFrame() && _data->_pdfViewController)
- return [super rectForPage:page];
-
- LOG(View, "rectForPage:%d -> x %d, y %d, width %d, height %d\n", (int)page, _data->_printingPageRects[page - 1].x(), _data->_printingPageRects[page - 1].y(), _data->_printingPageRects[page - 1].width(), _data->_printingPageRects[page - 1].height());
- return _data->_printingPageRects[page - 1];
}
@end
@@ -1575,6 +1603,12 @@ static float currentPrintOperationScale()
- (void)_processDidCrash
{
[self setNeedsDisplay:YES];
+ [self _updateRemoteAccessibilityRegistration:NO];
+}
+
+- (void)_pageClosed
+{
+ [self _updateRemoteAccessibilityRegistration:NO];
}
- (void)_didRelaunchProcess
@@ -1610,6 +1644,27 @@ static float currentPrintOperationScale()
}
}
+- (void)_setEventBeingResent:(NSEvent *)event
+{
+ _data->_keyDownEventBeingResent = [event retain];
+}
+
+- (Vector<KeypressCommand>&)_interceptKeyEvent:(NSEvent *)theEvent
+{
+ _data->_commandsList.clear();
+ // interpretKeyEvents will trigger one or more calls to doCommandBySelector or setText
+ // that will populate the commandsList vector.
+ [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
+ return _data->_commandsList;
+}
+
+- (void)_getTextInputState:(unsigned)start selectionEnd:(unsigned)end underlines:(Vector<WebCore::CompositionUnderline>&)lines
+{
+ start = _data->_selectionStart;
+ end = _data->_selectionEnd;
+ lines = _data->_underlines;
+}
+
- (NSRect)_convertToDeviceSpace:(NSRect)rect
{
return toDeviceSpace(rect, [self window]);
@@ -1750,7 +1805,7 @@ static float currentPrintOperationScale()
#if USE(ACCELERATED_COMPOSITING)
- (void)_startAcceleratedCompositing:(CALayer *)rootLayer
{
- if (!_data->_layerHostingView) {
+ if (!_data->_oldLayerHostingView) {
NSView *hostingView = [[NSView alloc] initWithFrame:[self bounds]];
#if !defined(BUILDING_ON_LEOPARD)
[hostingView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
@@ -1758,7 +1813,7 @@ static float currentPrintOperationScale()
[self addSubview:hostingView];
[hostingView release];
- _data->_layerHostingView = hostingView;
+ _data->_oldLayerHostingView = hostingView;
}
// Make a container layer, which will get sized/positioned by AppKit and CA.
@@ -1792,8 +1847,8 @@ static float currentPrintOperationScale()
[viewLayer setTransform:CATransform3DMakeScale(scaleFactor, scaleFactor, 1)];
#endif
- [_data->_layerHostingView setLayer:viewLayer];
- [_data->_layerHostingView setWantsLayer:YES];
+ [_data->_oldLayerHostingView setLayer:viewLayer];
+ [_data->_oldLayerHostingView setWantsLayer:YES];
// Parent our root layer in the container layer
[viewLayer addSublayer:rootLayer];
@@ -1801,11 +1856,11 @@ static float currentPrintOperationScale()
- (void)_stopAcceleratedCompositing
{
- if (_data->_layerHostingView) {
- [_data->_layerHostingView setLayer:nil];
- [_data->_layerHostingView setWantsLayer:NO];
- [_data->_layerHostingView removeFromSuperview];
- _data->_layerHostingView = nil;
+ if (_data->_oldLayerHostingView) {
+ [_data->_oldLayerHostingView setLayer:nil];
+ [_data->_oldLayerHostingView setWantsLayer:NO];
+ [_data->_oldLayerHostingView removeFromSuperview];
+ _data->_oldLayerHostingView = nil;
}
}
@@ -1830,12 +1885,46 @@ static float currentPrintOperationScale()
}
}
- newDrawingArea->setSize(IntSize([self frame].size));
+ newDrawingArea->setSize(IntSize([self frame].size), IntSize());
_data->_page->drawingArea()->detachCompositingContext();
_data->_page->setDrawingArea(newDrawingArea.release());
}
+- (void)_enterAcceleratedCompositingMode:(const LayerTreeContext&)layerTreeContext
+{
+ ASSERT(!_data->_layerHostingView);
+ ASSERT(!layerTreeContext.isEmpty());
+
+ // Create an NSView that will host our layer tree.
+ _data->_layerHostingView.adoptNS([[NSView alloc] initWithFrame:[self bounds]]);
+ [_data->_layerHostingView.get() setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+ [self addSubview:_data->_layerHostingView.get()];
+
+ // Create a root layer that will back the NSView.
+ RetainPtr<CALayer> rootLayer(AdoptNS, [[CALayer alloc] init]);
+#ifndef NDEBUG
+ [rootLayer.get() setName:@"Hosting root layer"];
+#endif
+
+ CALayer *renderLayer = WKMakeRenderLayer(layerTreeContext.contextID);
+ [rootLayer.get() addSublayer:renderLayer];
+
+ [_data->_layerHostingView.get() setLayer:rootLayer.get()];
+ [_data->_layerHostingView.get() setWantsLayer:YES];
+}
+
+- (void)_exitAcceleratedCompositingMode
+{
+ ASSERT(_data->_layerHostingView);
+
+ [_data->_layerHostingView.get() setLayer:nil];
+ [_data->_layerHostingView.get() setWantsLayer:NO];
+ [_data->_layerHostingView.get() removeFromSuperview];
+
+ _data->_layerHostingView = nullptr;
+}
+
- (void)_pageDidEnterAcceleratedCompositing
{
[self _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::LayerBacked];
@@ -1848,6 +1937,14 @@ static float currentPrintOperationScale()
}
#endif // USE(ACCELERATED_COMPOSITING)
+- (void)_setAccessibilityWebProcessToken:(NSData *)data
+{
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+ _data->_remoteAccessibilityChild = WKAXRemoteElementForToken(data);
+ [self _updateRemoteAccessibilityRegistration:YES];
+#endif
+}
+
- (void)_setComplexTextInputEnabled:(BOOL)complexTextInputEnabled pluginComplexTextInputIdentifier:(uint64_t)pluginComplexTextInputIdentifier
{
BOOL inputSourceChanged = _data->_pluginComplexTextInputIdentifier;
@@ -1922,4 +2019,42 @@ static float currentPrintOperationScale()
_data->_dragHasStarted = NO;
}
+- (void)_setDrawingAreaSize:(NSSize)size
+{
+ if (!_data->_page->drawingArea())
+ return;
+
+ _data->_page->drawingArea()->setSize(IntSize(size), IntSize(_data->_resizeScrollOffset));
+ _data->_resizeScrollOffset = NSZeroSize;
+}
+
+- (void)_didChangeScrollbarsForMainFrame
+{
+ [self _updateGrowBoxForWindowFrameChange];
+}
+
+@end
+
+@implementation WKView (Private)
+
+- (void)disableFrameSizeUpdates
+{
+ _frameSizeUpdatesDisabledCount++;
+}
+
+- (void)enableFrameSizeUpdates
+{
+ if (!_frameSizeUpdatesDisabledCount)
+ return;
+
+ if (!(--_frameSizeUpdatesDisabledCount))
+ [self _setDrawingAreaSize:[self frame].size];
+}
+
+- (BOOL)frameSizeUpdatesDisabled
+{
+ return _frameSizeUpdatesDisabledCount > 0;
+}
+
@end
+
diff --git a/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h b/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
index cba241d..9e77e30 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
+++ b/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
@@ -36,6 +36,7 @@ namespace WebKit {
- (PassOwnPtr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy;
- (BOOL)_isFocused;
- (void)_processDidCrash;
+- (void)_pageClosed;
- (void)_didRelaunchProcess;
- (void)_takeFocus:(BOOL)direction;
- (void)_toolTipChangedFrom:(NSString *)oldToolTip to:(NSString *)newToolTip;
@@ -48,6 +49,9 @@ namespace WebKit {
- (NSRect)_convertToUserSpace:(NSRect)rect;
- (void)_setFindIndicator:(PassRefPtr<WebKit::FindIndicator>)findIndicator fadeOut:(BOOL)fadeOut;
+- (void)_enterAcceleratedCompositingMode:(const WebKit::LayerTreeContext&)layerTreeContext;
+- (void)_exitAcceleratedCompositingMode;
+
#if USE(ACCELERATED_COMPOSITING)
- (void)_startAcceleratedCompositing:(CALayer *)rootLayer;
- (void)_stopAcceleratedCompositing;
@@ -55,7 +59,7 @@ namespace WebKit {
- (void)_pageDidLeaveAcceleratedCompositing;
#endif
-- (void)_setAccessibilityChildToken:(NSData *)data;
+- (void)_setAccessibilityWebProcessToken:(NSData *)data;
- (void)_setComplexTextInputEnabled:(BOOL)complexTextInputEnabled pluginComplexTextInputIdentifier:(uint64_t)pluginComplexTextInputIdentifier;
- (void)_setPageHasCustomRepresentation:(BOOL)pageHasCustomRepresentation;
@@ -64,4 +68,7 @@ namespace WebKit {
- (void)_setCustomRepresentationZoomFactor:(double)zoomFactor;
- (void)_setDragImage:(NSImage *)image at:(NSPoint)clientPoint linkDrag:(BOOL)linkDrag;
+- (void)_setDrawingAreaSize:(NSSize)size;
+
+- (void)_didChangeScrollbarsForMainFrame;
@end
diff --git a/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h b/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h
new file mode 100644
index 0000000..5d6125e
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+@interface WKView (Private)
+
+// Stops updating the size of the page as the WKView frame size updates.
+// This should always be followed by enableFrameSizeUpdates. Calls can be nested.
+- (void)disableFrameSizeUpdates;
+// Immediately updates the size of the page to match WKView's frame size
+// and allows subsequent updates as the frame size is set. Calls can be nested.
+- (void)enableFrameSizeUpdates;
+- (BOOL)frameSizeUpdatesDisabled;
+
+@end
diff --git a/Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp b/Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp
index 642e529..8197236 100644
--- a/Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp
@@ -17,6 +17,7 @@
Boston, MA 02110-1301, USA.
*/
+#include "config.h"
#include "ClientImpl.h"
#include "WebFrameProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp b/Source/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
index ec23760..748b1bd 100644
--- a/Source/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qgraphicswkview.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "config.h"
#include "qgraphicswkview.h"
#include "ChunkedUpdateDrawingAreaProxy.h"
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp b/Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp
index b17c100..5f05f93 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "config.h"
#include "qwkcontext.h"
#include "qwkcontext_p.h"
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkpage.cpp b/Source/WebKit2/UIProcess/API/qt/qwkpage.cpp
index 72c1322..16e1cdd 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkpage.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwkpage.cpp
@@ -18,6 +18,7 @@
*
*/
+#include "config.h"
#include "qwkpage.h"
#include "qwkpage_p.h"
@@ -89,6 +90,7 @@ QWKPagePrivate::QWKPagePrivate(QWKPage* qq, QWKContext* c)
, preferences(0)
, createNewPageFn(0)
, backingStoreType(QGraphicsWKView::Simple)
+ , isConnectedToEngine(true)
{
memset(actions, 0, sizeof(actions));
page = context->d->context->createWebPage(this, 0);
@@ -183,6 +185,16 @@ bool QWKPagePrivate::isViewInWindow()
return true;
}
+void QWKPagePrivate::enterAcceleratedCompositingMode(const LayerTreeContext&)
+{
+ // FIXME: Implement.
+}
+
+void QWKPagePrivate::exitAcceleratedCompositingMode()
+{
+ // FIXME: Implement.
+}
+
void QWKPagePrivate::pageDidRequestScroll(const IntSize& delta)
{
emit q->scrollRequested(delta.width(), delta.height());
@@ -220,7 +232,7 @@ void QWKPagePrivate::selectionChanged(bool, bool, bool, bool)
{
}
-void QWKPagePrivate::didNotHandleKeyEvent(const NativeWebKeyboardEvent&)
+void QWKPagePrivate::doneWithKeyEvent(const NativeWebKeyboardEvent&, bool)
{
}
@@ -391,6 +403,15 @@ void QWKPagePrivate::didRelaunchProcess()
QGraphicsWKView* wkView = static_cast<QGraphicsWKView*>(view);
if (wkView)
q->setViewportSize(wkView->size().toSize());
+
+ isConnectedToEngine = true;
+ emit q->engineConnectionChanged(true);
+}
+
+void QWKPagePrivate::processDidCrash()
+{
+ isConnectedToEngine = false;
+ emit q->engineConnectionChanged(false);
}
QWKPage::QWKPage(QWKContext* context)
@@ -459,7 +480,8 @@ QWKPage::QWKPage(QWKContext* context)
0, /* drawHeader */
0, /* drawFooter */
0, /* printFrame */
- 0 /* runModal */
+ 0, /* runModal */
+ 0 /* didCompleteRubberBandForMainFrame */
};
WKPageSetPageUIClient(pageRef(), &uiClient);
}
@@ -622,7 +644,7 @@ QString QWKPage::title() const
void QWKPage::setViewportSize(const QSize& size)
{
if (d->page->drawingArea())
- d->page->drawingArea()->setSize(IntSize(size));
+ d->page->drawingArea()->setSize(IntSize(size), IntSize());
}
qreal QWKPage::textZoomFactor() const
@@ -775,4 +797,9 @@ void QWKPagePrivate::didFindZoomableArea(const IntRect& area)
emit q->zoomableAreaFound(QRect(area));
}
+bool QWKPage::isConnectedToEngine() const
+{
+ return d->isConnectedToEngine;
+}
+
#include "moc_qwkpage.cpp"
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkpage.h b/Source/WebKit2/UIProcess/API/qt/qwkpage.h
index e0bb4c3..cb7933a 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkpage.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwkpage.h
@@ -117,6 +117,8 @@ public:
void findZoomableAreaForPoint(const QPoint&);
+ bool isConnectedToEngine() const;
+
public:
Q_SIGNAL void statusBarMessage(const QString&);
Q_SIGNAL void titleChanged(const QString&);
@@ -133,6 +135,7 @@ public:
Q_SIGNAL void zoomableAreaFound(const QRect&);
Q_SIGNAL void focusNextPrevChild(bool);
Q_SIGNAL void showContextMenu(QMenu*);
+ Q_SIGNAL void engineConnectionChanged(bool connected);
protected:
void timerEvent(QTimerEvent*);
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h b/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
index 420ff62..65f64ff 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
@@ -22,6 +22,7 @@
#define qwkpage_p_h
#include "DrawingAreaProxy.h"
+#include "LayerTreeContext.h"
#include "PageClient.h"
#include "qwkpage.h"
#include "qgraphicswkview.h"
@@ -35,6 +36,8 @@
class QGraphicsWKView;
class QWKPreferences;
+using namespace WebKit;
+
class QWKPagePrivate : WebKit::PageClient {
public:
QWKPagePrivate(QWKPage*, QWKContext*);
@@ -57,11 +60,14 @@ public:
virtual bool isViewInWindow();
#if USE(ACCELERATED_COMPOSITING)
+ virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
+ virtual void exitAcceleratedCompositingMode();
void pageDidEnterAcceleratedCompositing() { }
void pageDidLeaveAcceleratedCompositing() { }
#endif // USE(ACCELERATED_COMPOSITING)
virtual void pageDidRequestScroll(const WebCore::IntSize&);
- virtual void processDidCrash() { }
+ virtual void processDidCrash();
+ virtual void pageClosed() { }
virtual void didRelaunchProcess();
virtual void didChangeContentsSize(const WebCore::IntSize&);
virtual void didFindZoomableArea(const WebCore::IntRect&);
@@ -73,7 +79,7 @@ public:
virtual void clearAllEditCommands();
virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
- virtual void didNotHandleKeyEvent(const WebKit::NativeWebKeyboardEvent&);
+ virtual void doneWithKeyEvent(const WebKit::NativeWebKeyboardEvent&, bool wasEventHandled);
virtual void selectionChanged(bool, bool, bool, bool);
virtual PassRefPtr<WebKit::WebPopupMenuProxy> createPopupMenuProxy(WebKit::WebPageProxy*);
virtual PassRefPtr<WebKit::WebContextMenuProxy> createContextMenuProxy(WebKit::WebPageProxy*);
@@ -84,6 +90,7 @@ public:
virtual void didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference&);
virtual double customRepresentationZoomFactor() { return 1; }
virtual void setCustomRepresentationZoomFactor(double) { }
+ virtual void didChangeScrollbarsForMainFrame() const { }
void paint(QPainter* painter, QRect);
@@ -122,6 +129,8 @@ public:
QPoint tripleClick;
QBasicTimer tripleClickTimer;
QGraphicsWKView::BackingStoreType backingStoreType;
+
+ bool isConnectedToEngine;
};
class QtViewportAttributesPrivate : public QSharedData {
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp b/Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp
index dea18aa..4ba18a3 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp
@@ -17,6 +17,7 @@
Boston, MA 02110-1301, USA.
*/
+#include "config.h"
#include "qwkpreferences.h"
#include "WKPageGroup.h"
diff --git a/Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp b/Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp
index 07b39b2..ffe8bac 100644
--- a/Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp
+++ b/Source/WebKit2/UIProcess/Authentication/AuthenticationChallengeProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "AuthenticationChallengeProxy.h"
#include "AuthenticationDecisionListener.h"
diff --git a/Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp b/Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp
index ddcc6c6..a3987cd 100644
--- a/Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp
+++ b/Source/WebKit2/UIProcess/Authentication/AuthenticationDecisionListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "AuthenticationDecisionListener.h"
#include "AuthenticationChallengeProxy.h"
diff --git a/Source/WebKit2/UIProcess/Authentication/WebCredential.cpp b/Source/WebKit2/UIProcess/Authentication/WebCredential.cpp
index b9a346e..0b429a7 100644
--- a/Source/WebKit2/UIProcess/Authentication/WebCredential.cpp
+++ b/Source/WebKit2/UIProcess/Authentication/WebCredential.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebCredential.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/Authentication/WebProtectionSpace.cpp b/Source/WebKit2/UIProcess/Authentication/WebProtectionSpace.cpp
index 1671371..3d38e22 100644
--- a/Source/WebKit2/UIProcess/Authentication/WebProtectionSpace.cpp
+++ b/Source/WebKit2/UIProcess/Authentication/WebProtectionSpace.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProtectionSpace.h"
#include <WebCore/SharedBuffer.h>
diff --git a/Source/WebKit2/UIProcess/BackingStore.cpp b/Source/WebKit2/UIProcess/BackingStore.cpp
index b468b6b..f9a2672 100644
--- a/Source/WebKit2/UIProcess/BackingStore.cpp
+++ b/Source/WebKit2/UIProcess/BackingStore.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "BackingStore.h"
#include "ShareableBitmap.h"
@@ -30,7 +31,7 @@
using namespace WebCore;
-#if !PLATFORM(MAC)
+#if !PLATFORM(MAC) && !PLATFORM(WIN)
#error "This class is not ready for use by other ports yet."
#endif
@@ -44,7 +45,6 @@ PassOwnPtr<BackingStore> BackingStore::create(const IntSize& size, WebPageProxy*
BackingStore::BackingStore(const IntSize& size, WebPageProxy* webPageProxy)
: m_size(size)
, m_webPageProxy(webPageProxy)
- , m_latestUpdateTimestamp(0)
{
ASSERT(!m_size.isEmpty());
}
@@ -55,20 +55,13 @@ BackingStore::~BackingStore()
void BackingStore::incorporateUpdate(const UpdateInfo& updateInfo)
{
- if (updateInfo.timestamp < m_latestUpdateTimestamp) {
- // The update is too old, discard it.
- return;
- }
-
- ASSERT(m_size == updateInfo.viewSize);
+// ASSERT(m_size == updateInfo.viewSize);
RefPtr<ShareableBitmap> bitmap = ShareableBitmap::create(updateInfo.updateRectBounds.size(), updateInfo.bitmapHandle);
if (!bitmap)
return;
incorporateUpdate(bitmap.get(), updateInfo);
-
- m_latestUpdateTimestamp = updateInfo.timestamp;
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/BackingStore.h b/Source/WebKit2/UIProcess/BackingStore.h
index a3ea065..eacd99e 100644
--- a/Source/WebKit2/UIProcess/BackingStore.h
+++ b/Source/WebKit2/UIProcess/BackingStore.h
@@ -32,6 +32,8 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
+#elif PLATFORM(WIN)
+#include <wtf/OwnPtr.h>
#endif
namespace WebCore {
@@ -55,6 +57,8 @@ public:
#if PLATFORM(MAC)
typedef CGContextRef PlatformGraphicsContext;
+#elif PLATFORM(WIN)
+ typedef HDC PlatformGraphicsContext;
#endif
void paint(PlatformGraphicsContext, const WebCore::IntRect&);
@@ -68,13 +72,14 @@ private:
WebCore::IntSize m_size;
WebPageProxy* m_webPageProxy;
- double m_latestUpdateTimestamp;
#if PLATFORM(MAC)
CGContextRef backingStoreContext();
RetainPtr<CGLayerRef> m_cgLayer;
RetainPtr<CGContextRef> m_bitmapContext;
+#elif PLATFORM(WIN)
+ OwnPtr<HBITMAP> m_bitmap;
#endif
};
diff --git a/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp b/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp
index 22e9c84..58cac4f 100644
--- a/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp
+++ b/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingAreaProxy.h"
#include "DrawingAreaMessageKinds.h"
@@ -47,6 +49,9 @@ ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy(PlatformWebView* we
, m_isWaitingForDidSetFrameNotification(false)
, m_isVisible(true)
, m_forceRepaintWhenResumingPainting(false)
+#if PLATFORM(GTK)
+ , m_backingStoreImage(0)
+#endif
, m_webView(webView)
{
}
@@ -65,7 +70,7 @@ bool ChunkedUpdateDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingCo
if (page->process()->isLaunching())
return false;
- OwnPtr<CoreIPC::ArgumentDecoder> arguments = page->process()->connection()->waitFor(DrawingAreaProxyLegacyMessage::DidSetSize, page->pageID(), 0.04);
+ OwnPtr<CoreIPC::ArgumentDecoder> arguments = page->process()->connection()->deprecatedWaitFor(DrawingAreaProxyLegacyMessage::DidSetSize, page->pageID(), 0.04);
if (arguments)
didReceiveMessage(page->process()->connection(), CoreIPC::MessageID(DrawingAreaProxyLegacyMessage::DidSetSize), arguments.get());
}
@@ -91,12 +96,12 @@ void ChunkedUpdateDrawingAreaProxy::setPageIsVisible(bool isVisible)
if (!m_isVisible) {
// Tell the web process that it doesn't need to paint anything for now.
- page->process()->send(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In(info().identifier));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In(info().identifier));
return;
}
// The page is now visible, resume painting.
- page->process()->send(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In(info().identifier, m_forceRepaintWhenResumingPainting));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In(info().identifier, m_forceRepaintWhenResumingPainting));
m_forceRepaintWhenResumingPainting = false;
}
@@ -113,9 +118,6 @@ void ChunkedUpdateDrawingAreaProxy::didSetSize(UpdateChunk* updateChunk)
invalidateBackingStore();
if (!updateChunk->isEmpty())
drawUpdateChunkIntoBackingStore(updateChunk);
-
- WebPageProxy* page = this->page();
- page->process()->responsivenessTimer()->stop();
}
void ChunkedUpdateDrawingAreaProxy::update(UpdateChunk* updateChunk)
@@ -131,7 +133,7 @@ void ChunkedUpdateDrawingAreaProxy::update(UpdateChunk* updateChunk)
}
WebPageProxy* page = this->page();
- page->process()->send(DrawingAreaLegacyMessage::DidUpdate, page->pageID(), CoreIPC::In(info().identifier));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::DidUpdate, page->pageID(), CoreIPC::In(info().identifier));
}
void ChunkedUpdateDrawingAreaProxy::sendSetSize()
@@ -143,8 +145,7 @@ void ChunkedUpdateDrawingAreaProxy::sendSetSize()
return;
m_isWaitingForDidSetFrameNotification = true;
- m_webPageProxy->process()->responsivenessTimer()->start();
- m_webPageProxy->process()->send(DrawingAreaLegacyMessage::SetSize, m_webPageProxy->pageID(), CoreIPC::In(info().identifier, m_size));
+ m_webPageProxy->process()->deprecatedSend(DrawingAreaLegacyMessage::SetSize, m_webPageProxy->pageID(), CoreIPC::In(info().identifier, m_size));
}
void ChunkedUpdateDrawingAreaProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
diff --git a/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h b/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h
index 348d04f..7d7a5f4 100644
--- a/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h
+++ b/Source/WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h
@@ -1,5 +1,7 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,22 +25,20 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef DrawingAreaProxyUpdateChunk_h
-#define DrawingAreaProxyUpdateChunk_h
+#ifndef ChunkedUpdateDrawingAreaProxy_h
+#define ChunkedUpdateDrawingAreaProxy_h
#include "DrawingAreaProxy.h"
#include <WebCore/IntSize.h>
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class WKView;
-#else
-class WKView;
-#endif
+OBJC_CLASS WKView;
#elif PLATFORM(QT)
#include <QImage>
class QGraphicsWKView;
+#elif PLATFORM(GTK)
+typedef struct _cairo_surface cairo_surface_t;
#endif
namespace WebKit {
@@ -53,6 +53,9 @@ class WebView;
typedef WebView PlatformWebView;
#elif PLATFORM(QT)
typedef QGraphicsWKView PlatformWebView;
+#elif PLATFORM(GTK)
+class WebView;
+typedef WebView PlatformWebView;
#endif
class ChunkedUpdateDrawingAreaProxy : public DrawingAreaProxy {
@@ -99,6 +102,8 @@ private:
OwnPtr<HBITMAP> m_backingStoreBitmap;
#elif PLATFORM(QT)
QImage m_backingStoreImage;
+#elif PLATFORM(GTK)
+ cairo_surface_t* m_backingStoreImage;
#endif
PlatformWebView* m_webView;
@@ -106,4 +111,4 @@ private:
} // namespace WebKit
-#endif // DrawingAreaProxyUpdateChunk_h
+#endif // ChunkedUpdateDrawingAreaProxy_h
diff --git a/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp b/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
index fcc4a75..55168bc 100644
--- a/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
+++ b/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DownloadProxy.h"
#include "DataReference.h"
diff --git a/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp b/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp
index fa16641..3d1f1aa 100644
--- a/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp
+++ b/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DrawingAreaProxy.h"
#include "WebPageProxy.h"
@@ -34,7 +35,6 @@ namespace WebKit {
DrawingAreaProxy::DrawingAreaProxy(DrawingAreaInfo::Type type, WebPageProxy* webPageProxy)
: m_info(type, nextIdentifier())
, m_webPageProxy(webPageProxy)
- , m_size(webPageProxy->viewSize())
{
}
@@ -48,12 +48,13 @@ DrawingAreaInfo::Identifier DrawingAreaProxy::nextIdentifier()
return ++nextID;
}
-void DrawingAreaProxy::setSize(const IntSize& size)
+void DrawingAreaProxy::setSize(const IntSize& size, const IntSize& scrollOffset)
{
- if (m_size == size)
+ if (m_size == size && scrollOffset.isZero())
return;
m_size = size;
+ m_scrollOffset += scrollOffset;
sizeDidChange();
}
diff --git a/Source/WebKit2/UIProcess/DrawingAreaProxy.h b/Source/WebKit2/UIProcess/DrawingAreaProxy.h
index 3eb24da..f802241 100644
--- a/Source/WebKit2/UIProcess/DrawingAreaProxy.h
+++ b/Source/WebKit2/UIProcess/DrawingAreaProxy.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,19 +32,24 @@
#if PLATFORM(QT)
class QPainter;
+#elif PLATFORM(GTK)
+typedef struct _cairo cairo_t;
#endif
namespace WebKit {
+class LayerTreeContext;
+class UpdateInfo;
class WebPageProxy;
-struct UpdateInfo;
-
+
#if PLATFORM(MAC)
typedef CGContextRef PlatformDrawingContext;
#elif PLATFORM(WIN)
typedef HDC PlatformDrawingContext;
#elif PLATFORM(QT)
typedef QPainter* PlatformDrawingContext;
+#elif PLATFORM(GTK)
+typedef cairo_t* PlatformDrawingContext;
#endif
class DrawingAreaProxy {
@@ -54,7 +60,7 @@ public:
virtual ~DrawingAreaProxy();
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
void didReceiveDrawingAreaProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
#endif
@@ -79,7 +85,7 @@ public:
const DrawingAreaInfo& info() const { return m_info; }
const WebCore::IntSize& size() const { return m_size; }
- void setSize(const WebCore::IntSize&);
+ void setSize(const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
protected:
explicit DrawingAreaProxy(DrawingAreaInfo::Type, WebPageProxy*);
@@ -88,12 +94,17 @@ protected:
WebPageProxy* m_webPageProxy;
WebCore::IntSize m_size;
+ WebCore::IntSize m_scrollOffset;
private:
// CoreIPC message handlers.
// FIXME: These should be pure virtual.
- virtual void update(const UpdateInfo&) { }
- virtual void didSetSize(const UpdateInfo&) { }
+ virtual void update(uint64_t sequenceNumber, const UpdateInfo&) { }
+ virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&, const LayerTreeContext&) { }
+#if USE(ACCELERATED_COMPOSITING)
+ virtual void enterAcceleratedCompositingMode(uint64_t sequenceNumber, const LayerTreeContext&) { }
+ virtual void exitAcceleratedCompositingMode(uint64_t sequenceNumber, const UpdateInfo&) { }
+#endif
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in b/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in
index ec065c7..a2b5e26 100644
--- a/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in
+++ b/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in
@@ -21,6 +21,11 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
messages -> DrawingAreaProxy {
- Update(WebKit::UpdateInfo updateInfo)
- DidSetSize(WebKit::UpdateInfo updateInfo)
+ Update(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo)
+ DidSetSize(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo, WebKit::LayerTreeContext context)
+
+#if USE(ACCELERATED_COMPOSITING)
+ EnterAcceleratedCompositingMode(uint64_t sequenceNumber, WebKit::LayerTreeContext context)
+ ExitAcceleratedCompositingMode(uint64_t sequenceNumber, WebKit::UpdateInfo updateInfo)
+#endif
}
diff --git a/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp b/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp
index 3207094..6a65841 100644
--- a/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp
+++ b/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp
@@ -23,15 +23,18 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DrawingAreaProxyImpl.h"
#include "DrawingAreaMessages.h"
+#include "DrawingAreaProxyMessages.h"
+#include "LayerTreeContext.h"
#include "Region.h"
#include "UpdateInfo.h"
#include "WebPageProxy.h"
#include "WebProcessProxy.h"
-#ifndef __APPLE__
+#if !PLATFORM(MAC) && !PLATFORM(WIN)
#error "This drawing area is not ready for use by other ports yet."
#endif
@@ -47,11 +50,15 @@ PassOwnPtr<DrawingAreaProxyImpl> DrawingAreaProxyImpl::create(WebPageProxy* webP
DrawingAreaProxyImpl::DrawingAreaProxyImpl(WebPageProxy* webPageProxy)
: DrawingAreaProxy(DrawingAreaInfo::Impl, webPageProxy)
, m_isWaitingForDidSetSize(false)
+ , m_lastDidSetSizeSequenceNumber(0)
{
}
DrawingAreaProxyImpl::~DrawingAreaProxyImpl()
{
+ // Make sure to exit accelerated compositing mode.
+ if (isInAcceleratedCompositingMode())
+ exitAcceleratedCompositingMode();
}
void DrawingAreaProxyImpl::paint(BackingStore::PlatformGraphicsContext context, const IntRect& rect, Region& unpaintedRegion)
@@ -61,6 +68,18 @@ void DrawingAreaProxyImpl::paint(BackingStore::PlatformGraphicsContext context,
if (!m_backingStore)
return;
+ ASSERT(!isInAcceleratedCompositingMode());
+
+ if (m_isWaitingForDidSetSize) {
+ // Wait for a DidSetSize message that contains the new bits before we paint
+ // what's currently in the backing store.
+ waitForAndDispatchDidSetSize();
+
+ // Dispatching DidSetSize could destroy our backing store or change the compositing mode.
+ if (!m_backingStore || isInAcceleratedCompositingMode())
+ return;
+ }
+
m_backingStore->paint(context, rect);
unpaintedRegion.subtract(IntRect(IntPoint(), m_backingStore->size()));
}
@@ -112,29 +131,71 @@ void DrawingAreaProxyImpl::detachCompositingContext()
ASSERT_NOT_REACHED();
}
-void DrawingAreaProxyImpl::update(const UpdateInfo& updateInfo)
+void DrawingAreaProxyImpl::update(uint64_t sequenceNumber, const UpdateInfo& updateInfo)
{
+ if (sequenceNumber < m_lastDidSetSizeSequenceNumber)
+ return;
+
// FIXME: Handle the case where the view is hidden.
incorporateUpdate(updateInfo);
m_webPageProxy->process()->send(Messages::DrawingArea::DidUpdate(), m_webPageProxy->pageID());
}
-void DrawingAreaProxyImpl::didSetSize(const UpdateInfo& updateInfo)
+void DrawingAreaProxyImpl::didSetSize(uint64_t sequenceNumber, const UpdateInfo& updateInfo, const LayerTreeContext& layerTreeContext)
{
+ ASSERT(sequenceNumber > m_lastDidSetSizeSequenceNumber);
+ m_lastDidSetSizeSequenceNumber = sequenceNumber;
+
ASSERT(m_isWaitingForDidSetSize);
m_isWaitingForDidSetSize = false;
if (m_size != updateInfo.viewSize)
sendSetSize();
+ if (layerTreeContext != m_layerTreeContext) {
+ if (!m_layerTreeContext.isEmpty()) {
+ exitAcceleratedCompositingMode();
+ ASSERT(m_layerTreeContext.isEmpty());
+ }
+
+ if (!layerTreeContext.isEmpty()) {
+ enterAcceleratedCompositingMode(layerTreeContext);
+ ASSERT(layerTreeContext == m_layerTreeContext);
+ }
+ }
+
+ if (isInAcceleratedCompositingMode()) {
+ ASSERT(!m_backingStore);
+ return;
+ }
+
m_backingStore = nullptr;
+ incorporateUpdate(updateInfo);
+}
+
+void DrawingAreaProxyImpl::enterAcceleratedCompositingMode(uint64_t sequenceNumber, const LayerTreeContext& layerTreeContext)
+{
+ if (sequenceNumber < m_lastDidSetSizeSequenceNumber)
+ return;
+
+ enterAcceleratedCompositingMode(layerTreeContext);
+}
+
+void DrawingAreaProxyImpl::exitAcceleratedCompositingMode(uint64_t sequenceNumber, const UpdateInfo& updateInfo)
+{
+ if (sequenceNumber < m_lastDidSetSizeSequenceNumber)
+ return;
+
+ exitAcceleratedCompositingMode();
incorporateUpdate(updateInfo);
}
void DrawingAreaProxyImpl::incorporateUpdate(const UpdateInfo& updateInfo)
{
+ ASSERT(!isInAcceleratedCompositingMode());
+
if (updateInfo.updateRectBounds.isEmpty())
return;
@@ -164,7 +225,45 @@ void DrawingAreaProxyImpl::sendSetSize()
return;
m_isWaitingForDidSetSize = true;
- m_webPageProxy->process()->send(Messages::DrawingArea::SetSize(m_size), m_webPageProxy->pageID());
+ m_webPageProxy->process()->send(Messages::DrawingArea::SetSize(m_size, m_scrollOffset), m_webPageProxy->pageID());
+ m_scrollOffset = IntSize();
+
+ if (!m_layerTreeContext.isEmpty()) {
+ // Wait for the DidSetSize message. Normally we don this in DrawingAreaProxyImpl::paint, but that
+ // function is never called when in accelerated compositing mode.
+ waitForAndDispatchDidSetSize();
+ }
+}
+
+void DrawingAreaProxyImpl::waitForAndDispatchDidSetSize()
+{
+ ASSERT(m_isWaitingForDidSetSize);
+
+ if (!m_webPageProxy->isValid())
+ return;
+ if (m_webPageProxy->process()->isLaunching())
+ return;
+
+ // The timeout, in seconds, we use when waiting for a DidSetSize message when we're asked to paint.
+ static const double didSetSizeTimeout = 0.5;
+ m_webPageProxy->process()->connection()->waitForAndDispatchImmediately<Messages::DrawingAreaProxy::DidSetSize>(m_webPageProxy->pageID(), didSetSizeTimeout);
+}
+
+void DrawingAreaProxyImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
+{
+ ASSERT(!isInAcceleratedCompositingMode());
+
+ m_backingStore = nullptr;
+ m_layerTreeContext = layerTreeContext;
+ m_webPageProxy->enterAcceleratedCompositingMode(layerTreeContext);
+}
+
+void DrawingAreaProxyImpl::exitAcceleratedCompositingMode()
+{
+ ASSERT(isInAcceleratedCompositingMode());
+
+ m_layerTreeContext = LayerTreeContext();
+ m_webPageProxy->exitAcceleratedCompositingMode();
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h b/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h
index bf7b878..f776b09 100644
--- a/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h
+++ b/Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h
@@ -28,6 +28,7 @@
#include "BackingStore.h"
#include "DrawingAreaProxy.h"
+#include "LayerTreeContext.h"
namespace WebKit {
@@ -54,16 +55,30 @@ private:
virtual void detachCompositingContext();
// CoreIPC message handlers
- virtual void update(const UpdateInfo&);
- virtual void didSetSize(const UpdateInfo&);
-
+ virtual void update(uint64_t sequenceNumber, const UpdateInfo&);
+ virtual void didSetSize(uint64_t sequenceNumber, const UpdateInfo&, const LayerTreeContext&);
+ virtual void enterAcceleratedCompositingMode(uint64_t sequenceNumber, const LayerTreeContext&);
+ virtual void exitAcceleratedCompositingMode(uint64_t sequenceNumber, const UpdateInfo&);
+
void incorporateUpdate(const UpdateInfo&);
void sendSetSize();
+ void waitForAndDispatchDidSetSize();
+
+ void enterAcceleratedCompositingMode(const LayerTreeContext&);
+ void exitAcceleratedCompositingMode();
+ bool isInAcceleratedCompositingMode() const { return !m_layerTreeContext.isEmpty(); }
+
+ // The current layer tree context.
+ LayerTreeContext m_layerTreeContext;
+
// Whether we've sent a SetSize message and are now waiting for a DidSetSize message.
// Used to throttle SetSize messages so we don't send them faster than the Web process can handle.
bool m_isWaitingForDidSetSize;
+ // The sequence number of the last DidSetSize message
+ uint64_t m_lastDidSetSizeSequenceNumber;
+
OwnPtr<BackingStore> m_backingStore;
};
diff --git a/Source/WebKit2/UIProcess/FindIndicator.cpp b/Source/WebKit2/UIProcess/FindIndicator.cpp
index f1357e7..d6ac461 100644
--- a/Source/WebKit2/UIProcess/FindIndicator.cpp
+++ b/Source/WebKit2/UIProcess/FindIndicator.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "FindIndicator.h"
#include "ShareableBitmap.h"
@@ -76,18 +77,18 @@ static const int gradientLightAlpha = 255;
namespace WebKit {
-PassRefPtr<FindIndicator> FindIndicator::create(const FloatRect& selectionRect, const Vector<FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle)
+PassRefPtr<FindIndicator> FindIndicator::create(const FloatRect& selectionRectInWindowCoordinates, const Vector<FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle)
{
- RefPtr<ShareableBitmap> contentImage = ShareableBitmap::create(enclosingIntRect(selectionRect).size(), contentImageHandle);
+ RefPtr<ShareableBitmap> contentImage = ShareableBitmap::create(enclosingIntRect(selectionRectInWindowCoordinates).size(), contentImageHandle);
if (!contentImage)
return 0;
- return adoptRef(new FindIndicator(selectionRect, textRects, contentImage.release()));
+ return adoptRef(new FindIndicator(selectionRectInWindowCoordinates, textRectsInSelectionRectCoordinates, contentImage.release()));
}
-FindIndicator::FindIndicator(const WebCore::FloatRect& selectionRect, const Vector<WebCore::FloatRect>& textRects, PassRefPtr<ShareableBitmap> contentImage)
- : m_selectionRect(selectionRect)
- , m_textRects(textRects)
+FindIndicator::FindIndicator(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, PassRefPtr<ShareableBitmap> contentImage)
+ : m_selectionRectInWindowCoordinates(selectionRectInWindowCoordinates)
+ , m_textRectsInSelectionRectCoordinates(textRectsInSelectionRectCoordinates)
, m_contentImage(contentImage)
{
}
@@ -107,9 +108,9 @@ static FloatRect inflateRect(const FloatRect& rect, float inflateX, float inflat
FloatRect FindIndicator::frameRect() const
{
- return FloatRect(m_selectionRect.x() - leftBorderThickness, m_selectionRect.y() - topBorderThickness,
- m_selectionRect.width() + rightBorderThickness + leftBorderThickness,
- m_selectionRect.height() + topBorderThickness + bottomBorderThickness);
+ return FloatRect(m_selectionRectInWindowCoordinates.x() - leftBorderThickness, m_selectionRectInWindowCoordinates.y() - topBorderThickness,
+ m_selectionRectInWindowCoordinates.width() + rightBorderThickness + leftBorderThickness,
+ m_selectionRectInWindowCoordinates.height() + topBorderThickness + bottomBorderThickness);
}
static Color lightBorderColor()
@@ -142,8 +143,8 @@ static Path pathWithRoundedRect(const FloatRect& pathRect, float radius)
void FindIndicator::draw(GraphicsContext& graphicsContext, const IntRect& dirtyRect)
{
- for (size_t i = 0; i < m_textRects.size(); ++i) {
- FloatRect textRect = m_textRects[i];
+ for (size_t i = 0; i < m_textRectsInSelectionRectCoordinates.size(); ++i) {
+ FloatRect textRect = m_textRectsInSelectionRectCoordinates[i];
textRect.move(leftBorderThickness, topBorderThickness);
graphicsContext.save();
@@ -156,7 +157,7 @@ void FindIndicator::draw(GraphicsContext& graphicsContext, const IntRect& dirtyR
graphicsContext.save();
FloatRect innerPathRect = inflateRect(textRect, horizontalPaddingInsideLightBorder, verticalPaddingInsideLightBorder);
graphicsContext.clip(pathWithRoundedRect(innerPathRect, cornerRadius));
- RefPtr<Gradient> gradient = Gradient::create(FloatPoint(innerPathRect.x(), innerPathRect.y()), FloatPoint(innerPathRect.x(), innerPathRect.bottom()));
+ RefPtr<Gradient> gradient = Gradient::create(FloatPoint(innerPathRect.x(), innerPathRect.y()), FloatPoint(innerPathRect.x(), innerPathRect.maxY()));
gradient->addColorStop(0, gradientLightColor());
gradient->addColorStop(1, gradientDarkColor());
graphicsContext.setFillGradient(gradient);
diff --git a/Source/WebKit2/UIProcess/FindIndicator.h b/Source/WebKit2/UIProcess/FindIndicator.h
index 997d537..69088ce 100644
--- a/Source/WebKit2/UIProcess/FindIndicator.h
+++ b/Source/WebKit2/UIProcess/FindIndicator.h
@@ -42,12 +42,13 @@ class ShareableBitmap;
class FindIndicator : public RefCounted<FindIndicator> {
public:
- static PassRefPtr<FindIndicator> create(const WebCore::FloatRect& selectionRect, const Vector<WebCore::FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle);
+ static PassRefPtr<FindIndicator> create(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle);
~FindIndicator();
+ WebCore::FloatRect selectionRectInWindowCoordinates() const { return m_selectionRectInWindowCoordinates; }
WebCore::FloatRect frameRect() const;
- const Vector<WebCore::FloatRect>& textRects() const { return m_textRects; }
+ const Vector<WebCore::FloatRect>& textRects() const { return m_textRectsInSelectionRectCoordinates; }
ShareableBitmap* contentImage() const { return m_contentImage.get(); }
@@ -56,8 +57,8 @@ public:
private:
FindIndicator(const WebCore::FloatRect& selectionRect, const Vector<WebCore::FloatRect>& textRects, PassRefPtr<ShareableBitmap> contentImage);
- WebCore::FloatRect m_selectionRect;
- Vector<WebCore::FloatRect> m_textRects;
+ WebCore::FloatRect m_selectionRectInWindowCoordinates;
+ Vector<WebCore::FloatRect> m_textRectsInSelectionRectCoordinates;
RefPtr<ShareableBitmap> m_contentImage;
};
diff --git a/Source/WebKit2/UIProcess/GenericCallback.h b/Source/WebKit2/UIProcess/GenericCallback.h
index b72314a..c34414a 100644
--- a/Source/WebKit2/UIProcess/GenericCallback.h
+++ b/Source/WebKit2/UIProcess/GenericCallback.h
@@ -35,6 +35,115 @@
namespace WebKit {
+class VoidCallback : public RefCounted<VoidCallback> {
+public:
+ typedef void (*CallbackFunction)(WKErrorRef, void*);
+
+ static PassRefPtr<VoidCallback> create(void* context, CallbackFunction callback)
+ {
+ return adoptRef(new VoidCallback(context, callback));
+ }
+
+ VoidCallback()
+ {
+ ASSERT(!m_callback);
+ }
+
+ void performCallback()
+ {
+ ASSERT(m_callback);
+
+ m_callback(0, m_context);
+
+ m_callback = 0;
+ }
+
+ void invalidate()
+ {
+ ASSERT(m_callback);
+
+ RefPtr<WebError> error = WebError::create();
+ m_callback(toAPI(error.get()), m_context);
+
+ m_callback = 0;
+ }
+
+ uint64_t callbackID() const { return m_callbackID; }
+
+private:
+ static uint64_t generateCallbackID()
+ {
+ static uint64_t uniqueCallbackID = 1;
+ return uniqueCallbackID++;
+ }
+
+ VoidCallback(void* context, CallbackFunction callback)
+ : m_context(context)
+ , m_callback(callback)
+ , m_callbackID(generateCallbackID())
+ {
+ }
+
+ void* m_context;
+ CallbackFunction m_callback;
+ uint64_t m_callbackID;
+};
+
+// FIXME: Make a version of GenericCallback with two arguments, and define ComputedPagesCallback as a specialization.
+class ComputedPagesCallback : public RefCounted<ComputedPagesCallback> {
+public:
+ typedef void (*CallbackFunction)(const Vector<WebCore::IntRect>&, double, WKErrorRef, void*);
+
+ static PassRefPtr<ComputedPagesCallback> create(void* context, CallbackFunction callback)
+ {
+ return adoptRef(new ComputedPagesCallback(context, callback));
+ }
+
+ ~ComputedPagesCallback()
+ {
+ ASSERT(!m_callback);
+ }
+
+ void performCallbackWithReturnValue(const Vector<WebCore::IntRect>& returnValue1, double returnValue2)
+ {
+ ASSERT(m_callback);
+
+ m_callback(returnValue1, returnValue2, 0, m_context);
+
+ m_callback = 0;
+ }
+
+ void invalidate()
+ {
+ ASSERT(m_callback);
+
+ RefPtr<WebError> error = WebError::create();
+ m_callback(Vector<WebCore::IntRect>(), 0, toAPI(error.get()), m_context);
+
+ m_callback = 0;
+ }
+
+ uint64_t callbackID() const { return m_callbackID; }
+
+private:
+ static uint64_t generateCallbackID()
+ {
+ static uint64_t uniqueCallbackID = 1;
+ return uniqueCallbackID++;
+ }
+
+ ComputedPagesCallback(void* context, CallbackFunction callback)
+ : m_context(context)
+ , m_callback(callback)
+ , m_callbackID(generateCallbackID())
+ {
+ }
+
+ void* m_context;
+ CallbackFunction m_callback;
+ uint64_t m_callbackID;
+};
+
template<typename APIReturnValueType, typename InternalReturnValueType = typename APITypeInfo<APIReturnValueType>::ImplType>
class GenericCallback : public RefCounted<GenericCallback<APIReturnValueType, InternalReturnValueType> > {
public:
diff --git a/Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp b/Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp
index 285e329..38bbd6a 100644
--- a/Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp
+++ b/Source/WebKit2/UIProcess/GeolocationPermissionRequestManagerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "GeolocationPermissionRequestManagerProxy.h"
#include "WebPageMessages.h"
diff --git a/Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp b/Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp
index 9766ad2..4cd1736 100644
--- a/Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp
+++ b/Source/WebKit2/UIProcess/GeolocationPermissionRequestProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "GeolocationPermissionRequestProxy.h"
#include "GeolocationPermissionRequestManagerProxy.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp b/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp
index 507edfa..15a7450 100644
--- a/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ProcessLauncher.h"
#include "WorkQueue.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.h b/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.h
index 31efd4d..8a1cd01 100644
--- a/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.h
+++ b/Source/WebKit2/UIProcess/Launcher/ProcessLauncher.h
@@ -56,6 +56,7 @@ public:
#if PLATFORM(MAC)
static const cpu_type_t MatchCurrentArchitecture = 0;
cpu_type_t architecture;
+ bool executableHeap;
#endif
};
@@ -72,11 +73,6 @@ public:
static bool getProcessTypeFromString(const char*, ProcessType&);
-#if PLATFORM(QT)
- friend class ProcessLauncherHelper;
- static QLocalSocket* takePendingConnection();
-#endif
-
private:
ProcessLauncher(Client*, const LaunchOptions& launchOptions);
diff --git a/Source/WebKit2/UIProcess/Launcher/ThreadLauncher.cpp b/Source/WebKit2/UIProcess/Launcher/ThreadLauncher.cpp
index 69e4893..d331749 100644
--- a/Source/WebKit2/UIProcess/Launcher/ThreadLauncher.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/ThreadLauncher.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ThreadLauncher.h"
#include "RunLoop.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp b/Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
index 2565a48..04d8a03 100644
--- a/Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ProcessLauncher.h"
#include "Connection.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp b/Source/WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp
index 2841e0a..b5fda40 100644
--- a/Source/WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ThreadLauncher.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm b/Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm
index a725d6b..92f5ad3 100644
--- a/Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm
+++ b/Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm
@@ -23,24 +23,25 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "ProcessLauncher.h"
-
-#include "RunLoop.h"
-#include "WebProcess.h"
-#include "WebKitSystemInterface.h"
-#include <crt_externs.h>
-#include <mach-o/dyld.h>
-#include <mach/machine.h>
-#include <runtime/InitializeThreading.h>
-#include <servers/bootstrap.h>
-#include <spawn.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RetainPtr.h>
-#include <wtf/Threading.h>
-#include <wtf/text/CString.h>
-#include <wtf/text/WTFString.h>
+#import "config.h"
+#import "ProcessLauncher.h"
+
+#import "RunLoop.h"
+#import "WebProcess.h"
+#import "WebKitSystemInterface.h"
+#import <crt_externs.h>
+#import <mach-o/dyld.h>
+#import <mach/machine.h>
+#import <runtime/InitializeThreading.h>
+#import <servers/bootstrap.h>
+#import <spawn.h>
+#import <sys/param.h>
+#import <sys/stat.h>
+#import <wtf/PassRefPtr.h>
+#import <wtf/RetainPtr.h>
+#import <wtf/Threading.h>
+#import <wtf/text/CString.h>
+#import <wtf/text/WTFString.h>
using namespace WebCore;
@@ -230,6 +231,12 @@ void ProcessLauncher::launchProcess()
// Start suspended so we can set up the termination notification handler.
flags |= POSIX_SPAWN_START_SUSPENDED;
+#ifndef BUILDING_ON_SNOW_LEOPARD
+ static const int allowExecutableHeapFlag = 0x2000;
+ if (m_launchOptions.executableHeap)
+ flags |= allowExecutableHeapFlag;
+#endif
+
posix_spawnattr_setflags(&attr, flags);
pid_t processIdentifier;
diff --git a/Source/WebKit2/UIProcess/Launcher/mac/ThreadLauncherMac.mm b/Source/WebKit2/UIProcess/Launcher/mac/ThreadLauncherMac.mm
index 8aac275..c15073b 100644
--- a/Source/WebKit2/UIProcess/Launcher/mac/ThreadLauncherMac.mm
+++ b/Source/WebKit2/UIProcess/Launcher/mac/ThreadLauncherMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "ThreadLauncher.h"
+#import "config.h"
+#import "ThreadLauncher.h"
-#include "RunLoop.h"
-#include "WebProcess.h"
-#include "WebSystemInterface.h"
-#include <runtime/InitializeThreading.h>
-#include <wtf/Threading.h>
+#import "RunLoop.h"
+#import "WebProcess.h"
+#import "WebSystemInterface.h"
+#import <runtime/InitializeThreading.h>
+#import <wtf/Threading.h>
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp b/Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp
index 7dff894..85c3651 100644
--- a/Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp
@@ -24,20 +24,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ProcessLauncher.h"
#include "Connection.h"
-#include "CleanupHandler.h"
#include "NotImplemented.h"
#include "RunLoop.h"
#include "WebProcess.h"
-#include <runtime/InitializeThreading.h>
-#include <string>
-#include <wtf/HashSet.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/Threading.h>
-#include <wtf/text/WTFString.h>
-
#include <QApplication>
#include <QDebug>
#include <QFile>
@@ -45,52 +38,27 @@
#include <QMetaType>
#include <QProcess>
#include <QString>
-
#include <QtCore/qglobal.h>
-
+#include <errno.h>
+#include <fcntl.h>
+#include <runtime/InitializeThreading.h>
+#include <string>
#include <sys/resource.h>
+#include <sys/socket.h>
#include <unistd.h>
+#include <wtf/HashSet.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/Threading.h>
+#include <wtf/text/WTFString.h>
+#if defined Q_OS_LINUX
+#include <sys/prctl.h>
+#include <signal.h>
+#endif
using namespace WebCore;
namespace WebKit {
-class ProcessLauncherHelper : public QObject {
- Q_OBJECT
-public:
- ~ProcessLauncherHelper();
- void launch(WebKit::ProcessLauncher*);
- QLocalSocket* takePendingConnection();
- static ProcessLauncherHelper* instance();
-
- const QString serverName() const { return m_server.serverName(); }
-
-private:
- ProcessLauncherHelper();
- QLocalServer m_server;
- QList<WorkItem*> m_items;
-
- Q_SLOT void newConnection();
-};
-
-Q_GLOBAL_STATIC(WTF::HashSet<QProcess*>, processes);
-
-static void cleanupAtExit()
-{
- // Terminate our web process(es).
- WTF::HashSet<QProcess*>::const_iterator end = processes()->end();
- for (WTF::HashSet<QProcess*>::const_iterator it = processes()->begin(); it != end; ++it) {
- QProcess* process = *it;
- process->disconnect(process);
- process->terminate();
- if (!process->waitForFinished(200))
- process->kill();
- }
-
- // Do not leave the socket file behind.
- QLocalServer::removeServer(ProcessLauncherHelper::instance()->serverName());
-}
-
class QtWebProcess : public QProcess
{
Q_OBJECT
@@ -98,32 +66,20 @@ public:
QtWebProcess(QObject* parent = 0)
: QProcess(parent)
{
- static bool isRegistered = false;
- if (!isRegistered) {
- qRegisterMetaType<QProcess::ProcessState>("QProcess::ProcessState");
- isRegistered = true;
- }
-
- connect(this, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(processStateChanged(QProcess::ProcessState)));
}
-private slots:
- void processStateChanged(QProcess::ProcessState state);
+protected:
+ virtual void setupChildProcess();
};
-void QtWebProcess::processStateChanged(QProcess::ProcessState state)
+void QtWebProcess::setupChildProcess()
{
- QProcess* process = qobject_cast<QProcess*>(sender());
- if (!process)
- return;
-
- if (state == QProcess::Running)
- processes()->add(process);
- else if (state == QProcess::NotRunning)
- processes()->remove(process);
+#if defined Q_OS_LINUX
+ prctl(PR_SET_PDEATHSIG, SIGKILL);
+#endif
}
-void ProcessLauncherHelper::launch(WebKit::ProcessLauncher* launcher)
+void ProcessLauncher::launchProcess()
{
QString applicationPath = "%1 %2";
@@ -133,12 +89,38 @@ void ProcessLauncherHelper::launch(WebKit::ProcessLauncher* launcher)
applicationPath = applicationPath.arg("QtWebProcess");
}
- QString program(applicationPath.arg(m_server.serverName()));
+ int sockets[2];
+ if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sockets) == -1) {
+ qDebug() << "Creation of socket failed with errno:" << errno;
+ ASSERT_NOT_REACHED();
+ return;
+ }
+
+ // Don't expose the ui socket to the web process
+ while (fcntl(sockets[1], F_SETFD, FD_CLOEXEC) == -1) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ while (close(sockets[0]) == -1 && errno == EINTR) { }
+ while (close(sockets[1]) == -1 && errno == EINTR) { }
+ return;
+ }
+ }
+
+ QString program(applicationPath.arg(sockets[0]));
QProcess* webProcess = new QtWebProcess();
webProcess->setProcessChannelMode(QProcess::ForwardedChannels);
webProcess->start(program);
+ // Don't expose the web socket to possible future web processes
+ while (fcntl(sockets[0], F_SETFD, FD_CLOEXEC) == -1) {
+ if (errno != EINTR) {
+ ASSERT_NOT_REACHED();
+ delete webProcess;
+ return;
+ }
+ }
+
if (!webProcess->waitForStarted()) {
qDebug() << "Failed to start" << program;
ASSERT_NOT_REACHED();
@@ -148,55 +130,7 @@ void ProcessLauncherHelper::launch(WebKit::ProcessLauncher* launcher)
setpriority(PRIO_PROCESS, webProcess->pid(), 10);
- m_items.append(WorkItem::create(launcher, &WebKit::ProcessLauncher::didFinishLaunchingProcess, webProcess, m_server.serverName()).leakPtr());
-}
-
-QLocalSocket* ProcessLauncherHelper::takePendingConnection()
-{
- return m_server.nextPendingConnection();
-}
-
-ProcessLauncherHelper::~ProcessLauncherHelper()
-{
- m_server.close();
-}
-
-ProcessLauncherHelper::ProcessLauncherHelper()
-{
- srandom(time(0));
- if (!m_server.listen("QtWebKit" + QString::number(random()))) {
- qDebug() << "Failed to create server socket.";
- ASSERT_NOT_REACHED();
- }
- connect(&m_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
-}
-
-ProcessLauncherHelper* ProcessLauncherHelper::instance()
-{
- static ProcessLauncherHelper* result = 0;
- if (!result) {
- result = new ProcessLauncherHelper();
-
- // The purpose of the following line is to ensure that our static is initialized before the exit handler is installed.
- processes()->clear();
-
- atexit(cleanupAtExit);
- }
- return result;
-}
-
-void ProcessLauncherHelper::newConnection()
-{
- ASSERT(!m_items.isEmpty());
-
- m_items[0]->execute();
- delete m_items[0];
- m_items.pop_front();
-}
-
-void ProcessLauncher::launchProcess()
-{
- ProcessLauncherHelper::instance()->launch(this);
+ RunLoop::main()->scheduleWork(WorkItem::create(this, &WebKit::ProcessLauncher::didFinishLaunchingProcess, webProcess, sockets[1]));
}
void ProcessLauncher::terminateProcess()
@@ -208,14 +142,9 @@ void ProcessLauncher::terminateProcess()
m_processIdentifier->terminate();
}
-QLocalSocket* ProcessLauncher::takePendingConnection()
-{
- return ProcessLauncherHelper::instance()->takePendingConnection();
-}
-
void ProcessLauncher::platformInvalidate()
{
- notImplemented();
+
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp b/Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp
index 471a424..313091e 100644
--- a/Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ThreadLauncher.h"
#include "RunLoop.h"
@@ -54,7 +55,7 @@ static void* webThreadBody(void* /* context */)
// FIXME: We do not support threaded mode for now.
- WebProcess::shared().initialize("foo", RunLoop::current());
+ WebProcess::shared().initialize(-1, RunLoop::current());
RunLoop::run();
return 0;
@@ -70,8 +71,7 @@ CoreIPC::Connection::Identifier ThreadLauncher::createWebThread()
return 0;
}
- QString serverIdentifier = QString::number(connectionIdentifier);
- return serverIdentifier;
+ return connectionIdentifier;
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/Launcher/win/ProcessLauncherWin.cpp b/Source/WebKit2/UIProcess/Launcher/win/ProcessLauncherWin.cpp
index 7165a18..8981e80 100644
--- a/Source/WebKit2/UIProcess/Launcher/win/ProcessLauncherWin.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/win/ProcessLauncherWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ProcessLauncher.h"
#include "Connection.h"
diff --git a/Source/WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp b/Source/WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp
index b8b2f64..2094fc6 100644
--- a/Source/WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp
+++ b/Source/WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ThreadLauncher.h"
#include "RunLoop.h"
diff --git a/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.cpp b/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.cpp
index ffa91de..fbbff43 100644
--- a/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.cpp
+++ b/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if USE(ACCELERATED_COMPOSITING)
-
+#include "config.h"
#include "LayerBackedDrawingAreaProxy.h"
+#if USE(ACCELERATED_COMPOSITING)
+
#include "DrawingAreaMessageKinds.h"
#include "DrawingAreaProxyMessageKinds.h"
#include "MessageID.h"
@@ -55,7 +56,7 @@ LayerBackedDrawingAreaProxy::~LayerBackedDrawingAreaProxy()
{
}
-#if !PLATFORM(WIN)
+#if !PLATFORM(WIN) && !PLATFORM(MAC)
bool LayerBackedDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingContext context)
{
return true;
@@ -80,8 +81,7 @@ void LayerBackedDrawingAreaProxy::sizeDidChange()
m_isWaitingForDidSetFrameNotification = true;
- page->process()->responsivenessTimer()->start();
- page->process()->send(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(info().identifier, m_size));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(info().identifier, m_size));
}
#if !PLATFORM(MAC) && !PLATFORM(WIN)
@@ -103,12 +103,12 @@ void LayerBackedDrawingAreaProxy::setPageIsVisible(bool isVisible)
if (!m_isVisible) {
// Tell the web process that it doesn't need to paint anything for now.
- page->process()->send(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In(info().identifier));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In(info().identifier));
return;
}
// The page is now visible.
- page->process()->send(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In(info().identifier));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In(info().identifier));
// FIXME: We should request a full repaint here if needed.
}
@@ -118,16 +118,13 @@ void LayerBackedDrawingAreaProxy::didSetSize(const IntSize& size)
m_isWaitingForDidSetFrameNotification = false;
if (size != m_lastSetViewSize)
- setSize(m_lastSetViewSize);
-
- WebPageProxy* page = this->page();
- page->process()->responsivenessTimer()->stop();
+ setSize(m_lastSetViewSize, IntSize());
}
void LayerBackedDrawingAreaProxy::update()
{
WebPageProxy* page = this->page();
- page->process()->send(DrawingAreaLegacyMessage::DidUpdate, page->pageID(), CoreIPC::In(info().identifier));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::DidUpdate, page->pageID(), CoreIPC::In(info().identifier));
}
void LayerBackedDrawingAreaProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
diff --git a/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.h b/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.h
index bbaa643..31aca5c 100644
--- a/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.h
+++ b/Source/WebKit2/UIProcess/LayerBackedDrawingAreaProxy.h
@@ -33,13 +33,9 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class CALayer;
-@class WKView;
-#else
-class CALayer;
-class WKView;
-#endif
+
+OBJC_CLASS CALayer;
+OBJC_CLASS WKView;
#endif
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/PageClient.h b/Source/WebKit2/UIProcess/PageClient.h
index e483aef..4eb1860 100644
--- a/Source/WebKit2/UIProcess/PageClient.h
+++ b/Source/WebKit2/UIProcess/PageClient.h
@@ -79,6 +79,7 @@ public:
virtual void processDidCrash() = 0;
virtual void didRelaunchProcess() = 0;
+ virtual void pageClosed() = 0;
virtual void takeFocus(bool direction) = 0;
virtual void toolTipChanged(const String&, const String&) = 0;
@@ -98,7 +99,7 @@ public:
virtual void clearAllEditCommands() = 0;
virtual void setEditCommandState(const String& commandName, bool isEnabled, int state) = 0;
#if PLATFORM(MAC)
- virtual void accessibilityChildTokenReceived(const CoreIPC::DataReference&) = 0;
+ virtual void accessibilityWebProcessTokenReceived(const CoreIPC::DataReference&) = 0;
virtual void interceptKeyEvent(const NativeWebKeyboardEvent&, Vector<WebCore::KeypressCommand>& commandName, uint32_t selectionStart, uint32_t selectionEnd, Vector<WebCore::CompositionUnderline>& underlines) = 0;
virtual void setDragImage(const WebCore::IntPoint& clientPosition, const WebCore::IntSize& imageSize, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag) = 0;
#endif
@@ -108,7 +109,7 @@ public:
virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) = 0;
virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) = 0;
- virtual void didNotHandleKeyEvent(const NativeWebKeyboardEvent&) = 0;
+ virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) = 0;
virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) = 0;
@@ -116,6 +117,9 @@ public:
virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut) = 0;
#if USE(ACCELERATED_COMPOSITING)
+ virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
+ virtual void exitAcceleratedCompositingMode() = 0;
+
virtual void pageDidEnterAcceleratedCompositing() = 0;
virtual void pageDidLeaveAcceleratedCompositing() = 0;
#endif
@@ -126,10 +130,13 @@ public:
#if PLATFORM(MAC)
virtual void setComplexTextInputEnabled(uint64_t pluginComplexTextInputIdentifier, bool complexTextInputEnabled) = 0;
+ virtual void setAutodisplay(bool) = 0;
virtual CGContextRef containingWindowGraphicsContext() = 0;
#endif
+ virtual void didChangeScrollbarsForMainFrame() const = 0;
+
// Custom representations.
virtual void didCommitLoadForMainFrame(bool useCustomRepresentation) = 0;
virtual void didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference&) = 0;
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
index f4fb5ad..b3d9183 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PluginInfoStore.h"
#include <WebCore/KURL.h>
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp b/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
index ff44e25..bca9689 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcessManager.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "PluginInfoStore.h"
#include "PluginProcessProxy.h"
#include "WebContext.h"
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
index 093a31f..4b3b3c0 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcessProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "MachPort.h"
#include "PluginProcessCreationParameters.h"
#include "PluginProcessManager.h"
@@ -51,6 +52,9 @@ PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManage
launchOptions.processType = ProcessLauncher::PluginProcess;
#if PLATFORM(MAC)
launchOptions.architecture = pluginInfo.pluginArchitecture;
+
+ // FIXME: This shouldn't be true for all plug-ins.
+ launchOptions.executableHeap = true;
#endif
m_processLauncher = ProcessLauncher::create(this, launchOptions);
@@ -71,8 +75,9 @@ void PluginProcessProxy::createWebProcessConnection(WebProcessProxy* webProcessP
return;
}
- // Ask the plug-in process to create a connection.
- m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0);
+ // Ask the plug-in process to create a connection. Since the plug-in can be waiting for a synchronous reply
+ // we need to make sure that this message is always processed, even when the plug-in is waiting for a synchronus reply.
+ m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply);
}
void PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch()
@@ -126,7 +131,7 @@ void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connectio
platformInitializePluginProcess(parameters);
// Initialize the plug-in host process.
- m_connection->send(Messages::PluginProcess::Initialize(parameters), 0);
+ m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0);
// Send all our pending requests.
for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
diff --git a/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp b/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp
index 8a6e86c..f06f0e5 100644
--- a/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp
@@ -24,7 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-
+#include "config.h"
#include "PluginInfoStore.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm b/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm
index b787101..fb4329e 100644
--- a/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm
+++ b/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "PluginInfoStore.h"
-
-#include "NetscapePluginModule.h"
-#include "WebKitSystemInterface.h"
-#include <WebCore/WebCoreNSStringExtras.h>
-#include <wtf/HashSet.h>
-#include <wtf/RetainPtr.h>
+#import "config.h"
+#import "PluginInfoStore.h"
+
+#import "NetscapePluginModule.h"
+#import "WebKitSystemInterface.h"
+#import <WebCore/WebCoreNSStringExtras.h>
+#import <wtf/HashSet.h>
+#import <wtf/RetainPtr.h>
using namespace WebCore;
diff --git a/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm b/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm
index eaf8aef..2adc473 100644
--- a/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm
+++ b/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessProxyMac.mm
@@ -23,12 +23,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
+#import "config.h"
+#import "PluginProcessProxy.h"
-#include "PluginProcessProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
-#include "PluginProcessCreationParameters.h"
-#include "WebKitSystemInterface.h"
+#import "PluginProcessCreationParameters.h"
+#import "WebKitSystemInterface.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp b/Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp
index fc77663..4d76467 100644
--- a/Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp
@@ -25,6 +25,7 @@
// Note: this file is only for UNIX. On other platforms we can reuse the native implementation.
+#include "config.h"
#include "PluginInfoStore.h"
#include "NetscapePluginModule.h"
diff --git a/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp b/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
index 1e0c251..2138131 100644
--- a/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PluginInfoStore.h"
#include "NetscapePluginModule.h"
diff --git a/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp b/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp
index da54a7e..903c17a 100644
--- a/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp
+++ b/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ResponsivenessTimer.h"
#include "WorkItem.h"
diff --git a/Source/WebKit2/UIProcess/TextChecker.h b/Source/WebKit2/UIProcess/TextChecker.h
index 7415da3..fc347fe 100644
--- a/Source/WebKit2/UIProcess/TextChecker.h
+++ b/Source/WebKit2/UIProcess/TextChecker.h
@@ -30,7 +30,7 @@
namespace WebKit {
-class TextCheckerState;
+struct TextCheckerState;
class TextChecker {
public:
diff --git a/Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp b/Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp
index b687192..3b3334f 100644
--- a/Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp
+++ b/Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TiledDrawingAreaProxy.h"
#if ENABLE(TILED_BACKING_STORE)
@@ -82,7 +83,7 @@ void TiledDrawingAreaProxy::sizeDidChange()
m_isWaitingForDidSetFrameNotification = true;
page->process()->responsivenessTimer()->start();
- page->process()->send(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(m_size));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(m_size));
}
void TiledDrawingAreaProxy::setPageIsVisible(bool isVisible)
@@ -98,12 +99,12 @@ void TiledDrawingAreaProxy::setPageIsVisible(bool isVisible)
if (!m_isVisible) {
// Tell the web process that it doesn't need to paint anything for now.
- page->process()->send(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In());
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In());
return;
}
// The page is now visible.
- page->process()->send(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In());
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In());
// FIXME: We should request a full repaint here if needed.
}
@@ -114,7 +115,7 @@ void TiledDrawingAreaProxy::didSetSize(const IntSize& viewSize)
m_isWaitingForDidSetFrameNotification = false;
if (viewSize != m_lastSetViewSize)
- setSize(m_lastSetViewSize);
+ setSize(m_lastSetViewSize, IntSize());
WebPageProxy* page = this->page();
page->process()->responsivenessTimer()->stop();
@@ -177,7 +178,7 @@ void TiledDrawingAreaProxy::didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC:
void TiledDrawingAreaProxy::requestTileUpdate(int tileID, const IntRect& dirtyRect)
{
- page()->process()->connection()->send(DrawingAreaLegacyMessage::RequestTileUpdate, page()->pageID(), CoreIPC::In(tileID, dirtyRect, contentsScale()));
+ page()->process()->connection()->deprecatedSend(DrawingAreaLegacyMessage::RequestTileUpdate, page()->pageID(), CoreIPC::In(tileID, dirtyRect, contentsScale()));
}
void TiledDrawingAreaProxy::waitUntilUpdatesComplete()
@@ -188,7 +189,7 @@ void TiledDrawingAreaProxy::waitUntilUpdatesComplete()
float scale;
unsigned pendingUpdateCount;
static const double tileUpdateTimeout = 10.0;
- OwnPtr<CoreIPC::ArgumentDecoder> arguments = page()->process()->connection()->waitFor(DrawingAreaProxyLegacyMessage::TileUpdated, page()->pageID(), tileUpdateTimeout);
+ OwnPtr<CoreIPC::ArgumentDecoder> arguments = page()->process()->connection()->deprecatedWaitFor(DrawingAreaProxyLegacyMessage::TileUpdated, page()->pageID(), tileUpdateTimeout);
if (!arguments)
break;
if (!arguments->decode(CoreIPC::Out(tileID, updateChunk, scale, pendingUpdateCount)))
@@ -232,22 +233,22 @@ void TiledDrawingAreaProxy::setKeepAndCoverAreaMultipliers(const FloatSize& keep
void TiledDrawingAreaProxy::takeSnapshot(const IntSize& size, const IntRect& contentsRect)
{
WebPageProxy* page = this->page();
- page->process()->send(DrawingAreaLegacyMessage::TakeSnapshot, page->pageID(), CoreIPC::Out(size, contentsRect));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::TakeSnapshot, page->pageID(), CoreIPC::Out(size, contentsRect));
}
void TiledDrawingAreaProxy::invalidate(const IntRect& contentsDirtyRect)
{
IntRect dirtyRect(mapFromContents(contentsDirtyRect));
- TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.topLeft());
- TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(dirtyRect.bottomRight());
+ TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.location());
+ TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(dirtyRect.maxX(), dirtyRect.maxY()));
IntRect coverRect = calculateCoverRect(m_previousVisibleRect);
Vector<TiledDrawingAreaTile::Coordinate> tilesToRemove;
- for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
- for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
+ for (unsigned yCoordinate = topLeft.y(); yCoordinate < bottomRight.y(); ++yCoordinate) {
+ for (unsigned xCoordinate = topLeft.x(); xCoordinate < bottomRight.x(); ++xCoordinate) {
RefPtr<TiledDrawingAreaTile> currentTile = tileAt(TiledDrawingAreaTile::Coordinate(xCoordinate, yCoordinate));
if (!currentTile)
continue;
@@ -337,11 +338,11 @@ bool TiledDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingContext co
IntRect dirtyRect = mapFromContents(rect);
- TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.topLeft());
- TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(dirtyRect.bottomRight());
+ TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.location());
+ TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(dirtyRect.maxX(), dirtyRect.maxY()));
- for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
- for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
+ for (unsigned yCoordinate = topLeft.y(); yCoordinate < bottomRight.y(); ++yCoordinate) {
+ for (unsigned xCoordinate = topLeft.x(); xCoordinate < bottomRight.x(); ++xCoordinate) {
TiledDrawingAreaTile::Coordinate currentCoordinate(xCoordinate, yCoordinate);
RefPtr<TiledDrawingAreaTile> currentTile = tileAt(currentCoordinate);
if (currentTile && currentTile->isReadyToPaint())
@@ -435,10 +436,10 @@ void TiledDrawingAreaProxy::createTiles()
Vector<TiledDrawingAreaTile::Coordinate> tilesToCreate;
unsigned requiredTileCount = 0;
bool hasVisibleCheckers = false;
- TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(coverRect.topLeft());
- TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(coverRect.bottomRight());
- for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) {
- for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) {
+ TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(visibleRect.location());
+ TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(IntPoint(visibleRect.maxX(), visibleRect.maxY()));
+ for (unsigned yCoordinate = topLeft.y(); yCoordinate < bottomRight.y(); ++yCoordinate) {
+ for (unsigned xCoordinate = topLeft.x(); xCoordinate < bottomRight.x(); ++xCoordinate) {
TiledDrawingAreaTile::Coordinate currentCoordinate(xCoordinate, yCoordinate);
// Distance is 0 for all currently visible tiles.
double distance = tileDistance(visibleRect, currentCoordinate);
@@ -541,7 +542,7 @@ void TiledDrawingAreaProxy::removeTile(const TiledDrawingAreaTile::Coordinate& c
if (!tile->hasBackBufferUpdatePending())
return;
WebPageProxy* page = this->page();
- page->process()->send(DrawingAreaLegacyMessage::CancelTileUpdate, page->pageID(), CoreIPC::In(tile->ID()));
+ page->process()->deprecatedSend(DrawingAreaLegacyMessage::CancelTileUpdate, page->pageID(), CoreIPC::In(tile->ID()));
}
IntRect TiledDrawingAreaProxy::mapToContents(const IntRect& rect) const
diff --git a/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp b/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp
index 6beafff..94b595a 100644
--- a/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp
+++ b/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "VisitedLinkProvider.h"
#include "SharedMemory.h"
diff --git a/Source/WebKit2/UIProcess/WebBackForwardList.cpp b/Source/WebKit2/UIProcess/WebBackForwardList.cpp
index b351418..5c567b5 100644
--- a/Source/WebKit2/UIProcess/WebBackForwardList.cpp
+++ b/Source/WebKit2/UIProcess/WebBackForwardList.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebBackForwardList.h"
#include "WebPageProxy.h"
@@ -30,7 +31,6 @@
namespace WebKit {
static const unsigned DefaultCapacity = 100;
-static const unsigned NoCurrentItemIndex = UINT_MAX;
WebBackForwardList::WebBackForwardList(WebPageProxy* page)
: m_page(page)
@@ -39,6 +39,7 @@ WebBackForwardList::WebBackForwardList(WebPageProxy* page)
, m_closed(true)
, m_enabled(true)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
}
WebBackForwardList::~WebBackForwardList()
@@ -58,15 +59,21 @@ void WebBackForwardList::pageClosed()
void WebBackForwardList::addItem(WebBackForwardListItem* newItem)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
if (m_capacity == 0 || !m_enabled)
return;
+ Vector<RefPtr<APIObject> > removedItems;
+
// Toss anything in the forward list
if (m_current != NoCurrentItemIndex) {
unsigned targetSize = m_current + 1;
+ removedItems.reserveCapacity(m_entries.size() - targetSize);
while (m_entries.size() > targetSize) {
if (m_page)
m_page->backForwardRemovedItem(m_entries.last()->itemID());
+ removedItems.append(m_entries.last().release());
m_entries.removeLast();
}
}
@@ -76,6 +83,7 @@ void WebBackForwardList::addItem(WebBackForwardListItem* newItem)
if (m_entries.size() == m_capacity && (m_current != 0 || m_capacity == 1)) {
if (m_page)
m_page->backForwardRemovedItem(m_entries[0]->itemID());
+ removedItems.append(m_entries[0].release());
m_entries.remove(0);
m_current--;
}
@@ -84,11 +92,15 @@ void WebBackForwardList::addItem(WebBackForwardListItem* newItem)
m_current++;
if (m_page)
- m_page->didChangeBackForwardList();
+ m_page->didChangeBackForwardList(newItem, &removedItems);
+
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
}
void WebBackForwardList::goToItem(WebBackForwardListItem* item)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
if (!m_entries.size() || !item)
return;
@@ -100,12 +112,14 @@ void WebBackForwardList::goToItem(WebBackForwardListItem* item)
if (index < m_entries.size()) {
m_current = index;
if (m_page)
- m_page->didChangeBackForwardList();
+ m_page->didChangeBackForwardList(0, 0);
}
}
WebBackForwardListItem* WebBackForwardList::currentItem()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
if (m_current != NoCurrentItemIndex)
return m_entries[m_current].get();
return 0;
@@ -113,6 +127,8 @@ WebBackForwardListItem* WebBackForwardList::currentItem()
WebBackForwardListItem* WebBackForwardList::backItem()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
if (m_current && m_current != NoCurrentItemIndex)
return m_entries[m_current - 1].get();
return 0;
@@ -120,6 +136,8 @@ WebBackForwardListItem* WebBackForwardList::backItem()
WebBackForwardListItem* WebBackForwardList::forwardItem()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
if (m_entries.size() && m_current < m_entries.size() - 1)
return m_entries[m_current + 1].get();
return 0;
@@ -127,6 +145,8 @@ WebBackForwardListItem* WebBackForwardList::forwardItem()
WebBackForwardListItem* WebBackForwardList::itemAtIndex(int index)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
// Do range checks without doing math on index to avoid overflow.
if (index < -static_cast<int>(m_current))
return 0;
@@ -139,16 +159,22 @@ WebBackForwardListItem* WebBackForwardList::itemAtIndex(int index)
int WebBackForwardList::backListCount()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
return m_current == NoCurrentItemIndex ? 0 : m_current;
}
int WebBackForwardList::forwardListCount()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
return m_current == NoCurrentItemIndex ? 0 : static_cast<int>(m_entries.size()) - (m_current + 1);
}
PassRefPtr<ImmutableArray> WebBackForwardList::backListAsImmutableArrayWithLimit(unsigned limit)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
unsigned backListSize = static_cast<unsigned>(backListCount());
unsigned size = std::min(backListSize, limit);
if (!size)
@@ -166,6 +192,8 @@ PassRefPtr<ImmutableArray> WebBackForwardList::backListAsImmutableArrayWithLimit
PassRefPtr<ImmutableArray> WebBackForwardList::forwardListAsImmutableArrayWithLimit(unsigned limit)
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
unsigned size = std::min(static_cast<unsigned>(forwardListCount()), limit);
if (!size)
return ImmutableArray::create();
@@ -183,6 +211,8 @@ PassRefPtr<ImmutableArray> WebBackForwardList::forwardListAsImmutableArrayWithLi
void WebBackForwardList::clear()
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
size_t size = m_entries.size();
if (size <= 1)
return;
@@ -196,13 +226,20 @@ void WebBackForwardList::clear()
}
}
+ Vector<RefPtr<APIObject> > removedItems;
+ removedItems.reserveCapacity(m_entries.size() - 1);
+ for (size_t i = 0; i < m_entries.size(); ++i) {
+ if (i != m_current)
+ removedItems.append(m_entries[i].release());
+ }
+
m_entries.shrink(1);
m_entries[0] = currentItem.release();
m_current = 0;
if (m_page)
- m_page->didChangeBackForwardList();
+ m_page->didChangeBackForwardList(0, &removedItems);
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebBackForwardList.h b/Source/WebKit2/UIProcess/WebBackForwardList.h
index f51ab26..3376771 100644
--- a/Source/WebKit2/UIProcess/WebBackForwardList.h
+++ b/Source/WebKit2/UIProcess/WebBackForwardList.h
@@ -83,6 +83,8 @@ public:
#endif
private:
+ static const unsigned NoCurrentItemIndex = UINT_MAX;
+
WebBackForwardList(WebPageProxy*);
virtual Type type() const { return APIType; }
diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp
index 1bb6bc4..5411a36 100644
--- a/Source/WebKit2/UIProcess/WebContext.cpp
+++ b/Source/WebKit2/UIProcess/WebContext.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContext.h"
#include "DownloadProxy.h"
@@ -51,6 +52,8 @@
#include <wtf/RefCountedLeakCounter.h>
#endif
+#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, process()->connection())
+
using namespace WebCore;
namespace WebKit {
@@ -176,6 +179,7 @@ void WebContext::ensureWebProcess()
parameters.cacheModel = m_cacheModel;
parameters.languageCode = defaultLanguage();
parameters.applicationCacheDirectory = applicationCacheDirectory();
+ parameters.databaseDirectory = databaseDirectory();
parameters.clearResourceCaches = m_clearResourceCachesForNewWebProcess;
parameters.clearApplicationCache = m_clearApplicationCacheForNewWebProcess;
#if PLATFORM(MAC)
@@ -200,7 +204,7 @@ void WebContext::ensureWebProcess()
for (size_t i = 0; i != m_pendingMessagesToPostToInjectedBundle.size(); ++i) {
pair<String, RefPtr<APIObject> >& message = m_pendingMessagesToPostToInjectedBundle[i];
- m_process->send(InjectedBundleMessage::PostMessage, 0, CoreIPC::In(message.first, WebContextUserMessageEncoder(message.second.get())));
+ m_process->deprecatedSend(InjectedBundleMessage::PostMessage, 0, CoreIPC::In(message.first, WebContextUserMessageEncoder(message.second.get())));
}
m_pendingMessagesToPostToInjectedBundle.clear();
}
@@ -277,7 +281,7 @@ void WebContext::postMessageToInjectedBundle(const String& messageName, APIObjec
// FIXME: We should consider returning false from this function if the messageBody cannot
// be encoded.
- m_process->send(InjectedBundleMessage::PostMessage, 0, CoreIPC::In(messageName, WebContextUserMessageEncoder(messageBody)));
+ m_process->deprecatedSend(InjectedBundleMessage::PostMessage, 0, CoreIPC::In(messageName, WebContextUserMessageEncoder(messageBody)));
}
// InjectedBundle client
@@ -297,6 +301,7 @@ void WebContext::didReceiveSynchronousMessageFromInjectedBundle(const String& me
void WebContext::didNavigateWithNavigationData(uint64_t pageID, const WebNavigationDataStore& store, uint64_t frameID)
{
WebFrameProxy* frame = m_process->webFrame(frameID);
+ MESSAGE_CHECK(frame);
if (!frame->page())
return;
@@ -306,6 +311,7 @@ void WebContext::didNavigateWithNavigationData(uint64_t pageID, const WebNavigat
void WebContext::didPerformClientRedirect(uint64_t pageID, const String& sourceURLString, const String& destinationURLString, uint64_t frameID)
{
WebFrameProxy* frame = m_process->webFrame(frameID);
+ MESSAGE_CHECK(frame);
if (!frame->page())
return;
@@ -315,6 +321,7 @@ void WebContext::didPerformClientRedirect(uint64_t pageID, const String& sourceU
void WebContext::didPerformServerRedirect(uint64_t pageID, const String& sourceURLString, const String& destinationURLString, uint64_t frameID)
{
WebFrameProxy* frame = m_process->webFrame(frameID);
+ MESSAGE_CHECK(frame);
if (!frame->page())
return;
@@ -324,6 +331,7 @@ void WebContext::didPerformServerRedirect(uint64_t pageID, const String& sourceU
void WebContext::didUpdateHistoryTitle(uint64_t pageID, const String& title, const String& url, uint64_t frameID)
{
WebFrameProxy* frame = m_process->webFrame(frameID);
+ MESSAGE_CHECK(frame);
if (!frame->page())
return;
@@ -602,4 +610,12 @@ void WebContext::stopMemorySampler()
m_process->send(Messages::WebProcess::StopMemorySampler(), 0);
}
+String WebContext::databaseDirectory() const
+{
+ if (!m_overrideDatabaseDirectory.isEmpty())
+ return m_overrideDatabaseDirectory;
+
+ return platformDefaultDatabaseDirectory();
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebContext.h b/Source/WebKit2/UIProcess/WebContext.h
index e973160..ebf1914 100644
--- a/Source/WebKit2/UIProcess/WebContext.h
+++ b/Source/WebKit2/UIProcess/WebContext.h
@@ -137,6 +137,8 @@ public:
};
static Statistics& statistics();
+ void setDatabaseDirectory(const String& dir) { m_overrideDatabaseDirectory = dir; }
+
private:
WebContext(ProcessModel, const String& injectedBundlePath);
@@ -162,6 +164,9 @@ private:
static void languageChanged(void* context);
void languageChanged();
+ String databaseDirectory() const;
+ String platformDefaultDatabaseDirectory() const;
+
ProcessModel m_processModel;
// FIXME: In the future, this should be one or more WebProcessProxies.
@@ -203,6 +208,8 @@ private:
#if PLATFORM(WIN)
bool m_shouldPaintNativeControls;
#endif
+
+ String m_overrideDatabaseDirectory;
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp b/Source/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
index 97613f8..24e6271 100644
--- a/Source/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
+++ b/Source/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextInjectedBundleClient.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/WebContextMenuProxy.cpp b/Source/WebKit2/UIProcess/WebContextMenuProxy.cpp
index 887a260..4c4cb26 100644
--- a/Source/WebKit2/UIProcess/WebContextMenuProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebContextMenuProxy.cpp
@@ -22,6 +22,8 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+
+#include "config.h"
#include "WebContextMenuProxy.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp b/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp
index 1bc0303..96488fb 100644
--- a/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebDatabaseManagerProxy.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/UIProcess/WebDatabaseManagerProxyClient.cpp b/Source/WebKit2/UIProcess/WebDatabaseManagerProxyClient.cpp
index 8ba3a0e..2f3c767 100644
--- a/Source/WebKit2/UIProcess/WebDatabaseManagerProxyClient.cpp
+++ b/Source/WebKit2/UIProcess/WebDatabaseManagerProxyClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebDatabaseManagerProxyClient.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/WebDownloadClient.cpp b/Source/WebKit2/UIProcess/WebDownloadClient.cpp
index d6a7bcb..4b1b756 100644
--- a/Source/WebKit2/UIProcess/WebDownloadClient.cpp
+++ b/Source/WebKit2/UIProcess/WebDownloadClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebDownloadClient.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/WebEditCommandProxy.cpp b/Source/WebKit2/UIProcess/WebEditCommandProxy.cpp
index 9a816e3..568faa1 100644
--- a/Source/WebKit2/UIProcess/WebEditCommandProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebEditCommandProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEditCommandProxy.h"
#include "WebPageMessages.h"
diff --git a/Source/WebKit2/UIProcess/WebFindClient.cpp b/Source/WebKit2/UIProcess/WebFindClient.cpp
index e2e8de5..c8df91d 100644
--- a/Source/WebKit2/UIProcess/WebFindClient.cpp
+++ b/Source/WebKit2/UIProcess/WebFindClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFindClient.h"
#include "WKAPICast.h"
#include <wtf/text/WTFString.h>
diff --git a/Source/WebKit2/UIProcess/WebFormClient.cpp b/Source/WebKit2/UIProcess/WebFormClient.cpp
index 159a34c..ecddbcc 100644
--- a/Source/WebKit2/UIProcess/WebFormClient.cpp
+++ b/Source/WebKit2/UIProcess/WebFormClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFormClient.h"
#include "ImmutableDictionary.h"
diff --git a/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp b/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp
index 10564a4..dcc864a 100644
--- a/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFormSubmissionListenerProxy.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp b/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp
index c4e38ee..b998f58 100644
--- a/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFrameListenerProxy.h"
#include "WebFrameProxy.h"
diff --git a/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp b/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp
index 865d352..5764533 100644
--- a/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFramePolicyListenerProxy.h"
#include "WebFrameProxy.h"
diff --git a/Source/WebKit2/UIProcess/WebFrameProxy.cpp b/Source/WebKit2/UIProcess/WebFrameProxy.cpp
index 779cf61..2df22c6 100644
--- a/Source/WebKit2/UIProcess/WebFrameProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebFrameProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFrameProxy.h"
#include "WebCertificateInfo.h"
@@ -137,16 +138,13 @@ void WebFrameProxy::didStartProvisionalLoad(const String& url)
void WebFrameProxy::didReceiveServerRedirectForProvisionalLoad(const String& url)
{
- ASSERT(!url.isEmpty());
ASSERT(m_loadState == LoadStateProvisional);
- ASSERT(!m_provisionalURL.isEmpty());
m_provisionalURL = url;
}
void WebFrameProxy::didFailProvisionalLoad()
{
ASSERT(m_loadState == LoadStateProvisional);
- ASSERT(!m_provisionalURL.isEmpty());
m_loadState = LoadStateFinished;
m_provisionalURL = String();
}
@@ -174,7 +172,6 @@ void WebFrameProxy::didFailLoad()
{
ASSERT(m_loadState == LoadStateCommitted);
ASSERT(m_provisionalURL.isEmpty());
- ASSERT(!m_url.isEmpty());
m_loadState = LoadStateFinished;
m_title = String();
}
diff --git a/Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp b/Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp
index 0842ca6..eae4935 100644
--- a/Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebGeolocationManagerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebGeolocationManagerProxy.h"
#include "WebContext.h"
diff --git a/Source/WebKit2/UIProcess/WebGeolocationProvider.cpp b/Source/WebKit2/UIProcess/WebGeolocationProvider.cpp
index c48ee89..c382235 100644
--- a/Source/WebKit2/UIProcess/WebGeolocationProvider.cpp
+++ b/Source/WebKit2/UIProcess/WebGeolocationProvider.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebGeolocationProvider.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/WebHistoryClient.cpp b/Source/WebKit2/UIProcess/WebHistoryClient.cpp
index d0ca71b..ca6cf94 100644
--- a/Source/WebKit2/UIProcess/WebHistoryClient.cpp
+++ b/Source/WebKit2/UIProcess/WebHistoryClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebHistoryClient.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/UIProcess/WebInspectorProxy.cpp b/Source/WebKit2/UIProcess/WebInspectorProxy.cpp
index dfeff6a..2b282a1 100644
--- a/Source/WebKit2/UIProcess/WebInspectorProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebInspectorProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorProxy.h"
#if ENABLE(INSPECTOR)
@@ -69,6 +70,7 @@ WebInspectorProxy::~WebInspectorProxy()
void WebInspectorProxy::invalidate()
{
+ m_page->close();
platformClose();
m_page = 0;
@@ -156,6 +158,11 @@ void WebInspectorProxy::togglePageProfiling()
m_isProfilingPage = !m_isProfilingPage;
}
+bool WebInspectorProxy::isInspectorPage(WebPageProxy* page)
+{
+ return page->pageGroup() == inspectorPageGroup();
+}
+
// Called by WebInspectorProxy messages
void WebInspectorProxy::createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters& inspectorPageParameters)
{
diff --git a/Source/WebKit2/UIProcess/WebInspectorProxy.h b/Source/WebKit2/UIProcess/WebInspectorProxy.h
index cc0725a..ac618c6 100644
--- a/Source/WebKit2/UIProcess/WebInspectorProxy.h
+++ b/Source/WebKit2/UIProcess/WebInspectorProxy.h
@@ -36,15 +36,10 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSWindow;
-@class WKView;
-@class WebInspectorProxyObjCAdapter;
-#else
-class NSWindow;
-class WKView;
-class WebInspectorProxyObjCAdapter;
-#endif
+
+OBJC_CLASS NSWindow;
+OBJC_CLASS WKView;
+OBJC_CLASS WebInspectorProxyObjCAdapter;
#endif
namespace WebKit {
@@ -98,6 +93,8 @@ public:
CoreIPC::SyncReplyMode didReceiveSyncWebInspectorProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
#endif
+ static bool isInspectorPage(WebPageProxy*);
+
private:
WebInspectorProxy(WebPageProxy* page);
diff --git a/Source/WebKit2/UIProcess/WebLoaderClient.cpp b/Source/WebKit2/UIProcess/WebLoaderClient.cpp
index 0b14a17..96adb85 100644
--- a/Source/WebKit2/UIProcess/WebLoaderClient.cpp
+++ b/Source/WebKit2/UIProcess/WebLoaderClient.cpp
@@ -23,8 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebLoaderClient.h"
+#include "ImmutableArray.h"
+#include "WebBackForwardListItem.h"
#include "WKAPICast.h"
#include <string.h>
@@ -208,12 +211,16 @@ void WebLoaderClient::processDidCrash(WebPageProxy* page)
m_client.processDidCrash(toAPI(page), m_client.clientInfo);
}
-void WebLoaderClient::didChangeBackForwardList(WebPageProxy* page)
+void WebLoaderClient::didChangeBackForwardList(WebPageProxy* page, WebBackForwardListItem* addedItem, Vector<RefPtr<APIObject> >* removedItems)
{
if (!m_client.didChangeBackForwardList)
return;
- m_client.didChangeBackForwardList(toAPI(page), m_client.clientInfo);
+ RefPtr<ImmutableArray> removedItemsArray;
+ if (removedItems && !removedItems->isEmpty())
+ removedItemsArray = ImmutableArray::adopt(*removedItems);
+
+ m_client.didChangeBackForwardList(toAPI(page), toAPI(addedItem), toAPI(removedItemsArray.get()), m_client.clientInfo);
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebLoaderClient.h b/Source/WebKit2/UIProcess/WebLoaderClient.h
index 0c250fe..6600876 100644
--- a/Source/WebKit2/UIProcess/WebLoaderClient.h
+++ b/Source/WebKit2/UIProcess/WebLoaderClient.h
@@ -30,6 +30,8 @@
#include "SameDocumentNavigationType.h"
#include "WKPage.h"
#include <wtf/Forward.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
namespace WebCore {
class ResourceError;
@@ -40,6 +42,7 @@ namespace WebKit {
class APIObject;
class AuthenticationChallengeProxy;
class AuthenticationDecisionListener;
+class WebBackForwardListItem;
class WebFrameProxy;
class WebPageProxy;
class WebProtectionSpace;
@@ -73,7 +76,7 @@ public:
void processDidBecomeResponsive(WebPageProxy*);
void processDidCrash(WebPageProxy*);
- void didChangeBackForwardList(WebPageProxy*);
+ void didChangeBackForwardList(WebPageProxy*, WebBackForwardListItem* addedItem, Vector<RefPtr<APIObject> >* removedItems);
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebNavigationData.cpp b/Source/WebKit2/UIProcess/WebNavigationData.cpp
index c4f17f3..eefc7d0 100644
--- a/Source/WebKit2/UIProcess/WebNavigationData.cpp
+++ b/Source/WebKit2/UIProcess/WebNavigationData.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebNavigationData.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp b/Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp
index de2d174..288a736 100644
--- a/Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebOpenPanelResultListenerProxy.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/UIProcess/WebPageContextMenuClient.cpp b/Source/WebKit2/UIProcess/WebPageContextMenuClient.cpp
index 73220b2..480a56e 100644
--- a/Source/WebKit2/UIProcess/WebPageContextMenuClient.cpp
+++ b/Source/WebKit2/UIProcess/WebPageContextMenuClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageContextMenuClient.h"
#include "Logging.h"
diff --git a/Source/WebKit2/UIProcess/WebPageGroup.cpp b/Source/WebKit2/UIProcess/WebPageGroup.cpp
index 901b393..aa4cfb7 100644
--- a/Source/WebKit2/UIProcess/WebPageGroup.cpp
+++ b/Source/WebKit2/UIProcess/WebPageGroup.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageGroup.h"
#include "WebPageProxy.h"
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index 0be2f11..2582547 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageProxy.h"
#include "AuthenticationChallengeProxy.h"
@@ -65,6 +66,13 @@
#include "WebProtectionSpace.h"
#include "WebSecurityOrigin.h"
#include "WebURLRequest.h"
+#if PLATFORM(WIN)
+#include "WebDragSource.h"
+#include <WebCore/BitmapInfo.h>
+#include <WebCore/COMPtr.h>
+#include <WebCore/WCDataObject.h>
+#include <shlobj.h>
+#endif
#include <WebCore/DragData.h>
#include <WebCore/FloatRect.h>
#include <WebCore/MIMETypeRegistry.h>
@@ -113,10 +121,14 @@ WebPageProxy::WebPageProxy(PageClient* pageClient, WebContext* context, WebPageG
, m_isValid(true)
, m_isClosed(false)
, m_isInPrintingMode(false)
+ , m_isPerformingDOMPrintOperation(false)
, m_inDecidePolicyForMIMEType(false)
, m_syncMimeTypePolicyActionIsValid(false)
, m_syncMimeTypePolicyAction(PolicyUse)
, m_syncMimeTypePolicyDownloadID(0)
+ , m_inDecidePolicyForNavigationAction(false)
+ , m_syncNavigationActionPolicyActionIsValid(false)
+ , m_syncNavigationActionPolicyAction(PolicyUse)
, m_processingWheelEvent(false)
, m_processingMouseMoveEvent(false)
, m_pageID(pageID)
@@ -128,6 +140,8 @@ WebPageProxy::WebPageProxy(PageClient* pageClient, WebContext* context, WebPageG
, m_pendingLearnOrIgnoreWordMessageCount(0)
, m_mainFrameHasCustomRepresentation(false)
, m_currentDragOperation(DragOperationNone)
+ , m_mainFrameHasHorizontalScrollbar(false)
+ , m_mainFrameHasVerticalScrollbar(false)
{
#ifndef NDEBUG
webPageProxyCounter.increment();
@@ -227,9 +241,13 @@ void WebPageProxy::reattachToWebProcessWithItem(WebBackForwardListItem* item)
m_backForwardList->goToItem(item);
reattachToWebProcess();
-
- if (item)
- process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID()), m_pageID);
+
+ if (!item)
+ return;
+
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(KURL(KURL(), item->url()), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID(), sandboxExtensionHandle), m_pageID);
}
void WebPageProxy::initializeWebPage()
@@ -254,6 +272,7 @@ void WebPageProxy::close()
m_isClosed = true;
m_backForwardList->pageClosed();
+ m_pageClient->pageClosed();
process()->disconnectFramesFromPage(this);
m_mainFrame = 0;
@@ -274,8 +293,13 @@ void WebPageProxy::close()
m_toolTip = String();
+ m_mainFrameHasHorizontalScrollbar = false;
+ m_mainFrameHasVerticalScrollbar = false;
+
+ invalidateCallbackMap(m_voidCallbacks);
invalidateCallbackMap(m_dataCallbacks);
invalidateCallbackMap(m_stringCallbacks);
+ invalidateCallbackMap(m_computedPagesCallbacks);
Vector<WebEditCommandProxy*> editCommandVector;
copyToVector(m_editCommandSet, editCommandVector);
@@ -306,16 +330,22 @@ bool WebPageProxy::tryClose()
return false;
}
-static void initializeSandboxExtensionHandle(const KURL& url, SandboxExtension::Handle& sandboxExtensionHandle)
+void WebPageProxy::initializeSandboxExtensionHandle(const KURL& url, SandboxExtension::Handle& sandboxExtensionHandle)
{
if (!url.isLocalFile())
return;
+ // Don't give the inspector full access to the file system.
+ if (WebInspectorProxy::isInspectorPage(this))
+ return;
+
SandboxExtension::createHandle("/", SandboxExtension::ReadOnly, sandboxExtensionHandle);
}
void WebPageProxy::loadURL(const String& url)
{
+ setPendingAPIRequestURL(url);
+
if (!isValid())
reattachToWebProcess();
@@ -326,6 +356,8 @@ void WebPageProxy::loadURL(const String& url)
void WebPageProxy::loadURLRequest(WebURLRequest* urlRequest)
{
+ setPendingAPIRequestURL(urlRequest->resourceRequest().url());
+
if (!isValid())
reattachToWebProcess();
@@ -369,6 +401,9 @@ void WebPageProxy::stopLoading()
void WebPageProxy::reload(bool reloadFromOrigin)
{
+ if (m_backForwardList->currentItem())
+ setPendingAPIRequestURL(m_backForwardList->currentItem()->url());
+
if (!isValid()) {
reattachToWebProcessWithItem(m_backForwardList->currentItem());
return;
@@ -379,15 +414,21 @@ void WebPageProxy::reload(bool reloadFromOrigin)
void WebPageProxy::goForward()
{
- if (!isValid()) {
- reattachToWebProcessWithItem(m_backForwardList->forwardItem());
+ if (isValid() && !canGoForward())
return;
- }
- if (!canGoForward())
+ WebBackForwardListItem* forwardItem = m_backForwardList->forwardItem();
+ if (forwardItem)
+ setPendingAPIRequestURL(forwardItem->url());
+
+ if (!isValid()) {
+ reattachToWebProcessWithItem(forwardItem);
return;
+ }
- process()->send(Messages::WebPage::GoForward(m_backForwardList->forwardItem()->itemID()), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(KURL(KURL(), forwardItem->url()), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::GoForward(forwardItem->itemID(), sandboxExtensionHandle), m_pageID);
}
bool WebPageProxy::canGoForward() const
@@ -397,15 +438,21 @@ bool WebPageProxy::canGoForward() const
void WebPageProxy::goBack()
{
- if (!isValid()) {
- reattachToWebProcessWithItem(m_backForwardList->backItem());
+ if (isValid() && !canGoBack())
return;
- }
- if (!canGoBack())
+ WebBackForwardListItem* backItem = m_backForwardList->backItem();
+ if (backItem)
+ setPendingAPIRequestURL(backItem->url());
+
+ if (!isValid()) {
+ reattachToWebProcessWithItem(backItem);
return;
+ }
- process()->send(Messages::WebPage::GoBack(m_backForwardList->backItem()->itemID()), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(KURL(KURL(), backItem->url()), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::GoBack(backItem->itemID(), sandboxExtensionHandle), m_pageID);
}
bool WebPageProxy::canGoBack() const
@@ -420,12 +467,14 @@ void WebPageProxy::goToBackForwardItem(WebBackForwardListItem* item)
return;
}
- process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID()), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(KURL(KURL(), item->url()), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID(), sandboxExtensionHandle), m_pageID);
}
-void WebPageProxy::didChangeBackForwardList()
+void WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<RefPtr<APIObject> >* removed)
{
- m_loaderClient.didChangeBackForwardList(this);
+ m_loaderClient.didChangeBackForwardList(this, added, removed);
}
@@ -467,6 +516,16 @@ void WebPageProxy::setDrawsTransparentBackground(bool drawsTransparentBackground
process()->send(Messages::WebPage::SetDrawsTransparentBackground(drawsTransparentBackground), m_pageID);
}
+void WebPageProxy::viewWillStartLiveResize()
+{
+ process()->send(Messages::WebPage::ViewWillStartLiveResize(), m_pageID);
+}
+
+void WebPageProxy::viewWillEndLiveResize()
+{
+ process()->send(Messages::WebPage::ViewWillEndLiveResize(), m_pageID);
+}
+
void WebPageProxy::setViewNeedsDisplay(const IntRect& rect)
{
m_pageClient->setViewNeedsDisplay(rect);
@@ -609,7 +668,13 @@ void WebPageProxy::performDragControllerAction(DragControllerAction action, WebC
{
if (!isValid())
return;
+#if PLATFORM(WIN)
+ // FIXME: We should pass the drag data map only on DragEnter.
+ process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(),
+ dragData->draggingSourceOperationMask(), dragData->dragDataMap(), dragData->flags()), m_pageID);
+#else
process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(), dragData->draggingSourceOperationMask(), dragStorageName, dragData->flags()), m_pageID);
+#endif
}
void WebPageProxy::didPerformDragControllerAction(uint64_t resultOperation)
@@ -628,6 +693,63 @@ void WebPageProxy::setDragImage(const WebCore::IntPoint& clientPosition, const I
}
#endif
+#if PLATFORM(WIN)
+
+void WebPageProxy::startDragDrop(const IntPoint& imageOrigin, const IntPoint& dragPoint, uint64_t okEffect,
+ const HashMap<UINT, Vector<String> >& dataMap, const IntSize& dragImageSize, const SharedMemory::Handle& dragImageHandle, bool isLinkDrag)
+{
+ COMPtr<WCDataObject> dataObject;
+ WCDataObject::createInstance(&dataObject, dataMap);
+
+ RefPtr<SharedMemory> memoryBuffer = SharedMemory::create(dragImageHandle, SharedMemory::ReadOnly);
+ if (!memoryBuffer)
+ return;
+
+ RefPtr<WebDragSource> source = WebDragSource::createInstance();
+ if (!source)
+ return;
+
+ COMPtr<IDragSourceHelper> helper;
+ if (FAILED(::CoCreateInstance(CLSID_DragDropHelper, 0, CLSCTX_INPROC_SERVER, IID_IDragSourceHelper, reinterpret_cast<LPVOID*>(&helper))))
+ return;
+
+ BitmapInfo bitmapInfo = BitmapInfo::create(dragImageSize);
+ void* bits;
+ OwnPtr<HBITMAP> hbmp(::CreateDIBSection(0, &bitmapInfo, DIB_RGB_COLORS, &bits, 0, 0));
+ memcpy(bits, memoryBuffer->data(), memoryBuffer->size());
+
+ SHDRAGIMAGE sdi;
+ sdi.sizeDragImage.cx = bitmapInfo.bmiHeader.biWidth;
+ sdi.sizeDragImage.cy = bitmapInfo.bmiHeader.biHeight;
+ sdi.crColorKey = 0xffffffff;
+ sdi.hbmpDragImage = hbmp.leakPtr();
+ sdi.ptOffset.x = dragPoint.x() - imageOrigin.x();
+ sdi.ptOffset.y = dragPoint.y() - imageOrigin.y();
+ if (isLinkDrag)
+ sdi.ptOffset.y = bitmapInfo.bmiHeader.biHeight - sdi.ptOffset.y;
+
+ helper->InitializeFromBitmap(&sdi, dataObject.get());
+
+ DWORD effect = DROPEFFECT_NONE;
+
+ DragOperation operation = DragOperationNone;
+ if (::DoDragDrop(dataObject.get(), source.get(), okEffect, &effect) == DRAGDROP_S_DROP) {
+ if (effect & DROPEFFECT_COPY)
+ operation = DragOperationCopy;
+ else if (effect & DROPEFFECT_LINK)
+ operation = DragOperationLink;
+ else if (effect & DROPEFFECT_MOVE)
+ operation = DragOperationMove;
+ }
+ POINT globalPoint;
+ ::GetCursorPos(&globalPoint);
+ POINT localPoint = globalPoint;
+ ::ScreenToClient(m_pageClient->nativeWindow(), &localPoint);
+
+ dragEnded(localPoint, globalPoint, operation);
+}
+#endif
+
void WebPageProxy::dragEnded(const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, uint64_t operation)
{
if (!isValid())
@@ -701,6 +823,17 @@ void WebPageProxy::handleKeyboardEvent(const NativeWebKeyboardEvent& event)
process()->send(Messages::WebPage::KeyEvent(event), m_pageID);
}
+#if ENABLE(GESTURE_EVENTS)
+void WebPageProxy::handleGestureEvent(const WebGestureEvent& event)
+{
+ if (!isValid())
+ return;
+
+ process()->responsivenessTimer()->start();
+ process()->send(Messages::WebPage::GestureEvent(event), m_pageID);
+}
+#endif
+
#if ENABLE(TOUCH_EVENTS)
void WebPageProxy::handleTouchEvent(const WebTouchEvent& event)
{
@@ -730,6 +863,14 @@ void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* fr
return;
}
+ // If we received a policy decision while in decidePolicyForNavigationAction the decision will
+ // be sent back to the web process by decidePolicyForNavigationAction.
+ if (m_inDecidePolicyForNavigationAction) {
+ m_syncNavigationActionPolicyActionIsValid = true;
+ m_syncNavigationActionPolicyAction = action;
+ return;
+ }
+
process()->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, downloadID), m_pageID);
}
@@ -890,10 +1031,6 @@ void WebPageProxy::scaleWebView(double scale, const IntPoint& origin)
if (!isValid())
return;
- if (m_viewScaleFactor == scale)
- return;
-
- m_viewScaleFactor = scale;
process()->send(Messages::WebPage::ScaleWebView(scale, origin), m_pageID);
}
@@ -923,6 +1060,11 @@ void WebPageProxy::setFixedLayoutSize(const IntSize& size)
process()->send(Messages::WebPage::SetFixedLayoutSize(size), m_pageID);
}
+void WebPageProxy::viewScaleFactorDidChange(double scaleFactor)
+{
+ m_viewScaleFactor = scaleFactor;
+}
+
void WebPageProxy::findString(const String& string, FindOptions options, unsigned maxMatchCount)
{
process()->send(Messages::WebPage::FindString(string, options, maxMatchCount), m_pageID);
@@ -1002,6 +1144,20 @@ void WebPageProxy::getWebArchiveOfFrame(WebFrameProxy* frame, PassRefPtr<DataCal
process()->send(Messages::WebPage::GetWebArchiveOfFrame(frame->frameID(), callbackID), m_pageID);
}
+void WebPageProxy::forceRepaint(PassRefPtr<VoidCallback> prpCallback)
+{
+ RefPtr<VoidCallback> callback = prpCallback;
+
+ if (!isValid()) {
+ callback->invalidate();
+ return;
+ }
+
+ uint64_t callbackID = callback->callbackID();
+ m_voidCallbacks.set(callbackID, callback.get());
+ process()->send(Messages::WebPage::ForceRepaint(callbackID), m_pageID);
+}
+
void WebPageProxy::preferencesDidChange()
{
if (!isValid())
@@ -1022,7 +1178,7 @@ void WebPageProxy::setResizesToContentsUsingLayoutSize(const WebCore::IntSize& t
void WebPageProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
{
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
if (messageID.is<CoreIPC::MessageClassDrawingAreaProxy>()) {
m_drawingArea->didReceiveDrawingAreaProxyMessage(connection, messageID, arguments);
return;
@@ -1138,17 +1294,30 @@ void WebPageProxy::didRestoreFrameFromPageCache(uint64_t frameID, uint64_t paren
parentFrame->appendChild(subframe);
}
+
+// Always start progress at initialProgressValue. This helps provide feedback as
+// soon as a load starts.
+
+static const double initialProgressValue = 0.1;
+
+double WebPageProxy::estimatedProgress() const
+{
+ if (!pendingAPIRequestURL().isNull())
+ return initialProgressValue;
+ return m_estimatedProgress;
+}
+
void WebPageProxy::didStartProgress()
{
- m_estimatedProgress = 0.0;
-
+ m_estimatedProgress = initialProgressValue;
+
m_loaderClient.didStartProgress(this);
}
void WebPageProxy::didChangeProgress(double value)
{
m_estimatedProgress = value;
-
+
m_loaderClient.didChangeProgress(this);
}
@@ -1161,6 +1330,8 @@ void WebPageProxy::didFinishProgress()
void WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, bool loadingSubstituteDataForUnreachableURL, CoreIPC::ArgumentDecoder* arguments)
{
+ clearPendingAPIRequestURL();
+
RefPtr<APIObject> userData;
WebContextUserMessageDecoder messageDecoder(userData, context());
if (!arguments->decode(messageDecoder))
@@ -1366,13 +1537,6 @@ void WebPageProxy::didRunInsecureContentForFrame(uint64_t frameID, CoreIPC::Argu
m_loaderClient.didRunInsecureContentForFrame(this, frame, userData.get());
}
-void WebPageProxy::didReceiveAccessibilityPageToken(const CoreIPC::DataReference& data)
-{
-#if PLATFORM(MAC)
- m_pageClient->accessibilityChildTokenReceived(data);
-#endif
-}
-
void WebPageProxy::frameDidBecomeFrameSet(uint64_t frameID, bool value)
{
WebFrameProxy* frame = process()->webFrame(frameID);
@@ -1384,9 +1548,16 @@ void WebPageProxy::frameDidBecomeFrameSet(uint64_t frameID, bool value)
}
// PolicyClient
-
-void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const String& url, uint64_t listenerID)
+void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const ResourceRequest& request, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction)
{
+ RefPtr<APIObject> userData;
+ WebContextUserMessageDecoder messageDecoder(userData, context());
+ if (!arguments->decode(messageDecoder))
+ return;
+
+ if (request.url() != pendingAPIRequestURL())
+ clearPendingAPIRequestURL();
+
WebFrameProxy* frame = process()->webFrame(frameID);
MESSAGE_CHECK(frame);
@@ -1395,12 +1566,31 @@ void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t op
WebMouseEvent::Button mouseButton = static_cast<WebMouseEvent::Button>(opaqueMouseButton);
RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
- if (!m_policyClient.decidePolicyForNavigationAction(this, navigationType, modifiers, mouseButton, url, frame, listener.get()))
+
+ ASSERT(!m_inDecidePolicyForNavigationAction);
+
+ m_inDecidePolicyForNavigationAction = true;
+ m_syncNavigationActionPolicyActionIsValid = false;
+
+ if (!m_policyClient.decidePolicyForNavigationAction(this, frame, navigationType, modifiers, mouseButton, request, listener.get(), userData.get()))
listener->use();
+
+ m_inDecidePolicyForNavigationAction = false;
+
+ // Check if we received a policy decision already. If we did, we can just pass it back.
+ if (m_syncNavigationActionPolicyActionIsValid) {
+ receivedPolicyAction = true;
+ policyAction = m_syncNavigationActionPolicyAction;
+ }
}
-void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const String& url, uint64_t listenerID)
+void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const ResourceRequest& request, const String& frameName, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments)
{
+ RefPtr<APIObject> userData;
+ WebContextUserMessageDecoder messageDecoder(userData, context());
+ if (!arguments->decode(messageDecoder))
+ return;
+
WebFrameProxy* frame = process()->webFrame(frameID);
MESSAGE_CHECK(frame);
@@ -1409,12 +1599,17 @@ void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opa
WebMouseEvent::Button mouseButton = static_cast<WebMouseEvent::Button>(opaqueMouseButton);
RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
- if (!m_policyClient.decidePolicyForNewWindowAction(this, navigationType, modifiers, mouseButton, url, frame, listener.get()))
+ if (!m_policyClient.decidePolicyForNewWindowAction(this, frame, navigationType, modifiers, mouseButton, request, frameName, listener.get(), userData.get()))
listener->use();
}
-void WebPageProxy::decidePolicyForMIMEType(uint64_t frameID, const String& MIMEType, const String& url, uint64_t listenerID, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)
+void WebPageProxy::decidePolicyForMIMEType(uint64_t frameID, const String& MIMEType, const ResourceRequest& request, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)
{
+ RefPtr<APIObject> userData;
+ WebContextUserMessageDecoder messageDecoder(userData, context());
+ if (!arguments->decode(messageDecoder))
+ return;
+
WebFrameProxy* frame = process()->webFrame(frameID);
MESSAGE_CHECK(frame);
@@ -1425,7 +1620,7 @@ void WebPageProxy::decidePolicyForMIMEType(uint64_t frameID, const String& MIMET
m_inDecidePolicyForMIMEType = true;
m_syncMimeTypePolicyActionIsValid = false;
- if (!m_policyClient.decidePolicyForMIMEType(this, MIMEType, url, frame, listener.get()))
+ if (!m_policyClient.decidePolicyForMIMEType(this, frame, MIMEType, request, listener.get(), 0 /*userData*/))
listener->use();
m_inDecidePolicyForMIMEType = false;
@@ -1460,12 +1655,12 @@ void WebPageProxy::willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, cons
// ResourceLoad Client
-void WebPageProxy::didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceRequest& request)
+void WebPageProxy::didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceRequest& request, bool pageIsProvisionallyLoading)
{
WebFrameProxy* frame = process()->webFrame(frameID);
MESSAGE_CHECK(frame);
- m_resourceLoadClient.didInitiateLoadForResource(this, frame, resourceIdentifier, request);
+ m_resourceLoadClient.didInitiateLoadForResource(this, frame, resourceIdentifier, request, pageIsProvisionallyLoading);
}
void WebPageProxy::didSendRequestForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceRequest& request, const ResourceResponse& redirectResponse)
@@ -1674,10 +1869,15 @@ void WebPageProxy::runOpenPanel(uint64_t frameID, const WebOpenPanelParameters::
void WebPageProxy::printFrame(uint64_t frameID)
{
+ ASSERT(!m_isPerformingDOMPrintOperation);
+ m_isPerformingDOMPrintOperation = true;
+
WebFrameProxy* frame = process()->webFrame(frameID);
MESSAGE_CHECK(frame);
m_uiClient.printFrame(this, frame);
+
+ m_isPerformingDOMPrintOperation = false;
}
#if PLATFORM(QT)
@@ -1798,9 +1998,9 @@ void WebPageProxy::didCountStringMatches(const String& string, uint32_t matchCou
m_findClient.didCountStringMatches(this, string, matchCount);
}
-void WebPageProxy::setFindIndicator(const FloatRect& selectionRect, const Vector<FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle, bool fadeOut)
+void WebPageProxy::setFindIndicator(const FloatRect& selectionRectInWindowCoordinates, const Vector<FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle, bool fadeOut)
{
- RefPtr<FindIndicator> findIndicator = FindIndicator::create(selectionRect, textRects, contentImageHandle);
+ RefPtr<FindIndicator> findIndicator = FindIndicator::create(selectionRectInWindowCoordinates, textRectsInSelectionRectCoordinates, contentImageHandle);
m_pageClient->setFindIndicator(findIndicator.release(), fadeOut);
}
@@ -1824,20 +2024,26 @@ void WebPageProxy::setTextFromItemForPopupMenu(WebPopupMenuProxy*, int32_t index
process()->send(Messages::WebPage::SetTextForActivePopupMenu(index), m_pageID);
}
-void WebPageProxy::showPopupMenu(const IntRect& rect, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData& data)
+void WebPageProxy::showPopupMenu(const IntRect& rect, uint64_t textDirection, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData& data)
{
- if (m_activePopupMenu)
+ if (m_activePopupMenu) {
m_activePopupMenu->hidePopupMenu();
- else
- m_activePopupMenu = m_pageClient->createPopupMenuProxy(this);
+ m_activePopupMenu->invalidate();
+ m_activePopupMenu = 0;
+ }
+
+ m_activePopupMenu = m_pageClient->createPopupMenuProxy(this);
#if PLATFORM(WIN)
// On Windows, we're about to run our own message pump in showPopupMenu(), so turn off the responsiveness timer.
process()->responsivenessTimer()->stop();
#endif
- m_activePopupMenu->showPopupMenu(rect, items, data, selectedIndex);
- m_activePopupMenu = 0;
+ RefPtr<WebPopupMenuProxy> protectedActivePopupMenu = m_activePopupMenu;
+
+ protectedActivePopupMenu->showPopupMenu(rect, static_cast<TextDirection>(textDirection), items, data, selectedIndex);
+ protectedActivePopupMenu->invalidate();
+ protectedActivePopupMenu = 0;
}
void WebPageProxy::hidePopupMenu()
@@ -1846,6 +2052,7 @@ void WebPageProxy::hidePopupMenu()
return;
m_activePopupMenu->hidePopupMenu();
+ m_activePopupMenu->invalidate();
m_activePopupMenu = 0;
}
@@ -1929,7 +2136,16 @@ void WebPageProxy::didChooseFilesForOpenPanel(const Vector<String>& fileURLs)
if (!isValid())
return;
- // FIXME: This also needs to send a sandbox extension for these paths.
+#if ENABLE(WEB_PROCESS_SANDBOX)
+ // FIXME: The sandbox extensions should be sent with the DidChooseFilesForOpenPanel message. This
+ // is gated on a way of passing SandboxExtension::Handles in a Vector.
+ for (size_t i = 0; i < fileURLs.size(); ++i) {
+ SandboxExtension::Handle sandboxExtensionHandle;
+ SandboxExtension::createHandle(fileURLs[i], SandboxExtension::ReadOnly, sandboxExtensionHandle);
+ process()->send(Messages::WebPage::ExtendSandboxForFileFromOpenPanel(sandboxExtensionHandle), m_pageID);
+ }
+#endif
+
process()->send(Messages::WebPage::DidChooseFilesForOpenPanel(fileURLs), m_pageID);
m_openPanelResultListener->invalidate();
@@ -2096,6 +2312,10 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
case WebEvent::KeyUp:
case WebEvent::RawKeyDown:
case WebEvent::Char:
+#if ENABLE(GESTURE_EVENTS)
+ case WebEvent::GestureScrollBegin:
+ case WebEvent::GestureScrollEnd:
+#endif
process()->responsivenessTimer()->stop();
break;
}
@@ -2110,6 +2330,10 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
break;
case WebEvent::MouseDown:
case WebEvent::MouseUp:
+#if ENABLE(GESTURE_EVENTS)
+ case WebEvent::GestureScrollBegin:
+ case WebEvent::GestureScrollEnd:
+#endif
break;
case WebEvent::Wheel: {
@@ -2130,16 +2354,28 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
m_keyEventQueue.removeFirst();
+ m_pageClient->doneWithKeyEvent(event, handled);
+
if (handled)
break;
- m_pageClient->didNotHandleKeyEvent(event);
m_uiClient.didNotHandleKeyEvent(this, event);
break;
}
}
}
+void WebPageProxy::voidCallback(uint64_t callbackID)
+{
+ RefPtr<VoidCallback> callback = m_voidCallbacks.take(callbackID);
+ if (!callback) {
+ // FIXME: Log error or assert.
+ return;
+ }
+
+ callback->performCallback();
+}
+
void WebPageProxy::dataCallback(const CoreIPC::DataReference& dataReference, uint64_t callbackID)
{
RefPtr<DataCallback> callback = m_dataCallbacks.take(callbackID);
@@ -2162,13 +2398,30 @@ void WebPageProxy::stringCallback(const String& resultString, uint64_t callbackI
callback->performCallbackWithReturnValue(resultString.impl());
}
+void WebPageProxy::computedPagesCallback(const Vector<WebCore::IntRect>& pageRects, double totalScaleFactorForPrinting, uint64_t callbackID)
+{
+ RefPtr<ComputedPagesCallback> callback = m_computedPagesCallbacks.take(callbackID);
+ if (!callback) {
+ // FIXME: Log error or assert.
+ return;
+ }
+
+ callback->performCallbackWithReturnValue(pageRects, totalScaleFactorForPrinting);
+}
+
#if PLATFORM(MAC)
-void WebPageProxy::sendAccessibilityPresenterToken(const CoreIPC::DataReference& token)
+
+void WebPageProxy::registerWebProcessAccessibilityToken(const CoreIPC::DataReference& data)
+{
+ m_pageClient->accessibilityWebProcessTokenReceived(data);
+}
+
+void WebPageProxy::registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elementToken, const CoreIPC::DataReference& windowToken)
{
if (!isValid())
return;
- process()->send(Messages::WebPage::SendAccessibilityPresenterToken(token), m_pageID);
+ process()->send(Messages::WebPage::RegisterUIProcessAccessibilityTokens(elementToken, windowToken), m_pageID);
}
#endif
@@ -2249,8 +2502,13 @@ void WebPageProxy::processDidCrash()
m_toolTip = String();
+ m_mainFrameHasHorizontalScrollbar = false;
+ m_mainFrameHasVerticalScrollbar = false;
+
+ invalidateCallbackMap(m_voidCallbacks);
invalidateCallbackMap(m_dataCallbacks);
invalidateCallbackMap(m_stringCallbacks);
+ invalidateCallbackMap(m_computedPagesCallbacks);
Vector<WebEditCommandProxy*> editCommandVector;
copyToVector(m_editCommandSet, editCommandVector);
@@ -2302,6 +2560,15 @@ WebPageCreationParameters WebPageProxy::creationParameters() const
}
#if USE(ACCELERATED_COMPOSITING)
+void WebPageProxy::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
+{
+ m_pageClient->enterAcceleratedCompositingMode(layerTreeContext);
+}
+
+void WebPageProxy::exitAcceleratedCompositingMode()
+{
+ m_pageClient->exitAcceleratedCompositingMode();
+}
void WebPageProxy::didEnterAcceleratedCompositing()
{
@@ -2372,16 +2639,29 @@ float WebPageProxy::footerHeight(WebFrameProxy* frame)
return m_uiClient.footerHeight(this, frame);
}
-void WebPageProxy::drawHeader(WebFrameProxy* frame, const WebCore::FloatRect& rect)
+void WebPageProxy::drawHeader(WebFrameProxy* frame, const FloatRect& rect)
{
m_uiClient.drawHeader(this, frame, rect);
}
-void WebPageProxy::drawFooter(WebFrameProxy* frame, const WebCore::FloatRect& rect)
+void WebPageProxy::drawFooter(WebFrameProxy* frame, const FloatRect& rect)
{
m_uiClient.drawFooter(this, frame, rect);
}
+void WebPageProxy::didCompleteRubberBandForMainFrame(const IntSize& initialOverhang)
+{
+ m_uiClient.didCompleteRubberBandForMainFrame(this, initialOverhang);
+}
+
+void WebPageProxy::didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
+{
+ m_mainFrameHasHorizontalScrollbar = hasHorizontalScrollbar;
+ m_mainFrameHasVerticalScrollbar = hasVerticalScrollbar;
+
+ m_pageClient->didChangeScrollbarsForMainFrame();
+}
+
void WebPageProxy::didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference& dataReference)
{
m_pageClient->didFinishLoadingDataForCustomRepresentation(dataReference);
@@ -2392,6 +2672,11 @@ void WebPageProxy::setComplexTextInputEnabled(uint64_t pluginComplexTextInputIde
{
m_pageClient->setComplexTextInputEnabled(pluginComplexTextInputIdentifier, complexTextInputEnabled);
}
+
+void WebPageProxy::setAutodisplay(bool newState)
+{
+ m_pageClient->setAutodisplay(newState);
+}
#endif
void WebPageProxy::backForwardRemovedItem(uint64_t itemID)
@@ -2405,7 +2690,7 @@ void WebPageProxy::beginPrinting(WebFrameProxy* frame, const PrintInfo& printInf
return;
m_isInPrintingMode = true;
- process()->send(Messages::WebPage::BeginPrinting(frame->frameID(), printInfo), m_pageID);
+ process()->send(Messages::WebPage::BeginPrinting(frame->frameID(), printInfo), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
}
void WebPageProxy::endPrinting()
@@ -2414,20 +2699,30 @@ void WebPageProxy::endPrinting()
return;
m_isInPrintingMode = false;
- process()->send(Messages::WebPage::EndPrinting(), m_pageID);
+ process()->send(Messages::WebPage::EndPrinting(), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
}
-void WebPageProxy::computePagesForPrinting(WebFrameProxy* frame, const PrintInfo& printInfo, Vector<WebCore::IntRect>& resultPageRects, double& resultTotalScaleFactorForPrinting)
+void WebPageProxy::computePagesForPrinting(WebFrameProxy* frame, const PrintInfo& printInfo, PassRefPtr<ComputedPagesCallback> callback)
{
- // Layout for printing can take a long time, but we need to have the answer.
- process()->sendSync(Messages::WebPage::ComputePagesForPrinting(frame->frameID(), printInfo), Messages::WebPage::ComputePagesForPrinting::Reply(resultPageRects, resultTotalScaleFactorForPrinting), m_pageID);
+ uint64_t callbackID = callback->callbackID();
+ m_computedPagesCallbacks.set(callbackID, callback.get());
+ m_isInPrintingMode = true;
+ process()->send(Messages::WebPage::ComputePagesForPrinting(frame->frameID(), printInfo, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
}
#if PLATFORM(MAC)
-void WebPageProxy::drawRectToPDF(WebFrameProxy* frame, const IntRect& rect, Vector<uint8_t>& pdfData)
+void WebPageProxy::drawRectToPDF(WebFrameProxy* frame, const IntRect& rect, PassRefPtr<DataCallback> callback)
{
- // Printing can take a long time, but we need to have the answer.
- process()->sendSync(Messages::WebPage::DrawRectToPDF(frame->frameID(), rect), Messages::WebPage::DrawRectToPDF::Reply(pdfData), m_pageID);
+ uint64_t callbackID = callback->callbackID();
+ m_dataCallbacks.set(callbackID, callback.get());
+ process()->send(Messages::WebPage::DrawRectToPDF(frame->frameID(), rect, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
+}
+
+void WebPageProxy::drawPagesToPDF(WebFrameProxy* frame, uint32_t first, uint32_t count, PassRefPtr<DataCallback> callback)
+{
+ uint64_t callbackID = callback->callbackID();
+ m_dataCallbacks.set(callbackID, callback.get());
+ process()->send(Messages::WebPage::DrawPagesToPDF(frame->frameID(), first, count, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
}
#endif
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
index dc43e19..46aa240 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.h
+++ b/Source/WebKit2/UIProcess/WebPageProxy.h
@@ -31,6 +31,7 @@
#include "DragControllerAction.h"
#include "DrawingAreaProxy.h"
#include "GeolocationPermissionRequestManagerProxy.h"
+#include "SandboxExtension.h"
#include "SelectionState.h"
#include "SharedMemory.h"
#include "WKBase.h"
@@ -81,13 +82,11 @@ namespace WebCore {
namespace WebKit {
-class ContextMenuState;
class DrawingAreaProxy;
class NativeWebKeyboardEvent;
class PageClient;
class PlatformCertificateInfo;
class StringPairVector;
-class WebOpenPanelResultListenerProxy;
class WebBackForwardList;
class WebBackForwardListItem;
class WebContextMenuProxy;
@@ -95,16 +94,22 @@ class WebData;
class WebEditCommandProxy;
class WebKeyboardEvent;
class WebMouseEvent;
+class WebOpenPanelResultListenerProxy;
class WebPageGroup;
class WebPopupMenuProxy;
class WebProcessProxy;
class WebURLRequest;
class WebWheelEvent;
+struct ContextMenuState;
struct PlatformPopupMenuData;
struct PrintInfo;
struct WebPageCreationParameters;
struct WebPopupItem;
+#if ENABLE(GESTURE_EVENTS)
+class WebGestureEvent;
+#endif
+
typedef GenericCallback<WKStringRef, StringImpl*> StringCallback;
class WebPageProxy : public APIObject, public WebPopupMenuProxy::Client {
@@ -158,7 +163,7 @@ public:
bool canGoBack() const;
void goToBackForwardItem(WebBackForwardListItem*);
- void didChangeBackForwardList();
+ void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<RefPtr<APIObject> >* removedItems);
bool canShowMIMEType(const String& mimeType) const;
@@ -168,6 +173,9 @@ public:
bool drawsTransparentBackground() const { return m_drawsTransparentBackground; }
void setDrawsTransparentBackground(bool);
+ void viewWillStartLiveResize();
+ void viewWillEndLiveResize();
+
void setInitialFocus(bool);
void setWindowResizerSize(const WebCore::IntSize&);
@@ -215,6 +223,9 @@ public:
void handleMouseEvent(const WebMouseEvent&);
void handleWheelEvent(const WebWheelEvent&);
void handleKeyboardEvent(const NativeWebKeyboardEvent&);
+#if ENABLE(GESTURE_EVENTS)
+ void handleGestureEvent(const WebGestureEvent&);
+#endif
#if ENABLE(TOUCH_EVENTS)
void handleTouchEvent(const WebTouchEvent&);
#endif
@@ -233,7 +244,7 @@ public:
void setCustomTextEncodingName(const String&);
String customTextEncodingName() const { return m_customTextEncodingName; }
- double estimatedProgress() const { return m_estimatedProgress; }
+ double estimatedProgress() const;
void terminateProcess();
@@ -256,10 +267,18 @@ public:
bool useFixedLayout() const { return m_useFixedLayout; };
const WebCore::IntSize& fixedLayoutSize() const { return m_fixedLayoutSize; };
+ bool hasHorizontalScrollbar() const { return m_mainFrameHasHorizontalScrollbar; }
+ bool hasVerticalScrollbar() const { return m_mainFrameHasVerticalScrollbar; }
+
#if PLATFORM(MAC)
- void sendAccessibilityPresenterToken(const CoreIPC::DataReference&);
+ // Called by the web process through a message.
+ void registerWebProcessAccessibilityToken(const CoreIPC::DataReference&);
+ // Called by the UI process when it is ready to send its tokens to the web process.
+ void registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elemenToken, const CoreIPC::DataReference& windowToken);
#endif
+ void viewScaleFactorDidChange(double);
+
// Find.
void findString(const String&, FindOptions, unsigned maxMatchCount);
void hideFindUI();
@@ -273,23 +292,31 @@ public:
void getSourceForFrame(WebFrameProxy*, PassRefPtr<StringCallback>);
void getWebArchiveOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>);
void runJavaScriptInMainFrame(const String&, PassRefPtr<StringCallback>);
-
+ void forceRepaint(PassRefPtr<VoidCallback>);
+
float headerHeight(WebFrameProxy*);
float footerHeight(WebFrameProxy*);
void drawHeader(WebFrameProxy*, const WebCore::FloatRect&);
void drawFooter(WebFrameProxy*, const WebCore::FloatRect&);
+#if PLATFORM(MAC)
+ void setAutodisplay(bool);
+#endif
+
void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID);
void backForwardRemovedItem(uint64_t itemID);
// Drag and drop support.
- void performDragControllerAction(DragControllerAction, WebCore::DragData*, const String&);
+ void performDragControllerAction(DragControllerAction, WebCore::DragData*, const String& = String());
void didPerformDragControllerAction(uint64_t resultOperation);
void dragEnded(const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, uint64_t operation);
#if PLATFORM(MAC)
void setDragImage(const WebCore::IntPoint& clientPosition, const WebCore::IntSize& imageSize, const SharedMemory::Handle& dragImageHandle, bool isLinkDrag);
#endif
+#if PLATFORM(WIN)
+ void startDragDrop(const WebCore::IntPoint& imagePoint, const WebCore::IntPoint& dragPoint, uint64_t okEffect, const HashMap<UINT, Vector<String> >& dataMap, const WebCore::IntSize& dragImageSize, const SharedMemory::Handle& dragImageHandle, bool isLinkDrag);
+#endif
void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
@@ -298,6 +325,11 @@ public:
void processDidCrash();
#if USE(ACCELERATED_COMPOSITING)
+ virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
+ virtual void exitAcceleratedCompositingMode();
+#endif
+
+#if USE(ACCELERATED_COMPOSITING)
void didEnterAcceleratedCompositing();
void didLeaveAcceleratedCompositing();
#endif
@@ -356,11 +388,14 @@ public:
void beginPrinting(WebFrameProxy*, const PrintInfo&);
void endPrinting();
- void computePagesForPrinting(WebFrameProxy*, const PrintInfo&, Vector<WebCore::IntRect>& resultPageRects, double& resultTotalScaleFactorForPrinting);
+ void computePagesForPrinting(WebFrameProxy*, const PrintInfo&, PassRefPtr<ComputedPagesCallback>);
#if PLATFORM(MAC)
- void drawRectToPDF(WebFrameProxy*, const WebCore::IntRect&, Vector<uint8_t>& pdfData);
+ void drawRectToPDF(WebFrameProxy*, const WebCore::IntRect&, PassRefPtr<DataCallback>);
+ void drawPagesToPDF(WebFrameProxy*, uint32_t first, uint32_t count, PassRefPtr<DataCallback>);
#endif
+ const String& pendingAPIRequestURL() const { return m_pendingAPIRequestURL; }
+
private:
WebPageProxy(PageClient*, WebContext*, WebPageGroup*, uint64_t pageID);
@@ -397,16 +432,15 @@ private:
void didStartProgress();
void didChangeProgress(double);
void didFinishProgress();
- void didReceiveAccessibilityPageToken(const CoreIPC::DataReference&);
- void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const String& url, uint64_t listenerID);
- void decidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const String& url, uint64_t listenerID);
- void decidePolicyForMIMEType(uint64_t frameID, const String& MIMEType, const String& url, uint64_t listenerID, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID);
+ void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, uint64_t listenerID, CoreIPC::ArgumentDecoder*, bool& receivedPolicyAction, uint64_t& policyAction);
+ void decidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, CoreIPC::ArgumentDecoder*);
+ void decidePolicyForMIMEType(uint64_t frameID, const String& MIMEType, const WebCore::ResourceRequest&, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID);
void willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const StringPairVector& textFieldValues, uint64_t listenerID, CoreIPC::ArgumentDecoder*);
// Resource load client
- void didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceRequest&);
+ void didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, bool pageIsProvisionallyLoading);
void didSendRequestForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
void didReceiveResponseForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceResponse&);
void didReceiveContentLengthForResource(uint64_t frameID, uint64_t resourceIdentifier, uint64_t contentLength);
@@ -442,6 +476,8 @@ private:
void exceededDatabaseQuota(uint64_t frameID, const String& originIdentifier, const String& databaseName, const String& displayName, uint64_t currentQuota, uint64_t currentUsage, uint64_t expectedUsage, uint64_t& newQuota);
void requestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier);
void runModal() { m_uiClient.runModal(this); }
+ void didCompleteRubberBandForMainFrame(const WebCore::IntSize&);
+ void didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar);
void reattachToWebProcess();
void reattachToWebProcessWithItem(WebBackForwardListItem*);
@@ -477,12 +513,12 @@ private:
// Find.
void didCountStringMatches(const String&, uint32_t matchCount);
- void setFindIndicator(const WebCore::FloatRect& selectionRect, const Vector<WebCore::FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle, bool fadeOut);
+ void setFindIndicator(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle, bool fadeOut);
void didFindString(const String&, uint32_t matchCount);
void didFailToFindString(const String&);
// Popup Menu.
- void showPopupMenu(const WebCore::IntRect& rect, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData&);
+ void showPopupMenu(const WebCore::IntRect& rect, uint64_t textDirection, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData&);
void hidePopupMenu();
// Context Menu.
@@ -510,8 +546,10 @@ private:
void didReceiveEvent(uint32_t opaqueType, bool handled);
+ void voidCallback(uint64_t);
void dataCallback(const CoreIPC::DataReference&, uint64_t);
void stringCallback(const String&, uint64_t);
+ void computedPagesCallback(const Vector<WebCore::IntRect>&, double totalScaleFactorForPrinting, uint64_t);
void focusedFrameChanged(uint64_t frameID);
void frameSetLargestFrameChanged(uint64_t frameID);
@@ -531,6 +569,11 @@ private:
static String standardUserAgent(const String& applicationName = String());
+ void clearPendingAPIRequestURL() { m_pendingAPIRequestURL = String(); }
+ void setPendingAPIRequestURL(const String& pendingAPIRequestURL) { m_pendingAPIRequestURL = pendingAPIRequestURL; }
+
+ void initializeSandboxExtensionHandle(const WebCore::KURL&, SandboxExtension::Handle&);
+
PageClient* m_pageClient;
WebLoaderClient m_loaderClient;
WebPolicyClient m_policyClient;
@@ -556,8 +599,10 @@ private:
RefPtr<WebInspectorProxy> m_inspector;
#endif
+ HashMap<uint64_t, RefPtr<VoidCallback> > m_voidCallbacks;
HashMap<uint64_t, RefPtr<DataCallback> > m_dataCallbacks;
HashMap<uint64_t, RefPtr<StringCallback> > m_stringCallbacks;
+ HashMap<uint64_t, RefPtr<ComputedPagesCallback> > m_computedPagesCallbacks;
HashSet<WebEditCommandProxy*> m_editCommandSet;
@@ -603,12 +648,17 @@ private:
bool m_isClosed;
bool m_isInPrintingMode;
+ bool m_isPerformingDOMPrintOperation;
bool m_inDecidePolicyForMIMEType;
bool m_syncMimeTypePolicyActionIsValid;
WebCore::PolicyAction m_syncMimeTypePolicyAction;
uint64_t m_syncMimeTypePolicyDownloadID;
+ bool m_inDecidePolicyForNavigationAction;
+ bool m_syncNavigationActionPolicyActionIsValid;
+ WebCore::PolicyAction m_syncNavigationActionPolicyAction;
+
Deque<NativeWebKeyboardEvent> m_keyEventQueue;
bool m_processingWheelEvent;
OwnPtr<WebWheelEvent> m_nextWheelEvent;
@@ -628,6 +678,11 @@ private:
bool m_mainFrameHasCustomRepresentation;
WebCore::DragOperation m_currentDragOperation;
+
+ String m_pendingAPIRequestURL;
+
+ bool m_mainFrameHasHorizontalScrollbar;
+ bool m_mainFrameHasVerticalScrollbar;
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.messages.in b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
index 6456851..e566d02 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.messages.in
+++ b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
@@ -55,6 +55,8 @@ messages -> WebPageProxy {
RunOpenPanel(uint64_t frameID, WebKit::WebOpenPanelParameters::Data parameters)
PrintFrame(uint64_t frameID) -> ()
RunModal()
+ DidCompleteRubberBandForMainFrame(WebCore::IntSize initialOverhang)
+ DidChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
#if ENABLE(TILED_BACKING_STORE)
PageDidRequestScroll(WebCore::IntSize delta)
@@ -65,9 +67,9 @@ messages -> WebPageProxy {
#endif
# Policy messages
- DecidePolicyForMIMEType(uint64_t frameID, WTF::String MIMEType, WTF::String url, uint64_t listenerID) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID)
- DecidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, WTF::String url, uint64_t listenerID)
- DecidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, WTF::String url, uint64_t listenerID)
+ DecidePolicyForMIMEType(uint64_t frameID, WTF::String MIMEType, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID)
+ DecidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction)
+ DecidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, WebCore::ResourceRequest request, WTF::String frameName, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData)
# Progress messages
DidChangeProgress(double value)
@@ -99,7 +101,7 @@ messages -> WebPageProxy {
FrameDidBecomeFrameSet(uint64_t frameID, bool value)
# Resource load messages
- DidInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, WebCore::ResourceRequest request)
+ DidInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, WebCore::ResourceRequest request, bool pageIsProvisionallyLoading)
DidSendRequestForResource(uint64_t frameID, uint64_t resourceIdentifier, WebCore::ResourceRequest request, WebCore::ResourceResponse redirectResponse)
DidReceiveResponseForResource(uint64_t frameID, uint64_t resourceIdentifier, WebCore::ResourceResponse response)
DidReceiveContentLengthForResource(uint64_t frameID, uint64_t resourceIdentifier, uint64_t contentLength)
@@ -113,14 +115,20 @@ messages -> WebPageProxy {
WillSubmitForm(uint64_t frameID, uint64_t sourceFrameID, WebKit::StringPairVector textFieldValues, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData)
# Callback messages
+ VoidCallback(uint64_t callbackID)
DataCallback(CoreIPC::DataReference resultData, uint64_t callbackID)
StringCallback(WTF::String resultString, uint64_t callbackID)
+ ComputedPagesCallback(Vector<WebCore::IntRect> pageRects, double totalScaleFactorForPrinting, uint64_t callbackID)
- DidReceiveAccessibilityPageToken(CoreIPC::DataReference data)
+
+ ViewScaleFactorDidChange(double scaleFactor)
#if PLATFORM(MAC)
# Keyboard support messages
InterpretKeyEvent(uint32_t type) -> (Vector<WebCore::KeypressCommand> commandName, uint32_t selectionStart, uint32_t selectionEnd, Vector<WebCore::CompositionUnderline> underlines)
+
+ # Remote accessibility messages
+ RegisterWebProcessAccessibilityToken(CoreIPC::DataReference data)
#endif
# BackForward messages
@@ -149,7 +157,7 @@ messages -> WebPageProxy {
DidFailToFindString(WTF::String string)
# PopupMenu messages
- ShowPopupMenu(WebCore::IntRect rect, Vector<WebKit::WebPopupItem> items, int32_t selectedIndex, WebKit::PlatformPopupMenuData data)
+ ShowPopupMenu(WebCore::IntRect rect, uint64_t textDirection, Vector<WebKit::WebPopupItem> items, int32_t selectedIndex, WebKit::PlatformPopupMenuData data)
HidePopupMenu()
# ContextMenu messages
@@ -188,10 +196,13 @@ messages -> WebPageProxy {
GetGuessesForWord(WTF::String word, WTF::String context) -> (Vector<WTF::String> guesses)
LearnWord(WTF::String word);
IgnoreWord(WTF::String word);
-
+
# Drag and drop messages
DidPerformDragControllerAction(uint64_t resultOperation)
#if PLATFORM(MAC)
SetDragImage(WebCore::IntPoint clientPosition, WebCore::IntSize imageSize, WebKit::SharedMemory::Handle dragImage, bool linkDrag)
#endif
+#if PLATFORM(WIN)
+ StartDragDrop(WebCore::IntPoint imagePoint, WebCore::IntPoint dragPoint, uint64_t okEffect, HashMap<UINT,Vector<String> > dataMap, WebCore::IntSize dragImageSize, WebKit::SharedMemory::Handle dragImage, bool linkDrag)
+#endif
}
diff --git a/Source/WebKit2/UIProcess/WebPolicyClient.cpp b/Source/WebKit2/UIProcess/WebPolicyClient.cpp
index e7a8239..6296664 100644
--- a/Source/WebKit2/UIProcess/WebPolicyClient.cpp
+++ b/Source/WebKit2/UIProcess/WebPolicyClient.cpp
@@ -23,39 +23,46 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPolicyClient.h"
#include "WKAPICast.h"
-#include <wtf/text/WTFString.h>
+#include "WebURLRequest.h"
using namespace WebCore;
namespace WebKit {
-bool WebPolicyClient::decidePolicyForNavigationAction(WebPageProxy* page, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, const String& url, WebFrameProxy* frame, WebFramePolicyListenerProxy* listener)
+bool WebPolicyClient::decidePolicyForNavigationAction(WebPageProxy* page, WebFrameProxy* frame, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, const ResourceRequest& resourceRequest, WebFramePolicyListenerProxy* listener, APIObject* userData)
{
if (!m_client.decidePolicyForNavigationAction)
return false;
- m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toURLRef(url.impl()), toAPI(frame), toAPI(listener), m_client.clientInfo);
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(request.get()), toAPI(listener), toAPI(userData), m_client.clientInfo);
return true;
}
-bool WebPolicyClient::decidePolicyForNewWindowAction(WebPageProxy* page, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, const String& url, WebFrameProxy* frame, WebFramePolicyListenerProxy* listener)
+bool WebPolicyClient::decidePolicyForNewWindowAction(WebPageProxy* page, WebFrameProxy* frame, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, const ResourceRequest& resourceRequest, const String& frameName, WebFramePolicyListenerProxy* listener, APIObject* userData)
{
if (!m_client.decidePolicyForNewWindowAction)
return false;
- m_client.decidePolicyForNewWindowAction(toAPI(page), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toURLRef(url.impl()), toAPI(frame), toAPI(listener), m_client.clientInfo);
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ m_client.decidePolicyForNewWindowAction(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(request.get()), toAPI(frameName.impl()), toAPI(listener), toAPI(userData), m_client.clientInfo);
return true;
}
-bool WebPolicyClient::decidePolicyForMIMEType(WebPageProxy* page, const String& MIMEType, const String& url, WebFrameProxy* frame, WebFramePolicyListenerProxy* listener)
+bool WebPolicyClient::decidePolicyForMIMEType(WebPageProxy* page, WebFrameProxy* frame, const String& MIMEType, const ResourceRequest& resourceRequest, WebFramePolicyListenerProxy* listener, APIObject* userData)
{
if (!m_client.decidePolicyForMIMEType)
return false;
- m_client.decidePolicyForMIMEType(toAPI(page), toAPI(MIMEType.impl()), toURLRef(url.impl()), toAPI(frame), toAPI(listener), m_client.clientInfo);
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ m_client.decidePolicyForMIMEType(toAPI(page), toAPI(frame), toAPI(MIMEType.impl()), toAPI(request.get()), toAPI(listener), toAPI(userData), m_client.clientInfo);
return true;
}
diff --git a/Source/WebKit2/UIProcess/WebPolicyClient.h b/Source/WebKit2/UIProcess/WebPolicyClient.h
index 797bc37..c624c58 100644
--- a/Source/WebKit2/UIProcess/WebPolicyClient.h
+++ b/Source/WebKit2/UIProcess/WebPolicyClient.h
@@ -27,11 +27,16 @@
#define WebPolicyClient_h
#include "APIClient.h"
+#include "APIObject.h"
#include "WKPage.h"
#include "WebEvent.h"
#include <WebCore/FrameLoaderTypes.h>
#include <wtf/Forward.h>
+namespace WebCore {
+ class ResourceRequest;
+}
+
namespace WebKit {
class WebPageProxy;
@@ -40,9 +45,9 @@ class WebFramePolicyListenerProxy;
class WebPolicyClient : public APIClient<WKPagePolicyClient> {
public:
- bool decidePolicyForNavigationAction(WebPageProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, const String& url, WebFrameProxy*, WebFramePolicyListenerProxy*);
- bool decidePolicyForNewWindowAction(WebPageProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, const String& url, WebFrameProxy*, WebFramePolicyListenerProxy*);
- bool decidePolicyForMIMEType(WebPageProxy*, const String&, const String& url, WebFrameProxy*, WebFramePolicyListenerProxy*);
+ bool decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, const WebCore::ResourceRequest&, WebFramePolicyListenerProxy*, APIObject* userData);
+ bool decidePolicyForNewWindowAction(WebPageProxy*, WebFrameProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, const WebCore::ResourceRequest&, const String& frameName, WebFramePolicyListenerProxy*, APIObject* userData);
+ bool decidePolicyForMIMEType(WebPageProxy*, WebFrameProxy*, const String& MIMEType, const WebCore::ResourceRequest&, WebFramePolicyListenerProxy*, APIObject* userData);
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebPopupMenuProxy.h b/Source/WebKit2/UIProcess/WebPopupMenuProxy.h
index fd84928..78dad64 100644
--- a/Source/WebKit2/UIProcess/WebPopupMenuProxy.h
+++ b/Source/WebKit2/UIProcess/WebPopupMenuProxy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,6 +26,7 @@
#ifndef WebPopupMenuProxy_h
#define WebPopupMenuProxy_h
+#include <WebCore/TextDirection.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
@@ -56,9 +57,11 @@ public:
{
}
- virtual void showPopupMenu(const WebCore::IntRect& rect, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex) = 0;
+ virtual void showPopupMenu(const WebCore::IntRect& rect, WebCore::TextDirection, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex) = 0;
virtual void hidePopupMenu() = 0;
+ void invalidate() { m_client = 0; }
+
protected:
WebPopupMenuProxy(Client* client)
: m_client(client)
diff --git a/Source/WebKit2/UIProcess/WebPreferences.cpp b/Source/WebKit2/UIProcess/WebPreferences.cpp
index e33ebb2..efda4cd 100644
--- a/Source/WebKit2/UIProcess/WebPreferences.cpp
+++ b/Source/WebKit2/UIProcess/WebPreferences.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPreferences.h"
#include "WebPageGroup.h"
diff --git a/Source/WebKit2/UIProcess/WebProcessManager.cpp b/Source/WebKit2/UIProcess/WebProcessManager.cpp
index 94556f8..80e3c2d 100644
--- a/Source/WebKit2/UIProcess/WebProcessManager.cpp
+++ b/Source/WebKit2/UIProcess/WebProcessManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcessManager.h"
#include "WebContext.h"
diff --git a/Source/WebKit2/UIProcess/WebProcessProxy.cpp b/Source/WebKit2/UIProcess/WebProcessProxy.cpp
index c7e9382..67dc46b 100644
--- a/Source/WebKit2/UIProcess/WebProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebProcessProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcessProxy.h"
#include "DataReference.h"
@@ -43,6 +44,7 @@
#include <wtf/text/WTFString.h>
using namespace WebCore;
+using namespace std;
namespace WebKit {
@@ -76,7 +78,7 @@ WebProcessProxy::~WebProcessProxy()
m_connection->invalidate();
for (size_t i = 0; i < m_pendingMessages.size(); ++i)
- m_pendingMessages[i].releaseArguments();
+ m_pendingMessages[i].first.releaseArguments();
if (m_processLauncher) {
m_processLauncher->invalidate();
@@ -99,20 +101,22 @@ void WebProcessProxy::connect()
ProcessLauncher::LaunchOptions launchOptions;
launchOptions.processType = ProcessLauncher::WebProcess;
+
#if PLATFORM(MAC)
// We want the web process to match the architecture of the UI process.
launchOptions.architecture = ProcessLauncher::LaunchOptions::MatchCurrentArchitecture;
+ launchOptions.executableHeap = false;
#endif
m_processLauncher = ProcessLauncher::create(this, launchOptions);
}
}
-bool WebProcessProxy::sendMessage(CoreIPC::MessageID messageID, PassOwnPtr<CoreIPC::ArgumentEncoder> arguments)
+bool WebProcessProxy::sendMessage(CoreIPC::MessageID messageID, PassOwnPtr<CoreIPC::ArgumentEncoder> arguments, unsigned messageSendFlags)
{
// If we're waiting for the web process to launch, we need to stash away the messages so we can send them once we have
// a CoreIPC connection.
if (isLaunching()) {
- m_pendingMessages.append(CoreIPC::Connection::OutgoingMessage(messageID, arguments));
+ m_pendingMessages.append(make_pair(CoreIPC::Connection::OutgoingMessage(messageID, arguments), messageSendFlags));
return true;
}
@@ -120,7 +124,7 @@ bool WebProcessProxy::sendMessage(CoreIPC::MessageID messageID, PassOwnPtr<CoreI
if (!m_connection)
return false;
- return m_connection->sendMessage(messageID, arguments);
+ return m_connection->sendMessage(messageID, arguments, messageSendFlags);
}
bool WebProcessProxy::isLaunching() const
@@ -344,13 +348,16 @@ void WebProcessProxy::didFinishLaunching(CoreIPC::Connection::Identifier connect
m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main());
#if PLATFORM(MAC)
m_connection->setShouldCloseConnectionOnMachExceptions();
+#elif PLATFORM(QT)
+ m_connection->setShouldCloseConnectionOnProcessTermination(processIdentifier());
#endif
-
+
m_connection->open();
for (size_t i = 0; i < m_pendingMessages.size(); ++i) {
- CoreIPC::Connection::OutgoingMessage& outgoingMessage = m_pendingMessages[i];
- m_connection->sendMessage(outgoingMessage.messageID(), adoptPtr(outgoingMessage.arguments()));
+ CoreIPC::Connection::OutgoingMessage& outgoingMessage = m_pendingMessages[i].first;
+ unsigned messageSendFlags = m_pendingMessages[i].second;
+ m_connection->sendMessage(outgoingMessage.messageID(), adoptPtr(outgoingMessage.arguments()), messageSendFlags);
}
m_pendingMessages.clear();
diff --git a/Source/WebKit2/UIProcess/WebProcessProxy.h b/Source/WebKit2/UIProcess/WebProcessProxy.h
index 531d7fe..e4221fe 100644
--- a/Source/WebKit2/UIProcess/WebProcessProxy.h
+++ b/Source/WebKit2/UIProcess/WebProcessProxy.h
@@ -63,8 +63,7 @@ public:
void terminate();
- template<typename E, typename T> bool send(E messageID, uint64_t destinationID, const T& arguments);
- template<typename T> bool send(const T& message, uint64_t destinationID);
+ template<typename T> bool send(const T& message, uint64_t destinationID, unsigned messageSendFlags = 0);
template<typename U> bool sendSync(const U& message, const typename U::Reply& reply, uint64_t destinationID, double timeout = 1);
CoreIPC::Connection* connection() const
@@ -105,13 +104,16 @@ public:
void updateTextCheckerState();
void registerNewWebBackForwardListItem(WebBackForwardListItem*);
-
+
+ // FIXME: This variant of send is deprecated. All clients should move to an overload that take a message type.
+ template<typename E, typename T> bool deprecatedSend(E messageID, uint64_t destinationID, const T& arguments);
+
private:
explicit WebProcessProxy(WebContext*);
void connect();
- bool sendMessage(CoreIPC::MessageID, PassOwnPtr<CoreIPC::ArgumentEncoder>);
+ bool sendMessage(CoreIPC::MessageID, PassOwnPtr<CoreIPC::ArgumentEncoder>, unsigned messageSendFlags);
void addBackForwardItem(uint64_t itemID, const String& originalURLString, const String& urlString, const String& title, const CoreIPC::DataReference& backForwardData);
@@ -143,7 +145,7 @@ private:
ResponsivenessTimer m_responsivenessTimer;
RefPtr<CoreIPC::Connection> m_connection;
- Vector<CoreIPC::Connection::OutgoingMessage> m_pendingMessages;
+ Vector<std::pair<CoreIPC::Connection::OutgoingMessage, unsigned> > m_pendingMessages;
RefPtr<ProcessLauncher> m_processLauncher;
RefPtr<ThreadLauncher> m_threadLauncher;
@@ -155,21 +157,21 @@ private:
};
template<typename E, typename T>
-bool WebProcessProxy::send(E messageID, uint64_t destinationID, const T& arguments)
+bool WebProcessProxy::deprecatedSend(E messageID, uint64_t destinationID, const T& arguments)
{
OwnPtr<CoreIPC::ArgumentEncoder> argumentEncoder = CoreIPC::ArgumentEncoder::create(destinationID);
argumentEncoder->encode(arguments);
- return sendMessage(CoreIPC::MessageID(messageID), argumentEncoder.release());
+ return sendMessage(CoreIPC::MessageID(messageID), argumentEncoder.release(), 0);
}
template<typename T>
-bool WebProcessProxy::send(const T& message, uint64_t destinationID)
+bool WebProcessProxy::send(const T& message, uint64_t destinationID, unsigned messageSendFlags)
{
OwnPtr<CoreIPC::ArgumentEncoder> argumentEncoder = CoreIPC::ArgumentEncoder::create(destinationID);
argumentEncoder->encode(message);
- return sendMessage(CoreIPC::MessageID(T::messageID), argumentEncoder.release());
+ return sendMessage(CoreIPC::MessageID(T::messageID), argumentEncoder.release(), messageSendFlags);
}
template<typename U>
diff --git a/Source/WebKit2/UIProcess/WebResourceLoadClient.cpp b/Source/WebKit2/UIProcess/WebResourceLoadClient.cpp
index 675890f..f6dbe59 100644
--- a/Source/WebKit2/UIProcess/WebResourceLoadClient.cpp
+++ b/Source/WebKit2/UIProcess/WebResourceLoadClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebResourceLoadClient.h"
#include "WKAPICast.h"
@@ -33,13 +34,13 @@ using namespace WebCore;
namespace WebKit {
-void WebResourceLoadClient::didInitiateLoadForResource(WebPageProxy* page, WebFrameProxy* frame, uint64_t resourceIdentifier, const ResourceRequest& resourceRequest)
+void WebResourceLoadClient::didInitiateLoadForResource(WebPageProxy* page, WebFrameProxy* frame, uint64_t resourceIdentifier, const ResourceRequest& resourceRequest, bool pageIsProvisionallyLoading)
{
if (!m_client.didInitiateLoadForResource)
return;
RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
- return m_client.didInitiateLoadForResource(toAPI(page), toAPI(frame), resourceIdentifier, toAPI(request.get()), m_client.clientInfo);
+ return m_client.didInitiateLoadForResource(toAPI(page), toAPI(frame), resourceIdentifier, toAPI(request.get()), pageIsProvisionallyLoading, m_client.clientInfo);
}
void WebResourceLoadClient::didSendRequestForResource(WebPageProxy* page, WebFrameProxy* frame, uint64_t resourceIdentifier, const ResourceRequest& resourceRequest, const ResourceResponse& redirectResourceResponse)
diff --git a/Source/WebKit2/UIProcess/WebResourceLoadClient.h b/Source/WebKit2/UIProcess/WebResourceLoadClient.h
index e2e322f..9648379 100644
--- a/Source/WebKit2/UIProcess/WebResourceLoadClient.h
+++ b/Source/WebKit2/UIProcess/WebResourceLoadClient.h
@@ -43,7 +43,7 @@ class WebPageProxy;
class WebResourceLoadClient : public APIClient<WKPageResourceLoadClient> {
public:
- void didInitiateLoadForResource(WebPageProxy*, WebFrameProxy*, uint64_t resourceIdentifier, const WebCore::ResourceRequest&);
+ void didInitiateLoadForResource(WebPageProxy*, WebFrameProxy*, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, bool pageIsProvisionallyLoading);
void didSendRequestForResource(WebPageProxy*, WebFrameProxy*, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
void didReceiveResponseForResource(WebPageProxy*, WebFrameProxy*, uint64_t resourceIdentifier, const WebCore::ResourceResponse&);
void didReceiveContentLengthForResource(WebPageProxy*, WebFrameProxy*, uint64_t resourceIdentifier, uint64_t contentLength);
diff --git a/Source/WebKit2/UIProcess/WebUIClient.cpp b/Source/WebKit2/UIProcess/WebUIClient.cpp
index 9f2c7ab..076b331 100644
--- a/Source/WebKit2/UIProcess/WebUIClient.cpp
+++ b/Source/WebKit2/UIProcess/WebUIClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebUIClient.h"
#include "ImmutableDictionary.h"
@@ -326,4 +327,12 @@ void WebUIClient::runModal(WebPageProxy* page)
m_client.runModal(toAPI(page), m_client.clientInfo);
}
+void WebUIClient::didCompleteRubberBandForMainFrame(WebPageProxy* page, const IntSize& initialOverhang)
+{
+ if (!m_client.runModal)
+ return;
+
+ m_client.didCompleteRubberBandForMainFrame(toAPI(page), toAPI(initialOverhang), m_client.clientInfo);
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/WebUIClient.h b/Source/WebKit2/UIProcess/WebUIClient.h
index b873a8d..d8e0bff 100644
--- a/Source/WebKit2/UIProcess/WebUIClient.h
+++ b/Source/WebKit2/UIProcess/WebUIClient.h
@@ -96,6 +96,8 @@ public:
bool canRunModal() const;
void runModal(WebPageProxy*);
+
+ void didCompleteRubberBandForMainFrame(WebPageProxy*, const WebCore::IntSize&);
};
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp b/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp
index 3f03980..718e3b8 100644
--- a/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp
+++ b/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebBackForwardList.h"
#include "Logging.h"
#include <wtf/RetainPtr.h>
@@ -51,6 +52,8 @@ DEFINE_STATIC_GETTER(CFStringRef, SessionHistoryEntryDataKey, (CFSTR("SessionHis
CFDictionaryRef WebBackForwardList::createCFDictionaryRepresentation(WebPageProxy::WebPageProxySessionStateFilterCallback filter, void* context) const
{
+ ASSERT(m_current == NoCurrentItemIndex || m_current < m_entries.size());
+
RetainPtr<CFNumberRef> currentIndex(AdoptCF, CFNumberCreate(0, kCFNumberIntType, &m_current));
RetainPtr<CFMutableArrayRef> entries(AdoptCF, CFArrayCreateMutable(0, m_entries.size(), &kCFTypeArrayCallBacks));
@@ -61,7 +64,7 @@ CFDictionaryRef WebBackForwardList::createCFDictionaryRepresentation(WebPageProx
for (size_t i = 0; i < m_entries.size(); ++i) {
RefPtr<WebURL> webURL = WebURL::create(m_entries[i]->url());
- if (!filter(toAPI(m_page), WKPageGetSessionHistoryURLValueType(), toURLRef(m_entries[i]->originalURL().impl()), context))
+ if (filter && !filter(toAPI(m_page), WKPageGetSessionHistoryURLValueType(), toURLRef(m_entries[i]->originalURL().impl()), context))
continue;
RetainPtr<CFStringRef> url(AdoptCF, m_entries[i]->url().createCFString());
@@ -100,6 +103,16 @@ bool WebBackForwardList::restoreFromCFDictionaryRepresentation(CFDictionaryRef d
}
CFIndex size = CFArrayGetCount(cfEntries);
+ if (currentIndex != static_cast<CFIndex>(NoCurrentItemIndex) && currentIndex >= size) {
+ LOG(SessionState, "WebBackForwardList dictionary representation contains an invalid current index (%ld) for the number of entries (%ld)", currentIndex, size);
+ return false;
+ }
+
+ if (currentIndex == static_cast<CFIndex>(NoCurrentItemIndex) && size) {
+ LOG(SessionState, "WebBackForwardList dictionary representation says there is no current item index, but there is a list of %ld entries - this is bogus", size);
+ return false;
+ }
+
BackForwardListItemVector newEntries;
newEntries.reserveCapacity(size);
for (CFIndex i = 0; i < size; ++i) {
@@ -138,6 +151,7 @@ bool WebBackForwardList::restoreFromCFDictionaryRepresentation(CFDictionaryRef d
m_current = currentIndex;
m_entries = newEntries;
+
return true;
}
diff --git a/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp b/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp
index c1b7971..2065799 100644
--- a/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp
+++ b/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageProxy.h"
#include "DataReference.h"
@@ -132,7 +133,11 @@ void WebPageProxy::restoreFromSessionStateData(WebData* webData)
for (size_t i = 0; i < size; ++i)
process()->registerNewWebBackForwardListItem(entries[i].get());
- process()->send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(SessionState(m_backForwardList->entries(), m_backForwardList->currentIndex())), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ if (WebBackForwardListItem* item = m_backForwardList->currentItem())
+ initializeSandboxExtensionHandle(KURL(KURL(), item->url()), sandboxExtensionHandle);
+
+ process()->send(Messages::WebPage::RestoreSessionAndNavigateToCurrentItem(SessionState(m_backForwardList->entries(), m_backForwardList->currentIndex()), sandboxExtensionHandle), m_pageID);
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/cf/WebPreferencesCF.cpp b/Source/WebKit2/UIProcess/cf/WebPreferencesCF.cpp
index 7b89d04..1b7c2dc 100644
--- a/Source/WebKit2/UIProcess/cf/WebPreferencesCF.cpp
+++ b/Source/WebKit2/UIProcess/cf/WebPreferencesCF.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPreferences.h"
#if !PLATFORM(MAC)
diff --git a/Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp b/Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp
new file mode 100644
index 0000000..a5c708f
--- /dev/null
+++ b/Source/WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ChunkedUpdateDrawingAreaProxy.h"
+
+#include "RefPtrCairo.h"
+#include "UpdateChunk.h"
+#include "WebProcessProxy.h"
+#include "WebView.h"
+
+#include <gdk/gdk.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebPageProxy* ChunkedUpdateDrawingAreaProxy::page()
+{
+ return m_webView->page();
+}
+
+void ChunkedUpdateDrawingAreaProxy::ensureBackingStore()
+{
+ if (m_backingStoreImage)
+ return;
+
+ m_backingStoreImage = gdk_window_create_similar_surface(gtk_widget_get_window(m_webView->window()),
+ CAIRO_CONTENT_COLOR_ALPHA, size().width(), size().height());
+}
+
+void ChunkedUpdateDrawingAreaProxy::invalidateBackingStore()
+{
+ if (m_backingStoreImage) {
+ cairo_surface_destroy(m_backingStoreImage);
+ m_backingStoreImage = 0;
+ }
+}
+
+bool ChunkedUpdateDrawingAreaProxy::platformPaint(const IntRect& rect, cairo_t* cr)
+{
+ if (!m_backingStoreImage)
+ return false;
+
+ cairo_rectangle(cr, rect.x(), rect.y(), rect.width(), rect.height());
+ cairo_set_source_surface(cr, m_backingStoreImage, 0, 0);
+ cairo_fill(cr);
+
+ return true;
+}
+
+void ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore(UpdateChunk* updateChunk)
+{
+ ensureBackingStore();
+
+ RefPtr<cairo_surface_t> pixmap(updateChunk->createImage());
+ if (cairo_surface_status(pixmap.get()) != CAIRO_STATUS_SUCCESS)
+ return;
+
+ const IntRect& updateChunkRect = updateChunk->rect();
+
+ RefPtr<cairo_t> cr = cairo_create(m_backingStoreImage);
+ cairo_set_source_surface(cr.get(), pixmap.get(), updateChunkRect.x(), updateChunkRect.y());
+ cairo_paint(cr.get());
+
+ gtk_widget_queue_draw_area(m_webView->window(), updateChunkRect.x(), updateChunkRect.y(),
+ updateChunkRect.width(), updateChunkRect.height());
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp b/Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp
index 3d7ba2d..711783a 100644
--- a/Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp
+++ b/Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TextChecker.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp b/Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp
index 86ae636..8d6b515 100644
--- a/Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp
+++ b/Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorProxy.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp b/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp
index 71befa4..a36bd0c 100644
--- a/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp
+++ b/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageProxy.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp b/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp
index 3da7323..f7caee8 100644
--- a/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp
+++ b/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPreferences.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/mac/BackingStoreMac.mm b/Source/WebKit2/UIProcess/mac/BackingStoreMac.mm
index eacfefa..0a04eed 100644
--- a/Source/WebKit2/UIProcess/mac/BackingStoreMac.mm
+++ b/Source/WebKit2/UIProcess/mac/BackingStoreMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "BackingStore.h"
-
-#include "CGUtilities.h"
-#include "ShareableBitmap.h"
-#include "UpdateInfo.h"
-#include "WebPageProxy.h"
-#include <WebCore/GraphicsContext.h>
+#import "config.h"
+#import "BackingStore.h"
+
+#import "CGUtilities.h"
+#import "ShareableBitmap.h"
+#import "UpdateInfo.h"
+#import "WebPageProxy.h"
+#import <WebCore/GraphicsContext.h>
using namespace WebCore;
diff --git a/Source/WebKit2/UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm b/Source/WebKit2/UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm
index 909745b..a580a57 100644
--- a/Source/WebKit2/UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm
@@ -23,14 +23,15 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "ChunkedUpdateDrawingAreaProxy.h"
+#import "config.h"
+#import "ChunkedUpdateDrawingAreaProxy.h"
-#include "DrawingAreaMessageKinds.h"
-#include "DrawingAreaProxyMessageKinds.h"
-#include "UpdateChunk.h"
-#include "WKAPICast.h"
-#include "WKView.h"
-#include "WebPageProxy.h"
+#import "DrawingAreaMessageKinds.h"
+#import "DrawingAreaProxyMessageKinds.h"
+#import "UpdateChunk.h"
+#import "WKAPICast.h"
+#import "WKView.h"
+#import "WebPageProxy.h"
using namespace WebCore;
@@ -96,7 +97,7 @@ void ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore(UpdateChunk*
// Flip the destination.
CGContextScaleCTM(m_bitmapContext.get(), 1, -1);
- CGContextTranslateCTM(m_bitmapContext.get(), 0, -(updateChunkRect.y() + updateChunkRect.bottom()));
+ CGContextTranslateCTM(m_bitmapContext.get(), 0, -(updateChunkRect.y() + updateChunkRect.maxY()));
CGContextDrawImage(m_bitmapContext.get(), updateChunkRect, image.get());
diff --git a/Source/WebKit2/UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm b/Source/WebKit2/UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm
index 846eb25..1c3aee3 100644
--- a/Source/WebKit2/UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm
@@ -23,16 +23,17 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "LayerBackedDrawingAreaProxy.h"
+#import "config.h"
+#import "LayerBackedDrawingAreaProxy.h"
-#include "DrawingAreaMessageKinds.h"
-#include "DrawingAreaProxyMessageKinds.h"
-#include <QuartzCore/QuartzCore.h>
-#include "WKAPICast.h"
-#include "WKView.h"
-#include "WKViewInternal.h"
-#include "WebKitSystemInterface.h"
-#include "WebPageProxy.h"
+#import "DrawingAreaMessageKinds.h"
+#import "DrawingAreaProxyMessageKinds.h"
+#import <QuartzCore/QuartzCore.h>
+#import "WKAPICast.h"
+#import "WKView.h"
+#import "WKViewInternal.h"
+#import "WebKitSystemInterface.h"
+#import "WebPageProxy.h"
using namespace WebCore;
@@ -89,4 +90,19 @@ void LayerBackedDrawingAreaProxy::detachCompositingContext()
m_compositingRootLayer = 0;
}
+bool LayerBackedDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingContext context)
+{
+ WebPageProxy* webPageProxy = page();
+ if (webPageProxy->drawsBackground() && webPageProxy->drawsTransparentBackground()) {
+ CGContextSaveGState(context);
+ CGContextSetBlendMode(context, kCGBlendModeCopy);
+ CGContextSetFillColorWithColor(context, CGColorGetConstantColor(kCGColorClear));
+ CGContextFillRect(context, rect);
+
+ CGContextRestoreGState(context);
+ }
+
+ return true;
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/mac/TextCheckerMac.mm b/Source/WebKit2/UIProcess/mac/TextCheckerMac.mm
index c89011e..ceb140a 100644
--- a/Source/WebKit2/UIProcess/mac/TextCheckerMac.mm
+++ b/Source/WebKit2/UIProcess/mac/TextCheckerMac.mm
@@ -23,23 +23,24 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "TextChecker.h"
+#import "config.h"
+#import "TextChecker.h"
-#include "TextCheckerState.h"
-#include <wtf/RetainPtr.h>
+#import "TextCheckerState.h"
+#import <wtf/RetainPtr.h>
#ifndef BUILDING_ON_SNOW_LEOPARD
#import <AppKit/NSTextChecker.h>
#endif
-static const NSString * const WebAutomaticSpellingCorrectionEnabled = @"WebAutomaticSpellingCorrectionEnabled";
-static const NSString * const WebContinuousSpellCheckingEnabled = @"WebContinuousSpellCheckingEnabled";
-static const NSString * const WebGrammarCheckingEnabled = @"WebGrammarCheckingEnabled";
-static const NSString * const WebSmartInsertDeleteEnabled = @"WebSmartInsertDeleteEnabled";
-static const NSString * const WebAutomaticQuoteSubstitutionEnabled = @"WebAutomaticQuoteSubstitutionEnabled";
-static const NSString * const WebAutomaticDashSubstitutionEnabled = @"WebAutomaticDashSubstitutionEnabled";
-static const NSString * const WebAutomaticLinkDetectionEnabled = @"WebAutomaticLinkDetectionEnabled";
-static const NSString * const WebAutomaticTextReplacementEnabled = @"WebAutomaticTextReplacementEnabled";
+static NSString* const WebAutomaticSpellingCorrectionEnabled = @"WebAutomaticSpellingCorrectionEnabled";
+static NSString* const WebContinuousSpellCheckingEnabled = @"WebContinuousSpellCheckingEnabled";
+static NSString* const WebGrammarCheckingEnabled = @"WebGrammarCheckingEnabled";
+static NSString* const WebSmartInsertDeleteEnabled = @"WebSmartInsertDeleteEnabled";
+static NSString* const WebAutomaticQuoteSubstitutionEnabled = @"WebAutomaticQuoteSubstitutionEnabled";
+static NSString* const WebAutomaticDashSubstitutionEnabled = @"WebAutomaticDashSubstitutionEnabled";
+static NSString* const WebAutomaticLinkDetectionEnabled = @"WebAutomaticLinkDetectionEnabled";
+static NSString* const WebAutomaticTextReplacementEnabled = @"WebAutomaticTextReplacementEnabled";
using namespace WebCore;
diff --git a/Source/WebKit2/UIProcess/mac/WebContextMac.mm b/Source/WebKit2/UIProcess/mac/WebContextMac.mm
index 4d1679f..9f635c1 100644
--- a/Source/WebKit2/UIProcess/mac/WebContextMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebContextMac.mm
@@ -23,12 +23,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebContext.h"
+#import "config.h"
+#import "WebContext.h"
-#include "WebKitSystemInterface.h"
-#include "WebProcessCreationParameters.h"
-#include <WebCore/FileSystem.h>
-#include <sys/param.h>
+#import "WebKitSystemInterface.h"
+#import "WebProcessCreationParameters.h"
+#import <WebCore/FileSystem.h>
+#import <sys/param.h>
using namespace WebCore;
@@ -90,5 +91,10 @@ void WebContext::platformInitializeWebProcess(WebProcessCreationParameters& para
parameters.uiProcessBundleResourcePath = fileSystemRepresentation([[NSBundle mainBundle] resourcePath]);
}
+String WebContext::platformDefaultDatabaseDirectory() const
+{
+ return [@"~/Library/WebKit/Databases" stringByStandardizingPath];
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h b/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h
index ee4fa3d..20ffd0b 100644
--- a/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h
+++ b/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h
@@ -29,13 +29,8 @@
#include "WebContextMenuProxy.h"
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSPopUpButtonCell;
-@class WKView;
-#else
-class NSPopUpButtonCell;
-class WKView;
-#endif
+OBJC_CLASS NSPopUpButtonCell;
+OBJC_CLASS WKView;
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm
index d76b997..67139b3 100644
--- a/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm
@@ -23,14 +23,15 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebContextMenuProxyMac.h"
+#import "config.h"
+#import "WebContextMenuProxyMac.h"
-#include "PageClientImpl.h"
-#include "WebContextMenuItemData.h"
-#include "WKView.h"
+#import "PageClientImpl.h"
+#import "WebContextMenuItemData.h"
+#import "WKView.h"
-#include <WebCore/IntRect.h>
-#include <WebKitSystemInterface.h>
+#import <WebCore/IntRect.h>
+#import <WebKitSystemInterface.h>
using namespace WebCore;
diff --git a/Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm
index e129094..37a6f97 100644
--- a/Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebInspectorProxy.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm
index cd3e6f1..e641fe0 100644
--- a/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm
@@ -23,11 +23,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPageProxy.h"
+#import "config.h"
+#import "WebPageProxy.h"
-#include "PageClient.h"
-#include <WebCore/Language.h>
-#include <wtf/text/StringConcatenate.h>
+#import "PageClient.h"
+#import <WebCore/Language.h>
+#import <wtf/text/StringConcatenate.h>
@interface NSApplication (Details)
- (void)speakString:(NSString *)string;
diff --git a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.h b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.h
index 85339d6..788fd20 100644
--- a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.h
+++ b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.h
@@ -29,13 +29,8 @@
#include "WebPopupMenuProxy.h"
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSPopUpButtonCell;
-@class WKView;
-#else
-class NSPopUpButtonCell;
-class WKView;
-#endif
+OBJC_CLASS NSPopUpButtonCell;
+OBJC_CLASS WKView;
namespace WebKit {
@@ -49,13 +44,13 @@ public:
}
~WebPopupMenuProxyMac();
- virtual void showPopupMenu(const WebCore::IntRect&, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
+ virtual void showPopupMenu(const WebCore::IntRect&, WebCore::TextDirection, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
virtual void hidePopupMenu();
private:
WebPopupMenuProxyMac(WKView*, WebPopupMenuProxy::Client* client);
- void populate(const Vector<WebPopupItem>&);
+ void populate(const Vector<WebPopupItem>&, WebCore::TextDirection);
RetainPtr<NSPopUpButtonCell> m_popup;
WKView* m_webView;
diff --git a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
index 481e8c5..61713fc 100644
--- a/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebPopupMenuProxyMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPopupMenuProxyMac.h"
+#import "config.h"
+#import "WebPopupMenuProxyMac.h"
-#include "PageClientImpl.h"
-#include "PlatformPopupMenuData.h"
-#include "WKView.h"
-#include "WebPopupItem.h"
-#include <WebKitSystemInterface.h>
+#import "PageClientImpl.h"
+#import "PlatformPopupMenuData.h"
+#import "WKView.h"
+#import "WebPopupItem.h"
+#import <WebKitSystemInterface.h>
using namespace WebCore;
@@ -47,7 +48,7 @@ WebPopupMenuProxyMac::~WebPopupMenuProxyMac()
[m_popup.get() setControlView:nil];
}
-void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items)
+void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items, TextDirection menuTextDirection)
{
if (m_popup)
[m_popup.get() removeAllItems];
@@ -63,20 +64,38 @@ void WebPopupMenuProxyMac::populate(const Vector<WebPopupItem>& items)
if (items[i].m_type == WebPopupItem::Seperator)
[[m_popup.get() menu] addItem:[NSMenuItem separatorItem]];
else {
- [m_popup.get() addItemWithTitle:nsStringFromWebCoreString(items[i].m_text)];
- NSMenuItem* menuItem = [m_popup.get() lastItem];
+ [m_popup.get() addItemWithTitle:@""];
+ NSMenuItem *menuItem = [m_popup.get() lastItem];
+
+ RetainPtr<NSMutableParagraphStyle> paragraphStyle(AdoptNS, [[NSParagraphStyle defaultParagraphStyle] mutableCopy]);
+ NSWritingDirection writingDirection = items[i].m_textDirection == LTR ? NSWritingDirectionLeftToRight : NSWritingDirectionRightToLeft;
+ [paragraphStyle.get() setBaseWritingDirection:writingDirection];
+ [paragraphStyle.get() setAlignment:menuTextDirection == LTR ? NSLeftTextAlignment : NSRightTextAlignment];
+ RetainPtr<NSMutableDictionary> attributes(AdoptNS, [[NSMutableDictionary alloc] initWithObjectsAndKeys:
+ paragraphStyle.get(), NSParagraphStyleAttributeName,
+ [m_popup.get() font], NSFontAttributeName,
+ nil]);
+ if (items[i].m_hasTextDirectionOverride) {
+ RetainPtr<NSNumber> writingDirectionValue(AdoptNS, [[NSNumber alloc] initWithInteger:writingDirection + NSTextWritingDirectionOverride]);
+ RetainPtr<NSArray> writingDirectionArray(AdoptNS, [[NSArray alloc] initWithObjects:writingDirectionValue.get(), nil]);
+ [attributes.get() setObject:writingDirectionArray.get() forKey:NSWritingDirectionAttributeName];
+ }
+ RetainPtr<NSAttributedString> string(AdoptNS, [[NSAttributedString alloc] initWithString:nsStringFromWebCoreString(items[i].m_text) attributes:attributes.get()]);
+
+ [menuItem setAttributedTitle:string.get()];
[menuItem setEnabled:items[i].m_isEnabled];
[menuItem setToolTip:nsStringFromWebCoreString(items[i].m_toolTip)];
}
}
}
-void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
+void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, TextDirection textDirection, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
{
- populate(items);
+ populate(items, textDirection);
[m_popup.get() attachPopUpWithFrame:rect inView:m_webView];
[m_popup.get() selectItemAtIndex:selectedIndex];
+ [m_popup.get() setUserInterfaceLayoutDirection:textDirection == LTR ? NSUserInterfaceLayoutDirectionLeftToRight : NSUserInterfaceLayoutDirectionRightToLeft];
NSMenu* menu = [m_popup.get() menu];
@@ -97,7 +116,8 @@ void WebPopupMenuProxyMac::showPopupMenu(const IntRect& rect, const Vector<WebPo
[m_popup.get() dismissPopUp];
[dummyView.get() removeFromSuperview];
- m_client->valueChangedForPopupMenu(this, [m_popup.get() indexOfSelectedItem]);
+ if (m_client)
+ m_client->valueChangedForPopupMenu(this, [m_popup.get() indexOfSelectedItem]);
}
void WebPopupMenuProxyMac::hidePopupMenu()
@@ -105,5 +125,4 @@ void WebPopupMenuProxyMac::hidePopupMenu()
[m_popup.get() dismissPopUp];
}
-
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm b/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm
index b954bd2..f2f41d3 100644
--- a/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPreferences.h"
+#import "config.h"
+#import "WebPreferences.h"
-#include "PageClientImpl.h"
-#include <wtf/text/StringConcatenate.h>
+#import "PageClientImpl.h"
+#import <wtf/text/StringConcatenate.h>
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp b/Source/WebKit2/UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp
index 06ce7c6..c323fef 100644
--- a/Source/WebKit2/UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingAreaProxy.h"
#include "DrawingAreaMessageKinds.h"
@@ -73,7 +74,7 @@ void ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore(UpdateChunk*
const IntRect& updateChunkRect = updateChunk->rect();
QPainter painter(&m_backingStoreImage);
- painter.drawImage(updateChunkRect.topLeft(), image);
+ painter.drawImage(updateChunkRect.location(), image);
m_webView->update(QRect(updateChunkRect));
}
diff --git a/Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp b/Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp
index 9ab6297..2e124d5 100644
--- a/Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TextChecker.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp b/Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp
index 59faa1e..5dda454 100644
--- a/Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TiledDrawingAreaProxy.h"
#if ENABLE(TILED_BACKING_STORE)
diff --git a/Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp b/Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp
index 2b631ca..11e325f 100644
--- a/Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TiledDrawingAreaTile.h"
#if ENABLE(TILED_BACKING_STORE)
@@ -88,11 +89,11 @@ void TiledDrawingAreaTile::invalidate(const IntRect& dirtyRect)
void TiledDrawingAreaTile::resize(const IntSize& newSize)
{
IntRect oldRect = m_rect;
- m_rect = IntRect(m_rect.topLeft(), newSize);
- if (m_rect.right() > oldRect.right())
- invalidate(IntRect(oldRect.right(), oldRect.y(), m_rect.right() - oldRect.right(), m_rect.height()));
- if (m_rect.bottom() > oldRect.bottom())
- invalidate(IntRect(oldRect.x(), oldRect.bottom(), m_rect.width(), m_rect.bottom() - oldRect.bottom()));
+ m_rect = IntRect(m_rect.location(), newSize);
+ if (m_rect.maxX() > oldRect.maxX())
+ invalidate(IntRect(oldRect.maxX(), oldRect.y(), m_rect.maxX() - oldRect.maxX(), m_rect.height()));
+ if (m_rect.maxY() > oldRect.maxY())
+ invalidate(IntRect(oldRect.x(), oldRect.maxY(), m_rect.width(), m_rect.maxY() - oldRect.maxY()));
}
void TiledDrawingAreaTile::swapBackBufferToFront()
@@ -131,7 +132,7 @@ void TiledDrawingAreaTile::updateFromChunk(UpdateChunk* updateChunk, float)
if (m_backBuffer.isNull())
m_backBuffer = m_buffer.isNull() ? QPixmap(m_proxy->tileSize()) : m_buffer;
QPainter painter(&m_backBuffer);
- IntSize drawPoint = updateChunkRect.topLeft() - m_rect.topLeft();
+ IntSize drawPoint = updateChunkRect.location() - m_rect.location();
painter.drawImage(QPoint(drawPoint.width(), drawPoint.height()), image);
}
m_hasUpdatePending = false;
diff --git a/Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp b/Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp
index 566a22e..09638b6 100644
--- a/Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuProxyQt.h"
#include <IntPoint.h>
diff --git a/Source/WebKit2/UIProcess/qt/WebContextQt.cpp b/Source/WebKit2/UIProcess/qt/WebContextQt.cpp
index 5b2cd88..c1301d5 100644
--- a/Source/WebKit2/UIProcess/qt/WebContextQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebContextQt.cpp
@@ -24,10 +24,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContext.h"
#include "ApplicationCacheStorage.h"
#include "WebProcessCreationParameters.h"
+#include <QProcess>
namespace WebKit {
@@ -42,6 +44,13 @@ String WebContext::applicationCacheDirectory()
void WebContext::platformInitializeWebProcess(WebProcessCreationParameters&)
{
+ qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus");
+}
+
+String WebContext::platformDefaultDatabaseDirectory() const
+{
+ // FIXME: Implement.
+ return "";
}
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp b/Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp
index c04bd99..fe0dac5 100644
--- a/Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorProxy.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp b/Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp
index baf765a..1fa90bb 100644
--- a/Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageProxy.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
index 5e13499..a79cc3c 100644
--- a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPopupMenuProxyQt.h"
#include "PlatformPopupMenuData.h"
@@ -41,7 +42,7 @@ WebPopupMenuProxyQt::~WebPopupMenuProxyQt()
{
}
-void WebPopupMenuProxyQt::showPopupMenu(const IntRect& rect, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
+void WebPopupMenuProxyQt::showPopupMenu(const IntRect& rect, WebCore::TextDirection, const Vector<WebPopupItem>& items, const PlatformPopupMenuData&, int32_t selectedIndex)
{
}
diff --git a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.h b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.h
index e6c7a1e..f41432c 100644
--- a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.h
+++ b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.h
@@ -38,7 +38,7 @@ public:
}
~WebPopupMenuProxyQt();
- virtual void showPopupMenu(const WebCore::IntRect&, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
+ virtual void showPopupMenu(const WebCore::IntRect&, WebCore::TextDirection, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
virtual void hidePopupMenu();
private:
diff --git a/Source/WebKit2/UIProcess/qt/WebPreferencesQt.cpp b/Source/WebKit2/UIProcess/qt/WebPreferencesQt.cpp
index 173cfd5..fae4a2d 100644
--- a/Source/WebKit2/UIProcess/qt/WebPreferencesQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebPreferencesQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPreferences.h"
namespace WebKit {
diff --git a/Source/WebKit2/UIProcess/win/BackingStoreWin.cpp b/Source/WebKit2/UIProcess/win/BackingStoreWin.cpp
new file mode 100644
index 0000000..801376f
--- /dev/null
+++ b/Source/WebKit2/UIProcess/win/BackingStoreWin.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "BackingStore.h"
+
+#include "ShareableBitmap.h"
+#include "UpdateInfo.h"
+#include <WebCore/BitmapInfo.h>
+#include <WebCore/GraphicsContext.h>
+#include <WebCore/IntRect.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+class BitmapDC {
+ WTF_MAKE_NONCOPYABLE(BitmapDC);
+
+public:
+ BitmapDC(HBITMAP, HDC destinationDC);
+ ~BitmapDC();
+
+ operator HDC() const { return m_dc.get(); }
+
+private:
+ OwnPtr<HDC> m_dc;
+ HBITMAP m_originalBitmap;
+};
+
+BitmapDC::BitmapDC(HBITMAP bitmap, HDC destinationDC)
+ : m_dc(adoptPtr(::CreateCompatibleDC(destinationDC)))
+ , m_originalBitmap(static_cast<HBITMAP>(::SelectObject(m_dc.get(), bitmap)))
+{
+}
+
+BitmapDC::~BitmapDC()
+{
+ ::SelectObject(m_dc.get(), m_originalBitmap);
+}
+
+void BackingStore::paint(HDC dc, const IntRect& rect)
+{
+ ASSERT(m_bitmap);
+ ::BitBlt(dc, rect.x(), rect.y(), rect.width(), rect.height(), BitmapDC(m_bitmap.get(), dc), rect.x(), rect.y(), SRCCOPY);
+}
+
+static PassOwnPtr<HBITMAP> createBitmap(const IntSize& size)
+{
+ // FIXME: Maybe it would be better for performance to create a device-dependent bitmap here?
+ BitmapInfo info = BitmapInfo::createBottomUp(size);
+ void* bits;
+ return adoptPtr(::CreateDIBSection(0, &info, DIB_RGB_COLORS, &bits, 0, 0));
+}
+
+void BackingStore::incorporateUpdate(ShareableBitmap* bitmap, const UpdateInfo& updateInfo)
+{
+ if (!m_bitmap)
+ m_bitmap = createBitmap(m_size);
+
+ scroll(updateInfo.scrollRect, updateInfo.scrollOffset);
+
+ IntPoint updateRectLocation = updateInfo.updateRectBounds.location();
+
+ BitmapDC dc(m_bitmap.get(), 0);
+ GraphicsContext graphicsContext(dc);
+
+ // Paint all update rects.
+ for (size_t i = 0; i < updateInfo.updateRects.size(); ++i) {
+ IntRect updateRect = updateInfo.updateRects[i];
+ IntRect srcRect = updateRect;
+ srcRect.move(-updateRectLocation.x(), -updateRectLocation.y());
+
+ bitmap->paint(graphicsContext, updateRect.location(), srcRect);
+ }
+}
+
+void BackingStore::scroll(const IntRect& scrollRect, const IntSize& scrollOffset)
+{
+ if (scrollOffset.isZero())
+ return;
+
+ RECT winScrollRect = scrollRect;
+ ::ScrollDC(BitmapDC(m_bitmap.get(), 0), scrollOffset.width(), scrollOffset.height(), &winScrollRect, &winScrollRect, 0, 0);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp b/Source/WebKit2/UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp
index 6a1ee36..e7ce37a 100644
--- a/Source/WebKit2/UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingAreaProxy.h"
#include "UpdateChunk.h"
diff --git a/Source/WebKit2/UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp b/Source/WebKit2/UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp
index 8259272..58dc3b0 100644
--- a/Source/WebKit2/UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if USE(ACCELERATED_COMPOSITING)
-
+#include "config.h"
#include "LayerBackedDrawingAreaProxy.h"
+#if USE(ACCELERATED_COMPOSITING)
+
#include "DrawingAreaMessageKinds.h"
#include "DrawingAreaProxyMessageKinds.h"
#include "WebView.h"
diff --git a/Source/WebKit2/UIProcess/win/TextCheckerWin.cpp b/Source/WebKit2/UIProcess/win/TextCheckerWin.cpp
index 3c4b1eb..a16f169 100644
--- a/Source/WebKit2/UIProcess/win/TextCheckerWin.cpp
+++ b/Source/WebKit2/UIProcess/win/TextCheckerWin.cpp
@@ -23,8 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "TextChecker.h"
+#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
#include "NotImplemented.h"
#include "TextCheckerState.h"
diff --git a/Source/WebKit2/UIProcess/win/WebContextMenuProxyWin.cpp b/Source/WebKit2/UIProcess/win/WebContextMenuProxyWin.cpp
index 090598f..f8f3a24 100644
--- a/Source/WebKit2/UIProcess/win/WebContextMenuProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/WebContextMenuProxyWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuProxyWin.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/UIProcess/win/WebContextWin.cpp b/Source/WebKit2/UIProcess/win/WebContextWin.cpp
index 83b586d..210d6cc 100644
--- a/Source/WebKit2/UIProcess/win/WebContextWin.cpp
+++ b/Source/WebKit2/UIProcess/win/WebContextWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContext.h"
#include "WebProcessCreationParameters.h"
@@ -52,5 +53,10 @@ void WebContext::platformInitializeWebProcess(WebProcessCreationParameters& para
parameters.shouldPaintNativeControls = m_shouldPaintNativeControls;
}
+String WebContext::platformDefaultDatabaseDirectory() const
+{
+ return WebCore::pathByAppendingComponent(WebCore::localUserSpecificStorageDirectory(), "Databases");
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/win/WebInspectorProxyWin.cpp b/Source/WebKit2/UIProcess/win/WebInspectorProxyWin.cpp
index 7637429..35d73ac 100644
--- a/Source/WebKit2/UIProcess/win/WebInspectorProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/WebInspectorProxyWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorProxy.h"
#if ENABLE(INSPECTOR)
@@ -171,10 +172,13 @@ void WebInspectorProxy::platformOpen()
void WebInspectorProxy::platformClose()
{
- ASSERT(m_inspectorWindow);
- ASSERT(m_inspectorView);
+ ASSERT(!m_isVisible || m_inspectorWindow);
+ ASSERT(!m_isVisible || m_inspectorView);
- ::DestroyWindow(m_inspectorWindow);
+ if (m_inspectorWindow) {
+ ASSERT(::IsWindow(m_inspectorWindow));
+ ::DestroyWindow(m_inspectorWindow);
+ }
m_inspectorWindow = 0;
m_inspectorView = 0;
diff --git a/Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp b/Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp
index 6b0efd1..f70363c 100644
--- a/Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageProxy.h"
#include <tchar.h>
diff --git a/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp b/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp
index 40e3556..4039c49 100644
--- a/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp
+++ b/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.cpp
@@ -26,6 +26,7 @@
// NOTE: This implementation is very similar to the implementation of popups in WebCore::PopupMenuWin.
// We should try and factor out the common bits and share them.
+#include "config.h"
#include "WebPopupMenuProxyWin.h"
#include "WebView.h"
@@ -187,7 +188,7 @@ WebPopupMenuProxyWin::~WebPopupMenuProxyWin()
m_scrollbar->setParent(0);
}
-void WebPopupMenuProxyWin::showPopupMenu(const IntRect& rect, const Vector<WebPopupItem>& items, const PlatformPopupMenuData& data, int32_t selectedIndex)
+void WebPopupMenuProxyWin::showPopupMenu(const IntRect& rect, TextDirection, const Vector<WebPopupItem>& items, const PlatformPopupMenuData& data, int32_t selectedIndex)
{
m_items = items;
m_data = data;
@@ -323,7 +324,8 @@ void WebPopupMenuProxyWin::showPopupMenu(const IntRect& rect, const Vector<WebPo
m_showPopup = false;
::ShowWindow(m_popup, SW_HIDE);
- m_client->valueChangedForPopupMenu(this, m_newSelectedIndex);
+ if (m_client)
+ m_client->valueChangedForPopupMenu(this, m_newSelectedIndex);
}
void WebPopupMenuProxyWin::hidePopupMenu()
@@ -372,7 +374,7 @@ void WebPopupMenuProxyWin::calculatePositionAndSize(const IntRect& rect)
// Always left-align items in the popup. This matches popup menus on the mac.
int popupX = rectInScreenCoords.x() + m_data.m_clientInsetLeft;
- IntRect popupRect(popupX, rectInScreenCoords.bottom(), popupWidth, popupHeight);
+ IntRect popupRect(popupX, rectInScreenCoords.maxY(), popupWidth, popupHeight);
// The popup needs to stay within the bounds of the screen and not overlap any toolbars
HMONITOR monitor = ::MonitorFromWindow(m_webView->window(), MONITOR_DEFAULTTOPRIMARY);
@@ -382,7 +384,7 @@ void WebPopupMenuProxyWin::calculatePositionAndSize(const IntRect& rect)
FloatRect screen = monitorInfo.rcWork;
// Check that we don't go off the screen vertically
- if (popupRect.bottom() > screen.height()) {
+ if (popupRect.maxY() > screen.height()) {
// The popup will go off the screen, so try placing it above the client
if (rectInScreenCoords.y() - popupRect.height() < 0) {
// The popup won't fit above, either, so place it whereever's bigger and resize it to fit
@@ -848,8 +850,10 @@ bool WebPopupMenuProxyWin::setFocusedIndex(int i, bool hotTracking)
m_focusedIndex = i;
- if (!hotTracking)
- m_client->setTextFromItemForPopupMenu(this, i);
+ if (!hotTracking) {
+ if (m_client)
+ m_client->setTextFromItemForPopupMenu(this, i);
+ }
if (!scrollToRevealSelection())
::UpdateWindow(m_popup);
diff --git a/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h b/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h
index d1dc466..2d09bb9 100644
--- a/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h
+++ b/Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h
@@ -48,7 +48,7 @@ public:
}
~WebPopupMenuProxyWin();
- virtual void showPopupMenu(const WebCore::IntRect&, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
+ virtual void showPopupMenu(const WebCore::IntRect&, WebCore::TextDirection, const Vector<WebPopupItem>&, const PlatformPopupMenuData&, int32_t selectedIndex);
virtual void hidePopupMenu();
void hide() { hidePopupMenu(); }
diff --git a/Source/WebKit2/UIProcess/win/WebView.cpp b/Source/WebKit2/UIProcess/win/WebView.cpp
index 4516f54..eea43c5 100644
--- a/Source/WebKit2/UIProcess/win/WebView.cpp
+++ b/Source/WebKit2/UIProcess/win/WebView.cpp
@@ -23,14 +23,18 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebView.h"
#include "ChunkedUpdateDrawingAreaProxy.h"
+#include "DrawingAreaProxyImpl.h"
#include "FindIndicator.h"
#include "LayerBackedDrawingAreaProxy.h"
#include "Logging.h"
-#include "RunLoop.h"
#include "NativeWebKeyboardEvent.h"
+#include "Region.h"
+#include "RunLoop.h"
+#include "WKAPICast.h"
#include "WebContext.h"
#include "WebContextMenuProxyWin.h"
#include "WebEditCommandProxy.h"
@@ -38,8 +42,10 @@
#include "WebPageProxy.h"
#include "WebPopupMenuProxyWin.h"
#include <Commctrl.h>
+#include <WebCore/BitmapInfo.h>
#include <WebCore/Cursor.h>
#include <WebCore/FloatRect.h>
+#include <WebCore/GraphicsContextCG.h>
#include <WebCore/IntRect.h>
#include <WebCore/SoftLinking.h>
#include <WebCore/WebCoreInstanceHandle.h>
@@ -47,17 +53,17 @@
#include <wtf/text/WTFString.h>
namespace Ime {
- // We need these functions in a separate namespace, because in the global namespace they conflict
- // with the definitions in imm.h only by the type modifier (the macro defines them as static) and
- // imm.h is included by windows.h
- SOFT_LINK_LIBRARY(IMM32)
- SOFT_LINK(IMM32, ImmGetContext, HIMC, WINAPI, (HWND hwnd), (hwnd))
- SOFT_LINK(IMM32, ImmReleaseContext, BOOL, WINAPI, (HWND hWnd, HIMC hIMC), (hWnd, hIMC))
- SOFT_LINK(IMM32, ImmGetCompositionStringW, LONG, WINAPI, (HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen), (hIMC, dwIndex, lpBuf, dwBufLen))
- SOFT_LINK(IMM32, ImmSetCandidateWindow, BOOL, WINAPI, (HIMC hIMC, LPCANDIDATEFORM lpCandidate), (hIMC, lpCandidate))
- SOFT_LINK(IMM32, ImmSetOpenStatus, BOOL, WINAPI, (HIMC hIMC, BOOL fOpen), (hIMC, fOpen))
- SOFT_LINK(IMM32, ImmNotifyIME, BOOL, WINAPI, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue), (hIMC, dwAction, dwIndex, dwValue))
- SOFT_LINK(IMM32, ImmAssociateContextEx, BOOL, WINAPI, (HWND hWnd, HIMC hIMC, DWORD dwFlags), (hWnd, hIMC, dwFlags))
+// We need these functions in a separate namespace, because in the global namespace they conflict
+// with the definitions in imm.h only by the type modifier (the macro defines them as static) and
+// imm.h is included by windows.h
+SOFT_LINK_LIBRARY(IMM32)
+SOFT_LINK(IMM32, ImmGetContext, HIMC, WINAPI, (HWND hwnd), (hwnd))
+SOFT_LINK(IMM32, ImmReleaseContext, BOOL, WINAPI, (HWND hWnd, HIMC hIMC), (hWnd, hIMC))
+SOFT_LINK(IMM32, ImmGetCompositionStringW, LONG, WINAPI, (HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen), (hIMC, dwIndex, lpBuf, dwBufLen))
+SOFT_LINK(IMM32, ImmSetCandidateWindow, BOOL, WINAPI, (HIMC hIMC, LPCANDIDATEFORM lpCandidate), (hIMC, lpCandidate))
+SOFT_LINK(IMM32, ImmSetOpenStatus, BOOL, WINAPI, (HIMC hIMC, BOOL fOpen), (hIMC, fOpen))
+SOFT_LINK(IMM32, ImmNotifyIME, BOOL, WINAPI, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue), (hIMC, dwAction, dwIndex, dwValue))
+SOFT_LINK(IMM32, ImmAssociateContextEx, BOOL, WINAPI, (HWND hWnd, HIMC hIMC, DWORD dwFlags), (hWnd, hIMC, dwFlags))
};
using namespace WebCore;
@@ -76,6 +82,13 @@ enum {
UpdateActiveStateTimer = 1,
};
+static bool useNewDrawingArea()
+{
+ // FIXME: Remove this function and the old drawing area code once we aren't interested in
+ // testing the old drawing area anymore.
+ return true;
+}
+
LRESULT CALLBACK WebView::WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LONG_PTR longPtr = ::GetWindowLongPtr(hWnd, 0);
@@ -100,93 +113,93 @@ LRESULT WebView::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
bool handled = true;
switch (message) {
- case WM_CLOSE:
- m_page->tryClose();
- break;
- case WM_DESTROY:
- m_isBeingDestroyed = true;
- close();
- break;
- case WM_ERASEBKGND:
- lResult = 1;
- break;
- case WM_PAINT:
- lResult = onPaintEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_PRINTCLIENT:
- lResult = onPrintClientEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_MOUSEACTIVATE:
- setWasActivatedByMouseEvent(true);
- handled = false;
- break;
- case WM_MOUSEMOVE:
- case WM_LBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_RBUTTONDOWN:
- case WM_LBUTTONDBLCLK:
- case WM_MBUTTONDBLCLK:
- case WM_RBUTTONDBLCLK:
- case WM_LBUTTONUP:
- case WM_MBUTTONUP:
- case WM_RBUTTONUP:
- case WM_MOUSELEAVE:
- lResult = onMouseEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_MOUSEWHEEL:
- case WM_VISTA_MOUSEHWHEEL:
- lResult = onWheelEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_SYSKEYDOWN:
- case WM_KEYDOWN:
- case WM_SYSCHAR:
- case WM_CHAR:
- case WM_SYSKEYUP:
- case WM_KEYUP:
- lResult = onKeyEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_SIZE:
- lResult = onSizeEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_WINDOWPOSCHANGED:
- lResult = onWindowPositionChangedEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_SETFOCUS:
- lResult = onSetFocusEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_KILLFOCUS:
- lResult = onKillFocusEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_TIMER:
- lResult = onTimerEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_SHOWWINDOW:
- lResult = onShowWindowEvent(hWnd, message, wParam, lParam, handled);
- break;
- case WM_SETCURSOR:
- lResult = onSetCursor(hWnd, message, wParam, lParam, handled);
- break;
- case WM_IME_STARTCOMPOSITION:
- handled = onIMEStartComposition();
- break;
- case WM_IME_REQUEST:
- lResult = onIMERequest(wParam, lParam);
- break;
- case WM_IME_COMPOSITION:
- handled = onIMEComposition(lParam);
- break;
- case WM_IME_ENDCOMPOSITION:
- handled = onIMEEndComposition();
- break;
- case WM_IME_SELECT:
- handled = onIMESelect(wParam, lParam);
- break;
- case WM_IME_SETCONTEXT:
- handled = onIMESetContext(wParam, lParam);
- break;
- default:
- handled = false;
- break;
+ case WM_CLOSE:
+ m_page->tryClose();
+ break;
+ case WM_DESTROY:
+ m_isBeingDestroyed = true;
+ close();
+ break;
+ case WM_ERASEBKGND:
+ lResult = 1;
+ break;
+ case WM_PAINT:
+ lResult = onPaintEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_PRINTCLIENT:
+ lResult = onPrintClientEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_MOUSEACTIVATE:
+ setWasActivatedByMouseEvent(true);
+ handled = false;
+ break;
+ case WM_MOUSEMOVE:
+ case WM_LBUTTONDOWN:
+ case WM_MBUTTONDOWN:
+ case WM_RBUTTONDOWN:
+ case WM_LBUTTONDBLCLK:
+ case WM_MBUTTONDBLCLK:
+ case WM_RBUTTONDBLCLK:
+ case WM_LBUTTONUP:
+ case WM_MBUTTONUP:
+ case WM_RBUTTONUP:
+ case WM_MOUSELEAVE:
+ lResult = onMouseEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_MOUSEWHEEL:
+ case WM_VISTA_MOUSEHWHEEL:
+ lResult = onWheelEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_SYSKEYDOWN:
+ case WM_KEYDOWN:
+ case WM_SYSCHAR:
+ case WM_CHAR:
+ case WM_SYSKEYUP:
+ case WM_KEYUP:
+ lResult = onKeyEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_SIZE:
+ lResult = onSizeEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_WINDOWPOSCHANGED:
+ lResult = onWindowPositionChangedEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_SETFOCUS:
+ lResult = onSetFocusEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_KILLFOCUS:
+ lResult = onKillFocusEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_TIMER:
+ lResult = onTimerEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_SHOWWINDOW:
+ lResult = onShowWindowEvent(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_SETCURSOR:
+ lResult = onSetCursor(hWnd, message, wParam, lParam, handled);
+ break;
+ case WM_IME_STARTCOMPOSITION:
+ handled = onIMEStartComposition();
+ break;
+ case WM_IME_REQUEST:
+ lResult = onIMERequest(wParam, lParam);
+ break;
+ case WM_IME_COMPOSITION:
+ handled = onIMEComposition(lParam);
+ break;
+ case WM_IME_ENDCOMPOSITION:
+ handled = onIMEEndComposition();
+ break;
+ case WM_IME_SELECT:
+ handled = onIMESelect(wParam, lParam);
+ break;
+ case WM_IME_SETCONTEXT:
+ handled = onIMESetContext(wParam, lParam);
+ break;
+ default:
+ handled = false;
+ break;
}
if (!handled)
@@ -232,18 +245,23 @@ WebView::WebView(RECT rect, WebContext* context, WebPageGroup* pageGroup, HWND p
, m_wasActivatedByMouseEvent(false)
, m_isBeingDestroyed(false)
, m_inIMEComposition(0)
+ , m_findIndicatorCallback(0)
+ , m_findIndicatorCallbackContext(0)
{
registerWebViewWindowClass();
- m_page = context->createWebPage(this, pageGroup);
-
- m_window = ::CreateWindowEx(0, kWebKit2WebViewWindowClassName, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ m_window = ::CreateWindowExW(0, kWebKit2WebViewWindowClassName, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE,
rect.top, rect.left, rect.right - rect.left, rect.bottom - rect.top, parentWindow ? parentWindow : HWND_MESSAGE, 0, instanceHandle(), this);
ASSERT(::IsWindow(m_window));
+ // We only check our window style, and not ::IsWindowVisible, because m_isVisible only tracks
+ // this window's visibility status, while ::IsWindowVisible takes our ancestors' visibility
+ // status into account. <http://webkit.org/b/54104>
+ ASSERT(m_isVisible == static_cast<bool>(::GetWindowLong(m_window, GWL_STYLE) & WS_VISIBLE));
+ m_page = context->createWebPage(this, pageGroup);
m_page->initializeWebPage();
- ::ShowWindow(m_window, SW_SHOW);
+ CoCreateInstance(CLSID_DragDropHelper, 0, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, (void**)&m_dropTargetHelper);
// FIXME: Initializing the tooltip window here matches WebKit win, but seems like something
// we could do on demand to save resources.
@@ -260,6 +278,11 @@ WebView::~WebView()
::DestroyWindow(m_toolTipWindow);
}
+void WebView::initialize()
+{
+ ::RegisterDragDrop(m_window, this);
+}
+
void WebView::setParentWindow(HWND parentWindow)
{
if (m_window) {
@@ -325,29 +348,29 @@ LRESULT WebView::onMouseEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
setWasActivatedByMouseEvent(false);
switch (message) {
- case WM_LBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_RBUTTONDOWN:
- ::SetFocus(m_window);
- ::SetCapture(m_window);
- break;
- case WM_LBUTTONUP:
- case WM_MBUTTONUP:
- case WM_RBUTTONUP:
- ::ReleaseCapture();
- break;
- case WM_MOUSEMOVE:
- startTrackingMouseLeave();
- break;
- case WM_MOUSELEAVE:
- stopTrackingMouseLeave();
- break;
- case WM_LBUTTONDBLCLK:
- case WM_MBUTTONDBLCLK:
- case WM_RBUTTONDBLCLK:
- break;
- default:
- ASSERT_NOT_REACHED();
+ case WM_LBUTTONDOWN:
+ case WM_MBUTTONDOWN:
+ case WM_RBUTTONDOWN:
+ ::SetFocus(m_window);
+ ::SetCapture(m_window);
+ break;
+ case WM_LBUTTONUP:
+ case WM_MBUTTONUP:
+ case WM_RBUTTONUP:
+ ::ReleaseCapture();
+ break;
+ case WM_MOUSEMOVE:
+ startTrackingMouseLeave();
+ break;
+ case WM_MOUSELEAVE:
+ stopTrackingMouseLeave();
+ break;
+ case WM_LBUTTONDBLCLK:
+ case WM_MBUTTONDBLCLK:
+ case WM_RBUTTONDBLCLK:
+ break;
+ default:
+ ASSERT_NOT_REACHED();
}
m_page->handleMouseEvent(mouseEvent);
@@ -382,19 +405,45 @@ LRESULT WebView::onKeyEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
return 0;
}
+static void drawPageBackground(HDC dc, const RECT& rect)
+{
+ // Mac checks WebPageProxy::drawsBackground and
+ // WebPageProxy::drawsTransparentBackground here, but those are always false on
+ // Windows currently (see <http://webkit.org/b/52009>).
+ ::FillRect(dc, &rect, reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1));
+}
+
+void WebView::paint(HDC hdc, const IntRect& dirtyRect)
+{
+ if (useNewDrawingArea()) {
+ if (DrawingAreaProxyImpl* drawingArea = static_cast<DrawingAreaProxyImpl*>(m_page->drawingArea())) {
+ // FIXME: We should port WebKit1's rect coalescing logic here.
+ Region unpaintedRegion;
+ drawingArea->paint(hdc, dirtyRect, unpaintedRegion);
+
+ Vector<IntRect> unpaintedRects = unpaintedRegion.rects();
+ for (size_t i = 0; i < unpaintedRects.size(); ++i) {
+ RECT winRect = unpaintedRects[i];
+ drawPageBackground(hdc, unpaintedRects[i]);
+ }
+ } else
+ drawPageBackground(hdc, dirtyRect);
+
+ m_page->didDraw();
+ } else {
+ if (m_page->isValid() && m_page->drawingArea() && m_page->drawingArea()->paint(dirtyRect, hdc))
+ m_page->didDraw();
+ else
+ drawPageBackground(hdc, dirtyRect);
+ }
+}
+
LRESULT WebView::onPaintEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled)
{
PAINTSTRUCT paintStruct;
HDC hdc = ::BeginPaint(m_window, &paintStruct);
- if (m_page->isValid() && m_page->drawingArea() && m_page->drawingArea()->paint(IntRect(paintStruct.rcPaint), hdc))
- m_page->didDraw();
- else {
- // Mac checks WebPageProxy::drawsBackground and
- // WebPageProxy::drawsTransparentBackground here, but those are always false on Windows
- // currently (see <http://webkit.org/b/52009>).
- ::FillRect(hdc, &paintStruct.rcPaint, reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1));
- }
+ paint(hdc, paintStruct.rcPaint);
::EndPaint(m_window, &paintStruct);
@@ -407,9 +456,8 @@ LRESULT WebView::onPrintClientEvent(HWND hWnd, UINT, WPARAM wParam, LPARAM, bool
HDC hdc = reinterpret_cast<HDC>(wParam);
RECT winRect;
::GetClientRect(hWnd, &winRect);
- IntRect rect = winRect;
- m_page->drawingArea()->paint(rect, hdc);
+ paint(hdc, winRect);
handled = true;
return 0;
@@ -420,8 +468,8 @@ LRESULT WebView::onSizeEvent(HWND, UINT, WPARAM, LPARAM lParam, bool& handled)
int width = LOWORD(lParam);
int height = HIWORD(lParam);
- if (m_page->drawingArea())
- m_page->drawingArea()->setSize(IntSize(width, height));
+ if (m_page && m_page->drawingArea())
+ m_page->drawingArea()->setSize(IntSize(width, height), IntSize());
handled = true;
return 0;
@@ -453,10 +501,10 @@ LRESULT WebView::onKillFocusEvent(HWND, UINT, WPARAM, LPARAM lParam, bool& handl
LRESULT WebView::onTimerEvent(HWND hWnd, UINT, WPARAM wParam, LPARAM, bool& handled)
{
switch (wParam) {
- case UpdateActiveStateTimer:
- ::KillTimer(hWnd, UpdateActiveStateTimer);
- updateActiveState();
- break;
+ case UpdateActiveStateTimer:
+ ::KillTimer(hWnd, UpdateActiveStateTimer);
+ updateActiveState();
+ break;
}
handled = true;
@@ -466,14 +514,15 @@ LRESULT WebView::onTimerEvent(HWND hWnd, UINT, WPARAM wParam, LPARAM, bool& hand
LRESULT WebView::onShowWindowEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, bool& handled)
{
// lParam is 0 when the message is sent because of a ShowWindow call.
- // FIXME: Is WM_SHOWWINDOW sent when ShowWindow is called on an ancestor of our window?
+ // FIXME: Since we don't get notified when an ancestor window is hidden or shown, we will keep
+ // painting even when we have a hidden ancestor. <http://webkit.org/b/54104>
if (!lParam) {
m_isVisible = wParam;
- m_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
-
- handled = true;
+ if (m_page)
+ m_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
}
+ handled = false;
return 0;
}
@@ -569,6 +618,7 @@ void WebView::stopTrackingMouseLeave()
void WebView::close()
{
+ ::RevokeDragDrop(m_window);
setParentWindow(0);
m_page->close();
}
@@ -577,6 +627,9 @@ void WebView::close()
PassOwnPtr<DrawingAreaProxy> WebView::createDrawingAreaProxy()
{
+ if (useNewDrawingArea())
+ return DrawingAreaProxyImpl::create(m_page.get());
+
return ChunkedUpdateDrawingAreaProxy::create(this, m_page.get());
}
@@ -626,6 +679,10 @@ bool WebView::isViewInWindow()
return m_isInWindow;
}
+void WebView::pageClosed()
+{
+}
+
void WebView::processDidCrash()
{
updateNativeCursor();
@@ -740,11 +797,11 @@ void WebView::prepareCandidateWindow(HIMC hInputContext)
form.dwIndex = 0;
form.dwStyle = CFS_EXCLUDE;
form.ptCurrentPos.x = caret.x();
- form.ptCurrentPos.y = caret.bottom();
+ form.ptCurrentPos.y = caret.maxY();
form.rcArea.top = caret.y();
- form.rcArea.bottom = caret.bottom();
+ form.rcArea.bottom = caret.maxY();
form.rcArea.left = caret.x();
- form.rcArea.right = caret.right();
+ form.rcArea.right = caret.maxX();
Ime::ImmSetCandidateWindow(hInputContext, &form);
}
@@ -962,11 +1019,11 @@ LRESULT WebView::onIMERequest(WPARAM request, LPARAM data)
return 0;
switch (request) {
- case IMR_RECONVERTSTRING:
- return onIMERequestReconvertString(reinterpret_cast<RECONVERTSTRING*>(data));
+ case IMR_RECONVERTSTRING:
+ return onIMERequestReconvertString(reinterpret_cast<RECONVERTSTRING*>(data));
- case IMR_QUERYCHARPOSITION:
- return onIMERequestCharPosition(reinterpret_cast<IMECHARPOSITION*>(data));
+ case IMR_QUERYCHARPOSITION:
+ return onIMERequestCharPosition(reinterpret_cast<IMECHARPOSITION*>(data));
}
return 0;
}
@@ -985,11 +1042,12 @@ bool WebView::onIMESetContext(WPARAM wparam, LPARAM)
return false;
}
-void WebView::didNotHandleKeyEvent(const NativeWebKeyboardEvent& event)
+void WebView::doneWithKeyEvent(const NativeWebKeyboardEvent& event, bool wasEventHandled)
{
// Calling ::DefWindowProcW will ensure that pressing the Alt key will generate a WM_SYSCOMMAND
// event, e.g. See <http://webkit.org/b/47671>.
- ::DefWindowProcW(event.nativeEvent()->hwnd, event.nativeEvent()->message, event.nativeEvent()->wParam, event.nativeEvent()->lParam);
+ if (!wasEventHandled)
+ ::DefWindowProcW(event.nativeEvent()->hwnd, event.nativeEvent()->message, event.nativeEvent()->wParam, event.nativeEvent()->lParam);
}
PassRefPtr<WebPopupMenuProxy> WebView::createPopupMenuProxy(WebPageProxy* page)
@@ -1002,9 +1060,54 @@ PassRefPtr<WebContextMenuProxy> WebView::createContextMenuProxy(WebPageProxy* pa
return WebContextMenuProxyWin::create(m_window, page);
}
-void WebView::setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut)
+void WebView::setFindIndicator(PassRefPtr<FindIndicator> prpFindIndicator, bool fadeOut)
{
- // FIXME: Implement.
+ if (!m_findIndicatorCallback)
+ return;
+
+ HBITMAP hbmp = 0;
+ IntRect selectionRect;
+
+ if (RefPtr<FindIndicator> findIndicator = prpFindIndicator) {
+ if (ShareableBitmap* contentImage = findIndicator->contentImage()) {
+ // Render the contentImage to an HBITMAP.
+ void* bits;
+ HDC hdc = ::CreateCompatibleDC(0);
+ int width = contentImage->bounds().width();
+ int height = contentImage->bounds().height();
+ BitmapInfo bitmapInfo = BitmapInfo::create(contentImage->size());
+
+ hbmp = CreateDIBSection(0, &bitmapInfo, DIB_RGB_COLORS, static_cast<void**>(&bits), 0, 0);
+ HBITMAP hbmpOld = static_cast<HBITMAP>(SelectObject(hdc, hbmp));
+ RetainPtr<CGContextRef> context(AdoptCF, CGBitmapContextCreate(bits, width, height,
+ 8, width * sizeof(RGBQUAD), deviceRGBColorSpaceRef(), kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst));
+
+ GraphicsContext graphicsContext(context.get());
+ contentImage->paint(graphicsContext, IntPoint(), contentImage->bounds());
+
+ ::SelectObject(hdc, hbmpOld);
+ ::DeleteDC(hdc);
+ }
+
+ selectionRect = IntRect(findIndicator->selectionRectInWindowCoordinates());
+ }
+
+ // The callback is responsible for calling ::DeleteObject(hbmp).
+ (*m_findIndicatorCallback)(toAPI(this), hbmp, selectionRect, fadeOut, m_findIndicatorCallbackContext);
+}
+
+void WebView::setFindIndicatorCallback(WKViewFindIndicatorCallback callback, void* context)
+{
+ m_findIndicatorCallback = callback;
+ m_findIndicatorCallbackContext = context;
+}
+
+WKViewFindIndicatorCallback WebView::getFindIndicatorCallback(void** context)
+{
+ if (context)
+ *context = m_findIndicatorCallbackContext;
+
+ return m_findIndicatorCallback;
}
void WebView::didCommitLoadForMainFrame(bool useCustomRepresentation)
@@ -1024,6 +1127,10 @@ void WebView::setCustomRepresentationZoomFactor(double)
{
}
+void WebView::didChangeScrollbarsForMainFrame() const
+{
+}
+
void WebView::setIsInWindow(bool isInWindow)
{
m_isInWindow = isInWindow;
@@ -1032,36 +1139,55 @@ void WebView::setIsInWindow(bool isInWindow)
#if USE(ACCELERATED_COMPOSITING)
+void WebView::enterAcceleratedCompositingMode(const LayerTreeContext&)
+{
+ ASSERT(useNewDrawingArea());
+ // FIXME: Implement.
+ ASSERT_NOT_REACHED();
+}
+
+void WebView::exitAcceleratedCompositingMode()
+{
+ ASSERT(useNewDrawingArea());
+ // FIXME: Implement.
+ ASSERT_NOT_REACHED();
+}
+
void WebView::pageDidEnterAcceleratedCompositing()
{
+ ASSERT(!useNewDrawingArea());
switchToDrawingAreaTypeIfNecessary(DrawingAreaInfo::LayerBacked);
}
void WebView::pageDidLeaveAcceleratedCompositing()
{
+ ASSERT(!useNewDrawingArea());
switchToDrawingAreaTypeIfNecessary(DrawingAreaInfo::ChunkedUpdate);
}
void WebView::switchToDrawingAreaTypeIfNecessary(DrawingAreaInfo::Type type)
{
+ ASSERT(!useNewDrawingArea());
+
DrawingAreaInfo::Type existingDrawingAreaType = m_page->drawingArea() ? m_page->drawingArea()->info().type : DrawingAreaInfo::None;
if (existingDrawingAreaType == type)
return;
OwnPtr<DrawingAreaProxy> newDrawingArea;
switch (type) {
- case DrawingAreaInfo::None:
- break;
- case DrawingAreaInfo::ChunkedUpdate:
- newDrawingArea = ChunkedUpdateDrawingAreaProxy::create(this, m_page.get());
- break;
- case DrawingAreaInfo::LayerBacked:
- newDrawingArea = LayerBackedDrawingAreaProxy::create(this, m_page.get());
- break;
+ case DrawingAreaInfo::Impl:
+ case DrawingAreaInfo::None:
+ break;
+ case DrawingAreaInfo::ChunkedUpdate:
+ newDrawingArea = ChunkedUpdateDrawingAreaProxy::create(this, m_page.get());
+ break;
+ case DrawingAreaInfo::LayerBacked:
+ newDrawingArea = LayerBackedDrawingAreaProxy::create(this, m_page.get());
+ break;
}
if (m_page->drawingArea())
- newDrawingArea->setSize(m_page->drawingArea()->size());
+ newDrawingArea->setSize(m_page->drawingArea()->size(), IntSize());
m_page->drawingArea()->detachCompositingContext();
m_page->setDrawingArea(newDrawingArea.release());
@@ -1079,13 +1205,140 @@ HWND WebView::nativeWindow()
void WebView::windowReceivedMessage(HWND, UINT message, WPARAM wParam, LPARAM)
{
switch (message) {
- case WM_NCACTIVATE:
- updateActiveStateSoon();
- break;
- case WM_SETTINGCHANGE:
- // systemParameterChanged(wParam);
- break;
+ case WM_NCACTIVATE:
+ updateActiveStateSoon();
+ break;
+ case WM_SETTINGCHANGE:
+ // systemParameterChanged(wParam);
+ break;
}
}
+HRESULT STDMETHODCALLTYPE WebView::QueryInterface(REFIID riid, void** ppvObject)
+{
+ *ppvObject = 0;
+ if (IsEqualGUID(riid, IID_IUnknown))
+ *ppvObject = static_cast<IUnknown*>(this);
+ else if (IsEqualGUID(riid, IID_IDropTarget))
+ *ppvObject = static_cast<IDropTarget*>(this);
+ else
+ return E_NOINTERFACE;
+
+ AddRef();
+ return S_OK;
+}
+
+ULONG STDMETHODCALLTYPE WebView::AddRef(void)
+{
+ ref();
+ return refCount();
+}
+
+ULONG STDMETHODCALLTYPE WebView::Release(void)
+{
+ deref();
+ return refCount();
+}
+
+static DWORD dragOperationToDragCursor(DragOperation op)
+{
+ DWORD res = DROPEFFECT_NONE;
+ if (op & DragOperationCopy)
+ res = DROPEFFECT_COPY;
+ else if (op & DragOperationLink)
+ res = DROPEFFECT_LINK;
+ else if (op & DragOperationMove)
+ res = DROPEFFECT_MOVE;
+ else if (op & DragOperationGeneric)
+ res = DROPEFFECT_MOVE; // This appears to be the Firefox behaviour
+ return res;
+}
+
+WebCore::DragOperation WebView::keyStateToDragOperation(DWORD grfKeyState) const
+{
+ if (!m_page)
+ return DragOperationNone;
+
+ // Conforms to Microsoft's key combinations as documented for
+ // IDropTarget::DragOver. Note, grfKeyState is the current
+ // state of the keyboard modifier keys on the keyboard. See:
+ // <http://msdn.microsoft.com/en-us/library/ms680129(VS.85).aspx>.
+ DragOperation operation = m_page->dragOperation();
+
+ if ((grfKeyState & (MK_CONTROL | MK_SHIFT)) == (MK_CONTROL | MK_SHIFT))
+ operation = DragOperationLink;
+ else if ((grfKeyState & MK_CONTROL) == MK_CONTROL)
+ operation = DragOperationCopy;
+ else if ((grfKeyState & MK_SHIFT) == MK_SHIFT)
+ operation = DragOperationGeneric;
+
+ return operation;
+}
+
+HRESULT STDMETHODCALLTYPE WebView::DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
+{
+ m_dragData = 0;
+ m_page->resetDragOperation();
+
+ if (m_dropTargetHelper)
+ m_dropTargetHelper->DragEnter(m_window, pDataObject, (POINT*)&pt, *pdwEffect);
+
+ POINTL localpt = pt;
+ ::ScreenToClient(m_window, (LPPOINT)&localpt);
+ DragData data(pDataObject, IntPoint(localpt.x, localpt.y), IntPoint(pt.x, pt.y), keyStateToDragOperation(grfKeyState));
+ m_page->performDragControllerAction(DragControllerActionEntered, &data);
+ *pdwEffect = dragOperationToDragCursor(m_page->dragOperation());
+
+ m_lastDropEffect = *pdwEffect;
+ m_dragData = pDataObject;
+
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebView::DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
+{
+ if (m_dropTargetHelper)
+ m_dropTargetHelper->DragOver((POINT*)&pt, *pdwEffect);
+
+ if (m_dragData) {
+ POINTL localpt = pt;
+ ::ScreenToClient(m_window, (LPPOINT)&localpt);
+ DragData data(m_dragData.get(), IntPoint(localpt.x, localpt.y), IntPoint(pt.x, pt.y), keyStateToDragOperation(grfKeyState));
+ m_page->performDragControllerAction(DragControllerActionUpdated, &data);
+ *pdwEffect = dragOperationToDragCursor(m_page->dragOperation());
+ } else
+ *pdwEffect = DROPEFFECT_NONE;
+
+ m_lastDropEffect = *pdwEffect;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebView::DragLeave()
+{
+ if (m_dropTargetHelper)
+ m_dropTargetHelper->DragLeave();
+
+ if (m_dragData) {
+ DragData data(m_dragData.get(), IntPoint(), IntPoint(), DragOperationNone);
+ m_page->performDragControllerAction(DragControllerActionExited, &data);
+ m_dragData = 0;
+ m_page->resetDragOperation();
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebView::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
+{
+ if (m_dropTargetHelper)
+ m_dropTargetHelper->Drop(pDataObject, (POINT*)&pt, *pdwEffect);
+
+ m_dragData = 0;
+ *pdwEffect = m_lastDropEffect;
+ POINTL localpt = pt;
+ ::ScreenToClient(m_window, (LPPOINT)&localpt);
+ DragData data(pDataObject, IntPoint(localpt.x, localpt.y), IntPoint(pt.x, pt.y), keyStateToDragOperation(grfKeyState));
+ m_page->performDragControllerAction(DragControllerActionPerformDrag, &data);
+ return S_OK;
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/UIProcess/win/WebView.h b/Source/WebKit2/UIProcess/win/WebView.h
index dfb5ed1..297b6ad 100644
--- a/Source/WebKit2/UIProcess/win/WebView.h
+++ b/Source/WebKit2/UIProcess/win/WebView.h
@@ -28,21 +28,30 @@
#include "APIObject.h"
#include "PageClient.h"
+#include "WKView.h"
#include "WebPageProxy.h"
+#include <ShlObj.h>
+#include <WebCore/COMPtr.h>
+#include <WebCore/DragActions.h>
+#include <WebCore/DragData.h>
#include <WebCore/WindowMessageListener.h>
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
+interface IDropTargetHelper;
+
namespace WebKit {
class DrawingAreaProxy;
-class WebView : public APIObject, public PageClient, WebCore::WindowMessageListener {
+class WebView : public APIObject, public PageClient, WebCore::WindowMessageListener, public IDropTarget {
public:
static PassRefPtr<WebView> create(RECT rect, WebContext* context, WebPageGroup* pageGroup, HWND parentWindow)
{
- return adoptRef(new WebView(rect, context, pageGroup, parentWindow));
+ RefPtr<WebView> webView = adoptRef(new WebView(rect, context, pageGroup, parentWindow));
+ webView->initialize();
+ return webView;
}
~WebView();
@@ -50,8 +59,22 @@ public:
void setParentWindow(HWND);
void windowAncestryDidChange();
void setIsInWindow(bool);
- void setOverrideCursor(HCURSOR overrideCursor);
+ void setOverrideCursor(HCURSOR);
void setInitialFocus(bool forward);
+ void setFindIndicatorCallback(WKViewFindIndicatorCallback, void*);
+ WKViewFindIndicatorCallback getFindIndicatorCallback(void**);
+ void initialize();
+
+ // IUnknown
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
+ virtual ULONG STDMETHODCALLTYPE AddRef(void);
+ virtual ULONG STDMETHODCALLTYPE Release(void);
+
+ // IDropTarget
+ virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
+ virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
+ virtual HRESULT STDMETHODCALLTYPE DragLeave();
+ virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
WebPageProxy* page() const { return m_page.get(); }
@@ -64,7 +87,6 @@ private:
static LRESULT CALLBACK WebViewWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- void setWasActivatedByMouseEvent(bool flag) { m_wasActivatedByMouseEvent = flag; }
LRESULT onMouseEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onWheelEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onKeyEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
@@ -77,6 +99,9 @@ private:
LRESULT onTimerEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onShowWindowEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onSetCursor(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
+
+ void paint(HDC, const WebCore::IntRect& dirtyRect);
+ void setWasActivatedByMouseEvent(bool flag) { m_wasActivatedByMouseEvent = flag; }
bool onIMEStartComposition();
bool onIMEComposition(LPARAM);
bool onIMEEndComposition();
@@ -116,6 +141,7 @@ private:
virtual bool isViewInWindow();
virtual void processDidCrash();
virtual void didRelaunchProcess();
+ virtual void pageClosed();
virtual void takeFocus(bool direction);
virtual void toolTipChanged(const WTF::String&, const WTF::String&);
virtual void setCursor(const WebCore::Cursor&);
@@ -125,13 +151,16 @@ private:
virtual void setEditCommandState(const WTF::String&, bool, int);
virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
- virtual void didNotHandleKeyEvent(const NativeWebKeyboardEvent&);
+ virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled);
virtual void compositionSelectionChanged(bool);
virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut);
#if USE(ACCELERATED_COMPOSITING)
+ virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
+ virtual void exitAcceleratedCompositingMode();
+
virtual void pageDidEnterAcceleratedCompositing();
virtual void pageDidLeaveAcceleratedCompositing();
void switchToDrawingAreaTypeIfNecessary(DrawingAreaInfo::Type);
@@ -141,6 +170,8 @@ private:
void didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference&);
virtual double customRepresentationZoomFactor();
virtual void setCustomRepresentationZoomFactor(double);
+ WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
+ virtual void didChangeScrollbarsForMainFrame() const;
virtual HWND nativeWindow();
@@ -164,6 +195,17 @@ private:
RefPtr<WebPageProxy> m_page;
unsigned m_inIMEComposition;
+
+ WKViewFindIndicatorCallback m_findIndicatorCallback;
+ void* m_findIndicatorCallbackContext;
+
+ COMPtr<IDataObject> m_dragData;
+ COMPtr<IDropTargetHelper> m_dropTargetHelper;
+ // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect.
+ // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect.
+ // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
+ // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
+ DWORD m_lastDropEffect;
};
} // namespace WebKit
diff --git a/Source/WebKit2/WebKit2.pro b/Source/WebKit2/WebKit2.pro
index c478636..98f4d25 100644
--- a/Source/WebKit2/WebKit2.pro
+++ b/Source/WebKit2/WebKit2.pro
@@ -13,8 +13,8 @@ CONFIG(standalone_package) {
isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = ../WebCore/generated
}
-include($$PWD/../../WebKit.pri)
-include($$PWD/../../common.pri)
+include($$PWD/../WebKit.pri)
+include($$PWD/../common.pri)
include($$PWD/../WebCore/features.pri)
include(WebKit2.pri)
@@ -45,7 +45,6 @@ WEBKIT2_INCLUDEPATH = \
$$PWD/../JavaScriptCore/interpreter \
$$PWD/../JavaScriptCore/jit \
$$PWD/../JavaScriptCore/parser \
- $$PWD/../JavaScriptCore/pcre \
$$PWD/../JavaScriptCore/profiler \
$$PWD/../JavaScriptCore/runtime \
$$PWD/../JavaScriptCore/wtf \
@@ -170,9 +169,6 @@ symbian {
INCLUDEPATH = $$WEBKIT2_INCLUDEPATH $$INCLUDEPATH
}
-PREFIX_HEADER = $$PWD/../WebKit2/WebKit2Prefix.h
-*-g++*:QMAKE_CXXFLAGS += "-include $$PREFIX_HEADER"
-
WEBKIT2_GENERATED_HEADERS = \
$$WEBKIT2_GENERATED_SOURCES_DIR/AuthenticationManagerMessages.h \
$$WEBKIT2_GENERATED_SOURCES_DIR/DownloadProxyMessages.h \
@@ -232,12 +228,12 @@ HEADERS += \
Platform/SharedMemory.h \
Platform/WorkItem.h \
Platform/WorkQueue.h \
- Platform/qt/MappedMemoryPool.h \
Shared/API/c/WKBase.h \
Shared/API/c/WKCertificateInfo.h \
Shared/API/c/WKContextMenuItem.h \
Shared/API/c/WKContextMenuItemTypes.h \
Shared/API/c/WKGeometry.h \
+ Shared/API/c/WKGraphicsContext.h \
Shared/API/c/WKImage.h \
Shared/API/c/WKNumber.h \
Shared/API/c/WKPageLoadTypes.h \
@@ -280,6 +276,7 @@ HEADERS += \
Shared/WebEventConversion.h \
Shared/WebFindOptions.h \
Shared/WebGeolocationPosition.h \
+ Shared/WebGraphicsContext.h \
Shared/WebImage.h \
Shared/WebNavigationDataStore.h \
Shared/WebNumber.h \
@@ -293,7 +290,6 @@ HEADERS += \
Shared/WebURLResponse.h \
Shared/WebUserContentURLPattern.h \
Shared/Plugins/Netscape/NetscapePluginModule.h \
- Shared/qt/CleanupHandler.h \
Shared/qt/PlatformCertificateInfo.h \
Shared/qt/UpdateChunk.h \
Shared/qt/WebEventFactoryQt.h \
@@ -398,6 +394,7 @@ HEADERS += \
WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.h \
WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h \
WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h \
+ WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h \
WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h \
WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h \
WebProcess/InjectedBundle/API/c/WKBundlePage.h \
@@ -408,8 +405,10 @@ HEADERS += \
WebProcess/InjectedBundle/InjectedBundle.h \
WebProcess/InjectedBundle/InjectedBundleClient.h \
WebProcess/InjectedBundle/InjectedBundleHitTestResult.h \
+ WebProcess/InjectedBundle/InjectedBundleNavigationAction.h \
WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h \
WebProcess/InjectedBundle/InjectedBundlePageFormClient.h \
+ WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h \
WebProcess/InjectedBundle/InjectedBundlePageUIClient.h \
WebProcess/InjectedBundle/InjectedBundleScriptWorld.h \
WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h \
@@ -459,12 +458,12 @@ SOURCES += \
Platform/CoreIPC/BinarySemaphore.cpp \
Platform/CoreIPC/Connection.cpp \
Platform/CoreIPC/DataReference.cpp \
+ Platform/CoreIPC/qt/AttachmentQt.cpp \
Platform/CoreIPC/qt/ConnectionQt.cpp \
Platform/Logging.cpp \
Platform/Module.cpp \
Platform/RunLoop.cpp \
Platform/WorkQueue.cpp \
- Platform/qt/MappedMemoryPool.cpp \
Platform/qt/ModuleQt.cpp \
Platform/qt/RunLoopQt.cpp \
Platform/qt/SharedMemoryQt.cpp \
@@ -472,6 +471,7 @@ SOURCES += \
Shared/API/c/WKArray.cpp \
Shared/API/c/WKCertificateInfo.cpp \
Shared/API/c/WKContextMenuItem.cpp \
+ Shared/API/c/WKGraphicsContext.cpp \
Shared/API/c/WKImage.cpp \
Shared/API/c/WKNumber.cpp \
Shared/API/c/WKSecurityOrigin.cpp \
@@ -502,6 +502,7 @@ SOURCES += \
Shared/WebEvent.cpp \
Shared/WebEventConversion.cpp \
Shared/WebGeolocationPosition.cpp \
+ Shared/WebGraphicsContext.cpp \
Shared/WebKeyboardEvent.cpp \
Shared/WebImage.cpp \
Shared/WebMouseEvent.cpp \
@@ -517,7 +518,6 @@ SOURCES += \
Shared/WebURLResponse.cpp \
Shared/WebWheelEvent.cpp \
Shared/qt/ShareableBitmapQt.cpp \
- Shared/qt/CleanupHandler.cpp \
Shared/qt/NativeWebKeyboardEventQt.cpp \
Shared/qt/UpdateChunk.cpp \
Shared/qt/WebCoreArgumentCodersQt.cpp \
@@ -623,6 +623,8 @@ SOURCES += \
WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp \
WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp \
WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp \
+ WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp \
+ WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp \
WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp \
WebProcess/InjectedBundle/API/c/WKBundlePage.cpp \
WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp \
@@ -631,14 +633,17 @@ SOURCES += \
WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp \
WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp \
WebProcess/InjectedBundle/InjectedBundle.cpp \
- WebProcess/InjectedBundle/InjectedBundleClient.cpp \
WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp \
WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp \
+ WebProcess/InjectedBundle/InjectedBundleClient.cpp \
WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp \
+ WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp \
WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp \
WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp \
WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp \
WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp \
+ WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp \
+ WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp \
WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp \
WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp \
WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp \
@@ -666,7 +671,6 @@ SOURCES += \
WebProcess/WebCoreSupport/WebPopupMenu.cpp \
WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp \
WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp \
- WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp \
WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp \
WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp \
WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp \
@@ -693,3 +697,4 @@ SOURCES += \
WebProcess/qt/WebProcessMainQt.cpp \
WebProcess/qt/WebProcessQt.cpp \
$$WEBKIT2_GENERATED_SOURCES
+
diff --git a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
index b83c16c..303ca6c 100644
--- a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
+++ b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
@@ -67,6 +67,9 @@
1A0F29E3120B44420053D1B9 /* VisitedLinkProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0F29E1120B44420053D1B9 /* VisitedLinkProvider.cpp */; };
1A0F29E4120B44420053D1B9 /* VisitedLinkProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0F29E2120B44420053D1B9 /* VisitedLinkProvider.h */; };
1A119A95127B796200A9ECB1 /* MessageSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A119A94127B796200A9ECB1 /* MessageSender.h */; };
+ 1A186EEA12EF7618008E5F37 /* LayerTreeHost.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A186EE812EF7618008E5F37 /* LayerTreeHost.h */; };
+ 1A186EEB12EF7618008E5F37 /* LayerTreeHost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A186EE912EF7618008E5F37 /* LayerTreeHost.cpp */; };
+ 1A18718512EF9877008E5F37 /* LayerTreeHostMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A18718412EF9877008E5F37 /* LayerTreeHostMac.mm */; };
1A1C4EC810D06099005E67E7 /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AA1C79A100E7FC50078DEBC /* WebCore.framework */; };
1A1C649B11F4174200553C19 /* WebContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C648611F415B700553C19 /* WebContextMac.mm */; };
1A1FA285127A13BC0050E709 /* NPObjectProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA284127A13BC0050E709 /* NPObjectProxy.cpp */; };
@@ -140,6 +143,7 @@
1A64256812DE42EC00CAAE2C /* BackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A64256612DE42EC00CAAE2C /* BackingStore.h */; };
1A64256912DE42EC00CAAE2C /* BackingStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A64256712DE42EC00CAAE2C /* BackingStore.cpp */; };
1A64292D12DE5F9800CAAE2C /* BackingStoreMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A64292C12DE5F9800CAAE2C /* BackingStoreMac.mm */; };
+ 1A690D1712F39E3300ECD289 /* LayerTreeHostMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A690D1612F39E3300ECD289 /* LayerTreeHostMac.h */; };
1A6F9F9011E13EFC00DB1371 /* CommandLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A6F9F8E11E13EFC00DB1371 /* CommandLine.h */; };
1A6F9FB711E1408500DB1371 /* CommandLineMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A6F9FB611E1408500DB1371 /* CommandLineMac.cpp */; };
1A6FA01E11E1526300DB1371 /* WebProcessMainMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A6FA01D11E1526300DB1371 /* WebProcessMainMac.mm */; };
@@ -171,6 +175,12 @@
1A910072126675C4001842F5 /* FindIndicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A910070126675C4001842F5 /* FindIndicator.cpp */; };
1A91010A1268C8CA001842F5 /* FindIndicatorWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9101081268C8CA001842F5 /* FindIndicatorWindow.h */; };
1A91010B1268C8CA001842F5 /* FindIndicatorWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A9101091268C8CA001842F5 /* FindIndicatorWindow.mm */; };
+ 1A92DC1112F8BA460017AF65 /* LayerTreeContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */; };
+ 1A92DC1312F8BAB90017AF65 /* LayerTreeContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A92DC1212F8BAB90017AF65 /* LayerTreeContextMac.mm */; };
+ 1A9636BC12F348490078A062 /* ShareableSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9636BA12F348490078A062 /* ShareableSurface.cpp */; };
+ 1A9636BD12F348490078A062 /* ShareableSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9636BB12F348490078A062 /* ShareableSurface.h */; };
+ 1A9639F712F38ECD0078A062 /* CoreAnimationRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9639F512F38ECD0078A062 /* CoreAnimationRenderer.h */; };
+ 1A9639F812F38ECD0078A062 /* CoreAnimationRenderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A9639F612F38ECD0078A062 /* CoreAnimationRenderer.mm */; };
1AA1CC5D100FA1A10078DEBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AA1CC5C100FA1A10078DEBC /* QuartzCore.framework */; };
1AA1CD07100FA1BA0078DEBC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AA1CD06100FA1BA0078DEBC /* Carbon.framework */; };
1AA2E51D12E4C05E00BC4966 /* CGUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA2E51B12E4C05E00BC4966 /* CGUtilities.h */; };
@@ -283,6 +293,10 @@
51ACBBA1127A8F2C00D203B9 /* WebContextMenuProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51ACBB9F127A8F2C00D203B9 /* WebContextMenuProxyMac.mm */; };
51B3005012529D0E000B5CA0 /* WebBackForwardListCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B3004E12529D0E000B5CA0 /* WebBackForwardListCF.cpp */; };
51B3005112529D0E000B5CA0 /* WebPageProxyCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B3004F12529D0E000B5CA0 /* WebPageProxyCF.cpp */; };
+ 6501BD1A12F1243400E9F248 /* WKBundleInspector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65B86F1712F11D7B00B7DD8A /* WKBundleInspector.cpp */; };
+ 6546A82C13000164000CEB1C /* InjectedBundlePageResourceLoadClient.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6546A82A13000164000CEB1C /* InjectedBundlePageResourceLoadClient.h */; };
+ 659C551E130006410025C0C2 /* InjectedBundlePageResourceLoadClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6546A82913000164000CEB1C /* InjectedBundlePageResourceLoadClient.cpp */; };
+ 65B86F1E12F11DE300B7DD8A /* WKBundleInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 65B86F1812F11D7B00B7DD8A /* WKBundleInspector.h */; settings = {ATTRIBUTES = (Public, ); }; };
6D8A91A611F0EFD100DD01FE /* com.apple.WebProcess.sb in Resources */ = {isa = PBXBuildFile; fileRef = 6D8A91A511F0EFD100DD01FE /* com.apple.WebProcess.sb */; };
762B748D120BC75C00819339 /* WKPreferencesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 762B7484120BBA2D00819339 /* WKPreferencesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
@@ -304,6 +318,7 @@
93FC67BE12D3CCF200A60610 /* DecoderAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 93FC679E12D3CC7400A60610 /* DecoderAdapter.h */; };
93FC67BF12D3CCF200A60610 /* EncoderAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93FC679F12D3CC7400A60610 /* EncoderAdapter.cpp */; };
93FC67C012D3CCF200A60610 /* EncoderAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 93FC67A012D3CC7400A60610 /* EncoderAdapter.h */; };
+ B396EA5612E0ED2D00F4FEB7 /* config.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B396EA5512E0ED2D00F4FEB7 /* config.h */; };
BC0092F7115837A300E0AE2A /* RunLoopMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC0092F5115837A300E0AE2A /* RunLoopMac.mm */; };
BC0092F8115837A300E0AE2A /* WorkQueueMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC0092F6115837A300E0AE2A /* WorkQueueMac.cpp */; };
BC032D7510F4378D0058C15A /* WebChromeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC032D6010F4378D0058C15A /* WebChromeClient.h */; };
@@ -488,6 +503,8 @@
BC646C1C11DD399F006455B0 /* WKBackForwardListItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC646C1811DD399F006455B0 /* WKBackForwardListItem.cpp */; };
BC646C1D11DD399F006455B0 /* WKBackForwardListItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BC646C1911DD399F006455B0 /* WKBackForwardListItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
BC6EDAA6111271C600E7678B /* PageClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6EDAA5111271C600E7678B /* PageClient.h */; };
+ BC7043CC12F75EE0006472B9 /* WKBundleNavigationAction.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7043CA12F75EE0006472B9 /* WKBundleNavigationAction.h */; };
+ BC7043CD12F75EE0006472B9 /* WKBundleNavigationAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7043CB12F75EE0006472B9 /* WKBundleNavigationAction.cpp */; };
BC72B9FA11E6476B001EB4EA /* WebBackForwardListProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC72B9F811E6476B001EB4EA /* WebBackForwardListProxy.cpp */; };
BC72B9FB11E6476B001EB4EA /* WebBackForwardListProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = BC72B9F911E6476B001EB4EA /* WebBackForwardListProxy.h */; };
BC72BA1D11E64907001EB4EA /* WebBackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC72BA1B11E64907001EB4EA /* WebBackForwardList.cpp */; };
@@ -502,6 +519,10 @@
BC7B633812A45ABA00D174A4 /* WKPageGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7B633612A45ABA00D174A4 /* WKPageGroup.cpp */; };
BC7B633D12A45D1200D174A4 /* WKBundlePageGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7B633B12A45D1200D174A4 /* WKBundlePageGroup.h */; settings = {ATTRIBUTES = (Public, ); }; };
BC7B633E12A45D1200D174A4 /* WKBundlePageGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7B633C12A45D1200D174A4 /* WKBundlePageGroup.cpp */; };
+ BC8147A912F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8147A712F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h */; };
+ BC8147AA12F64CDA007B2C32 /* InjectedBundlePagePolicyClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8147A812F64CDA007B2C32 /* InjectedBundlePagePolicyClient.cpp */; };
+ BC8147D512F66D31007B2C32 /* InjectedBundleNavigationAction.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8147D312F66D31007B2C32 /* InjectedBundleNavigationAction.h */; };
+ BC8147D612F66D31007B2C32 /* InjectedBundleNavigationAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8147D412F66D31007B2C32 /* InjectedBundleNavigationAction.cpp */; };
BC8452A71162C80900CAB9B5 /* DrawingArea.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8452A51162C80900CAB9B5 /* DrawingArea.cpp */; };
BC8452A81162C80900CAB9B5 /* DrawingArea.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8452A61162C80900CAB9B5 /* DrawingArea.h */; };
BC84EB1812A7100C0083F2DA /* WebPreferencesMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC84EB1712A7100C0083F2DA /* WebPreferencesMac.mm */; };
@@ -526,6 +547,7 @@
BC90A1D2122DD55E00CC8C50 /* WebURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BC90A1D0122DD55E00CC8C50 /* WebURLResponse.h */; };
BC90A1D3122DD55E00CC8C50 /* WebURLResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC90A1D1122DD55E00CC8C50 /* WebURLResponse.cpp */; };
BC90A1D7122DD66A00CC8C50 /* WebURLResponseMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC90A1D5122DD66A00CC8C50 /* WebURLResponseMac.mm */; };
+ BC9585C812F095B800755821 /* WebGestureEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC9585C712F095B800755821 /* WebGestureEvent.cpp */; };
BC963D6B113DD19200574BE2 /* WebPage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC963D6A113DD19200574BE2 /* WebPage.cpp */; };
BC963D6E113DD1A500574BE2 /* WebPageMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC963D6D113DD1A500574BE2 /* WebPageMac.mm */; };
BC9B38A110F538BE00443A15 /* WebFrameProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9B389F10F538BE00443A15 /* WebFrameProxy.h */; };
@@ -537,6 +559,12 @@
BCA0EF8012331E78007D3CFB /* WebEditCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA0EF7E12331E78007D3CFB /* WebEditCommand.cpp */; };
BCA0EF9F12332642007D3CFB /* WebEditCommandProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA0EF9D12332642007D3CFB /* WebEditCommandProxy.h */; };
BCA0EFA012332642007D3CFB /* WebEditCommandProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA0EF9E12332642007D3CFB /* WebEditCommandProxy.cpp */; };
+ BCA56A1C12F9028E00C566C7 /* WebGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA56A1A12F9028E00C566C7 /* WebGraphicsContext.h */; };
+ BCA56A1D12F9028E00C566C7 /* WebGraphicsContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA56A1B12F9028E00C566C7 /* WebGraphicsContext.cpp */; };
+ BCA56A6512F9C8F900C566C7 /* WKGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA56A6312F9C8F900C566C7 /* WKGraphicsContext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BCA56A6612F9C8F900C566C7 /* WKGraphicsContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA56A6412F9C8F900C566C7 /* WKGraphicsContext.cpp */; };
+ BCA56A6912F9C9AD00C566C7 /* WKGraphicsContextCG.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA56A6712F9C9AD00C566C7 /* WKGraphicsContextCG.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BCA56A6A12F9C9AD00C566C7 /* WKGraphicsContextCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA56A6812F9C9AD00C566C7 /* WKGraphicsContextCG.cpp */; };
BCA8C6A811E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8C6A611E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.cpp */; };
BCA8C6A911E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8C6A711E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h */; };
BCA8C6AF11E3C08700812FB7 /* InjectedBundlePageUIClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8C6AD11E3C08700812FB7 /* InjectedBundlePageUIClient.cpp */; };
@@ -643,6 +671,7 @@
BCF69FA31176D01400471A52 /* WebNavigationData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF69FA11176D01400471A52 /* WebNavigationData.cpp */; };
BCF69FA91176D1CB00471A52 /* WKNavigationData.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF69FA71176D1CB00471A52 /* WKNavigationData.h */; settings = {ATTRIBUTES = (Public, ); }; };
BCF69FAA1176D1CB00471A52 /* WKNavigationData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF69FA81176D1CB00471A52 /* WKNavigationData.cpp */; };
+ BFA6179F12F0B99D0033E0CA /* WKViewPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA6179E12F0B99D0033E0CA /* WKViewPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
C01A260112662F2100C9ED55 /* ShareableBitmapCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C01A260012662F2100C9ED55 /* ShareableBitmapCG.cpp */; };
C02BFF1E1251502E009CCBEA /* NativeWebKeyboardEventMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */; };
C0337DAE127A24FE008FF4F4 /* WebEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C0337DAD127A24FE008FF4F4 /* WebEvent.cpp */; };
@@ -668,6 +697,8 @@
D3B9484711FF4B6500032B39 /* WebPopupMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = D3B9484311FF4B6500032B39 /* WebPopupMenu.h */; };
D3B9484811FF4B6500032B39 /* WebSearchPopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3B9484411FF4B6500032B39 /* WebSearchPopupMenu.cpp */; };
D3B9484911FF4B6500032B39 /* WebSearchPopupMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = D3B9484511FF4B6500032B39 /* WebSearchPopupMenu.h */; };
+ E134F01712EA5D33004EC58D /* WKPrintingView.h in Headers */ = {isa = PBXBuildFile; fileRef = E134F01512EA5D11004EC58D /* WKPrintingView.h */; };
+ E134F01A12EA5D99004EC58D /* WKPrintingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E134F01912EA5D99004EC58D /* WKPrintingView.mm */; };
E18C92F412DB9E7100CF2AEB /* PrintInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18C92F312DB9E7100CF2AEB /* PrintInfo.cpp */; };
E18C92F512DB9E7A00CF2AEB /* PrintInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18C92F312DB9E7100CF2AEB /* PrintInfo.cpp */; };
E18C92F612DB9E9400CF2AEB /* PrintInfoMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1CC1B8F12D7EADF00625838 /* PrintInfoMac.mm */; };
@@ -692,7 +723,6 @@
F634445C12A885E9000612D8 /* WKSecurityOrigin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F634445A12A885E9000612D8 /* WKSecurityOrigin.cpp */; };
F634445D12A885E9000612D8 /* WKSecurityOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = F634445B12A885E9000612D8 /* WKSecurityOrigin.h */; settings = {ATTRIBUTES = (Public, ); }; };
F67DD7BA125E40D9007BDCB8 /* WKSerializedScriptValuePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F67DD7B9125E40D9007BDCB8 /* WKSerializedScriptValuePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
- F6A25FD912ADC6BD00DC40CC /* WebDatabaseManagerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6A25FD812ADC6BD00DC40CC /* WebDatabaseManagerMac.mm */; };
F6A25FDC12ADC6CC00DC40CC /* WebDatabaseManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6A25FDA12ADC6CC00DC40CC /* WebDatabaseManager.cpp */; };
F6A25FDD12ADC6CC00DC40CC /* WebDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F6A25FDB12ADC6CC00DC40CC /* WebDatabaseManager.h */; };
/* End PBXBuildFile section */
@@ -737,6 +767,8 @@
files = (
1A50DB66110A3D57000D3FE5 /* WebProcess.app in CopyFiles */,
1A64228B12DD024700CAAE2C /* DrawingArea.messages.in in CopyFiles */,
+ B396EA5612E0ED2D00F4FEB7 /* config.h in CopyFiles */,
+ 6546A82C13000164000CEB1C /* InjectedBundlePageResourceLoadClient.h in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -794,6 +826,9 @@
1A0F29E1120B44420053D1B9 /* VisitedLinkProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisitedLinkProvider.cpp; sourceTree = "<group>"; };
1A0F29E2120B44420053D1B9 /* VisitedLinkProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisitedLinkProvider.h; sourceTree = "<group>"; };
1A119A94127B796200A9ECB1 /* MessageSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageSender.h; sourceTree = "<group>"; };
+ 1A186EE812EF7618008E5F37 /* LayerTreeHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerTreeHost.h; sourceTree = "<group>"; };
+ 1A186EE912EF7618008E5F37 /* LayerTreeHost.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerTreeHost.cpp; sourceTree = "<group>"; };
+ 1A18718412EF9877008E5F37 /* LayerTreeHostMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LayerTreeHostMac.mm; sourceTree = "<group>"; };
1A1C648611F415B700553C19 /* WebContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebContextMac.mm; sourceTree = "<group>"; };
1A1FA251127A0E4F0050E709 /* NPRemoteObjectMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NPRemoteObjectMap.h; sourceTree = "<group>"; };
1A1FA252127A0E4F0050E709 /* NPRemoteObjectMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NPRemoteObjectMap.cpp; sourceTree = "<group>"; };
@@ -872,6 +907,7 @@
1A64256612DE42EC00CAAE2C /* BackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackingStore.h; sourceTree = "<group>"; };
1A64256712DE42EC00CAAE2C /* BackingStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackingStore.cpp; sourceTree = "<group>"; };
1A64292C12DE5F9800CAAE2C /* BackingStoreMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BackingStoreMac.mm; sourceTree = "<group>"; };
+ 1A690D1612F39E3300ECD289 /* LayerTreeHostMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerTreeHostMac.h; sourceTree = "<group>"; };
1A6F9F8E11E13EFC00DB1371 /* CommandLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandLine.h; sourceTree = "<group>"; };
1A6F9FB611E1408500DB1371 /* CommandLineMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommandLineMac.cpp; sourceTree = "<group>"; };
1A6FA01D11E1526300DB1371 /* WebProcessMainMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessMainMac.mm; sourceTree = "<group>"; };
@@ -905,6 +941,12 @@
1A910070126675C4001842F5 /* FindIndicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindIndicator.cpp; sourceTree = "<group>"; };
1A9101081268C8CA001842F5 /* FindIndicatorWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindIndicatorWindow.h; sourceTree = "<group>"; };
1A9101091268C8CA001842F5 /* FindIndicatorWindow.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FindIndicatorWindow.mm; sourceTree = "<group>"; };
+ 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerTreeContext.h; sourceTree = "<group>"; };
+ 1A92DC1212F8BAB90017AF65 /* LayerTreeContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LayerTreeContextMac.mm; sourceTree = "<group>"; };
+ 1A9636BA12F348490078A062 /* ShareableSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShareableSurface.cpp; sourceTree = "<group>"; };
+ 1A9636BB12F348490078A062 /* ShareableSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShareableSurface.h; sourceTree = "<group>"; };
+ 1A9639F512F38ECD0078A062 /* CoreAnimationRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAnimationRenderer.h; sourceTree = "<group>"; };
+ 1A9639F612F38ECD0078A062 /* CoreAnimationRenderer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CoreAnimationRenderer.mm; sourceTree = "<group>"; };
1AA1C79A100E7FC50078DEBC /* WebCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1AA1C7DE100E846E0078DEBC /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = JavaScriptCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1AA1CC5C100FA1A10078DEBC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; };
@@ -1026,6 +1068,10 @@
51B3004F12529D0E000B5CA0 /* WebPageProxyCF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebPageProxyCF.cpp; path = cf/WebPageProxyCF.cpp; sourceTree = "<group>"; };
5DAD7294116FF70B00EE5396 /* WebProcess.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebProcess.xcconfig; sourceTree = "<group>"; };
5DAD73F1116FF90C00EE5396 /* BaseTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = BaseTarget.xcconfig; sourceTree = "<group>"; };
+ 6546A82913000164000CEB1C /* InjectedBundlePageResourceLoadClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageResourceLoadClient.cpp; sourceTree = "<group>"; };
+ 6546A82A13000164000CEB1C /* InjectedBundlePageResourceLoadClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePageResourceLoadClient.h; sourceTree = "<group>"; };
+ 65B86F1712F11D7B00B7DD8A /* WKBundleInspector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBundleInspector.cpp; sourceTree = "<group>"; };
+ 65B86F1812F11D7B00B7DD8A /* WKBundleInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleInspector.h; sourceTree = "<group>"; };
6D8A91A511F0EFD100DD01FE /* com.apple.WebProcess.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = com.apple.WebProcess.sb; path = WebProcess/com.apple.WebProcess.sb; sourceTree = "<group>"; };
762B7481120BBA0100819339 /* FontSmoothingLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontSmoothingLevel.h; sourceTree = "<group>"; };
762B7484120BBA2D00819339 /* WKPreferencesPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPreferencesPrivate.h; sourceTree = "<group>"; };
@@ -1049,6 +1095,7 @@
93FC679F12D3CC7400A60610 /* EncoderAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EncoderAdapter.cpp; sourceTree = "<group>"; };
93FC67A012D3CC7400A60610 /* EncoderAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EncoderAdapter.h; sourceTree = "<group>"; };
A72D5D7F1236CBA800A88B15 /* WebSerializedScriptValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSerializedScriptValue.h; sourceTree = "<group>"; };
+ B396EA5512E0ED2D00F4FEB7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
BC0092F5115837A300E0AE2A /* RunLoopMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RunLoopMac.mm; sourceTree = "<group>"; };
BC0092F6115837A300E0AE2A /* WorkQueueMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkQueueMac.cpp; sourceTree = "<group>"; };
BC032D6010F4378D0058C15A /* WebChromeClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebChromeClient.h; sourceTree = "<group>"; };
@@ -1098,7 +1145,7 @@
BC111A54112F4FBB00337BAB /* WebContextMenuClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextMenuClient.cpp; sourceTree = "<group>"; };
BC111A56112F4FBB00337BAB /* WebDragClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDragClient.cpp; sourceTree = "<group>"; };
BC111A57112F4FBB00337BAB /* WebEditorClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebEditorClient.cpp; sourceTree = "<group>"; };
- BC111A58112F4FBB00337BAB /* WebFrameLoaderClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebFrameLoaderClient.cpp; sourceTree = "<group>"; };
+ BC111A58112F4FBB00337BAB /* WebFrameLoaderClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebFrameLoaderClient.cpp; sourceTree = "<group>"; wrapsLines = 0; };
BC111A59112F4FBB00337BAB /* WebInspectorClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebInspectorClient.cpp; sourceTree = "<group>"; };
BC111ADC112F5B9300337BAB /* WebFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebFrame.cpp; sourceTree = "<group>"; };
BC111ADF112F5BC200337BAB /* WebErrorsMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebErrorsMac.mm; sourceTree = "<group>"; };
@@ -1140,7 +1187,7 @@
BC204EEA11C83EC8008F3375 /* WKBundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundle.h; sourceTree = "<group>"; };
BC204EEB11C83EC8008F3375 /* WKBundleAPICast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleAPICast.h; sourceTree = "<group>"; };
BC204EED11C83EC8008F3375 /* WKBundleInitialize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleInitialize.h; sourceTree = "<group>"; };
- BC20527F11C94284008F3375 /* WKBundlePage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundlePage.h; sourceTree = "<group>"; };
+ BC20527F11C94284008F3375 /* WKBundlePage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundlePage.h; sourceTree = "<group>"; wrapsLines = 0; };
BC20528011C94284008F3375 /* WKBundlePage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBundlePage.cpp; sourceTree = "<group>"; };
BC2651F511825EF800243E12 /* ChunkedUpdateDrawingAreaProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ChunkedUpdateDrawingAreaProxyMac.mm; sourceTree = "<group>"; };
BC2652121182608100243E12 /* DrawingAreaProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawingAreaProxy.cpp; sourceTree = "<group>"; };
@@ -1237,6 +1284,8 @@
BC646C1811DD399F006455B0 /* WKBackForwardListItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBackForwardListItem.cpp; sourceTree = "<group>"; };
BC646C1911DD399F006455B0 /* WKBackForwardListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBackForwardListItem.h; sourceTree = "<group>"; };
BC6EDAA5111271C600E7678B /* PageClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageClient.h; sourceTree = "<group>"; };
+ BC7043CA12F75EE0006472B9 /* WKBundleNavigationAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleNavigationAction.h; sourceTree = "<group>"; };
+ BC7043CB12F75EE0006472B9 /* WKBundleNavigationAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBundleNavigationAction.cpp; sourceTree = "<group>"; };
BC72B9F811E6476B001EB4EA /* WebBackForwardListProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebBackForwardListProxy.cpp; sourceTree = "<group>"; };
BC72B9F911E6476B001EB4EA /* WebBackForwardListProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardListProxy.h; sourceTree = "<group>"; };
BC72BA1B11E64907001EB4EA /* WebBackForwardList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebBackForwardList.cpp; sourceTree = "<group>"; };
@@ -1251,6 +1300,10 @@
BC7B633612A45ABA00D174A4 /* WKPageGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKPageGroup.cpp; sourceTree = "<group>"; };
BC7B633B12A45D1200D174A4 /* WKBundlePageGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundlePageGroup.h; sourceTree = "<group>"; };
BC7B633C12A45D1200D174A4 /* WKBundlePageGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBundlePageGroup.cpp; sourceTree = "<group>"; };
+ BC8147A712F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePagePolicyClient.h; sourceTree = "<group>"; wrapsLines = 0; };
+ BC8147A812F64CDA007B2C32 /* InjectedBundlePagePolicyClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePagePolicyClient.cpp; sourceTree = "<group>"; wrapsLines = 0; };
+ BC8147D312F66D31007B2C32 /* InjectedBundleNavigationAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundleNavigationAction.h; sourceTree = "<group>"; };
+ BC8147D412F66D31007B2C32 /* InjectedBundleNavigationAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundleNavigationAction.cpp; sourceTree = "<group>"; };
BC8452A51162C80900CAB9B5 /* DrawingArea.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawingArea.cpp; sourceTree = "<group>"; };
BC8452A61162C80900CAB9B5 /* DrawingArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawingArea.h; sourceTree = "<group>"; };
BC84EB1712A7100C0083F2DA /* WebPreferencesMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPreferencesMac.mm; sourceTree = "<group>"; };
@@ -1274,6 +1327,7 @@
BC90A1D0122DD55E00CC8C50 /* WebURLResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebURLResponse.h; sourceTree = "<group>"; };
BC90A1D1122DD55E00CC8C50 /* WebURLResponse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebURLResponse.cpp; sourceTree = "<group>"; };
BC90A1D5122DD66A00CC8C50 /* WebURLResponseMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebURLResponseMac.mm; sourceTree = "<group>"; };
+ BC9585C712F095B800755821 /* WebGestureEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebGestureEvent.cpp; sourceTree = "<group>"; };
BC963D6A113DD19200574BE2 /* WebPage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPage.cpp; sourceTree = "<group>"; };
BC963D6D113DD1A500574BE2 /* WebPageMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPageMac.mm; sourceTree = "<group>"; };
BC9B389F10F538BE00443A15 /* WebFrameProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebFrameProxy.h; sourceTree = "<group>"; };
@@ -1285,6 +1339,12 @@
BCA0EF7E12331E78007D3CFB /* WebEditCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebEditCommand.cpp; sourceTree = "<group>"; };
BCA0EF9D12332642007D3CFB /* WebEditCommandProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebEditCommandProxy.h; sourceTree = "<group>"; };
BCA0EF9E12332642007D3CFB /* WebEditCommandProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebEditCommandProxy.cpp; sourceTree = "<group>"; };
+ BCA56A1A12F9028E00C566C7 /* WebGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGraphicsContext.h; sourceTree = "<group>"; };
+ BCA56A1B12F9028E00C566C7 /* WebGraphicsContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebGraphicsContext.cpp; sourceTree = "<group>"; };
+ BCA56A6312F9C8F900C566C7 /* WKGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKGraphicsContext.h; sourceTree = "<group>"; };
+ BCA56A6412F9C8F900C566C7 /* WKGraphicsContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKGraphicsContext.cpp; sourceTree = "<group>"; };
+ BCA56A6712F9C9AD00C566C7 /* WKGraphicsContextCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKGraphicsContextCG.h; sourceTree = "<group>"; };
+ BCA56A6812F9C9AD00C566C7 /* WKGraphicsContextCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKGraphicsContextCG.cpp; sourceTree = "<group>"; };
BCA8C6A611E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageLoaderClient.cpp; sourceTree = "<group>"; };
BCA8C6A711E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePageLoaderClient.h; sourceTree = "<group>"; };
BCA8C6AD11E3C08700812FB7 /* InjectedBundlePageUIClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageUIClient.cpp; sourceTree = "<group>"; };
@@ -1397,6 +1457,7 @@
BCF69FA11176D01400471A52 /* WebNavigationData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebNavigationData.cpp; sourceTree = "<group>"; };
BCF69FA71176D1CB00471A52 /* WKNavigationData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNavigationData.h; sourceTree = "<group>"; };
BCF69FA81176D1CB00471A52 /* WKNavigationData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKNavigationData.cpp; sourceTree = "<group>"; };
+ BFA6179E12F0B99D0033E0CA /* WKViewPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKViewPrivate.h; sourceTree = "<group>"; };
C01A260012662F2100C9ED55 /* ShareableBitmapCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShareableBitmapCG.cpp; sourceTree = "<group>"; };
C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeWebKeyboardEvent.h; sourceTree = "<group>"; };
C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NativeWebKeyboardEventMac.mm; sourceTree = "<group>"; };
@@ -1431,6 +1492,8 @@
D3B9484311FF4B6500032B39 /* WebPopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPopupMenu.h; sourceTree = "<group>"; };
D3B9484411FF4B6500032B39 /* WebSearchPopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSearchPopupMenu.cpp; sourceTree = "<group>"; };
D3B9484511FF4B6500032B39 /* WebSearchPopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSearchPopupMenu.h; sourceTree = "<group>"; };
+ E134F01512EA5D11004EC58D /* WKPrintingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPrintingView.h; sourceTree = "<group>"; };
+ E134F01912EA5D99004EC58D /* WKPrintingView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKPrintingView.mm; sourceTree = "<group>"; };
E18C92F312DB9E7100CF2AEB /* PrintInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrintInfo.cpp; sourceTree = "<group>"; };
E1CC1B8E12D7EADF00625838 /* PrintInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrintInfo.h; sourceTree = "<group>"; };
E1CC1B8F12D7EADF00625838 /* PrintInfoMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PrintInfoMac.mm; sourceTree = "<group>"; };
@@ -1453,7 +1516,6 @@
F634445A12A885E9000612D8 /* WKSecurityOrigin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKSecurityOrigin.cpp; sourceTree = "<group>"; };
F634445B12A885E9000612D8 /* WKSecurityOrigin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKSecurityOrigin.h; sourceTree = "<group>"; };
F67DD7B9125E40D9007BDCB8 /* WKSerializedScriptValuePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKSerializedScriptValuePrivate.h; sourceTree = "<group>"; };
- F6A25FD812ADC6BD00DC40CC /* WebDatabaseManagerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebDatabaseManagerMac.mm; sourceTree = "<group>"; };
F6A25FDA12ADC6CC00DC40CC /* WebDatabaseManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDatabaseManager.cpp; sourceTree = "<group>"; };
F6A25FDB12ADC6CC00DC40CC /* WebDatabaseManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDatabaseManager.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -1501,6 +1563,7 @@
0867D691FE84028FC02AAC07 /* WebKit2 */ = {
isa = PBXGroup;
children = (
+ B396EA5512E0ED2D00F4FEB7 /* config.h */,
C0CE72DB1247E8F700BC0EC4 /* DerivedSources.make */,
BC2E6E74114196F000A63B1E /* Platform */,
1A0EC6B0124BBD36007EF4A5 /* PluginProcess */,
@@ -1761,6 +1824,7 @@
BC64696E11DBE603006455B0 /* ImmutableArray.h */,
BCBCB0CC1215E33A00DE59CA /* ImmutableDictionary.cpp */,
BCBCB0CA1215E32100DE59CA /* ImmutableDictionary.h */,
+ 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */,
BCC8049D122F0D6B00103529 /* MutableArray.cpp */,
BCC8049E122F0D6B00103529 /* MutableArray.h */,
BCB0AEE8122F53E300B1341E /* MutableDictionary.cpp */,
@@ -1804,6 +1868,8 @@
1A90C1ED1264FD50003E44D4 /* WebFindOptions.h */,
BC0E607212D6BC200012A72A /* WebGeolocationPosition.cpp */,
BC0E607112D6BC200012A72A /* WebGeolocationPosition.h */,
+ BCA56A1B12F9028E00C566C7 /* WebGraphicsContext.cpp */,
+ BCA56A1A12F9028E00C566C7 /* WebGraphicsContext.h */,
BCCF6ABA12C91EF9008F9C35 /* WebImage.cpp */,
BCCF6ABB12C91EF9008F9C35 /* WebImage.h */,
C0337DD2127A2A0E008FF4F4 /* WebKeyboardEvent.cpp */,
@@ -1836,6 +1902,7 @@
BC90A1D0122DD55E00CC8C50 /* WebURLResponse.h */,
F6113E24126CE1820057D0A7 /* WebUserContentURLPattern.h */,
C0337DD0127A2980008FF4F4 /* WebWheelEvent.cpp */,
+ BC9585C712F095B800755821 /* WebGestureEvent.cpp */,
1A64245D12DE29A100CAAE2C /* UpdateInfo.cpp */,
);
path = Shared;
@@ -2056,6 +2123,8 @@
1A90C1F21264FD71003E44D4 /* FindController.h */,
0F5265B111DD37680006D33C /* LayerBackedDrawingArea.cpp */,
0F5265B211DD37680006D33C /* LayerBackedDrawingArea.h */,
+ 1A186EE912EF7618008E5F37 /* LayerTreeHost.cpp */,
+ 1A186EE812EF7618008E5F37 /* LayerTreeHost.h */,
1A90C23612650717003E44D4 /* PageOverlay.cpp */,
1A90C23512650717003E44D4 /* PageOverlay.h */,
BC72B9F811E6476B001EB4EA /* WebBackForwardListProxy.cpp */,
@@ -2275,7 +2344,6 @@
children = (
C554FFA212E4E8EA002F22C0 /* WebDragClientMac.mm */,
51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */,
- F6A25FD812ADC6BD00DC40CC /* WebDatabaseManagerMac.mm */,
C5237F5F12441CA300780472 /* WebEditorClientMac.mm */,
BC111ADF112F5BC200337BAB /* WebErrorsMac.mm */,
9391F283121B38F500EBF7E8 /* WebFrameNetworkingContext.h */,
@@ -2317,11 +2385,14 @@
1AAF061312B01131008E49E2 /* PDFViewController.mm */,
BC111B4B112F619200337BAB /* PageClientImpl.h */,
BC111B4C112F619200337BAB /* PageClientImpl.mm */,
+ E134F01512EA5D11004EC58D /* WKPrintingView.h */,
+ E134F01912EA5D99004EC58D /* WKPrintingView.mm */,
1A4A9AA612B7E796008FE984 /* WKTextInputWindowController.h */,
1A4A9AA712B7E796008FE984 /* WKTextInputWindowController.mm */,
BC8699B2116AADAA002A925B /* WKView.h */,
BC8699B3116AADAA002A925B /* WKView.mm */,
BC8699B4116AADAA002A925B /* WKViewInternal.h */,
+ BFA6179E12F0B99D0033E0CA /* WKViewPrivate.h */,
);
path = mac;
sourceTree = "<group>";
@@ -2329,13 +2400,19 @@
BC111B5A112F628200337BAB /* mac */ = {
isa = PBXGroup;
children = (
- C574A57F12E66681002DFE98 /* PasteboardTypes.h */,
- C574A58012E66681002DFE98 /* PasteboardTypes.mm */,
1A6F9FB611E1408500DB1371 /* CommandLineMac.cpp */,
+ 1A9639F512F38ECD0078A062 /* CoreAnimationRenderer.h */,
+ 1A9639F612F38ECD0078A062 /* CoreAnimationRenderer.mm */,
+ 1A92DC1212F8BAB90017AF65 /* LayerTreeContextMac.mm */,
C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */,
- BCF505E61243047B005955AE /* PlatformCertificateInfo.mm */,
+ C574A57F12E66681002DFE98 /* PasteboardTypes.h */,
+ C574A58012E66681002DFE98 /* PasteboardTypes.mm */,
BCF505E51243047B005955AE /* PlatformCertificateInfo.h */,
+ BCF505E61243047B005955AE /* PlatformCertificateInfo.mm */,
E1CC1B8F12D7EADF00625838 /* PrintInfoMac.mm */,
+ 1AAB4AA91296F1540023952F /* SandboxExtensionMac.mm */,
+ 1A9636BA12F348490078A062 /* ShareableSurface.cpp */,
+ 1A9636BB12F348490078A062 /* ShareableSurface.h */,
BC9E95D211449B0300870E71 /* UpdateChunk.cpp */,
BC9E95D111449B0300870E71 /* UpdateChunk.h */,
BCE23262122C6CF300D5C35A /* WebCoreArgumentCodersMac.mm */,
@@ -2344,7 +2421,6 @@
905620E512BC2476000799B6 /* WebMemorySampler.mac.mm */,
BCE231C0122C466E00D5C35A /* WebURLRequestMac.mm */,
BC90A1D5122DD66A00CC8C50 /* WebURLResponseMac.mm */,
- 1AAB4AA91296F1540023952F /* SandboxExtensionMac.mm */,
);
path = mac;
sourceTree = "<group>";
@@ -2365,18 +2441,20 @@
isa = PBXGroup;
children = (
BC204EE711C83EAD008F3375 /* API */,
- BC204EE411C83E9C008F3375 /* mac */,
BC4BEE96120A091700FBA0C7 /* DOM */,
+ BC204EE411C83E9C008F3375 /* mac */,
BC204EE011C83E98008F3375 /* InjectedBundle.cpp */,
BC204EE111C83E98008F3375 /* InjectedBundle.h */,
- BCEE7DC4128B645D009827DA /* InjectedBundleClient.cpp */,
- BCEE7DC3128B645D009827DA /* InjectedBundleClient.h */,
935EEB8F1277615D003322B8 /* InjectedBundleBackForwardList.cpp */,
935EEB901277615D003322B8 /* InjectedBundleBackForwardList.h */,
935EEB911277615D003322B8 /* InjectedBundleBackForwardListItem.cpp */,
935EEB921277615D003322B8 /* InjectedBundleBackForwardListItem.h */,
+ BCEE7DC4128B645D009827DA /* InjectedBundleClient.cpp */,
+ BCEE7DC3128B645D009827DA /* InjectedBundleClient.h */,
BC498617124D10E200D834E1 /* InjectedBundleHitTestResult.cpp */,
BC498616124D10E200D834E1 /* InjectedBundleHitTestResult.h */,
+ BC8147D412F66D31007B2C32 /* InjectedBundleNavigationAction.cpp */,
+ BC8147D312F66D31007B2C32 /* InjectedBundleNavigationAction.h */,
512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */,
512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */,
E1EE53E611F8CFFB00CCBEE4 /* InjectedBundlePageEditorClient.cpp */,
@@ -2385,6 +2463,10 @@
BC14E108120B905E00826C0C /* InjectedBundlePageFormClient.h */,
BCA8C6A611E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.cpp */,
BCA8C6A711E3BA5F00812FB7 /* InjectedBundlePageLoaderClient.h */,
+ BC8147A812F64CDA007B2C32 /* InjectedBundlePagePolicyClient.cpp */,
+ BC8147A712F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h */,
+ 6546A82913000164000CEB1C /* InjectedBundlePageResourceLoadClient.cpp */,
+ 6546A82A13000164000CEB1C /* InjectedBundlePageResourceLoadClient.h */,
BCA8C6AD11E3C08700812FB7 /* InjectedBundlePageUIClient.cpp */,
BCA8C6AE11E3C08700812FB7 /* InjectedBundlePageUIClient.h */,
BC14DF76120B5B7900826C0C /* InjectedBundleScriptWorld.cpp */,
@@ -2426,6 +2508,10 @@
BC49862E124D18C100D834E1 /* WKBundleHitTestResult.cpp */,
BC49862D124D18C100D834E1 /* WKBundleHitTestResult.h */,
BC204EED11C83EC8008F3375 /* WKBundleInitialize.h */,
+ 65B86F1712F11D7B00B7DD8A /* WKBundleInspector.cpp */,
+ 65B86F1812F11D7B00B7DD8A /* WKBundleInspector.h */,
+ BC7043CB12F75EE0006472B9 /* WKBundleNavigationAction.cpp */,
+ BC7043CA12F75EE0006472B9 /* WKBundleNavigationAction.h */,
BC4BEFE0120A1A4C00FBA0C7 /* WKBundleNodeHandle.cpp */,
BC4BEFDF120A1A4C00FBA0C7 /* WKBundleNodeHandle.h */,
BC57450B1263B155006F0F12 /* WKBundleNodeHandlePrivate.h */,
@@ -2532,10 +2618,12 @@
BC963D6C113DD19500574BE2 /* mac */ = {
isa = PBXGroup;
children = (
- 29CD55A9128E294F00133C85 /* AccessibilityWebPageObject.mm */,
29CD55A8128E294F00133C85 /* AccessibilityWebPageObject.h */,
+ 29CD55A9128E294F00133C85 /* AccessibilityWebPageObject.mm */,
BC5F7BB8118237990052C02C /* ChunkedUpdateDrawingAreaMac.cpp */,
0F5265B511DD37700006D33C /* LayerBackedDrawingAreaMac.mm */,
+ 1A690D1612F39E3300ECD289 /* LayerTreeHostMac.h */,
+ 1A18718412EF9877008E5F37 /* LayerTreeHostMac.mm */,
1C8E2DAD1278C5B200BC7BD0 /* WebInspectorMac.mm */,
BC963D6D113DD1A500574BE2 /* WebPageMac.mm */,
);
@@ -2573,6 +2661,8 @@
BCCF6AC412C91F3B008F9C35 /* cg */ = {
isa = PBXGroup;
children = (
+ BCA56A6812F9C9AD00C566C7 /* WKGraphicsContextCG.cpp */,
+ BCA56A6712F9C9AD00C566C7 /* WKGraphicsContextCG.h */,
BCCF6AC712C91F59008F9C35 /* WKImageCG.cpp */,
BCCF6AC812C91F59008F9C35 /* WKImageCG.h */,
);
@@ -2610,6 +2700,8 @@
BC40783C1250FADD0068F20A /* WKEvent.h */,
37F623B712A57B6200E3FDF6 /* WKFindOptions.h */,
BCC8B373125FB69000DE46A4 /* WKGeometry.h */,
+ BCA56A6412F9C8F900C566C7 /* WKGraphicsContext.cpp */,
+ BCA56A6312F9C8F900C566C7 /* WKGraphicsContext.h */,
BCCF6AC012C91F34008F9C35 /* WKImage.cpp */,
BCCF6AC112C91F34008F9C35 /* WKImage.h */,
BC4075E1124FF0270068F20A /* WKMutableArray.cpp */,
@@ -2821,6 +2913,7 @@
BC204EF011C83EC8008F3375 /* WKBundleAPICast.h in Headers */,
BCD25F1711D6BDE100169B0E /* WKBundleFrame.h in Headers */,
BC204EF211C83EC8008F3375 /* WKBundleInitialize.h in Headers */,
+ 65B86F1E12F11DE300B7DD8A /* WKBundleInspector.h in Headers */,
BC20528111C94284008F3375 /* WKBundlePage.h in Headers */,
BC1B419811D41D570011E8DD /* WKBundlePagePrivate.h in Headers */,
BCB9E24B1120E15C00A137E0 /* WKContext.h in Headers */,
@@ -3069,6 +3162,19 @@
C517388112DF8F4F00EE3F47 /* DragControllerAction.h in Headers */,
1AA2E51D12E4C05E00BC4966 /* CGUtilities.h in Headers */,
C574A58112E66681002DFE98 /* PasteboardTypes.h in Headers */,
+ E134F01712EA5D33004EC58D /* WKPrintingView.h in Headers */,
+ 1A186EEA12EF7618008E5F37 /* LayerTreeHost.h in Headers */,
+ BFA6179F12F0B99D0033E0CA /* WKViewPrivate.h in Headers */,
+ 1A9636BD12F348490078A062 /* ShareableSurface.h in Headers */,
+ 1A9639F712F38ECD0078A062 /* CoreAnimationRenderer.h in Headers */,
+ 1A690D1712F39E3300ECD289 /* LayerTreeHostMac.h in Headers */,
+ BC8147A912F64CDA007B2C32 /* InjectedBundlePagePolicyClient.h in Headers */,
+ BC8147D512F66D31007B2C32 /* InjectedBundleNavigationAction.h in Headers */,
+ BC7043CC12F75EE0006472B9 /* WKBundleNavigationAction.h in Headers */,
+ 1A92DC1112F8BA460017AF65 /* LayerTreeContext.h in Headers */,
+ BCA56A1C12F9028E00C566C7 /* WebGraphicsContext.h in Headers */,
+ BCA56A6512F9C8F900C566C7 /* WKGraphicsContext.h in Headers */,
+ BCA56A6912F9C9AD00C566C7 /* WKGraphicsContextCG.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3474,7 +3580,6 @@
512F58F912A88A5400629530 /* WKCredential.cpp in Sources */,
512F58FB12A88A5400629530 /* WKProtectionSpace.cpp in Sources */,
F634445C12A885E9000612D8 /* WKSecurityOrigin.cpp in Sources */,
- F6A25FD912ADC6BD00DC40CC /* WebDatabaseManagerMac.mm in Sources */,
F6A25FDC12ADC6CC00DC40CC /* WebDatabaseManager.cpp in Sources */,
51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */,
1AAF061512B01131008E49E2 /* PDFViewController.mm in Sources */,
@@ -3532,6 +3637,21 @@
1AA2E51E12E4C05E00BC4966 /* CGUtilities.cpp in Sources */,
C574A37712E6099D002DFE98 /* WebDragClientMac.mm in Sources */,
C574A58212E66681002DFE98 /* PasteboardTypes.mm in Sources */,
+ E134F01A12EA5D99004EC58D /* WKPrintingView.mm in Sources */,
+ BC9585C812F095B800755821 /* WebGestureEvent.cpp in Sources */,
+ 1A186EEB12EF7618008E5F37 /* LayerTreeHost.cpp in Sources */,
+ 1A18718512EF9877008E5F37 /* LayerTreeHostMac.mm in Sources */,
+ 6501BD1A12F1243400E9F248 /* WKBundleInspector.cpp in Sources */,
+ 1A9636BC12F348490078A062 /* ShareableSurface.cpp in Sources */,
+ 1A9639F812F38ECD0078A062 /* CoreAnimationRenderer.mm in Sources */,
+ BC8147AA12F64CDA007B2C32 /* InjectedBundlePagePolicyClient.cpp in Sources */,
+ BC8147D612F66D31007B2C32 /* InjectedBundleNavigationAction.cpp in Sources */,
+ BC7043CD12F75EE0006472B9 /* WKBundleNavigationAction.cpp in Sources */,
+ 1A92DC1312F8BAB90017AF65 /* LayerTreeContextMac.mm in Sources */,
+ BCA56A1D12F9028E00C566C7 /* WebGraphicsContext.cpp in Sources */,
+ BCA56A6612F9C8F900C566C7 /* WKGraphicsContext.cpp in Sources */,
+ BCA56A6A12F9C9AD00C566C7 /* WKGraphicsContextCG.cpp in Sources */,
+ 659C551E130006410025C0C2 /* InjectedBundlePageResourceLoadClient.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/WebKit2/WebKit2Prefix.h b/Source/WebKit2/WebKit2Prefix.h
index 7ed70cb..a96014f 100644
--- a/Source/WebKit2/WebKit2Prefix.h
+++ b/Source/WebKit2/WebKit2Prefix.h
@@ -24,102 +24,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if defined (BUILDING_GTK__)
-#include <WebCore/config.h>
-#endif /* defined (BUILDING_GTK__) */
-
-#include <wtf/Platform.h>
-#include <wtf/DisallowCType.h>
-#ifdef __cplusplus
-#include <wtf/FastMalloc.h>
-#endif
-
-#ifdef __cplusplus
-#define EXTERN_C_BEGIN extern "C" {
-#define EXTERN_C_END }
-#else
-#define EXTERN_C_BEGIN
-#define EXTERN_C_END
-#endif
-
-// For defining getters to a static value, where the getters have internal linkage
-#define DEFINE_STATIC_GETTER(type, name, arguments) \
-static const type& name() \
-{ \
- DEFINE_STATIC_LOCAL(type, name##Value, arguments); \
- return name##Value; \
-}
-
-#if defined(BUILDING_QT__)
-
-#define WTF_USE_JSC 1
-#define WTF_USE_V8 0
-
-#define JS_EXPORTDATA
-#define JS_EXPORTCLASS
-
-// Disable notImplemented() warnings not to break layout tests.
-// FIXME: WebKit2 logging system should behave identical to WebKit1.
-#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
-
-#elif defined(__APPLE__)
-
-#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
-#define ENABLE_WEB_PROCESS_SANDBOX 1
-#endif
-
-#define ENABLE_PLUGIN_PROCESS 1
-
-#if PLATFORM(MAC)
-#define ENABLE_MEMORY_SAMPLER 1
-#endif
-
-#import <CoreGraphics/CoreGraphics.h>
-
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
-/* WebKit has no way to pull settings from WebCore/config.h for now */
-/* so we assume WebKit is always being compiled on top of JavaScriptCore */
-#define WTF_USE_JSC 1
-#define WTF_USE_V8 0
-
-#define JS_EXPORTDATA
-#define JS_EXPORTCLASS
-#define WEBKIT_EXPORTDATA
-
-#include <WebCore/EmptyProtocolDefinitions.h>
-
-#elif defined(WIN32) || defined(_WIN32)
-
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
-#endif
-
-#ifndef WINVER
-#define WINVER 0x0500
-#endif
-
-/* If we don't define these, they get defined in windef.h. */
-/* We want to use std::min and std::max. */
-#ifndef max
-#define max max
-#endif
-#ifndef min
-#define min min
-#endif
-
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
-#endif
-
-#include <WebCore/config.h>
-#include <windows.h>
-
-#if PLATFORM(CG)
-#include <CoreGraphics/CoreGraphics.h>
+#ifdef __cplusplus
+#define new ("if you use new/delete make sure to include config.h at the top of the file"())
+#define delete ("if you use new/delete make sure to include config.h at the top of the file"())
#endif
-
-#endif /* defined(WIN32) || defined(_WIN32) */
-
diff --git a/Source/WebKit2/WebProcess.pro b/Source/WebKit2/WebProcess.pro
index 94f49cd..bc0b878 100644
--- a/Source/WebKit2/WebProcess.pro
+++ b/Source/WebKit2/WebProcess.pro
@@ -5,7 +5,7 @@ SOURCES += \
qt/MainQt.cpp
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../..
-include(../../WebKit.pri)
+include($$PWD/../WebKit.pri)
DESTDIR = $$OUTPUT_DIR/bin
!CONFIG(standalone_package): CONFIG -= app_bundle
diff --git a/Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp b/Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp
index 36757d6..af35f75 100644
--- a/Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp
+++ b/Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "AuthenticationManager.h"
#include "MessageID.h"
diff --git a/Source/WebKit2/WebProcess/Downloads/Download.cpp b/Source/WebKit2/WebProcess/Downloads/Download.cpp
index 3cb5588..1c36df2 100644
--- a/Source/WebKit2/WebProcess/Downloads/Download.cpp
+++ b/Source/WebKit2/WebProcess/Downloads/Download.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Download.h"
#include "Connection.h"
@@ -45,6 +46,9 @@ PassOwnPtr<Download> Download::create(uint64_t downloadID, const ResourceRequest
Download::Download(uint64_t downloadID, const ResourceRequest& request)
: m_downloadID(downloadID)
, m_request(request)
+#if USE(CFNETWORK)
+ , m_allowOverwrite(false)
+#endif
{
ASSERT(m_downloadID);
}
@@ -83,7 +87,7 @@ bool Download::shouldDecodeSourceDataOfMIMEType(const String& mimeType)
return result;
}
-String Download::decideDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite)
+String Download::retrieveDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite)
{
String destination;
SandboxExtension::Handle sandboxExtensionHandle;
@@ -97,6 +101,15 @@ String Download::decideDestinationWithSuggestedFilename(const String& filename,
return destination;
}
+String Download::decideDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite)
+{
+ String destination = retrieveDestinationWithSuggestedFilename(filename, allowOverwrite);
+
+ didDecideDestination(destination, allowOverwrite);
+
+ return destination;
+}
+
void Download::didCreateDestination(const String& path)
{
send(Messages::DownloadProxy::DidCreateDestination(path));
@@ -104,6 +117,8 @@ void Download::didCreateDestination(const String& path)
void Download::didFinish()
{
+ platformDidFinish();
+
send(Messages::DownloadProxy::DidFinish());
if (m_sandboxExtension)
diff --git a/Source/WebKit2/WebProcess/Downloads/Download.h b/Source/WebKit2/WebProcess/Downloads/Download.h
index bacdd01..26d8f3d 100644
--- a/Source/WebKit2/WebProcess/Downloads/Download.h
+++ b/Source/WebKit2/WebProcess/Downloads/Download.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -33,13 +33,9 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSURLDownload;
-@class WKDownloadAsDelegate;
-#else
-class NSURLDownload;
-class WKDownloadAsDelegate;
-#endif
+
+OBJC_CLASS NSURLDownload;
+OBJC_CLASS WKDownloadAsDelegate;
#endif
#if USE(CFNETWORK)
@@ -84,14 +80,22 @@ public:
String decideDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite);
void didCreateDestination(const String& path);
void didFinish();
+ void platformDidFinish();
void didFail(const WebCore::ResourceError&, const CoreIPC::DataReference& resumeData);
void didCancel(const CoreIPC::DataReference& resumeData);
+ void didDecideDestination(const String&, bool allowOverwrite);
+
+#if USE(CFNETWORK)
+ const String& destination() const { return m_destination; }
+#endif
private:
Download(uint64_t downloadID, const WebCore::ResourceRequest&);
void platformInvalidate();
+ String retrieveDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite);
+
uint64_t m_downloadID;
WebCore::ResourceRequest m_request;
@@ -102,6 +106,9 @@ private:
RetainPtr<WKDownloadAsDelegate> m_delegate;
#endif
#if USE(CFNETWORK)
+ bool m_allowOverwrite;
+ String m_destination;
+ String m_bundlePath;
RetainPtr<CFURLDownloadRef> m_download;
#endif
};
diff --git a/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp b/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp
index e65883a..1cb288e 100644
--- a/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp
+++ b/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DownloadManager.h"
#include "Download.h"
diff --git a/Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp b/Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
index 08c381f..c8a065e 100644
--- a/Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
+++ b/Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,12 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Download.h"
#include "DataReference.h"
#include "NotImplemented.h"
#pragma warning(push, 0)
+#include <WebCore/DownloadBundle.h>
#include <WebCore/LoaderRunLoopCF.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceHandle.h>
@@ -52,7 +54,7 @@ static void didCreateDestinationCallback(CFURLDownloadRef download, CFURLRef pat
static void didFinishCallback(CFURLDownloadRef download, const void* clientInfo);
static void didFailCallback(CFURLDownloadRef download, CFErrorRef error, const void* clientInfo);
-void Download::start(WebPage* initiatingWebPage)
+void Download::start(WebPage*)
{
ASSERT(!m_download);
@@ -70,7 +72,7 @@ void Download::start(WebPage* initiatingWebPage)
CFURLDownloadScheduleDownloadWithRunLoop(m_download.get(), loaderRunLoop(), kCFRunLoopDefaultMode);
}
-void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle* handle, const ResourceRequest& initialRequest, const ResourceResponse& response)
+void Download::startWithHandle(WebPage*, ResourceHandle* handle, const ResourceRequest& initialRequest, const ResourceResponse& response)
{
ASSERT(!m_download);
@@ -98,7 +100,18 @@ void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle* handle,
void Download::cancel()
{
- notImplemented();
+ ASSERT(m_download);
+ if (!m_download)
+ return;
+
+ CFURLDownloadSetDeletesUponFailure(m_download.get(), false);
+ CFURLDownloadCancel(m_download.get());
+
+ RetainPtr<CFDataRef> resumeData(AdoptCF, CFURLDownloadCopyResumeData(m_download.get()));
+ if (resumeData)
+ DownloadBundle::appendResumeData(resumeData.get(), m_bundlePath);
+
+ didCancel(CoreIPC::DataReference());
}
void Download::platformInvalidate()
@@ -106,6 +119,21 @@ void Download::platformInvalidate()
m_download = nullptr;
}
+void Download::didDecideDestination(const String& destination, bool allowOverwrite)
+{
+ ASSERT(!destination.isEmpty());
+ if (destination.isEmpty())
+ return;
+
+ m_allowOverwrite = allowOverwrite;
+ m_destination = destination;
+ m_bundlePath = destination + DownloadBundle::fileExtension();
+
+ RetainPtr<CFStringRef> bundlePath(AdoptCF, CFStringCreateWithCharactersNoCopy(0, reinterpret_cast<const UniChar*>(m_bundlePath.characters()), m_bundlePath.length(), kCFAllocatorNull));
+ RetainPtr<CFURLRef> bundlePathURL(AdoptCF, CFURLCreateWithFileSystemPath(0, bundlePath.get(), kCFURLWindowsPathStyle, false));
+ CFURLDownloadSetDestination(m_download.get(), bundlePathURL.get(), allowOverwrite);
+}
+
// CFURLDownload Callbacks ----------------------------------------------------------------
static Download* downloadFromClientInfo(const void* clientInfo)
{
@@ -136,7 +164,7 @@ void didReceiveResponseCallback(CFURLDownloadRef, CFURLResponseRef response, con
}
void willResumeWithResponseCallback(CFURLDownloadRef, CFURLResponseRef response, UInt64 startingByte, const void* clientInfo)
-{
+{
// FIXME: implement.
notImplemented();
}
@@ -151,24 +179,20 @@ Boolean shouldDecodeDataOfMIMETypeCallback(CFURLDownloadRef, CFStringRef encodin
return downloadFromClientInfo(clientInfo)->shouldDecodeSourceDataOfMIMEType(encodingType);
}
-void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef cfURLDownloadRef, CFStringRef objectName, const void* clientInfo)
+void decideDestinationWithSuggestedObjectNameCallback(CFURLDownloadRef, CFStringRef objectName, const void* clientInfo)
{
Download* download = downloadFromClientInfo(clientInfo);
bool allowOverwrite;
- String destination = download->decideDestinationWithSuggestedFilename(objectName, allowOverwrite);
- if (destination.isNull())
- return;
-
- RetainPtr<CFStringRef> cfPath(AdoptCF, CFStringCreateWithCharactersNoCopy(0, reinterpret_cast<const UniChar*>(destination.characters()), destination.length(), kCFAllocatorNull));
- RetainPtr<CFURLRef> pathURL(AdoptCF, CFURLCreateWithFileSystemPath(0, cfPath.get(), kCFURLWindowsPathStyle, false));
- CFURLDownloadSetDestination(cfURLDownloadRef, pathURL.get(), allowOverwrite);
+ download->decideDestinationWithSuggestedFilename(objectName, allowOverwrite);
}
-void didCreateDestinationCallback(CFURLDownloadRef, CFURLRef url, const void* clientInfo)
-{
- RetainPtr<CFStringRef> path(AdoptCF, CFURLCopyFileSystemPath(url, kCFURLWindowsPathStyle));
- String result(path.get());
- downloadFromClientInfo(clientInfo)->didCreateDestination(result);
+void didCreateDestinationCallback(CFURLDownloadRef, CFURLRef, const void* clientInfo)
+{
+ // The concept of the ".download bundle" is internal to the Download, so we try to hide its
+ // existence by reporting the final destination was created, when in reality the bundle was created.
+
+ Download* download = downloadFromClientInfo(clientInfo);
+ download->didCreateDestination(download->destination());
}
void didFinishCallback(CFURLDownloadRef, const void* clientInfo)
diff --git a/Source/WebKit2/WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp b/Source/WebKit2/WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp
new file mode 100644
index 0000000..0dd6508
--- /dev/null
+++ b/Source/WebKit2/WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "Download.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void Download::platformDidFinish()
+{
+ ASSERT(!m_bundlePath.isEmpty());
+ ASSERT(!m_destination.isEmpty());
+
+ // Try to move the bundle to the final filename.
+ DWORD flags = MOVEFILE_COPY_ALLOWED | (m_allowOverwrite ? MOVEFILE_REPLACE_EXISTING : 0);
+ if (::MoveFileExW(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), flags))
+ return;
+
+ // The move failed. Give the client one more chance to choose the final filename.
+ m_destination = retrieveDestinationWithSuggestedFilename(m_destination, m_allowOverwrite);
+ if (m_destination.isEmpty())
+ return;
+
+ // We either need to report our final filename as the bundle filename or the updated destination filename.
+ flags = MOVEFILE_COPY_ALLOWED | (m_allowOverwrite ? MOVEFILE_REPLACE_EXISTING : 0);
+ if (::MoveFileExW(m_bundlePath.charactersWithNullTermination(), m_destination.charactersWithNullTermination(), flags))
+ didCreateDestination(m_destination);
+ else
+ didCreateDestination(m_bundlePath);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp b/Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp
index 25ed351..eb0a1cd 100644
--- a/Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp
+++ b/Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2010 Brent Fulgham <bfulgham@webkit.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Download.h"
#include "NotImplemented.h"
@@ -52,4 +53,14 @@ void Download::platformInvalidate()
notImplemented();
}
+void Download::didDecideDestination(const String& destination, bool allowOverwrite)
+{
+ notImplemented();
+}
+
+void Download::platformDidFinish()
+{
+ notImplemented();
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm b/Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
index 6839020..0abd744 100644
--- a/Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
+++ b/Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,16 +23,17 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "Download.h"
+#import "config.h"
+#import "Download.h"
-#include <WebCore/BackForwardController.h>
-#include <WebCore/HistoryItem.h>
-#include <WebCore/Page.h>
-#include <WebCore/ResourceHandle.h>
-#include <WebCore/ResourceResponse.h>
-#include "DataReference.h"
-#include "NotImplemented.h"
-#include "WebPage.h"
+#import <WebCore/BackForwardController.h>
+#import <WebCore/HistoryItem.h>
+#import <WebCore/Page.h>
+#import <WebCore/ResourceHandle.h>
+#import <WebCore/ResourceResponse.h>
+#import "DataReference.h"
+#import "NotImplemented.h"
+#import "WebPage.h"
@interface NSURLDownload (WebNSURLDownloadDetails)
+(id)_downloadWithLoadingConnection:(NSURLConnection *)connection
@@ -168,6 +169,14 @@ void Download::platformInvalidate()
m_nsURLDownload = nullptr;
}
+void Download::didDecideDestination(const String& destination, bool allowOverwrite)
+{
+}
+
+void Download::platformDidFinish()
+{
+}
+
} // namespace WebKit
@implementation WKDownloadAsDelegate
diff --git a/Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp b/Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
index 34fd60e..131f53a 100644
--- a/Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
+++ b/Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Download.h"
#include "NotImplemented.h"
@@ -51,4 +52,14 @@ void Download::platformInvalidate()
notImplemented();
}
+void Download::didDecideDestination(const String& destination, bool allowOverwrite)
+{
+ notImplemented();
+}
+
+void Download::platformDidFinish()
+{
+ notImplemented();
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp b/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp
index 3068d5e..ba2aad0 100644
--- a/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp
+++ b/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "GeolocationPermissionRequestManager.h"
#include "WebFrame.h"
diff --git a/Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp b/Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp
index 713ba71..cee8e0b 100644
--- a/Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp
+++ b/Source/WebKit2/WebProcess/Geolocation/WebGeolocationManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebGeolocationManager.h"
#include "WebGeolocationManagerProxyMessages.h"
diff --git a/Source/WebKit2/WebProcess/Info.plist b/Source/WebKit2/WebProcess/Info.plist
index 1564066..1fa2672 100644
--- a/Source/WebKit2/WebProcess/Info.plist
+++ b/Source/WebKit2/WebProcess/Info.plist
@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>LSFileQuarantineEnabled</key>
+ <true/>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
index 5c4b6e9..a58dbda 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundle.h"
#include "WKBundlePrivate.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h
index 47ac2d6..db32716 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h
@@ -45,11 +45,13 @@ class InjectedBundle;
class InjectedBundleBackForwardList;
class InjectedBundleBackForwardListItem;
class InjectedBundleHitTestResult;
+class InjectedBundleNavigationAction;
class InjectedBundleNodeHandle;
class InjectedBundleRangeHandle;
class InjectedBundleScriptWorld;
class PageOverlay;
class WebFrame;
+class WebInspector;
class WebPage;
class WebPageGroupProxy;
@@ -58,6 +60,8 @@ WK_ADD_API_MAPPING(WKBundleBackForwardListRef, InjectedBundleBackForwardList)
WK_ADD_API_MAPPING(WKBundleCSSStyleDeclarationRef, WebCore::CSSStyleDeclaration)
WK_ADD_API_MAPPING(WKBundleFrameRef, WebFrame)
WK_ADD_API_MAPPING(WKBundleHitTestResultRef, InjectedBundleHitTestResult)
+WK_ADD_API_MAPPING(WKBundleInspectorRef, WebInspector)
+WK_ADD_API_MAPPING(WKBundleNavigationActionRef, InjectedBundleNavigationAction)
WK_ADD_API_MAPPING(WKBundleNodeHandleRef, InjectedBundleNodeHandle)
WK_ADD_API_MAPPING(WKBundlePageGroupRef, WebPageGroupProxy)
WK_ADD_API_MAPPING(WKBundlePageOverlayRef, PageOverlay)
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp
index 288c676..7ffa3ce 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleBackForwardList.h"
#include "InjectedBundleBackForwardList.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp
index cde15c4..e9845e3 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleBackForwardListItem.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp
index f02044c..82f616a 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleFrame.h"
#include "WKBundleFramePrivate.h"
@@ -55,6 +56,29 @@ WKURLRef WKBundleFrameCopyProvisionalURL(WKBundleFrameRef frameRef)
return toCopiedURLAPI(toImpl(frameRef)->provisionalURL());
}
+WKFrameLoadState WKBundleFrameGetFrameLoadState(WKBundleFrameRef frameRef)
+{
+ Frame* coreFrame = toImpl(frameRef)->coreFrame();
+ if (!coreFrame)
+ return kWKFrameLoadStateFinished;
+
+ FrameLoader* loader = coreFrame->loader();
+ if (!loader)
+ return kWKFrameLoadStateFinished;
+
+ switch (loader->state()) {
+ case FrameStateProvisional:
+ return kWKFrameLoadStateProvisional;
+ case FrameStateCommittedPage:
+ return kWKFrameLoadStateCommitted;
+ case FrameStateComplete:
+ return kWKFrameLoadStateFinished;
+ }
+
+ ASSERT_NOT_REACHED();
+ return kWKFrameLoadStateFinished;
+}
+
WKArrayRef WKBundleFrameCopyChildFrames(WKBundleFrameRef frameRef)
{
return toAPI(toImpl(frameRef)->childFrames().releaseRef());
@@ -152,58 +176,35 @@ bool WKBundleFrameAllowsFollowingLink(WKBundleFrameRef frameRef, WKURLRef urlRef
WKRect WKBundleFrameGetContentBounds(WKBundleFrameRef frameRef)
{
- WKRect contentBounds = { { 0, 0 }, { 0, 0 } };
-
- Frame* coreFrame = toImpl(frameRef)->coreFrame();
- if (!coreFrame)
- return contentBounds;
-
- FrameView* view = coreFrame->view();
- if (!view)
- return contentBounds;
-
- contentBounds.size.width = view->contentsWidth();
- contentBounds.size.height = view->contentsHeight();
-
- return contentBounds;
+ return toAPI(toImpl(frameRef)->contentBounds());
}
WKRect WKBundleFrameGetVisibleContentBounds(WKBundleFrameRef frameRef)
{
- WKRect visibleContentBounds = { { 0, 0 }, { 0, 0 } };
-
- Frame* coreFrame = toImpl(frameRef)->coreFrame();
- if (!coreFrame)
- return visibleContentBounds;
-
- FrameView* view = coreFrame->view();
- if (!view)
- return visibleContentBounds;
-
- FloatRect bounds = view->visibleContentRect(true);
+ return toAPI(toImpl(frameRef)->visibleContentBounds());
+}
- visibleContentBounds.size.width = bounds.width();
- visibleContentBounds.size.height = bounds.height();
-
- return visibleContentBounds;
+WKRect WKBundleFrameGetVisibleContentBoundsExcludingScrollbars(WKBundleFrameRef frameRef)
+{
+ return toAPI(toImpl(frameRef)->visibleContentBoundsExcludingScrollbars());
}
-WK_EXPORT WKSize WKBundleFrameGetScrollOffset(WKBundleFrameRef frameRef)
+WKSize WKBundleFrameGetScrollOffset(WKBundleFrameRef frameRef)
{
- WKSize scrollOffset = { 0, 0 };
-
- Frame* coreFrame = toImpl(frameRef)->coreFrame();
- if (!coreFrame)
- return scrollOffset;
-
- FrameView* view = coreFrame->view();
- if (!view)
- return scrollOffset;
-
- return toAPI(view->scrollOffset());
+ return toAPI(toImpl(frameRef)->scrollOffset());
+}
+
+bool WKBundleFrameGetDocumentBackgroundColor(WKBundleFrameRef frameRef, double* red, double* green, double* blue, double* alpha)
+{
+ return toImpl(frameRef)->getDocumentBackgroundColor(red, green, blue, alpha);
}
WKStringRef WKBundleFrameCopySuggestedFilenameForResourceWithURL(WKBundleFrameRef frameRef, WKURLRef urlRef)
{
return toCopiedAPI(toImpl(frameRef)->suggestedFilenameForResourceWithURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())));
}
+
+WKStringRef WKBundleFrameCopyMIMETypeForResourceWithURL(WKBundleFrameRef frameRef, WKURLRef urlRef)
+{
+ return toCopiedAPI(toImpl(frameRef)->mimeTypeForResourceWithURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())));
+}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h
index 59c2d75..3c7c52d 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h
@@ -28,6 +28,7 @@
#include <JavaScriptCore/JavaScript.h>
#include <WebKit2/WKBase.h>
+#include <WebKit2/WKFrame.h>
#include <WebKit2/WKGeometry.h>
#ifdef __cplusplus
@@ -43,6 +44,8 @@ WK_EXPORT WKStringRef WKBundleFrameCopyName(WKBundleFrameRef frame);
WK_EXPORT WKURLRef WKBundleFrameCopyURL(WKBundleFrameRef frame);
WK_EXPORT WKURLRef WKBundleFrameCopyProvisionalURL(WKBundleFrameRef frame);
+WK_EXPORT WKFrameLoadState WKBundleFrameGetFrameLoadState(WKBundleFrameRef frame);
+
WK_EXPORT JSGlobalContextRef WKBundleFrameGetJavaScriptContext(WKBundleFrameRef frame);
WK_EXPORT JSGlobalContextRef WKBundleFrameGetJavaScriptContextForWorld(WKBundleFrameRef frame, WKBundleScriptWorldRef world);
@@ -57,9 +60,13 @@ WK_EXPORT bool WKBundleFrameAllowsFollowingLink(WKBundleFrameRef frame, WKURLRef
WK_EXPORT WKRect WKBundleFrameGetContentBounds(WKBundleFrameRef frame);
WK_EXPORT WKRect WKBundleFrameGetVisibleContentBounds(WKBundleFrameRef frame);
+WK_EXPORT WKRect WKBundleFrameGetVisibleContentBoundsExcludingScrollbars(WKBundleFrameRef frame);
WK_EXPORT WKSize WKBundleFrameGetScrollOffset(WKBundleFrameRef frame);
+WK_EXPORT bool WKBundleFrameGetDocumentBackgroundColor(WKBundleFrameRef frame, double* red, double* green, double* blue, double* alpha);
+
WK_EXPORT WKStringRef WKBundleFrameCopySuggestedFilenameForResourceWithURL(WKBundleFrameRef frame, WKURLRef url);
+WK_EXPORT WKStringRef WKBundleFrameCopyMIMETypeForResourceWithURL(WKBundleFrameRef frame, WKURLRef url);
#ifdef __cplusplus
}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp
index 7e74262..b764ee9 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleHitTestResult.h"
#include "InjectedBundleHitTestResult.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp
new file mode 100644
index 0000000..ae69a53
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WKBundleInspector.h"
+
+#if ENABLE(INSPECTOR)
+
+#include "WKAPICast.h"
+#include "WKBundleAPICast.h"
+#include "WebInspector.h"
+
+using namespace WebCore;
+using namespace WebKit;
+
+WKTypeID WKBundleInspectorGetTypeID()
+{
+ return toAPI(WebInspector::APIType);
+}
+
+void WKBundleInspectorShow(WKBundleInspectorRef inspectorRef)
+{
+ return toImpl(inspectorRef)->show();
+}
+
+void WKBundleInspectorClose(WKBundleInspectorRef inspectorRef)
+{
+ return toImpl(inspectorRef)->close();
+}
+
+void WKBundleInspectorEvaluateScriptForTest(WKBundleInspectorRef inspectorRef, long callID, WKStringRef script)
+{
+ return toImpl(inspectorRef)->evaluateScriptForTest(callID, toImpl(script)->string());
+}
+
+void WKBundleInspectorSetPageProfilingEnabled(WKBundleInspectorRef inspectorRef, bool enabled)
+{
+ if (enabled)
+ toImpl(inspectorRef)->startPageProfiling();
+ else
+ toImpl(inspectorRef)->stopPageProfiling();
+}
+
+#endif // ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.h
new file mode 100644
index 0000000..e32fdf2
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKBundleInspector_h
+#define WKBundleInspector_h
+
+#include <WebKit2/WKBase.h>
+
+#if ENABLE(INSPECTOR)
+
+#ifndef __cplusplus
+#include <stdbool.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT WKTypeID WKBundleInspectorGetTypeID();
+
+WK_EXPORT void WKBundleInspectorShow(WKBundleInspectorRef inspector);
+WK_EXPORT void WKBundleInspectorClose(WKBundleInspectorRef inspector);
+
+WK_EXPORT void WKBundleInspectorEvaluateScriptForTest(WKBundleInspectorRef inspector, long callID, WKStringRef script);
+WK_EXPORT void WKBundleInspectorSetPageProfilingEnabled(WKBundleInspectorRef inspector, bool enabled);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ENABLE(INSPECTOR)
+
+#endif // WKBundleInspector_h
+
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp
new file mode 100644
index 0000000..c26ec3e
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WKBundleNavigationAction.h"
+
+#include "InjectedBundleHitTestResult.h"
+#include "InjectedBundleNavigationAction.h"
+#include "InjectedBundleNodeHandle.h"
+#include "WKAPICast.h"
+#include "WKBundleAPICast.h"
+
+using namespace WebKit;
+
+WKTypeID WKBundleNavigationActionGetTypeID()
+{
+ return toAPI(InjectedBundleNavigationAction::APIType);
+}
+
+WKFrameNavigationType WKBundleNavigationActionGetNavigationType(WKBundleNavigationActionRef navigationActionRef)
+{
+ return toAPI(toImpl(navigationActionRef)->navigationType());
+}
+
+WKEventModifiers WKBundleNavigationActionGetEventModifiers(WKBundleNavigationActionRef navigationActionRef)
+{
+ return toAPI(toImpl(navigationActionRef)->modifiers());
+}
+
+WKEventMouseButton WKBundleNavigationActionGetEventMouseButton(WKBundleNavigationActionRef navigationActionRef)
+{
+ return toAPI(toImpl(navigationActionRef)->mouseButton());
+}
+
+WKBundleHitTestResultRef WKBundleNavigationActionCopyHitTestResult(WKBundleNavigationActionRef navigationActionRef)
+{
+ RefPtr<InjectedBundleHitTestResult> hitTestResult = toImpl(navigationActionRef)->hitTestResult();
+ return toAPI(hitTestResult.release().leakRef());
+}
+
+WKBundleNodeHandleRef WKBundleNavigationActionCopyFormElement(WKBundleNavigationActionRef navigationActionRef)
+{
+ RefPtr<InjectedBundleNodeHandle> formElement = toImpl(navigationActionRef)->formElement();
+ return toAPI(formElement.release().leakRef());
+}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h
new file mode 100644
index 0000000..03f083a
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKBundleNavigationAction_h
+#define WKBundleNavigationAction_h
+
+#include <WebKit2/WKBase.h>
+#include <WebKit2/WKEvent.h>
+#include <WebKit2/WKPageLoadTypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT WKTypeID WKBundleNavigationActionGetTypeID();
+
+WK_EXPORT WKFrameNavigationType WKBundleNavigationActionGetNavigationType(WKBundleNavigationActionRef navigationAction);
+WK_EXPORT WKEventModifiers WKBundleNavigationActionGetEventModifiers(WKBundleNavigationActionRef navigationAction);
+WK_EXPORT WKEventMouseButton WKBundleNavigationActionGetEventMouseButton(WKBundleNavigationActionRef navigationAction);
+WK_EXPORT WKBundleHitTestResultRef WKBundleNavigationActionCopyHitTestResult(WKBundleNavigationActionRef navigationAction);
+WK_EXPORT WKBundleNodeHandleRef WKBundleNavigationActionCopyFormElement(WKBundleNavigationActionRef navigationAction);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKBundleNavigationAction_h */
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp
index bf853d1..9b0eaf1 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleNodeHandle.h"
#include "WKBundleNodeHandlePrivate.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
index 9693b6a..a1a4da3 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundlePage.h"
#include "WKBundlePagePrivate.h"
@@ -64,13 +65,27 @@ void WKBundlePageSetFormClient(WKBundlePageRef pageRef, WKBundlePageFormClient*
toImpl(pageRef)->initializeInjectedBundleFormClient(wkClient);
}
-void WKBundlePageSetLoaderClient(WKBundlePageRef pageRef, WKBundlePageLoaderClient* wkClient)
+void WKBundlePageSetPageLoaderClient(WKBundlePageRef pageRef, WKBundlePageLoaderClient* wkClient)
{
if (wkClient && wkClient->version)
return;
toImpl(pageRef)->initializeInjectedBundleLoaderClient(wkClient);
}
+void WKBundlePageSetResourceLoadClient(WKBundlePageRef pageRef, WKBundlePageResourceLoadClient* wkClient)
+{
+ if (wkClient && wkClient->version)
+ return;
+ toImpl(pageRef)->initializeInjectedBundleResourceLoadClient(wkClient);
+}
+
+void WKBundlePageSetPolicyClient(WKBundlePageRef pageRef, WKBundlePagePolicyClient* wkClient)
+{
+ if (wkClient && wkClient->version)
+ return;
+ toImpl(pageRef)->initializeInjectedBundlePolicyClient(wkClient);
+}
+
void WKBundlePageSetUIClient(WKBundlePageRef pageRef, WKBundlePageUIClient* wkClient)
{
if (wkClient && wkClient->version)
@@ -184,3 +199,16 @@ WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef pageR
RefPtr<WebImage> webImage = toImpl(pageRef)->snapshotInDocumentCoordinates(toIntRect(rect), toImageOptions(options));
return toAPI(webImage.release().leakRef());
}
+
+WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef pageRef, WKRect rect, double scaleFactor, WKImageOptions options)
+{
+ RefPtr<WebImage> webImage = toImpl(pageRef)->scaledSnapshotInDocumentCoordinates(toIntRect(rect), scaleFactor, toImageOptions(options));
+ return toAPI(webImage.release().leakRef());
+}
+
+#if defined(ENABLE_INSPECTOR) && ENABLE_INSPECTOR
+WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef pageRef)
+{
+ return toAPI(toImpl(pageRef)->inspector());
+}
+#endif
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h
index 00db56f..944a5b6 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h
@@ -87,8 +87,6 @@ typedef void (*WKBundlePageDidClearWindowObjectForFrameCallback)(WKBundlePageRef
typedef void (*WKBundlePageDidCancelClientRedirectForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
typedef void (*WKBundlePageWillPerformClientRedirectForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKURLRef url, double delay, double date, const void *clientInfo);
typedef void (*WKBundlePageDidHandleOnloadEventsForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
-typedef bool (*WKBundlePageShouldLoadResourceForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKStringRef url, const void *clientInfo);
-
struct WKBundlePageLoaderClient {
int version;
@@ -113,10 +111,43 @@ struct WKBundlePageLoaderClient {
WKBundlePageDidCancelClientRedirectForFrameCallback didCancelClientRedirectForFrame;
WKBundlePageWillPerformClientRedirectForFrameCallback willPerformClientRedirectForFrame;
WKBundlePageDidHandleOnloadEventsForFrameCallback didHandleOnloadEventsForFrame;
- WKBundlePageShouldLoadResourceForFrameCallback shouldLoadResourceForFrame;
};
typedef struct WKBundlePageLoaderClient WKBundlePageLoaderClient;
+// Policy Client
+typedef void (*WKBundlePageDecidePolicyForNavigationActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo);
+typedef void (*WKBundlePageDecidePolicyForNewWindowActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKStringRef frameName, WKTypeRef* userData, const void* clientInfo);
+typedef void (*WKBundlePageDecidePolicyForMIMETypeCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKStringRef MIMEType, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo);
+
+struct WKBundlePagePolicyClient {
+ int version;
+ const void * clientInfo;
+ WKBundlePageDecidePolicyForNavigationActionCallback decidePolicyForNavigationAction;
+ WKBundlePageDecidePolicyForNewWindowActionCallback decidePolicyForNewWindowAction;
+ WKBundlePageDecidePolicyForMIMETypeCallback decidePolicyForMIMEType;
+};
+typedef struct WKBundlePagePolicyClient WKBundlePagePolicyClient;
+
+// Resource Load Client
+typedef void (*WKBundlePageDidInitiateLoadForResourceCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, WKURLRequestRef, bool pageIsProvisionallyLoading, const void* clientInfo);
+typedef WKURLRequestRef (*WKBundlePageWillSendRequestForFrameCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, WKURLRequestRef, WKURLResponseRef redirectResponse, const void *clientInfo);
+typedef void (*WKBundlePageDidReceiveResponseForResourceCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, WKURLResponseRef, const void* clientInfo);
+typedef void (*WKBundlePageDidReceiveContentLengthForResourceCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, uint64_t contentLength, const void* clientInfo);
+typedef void (*WKBundlePageDidFinishLoadForResourceCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, const void* clientInfo);
+typedef void (*WKBundlePageDidFailLoadForResourceCallback)(WKBundlePageRef, WKBundleFrameRef, uint64_t resourceIdentifier, WKErrorRef, const void* clientInfo);
+
+struct WKBundlePageResourceLoadClient {
+ int version;
+ const void * clientInfo;
+ WKBundlePageDidInitiateLoadForResourceCallback didInitiateLoadForResource;
+ WKBundlePageWillSendRequestForFrameCallback willSendRequestForFrame;
+ WKBundlePageDidReceiveResponseForResourceCallback didReceiveResponseForResource;
+ WKBundlePageDidReceiveContentLengthForResourceCallback didReceiveContentLengthForResource;
+ WKBundlePageDidFinishLoadForResourceCallback didFinishLoadForResource;
+ WKBundlePageDidFailLoadForResourceCallback didFailLoadForResource;
+};
+typedef struct WKBundlePageResourceLoadClient WKBundlePageResourceLoadClient;
+
// UI Client
typedef void (*WKBundlePageWillAddMessageToConsoleCallback)(WKBundlePageRef page, WKStringRef message, uint32_t lineNumber, const void *clientInfo);
typedef void (*WKBundlePageWillSetStatusbarTextCallback)(WKBundlePageRef page, WKStringRef statusbarText, const void *clientInfo);
@@ -125,6 +156,7 @@ typedef void (*WKBundlePageWillRunJavaScriptConfirmCallback)(WKBundlePageRef pag
typedef void (*WKBundlePageWillRunJavaScriptPromptCallback)(WKBundlePageRef page, WKStringRef message, WKStringRef defaultValue, WKBundleFrameRef frame, const void *clientInfo);
typedef void (*WKBundlePageMouseDidMoveOverElementCallback)(WKBundlePageRef page, WKBundleHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef* userData, const void *clientInfo);
typedef void (*WKBundlePageDidScrollCallback)(WKBundlePageRef page, const void *clientInfo);
+typedef void (*WKBundlePagePaintCustomOverhangAreaCallback)(WKBundlePageRef page, WKGraphicsContextRef graphicsContext, WKRect horizontalOverhang, WKRect verticalOverhang, WKRect dirtyRect, const void* clientInfo);
struct WKBundlePageUIClient {
int version;
@@ -136,6 +168,7 @@ struct WKBundlePageUIClient {
WKBundlePageWillRunJavaScriptPromptCallback willRunJavaScriptPrompt;
WKBundlePageMouseDidMoveOverElementCallback mouseDidMoveOverElement;
WKBundlePageDidScrollCallback pageDidScroll;
+ WKBundlePagePaintCustomOverhangAreaCallback paintCustomOverhangArea;
};
typedef struct WKBundlePageUIClient WKBundlePageUIClient;
@@ -201,7 +234,9 @@ WK_EXPORT WKTypeID WKBundlePageGetTypeID();
WK_EXPORT void WKBundlePageSetContextMenuClient(WKBundlePageRef page, WKBundlePageContextMenuClient* client);
WK_EXPORT void WKBundlePageSetEditorClient(WKBundlePageRef page, WKBundlePageEditorClient* client);
WK_EXPORT void WKBundlePageSetFormClient(WKBundlePageRef page, WKBundlePageFormClient* client);
-WK_EXPORT void WKBundlePageSetLoaderClient(WKBundlePageRef page, WKBundlePageLoaderClient* client);
+WK_EXPORT void WKBundlePageSetPageLoaderClient(WKBundlePageRef page, WKBundlePageLoaderClient* client);
+WK_EXPORT void WKBundlePageSetResourceLoadClient(WKBundlePageRef page, WKBundlePageResourceLoadClient* client);
+WK_EXPORT void WKBundlePageSetPolicyClient(WKBundlePageRef page, WKBundlePagePolicyClient* client);
WK_EXPORT void WKBundlePageSetUIClient(WKBundlePageRef page, WKBundlePageUIClient* client);
WK_EXPORT WKBundlePageGroupRef WKBundlePageGetPageGroup(WKBundlePageRef page);
@@ -219,6 +254,11 @@ WK_EXPORT bool WKBundlePageFindString(WKBundlePageRef page, WKStringRef target,
WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
WK_EXPORT WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, WKImageOptions options);
+WK_EXPORT WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef page, WKRect rect, double scaleFactor, WKImageOptions options);
+
+#if defined(ENABLE_INSPECTOR) && ENABLE_INSPECTOR
+WK_EXPORT WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef page);
+#endif
#ifdef __cplusplus
}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp
index 47d4cf1..e076cb9 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundlePageGroup.h"
#include "WKAPICast.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp
index 48fcab4..d86c2e0 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundlePageOverlay.h"
#include "PageOverlay.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp
index 78047af..c868fab 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleRangeHandle.h"
#include "InjectedBundleRangeHandle.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp
index a7a4a8d..1133e3e 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WKBundleScriptWorld.h"
#include "InjectedBundleScriptWorld.h"
@@ -46,3 +47,8 @@ WKBundleScriptWorldRef WKBundleScriptWorldNormalWorld()
{
return toAPI(InjectedBundleScriptWorld::normalWorld());
}
+
+void WKBundleScriptWorldClearWrappers(WKBundleScriptWorldRef scriptWorldRef)
+{
+ toImpl(scriptWorldRef)->clearWrappers();
+}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h
index 0763efa..013cdc9 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h
@@ -36,6 +36,7 @@ WK_EXPORT WKTypeID WKBundleScriptWorldGetTypeID();
WK_EXPORT WKBundleScriptWorldRef WKBundleScriptWorldCreateWorld();
WK_EXPORT WKBundleScriptWorldRef WKBundleScriptWorldNormalWorld();
+WK_EXPORT void WKBundleScriptWorldClearWrappers(WKBundleScriptWorldRef scriptWorld);
#ifdef __cplusplus
}
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
index 6ee3b31..43cf1ef 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleNodeHandle.h"
#include "WebFrame.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp
index 9186637..e94edfd 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleRangeHandle.h"
#include <WebCore/Range.h>
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
index c9f1a6d..b887374 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundle.h"
#include "Arguments.h"
@@ -70,7 +71,7 @@ void InjectedBundle::initializeClient(WKBundleClient* client)
void InjectedBundle::postMessage(const String& messageName, APIObject* messageBody)
{
- WebProcess::shared().connection()->send(WebContextLegacyMessage::PostMessage, 0, CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)));
+ WebProcess::shared().connection()->deprecatedSend(WebContextLegacyMessage::PostMessage, 0, CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)));
}
void InjectedBundle::postSynchronousMessage(const String& messageName, APIObject* messageBody, RefPtr<APIObject>& returnData)
@@ -78,7 +79,7 @@ void InjectedBundle::postSynchronousMessage(const String& messageName, APIObject
RefPtr<APIObject> returnDataTmp;
InjectedBundleUserMessageDecoder messageDecoder(returnDataTmp);
- bool succeeded = WebProcess::shared().connection()->sendSync(WebContextLegacyMessage::PostSynchronousMessage, 0, CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)), CoreIPC::Out(messageDecoder));
+ bool succeeded = WebProcess::shared().connection()->deprecatedSendSync(WebContextLegacyMessage::PostSynchronousMessage, 0, CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)), CoreIPC::Out(messageDecoder));
if (!succeeded)
return;
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp
index 9f50942..d7fb9ec 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleBackForwardList.h"
#include "InjectedBundleBackForwardListItem.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp
index 222dfa3..92a7e69 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleBackForwardListItem.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleClient.cpp
index de572d0..f2e4f2b 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleClient.h"
#include "WKBundleAPICast.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp
index ab59226..c359b42 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleHitTestResult.h"
#include "InjectedBundleNodeHandle.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp
new file mode 100644
index 0000000..7a40ee6
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "InjectedBundleNavigationAction.h"
+
+#include "WebFrame.h"
+#include <WebCore/Frame.h>
+#include <WebCore/HTMLFormElement.h>
+#include <WebCore/MouseEvent.h>
+#include <WebCore/NavigationAction.h>
+#include <WebCore/UIEventWithKeyState.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+static const MouseEvent* mouseEventForNavigationAction(const NavigationAction& navigationAction)
+{
+ for (const Event* e = navigationAction.event(); e; e = e->underlyingEvent()) {
+ if (e->isMouseEvent())
+ return static_cast<const MouseEvent*>(e);
+ }
+ return 0;
+}
+
+static WebMouseEvent::Button mouseButtonForMouseEvent(const MouseEvent* mouseEvent)
+{
+ if (!mouseEvent)
+ return WebMouseEvent::NoButton;
+
+ if (!mouseEvent->buttonDown())
+ return WebMouseEvent::NoButton;
+
+ return static_cast<WebMouseEvent::Button>(mouseEvent->button());
+}
+
+WebEvent::Modifiers InjectedBundleNavigationAction::modifiersForNavigationAction(const NavigationAction& navigationAction)
+{
+ uint32_t modifiers = 0;
+ if (const UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(navigationAction.event()))) {
+ if (keyStateEvent->shiftKey())
+ modifiers |= WebEvent::ShiftKey;
+ if (keyStateEvent->ctrlKey())
+ modifiers |= WebEvent::ControlKey;
+ if (keyStateEvent->altKey())
+ modifiers |= WebEvent::AltKey;
+ if (keyStateEvent->metaKey())
+ modifiers |= WebEvent::MetaKey;
+ }
+
+ return static_cast<WebEvent::Modifiers>(modifiers);
+}
+
+WebMouseEvent::Button InjectedBundleNavigationAction::mouseButtonForNavigationAction(const NavigationAction& navigationAction)
+{
+ return mouseButtonForMouseEvent(mouseEventForNavigationAction(navigationAction));
+}
+
+
+PassRefPtr<InjectedBundleNavigationAction> InjectedBundleNavigationAction::create(WebFrame* frame, const NavigationAction& action, PassRefPtr<FormState> formState)
+{
+ return adoptRef(new InjectedBundleNavigationAction(frame, action, formState));
+}
+
+InjectedBundleNavigationAction::InjectedBundleNavigationAction(WebFrame* frame, const NavigationAction& navigationAction, PassRefPtr<FormState> prpFormState)
+{
+ m_navigationType = navigationAction.type();
+ m_modifiers = modifiersForNavigationAction(navigationAction);
+
+ if (const MouseEvent* mouseEvent = mouseEventForNavigationAction(navigationAction)) {
+ m_hitTestResult = InjectedBundleHitTestResult::create(frame->coreFrame()->eventHandler()->hitTestResultAtPoint(mouseEvent->absoluteLocation(), false));
+ m_mouseButton = mouseButtonForMouseEvent(mouseEvent);
+ }
+
+ RefPtr<FormState> formState = prpFormState;
+ if (formState) {
+ ASSERT(formState->form());
+ m_formElement = InjectedBundleNodeHandle::getOrCreate(formState->form());
+ }
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h
new file mode 100644
index 0000000..128c9fb
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef InjectedBundleNavigationAction_h
+#define InjectedBundleNavigationAction_h
+
+#include "APIObject.h"
+#include "InjectedBundleHitTestResult.h"
+#include "InjectedBundleNodeHandle.h"
+#include "WebEvent.h"
+#include <WebCore/FrameLoaderTypes.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+ class FormState;
+ class NavigationAction;
+}
+
+namespace WebKit {
+
+class WebFrame;
+
+class InjectedBundleNavigationAction : public APIObject {
+public:
+ static const Type APIType = TypeBundleNavigationAction;
+
+ static PassRefPtr<InjectedBundleNavigationAction> create(WebFrame*, const WebCore::NavigationAction&, PassRefPtr<WebCore::FormState>);
+
+ static WebEvent::Modifiers modifiersForNavigationAction(const WebCore::NavigationAction&);
+ static WebMouseEvent::Button mouseButtonForNavigationAction(const WebCore::NavigationAction&);
+
+ WebCore::NavigationType navigationType() const { return m_navigationType; }
+ WebEvent::Modifiers modifiers() const { return m_modifiers; }
+ WebMouseEvent::Button mouseButton() const { return m_mouseButton; }
+ InjectedBundleHitTestResult* hitTestResult() const { return m_hitTestResult.get(); }
+ InjectedBundleNodeHandle* formElement() const { return m_formElement.get(); }
+
+private:
+ InjectedBundleNavigationAction(WebFrame*, const WebCore::NavigationAction&, PassRefPtr<WebCore::FormState>);
+
+ virtual Type type() const { return APIType; }
+
+ WebCore::NavigationType m_navigationType;
+ WebEvent::Modifiers m_modifiers;
+ WebMouseEvent::Button m_mouseButton;
+ RefPtr<InjectedBundleHitTestResult> m_hitTestResult;
+ RefPtr<InjectedBundleNodeHandle> m_formElement;
+};
+
+} // namespace WebKit
+
+#endif // InjectedBundleNavigationAction_h
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp
index a2d16cb..9df0081 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundlePageContextMenuClient.h"
#include "ImmutableArray.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp
index 40996c2..633936b 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundlePageEditorClient.h"
#include "InjectedBundleNodeHandle.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp
index 4d210f2..39924ec 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundlePageFormClient.h"
#include "ImmutableDictionary.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp
index 23341c5..58a20cf 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundlePageLoaderClient.h"
#include "InjectedBundleScriptWorld.h"
@@ -175,14 +176,6 @@ void InjectedBundlePageLoaderClient::didRunInsecureContentForFrame(WebPage* page
userData = adoptRef(toImpl(userDataToPass));
}
-bool InjectedBundlePageLoaderClient::shouldLoadResourceForFrame(WebPage* page, WebFrame* frame, const String& resourceURL)
-{
- if (!m_client.shouldLoadResourceForFrame)
- return true;
-
- return m_client.shouldLoadResourceForFrame(toAPI(page), toAPI(frame), toAPI(resourceURL.impl()), m_client.clientInfo);
-}
-
void InjectedBundlePageLoaderClient::didClearWindowObjectForFrame(WebPage* page, WebFrame* frame, DOMWrapperWorld* world)
{
if (!m_client.didClearWindowObjectForFrame)
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h
index e983b48..88cb824 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h
@@ -35,6 +35,8 @@
namespace WebCore {
class DOMWrapperWorld;
class ResourceError;
+class ResourceRequest;
+class ResourceResponse;
}
namespace WebKit {
@@ -60,8 +62,6 @@ public:
void didDisplayInsecureContentForFrame(WebPage*, WebFrame*, RefPtr<APIObject>& userData);
void didRunInsecureContentForFrame(WebPage*, WebFrame*, RefPtr<APIObject>& userData);
- bool shouldLoadResourceForFrame(WebPage*, WebFrame*, const String&);
-
void didClearWindowObjectForFrame(WebPage*, WebFrame*, WebCore::DOMWrapperWorld*);
void didCancelClientRedirectForFrame(WebPage*, WebFrame*);
void willPerformClientRedirectForFrame(WebPage*, WebFrame*, const String& url, double delay, double date);
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp
new file mode 100644
index 0000000..c55e729
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "InjectedBundlePagePolicyClient.h"
+
+#include "WKBundleAPICast.h"
+#include "WebURLRequest.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void InjectedBundlePagePolicyClient::decidePolicyForNavigationAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData)
+{
+ if (!m_client.decidePolicyForNavigationAction)
+ return;
+
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ WKTypeRef userDataToPass = 0;
+ m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), &userDataToPass, m_client.clientInfo);
+ userData = adoptRef(toImpl(userDataToPass));
+}
+
+void InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, const String& frameName, RefPtr<APIObject>& userData)
+{
+ if (!m_client.decidePolicyForNewWindowAction)
+ return;
+
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ WKTypeRef userDataToPass = 0;
+ m_client.decidePolicyForNewWindowAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), toAPI(frameName.impl()), &userDataToPass, m_client.clientInfo);
+ userData = adoptRef(toImpl(userDataToPass));
+}
+
+void InjectedBundlePagePolicyClient::decidePolicyForMIMEType(WebPage* page, WebFrame* frame, const String& MIMEType, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData)
+{
+ if (!m_client.decidePolicyForMIMEType)
+ return;
+
+ RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest);
+
+ WKTypeRef userDataToPass = 0;
+ m_client.decidePolicyForMIMEType(toAPI(page), toAPI(frame), toAPI(MIMEType.impl()), toAPI(request.get()), &userDataToPass, m_client.clientInfo);
+ userData = adoptRef(toImpl(userDataToPass));
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h
new file mode 100644
index 0000000..2145ac4
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef InjectedBundlePagePolicyClient_h
+#define InjectedBundlePagePolicyClient_h
+
+#include "APIClient.h"
+#include "APIObject.h"
+#include "WKBundlePage.h"
+#include <wtf/Forward.h>
+
+namespace WebCore {
+ class ResourceRequest;
+}
+
+namespace WebKit {
+
+class InjectedBundleNavigationAction;
+class WebFrame;
+class WebPage;
+
+class InjectedBundlePagePolicyClient : public APIClient<WKBundlePagePolicyClient> {
+public:
+ void decidePolicyForNavigationAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData);
+ void decidePolicyForNewWindowAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, const String& frameName, RefPtr<APIObject>& userData);
+ void decidePolicyForMIMEType(WebPage*, WebFrame*, const String& MIMEType, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData);
+};
+
+} // namespace WebKit
+
+#endif // InjectedBundlePagePolicyClient_h
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp
new file mode 100644
index 0000000..c2866a8
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "InjectedBundlePageResourceLoadClient.h"
+
+#include "WKAPICast.h"
+#include "WKBundleAPICast.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void InjectedBundlePageResourceLoadClient::didInitiateLoadForResource(WebPage* page, WebFrame* frame, uint64_t identifier, const WebCore::ResourceRequest& request, bool pageIsProvisionallyLoading)
+{
+ if (!m_client.didInitiateLoadForResource)
+ return;
+
+ m_client.didInitiateLoadForResource(toAPI(page), toAPI(frame), identifier, toAPI(request), pageIsProvisionallyLoading, m_client.clientInfo);
+}
+
+void InjectedBundlePageResourceLoadClient::willSendRequestForFrame(WebPage* page, WebFrame* frame, uint64_t identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
+{
+ if (!m_client.willSendRequestForFrame)
+ return;
+
+ RefPtr<WebURLRequest> returnedRequest = toImpl(m_client.willSendRequestForFrame(toAPI(page), toAPI(frame), identifier, toAPI(request), toAPI(redirectResponse), m_client.clientInfo));
+ if (returnedRequest)
+ request = returnedRequest->resourceRequest();
+ else
+ request = ResourceRequest();
+}
+
+void InjectedBundlePageResourceLoadClient::didReceiveResponseForResource(WebPage* page, WebFrame* frame, uint64_t identifier, const WebCore::ResourceResponse& response)
+{
+ if (!m_client.didReceiveResponseForResource)
+ return;
+
+ m_client.didReceiveResponseForResource(toAPI(page), toAPI(frame), identifier, toAPI(response), m_client.clientInfo);
+}
+
+void InjectedBundlePageResourceLoadClient::didReceiveContentLengthForResource(WebPage* page, WebFrame* frame, uint64_t identifier, uint64_t contentLength)
+{
+ if (!m_client.didReceiveContentLengthForResource)
+ return;
+
+ m_client.didReceiveContentLengthForResource(toAPI(page), toAPI(frame), identifier, contentLength, m_client.clientInfo);
+}
+
+void InjectedBundlePageResourceLoadClient::didFinishLoadForResource(WebPage* page, WebFrame* frame, uint64_t identifier)
+{
+ if (!m_client.didFinishLoadForResource)
+ return;
+
+ m_client.didFinishLoadForResource(toAPI(page), toAPI(frame), identifier, m_client.clientInfo);
+}
+
+void InjectedBundlePageResourceLoadClient::didFailLoadForResource(WebPage* page, WebFrame* frame, uint64_t identifier, const WebCore::ResourceError& error)
+{
+ if (!m_client.didFailLoadForResource)
+ return;
+
+ m_client.didFailLoadForResource(toAPI(page), toAPI(frame), identifier, toAPI(error), m_client.clientInfo);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h
new file mode 100644
index 0000000..c2b654f
--- /dev/null
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef InjectedBundlePageResourceLoadClient_h
+#define InjectedBundlePageResourceLoadClient_h
+
+#include "APIClient.h"
+#include "SameDocumentNavigationType.h"
+#include "WKBundlePage.h"
+#include <JavaScriptCore/JSBase.h>
+#include <wtf/Forward.h>
+
+namespace WebCore {
+class ResourceError;
+class ResourceRequest;
+class ResourceResponse;
+}
+
+namespace WebKit {
+
+class APIObject;
+class WebPage;
+class WebFrame;
+
+class InjectedBundlePageResourceLoadClient : public APIClient<WKBundlePageResourceLoadClient> {
+public:
+ void didInitiateLoadForResource(WebPage*, WebFrame*, uint64_t identifier, const WebCore::ResourceRequest&, bool pageIsProvisionallyLoading);
+ void willSendRequestForFrame(WebPage*, WebFrame*, uint64_t identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ void didReceiveResponseForResource(WebPage*, WebFrame*, uint64_t identifier, const WebCore::ResourceResponse&);
+ void didReceiveContentLengthForResource(WebPage*, WebFrame*, uint64_t identifier, uint64_t contentLength);
+ void didFinishLoadForResource(WebPage*, WebFrame*, uint64_t identifier);
+ void didFailLoadForResource(WebPage*, WebFrame*, uint64_t identifier, const WebCore::ResourceError&);
+};
+
+} // namespace WebKit
+
+#endif // InjectedBundlePageResourceLoadClient_h
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp
index 56e4434..7bb4f89 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp
@@ -23,10 +23,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundlePageUIClient.h"
#include "InjectedBundleHitTestResult.h"
#include "WKAPICast.h"
+#include "WebGraphicsContext.h"
#include "WKBundleAPICast.h"
#include <wtf/text/WTFString.h>
@@ -78,8 +80,23 @@ void InjectedBundlePageUIClient::mouseDidMoveOverElement(WebPage* page, const Hi
void InjectedBundlePageUIClient::pageDidScroll(WebPage* page)
{
- if (m_client.pageDidScroll)
- m_client.pageDidScroll(toAPI(page), m_client.clientInfo);
+ if (!m_client.pageDidScroll)
+ return;
+
+ m_client.pageDidScroll(toAPI(page), m_client.clientInfo);
+}
+
+bool InjectedBundlePageUIClient::shouldPaintCustomOverhangArea()
+{
+ return m_client.paintCustomOverhangArea;
+}
+
+void InjectedBundlePageUIClient::paintCustomOverhangArea(WebPage* page, GraphicsContext* graphicsContext, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect)
+{
+ ASSERT(shouldPaintCustomOverhangArea());
+
+ RefPtr<WebGraphicsContext> context = WebGraphicsContext::create(graphicsContext);
+ m_client.paintCustomOverhangArea(toAPI(page), toAPI(context.get()), toAPI(horizontalOverhangArea), toAPI(verticalOverhangArea), toAPI(dirtyRect), m_client.clientInfo);
}
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h
index 93c19e9..94925b7 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h
@@ -32,7 +32,9 @@
#include <wtf/Forward.h>
namespace WebCore {
+ class GraphicsContext;
class HitTestResult;
+ class IntRect;
}
namespace WebKit {
@@ -50,6 +52,9 @@ public:
void willRunJavaScriptPrompt(WebPage*, const String&, const String&, WebFrame*);
void mouseDidMoveOverElement(WebPage*, const WebCore::HitTestResult&, WebEvent::Modifiers, RefPtr<APIObject>& userData);
void pageDidScroll(WebPage*);
+
+ bool shouldPaintCustomOverhangArea();
+ void paintCustomOverhangArea(WebPage*, WebCore::GraphicsContext*, const WebCore::IntRect&, const WebCore::IntRect&, const WebCore::IntRect&);
};
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp
index d764cf2..2f40fd3 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundleScriptWorld.h"
#include <WebCore/DOMWrapperWorld.h>
@@ -80,5 +81,10 @@ DOMWrapperWorld* InjectedBundleScriptWorld::coreWorld() const
{
return m_world.get();
}
+
+void InjectedBundleScriptWorld::clearWrappers()
+{
+ m_world->clearWrappers();
+}
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h
index 00dd14a..7562a6f 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h
@@ -47,6 +47,8 @@ public:
virtual ~InjectedBundleScriptWorld();
WebCore::DOMWrapperWorld* coreWorld() const;
+
+ void clearWrappers();
private:
InjectedBundleScriptWorld(PassRefPtr<WebCore::DOMWrapperWorld>);
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp b/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp
index f992af2..c75e433 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundle.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp b/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp
index f278ea9..00e4dff 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundle.h"
#include "WKBundleAPICast.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp b/Source/WebKit2/WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp
index 9d397e8..a5183b1 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundle.h"
#include "WKBundleAPICast.h"
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/win/InjectedBundleWin.cpp b/Source/WebKit2/WebProcess/InjectedBundle/win/InjectedBundleWin.cpp
index 3fd3333..1e593fc 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/win/InjectedBundleWin.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/win/InjectedBundleWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "InjectedBundle.h"
#include "WKBundleAPICast.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp
index c094505..edd2b44 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPMethod.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "JSNPMethod.h"
#include "JSNPObject.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp
index d7d626f..f6939cb 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/JSNPObject.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "JSNPObject.h"
#include "JSNPMethod.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp
index 45c1e6e..345bd54 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NPJSObject.h"
#include "JSNPObject.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp
index 4fa37c1..0a96ad7 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NPRuntimeObjectMap.h"
#include "JSNPObject.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp
index 20ff478..e92f026 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NPRuntimeUtilities.h"
#include <wtf/text/CString.h>
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
index ba21db1..5f8ee5c 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapeBrowserFuncs.h"
#include "NPRuntimeUtilities.h"
@@ -387,8 +388,12 @@ static NPError NPN_PostURLNotify(NPP npp, const char* url, const char* target, u
}
#if PLATFORM(MAC)
-/* TRUE if the browser supports hardware compositing of Core Animation plug-ins */
+// true if the browser supports hardware compositing of Core Animation plug-ins.
static const unsigned WKNVSupportsCompositingCoreAnimationPluginsBool = 74656;
+
+// The Core Animation render server port.
+static const unsigned WKNVCALayerRenderServerPort = 71879;
+
#endif
static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value)
@@ -432,6 +437,13 @@ static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value)
*(NPBool*)value = true;
break;
+ case WKNVCALayerRenderServerPort: {
+ RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp);
+
+ *(mach_port_t*)value = plugin->compositingRenderServerPort();
+ break;
+ }
+
#ifndef NP_NO_QUICKDRAW
case NPNVsupportsQuickDrawBool:
// We don't support the QuickDraw drawing model.
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index 5674ba5..e746d5a 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePlugin.h"
#include "NPRuntimeObjectMap.h"
@@ -351,8 +352,8 @@ void NetscapePlugin::callSetWindow()
m_npWindow.height = m_frameRect.height();
m_npWindow.clipRect.top = m_clipRect.y();
m_npWindow.clipRect.left = m_clipRect.x();
- m_npWindow.clipRect.bottom = m_clipRect.bottom();
- m_npWindow.clipRect.right = m_clipRect.right();
+ m_npWindow.clipRect.bottom = m_clipRect.maxY();
+ m_npWindow.clipRect.right = m_clipRect.maxX();
NPP_SetWindow(&m_npWindow);
}
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index 95ff714..e807beb 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -56,6 +56,8 @@ public:
NPBool convertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double& destX, double& destY, NPCoordinateSpace destSpace);
NPError popUpContextMenu(NPMenu*);
+ mach_port_t compositingRenderServerPort();
+
#ifndef NP_NO_CARBON
WindowRef windowRef() const;
bool isWindowActive() const { return m_windowHasFocus; }
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
index be60795..9450317 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePluginStream.h"
#include "NetscapePlugin.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp
index 64239f3..2b734fd 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePlugin.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
index d57e8d1..46671b8 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "NetscapePlugin.h"
+#import "config.h"
+#import "NetscapePlugin.h"
-#include "PluginController.h"
-#include "WebEvent.h"
-#include <WebCore/GraphicsContext.h>
-#include <Carbon/Carbon.h>
-#include <WebKitSystemInterface.h>
+#import "PluginController.h"
+#import "WebEvent.h"
+#import <WebCore/GraphicsContext.h>
+#import <Carbon/Carbon.h>
+#import <WebKitSystemInterface.h>
using namespace WebCore;
@@ -171,6 +172,11 @@ NPError NetscapePlugin::popUpContextMenu(NPMenu* npMenu)
return NPERR_NO_ERROR;
}
+mach_port_t NetscapePlugin::compositingRenderServerPort()
+{
+ return m_pluginController->compositingRenderServerPort();
+}
+
#ifndef NP_NO_CARBON
typedef HashMap<WindowRef, NetscapePlugin*> WindowMap;
@@ -779,8 +785,8 @@ static Rect computeFakeWindowBoundsRect(const WebCore::IntRect& windowFrameInScr
// Carbon global coordinates has the origin set at the top left corner of the main viewing screen, so we want to flip the y coordinate.
CGFloat maxY = NSMaxY([[[NSScreen screens] objectAtIndex:0] frame]);
- int flippedWindowFrameYCoordinate = maxY - windowFrameInScreenCoordinates.bottom();
- int flippedViewFrameYCoordinate = windowFrameInScreenCoordinates.height() - viewFrameInWindowCoordinates.bottom();
+ int flippedWindowFrameYCoordinate = maxY - windowFrameInScreenCoordinates.maxY();
+ int flippedViewFrameYCoordinate = windowFrameInScreenCoordinates.height() - viewFrameInWindowCoordinates.maxY();
Rect bounds;
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm
index 6ecf7b9..d331506 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm
@@ -23,11 +23,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
+#import "config.h"
+#import "PluginProxy.h"
-#include "PluginProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
-#include <WebKitSystemInterface.h>
+#import <WebKitSystemInterface.h>
namespace WebKit {
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
index 77efc01..1ede2c3 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePlugin.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
index 930f87b..e713f83 100644
--- a/Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "NetscapePlugin.h"
#include "NotImplemented.h"
@@ -126,7 +127,7 @@ void NetscapePlugin::platformGeometryDidChange()
IntRect clipRectInPluginWindowCoordinates = m_clipRect;
clipRectInPluginWindowCoordinates.move(-m_frameRect.x(), -m_frameRect.y());
- OwnPtr<HRGN> clipRegion = adoptPtr(::CreateRectRgn(clipRectInPluginWindowCoordinates.x(), clipRectInPluginWindowCoordinates.y(), clipRectInPluginWindowCoordinates.right(), clipRectInPluginWindowCoordinates.bottom()));
+ OwnPtr<HRGN> clipRegion = adoptPtr(::CreateRectRgn(clipRectInPluginWindowCoordinates.x(), clipRectInPluginWindowCoordinates.y(), clipRectInPluginWindowCoordinates.maxX(), clipRectInPluginWindowCoordinates.maxY()));
setWindowRegion(m_window, clipRegion.release(), Redraw);
// FIXME: We should only update the size here and let the UI process update our position so
diff --git a/Source/WebKit2/WebProcess/Plugins/Plugin.cpp b/Source/WebKit2/WebProcess/Plugins/Plugin.cpp
index 32ad92d..98e1128 100644
--- a/Source/WebKit2/WebProcess/Plugins/Plugin.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/Plugin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "Plugin.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginController.h b/Source/WebKit2/WebProcess/Plugins/PluginController.h
index 06cf2d7..9dc8ec3 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginController.h
+++ b/Source/WebKit2/WebProcess/Plugins/PluginController.h
@@ -91,6 +91,9 @@ public:
#if PLATFORM(MAC)
// Tells the controller that complex text input be enabled or disabled for the plug-in.
virtual void setComplexTextInputEnabled(bool) = 0;
+
+ // Returns the mach port of the compositing render server.
+ virtual mach_port_t compositingRenderServerPort() = 0;
#endif
// Returns the proxies for the given URL or null on failure.
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
index 7c09e56..ef931c8 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcessConnection.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "NPRemoteObjectMap.h"
#include "PluginProcessConnectionManager.h"
#include "PluginProxy.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp
index 99848ef..1290391 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProcessConnectionManager.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "ArgumentDecoder.h"
#include "ArgumentEncoder.h"
#include "MachPort.h"
@@ -61,7 +62,7 @@ PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnect
CoreIPC::Connection::Identifier connectionIdentifier;
CoreIPC::MachPort connectionMachPort;
- if (!WebProcess::shared().connection()->sendSync(WebProcessProxyLegacyMessage::GetPluginProcessConnection, 0, CoreIPC::In(pluginPath), CoreIPC::Out(connectionMachPort)))
+ if (!WebProcess::shared().connection()->deprecatedSendSync(WebProcessProxyLegacyMessage::GetPluginProcessConnection, 0, CoreIPC::In(pluginPath), CoreIPC::Out(connectionMachPort)))
return 0;
connectionIdentifier = connectionMachPort.port();
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp b/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp
index f029cbf..551e458 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(PLUGIN_PROCESS)
-
+#include "config.h"
#include "PluginProxy.h"
+#if ENABLE(PLUGIN_PROCESS)
+
#include "DataReference.h"
#include "NPRemoteObjectMap.h"
#include "NPRuntimeUtilities.h"
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProxy.h b/Source/WebKit2/WebProcess/Plugins/PluginProxy.h
index 2c3b052..9be7bd1 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginProxy.h
+++ b/Source/WebKit2/WebProcess/Plugins/PluginProxy.h
@@ -33,11 +33,7 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class CALayer;
-#else
-class CALayer;
-#endif
+OBJC_CLASS CALayer;
#endif
namespace WebCore {
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginView.cpp b/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
index 00271c1..8ac7d3a 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PluginView.h"
#include "NPRuntimeUtilities.h"
@@ -30,6 +31,7 @@
#include "WebEvent.h"
#include "WebPage.h"
#include "WebPageProxyMessages.h"
+#include "WebProcess.h"
#include <WebCore/Chrome.h>
#include <WebCore/CookieJar.h>
#include <WebCore/DocumentLoader.h>
@@ -282,8 +284,11 @@ PluginView::~PluginView()
// Invalidate the object map.
m_npRuntimeObjectMap.invalidate();
- // Cancel all streams.
cancelAllStreams();
+
+ // Null out the plug-in element explicitly so we'll crash earlier if we try to use
+ // the plug-in view after it's been destroyed.
+ m_pluginElement = nullptr;
}
Frame* PluginView::frame()
@@ -901,6 +906,10 @@ bool PluginView::evaluate(NPObject* npObject, const String& scriptString, NPVari
bool oldAllowPopups = frame()->script()->allowPopupsFromPlugin();
frame()->script()->setAllowPopupsFromPlugin(allowPopups);
+ // Calling evaluate will run JavaScript that can potentially remove the plug-in element, so we need to
+ // protect the plug-in view from destruction.
+ NPRuntimeObjectMap::PluginProtector pluginProtector(&m_npRuntimeObjectMap);
+
bool returnValue = m_npRuntimeObjectMap.evaluate(npObject, scriptString, result);
frame()->script()->setAllowPopupsFromPlugin(oldAllowPopups);
@@ -959,6 +968,12 @@ void PluginView::setComplexTextInputEnabled(bool complexTextInputEnabled)
{
m_webPage->send(Messages::WebPageProxy::SetComplexTextInputEnabled(m_plugin->pluginComplexTextInputIdentifier(), complexTextInputEnabled));
}
+
+mach_port_t PluginView::compositingRenderServerPort()
+{
+ return WebProcess::shared().compositingRenderServerPort();
+}
+
#endif
String PluginView::proxiesForURL(const String& urlString)
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginView.h b/Source/WebKit2/WebProcess/Plugins/PluginView.h
index 07511d7..dca3a62 100644
--- a/Source/WebKit2/WebProcess/Plugins/PluginView.h
+++ b/Source/WebKit2/WebProcess/Plugins/PluginView.h
@@ -132,6 +132,7 @@ private:
#endif
#if PLATFORM(MAC)
virtual void setComplexTextInputEnabled(bool);
+ virtual mach_port_t compositingRenderServerPort();
#endif
virtual String proxiesForURL(const String&);
virtual String cookiesForURL(const String&);
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
index 6da6c6e..2394141 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
@@ -24,12 +24,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebChromeClient.h"
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
#include "NotImplemented.h"
#include "DrawingArea.h"
+#include "InjectedBundleNavigationAction.h"
#include "InjectedBundleUserMessageCoders.h"
#include "WebContextMenu.h"
#include "WebCoreArgumentCoders.h"
@@ -49,6 +51,7 @@
#include <WebCore/FileChooser.h>
#include <WebCore/Frame.h>
#include <WebCore/FrameLoader.h>
+#include <WebCore/FrameView.h>
#include <WebCore/HTMLNames.h>
#include <WebCore/HTMLPlugInImageElement.h>
#include <WebCore/Page.h>
@@ -151,8 +154,8 @@ void WebChromeClient::focusedFrameChanged(Frame* frame)
Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures& windowFeatures, const NavigationAction& navigationAction)
{
- uint32_t modifiers = modifiersForNavigationAction(navigationAction);
- int32_t mouseButton = mouseButtonForNavigationAction(navigationAction);
+ uint32_t modifiers = static_cast<uint32_t>(InjectedBundleNavigationAction::modifiersForNavigationAction(navigationAction));
+ int32_t mouseButton = static_cast<int32_t>(InjectedBundleNavigationAction::mouseButtonForNavigationAction(navigationAction));
uint64_t newPageID = 0;
WebPageCreationParameters parameters;
@@ -354,11 +357,15 @@ void WebChromeClient::invalidateWindow(const IntRect&, bool)
void WebChromeClient::invalidateContentsAndWindow(const IntRect& rect, bool)
{
+ if (m_page->corePage()->mainFrame()->document()->printing())
+ return;
m_page->drawingArea()->setNeedsDisplay(rect);
}
void WebChromeClient::invalidateContentsForSlowScroll(const IntRect& rect, bool)
{
+ if (m_page->corePage()->mainFrame()->document()->printing())
+ return;
m_page->pageDidScroll();
m_page->drawingArea()->setNeedsDisplay(rect);
}
@@ -413,7 +420,23 @@ void WebChromeClient::contentsSizeChanged(Frame* frame, const IntSize& size) con
WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
if (largestFrame != m_cachedFrameSetLargestFrame.get()) {
m_cachedFrameSetLargestFrame = largestFrame;
- WebProcess::shared().connection()->send(Messages::WebPageProxy::FrameSetLargestFrameChanged(largestFrame ? largestFrame->frameID() : 0), m_page->pageID());
+ m_page->send(Messages::WebPageProxy::FrameSetLargestFrameChanged(largestFrame ? largestFrame->frameID() : 0));
+ }
+
+ if (frame->page()->mainFrame() != frame)
+ return;
+ FrameView* frameView = frame->view();
+ if (!frameView)
+ return;
+
+ bool hasHorizontalScrollbar = frameView->horizontalScrollbar();
+ bool hasVerticalScrollbar = frameView->verticalScrollbar();
+
+ if (hasHorizontalScrollbar != m_cachedMainFrameHasHorizontalScrollbar || hasVerticalScrollbar != m_cachedMainFrameHasVerticalScrollbar) {
+ m_page->send(Messages::WebPageProxy::DidChangeScrollbarsForMainFrame(hasHorizontalScrollbar, hasVerticalScrollbar));
+
+ m_cachedMainFrameHasHorizontalScrollbar = hasHorizontalScrollbar;
+ m_cachedMainFrameHasVerticalScrollbar = hasVerticalScrollbar;
}
}
@@ -550,6 +573,15 @@ bool WebChromeClient::paintCustomScrollCorner(GraphicsContext*, const FloatRect&
return false;
}
+bool WebChromeClient::paintCustomOverhangArea(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect)
+{
+ if (!m_page->injectedBundleUIClient().shouldPaintCustomOverhangArea())
+ return false;
+
+ m_page->injectedBundleUIClient().paintCustomOverhangArea(m_page, context, horizontalOverhangArea, verticalOverhangArea, dirtyRect);
+ return true;
+}
+
void WebChromeClient::requestGeolocationPermissionForFrame(Frame*, Geolocation*)
{
notImplemented();
@@ -611,6 +643,11 @@ void WebChromeClient::formDidBlur(const Node*)
bool WebChromeClient::selectItemWritingDirectionIsNatural()
{
+ return false;
+}
+
+bool WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection()
+{
return true;
}
@@ -631,12 +668,6 @@ void WebChromeClient::showContextMenu()
}
#endif
-PassOwnPtr<HTMLParserQuirks> WebChromeClient::createHTMLParserQuirks()
-{
- notImplemented();
- return 0;
-}
-
#if USE(ACCELERATED_COMPOSITING)
void WebChromeClient::attachRootGraphicsLayer(Frame*, GraphicsLayer* layer)
{
@@ -683,4 +714,9 @@ void WebChromeClient::dispatchViewportDataDidChange(const ViewportArguments& arg
m_page->send(Messages::WebPageProxy::DidChangeViewportData(args));
}
+void WebChromeClient::didCompleteRubberBandForMainFrame(const IntSize& initialOverhang) const
+{
+ m_page->send(Messages::WebPageProxy::DidCompleteRubberBandForMainFrame(initialOverhang));
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
index d749833..82ba36e 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
@@ -39,11 +39,14 @@ class WebPage;
class WebChromeClient : public WebCore::ChromeClient {
public:
WebChromeClient(WebPage* page)
- : m_page(page)
+ : m_cachedMainFrameHasHorizontalScrollbar(false)
+ , m_cachedMainFrameHasVerticalScrollbar(false)
+ , m_page(page)
{
}
WebPage* page() const { return m_page; }
+
private:
virtual void chromeDestroyed();
@@ -154,27 +157,28 @@ private:
WebCore::ScrollbarControlState, WebCore::ScrollbarPart pressedPart, bool vertical,
float value, float proportion, WebCore::ScrollbarControlPartMask);
virtual bool paintCustomScrollCorner(WebCore::GraphicsContext*, const WebCore::FloatRect&);
-
+
+ virtual bool paintCustomOverhangArea(WebCore::GraphicsContext*, const WebCore::IntRect&, const WebCore::IntRect&, const WebCore::IntRect&);
+
// This is an asynchronous call. The ChromeClient can display UI asking the user for permission
// to use Geolococation. The ChromeClient must call Geolocation::setShouldClearCache() appropriately.
virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*);
virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*);
-
+
virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
virtual void chooseIconForFiles(const Vector<String>&, WebCore::FileChooser*);
virtual void setCursor(const WebCore::Cursor&);
-
+
// Notification that the given form element has changed. This function
// will be called frequently, so handling should be very fast.
virtual void formStateDidChange(const WebCore::Node*);
-
+
virtual void formDidFocus(const WebCore::Node*);
virtual void formDidBlur(const WebCore::Node*);
-
- virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks();
virtual bool selectItemWritingDirectionIsNatural();
+ virtual bool selectItemAlignmentFollowsMenuWritingDirection();
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
@@ -202,8 +206,13 @@ private:
virtual void dispatchViewportDataDidChange(const WebCore::ViewportArguments&) const;
+ virtual void didCompleteRubberBandForMainFrame(const WebCore::IntSize&) const;
+
String m_cachedToolTip;
mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame;
+ mutable bool m_cachedMainFrameHasHorizontalScrollbar;
+ mutable bool m_cachedMainFrameHasVerticalScrollbar;
+
WebPage* m_page;
};
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.cpp
index 42b60a5..0c83cda 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuClient.h"
#include "WebContextMenuItemData.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp
index cc61b04..caa6eda 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebDatabaseManager.h"
#include "Connection.h"
@@ -45,9 +46,13 @@ WebDatabaseManager& WebDatabaseManager::shared()
return shared;
}
+void WebDatabaseManager::initialize(const String& databaseDirectory)
+{
+ DatabaseTracker::initializeTracker(databaseDirectory);
+}
+
WebDatabaseManager::WebDatabaseManager()
{
- DatabaseTracker::initializeTracker(databaseDirectory());
DatabaseTracker::tracker().setClient(this);
}
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h
index 4701645..96ed83e 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h
@@ -43,6 +43,7 @@ class WebDatabaseManager : public WebCore::DatabaseTrackerClient {
WTF_MAKE_NONCOPYABLE(WebDatabaseManager);
public:
static WebDatabaseManager& shared();
+ static void initialize(const String& databaseDirectory);
void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
@@ -63,8 +64,6 @@ private:
// WebCore::DatabaseTrackerClient
virtual void dispatchDidModifyOrigin(WebCore::SecurityOrigin*);
virtual void dispatchDidModifyDatabase(WebCore::SecurityOrigin*, const String& databaseIdentifier);
-
- String databaseDirectory() const;
};
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp
index e3d401d..9e348cd 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebDragClient.h"
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
@@ -50,16 +51,10 @@ DragSourceAction WebDragClient::dragSourceActionMaskForPoint(const IntPoint& win
return DragSourceActionAny;
}
-#if !PLATFORM(MAC)
+#if !PLATFORM(MAC) && !PLATFORM(WIN)
void WebDragClient::startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool)
{
}
-
-DragImageRef WebDragClient::createDragImageForLink(KURL&, const String&, Frame*)
-{
- notImplemented();
- return 0;
-}
#endif
void WebDragClient::dragControllerDestroyed()
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h
index 6f7cf85..389680a 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h
@@ -46,7 +46,6 @@ private:
virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint);
virtual void startDrag(WebCore::DragImageRef dragImage, const WebCore::IntPoint& dragImageOrigin, const WebCore::IntPoint& eventPos, WebCore::Clipboard*, WebCore::Frame*, bool linkDrag = false);
- virtual WebCore::DragImageRef createDragImageForLink(WebCore::KURL&, const String& label, WebCore::Frame*);
#if PLATFORM(MAC)
virtual void declareAndWriteDragImage(NSPasteboard*, DOMElement*, NSURL*, NSString*, WebCore::Frame*);
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp
index e3db967..5ed1c60 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEditorClient.h"
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
index 49ce240..4be913f 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFrameLoaderClient.h"
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
@@ -30,6 +31,7 @@
#include "AuthenticationManager.h"
#include "DataReference.h"
+#include "InjectedBundleNavigationAction.h"
#include "InjectedBundleUserMessageCoders.h"
#include "PlatformCertificateInfo.h"
#include "PluginView.h"
@@ -57,6 +59,7 @@
#include <WebCore/FrameView.h>
#include <WebCore/HTMLAppletElement.h>
#include <WebCore/HTMLFormElement.h>
+#include <WebCore/HistoryItem.h>
#include <WebCore/MIMETypeRegistry.h>
#include <WebCore/MouseEvent.h>
#include <WebCore/Page.h>
@@ -141,13 +144,18 @@ void WebFrameLoaderClient::detachedFromParent3()
notImplemented();
}
-void WebFrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest& request)
+void WebFrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request)
{
WebPage* webPage = m_frame->page();
if (!webPage)
return;
- webPage->send(Messages::WebPageProxy::DidInitiateLoadForResource(m_frame->frameID(), identifier, request));
+ bool pageIsProvisionallyLoading = false;
+ if (FrameLoader* frameLoader = loader->frameLoader())
+ pageIsProvisionallyLoading = frameLoader->provisionalDocumentLoader() == loader;
+
+ webPage->injectedBundleResourceLoadClient().didInitiateLoadForResource(webPage, m_frame, identifier, request, pageIsProvisionallyLoading);
+ webPage->send(Messages::WebPageProxy::DidInitiateLoadForResource(m_frame->frameID(), identifier, request, pageIsProvisionallyLoading));
}
void WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
@@ -156,8 +164,9 @@ void WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader*, unsigned lon
if (!webPage)
return;
- if (!webPage->injectedBundleLoaderClient().shouldLoadResourceForFrame(webPage, m_frame, request.url().string())) {
- request = ResourceRequest();
+ webPage->injectedBundleResourceLoadClient().willSendRequestForFrame(webPage, m_frame, identifier, request, redirectResponse);
+
+ if (request.isNull()) {
// FIXME: We should probably send a message saying we cancelled the request for the resource.
return;
}
@@ -211,6 +220,7 @@ void WebFrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader*, unsigned
if (!webPage)
return;
+ webPage->injectedBundleResourceLoadClient().didReceiveResponseForResource(webPage, m_frame, identifier, response);
webPage->send(Messages::WebPageProxy::DidReceiveResponseForResource(m_frame->frameID(), identifier, response));
}
@@ -220,6 +230,7 @@ void WebFrameLoaderClient::dispatchDidReceiveContentLength(DocumentLoader*, unsi
if (!webPage)
return;
+ webPage->injectedBundleResourceLoadClient().didReceiveContentLengthForResource(webPage, m_frame, identifier, lengthReceived);
webPage->send(Messages::WebPageProxy::DidReceiveContentLengthForResource(m_frame->frameID(), identifier, lengthReceived));
}
@@ -229,6 +240,7 @@ void WebFrameLoaderClient::dispatchDidFinishLoading(DocumentLoader*, unsigned lo
if (!webPage)
return;
+ webPage->injectedBundleResourceLoadClient().didFinishLoadForResource(webPage, m_frame, identifier);
webPage->send(Messages::WebPageProxy::DidFinishLoadForResource(m_frame->frameID(), identifier));
}
@@ -238,6 +250,7 @@ void WebFrameLoaderClient::dispatchDidFailLoading(DocumentLoader*, unsigned long
if (!webPage)
return;
+ webPage->injectedBundleResourceLoadClient().didFailLoadForResource(webPage, m_frame, identifier, error);
webPage->send(Messages::WebPageProxy::DidFailLoadForResource(m_frame->frameID(), identifier, error));
}
@@ -311,7 +324,7 @@ void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage()
webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationAnchorNavigation, userData);
// Notify the UIProcess.
- webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationAnchorNavigation, m_frame->coreFrame()->loader()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
+ webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationAnchorNavigation, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
}
void WebFrameLoaderClient::dispatchDidPushStateWithinPage()
@@ -326,7 +339,7 @@ void WebFrameLoaderClient::dispatchDidPushStateWithinPage()
webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStatePush, userData);
// Notify the UIProcess.
- webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePush, m_frame->coreFrame()->loader()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
+ webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePush, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
}
void WebFrameLoaderClient::dispatchDidReplaceStateWithinPage()
@@ -341,7 +354,7 @@ void WebFrameLoaderClient::dispatchDidReplaceStateWithinPage()
webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStateReplace, userData);
// Notify the UIProcess.
- webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStateReplace, m_frame->coreFrame()->loader()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
+ webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStateReplace, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
}
void WebFrameLoaderClient::dispatchDidPopStateWithinPage()
@@ -356,7 +369,7 @@ void WebFrameLoaderClient::dispatchDidPopStateWithinPage()
webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStatePop, userData);
// Notify the UIProcess.
- webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePop, m_frame->coreFrame()->loader()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
+ webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePop, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
}
void WebFrameLoaderClient::dispatchWillClose()
@@ -426,7 +439,14 @@ void WebFrameLoaderClient::dispatchDidCommitLoad()
webPage->sandboxExtensionTracker().didCommitProvisionalLoad(m_frame);
// Notify the UIProcess.
+
webPage->send(Messages::WebPageProxy::DidCommitLoadForFrame(m_frame->frameID(), response.mimeType(), m_frameHasCustomRepresentation, PlatformCertificateInfo(response), InjectedBundleUserMessageEncoder(userData.get())));
+
+ // Only restore the scale factor for standard frame loads (of the main frame).
+ if (m_frame->isMainFrame() && m_frame->coreFrame()->loader()->loadType() == FrameLoadTypeStandard) {
+ if (m_frame->coreFrame()->pageScaleFactor() != 1)
+ webPage->scaleWebView(1, IntPoint());
+ }
}
void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error)
@@ -556,64 +576,27 @@ void WebFrameLoaderClient::dispatchShow()
webPage->show();
}
-uint32_t modifiersForNavigationAction(const NavigationAction& navigationAction)
-{
- uint32_t modifiers = 0;
- if (const UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(navigationAction.event()))) {
- if (keyStateEvent->shiftKey())
- modifiers |= WebEvent::ShiftKey;
- if (keyStateEvent->ctrlKey())
- modifiers |= WebEvent::ControlKey;
- if (keyStateEvent->altKey())
- modifiers |= WebEvent::AltKey;
- if (keyStateEvent->metaKey())
- modifiers |= WebEvent::MetaKey;
- }
-
- return modifiers;
-}
-
-static const MouseEvent* findMouseEvent(const Event* event)
-{
- for (const Event* e = event; e; e = e->underlyingEvent()) {
- if (e->isMouseEvent())
- return static_cast<const MouseEvent*>(e);
- }
- return 0;
-}
-
-int32_t mouseButtonForNavigationAction(const NavigationAction& navigationAction)
-{
- const MouseEvent* mouseEvent = findMouseEvent(navigationAction.event());
- if (!mouseEvent)
- return -1;
-
- if (!mouseEvent->buttonDown())
- return -1;
-
- return mouseEvent->button();
-}
-
void WebFrameLoaderClient::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const String& MIMEType, const ResourceRequest& request)
{
- if (m_frame->coreFrame()->loader()->documentLoader()->url().isEmpty() && request.url() == blankURL()) {
- // WebKit2 loads initial about:blank documents synchronously, without consulting the policy delegate
- ASSERT(m_frame->coreFrame()->loader()->stateMachine()->committingFirstRealLoad());
- (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyUse);
- return;
- }
-
WebPage* webPage = m_frame->page();
if (!webPage)
return;
- uint64_t listenerID = m_frame->setUpPolicyListener(function);
- const String& url = request.url().string(); // FIXME: Pass entire request.
+ if (!request.url().string())
+ return;
+
+ RefPtr<APIObject> userData;
+
+ // Notify the bundle client.
+ webPage->injectedBundlePolicyClient().decidePolicyForMIMEType(webPage, m_frame, MIMEType, request, userData);
+ uint64_t listenerID = m_frame->setUpPolicyListener(function);
bool receivedPolicyAction;
uint64_t policyAction;
uint64_t downloadID;
- if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForMIMEType(m_frame->frameID(), MIMEType, url, listenerID), Messages::WebPageProxy::DecidePolicyForMIMEType::Reply(receivedPolicyAction, policyAction, downloadID)))
+
+ // Notify the UIProcess.
+ if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForMIMEType(m_frame->frameID(), MIMEType, request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForMIMEType::Reply(receivedPolicyAction, policyAction, downloadID)))
return;
// We call this synchronously because CFNetwork can only convert a loading connection to a download from its didReceiveResponse callback.
@@ -621,54 +604,50 @@ void WebFrameLoaderClient::dispatchDecidePolicyForMIMEType(FramePolicyFunction f
m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
}
-void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState>, const String& frameName)
+void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName)
{
WebPage* webPage = m_frame->page();
if (!webPage)
return;
- uint64_t listenerID = m_frame->setUpPolicyListener(function);
+ RefPtr<APIObject> userData;
+
+ RefPtr<InjectedBundleNavigationAction> action = InjectedBundleNavigationAction::create(m_frame, navigationAction, formState);
+
+ // Notify the bundle client.
+ webPage->injectedBundlePolicyClient().decidePolicyForNewWindowAction(webPage, m_frame, action.get(), request, frameName, userData);
- // FIXME: Pass more than just the navigation action type.
- // FIXME: Pass the frame name.
- const String& url = request.url().string(); // FIXME: Pass entire request.
- uint32_t navigationType = static_cast<uint32_t>(navigationAction.type());
- uint32_t modifiers = modifiersForNavigationAction(navigationAction);
- int32_t mouseButton = mouseButtonForNavigationAction(navigationAction);
+ uint64_t listenerID = m_frame->setUpPolicyListener(function);
- webPage->send(Messages::WebPageProxy::DecidePolicyForNewWindowAction(m_frame->frameID(), navigationType, modifiers, mouseButton, url, listenerID));
+ // Notify the UIProcess.
+ webPage->send(Messages::WebPageProxy::DecidePolicyForNewWindowAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), request, frameName, listenerID, InjectedBundleUserMessageEncoder(userData.get())));
}
-void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState>)
+void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState> formState)
{
- if (m_frame->coreFrame()->loader()->documentLoader()->url().isEmpty() && request.url() == blankURL()) {
- // WebKit2 loads initial about:blank documents synchronously, without consulting the policy delegate
- ASSERT(m_frame->coreFrame()->loader()->stateMachine()->committingFirstRealLoad());
- (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyUse);
- return;
- }
-
- // Always ignore requests with empty URLs.
- if (request.isEmpty()) {
- (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyIgnore);
- return;
- }
-
WebPage* webPage = m_frame->page();
if (!webPage)
return;
- uint64_t listenerID = m_frame->setUpPolicyListener(function);
+ RefPtr<APIObject> userData;
+
+ RefPtr<InjectedBundleNavigationAction> action = InjectedBundleNavigationAction::create(m_frame, navigationAction, formState);
+
+ // Notify the bundle client.
+ webPage->injectedBundlePolicyClient().decidePolicyForNavigationAction(webPage, m_frame, action.get(), request, userData);
- // FIXME: Pass more than just the navigation action type.
- const String& url = request.url().string(); // FIXME: Pass entire request.
+ uint64_t listenerID = m_frame->setUpPolicyListener(function);
+ bool receivedPolicyAction;
+ uint64_t policyAction;
- uint32_t navigationType = static_cast<uint32_t>(navigationAction.type());
- uint32_t modifiers = modifiersForNavigationAction(navigationAction);
- int32_t mouseButton = mouseButtonForNavigationAction(navigationAction);
+ // Notify the UIProcess.
+ if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction)))
+ return;
- webPage->send(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), navigationType, modifiers, mouseButton, url, listenerID));
+ // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply.
+ if (receivedPolicyAction)
+ m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), 0);
}
void WebFrameLoaderClient::cancelPolicyCheck()
@@ -900,7 +879,7 @@ void WebFrameLoaderClient::didDisplayInsecureContent()
webPage->send(Messages::WebPageProxy::DidDisplayInsecureContentForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
}
-void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin*)
+void WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin*, const KURL&)
{
WebPage* webPage = m_frame->page();
if (!webPage)
@@ -1003,7 +982,9 @@ void WebFrameLoaderClient::saveViewStateToItem(HistoryItem*)
void WebFrameLoaderClient::restoreViewState()
{
- notImplemented();
+ // Inform the UI process of the scale factor.
+ double scaleFactor = m_frame->coreFrame()->loader()->history()->currentItem()->pageScaleFactor();
+ m_frame->page()->send(Messages::WebPageProxy::ViewScaleFactorDidChange(scaleFactor));
}
void WebFrameLoaderClient::provisionalLoadStarted()
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h
index 29c8bdd..9070b3a 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h
@@ -137,7 +137,7 @@ private:
virtual void dispatchDidChangeBackForwardIndex() const;
virtual void didDisplayInsecureContent();
- virtual void didRunInsecureContent(WebCore::SecurityOrigin*);
+ virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
@@ -222,9 +222,6 @@ private:
bool m_frameHasCustomRepresentation;
};
-uint32_t modifiersForNavigationAction(const WebCore::NavigationAction&);
-int32_t mouseButtonForNavigationAction(const WebCore::NavigationAction&);
-
} // namespace WebKit
#endif // WebFrameLoaderClient_h
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp
index 8701022..1f920a1 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebGeolocationClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebGeolocationClient.h"
#if ENABLE(CLIENT_BASED_GEOLOCATION)
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp
index ddd1fa8..80552f0 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorClient.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp
index 28d3b3d..6298293 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspectorFrontendClient.h"
#if ENABLE(INSPECTOR)
@@ -40,7 +41,7 @@ using namespace WebCore;
namespace WebKit {
WebInspectorFrontendClient::WebInspectorFrontendClient(WebPage* page, WebPage* inspectorPage)
- : InspectorFrontendClientLocal(page->corePage()->inspectorController(), inspectorPage->corePage())
+ : InspectorFrontendClientLocal(page->corePage()->inspectorController(), inspectorPage->corePage(), new Settings())
, m_page(page)
{
}
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
index 49b31ef..479252a 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPlatformStrategies.h"
#if USE(PLATFORM_STRATEGIES)
@@ -213,6 +214,13 @@ String WebPlatformStrategies::contextMenuItemTagCopyImageToClipboard()
return UI_STRING("Copy Image", "Copy Image context menu item");
}
+#if PLATFORM(QT)
+String WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard()
+{
+ return UI_STRING("Copy Image Address", "Copy Image Address menu item");
+}
+#endif
+
String WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow()
{
return UI_STRING("Open Video in New Window", "Open Video in New Window context menu item");
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
index b584f8d..a763475 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
@@ -68,6 +68,9 @@ private:
virtual String contextMenuItemTagOpenImageInNewWindow();
virtual String contextMenuItemTagDownloadImageToDisk();
virtual String contextMenuItemTagCopyImageToClipboard();
+#if PLATFORM(QT)
+ virtual String contextMenuItemTagCopyImageUrlToClipboard();
+#endif
virtual String contextMenuItemTagOpenFrameInNewWindow();
virtual String contextMenuItemTagCopy();
virtual String contextMenuItemTagGoBack();
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp
index ea0ad2d..7242d4f 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp
@@ -19,6 +19,7 @@
*
*/
+#include "config.h"
#include "WebPopupMenu.h"
#include "PlatformPopupMenuData.h"
@@ -85,7 +86,8 @@ Vector<WebPopupItem> WebPopupMenu::populateItems()
// FIXME: Add support for styling the font.
// FIXME: Add support for styling the foreground and background colors.
// FIXME: Find a way to customize text color when an item is highlighted.
- items.append(WebPopupItem(WebPopupItem::Item, m_popupClient->itemText(i), m_popupClient->itemToolTip(i), m_popupClient->itemAccessibilityText(i), m_popupClient->itemIsEnabled(i), m_popupClient->itemIsLabel(i)));
+ PopupMenuStyle itemStyle = m_popupClient->itemStyle(i);
+ items.append(WebPopupItem(WebPopupItem::Item, m_popupClient->itemText(i), itemStyle.textDirection(), itemStyle.hasTextDirectionOverride(), m_popupClient->itemToolTip(i), m_popupClient->itemAccessibilityText(i), m_popupClient->itemIsEnabled(i), m_popupClient->itemIsLabel(i)));
}
}
@@ -110,7 +112,7 @@ void WebPopupMenu::show(const IntRect& rect, FrameView* view, int index)
PlatformPopupMenuData platformData;
setUpPlatformData(pageCoordinates, platformData);
- WebProcess::shared().connection()->send(Messages::WebPageProxy::ShowPopupMenu(pageCoordinates, items, index, platformData), m_page->pageID());
+ WebProcess::shared().connection()->send(Messages::WebPageProxy::ShowPopupMenu(pageCoordinates, m_popupClient->menuStyle().textDirection(), items, index, platformData), m_page->pageID());
}
void WebPopupMenu::hide()
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp
index acec5f2..b875f32 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp
@@ -20,6 +20,7 @@
*/
+#include "config.h"
#include "WebSearchPopupMenu.h"
using namespace WebCore;
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp
index db9500a..b21be47 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuClient.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp
index 6cda476..b6d71bb 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPopupMenu.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm
index 32d08b2..750a397 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebContextMenuClient.h"
+#import "config.h"
+#import "WebContextMenuClient.h"
-#include "NotImplemented.h"
-#include "WebPage.h"
-#include <WebCore/Frame.h>
-#include <WebCore/Page.h>
-#include <wtf/text/WTFString.h>
+#import "NotImplemented.h"
+#import "WebPage.h"
+#import <WebCore/Frame.h>
+#import <WebCore/Page.h>
+#import <wtf/text/WTFString.h>
using namespace WebCore;
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm
index 9952e3f..5169b23 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm
@@ -23,10 +23,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
+#import "WebDragClient.h"
+
#import "PasteboardTypes.h"
#import "ShareableBitmap.h"
#import "WebCoreArgumentCoders.h"
-#import "WebDragClient.h"
#import "WebPage.h"
#import "WebPageProxyMessages.h"
#import <WebCore/CachedImage.h>
@@ -45,35 +47,8 @@ using namespace WebCore;
namespace WebKit {
-const float DragLabelBorderX = 4;
-//Keep border_y in synch with DragController::LinkDragBorderInset
-const float DragLabelBorderY = 2;
-const float DragLabelRadius = 5;
-const float LabelBorderYOffset = 2;
-
-const float MinDragLabelWidthBeforeClip = 120;
-const float MaxDragLabelWidth = 320;
-
-const float DragLinkLabelFontsize = 11;
-const float DragLinkUrlFontSize = 10;
-
using namespace WebCore;
-
-static Font& fontFromNSFont(NSFont *font)
-{
- static NSFont *currentFont;
- DEFINE_STATIC_LOCAL(Font, currentRenderer, ());
-
- if ([font isEqual:currentFont])
- return currentRenderer;
- if (currentFont)
- CFRelease(currentFont);
- currentFont = font;
- CFRetain(currentFont);
- currentRenderer = Font(FontPlatformData(font, [font pointSize]), ![[NSGraphicsContext currentContext] isDrawingToScreen]);
- return currentRenderer;
-}
-
+
void WebDragClient::startDrag(DragImageRef dragImage, const IntPoint& at, const IntPoint& eventPos, Clipboard* clipboard, Frame* frame, bool linkDrag)
{
if (!frame)
@@ -98,88 +73,6 @@ void WebDragClient::startDrag(DragImageRef dragImage, const IntPoint& at, const
m_page->send(Messages::WebPageProxy::SetDragImage(clientPoint, IntSize([dragNSImage size]), handle, linkDrag));
}
-DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& title, Frame* frame)
-{
- if (!frame)
- return nil;
- NSString *label = 0;
- if (!title.isEmpty())
- label = title;
- NSURL *cocoaURL = url;
- NSString *urlString = [cocoaURL _web_userVisibleString];
-
- BOOL drawURLString = YES;
- BOOL clipURLString = NO;
- BOOL clipLabelString = NO;
-
- if (!label) {
- drawURLString = NO;
- label = urlString;
- }
-
- NSFont *labelFont = [[NSFontManager sharedFontManager] convertFont:[NSFont systemFontOfSize:DragLinkLabelFontsize]
- toHaveTrait:NSBoldFontMask];
- NSFont *urlFont = [NSFont systemFontOfSize:DragLinkUrlFontSize];
- NSSize labelSize;
- labelSize.width = [label _web_widthWithFont: labelFont];
- labelSize.height = [labelFont ascender] - [labelFont descender];
- if (labelSize.width > MaxDragLabelWidth){
- labelSize.width = MaxDragLabelWidth;
- clipLabelString = YES;
- }
-
- NSSize imageSize;
- imageSize.width = labelSize.width + DragLabelBorderX * 2;
- imageSize.height = labelSize.height + DragLabelBorderY * 2;
- if (drawURLString) {
- NSSize urlStringSize;
- urlStringSize.width = [urlString _web_widthWithFont: urlFont];
- urlStringSize.height = [urlFont ascender] - [urlFont descender];
- imageSize.height += urlStringSize.height;
- if (urlStringSize.width > MaxDragLabelWidth) {
- imageSize.width = max(MaxDragLabelWidth + DragLabelBorderY * 2, MinDragLabelWidthBeforeClip);
- clipURLString = YES;
- } else
- imageSize.width = max(labelSize.width + DragLabelBorderX * 2, urlStringSize.width + DragLabelBorderX * 2);
- }
- NSImage *dragImage = [[[NSImage alloc] initWithSize: imageSize] autorelease];
- [dragImage lockFocus];
-
- [[NSColor colorWithDeviceRed: 0.7f green: 0.7f blue: 0.7f alpha: 0.8f] set];
-
- // Drag a rectangle with rounded corners
- NSBezierPath *path = [NSBezierPath bezierPath];
- [path appendBezierPathWithOvalInRect: NSMakeRect(0, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(0, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, imageSize.height - DragLabelRadius * 2, DragLabelRadius * 2, DragLabelRadius * 2)];
- [path appendBezierPathWithOvalInRect: NSMakeRect(imageSize.width - DragLabelRadius * 2, 0, DragLabelRadius * 2, DragLabelRadius * 2)];
-
- [path appendBezierPathWithRect: NSMakeRect(DragLabelRadius, 0, imageSize.width - DragLabelRadius * 2, imageSize.height)];
- [path appendBezierPathWithRect: NSMakeRect(0, DragLabelRadius, DragLabelRadius + 10, imageSize.height - 2 * DragLabelRadius)];
- [path appendBezierPathWithRect: NSMakeRect(imageSize.width - DragLabelRadius - 20, DragLabelRadius, DragLabelRadius + 20, imageSize.height - 2 * DragLabelRadius)];
- [path fill];
-
- NSColor *topColor = [NSColor colorWithDeviceWhite:0.0f alpha:0.75f];
- NSColor *bottomColor = [NSColor colorWithDeviceWhite:1.0f alpha:0.5f];
- if (drawURLString) {
- if (clipURLString)
- //urlString = [WebStringTruncator centerTruncateString: urlString toWidth:imageSize.width - (DragLabelBorderX * 2) withFont:urlFont];
- urlString = StringTruncator::centerTruncate(urlString, imageSize.width - (DragLabelBorderX * 2), fontFromNSFont(urlFont));
- [urlString _web_drawDoubledAtPoint:NSMakePoint(DragLabelBorderX, DragLabelBorderY - [urlFont descender])
- withTopColor:topColor bottomColor:bottomColor font:urlFont];
- }
-
- if (clipLabelString)
- //label = [WebStringTruncator rightTruncateString: label toWidth:imageSize.width - (DragLabelBorderX * 2) withFont:labelFont];
- label = StringTruncator::rightTruncate(label, imageSize.width - (DragLabelBorderX * 2), fontFromNSFont(labelFont));
- [label _web_drawDoubledAtPoint:NSMakePoint (DragLabelBorderX, imageSize.height - LabelBorderYOffset - [labelFont pointSize])
- withTopColor:topColor bottomColor:bottomColor font:labelFont];
-
- [dragImage unlockFocus];
-
- return dragImage;
-}
-
static void writeURL(NSPasteboard* pasteboard, NSURL* URL, NSString* title, NSArray* types)
{
ASSERT(URL);
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm
index ce33890..ee87ea2 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm
@@ -27,26 +27,27 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebEditorClient.h"
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
-#include "NotImplemented.h"
-
-#include "WebCoreArgumentCoders.h"
-#include "WebPage.h"
-#include "WebFrame.h"
-#include "WebPageProxyMessages.h"
-#include "WebProcess.h"
-#include <WebCore/ArchiveResource.h>
-#include <WebCore/DocumentFragment.h>
-#include <WebCore/DOMDocumentFragmentInternal.h>
-#include <WebCore/DOMDocumentInternal.h>
-#include <WebCore/FocusController.h>
-#include <WebCore/Frame.h>
-#include <WebCore/KeyboardEvent.h>
-#include <WebCore/Page.h>
-#include <WebKit/WebResource.h>
-#include <WebKit/WebNSURLExtras.h>
+#import "NotImplemented.h"
+
+#import "WebCoreArgumentCoders.h"
+#import "WebPage.h"
+#import "WebFrame.h"
+#import "WebPageProxyMessages.h"
+#import "WebProcess.h"
+#import <WebCore/ArchiveResource.h>
+#import <WebCore/DocumentFragment.h>
+#import <WebCore/DOMDocumentFragmentInternal.h>
+#import <WebCore/DOMDocumentInternal.h>
+#import <WebCore/FocusController.h>
+#import <WebCore/Frame.h>
+#import <WebCore/KeyboardEvent.h>
+#import <WebCore/Page.h>
+#import <WebKit/WebResource.h>
+#import <WebKit/WebNSURLExtras.h>
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
#import <AppKit/NSTextChecker.h>
#endif
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm
index 549d7ee..677c537 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm
@@ -23,13 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebErrors.h"
-
-#include "WKError.h"
-#include "WebError.h"
-#include <WebCore/ResourceRequest.h>
-#include <WebCore/ResourceResponse.h>
-#include <pthread.h>
+#import "config.h"
+#import "WebErrors.h"
+
+#import "WKError.h"
+#import "WebError.h"
+#import <WebCore/ResourceRequest.h>
+#import <WebCore/ResourceResponse.h>
+#import <pthread.h>
using namespace WebCore;
using namespace WebKit;
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm
index 570d351..d91e8e8 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm
@@ -17,6 +17,7 @@
Boston, MA 02110-1301, USA.
*/
+#import "config.h"
#import "WebFrameNetworkingContext.h"
#import <WebCore/Page.h>
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm
index 4d3d167..7e446b7 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm
@@ -23,9 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPopupMenu.h"
+#import "config.h"
+#import "WebPopupMenu.h"
-#include "PlatformPopupMenuData.h"
+#import "PlatformPopupMenuData.h"
using namespace WebCore;
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
index f81b627..2d74bbc 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebSystemInterface.h"
#import <WebCore/WebCoreSystemInterface.h>
@@ -55,6 +56,7 @@ void InitWebCoreSystemInterface(void)
INIT(GetFontInLanguageForRange);
INIT(GetGlyphTransformedAdvances);
INIT(GetGlyphsForCharacters);
+ INIT(GetHTTPPipeliningPriority);
INIT(GetMIMETypeForExtension);
INIT(GetNSURLResponseLastModifiedDate);
INIT(GetPreferredExtensionForMIMEType);
@@ -82,6 +84,7 @@ void InitWebCoreSystemInterface(void)
INIT(SetCONNECTProxyForStream);
INIT(SetCookieStoragePrivateBrowsingEnabled);
INIT(SetDragImage);
+ INIT(SetHTTPPipeliningPriority);
INIT(SetNSURLConnectionDefersCallbacks);
INIT(SetNSURLRequestShouldContentSniff);
INIT(SetPatternBaseCTM);
@@ -92,11 +95,51 @@ void InitWebCoreSystemInterface(void)
INIT(SignalCFReadStreamHasBytes);
#if !defined(BUILDING_ON_SNOW_LEOPARD)
+ INIT(IOSurfaceContextCreate);
+ INIT(IOSurfaceContextCreateImage);
INIT(CreateCTTypesetterWithUniCharProviderAndOptions);
INIT(MakeScrollbarPainter);
+ INIT(ScrollbarPainterSetDelegate);
INIT(ScrollbarPainterPaint);
+ INIT(ScrollbarThickness);
+ INIT(ScrollbarMinimumThumbLength);
+ INIT(ScrollbarMinimumTotalLengthNeededForThumb);
+ INIT(ScrollbarPainterKnobAlpha);
+ INIT(SetScrollbarPainterKnobAlpha);
+ INIT(ScrollbarPainterTrackAlpha);
+ INIT(SetScrollbarPainterTrackAlpha);
+ INIT(ScrollbarPainterIsHorizontal);
+ INIT(ScrollbarPainterSetOverlayState);
+ INIT(MakeScrollbarPainterController);
+ INIT(MakeScrollbarReplacementPainter);
+ INIT(SetPainterForPainterController);
+ INIT(VerticalScrollbarPainterForController);
+ INIT(HorizontalScrollbarPainterForController);
+ INIT(SetScrollbarPainterControllerStyle);
+ INIT(ContentAreaScrolled);
+ INIT(ContentAreaWillPaint);
+ INIT(MouseEnteredContentArea);
+ INIT(MouseExitedContentArea);
+ INIT(MouseMovedInContentArea);
+ INIT(WillStartLiveResize);
+ INIT(ContentAreaResized);
+ INIT(WillEndLiveResize);
+ INIT(ContentAreaDidShow);
+ INIT(ContentAreaDidHide);
+ INIT(ScrollbarPainterUsesOverlayScrollers);
#else
INIT(GetHyphenationLocationBeforeIndex);
#endif
+
+ INIT(GetAXTextMarkerTypeID);
+ INIT(GetAXTextMarkerRangeTypeID);
+ INIT(CreateAXTextMarker);
+ INIT(GetBytesFromAXTextMarker);
+ INIT(CreateAXTextMarkerRange);
+ INIT(CopyAXTextMarkerRangeStart);
+ INIT(CopyAXTextMarkerRangeEnd);
+ INIT(AccessibilityHandleFocusChanged);
+ INIT(CreateAXUIElementRef);
+ INIT(UnregisterUniqueIdForElement);
});
}
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp
index abfb70a..f6c45b0 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuClient.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp
index cee6842..61c2a3a 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebErrors.h"
#include <WebCore/ResourceRequest.h>
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp
index 55552e1..5fcaa84 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp
@@ -18,7 +18,6 @@
*/
#include "config.h"
-
#include "WebFrameNetworkingContext.h"
#include "WebProcess.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp
index 4d3d167..b21f06c 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPopupMenu.h"
#include "PlatformPopupMenuData.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp
index c16a4d6..c866c1d 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebContextMenuClient.h"
#include <WebCore/NotImplemented.h>
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragClientWin.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragClientWin.cpp
new file mode 100644
index 0000000..7381096
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragClientWin.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebDragClient.h"
+
+#include "ShareableBitmap.h"
+#include "WebCoreArgumentCoders.h"
+#include "WebPage.h"
+#include "WebPageProxyMessages.h"
+#include <WebCore/BitmapInfo.h>
+#include <WebCore/COMPtr.h>
+#include <WebCore/ClipboardWin.h>
+#include <WebCore/DragController.h>
+#include <WebCore/Frame.h>
+#include <WebCore/GraphicsContext.h>
+#include <WebCore/Page.h>
+#include <shlobj.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+static DWORD draggingSourceOperationMaskToDragCursors(DragOperation op)
+{
+ DWORD result = DROPEFFECT_NONE;
+ if (op == DragOperationEvery)
+ return DROPEFFECT_COPY | DROPEFFECT_LINK | DROPEFFECT_MOVE;
+ if (op & DragOperationCopy)
+ result |= DROPEFFECT_COPY;
+ if (op & DragOperationLink)
+ result |= DROPEFFECT_LINK;
+ if (op & DragOperationMove)
+ result |= DROPEFFECT_MOVE;
+ if (op & DragOperationGeneric)
+ result |= DROPEFFECT_MOVE;
+ return result;
+}
+
+void WebDragClient::startDrag(DragImageRef image, const IntPoint& imageOrigin, const IntPoint& dragPoint, Clipboard* clipboard, Frame* frame, bool isLink)
+{
+ COMPtr<IDataObject> dataObject = static_cast<ClipboardWin*>(clipboard)->dataObject();
+
+ if (!dataObject)
+ return;
+
+ OwnPtr<HDC> bitmapDC(CreateCompatibleDC(0));
+ BITMAPINFO bitmapInfo = {0};
+ bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ GetDIBits(bitmapDC.get(), image, 0, 0, 0, &bitmapInfo, DIB_RGB_COLORS);
+ if (bitmapInfo.bmiHeader.biSizeImage <= 0)
+ bitmapInfo.bmiHeader.biSizeImage = bitmapInfo.bmiHeader.biWidth * abs(bitmapInfo.bmiHeader.biHeight) * (bitmapInfo.bmiHeader.biBitCount + 7) / 8;
+
+ RefPtr<SharedMemory> memoryBuffer = SharedMemory::create(bitmapInfo.bmiHeader.biSizeImage);
+
+ bitmapInfo.bmiHeader.biCompression = BI_RGB;
+ GetDIBits(bitmapDC.get(), image, 0, bitmapInfo.bmiHeader.biHeight, memoryBuffer->data(), &bitmapInfo, DIB_RGB_COLORS);
+
+ SharedMemory::Handle handle;
+ if (!memoryBuffer->createHandle(handle, SharedMemory::ReadOnly))
+ return;
+ DWORD okEffect = draggingSourceOperationMaskToDragCursors(m_page->corePage()->dragController()->sourceDragOperation());
+ DragData dragData(dataObject.get(), IntPoint(), IntPoint(), DragOperationNone);
+ m_page->send(Messages::WebPageProxy::StartDragDrop(imageOrigin, dragPoint, okEffect, dragData.dragDataMap(), IntSize(bitmapInfo.bmiHeader.biWidth, bitmapInfo.bmiHeader.biHeight), handle, isLink), m_page->pageID());
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.cpp
new file mode 100644
index 0000000..b4f1414
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebDragSource.h"
+
+#include <WebCore/Cursor.h>
+#include <WebCore/DragActions.h>
+#include <WebCore/EventHandler.h>
+#include <WebCore/Frame.h>
+#include <WebCore/Page.h>
+#include <WebCore/PlatformMouseEvent.h>
+#include <wtf/CurrentTime.h>
+
+using namespace WebCore;
+
+PassRefPtr<WebDragSource> WebDragSource::createInstance()
+{
+ return adoptRef(new WebDragSource);
+}
+
+WebDragSource::WebDragSource()
+{
+}
+
+HRESULT WebDragSource::QueryInterface(REFIID riid, void** ppvObject)
+{
+ *ppvObject = 0;
+ if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IDropSource)) {
+ *ppvObject = this;
+ AddRef();
+
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+ULONG WebDragSource::AddRef(void)
+{
+ ref();
+ return refCount();
+}
+
+ULONG WebDragSource::Release(void)
+{
+ deref();
+ return refCount();
+}
+
+HRESULT WebDragSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfState)
+{
+ if (fEscapePressed)
+ return DRAGDROP_S_CANCEL;
+
+ if (grfState & (MK_LBUTTON | MK_RBUTTON))
+ return S_OK;
+
+ return DRAGDROP_S_DROP;
+}
+
+HRESULT WebDragSource::GiveFeedback(DWORD dwEffect)
+{
+ return DRAGDROP_S_USEDEFAULTCURSORS;
+}
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.h b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.h
new file mode 100644
index 0000000..c2c5f3f
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebDragSource.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebDragSource_h
+#define WebDragSource_h
+
+#include <WTF/RefCounted.h>
+#include <WebCore/COMPtr.h>
+#include <objidl.h>
+
+class WebDragSource : public IDropSource, public RefCounted<WebDragSource> {
+public:
+ static PassRefPtr<WebDragSource> createInstance();
+
+private:
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
+ virtual ULONG STDMETHODCALLTYPE AddRef();
+ virtual ULONG STDMETHODCALLTYPE Release();
+ virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfState);
+ virtual HRESULT STDMETHODCALLTYPE GiveFeedback(DWORD dwEffect);
+ WebDragSource();
+};
+
+#endif // !WebDragSource_h
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebErrorsWin.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebErrorsWin.cpp
index b29b461..b31920c 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebErrorsWin.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebErrorsWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebErrors.h"
#include "WKError.h"
diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp
index 9c23133..b80dccd 100644
--- a/Source/WebKit2/WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp
+++ b/Source/WebKit2/WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPopupMenu.h"
#include "PlatformPopupMenuData.h"
@@ -49,7 +50,7 @@ void WebPopupMenu::setUpPlatformData(const WebCore::IntRect& pageCoordinates, Pl
data.m_clientPaddingRight = m_popupClient->clientPaddingRight();
data.m_clientInsetLeft = m_popupClient->clientInsetLeft();
data.m_clientInsetRight = m_popupClient->clientInsetRight();
- data.m_itemHeight = m_popupClient->menuStyle().font().height() + 1;
+ data.m_itemHeight = m_popupClient->menuStyle().font().fontMetrics().height() + 1;
int popupWidth = 0;
for (size_t i = 0; i < itemCount; ++i) {
@@ -115,7 +116,7 @@ void WebPopupMenu::setUpPlatformData(const WebCore::IntRect& pageCoordinates, Pl
unsigned length = itemText.length();
const UChar* string = itemText.characters();
- TextRun textRun(string, length, false, 0, 0, itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft);
+ TextRun textRun(string, length, false, 0, 0, TextRun::AllowTrailingExpansion, itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft);
notSelectedBackingStoreContext->setFillColor(optionTextColor, ColorSpaceDeviceRGB);
selectedBackingStoreContext->setFillColor(activeOptionTextColor, ColorSpaceDeviceRGB);
@@ -133,7 +134,7 @@ void WebPopupMenu::setUpPlatformData(const WebCore::IntRect& pageCoordinates, Pl
int textX = std::max(0, data.m_clientPaddingLeft - data.m_clientInsetLeft);
if (RenderTheme::defaultTheme()->popupOptionSupportsTextIndent() && itemStyle.textDirection() == LTR)
textX += itemStyle.textIndent().calcMinValue(itemRect.width());
- int textY = itemRect.y() + itemFont.ascent() + (itemRect.height() - itemFont.height()) / 2;
+ int textY = itemRect.y() + itemFont.fontMetrics().ascent() + (itemRect.height() - itemFont.fontMetrics().height()) / 2;
notSelectedBackingStoreContext->drawBidiText(itemFont, textRun, IntPoint(textX, textY));
selectedBackingStoreContext->drawBidiText(itemFont, textRun, IntPoint(textX, textY));
diff --git a/Source/WebKit2/WebProcess/WebKitMain.cpp b/Source/WebKit2/WebProcess/WebKitMain.cpp
index 53084a6..d8bebb0 100644
--- a/Source/WebKit2/WebProcess/WebKitMain.cpp
+++ b/Source/WebKit2/WebProcess/WebKitMain.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "CommandLine.h"
#include "PluginProcessMain.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
index d629ced..f5100aa 100644
--- a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingArea.h"
#include "DrawingAreaMessageKinds.h"
@@ -89,12 +90,18 @@ void ChunkedUpdateDrawingArea::display()
UpdateChunk updateChunk(dirtyRect);
paintIntoUpdateChunk(&updateChunk);
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::Update, m_webPage->pageID(), CoreIPC::In(updateChunk));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::Update, m_webPage->pageID(), CoreIPC::In(updateChunk));
m_isWaitingForUpdate = true;
m_displayTimer.stop();
}
+void ChunkedUpdateDrawingArea::forceRepaint()
+{
+ m_isWaitingForUpdate = false;
+ display();
+}
+
void ChunkedUpdateDrawingArea::scheduleDisplay()
{
if (m_paintingIsSuspended)
@@ -132,7 +139,7 @@ void ChunkedUpdateDrawingArea::setSize(const IntSize& viewSize)
ASSERT(!m_displayTimer.isActive());
// Painting is suspended, just send back an empty update chunk.
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(UpdateChunk()));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(UpdateChunk()));
return;
}
@@ -142,7 +149,7 @@ void ChunkedUpdateDrawingArea::setSize(const IntSize& viewSize)
m_displayTimer.stop();
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(updateChunk));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(updateChunk));
}
void ChunkedUpdateDrawingArea::suspendPainting()
@@ -161,7 +168,7 @@ void ChunkedUpdateDrawingArea::resumePainting(bool forceRepaint)
if (forceRepaint) {
// Just set the dirty rect to the entire page size.
- m_dirtyRect = IntRect(IntPoint(0, 0), m_webPage->size());
+ m_dirtyRect = m_webPage->bounds();
}
// Schedule a display.
diff --git a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
index 08aa3e7..d32ed4c 100644
--- a/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h
@@ -42,6 +42,7 @@ public:
virtual void setNeedsDisplay(const WebCore::IntRect&);
virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
virtual void display();
+ virtual void forceRepaint();
#if USE(ACCELERATED_COMPOSITING)
virtual void attachCompositingContext() { }
diff --git a/Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp b/Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp
index e5de52f..1649fb1 100644
--- a/Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/DecoderAdapter.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DecoderAdapter.h"
#include "WebCoreArgumentCoders.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp
index ea5b443..10a8dbf 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp
@@ -23,12 +23,13 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DrawingArea.h"
// Subclasses
#include "ChunkedUpdateDrawingArea.h"
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
#include "DrawingAreaImpl.h"
#endif
@@ -52,7 +53,7 @@ PassRefPtr<DrawingArea> DrawingArea::create(WebPage* webPage, const WebPageCreat
break;
case DrawingAreaInfo::Impl:
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
return DrawingAreaImpl::create(webPage, parameters);
#else
return 0;
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingArea.h b/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
index 713994d..de256b6 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingArea.h
@@ -40,7 +40,7 @@ namespace WebCore {
namespace WebKit {
class WebPage;
-class WebPageCreationParameters;
+struct WebPageCreationParameters;
class DrawingArea : public RefCounted<DrawingArea> {
public:
@@ -48,17 +48,22 @@ public:
static PassRefPtr<DrawingArea> create(WebPage*, const WebPageCreationParameters&);
virtual ~DrawingArea();
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
void didReceiveDrawingAreaMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
#endif
virtual void setNeedsDisplay(const WebCore::IntRect&) = 0;
virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
+ // FIXME: These should be pure virtual.
virtual void pageBackgroundTransparencyChanged() { }
-
virtual void onPageClose() { }
-
+ virtual void forceRepaint() { }
+
+ virtual void didInstallPageOverlay() { }
+ virtual void didUninstallPageOverlay() { }
+ virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) { }
+
#if USE(ACCELERATED_COMPOSITING)
virtual void attachCompositingContext() = 0;
virtual void detachCompositingContext() = 0;
@@ -80,7 +85,7 @@ protected:
private:
// CoreIPC message handlers.
// FIXME: These should be pure virtual.
- virtual void setSize(const WebCore::IntSize&) { }
+ virtual void setSize(const WebCore::IntSize& size, const WebCore::IntSize& scrollOffset) { }
virtual void didUpdate() { }
virtual void suspendPainting() { }
virtual void resumePainting() { }
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in b/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in
index 682ef5a..ec09e18 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in
@@ -21,7 +21,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
messages -> DrawingArea {
- SetSize(WebCore::IntSize size)
+ SetSize(WebCore::IntSize size, WebCore::IntSize scrollOffset)
DidUpdate()
SuspendPainting()
ResumePainting()
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp
index 2063bd6..6d65fae 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp
@@ -23,9 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "DrawingAreaImpl.h"
#include "DrawingAreaProxyMessages.h"
+#include "LayerTreeContext.h"
#include "ShareableBitmap.h"
#include "UpdateInfo.h"
#include "WebPage.h"
@@ -33,7 +35,7 @@
#include "WebProcess.h"
#include <WebCore/GraphicsContext.h>
-#ifndef __APPLE__
+#if !PLATFORM(MAC) && !PLATFORM(WIN)
#error "This drawing area is not ready for use by other ports yet."
#endif
@@ -41,6 +43,12 @@ using namespace WebCore;
namespace WebKit {
+static uint64_t generateSequenceNumber()
+{
+ static uint64_t sequenceNumber;
+ return ++sequenceNumber;
+}
+
PassRefPtr<DrawingAreaImpl> DrawingAreaImpl::create(WebPage* webPage, const WebPageCreationParameters& parameters)
{
return adoptRef(new DrawingAreaImpl(webPage, parameters));
@@ -48,27 +56,50 @@ PassRefPtr<DrawingAreaImpl> DrawingAreaImpl::create(WebPage* webPage, const WebP
DrawingAreaImpl::~DrawingAreaImpl()
{
+ if (m_layerTreeHost)
+ m_layerTreeHost->invalidate();
}
DrawingAreaImpl::DrawingAreaImpl(WebPage* webPage, const WebPageCreationParameters& parameters)
: DrawingArea(DrawingAreaInfo::Impl, parameters.drawingAreaInfo.identifier, webPage)
+ , m_inSetSize(false)
, m_isWaitingForDidUpdate(false)
, m_isPaintingSuspended(!parameters.isVisible)
, m_displayTimer(WebProcess::shared().runLoop(), this, &DrawingAreaImpl::display)
+ , m_exitCompositingTimer(WebProcess::shared().runLoop(), this, &DrawingAreaImpl::exitAcceleratedCompositingMode)
{
}
void DrawingAreaImpl::setNeedsDisplay(const IntRect& rect)
{
- if (rect.isEmpty())
+ IntRect dirtyRect = rect;
+ dirtyRect.intersect(m_webPage->bounds());
+
+ if (dirtyRect.isEmpty())
return;
- m_dirtyRegion.unite(rect);
+ if (m_layerTreeHost) {
+ ASSERT(m_dirtyRegion.isEmpty());
+
+ m_layerTreeHost->setNonCompositedContentsNeedDisplay(dirtyRect);
+ return;
+ }
+
+ m_dirtyRegion.unite(dirtyRect);
scheduleDisplay();
}
void DrawingAreaImpl::scroll(const IntRect& scrollRect, const IntSize& scrollOffset)
{
+ if (m_layerTreeHost) {
+ ASSERT(m_scrollRect.isEmpty());
+ ASSERT(m_scrollOffset.isEmpty());
+ ASSERT(m_dirtyRegion.isEmpty());
+
+ m_layerTreeHost->scrollNonCompositedContents(scrollRect, scrollOffset);
+ return;
+ }
+
if (!m_scrollRect.isEmpty() && scrollRect != m_scrollRect) {
unsigned scrollArea = scrollRect.width() * scrollRect.height();
unsigned currentScrollArea = m_scrollRect.width() * m_scrollRect.height();
@@ -109,6 +140,36 @@ void DrawingAreaImpl::scroll(const IntRect& scrollRect, const IntSize& scrollOff
m_scrollOffset += scrollOffset;
}
+void DrawingAreaImpl::forceRepaint()
+{
+ m_isWaitingForDidUpdate = false;
+ display();
+}
+
+void DrawingAreaImpl::didInstallPageOverlay()
+{
+ if (m_layerTreeHost)
+ m_layerTreeHost->didInstallPageOverlay();
+}
+
+void DrawingAreaImpl::didUninstallPageOverlay()
+{
+ if (m_layerTreeHost)
+ m_layerTreeHost->didUninstallPageOverlay();
+
+ setNeedsDisplay(m_webPage->bounds());
+}
+
+void DrawingAreaImpl::setPageOverlayNeedsDisplay(const IntRect& rect)
+{
+ if (m_layerTreeHost) {
+ m_layerTreeHost->setPageOverlayNeedsDisplay(rect);
+ return;
+ }
+
+ setNeedsDisplay(rect);
+}
+
void DrawingAreaImpl::attachCompositingContext()
{
}
@@ -117,12 +178,31 @@ void DrawingAreaImpl::detachCompositingContext()
{
}
-void DrawingAreaImpl::setRootCompositingLayer(WebCore::GraphicsLayer*)
+void DrawingAreaImpl::setRootCompositingLayer(GraphicsLayer* graphicsLayer)
{
+ if (graphicsLayer) {
+ if (!m_layerTreeHost) {
+ // We're actually entering accelerated compositing mode.
+ enterAcceleratedCompositingMode(graphicsLayer);
+ } else {
+ m_exitCompositingTimer.stop();
+ // We're already in accelerated compositing mode, but the root compositing layer changed.
+ m_layerTreeHost->setRootCompositingLayer(graphicsLayer);
+ }
+ } else {
+ if (m_layerTreeHost) {
+ // We'll exit accelerated compositing mode on a timer, to avoid re-entering
+ // compositing code via display() and layout.
+ exitAcceleratedCompositingModeSoon();
+ }
+ }
}
void DrawingAreaImpl::scheduleCompositingLayerSync()
{
+ if (!m_layerTreeHost)
+ return;
+ m_layerTreeHost->scheduleLayerFlush();
}
void DrawingAreaImpl::syncCompositingLayers()
@@ -133,27 +213,48 @@ void DrawingAreaImpl::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID
{
}
-void DrawingAreaImpl::setSize(const IntSize& size)
+void DrawingAreaImpl::setSize(const WebCore::IntSize& size, const WebCore::IntSize& scrollOffset)
{
+ ASSERT(!m_inSetSize);
+ m_inSetSize = true;
+
// Set this to false since we're about to call display().
m_isWaitingForDidUpdate = false;
m_webPage->setSize(size);
m_webPage->layoutIfNeeded();
+ m_webPage->scrollMainFrameIfNotAtMaxScrollPosition(scrollOffset);
UpdateInfo updateInfo;
+ LayerTreeContext layerTreeContext;
- if (m_isPaintingSuspended) {
- updateInfo.timestamp = currentTime();
+ if (m_layerTreeHost) {
+ m_layerTreeHost->sizeDidChange(size);
+ layerTreeContext = m_layerTreeHost->layerTreeContext();
+ }
+
+ if (m_isPaintingSuspended || m_layerTreeHost)
updateInfo.viewSize = m_webPage->size();
- } else
+ else {
+ m_dirtyRegion.unite(m_webPage->bounds());
+
+ // The display here should not cause layout to happen, so we can't enter accelerated compositing mode here.
display(updateInfo);
+ ASSERT(!m_layerTreeHost);
+ }
- m_webPage->send(Messages::DrawingAreaProxy::DidSetSize(updateInfo));
+ m_webPage->send(Messages::DrawingAreaProxy::DidSetSize(generateSequenceNumber(), updateInfo, layerTreeContext));
+
+ m_inSetSize = false;
}
void DrawingAreaImpl::didUpdate()
{
+ // We might get didUpdate messages from the UI process even after we've
+ // entered accelerated compositing mode. Ignore them.
+ if (m_layerTreeHost)
+ return;
+
m_isWaitingForDidUpdate = false;
// Display if needed.
@@ -174,7 +275,62 @@ void DrawingAreaImpl::resumePainting()
m_isPaintingSuspended = false;
- // FIXME: Repaint if needed.
+ // FIXME: We shouldn't always repaint everything here.
+ setNeedsDisplay(m_webPage->bounds());
+}
+
+void DrawingAreaImpl::enterAcceleratedCompositingMode(GraphicsLayer* graphicsLayer)
+{
+ m_exitCompositingTimer.stop();
+
+ ASSERT(!m_layerTreeHost);
+
+ m_layerTreeHost = LayerTreeHost::create(m_webPage);
+ m_layerTreeHost->setRootCompositingLayer(graphicsLayer);
+
+ // Non-composited content will now be handled exclusively by the layer tree host.
+ m_dirtyRegion = Region();
+ m_scrollRect = IntRect();
+ m_scrollOffset = IntSize();
+ m_displayTimer.stop();
+ m_isWaitingForDidUpdate = false;
+
+ if (!m_inSetSize)
+ m_webPage->send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(generateSequenceNumber(), m_layerTreeHost->layerTreeContext()));
+}
+
+void DrawingAreaImpl::exitAcceleratedCompositingMode()
+{
+ m_exitCompositingTimer.stop();
+
+ ASSERT(m_layerTreeHost);
+
+ m_layerTreeHost->invalidate();
+ m_layerTreeHost = nullptr;
+
+ if (m_inSetSize)
+ return;
+
+ UpdateInfo updateInfo;
+ if (m_isPaintingSuspended)
+ updateInfo.viewSize = m_webPage->size();
+ else {
+ m_dirtyRegion = m_webPage->bounds();
+ display(updateInfo);
+ }
+
+ // Send along a complete update of the page so we can paint the contents right after we exit the
+ // accelerated compositing mode, eliminiating flicker.
+ if (!m_inSetSize)
+ m_webPage->send(Messages::DrawingAreaProxy::ExitAcceleratedCompositingMode(generateSequenceNumber(), updateInfo));
+}
+
+void DrawingAreaImpl::exitAcceleratedCompositingModeSoon()
+{
+ if (m_exitCompositingTimer.isActive())
+ return;
+
+ m_exitCompositingTimer.startOneShot(0);
}
void DrawingAreaImpl::scheduleDisplay()
@@ -196,6 +352,7 @@ void DrawingAreaImpl::scheduleDisplay()
void DrawingAreaImpl::display()
{
+ ASSERT(!m_layerTreeHost);
ASSERT(!m_isWaitingForDidUpdate);
if (m_isPaintingSuspended)
@@ -207,7 +364,13 @@ void DrawingAreaImpl::display()
UpdateInfo updateInfo;
display(updateInfo);
- m_webPage->send(Messages::DrawingAreaProxy::Update(updateInfo));
+ if (m_layerTreeHost) {
+ // The call to update caused layout which turned on accelerated compositing.
+ // Don't send an Update message in this case.
+ return;
+ }
+
+ m_webPage->send(Messages::DrawingAreaProxy::Update(generateSequenceNumber(), updateInfo));
m_isWaitingForDidUpdate = true;
}
@@ -235,6 +398,8 @@ static bool shouldPaintBoundsRect(const IntRect& bounds, const Vector<IntRect>&
void DrawingAreaImpl::display(UpdateInfo& updateInfo)
{
ASSERT(!m_isPaintingSuspended);
+ ASSERT(!m_layerTreeHost);
+ ASSERT(!m_webPage->size().isEmpty());
// FIXME: It would be better if we could avoid painting altogether when there is a custom representation.
if (m_webPage->mainFrameHasCustomRepresentation())
@@ -263,7 +428,6 @@ void DrawingAreaImpl::display(UpdateInfo& updateInfo)
m_webPage->layoutIfNeeded();
- updateInfo.timestamp = currentTime();
updateInfo.viewSize = m_webPage->size();
updateInfo.updateRectBounds = bounds;
@@ -271,9 +435,11 @@ void DrawingAreaImpl::display(UpdateInfo& updateInfo)
for (size_t i = 0; i < rects.size(); ++i) {
m_webPage->drawRect(*graphicsContext, rects[i]);
+ if (m_webPage->hasPageOverlay())
+ m_webPage->drawPageOverlay(*graphicsContext, rects[i]);
updateInfo.updateRects.append(rects[i]);
}
-
+
// Layout can trigger more calls to setNeedsDisplay and we don't want to process them
// until the UI process has painted the update, so we stop the timer here.
m_displayTimer.stop();
diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h
index e008adc..cbb94c2 100644
--- a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h
+++ b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h
@@ -27,12 +27,13 @@
#define DrawingAreaImpl_h
#include "DrawingArea.h"
+#include "LayerTreeHost.h"
#include "Region.h"
#include "RunLoop.h"
namespace WebKit {
-struct UpdateInfo;
+class UpdateInfo;
class DrawingAreaImpl : public DrawingArea {
public:
@@ -45,6 +46,12 @@ private:
// DrawingArea
virtual void setNeedsDisplay(const WebCore::IntRect&);
virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
+ virtual void forceRepaint();
+
+ virtual void didInstallPageOverlay();
+ virtual void didUninstallPageOverlay();
+ virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
+
virtual void attachCompositingContext();
virtual void detachCompositingContext();
virtual void setRootCompositingLayer(WebCore::GraphicsLayer*);
@@ -53,11 +60,15 @@ private:
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
// CoreIPC message handlers.
- virtual void setSize(const WebCore::IntSize&);
+ virtual void setSize(const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
virtual void didUpdate();
virtual void suspendPainting();
virtual void resumePainting();
+ void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
+ void exitAcceleratedCompositingModeSoon();
+ void exitAcceleratedCompositingMode();
+
void scheduleDisplay();
void display();
void display(UpdateInfo&);
@@ -65,7 +76,10 @@ private:
Region m_dirtyRegion;
WebCore::IntRect m_scrollRect;
WebCore::IntSize m_scrollOffset;
-
+
+ // Whether we're currently processing a setSize message.
+ bool m_inSetSize;
+
// Whether we're waiting for a DidUpdate message. Used for throttling paints so that the
// web process won't paint more frequent than the UI process can handle.
bool m_isWaitingForDidUpdate;
@@ -75,6 +89,10 @@ private:
bool m_isPaintingSuspended;
RunLoop::Timer<DrawingAreaImpl> m_displayTimer;
+ RunLoop::Timer<DrawingAreaImpl> m_exitCompositingTimer;
+
+ // The layer tree host that handles accelerated compositing.
+ RefPtr<LayerTreeHost> m_layerTreeHost;
};
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp b/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
index 00edcce..590010b 100644
--- a/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "EncoderAdapter.h"
#include "DataReference.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/FindController.cpp b/Source/WebKit2/WebProcess/WebPage/FindController.cpp
index 9b8669d..8e9dba7 100644
--- a/Source/WebKit2/WebProcess/WebPage/FindController.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/FindController.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "FindController.h"
#include "ShareableBitmap.h"
@@ -151,22 +152,30 @@ bool FindController::updateFindIndicator(Frame* selectedFrame, bool isShowingOve
if (!selectedFrame)
return false;
+ IntRect selectionRect = enclosingIntRect(selectedFrame->selection()->bounds());
+
// We want the selection rect in window coordinates.
- IntRect selectionRectInWindowCoordinates = selectedFrame->view()->contentsToWindow(enclosingIntRect(selectedFrame->selection()->bounds()));
+ IntRect selectionRectInWindowCoordinates = selectedFrame->view()->contentsToWindow(selectionRect);
Vector<FloatRect> textRects;
selectedFrame->selection()->getClippedVisibleTextRectangles(textRects);
// Create a backing store and paint the find indicator text into it.
- RefPtr<ShareableBitmap> findIndicatorTextBackingStore = ShareableBitmap::createShareable(selectionRectInWindowCoordinates.size());
+ RefPtr<ShareableBitmap> findIndicatorTextBackingStore = ShareableBitmap::createShareable(selectionRect.size());
+ if (!findIndicatorTextBackingStore)
+ return false;
+
OwnPtr<GraphicsContext> graphicsContext = findIndicatorTextBackingStore->createGraphicsContext();
- graphicsContext->translate(-selectionRectInWindowCoordinates.x(), -selectionRectInWindowCoordinates.y());
+ IntRect paintRect = selectionRect;
+ paintRect.move(selectedFrame->view()->frameRect().x(), selectedFrame->view()->frameRect().y());
+ paintRect.move(-selectedFrame->view()->scrollOffset());
+
+ graphicsContext->translate(-paintRect.x(), -paintRect.y());
selectedFrame->view()->setPaintBehavior(PaintBehaviorSelectionOnly | PaintBehaviorForceBlackText | PaintBehaviorFlattenCompositingLayers);
selectedFrame->document()->updateLayout();
- graphicsContext->clip(selectionRectInWindowCoordinates);
- selectedFrame->view()->paint(graphicsContext.get(), selectionRectInWindowCoordinates);
+ selectedFrame->view()->paint(graphicsContext.get(), paintRect);
selectedFrame->view()->setPaintBehavior(PaintBehaviorNormal);
SharedMemory::Handle handle;
@@ -259,7 +268,6 @@ static Color overlayBackgroundColor()
void FindController::drawRect(PageOverlay*, GraphicsContext& graphicsContext, const IntRect& dirtyRect)
{
Vector<IntRect> rects = rectsForTextMatches();
- ASSERT(!rects.isEmpty());
// Draw the background.
graphicsContext.fillRect(dirtyRect, overlayBackgroundColor(), ColorSpaceSRGB);
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
index b104b29..44b3bd6 100644
--- a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if USE(ACCELERATED_COMPOSITING)
-
+#include "config.h"
#include "LayerBackedDrawingArea.h"
+#if USE(ACCELERATED_COMPOSITING)
+
#include "DrawingAreaMessageKinds.h"
#include "DrawingAreaProxyMessageKinds.h"
#include "MessageID.h"
@@ -121,7 +122,7 @@ void LayerBackedDrawingArea::setSize(const IntSize& viewSize)
if (m_webPage->drawingArea() != this)
return;
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(viewSize));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(viewSize));
}
void LayerBackedDrawingArea::suspendPainting()
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
index ed05cc7..400c8c5 100644
--- a/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
+++ b/Source/WebKit2/WebProcess/WebPage/LayerBackedDrawingArea.h
@@ -35,11 +35,8 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class CALayer;
-#else
-class CALayer;
-#endif
+OBJC_CLASS NSPopUpButtonCell;
+OBJC_CLASS WKView;
typedef struct __WKCARemoteLayerClientRef *WKCARemoteLayerClientRef;
#endif
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp b/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp
new file mode 100644
index 0000000..1112d39
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "LayerTreeHost.h"
+
+#if PLATFORM(MAC)
+#include "LayerTreeHostMac.h"
+#endif
+
+#if !PLATFORM(MAC) && !PLATFORM(WIN)
+#error "This class is not ready for use by other ports yet."
+#endif
+
+using namespace WebCore;
+
+namespace WebKit {
+
+PassRefPtr<LayerTreeHost> LayerTreeHost::create(WebPage* webPage)
+{
+#if PLATFORM(MAC)
+ return LayerTreeHostMac::create(webPage);
+#endif
+
+ return 0;
+}
+
+LayerTreeHost::LayerTreeHost(WebPage* webPage)
+ : m_webPage(webPage)
+{
+}
+
+LayerTreeHost::~LayerTreeHost()
+{
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h b/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h
new file mode 100644
index 0000000..4ca1137
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LayerTreeHost_h
+#define LayerTreeHost_h
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+ class IntRect;
+ class IntSize;
+ class GraphicsLayer;
+}
+
+namespace WebKit {
+
+class LayerTreeContext;
+class WebPage;
+
+class LayerTreeHost : public RefCounted<LayerTreeHost> {
+public:
+ static PassRefPtr<LayerTreeHost> create(WebPage*);
+ virtual ~LayerTreeHost();
+
+ virtual const LayerTreeContext& layerTreeContext() = 0;
+ virtual void scheduleLayerFlush() = 0;
+ virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) = 0;
+ virtual void invalidate() = 0;
+
+ virtual void setNonCompositedContentsNeedDisplay(const WebCore::IntRect&) = 0;
+ virtual void scrollNonCompositedContents(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
+ virtual void sizeDidChange(const WebCore::IntSize& newSize) = 0;
+
+ virtual void didInstallPageOverlay() = 0;
+ virtual void didUninstallPageOverlay() = 0;
+ virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) = 0;
+
+protected:
+ explicit LayerTreeHost(WebPage*);
+
+ WebPage* m_webPage;
+};
+
+} // namespace WebKit
+
+#endif // LayerTreeHost_h
diff --git a/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp b/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp
index 091f460..67c1165 100644
--- a/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "PageOverlay.h"
#include "WebPage.h"
@@ -30,6 +31,7 @@
#include <WebCore/FrameView.h>
#include <WebCore/GraphicsContext.h>
#include <WebCore/Page.h>
+#include <WebCore/ScrollbarTheme.h>
using namespace WebCore;
@@ -55,12 +57,14 @@ IntRect PageOverlay::bounds() const
FrameView* frameView = webPage()->corePage()->mainFrame()->view();
int width = frameView->width();
- if (frameView->verticalScrollbar())
- width -= frameView->verticalScrollbar()->width();
int height = frameView->height();
- if (frameView->horizontalScrollbar())
- height -= frameView->horizontalScrollbar()->height();
-
+
+ if (!ScrollbarTheme::nativeTheme()->usesOverlayScrollbars()) {
+ if (frameView->verticalScrollbar())
+ width -= frameView->verticalScrollbar()->width();
+ if (frameView->horizontalScrollbar())
+ height -= frameView->horizontalScrollbar()->height();
+ }
return IntRect(0, 0, width, height);
}
@@ -71,10 +75,10 @@ void PageOverlay::setPage(WebPage* webPage)
m_client->didMoveToWebPage(this, webPage);
}
-void PageOverlay::setNeedsDisplay(const WebCore::IntRect& dirtyRect)
+void PageOverlay::setNeedsDisplay(const IntRect& dirtyRect)
{
if (m_webPage)
- m_webPage->drawingArea()->setNeedsDisplay(dirtyRect);
+ m_webPage->drawingArea()->setPageOverlayNeedsDisplay(dirtyRect);
}
void PageOverlay::setNeedsDisplay()
diff --git a/Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp b/Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp
index 74aa4b2..f27f14f 100644
--- a/Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(TILED_BACKING_STORE)
-
+#include "config.h"
#include "TiledDrawingArea.h"
+#if ENABLE(TILED_BACKING_STORE)
+
#include "DrawingAreaMessageKinds.h"
#include "DrawingAreaProxyMessageKinds.h"
#include "MessageID.h"
@@ -81,7 +82,7 @@ void TiledDrawingArea::display()
IntRect dirtyRect = m_dirtyRect;
m_dirtyRect = IntRect();
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::Invalidate, m_webPage->pageID(), CoreIPC::In(dirtyRect));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::Invalidate, m_webPage->pageID(), CoreIPC::In(dirtyRect));
m_displayTimer.stop();
}
@@ -106,7 +107,7 @@ void TiledDrawingArea::setSize(const IntSize& viewSize)
scheduleDisplay();
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(viewSize));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::DidSetSize, m_webPage->pageID(), CoreIPC::In(viewSize));
}
void TiledDrawingArea::suspendPainting()
@@ -141,7 +142,7 @@ void TiledDrawingArea::updateTile(int tileID, const IntRect& dirtyRect, float sc
paintIntoUpdateChunk(&updateChunk, scale);
unsigned pendingUpdateCount = m_pendingUpdates.size();
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::TileUpdated, m_webPage->pageID(), CoreIPC::In(tileID, updateChunk, scale, pendingUpdateCount));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::TileUpdated, m_webPage->pageID(), CoreIPC::In(tileID, updateChunk, scale, pendingUpdateCount));
}
void TiledDrawingArea::tileUpdateTimerFired()
@@ -155,7 +156,7 @@ void TiledDrawingArea::tileUpdateTimerFired()
updateTile(update.tileID, update.dirtyRect, update.scale);
if (m_pendingUpdates.isEmpty())
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::AllTileUpdatesProcessed, m_webPage->pageID(), CoreIPC::In());
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::AllTileUpdatesProcessed, m_webPage->pageID(), CoreIPC::In());
else
m_tileUpdateTimer.startOneShot(0.001);
}
@@ -185,7 +186,7 @@ void TiledDrawingArea::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageI
if (it != m_pendingUpdates.end()) {
m_pendingUpdates.remove(it);
if (m_pendingUpdates.isEmpty()) {
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::AllTileUpdatesProcessed, m_webPage->pageID(), CoreIPC::In());
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::AllTileUpdatesProcessed, m_webPage->pageID(), CoreIPC::In());
m_tileUpdateTimer.stop();
}
}
@@ -221,7 +222,7 @@ void TiledDrawingArea::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageI
UpdateChunk updateChunk(IntRect(IntPoint(contentsRect.x() * targetScale, contentsRect.y() * targetScale), targetSize));
paintIntoUpdateChunk(&updateChunk, targetScale);
- WebProcess::shared().connection()->send(DrawingAreaProxyLegacyMessage::SnapshotTaken, m_webPage->pageID(), CoreIPC::In(updateChunk));
+ WebProcess::shared().connection()->deprecatedSend(DrawingAreaProxyLegacyMessage::SnapshotTaken, m_webPage->pageID(), CoreIPC::In(updateChunk));
break;
}
default:
diff --git a/Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp b/Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp
index 21f4fba..7b958bf 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebBackForwardListProxy.h"
#include "DataReference.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp b/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp
index b496128..35058de 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp
@@ -19,6 +19,7 @@
*
*/
+#include "config.h"
#include "WebContextMenu.h"
#include "ContextMenuState.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/WebEditCommand.cpp b/Source/WebKit2/WebProcess/WebPage/WebEditCommand.cpp
index 198cb6d..dce1a68 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebEditCommand.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebEditCommand.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebEditCommand.h"
namespace WebKit {
diff --git a/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp b/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
index 42eacc1..fa4dc2c 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebFrame.h"
#include "DownloadManager.h"
@@ -334,7 +335,7 @@ String WebFrame::url() const
if (!m_coreFrame)
return String();
- return m_coreFrame->loader()->url().string();
+ return m_coreFrame->document()->url().string();
}
String WebFrame::innerText() const
@@ -457,6 +458,81 @@ JSGlobalContextRef WebFrame::jsContextForWorld(InjectedBundleScriptWorld* world)
return toGlobalRef(m_coreFrame->script()->globalObject(world->coreWorld())->globalExec());
}
+IntRect WebFrame::contentBounds() const
+{
+ if (!m_coreFrame)
+ return IntRect();
+
+ FrameView* view = m_coreFrame->view();
+ if (!view)
+ return IntRect();
+
+ return IntRect(0, 0, view->contentsWidth(), view->contentsHeight());
+}
+
+IntRect WebFrame::visibleContentBounds() const
+{
+ if (!m_coreFrame)
+ return IntRect();
+
+ FrameView* view = m_coreFrame->view();
+ if (!view)
+ return IntRect();
+
+ IntRect contentRect = view->visibleContentRect(true);
+ return IntRect(0, 0, contentRect.width(), contentRect.height());
+}
+
+IntRect WebFrame::visibleContentBoundsExcludingScrollbars() const
+{
+ if (!m_coreFrame)
+ return IntRect();
+
+ FrameView* view = m_coreFrame->view();
+ if (!view)
+ return IntRect();
+
+ IntRect contentRect = view->visibleContentRect(false);
+ return IntRect(0, 0, contentRect.width(), contentRect.height());
+}
+
+IntSize WebFrame::scrollOffset() const
+{
+ if (!m_coreFrame)
+ return IntSize();
+
+ FrameView* view = m_coreFrame->view();
+ if (!view)
+ return IntSize();
+
+ return view->scrollOffset();
+}
+
+bool WebFrame::getDocumentBackgroundColor(double* red, double* green, double* blue, double* alpha)
+{
+ if (!m_coreFrame)
+ return false;
+ Document* document = m_coreFrame->document();
+ if (!document)
+ return false;
+
+ Element* rootElementToUse = document->body();
+ if (!rootElementToUse)
+ rootElementToUse = document->documentElement();
+ if (!rootElementToUse)
+ return false;
+
+ RenderObject* renderer = rootElementToUse->renderer();
+ if (!renderer)
+ return false;
+ Color color = renderer->style()->visitedDependentColor(CSSPropertyBackgroundColor);
+ if (!color.isValid())
+ return false;
+
+ color.getRGBA(*red, *green, *blue, *alpha);
+ return true;
+}
+
WebFrame* WebFrame::frameForContext(JSContextRef context)
{
JSObjectRef globalObjectRef = JSContextGetGlobalObject(context);
@@ -543,4 +619,20 @@ String WebFrame::suggestedFilenameForResourceWithURL(const KURL& url) const
return resource->response().suggestedFilename();
}
+String WebFrame::mimeTypeForResourceWithURL(const KURL& url) const
+{
+ if (!m_coreFrame)
+ return String();
+
+ DocumentLoader* loader = m_coreFrame->loader()->documentLoader();
+ if (!loader)
+ return String();
+
+ RefPtr<ArchiveResource> resource = loader->subresource(url);
+ if (resource)
+ return resource->mimeType();
+
+ return page()->cachedResponseMIMETypeForURL(url);
+}
+
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/WebFrame.h b/Source/WebKit2/WebProcess/WebPage/WebFrame.h
index f254e7a..3c63cf3 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebFrame.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebFrame.h
@@ -89,6 +89,11 @@ public:
JSValueRef computedStyleIncludingVisitedInfo(JSObjectRef element);
JSGlobalContextRef jsContext();
JSGlobalContextRef jsContextForWorld(InjectedBundleScriptWorld*);
+ WebCore::IntRect contentBounds() const;
+ WebCore::IntRect visibleContentBounds() const;
+ WebCore::IntRect visibleContentBoundsExcludingScrollbars() const;
+ WebCore::IntSize scrollOffset() const;
+ bool getDocumentBackgroundColor(double* red, double* green, double* blue, double* alpha);
static WebFrame* frameForContext(JSContextRef);
@@ -110,6 +115,7 @@ public:
String provisionalURL() const;
String suggestedFilenameForResourceWithURL(const WebCore::KURL&) const;
+ String mimeTypeForResourceWithURL(const WebCore::KURL&) const;
// Simple listener class used by plug-ins to know when frames finish or fail loading.
class LoadListener {
diff --git a/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp b/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp
index 559b8b6..4b3fdaf 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspector.h"
#if ENABLE(INSPECTOR)
@@ -38,6 +39,11 @@ using namespace WebCore;
namespace WebKit {
+PassRefPtr<WebInspector> WebInspector::create(WebPage* page)
+{
+ return adoptRef(new WebInspector(page));
+}
+
WebInspector::WebInspector(WebPage* page)
: m_page(page)
, m_inspectorPage(0)
@@ -91,9 +97,14 @@ void WebInspector::close()
m_page->corePage()->inspectorController()->close();
}
+void WebInspector::evaluateScriptForTest(long callID, const String& script)
+{
+ m_page->corePage()->inspectorController()->evaluateForTestInFrontend(callID, script);
+}
+
void WebInspector::showConsole()
{
- m_page->corePage()->inspectorController()->showPanel(InspectorController::ConsolePanel);
+ m_page->corePage()->inspectorController()->showConsole();
}
void WebInspector::startJavaScriptDebugging()
@@ -121,7 +132,6 @@ void WebInspector::stopJavaScriptProfiling()
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
m_page->corePage()->inspectorController()->stopUserInitiatedProfiling();
- m_page->corePage()->inspectorController()->showPanel(InspectorController::ProfilesPanel);
#endif
}
diff --git a/Source/WebKit2/WebProcess/WebPage/WebInspector.h b/Source/WebKit2/WebProcess/WebPage/WebInspector.h
index 21a7529..517ae8e 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebInspector.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebInspector.h
@@ -28,6 +28,7 @@
#if ENABLE(INSPECTOR)
+#include "APIObject.h"
#include "Connection.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -37,11 +38,11 @@ namespace WebKit {
class WebPage;
struct WebPageCreationParameters;
-class WebInspector {
- WTF_MAKE_NONCOPYABLE(WebInspector);
-
+class WebInspector : public APIObject {
public:
- explicit WebInspector(WebPage*);
+ static const Type APIType = TypeBundleInspector;
+
+ static PassRefPtr<WebInspector> create(WebPage*);
WebPage* page() const { return m_page; }
WebPage* inspectorPage() const { return m_inspectorPage; }
@@ -49,10 +50,23 @@ public:
// Implemented in generated WebInspectorMessageReceiver.cpp
void didReceiveWebInspectorMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
+ // Called by WebInspector messages
+ void show();
+ void close();
+
+ void evaluateScriptForTest(long callID, const String& script);
+
+ void startPageProfiling();
+ void stopPageProfiling();
+
private:
friend class WebInspectorClient;
friend class WebInspectorFrontendClient;
+ explicit WebInspector(WebPage*);
+
+ virtual Type type() const { return APIType; }
+
// Called from WebInspectorClient
WebPage* createInspectorPage();
@@ -63,10 +77,6 @@ private:
// Implemented in platform WebInspector file
String localizedStringsURL() const;
- // Called by WebInspector messages
- void show();
- void close();
-
void showConsole();
void startJavaScriptDebugging();
@@ -75,9 +85,6 @@ private:
void startJavaScriptProfiling();
void stopJavaScriptProfiling();
- void startPageProfiling();
- void stopPageProfiling();
-
WebPage* m_page;
WebPage* m_inspectorPage;
};
diff --git a/Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.cpp b/Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.cpp
index d42e313..bcf3e80 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebOpenPanelResultListener.h"
namespace WebKit {
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
index af236e9..462d352 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPage.h"
#include "Arguments.h"
@@ -254,6 +255,16 @@ void WebPage::initializeInjectedBundleLoaderClient(WKBundlePageLoaderClient* cli
m_loaderClient.initialize(client);
}
+void WebPage::initializeInjectedBundlePolicyClient(WKBundlePagePolicyClient* client)
+{
+ m_policyClient.initialize(client);
+}
+
+void WebPage::initializeInjectedBundleResourceLoadClient(WKBundlePageResourceLoadClient* client)
+{
+ m_resourceLoadClient.initialize(client);
+}
+
void WebPage::initializeInjectedBundleUIClient(WKBundlePageUIClient* client)
{
m_uiClient.initialize(client);
@@ -313,6 +324,11 @@ void WebPage::changeAcceleratedCompositingMode(WebCore::GraphicsLayer* layer)
if (m_isClosed)
return;
+ // With the new drawing area we don't need to inform the UI process when the accelerated
+ // compositing mode changes.
+ if (m_drawingArea->info().type == DrawingAreaInfo::Impl)
+ return;
+
bool compositing = layer;
// Tell the UI process that accelerated compositing changed. It may respond by changing
@@ -342,6 +358,7 @@ void WebPage::enterAcceleratedCompositingMode(GraphicsLayer* layer)
void WebPage::exitAcceleratedCompositingMode()
{
changeAcceleratedCompositingMode(0);
+ m_drawingArea->setRootCompositingLayer(0);
}
#endif
@@ -463,20 +480,26 @@ void WebPage::reload(bool reloadFromOrigin)
m_mainFrame->coreFrame()->loader()->reload(reloadFromOrigin);
}
-void WebPage::goForward(uint64_t backForwardItemID)
+void WebPage::goForward(uint64_t backForwardItemID, const SandboxExtension::Handle& sandboxExtensionHandle)
{
+ m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
+
HistoryItem* item = WebBackForwardListProxy::itemForID(backForwardItemID);
m_page->goToItem(item, FrameLoadTypeForward);
}
-void WebPage::goBack(uint64_t backForwardItemID)
+void WebPage::goBack(uint64_t backForwardItemID, const SandboxExtension::Handle& sandboxExtensionHandle)
{
+ m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
+
HistoryItem* item = WebBackForwardListProxy::itemForID(backForwardItemID);
m_page->goToItem(item, FrameLoadTypeBack);
}
-void WebPage::goToBackForwardItem(uint64_t backForwardItemID)
+void WebPage::goToBackForwardItem(uint64_t backForwardItemID, const SandboxExtension::Handle& sandboxExtensionHandle)
{
+ m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
+
HistoryItem* item = WebBackForwardListProxy::itemForID(backForwardItemID);
m_page->goToItem(item, FrameLoadTypeIndexedBackForward);
}
@@ -553,6 +576,27 @@ void WebPage::resizeToContentsIfNeeded()
}
#endif
+void WebPage::scrollMainFrameIfNotAtMaxScrollPosition(const IntSize& scrollOffset)
+{
+ Frame* frame = m_page->mainFrame();
+
+ IntPoint scrollPosition = frame->view()->scrollPosition();
+ IntPoint maximumScrollPosition = frame->view()->maximumScrollPosition();
+
+ // If the current scroll position in a direction is the max scroll position
+ // we don't want to scroll at all.
+ IntSize newScrollOffset;
+ if (scrollPosition.x() < maximumScrollPosition.x())
+ newScrollOffset.setWidth(scrollOffset.width());
+ if (scrollPosition.y() < maximumScrollPosition.y())
+ newScrollOffset.setHeight(scrollOffset.height());
+
+ if (newScrollOffset.isZero())
+ return;
+
+ frame->view()->setScrollPosition(frame->view()->scrollPosition() + newScrollOffset);
+}
+
void WebPage::drawRect(GraphicsContext& graphicsContext, const IntRect& rect)
{
graphicsContext.save();
@@ -560,12 +604,19 @@ void WebPage::drawRect(GraphicsContext& graphicsContext, const IntRect& rect)
m_mainFrame->coreFrame()->view()->paint(&graphicsContext, rect);
graphicsContext.restore();
- if (m_pageOverlay) {
- graphicsContext.save();
- graphicsContext.clip(rect);
- m_pageOverlay->drawRect(graphicsContext, rect);
- graphicsContext.restore();
- }
+ // FIXME: Remove this code once we're using the new drawing area on mac and windows.
+ if (m_pageOverlay && m_drawingArea->info().type != DrawingAreaInfo::Impl)
+ drawPageOverlay(graphicsContext, rect);
+}
+
+void WebPage::drawPageOverlay(GraphicsContext& graphicsContext, const IntRect& rect)
+{
+ ASSERT(m_pageOverlay);
+
+ graphicsContext.save();
+ graphicsContext.clip(rect);
+ m_pageOverlay->drawRect(graphicsContext, rect);
+ graphicsContext.restore();
}
double WebPage::textZoomFactor() const
@@ -614,6 +665,8 @@ void WebPage::scaleWebView(double scale, const IntPoint& origin)
if (!frame)
return;
frame->scalePage(scale, origin);
+
+ send(Messages::WebPageProxy::ViewScaleFactorDidChange(scale));
}
double WebPage::viewScaleFactor() const
@@ -660,6 +713,9 @@ void WebPage::installPageOverlay(PassRefPtr<PageOverlay> pageOverlay)
m_pageOverlay = pageOverlay;
m_pageOverlay->setPage(this);
+
+ m_drawingArea->didInstallPageOverlay();
+
m_pageOverlay->setNeedsDisplay();
}
@@ -670,7 +726,8 @@ void WebPage::uninstallPageOverlay(PageOverlay* pageOverlay)
m_pageOverlay->setPage(0);
m_pageOverlay = nullptr;
- m_drawingArea->setNeedsDisplay(IntRect(IntPoint(0, 0), m_viewSize));
+
+ m_drawingArea->didUninstallPageOverlay();
}
PassRefPtr<WebImage> WebPage::snapshotInViewCoordinates(const IntRect& rect, ImageOptions options)
@@ -697,7 +754,7 @@ PassRefPtr<WebImage> WebPage::snapshotInViewCoordinates(const IntRect& rect, Ima
return snapshot.release();
}
-PassRefPtr<WebImage> WebPage::snapshotInDocumentCoordinates(const IntRect& rect, ImageOptions options)
+PassRefPtr<WebImage> WebPage::scaledSnapshotInDocumentCoordinates(const IntRect& rect, double scaleFactor, ImageOptions options)
{
FrameView* frameView = m_mainFrame->coreFrame()->view();
if (!frameView)
@@ -708,10 +765,18 @@ PassRefPtr<WebImage> WebPage::snapshotInDocumentCoordinates(const IntRect& rect,
PaintBehavior oldBehavior = frameView->paintBehavior();
frameView->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers);
- RefPtr<WebImage> snapshot = WebImage::create(rect.size(), options);
- OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->bitmap()->createGraphicsContext();
+ bool scale = scaleFactor != 1;
+ IntSize size = rect.size();
+ if (scale)
+ size = IntSize(ceil(rect.width() * scaleFactor), ceil(rect.height() * scaleFactor));
+ RefPtr<WebImage> snapshot = WebImage::create(size, options);
+ OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->bitmap()->createGraphicsContext();
graphicsContext->save();
+
+ if (scale)
+ graphicsContext->scale(FloatSize(scaleFactor, scaleFactor));
+
graphicsContext->translate(-rect.x(), -rect.y());
frameView->paintContents(graphicsContext.get(), rect);
graphicsContext->restore();
@@ -721,6 +786,11 @@ PassRefPtr<WebImage> WebPage::snapshotInDocumentCoordinates(const IntRect& rect,
return snapshot.release();
}
+PassRefPtr<WebImage> WebPage::snapshotInDocumentCoordinates(const IntRect& rect, ImageOptions options)
+{
+ return scaledSnapshotInDocumentCoordinates(rect, 1, options);
+}
+
void WebPage::pageDidScroll()
{
// Hide the find indicator.
@@ -909,6 +979,26 @@ void WebPage::keyEvent(const WebKeyboardEvent& keyboardEvent)
send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(keyboardEvent.type()), handled));
}
+#if ENABLE(GESTURE_EVENTS)
+static bool handleGestureEvent(const WebGestureEvent& gestureEvent, Page* page)
+{
+ Frame* frame = page->mainFrame();
+ if (!frame->view())
+ return false;
+
+ PlatformGestureEvent platformGestureEvent = platform(gestureEvent);
+ return frame->eventHandler()->handleGestureEvent(platformGestureEvent);
+}
+
+void WebPage::gestureEvent(const WebGestureEvent& gestureEvent)
+{
+ CurrentEvent currentEvent(gestureEvent);
+
+ bool handled = handleGestureEvent(gestureEvent, m_page.get());
+ send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(gestureEvent.type()), handled));
+}
+#endif
+
void WebPage::validateMenuItem(const String& commandName)
{
bool isEnabled = false;
@@ -952,10 +1042,10 @@ uint64_t WebPage::restoreSession(const SessionState& sessionState)
return currentItemID;
}
-void WebPage::restoreSessionAndNavigateToCurrentItem(const SessionState& sessionState)
+void WebPage::restoreSessionAndNavigateToCurrentItem(const SessionState& sessionState, const SandboxExtension::Handle& sandboxExtensionHandle)
{
if (uint64_t currentItemID = restoreSession(sessionState))
- goToBackForwardItem(currentItemID);
+ goToBackForwardItem(currentItemID, sandboxExtensionHandle);
}
#if ENABLE(TOUCH_EVENTS)
@@ -1022,6 +1112,30 @@ void WebPage::setDrawsTransparentBackground(bool drawsTransparentBackground)
m_drawingArea->setNeedsDisplay(IntRect(IntPoint(0, 0), m_viewSize));
}
+void WebPage::viewWillStartLiveResize()
+{
+ if (!m_page)
+ return;
+
+ // FIXME: This should propagate to all ScrollableAreas.
+ if (Frame* frame = m_page->focusController()->focusedOrMainFrame()) {
+ if (FrameView* view = frame->view())
+ view->willStartLiveResize();
+ }
+}
+
+void WebPage::viewWillEndLiveResize()
+{
+ if (!m_page)
+ return;
+
+ // FIXME: This should propagate to all ScrollableAreas.
+ if (Frame* frame = m_page->focusController()->focusedOrMainFrame()) {
+ if (FrameView* view = frame->view())
+ view->willEndLiveResize();
+ }
+}
+
void WebPage::setFocused(bool isFocused)
{
m_page->focusController()->setFocused(isFocused);
@@ -1161,7 +1275,7 @@ void WebPage::getResourceDataFromFrame(uint64_t frameID, const String& resourceU
if (WebFrame* frame = WebProcess::shared().webFrame(frameID)) {
if (DocumentLoader* loader = frame->coreFrame()->loader()->documentLoader()) {
if (RefPtr<ArchiveResource> subresource = loader->subresource(KURL(KURL(), resourceURL))) {
- if (buffer = subresource->data())
+ if ((buffer = subresource->data()))
dataReference = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size());
}
}
@@ -1187,6 +1301,12 @@ void WebPage::getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
send(Messages::WebPageProxy::DataCallback(dataReference, callbackID));
}
+void WebPage::forceRepaint(uint64_t callbackID)
+{
+ m_drawingArea->forceRepaint();
+ send(Messages::WebPageProxy::VoidCallback(callbackID));
+}
+
void WebPage::preferencesDidChange(const WebPreferencesStore& store)
{
WebPreferencesStore::removeTestRunnerOverrides();
@@ -1224,12 +1344,15 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
settings->setJavaScriptCanOpenWindowsAutomatically(store.getBoolValueForKey(WebPreferencesKey::javaScriptCanOpenWindowsAutomaticallyKey()));
settings->setForceFTPDirectoryListings(store.getBoolValueForKey(WebPreferencesKey::forceFTPDirectoryListingsKey()));
settings->setDNSPrefetchingEnabled(store.getBoolValueForKey(WebPreferencesKey::dnsPrefetchingEnabledKey()));
+#if ENABLE(WEB_ARCHIVE)
settings->setWebArchiveDebugModeEnabled(store.getBoolValueForKey(WebPreferencesKey::webArchiveDebugModeEnabledKey()));
+#endif
settings->setLocalFileContentSniffingEnabled(store.getBoolValueForKey(WebPreferencesKey::localFileContentSniffingEnabledKey()));
settings->setUsesPageCache(store.getBoolValueForKey(WebPreferencesKey::usesPageCacheKey()));
settings->setAuthorAndUserStylesEnabled(store.getBoolValueForKey(WebPreferencesKey::authorAndUserStylesEnabledKey()));
settings->setPaginateDuringLayoutEnabled(store.getBoolValueForKey(WebPreferencesKey::paginateDuringLayoutEnabledKey()));
settings->setDOMPasteAllowed(store.getBoolValueForKey(WebPreferencesKey::domPasteAllowedKey()));
+ settings->setJavaScriptCanAccessClipboard(store.getBoolValueForKey(WebPreferencesKey::javaScriptCanAccessClipboardKey()));
settings->setShouldPrintBackgrounds(store.getBoolValueForKey(WebPreferencesKey::shouldPrintBackgroundsKey()));
settings->setMinimumFontSize(store.getUInt32ValueForKey(WebPreferencesKey::minimumFontSizeKey()));
@@ -1245,6 +1368,7 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
#endif
settings->setShowDebugBorders(store.getBoolValueForKey(WebPreferencesKey::compositingBordersVisibleKey()));
settings->setShowRepaintCounter(store.getBoolValueForKey(WebPreferencesKey::compositingRepaintCountersVisibleKey()));
+ settings->setWebGLEnabled(store.getBoolValueForKey(WebPreferencesKey::webGLEnabledKey()));
#if ENABLE(DATABASE)
AbstractDatabase::setIsAvailable(store.getBoolValueForKey(WebPreferencesKey::databasesEnabledKey()));
@@ -1259,7 +1383,7 @@ WebInspector* WebPage::inspector()
if (m_isClosed)
return 0;
if (!m_inspector)
- m_inspector = adoptPtr(new WebInspector(this));
+ m_inspector = WebInspector::create(this);
return m_inspector.get();
}
#endif
@@ -1296,6 +1420,37 @@ bool WebPage::handleEditingKeyboardEvent(KeyboardEvent* evt)
}
#endif
+#if PLATFORM(WIN)
+void WebPage::performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WebCore::DragDataMap& dataMap, uint32_t flags)
+{
+ if (!m_page) {
+ send(Messages::WebPageProxy::DidPerformDragControllerAction(DragOperationNone));
+ return;
+ }
+
+ DragData dragData(dataMap, clientPosition, globalPosition, static_cast<DragOperation>(draggingSourceOperationMask), static_cast<DragApplicationFlags>(flags));
+ switch (action) {
+ case DragControllerActionEntered:
+ send(Messages::WebPageProxy::DidPerformDragControllerAction(m_page->dragController()->dragEntered(&dragData)));
+ break;
+
+ case DragControllerActionUpdated:
+ send(Messages::WebPageProxy::DidPerformDragControllerAction(m_page->dragController()->dragUpdated(&dragData)));
+ break;
+
+ case DragControllerActionExited:
+ m_page->dragController()->dragExited(&dragData);
+ break;
+
+ case DragControllerActionPerformDrag:
+ m_page->dragController()->performDrag(&dragData);
+ break;
+
+ default:
+ ASSERT_NOT_REACHED();
+ }
+}
+#else
void WebPage::performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const String& dragStorageName, uint32_t flags)
{
if (!m_page) {
@@ -1325,6 +1480,7 @@ void WebPage::performDragControllerAction(uint64_t action, WebCore::IntPoint cli
ASSERT_NOT_REACHED();
}
}
+#endif
void WebPage::dragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation)
{
@@ -1433,6 +1589,13 @@ void WebPage::didCancelForOpenPanel()
m_activeOpenPanelResultListener = 0;
}
+#if ENABLE(WEB_PROCESS_SANDBOX)
+void WebPage::extendSandboxForFileFromOpenPanel(const SandboxExtension::Handle& handle)
+{
+ SandboxExtension::create(handle)->consumePermanently();
+}
+#endif
+
void WebPage::didReceiveGeolocationPermissionDecision(uint64_t geolocationID, bool allowed)
{
m_geolocationPermissionRequestManager.didReceiveGeolocationPermissionDecision(geolocationID, allowed);
@@ -1563,7 +1726,7 @@ void WebPage::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::Messag
return;
}
-#ifdef __APPLE__
+#if PLATFORM(MAC) || PLATFORM(WIN)
if (messageID.is<CoreIPC::MessageClassDrawingArea>()) {
if (m_drawingArea)
m_drawingArea->didReceiveDrawingAreaMessage(connection, messageID, arguments);
@@ -1650,11 +1813,39 @@ void WebPage::SandboxExtensionTracker::beginLoad(WebFrame* frame, const SandboxE
m_pendingProvisionalSandboxExtension = SandboxExtension::create(handle);
}
+static bool shouldReuseCommittedSandboxExtension(WebFrame* frame)
+{
+ ASSERT(frame->isMainFrame());
+
+ FrameLoader* frameLoader = frame->coreFrame()->loader();
+ FrameLoadType frameLoadType = frameLoader->loadType();
+
+ // If the page is being reloaded, it should reuse whatever extension is committed.
+ if (frameLoadType == FrameLoadTypeReload || frameLoadType == FrameLoadTypeReloadFromOrigin)
+ return true;
+
+ DocumentLoader* documentLoader = frameLoader->documentLoader();
+ DocumentLoader* provisionalDocumentLoader = frameLoader->provisionalDocumentLoader();
+ if (!documentLoader || !provisionalDocumentLoader)
+ return false;
+
+ if (documentLoader->url().isLocalFile() && provisionalDocumentLoader->url().isLocalFile()
+ && provisionalDocumentLoader->triggeringAction().type() == NavigationTypeLinkClicked)
+ return true;
+
+ return false;
+}
+
void WebPage::SandboxExtensionTracker::didStartProvisionalLoad(WebFrame* frame)
{
if (!frame->isMainFrame())
return;
+ if (shouldReuseCommittedSandboxExtension(frame)) {
+ m_pendingProvisionalSandboxExtension = m_committedSandboxExtension.release();
+ ASSERT(!m_committedSandboxExtension);
+ }
+
ASSERT(!m_provisionalSandboxExtension);
m_provisionalSandboxExtension = m_pendingProvisionalSandboxExtension.release();
@@ -1749,6 +1940,9 @@ void WebPage::beginPrinting(uint64_t frameID, const PrintInfo& printInfo)
m_printContext = adoptPtr(new PrintContext(coreFrame));
m_printContext->begin(printInfo.availablePaperWidth, printInfo.availablePaperHeight);
+
+ float fullPageHeight;
+ m_printContext->computePageRects(FloatRect(0, 0, printInfo.availablePaperWidth, printInfo.availablePaperHeight), 0, 0, printInfo.pageSetupScaleFactor, fullPageHeight, true);
}
void WebPage::endPrinting()
@@ -1756,57 +1950,90 @@ void WebPage::endPrinting()
m_printContext = nullptr;
}
-void WebPage::computePagesForPrinting(uint64_t frameID, const PrintInfo& printInfo, Vector<IntRect>& resultPageRects, double& resultTotalScaleFactorForPrinting)
+void WebPage::computePagesForPrinting(uint64_t frameID, const PrintInfo& printInfo, uint64_t callbackID)
{
- beginPrinting(frameID, printInfo);
+ Vector<IntRect> resultPageRects;
+ double resultTotalScaleFactorForPrinting = 1;
- WebFrame* frame = WebProcess::shared().webFrame(frameID);
- if (!frame)
- return;
-
- float fullPageHeight;
- m_printContext->computePageRects(FloatRect(0, 0, printInfo.availablePaperWidth, printInfo.availablePaperHeight), 0, 0, printInfo.pageSetupScaleFactor, fullPageHeight, true);
+ beginPrinting(frameID, printInfo);
- resultTotalScaleFactorForPrinting = m_printContext->computeAutomaticScaleFactor(printInfo.availablePaperWidth) * printInfo.pageSetupScaleFactor;
- resultPageRects = m_printContext->pageRects();
+ if (m_printContext) {
+ resultPageRects = m_printContext->pageRects();
+ resultTotalScaleFactorForPrinting = m_printContext->computeAutomaticScaleFactor(FloatSize(printInfo.availablePaperWidth, printInfo.availablePaperHeight)) * printInfo.pageSetupScaleFactor;
+ }
// If we're asked to print, we should actually print at least a blank page.
if (resultPageRects.isEmpty())
resultPageRects.append(IntRect(0, 0, 1, 1));
+
+ send(Messages::WebPageProxy::ComputedPagesCallback(resultPageRects, resultTotalScaleFactorForPrinting, callbackID));
}
#if PLATFORM(MAC)
// FIXME: Find a better place for Mac specific code.
-void WebPage::drawRectToPDF(uint64_t frameID, const WebCore::IntRect& rect, Vector<uint8_t>& pdfData)
+void WebPage::drawRectToPDF(uint64_t frameID, const WebCore::IntRect& rect, uint64_t callbackID)
{
WebFrame* frame = WebProcess::shared().webFrame(frameID);
- if (!frame)
- return;
+ Frame* coreFrame = frame ? frame->coreFrame() : 0;
- Frame* coreFrame = frame->coreFrame();
- if (!coreFrame)
- return;
+ RetainPtr<CFMutableDataRef> pdfPageData(AdoptCF, CFDataCreateMutable(0, 0));
- ASSERT(coreFrame->document()->printing());
+ if (coreFrame) {
+ ASSERT(coreFrame->document()->printing());
+
+ // FIXME: Use CGDataConsumerCreate with callbacks to avoid copying the data.
+ RetainPtr<CGDataConsumerRef> pdfDataConsumer(AdoptCF, CGDataConsumerCreateWithCFData(pdfPageData.get()));
+
+ CGRect mediaBox = CGRectMake(0, 0, rect.width(), rect.height());
+ RetainPtr<CGContextRef> context(AdoptCF, CGPDFContextCreate(pdfDataConsumer.get(), &mediaBox, 0));
+ RetainPtr<CFDictionaryRef> pageInfo(AdoptCF, CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ CGPDFContextBeginPage(context.get(), pageInfo.get());
+
+ GraphicsContext ctx(context.get());
+ ctx.scale(FloatSize(1, -1));
+ ctx.translate(0, -rect.height());
+ m_printContext->spoolRect(ctx, rect);
+
+ CGPDFContextEndPage(context.get());
+ CGPDFContextClose(context.get());
+ }
+
+ send(Messages::WebPageProxy::DataCallback(CoreIPC::DataReference(CFDataGetBytePtr(pdfPageData.get()), CFDataGetLength(pdfPageData.get())), callbackID));
+}
+
+void WebPage::drawPagesToPDF(uint64_t frameID, uint32_t first, uint32_t count, uint64_t callbackID)
+{
+ WebFrame* frame = WebProcess::shared().webFrame(frameID);
+ Frame* coreFrame = frame ? frame->coreFrame() : 0;
RetainPtr<CFMutableDataRef> pdfPageData(AdoptCF, CFDataCreateMutable(0, 0));
- // FIXME: Use CGDataConsumerCreate with callbacks to avoid copying the data.
- RetainPtr<CGDataConsumerRef> pdfDataConsumer(AdoptCF, CGDataConsumerCreateWithCFData(pdfPageData.get()));
+ if (coreFrame) {
+ ASSERT(coreFrame->document()->printing());
- CGRect mediaBox = CGRectMake(0, 0, frame->size().width(), frame->size().height());
- RetainPtr<CGContextRef> context(AdoptCF, CGPDFContextCreate(pdfDataConsumer.get(), &mediaBox, 0));
- CFDictionaryRef pageInfo = CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
- CGPDFContextBeginPage(context.get(), pageInfo);
+ // FIXME: Use CGDataConsumerCreate with callbacks to avoid copying the data.
+ RetainPtr<CGDataConsumerRef> pdfDataConsumer(AdoptCF, CGDataConsumerCreateWithCFData(pdfPageData.get()));
- GraphicsContext ctx(context.get());
- m_printContext->spoolRect(ctx, rect);
+ CGRect mediaBox = m_printContext->pageCount() ? m_printContext->pageRect(0) : CGRectMake(0, 0, 1, 1);
+ RetainPtr<CGContextRef> context(AdoptCF, CGPDFContextCreate(pdfDataConsumer.get(), &mediaBox, 0));
+ for (uint32_t page = first; page < first + count; ++page) {
+ if (page >= m_printContext->pageCount())
+ break;
- CGPDFContextEndPage(context.get());
- CGPDFContextClose(context.get());
+ RetainPtr<CFDictionaryRef> pageInfo(AdoptCF, CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ CGPDFContextBeginPage(context.get(), pageInfo.get());
+
+ GraphicsContext ctx(context.get());
+ ctx.scale(FloatSize(1, -1));
+ ctx.translate(0, -m_printContext->pageRect(page).height());
+ m_printContext->spoolPage(ctx, page, m_printContext->pageRect(page).width());
+
+ CGPDFContextEndPage(context.get());
+ }
+ CGPDFContextClose(context.get());
+ }
- pdfData.resize(CFDataGetLength(pdfPageData.get()));
- CFDataGetBytes(pdfPageData.get(), CFRangeMake(0, pdfData.size()), pdfData.data());
+ send(Messages::WebPageProxy::DataCallback(CoreIPC::DataReference(CFDataGetBytePtr(pdfPageData.get()), CFDataGetLength(pdfPageData.get())), callbackID));
}
#endif
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h
index d29400f..89087b0 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h
@@ -35,11 +35,14 @@
#include "InjectedBundlePageEditorClient.h"
#include "InjectedBundlePageFormClient.h"
#include "InjectedBundlePageLoaderClient.h"
+#include "InjectedBundlePagePolicyClient.h"
+#include "InjectedBundlePageResourceLoadClient.h"
#include "InjectedBundlePageUIClient.h"
#include "MessageSender.h"
#include "Plugin.h"
#include "SandboxExtension.h"
#include "WebEditCommand.h"
+#include <WebCore/DragData.h>
#include <WebCore/Editor.h>
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/IntRect.h>
@@ -55,11 +58,7 @@
#if PLATFORM(MAC)
#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class AccessibilityWebPageObject;
-#else
-class AccessibilityWebPageObject;
-#endif
+OBJC_CLASS AccessibilityWebPageObject;
#endif
namespace CoreIPC {
@@ -100,6 +99,10 @@ struct PrintInfo;
struct WebPageCreationParameters;
struct WebPreferencesStore;
+#if ENABLE(GESTURE_EVENTS)
+class WebGestureEvent;
+#endif
+
#if ENABLE(TOUCH_EVENTS)
class WebTouchEvent;
#endif
@@ -122,12 +125,15 @@ public:
void setSize(const WebCore::IntSize&);
const WebCore::IntSize& size() const { return m_viewSize; }
-
+ WebCore::IntRect bounds() const { return WebCore::IntRect(WebCore::IntPoint(), size()); }
+
InjectedBundleBackForwardList* backForwardList();
DrawingArea* drawingArea() const { return m_drawingArea.get(); }
WebPageGroupProxy* pageGroup() const { return m_pageGroup.get(); }
+ void scrollMainFrameIfNotAtMaxScrollPosition(const WebCore::IntSize& scrollOffset);
+
#if ENABLE(INSPECTOR)
WebInspector* inspector();
#endif
@@ -135,6 +141,7 @@ public:
// -- Called by the DrawingArea.
// FIXME: We could genericize these into a DrawingArea client interface. Would that be beneficial?
void drawRect(WebCore::GraphicsContext&, const WebCore::IntRect&);
+ void drawPageOverlay(WebCore::GraphicsContext&, const WebCore::IntRect&);
void layoutIfNeeded();
// -- Called from WebCore clients.
@@ -165,12 +172,16 @@ public:
void initializeInjectedBundleEditorClient(WKBundlePageEditorClient*);
void initializeInjectedBundleFormClient(WKBundlePageFormClient*);
void initializeInjectedBundleLoaderClient(WKBundlePageLoaderClient*);
+ void initializeInjectedBundlePolicyClient(WKBundlePagePolicyClient*);
+ void initializeInjectedBundleResourceLoadClient(WKBundlePageResourceLoadClient*);
void initializeInjectedBundleUIClient(WKBundlePageUIClient*);
InjectedBundlePageContextMenuClient& injectedBundleContextMenuClient() { return m_contextMenuClient; }
InjectedBundlePageEditorClient& injectedBundleEditorClient() { return m_editorClient; }
InjectedBundlePageFormClient& injectedBundleFormClient() { return m_formClient; }
InjectedBundlePageLoaderClient& injectedBundleLoaderClient() { return m_loaderClient; }
+ InjectedBundlePagePolicyClient& injectedBundlePolicyClient() { return m_policyClient; }
+ InjectedBundlePageResourceLoadClient& injectedBundleResourceLoadClient() { return m_resourceLoadClient; }
InjectedBundlePageUIClient& injectedBundleUIClient() { return m_uiClient; }
bool findStringFromInjectedBundle(const String&, FindOptions);
@@ -224,9 +235,11 @@ public:
void installPageOverlay(PassRefPtr<PageOverlay>);
void uninstallPageOverlay(PageOverlay*);
+ bool hasPageOverlay() const { return m_pageOverlay; }
PassRefPtr<WebImage> snapshotInViewCoordinates(const WebCore::IntRect&, ImageOptions);
PassRefPtr<WebImage> snapshotInDocumentCoordinates(const WebCore::IntRect&, ImageOptions);
+ PassRefPtr<WebImage> scaledSnapshotInDocumentCoordinates(const WebCore::IntRect&, double scaleFactor, ImageOptions);
static const WebEvent* currentEvent();
@@ -247,6 +260,7 @@ public:
WebContextMenu* contextMenu();
bool hasLocalDataForURL(const WebCore::KURL&);
+ String cachedResponseMIMETypeForURL(const WebCore::KURL&);
static bool canHandleRequest(const WebCore::ResourceRequest&);
@@ -271,7 +285,7 @@ public:
static void getLocationAndLengthFromRange(WebCore::Range*, uint64_t& location, uint64_t& length);
#if PLATFORM(MAC)
- void sendAccessibilityPresenterToken(const CoreIPC::DataReference&);
+ void registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elemenToken, const CoreIPC::DataReference& windowToken);
AccessibilityWebPageObject* accessibilityRemoteObject();
WebCore::IntPoint accessibilityPosition() const { return m_accessibilityPosition; }
@@ -300,14 +314,19 @@ public:
#endif
void replaceSelectionWithText(WebCore::Frame*, const String&);
+#if PLATFORM(WIN)
+ void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WebCore::DragDataMap&, uint32_t flags);
+#else
void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WTF::String& dragStorageName, uint32_t flags);
+#endif
void dragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation);
void beginPrinting(uint64_t frameID, const PrintInfo&);
void endPrinting();
- void computePagesForPrinting(uint64_t frameID, const PrintInfo&, Vector<WebCore::IntRect>& resultPageRects, double& resultTotalScaleFactorForPrinting);
+ void computePagesForPrinting(uint64_t frameID, const PrintInfo&, uint64_t callbackID);
#if PLATFORM(MAC)
- void drawRectToPDF(uint64_t frameID, const WebCore::IntRect&, Vector<uint8_t>& pdfData);
+ void drawRectToPDF(uint64_t frameID, const WebCore::IntRect&, uint64_t callbackID);
+ void drawPagesToPDF(uint64_t frameID, uint32_t first, uint32_t count, uint64_t callbackID);
#endif
bool mainFrameHasCustomRepresentation() const;
@@ -336,37 +355,44 @@ private:
// Actions
void tryClose();
- void loadURL(const String&, const SandboxExtension::Handle& sandboxExtensionHandle);
- void loadURLRequest(const WebCore::ResourceRequest&, const SandboxExtension::Handle& sandboxExtensionHandle);
+ void loadURL(const String&, const SandboxExtension::Handle&);
+ void loadURLRequest(const WebCore::ResourceRequest&, const SandboxExtension::Handle&);
void loadHTMLString(const String& htmlString, const String& baseURL);
void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL);
void loadPlainTextString(const String&);
void reload(bool reloadFromOrigin);
- void goForward(uint64_t);
- void goBack(uint64_t);
- void goToBackForwardItem(uint64_t);
+ void goForward(uint64_t, const SandboxExtension::Handle&);
+ void goBack(uint64_t, const SandboxExtension::Handle&);
+ void goToBackForwardItem(uint64_t, const SandboxExtension::Handle&);
void setActive(bool);
void setFocused(bool);
void setInitialFocus(bool);
void setWindowResizerSize(const WebCore::IntSize&);
void setIsInWindow(bool);
+ void validateMenuItem(const String&);
+ void executeEditCommand(const String&);
+
void mouseEvent(const WebMouseEvent&);
void wheelEvent(const WebWheelEvent&);
void keyEvent(const WebKeyboardEvent&);
- void validateMenuItem(const String&);
- void executeEditCommand(const String&);
+#if ENABLE(GESTURE_EVENTS)
+ void gestureEvent(const WebGestureEvent&);
+#endif
#if ENABLE(TOUCH_EVENTS)
void touchEvent(const WebTouchEvent&);
#endif
uint64_t restoreSession(const SessionState&);
- void restoreSessionAndNavigateToCurrentItem(const SessionState&);
+ void restoreSessionAndNavigateToCurrentItem(const SessionState&, const SandboxExtension::Handle&);
void didRemoveBackForwardItem(uint64_t);
void setDrawsBackground(bool);
void setDrawsTransparentBackground(bool);
+ void viewWillStartLiveResize();
+ void viewWillEndLiveResize();
+
void getContentsAsString(uint64_t callbackID);
void getMainResourceDataOfFrame(uint64_t frameID, uint64_t callbackID);
void getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID);
@@ -375,6 +401,7 @@ private:
void getSourceForFrame(uint64_t frameID, uint64_t callbackID);
void getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID);
void runJavaScriptInMainFrame(const String&, uint64_t callbackID);
+ void forceRepaint(uint64_t callbackID);
void preferencesDidChange(const WebPreferencesStore&);
void platformPreferencesDidChange(const WebPreferencesStore&);
@@ -406,6 +433,9 @@ private:
void didChooseFilesForOpenPanel(const Vector<String>&);
void didCancelForOpenPanel();
+#if ENABLE(WEB_PROCESS_SANDBOX)
+ void extendSandboxForFileFromOpenPanel(const SandboxExtension::Handle&);
+#endif
void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, bool allowed);
@@ -477,6 +507,8 @@ private:
InjectedBundlePageEditorClient m_editorClient;
InjectedBundlePageFormClient m_formClient;
InjectedBundlePageLoaderClient m_loaderClient;
+ InjectedBundlePagePolicyClient m_policyClient;
+ InjectedBundlePageResourceLoadClient m_resourceLoadClient;
InjectedBundlePageUIClient m_uiClient;
#if ENABLE(TILED_BACKING_STORE)
@@ -487,7 +519,7 @@ private:
RefPtr<PageOverlay> m_pageOverlay;
#if ENABLE(INSPECTOR)
- OwnPtr<WebInspector> m_inspector;
+ RefPtr<WebInspector> m_inspector;
#endif
RefPtr<WebPopupMenu> m_activePopupMenu;
RefPtr<WebContextMenu> m_contextMenu;
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
index e001864..e47a013 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2010 Apple Inc. All rights reserved.
+# Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -29,16 +29,22 @@ messages -> WebPage {
SetDrawsBackground(bool drawsBackground)
SetDrawsTransparentBackground(bool drawsTransparentBackground)
+ ViewWillStartLiveResize()
+ ViewWillEndLiveResize()
+
KeyEvent(WebKit::WebKeyboardEvent event)
MouseEvent(WebKit::WebMouseEvent event)
WheelEvent(WebKit::WebWheelEvent event)
+#if ENABLE(GESTURE_EVENTS)
+ GestureEvent(WebKit::WebGestureEvent event)
+#endif
#if ENABLE(TOUCH_EVENTS)
TouchEvent(WebKit::WebTouchEvent event)
#endif
- GoBack(uint64_t backForwardItemID)
- GoForward(uint64_t backForwardItemID)
- GoToBackForwardItem(uint64_t backForwardItemID)
+ GoBack(uint64_t backForwardItemID, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
+ GoForward(uint64_t backForwardItemID, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
+ GoToBackForwardItem(uint64_t backForwardItemID, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
LoadHTMLString(WTF::String htmlString, WTF::String baseURL)
LoadAlternateHTMLString(WTF::String htmlString, WTF::String baseURL, WTF::String unreachableURL);
LoadPlainTextString(WTF::String string)
@@ -49,7 +55,7 @@ messages -> WebPage {
StopLoadingFrame(uint64_t frameID)
- RestoreSessionAndNavigateToCurrentItem(WebKit::SessionState state)
+ RestoreSessionAndNavigateToCurrentItem(WebKit::SessionState state, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
DidRemoveBackForwardItem(uint64_t backForwardItemID)
@@ -65,6 +71,9 @@ messages -> WebPage {
GetWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID)
RunJavaScriptInMainFrame(WTF::String script, uint64_t callbackID)
+ # FIXME: This should be a drawing area message.
+ ForceRepaint(uint64_t callbackID)
+
PreferencesDidChange(WebKit::WebPreferencesStore store)
SetUserAgent(WTF::String userAgent)
@@ -100,7 +109,12 @@ messages -> WebPage {
CountStringMatches(WTF::String string, uint32_t findOptions, unsigned maxMatchCount)
# Drag and drop.
+#if PLATFORM(WIN)
+ PerformDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, HashMap<UINT,Vector<String>> dataMap, uint32_t flags)
+#endif
+#if !PLATFORM(WIN)
PerformDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, WTF::String dragStorageName, uint32_t flags)
+#endif
DragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation)
# Popup menu.
@@ -113,6 +127,9 @@ messages -> WebPage {
# Open panel.
DidChooseFilesForOpenPanel(Vector<WTF::String> fileURLs)
DidCancelForOpenPanel()
+#if ENABLE(WEB_PROCESS_SANDBOX)
+ ExtendSandboxForFileFromOpenPanel(WebKit::SandboxExtension::Handle sandboxExtensionHandle)
+#endif
# Spelling and grammar.
AdvanceToNextMisspelling(bool startBeforeSelection)
@@ -133,11 +150,12 @@ messages -> WebPage {
SetWindowResizerSize(WebCore::IntSize intersectsView)
# Printing.
- BeginPrinting(uint64_t frameID, WebKit::PrintInfo printInfo);
+ BeginPrinting(uint64_t frameID, WebKit::PrintInfo printInfo)
EndPrinting();
- ComputePagesForPrinting(uint64_t frameID, WebKit::PrintInfo printInfo) -> (Vector<WebCore::IntRect> pageRects, double totalScaleFactorForPrinting)
+ ComputePagesForPrinting(uint64_t frameID, WebKit::PrintInfo printInfo, uint64_t callbackID)
#if PLATFORM(MAC)
- DrawRectToPDF(uint64_t frameID, WebCore::IntRect rect) -> (Vector<uint8_t> pdfData)
+ DrawRectToPDF(uint64_t frameID, WebCore::IntRect rect, uint64_t callbackID)
+ DrawPagesToPDF(uint64_t frameID, uint32_t first, uint32_t count, uint64_t callbackID)
#endif
// FIXME: This a dummy message, to avoid breaking the build for platforms that don't require
@@ -153,7 +171,7 @@ messages -> WebPage {
GetMarkedRange() -> (uint64_t location, uint64_t length)
CharacterIndexForPoint(WebCore::IntPoint point) -> (uint64_t result)
FirstRectForCharacterRange(uint64_t location, uint64_t length) -> (WebCore::IntRect resultRect)
- SendAccessibilityPresenterToken(CoreIPC::DataReference token)
+ RegisterUIProcessAccessibilityTokens(CoreIPC::DataReference elemenToken, CoreIPC::DataReference windowToken)
#endif
#if PLATFORM(WIN)
ConfirmComposition(WTF::String compositionString)
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp b/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp
index 67109ec..3bd20c8 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPageGroupProxy.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPageGroupProxy.h"
#include "WebProcess.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp b/Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp
new file mode 100644
index 0000000..313ad3f
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ChunkedUpdateDrawingArea.h"
+
+#include "RefPtrCairo.h"
+#include "UpdateChunk.h"
+#include "WebPage.h"
+
+#include <WebCore/GraphicsContext.h>
+#include <WebCore/IntRect.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void ChunkedUpdateDrawingArea::paintIntoUpdateChunk(UpdateChunk* updateChunk)
+{
+ ASSERT(!updateChunk->isEmpty());
+
+ RefPtr<cairo_surface_t> image = updateChunk->createImage();
+ RefPtr<cairo_t> cr = cairo_create(image.get());
+ GraphicsContext gc(cr.get());
+ gc.save();
+ IntRect rect = updateChunk->rect();
+ gc.translate(-rect.x(), -rect.y());
+ m_webPage->drawRect(gc, updateChunk->rect());
+ gc.restore();
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp b/Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp
index 4697f62..36bde01 100644
--- a/Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspector.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm b/Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm
index fa4aa1a..c88ab7e 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm
+++ b/Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "AccessibilityWebPageObject.h"
#import "WebFrame.h"
@@ -32,6 +33,7 @@
#import <WebCore/FrameView.h>
#import <WebCore/ScrollView.h>
#import <WebCore/Scrollbar.h>
+#import <WebKitSystemInterface.h>
using namespace WebCore;
using namespace WebKit;
@@ -70,6 +72,7 @@ using namespace WebKit;
- (void)dealloc
{
+ WKUnregisterUniqueIdForElement(self);
[m_accessibilityChildren release];
[m_attributeNames release];
[m_parent release];
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp b/Source/WebKit2/WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp
index 6bcecfd..b39598f 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingArea.h"
#include "UpdateChunk.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm b/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
index 24fa124..25a1dfd 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
+++ b/Source/WebKit2/WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm
@@ -23,18 +23,19 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if USE(ACCELERATED_COMPOSITING)
+#import "config.h"
+#import "LayerBackedDrawingArea.h"
-#include "LayerBackedDrawingArea.h"
+#if USE(ACCELERATED_COMPOSITING)
-#include "DrawingAreaProxyMessageKinds.h"
-#include "WebKitSystemInterface.h"
-#include "WebPage.h"
-#include "WebProcess.h"
-#include <WebCore/Frame.h>
-#include <WebCore/FrameView.h>
-#include <WebCore/GraphicsLayer.h>
-#include <WebCore/Page.h>
+#import "DrawingAreaProxyMessageKinds.h"
+#import "WebKitSystemInterface.h"
+#import "WebPage.h"
+#import "WebProcess.h"
+#import <WebCore/Frame.h>
+#import <WebCore/FrameView.h>
+#import <WebCore/GraphicsLayer.h>
+#import <WebCore/Page.h>
using namespace WebCore;
@@ -83,7 +84,7 @@ void LayerBackedDrawingArea::attachCompositingContext()
WKCARemoteLayerClientSetLayer(m_remoteLayerRef.get(), m_hostingLayer->platformLayer());
uint32_t contextID = WKCARemoteLayerClientGetClientId(m_remoteLayerRef.get());
- WebProcess::shared().connection()->sendSync(DrawingAreaProxyLegacyMessage::AttachCompositingContext, m_webPage->pageID(), CoreIPC::In(contextID), CoreIPC::Out());
+ WebProcess::shared().connection()->deprecatedSendSync(DrawingAreaProxyLegacyMessage::AttachCompositingContext, m_webPage->pageID(), CoreIPC::In(contextID), CoreIPC::Out());
#endif
}
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h b/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h
new file mode 100644
index 0000000..016f0d6
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LayerTreeHostMac_h
+#define LayerTreeHostMac_h
+
+#include "LayerTreeContext.h"
+#include "LayerTreeHost.h"
+#include <WebCore/GraphicsLayerClient.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/RetainPtr.h>
+
+typedef struct __WKCARemoteLayerClientRef* WKCARemoteLayerClientRef;
+
+namespace WebKit {
+
+class LayerTreeHostMac : public LayerTreeHost, WebCore::GraphicsLayerClient {
+public:
+ static PassRefPtr<LayerTreeHostMac> create(WebPage*);
+ ~LayerTreeHostMac();
+
+private:
+ explicit LayerTreeHostMac(WebPage*);
+
+ // LayerTreeHost.
+ virtual const LayerTreeContext& layerTreeContext();
+ virtual void scheduleLayerFlush();
+ virtual void setRootCompositingLayer(WebCore::GraphicsLayer*);
+ virtual void invalidate();
+
+ virtual void setNonCompositedContentsNeedDisplay(const WebCore::IntRect&);
+ virtual void scrollNonCompositedContents(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
+ virtual void sizeDidChange(const WebCore::IntSize& newSize);
+
+ virtual void didInstallPageOverlay();
+ virtual void didUninstallPageOverlay();
+ virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
+
+ // GraphicsLayerClient
+ virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time);
+ virtual void notifySyncRequired(const WebCore::GraphicsLayer*);
+ virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect);
+ virtual bool showDebugBorders() const;
+ virtual bool showRepaintCounter() const;
+
+ static void flushPendingLayerChangesRunLoopObserverCallback(CFRunLoopObserverRef, CFRunLoopActivity, void*);
+ void flushPendingLayerChangesRunLoopObserverCallback();
+ bool flushPendingLayerChanges();
+
+ void createPageOverlayLayer();
+ void destroyPageOverlayLayer();
+
+ // The context for this layer tree.
+ LayerTreeContext m_layerTreeContext;
+
+ // Whether the layer tree host is valid or not.
+ bool m_isValid;
+
+ // The root layer.
+ OwnPtr<WebCore::GraphicsLayer> m_rootLayer;
+
+ // The layer which contains all non-composited content.
+ OwnPtr<WebCore::GraphicsLayer> m_nonCompositedContentLayer;
+
+ // The page overlay layer. Will be null if there's no page overlay.
+ OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
+
+ RetainPtr<WKCARemoteLayerClientRef> m_remoteLayerClient;
+ RetainPtr<CFRunLoopObserverRef> m_flushPendingLayerChangesRunLoopObserver;
+};
+
+} // namespace WebKit
+
+#endif // LayerTreeHostMac_h
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm b/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm
new file mode 100644
index 0000000..9734aec
--- /dev/null
+++ b/Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "LayerTreeHostMac.h"
+
+#import "WebPage.h"
+#import "WebProcess.h"
+#import <QuartzCore/CATransaction.h>
+#import <WebCore/Frame.h>
+#import <WebCore/FrameView.h>
+#import <WebCore/Page.h>
+#import <WebCore/Settings.h>
+#import <WebKitSystemInterface.h>
+
+@interface CATransaction (Details)
++ (void)synchronize;
+@end
+
+using namespace WebCore;
+
+namespace WebKit {
+
+PassRefPtr<LayerTreeHostMac> LayerTreeHostMac::create(WebPage* webPage)
+{
+ return adoptRef(new LayerTreeHostMac(webPage));
+}
+
+LayerTreeHostMac::LayerTreeHostMac(WebPage* webPage)
+ : LayerTreeHost(webPage)
+ , m_isValid(true)
+{
+ mach_port_t serverPort = WebProcess::shared().compositingRenderServerPort();
+ m_remoteLayerClient = WKCARemoteLayerClientMakeWithServerPort(serverPort);
+
+ // Create a root layer.
+ m_rootLayer = GraphicsLayer::create(this);
+#ifndef NDEBUG
+ m_rootLayer->setName("LayerTreeHost root layer");
+#endif
+ m_rootLayer->setDrawsContent(false);
+ m_rootLayer->setSize(webPage->size());
+
+ [m_rootLayer->platformLayer() setGeometryFlipped:YES];
+
+ m_nonCompositedContentLayer = GraphicsLayer::create(this);
+#ifndef NDEBUG
+ m_nonCompositedContentLayer->setName("LayerTreeHost non-composited content");
+#endif
+ m_nonCompositedContentLayer->setDrawsContent(true);
+ m_nonCompositedContentLayer->setContentsOpaque(m_webPage->drawsBackground() && !m_webPage->drawsTransparentBackground());
+ m_nonCompositedContentLayer->setSize(webPage->size());
+
+ m_rootLayer->addChild(m_nonCompositedContentLayer.get());
+
+ WKCARemoteLayerClientSetLayer(m_remoteLayerClient.get(), m_rootLayer->platformLayer());
+
+ if (m_webPage->hasPageOverlay())
+ createPageOverlayLayer();
+
+ scheduleLayerFlush();
+
+ m_layerTreeContext.contextID = WKCARemoteLayerClientGetClientId(m_remoteLayerClient.get());
+}
+
+LayerTreeHostMac::~LayerTreeHostMac()
+{
+ ASSERT(!m_isValid);
+ ASSERT(!m_flushPendingLayerChangesRunLoopObserver);
+ ASSERT(!m_remoteLayerClient);
+ ASSERT(!m_rootLayer);
+}
+
+const LayerTreeContext& LayerTreeHostMac::layerTreeContext()
+{
+ return m_layerTreeContext;
+}
+
+void LayerTreeHostMac::scheduleLayerFlush()
+{
+ CFRunLoopRef currentRunLoop = CFRunLoopGetCurrent();
+
+ // Make sure we wake up the loop or the observer could be delayed until some other source fires.
+ CFRunLoopWakeUp(currentRunLoop);
+
+ if (m_flushPendingLayerChangesRunLoopObserver)
+ return;
+
+ // Run before the Core Animation commit observer, which has order 2000000.
+ const CFIndex runLoopOrder = 2000000 - 1;
+ CFRunLoopObserverContext context = { 0, this, 0, 0, 0 };
+ m_flushPendingLayerChangesRunLoopObserver.adoptCF(CFRunLoopObserverCreate(0, kCFRunLoopBeforeWaiting | kCFRunLoopExit, true, runLoopOrder, flushPendingLayerChangesRunLoopObserverCallback, &context));
+
+ CFRunLoopAddObserver(currentRunLoop, m_flushPendingLayerChangesRunLoopObserver.get(), kCFRunLoopCommonModes);
+}
+
+void LayerTreeHostMac::setRootCompositingLayer(GraphicsLayer* graphicsLayer)
+{
+ ASSERT(graphicsLayer);
+
+ m_nonCompositedContentLayer->removeAllChildren();
+
+ // Add the accelerated layer tree hierarchy.
+ m_nonCompositedContentLayer->addChild(graphicsLayer);
+}
+
+void LayerTreeHostMac::invalidate()
+{
+ ASSERT(m_isValid);
+
+ if (m_flushPendingLayerChangesRunLoopObserver) {
+ CFRunLoopObserverInvalidate(m_flushPendingLayerChangesRunLoopObserver.get());
+ m_flushPendingLayerChangesRunLoopObserver = nullptr;
+ }
+
+ WKCARemoteLayerClientInvalidate(m_remoteLayerClient.get());
+ m_remoteLayerClient = nullptr;
+ m_rootLayer = nullptr;
+ m_isValid = false;
+}
+
+void LayerTreeHostMac::setNonCompositedContentsNeedDisplay(const IntRect& rect)
+{
+ m_nonCompositedContentLayer->setNeedsDisplayInRect(rect);
+ if (m_pageOverlayLayer)
+ m_pageOverlayLayer->setNeedsDisplayInRect(rect);
+
+ scheduleLayerFlush();
+}
+
+void LayerTreeHostMac::scrollNonCompositedContents(const IntRect& scrollRect, const IntSize& scrollOffset)
+{
+ setNonCompositedContentsNeedDisplay(scrollRect);
+}
+
+void LayerTreeHostMac::sizeDidChange(const IntSize& newSize)
+{
+ m_rootLayer->setSize(newSize);
+ m_nonCompositedContentLayer->setSize(newSize);
+
+ if (m_pageOverlayLayer)
+ m_pageOverlayLayer->setSize(newSize);
+
+ scheduleLayerFlush();
+ flushPendingLayerChanges();
+
+ [CATransaction flush];
+ [CATransaction synchronize];
+}
+
+void LayerTreeHostMac::didInstallPageOverlay()
+{
+ createPageOverlayLayer();
+ scheduleLayerFlush();
+}
+
+void LayerTreeHostMac::didUninstallPageOverlay()
+{
+ destroyPageOverlayLayer();
+ scheduleLayerFlush();
+}
+
+void LayerTreeHostMac::setPageOverlayNeedsDisplay(const IntRect& rect)
+{
+ ASSERT(m_pageOverlayLayer);
+ m_pageOverlayLayer->setNeedsDisplayInRect(rect);
+ scheduleLayerFlush();
+}
+
+void LayerTreeHostMac::notifyAnimationStarted(const WebCore::GraphicsLayer*, double time)
+{
+}
+
+void LayerTreeHostMac::notifySyncRequired(const WebCore::GraphicsLayer*)
+{
+}
+
+void LayerTreeHostMac::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const IntRect& clipRect)
+{
+ if (graphicsLayer == m_nonCompositedContentLayer) {
+ m_webPage->drawRect(graphicsContext, clipRect);
+ return;
+ }
+
+ if (graphicsLayer == m_pageOverlayLayer) {
+ m_webPage->drawPageOverlay(graphicsContext, clipRect);
+ return;
+ }
+}
+
+bool LayerTreeHostMac::showDebugBorders() const
+{
+ return m_webPage->corePage()->settings()->showDebugBorders();
+}
+
+bool LayerTreeHostMac::showRepaintCounter() const
+{
+ return m_webPage->corePage()->settings()->showRepaintCounter();
+}
+
+void LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback(CFRunLoopObserverRef, CFRunLoopActivity, void* context)
+{
+ static_cast<LayerTreeHostMac*>(context)->flushPendingLayerChangesRunLoopObserverCallback();
+}
+
+void LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback()
+{
+ {
+ RefPtr<LayerTreeHostMac> protect(this);
+ m_webPage->layoutIfNeeded();
+
+ if (!m_isValid)
+ return;
+ }
+
+ if (!flushPendingLayerChanges())
+ return;
+
+ // We successfully flushed the pending layer changes, remove the run loop observer.
+ ASSERT(m_flushPendingLayerChangesRunLoopObserver);
+ CFRunLoopObserverInvalidate(m_flushPendingLayerChangesRunLoopObserver.get());
+ m_flushPendingLayerChangesRunLoopObserver = 0;
+}
+
+bool LayerTreeHostMac::flushPendingLayerChanges()
+{
+ m_rootLayer->syncCompositingStateForThisLayerOnly();
+ m_nonCompositedContentLayer->syncCompositingStateForThisLayerOnly();
+ if (m_pageOverlayLayer)
+ m_pageOverlayLayer->syncCompositingStateForThisLayerOnly();
+
+ return m_webPage->corePage()->mainFrame()->view()->syncCompositingStateIncludingSubframes();
+}
+
+void LayerTreeHostMac::createPageOverlayLayer()
+{
+ ASSERT(!m_pageOverlayLayer);
+
+ m_pageOverlayLayer = GraphicsLayer::create(this);
+#ifndef NDEBUG
+ m_pageOverlayLayer->setName("LayerTreeHost page overlay content");
+#endif
+
+ m_pageOverlayLayer->setDrawsContent(true);
+ m_pageOverlayLayer->setSize(m_webPage->size());
+
+ m_rootLayer->addChild(m_pageOverlayLayer.get());
+}
+
+void LayerTreeHostMac::destroyPageOverlayLayer()
+{
+ ASSERT(m_pageOverlayLayer);
+ m_pageOverlayLayer->removeFromParent();
+ m_pageOverlayLayer = nullptr;
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm b/Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm
index 83909be..f053cab 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm
+++ b/Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebInspector.h"
#import <wtf/text/WTFString.h>
diff --git a/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm b/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm
index f3211f2..71bbf78 100644
--- a/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm
+++ b/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm
@@ -23,28 +23,29 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebPage.h"
+#import "config.h"
+#import "WebPage.h"
-#include "AccessibilityWebPageObject.h"
-#include "DataReference.h"
-#include "PluginView.h"
-#include "WebCoreArgumentCoders.h"
-#include "WebEvent.h"
-#include "WebFrame.h"
-#include "WebPageProxyMessages.h"
-#include "WebProcess.h"
-#include <WebCore/AXObjectCache.h>
-#include <WebCore/FocusController.h>
-#include <WebCore/Frame.h>
-#include <WebCore/FrameView.h>
-#include <WebCore/HitTestResult.h>
-#include <WebCore/KeyboardEvent.h>
-#include <WebCore/Page.h>
-#include <WebCore/PlatformKeyboardEvent.h>
-#include <WebCore/ScrollView.h>
-#include <WebCore/TextIterator.h>
-#include <WebCore/WindowsKeyboardCodes.h>
-#include <WebKitSystemInterface.h>
+#import "AccessibilityWebPageObject.h"
+#import "DataReference.h"
+#import "PluginView.h"
+#import "WebCoreArgumentCoders.h"
+#import "WebEvent.h"
+#import "WebFrame.h"
+#import "WebPageProxyMessages.h"
+#import "WebProcess.h"
+#import <WebCore/AXObjectCache.h>
+#import <WebCore/FocusController.h>
+#import <WebCore/Frame.h>
+#import <WebCore/FrameView.h>
+#import <WebCore/HitTestResult.h>
+#import <WebCore/KeyboardEvent.h>
+#import <WebCore/Page.h>
+#import <WebCore/PlatformKeyboardEvent.h>
+#import <WebCore/ScrollView.h>
+#import <WebCore/TextIterator.h>
+#import <WebCore/WindowsKeyboardCodes.h>
+#import <WebKitSystemInterface.h>
using namespace WebCore;
@@ -65,7 +66,7 @@ void WebPage::platformInitialize()
// send data back over
NSData* remoteToken = (NSData *)WKAXRemoteTokenForElement(mockAccessibilityElement);
CoreIPC::DataReference dataToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteToken bytes]), [remoteToken length]);
- send(Messages::WebPageProxy::DidReceiveAccessibilityPageToken(dataToken));
+ send(Messages::WebPageProxy::RegisterWebProcessAccessibilityToken(dataToken));
m_mockAccessibilityElement = mockAccessibilityElement;
#endif
}
@@ -230,10 +231,11 @@ void WebPage::firstRectForCharacterRange(uint64_t location, uint64_t length, Web
resultRect.setSize(IntSize(0, 0));
RefPtr<Range> range = convertToRange(frame, NSMakeRange(location, length));
- if (range) {
- ASSERT(range->startContainer());
- ASSERT(range->endContainer());
- }
+ if (!range)
+ return;
+
+ ASSERT(range->startContainer());
+ ASSERT(range->endContainer());
IntRect rect = frame->editor()->firstRectForRange(range.get());
resultRect = frame->view()->contentsToWindow(rect);
@@ -334,11 +336,16 @@ bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboard
return true;
}
-void WebPage::sendAccessibilityPresenterToken(const CoreIPC::DataReference& data)
+void WebPage::registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elementToken, const CoreIPC::DataReference& windowToken)
{
#if !defined(BUILDING_ON_SNOW_LEOPARD)
- NSData* tokenData = [NSData dataWithBytes:data.data() length:data.size()];
- [m_mockAccessibilityElement.get() setRemoteParent:WKAXRemoteElementForToken((CFDataRef)tokenData)];
+ NSData* elementTokenData = [NSData dataWithBytes:elementToken.data() length:elementToken.size()];
+ NSData* windowTokenData = [NSData dataWithBytes:windowToken.data() length:windowToken.size()];
+ id remoteElement = WKAXRemoteElementForToken(elementTokenData);
+ id remoteWindow = WKAXRemoteElementForToken(windowTokenData);
+ WKAXSetWindowForRemoteElement(remoteWindow, remoteElement);
+
+ [accessibilityRemoteObject() setRemoteParent:remoteElement];
#endif
}
@@ -357,6 +364,16 @@ bool WebPage::platformHasLocalDataForURL(const WebCore::KURL& url)
return cachedResponse;
}
+String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL& url)
+{
+ NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
+ [request setValue:(NSString*)userAgent() forHTTPHeaderField:@"User-Agent"];
+ NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
+ [request release];
+
+ return [[cachedResponse response] MIMEType];
+}
+
bool WebPage::canHandleRequest(const WebCore::ResourceRequest& request)
{
if ([NSURLConnection canHandleRequest:request.nsURLRequest()])
diff --git a/Source/WebKit2/WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp b/Source/WebKit2/WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp
index 25ed3e7..ec65b4e 100644
--- a/Source/WebKit2/WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingArea.h"
#include "UpdateChunk.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp b/Source/WebKit2/WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp
index b7ad782..c9ae03d 100644
--- a/Source/WebKit2/WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if ENABLE(TILED_BACKING_STORE)
-
+#include "config.h"
#include "TiledDrawingArea.h"
+#if ENABLE(TILED_BACKING_STORE)
+
#include "UpdateChunk.h"
#include "WebPage.h"
#include <WebCore/GraphicsContext.h>
diff --git a/Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp b/Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp
index 99aa1eb..1675d77 100644
--- a/Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspector.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp b/Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp
index fe1a89c..cad0c04 100644
--- a/Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPage.h"
#include "WebEvent.h"
@@ -270,6 +271,12 @@ bool WebPage::platformHasLocalDataForURL(const WebCore::KURL&)
return false;
}
+String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL&)
+{
+ // FIXME: Implement
+ return String();
+}
+
bool WebPage::canHandleRequest(const WebCore::ResourceRequest&)
{
// FIXME: Implement
diff --git a/Source/WebKit2/WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp b/Source/WebKit2/WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp
index aa1f975..13f1e3f 100644
--- a/Source/WebKit2/WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "ChunkedUpdateDrawingArea.h"
#include "UpdateChunk.h"
diff --git a/Source/WebKit2/WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp b/Source/WebKit2/WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp
index cae79c2..3c2f3c9 100644
--- a/Source/WebKit2/WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp
@@ -23,10 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if USE(ACCELERATED_COMPOSITING)
-
+#include "config.h"
#include "LayerBackedDrawingArea.h"
+#if USE(ACCELERATED_COMPOSITING)
+
using namespace WebCore;
namespace WebKit {
diff --git a/Source/WebKit2/WebProcess/WebPage/win/WebInspectorWin.cpp b/Source/WebKit2/WebProcess/WebPage/win/WebInspectorWin.cpp
index 4c30b8b..3ae0dae 100644
--- a/Source/WebKit2/WebProcess/WebPage/win/WebInspectorWin.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/win/WebInspectorWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebInspector.h"
#if ENABLE(INSPECTOR)
diff --git a/Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp b/Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp
index d41972c..e20af3a 100644
--- a/Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebPage.h"
#include "FontSmoothingLevel.h"
@@ -261,6 +262,27 @@ bool WebPage::platformHasLocalDataForURL(const WebCore::KURL& url)
#endif
}
+String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL& url)
+{
+#if USE(CFNETWORK)
+ RetainPtr<CFURLRef> cfURL(AdoptCF, url.createCFURL());
+ RetainPtr<CFMutableURLRequestRef> request(AdoptCF, CFURLRequestCreateMutable(0, cfURL.get(), kCFURLRequestCachePolicyReloadIgnoringCache, 60, 0));
+
+ RetainPtr<CFStringRef> userAgent(AdoptCF, userAgent().createCFString());
+ CFURLRequestSetHTTPHeaderFieldValue(request.get(), CFSTR("User-Agent"), userAgent.get());
+
+ RetainPtr<CFURLCacheRef> cache(AdoptCF, CFURLCacheCopySharedURLCache());
+
+ RetainPtr<CFCachedURLResponseRef> cachedResponse(AdoptCF, CFURLCacheCopyResponseForRequest(cache.get(), request.get()));
+
+ CFURLResponseRef response = CFCachedURLResponseGetWrappedResponse(cachedResponse.get());
+
+ return response ? CFURLResponseGetMIMEType(response) : String();
+#else
+ return String();
+#endif
+}
+
bool WebPage::canHandleRequest(const WebCore::ResourceRequest& request)
{
#if USE(CFNETWORK)
diff --git a/Source/WebKit2/WebProcess/WebProcess.cpp b/Source/WebKit2/WebProcess/WebProcess.cpp
index 47f4125..97faec4 100644
--- a/Source/WebKit2/WebProcess/WebProcess.cpp
+++ b/Source/WebKit2/WebProcess/WebProcess.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcess.h"
#include "AuthenticationManager.h"
@@ -119,11 +120,6 @@ WebProcess::WebProcess()
// Initialize our platform strategies.
WebPlatformStrategies::initialize();
#endif // USE(PLATFORM_STRATEGIES)
-
-#if ENABLE(DATABASE)
- // Make sure the WebDatabaseManager is initialized so that the Database directory is set.
- WebDatabaseManager::shared();
-#endif
}
void WebProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, RunLoop* runLoop)
@@ -131,6 +127,8 @@ void WebProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, Ru
ASSERT(!m_connection);
m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, runLoop);
+ m_connection->setDidCloseOnConnectionWorkQueueCallback(didCloseOnConnectionWorkQueue);
+
m_connection->open();
m_runLoop = runLoop;
@@ -159,6 +157,11 @@ void WebProcess::initializeWebProcess(const WebProcessCreationParameters& parame
}
}
+#if ENABLE(DATABASE)
+ // Make sure the WebDatabaseManager is initialized so that the Database directory is set.
+ WebDatabaseManager::initialize(parameters.databaseDirectory);
+#endif
+
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
if (!parameters.applicationCacheDirectory.isEmpty())
cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory);
@@ -564,6 +567,13 @@ void WebProcess::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::Message
// we'll let it slide.
}
+NO_RETURN void WebProcess::didFailToSendSyncMessage(CoreIPC::Connection*)
+{
+ // We were making a synchronous call to a UI process that doesn't exist any more.
+ // Callers are unlikely to be prepared for an error like this, so it's best to exit immediately.
+ exit(0);
+}
+
WebFrame* WebProcess::webFrame(uint64_t frameID) const
{
return m_frameMap.get(frameID);
diff --git a/Source/WebKit2/WebProcess/WebProcess.h b/Source/WebKit2/WebProcess/WebProcess.h
index e82cf15..993cf38 100644
--- a/Source/WebKit2/WebProcess/WebProcess.h
+++ b/Source/WebKit2/WebProcess/WebProcess.h
@@ -68,7 +68,7 @@ class WebProcess : ChildProcess {
public:
static WebProcess& shared();
- void initialize(CoreIPC::Connection::Identifier, RunLoop* runLoop);
+ void initialize(CoreIPC::Connection::Identifier, RunLoop*);
CoreIPC::Connection* connection() const { return m_connection.get(); }
RunLoop* runLoop() const { return m_runLoop; }
@@ -156,6 +156,7 @@ private:
CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
void didClose(CoreIPC::Connection*);
void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
+ NO_RETURN void didFailToSendSyncMessage(CoreIPC::Connection*);
// Implemented in generated WebProcessMessageReceiver.cpp
void didReceiveWebProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
diff --git a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
index df57bde..5d81971 100644
--- a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
+++ b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
@@ -6,48 +6,57 @@
;; Read-only preferences and data
(allow file-read*
- ;; Basic system paths
- (subpath "/Library/Fonts")
- (subpath "/Library/Frameworks")
- (subpath "/Library/Keychains")
- (subpath "/private/var/db/mds")
- (regex #"^/private/etc/(hosts|group|passwd)$")
-
- ;; Plugins
- (subpath "/Library/Internet Plug-Ins")
- (subpath (string-append (param "_HOME") "/Library/Internet Plug-Ins"))
-
- ;; System and user preferences
- (literal "/Library/Preferences/.GlobalPreferences.plist")
- (literal "/Library/Preferences/com.apple.security.plist")
- (literal (string-append (param "_HOME") "/Library/Preferences/.GlobalPreferences.plist"))
- (regex (string-append "^" (param "_HOME") "/Library/Preferences/ByHost/\.GlobalPreferences\."))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.ATS.plist"))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.HIToolbox.plist"))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.LaunchServices.plist"))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.WebFoundation.plist"))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.security.plist"))
- (literal (string-append (param "_HOME") "/Library/Preferences/com.apple.security.revocation.plist"))
- (subpath (string-append (param "_HOME") "/Library/Keychains"))
-
- ;; On-disk WebKit2 framework location, to account for debug installations
- ;; outside of /System/Library/Frameworks
- (subpath (param "WEBKIT2_FRAMEWORK_DIR"))
-
- ;; Extensions from UIProcess
- (extension)
+ ;; Basic system paths
+ (subpath "/Library/Fonts")
+ (subpath "/Library/Frameworks")
+ (subpath "/Library/Keychains")
+ (subpath "/private/var/db/mds")
+ (subpath "/private/var/db/DetachedSignatures")
+ (regex #"^/private/etc/(hosts|group|passwd)$")
+
+ ;; Plugins
+ (subpath "/Library/Internet Plug-Ins")
+ (subpath (string-append (param "HOME_DIR") "/Library/Internet Plug-Ins"))
+
+ ;; System and user preferences
+ (literal "/Library/Preferences/.GlobalPreferences.plist")
+ (literal "/Library/Preferences/com.apple.crypto.plist")
+ (literal "/Library/Preferences/com.apple.security.plist")
+ (literal "/Library/Preferences/com.apple.security.common.plist")
+ (literal "/Library/Preferences/com.apple.security.revocation.plist")
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/.GlobalPreferences.plist"))
+ (regex (string-append "^" (param "HOME_DIR") "/Library/Preferences/ByHost/\.GlobalPreferences\."))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.ATS.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.HIToolbox.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.LaunchServices.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.WebFoundation.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.security.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.security.revocation.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Application Support/SyncServices/Local/ClientsWithChanges/com.apple.Keychain"))
+ (regex (string-append "^" (param "HOME_DIR") "/Library/Preferences/com\.apple\.driver\.(AppleBluetoothMultitouch\.mouse|AppleBluetoothMultitouch\.trackpad|AppleHIDMouse)\.plist$"))
+
+ ;; On-disk WebKit2 framework location, to account for debug installations
+ ;; outside of /System/Library/Frameworks
+ (subpath (param "WEBKIT2_FRAMEWORK_DIR"))
+
+ ;; FIXME: This should be removed when <rdar://problem/8957845> is fixed.
+ (subpath (string-append (param "HOME_DIR") "/Library/Fonts"))
+
+ ;; Extensions from UIProcess
+ (extension)
)
(allow file-write*
- ;; Extensions from UIProcess
- (extension)
+ ;; Extensions from UIProcess
+ (extension)
)
;; Writable preferences and temporary files
(allow file*
- (subpath (string-append (param "_HOME") "/Library/Caches/com.apple.WebProcess"))
- (regex (string-append "^" (param "_HOME") "/Library/Preferences/ByHost/com\.apple\.HIToolbox\."))
- (regex (string-append "^" (param "_HOME") "/Library/Preferences/com\.apple\.WebProcess\."))
+ (subpath (string-append (param "HOME_DIR") "/Library/Caches/com.apple.WebProcess"))
+ (regex (string-append "^" (param "HOME_DIR") "/Library/Preferences/ByHost/com\.apple\.HIToolbox\."))
+ (regex (string-append "^" (param "HOME_DIR") "/Library/Preferences/com\.apple\.WebProcess\."))
+ (subpath (string-append (param "HOME_DIR") "/Library/Keychains"))
)
;; Darwin temporary files and caches, if present
@@ -56,6 +65,10 @@
(if (positive? (string-length (param "DARWIN_USER_TEMP_DIR")))
(allow file* (subpath (param "DARWIN_USER_TEMP_DIR"))))
+;; Database dir
+(if (positive? (string-length (param "WEBKIT_DATABASE_DIR")))
+ (allow file* (subpath (param "WEBKIT_DATABASE_DIR"))))
+
;; The NSURLCache directory.
(if (positive? (string-length (param "NSURL_CACHE_DIR")))
(allow file* (subpath (param "NSURL_CACHE_DIR"))))
@@ -89,6 +102,7 @@
(global-name "com.apple.dock.server")
(global-name "com.apple.ocspd")
(global-name "com.apple.pasteboard.1")
+ (global-name "com.apple.system.opendirectoryd.api")
(global-name "com.apple.window_proxies")
(global-name "com.apple.windowserver.active")
(global-name-regex #"^com\.apple\.WebKit\.WebProcess-")
@@ -107,8 +121,8 @@
;; FIXME: These rules are required until plug-ins are moved out of the web process.
(allow file-read*
- (regex (string-append "^" (param "_HOME") "/Library/Preferences/ByHost/com\.apple\.ist\."))
- (literal (string-append (param "_HOME") "/Library/Preferences/edu.mit.Kerberos"))
+ (regex (string-append "^" (param "HOME_DIR") "/Library/Preferences/ByHost/com\.apple\.ist\."))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/edu.mit.Kerberos"))
(literal "/Library/Preferences/edu.mit.Kerberos")
)
@@ -127,6 +141,10 @@
;; FIXME: Once <rdar://problem/8900275> has been fixed, these rules can be removed.
(allow mach-lookup (global-name "com.apple.pubsub.ipc"))
(allow network-outbound (regex #"^/private/tmp/launch-[^/]+/Render"))
+(allow file-read*
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.Safari.RSS.plist"))
+ (literal (string-append (param "HOME_DIR") "/Library/Preferences/com.apple.Syndication.plist"))
+)
;; FIXME: Investigate these.
(allow appleevent-send (appleevent-destination "com.apple.WebProcess"))
diff --git a/Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp b/Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp
index 4c26c08..43e9776 100644
--- a/Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp
+++ b/Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcess.h"
#include "NotImplemented.h"
diff --git a/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp b/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp
index dcac73f..60e537f 100644
--- a/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp
+++ b/Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcessMainGtk.h"
#include "WKBase.h"
@@ -51,10 +52,16 @@ WK_EXPORT int WebProcessMainGtk(int argc, char* argv[])
JSC::initializeThreading();
WTF::initializeMainThread();
-
+
RunLoop::initializeMainRunLoop();
- WebCore::ResourceHandle::defaultSession();
-
+ SoupSession* session = WebCore::ResourceHandle::defaultSession();
+
+ SoupSessionFeature* sniffer = static_cast<SoupSessionFeature*>(g_object_new(SOUP_TYPE_CONTENT_SNIFFER, NULL));
+ soup_session_add_feature(session, sniffer);
+ g_object_unref(sniffer);
+
+ soup_session_add_feature_by_type(session, SOUP_TYPE_CONTENT_DECODER);
+
int socket = atoi(argv[1]);
WebProcess::shared().initialize(socket, RunLoop::main());
RunLoop::run();
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
index d394c98..fc06d2c 100644
--- a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
+++ b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
@@ -23,23 +23,24 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "WebProcess.h"
-
-#include "SandboxExtension.h"
-#include "WebProcessCreationParameters.h"
-#include <WebCore/MemoryCache.h>
-#include <WebCore/PageCache.h>
-#include <WebKitSystemInterface.h>
-#include <algorithm>
-#include <dispatch/dispatch.h>
-#include <mach/host_info.h>
-#include <mach/mach.h>
-#include <mach/mach_error.h>
+#import "config.h"
+#import "WebProcess.h"
+
+#import "SandboxExtension.h"
+#import "WebProcessCreationParameters.h"
+#import <WebCore/MemoryCache.h>
+#import <WebCore/PageCache.h>
+#import <WebKitSystemInterface.h>
+#import <algorithm>
+#import <dispatch/dispatch.h>
+#import <mach/host_info.h>
+#import <mach/mach.h>
+#import <mach/mach_error.h>
#if ENABLE(WEB_PROCESS_SANDBOX)
-#include <sandbox.h>
-#include <stdlib.h>
-#include <sysexits.h>
+#import <sandbox.h>
+#import <stdlib.h>
+#import <sysexits.h>
#endif
using namespace WebCore;
@@ -75,7 +76,7 @@ void WebProcess::platformSetCacheModel(CacheModel cacheModel)
{
RetainPtr<NSString> nsurlCacheDirectory(AdoptNS, (NSString *)WKCopyFoundationCacheDirectory());
if (!nsurlCacheDirectory)
- nsurlCacheDirectory.adoptNS(NSHomeDirectory());
+ nsurlCacheDirectory = NSHomeDirectory();
// As a fudge factor, use 1000 instead of 1024, in case the reported byte
// count doesn't align exactly to a megabyte boundary.
@@ -109,6 +110,27 @@ void WebProcess::platformClearResourceCaches()
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
+#if ENABLE(WEB_PROCESS_SANDBOX)
+static void appendSandboxParameterPath(Vector<const char*>& vector, const char* name, const char* path)
+{
+ char normalizedPath[PATH_MAX];
+ if (!realpath(path, normalizedPath))
+ normalizedPath[0] = '\0';
+
+ vector.append(name);
+ vector.append(fastStrDup(normalizedPath));
+}
+
+static void appendSandboxParameterConfPath(Vector<const char*>& vector, const char* name, int confID)
+{
+ char path[PATH_MAX];
+ if (confstr(confID, path, PATH_MAX) <= 0)
+ path[0] = '\0';
+
+ appendSandboxParameterPath(vector, name, path);
+}
+#endif
+
static void initializeSandbox(const WebProcessCreationParameters& parameters)
{
#if ENABLE(WEB_PROCESS_SANDBOX)
@@ -117,33 +139,29 @@ static void initializeSandbox(const WebProcessCreationParameters& parameters)
return;
}
+ Vector<const char*> sandboxParameters;
+
+ appendSandboxParameterPath(sandboxParameters, "HOME_DIR", [NSHomeDirectory() fileSystemRepresentation]);
+ appendSandboxParameterPath(sandboxParameters, "WEBKIT2_FRAMEWORK_DIR", [[[[NSBundle bundleForClass:NSClassFromString(@"WKView")] bundlePath] stringByDeletingLastPathComponent] fileSystemRepresentation]);
+ appendSandboxParameterConfPath(sandboxParameters, "DARWIN_USER_TEMP_DIR", _CS_DARWIN_USER_TEMP_DIR);
+ appendSandboxParameterConfPath(sandboxParameters, "DARWIN_USER_CACHE_DIR", _CS_DARWIN_USER_CACHE_DIR);
+ appendSandboxParameterPath(sandboxParameters, "WEBKIT_DATABASE_DIR", [(NSString *)parameters.databaseDirectory fileSystemRepresentation]);
+ appendSandboxParameterPath(sandboxParameters, "NSURL_CACHE_DIR", parameters.nsURLCachePath.data());
+ appendSandboxParameterPath(sandboxParameters, "UI_PROCESS_BUNDLE_RESOURCE_DIR", parameters.uiProcessBundleResourcePath.data());
+ sandboxParameters.append(static_cast<const char*>(0));
+
+ const char* profilePath = [[[NSBundle mainBundle] pathForResource:@"com.apple.WebProcess" ofType:@"sb"] fileSystemRepresentation];
+
char* errorBuf;
- char tmpPath[PATH_MAX];
- char tmpRealPath[PATH_MAX];
- char cachePath[PATH_MAX];
- char cacheRealPath[PATH_MAX];
- const char* frameworkPath = [[[[NSBundle bundleForClass:NSClassFromString(@"WKView")] bundlePath] stringByDeletingLastPathComponent] UTF8String];
- const char* profilePath = [[[NSBundle mainBundle] pathForResource:@"com.apple.WebProcess" ofType:@"sb"] UTF8String];
-
- if (confstr(_CS_DARWIN_USER_TEMP_DIR, tmpPath, PATH_MAX) <= 0 || !realpath(tmpPath, tmpRealPath))
- tmpRealPath[0] = '\0';
-
- if (confstr(_CS_DARWIN_USER_CACHE_DIR, cachePath, PATH_MAX) <= 0 || !realpath(cachePath, cacheRealPath))
- cacheRealPath[0] = '\0';
-
- const char* const sandboxParam[] = {
- "WEBKIT2_FRAMEWORK_DIR", frameworkPath,
- "DARWIN_USER_TEMP_DIR", (const char*)tmpRealPath,
- "DARWIN_USER_CACHE_DIR", (const char*)cacheRealPath,
- "NSURL_CACHE_DIR", (const char*)parameters.nsURLCachePath.data(),
- "UI_PROCESS_BUNDLE_RESOURCE_DIR", (const char*)parameters.uiProcessBundleResourcePath.data(),
- NULL
- };
-
- if (sandbox_init_with_parameters(profilePath, SANDBOX_NAMED_EXTERNAL, sandboxParam, &errorBuf)) {
- fprintf(stderr, "WebProcess: couldn't initialize sandbox profile [%s] with framework path [%s], tmp path [%s], cache path [%s]: %s\n", profilePath, frameworkPath, tmpRealPath, cacheRealPath, errorBuf);
+ if (sandbox_init_with_parameters(profilePath, SANDBOX_NAMED_EXTERNAL, sandboxParameters.data(), &errorBuf)) {
+ fprintf(stderr, "WebProcess: couldn't initialize sandbox profile [%s]\n", profilePath);
+ for (size_t i = 0; sandboxParameters[i]; i += 2)
+ fprintf(stderr, "%s=%s\n", sandboxParameters[i], sandboxParameters[i + 1]);
exit(EX_NOPERM);
}
+
+ for (size_t i = 0; sandboxParameters[i]; i += 2)
+ fastFree(const_cast<char*>(sandboxParameters[i + 1]));
#endif
}
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm
index a44dc23..846d7a1 100644
--- a/Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm
+++ b/Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#import "config.h"
#import "WebProcessMain.h"
#import "CommandLine.h"
@@ -45,6 +46,10 @@
// FIXME: We should be doing this another way.
extern "C" kern_return_t bootstrap_look_up2(mach_port_t, const name_t, mach_port_t*, pid_t, uint64_t);
+@interface NSApplication (WebNSApplicationDetails)
+-(void)_installAutoreleasePoolsOnCurrentThreadIfNecessary;
+@end
+
#define SHOW_CRASH_REPORTER 1
using namespace WebCore;
@@ -88,6 +93,10 @@ int WebProcessMain(const CommandLine& commandLine)
// Initialize AppKit.
[NSApplication sharedApplication];
+ // Installs autorelease pools on the current CFRunLoop which prevents memory from accumulating between user events.
+ // FIXME: Remove when <rdar://problem/8929426> is fixed.
+ [[NSApplication sharedApplication] _installAutoreleasePoolsOnCurrentThreadIfNecessary];
+
#if !defined(BUILDING_ON_SNOW_LEOPARD)
WKAXRegisterRemoteApp();
#endif
diff --git a/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp b/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp
index bd4e370..291c3e7 100644
--- a/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp
+++ b/Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp
@@ -24,6 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "RunLoop.h"
#include <runtime/InitializeThreading.h>
#include "WebProcess.h"
@@ -160,7 +161,18 @@ QWEBKIT_EXPORT int WebProcessMainQt(int argc, char** argv)
RunLoop::initializeMainRunLoop();
// Create the connection.
- QString identifier(app->arguments().size() > 1 ? app->arguments().at(1) : "");
+ if (app->arguments().size() <= 1) {
+ qDebug() << "Error: wrong number of arguments.";
+ return 1;
+ }
+
+ bool wasNumber = false;
+ int identifier = app->arguments().at(1).toInt(&wasNumber, 10);
+ if (!wasNumber) {
+ qDebug() << "Error: connection identifier wrong.";
+ return 1;
+ }
+
WebKit::WebProcess::shared().initialize(identifier, RunLoop::main());
RunLoop::run();
diff --git a/Source/WebKit2/WebProcess/qt/WebProcessQt.cpp b/Source/WebKit2/WebProcess/qt/WebProcessQt.cpp
index 53a51d3..c45ea32 100644
--- a/Source/WebKit2/WebProcess/qt/WebProcessQt.cpp
+++ b/Source/WebKit2/WebProcess/qt/WebProcessQt.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcess.h"
#include "WebProcessCreationParameters.h"
diff --git a/Source/WebKit2/WebProcess/win/WebProcessMainWin.cpp b/Source/WebKit2/WebProcess/win/WebProcessMainWin.cpp
index 944d8ff..2533c00 100644
--- a/Source/WebKit2/WebProcess/win/WebProcessMainWin.cpp
+++ b/Source/WebKit2/WebProcess/win/WebProcessMainWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcessMain.h"
#include "CommandLine.h"
diff --git a/Source/WebKit2/WebProcess/win/WebProcessWin.cpp b/Source/WebKit2/WebProcess/win/WebProcessWin.cpp
index 7f53cd3..97e2385 100644
--- a/Source/WebKit2/WebProcess/win/WebProcessWin.cpp
+++ b/Source/WebKit2/WebProcess/win/WebProcessWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include "WebProcess.h"
#include "WebProcessCreationParameters.h"
diff --git a/Source/WebKit2/config.h b/Source/WebKit2/config.h
new file mode 100644
index 0000000..4f8d923
--- /dev/null
+++ b/Source/WebKit2/config.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if defined (BUILDING_GTK__)
+#include "autotoolsconfig.h"
+#endif /* defined (BUILDING_GTK__) */
+
+#ifdef __cplusplus
+
+// These undefs match up with defines in WebKit2Prefix.h for Mac OS X.
+// Helps us catch if anyone uses new or delete by accident in code and doesn't include "config.h".
+#undef new
+#undef delete
+#include <wtf/FastMalloc.h>
+
+#endif
+
+#include <wtf/DisallowCType.h>
+#include <wtf/Platform.h>
+
+#ifdef __cplusplus
+#ifndef EXTERN_C_BEGIN
+#define EXTERN_C_BEGIN extern "C" {
+#endif
+#ifndef EXTERN_C_END
+#define EXTERN_C_END }
+#endif
+#else
+#define EXTERN_C_BEGIN
+#define EXTERN_C_END
+#endif
+
+// For defining getters to a static value, where the getters have internal linkage
+#define DEFINE_STATIC_GETTER(type, name, arguments) \
+static const type& name() \
+{ \
+ DEFINE_STATIC_LOCAL(type, name##Value, arguments); \
+ return name##Value; \
+}
+
+#if defined(BUILDING_QT__) || defined(BUILDING_GTK__)
+
+#define WTF_USE_JSC 1
+#define WTF_USE_V8 0
+
+#define JS_EXPORTDATA
+#define JS_EXPORTCLASS
+
+// Disable notImplemented() warnings not to break layout tests.
+// FIXME: WebKit2 logging system should behave identical to WebKit1.
+#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
+
+#elif defined(__APPLE__)
+
+#ifdef __OBJC__
+#define OBJC_CLASS @class
+#else
+#define OBJC_CLASS class
+#endif
+
+#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+#define ENABLE_WEB_PROCESS_SANDBOX 1
+#endif
+
+#define ENABLE_PLUGIN_PROCESS 1
+
+#if PLATFORM(MAC)
+#define ENABLE_MEMORY_SAMPLER 1
+#endif
+
+#import <CoreGraphics/CoreGraphics.h>
+
+#ifdef __OBJC__
+#import <Cocoa/Cocoa.h>
+#endif
+
+/* WebKit has no way to pull settings from WebCore/config.h for now */
+/* so we assume WebKit is always being compiled on top of JavaScriptCore */
+#define WTF_USE_JSC 1
+#define WTF_USE_V8 0
+
+#define JS_EXPORTDATA
+#define JS_EXPORTCLASS
+#define WEBKIT_EXPORTDATA
+
+#include <WebCore/EmptyProtocolDefinitions.h>
+
+#elif defined(WIN32) || defined(_WIN32)
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
+
+/* If we don't define these, they get defined in windef.h. */
+/* We want to use std::min and std::max. */
+#ifndef max
+#define max max
+#endif
+#ifndef min
+#define min min
+#endif
+
+#ifndef _WINSOCKAPI_
+#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
+#endif
+
+#include <WebCore/config.h>
+#include <windows.h>
+
+#if PLATFORM(CG)
+#include <CoreGraphics/CoreGraphics.h>
+#endif
+
+#endif /* defined(WIN32) || defined(_WIN32) */
+
diff --git a/Source/WebKit2/mac/MainMac.cpp b/Source/WebKit2/mac/MainMac.cpp
index 0bba8af..5e6e6a2 100644
--- a/Source/WebKit2/mac/MainMac.cpp
+++ b/Source/WebKit2/mac/MainMac.cpp
@@ -24,6 +24,9 @@
*/
#include <dlfcn.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
static void closeUnusedFileDescriptors()
{
diff --git a/Source/WebKit2/win/MainWin.cpp b/Source/WebKit2/win/MainWin.cpp
index 7aea3f2..c12d048 100644
--- a/Source/WebKit2/win/MainWin.cpp
+++ b/Source/WebKit2/win/MainWin.cpp
@@ -23,6 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <shlwapi.h>
#include <windows.h>
#if defined _M_IX86
@@ -37,9 +38,30 @@
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='" PROCESSORARCHITECTURE "' publicKeyToken='6595b64144ccf1df' language='*'\"")
-extern "C" __declspec(dllimport) int WebKitMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow);
-
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow)
{
- return WebKitMain(hInstance, hPrevInstance, lpstrCmdLine, nCmdShow);
+#ifndef DEBUG_ALL
+ LPCWSTR webKitDLLName = L"WebKit.dll";
+#else
+ LPCTSTR webKitDLLName = L"WebKit_debug.dll";
+#endif
+
+ WCHAR webKitPath[MAX_PATH];
+ ::GetModuleFileNameW(0, webKitPath, ARRAYSIZE(webKitPath));
+ ::PathRemoveFileSpecW(webKitPath);
+
+ // Look for DLLs in the same directory as WebKit2WebProcess.exe. This is not in the search
+ // path already, since we launch WebKit2WebProcess.exe via CreateProcess with lpCurrentDirectory
+ // set to 0. We want both the WebKit client app DLL path and the WebKit directory DLL path in
+ // the DLL search order, and we want the current directory set to the WebKit client app path.
+ ::SetDllDirectoryW(webKitPath);
+
+ ::PathAppendW(webKitPath, webKitDLLName);
+ HMODULE module = ::LoadLibraryW(webKitPath);
+ typedef int (__cdecl* WebKitMainProcPtr)(HINSTANCE, HINSTANCE, LPTSTR, int);
+ WebKitMainProcPtr mainProc = reinterpret_cast<WebKitMainProcPtr>(GetProcAddress(module, "WebKitMain"));
+ if (!mainProc)
+ return 0;
+
+ return mainProc(hInstance, hPrevInstance, lpstrCmdLine, nCmdShow);
}
diff --git a/Source/WebKit2/win/WebKit2.def b/Source/WebKit2/win/WebKit2.def
index 37c5dfc..799fea9 100644
--- a/Source/WebKit2/win/WebKit2.def
+++ b/Source/WebKit2/win/WebKit2.def
@@ -19,6 +19,14 @@ EXPORTS
WebKitShouldUseFontSmoothing
WebKitCreateInstance
+ ; Exported for WebKitTestRunner's use only
+ ??0KURL@WebCore@@QAE@W4ParsedURLStringTag@1@PBD@Z
+ ??1StringImpl@WTF@@QAE@XZ
+ ?equal@WTF@@YA_NPBVStringImpl@1@PBD@Z
+ ?equalIgnoringCase@WTF@@YA_NPAVStringImpl@1@PBD@Z
+ ?host@KURL@WebCore@@QBE?AVString@WTF@@XZ
+ ?protocol@KURL@WebCore@@QBE?AVString@WTF@@XZ
+
; These functions are deprecated
WebLocalizedString
WebLocalizedLPCTSTR
diff --git a/Source/WebKit2/win/WebKit2.make b/Source/WebKit2/win/WebKit2.make
index 7d1ea35..111d113 100755
--- a/Source/WebKit2/win/WebKit2.make
+++ b/Source/WebKit2/win/WebKit2.make
@@ -8,14 +8,15 @@ install:
set WebKitLibrariesDir=$(SRCROOT)\AppleInternal
set WebKitOutputDir=$(OBJROOT)
set ConfigurationBuildDir=$(OBJROOT)\$(BUILDSTYLE)
- set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\
+ set WebKitVSPropsRedirectionDir=$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\
set PRODUCTION=1
devenv "WebKit2.submit.sln" /rebuild $(BUILDSTYLE)
- -xcopy "$(ConfigurationBuildDir)\bin\*.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
- xcopy "$(ConfigurationBuildDir)\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
- -xcopy "$(ConfigurationBuildDir)\bin\WebKit2.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit2.resources" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\*.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\WebKit2.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit2.resources" /e/v/i/h/y
+ -xcopy "%ConfigurationBuildDir%\bin\WebKit2WebProcess.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit2WebProcess.resources" /e/v/i/h/y
-mkdir "$(DSTROOT)\AppleInternal\Sources\WebKit2"
- xcopy "$(ConfigurationBuildDir)\obj\WebKit\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\WebKit2" /e/v/i/h/y
+ xcopy "%ConfigurationBuildDir%\obj\WebKit\DerivedSources\*" "$(DSTROOT)\AppleInternal\Sources\WebKit2" /e/v/i/h/y
diff --git a/Source/WebKit2/win/WebKit2.vcproj b/Source/WebKit2/win/WebKit2.vcproj
index 0742c6e..6d6ab21 100755
--- a/Source/WebKit2/win/WebKit2.vcproj
+++ b/Source/WebKit2/win/WebKit2.vcproj
@@ -399,14 +399,6 @@
>
</File>
<File
- RelativePath="..\Shared\ShareableBitmap.cpp"
- >
- </File>
- <File
- RelativePath="..\Shared\ShareableBitmap.h"
- >
- </File>
- <File
RelativePath="..\Shared\CacheModel.h"
>
</File>
@@ -451,6 +443,10 @@
>
</File>
<File
+ RelativePath="..\Shared\LayerTreeContext.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\MutableArray.cpp"
>
</File>
@@ -515,6 +511,14 @@
>
</File>
<File
+ RelativePath="..\Shared\ShareableBitmap.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Shared\ShareableBitmap.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\StringPairVector.h"
>
</File>
@@ -523,6 +527,14 @@
>
</File>
<File
+ RelativePath="..\Shared\UpdateInfo.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Shared\UpdateInfo.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\UserMessageCoders.h"
>
</File>
@@ -607,6 +619,14 @@
>
</File>
<File
+ RelativePath="..\Shared\WebGraphicsContext.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Shared\WebGraphicsContext.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\WebImage.cpp"
>
</File>
@@ -806,6 +826,14 @@
>
</File>
<File
+ RelativePath="..\Shared\API\c\WKGraphicsContext.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Shared\API\c\WKGraphicsContext.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\API\c\WKImage.cpp"
>
</File>
@@ -989,6 +1017,30 @@
Name="cg"
>
<File
+ RelativePath="..\Shared\API\c\cg\WKGraphicsContextCG.cpp"
+ >
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Shared\API\c\cg\WKGraphicsContextCG.h"
+ >
+ </File>
+ <File
RelativePath="..\Shared\API\c\cg\WKImageCG.cpp"
>
<FileConfiguration
@@ -1062,6 +1114,10 @@
>
</File>
<File
+ RelativePath="..\Shared\win\LayerTreeContextWin.cpp"
+ >
+ </File>
+ <File
RelativePath="..\Shared\win\NativeWebKeyboardEventWin.cpp"
>
</File>
@@ -1397,11 +1453,19 @@
Name="win"
>
<File
- RelativePath="..\WebProcess\WebCoreSupport\win\WebContextMenuClientWin.cpp"
+ RelativePath="..\WebProcess\WebCoreSupport\win\WebDragClientWin.cpp"
>
</File>
<File
- RelativePath="..\WebProcess\WebCoreSupport\win\WebDatabaseManagerWin.cpp"
+ RelativePath="..\WebProcess\WebCoreSupport\win\WebDragSource.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\WebCoreSupport\win\WebDragSource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\WebCoreSupport\win\WebContextMenuClientWin.cpp"
>
</File>
<File
@@ -1450,6 +1514,14 @@
>
</File>
<File
+ RelativePath="..\WebProcess\WebPage\DrawingAreaImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\WebPage\DrawingAreaImpl.h"
+ >
+ </File>
+ <File
RelativePath="..\WebProcess\WebPage\EncoderAdapter.cpp"
>
</File>
@@ -1474,6 +1546,14 @@
>
</File>
<File
+ RelativePath="..\WebProcess\WebPage\LayerTreeHost.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\WebPage\LayerTreeHost.h"
+ >
+ </File>
+ <File
RelativePath="..\WebProcess\WebPage\PageOverlay.cpp"
>
</File>
@@ -1628,6 +1708,14 @@
/>
</FileConfiguration>
</File>
+ <Filter
+ Name="win"
+ >
+ <File
+ RelativePath="..\WebProcess\Downloads\cf\win\DownloadCFNetWin.cpp"
+ >
+ </File>
+ </Filter>
</Filter>
<Filter
Name="curl"
@@ -1714,6 +1802,14 @@
>
</File>
<File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundleNavigationAction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundleNavigationAction.h"
+ >
+ </File>
+ <File
RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePageContextMenuClient.cpp"
>
</File>
@@ -1746,6 +1842,22 @@
>
</File>
<File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePagePolicyClient.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePagePolicyClient.h"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePageResourceLoadClient.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePageResourceLoadClient.h"
+ >
+ </File>
+ <File
RelativePath="..\WebProcess\InjectedBundle\InjectedBundlePageUIClient.cpp"
>
</File>
@@ -1824,6 +1936,22 @@
>
</File>
<File
+ RelativePath="..\WebProcess\InjectedBundle\API\c\WKBundleInspector.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\API\c\WKBundleInspector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\API\c\WKBundleNavigationAction.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\WebProcess\InjectedBundle\API\c\WKBundleNavigationAction.h"
+ >
+ </File>
+ <File
RelativePath="..\WebProcess\InjectedBundle\API\c\WKBundleNodeHandle.cpp"
>
</File>
@@ -2019,6 +2147,14 @@
Name="UIProcess"
>
<File
+ RelativePath="..\UIProcess\BackingStore.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\UIProcess\BackingStore.h"
+ >
+ </File>
+ <File
RelativePath="..\UIProcess\ChunkedUpdateDrawingAreaProxy.cpp"
>
</File>
@@ -2035,6 +2171,14 @@
>
</File>
<File
+ RelativePath="..\UIProcess\DrawingAreaProxyImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\UIProcess\DrawingAreaProxyImpl.h"
+ >
+ </File>
+ <File
RelativePath="..\UIProcess\FindIndicator.cpp"
>
</File>
@@ -2726,6 +2870,10 @@
Name="win"
>
<File
+ RelativePath="..\UIProcess\win\BackingStoreWin.cpp"
+ >
+ </File>
+ <File
RelativePath="..\UIProcess\win\ChunkedUpdateDrawingAreaProxyWin.cpp"
>
</File>
@@ -2819,6 +2967,14 @@
>
</File>
<File
+ RelativePath="..\Platform\Region.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Platform\Region.h"
+ >
+ </File>
+ <File
RelativePath="..\Platform\RunLoop.cpp"
>
</File>
@@ -2848,6 +3004,22 @@
<File
RelativePath="..\Platform\cg\CGUtilities.cpp"
>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Platform\cg\CGUtilities.h"
@@ -2957,6 +3129,10 @@
Name="win"
>
<File
+ RelativePath="..\Platform\CoreIPC\win\BinarySemaphoreWin.cpp"
+ >
+ </File>
+ <File
RelativePath="..\Platform\CoreIPC\win\ConnectionWin.cpp"
>
</File>
@@ -3095,6 +3271,22 @@
>
</File>
<File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\DrawingAreaMessageReceiver.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\DrawingAreaMessages.h"
+ >
+ </File>
+ <File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\DrawingAreaProxyMessageReceiver.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\DrawingAreaProxyMessages.h"
+ >
+ </File>
+ <File
RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\WebContextMessageReceiver.cpp"
>
</File>
diff --git a/Source/WebKit2/win/WebKit2Common.vsprops b/Source/WebKit2/win/WebKit2Common.vsprops
index ab53421..b29aa75 100755
--- a/Source/WebKit2/win/WebKit2Common.vsprops
+++ b/Source/WebKit2/win/WebKit2Common.vsprops
@@ -6,7 +6,7 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\Platform&quot;;&quot;$(ProjectDir)\..\Platform\cg&quot;;&quot;$(ProjectDir)\..\Platform\CoreIPC&quot;;&quot;$(ProjectDir)\..\PluginProcess&quot;;&quot;$(ProjectDir)\..\Shared&quot;;&quot;$(ProjectDir)\..\Shared\win&quot;;&quot;$(ProjectDir)\..\Shared\cf&quot;;&quot;$(ProjectDir)\..\Shared\API\c&quot;;&quot;$(ProjectDir)\..\Shared\API\c\cf&quot;;&quot;$(ProjectDir)\..\Shared\API\c\win&quot;;&quot;$(ProjectDir)\..\Shared\CoreIPCSupport&quot;;&quot;$(ProjectDir)\..\Shared\Plugins&quot;;&quot;$(ProjectDir)\..\Shared\Plugins\Netscape&quot;;&quot;$(ProjectDir)\..\UIProcess&quot;;&quot;$(ProjectDir)\..\UIProcess\API\C&quot;;&quot;$(ProjectDir)\..\UIProcess\API\C\win&quot;;&quot;$(ProjectDir)\..\UIProcess\API\cpp&quot;;&quot;$(ProjectDir)\..\UIProcess\API\win&quot;;&quot;$(ProjectDir)\..\UIProcess\Authentication&quot;;&quot;$(ProjectDir)\..\UIProcess\Downloads&quot;;&quot;$(ProjectDir)\..\UIProcess\Launcher&quot;;&quot;$(ProjectDir)\..\UIProcess\Plugins&quot;;&quot;$(ProjectDir)\..\UIProcess\win&quot;;&quot;$(ProjectDir)\..\WebProcess&quot;;&quot;$(ProjectDir)\..\WebProcess\WebCoreSupport&quot;;&quot;$(ProjectDir)\..\WebProcess\WebCoreSupport\win&quot;;&quot;$(ProjectDir)\..\WebProcess\WebPage&quot;;&quot;$(ProjectDir)\..\WebProcess\WebPage\win&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\API\c&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\DOM&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\win&quot;;&quot;$(ProjectDir)\..\WebProcess\Plugins&quot;;&quot;$(ProjectDir)\..\WebProcess\Plugins\Netscape&quot;;&quot;$(ProjectDir)\..\WebProcess\win&quot;;&quot;$(ProjectDir)\..\WebProcess\Authentication&quot;;&quot;$(ProjectDir)\..\WebProcess\Downloads&quot;;&quot;$(ProjectDir)\..\WebProcess\Downloads\cf&quot;;&quot;$(ProjectDir)\..\WebProcess\Geolocation&quot;;&quot;$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources&quot;;&quot;$(ConfigurationBuildDir)\Include&quot;;&quot;$(ConfigurationBuildDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include\pthreads&quot;;&quot;$(ConfigurationBuildDir)\Include\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Platform&quot;;&quot;$(ProjectDir)\..\Platform\cg&quot;;&quot;$(ProjectDir)\..\Platform\CoreIPC&quot;;&quot;$(ProjectDir)\..\PluginProcess&quot;;&quot;$(ProjectDir)\..\Shared&quot;;&quot;$(ProjectDir)\..\Shared\win&quot;;&quot;$(ProjectDir)\..\Shared\cf&quot;;&quot;$(ProjectDir)\..\Shared\API\c&quot;;&quot;$(ProjectDir)\..\Shared\API\c\cf&quot;;&quot;$(ProjectDir)\..\Shared\API\c\win&quot;;&quot;$(ProjectDir)\..\Shared\CoreIPCSupport&quot;;&quot;$(ProjectDir)\..\Shared\Plugins&quot;;&quot;$(ProjectDir)\..\Shared\Plugins\Netscape&quot;;&quot;$(ProjectDir)\..\UIProcess&quot;;&quot;$(ProjectDir)\..\UIProcess\API\C&quot;;&quot;$(ProjectDir)\..\UIProcess\API\C\win&quot;;&quot;$(ProjectDir)\..\UIProcess\API\cpp&quot;;&quot;$(ProjectDir)\..\UIProcess\API\win&quot;;&quot;$(ProjectDir)\..\UIProcess\Authentication&quot;;&quot;$(ProjectDir)\..\UIProcess\Downloads&quot;;&quot;$(ProjectDir)\..\UIProcess\Launcher&quot;;&quot;$(ProjectDir)\..\UIProcess\Plugins&quot;;&quot;$(ProjectDir)\..\UIProcess\win&quot;;&quot;$(ProjectDir)\..\WebProcess&quot;;&quot;$(ProjectDir)\..\WebProcess\WebCoreSupport&quot;;&quot;$(ProjectDir)\..\WebProcess\WebCoreSupport\win&quot;;&quot;$(ProjectDir)\..\WebProcess\WebPage&quot;;&quot;$(ProjectDir)\..\WebProcess\WebPage\win&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\API\c&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\DOM&quot;;&quot;$(ProjectDir)\..\WebProcess\InjectedBundle\win&quot;;&quot;$(ProjectDir)\..\WebProcess\Plugins&quot;;&quot;$(ProjectDir)\..\WebProcess\Plugins\Netscape&quot;;&quot;$(ProjectDir)\..\WebProcess\win&quot;;&quot;$(ProjectDir)\..\WebProcess\Authentication&quot;;&quot;$(ProjectDir)\..\WebProcess\Downloads&quot;;&quot;$(ProjectDir)\..\WebProcess\Downloads\cf&quot;;&quot;$(ProjectDir)\..\WebProcess\Geolocation&quot;;&quot;$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources&quot;;&quot;$(ConfigurationBuildDir)\Include&quot;;&quot;$(ConfigurationBuildDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include\pthreads&quot;;&quot;$(ConfigurationBuildDir)\Include\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;"
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit;BUILDING_WEBKIT"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKit2Prefix.h"
@@ -18,7 +18,7 @@
AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib usp10.lib comctl32.lib version.lib shlwapi.lib libxml2$(LibraryConfigSuffix).lib libxslt$(LibraryConfigSuffix).lib libicuin$(LibraryConfigSuffix).lib libicuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitDLLConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WebKitLib$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib msimg32.lib crypt32.lib iphlpapi.lib winmm.lib comsuppw.lib rpcrt4.lib zdll$(LibraryConfigSuffix).lib"
OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
AdditionalLibraryDirectories="&quot;$(IntDir)\lib&quot;"
- DelayLoadDLLs="usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;iphlpapi.dll"
+ DelayLoadDLLs="usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;iphlpapi.dll"
/>
<Tool
Name="VCResourceCompilerTool"
diff --git a/Source/WebKit2/win/WebKit2Generated.make b/Source/WebKit2/win/WebKit2Generated.make
index 9460ab5..506e1ed 100644
--- a/Source/WebKit2/win/WebKit2Generated.make
+++ b/Source/WebKit2/win/WebKit2Generated.make
@@ -1,90 +1,94 @@
all:
- touch "$(CONFIGURATIONBUILDDIR)\buildfailed"
- -mkdir 2>NUL "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\cf\WKStringCF.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\cf\WKURLCF.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\cf\WKURLRequestCF.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\cf\WKURLResponseCF.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\cg\WKImageCG.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\win\WKBaseWin.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\win\WKCertificateInfoWin.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKArray.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKBase.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKCertificateInfo.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\C\WKContextMenuItem.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\C\WKContextMenuItemTypes.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKData.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKDictionary.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKError.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKEvent.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKFindOptions.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKGeometry.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKImage.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKMutableArray.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKMutableDictionary.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKNumber.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKPageLoadTypes.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\C\WKSecurityOrigin.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKSerializedScriptValue.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKSerializedScriptValuePrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKString.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKStringPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKType.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKURL.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKURLRequest.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKURLResponse.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\Shared\API\c\WKUserContentURLPattern.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WebKit2.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKAuthenticationChallenge.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKAuthenticationDecisionListener.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKBackForwardList.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKBackForwardListItem.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKContext.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKContextPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKCredential.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKCredentialTypes.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKDatabaseManager.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKDownload.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKFormSubmissionListener.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKFrame.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKFramePolicyListener.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKGeolocationManager.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKGeolocationPermissionRequest.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKGeolocationPosition.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\c\WKInspector.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKNativeEvent.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKNavigationData.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKOpenPanelParameters.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKOpenPanelResultListener.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKPage.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKPageGroup.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKPreferences.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKPreferencesPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKProtectionSpace.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\WKProtectionSpaceTypes.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\win\WKContextPrivateWin.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\win\WKView.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\C\win\WKViewPrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\UIProcess\API\cpp\WKRetainPtr.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundle.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleBackForwardList.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleBackForwardListItem.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleFrame.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleFramePrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleHitTestResult.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleInitialize.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleNodeHandle.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleNodeHandlePrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePage.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePageGroup.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePageOverlay.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePagePrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePrivate.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleRangeHandle.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleScriptWorld.h" "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
- bash build-generated-files.sh "$(CONFIGURATIONBUILDDIR)"
- -del "$(CONFIGURATIONBUILDDIR)\buildfailed"
+ touch "%ConfigurationBuildDir%\buildfailed"
+ -mkdir 2>NUL "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cf\WKStringCF.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cf\WKURLCF.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cf\WKURLRequestCF.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cf\WKURLResponseCF.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cg\WKImageCG.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\cg\WKGraphicsContextCG.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\win\WKBaseWin.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\win\WKCertificateInfoWin.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKArray.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKBase.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKCertificateInfo.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\C\WKContextMenuItem.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\C\WKContextMenuItemTypes.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKData.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKDictionary.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKError.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKEvent.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKFindOptions.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKGeometry.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKGraphicsContext.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKImage.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKMutableArray.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKMutableDictionary.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKNumber.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKPageLoadTypes.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\C\WKSecurityOrigin.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKSerializedScriptValue.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKSerializedScriptValuePrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKString.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKStringPrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKType.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKURL.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKURLRequest.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKURLResponse.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\Shared\API\c\WKUserContentURLPattern.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WebKit2.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKAuthenticationChallenge.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKAuthenticationDecisionListener.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKBackForwardList.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKBackForwardListItem.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKContext.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKContextPrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKCredential.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKCredentialTypes.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKDatabaseManager.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKDownload.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKFormSubmissionListener.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKFrame.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKFramePolicyListener.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKGeolocationManager.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKGeolocationPermissionRequest.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKGeolocationPosition.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\c\WKInspector.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKNativeEvent.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKNavigationData.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKOpenPanelParameters.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKOpenPanelResultListener.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKPage.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKPageGroup.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKPreferences.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKPreferencesPrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKProtectionSpace.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\WKProtectionSpaceTypes.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\win\WKContextPrivateWin.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\win\WKView.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\C\win\WKViewPrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\UIProcess\API\cpp\WKRetainPtr.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundle.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleBackForwardList.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleBackForwardListItem.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleFrame.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleFramePrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleHitTestResult.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleInitialize.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleInspector.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleNavigationAction.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleNodeHandle.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleNodeHandlePrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePage.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePageGroup.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePageOverlay.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePagePrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundlePrivate.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleRangeHandle.h" "%ConfigurationBuildDir%\include\WebKit2"
+ xcopy /y /d "..\WebProcess\InjectedBundle\API\c\WKBundleScriptWorld.h" "%ConfigurationBuildDir%\include\WebKit2"
+ bash build-generated-files.sh "%ConfigurationBuildDir%"
+ -del "%ConfigurationBuildDir%\buildfailed"
clean:
- -del "$(CONFIGURATIONBUILDDIR)\buildfailed"
- -del /s /q "$(CONFIGURATIONBUILDDIR)\include\WebKit2"
+ -del "%ConfigurationBuildDir%\buildfailed"
+ -del /s /q "%ConfigurationBuildDir%\include\WebKit2"
diff --git a/Source/WebKit2/win/WebKit2WebProcess.resources/Info.plist b/Source/WebKit2/win/WebKit2WebProcess.resources/Info.plist
new file mode 100644
index 0000000..2b8f801
--- /dev/null
+++ b/Source/WebKit2/win/WebKit2WebProcess.resources/Info.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>WebKit2WebProcess</string>
+ <key>CFBundleGetInfoString</key>
+ <string>Copyright 2011 Apple Inc.</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.apple.WebKit2WebProcess</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>WebKit2WebProcess</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+</dict>
+</plist>
diff --git a/Source/WebKit2/win/WebKit2WebProcessCommon.vsprops b/Source/WebKit2/win/WebKit2WebProcessCommon.vsprops
index 4a79706..6e3681e 100644
--- a/Source/WebKit2/win/WebKit2WebProcessCommon.vsprops
+++ b/Source/WebKit2/win/WebKit2WebProcessCommon.vsprops
@@ -10,6 +10,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="WebKit$(WebKitDLLConfigSuffix).lib"
+ AdditionalDependencies="Shlwapi.lib"
/>
</VisualStudioPropertySheet>
diff --git a/Source/WebKit2/win/WebKit2WebProcessPostBuild.cmd b/Source/WebKit2/win/WebKit2WebProcessPostBuild.cmd
index 26707ca..609f325 100644
--- a/Source/WebKit2/win/WebKit2WebProcessPostBuild.cmd
+++ b/Source/WebKit2/win/WebKit2WebProcessPostBuild.cmd
@@ -1 +1,4 @@
+mkdir 2>NUL "%OUTDIR%\..\bin\WebKit2WebProcess.resources"
+xcopy /y /d "%PROJECTDIR%\WebKit2WebProcess.resources\*" "%OUTDIR%\..\bin\WebKit2WebProcess.resources"
+
if exist "%CONFIGURATIONBUILDDIR%\buildfailed" del "%CONFIGURATIONBUILDDIR%\buildfailed"
diff --git a/Source/WebKit2/win/WebKit2WebProcessPreBuild.cmd b/Source/WebKit2/win/WebKit2WebProcessPreBuild.cmd
index 21af383..42fbb71 100644
--- a/Source/WebKit2/win/WebKit2WebProcessPreBuild.cmd
+++ b/Source/WebKit2/win/WebKit2WebProcessPreBuild.cmd
@@ -3,6 +3,6 @@ if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%
cmd /c
if exist "%CONFIGURATIONBUILDDIR%\buildfailed" grep XX%PROJECTNAME%XX "%CONFIGURATIONBUILDDIR%\buildfailed"
if errorlevel 1 exit 1
-echo XX$%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%\buildfailed"
+echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%\buildfailed"
bash "%WEBKITLIBRARIESDIR%\tools\scripts\auto-version.sh" "%INTDIR%"
diff --git a/Source/autotools/webkit.m4 b/Source/autotools/webkit.m4
index 4d8cf74..c2f2263 100644
--- a/Source/autotools/webkit.m4
+++ b/Source/autotools/webkit.m4
@@ -108,24 +108,12 @@ AC_DEFUN_ONCE([_WEBKIT_CHECK_GLIB],
[dnl
dnl check for glib
# Version requirements
-GLIB_REQUIRED_VERSION=2.24
-GOBJECT_REQUIRED_VERSION=2.0
-GTHREAD_REQUIRED_VERSION=2.0
-
-PKG_CHECK_MODULES([GLIB],
- [glib-2.0 >= $GLIB_REQUIRED_VERSION
- gobject-2.0 >= $GOBJECT_REQUIRED_VERSION
- gthread-2.0 >= $GTHREAD_REQUIRED_VERSION])
-AC_SUBST([GLIB_CFLAGS])
-AC_SUBST([GLIB_LIBS])
-
-# GTK+ port only
-# Check for glib-genmarshal and glib-mkenums
-AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
-AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
+GLIB_REQUIRED_VERSION=2.27.90
+AM_PATH_GLIB_2_0($GLIB_REQUIRED_VERSION)
if test -z "$GLIB_GENMARSHAL" || test -z "$GLIB_MKENUMS"; then
AC_MSG_ERROR([You need the GLib dev tools in your path])
fi
+GLIB_GSETTINGS
])
AC_DEFUN_ONCE([_WEBKIT_CHECK_UNICODE],
diff --git a/Source/cmake/OptionsCommon.cmake b/Source/cmake/OptionsCommon.cmake
index 0331df8..be465fa 100644
--- a/Source/cmake/OptionsCommon.cmake
+++ b/Source/cmake/OptionsCommon.cmake
@@ -5,7 +5,6 @@ SET(WTF_INCLUDE_DIRECTORIES
"${JAVASCRIPTCORE_DIR}"
"${JAVASCRIPTCORE_DIR}/wtf"
"${JAVASCRIPTCORE_DIR}/wtf/unicode"
- "${CMAKE_SOURCE_DIR}/Source"
"${DERIVED_SOURCES_DIR}"
)
diff --git a/Source/cmake/OptionsEfl.cmake b/Source/cmake/OptionsEfl.cmake
index b34ec3b..da9fe6c 100644
--- a/Source/cmake/OptionsEfl.cmake
+++ b/Source/cmake/OptionsEfl.cmake
@@ -114,15 +114,9 @@ IF (NETWORK_BACKEND STREQUAL "soup")
SET(ENABLE_GLIB_SUPPORT 1)
MESSAGE("Forcing Glib support")
ENDIF ()
- FIND_PACKAGE(LibSoup2 2.28.2 REQUIRED)
+ FIND_PACKAGE(LibSoup2 2.33.4 REQUIRED)
SET(WTF_USE_SOUP 1)
ADD_DEFINITIONS(-DWTF_USE_SOUP=1)
-
- IF (LIBSOUP24_VERSION VERSION_LESS 2.29.90)
- ELSE (LIBSOUP24_VERSION VERSION_LESS 2.29.90)
- SET(HAVE_LIBSOUP_2_29_90 1)
- ADD_DEFINITIONS(-DHAVE_LIBSOUP_2_29_90=1)
- ENDIF ()
ELSE ()
FIND_PACKAGE(CURL REQUIRED)
SET(WTF_USE_CURL 1)
diff --git a/Source/cmake/WebKitFS.cmake b/Source/cmake/WebKitFS.cmake
index a2117cd..74e7fb8 100644
--- a/Source/cmake/WebKitFS.cmake
+++ b/Source/cmake/WebKitFS.cmake
@@ -1,6 +1,5 @@
SET(DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources")
FILE(MAKE_DIRECTORY ${DERIVED_SOURCES_DIR})
-FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Source/JavaScriptCore/pcre)
FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Source/JavaScriptCore/runtime)
FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Programs)
diff --git a/Source/cmakeconfig.h.cmake b/Source/cmakeconfig.h.cmake
new file mode 100644
index 0000000..f92fda5
--- /dev/null
+++ b/Source/cmakeconfig.h.cmake
@@ -0,0 +1,45 @@
+#ifndef CMAKECONFIG_H
+#define CMAKECONFIG_H
+
+#define WEBKIT_USER_AGENT_MAJOR_VERSION @USER_AGENT_VERSION_MAJOR@
+#define WEBKIT_USER_AGENT_MINOR_VERSION @USER_AGENT_VERSION_MINOR@
+
+#define ENABLE_AS_IMAGE @ENABLE_AS_IMAGE_VALUE@
+#define ENABLE_BLOB @ENABLE_BLOB_VALUE@
+#define ENABLE_CHANNEL_MESSAGING @ENABLE_CHANNEL_MESSAGING_VALUE@
+#define ENABLE_DATABASE @ENABLE_DATABASE_VALUE@
+#define ENABLE_DATAGRID @ENABLE_DATAGRID_VALUE@
+#define ENABLE_DATALIST @ENABLE_DATALIST_VALUE@
+#define ENABLE_DOM_STORAGE @ENABLE_DOM_STORAGE_VALUE@
+#define ENABLE_EVENTSOURCE @ENABLE_EVENTSOURCE_VALUE@
+#define ENABLE_FAST_MOBILE_SCROLLING @ENABLE_FAST_MOBILE_SCROLLING_VALUE@
+#define ENABLE_FILTERS @ENABLE_FILTERS_VALUE@
+#define ENABLE_FTPDIR @ENABLE_FTPDIR_VALUE@
+#define ENABLE_GEOLOCATION @ENABLE_GEOLOCATION_VALUE@
+#define ENABLE_GLIB_SUPPORT @ENABLE_GLIB_SUPPORT_VALUE@
+#define ENABLE_ICONDATABASE @ENABLE_ICONDATABASE_VALUE@
+#define ENABLE_INSPECTOR @ENABLE_INSPECTOR_VALUE@
+#define ENABLE_JAVASCRIPT_DEBUGGER @ENABLE_JAVASCRIPT_DEBUGGER_VALUE@
+#define ENABLE_JIT @ENABLE_JIT_VALUE@
+#define ENABLE_MATHML @ENABLE_MATHML_VALUE@
+#define ENABLE_NETSCAPE_PLUGIN_API @ENABLE_NETSCAPE_PLUGIN_API_VALUE@
+#define ENABLE_NOTIFICATIONS @ENABLE_NOTIFICATIONS_VALUE@
+#define ENABLE_OFFLINE_WEB_APPLICATIONS @ENABLE_OFFLINE_WEB_APPLICATIONS_VALUE@
+#define ENABLE_ORIENTATION_EVENTS @ENABLE_ORIENTATION_EVENTS_VALUE@
+#define ENABLE_PROGRESS_TAG @ENABLE_PROGRESS_TAG_VALUE@
+#define ENABLE_SHARED_WORKERS @ENABLE_SHARED_WORKERS_VALUE@
+#define ENABLE_SVG @ENABLE_SVG_VALUE@
+#define ENABLE_SVG_ANIMATION @ENABLE_SVG_ANIMATION_VALUE@
+#define ENABLE_SVG_FONTS @ENABLE_SVG_FONTS_VALUE@
+#define ENABLE_SVG_FOREIGN_OBJECT @ENABLE_SVG_FOREIGN_OBJECT_VALUE@
+#define ENABLE_SVG_USE @ENABLE_SVG_USE_VALUE@
+#define ENABLE_TOUCH_EVENTS @ENABLE_TOUCH_EVENTS_VALUE@
+#define ENABLE_VIDEO @ENABLE_VIDEO_VALUE@
+#define ENABLE_WEB_SOCKETS @ENABLE_WEB_SOCKETS_VALUE@
+#define ENABLE_WML @ENABLE_WML_VALUE@
+#define ENABLE_WORKERS @ENABLE_WORKERS_VALUE@
+#define ENABLE_XHTMLMP @ENABLE_XHTMLMP_VALUE@
+#define ENABLE_XPATH @ENABLE_XPATH_VALUE@
+#define ENABLE_XSLT @ENABLE_XSLT_VALUE@
+
+#endif /* CMAKECONFIG_H */
diff --git a/Source/common.pri b/Source/common.pri
new file mode 100644
index 0000000..e6973f4
--- /dev/null
+++ b/Source/common.pri
@@ -0,0 +1,12 @@
+# common project include file for JavaScriptCore and WebCore
+
+contains(JAVASCRIPTCORE_JIT,yes): DEFINES+=ENABLE_JIT=1
+contains(JAVASCRIPTCORE_JIT,no): DEFINES+=ENABLE_JIT=0
+
+linux-g++ {
+isEmpty($$(SBOX_DPKG_INST_ARCH)):exists(/usr/bin/ld.gold) {
+ message(Using gold linker)
+ QMAKE_LFLAGS+=-fuse-ld=gold
+}
+}
+
diff --git a/ThirdPartyProject.prop b/ThirdPartyProject.prop
index 5b153a1..ddbc566 100644
--- a/ThirdPartyProject.prop
+++ b/ThirdPartyProject.prop
@@ -1,11 +1,11 @@
# Copyright 2010 Google Inc. All Rights Reserved.
#Fri Sep 10 11:49:27 BST 2010
currentVersion=55486
-version=76408
+version=78450
isNative=true
name=webkit
keywords=webkit
onDevice=true
homepage=http\://webkit.org/
# We use a WebKit revision that has been used for a Chromium release.
-webkit.chromiumRelease=http\://src.chromium.org/svn/releases/10.0.648.0/DEPS
+webkit.chromiumRelease=http\://src.chromium.org/svn/releases/11.0.672.0/DEPS
diff --git a/Tools/BuildSlaveSupport/build.webkit.org-config/config.json b/Tools/BuildSlaveSupport/build.webkit.org-config/config.json
index 6e03f7a..07edacc 100644
--- a/Tools/BuildSlaveSupport/build.webkit.org-config/config.json
+++ b/Tools/BuildSlaveSupport/build.webkit.org-config/config.json
@@ -17,7 +17,9 @@
{ "name": "apple-macpro-3", "platform": "mac-snowleopard" },
{ "name": "apple-macpro-4", "platform": "mac-leopard" },
{ "name": "apple-macpro-5", "platform": "mac-leopard" },
- { "name": "apple-macpro-6", "platform": "mac-leopard" },
+ { "name": "apple-macpro-6", "platform": "mac-leopard" },
+ { "name": "apple-macpro-7", "platform": "mac-leopard" },
+
{ "name": "apple-windows-1", "platform": "win"},
{ "name": "apple-windows-2", "platform": "win"},
@@ -38,7 +40,6 @@
{ "name": "gtk-linux-slave-1", "platform": "gtk"},
{ "name": "gtk-linux-slave-2", "platform": "gtk"},
{ "name": "gtk-linux-slave-3", "platform": "gtk"},
- { "name": "gtk-linux-slave-4", "platform": "gtk"},
{ "name": "szeged-linux-1", "platform": "qt"},
{ "name": "szeged-linux-2", "platform": "qt"},
@@ -70,7 +71,7 @@
},
{ "name": "Leopard Intel Release (Tests)", "type": "Test", "builddir": "leopard-intel-release-tests",
"platform": "mac-leopard", "configuration": "release", "architectures": ["i386"],
- "slavenames": ["apple-macpro-4", "apple-pixel-1", "test-slave"]
+ "slavenames": ["apple-macpro-4", "apple-pixel-1", "test-slave", "apple-macpro-7"]
},
{ "name": "Leopard Intel Debug (Build)", "type": "Build", "builddir": "leopard-intel-debug",
@@ -80,7 +81,7 @@
},
{ "name": "Leopard Intel Debug (Tests)", "type": "Test", "builddir": "leopard-intel-debug-tests",
"platform": "mac-leopard", "configuration": "debug", "architectures": ["i386"],
- "slavenames": ["apple-xserve-3", "test-slave", "apple-macpro-5", "apple-macpro-6"]
+ "slavenames": ["apple-xserve-3", "test-slave", "apple-macpro-5", "apple-macpro-6", "apple-macpro-7"]
},
{ "name": "SnowLeopard Intel Release (Build)", "type": "Build", "builddir": "snowleopard-intel-release",
"platform": "mac-snowleopard", "configuration": "release", "architectures": ["x86_64"],
@@ -141,11 +142,6 @@
"slavenames": ["gtk-linux-slave-3"]
},
{
- "name": "GTK Linux 64-bit Release", "type": "BuildAndTest", "builddir": "gtk-linux-64-release",
- "platform": "gtk", "configuration": "release", "architectures": ["x86_64"],
- "slavenames": ["gtk-linux-slave-4"]
- },
- {
"name": "Qt Linux Release", "type": "BuildAndTest", "builddir": "qt-linux-release",
"platform": "qt", "configuration": "release", "architectures": ["i386"],
"slavenames": ["szeged-linux-1"]
@@ -230,7 +226,7 @@
"schedulers": [ { "type": "AnyBranchScheduler", "name": "trunk", "change_filter": "trunk_filter", "treeStableTimer": 45.0,
"builderNames": ["Leopard Intel Release (Build)", "Leopard Intel Debug (Build)",
"SnowLeopard Intel Release (Build)", "SnowLeopard Intel Leaks",
- "GTK Linux 32-bit Release", "GTK Linux 32-bit Debug", "GTK Linux 64-bit Debug", "GTK Linux 64-bit Release",
+ "GTK Linux 32-bit Release", "GTK Linux 32-bit Debug", "GTK Linux 64-bit Debug",
"Qt Linux Release", "Qt Linux Release minimal", "Qt Linux ARMv5 Release", "Qt Linux ARMv7 Release",
"Qt Windows 32-bit Release", "Qt Windows 32-bit Debug",
"Chromium Win Release", "Chromium Mac Release", "Chromium Linux Release",
diff --git a/Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg b/Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg
index 1ce5b88..4ee277c 100644
--- a/Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg
+++ b/Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg
@@ -318,8 +318,8 @@ class RunQtAPITests(shell.Test):
description = ["API tests running"]
descriptionDone = ["API tests"]
command = ["python", "./Tools/Scripts/run-qtwebkit-tests",
- "--output-file=qt-unit-tests.html", "--do-not-open-results", "--timeout=30",
- WithProperties("WebKitBuild/%(configuration_pretty)s/Source/WebKit/qt/tests/")]
+ "--output-file=qt-unit-tests.html", "--do-not-open-results", "--timeout=120",
+ WithProperties("WebKitBuild/%(configuration_pretty)s/WebKit/qt/tests/")]
def start(self):
self.setProperty("configuration_pretty", self.getProperty("configuration").title())
@@ -445,9 +445,10 @@ class TestFactory(Factory):
self.addStep(self.TestClass, skipBuild=(platform == 'win'))
# Tiger's Python 2.3 is too old. WebKit Python requires 2.5+.
# Sadly we have no way to detect the version on the slave from here.
- if platform != "mac-tiger":
+ if platform != "mac-tiger" and platform != "chromium-win":
self.addStep(RunPythonTests)
- self.addStep(RunPerlTests)
+ if platform != "chromium-win":
+ self.addStep(RunPerlTests)
self.addStep(ArchiveTestResults)
self.addStep(UploadTestResults)
self.addStep(ExtractTestResults)
diff --git a/Tools/BuildSlaveSupport/built-product-archive b/Tools/BuildSlaveSupport/built-product-archive
index 611d006..9dee922 100644
--- a/Tools/BuildSlaveSupport/built-product-archive
+++ b/Tools/BuildSlaveSupport/built-product-archive
@@ -89,7 +89,7 @@ def archiveBuiltProduct(configuration, platform):
shutil.rmtree(thinDirectory)
os.mkdir(thinDirectory)
- for dirname in ["bin", "lib", "Source/JavaScriptCore"]:
+ for dirname in ["bin", "lib", "JavaScriptCore"]:
fromDir = os.path.join(configurationBuildDirectory, dirname, "*")
toDir = os.path.join(thinDirectory, dirname)
os.makedirs(toDir)
diff --git a/Tools/BuildSlaveSupport/test-result-archive b/Tools/BuildSlaveSupport/test-result-archive
index af66bf0..a4d3ca3 100644
--- a/Tools/BuildSlaveSupport/test-result-archive
+++ b/Tools/BuildSlaveSupport/test-result-archive
@@ -46,7 +46,7 @@ def main():
if options.platform == 'chromium':
# See results_directory() in webkitpy/layout_tests/port/chromium.py.
layoutTestResultsDir = os.path.abspath(os.path.join(sourceRootDirectory,
- "WebKit", "chromium", "webkit", options.configuration.capitalize(),
+ "Source", "WebKit", "chromium", "webkit", options.configuration.capitalize(),
"layout-test-results"))
return archiveTestResults(options.configuration, options.platform, layoutTestResultsDir)
diff --git a/Tools/CMakeListsWinCE.txt b/Tools/CMakeListsWinCE.txt
index 89f6b97..7945daf 100644
--- a/Tools/CMakeListsWinCE.txt
+++ b/Tools/CMakeListsWinCE.txt
@@ -21,4 +21,5 @@ SET(WinCELauncher_LIBRARIES
INCLUDE_DIRECTORIES(${WinCELauncher_INCLUDE_DIRECTORIES})
ADD_EXECUTABLE(WinCELauncher ${WinCELauncher_SOURCES})
+ADD_DEPENDENCIES(WinCELauncher ${WebKit_LIBRARY_NAME})
TARGET_LINK_LIBRARIES(WinCELauncher ${WinCELauncher_LIBRARIES})
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 3ef3b4a..4e59dae 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,2692 @@
+2011-02-12 Chang Shu <cshu@webkit.org>
+
+ Unreviewed.
+
+ Update my own email addresses and IRC nickname.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-02-11 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ This patch adds to NRWT most of the support needed to run the new
+ message-based workers in separate threads or processes. The code
+ isn't fully complete yet because we don't support cancel() or
+ is_alive().
+
+ https://bugs.webkit.org/show_bug.cgi?id=54070
+
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/mock_drt.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+
+2011-02-11 Sailesh Agrawal <sail@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ plugins/invalidate_rect.html fails on chromium-mac
+ https://bugs.webkit.org/show_bug.cgi?id=54051
+
+ This change fixes the invalidate_rect.html test failure on Windows.
+
+ There were two problems. First, the test specified that the plugin was window less by doing <embed ... windowedPlugin="false"></embed>. The windowedPlugin parameter was never being read by the plugin. Fix was to simply set the NPPVpluginWindowBool variable based on the parameter.
+
+ The second problem was that the plugin never handled paint events on Windows. Fix was to simply copy the Mac code to handle paint events.
+
+ This change also updates the build path in chromium_win.py to use the new Source directory.
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
+ (invalidateRect):
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+ (handleEventWin):
+ (NPP_HandleEvent):
+ * Scripts/webkitpy/layout_tests/port/chromium_win.py:
+
+2011-02-11 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Increase the timeout of Qt API tests to 120 seconds.
+
+ * BuildSlaveSupport/build.webkit.org-config/master.cfg:
+
+2011-02-10 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, build fix.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ This patch adds the bulk of the remaining functionality for
+ the NRWT message-passing implementation. The patch adds a new
+ Worker class that will eventually replace the TestShellThread
+ class in dump_render_tree_thread.py, and implements enough of
+ TestRunner2 and the inline version of the manager_worker_broker
+ to actually be able to send a full set of messages back and
+ forth. The Worker stubs do not actually run tests, and there's
+ lots of error handling and stats needed, but this is the core
+ logic.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54068
+
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
+ * Scripts/webkitpy/layout_tests/layout_package/worker.py: Added.
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+
+2011-02-10 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, build fix.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, build fix.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, attempt to fix crashing plugin tests.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Zhenyao Mo <zmo@google.com>
+
+ Unreviewed, build fix.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Sam Weinig <sam@webkit.org>
+
+ Try and fix some crashing tests on the chromium build bot.
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+
+2011-02-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Log an error if a plug-in test can't be found
+ https://bugs.webkit.org/show_bug.cgi?id=54252
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
+ (PluginTest::create):
+ Return null if the test wasn't found.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+ Report an error if PluginTest::create returns null.
+
+2011-02-10 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Return menu items from eventSender.contextMenu()
+ https://bugs.webkit.org/show_bug.cgi?id=53039
+
+ * DumpRenderTree/qt/EventSenderQt.cpp:
+ (EventSender::contextClick):
+ * DumpRenderTree/qt/EventSenderQt.h:
+
+2011-02-10 Adam Roben <aroben@apple.com>
+
+ Test showing and hiding the find indicator on Windows
+
+ Test for <http://webkit.org/b/54213> <rdar://problem/8983261> REGRESSION (r78198): Crash in
+ FindIndicator::contentImage when scrolling page
+
+ Reviewed by Steve Falkenburg.
+
+ * TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp: Added.
+ (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
+ (TestWebKitAPI::findIndicatorCallback): Record that the callback was called, and save the
+ bitmap.
+ (TestWebKitAPI::initialize): Hook up our callbacks.
+ (TestWebKitAPI::TEST): Test showing then hiding the find indicator to see if we crash.
+
+ * TestWebKitAPI/PlatformWebView.h:
+ * TestWebKitAPI/mac/PlatformWebViewMac.mm:
+ (TestWebKitAPI::PlatformWebView::page):
+ * TestWebKitAPI/win/PlatformWebViewWin.cpp:
+ (TestWebKitAPI::PlatformWebView::page):
+ Made page a const member function.
+
+ * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added the new test.
+
+2011-02-10 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Log signals from AtkDocument interface also in AccessibilityController
+ https://bugs.webkit.org/show_bug.cgi?id=54198
+
+ Trace AtkDocument's signals emission through AccessibilityController.
+
+ Also, taken the code related to adding and removing global
+ listeners for ATK signals out to a separate file, for the sake of
+ clarity and to ease future additions.
+
+ * DumpRenderTree/gtk/AccessibilityCallbacks.h: Added.
+ * DumpRenderTree/gtk/AccessibilityCallbacks.cpp: Added
+ (printAccessibilityEvent): Print information about an event.
+ (axObjectEventListener): Global listener for AtkObject's signals.
+ (axDocumentEventListener): Global listener for AtkDocument's signals.
+ (connectAccessibilityCallbacks): Connect all global listeners.
+ (disconnectAccessibilityCallbacks): Disconnect all global listeners.
+
+ * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
+ (AccessibilityController::setLogAccessibilityEvents): Call to
+ connectAccessibilityCallbacks and disconnectAccessibilityCallbacks.
+
+ * GNUmakefile.am: Added new files.
+
+2011-02-09 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Default error page is interfering with tests which require failed loads
+ https://bugs.webkit.org/show_bug.cgi?id=54157
+
+ Disable the default error page during DRT runs. This prevents unexpected loads
+ from interfering with tests that have planned failed loads.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (webViewLoadError): Added, disable default handler.
+ (createWebView): Connect the new load-error handler.
+
+2011-02-10 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add UrlLoader and command line argument handling to MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=54192
+
+ Copy and modify files from QtTestBrowser's implementation.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::newWindow):
+ * MiniBrowser/qt/BrowserWindow.h:
+ * MiniBrowser/qt/MiniBrowser.pro:
+ * MiniBrowser/qt/MiniBrowserApplication.cpp: Copied from QtTestBrowser/launcherwindow.cpp
+ (MiniBrowserApplication::MiniBrowserApplication):
+ (MiniBrowserApplication::handleUserOptions):
+ * MiniBrowser/qt/MiniBrowserApplication.h: Copied from QtTestBrowser/launcherwindow.h
+ (WindowOptions::WindowOptions):
+ (MiniBrowserApplication::urls):
+ (MiniBrowserApplication::isRobotized):
+ (MiniBrowserApplication::robotTimeout):
+ (MiniBrowserApplication::robotExtraTime):
+ * MiniBrowser/qt/UrlLoader.cpp: Copied from QtTestBrowser/urlloader.cpp
+ (UrlLoader::UrlLoader):
+ (UrlLoader::loadNext):
+ (UrlLoader::checkIfFinished):
+ (UrlLoader::frameLoadStarted):
+ (UrlLoader::frameLoadFinished):
+ (UrlLoader::loadUrlList):
+ (UrlLoader::getUrl):
+ * MiniBrowser/qt/UrlLoader.h: Copied from QtTestBrowser/urlloader.h
+ * MiniBrowser/qt/main.cpp:
+ (main):
+ * MiniBrowser/qt/utils.cpp: Copied from QtTestBrowser/utils.cpp
+ (takeOptionValue):
+ (formatKeys):
+ (enumToKeys):
+ (appQuit):
+ (urlFromUserInput):
+ * MiniBrowser/qt/utils.h: Copied from QtTestBrowser/utils.h
+
+2011-02-10 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ check-webkit-style: Add -build/include exemption for Tools/MiniBrowser/qt
+ https://bugs.webkit.org/show_bug.cgi?id=54200
+
+ * Scripts/webkitpy/style/checker.py:
+ * Scripts/webkitpy/style/checker_unittest.py:
+
+2011-02-10 Peter Varga <pvarga@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Remove PCRE source from trunk
+ https://bugs.webkit.org/show_bug.cgi?id=54188
+
+ * wx/build/settings.py:
+
+2011-02-10 David Levin <levin@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ check-webkit-style should be able to figure out function modifiers and return type.
+ https://bugs.webkit.org/show_bug.cgi?id=54124
+
+ * Scripts/webkitpy/style/checkers/cpp.py:
+ (_rfind_in_lines): A way to search backwards in lines.
+ (_FunctionState.modifiers_and_return_type):
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added tests for the new functionality.
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Test that WM_PRINT doesn't trigger an assertion
+
+ Test for <http://webkit.org/b/54145> <rdar://problem/8979559> WM_PRINT doesn't work with new
+ drawing area (assertion failure in DrawingAreaProxyImpl in Debug builds)
+
+ Reviewed by Darin Adler.
+
+ * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp: Added.
+ (TestWebKitAPI::TEST): Send a WM_PRINT message to a WKView.
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Test that having a WKView paint after being resized while hidden doesn't cause a crash
+
+ Test for <http://webkit.org/b/54142> <rdar://problem/8979365> Crash in
+ DrawingAreaProxyImpl::paint when WKView paints after being resized while hidden
+
+ Reviewed by Darin Adler.
+
+ * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
+ (TestWebKitAPI::TEST): Force the WKView to paint after resizing it while hidden.
+
+2011-02-09 Adam Roben <aroben@apple.com>
+
+ Add a test that resizes a WKView while it's hidden
+
+ Test for <http://webkit.org/b/54141> <rdar://problem/8979195> WKView draws at wrong size,
+ performs badly if is resized while hidden (assertion fails in
+ BackingStore::incorporateUpdate in Debug builds)
+
+ Reviewed by Darin Adler.
+
+ * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp: Added.
+ (TestWebKitAPI::didFinishLoadForFrame): Record that the load finished.
+ (TestWebKitAPI::setPageLoaderClient): Hook up our didFinishLoadForFrame callback.
+ (TestWebKitAPI::flushMessages): Load a URL and wait for the load to complete. This ensures
+ that all pending messages have been handled by the UI and web process.
+ (TestWebKitAPI::timerCallback): Kill the timer and record that it fired.
+ (TestWebKitAPI::runForDuration): Set a timer and run the run loop until it fires.
+ (TestWebKitAPI::waitForBackingStoreUpdate): Wait for half a second to give the web process a
+ chance to display, then flush all pending messages.
+ (TestWebKitAPI::TEST): Resize the WKView while it's hidden, then show it again and wait for
+ the backing store to update. This triggers the assertion from bug 54141.
+
+ * TestWebKitAPI/win/PlatformWebViewWin.cpp:
+ (TestWebKitAPI::PlatformWebView::resizeTo): Implemented.
+
+ * TestWebKitAPI/win/TestWebKitAPI.vcproj: Added new test.
+
+2011-02-10 Philippe Normand <pnormand@igalia.com>
+
+ Unreviewed, GTK build fix after roll out of r78157...
+
+ * GNUmakefile.am:
+
+2011-02-10 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r78157.
+ http://trac.webkit.org/changeset/78157
+ https://bugs.webkit.org/show_bug.cgi?id=54150
+
+ Fails on a bunch of bots
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+ * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp: Removed.
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+
+2011-02-10 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Reset GTK' DRT's AccessibilityController to consistent value before every test
+ https://bugs.webkit.org/show_bug.cgi?id=54185
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (resetDefaultsToConsistentValues):
+
+2011-02-10 Philippe Normand <pnormand@igalia.com>
+
+ Unreviewed GTK build fix.
+
+ Adding
+ Tools/DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp
+ in the build, fixing the
+ plugins/npruntime/evaluate-js-destroying-plugin-from-destroy-stream.html
+ test.
+
+ * GNUmakefile.am:
+
+2011-02-10 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Chris Fleizach.
+
+ [GTK] Add support in DRT to log "accessibility events"
+ https://bugs.webkit.org/show_bug.cgi?id=54116
+
+ Added a way to log accessibility related events, in a
+ platform-dependant way.
+
+ Add new function to AccessibilityController.
+
+ * DumpRenderTree/AccessibilityController.h:
+ * DumpRenderTree/AccessibilityController.cpp:
+ (logAccessibilityEventsCallback): New callback.
+ (AccessibilityController::getJSClass): Added new function.
+ (AccessibilityController::resetToConsistentState): Initialized
+ calling setLogAccessibilityEvents(false).
+
+ Provided implementation for the GTK port.
+
+ * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
+ (accessibility_event_listener): Common listener for logging
+ information about all the signals emitted by any AtkObject.
+ (AccessibilityController::setLogAccessibilityEvents): Add or
+ remove listeners for signals, as specified by the parameter.
+
+ Provide dummy implementations for mac and win ports.
+
+ * DumpRenderTree/mac/AccessibilityControllerMac.mm:
+ (AccessibilityController::setLogAccessibilityEvents):
+ * DumpRenderTree/win/AccessibilityControllerWin.cpp:
+ (AccessibilityController::setLogAccessibilityEvents):
+
+2011-02-09 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [NRWT] Remove encoding parameters where we can assume data can be
+ written in binary mode.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54066
+
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+
+2011-02-09 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ nrwt multiprocessing: minor cleanup prior to implementing the new worker
+
+ This patch renames AbstractManager to ManagerConnection and
+ changes some argument names to be more consistent between
+ manager_worker_broker and message_broker. It also fixes a couple
+ of typos in message_broker. These changes will be tested by code
+ introduced in the next patch.
+
+ https://bugs.webkit.org/show_bug.cgi?id=54067
+
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py:
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py:
+
+2011-02-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Repro crash with Sony Google TV ad at Gizmodo
+ https://bugs.webkit.org/show_bug.cgi?id=54150
+ <rdar://problem/8782346>
+
+ Add a new plug-in test that runs JavaScript that destroys the plug-in from within its NPN_DestroyStream callback.
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+ * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSDestroyingPluginFromDestroyStream.cpp: Added.
+ (EvaluateJSDestroyingPluginFromDestroyStream::EvaluateJSDestroyingPluginFromDestroyStream):
+ (EvaluateJSDestroyingPluginFromDestroyStream::NPP_Destroy):
+ (EvaluateJSDestroyingPluginFromDestroyStream::NPP_DestroyStream):
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+
+2011-02-09 David Levin <levin@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ check-webkit-style: The error message about NULL should be more clear for comments.
+ https://bugs.webkit.org/show_bug.cgi?id=53786
+
+ * Scripts/webkitpy/style/checkers/cpp.py: Clarified the error message.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Fixed the corresponding test.
+
+2011-02-09 Nebojsa Ciric <cira@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Implements Locale object of JavaScript internationalization API proposal, as an
+ v8 extension. Extension code is hosted in v8 project (src/extensions/experimental/i18n-extension.{cc,h})
+ and in this patch we just provide flags, tests and build rules for chromium port.
+ https://bugs.webkit.org/show_bug.cgi?id=49414
+
+ * DumpRenderTree/chromium/TestShell.cpp:
+ (TestShell::TestShell):
+
+2011-02-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove UiTools dependency from MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=54096
+
+ * MiniBrowser/qt/MiniBrowser.pro:
+
+2011-02-08 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [NRWT] Pull up rebaseline code from compare_output() function defined
+ in text_diff.py and image_diff.py into a SingleTestRunner.
+
+ This patch is a first step for eliminating test_type/* classes.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53071
+
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
+ * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
+ * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
+ * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
+
+2011-02-07 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ stop generating results.json files
+ https://bugs.webkit.org/show_bug.cgi?id=53977
+
+ We've only used incremental_results.json for a while now
+ and there are plans to start generating a results.json file that matches
+ the format of unexpected_results.json.
+
+ * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
+ * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
+ * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+
+2011-02-08 Sailesh Agrawal <sail@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Invalidate rect doesn't work for windowless plugins on Chromium
+ https://bugs.webkit.org/show_bug.cgi?id=53117
+
+ Added two new utility methods.
+ - layoutTestController.displayInvalidatedRegion() does a paint of any area that has been invalidated. This is different from layoutTestController.display() which explicitly invalidates the entire page then paints.
+ - plugin.invalidateRect(left, top, right, bottom) - invalidates the given rect
+ This is used to test that invalidating a rect correctly causes a repaint of the plugin.
+
+ * DumpRenderTree/LayoutTestController.cpp:
+ (displayInvalidatedRegionCallback):
+ (LayoutTestController::staticFunctions):
+ * DumpRenderTree/LayoutTestController.h:
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
+ (invalidateRect):
+ (pluginInvoke):
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::LayoutTestController):
+ (LayoutTestController::displayInvalidatedRegion):
+ * DumpRenderTree/chromium/LayoutTestController.h:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: move the logic that starts and stops the
+ servers from dump_render_tree_thread into single_test_runner
+ so that we can reuse it in the new multiprocessing worker class
+ as well.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53840
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: split out thread stack logging code into a sharable module
+
+ This patch splits out the code used to find and log thread
+ stacks from NRWT-specific packages to something generic and
+ shareable by other python modules. It will be shared in the near
+ future by the manager_worker_broker module, for example.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53656
+
+ * Scripts/webkitpy/common/system/stack_utils.py: Added.
+ * Scripts/webkitpy/common/system/stack_utils_unittest.py: Added.
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: move a bunch of testing logic out of
+ dump_render_tree_thread and into single_test_runner so that we
+ will be able to reuse it in the new multiprocessing worker class as well.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53838
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
+
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ new-run-webkit-tests: remove no longer needed WatchableThread
+ class.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53839
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: add stubs for the Manager objects that
+ will abstract the concurrency implementation (inline / threads /
+ processes). These classes do nothing yet and are not wired up to
+ anything.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53477
+
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py: Added.
+ * Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py: Added.
+
+2011-02-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: add simplified message broker for new-style
+ messaging. This change adds a very simple message broker that
+ will be used to shuttle messages between the TestRunner2 manager
+ thread and the Worker threads. For now the class is not used by
+ anything, but the eventual usage can be seen in the patches
+ attached to bug 49566.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53158
+
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker2.py: Added.
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py: Added.
+
+2011-02-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ chromium-win builder shouldn't run python or perl tests
+ https://bugs.webkit.org/show_bug.cgi?id=54032
+
+ These tests don't pass on this builder because the builder isn't
+ running in cygwin. There isn't really any point in running them and
+ making the bot red forever.
+
+ * BuildSlaveSupport/build.webkit.org-config/master.cfg:
+
+2011-02-08 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8972913> and https://bugs.webkit.org/show_bug.cgi?id=54036
+ didChangeBackForwardList should include some context about what changed
+
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (didChangeBackForwardList):
+
+2011-02-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ WK2: Add ability to pass context to policy delegate methods
+ https://bugs.webkit.org/show_bug.cgi?id=54031
+
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (decidePolicyForNavigationAction):
+ (decidePolicyForNewWindowAction):
+ (decidePolicyForMIMEType):
+ * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
+ (TestWebKitAPI::decidePolicyForNavigationAction):
+ (TestWebKitAPI::decidePolicyForNewWindowAction):
+ (TestWebKitAPI::decidePolicyForMIMEType):
+ Update policy client for new API.
+
+2011-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] DRT needs an implementation of LayoutTestController.setIconDatabaseEnabled
+ https://bugs.webkit.org/show_bug.cgi?id=54033
+
+ Add an implementation of LayoutTestController.setIconDatabaseEnabled that just
+ call DumpRenderTreeSupportGtk. Turn off the icon database between tests.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (resetDefaultsToConsistentValues): Turn off the icon database.
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+ (LayoutTestController::setIconDatabaseEnabled): Call the appropriate DumpRenderTreeSupportGtk
+ method.
+
+2011-02-08 Kundu Suchismita <suchi.kundu@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Local Storage settings can be enable/disable from "Develop" menu
+ https://bugs.webkit.org/show_bug.cgi?id=52296
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::createChrome):
+ (LauncherWindow::toggleLocalStorage):
+ (LauncherWindow::toggleOfflineStorageDatabase):
+ (LauncherWindow::toggleOfflineWebApplicationCache):
+ (LauncherWindow::setOfflineStorageDefaultQuota):
+ * QtTestBrowser/launcherwindow.h:
+ (WindowOptions::WindowOptions):
+ * QtTestBrowser/main.cpp:
+ (LauncherApplication::handleUserOptions):
+
+2011-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Eric Seidel.
+
+ [GTK] EventSender.keyDown does not support non-array modifier arguments
+ https://bugs.webkit.org/show_bug.cgi?id=53962
+
+ Support handling either an array or a string for the modifier argument
+ to EventSender.keyDown.
+
+ * DumpRenderTree/gtk/EventSender.cpp:
+ (gdkModifierFromJSValue): Added this helper which factors out the
+ string comparison bits.
+ (gdkModifersFromJSValue): Test up front whether the value is a string,
+ to handle it specially.
+
+2011-02-08 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Csaba Osztrogonác.
+
+ openDatabaseSync() stop responding after too many call
+ https://bugs.webkit.org/show_bug.cgi?id=53945
+
+ Reset the database quota to a known state between each test.
+
+ Define a quota for the known origins at each test run and delete
+ all the databases.
+ This way, the database related test do not depend on previous
+ allocations.
+
+ * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+ (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
+ (WebCore::DumpRenderTree::dumpDatabaseQuota):
+ * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+ (LayoutTestController::reset):
+
+2011-02-08 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] DRT's TextInputController is unimplemented on GTK
+ https://bugs.webkit.org/show_bug.cgi?id=52997
+
+ Initial implementation of TextInputController for GTK port.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (webViewWindowObjectCleared):
+ * DumpRenderTree/gtk/TextInputController.cpp: Added.
+ (setMarkedTextCallback):
+ (insertTextCallback):
+ (unmarkTextCallback):
+ (firstRectForCharacterRangeCallback):
+ (selectedRangeCallback):
+ (getClass):
+ (makeTextInputController):
+ * DumpRenderTree/gtk/TextInputController.h: Added.
+ * GNUmakefile.am:
+
+2011-02-07 Tony Chang <tony@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ clean up python imports
+ https://bugs.webkit.org/show_bug.cgi?id=53966
+
+ Convert "import A.B.C.D as D" to "from A.B.C import D" and
+ make some imports absolute as required by PEP-8
+
+ * Scripts/webkitpy/common/checkout/scm.py:
+ * Scripts/webkitpy/common/net/irc/ircbot.py:
+ * Scripts/webkitpy/common/system/logutils.py:
+ * Scripts/webkitpy/common/system/logutils_unittest.py:
+ * Scripts/webkitpy/layout_tests/deduplicate_tests.py:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+ * Scripts/webkitpy/layout_tests/port/mac.py: Remove some unused imports
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py:
+ * Scripts/webkitpy/tool/bot/irc_command.py:
+ * Scripts/webkitpy/tool/bot/sheriffircbot.py:
+ * Scripts/webkitpy/tool/commands/download.py:
+ * Scripts/webkitpy/tool/commands/prettydiff.py:
+ * Scripts/webkitpy/tool/commands/queries.py:
+ * Scripts/webkitpy/tool/commands/roll.py:
+ * Scripts/webkitpy/tool/commands/stepsequence.py:
+ * Scripts/webkitpy/tool/commands/upload.py:
+ * Scripts/webkitpy/tool/main.py:
+
+2011-02-07 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Teach do-webcore-rename about the WebKit move to Source/
+ https://bugs.webkit.org/show_bug.cgi?id=53967
+
+ * Scripts/do-webcore-rename:
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add resource load client for injected bundle and move willSendRequest there
+ https://bugs.webkit.org/show_bug.cgi?id=53972
+
+ * MiniBrowser/mac/WebBundle/WebBundleMain.m:
+ (didCreatePage):
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::InjectedBundlePage):
+ (WTR::InjectedBundlePage::didInitiateLoadForResource):
+ (WTR::InjectedBundlePage::didReceiveResponseForResource):
+ (WTR::InjectedBundlePage::didReceiveContentLengthForResource):
+ (WTR::InjectedBundlePage::didFinishLoadForResource):
+ (WTR::InjectedBundlePage::didFailLoadForResource):
+ (WTR::InjectedBundlePage::willSendRequestForFrame):
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
+
+2011-02-07 Adam Barth <abarth@webkit.org>
+
+ Add Leopard Debug back to the core builders.
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot.py:
+ * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
+
+2011-02-07 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Jian Li.
+
+ [chromium] Remove deprecated method WebNotification::dir
+ https://bugs.webkit.org/show_bug.cgi?id=53735
+
+ * DumpRenderTree/chromium/NotificationPresenter.cpp:
+ (NotificationPresenter::show):
+
+2011-02-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove Leopard Debug as a core builder
+ https://bugs.webkit.org/show_bug.cgi?id=53971
+
+ The Leopard Debug builder has been failing to compile for several days.
+ My understanding is that folks are working on fixing the build, but for
+ the time being we should probably remove it from the list of core
+ builders so that the core waterfall can be green. We can certainly add
+ it back once the build is fixed.
+
+ Also, I've removed the Tiger builders because those no longer appear to
+ be attached to the buildbot master.
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot.py:
+ * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
+
+2011-02-01 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Adam Roben.
+
+ include svn revisions in git diffs for the code review tool to use
+ https://bugs.webkit.org/show_bug.cgi?id=53569
+
+ * Scripts/webkitpy/common/checkout/scm.py:
+ * Scripts/webkitpy/common/checkout/scm_unittest.py:
+
+2011-02-03 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Should implement EditorClientImpl::requestCheckingOfString()
+ https://bugs.webkit.org/show_bug.cgi?id=51013
+
+ Gave DRT implementation for requestTextCheck().
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::setAsynchronousSpellCheckingEnabled): Implemented.
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (invokeFinishLastTextCheck): Added.
+ (WebViewHost::requestTextCheck): Added.
+ (WebViewHost::finishLastTextCheck): Added.
+ * DumpRenderTree/chromium/WebViewHost.h:
+
+2011-02-07 Joone Hur <joone.hur@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ [Gtk] Implement layoutTestController.findString
+ https://bugs.webkit.org/show_bug.cgi?id=50237
+
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+ (LayoutTestController::findString):
+
+2011-02-07 Chang Shu <chang.shu@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ We should disable spatial navigation explicitly during the initialization
+ of DumpRenderTree.
+ https://bugs.webkit.org/show_bug.cgi?id=53928
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (resetDefaultsToConsistentValues):
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed.
+
+ Fix WebKitTestRunner build on the SL bot.
+
+ * WebKitTestRunner/Configurations/Base.xcconfig: Look for the JSC copy
+ of ICU headers.
+
+2011-02-07 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed.
+
+ [Qt][WK2] Buildfix after r77794.
+
+ WebKitTestRunner does not block remote resources or complain about them
+ https://bugs.webkit.org/show_bug.cgi?id=42139
+ <rdar://problem/8183942>
+
+ * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro: Add missing includepaths.
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed.
+
+ More bot appeasement.
+
+ * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed.
+
+ Remove accidental references to directories on my laptop.
+
+ * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
+
+2011-02-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ WebKitTestRunner does not block remote resources or complain about them
+ https://bugs.webkit.org/show_bug.cgi?id=42139
+ <rdar://problem/8183942>
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::willSendRequestForFrame): Implement the required
+ checks (using KURL, to avoid need to invent a whole URL API).
+ * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Link WebCore
+ directly to get at KURL symbols.
+
+2011-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Daniel Bates.
+
+ Add WebKit2 bot to list of expected builders in Python regression test results.
+ https://bugs.webkit.org/show_bug.cgi?id=53905
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
+
+2011-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Ryosuke Niwa.
+
+ Update test expectations for new core builder
+ https://bugs.webkit.org/show_bug.cgi?id=53904
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
+
+2011-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by David Levin.
+
+ Add WebKit2 test bot to core builders
+ https://bugs.webkit.org/show_bug.cgi?id=53901
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot.py:
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Another unreviewed Chromium build fix.
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::pathToLocalResource):
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed Chromium build fix.
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::pathToLocalResource):
+
+2011-02-06 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
+ https://bugs.webkit.org/show_bug.cgi?id=52867
+
+ * DumpRenderTree/chromium/ImageDiff.cpp:
+ (Image::craeteFromStdin): Call adoptArrayPtr.
+
+2011-02-06 James Kozianski <koz@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ Add classes for representing test outputs.
+ https://bugs.webkit.org/show_bug.cgi?id=52136
+
+ These classes will make it easier to write scripts that deal with test
+ outputs such as rebaselining and deduping scripts. The intent is that
+ eventually we will be have buildbot return TestOutputs for a
+ particular build which can be compared with TestOutputs derived from a
+ local LayoutTests directory.
+
+ * Scripts/webkitpy/common/net/testoutput.py: Added.
+ * Scripts/webkitpy/common/net/testoutput_unittest.py: Added.
+ * Scripts/webkitpy/common/net/testoutputset.py: Added.
+ * Scripts/webkitpy/common/net/testoutputset_unittest.py: Added.
+ * Scripts/webkitpy/common/system/zip_mock.py: Added.
+
+2011-02-06 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Clear page's groupName even when not in DRT
+ https://bugs.webkit.org/show_bug.cgi?id=53874
+
+ * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+ (WebCore::DumpRenderTree::windowCloseRequested):
+
+2011-02-06 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Add dependencies for Visual Studio projects
+ https://bugs.webkit.org/show_bug.cgi?id=53773
+
+ Add a WebKit dependecy to WinCELauncher, so CMake can
+ generate the correct build order for the solution.
+
+ * CMakeListsWinCE.txt:
+
+2011-02-06 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] MiniBrowser: Clean up handling of titleChanged() signal
+ https://bugs.webkit.org/show_bug.cgi?id=53869
+
+ * MiniBrowser/qt/BrowserView.cpp:
+ (BrowserView::BrowserView): Remove unnecessary titleChanged() handling.
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow): Connect titleChanged() directly to setWindowTitle().
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-02-06 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKitTestRunner needs layoutTestController.setWillSendRequestReturnsNull
+ https://bugs.webkit.org/show_bug.cgi?id=42690
+ <rdar://problem/8213851>
+
+ * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::willSendRequestForFrame):
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+ (WTR::LayoutTestController::LayoutTestController):
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+ (WTR::LayoutTestController::willSendRequestReturnsNull):
+ (WTR::LayoutTestController::setWillSendRequestReturnsNull):
+
+2011-02-05 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77720.
+ http://trac.webkit.org/changeset/77720
+ https://bugs.webkit.org/show_bug.cgi?id=53854
+
+ "Broke nrwt on Chromium win." (Requested by dglazkov|away on
+ #webkit).
+
+ * Scripts/webkitpy/common/system/executive.py:
+
+2011-02-05 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r77725.
+ http://trac.webkit.org/changeset/77725
+ https://bugs.webkit.org/show_bug.cgi?id=53844
+
+ It broke Qt minimal build (Requested by Ossy_ on #webkit).
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::createChrome):
+ * QtTestBrowser/launcherwindow.h:
+ (WindowOptions::WindowOptions):
+ * QtTestBrowser/main.cpp:
+ (LauncherApplication::handleUserOptions):
+
+2011-02-04 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Adam Barth.
+
+ [GTK] plugins/plugin-document-back-forward.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53833
+
+ Add the new "alert on load" functionality for the Unix version of the
+ test plugin. This functionality was originally introduced in r77706.
+
+ * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
+ (webkit_test_plugin_new_instance): Add new plugin fuctionality.
+
+2011-02-04 Kundu Suchismita <suchi.kundu@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ Local Storage settings can be enable/disable from "Develop" menu
+ https://bugs.webkit.org/show_bug.cgi?id=52296
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::createChrome):
+ (LauncherWindow::toggleLocalStorage):
+ (LauncherWindow::toggleOfflineStorageDatabase):
+ (LauncherWindow::toggleOfflineWebApplicationCache):
+ (LauncherWindow::setOfflineStorageDefaultQuota):
+ * QtTestBrowser/launcherwindow.h:
+ (WindowOptions::WindowOptions):
+ * QtTestBrowser/main.cpp:
+ (LauncherApplication::handleUserOptions):
+
+2011-02-04 Tony Chang <tony@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ get test-webkitpy running on win32 python
+ https://bugs.webkit.org/show_bug.cgi?id=53822
+
+ The test harness crashes with a WindowsError because it can't find
+ 'svn' when using subprocess.Popen. This gets us past the error
+ so we can see the failing tests on the Chromium Win Release Tests
+ bot.
+
+ * Scripts/webkitpy/common/system/executive.py:
+
+2011-02-04 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] fast/events/pagehide-timeout.html fails
+ https://bugs.webkit.org/show_bug.cgi?id=53771
+
+ Add knowledge of the document browser cache model the DRT. When resetting
+ WebKit settings to consistent values between tests, default to the document
+ browser cache model.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (resetDefaultsToConsistentValues): Reset the cache model to the document browser
+ cache model between tests.
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+ (LayoutTestController::setCacheModel): An int value of 2 here corresponds to the
+ document browser cache model.
+
+2011-02-04 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ PluginDocuments don't create widgets for plugins on back/forward
+ https://bugs.webkit.org/show_bug.cgi?id=53474
+
+ Teach the test plugin how to call alert on load.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+
+2011-02-04 Adam Roben <aroben@apple.com>
+
+ Add a test case for encode/decode of FormData/FormDataElement
+
+ If the fix made in r77401 is broken, this new test will crash.
+
+ Fixes <http://webkit.org/b/53616> <rdar://problem/8949883>.
+
+ Reviewed by Sam Weinig.
+
+ * TestWebKitAPI/Test.h: Moved the bulk of TEST_ASSERT into a new _TEST_ASSERT_HELPER macro.
+ Added a new TEST_ASSERT_RETURN macro that can be used in functions with a return value.
+
+ * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp: Added.
+ (TestWebKitAPI::didFinishLoadForFrame): Record that the load is finished.
+ (TestWebKitAPI::setPageLoaderClient): Hook up the loader client.
+ (TestWebKitAPI::createSessionStateContainingFormData): Load simple-form.html, submit the
+ form, an return the session state data.
+ (TestWebKitAPI::TEST): Create some session state that contains form data from one WKPage,
+ and restore it into another WKPage.
+
+ * TestWebKitAPI/Tests/WebKit2/simple-form.html: Added.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/win/TestWebKitAPI.vcproj:
+ * TestWebKitAPI/win/copy-resources.cmd:
+ Added new files.
+
+2011-02-04 Adam Roben <aroben@apple.com>
+
+ Move code to run JavaScript tests into its own files
+
+ This will allow other tests to use this mechanism.
+
+ Fixes <http://webkit.org/b/53806> SpacebarScrolling should share its JavaScript-fu with the
+ world
+
+ Reviewed by Sam Weinig.
+
+ * TestWebKitAPI/JavaScriptTest.cpp: Added.
+ * TestWebKitAPI/JavaScriptTest.h: Added.
+ Moved code here...
+
+ * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: ...from here.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/win/TestWebKitAPI.vcproj:
+ Added the new files.
+
+2011-02-04 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ merge test expectations for chromium, chromium-gpu. The
+ chromium-gpu port will no longer maintain its own
+ test expectations file.
+
+ Also add in a graphics_type() call on the port object to
+ determine what graphics type to use in the test configuration,
+ and log the configuration as a config setting.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53562
+
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
+
+2011-02-04 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: fix processing Unicode literals from .js sources in check-inspector-strings.
+ https://bugs.webkit.org/show_bug.cgi?id=53781
+
+ * Scripts/check-inspector-strings:
+
+2011-02-04 Adam Roben <aroben@apple.com>
+
+ Include the crashing function in the link to a crash log on Mac
+
+ Fixes <http://webkit.org/b/53780> Crash log links in results.html should include the
+ function that crashed on Mac
+
+ Reviewed by David Kilzer.
+
+ * Scripts/old-run-webkit-tests:
+ (crashLocation): Moved all the Windows code inside an if instead of using an early return,
+ but didn't otherwise change it. Added an if for Mac that parses the crashing function out of
+ the crash log.
+
+2011-02-04 Adam Roben <aroben@apple.com>
+
+ Link to Mac crash logs from results.html
+
+ Fixes <http://webkit.org/b/14861> run-webkit-tests should link to Mac crash logs in
+ results.html
+
+ Reviewed by David Kilzer.
+
+ * Scripts/old-run-webkit-tests:
+ (captureSavedCrashLog): Added a case for Apple's Mac port. We get the crash log out of
+ ~/Library/Logs/CrashReporter, and wait for ReportCrash to exit before trying to get the log.
+
+2011-02-03 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
+ https://bugs.webkit.org/show_bug.cgi?id=52897
+ <rdar://problem/8898294>
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::InjectedBundlePage):
+ (WTR::InjectedBundlePage::willSendRequestForFrame):
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
+
+2011-02-03 Ivan Krstić <ike@apple.com>
+
+ Unreviewed.
+
+ Adding myself to committers.py.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * Scripts/build-webkit:
+
+2011-02-03 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ [NRWT] Remove TestArgs class, which is wrongly used.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53063
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
+ * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
+ * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
+ * Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py:
+ * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
+
+2011-02-03 Andrew Wason <rectalogic@rectalogic.com>
+
+ Reviewed by Kenneth Russell.
+
+ Change ENABLE_3D_CANVAS to ENABLE_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=53714
+
+ * Scripts/build-webkit: change --3d-canvas build option
+ to set ENABLE_WEBGL
+
+2011-02-03 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [NRWT] Introduces Input/Output class used by base.Driver into port/base.py and
+ move _run_single_test() and _process_output() functions from
+ dump_render_tree_thread.py to a single_test_runner.py as an individual module.
+
+ This is clean up and acts as a preparation for elimination of test_types/*
+ classes. These classes will move to the single_test_runner module introduced
+ in this patch.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53004
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py: Added.
+ * Scripts/webkitpy/layout_tests/layout_package/test_input.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_output.py: Removed.
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+ * Scripts/webkitpy/layout_tests/port/dryrun.py:
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
+ * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
+ * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ Delete a line that was accidentally missed in r77586; without it
+ there is still a race between the two threads.
+
+ https://bugs.webkit.org/show_bug.cgi?id=51572
+
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ nrwt: handle "broken pipe" notifications from DRT more cleanly.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52927
+
+ * Scripts/webkitpy/layout_tests/port/server_process.py:
+ * Scripts/webkitpy/layout_tests/port/server_process_unittest.py:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ Update, resubmit change to bug 51572. I think the race that was
+ fixed in r76703 caused the hang that caused us to roll this
+ patch out before, so I'd like to try again.
+
+ https://bugs.webkit.org/show_bug.cgi?id=51572
+
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
+ * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
+
+2011-02-03 Daniel Cheng <dcheng@chromium.org>
+
+ Unreviewed.
+
+ Adding myself to committers.py.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-02-03 Adam Roben <aroben@apple.com>
+
+ Include the crashing function in the link to a crash log
+
+ Fixes <http://webkit.org/b/53739> Crash log links in results.html should include the
+ function that crashed
+
+ Reviewed by David Kilzer.
+
+ * Scripts/old-run-webkit-tests:
+ (crashLocation): Added. Returns the location of the crash.
+ (linksForErrorTest): Include the crash location in the link text for the crash log, if one
+ could be determined.
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ Actually make the changes suggested by Mihai in his review
+ of bug 53720 :(
+
+ https://bugs.webkit.org/show_bug.cgi?id=53720
+
+ * Scripts/webkitpy/layout_tests/port/test_files.py:
+ * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: Fix bug introduced in r77434 that was
+ causing us to run the canvas GPU tests on the Mac GPU port. This
+ bug revealed that we were not setting the port.name() field
+ properly in many cases, so I've cleaned up all of that code, and
+ removed a few comments about "version-specific" GPU ports that
+ don't exist and just confused things.
+
+ Testing also revealed that port.abspath_for_test() wasn't
+ normalizing paths on Windows properly, so I fixed that as well.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53719
+
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
+
+2011-02-03 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: fix normalization of paths on windows when gathering files
+
+ r77434 introduced a bug that was causing the test expectations
+ for the GPU ports to not be treated properly. It turns out that
+ when we gathered the list of test files on Windows, we would
+ return paths of the form "c:\LayoutTests/fast/canvas", and the
+ mixture of backslashes and forward slashes was confusing things.
+
+ This patch normalizes all of the filenames returned from
+ test_files.find(), and adds better tests for this (fixing a
+ couple of other bugs found in the meantime).
+
+ https://bugs.webkit.org/show_bug.cgi?id=53720
+
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ * Scripts/webkitpy/layout_tests/port/test_files.py:
+ * Scripts/webkitpy/layout_tests/port/test_files_unittest.py:
+
+2011-02-03 Adam Roben <aroben@apple.com>
+
+ Add links to Windows crash logs in results.html
+
+ Fixes <http://webkit.org/b/53718> run-webkit-tests should link to Windows crash logs in
+ results.html
+
+ Reviewed by David Kilzer.
+
+ * Scripts/old-run-webkit-tests:
+ (top level): Added $crashLogTag and $windowsCrashLogFilePrefix (which came from
+ createDebuggerCommandFile).
+ (testCrashedOrTimedOut): If the test crashed, capture any saved crash log after the dump
+ tool has exited.
+ (captureSavedCrashLog): Added. Finds the crash log for the test that just crashed and moves
+ it into the test results directory tree. Only implemented for Cygwin currently.
+ (findNewestFileMatchingGlob): Added. Does what it says.
+ (htmlForResultsSection): Only link to files that exist.
+ (linksForErrorTest): Add a link to the crash log.
+ (deleteExpectedAndActualResults): Delete any old crash log for this test.
+ (createDebuggerCommandFile): Use the new $windowsCrashLogFilePrefix constant instead of
+ hardcoding it here.
+
+2011-02-03 Adam Roben <aroben@apple.com>
+
+ Tell the debugger the path to the WebKit source tree when saving a crash log
+
+ This allows the debugger to include the crashing line of code in the log.
+
+ Fixes <http://webkit.org/b/53678> Crash logs from buildslaves don't show the crashing line
+ of code
+
+ Reviewed by Sam Weinig.
+
+ * Scripts/old-run-webkit-tests:
+ (createDebuggerCommandFile): Added. Saves commands that we'd like the debugger to run to a
+ file and returns the path to that file. The commands we pass came from
+ setUpWindowsCrashLogSaving, but I've added a .srcpath command to tell the debugger where the
+ WebKit source code lives.
+ (setUpWindowsCrashLogSaving): Instead of specifying the commands directly on the command
+ line using -c, save them to a file and specify the path to that file using -cf. This works
+ around what is presumably a bug in Windows's command line parsing, where having multiple
+ quoted paths in the debugger commands causes the post-mortem debugger not to be invoked at
+ all. Also pulled the options we pass to the debugger out into a list that is then join()ed
+ together to make them easier to modify in the future.
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add notification of the end of a rubber band.
+ <rdar://problem/8940648>
+
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (-[BrowserWindowController awakeFromNib]):
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::createOtherPage):
+ (WTR::TestController::initialize):
+ Stub out the new WKUIClient function.
+
+2011-02-03 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Unreviewed.
+
+ Adding myself to committers.py.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-02-03 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt][WK2] MiniBrowser's window size should be 800x600
+ https://bugs.webkit.org/show_bug.cgi?id=53670
+
+ Make layout test failure debugging easier.
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+
+2011-02-02 Andy Estes <aestes@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ 'update-webkit' should handle OpenSource and Internal using different
+ VCSs.
+
+ * Scripts/update-webkit: Re-check the VCS type when updating Apple's
+ Internal directory.
+
+2011-02-02 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: hardcode the directories to scan for tests
+ for GPU bots instead of SKIPping them. See bug 53562 for some
+ context, but we will now hard-code the list of directories to
+ use by default instead of skipping over directories in the
+ expectations file. We do this so that we will be able to merge
+ the expectations files without getting conflicting SKIP
+ directives. Note that this change will reduce the # of tests
+ being run on the Mac GPU bots, because we're accidentally
+ including some today.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53631
+
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py:
+
+2011-02-02 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Beth Dakin.
+
+ Add ChromeClient function to paint custom overhang areas.
+ https://bugs.webkit.org/show_bug.cgi?id=53639
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::InjectedBundlePage):
+ Stub out new callback.
+
+2011-02-02 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: support chromium code paths in mock_drt
+
+ https://bugs.webkit.org/show_bug.cgi?id=53471
+
+ * Scripts/webkitpy/layout_tests/port/mock_drt.py:
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
+
+2011-02-02 Adam Klein <adamk@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Update new-run-webkit-tests --chromium to put output under Source/...
+ https://bugs.webkit.org/show_bug.cgi?id=53612
+
+ * BuildSlaveSupport/test-result-archive:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+
+2011-01-28 Tony Chang <tony@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ [chromium] remove --use-test-shell from NRWT
+ https://bugs.webkit.org/show_bug.cgi?id=53346
+
+ I've already started removing some of the bindings like eventSender so
+ this already doesn't work isn't useful. Also updated some comments to
+ refer to DRT instead of test_shell.
+
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_linux.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_win.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * Scripts/build-webkit:
+
+2011-02-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fixes for wxWebKit.
+
+ * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
+ (LayoutTestController::setSerializeHTTPLoads):
+ * wx/browser/wscript:
+ * wx/build/build_utils.py:
+ * wx/build/settings.py:
+
+2011-02-01 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: stop skipping so many tests
+
+ r77163 introduced a regression where we weren't resetting test
+ expectations properly and were skipping too many tests as a
+ result. This patch fixes that and adds a test for it.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53551
+
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
+
+2011-02-01 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: add first stub of test_runner2. This
+ will add support for the 'inline', 'threads', and 'processes'
+ flags to --worker-model, but for now the implementatios just
+ fall back on the old ones.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53157
+
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+
+2011-02-01 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by James Robinson.
+
+ [Chromium] run-chromium-webkit-unit-tests looks for binaries in the wrong place
+ https://bugs.webkit.org/show_bug.cgi?id=53522
+
+ * Scripts/run-chromium-webkit-unit-tests:
+
+2011-02-01 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Mihai Parparita.
+
+ Using Control-C to cancel webkit-patch or other python tools causes
+ unpleasant traceback console spew
+ https://bugs.webkit.org/show_bug.cgi?id=53462
+
+ Catch the exception and don't print the stack trace.
+
+ * Scripts/webkit-patch:
+
+2011-02-01 Scott Cameron <sccameron@rim.com>
+
+ Reviewed by Daniel Bates.
+
+ Use Windows format for MinGW HTTPD path.
+ https://bugs.webkit.org/show_bug.cgi?id=53503
+
+ * Scripts/webkitperl/httpd.pm:
+ - Use single-quotes around MySys value for $httpdPath in getHTTPDPath()
+ so that we don't have to escape the space characters in the path. Also,
+ changed path to Windows-style path and removed FIXME comment.
+
+2011-02-01 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Add a way to use shared process model in MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=53090
+
+ * MiniBrowser/qt/BrowserView.cpp:
+ (BrowserView::BrowserView): Removed the m_context member.
+ From now the context is guaranteed to be non-null and we
+ don't need to store that in the object.
+ * MiniBrowser/qt/BrowserView.h:
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ Added static bool to determine that new windows need to be
+ created with their own context or not. Use the same context
+ and web process by default to be inilne with the other ports.
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::newWindow):
+ * MiniBrowser/qt/BrowserWindow.h:
+ * MiniBrowser/qt/main.cpp:
+ (main): Added command line switch to be able to use the
+ non-shared process model. Simplify the handling of the command line
+ switches a little bit.
+
+2011-02-01 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add Window menu and Toggle FullScreen action to MiniBrowser.
+ https://bugs.webkit.org/show_bug.cgi?id=53491
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::toggleFullScreenMode):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-02-01 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add Toggle Frame Flattening, Auto Load Images and Disable JavaScript actions to MiniBrowser.
+ https://bugs.webkit.org/show_bug.cgi?id=53489
+
+ Add Toggle Frame Flattening action to Develop menu. Add Auto Load Images and Disable JavaScript actions
+ to Settings menu.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::toggleFrameFlattening):
+ (BrowserWindow::toggleDisableJavaScript):
+ (BrowserWindow::toggleAutoLoadImages):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-01-31 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] Switch chromium-mac to use ChromiumDriver
+ https://bugs.webkit.org/show_bug.cgi?id=53461
+
+ For the sake of consistency with the other Chromium platforms (and so
+ that chromium-mac picks up special flags like --enable-hardware-gpu),
+ switch chromium-mac from the WebKitDriver to ChromiumDriver.
+
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+
+2011-01-31 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ The current modifier parsing code in test_expectations is
+ fragile and hard-coded, so it's not easy to understand the logic
+ or easily add new types of modifiers (like GPU vs. CPU testing
+ for graphics tests, or 32-bit vs. 64-bit differences).
+
+ This is the first of two patches that will add in more generic
+ support and then eliminate the GPU-specific test expectations
+ files for Chromium.
+
+ This patch adds two standalone objects for handling modifiers. The
+ rules for interpreting modifiers, precedence, and conflicts are
+ given in the docstring to the ModifierMatcher class, which
+ returns ModifierMatchResult objects.
+
+ This patch also adds routines to the Port interface and a
+ default set of values in the base object, in order to obtain the
+ values needed on a given test run. These values are then passed
+ to the expectation parser. This also allows us to clean up the
+ logic used to lint all of the different configurations in a
+ single test_expectations.txt file.
+
+ The next patch will merge in the separate GPU expectations file.
+
+ https://bugs.webkit.org/show_bug.cgi?id=51222
+
+ * Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/base_unittest.py:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+ * Scripts/webkitpy/layout_tests/port/port_testcase.py:
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ * Tools/Scripts/webkitpy/style/checkers/test_expectations.py:
+ * Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
+
+2011-01-31 Scott Cameron <sccameron@rim.com>
+
+ Reviewed by Daniel Bates.
+
+ update run-webkit-httpd to be able to launch Apache2.2 in a MSYS environment
+ https://bugs.webkit.org/show_bug.cgi?id=50036
+
+ This will add an Apache2.2 configuration file and modifies scripts to allow
+ running an httpd server in an MSYS environment.
+
+ The default Apache2.2 installation path has been preserved and PHP5 modules disabled
+ in order to allow for simple installation/execution. Simply install the latest
+ Apache2.2 version with OpenSSL from http://httpd.apache.org/download.cgi#apache22 to
+ be able to execute run-webkit-httpd.
+
+
+ * Scripts/run-webkit-httpd:
+ * Scripts/webkitperl/httpd.pm:
+
+2011-01-31 Tony Chang <tony@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ mac DRT should report RTL scroll offset relative to top right corner
+ https://bugs.webkit.org/show_bug.cgi?id=53324
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (dumpFrameScrollPosition):
+
+2011-01-31 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add Take Screen Shot action to MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=53422
+
+ Add Take Screen Shot action to MiniBrowser's view menu.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::screenshot):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-01-31 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] REGRESSION: http/tests/media/video-{cookie,referer}.html failing
+ https://bugs.webkit.org/show_bug.cgi?id=53379
+
+ Remove left over #ifdef's. I thought all of the conditional code
+ had been freed from the condition, but I forgot to check DRT.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (resetDefaultsToConsistentValues):
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+ (LayoutTestController::setAlwaysAcceptCookies):
+
+2011-01-30 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ Fix regression introduced in r77093 - path.rsplit() doesn't
+ take keyword arguments.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53326
+
+ * Scripts/webkitpy/common/system/filesystem_mock.py:
+
+2011-01-30 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Add more unit tests for rebaseline-chromium-webkit-tests. This
+ change involves restructuring a bunch of r-c-w-t code to make it
+ more testable as well. We also add wrapper classes for handling
+ testing zip files and fetching URLs.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53040
+
+ * Scripts/webkitpy/common/system/urlfetcher.py:
+ * Scripts/webkitpy/common/system/urlfetcher_mock.py:
+ * Scripts/webkitpy/common/system/zipfileset_mock.py:
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
+ * Scripts/webkitpy/tool/mocktool.py:
+
+2011-01-30 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Clean up of the filesystem-related modules used in webkitpy.
+ I've added relpath() to the filesystem interface, modified
+ ospath.relpath() so that it could work with the filesystem
+ interface, and modified the fileset* routines to use the
+ filesystem interface consistently.
+
+ This patch also adds a close() routine to the fileset routines
+ to indicate that the caller is done with the fileset. This
+ allows zipfileset to clean up after itself when it creates
+ tempfiles to store downloads.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53326
+
+ * Scripts/webkitpy/common/system/directoryfileset.py:
+ * Scripts/webkitpy/common/system/fileset.py:
+ * Scripts/webkitpy/common/system/filesystem.py:
+ * Scripts/webkitpy/common/system/filesystem_mock.py:
+ * Scripts/webkitpy/common/system/filesystem_unittest.py:
+ * Scripts/webkitpy/common/system/ospath.py:
+ * Scripts/webkitpy/common/system/zipfileset.py:
+ * Scripts/webkitpy/common/system/zipfileset_unittest.py:
+
+2011-01-30 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt][WK2]REGRESSION (r76991): Fix build errors
+ https://bugs.webkit.org/show_bug.cgi?id=53400
+
+ Revert the temporary build fix (http://trac.webkit.org/changeset/77088)
+ and remove WebKit2Prefix.h from the build.
+ * MiniBrowser/qt/MiniBrowser.pro:
+
+2011-01-30 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed.
+
+ [Qt][WK2] Buildfix.
+
+ * MiniBrowser/qt/MiniBrowser.pro:
+
+2011-01-28 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Adam Roben.
+
+ define NOMINMAX when building ImageDiff, as we do elsewhere.
+
+ Add various clampToInt() methods to MathExtras.h
+ https://bugs.webkit.org/show_bug.cgi?id=52910
+
+ * DumpRenderTree/win/ImageDiffCommon.vsprops:
+
+2011-01-28 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WebKitTestRunner needs layoutTestController.setPOSIXLocale
+ https://bugs.webkit.org/show_bug.cgi?id=42682
+
+ * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::resetLocalSettings):
+ (WTR::InjectedBundle::didReceiveMessage):
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+ (WTR::LayoutTestController::setPOSIXLocale):
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ test-webkitpy: fix webkitpy.layout_tests.port.mac_unittest.MacTest.test_skipped_file_paths
+
+ This patch re-enables this test and changes it to
+ handle all of the mac platform versions, not just the one
+ it is running on.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53356
+
+ * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ Take two. The fix in 77023 didn't work, because we were
+ still calling path.abspath_to_uri, which calls _cygpath under
+ the covers, and it appears the cygpath on the bots does
+ something different than it does on my machine. This patch
+ removes the calls to path.abspath_to_uri, so it should be safe.
+ If it doesn't work, I'll roll it out along with r76982 and 77023.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53126
+
+ * Scripts/webkitpy/layout_tests/port/test.py:
+
+2011-01-28 David Kilzer <ddkilzer@apple.com>
+
+ <rdar://problem/8930699> build-webkit gives a bogus warning with newer versions of Xcode
+ <http://webkit.org/b/53353>
+
+ Reviewed by Mark Rowe.
+
+ * Scripts/webkitdirs.pm:
+ (checkRequiredSystemConfig): Check the Xcode marketing version
+ in addition to the DevCoreTools build version before complaining
+ about an old version of Xcode. Also make the Mac OS X version
+ check use Perl's built-in version string comparitor.
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ Work around breakage on Win 7 Release bot caused by r76982
+ and the fact that windows ports use "file:////" instead of
+ "file:///". Ideally the test code should be isolated from
+ this, but it isn't yet. Will fix properly in a bit.
+
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: change worker model values to
+ "old-inline", "old-threads" in preparation for test_runner2 /
+ multiprocessing changes.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53156
+
+ * Scripts/webkitpy/layout_tests/layout_package/test_runner.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/chromium_mac.py:
+ * Scripts/webkitpy/layout_tests/port/mac.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ committers.py - add an IRC nickname for dpranke
+ https://bugs.webkit.org/show_bug.cgi?id=53335
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-01-28 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: add a "mock DRT" port implementation
+ and a separate class that emulates what we expect the
+ DumpRenderTree behavior to be.
+
+ This will eventually replace port/dryrun.py and allow us to get
+ better test coverage of the new-run-webkit-tests code as well as
+ a reference for what new-run-webkit-tests expects from DRT.
+
+ This is the first attempt at this, and it is pretty bare-boned. It
+ really only has been tested on the 'mac' port (and a little on
+ the 'chromium-mac' port.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53126
+
+ * Scripts/webkitpy/common/system/filesystem_mock.py:
+ * Scripts/webkitpy/layout_tests/port/dryrun.py:
+ * Scripts/webkitpy/layout_tests/port/factory.py:
+ * Scripts/webkitpy/layout_tests/port/mock_drt.py: Added.
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Added.
+ * Scripts/webkitpy/layout_tests/port/test.py:
+
+2011-01-28 Pratik Solanki <psolanki@apple.com>
+
+ Unreviewed. Removing .swp file checked in by mistake.
+
+ * Scripts/.webkitdirs.pm.swp: Removed.
+
+2011-01-28 Pratik Solanki <psolanki@apple.com>
+
+ Reviewed by David Kilzer.
+
+ Space not necessary for undefined feature
+ https://bugs.webkit.org/show_bug.cgi?id=53317
+
+ * Scripts/build-webkit:
+
+2011-01-28 Chang Shu <chang.shu@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ Reset NetworkAccessManager to clean up credentials from previous tests.
+ This change causes no performance overhead either.
+ https://bugs.webkit.org/show_bug.cgi?id=36688
+
+ * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+ (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
+ (WebCore::DumpRenderTree::open):
+ * DumpRenderTree/qt/DumpRenderTreeQt.h:
+
+2011-01-28 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add Zoom Text Only action to MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=53297
+
+ Add Zoom Text Only action to MiniBrowser's view menu, change zoom levels to avoid unnecessary divides.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::zoomIn):
+ (BrowserWindow::zoomOut):
+ (BrowserWindow::resetZoom):
+ (BrowserWindow::toggleZoomTextOnly):
+ (BrowserWindow::applyZoom):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-01-28 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add webkit-patch roll-chromium-deps
+ https://bugs.webkit.org/show_bug.cgi?id=53288
+
+ This command updates the Source/WebKit/chromium/DEPS file with the
+ last-known good revision of Chromium (or a revision specified on the
+ command line). I'd eventually like to turn this into a SheriffBot
+ command, but this is the first step.
+
+ This patch somewhat sprawled because I needed to move a bunch of code
+ out of ChangeLog that should never have been there in the first place.
+ Also, I had to fix a bug in MockUser in order to test the new command.
+
+ * Scripts/webkitpy/common/checkout/api.py:
+ * Scripts/webkitpy/common/checkout/changelog.py:
+ * Scripts/webkitpy/common/checkout/changelog_unittest.py:
+ * Scripts/webkitpy/common/checkout/deps.py: Added.
+ * Scripts/webkitpy/common/config/urls.py:
+ * Scripts/webkitpy/tool/commands/__init__.py:
+ * Scripts/webkitpy/tool/commands/download_unittest.py:
+ * Scripts/webkitpy/tool/commands/roll.py: Added.
+ * Scripts/webkitpy/tool/commands/roll_unittest.py: Added.
+ * Scripts/webkitpy/tool/commands/upload_unittest.py:
+ * Scripts/webkitpy/tool/mocktool.py:
+ * Scripts/webkitpy/tool/steps/__init__.py:
+ * Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py: Added.
+ * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
+ * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py: Added.
+ * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
+ * Scripts/webkitpy/tool/steps/updatechromiumdeps.py: Added.
+ * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
+
+2011-01-27 Greg Coletta <greg.coletta@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Get rid of prefix header dependency for WebKit2 build system
+ https://bugs.webkit.org/show_bug.cgi?id=50174
+
+ Change the style checker so that it enforces config.h include for
+ WebKit2.
+
+ * Scripts/webkitpy/style/checker.py:
+
+2011-01-27 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Adler.
+
+ execCommand("Paste") doesn't work in WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=52785
+
+ Enable both of the settings needed to allow paste.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::resetStateToConsistentValues):
+
+2011-01-27 Jacob Dinu <dinu.jacob@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] QtTestBrowser: User input lost when toggling use of QGraphicsView
+ https://bugs.webkit.org/show_bug.cgi?id=48440
+
+ Preserve user input when toggling use of QGraphicsView
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::initializeView):
+ (LauncherWindow::loadFinished):
+ * QtTestBrowser/launcherwindow.h:
+ * QtTestBrowser/mainwindow.cpp:
+ (MainWindow::addressUrl):
+ * QtTestBrowser/mainwindow.h:
+
+2011-01-27 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ new-run-webkit-tests: turn off pixel tests correctly by default
+ for webkit-based ports. r70013 (bug 47510) used
+ port.set_option_default() to attempt to set default values, but
+ that didn't work correctly. I have removed set_option_default
+ for now since it was only being used in two places and in three
+ useless unit tests. There is a separate bug open to fix the
+ option parsing (48095), so this workaround is fine for now.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53217
+
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/base_unittest.py:
+
+2011-01-27 Balazs Kelemen <kbalazs@webkit.org>
+
+ Rubber-stamped by Ariya Hidayat.
+
+ Trivial crash fix in WTR.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::initialize): Increase the size
+ of the vector by one to be able to store the null character.
+
+2011-01-27 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt][WK2] WTR should be initialized in the same way as DRT
+ https://bugs.webkit.org/show_bug.cgi?id=53240
+
+ * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp:
+ (WTR::activateFonts): Added missing initialization steps.
+
+2011-01-27 Joone Hur <joone.hur@collabora.co.uk>
+
+ Unreviewed.
+
+ Adding myself to committers.py.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2011-01-27 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] [Symbian] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ Fix the Symbian build after the project files
+ are moved to Source directory. On Symbian qmake
+ needs to run in the same directory where the main
+ pro files (WebKit.pro, Tools.pro) are located.
+
+ * Scripts/webkitdirs.pm: Change to the directory where the pro file
+ is located before running qmake for Symbian. Qmake on Symbian
+ does not properly honor the "-o" option, work it around by setting
+ the name of the Makefile to bld.inf.
+
+2011-01-27 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add simple zooming features to MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=53231
+
+ Add View menu and Zoom In, Zoom Out, Zoom Reset actions to MiniBrowser.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::zoomIn):
+ (BrowserWindow::zoomOut):
+ (BrowserWindow::resetZoom):
+ (BrowserWindow::updateUserAgentList):
+ (BrowserWindow::applyZoom):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-01-26 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ WebKitTestRunner needs to support layoutTestController.evaluateInWebInspector
+ https://bugs.webkit.org/show_bug.cgi?id=42319
+
+ Add evaluateInWebInspector and other APIs needed for inspector tests to run.
+
+ * WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl:
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+ (WTR::LayoutTestController::showWebInspector):
+ (WTR::LayoutTestController::closeWebInspector):
+ (WTR::LayoutTestController::evaluateInWebInspector):
+ (WTR::LayoutTestController::setTimelineProfilingEnabled):
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::shouldOpenWebInspector):
+ (WTR::TestInvocation::invoke):
+ * WebKitTestRunner/WebKitTestRunnerPrefix.h:
+
+2011-01-26 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Pixel dumps do not include scrollbars in output images
+ https://bugs.webkit.org/show_bug.cgi?id=53216
+
+ Show scrollbars in pixel dumps. This will fix pixel dumps for tests
+ that have scrollbars.
+
+ * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
+ (createBitmapContextFromWebView): Take the snapshot of the containing GtkScrolledWindow
+ instead of the web view itself.
+
+2011-01-26 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Fix regression introduced in r76322 ... new-run-webkit-tests
+ was attempting to save the image diff output as a UTF-8-encoded
+ file.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53210
+
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+
+2011-01-26 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r76709.
+ http://trac.webkit.org/changeset/76709
+ https://bugs.webkit.org/show_bug.cgi?id=53194
+
+ "broke python tests on non-snowleopard platforms" (Requested
+ by dpranke on #webkit).
+
+ * Scripts/webkitpy/layout_tests/port/factory.py:
+ * Scripts/webkitpy/layout_tests/port/mock_drt.py: Removed.
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Removed.
+
+2011-01-26 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests: add a "mock DRT" port implementation
+ and a separate class that emulates what we expect the
+ DumpRenderTree behavior to be.
+
+ This will eventually replace port/dryrun.py and allow us to get
+ better test coverage of the new-run-webkit-tests code as well as
+ a reference for what new-run-webkit-tests expects from DRT.
+
+ This is the first attempt at this, and it is pretty bare-boned. It
+ really only has been tested on the 'mac' port (and a little on
+ the 'chromium-mac' port.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53126
+
+ * Scripts/webkitpy/layout_tests/port/mock_drt.py: Added.
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py: Added.
+ * Scripts/webkitpy/layout_tests/port/factory.py:
+
+2011-01-26 Xianzhu Wang <wangxianzhu@google.com>
+
+ Reviewed by Tony Chang.
+
+ Add '--no-timeout' option to Chromium DRT to ease debugging.
+ https://bugs.webkit.org/show_bug.cgi?id=52873
+
+ * DumpRenderTree/chromium/DumpRenderTree.cpp:
+ (main):
+
+2011-01-26 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Fix qt_minimal build
+ https://bugs.webkit.org/show_bug.cgi?id=53172
+
+ * QtTestBrowser/locationedit.h:
+
+2011-01-26 Mansi Mithal <mansi.mithal@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ QtTestBrowser should have a UI Setting to disable plugins
+ https://bugs.webkit.org/show_bug.cgi?id=52408
+
+ Added a new action item named "Disable Plugins"
+ under the "Settings" menu.
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::createChrome):
+ (LauncherWindow::togglePlugins):
+ * QtTestBrowser/launcherwindow.h:
+
+2011-01-25 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Move main CMakeLists.txt into Source directory
+ https://bugs.webkit.org/show_bug.cgi?id=52888
+
+ * Scripts/webkitdirs.pm:
+
+2011-01-25 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Improve label text in submit-to-ews
+ https://bugs.webkit.org/show_bug.cgi?id=53130
+
+ * QueueStatusServer/templates/submittoews.html:
+
+2011-01-25 Mansi Mithal <mansi.mithal@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ QtTestBrowser should have a UI Settings to prevent loading images
+ https://bugs.webkit.org/show_bug.cgi?id=52409
+
+ Added a new action item named "DisableAutoLoadImages"
+ under the "Settings" menu
+
+ * QtTestBrowser/launcherwindow.cpp:
+ (LauncherWindow::createChrome):
+ (LauncherWindow::toggleAutoLoadImages):
+ * QtTestBrowser/launcherwindow.h:
+
+2011-01-25 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Minor bug fixes and cleanup for filesystem wrappers, port/* test
+ classes, test_expectations.py. This change adds "test-win" and
+ "test-mac" variants to the test port so that we can better test
+ rebaselining, and adds a MockUser() object for reuse in testing.
+
+ https://bugs.webkit.org/show_bug.cgi?id=53036
+
+ * Scripts/webkitpy/common/system/filesystem.py:
+ * Scripts/webkitpy/common/system/filesystem_mock.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_expectations.py:
+ * Scripts/webkitpy/layout_tests/port/factory.py:
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py:
+ * Scripts/webkitpy/tool/mocktool.py:
+
+2011-01-25 Tony Chang <tony@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [chromium] remove unused layoutTestController callback
+ https://bugs.webkit.org/show_bug.cgi?id=53103
+
+ This method is used by a test_shell_test, but not needed by DRT.
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::LayoutTestController):
+ * DumpRenderTree/chromium/LayoutTestController.h:
+
+2011-01-25 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Andreas Kling.
+
+ [GTK] Remove 64 bits release bot from the buildbot master
+ https://bugs.webkit.org/show_bug.cgi?id=52899
+
+ Removes the 64 bits release slave from the buildbot configuration,
+ so that we can use it as an EWS.
+
+ * BuildSlaveSupport/build.webkit.org-config/config.json:
+
+2011-01-24 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Implement database quota callback to fix storage tests on WebKit2 bot
+ https://bugs.webkit.org/show_bug.cgi?id=53064
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::exceededDatabaseQuota):
+ (WTR::TestController::createOtherPage):
+ (WTR::TestController::initialize):
+
+2011-01-24 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Use designated temp directory for the database for WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=53052
+
+ Adopt the new WK2 API for this.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::libraryPathForTesting):
+ (WTR::TestController::initialize):
+ * WebKitTestRunner/TestController.h:
+ * WebKitTestRunner/mac/TestControllerMac.mm:
+ (WTR::TestController::platformLibraryPathForTesting):
+ * WebKitTestRunner/qt/TestControllerQt.cpp:
+ (WTR::TestController::platformLibraryPathForTesting):
+ * WebKitTestRunner/win/TestControllerWin.cpp:
+ (WTR::TestController::platformLibraryPathForTesting):
+
+2011-01-24 Lucas Forschler <lforschler@apple.com>
+
+ Reviewed by Stephanie Lewis.
+
+ Add a new Leopard test bot.
+
+ * BuildSlaveSupport/build.webkit.org-config/config.json:
+
+2011-01-24 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Adam Barth.
+
+ Add EFL Builder to core waterfall
+ https://bugs.webkit.org/show_bug.cgi?id=52704
+
+ Add EFL Builder to the core waterfall again.
+
+ * Scripts/webkitpy/common/net/buildbot/buildbot.py:
+ * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
+
+2011-01-24 Xianzhu Wang <wangxianzhu@google.com>
+
+ Reviewed by Tony Chang.
+
+ new-run-webkit-tests fails to start HTTP server if there are proxy settings
+ https://bugs.webkit.org/show_bug.cgi?id=52872
+
+ Force disabling proxy to resolve the problem.
+
+ * Scripts/webkitpy/layout_tests/port/http_server_base.py:
+ * Scripts/webkitpy/layout_tests/port/websocket_server.py:
+
+2011-01-24 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ check-webkit-style: Update exemptions following Source/ move.
+ https://bugs.webkit.org/show_bug.cgi?id=53017
+
+ * Scripts/webkitpy/style/checker.py:
+ * Scripts/webkitpy/style/checker_unittest.py:
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Rubber-stamped by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * DumpRenderTree/qt/ImageDiff.pro: Add missing "Source" to WebKit.pri path
+
+2011-01-24 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Find duplicate strings in localizedStrings.js
+
+ https://bugs.webkit.org/show_bug.cgi?id=53005
+
+ * Scripts/check-inspector-strings:
+
+2011-01-24 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Regroup MiniBrowser's menubar and add open file action
+ https://bugs.webkit.org/show_bug.cgi?id=53000
+
+ Add File and Develop menu to MiniBrowser's menubar and add open file action to File menu.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::openFile):
+ (BrowserWindow::~BrowserWindow):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2011-01-24 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed fix after r76496
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * BuildSlaveSupport/build.webkit.org-config/master.cfg: Remove unnecessary "Source" from the path.
+ * BuildSlaveSupport/built-product-archive: Remove unnecessary "Source" from the path.
+ * Scripts/webkitdirs.pm: Add the accidentally removed slash to the path.
+
+2011-01-24 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Move project files into Source
+ https://bugs.webkit.org/show_bug.cgi?id=52891
+
+ * DerivedSources.pro: Renamed from DerivedSources.pro.
+ * DumpRenderTree/qt/DumpRenderTree.pro:
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+ * MiniBrowser/DerivedSources.pro:
+ * MiniBrowser/qt/MiniBrowser.pro:
+ * QtTestBrowser/QtTestBrowser.pro:
+ * Scripts/webkitdirs.pm:
+ * Tools.pro: Added.
+ * WebKitTestRunner/DerivedSources.pro:
+ * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
+ * WebKitTestRunner/qt/WebKitTestRunner.pro:
+
+2011-01-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Beefed up --threaded mode to catch even more kinds of errors.
+ https://bugs.webkit.org/show_bug.cgi?id=52971
+
+ * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Use a shared
+ context group to force JSC to mark multiple threads. (This used to be
+ the default, but it changed in SnowLeopard.)
+ (runJavaScriptThread): Do more locking and unlocking, and more allocation,
+ to give threading mistakes more chances to show themselves.
+ (startJavaScriptThreads):
+ (stopJavaScriptThreads):
+
+2011-01-22 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Support layoutTestController.addURLToRedirect()
+ https://bugs.webkit.org/show_bug.cgi?id=52956
+
+ * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+ (LayoutTestController::addURLToRedirect):
+ * DumpRenderTree/qt/LayoutTestControllerQt.h:
+
+2011-01-22 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] REGRESSION (r72360): http/tests/security/aboutBlank/xss-DENIED-* tests fail
+ https://bugs.webkit.org/show_bug.cgi?id=49802
+
+ * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+ (WebCore::DumpRenderTree::resetToConsistentStateBeforeTesting):
+ (WebCore::DumpRenderTree::open):
+
+2011-01-21 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Disable mac_unittest.py that fails on some of the Mac bots
+ https://bugs.webkit.org/show_bug.cgi?id=52947
+
+ As noted in the comment, this test does not appear to be correct
+ because the function this test is testing returns different results
+ depending on which flavor of Mac the test is run on. This patch
+ disable the test. Hopefully we can re-enable the test once we've
+ probably insulated the test from its environment.
+
+ * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
+
+2011-01-21 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Mihai Parparita.
+
+ Fix bug introduced in r76322 that caused NRWT to not actually
+ read the Skipped files properly.
+
+ https://bugs.webkit.org/show_bug.cgi?id=52771
+
+ * Scripts/webkitpy/layout_tests/port/mac_unittest.py:
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/port/webkit_unittest.py:
+
2011-01-21 Sam Weinig <sam@webkit.org>
Reviewed by Geoffrey Sean Garen and Mark Rowe.
diff --git a/Tools/DerivedSources.pro b/Tools/DerivedSources.pro
new file mode 100644
index 0000000..55a26a2
--- /dev/null
+++ b/Tools/DerivedSources.pro
@@ -0,0 +1,16 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+SUBDIRS += \
+ MiniBrowser/DerivedSources.pro \
+ WebKitTestRunner/DerivedSources.pro
+
+for(subpro, SUBDIRS) {
+ subdir = $${dirname(subpro)}
+ subtarget = $$replace(subpro, [^a-zA-Z0-9_], -)
+ eval($${subtarget}.makefile = "Makefile.DerivedSources")
+ eval(generated_files-$${subtarget}.commands = (cd $$subdir && $(MAKE) -f Makefile.DerivedSources generated_files))
+ QMAKE_EXTRA_TARGETS += generated_files-$${subtarget}
+ generated_files.depends += generated_files-$${subtarget}
+}
+QMAKE_EXTRA_TARGETS += generated_files
diff --git a/Tools/DumpRenderTree/AccessibilityController.cpp b/Tools/DumpRenderTree/AccessibilityController.cpp
index 798389f..4fcd4f5 100644
--- a/Tools/DumpRenderTree/AccessibilityController.cpp
+++ b/Tools/DumpRenderTree/AccessibilityController.cpp
@@ -77,6 +77,13 @@ static JSValueRef logScrollingStartEventsCallback(JSContextRef ctx, JSObjectRef,
return JSValueMakeUndefined(ctx);
}
+static JSValueRef logAccessibilityEventsCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef*)
+{
+ AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
+ controller->setLogAccessibilityEvents(true);
+ return JSValueMakeUndefined(ctx);
+}
+
static JSValueRef getElementAtPointCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
int x = 0;
@@ -96,6 +103,7 @@ JSClassRef AccessibilityController::getJSClass()
{ "logFocusEvents", logFocusEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "logValueChangeEvents", logValueChangeEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "logScrollingStartEvents", logScrollingStartEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "logAccessibilityEvents", logAccessibilityEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "elementAtPoint", getElementAtPointCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ 0, 0, 0 }
};
@@ -119,4 +127,5 @@ void AccessibilityController::resetToConsistentState()
setLogFocusEvents(false);
setLogValueChangeEvents(false);
setLogScrollingStartEvents(false);
+ setLogAccessibilityEvents(false);
}
diff --git a/Tools/DumpRenderTree/AccessibilityController.h b/Tools/DumpRenderTree/AccessibilityController.h
index 5a6ca13..462c484 100644
--- a/Tools/DumpRenderTree/AccessibilityController.h
+++ b/Tools/DumpRenderTree/AccessibilityController.h
@@ -50,6 +50,7 @@ public:
void setLogFocusEvents(bool);
void setLogValueChangeEvents(bool);
void setLogScrollingStartEvents(bool);
+ void setLogAccessibilityEvents(bool);
void resetToConsistentState();
diff --git a/Tools/DumpRenderTree/DumpRenderTree.gypi b/Tools/DumpRenderTree/DumpRenderTree.gypi
index b7de580..3c3384d 100644
--- a/Tools/DumpRenderTree/DumpRenderTree.gypi
+++ b/Tools/DumpRenderTree/DumpRenderTree.gypi
@@ -53,8 +53,12 @@
'TestNetscapePlugIn/TestObject.cpp',
'TestNetscapePlugIn/TestObject.h',
'TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp',
+ 'TestNetscapePlugIn/Tests/EvaluateJSAfterRemovingPluginElement.cpp',
+ 'TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp',
'TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp',
'TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp',
+ 'TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp',
+ 'TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp',
'TestNetscapePlugIn/Tests/PluginScriptableNPObjectInvokeDefault.cpp',
'TestNetscapePlugIn/main.cpp',
],
diff --git a/Tools/DumpRenderTree/LayoutTestController.cpp b/Tools/DumpRenderTree/LayoutTestController.cpp
index 1133a88..29eeeb0 100644
--- a/Tools/DumpRenderTree/LayoutTestController.cpp
+++ b/Tools/DumpRenderTree/LayoutTestController.cpp
@@ -445,6 +445,17 @@ static JSValueRef displayCallback(JSContextRef context, JSObjectRef function, JS
return JSValueMakeUndefined(context);
}
+static JSValueRef displayInvalidatedRegionCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ // Has mac & windows implementation
+ LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+ // LayoutTestController::display() only renders the invalidated region so
+ // we can just use that.
+ controller->display();
+
+ return JSValueMakeUndefined(context);
+}
+
static JSValueRef encodeHostNameCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
// Has mac implementation
@@ -1980,6 +1991,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
{ "disableImageLoading", disableImageLoadingCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "dispatchPendingLoadRequests", dispatchPendingLoadRequestsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "display", displayCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "displayInvalidatedRegion", displayInvalidatedRegionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "dumpApplicationCacheDelegateCallbacks", dumpApplicationCacheDelegateCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "dumpAsText", dumpAsTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "dumpBackForwardList", dumpBackForwardListCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
diff --git a/Tools/DumpRenderTree/LayoutTestController.h b/Tools/DumpRenderTree/LayoutTestController.h
index b80d805..11558dd 100644
--- a/Tools/DumpRenderTree/LayoutTestController.h
+++ b/Tools/DumpRenderTree/LayoutTestController.h
@@ -59,6 +59,7 @@ public:
void disableImageLoading();
void dispatchPendingLoadRequests();
void display();
+ void displayInvalidatedRegion();
void execCommand(JSStringRef name, JSStringRef value);
bool findString(JSContextRef, JSStringRef, JSObjectRef optionsArray);
bool isCommandEnabled(JSStringRef name);
diff --git a/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp b/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
index 45e5ddb..24ee12c 100644
--- a/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
+++ b/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
@@ -199,6 +199,7 @@ enum {
ID_SET_STATUS,
ID_RESIZE_TO,
ID_NORMALIZE,
+ ID_INVALIDATE_RECT,
NUM_METHOD_IDENTIFIERS
};
@@ -239,7 +240,8 @@ static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
"refCount",
"setStatus",
"resizeTo",
- "normalize"
+ "normalize",
+ "invalidateRect"
};
static NPUTF8* createCStringFromNPVariant(const NPVariant* variant)
@@ -986,6 +988,20 @@ static bool normalizeOverride(PluginObject* obj, const NPVariant* args, uint32_t
return true;
}
+static bool invalidateRect(PluginObject* obj, const NPVariant* args, uint32_t argCount, NPVariant* result)
+{
+ if (argCount != 4)
+ return false;
+
+ NPRect rect;
+ rect.left = static_cast<int>(NPVARIANT_TO_DOUBLE(args[0]));
+ rect.top = static_cast<int>(NPVARIANT_TO_DOUBLE(args[1]));
+ rect.right = static_cast<int>(NPVARIANT_TO_DOUBLE(args[2]));
+ rect.bottom = static_cast<int>(NPVARIANT_TO_DOUBLE(args[3]));
+
+ browser->invalidaterect(obj->npp, &rect);
+ return true;
+}
static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* args, uint32_t argCount, NPVariant* result)
{
@@ -1101,6 +1117,8 @@ static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* a
return testResizeTo(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_NORMALIZE])
return normalizeOverride(plugin, args, argCount, result);
+ if (name == pluginMethodIdentifiers[ID_INVALIDATE_RECT])
+ return invalidateRect(plugin, args, argCount, result);
return false;
}
diff --git a/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp b/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp
index 703d9d5..0dd9da6 100644
--- a/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp
+++ b/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp
@@ -33,11 +33,14 @@ extern NPNetscapeFuncs *browser;
PluginTest* PluginTest::create(NPP npp, const string& identifier)
{
+ if (identifier.empty())
+ return new PluginTest(npp, identifier);
+
CreateTestFunction createTestFunction = createTestFunctions()[identifier];
if (createTestFunction)
return createTestFunction(npp, identifier);
- return new PluginTest(npp, identifier);
+ return 0;
}
PluginTest::PluginTest(NPP npp, const string& identifier)
diff --git a/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp b/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp
index b4b7fa3..7635a09 100644
--- a/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp
+++ b/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp
@@ -200,6 +200,9 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
else if (strcasecmp(argn[i], "src") == 0 &&
strcasecmp(argv[i], "data:application/x-webkit-test-netscape,returnerrorfromnewstream") == 0)
obj->returnErrorFromNewStream = TRUE;
+ else if (strcasecmp(argn[i], "src") == 0 &&
+ strcasecmp(argv[i], "data:application/x-webkit-test-netscape,alertwhenloaded") == 0)
+ executeScript(obj, "alert('Plugin Loaded!')");
else if (strcasecmp(argn[i], "onSetWindow") == 0 && !obj->onSetWindow)
obj->onSetWindow = strdup(argv[i]);
else if (strcasecmp(argn[i], "onNew") == 0 && !onNewScript)
@@ -256,6 +259,15 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
// When testing evaluate script on mouse-down or key-down, allow event logging to handle events.
if (obj->evaluateScriptOnMouseDownOrKeyDown)
obj->eventLogging = true;
+ } else if (!strcasecmp(argn[i], "windowedPlugin")) {
+ void* windowed = 0;
+ if (!strcasecmp(argv[i], "false") || !strcasecmp(argv[i], "0"))
+ windowed = 0;
+ else if (!strcasecmp(argv[i], "true") || !strcasecmp(argv[i], "1"))
+ windowed = reinterpret_cast<void*>(1);
+ else
+ assert(false);
+ browser->setvalue(instance, NPPVpluginWindowBool, windowed);
}
}
@@ -271,6 +283,11 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
obj->pluginTest = PluginTest::create(instance, testIdentifier);
+ if (!obj->pluginTest) {
+ pluginLog(instance, "NPP_New: Could not find a test named \"%s\", maybe its .cpp file wasn't added to the build system?", testIdentifier.c_str());
+ return NPERR_GENERIC_ERROR;
+ }
+
#ifdef XP_UNIX
// On Unix, plugins only get events if they are windowless.
browser->setvalue(instance, NPPVpluginWindowBool, 0);
@@ -663,6 +680,19 @@ static int16_t handleEventX11(NPP instance, PluginObject* obj, XEvent* event)
}
#endif // XP_UNIX
+#ifdef XP_WIN
+static int16_t handleEventWin(NPP instance, PluginObject* obj, NPEvent* event)
+{
+ switch (event->event) {
+ case WM_PAINT:
+ if (obj->onPaintEvent)
+ executeScript(obj, obj->onPaintEvent);
+ return 1;
+ }
+ return 0;
+}
+#endif // XP_WIN
+
int16_t NPP_HandleEvent(NPP instance, void *event)
{
PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
@@ -677,6 +707,8 @@ int16_t NPP_HandleEvent(NPP instance, void *event)
return handleEventCocoa(instance, obj, static_cast<NPCocoaEvent*>(event));
#elif defined(XP_UNIX)
return handleEventX11(instance, obj, static_cast<XEvent*>(event));
+#elif defined(XP_WIN)
+ return handleEventWin(instance, obj, static_cast<NPEvent*>(event));
#else
// FIXME: Implement for other platforms.
return 0;
diff --git a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp b/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
index bd5075c..7e9010f 100644
--- a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
+++ b/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp
@@ -58,6 +58,7 @@ static const char optionEnableAccelerated2DCanvas[] = "--enable-accelerated-2d-c
static const char optionStressOpt[] = "--stress-opt";
static const char optionStressDeopt[] = "--stress-deopt";
static const char optionJavaScriptFlags[] = "--js-flags=";
+static const char optionNoTimeout[] = "--no-timeout=";
static void runTest(TestShell& shell, TestParams& params, const string& testName, bool testShellMode)
{
@@ -123,6 +124,7 @@ int main(int argc, char* argv[])
bool stressDeopt = false;
bool hardwareAcceleratedGL = false;
string javaScriptFlags;
+ bool noTimeout = false;
for (int i = 1; i < argc; ++i) {
string argument(argv[i]);
if (argument == "-")
@@ -155,6 +157,8 @@ int main(int argc, char* argv[])
stressDeopt = true;
else if (!argument.find(optionJavaScriptFlags))
javaScriptFlags = argument.substr(strlen(optionJavaScriptFlags));
+ else if (!argument.find(optionNoTimeout))
+ noTimeout = true;
else if (argument.size() && argument[0] == '-')
fprintf(stderr, "Unknown option: %s\n", argv[i]);
else
@@ -182,6 +186,10 @@ int main(int argc, char* argv[])
shell.setJavaScriptFlags(javaScriptFlags);
shell.setStressOpt(stressOpt);
shell.setStressDeopt(stressDeopt);
+ if (noTimeout) {
+ // 0x20000000ms is big enough for the purpose to avoid timeout in debugging.
+ shell.setLayoutTestTimeout(0x20000000);
+ }
if (serverMode && !tests.size()) {
params.printSeparators = true;
char testString[2048]; // 2048 is the same as the sizes of other platforms.
diff --git a/Tools/DumpRenderTree/chromium/ImageDiff.cpp b/Tools/DumpRenderTree/chromium/ImageDiff.cpp
index f2875dd..d676430 100644
--- a/Tools/DumpRenderTree/chromium/ImageDiff.cpp
+++ b/Tools/DumpRenderTree/chromium/ImageDiff.cpp
@@ -88,7 +88,7 @@ public:
if (!byteLength)
return false;
- OwnArrayPtr<unsigned char> source(new unsigned char[byteLength]);
+ OwnArrayPtr<unsigned char> source = adoptArrayPtr(new unsigned char[byteLength]);
if (fread(source.get(), 1, byteLength, stdin) != byteLength)
return false;
diff --git a/Tools/DumpRenderTree/chromium/LayoutTestController.cpp b/Tools/DumpRenderTree/chromium/LayoutTestController.cpp
index 529019b..59537c6 100644
--- a/Tools/DumpRenderTree/chromium/LayoutTestController.cpp
+++ b/Tools/DumpRenderTree/chromium/LayoutTestController.cpp
@@ -89,6 +89,7 @@ LayoutTestController::LayoutTestController(TestShell* shell)
bindMethod("counterValueForElementById", &LayoutTestController::counterValueForElementById);
bindMethod("disableImageLoading", &LayoutTestController::disableImageLoading);
bindMethod("display", &LayoutTestController::display);
+ bindMethod("displayInvalidatedRegion", &LayoutTestController::displayInvalidatedRegion);
bindMethod("dumpAsText", &LayoutTestController::dumpAsText);
bindMethod("dumpBackForwardList", &LayoutTestController::dumpBackForwardList);
bindMethod("dumpChildFramesAsText", &LayoutTestController::dumpChildFramesAsText);
@@ -106,7 +107,6 @@ LayoutTestController::LayoutTestController(TestShell* shell)
bindMethod("evaluateInWebInspector", &LayoutTestController::evaluateInWebInspector);
bindMethod("evaluateScriptInIsolatedWorld", &LayoutTestController::evaluateScriptInIsolatedWorld);
bindMethod("execCommand", &LayoutTestController::execCommand);
- bindMethod("forceRedSelectionColors", &LayoutTestController::forceRedSelectionColors);
bindMethod("grantDesktopNotificationPermission", &LayoutTestController::grantDesktopNotificationPermission);
bindMethod("isCommandEnabled", &LayoutTestController::isCommandEnabled);
bindMethod("layerTreeAsText", &LayoutTestController::layerTreeAsText);
@@ -628,9 +628,11 @@ void LayoutTestController::setAlwaysAcceptCookies(const CppArgumentList& argumen
result->setNull();
}
-void LayoutTestController::setAsynchronousSpellCheckingEnabled(const CppArgumentList&, CppVariant*)
+void LayoutTestController::setAsynchronousSpellCheckingEnabled(const CppArgumentList& arguments, CppVariant* result)
{
- // FIXME: Implement this.
+ if (arguments.size() > 0 && arguments[0].isBool())
+ m_shell->webView()->settings()->setAsynchronousSpellCheckingEnabled(cppVariantToBool(arguments[0]));
+ result->setNull();
}
void LayoutTestController::showWebInspector(const CppArgumentList&, CppVariant* result)
@@ -800,11 +802,11 @@ void LayoutTestController::pathToLocalResource(const CppArgumentList& arguments,
// We want a temp file.
const unsigned tempPrefixLength = 5;
size_t bufferSize = MAX_PATH;
- OwnArrayPtr<WCHAR> tempPath(new WCHAR[bufferSize]);
+ OwnArrayPtr<WCHAR> tempPath = adoptArrayPtr(new WCHAR[bufferSize]);
DWORD tempLength = ::GetTempPathW(bufferSize, tempPath.get());
if (tempLength + url.length() - tempPrefixLength + 1 > bufferSize) {
bufferSize = tempLength + url.length() - tempPrefixLength + 1;
- tempPath.set(new WCHAR[bufferSize]);
+ tempPath = adoptArrayPtr(new WCHAR[bufferSize]);
tempLength = GetTempPathW(bufferSize, tempPath.get());
ASSERT(tempLength < bufferSize);
}
@@ -1083,6 +1085,14 @@ void LayoutTestController::display(const CppArgumentList& arguments, CppVariant*
result->setNull();
}
+void LayoutTestController::displayInvalidatedRegion(const CppArgumentList& arguments, CppVariant* result)
+{
+ WebViewHost* host = m_shell->webViewHost();
+ host->paintInvalidatedRegion();
+ host->displayRepaintMask();
+ result->setNull();
+}
+
void LayoutTestController::testRepaint(const CppArgumentList&, CppVariant* result)
{
m_testRepaint = true;
@@ -1464,12 +1474,6 @@ void LayoutTestController::evaluateInWebInspector(const CppArgumentList& argumen
m_shell->drtDevToolsAgent()->evaluateInWebInspector(arguments[0].toInt32(), arguments[1].toString());
}
-void LayoutTestController::forceRedSelectionColors(const CppArgumentList& arguments, CppVariant* result)
-{
- result->setNull();
- m_shell->webView()->setSelectionColors(0xffee0000, 0xff00ee00, 0xff000000, 0xffc0c0c0);
-}
-
void LayoutTestController::addUserScript(const CppArgumentList& arguments, CppVariant* result)
{
result->setNull();
diff --git a/Tools/DumpRenderTree/chromium/LayoutTestController.h b/Tools/DumpRenderTree/chromium/LayoutTestController.h
index 13d1447..0ef8607 100644
--- a/Tools/DumpRenderTree/chromium/LayoutTestController.h
+++ b/Tools/DumpRenderTree/chromium/LayoutTestController.h
@@ -250,6 +250,7 @@ public:
void dumpTitleChanges(const CppArgumentList&, CppVariant*);
void setMainFrameIsFirstResponder(const CppArgumentList&, CppVariant*);
void display(const CppArgumentList&, CppVariant*);
+ void displayInvalidatedRegion(const CppArgumentList&, CppVariant*);
void testRepaint(const CppArgumentList&, CppVariant*);
void repaintSweepHorizontally(const CppArgumentList&, CppVariant*);
void clearBackForwardList(const CppArgumentList&, CppVariant*);
@@ -311,9 +312,6 @@ public:
// Allows layout tests to exec scripts at WebInspector side.
void evaluateInWebInspector(const CppArgumentList&, CppVariant*);
- // Forces the selection colors for testing under Linux.
- void forceRedSelectionColors(const CppArgumentList&, CppVariant*);
-
// Adds a user script or user style sheet to be injected into new documents.
void addUserScript(const CppArgumentList&, CppVariant*);
void addUserStyleSheet(const CppArgumentList&, CppVariant*);
diff --git a/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp b/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp
index 7e7053b..63a70e4 100644
--- a/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp
+++ b/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp
@@ -95,7 +95,7 @@ bool NotificationPresenter::show(const WebNotification& notification)
notification.url().spec().data());
} else {
printf("DESKTOP NOTIFICATION:%s icon %s, title %s, text %s\n",
- notification.dir() == "rtl" ? "(RTL)" : "",
+ notification.direction() == WebTextDirectionRightToLeft ? "(RTL)" : "",
notification.iconURL().isEmpty() ? "" :
notification.iconURL().spec().data(),
notification.title().isEmpty() ? "" :
diff --git a/Tools/DumpRenderTree/chromium/TestShell.cpp b/Tools/DumpRenderTree/chromium/TestShell.cpp
index ec6a502..11a598f 100644
--- a/Tools/DumpRenderTree/chromium/TestShell.cpp
+++ b/Tools/DumpRenderTree/chromium/TestShell.cpp
@@ -93,6 +93,7 @@ TestShell::TestShell(bool testShellMode)
WebRuntimeFeatures::enableGeolocation(true);
WebRuntimeFeatures::enableIndexedDatabase(true);
WebRuntimeFeatures::enableFileSystem(true);
+ WebRuntimeFeatures::enableJavaScriptI18NAPI(true);
m_accessibilityController.set(new AccessibilityController(this));
m_layoutTestController.set(new LayoutTestController(this));
m_eventSender.set(new EventSender(this));
diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.cpp b/Tools/DumpRenderTree/chromium/WebViewHost.cpp
index 18b107f..e1a2fcb 100644
--- a/Tools/DumpRenderTree/chromium/WebViewHost.cpp
+++ b/Tools/DumpRenderTree/chromium/WebViewHost.cpp
@@ -52,6 +52,8 @@
#include "WebSize.h"
#include "WebSpeechInputControllerMock.h"
#include "WebStorageNamespace.h"
+#include "WebTextCheckingCompletion.h"
+#include "WebTextCheckingResult.h"
#include "WebURLRequest.h"
#include "WebURLResponse.h"
#include "WebView.h"
@@ -60,6 +62,7 @@
#include "webkit/support/webkit_support.h"
#include <wtf/Assertions.h>
#include <wtf/PassOwnPtr.h>
+#include <wtf/Vector.h>
using namespace WebCore;
using namespace WebKit;
@@ -225,6 +228,12 @@ static string textAffinityDescription(WebTextAffinity affinity)
return "(UNKNOWN AFFINITY)";
}
+static void invokeFinishLastTextCheck(void* context)
+{
+ WebViewHost* wvh = static_cast<WebViewHost*>(context);
+ wvh->finishLastTextCheck();
+}
+
// WebViewClient -------------------------------------------------------------
WebView* WebViewHost::createView(WebFrame*, const WebURLRequest&, const WebWindowFeatures&, const WebString&)
@@ -409,6 +418,35 @@ void WebViewHost::spellCheck(const WebString& text, int& misspelledOffset, int&
m_spellcheck.spellCheckWord(text, &misspelledOffset, &misspelledLength);
}
+void WebViewHost::requestCheckingOfText(const WebString& text, WebTextCheckingCompletion* completion)
+{
+ m_lastRequestedTextCheckingCompletion = completion;
+ m_lastRequestedTextCheckString = text;
+ webkit_support::PostDelayedTask(invokeFinishLastTextCheck, static_cast<void*>(this), 0);
+}
+
+void WebViewHost::finishLastTextCheck()
+{
+ Vector<WebTextCheckingResult> results;
+ // FIXME: Do the grammar check.
+ int offset = 0;
+ String text(m_lastRequestedTextCheckString.data(), m_lastRequestedTextCheckString.length());
+ while (text.length()) {
+ int misspelledPosition = 0;
+ int misspelledLength = 0;
+ m_spellcheck.spellCheckWord(WebString(text.characters(), text.length()), &misspelledPosition, &misspelledLength);
+ if (!misspelledLength)
+ break;
+ results.append(WebTextCheckingResult(WebTextCheckingResult::ErrorSpelling, offset + misspelledPosition, misspelledLength));
+ text = text.substring(misspelledPosition + misspelledLength);
+ offset += misspelledPosition;
+ }
+
+ m_lastRequestedTextCheckingCompletion->didFinishCheckingText(results);
+ m_lastRequestedTextCheckingCompletion = 0;
+}
+
+
WebString WebViewHost::autoCorrectWord(const WebString&)
{
// Returns an empty string as Mac WebKit ('WebKitSupport/WebEditorClient.mm')
@@ -1094,7 +1132,7 @@ void WebViewHost::didDisplayInsecureContent(WebFrame*)
fputs("didDisplayInsecureContent\n", stdout);
}
-void WebViewHost::didRunInsecureContent(WebFrame*, const WebSecurityOrigin& origin)
+void WebViewHost::didRunInsecureContent(WebFrame*, const WebSecurityOrigin& origin, const WebURL& insecureURL)
{
if (m_shell->shouldDumpFrameLoadCallbacks())
fputs("didRunInsecureContent\n", stdout);
@@ -1115,6 +1153,7 @@ void WebViewHost::openFileSystem(WebFrame* frame, WebFileSystem::Type type, long
WebViewHost::WebViewHost(TestShell* shell)
: m_shell(shell)
, m_webWidget(0)
+ , m_lastRequestedTextCheckingCompletion(0)
{
reset();
}
diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.h b/Tools/DumpRenderTree/chromium/WebViewHost.h
index 83d21dc..e6d82ae 100644
--- a/Tools/DumpRenderTree/chromium/WebViewHost.h
+++ b/Tools/DumpRenderTree/chromium/WebViewHost.h
@@ -126,6 +126,7 @@ class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient,
virtual void didEndEditing();
virtual bool handleCurrentKeyboardEvent();
virtual void spellCheck(const WebKit::WebString&, int& offset, int& length);
+ virtual void requestCheckingOfText(const WebKit::WebString&, WebKit::WebTextCheckingCompletion*);
virtual WebKit::WebString autoCorrectWord(const WebKit::WebString&);
virtual void runModalAlertDialog(WebKit::WebFrame*, const WebKit::WebString&);
virtual bool runModalConfirmDialog(WebKit::WebFrame*, const WebKit::WebString&);
@@ -202,12 +203,15 @@ class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient,
virtual void didFinishResourceLoad(WebKit::WebFrame*, unsigned identifier);
virtual void didFailResourceLoad(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLError&);
virtual void didDisplayInsecureContent(WebKit::WebFrame*);
- virtual void didRunInsecureContent(WebKit::WebFrame*, const WebKit::WebSecurityOrigin&);
+ virtual void didRunInsecureContent(WebKit::WebFrame*, const WebKit::WebSecurityOrigin&, const WebKit::WebURL&);
virtual bool allowScript(WebKit::WebFrame*, bool enabledPerSettings);
virtual void openFileSystem(WebKit::WebFrame*, WebKit::WebFileSystem::Type, long long size, bool create, WebKit::WebFileSystemCallbacks*);
WebKit::WebDeviceOrientationClientMock* deviceOrientationClientMock();
+
+ // Spellcheck related helper APIs
MockSpellCheck* mockSpellCheck();
+ void finishLastTextCheck();
// Geolocation client mocks for LayoutTestController
WebKit::WebGeolocationClientMock* geolocationClientMock();
@@ -320,6 +324,9 @@ private:
OwnPtr<WebKit::WebSpeechInputControllerMock> m_speechInputControllerMock;
OwnPtr<TestNavigationController*> m_navigationController;
+
+ WebKit::WebString m_lastRequestedTextCheckString;
+ WebKit::WebTextCheckingCompletion* m_lastRequestedTextCheckingCompletion;
};
#endif // WebViewHost_h
diff --git a/Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp b/Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp
new file mode 100644
index 0000000..be66513
--- /dev/null
+++ b/Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "AccessibilityCallbacks.h"
+
+#include "AccessibilityController.h"
+#include "DumpRenderTree.h"
+#include "GOwnPtr.h"
+#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
+#include <gtk/gtk.h>
+#include <webkit/webkit.h>
+
+static guint stateChangeListenerId = 0;
+static guint focusEventListenerId = 0;
+static guint activeDescendantChangedListenerId = 0;
+static guint childrenChangedListenerId = 0;
+static guint propertyChangedListenerId = 0;
+static guint visibleDataChangedListenerId = 0;
+
+static guint loadCompleteListenerId = 0;
+static guint loadStoppedListenerId = 0;
+static guint reloadListenerId = 0;
+
+static void printAccessibilityEvent(AtkObject* accessible, const gchar* signalName)
+{
+ // Sanity check.
+ if (!accessible || !ATK_IS_OBJECT(accessible) || !signalName)
+ return;
+
+ const gchar* objectName = atk_object_get_name(accessible);
+ guint objectRole = atk_object_get_role(accessible);
+
+ // Try to always provide a name to be logged for the object.
+ if (!objectName || *objectName == '\0')
+ objectName = "(No name)";
+
+ printf("Accessibility object emitted \"%s\" / Name: \"%s\" / Role: %d\n",
+ signalName, objectName, objectRole);
+}
+
+static gboolean axObjectEventListener(GSignalInvocationHint *signalHint,
+ guint numParamValues,
+ const GValue *paramValues,
+ gpointer data)
+{
+ // At least we should receive the instance emitting the signal.
+ if (numParamValues < 1)
+ return TRUE;
+
+ AtkObject* accessible = ATK_OBJECT(g_value_get_object(&paramValues[0]));
+ if (!accessible || !ATK_IS_OBJECT(accessible))
+ return TRUE;
+
+ GSignalQuery signal_query;
+ GOwnPtr<gchar> signalName;
+
+ g_signal_query(signalHint->signal_id, &signal_query);
+
+ if (!g_strcmp0(signal_query.signal_name, "state-change")) {
+ signalName.set(g_strdup_printf("state-change:%s = %d",
+ g_value_get_string(&paramValues[1]),
+ g_value_get_boolean(&paramValues[2])));
+ } else if (!g_strcmp0(signal_query.signal_name, "focus-event")) {
+ signalName.set(g_strdup_printf("focus-event = %d",
+ g_value_get_boolean(&paramValues[1])));
+ } else if (!g_strcmp0(signal_query.signal_name, "children-changed")) {
+ signalName.set(g_strdup_printf("children-changed = %d",
+ g_value_get_uint(&paramValues[1])));
+ } else
+ signalName.set(g_strdup(signal_query.signal_name));
+
+ printAccessibilityEvent(accessible, signalName.get());
+
+ return TRUE;
+}
+
+static gboolean axDocumentEventListener(GSignalInvocationHint *signalHint,
+ guint numParamValues,
+ const GValue *paramValues,
+ gpointer data)
+{
+ // At least we should receive the instance emitting the signal.
+ if (numParamValues < 1)
+ return TRUE;
+
+ AtkObject* accessible = ATK_OBJECT(g_value_get_object(&paramValues[0]));
+ if (!accessible || !ATK_IS_DOCUMENT(accessible))
+ return TRUE;
+
+ GSignalQuery signal_query;
+ g_signal_query(signalHint->signal_id, &signal_query);
+
+ printAccessibilityEvent(accessible, signal_query.signal_name);
+
+ return TRUE;
+}
+
+void connectAccessibilityCallbacks()
+{
+ // Ensure no callbacks are connected before.
+ disconnectAccessibilityCallbacks();
+
+ // Ensure that accessibility is initialized for the WebView by querying for
+ // the root accessible object, which will create the full hierarchy.
+ DumpRenderTreeSupportGtk::getRootAccessibleElement(mainFrame);
+
+ // Add global listeners for AtkObject's signals.
+ stateChangeListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:state-change");
+ focusEventListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:focus-event");
+ activeDescendantChangedListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:active-descendant-changed");
+ childrenChangedListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:children-changed");
+ propertyChangedListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:property-change");
+ visibleDataChangedListenerId = atk_add_global_event_listener(axObjectEventListener, "Gtk:AtkObject:visible-data-changed");
+
+ // Ensure the Atk interface types are registered, otherwise
+ // the AtkDocument signal handlers below won't get registered.
+ GObject* dummyAxObject = G_OBJECT(g_object_new(ATK_TYPE_OBJECT, 0));
+ AtkObject* dummyNoOpAxObject = atk_no_op_object_new(dummyAxObject);
+ g_object_unref(G_OBJECT(dummyNoOpAxObject));
+ g_object_unref(dummyAxObject);
+
+ // Add global listeners for AtkDocument's signals.
+ loadCompleteListenerId = atk_add_global_event_listener(axDocumentEventListener, "Gtk:AtkDocument:load-complete");
+ loadStoppedListenerId = atk_add_global_event_listener(axDocumentEventListener, "Gtk:AtkDocument:load-stopped");
+ reloadListenerId = atk_add_global_event_listener(axDocumentEventListener, "Gtk:AtkDocument:reload");
+}
+
+void disconnectAccessibilityCallbacks()
+{
+ // AtkObject signals.
+ if (stateChangeListenerId) {
+ atk_remove_global_event_listener(stateChangeListenerId);
+ stateChangeListenerId = 0;
+ }
+ if (focusEventListenerId) {
+ atk_remove_global_event_listener(focusEventListenerId);
+ focusEventListenerId = 0;
+ }
+ if (activeDescendantChangedListenerId) {
+ atk_remove_global_event_listener(activeDescendantChangedListenerId);
+ activeDescendantChangedListenerId = 0;
+ }
+ if (childrenChangedListenerId) {
+ atk_remove_global_event_listener(childrenChangedListenerId);
+ childrenChangedListenerId = 0;
+ }
+ if (propertyChangedListenerId) {
+ atk_remove_global_event_listener(propertyChangedListenerId);
+ propertyChangedListenerId = 0;
+ }
+ if (visibleDataChangedListenerId) {
+ atk_remove_global_event_listener(visibleDataChangedListenerId);
+ visibleDataChangedListenerId = 0;
+ }
+
+ // AtkDocument signals.
+ if (loadCompleteListenerId) {
+ atk_remove_global_event_listener(loadCompleteListenerId);
+ loadCompleteListenerId = 0;
+ }
+ if (loadStoppedListenerId) {
+ atk_remove_global_event_listener(loadStoppedListenerId);
+ loadStoppedListenerId = 0;
+ }
+ if (reloadListenerId) {
+ atk_remove_global_event_listener(reloadListenerId);
+ reloadListenerId = 0;
+ }
+}
+
diff --git a/Source/WebCore/storage/IDBTimeoutEvent.h b/Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h
index afc9ba4..7225757 100644
--- a/Source/WebCore/storage/IDBTimeoutEvent.h
+++ b/Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,32 +26,10 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef IDBTimeoutEvent_h
-#define IDBTimeoutEvent_h
+#ifndef AccessibilityCallbacks_h
+#define AccessibilityCallbacks_h
-#if ENABLE(INDEXED_DATABASE)
+void connectAccessibilityCallbacks();
+void disconnectAccessibilityCallbacks();
-#include "IDBEvent.h"
-#include "PlatformString.h"
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
-
-namespace WebCore {
-
-class IDBTimeoutEvent : public IDBEvent {
-public:
- static PassRefPtr<IDBTimeoutEvent> create();
- // FIXME: Need to allow creation of these events from JS.
- virtual ~IDBTimeoutEvent();
-
- virtual bool isIDBTimeoutEvent() const { return true; }
-
-private:
- IDBTimeoutEvent();
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(INDEXED_DATABASE)
-
-#endif // IDBTimeoutEvent_h
+#endif
diff --git a/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp b/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp
index c572633..da70efc 100644
--- a/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp
+++ b/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp
@@ -27,6 +27,7 @@
#include "config.h"
#include "AccessibilityController.h"
+#include "AccessibilityCallbacks.h"
#include "AccessibilityUIElement.h"
#include "DumpRenderTree.h"
#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
@@ -35,6 +36,8 @@
#include <gtk/gtk.h>
#include <webkit/webkit.h>
+static bool loggingAccessibilityEvents = false;
+
AccessibilityController::AccessibilityController()
{
}
@@ -79,6 +82,21 @@ void AccessibilityController::setLogValueChangeEvents(bool)
{
}
+void AccessibilityController::setLogAccessibilityEvents(bool logAccessibilityEvents)
+{
+ if (logAccessibilityEvents == loggingAccessibilityEvents)
+ return;
+
+ if (!logAccessibilityEvents) {
+ disconnectAccessibilityCallbacks();
+ loggingAccessibilityEvents = false;
+ return;
+ }
+
+ connectAccessibilityCallbacks();
+ loggingAccessibilityEvents = true;
+}
+
void AccessibilityController::addNotificationListener(PlatformUIElement, JSObjectRef)
{
}
diff --git a/Tools/DumpRenderTree/gtk/DumpRenderTree.cpp b/Tools/DumpRenderTree/gtk/DumpRenderTree.cpp
index ff90d81..ff3327f 100644
--- a/Tools/DumpRenderTree/gtk/DumpRenderTree.cpp
+++ b/Tools/DumpRenderTree/gtk/DumpRenderTree.cpp
@@ -39,6 +39,7 @@
#include "GOwnPtr.h"
#include "LayoutTestController.h"
#include "PixelDumpSupport.h"
+#include "TextInputController.h"
#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
#include "WorkQueue.h"
#include "WorkQueueItem.h"
@@ -419,6 +420,7 @@ static void resetDefaultsToConsistentValues()
"enable-fullscreen", TRUE,
NULL);
webkit_web_view_set_settings(webView, settings);
+ webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER);
DumpRenderTreeSupportGtk::clearMainFrameName(mainFrame);
@@ -432,7 +434,6 @@ static void resetDefaultsToConsistentValues()
WebKitWebBackForwardList* list = webkit_web_view_get_back_forward_list(webView);
webkit_web_back_forward_list_clear(list);
-#ifdef HAVE_LIBSOUP_2_29_90
SoupSession* session = webkit_get_default_session();
SoupCookieJar* jar = reinterpret_cast<SoupCookieJar*>(soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR));
@@ -440,11 +441,14 @@ static void resetDefaultsToConsistentValues()
// HTTP. Should we initialize it earlier, perhaps?
if (jar)
g_object_set(G_OBJECT(jar), SOUP_COOKIE_JAR_ACCEPT_POLICY, SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY, NULL);
-#endif
setlocale(LC_ALL, "");
DumpRenderTreeSupportGtk::setLinksIncludedInFocusChain(true);
+ DumpRenderTreeSupportGtk::setIconDatabaseEnabled(false);
+
+ if (axController)
+ axController->resetToConsistentState();
}
static bool useLongRunningServerMode(int argc, char *argv[])
@@ -738,6 +742,11 @@ static void webViewLoadFinished(WebKitWebView* view, WebKitWebFrame* frame, void
dump();
}
+static gboolean webViewLoadError(WebKitWebView*, WebKitWebFrame*, gchar*, gpointer, gpointer)
+{
+ return TRUE; // Return true here to disable the default error page.
+}
+
static void webViewDocumentLoadFinished(WebKitWebView* view, WebKitWebFrame* frame, void*)
{
if (!done && gLayoutTestController->dumpFrameLoadCallbacks()) {
@@ -781,6 +790,11 @@ static void webViewWindowObjectCleared(WebKitWebView* view, WebKitWebFrame* fram
JSValueRef eventSender = makeEventSender(context, !webkit_web_frame_get_parent(frame));
JSObjectSetProperty(context, windowObject, eventSenderStr, eventSender, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
JSStringRelease(eventSenderStr);
+
+ JSStringRef textInputControllerStr = JSStringCreateWithUTF8CString("textInputController");
+ JSValueRef textInputController = makeTextInputController(context);
+ JSObjectSetProperty(context, windowObject, textInputControllerStr, textInputController, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
+ JSStringRelease(textInputControllerStr);
}
static gboolean webViewConsoleMessage(WebKitWebView* view, const gchar* message, unsigned int line, const gchar* sourceId, gpointer data)
@@ -999,6 +1013,7 @@ static WebKitWebView* createWebView()
g_object_connect(G_OBJECT(view),
"signal::load-started", webViewLoadStarted, 0,
"signal::load-finished", webViewLoadFinished, 0,
+ "signal::load-error", webViewLoadError, 0,
"signal::window-object-cleared", webViewWindowObjectCleared, 0,
"signal::console-message", webViewConsoleMessage, 0,
"signal::script-alert", webViewScriptAlert, 0,
diff --git a/Tools/DumpRenderTree/gtk/EventSender.cpp b/Tools/DumpRenderTree/gtk/EventSender.cpp
index 923a4ba..10e129c 100644
--- a/Tools/DumpRenderTree/gtk/EventSender.cpp
+++ b/Tools/DumpRenderTree/gtk/EventSender.cpp
@@ -240,33 +240,42 @@ static void updateClickCount(int button)
clickCount++;
}
+static guint gdkModifierFromJSValue(JSContextRef context, const JSValueRef value)
+{
+ JSStringRef string = JSValueToStringCopy(context, value, 0);
+ guint gdkModifier = 0;
+ if (JSStringIsEqualToUTF8CString(string, "ctrlKey")
+ || JSStringIsEqualToUTF8CString(string, "addSelectionKey"))
+ gdkModifier = GDK_CONTROL_MASK;
+ else if (JSStringIsEqualToUTF8CString(string, "shiftKey")
+ || JSStringIsEqualToUTF8CString(string, "rangeSelectionKey"))
+ gdkModifier = GDK_SHIFT_MASK;
+ else if (JSStringIsEqualToUTF8CString(string, "altKey"))
+ gdkModifier = GDK_MOD1_MASK;
+
+ // Currently the metaKey as defined in WebCore/platform/gtk/MouseEventGtk.cpp
+ // is GDK_MOD2_MASK. This code must be kept in sync with that file.
+ else if (JSStringIsEqualToUTF8CString(string, "metaKey"))
+ gdkModifier = GDK_MOD2_MASK;
+
+ JSStringRelease(string);
+ return gdkModifier;
+}
+
static guint gdkModifersFromJSValue(JSContextRef context, const JSValueRef modifiers)
{
+ // The value may either be a string with a single modifier or an array of modifiers.
+ if (JSValueIsString(context, modifiers))
+ return gdkModifierFromJSValue(context, modifiers);
+
JSObjectRef modifiersArray = JSValueToObject(context, modifiers, 0);
if (!modifiersArray)
return 0;
guint gdkModifiers = 0;
int modifiersCount = JSValueToNumber(context, JSObjectGetProperty(context, modifiersArray, JSStringCreateWithUTF8CString("length"), 0), 0);
- for (int i = 0; i < modifiersCount; ++i) {
- JSValueRef value = JSObjectGetPropertyAtIndex(context, modifiersArray, i, 0);
- JSStringRef string = JSValueToStringCopy(context, value, 0);
- if (JSStringIsEqualToUTF8CString(string, "ctrlKey")
- || JSStringIsEqualToUTF8CString(string, "addSelectionKey"))
- gdkModifiers |= GDK_CONTROL_MASK;
- else if (JSStringIsEqualToUTF8CString(string, "shiftKey")
- || JSStringIsEqualToUTF8CString(string, "rangeSelectionKey"))
- gdkModifiers |= GDK_SHIFT_MASK;
- else if (JSStringIsEqualToUTF8CString(string, "altKey"))
- gdkModifiers |= GDK_MOD1_MASK;
-
- // Currently the metaKey as defined in WebCore/platform/gtk/MouseEventGtk.cpp
- // is GDK_MOD2_MASK. This code must be kept in sync with that file.
- else if (JSStringIsEqualToUTF8CString(string, "metaKey"))
- gdkModifiers |= GDK_MOD2_MASK;
-
- JSStringRelease(string);
- }
+ for (int i = 0; i < modifiersCount; ++i)
+ gdkModifiers |= gdkModifierFromJSValue(context, JSObjectGetPropertyAtIndex(context, modifiersArray, i, 0));
return gdkModifiers;
}
diff --git a/Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp b/Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
index 1527811..56d75f7 100644
--- a/Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
+++ b/Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
@@ -3,7 +3,7 @@
* Copyright (C) 2007 Eric Seidel <eric@webkit.org>
* Copyright (C) 2008 Nuanti Ltd.
* Copyright (C) 2009 Jan Michael Alonzo <jmalonzo@gmail.com>
- * Copyright (C) 2009 Collabora Ltd.
+ * Copyright (C) 2009,2011 Collabora Ltd.
* Copyright (C) 2010 Joone Hur <joone@kldp.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -230,7 +230,6 @@ void LayoutTestController::setAcceptsEditing(bool acceptsEditing)
void LayoutTestController::setAlwaysAcceptCookies(bool alwaysAcceptCookies)
{
-#ifdef HAVE_LIBSOUP_2_29_90
SoupSession* session = webkit_get_default_session();
SoupCookieJar* jar = reinterpret_cast<SoupCookieJar*>(soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR));
@@ -251,7 +250,6 @@ void LayoutTestController::setAlwaysAcceptCookies(bool alwaysAcceptCookies)
policy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
g_object_set(G_OBJECT(jar), SOUP_COOKIE_JAR_ACCEPT_POLICY, policy, NULL);
-#endif
}
void LayoutTestController::setCustomPolicyDelegate(bool setDelegate, bool permissive)
@@ -492,9 +490,9 @@ void LayoutTestController::addMockSpeechInputResult(JSStringRef result, double c
// See https://bugs.webkit.org/show_bug.cgi?id=39485.
}
-void LayoutTestController::setIconDatabaseEnabled(bool flag)
+void LayoutTestController::setIconDatabaseEnabled(bool enabled)
{
- // FIXME: implement
+ DumpRenderTreeSupportGtk::setIconDatabaseEnabled(enabled);
}
void LayoutTestController::setJavaScriptProfilingEnabled(bool flag)
@@ -546,10 +544,42 @@ void LayoutTestController::execCommand(JSStringRef name, JSStringRef value)
g_free(cValue);
}
-bool LayoutTestController::findString(JSContextRef /* context */, JSStringRef /* target */, JSObjectRef /* optionsArray */)
+bool LayoutTestController::findString(JSContextRef context, JSStringRef target, JSObjectRef optionsArray)
{
- // FIXME: Implement
- return false;
+ WebKitFindOptions findOptions = 0;
+ WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
+ ASSERT(webView);
+
+ JSRetainPtr<JSStringRef> lengthPropertyName(Adopt, JSStringCreateWithUTF8CString("length"));
+ JSValueRef lengthValue = JSObjectGetProperty(context, optionsArray, lengthPropertyName.get(), 0);
+ if (!JSValueIsNumber(context, lengthValue))
+ return false;
+
+ GOwnPtr<gchar> targetString(JSStringCopyUTF8CString(target));
+
+ size_t length = static_cast<size_t>(JSValueToNumber(context, lengthValue, 0));
+ for (size_t i = 0; i < length; ++i) {
+ JSValueRef value = JSObjectGetPropertyAtIndex(context, optionsArray, i, 0);
+ if (!JSValueIsString(context, value))
+ continue;
+
+ JSRetainPtr<JSStringRef> optionName(Adopt, JSValueToStringCopy(context, value, 0));
+
+ if (JSStringIsEqualToUTF8CString(optionName.get(), "CaseInsensitive"))
+ findOptions |= WebKit::WebFindOptionsCaseInsensitive;
+ else if (JSStringIsEqualToUTF8CString(optionName.get(), "AtWordStarts"))
+ findOptions |= WebKit::WebFindOptionsAtWordStarts;
+ else if (JSStringIsEqualToUTF8CString(optionName.get(), "TreatMedialCapitalAsWordStart"))
+ findOptions |= WebKit::WebFindOptionsTreatMedialCapitalAsWordStart;
+ else if (JSStringIsEqualToUTF8CString(optionName.get(), "Backwards"))
+ findOptions |= WebKit::WebFindOptionsBackwards;
+ else if (JSStringIsEqualToUTF8CString(optionName.get(), "WrapAround"))
+ findOptions |= WebKit::WebFindOptionsWrapAround;
+ else if (JSStringIsEqualToUTF8CString(optionName.get(), "StartInSelection"))
+ findOptions |= WebKit::WebFindOptionsStartInSelection;
+ }
+
+ return DumpRenderTreeSupportGtk::findString(webView, targetString.get(), findOptions);
}
bool LayoutTestController::isCommandEnabled(JSStringRef name)
@@ -565,10 +595,20 @@ bool LayoutTestController::isCommandEnabled(JSStringRef name)
void LayoutTestController::setCacheModel(int cacheModel)
{
- if (!cacheModel) // WebCacheModelDocumentViewer
- webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER);
- else
- webkit_set_cache_model(WEBKIT_CACHE_MODEL_WEB_BROWSER);
+ // These constants are derived from the Mac cache model enum in Source/WebKit/mac/WebView/WebPreferences.h.
+ switch (cacheModel) {
+ case 0:
+ webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER);
+ break;
+ case 1:
+ webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER);
+ break;
+ case 3:
+ webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
}
void LayoutTestController::setPersistentUserStyleSheetLocation(JSStringRef jsURL)
diff --git a/Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp b/Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp
index 32bc600..1e591bb 100644
--- a/Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp
+++ b/Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp
@@ -37,13 +37,14 @@
PassRefPtr<BitmapContext> createBitmapContextFromWebView(bool, bool, bool, bool)
{
WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ GtkWidget* viewContainer = gtk_widget_get_parent(GTK_WIDGET(view));
gint width, height;
#ifdef GTK_API_VERSION_2
- GdkPixmap* pixmap = gtk_widget_get_snapshot(GTK_WIDGET(view), 0);
+ GdkPixmap* pixmap = gtk_widget_get_snapshot(viewContainer, 0);
gdk_pixmap_get_size(pixmap, &width, &height);
#else
- width = gtk_widget_get_allocated_width(GTK_WIDGET(view));
- height = gtk_widget_get_allocated_height(GTK_WIDGET(view));
+ width = gtk_widget_get_allocated_width(viewContainer);
+ height = gtk_widget_get_allocated_height(viewContainer);
#endif
cairo_surface_t* imageSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
@@ -53,7 +54,7 @@ PassRefPtr<BitmapContext> createBitmapContextFromWebView(bool, bool, bool, bool)
cairo_paint(context);
g_object_unref(pixmap);
#else
- gtk_widget_draw(GTK_WIDGET(view), context);
+ gtk_widget_draw(viewContainer, context);
#endif
return BitmapContext::createByAdoptingBitmapAndContext(0, context);
diff --git a/Tools/DumpRenderTree/gtk/TextInputController.cpp b/Tools/DumpRenderTree/gtk/TextInputController.cpp
new file mode 100644
index 0000000..7243fdc
--- /dev/null
+++ b/Tools/DumpRenderTree/gtk/TextInputController.cpp
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TextInputController.h"
+
+#include "DumpRenderTree.h"
+#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
+#include <GOwnPtrGtk.h>
+#include <JavaScriptCore/JSObjectRef.h>
+#include <JavaScriptCore/JSRetainPtr.h>
+#include <JavaScriptCore/JSStringRef.h>
+#include <cstring>
+
+static JSValueRef setMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ if (!view)
+ return JSValueMakeUndefined(context);
+
+ if (argumentCount < 3)
+ return JSValueMakeUndefined(context);
+
+ JSStringRef string = JSValueToStringCopy(context, arguments[0], exception);
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ size_t bufferSize = JSStringGetMaximumUTF8CStringSize(string);
+ GOwnPtr<gchar> stringBuffer(static_cast<gchar*>(g_malloc(bufferSize)));
+ JSStringGetUTF8CString(string, stringBuffer.get(), bufferSize);
+ JSStringRelease(string);
+
+ int start = static_cast<int>(JSValueToNumber(context, arguments[1], exception));
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ int end = static_cast<int>(JSValueToNumber(context, arguments[2], exception));
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ DumpRenderTreeSupportGtk::setComposition(view, stringBuffer.get(), start, end);
+
+ return JSValueMakeUndefined(context);
+}
+
+static JSValueRef insertTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ if (!view)
+ return JSValueMakeUndefined(context);
+
+ if (argumentCount < 1)
+ return JSValueMakeUndefined(context);
+
+ JSStringRef string = JSValueToStringCopy(context, arguments[0], exception);
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ size_t bufferSize = JSStringGetMaximumUTF8CStringSize(string);
+ GOwnPtr<gchar> stringBuffer(static_cast<gchar*>(g_malloc(bufferSize)));
+ JSStringGetUTF8CString(string, stringBuffer.get(), bufferSize);
+ JSStringRelease(string);
+
+ DumpRenderTreeSupportGtk::confirmComposition(view, stringBuffer.get());
+
+ return JSValueMakeUndefined(context);
+}
+
+static JSValueRef unmarkTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ if (!view)
+ return JSValueMakeUndefined(context);
+
+ DumpRenderTreeSupportGtk::confirmComposition(view, 0);
+ return JSValueMakeUndefined(context);
+}
+
+static JSValueRef firstRectForCharacterRangeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ if (!view)
+ return JSValueMakeUndefined(context);
+
+ if (argumentCount < 2)
+ return JSValueMakeUndefined(context);
+
+ int location = static_cast<int>(JSValueToNumber(context, arguments[0], exception));
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ int length = static_cast<int>(JSValueToNumber(context, arguments[1], exception));
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ GdkRectangle rect;
+ if (!DumpRenderTreeSupportGtk::firstRectForCharacterRange(view, location, length, &rect))
+ return JSValueMakeUndefined(context);
+
+ JSValueRef arrayValues[4];
+ arrayValues[0] = JSValueMakeNumber(context, rect.x);
+ arrayValues[1] = JSValueMakeNumber(context, rect.y);
+ arrayValues[2] = JSValueMakeNumber(context, rect.width);
+ arrayValues[3] = JSValueMakeNumber(context, rect.height);
+ JSObjectRef arrayObject = JSObjectMakeArray(context, 4, arrayValues, exception);
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ return arrayObject;
+}
+
+static JSValueRef selectedRangeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ if (!view)
+ return JSValueMakeUndefined(context);
+
+ int start, end;
+ if (!DumpRenderTreeSupportGtk::selectedRange(view, &start, &end))
+ return JSValueMakeUndefined(context);
+
+ JSValueRef arrayValues[2];
+ arrayValues[0] = JSValueMakeNumber(context, start);
+ arrayValues[1] = JSValueMakeNumber(context, end);
+ JSObjectRef arrayObject = JSObjectMakeArray(context, 2, arrayValues, exception);
+ g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context));
+
+ return arrayObject;
+}
+
+static JSStaticFunction staticFunctions[] = {
+ { "setMarkedText", setMarkedTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "insertText", insertTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "unmarkText", unmarkTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "firstRectForCharacterRange", firstRectForCharacterRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "selectedRange", selectedRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { 0, 0, 0 }
+};
+
+static JSClassRef getClass(JSContextRef context)
+{
+ static JSClassRef textInputControllerClass = 0;
+
+ if (!textInputControllerClass) {
+ JSClassDefinition classDefinition = {
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ classDefinition.staticFunctions = staticFunctions;
+
+ textInputControllerClass = JSClassCreate(&classDefinition);
+ }
+
+ return textInputControllerClass;
+}
+
+JSObjectRef makeTextInputController(JSContextRef context)
+{
+ return JSObjectMake(context, getClass(context), 0);
+}
diff --git a/Source/WebCore/storage/IDBTimeoutEvent.cpp b/Tools/DumpRenderTree/gtk/TextInputController.h
index b61ee47..53793f6 100644
--- a/Source/WebCore/storage/IDBTimeoutEvent.cpp
+++ b/Tools/DumpRenderTree/gtk/TextInputController.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,30 +26,12 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "config.h"
-#include "IDBTimeoutEvent.h"
+#ifndef TextInputController_h
+#define TextInputController_h
-#if ENABLE(INDEXED_DATABASE)
+typedef const struct OpaqueJSContext* JSContextRef;
+typedef struct OpaqueJSValue* JSObjectRef;
-#include "EventNames.h"
-#include "IDBAny.h"
-
-namespace WebCore {
-
-PassRefPtr<IDBTimeoutEvent> IDBTimeoutEvent::create()
-{
- return adoptRef(new IDBTimeoutEvent());
-}
-
-IDBTimeoutEvent::IDBTimeoutEvent()
- : IDBEvent(eventNames().abortEvent, 0) // FIXME: set the source to the transaction
-{
-}
-
-IDBTimeoutEvent::~IDBTimeoutEvent()
-{
-}
-
-} // namespace WebCore
+JSObjectRef makeTextInputController(JSContextRef);
#endif
diff --git a/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm b/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm
index 1a9f9c9..d41f01d 100644
--- a/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm
+++ b/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm
@@ -74,6 +74,10 @@ void AccessibilityController::setLogValueChangeEvents(bool)
{
}
+void AccessibilityController::setLogAccessibilityEvents(bool)
+{
+}
+
void AccessibilityController::addNotificationListener(PlatformUIElement, JSObjectRef)
{
}
diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree.mm
index ed09cf6..eab3742 100644
--- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm
+++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm
@@ -448,6 +448,7 @@ static void resetDefaultsToConsistentValues()
[preferences setDeveloperExtrasEnabled:NO];
[preferences setLoadsImagesAutomatically:YES];
[preferences setFrameFlatteningEnabled:NO];
+ [preferences setSpatialNavigationEnabled:NO];
[preferences setEditingBehavior:WebKitEditingMacBehavior];
if (persistentUserStyleSheetLocation) {
[preferences setUserStyleSheetLocation:[NSURL URLWithString:(NSString *)(persistentUserStyleSheetLocation.get())]];
@@ -753,7 +754,10 @@ static void dumpHistoryItem(WebHistoryItem *item, int indent, BOOL current)
static void dumpFrameScrollPosition(WebFrame *f)
{
- NSPoint scrollPosition = [[[[f frameView] documentView] superview] bounds].origin;
+ WebScriptObject* scriptObject = [f windowObject];
+ NSPoint scrollPosition = NSMakePoint(
+ [[scriptObject valueForKey:@"pageXOffset"] floatValue],
+ [[scriptObject valueForKey:@"pageYOffset"] floatValue]);
if (ABS(scrollPosition.x) > 0.00000001 || ABS(scrollPosition.y) > 0.00000001) {
if ([f parentFrame] != nil)
printf("frame '%s' ", [[f name] UTF8String]);
diff --git a/Tools/DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp b/Tools/DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp
index 5a48b27..1266c02 100644
--- a/Tools/DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp
+++ b/Tools/DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp
@@ -37,6 +37,8 @@
#include <wtf/Assertions.h>
#include <wtf/HashSet.h>
+static JSContextGroupRef javaScriptThreadsGroup;
+
static pthread_mutex_t javaScriptThreadsMutex = PTHREAD_MUTEX_INITIALIZER;
static bool javaScriptThreadsShouldTerminate;
@@ -51,58 +53,68 @@ static ThreadSet* javaScriptThreads()
return &staticJavaScriptThreads;
}
-// Loops forever, running a script and randomly respawning, until
-// javaScriptThreadsShouldTerminate becomes true.
+// This function exercises JSC in a loop until javaScriptThreadsShouldTerminate
+// becomes true or it probabilistically decides to spawn a replacement thread and exit.
void* runJavaScriptThread(void* arg)
{
- const char* const script =
+ static const char* const script =
"var array = [];"
- "for (var i = 0; i < 10; i++) {"
+ "for (var i = 0; i < 1024; i++) {"
" array.push(String(i));"
"}";
- while (1) {
- JSGlobalContextRef ctx = JSGlobalContextCreate(0);
- JSStringRef scriptRef = JSStringCreateWithUTF8CString(script);
+ pthread_mutex_lock(&javaScriptThreadsMutex);
+ JSGlobalContextRef ctx = JSGlobalContextCreateInGroup(javaScriptThreadsGroup, 0);
+ pthread_mutex_unlock(&javaScriptThreadsMutex);
+
+ pthread_mutex_lock(&javaScriptThreadsMutex);
+ JSStringRef scriptRef = JSStringCreateWithUTF8CString(script);
+ pthread_mutex_unlock(&javaScriptThreadsMutex);
+ while (1) {
+ pthread_mutex_lock(&javaScriptThreadsMutex);
JSValueRef exception = 0;
JSEvaluateScript(ctx, scriptRef, 0, 0, 1, &exception);
ASSERT(!exception);
-
- JSGarbageCollect(ctx);
- JSGlobalContextRelease(ctx);
- JSStringRelease(scriptRef);
-
- JSGarbageCollect(0);
+ pthread_mutex_unlock(&javaScriptThreadsMutex);
pthread_mutex_lock(&javaScriptThreadsMutex);
+ size_t valuesCount = 1024;
+ JSValueRef values[valuesCount];
+ for (size_t i = 0; i < valuesCount; ++i)
+ values[i] = JSObjectMake(ctx, 0, 0);
+ pthread_mutex_unlock(&javaScriptThreadsMutex);
// Check for cancellation.
- if (javaScriptThreadsShouldTerminate) {
- javaScriptThreads()->remove(pthread_self());
- pthread_mutex_unlock(&javaScriptThreadsMutex);
- return 0;
- }
+ if (javaScriptThreadsShouldTerminate)
+ goto done;
// Respawn probabilistically.
if (random() % 5 == 0) {
+ pthread_mutex_lock(&javaScriptThreadsMutex);
pthread_t pthread;
pthread_create(&pthread, 0, &runJavaScriptThread, 0);
pthread_detach(pthread);
-
- javaScriptThreads()->remove(pthread_self());
javaScriptThreads()->add(pthread);
-
pthread_mutex_unlock(&javaScriptThreadsMutex);
- return 0;
+ goto done;
}
-
- pthread_mutex_unlock(&javaScriptThreadsMutex);
}
+
+done:
+ pthread_mutex_lock(&javaScriptThreadsMutex);
+ JSStringRelease(scriptRef);
+ JSGarbageCollect(ctx);
+ JSGlobalContextRelease(ctx);
+ javaScriptThreads()->remove(pthread_self());
+ pthread_mutex_unlock(&javaScriptThreadsMutex);
+ return 0;
}
void startJavaScriptThreads()
{
+ javaScriptThreadsGroup = JSContextGroupCreate();
+
pthread_mutex_lock(&javaScriptThreadsMutex);
for (int i = 0; i < javaScriptThreadsCount; i++) {
@@ -121,8 +133,6 @@ void stopJavaScriptThreads()
javaScriptThreadsShouldTerminate = true;
- ASSERT(javaScriptThreads()->size() == javaScriptThreadsCount);
-
pthread_mutex_unlock(&javaScriptThreadsMutex);
while (true) {
diff --git a/Tools/DumpRenderTree/qt/DumpRenderTree.pro b/Tools/DumpRenderTree/qt/DumpRenderTree.pro
index a7c6c26..d84af96 100644
--- a/Tools/DumpRenderTree/qt/DumpRenderTree.pro
+++ b/Tools/DumpRenderTree/qt/DumpRenderTree.pro
@@ -5,12 +5,12 @@ CONFIG += uitools
BASEDIR = $$PWD/../
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
-include(../../../WebKit.pri)
+include(../../../Source/WebKit.pri)
INCLUDEPATH += ../../../Source
INCLUDEPATH += ../../../Source/JavaScriptCore
INCLUDEPATH += ../../../Source/JavaScriptCore/ForwardingHeaders
INCLUDEPATH += $$BASEDIR
-DESTDIR = ../../../bin
+DESTDIR = ../../bin
unix:!mac:!symbian {
CONFIG += link_pkgconfig
diff --git a/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp b/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
index ce608cc..7d20f47 100644
--- a/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
+++ b/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
@@ -83,6 +83,8 @@
namespace WebCore {
+const int databaseDefaultQuota = 5 * 1024 * 1024;
+
NetworkAccessManager::NetworkAccessManager(QObject* parent)
: QNetworkAccessManager(parent)
{
@@ -520,7 +522,7 @@ void DumpRenderTree::dryRunPrint(QWebFrame* frame)
#endif
}
-void DumpRenderTree::resetToConsistentStateBeforeTesting()
+void DumpRenderTree::resetToConsistentStateBeforeTesting(const QUrl& url)
{
// reset so that any current loads are stopped
// NOTE: that this has to be done before the layoutTestController is
@@ -529,6 +531,10 @@ void DumpRenderTree::resetToConsistentStateBeforeTesting()
m_page->triggerAction(QWebPage::Stop);
m_page->blockSignals(false);
+ QList<QWebSecurityOrigin> knownOrigins = QWebSecurityOrigin::allOrigins();
+ for (int i = 0; i < knownOrigins.size(); ++i)
+ knownOrigins[i].setDatabaseQuota(databaseDefaultQuota);
+
// reset the layoutTestController at this point, so that we under no
// circumstance dump (stop the waitUntilDone timer) during the reset
// of the DRT.
@@ -550,6 +556,14 @@ void DumpRenderTree::resetToConsistentStateBeforeTesting()
m_page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
m_page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded);
+ if (url.scheme() == "http" || url.scheme() == "https") {
+ // credentials may exist from previous tests.
+ m_page->setNetworkAccessManager(0);
+ delete m_networkAccessManager;
+ m_networkAccessManager = new NetworkAccessManager(this);
+ m_page->setNetworkAccessManager(m_networkAccessManager);
+ }
+
WorkQueue::shared()->clear();
WorkQueue::shared()->setFrozen(false);
@@ -560,6 +574,7 @@ void DumpRenderTree::resetToConsistentStateBeforeTesting()
QLocale::setDefault(QLocale::c());
+ layoutTestController()->setDeveloperExtrasEnabled(true);
#ifndef Q_OS_WINCE
setlocale(LC_ALL, "");
#endif
@@ -579,26 +594,16 @@ static bool isWebInspectorTest(const QUrl& url)
return false;
}
-static bool shouldEnableDeveloperExtras(const QUrl& url)
-{
- return true;
-}
-
void DumpRenderTree::open(const QUrl& url)
{
DumpRenderTreeSupportQt::dumpResourceLoadCallbacksPath(QFileInfo(url.toString()).path());
- resetToConsistentStateBeforeTesting();
+ resetToConsistentStateBeforeTesting(url);
- if (shouldEnableDeveloperExtras(m_page->mainFrame()->url())) {
+ if (isWebInspectorTest(m_page->mainFrame()->url()))
layoutTestController()->closeWebInspector();
- layoutTestController()->setDeveloperExtrasEnabled(false);
- }
- if (shouldEnableDeveloperExtras(url)) {
- layoutTestController()->setDeveloperExtrasEnabled(true);
- if (isWebInspectorTest(url))
- layoutTestController()->showWebInspector();
- }
+ if (isWebInspectorTest(url))
+ layoutTestController()->showWebInspector();
if (isGlobalHistoryTest(url))
layoutTestController()->dumpHistoryCallbacks();
@@ -1028,7 +1033,7 @@ void DumpRenderTree::dumpDatabaseQuota(QWebFrame* frame, const QString& dbName)
origin.host().toUtf8().data(),
origin.port(),
dbName.toUtf8().data());
- origin.setDatabaseQuota(5 * 1024 * 1024);
+ origin.setDatabaseQuota(databaseDefaultQuota);
}
void DumpRenderTree::dumpApplicationCacheQuota(QWebSecurityOrigin* origin, quint64 defaultOriginQuota)
@@ -1085,9 +1090,6 @@ void DumpRenderTree::windowCloseRequested()
QWebPage* page = qobject_cast<QWebPage*>(sender());
QObject* container = page->parent();
windows.removeAll(container);
- // Our use of container->deleteLater() means we need to remove closed pages
- // from the org.webkit.qt.DumpRenderTree group explicitly.
- DumpRenderTreeSupportQt::webPageSetGroupName(page, "");
container->deleteLater();
}
diff --git a/Tools/DumpRenderTree/qt/DumpRenderTreeQt.h b/Tools/DumpRenderTree/qt/DumpRenderTreeQt.h
index 8cb5efb..5b53cd9 100644
--- a/Tools/DumpRenderTree/qt/DumpRenderTreeQt.h
+++ b/Tools/DumpRenderTree/qt/DumpRenderTreeQt.h
@@ -86,7 +86,7 @@ public:
void setDumpPixels(bool);
void closeRemainingWindows();
- void resetToConsistentStateBeforeTesting();
+ void resetToConsistentStateBeforeTesting(const QUrl&);
LayoutTestController *layoutTestController() const { return m_controller; }
EventSender *eventSender() const { return m_eventSender; }
diff --git a/Tools/DumpRenderTree/qt/EventSenderQt.cpp b/Tools/DumpRenderTree/qt/EventSenderQt.cpp
index 6fb75a5..6449484 100644
--- a/Tools/DumpRenderTree/qt/EventSenderQt.cpp
+++ b/Tools/DumpRenderTree/qt/EventSenderQt.cpp
@@ -360,7 +360,7 @@ void EventSender::keyDown(const QString& string, const QStringList& modifiers, u
sendEvent(m_page, &event2);
}
-void EventSender::contextClick()
+QStringList EventSender::contextClick()
{
QMouseEvent event(QEvent::MouseButtonPress, m_mousePos, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
sendEvent(m_page, &event);
@@ -378,6 +378,7 @@ void EventSender::contextClick()
QContextMenuEvent ctxEvent(QContextMenuEvent::Mouse, m_mousePos);
sendEvent(m_page->view(), &ctxEvent);
}
+ return DumpRenderTreeSupportQt::contextMenu(m_page);
}
void EventSender::scheduleAsynchronousClick()
diff --git a/Tools/DumpRenderTree/qt/EventSenderQt.h b/Tools/DumpRenderTree/qt/EventSenderQt.h
index 4ba8382..ecb06e2 100644
--- a/Tools/DumpRenderTree/qt/EventSenderQt.h
+++ b/Tools/DumpRenderTree/qt/EventSenderQt.h
@@ -65,7 +65,7 @@ public slots:
void leapForward(int ms);
void keyDown(const QString& string, const QStringList& modifiers = QStringList(), unsigned int location = 0);
void clearKillRing() {}
- void contextClick();
+ QStringList contextClick();
void scheduleAsynchronousClick();
void addTouchPoint(int x, int y);
void updateTouchPoint(int index, int x, int y);
diff --git a/Tools/DumpRenderTree/qt/ImageDiff.pro b/Tools/DumpRenderTree/qt/ImageDiff.pro
index a218449..cdb067e 100644
--- a/Tools/DumpRenderTree/qt/ImageDiff.pro
+++ b/Tools/DumpRenderTree/qt/ImageDiff.pro
@@ -2,7 +2,7 @@ TARGET = ImageDiff
CONFIG -= app_bundle
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
-include(../../../WebKit.pri)
+include(../../../Source/WebKit.pri)
INCLUDEPATH += ../../../Source/JavaScriptCore
DESTDIR = $$OUTPUT_DIR/bin
diff --git a/Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index 56406c2..a11bc60 100644
--- a/Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -87,6 +87,7 @@ void LayoutTestController::reset()
DumpRenderTreeSupportQt::dumpHistoryCallbacks(false);
DumpRenderTreeSupportQt::dumpVisitedLinksCallbacks(false);
setIconDatabaseEnabled(false);
+ clearAllDatabases();
emit hidePage();
}
@@ -830,5 +831,10 @@ QVariantList LayoutTestController::nodesFromRect(const QWebElement& document, in
return DumpRenderTreeSupportQt::nodesFromRect(document, x, y, top, right, bottom, left, ignoreClipping);
}
+void LayoutTestController::addURLToRedirect(const QString& origin, const QString& destination)
+{
+ DumpRenderTreeSupportQt::addURLToRedirect(origin, destination);
+}
+
const unsigned LayoutTestController::maxViewWidth = 800;
const unsigned LayoutTestController::maxViewHeight = 600;
diff --git a/Tools/DumpRenderTree/qt/LayoutTestControllerQt.h b/Tools/DumpRenderTree/qt/LayoutTestControllerQt.h
index 0048a7e..bc62c51 100644
--- a/Tools/DumpRenderTree/qt/LayoutTestControllerQt.h
+++ b/Tools/DumpRenderTree/qt/LayoutTestControllerQt.h
@@ -230,6 +230,8 @@ public slots:
QVariantList nodesFromRect(const QWebElement& document, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping);
+ void addURLToRedirect(const QString& origin, const QString& destination);
+
/*
Policy values: 'on', 'auto' or 'off'.
Orientation values: 'vertical' or 'horizontal'.
diff --git a/Tools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro b/Tools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
index 6f96d0a..176c4c4 100644
--- a/Tools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
+++ b/Tools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
@@ -3,7 +3,7 @@ TARGET = TestNetscapePlugIn
VPATH = ../../unix/TestNetscapePlugin ../../TestNetscapePlugIn
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-include(../../../../WebKit.pri)
+include(../../../../Source/WebKit.pri)
DESTDIR = $$OUTPUT_DIR/lib/plugins
diff --git a/Tools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp b/Tools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
index 2f7288a..4936efd 100644
--- a/Tools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
+++ b/Tools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
@@ -79,6 +79,9 @@ webkit_test_plugin_new_instance(NPMIMEType mimetype,
else if (strcasecmp(argn[i], "src") == 0 &&
strcasecmp(argv[i], "data:application/x-webkit-test-netscape,returnerrorfromnewstream") == 0)
obj->returnErrorFromNewStream = TRUE;
+ else if (!strcasecmp(argn[i], "src")
+ && !strcasecmp(argv[i], "data:application/x-webkit-test-netscape,alertwhenloaded"))
+ executeScript(obj, "alert('Plugin Loaded!')");
else if (strcasecmp(argn[i], "logfirstsetwindow") == 0)
obj->logSetWindow = TRUE;
else if (strcasecmp(argn[i], "testnpruntime") == 0)
diff --git a/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp b/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp
index f03c102..6e4ee46 100644
--- a/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp
+++ b/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp
@@ -213,6 +213,10 @@ void AccessibilityController::setLogScrollingStartEvents(bool logScrollingStartE
ASSERT(m_scrollingStartEventHook);
}
+void AccessibilityController::setLogAccessibilityEvents(bool)
+{
+}
+
static string stringEvent(DWORD event)
{
switch(event) {
diff --git a/Tools/DumpRenderTree/win/ImageDiffCommon.vsprops b/Tools/DumpRenderTree/win/ImageDiffCommon.vsprops
index 1156a72..5d41bf4 100644
--- a/Tools/DumpRenderTree/win/ImageDiffCommon.vsprops
+++ b/Tools/DumpRenderTree/win/ImageDiffCommon.vsprops
@@ -7,6 +7,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(ConfigurationBuildDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
+ PreprocessorDefinitions="NOMINMAX"
/>
<Tool
Name="VCLinkerTool"
diff --git a/Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp b/Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
index 32b5f7e..1befb77 100644
--- a/Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
+++ b/Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
@@ -544,3 +544,8 @@ bool LayoutTestController::findString(JSContextRef context, JSStringRef target,
// FIXME: Implement
return false;
}
+
+void LayoutTestController::setSerializeHTTPLoads(bool)
+{
+ // FIXME: Implement.
+}
diff --git a/Tools/GNUmakefile.am b/Tools/GNUmakefile.am
index 3db766f..a208afe 100644
--- a/Tools/GNUmakefile.am
+++ b/Tools/GNUmakefile.am
@@ -69,6 +69,8 @@ Programs_DumpRenderTree_SOURCES = \
Tools/DumpRenderTree/config.h \
Tools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp \
Tools/DumpRenderTree/cairo/PixelDumpSupportCairo.h \
+ Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h \
+ Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp \
Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp \
Tools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp \
Tools/DumpRenderTree/gtk/DumpRenderTree.cpp \
@@ -80,6 +82,8 @@ Programs_DumpRenderTree_SOURCES = \
Tools/DumpRenderTree/gtk/GCControllerGtk.cpp \
Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp \
Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp \
+ Tools/DumpRenderTree/gtk/TextInputController.h \
+ Tools/DumpRenderTree/gtk/TextInputController.cpp \
Tools/DumpRenderTree/gtk/WorkQueueItemGtk.cpp \
Source/WebCore/platform/gtk/GtkVersioning.c
diff --git a/Tools/MiniBrowser/DerivedSources.pro b/Tools/MiniBrowser/DerivedSources.pro
index 3ca89ad..8674beb 100644
--- a/Tools/MiniBrowser/DerivedSources.pro
+++ b/Tools/MiniBrowser/DerivedSources.pro
@@ -7,12 +7,13 @@ TARGET = dummy
QMAKE_EXTRA_TARGETS += generated_files
+isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../..
SRC_ROOT_DIR = $$replace(PWD, "/Tools/MiniBrowser", "")
-!exists($$OUTPUT_DIR/Tools/MiniBrowser/qt):system($$QMAKE_MKDIR $$OUTPUT_DIR/Tools/MiniBrowser/qt)
+!exists($$OUTPUT_DIR/MiniBrowser/qt): system($$QMAKE_MKDIR $$OUTPUT_DIR/MiniBrowser/qt)
ualist_copier.input = $$SRC_ROOT_DIR/Tools/QtTestBrowser/useragentlist.txt
-ualist_copier.output = $$OUTPUT_DIR/Tools/MiniBrowser/qt/useragentlist.txt
+ualist_copier.output = $$OUTPUT_DIR/MiniBrowser/qt/useragentlist.txt
ualist_copier.tempNames = $$ualist_copier.input $$ualist_copier.output
ualist_copier.commands = $$QMAKE_COPY $$replace(ualist_copier.tempNames, "/", $$QMAKE_DIR_SEP)
ualist_copier.depends = $$ualist_copier.input
@@ -24,7 +25,7 @@ QMAKE_EXTRA_TARGETS += ualist_copier
# polluting the source tree.
qrc_copier.input = $$SRC_ROOT_DIR/Tools/MiniBrowser/MiniBrowser.qrc
-qrc_copier.output = $$OUTPUT_DIR/Tools/MiniBrowser/qt/MiniBrowser.qrc
+qrc_copier.output = $$OUTPUT_DIR/MiniBrowser/qt/MiniBrowser.qrc
qrc_copier.tempNames = $$qrc_copier.input $$qrc_copier.output
qrc_copier.commands = $$QMAKE_COPY $$replace(qrc_copier.tempNames, "/", $$QMAKE_DIR_SEP)
qrc_copier.depends = ualist_copier $$qrc_copier.input
diff --git a/Tools/MiniBrowser/mac/BrowserWindowController.m b/Tools/MiniBrowser/mac/BrowserWindowController.m
index 3a1ffbd..fd6f2e0 100644
--- a/Tools/MiniBrowser/mac/BrowserWindowController.m
+++ b/Tools/MiniBrowser/mac/BrowserWindowController.m
@@ -351,26 +351,26 @@ static void processDidExit(WKPageRef page, const void *clientInfo)
LOG(@"processDidExit");
}
-static void didChangeBackForwardList(WKPageRef page, const void *clientInfo)
+static void didChangeBackForwardList(WKPageRef page, WKBackForwardListItemRef addedItem, WKArrayRef removedItems, const void *clientInfo)
{
[(BrowserWindowController *)clientInfo validateToolbar];
}
// MARK: Policy Client Callbacks
-static void decidePolicyForNavigationAction(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo)
+static void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
LOG(@"decidePolicyForNavigationAction");
WKFramePolicyListenerUse(listener);
}
-static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo)
+static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
LOG(@"decidePolicyForNewWindowAction");
WKFramePolicyListenerUse(listener);
}
-static void decidePolicyForMIMEType(WKPageRef page, WKStringRef MIMEType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void *clientInfo)
+static void decidePolicyForMIMEType(WKPageRef page, WKFrameRef frame, WKStringRef MIMEType, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
WKFramePolicyListenerUse(listener);
}
@@ -645,6 +645,7 @@ static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParameters
0, // drawFooter
0, // printFrame
0, // showModal
+ 0, // didCompleteRubberBandForMainFrame
};
WKPageSetPageUIClient(_webView.pageRef, &uiClient);
}
diff --git a/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m b/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m
index 90db033..fcc6923 100644
--- a/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m
+++ b/Tools/MiniBrowser/mac/WebBundle/WebBundleMain.m
@@ -64,7 +64,7 @@ void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientI
memset(&client, 0, sizeof(client));
client.didClearWindowObjectForFrame = didClearWindowObjectForFrame;
- WKBundlePageSetLoaderClient(page, &client);
+ WKBundlePageSetPageLoaderClient(page, &client);
}
void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
diff --git a/Tools/MiniBrowser/qt/BrowserView.cpp b/Tools/MiniBrowser/qt/BrowserView.cpp
index 6118f79..7d6426e 100644
--- a/Tools/MiniBrowser/qt/BrowserView.cpp
+++ b/Tools/MiniBrowser/qt/BrowserView.cpp
@@ -33,17 +33,14 @@
BrowserView::BrowserView(QGraphicsWKView::BackingStoreType backingStoreType, QWKContext* context, QWidget* parent)
: QGraphicsView(parent)
, m_item(0)
- , m_context(context ? context : new QWKContext(this))
{
- m_item = new QGraphicsWKView(m_context, backingStoreType, 0);
+ m_item = new QGraphicsWKView(context, backingStoreType, 0);
setScene(new QGraphicsScene(this));
scene()->addItem(m_item);
setFrameShape(QFrame::NoFrame);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
- connect(m_item, SIGNAL(titleChanged(QString)), this, SLOT(setWindowTitle(QString)));
}
void BrowserView::resizeEvent(QResizeEvent* event)
diff --git a/Tools/MiniBrowser/qt/BrowserView.h b/Tools/MiniBrowser/qt/BrowserView.h
index e19cc59..593006e 100644
--- a/Tools/MiniBrowser/qt/BrowserView.h
+++ b/Tools/MiniBrowser/qt/BrowserView.h
@@ -48,7 +48,6 @@ protected:
private:
QGraphicsWKView* m_item;
- QWKContext* m_context;
};
#endif
diff --git a/Tools/MiniBrowser/qt/BrowserWindow.cpp b/Tools/MiniBrowser/qt/BrowserWindow.cpp
index c63c9d6..0405e9e 100644
--- a/Tools/MiniBrowser/qt/BrowserWindow.cpp
+++ b/Tools/MiniBrowser/qt/BrowserWindow.cpp
@@ -28,34 +28,92 @@
#include "BrowserWindow.h"
+#include "qwkpreferences.h"
+
static QWKPage* newPageFunction(QWKPage* page)
{
BrowserWindow* window = new BrowserWindow(page->context());
return window->page();
}
-QGraphicsWKView::BackingStoreType BrowserWindow::backingStoreTypeForNewWindow = QGraphicsWKView::Simple;
+QVector<qreal> BrowserWindow::m_zoomLevels;
-BrowserWindow::BrowserWindow(QWKContext* context)
+BrowserWindow::BrowserWindow(QWKContext* context, WindowOptions* options)
+ : m_isZoomTextOnly(false)
+ , m_currentZoom(1)
+ , m_context(context)
{
- setAttribute(Qt::WA_DeleteOnClose);
+ if (options)
+ m_windowOptions = *options;
+ else {
+ WindowOptions tmpOptions;
+ m_windowOptions = tmpOptions;
+ }
- m_menu = new QMenuBar();
- m_browser = new BrowserView(backingStoreTypeForNewWindow, context);
- m_addressBar = new QLineEdit();
+ if (m_windowOptions.useTiledBackingStore)
+ m_browser = new BrowserView(QGraphicsWKView::Tiled, context);
+ else
+ m_browser = new BrowserView(QGraphicsWKView::Simple, context);
- m_menu->addAction("New Window", this, SLOT(newWindow()));
- m_menu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
+ setAttribute(Qt::WA_DeleteOnClose);
- m_menu->addSeparator();
- m_menu->addAction("Quit", this, SLOT(close()));
+ connect(m_browser->view(), SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
+ connect(m_browser->view(), SIGNAL(titleChanged(const QString&)), SLOT(setWindowTitle(const QString&)));
+ connect(m_browser->view(), SIGNAL(urlChanged(const QUrl&)), SLOT(urlChanged(const QUrl&)));
+ this->setCentralWidget(m_browser);
m_browser->setFocus(Qt::OtherFocusReason);
+ QMenu* fileMenu = menuBar()->addMenu("&File");
+ fileMenu->addAction("New Window", this, SLOT(newWindow()), QKeySequence::New);
+ fileMenu->addAction("Open File", this, SLOT(openFile()), QKeySequence::Open);
+ fileMenu->addSeparator();
+ fileMenu->addAction("Quit", this, SLOT(close()));
+
+ QMenu* viewMenu = menuBar()->addMenu("&View");
+ viewMenu->addAction(page()->action(QWKPage::Stop));
+ viewMenu->addAction(page()->action(QWKPage::Reload));
+ viewMenu->addSeparator();
+ QAction* zoomIn = viewMenu->addAction("Zoom &In", this, SLOT(zoomIn()));
+ QAction* zoomOut = viewMenu->addAction("Zoom &Out", this, SLOT(zoomOut()));
+ QAction* resetZoom = viewMenu->addAction("Reset Zoom", this, SLOT(resetZoom()));
+ QAction* zoomText = viewMenu->addAction("Zoom Text Only", this, SLOT(toggleZoomTextOnly(bool)));
+ zoomText->setCheckable(true);
+ zoomText->setChecked(false);
+ viewMenu->addSeparator();
+ viewMenu->addAction("Take Screen Shot...", this, SLOT(screenshot()));
+
+ zoomIn->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Plus));
+ zoomOut->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Minus));
+ resetZoom->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
+
+ QMenu* windowMenu = menuBar()->addMenu("&Window");
+ QAction* toggleFullScreen = windowMenu->addAction("Toggle FullScreen", this, SIGNAL(enteredFullScreenMode(bool)));
+ toggleFullScreen->setShortcut(Qt::Key_F11);
+ toggleFullScreen->setCheckable(true);
+ toggleFullScreen->setChecked(false);
+ // When exit fullscreen mode by clicking on the exit area (bottom right corner) we must
+ // uncheck the Toggle FullScreen action.
+ toggleFullScreen->connect(this, SIGNAL(enteredFullScreenMode(bool)), SLOT(setChecked(bool)));
+ connect(this, SIGNAL(enteredFullScreenMode(bool)), this, SLOT(toggleFullScreenMode(bool)));
+
+ QMenu* toolsMenu = menuBar()->addMenu("&Develop");
+ QAction* toggleFrameFlattening = toolsMenu->addAction("Toggle Frame Flattening", this, SLOT(toggleFrameFlattening(bool)));
+ toggleFrameFlattening->setCheckable(true);
+ toggleFrameFlattening->setChecked(false);
+ toolsMenu->addSeparator();
+ toolsMenu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
+
+ QMenu* settingsMenu = menuBar()->addMenu("&Settings");
+ QAction* toggleAutoLoadImages = settingsMenu->addAction("Disable Auto Load Images", this, SLOT(toggleAutoLoadImages(bool)));
+ toggleAutoLoadImages->setCheckable(true);
+ toggleAutoLoadImages->setChecked(false);
+ QAction* toggleDisableJavaScript = settingsMenu->addAction("Disable JavaScript", this, SLOT(toggleDisableJavaScript(bool)));
+ toggleDisableJavaScript->setCheckable(true);
+ toggleDisableJavaScript->setChecked(false);
+
+ m_addressBar = new QLineEdit();
connect(m_addressBar, SIGNAL(returnPressed()), SLOT(changeLocation()));
- connect(m_browser->view(), SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
- connect(m_browser->view(), SIGNAL(titleChanged(const QString&)), SLOT(titleChanged(const QString&)));
- connect(m_browser->view(), SIGNAL(urlChanged(const QUrl&)), SLOT(urlChanged(const QUrl&)));
QToolBar* bar = addToolBar("Navigation");
bar->addAction(page()->action(QWKPage::Back));
@@ -64,17 +122,19 @@ BrowserWindow::BrowserWindow(QWKContext* context)
bar->addAction(page()->action(QWKPage::Stop));
bar->addWidget(m_addressBar);
- this->setMenuBar(m_menu);
- this->setCentralWidget(m_browser);
-
- m_browser->setFocus(Qt::OtherFocusReason);
-
QShortcut* selectAddressBar = new QShortcut(Qt::CTRL | Qt::Key_L, this);
connect(selectAddressBar, SIGNAL(activated()), this, SLOT(openLocation()));
page()->setCreateNewPageFunction(newPageFunction);
- resize(960, 640);
+ // the zoom values are chosen to be like in Mozilla Firefox 3
+ if (!m_zoomLevels.count()) {
+ m_zoomLevels << 0.3 << 0.5 << 0.67 << 0.8 << 0.9;
+ m_zoomLevels << 1;
+ m_zoomLevels << 1.1 << 1.2 << 1.33 << 1.5 << 1.7 << 2 << 2.4 << 3;
+ }
+
+ resize(800, 600);
show();
}
@@ -91,7 +151,14 @@ QWKPage* BrowserWindow::page()
BrowserWindow* BrowserWindow::newWindow(const QString& url)
{
- BrowserWindow* window = new BrowserWindow;
+ BrowserWindow* window;
+ if (m_windowOptions.useSeparateWebProcessPerWindow) {
+ QWKContext* context = new QWKContext();
+ window = new BrowserWindow(context);
+ context->setParent(window);
+ } else
+ window = new BrowserWindow(m_context);
+
window->load(url);
return window;
}
@@ -127,35 +194,113 @@ void BrowserWindow::loadProgress(int progress)
m_addressBar->setPalette(pallete);
}
-void BrowserWindow::titleChanged(const QString& title)
-{
- setWindowTitle(title);
-}
-
void BrowserWindow::urlChanged(const QUrl& url)
{
m_addressBar->setText(url.toString());
}
-void BrowserWindow::updateUserAgentList()
+void BrowserWindow::openFile()
{
- QFile file(":/useragentlist.txt");
+#ifndef QT_NO_FILEDIALOG
+ static const QString filter("HTML Files (*.htm *.html *.xhtml);;Text Files (*.txt);;Image Files (*.gif *.jpg *.png);;SVG Files (*.svg);;All Files (*)");
+
+ QFileDialog fileDialog(this, tr("Open"), QString(), filter);
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setFileMode(QFileDialog::ExistingFile);
+ fileDialog.setOptions(QFileDialog::ReadOnly);
+
+ if (fileDialog.exec()) {
+ QString selectedFile = fileDialog.selectedFiles()[0];
+ if (!selectedFile.isEmpty())
+ load(selectedFile);
+ }
+#endif
+}
- if (file.open(QIODevice::ReadOnly)) {
- while (!file.atEnd()) {
- QString agent = file.readLine().trimmed();
- if (!m_userAgentList.contains(agent))
- m_userAgentList << agent;
- }
- file.close();
+void BrowserWindow::screenshot()
+{
+ QPixmap pixmap = QPixmap::grabWidget(m_browser);
+ QLabel* label = 0;
+#if !defined(Q_OS_SYMBIAN)
+ label = new QLabel;
+ label->setAttribute(Qt::WA_DeleteOnClose);
+ label->setWindowTitle("Screenshot - Preview");
+ label->setPixmap(pixmap);
+ label->show();
+#endif
+
+#ifndef QT_NO_FILEDIALOG
+ QString fileName = QFileDialog::getSaveFileName(label, "Screenshot", QString(), QString("PNG File (.png)"));
+ if (!fileName.isEmpty()) {
+ QRegExp rx("*.png");
+ rx.setCaseSensitivity(Qt::CaseInsensitive);
+ rx.setPatternSyntax(QRegExp::Wildcard);
+
+ if (!rx.exactMatch(fileName))
+ fileName += ".png";
+
+ pixmap.save(fileName, "png");
+ if (label)
+ label->setWindowTitle(QString("Screenshot - Saved at %1").arg(fileName));
}
+#endif
+}
- Q_ASSERT(!m_userAgentList.isEmpty());
- QWKPage* wkPage = page();
- if (!(wkPage->customUserAgent().isEmpty() || m_userAgentList.contains(wkPage->customUserAgent())))
- m_userAgentList << wkPage->customUserAgent();
+void BrowserWindow::zoomIn()
+{
+ if (m_isZoomTextOnly)
+ m_currentZoom = page()->textZoomFactor();
+ else
+ m_currentZoom = page()->pageZoomFactor();
+
+ int i = m_zoomLevels.indexOf(m_currentZoom);
+ Q_ASSERT(i >= 0);
+ if (i < m_zoomLevels.count() - 1)
+ m_currentZoom = m_zoomLevels[i + 1];
+
+ applyZoom();
}
+void BrowserWindow::zoomOut()
+{
+ if (m_isZoomTextOnly)
+ m_currentZoom = page()->textZoomFactor();
+ else
+ m_currentZoom = page()->pageZoomFactor();
+
+ int i = m_zoomLevels.indexOf(m_currentZoom);
+ Q_ASSERT(i >= 0);
+ if (i > 0)
+ m_currentZoom = m_zoomLevels[i - 1];
+
+ applyZoom();
+}
+
+void BrowserWindow::resetZoom()
+{
+ m_currentZoom = 1;
+ applyZoom();
+}
+
+void BrowserWindow::toggleZoomTextOnly(bool b)
+{
+ m_isZoomTextOnly = b;
+}
+
+void BrowserWindow::toggleFullScreenMode(bool enable)
+{
+ if (enable)
+ setWindowState(Qt::WindowFullScreen);
+ else
+ setWindowState(Qt::WindowNoState);
+}
+
+void BrowserWindow::toggleFrameFlattening(bool toggle)
+{
+ page()->preferences()->setAttribute(QWKPreferences::FrameFlatteningEnabled, toggle);
+}
+
+
void BrowserWindow::showUserAgentDialog()
{
updateUserAgentList();
@@ -185,9 +330,45 @@ void BrowserWindow::showUserAgentDialog()
page()->setCustomUserAgent(combo->currentText());
}
+void BrowserWindow::toggleDisableJavaScript(bool enable)
+{
+ page()->preferences()->setAttribute(QWKPreferences::JavascriptEnabled, !enable);
+}
+
+void BrowserWindow::toggleAutoLoadImages(bool enable)
+{
+ page()->preferences()->setAttribute(QWKPreferences::AutoLoadImages, !enable);
+}
+
+void BrowserWindow::updateUserAgentList()
+{
+ QFile file(":/useragentlist.txt");
+
+ if (file.open(QIODevice::ReadOnly)) {
+ while (!file.atEnd()) {
+ QString agent = file.readLine().trimmed();
+ if (!m_userAgentList.contains(agent))
+ m_userAgentList << agent;
+ }
+ file.close();
+ }
+
+ Q_ASSERT(!m_userAgentList.isEmpty());
+ QWKPage* wkPage = page();
+ if (!(wkPage->customUserAgent().isEmpty() || m_userAgentList.contains(wkPage->customUserAgent())))
+ m_userAgentList << wkPage->customUserAgent();
+}
+
+void BrowserWindow::applyZoom()
+{
+ if (m_isZoomTextOnly)
+ page()->setTextZoomFactor(m_currentZoom);
+ else
+ page()->setPageZoomFactor(m_currentZoom);
+}
+
BrowserWindow::~BrowserWindow()
{
delete m_addressBar;
delete m_browser;
- delete m_menu;
}
diff --git a/Tools/MiniBrowser/qt/BrowserWindow.h b/Tools/MiniBrowser/qt/BrowserWindow.h
index f984309..c79b2d0 100644
--- a/Tools/MiniBrowser/qt/BrowserWindow.h
+++ b/Tools/MiniBrowser/qt/BrowserWindow.h
@@ -30,38 +30,60 @@
#define BrowserWindow_h
#include "BrowserView.h"
+
+#include "MiniBrowserApplication.h"
#include <QStringList>
#include <QtGui>
-#include <qgraphicswkview.h>
class BrowserWindow : public QMainWindow {
Q_OBJECT
public:
- BrowserWindow(QWKContext* = 0);
+ BrowserWindow(QWKContext*, WindowOptions* = 0);
~BrowserWindow();
void load(const QString& url);
QWKPage* page();
- static QGraphicsWKView::BackingStoreType backingStoreTypeForNewWindow;
-
public slots:
BrowserWindow* newWindow(const QString& url = "about:blank");
void openLocation();
+signals:
+ void enteredFullScreenMode(bool on);
+
protected slots:
void changeLocation();
void loadProgress(int progress);
- void titleChanged(const QString&);
void urlChanged(const QUrl&);
+ void openFile();
+
+ void zoomIn();
+ void zoomOut();
+ void resetZoom();
+ void toggleZoomTextOnly(bool on);
+ void screenshot();
+
+ void toggleFullScreenMode(bool enable);
+
+ void toggleFrameFlattening(bool);
void showUserAgentDialog();
+ void toggleAutoLoadImages(bool);
+ void toggleDisableJavaScript(bool);
+
private:
void updateUserAgentList();
+ void applyZoom();
+
+ static QVector<qreal> m_zoomLevels;
+ bool m_isZoomTextOnly;
+ qreal m_currentZoom;
+
+ QWKContext* m_context;
+ WindowOptions m_windowOptions;
BrowserView* m_browser;
- QMenuBar* m_menu;
QLineEdit* m_addressBar;
QStringList m_userAgentList;
};
diff --git a/Tools/MiniBrowser/qt/MiniBrowser.pro b/Tools/MiniBrowser/qt/MiniBrowser.pro
index c297207..cefa678 100644
--- a/Tools/MiniBrowser/qt/MiniBrowser.pro
+++ b/Tools/MiniBrowser/qt/MiniBrowser.pro
@@ -2,18 +2,22 @@ TEMPLATE = app
TARGET = MiniBrowser
SOURCES += \
- main.cpp \
BrowserView.cpp \
BrowserWindow.cpp \
+ main.cpp \
+ MiniBrowserApplication.cpp \
+ UrlLoader.cpp \
+ utils.cpp \
HEADERS += \
BrowserView.h \
BrowserWindow.h \
-
-CONFIG += uitools
+ MiniBrowserApplication.h \
+ UrlLoader.h \
+ utils.h \
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
-include(../../../WebKit.pri)
+include(../../../Source/WebKit.pri)
INCLUDEPATH += \
$$PWD/../../../Source/WebKit2/ \
@@ -55,4 +59,4 @@ contains(QT_CONFIG, opengl) {
# We copy the resource file to the build directory.
# The copier is defined in Tools/MiniBrowser/DerivedSources.pro.
RESOURCES += \
- $$OUTPUT_DIR/Tools/MiniBrowser/qt/MiniBrowser.qrc
+ $$OUTPUT_DIR/MiniBrowser/qt/MiniBrowser.qrc
diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp
new file mode 100644
index 0000000..4ed7895
--- /dev/null
+++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.cpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2010 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "MiniBrowserApplication.h"
+
+#include "utils.h"
+#include <QRegExp>
+
+MiniBrowserApplication::MiniBrowserApplication(int& argc, char** argv)
+ : QApplication(argc, argv, QApplication::GuiServer)
+ , m_windowOptions()
+ , m_isRobotized(false)
+ , m_robotTimeoutSeconds(0)
+ , m_robotExtraTimeSeconds(0)
+{
+ setOrganizationName("Nokia");
+ setApplicationName("QtMiniBrowser");
+ setApplicationVersion("0.1");
+
+ handleUserOptions();
+}
+
+void MiniBrowserApplication::handleUserOptions()
+{
+ QStringList args = arguments();
+ QFileInfo program(args.at(0));
+ QString programName("MiniBrowser");
+ if (program.exists())
+ programName = program.baseName();
+
+ if (args.contains("-help")) {
+ qDebug() << "Usage:" << programName.toLatin1().data()
+ << "[-r list]"
+ << "[-robot-timeout seconds]"
+ << "[-robot-extra-time seconds]"
+ << "[-tiled-backing-store]"
+ << "[-separate-web-process-per-window]"
+ << "URLs";
+ appQuit(0);
+ }
+
+ int robotIndex = args.indexOf("-r");
+ if (robotIndex != -1) {
+ QString listFile = takeOptionValue(&args, robotIndex);
+ if (listFile.isEmpty())
+ appQuit(1, "-r needs a list file to start in robotized mode");
+ if (!QFile::exists(listFile))
+ appQuit(1, "The list file supplied to -r does not exist.");
+
+ m_isRobotized = true;
+ m_urls = QStringList(listFile);
+ } else {
+ int lastArg = args.lastIndexOf(QRegExp("^-.*"));
+ m_urls = (lastArg != -1) ? args.mid(++lastArg) : args.mid(1);
+ }
+
+ int robotTimeoutIndex = args.indexOf("-robot-timeout");
+ if (robotTimeoutIndex != -1)
+ m_robotTimeoutSeconds = takeOptionValue(&args, robotTimeoutIndex).toInt();
+
+ int robotExtraTimeIndex = args.indexOf("-robot-extra-time");
+ if (robotExtraTimeIndex != -1)
+ m_robotExtraTimeSeconds = takeOptionValue(&args, robotExtraTimeIndex).toInt();
+
+ if (args.contains("-tiled-backing-store"))
+ m_windowOptions.useTiledBackingStore = true;
+
+ if (args.contains("-separate-web-process-per-window"))
+ m_windowOptions.useSeparateWebProcessPerWindow = true;
+}
diff --git a/Tools/MiniBrowser/qt/MiniBrowserApplication.h b/Tools/MiniBrowser/qt/MiniBrowserApplication.h
new file mode 100644
index 0000000..2039764
--- /dev/null
+++ b/Tools/MiniBrowser/qt/MiniBrowserApplication.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2010 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MiniBrowserApplication_h
+#define MiniBrowserApplication_h
+
+#include <QStringList>
+#include <QtGui>
+
+struct WindowOptions {
+ WindowOptions()
+ : useTiledBackingStore(false)
+ , useSeparateWebProcessPerWindow(false)
+ {
+ }
+
+ bool useTiledBackingStore;
+ bool useSeparateWebProcessPerWindow;
+};
+
+class MiniBrowserApplication : public QApplication {
+ Q_OBJECT
+
+public:
+ MiniBrowserApplication(int& argc, char** argv);
+ QStringList urls() const { return m_urls; }
+ bool isRobotized() const { return m_isRobotized; }
+ int robotTimeout() const { return m_robotTimeoutSeconds; }
+ int robotExtraTime() const { return m_robotExtraTimeSeconds; }
+
+ WindowOptions m_windowOptions;
+
+private:
+ void handleUserOptions();
+
+private:
+ bool m_isRobotized;
+ int m_robotTimeoutSeconds;
+ int m_robotExtraTimeSeconds;
+ QStringList m_urls;
+};
+
+#endif
diff --git a/Tools/MiniBrowser/qt/UrlLoader.cpp b/Tools/MiniBrowser/qt/UrlLoader.cpp
new file mode 100644
index 0000000..600d477
--- /dev/null
+++ b/Tools/MiniBrowser/qt/UrlLoader.cpp
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "UrlLoader.h"
+
+#include <QDebug>
+#include <QFile>
+
+UrlLoader::UrlLoader(BrowserWindow* browserWindow, const QString& inputFileName, int timeoutSeconds, int extraTimeSeconds)
+ : m_browserWindow(browserWindow)
+ , m_stdOut(stdout)
+ , m_loaded(0)
+ , m_numFramesLoading(0)
+{
+ m_checkIfFinishedTimer.setInterval(200);
+ m_checkIfFinishedTimer.setSingleShot(true);
+ connect(&m_checkIfFinishedTimer, SIGNAL(timeout()), this, SLOT(checkIfFinished()));
+ // loadStarted and loadFinished on QWebPage is emitted for each frame/sub-frame
+ connect(m_browserWindow->page(), SIGNAL(loadStarted()), this, SLOT(frameLoadStarted()));
+ connect(m_browserWindow->page(), SIGNAL(loadFinished(bool)), this, SLOT(frameLoadFinished()));
+
+ if (timeoutSeconds) {
+ m_timeoutTimer.setInterval(timeoutSeconds * 1000);
+ m_timeoutTimer.setSingleShot(true);
+ connect(m_browserWindow, SIGNAL(loadStarted()), &m_timeoutTimer, SLOT(start()));
+ connect(&m_timeoutTimer, SIGNAL(timeout()), this, SLOT(loadNext()));
+ }
+ if (extraTimeSeconds) {
+ m_extraTimeTimer.setInterval(extraTimeSeconds * 1000);
+ m_extraTimeTimer.setSingleShot(true);
+ connect(this, SIGNAL(pageLoadFinished()), &m_extraTimeTimer, SLOT(start()));
+ connect(&m_extraTimeTimer, SIGNAL(timeout()), this, SLOT(loadNext()));
+ } else
+ connect(this, SIGNAL(pageLoadFinished()), this, SLOT(loadNext()));
+ loadUrlList(inputFileName);
+}
+
+void UrlLoader::loadNext()
+{
+ m_timeoutTimer.stop();
+ m_extraTimeTimer.stop();
+ m_checkIfFinishedTimer.stop();
+ m_numFramesLoading = 0;
+ QString qstr;
+ if (getUrl(qstr)) {
+ QUrl url(qstr, QUrl::StrictMode);
+ if (url.isValid()) {
+ m_stdOut << "Loading " << qstr << " ......" << ++m_loaded << endl;
+ m_browserWindow->load(url.toString());
+ } else
+ loadNext();
+ } else
+ disconnect(m_browserWindow, 0, this, 0);
+}
+
+void UrlLoader::checkIfFinished()
+{
+ if (!m_numFramesLoading)
+ emit pageLoadFinished();
+}
+
+void UrlLoader::frameLoadStarted()
+{
+ ++m_numFramesLoading;
+ m_checkIfFinishedTimer.stop();
+}
+
+void UrlLoader::frameLoadFinished()
+{
+ Q_ASSERT(m_numFramesLoading > 0);
+ --m_numFramesLoading;
+ // Once our frame has finished loading, wait a moment to call loadNext for cases
+ // where a sub-frame starts loading or another frame is loaded through JavaScript.
+ m_checkIfFinishedTimer.start();
+}
+
+void UrlLoader::loadUrlList(const QString& inputFileName)
+{
+ QFile inputFile(inputFileName);
+ if (inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QTextStream stream(&inputFile);
+ QString line;
+ while (true) {
+ line = stream.readLine();
+ if (line.isNull())
+ break;
+ m_urls.append(line);
+ }
+ } else {
+ qDebug() << "Can't open list file";
+ exit(0);
+ }
+ m_index = 0;
+ inputFile.close();
+}
+
+bool UrlLoader::getUrl(QString& qstr)
+{
+ if (m_index == m_urls.size())
+ return false;
+
+ qstr = m_urls[m_index++];
+ return true;
+}
diff --git a/Tools/MiniBrowser/qt/UrlLoader.h b/Tools/MiniBrowser/qt/UrlLoader.h
new file mode 100644
index 0000000..01e67c3
--- /dev/null
+++ b/Tools/MiniBrowser/qt/UrlLoader.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2009 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UrlLoader_h
+#define UrlLoader_h
+
+#include "BrowserWindow.h"
+
+#include <QTextStream>
+#include <QTimer>
+#include <QVector>
+
+class UrlLoader : public QObject {
+ Q_OBJECT
+
+public:
+ UrlLoader(BrowserWindow*, const QString&, int, int);
+
+public slots:
+ void loadNext();
+
+private slots:
+ void checkIfFinished();
+ void frameLoadStarted();
+ void frameLoadFinished();
+
+signals:
+ void pageLoadFinished();
+
+private:
+ void loadUrlList(const QString& inputFileName);
+ bool getUrl(QString& qstr);
+
+private:
+ QVector<QString> m_urls;
+ int m_index;
+ BrowserWindow* m_browserWindow;
+ QTextStream m_stdOut;
+ int m_loaded;
+ QTimer m_timeoutTimer;
+ QTimer m_extraTimeTimer;
+ QTimer m_checkIfFinishedTimer;
+ int m_numFramesLoading;
+};
+
+#endif
diff --git a/Tools/MiniBrowser/qt/main.cpp b/Tools/MiniBrowser/qt/main.cpp
index 8c987c5..8f4c1ea 100644
--- a/Tools/MiniBrowser/qt/main.cpp
+++ b/Tools/MiniBrowser/qt/main.cpp
@@ -27,38 +27,46 @@
*/
#include "BrowserWindow.h"
+
+#include "MiniBrowserApplication.h"
+#include "UrlLoader.h"
#include <QLatin1String>
#include <QRegExp>
#include <qgraphicswkview.h>
#include <QtGui>
-int main(int argc, char** argv) {
- QApplication app(argc, argv);
-
- QStringList args = QApplication::arguments();
- args.removeAt(0);
+int main(int argc, char** argv)
+{
+ MiniBrowserApplication app(argc, argv);
- QGraphicsWKView::BackingStoreType backingStoreTypeToUse = QGraphicsWKView::Simple;
- int indexOfTiledOption;
- if ((indexOfTiledOption = args.indexOf(QRegExp(QLatin1String("-tiled")))) != -1) {
- backingStoreTypeToUse = QGraphicsWKView::Tiled;
- args.removeAt(indexOfTiledOption);
+ if (app.isRobotized()) {
+ QWKContext* context = new QWKContext;
+ BrowserWindow* window = new BrowserWindow(context, &app.m_windowOptions);
+ UrlLoader loader(window, app.urls().at(0), app.robotTimeout(), app.robotExtraTime());
+ loader.loadNext();
+ window->show();
+ return app.exec();
}
- if (args.isEmpty()) {
+ QStringList urls = app.urls();
+
+ if (urls.isEmpty()) {
QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html"));
if (QDir(defaultUrl).exists())
- args.append(defaultUrl);
+ urls.append(defaultUrl);
else
- args.append("http://www.google.com");
+ urls.append("http://www.google.com");
}
- BrowserWindow::backingStoreTypeForNewWindow = backingStoreTypeToUse;
- BrowserWindow* window = new BrowserWindow;
- window->load(args[0]);
+ QWKContext* context = new QWKContext;
+ BrowserWindow* window = new BrowserWindow(context, &app.m_windowOptions);
+ if (app.m_windowOptions.useSeparateWebProcessPerWindow)
+ context->setParent(window);
+
+ window->load(urls.at(0));
- for (int i = 1; i < args.size(); ++i)
- window->newWindow(args[i]);
+ for (int i = 1; i < urls.size(); ++i)
+ window->newWindow(urls.at(i));
app.exec();
diff --git a/Tools/MiniBrowser/qt/utils.cpp b/Tools/MiniBrowser/qt/utils.cpp
new file mode 100644
index 0000000..494da71
--- /dev/null
+++ b/Tools/MiniBrowser/qt/utils.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2011 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "utils.h"
+
+QString takeOptionValue(QStringList* arguments, int index)
+{
+ QString result;
+
+ if (++index < arguments->count() && !arguments->at(index).startsWith("-"))
+ result = arguments->takeAt(index);
+
+ return result;
+}
+
+QString formatKeys(QList<QString> keys)
+{
+ QString result;
+ for (int i = 0; i < keys.count() - 1; i++)
+ result.append(keys.at(i) + "|");
+ result.append(keys.last());
+ return result;
+}
+
+QList<QString> enumToKeys(const QMetaObject o, const QString& name, const QString& strip)
+{
+ QList<QString> list;
+
+ int enumIndex = o.indexOfEnumerator(name.toLatin1().data());
+ QMetaEnum enumerator = o.enumerator(enumIndex);
+
+ if (enumerator.isValid()) {
+ for (int i = 0; i < enumerator.keyCount(); i++) {
+ QString key(enumerator.valueToKey(i));
+ list.append(key.remove(strip));
+ }
+ }
+
+ return list;
+}
+
+void appQuit(int exitCode, const QString& msg)
+{
+ if (!msg.isEmpty()) {
+ if (exitCode > 0)
+ qDebug("ERROR: %s", msg.toLatin1().data());
+ else
+ qDebug() << msg;
+ }
+ exit(exitCode);
+}
+
+QUrl urlFromUserInput(const QString& string)
+{
+ QString input(string);
+ QFileInfo fi(input);
+ if (fi.exists() && fi.isRelative())
+ input = fi.absoluteFilePath();
+
+ return QUrl::fromUserInput(input);
+}
diff --git a/Tools/MiniBrowser/qt/utils.h b/Tools/MiniBrowser/qt/utils.h
new file mode 100644
index 0000000..2ec7af2
--- /dev/null
+++ b/Tools/MiniBrowser/qt/utils.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2011 University of Szeged
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef utils_h
+#define utils_h
+
+#include <QtCore>
+
+#ifndef NO_RETURN
+#if defined(__CC_ARM) || defined(__ARMCC__)
+#define NO_RETURN __declspec(noreturn)
+#elif defined(__GNUC__)
+#define NO_RETURN __attribute((__noreturn__))
+#else
+#define NO_RETURN
+#endif
+#endif
+
+// options handling
+QString takeOptionValue(QStringList* arguments, int index);
+QString formatKeys(QList<QString> keys);
+QList<QString> enumToKeys(const QMetaObject, const QString&, const QString&);
+
+NO_RETURN void appQuit(int status, const QString& msg = QString());
+
+QUrl urlFromUserInput(const QString& input);
+
+#endif
diff --git a/Tools/QtTestBrowser/QtTestBrowser.pro b/Tools/QtTestBrowser/QtTestBrowser.pro
index 62d2c02..6c8cdf4 100644
--- a/Tools/QtTestBrowser/QtTestBrowser.pro
+++ b/Tools/QtTestBrowser/QtTestBrowser.pro
@@ -25,7 +25,7 @@ HEADERS += \
CONFIG += uitools
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../..
-include(../../WebKit.pri)
+include(../../Source/WebKit.pri)
DESTDIR = $$OUTPUT_DIR/bin
!CONFIG(standalone_package): CONFIG -= app_bundle
diff --git a/Tools/QtTestBrowser/launcherwindow.cpp b/Tools/QtTestBrowser/launcherwindow.cpp
index 067b146..bd332fc 100644
--- a/Tools/QtTestBrowser/launcherwindow.cpp
+++ b/Tools/QtTestBrowser/launcherwindow.cpp
@@ -96,6 +96,7 @@ void LauncherWindow::initializeView()
{
delete m_view;
+ m_inputUrl = addressUrl();
QUrl url = page()->mainFrame()->url();
setPage(new WebPage(this));
page()->setQnamThreaded(m_windowOptions.useThreadedQnam);
@@ -142,6 +143,10 @@ void LauncherWindow::initializeView()
if (url.isValid())
page()->mainFrame()->load(url);
+ else {
+ setAddressUrl(m_inputUrl);
+ m_inputUrl = QString();
+ }
}
void LauncherWindow::applyPrefs()
@@ -259,6 +264,24 @@ void LauncherWindow::createChrome()
toolsMenu->addSeparator();
+ QAction* toggleLocalStorage = toolsMenu->addAction("Enable Local Storage", this, SLOT(toggleLocalStorage(bool)));
+ toggleLocalStorage->setCheckable(true);
+ toggleLocalStorage->setChecked(m_windowOptions.useLocalStorage);
+
+ QAction* toggleOfflineStorageDatabase = toolsMenu->addAction("Enable Offline Storage Database", this, SLOT(toggleOfflineStorageDatabase(bool)));
+ toggleOfflineStorageDatabase->setCheckable(true);
+ toggleOfflineStorageDatabase->setChecked(m_windowOptions.useOfflineStorageDatabase);
+
+ QAction* toggleOfflineWebApplicationCache = toolsMenu->addAction("Enable Offline Web Application Cache", this, SLOT(toggleOfflineWebApplicationCache(bool)));
+ toggleOfflineWebApplicationCache->setCheckable(true);
+ toggleOfflineWebApplicationCache->setChecked(m_windowOptions.useOfflineWebApplicationCache);
+
+ QAction* offlineStorageDefaultQuotaAction = toolsMenu->addAction("Set Offline Storage Default Quota Size", this, SLOT(setOfflineStorageDefaultQuota()));
+ offlineStorageDefaultQuotaAction->setCheckable(true);
+ offlineStorageDefaultQuotaAction->setChecked(m_windowOptions.offlineStorageDefaultQuotaSize);
+
+ toolsMenu->addSeparator();
+
QAction* userAgentAction = toolsMenu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
userAgentAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_U));
@@ -367,6 +390,14 @@ void LauncherWindow::createChrome()
QMenu* settingsMenu = menuBar()->addMenu("&Settings");
+ QAction* toggleAutoLoadImages = settingsMenu->addAction("Disable Auto Load Images", this, SLOT(toggleAutoLoadImages(bool)));
+ toggleAutoLoadImages->setCheckable(true);
+ toggleAutoLoadImages->setChecked(false);
+
+ QAction* togglePlugins = settingsMenu->addAction("Disable Plugins", this, SLOT(togglePlugins(bool)));
+ togglePlugins->setCheckable(true);
+ togglePlugins->setChecked(false);
+
QAction* toggleInterruptingJavaScripteEnabled = settingsMenu->addAction("Enable interrupting js scripts", this, SLOT(toggleInterruptingJavaScriptEnabled(bool)));
toggleInterruptingJavaScripteEnabled->setCheckable(true);
toggleInterruptingJavaScripteEnabled->setChecked(false);
@@ -530,8 +561,13 @@ void LauncherWindow::loadStarted()
void LauncherWindow::loadFinished()
{
QUrl url = page()->mainFrame()->url();
- setAddressUrl(url.toString(QUrl::RemoveUserInfo));
addCompleterEntry(url);
+ if (m_inputUrl.isEmpty())
+ setAddressUrl(url.toString(QUrl::RemoveUserInfo));
+ else {
+ setAddressUrl(m_inputUrl);
+ m_inputUrl = QString();
+ }
}
void LauncherWindow::showLinkHover(const QString &link, const QString &toolTip)
@@ -770,6 +806,16 @@ void LauncherWindow::toggleJavascriptCanOpenWindows(bool enable)
page()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, enable);
}
+void LauncherWindow::toggleAutoLoadImages(bool enable)
+{
+ page()->settings()->setAttribute(QWebSettings::AutoLoadImages, !enable);
+}
+
+void LauncherWindow::togglePlugins(bool enable)
+{
+ page()->settings()->setAttribute(QWebSettings::PluginsEnabled, !enable);
+}
+
#if defined(QT_CONFIGURED_WITH_OPENGL)
void LauncherWindow::toggleQGLWidgetViewport(bool enable)
{
@@ -874,6 +920,40 @@ void LauncherWindow::updateFPS(int fps)
#endif
}
+void LauncherWindow::toggleLocalStorage(bool toggle)
+{
+ m_windowOptions.useLocalStorage = toggle;
+ page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, toggle);
+}
+
+void LauncherWindow::toggleOfflineStorageDatabase(bool toggle)
+{
+ m_windowOptions.useOfflineStorageDatabase = toggle;
+ page()->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, toggle);
+}
+
+void LauncherWindow::toggleOfflineWebApplicationCache(bool toggle)
+{
+ m_windowOptions.useOfflineWebApplicationCache = toggle;
+ page()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, toggle);
+}
+
+void LauncherWindow::setOfflineStorageDefaultQuota()
+{
+ // For command line execution, quota size is taken from command line.
+ if (m_windowOptions.offlineStorageDefaultQuotaSize)
+ page()->settings()->setOfflineStorageDefaultQuota(m_windowOptions.offlineStorageDefaultQuotaSize);
+ else {
+#ifndef QT_NO_INPUTDIALOG
+ bool ok;
+ // Maximum size is set to 25 * 1024 * 1024.
+ int quotaSize = QInputDialog::getInt(this, "Offline Storage Default Quota Size" , "Quota Size", 0, 0, 26214400, 1, &ok);
+ if (ok)
+ page()->settings()->setOfflineStorageDefaultQuota(quotaSize);
+#endif
+ }
+}
+
LauncherWindow* LauncherWindow::newWindow()
{
LauncherWindow* mw = new LauncherWindow(&m_windowOptions);
diff --git a/Tools/QtTestBrowser/launcherwindow.h b/Tools/QtTestBrowser/launcherwindow.h
index 849b15d..e13858e 100644
--- a/Tools/QtTestBrowser/launcherwindow.h
+++ b/Tools/QtTestBrowser/launcherwindow.h
@@ -94,6 +94,10 @@ public:
, showFrameRate(false)
, resizesToContents(false)
, viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
+ , useLocalStorage(false)
+ , useOfflineStorageDatabase(false)
+ , useOfflineWebApplicationCache(false)
+ , offlineStorageDefaultQuotaSize(0)
#if defined(QT_CONFIGURED_WITH_OPENGL)
, useQGLWidgetViewport(false)
#endif
@@ -110,6 +114,10 @@ public:
bool showFrameRate;
bool resizesToContents;
QGraphicsView::ViewportUpdateMode viewportUpdateMode;
+ bool useLocalStorage;
+ bool useOfflineStorageDatabase;
+ bool useOfflineWebApplicationCache;
+ quint64 offlineStorageDefaultQuotaSize;
#if defined(QT_CONFIGURED_WITH_OPENGL)
bool useQGLWidgetViewport;
#endif
@@ -163,6 +171,12 @@ protected slots:
void toggleFrameFlattening(bool toggle);
void toggleInterruptingJavaScriptEnabled(bool enable);
void toggleJavascriptCanOpenWindows(bool enable);
+ void toggleAutoLoadImages(bool enable);
+ void togglePlugins(bool enable);
+ void toggleLocalStorage(bool toggle);
+ void toggleOfflineStorageDatabase(bool toggle);
+ void toggleOfflineWebApplicationCache(bool toggle);
+ void setOfflineStorageDefaultQuota();
#if defined(QT_CONFIGURED_WITH_OPENGL)
void toggleQGLWidgetViewport(bool enable);
@@ -206,6 +220,8 @@ private:
QPropertyAnimation* m_zoomAnimation;
QList<QTouchEvent::TouchPoint> m_touchPoints;
bool m_touchMocking;
+
+ QString m_inputUrl;
};
#endif
diff --git a/Tools/QtTestBrowser/locationedit.h b/Tools/QtTestBrowser/locationedit.h
index 752497e..962b422 100644
--- a/Tools/QtTestBrowser/locationedit.h
+++ b/Tools/QtTestBrowser/locationedit.h
@@ -28,6 +28,8 @@
#ifndef locationedit_h
#define locationedit_h
+#include <qconfig.h>
+
#ifndef QT_NO_INPUTDIALOG
#include <QtGui>
diff --git a/Tools/QtTestBrowser/main.cpp b/Tools/QtTestBrowser/main.cpp
index ec5f1d9..eecd9c3 100644
--- a/Tools/QtTestBrowser/main.cpp
+++ b/Tools/QtTestBrowser/main.cpp
@@ -164,18 +164,18 @@ void LauncherApplication::handleUserOptions()
}
if (args.contains("-local-storage-enabled"))
- QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
+ windowOptions.useLocalStorage = true;
if (args.contains("-offline-storage-database-enabled"))
- QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
+ windowOptions.useOfflineStorageDatabase = true;
if (args.contains("-offline-web-application-cache-enabled"))
- QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
+ windowOptions.useOfflineWebApplicationCache = true;
int setOfflineStorageDefaultQuotaIndex = args.indexOf("-set-offline-storage-default-quota");
if (setOfflineStorageDefaultQuotaIndex != -1) {
- int maxSize = takeOptionValue(&args, setOfflineStorageDefaultQuotaIndex).toInt();
- QWebSettings::globalSettings()->setOfflineStorageDefaultQuota(maxSize);
+ unsigned int maxSize = takeOptionValue(&args, setOfflineStorageDefaultQuotaIndex).toUInt();
+ windowOptions.offlineStorageDefaultQuotaSize = maxSize;
}
if (defaultForAnimations)
diff --git a/Tools/QtTestBrowser/mainwindow.cpp b/Tools/QtTestBrowser/mainwindow.cpp
index 9f4aec5..e2ea41d 100644
--- a/Tools/QtTestBrowser/mainwindow.cpp
+++ b/Tools/QtTestBrowser/mainwindow.cpp
@@ -171,6 +171,14 @@ void MainWindow::load(const QUrl& url)
page()->mainFrame()->load(url);
}
+QString MainWindow::addressUrl() const
+{
+#ifndef QT_NO_INPUTDIALOG
+ return urlEdit->text();
+#endif
+ return QString();
+}
+
void MainWindow::changeLocation()
{
#ifndef QT_NO_INPUTDIALOG
diff --git a/Tools/QtTestBrowser/mainwindow.h b/Tools/QtTestBrowser/mainwindow.h
index 3a39d57..08fa81e 100644
--- a/Tools/QtTestBrowser/mainwindow.h
+++ b/Tools/QtTestBrowser/mainwindow.h
@@ -59,6 +59,9 @@ protected slots:
void openLocation();
void changeLocation();
+protected:
+ QString addressUrl() const;
+
private:
void buildUI();
diff --git a/Tools/QueueStatusServer/templates/submittoews.html b/Tools/QueueStatusServer/templates/submittoews.html
index fb9d8aa..935d7bb 100644
--- a/Tools/QueueStatusServer/templates/submittoews.html
+++ b/Tools/QueueStatusServer/templates/submittoews.html
@@ -1,3 +1,3 @@
<form name="submit_to_ews" enctype="multipart/form-data" method="post">
-Patch to submit: <input name="attachment_id"><input type="submit" value="Submit for EWS Processing"></div>
+Attachment id of patch to submit: <input name="attachment_id"><input type="submit" value="Submit for EWS Processing"></div>
</form>
diff --git a/Tools/Scripts/build-webkit b/Tools/Scripts/build-webkit
index 0b58113..74015ec 100755
--- a/Tools/Scripts/build-webkit
+++ b/Tools/Scripts/build-webkit
@@ -85,12 +85,14 @@ my (
$javaScriptDebuggerSupport,
$linkPrefetchSupport,
$mathmlSupport,
+ $mediaStatisticsSupport,
$meterTagSupport,
$netscapePluginSupport,
$notificationsSupport,
$offlineWebApplicationSupport,
$orientationEventsSupport,
$progressTagSupport,
+ $registerProtocolHandlerSupport,
$sharedWorkersSupport,
$svgSupport,
$svgAnimationSupport,
@@ -116,8 +118,8 @@ my (
);
my @features = (
- { option => "3d-canvas", desc => "Toggle 3D canvas support",
- define => "ENABLE_3D_CANVAS", default => (isAppleMacWebKit() && !isTiger() && !isLeopard()), value => \$threeDCanvasSupport },
+ { option => "3d-canvas", desc => "Toggle 3D canvas (WebGL) support",
+ define => "ENABLE_WEBGL", default => (isAppleMacWebKit() && !isTiger() && !isLeopard()), value => \$threeDCanvasSupport },
{ option => "3d-rendering", desc => "Toggle 3D rendering support",
define => "ENABLE_3D_RENDERING", default => (isAppleMacWebKit() && !isTiger()), value => \$threeDRenderingSupport },
@@ -194,6 +196,9 @@ my @features = (
{ option => "mathml", desc => "Toggle MathML support",
define => "ENABLE_MATHML", default => 1, value => \$mathmlSupport },
+ { option => "media-statistics", desc => "Toggle Media Statistics support",
+ define => "ENABLE_MEDIA_STATISTICS", default => 0, value => \$mediaStatisticsSupport },
+
{ option => "meter-tag", desc => "Meter Tag support",
define => "ENABLE_METER_TAG", default => !isGtk() && !isAppleWinWebKit(), value => \$meterTagSupport },
@@ -212,6 +217,9 @@ my @features = (
{ option => "progress-tag", desc => "Progress Tag support",
define => "ENABLE_PROGRESS_TAG", default => 1, value => \$progressTagSupport },
+ { option => "register-protocol-handler", desc => "Register Protocol Handler support",
+ define => "ENABLE_REGISTER_PROTOCOL_HANDLER", default => 0, value => \$registerProtocolHandlerSupport },
+
{ option => "system-malloc", desc => "Toggle system allocator instead of TCmalloc",
define => "USE_SYSTEM_MALLOC", default => 0, value => \$systemMallocSupport },
@@ -405,7 +413,7 @@ if (isGtk()) {
{
my ($feature, $isEnabled, $defaultValue) = @_;
return "" if $defaultValue == $isEnabled;
- return $feature . "=" . ($isEnabled ? $feature : " ");
+ return $feature . "=" . ($isEnabled ? $feature : "");
}
foreach (@features) {
diff --git a/Tools/Scripts/check-inspector-strings b/Tools/Scripts/check-inspector-strings
index 82c08d7..0350aca 100755
--- a/Tools/Scripts/check-inspector-strings
+++ b/Tools/Scripts/check-inspector-strings
@@ -54,6 +54,9 @@ class StringsExtractor(ProcessorBase):
def should_process(self, file_path):
return file_path.endswith(".js") and (not file_path.endswith("InjectedScript.js"))
+ def decode_unicode_escapes(self, s):
+ return eval("ur\"" + s + "\"")
+
def process(self, lines, file_path, line_numbers=None):
for line in lines:
comment_start = line.find("//")
@@ -63,7 +66,7 @@ class StringsExtractor(ProcessorBase):
for pattern in self._patterns:
line_strings = re.findall(pattern, line)
for string in line_strings:
- self.strings[index].append(string)
+ self.strings[index].append(self.decode_unicode_escapes(string))
index += 1
class LocalizedStringsExtractor:
@@ -113,3 +116,10 @@ if __name__ == "__main__":
unused_strings = old_strings - strings
for s in unused_strings:
_log.info("Unused: \"%s\"" % (s))
+
+ localized_strings_duplicates = {}
+ for s in localized_strings_extractor.localized_strings:
+ if s in localized_strings_duplicates:
+ _log.info("Duplicate: \"%s\"" % (s))
+ else:
+ localized_strings_duplicates.setdefault(s)
diff --git a/Tools/Scripts/do-webcore-rename b/Tools/Scripts/do-webcore-rename
index aaa1eee..6dbfc1f 100755
--- a/Tools/Scripts/do-webcore-rename
+++ b/Tools/Scripts/do-webcore-rename
@@ -72,7 +72,7 @@ my @paths;
find(\&wanted, "Source/JavaScriptCore");
find(\&wanted, "Source/JavaScriptGlue");
find(\&wanted, "Source/WebCore");
-find(\&wanted, "WebKit");
+find(\&wanted, "Source/WebKit");
find(\&wanted, "Source/WebKit2");
find(\&wanted, "Tools/DumpRenderTree");
diff --git a/Tools/Scripts/old-run-webkit-tests b/Tools/Scripts/old-run-webkit-tests
index 79e2d9e..c56cb1c 100755
--- a/Tools/Scripts/old-run-webkit-tests
+++ b/Tools/Scripts/old-run-webkit-tests
@@ -77,6 +77,7 @@ use POSIX;
sub buildPlatformResultHierarchy();
sub buildPlatformTestHierarchy(@);
+sub captureSavedCrashLog($);
sub checkPythonVersion();
sub closeCygpaths();
sub closeDumpTool();
@@ -89,6 +90,7 @@ sub dumpToolDidCrash();
sub epiloguesAndPrologues($$);
sub expectedDirectoryForTest($;$;$);
sub fileNameWithNumber($$);
+sub findNewestFileMatchingGlob($);
sub htmlForResultsSection(\@$&);
sub isTextOnlyTest($);
sub launchWithEnv(\@\%);
@@ -189,6 +191,9 @@ my $actualTag = "actual";
my $prettyDiffTag = "pretty-diff";
my $diffsTag = "diffs";
my $errorTag = "stderr";
+my $crashLogTag = "crash-log";
+
+my $windowsCrashLogFilePrefix = "CrashLog";
# These are defined here instead of closer to where they are used so that they
# will always be accessible from the END block that uses them, even if the user
@@ -1731,7 +1736,9 @@ sub testCrashedOrTimedOut($$$$$$)
kill 9, $dumpToolPID unless $didCrash;
closeDumpTool();
-
+
+ captureSavedCrashLog($base) if $didCrash;
+
return unless isCygwin() && !$didCrash && $base =~ /^http/;
# On Cygwin, http tests timing out can be a symptom of a non-responsive httpd.
# If we timed out running an http test, try restarting httpd.
@@ -1739,6 +1746,51 @@ sub testCrashedOrTimedOut($$$$$$)
configureAndOpenHTTPDIfNeeded();
}
+sub captureSavedCrashLog($)
+{
+ my ($base) = @_;
+
+ my $crashLog;
+
+ my $glob;
+ if (isCygwin()) {
+ $glob = File::Spec->catfile($testResultsDirectory, $windowsCrashLogFilePrefix . "*.txt");
+ } elsif (isAppleMacWebKit()) {
+ $glob = File::Spec->catfile("~", "Library", "Logs", "CrashReporter", $dumpToolName . "_*.crash");
+
+ # Even though the dump tool has exited, CrashReporter might still be running. We need to
+ # wait for it to exit to ensure it has saved its crash log to disk. For simplicitly, we'll
+ # assume that the ReportCrash process with the highest PID is the one we want.
+ if (my @reportCrashPIDs = sort map { /^\s*(\d+)/; $1 } grep { /ReportCrash/ } `/bin/ps x`) {
+ my $reportCrashPID = $reportCrashPIDs[$#reportCrashPIDs];
+ # We use kill instead of waitpid because ReportCrash is not one of our child processes.
+ usleep(250000) while kill(0, $reportCrashPID) > 0;
+ }
+ }
+
+ # We assume that the newest crash log in matching the glob is the one that corresponds to the crash that just occurred.
+ if (my $newestCrashLog = findNewestFileMatchingGlob($glob)) {
+ # The crash log must have been created after this script started running.
+ $crashLog = $newestCrashLog if -M $newestCrashLog < 0;
+ }
+
+ return unless $crashLog;
+
+ move($crashLog, File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt"));
+}
+
+sub findNewestFileMatchingGlob($)
+{
+ my ($glob) = @_;
+
+ my @paths = glob $glob;
+ return unless @paths;
+
+ my @pathsAndTimes = map { [$_, -M $_] } @paths;
+ @pathsAndTimes = sort { $b->[1] <=> $a->[1] } @pathsAndTimes;
+ return $pathsAndTimes[$#pathsAndTimes]->[0];
+}
+
sub printFailureMessageForTest($$)
{
my ($test, $description) = @_;
@@ -1865,7 +1917,9 @@ sub htmlForResultsSection(\@$&)
push @html, "<tr>";
push @html, "<td><a href=\"" . toURL("$testDirectory/$test") . "\">$test</a></td>";
foreach my $link (@{&{$linkGetter}($test)}) {
- push @html, "<td><a href=\"$link->{href}\">$link->{text}</a></td>";
+ push @html, "<td>";
+ push @html, "<a href=\"$link->{href}\">$link->{text}</a>" if -f File::Spec->catfile($testResultsDirectory, $link->{href});
+ push @html, "</td>";
}
push @html, "</tr>";
}
@@ -1911,6 +1965,63 @@ sub linksForMismatchTest
return \@links;
}
+sub crashLocation($)
+{
+ my ($base) = @_;
+
+ my $crashLogFile = File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt");
+
+ if (isCygwin()) {
+ # We're looking for the following text:
+ #
+ # FOLLOWUP_IP:
+ # module!function+offset [file:line]
+ #
+ # The second contains the function that crashed (or the function that ended up jumping to a bad
+ # address, as in the case of a null function pointer).
+
+ open LOG, "<", $crashLogFile or return;
+ while (my $line = <LOG>) {
+ last if $line =~ /^FOLLOWUP_IP:/;
+ }
+ my $desiredLine = <LOG>;
+ close LOG;
+
+ return unless $desiredLine;
+
+ # Just take everything up to the first space (which is where the file/line information should
+ # start).
+ $desiredLine =~ /^(\S+)/;
+ return $1;
+ }
+
+ if (isAppleMacWebKit()) {
+ # We're looking for the following text:
+ #
+ # Thread M Crashed:
+ # N module address function + offset (file:line)
+ #
+ # Some lines might have a module of "???" if we've jumped to a bad address. We should skip
+ # past those.
+
+ open LOG, "<", $crashLogFile or return;
+ while (my $line = <LOG>) {
+ last if $line =~ /^Thread \d+ Crashed:/;
+ }
+ my $location;
+ while (my $line = <LOG>) {
+ $line =~ /^\d+\s+(\S+)\s+\S+ (.* \+ \d+)/ or next;
+ my $module = $1;
+ my $functionAndOffset = $2;
+ next if $module eq "???";
+ $location = "$module: $functionAndOffset";
+ last;
+ }
+ close LOG;
+ return $location;
+ }
+}
+
sub linksForErrorTest
{
my ($test) = @_;
@@ -1919,8 +2030,14 @@ sub linksForErrorTest
my $base = stripExtension($test);
+ my $crashLogText = "crash log";
+ if (my $crashLocation = crashLocation($base)) {
+ $crashLogText .= " (<code>" . $crashLocation . "</code>)";
+ }
+
push @links, @{linksForExpectedAndActualResults($base)};
push @links, { href => "$base-$errorTag.txt", text => "stderr" };
+ push @links, { href => "$base-$crashLogTag.txt", text => $crashLogText };
return \@links;
}
@@ -1951,6 +2068,7 @@ sub deleteExpectedAndActualResults($)
unlink "$testResultsDirectory/$base-$actualTag.txt";
unlink "$testResultsDirectory/$base-$diffsTag.txt";
unlink "$testResultsDirectory/$base-$errorTag.txt";
+ unlink "$testResultsDirectory/$base-$crashLogTag.txt";
}
sub recordActualResultsAndDiff($$)
@@ -2450,6 +2568,37 @@ sub stopRunningTestsEarlyIfNeeded()
return 0;
}
+# Store this at global scope so it won't be GCed (and thus unlinked) until the program exits.
+my $debuggerTempDirectory;
+
+sub createDebuggerCommandFile()
+{
+ return unless isCygwin();
+
+ my @commands = (
+ '.logopen /t "' . toWindowsPath($testResultsDirectory) . "\\" . $windowsCrashLogFilePrefix . '.txt"',
+ '.srcpath "' . toWindowsPath(sourceDir()) . '"',
+ '!analyze -vv',
+ '~*kpn',
+ 'q',
+ );
+
+ $debuggerTempDirectory = File::Temp->newdir;
+
+ my $commandFile = File::Spec->catfile($debuggerTempDirectory, "debugger-commands.txt");
+ unless (open COMMANDS, '>', $commandFile) {
+ print "Failed to open $commandFile. Crash logs will not be saved.\n";
+ return;
+ }
+ print COMMANDS join("\n", @commands), "\n";
+ unless (close COMMANDS) {
+ print "Failed to write to $commandFile. Crash logs will not be saved.\n";
+ return;
+ }
+
+ return $commandFile;
+}
+
sub setUpWindowsCrashLogSaving()
{
return unless isCygwin();
@@ -2468,8 +2617,23 @@ sub setUpWindowsCrashLogSaving()
}
}
+ # If we used -c (instead of -cf) we could pass the commands directly on the command line. But
+ # when the commands include multiple quoted paths (e.g., for .logopen and .srcpath), Windows
+ # fails to invoke the post-mortem debugger at all (perhaps due to a bug in Windows's command
+ # line parsing). So we save the commands to a file instead and tell the debugger to execute them
+ # using -cf.
+ my $commandFile = createDebuggerCommandFile() or return;
+
+ my @options = (
+ '-p %ld',
+ '-e %ld',
+ '-g',
+ '-lines',
+ '-cf "' . toWindowsPath($commandFile) . '"',
+ );
+
my %values = (
- Debugger => '"' . toWindowsPath($ntsdPath) . '" -p %ld -e %ld -g -lines -c ".logopen /t \"' . toWindowsPath($testResultsDirectory) . '\CrashLog.txt\";!analyze -vv;~*kpn;q"',
+ Debugger => '"' . toWindowsPath($ntsdPath) . '" ' . join(' ', @options),
Auto => 1
);
diff --git a/Tools/Scripts/rebaseline-chromium-webkit-tests b/Tools/Scripts/rebaseline-chromium-webkit-tests
index 8d14b86..806ca17 100755
--- a/Tools/Scripts/rebaseline-chromium-webkit-tests
+++ b/Tools/Scripts/rebaseline-chromium-webkit-tests
@@ -41,4 +41,4 @@ sys.path.append(os.path.join(webkitpy_directory, "thirdparty"))
import rebaseline_chromium_webkit_tests
if __name__ == '__main__':
- rebaseline_chromium_webkit_tests.main()
+ rebaseline_chromium_webkit_tests.main(sys.argv[1:])
diff --git a/Tools/Scripts/run-chromium-webkit-unit-tests b/Tools/Scripts/run-chromium-webkit-unit-tests
index 62646af..1e2b0aa 100755
--- a/Tools/Scripts/run-chromium-webkit-unit-tests
+++ b/Tools/Scripts/run-chromium-webkit-unit-tests
@@ -41,9 +41,9 @@ setConfiguration();
my $pathToBinary;
if (isDarwin()) {
- $pathToBinary = "WebKit/chromium/xcodebuild/" . configuration() . "/webkit_unit_tests";
+ $pathToBinary = "Source/WebKit/chromium/xcodebuild/" . configuration() . "/webkit_unit_tests";
} elsif (isCygwin() || isWindows()) {
- $pathToBinary = "WebKit/chromium/" . configuration() . "/webkit_unit_tests.exe";
+ $pathToBinary = "Source/WebKit/chromium/" . configuration() . "/webkit_unit_tests.exe";
} elsif (isLinux()) {
$pathToBinary = "out/" . configuration() . "/webkit_unit_tests";
}
diff --git a/Tools/Scripts/run-webkit-httpd b/Tools/Scripts/run-webkit-httpd
index 9ea2551..31b469e 100755
--- a/Tools/Scripts/run-webkit-httpd
+++ b/Tools/Scripts/run-webkit-httpd
@@ -2,6 +2,7 @@
# Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
# Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
+# Copyright (C) 2011 Research In Motion Limited. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -69,6 +70,7 @@ setConfiguration();
my $productDir = productDir();
chdirWebKit();
my $testDirectory = File::Spec->catfile(getcwd(), "LayoutTests");
+$testDirectory = convertMsysPath($testDirectory) if isMsys();
my $listen = "127.0.0.1:$httpdPort";
$listen = "$httpdPort" if ($allInterfaces);
@@ -82,14 +84,16 @@ print "Press Ctrl+C to stop it.\n\n";
my @args = (
"-C", "Listen $listen",
- "-c", "CustomLog |/usr/bin/tee common",
- "-c", "ErrorLog |/usr/bin/tee",
- # Run in single-process mode, do not detach from the controlling terminal.
- "-X",
# Disable Keep-Alive support. Makes testing in multiple browsers easier (no need to wait
# for another browser's connection to expire).
"-c", "KeepAlive 0"
);
+push @args, (
+ "-c", "CustomLog |/usr/bin/tee common",
+ "-c", "ErrorLog |/usr/bin/tee",
+ # Run in single-process mode, do not detach from the controlling terminal.
+ "-X",
+) unless isMsys();
my @defaultArgs = getDefaultConfigForTestDirectory($testDirectory);
@args = (@defaultArgs, @args);
diff --git a/Tools/Scripts/update-webkit b/Tools/Scripts/update-webkit
index 6d3e0ee..aca56b8 100755
--- a/Tools/Scripts/update-webkit
+++ b/Tools/Scripts/update-webkit
@@ -50,9 +50,6 @@ determineIsChromium();
chdirWebKit();
-my $isGit = isGit();
-my $isSVN = isSVN();
-
my $getOptionsResult = GetOptions(
'h|help' => \$showHelp,
'q|quiet' => \$quiet,
@@ -77,14 +74,14 @@ push @svnOptions, '-q' if $quiet;
push @svnOptions, qw(--accept postpone) if isSVNVersion16OrNewer();
print "Updating OpenSource\n" unless $quiet;
-runSvnUpdate() if $isSVN;
-runGitUpdate() if $isGit;
+runSvnUpdate() if isSVN();
+runGitUpdate() if isGit();
if (-d "../Internal") {
chdir("../Internal");
print "Updating Internal\n" unless $quiet;
- runSvnUpdate() if $isSVN;
- runGitUpdate() if $isGit;
+ runSvnUpdate() if isSVN();
+ runGitUpdate() if isGit();
} elsif (isChromium()) {
# Workaround for https://bugs.webkit.org/show_bug.cgi?id=38926
# We should remove the following "if" block when we find a right fix.
diff --git a/Tools/Scripts/webkit-patch b/Tools/Scripts/webkit-patch
index 007f919..1eb8476 100755
--- a/Tools/Scripts/webkit-patch
+++ b/Tools/Scripts/webkit-patch
@@ -33,6 +33,7 @@
import logging
import os
+import signal
import sys
from webkitpy.common.system.logutils import configure_logging
@@ -66,5 +67,7 @@ def main():
if __name__ == "__main__":
-
- main()
+ try:
+ main()
+ except KeyboardInterrupt:
+ sys.exit(signal.SIGINT + 128)
diff --git a/Tools/Scripts/webkitdirs.pm b/Tools/Scripts/webkitdirs.pm
index 0ead831..aa7bab7 100644
--- a/Tools/Scripts/webkitdirs.pm
+++ b/Tools/Scripts/webkitdirs.pm
@@ -356,7 +356,7 @@ sub productDir
sub jscProductDir
{
my $productDir = productDir();
- $productDir .= "/Source/JavaScriptCore" if isQt();
+ $productDir .= "/JavaScriptCore" if isQt();
$productDir .= "/$configuration" if (isQt() && isWindows());
$productDir .= "/Programs" if (isGtk() || isEfl());
@@ -1009,14 +1009,18 @@ sub checkRequiredSystemConfig
{
if (isDarwin()) {
chomp(my $productVersion = `sw_vers -productVersion`);
- if ($productVersion lt "10.4") {
+ if (eval "v$productVersion" lt v10.4) {
print "*************************************************************\n";
print "Mac OS X Version 10.4.0 or later is required to build WebKit.\n";
print "You have " . $productVersion . ", thus the build will most likely fail.\n";
print "*************************************************************\n";
}
- my $xcodeVersion = `xcodebuild -version`;
- if ($xcodeVersion !~ /DevToolsCore-(\d+)/ || $1 < 747) {
+ my $xcodebuildVersionOutput = `xcodebuild -version`;
+ my $devToolsCoreVersion = ($xcodebuildVersionOutput =~ /DevToolsCore-(\d+)/) ? $1 : undef;
+ my $xcodeVersion = ($xcodebuildVersionOutput =~ /Xcode ([0-9](\.[0-9]+)*)/) ? $1 : undef;
+ if (!$devToolsCoreVersion && !$xcodeVersion
+ || $devToolsCoreVersion && $devToolsCoreVersion < 747
+ || $xcodeVersion && eval "v$xcodeVersion" lt v2.3) {
print "*************************************************************\n";
print "Xcode Version 2.3 or later is required to build WebKit.\n";
print "You have an earlier version of Xcode, thus the build will\n";
@@ -1501,7 +1505,7 @@ sub buildCMakeProject($@)
push @buildArgs, "-DCMAKE_BUILD_TYPE=Release";
}
- push @buildArgs, sourceDir();
+ push @buildArgs, sourceDir() . "/Source";
$dir = File::Spec->catfile($dir, $config);
File::Path::mkpath($dir);
@@ -1571,6 +1575,13 @@ sub buildQMakeProject($@)
push @buildArgs, "INSTALL_HEADERS=" . $installHeaders if defined($installHeaders);
push @buildArgs, "INSTALL_LIBS=" . $installLibs if defined($installLibs);
my $dir = File::Spec->canonpath(productDir());
+
+
+ # On Symbian qmake needs to run in the same directory where the pro file is located.
+ if (isSymbian()) {
+ $dir = $sourceDir . "/Source";
+ }
+
File::Path::mkpath($dir);
chdir $dir or die "Failed to cd into " . $dir . "\n";
@@ -1580,7 +1591,7 @@ sub buildQMakeProject($@)
my @dsQmakeArgs = @buildArgs;
push @dsQmakeArgs, "-r";
- push @dsQmakeArgs, sourceDir() . "/DerivedSources.pro";
+ push @dsQmakeArgs, sourceDir() . "/Source/DerivedSources.pro";
push @dsQmakeArgs, "-o Makefile.DerivedSources";
print "Calling '$qmakebin @dsQmakeArgs' in " . $dir . "\n\n";
my $result = system "$qmakebin @dsQmakeArgs";
@@ -1588,18 +1599,29 @@ sub buildQMakeProject($@)
die "Failed while running $qmakebin to generate derived sources!\n";
}
- my $dsMakefile = "Makefile.DerivedSources";
-
- # Iterate over different source directories manually to workaround a problem with qmake+extraTargets+s60
- my @subdirs = ("Source/JavaScriptCore", "Source/WebCore", "Source/WebKit/qt/Api");
+ # FIXME: Iterate over different source directories manually to workaround a problem with qmake+extraTargets+s60
+ # To avoid overwriting of Makefile.DerivedSources in the root dir use Makefile.DerivedSources.Tools for Tools
+ my @subdirs = ("JavaScriptCore", "WebCore", "WebKit/qt/Api");
if (grep { $_ eq "CONFIG+=webkit2"} @buildArgs) {
- push @subdirs, "Source/WebKit2";
- push @subdirs, "Tools/WebKitTestRunner";
- push @subdirs, "Tools/MiniBrowser";
+ push @subdirs, "WebKit2";
+ if ( -e sourceDir() ."/Tools/DerivedSources.pro" ) {
+ @dsQmakeArgs = @buildArgs;
+ push @dsQmakeArgs, "-r";
+ push @dsQmakeArgs, sourceDir() . "/Tools/DerivedSources.pro";
+ push @dsQmakeArgs, "-o Makefile.DerivedSources.Tools";
+ print "Calling '$qmakebin @dsQmakeArgs' in " . $dir . "\n\n";
+ my $result = system "$qmakebin @dsQmakeArgs";
+ if ($result ne 0) {
+ die "Failed while running $qmakebin to generate derived sources for Tools!\n";
+ }
+ push @subdirs, "MiniBrowser";
+ push @subdirs, "WebKitTestRunner";
+ }
}
for my $subdir (@subdirs) {
- print "Calling '$make $makeargs -f $dsMakefile generated_files' in " . $dir . "/$subdir\n\n";
+ my $dsMakefile = "Makefile.DerivedSources";
+ print "Calling '$make $makeargs -C $subdir -f $dsMakefile generated_files' in " . $dir . "/$subdir\n\n";
if ($make eq "nmake") {
my $subdirWindows = $subdir;
$subdirWindows =~ s:/:\\:g;
@@ -1626,8 +1648,7 @@ sub buildQMakeProject($@)
}
}
- push @buildArgs, sourceDir() . "/WebKit.pro";
-
+ push @buildArgs, sourceDir() . "/Source/WebKit.pro";
print "Calling '$qmakebin @buildArgs' in " . $dir . "\n\n";
print "Installation headers directory: $installHeaders\n" if(defined($installHeaders));
print "Installation libraries directory: $installLibs\n" if(defined($installLibs));
@@ -1637,8 +1658,24 @@ sub buildQMakeProject($@)
die "Failed to setup build environment using $qmakebin!\n";
}
+ $buildArgs[-1] = sourceDir() . "/Tools/Tools.pro";
+ my $makefile = "Makefile.Tools";
+
+ # On Symbian qmake needs to run in the same directory where the pro file is located.
+ if (isSymbian()) {
+ $dir = $sourceDir . "/Tools";
+ chdir $dir or die "Failed to cd into " . $dir . "\n";
+ $makefile = "bld.inf";
+ }
+
+ print "Calling '$qmakebin @buildArgs -o $makefile' in " . $dir . "\n\n";
+ $result = system "$qmakebin @buildArgs -o $makefile";
+ if ($result ne 0) {
+ die "Failed to setup build environment using $qmakebin!\n";
+ }
+
# Manually create makefiles for the examples so we don't build by default
- my $examplesDir = $dir . "/Source/WebKit/qt/examples";
+ my $examplesDir = $dir . "/WebKit/qt/examples";
File::Path::mkpath($examplesDir);
$buildArgs[-1] = sourceDir() . "/Source/WebKit/qt/examples/examples.pro";
chdir $examplesDir or die;
@@ -1647,9 +1684,16 @@ sub buildQMakeProject($@)
die "Failed to create makefiles for the examples!\n" if $result ne 0;
chdir $dir or die;
+ my $makeTools = "echo No Makefile for Tools. Skipping make";
+
+ if (-e "$dir/$makefile") {
+ $makeTools = "$make $makeargs -f $makefile";
+ }
+
if ($clean) {
print "Calling '$make $makeargs distclean' in " . $dir . "\n\n";
$result = system "$make $makeargs distclean";
+ $result = $result || system "$makeTools distclean";
} elsif (isSymbian()) {
print "\n\nWebKit is now configured for building, but you have to make\n";
print "a choice about the target yourself. To start the build run:\n\n";
@@ -1657,6 +1701,7 @@ sub buildQMakeProject($@)
} else {
print "Calling '$make $makeargs' in " . $dir . "\n\n";
$result = system "$make $makeargs";
+ $result = $result || system "$makeTools";
}
chdir ".." or die;
diff --git a/Tools/Scripts/webkitperl/httpd.pm b/Tools/Scripts/webkitperl/httpd.pm
index b415db6..b73904d 100644
--- a/Tools/Scripts/webkitperl/httpd.pm
+++ b/Tools/Scripts/webkitperl/httpd.pm
@@ -1,6 +1,7 @@
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved
# Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
# Copyright (C) 2010 Andras Becsi (abecsi@inf.u-szeged.hu), University of Szeged
+# Copyright (C) 2011 Research In Motion Limited. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -58,6 +59,7 @@ BEGIN {
}
my $tmpDir = "/tmp";
+$tmpDir = convertMsysPath($tmpDir) if isMsys();
my $httpdLockPrefix = "WebKitHttpd.lock.";
my $myLockFile;
my $exclusiveLockFile = File::Spec->catfile($tmpDir, "WebKit.lock");
@@ -76,6 +78,8 @@ sub getHTTPDPath
{
if (isDebianBased()) {
$httpdPath = "/usr/sbin/apache2";
+ } elsif (isMsys()) {
+ $httpdPath = 'c:\program files\apache software foundation\apache2.2\bin\httpd.exe';
} else {
$httpdPath = "/usr/sbin/httpd";
}
@@ -100,13 +104,16 @@ sub getDefaultConfigForTestDirectory
# Setup a link to where the js test templates are stored, use -c so that mod_alias will already be loaded.
"-c", "Alias /js-test-resources \"$jsTestResourcesDirectory\"",
"-c", "TypesConfig \"$typesConfig\"",
- # Apache wouldn't run CGIs with permissions==700 otherwise
- "-c", "User \"#$<\"",
- "-c", "LockFile \"$httpdLockFile\"",
"-c", "PidFile \"$httpdPidFile\"",
"-c", "ScoreBoardFile \"$httpdScoreBoardFile\"",
);
+ push @httpdArgs, (
+ # Apache wouldn't run CGIs with permissions==700 otherwise
+ "-c", "User \"#$<\"",
+ "-c", "LockFile \"$httpdLockFile\""
+ ) unless isMsys();
+
# FIXME: Enable this on Windows once <rdar://problem/5345985> is fixed
# The version of Apache we use with Cygwin does not support SSL
my $sslCertificate = "$testDirectory/http/conf/webkit-httpd.pem";
@@ -129,6 +136,8 @@ sub getHTTPDConfigPathForTestDirectory
chmod(0755, "/usr/lib/apache/libphp4.dll");
}
$httpdConfig = "$windowsConfDirectory/cygwin-httpd.conf";
+ } elsif (isMsys()) {
+ $httpdConfig = "$testDirectory/http/conf/apache2-msys-httpd.conf";
} elsif (isDebianBased()) {
$httpdConfig = "$testDirectory/http/conf/apache2-debian-httpd.conf";
} elsif (isFedoraBased()) {
@@ -319,3 +328,13 @@ sub getWaitTime
}
return $waitTime;
}
+
+sub convertMsysPath
+{
+ my ($path) = @_;
+ return unless isMsys();
+
+ $path = `cmd.exe //c echo $path`;
+ $path =~ s/\r\n$//;
+ return $path;
+}
diff --git a/Tools/Scripts/webkitpy/common/checkout/api.py b/Tools/Scripts/webkitpy/common/checkout/api.py
index a87bb5a..170b822 100644
--- a/Tools/Scripts/webkitpy/common/checkout/api.py
+++ b/Tools/Scripts/webkitpy/common/checkout/api.py
@@ -33,6 +33,7 @@ from webkitpy.common.config import urls
from webkitpy.common.checkout.changelog import ChangeLog
from webkitpy.common.checkout.commitinfo import CommitInfo
from webkitpy.common.checkout.scm import CommitMessage
+from webkitpy.common.checkout.deps import DEPS
from webkitpy.common.memoized import memoized
from webkitpy.common.net.bugzilla import parse_bug_id
from webkitpy.common.system.executive import Executive, run_command, ScriptError
@@ -148,6 +149,9 @@ class Checkout(object):
except ScriptError, e:
pass # We might not have ChangeLogs.
+ def chromium_deps(self):
+ return DEPS(os.path.join(self._scm.checkout_root, "Source", "WebKit", "chromium", "DEPS"))
+
def apply_patch(self, patch, force=False):
# It's possible that the patch was not made from the root directory.
# We should detect and handle that case.
diff --git a/Tools/Scripts/webkitpy/common/checkout/changelog.py b/Tools/Scripts/webkitpy/common/checkout/changelog.py
index 07f905d..c81318c 100644
--- a/Tools/Scripts/webkitpy/common/checkout/changelog.py
+++ b/Tools/Scripts/webkitpy/common/checkout/changelog.py
@@ -36,9 +36,7 @@ import textwrap
from webkitpy.common.system.deprecated_logging import log
from webkitpy.common.config.committers import CommitterList
-from webkitpy.common.config import urls
from webkitpy.common.net.bugzilla import parse_bug_id
-from webkitpy.tool.grammar import join_with_separators
class ChangeLogEntry(object):
@@ -145,29 +143,14 @@ class ChangeLog(object):
lines = [self._wrap_line(line) for line in message.splitlines()]
return "\n".join(lines)
- # This probably does not belong in changelogs.py
- def _message_for_revert(self, revision_list, reason, bug_url):
- message = "Unreviewed, rolling out %s.\n" % join_with_separators(['r' + str(revision) for revision in revision_list])
- for revision in revision_list:
- message += "%s\n" % urls.view_revision_url(revision)
- if bug_url:
- message += "%s\n" % bug_url
- # Add an extra new line after the rollout links, before any reason.
- message += "\n"
- if reason:
- message += "%s\n\n" % reason
- return self._wrap_lines(message)
-
- def update_for_revert(self, revision_list, reason, bug_url=None):
+ def update_with_unreviewed_message(self, message):
reviewed_by_regexp = re.compile(
"%sReviewed by NOBODY \(OOPS!\)\." % self._changelog_indent)
removing_boilerplate = False
# inplace=1 creates a backup file and re-directs stdout to the file
for line in fileinput.FileInput(self.path, inplace=1):
if reviewed_by_regexp.search(line):
- message_lines = self._message_for_revert(revision_list,
- reason,
- bug_url)
+ message_lines = self._wrap_lines(message)
print reviewed_by_regexp.sub(message_lines, line),
# Remove all the ChangeLog boilerplate between the Reviewed by
# line and the first changed file.
diff --git a/Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py b/Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py
index 20c6cfa..299d509 100644
--- a/Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py
+++ b/Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py
@@ -142,89 +142,3 @@ class ChangeLogTest(unittest.TestCase):
expected_contents = changelog_contents.replace("Need a short description and bug URL (OOPS!)", expected_message)
os.remove(changelog_path)
self.assertEquals(actual_contents, expected_contents)
-
- _revert_message = """ Unreviewed, rolling out r12345.
- http://trac.webkit.org/changeset/12345
- http://example.com/123
-
- This is a very long reason which should be long enough so that
- _message_for_revert will need to wrap it. We'll also include
- a
- https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354
- link so that we can make sure we wrap that right too.
-"""
-
- def test_message_for_revert(self):
- changelog = ChangeLog("/fake/path")
- long_reason = "This is a very long reason which should be long enough so that _message_for_revert will need to wrap it. We'll also include a https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354 link so that we can make sure we wrap that right too."
- message = changelog._message_for_revert([12345], long_reason, "http://example.com/123")
- self.assertEquals(message, self._revert_message)
-
- _revert_entry_with_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
-
- Unreviewed, rolling out r12345.
- http://trac.webkit.org/changeset/12345
- http://example.com/123
-
- Reason
-
- * Scripts/bugzilla-tool:
-'''
-
- _revert_entry_without_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
-
- Unreviewed, rolling out r12345.
- http://trac.webkit.org/changeset/12345
-
- Reason
-
- * Scripts/bugzilla-tool:
-'''
-
- _multiple_revert_entry_with_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
-
- Unreviewed, rolling out r12345, r12346, and r12347.
- http://trac.webkit.org/changeset/12345
- http://trac.webkit.org/changeset/12346
- http://trac.webkit.org/changeset/12347
- http://example.com/123
-
- Reason
-
- * Scripts/bugzilla-tool:
-'''
-
- _multiple_revert_entry_without_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
-
- Unreviewed, rolling out r12345, r12346, and r12347.
- http://trac.webkit.org/changeset/12345
- http://trac.webkit.org/changeset/12346
- http://trac.webkit.org/changeset/12347
-
- Reason
-
- * Scripts/bugzilla-tool:
-'''
-
- def _assert_update_for_revert_output(self, args, expected_entry):
- changelog_contents = u"%s\n%s" % (self._new_entry_boilerplate, self._example_changelog)
- changelog_path = self._write_tmp_file_with_contents(changelog_contents.encode("utf-8"))
- changelog = ChangeLog(changelog_path)
- changelog.update_for_revert(*args)
- actual_entry = changelog.latest_entry()
- os.remove(changelog_path)
- self.assertEquals(actual_entry.contents(), expected_entry)
- self.assertEquals(actual_entry.reviewer_text(), None)
- # These checks could be removed to allow this to work on other entries:
- self.assertEquals(actual_entry.author_name(), "Eric Seidel")
- self.assertEquals(actual_entry.author_email(), "eric@webkit.org")
-
- def test_update_for_revert(self):
- self._assert_update_for_revert_output([[12345], "Reason"], self._revert_entry_without_bug_url)
- self._assert_update_for_revert_output([[12345], "Reason", "http://example.com/123"], self._revert_entry_with_bug_url)
- self._assert_update_for_revert_output([[12345, 12346, 12347], "Reason"], self._multiple_revert_entry_without_bug_url)
- self._assert_update_for_revert_output([[12345, 12346, 12347], "Reason", "http://example.com/123"], self._multiple_revert_entry_with_bug_url)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/Tools/Scripts/webkitpy/common/checkout/deps.py b/Tools/Scripts/webkitpy/common/checkout/deps.py
new file mode 100644
index 0000000..6b87ff1
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/checkout/deps.py
@@ -0,0 +1,61 @@
+# Copyright (C) 2011, Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# WebKit's Python module for parsing and modifying ChangeLog files
+
+import codecs
+import fileinput
+import os.path
+import re
+import textwrap
+
+
+class DEPS(object):
+
+ _variable_regexp = r"\s+'%s':\s+'(?P<value>\d+)'"
+
+ def __init__(self, path):
+ self._path = path
+
+ def read_variable(self, name):
+ pattern = re.compile(self._variable_regexp % name)
+ for line in fileinput.FileInput(self._path):
+ match = pattern.match(line)
+ if match:
+ return int(match.group("value"))
+
+ def write_variable(self, name, value):
+ pattern = re.compile(self._variable_regexp % name)
+ replacement_line = " '%s': '%s'" % (name, value)
+ # inplace=1 creates a backup file and re-directs stdout to the file
+ for line in fileinput.FileInput(self._path, inplace=1):
+ if pattern.match(line):
+ print replacement_line
+ continue
+ # Trailing comma suppresses printing newline
+ print line,
diff --git a/Tools/Scripts/webkitpy/common/checkout/scm.py b/Tools/Scripts/webkitpy/common/checkout/scm.py
index 421c0dc..3fa2db5 100644
--- a/Tools/Scripts/webkitpy/common/checkout/scm.py
+++ b/Tools/Scripts/webkitpy/common/checkout/scm.py
@@ -34,10 +34,10 @@ import re
import sys
import shutil
-from webkitpy.common.system.executive import Executive, run_command, ScriptError
-from webkitpy.common.system.deprecated_logging import error, log
-import webkitpy.common.system.ospath as ospath
from webkitpy.common.memoized import memoized
+from webkitpy.common.system.deprecated_logging import error, log
+from webkitpy.common.system.executive import Executive, run_command, ScriptError
+from webkitpy.common.system import ospath
def find_checkout_root():
@@ -746,6 +746,22 @@ class Git(SCM):
def display_name(self):
return "git"
+ def prepend_svn_revision(self, diff):
+ revision = None
+ tries = 0
+ while not revision and tries < 10:
+ # If the git checkout is not tracking an SVN repo, then svn_revision_from_git_commit throws.
+ try:
+ revision = self.svn_revision_from_git_commit('HEAD~' + str(tries))
+ except:
+ return diff
+ tries += 1
+
+ if not revision:
+ return diff
+
+ return "Subversion Revision: " + str(revision) + '\n' + diff
+
def create_patch(self, git_commit=None, changed_files=None):
"""Returns a byte array (str()) representing the patch file.
Patch files are effectively binary since they may contain
@@ -753,7 +769,7 @@ class Git(SCM):
command = ['git', 'diff', '--binary', "--no-ext-diff", "--full-index", "-M", self.merge_base(git_commit), "--"]
if changed_files:
command += changed_files
- return self.run(command, decode_output=False, cwd=self.checkout_root)
+ return self.prepend_svn_revision(self.run(command, decode_output=False, cwd=self.checkout_root))
def _run_git_svn_find_rev(self, arg):
# git svn find-rev always exits 0, even when the revision or commit is not found.
diff --git a/Tools/Scripts/webkitpy/common/checkout/scm_unittest.py b/Tools/Scripts/webkitpy/common/checkout/scm_unittest.py
index 64122b4..decfae0 100644
--- a/Tools/Scripts/webkitpy/common/checkout/scm_unittest.py
+++ b/Tools/Scripts/webkitpy/common/checkout/scm_unittest.py
@@ -810,6 +810,16 @@ class GitTest(SCMTest):
run_command(['git', 'config', '--add', 'svn-remote.svn.fetch', 'trunk:remote2'])
self.assertEqual(self.tracking_scm.remote_branch_ref(), 'remote1')
+ def test_create_patch(self):
+ write_into_file_at_path('test_file_commit1', 'contents')
+ run_command(['git', 'add', 'test_file_commit1'])
+ scm = detect_scm_system(self.untracking_checkout_path)
+ scm.commit_locally_with_message('message')
+
+ patch = scm.create_patch()
+ self.assertFalse(re.search(r'Subversion Revision:', patch))
+
+
class GitSVNTest(SCMTest):
def _setup_git_checkout(self):
@@ -1126,6 +1136,7 @@ class GitSVNTest(SCMTest):
patch = scm.create_patch()
self.assertTrue(re.search(r'test_file_commit2', patch))
self.assertTrue(re.search(r'test_file_commit1', patch))
+ self.assertTrue(re.search(r'Subversion Revision: 5', patch))
def test_create_patch_with_changed_files(self):
self._one_local_commit_plus_working_copy_changes()
diff --git a/Tools/Scripts/webkitpy/common/config/committers.py b/Tools/Scripts/webkitpy/common/config/committers.py
index f7d59fe..5c571ab 100644
--- a/Tools/Scripts/webkitpy/common/config/committers.py
+++ b/Tools/Scripts/webkitpy/common/config/committers.py
@@ -91,16 +91,17 @@ committers_unable_to_review = [
Committer("Cameron McCormack", "cam@webkit.org", "heycam"),
Committer("Carlos Garcia Campos", ["cgarcia@igalia.com", "carlosgc@gnome.org", "carlosgc@webkit.org"], "KaL"),
Committer("Carol Szabo", "carol.szabo@nokia.com"),
- Committer("Chang Shu", "Chang.Shu@nokia.com"),
+ Committer("Chang Shu", ["Chang.Shu@nokia.com", "cshu@webkit.org"], "cshu"),
Committer("Chris Evans", "cevans@google.com"),
Committer("Chris Petersen", "cpetersen@apple.com", "cpetersen"),
Committer("Chris Rogers", "crogers@google.com", "crogers"),
Committer("Christian Dywan", ["christian@twotoasts.de", "christian@webkit.org"]),
Committer("Collin Jackson", "collinj@webkit.org"),
+ Committer("Daniel Cheng", "dcheng@chromium.org", "dcheng"),
Committer("David Smith", ["catfish.man@gmail.com", "dsmith@webkit.org"], "catfishman"),
Committer("Dean Jackson", "dino@apple.com", "dino"),
Committer("Diego Gonzalez", ["diegohcg@webkit.org", "diego.gonzalez@openbossa.org"], "diegohcg"),
- Committer("Dirk Pranke", "dpranke@chromium.org"),
+ Committer("Dirk Pranke", "dpranke@chromium.org", "dpranke"),
Committer("Drew Wilson", "atwilson@chromium.org", "atwilson"),
Committer("Eli Fidler", "eli@staikos.net", "QBin"),
Committer("Enrica Casucci", "enrica@apple.com"),
@@ -113,6 +114,7 @@ committers_unable_to_review = [
Committer("Feng Qian", "feng@chromium.org"),
Committer("Fumitoshi Ukai", "ukai@chromium.org", "ukai"),
Committer("Gabor Loki", "loki@webkit.org", "loki04"),
+ Committer("Gabor Rapcsanyi", ["rgabor@webkit.org", "rgabor@inf.u-szeged.hu"], "rgabor"),
Committer("Girish Ramakrishnan", ["girish@forwardbias.in", "ramakrishnan.girish@gmail.com"]),
Committer("Graham Dennis", ["Graham.Dennis@gmail.com", "gdennis@webkit.org"]),
Committer("Greg Bolsinga", "bolsinga@apple.com"),
@@ -121,6 +123,7 @@ committers_unable_to_review = [
Committer("Hayato Ito", "hayato@chromium.org", "hayato"),
Committer("Hin-Chung Lam", ["hclam@google.com", "hclam@chromium.org"]),
Committer("Ilya Tikhonovsky", "loislo@chromium.org", "loislo"),
+ Committer("Ivan Krsti\u0107", "ike@apple.com"),
Committer("Jakob Petsovits", ["jpetsovits@rim.com", "jpetso@gmx.at"], "jpetso"),
Committer("Jakub Wieczorek", "jwieczorek@webkit.org", "fawek"),
Committer("James Hawkins", ["jhawkins@chromium.org", "jhawkins@google.com"], "jhawkins"),
@@ -137,6 +140,7 @@ committers_unable_to_review = [
Committer("John Gregg", ["johnnyg@google.com", "johnnyg@chromium.org"], "johnnyg"),
Committer("John Knottenbelt", ["jknotten@chromium.org"], "jknotten"),
Committer("Johnny Ding", ["jnd@chromium.org", "johnnyding.webkit@gmail.com"], "johnnyding"),
+ Committer("Joone Hur", ["joone.hur@collabora.co.uk", "joone@kldp.org", "joone@webkit.org"], "joone"),
Committer("Joost de Valk", ["joost@webkit.org", "webkit-dev@joostdevalk.nl"], "Altha"),
Committer("Julie Parent", ["jparent@google.com", "jparent@chromium.org"], "jparent"),
Committer("Julien Chaffraix", ["jchaffraix@webkit.org", "julien.chaffraix@gmail.com"]),
diff --git a/Tools/Scripts/webkitpy/common/config/urls.py b/Tools/Scripts/webkitpy/common/config/urls.py
index dfa6d69..ddaef97 100644
--- a/Tools/Scripts/webkitpy/common/config/urls.py
+++ b/Tools/Scripts/webkitpy/common/config/urls.py
@@ -34,5 +34,6 @@ def view_source_url(local_path):
def view_revision_url(revision_number):
return "http://trac.webkit.org/changeset/%s" % revision_number
+chromium_lkgr_url = "http://chromium-status.appspot.com/lkgr"
contribution_guidelines = "http://webkit.org/coding/contributing.html"
diff --git a/Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py b/Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py
index 3cb6da5..76cd31d 100644
--- a/Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py
+++ b/Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py
@@ -266,10 +266,11 @@ class BuildBot(object):
# See https://bugs.webkit.org/show_bug.cgi?id=33296 and related bugs.
self.core_builder_names_regexps = [
"SnowLeopard.*Build",
- "SnowLeopard.*\(Test", # Exclude WebKit2 for now.
+ "SnowLeopard.*\(Test",
+ "SnowLeopard.*\(WebKit2 Test",
"Leopard",
- "Tiger",
"Windows.*Build",
+ "EFL",
"GTK.*32",
"GTK.*64.*Debug", # Disallow the 64-bit Release bot which is broken.
"Qt",
diff --git a/Tools/Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py b/Tools/Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py
index 57290d1..f158827 100644
--- a/Tools/Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py
+++ b/Tools/Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py
@@ -222,7 +222,6 @@ class BuildBotTest(unittest.TestCase):
# For complete testing, this list should match the list of builders at build.webkit.org:
example_builders = [
- {'name': u'Tiger Intel Release', },
{'name': u'Leopard Intel Release (Build)', },
{'name': u'Leopard Intel Release (Tests)', },
{'name': u'Leopard Intel Debug (Build)', },
@@ -256,22 +255,23 @@ class BuildBotTest(unittest.TestCase):
name_regexps = [
"SnowLeopard.*Build",
"SnowLeopard.*\(Test",
+ "SnowLeopard.*\(WebKit2 Test",
"Leopard",
- "Tiger",
"Windows.*Build",
+ "EFL",
"GTK.*32",
"GTK.*64.*Debug", # Disallow the 64-bit Release bot which is broken.
"Qt",
"Chromium.*Release$",
]
expected_builders = [
- {'name': u'Tiger Intel Release', },
{'name': u'Leopard Intel Release (Build)', },
{'name': u'Leopard Intel Release (Tests)', },
{'name': u'Leopard Intel Debug (Build)', },
{'name': u'Leopard Intel Debug (Tests)', },
{'name': u'SnowLeopard Intel Release (Build)', },
{'name': u'SnowLeopard Intel Release (Tests)', },
+ {'name': u'SnowLeopard Intel Release (WebKit2 Tests)', },
{'name': u'Windows Release (Build)', },
{'name': u'Windows Debug (Build)', },
{'name': u'GTK Linux 32-bit Release', },
diff --git a/Tools/Scripts/webkitpy/common/net/irc/ircbot.py b/Tools/Scripts/webkitpy/common/net/irc/ircbot.py
index f742867..061a43c 100644
--- a/Tools/Scripts/webkitpy/common/net/irc/ircbot.py
+++ b/Tools/Scripts/webkitpy/common/net/irc/ircbot.py
@@ -26,7 +26,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import webkitpy.common.config.irc as config_irc
+from webkitpy.common.config import irc as config_irc
from webkitpy.common.thread.messagepump import MessagePump, MessagePumpDelegate
from webkitpy.thirdparty.autoinstalled.irc import ircbot
diff --git a/Tools/Scripts/webkitpy/common/net/layouttestresults.py b/Tools/Scripts/webkitpy/common/net/layouttestresults.py
index 28caad4..249ecc9 100644
--- a/Tools/Scripts/webkitpy/common/net/layouttestresults.py
+++ b/Tools/Scripts/webkitpy/common/net/layouttestresults.py
@@ -51,11 +51,13 @@ class LayoutTestResults(object):
timeout_key = u'Tests that timed out:'
crash_key = u'Tests that caused the DumpRenderTree tool to crash:'
missing_key = u'Tests that had no expected results (probably new):'
+ webprocess_crash_key = u'Tests that caused the Web process to crash:'
expected_keys = [
stderr_key,
fail_key,
crash_key,
+ webprocess_crash_key,
timeout_key,
missing_key,
]
@@ -87,6 +89,8 @@ class LayoutTestResults(object):
return cls._failures_from_fail_row(row)
if table_title == cls.crash_key:
return [test_failures.FailureCrash()]
+ if table_title == cls.webprocess_crash_key:
+ return [test_failures.FailureCrash()]
if table_title == cls.timeout_key:
return [test_failures.FailureTimeout()]
if table_title == cls.missing_key:
diff --git a/Tools/Scripts/webkitpy/common/net/testoutput.py b/Tools/Scripts/webkitpy/common/net/testoutput.py
new file mode 100644
index 0000000..37c1445
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/net/testoutput.py
@@ -0,0 +1,179 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+import re
+
+
+class NaiveImageDiffer(object):
+ def same_image(self, img1, img2):
+ return img1 == img2
+
+
+class TestOutput(object):
+ """Represents the output that a single layout test generates when it is run
+ on a particular platform.
+ Note that this is the raw output that is produced when the layout test is
+ run, not the results of the subsequent comparison between that output and
+ the expected output."""
+ def __init__(self, platform, output_type, files):
+ self._output_type = output_type
+ self._files = files
+ file = files[0] # Pick some file to do test name calculation.
+ self._name = self._extract_test_name(file.name())
+ self._is_actual = '-actual.' in file.name()
+
+ self._platform = platform or self._extract_platform(file.name())
+
+ def _extract_platform(self, filename):
+ """Calculates the platform from the name of the file if it isn't known already"""
+ path = re.split(os.path.sep, filename)
+ if 'platform' in path:
+ return path[path.index('platform') + 1]
+ return None
+
+ def _extract_test_name(self, filename):
+ path = re.split(os.path.sep, filename)
+ if 'LayoutTests' in path:
+ path = path[1 + path.index('LayoutTests'):]
+ if 'layout-test-results' in path:
+ path = path[1 + path.index('layout-test-results'):]
+ if 'platform' in path:
+ path = path[2 + path.index('platform'):]
+
+ filename = path[-1]
+ filename = re.sub('-expected\..*$', '', filename)
+ filename = re.sub('-actual\..*$', '', filename)
+ path[-1] = filename
+ return os.path.sep.join(path)
+
+ def save_to(self, path):
+ """Have the files in this TestOutput write themselves to the disk at the specified location."""
+ for file in self._files:
+ file.save_to(path)
+
+ def is_actual(self):
+ """Is this output the actual output of a test? (As opposed to expected output.)"""
+ return self._is_actual
+
+ def name(self):
+ """The name of this test (doesn't include extension)"""
+ return self._name
+
+ def __eq__(self, other):
+ return (other != None and
+ self.name() == other.name() and
+ self.type() == other.type() and
+ self.platform() == other.platform() and
+ self.is_actual() == other.is_actual() and
+ self.same_content(other))
+
+ def __hash__(self):
+ return hash(str(self.name()) + str(self.type()) + str(self.platform()))
+
+ def is_new_baseline_for(self, other):
+ return (self.name() == other.name() and
+ self.type() == other.type() and
+ self.platform() == other.platform() and
+ self.is_actual() and
+ (not other.is_actual()))
+
+ def __str__(self):
+ actual_str = '[A] ' if self.is_actual() else ''
+ return "TestOutput[%s/%s] %s%s" % (self._platform, self._output_type, actual_str, self.name())
+
+ def type(self):
+ return self._output_type
+
+ def platform(self):
+ return self._platform
+
+ def _path_to_platform(self):
+ """Returns the path that tests for this platform are stored in."""
+ if self._platform is None:
+ return ""
+ else:
+ return os.path.join("self._platform", self._platform)
+
+ def _save_expected_result(self, file, path):
+ path = os.path.join(path, self._path_to_platform())
+ extension = os.path.splitext(file.name())[1]
+ filename = self.name() + '-expected' + extension
+ file.save_to(path, filename)
+
+ def save_expected_results(self, path_to_layout_tests):
+ """Save the files of this TestOutput to the appropriate directory
+ inside the LayoutTests directory. Typically this means that these files
+ will be saved in "LayoutTests/platform/<platform>/, or simply
+ LayoutTests if the platform is None."""
+ for file in self._files:
+ self._save_expected_result(file, path_to_layout_tests)
+
+ def delete(self):
+ """Deletes the files that comprise this TestOutput from disk. This
+ fails if the files are virtual files (eg: the files may reside inside a
+ remote zip file)."""
+ for file in self._files:
+ file.delete()
+
+
+class TextTestOutput(TestOutput):
+ """Represents a text output of a single test on a single platform"""
+ def __init__(self, platform, text_file):
+ self._text_file = text_file
+ TestOutput.__init__(self, platform, 'text', [text_file])
+
+ def same_content(self, other):
+ return self._text_file.contents() == other._text_file.contents()
+
+ def retarget(self, platform):
+ return TextTestOutput(platform, self._text_file)
+
+
+class ImageTestOutput(TestOutput):
+ image_differ = NaiveImageDiffer()
+ """Represents an image output of a single test on a single platform"""
+ def __init__(self, platform, image_file, checksum_file):
+ self._checksum_file = checksum_file
+ self._image_file = image_file
+ files = filter(bool, [self._checksum_file, self._image_file])
+ TestOutput.__init__(self, platform, 'image', files)
+
+ def has_checksum(self):
+ return self._checksum_file is not None
+
+ def same_content(self, other):
+ # FIXME This should not assume that checksums are up to date.
+ if self.has_checksum() and other.has_checksum():
+ return self._checksum_file.contents() == other._checksum_file.contents()
+ else:
+ self_contents = self._image_file.contents()
+ other_contents = other._image_file.contents()
+ return ImageTestOutput.image_differ.same_image(self_contents, other_contents)
+
+ def retarget(self, platform):
+ return ImageTestOutput(platform, self._image_file, self._checksum_file)
+
+ def checksum(self):
+ return self._checksum_file.contents()
diff --git a/Tools/Scripts/webkitpy/common/net/testoutput_unittest.py b/Tools/Scripts/webkitpy/common/net/testoutput_unittest.py
new file mode 100644
index 0000000..ad38ca6
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/net/testoutput_unittest.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+import testoutput
+import unittest
+
+
+class FakeFile(object):
+ def __init__(self, filename, contents="fake contents"):
+ self._filename = filename
+ self._contents = contents
+
+ def name(self):
+ return self._filename
+
+ def contents(self):
+ return self._contents
+
+
+class FakeTestOutput(testoutput.TestOutput):
+ def __init__(self, platform, output_type, contents, is_expected=False):
+ self._output_type = output_type
+ self._contents = contents
+ self._is_expected = is_expected
+ actual = 'actual'
+ if is_expected:
+ actual = 'expected'
+ test_name = 'anonymous-test-%s.txt' % actual
+ file = FakeFile(test_name, contents)
+ super(FakeTestOutput, self).__init__(platform, output_type, [file])
+
+ def contents(self):
+ return self._contents
+
+ def retarget(self, platform):
+ return FakeTestOutput(platform, self._output_type, self._contents, self._is_expected)
+
+
+class TestOutputTest(unittest.TestCase):
+ def _check_name(self, filename, expected_test_name):
+ r = testoutput.TextTestOutput(None, FakeFile(filename))
+ self.assertEquals(expected_test_name, r.name())
+
+ def _check_platform(self, filename, expected_platform):
+ r = testoutput.TextTestOutput(None, FakeFile(filename))
+ self.assertEquals(expected_platform, r.platform())
+
+ def test_extracts_name_correctly(self):
+ self._check_name('LayoutTests/fast/dom/a-expected.txt', 'fast/dom/a')
+ self._check_name('LayoutTests/fast/dom/a-actual.txt', 'fast/dom/a')
+ self._check_name('LayoutTests/platform/win/fast/a-expected.txt', 'fast/a')
+ self._check_name('LayoutTests/platform/win/fast/a-expected.checksum', 'fast/a')
+ self._check_name('fast/dom/test-expected.txt', 'fast/dom/test')
+ self._check_name('layout-test-results/fast/a-actual.checksum', 'fast/a')
+
+ def test_extracts_platform_correctly(self):
+ self._check_platform('LayoutTests/platform/win/fast/a-expected.txt', 'win')
+ self._check_platform('platform/win/fast/a-expected.txt', 'win')
+ self._check_platform('platform/mac/fast/a-expected.txt', 'mac')
+ self._check_platform('fast/a-expected.txt', None)
+
+ def test_outputs_from_an_actual_file_are_marked_as_such(self):
+ r = testoutput.TextTestOutput(None, FakeFile('test-actual.txt'))
+ self.assertTrue(r.is_actual())
+
+ def test_outputs_from_an_expected_file_are_not_actual(self):
+ r = testoutput.TextTestOutput(None, FakeFile('test-expected.txt'))
+ self.assertFalse(r.is_actual())
+
+ def test_is_new_baseline_for(self):
+ expected = testoutput.TextTestOutput('mac', FakeFile('test-expected.txt'))
+ actual = testoutput.TextTestOutput('mac', FakeFile('test-actual.txt'))
+ self.assertTrue(actual.is_new_baseline_for(expected))
+ self.assertFalse(expected.is_new_baseline_for(actual))
+
+ def test__eq__(self):
+ r1 = testoutput.TextTestOutput('mac', FakeFile('test-expected.txt', 'contents'))
+ r2 = testoutput.TextTestOutput('mac', FakeFile('test-expected.txt', 'contents'))
+ r3 = testoutput.TextTestOutput('win', FakeFile('test-expected.txt', 'contents'))
+
+ self.assertEquals(r1, r2)
+ self.assertEquals(r1, r2.retarget('mac'))
+ self.assertNotEquals(r1, r2.retarget('win'))
+
+ def test__hash__(self):
+ r1 = testoutput.TextTestOutput('mac', FakeFile('test-expected.txt', 'contents'))
+ r2 = testoutput.TextTestOutput('mac', FakeFile('test-expected.txt', 'contents'))
+ r3 = testoutput.TextTestOutput(None, FakeFile('test-expected.txt', None))
+
+ x = set([r1, r2])
+ self.assertEquals(1, len(set([r1, r2])))
+ self.assertEquals(2, len(set([r1, r2, r3])))
+
+ def test_image_diff_is_invoked_for_image_outputs_without_checksum(self):
+ r1 = testoutput.ImageTestOutput('mac', FakeFile('test-expected.png', 'asdf'), FakeFile('test-expected.checksum', 'check'))
+ r2 = testoutput.ImageTestOutput('mac', FakeFile('test-expected.png', 'asdf'), None)
+
+ # Default behaviour is to just compare on image contents.
+ self.assertTrue(r1.same_content(r2))
+
+ class AllImagesAreDifferent(object):
+ def same_image(self, image1, image2):
+ return False
+
+ # But we can install other image differs.
+ testoutput.ImageTestOutput.image_differ = AllImagesAreDifferent()
+
+ self.assertFalse(r1.same_content(r2))
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/common/net/testoutputset.py b/Tools/Scripts/webkitpy/common/net/testoutputset.py
new file mode 100644
index 0000000..4074686
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/net/testoutputset.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.common.system.directoryfileset import DirectoryFileSet
+from webkitpy.common.system.zipfileset import ZipFileSet
+import re
+import testoutput
+import urllib
+
+
+class TestOutputSet(object):
+ def __init__(self, name, platform, zip_file, **kwargs):
+ self._name = name
+ self._platform = platform
+ self._zip_file = zip_file
+ self._include_expected = kwargs.get('include_expected', True)
+
+ @classmethod
+ def from_zip_url(cls, platform, zip_path):
+ return TestOutputSet('local zip %s builder' % platform, platform, ZipFileSet(zip_path))
+
+ @classmethod
+ def from_zip(cls, platform, zip):
+ return TestOutputSet('local zip %s builder' % platform, platform, zip)
+
+ @classmethod
+ def from_zip_map(cls, zip_map):
+ output_sets = []
+ for k, v in zip_map.items():
+ output_sets.append(TestOutputSet.from_zip(k, v))
+ return AggregateTestOutputSet(output_sets)
+
+ @classmethod
+ def from_path(self, path, platform=None):
+ return TestOutputSet('local %s builder' % platform, platform, DirectoryFileSet(path))
+
+ def name(self):
+ return self._name
+
+ def set_platform(self, platform):
+ self._platform = platform
+
+ def files(self):
+ return [self._zip_file.open(filename) for filename in self._zip_file.namelist()]
+
+ def _extract_output_files(self, name, exact_match):
+ name_matcher = re.compile(name)
+ actual_matcher = re.compile(r'-actual\.')
+ expected_matcher = re.compile(r'-expected\.')
+
+ checksum_files = []
+ text_files = []
+ image_files = []
+ for output_file in self.files():
+ name_match = name_matcher.search(output_file.name())
+ actual_match = actual_matcher.search(output_file.name())
+ expected_match = expected_matcher.search(output_file.name())
+ if not (name_match and (actual_match or (self._include_expected and expected_match))):
+ continue
+ if output_file.name().endswith('.checksum'):
+ checksum_files.append(output_file)
+ elif output_file.name().endswith('.txt'):
+ text_files.append(output_file)
+ elif output_file.name().endswith('.png'):
+ image_files.append(output_file)
+
+ return (checksum_files, text_files, image_files)
+
+ def _extract_file_with_name(self, name, files):
+ for file in files:
+ if file.name() == name:
+ return file
+ return None
+
+ def _make_output_from_image(self, image_file, checksum_files):
+ checksum_file_name = re.sub('\.png', '.checksum', image_file.name())
+ checksum_file = self._extract_file_with_name(checksum_file_name, checksum_files)
+ return testoutput.ImageTestOutput(self._platform, image_file, checksum_file)
+
+ def outputs_for(self, name, **kwargs):
+ target_type = kwargs.get('target_type', None)
+ exact_match = kwargs.get('exact_match', False)
+ if re.search(r'\.x?html', name):
+ name = name[:name.rindex('.')]
+
+ (checksum_files, text_files, image_files) = self._extract_output_files(name, exact_match)
+
+ outputs = [self._make_output_from_image(image_file, checksum_files) for image_file in image_files]
+
+ outputs += [testoutput.TextTestOutput(self._platform, text_file) for text_file in text_files]
+
+ if exact_match:
+ outputs = filter(lambda output: output.name() == name, outputs)
+
+ outputs = filter(lambda r: target_type in [None, r.type()], outputs)
+
+ return outputs
+
+
+class AggregateTestOutputSet(object):
+ """Set of test outputs from a list of builders"""
+ def __init__(self, builders):
+ self._builders = builders
+
+ def outputs_for(self, name, **kwargs):
+ return sum([builder.outputs_for(name, **kwargs) for builder in self._builders], [])
+
+ def builders(self):
+ return self._builders
diff --git a/Tools/Scripts/webkitpy/common/net/testoutputset_unittest.py b/Tools/Scripts/webkitpy/common/net/testoutputset_unittest.py
new file mode 100644
index 0000000..a70a539
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/net/testoutputset_unittest.py
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.common.system.zip_mock import MockZip
+import testoutputset
+import unittest
+
+
+class TestOutputSetTest(unittest.TestCase):
+ def _outputset_with_zip(self, zip, **kwargs):
+ return testoutputset.TestOutputSet('<fake-outputset>', '<fake-platform>', zip, **kwargs)
+
+ def test_text_files_get_interpreted_as_text_outputs(self):
+ zip = MockZip()
+ zip.insert('fast/dom/some-test-actual.txt', 'actual outputs')
+ b = self._outputset_with_zip(zip)
+ self.assertEquals(1, len(b.outputs_for('fast/dom/some-test')))
+ self.assertEquals('fast/dom/some-test', b.outputs_for('fast/dom/some-test.html')[0].name())
+
+ def test_image_and_checksum_files_get_interpreted_as_a_single_image_output(self):
+ zip = MockZip()
+ zip.insert('fast/dom/some-test-actual.checksum', 'abc123')
+ zip.insert('fast/dom/some-test-actual.png', '<image data>')
+ b = self._outputset_with_zip(zip)
+ outputs = b.outputs_for('fast/dom/some-test')
+ self.assertEquals(1, len(outputs))
+ output = outputs[0]
+ self.assertEquals('image', output.type())
+ self.assertEquals('abc123', output.checksum())
+
+ def test_multiple_image_outputs_are_detected(self):
+ zip = MockZip()
+ zip.insert('platform/win/fast/dom/some-test-actual.checksum', 'checksum1')
+ zip.insert('platform/win/fast/dom/some-test-actual.png', '<image data 1>')
+ zip.insert('platform/mac/fast/dom/some-test-actual.checksum', 'checksum2')
+ zip.insert('platform/mac/fast/dom/some-test-actual.png', '<image data 2>')
+ b = self._outputset_with_zip(zip)
+ outputs = b.outputs_for('fast/dom/some-test')
+ self.assertEquals(2, len(outputs))
+ self.assertFalse(outputs[0].same_content(outputs[1]))
+
+ def test_aggregate_output_set_correctly_retrieves_tests_from_multiple_output_sets(self):
+ outputset1_zip = MockZip()
+ outputset1_zip.insert('fast/dom/test-actual.txt', 'linux text output')
+ outputset1 = testoutputset.TestOutputSet('linux-outputset', 'linux', outputset1_zip)
+ outputset2_zip = MockZip()
+ outputset2_zip.insert('fast/dom/test-actual.txt', 'windows text output')
+ outputset2 = testoutputset.TestOutputSet('win-outputset', 'win', outputset2_zip)
+
+ b = testoutputset.AggregateTestOutputSet([outputset1, outputset2])
+ self.assertEquals(2, len(b.outputs_for('fast/dom/test')))
+
+ def test_can_infer_platform_from_path_if_none_provided(self):
+ zip = MockZip()
+ zip.insert('platform/win/some-test-expected.png', '<image data>')
+ zip.insert('platform/win/some-test-expected.checksum', 'abc123')
+ b = testoutputset.TestOutputSet('local LayoutTests outputset', None, zip)
+
+ outputs = b.outputs_for('some-test')
+ self.assertEquals(1, len(outputs))
+ self.assertEquals('win', outputs[0].platform())
+
+ def test_test_extension_is_ignored(self):
+ zip = MockZip()
+ zip.insert('test/test-a-actual.txt', 'actual outputs')
+ b = self._outputset_with_zip(zip)
+ outputs = b.outputs_for('test/test-a.html')
+ self.assertEquals(1, len(outputs))
+ self.assertEquals('test/test-a', outputs[0].name())
+
+ def test_existing_outputs_are_marked_as_such(self):
+ zip = MockZip()
+ zip.insert('test/test-a-expected.txt', 'expected outputs')
+ b = self._outputset_with_zip(zip)
+ outputs = b.outputs_for('test/test-a.html')
+ self.assertEquals(1, len(outputs))
+ self.assertFalse(outputs[0].is_actual())
+
+ def test_only_returns_outputs_of_specified_type(self):
+ zip = MockZip()
+ zip.insert('test/test-a-expected.txt', 'expected outputs')
+ zip.insert('test/test-a-expected.checksum', 'expected outputs')
+ zip.insert('test/test-a-expected.png', 'expected outputs')
+ b = self._outputset_with_zip(zip)
+
+ outputs = b.outputs_for('test/test-a.html')
+ text_outputs = b.outputs_for('test/test-a.html', target_type='text')
+ image_outputs = b.outputs_for('test/test-a.html', target_type='image')
+
+ self.assertEquals(2, len(outputs))
+ self.assertEquals(1, len(text_outputs))
+ self.assertEquals(1, len(image_outputs))
+ self.assertEquals('text', text_outputs[0].type())
+ self.assertEquals('image', image_outputs[0].type())
+
+ def test_exclude_expected_outputs_works(self):
+ zip = MockZip()
+ zip.insert('test-expected.txt', 'expected outputs stored on server for some reason')
+ b = self._outputset_with_zip(zip, include_expected=False)
+ outputs = b.outputs_for('test', target_type=None)
+ self.assertEquals(0, len(outputs))
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/common/system/directoryfileset.py b/Tools/Scripts/webkitpy/common/system/directoryfileset.py
index 11acaf4..a5cab0e 100644
--- a/Tools/Scripts/webkitpy/common/system/directoryfileset.py
+++ b/Tools/Scripts/webkitpy/common/system/directoryfileset.py
@@ -21,14 +21,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-from __future__ import with_statement
-
-import os
-import shutil
-
from webkitpy.common.system.fileset import FileSetFileHandle
from webkitpy.common.system.filesystem import FileSystem
-import webkitpy.common.system.ospath as ospath
class DirectoryFileSet(object):
@@ -36,8 +30,8 @@ class DirectoryFileSet(object):
def __init__(self, path, filesystem=None):
self._path = path
self._filesystem = filesystem or FileSystem()
- if not self._path.endswith(os.path.sep):
- self._path += os.path.sep
+ if not self._path.endswith(self._filesystem.sep):
+ self._path += self._filesystem.sep
def _full_path(self, filename):
assert self._is_under(self._path, filename)
@@ -52,7 +46,7 @@ class DirectoryFileSet(object):
return self._filesystem.files_under(self._path)
def _is_under(self, dir, filename):
- return bool(ospath.relpath(self._filesystem.join(dir, filename), dir))
+ return bool(self._filesystem.relpath(self._filesystem.join(dir, filename), dir))
def open(self, filename):
return FileSetFileHandle(self, filename, self._filesystem)
@@ -69,7 +63,7 @@ class DirectoryFileSet(object):
dest = self._filesystem.join(path, filename)
# As filename may have slashes in it, we must ensure that the same
# directory hierarchy exists at the output path.
- self._filesystem.maybe_make_directory(os.path.split(dest)[0])
+ self._filesystem.maybe_make_directory(self._filesystem.dirname(dest))
self._filesystem.copyfile(src, dest)
def delete(self, filename):
diff --git a/Tools/Scripts/webkitpy/common/system/fileset.py b/Tools/Scripts/webkitpy/common/system/fileset.py
index 22f7c4d..598c1c5 100644
--- a/Tools/Scripts/webkitpy/common/system/fileset.py
+++ b/Tools/Scripts/webkitpy/common/system/fileset.py
@@ -22,7 +22,6 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from __future__ import with_statement
-import os
from webkitpy.common.system.filesystem import FileSystem
@@ -38,6 +37,9 @@ class FileSetFileHandle(object):
def __str__(self):
return "%s:%s" % (self._fileset, self._filename)
+ def close(self):
+ pass
+
def contents(self):
if self._contents is None:
self._contents = self._fileset.read(self._filename)
@@ -61,4 +63,4 @@ class FileSetFileHandle(object):
return self._filename
def splitext(self):
- return os.path.splitext(self.name())
+ return self._filesystem.splitext(self.name())
diff --git a/Tools/Scripts/webkitpy/common/system/filesystem.py b/Tools/Scripts/webkitpy/common/system/filesystem.py
index 05513a9..b876807 100644
--- a/Tools/Scripts/webkitpy/common/system/filesystem.py
+++ b/Tools/Scripts/webkitpy/common/system/filesystem.py
@@ -39,13 +39,20 @@ import shutil
import tempfile
import time
+from webkitpy.common.system import ospath
+
class FileSystem(object):
"""FileSystem interface for webkitpy.
Unless otherwise noted, all paths are allowed to be either absolute
or relative."""
def __init__(self):
- self.sep = os.sep
+ self._sep = os.sep
+
+ def _get_sep(self):
+ return self._sep
+
+ sep = property(_get_sep, doc="pathname separator")
def abspath(self, path):
return os.path.abspath(path)
@@ -165,8 +172,8 @@ class FileSystem(object):
if e.errno != errno.EEXIST:
raise
- def move(self, src, dest):
- shutil.move(src, dest)
+ def move(self, source, destination):
+ shutil.move(source, destination)
def mtime(self, path):
return os.stat(path).st_mtime
@@ -200,6 +207,9 @@ class FileSystem(object):
with codecs.open(path, 'r', 'utf8') as f:
return f.read()
+ def relpath(self, path, start='.'):
+ return ospath.relpath(path, start)
+
class _WindowsError(exceptions.OSError):
"""Fake exception for Linux and Mac."""
pass
diff --git a/Tools/Scripts/webkitpy/common/system/filesystem_mock.py b/Tools/Scripts/webkitpy/common/system/filesystem_mock.py
index 0004944..aa79a8c 100644
--- a/Tools/Scripts/webkitpy/common/system/filesystem_mock.py
+++ b/Tools/Scripts/webkitpy/common/system/filesystem_mock.py
@@ -28,9 +28,11 @@
import errno
import os
-import path
import re
+from webkitpy.common.system import path
+from webkitpy.common.system import ospath
+
class MockFileSystem(object):
def __init__(self, files=None):
@@ -44,17 +46,23 @@ class MockFileSystem(object):
"""
self.files = files or {}
self.written_files = {}
- self.sep = '/'
+ self._sep = '/'
self.current_tmpno = 0
+ def _get_sep(self):
+ return self._sep
+
+ sep = property(_get_sep, doc="pathname separator")
+
def _raise_not_found(self, path):
raise IOError(errno.ENOENT, path, os.strerror(errno.ENOENT))
def _split(self, path):
- idx = path.rfind('/')
- return (path[0:idx], path[idx + 1:])
+ return path.rsplit(self.sep, 1)
def abspath(self, path):
+ if path.endswith(self.sep):
+ return path[:-1]
return path
def basename(self, path):
@@ -69,6 +77,7 @@ class MockFileSystem(object):
raise IOError(errno.EISDIR, destination, os.strerror(errno.ISDIR))
self.files[destination] = self.files[source]
+ self.written_files[destination] = self.files[source]
def dirname(self, path):
return self._split(path)[0]
@@ -90,10 +99,10 @@ class MockFileSystem(object):
if self.basename(path) in dirs_to_skip:
return []
- if not path.endswith('/'):
- path += '/'
+ if not path.endswith(self.sep):
+ path += self.sep
- dir_substrings = ['/' + d + '/' for d in dirs_to_skip]
+ dir_substrings = [self.sep + d + self.sep for d in dirs_to_skip]
for filename in self.files:
if not filename.startswith(path):
continue
@@ -117,7 +126,7 @@ class MockFileSystem(object):
return [f for f in self.files if f == path]
def isabs(self, path):
- return path.startswith('/')
+ return path.startswith(self.sep)
def isfile(self, path):
return path in self.files and self.files[path] is not None
@@ -125,8 +134,8 @@ class MockFileSystem(object):
def isdir(self, path):
if path in self.files:
return False
- if not path.endswith('/'):
- path += '/'
+ if not path.endswith(self.sep):
+ path += self.sep
# We need to use a copy of the keys here in order to avoid switching
# to a different thread and potentially modifying the dict in
@@ -135,22 +144,24 @@ class MockFileSystem(object):
return any(f.startswith(path) for f in files)
def join(self, *comps):
- return re.sub(re.escape(os.path.sep), '/', os.path.join(*comps))
+ # FIXME: might want tests for this and/or a better comment about how
+ # it works.
+ return re.sub(re.escape(os.path.sep), self.sep, os.path.join(*comps))
def listdir(self, path):
if not self.isdir(path):
raise OSError("%s is not a directory" % path)
- if not path.endswith('/'):
- path += '/'
+ if not path.endswith(self.sep):
+ path += self.sep
dirs = []
files = []
for f in self.files:
if self.exists(f) and f.startswith(path):
remaining = f[len(path):]
- if '/' in remaining:
- dir = remaining[:remaining.index('/')]
+ if self.sep in remaining:
+ dir = remaining[:remaining.index(self.sep)]
if not dir in dirs:
dirs.append(dir)
else:
@@ -164,7 +175,7 @@ class MockFileSystem(object):
def _mktemp(self, suffix='', prefix='tmp', dir=None, **kwargs):
if dir is None:
- dir = '/__im_tmp'
+ dir = self.sep + '__im_tmp'
curno = self.current_tmpno
self.current_tmpno += 1
return self.join(dir, "%s_%u_%s" % (prefix, curno, suffix))
@@ -196,24 +207,26 @@ class MockFileSystem(object):
# FIXME: Implement such that subsequent calls to isdir() work?
pass
- def move(self, src, dst):
- if self.files[src] is None:
- self._raise_not_found(src)
- self.files[dst] = self.files[src]
- self.files[src] = None
+ def move(self, source, destination):
+ if self.files[source] is None:
+ self._raise_not_found(source)
+ self.files[destination] = self.files[source]
+ self.written_files[destination] = self.files[destination]
+ self.files[source] = None
+ self.written_files[source] = None
def normpath(self, path):
return path
- def open_binary_tempfile(self, suffix):
+ def open_binary_tempfile(self, suffix=''):
path = self._mktemp(suffix)
- return WritableFileObject(self, path), path
+ return (WritableFileObject(self, path), path)
def open_text_file_for_writing(self, path, append=False):
return WritableFileObject(self, path, append)
def read_text_file(self, path):
- return self.read_binary_file(path)
+ return self.read_binary_file(path).decode('utf-8')
def read_binary_file(self, path):
# Intentionally raises KeyError if we don't recognize the path.
@@ -221,14 +234,18 @@ class MockFileSystem(object):
self._raise_not_found(path)
return self.files[path]
+ def relpath(self, path, start='.'):
+ return ospath.relpath(path, start, self.abspath, self.sep)
+
def remove(self, path):
if self.files[path] is None:
self._raise_not_found(path)
self.files[path] = None
+ self.written_files[path] = None
def rmtree(self, path):
- if not path.endswith('/'):
- path += '/'
+ if not path.endswith(self.sep):
+ path += self.sep
for f in self.files:
if f.startswith(path):
@@ -241,7 +258,7 @@ class MockFileSystem(object):
return (path[0:idx], path[idx:])
def write_text_file(self, path, contents):
- return self.write_binary_file(path, contents)
+ return self.write_binary_file(path, contents.encode('utf-8'))
def write_binary_file(self, path, contents):
self.files[path] = contents
diff --git a/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py b/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
index 267ca13..8455d72 100644
--- a/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
+++ b/Tools/Scripts/webkitpy/common/system/filesystem_unittest.py
@@ -167,6 +167,19 @@ class FileSystemTest(unittest.TestCase):
self.assertTrue(fs.remove('filename', remove_with_exception))
self.assertEquals(-1, FileSystemTest._remove_failures)
+ def test_sep(self):
+ fs = FileSystem()
+
+ self.assertEquals(fs.sep, os.sep)
+ self.assertEquals(fs.join("foo", "bar"),
+ os.path.join("foo", "bar"))
+
+ def test_sep__is_readonly(self):
+ def assign_sep():
+ fs.sep = ' '
+ fs = FileSystem()
+ self.assertRaises(AttributeError, assign_sep)
+
if __name__ == '__main__':
unittest.main()
diff --git a/Tools/Scripts/webkitpy/common/system/logutils.py b/Tools/Scripts/webkitpy/common/system/logutils.py
index cd4e60f..eef4636 100644
--- a/Tools/Scripts/webkitpy/common/system/logutils.py
+++ b/Tools/Scripts/webkitpy/common/system/logutils.py
@@ -83,7 +83,7 @@ def get_logger(path):
Sample usage:
- import webkitpy.common.system.logutils as logutils
+ from webkitpy.common.system import logutils
_log = logutils.get_logger(__file__)
diff --git a/Tools/Scripts/webkitpy/common/system/logutils_unittest.py b/Tools/Scripts/webkitpy/common/system/logutils_unittest.py
index b77c284..f1b494d 100644
--- a/Tools/Scripts/webkitpy/common/system/logutils_unittest.py
+++ b/Tools/Scripts/webkitpy/common/system/logutils_unittest.py
@@ -28,7 +28,7 @@ import unittest
from webkitpy.common.system.logtesting import LogTesting
from webkitpy.common.system.logtesting import TestLogStream
-import webkitpy.common.system.logutils as logutils
+from webkitpy.common.system import logutils
class GetLoggerTest(unittest.TestCase):
diff --git a/Tools/Scripts/webkitpy/common/system/ospath.py b/Tools/Scripts/webkitpy/common/system/ospath.py
index aed7a3d..2504645 100644
--- a/Tools/Scripts/webkitpy/common/system/ospath.py
+++ b/Tools/Scripts/webkitpy/common/system/ospath.py
@@ -32,7 +32,7 @@ import os
#
# It should behave essentially the same as os.path.relpath(), except for
# returning None on paths not contained in abs_start_path.
-def relpath(path, start_path, os_path_abspath=None):
+def relpath(path, start_path, os_path_abspath=None, sep=None):
"""Return a path relative to the given start path, or None.
Returns None if the path is not contained in the directory start_path.
@@ -44,10 +44,12 @@ def relpath(path, start_path, os_path_abspath=None):
os_path_abspath: A replacement function for unit testing. This
function should strip trailing slashes just like
os.path.abspath(). Defaults to os.path.abspath.
+ sep: Path separator. Defaults to os.path.sep
"""
if os_path_abspath is None:
os_path_abspath = os.path.abspath
+ sep = sep or os.sep
# Since os_path_abspath() calls os.path.normpath()--
#
@@ -67,11 +69,11 @@ def relpath(path, start_path, os_path_abspath=None):
if not rel_path:
# Then the paths are the same.
pass
- elif rel_path[0] == os.sep:
+ elif rel_path[0] == sep:
# It is probably sufficient to remove just the first character
# since os.path.normpath() collapses separators, but we use
# lstrip() just to be sure.
- rel_path = rel_path.lstrip(os.sep)
+ rel_path = rel_path.lstrip(sep)
else:
# We are in the case typified by the following example:
#
diff --git a/Tools/Scripts/webkitpy/common/system/stack_utils.py b/Tools/Scripts/webkitpy/common/system/stack_utils.py
new file mode 100644
index 0000000..a343807
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/system/stack_utils.py
@@ -0,0 +1,67 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Simple routines for logging, obtaining thread stack information."""
+
+import sys
+import traceback
+
+
+def log_thread_state(logger, name, thread_id, msg=''):
+ """Log information about the given thread state."""
+ stack = _find_thread_stack(thread_id)
+ assert(stack is not None)
+ logger("")
+ logger("%s (tid %d) %s" % (name, thread_id, msg))
+ _log_stack(logger, stack)
+ logger("")
+
+
+def _find_thread_stack(thread_id):
+ """Returns a stack object that can be used to dump a stack trace for
+ the given thread id (or None if the id is not found)."""
+ for tid, stack in sys._current_frames().items():
+ if tid == thread_id:
+ return stack
+ return None
+
+
+def _log_stack(logger, stack):
+ """Log a stack trace to the logger callback."""
+ for filename, lineno, name, line in traceback.extract_stack(stack):
+ logger('File: "%s", line %d, in %s' % (filename, lineno, name))
+ if line:
+ logger(' %s' % line.strip())
+
+
+def log_traceback(logger, tb):
+ stack = traceback.extract_tb(tb)
+ for frame_str in traceback.format_list(stack):
+ for line in frame_str.split('\n'):
+ if line:
+ logger(" %s" % line)
diff --git a/Tools/Scripts/webkitpy/common/system/stack_utils_unittest.py b/Tools/Scripts/webkitpy/common/system/stack_utils_unittest.py
new file mode 100644
index 0000000..b21319f
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/system/stack_utils_unittest.py
@@ -0,0 +1,76 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import sys
+import unittest
+
+from webkitpy.common.system import outputcapture
+from webkitpy.common.system import stack_utils
+
+
+def current_thread_id():
+ thread_id, _ = sys._current_frames().items()[0]
+ return thread_id
+
+
+class Test(unittest.TestCase):
+ def test_find_thread_stack_found(self):
+ thread_id = current_thread_id()
+ found_stack = stack_utils._find_thread_stack(thread_id)
+ self.assertNotEqual(found_stack, None)
+
+ def test_find_thread_stack_not_found(self):
+ found_stack = stack_utils._find_thread_stack(0)
+ self.assertEqual(found_stack, None)
+
+ def test_log_thread_state(self):
+ msgs = []
+
+ def logger(msg):
+ msgs.append(msg)
+
+ thread_id = current_thread_id()
+ stack_utils.log_thread_state(logger, "test-thread", thread_id,
+ "is tested")
+ self.assertTrue(msgs)
+
+ def test_log_traceback(self):
+ msgs = []
+
+ def logger(msg):
+ msgs.append(msg)
+
+ try:
+ raise ValueError
+ except:
+ stack_utils.log_traceback(logger, sys.exc_info()[2])
+ self.assertTrue(msgs)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_output.py b/Tools/Scripts/webkitpy/common/system/urlfetcher.py
index e809be6..2d9e5ec 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_output.py
+++ b/Tools/Scripts/webkitpy/common/system/urlfetcher.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2010 Google Inc. All rights reserved.
+# Copyright (C) 2011 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -26,31 +26,30 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""Wrapper module for fetching URLs."""
-class TestOutput(object):
- """Groups information about a test output for easy passing of data.
+import urllib
- This is used not only for a actual test output, but also for grouping
- expected test output.
- """
- def __init__(self, text, image, image_hash,
- crash=None, test_time=None, timeout=None, error=None):
- """Initializes a TestOutput object.
+class UrlFetcher(object):
+ """Class with restricted interface to fetch URLs (makes testing easier)"""
+ def __init__(self, filesystem):
+ self._filesystem = filesystem
- Args:
- text: a text output
- image: an image output
- image_hash: a string containing the checksum of the image
- crash: a boolean indicating whether the driver crashed on the test
- test_time: a time which the test has taken
- timeout: a boolean indicating whehter the test timed out
- error: any unexpected or additional (or error) text output
+ def fetch(self, url):
+ """Fetches the contents of the URL as a string."""
+ file_object = urllib.urlopen(url)
+ content = file_object.read()
+ file_object.close()
+ return content
+
+ def fetch_into_file(self, url):
+ """Fetches the contents of the URL into a temporary file and return the filename.
+
+ This is the equivalent of urllib.retrieve() except that we don't return any headers.
"""
- self.text = text
- self.image = image
- self.image_hash = image_hash
- self.crash = crash
- self.test_time = test_time
- self.timeout = timeout
- self.error = error
+ file_object, filename = self._filesystem.open_binary_tempfile('-fetched')
+ contents = self.fetch(url)
+ file_object.write(contents)
+ file_object.close()
+ return filename
diff --git a/Tools/Scripts/webkitpy/common/system/urlfetcher_mock.py b/Tools/Scripts/webkitpy/common/system/urlfetcher_mock.py
new file mode 100644
index 0000000..e8a7532
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/system/urlfetcher_mock.py
@@ -0,0 +1,46 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+def make_fetcher_cls(urls):
+ """UrlFetcher factory routine that simulates network access
+ using a dict of URLs -> contents."""
+ class MockFetcher(object):
+ def __init__(self, filesystem):
+ self._filesystem = filesystem
+
+ def fetch(self, url):
+ return urls[url]
+
+ def fetch_into_file(self, url):
+ f, fn = self._filesystem.open_binary_tempfile('mockfetcher')
+ f.write(self.fetch(url))
+ f.close()
+ return fn
+
+ return MockFetcher
diff --git a/Tools/Scripts/webkitpy/common/system/zip_mock.py b/Tools/Scripts/webkitpy/common/system/zip_mock.py
new file mode 100644
index 0000000..dcfaba7
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/system/zip_mock.py
@@ -0,0 +1,55 @@
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.common.system.fileset import FileSetFileHandle
+from webkitpy.common.system.filesystem_mock import MockFileSystem
+
+
+class MockZip(object):
+ """A mock zip file that can have new files inserted into it."""
+ def __init__(self, filesystem=None):
+ self._filesystem = filesystem or MockFileSystem()
+ self._files = {}
+
+ def __str__(self):
+ return "MockZip"
+
+ def insert(self, filename, content):
+ self._files[filename] = content
+
+ def namelist(self):
+ return self._files.keys()
+
+ def open(self, filename):
+ return FileSetFileHandle(self, filename)
+
+ def read(self, filename):
+ return self._files[filename]
+
+ def extract(self, filename, path):
+ full_path = self._filesystem.join(path, filename)
+ contents = self.open(filename).contents()
+ self._filesystem.write_text_file(full_path, contents)
+
+ def delete(self, filename):
+ self._files[filename] = None
diff --git a/Tools/Scripts/webkitpy/common/system/zipfileset.py b/Tools/Scripts/webkitpy/common/system/zipfileset.py
index fa2b762..5cf3616 100644
--- a/Tools/Scripts/webkitpy/common/system/zipfileset.py
+++ b/Tools/Scripts/webkitpy/common/system/zipfileset.py
@@ -33,22 +33,28 @@ class ZipFileSet(object):
"""The set of files in a zip file that resides at a URL (local or remote)"""
def __init__(self, zip_url, filesystem=None, zip_factory=None):
self._zip_url = zip_url
+ self._temp_file = None
self._zip_file = None
self._filesystem = filesystem or FileSystem()
self._zip_factory = zip_factory or self._retrieve_zip_file
def _retrieve_zip_file(self, zip_url):
temp_file = NetworkTransaction().run(lambda: urllib.urlretrieve(zip_url)[0])
- return zipfile.ZipFile(temp_file)
+ return (temp_file, zipfile.ZipFile(temp_file))
def _load(self):
if self._zip_file is None:
- self._zip_file = self._zip_factory(self._zip_url)
+ self._temp_file, self._zip_file = self._zip_factory(self._zip_url)
def open(self, filename):
self._load()
return FileSetFileHandle(self, filename, self._filesystem)
+ def close(self):
+ if self._temp_file:
+ self._filesystem.remove(self._temp_file)
+ self._temp_file = None
+
def namelist(self):
self._load()
return self._zip_file.namelist()
diff --git a/Tools/Scripts/webkitpy/common/system/zipfileset_mock.py b/Tools/Scripts/webkitpy/common/system/zipfileset_mock.py
new file mode 100644
index 0000000..24ac8cb
--- /dev/null
+++ b/Tools/Scripts/webkitpy/common/system/zipfileset_mock.py
@@ -0,0 +1,51 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+def make_factory(ziphashes):
+ """ZipFileSet factory routine that looks up zipfiles in a dict;
+ each zipfile should also be a dict of member names -> contents."""
+ class MockZipFileSet(object):
+ def __init__(self, url):
+ self._url = url
+ self._ziphash = ziphashes[url]
+
+ def namelist(self):
+ return self._ziphash.keys()
+
+ def read(self, member):
+ return self._ziphash[member]
+
+ def close(self):
+ pass
+
+ def maker(url):
+ # We return None because there's no tempfile to delete.
+ return (None, MockZipFileSet(url))
+
+ return maker
diff --git a/Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py b/Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py
index a9ba5ad..6801406 100644
--- a/Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py
+++ b/Tools/Scripts/webkitpy/common/system/zipfileset_unittest.py
@@ -64,13 +64,17 @@ class ZipFileSetTest(unittest.TestCase):
result = FakeZip(self._filesystem)
result.add_file('some-file', 'contents')
result.add_file('a/b/some-other-file', 'other contents')
- return result
+ return (None, result)
def test_open(self):
file = self._zip.open('a/b/some-other-file')
self.assertEquals('a/b/some-other-file', file.name())
self.assertEquals('other contents', file.contents())
+ def test_close(self):
+ zipfileset = ZipFileSet('blah', self._filesystem, self.make_fake_zip)
+ zipfileset.close()
+
def test_read(self):
self.assertEquals('contents', self._zip.read('some-file'))
diff --git a/Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py b/Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py
index 51dcac8..86649b6 100644
--- a/Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py
+++ b/Tools/Scripts/webkitpy/layout_tests/deduplicate_tests.py
@@ -36,11 +36,12 @@ import os
import subprocess
import sys
import re
-import webkitpy.common.checkout.scm as scm
-import webkitpy.common.system.executive as executive
-import webkitpy.common.system.logutils as logutils
-import webkitpy.common.system.ospath as ospath
-import webkitpy.layout_tests.port.factory as port_factory
+
+from webkitpy.common.checkout import scm
+from webkitpy.common.system import executive
+from webkitpy.common.system import logutils
+from webkitpy.common.system import ospath
+from webkitpy.layout_tests.port import factory as port_factory
_log = logutils.get_logger(__file__)
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
index 050eefa..7ddd7b0 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
@@ -28,17 +28,11 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""A Thread object for running DumpRenderTree and processing URLs from a
-shared queue.
+"""This module implements a shared-memory, thread-based version of the worker
+task in new-run-webkit-tests: it receives a list of tests from TestShellThread
+and passes them one at a time to SingleTestRunner to execute."""
-Each thread runs a separate instance of the DumpRenderTree binary and validates
-the output. When there are no more URLs to process in the shared queue, the
-thread exits.
-"""
-
-import copy
import logging
-import os
import Queue
import signal
import sys
@@ -46,199 +40,13 @@ import thread
import threading
import time
-
-from webkitpy.layout_tests.test_types import image_diff
-from webkitpy.layout_tests.test_types import test_type_base
-from webkitpy.layout_tests.test_types import text_diff
-
-import test_failures
-import test_output
-import test_results
+from webkitpy.layout_tests.layout_package.single_test_runner import SingleTestRunner
_log = logging.getLogger("webkitpy.layout_tests.layout_package."
"dump_render_tree_thread")
-def _expected_test_output(port, filename):
- """Returns an expected TestOutput object."""
- return test_output.TestOutput(port.expected_text(filename),
- port.expected_image(filename),
- port.expected_checksum(filename))
-
-def _process_output(port, options, test_input, test_types, test_args,
- test_output, worker_name):
- """Receives the output from a DumpRenderTree process, subjects it to a
- number of tests, and returns a list of failure types the test produced.
-
- Args:
- port: port-specific hooks
- options: command line options argument from optparse
- proc: an active DumpRenderTree process
- test_input: Object containing the test filename and timeout
- test_types: list of test types to subject the output to
- test_args: arguments to be passed to each test
- test_output: a TestOutput object containing the output of the test
- worker_name: worker name for logging
-
- Returns: a TestResult object
- """
- failures = []
- fs = port._filesystem
-
- if test_output.crash:
- failures.append(test_failures.FailureCrash())
- if test_output.timeout:
- failures.append(test_failures.FailureTimeout())
-
- test_name = port.relative_test_filename(test_input.filename)
- if test_output.crash:
- _log.debug("%s Stacktrace for %s:\n%s" % (worker_name, test_name,
- test_output.error))
- filename = fs.join(options.results_directory, test_name)
- filename = fs.splitext(filename)[0] + "-stack.txt"
- fs.maybe_make_directory(fs.dirname(filename))
- fs.write_text_file(filename, test_output.error)
- elif test_output.error:
- _log.debug("%s %s output stderr lines:\n%s" % (worker_name, test_name,
- test_output.error))
-
- expected_test_output = _expected_test_output(port, test_input.filename)
-
- # Check the output and save the results.
- start_time = time.time()
- time_for_diffs = {}
- for test_type in test_types:
- start_diff_time = time.time()
- new_failures = test_type.compare_output(port, test_input.filename,
- test_args, test_output,
- expected_test_output)
- # Don't add any more failures if we already have a crash, so we don't
- # double-report those tests. We do double-report for timeouts since
- # we still want to see the text and image output.
- if not test_output.crash:
- failures.extend(new_failures)
- time_for_diffs[test_type.__class__.__name__] = (
- time.time() - start_diff_time)
-
- total_time_for_all_diffs = time.time() - start_diff_time
- return test_results.TestResult(test_input.filename, failures, test_output.test_time,
- total_time_for_all_diffs, time_for_diffs)
-
-
-def _pad_timeout(timeout):
- """Returns a safe multiple of the per-test timeout value to use
- to detect hung test threads.
-
- """
- # When we're running one test per DumpRenderTree process, we can
- # enforce a hard timeout. The DumpRenderTree watchdog uses 2.5x
- # the timeout; we want to be larger than that.
- return timeout * 3
-
-
-def _milliseconds_to_seconds(msecs):
- return float(msecs) / 1000.0
-
-
-def _should_fetch_expected_checksum(options):
- return options.pixel_tests and not (options.new_baseline or options.reset_results)
-
-
-def _run_single_test(port, options, test_input, test_types, test_args, driver, worker_name):
- # FIXME: Pull this into TestShellThread._run().
-
- # The image hash is used to avoid doing an image dump if the
- # checksums match, so it should be set to a blank value if we
- # are generating a new baseline. (Otherwise, an image from a
- # previous run will be copied into the baseline."""
- if _should_fetch_expected_checksum(options):
- test_input.image_hash = port.expected_checksum(test_input.filename)
- test_output = driver.run_test(test_input)
- return _process_output(port, options, test_input, test_types, test_args,
- test_output, worker_name)
-
-
-class SingleTestThread(threading.Thread):
- """Thread wrapper for running a single test file."""
-
- def __init__(self, port, options, worker_number, worker_name,
- test_input, test_types, test_args):
- """
- Args:
- port: object implementing port-specific hooks
- options: command line argument object from optparse
- worker_number: worker number for tests
- worker_name: for logging
- test_input: Object containing the test filename and timeout
- test_types: A list of TestType objects to run the test output
- against.
- test_args: A TestArguments object to pass to each TestType.
- """
-
- threading.Thread.__init__(self)
- self._port = port
- self._options = options
- self._test_input = test_input
- self._test_types = test_types
- self._test_args = test_args
- self._driver = None
- self._worker_number = worker_number
- self._name = worker_name
-
- def run(self):
- self._covered_run()
-
- def _covered_run(self):
- # FIXME: this is a separate routine to work around a bug
- # in coverage: see http://bitbucket.org/ned/coveragepy/issue/85.
- self._driver = self._port.create_driver(self._worker_number)
- self._driver.start()
- self._test_result = _run_single_test(self._port, self._options,
- self._test_input, self._test_types,
- self._test_args, self._driver,
- self._name)
- self._driver.stop()
-
- def get_test_result(self):
- return self._test_result
-
-
-class WatchableThread(threading.Thread):
- """This class abstracts an interface used by
- run_webkit_tests.TestRunner._wait_for_threads_to_finish for thread
- management."""
- def __init__(self):
- threading.Thread.__init__(self)
- self._canceled = False
- self._exception_info = None
- self._next_timeout = None
- self._thread_id = None
-
- def cancel(self):
- """Set a flag telling this thread to quit."""
- self._canceled = True
-
- def clear_next_timeout(self):
- """Mark a flag telling this thread to stop setting timeouts."""
- self._timeout = 0
-
- def exception_info(self):
- """If run() terminated on an uncaught exception, return it here
- ((type, value, traceback) tuple).
- Returns None if run() terminated normally. Meant to be called after
- joining this thread."""
- return self._exception_info
-
- def id(self):
- """Return a thread identifier."""
- return self._thread_id
-
- def next_timeout(self):
- """Return the time the test is supposed to finish by."""
- return self._next_timeout
-
-
-class TestShellThread(WatchableThread):
+class TestShellThread(threading.Thread):
def __init__(self, port, options, worker_number, worker_name,
filename_list_queue, result_queue):
"""Initialize all the local state for this DumpRenderTree thread.
@@ -253,50 +61,51 @@ class TestShellThread(WatchableThread):
result_queue: A thread safe Queue class that will contain
serialized TestResult objects.
"""
- WatchableThread.__init__(self)
+ threading.Thread.__init__(self)
+ self._canceled = False
+ self._exception_info = None
+ self._next_timeout = None
+ self._thread_id = None
self._port = port
self._options = options
self._worker_number = worker_number
self._name = worker_name
self._filename_list_queue = filename_list_queue
self._result_queue = result_queue
+ self._current_group = None
self._filename_list = []
- self._driver = None
self._test_group_timing_stats = {}
self._test_results = []
self._num_tests = 0
self._start_time = 0
self._stop_time = 0
- self._have_http_lock = False
self._http_lock_wait_begin = 0
self._http_lock_wait_end = 0
- self._test_types = []
- for cls in self._get_test_type_classes():
- self._test_types.append(cls(self._port,
- self._options.results_directory))
- self._test_args = self._get_test_args(worker_number)
+ def cancel(self):
+ """Set a flag telling this thread to quit."""
+ self._canceled = True
- # Current group of tests we're running.
- self._current_group = None
- # Number of tests in self._current_group.
- self._num_tests_in_current_group = None
- # Time at which we started running tests from self._current_group.
- self._current_group_start_time = None
+ def clear_next_timeout(self):
+ """Mark a flag telling this thread to stop setting timeouts."""
+ self._timeout = 0
- def _get_test_args(self, worker_number):
- """Returns the tuple of arguments for tests and for DumpRenderTree."""
- test_args = test_type_base.TestArguments()
- test_args.new_baseline = self._options.new_baseline
- test_args.reset_results = self._options.reset_results
+ def exception_info(self):
+ """If run() terminated on an uncaught exception, return it here
+ ((type, value, traceback) tuple).
+ Returns None if run() terminated normally. Meant to be called after
+ joining this thread."""
+ return self._exception_info
- return test_args
+ def id(self):
+ """Return a thread identifier."""
+ return self._thread_id
- def _get_test_type_classes(self):
- classes = [text_diff.TestTextDiff]
- if self._options.pixel_tests:
- classes.append(image_diff.ImageDiff)
- return classes
+ def next_timeout(self):
+ """Return the time the test is supposed to finish by."""
+ if self._next_timeout:
+ return self._next_timeout + self._http_lock_wait_time()
+ return self._next_timeout
def get_test_group_timing_stats(self):
"""Returns a dictionary mapping test group to a tuple of
@@ -352,17 +161,6 @@ class TestShellThread(WatchableThread):
do multi-threaded debugging."""
self._run(test_runner, result_summary)
- def cancel(self):
- """Clean up http lock and set a flag telling this thread to quit."""
- self._stop_servers_with_lock()
- WatchableThread.cancel(self)
-
- def next_timeout(self):
- """Return the time the test is supposed to finish by."""
- if self._next_timeout:
- return self._next_timeout + self._http_lock_wait_time()
- return self._next_timeout
-
def _http_lock_wait_time(self):
"""Return the time what http locking takes."""
if self._http_lock_wait_begin == 0:
@@ -377,18 +175,23 @@ class TestShellThread(WatchableThread):
If test_runner is not None, then we call test_runner.UpdateSummary()
with the results of each test."""
+ single_test_runner = SingleTestRunner(self._options, self._port,
+ self._name, self._worker_number)
+
batch_size = self._options.batch_size
batch_count = 0
# Append tests we're running to the existing tests_run.txt file.
# This is created in run_webkit_tests.py:_PrepareListsAndPrintOutput.
tests_run_filename = self._port._filesystem.join(self._options.results_directory,
- "tests_run.txt")
+ "tests_run%d.txt" % self._worker_number)
tests_run_file = self._port._filesystem.open_text_file_for_writing(tests_run_filename, append=False)
+
while True:
if self._canceled:
_log.debug('Testing cancelled')
tests_run_file.close()
+ single_test_runner.cleanup()
return
if len(self._filename_list) is 0:
@@ -401,15 +204,16 @@ class TestShellThread(WatchableThread):
self._current_group, self._filename_list = \
self._filename_list_queue.get_nowait()
except Queue.Empty:
- self._stop_servers_with_lock()
- self._kill_dump_render_tree()
tests_run_file.close()
+ single_test_runner.cleanup()
return
if self._current_group == "tests_to_http_lock":
- self._start_servers_with_lock()
- elif self._have_http_lock:
- self._stop_servers_with_lock()
+ self._http_lock_wait_begin = time.time()
+ single_test_runner.start_servers_with_lock()
+ self._http_lock_wait_end = time.time()
+ elif single_test_runner.has_http_lock:
+ single_test_runner.stop_servers_with_lock()
self._num_tests_in_current_group = len(self._filename_list)
self._current_group_start_time = time.time()
@@ -419,145 +223,31 @@ class TestShellThread(WatchableThread):
# We have a url, run tests.
batch_count += 1
self._num_tests += 1
- if self._options.run_singly:
- result = self._run_test_in_another_thread(test_input)
- else:
- result = self._run_test_in_this_thread(test_input)
- filename = test_input.filename
- tests_run_file.write(filename + "\n")
+ timeout = single_test_runner.timeout(test_input)
+ result = single_test_runner.run_test(test_input, timeout)
+
+ tests_run_file.write(test_input.filename + "\n")
+ test_name = self._port.relative_test_filename(test_input.filename)
if result.failures:
# Check and kill DumpRenderTree if we need to.
- if len([1 for f in result.failures
- if f.should_kill_dump_render_tree()]):
- self._kill_dump_render_tree()
+ if any([f.should_kill_dump_render_tree() for f in result.failures]):
+ single_test_runner.kill_dump_render_tree()
# Reset the batch count since the shell just bounced.
batch_count = 0
+
# Print the error message(s).
- error_str = '\n'.join([' ' + f.message() for
- f in result.failures])
- _log.debug("%s %s failed:\n%s" % (self.getName(),
- self._port.relative_test_filename(filename),
- error_str))
+ _log.debug("%s %s failed:" % (self._name, test_name))
+ for f in result.failures:
+ _log.debug("%s %s" % (self._name, f.message()))
else:
- _log.debug("%s %s passed" % (self.getName(),
- self._port.relative_test_filename(filename)))
+ _log.debug("%s %s passed" % (self._name, test_name))
self._result_queue.put(result.dumps())
if batch_size > 0 and batch_count >= batch_size:
# Bounce the shell and reset count.
- self._kill_dump_render_tree()
+ single_test_runner.kill_dump_render_tree()
batch_count = 0
if test_runner:
test_runner.update_summary(result_summary)
-
- def _run_test_in_another_thread(self, test_input):
- """Run a test in a separate thread, enforcing a hard time limit.
-
- Since we can only detect the termination of a thread, not any internal
- state or progress, we can only run per-test timeouts when running test
- files singly.
-
- Args:
- test_input: Object containing the test filename and timeout
-
- Returns:
- A TestResult
- """
- worker = SingleTestThread(self._port,
- self._options,
- self._worker_number,
- self._name,
- test_input,
- self._test_types,
- self._test_args)
-
- worker.start()
-
- thread_timeout = _milliseconds_to_seconds(
- _pad_timeout(int(test_input.timeout)))
- thread._next_timeout = time.time() + thread_timeout
- worker.join(thread_timeout)
- if worker.isAlive():
- # If join() returned with the thread still running, the
- # DumpRenderTree is completely hung and there's nothing
- # more we can do with it. We have to kill all the
- # DumpRenderTrees to free it up. If we're running more than
- # one DumpRenderTree thread, we'll end up killing the other
- # DumpRenderTrees too, introducing spurious crashes. We accept
- # that tradeoff in order to avoid losing the rest of this
- # thread's results.
- _log.error('Test thread hung: killing all DumpRenderTrees')
- if worker._driver:
- worker._driver.stop()
-
- try:
- result = worker.get_test_result()
- except AttributeError, e:
- # This gets raised if the worker thread has already exited.
- _log.error('Cannot get results of test: %s' % test_input.filename)
- # FIXME: Seems we want a unique failure type here.
- result = test_results.TestResult(test_input.filename)
-
- return result
-
- def _run_test_in_this_thread(self, test_input):
- """Run a single test file using a shared DumpRenderTree process.
-
- Args:
- test_input: Object containing the test filename, uri and timeout
-
- Returns: a TestResult object.
- """
- self._ensure_dump_render_tree_is_running()
- thread_timeout = _milliseconds_to_seconds(
- _pad_timeout(int(test_input.timeout)))
- self._next_timeout = time.time() + thread_timeout
- test_result = _run_single_test(self._port, self._options, test_input,
- self._test_types, self._test_args,
- self._driver, self._name)
- self._test_results.append(test_result)
- return test_result
-
- def _ensure_dump_render_tree_is_running(self):
- """Start the shared DumpRenderTree, if it's not running.
-
- This is not for use when running tests singly, since those each start
- a separate DumpRenderTree in their own thread.
-
- """
- # poll() is not threadsafe and can throw OSError due to:
- # http://bugs.python.org/issue1731717
- if not self._driver or self._driver.poll() is not None:
- self._driver = self._port.create_driver(self._worker_number)
- self._driver.start()
-
- def _start_servers_with_lock(self):
- """Acquire http lock and start the servers."""
- self._http_lock_wait_begin = time.time()
- _log.debug('Acquire http lock ...')
- self._port.acquire_http_lock()
- _log.debug('Starting HTTP server ...')
- self._port.start_http_server()
- _log.debug('Starting WebSocket server ...')
- self._port.start_websocket_server()
- self._http_lock_wait_end = time.time()
- self._have_http_lock = True
-
- def _stop_servers_with_lock(self):
- """Stop the servers and release http lock."""
- if self._have_http_lock:
- _log.debug('Stopping HTTP server ...')
- self._port.stop_http_server()
- _log.debug('Stopping WebSocket server ...')
- self._port.stop_websocket_server()
- _log.debug('Release http lock ...')
- self._port.release_http_lock()
- self._have_http_lock = False
-
- def _kill_dump_render_tree(self):
- """Kill the DumpRenderTree process if it's running."""
- if self._driver:
- self._driver.stop()
- self._driver = None
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
index 3267fb7..8226ed0 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
@@ -55,8 +55,7 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase
def __init__(self, port, builder_name, build_name, build_number,
results_file_base_path, builder_base_url,
test_timings, expectations, result_summary, all_tests,
- generate_incremental_results=False, test_results_server=None,
- test_type="", master_name=""):
+ test_results_server=None, test_type="", master_name=""):
"""Modifies the results.json file. Grabs it off the archive directory
if it is not found locally.
@@ -67,8 +66,7 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase
super(JSONLayoutResultsGenerator, self).__init__(
port, builder_name, build_name, build_number, results_file_base_path,
builder_base_url, {}, port.test_repository_paths(),
- generate_incremental_results, test_results_server,
- test_type, master_name)
+ test_results_server, test_type, master_name)
self._expectations = expectations
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
index 32ffd71..05662c2 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
@@ -114,13 +114,16 @@ class JSONResultsGeneratorBase(object):
URL_FOR_TEST_LIST_JSON = \
"http://%s/testfile?builder=%s&name=%s&testlistjson=1&testtype=%s"
+ # FIXME: Remove generate_incremental_results once the reference to it in
+ # http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/gtest_slave_utils.py
+ # has been removed.
def __init__(self, port, builder_name, build_name, build_number,
results_file_base_path, builder_base_url,
test_results_map, svn_repositories=None,
- generate_incremental_results=False,
test_results_server=None,
test_type="",
- master_name=""):
+ master_name="",
+ generate_incremental_results=None):
"""Modifies the results.json file. Grabs it off the archive directory
if it is not found locally.
@@ -137,8 +140,6 @@ class JSONResultsGeneratorBase(object):
svn_repositories: A (json_field_name, svn_path) pair for SVN
repositories that tests rely on. The SVN revision will be
included in the JSON with the given json_field_name.
- generate_incremental_results: If true, generate incremental json file
- from current run results.
test_results_server: server that hosts test results json.
test_type: test type string (e.g. 'layout-tests').
master_name: the name of the buildbot master.
@@ -157,7 +158,6 @@ class JSONResultsGeneratorBase(object):
self._test_results_map = test_results_map
self._test_results = test_results_map.values()
- self._generate_incremental_results = generate_incremental_results
self._svn_repositories = svn_repositories
if not self._svn_repositories:
@@ -167,39 +167,20 @@ class JSONResultsGeneratorBase(object):
self._test_type = test_type
self._master_name = master_name
- self._json = None
self._archived_results = None
def generate_json_output(self):
- """Generates the JSON output file."""
-
- # Generate the JSON output file that has full results.
- # FIXME: stop writing out the full results file once all bots use
- # incremental results.
- if not self._json:
- self._json = self.get_json()
- if self._json:
- self._generate_json_file(self._json, self._results_file_path)
-
- # Generate the JSON output file that only has incremental results.
- if self._generate_incremental_results:
- json = self.get_json(incremental=True)
- if json:
- self._generate_json_file(
- json, self._incremental_results_file_path)
-
- def get_json(self, incremental=False):
+ json = self.get_json()
+ if json:
+ self._generate_json_file(
+ json, self._incremental_results_file_path)
+
+ def get_json(self):
"""Gets the results for the results.json file."""
results_json = {}
- if not incremental:
- if self._json:
- return self._json
-
- if self._archived_results:
- results_json = self._archived_results
if not results_json:
- results_json, error = self._get_archived_json_results(incremental)
+ results_json, error = self._get_archived_json_results()
if error:
# If there was an error don't write a results.json
# file at all as it would lose all the information on the
@@ -231,7 +212,7 @@ class JSONResultsGeneratorBase(object):
all_failing_tests = self._get_failed_test_names()
all_failing_tests.update(tests.iterkeys())
for test in all_failing_tests:
- self._insert_test_time_and_result(test, tests, incremental)
+ self._insert_test_time_and_result(test, tests)
return results_json
@@ -340,52 +321,39 @@ class JSONResultsGeneratorBase(object):
return ""
return ""
- def _get_archived_json_results(self, for_incremental=False):
- """Reads old results JSON file if it exists.
- Returns (archived_results, error) tuple where error is None if results
- were successfully read.
-
- if for_incremental is True, download JSON file that only contains test
+ def _get_archived_json_results(self):
+ """Download JSON file that only contains test
name list from test-results server. This is for generating incremental
JSON so the file generated has info for tests that failed before but
pass or are skipped from current run.
+
+ Returns (archived_results, error) tuple where error is None if results
+ were successfully read.
"""
results_json = {}
old_results = None
error = None
- if self._fs.exists(self._results_file_path) and not for_incremental:
- old_results = self._fs.read_text_file(self._results_file_path)
- elif self._builder_base_url or for_incremental:
- if for_incremental:
- if not self._test_results_server:
- # starting from fresh if no test results server specified.
- return {}, None
-
- results_file_url = (self.URL_FOR_TEST_LIST_JSON %
- (urllib2.quote(self._test_results_server),
- urllib2.quote(self._builder_name),
- self.RESULTS_FILENAME,
- urllib2.quote(self._test_type)))
- else:
- # Check if we have the archived JSON file on the buildbot
- # server.
- results_file_url = (self._builder_base_url +
- self._build_name + "/" + self.RESULTS_FILENAME)
- _log.error("Local results.json file does not exist. Grabbing "
- "it off the archive at " + results_file_url)
+ if not self._test_results_server:
+ return {}, None
- try:
- results_file = urllib2.urlopen(results_file_url)
- info = results_file.info()
- old_results = results_file.read()
- except urllib2.HTTPError, http_error:
- # A non-4xx status code means the bot is hosed for some reason
- # and we can't grab the results.json file off of it.
- if (http_error.code < 400 and http_error.code >= 500):
- error = http_error
- except urllib2.URLError, url_error:
- error = url_error
+ results_file_url = (self.URL_FOR_TEST_LIST_JSON %
+ (urllib2.quote(self._test_results_server),
+ urllib2.quote(self._builder_name),
+ self.RESULTS_FILENAME,
+ urllib2.quote(self._test_type)))
+
+ try:
+ results_file = urllib2.urlopen(results_file_url)
+ info = results_file.info()
+ old_results = results_file.read()
+ except urllib2.HTTPError, http_error:
+ # A non-4xx status code means the bot is hosed for some reason
+ # and we can't grab the results.json file off of it.
+ if (http_error.code < 400 and http_error.code >= 500):
+ error = http_error
+ except urllib2.URLError, url_error:
+ error = url_error
if old_results:
# Strip the prefix and suffix so we can get the actual JSON object.
@@ -490,7 +458,7 @@ class JSONResultsGeneratorBase(object):
int(time.time()),
self.TIME)
- def _insert_test_time_and_result(self, test_name, tests, incremental=False):
+ def _insert_test_time_and_result(self, test_name, tests):
""" Insert a test item with its results to the given tests dictionary.
Args:
@@ -514,11 +482,6 @@ class JSONResultsGeneratorBase(object):
else:
thisTest[self.TIMES] = [[1, time]]
- # Don't normalize the incremental results json because we need results
- # for tests that pass or have no data from current run.
- if not incremental:
- self._normalize_results_json(thisTest, test_name, tests)
-
def _convert_json_to_current_version(self, results_json):
"""If the JSON does not match the current version, converts it to the
current version and adds in the new version number.
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
index ce99765..95da8fb 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
@@ -94,7 +94,7 @@ class JSONGeneratorTest(unittest.TestCase):
failed_count_map = dict([(t, 1) for t in failed_tests])
# Test incremental json results
- incremental_json = generator.get_json(incremental=True)
+ incremental_json = generator.get_json()
self._verify_json_results(
tests_set,
test_timings,
@@ -106,33 +106,6 @@ class JSONGeneratorTest(unittest.TestCase):
incremental_json,
1)
- # Test aggregated json results
- generator.set_archived_results(self._json)
- json = generator.get_json(incremental=False)
- self._json = json
- self._num_runs += 1
- self._tests_set |= tests_set
- self._test_timings.update(test_timings)
- self._PASS_count += len(PASS_tests)
- self._DISABLED_count += len(DISABLED_tests)
- self._FLAKY_count += len(FLAKY_tests)
- self._fixable_count += len(DISABLED_tests | failed_tests)
-
- get = self._failed_count_map.get
- for test in failed_count_map.iterkeys():
- self._failed_count_map[test] = get(test, 0) + 1
-
- self._verify_json_results(
- self._tests_set,
- self._test_timings,
- self._failed_count_map,
- self._PASS_count,
- self._DISABLED_count,
- self._FLAKY_count,
- self._fixable_count,
- self._json,
- self._num_runs)
-
def _verify_json_results(self, tests_set, test_timings, failed_count_map,
PASS_count, DISABLED_count, FLAKY_count,
fixable_count,
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py
new file mode 100644
index 0000000..a0f252c
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker.py
@@ -0,0 +1,282 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Module for handling messages and concurrency for run-webkit-tests.
+
+This module implements a message broker that connects the manager
+(TestRunner2) to the workers: it provides a messaging abstraction and
+message loops (building on top of message_broker2), and handles starting
+workers by launching threads and/or processes depending on the
+requested configuration.
+
+There are a lot of classes and objects involved in a fully connected system.
+They interact more or less like:
+
+TestRunner2 --> _InlineManager ---> _InlineWorker <-> Worker
+ ^ \ / ^
+ | v v |
+ \-------------------- MessageBroker -------------/
+"""
+
+import logging
+import optparse
+import Queue
+import thread
+import threading
+import time
+
+
+# Handle Python < 2.6 where multiprocessing isn't available.
+#
+# _Multiprocessing_Process is needed so that _MultiProcessWorker
+# can be defined with or without multiprocessing.
+try:
+ import multiprocessing
+ _Multiprocessing_Process = multiprocessing.Process
+except ImportError:
+ multiprocessing = None
+ _Multiprocessing_Process = threading.Thread
+
+
+from webkitpy.layout_tests import port
+from webkitpy.layout_tests.layout_package import message_broker2
+
+
+_log = logging.getLogger(__name__)
+
+#
+# Topic names for Manager <-> Worker messaging
+#
+MANAGER_TOPIC = 'managers'
+ANY_WORKER_TOPIC = 'workers'
+
+
+def runtime_options():
+ """Return a list of optparse.Option objects for any runtime values used
+ by this module."""
+ options = [
+ optparse.make_option("--worker-model", action="store",
+ help=("controls worker model. Valid values are "
+ "'inline', 'threads', and 'processes'.")),
+ ]
+ return options
+
+
+def get(port, options, client, worker_class):
+ """Return a connection to a manager/worker message_broker
+
+ Args:
+ port - handle to layout_tests/port object for port-specific stuff
+ options - optparse argument for command-line options
+ client - message_broker2.BrokerClient implementation to dispatch
+ replies to.
+ worker_class - type of workers to create. This class must implement
+ the methods in AbstractWorker.
+ Returns:
+ A handle to an object that will talk to a message broker configured
+ for the normal manager/worker communication.
+ """
+ worker_model = options.worker_model
+ if worker_model == 'inline':
+ queue_class = Queue.Queue
+ manager_class = _InlineManager
+ elif worker_model == 'threads':
+ queue_class = Queue.Queue
+ manager_class = _ThreadedManager
+ elif worker_model == 'processes' and multiprocessing:
+ queue_class = multiprocessing.Queue
+ manager_class = _MultiProcessManager
+ else:
+ raise ValueError("unsupported value for --worker-model: %s" %
+ worker_model)
+
+ broker = message_broker2.Broker(options, queue_class)
+ return manager_class(broker, port, options, client, worker_class)
+
+
+class AbstractWorker(message_broker2.BrokerClient):
+ def __init__(self, broker_connection, worker_number, options):
+ """The constructor should be used to do any simple initialization
+ necessary, but should not do anything that creates data structures
+ that cannot be Pickled or sent across processes (like opening
+ files or sockets). Complex initialization should be done at the
+ start of the run() call.
+
+ Args:
+ broker_connection - handle to the BrokerConnection object creating
+ the worker and that can be used for messaging.
+ worker_number - identifier for this particular worker
+ options - command-line argument object from optparse"""
+
+ raise NotImplementedError
+
+ def run(self, port):
+ """Callback for the worker to start executing. Typically does any
+ remaining initialization and then calls broker_connection.run_message_loop()."""
+ raise NotImplementedError
+
+ def cancel(self):
+ """Called when possible to indicate to the worker to stop processing
+ messages and shut down. Note that workers may be stopped without this
+ method being called, so clients should not rely solely on this."""
+ raise NotImplementedError
+
+
+class _ManagerConnection(message_broker2.BrokerConnection):
+ def __init__(self, broker, options, client, worker_class):
+ """Base initialization for all Manager objects.
+
+ Args:
+ broker: handle to the message_broker2 object
+ options: command line options object
+ client: callback object (the caller)
+ worker_class: class object to use to create workers.
+ """
+ message_broker2.BrokerConnection.__init__(self, broker, client,
+ MANAGER_TOPIC, ANY_WORKER_TOPIC)
+ self._options = options
+ self._worker_class = worker_class
+
+ def start_worker(self, worker_number):
+ raise NotImplementedError
+
+
+class _InlineManager(_ManagerConnection):
+ def __init__(self, broker, port, options, client, worker_class):
+ _ManagerConnection.__init__(self, broker, options, client, worker_class)
+ self._port = port
+ self._inline_worker = None
+
+ def start_worker(self, worker_number):
+ self._inline_worker = _InlineWorkerConnection(self._broker, self._port,
+ self._client, self._worker_class, worker_number)
+ return self._inline_worker
+
+ def run_message_loop(self, delay_secs=None):
+ # Note that delay_secs is ignored in this case since we can't easily
+ # implement it.
+ self._inline_worker.run()
+ self._broker.run_all_pending(MANAGER_TOPIC, self._client)
+
+
+class _ThreadedManager(_ManagerConnection):
+ def __init__(self, broker, port, options, client, worker_class):
+ _ManagerConnection.__init__(self, broker, options, client, worker_class)
+ self._port = port
+
+ def start_worker(self, worker_number):
+ worker_connection = _ThreadedWorkerConnection(self._broker, self._port,
+ self._worker_class, worker_number)
+ worker_connection.start()
+ return worker_connection
+
+
+class _MultiProcessManager(_ManagerConnection):
+ def __init__(self, broker, port, options, client, worker_class):
+ # Note that this class does not keep a handle to the actual port
+ # object, because it isn't Picklable. Instead it keeps the port
+ # name and recreates the port in the child process from the name
+ # and options.
+ _ManagerConnection.__init__(self, broker, options, client, worker_class)
+ self._platform_name = port.real_name()
+
+ def start_worker(self, worker_number):
+ worker_connection = _MultiProcessWorkerConnection(self._broker, self._platform_name,
+ self._worker_class, worker_number, self._options)
+ worker_connection.start()
+ return worker_connection
+
+
+class _WorkerConnection(message_broker2.BrokerConnection):
+ def __init__(self, broker, worker_class, worker_number, options):
+ self._client = worker_class(self, worker_number, options)
+ self.name = self._client.name()
+ message_broker2.BrokerConnection.__init__(self, broker, self._client,
+ ANY_WORKER_TOPIC, MANAGER_TOPIC)
+
+ def yield_to_broker(self):
+ pass
+
+
+class _InlineWorkerConnection(_WorkerConnection):
+ def __init__(self, broker, port, manager_client, worker_class, worker_number):
+ _WorkerConnection.__init__(self, broker, worker_class, worker_number, port._options)
+ self._port = port
+ self._manager_client = manager_client
+
+ def run(self):
+ self._client.run(self._port)
+
+ def yield_to_broker(self):
+ self._broker.run_all_pending(MANAGER_TOPIC, self._manager_client)
+
+
+class _Thread(threading.Thread):
+ def __init__(self, worker_connection, port, client):
+ threading.Thread.__init__(self)
+ self._worker_connection = worker_connection
+ self._port = port
+ self._client = client
+
+ def run(self):
+ # FIXME: We can remove this once everyone is on 2.6.
+ if not hasattr(self, 'ident'):
+ self.ident = thread.get_ident()
+ self._client.run(self._port)
+
+
+class _ThreadedWorkerConnection(_WorkerConnection):
+ def __init__(self, broker, port, worker_class, worker_number):
+ _WorkerConnection.__init__(self, broker, worker_class, worker_number, port._options)
+ self._thread = _Thread(self, port, self._client)
+
+ def start(self):
+ self._thread.start()
+
+
+class _Process(_Multiprocessing_Process):
+ def __init__(self, worker_connection, platform_name, options, client):
+ _Multiprocessing_Process.__init__(self)
+ self._worker_connection = worker_connection
+ self._platform_name = platform_name
+ self._options = options
+ self._client = client
+
+ def run(self):
+ logging.basicConfig()
+ port_obj = port.get(self._platform_name, self._options)
+ self._client.run(port_obj)
+
+
+class _MultiProcessWorkerConnection(_WorkerConnection):
+ def __init__(self, broker, platform_name, worker_class, worker_number, options):
+ _WorkerConnection.__init__(self, broker, worker_class, worker_number, options)
+ self._proc = _Process(self, platform_name, options, self._client)
+
+ def start(self):
+ self._proc.start()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py
new file mode 100644
index 0000000..ffbe081
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/manager_worker_broker_unittest.py
@@ -0,0 +1,227 @@
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import optparse
+import Queue
+import sys
+import unittest
+
+try:
+ import multiprocessing
+except ImportError:
+ multiprocessing = None
+
+
+from webkitpy.common.system import outputcapture
+
+from webkitpy.layout_tests import port
+from webkitpy.layout_tests.layout_package import manager_worker_broker
+from webkitpy.layout_tests.layout_package import message_broker2
+
+
+class TestWorker(manager_worker_broker.AbstractWorker):
+ def __init__(self, broker_connection, worker_number, options):
+ self._broker_connection = broker_connection
+ self._options = options
+ self._worker_number = worker_number
+ self._name = 'TestWorker/%d' % worker_number
+ self._stopped = False
+
+ def handle_stop(self, src):
+ self._stopped = True
+
+ def handle_test(self, src, an_int, a_str):
+ assert an_int == 1
+ assert a_str == "hello, world"
+ self._broker_connection.post_message('test', 2, 'hi, everybody')
+
+ def is_done(self):
+ return self._stopped
+
+ def name(self):
+ return self._name
+
+ def start(self):
+ pass
+
+ def run(self, port):
+ try:
+ self._broker_connection.run_message_loop()
+ self._broker_connection.yield_to_broker()
+ self._broker_connection.post_message('done')
+ except Exception, e:
+ self._broker_connection.post_message('exception', (type(e), str(e), None))
+
+
+def get_options(worker_model):
+ option_list = manager_worker_broker.runtime_options()
+ parser = optparse.OptionParser(option_list=option_list)
+ options, args = parser.parse_args(args=['--worker-model', worker_model])
+ return options
+
+
+def make_broker(manager, worker_model):
+ options = get_options(worker_model)
+ return manager_worker_broker.get(port.get("test"), options, manager,
+ TestWorker)
+
+
+class FunctionTests(unittest.TestCase):
+ def test_get__inline(self):
+ self.assertTrue(make_broker(self, 'inline') is not None)
+
+ def test_get__threads(self):
+ self.assertTrue(make_broker(self, 'threads') is not None)
+
+ def test_get__processes(self):
+ if multiprocessing:
+ self.assertTrue(make_broker(self, 'processes') is not None)
+ else:
+ self.assertRaises(ValueError, make_broker, self, 'processes')
+
+ def test_get__unknown(self):
+ self.assertRaises(ValueError, make_broker, self, 'unknown')
+
+
+class _TestsMixin(object):
+ """Mixin class that implements a series of tests to enforce the
+ contract all implementations must follow."""
+
+ #
+ # Methods to implement the Manager side of the ClientInterface
+ #
+ def name(self):
+ return 'Tester'
+
+ def is_done(self):
+ return self._done
+
+ #
+ # Handlers for the messages the TestWorker may send.
+ #
+ def handle_done(self, src):
+ self._done = True
+
+ def handle_test(self, src, an_int, a_str):
+ self._an_int = an_int
+ self._a_str = a_str
+
+ def handle_exception(self, src, exc_info):
+ self._exception = exc_info
+ self._done = True
+
+ #
+ # Testing helper methods
+ #
+ def setUp(self):
+ self._an_int = None
+ self._a_str = None
+ self._broker = None
+ self._done = False
+ self._exception = None
+ self._worker_model = None
+
+ def make_broker(self):
+ self._broker = make_broker(self, self._worker_model)
+
+ #
+ # Actual unit tests
+ #
+ def test_done(self):
+ if not self._worker_model:
+ return
+ self.make_broker()
+ worker = self._broker.start_worker(0)
+ self._broker.post_message('test', 1, 'hello, world')
+ self._broker.post_message('stop')
+ self._broker.run_message_loop()
+ self.assertTrue(self.is_done())
+ self.assertEqual(self._an_int, 2)
+ self.assertEqual(self._a_str, 'hi, everybody')
+
+ def test_unknown_message(self):
+ if not self._worker_model:
+ return
+ self.make_broker()
+ worker = self._broker.start_worker(0)
+ self._broker.post_message('unknown')
+ self._broker.run_message_loop()
+
+ self.assertTrue(self.is_done())
+ self.assertEquals(self._exception[0], ValueError)
+ self.assertEquals(self._exception[1],
+ "TestWorker/0: received message 'unknown' it couldn't handle")
+
+
+class InlineBrokerTests(_TestsMixin, unittest.TestCase):
+ def setUp(self):
+ _TestsMixin.setUp(self)
+ self._worker_model = 'inline'
+
+
+class MultiProcessBrokerTests(_TestsMixin, unittest.TestCase):
+ def setUp(self):
+ _TestsMixin.setUp(self)
+ if multiprocessing:
+ self._worker_model = 'processes'
+ else:
+ self._worker_model = None
+
+ def queue(self):
+ return multiprocessing.Queue()
+
+
+class ThreadedBrokerTests(_TestsMixin, unittest.TestCase):
+ def setUp(self):
+ _TestsMixin.setUp(self)
+ self._worker_model = 'threads'
+
+
+class FunctionsTest(unittest.TestCase):
+ def test_runtime_options(self):
+ option_list = manager_worker_broker.runtime_options()
+ parser = optparse.OptionParser(option_list=option_list)
+ options, args = parser.parse_args([])
+ self.assertTrue(options)
+
+
+class InterfaceTest(unittest.TestCase):
+ # These tests mostly exist to pacify coverage.
+
+ # FIXME: There must be a better way to do this and also verify
+ # that classes do implement every abstract method in an interface.
+ def test_managerconnection_is_abstract(self):
+ # Test that all the base class methods are abstract and have the
+ # signature we expect.
+ broker = make_broker(self, 'inline')
+ obj = manager_worker_broker._ManagerConnection(broker._broker, None, self, None)
+ self.assertRaises(NotImplementedError, obj.start_worker, 0)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
index 481c617..66a7aa8 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
@@ -41,9 +41,9 @@ requested configuration.
"""
import logging
-import sys
import time
-import traceback
+
+from webkitpy.common.system import stack_utils
import dump_render_tree_thread
@@ -137,6 +137,7 @@ class MultiThreadedBroker(WorkerMessageBroker):
def run_message_loop(self):
threads = self._threads()
+ wedged_threads = set()
# Loop through all the threads waiting for them to finish.
some_thread_is_alive = True
@@ -145,11 +146,15 @@ class MultiThreadedBroker(WorkerMessageBroker):
t = time.time()
for thread in threads:
if thread.isAlive():
+ if thread in wedged_threads:
+ continue
+
some_thread_is_alive = True
next_timeout = thread.next_timeout()
if next_timeout and t > next_timeout:
- log_wedged_worker(thread.getName(), thread.id())
+ stack_utils.log_thread_state(_log.error, thread.getName(), thread.id(), "is wedged")
thread.clear_next_timeout()
+ wedged_threads.add(thread)
exception_info = thread.exception_info()
if exception_info is not None:
@@ -164,34 +169,10 @@ class MultiThreadedBroker(WorkerMessageBroker):
if some_thread_is_alive:
time.sleep(0.01)
+ if wedged_threads:
+ _log.warning("All remaining threads are wedged, bailing out.")
+
def cancel_workers(self):
threads = self._threads()
for thread in threads:
thread.cancel()
-
-
-def log_wedged_worker(name, id):
- """Log information about the given worker state."""
- stack = _find_thread_stack(id)
- assert(stack is not None)
- _log.error("")
- _log.error("%s (tid %d) is wedged" % (name, id))
- _log_stack(stack)
- _log.error("")
-
-
-def _find_thread_stack(id):
- """Returns a stack object that can be used to dump a stack trace for
- the given thread id (or None if the id is not found)."""
- for thread_id, stack in sys._current_frames().items():
- if thread_id == id:
- return stack
- return None
-
-
-def _log_stack(stack):
- """Log a stack trace to log.error()."""
- for filename, lineno, name, line in traceback.extract_stack(stack):
- _log.error('File: "%s", line %d, in %s' % (filename, lineno, name))
- if line:
- _log.error(' %s' % line.strip())
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2.py
new file mode 100644
index 0000000..ec3c970
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2.py
@@ -0,0 +1,196 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Module for handling messaging for run-webkit-tests.
+
+This module implements a simple message broker abstraction that will be
+used to coordinate messages between the main run-webkit-tests thread
+(aka TestRunner) and the individual worker threads (previously known as
+dump_render_tree_threads).
+
+The broker simply distributes messages onto topics (named queues); the actual
+queues themselves are provided by the caller, as the queue's implementation
+requirements varies vary depending on the desired concurrency model
+(none/threads/processes).
+
+In order for shared-nothing messaging between processing to be possible,
+Messages must be picklable.
+
+The module defines one interface and two classes. Callers of this package
+must implement the BrokerClient interface, and most callers will create
+BrokerConnections as well as Brokers.
+
+The classes relate to each other as:
+
+ BrokerClient ------> BrokerConnection
+ ^ |
+ | v
+ \---------------- Broker
+
+(The BrokerClient never calls broker directly after it is created, only
+BrokerConnection. BrokerConnection passes a reference to BrokerClient to
+Broker, and Broker only invokes that reference, never talking directly to
+BrokerConnection).
+"""
+
+import cPickle
+import logging
+import Queue
+import time
+
+
+_log = logging.getLogger(__name__)
+
+
+class BrokerClient(object):
+ """Abstract base class / interface that all message broker clients must
+ implement. In addition to the methods below, by convention clients
+ implement routines of the signature type
+
+ handle_MESSAGE_NAME(self, src, ...):
+
+ where MESSAGE_NAME matches the string passed to post_message(), and
+ src indicates the name of the sender. If the message contains values in
+ the message body, those will be provided as optparams."""
+
+ def __init__(self, *optargs, **kwargs):
+ raise NotImplementedError
+
+ def is_done(self):
+ """Called from inside run_message_loop() to indicate whether to exit."""
+ raise NotImplementedError
+
+ def name(self):
+ """Return a name that identifies the client."""
+ raise NotImplementedError
+
+
+class Broker(object):
+ """Brokers provide the basic model of a set of topics. Clients can post a
+ message to any topic using post_message(), and can process messages on one
+ topic at a time using run_message_loop()."""
+
+ def __init__(self, options, queue_maker):
+ """Args:
+ options: a runtime option class from optparse
+ queue_maker: a factory method that returns objects implementing a
+ Queue interface (put()/get()).
+ """
+ self._options = options
+ self._queue_maker = queue_maker
+ self._topics = {}
+
+ def add_topic(self, topic_name):
+ if topic_name not in self._topics:
+ self._topics[topic_name] = self._queue_maker()
+
+ def _get_queue_for_topic(self, topic_name):
+ return self._topics[topic_name]
+
+ def post_message(self, client, topic_name, message_name, *message_args):
+ """Post a message to the appropriate topic name.
+
+ Messages have a name and a tuple of optional arguments. Both must be picklable."""
+ message = _Message(client.name(), topic_name, message_name, message_args)
+ queue = self._get_queue_for_topic(topic_name)
+ queue.put(_Message.dumps(message))
+
+ def run_message_loop(self, topic_name, client, delay_secs=None):
+ """Loop processing messages until client.is_done() or delay passes.
+
+ To run indefinitely, set delay_secs to None."""
+ assert delay_secs is None or delay_secs > 0
+ self._run_loop(topic_name, client, block=True, delay_secs=delay_secs)
+
+ def run_all_pending(self, topic_name, client):
+ """Process messages until client.is_done() or caller would block."""
+ self._run_loop(topic_name, client, block=False, delay_secs=None)
+
+ def _run_loop(self, topic_name, client, block, delay_secs):
+ queue = self._get_queue_for_topic(topic_name)
+ while not client.is_done():
+ try:
+ s = queue.get(block, delay_secs)
+ except Queue.Empty:
+ return
+ msg = _Message.loads(s)
+ self._dispatch_message(msg, client)
+
+ def _dispatch_message(self, message, client):
+ if not hasattr(client, 'handle_' + message.name):
+ raise ValueError(
+ "%s: received message '%s' it couldn't handle" %
+ (client.name(), message.name))
+ optargs = message.args
+ message_handler = getattr(client, 'handle_' + message.name)
+ message_handler(message.src, *optargs)
+
+
+class _Message(object):
+ @staticmethod
+ def loads(str):
+ obj = cPickle.loads(str)
+ assert(isinstance(obj, _Message))
+ return obj
+
+ def __init__(self, src, topic_name, message_name, message_args):
+ self.src = src
+ self.topic_name = topic_name
+ self.name = message_name
+ self.args = message_args
+
+ def dumps(self):
+ return cPickle.dumps(self)
+
+ def __repr__(self):
+ return ("_Message(from='%s', topic_name='%s', message_name='%s')" %
+ (self.src, self.topic_name, self.name))
+
+
+class BrokerConnection(object):
+ """BrokerConnection provides a connection-oriented facade on top of a
+ Broker, so that callers don't have to repeatedly pass the same topic
+ names over and over."""
+
+ def __init__(self, broker, client, run_topic, post_topic):
+ """Create a BrokerConnection on top of a Broker. Note that the Broker
+ is passed in rather than created so that a single Broker can be used
+ by multiple BrokerConnections."""
+ self._broker = broker
+ self._client = client
+ self._post_topic = post_topic
+ self._run_topic = run_topic
+ broker.add_topic(run_topic)
+ broker.add_topic(post_topic)
+
+ def run_message_loop(self, delay_secs=None):
+ self._broker.run_message_loop(self._run_topic, self._client, delay_secs)
+
+ def post_message(self, message_name, *message_args):
+ self._broker.post_message(self._client, self._post_topic,
+ message_name, *message_args)
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py
new file mode 100644
index 0000000..0e0a88d
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker2_unittest.py
@@ -0,0 +1,83 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import unittest
+
+from webkitpy.layout_tests.layout_package import message_broker2
+
+# This file exists to test routines that aren't necessarily covered elsewhere;
+# most of the testing of message_broker2 will be covered under the tests in
+# the manager_worker_broker module.
+
+
+class MessageTest(unittest.TestCase):
+ def test__no_body(self):
+ msg = message_broker2._Message('src', 'topic_name', 'message_name', None)
+ self.assertTrue(repr(msg))
+ s = msg.dumps()
+ new_msg = message_broker2._Message.loads(s)
+ self.assertEqual(new_msg.name, 'message_name')
+ self.assertEqual(new_msg.args, None)
+ self.assertEqual(new_msg.topic_name, 'topic_name')
+ self.assertEqual(new_msg.src, 'src')
+
+ def test__body(self):
+ msg = message_broker2._Message('src', 'topic_name', 'message_name',
+ ('body', 0))
+ self.assertTrue(repr(msg))
+ s = msg.dumps()
+ new_msg = message_broker2._Message.loads(s)
+ self.assertEqual(new_msg.name, 'message_name')
+ self.assertEqual(new_msg.args, ('body', 0))
+ self.assertEqual(new_msg.topic_name, 'topic_name')
+ self.assertEqual(new_msg.src, 'src')
+
+
+class InterfaceTest(unittest.TestCase):
+ # These tests mostly exist to pacify coverage.
+
+ # FIXME: There must be a better way to do this and also verify
+ # that classes do implement every abstract method in an interface.
+
+ def test_brokerclient_is_abstract(self):
+ # Test that we can't create an instance directly.
+ self.assertRaises(NotImplementedError, message_broker2.BrokerClient)
+
+ class TestClient(message_broker2.BrokerClient):
+ def __init__(self):
+ pass
+
+ # Test that all the base class methods are abstract and have the
+ # signature we expect.
+ obj = TestClient()
+ self.assertRaises(NotImplementedError, obj.is_done)
+ self.assertRaises(NotImplementedError, obj.name)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
index 6f04fd3..f4cb5d2 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
@@ -84,7 +84,6 @@ class TestThread(threading.Thread):
def next_timeout(self):
if self._timeout:
- self._timeout_queue.put('done')
return time.time() - 10
return time.time()
@@ -125,7 +124,12 @@ class MultiThreadedBrokerTest(unittest.TestCase):
child_thread.start()
started_msg = starting_queue.get()
stopping_queue.put(msg)
- return broker.run_message_loop()
+ res = broker.run_message_loop()
+ if msg == 'Timeout':
+ child_thread._timeout_queue.put('done')
+ child_thread.join(1.0)
+ self.assertFalse(child_thread.isAlive())
+ return res
def test_basic(self):
interrupted = self.run_one_thread('')
@@ -135,48 +139,22 @@ class MultiThreadedBrokerTest(unittest.TestCase):
self.assertRaises(KeyboardInterrupt, self.run_one_thread, 'KeyboardInterrupt')
def test_timeout(self):
+ # Because the timeout shows up as a wedged thread, this also tests
+ # log_wedged_worker().
oc = outputcapture.OutputCapture()
- oc.capture_output()
- interrupted = self.run_one_thread('Timeout')
- self.assertFalse(interrupted)
- oc.restore_output()
-
- def test_exception(self):
- self.assertRaises(ValueError, self.run_one_thread, 'Exception')
-
-
-class Test(unittest.TestCase):
- def test_find_thread_stack_found(self):
- id, stack = sys._current_frames().items()[0]
- found_stack = message_broker._find_thread_stack(id)
- self.assertNotEqual(found_stack, None)
-
- def test_find_thread_stack_not_found(self):
- found_stack = message_broker._find_thread_stack(0)
- self.assertEqual(found_stack, None)
-
- def test_log_wedged_worker(self):
- oc = outputcapture.OutputCapture()
- oc.capture_output()
+ stdout, stderr = oc.capture_output()
logger = message_broker._log
astream = array_stream.ArrayStream()
handler = TestHandler(astream)
logger.addHandler(handler)
+ interrupted = self.run_one_thread('Timeout')
+ stdout, stderr = oc.restore_output()
+ self.assertFalse(interrupted)
+ logger.handlers.remove(handler)
+ self.assertTrue('All remaining threads are wedged, bailing out.' in astream.get())
- starting_queue = Queue.Queue()
- stopping_queue = Queue.Queue()
- child_thread = TestThread(starting_queue, stopping_queue)
- child_thread.start()
- msg = starting_queue.get()
-
- message_broker.log_wedged_worker(child_thread.getName(),
- child_thread.id())
- stopping_queue.put('')
- child_thread.join(timeout=1.0)
-
- self.assertFalse(astream.empty())
- self.assertFalse(child_thread.isAlive())
- oc.restore_output()
+ def test_exception(self):
+ self.assertRaises(ValueError, self.run_one_thread, 'Exception')
if __name__ == '__main__':
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py
index 12a786e..7ab6da8 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py
@@ -144,7 +144,7 @@ class Testprinter(unittest.TestCase):
test in tests]
expectations = test_expectations.TestExpectations(
self._port, test_paths, expectations_str,
- self._port.test_platform_name(), is_debug_mode=False,
+ self._port.test_configuration(),
is_lint_mode=False)
rs = result_summary.ResultSummary(expectations, test_paths)
@@ -363,7 +363,7 @@ class Testprinter(unittest.TestCase):
def test_print_progress__detailed(self):
tests = ['passes/text.html', 'failures/expected/timeout.html',
'failures/expected/crash.html']
- expectations = 'failures/expected/timeout.html = TIMEOUT'
+ expectations = 'BUGX : failures/expected/timeout.html = TIMEOUT'
# first, test that it is disabled properly
# should still print one-line-progress
@@ -569,8 +569,8 @@ class Testprinter(unittest.TestCase):
self.assertFalse(out.empty())
expectations = """
-failures/expected/crash.html = CRASH
-failures/expected/timeout.html = TIMEOUT
+BUGX : failures/expected/crash.html = CRASH
+BUGX : failures/expected/timeout.html = TIMEOUT
"""
err.reset()
out.reset()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py
new file mode 100644
index 0000000..96e3ee6
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py
@@ -0,0 +1,322 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import logging
+import threading
+import time
+
+from webkitpy.layout_tests.port import base
+
+from webkitpy.layout_tests.test_types import text_diff
+from webkitpy.layout_tests.test_types import image_diff
+
+from webkitpy.layout_tests.layout_package import test_failures
+from webkitpy.layout_tests.layout_package.test_results import TestResult
+
+
+_log = logging.getLogger(__name__)
+
+
+class ExpectedDriverOutput:
+ """Groups information about an expected driver output."""
+ def __init__(self, text, image, image_hash):
+ self.text = text
+ self.image = image
+ self.image_hash = image_hash
+
+
+class SingleTestRunner:
+
+ def __init__(self, options, port, worker_name, worker_number):
+ self._options = options
+ self._port = port
+ self._worker_name = worker_name
+ self._worker_number = worker_number
+ self._driver = None
+ self._test_types = []
+ self.has_http_lock = False
+ for cls in self._get_test_type_classes():
+ self._test_types.append(cls(self._port,
+ self._options.results_directory))
+
+ def cleanup(self):
+ self.kill_dump_render_tree()
+ if self.has_http_lock:
+ self.stop_servers_with_lock()
+
+ def _get_test_type_classes(self):
+ classes = [text_diff.TestTextDiff]
+ if self._options.pixel_tests:
+ classes.append(image_diff.ImageDiff)
+ return classes
+
+ def timeout(self, test_input):
+ # We calculate how long we expect the test to take.
+ #
+ # The DumpRenderTree watchdog uses 2.5x the timeout; we want to be
+ # larger than that. We also add a little more padding if we're
+ # running tests in a separate thread.
+ #
+ # Note that we need to convert the test timeout from a
+ # string value in milliseconds to a float for Python.
+ driver_timeout_sec = 3.0 * float(test_input.timeout) / 1000.0
+ if not self._options.run_singly:
+ return driver_timeout_sec
+
+ thread_padding_sec = 1.0
+ thread_timeout_sec = driver_timeout_sec + thread_padding_sec
+ return thread_timeout_sec
+
+ def run_test(self, test_input, timeout):
+ if self._options.run_singly:
+ return self._run_test_in_another_thread(test_input, timeout)
+ else:
+ return self._run_test_in_this_thread(test_input)
+ return result
+
+ def _run_test_in_another_thread(self, test_input, thread_timeout_sec):
+ """Run a test in a separate thread, enforcing a hard time limit.
+
+ Since we can only detect the termination of a thread, not any internal
+ state or progress, we can only run per-test timeouts when running test
+ files singly.
+
+ Args:
+ test_input: Object containing the test filename and timeout
+ thread_timeout_sec: time to wait before killing the driver process.
+ Returns:
+ A TestResult
+ """
+ worker = self
+ result = None
+
+ driver = worker._port.create_driver(worker._worker_number)
+ driver.start()
+
+ class SingleTestThread(threading.Thread):
+ def run(self):
+ result = worker.run(test_input, driver)
+
+ thread = SingleTestThread()
+ thread.start()
+ thread.join(thread_timeout_sec)
+ if thread.isAlive():
+ # If join() returned with the thread still running, the
+ # DumpRenderTree is completely hung and there's nothing
+ # more we can do with it. We have to kill all the
+ # DumpRenderTrees to free it up. If we're running more than
+ # one DumpRenderTree thread, we'll end up killing the other
+ # DumpRenderTrees too, introducing spurious crashes. We accept
+ # that tradeoff in order to avoid losing the rest of this
+ # thread's results.
+ _log.error('Test thread hung: killing all DumpRenderTrees')
+
+ driver.stop()
+
+ if not result:
+ result = TestResult(test_input.filename, failures=[],
+ test_run_time=0, total_time_for_all_diffs=0, time_for_diffs={})
+ return result
+
+ def _run_test_in_this_thread(self, test_input):
+ """Run a single test file using a shared DumpRenderTree process.
+
+ Args:
+ test_input: Object containing the test filename, uri and timeout
+
+ Returns: a TestResult object.
+ """
+ # poll() is not threadsafe and can throw OSError due to:
+ # http://bugs.python.org/issue1731717
+ if not self._driver or self._driver.poll() is not None:
+ self._driver = self._port.create_driver(self._worker_number)
+ self._driver.start()
+ return self._run(self._driver, test_input)
+
+ def _expected_driver_output(self):
+ return ExpectedDriverOutput(self._port.expected_text(self._filename),
+ self._port.expected_image(self._filename),
+ self._port.expected_checksum(self._filename))
+
+ def _should_fetch_expected_checksum(self):
+ return (self._options.pixel_tests and
+ not (self._options.new_baseline or self._options.reset_results))
+
+ def _driver_input(self, test_input):
+ self._filename = test_input.filename
+ self._timeout = test_input.timeout
+ self._testname = self._port.relative_test_filename(test_input.filename)
+
+ # The image hash is used to avoid doing an image dump if the
+ # checksums match, so it should be set to a blank value if we
+ # are generating a new baseline. (Otherwise, an image from a
+ # previous run will be copied into the baseline."""
+ image_hash = None
+ if self._should_fetch_expected_checksum():
+ image_hash = self._port.expected_checksum(self._filename)
+ return base.DriverInput(self._filename, self._timeout, image_hash)
+
+ def _run(self, driver, test_input):
+ if self._options.new_baseline or self._options.reset_results:
+ return self._run_rebaseline(driver, test_input)
+ return self._run_compare_test(driver, test_input)
+
+ def _run_compare_test(self, driver, test_input):
+ driver_output = self._driver.run_test(self._driver_input(test_input))
+ return self._process_output(driver_output)
+
+ def _run_rebaseline(self, driver, test_input):
+ driver_output = self._driver.run_test(self._driver_input(test_input))
+ failures = self._handle_error(driver_output)
+ # FIXME: It the test crashed or timed out, it might be bettter to avoid
+ # to write new baselines.
+ self._save_baselines(driver_output)
+ return TestResult(self._filename, failures, driver_output.test_time)
+
+ def _save_baselines(self, driver_output):
+ # Although all test_shell/DumpRenderTree output should be utf-8,
+ # we do not ever decode it inside run-webkit-tests. For some tests
+ # DumpRenderTree may not output utf-8 text (e.g. webarchives).
+ self._save_baseline_data(driver_output.text, ".txt",
+ generate_new_baseline=self._options.new_baseline)
+ if self._options.pixel_tests and driver_output.image_hash:
+ self._save_baseline_data(driver_output.image, ".png",
+ generate_new_baseline=self._options.new_baseline)
+ self._save_baseline_data(driver_output.image_hash, ".checksum",
+ generate_new_baseline=self._options.new_baseline)
+
+ def _save_baseline_data(self, data, modifier, generate_new_baseline=True):
+ """Saves a new baseline file into the port's baseline directory.
+
+ The file will be named simply "<test>-expected<modifier>", suitable for
+ use as the expected results in a later run.
+
+ Args:
+ data: result to be saved as the new baseline
+ modifier: type of the result file, e.g. ".txt" or ".png"
+ generate_new_baseline: whether to enerate a new, platform-specific
+ baseline, or update the existing one
+ """
+
+ port = self._port
+ fs = port._filesystem
+ if generate_new_baseline:
+ relative_dir = fs.dirname(self._testname)
+ baseline_path = port.baseline_path()
+ output_dir = fs.join(baseline_path, relative_dir)
+ output_file = fs.basename(fs.splitext(self._filename)[0] +
+ "-expected" + modifier)
+ fs.maybe_make_directory(output_dir)
+ output_path = fs.join(output_dir, output_file)
+ _log.debug('writing new baseline result "%s"' % (output_path))
+ else:
+ output_path = port.expected_filename(self._filename, modifier)
+ _log.debug('resetting baseline result "%s"' % output_path)
+
+ port.update_baseline(output_path, data)
+
+ def _handle_error(self, driver_output):
+ failures = []
+ fs = self._port._filesystem
+ if driver_output.timeout:
+ failures.append(test_failures.FailureTimeout())
+ if driver_output.crash:
+ failures.append(test_failures.FailureCrash())
+ _log.debug("%s Stacktrace for %s:\n%s" % (self._worker_name, self._testname,
+ driver_output.error))
+ stack_filename = fs.join(self._options.results_directory, self._testname)
+ stack_filename = fs.splitext(stack_filename)[0] + "-stack.txt"
+ fs.maybe_make_directory(fs.dirname(stack_filename))
+ fs.write_text_file(stack_filename, driver_output.error)
+ elif driver_output.error:
+ _log.debug("%s %s output stderr lines:\n%s" % (self._worker_name, self._testname,
+ driver_output.error))
+ return failures
+
+ def _run_test(self):
+ driver_output = self._driver.run_test(self._driver_input())
+ return self._process_output(driver_output)
+
+ def _process_output(self, driver_output):
+ """Receives the output from a DumpRenderTree process, subjects it to a
+ number of tests, and returns a list of failure types the test produced.
+ Args:
+ driver_output: a DriverOutput object containing the output from the driver
+
+ Returns: a TestResult object
+ """
+ fs = self._port._filesystem
+ failures = self._handle_error(driver_output)
+ expected_driver_output = self._expected_driver_output()
+
+ # Check the output and save the results.
+ start_time = time.time()
+ time_for_diffs = {}
+ for test_type in self._test_types:
+ start_diff_time = time.time()
+ new_failures = test_type.compare_output(
+ self._port, self._filename, self._options, driver_output,
+ expected_driver_output)
+ # Don't add any more failures if we already have a crash, so we don't
+ # double-report those tests. We do double-report for timeouts since
+ # we still want to see the text and image output.
+ if not driver_output.crash:
+ failures.extend(new_failures)
+ time_for_diffs[test_type.__class__.__name__] = (
+ time.time() - start_diff_time)
+
+ total_time_for_all_diffs = time.time() - start_diff_time
+ return TestResult(self._filename, failures, driver_output.test_time,
+ total_time_for_all_diffs, time_for_diffs)
+
+ def start_servers_with_lock(self):
+ _log.debug('Acquiring http lock ...')
+ self._port.acquire_http_lock()
+ _log.debug('Starting HTTP server ...')
+ self._port.start_http_server()
+ _log.debug('Starting WebSocket server ...')
+ self._port.start_websocket_server()
+ self.has_http_lock = True
+
+ def stop_servers_with_lock(self):
+ """Stop the servers and release http lock."""
+ if self.has_http_lock:
+ _log.debug('Stopping HTTP server ...')
+ self._port.stop_http_server()
+ _log.debug('Stopping WebSocket server ...')
+ self._port.stop_websocket_server()
+ _log.debug('Releasing server lock ...')
+ self._port.release_http_lock()
+ self.has_http_lock = False
+
+ def kill_dump_render_tree(self):
+ """Kill the DumpRenderTree process if it's running."""
+ if self._driver:
+ self._driver.stop()
+ self._driver = None
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
index 806b663..494395a 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
@@ -31,6 +31,7 @@
for layout tests.
"""
+import itertools
import logging
import re
@@ -84,18 +85,16 @@ def remove_pixel_failures(expected_results):
class TestExpectations:
TEST_LIST = "test_expectations.txt"
- def __init__(self, port, tests, expectations, test_platform_name,
- is_debug_mode, is_lint_mode, overrides=None):
+ def __init__(self, port, tests, expectations, test_config,
+ is_lint_mode, overrides=None):
"""Loads and parses the test expectations given in the string.
Args:
port: handle to object containing platform-specific functionality
- test: list of all of the test files
+ tests: list of all of the test files
expectations: test expectations as a string
- test_platform_name: name of the platform to match expectations
- against. Note that this may be different than
- port.test_platform_name() when is_lint_mode is True.
- is_debug_mode: whether to use the DEBUG or RELEASE modifiers
- in the expectations
+ test_config: specific values to check against when
+ parsing the file (usually port.test_config(),
+ but may be different when linting or doing other things).
is_lint_mode: If True, just parse the expectations string
looking for errors.
overrides: test expectations that are allowed to override any
@@ -104,7 +103,7 @@ class TestExpectations:
and downstream expectations).
"""
self._expected_failures = TestExpectationsFile(port, expectations,
- tests, test_platform_name, is_debug_mode, is_lint_mode,
+ tests, test_config, is_lint_mode,
overrides=overrides)
# TODO(ojan): Allow for removing skipped tests when getting the list of
@@ -197,7 +196,7 @@ class ParseError(Exception):
return '\n'.join(map(str, self.errors))
def __repr__(self):
- return 'ParseError(fatal=%s, errors=%s)' % (fatal, errors)
+ return 'ParseError(fatal=%s, errors=%s)' % (self.fatal, self.errors)
class ModifiersAndExpectations:
@@ -302,29 +301,15 @@ class TestExpectationsFile:
'fail': FAIL,
'flaky': FLAKY}
- def __init__(self, port, expectations, full_test_list, test_platform_name,
- is_debug_mode, is_lint_mode, overrides=None):
- """
- expectations: Contents of the expectations file
- full_test_list: The list of all tests to be run pending processing of
- the expections for those tests.
- test_platform_name: name of the platform to match expectations
- against. Note that this may be different than
- port.test_platform_name() when is_lint_mode is True.
- is_debug_mode: Whether we testing a test_shell built debug mode.
- is_lint_mode: Whether this is just linting test_expecatations.txt.
- overrides: test expectations that are allowed to override any
- entries in |expectations|. This is used by callers
- that need to manage two sets of expectations (e.g., upstream
- and downstream expectations).
- """
+ def __init__(self, port, expectations, full_test_list,
+ test_config, is_lint_mode, overrides=None):
+ # See argument documentation in TestExpectation(), above.
self._port = port
self._fs = port._filesystem
self._expectations = expectations
self._full_test_list = full_test_list
- self._test_platform_name = test_platform_name
- self._is_debug_mode = is_debug_mode
+ self._test_config = test_config
self._is_lint_mode = is_lint_mode
self._overrides = overrides
self._errors = []
@@ -332,7 +317,9 @@ class TestExpectationsFile:
# Maps relative test paths as listed in the expectations file to a
# list of maps containing modifiers and expectations for each time
- # the test is listed in the expectations file.
+ # the test is listed in the expectations file. We use this to
+ # keep a representation of the entire list of expectations, even
+ # invalid ones.
self._all_expectations = {}
# Maps a test to its list of expectations.
@@ -345,7 +332,8 @@ class TestExpectationsFile:
# the options minus any bug or platform strings
self._test_to_modifiers = {}
- # Maps a test to the base path that it was listed with in the list.
+ # Maps a test to the base path that it was listed with in the list and
+ # the number of matches that base path had.
self._test_list_paths = {}
self._modifier_to_tests = self._dict_of_sets(self.MODIFIERS)
@@ -372,13 +360,7 @@ class TestExpectationsFile:
def _handle_any_read_errors(self):
if len(self._errors) or len(self._non_fatal_errors):
- if self._is_debug_mode:
- build_type = 'DEBUG'
- else:
- build_type = 'RELEASE'
- _log.error('')
- _log.error("FAILURES FOR PLATFORM: %s, BUILD_TYPE: %s" %
- (self._test_platform_name.upper(), build_type))
+ _log.error("FAILURES FOR %s" % str(self._test_config))
for error in self._errors:
_log.error(error)
@@ -394,11 +376,12 @@ class TestExpectationsFile:
expectations = set([PASS])
options = []
modifiers = []
+ num_matches = 0
if self._full_test_list:
for test in self._full_test_list:
if not test in self._test_list_paths:
- self._add_test(test, modifiers, expectations, options,
- overrides_allowed=False)
+ self._add_test(test, modifiers, num_matches, expectations,
+ options, overrides_allowed=False)
def _dict_of_sets(self, strings_to_constants):
"""Takes a dict of strings->constants and returns a dict mapping
@@ -505,7 +488,8 @@ class TestExpectationsFile:
_log.info(' new: %s', new_line)
elif action == ADD_PLATFORMS_EXCEPT_THIS:
parts = line.split(':')
- new_options = parts[0]
+ _log.info('Test updated: ')
+ _log.info(' old: %s', line)
for p in self._port.test_platform_names():
p = p.upper()
# This is a temp solution for rebaselining tool.
@@ -515,13 +499,11 @@ class TestExpectationsFile:
# TODO(victorw): Remove WIN-VISTA and WIN-7 once we have
# reliable Win 7 and Win Vista buildbots setup.
if not p in (platform.upper(), 'WIN-VISTA', 'WIN-7'):
- new_options += p + ' '
- new_line = ('%s:%s' % (new_options, parts[1]))
- f_new.append(new_line)
+ new_options = parts[0] + p + ' '
+ new_line = ('%s:%s' % (new_options, parts[1]))
+ f_new.append(new_line)
+ _log.info(' new: %s', new_line)
tests_updated += 1
- _log.info('Test updated: ')
- _log.info(' old: %s', line)
- _log.info(' new: %s', new_line)
_log.info('Total tests removed: %d', tests_removed)
_log.info('Total tests updated: %d', tests_updated)
@@ -537,12 +519,15 @@ class TestExpectationsFile:
options = []
if line.find(":") is -1:
- test_and_expectation = line.split("=")
- else:
- parts = line.split(":")
- options = self._get_options_list(parts[0])
- test_and_expectation = parts[1].split('=')
+ self._add_error(lineno, "Missing a ':'", line)
+ return (None, None, None)
+ parts = line.split(':')
+
+ # FIXME: verify that there is exactly one colon in the line.
+
+ options = self._get_options_list(parts[0])
+ test_and_expectation = parts[1].split('=')
test = test_and_expectation[0].strip()
if (len(test_and_expectation) is not 2):
self._add_error(lineno, "Missing expectations.",
@@ -588,69 +573,6 @@ class TestExpectationsFile:
return REMOVE_TEST
- def _has_valid_modifiers_for_current_platform(self, options, lineno,
- test_and_expectations, modifiers):
- """Returns true if the current platform is in the options list or if
- no platforms are listed and if there are no fatal errors in the
- options list.
-
- Args:
- options: List of lowercase options.
- lineno: The line in the file where the test is listed.
- test_and_expectations: The path and expectations for the test.
- modifiers: The set to populate with modifiers.
- """
- has_any_platform = False
- has_bug_id = False
- for option in options:
- if option in self.MODIFIERS:
- modifiers.add(option)
- elif option in self._port.test_platform_names():
- has_any_platform = True
- elif re.match(r'bug\d', option) != None:
- self._add_error(lineno, 'Bug must be either BUGCR, BUGWK, or BUGV8_ for test: %s' %
- option, test_and_expectations)
- elif option.startswith('bug'):
- has_bug_id = True
- elif option not in self.BUILD_TYPES:
- self._add_error(lineno, 'Invalid modifier for test: %s' %
- option, test_and_expectations)
-
- if has_any_platform and not self._match_platform(options):
- return False
-
- if not has_bug_id and 'wontfix' not in options:
- # TODO(ojan): Turn this into an AddError call once all the
- # tests have BUG identifiers.
- self._log_non_fatal_error(lineno, 'Test lacks BUG modifier.',
- test_and_expectations)
-
- if 'release' in options or 'debug' in options:
- if self._is_debug_mode and 'debug' not in options:
- return False
- if not self._is_debug_mode and 'release' not in options:
- return False
-
- if self._is_lint_mode and 'rebaseline' in options:
- self._add_error(lineno,
- 'REBASELINE should only be used for running rebaseline.py. '
- 'Cannot be checked in.', test_and_expectations)
-
- return True
-
- def _match_platform(self, options):
- """Match the list of options against our specified platform. If any
- of the options prefix-match self._platform, return True. This handles
- the case where a test is marked WIN and the platform is WIN-VISTA.
-
- Args:
- options: list of options
- """
- for opt in options:
- if self._test_platform_name.startswith(opt):
- return True
- return False
-
def _add_to_all_expectations(self, test, options, expectations):
# Make all paths unix-style so the dashboard doesn't need to.
test = test.replace('\\', '/')
@@ -663,54 +585,43 @@ class TestExpectationsFile:
"""For each test in an expectations iterable, generate the
expectations for it."""
lineno = 0
+ matcher = ModifierMatcher(self._test_config)
for line in expectations:
lineno += 1
+ self._process_line(line, lineno, matcher, overrides_allowed)
- test_list_path, options, expectations = \
- self.parse_expectations_line(line, lineno)
- if not expectations:
- continue
+ def _process_line(self, line, lineno, matcher, overrides_allowed):
+ test_list_path, options, expectations = \
+ self.parse_expectations_line(line, lineno)
+ if not expectations:
+ return
- self._add_to_all_expectations(test_list_path,
- " ".join(options).upper(),
- " ".join(expectations).upper())
+ self._add_to_all_expectations(test_list_path,
+ " ".join(options).upper(),
+ " ".join(expectations).upper())
- modifiers = set()
- if options and not self._has_valid_modifiers_for_current_platform(
- options, lineno, test_list_path, modifiers):
- continue
+ num_matches = self._check_options(matcher, options, lineno,
+ test_list_path)
+ if num_matches == ModifierMatcher.NO_MATCH:
+ return
- expectations = self._parse_expectations(expectations, lineno,
- test_list_path)
+ expectations = self._parse_expectations(expectations, lineno,
+ test_list_path)
- if 'slow' in options and TIMEOUT in expectations:
- self._add_error(lineno,
- 'A test can not be both slow and timeout. If it times out '
- 'indefinitely, then it should be just timeout.',
- test_list_path)
+ self._check_options_against_expectations(options, expectations,
+ lineno, test_list_path)
- full_path = self._fs.join(self._port.layout_tests_dir(),
- test_list_path)
- full_path = self._fs.normpath(full_path)
- # WebKit's way of skipping tests is to add a -disabled suffix.
- # So we should consider the path existing if the path or the
- # -disabled version exists.
- if (not self._port.path_exists(full_path)
- and not self._port.path_exists(full_path + '-disabled')):
- # Log a non fatal error here since you hit this case any
- # time you update test_expectations.txt without syncing
- # the LayoutTests directory
- self._log_non_fatal_error(lineno, 'Path does not exist.',
- test_list_path)
- continue
+ if self._check_path_does_not_exist(lineno, test_list_path):
+ return
- if not self._full_test_list:
- tests = [test_list_path]
- else:
- tests = self._expand_tests(test_list_path)
+ if not self._full_test_list:
+ tests = [test_list_path]
+ else:
+ tests = self._expand_tests(test_list_path)
- self._add_tests(tests, expectations, test_list_path, lineno,
- modifiers, options, overrides_allowed)
+ modifiers = [o for o in options if o in self.MODIFIERS]
+ self._add_tests(tests, expectations, test_list_path, lineno,
+ modifiers, num_matches, options, overrides_allowed)
def _get_options_list(self, listString):
return [part.strip().lower() for part in listString.strip().split(' ')]
@@ -726,6 +637,65 @@ class TestExpectationsFile:
result.add(expectation)
return result
+ def _check_options(self, matcher, options, lineno, test_list_path):
+ match_result = self._check_syntax(matcher, options, lineno,
+ test_list_path)
+ self._check_semantics(options, lineno, test_list_path)
+ return match_result.num_matches
+
+ def _check_syntax(self, matcher, options, lineno, test_list_path):
+ match_result = matcher.match(options)
+ for error in match_result.errors:
+ self._add_error(lineno, error, test_list_path)
+ for warning in match_result.warnings:
+ self._log_non_fatal_error(lineno, warning, test_list_path)
+ return match_result
+
+ def _check_semantics(self, options, lineno, test_list_path):
+ has_wontfix = 'wontfix' in options
+ has_bug = False
+ for opt in options:
+ if opt.startswith('bug'):
+ has_bug = True
+ if re.match('bug\d+', opt):
+ self._add_error(lineno,
+ 'BUG\d+ is not allowed, must be one of '
+ 'BUGCR\d+, BUGWK\d+, BUGV8_\d+, '
+ 'or a non-numeric bug identifier.', test_list_path)
+
+ if not has_bug and not has_wontfix:
+ self._log_non_fatal_error(lineno, 'Test lacks BUG modifier.',
+ test_list_path)
+
+ if self._is_lint_mode and 'rebaseline' in options:
+ self._add_error(lineno,
+ 'REBASELINE should only be used for running rebaseline.py. '
+ 'Cannot be checked in.', test_list_path)
+
+ def _check_options_against_expectations(self, options, expectations,
+ lineno, test_list_path):
+ if 'slow' in options and TIMEOUT in expectations:
+ self._add_error(lineno,
+ 'A test can not be both SLOW and TIMEOUT. If it times out '
+ 'indefinitely, then it should be just TIMEOUT.', test_list_path)
+
+ def _check_path_does_not_exist(self, lineno, test_list_path):
+ full_path = self._fs.join(self._port.layout_tests_dir(),
+ test_list_path)
+ full_path = self._fs.normpath(full_path)
+ # WebKit's way of skipping tests is to add a -disabled suffix.
+ # So we should consider the path existing if the path or the
+ # -disabled version exists.
+ if (not self._port.path_exists(full_path)
+ and not self._port.path_exists(full_path + '-disabled')):
+ # Log a non fatal error here since you hit this case any
+ # time you update test_expectations.txt without syncing
+ # the LayoutTests directory
+ self._log_non_fatal_error(lineno, 'Path does not exist.',
+ test_list_path)
+ return True
+ return False
+
def _expand_tests(self, test_list_path):
"""Convert the test specification to an absolute, normalized
path and make sure directories end with the OS path separator."""
@@ -751,27 +721,30 @@ class TestExpectationsFile:
return result
def _add_tests(self, tests, expectations, test_list_path, lineno,
- modifiers, options, overrides_allowed):
+ modifiers, num_matches, options, overrides_allowed):
for test in tests:
- if self._already_seen_test(test, test_list_path, lineno,
- overrides_allowed):
+ if self._already_seen_better_match(test, test_list_path,
+ num_matches, lineno, overrides_allowed):
continue
self._clear_expectations_for_test(test, test_list_path)
- self._add_test(test, modifiers, expectations, options,
+ self._test_list_paths[test] = (self._fs.normpath(test_list_path),
+ num_matches, lineno)
+ self._add_test(test, modifiers, num_matches, expectations, options,
overrides_allowed)
- def _add_test(self, test, modifiers, expectations, options,
+ def _add_test(self, test, modifiers, num_matches, expectations, options,
overrides_allowed):
"""Sets the expected state for a given test.
This routine assumes the test has not been added before. If it has,
- use _ClearExpectationsForTest() to reset the state prior to
+ use _clear_expectations_for_test() to reset the state prior to
calling this.
Args:
test: test to add
modifiers: sequence of modifier keywords ('wontfix', 'slow', etc.)
+ num_matches: number of modifiers that matched the configuration
expectations: sequence of expectations (PASS, IMAGE, etc.)
options: sequence of keywords and bug identifiers.
overrides_allowed: whether we're parsing the regular expectations
@@ -828,32 +801,70 @@ class TestExpectationsFile:
if test in set_of_tests:
set_of_tests.remove(test)
- def _already_seen_test(self, test, test_list_path, lineno,
- allow_overrides):
- """Returns true if we've already seen a more precise path for this test
- than the test_list_path.
+ def _already_seen_better_match(self, test, test_list_path, num_matches,
+ lineno, overrides_allowed):
+ """Returns whether we've seen a better match already in the file.
+
+ Returns True if we've already seen a test_list_path that matches more of the test
+ than this path does
"""
+ # FIXME: See comment below about matching test configs and num_matches.
+
if not test in self._test_list_paths:
+ # We've never seen this test before.
return False
- prev_base_path = self._test_list_paths[test]
- if (prev_base_path == self._fs.normpath(test_list_path)):
- if (not allow_overrides or test in self._overridding_tests):
- if allow_overrides:
- expectation_source = "override"
- else:
- expectation_source = "expectation"
- self._add_error(lineno, 'Duplicate %s.' % expectation_source,
- test)
- return True
- else:
- # We have seen this path, but that's okay because its
- # in the overrides and the earlier path was in the
- # expectations.
- return False
+ prev_base_path, prev_num_matches, prev_lineno = self._test_list_paths[test]
+ base_path = self._fs.normpath(test_list_path)
+
+ if len(prev_base_path) > len(base_path):
+ # The previous path matched more of the test.
+ return True
+
+ if len(prev_base_path) < len(base_path):
+ # This path matches more of the test.
+ return False
+
+ if overrides_allowed and test not in self._overridding_tests:
+ # We have seen this path, but that's okay because it is
+ # in the overrides and the earlier path was in the
+ # expectations (not the overrides).
+ return False
+
+ # At this point we know we have seen a previous exact match on this
+ # base path, so we need to check the two sets of modifiers.
- # Check if we've already seen a more precise path.
- return prev_base_path.startswith(self._fs.normpath(test_list_path))
+ if overrides_allowed:
+ expectation_source = "override"
+ else:
+ expectation_source = "expectation"
+
+ # FIXME: This code was originally designed to allow lines that matched
+ # more modifiers to override lines that matched fewer modifiers.
+ # However, we currently view these as errors. If we decide to make
+ # this policy permanent, we can probably simplify this code
+ # and the ModifierMatcher code a fair amount.
+ #
+ # To use the "more modifiers wins" policy, change the "_add_error" lines for overrides
+ # to _log_non_fatal_error() and change the commented-out "return False".
+
+ if prev_num_matches == num_matches:
+ self._add_error(lineno,
+ 'Duplicate or ambiguous %s.' % expectation_source,
+ test)
+ return True
+
+ if prev_num_matches < num_matches:
+ self._add_error(lineno,
+ 'More specific entry on line %d overrides line %d' %
+ (lineno, prev_lineno), test_list_path)
+ # FIXME: return False if we want more specific to win.
+ return True
+
+ self._add_error(lineno,
+ 'More specific entry on line %d overrides line %d' %
+ (prev_lineno, lineno), test_list_path)
+ return True
def _add_error(self, lineno, msg, path):
"""Reports an error that will prevent running the tests. Does not
@@ -865,3 +876,188 @@ class TestExpectationsFile:
"""Reports an error that will not prevent running the tests. These are
still errors, but not bad enough to warrant breaking test running."""
self._non_fatal_errors.append('Line:%s %s %s' % (lineno, msg, path))
+
+
+class ModifierMatchResult(object):
+ def __init__(self, options):
+ self.num_matches = ModifierMatcher.NO_MATCH
+ self.options = options
+ self.errors = []
+ self.warnings = []
+ self.modifiers = []
+ self._matched_regexes = set()
+ self._matched_macros = set()
+
+
+class ModifierMatcher(object):
+
+ """
+ This class manages the interpretation of the "modifiers" for a given
+ line in the expectations file. Modifiers are the tokens that appear to the
+ left of the colon on a line. For example, "BUG1234", "DEBUG", and "WIN" are
+ all modifiers. This class gets what the valid modifiers are, and which
+ modifiers are allowed to exist together on a line, from the
+ TestConfiguration object that is passed in to the call.
+
+ This class detects *intra*-line errors like unknown modifiers, but
+ does not detect *inter*-line modifiers like duplicate expectations.
+
+ More importantly, this class is also used to determine if a given line
+ matches the port in question. Matches are ranked according to the number
+ of modifiers that match on a line. A line with no modifiers matches
+ everything and has a score of zero. A line with one modifier matches only
+ ports that have that modifier and gets a score of 1, and so one. Ports
+ that don't match at all get a score of -1.
+
+ Given two lines in a file that apply to the same test, if both expectations
+ match the current config, then the expectation is considered ambiguous,
+ even if one expectation matches more of the config than the other. For
+ example, in:
+
+ BUG1 RELEASE : foo.html = FAIL
+ BUG1 WIN RELEASE : foo.html = PASS
+ BUG2 WIN : bar.html = FAIL
+ BUG2 DEBUG : bar.html = PASS
+
+ lines 1 and 2 would produce an error on a Win XP Release bot (the scores
+ would be 1 and 2, respectively), and lines three and four would produce
+ a duplicate expectation on a Win Debug bot since both the 'win' and the
+ 'debug' expectations would apply (both had scores of 1).
+
+ In addition to the definitions of all of the modifiers, the class
+ supports "macros" that are expanded prior to interpretation, and "ignore
+ regexes" that can be used to skip over modifiers like the BUG* modifiers.
+ """
+ MACROS = {
+ 'mac-snowleopard': ['mac', 'snowleopard'],
+ 'mac-leopard': ['mac', 'leopard'],
+ 'win-xp': ['win', 'xp'],
+ 'win-vista': ['win', 'vista'],
+ 'win-7': ['win', 'win7'],
+ }
+
+ # We don't include the "none" modifier because it isn't actually legal.
+ REGEXES_TO_IGNORE = (['bug\w+'] +
+ TestExpectationsFile.MODIFIERS.keys()[:-1])
+ DUPLICATE_REGEXES_ALLOWED = ['bug\w+']
+
+ # Magic value returned when the options don't match.
+ NO_MATCH = -1
+
+ # FIXME: The code currently doesn't detect combinations of modifiers
+ # that are syntactically valid but semantically invalid, like
+ # 'MAC XP'. See ModifierMatchTest.test_invalid_combinations() in the
+ # _unittest.py file.
+
+ def __init__(self, test_config):
+ """Initialize a ModifierMatcher argument with the TestConfiguration it
+ should be matched against."""
+ self.test_config = test_config
+ self.allowed_configurations = test_config.all_test_configurations()
+ self.macros = self.MACROS
+
+ self.regexes_to_ignore = {}
+ for regex_str in self.REGEXES_TO_IGNORE:
+ self.regexes_to_ignore[regex_str] = re.compile(regex_str)
+
+ # Keep a set of all of the legal modifiers for quick checking.
+ self._all_modifiers = set()
+
+ # Keep a dict mapping values back to their categories.
+ self._categories_for_modifiers = {}
+ for config in self.allowed_configurations:
+ for category, modifier in config.items():
+ self._categories_for_modifiers[modifier] = category
+ self._all_modifiers.add(modifier)
+
+ def match(self, options):
+ """Checks a list of options against the config set in the constructor.
+ Options may be either actual modifier strings, "macro" strings
+ that get expanded to a list of modifiers, or strings that are allowed
+ to be ignored. All of the options must be passed in in lower case.
+
+ Returns the number of matching categories, or NO_MATCH (-1) if it
+ doesn't match or there were errors found. Matches are prioritized
+ by the number of matching categories, because the more specific
+ the options list, the more categories will match.
+
+ The results of the most recent match are available in the 'options',
+ 'modifiers', 'num_matches', 'errors', and 'warnings' properties.
+ """
+ result = ModifierMatchResult(options)
+ self._parse(result)
+ if result.errors:
+ return result
+ self._count_matches(result)
+ return result
+
+ def _parse(self, result):
+ # FIXME: Should we warn about lines having every value in a category?
+ for option in result.options:
+ self._parse_one(option, result)
+
+ def _parse_one(self, option, result):
+ if option in self._all_modifiers:
+ self._add_modifier(option, result)
+ elif option in self.macros:
+ self._expand_macro(option, result)
+ elif not self._matches_any_regex(option, result):
+ result.errors.append("Unrecognized option '%s'" % option)
+
+ def _add_modifier(self, option, result):
+ if option in result.modifiers:
+ result.errors.append("More than one '%s'" % option)
+ else:
+ result.modifiers.append(option)
+
+ def _expand_macro(self, macro, result):
+ if macro in result._matched_macros:
+ result.errors.append("More than one '%s'" % macro)
+ return
+
+ mods = []
+ for modifier in self.macros[macro]:
+ if modifier in result.options:
+ result.errors.append("Can't specify both modifier '%s' and "
+ "macro '%s'" % (modifier, macro))
+ else:
+ mods.append(modifier)
+ result._matched_macros.add(macro)
+ result.modifiers.extend(mods)
+
+ def _matches_any_regex(self, option, result):
+ for regex_str, pattern in self.regexes_to_ignore.iteritems():
+ if pattern.match(option):
+ self._handle_regex_match(regex_str, result)
+ return True
+ return False
+
+ def _handle_regex_match(self, regex_str, result):
+ if (regex_str in result._matched_regexes and
+ regex_str not in self.DUPLICATE_REGEXES_ALLOWED):
+ result.errors.append("More than one option matching '%s'" %
+ regex_str)
+ else:
+ result._matched_regexes.add(regex_str)
+
+ def _count_matches(self, result):
+ """Returns the number of modifiers that match the test config."""
+ categorized_modifiers = self._group_by_category(result.modifiers)
+ result.num_matches = 0
+ for category, modifier in self.test_config.items():
+ if category in categorized_modifiers:
+ if modifier in categorized_modifiers[category]:
+ result.num_matches += 1
+ else:
+ result.num_matches = self.NO_MATCH
+ return
+
+ def _group_by_category(self, modifiers):
+ # Returns a dict of category name -> list of modifiers.
+ modifiers_by_category = {}
+ for m in modifiers:
+ modifiers_by_category.setdefault(self._category(m), []).append(m)
+ return modifiers_by_category
+
+ def _category(self, modifier):
+ return self._categories_for_modifiers[modifier]
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py
index 8f9e5dd..05d805d 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py
@@ -32,6 +32,7 @@
import unittest
from webkitpy.layout_tests import port
+from webkitpy.layout_tests.port import base
from webkitpy.layout_tests.layout_package.test_expectations import *
class FunctionsTest(unittest.TestCase):
@@ -78,8 +79,11 @@ class FunctionsTest(unittest.TestCase):
class Base(unittest.TestCase):
+ # Note that all of these tests are written assuming the configuration
+ # being tested is Windows XP, Release build.
+
def __init__(self, testFunc, setUp=None, tearDown=None, description=None):
- self._port = port.get('test', None)
+ self._port = port.get('test-win-xp', None)
self._fs = self._port._filesystem
self._exp = None
unittest.TestCase.__init__(self, testFunc)
@@ -101,16 +105,15 @@ BUG_TEST : failures/expected/text.html = TEXT
BUG_TEST WONTFIX SKIP : failures/expected/crash.html = CRASH
BUG_TEST REBASELINE : failures/expected/missing_image.html = MISSING
BUG_TEST WONTFIX : failures/expected/image_checksum.html = IMAGE
-BUG_TEST WONTFIX WIN : failures/expected/image.html = IMAGE
+BUG_TEST WONTFIX MAC : failures/expected/image.html = IMAGE
"""
- def parse_exp(self, expectations, overrides=None, is_lint_mode=False,
- is_debug_mode=False):
+ def parse_exp(self, expectations, overrides=None, is_lint_mode=False):
+ test_config = self._port.test_configuration()
self._exp = TestExpectations(self._port,
tests=self.get_basic_tests(),
expectations=expectations,
- test_platform_name=self._port.test_platform_name(),
- is_debug_mode=is_debug_mode,
+ test_config=test_config,
is_lint_mode=is_lint_mode,
overrides=overrides)
@@ -119,7 +122,7 @@ BUG_TEST WONTFIX WIN : failures/expected/image.html = IMAGE
set([result]))
-class TestExpectationsTest(Base):
+class BasicTests(Base):
def test_basic(self):
self.parse_exp(self.get_basic_expectations())
self.assert_exp('failures/expected/text.html', TEXT)
@@ -127,23 +130,14 @@ class TestExpectationsTest(Base):
self.assert_exp('passes/text.html', PASS)
self.assert_exp('failures/expected/image.html', PASS)
+
+class MiscTests(Base):
def test_multiple_results(self):
self.parse_exp('BUGX : failures/expected/text.html = TEXT CRASH')
self.assertEqual(self._exp.get_expectations(
self.get_test('failures/expected/text.html')),
set([TEXT, CRASH]))
- def test_precedence(self):
- # This tests handling precedence of specific lines over directories
- # and tests expectations covering entire directories.
- exp_str = """
-BUGX : failures/expected/text.html = TEXT
-BUGX WONTFIX : failures/expected = IMAGE
-"""
- self.parse_exp(exp_str)
- self.assert_exp('failures/expected/text.html', TEXT)
- self.assert_exp('failures/expected/crash.html', IMAGE)
-
def test_category_expectations(self):
# This test checks unknown tests are not present in the
# expectations and that known test part of a test category is
@@ -158,20 +152,6 @@ BUGX WONTFIX : failures/expected = IMAGE
unknown_test)
self.assert_exp('failures/expected/crash.html', IMAGE)
- def test_release_mode(self):
- self.parse_exp('BUGX DEBUG : failures/expected/text.html = TEXT',
- is_debug_mode=True)
- self.assert_exp('failures/expected/text.html', TEXT)
- self.parse_exp('BUGX RELEASE : failures/expected/text.html = TEXT',
- is_debug_mode=True)
- self.assert_exp('failures/expected/text.html', PASS)
- self.parse_exp('BUGX DEBUG : failures/expected/text.html = TEXT',
- is_debug_mode=False)
- self.assert_exp('failures/expected/text.html', PASS)
- self.parse_exp('BUGX RELEASE : failures/expected/text.html = TEXT',
- is_debug_mode=False)
- self.assert_exp('failures/expected/text.html', TEXT)
-
def test_get_options(self):
self.parse_exp(self.get_basic_expectations())
self.assertEqual(self._exp.get_options(
@@ -216,7 +196,7 @@ SKIP : failures/expected/image.html""")
self.assertFalse(True, "ParseError wasn't raised")
except ParseError, e:
self.assertTrue(e.fatal)
- exp_errors = [u'Line:1 Invalid modifier for test: foo failures/expected/text.html',
+ exp_errors = [u"Line:1 Unrecognized option 'foo' failures/expected/text.html",
u"Line:2 Missing expectations. [' failures/expected/image.html']"]
self.assertEqual(str(e), '\n'.join(map(str, exp_errors)))
self.assertEqual(e.errors, exp_errors)
@@ -232,77 +212,167 @@ SKIP : failures/expected/image.html""")
self.assertEqual(str(e), '\n'.join(map(str, exp_errors)))
self.assertEqual(e.errors, exp_errors)
- def test_syntax_missing_expectation(self):
+ def test_overrides(self):
+ self.parse_exp("BUG_EXP: failures/expected/text.html = TEXT",
+ "BUG_OVERRIDE : failures/expected/text.html = IMAGE")
+ self.assert_exp('failures/expected/text.html', IMAGE)
+
+ def test_overrides__duplicate(self):
+ self.assertRaises(ParseError, self.parse_exp,
+ "BUG_EXP: failures/expected/text.html = TEXT",
+ """
+BUG_OVERRIDE : failures/expected/text.html = IMAGE
+BUG_OVERRIDE : failures/expected/text.html = CRASH
+""")
+
+ def test_pixel_tests_flag(self):
+ def match(test, result, pixel_tests_enabled):
+ return self._exp.matches_an_expected_result(
+ self.get_test(test), result, pixel_tests_enabled)
+
+ self.parse_exp(self.get_basic_expectations())
+ self.assertTrue(match('failures/expected/text.html', TEXT, True))
+ self.assertTrue(match('failures/expected/text.html', TEXT, False))
+ self.assertFalse(match('failures/expected/text.html', CRASH, True))
+ self.assertFalse(match('failures/expected/text.html', CRASH, False))
+ self.assertTrue(match('failures/expected/image_checksum.html', IMAGE,
+ True))
+ self.assertTrue(match('failures/expected/image_checksum.html', PASS,
+ False))
+ self.assertTrue(match('failures/expected/crash.html', SKIP, False))
+ self.assertTrue(match('passes/text.html', PASS, False))
+
+ def test_more_specific_override_resets_skip(self):
+ self.parse_exp("BUGX SKIP : failures/expected = TEXT\n"
+ "BUGX : failures/expected/text.html = IMAGE\n")
+ self.assert_exp('failures/expected/text.html', IMAGE)
+ self.assertFalse(self._port._filesystem.join(self._port.layout_tests_dir(),
+ 'failures/expected/text.html') in
+ self._exp.get_tests_with_result_type(SKIP))
+
+class ExpectationSyntaxTests(Base):
+ def test_missing_expectation(self):
# This is missing the expectation.
self.assertRaises(ParseError, self.parse_exp,
- 'BUG_TEST: failures/expected/text.html',
- is_debug_mode=True)
+ 'BUG_TEST: failures/expected/text.html')
- def test_syntax_invalid_option(self):
+ def test_missing_colon(self):
+ # This is missing the modifiers and the ':'
self.assertRaises(ParseError, self.parse_exp,
- 'BUG_TEST FOO: failures/expected/text.html = PASS')
+ 'failures/expected/text.html = TEXT')
- def test_syntax_invalid_expectation(self):
- # This is missing the expectation.
+ def disabled_test_too_many_colons(self):
+ # FIXME: Enable this test and fix the underlying bug.
+ self.assertRaises(ParseError, self.parse_exp,
+ 'BUG_TEST: failures/expected/text.html = PASS :')
+
+ def test_too_many_equals_signs(self):
self.assertRaises(ParseError, self.parse_exp,
- 'BUG_TEST: failures/expected/text.html = FOO')
+ 'BUG_TEST: failures/expected/text.html = TEXT = IMAGE')
+
+ def test_unrecognized_expectation(self):
+ self.assertRaises(ParseError, self.parse_exp,
+ 'BUG_TEST: failures/expected/text.html = UNKNOWN')
+
+ def test_macro(self):
+ exp_str = """
+BUG_TEST WIN-XP : failures/expected/text.html = TEXT
+"""
+ self.parse_exp(exp_str)
+ self.assert_exp('failures/expected/text.html', TEXT)
+
+
+class SemanticTests(Base):
+ def test_bug_format(self):
+ self.assertRaises(ParseError, self.parse_exp, 'BUG1234 : failures/expected/text.html = TEXT')
- def test_syntax_missing_bugid(self):
+ def test_missing_bugid(self):
# This should log a non-fatal error.
self.parse_exp('SLOW : failures/expected/text.html = TEXT')
self.assertEqual(
len(self._exp._expected_failures.get_non_fatal_errors()), 1)
- def test_semantic_slow_and_timeout(self):
+ def test_slow_and_timeout(self):
# A test cannot be SLOW and expected to TIMEOUT.
self.assertRaises(ParseError, self.parse_exp,
'BUG_TEST SLOW : failures/expected/timeout.html = TIMEOUT')
- def test_semantic_rebaseline(self):
+ def test_rebaseline(self):
# Can't lint a file w/ 'REBASELINE' in it.
self.assertRaises(ParseError, self.parse_exp,
'BUG_TEST REBASELINE : failures/expected/text.html = TEXT',
is_lint_mode=True)
- def test_semantic_duplicates(self):
+ def test_duplicates(self):
self.assertRaises(ParseError, self.parse_exp, """
-BUG_TEST : failures/expected/text.html = TEXT
-BUG_TEST : failures/expected/text.html = IMAGE""")
+BUG_EXP : failures/expected/text.html = TEXT
+BUG_EXP : failures/expected/text.html = IMAGE""")
self.assertRaises(ParseError, self.parse_exp,
- self.get_basic_expectations(), """
-BUG_TEST : failures/expected/text.html = TEXT
-BUG_TEST : failures/expected/text.html = IMAGE""")
+ self.get_basic_expectations(), overrides="""
+BUG_OVERRIDE : failures/expected/text.html = TEXT
+BUG_OVERRIDE : failures/expected/text.html = IMAGE""", )
- def test_semantic_missing_file(self):
+ def test_missing_file(self):
# This should log a non-fatal error.
self.parse_exp('BUG_TEST : missing_file.html = TEXT')
self.assertEqual(
len(self._exp._expected_failures.get_non_fatal_errors()), 1)
- def test_overrides(self):
- self.parse_exp(self.get_basic_expectations(), """
-BUG_OVERRIDE : failures/expected/text.html = IMAGE""")
- self.assert_exp('failures/expected/text.html', IMAGE)
+class PrecedenceTests(Base):
+ def test_file_over_directory(self):
+ # This tests handling precedence of specific lines over directories
+ # and tests expectations covering entire directories.
+ exp_str = """
+BUGX : failures/expected/text.html = TEXT
+BUGX WONTFIX : failures/expected = IMAGE
+"""
+ self.parse_exp(exp_str)
+ self.assert_exp('failures/expected/text.html', TEXT)
+ self.assert_exp('failures/expected/crash.html', IMAGE)
- def test_matches_an_expected_result(self):
+ exp_str = """
+BUGX WONTFIX : failures/expected = IMAGE
+BUGX : failures/expected/text.html = TEXT
+"""
+ self.parse_exp(exp_str)
+ self.assert_exp('failures/expected/text.html', TEXT)
+ self.assert_exp('failures/expected/crash.html', IMAGE)
- def match(test, result, pixel_tests_enabled):
- return self._exp.matches_an_expected_result(
- self.get_test(test), result, pixel_tests_enabled)
+ def test_ambiguous(self):
+ self.assertRaises(ParseError, self.parse_exp, """
+BUG_TEST RELEASE : passes/text.html = PASS
+BUG_TEST WIN : passes/text.html = FAIL
+""")
- self.parse_exp(self.get_basic_expectations())
- self.assertTrue(match('failures/expected/text.html', TEXT, True))
- self.assertTrue(match('failures/expected/text.html', TEXT, False))
- self.assertFalse(match('failures/expected/text.html', CRASH, True))
- self.assertFalse(match('failures/expected/text.html', CRASH, False))
- self.assertTrue(match('failures/expected/image_checksum.html', IMAGE,
- True))
- self.assertTrue(match('failures/expected/image_checksum.html', PASS,
- False))
- self.assertTrue(match('failures/expected/crash.html', SKIP, False))
- self.assertTrue(match('passes/text.html', PASS, False))
+ def test_more_modifiers(self):
+ exp_str = """
+BUG_TEST RELEASE : passes/text.html = PASS
+BUG_TEST WIN RELEASE : passes/text.html = TEXT
+"""
+ self.assertRaises(ParseError, self.parse_exp, exp_str)
+
+ def test_order_in_file(self):
+ exp_str = """
+BUG_TEST WIN RELEASE : passes/text.html = TEXT
+BUG_TEST RELEASE : passes/text.html = PASS
+"""
+ self.assertRaises(ParseError, self.parse_exp, exp_str)
+
+ def test_version_overrides(self):
+ exp_str = """
+BUG_TEST WIN : passes/text.html = PASS
+BUG_TEST WIN XP : passes/text.html = TEXT
+"""
+ self.assertRaises(ParseError, self.parse_exp, exp_str)
+
+ def test_macro_overrides(self):
+ exp_str = """
+BUG_TEST WIN : passes/text.html = PASS
+BUG_TEST WIN-XP : passes/text.html = TEXT
+"""
+ self.assertRaises(ParseError, self.parse_exp, exp_str)
class RebaseliningTest(Base):
@@ -327,7 +397,8 @@ BUG_TEST REBASELINE : failures/expected/text.html = TEXT
def test_remove_expand(self):
self.assertRemove('mac',
'BUGX REBASELINE : failures/expected/text.html = TEXT\n',
- 'BUGX REBASELINE WIN : failures/expected/text.html = TEXT\n')
+ 'BUGX REBASELINE WIN : failures/expected/text.html = TEXT\n'
+ 'BUGX REBASELINE WIN-XP : failures/expected/text.html = TEXT\n')
def test_remove_mac_win(self):
self.assertRemove('mac',
@@ -345,5 +416,85 @@ BUG_TEST REBASELINE : failures/expected/text.html = TEXT
'\n\n')
+class ModifierTests(unittest.TestCase):
+ def setUp(self):
+ port_obj = port.get('test-win-xp', None)
+ self.config = port_obj.test_configuration()
+ self.matcher = ModifierMatcher(self.config)
+
+ def match(self, modifiers, expected_num_matches=-1, values=None, num_errors=0):
+ matcher = self.matcher
+ if values:
+ matcher = ModifierMatcher(self.FakeTestConfiguration(values))
+ match_result = matcher.match(modifiers)
+ self.assertEqual(len(match_result.warnings), 0)
+ self.assertEqual(len(match_result.errors), num_errors)
+ self.assertEqual(match_result.num_matches, expected_num_matches,
+ 'match(%s, %s) returned -> %d, expected %d' %
+ (modifiers, str(self.config.values()),
+ match_result.num_matches, expected_num_matches))
+
+ def test_bad_match_modifier(self):
+ self.match(['foo'], num_errors=1)
+
+ def test_none(self):
+ self.match([], 0)
+
+ def test_one(self):
+ self.match(['xp'], 1)
+ self.match(['win'], 1)
+ self.match(['release'], 1)
+ self.match(['cpu'], 1)
+ self.match(['x86'], 1)
+ self.match(['leopard'], -1)
+ self.match(['gpu'], -1)
+ self.match(['debug'], -1)
+
+ def test_two(self):
+ self.match(['xp', 'release'], 2)
+ self.match(['win7', 'release'], -1)
+ self.match(['win7', 'xp'], 1)
+
+ def test_three(self):
+ self.match(['win7', 'xp', 'release'], 2)
+ self.match(['xp', 'debug', 'x86'], -1)
+ self.match(['xp', 'release', 'x86'], 3)
+ self.match(['xp', 'cpu', 'release'], 3)
+
+ def test_four(self):
+ self.match(['xp', 'release', 'cpu', 'x86'], 4)
+ self.match(['win7', 'xp', 'release', 'cpu'], 3)
+ self.match(['win7', 'xp', 'debug', 'cpu'], -1)
+
+ def test_case_insensitivity(self):
+ self.match(['Win'], num_errors=1)
+ self.match(['WIN'], num_errors=1)
+ self.match(['win'], 1)
+
+ def test_duplicates(self):
+ self.match(['release', 'release'], num_errors=1)
+ self.match(['win-xp', 'xp'], num_errors=1)
+ self.match(['win-xp', 'win-xp'], num_errors=1)
+ self.match(['xp', 'release', 'xp', 'release'], num_errors=2)
+ self.match(['rebaseline', 'rebaseline'], num_errors=1)
+
+ def test_unknown_option(self):
+ self.match(['vms'], num_errors=1)
+
+ def test_duplicate_bugs(self):
+ # BUG* regexes can appear multiple times.
+ self.match(['bugfoo', 'bugbar'], 0)
+
+ def test_invalid_combinations(self):
+ # FIXME: This should probably raise an error instead of NO_MATCH.
+ self.match(['mac', 'xp'], num_errors=0)
+
+ def test_regexes_are_ignored(self):
+ self.match(['bug123xy', 'rebaseline', 'wontfix', 'slow', 'skip'], 0)
+
+ def test_none_is_invalid(self):
+ self.match(['none'], num_errors=1)
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py
index 4b027c0..0aed1dd 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_input.py
@@ -41,7 +41,3 @@ class TestInput:
# FIXME: filename should really be test_name as a relative path.
self.filename = filename
self.timeout = timeout
- # The image_hash is used to avoid doing an image dump if the
- # checksums match. The image_hash is set later, and only if it is needed
- # for the test.
- self.image_hash = None
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py
index 6c07850..e3bd4ad 100644
--- a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner.py
@@ -214,21 +214,13 @@ class TestRunner:
def lint(self):
lint_failed = False
-
- # Creating the expecations for each platform/configuration pair does
- # all the test list parsing and ensures it's correct syntax (e.g. no
- # dupes).
- for platform_name in self._port.test_platform_names():
- try:
- self.parse_expectations(platform_name, is_debug_mode=True)
- except test_expectations.ParseError:
- lint_failed = True
+ for test_configuration in self._port.all_test_configurations():
try:
- self.parse_expectations(platform_name, is_debug_mode=False)
+ self.lint_expectations(test_configuration)
except test_expectations.ParseError:
lint_failed = True
+ self._printer.write("")
- self._printer.write("")
if lint_failed:
_log.error("Lint failed.")
return -1
@@ -236,22 +228,28 @@ class TestRunner:
_log.info("Lint succeeded.")
return 0
- def parse_expectations(self, test_platform_name, is_debug_mode):
+ def lint_expectations(self, config):
+ port = self._port
+ test_expectations.TestExpectations(
+ port,
+ None,
+ port.test_expectations(),
+ config,
+ self._options.lint_test_files,
+ port.test_expectations_overrides())
+
+ def parse_expectations(self):
"""Parse the expectations from the test_list files and return a data
structure holding them. Throws an error if the test_list files have
invalid syntax."""
- if self._options.lint_test_files:
- test_files = None
- else:
- test_files = self._test_files
-
- expectations_str = self._port.test_expectations()
- overrides_str = self._port.test_expectations_overrides()
+ port = self._port
self._expectations = test_expectations.TestExpectations(
- self._port, test_files, expectations_str, test_platform_name,
- is_debug_mode, self._options.lint_test_files,
- overrides=overrides_str)
- return self._expectations
+ port,
+ self._test_files,
+ port.test_expectations(),
+ port.test_configuration(),
+ self._options.lint_test_files,
+ port.test_expectations_overrides())
# FIXME: This method is way too long and needs to be broken into pieces.
def prepare_lists_and_print_output(self):
@@ -358,9 +356,7 @@ class TestRunner:
self._test_files_list = files + skip_chunk_list
self._test_files = set(self._test_files_list)
- self._expectations = self.parse_expectations(
- self._port.test_platform_name(),
- self._options.configuration == 'Debug')
+ self.parse_expectations()
self._test_files = set(files)
self._test_files_list = files
@@ -691,6 +687,8 @@ class TestRunner:
self._expectations, result_summary, retry_summary)
self._printer.print_unexpected_results(unexpected_results)
+ # FIXME: remove record_results. It's just used for testing. There's no need
+ # for it to be a commandline argument.
if (self._options.record_results and not self._options.dry_run and
not interrupted):
# Write the same data to log files and upload generated JSON files
@@ -731,28 +729,31 @@ class TestRunner:
except Queue.Empty:
return
- expected = self._expectations.matches_an_expected_result(
- result.filename, result.type, self._options.pixel_tests)
- result_summary.add(result, expected)
- exp_str = self._expectations.get_expectations_string(
- result.filename)
- got_str = self._expectations.expectation_to_string(result.type)
- self._printer.print_test_result(result, expected, exp_str, got_str)
- self._printer.print_progress(result_summary, self._retrying,
- self._test_files_list)
-
- def interrupt_if_at_failure_limit(limit, count, message):
- if limit and count >= limit:
- raise TestRunInterruptedException(message % count)
-
- interrupt_if_at_failure_limit(
- self._options.exit_after_n_failures,
- result_summary.unexpected_failures,
- "Aborting run since %d failures were reached")
- interrupt_if_at_failure_limit(
- self._options.exit_after_n_crashes_or_timeouts,
- result_summary.unexpected_crashes_or_timeouts,
- "Aborting run since %d crashes or timeouts were reached")
+ self._update_summary_with_result(result_summary, result)
+
+ def _update_summary_with_result(self, result_summary, result):
+ expected = self._expectations.matches_an_expected_result(
+ result.filename, result.type, self._options.pixel_tests)
+ result_summary.add(result, expected)
+ exp_str = self._expectations.get_expectations_string(
+ result.filename)
+ got_str = self._expectations.expectation_to_string(result.type)
+ self._printer.print_test_result(result, expected, exp_str, got_str)
+ self._printer.print_progress(result_summary, self._retrying,
+ self._test_files_list)
+
+ def interrupt_if_at_failure_limit(limit, count, message):
+ if limit and count >= limit:
+ raise TestRunInterruptedException(message % count)
+
+ interrupt_if_at_failure_limit(
+ self._options.exit_after_n_failures,
+ result_summary.unexpected_failures,
+ "Aborting run since %d failures were reached")
+ interrupt_if_at_failure_limit(
+ self._options.exit_after_n_crashes_or_timeouts,
+ result_summary.unexpected_crashes_or_timeouts,
+ "Aborting run since %d crashes or timeouts were reached")
def _clobber_old_results(self):
# Just clobber the actual test results directories since the other
@@ -789,7 +790,7 @@ class TestRunner:
return failed_results
def _upload_json_files(self, unexpected_results, result_summary,
- individual_test_timings):
+ individual_test_timings):
"""Writes the results of the test run as JSON files into the results
dir and upload the files to the appengine server.
@@ -825,18 +826,13 @@ class TestRunner:
self._options.build_number, self._options.results_directory,
BUILDER_BASE_URL, individual_test_timings,
self._expectations, result_summary, self._test_files_list,
- not self._options.upload_full_results,
self._options.test_results_server,
"layout-tests",
self._options.master_name)
_log.debug("Finished writing JSON files.")
- json_files = ["expectations.json"]
- if self._options.upload_full_results:
- json_files.append("results.json")
- else:
- json_files.append("incremental_results.json")
+ json_files = ["expectations.json", "incremental_results.json"]
generator.upload_json_files(json_files)
@@ -844,6 +840,7 @@ class TestRunner:
"""Prints the configuration for the test run."""
p = self._printer
p.print_config("Using port '%s'" % self._port.name())
+ p.print_config("Test configuration: %s" % self._port.test_configuration())
p.print_config("Placing test results in %s" %
self._options.results_directory)
if self._options.new_baseline:
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py
new file mode 100644
index 0000000..f097b83
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+The TestRunner2 package is an alternate implementation of the TestRunner
+class that uses the manager_worker_broker module to send sets of tests to
+workers and receive their completion messages accordingly.
+"""
+
+import logging
+
+
+from webkitpy.layout_tests.layout_package import manager_worker_broker
+from webkitpy.layout_tests.layout_package import test_runner
+from webkitpy.layout_tests.layout_package import worker
+
+_log = logging.getLogger(__name__)
+
+
+class TestRunner2(test_runner.TestRunner):
+ def __init__(self, port, options, printer):
+ test_runner.TestRunner.__init__(self, port, options, printer)
+ self._all_results = []
+ self._group_stats = {}
+ self._current_result_summary = None
+ self._done = False
+
+ def is_done(self):
+ return self._done
+
+ def name(self):
+ return 'TestRunner2'
+
+ def _run_tests(self, file_list, result_summary):
+ """Runs the tests in the file_list.
+
+ Return: A tuple (keyboard_interrupted, thread_timings, test_timings,
+ individual_test_timings)
+ keyboard_interrupted is whether someone typed Ctrl^C
+ thread_timings is a list of dicts with the total runtime
+ of each thread with 'name', 'num_tests', 'total_time' properties
+ test_timings is a list of timings for each sharded subdirectory
+ of the form [time, directory_name, num_tests]
+ individual_test_timings is a list of run times for each test
+ in the form {filename:filename, test_run_time:test_run_time}
+ result_summary: summary object to populate with the results
+ """
+ self._current_result_summary = result_summary
+
+ # FIXME: shard properly.
+
+ # FIXME: should shard_tests return a list of objects rather than tuples?
+ test_lists = self._shard_tests(file_list, False)
+
+ manager_connection = manager_worker_broker.get(self._port, self._options, self, worker.Worker)
+
+ # FIXME: start all of the workers.
+ manager_connection.start_worker(0)
+
+ for test_list in test_lists:
+ manager_connection.post_message('test_list', test_list[0], test_list[1])
+
+ manager_connection.post_message('stop')
+
+ keyboard_interrupted = False
+ interrupted = False
+ if not self._options.dry_run:
+ while not self._check_if_done():
+ manager_connection.run_message_loop(delay_secs=1.0)
+
+ # FIXME: implement stats.
+ thread_timings = []
+
+ # FIXME: should this be a class instead of a tuple?
+ return (keyboard_interrupted, interrupted, thread_timings,
+ self._group_stats, self._all_results)
+
+ def _check_if_done(self):
+ """Returns true iff all the workers have either completed or wedged."""
+ # FIXME: implement to check for wedged workers.
+ return self._done
+
+ def handle_started_test(self, src, test_info, hang_timeout):
+ # FIXME: implement
+ pass
+
+ def handle_done(self, src):
+ # FIXME: implement properly to handle multiple workers.
+ self._done = True
+ pass
+
+ def handle_exception(self, src, exception_info):
+ raise exception_info
+
+ def handle_finished_list(self, src, list_name, num_tests, elapsed_time):
+ # FIXME: update stats
+ pass
+
+ def handle_finished_test(self, src, result, elapsed_time):
+ self._update_summary_with_result(self._current_result_summary, result)
+
+ # FIXME: update stats.
+ self._all_results.append(result)
diff --git a/Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py b/Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py
new file mode 100644
index 0000000..47d4fbd
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/layout_package/worker.py
@@ -0,0 +1,104 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Handle messages from the TestRunner and execute actual tests."""
+
+import logging
+import sys
+import time
+
+from webkitpy.common.system import stack_utils
+
+from webkitpy.layout_tests.layout_package import manager_worker_broker
+from webkitpy.layout_tests.layout_package import test_results
+
+
+_log = logging.getLogger(__name__)
+
+
+class Worker(manager_worker_broker.AbstractWorker):
+ def __init__(self, worker_connection, worker_number, options):
+ self._worker_connection = worker_connection
+ self._worker_number = worker_number
+ self._options = options
+ self._name = 'worker/%d' % worker_number
+ self._done = False
+ self._port = None
+
+ def _deferred_init(self, port):
+ self._port = port
+
+ def is_done(self):
+ return self._done
+
+ def name(self):
+ return self._name
+
+ def run(self, port):
+ self._deferred_init(port)
+
+ _log.debug("%s starting" % self._name)
+
+ # FIXME: need to add in error handling, better logging.
+ self._worker_connection.run_message_loop()
+ self._worker_connection.post_message('done')
+
+ def handle_test_list(self, src, list_name, test_list):
+ # FIXME: check to see if we need to get the http lock.
+
+ start_time = time.time()
+ num_tests = 0
+ for test_input in test_list:
+ self._run_test(test_input)
+ num_tests += 1
+ self._worker_connection.yield_to_broker()
+
+ elapsed_time = time.time() - start_time
+ self._worker_connection.post_message('finished_list', list_name, num_tests, elapsed_time)
+
+ # FIXME: release the lock if necessary
+
+ def handle_stop(self, src):
+ self._done = True
+
+ def _run_test(self, test_input):
+
+ # FIXME: get real timeout value from SingleTestRunner
+ test_timeout_sec = int(test_input.timeout) / 1000
+ start = time.time()
+ self._worker_connection.post_message('started_test', test_input, test_timeout_sec)
+
+ # FIXME: actually run the test.
+ result = test_results.TestResult(test_input.filename, failures=[],
+ test_run_time=0, total_time_for_all_diffs=0, time_for_diffs={})
+
+ elapsed_time = time.time() - start
+
+ # FIXME: update stats, check for failures.
+
+ self._worker_connection.post_message('finished_test', result, elapsed_time)
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/base.py b/Tools/Scripts/webkitpy/layout_tests/port/base.py
index 6e5fabc..5ff4bff 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/base.py
@@ -121,15 +121,18 @@ class Port(object):
# certainly won't be available, so it's a good test to keep us
# from erroring out later.
self._pretty_patch_available = self._filesystem.exists(self._pretty_patch_path)
- self.set_option_default('configuration', None)
- if self._options.configuration is None:
+ if not hasattr(self._options, 'configuration') or self._options.configuration is None:
self._options.configuration = self.default_configuration()
+ self._test_configuration = None
def default_child_processes(self):
"""Return the number of DumpRenderTree instances to use for this
port."""
return self._executive.cpu_count()
+ def default_worker_model(self):
+ return 'old-threads'
+
def baseline_path(self):
"""Return the absolute path to the directory to store new baselines
in for this port."""
@@ -315,7 +318,7 @@ class Port(object):
path = self.expected_filename(test, '.checksum')
if not self.path_exists(path):
return None
- return self._filesystem.read_text_file(path)
+ return self._filesystem.read_binary_file(path)
def expected_image(self, test):
"""Returns the image we expect the test to produce."""
@@ -393,7 +396,7 @@ class Port(object):
driver = self.create_driver(0)
return driver.cmd_line()
- def update_baseline(self, path, data, encoding):
+ def update_baseline(self, path, data):
"""Updates the baseline for a test.
Args:
@@ -401,14 +404,8 @@ class Port(object):
the test. This function is used to update either generic or
platform-specific baselines, but we can't infer which here.
data: contents of the baseline.
- encoding: file encoding to use for the baseline.
"""
- # FIXME: remove the encoding parameter in favor of text/binary
- # functions.
- if encoding is None:
- self._filesystem.write_binary_file(path, data)
- else:
- self._filesystem.write_text_file(path, data)
+ self._filesystem.write_binary_file(path, data)
def uri_to_test_name(self, uri):
"""Return the base layout test name for a given URI.
@@ -465,6 +462,15 @@ class Port(object):
may be different (e.g., 'win-xp' instead of 'chromium-win-xp'."""
return self._name
+ def graphics_type(self):
+ """Returns whether the port uses accelerated graphics ('gpu') or not
+ ('cpu')."""
+ return 'cpu'
+
+ def real_name(self):
+ """Returns the actual name of the port, not the delegate's."""
+ return self.name()
+
def get_option(self, name, default_value=None):
# FIXME: Eventually we should not have to do a test for
# hasattr(), and we should be able to just do
@@ -496,9 +502,16 @@ class Port(object):
"""Relative unix-style path for a filename under the LayoutTests
directory. Filenames outside the LayoutTests directory should raise
an error."""
+ # FIXME: On Windows, does this return test_names with forward slashes,
+ # or windows-style relative paths?
assert filename.startswith(self.layout_tests_dir()), "%s did not start with %s" % (filename, self.layout_tests_dir())
return filename[len(self.layout_tests_dir()) + 1:]
+ def abspath_for_test(self, test_name):
+ """Returns the full path to the file for a given test name. This is the
+ inverse of relative_test_filename()."""
+ return self._filesystem.normpath(self._filesystem.join(self.layout_tests_dir(), test_name))
+
def results_directory(self):
"""Absolute path to the place to store the test results."""
raise NotImplementedError('Port.results_directory')
@@ -577,12 +590,25 @@ class Port(object):
if self._http_lock:
self._http_lock.cleanup_http_lock()
+ #
+ # TEST EXPECTATION-RELATED METHODS
+ #
+
+ def test_configuration(self):
+ """Returns the current TestConfiguration for the port."""
+ if not self._test_configuration:
+ self._test_configuration = TestConfiguration(self)
+ return self._test_configuration
+
+ def all_test_configurations(self):
+ return self.test_configuration().all_test_configurations()
+
def test_expectations(self):
"""Returns the test expectations for this port.
Basically this string should contain the equivalent of a
test_expectations file. See test_expectations.py for more details."""
- raise NotImplementedError('Port.test_expectations')
+ return self._filesystem.read_text_file(self.path_to_test_expectations_file())
def test_expectations_overrides(self):
"""Returns an optional set of overrides for the test_expectations.
@@ -593,18 +619,6 @@ class Port(object):
sync up the two repos."""
return None
- def test_base_platform_names(self):
- """Return a list of the 'base' platforms on your port. The base
- platforms represent different architectures, operating systems,
- or implementations (as opposed to different versions of a single
- platform). For example, 'mac' and 'win' might be different base
- platforms, wherease 'mac-tiger' and 'mac-leopard' might be
- different platforms. This routine is used by the rebaselining tool
- and the dashboards, and the strings correspond to the identifiers
- in your test expectations (*not* necessarily the platform names
- themselves)."""
- raise NotImplementedError('Port.base_test_platforms')
-
def test_platform_name(self):
"""Returns the string that corresponds to the given platform name
in the test expectations. This may be the same as name(), or it
@@ -810,6 +824,48 @@ class Port(object):
platform)
+class DriverInput(object):
+ """Holds the input parameters for a driver."""
+
+ def __init__(self, filename, timeout, image_hash):
+ """Initializes a DriverInput object.
+
+ Args:
+ filename: Full path to the test.
+ timeout: Timeout in msecs the driver should use while running the test
+ image_hash: A image checksum which is used to avoid doing an image dump if
+ the checksums match.
+ """
+ self.filename = filename
+ self.timeout = timeout
+ self.image_hash = image_hash
+
+
+class DriverOutput(object):
+ """Groups information about a output from driver for easy passing of data."""
+
+ def __init__(self, text, image, image_hash,
+ crash=False, test_time=None, timeout=False, error=''):
+ """Initializes a TestOutput object.
+
+ Args:
+ text: a text output
+ image: an image output
+ image_hash: a string containing the checksum of the image
+ crash: a boolean indicating whether the driver crashed on the test
+ test_time: a time which the test has taken
+ timeout: a boolean indicating whehter the test timed out
+ error: any unexpected or additional (or error) text output
+ """
+ self.text = text
+ self.image = image
+ self.image_hash = image_hash
+ self.crash = crash
+ self.test_time = test_time
+ self.timeout = timeout
+ self.error = error
+
+
class Driver:
"""Abstract interface for the DumpRenderTree interface."""
@@ -824,7 +880,7 @@ class Driver:
"""
raise NotImplementedError('Driver.__init__')
- def run_test(self, test_input):
+ def run_test(self, driver_input):
"""Run a single test and return the results.
Note that it is okay if a test times out or crashes and leaves
@@ -832,9 +888,9 @@ class Driver:
are responsible for cleaning up and ensuring things are okay.
Args:
- test_input: a TestInput object
+ driver_input: a DriverInput object
- Returns a TestOutput object.
+ Returns a DriverOutput object.
"""
raise NotImplementedError('Driver.run_test')
@@ -863,3 +919,68 @@ class Driver:
def stop(self):
raise NotImplementedError('Driver.stop')
+
+
+class TestConfiguration(object):
+ def __init__(self, port=None, os=None, version=None, architecture=None,
+ build_type=None, graphics_type=None):
+
+ # FIXME: We can get the O/S and version from test_platform_name()
+ # and version() for now, but those should go away and be cleaned up
+ # with more generic methods like operation_system() and os_version()
+ # or something. Note that we need to strip the leading '-' off the
+ # version string if it is present.
+ if port:
+ port_version = port.version()
+ self.os = os or port.test_platform_name().replace(port_version, '')
+ self.version = version or port_version[1:]
+ self.architecture = architecture or 'x86'
+ self.build_type = build_type or port._options.configuration.lower()
+ self.graphics_type = graphics_type or port.graphics_type()
+
+ def items(self):
+ return self.__dict__.items()
+
+ def keys(self):
+ return self.__dict__.keys()
+
+ def __str__(self):
+ return ("<%(os)s, %(version)s, %(build_type)s, %(graphics_type)s>" %
+ self.__dict__)
+
+ def __repr__(self):
+ return "TestConfig(os='%(os)s', version='%(version)s', architecture='%(architecture)s', build_type='%(build_type)s', graphics_type='%(graphics_type)s')" % self.__dict__
+
+ def values(self):
+ """Returns the configuration values of this instance as a tuple."""
+ return self.__dict__.values()
+
+ def all_test_configurations(self):
+ """Returns a sequence of the TestConfigurations the port supports."""
+ # By default, we assume we want to test every graphics type in
+ # every configuration on every system.
+ test_configurations = []
+ for system in self.all_systems():
+ for build_type in self.all_build_types():
+ for graphics_type in self.all_graphics_types():
+ test_configurations.append(TestConfiguration(
+ os=system[0],
+ version=system[1],
+ architecture=system[2],
+ build_type=build_type,
+ graphics_type=graphics_type))
+ return test_configurations
+
+ def all_systems(self):
+ return (('mac', 'leopard', 'x86'),
+ ('mac', 'snowleopard', 'x86'),
+ ('win', 'xp', 'x86'),
+ ('win', 'vista', 'x86'),
+ ('win', 'win7', 'x86'),
+ ('linux', 'hardy', 'x86'))
+
+ def all_build_types(self):
+ return ('debug', 'release')
+
+ def all_graphics_types(self):
+ return ('cpu', 'gpu')
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/base_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/base_unittest.py
index 72f2d05..ef90484 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/base_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/base_unittest.py
@@ -224,19 +224,6 @@ class PortTest(unittest.TestCase):
port = base.Port()
self.assertEqual(port.get_option('foo', 'bar'), 'bar')
- def test_set_option_default__unset(self):
- port = base.Port()
- port.set_option_default('foo', 'bar')
- self.assertEqual(port.get_option('foo'), 'bar')
-
- def test_set_option_default__set(self):
- options, args = optparse.OptionParser().parse_args([])
- options.foo = 'bar'
- port = base.Port(options=options)
- # This call should have no effect.
- port.set_option_default('foo', 'new_bar')
- self.assertEqual(port.get_option('foo'), 'bar')
-
def test_name__unset(self):
port = base.Port()
self.assertEqual(port.name(), None)
@@ -263,7 +250,6 @@ class VirtualTest(unittest.TestCase):
self.assertVirtual(port.test_platform_name)
self.assertVirtual(port.results_directory)
self.assertVirtual(port.test_expectations)
- self.assertVirtual(port.test_base_platform_names)
self.assertVirtual(port.test_platform_name)
self.assertVirtual(port.test_platforms)
self.assertVirtual(port.test_platform_name_to_name, None)
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
index ad1bea6..7d56fa2 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
@@ -41,16 +41,9 @@ import webbrowser
from webkitpy.common.system import executive
from webkitpy.common.system.path import cygpath
from webkitpy.layout_tests.layout_package import test_expectations
-from webkitpy.layout_tests.layout_package import test_output
-
-import base
-import http_server
-
-# Chromium DRT on OSX uses WebKitDriver.
-if sys.platform == 'darwin':
- import webkit
-
-import websocket_server
+from webkitpy.layout_tests.port import base
+from webkitpy.layout_tests.port import http_server
+from webkitpy.layout_tests.port import websocket_server
_log = logging.getLogger("webkitpy.layout_tests.port.chromium")
@@ -176,8 +169,6 @@ class ChromiumPort(base.Port):
return result
def driver_name(self):
- if self._options.use_test_shell:
- return "test_shell"
return "DumpRenderTree"
def path_from_chromium_base(self, *comps):
@@ -189,7 +180,7 @@ class ChromiumPort(base.Port):
if offset == -1:
self._chromium_base_dir = self._filesystem.join(
abspath[0:abspath.find('Tools')],
- 'WebKit', 'chromium')
+ 'Source', 'WebKit', 'chromium')
else:
self._chromium_base_dir = abspath[0:offset]
return self._filesystem.join(self._chromium_base_dir, *comps)
@@ -217,8 +208,6 @@ class ChromiumPort(base.Port):
def create_driver(self, worker_number):
"""Starts a new Driver and returns a handle to it."""
- if not self.get_option('use_test_shell') and sys.platform == 'darwin':
- return webkit.WebKitDriver(self, worker_number)
return ChromiumDriver(self, worker_number)
def start_helper(self):
@@ -241,9 +230,6 @@ class ChromiumPort(base.Port):
# http://bugs.python.org/issue1731717
self._helper.wait()
- def test_base_platform_names(self):
- return ('linux', 'mac', 'win')
-
def test_expectations(self):
"""Returns the test expectations for this port.
@@ -273,15 +259,14 @@ class ChromiumPort(base.Port):
all_test_files.update(extra_test_files)
expectations = test_expectations.TestExpectations(
- self, all_test_files, expectations_str, test_platform_name,
- is_debug_mode, is_lint_mode=False, overrides=overrides_str)
+ self, all_test_files, expectations_str, self.test_configuration(),
+ is_lint_mode=False, overrides=overrides_str)
tests_dir = self.layout_tests_dir()
return [self.relative_test_filename(test)
for test in expectations.get_tests_with_result_type(test_expectations.SKIP)]
def test_platform_names(self):
- return self.test_base_platform_names() + ('win-xp',
- 'win-vista', 'win-7')
+ return ('mac', 'win', 'linux', 'win-xp', 'win-vista', 'win-7')
def test_platform_name_to_name(self, test_platform_name):
if test_platform_name in self.test_platform_names():
@@ -340,13 +325,11 @@ class ChromiumPort(base.Port):
def _path_to_image_diff(self):
binary_name = 'ImageDiff'
- if self.get_option('use_test_shell'):
- binary_name = 'image_diff'
return self._build_path(self.get_option('configuration'), binary_name)
class ChromiumDriver(base.Driver):
- """Abstract interface for test_shell."""
+ """Abstract interface for DRT."""
def __init__(self, port, worker_number):
self._port = port
@@ -365,10 +348,7 @@ class ChromiumDriver(base.Driver):
cmd.append("--pixel-tests=" +
self._port._convert_path(self._image_path))
- if self._port.get_option('use_test_shell'):
- cmd.append('--layout-tests')
- else:
- cmd.append('--test-shell')
+ cmd.append('--test-shell')
if self._port.get_option('startup_dialog'):
cmd.append('--testshell-startup-dialog')
@@ -385,14 +365,12 @@ class ChromiumDriver(base.Driver):
if self._port.get_option('stress_deopt'):
cmd.append('--stress-deopt')
- # test_shell does not support accelerated compositing.
- if not self._port.get_option("use_test_shell"):
- if self._port.get_option('accelerated_compositing'):
- cmd.append('--enable-accelerated-compositing')
- if self._port.get_option('accelerated_2d_canvas'):
- cmd.append('--enable-accelerated-2d-canvas')
- if self._port.get_option('enable_hardware_gpu'):
- cmd.append('--enable-hardware-gpu')
+ if self._port.get_option('accelerated_compositing'):
+ cmd.append('--enable-accelerated-compositing')
+ if self._port.get_option('accelerated_2d_canvas'):
+ cmd.append('--enable-accelerated-2d-canvas')
+ if self._port.get_option('enable_hardware_gpu'):
+ cmd.append('--enable-hardware-gpu')
return cmd
def start(self):
@@ -420,17 +398,17 @@ class ChromiumDriver(base.Driver):
try:
if input:
if isinstance(input, unicode):
- # TestShell expects utf-8
+ # DRT expects utf-8
input = input.encode("utf-8")
self._proc.stdin.write(input)
# DumpRenderTree text output is always UTF-8. However some tests
# (e.g. webarchive) may spit out binary data instead of text so we
- # don't bother to decode the output (for either DRT or test_shell).
+ # don't bother to decode the output.
line = self._proc.stdout.readline()
# We could assert() here that line correctly decodes as UTF-8.
return (line, False)
except IOError, e:
- _log.error("IOError communicating w/ test_shell: " + str(e))
+ _log.error("IOError communicating w/ DRT: " + str(e))
return (None, True)
def _test_shell_command(self, uri, timeoutms, checksum):
@@ -465,7 +443,7 @@ class ChromiumDriver(base.Driver):
raise e
return self._output_image()
- def run_test(self, test_input):
+ def run_test(self, driver_input):
output = []
error = []
crash = False
@@ -475,9 +453,9 @@ class ChromiumDriver(base.Driver):
start_time = time.time()
- uri = self._port.filename_to_uri(test_input.filename)
- cmd = self._test_shell_command(uri, test_input.timeout,
- test_input.image_hash)
+ uri = self._port.filename_to_uri(driver_input.filename)
+ cmd = self._test_shell_command(uri, driver_input.timeout,
+ driver_input.image_hash)
(line, crash) = self._write_command_and_read_line(input=cmd)
while not crash and line.rstrip() != "#EOF":
@@ -485,7 +463,7 @@ class ChromiumDriver(base.Driver):
if line == '' and self.poll() is not None:
# This is hex code 0xc000001d, which is used for abrupt
# termination. This happens if we hit ctrl+c from the prompt
- # and we happen to be waiting on test_shell.
+ # and we happen to be waiting on DRT.
# sdoyon: Not sure for which OS and in what circumstances the
# above code is valid. What works for me under Linux to detect
# ctrl+c is for the subprocess returncode to be negative
@@ -519,7 +497,7 @@ class ChromiumDriver(base.Driver):
(line, crash) = self._write_command_and_read_line(input=None)
run_time = time.time() - start_time
- return test_output.TestOutput(
+ return base.DriverOutput(
''.join(output), self._output_image_with_retry(), actual_checksum,
crash, run_time, timeout, ''.join(error))
@@ -532,8 +510,8 @@ class ChromiumDriver(base.Driver):
if sys.platform not in ('win32', 'cygwin'):
# Closing stdin/stdout/stderr hangs sometimes on OS X,
# (see __init__(), above), and anyway we don't want to hang
- # the harness if test_shell is buggy, so we wait a couple
- # seconds to give test_shell a chance to clean up, but then
+ # the harness if DRT is buggy, so we wait a couple
+ # seconds to give DRT a chance to clean up, but then
# force-kill the process if necessary.
KILL_TIMEOUT = 3.0
timeout = time.time() + KILL_TIMEOUT
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
index b88d8aa..e8c75c4 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
@@ -30,64 +30,64 @@ import chromium_linux
import chromium_mac
import chromium_win
+from webkitpy.layout_tests.port import test_files
-def get(**kwargs):
+
+def get(platform=None, port_name='chromium-gpu', **kwargs):
"""Some tests have slightly different results when run while using
hardware acceleration. In those cases, we prepend an additional directory
to the baseline paths."""
- port_name = kwargs.get('port_name', None)
+ platform = platform or sys.platform
if port_name == 'chromium-gpu':
- if sys.platform in ('cygwin', 'win32'):
+ if platform in ('cygwin', 'win32'):
port_name = 'chromium-gpu-win'
- elif sys.platform == 'linux2':
+ elif platform == 'linux2':
port_name = 'chromium-gpu-linux'
- elif sys.platform == 'darwin':
+ elif platform == 'darwin':
port_name = 'chromium-gpu-mac'
else:
- raise NotImplementedError('unsupported platform: %s' %
- sys.platform)
+ raise NotImplementedError('unsupported platform: %s' % platform)
if port_name == 'chromium-gpu-linux':
- return ChromiumGpuLinuxPort(**kwargs)
-
- if port_name.startswith('chromium-gpu-mac'):
- return ChromiumGpuMacPort(**kwargs)
-
- if port_name.startswith('chromium-gpu-win'):
- return ChromiumGpuWinPort(**kwargs)
-
+ return ChromiumGpuLinuxPort(port_name=port_name, **kwargs)
+ if port_name == 'chromium-gpu-mac':
+ return ChromiumGpuMacPort(port_name=port_name, **kwargs)
+ if port_name == 'chromium-gpu-win':
+ return ChromiumGpuWinPort(port_name=port_name, **kwargs)
raise NotImplementedError('unsupported port: %s' % port_name)
-def _set_gpu_options(options):
- if options:
- if options.accelerated_compositing is None:
- options.accelerated_compositing = True
- if options.accelerated_2d_canvas is None:
- options.accelerated_2d_canvas = True
+# FIXME: These should really be a mixin class.
- # FIXME: Remove this after http://codereview.chromium.org/5133001/ is enabled
- # on the bots.
- if options.builder_name is not None and not ' - GPU' in options.builder_name:
- options.builder_name = options.builder_name + ' - GPU'
+def _set_gpu_options(port):
+ if port.get_option('accelerated_compositing') is None:
+ port._options.accelerated_compositing = True
+ if port.get_option('accelerated_2d_canvas') is None:
+ port._options.accelerated_2d_canvas = True
+ # FIXME: Remove this after http://codereview.chromium.org/5133001/ is enabled
+ # on the bots.
+ if port.get_option('builder_name') is not None and not ' - GPU' in port._options.builder_name:
+ port._options.builder_name += ' - GPU'
-def _gpu_overrides(port):
- try:
- overrides_path = port.path_from_chromium_base('webkit', 'tools',
- 'layout_tests', 'test_expectations_gpu.txt')
- except AssertionError:
- return None
- if not port._filesystem.exists(overrides_path):
- return None
- return port._filesystem.read_text_file(overrides_path)
+
+def _tests(port, paths):
+ if not paths:
+ paths = ['compositing', 'platform/chromium/compositing']
+ if not port.name().startswith('chromium-gpu-mac'):
+ # Canvas is not yet accelerated on the Mac, so there's no point
+ # in running the tests there.
+ paths += ['fast/canvas', 'canvas/philip']
+ # invalidate_rect.html tests a bug in the compositor.
+ # See https://bugs.webkit.org/show_bug.cgi?id=53117
+ paths += ['plugins/invalidate_rect.html']
+ return test_files.find(port, paths)
class ChromiumGpuLinuxPort(chromium_linux.ChromiumLinuxPort):
- def __init__(self, **kwargs):
- kwargs.setdefault('port_name', 'chromium-gpu-linux')
- _set_gpu_options(kwargs.get('options'))
- chromium_linux.ChromiumLinuxPort.__init__(self, **kwargs)
+ def __init__(self, port_name='chromium-gpu-linux', **kwargs):
+ chromium_linux.ChromiumLinuxPort.__init__(self, port_name=port_name, **kwargs)
+ _set_gpu_options(self)
def baseline_search_path(self):
# Mimic the Linux -> Win expectations fallback in the ordinary Chromium port.
@@ -97,19 +97,18 @@ class ChromiumGpuLinuxPort(chromium_linux.ChromiumLinuxPort):
def default_child_processes(self):
return 1
- def path_to_test_expectations_file(self):
- return self.path_from_webkit_base('LayoutTests', 'platform',
- 'chromium-gpu', 'test_expectations.txt')
+ def graphics_type(self):
+ return 'gpu'
+
+ def tests(self, paths):
+ return _tests(self, paths)
- def test_expectations_overrides(self):
- return _gpu_overrides(self)
class ChromiumGpuMacPort(chromium_mac.ChromiumMacPort):
- def __init__(self, **kwargs):
- kwargs.setdefault('port_name', 'chromium-gpu-mac')
- _set_gpu_options(kwargs.get('options'))
- chromium_mac.ChromiumMacPort.__init__(self, **kwargs)
+ def __init__(self, port_name='chromium-gpu-mac', **kwargs):
+ chromium_mac.ChromiumMacPort.__init__(self, port_name=port_name, **kwargs)
+ _set_gpu_options(self)
def baseline_search_path(self):
return (map(self._webkit_baseline_path, ['chromium-gpu-mac', 'chromium-gpu']) +
@@ -118,19 +117,18 @@ class ChromiumGpuMacPort(chromium_mac.ChromiumMacPort):
def default_child_processes(self):
return 1
- def path_to_test_expectations_file(self):
- return self.path_from_webkit_base('LayoutTests', 'platform',
- 'chromium-gpu', 'test_expectations.txt')
+ def graphics_type(self):
+ return 'gpu'
+
+ def tests(self, paths):
+ return _tests(self, paths)
- def test_expectations_overrides(self):
- return _gpu_overrides(self)
class ChromiumGpuWinPort(chromium_win.ChromiumWinPort):
- def __init__(self, **kwargs):
- kwargs.setdefault('port_name', 'chromium-gpu-win' + self.version())
- _set_gpu_options(kwargs.get('options'))
- chromium_win.ChromiumWinPort.__init__(self, **kwargs)
+ def __init__(self, port_name='chromium-gpu-win', **kwargs):
+ chromium_win.ChromiumWinPort.__init__(self, port_name=port_name, **kwargs)
+ _set_gpu_options(self)
def baseline_search_path(self):
return (map(self._webkit_baseline_path, ['chromium-gpu-win', 'chromium-gpu']) +
@@ -139,9 +137,8 @@ class ChromiumGpuWinPort(chromium_win.ChromiumWinPort):
def default_child_processes(self):
return 1
- def path_to_test_expectations_file(self):
- return self.path_from_webkit_base('LayoutTests', 'platform',
- 'chromium-gpu', 'test_expectations.txt')
+ def graphics_type(self):
+ return 'gpu'
- def test_expectations_overrides(self):
- return _gpu_overrides(self)
+ def tests(self, paths):
+ return _tests(self, paths)
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py
index 0bfb127..96962ec 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_gpu_unittest.py
@@ -40,20 +40,34 @@ class ChromiumGpuTest(unittest.TestCase):
def test_get_chromium_gpu_win(self):
self.assertOverridesWorked('chromium-gpu-win')
- def assertOverridesWorked(self, port_name):
+ def test_get_chromium_gpu__on_linux(self):
+ self.assertOverridesWorked('chromium-gpu-linux', 'chromium-gpu', 'linux2')
+
+ def test_get_chromium_gpu__on_mac(self):
+ self.assertOverridesWorked('chromium-gpu-mac', 'chromium-gpu', 'darwin')
+
+ def test_get_chromium_gpu__on_win(self):
+ self.assertOverridesWorked('chromium-gpu-win', 'chromium-gpu', 'win32')
+ self.assertOverridesWorked('chromium-gpu-win', 'chromium-gpu', 'cygwin')
+
+ def assertOverridesWorked(self, port_name, input_name=None, platform=None):
# test that we got the right port
mock_options = mocktool.MockOptions(accelerated_compositing=None,
accelerated_2d_canvas=None,
builder_name='foo',
child_processes=None)
- port = chromium_gpu.get(port_name=port_name, options=mock_options)
+ if input_name and platform:
+ port = chromium_gpu.get(platform=platform, port_name=input_name,
+ options=mock_options)
+ else:
+ port = chromium_gpu.get(port_name=port_name, options=mock_options)
self.assertTrue(port._options.accelerated_compositing)
self.assertTrue(port._options.accelerated_2d_canvas)
self.assertEqual(port.default_child_processes(), 1)
self.assertEqual(port._options.builder_name, 'foo - GPU')
- # we use startswith() instead of Equal to gloss over platform versions.
- self.assertTrue(port.name().startswith(port_name))
+ # We don't support platform-specific versions of the GPU port yet.
+ self.assertEqual(port.name(), port_name)
# test that it has the right directories in front of the search path.
paths = port.baseline_search_path()
@@ -64,9 +78,24 @@ class ChromiumGpuTest(unittest.TestCase):
else:
self.assertEqual(port._webkit_baseline_path('chromium-gpu'), paths[1])
- # Test that we have the right expectations file.
- self.assertTrue('chromium-gpu' in
- port.path_to_test_expectations_file())
+
+ # Test that we're limiting to the correct directories.
+ # These two tests are picked mostly at random, but we make sure they
+ # exist separately from being filtered out by the port.
+ files = port.tests(None)
+
+ path = port.abspath_for_test('compositing/checkerboard.html')
+ self.assertTrue(port._filesystem.exists(path))
+ self.assertTrue(path in files)
+
+ path = port.abspath_for_test('fast/html/keygen.html')
+ self.assertTrue(port._filesystem.exists(path))
+ self.assertFalse(path in files)
+ if port_name.startswith('chromium-gpu-mac'):
+ path = port.abspath_for_test('fast/canvas/set-colors.html')
+ self.assertTrue(port._filesystem.exists(path))
+ self.assertFalse(path in files)
+
if __name__ == '__main__':
unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_linux.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_linux.py
index c1c85f8..c3c5a21 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_linux.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_linux.py
@@ -85,7 +85,7 @@ class ChromiumLinuxPort(chromium.ChromiumPort):
base = self.path_from_chromium_base()
if self._filesystem.exists(self._filesystem.join(base, 'sconsbuild')):
return self._filesystem.join(base, 'sconsbuild', *comps)
- if self._filesystem.exists(self._filesystem.join(base, 'out', *comps)) or self.get_option('use_test_shell'):
+ if self._filesystem.exists(self._filesystem.join(base, 'out', *comps)):
return self._filesystem.join(base, 'out', *comps)
base = self.path_from_webkit_base()
if self._filesystem.exists(self._filesystem.join(base, 'sconsbuild')):
@@ -153,8 +153,6 @@ class ChromiumLinuxPort(chromium.ChromiumPort):
if not configuration:
configuration = self.get_option('configuration')
binary_name = 'DumpRenderTree'
- if self.get_option('use_test_shell'):
- binary_name = 'test_shell'
return self._build_path(configuration, binary_name)
def _path_to_helper(self):
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_mac.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_mac.py
index 5360ab3..17862a2 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_mac.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_mac.py
@@ -69,18 +69,18 @@ class ChromiumMacPort(chromium.ChromiumPort):
return result
def default_child_processes(self):
- # FIXME: we need to run single-threaded for now. See
- # https://bugs.webkit.org/show_bug.cgi?id=38553. Unfortunately this
- # routine is called right before the logger is configured, so if we
- # try to _log.warning(), it gets thrown away.
- import sys
- sys.stderr.write("Defaulting to one child - see https://bugs.webkit.org/show_bug.cgi?id=38553\n")
- return 1
+ if self.get_option('worker_model') == 'old-threads':
+ # FIXME: we need to run single-threaded for now. See
+ # https://bugs.webkit.org/show_bug.cgi?id=38553. Unfortunately this
+ # routine is called right before the logger is configured, so if we
+ # try to _log.warning(), it gets thrown away.
+ import sys
+ sys.stderr.write("Defaulting to one child - see https://bugs.webkit.org/show_bug.cgi?id=38553\n")
+ return 1
+
+ return chromium.ChromiumPort.default_child_processes(self)
def driver_name(self):
- """name for this port's equivalent of DumpRenderTree."""
- if self.get_option('use_test_shell'):
- return "TestShell"
return "DumpRenderTree"
def test_platform_name(self):
@@ -110,7 +110,7 @@ class ChromiumMacPort(chromium.ChromiumPort):
*comps)
path = self.path_from_chromium_base('xcodebuild', *comps)
- if self._filesystem.exists(path) or self.get_option('use_test_shell'):
+ if self._filesystem.exists(path):
return path
return self.path_from_webkit_base(
'Source', 'WebKit', 'chromium', 'xcodebuild', *comps)
@@ -154,8 +154,6 @@ class ChromiumMacPort(chromium.ChromiumPort):
def _path_to_helper(self):
binary_name = 'LayoutTestHelper'
- if self.get_option('use_test_shell'):
- binary_name = 'layout_test_helper'
return self._build_path(self.get_option('configuration'), binary_name)
def _path_to_wdiff(self):
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py
index 6c8987b..b89c8cc 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py
@@ -116,13 +116,6 @@ class ChromiumPortTest(unittest.TestCase):
port = ChromiumPortTest.TestMacPort(options=mock_options)
self.assertTrue(port._path_to_image_diff().endswith(
'/xcodebuild/default/ImageDiff'))
- mock_options = mocktool.MockOptions(use_test_shell=True)
- port = ChromiumPortTest.TestLinuxPort(options=mock_options)
- self.assertTrue(port._path_to_image_diff().endswith(
- '/out/default/image_diff'), msg=port._path_to_image_diff())
- port = ChromiumPortTest.TestMacPort(options=mock_options)
- self.assertTrue(port._path_to_image_diff().endswith(
- '/xcodebuild/default/image_diff'))
# FIXME: Figure out how this is going to work on Windows.
#port = chromium_win.ChromiumWinPort('test-port', options=MockOptions())
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py b/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py
index 14f2777..f4cbf80 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py
@@ -113,9 +113,9 @@ class ChromiumWinPort(chromium.ChromiumPort):
if self._filesystem.exists(p):
return p
p = self.path_from_chromium_base('chrome', *comps)
- if self._filesystem.exists(p) or self.get_option('use_test_shell'):
+ if self._filesystem.exists(p):
return p
- return self._filesystem.join(self.path_from_webkit_base(), 'WebKit', 'chromium', *comps)
+ return self._filesystem.join(self.path_from_webkit_base(), 'Source', 'WebKit', 'chromium', *comps)
def _lighttpd_path(self, *comps):
return self.path_from_chromium_base('third_party', 'lighttpd', 'win',
@@ -141,20 +141,14 @@ class ChromiumWinPort(chromium.ChromiumPort):
if not configuration:
configuration = self.get_option('configuration')
binary_name = 'DumpRenderTree.exe'
- if self.get_option('use_test_shell'):
- binary_name = 'test_shell.exe'
return self._build_path(configuration, binary_name)
def _path_to_helper(self):
binary_name = 'LayoutTestHelper.exe'
- if self.get_option('use_test_shell'):
- binary_name = 'layout_test_helper.exe'
return self._build_path(self.get_option('configuration'), binary_name)
def _path_to_image_diff(self):
binary_name = 'ImageDiff.exe'
- if self.get_option('use_test_shell'):
- binary_name = 'image_diff.exe'
return self._build_path(self.get_option('configuration'), binary_name)
def _path_to_wdiff(self):
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/dryrun.py b/Tools/Scripts/webkitpy/layout_tests/port/dryrun.py
index 4ed34e6..6b3bd51 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/dryrun.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/dryrun.py
@@ -50,8 +50,6 @@ import os
import sys
import time
-from webkitpy.layout_tests.layout_package import test_output
-
import base
import factory
@@ -71,6 +69,12 @@ class DryRunPort(object):
def __getattr__(self, name):
return getattr(self.__delegate, name)
+ def acquire_http_lock(self):
+ pass
+
+ def release_http_lock(self):
+ pass
+
def check_build(self, needs_http):
return True
@@ -112,18 +116,18 @@ class DryrunDriver(base.Driver):
def poll(self):
return None
- def run_test(self, test_input):
+ def run_test(self, driver_input):
start_time = time.time()
- text_output = self._port.expected_text(test_input.filename)
+ text_output = self._port.expected_text(driver_input.filename)
- if test_input.image_hash is not None:
- image = self._port.expected_image(test_input.filename)
- hash = self._port.expected_checksum(test_input.filename)
+ if driver_input.image_hash is not None:
+ image = self._port.expected_image(driver_input.filename)
+ hash = self._port.expected_checksum(driver_input.filename)
else:
image = None
hash = None
- return test_output.TestOutput(text_output, image, hash, False,
- time.time() - start_time, False, None)
+ return base.DriverOutput(text_output, image, hash, False,
+ time.time() - start_time, False, '')
def start(self):
pass
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/factory.py b/Tools/Scripts/webkitpy/layout_tests/port/factory.py
index 6935744..7ae6eb6 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/factory.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/factory.py
@@ -70,12 +70,15 @@ def _get_kwargs(**kwargs):
raise NotImplementedError('unknown port; sys.platform = "%s"' %
sys.platform)
- if port_to_use == 'test':
+ if port_to_use.startswith('test'):
import test
maker = test.TestPort
elif port_to_use.startswith('dryrun'):
import dryrun
maker = dryrun.DryRunPort
+ elif port_to_use.startswith('mock-'):
+ import mock_drt
+ maker = mock_drt.MockDRTPort
elif port_to_use.startswith('mac'):
import mac
maker = mac.MacPort
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py b/Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py
index 52a0403..2a43e81 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py
@@ -67,7 +67,7 @@ class HttpServerBase(object):
url = 'http%s://127.0.0.1:%d/' % (http_suffix, mapping['port'])
try:
- response = urllib.urlopen(url)
+ response = urllib.urlopen(url, proxies={})
_log.debug("Server running at %s" % url)
except IOError, e:
_log.debug("Server NOT running at %s: %s" % (url, e))
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/mac.py b/Tools/Scripts/webkitpy/layout_tests/port/mac.py
index 0622196..1398ed3 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/mac.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/mac.py
@@ -33,9 +33,7 @@ import os
import platform
import signal
-import webkitpy.common.system.ospath as ospath
-import webkitpy.layout_tests.port.server_process as server_process
-from webkitpy.layout_tests.port.webkit import WebKitPort, WebKitDriver
+from webkitpy.layout_tests.port.webkit import WebKitPort
_log = logging.getLogger("webkitpy.layout_tests.port.mac")
@@ -52,7 +50,7 @@ class MacPort(WebKitPort):
# four threads in parallel.
# See https://bugs.webkit.org/show_bug.cgi?id=36622
child_processes = WebKitPort.default_child_processes(self)
- if child_processes > 4:
+ if self.get_option('worker_model') == 'old-threads' and child_processes > 4:
return 4
return child_processes
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/mac_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/mac_unittest.py
index d383a4c..ef04679 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/mac_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/mac_unittest.py
@@ -35,23 +35,31 @@ import port_testcase
class MacTest(port_testcase.PortTestCase):
- def make_port(self, options=port_testcase.mock_options):
+ def make_port(self, port_name=None, options=port_testcase.mock_options):
if sys.platform != 'darwin':
return None
- port_obj = mac.MacPort(options=options)
+ port_obj = mac.MacPort(port_name=port_name, options=options)
port_obj._options.results_directory = port_obj.results_directory()
port_obj._options.configuration = 'Release'
return port_obj
- def test_skipped_file_paths(self):
- port = self.make_port()
+ def assert_skipped_files_for_version(self, port_name, expected_paths):
+ port = self.make_port(port_name)
if not port:
return
skipped_paths = port._skipped_file_paths()
# FIXME: _skipped_file_paths should return WebKit-relative paths.
# So to make it unit testable, we strip the WebKit directory from the path.
relative_paths = [path[len(port.path_from_webkit_base()):] for path in skipped_paths]
- self.assertEqual(relative_paths, ['LayoutTests/platform/mac-leopard/Skipped', 'LayoutTests/platform/mac/Skipped'])
+ self.assertEqual(relative_paths, expected_paths)
+
+ def test_skipped_file_paths(self):
+ self.assert_skipped_files_for_version('mac',
+ ['/LayoutTests/platform/mac/Skipped'])
+ self.assert_skipped_files_for_version('mac-snowleopard',
+ ['/LayoutTests/platform/mac-snowleopard/Skipped', '/LayoutTests/platform/mac/Skipped'])
+ self.assert_skipped_files_for_version('mac-leopard',
+ ['/LayoutTests/platform/mac-leopard/Skipped', '/LayoutTests/platform/mac/Skipped'])
example_skipped_file = u"""
# <rdar://problem/5647952> fast/events/mouseout-on-window.html needs mac DRT to issue mouse out events
@@ -69,12 +77,11 @@ svg/batik/text/smallFonts.svg
"svg/batik/text/smallFonts.svg",
]
- def test_skipped_file_paths(self):
+ def test_tests_from_skipped_file_contents(self):
port = self.make_port()
if not port:
return
- skipped_file = StringIO.StringIO(self.example_skipped_file)
- self.assertEqual(port._tests_from_skipped_file(skipped_file), self.example_skipped_tests)
+ self.assertEqual(port._tests_from_skipped_file_contents(self.example_skipped_file), self.example_skipped_tests)
if __name__ == '__main__':
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py b/Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py
new file mode 100644
index 0000000..1147846
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/port/mock_drt.py
@@ -0,0 +1,280 @@
+#!/usr/bin/env python
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the Google name nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+This is an implementation of the Port interface that overrides other
+ports and changes the Driver binary to "MockDRT".
+"""
+
+import logging
+import optparse
+import os
+import sys
+
+from webkitpy.common.system import filesystem
+
+from webkitpy.layout_tests.port import base
+from webkitpy.layout_tests.port import factory
+
+_log = logging.getLogger(__name__)
+
+
+class MockDRTPort(object):
+ """MockPort implementation of the Port interface."""
+
+ def __init__(self, **kwargs):
+ prefix = 'mock-'
+ if 'port_name' in kwargs:
+ kwargs['port_name'] = kwargs['port_name'][len(prefix):]
+ self.__delegate = factory.get(**kwargs)
+ self.__real_name = prefix + self.__delegate.name()
+
+ def real_name(self):
+ return self.__real_name
+
+ def __getattr__(self, name):
+ return getattr(self.__delegate, name)
+
+ def acquire_http_lock(self):
+ pass
+
+ def release_http_lock(self):
+ pass
+
+ def check_build(self, needs_http):
+ return True
+
+ def check_sys_deps(self, needs_http):
+ return True
+
+ def driver_cmd_line(self):
+ driver = self.create_driver(0)
+ return driver.cmd_line()
+
+ def _path_to_driver(self):
+ return os.path.abspath(__file__)
+
+ def create_driver(self, worker_number):
+ # We need to create a driver object as the delegate would, but
+ # overwrite the path to the driver binary in its command line. We do
+ # this by actually overwriting its cmd_line() method with a proxy
+ # method that splices in the mock_drt path and command line arguments
+ # in place of the actual path to the driver binary.
+
+ def overriding_cmd_line():
+ cmd = self.__original_driver_cmd_line()
+ index = cmd.index(self.__delegate._path_to_driver())
+ cmd[index:index + 1] = [sys.executable, self._path_to_driver(),
+ '--platform', self.name()]
+ return cmd
+
+ delegated_driver = self.__delegate.create_driver(worker_number)
+ self.__original_driver_cmd_line = delegated_driver.cmd_line
+ delegated_driver.cmd_line = overriding_cmd_line
+ return delegated_driver
+
+ def start_helper(self):
+ pass
+
+ def start_http_server(self):
+ pass
+
+ def start_websocket_server(self):
+ pass
+
+ def stop_helper(self):
+ pass
+
+ def stop_http_server(self):
+ pass
+
+ def stop_websocket_server(self):
+ pass
+
+
+def main(argv, fs, stdin, stdout, stderr):
+ """Run the tests."""
+
+ options, args = parse_options(argv)
+ if options.chromium:
+ drt = MockChromiumDRT(options, args, fs, stdin, stdout, stderr)
+ else:
+ drt = MockDRT(options, args, fs, stdin, stdout, stderr)
+ return drt.run()
+
+
+def parse_options(argv):
+ # FIXME: We have to do custom arg parsing instead of using the optparse
+ # module. First, Chromium and non-Chromium DRTs have a different argument
+ # syntax. Chromium uses --pixel-tests=<path>, and non-Chromium uses
+ # --pixel-tests as a boolean flag. Second, we don't want to have to list
+ # every command line flag DRT accepts, but optparse complains about
+ # unrecognized flags. At some point it might be good to share a common
+ # DRT options class between this file and webkit.py and chromium.py
+ # just to get better type checking.
+ platform_index = argv.index('--platform')
+ platform = argv[platform_index + 1]
+
+ pixel_tests = False
+ pixel_path = None
+ chromium = False
+ if platform.startswith('chromium'):
+ chromium = True
+ for arg in argv:
+ if arg.startswith('--pixel-tests'):
+ pixel_tests = True
+ pixel_path = arg[len('--pixel-tests='):]
+ else:
+ pixel_tests = '--pixel-tests' in argv
+ options = base.DummyOptions(chromium=chromium,
+ platform=platform,
+ pixel_tests=pixel_tests,
+ pixel_path=pixel_path)
+ return (options, [])
+
+
+# FIXME: Should probably change this to use DriverInput after
+# https://bugs.webkit.org/show_bug.cgi?id=53004 lands.
+class _DRTInput(object):
+ def __init__(self, line):
+ vals = line.strip().split("'")
+ if len(vals) == 1:
+ self.uri = vals[0]
+ self.checksum = None
+ else:
+ self.uri = vals[0]
+ self.checksum = vals[1]
+
+
+class MockDRT(object):
+ def __init__(self, options, args, filesystem, stdin, stdout, stderr):
+ self._options = options
+ self._args = args
+ self._filesystem = filesystem
+ self._stdout = stdout
+ self._stdin = stdin
+ self._stderr = stderr
+
+ port_name = None
+ if options.platform:
+ port_name = options.platform
+ self._port = factory.get(port_name, options=options, filesystem=filesystem)
+
+ def run(self):
+ while True:
+ line = self._stdin.readline()
+ if not line:
+ break
+ self.run_one_test(self.parse_input(line))
+ return 0
+
+ def parse_input(self, line):
+ return _DRTInput(line)
+
+ def run_one_test(self, test_input):
+ port = self._port
+ if test_input.uri.startswith('http'):
+ test_name = port.uri_to_test_name(test_input.uri)
+ test_path = self._filesystem.join(port.layout_tests_dir(), test_name)
+ else:
+ test_path = test_input.uri
+
+ actual_text = port.expected_text(test_path)
+ if self._options.pixel_tests and test_input.checksum:
+ actual_checksum = port.expected_checksum(test_path)
+ actual_image = port.expected_image(test_path)
+
+ self._stdout.write('Content-Type: text/plain\n')
+
+ # FIXME: Note that we don't ensure there is a trailing newline!
+ # This mirrors actual (Mac) DRT behavior but is a bug.
+ self._stdout.write(actual_text)
+ self._stdout.write('#EOF\n')
+
+ if self._options.pixel_tests and test_input.checksum:
+ self._stdout.write('\n')
+ self._stdout.write('ActualHash: %s\n' % actual_checksum)
+ self._stdout.write('ExpectedHash: %s\n' % test_input.checksum)
+ if actual_checksum != test_input.checksum:
+ self._stdout.write('Content-Type: image/png\n')
+ self._stdout.write('Content-Length: %s\n\n' % len(actual_image))
+ self._stdout.write(actual_image)
+ self._stdout.write('#EOF\n')
+ self._stdout.flush()
+ self._stderr.flush()
+
+
+# FIXME: Should probably change this to use DriverInput after
+# https://bugs.webkit.org/show_bug.cgi?id=53004 lands.
+class _ChromiumDRTInput(_DRTInput):
+ def __init__(self, line):
+ vals = line.strip().split()
+ if len(vals) == 3:
+ self.uri, self.timeout, self.checksum = vals
+ else:
+ self.uri = vals[0]
+ self.timeout = vals[1]
+ self.checksum = None
+
+
+class MockChromiumDRT(MockDRT):
+ def parse_input(self, line):
+ return _ChromiumDRTInput(line)
+
+ def run_one_test(self, test_input):
+ port = self._port
+ test_name = self._port.uri_to_test_name(test_input.uri)
+ test_path = self._filesystem.join(port.layout_tests_dir(), test_name)
+
+ actual_text = port.expected_text(test_path)
+ actual_image = ''
+ actual_checksum = ''
+ if self._options.pixel_tests and test_input.checksum:
+ actual_checksum = port.expected_checksum(test_path)
+ if actual_checksum != test_input.checksum:
+ actual_image = port.expected_image(test_path)
+
+ self._stdout.write("#URL:%s\n" % test_input.uri)
+ if self._options.pixel_tests and test_input.checksum:
+ self._stdout.write("#MD5:%s\n" % actual_checksum)
+ self._filesystem.write_binary_file(self._options.pixel_path,
+ actual_image)
+ self._stdout.write(actual_text)
+
+ # FIXME: (See above FIXME as well). Chromium DRT appears to always
+ # ensure the text output has a trailing newline. Mac DRT does not.
+ if not actual_text.endswith('\n'):
+ self._stdout.write('\n')
+ self._stdout.write('#EOF\n')
+ self._stdout.flush()
+
+
+if __name__ == '__main__':
+ fs = filesystem.FileSystem()
+ sys.exit(main(sys.argv[1:], fs, sys.stdin, sys.stdout, sys.stderr))
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py
new file mode 100644
index 0000000..1506315
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py
@@ -0,0 +1,261 @@
+#!/usr/bin/env python
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Unit tests for MockDRT."""
+
+import unittest
+
+from webkitpy.common import newstringio
+
+from webkitpy.layout_tests.port import mock_drt
+from webkitpy.layout_tests.port import factory
+from webkitpy.layout_tests.port import port_testcase
+from webkitpy.layout_tests.port import test
+
+
+class MockDRTPortTest(port_testcase.PortTestCase):
+ def make_port(self):
+ return mock_drt.MockDRTPort()
+
+ def test_port_name_in_constructor(self):
+ self.assertTrue(mock_drt.MockDRTPort(port_name='mock-test'))
+
+ def test_acquire_http_lock(self):
+ # Only checking that no exception is raised.
+ self.make_port().acquire_http_lock()
+
+ def test_release_http_lock(self):
+ # Only checking that no exception is raised.
+ self.make_port().release_http_lock()
+
+ def test_check_build(self):
+ port = self.make_port()
+ self.assertTrue(port.check_build(True))
+
+ def test_check_sys_deps(self):
+ port = self.make_port()
+ self.assertTrue(port.check_sys_deps(True))
+
+ def test_start_helper(self):
+ # Only checking that no exception is raised.
+ self.make_port().start_helper()
+
+ def test_start_http_server(self):
+ # Only checking that no exception is raised.
+ self.make_port().start_http_server()
+
+ def test_start_websocket_server(self):
+ # Only checking that no exception is raised.
+ self.make_port().start_websocket_server()
+
+ def test_stop_helper(self):
+ # Only checking that no exception is raised.
+ self.make_port().stop_helper()
+
+ def test_stop_http_server(self):
+ # Only checking that no exception is raised.
+ self.make_port().stop_http_server()
+
+ def test_stop_websocket_server(self):
+ # Only checking that no exception is raised.
+ self.make_port().stop_websocket_server()
+
+
+class MockDRTTest(unittest.TestCase):
+ def to_path(self, port, test_name):
+ return port._filesystem.join(port.layout_tests_dir(), test_name)
+
+ def input_line(self, port, test_name, checksum=None):
+ url = port.filename_to_uri(self.to_path(port, test_name))
+ # FIXME: we shouldn't have to work around platform-specific issues
+ # here.
+ if url.startswith('file:////'):
+ url = url[len('file:////') - 1:]
+ if url.startswith('file:///'):
+ url = url[len('file:///') - 1:]
+
+ if checksum:
+ return url + "'" + checksum + '\n'
+ return url + '\n'
+
+ def extra_args(self, pixel_tests):
+ if pixel_tests:
+ return ['--pixel-tests', '-']
+ return ['-']
+
+ def make_drt(self, options, args, filesystem, stdin, stdout, stderr):
+ return mock_drt.MockDRT(options, args, filesystem, stdin, stdout, stderr)
+
+ def make_input_output(self, port, test_name, pixel_tests,
+ expected_checksum, drt_output, drt_input=None):
+ path = self.to_path(port, test_name)
+ if pixel_tests:
+ if not expected_checksum:
+ expected_checksum = port.expected_checksum(path)
+ if not drt_input:
+ drt_input = self.input_line(port, test_name, expected_checksum)
+ text_output = port.expected_text(path)
+
+ if not drt_output:
+ drt_output = self.expected_output(port, test_name, pixel_tests,
+ text_output, expected_checksum)
+ return (drt_input, drt_output)
+
+ def expected_output(self, port, test_name, pixel_tests, text_output, expected_checksum):
+ if pixel_tests and expected_checksum:
+ return ['Content-Type: text/plain\n',
+ text_output,
+ '#EOF\n',
+ '\n',
+ 'ActualHash: %s\n' % expected_checksum,
+ 'ExpectedHash: %s\n' % expected_checksum,
+ '#EOF\n']
+ else:
+ return ['Content-Type: text/plain\n',
+ text_output,
+ '#EOF\n',
+ '#EOF\n']
+
+ def assertTest(self, test_name, pixel_tests, expected_checksum=None,
+ drt_output=None, filesystem=None):
+ platform = 'test'
+ filesystem = filesystem or test.unit_test_filesystem()
+ port = factory.get(platform, filesystem=filesystem)
+ drt_input, drt_output = self.make_input_output(port, test_name,
+ pixel_tests, expected_checksum, drt_output)
+
+ args = ['--platform', 'test'] + self.extra_args(pixel_tests)
+ stdin = newstringio.StringIO(drt_input)
+ stdout = newstringio.StringIO()
+ stderr = newstringio.StringIO()
+ options, args = mock_drt.parse_options(args)
+
+ drt = self.make_drt(options, args, filesystem, stdin, stdout, stderr)
+ res = drt.run()
+
+ self.assertEqual(res, 0)
+
+ # We use the StringIO.buflist here instead of getvalue() because
+ # the StringIO might be a mix of unicode/ascii and 8-bit strings.
+ self.assertEqual(stdout.buflist, drt_output)
+ self.assertEqual(stderr.getvalue(), '')
+
+ def test_main(self):
+ filesystem = test.unit_test_filesystem()
+ stdin = newstringio.StringIO()
+ stdout = newstringio.StringIO()
+ stderr = newstringio.StringIO()
+ res = mock_drt.main(['--platform', 'test'] + self.extra_args(False),
+ filesystem, stdin, stdout, stderr)
+ self.assertEqual(res, 0)
+ self.assertEqual(stdout.getvalue(), '')
+ self.assertEqual(stderr.getvalue(), '')
+ self.assertEqual(filesystem.written_files, {})
+
+ def test_pixeltest_passes(self):
+ # This also tests that we handle HTTP: test URLs properly.
+ self.assertTest('http/tests/passes/text.html', True)
+
+ def test_pixeltest__fails(self):
+ self.assertTest('failures/expected/checksum.html', pixel_tests=True,
+ expected_checksum='wrong-checksum',
+ drt_output=['Content-Type: text/plain\n',
+ 'checksum-txt',
+ '#EOF\n',
+ '\n',
+ 'ActualHash: checksum-checksum\n',
+ 'ExpectedHash: wrong-checksum\n',
+ 'Content-Type: image/png\n',
+ 'Content-Length: 13\n\n',
+ 'checksum\x8a-png',
+ '#EOF\n'])
+
+ def test_textonly(self):
+ self.assertTest('passes/image.html', False)
+
+
+class MockChromiumDRTTest(MockDRTTest):
+ def extra_args(self, pixel_tests):
+ if pixel_tests:
+ return ['--pixel-tests=/tmp/png_result0.png']
+ return []
+
+ def make_drt(self, options, args, filesystem, stdin, stdout, stderr):
+ options.chromium = True
+
+ # We have to set these by hand because --platform test won't trigger
+ # the Chromium code paths.
+ options.pixel_path = '/tmp/png_result0.png'
+ options.pixel_tests = True
+
+ return mock_drt.MockChromiumDRT(options, args, filesystem, stdin, stdout, stderr)
+
+ def input_line(self, port, test_name, checksum=None):
+ url = port.filename_to_uri(self.to_path(port, test_name))
+ if checksum:
+ return url + ' 6000 ' + checksum + '\n'
+ return url + ' 6000\n'
+
+ def expected_output(self, port, test_name, pixel_tests, text_output, expected_checksum):
+ url = port.filename_to_uri(self.to_path(port, test_name))
+ if pixel_tests and expected_checksum:
+ return ['#URL:%s\n' % url,
+ '#MD5:%s\n' % expected_checksum,
+ text_output,
+ '\n',
+ '#EOF\n']
+ else:
+ return ['#URL:%s\n' % url,
+ text_output,
+ '\n',
+ '#EOF\n']
+
+ def test_pixeltest__fails(self):
+ filesystem = test.unit_test_filesystem()
+ self.assertTest('failures/expected/checksum.html', pixel_tests=True,
+ expected_checksum='wrong-checksum',
+ drt_output=['#URL:file:///test.checkout/LayoutTests/failures/expected/checksum.html\n',
+ '#MD5:checksum-checksum\n',
+ 'checksum-txt',
+ '\n',
+ '#EOF\n'],
+ filesystem=filesystem)
+ self.assertEquals(filesystem.written_files,
+ {'/tmp/png_result0.png': 'checksum\x8a-png'})
+
+ def test_chromium_parse_options(self):
+ options, args = mock_drt.parse_options(['--platform', 'chromium-mac',
+ '--pixel-tests=/tmp/png_result0.png'])
+ self.assertTrue(options.chromium)
+ self.assertTrue(options.pixel_tests)
+ self.assertEquals(options.pixel_path, '/tmp/png_result0.png')
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py b/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
index 0b03b4c..4146d40 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py
@@ -88,3 +88,15 @@ class PortTestCase(unittest.TestCase):
return
port.start_websocket_server()
port.stop_websocket_server()
+
+ def test_test_configuration(self):
+ port = self.make_port()
+ if not port:
+ return
+ self.assertTrue(port.test_configuration())
+
+ def test_all_test_configurations(self):
+ port = self.make_port()
+ if not port:
+ return
+ self.assertTrue(len(port.all_test_configurations()) > 0)
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/server_process.py b/Tools/Scripts/webkitpy/layout_tests/port/server_process.py
index 5a0a40c..7974f94 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/server_process.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/server_process.py
@@ -115,7 +115,11 @@ class ServerProcess:
if is not already running."""
if not self._proc:
self._start()
- self._proc.stdin.write(input)
+ try:
+ self._proc.stdin.write(input)
+ except IOError, e:
+ self.stop()
+ self.crashed = True
def read_line(self, timeout):
"""Read a single line from the subprocess, waiting until the deadline.
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/server_process_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/server_process_unittest.py
new file mode 100644
index 0000000..f3429cb
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/port/server_process_unittest.py
@@ -0,0 +1,77 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import unittest
+
+from webkitpy.layout_tests.port import server_process
+
+
+class MockFile(object):
+ def __init__(self, server_process):
+ self._server_process = server_process
+
+ def fileno(self):
+ return 1
+
+ def write(self, line):
+ self._server_process.broken_pipes.append(self)
+ raise IOError
+
+ def close(self):
+ pass
+
+
+class MockProc(object):
+ def __init__(self, server_process):
+ self.stdin = MockFile(server_process)
+ self.stdout = MockFile(server_process)
+ self.stderr = MockFile(server_process)
+ self.pid = 1
+
+ def poll(self):
+ return 1
+
+
+class FakeServerProcess(server_process.ServerProcess):
+ def _start(self):
+ self._proc = MockProc(self)
+ self.stdin = self._proc.stdin
+ self.broken_pipes = []
+
+
+class TestServerProcess(unittest.TestCase):
+ def test_broken_pipe(self):
+ server_process = FakeServerProcess(port_obj=None, name="test", cmd=["test"])
+ server_process.write("should break")
+ self.assertTrue(server_process.crashed)
+ self.assertEquals(server_process._proc, None)
+ self.assertEquals(server_process.broken_pipes, [server_process.stdin])
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/test.py b/Tools/Scripts/webkitpy/layout_tests/port/test.py
index 5df5c2d..b94c378 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/test.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/test.py
@@ -33,8 +33,7 @@ from __future__ import with_statement
import time
from webkitpy.common.system import filesystem_mock
-
-from webkitpy.layout_tests.layout_package import test_output
+from webkitpy.tool import mocktool
import base
@@ -51,9 +50,17 @@ class TestInstance:
self.keyboard = False
self.error = ''
self.timeout = False
- self.actual_text = self.base + '-txt\n'
- self.actual_checksum = self.base + '-checksum\n'
- self.actual_image = self.base + '-png\n'
+
+ # The values of each field are treated as raw byte strings. They
+ # will be converted to unicode strings where appropriate using
+ # MockFileSystem.read_text_file().
+ self.actual_text = self.base + '-txt'
+ self.actual_checksum = self.base + '-checksum'
+
+ # We add the '\x8a' for the image file to prevent the value from
+ # being treated as UTF-8 (the character is invalid)
+ self.actual_image = self.base + '\x8a' + '-png'
+
self.expected_text = self.actual_text
self.expected_checksum = self.actual_checksum
self.expected_image = self.actual_image
@@ -84,53 +91,44 @@ class TestList:
def unit_test_list():
tests = TestList()
tests.add('failures/expected/checksum.html',
- actual_checksum='checksum_fail-checksum')
+ actual_checksum='checksum_fail-checksum')
tests.add('failures/expected/crash.html', crash=True)
tests.add('failures/expected/exception.html', exception=True)
tests.add('failures/expected/timeout.html', timeout=True)
tests.add('failures/expected/hang.html', hang=True)
- tests.add('failures/expected/missing_text.html',
- expected_text=None)
+ tests.add('failures/expected/missing_text.html', expected_text=None)
tests.add('failures/expected/image.html',
- actual_image='image_fail-png',
- expected_image='image-png')
+ actual_image='image_fail-png',
+ expected_image='image-png')
tests.add('failures/expected/image_checksum.html',
- actual_checksum='image_checksum_fail-checksum',
- actual_image='image_checksum_fail-png')
- tests.add('failures/expected/keyboard.html',
- keyboard=True)
- tests.add('failures/expected/missing_check.html',
- expected_checksum=None)
- tests.add('failures/expected/missing_image.html',
- expected_image=None)
- tests.add('failures/expected/missing_text.html',
- expected_text=None)
+ actual_checksum='image_checksum_fail-checksum',
+ actual_image='image_checksum_fail-png')
+ tests.add('failures/expected/keyboard.html', keyboard=True)
+ tests.add('failures/expected/missing_check.html', expected_checksum=None)
+ tests.add('failures/expected/missing_image.html', expected_image=None)
+ tests.add('failures/expected/missing_text.html', expected_text=None)
tests.add('failures/expected/newlines_leading.html',
- expected_text="\nfoo\n",
- actual_text="foo\n")
+ expected_text="\nfoo\n", actual_text="foo\n")
tests.add('failures/expected/newlines_trailing.html',
- expected_text="foo\n\n",
- actual_text="foo\n")
+ expected_text="foo\n\n", actual_text="foo\n")
tests.add('failures/expected/newlines_with_excess_CR.html',
- expected_text="foo\r\r\r\n",
- actual_text="foo\n")
- tests.add('failures/expected/text.html',
- actual_text='text_fail-png')
+ expected_text="foo\r\r\r\n", actual_text="foo\n")
+ tests.add('failures/expected/text.html', actual_text='text_fail-png')
tests.add('failures/unexpected/crash.html', crash=True)
tests.add('failures/unexpected/text-image-checksum.html',
- actual_text='text-image-checksum_fail-txt',
- actual_checksum='text-image-checksum_fail-checksum')
+ actual_text='text-image-checksum_fail-txt',
+ actual_checksum='text-image-checksum_fail-checksum')
tests.add('failures/unexpected/timeout.html', timeout=True)
tests.add('http/tests/passes/text.html')
tests.add('http/tests/ssl/text.html')
tests.add('passes/error.html', error='stuff going to stderr')
tests.add('passes/image.html')
tests.add('passes/platform_image.html')
+
# Text output files contain "\r\n" on Windows. This may be
# helpfully filtered to "\r\r\n" by our Python/Cygwin tooling.
tests.add('passes/text.html',
- expected_text='\nfoo\n\n',
- actual_text='\nfoo\r\n\r\r\n')
+ expected_text='\nfoo\n\n', actual_text='\nfoo\r\n\r\r\n')
tests.add('websocket/tests/passes/text.html')
return tests
@@ -184,6 +182,9 @@ WONTFIX SKIP : failures/expected/keyboard.html = CRASH
WONTFIX SKIP : failures/expected/exception.html = CRASH
"""
+ # Add in a file should be ignored by test_files.find().
+ files[LAYOUT_TEST_DIR + 'userscripts/resources/iframe.html'] = 'iframe'
+
fs = filesystem_mock.MockFileSystem(files)
fs._tests = test_list
return fs
@@ -192,30 +193,31 @@ WONTFIX SKIP : failures/expected/exception.html = CRASH
class TestPort(base.Port):
"""Test implementation of the Port interface."""
- def __init__(self, **kwargs):
- # FIXME: what happens if we're not passed in the test filesystem
- # and the tests don't match what's in the filesystem?
- #
- # We'll leave as is for now to avoid unnecessary dependencies while
- # converting all of the unit tests over to using
- # unit_test_filesystem(). If things get out of sync the tests should
- # fail in fairly obvious ways. Eventually we want to just do:
- #
- # assert kwargs['filesystem']._tests
- # self._tests = kwargs['filesystem']._tests
+ def __init__(self, port_name=None, user=None, filesystem=None, **kwargs):
+ if not filesystem:
+ filesystem = unit_test_filesystem()
+
+ assert filesystem._tests
+ self._tests = filesystem._tests
+
+ if not user:
+ user = mocktool.MockUser()
- if 'filesystem' not in kwargs or kwargs['filesystem'] is None:
- kwargs['filesystem'] = unit_test_filesystem()
- self._tests = kwargs['filesystem']._tests
- else:
- self._tests = unit_test_list()
+ if not port_name or port_name == 'test':
+ port_name = 'test-mac'
- kwargs.setdefault('port_name', 'test')
- base.Port.__init__(self, **kwargs)
+ self._expectations_path = LAYOUT_TEST_DIR + '/platform/test/test_expectations.txt'
+ base.Port.__init__(self, port_name=port_name, filesystem=filesystem, user=user,
+ **kwargs)
+
+ def _path_to_driver(self):
+ # This routine shouldn't normally be called, but it is called by
+ # the mock_drt Driver. We return something, but make sure it's useless.
+ return 'junk'
def baseline_path(self):
- return self._filesystem.join(self.layout_tests_dir(), 'platform',
- self.name() + self.version())
+ # We don't bother with a fallback path.
+ return self._filesystem.join(self.layout_tests_dir(), 'platform', self.name())
def baseline_search_path(self):
return [self.baseline_path()]
@@ -223,11 +225,14 @@ class TestPort(base.Port):
def check_build(self, needs_http):
return True
+ def default_configuration(self):
+ return 'Release'
+
def diff_image(self, expected_contents, actual_contents,
diff_filename=None):
diffed = actual_contents != expected_contents
if diffed and diff_filename:
- self._filesystem.write_text_file(diff_filename,
+ self._filesystem.write_binary_file(diff_filename,
"< %s\n---\n> %s\n" % (expected_contents, actual_contents))
return diffed
@@ -261,23 +266,98 @@ class TestPort(base.Port):
def stop_websocket_server(self):
pass
- def test_base_platform_names(self):
- return ('mac', 'win')
-
- def test_expectations(self):
- return self._filesystem.read_text_file(LAYOUT_TEST_DIR + '/platform/test/test_expectations.txt')
+ def path_to_test_expectations_file(self):
+ return self._expectations_path
def test_platform_name(self):
- return 'mac'
+ name_map = {
+ 'test-mac': 'mac',
+ 'test-win': 'win',
+ 'test-win-xp': 'win-xp',
+ }
+ return name_map[self._name]
def test_platform_names(self):
- return self.test_base_platform_names()
+ return ('mac', 'win', 'win-xp')
def test_platform_name_to_name(self, test_platform_name):
- return test_platform_name
+ name_map = {
+ 'mac': 'test-mac',
+ 'win': 'test-win',
+ 'win-xp': 'test-win-xp',
+ }
+ return name_map[test_platform_name]
+
+ # FIXME: These next two routines are copied from base.py with
+ # the calls to path.abspath_to_uri() removed. We shouldn't have
+ # to do this.
+ def filename_to_uri(self, filename):
+ """Convert a test file (which is an absolute path) to a URI."""
+ LAYOUTTEST_HTTP_DIR = "http/tests/"
+ LAYOUTTEST_WEBSOCKET_DIR = "http/tests/websocket/tests/"
+
+ relative_path = self.relative_test_filename(filename)
+ port = None
+ use_ssl = False
+
+ if (relative_path.startswith(LAYOUTTEST_WEBSOCKET_DIR)
+ or relative_path.startswith(LAYOUTTEST_HTTP_DIR)):
+ relative_path = relative_path[len(LAYOUTTEST_HTTP_DIR):]
+ port = 8000
+
+ # Make http/tests/local run as local files. This is to mimic the
+ # logic in run-webkit-tests.
+ #
+ # TODO(dpranke): remove the media reference and the SSL reference?
+ if (port and not relative_path.startswith("local/") and
+ not relative_path.startswith("media/")):
+ if relative_path.startswith("ssl/"):
+ port += 443
+ protocol = "https"
+ else:
+ protocol = "http"
+ return "%s://127.0.0.1:%u/%s" % (protocol, port, relative_path)
+
+ return "file://" + self._filesystem.abspath(filename)
+
+ def uri_to_test_name(self, uri):
+ """Return the base layout test name for a given URI.
+
+ This returns the test name for a given URI, e.g., if you passed in
+ "file:///src/LayoutTests/fast/html/keygen.html" it would return
+ "fast/html/keygen.html".
+
+ """
+ test = uri
+ if uri.startswith("file:///"):
+ prefix = "file://" + self.layout_tests_dir() + "/"
+ return test[len(prefix):]
+
+ if uri.startswith("http://127.0.0.1:8880/"):
+ # websocket tests
+ return test.replace('http://127.0.0.1:8880/', '')
+
+ if uri.startswith("http://"):
+ # regular HTTP test
+ return test.replace('http://127.0.0.1:8000/', 'http/tests/')
+
+ if uri.startswith("https://"):
+ return test.replace('https://127.0.0.1:8443/', 'http/tests/')
+
+ raise NotImplementedError('unknown url type: %s' % uri)
def version(self):
- return ''
+ version_map = {
+ 'test-win-xp': '-xp',
+ 'test-win': '-7',
+ 'test-mac': '-leopard',
+ }
+ return version_map[self._name]
+
+ def test_configuration(self):
+ if not self._test_configuration:
+ self._test_configuration = TestTestConfiguration(self)
+ return self._test_configuration
class TestDriver(base.Driver):
@@ -287,7 +367,7 @@ class TestDriver(base.Driver):
self._port = port
def cmd_line(self):
- return ['None']
+ return [self._port._path_to_driver()]
def poll(self):
return True
@@ -302,13 +382,20 @@ class TestDriver(base.Driver):
raise ValueError('exception from ' + test_name)
if test.hang:
time.sleep((float(test_input.timeout) * 4) / 1000.0)
- return test_output.TestOutput(test.actual_text, test.actual_image,
- test.actual_checksum, test.crash,
- time.time() - start_time, test.timeout,
- test.error)
+ return base.DriverOutput(test.actual_text, test.actual_image,
+ test.actual_checksum, test.crash,
+ time.time() - start_time, test.timeout,
+ test.error)
def start(self):
pass
def stop(self):
pass
+
+
+class TestTestConfiguration(base.TestConfiguration):
+ def all_systems(self):
+ return (('mac', 'leopard', 'x86'),
+ ('win', 'xp', 'x86'),
+ ('win', 'win7', 'x86'))
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/test_files.py b/Tools/Scripts/webkitpy/layout_tests/port/test_files.py
index 41d918f..534462a 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/test_files.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/test_files.py
@@ -49,37 +49,47 @@ _supported_file_extensions = set(['.html', '.shtml', '.xml', '.xhtml', '.xhtmlmp
_skipped_directories = set(['.svn', '_svn', 'resources', 'script-tests'])
-def find(port, paths):
- """Finds the set of tests under port.layout_tests_dir().
+def find(port, paths=None):
+ """Finds the set of tests under a given list of sub-paths.
Args:
- paths: a list of command line paths relative to the layout_tests_dir()
- to limit the search to. glob patterns are ok.
+ paths: a list of path expressions relative to port.layout_tests_dir()
+ to search. Glob patterns are ok, as are path expressions with
+ forward slashes on Windows. If paths is empty, we look at
+ everything under the layout_tests_dir().
+ """
+ paths = paths or ['*']
+ filesystem = port._filesystem
+ return normalized_find(filesystem, normalize(filesystem, port.layout_tests_dir(), paths))
+
+
+def normalize(filesystem, base_dir, paths):
+ return [filesystem.normpath(filesystem.join(base_dir, path)) for path in paths]
+
+
+def normalized_find(filesystem, paths):
+ """Finds the set of tests under the list of paths.
+
+ Args:
+ paths: a list of absolute path expressions to search.
+ Glob patterns are ok.
"""
- fs = port._filesystem
gather_start_time = time.time()
paths_to_walk = set()
- # if paths is empty, provide a pre-defined list.
- if paths:
- _log.debug("Gathering tests from: %s relative to %s" % (paths, port.layout_tests_dir()))
- for path in paths:
- # If there's an * in the name, assume it's a glob pattern.
- path = fs.join(port.layout_tests_dir(), path)
- if path.find('*') > -1:
- filenames = fs.glob(path)
- paths_to_walk.update(filenames)
- else:
- paths_to_walk.add(path)
- else:
- _log.debug("Gathering tests from: %s" % port.layout_tests_dir())
- paths_to_walk.add(port.layout_tests_dir())
+ for path in paths:
+ # If there's an * in the name, assume it's a glob pattern.
+ if path.find('*') > -1:
+ filenames = filesystem.glob(path)
+ paths_to_walk.update(filenames)
+ else:
+ paths_to_walk.add(path)
# FIXME: I'm not sure there's much point in this being a set. A list would
# probably be faster.
test_files = set()
for path in paths_to_walk:
- files = fs.files_under(path, _skipped_directories, _is_test_file)
+ files = filesystem.files_under(path, _skipped_directories, _is_test_file)
test_files.update(set(files))
gather_time = time.time() - gather_start_time
@@ -88,10 +98,10 @@ def find(port, paths):
return test_files
-def _has_supported_extension(fs, filename):
+def _has_supported_extension(filesystem, filename):
"""Return true if filename is one of the file extensions we want to run a
test on."""
- extension = fs.splitext(filename)[1]
+ extension = filesystem.splitext(filename)[1]
return extension in _supported_file_extensions
@@ -104,7 +114,7 @@ def _is_reference_html_file(filename):
return False
-def _is_test_file(fs, dirname, filename):
+def _is_test_file(filesystem, dirname, filename):
"""Return true if the filename points to a test file."""
- return (_has_supported_extension(fs, filename) and
+ return (_has_supported_extension(filesystem, filename) and
not _is_reference_html_file(filename))
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/test_files_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/test_files_unittest.py
index a68950a..a29ba49 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/test_files_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/test_files_unittest.py
@@ -26,44 +26,41 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import sys
import unittest
-import base
+from webkitpy.layout_tests.port import test
import test_files
-
class TestFilesTest(unittest.TestCase):
def test_find_no_paths_specified(self):
- port = base.Port()
+ port = test.TestPort()
layout_tests_dir = port.layout_tests_dir()
- port.layout_tests_dir = lambda: port._filesystem.join(layout_tests_dir,
- 'fast', 'html')
tests = test_files.find(port, [])
- self.assertNotEqual(tests, 0)
+ self.assertNotEqual(len(tests), 0)
def test_find_one_test(self):
- port = base.Port()
- # This is just a test picked at random but known to exist.
- tests = test_files.find(port, ['fast/html/keygen.html'])
+ port = test.TestPort()
+ tests = test_files.find(port, ['failures/expected/image.html'])
self.assertEqual(len(tests), 1)
def test_find_glob(self):
- port = base.Port()
- tests = test_files.find(port, ['fast/html/key*'])
- self.assertEqual(len(tests), 1)
+ port = test.TestPort()
+ tests = test_files.find(port, ['failures/expected/im*'])
+ self.assertEqual(len(tests), 2)
def test_find_with_skipped_directories(self):
- port = base.Port()
+ port = test.TestPort()
tests = port.tests('userscripts')
- self.assertTrue('userscripts/resources/frame1.html' not in tests)
+ self.assertTrue('userscripts/resources/iframe.html' not in tests)
def test_find_with_skipped_directories_2(self):
- port = base.Port()
+ port = test.TestPort()
tests = test_files.find(port, ['userscripts/resources'])
self.assertEqual(tests, set([]))
def test_is_test_file(self):
- port = base.Port()
+ port = test.TestPort()
fs = port._filesystem
self.assertTrue(test_files._is_test_file(fs, '', 'foo.html'))
self.assertTrue(test_files._is_test_file(fs, '', 'foo.shtml'))
@@ -72,5 +69,33 @@ class TestFilesTest(unittest.TestCase):
self.assertFalse(test_files._is_test_file(fs, '', 'foo-expected-mismatch.html'))
+class MockWinFileSystem(object):
+ def join(self, *paths):
+ return '\\'.join(paths)
+
+ def normpath(self, path):
+ return path.replace('/', '\\')
+
+
+class TestWinNormalize(unittest.TestCase):
+ def assert_filesystem_normalizes(self, filesystem):
+ self.assertEquals(test_files.normalize(filesystem, "c:\\foo",
+ ['fast/html', 'fast/canvas/*', 'compositing/foo.html']),
+ ['c:\\foo\\fast\html', 'c:\\foo\\fast\canvas\*', 'c:\\foo\compositing\\foo.html'])
+
+ def test_mocked_win(self):
+ # This tests test_files.normalize, using portable behavior emulating
+ # what we think Windows is supposed to do. This test will run on all
+ # platforms.
+ self.assert_filesystem_normalizes(MockWinFileSystem())
+
+ def test_win(self):
+ # This tests the actual windows platform, to ensure we get the same
+ # results that we get in test_mocked_win().
+ if sys.platform != 'win':
+ return
+ self.assert_filesystem_normalizes(FileSystem())
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
index 577acd4..65a047d 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
@@ -40,10 +40,9 @@ import sys
import time
import webbrowser
-import webkitpy.common.system.ospath as ospath
-import webkitpy.layout_tests.layout_package.test_output as test_output
-import webkitpy.layout_tests.port.base as base
-import webkitpy.layout_tests.port.server_process as server_process
+from webkitpy.common.system import ospath
+from webkitpy.layout_tests.port import base
+from webkitpy.layout_tests.port import server_process
_log = logging.getLogger("webkitpy.layout_tests.port.webkit")
@@ -57,7 +56,8 @@ class WebKitPort(base.Port):
# FIXME: disable pixel tests until they are run by default on the
# build machines.
- self.set_option_default('pixel_tests', False)
+ if not hasattr(self._options, "pixel_tests") or self._options.pixel_tests == None:
+ self._options.pixel_tests = False
def baseline_path(self):
return self._webkit_baseline_path(self._name)
@@ -120,9 +120,9 @@ class WebKitPort(base.Port):
return self._diff_image_reply(sp, diff_filename)
def _diff_image_request(self, expected_contents, actual_contents):
- # FIXME: use self.get_option('tolerance') and
- # self.set_option_default('tolerance', 0.1) once that behaves correctly
- # with default values.
+ # FIXME: There needs to be a more sane way of handling default
+ # values for options so that you can distinguish between a default
+ # value of None and a default value that wasn't set.
if self.get_option('tolerance') is not None:
tolerance = self.get_option('tolerance')
else:
@@ -159,7 +159,7 @@ class WebKitPort(base.Port):
if m.group(2) == 'passed':
result = False
elif output and diff_filename:
- self._filesystem.write_text_file(diff_filename, output)
+ self._filesystem.write_binary_file(diff_filename, output)
elif sp.timed_out:
_log.error("ImageDiff timed out")
elif sp.crashed:
@@ -179,11 +179,6 @@ class WebKitPort(base.Port):
def create_driver(self, worker_number):
return WebKitDriver(self, worker_number)
- def test_base_platform_names(self):
- # At the moment we don't use test platform names, but we have
- # to return something.
- return ('mac', 'win')
-
def _tests_for_other_platforms(self):
raise NotImplementedError('WebKitPort._tests_for_other_platforms')
# The original run-webkit-tests builds up a "whitelist" of tests to
@@ -283,9 +278,9 @@ class WebKitPort(base.Port):
unsupported_feature_tests = self._skipped_tests_for_unsupported_features()
return disabled_feature_tests + webarchive_tests + unsupported_feature_tests
- def _tests_from_skipped_file(self, skipped_file):
+ def _tests_from_skipped_file_contents(self, skipped_file_contents):
tests_to_skip = []
- for line in skipped_file.readlines():
+ for line in skipped_file_contents.split('\n'):
line = line.strip()
if line.startswith('#') or not len(line):
continue
@@ -301,7 +296,8 @@ class WebKitPort(base.Port):
if not self._filesystem.exists(filename):
_log.warn("Failed to open Skipped file: %s" % filename)
continue
- skipped_file = self._filesystem.read_text_file(filename)
+ skipped_file_contents = self._filesystem.read_text_file(filename)
+ tests_to_skip.extend(self._tests_from_skipped_file_contents(skipped_file_contents))
return tests_to_skip
def test_expectations(self):
@@ -335,8 +331,7 @@ class WebKitPort(base.Port):
return self._name + self.version()
def test_platform_names(self):
- return self.test_base_platform_names() + (
- 'mac-tiger', 'mac-leopard', 'mac-snowleopard')
+ return ('mac', 'win', 'mac-tiger', 'mac-leopard', 'mac-snowleopard')
def _build_path(self, *comps):
return self._filesystem.join(self._config.build_directory(
@@ -409,15 +404,15 @@ class WebKitDriver(base.Driver):
return
# FIXME: This function is huge.
- def run_test(self, test_input):
- uri = self._port.filename_to_uri(test_input.filename)
+ def run_test(self, driver_input):
+ uri = self._port.filename_to_uri(driver_input.filename)
if uri.startswith("file:///"):
command = uri[7:]
else:
command = uri
- if test_input.image_hash:
- command += "'" + test_input.image_hash
+ if driver_input.image_hash:
+ command += "'" + driver_input.image_hash
command += "\n"
start_time = time.time()
@@ -428,7 +423,7 @@ class WebKitDriver(base.Driver):
output = str() # Use a byte array for output, even though it should be UTF-8.
image = str()
- timeout = int(test_input.timeout) / 1000.0
+ timeout = int(driver_input.timeout) / 1000.0
deadline = time.time() + timeout
line = self._server_process.read_line(timeout)
while (not self._server_process.timed_out
@@ -475,11 +470,11 @@ class WebKitDriver(base.Driver):
# FIXME: This seems like the wrong section of code to be doing
# this reset in.
self._server_process.error = ""
- return test_output.TestOutput(output, image, actual_image_hash,
- self._server_process.crashed,
- time.time() - start_time,
- self._server_process.timed_out,
- error)
+ return base.DriverOutput(output, image, actual_image_hash,
+ self._server_process.crashed,
+ time.time() - start_time,
+ self._server_process.timed_out,
+ error)
def stop(self):
if self._server_process:
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py
index 7b68310..c72a411 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
# Copyright (C) 2010 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>, University of Szeged
+# Copyright (C) 2010 Google Inc. All rights reserved.
#
# All rights reserved.
#
@@ -26,13 +27,19 @@
import unittest
+from webkitpy.common.system import filesystem_mock
+
from webkitpy.layout_tests.port.webkit import WebKitPort
class TestWebKitPort(WebKitPort):
- def __init__(self, symbol_list=None, feature_list=None):
+ def __init__(self, symbol_list=None, feature_list=None,
+ expectations_file=None, skips_file=None, **kwargs):
self.symbol_list = symbol_list
self.feature_list = feature_list
+ self.expectations_file = expectations_file
+ self.skips_file = skips_file
+ WebKitPort.__init__(self, **kwargs)
def _runtime_feature_list(self):
return self.feature_list
@@ -46,7 +53,14 @@ class TestWebKitPort(WebKitPort):
def _tests_for_disabled_features(self):
return ["accessibility", ]
+ def path_to_test_expectations_file(self):
+ if self.expectations_file:
+ return self.expectations_file
+ return WebKitPort.path_to_test_expectations_file(self)
+
def _skipped_file_paths(self):
+ if self.skips_file:
+ return [self.skips_file]
return []
class WebKitPortTest(unittest.TestCase):
@@ -66,3 +80,23 @@ class WebKitPortTest(unittest.TestCase):
def test_skipped_layout_tests(self):
self.assertEqual(TestWebKitPort(None, None).skipped_layout_tests(),
set(["media", "accessibility"]))
+
+ def test_test_expectations(self):
+ # Check that we read both the expectations file and anything in a
+ # Skipped file, and that we include the feature and platform checks.
+ files = {
+ '/tmp/test_expectations.txt': 'BUG_TESTEXPECTATIONS SKIP : fast/html/article-element.html = FAIL\n',
+ '/tmp/Skipped': 'fast/html/keygen.html',
+ }
+ mock_fs = filesystem_mock.MockFileSystem(files)
+ port = TestWebKitPort(expectations_file='/tmp/test_expectations.txt',
+ skips_file='/tmp/Skipped', filesystem=mock_fs)
+ self.assertEqual(port.test_expectations(),
+ """BUG_TESTEXPECTATIONS SKIP : fast/html/article-element.html = FAIL
+BUG_SKIPPED SKIP : fast/html/keygen.html = FAIL
+BUG_SKIPPED SKIP : media = FAIL
+BUG_SKIPPED SKIP : accessibility = FAIL""")
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py b/Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py
index 926bc04..713ad21 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/websocket_server.py
@@ -73,7 +73,7 @@ def url_is_alive(url):
wait_time = 10
while wait_time > 0:
try:
- response = urllib.urlopen(url)
+ response = urllib.urlopen(url, proxies={})
# Server is up and responding.
return True
except IOError:
diff --git a/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py b/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
index c852186..567975c 100644
--- a/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
+++ b/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
@@ -47,18 +47,17 @@ import optparse
import re
import sys
import time
-import urllib
-import zipfile
from webkitpy.common.checkout import scm
+from webkitpy.common.system import zipfileset
from webkitpy.common.system import path
+from webkitpy.common.system import urlfetcher
from webkitpy.common.system.executive import ScriptError
-import port
-from layout_package import test_expectations
+from webkitpy.layout_tests import port
+from webkitpy.layout_tests.layout_package import test_expectations
-_log = logging.getLogger("webkitpy.layout_tests."
- "rebaseline_chromium_webkit_tests")
+_log = logging.getLogger(__name__)
BASELINE_SUFFIXES = ['.txt', '.png', '.checksum']
REBASELINE_PLATFORM_ORDER = ['mac', 'win', 'win-xp', 'win-vista', 'linux']
@@ -142,7 +141,7 @@ class Rebaseliner(object):
REVISION_REGEX = r'<a href=\"(\d+)/\">'
- def __init__(self, running_port, target_port, platform, options):
+ def __init__(self, running_port, target_port, platform, options, url_fetcher, zip_factory, scm):
"""
Args:
running_port: the Port the script is running on.
@@ -150,14 +149,20 @@ class Rebaseliner(object):
configuration information like the test_expectations.txt
file location and the list of test platforms.
platform: the test platform to rebaseline
- options: the command-line options object."""
+ options: the command-line options object.
+ url_fetcher: object that can fetch objects from URLs
+ zip_factory: optional object that can fetch zip files from URLs
+ scm: scm object for adding new baselines
+ """
self._platform = platform
self._options = options
self._port = running_port
self._filesystem = running_port._filesystem
self._target_port = target_port
+
self._rebaseline_port = port.get(
- self._target_port.test_platform_name_to_name(platform), options)
+ self._target_port.test_platform_name_to_name(platform), options,
+ filesystem=self._filesystem)
self._rebaselining_tests = []
self._rebaselined_tests = []
@@ -170,10 +175,11 @@ class Rebaseliner(object):
test_expectations.TestExpectations(self._rebaseline_port,
None,
expectations_str,
- self._platform,
- False,
+ self._rebaseline_port.test_configuration(),
False)
- self._scm = scm.default_scm()
+ self._url_fetcher = url_fetcher
+ self._zip_factory = zip_factory
+ self._scm = scm
def run(self, backup):
"""Run rebaseline process."""
@@ -192,8 +198,11 @@ class Rebaseliner(object):
log_dashed_string('Extracting and adding new baselines',
self._platform)
if not self._extract_and_add_new_baselines(archive_file):
+ archive_file.close()
return False
+ archive_file.close()
+
log_dashed_string('Updating rebaselined tests in file',
self._platform)
self._update_rebaselined_tests_in_file(backup)
@@ -254,9 +263,7 @@ class Rebaseliner(object):
_log.debug('Url to retrieve revision: "%s"', url)
- f = urllib.urlopen(url)
- content = f.read()
- f.close()
+ content = self._url_fetcher.fetch(url)
revisions = re.findall(self.REVISION_REGEX, content)
if not revisions:
@@ -313,33 +320,24 @@ class Rebaseliner(object):
return archive_url
def _download_buildbot_archive(self):
- """Download layout test archive file from buildbot.
-
- Returns:
- True if download succeeded or
- False otherwise.
- """
-
+ """Download layout test archive file from buildbot and return a handle to it."""
url = self._get_archive_url()
if url is None:
return None
- fn = urllib.urlretrieve(url)[0]
- _log.info('Archive downloaded and saved to file: "%s"', fn)
- return fn
+ archive_file = zipfileset.ZipFileSet(url, filesystem=self._filesystem,
+ zip_factory=self._zip_factory)
+ _log.info('Archive downloaded')
+ return archive_file
- def _extract_and_add_new_baselines(self, archive_file):
- """Extract new baselines from archive and add them to SVN repository.
-
- Args:
- archive_file: full path to the archive file.
+ def _extract_and_add_new_baselines(self, zip_file):
+ """Extract new baselines from the zip file and add them to SVN repository.
Returns:
List of tests that have been rebaselined or
None on failure.
"""
- zip_file = zipfile.ZipFile(archive_file, 'r')
zip_namelist = zip_file.namelist()
_log.debug('zip file namelist:')
@@ -419,7 +417,6 @@ class Rebaseliner(object):
test_no += 1
zip_file.close()
- self._filesystem.remove(archive_file)
return self._rebaselined_tests
@@ -857,18 +854,9 @@ def parse_options(args):
return (options, target_options)
-def main():
- """Main function to produce new baselines."""
-
- (options, target_options) = parse_options(sys.argv[1:])
-
- # We need to create three different Port objects over the life of this
- # script. |target_port_obj| is used to determine configuration information:
- # location of the expectations file, names of ports to rebaseline, etc.
- # |port_obj| is used for runtime functionality like actually diffing
- # Then we create a rebaselining port to actual find and manage the
- # baselines.
- target_port_obj = port.get(None, target_options)
+def main(args):
+ """Bootstrap function that sets up the object references we need and calls real_main()."""
+ options, target_options = parse_options(args)
# Set up our logging format.
log_level = logging.INFO
@@ -879,20 +867,53 @@ def main():
'%(levelname)s %(message)s'),
datefmt='%y%m%d %H:%M:%S')
+ target_port_obj = port.get(None, target_options)
host_port_obj = get_host_port_object(options)
- if not host_port_obj:
- sys.exit(1)
+ if not host_port_obj or not target_port_obj:
+ return 1
+
+ url_fetcher = urlfetcher.UrlFetcher(host_port_obj._filesystem)
+ scm_obj = scm.default_scm()
+
+ # We use the default zip factory method.
+ zip_factory = None
+
+ return real_main(options, target_options, host_port_obj, target_port_obj, url_fetcher,
+ zip_factory, scm_obj)
+
+def real_main(options, target_options, host_port_obj, target_port_obj, url_fetcher,
+ zip_factory, scm_obj):
+ """Main function to produce new baselines. The Rebaseliner object uses two
+ different Port objects - one to represent the machine the object is running
+ on, and one to represent the port whose expectations are being updated.
+ E.g., you can run the script on a mac and rebaseline the 'win' port.
+
+ Args:
+ options: command-line argument used for the host_port_obj (see below)
+ target_options: command_line argument used for the target_port_obj.
+ This object may have slightly different values than |options|.
+ host_port_obj: a Port object for the platform the script is running
+ on. This is used to produce image and text diffs, mostly, and
+ is usually acquired from get_host_port_obj().
+ target_port_obj: a Port obj representing the port getting rebaselined.
+ This is used to find the expectations file, the baseline paths,
+ etc.
+ url_fetcher: object used to download the build archives from the bots
+ zip_factory: factory function used to create zip file objects for
+ the archives.
+ scm_obj: object used to add new baselines to the source control system.
+ """
# Verify 'platforms' option is valid.
if not options.platforms:
_log.error('Invalid "platforms" option. --platforms must be '
'specified in order to rebaseline.')
- sys.exit(1)
+ return 1
platforms = [p.strip().lower() for p in options.platforms.split(',')]
for platform in platforms:
if not platform in REBASELINE_PLATFORM_ORDER:
_log.error('Invalid platform: "%s"' % (platform))
- sys.exit(1)
+ return 1
# Adjust the platform order so rebaseline tool is running at the order of
# 'mac', 'win' and 'linux'. This is in same order with layout test baseline
@@ -909,7 +930,8 @@ def main():
backup = options.backup
for platform in rebaseline_platforms:
rebaseliner = Rebaseliner(host_port_obj, target_port_obj,
- platform, options)
+ platform, options, url_fetcher, zip_factory,
+ scm_obj)
_log.info('')
log_dashed_string('Rebaseline started', platform)
@@ -934,7 +956,8 @@ def main():
html_generator.show_html()
log_dashed_string('Rebaselining result comparison done', None)
- sys.exit(0)
+ return 0
+
if '__main__' == __name__:
- main()
+ sys.exit(main(sys.argv[1:]))
diff --git a/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py b/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py
index 50c0204..730220b 100644
--- a/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests_unittest.py
@@ -32,11 +32,14 @@
import unittest
from webkitpy.tool import mocktool
+from webkitpy.common.system import urlfetcher_mock
from webkitpy.common.system import filesystem_mock
+from webkitpy.common.system import zipfileset_mock
+from webkitpy.common.system import outputcapture
from webkitpy.common.system.executive import Executive, ScriptError
-import port
-import rebaseline_chromium_webkit_tests
+from webkitpy.layout_tests import port
+from webkitpy.layout_tests import rebaseline_chromium_webkit_tests
class MockPort(object):
@@ -53,6 +56,57 @@ def get_mock_get(config_expectations):
return mock_get
+ARCHIVE_URL = 'http://localhost/layout_test_results'
+
+
+def test_options():
+ return mocktool.MockOptions(configuration=None,
+ backup=False,
+ html_directory='/tmp',
+ archive_url=ARCHIVE_URL,
+ force_archive_url=None,
+ webkit_canary=True,
+ use_drt=False,
+ target_platform='chromium',
+ verbose=False,
+ quiet=False,
+ platforms='mac,win,win-xp')
+
+
+def test_host_port_and_filesystem(options, expectations):
+ filesystem = port.unit_test_filesystem()
+ host_port_obj = port.get('test', options, filesystem=filesystem,
+ user=mocktool.MockUser())
+
+ expectations_path = host_port_obj.path_to_test_expectations_file()
+ filesystem.write_text_file(expectations_path, expectations)
+ return (host_port_obj, filesystem)
+
+
+def test_url_fetcher(filesystem):
+ urls = {
+ ARCHIVE_URL + '/Webkit_Mac10_5/': '<a href="1/"><a href="2/">',
+ ARCHIVE_URL + '/Webkit_Win/': '<a href="1/">',
+ }
+ return urlfetcher_mock.make_fetcher_cls(urls)(filesystem)
+
+
+def test_zip_factory():
+ ziphashes = {
+ ARCHIVE_URL + '/Webkit_Mac10_5/2/layout-test-results.zip': {
+ 'layout-test-results/failures/expected/image-actual.txt': 'new-image-txt',
+ 'layout-test-results/failures/expected/image-actual.checksum': 'new-image-checksum',
+ 'layout-test-results/failures/expected/image-actual.png': 'new-image-png',
+ },
+ ARCHIVE_URL + '/Webkit_Win/1/layout-test-results.zip': {
+ 'layout-test-results/failures/expected/image-actual.txt': 'win-image-txt',
+ 'layout-test-results/failures/expected/image-actual.checksum': 'win-image-checksum',
+ 'layout-test-results/failures/expected/image-actual.png': 'win-image-png',
+ },
+ }
+ return zipfileset_mock.make_factory(ziphashes)
+
+
class TestGetHostPortObject(unittest.TestCase):
def assert_result(self, release_present, debug_present, valid_port_obj):
# Tests whether we get a valid port object returned when we claim
@@ -60,9 +114,8 @@ class TestGetHostPortObject(unittest.TestCase):
port.get = get_mock_get({'Release': release_present,
'Debug': debug_present})
options = mocktool.MockOptions(configuration=None,
- html_directory=None)
- port_obj = rebaseline_chromium_webkit_tests.get_host_port_object(
- options)
+ html_directory='/tmp')
+ port_obj = rebaseline_chromium_webkit_tests.get_host_port_object(options)
if valid_port_obj:
self.assertNotEqual(port_obj, None)
else:
@@ -84,18 +137,7 @@ class TestGetHostPortObject(unittest.TestCase):
port.get = old_get
-class TestRebaseliner(unittest.TestCase):
- def make_rebaseliner(self):
- options = mocktool.MockOptions(configuration=None,
- html_directory=None)
- filesystem = filesystem_mock.MockFileSystem()
- host_port_obj = port.get('test', options, filesystem=filesystem)
- target_options = options
- target_port_obj = port.get('test', target_options, filesystem=filesystem)
- platform = 'test'
- return rebaseline_chromium_webkit_tests.Rebaseliner(
- host_port_obj, target_port_obj, platform, options)
-
+class TestOptions(unittest.TestCase):
def test_parse_options(self):
(options, target_options) = rebaseline_chromium_webkit_tests.parse_options([])
self.assertTrue(target_options.chromium)
@@ -105,39 +147,113 @@ class TestRebaseliner(unittest.TestCase):
self.assertFalse(hasattr(target_options, 'chromium'))
self.assertEqual(options.tolerance, 0)
+
+class TestRebaseliner(unittest.TestCase):
+ def make_rebaseliner(self, expectations):
+ options = test_options()
+ host_port_obj, filesystem = test_host_port_and_filesystem(options, expectations)
+
+ target_options = options
+ target_port_obj = port.get('test', target_options,
+ filesystem=filesystem)
+ target_port_obj._expectations = expectations
+ platform = target_port_obj.test_platform_name()
+
+ url_fetcher = test_url_fetcher(filesystem)
+ zip_factory = test_zip_factory()
+ mock_scm = mocktool.MockSCM()
+ rebaseliner = rebaseline_chromium_webkit_tests.Rebaseliner(host_port_obj,
+ target_port_obj, platform, options, url_fetcher, zip_factory, mock_scm)
+ return rebaseliner, filesystem
+
def test_noop(self):
# this method tests that was can at least instantiate an object, even
# if there is nothing to do.
- rebaseliner = self.make_rebaseliner()
- self.assertNotEqual(rebaseliner, None)
+ rebaseliner, filesystem = self.make_rebaseliner("")
+ rebaseliner.run(False)
+ self.assertEqual(len(filesystem.written_files), 1)
+
+ def test_one_platform(self):
+ rebaseliner, filesystem = self.make_rebaseliner(
+ "BUGX REBASELINE MAC : failures/expected/image.html = IMAGE")
+ rebaseliner.run(False)
+ # We expect to have written 12 files over the course of this rebaseline:
+ # *) 3 files in /__im_tmp for the extracted archive members
+ # *) 3 new baselines under '/test.checkout/LayoutTests'
+ # *) 4 files in /tmp for the new and old baselines in the result file
+ # (-{old,new}.{txt,png}
+ # *) 1 text diff in /tmp for the result file (-diff.txt). We don't
+ # create image diffs (FIXME?) and don't display the checksums.
+ # *) 1 updated test_expectations file
+ self.assertEqual(len(filesystem.written_files), 12)
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test/test_expectations.txt'], '')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.checksum'], 'new-image-checksum')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.png'], 'new-image-png')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.txt'], 'new-image-txt')
+
+ def test_all_platforms(self):
+ rebaseliner, filesystem = self.make_rebaseliner(
+ "BUGX REBASELINE : failures/expected/image.html = IMAGE")
+ rebaseliner.run(False)
+ # See comment in test_one_platform for an explanation of the 12 written tests.
+ # Note that even though the rebaseline is marked for all platforms, each
+ # rebaseliner only ever does one.
+ self.assertEqual(len(filesystem.written_files), 12)
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test/test_expectations.txt'],
+ 'BUGX REBASELINE WIN : failures/expected/image.html = IMAGE\n'
+ 'BUGX REBASELINE WIN-XP : failures/expected/image.html = IMAGE\n')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.checksum'], 'new-image-checksum')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.png'], 'new-image-png')
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test-mac/failures/expected/image-expected.txt'], 'new-image-txt')
def test_diff_baselines_txt(self):
- rebaseliner = self.make_rebaseliner()
- output = rebaseliner._port.expected_text(
- rebaseliner._port._filesystem.join(rebaseliner._port.layout_tests_dir(),
- 'passes/text.html'))
+ rebaseliner, filesystem = self.make_rebaseliner("")
+ port = rebaseliner._port
+ output = port.expected_text(
+ port._filesystem.join(port.layout_tests_dir(), 'passes/text.html'))
self.assertFalse(rebaseliner._diff_baselines(output, output,
is_image=False))
def test_diff_baselines_png(self):
- rebaseliner = self.make_rebaseliner()
- image = rebaseliner._port.expected_image(
- rebaseliner._port._filesystem.join(rebaseliner._port.layout_tests_dir(),
- 'passes/image.html'))
+ rebaseliner, filesystem = self.make_rebaseliner('')
+ port = rebaseliner._port
+ image = port.expected_image(
+ port._filesystem.join(port.layout_tests_dir(), 'passes/image.html'))
self.assertFalse(rebaseliner._diff_baselines(image, image,
is_image=True))
+class TestRealMain(unittest.TestCase):
+ def test_all_platforms(self):
+ expectations = "BUGX REBASELINE : failures/expected/image.html = IMAGE"
+
+ options = test_options()
+
+ host_port_obj, filesystem = test_host_port_and_filesystem(options, expectations)
+ url_fetcher = test_url_fetcher(filesystem)
+ zip_factory = test_zip_factory()
+ mock_scm = mocktool.MockSCM()
+ oc = outputcapture.OutputCapture()
+ oc.capture_output()
+ rebaseline_chromium_webkit_tests.real_main(options, options, host_port_obj,
+ host_port_obj, url_fetcher, zip_factory, mock_scm)
+ oc.restore_output()
+
+ # We expect to have written 35 files over the course of this rebaseline:
+ # *) 11 files * 3 ports for the new baselines and the diffs (see breakdown
+ # under test_one_platform, above)
+ # *) the updated test_expectations file
+ # *) the rebaseline results html file
+ self.assertEqual(len(filesystem.written_files), 35)
+ self.assertEqual(filesystem.files['/test.checkout/LayoutTests/platform/test/test_expectations.txt'], '')
+
+
class TestHtmlGenerator(unittest.TestCase):
def make_generator(self, files, tests):
options = mocktool.MockOptions(configuration=None, html_directory='/tmp')
- host_port = port.get('test', options, filesystem=filesystem_mock.MockFileSystem(files))
- generator = rebaseline_chromium_webkit_tests.HtmlGenerator(
- host_port,
- target_port=None,
- options=options,
- platforms=['mac'],
- rebaselining_tests=tests)
+ host_port = port.get('test', options, filesystem=port.unit_test_filesystem(files))
+ generator = rebaseline_chromium_webkit_tests.HtmlGenerator(host_port,
+ target_port=None, options=options, platforms=['mac'], rebaselining_tests=tests)
return generator, host_port
def test_generate_baseline_links(self):
diff --git a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index 17b6e89..2d55b93 100755
--- a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -30,8 +30,6 @@
"""Run layout tests."""
-from __future__ import with_statement
-
import errno
import logging
import optparse
@@ -41,6 +39,7 @@ import sys
from layout_package import printing
from layout_package import test_runner
+from layout_package import test_runner2
from webkitpy.common.system import user
from webkitpy.thirdparty import simplejson
@@ -89,7 +88,11 @@ def run(port, options, args, regular_output=sys.stderr,
# in a try/finally to ensure that we clean up the logging configuration.
num_unexpected_results = -1
try:
- runner = test_runner.TestRunner(port, options, printer)
+ if options.worker_model in ('inline', 'threads', 'processes'):
+ runner = test_runner2.TestRunner2(port, options, printer)
+ else:
+ runner = test_runner.TestRunner(port, options, printer)
+
runner._print_config()
printer.print_update("Collecting tests ...")
@@ -100,11 +103,11 @@ def run(port, options, args, regular_output=sys.stderr,
return -1
raise
- printer.print_update("Parsing expectations ...")
if options.lint_test_files:
return runner.lint()
- runner.parse_expectations(port.test_platform_name(),
- options.configuration == 'Debug')
+
+ printer.print_update("Parsing expectations ...")
+ runner.parse_expectations()
printer.print_update("Checking build ...")
if not port.check_build(runner.needs_http()):
@@ -128,9 +131,12 @@ def _set_up_derived_options(port_obj, options):
# We return a list of warnings to print after the printer is initialized.
warnings = []
- if options.worker_model == 'old-inline':
+ if options.worker_model is None:
+ options.worker_model = port_obj.default_worker_model()
+
+ if options.worker_model in ('inline', 'old-inline'):
if options.child_processes and int(options.child_processes) > 1:
- warnings.append("--worker-model=old-inline overrides --child-processes")
+ warnings.append("--worker-model=%s overrides --child-processes" % options.worker_model)
options.child_processes = "1"
if not options.child_processes:
options.child_processes = os.environ.get("WEBKIT_TEST_CHILD_PROCESSES",
@@ -226,9 +232,6 @@ def parse_args(args=None):
optparse.make_option("--nocheck-sys-deps", action="store_true",
default=False,
help="Don't check the system dependencies (themes)"),
- optparse.make_option("--use-test-shell", action="store_true",
- default=False,
- help="Use test_shell instead of DRT"),
optparse.make_option("--accelerated-compositing",
action="store_true",
help="Use hardware-accelated compositing for rendering"),
@@ -368,8 +371,8 @@ def parse_args(args=None):
help="Number of DumpRenderTrees to run in parallel."),
# FIXME: Display default number of child processes that will run.
optparse.make_option("--worker-model", action="store",
- default="old-threads", help=("controls worker model. Valid values "
- "are 'old-inline', 'old-threads'.")),
+ default=None, help=("controls worker model. Valid values are 'old-inline', "
+ "'old-threads', 'inline', 'threads', and 'processes'.")),
optparse.make_option("--experimental-fully-parallel",
action="store_true", default=False,
help="run all tests in parallel"),
@@ -415,10 +418,6 @@ def parse_args(args=None):
optparse.make_option("--test-results-server", default="",
help=("If specified, upload results json files to this appengine "
"server.")),
- optparse.make_option("--upload-full-results",
- action="store_true",
- default=False,
- help="If true, upload full json results to server."),
]
option_list = (configuration_options + print_options +
diff --git a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index 677becd..84f5718 100644
--- a/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -45,7 +45,7 @@ import unittest
from webkitpy.common import array_stream
from webkitpy.common.system import outputcapture
from webkitpy.common.system import filesystem_mock
-from webkitpy.common.system import user
+from webkitpy.tool import mocktool
from webkitpy.layout_tests import port
from webkitpy.layout_tests import run_webkit_tests
from webkitpy.layout_tests.layout_package import dump_render_tree_thread
@@ -56,14 +56,6 @@ from webkitpy.test.skip import skip_if
from webkitpy.thirdparty.mock import Mock
-class MockUser():
- def __init__(self):
- self.url = None
-
- def open_url(self, url):
- self.url = url
-
-
def parse_args(extra_args=None, record_results=False, tests_included=False,
print_nothing=True):
extra_args = extra_args or []
@@ -93,7 +85,7 @@ def passing_run(extra_args=None, port_obj=None, record_results=False,
tests_included)
if not port_obj:
port_obj = port.get(port_name=options.platform, options=options,
- user=MockUser(), filesystem=filesystem)
+ user=mocktool.MockUser(), filesystem=filesystem)
res = run_webkit_tests.run(port_obj, options, parsed_args)
return res == 0
@@ -103,7 +95,7 @@ def logging_run(extra_args=None, port_obj=None, record_results=False, tests_incl
record_results=record_results,
tests_included=tests_included,
print_nothing=False)
- user = MockUser()
+ user = mocktool.MockUser()
if not port_obj:
port_obj = port.get(port_name=options.platform, options=options,
user=user, filesystem=filesystem)
@@ -135,7 +127,7 @@ def get_tests_run(extra_args=None, tests_included=False, flatten_batches=False,
extra_args = ['passes', 'failures'] + extra_args
options, parsed_args = parse_args(extra_args, tests_included=True)
- user = MockUser()
+ user = mocktool.MockUser()
test_batches = []
@@ -216,7 +208,8 @@ class MainTest(unittest.TestCase):
def test_full_results_html(self):
# FIXME: verify html?
- self.assertTrue(passing_run(['--full-results-html']))
+ res, out, err, user = logging_run(['--full-results-html'])
+ self.assertEqual(res, 0)
def test_help_printing(self):
res, out, err, user = logging_run(['--help-printing'])
@@ -256,7 +249,7 @@ class MainTest(unittest.TestCase):
def test_lint_test_files__errors(self):
options, parsed_args = parse_args(['--lint-test-files'])
- user = MockUser()
+ user = mocktool.MockUser()
port_obj = port.get(options.platform, options=options, user=user)
port_obj.test_expectations = lambda: "# syntax error"
res, out, err = run_and_capture(port_obj, options, parsed_args)
@@ -352,7 +345,7 @@ class MainTest(unittest.TestCase):
self.assertEqual(res, 3)
self.assertFalse(out.empty())
self.assertFalse(err.empty())
- self.assertEqual(user.url, '/tmp/layout-test-results/results.html')
+ self.assertEqual(user.opened_urls, ['/tmp/layout-test-results/results.html'])
def test_exit_after_n_failures(self):
# Unexpected failures should result in tests stopping.
@@ -414,7 +407,7 @@ class MainTest(unittest.TestCase):
with fs.mkdtemp() as tmpdir:
res, out, err, user = logging_run(['--results-directory=' + str(tmpdir)],
tests_included=True, filesystem=fs)
- self.assertEqual(user.url, fs.join(tmpdir, 'results.html'))
+ self.assertEqual(user.opened_urls, [fs.join(tmpdir, 'results.html')])
def test_results_directory_default(self):
# We run a configuration that should fail, to generate output, then
@@ -422,7 +415,7 @@ class MainTest(unittest.TestCase):
# This is the default location.
res, out, err, user = logging_run(tests_included=True)
- self.assertEqual(user.url, '/tmp/layout-test-results/results.html')
+ self.assertEqual(user.opened_urls, ['/tmp/layout-test-results/results.html'])
def test_results_directory_relative(self):
# We run a configuration that should fail, to generate output, then
@@ -430,7 +423,7 @@ class MainTest(unittest.TestCase):
res, out, err, user = logging_run(['--results-directory=foo'],
tests_included=True)
- self.assertEqual(user.url, '/tmp/foo/results.html')
+ self.assertEqual(user.opened_urls, ['/tmp/foo/results.html'])
def test_tolerance(self):
class ImageDiffTestPort(TestPort):
@@ -441,7 +434,7 @@ class MainTest(unittest.TestCase):
def get_port_for_run(args):
options, parsed_args = run_webkit_tests.parse_args(args)
- test_port = ImageDiffTestPort(options=options, user=MockUser())
+ test_port = ImageDiffTestPort(options=options, user=mocktool.MockUser())
passing_run(args, port_obj=test_port, tests_included=True)
return test_port
@@ -459,11 +452,27 @@ class MainTest(unittest.TestCase):
self.assertEqual(None, test_port.tolerance_used_for_diff_image)
def test_worker_model__inline(self):
+ self.assertTrue(passing_run(['--worker-model', 'inline']))
+
+ def test_worker_model__old_inline_with_child_processes(self):
+ res, out, err, user = logging_run(['--worker-model', 'old-inline',
+ '--child-processes', '2'])
+ self.assertEqual(res, 0)
+ self.assertTrue('--worker-model=old-inline overrides --child-processes\n' in err.get())
+
+ def test_worker_model__old_inline(self):
self.assertTrue(passing_run(['--worker-model', 'old-inline']))
- def test_worker_model__threads(self):
+ def test_worker_model__old_threads(self):
self.assertTrue(passing_run(['--worker-model', 'old-threads']))
+ def test_worker_model__processes(self):
+ if compare_version(sys, '2.6')[0] >= 0:
+ self.assertTrue(passing_run(['--worker-model', 'processes']))
+
+ def test_worker_model__threads(self):
+ self.assertTrue(passing_run(['--worker-model', 'threads']))
+
def test_worker_model__unknown(self):
self.assertRaises(ValueError, logging_run,
['--worker-model', 'unknown'])
@@ -491,7 +500,7 @@ class RebaselineTest(unittest.TestCase):
'failures/expected/missing_image.html'],
tests_included=True, filesystem=fs)
file_list = fs.written_files.keys()
- file_list.remove('/tmp/layout-test-results/tests_run.txt')
+ file_list.remove('/tmp/layout-test-results/tests_run0.txt')
self.assertEqual(len(file_list), 6)
self.assertBaselines(file_list,
"/passes/image")
@@ -508,12 +517,12 @@ class RebaselineTest(unittest.TestCase):
'failures/expected/missing_image.html'],
tests_included=True, filesystem=fs)
file_list = fs.written_files.keys()
- file_list.remove('/tmp/layout-test-results/tests_run.txt')
+ file_list.remove('/tmp/layout-test-results/tests_run0.txt')
self.assertEqual(len(file_list), 6)
self.assertBaselines(file_list,
- "/platform/test/passes/image")
+ "/platform/test-mac/passes/image")
self.assertBaselines(file_list,
- "/platform/test/failures/expected/missing_image")
+ "/platform/test-mac/failures/expected/missing_image")
class DryrunTest(unittest.TestCase):
diff --git a/Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py b/Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
index 44605d2..1d7e107 100644
--- a/Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
+++ b/Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
@@ -49,23 +49,6 @@ _log = logging.getLogger("webkitpy.layout_tests.test_types.image_diff")
class ImageDiff(test_type_base.TestTypeBase):
- def _save_baseline_files(self, filename, image, image_hash,
- generate_new_baseline):
- """Saves new baselines for the PNG and checksum.
-
- Args:
- filename: test filename
- image: a image output
- image_hash: a checksum of the image
- generate_new_baseline: whether to generate a new, platform-specific
- baseline, or update the existing one
- """
- self._save_baseline_data(filename, image, ".png", encoding=None,
- generate_new_baseline=generate_new_baseline)
- self._save_baseline_data(filename, image_hash, ".checksum",
- encoding="ascii",
- generate_new_baseline=generate_new_baseline)
-
def _copy_image(self, filename, actual_image, expected_image):
self.write_output_files(filename, '.png',
output=actual_image, expected=expected_image,
@@ -85,54 +68,47 @@ class ImageDiff(test_type_base.TestTypeBase):
self.FILENAME_SUFFIX_COMPARE)
return port.diff_image(actual_image, expected_image, diff_filename)
- def compare_output(self, port, filename, test_args, actual_test_output,
- expected_test_output):
+ def compare_output(self, port, filename, options, actual_driver_output,
+ expected_driver_output):
"""Implementation of CompareOutput that checks the output image and
checksum against the expected files from the LayoutTest directory.
"""
failures = []
# If we didn't produce a hash file, this test must be text-only.
- if actual_test_output.image_hash is None:
- return failures
-
- # If we're generating a new baseline, we pass.
- if test_args.new_baseline or test_args.reset_results:
- self._save_baseline_files(filename, actual_test_output.image,
- actual_test_output.image_hash,
- test_args.new_baseline)
+ if actual_driver_output.image_hash is None:
return failures
- if not expected_test_output.image:
+ if not expected_driver_output.image:
# Report a missing expected PNG file.
- self._copy_image(filename, actual_test_output.image, expected_image=None)
- self._copy_image_hash(filename, actual_test_output.image_hash,
- expected_test_output.image_hash)
+ self._copy_image(filename, actual_driver_output.image, expected_image=None)
+ self._copy_image_hash(filename, actual_driver_output.image_hash,
+ expected_driver_output.image_hash)
failures.append(test_failures.FailureMissingImage())
return failures
- if not expected_test_output.image_hash:
+ if not expected_driver_output.image_hash:
# Report a missing expected checksum file.
- self._copy_image(filename, actual_test_output.image,
- expected_test_output.image)
- self._copy_image_hash(filename, actual_test_output.image_hash,
+ self._copy_image(filename, actual_driver_output.image,
+ expected_driver_output.image)
+ self._copy_image_hash(filename, actual_driver_output.image_hash,
expected_image_hash=None)
failures.append(test_failures.FailureMissingImageHash())
return failures
- if actual_test_output.image_hash == expected_test_output.image_hash:
+ if actual_driver_output.image_hash == expected_driver_output.image_hash:
# Hash matched (no diff needed, okay to return).
return failures
- self._copy_image(filename, actual_test_output.image,
- expected_test_output.image)
- self._copy_image_hash(filename, actual_test_output.image_hash,
- expected_test_output.image_hash)
+ self._copy_image(filename, actual_driver_output.image,
+ expected_driver_output.image)
+ self._copy_image_hash(filename, actual_driver_output.image_hash,
+ expected_driver_output.image_hash)
# Even though we only use the result in one codepath below but we
# still need to call CreateImageDiff for other codepaths.
images_are_different = self._create_diff_image(port, filename,
- actual_test_output.image,
- expected_test_output.image)
+ actual_driver_output.image,
+ expected_driver_output.image)
if not images_are_different:
failures.append(test_failures.FailureImageHashIncorrect())
else:
diff --git a/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py b/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
index ad65016..09bfc31 100644
--- a/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
+++ b/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
@@ -28,8 +28,6 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""Defines the interface TestTypeBase which other test types inherit from.
-
-Also defines the TestArguments "struct" to pass them additional arguments.
"""
import cgi
@@ -39,21 +37,6 @@ import logging
_log = logging.getLogger("webkitpy.layout_tests.test_types.test_type_base")
-class TestArguments(object):
- """Struct-like wrapper for additional arguments needed by
- specific tests."""
- # Whether to save new baseline results.
- new_baseline = False
-
- # Path to the actual PNG file generated by pixel tests
- png_path = None
-
- # Value of checksum generated by pixel tests.
- hash = None
-
- # Whether to use wdiff to generate by-word diffs.
- wdiff = False
-
# Python bug workaround. See the wdiff code in WriteOutputFiles for an
# explanation.
_wdiff_available = True
@@ -87,39 +70,6 @@ class TestTypeBase(object):
self._port.relative_test_filename(filename))
fs.maybe_make_directory(fs.dirname(output_filename))
- def _save_baseline_data(self, filename, data, modifier, encoding,
- generate_new_baseline=True):
- """Saves a new baseline file into the port's baseline directory.
-
- The file will be named simply "<test>-expected<modifier>", suitable for
- use as the expected results in a later run.
-
- Args:
- filename: path to the test file
- data: result to be saved as the new baseline
- modifier: type of the result file, e.g. ".txt" or ".png"
- encoding: file encoding (none, "utf-8", etc.)
- generate_new_baseline: whether to enerate a new, platform-specific
- baseline, or update the existing one
- """
-
- port = self._port
- fs = self._port._filesystem
- if generate_new_baseline:
- relative_dir = fs.dirname(port.relative_test_filename(filename))
- baseline_path = port.baseline_path()
- output_dir = fs.join(baseline_path, relative_dir)
- output_file = fs.basename(fs.splitext(filename)[0] +
- self.FILENAME_SUFFIX_EXPECTED + modifier)
- fs.maybe_make_directory(output_dir)
- output_path = fs.join(output_dir, output_file)
- _log.debug('writing new baseline result "%s"' % (output_path))
- else:
- output_path = port.expected_filename(filename, modifier)
- _log.debug('resetting baseline result "%s"' % output_path)
-
- port.update_baseline(output_path, data, encoding)
-
def output_filename(self, filename, modifier):
"""Returns a filename inside the output dir that contains modifier.
@@ -139,8 +89,8 @@ class TestTypeBase(object):
self._port.relative_test_filename(filename))
return fs.splitext(output_filename)[0] + modifier
- def compare_output(self, port, filename, test_args, actual_test_output,
- expected_test_output):
+ def compare_output(self, port, filename, options, actual_driver_output,
+ expected_driver_output):
"""Method that compares the output from the test with the
expected value.
@@ -149,12 +99,11 @@ class TestTypeBase(object):
Args:
port: object implementing port-specific information and methods
filename: absolute filename to test file
- test_args: a TestArguments object holding optional additional
- arguments
- actual_test_output: a TestOutput object which represents actual test
+ options: command line argument object from optparse
+ actual_driver_output: a DriverOutput object which represents actual test
output
- expected_test_output: a TestOutput object which represents a expected
- test output
+ expected_driver_output: a ExpectedDriverOutput object which represents a
+ expected test output
Return:
a list of TestFailure objects, empty if the test passes
diff --git a/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py b/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py
index 5dbfcb6..7af4d9c 100644
--- a/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base_unittest.py
@@ -40,7 +40,7 @@ class Test(unittest.TestCase):
test_type = test_type_base.TestTypeBase(None, None)
self.assertRaises(NotImplementedError, test_type.compare_output,
None, "foo.txt", '',
- test_type_base.TestArguments(), 'Debug')
+ {}, 'Debug')
if __name__ == '__main__':
diff --git a/Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py b/Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
index 7b7febe..07c3d03 100644
--- a/Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
+++ b/Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
@@ -53,26 +53,16 @@ class TestTextDiff(test_type_base.TestTypeBase):
# the normalized text expectation files.
return output.replace("\r\r\n", "\r\n").replace("\r\n", "\n")
- def compare_output(self, port, filename, test_args, actual_test_output,
- expected_test_output):
+ def compare_output(self, port, filename, options, actual_driver_output,
+ expected_driver_output):
"""Implementation of CompareOutput that checks the output text against
the expected text from the LayoutTest directory."""
failures = []
- # If we're generating a new baseline, we pass.
- if test_args.new_baseline or test_args.reset_results:
- # Although all test_shell/DumpRenderTree output should be utf-8,
- # we do not ever decode it inside run-webkit-tests. For some tests
- # DumpRenderTree may not output utf-8 text (e.g. webarchives).
- self._save_baseline_data(filename, actual_test_output.text,
- ".txt", encoding=None,
- generate_new_baseline=test_args.new_baseline)
- return failures
-
# Normalize text to diff
- actual_text = self._get_normalized_output_text(actual_test_output.text)
+ actual_text = self._get_normalized_output_text(actual_driver_output.text)
# Assuming expected_text is already normalized.
- expected_text = expected_test_output.text
+ expected_text = expected_driver_output.text
# Write output files for new tests, too.
if port.compare_text(actual_text, expected_text):
diff --git a/Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py b/Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py
index f4c8098..7267aa6 100755
--- a/Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py
+++ b/Tools/Scripts/webkitpy/layout_tests/update_webgl_conformance_tests.py
@@ -31,7 +31,7 @@ import optparse
import os
import re
import sys
-import webkitpy.common.checkout.scm as scm
+from webkitpy.common.checkout import scm
_log = logging.getLogger("webkitpy.layout_tests."
"update-webgl-conformance-tests")
diff --git a/Tools/Scripts/webkitpy/style/checker.py b/Tools/Scripts/webkitpy/style/checker.py
index ebcf326..23b9ab3 100644
--- a/Tools/Scripts/webkitpy/style/checker.py
+++ b/Tools/Scripts/webkitpy/style/checker.py
@@ -129,17 +129,20 @@ _PATH_RULES_SPECIFIER = [
([# The EFL APIs use EFL naming style, which includes
# both lower-cased and camel-cased, underscore-sparated
# values.
- "WebKit/efl/ewk/",
+ "Source/WebKit/efl/ewk/",
# There is no clean way to avoid "yy_*" names used by flex.
"Source/WebCore/css/CSSParser.cpp",
# Qt code uses '_' in some places (such as private slots
# and on test xxx_data methos on tests)
"Source/JavaScriptCore/qt/",
- "WebKit/qt/Api/",
- "WebKit/qt/tests/",
- "WebKit/qt/declarative/",
- "WebKit/qt/examples/"],
+ "Source/WebKit/qt/Api/",
+ "Source/WebKit/qt/tests/",
+ "Source/WebKit/qt/declarative/",
+ "Source/WebKit/qt/examples/"],
["-readability/naming"]),
+ ([# Qt's MiniBrowser has no config.h
+ "Tools/MiniBrowser/qt"],
+ ["-build/include"]),
([# The GTK+ APIs use GTK+ naming style, which includes
# lower-cased, underscore-separated values.
# Also, GTK+ allows the use of NULL.
@@ -162,24 +165,18 @@ _PATH_RULES_SPECIFIER = [
"-whitespace/parens"]),
# WebKit2 rules:
- # WebKit2 doesn't use config.h, and certain directories have other
- # idiosyncracies.
+ # WebKit2 and certain directories have idiosyncracies.
([# NPAPI has function names with underscores.
"Source/WebKit2/WebProcess/Plugins/Netscape"],
- ["-build/include_order",
- "-readability/naming"]),
+ ["-readability/naming"]),
([# The WebKit2 C API has names with underscores and whitespace-aligned
# struct members. Also, we allow unnecessary parameter names in
# WebKit2 APIs because we're matching CF's header style.
"Source/WebKit2/UIProcess/API/C/",
"Source/WebKit2/WebProcess/InjectedBundle/API/c/"],
- ["-build/include_order",
- "-readability/naming",
+ ["-readability/naming",
"-readability/parameter_name",
"-whitespace/declaration"]),
- ([# Nothing in WebKit2 uses config.h.
- "Source/WebKit2/"],
- ["-build/include_order"]),
# For third-party Python code, keep only the following checks--
#
@@ -243,7 +240,7 @@ _XML_FILE_EXTENSIONS = [
_SKIPPED_FILES_WITH_WARNING = [
"gtk2drawing.c", # WebCore/platform/gtk/gtk2drawing.c
"gtkdrawing.h", # WebCore/platform/gtk/gtkdrawing.h
- "WebKit/gtk/tests/",
+ "Source/WebKit/gtk/tests/",
# Soup API that is still being cooked, will be removed from WebKit
# in a few months when it is merged into soup proper. The style
# follows the libsoup style completely.
diff --git a/Tools/Scripts/webkitpy/style/checker_unittest.py b/Tools/Scripts/webkitpy/style/checker_unittest.py
index a4649d2..a796e0b 100755
--- a/Tools/Scripts/webkitpy/style/checker_unittest.py
+++ b/Tools/Scripts/webkitpy/style/checker_unittest.py
@@ -216,11 +216,11 @@ class GlobalVariablesTest(unittest.TestCase):
"build/include")
assertCheck("random_path.cpp",
"readability/naming")
- assertNoCheck("WebKit/gtk/webkit/webkit.h",
+ assertNoCheck("Source/WebKit/gtk/webkit/webkit.h",
"readability/naming")
assertNoCheck("Tools/DumpRenderTree/gtk/DumpRenderTree.cpp",
"readability/null")
- assertNoCheck("WebKit/efl/ewk/ewk_view.h",
+ assertNoCheck("Source/WebKit/efl/ewk/ewk_view.h",
"readability/naming")
assertNoCheck("Source/WebCore/css/CSSParser.cpp",
"readability/naming")
@@ -228,28 +228,31 @@ class GlobalVariablesTest(unittest.TestCase):
# Test if Qt exceptions are indeed working
assertCheck("Source/JavaScriptCore/qt/api/qscriptengine.cpp",
"readability/braces")
- assertCheck("WebKit/qt/Api/qwebpage.cpp",
+ assertCheck("Source/WebKit/qt/Api/qwebpage.cpp",
"readability/braces")
- assertCheck("WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
+ assertCheck("Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
"readability/braces")
- assertCheck("WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
+ assertCheck("Source/WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
"readability/braces")
- assertCheck("WebKit/qt/examples/platformplugin/WebPlugin.cpp",
+ assertCheck("Source/WebKit/qt/examples/platformplugin/WebPlugin.cpp",
"readability/braces")
assertNoCheck("Source/JavaScriptCore/qt/api/qscriptengine.cpp",
"readability/naming")
assertNoCheck("Source/JavaScriptCore/qt/benchmarks"
"/qscriptengine/tst_qscriptengine.cpp",
"readability/naming")
- assertNoCheck("WebKit/qt/Api/qwebpage.cpp",
+ assertNoCheck("Source/WebKit/qt/Api/qwebpage.cpp",
"readability/naming")
- assertNoCheck("WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
+ assertNoCheck("Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
"readability/naming")
- assertNoCheck("WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
+ assertNoCheck("Source/WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
"readability/naming")
- assertNoCheck("WebKit/qt/examples/platformplugin/WebPlugin.cpp",
+ assertNoCheck("Source/WebKit/qt/examples/platformplugin/WebPlugin.cpp",
"readability/naming")
+ assertNoCheck("Tools/MiniBrowser/qt/UrlLoader.cpp",
+ "build/include")
+
assertNoCheck("Source/WebCore/ForwardingHeaders/debugger/Debugger.h",
"build/header_guard")
@@ -301,7 +304,7 @@ class CheckerDispatcherSkipTest(unittest.TestCase):
"gtkdrawing.h",
"Source/WebCore/platform/gtk/gtk2drawing.c",
"Source/WebCore/platform/gtk/gtkdrawing.h",
- "WebKit/gtk/tests/testatk.c",
+ "Source/WebKit/gtk/tests/testatk.c",
]
for path in paths_to_skip:
diff --git a/Tools/Scripts/webkitpy/style/checkers/cpp.py b/Tools/Scripts/webkitpy/style/checkers/cpp.py
index 250b9ee..671fd56 100644
--- a/Tools/Scripts/webkitpy/style/checkers/cpp.py
+++ b/Tools/Scripts/webkitpy/style/checkers/cpp.py
@@ -194,6 +194,31 @@ def iteratively_replace_matches_with_char(pattern, char_replacement, s):
s = s[:start_match_index] + char_replacement * match_length + s[end_match_index:]
+def _rfind_in_lines(regex, lines, start_position, not_found_position):
+ """Does a reverse find starting at start position and going backwards until
+ a match is found.
+
+ Returns the position where the regex ended.
+ """
+ # Put the regex in a group and proceed it with a greedy expression that
+ # matches anything to ensure that we get the last possible match in a line.
+ last_in_line_regex = r'.*(' + regex + ')'
+ current_row = start_position.row
+
+ # Start with the given row and trim off everything past what may be matched.
+ current_line = lines[start_position.row][:start_position.column]
+ while True:
+ found_match = match(last_in_line_regex, current_line)
+ if found_match:
+ return Position(current_row, found_match.end(1))
+
+ # A match was not found so continue backward.
+ current_row -= 1
+ if current_row < 0:
+ return not_found_position
+ current_line = lines[current_row]
+
+
def _convert_to_lower_with_underscores(text):
"""Converts all text strings in camelCase or PascalCase to lowers with underscores."""
@@ -526,6 +551,15 @@ class _FunctionState(object):
self._clean_lines = clean_lines
self._parameter_list = None
+ def modifiers_and_return_type(self):
+ """Returns the modifiers and the return type."""
+ # Go backwards from where the function name is until we encounter one of several things:
+ # ';' or '{' or '}' or 'private:', etc. or '#' or return Position(0, 0)
+ elided = self._clean_lines.elided
+ start_modifiers = _rfind_in_lines(r';|\{|\}|((private|public|protected):)|(#.*)',
+ elided, self.parameter_start_position, Position(0, 0))
+ return SingleLineView(elided, start_modifiers, self.function_name_start_position).single_line.strip()
+
def parameter_list(self):
if not self._parameter_list:
# Store the final result as a tuple since that is immutable.
@@ -2315,7 +2349,7 @@ def check_for_null(clean_lines, line_number, file_state, error):
# matches, then do the check with strings collapsed to avoid giving errors for
# NULLs occurring in strings.
if search(r'\bNULL\b', line) and search(r'\bNULL\b', CleansedLines.collapse_strings(line)):
- error(line_number, 'readability/null', 4, 'Use 0 instead of NULL.')
+ error(line_number, 'readability/null', 4, 'Use 0 or null instead of NULL (even in *comments*).')
def get_line_width(line):
"""Determines the width of the line in column positions.
diff --git a/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py b/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
index 868d3f6..53670d7 100644
--- a/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
+++ b/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py
@@ -352,16 +352,17 @@ class CppStyleTestBase(unittest.TestCase):
class FunctionDetectionTest(CppStyleTestBase):
- def perform_function_detection(self, lines, function_information):
+ def perform_function_detection(self, lines, function_information, detection_line=0):
clean_lines = cpp_style.CleansedLines(lines)
function_state = cpp_style._FunctionState(5)
error_collector = ErrorCollector(self.assert_)
- cpp_style.detect_functions(clean_lines, 0, function_state, error_collector)
+ cpp_style.detect_functions(clean_lines, detection_line, function_state, error_collector)
if not function_information:
self.assertEquals(function_state.in_a_function, False)
return
self.assertEquals(function_state.in_a_function, True)
self.assertEquals(function_state.current_function, function_information['name'] + '()')
+ self.assertEquals(function_state.modifiers_and_return_type(), function_information['modifiers_and_return_type'])
self.assertEquals(function_state.is_pure, function_information['is_pure'])
self.assertEquals(function_state.is_declaration, function_information['is_declaration'])
self.assert_positions_equal(function_state.function_name_start_position, function_information['function_name_start_position'])
@@ -385,6 +386,7 @@ class FunctionDetectionTest(CppStyleTestBase):
['void theTestFunctionName(int) {',
'}'],
{'name': 'theTestFunctionName',
+ 'modifiers_and_return_type': 'void',
'function_name_start_position': (0, 5),
'parameter_start_position': (0, 24),
'parameter_end_position': (0, 29),
@@ -397,6 +399,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['void aFunctionName(int);'],
{'name': 'aFunctionName',
+ 'modifiers_and_return_type': 'void',
'function_name_start_position': (0, 5),
'parameter_start_position': (0, 18),
'parameter_end_position': (0, 23),
@@ -408,6 +411,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['CheckedInt<T> operator /(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
{'name': 'operator /',
+ 'modifiers_and_return_type': 'CheckedInt<T>',
'function_name_start_position': (0, 14),
'parameter_start_position': (0, 24),
'parameter_end_position': (0, 76),
@@ -419,6 +423,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['CheckedInt<T> operator -(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
{'name': 'operator -',
+ 'modifiers_and_return_type': 'CheckedInt<T>',
'function_name_start_position': (0, 14),
'parameter_start_position': (0, 24),
'parameter_end_position': (0, 76),
@@ -430,6 +435,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['CheckedInt<T> operator !=(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
{'name': 'operator !=',
+ 'modifiers_and_return_type': 'CheckedInt<T>',
'function_name_start_position': (0, 14),
'parameter_start_position': (0, 25),
'parameter_end_position': (0, 77),
@@ -441,6 +447,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['CheckedInt<T> operator +(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
{'name': 'operator +',
+ 'modifiers_and_return_type': 'CheckedInt<T>',
'function_name_start_position': (0, 14),
'parameter_start_position': (0, 24),
'parameter_end_position': (0, 76),
@@ -453,6 +460,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['virtual void theTestFunctionName(int = 0);'],
{'name': 'theTestFunctionName',
+ 'modifiers_and_return_type': 'virtual void',
'function_name_start_position': (0, 13),
'parameter_start_position': (0, 32),
'parameter_end_position': (0, 41),
@@ -464,6 +472,7 @@ class FunctionDetectionTest(CppStyleTestBase):
self.perform_function_detection(
['virtual void theTestFunctionName(int) = 0;'],
{'name': 'theTestFunctionName',
+ 'modifiers_and_return_type': 'virtual void',
'function_name_start_position': (0, 13),
'parameter_start_position': (0, 32),
'parameter_end_position': (0, 37),
@@ -478,6 +487,7 @@ class FunctionDetectionTest(CppStyleTestBase):
' = ',
' 0 ;'],
{'name': 'theTestFunctionName',
+ 'modifiers_and_return_type': 'virtual void',
'function_name_start_position': (0, 13),
'parameter_start_position': (0, 32),
'parameter_end_position': (0, 37),
@@ -498,6 +508,7 @@ class FunctionDetectionTest(CppStyleTestBase):
# This isn't a function but it looks like one to our simple
# algorithm and that is ok.
{'name': 'asm',
+ 'modifiers_and_return_type': '',
'function_name_start_position': (0, 0),
'parameter_start_position': (0, 3),
'parameter_end_position': (2, 1),
@@ -514,6 +525,7 @@ class FunctionDetectionTest(CppStyleTestBase):
function_state = self.perform_function_detection(
['void functionName();'],
{'name': 'functionName',
+ 'modifiers_and_return_type': 'void',
'function_name_start_position': (0, 5),
'parameter_start_position': (0, 17),
'parameter_end_position': (0, 19),
@@ -527,6 +539,7 @@ class FunctionDetectionTest(CppStyleTestBase):
function_state = self.perform_function_detection(
['void functionName(int);'],
{'name': 'functionName',
+ 'modifiers_and_return_type': 'void',
'function_name_start_position': (0, 5),
'parameter_start_position': (0, 17),
'parameter_end_position': (0, 22),
@@ -541,6 +554,7 @@ class FunctionDetectionTest(CppStyleTestBase):
function_state = self.perform_function_detection(
['void functionName(unsigned a, short b, long c, long long short unsigned int);'],
{'name': 'functionName',
+ 'modifiers_and_return_type': 'void',
'function_name_start_position': (0, 5),
'parameter_start_position': (0, 17),
'parameter_end_position': (0, 76),
@@ -558,6 +572,7 @@ class FunctionDetectionTest(CppStyleTestBase):
function_state = self.perform_function_detection(
['virtual void determineARIADropEffects(Vector<String>*&, const unsigned long int*&, const MediaPlayer::Preload, Other<Other2, Other3<P1, P2> >, int);'],
{'name': 'determineARIADropEffects',
+ 'modifiers_and_return_type': 'virtual void',
'parameter_start_position': (0, 37),
'function_name_start_position': (0, 13),
'parameter_end_position': (0, 147),
@@ -574,23 +589,27 @@ class FunctionDetectionTest(CppStyleTestBase):
# Try parsing a function with a very complex definition.
function_state = self.perform_function_detection(
- ['AnotherTemplate<Class1, Class2> aFunctionName(PassRefPtr<MyClass> paramName,',
+ ['#define MyMacro(a) a',
+ 'virtual',
+ 'AnotherTemplate<Class1, Class2> aFunctionName(PassRefPtr<MyClass> paramName,',
'const Other1Class& foo,',
'const ComplexTemplate<Class1, NestedTemplate<P1, P2> >* const * param = new ComplexTemplate<Class1, NestedTemplate<P1, P2> >(34, 42),',
'int* myCount = 0);'],
{'name': 'aFunctionName',
- 'function_name_start_position': (0, 32),
- 'parameter_start_position': (0, 45),
- 'parameter_end_position': (3, 17),
- 'body_start_position': (3, 17),
- 'end_position': (3, 18),
+ 'modifiers_and_return_type': 'virtual AnotherTemplate<Class1, Class2>',
+ 'function_name_start_position': (2, 32),
+ 'parameter_start_position': (2, 45),
+ 'parameter_end_position': (5, 17),
+ 'body_start_position': (5, 17),
+ 'end_position': (5, 18),
'is_pure': False,
'is_declaration': True,
'parameter_list':
- ({'type': 'PassRefPtr<MyClass>', 'name': 'paramName', 'row': 0},
- {'type': 'const Other1Class&', 'name': 'foo', 'row': 1},
- {'type': 'const ComplexTemplate<Class1, NestedTemplate<P1, P2> >* const *', 'name': 'param', 'row': 2},
- {'type': 'int*', 'name': 'myCount', 'row': 3})})
+ ({'type': 'PassRefPtr<MyClass>', 'name': 'paramName', 'row': 2},
+ {'type': 'const Other1Class&', 'name': 'foo', 'row': 3},
+ {'type': 'const ComplexTemplate<Class1, NestedTemplate<P1, P2> >* const *', 'name': 'param', 'row': 4},
+ {'type': 'int*', 'name': 'myCount', 'row': 5})},
+ detection_line=2)
class CppStyleTest(CppStyleTestBase):
@@ -630,6 +649,14 @@ class CppStyleTest(CppStyleTestBase):
self.assertTrue(position < cpp_style.Position(position.row + 1, position.column - 1))
self.assertEquals(position.__str__(), '(3, 4)')
+ def test_rfind_in_lines(self):
+ not_found_position = cpp_style.Position(10, 11)
+ start_position = cpp_style.Position(2, 2)
+ lines = ['ab', 'ace', 'test']
+ self.assertEquals(not_found_position, cpp_style._rfind_in_lines('st', lines, start_position, not_found_position))
+ self.assertTrue(cpp_style.Position(1, 1) == cpp_style._rfind_in_lines('a', lines, start_position, not_found_position))
+ self.assertEquals(cpp_style.Position(2, 2), cpp_style._rfind_in_lines('(te|a)', lines, start_position, not_found_position))
+
def test_close_expression(self):
self.assertEquals(cpp_style.Position(1, -1), cpp_style.close_expression([')('], cpp_style.Position(0, 1)))
self.assertEquals(cpp_style.Position(1, -1), cpp_style.close_expression([') ()'], cpp_style.Position(0, 1)))
@@ -3901,12 +3928,12 @@ class WebKitStyleTest(CppStyleTestBase):
'foo.cpp')
self.assert_lint(
"// Don't use NULL in comments since it isn't in code.",
- 'Use 0 instead of NULL.'
+ 'Use 0 or null instead of NULL (even in *comments*).'
' [readability/null] [4]',
'foo.cpp')
self.assert_lint(
'"A string with NULL" // and a comment with NULL is tricky to flag correctly in cpp_style.',
- 'Use 0 instead of NULL.'
+ 'Use 0 or null instead of NULL (even in *comments*).'
' [readability/null] [4]',
'foo.cpp')
self.assert_lint(
diff --git a/Tools/Scripts/webkitpy/style/checkers/test_expectations.py b/Tools/Scripts/webkitpy/style/checkers/test_expectations.py
index c86b32c..e37f908 100644
--- a/Tools/Scripts/webkitpy/style/checkers/test_expectations.py
+++ b/Tools/Scripts/webkitpy/style/checkers/test_expectations.py
@@ -75,7 +75,6 @@ class TestExpectationsChecker(object):
"Using 'test' port, but platform-specific expectations "
"will fail the check." % self._file_path)
self._port_obj = port.get('test')
- self._port_to_check = self._port_obj.test_platform_name()
# Suppress error messages of test_expectations module since they will be
# reported later.
log = logging.getLogger("webkitpy.layout_tests.layout_package."
@@ -91,7 +90,7 @@ class TestExpectationsChecker(object):
try:
expectations = test_expectations.TestExpectationsFile(
port=self._port_obj, expectations=expectations_str, full_test_list=tests,
- test_platform_name=self._port_to_check, is_debug_mode=False,
+ test_config=self._port_obj.test_configuration(),
is_lint_mode=True, overrides=overrides)
except test_expectations.ParseError, error:
err = error
diff --git a/Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py b/Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py
index 9817c5d..f0813e1 100644
--- a/Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py
+++ b/Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py
@@ -84,15 +84,6 @@ class TestExpectationsTestCase(unittest.TestCase):
def test_valid_expectations(self):
self.assert_lines_lint(
- ["passes/text.html = PASS"],
- "")
- self.assert_lines_lint(
- ["passes/text.html = FAIL PASS"],
- "")
- self.assert_lines_lint(
- ["passes/text.html = CRASH TIMEOUT FAIL PASS"],
- "")
- self.assert_lines_lint(
["BUGCR1234 MAC : passes/text.html = PASS FAIL"],
"")
self.assert_lines_lint(
@@ -120,12 +111,12 @@ class TestExpectationsTestCase(unittest.TestCase):
def test_modifier_errors(self):
self.assert_lines_lint(
["BUG1234 : passes/text.html = FAIL"],
- 'Bug must be either BUGCR, BUGWK, or BUGV8_ for test: bug1234 passes/text.html [test/expectations] [5]')
+ "BUG\\d+ is not allowed, must be one of BUGCR\\d+, BUGWK\\d+, BUGV8_\\d+, or a non-numeric bug identifier. passes/text.html [test/expectations] [5]")
def test_valid_modifiers(self):
self.assert_lines_lint(
["INVALID-MODIFIER : passes/text.html = PASS"],
- "Invalid modifier for test: invalid-modifier "
+ "Unrecognized option 'invalid-modifier' "
"passes/text.html [test/expectations] [5]")
self.assert_lines_lint(
["SKIP : passes/text.html = PASS"],
@@ -135,38 +126,38 @@ class TestExpectationsTestCase(unittest.TestCase):
def test_expectation_errors(self):
self.assert_lines_lint(
["missing expectations"],
- "Missing expectations. ['missing expectations'] [test/expectations] [5]")
+ "Missing a ':' missing expectations [test/expectations] [5]")
self.assert_lines_lint(
["SLOW : passes/text.html = TIMEOUT"],
- "A test can not be both slow and timeout. "
- "If it times out indefinitely, then it should be just timeout. "
+ "A test can not be both SLOW and TIMEOUT. "
+ "If it times out indefinitely, then it should be just TIMEOUT. "
"passes/text.html [test/expectations] [5]")
self.assert_lines_lint(
- ["does/not/exist.html = FAIL"],
+ ["BUGWK1 : does/not/exist.html = FAIL"],
"Path does not exist. does/not/exist.html [test/expectations] [2]")
def test_parse_expectations(self):
self.assert_lines_lint(
- ["passes/text.html = PASS"],
+ ["BUGWK1 : passes/text.html = PASS"],
"")
self.assert_lines_lint(
- ["passes/text.html = UNSUPPORTED"],
+ ["BUGWK1 : passes/text.html = UNSUPPORTED"],
"Unsupported expectation: unsupported "
"passes/text.html [test/expectations] [5]")
self.assert_lines_lint(
- ["passes/text.html = PASS UNSUPPORTED"],
+ ["BUGWK1 : passes/text.html = PASS UNSUPPORTED"],
"Unsupported expectation: unsupported "
"passes/text.html [test/expectations] [5]")
def test_already_seen_test(self):
self.assert_lines_lint(
- ["passes/text.html = PASS",
- "passes/text.html = TIMEOUT"],
- "Duplicate expectation. %s [test/expectations] [5]" % self._test_file)
+ ["BUGWK1 : passes/text.html = PASS",
+ "BUGWK1 : passes/text.html = TIMEOUT"],
+ "Duplicate or ambiguous expectation. %s [test/expectations] [5]" % self._test_file)
def test_tab(self):
self.assert_lines_lint(
- ["\tpasses/text.html = PASS"],
+ ["\tBUGWK1 : passes/text.html = PASS"],
"Line contains tab character. [whitespace/tab] [5]")
if __name__ == '__main__':
diff --git a/Tools/Scripts/webkitpy/tool/bot/irc_command.py b/Tools/Scripts/webkitpy/tool/bot/irc_command.py
index 265974e..67a1c44 100644
--- a/Tools/Scripts/webkitpy/tool/bot/irc_command.py
+++ b/Tools/Scripts/webkitpy/tool/bot/irc_command.py
@@ -27,7 +27,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import random
-import webkitpy.common.config.irc as config_irc
+from webkitpy.common.config import irc as config_irc
from webkitpy.common.config import urls
from webkitpy.common.net.bugzilla import parse_bug_id
diff --git a/Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py b/Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py
index de77222..29e89a8 100644
--- a/Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py
+++ b/Tools/Scripts/webkitpy/tool/bot/sheriffircbot.py
@@ -26,7 +26,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import webkitpy.tool.bot.irc_command as irc_command
+from webkitpy.tool.bot import irc_command
from webkitpy.common.net.irc.ircbot import IRCBotDelegate
from webkitpy.common.thread.threadedmessagequeue import ThreadedMessageQueue
diff --git a/Tools/Scripts/webkitpy/tool/commands/__init__.py b/Tools/Scripts/webkitpy/tool/commands/__init__.py
index a974b67..26bd195 100644
--- a/Tools/Scripts/webkitpy/tool/commands/__init__.py
+++ b/Tools/Scripts/webkitpy/tool/commands/__init__.py
@@ -10,5 +10,6 @@ from webkitpy.tool.commands.queries import *
from webkitpy.tool.commands.queues import *
from webkitpy.tool.commands.rebaseline import Rebaseline
from webkitpy.tool.commands.rebaselineserver import RebaselineServer
+from webkitpy.tool.commands.roll import *
from webkitpy.tool.commands.sheriffbot import *
from webkitpy.tool.commands.upload import *
diff --git a/Tools/Scripts/webkitpy/tool/commands/commandtest.py b/Tools/Scripts/webkitpy/tool/commands/commandtest.py
index c0efa50..e335710 100644
--- a/Tools/Scripts/webkitpy/tool/commands/commandtest.py
+++ b/Tools/Scripts/webkitpy/tool/commands/commandtest.py
@@ -32,7 +32,7 @@ from webkitpy.common.system.outputcapture import OutputCapture
from webkitpy.tool.mocktool import MockOptions, MockTool
class CommandsTest(unittest.TestCase):
- def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", options=MockOptions(), tool=MockTool()):
+ def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", expected_exception=None, options=MockOptions(), tool=MockTool()):
options.blocks = None
options.cc = 'MOCK cc'
options.component = 'MOCK component'
@@ -45,4 +45,4 @@ class CommandsTest(unittest.TestCase):
options.quiet = True
options.reviewer = 'MOCK reviewer'
command.bind_to_tool(tool)
- OutputCapture().assert_outputs(self, command.execute, [options, args, tool], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
+ OutputCapture().assert_outputs(self, command.execute, [options, args, tool], expected_stdout=expected_stdout, expected_stderr=expected_stderr, expected_exception=expected_exception)
diff --git a/Tools/Scripts/webkitpy/tool/commands/download.py b/Tools/Scripts/webkitpy/tool/commands/download.py
index 1b478bf..35484cd 100644
--- a/Tools/Scripts/webkitpy/tool/commands/download.py
+++ b/Tools/Scripts/webkitpy/tool/commands/download.py
@@ -29,7 +29,7 @@
import os
-import webkitpy.tool.steps as steps
+from webkitpy.tool import steps
from webkitpy.common.checkout.changelog import ChangeLog
from webkitpy.common.config import urls
diff --git a/Tools/Scripts/webkitpy/tool/commands/download_unittest.py b/Tools/Scripts/webkitpy/tool/commands/download_unittest.py
index ba23ab9..ced5b2f 100644
--- a/Tools/Scripts/webkitpy/tool/commands/download_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/commands/download_unittest.py
@@ -200,7 +200,13 @@ where ATTACHMENT_ID is the ID of this attachment.
self.assert_execute_outputs(CreateRollout(), ["855 852 854", "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
def test_rollout(self):
- expected_stderr = "Preparing rollout for bug 42.\nUpdating working directory\nRunning prepare-ChangeLog\nMOCK: user.open_url: file://...\nBuilding WebKit\nCommitted r49824: <http://trac.webkit.org/changeset/49824>\n"
- expected_stdout = "Was that diff correct?\n"
- self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stdout=expected_stdout, expected_stderr=expected_stderr)
+ expected_stderr = """Preparing rollout for bug 42.
+Updating working directory
+Running prepare-ChangeLog
+MOCK: user.open_url: file://...
+Was that diff correct?
+Building WebKit
+Committed r49824: <http://trac.webkit.org/changeset/49824>
+"""
+ self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
diff --git a/Tools/Scripts/webkitpy/tool/commands/prettydiff.py b/Tools/Scripts/webkitpy/tool/commands/prettydiff.py
index e3fc00c..67866f0 100644
--- a/Tools/Scripts/webkitpy/tool/commands/prettydiff.py
+++ b/Tools/Scripts/webkitpy/tool/commands/prettydiff.py
@@ -27,7 +27,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from webkitpy.tool.commands.abstractsequencedcommand import AbstractSequencedCommand
-import webkitpy.tool.steps as steps
+from webkitpy.tool import steps
class PrettyDiff(AbstractSequencedCommand):
diff --git a/Tools/Scripts/webkitpy/tool/commands/queries.py b/Tools/Scripts/webkitpy/tool/commands/queries.py
index 733751e..57f90ae 100644
--- a/Tools/Scripts/webkitpy/tool/commands/queries.py
+++ b/Tools/Scripts/webkitpy/tool/commands/queries.py
@@ -30,7 +30,7 @@
from optparse import make_option
-import webkitpy.tool.steps as steps
+from webkitpy.tool import steps
from webkitpy.common.checkout.commitinfo import CommitInfo
from webkitpy.common.config.committers import CommitterList
diff --git a/Tools/Scripts/webkitpy/tool/commands/roll.py b/Tools/Scripts/webkitpy/tool/commands/roll.py
new file mode 100644
index 0000000..0cf95e9
--- /dev/null
+++ b/Tools/Scripts/webkitpy/tool/commands/roll.py
@@ -0,0 +1,48 @@
+# Copyright (c) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.tool.commands.abstractsequencedcommand import AbstractSequencedCommand
+
+from webkitpy.tool import steps
+
+
+class RollChromiumDEPS(AbstractSequencedCommand):
+ name = "roll-chromium-deps"
+ help_text = "Updates Chromium DEPS (defaults to the last-known good revision of Chromium)"
+ argument_names = "[CHROMIUM_REVISION]"
+ steps = [
+ steps.UpdateChromiumDEPS,
+ steps.PrepareChangeLogForDEPSRoll,
+ steps.ConfirmDiff,
+ steps.Commit,
+ ]
+
+ def _prepare_state(self, options, args, tool):
+ return {
+ "chromium_revision": (args and args[0]),
+ }
diff --git a/Tools/Scripts/webkitpy/tool/commands/roll_unittest.py b/Tools/Scripts/webkitpy/tool/commands/roll_unittest.py
new file mode 100644
index 0000000..b6f69ea
--- /dev/null
+++ b/Tools/Scripts/webkitpy/tool/commands/roll_unittest.py
@@ -0,0 +1,50 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.thirdparty.mock import Mock
+from webkitpy.tool.commands.commandtest import CommandsTest
+from webkitpy.tool.commands.roll import *
+from webkitpy.tool.mocktool import MockOptions, MockTool
+
+
+class RollCommandsTest(CommandsTest):
+ def test_update_chromium_deps(self):
+ expected_stderr = """Updating Chromium DEPS to 6764
+MOCK: MockDEPS.write_variable(chromium_rev, 6764)
+Running prepare-ChangeLog
+MOCK: user.open_url: file://...
+Was that diff correct?
+Committed r49824: <http://trac.webkit.org/changeset/49824>
+"""
+ self.assert_execute_outputs(RollChromiumDEPS(), [6764], expected_stderr=expected_stderr)
+
+ def test_update_chromium_deps_older_revision(self):
+ expected_stderr = """Current Chromium DEPS revision 6564 is newer than 5764.
+ERROR: Unable to update Chromium DEPS
+"""
+ self.assert_execute_outputs(RollChromiumDEPS(), [5764], expected_stderr=expected_stderr, expected_exception=SystemExit)
diff --git a/Tools/Scripts/webkitpy/tool/commands/stepsequence.py b/Tools/Scripts/webkitpy/tool/commands/stepsequence.py
index be2ed4c..b666554 100644
--- a/Tools/Scripts/webkitpy/tool/commands/stepsequence.py
+++ b/Tools/Scripts/webkitpy/tool/commands/stepsequence.py
@@ -26,12 +26,12 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import webkitpy.tool.steps as steps
+from webkitpy.tool import steps
-from webkitpy.common.system.executive import ScriptError
from webkitpy.common.checkout.scm import CheckoutNeedsUpdate
-from webkitpy.tool.bot.queueengine import QueueEngine
from webkitpy.common.system.deprecated_logging import log
+from webkitpy.common.system.executive import ScriptError
+from webkitpy.tool.bot.queueengine import QueueEngine
class StepSequenceErrorHandler():
diff --git a/Tools/Scripts/webkitpy/tool/commands/upload.py b/Tools/Scripts/webkitpy/tool/commands/upload.py
index 6617b4f..e455b18 100644
--- a/Tools/Scripts/webkitpy/tool/commands/upload.py
+++ b/Tools/Scripts/webkitpy/tool/commands/upload.py
@@ -34,17 +34,17 @@ import sys
from optparse import make_option
-import webkitpy.tool.steps as steps
+from webkitpy.tool import steps
from webkitpy.common.config.committers import CommitterList
from webkitpy.common.net.bugzilla import parse_bug_id
+from webkitpy.common.system.deprecated_logging import error, log
from webkitpy.common.system.user import User
from webkitpy.thirdparty.mock import Mock
from webkitpy.tool.commands.abstractsequencedcommand import AbstractSequencedCommand
-from webkitpy.tool.grammar import pluralize, join_with_separators
from webkitpy.tool.comments import bug_comment_from_svn_revision
+from webkitpy.tool.grammar import pluralize, join_with_separators
from webkitpy.tool.multicommandtool import AbstractDeclarativeCommand
-from webkitpy.common.system.deprecated_logging import error, log
class CommitMessageForCurrentDiff(AbstractDeclarativeCommand):
diff --git a/Tools/Scripts/webkitpy/tool/commands/upload_unittest.py b/Tools/Scripts/webkitpy/tool/commands/upload_unittest.py
index a347b00..b5f5ae9 100644
--- a/Tools/Scripts/webkitpy/tool/commands/upload_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/commands/upload_unittest.py
@@ -61,12 +61,12 @@ class UploadCommandsTest(CommandsTest):
options.suggest_reviewers = False
expected_stderr = """Running check-webkit-style
MOCK: user.open_url: file://...
+Was that diff correct?
Obsoleting 2 old patches on bug 42
MOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
MOCK: user.open_url: http://example.com/42
"""
- expected_stdout = "Was that diff correct?\n"
- self.assert_execute_outputs(Post(), [42], options=options, expected_stdout=expected_stdout, expected_stderr=expected_stderr)
+ self.assert_execute_outputs(Post(), [42], options=options, expected_stderr=expected_stderr)
def test_land_safely(self):
expected_stderr = "Obsoleting 2 old patches on bug 42\nMOCK add_patch_to_bug: bug_id=42, description=Patch for landing, mark_for_review=False, mark_for_commit_queue=False, mark_for_landing=True\n"
@@ -90,12 +90,12 @@ MOCK: user.open_url: http://example.com/42
options.suggest_reviewers = False
expected_stderr = """Running check-webkit-style
MOCK: user.open_url: file://...
+Was that diff correct?
Obsoleting 2 old patches on bug 42
MOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
MOCK: user.open_url: http://example.com/42
"""
- expected_stdout = "Was that diff correct?\n"
- self.assert_execute_outputs(Upload(), [42], options=options, expected_stdout=expected_stdout, expected_stderr=expected_stderr)
+ self.assert_execute_outputs(Upload(), [42], options=options, expected_stderr=expected_stderr)
def test_mark_bug_fixed(self):
tool = MockTool()
@@ -106,6 +106,7 @@ MOCK: user.open_url: http://example.com/42
expected_stderr = """Bug: <http://example.com/42> Bug with two r+'d and cq+'d patches, one of which has an invalid commit-queue setter.
Revision: 9876
MOCK: user.open_url: http://example.com/42
+Is this correct?
Adding comment to Bug 42.
MOCK bug comment: bug_id=42, cc=None
--- Begin comment ---
@@ -115,8 +116,7 @@ Committed r9876: <http://trac.webkit.org/changeset/9876>
--- End comment ---
"""
- expected_stdout = "Is this correct?\n"
- self.assert_execute_outputs(MarkBugFixed(), [], expected_stdout=expected_stdout, expected_stderr=expected_stderr, tool=tool, options=options)
+ self.assert_execute_outputs(MarkBugFixed(), [], expected_stderr=expected_stderr, tool=tool, options=options)
def test_edit_changelog(self):
self.assert_execute_outputs(EditChangeLogs(), [])
diff --git a/Tools/Scripts/webkitpy/tool/main.py b/Tools/Scripts/webkitpy/tool/main.py
index 6b07615..25cb9f9 100755
--- a/Tools/Scripts/webkitpy/tool/main.py
+++ b/Tools/Scripts/webkitpy/tool/main.py
@@ -44,7 +44,7 @@ from webkitpy.common.net.statusserver import StatusServer
from webkitpy.common.system import executive, filesystem, platforminfo, user, workspace
from webkitpy.layout_tests import port
from webkitpy.tool.multicommandtool import MultiCommandTool
-import webkitpy.tool.commands as commands
+from webkitpy.tool import commands
class WebKitPatch(MultiCommandTool, Host):
diff --git a/Tools/Scripts/webkitpy/tool/mocktool.py b/Tools/Scripts/webkitpy/tool/mocktool.py
index 7db2996..73f55a7 100644
--- a/Tools/Scripts/webkitpy/tool/mocktool.py
+++ b/Tools/Scripts/webkitpy/tool/mocktool.py
@@ -464,6 +464,12 @@ class MockSCM(Mock):
# os.getcwd() can't work here because other parts of the code assume that "checkout_root"
# will actually be the root. Since getcwd() is wrong, use a globally fake root for now.
self.checkout_root = self.fake_checkout_root
+ self.added_paths = set()
+
+ def add(self, destination_path, return_exit_code=False):
+ self.added_paths.add(destination_path)
+ if return_exit_code:
+ return 0
def changed_files(self, git_commit=None):
return ["MockFile1"]
@@ -483,16 +489,26 @@ class MockSCM(Mock):
"https://bugs.example.org/show_bug.cgi?id=75\n")
raise Exception("Bogus commit_id in commit_message_for_local_commit.")
+ def diff_for_file(self, path, log=None):
+ return path + '-diff'
+
def diff_for_revision(self, revision):
return "DiffForRevision%s\n" \
"http://bugs.webkit.org/show_bug.cgi?id=12345" % revision
+ def show_head(self, path):
+ return path
+
def svn_revision_from_commit_text(self, commit_text):
return "49824"
- def add(self, destination_path, return_exit_code=False):
- if return_exit_code:
- return 0
+
+class MockDEPS(object):
+ def read_variable(self, name):
+ return 6564
+
+ def write_variable(self, name, value):
+ log("MOCK: MockDEPS.write_variable(%s, %s)" % (name, value))
class MockCheckout(object):
@@ -528,6 +544,9 @@ class MockCheckout(object):
commit_message.message = lambda:"This is a fake commit message that is at least 50 characters."
return commit_message
+ def chromium_deps(self):
+ return MockDEPS()
+
def apply_patch(self, patch, force=False):
pass
@@ -548,6 +567,9 @@ class MockUser(object):
def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=raw_input):
pass
+ def __init__(self):
+ self.opened_urls = []
+
def edit(self, files):
pass
@@ -558,13 +580,14 @@ class MockUser(object):
pass
def confirm(self, message=None, default='y'):
- print message
+ log(message)
return default == 'y'
def can_open_url(self):
return True
def open_url(self, url):
+ self.opened_urls.append(url)
if url.startswith("file://"):
log("MOCK: user.open_url: file://...")
return
diff --git a/Tools/Scripts/webkitpy/tool/steps/__init__.py b/Tools/Scripts/webkitpy/tool/steps/__init__.py
index f426f17..d5d7bb4 100644
--- a/Tools/Scripts/webkitpy/tool/steps/__init__.py
+++ b/Tools/Scripts/webkitpy/tool/steps/__init__.py
@@ -47,6 +47,7 @@ from webkitpy.tool.steps.options import Options
from webkitpy.tool.steps.postdiff import PostDiff
from webkitpy.tool.steps.postdiffforcommit import PostDiffForCommit
from webkitpy.tool.steps.postdiffforrevert import PostDiffForRevert
+from webkitpy.tool.steps.preparechangelogfordepsroll import PrepareChangeLogForDEPSRoll
from webkitpy.tool.steps.preparechangelogforrevert import PrepareChangeLogForRevert
from webkitpy.tool.steps.preparechangelog import PrepareChangeLog
from webkitpy.tool.steps.promptforbugortitle import PromptForBugOrTitle
@@ -55,6 +56,7 @@ from webkitpy.tool.steps.revertrevision import RevertRevision
from webkitpy.tool.steps.runtests import RunTests
from webkitpy.tool.steps.suggestreviewers import SuggestReviewers
from webkitpy.tool.steps.updatechangelogswithreviewer import UpdateChangeLogsWithReviewer
+from webkitpy.tool.steps.updatechromiumdeps import UpdateChromiumDEPS
from webkitpy.tool.steps.update import Update
from webkitpy.tool.steps.validatechangelogs import ValidateChangeLogs
from webkitpy.tool.steps.validatereviewer import ValidateReviewer
diff --git a/Tools/Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py b/Tools/Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py
new file mode 100644
index 0000000..39c9a9a
--- /dev/null
+++ b/Tools/Scripts/webkitpy/tool/steps/preparechangelogfordepsroll.py
@@ -0,0 +1,40 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+
+from webkitpy.common.checkout.changelog import ChangeLog
+from webkitpy.tool.steps.abstractstep import AbstractStep
+
+
+class PrepareChangeLogForDEPSRoll(AbstractStep):
+ def run(self, state):
+ self._run_script("prepare-ChangeLog")
+ changelog_paths = self._tool.checkout().modified_changelogs(git_commit=None)
+ for changelog_path in changelog_paths:
+ ChangeLog(changelog_path).update_with_unreviewed_message("Rolled DEPS.\n\n")
diff --git a/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py b/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
index 1e47a6a..dcd4b93 100644
--- a/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
+++ b/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
@@ -29,16 +29,32 @@
import os
from webkitpy.common.checkout.changelog import ChangeLog
+from webkitpy.common.config import urls
+from webkitpy.tool.grammar import join_with_separators
from webkitpy.tool.steps.abstractstep import AbstractStep
class PrepareChangeLogForRevert(AbstractStep):
+ @classmethod
+ def _message_for_revert(cls, revision_list, reason, bug_url=None):
+ message = "Unreviewed, rolling out %s.\n" % join_with_separators(['r' + str(revision) for revision in revision_list])
+ for revision in revision_list:
+ message += "%s\n" % urls.view_revision_url(revision)
+ if bug_url:
+ message += "%s\n" % bug_url
+ # Add an extra new line after the rollout links, before any reason.
+ message += "\n"
+ if reason:
+ message += "%s\n\n" % reason
+ return message
+
def run(self, state):
# This could move to prepare-ChangeLog by adding a --revert= option.
self._run_script("prepare-ChangeLog")
changelog_paths = self._tool.checkout().modified_changelogs(git_commit=None)
bug_url = self._tool.bugs.bug_url_for_bug_id(state["bug_id"]) if state["bug_id"] else None
+ message = self._message_for_revert(state["revision_list"], state["reason"], bug_url)
for changelog_path in changelog_paths:
# FIXME: Seems we should prepare the message outside of changelogs.py and then just pass in
# text that we want to use to replace the reviewed by line.
- ChangeLog(changelog_path).update_for_revert(state["revision_list"], state["reason"], bug_url)
+ ChangeLog(changelog_path).update_with_unreviewed_message(message)
diff --git a/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py b/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py
new file mode 100644
index 0000000..aa9d5e9
--- /dev/null
+++ b/Tools/Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py
@@ -0,0 +1,130 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import with_statement
+
+import codecs
+import os
+import tempfile
+import unittest
+
+from webkitpy.common.checkout.changelog import ChangeLog
+from webkitpy.common.checkout.changelog_unittest import ChangeLogTest
+from webkitpy.tool.steps.preparechangelogforrevert import *
+
+
+class UpdateChangeLogsForRevertTest(unittest.TestCase):
+ @staticmethod
+ def _write_tmp_file_with_contents(byte_array):
+ assert(isinstance(byte_array, str))
+ (file_descriptor, file_path) = tempfile.mkstemp() # NamedTemporaryFile always deletes the file on close in python < 2.6
+ with os.fdopen(file_descriptor, "w") as file:
+ file.write(byte_array)
+ return file_path
+
+ _revert_entry_with_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r12345.
+ http://trac.webkit.org/changeset/12345
+ http://example.com/123
+
+ Reason
+
+ * Scripts/bugzilla-tool:
+'''
+
+ _revert_entry_without_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r12345.
+ http://trac.webkit.org/changeset/12345
+
+ Reason
+
+ * Scripts/bugzilla-tool:
+'''
+
+ _multiple_revert_entry_with_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r12345, r12346, and r12347.
+ http://trac.webkit.org/changeset/12345
+ http://trac.webkit.org/changeset/12346
+ http://trac.webkit.org/changeset/12347
+ http://example.com/123
+
+ Reason
+
+ * Scripts/bugzilla-tool:
+'''
+
+ _multiple_revert_entry_without_bug_url = '''2009-08-19 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r12345, r12346, and r12347.
+ http://trac.webkit.org/changeset/12345
+ http://trac.webkit.org/changeset/12346
+ http://trac.webkit.org/changeset/12347
+
+ Reason
+
+ * Scripts/bugzilla-tool:
+'''
+
+ _revert_with_log_reason = """2009-08-19 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r12345.
+ http://trac.webkit.org/changeset/12345
+ http://example.com/123
+
+ This is a very long reason which should be long enough so that
+ _message_for_revert will need to wrap it. We'll also include
+ a
+ https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354
+ link so that we can make sure we wrap that right too.
+
+ * Scripts/bugzilla-tool:
+"""
+
+ def _assert_message_for_revert_output(self, args, expected_entry):
+ changelog_contents = u"%s\n%s" % (ChangeLogTest._new_entry_boilerplate, ChangeLogTest._example_changelog)
+ changelog_path = self._write_tmp_file_with_contents(changelog_contents.encode("utf-8"))
+ changelog = ChangeLog(changelog_path)
+ changelog.update_with_unreviewed_message(PrepareChangeLogForRevert._message_for_revert(*args))
+ actual_entry = changelog.latest_entry()
+ os.remove(changelog_path)
+ self.assertEquals(actual_entry.contents(), expected_entry)
+ self.assertEquals(actual_entry.reviewer_text(), None)
+ # These checks could be removed to allow this to work on other entries:
+ self.assertEquals(actual_entry.author_name(), "Eric Seidel")
+ self.assertEquals(actual_entry.author_email(), "eric@webkit.org")
+
+ def test_message_for_revert(self):
+ self._assert_message_for_revert_output([[12345], "Reason"], self._revert_entry_without_bug_url)
+ self._assert_message_for_revert_output([[12345], "Reason", "http://example.com/123"], self._revert_entry_with_bug_url)
+ self._assert_message_for_revert_output([[12345, 12346, 12347], "Reason"], self._multiple_revert_entry_without_bug_url)
+ self._assert_message_for_revert_output([[12345, 12346, 12347], "Reason", "http://example.com/123"], self._multiple_revert_entry_with_bug_url)
+ long_reason = "This is a very long reason which should be long enough so that _message_for_revert will need to wrap it. We'll also include a https://veryveryveryveryverylongbugurl.com/reallylongbugthingy.cgi?bug_id=12354 link so that we can make sure we wrap that right too."
+ self._assert_message_for_revert_output([[12345], long_reason, "http://example.com/123"], self._revert_with_log_reason)
diff --git a/Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py b/Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py
index 0c86535..e995663 100644
--- a/Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py
@@ -41,5 +41,6 @@ class SuggestReviewersTest(unittest.TestCase):
def test_basic(self):
capture = OutputCapture()
step = SuggestReviewers(MockTool(), MockOptions(suggest_reviewers=True, git_commit=None))
- expected_stdout = "The following reviewers have recently modified files in your patch:\nFoo Bar\nWould you like to CC them?\n"
- capture.assert_outputs(self, step.run, [{"bug_id": "123"}], expected_stdout=expected_stdout)
+ expected_stdout = "The following reviewers have recently modified files in your patch:\nFoo Bar\n"
+ expected_stderr = "Would you like to CC them?\n"
+ capture.assert_outputs(self, step.run, [{"bug_id": "123"}], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
diff --git a/Tools/Scripts/webkitpy/tool/steps/updatechromiumdeps.py b/Tools/Scripts/webkitpy/tool/steps/updatechromiumdeps.py
new file mode 100644
index 0000000..315bbac
--- /dev/null
+++ b/Tools/Scripts/webkitpy/tool/steps/updatechromiumdeps.py
@@ -0,0 +1,64 @@
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import urllib2
+
+from webkitpy.tool.steps.abstractstep import AbstractStep
+from webkitpy.tool.steps.options import Options
+from webkitpy.common.config import urls
+from webkitpy.common.system.deprecated_logging import log, error
+
+
+class UpdateChromiumDEPS(AbstractStep):
+ # Notice that this method throws lots of exciting exceptions!
+ def _fetch_last_known_good_revision(self):
+ return int(urllib2.urlopen(urls.chromium_lkgr_url).read())
+
+ def _validate_revisions(self, current_chromium_revision, new_chromium_revision):
+ if new_chromium_revision < current_chromium_revision:
+ log("Current Chromium DEPS revision %s is newer than %s." % (current_chromium_revision, new_chromium_revision))
+ new_chromium_revision = self._tool.user.prompt("Enter new chromium revision (enter nothing to cancel):\n")
+ try:
+ new_chromium_revision = int(new_chromium_revision)
+ except ValueError, TypeError:
+ new_chromium_revision = None
+ if not new_chromium_revision:
+ error("Unable to update Chromium DEPS")
+
+
+ def run(self, state):
+ # Note that state["chromium_revision"] must be defined, but can be None.
+ new_chromium_revision = state["chromium_revision"]
+ if not new_chromium_revision:
+ new_chromium_revision = self._fetch_last_known_good_revision()
+
+ deps = self._tool.checkout().chromium_deps()
+ current_chromium_revision = deps.read_variable("chromium_rev")
+ self._validate_revisions(current_chromium_revision, new_chromium_revision)
+ log("Updating Chromium DEPS to %s" % new_chromium_revision)
+ deps.write_variable("chromium_rev", new_chromium_revision)
diff --git a/Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py b/Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py
index db35a58..96bae9f 100644
--- a/Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py
@@ -45,9 +45,8 @@ class ValidateChangeLogsTest(unittest.TestCase):
diff_file.lines = [(start_line, start_line, "foo")]
expected_stdout = expected_stderr = ""
if should_fail and not non_interactive:
- expected_stdout = "OK to continue?\n"
- expected_stderr = "The diff to mock/ChangeLog looks wrong. Are you sure your ChangeLog entry is at the top of the file?\n"
- result = OutputCapture().assert_outputs(self, step._check_changelog_diff, [diff_file], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
+ expected_stderr = "The diff to mock/ChangeLog looks wrong. Are you sure your ChangeLog entry is at the top of the file?\nOK to continue?\n"
+ result = OutputCapture().assert_outputs(self, step._check_changelog_diff, [diff_file], expected_stderr=expected_stderr)
self.assertEqual(not result, should_fail)
def test_check_changelog_diff(self):
diff --git a/Tools/TestWebKitAPI/JavaScriptTest.cpp b/Tools/TestWebKitAPI/JavaScriptTest.cpp
new file mode 100644
index 0000000..08418c2
--- /dev/null
+++ b/Tools/TestWebKitAPI/JavaScriptTest.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "JavaScriptTest.h"
+
+#include "PlatformUtilities.h"
+#include "Test.h"
+#include <WebKit2/WKRetainPtr.h>
+
+namespace TestWebKitAPI {
+
+struct JavaScriptCallbackContext {
+ JavaScriptCallbackContext(const char* expectedString) : didFinish(false), expectedString(expectedString), didMatchExpectedString(false) { }
+
+ bool didFinish;
+ const char* expectedString;
+ bool didMatchExpectedString;
+};
+
+static void javaScriptCallback(WKStringRef string, WKErrorRef error, void* ctx)
+{
+ JavaScriptCallbackContext* context = static_cast<JavaScriptCallbackContext*>(ctx);
+
+ context->didFinish = true;
+ context->didMatchExpectedString = WKStringIsEqualToUTF8CString(string, context->expectedString);
+
+ TEST_ASSERT(!error);
+}
+
+static WKRetainPtr<WKStringRef> wk(const char* utf8String)
+{
+ return WKRetainPtr<WKStringRef>(AdoptWK, WKStringCreateWithUTF8CString(utf8String));
+}
+
+bool runJSTest(WKPageRef page, const char* script, const char* expectedResult)
+{
+ JavaScriptCallbackContext context(expectedResult);
+ WKPageRunJavaScriptInMainFrame(page, wk(script).get(), &context, javaScriptCallback);
+ Util::run(&context.didFinish);
+ return context.didMatchExpectedString;
+}
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/JavaScriptTest.h b/Tools/TestWebKitAPI/JavaScriptTest.h
new file mode 100644
index 0000000..e01fcd5
--- /dev/null
+++ b/Tools/TestWebKitAPI/JavaScriptTest.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+namespace TestWebKitAPI {
+
+// Executes |script| in the page and waits until it has run. Returns true if the script's output
+// matches |expectedResult|, false otherwise. Asserts if an error occurs.
+bool runJSTest(WKPageRef, const char* script, const char* expectedResult);
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/PlatformWebView.h b/Tools/TestWebKitAPI/PlatformWebView.h
index 43e329b..312168d 100644
--- a/Tools/TestWebKitAPI/PlatformWebView.h
+++ b/Tools/TestWebKitAPI/PlatformWebView.h
@@ -54,7 +54,7 @@ public:
PlatformWebView(WKContextRef, WKPageGroupRef = 0);
~PlatformWebView();
- WKPageRef page();
+ WKPageRef page() const;
PlatformWKView platformView() const { return m_view; }
void resizeTo(unsigned width, unsigned height);
void focus();
diff --git a/Tools/TestWebKitAPI/Test.h b/Tools/TestWebKitAPI/Test.h
index 93bfd8b..ed772d5 100644
--- a/Tools/TestWebKitAPI/Test.h
+++ b/Tools/TestWebKitAPI/Test.h
@@ -79,7 +79,9 @@ protected:
\
void TEST_CLASS_NAME(testSuite, testCaseName)::run()
-#define TEST_ASSERT(expression) do { if (!(expression)) { TestsController::shared().testFailed(__FILE__, __LINE__, #expression); return; } } while (0)
+#define _TEST_ASSERT_HELPER(expression, returnStatement) do { if (!(expression)) { TestsController::shared().testFailed(__FILE__, __LINE__, #expression); returnStatement; } } while (0)
+#define TEST_ASSERT(expression) _TEST_ASSERT_HELPER(expression, return)
+#define TEST_ASSERT_RETURN(expression, returnValue) _TEST_ASSERT_HELPER(expression, return (returnValue))
} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
index 0aca686..99bb29f 100644
--- a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
+++ b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
@@ -45,6 +45,9 @@
C01A23F21266156700C9ED55 /* spacebar-scrolling.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = C02B7882126615410026BF0F /* spacebar-scrolling.html */; };
C02B77F2126612140026BF0F /* SpacebarScrolling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C02B77F1126612140026BF0F /* SpacebarScrolling.cpp */; };
C02B7854126613AE0026BF0F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C02B7853126613AE0026BF0F /* Carbon.framework */; };
+ C0ADBE7C12FCA4D000D2C129 /* JavaScriptTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C0ADBE7A12FCA4D000D2C129 /* JavaScriptTest.cpp */; };
+ C0ADBE8312FCA6AA00D2C129 /* RestoreSessionStateContainingFormData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C0ADBE8212FCA6AA00D2C129 /* RestoreSessionStateContainingFormData.cpp */; };
+ C0ADBE9612FCA79B00D2C129 /* simple-form.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = C0ADBE8412FCA6B600D2C129 /* simple-form.html */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -76,6 +79,7 @@
BCBD3737125ABBEB00D2C29F /* icon.png in Copy Resources */,
1A02C870125D4CFD00E3F4BD /* find.html in Copy Resources */,
BC909784125571CF00083756 /* simple.html in Copy Resources */,
+ C0ADBE9612FCA79B00D2C129 /* simple-form.html in Copy Resources */,
C01A23F21266156700C9ED55 /* spacebar-scrolling.html in Copy Resources */,
BC2D006412AA04CE00E732A3 /* file-with-anchor.html in Copy Resources */,
);
@@ -132,6 +136,10 @@
C02B77F1126612140026BF0F /* SpacebarScrolling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpacebarScrolling.cpp; sourceTree = "<group>"; };
C02B7853126613AE0026BF0F /* Carbon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = Carbon.framework; sourceTree = SDKROOT; };
C02B7882126615410026BF0F /* spacebar-scrolling.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "spacebar-scrolling.html"; sourceTree = "<group>"; };
+ C0ADBE7A12FCA4D000D2C129 /* JavaScriptTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JavaScriptTest.cpp; sourceTree = "<group>"; };
+ C0ADBE7B12FCA4D000D2C129 /* JavaScriptTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptTest.h; sourceTree = "<group>"; };
+ C0ADBE8212FCA6AA00D2C129 /* RestoreSessionStateContainingFormData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RestoreSessionStateContainingFormData.cpp; sourceTree = "<group>"; };
+ C0ADBE8412FCA6B600D2C129 /* simple-form.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "simple-form.html"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -177,6 +185,8 @@
children = (
BCA61C3A11700B9400460D1E /* mac */,
BC575944126E733C006F0F12 /* InjectedBundle */,
+ C0ADBE7A12FCA4D000D2C129 /* JavaScriptTest.cpp */,
+ C0ADBE7B12FCA4D000D2C129 /* JavaScriptTest.h */,
BC131A9E1171317C00B69727 /* TestWebKitAPIPrefix.h */,
BC575BBF126F5752006F0F12 /* PlatformUtilities.cpp */,
BC131883117114A800B69727 /* PlatformUtilities.h */,
@@ -246,6 +256,7 @@
BC909779125571AB00083756 /* PageLoadBasic.cpp */,
BC2D004812A9FDFA00E732A3 /* PageLoadDidChangeLocationWithinPageForFrame.cpp */,
333B9CE11277F23100FEFCE3 /* PreventEmptyUserAgent.cpp */,
+ C0ADBE8212FCA6AA00D2C129 /* RestoreSessionStateContainingFormData.cpp */,
C02B77F1126612140026BF0F /* SpacebarScrolling.cpp */,
BC7B619A1299FE9E00D174A4 /* WKPreferences.cpp */,
BC90995D12567BC100083756 /* WKString.cpp */,
@@ -269,6 +280,7 @@
1A02C84B125D4A5E00E3F4BD /* find.html */,
BCBD372E125ABBE600D2C29F /* icon.png */,
BC909778125571AB00083756 /* simple.html */,
+ C0ADBE8412FCA6B600D2C129 /* simple-form.html */,
C02B7882126615410026BF0F /* spacebar-scrolling.html */,
);
name = Resources;
@@ -393,6 +405,8 @@
333B9CE21277F23100FEFCE3 /* PreventEmptyUserAgent.cpp in Sources */,
BC7B61AA129A038700D174A4 /* WKPreferences.cpp in Sources */,
BC2D004912A9FDFA00E732A3 /* PageLoadDidChangeLocationWithinPageForFrame.cpp in Sources */,
+ C0ADBE7C12FCA4D000D2C129 /* JavaScriptTest.cpp in Sources */,
+ C0ADBE8312FCA6AA00D2C129 /* RestoreSessionStateContainingFormData.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp
index 98a636c..6cd281e 100644
--- a/Tools/TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp
@@ -87,7 +87,7 @@ static void didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef us
test1Done = true;
}
-static void decidePolicyForNavigationAction(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void* clientInfo)
+static void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
State* state = reinterpret_cast<State*>(const_cast<void*>(clientInfo));
TEST_ASSERT(!state->didStartProvisionalLoadForFrame);
@@ -98,12 +98,12 @@ static void decidePolicyForNavigationAction(WKPageRef page, WKFrameNavigationTyp
WKFramePolicyListenerUse(listener);
}
-static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void* clientInfo)
+static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
WKFramePolicyListenerUse(listener);
}
-static void decidePolicyForMIMEType(WKPageRef page, WKStringRef MIMEType, WKURLRef url, WKFrameRef frame, WKFramePolicyListenerRef listener, const void* clientInfo)
+static void decidePolicyForMIMEType(WKPageRef page, WKFrameRef frame, WKStringRef MIMEType, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{
WKFramePolicyListenerUse(listener);
}
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp
new file mode 100644
index 0000000..7c08735
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "Test.h"
+
+#include "JavaScriptTest.h"
+#include "PlatformUtilities.h"
+#include "PlatformWebView.h"
+
+namespace TestWebKitAPI {
+
+static bool didFinishLoad;
+
+static void didFinishLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef, const void*)
+{
+ didFinishLoad = true;
+}
+
+static void setPageLoaderClient(WKPageRef page)
+{
+ WKPageLoaderClient loaderClient;
+ memset(&loaderClient, 0, sizeof(loaderClient));
+ loaderClient.version = 0;
+ loaderClient.didFinishLoadForFrame = didFinishLoadForFrame;
+
+ WKPageSetPageLoaderClient(page, &loaderClient);
+}
+
+static WKRetainPtr<WKDataRef> createSessionStateContainingFormData(WKContextRef context)
+{
+ PlatformWebView webView(context);
+ setPageLoaderClient(webView.page());
+
+ WKPageLoadURL(webView.page(), Util::adoptWK(Util::createURLForResource("simple-form", "html")).get());
+ Util::run(&didFinishLoad);
+ didFinishLoad = false;
+
+ TEST_ASSERT_RETURN(runJSTest(webView.page(), "submitForm()", "undefined"), 0);
+ Util::run(&didFinishLoad);
+ didFinishLoad = false;
+
+ return Util::adoptWK(WKPageCopySessionState(webView.page(), 0, 0));
+}
+
+TEST(WebKit2, RestoreSessionStateContainingFormData)
+{
+ WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
+
+ // FIXME: Once <rdar://problem/8708435> is fixed, we can move the creation of this
+ // PlatformWebView after the call to createSessionStaetContainingFormData. Until then, it must
+ // remain here to avoid a race condition between the UI and web processes.
+ PlatformWebView webView(context.get());
+ setPageLoaderClient(webView.page());
+
+ WKRetainPtr<WKDataRef> data = createSessionStateContainingFormData(context.get());
+ TEST_ASSERT(data);
+
+ WKPageRestoreFromSessionState(webView.page(), data.get());
+ Util::run(&didFinishLoad);
+
+ TEST_ASSERT(WKPageCanGoBack(webView.page()));
+}
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp
index 6d4783c..e3c6b20 100644
--- a/Tools/TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp
@@ -25,20 +25,13 @@
#include "Test.h"
+#include "JavaScriptTest.h"
#include "PlatformUtilities.h"
#include "PlatformWebView.h"
#include <WebKit2/WKRetainPtr.h>
namespace TestWebKitAPI {
-struct JavaScriptCallbackContext {
- JavaScriptCallbackContext(const char* expectedString) : didFinish(false), expectedString(expectedString), didMatchExpectedString(false) { }
-
- bool didFinish;
- const char* expectedString;
- bool didMatchExpectedString;
-};
-
static bool didFinishLoad;
static bool didNotHandleKeyDownEvent;
@@ -53,29 +46,6 @@ static void didNotHandleKeyEventCallback(WKPageRef, WKNativeEventPtr event, cons
didNotHandleKeyDownEvent = true;
}
-static void javaScriptCallback(WKStringRef string, WKErrorRef error, void* ctx)
-{
- JavaScriptCallbackContext* context = static_cast<JavaScriptCallbackContext*>(ctx);
-
- context->didFinish = true;
- context->didMatchExpectedString = WKStringIsEqualToUTF8CString(string, context->expectedString);
-
- TEST_ASSERT(!error);
-}
-
-static WKRetainPtr<WKStringRef> wk(const char* utf8String)
-{
- return WKRetainPtr<WKStringRef>(AdoptWK, WKStringCreateWithUTF8CString(utf8String));
-}
-
-static bool runJSTest(WKPageRef page, const char* script, const char* expectedResult)
-{
- JavaScriptCallbackContext context(expectedResult);
- WKPageRunJavaScriptInMainFrame(page, wk(script).get(), &context, javaScriptCallback);
- Util::run(&context.didFinish);
- return context.didMatchExpectedString;
-}
-
TEST(WebKit2, SpacebarScrolling)
{
WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/simple-form.html b/Tools/TestWebKitAPI/Tests/WebKit2/simple-form.html
new file mode 100644
index 0000000..3bf1852
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/simple-form.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<script>
+function submitForm()
+{
+ document.forms[0].submit();
+}
+</script>
+<form method=post>
+<input name=foo value="Some unimportant data">
+<input type=submit>
+</form>
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp
new file mode 100644
index 0000000..40d4f41
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/win/HideFindIndicator.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "Test.h"
+
+#include "PlatformUtilities.h"
+#include "PlatformWebView.h"
+
+namespace TestWebKitAPI {
+
+static bool didFinishLoad;
+static bool findIndicatorCallbackWasCalled;
+static HBITMAP bitmap;
+
+static void didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void* clientInfo)
+{
+ didFinishLoad = true;
+}
+
+static void findIndicatorCallback(WKViewRef, HBITMAP selectionBitmap, RECT, bool, void*)
+{
+ findIndicatorCallbackWasCalled = true;
+ bitmap = selectionBitmap;
+}
+
+static void initialize(const PlatformWebView& webView)
+{
+ WKPageLoaderClient loaderClient;
+ memset(&loaderClient, 0, sizeof(loaderClient));
+
+ loaderClient.version = 0;
+ loaderClient.didFinishLoadForFrame = didFinishLoadForFrame;
+ WKPageSetPageLoaderClient(webView.page(), &loaderClient);
+
+ WKViewSetFindIndicatorCallback(webView.platformView(), findIndicatorCallback, 0);
+}
+
+TEST(WebKit2, HideFindIndicator)
+{
+ WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
+ PlatformWebView webView(context.get());
+ initialize(webView);
+
+ WKRetainPtr<WKURLRef> url = Util::adoptWK(Util::createURLForResource("find", "html"));
+ WKPageLoadURL(webView.page(), url.get());
+ Util::run(&didFinishLoad);
+ didFinishLoad = false;
+
+ WKPageFindString(webView.page(), Util::toWK("Hello").get(), kWKFindOptionsShowFindIndicator, 100);
+ Util::run(&findIndicatorCallbackWasCalled);
+ findIndicatorCallbackWasCalled = false;
+
+ TEST_ASSERT(bitmap);
+ ::DeleteObject(bitmap);
+ bitmap = 0;
+
+ WKPageHideFindUI(webView.page());
+ Util::run(&findIndicatorCallbackWasCalled);
+
+ TEST_ASSERT(!bitmap);
+}
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp
new file mode 100644
index 0000000..7310e6c
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "Test.h"
+
+#include "PlatformUtilities.h"
+#include "PlatformWebView.h"
+#include <WebKit2/WKRetainPtr.h>
+
+namespace TestWebKitAPI {
+
+static bool didFinishLoad;
+
+static void didFinishLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef, const void*)
+{
+ didFinishLoad = true;
+}
+
+static void setPageLoaderClient(WKPageRef page)
+{
+ WKPageLoaderClient loaderClient;
+ memset(&loaderClient, 0, sizeof(loaderClient));
+ loaderClient.version = 0;
+ loaderClient.didFinishLoadForFrame = didFinishLoadForFrame;
+
+ WKPageSetPageLoaderClient(page, &loaderClient);
+}
+
+static void flushMessages(WKPageRef page)
+{
+ // In order to ensure all pending messages have been handled by the UI and web processes, we
+ // load a URL and wait for the load to finish.
+
+ setPageLoaderClient(page);
+
+ WKPageLoadURL(page, Util::adoptWK(Util::createURLForResource("simple", "html")).get());
+ Util::run(&didFinishLoad);
+ didFinishLoad = false;
+
+ WKPageSetPageLoaderClient(page, 0);
+}
+
+static bool timerFired;
+static void CALLBACK timerCallback(HWND hwnd, UINT, UINT_PTR timerID, DWORD)
+{
+ ::KillTimer(hwnd, timerID);
+ timerFired = true;
+}
+
+static void runForDuration(double seconds)
+{
+ ::SetTimer(0, 0, seconds * 1000, timerCallback);
+ Util::run(&timerFired);
+ timerFired = false;
+}
+
+static void waitForBackingStoreUpdate(WKPageRef page)
+{
+ // Wait for the web process to handle the changes we just made, to perform a display (which
+ // happens on a timer), and to tell the UI process about the display (which updates the backing
+ // store).
+ // FIXME: It would be much less fragile (and maybe faster) to have an explicit way to wait
+ // until the backing store is updated.
+ runForDuration(0.5);
+ flushMessages(page);
+}
+
+TEST(WebKit2, ResizeViewWhileHidden)
+{
+ WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
+ PlatformWebView webView(context.get());
+
+ HWND window = WKViewGetWindow(webView.platformView());
+
+ RECT originalRect;
+ ::GetClientRect(window, &originalRect);
+ RECT newRect = originalRect;
+ ::InflateRect(&newRect, 1, 1);
+
+ // Show the WKView and resize it so that the WKView's backing store will be created. Ideally
+ // we'd have some more explicit way of forcing the backing store to be created.
+ ::ShowWindow(window, SW_SHOW);
+ webView.resizeTo(newRect.right - newRect.left, newRect.bottom - newRect.top);
+
+ waitForBackingStoreUpdate(webView.page());
+
+ // Resize the window while hidden and show it again so that it will update its backing store at
+ // the new size.
+ ::ShowWindow(window, SW_HIDE);
+ webView.resizeTo(originalRect.right - originalRect.left, originalRect.bottom - originalRect.top);
+ ::ShowWindow(window, SW_SHOW);
+
+ // Force the WKView to paint to try to trigger <http://webkit.org/b/54142>.
+ ::SendMessage(window, WM_PAINT, 0, 0);
+
+ // In Debug builds without the fix for <http://webkit.org/b/54141>, the web process will assert
+ // at this point.
+ // FIXME: It would be good to have a way to check that our behavior is correct in Release
+ // builds, too!
+ waitForBackingStoreUpdate(webView.page());
+}
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp
new file mode 100644
index 0000000..390f161
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "Test.h"
+
+#include "PlatformUtilities.h"
+#include "PlatformWebView.h"
+#include <WebKit2/WKRetainPtr.h>
+
+namespace TestWebKitAPI {
+
+TEST(WebKit2, WMPrint)
+{
+ WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
+ PlatformWebView webView(context.get());
+
+ HWND window = WKViewGetWindow(webView.platformView());
+ HDC dc = ::CreateCompatibleDC(0);
+ // FIXME: It would be nice to test that this actually paints the view into dc.
+ ::SendMessage(window, WM_PRINT, reinterpret_cast<WPARAM>(dc), PRF_CLIENT | PRF_CHILDREN);
+ ::DeleteDC(dc);
+}
+
+} // namespace TestWebKitAPI
diff --git a/Tools/TestWebKitAPI/mac/PlatformWebViewMac.mm b/Tools/TestWebKitAPI/mac/PlatformWebViewMac.mm
index c4f2d72..ad901d3 100644
--- a/Tools/TestWebKitAPI/mac/PlatformWebViewMac.mm
+++ b/Tools/TestWebKitAPI/mac/PlatformWebViewMac.mm
@@ -55,7 +55,7 @@ PlatformWebView::~PlatformWebView()
[m_view release];
}
-WKPageRef PlatformWebView::page()
+WKPageRef PlatformWebView::page() const
{
return [m_view pageRef];
}
diff --git a/Tools/TestWebKitAPI/win/PlatformWebViewWin.cpp b/Tools/TestWebKitAPI/win/PlatformWebViewWin.cpp
index dede4b2..01a76eb 100644
--- a/Tools/TestWebKitAPI/win/PlatformWebViewWin.cpp
+++ b/Tools/TestWebKitAPI/win/PlatformWebViewWin.cpp
@@ -72,11 +72,16 @@ PlatformWebView::~PlatformWebView()
WKRelease(m_view);
}
-WKPageRef PlatformWebView::page()
+WKPageRef PlatformWebView::page() const
{
return WKViewGetPage(m_view);
}
+void PlatformWebView::resizeTo(unsigned width, unsigned height)
+{
+ ::SetWindowPos(WKViewGetWindow(m_view), 0, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS);
+}
+
void PlatformWebView::simulateSpacebarKeyPress()
{
HWND window = WKViewGetWindow(m_view);
diff --git a/Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj b/Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj
index a2412ef..0c806a8 100644
--- a/Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj
+++ b/Tools/TestWebKitAPI/win/TestWebKitAPI.vcproj
@@ -456,6 +456,14 @@
>
</File>
<File
+ RelativePath="..\Tests\WebKit2\RestoreSessionStateContainingFormData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Tests\WebKit2\simple-form.html"
+ >
+ </File>
+ <File
RelativePath="..\Tests\WebKit2\simple.html"
>
</File>
@@ -487,6 +495,14 @@
>
</File>
<File
+ RelativePath="..\Tests\WebKit2\win\HideFindIndicator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Tests\WebKit2\win\ResizeViewWhileHidden.cpp"
+ >
+ </File>
+ <File
RelativePath="..\Tests\WebKit2\win\WMCloseCallsUIClientClose.cpp"
>
</File>
@@ -502,6 +518,14 @@
</Filter>
</Filter>
<File
+ RelativePath="..\JavaScriptTest.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\JavaScriptTest.h"
+ >
+ </File>
+ <File
RelativePath="..\PlatformUtilities.cpp"
>
</File>
diff --git a/Tools/TestWebKitAPI/win/copy-resources.cmd b/Tools/TestWebKitAPI/win/copy-resources.cmd
index dc56479..b0ef3df 100755
--- a/Tools/TestWebKitAPI/win/copy-resources.cmd
+++ b/Tools/TestWebKitAPI/win/copy-resources.cmd
@@ -12,6 +12,7 @@ for %%f in (
..\Tests\WebKit2\find.html
..\Tests\WebKit2\icon.png
..\Tests\WebKit2\simple.html
+ ..\Tests\WebKit2\simple-form.html
..\Tests\WebKit2\spacebar-scrolling.html
) do (
xcopy /y /d %%f "%ResourcesDirectory%"
diff --git a/Tools/Tools.pro b/Tools/Tools.pro
new file mode 100644
index 0000000..ca4ba3d
--- /dev/null
+++ b/Tools/Tools.pro
@@ -0,0 +1,15 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+exists($$PWD/QtTestBrowser/QtTestBrowser.pro): SUBDIRS += QtTestBrowser/QtTestBrowser.pro
+exists($$PWD/DumpRenderTree/qt/DumpRenderTree.pro): SUBDIRS += DumpRenderTree/qt/DumpRenderTree.pro
+exists($$PWD/DumpRenderTree/qt/ImageDiff.pro): SUBDIRS += DumpRenderTree/qt/ImageDiff.pro
+
+webkit2 {
+ exists($$PWD/MiniBrowser/qt/MiniBrowser.pro): SUBDIRS += MiniBrowser/qt/MiniBrowser.pro
+ exists($$PWD/WebKitTestRunner/WebKitTestRunner.pro): SUBDIRS += WebKitTestRunner/WebKitTestRunner.pro
+}
+
+!win32:!symbian {
+ exists($$PWD/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro): SUBDIRS += DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
+}
diff --git a/Tools/WebKitTestRunner/Configurations/Base.xcconfig b/Tools/WebKitTestRunner/Configurations/Base.xcconfig
index feb7c5e..ac2ff94 100644
--- a/Tools/WebKitTestRunner/Configurations/Base.xcconfig
+++ b/Tools/WebKitTestRunner/Configurations/Base.xcconfig
@@ -21,7 +21,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-HEADER_SEARCH_PATHS = $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders;
+HEADER_SEARCH_PATHS = $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders ${SRCROOT}/../../Source/JavaScriptCore/icu;
FRAMEWORK_SEARCH_PATHS = $(SYSTEM_LIBRARY_DIR)/Frameworks/Quartz.framework/Frameworks $(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Frameworks $(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Frameworks;
GCC_PREPROCESSOR_DEFINITIONS = ENABLE_DASHBOARD_SUPPORT WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST;
DEBUG_INFORMATION_FORMAT = dwarf
diff --git a/Tools/WebKitTestRunner/DerivedSources.pro b/Tools/WebKitTestRunner/DerivedSources.pro
index 1e4e461..ce7ac63 100644
--- a/Tools/WebKitTestRunner/DerivedSources.pro
+++ b/Tools/WebKitTestRunner/DerivedSources.pro
@@ -34,7 +34,7 @@ defineTest(addExtraCompiler) {
return(true)
}
-SRC_ROOT_DIR = $$replace(PWD, /Tools/WebKitTestRunner, /)
+SRC_ROOT_DIR = $$replace(PWD, /Tools/WebKitTestRunner, "")
# Make sure forwarded headers needed by this project are present
fwheader_generator.commands = perl $${SRC_ROOT_DIR}/Source/WebKit2/Scripts/generate-forwarding-headers.pl $${SRC_ROOT_DIR}/Tools/WebKitTestRunner $${OUTPUT_DIR}/include qt
diff --git a/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl b/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl
index a88a838..a331c64 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl
+++ b/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl
@@ -77,8 +77,18 @@ module WTR {
// Text search testing.
boolean findString(in DOMString target, in object optionsArray);
- // Evaluating script in a special context
- [PassContext] void evaluateScriptInIsolatedWorld(in unsigned long worldID, in DOMString script)
+ // Evaluating script in a special context.
+ [PassContext] void evaluateScriptInIsolatedWorld(in unsigned long worldID, in DOMString script);
+
+ // For Web Inspector tests
+ void showWebInspector();
+ void closeWebInspector();
+ void evaluateInWebInspector(in long callID, in DOMString script);
+ void setTimelineProfilingEnabled(in boolean enabled);
+
+ void setPOSIXLocale(in DOMString locale);
+
+ void setWillSendRequestReturnsNull(in boolean flag);
};
}
diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
index 972a606..d042431 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
@@ -118,6 +118,11 @@ InjectedBundlePage* InjectedBundle::page() const
return m_pages[0].get();
}
+void InjectedBundle::resetLocalSettings()
+{
+ setlocale(LC_ALL, "");
+}
+
void InjectedBundle::didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody)
{
if (WKStringIsEqualToUTF8CString(messageName, "BeginTest")) {
@@ -131,6 +136,9 @@ void InjectedBundle::didReceiveMessage(WKStringRef messageName, WKTypeRef messag
return;
} else if (WKStringIsEqualToUTF8CString(messageName, "Reset")) {
m_state = Idle;
+
+ resetLocalSettings();
+
return;
}
diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
index 9778441..741ade4 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
+++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
@@ -82,6 +82,8 @@ private:
void didInitializePageGroup(WKBundlePageGroupRef);
void didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody);
+ void resetLocalSettings();
+
void beginTesting();
WKBundleRef m_bundle;
diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
index c5f4909..739da3b 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
@@ -29,6 +29,7 @@
#include "StringFunctions.h"
#include <cmath>
#include <JavaScriptCore/JSRetainPtr.h>
+#include <WebCore/KURL.h>
#include <WebKit2/WKArray.h>
#include <WebKit2/WKBundle.h>
#include <WebKit2/WKBundleBackForwardList.h>
@@ -36,6 +37,7 @@
#include <WebKit2/WKBundleFrame.h>
#include <WebKit2/WKBundleFramePrivate.h>
#include <WebKit2/WKBundlePagePrivate.h>
+#include <WebKit2/WKURLRequest.h>
using namespace std;
@@ -190,9 +192,20 @@ InjectedBundlePage::InjectedBundlePage(WKBundlePageRef page)
didCancelClientRedirectForFrame,
willPerformClientRedirectForFrame,
didHandleOnloadEventsForFrame,
- shouldLoadResourceForFrame
};
- WKBundlePageSetLoaderClient(m_page, &loaderClient);
+ WKBundlePageSetPageLoaderClient(m_page, &loaderClient);
+
+ WKBundlePageResourceLoadClient resourceLoadClient = {
+ 0,
+ this,
+ didInitiateLoadForResource,
+ willSendRequestForFrame,
+ didReceiveResponseForResource,
+ didReceiveContentLengthForResource,
+ didFinishLoadForResource,
+ didFailLoadForResource
+ };
+ WKBundlePageSetResourceLoadClient(m_page, &resourceLoadClient);
WKBundlePageUIClient uiClient = {
0,
@@ -204,6 +217,7 @@ InjectedBundlePage::InjectedBundlePage(WKBundlePageRef page)
willRunJavaScriptPrompt,
0, /*mouseDidMoveOverElement*/
0, /*pageDidScroll*/
+ 0, /*paintCustomOverhangArea*/
};
WKBundlePageSetUIClient(m_page, &uiClient);
@@ -321,11 +335,35 @@ void InjectedBundlePage::didRunInsecureContentForFrame(WKBundlePageRef page, WKB
static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didRunInsecureContentForFrame(frame);
}
-bool InjectedBundlePage::shouldLoadResourceForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKStringRef, const void* clientInfo)
+void InjectedBundlePage::didInitiateLoadForResource(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, WKURLRequestRef request, bool pageLoadIsProvisional, const void* clientInfo)
+{
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didInitiateLoadForResource(page, frame, identifier, request, pageLoadIsProvisional);
+}
+
+WKURLRequestRef InjectedBundlePage::willSendRequestForFrame(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, WKURLRequestRef request, WKURLResponseRef redirectResponse, const void* clientInfo)
+{
+ return static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->willSendRequestForFrame(page, frame, identifier, request, redirectResponse);
+}
+
+void InjectedBundlePage::didReceiveResponseForResource(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, WKURLResponseRef response, const void* clientInfo)
{
- return static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->shouldLoadResourceForFrame(frame);
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didReceiveResponseForResource(page, frame, identifier, response);
}
+void InjectedBundlePage::didReceiveContentLengthForResource(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, uint64_t length, const void* clientInfo)
+{
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didReceiveContentLengthForResource(page, frame, identifier, length);
+}
+
+void InjectedBundlePage::didFinishLoadForResource(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, const void* clientInfo)
+{
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didFinishLoadForResource(page, frame, identifier);
+}
+
+void InjectedBundlePage::didFailLoadForResource(WKBundlePageRef page, WKBundleFrameRef frame, uint64_t identifier, WKErrorRef error, const void* clientInfo)
+{
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didFinishLoadForResource(page, frame, identifier, error);
+}
void InjectedBundlePage::didStartProvisionalLoadForFrame(WKBundleFrameRef frame)
{
@@ -574,9 +612,46 @@ void InjectedBundlePage::didRunInsecureContentForFrame(WKBundleFrameRef frame)
{
}
-bool InjectedBundlePage::shouldLoadResourceForFrame(WKBundleFrameRef frame)
+void InjectedBundlePage::didInitiateLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef, bool)
+{
+}
+
+// Resource Load Client Callbacks
+
+WKURLRequestRef InjectedBundlePage::willSendRequestForFrame(WKBundlePageRef, WKBundleFrameRef, uint64_t, WKURLRequestRef request, WKURLResponseRef)
+{
+ if (InjectedBundle::shared().isTestRunning() && InjectedBundle::shared().layoutTestController()->willSendRequestReturnsNull())
+ return 0;
+
+ string urlString = toSTD(adoptWK(WKURLCopyString(adoptWK(WKURLRequestCopyURL(request)).get())));
+ WebCore::KURL url(WebCore::ParsedURLString, urlString.c_str());
+
+ if (!url.host().isEmpty()
+ && (equalIgnoringCase(url.protocol(), "http") || (equalIgnoringCase(url.protocol(), "https")))
+ && (url.host() != "127.0.0.1")
+ && (url.host() != "255.255.255.255") // used in some tests that expect to get back an error
+ && (!equalIgnoringCase(url.host(), "localhost"))) {
+ InjectedBundle::shared().os() << "Blocked access to external URL " << urlString << "\n";
+ return 0;
+ }
+
+ return request;
+}
+
+void InjectedBundlePage::didReceiveResponseForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t, WKURLResponseRef)
+{
+}
+
+void InjectedBundlePage::didReceiveContentLengthForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t, uint64_t)
+{
+}
+
+void InjectedBundlePage::didFinishLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t)
+{
+}
+
+void InjectedBundlePage::didFailLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t, WKErrorRef)
{
- return true;
}
// UI Client Callbacks
diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
index 3b99109..2c3e9df 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
+++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
@@ -63,7 +63,13 @@ private:
static void didHandleOnloadEventsForFrame(WKBundlePageRef, WKBundleFrameRef, const void*);
static void didDisplayInsecureContentForFrame(WKBundlePageRef, WKBundleFrameRef, WKTypeRef*, const void*);
static void didRunInsecureContentForFrame(WKBundlePageRef, WKBundleFrameRef, WKTypeRef*, const void*);
- static bool shouldLoadResourceForFrame(WKBundlePageRef, WKBundleFrameRef, WKStringRef, const void*);
+ static void didInitiateLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef, bool pageLoadIsProvisional, const void*);
+ static WKURLRequestRef willSendRequestForFrame(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef, WKURLResponseRef, const void*);
+ static void didReceiveResponseForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLResponseRef, const void*);
+ static void didReceiveContentLengthForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, uint64_t length, const void*);
+ static void didFinishLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, const void*);
+ static void didFailLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKErrorRef, const void*);
+
void didStartProvisionalLoadForFrame(WKBundleFrameRef);
void didReceiveServerRedirectForProvisionalLoadForFrame(WKBundleFrameRef);
void didFailProvisionalLoadWithErrorForFrame(WKBundleFrameRef, WKErrorRef);
@@ -79,7 +85,14 @@ private:
void didHandleOnloadEventsForFrame(WKBundleFrameRef);
void didDisplayInsecureContentForFrame(WKBundleFrameRef);
void didRunInsecureContentForFrame(WKBundleFrameRef);
- bool shouldLoadResourceForFrame(WKBundleFrameRef);
+
+ // Resource Load Client
+ void didInitiateLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef, bool pageLoadIsProvisional);
+ WKURLRequestRef willSendRequestForFrame(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef, WKURLResponseRef);
+ void didReceiveResponseForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKURLResponseRef);
+ void didReceiveContentLengthForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, uint64_t length);
+ void didFinishLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier);
+ void didFailLoadForResource(WKBundlePageRef, WKBundleFrameRef, uint64_t identifier, WKErrorRef);
// UI Client
static void willAddMessageToConsole(WKBundlePageRef, WKStringRef message, uint32_t lineNumber, const void* clientInfo);
diff --git a/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp b/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
index 13c7b10..4707ed8 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
@@ -32,6 +32,7 @@
#include <WebKit2/WKBundleBackForwardList.h>
#include <WebKit2/WKBundleFrame.h>
#include <WebKit2/WKBundleFramePrivate.h>
+#include <WebKit2/WKBundleInspector.h>
#include <WebKit2/WKBundlePagePrivate.h>
#include <WebKit2/WKBundleScriptWorld.h>
#include <WebKit2/WKBundlePrivate.h>
@@ -96,6 +97,7 @@ LayoutTestController::LayoutTestController()
, m_waitToDump(false)
, m_testRepaint(false)
, m_testRepaintSweepHorizontally(false)
+ , m_willSendRequestReturnsNull(false)
{
platformInitialize();
}
@@ -309,6 +311,27 @@ void LayoutTestController::makeWindowObject(JSContextRef context, JSObjectRef wi
setProperty(context, windowObject, "layoutTestController", this, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, exception);
}
+void LayoutTestController::showWebInspector()
+{
+ WKBundleInspectorShow(WKBundlePageGetInspector(InjectedBundle::shared().page()->page()));
+}
+
+void LayoutTestController::closeWebInspector()
+{
+ WKBundleInspectorClose(WKBundlePageGetInspector(InjectedBundle::shared().page()->page()));
+}
+
+void LayoutTestController::evaluateInWebInspector(long callID, JSStringRef script)
+{
+ WKRetainPtr<WKStringRef> scriptWK = toWK(script);
+ WKBundleInspectorEvaluateScriptForTest(WKBundlePageGetInspector(InjectedBundle::shared().page()->page()), callID, scriptWK.get());
+}
+
+void LayoutTestController::setTimelineProfilingEnabled(bool enabled)
+{
+ WKBundleInspectorSetPageProfilingEnabled(WKBundlePageGetInspector(InjectedBundle::shared().page()->page()), enabled);
+}
+
typedef WTF::HashMap<unsigned, WKRetainPtr<WKBundleScriptWorldRef> > WorldMap;
static WorldMap& worldMap()
{
@@ -349,4 +372,11 @@ void LayoutTestController::evaluateScriptInIsolatedWorld(JSContextRef context, u
JSEvaluateScript(jsContext, script, 0, 0, 0, 0);
}
+void LayoutTestController::setPOSIXLocale(JSStringRef locale)
+{
+ char localeBuf[32];
+ JSStringGetUTF8CString(locale, localeBuf, sizeof(localeBuf));
+ setlocale(LC_ALL, localeBuf);
+}
+
} // namespace WTR
diff --git a/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h b/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
index 1f81970..9271124 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
+++ b/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
@@ -126,6 +126,16 @@ public:
void evaluateScriptInIsolatedWorld(JSContextRef, unsigned worldID, JSStringRef script);
static unsigned worldIDForWorld(WKBundleScriptWorldRef);
+ void showWebInspector();
+ void closeWebInspector();
+ void evaluateInWebInspector(long callId, JSStringRef script);
+ void setTimelineProfilingEnabled(bool);
+
+ void setPOSIXLocale(JSStringRef);
+
+ bool willSendRequestReturnsNull() { return m_willSendRequestReturnsNull; }
+ void setWillSendRequestReturnsNull(bool f) { m_willSendRequestReturnsNull = f; }
+
private:
static const double waitToDumpWatchdogTimerInterval;
@@ -148,6 +158,8 @@ private:
bool m_testRepaint;
bool m_testRepaintSweepHorizontally;
+ bool m_willSendRequestReturnsNull;
+
PlatformTimerRef m_waitToDumpWatchdogTimer;
};
diff --git a/Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp b/Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp
index d8166d0..9c4bc68 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp
@@ -29,10 +29,13 @@
#include "ActivateFonts.h"
+#include <QApplication>
#include <QByteArray>
#include <QDir>
+#include <QWindowsStyle>
#ifdef Q_WS_X11
+#include <QX11Info>
#include <fontconfig/fontconfig.h>
#endif
@@ -43,6 +46,8 @@ namespace WTR {
void activateFonts()
{
#if defined(Q_WS_X11)
+ FcInit();
+
static int numFonts = -1;
// Some test cases may add or remove application fonts (via @font-face).
@@ -78,6 +83,18 @@ void activateFonts()
appFontSet = FcConfigGetFonts(config, FcSetApplication);
numFonts = appFontSet->nfont;
#endif
+
+ QApplication::setGraphicsSystem("raster");
+ QApplication::setStyle(new QWindowsStyle);
+
+ QFont f("Sans Serif");
+ f.setPointSize(9);
+ f.setWeight(QFont::Normal);
+ f.setStyle(QFont::StyleNormal);
+ QApplication::setFont(f);
+
+ QX11Info::setAppDpiX(0, 96);
+ QX11Info::setAppDpiY(0, 96);
}
}
diff --git a/Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro b/Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro
index 92d31b8..24db4b8 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro
+++ b/Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro
@@ -43,11 +43,11 @@ HEADERS += \
OBJECTS_DIR = obj/release
}
-include(../../../../WebKit.pri)
+include(../../../../Source/WebKit.pri)
include(../../../../Source/JavaScriptCore/JavaScriptCore.pri)
-addJavaScriptCoreLib(../../../../Source/JavaScriptCore)
+addJavaScriptCoreLib(../../../JavaScriptCore)
include(../../../../Source/WebKit2/WebKit2.pri)
-addWebKit2Lib(../../../../Source/WebKit2)
+addWebKit2Lib(../../../WebKit2)
INCLUDEPATH += \
$$PWD \
@@ -56,6 +56,8 @@ INCLUDEPATH += \
$$PWD/../Bindings \
$$PWD/../../../../Source/JavaScriptCore \
$$PWD/../../../../Source/JavaScriptCore/wtf \
+ $$PWD/../../../../Source/WebCore \
+ $$PWD/../../../../Source/WebCore/platform/text \
$$PWD/../../../../Source/WebKit2 \
$$PWD/../../../../Source/WebKit2/Shared \
$$GENERATED_SOURCES_DIR
diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp
index e856176..6f5b9a7 100644
--- a/Tools/WebKitTestRunner/TestController.cpp
+++ b/Tools/WebKitTestRunner/TestController.cpp
@@ -29,9 +29,10 @@
#include "StringFunctions.h"
#include "TestInvocation.h"
#include <cstdio>
-#include <WebKit2/WKPageGroup.h>
#include <WebKit2/WKContextPrivate.h>
+#include <WebKit2/WKPageGroup.h>
#include <WebKit2/WKPreferencesPrivate.h>
+#include <WebKit2/WKRetainPtr.h>
#include <wtf/PassOwnPtr.h>
namespace WTR {
@@ -103,6 +104,13 @@ static bool runBeforeUnloadConfirmPanel(WKPageRef page, WKStringRef message, WKF
return true;
}
+static unsigned long long exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef, WKStringRef, unsigned long long, unsigned long long, unsigned long long, const void*)
+{
+ static const unsigned long long defaultQuota = 5 * 1024 * 1024;
+ return defaultQuota;
+}
+
+
void TestController::runModal(WKPageRef page, const void* clientInfo)
{
runModal(static_cast<PlatformWebView*>(const_cast<void*>(clientInfo)));
@@ -148,7 +156,7 @@ WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKDictionaryRef, WK
runBeforeUnloadConfirmPanel,
0, // didDraw
0, // pageDidScroll
- 0, // exceededDatabaseQuota
+ exceededDatabaseQuota,
0, // runOpenPanel
0, // decidePolicyForGeolocationPermissionRequest
0, // headerHeight
@@ -157,6 +165,7 @@ WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKDictionaryRef, WK
0, // drawFooter
0, // printFrame
runModal,
+ 0, // didCompleteRubberBandForMainFrame
};
WKPageSetPageUIClient(newPage, &otherPageUIClient);
@@ -164,6 +173,18 @@ WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKDictionaryRef, WK
return newPage;
}
+const char* TestController::libraryPathForTesting()
+{
+ // FIXME: This may not be sufficient to prevent interactions/crashes
+ // when running more than one copy of DumpRenderTree.
+ // See https://bugs.webkit.org/show_bug.cgi?id=10906
+ char* dumpRenderTreeTemp = getenv("DUMPRENDERTREE_TEMP");
+ if (dumpRenderTreeTemp)
+ return dumpRenderTreeTemp;
+ return platformLibraryPathForTesting();
+}
+
+
void TestController::initialize(int argc, const char* argv[])
{
platformInitialize();
@@ -219,6 +240,15 @@ void TestController::initialize(int argc, const char* argv[])
m_pageGroup.adopt(WKPageGroupCreateWithIdentifier(pageGroupIdentifier.get()));
m_context.adopt(WKContextCreateWithInjectedBundlePath(injectedBundlePath()));
+
+ const char* path = libraryPathForTesting();
+ if (path) {
+ Vector<char> databaseDirectory(strlen(path) + strlen("/Databases") + 1);
+ sprintf(databaseDirectory.data(), "%s%s", path, "/Databases");
+ WKRetainPtr<WKStringRef> databaseDirectoryWK(AdoptWK, WKStringCreateWithUTF8CString(databaseDirectory.data()));
+ WKContextSetDatabaseDirectory(m_context.get(), databaseDirectoryWK.get());
+ }
+
platformInitializeContext();
WKContextInjectedBundleClient injectedBundleClient = {
@@ -259,7 +289,7 @@ void TestController::initialize(int argc, const char* argv[])
runBeforeUnloadConfirmPanel,
0, // didDraw
0, // pageDidScroll
- 0, // exceededDatabaseQuota
+ exceededDatabaseQuota,
0, // runOpenPanel
0, // decidePolicyForGeolocationPermissionRequest
0, // headerHeight
@@ -268,6 +298,7 @@ void TestController::initialize(int argc, const char* argv[])
0, // drawFooter
0, // printFrame
0, // runModal
+ 0, // didCompleteRubberBandForMainFrame
};
WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient);
@@ -317,6 +348,8 @@ bool TestController::resetStateToConsistentValues()
WKPreferencesSetXSSAuditorEnabled(preferences, false);
WKPreferencesSetDeveloperExtrasEnabled(preferences, true);
WKPreferencesSetJavaScriptCanOpenWindowsAutomatically(preferences, true);
+ WKPreferencesSetJavaScriptCanAccessClipboard(preferences, true);
+ WKPreferencesSetDOMPasteAllowed(preferences, true);
static WKStringRef standardFontFamily = WKStringCreateWithUTF8CString("Times");
static WKStringRef cursiveFontFamily = WKStringCreateWithUTF8CString("Apple Chancery");
diff --git a/Tools/WebKitTestRunner/TestController.h b/Tools/WebKitTestRunner/TestController.h
index 65305a2..fe37952 100644
--- a/Tools/WebKitTestRunner/TestController.h
+++ b/Tools/WebKitTestRunner/TestController.h
@@ -90,6 +90,9 @@ private:
static void runModal(WKPageRef, const void* clientInfo);
static void runModal(PlatformWebView*);
+ static const char* libraryPathForTesting();
+ static const char* platformLibraryPathForTesting();
+
OwnPtr<TestInvocation> m_currentInvocation;
bool m_dumpPixels;
diff --git a/Tools/WebKitTestRunner/TestInvocation.cpp b/Tools/WebKitTestRunner/TestInvocation.cpp
index 26ecfc0..3af184a 100644
--- a/Tools/WebKitTestRunner/TestInvocation.cpp
+++ b/Tools/WebKitTestRunner/TestInvocation.cpp
@@ -31,6 +31,7 @@
#include <climits>
#include <cstdio>
#include <WebKit2/WKContextPrivate.h>
+#include <WebKit2/WKInspector.h>
#include <WebKit2/WKRetainPtr.h>
#include <wtf/OwnArrayPtr.h>
#include <wtf/PassOwnArrayPtr.h>
@@ -113,6 +114,11 @@ static void sizeWebViewForCurrentTest(char* pathOrURL)
TestController::shared().mainWebView()->resizeTo(normalWidth, normalHeight);
}
+static bool shouldOpenWebInspector(const char* pathOrURL)
+{
+ return strstr(pathOrURL, "inspector/");
+}
+
void TestInvocation::invoke()
{
sizeWebViewForCurrentTest(m_pathOrURL);
@@ -130,17 +136,18 @@ void TestInvocation::invoke()
return;
}
+ if (shouldOpenWebInspector(m_pathOrURL))
+ WKInspectorShow(WKPageGetInspector(TestController::shared().mainWebView()->page()));
+
WKPageLoadURL(TestController::shared().mainWebView()->page(), m_url.get());
TestController::shared().runUntil(m_gotFinalMessage, TestController::LongTimeout);
- if (!m_gotFinalMessage) {
+ if (!m_gotFinalMessage)
dump("Timed out waiting for final message from web process\n");
- return;
- }
- if (m_error) {
+ else if (m_error)
dump("FAIL\n");
- return;
- }
+
+ WKInspectorClose(WKPageGetInspector(TestController::shared().mainWebView()->page()));
}
void TestInvocation::dump(const char* stringToDump)
diff --git a/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj b/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj
index a15fe41..8428403 100644
--- a/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj
+++ b/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj
@@ -32,6 +32,8 @@
6510A78A11EC643800410867 /* WebKitWeightWatcher700.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A77F11EC643800410867 /* WebKitWeightWatcher700.ttf */; };
6510A78B11EC643800410867 /* WebKitWeightWatcher800.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A78011EC643800410867 /* WebKitWeightWatcher800.ttf */; };
6510A78C11EC643800410867 /* WebKitWeightWatcher900.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A78111EC643800410867 /* WebKitWeightWatcher900.ttf */; };
+ 65DD1D9612FFE798004B5285 /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65DD1D9512FFE798004B5285 /* WebCore.framework */; };
+ 65DE432512FFE84000171BCA /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65DD1D9512FFE798004B5285 /* WebCore.framework */; };
65EB85A011EC67CC0034D300 /* ActivateFonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65EB859F11EC67CC0034D300 /* ActivateFonts.mm */; };
BC14E4DB120E02D000826C0C /* GCController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4D9120E02D000826C0C /* GCController.cpp */; };
BC14E4EA120E03D800826C0C /* JSGCController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4E8120E03D800826C0C /* JSGCController.cpp */; };
@@ -86,6 +88,7 @@
6510A77F11EC643800410867 /* WebKitWeightWatcher700.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = WebKitWeightWatcher700.ttf; path = fonts/WebKitWeightWatcher700.ttf; sourceTree = "<group>"; };
6510A78011EC643800410867 /* WebKitWeightWatcher800.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = WebKitWeightWatcher800.ttf; path = fonts/WebKitWeightWatcher800.ttf; sourceTree = "<group>"; };
6510A78111EC643800410867 /* WebKitWeightWatcher900.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = WebKitWeightWatcher900.ttf; path = fonts/WebKitWeightWatcher900.ttf; sourceTree = "<group>"; };
+ 65DD1D9512FFE798004B5285 /* WebCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
65EB859D11EC67CC0034D300 /* ActivateFonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivateFonts.h; sourceTree = "<group>"; };
65EB859F11EC67CC0034D300 /* ActivateFonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ActivateFonts.mm; sourceTree = "<group>"; };
8DD76FA10486AA7600D96B5E /* WebKitTestRunner */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WebKitTestRunner; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -144,6 +147,7 @@
BC7934A511906584005EA8E2 /* Cocoa.framework in Frameworks */,
BC7934AC1190658C005EA8E2 /* WebKit2.framework in Frameworks */,
BCDA2B9A1191051F00C3BC47 /* JavaScriptCore.framework in Frameworks */,
+ 65DD1D9612FFE798004B5285 /* WebCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -154,6 +158,7 @@
BC25193E11D15D8B002EBC01 /* Cocoa.framework in Frameworks */,
BC25193F11D15D8B002EBC01 /* WebKit2.framework in Frameworks */,
BC25194011D15D8B002EBC01 /* JavaScriptCore.framework in Frameworks */,
+ 65DE432512FFE84000171BCA /* WebCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -195,6 +200,7 @@
BC7934A411906584005EA8E2 /* Cocoa.framework */,
BC7934AB1190658C005EA8E2 /* WebKit2.framework */,
BCDA2B991191051F00C3BC47 /* JavaScriptCore.framework */,
+ 65DD1D9512FFE798004B5285 /* WebCore.framework */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
diff --git a/Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h b/Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h
index 9d508ed..1e540cc 100644
--- a/Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h
+++ b/Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h
@@ -34,4 +34,5 @@
#define min min
#endif
+#include <wtf/Platform.h>
#include <WebKit2/WebKit2.h>
diff --git a/Tools/WebKitTestRunner/mac/TestControllerMac.mm b/Tools/WebKitTestRunner/mac/TestControllerMac.mm
index 8107890..8ceabc1 100644
--- a/Tools/WebKitTestRunner/mac/TestControllerMac.mm
+++ b/Tools/WebKitTestRunner/mac/TestControllerMac.mm
@@ -71,4 +71,9 @@ void TestController::runModal(PlatformWebView* view)
[NSApp runModalForWindow:window];
}
+const char* TestController::platformLibraryPathForTesting()
+{
+ return [[@"~/Library/Application Support/DumpRenderTree" stringByExpandingTildeInPath] UTF8String];
+}
+
} // namespace WTR
diff --git a/Tools/WebKitTestRunner/qt/TestControllerQt.cpp b/Tools/WebKitTestRunner/qt/TestControllerQt.cpp
index df977fb..30a1b5c 100644
--- a/Tools/WebKitTestRunner/qt/TestControllerQt.cpp
+++ b/Tools/WebKitTestRunner/qt/TestControllerQt.cpp
@@ -133,6 +133,11 @@ void TestController::runModal(PlatformWebView*)
// FIXME: Need to implement this to test showModalDialog.
}
+const char* TestController::platformLibraryPathForTesting()
+{
+ return 0;
+}
+
#include "TestControllerQt.moc"
} // namespace WTR
diff --git a/Tools/WebKitTestRunner/qt/WebKitTestRunner.pro b/Tools/WebKitTestRunner/qt/WebKitTestRunner.pro
index 73ab4b0..de648ea 100644
--- a/Tools/WebKitTestRunner/qt/WebKitTestRunner.pro
+++ b/Tools/WebKitTestRunner/qt/WebKitTestRunner.pro
@@ -6,7 +6,7 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
GENERATED_SOURCES_DIR = ../generated
-include(../../../WebKit.pri)
+include(../../../Source/WebKit.pri)
!CONFIG(release, debug|release) {
OBJECTS_DIR = obj/debug
@@ -68,4 +68,4 @@ linux-* {
}
include(../../../Source/JavaScriptCore/JavaScriptCore.pri)
-addJavaScriptCoreLib(../../../Source/JavaScriptCore)
+addJavaScriptCoreLib(../../JavaScriptCore)
diff --git a/Tools/WebKitTestRunner/win/TestControllerWin.cpp b/Tools/WebKitTestRunner/win/TestControllerWin.cpp
index 08f188f..5af5503 100644
--- a/Tools/WebKitTestRunner/win/TestControllerWin.cpp
+++ b/Tools/WebKitTestRunner/win/TestControllerWin.cpp
@@ -157,4 +157,9 @@ void TestController::runModal(PlatformWebView*)
// FIXME: Need to implement this to test showModalDialog.
}
+const char* TestController::platformLibraryPathForTesting()
+{
+ return 0;
+}
+
} // namespace WTR
diff --git a/Tools/wx/browser/wscript b/Tools/wx/browser/wscript
index 4fb00b4..7c5aeee 100644
--- a/Tools/wx/browser/wscript
+++ b/Tools/wx/browser/wscript
@@ -30,7 +30,7 @@ import sys
from settings import *
include_paths = [os.path.join(wk_root, 'Source', 'WebCore', 'bindings', 'wx'),
- os.path.join(wk_root, 'WebKit', 'wx')]
+ os.path.join(wk_root, 'Source', 'WebKit', 'wx')]
def set_options(opt):
common_set_options(opt)
diff --git a/Tools/wx/build/build_utils.py b/Tools/wx/build/build_utils.py
index bf440a6..569703d 100644
--- a/Tools/wx/build/build_utils.py
+++ b/Tools/wx/build/build_utils.py
@@ -120,7 +120,7 @@ def update_wx_deps(conf, wk_root, msvc_version='msvc2008'):
sys.exit(1)
# since this module is still experimental
- wxpy_dir = os.path.join(wk_root, 'WebKit', 'wx', 'bindings', 'python')
+ wxpy_dir = os.path.join(wk_root, 'Source', 'WebKit', 'wx', 'bindings', 'python')
swig_module = download_if_newer('http://wxwebkit.wxcommunity.com/downloads/deps/swig.py.txt', wxpy_dir)
if swig_module:
shutil.copy(os.path.join(wxpy_dir, 'swig.py.txt'), os.path.join(wxpy_dir, 'swig.py'))
diff --git a/Tools/wx/build/settings.py b/Tools/wx/build/settings.py
index 64c2693..2b757c4 100644
--- a/Tools/wx/build/settings.py
+++ b/Tools/wx/build/settings.py
@@ -86,7 +86,6 @@ jscore_dirs = [
'interpreter',
'jit',
'parser',
- 'pcre',
'profiler',
'runtime',
'wtf',
@@ -102,7 +101,6 @@ webcore_dirs = [
'Source/WebCore/bindings/cpp',
'Source/WebCore/bindings/generic',
'Source/WebCore/bindings/js',
- 'Source/WebCore/bindings/js/specialization',
'Source/WebCore/bridge',
'Source/WebCore/bridge/c',
'Source/WebCore/bridge/jsc',
@@ -116,6 +114,7 @@ webcore_dirs = [
'Source/WebCore/html',
'Source/WebCore/html/canvas',
'Source/WebCore/html/parser',
+ 'Source/WebCore/html/shadow',
'Source/WebCore/inspector',
'Source/WebCore/loader',
'Source/WebCore/loader/appcache',
diff --git a/WebKitLibraries/ChangeLog b/WebKitLibraries/ChangeLog
index 7b91aba..c6dbfaf 100644
--- a/WebKitLibraries/ChangeLog
+++ b/WebKitLibraries/ChangeLog
@@ -1,3 +1,80 @@
+2011-02-08 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ [WIN] Add missing forward declarations in WebKitSystemInterface.h
+ https://bugs.webkit.org/show_bug.cgi?id=53889
+
+ * win/include/WebKitSystemInterface/WebKitSystemInterface.h:
+
+2011-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Bump Windows minimum system requirement to XPSP2
+ https://bugs.webkit.org/show_bug.cgi?id=53807
+
+ * win/tools/vsprops/common.vsprops:
+
+2011-02-03 James Kozianski <koz@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add navigator.registerProtocolHandler behind a flag.
+ https://bugs.webkit.org/show_bug.cgi?id=52609
+
+ * win/tools/vsprops/FeatureDefines.vsprops:
+ * win/tools/vsprops/FeatureDefinesCairo.vsprops:
+
+2011-02-02 Steve Lacey <sjl@chromium.org>
+
+ Reviewed by Eric Carlson.
+
+ Implement basic media statistics on media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=53322
+
+ * win/tools/vsprops/FeatureDefines.vsprops:
+ * win/tools/vsprops/FeatureDefinesCairo.vsprops:
+
+2011-01-28 Anders Carlsson <andersca@apple.com>
+
+ Build fix.
+
+ Update WKSI.
+
+ * WebKitSystemInterface.h:
+ * libWebKitSystemInterfaceLeopard.a:
+ * libWebKitSystemInterfaceSnowLeopard.a:
+
+2011-01-26 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
+ <rdar://problem/8821760>
+
+ Reviewed by Antti Koivisto.
+
+ * WebKitSystemInterface.h:
+ New methods added for HTTP pipelining support.
+ (WKGetHTTPPipeliningPriority): Added.
+ (WKSetHTTPPipeliningPriority): Added.
+ Unrelated methods added after updating the header.
+ (WKMakeScrollbarPainter): Added.
+ (WKScrollbarPainterPaint): Added.
+ * libWebKitSystemInterfaceLeopard.a: Updated.
+ * libWebKitSystemInterfaceSnowLeopard.a: Updated.
+
+2011-01-24 Jer Noble <jer.noble@apple.com>
+
+ Reviewed by Eric Carlson.
+
+ REGRESSION (r72119): Audio never plays on Star Wars intro animation
+ https://bugs.webkit.org/show_bug.cgi?id=52467
+
+ Add wkGetQuickTimeMIMETypeList() function.
+
+ * win/include/WebKitSystemInterface/WebKitSystemInterface.h:
+ * win/lib/WebKitSystemInterface.lib:
+
2011-01-18 Anders Carlsson <andersca@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKitLibraries/WebKitSystemInterface.h b/WebKitLibraries/WebKitSystemInterface.h
index d232229..5f2dddb 100644
--- a/WebKitLibraries/WebKitSystemInterface.h
+++ b/WebKitLibraries/WebKitSystemInterface.h
@@ -308,6 +308,11 @@ uint32_t WKCARemoteLayerClientGetClientId(WKCARemoteLayerClientRef);
void WKCARemoteLayerClientSetLayer(WKCARemoteLayerClientRef, CALayer *);
CALayer *WKCARemoteLayerClientGetLayer(WKCARemoteLayerClientRef);
+@class CARenderer;
+
+void WKCARendererAddChangeNotificationObserver(CARenderer *, void (*callback)(void*), void* context);
+void WKCARendererRemoveChangeNotificationObserver(CARenderer *, void (*callback)(void*), void* context);
+
typedef struct __WKWindowBounceAnimationContext *WKWindowBounceAnimationContextRef;
WKWindowBounceAnimationContextRef WKWindowBounceAnimationContextCreate(NSWindow *window);
@@ -327,6 +332,8 @@ UInt8 WKGetNSEventKeyChar(NSEvent *);
void WKSetCAAnimationValueFunction(CAPropertyAnimation*, NSString* function);
unsigned WKInitializeMaximumHTTPConnectionCountPerHost(unsigned preferredConnectionCount);
+int WKGetHTTPPipeliningPriority(NSURLRequest *);
+void WKSetHTTPPipeliningPriority(NSMutableURLRequest *, int priority);
void WKSetCONNECTProxyForStream(CFReadStreamRef, CFStringRef proxyHost, CFNumberRef proxyPort);
void WKSetCONNECTProxyAuthorizationForStream(CFReadStreamRef, CFStringRef proxyAuthorizationString);
@@ -377,6 +384,13 @@ bool WKSandboxExtensionInvalidate(WKSandboxExtensionRef sandboxExtension);
const char* WKSandboxExtensionGetSerializedFormat(WKSandboxExtensionRef sandboxExtension, size_t* length);
WKSandboxExtensionRef WKSandboxExtensionCreateFromSerializedFormat(const char* serializationFormat, size_t length);
+typedef struct __WKScrollbarPainter *WKScrollbarPainterRef;
+WKScrollbarPainterRef WKMakeScrollbarPainter(int controlSize, bool isHorizontal);
+void WKScrollbarPainterPaint(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, CGRect frameRect);
+int WKScrollbarThickness(int controlSize);
+int WKScrollbarMinimumThumbLength(WKScrollbarPainterRef);
+int WKScrollbarMinimumTotalLengthNeededForThumb(WKScrollbarPainterRef);
+
#endif
#ifdef __cplusplus
diff --git a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
index dd0d652..55887f8 100644
--- a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
+++ b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
Binary files differ
diff --git a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
index d2e5a5f..667c394 100644
--- a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
+++ b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
Binary files differ
diff --git a/WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h b/WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h
index 744f80b..7f24a30 100644
--- a/WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h
+++ b/WebKitLibraries/win/include/WebKitSystemInterface/WebKitSystemInterface.h
@@ -35,6 +35,7 @@ struct WKCACFContext;
struct WKCACFUpdateRectEnumerator;
typedef struct _CACFLayer* CACFLayerRef;
+typedef const struct __CFArray* CFArrayRef;
typedef const struct __CFData* CFDataRef;
typedef const struct __CFString* CFStringRef;
typedef double CFTimeInterval;
@@ -46,6 +47,7 @@ typedef CGFontIndex CGGlyph;
typedef wchar_t UChar;
typedef struct _CFURLResponse* CFURLResponseRef;
typedef struct OpaqueCFHTTPCookieStorage* CFHTTPCookieStorageRef;
+typedef struct __CFDictionary* CFMutableDictionaryRef;
typedef struct _CFURLRequest* CFMutableURLRequestRef;
typedef const struct _CFURLRequest* CFURLRequestRef;
typedef struct __CFHTTPMessage* CFHTTPMessageRef;
@@ -169,6 +171,9 @@ CFURLRequestRef wkCFURLRequestCreateFromSerializableRepresentation(CFDictionaryR
CFDictionaryRef wkCFURLResponseCreateSerializableRepresentation(CFURLResponseRef cfResponse, CFTypeRef tokenNull);
CFURLResponseRef wkCFURLResponseCreateFromSerializableRepresentation(CFDictionaryRef representation, CFTypeRef tokenNull);
+typedef void (*wkQuickTimeMIMETypeCallBack)(const char* mimeType);
+void wkGetQuickTimeMIMETypeList(wkQuickTimeMIMETypeCallBack);
+
typedef enum {
WKMediaUIPartFullscreenButton = 0,
WKMediaUIPartMuteButton,
diff --git a/WebKitLibraries/win/lib/WebKitSystemInterface.lib b/WebKitLibraries/win/lib/WebKitSystemInterface.lib
index f1af3b0..90e9ceb 100644
--- a/WebKitLibraries/win/lib/WebKitSystemInterface.lib
+++ b/WebKitLibraries/win/lib/WebKitSystemInterface.lib
Binary files differ
diff --git a/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops b/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
index eaa660b..f30932d 100644
--- a/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
@@ -9,7 +9,7 @@
>
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
+ PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_REGISTER_PROTOCOL_HANDLER);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
/>
<UserMacro
Name="ENABLE_3D_CANVAS"
@@ -152,6 +152,11 @@
PerformEnvironmentSet="true"
/>
<UserMacro
+ Name="ENABLE_REGISTER_PROTOCOL_HANDLER"
+ Value=""
+ PerformEnvironmentSet="true"
+ />
+ <UserMacro
Name="ENABLE_SHARED_WORKERS"
Value="ENABLE_SHARED_WORKERS"
PerformEnvironmentSet="true"
@@ -197,6 +202,11 @@
PerformEnvironmentSet="true"
/>
<UserMacro
+ Name="ENABLE_MEDIA_STATISTICS"
+ Value="ENABLE_MEDIA_STATISTICS"
+ PerformEnvironmentSet="true"
+ />
+ <UserMacro
Name="ENABLE_WEB_AUDIO"
Value=""
PerformEnvironmentSet="true"
diff --git a/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops b/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
index 1dd6532..72914e2 100644
--- a/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
@@ -9,7 +9,7 @@
>
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
+ PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_REGISTER_PROTOCOL_HANDLER);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
/>
<UserMacro
Name="ENABLE_3D_CANVAS"
@@ -152,6 +152,11 @@
PerformEnvironmentSet="true"
/>
<UserMacro
+ Name="ENABLE_REGISTER_PROTOCOL_HANDLER"
+ Value=""
+ PerformEnvironmentSet="true"
+ />
+ <UserMacro
Name="ENABLE_SHARED_WORKERS"
Value="ENABLE_SHARED_WORKERS"
PerformEnvironmentSet="true"
@@ -197,6 +202,11 @@
PerformEnvironmentSet="true"
/>
<UserMacro
+ Name="ENABLE_MEDIA_STATISTICS"
+ Value=""
+ PerformEnvironmentSet="true"
+ />
+ <UserMacro
Name="ENABLE_WEB_AUDIO"
Value=""
PerformEnvironmentSet="true"
diff --git a/WebKitLibraries/win/tools/vsprops/common.vsprops b/WebKitLibraries/win/tools/vsprops/common.vsprops
index 46e73b6..e5ff719 100644
--- a/WebKitLibraries/win/tools/vsprops/common.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/common.vsprops
@@ -9,7 +9,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/GS"
- PreprocessorDefinitions="WIN32;_WINDOWS;WINVER=0x501;_WIN32_WINNT=0x501;_WIN32_IE=0x600;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1;__PRODUCTION__=0$(ProductionBuild);_HAS_EXCEPTIONS=0;BUILDING_$(ProjectName)"
+ PreprocessorDefinitions="WIN32;_WINDOWS;WINVER=0x502;_WIN32_WINNT=0x502;_WIN32_IE=0x603;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1;__PRODUCTION__=0$(ProductionBuild);_HAS_EXCEPTIONS=0;BUILDING_$(ProjectName)"
ExceptionHandling="0"
RuntimeTypeInfo="false"
WarningLevel="4"